From 916bbf8d1719e7b3a34ab9030ab5b8e1d647a021 Mon Sep 17 00:00:00 2001 From: Gautham Varadarajan Date: Mon, 18 Apr 2022 10:37:28 -0400 Subject: [PATCH 1/2] RSDK-223 - support translational joints for arm components --- component/arm/arm.go | 16 +- component/arm/arm_test.go | 13 +- component/arm/client.go | 12 +- component/arm/client_test.go | 51 +- component/arm/eva/eva.go | 14 +- component/arm/fake/arm.go | 17 +- component/arm/fake/arm_ik.go | 23 +- component/arm/server.go | 5 +- component/arm/server_test.go | 60 ++- component/arm/universalrobots/ur.go | 12 +- component/arm/varm/v1.go | 42 +- component/arm/vx300s/vx300s.go | 32 +- component/arm/wx250s/wx250s.go | 21 +- component/arm/xarm/xarm.go | 2 +- component/arm/xarm/xarm_comm.go | 27 +- component/arm/yahboom/dofbot.go | 34 +- component/arm/yahboom/dofbot_test.go | 11 +- grpc/client/client_test.go | 16 +- motionplan/cBiRRTPlan.go | 38 +- motionplan/cBiRRTPlan_test.go | 14 +- motionplan/collision_test.go | 4 +- motionplan/constraint.go | 12 +- motionplan/constraint_test.go | 8 +- motionplan/kinematic.go | 13 +- motionplan/kinematic_test.go | 116 ++++- motionplan/nloptInverseKinematics.go | 5 +- motionplan/nloptInverseKinematics_test.go | 29 +- proto/api/component/arm/v1/arm.pb.go | 499 +++++++++++++------ proto/api/component/arm/v1/arm.proto | 19 + referenceframe/dynamic_frame_system_test.go | 6 +- referenceframe/frame.go | 33 +- referenceframe/frame_test.go | 45 +- referenceframe/model_test.go | 4 +- referenceframe/primitives.go | 95 +++- referenceframe/primitives_test.go | 26 +- samples/chess/cmd.go | 4 +- samples/resetbox/arduino/arduino-resetbox.go | 328 +++++++++++- samples/resetbox/cmd.go | 299 ++++++++++- testutils/inject/arm.go | 8 +- 39 files changed, 1618 insertions(+), 395 deletions(-) diff --git a/component/arm/arm.go b/component/arm/arm.go index fa95864e204..722bc887a8a 100644 --- a/component/arm/arm.go +++ b/component/arm/arm.go @@ -76,10 +76,10 @@ type Arm interface { MoveToPosition(ctx context.Context, pose *commonpb.Pose, worldState *commonpb.WorldState) error // MoveToJointPositions moves the arm's joints to the given positions. - MoveToJointPositions(ctx context.Context, positionDegs *pb.JointPositions) error + MoveToJointPositions(ctx context.Context, jointPositions []*pb.JointPosition) error // GetJointPositions returns the current joint positions of the arm. - GetJointPositions(ctx context.Context) (*pb.JointPositions, error) + GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) referenceframe.ModelFramer referenceframe.InputEnabled @@ -122,8 +122,12 @@ func CreateStatus(ctx context.Context, resource interface{}) (*pb.Status, error) if err != nil { return nil, err } + jointPositionRawValues := make([]float64, len(jointPositions)) + for idx, jp := range jointPositions { + jointPositionRawValues[idx] = jp.GetParameters()[0] + } - return &pb.Status{EndPosition: endPosition, JointPositions: jointPositions}, nil + return &pb.Status{EndPosition: endPosition, JointPositions: &pb.JointPositions{Degrees: jointPositionRawValues}}, nil } type reconfigurableArm struct { @@ -149,13 +153,13 @@ func (r *reconfigurableArm) MoveToPosition(ctx context.Context, pose *commonpb.P return r.actual.MoveToPosition(ctx, pose, worldState) } -func (r *reconfigurableArm) MoveToJointPositions(ctx context.Context, positionDegs *pb.JointPositions) error { +func (r *reconfigurableArm) MoveToJointPositions(ctx context.Context, jointPositions []*pb.JointPosition) error { r.mu.RLock() defer r.mu.RUnlock() - return r.actual.MoveToJointPositions(ctx, positionDegs) + return r.actual.MoveToJointPositions(ctx, jointPositions) } -func (r *reconfigurableArm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (r *reconfigurableArm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { r.mu.RLock() defer r.mu.RUnlock() return r.actual.GetJointPositions(ctx) diff --git a/component/arm/arm_test.go b/component/arm/arm_test.go index 9bb6199ca76..dd79705b36b 100644 --- a/component/arm/arm_test.go +++ b/component/arm/arm_test.go @@ -115,8 +115,15 @@ func TestCreateStatus(t *testing.T) { injectArm.GetEndPositionFunc = func(ctx context.Context) (*commonpb.Pose, error) { return pose, nil } - injectArm.GetJointPositionsFunc = func(ctx context.Context) (*pb.JointPositions, error) { - return &pb.JointPositions{Degrees: status.JointPositions.Degrees}, nil + injectArm.GetJointPositionsFunc = func(ctx context.Context) ([]*pb.JointPosition, error) { + result := make([]*pb.JointPosition, len(status.JointPositions.Degrees)) + for i, deg := range status.JointPositions.Degrees { + result[i] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{deg}, + } + } + return result, nil } t.Run("working", func(t *testing.T) { @@ -127,7 +134,7 @@ func TestCreateStatus(t *testing.T) { t.Run("fail on GetJointPositions", func(t *testing.T) { errFail := errors.New("can't get joint positions") - injectArm.GetJointPositionsFunc = func(ctx context.Context) (*pb.JointPositions, error) { + injectArm.GetJointPositionsFunc = func(ctx context.Context) ([]*pb.JointPosition, error) { return nil, errFail } _, err = arm.CreateStatus(context.Background(), injectArm) diff --git a/component/arm/client.go b/component/arm/client.go index 288262ba865..856fde69ca0 100644 --- a/component/arm/client.go +++ b/component/arm/client.go @@ -90,22 +90,22 @@ func (c *client) MoveToPosition(ctx context.Context, pose *commonpb.Pose, worldS return err } -func (c *client) MoveToJointPositions(ctx context.Context, positionDegs *pb.JointPositions) error { +func (c *client) MoveToJointPositions(ctx context.Context, jointPositions []*pb.JointPosition) error { _, err := c.client.MoveToJointPositions(ctx, &pb.MoveToJointPositionsRequest{ - Name: c.name, - PositionDegs: positionDegs, + Name: c.name, + JointPositions: jointPositions, }) return err } -func (c *client) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (c *client) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { resp, err := c.client.GetJointPositions(ctx, &pb.GetJointPositionsRequest{ Name: c.name, }) if err != nil { return nil, err } - return resp.PositionDegs, nil + return resp.GetJointPositions(), nil } func (c *client) ModelFrame() referenceframe.Model { @@ -118,7 +118,7 @@ func (c *client) CurrentInputs(ctx context.Context) ([]referenceframe.Input, err if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (c *client) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/client_test.go b/component/arm/client_test.go index 25d45d0f619..1acd3967d6e 100644 --- a/component/arm/client_test.go +++ b/component/arm/client_test.go @@ -31,16 +31,30 @@ func TestClient(t *testing.T) { var ( capArmPos *commonpb.Pose - capArmJointPos *componentpb.JointPositions + capArmJointPos []*componentpb.JointPosition ) pos1 := &commonpb.Pose{X: 1, Y: 2, Z: 3} - jointPos1 := &componentpb.JointPositions{Degrees: []float64{1.0, 2.0, 3.0}} + // jointPos1 := &componentpb.JointPositions{Degrees: []float64{1.0, 2.0, 3.0}} + jointPos1 := []*componentpb.JointPosition{ + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{1.0}, + }, + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{2.0}, + }, + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{3.0}, + }, + } injectArm := &inject.Arm{} injectArm.GetEndPositionFunc = func(ctx context.Context) (*commonpb.Pose, error) { return pos1, nil } - injectArm.GetJointPositionsFunc = func(ctx context.Context) (*componentpb.JointPositions, error) { + injectArm.GetJointPositionsFunc = func(ctx context.Context) ([]*componentpb.JointPosition, error) { return jointPos1, nil } injectArm.MoveToPositionFunc = func(ctx context.Context, ap *commonpb.Pose, worldState *commonpb.WorldState) error { @@ -48,18 +62,31 @@ func TestClient(t *testing.T) { return nil } - injectArm.MoveToJointPositionsFunc = func(ctx context.Context, jp *componentpb.JointPositions) error { + injectArm.MoveToJointPositionsFunc = func(ctx context.Context, jp []*componentpb.JointPosition) error { capArmJointPos = jp return nil } pos2 := &commonpb.Pose{X: 4, Y: 5, Z: 6} - jointPos2 := &componentpb.JointPositions{Degrees: []float64{4.0, 5.0, 6.0}} + jointPos2 := []*componentpb.JointPosition{ + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{1.0}, + }, + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{2.0}, + }, + { + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{3.0}, + }, + } injectArm2 := &inject.Arm{} injectArm2.GetEndPositionFunc = func(ctx context.Context) (*commonpb.Pose, error) { return pos2, nil } - injectArm2.GetJointPositionsFunc = func(ctx context.Context) (*componentpb.JointPositions, error) { + injectArm2.GetJointPositionsFunc = func(ctx context.Context) ([]*componentpb.JointPosition, error) { return jointPos2, nil } injectArm2.MoveToPositionFunc = func(ctx context.Context, ap *commonpb.Pose, worldState *commonpb.WorldState) error { @@ -67,7 +94,7 @@ func TestClient(t *testing.T) { return nil } - injectArm2.MoveToJointPositionsFunc = func(ctx context.Context, jp *componentpb.JointPositions) error { + injectArm2.MoveToJointPositionsFunc = func(ctx context.Context, jp []*componentpb.JointPosition) error { capArmJointPos = jp return nil } @@ -100,7 +127,10 @@ func TestClient(t *testing.T) { jointPos, err := arm1Client.GetJointPositions(context.Background()) test.That(t, err, test.ShouldBeNil) - test.That(t, jointPos.String(), test.ShouldResemble, jointPos1.String()) + for idx, jp := range jointPos { + test.That(t, jp.JointType, test.ShouldEqual, jointPos1[idx].JointType) + test.That(t, jp.GetParameters(), test.ShouldResemble, jointPos1[idx].GetParameters()) + } err = arm1Client.MoveToPosition(context.Background(), pos2, &commonpb.WorldState{}) test.That(t, err, test.ShouldBeNil) @@ -108,7 +138,10 @@ func TestClient(t *testing.T) { err = arm1Client.MoveToJointPositions(context.Background(), jointPos2) test.That(t, err, test.ShouldBeNil) - test.That(t, capArmJointPos.String(), test.ShouldResemble, jointPos2.String()) + for idx, jp := range capArmJointPos { + test.That(t, jp.JointType, test.ShouldEqual, jointPos2[idx].JointType) + test.That(t, jp.GetParameters(), test.ShouldResemble, jointPos2[idx].GetParameters()) + } test.That(t, utils.TryClose(context.Background(), arm1Client), test.ShouldBeNil) }) diff --git a/component/arm/eva/eva.go b/component/arm/eva/eva.go index c91ff4a617b..8a910dc14aa 100644 --- a/component/arm/eva/eva.go +++ b/component/arm/eva/eva.go @@ -99,10 +99,10 @@ type eva struct { frameJSON []byte } -func (e *eva) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (e *eva) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { data, err := e.DataSnapshot(ctx) if err != nil { - return &pb.JointPositions{}, err + return nil, err } return referenceframe.JointPositionsFromRadians(data.ServosPosition), nil } @@ -122,14 +122,18 @@ func (e *eva) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldState if err != nil { return err } - solution, err := e.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := e.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } return arm.GoToWaypoints(ctx, e, solution) } -func (e *eva) MoveToJointPositions(ctx context.Context, newPositions *pb.JointPositions) error { +func (e *eva) MoveToJointPositions(ctx context.Context, newPositions []*pb.JointPosition) error { radians := referenceframe.JointPositionsToRadians(newPositions) err := e.doMoveJoints(ctx, radians) @@ -337,7 +341,7 @@ func (e *eva) CurrentInputs(ctx context.Context) ([]referenceframe.Input, error) if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (e *eva) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/fake/arm.go b/component/arm/fake/arm.go index dc38dcf62cf..f1e8f877a61 100644 --- a/component/arm/fake/arm.go +++ b/component/arm/fake/arm.go @@ -40,10 +40,17 @@ func NewArm(cfg config.Component) (arm.Arm, error) { if err != nil { return nil, err } + jointPositions := make([]*pb.JointPosition, 6) + for i := 0; i < 6; i++ { + jointPositions[i] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0.0}, + } + } return &Arm{ Name: name, position: &commonpb.Pose{}, - joints: &pb.JointPositions{Degrees: []float64{0, 0, 0, 0, 0, 0}}, + joints: jointPositions, model: model, }, nil } @@ -52,7 +59,7 @@ func NewArm(cfg config.Component) (arm.Arm, error) { type Arm struct { Name string position *commonpb.Pose - joints *pb.JointPositions + joints []*pb.JointPosition CloseCount int model referenceframe.Model } @@ -74,13 +81,13 @@ func (a *Arm) MoveToPosition(ctx context.Context, c *commonpb.Pose, worldState * } // MoveToJointPositions sets the joints. -func (a *Arm) MoveToJointPositions(ctx context.Context, joints *pb.JointPositions) error { +func (a *Arm) MoveToJointPositions(ctx context.Context, joints []*pb.JointPosition) error { a.joints = joints return nil } // GetJointPositions returns the set joints. -func (a *Arm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (a *Arm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { return a.joints, nil } @@ -90,7 +97,7 @@ func (a *Arm) CurrentInputs(ctx context.Context) ([]referenceframe.Input, error) if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } // GoToInputs TODO. diff --git a/component/arm/fake/arm_ik.go b/component/arm/fake/arm_ik.go index 799fc400b5a..0a7f51db754 100644 --- a/component/arm/fake/arm_ik.go +++ b/component/arm/fake/arm_ik.go @@ -50,10 +50,17 @@ func NewArmIK(ctx context.Context, cfg config.Component, logger golog.Logger) (a return nil, err } + jointPositions := make([]*pb.JointPosition, 6) + for i := 0; i < 6; i++ { + jointPositions[i] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0.0}, + } + } return &ArmIK{ Name: name, position: &commonpb.Pose{}, - joints: &pb.JointPositions{Degrees: []float64{0, 0, 0, 0, 0, 0}}, + joints: jointPositions, mp: mp, model: model, }, nil @@ -63,7 +70,7 @@ func NewArmIK(ctx context.Context, cfg config.Component, logger golog.Logger) (a type ArmIK struct { Name string position *commonpb.Pose - joints *pb.JointPositions + joints []*pb.JointPosition mp motionplan.MotionPlanner CloseCount int model referenceframe.Model @@ -89,7 +96,11 @@ func (a *ArmIK) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSta if err != nil { return err } - solution, err := a.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := a.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } @@ -97,13 +108,13 @@ func (a *ArmIK) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSta } // MoveToJointPositions sets the joints. -func (a *ArmIK) MoveToJointPositions(ctx context.Context, joints *pb.JointPositions) error { +func (a *ArmIK) MoveToJointPositions(ctx context.Context, joints []*pb.JointPosition) error { a.joints = joints return nil } // GetJointPositions returns the set joints. -func (a *ArmIK) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (a *ArmIK) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { return a.joints, nil } @@ -113,7 +124,7 @@ func (a *ArmIK) CurrentInputs(ctx context.Context) ([]referenceframe.Input, erro if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } // GoToInputs TODO. diff --git a/component/arm/server.go b/component/arm/server.go index 8f62d1db517..2eb3b1e13c7 100644 --- a/component/arm/server.go +++ b/component/arm/server.go @@ -68,8 +68,7 @@ func (s *subtypeServer) GetJointPositions( if err != nil { return nil, err } - convertedPos := &pb.JointPositions{Degrees: pos.Degrees} - return &pb.GetJointPositionsResponse{PositionDegs: convertedPos}, nil + return &pb.GetJointPositionsResponse{JointPositions: pos}, nil } // MoveToPosition returns the position of the arm specified. @@ -92,5 +91,5 @@ func (s *subtypeServer) MoveToJointPositions( if err != nil { return nil, err } - return &pb.MoveToJointPositionsResponse{}, arm.MoveToJointPositions(ctx, req.PositionDegs) + return &pb.MoveToJointPositionsResponse{}, arm.MoveToJointPositions(ctx, req.JointPositions) } diff --git a/component/arm/server_test.go b/component/arm/server_test.go index c881324b39a..16b4c7640f0 100644 --- a/component/arm/server_test.go +++ b/component/arm/server_test.go @@ -36,33 +36,59 @@ func TestServer(t *testing.T) { var ( capArmPos *commonpb.Pose - capArmJointPos *pb.JointPositions + capArmJointPos []*pb.JointPosition ) pose1 := &commonpb.Pose{X: 1, Y: 2, Z: 3} - positionDegs1 := &pb.JointPositions{Degrees: []float64{1.0, 2.0, 3.0}} + jointPositions1 := []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{1.0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{2.0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{3.0}, + }, + } injectArm.GetEndPositionFunc = func(ctx context.Context) (*commonpb.Pose, error) { return pose1, nil } - injectArm.GetJointPositionsFunc = func(ctx context.Context) (*pb.JointPositions, error) { - return positionDegs1, nil + injectArm.GetJointPositionsFunc = func(ctx context.Context) ([]*pb.JointPosition, error) { + return jointPositions1, nil } injectArm.MoveToPositionFunc = func(ctx context.Context, ap *commonpb.Pose, worldState *commonpb.WorldState) error { capArmPos = ap return nil } - injectArm.MoveToJointPositionsFunc = func(ctx context.Context, jp *pb.JointPositions) error { + injectArm.MoveToJointPositionsFunc = func(ctx context.Context, jp []*pb.JointPosition) error { capArmJointPos = jp return nil } pose2 := &commonpb.Pose{X: 4, Y: 5, Z: 6} - positionDegs2 := &pb.JointPositions{Degrees: []float64{4.0, 5.0, 6.0}} + jointPositions2 := []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{1.0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{2.0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{3.0}, + }, + } injectArm2.GetEndPositionFunc = func(ctx context.Context) (*commonpb.Pose, error) { return nil, errors.New("can't get pose") } - injectArm2.GetJointPositionsFunc = func(ctx context.Context) (*pb.JointPositions, error) { + injectArm2.GetJointPositionsFunc = func(ctx context.Context) ([]*pb.JointPosition, error) { return nil, errors.New("can't get joint positions") } injectArm2.MoveToPositionFunc = func(ctx context.Context, ap *commonpb.Pose, worldState *commonpb.WorldState) error { @@ -70,7 +96,7 @@ func TestServer(t *testing.T) { return errors.New("can't move to pose") } - injectArm2.MoveToJointPositionsFunc = func(ctx context.Context, jp *pb.JointPositions) error { + injectArm2.MoveToJointPositionsFunc = func(ctx context.Context, jp []*pb.JointPosition) error { capArmJointPos = jp return errors.New("can't move to joint positions") } @@ -116,7 +142,11 @@ func TestServer(t *testing.T) { resp, err := armServer.GetJointPositions(context.Background(), &pb.GetJointPositionsRequest{Name: testArmName}) test.That(t, err, test.ShouldBeNil) - test.That(t, resp.PositionDegs.String(), test.ShouldResemble, positionDegs1.String()) + respJointPositions := resp.GetJointPositions() + for idx, jp := range jointPositions1 { + test.That(t, respJointPositions[idx].JointType, test.ShouldEqual, jp.JointType) + test.That(t, respJointPositions[idx].GetParameters(), test.ShouldResemble, jp.GetParameters()) + } _, err = armServer.GetJointPositions(context.Background(), &pb.GetJointPositionsRequest{Name: failArmName}) test.That(t, err, test.ShouldNotBeNil) @@ -127,24 +157,26 @@ func TestServer(t *testing.T) { t.Run("move to joint position", func(t *testing.T) { _, err = armServer.MoveToJointPositions( context.Background(), - &pb.MoveToJointPositionsRequest{Name: missingArmName, PositionDegs: positionDegs2}, + &pb.MoveToJointPositionsRequest{Name: missingArmName, JointPositions: jointPositions2}, ) test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "no arm") _, err := armServer.MoveToJointPositions( context.Background(), - &pb.MoveToJointPositionsRequest{Name: testArmName, PositionDegs: positionDegs2}, + &pb.MoveToJointPositionsRequest{Name: testArmName, JointPositions: jointPositions2}, ) test.That(t, err, test.ShouldBeNil) - test.That(t, capArmJointPos.String(), test.ShouldResemble, positionDegs2.String()) + for idx, jp := range jointPositions2 { + test.That(t, capArmJointPos[idx].JointType, test.ShouldEqual, jp.JointType) + test.That(t, capArmJointPos[idx].GetParameters(), test.ShouldResemble, jp.GetParameters()) + } _, err = armServer.MoveToJointPositions( context.Background(), - &pb.MoveToJointPositionsRequest{Name: failArmName, PositionDegs: positionDegs1}, + &pb.MoveToJointPositionsRequest{Name: failArmName, JointPositions: jointPositions1}, ) test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "can't move to joint positions") - test.That(t, capArmJointPos.String(), test.ShouldResemble, positionDegs1.String()) }) } diff --git a/component/arm/universalrobots/ur.go b/component/arm/universalrobots/ur.go index 9121bc5e9eb..d0b3634fe71 100644 --- a/component/arm/universalrobots/ur.go +++ b/component/arm/universalrobots/ur.go @@ -212,7 +212,7 @@ func (ua *URArm) State() (RobotState, error) { } // GetJointPositions TODO. -func (ua *URArm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (ua *URArm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { radians := []float64{} state, err := ua.State() if err != nil { @@ -240,7 +240,11 @@ func (ua *URArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSt return err } start := time.Now() - solution, err := ua.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := ua.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } @@ -253,7 +257,7 @@ func (ua *URArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSt } // MoveToJointPositions TODO. -func (ua *URArm) MoveToJointPositions(ctx context.Context, joints *pb.JointPositions) error { +func (ua *URArm) MoveToJointPositions(ctx context.Context, joints []*pb.JointPosition) error { return ua.MoveToJointPositionRadians(ctx, referenceframe.JointPositionsToRadians(joints)) } @@ -339,7 +343,7 @@ func (ua *URArm) CurrentInputs(ctx context.Context) ([]referenceframe.Input, err if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } // GoToInputs TODO. diff --git a/component/arm/varm/v1.go b/component/arm/varm/v1.go index 60fa3bb0827..db23425b6e1 100644 --- a/component/arm/varm/v1.go +++ b/component/arm/varm/v1.go @@ -235,7 +235,11 @@ func (a *armV1) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSta } opt := motionplan.NewDefaultPlannerOptions() opt.SetMetric(motionplan.NewPositionOnlyMetric()) - solution, err := a.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), opt) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := a.mp.Plan(ctx, pos, inputs, opt) if err != nil { return err } @@ -256,8 +260,8 @@ func (a *armV1) moveJointToDegrees(ctx context.Context, m motor.Motor, j joint, } // MoveToJointPositions TODO. -func (a *armV1) MoveToJointPositions(ctx context.Context, pos *componentpb.JointPositions) error { - if len(pos.Degrees) != 2 { +func (a *armV1) MoveToJointPositions(ctx context.Context, jointPositions []*componentpb.JointPosition) error { + if len(jointPositions) != 2 { return errors.New("need exactly 2 joints") } @@ -266,9 +270,13 @@ func (a *armV1) MoveToJointPositions(ctx context.Context, pos *componentpb.Joint return err } + cur0Val := cur[0].GetParameters()[0] + cur1Val := cur[1].GetParameters()[0] + jp0Val := jointPositions[0].GetParameters()[0] + jp1Val := jointPositions[1].GetParameters()[0] err = multierr.Combine( - a.moveJointToDegrees(ctx, a.j0Motor, a.j0, cur.Degrees[0], pos.Degrees[0]), - a.moveJointToDegrees(ctx, a.j1Motor, a.j1, cur.Degrees[1], pos.Degrees[1]), + a.moveJointToDegrees(ctx, a.j0Motor, a.j0, cur0Val, jp0Val), + a.moveJointToDegrees(ctx, a.j1Motor, a.j1, cur1Val, jp1Val), ) if err != nil { return err @@ -289,7 +297,7 @@ func (a *armV1) MoveToJointPositions(ctx context.Context, pos *componentpb.Joint } } - return errors.Errorf("arm moved timed out, wanted: %v", pos) + return errors.Errorf("arm moved timed out, wanted: %v", jointPositions) } // IsOn TODO. @@ -310,14 +318,22 @@ func jointToDegrees(ctx context.Context, m motor.Motor, j joint) (float64, error } // GetJointPositions TODO. -func (a *armV1) GetJointPositions(ctx context.Context) (*componentpb.JointPositions, error) { +func (a *armV1) GetJointPositions(ctx context.Context) ([]*componentpb.JointPosition, error) { var e1, e2 error - joints := &componentpb.JointPositions{Degrees: make([]float64, 2)} - joints.Degrees[0], e1 = jointToDegrees(ctx, a.j0Motor, a.j0) - joints.Degrees[1], e2 = jointToDegrees(ctx, a.j1Motor, a.j1) - joints.Degrees[1] = (joints.Degrees[1] - joints.Degrees[0]) - return joints, multierr.Combine(e1, e2) + jointPositions := make([]*componentpb.JointPosition, 2) + j0Pos, e1 := jointToDegrees(ctx, a.j0Motor, a.j0) + j1Pos, e2 := jointToDegrees(ctx, a.j0Motor, a.j0) + jointPositions[0] = &componentpb.JointPosition{ + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{j0Pos}, + } + jointPositions[1] = &componentpb.JointPosition{ + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{j1Pos}, + } + + return jointPositions, multierr.Combine(e1, e2) } func (a *armV1) ModelFrame() referenceframe.Model { @@ -329,7 +345,7 @@ func (a *armV1) CurrentInputs(ctx context.Context) ([]referenceframe.Input, erro if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (a *armV1) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/vx300s/vx300s.go b/component/arm/vx300s/vx300s.go index b5a9785f0e0..c7f0ba21460 100644 --- a/component/arm/vx300s/vx300s.go +++ b/component/arm/vx300s/vx300s.go @@ -143,7 +143,11 @@ func (a *myArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSta if err != nil { return err } - solution, err := a.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := a.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } @@ -151,8 +155,8 @@ func (a *myArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSta } // MoveToJointPositions takes a list of degrees and sets the corresponding joints to that position. -func (a *myArm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) error { - if len(jp.Degrees) > len(a.JointOrder()) { +func (a *myArm) MoveToJointPositions(ctx context.Context, jp []*pb.JointPosition) error { + if len(jp) > len(a.JointOrder()) { return errors.New("passed in too many positions") } @@ -160,8 +164,9 @@ func (a *myArm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) // TODO(pl): make block configurable block := false - for i, pos := range jp.Degrees { - a.JointTo(a.JointOrder()[i], degreeToServoPos(pos), block) + for i, pos := range jp { + deg := pos.GetParameters()[0] + a.JointTo(a.JointOrder()[i], degreeToServoPos(deg), block) } a.moveLock.Unlock() @@ -169,18 +174,23 @@ func (a *myArm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) } // GetJointPositions returns an empty struct, because the vx300s should use joint angles from kinematics. -func (a *myArm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (a *myArm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { angleMap, err := a.GetAllAngles() if err != nil { - return &pb.JointPositions{}, err + return nil, err } - positions := make([]float64, 0, len(a.JointOrder())) + positions := make([]*pb.JointPosition, 0, len(a.JointOrder())) for i, jointName := range a.JointOrder() { - positions[i] = servoPosToDegrees(angleMap[jointName]) + servoDeg := servoPosToDegrees(angleMap[jointName]) + positions[i] = &pb.JointPosition{ + Parameters: []float64{servoDeg}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + } + } - return &pb.JointPositions{Degrees: positions}, nil + return positions, nil } // Close will get the arm ready to be turned off. @@ -402,7 +412,7 @@ func (a *myArm) CurrentInputs(ctx context.Context) ([]referenceframe.Input, erro if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (a *myArm) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/wx250s/wx250s.go b/component/arm/wx250s/wx250s.go index 2d95f7afccf..87674ed59a6 100644 --- a/component/arm/wx250s/wx250s.go +++ b/component/arm/wx250s/wx250s.go @@ -145,7 +145,11 @@ func (a *Arm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldState if err != nil { return err } - solution, err := a.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := a.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } @@ -153,8 +157,8 @@ func (a *Arm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldState } // MoveToJointPositions takes a list of degrees and sets the corresponding joints to that position. -func (a *Arm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) error { - if len(jp.Degrees) > len(a.JointOrder()) { +func (a *Arm) MoveToJointPositions(ctx context.Context, jp []*pb.JointPosition) error { + if len(jp) > len(a.JointOrder()) { return errors.New("passed in too many positions") } @@ -162,8 +166,9 @@ func (a *Arm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) e // TODO(pl): make block configurable block := false - for i, pos := range jp.Degrees { - a.JointTo(a.JointOrder()[i], degreeToServoPos(pos), block) + for i, pos := range jp { + deg := pos.GetParameters()[0] + a.JointTo(a.JointOrder()[i], degreeToServoPos(deg), block) } a.moveLock.Unlock() @@ -171,8 +176,8 @@ func (a *Arm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) e } // GetJointPositions returns an empty struct, because the wx250s should use joint angles from kinematics. -func (a *Arm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { - return &pb.JointPositions{}, nil +func (a *Arm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { + return []*pb.JointPosition{}, nil } // Close will get the arm ready to be turned off. @@ -365,7 +370,7 @@ func (a *Arm) CurrentInputs(ctx context.Context) ([]referenceframe.Input, error) if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } // GoToInputs TODO. diff --git a/component/arm/xarm/xarm.go b/component/arm/xarm/xarm.go index e3441d4092c..fc65d28b31a 100644 --- a/component/arm/xarm/xarm.go +++ b/component/arm/xarm/xarm.go @@ -126,7 +126,7 @@ func (x *xArm) CurrentInputs(ctx context.Context) ([]referenceframe.Input, error if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (x *xArm) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/xarm/xarm_comm.go b/component/arm/xarm/xarm_comm.go index 86544727a30..b73579df104 100644 --- a/component/arm/xarm/xarm_comm.go +++ b/component/arm/xarm/xarm_comm.go @@ -351,18 +351,25 @@ func (x *xArm) Close(ctx context.Context) error { } // MoveToJointPositions moves the arm to the requested joint positions. -func (x *xArm) MoveToJointPositions(ctx context.Context, newPositions *pb.JointPositions) error { - to := referenceframe.JointPosToInputs(newPositions) +func (x *xArm) MoveToJointPositions(ctx context.Context, newPositions []*pb.JointPosition) error { + to, err := referenceframe.JointPosToInputs(newPositions) + if err != nil { + return err + } curPos, err := x.GetJointPositions(ctx) if err != nil { return err } - from := referenceframe.JointPosToInputs(curPos) + from, err := referenceframe.JointPosToInputs(curPos) + if err != nil { + return err + } diff := getMaxDiff(from, to) nSteps := int((diff / float64(x.speed)) * x.moveHZ) for i := 1; i <= nSteps; i++ { - step := referenceframe.InputsToFloats(referenceframe.InterpolateInputs(from, to, float64(i)/float64(nSteps))) + interpolatedInputs, err := referenceframe.InterpolateInputs(from, to, float64(i)/float64(nSteps)) + step := referenceframe.InputsToFloats(interpolatedInputs) c := x.newCmd(regMap["MoveJoints"]) jFloatBytes := make([]byte, 4) @@ -378,7 +385,7 @@ func (x *xArm) MoveToJointPositions(ctx context.Context, newPositions *pb.JointP c.params = append(c.params, 0, 0, 0, 0) c.params = append(c.params, 0, 0, 0, 0) c.params = append(c.params, 0, 0, 0, 0) - _, err := x.send(ctx, c, true) + _, err = x.send(ctx, c, true) if err != nil { return err } @@ -404,7 +411,11 @@ func (x *xArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldStat if err != nil { return err } - solution, err := x.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), nil) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := x.mp.Plan(ctx, pos, inputs, nil) if err != nil { return err } @@ -416,12 +427,12 @@ func (x *xArm) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldStat } // GetJointPositions returns the current positions of all joints. -func (x *xArm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (x *xArm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { c := x.newCmd(regMap["JointPos"]) jData, err := x.send(ctx, c, true) if err != nil { - return &pb.JointPositions{}, err + return nil, err } var radians []float64 for i := 0; i < x.dof; i++ { diff --git a/component/arm/yahboom/dofbot.go b/component/arm/yahboom/dofbot.go index ba47fd5a25e..9578cd91f05 100644 --- a/component/arm/yahboom/dofbot.go +++ b/component/arm/yahboom/dofbot.go @@ -148,7 +148,11 @@ func (a *dofBot) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSt // dofbot las limited dof opt := motionplan.NewDefaultPlannerOptions() opt.SetMetric(motionplan.NewPositionOnlyMetric()) - solution, err := a.mp.Plan(ctx, pos, referenceframe.JointPosToInputs(joints), opt) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return err + } + solution, err := a.mp.Plan(ctx, pos, inputs, opt) if err != nil { return err } @@ -156,11 +160,11 @@ func (a *dofBot) MoveToPosition(ctx context.Context, pos *commonpb.Pose, worldSt } // MoveToJointPositions moves the arm's joints to the given positions. -func (a *dofBot) MoveToJointPositions(ctx context.Context, pos *componentpb.JointPositions) error { +func (a *dofBot) MoveToJointPositions(ctx context.Context, jointPositions []*componentpb.JointPosition) error { a.muMove.Lock() defer a.muMove.Unlock() - if len(pos.Degrees) > 5 { - return fmt.Errorf("yahboom wrong number of degrees got %d, need at most 5", len(pos.Degrees)) + if len(jointPositions) > 5 { + return fmt.Errorf("yahboom wrong number of degrees got %d, need at most 5", len(jointPositions)) } for j := 0; j < 100; j++ { @@ -175,8 +179,9 @@ func (a *dofBot) MoveToJointPositions(ctx context.Context, pos *componentpb.Join movedAny := false - for i, d := range pos.Degrees { - delta := math.Abs(current.Degrees[i] - d) + for i, jp := range jointPositions { + degPos := jp.GetParameters()[0] + delta := math.Abs(current[i].GetParameters()[0] - degPos) if delta < .5 { continue @@ -189,7 +194,7 @@ func (a *dofBot) MoveToJointPositions(ctx context.Context, pos *componentpb.Join movedAny = true - err := a.moveJointInLock(ctx, i+1, d) + err := a.moveJointInLock(ctx, i+1, degPos) if err != nil { return false, fmt.Errorf("error moving joint %d: %w", i+1, err) } @@ -229,24 +234,27 @@ func (a *dofBot) moveJointInLock(ctx context.Context, joint int, degrees float64 } // GetJointPositions returns the current joint positions of the arm. -func (a *dofBot) GetJointPositions(ctx context.Context) (*componentpb.JointPositions, error) { +func (a *dofBot) GetJointPositions(ctx context.Context) ([]*componentpb.JointPosition, error) { a.mu.Lock() defer a.mu.Unlock() return a.GetJointPositionsInLock(ctx) } -func (a *dofBot) GetJointPositionsInLock(ctx context.Context) (*componentpb.JointPositions, error) { - pos := componentpb.JointPositions{} +func (a *dofBot) GetJointPositionsInLock(ctx context.Context) ([]*componentpb.JointPosition, error) { + pos := make([]*componentpb.JointPosition, 5) for i := 1; i <= 5; i++ { x, err := a.readJointInLock(ctx, i) if err != nil { return nil, err } - pos.Degrees = append(pos.Degrees, x) + pos[i-1] = &componentpb.JointPosition{ + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{x}, + } } - return &pos, nil + return pos, nil } func (a *dofBot) readJointInLock(ctx context.Context, joint int) (float64, error) { @@ -351,7 +359,7 @@ func (a *dofBot) CurrentInputs(ctx context.Context) ([]referenceframe.Input, err if err != nil { return nil, err } - return referenceframe.JointPosToInputs(res), nil + return referenceframe.JointPosToInputs(res) } func (a *dofBot) GoToInputs(ctx context.Context, goal []referenceframe.Input) error { diff --git a/component/arm/yahboom/dofbot_test.go b/component/arm/yahboom/dofbot_test.go index 1365ea98d0c..138d7cf15b9 100644 --- a/component/arm/yahboom/dofbot_test.go +++ b/component/arm/yahboom/dofbot_test.go @@ -32,6 +32,15 @@ func TestDofBotIK(t *testing.T) { goal := commonpb.Pose{X: 206.59, Y: -1.57, Z: 253.05, Theta: -180, OX: -.53, OY: 0, OZ: .85} opt := motionplan.NewDefaultPlannerOptions() opt.SetMetric(motionplan.NewPositionOnlyMetric()) - _, err = mp.Plan(ctx, &goal, referenceframe.JointPosToInputs(&componentpb.JointPositions{Degrees: make([]float64, 5)}), opt) + jointPositions := make([]*componentpb.JointPosition, 5) + for i := 0; i < 5; i++ { + jointPositions[i] = &componentpb.JointPosition{ + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + } + } + inputs, err := referenceframe.JointPosToInputs(jointPositions) + test.That(t, err, test.ShouldBeNil) + _, err = mp.Plan(ctx, &goal, inputs, opt) test.That(t, err, test.ShouldBeNil) } diff --git a/grpc/client/client_test.go b/grpc/client/client_test.go index 242fe615aa7..b7b7f1bbf1a 100644 --- a/grpc/client/client_test.go +++ b/grpc/client/client_test.go @@ -274,7 +274,13 @@ func TestClient(t *testing.T) { test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "no arm") - err = arm1.MoveToJointPositions(context.Background(), &armpb.JointPositions{Degrees: []float64{1}}) + jps := []*armpb.JointPosition{ + { + Parameters: []float64{1.0}, + JointType: armpb.JointPosition_JOINT_TYPE_PRISMATIC, + }, + } + err = arm1.MoveToJointPositions(context.Background(), jps) test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "no arm") @@ -343,7 +349,13 @@ func TestClient(t *testing.T) { test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "no arm") - err = resource1.(arm.Arm).MoveToJointPositions(context.Background(), &armpb.JointPositions{Degrees: []float64{1}}) + jps = []*armpb.JointPosition{ + { + Parameters: []float64{1.0}, + JointType: armpb.JointPosition_JOINT_TYPE_PRISMATIC, + }, + } + err = resource1.(arm.Arm).MoveToJointPositions(context.Background(), jps) test.That(t, err, test.ShouldNotBeNil) test.That(t, err.Error(), test.ShouldContainSubstring, "no arm") diff --git a/motionplan/cBiRRTPlan.go b/motionplan/cBiRRTPlan.go index 9821178cb98..5821ac6e9a2 100644 --- a/motionplan/cBiRRTPlan.go +++ b/motionplan/cBiRRTPlan.go @@ -113,7 +113,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, opt *PlannerOptions, endpointPreview chan *configuration, solutionChan chan *planReturn, -) { +) error { defer close(solutionChan) inputSteps := []*configuration{} @@ -122,7 +122,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, seedPos, err := mp.frame.Transform(seed) if err != nil { solutionChan <- &planReturn{err: err} - return + return nil } goalPos := spatial.NewPoseFromProtobuf(fixOvIncrement(goal, spatial.PoseToProtobuf(seedPos))) if len(obstacles) == 0 { @@ -149,7 +149,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, solutions, err := getSolutions(ctx, opt, mp.solver, goal, seed, mp.Frame()) if err != nil { solutionChan <- &planReturn{err: err} - return + return nil } // Get the N best solutions @@ -179,7 +179,11 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, seedMap[&configuration{seed}] = nil // for the first iteration, we try the 0.5 interpolation between seed and goal[0] - target := &configuration{referenceframe.InterpolateInputs(seed, solutions[keys[0]], 0.5)} + interpolatedInputs, err := referenceframe.InterpolateInputs(seed, solutions[keys[0]], 0.5) + if err != nil { + return err + } + target := &configuration{interpolatedInputs} var rSeed *configuration @@ -192,7 +196,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, select { case <-ctx.Done(): solutionChan <- &planReturn{err: ctx.Err()} - return + return nil default: } @@ -244,16 +248,28 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, finalSteps := mp.SmoothPath(ctx, opt, inputSteps, corners) solutionChan <- &planReturn{steps: finalSteps} - return + return nil } // If we have done more than 50 iterations, start seeding off completely random positions 2 at a time // The 2 at a time is to ensure random seeds are added onto both the seed and goal maps. + seedInputUnits := make([]referenceframe.Units, len(rSeed.inputs)) + for i := 0; i < len(rSeed.inputs); i++ { + seedInputUnits[i] = rSeed.inputs[i].Units + } if i >= iterBeforeRand && i%4 >= 2 { - target = &configuration{referenceframe.RandomFrameInputs(mp.frame, mp.randseed)} + inputs, err := referenceframe.RandomFrameInputs(mp.frame, mp.randseed, seedInputUnits) + if err != nil { + return err + } + target = &configuration{inputs} } else { // Seeding nearby to valid points results in much faster convergence in less constrained space - target = &configuration{referenceframe.RestrictedRandomFrameInputs(mp.frame, mp.randseed, 0.2)} + inputs, err := referenceframe.RestrictedRandomFrameInputs(mp.frame, mp.randseed, 0.2, seedInputUnits) + if err != nil { + return err + } + target = &configuration{inputs} for j, v := range rSeed.inputs { target.inputs[j].Value += v.Value } @@ -264,6 +280,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, } solutionChan <- &planReturn{err: errors.New("could not solve path")} + return nil } // constrainedExtend will try to extend the map towards the target while meeting constraints along the way. It will @@ -299,7 +316,10 @@ func (mp *cBiRRTMotionPlanner) constrainedExtend( newVal := math.Min(mp.qstep[j], math.Abs(v2-v1)) // get correct sign newVal *= (v2 - v1) / math.Abs(v2-v1) - newNear = append(newNear, referenceframe.Input{nearInput.Value + newVal}) + newNear = append(newNear, referenceframe.Input{ + Value: nearInput.Value + newVal, + Units: nearInput.Units, + }) } } // if we are not meeting a constraint, gradient descend to the constraint diff --git a/motionplan/cBiRRTPlan_test.go b/motionplan/cBiRRTPlan_test.go index 833163a4b8a..0595700c6c9 100644 --- a/motionplan/cBiRRTPlan_test.go +++ b/motionplan/cBiRRTPlan_test.go @@ -119,25 +119,29 @@ func TestNearestNeighbor(t *testing.T) { nm := &neighborManager{nCPU: 2} rrtMap := map[*configuration]*configuration{} - j := &configuration{[]referenceframe.Input{{0.0}}} + j := &configuration{ + []referenceframe.Input{{Value: 0.0, Units: referenceframe.Radians}}, + } for i := 1.0; i < 110.0; i++ { - iSol := &configuration{[]referenceframe.Input{{i}}} + iSol := &configuration{ + []referenceframe.Input{{Value: i, Units: referenceframe.Radians}}, + } rrtMap[iSol] = j j = iSol } ctx := context.Background() - seed := &configuration{[]referenceframe.Input{{23.1}}} + seed := &configuration{[]referenceframe.Input{{Value: 23.1, Units: referenceframe.Radians}}} // test serial NN nn := nm.nearestNeighbor(ctx, seed, rrtMap) test.That(t, nn.inputs[0].Value, test.ShouldAlmostEqual, 23.0) for i := 120.0; i < 1100.0; i++ { - iSol := &configuration{[]referenceframe.Input{{i}}} + iSol := &configuration{[]referenceframe.Input{{Value: i, Units: referenceframe.Radians}}} rrtMap[iSol] = j j = iSol } - seed = &configuration{[]referenceframe.Input{{723.6}}} + seed = &configuration{[]referenceframe.Input{{Value: 723.6, Units: referenceframe.Radians}}} // test parallel NN nn = nm.nearestNeighbor(ctx, seed, rrtMap) test.That(t, nn.inputs[0].Value, test.ShouldAlmostEqual, 724.0) diff --git a/motionplan/collision_test.go b/motionplan/collision_test.go index 8066a6c566d..3e12d94d3c2 100644 --- a/motionplan/collision_test.go +++ b/motionplan/collision_test.go @@ -57,7 +57,7 @@ func TestUniqueCollisions(t *testing.T) { test.That(t, err, test.ShouldBeNil) // case 1: no self collision - check no new collisions are returned - input[0] = frame.Input{1} + input[0] = frame.Input{Value: 1, Units: frame.Radians} internalGeometries, _ = m.Geometries(input) test.That(t, internalGeometries, test.ShouldNotBeNil) cg, err := CheckUniqueCollisions(internalGeometries, map[string]spatial.Geometry{}, zeroPositionCG) @@ -65,7 +65,7 @@ func TestUniqueCollisions(t *testing.T) { test.That(t, len(cg.Collisions()), test.ShouldEqual, 0) // case 2: self collision - check only new collisions are returned - input[4] = frame.Input{2} + input[4] = frame.Input{Value: 2, Units: frame.Radians} internalGeometries, _ = m.Geometries(input) test.That(t, internalGeometries, test.ShouldNotBeNil) cg, err = CheckUniqueCollisions(internalGeometries, map[string]spatial.Geometry{}, zeroPositionCG) diff --git a/motionplan/constraint.go b/motionplan/constraint.go index b622c604d1b..2afee44adb9 100644 --- a/motionplan/constraint.go +++ b/motionplan/constraint.go @@ -399,7 +399,11 @@ func resolveInputsToPositions(ci *ConstraintInput) error { } func interpolationCheck(cInput *ConstraintInput, by, epsilon float64) bool { - iPos, err := cInput.Frame.Transform(referenceframe.InterpolateInputs(cInput.StartInput, cInput.EndInput, by)) + interpolatedInputs, err := referenceframe.InterpolateInputs(cInput.StartInput, cInput.EndInput, by) + if err != nil { + return false + } + iPos, err := cInput.Frame.Transform(interpolatedInputs) if err != nil { return false } @@ -416,11 +420,15 @@ func cachedInterpolateInput( startInput []referenceframe.Input, startPos spatial.Pose, ) (*ConstraintInput, error) { + interpolatedInputs, err := referenceframe.InterpolateInputs(ci.StartInput, ci.EndInput, by) + if err != nil { + return nil, err + } input := &ConstraintInput{} input.Frame = ci.Frame input.StartInput = startInput input.StartPos = startPos - input.EndInput = referenceframe.InterpolateInputs(ci.StartInput, ci.EndInput, by) + input.EndInput = interpolatedInputs return input, resolveInputsToPositions(input) } diff --git a/motionplan/constraint_test.go b/motionplan/constraint_test.go index 1b4f9b3c5af..c96971c248c 100644 --- a/motionplan/constraint_test.go +++ b/motionplan/constraint_test.go @@ -151,10 +151,14 @@ func TestLineFollow(t *testing.T) { opt := NewDefaultPlannerOptions() opt.SetPathDist(gradFunc) opt.AddConstraint("whiteboard", validFunc) + startInput, err := frame.JointPosToInputs(mp1) + test.That(t, err, test.ShouldBeNil) + endInput, err := frame.JointPosToInputs(mp2) + test.That(t, err, test.ShouldBeNil) ok, lastGood := opt.CheckConstraintPath( &ConstraintInput{ - StartInput: frame.JointPosToInputs(mp1), - EndInput: frame.JointPosToInputs(mp2), + StartInput: startInput, + EndInput: endInput, Frame: sf, }, 1, diff --git a/motionplan/kinematic.go b/motionplan/kinematic.go index 6d9a426b963..a615d501f4d 100644 --- a/motionplan/kinematic.go +++ b/motionplan/kinematic.go @@ -15,16 +15,19 @@ import ( // ComputePosition takes a model and a protobuf JointPositions in degrees and returns the cartesian position of the // end effector as a protobuf ArmPosition. This is performed statelessly without changing any data. -func ComputePosition(model referenceframe.Frame, joints *pb.JointPositions) (*commonpb.Pose, error) { - if len(joints.Degrees) != len(model.DoF()) { +func ComputePosition(model referenceframe.Frame, joints []*pb.JointPosition) (*commonpb.Pose, error) { + if len(joints) != len(model.DoF()) { return nil, errors.Errorf( "incorrect number of joints passed to ComputePosition. Want: %d, got: %d", len(model.DoF()), - len(joints.Degrees), + len(joints), ) } - - pose, err := model.Transform(referenceframe.JointPosToInputs(joints)) + inputs, err := referenceframe.JointPosToInputs(joints) + if err != nil { + return nil, err + } + pose, err := model.Transform(inputs) if err != nil { return nil, err } diff --git a/motionplan/kinematic_test.go b/motionplan/kinematic_test.go index edce7fa326f..8ff33301740 100644 --- a/motionplan/kinematic_test.go +++ b/motionplan/kinematic_test.go @@ -29,6 +29,17 @@ func poseToSlice(p *commonpb.Pose) []float64 { return []float64{p.X, p.Y, p.Z, p.Theta, p.OX, p.OY, p.OZ} } +func makeZeroJointPositions(numberOfJoints int) []*pb.JointPosition { + result := make([]*pb.JointPosition, numberOfJoints) + for i := 0; i < numberOfJoints; i++ { + result[i] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0.0}, + } + } + return result +} + // This should test forward kinematics functions. func TestForwardKinematics(t *testing.T) { // Test fake 5DOF arm to confirm kinematics works with non-6dof arms @@ -37,7 +48,8 @@ func TestForwardKinematics(t *testing.T) { // Confirm end effector starts at 300, 0, 360.25 expect := []float64{300, 0, 360.25, 0, 1, 0, 0} - pos, err := ComputePosition(m, &pb.JointPositions{Degrees: []float64{0, 0, 0, 0, 0}}) + + pos, err := ComputePosition(m, makeZeroJointPositions(5)) test.That(t, err, test.ShouldBeNil) actual := poseToSlice(pos) @@ -49,34 +61,109 @@ func TestForwardKinematics(t *testing.T) { // Confirm end effector starts at 365, 0, 360.25 expect = []float64{365, 0, 360.25, 0, 1, 0, 0} - pos, err = ComputePosition(m, &pb.JointPositions{Degrees: []float64{0, 0, 0, 0, 0, 0}}) + pos, err = ComputePosition(m, makeZeroJointPositions(6)) test.That(t, err, test.ShouldBeNil) actual = poseToSlice(pos) test.That(t, floatDelta(expect, actual), test.ShouldBeLessThanOrEqualTo, 0.00001) // Test incorrect joints - _, err = ComputePosition(m, &pb.JointPositions{Degrees: []float64{}}) + _, err = ComputePosition(m, makeZeroJointPositions(0)) test.That(t, err, test.ShouldNotBeNil) - _, err = ComputePosition(m, &pb.JointPositions{Degrees: []float64{0, 0, 0, 0, 0, 0, 0}}) + _, err = ComputePosition(m, makeZeroJointPositions(7)) test.That(t, err, test.ShouldNotBeNil) - newPos := []float64{45, -45, 0, 0, 0, 0} - pos, err = ComputePosition(m, &pb.JointPositions{Degrees: newPos}) + jointPos := []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{45}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{45}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + } + pos, err = ComputePosition(m, jointPos) test.That(t, err, test.ShouldBeNil) actual = poseToSlice(pos) expect = []float64{57.5, 57.5, 545.1208197765168, 0, 0.5, 0.5, 0.707} test.That(t, floatDelta(expect, actual), test.ShouldBeLessThanOrEqualTo, 0.01) - newPos = []float64{-45, 0, 0, 0, 0, 45} - pos, err = ComputePosition(m, &pb.JointPositions{Degrees: newPos}) + jointPos = []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{-45}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{45}, + }, + } + pos, err = ComputePosition(m, jointPos) test.That(t, err, test.ShouldBeNil) actual = poseToSlice(pos) expect = []float64{258.0935, -258.0935, 360.25, utils.RadToDeg(0.7854), 0.707, -0.707, 0} test.That(t, floatDelta(expect, actual), test.ShouldBeLessThanOrEqualTo, 0.01) // Test out of bounds. Note that ComputePosition will return nil on OOB. - newPos = []float64{-45, 0, 0, 0, 0, 999} - pos, err = ComputePosition(m, &pb.JointPositions{Degrees: newPos}) + jointPos = []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{-45}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{999}, + }, + } + pos, err = ComputePosition(m, jointPos) test.That(t, pos, test.ShouldBeNil) test.That(t, err, test.ShouldNotBeNil) } @@ -334,7 +421,14 @@ func TestSVAvsDH(t *testing.T) { seed := rand.New(rand.NewSource(23)) for i := 0; i < numTests; i++ { - joints := frame.InputsToJointPos(frame.RandomFrameInputs(mSVA, seed)) + dof := frame.NewSimpleModel().DoF() + inputUnits := make([]frame.Units, len(dof)) + for j := 0; j < len(dof); j++ { + inputUnits[j] = frame.Radians + } + inputs, err := frame.RandomFrameInputs(mSVA, seed, inputUnits) + test.That(t, err, test.ShouldBeNil) + joints := frame.InputsToJointPos(inputs) posSVA, err := ComputePosition(mSVA, joints) test.That(t, err, test.ShouldBeNil) diff --git a/motionplan/nloptInverseKinematics.go b/motionplan/nloptInverseKinematics.go index b68c6c3a43d..38da255fb83 100644 --- a/motionplan/nloptInverseKinematics.go +++ b/motionplan/nloptInverseKinematics.go @@ -234,7 +234,10 @@ func (ik *NloptIK) GenerateRandomPositions() []referenceframe.Input { jRange := math.Abs(u - l) // Note that rand is unseeded and so will produce the same sequence of floats every time // However, since this will presumably happen at different positions to different joints, this shouldn't matter - pos[i] = referenceframe.Input{ik.randSeed.Float64()*jRange + l} + pos[i] = referenceframe.Input{ + Value: ik.randSeed.Float64()*jRange + l, + Units: referenceframe.Radians, + } } return pos } diff --git a/motionplan/nloptInverseKinematics_test.go b/motionplan/nloptInverseKinematics_test.go index fcee6872c82..900f38d2df3 100644 --- a/motionplan/nloptInverseKinematics_test.go +++ b/motionplan/nloptInverseKinematics_test.go @@ -29,7 +29,34 @@ func TestCreateNloptIKSolver(t *testing.T) { pos = &commonpb.Pose{X: -46, Y: -23, Z: 372, Theta: utils.RadToDeg(3.92), OX: -0.46, OY: 0.84, OZ: 0.28} - seed = referenceframe.JointPosToInputs(&pb.JointPositions{Degrees: []float64{49, 28, -101, 0, -73, 0}}) + jointPos := []*pb.JointPosition{ + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{49}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{28}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{-101}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{-73}, + }, + { + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{0}, + }, + } + seed, err = referenceframe.JointPosToInputs(jointPos) + test.That(t, err, test.ShouldBeNil) _, err = solveTest(context.Background(), ik, pos, seed) test.That(t, err, test.ShouldBeNil) diff --git a/proto/api/component/arm/v1/arm.pb.go b/proto/api/component/arm/v1/arm.pb.go index 1c4437802fa..9b4c7ed1464 100644 --- a/proto/api/component/arm/v1/arm.pb.go +++ b/proto/api/component/arm/v1/arm.pb.go @@ -22,6 +22,59 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// JointType indicates the type of joint represented by this position, +// and consequently, both the number of parameters and their units. +// REVOLUTE -> [degrees] +// PRISMATIC -> [millimeters] +type JointPosition_JointType int32 + +const ( + JointPosition_JOINT_TYPE_UNSPECIFIED JointPosition_JointType = 0 + JointPosition_JOINT_TYPE_REVOLUTE JointPosition_JointType = 1 + JointPosition_JOINT_TYPE_PRISMATIC JointPosition_JointType = 2 +) + +// Enum value maps for JointPosition_JointType. +var ( + JointPosition_JointType_name = map[int32]string{ + 0: "JOINT_TYPE_UNSPECIFIED", + 1: "JOINT_TYPE_REVOLUTE", + 2: "JOINT_TYPE_PRISMATIC", + } + JointPosition_JointType_value = map[string]int32{ + "JOINT_TYPE_UNSPECIFIED": 0, + "JOINT_TYPE_REVOLUTE": 1, + "JOINT_TYPE_PRISMATIC": 2, + } +) + +func (x JointPosition_JointType) Enum() *JointPosition_JointType { + p := new(JointPosition_JointType) + *p = x + return p +} + +func (x JointPosition_JointType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (JointPosition_JointType) Descriptor() protoreflect.EnumDescriptor { + return file_proto_api_component_arm_v1_arm_proto_enumTypes[0].Descriptor() +} + +func (JointPosition_JointType) Type() protoreflect.EnumType { + return &file_proto_api_component_arm_v1_arm_proto_enumTypes[0] +} + +func (x JointPosition_JointType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use JointPosition_JointType.Descriptor instead. +func (JointPosition_JointType) EnumDescriptor() ([]byte, []int) { + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{2, 0} +} + type GetEndPositionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -119,6 +172,62 @@ func (x *GetEndPositionResponse) GetPose() *v1.Pose { return nil } +type JointPosition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // the raw number parameters for the position. + Parameters []float64 `protobuf:"fixed64,1,rep,packed,name=parameters,proto3" json:"parameters,omitempty"` + JointType JointPosition_JointType `protobuf:"varint,2,opt,name=joint_type,json=jointType,proto3,enum=proto.api.component.arm.v1.JointPosition_JointType" json:"joint_type,omitempty"` +} + +func (x *JointPosition) Reset() { + *x = JointPosition{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JointPosition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JointPosition) ProtoMessage() {} + +func (x *JointPosition) ProtoReflect() protoreflect.Message { + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JointPosition.ProtoReflect.Descriptor instead. +func (*JointPosition) Descriptor() ([]byte, []int) { + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{2} +} + +func (x *JointPosition) GetParameters() []float64 { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *JointPosition) GetJointType() JointPosition_JointType { + if x != nil { + return x.JointType + } + return JointPosition_JOINT_TYPE_UNSPECIFIED +} + type JointPositions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -133,7 +242,7 @@ type JointPositions struct { func (x *JointPositions) Reset() { *x = JointPositions{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[2] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -146,7 +255,7 @@ func (x *JointPositions) String() string { func (*JointPositions) ProtoMessage() {} func (x *JointPositions) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[2] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -159,7 +268,7 @@ func (x *JointPositions) ProtoReflect() protoreflect.Message { // Deprecated: Use JointPositions.ProtoReflect.Descriptor instead. func (*JointPositions) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{2} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{3} } func (x *JointPositions) GetDegrees() []float64 { @@ -181,7 +290,7 @@ type GetJointPositionsRequest struct { func (x *GetJointPositionsRequest) Reset() { *x = GetJointPositionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[3] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -194,7 +303,7 @@ func (x *GetJointPositionsRequest) String() string { func (*GetJointPositionsRequest) ProtoMessage() {} func (x *GetJointPositionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[3] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -207,7 +316,7 @@ func (x *GetJointPositionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJointPositionsRequest.ProtoReflect.Descriptor instead. func (*GetJointPositionsRequest) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{3} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{4} } func (x *GetJointPositionsRequest) GetName() string { @@ -224,12 +333,14 @@ type GetJointPositionsResponse struct { //a list JointPositions PositionDegs *JointPositions `protobuf:"bytes,1,opt,name=position_degs,json=positionDegs,proto3" json:"position_degs,omitempty"` + // A list of joint positions ordered spatially from the base toward the end effector + JointPositions []*JointPosition `protobuf:"bytes,2,rep,name=joint_positions,json=jointPositions,proto3" json:"joint_positions,omitempty"` } func (x *GetJointPositionsResponse) Reset() { *x = GetJointPositionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[4] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -242,7 +353,7 @@ func (x *GetJointPositionsResponse) String() string { func (*GetJointPositionsResponse) ProtoMessage() {} func (x *GetJointPositionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[4] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -255,7 +366,7 @@ func (x *GetJointPositionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJointPositionsResponse.ProtoReflect.Descriptor instead. func (*GetJointPositionsResponse) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{4} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{5} } func (x *GetJointPositionsResponse) GetPositionDegs() *JointPositions { @@ -265,6 +376,13 @@ func (x *GetJointPositionsResponse) GetPositionDegs() *JointPositions { return nil } +func (x *GetJointPositionsResponse) GetJointPositions() []*JointPosition { + if x != nil { + return x.JointPositions + } + return nil +} + type MoveToPositionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -279,7 +397,7 @@ type MoveToPositionRequest struct { func (x *MoveToPositionRequest) Reset() { *x = MoveToPositionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[5] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -292,7 +410,7 @@ func (x *MoveToPositionRequest) String() string { func (*MoveToPositionRequest) ProtoMessage() {} func (x *MoveToPositionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[5] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -305,7 +423,7 @@ func (x *MoveToPositionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveToPositionRequest.ProtoReflect.Descriptor instead. func (*MoveToPositionRequest) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{5} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{6} } func (x *MoveToPositionRequest) GetName() string { @@ -338,7 +456,7 @@ type MoveToPositionResponse struct { func (x *MoveToPositionResponse) Reset() { *x = MoveToPositionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[6] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +469,7 @@ func (x *MoveToPositionResponse) String() string { func (*MoveToPositionResponse) ProtoMessage() {} func (x *MoveToPositionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[6] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +482,7 @@ func (x *MoveToPositionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveToPositionResponse.ProtoReflect.Descriptor instead. func (*MoveToPositionResponse) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{6} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{7} } type MoveToJointPositionsRequest struct { @@ -377,12 +495,14 @@ type MoveToJointPositionsRequest struct { // A list of joint positions represented in degrees // There should be 1 entry in the list per joint, ordered spatially from the base toward the end effector PositionDegs *JointPositions `protobuf:"bytes,2,opt,name=position_degs,json=positionDegs,proto3" json:"position_degs,omitempty"` + // A list of joint positions ordered spatially from the base toward the end effector + JointPositions []*JointPosition `protobuf:"bytes,3,rep,name=joint_positions,json=jointPositions,proto3" json:"joint_positions,omitempty"` } func (x *MoveToJointPositionsRequest) Reset() { *x = MoveToJointPositionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[7] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -395,7 +515,7 @@ func (x *MoveToJointPositionsRequest) String() string { func (*MoveToJointPositionsRequest) ProtoMessage() {} func (x *MoveToJointPositionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[7] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -408,7 +528,7 @@ func (x *MoveToJointPositionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveToJointPositionsRequest.ProtoReflect.Descriptor instead. func (*MoveToJointPositionsRequest) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{7} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{8} } func (x *MoveToJointPositionsRequest) GetName() string { @@ -425,6 +545,13 @@ func (x *MoveToJointPositionsRequest) GetPositionDegs() *JointPositions { return nil } +func (x *MoveToJointPositionsRequest) GetJointPositions() []*JointPosition { + if x != nil { + return x.JointPositions + } + return nil +} + type MoveToJointPositionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -434,7 +561,7 @@ type MoveToJointPositionsResponse struct { func (x *MoveToJointPositionsResponse) Reset() { *x = MoveToJointPositionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[8] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -447,7 +574,7 @@ func (x *MoveToJointPositionsResponse) String() string { func (*MoveToJointPositionsResponse) ProtoMessage() {} func (x *MoveToJointPositionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[8] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -460,7 +587,7 @@ func (x *MoveToJointPositionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveToJointPositionsResponse.ProtoReflect.Descriptor instead. func (*MoveToJointPositionsResponse) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{8} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{9} } type Status struct { @@ -475,7 +602,7 @@ type Status struct { func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[9] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -488,7 +615,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[9] + mi := &file_proto_api_component_arm_v1_arm_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -501,7 +628,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{9} + return file_proto_api_component_arm_v1_arm_proto_rawDescGZIP(), []int{10} } func (x *Status) GetEndPosition() *v1.Pose { @@ -536,105 +663,130 @@ var file_proto_api_component_arm_v1_arm_proto_rawDesc = []byte{ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x65, 0x52, 0x04, 0x70, 0x6f, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x0e, 0x4a, 0x6f, 0x69, 0x6e, - 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, - 0x67, 0x72, 0x65, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52, 0x07, 0x64, 0x65, 0x67, - 0x72, 0x65, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6c, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, - 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x67, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x15, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x29, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x65, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x45, 0x0a, 0x0b, 0x77, - 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, - 0x1b, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x4f, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x67, - 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0c, - 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x65, 0x52, 0x0b, 0x65, - 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0f, 0x6a, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x0e, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, - 0xed, 0x05, 0x0a, 0x0a, 0x41, 0x72, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xab, - 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, - 0x12, 0x2a, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xab, 0x01, 0x0a, - 0x0e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x1a, 0x2a, - 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xbb, 0x01, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, - 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, + 0x73, 0x65, 0x52, 0x04, 0x70, 0x6f, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x0d, 0x4a, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0a, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x6a, 0x6f, + 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5a, + 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4a, + 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4a, 0x4f, 0x49, 0x4e, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x56, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x01, + 0x12, 0x18, 0x0a, 0x14, 0x4a, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, + 0x52, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x49, 0x43, 0x10, 0x02, 0x22, 0x2a, 0x0a, 0x0e, 0x4a, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52, 0x07, 0x64, + 0x65, 0x67, 0x72, 0x65, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x31, 0x2f, 0x76, - 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x55, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x64, 0x6b, 0x2e, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x65, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6a, 0x6f, 0x69, 0x6e, 0x74, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x15, 0x4d, 0x6f, + 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x65, 0x52, 0x02, + 0x74, 0x6f, 0x12, 0x45, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6c, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x6f, + 0x72, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x6f, 0x76, + 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x1b, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x6a, 0x6f, 0x69, 0x6e, + 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, + 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6a, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x1e, 0x0a, 0x1c, + 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x65, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0f, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x6a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xed, 0x05, 0x0a, 0x0a, 0x41, + 0x72, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x69, + 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xab, 0x01, 0x0a, 0x0e, 0x4d, 0x6f, 0x76, 0x65, + 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x5a, 0x2a, 0x67, 0x6f, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x61, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, + 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x1a, 0x2a, 0x2f, 0x76, 0x69, 0x61, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xbb, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, + 0x12, 0x31, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, + 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x31, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x61, 0x72, 0x6d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x74, + 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x55, 0x0a, 0x27, 0x63, 0x6f, + 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x64, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x5a, 0x2a, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x72, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x72, 0x6d, 0x2f, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -649,42 +801,48 @@ func file_proto_api_component_arm_v1_arm_proto_rawDescGZIP() []byte { return file_proto_api_component_arm_v1_arm_proto_rawDescData } -var file_proto_api_component_arm_v1_arm_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_proto_api_component_arm_v1_arm_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_proto_api_component_arm_v1_arm_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_proto_api_component_arm_v1_arm_proto_goTypes = []interface{}{ - (*GetEndPositionRequest)(nil), // 0: proto.api.component.arm.v1.GetEndPositionRequest - (*GetEndPositionResponse)(nil), // 1: proto.api.component.arm.v1.GetEndPositionResponse - (*JointPositions)(nil), // 2: proto.api.component.arm.v1.JointPositions - (*GetJointPositionsRequest)(nil), // 3: proto.api.component.arm.v1.GetJointPositionsRequest - (*GetJointPositionsResponse)(nil), // 4: proto.api.component.arm.v1.GetJointPositionsResponse - (*MoveToPositionRequest)(nil), // 5: proto.api.component.arm.v1.MoveToPositionRequest - (*MoveToPositionResponse)(nil), // 6: proto.api.component.arm.v1.MoveToPositionResponse - (*MoveToJointPositionsRequest)(nil), // 7: proto.api.component.arm.v1.MoveToJointPositionsRequest - (*MoveToJointPositionsResponse)(nil), // 8: proto.api.component.arm.v1.MoveToJointPositionsResponse - (*Status)(nil), // 9: proto.api.component.arm.v1.Status - (*v1.Pose)(nil), // 10: proto.api.common.v1.Pose - (*v1.WorldState)(nil), // 11: proto.api.common.v1.WorldState + (JointPosition_JointType)(0), // 0: proto.api.component.arm.v1.JointPosition.JointType + (*GetEndPositionRequest)(nil), // 1: proto.api.component.arm.v1.GetEndPositionRequest + (*GetEndPositionResponse)(nil), // 2: proto.api.component.arm.v1.GetEndPositionResponse + (*JointPosition)(nil), // 3: proto.api.component.arm.v1.JointPosition + (*JointPositions)(nil), // 4: proto.api.component.arm.v1.JointPositions + (*GetJointPositionsRequest)(nil), // 5: proto.api.component.arm.v1.GetJointPositionsRequest + (*GetJointPositionsResponse)(nil), // 6: proto.api.component.arm.v1.GetJointPositionsResponse + (*MoveToPositionRequest)(nil), // 7: proto.api.component.arm.v1.MoveToPositionRequest + (*MoveToPositionResponse)(nil), // 8: proto.api.component.arm.v1.MoveToPositionResponse + (*MoveToJointPositionsRequest)(nil), // 9: proto.api.component.arm.v1.MoveToJointPositionsRequest + (*MoveToJointPositionsResponse)(nil), // 10: proto.api.component.arm.v1.MoveToJointPositionsResponse + (*Status)(nil), // 11: proto.api.component.arm.v1.Status + (*v1.Pose)(nil), // 12: proto.api.common.v1.Pose + (*v1.WorldState)(nil), // 13: proto.api.common.v1.WorldState } var file_proto_api_component_arm_v1_arm_proto_depIdxs = []int32{ - 10, // 0: proto.api.component.arm.v1.GetEndPositionResponse.pose:type_name -> proto.api.common.v1.Pose - 2, // 1: proto.api.component.arm.v1.GetJointPositionsResponse.position_degs:type_name -> proto.api.component.arm.v1.JointPositions - 10, // 2: proto.api.component.arm.v1.MoveToPositionRequest.to:type_name -> proto.api.common.v1.Pose - 11, // 3: proto.api.component.arm.v1.MoveToPositionRequest.world_state:type_name -> proto.api.common.v1.WorldState - 2, // 4: proto.api.component.arm.v1.MoveToJointPositionsRequest.position_degs:type_name -> proto.api.component.arm.v1.JointPositions - 10, // 5: proto.api.component.arm.v1.Status.end_position:type_name -> proto.api.common.v1.Pose - 2, // 6: proto.api.component.arm.v1.Status.joint_positions:type_name -> proto.api.component.arm.v1.JointPositions - 0, // 7: proto.api.component.arm.v1.ArmService.GetEndPosition:input_type -> proto.api.component.arm.v1.GetEndPositionRequest - 5, // 8: proto.api.component.arm.v1.ArmService.MoveToPosition:input_type -> proto.api.component.arm.v1.MoveToPositionRequest - 3, // 9: proto.api.component.arm.v1.ArmService.GetJointPositions:input_type -> proto.api.component.arm.v1.GetJointPositionsRequest - 7, // 10: proto.api.component.arm.v1.ArmService.MoveToJointPositions:input_type -> proto.api.component.arm.v1.MoveToJointPositionsRequest - 1, // 11: proto.api.component.arm.v1.ArmService.GetEndPosition:output_type -> proto.api.component.arm.v1.GetEndPositionResponse - 6, // 12: proto.api.component.arm.v1.ArmService.MoveToPosition:output_type -> proto.api.component.arm.v1.MoveToPositionResponse - 4, // 13: proto.api.component.arm.v1.ArmService.GetJointPositions:output_type -> proto.api.component.arm.v1.GetJointPositionsResponse - 8, // 14: proto.api.component.arm.v1.ArmService.MoveToJointPositions:output_type -> proto.api.component.arm.v1.MoveToJointPositionsResponse - 11, // [11:15] is the sub-list for method output_type - 7, // [7:11] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 12, // 0: proto.api.component.arm.v1.GetEndPositionResponse.pose:type_name -> proto.api.common.v1.Pose + 0, // 1: proto.api.component.arm.v1.JointPosition.joint_type:type_name -> proto.api.component.arm.v1.JointPosition.JointType + 4, // 2: proto.api.component.arm.v1.GetJointPositionsResponse.position_degs:type_name -> proto.api.component.arm.v1.JointPositions + 3, // 3: proto.api.component.arm.v1.GetJointPositionsResponse.joint_positions:type_name -> proto.api.component.arm.v1.JointPosition + 12, // 4: proto.api.component.arm.v1.MoveToPositionRequest.to:type_name -> proto.api.common.v1.Pose + 13, // 5: proto.api.component.arm.v1.MoveToPositionRequest.world_state:type_name -> proto.api.common.v1.WorldState + 4, // 6: proto.api.component.arm.v1.MoveToJointPositionsRequest.position_degs:type_name -> proto.api.component.arm.v1.JointPositions + 3, // 7: proto.api.component.arm.v1.MoveToJointPositionsRequest.joint_positions:type_name -> proto.api.component.arm.v1.JointPosition + 12, // 8: proto.api.component.arm.v1.Status.end_position:type_name -> proto.api.common.v1.Pose + 4, // 9: proto.api.component.arm.v1.Status.joint_positions:type_name -> proto.api.component.arm.v1.JointPositions + 1, // 10: proto.api.component.arm.v1.ArmService.GetEndPosition:input_type -> proto.api.component.arm.v1.GetEndPositionRequest + 7, // 11: proto.api.component.arm.v1.ArmService.MoveToPosition:input_type -> proto.api.component.arm.v1.MoveToPositionRequest + 5, // 12: proto.api.component.arm.v1.ArmService.GetJointPositions:input_type -> proto.api.component.arm.v1.GetJointPositionsRequest + 9, // 13: proto.api.component.arm.v1.ArmService.MoveToJointPositions:input_type -> proto.api.component.arm.v1.MoveToJointPositionsRequest + 2, // 14: proto.api.component.arm.v1.ArmService.GetEndPosition:output_type -> proto.api.component.arm.v1.GetEndPositionResponse + 8, // 15: proto.api.component.arm.v1.ArmService.MoveToPosition:output_type -> proto.api.component.arm.v1.MoveToPositionResponse + 6, // 16: proto.api.component.arm.v1.ArmService.GetJointPositions:output_type -> proto.api.component.arm.v1.GetJointPositionsResponse + 10, // 17: proto.api.component.arm.v1.ArmService.MoveToJointPositions:output_type -> proto.api.component.arm.v1.MoveToJointPositionsResponse + 14, // [14:18] is the sub-list for method output_type + 10, // [10:14] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_proto_api_component_arm_v1_arm_proto_init() } @@ -718,7 +876,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JointPositions); i { + switch v := v.(*JointPosition); i { case 0: return &v.state case 1: @@ -730,7 +888,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJointPositionsRequest); i { + switch v := v.(*JointPositions); i { case 0: return &v.state case 1: @@ -742,7 +900,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJointPositionsResponse); i { + switch v := v.(*GetJointPositionsRequest); i { case 0: return &v.state case 1: @@ -754,7 +912,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveToPositionRequest); i { + switch v := v.(*GetJointPositionsResponse); i { case 0: return &v.state case 1: @@ -766,7 +924,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveToPositionResponse); i { + switch v := v.(*MoveToPositionRequest); i { case 0: return &v.state case 1: @@ -778,7 +936,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveToJointPositionsRequest); i { + switch v := v.(*MoveToPositionResponse); i { case 0: return &v.state case 1: @@ -790,7 +948,7 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveToJointPositionsResponse); i { + switch v := v.(*MoveToJointPositionsRequest); i { case 0: return &v.state case 1: @@ -802,6 +960,18 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } file_proto_api_component_arm_v1_arm_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MoveToJointPositionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_api_component_arm_v1_arm_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Status); i { case 0: return &v.state @@ -814,19 +984,20 @@ func file_proto_api_component_arm_v1_arm_proto_init() { } } } - file_proto_api_component_arm_v1_arm_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_proto_api_component_arm_v1_arm_proto_msgTypes[6].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_api_component_arm_v1_arm_proto_rawDesc, - NumEnums: 0, - NumMessages: 10, + NumEnums: 1, + NumMessages: 11, NumExtensions: 0, NumServices: 1, }, GoTypes: file_proto_api_component_arm_v1_arm_proto_goTypes, DependencyIndexes: file_proto_api_component_arm_v1_arm_proto_depIdxs, + EnumInfos: file_proto_api_component_arm_v1_arm_proto_enumTypes, MessageInfos: file_proto_api_component_arm_v1_arm_proto_msgTypes, }.Build() File_proto_api_component_arm_v1_arm_proto = out.File diff --git a/proto/api/component/arm/v1/arm.proto b/proto/api/component/arm/v1/arm.proto index 989b8d66624..03e4684b715 100644 --- a/proto/api/component/arm/v1/arm.proto +++ b/proto/api/component/arm/v1/arm.proto @@ -49,6 +49,21 @@ message GetEndPositionResponse { common.v1.Pose pose = 1; } +message JointPosition { + // the raw number parameters for the position. + repeated double parameters = 1; + // JointType indicates the type of joint represented by this position, + // and consequently, both the number of parameters and their units. + // REVOLUTE -> [degrees] + // PRISMATIC -> [millimeters] + enum JointType { + JOINT_TYPE_UNSPECIFIED = 0; + JOINT_TYPE_REVOLUTE = 1; + JOINT_TYPE_PRISMATIC = 2; + } + JointType joint_type = 2; +} + message JointPositions { // A list of joint positions represented in degrees // The numbers are ordered spatially from the base toward the end effector @@ -64,6 +79,8 @@ message GetJointPositionsRequest { message GetJointPositionsResponse { //a list JointPositions JointPositions position_degs = 1; + // A list of joint positions ordered spatially from the base toward the end effector + repeated JointPosition joint_positions = 2; } message MoveToPositionRequest { @@ -81,6 +98,8 @@ message MoveToJointPositionsRequest { // A list of joint positions represented in degrees // There should be 1 entry in the list per joint, ordered spatially from the base toward the end effector JointPositions position_degs = 2; + // A list of joint positions ordered spatially from the base toward the end effector + repeated JointPosition joint_positions = 3; } message MoveToJointPositionsResponse {} diff --git a/referenceframe/dynamic_frame_system_test.go b/referenceframe/dynamic_frame_system_test.go index d4162e5af76..06386c600ff 100644 --- a/referenceframe/dynamic_frame_system_test.go +++ b/referenceframe/dynamic_frame_system_test.go @@ -33,7 +33,7 @@ func TestSimpleRotationalFrame(t *testing.T) { test.That(t, transformPoint1.Z, test.ShouldAlmostEqual, expectP1.Z) // Rotate 90 degrees one way - positions["joint"] = []Input{{math.Pi / 2}} + positions["joint"] = []Input{{Value: math.Pi / 2, Units: Radians}} transformPoint2, err := fs.TransformPoint(positions, point, "joint", World) test.That(t, err, test.ShouldBeNil) test.That(t, transformPoint2.X, test.ShouldAlmostEqual, expectP2.X) @@ -41,7 +41,7 @@ func TestSimpleRotationalFrame(t *testing.T) { test.That(t, transformPoint2.Z, test.ShouldAlmostEqual, expectP2.Z) // Rotate 90 degrees the other way - positions["joint"] = []Input{{-math.Pi / 2}} + positions["joint"] = []Input{{Value: -math.Pi / 2, Units: Radians}} transformPoint3, err := fs.TransformPoint(positions, point, "joint", World) test.That(t, err, test.ShouldBeNil) test.That(t, transformPoint3.X, test.ShouldAlmostEqual, expectP3.X) @@ -70,7 +70,7 @@ func TestSimpleTranslationalFrame(t *testing.T) { test.That(t, transformPoint1.Z, test.ShouldAlmostEqual, 0) // Slide gantry by 45 - positions["gantry"] = []Input{{45.}} + positions["gantry"] = []Input{{Value: 45., Units: Millimeters}} transformPoint2, err := fs.TransformPoint(positions, startPoint, "gantry", World) test.That(t, err, test.ShouldBeNil) test.That(t, transformPoint2.X, test.ShouldAlmostEqual, endPoint.X) diff --git a/referenceframe/frame.go b/referenceframe/frame.go index 536612d4061..0bc66855d9c 100644 --- a/referenceframe/frame.go +++ b/referenceframe/frame.go @@ -44,16 +44,24 @@ func limitsAlmostEqual(a, b []Limit) bool { return true } +func NewDoFInputUnitMismatchError() error { + return errors.New( + "number of supplied input units does not match degrees of freedom of frame") +} + // RestrictedRandomFrameInputs will produce a list of valid, in-bounds inputs for the frame, restricting the range to // `lim` percent of the limits. -func RestrictedRandomFrameInputs(m Frame, rSeed *rand.Rand, lim float64) []Input { +func RestrictedRandomFrameInputs(m Frame, rSeed *rand.Rand, lim float64, inputUnits []Units) ([]Input, error) { if rSeed == nil { //nolint:gosec rSeed = rand.New(rand.NewSource(1)) } dof := m.DoF() + if len(dof) != len(inputUnits) { + return nil, NewDoFInputUnitMismatchError() + } pos := make([]Input, 0, len(dof)) - for _, limit := range dof { + for i, limit := range dof { l, u := limit.Min, limit.Max // Default to [-999,999] as range if limits are infinite @@ -65,20 +73,26 @@ func RestrictedRandomFrameInputs(m Frame, rSeed *rand.Rand, lim float64) []Input } jRange := math.Abs(u - l) - pos = append(pos, Input{lim * (rSeed.Float64()*jRange + l)}) + pos = append(pos, Input{ + Value: lim * (rSeed.Float64()*jRange + l), + Units: inputUnits[i], + }) } - return pos + return pos, nil } // RandomFrameInputs will produce a list of valid, in-bounds inputs for the referenceframe. -func RandomFrameInputs(m Frame, rSeed *rand.Rand) []Input { +func RandomFrameInputs(m Frame, rSeed *rand.Rand, inputUnits []Units) ([]Input, error) { if rSeed == nil { //nolint:gosec rSeed = rand.New(rand.NewSource(1)) } dof := m.DoF() + if len(dof) != len(inputUnits) { + return nil, NewDoFInputUnitMismatchError() + } pos := make([]Input, 0, len(dof)) - for _, lim := range dof { + for i, lim := range dof { l, u := lim.Min, lim.Max // Default to [-999,999] as range if limits are infinite @@ -90,9 +104,12 @@ func RandomFrameInputs(m Frame, rSeed *rand.Rand) []Input { } jRange := math.Abs(u - l) - pos = append(pos, Input{rSeed.Float64()*jRange + l}) + pos = append(pos, Input{ + Value: rSeed.Float64()*jRange + l, + Units: inputUnits[i], + }) } - return pos + return pos, nil } // Frame represents a reference frame, e.g. an arm, a joint, a gripper, a board, etc. diff --git a/referenceframe/frame_test.go b/referenceframe/frame_test.go index 93e53bb97e8..b610c2fcef0 100644 --- a/referenceframe/frame_test.go +++ b/referenceframe/frame_test.go @@ -70,9 +70,15 @@ func TestPrismaticFrame(t *testing.T) { frameLimits := frame.DoF() test.That(t, frameLimits[0], test.ShouldResemble, limit) - randomInputs := RandomFrameInputs(frame, nil) + inputUnits := make([]Units, len(frame.DoF())) + for i := 0; i < len(frame.DoF()); i++ { + inputUnits[i] = Radians + } + randomInputs, err := RandomFrameInputs(frame, nil, inputUnits) + test.That(t, err, test.ShouldNotBeNil) test.That(t, len(randomInputs), test.ShouldEqual, len(frame.DoF())) - restrictRandomInputs := RestrictedRandomFrameInputs(frame, nil, 0.001) + restrictRandomInputs, err := RestrictedRandomFrameInputs(frame, nil, 0.001, inputUnits) + test.That(t, err, test.ShouldNotBeNil) test.That(t, len(restrictRandomInputs), test.ShouldEqual, len(frame.DoF())) test.That(t, restrictRandomInputs[0].Value, test.ShouldBeLessThan, 0.03) test.That(t, restrictRandomInputs[0].Value, test.ShouldBeGreaterThan, -0.03) @@ -84,21 +90,48 @@ func TestRevoluteFrame(t *testing.T) { // expected output expPose := spatial.NewPoseFromAxisAngle(r3.Vector{0, 0, 0}, r3.Vector{1, 0, 0}, math.Pi/4) // 45 degrees // get expected transform back - input := JointPosToInputs(&pb.JointPositions{Degrees: []float64{45}}) + jps := []*pb.JointPosition{ + { + Parameters: []float64{45}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + input, err := JointPosToInputs(jps) + test.That(t, err, test.ShouldBeNil) pose, err := frame.Transform(input) test.That(t, err, test.ShouldBeNil) test.That(t, pose, test.ShouldResemble, expPose) // if you feed in too many inputs, should get error back - input = JointPosToInputs(&pb.JointPositions{Degrees: []float64{45, 55}}) + jps = []*pb.JointPosition{ + { + Parameters: []float64{45}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{55}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + input, err = JointPosToInputs(jps) + test.That(t, err, test.ShouldBeNil) _, err = frame.Transform(input) test.That(t, err, test.ShouldNotBeNil) // if you feed in empty input, should get errr back - input = JointPosToInputs(&pb.JointPositions{Degrees: []float64{}}) + jps = []*pb.JointPosition{} + input, err = JointPosToInputs(jps) + test.That(t, err, test.ShouldBeNil) _, err = frame.Transform(input) test.That(t, err, test.ShouldNotBeNil) // if you try to move beyond set limits, should get an error overLimit := 100.0 // degrees - input = JointPosToInputs(&pb.JointPositions{Degrees: []float64{overLimit}}) + jps = []*pb.JointPosition{ + { + Parameters: []float64{overLimit}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + input, err = JointPosToInputs(jps) + test.That(t, err, test.ShouldBeNil) _, err = frame.Transform(input) test.That(t, err, test.ShouldBeError, errors.Errorf("%.5f %s %.5f", utils.DegToRad(overLimit), OOBErrString, frame.DoF()[0])) // gets the correct limits back diff --git a/referenceframe/model_test.go b/referenceframe/model_test.go index e2270af2a59..db02857b792 100644 --- a/referenceframe/model_test.go +++ b/referenceframe/model_test.go @@ -52,13 +52,13 @@ func TestTransform(t *testing.T) { } } test.That(t, len(joints), test.ShouldEqual, 6) - pose, err := joints[0].Transform([]Input{{0}}) + pose, err := joints[0].Transform([]Input{{Value: 0, Units: Radians}}) test.That(t, err, test.ShouldBeNil) firstJov := pose.Orientation().OrientationVectorRadians() firstJovExpect := &spatial.OrientationVector{Theta: 0, OX: 0, OY: 0, OZ: 1} test.That(t, firstJov, test.ShouldResemble, firstJovExpect) - pose, err = joints[0].Transform([]Input{{1.5708}}) + pose, err = joints[0].Transform([]Input{{Value: 1.5708, Units: Radians}}) test.That(t, err, test.ShouldBeNil) firstJov = pose.Orientation().OrientationVectorRadians() firstJovExpect = &spatial.OrientationVector{Theta: 1.5708, OX: 0, OY: 0, OZ: 1} diff --git a/referenceframe/primitives.go b/referenceframe/primitives.go index 52347bdffde..87ed02660f6 100644 --- a/referenceframe/primitives.go +++ b/referenceframe/primitives.go @@ -2,23 +2,33 @@ package referenceframe import ( "context" + "errors" + "fmt" pb "go.viam.com/rdk/proto/api/component/arm/v1" "go.viam.com/rdk/utils" ) +type Units int + +const ( + Radians Units = iota + Millimeters +) + // Input wraps the input to a mutable frame, e.g. a joint angle or a gantry position. Revolute inputs should be in // radians. Prismatic inputs should be in mm. // TODO: Determine what more this needs, or eschew in favor of raw float64s if nothing needed. type Input struct { Value float64 + Units Units } // FloatsToInputs wraps a slice of floats in Inputs. func FloatsToInputs(floats []float64) []Input { inputs := make([]Input, len(floats)) for i, f := range floats { - inputs[i] = Input{f} + inputs[i] = Input{Value: f, Units: Radians} } return inputs } @@ -33,34 +43,75 @@ func InputsToFloats(inputs []Input) []float64 { } // InputsToJointPos will take a slice of Inputs which are all joint position radians, and return a JointPositions struct. -func InputsToJointPos(inputs []Input) *pb.JointPositions { - return JointPositionsFromRadians(InputsToFloats(inputs)) +func InputsToJointPos(inputs []Input) []*pb.JointPosition { + result := make([]*pb.JointPosition, len(inputs)) + for idx, input := range inputs { + if input.Units == Radians { + result[idx] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{utils.RadToDeg(input.Value)}, + } + } else if input.Units == Millimeters { + result[idx] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_PRISMATIC, + Parameters: []float64{input.Value}, + } + } + } + return result } // JointPosToInputs will take a pb.JointPositions which has values in Degrees, convert to Radians and wrap in Inputs. -func JointPosToInputs(jp *pb.JointPositions) []Input { - floats := JointPositionsToRadians(jp) - return FloatsToInputs(floats) +func JointPosToInputs(jointPositions []*pb.JointPosition) ([]Input, error) { + result := make([]Input, len(jointPositions)) + for idx, jp := range jointPositions { + jointType := jp.GetJointType() + switch jointType { + case pb.JointPosition_JOINT_TYPE_PRISMATIC: + rawVal := jp.GetParameters()[0] + result[idx] = Input{ + Units: Millimeters, + Value: rawVal, + } + case pb.JointPosition_JOINT_TYPE_REVOLUTE: + rawVal := jp.GetParameters()[0] + result[idx] = Input{ + Units: Radians, + Value: utils.DegToRad(rawVal), + } + case pb.JointPosition_JOINT_TYPE_UNSPECIFIED: + return nil, errors.New("encountered unspecified joint type") + } + } + return result, nil } -// JointPositionsToRadians converts the given positions into a slice -// of radians. -func JointPositionsToRadians(jp *pb.JointPositions) []float64 { - n := make([]float64, len(jp.Degrees)) - for idx, d := range jp.Degrees { - n[idx] = utils.DegToRad(d) +// JointPositionsToRadians converts the given joint positions into a slice +// of radians. NOTE: Zeroes are inserted for joints that are not revolute +func JointPositionsToRadians(jointPositions []*pb.JointPosition) []float64 { + n := make([]float64, len(jointPositions)) + for idx, jp := range jointPositions { + val := jp.GetParameters()[0] + if jp.GetJointType() == pb.JointPosition_JOINT_TYPE_REVOLUTE { + n[idx] = utils.DegToRad(val) + } else { + n[idx] = 0 + } } return n } // JointPositionsFromRadians converts the given slice of radians into // joint positions (represented in degrees). -func JointPositionsFromRadians(radians []float64) *pb.JointPositions { - n := make([]float64, len(radians)) +func JointPositionsFromRadians(radians []float64) []*pb.JointPosition { + result := make([]*pb.JointPosition, len(radians)) for idx, a := range radians { - n[idx] = utils.RadToDeg(a) + result[idx] = &pb.JointPosition{ + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + Parameters: []float64{utils.RadToDeg(a)}, + } } - return &pb.JointPositions{Degrees: n} + return result } // InputEnabled is a standard interface for all things that interact with the frame system @@ -74,10 +125,16 @@ type InputEnabled interface { // InterpolateInputs will return a set of inputs that are the specified percent between the two given sets of // inputs. For example, setting by to 0.5 will return the inputs halfway between the from/to values, and 0.25 would // return one quarter of the way from "from" to "to". -func InterpolateInputs(from, to []Input, by float64) []Input { +func InterpolateInputs(from, to []Input, by float64) ([]Input, error) { var newVals []Input for i, j1 := range from { - newVals = append(newVals, Input{j1.Value + ((to[i].Value - j1.Value) * by)}) + if to[i].Units != j1.Units { + return nil, fmt.Errorf("mismatched units for inputs at index %d", i) + } + newVals = append(newVals, Input{ + Value: j1.Value + ((to[i].Value - j1.Value) * by), + Units: j1.Units, + }) } - return newVals + return newVals, nil } diff --git a/referenceframe/primitives_test.go b/referenceframe/primitives_test.go index 7caa3aeb917..b64d764af46 100644 --- a/referenceframe/primitives_test.go +++ b/referenceframe/primitives_test.go @@ -12,14 +12,26 @@ import ( func TestJointPositions(t *testing.T) { in := []float64{0, math.Pi} j := JointPositionsFromRadians(in) - test.That(t, j.Degrees[0], test.ShouldEqual, 0.0) - test.That(t, j.Degrees[1], test.ShouldEqual, 180.0) + test.That(t, j[0].GetParameters(), test.ShouldResemble, []float64{0.0}) + test.That(t, j[0].GetJointType(), test.ShouldEqual, pb.JointPosition_JOINT_TYPE_REVOLUTE) + test.That(t, j[1].GetParameters(), test.ShouldEqual, []float64{180.0}) + test.That(t, j[1].GetJointType(), test.ShouldEqual, pb.JointPosition_JOINT_TYPE_REVOLUTE) test.That(t, JointPositionsToRadians(j), test.ShouldResemble, in) } func TestBasicConversions(t *testing.T) { - jp := &pb.JointPositions{Degrees: []float64{45, 55}} - inputs := JointPosToInputs(jp) + jp := []*pb.JointPosition{ + { + Parameters: []float64{45}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{55}, + JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + inputs, err := JointPosToInputs(jp) + test.That(t, err, test.ShouldBeNil) test.That(t, jp, test.ShouldResemble, InputsToJointPos(inputs)) floats := []float64{45, 55, 27} @@ -33,8 +45,10 @@ func TestInterpolateValues(t *testing.T) { jpHalf := FloatsToInputs([]float64{4, -2}) jpQuarter := FloatsToInputs([]float64{2, 1}) - interp1 := InterpolateInputs(jp1, jp2, 0.5) - interp2 := InterpolateInputs(jp1, jp2, 0.25) + interp1, err := InterpolateInputs(jp1, jp2, 0.5) + test.That(t, err, test.ShouldBeNil) + interp2, err := InterpolateInputs(jp1, jp2, 0.25) + test.That(t, err, test.ShouldBeNil) test.That(t, interp1, test.ShouldResemble, jpHalf) test.That(t, interp2, test.ShouldResemble, jpQuarter) } diff --git a/samples/chess/cmd.go b/samples/chess/cmd.go index 1f74a55b293..3408716fa50 100644 --- a/samples/chess/cmd.go +++ b/samples/chess/cmd.go @@ -236,7 +236,9 @@ func moveJointDelta(ctx context.Context, myArm arm.Arm, joint int, degAngle floa if err != nil { return err } - joints.Degrees[joint] += degAngle + params := joints[joint].GetParameters() + params[0] += degAngle + joints[joint].Parameters = params return myArm.MoveToJointPositions(ctx, joints) } diff --git a/samples/resetbox/arduino/arduino-resetbox.go b/samples/resetbox/arduino/arduino-resetbox.go index c73a7873cd1..9f459f76376 100644 --- a/samples/resetbox/arduino/arduino-resetbox.go +++ b/samples/resetbox/arduino/arduino-resetbox.go @@ -22,20 +22,320 @@ import ( ) var ( - logger = golog.NewDevelopmentLogger("resetbox1") - startPos = &componentpb.JointPositions{Degrees: []float64{0, -13, -42, 0, 45, 0}} - safeDumpPos = &componentpb.JointPositions{Degrees: []float64{0, -43, -71, 0, 98, 0}} - grabReadyPos = &componentpb.JointPositions{Degrees: []float64{-180, -26.8, -33, 0.2, 51, 0}} - cube1grab = &componentpb.JointPositions{Degrees: []float64{-183, 16.9, -41.1, 2, 26.75, 0}} - cube2grab = &componentpb.JointPositions{Degrees: []float64{-184.8, 20, -30.2, -5.7, -5.7, -0.2}} - cube1place = &componentpb.JointPositions{Degrees: []float64{-84.75, 26.5, -29.9, -80.3, -23.27, -2.75}} - cube1placePost = &componentpb.JointPositions{Degrees: []float64{-84.75, 26.5, -29.9, -80.3, -32.27, -2.75}} - cube2place = &componentpb.JointPositions{Degrees: []float64{21.4, 41.3, -30.35, -5.7, -53.27, -0.2}} - - duckgrabFW = &componentpb.JointPositions{Degrees: []float64{-181.9, 20.45, -53.85, -3.5, 44.4, -0.08}} - duckplaceFW = &componentpb.JointPositions{Degrees: []float64{-3.2, 32.8, -70.65, -9.3, 49, 165.12}} - duckgrabREV = &componentpb.JointPositions{Degrees: []float64{-181.4, 18.15, -40.1, -3.5, 15.5, -0.08}} - duckplaceREV = &componentpb.JointPositions{Degrees: []float64{-14.6, 27.3, -24.04, -11.8, -34.35, -9.7}} + logger = golog.NewDevelopmentLogger("resetbox1") + startPos = []*componentpb.JointPosition{ + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{13}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-42}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{45}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + safeDumpPos = []*componentpb.JointPosition{ + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-43}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-71}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{98}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + grabReadyPos = []*componentpb.JointPosition{ + { + Parameters: []float64{-180}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-26.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-33}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{51}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + cube1grab = []*componentpb.JointPosition{ + { + Parameters: []float64{-183}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{16.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-41.1}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{26.75}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + cube2grab = []*componentpb.JointPosition{ + { + Parameters: []float64{-184.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{20}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-30.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-5.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-5.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + cube1place = []*componentpb.JointPosition{ + { + Parameters: []float64{-84.75}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{26.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-29.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-80.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-23.27}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-2.75}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + cube1placePost = []*componentpb.JointPosition{ + { + Parameters: []float64{-84.75}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{26.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-29.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-80.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-32.27}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-2.75}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + cube2place = []*componentpb.JointPosition{ + { + Parameters: []float64{21.4}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{41.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-30.35}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-5.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-53.27}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + + duckgrabFW = []*componentpb.JointPosition{ + { + Parameters: []float64{-181.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{20.45}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-53.85}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-3.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{44.4}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.08}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + duckplaceFW = []*componentpb.JointPosition{ + { + Parameters: []float64{-3.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{32.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-70.65}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-9.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{49}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{165.12}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + duckgrabREV = []*componentpb.JointPosition{ + { + Parameters: []float64{-181.4}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{18.15}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-40.1}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-3.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{15.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.08}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } + duckplaceREV = []*componentpb.JointPosition{ + { + Parameters: []float64{-14.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{27.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-24.04}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-11.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-34.35}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-9.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } armName = "xArm6" gripperName = "vg1" diff --git a/samples/resetbox/cmd.go b/samples/resetbox/cmd.go index f30b880cc35..c85ad9e3300 100644 --- a/samples/resetbox/cmd.go +++ b/samples/resetbox/cmd.go @@ -53,30 +53,305 @@ var ( //nolint:unused vibeLevel = float64(0.7) - safeDumpPos = &componentpb.JointPositions{Degrees: []float64{0, -43, -71, 0, 98, 0}} + safeDumpPos = []*componentpb.JointPosition{ + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{43}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-71}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{98}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - cubeReadyPos = &componentpb.JointPositions{Degrees: []float64{-182.6, -26.8, -33.0, 0, 51.0, 0}} + // cubeReadyPos = &componentpb.JointPositions{Degrees: []float64{-182.6, -26.8, -33.0, 0, 51.0, 0}} + cubeReadyPos = []*componentpb.JointPosition{ + { + Parameters: []float64{-182.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-26.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-33}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{51}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - cube1grab = &componentpb.JointPositions{Degrees: []float64{-182.6, 11.2, -51.8, 0, 48.6, 0}} + cube1grab = []*componentpb.JointPosition{ + { + Parameters: []float64{-182.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{11.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-51.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{48.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - cube2grab = &componentpb.JointPositions{Degrees: []float64{-182.6, 7.3, -36.9, 0, 17.6, 0}} + cube2grab = []*componentpb.JointPosition{ + { + Parameters: []float64{-182.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{7.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-36.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{17.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - cube1place = &componentpb.JointPositions{Degrees: []float64{50, 20, -35, -0.5, 3.0, 0}} + cube1place = []*componentpb.JointPosition{ + { + Parameters: []float64{50}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{20}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-35}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - cube2place = &componentpb.JointPositions{Degrees: []float64{-130, 30.5, -28.7, -0.5, -32.2, 0}} + cube2place = []*componentpb.JointPosition{ + { + Parameters: []float64{-130}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{30.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-28.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-0.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-32.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - duckgrabFW = &componentpb.JointPositions{Degrees: []float64{-180.5, 27.7, -79.7, -2.8, 76.20, 180}} + duckgrabFW = []*componentpb.JointPosition{ + { + Parameters: []float64{-180.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{27.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-79.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-2.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{76.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{180}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - duckgrabREV = &componentpb.JointPositions{Degrees: []float64{-180.5, 28.3, -76.8, -2.8, 65.45, 180}} + duckgrabREV = []*componentpb.JointPosition{ + { + Parameters: []float64{-180.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{28.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-76.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-2.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{65.45}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{180}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - duckReadyPos = &componentpb.JointPositions{Degrees: []float64{-180.5, 0.0, -60.0, -2.8, 65.45, 180}} - + duckReadyPos = []*componentpb.JointPosition{ + { + Parameters: []float64{-180.5}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{0}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-60}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-2.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{65.45}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{180}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - duckplaceFW = &componentpb.JointPositions{Degrees: []float64{-21.3, 14.9, -39.0, 6.8, 22.0, 49.6}} + duckplaceFW = []*componentpb.JointPosition{ + { + Parameters: []float64{-21.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{14.9}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-39}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{6.8}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{22}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{49.6}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } //nolint:unused - duckplaceREV = &componentpb.JointPositions{Degrees: []float64{-19.2, 18, -41.0, 6.3, 22.7, 230}} + duckplaceREV = []*componentpb.JointPosition{ + { + Parameters: []float64{-19.2}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{18}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{-41}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{6.3}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{22.7}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + { + Parameters: []float64{230}, + JointType: componentpb.JointPosition_JOINT_TYPE_REVOLUTE, + }, + } ) var logger = golog.NewDevelopmentLogger("resetbox") diff --git a/testutils/inject/arm.go b/testutils/inject/arm.go index 81c744d2375..e332672f11f 100644 --- a/testutils/inject/arm.go +++ b/testutils/inject/arm.go @@ -15,8 +15,8 @@ type Arm struct { arm.Arm GetEndPositionFunc func(ctx context.Context) (*commonpb.Pose, error) MoveToPositionFunc func(ctx context.Context, to *commonpb.Pose, worldState *commonpb.WorldState) error - MoveToJointPositionsFunc func(ctx context.Context, pos *pb.JointPositions) error - GetJointPositionsFunc func(ctx context.Context) (*pb.JointPositions, error) + MoveToJointPositionsFunc func(ctx context.Context, pos []*pb.JointPosition) error + GetJointPositionsFunc func(ctx context.Context) ([]*pb.JointPosition, error) CloseFunc func(ctx context.Context) error } @@ -37,7 +37,7 @@ func (a *Arm) MoveToPosition(ctx context.Context, to *commonpb.Pose, worldState } // MoveToJointPositions calls the injected MoveToJointPositions or the real version. -func (a *Arm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) error { +func (a *Arm) MoveToJointPositions(ctx context.Context, jp []*pb.JointPosition) error { if a.MoveToJointPositionsFunc == nil { return a.Arm.MoveToJointPositions(ctx, jp) } @@ -45,7 +45,7 @@ func (a *Arm) MoveToJointPositions(ctx context.Context, jp *pb.JointPositions) e } // GetJointPositions calls the injected GetJointPositions or the real version. -func (a *Arm) GetJointPositions(ctx context.Context) (*pb.JointPositions, error) { +func (a *Arm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, error) { if a.GetJointPositionsFunc == nil { return a.Arm.GetJointPositions(ctx) } From 73d0fbbc9caddb4a03227a3214e036de9cd16f10 Mon Sep 17 00:00:00 2001 From: Gautham Varadarajan Date: Thu, 21 Apr 2022 12:31:13 -0400 Subject: [PATCH 2/2] lint --- component/arm/server_test.go | 2 - component/arm/vx300s/vx300s.go | 1 - component/arm/xarm/xarm_comm.go | 3 + motionplan/cBiRRTPlan.go | 10 +- motionplan/solvableFrameSystem.go | 10 +- referenceframe/frame.go | 3 + referenceframe/primitives.go | 6 +- samples/resetbox/cmd.go | 2 +- web/runtime-shared/static/control.js | 350 ++++++++++++++++++++++++++- 9 files changed, 373 insertions(+), 14 deletions(-) diff --git a/component/arm/server_test.go b/component/arm/server_test.go index 16b4c7640f0..ebabab56b36 100644 --- a/component/arm/server_test.go +++ b/component/arm/server_test.go @@ -119,7 +119,6 @@ func TestServer(t *testing.T) { test.That(t, err.Error(), test.ShouldContainSubstring, "can't get pose") }) - //nolint:dupl t.Run("move to position", func(t *testing.T) { _, err = armServer.MoveToPosition(context.Background(), &pb.MoveToPositionRequest{Name: missingArmName, To: pose2}) test.That(t, err, test.ShouldNotBeNil) @@ -153,7 +152,6 @@ func TestServer(t *testing.T) { test.That(t, err.Error(), test.ShouldContainSubstring, "can't get joint positions") }) - //nolint:dupl t.Run("move to joint position", func(t *testing.T) { _, err = armServer.MoveToJointPositions( context.Background(), diff --git a/component/arm/vx300s/vx300s.go b/component/arm/vx300s/vx300s.go index c7f0ba21460..7b95150a64f 100644 --- a/component/arm/vx300s/vx300s.go +++ b/component/arm/vx300s/vx300s.go @@ -187,7 +187,6 @@ func (a *myArm) GetJointPositions(ctx context.Context) ([]*pb.JointPosition, err Parameters: []float64{servoDeg}, JointType: pb.JointPosition_JOINT_TYPE_REVOLUTE, } - } return positions, nil diff --git a/component/arm/xarm/xarm_comm.go b/component/arm/xarm/xarm_comm.go index b73579df104..73f01a31569 100644 --- a/component/arm/xarm/xarm_comm.go +++ b/component/arm/xarm/xarm_comm.go @@ -369,6 +369,9 @@ func (x *xArm) MoveToJointPositions(ctx context.Context, newPositions []*pb.Join nSteps := int((diff / float64(x.speed)) * x.moveHZ) for i := 1; i <= nSteps; i++ { interpolatedInputs, err := referenceframe.InterpolateInputs(from, to, float64(i)/float64(nSteps)) + if err != nil { + return err + } step := referenceframe.InputsToFloats(interpolatedInputs) c := x.newCmd(regMap["MoveJoints"]) diff --git a/motionplan/cBiRRTPlan.go b/motionplan/cBiRRTPlan.go index 5821ac6e9a2..b7c72012862 100644 --- a/motionplan/cBiRRTPlan.go +++ b/motionplan/cBiRRTPlan.go @@ -88,10 +88,14 @@ func (mp *cBiRRTMotionPlanner) Plan(ctx context.Context, opt *PlannerOptions, ) ([][]referenceframe.Input, error) { solutionChan := make(chan *planReturn, 1) + var planRunnerErr error utils.PanicCapturingGo(func() { // TODO(rb) fix me - mp.planRunner(ctx, goal, seed, map[string]spatial.Geometry{}, opt, nil, solutionChan) + planRunnerErr = mp.planRunner(ctx, goal, seed, map[string]spatial.Geometry{}, opt, nil, solutionChan) }) + if planRunnerErr != nil { + return nil, planRunnerErr + } select { case <-ctx.Done(): return nil, ctx.Err() @@ -122,7 +126,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, seedPos, err := mp.frame.Transform(seed) if err != nil { solutionChan <- &planReturn{err: err} - return nil + return err } goalPos := spatial.NewPoseFromProtobuf(fixOvIncrement(goal, spatial.PoseToProtobuf(seedPos))) if len(obstacles) == 0 { @@ -149,7 +153,7 @@ func (mp *cBiRRTMotionPlanner) planRunner(ctx context.Context, solutions, err := getSolutions(ctx, opt, mp.solver, goal, seed, mp.Frame()) if err != nil { solutionChan <- &planReturn{err: err} - return nil + return err } // Get the N best solutions diff --git a/motionplan/solvableFrameSystem.go b/motionplan/solvableFrameSystem.go index afd3a7b9f20..2d8ea0f9472 100644 --- a/motionplan/solvableFrameSystem.go +++ b/motionplan/solvableFrameSystem.go @@ -137,10 +137,18 @@ func plannerRunner(ctx context.Context, // cBiRRT supports solution look-ahead for parallel waypoint solving endpointPreview := make(chan *configuration, 1) solutionChan := make(chan *planReturn, 1) + var planRunnerErr error utils.PanicCapturingGo(func() { // TODO(rb) fix me - cbert.planRunner(ctx, spatial.PoseToProtobuf(goal), seed, map[string]spatial.Geometry{}, opt, endpointPreview, solutionChan) + planRunnerErr = cbert.planRunner( + ctx, + spatial.PoseToProtobuf(goal), seed, map[string]spatial.Geometry{}, + opt, endpointPreview, solutionChan, + ) }) + if planRunnerErr != nil { + return nil, planRunnerErr + } for { select { case <-ctx.Done(): diff --git a/referenceframe/frame.go b/referenceframe/frame.go index 0bc66855d9c..a51dc5291fd 100644 --- a/referenceframe/frame.go +++ b/referenceframe/frame.go @@ -44,6 +44,9 @@ func limitsAlmostEqual(a, b []Limit) bool { return true } +// NewDoFInputUnitMismatchError returns an error representing the scenario when +// the number of supplied input units does not match the degrees of freedom of +// the supplied frame. func NewDoFInputUnitMismatchError() error { return errors.New( "number of supplied input units does not match degrees of freedom of frame") diff --git a/referenceframe/primitives.go b/referenceframe/primitives.go index 87ed02660f6..6633028700b 100644 --- a/referenceframe/primitives.go +++ b/referenceframe/primitives.go @@ -9,8 +9,12 @@ import ( "go.viam.com/rdk/utils" ) +// Units is an enumerated type indicating the units of the Value +// for an Input. type Units int +// These are the currently supported Units for Inputs. When more +// sophisticated Input types are supported, add any new units here. const ( Radians Units = iota Millimeters @@ -87,7 +91,7 @@ func JointPosToInputs(jointPositions []*pb.JointPosition) ([]Input, error) { } // JointPositionsToRadians converts the given joint positions into a slice -// of radians. NOTE: Zeroes are inserted for joints that are not revolute +// of radians. NOTE: Zeroes are inserted for joints that are not revolute. func JointPositionsToRadians(jointPositions []*pb.JointPosition) []float64 { n := make([]float64, len(jointPositions)) for idx, jp := range jointPositions { diff --git a/samples/resetbox/cmd.go b/samples/resetbox/cmd.go index c85ad9e3300..754d3582338 100644 --- a/samples/resetbox/cmd.go +++ b/samples/resetbox/cmd.go @@ -80,7 +80,7 @@ var ( }, } //nolint:unused - // cubeReadyPos = &componentpb.JointPositions{Degrees: []float64{-182.6, -26.8, -33.0, 0, 51.0, 0}} + // cubeReadyPos = &componentpb.JointPositions{Degrees: []float64{-182.6, -26.8, -33.0, 0, 51.0, 0}}. cubeReadyPos = []*componentpb.JointPosition{ { Parameters: []float64{-182.6}, diff --git a/web/runtime-shared/static/control.js b/web/runtime-shared/static/control.js index aad54f5f639..c76ec908ce0 100644 --- a/web/runtime-shared/static/control.js +++ b/web/runtime-shared/static/control.js @@ -107144,6 +107144,8 @@ goog.exportSymbol('proto.proto.api.component.arm.v1.GetEndPositionRequest', null goog.exportSymbol('proto.proto.api.component.arm.v1.GetEndPositionResponse', null, global); goog.exportSymbol('proto.proto.api.component.arm.v1.GetJointPositionsRequest', null, global); goog.exportSymbol('proto.proto.api.component.arm.v1.GetJointPositionsResponse', null, global); +goog.exportSymbol('proto.proto.api.component.arm.v1.JointPosition', null, global); +goog.exportSymbol('proto.proto.api.component.arm.v1.JointPosition.JointType', null, global); goog.exportSymbol('proto.proto.api.component.arm.v1.JointPositions', null, global); goog.exportSymbol('proto.proto.api.component.arm.v1.MoveToJointPositionsRequest', null, global); goog.exportSymbol('proto.proto.api.component.arm.v1.MoveToJointPositionsResponse', null, global); @@ -107192,6 +107194,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.proto.api.component.arm.v1.GetEndPositionResponse.displayName = 'proto.proto.api.component.arm.v1.GetEndPositionResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.proto.api.component.arm.v1.JointPosition = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.proto.api.component.arm.v1.JointPosition.repeatedFields_, null); +}; +goog.inherits(proto.proto.api.component.arm.v1.JointPosition, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.proto.api.component.arm.v1.JointPosition.displayName = 'proto.proto.api.component.arm.v1.JointPosition'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -107245,7 +107268,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.proto.api.component.arm.v1.GetJointPositionsResponse = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.proto.api.component.arm.v1.GetJointPositionsResponse.repeatedFields_, null); }; goog.inherits(proto.proto.api.component.arm.v1.GetJointPositionsResponse, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -107308,7 +107331,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.proto.api.component.arm.v1.MoveToJointPositionsRequest = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.repeatedFields_, null); }; goog.inherits(proto.proto.api.component.arm.v1.MoveToJointPositionsRequest, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -107642,6 +107665,203 @@ proto.proto.api.component.arm.v1.GetEndPositionResponse.prototype.hasPose = func +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.proto.api.component.arm.v1.JointPosition.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.toObject = function(opt_includeInstance) { + return proto.proto.api.component.arm.v1.JointPosition.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.proto.api.component.arm.v1.JointPosition} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.proto.api.component.arm.v1.JointPosition.toObject = function(includeInstance, msg) { + var f, obj = { + parametersList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 1)) == null ? undefined : f, + jointType: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.proto.api.component.arm.v1.JointPosition} + */ +proto.proto.api.component.arm.v1.JointPosition.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.proto.api.component.arm.v1.JointPosition; + return proto.proto.api.component.arm.v1.JointPosition.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.proto.api.component.arm.v1.JointPosition} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.proto.api.component.arm.v1.JointPosition} + */ +proto.proto.api.component.arm.v1.JointPosition.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedDouble() : [reader.readDouble()]); + for (var i = 0; i < values.length; i++) { + msg.addParameters(values[i]); + } + break; + case 2: + var value = /** @type {!proto.proto.api.component.arm.v1.JointPosition.JointType} */ (reader.readEnum()); + msg.setJointType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.proto.api.component.arm.v1.JointPosition.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.proto.api.component.arm.v1.JointPosition} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.proto.api.component.arm.v1.JointPosition.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersList(); + if (f.length > 0) { + writer.writePackedDouble( + 1, + f + ); + } + f = message.getJointType(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.proto.api.component.arm.v1.JointPosition.JointType = { + JOINT_TYPE_UNSPECIFIED: 0, + JOINT_TYPE_REVOLUTE: 1, + JOINT_TYPE_PRISMATIC: 2 +}; + +/** + * repeated double parameters = 1; + * @return {!Array} + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.getParametersList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.proto.api.component.arm.v1.JointPosition} returns this + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.setParametersList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.proto.api.component.arm.v1.JointPosition} returns this + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.addParameters = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.proto.api.component.arm.v1.JointPosition} returns this + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.clearParametersList = function() { + return this.setParametersList([]); +}; + + +/** + * optional JointType joint_type = 2; + * @return {!proto.proto.api.component.arm.v1.JointPosition.JointType} + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.getJointType = function() { + return /** @type {!proto.proto.api.component.arm.v1.JointPosition.JointType} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {!proto.proto.api.component.arm.v1.JointPosition.JointType} value + * @return {!proto.proto.api.component.arm.v1.JointPosition} returns this + */ +proto.proto.api.component.arm.v1.JointPosition.prototype.setJointType = function(value) { + return jspb.Message.setProto3EnumField(this, 2, value); +}; + + + /** * List of repeated fields within this message type. * @private {!Array} @@ -107930,6 +108150,13 @@ proto.proto.api.component.arm.v1.GetJointPositionsRequest.prototype.setName = fu +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.proto.api.component.arm.v1.GetJointPositionsResponse.repeatedFields_ = [2]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -107961,7 +108188,9 @@ proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.toObject = */ proto.proto.api.component.arm.v1.GetJointPositionsResponse.toObject = function(includeInstance, msg) { var f, obj = { - positionDegs: (f = msg.getPositionDegs()) && proto.proto.api.component.arm.v1.JointPositions.toObject(includeInstance, f) + positionDegs: (f = msg.getPositionDegs()) && proto.proto.api.component.arm.v1.JointPositions.toObject(includeInstance, f), + jointPositionsList: jspb.Message.toObjectList(msg.getJointPositionsList(), + proto.proto.api.component.arm.v1.JointPosition.toObject, includeInstance) }; if (includeInstance) { @@ -108003,6 +108232,11 @@ proto.proto.api.component.arm.v1.GetJointPositionsResponse.deserializeBinaryFrom reader.readMessage(value,proto.proto.api.component.arm.v1.JointPositions.deserializeBinaryFromReader); msg.setPositionDegs(value); break; + case 2: + var value = new proto.proto.api.component.arm.v1.JointPosition; + reader.readMessage(value,proto.proto.api.component.arm.v1.JointPosition.deserializeBinaryFromReader); + msg.addJointPositions(value); + break; default: reader.skipField(); break; @@ -108040,6 +108274,14 @@ proto.proto.api.component.arm.v1.GetJointPositionsResponse.serializeBinaryToWrit proto.proto.api.component.arm.v1.JointPositions.serializeBinaryToWriter ); } + f = message.getJointPositionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.proto.api.component.arm.v1.JointPosition.serializeBinaryToWriter + ); + } }; @@ -108080,6 +108322,44 @@ proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.hasPosition }; +/** + * repeated JointPosition joint_positions = 2; + * @return {!Array} + */ +proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.getJointPositionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.proto.api.component.arm.v1.JointPosition, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.proto.api.component.arm.v1.GetJointPositionsResponse} returns this +*/ +proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.setJointPositionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.proto.api.component.arm.v1.JointPosition=} opt_value + * @param {number=} opt_index + * @return {!proto.proto.api.component.arm.v1.JointPosition} + */ +proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.addJointPositions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.proto.api.component.arm.v1.JointPosition, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.proto.api.component.arm.v1.GetJointPositionsResponse} returns this + */ +proto.proto.api.component.arm.v1.GetJointPositionsResponse.prototype.clearJointPositionsList = function() { + return this.setJointPositionsList([]); +}; + + @@ -108414,6 +108694,13 @@ proto.proto.api.component.arm.v1.MoveToPositionResponse.serializeBinaryToWriter +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.repeatedFields_ = [3]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -108446,7 +108733,9 @@ proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.toObject proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.toObject = function(includeInstance, msg) { var f, obj = { name: jspb.Message.getFieldWithDefault(msg, 1, ""), - positionDegs: (f = msg.getPositionDegs()) && proto.proto.api.component.arm.v1.JointPositions.toObject(includeInstance, f) + positionDegs: (f = msg.getPositionDegs()) && proto.proto.api.component.arm.v1.JointPositions.toObject(includeInstance, f), + jointPositionsList: jspb.Message.toObjectList(msg.getJointPositionsList(), + proto.proto.api.component.arm.v1.JointPosition.toObject, includeInstance) }; if (includeInstance) { @@ -108492,6 +108781,11 @@ proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.deserializeBinaryFr reader.readMessage(value,proto.proto.api.component.arm.v1.JointPositions.deserializeBinaryFromReader); msg.setPositionDegs(value); break; + case 3: + var value = new proto.proto.api.component.arm.v1.JointPosition; + reader.readMessage(value,proto.proto.api.component.arm.v1.JointPosition.deserializeBinaryFromReader); + msg.addJointPositions(value); + break; default: reader.skipField(); break; @@ -108536,6 +108830,14 @@ proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.serializeBinaryToWr proto.proto.api.component.arm.v1.JointPositions.serializeBinaryToWriter ); } + f = message.getJointPositionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + proto.proto.api.component.arm.v1.JointPosition.serializeBinaryToWriter + ); + } }; @@ -108594,6 +108896,44 @@ proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.hasPositi }; +/** + * repeated JointPosition joint_positions = 3; + * @return {!Array} + */ +proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.getJointPositionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.proto.api.component.arm.v1.JointPosition, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.proto.api.component.arm.v1.MoveToJointPositionsRequest} returns this +*/ +proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.setJointPositionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.proto.api.component.arm.v1.JointPosition=} opt_value + * @param {number=} opt_index + * @return {!proto.proto.api.component.arm.v1.JointPosition} + */ +proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.addJointPositions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.proto.api.component.arm.v1.JointPosition, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.proto.api.component.arm.v1.MoveToJointPositionsRequest} returns this + */ +proto.proto.api.component.arm.v1.MoveToJointPositionsRequest.prototype.clearJointPositionsList = function() { + return this.setJointPositionsList([]); +}; + + @@ -137590,4 +137930,4 @@ window.connect = connect; /******/ })() ; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL0BpbXByb2JhYmxlLWVuZy9ncnBjLXdlYi9kaXN0L2dycGMtd2ViLWNsaWVudC51bWQuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9AdmlhbXJvYm90aWNzL3JwYy9kaXN0L21haW4uanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlLXByb3RvYnVmLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9hbnlfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2J1aWxkL3RocmVlLmNqcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2J1aWxkL3RocmVlLm1vZHVsZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2NvbnRyb2xzL1RyYWNrYmFsbENvbnRyb2xzLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUENETG9hZGVyLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vZ29vZ2xlL2FwaS9odHRwX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL2dvb2dsZS9hcGkvaHR0cGJvZHlfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYXJtL3YxL2FybV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9ib2FyZC92MS9ib2FyZF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2JvYXJkL3YxL2JvYXJkX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvY2FtZXJhL3YxL2NhbWVyYV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ2FudHJ5L3YxL2dhbnRyeV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbXUvdjEvaW11X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXJfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbnB1dGNvbnRyb2xsZXIvdjEvaW5wdXRfY29udHJvbGxlcl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3JfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9tb3Rvci92MS9tb3Rvcl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvc2Vydm8vdjEvc2Vydm9fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2b19wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9yb2JvdC92MS9yb2JvdF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb25fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL25hdmlnYXRpb24vdjEvbmF2aWdhdGlvbl9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbl9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3NlbnNvcnMvdjEvc2Vuc29yc19wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9zZW5zb3JzL3YxL3NlbnNvcnNfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9zdGF0dXMvdjEvc3RhdHVzX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3N0YXR1cy92MS9zdGF0dXNfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9zdHJlYW0vdjEvc3RyZWFtX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL3N0cmVhbS92MS9zdHJlYW1fcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3Jkay13ZWIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3Jkay13ZWIvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9yZGstd2ViL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcmRrLXdlYi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvY29udHJvbC5qcyJdLCJuYW1lcyI6W10s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QTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDBFQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtB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QUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWIsOENBQTZDLENBQUMsY0FBYyxFQUFDOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUI7O0FBRXZCOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWUsU0FBUztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzWkFBc1o7O0FBRXRaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQyxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZixHQUFHOzs7QUFHSCx1R0FBdUc7O0FBRXZHLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEMsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFdBQVc7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsT0FBTztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUEseUNBQXlDOzs7QUFHekM7O0FBRUE7O0FBRUEsd0NBQXdDOzs7QUFHeEM7O0FBRUE7O0FBRUEsK0JBQStCO0FBQy9CO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1Qzs7O0FBR3ZDOztBQUVBOztBQUVBLHlDQUF5Qzs7O0FBR3pDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0MsK0JBQStCOzs7QUFHL0Isc0hBQXNIOztBQUV0SDtBQUNBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUEscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5RkFBeUY7OztBQUd6RjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDLHVCQUF1Qjs7QUFFdkIsdUJBQXVCOztBQUV2QixvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBLDRFQUE0RTs7QUFFNUU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUEsK0VBQStFOztBQUUvRTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLEdBQUc7OztBQUdILDJDQUEyQzs7O0FBRzNDO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxzREFBc0Q7OztBQUd0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsaUNBQWlDOztBQUU1RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQ0FBa0MsT0FBTztBQUN6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyxPQUFPO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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Q0FBbUMsUUFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsc0JBQXNCOztBQUV0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLFdBQVcsd0VBQXdFO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdGQUF3Rjs7O0FBR3hGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixtQ0FBbUM7QUFDekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asc0JBQXNCLG1DQUFtQztBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLG1DQUFtQztBQUN4RDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esc0JBQXNCLG1DQUFtQztBQUN6RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxzQkFBc0IsbUNBQW1DO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsbUNBQW1DO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLGVBQWU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxzQkFBc0I7O0FBRXRCO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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QTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCwwREFBMEQsK0RBQStEO0FBQzVLO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBLCtCQUErQjs7QUFFL0I7O0FBRUEsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKOztBQUVBLGtCQUFrQiw2QkFBNkI7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0osa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtB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QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGNBQWM7O0FBRWQsdUNBQXVDLFFBQVE7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RCxRQUFRO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTzs7QUFFdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixPQUFPOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4Qzs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDZCQUE2Qix3Q0FBd0MsR0FBRztBQUN4RSxnREFBZ0QsMEJBQTBCLHVCQUF1QixtQ0FBbUMsK0NBQStDLHFCQUFxQiw2QkFBNkIsb0VBQW9FLGlEQUFpRCx3QkFBd0IsYUFBYSxTQUFTLDhDQUE4Qyx5S0FBeUssK0JBQStCLDBGQUEwRixrSkFBa0osc0JBQXNCLHNDQUFzQyxpQkFBaUIsMEJBQTBCLDBDQUEwQyx1REFBdUQsNERBQTRELEdBQUc7O0FBRWpuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxpQ0FBaUM7O0FBRWpDOztBQUVBOztBQUVBOztBQUVBLCtCQUErQjs7O0FBRy9CLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEscUdBQXFHOzs7QUFHckc7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixXQUFXO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEdBQTRHOztBQUU1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsUUFBUTtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxFQUFFLGNBQWM7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDLFFBQVE7QUFDL0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtHQUFrRzs7QUFF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QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDLFFBQVE7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxRQUFRO0FBQy9DOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLDZD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUIseUJBQXlCOztBQUV6QjtBQUNBLG1DQUFtQzs7QUFFbkMsc0NBQXNDOztBQUV0QyxzQ0FBc0M7O0FBRXRDO0FBQ0EsZ0NBQWdDOztBQUVoQzs7QUFFQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMEJBQTBCOztBQUUxQixnQ0FBZ0M7OztBQUdoQztBQUNBLG1DQUFtQzs7QUFFbkMsc0NBQXNDOztBQUV0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQSxpQkFBaUIseUJBQXlCO0FBQzFDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosa0ZBQWtGLFNBQVMsR0FBRzs7QUFFOUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7O0FBRWpCO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOENBQThDOztBQUU5Qzs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDLDJEQUEyRDs7QUFFM0Q7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RCxzREFBc0Q7O0FBRXRELDhDQUE4Qzs7QUFFOUM7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBLEdBQUc7OztBQUdILHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7QUFDaEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1REFBdUQ7O0FBRXZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxRkFBcUY7QUFDckY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTs7QUFFQSwyQkFBMkI7O0FBRTNCLHlCQUF5QjtBQUN6QixJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDREQUE0RDs7O0FBRzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7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T0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDJCQUEyQjtBQUNyRDtBQUNBOztBQUVBLDRFQUE0RTs7O0FBRzVFOztBQUVBLGlEQUFpRDs7O0FBR2pELGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsT0FBTztBQUN2RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBOztBQUVBOztBQUVBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxPQUFPO0FBQ3ZEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnRUFBZ0U7O0FBRWhFOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxRQUFRO0FBQ3pDOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxnQ0FBZ0MsT0FBTztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUIsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRCxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGVBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFOztBQUV4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsY0FBYztBQUNkLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLG1CQUFtQjtBQUMxRDtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFD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SUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0JBQWtCLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTTtBQUMzRSxrQkFBa0IsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEVBQUU7O0FBRTdFO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQSwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTOztBQUUxQjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSw0QkFBNEI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEMsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEMsaURBQWlEO0FBQ2pEOztBQUVBLHVEQUF1RDs7QUFFdkQ7QUFDQSx1REFBdUQ7O0FBRXZELDJEQUEyRDs7QUFFM0Q7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdILDRFQUE0RTtBQUM1RTs7QUFFQTtBQUNBLDBGQUEwRjs7QUFFMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBLG9DQUFvQyxRQUFRO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsK0NBQStDOztBQUUvQyw0Q0FBNEM7O0FBRTVDLHlDQUF5Qzs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxzRUFBc0UsVUFBVTtBQUNoRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjs7QUFFbkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxPQUFPO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsMkJBQTJCO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxRQUFRO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLFFBQVE7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFD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R0g7O0FBRUEsK0NBQStDO0FBQy9DOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QyxTQUFTO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkM7O0FBRTdDLHVDQUF1QyxTQUFTO0FBQ2hEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3Qyx1Q0FBdUMsU0FBUztBQUNoRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjs7QUFFdEI7QUFDQSxtQ0FBbUM7O0FBRW5DLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0NBQXNDLFNBQVM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBLG9EQUFvRDs7QUFFcEQ7QUFDQSxHQUFHOzs7QUFHSCx1Q0FBdUM7O0FBRXZDOztBQUVBLCtDQUErQzs7O0FBRy9DOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsUUFBUTtBQUNwQztBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QyxpQkFBaUIsZ0JBQWdCO0FBQ2pDOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLGdCQUFnQjs7QUFFaEIsaUJBQWlCLDBCQUEwQjtBQUMzQyw2QkFBNkI7QUFDN0I7O0FBRUEsb0NBQW9DO0FBQ3BDLEVBQUU7OztBQUdGO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDLFNBQVM7QUFDdkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsSUFBSTtBQUNKLFVBQVU7QUFDVjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHNIQUFzSDs7QUFFdEg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCOztBQUV2QixxQkFBcUI7O0FBRXJCLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0JBQXdCLGtCQUFrQjtBQUMxQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGdGQUFnRjtBQUN6STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCLGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsY0FBYztBQUMvQjtBQUNBOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUEsNEVBQTRFOzs7QUFHNUU7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0Esb0VBQW9FLDZDQUE2Qzs7QUFFakg7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUNBQW1DLGFBQWE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5QyxrQkFBa0I7QUFDbEIsTUFBTTtBQUNOO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQSx5SEFBeUg7QUFDekg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7QUFDUDtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsYUFBYTtBQUMzRDtBQUNBOztBQUVBLDhDQUE4QyxhQUFhO0FBQzNEOztBQUVBLHNCQUFzQixtQkFBbUI7QUFDekM7QUFDQTs7QUFFQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMzRuQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0JBQWdCLFNBQVM7O0FBRXpCOztBQUVBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdCQUFnQixlQUFlO0FBQy9CLGdCQUFnQixlQUFlO0FBQy9CLGdCQUFnQixlQUFlOztBQUUvQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDLG9CQUFvQixtQkFBbUI7QUFDdkMsb0JBQW9CLG1CQUFtQjs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsY0FBYzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLGlCQUFpQjs7QUFFaEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZTtBQUMvQixnQkFBZ0IsZUFBZTs7QUFFL0I7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMEJBQTBCLHlCQUF5QjtBQUNuRCwwQkFBMEIseUJBQXlCOztBQUVuRDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0NBQWdDLFFBQVE7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmLGVBQWU7O0FBRWY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLHdEQUF3RDtBQUN4RCx3Q0FBd0M7QUFDeEMsd0NBQXdDOztBQUV4Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxjQUFjOztBQUU3Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCOztBQUVwQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLG1CQUFtQixpQkFBaUI7O0FBRXBDOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDLGdDQUFnQzs7QUFFaEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0NBQWdDOztBQUVoQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsT0FBTzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDhDQUE4Qzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLGtCQUFrQjs7QUFFekM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7O0FBRWhCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsa0JBQWtCOztBQUV6Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsV0FBVzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFROztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDLFFBQVE7O0FBRXREOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5Qzs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLEdBQUc7O0FBRUgsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esd0NBQXdDLE9BQU87O0FBRS9DO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjs7QUFFaEY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOzs7QUFHQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZSxlQUFlO0FBQzlDLGdCQUFnQixlQUFlLGVBQWU7QUFDOUMsZ0JBQWdCLGVBQWUsZ0JBQWdCO0FBQy9DLGdCQUFnQixlQUFlLGdCQUFnQjs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsbUJBQW1CLG1CQUFtQjtBQUMxRCxvQkFBb0IsbUJBQW1CLG1CQUFtQjtBQUMxRCxvQkFBb0IsbUJBQW1CLHFCQUFxQjtBQUM1RCxzQkFBc0IscUJBQXFCLHFCQUFxQjs7QUFFaEU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGlCQUFpQixnQkFBZ0I7QUFDakMsaUJBQWlCLGdCQUFnQjs7QUFFakM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxjQUFjLGNBQWM7QUFDM0MsZUFBZSxjQUFjLGNBQWM7QUFDM0MsZUFBZSxjQUFjLGVBQWU7QUFDNUMsZUFBZSxjQUFjLGVBQWU7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLG1CQUFtQjtBQUNuQyxnQkFBZ0IsbUJBQW1CO0FBQ25DLGdCQUFnQixtQkFBbUI7O0FBRW5DLGdCQUFnQixvQkFBb0I7QUFDcEMsZ0JBQWdCLG9CQUFvQjtBQUNwQyxpQkFBaUIscUJBQXFCOztBQUV0Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsY0FBYztBQUM3QixlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsY0FBYzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsYUFBYSxhQUFhO0FBQ3hDLGNBQWMsYUFBYSxhQUFhO0FBQ3hDLGNBQWMsYUFBYSxjQUFjO0FBQ3pDLGNBQWMsYUFBYSxnQkFBZ0I7O0FBRTNDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsYUFBYSxhQUFhO0FBQzVDLGNBQWMsaUJBQWlCLGFBQWE7QUFDNUMsY0FBYyxhQUFhLG9CQUFvQjtBQUMvQyxjQUFjLGFBQWEsY0FBYzs7QUFFekM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTs7QUFFMUI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLFFBQVE7O0FBRTFCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckIsdUJBQXVCOztBQUV2Qjs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0Msd0JBQXdCOztBQUU5RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFF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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsNEJBQTRCOztBQUUvQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLHNEQUFzRDs7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUJBQXVCOztBQUU3RDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSw4Q0FBOEM7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsU0FBUzs7QUFFNUI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsa0JBQWtCOztBQUV6Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjs7QUFFdEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPOztBQUU3Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTzs7QUFFN0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTzs7QUFFN0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQ0FBbUMsT0FBTzs7QUFFMUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVILG1DQUFtQyxPQUFPOztBQUUxQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDLE9BQU87O0FBRXpDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsT0FBTzs7QUFFekM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxrQkFBa0I7O0FBRXhEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9COztBQUVwQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx5REFBeUQsUUFBUTs7QUFFakU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx5REFBeUQsUUFBUTs7QUFFakU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlEQUF5RCxRQUFROztBQUVqRTtBQUNBOztBQUVBLGdEQUFnRCxRQUFROztBQUV4RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQSxzQ0FBc0MsUUFBUTs7QUFFOUM7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkMsUUFBUTs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0NBQXNDLFFBQVE7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDLFFBQVE7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxnREFBZ0QsUUFBUTs7QUFFeEQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLGtEQUFrRCxRQUFROztBQUUxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxZQUFZOztBQUVwRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsUUFBUTs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5Qzs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBLG9CQUFvQixjQUFjOztBQUVsQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxELCtDQUErQyxRQUFROztBQUV2RDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxlQUFlLGVBQWU7O0FBRTlCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsK0NBQStDLFFBQVE7O0FBRXZEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxELDhDQUE4QyxPQUFPOztBQUVyRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDRFQUE0RTs7QUFFNUU7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLGtCQUFrQjs7QUFFekM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsaURBQWlEOztBQUVqRDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsUUFBUTs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx5Q0FBeUMsUUFBUTs7QUFFakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9DQUFvQyxRQUFROztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDtBQUNBOztBQUVBLG1DQUFtQyxRQUFROztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0RBQW9EO0FBQ3BEOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEseUNBQXlDLFFBQVE7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsUUFBUTs7QUFFNUM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQSxtQ0FBbUMsUUFBUTs7QUFFM0M7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG9EQUFvRDtBQUNwRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLFFBQVE7O0FBRXJEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxnR0FBZ0c7QUFDaEcsZ0dBQWdHO0FBQ2hHLDJGQUEyRjtBQUMzRiwrRkFBK0Y7QUFDL0YsOEZBQThGO0FBQzlGLGtHQUFrRzs7QUFFbEc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG9CQUFvQixhQUFhOztBQUVqQzs7QUFFQSxxQkFBcUIsYUFBYTs7QUFFbEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsWUFBWTs7QUFFaEMscUJBQXFCLFlBQVk7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxpQkFBaUIscUJBQXFCOztBQUV0Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUI7O0FBRXZCLG1DQUFtQyw2RUFBNkUsR0FBRzs7QUFFbkgscUNBQXFDLDhDQUE4QyxHQUFHOztBQUV0RjtBQUNBO0FBQ0EsY0FBYyxvQkFBb0I7QUFDbEMsZUFBZSxnQkFBZ0IsYUFBYSxpQkFBaUIsWUFBWSxFQUFFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixzQkFBc0I7QUFDdEIsd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsd0VBQXdFO0FBQ25GOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdFQUFnRTs7QUFFaEU7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QixJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkI7O0FBRTNCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGFBQWE7O0FBRWhDOztBQUVBLG9CQUFvQixhQUFhOztBQUVqQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixZQUFZOztBQUUvQixvQkFBb0IsWUFBWTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwrRkFBK0Y7O0FBRS9GLGdGQUFnRjs7QUFFaEYsNEZBQTRGOztBQUU1RiwrRUFBK0U7O0FBRS9FLCtIQUErSCx1REFBdUQsNkhBQTZILGlIQUFpSDs7QUFFcGEsdUVBQXVFLGlDQUFpQzs7QUFFeEcsd0RBQXdEOztBQUV4RCw2REFBNkQsaUVBQWlFOztBQUU5SCw4REFBOEQsd0NBQXdDLEdBQUcsZ0ZBQWdGLG9FQUFvRSxzREFBc0QsR0FBRyxtR0FBbUcsNkJBQTZCLGlFQUFpRSxpRUFBaUUseUNBQXlDLEdBQUcsNkRBQTZELDZCQUE2QixxREFBcUQsOENBQThDLEdBQUcsd0pBQXdKLG9DQUFvQyxtREFBbUQsc0RBQXNELHFEQUFxRCxxREFBcUQsc0RBQXNELHlDQUF5QywyREFBMkQsb0NBQW9DLHlCQUF5QixHQUFHLDZFQUE2RSxnQ0FBZ0MsMERBQTBELDBDQUEwQywwQ0FBMEMscURBQXFELG1DQUFtQyxjQUFjLEdBQUcsd0RBQXdELDBCQUEwQixxREFBcUQsR0FBRyx1RUFBdUUsNEJBQTRCLHVCQUF1Qiw0REFBNEQsZ0RBQWdELG9CQUFvQiwrRkFBK0YsNENBQTRDLEdBQUcsNkhBQTZILGdEQUFnRCxnREFBZ0QsdUNBQXVDLDJFQUEyRSxnQkFBZ0IsMENBQTBDLDBCQUEwQix5REFBeUQscUJBQXFCLGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCwyQ0FBMkMsMkNBQTJDLDJDQUEyQywyQ0FBMkMsd0NBQXdDLDZFQUE2RSw2RUFBNkUsNkVBQTZFLDZFQUE2RSxtRUFBbUUsMEJBQTBCLEdBQUcsa0NBQWtDLGdCQUFnQixHQUFHLHdFQUF3RSwrRUFBK0UsR0FBRyxzSkFBc0osbURBQW1ELHFEQUFxRCxzREFBc0Qsb0RBQW9ELHVDQUF1QywrQ0FBK0MseUJBQXlCLEdBQUcsNkVBQTZFLG9DQUFvQyxpQ0FBaUMsZ0NBQWdDLGdEQUFnRCw0RUFBNEUsR0FBRywrQ0FBK0MseUVBQXlFLEdBQUcsMElBQTBJLG1EQUFtRCxzREFBc0QscURBQXFELHFEQUFxRCxpREFBaUQsd0NBQXdDLGtDQUFrQyxHQUFHOztBQUU1a0ssNkVBQTZFLDRCQUE0QixzQkFBc0IsK0JBQStCLCtCQUErQiwwREFBMEQsd0VBQXdFLHdFQUF3RSw4QkFBOEIsS0FBSyw2RkFBNkYsd0ZBQXdGLHdGQUF3RiwwQkFBMEIscUNBQXFDLHFDQUFxQyxzREFBc0Qsa0VBQWtFLDBEQUEwRCxLQUFLOztBQUVsOUIsMEVBQTBFLGlEQUFpRCwyQkFBMkIsU0FBUyxrQ0FBa0MsK0RBQStELEtBQUssd0dBQXdHLHlFQUF5RSx5QkFBeUIsU0FBUyxvQ0FBb0MsMkVBQTJFLE9BQU8sMERBQTBEOztBQUV4b0IsK0ZBQStGLHVEQUF1RDs7QUFFdEosNkZBQTZGOztBQUU3Riw4RkFBOEY7O0FBRTlGLCtFQUErRSwyREFBMkQ7O0FBRTFJLGlGQUFpRixvREFBb0Q7O0FBRXJJLCtFQUErRSx1RkFBdUY7O0FBRXRLLDJFQUEyRSx3RkFBd0YsOENBQThDLHlFQUF5RTs7QUFFMVIsdVhBQXVYLFlBQVksRUFBRSxrQ0FBa0MsY0FBYyxFQUFFLGtDQUFrQyxnQkFBZ0IsY0FBYyxFQUFFLGlDQUFpQyxvQ0FBb0MsRUFBRSx3Q0FBd0MscUNBQXFDLEVBQUUsd0NBQXdDLDhEQUE4RCxtRUFBbUUsa0NBQWtDLEdBQUcsZ0VBQWdFLG9CQUFvQixFQUFFLGdEQUFnRCw0Q0FBNEMsdURBQXVELEtBQUssZ0NBQWdDLGVBQWUsbUJBQW1CLGlCQUFpQixJQUFJLHlCQUF5Qix1QkFBdUIsd0JBQXdCLHlCQUF5QiwwQkFBMEIsSUFBSSwyQkFBMkIsa0JBQWtCLGdCQUFnQixpQkFBaUIsK0NBQStDLFlBQVksMERBQTBELDBEQUEwRCxHQUFHLGlFQUFpRSwwREFBMEQsR0FBRyx5Q0FBeUMsYUFBYSxvREFBb0Qsb0RBQW9ELG9EQUFvRCxlQUFlLEdBQUcsMERBQTBELGtEQUFrRCxxQ0FBcUMsR0FBRyxzQ0FBc0MsZ0NBQWdDLEdBQUcsa0NBQWtDLDBEQUEwRCx1RUFBdUUsd0JBQXdCLEdBQUc7O0FBRTl4RSw2T0FBNk8sMkNBQTJDLHlCQUF5Qiw4Q0FBOEMsNkZBQTZGLDJEQUEyRCxPQUFPLE9BQU8sNkZBQTZGLDJEQUEyRCxPQUFPLGtCQUFrQixLQUFLLDhDQUE4QyxjQUFjLDBCQUEwQixtRUFBbUUsT0FBTywwQkFBMEIsdUVBQXVFLE9BQU8sMEJBQTBCLHFFQUFxRSxPQUFPLDBCQUEwQixxRUFBcUUsT0FBTywwQkFBMEIscUVBQXFFLE9BQU8sT0FBTyxtRUFBbUUsT0FBTyxnQ0FBZ0MsS0FBSywyRUFBMkUsd0NBQXdDLGdFQUFnRSxpREFBaUQsc0NBQXNDLDJEQUEyRCxvRUFBb0UseUJBQXlCLHlCQUF5QixvQkFBb0IsT0FBTyw4QkFBOEIsMENBQTBDLHlDQUF5QyxPQUFPLG1EQUFtRCxvRUFBb0Usc0JBQXNCLHlDQUF5QyxLQUFLLDZVQUE2VSxzQkFBc0IsOEJBQThCLGtFQUFrRSxPQUFPLDhCQUE4QixrRUFBa0UsT0FBTyw4QkFBOEIsa0VBQWtFLE9BQU8sOEJBQThCLGtFQUFrRSxPQUFPLE9BQU8sK0NBQStDLEtBQUssaUJBQWlCLEtBQUssNkVBQTZFLCtFQUErRSxnQ0FBZ0Msa0NBQWtDLGdFQUFnRSwwQkFBMEIsbUNBQW1DLE9BQU8sT0FBTyx3RUFBd0Usd0RBQXdELE9BQU8sS0FBSzs7QUFFejdHLGtFQUFrRSwyREFBMkQscUdBQXFHLDhDQUE4QywrREFBK0QsK0RBQStELCtHQUErRyxxRUFBcUU7O0FBRWxrQixtR0FBbUcsb0NBQW9DLG1DQUFtQzs7QUFFMUssc0xBQXNMOztBQUV0TCx5R0FBeUcsK0NBQStDOztBQUV4Six5RkFBeUY7O0FBRXpGLDZFQUE2RTs7QUFFN0UscUVBQXFFLGlCQUFpQixHQUFHLHNDQUFzQyx1S0FBdUssR0FBRzs7QUFFelMsdUZBQXVGLDZCQUE2QixtSEFBbUgsT0FBTyxPQUFPLG9FQUFvRSxPQUFPLHlFQUF5RSxrR0FBa0csMkZBQTJGLHNEQUFzRCxtSUFBbUksdUdBQXVHLDJDQUEyQyx1SkFBdUosa0lBQWtJLDhHQUE4Rzs7QUFFeHhDLHNGQUFzRiw2QkFBNkIsNERBQTRELHdDQUF3Qzs7QUFFdk4sNEVBQTRFLDJLQUEySyxvQ0FBb0MscUNBQXFDOztBQUVoVSwyTkFBMk4scUNBQXFDLG9DQUFvQzs7QUFFcFMsc0dBQXNHLG1DQUFtQyw2QkFBNkIscUhBQXFILE9BQU8sT0FBTyx5RUFBeUUsT0FBTyxvRkFBb0YsNkZBQTZGLHNGQUFzRjs7QUFFaG9CLCtEQUErRDs7QUFFL0QsaUVBQWlFOztBQUVqRSw0SUFBNEksMEVBQTBFLDhFQUE4RTs7QUFFcFMsaUVBQWlFLDRCQUE0QixrREFBa0QscUNBQXFDLDJCQUEyQjs7QUFFL00seUZBQXlGLDBFQUEwRSxnREFBZ0QsZ0RBQWdELGlGQUFpRixvRUFBb0UsYUFBYTs7QUFFcmEsaUdBQWlHLG9FQUFvRSxvRUFBb0UsbUVBQW1FOztBQUU1UyxnRkFBZ0Ysb0NBQW9DOztBQUVwSCx3REFBd0QsNEJBQTRCLHFDQUFxQyxtREFBbUQseUZBQXlGLGdDQUFnQyw0Q0FBNEMseUNBQXlDLDBDQUEwQyw0QkFBNEIsK0JBQStCLGtEQUFrRCxnQ0FBZ0Msb0NBQW9DLGNBQWMsZ0NBQWdDLG1FQUFtRSwyRUFBMkUseUZBQXlGLGdGQUFnRixtRkFBbUYsc0JBQXNCLFNBQVMsbUVBQW1FLDREQUE0RCxtREFBbUQsa0VBQWtFLDhGQUE4RixpQkFBaUIsNkdBQTZHLHFCQUFxQixTQUFTLGlFQUFpRSw0REFBNEQsbURBQW1ELGtFQUFrRSw4RkFBOEYsaUJBQWlCLDRHQUE0RyxvQkFBb0IsU0FBUywrRUFBK0UsNERBQTRELG1EQUFtRCxrRUFBa0UsOEZBQThGLGlCQUFpQiw2R0FBNkcscUJBQXFCLFNBQVMsK0ZBQStGLDZIQUE2SCxpQkFBaUI7O0FBRTN1RixvREFBb0QsaUNBQWlDLCtCQUErQix5RUFBeUUsbURBQW1ELGlEQUFpRCx1REFBdUQsdURBQXVELHVEQUF1RCwyREFBMkQsMkRBQTJELG9FQUFvRSwyREFBMkQsaUVBQWlFLGtCQUFrQixHQUFHLHVGQUF1Rix1RUFBdUUsbUVBQW1FLHNCQUFzQixHQUFHLHFFQUFxRSx3Q0FBd0Msc0JBQXNCLEdBQUcsNkhBQTZILGtJQUFrSSxtQ0FBbUMsNEZBQTRGLE9BQU8sNkJBQTZCLG1FQUFtRSx3RkFBd0YsT0FBTyxpQkFBaUIsYUFBYSxvSEFBb0gsaUVBQWlFLEdBQUcscURBQXFELHFCQUFxQixpQkFBaUIsTUFBTSxpRUFBaUUsNklBQTZJLDJDQUEyQyxtREFBbUQsMkJBQTJCLEtBQUsseURBQXlELG9CQUFvQixpQkFBaUIscUJBQXFCLGtCQUFrQixNQUFNLHVEQUF1RCwySEFBMkgsNkRBQTZELDZDQUE2Qyw4Q0FBOEMscUNBQXFDLG9HQUFvRyxxREFBcUQsS0FBSyx1REFBdUQsb0JBQW9CLHFCQUFxQixpQkFBaUIscUJBQXFCLGtCQUFrQixvQkFBb0Isd0JBQXdCLE1BQU0sb0RBQW9ELHdIQUF3SCw0REFBNEQsNkNBQTZDLG1FQUFtRSx1R0FBdUcsb0NBQW9DLGdEQUFnRCx3REFBd0Qsb0dBQW9HLHVEQUF1RCxPQUFPLE9BQU8sa0NBQWtDLDhCQUE4QixPQUFPLEtBQUssZ0VBQWdFLGlCQUFpQixvQkFBb0IscUJBQXFCLHNCQUFzQixNQUFNLDRCQUE0QiwwQkFBMEIsaUVBQWlFLDZEQUE2RCxxQkFBcUIsb0JBQW9CLHVCQUF1QixNQUFNLGdFQUFnRSxtR0FBbUcsdURBQXVELGtEQUFrRCw0RkFBNEYsd0JBQXdCLEtBQUs7O0FBRS93SixtSUFBbUksNkRBQTZELG1IQUFtSCxxRUFBcUUsc0RBQXNELHNDQUFzQyxpQkFBaUIsa0dBQWtHLGdFQUFnRSx5RkFBeUYsb0ZBQW9GLGtGQUFrRix1RkFBdUYsMEVBQTBFLGlEQUFpRCxzQ0FBc0MsaUJBQWlCOztBQUUvb0Msa0RBQWtELDJDQUEyQzs7QUFFN0YsNERBQTRELHVCQUF1QixzQkFBc0IsSUFBSSxzS0FBc0ssMEdBQTBHLHVGQUF1RixHQUFHLHFLQUFxSyx5RkFBeUYsR0FBRzs7QUFFeHRCLHlEQUF5RCwyQ0FBMkMsb0NBQW9DLHlDQUF5QywrQ0FBK0M7O0FBRWhPLDZEQUE2RCw2QkFBNkIsc0JBQXNCLHVCQUF1Qiw0QkFBNEIsMkJBQTJCLElBQUksa0xBQWtMLDRFQUE0RSxnREFBZ0QsdUZBQXVGLDhNQUE4TSxHQUFHLGlMQUFpTCx5RkFBeUYsR0FBRzs7QUFFcmlDLDBEQUEwRCx1RUFBdUUsaUZBQWlGLDhEQUE4RCxzREFBc0Qsd0NBQXdDLHNEQUFzRCx1RkFBdUYsK0NBQStDLGlIQUFpSCxtSEFBbUgsOEZBQThGLG1EQUFtRCw2Q0FBNkMsaUNBQWlDLDJMQUEyTCwyRkFBMkYsK0JBQStCLGlFQUFpRSxxREFBcUQsd0NBQXdDLGdDQUFnQyx3RkFBd0YsOEhBQThILGtFQUFrRSwyRUFBMkUscURBQXFELDBFQUEwRSwrREFBK0QsNkZBQTZGLDJFQUEyRSx1R0FBdUc7O0FBRWh4RSw4REFBOEQsc0JBQXNCLG9CQUFvQix1QkFBdUIsc0JBQXNCLDhDQUE4QywrQkFBK0IsdUJBQXVCLHlCQUF5QixvREFBb0QsMkJBQTJCLGNBQWMsdUNBQXVDLG1DQUFtQyw4RkFBOEYscURBQXFELHFDQUFxQywrR0FBK0csMkdBQTJHLDhGQUE4RiwwQ0FBMEMsR0FBRywyRkFBMkYscURBQXFELDBEQUEwRCxvREFBb0QsaUNBQWlDLHNFQUFzRSxrREFBa0QsZUFBZSxHQUFHLDBKQUEwSix1REFBdUQsdURBQXVELEdBQUcsb05BQW9OLHVEQUF1RCw4REFBOEQsOEJBQThCLDBCQUEwQixtRUFBbUUsa0RBQWtELDRCQUE0Qiw4QkFBOEIsR0FBRyx5TkFBeU4sb0NBQW9DLHNDQUFzQyx3Q0FBd0MsNkNBQTZDLCtDQUErQyxpREFBaUQsNENBQTRDLDJDQUEyQywyQkFBMkIsMERBQTBELHdEQUF3RCwwREFBMEQsMERBQTBELHFEQUFxRCx1Q0FBdUMsdUNBQXVDLHdIQUF3SCx5R0FBeUcsMEhBQTBILDhJQUE4SSxLQUFLLHNMQUFzTCw0RUFBNEUsZ0RBQWdELGlIQUFpSCxzREFBc0Qsa01BQWtNLHVMQUF1TCxtTUFBbU0sdUZBQXVGLEdBQUcsNktBQTZLLHlGQUF5RixHQUFHLHNPQUFzTywrTUFBK00sbUtBQW1LLGtEQUFrRCx1Q0FBdUMsK0RBQStELHFLQUFxSyw0RkFBNEYsbUVBQW1FLGtGQUFrRix5RUFBeUUsR0FBRyxxVkFBcVYsa0hBQWtILEdBQUc7O0FBRWxuTix5REFBeUQsc0NBQXNDLDJCQUEyQix1RkFBdUYscUVBQXFFLG9DQUFvQyxnRkFBZ0YscUdBQXFHLDJEQUEyRCxzQkFBc0IsU0FBUyxvQ0FBb0MsNkRBQTZELHVJQUF1SSxxVEFBcVQsK0VBQStFLEtBQUssZ0hBQWdILGtHQUFrRywyREFBMkQscUJBQXFCLFNBQVMsa0NBQWtDLDJEQUEyRCxvSUFBb0ksc09BQXNPLCtFQUErRSxLQUFLLDZIQUE2SCwrR0FBK0csMkRBQTJELG9CQUFvQixTQUFTLGdEQUFnRCx5RUFBeUUsaUpBQWlKLHlRQUF5USwrRUFBK0UsS0FBSyxzSUFBc0ksaURBQWlELDBCQUEwQixTQUFTLDBDQUEwQyw4RUFBOEUsS0FBSywyR0FBMkcscUVBQXFFLHlFQUF5RSxvRkFBb0YscUJBQXFCLFNBQVMsNkZBQTZGLE9BQU8sbUhBQW1ILHlDQUF5Qzs7QUFFNzJILDJJQUEySSxzRUFBc0Usd0VBQXdFLG1EQUFtRCwySkFBMkosdUtBQXVLLDZJQUE2STs7QUFFM3hCLHFJQUFxSSxzSkFBc0o7O0FBRTNSLG9NQUFvTTs7QUFFcE0saUlBQWlJLDZCQUE2QixpQ0FBaUM7O0FBRS9MLGtIQUFrSCxtQ0FBbUMsMkNBQTJDOztBQUVoTSxxSEFBcUgsd0VBQXdFLCtEQUErRCwwRkFBMEYsdUNBQXVDLE9BQU87O0FBRXBZLHVGQUF1Riw4UkFBOFIsa0RBQWtEOztBQUV2YSxpRUFBaUU7O0FBRWpFLG1LQUFtSyxpRUFBaUUsK0VBQStFOztBQUVuVCxnSEFBZ0gsa0RBQWtELDREQUE0RDs7QUFFOU4sK0RBQStELGtGQUFrRix3Q0FBd0M7O0FBRXpMLDRGQUE0Rjs7QUFFNUYsOEZBQThGLHFEQUFxRCx3QkFBd0IsU0FBUywrSEFBK0gsT0FBTyx5RUFBeUUsZ0VBQWdFLGdFQUFnRSxnRUFBZ0U7O0FBRW5rQixpR0FBaUcsK0ZBQStGLGlEQUFpRCwyQ0FBMkMsMEhBQTBILGtFQUFrRSxrRUFBa0UsNkRBQTZELHdIQUF3SCwyREFBMkQsT0FBTyx3RkFBd0YsNERBQTREOztBQUVyNkIsNkZBQTZGLHFEQUFxRCx3QkFBd0IsU0FBUyxnS0FBZ0ssNklBQTZJLHFCQUFxQix3RUFBd0UsK0RBQStELCtEQUErRCwrREFBK0QsK0ZBQStGLGlFQUFpRSxpRUFBaUUsaUVBQWlFOztBQUU1aEMsZ0ZBQWdGLHFIQUFxSCxpR0FBaUcsaURBQWlELDhDQUE4Qyw2REFBNkQsMkVBQTJFLCtDQUErQyxtRUFBbUUsOENBQThDLG9KQUFvSiw2REFBNkQ7O0FBRTkzQixpSEFBaUgsNkNBQTZDLHVFQUF1RSwwREFBMEQscUdBQXFHLDJCQUEyQiw4REFBOEQsMEZBQTBGLDZIQUE2SDs7QUFFcHJCLHdFQUF3RSxrREFBa0QsOEJBQThCOztBQUV4SixzRUFBc0Usa0RBQWtELDhCQUE4Qjs7QUFFdEoscUZBQXFGLHVFQUF1RSx1RUFBdUU7O0FBRW5PLG1GQUFtRiw2QkFBNkIsb0VBQW9FLG9OQUFvTixnRkFBZ0YsZ0ZBQWdGLGdDQUFnQyxnQ0FBZ0MseUJBQXlCLG1DQUFtQyxtQ0FBbUMsK0NBQStDLCtDQUErQyxrREFBa0QsOEVBQThFLHVGQUF1RixLQUFLOztBQUVqZ0MscUdBQXFHOztBQUVyRyxrSkFBa0osNkNBQTZDLGdGQUFnRixxSEFBcUg7O0FBRXBZLHlGQUF5Rix1RkFBdUYsaUZBQWlGLHNDQUFzQzs7QUFFdlMsMkRBQTJELDZFQUE2RSwrREFBK0Q7O0FBRXZNLDZEQUE2RCwyQ0FBMkMsR0FBRywrQ0FBK0MsK0JBQStCLEdBQUcsd0NBQXdDLDBDQUEwQyx5RUFBeUUsdUVBQXVFLHNDQUFzQyw0Q0FBNEMsaURBQWlELGlDQUFpQyx5QkFBeUIsR0FBRyw4Q0FBOEMsbUNBQW1DLEdBQUcsa0NBQWtDLDBFQUEwRSxrRUFBa0UsR0FBRyxvQ0FBb0MsZ0VBQWdFLEdBQUcsbUdBQW1HLDZDQUE2QyxHQUFHLHlHQUF5RywrQ0FBK0MsR0FBRyxrR0FBa0csbUVBQW1FLEdBQUcscUdBQXFHLGdFQUFnRSxHQUFHOztBQUV4a0QscUdBQXFHOztBQUVyRyxpRUFBaUUsb0VBQW9FLG9EQUFvRCw4Q0FBOEM7O0FBRXZPLCtGQUErRjs7QUFFL0YsaUZBQWlGLG9EQUFvRCxnRkFBZ0YsK0ZBQStGLHNDQUFzQyxLQUFLOztBQUUvViwrREFBK0Qsa0ZBQWtGLHdDQUF3Qzs7QUFFekwsNEZBQTRGOztBQUU1RiwwSkFBMEosb0VBQW9FLHFDQUFxQyx5QkFBeUIsK0JBQStCLDJCQUEyQiwyQkFBMkIsUUFBUSxzRkFBc0YsNEdBQTRHLDhEQUE4RCw4QkFBOEIseUJBQXlCLCtCQUErQiwyQkFBMkIsMkJBQTJCLFFBQVEseUVBQXlFLCtHQUErRyxnRUFBZ0UsK0JBQStCLHlCQUF5QiwrQkFBK0IsMkJBQTJCLDJCQUEyQiwrQkFBK0IsOEJBQThCLFFBQVEsNEVBQTRFLGtGQUFrRiwyRUFBMkUsS0FBSyw2REFBNkQsMERBQTBELEtBQUssZ0VBQWdFLDRCQUE0Qiw4REFBOEQsMkRBQTJELGdDQUFnQyxtREFBbUQseUVBQXlFLGtGQUFrRixnR0FBZ0csOEVBQThFLE9BQU8sdUJBQXVCLEtBQUssd0hBQXdILHlCQUF5Qix1Q0FBdUMsa0NBQWtDLDRIQUE0SCwyQ0FBMkMsc0VBQXNFLCtDQUErQywwQkFBMEIsNEZBQTRGLGlEQUFpRCxpREFBaUQsaURBQWlELGlEQUFpRCw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsbWlEQUFtaUQsbUdBQW1HLCtCQUErQiwrQkFBK0IsaUNBQWlDLG1EQUFtRCw0QkFBNEIsMCtDQUEwK0MsZ0hBQWdILHlGQUF5RixtQkFBbUIsb0JBQW9CLEtBQUssK0NBQStDLDJCQUEyQixxRUFBcUUsMEJBQTBCLG9EQUFvRCx5QkFBeUIsNENBQTRDLDJDQUEyQyxrQ0FBa0MsdURBQXVELE9BQU8sa0NBQWtDLGtDQUFrQyw2Q0FBNkMsT0FBTyxrQ0FBa0Msa0NBQWtDLDJDQUEyQyxxQ0FBcUMsT0FBTyxnRUFBZ0UsS0FBSyw0S0FBNEssMEVBQTBFLDZDQUE2QywyR0FBMkcscUJBQXFCLCtDQUErQyxnTEFBZ0wsNHpCQUE0ekIsMkZBQTJGLGlCQUFpQjs7QUFFLzdSLHNKQUFzSixvRUFBb0UscUNBQXFDLHlCQUF5QiwrQkFBK0IsMkJBQTJCLDJCQUEyQixRQUFRLHNGQUFzRiwwR0FBMEcsOERBQThELDhCQUE4Qix5QkFBeUIsK0JBQStCLDJCQUEyQiwyQkFBMkIsUUFBUSx5RUFBeUUsNkdBQTZHLGdFQUFnRSwrQkFBK0IseUJBQXlCLCtCQUErQiwyQkFBMkIsMkJBQTJCLCtCQUErQiw4QkFBOEIsUUFBUSw0RUFBNEU7O0FBRTN4QyxvT0FBb08sK0JBQStCLDRGQUE0RiwyQkFBMkIsU0FBUyx5SEFBeUgsd0ZBQXdGLEtBQUssd0hBQXdILDRCQUE0QixTQUFTLGtIQUFrSCwwRUFBMEUsS0FBSyx5SEFBeUgsNkJBQTZCLFNBQVMsbUhBQW1ILDRFQUE0RSxLQUFLOztBQUUxeEMsdURBQXVELHVCQUF1QixxR0FBcUcsaURBQWlELDJCQUEyQixTQUFTLHNEQUFzRCx1TUFBdU0sS0FBSyxxR0FBcUcsaURBQWlELDRCQUE0QixTQUFTLHdDQUF3QyxvS0FBb0ssS0FBSyx3R0FBd0csaURBQWlELDZCQUE2QixTQUFTLDBDQUEwQyx1T0FBdU8sS0FBSyxpRUFBaUUsR0FBRzs7QUFFLzZDLDJGQUEyRixpREFBaUQsaURBQWlELGlEQUFpRDs7QUFFOU8sMkVBQTJFLG1DQUFtQyxpRUFBaUUsa0NBQWtDLDhDQUE4QywwQkFBMEIscURBQXFELHdEQUF3RCxrREFBa0Qsa0RBQWtELDZCQUE2Qix3RUFBd0Usd0VBQXdFLHdFQUF3RSx3RUFBd0UsMkNBQTJDLG9CQUFvQixPQUFPLHNEQUFzRCw4Q0FBOEMsMkNBQTJDLG9CQUFvQixPQUFPOztBQUV2aEMsc0dBQXNHLCtCQUErQixvREFBb0Qsb0RBQW9ELG9EQUFvRCxvREFBb0Qsc0RBQXNEOztBQUUzWSw4RUFBOEUsMENBQTBDLDBDQUEwQywwQ0FBMEMsMENBQTBDLDZEQUE2RCxzRUFBc0UsZ0dBQWdHOztBQUV6ZCxtREFBbUQsK0VBQStFLHVDQUF1QyxrQ0FBa0M7O0FBRTNNLHlGQUF5Rjs7QUFFekYsOEdBQThHOztBQUU5Ryx5SUFBeUksd0NBQXdDLHVDQUF1QyxHQUFHLDBDQUEwQyxpQ0FBaUMsdURBQXVELEdBQUcsaURBQWlELGlDQUFpQyw4Q0FBOEMsNEdBQTRHLEdBQUcsK0JBQStCLGlEQUFpRCx5REFBeUQsaUJBQWlCLEdBQUcsNENBQTRDLDhKQUE4Six3S0FBd0ssdUNBQXVDLGlDQUFpQyxrQ0FBa0Msa0NBQWtDLDZCQUE2QixHQUFHLHdDQUF3QyxjQUFjLEVBQUU7O0FBRWwwQyxzRkFBc0YsNENBQTRDLHNDQUFzQyw4RkFBOEYsK0ZBQStGLHdDQUF3QywrQ0FBK0MsNkRBQTZELHlRQUF5USw2RUFBNkUscUZBQXFGOztBQUVwNkIsd0ZBQXdGLDRCQUE0QixzQ0FBc0Msa0NBQWtDLHNFQUFzRSwwRUFBMEUsbURBQW1ELDZDQUE2Qyw2QkFBNkIsa0NBQWtDLGdDQUFnQyxnSkFBZ0osd0VBQXdFLHNCQUFzQiw0REFBNEQsNERBQTRELDREQUE0RCxvRUFBb0UsS0FBSywrRUFBK0UsNERBQTRELEtBQUsseUdBQXlHLHVHQUF1RyxtSEFBbUgsNEZBQTRGLGlCQUFpQixvS0FBb0sseUNBQXlDLHdCQUF3QixPQUFPLE9BQU8scUZBQXFGLG9GQUFvRixzQ0FBc0MsT0FBTyxLQUFLLDRaQUE0WiwyRkFBMkYseURBQXlELDRFQUE0RSxtREFBbUQsOEJBQThCLDhCQUE4Qix3RkFBd0YsOElBQThJLDhFQUE4RSxzRkFBc0YsS0FBSzs7QUFFOW5HLHNHQUFzRzs7QUFFdEcsNEVBQTRFLGdDQUFnQyx1Q0FBdUM7O0FBRW5KLDJFQUEyRTs7QUFFM0Usa0dBQWtHOztBQUVsRyxpR0FBaUcsc0JBQXNCLDhCQUE4Qjs7QUFFckoscUhBQXFIOztBQUVySCxzTEFBc0wsOEVBQThFLDBEQUEwRDs7QUFFOVQsbUNBQW1DLDJCQUEyQixlQUFlLDZDQUE2QyxnREFBZ0QsR0FBRzs7QUFFN0ssMENBQTBDLG1CQUFtQixlQUFlLHlDQUF5Qyx1RUFBdUU7O0FBRTVMLCtDQUErQyxrQ0FBa0Msa0VBQWtFLDBGQUEwRixHQUFHOztBQUVoUCxrRkFBa0YsK0JBQStCLHVEQUF1RCxvQ0FBb0MsMERBQTBELDhCQUE4Qix1RUFBdUU7O0FBRTNXLHVSQUF1UixlQUFlLDhjQUE4YyxHQUFHOztBQUV2dkIsdUVBQXVFLGlTQUFpUyxlQUFlLDJFQUEyRSw0REFBNEQsc05BQXNOLDRGQUE0RixrRkFBa0YsYUFBYTs7QUFFLzRCLGdFQUFnRSxrTkFBa04sNGNBQTRjLEdBQUc7O0FBRWp1QixxRUFBcUUsNkJBQTZCLDRCQUE0Qiw4QkFBOEIsbU9BQW1PLDJFQUEyRSwwSkFBMEosb0VBQW9FLDRCQUE0QiwyQ0FBMkMsR0FBRzs7QUFFbHZCLCtDQUErQyxrQ0FBa0Msa0VBQWtFLDJEQUEyRDs7QUFFOU0sZ0RBQWdELCtCQUErQixrQ0FBa0Msa0RBQWtELDRDQUE0QyxvREFBb0QsdUVBQXVFOztBQUUxVSxzQ0FBc0MsK0JBQStCLDhCQUE4Qiw0TUFBNE0seUNBQXlDLHNOQUFzTjs7QUFFOWlCLHlDQUF5Qyx3QkFBd0IseUJBQXlCLDBCQUEwQiw4QkFBOEIsZ0xBQWdMLDhGQUE4RixjQUFjLEtBQUsscUNBQXFDLGlEQUFpRCxxR0FBcUcsMktBQTJLOztBQUV6eEIsbVZBQW1WLGdsQkFBZ2xCOztBQUVuNkIseUNBQXlDLHdCQUF3Qiw4Q0FBOEMsc2xCQUFzbEIsd0ZBQXdGLHdTQUF3Uyw2RUFBNkUsOEVBQThFLDZEQUE2RCw4RkFBOEYsd0RBQXdELDBPQUEwTzs7QUFFN3BELDREQUE0RCw4QkFBOEIsaURBQWlELCtCQUErQiw2WkFBNloscWtCQUFxa0I7O0FBRTVvQyx5Q0FBeUMsd0JBQXdCLHdCQUF3QiwyQkFBMkIsOEJBQThCLGlEQUFpRCwrQkFBK0IseXdCQUF5d0Isd0ZBQXdGLHlHQUF5RywwQ0FBMEMscVZBQXFWLGdFQUFnRSxpSEFBaUgsMEdBQTBHLDBEQUEwRCxpR0FBaUcsNElBQTRJLDBPQUEwTzs7QUFFdjFFLDZEQUE2RCwrVUFBK1Usa2hCQUFraEIsR0FBRzs7QUFFajZCLHlEQUF5RCx3QkFBd0IsMkJBQTJCLDZCQUE2Qiw2YkFBNmIsd0ZBQXdGLGlSQUFpUiw4REFBOEQsaUNBQWlDLHVFQUF1RSxzRUFBc0UsNkVBQTZFLHNFQUFzRSw0TUFBNE07O0FBRTEvQywwSkFBMEosNlJBQTZSLHlqQkFBeWpCLFdBQVc7O0FBRTMvQiwwREFBMEQsMEhBQTBILCtQQUErUCwrTUFBK00sR0FBRzs7QUFFcm9CLDREQUE0RCw0YUFBNGEsa2hCQUFraEIscUhBQXFIOztBQUUvbUMsd0RBQXdELHdCQUF3Qix3QkFBd0IsMEJBQTBCLHdCQUF3QiwwMkJBQTAyQix3RkFBd0YseUdBQXlHLDBDQUEwQyxvb0JBQW9vQiwwT0FBME87O0FBRTdsRSwrREFBK0QseURBQXlELHFaQUFxWixraEJBQWtoQixzSkFBc0osV0FBVzs7QUFFaHNDLHVIQUF1SCx3QkFBd0IsMEJBQTBCLDBCQUEwQix3QkFBd0Isa0NBQWtDLDZEQUE2RCwrQkFBK0IsZ0ZBQWdGLGtGQUFrRixvRUFBb0UscUNBQXFDLHNEQUFzRCxpQ0FBaUMsa0VBQWtFLG9GQUFvRiwrQ0FBK0MseStCQUF5K0Isd0ZBQXdGLHlHQUF5RywwQ0FBMEMsNHFCQUE0cUIseUZBQXlGLGtIQUFrSCw0RkFBNEYsc0VBQXNFLHNIQUFzSCxtRkFBbUYsa0hBQWtILHNOQUFzTjs7QUFFOW5ILDJEQUEyRCw2WUFBNlksa2hCQUFraEIseUZBQXlGOztBQUVuakMsdURBQXVELHdCQUF3Qix3QkFBd0Isd3ZCQUF3dkIsd0ZBQXdGLHlHQUF5RywwQ0FBMEMsOGhCQUE4aEIsNE1BQTRNOztBQUVwekQscUNBQXFDLHNCQUFzQiw0TUFBNE0sNElBQTRJLGlHQUFpRyxzRUFBc0UsMElBQTBJOztBQUVwc0IseUNBQXlDLHdCQUF3QiwyUEFBMlAsNEVBQTRFLGlEQUFpRCwwS0FBMEssMktBQTJLOztBQUU5d0IscUxBQXFMLG1YQUFtWDs7QUFFeGlCLHVDQUF1Qyx3QkFBd0IsNk1BQTZNLHNFQUFzRSxrR0FBa0c7O0FBRXBiLHlDQUF5QyxzQkFBc0IscUtBQXFLLDJGQUEyRixlQUFlLDJGQUEyRiwyRkFBMkYsa0dBQWtHLG1EQUFtRCx3RkFBd0YseUJBQXlCLGtHQUFrRyxrR0FBa0cscUNBQXFDLGdEQUFnRCxrR0FBa0c7O0FBRXJvQyx5Q0FBeUMsd0JBQXdCLGtSQUFrUiw0RUFBNEUsaURBQWlELG9LQUFvSyxnSUFBZ0k7O0FBRXB2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLFlBQVksK0JBQStCO0FBQzNDLFlBQVksYUFBYTs7QUFFekIsUUFBUSxjQUFjO0FBQ3RCLGdCQUFnQix1QkFBdUI7QUFDdkMsaUJBQWlCLHVCQUF1Qjs7QUFFeEMsYUFBYSxjQUFjO0FBQzNCLGNBQWM7O0FBRWQsRUFBRTs7QUFFRjs7QUFFQSxnQkFBZ0IsY0FBYzs7QUFFOUIsRUFBRTs7QUFFRjs7QUFFQSxXQUFXLGNBQWM7QUFDekIsZUFBZSxhQUFhO0FBQzVCLGlCQUFpQixhQUFhO0FBQzlCLFFBQVEsYUFBYTtBQUNyQixvQkFBb0I7O0FBRXBCLEVBQUU7O0FBRUY7O0FBRUEsVUFBVSxjQUFjO0FBQ3hCLG1CQUFtQjs7QUFFbkIsRUFBRTs7QUFFRjs7QUFFQSxhQUFhLGNBQWM7QUFDM0Isc0JBQXNCOztBQUV0QixFQUFFOztBQUVGOztBQUVBLGdCQUFnQjs7QUFFaEIsRUFBRTs7QUFFRjs7QUFFQSxZQUFZLGNBQWM7QUFDMUIsY0FBYzs7QUFFZCxFQUFFOztBQUVGOztBQUVBLGNBQWMsY0FBYztBQUM1QixnQkFBZ0I7O0FBRWhCLEVBQUU7O0FBRUY7O0FBRUEsb0JBQW9CLGNBQWM7QUFDbEMsc0JBQXNCLFdBQVc7QUFDakMscUJBQXFCOztBQUVyQixFQUFFOztBQUVGOztBQUVBLGlCQUFpQjs7QUFFakIsRUFBRTs7QUFFRjs7QUFFQSxpQkFBaUI7O0FBRWpCLEVBQUU7O0FBRUY7O0FBRUEsZ0JBQWdCOztBQUVoQixFQUFFOztBQUVGOztBQUVBLGVBQWUsaUJBQWlCO0FBQ2hDLFlBQVksV0FBVztBQUN2QixXQUFXLGNBQWM7QUFDekIsYUFBYTs7QUFFYixFQUFFOztBQUVGOztBQUVBLHNCQUFzQixZQUFZOztBQUVsQyxlQUFlLFlBQVk7O0FBRTNCLHNCQUFzQjtBQUN0QixnQkFBZ0I7QUFDaEI7QUFDQSxHQUFHLEVBQUU7O0FBRUwsNEJBQTRCO0FBQzVCLGlCQUFpQjtBQUNqQix1QkFBdUI7QUFDdkIsbUJBQW1CO0FBQ25CO0FBQ0EsR0FBRyxFQUFFOztBQUVMLHlCQUF5QixZQUFZO0FBQ3JDLDRCQUE0QixZQUFZOztBQUV4QyxlQUFlO0FBQ2YsWUFBWTtBQUNaLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIsZUFBZTtBQUNmLGNBQWM7QUFDZCxrQkFBa0I7QUFDbEI7QUFDQSxHQUFHLEVBQUU7O0FBRUwscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQix1QkFBdUI7QUFDdkIsbUJBQW1CO0FBQ25CO0FBQ0EsR0FBRyxFQUFFOztBQUVMLGtCQUFrQixZQUFZO0FBQzlCLHFCQUFxQixZQUFZOztBQUVqQyxnQkFBZ0I7QUFDaEIsWUFBWTtBQUNaLGVBQWU7QUFDZixZQUFZO0FBQ1o7QUFDQSxHQUFHLEVBQUU7O0FBRUwsc0JBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQix1QkFBdUI7QUFDdkIsbUJBQW1CO0FBQ25CLG9CQUFvQjtBQUNwQix1QkFBdUI7QUFDdkI7QUFDQSxHQUFHLEVBQUU7O0FBRUwsbUJBQW1CLFlBQVk7QUFDL0Isc0JBQXNCLFlBQVk7O0FBRWxDLHFCQUFxQjtBQUNyQixnQkFBZ0I7QUFDaEIsZUFBZTtBQUNmO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0EsbUJBQW1CO0FBQ25CLFlBQVk7QUFDWixlQUFlO0FBQ2YsWUFBWTtBQUNaO0FBQ0EsR0FBRyxFQUFFOztBQUVMLFVBQVUsY0FBYztBQUN4QixVQUFVOztBQUVWLEVBQUU7O0FBRUY7O0FBRUEsWUFBWSwrQkFBK0I7QUFDM0MsWUFBWSxhQUFhO0FBQ3pCLFNBQVMsYUFBYTtBQUN0QixVQUFVLGFBQWE7QUFDdkIsUUFBUSxjQUFjO0FBQ3RCLGFBQWEsY0FBYztBQUMzQixjQUFjLFdBQVc7QUFDekIsZ0JBQWdCOztBQUVoQixFQUFFOztBQUVGOztBQUVBLFlBQVksK0JBQStCO0FBQzNDLFlBQVksYUFBYTtBQUN6QixXQUFXLGlDQUFpQztBQUM1QyxhQUFhLGFBQWE7QUFDMUIsUUFBUSxjQUFjO0FBQ3RCLGFBQWEsY0FBYztBQUMzQixjQUFjLFdBQVc7QUFDekIsZ0JBQWdCOztBQUVoQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDLGVBQWUsK0JBQStCO0FBQzlDLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUMsZ0JBQWdCLGFBQWE7QUFDN0IsZ0JBQWdCLGFBQWE7QUFDN0Isc0JBQXNCLFdBQVc7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QixlQUFlLFdBQVc7QUFDMUIsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QyxTQUFTLGNBQWM7QUFDdkIsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQyxtQkFBbUIsV0FBVztBQUM5QixrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQyxjQUFjO0FBQ2QsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLGtCQUFrQixjQUFjO0FBQ2hDLHdCQUF3QixXQUFXO0FBQ25DLDJCQUEyQixjQUFjO0FBQ3pDLDBCQUEwQiw2QkFBNkI7QUFDdkQsd0JBQXdCLGNBQWM7QUFDdEMsV0FBVyxXQUFXO0FBQ3RCLGdCQUFnQiwrQkFBK0I7QUFDL0MsbUJBQW1CLGNBQWM7QUFDakMsb0JBQW9CLFdBQVc7QUFDL0IsdUJBQXVCLGNBQWM7QUFDckMsa0JBQWtCLFdBQVc7QUFDN0IscUJBQXFCLGNBQWM7QUFDbkMsNkJBQTZCLHVCQUF1QjtBQUNwRCw0QkFBNEIsY0FBYztBQUMxQyxlQUFlLFdBQVc7QUFDMUIsa0JBQWtCLGNBQWM7QUFDaEMseUJBQXlCLFdBQVc7QUFDcEMsc0JBQXNCLCtCQUErQjtBQUNyRCx1QkFBdUIsV0FBVztBQUNsQywwQkFBMEIsY0FBYztBQUN4QyxtQkFBbUIsOEJBQThCO0FBQ2pELHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IseUJBQXlCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNkNBQTZDLFFBQVE7O0FBRXJEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsUUFBUTs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixtQ0FBbUM7O0FBRTFEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE9BQU87O0FBRVAsdUJBQXVCLG1DQUFtQzs7QUFFMUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0JBQXNCLG1DQUFtQzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBLHVCQUF1QixtQ0FBbUM7O0FBRTFEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE9BQU87O0FBRVAsdUJBQXVCLG1DQUFtQzs7QUFFMUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0JBQXNCLG1DQUFtQzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7O0FBRTVCOztBQUVBLG1CQUFtQixlQUFlOztBQUVsQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0NBQW9DLGVBQWU7O0FBRW5EOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLGlDQUFpQztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQix1QkFBdUI7O0FBRXpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7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QUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsaURBQWlELE9BQU87O0FBRXhEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsT0FBTzs7QUFFeEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxvQkFBb0IsMEJBQTBCOztBQUU5QztBQUNBOztBQUVBOztBQUVBLHFCQUFxQix1QkFBdUI7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLDZCQUE2Qjs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLFlBQVk7O0FBRWhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixZQUFZOztBQUUvQjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixPQUFPOztBQUUxQjs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixPQUFPOztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsOEJBQThCLGVBQWU7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLE9BQU87O0FBRXRDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLCtCQUErQixPQUFPOztBQUV0Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixTQUFTOztBQUUxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7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Q0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QyxRQUFROztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQSxFQUFFOztBQUVGOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQSxFQUFFOztBQUVGOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMERBQTBELFFBQVE7O0FBRWxFOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7O0FBSUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixPQUFPOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSixvQkFBb0IsT0FBTzs7QUFFM0I7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVB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RUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxRQUFROztBQUVqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxZQUFZLFFBQVE7O0FBRXBCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBLDBDQUEwQzs7QUFFMUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFdBQVc7O0FBRTdCOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkNBQTJDLFFBQVE7O0FBRW5EOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsT0FBTzs7QUFFMUI7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFF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QTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsU0FBUzs7QUFFVDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvQkFBb0I7O0FBRXBCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QiwwQ0FBMEM7O0FBRWpFOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU4sS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxPQUFPOztBQUVQOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLDRDQUE0Qzs7QUFFM0U7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEseUJBQXlCLHFCQUFxQjs7QUFFOUM7O0FB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQix3QkFBd0I7O0FBRTNDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUgsdUNBQXVDOztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNkNBQTZDO0FBQzdDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQzs7QUFFcEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQkFBc0I7O0FBRXRCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix5QkFBeUI7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRixTQUFTOztBQUU5RjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxZQUFZOztBQUVaOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLGdEQUFnRDs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHFCQUFxQixxQkFBcUI7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEseUNBQXlDLE9BQU87O0FBRWhEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsT0FBTzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxPQUFPOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvREFBb0Q7O0FBRXBEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0RBQW9EOztBQUVwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCLHlCQUF5Qjs7QUFFekI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkI7O0FBRTNCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsaUVBQWlFLGVBQWU7O0FBRWhGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCOztBQUV6Qjs7QUFFQSxrRUFBa0UsZUFBZTs7QUFFakY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1DQUFtQyxPQUFPOztBQUUxQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsT0FBTzs7QUFFekM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLGdCQUFnQjs7QUFFbkM7O0FBRUEsb0JBQW9CLG1CQUFtQjs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsZ0JBQWdCOztBQUVuQzs7QUFFQSxvQkFBb0IsbUJBQW1COztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsY0FBYyxtQkFBbUI7O0FBRWpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdCQUF3QixxQ0FBcUM7O0FBRTdEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6Qzs7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OztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxPQUFPOztBQUV4RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLCtDQUErQzs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwrQ0FBK0M7O0FBRS9DOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsUUFBUTs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsT0FBTzs7QUFFeEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtDQUFrQyxRQUFROztBQUUxQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUEsaUNBQWlDLE9BQU87O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxRQUFROztBQUV6RDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxVQUFVLGdCQUFnQjs7QUFFMUI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsZUFBZTs7QUFFeEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLHFCQUFxQjs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7O0FBRXZDLG9CQUFvQixvQkFBb0I7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsb0JBQW9COztBQUV2QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwrQkFBK0I7O0FBRS9CLEdBQUc7O0FBRUgsMkJBQTJCOztBQUUzQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixXQUFXOztBQUU5Qjs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixXQUFXOztBQUUvQjs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixVQUFVOztBQUU3QixvQkFBb0IsMEJBQTBCOztBQUU5Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHlCQUF5Qjs7QUFFNUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIseUJBQXlCOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIseUJBQXlCOztBQUVuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsZ0JBQWdCOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FB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QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixlQUFlOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwQ0FBMEMsT0FBTzs7QUFFakQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMENBQTBDLE9BQU87O0FBRWpEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQyxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLGtCQUFrQjs7QUFFL0I7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUEsMkJBQTJCLCtCQUErQjs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsNkNBQTZDOztBQUU3Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTs7QUFFM0I7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRjs7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QTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkNBQTJDLFFBQVE7O0FBRW5EOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixzQkFBc0I7O0FBRXhDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLHNCQUFzQjs7QUFFeEMsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDLG9CQUFvQixxQkFBcUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHNCQUFzQjs7QUFFekMsb0JBQW9CLHFCQUFxQjs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsbURBQW1EOztBQUVwRTs7QUFFQTs7QUFFQSx3Q0FBd0MsUUFBUTs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0QsT0FBTzs7QUFFdEUsc0JBQXNCLE9BQU87O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsZ0RBQWdELE9BQU87O0FBRXZELHFCQUFxQixPQUFPOztBQUU1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU07QUFDM0Usa0JBQWtCLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxFQUFFOztBQUU3RTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQjs7QUFFbEI7O0FBRUEscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0I7O0FBRWxCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUNBQXFDOztBQUVyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxjQUFjO0FBQ2Q7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDLEVBQUU7O0FBRXBDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixjQUFjOztBQUVoQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixjQUFjOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLGNBQWM7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0M7O0FBRWxDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMLGdDQUFnQzs7QUFFaEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHFDQUFxQyxTQUFTOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHFDQUFxQyxTQUFTOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLGFBQWE7O0FBRS9COztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLFNBQVM7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLGVBQWU7O0FBRWpDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjOztBQUVuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1RkFBdUYsY0FBYzs7QUFFckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsZ0JBQWdCOztBQUVsRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUzs7QUFFbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUNBQXlDLFNBQVM7O0FBRWxEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHFCQUFxQjs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixzQkFBc0I7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7O0FBRXBEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQiw0QkFBNEI7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQiwwQkFBMEI7O0FBRTFDOztBQUVBLHNCQUFzQiw0Q0FBNEM7O0FBRWxFOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLDhDQUE4Qzs7QUFFbkU7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFNBQVM7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFVBQVU7O0FBRVY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdDQUF3QyxPQUFPOztBQUUvQztBQUNBOztBQUVBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLCtCQUErQixjQUFjOztBQUU3Qzs7QUFFQTs7QUFFQSxVQUFVOztBQUVWOztBQUVB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Q0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlEQUFpRDs7QUFFakQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7O0FBR0g7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDhCQUE4Qjs7QUFFOUI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQSxxRUFBcUU7O0FBRXJFOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDO0FBQ2xDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsOEVBQThFOztBQUU5RTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHFDQUFxQyxRQUFROztBQUU3QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUcsY0FBYzs7QUFFakI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0RBQWdELFFBQVE7O0FBRXhEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsU0FBUzs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQyxPQUFPOztBQUUzQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUEsb0NBQW9DLE9BQU87O0FBRTNDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQyxPQUFPOztBQUUzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUCx1RUFBdUUsWUFBWTs7QUFFbkY7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUJBQXFCLDJCQUEyQjs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCOztBQUVwQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLFFBQVE7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLFFBQVE7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUEsNkNBQTZDOztBQUU3Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGtFQUFrRTs7QUFFbEU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIscUJBQXFCOztBQUV4Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsNkJBQTZCOztBQUVoRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsbUJBQW1COztBQUV0QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVILGtFQUFrRSwrQkFBK0I7O0FBRWpHLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTCxJQUFJOztBQUVKOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwRUFBMEU7O0FBRTFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsaURBQWlEOztBQUVqRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCOztBQUVuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVB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QUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsU0FBUzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1DQUFtQyxTQUFTOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQ0FBbUMsU0FBUzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUNBQW1DLFNBQVM7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUIseUJBQXlCOztBQUU5Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxpREFBaUQ7O0FBRWpEOztBQUVBLEdBQUcsZ0VBQWdFOztBQUVuRTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDLHdDQUF3QyxTQUFTOztB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d0JBQXdCO0FBQ3hCLHlCQUF5Qjs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxXQUFXOztBQUVYOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSw4Q0FBOEMsU0FBUzs7QUFFdkQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxTQUFTOztBQUV2RDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxHQUFHLE9BQU87O0FBRVY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0RBQW9EO0FBQ3BEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTixLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QyxTQUFTOztBQUVqRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esd0NBQXdDLFNBQVM7O0FBRWpEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCO0FBQ3RCOztBQUVBLG1DQUFtQzs7O0FBR25DLGlDQUFpQztBQUNqQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxTQUFTOztBQUVoRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixRQUFROztBQUVyQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsZ0JBQWdCOztBQUVsQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7O0FBRW5DOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCLGtCQUFrQiwwQkFBMEI7O0FBRTVDLCtCQUErQjs7QUFFL0I7O0FBRUEsc0NBQXNDOztBQUV0Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtDQUErQyxTQUFTOztBQUV4RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWCxVQUFVLGVBQWU7QUFDekIsVUFBVTtBQUNWLFlBQVksZUFBZTtBQUMzQjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVILDhIQUE4SDtBQUM5SDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87O0FBRTdDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIscUJBQXFCOztBQUVyQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCO0FBQ3ZCLHFCQUFxQjtBQUNyQixhQUFhOztBQUViOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsUUFBUTs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNB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QTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsZ0NBQWdDOztBQUUzRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLDJDQUEyQyx5REFBeUQ7O0FBRXBHO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLGtDQUFrQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLG9CQUFvQjtBQUN6QyxxQkFBcUIsb0JBQW9CO0FBQ3pDLHFCQUFxQixvQkFBb0I7QUFDekMscUJBQXFCLHFCQUFxQjtBQUMxQyxzQkFBc0IscUJBQXFCO0FBQzNDLHNCQUFzQixxQkFBcUI7QUFDM0Msc0JBQXNCLHFCQUFxQjtBQUMzQyxzQkFBc0IscUJBQXFCOztBQUUzQzs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwyQ0FBMkMsa0NBQWtDOztBQUU3RTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLGtDQUFrQzs7QUFFN0U7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlEQUF5RCxzRkFBc0Y7O0FBRS9JOztBQUVBOztBQUVBOztBQUVBLCtDQUErQzs7QUFFL0M7O0FBRUEsMEVBQTBFLDZDQUE2Qzs7QUFFdkg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsK0RBQStELGtDQUFrQztBQUNqRztBQUNBOztBQUVBLCtEQUErRCxrQ0FBa0M7QUFDakc7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyx3Q0FBd0M7O0FBRW5GOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwQ0FBMEMsT0FBTzs7QUFFakQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQyxrQ0FBa0M7O0FBRWxDOztBQUVBOztBQUVBOztBQUVBLGlEQUFpRDtBQUNqRCxrQkFBa0I7O0FBRWxCLE1BQU07O0FBRU47QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUosb0NBQW9DLGdDQUFnQzs7QUFFcEU7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQSwrQ0FBK0MsYUFBYTs7QUFFNUQ7O0FBRUE7O0FBRUEsK0NBQStDLGFBQWE7O0FBRTVEOztBQUVBLHVCQUF1QixtQkFBbUI7O0FBRTFDO0FBQ0E7O0FBRUEseUJBQXlCLDBCQUEwQjs7QUFFbkQ7O0FBRUEsNkNBQTZDLHNDQUFzQztBQUNuRjs7QUFFQTtBQUNBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxRQUFROztBQUVqRDtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLFFBQVE7O0FBRWpEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEMsK0JBQStCO0FBQy9CLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdGQUF3Riw0Q0FBNEM7O0FBRXBJOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsNEZBQTRGLDRDQUE0Qzs7QUFFeEk7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUc7QUFDckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUc7QUFDckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFO0FBQ0Y7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGlFQUFpRTtBQUNqRTtBQUNBLEVBQUUsRUFBRTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUUya1A7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2h3aUQ1alA7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixxQkFBcUI7QUFDckIsbUJBQW1COztBQUVuQiw0QkFBNEIsa0RBQWU7O0FBRTNDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQiwwQ0FBTzs7QUFFM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBLG9DQUFvQztBQUNwQyxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQSxlQUFlOztBQUVmO0FBQ0EsdUJBQXVCLE9BQU8sK0NBQVksVUFBVSw4Q0FBVyxTQUFTLDRDQUFTOztBQUVqRjtBQUNBLGtCQUFrQixNQUFNLCtDQUFZLE9BQU8sa0RBQWU7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCLDBDQUFPOztBQUU3QjtBQUNBLG9CQUFvQiw2Q0FBVSxzQ0FBc0MsMENBQU87QUFDM0U7O0FBRUEsNEJBQTRCLDBDQUFPO0FBQ25DLDhCQUE4Qiw2Q0FBVTs7QUFFeEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEseUNBQXlDOztBQUV6Qyx5Q0FBeUM7O0FBRXpDOztBQUVBOztBQUVBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsa0JBQWtCLEdBQUc7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdCQUF3Qiw0Q0FBUztBQUNqQyw2QkFBNkIsNENBQVM7O0FBRXRDO0FBQ0Esd0JBQXdCLDBDQUFPO0FBQy9COztBQUVBLDBCQUEwQiwwQ0FBTztBQUNqQyx3QkFBd0IsMENBQU87QUFDL0IsMEJBQTBCLDBDQUFPOztBQUVqQyx1QkFBdUIsMENBQU87QUFDOUIscUJBQXFCLDBDQUFPO0FBQzVCLHVCQUF1QiwwQ0FBTzs7QUFFOUIseUJBQXlCLDBDQUFPO0FBQ2hDLHVCQUF1QiwwQ0FBTztBQUM5Qix5QkFBeUIsMENBQU87O0FBRWhDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsaUJBQWlCLDBDQUFPOztBQUV4Qjs7QUFFQSw2Q0FBNkM7QUFDN0M7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxpQkFBaUIsMENBQU87O0FBRXhCOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVILHFDQUFxQztBQUNyQzs7QUFFQSxzQkFBc0IsMENBQU87O0FBRTdCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0VBQW9FOztBQUVwRTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvRUFBb0U7O0FBRXBFOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFNBQVMsOENBQVc7O0FBRXBCOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFNBQVMsK0NBQVk7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsU0FBUyw0Q0FBUzs7QUFFbEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLCtDQUFZOztBQUV2Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLDRDQUFTOztBQUVwQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLGtEQUFlOztBQUUxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLHFEQUFrQjs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FB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QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsMENBQU87QUFDbEMsbUJBQW1CLDBDQUFPO0FBQzFCLGNBQWMsMENBQU87O0FBRXJCOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLDBDQUFPO0FBQzFCOztBQUVBOztBQUVBOztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsV0FBVyxtQkFBbUI7QUFDOUIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0RBQWtEO0FBQzdELFdBQVcsbUJBQW1CO0FBQzlCLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLGtEQUFrRDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbURBQW1EO0FBQzlELFdBQVcsbUJBQW1CO0FBQzlCLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsbUJBQW1CLHVDQUF1QztBQUMxRDtBQUNBOzs7QUFHQTtBQUNBLFdBQVcsaURBQWlEO0FBQzVELFlBQVksbURBQW1EO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyxtREFBbUQ7QUFDOUQsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbURBQW1EO0FBQzlELFdBQVcsbUJBQW1CO0FBQzlCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLG1CQUFtQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksbURBQW1EO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCOzs7QUFHQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLG1EQUFtRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRCxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9ELFdBQVcsbUJBQW1CO0FBQzlCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRCxXQUFXLG1CQUFtQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbURBQW1EO0FBQzlELFdBQVcsbUJBQW1CO0FBQzlCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLG1CQUFtQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLG1EQUFtRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksbURBQW1EO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMEJBQTBCLGNBQWM7QUFDeEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9ELFlBQVk7QUFDWixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9ELFdBQVcsbUJBQW1CO0FBQzlCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRCxXQUFXLG1CQUFtQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1Qjs7O0FBR0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxvREFBb0Q7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVywrQ0FBK0M7QUFDMUQsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtDQUErQztBQUMxRCxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQ0FBK0M7QUFDMUQsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSwrQ0FBK0M7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLCtDQUErQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLGdEQUFnRDtBQUMzRCxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdEQUFnRDtBQUMzRCxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnREFBZ0Q7QUFDM0QsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksZ0RBQWdEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMEJBQTBCLGNBQWM7QUFDeEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBLFdBQVcsa0RBQWtEO0FBQzdELFlBQVk7QUFDWixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtEQUFrRDtBQUM3RCxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLGtEQUFrRDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksa0RBQWtEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxrREFBa0Q7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyxtREFBbUQ7QUFDOUQsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtREFBbUQ7QUFDOUQsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyx3REFBd0Q7QUFDbkUsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdEQUF3RDtBQUNuRSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSx3REFBd0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLHdEQUF3RDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLHlEQUF5RDtBQUNwRSxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlEQUF5RDtBQUNwRSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5REFBeUQ7QUFDcEUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVkseURBQXlEO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMEJBQTBCLGNBQWM7QUFDeEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBLFdBQVcsMkRBQTJEO0FBQ3RFLFlBQVk7QUFDWixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJEQUEyRDtBQUN0RSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyREFBMkQ7QUFDdEUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLDJEQUEyRDtBQUN2RTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksMkRBQTJEO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSwyREFBMkQ7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyw0REFBNEQ7QUFDdkUsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0REFBNEQ7QUFDdkUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyw0REFBNEQ7QUFDdkUsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0REFBNEQ7QUFDdkUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSw0REFBNEQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLDREQUE0RDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQSxXQUFXLDZEQUE2RDtBQUN4RSxZQUFZO0FBQ1osY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLG1CQUFtQjtBQUM5QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2REFBNkQ7QUFDeEUsV0FBVyxtQkFBbUI7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksNkRBQTZEO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMEJBQTBCLGNBQWM7QUFDeEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBLFdBQVcsb0VBQW9FO0FBQy9FLFlBQVk7QUFDWixjQUFjLHFCQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvRUFBb0U7QUFDL0UsV0FBVyxtQkFBbUI7QUFDOUIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0VBQW9FO0FBQy9FLFdBQVcsbUJBQW1CO0FBQzlCLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7OztBQUdBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksb0VBQW9FO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjs7O0FBR0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxvRUFBb0U7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4QyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyxxRUFBcUU7QUFDaEYsWUFBWTtBQUNaLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxRUFBcUU7QUFDaEYsV0FBVyxtQkFBbUI7QUFDOUIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUVBQXFFO0FBQ2hGLFdBQVcsbUJBQW1CO0FBQzlCLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOzs7QUFHQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLHFFQUFxRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7Ozs7Ozs7Ozs7O0FDbjlGQTtBQUNBOztBQUVBLDRDQUE0QyxtQkFBTyxDQUFDLGdIQUFzRDtBQUMxRyxXQUFXLCtIQUF3Qzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FB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bEcsNEZBQTRGLDhCQUE4QjtBQUMxSCxzRUFBc0UsOEJBQThCO0FBQ3BHLGtFQUFrRSw4QkFBOEI7QUFDaEcsb0VBQW9FLDhCQUE4QjtBQUNsRztBQUNBIiwiZmlsZSI6ImNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7dmFyIHI9dCgpO2Zvcih2YXIgbiBpbiByKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW25dPXJbbl19fSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBvPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9cmV0dXJuIHIubT1lLHIuYz10LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om59KX0sci5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LHIudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9cihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSlyLmQobixvLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbykpO3JldHVybiBufSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPVwiXCIscihyLnM9MTApfShbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMyk7dC5NZXRhZGF0YT1uLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWJ1Zz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtjb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYXBwbHkobnVsbCxlKTpjb25zb2xlLmxvZy5hcHBseShudWxsLGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMCksbz1yKDgpLHM9cig5KSxpPXIoMSksYT1yKDQpLHU9cigxNCk7dC5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGQoZSx0KX07dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdGFydGVkPSExLHRoaXMuc2VudEZpcnN0TWVzc2FnZT0hMSx0aGlzLmNvbXBsZXRlZD0hMSx0aGlzLmNsb3NlZD0hMSx0aGlzLmZpbmlzaGVkU2VuZGluZz0hMSx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcz1bXSx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcz1bXSx0aGlzLm9uRW5kQ2FsbGJhY2tzPVtdLHRoaXMucGFyc2VyPW5ldyBvLkNodW5rUGFyc2VyLHRoaXMubWV0aG9kRGVmaW5pdGlvbj1lLHRoaXMucHJvcHM9dCx0aGlzLmNyZWF0ZVRyYW5zcG9ydCgpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVUcmFuc3BvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmhvc3QrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLm1ldGhvZE5hbWUsdD17bWV0aG9kRGVmaW5pdGlvbjp0aGlzLm1ldGhvZERlZmluaXRpb24sZGVidWc6dGhpcy5wcm9wcy5kZWJ1Z3x8ITEsdXJsOmUsb25IZWFkZXJzOnRoaXMub25UcmFuc3BvcnRIZWFkZXJzLmJpbmQodGhpcyksb25DaHVuazp0aGlzLm9uVHJhbnNwb3J0Q2h1bmsuYmluZCh0aGlzKSxvbkVuZDp0aGlzLm9uVHJhbnNwb3J0RW5kLmJpbmQodGhpcyl9O3RoaXMucHJvcHMudHJhbnNwb3J0P3RoaXMudHJhbnNwb3J0PXRoaXMucHJvcHMudHJhbnNwb3J0KHQpOnRoaXMudHJhbnNwb3J0PWEubWFrZURlZmF1bHRUcmFuc3BvcnQodCl9LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0SGVhZGVycz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkhlYWRlcnNcIixlLHQpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJncnBjLm9uSGVhZGVycyByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKDA9PT10KTtlbHNle3RoaXMucmVzcG9uc2VIZWFkZXJzPWUsdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcIm9uSGVhZGVycy5yZXNwb25zZUhlYWRlcnNcIixKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNlSGVhZGVycyxudWxsLDIpKTt2YXIgcj1jKGUpO3RoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ1N0YXR1c1wiLHIpO3ZhciBuPXImJnI+PTA/cjpzLmh0dHBTdGF0dXNUb0NvZGUodCk7dGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcIm9uSGVhZGVycy5jb2RlXCIsbik7dmFyIG89ZS5nZXQoXCJncnBjLW1lc3NhZ2VcIil8fFtdO2lmKHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ01lc3NhZ2VcIixvKSx0aGlzLnJhd09uSGVhZGVycyhlKSxuIT09cy5Db2RlLk9LKXt2YXIgYT10aGlzLmRlY29kZUdSUENTdGF0dXMob1swXSk7dGhpcy5yYXdPbkVycm9yKG4sYSxlKX19fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydENodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcImdycGMub25DaHVuayByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNle3ZhciByPVtdO3RyeXtyPXRoaXMucGFyc2VyLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybiB0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwib25DaHVuay5wYXJzaW5nIGVycm9yXCIsZSxlLm1lc3NhZ2UpLHZvaWQgdGhpcy5yYXdPbkVycm9yKHMuQ29kZS5JbnRlcm5hbCxcInBhcnNpbmcgZXJyb3I6IFwiK2UubWVzc2FnZSl9ci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY2h1bmtUeXBlPT09by5DaHVua1R5cGUuTUVTU0FHRSl7dmFyIHI9dC5tZXRob2REZWZpbml0aW9uLnJlc3BvbnNlVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeShlLmRhdGEpO3QucmF3T25NZXNzYWdlKHIpfWVsc2UgZS5jaHVua1R5cGU9PT1vLkNodW5rVHlwZS5UUkFJTEVSUyYmKHQucmVzcG9uc2VIZWFkZXJzPyh0LnJlc3BvbnNlVHJhaWxlcnM9bmV3IG4uTWV0YWRhdGEoZS50cmFpbGVycyksdC5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcIm9uQ2h1bmsudHJhaWxlcnNcIix0LnJlc3BvbnNlVHJhaWxlcnMpKToodC5yZXNwb25zZUhlYWRlcnM9bmV3IG4uTWV0YWRhdGEoZS50cmFpbGVycyksdC5yYXdPbkhlYWRlcnModC5yZXNwb25zZUhlYWRlcnMpKSl9KX19LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0RW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcImdycGMub25FbmRcIiksdGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcImdycGMub25FbmQgcmVjZWl2ZWQgYWZ0ZXIgcmVxdWVzdCB3YXMgY2xvc2VkIC0gaWdub3JpbmdcIik7ZWxzZSBpZih2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHJhaWxlcnMpe3ZhciBlPWModGhpcy5yZXNwb25zZVRyYWlsZXJzKTtpZihudWxsIT09ZSl7dmFyIHQ9dGhpcy5yZXNwb25zZVRyYWlsZXJzLmdldChcImdycGMtbWVzc2FnZVwiKSxyPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyh0WzBdKTt0aGlzLnJhd09uRW5kKGUscix0aGlzLnJlc3BvbnNlVHJhaWxlcnMpfWVsc2UgdGhpcy5yYXdPbkVycm9yKHMuQ29kZS5JbnRlcm5hbCxcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGdycGMtc3RhdHVzIChUcmFpbGVycyBwcm92aWRlZClcIil9ZWxzZXtpZih2b2lkIDA9PT10aGlzLnJlc3BvbnNlSGVhZGVycylyZXR1cm4gdm9pZCB0aGlzLnJhd09uRXJyb3Iocy5Db2RlLlVua25vd24sXCJSZXNwb25zZSBjbG9zZWQgd2l0aG91dCBoZWFkZXJzXCIpO3ZhciBuPWModGhpcy5yZXNwb25zZUhlYWRlcnMpLG89dGhpcy5yZXNwb25zZUhlYWRlcnMuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpO2lmKHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJncnBjLmhlYWRlcnMgb25seSByZXNwb25zZSBcIixuLG8pLG51bGw9PT1uKXJldHVybiB2b2lkIHRoaXMucmF3T25FbmQocy5Db2RlLlVua25vd24sXCJSZXNwb25zZSBjbG9zZWQgd2l0aG91dCBncnBjLXN0YXR1cyAoSGVhZGVycyBvbmx5KVwiLHRoaXMucmVzcG9uc2VIZWFkZXJzKTt2YXIgYT10aGlzLmRlY29kZUdSUENTdGF0dXMob1swXSk7dGhpcy5yYXdPbkVuZChuLGEsdGhpcy5yZXNwb25zZUhlYWRlcnMpfX0sZS5wcm90b3R5cGUuZGVjb2RlR1JQQ1N0YXR1cz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5cIlwiO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlfX0sZS5wcm90b3R5cGUucmF3T25FbmQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7dGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcInJhd09uRW5kXCIsZSx0LHIpLHRoaXMuY29tcGxldGVkfHwodGhpcy5jb21wbGV0ZWQ9ITAsdGhpcy5vbkVuZENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKCFuLmNsb3NlZCl0cnl7byhlLHQscil9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19KSl9LGUucHJvdG90eXBlLnJhd09uSGVhZGVycz1mdW5jdGlvbihlKXt0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwicmF3T25IZWFkZXJzXCIsZSksdGhpcy5jb21wbGV0ZWR8fHRoaXMub25IZWFkZXJzQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24odCl7dHJ5e3QoZSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19KX0sZS5wcm90b3R5cGUucmF3T25FcnJvcj1mdW5jdGlvbihlLHQscil7dmFyIG89dGhpczt2b2lkIDA9PT1yJiYocj1uZXcgbi5NZXRhZGF0YSksdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcInJhd09uRXJyb3JcIixlLHQpLHRoaXMuY29tcGxldGVkfHwodGhpcy5jb21wbGV0ZWQ9ITAsdGhpcy5vbkVuZENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFvLmNsb3NlZCl0cnl7bihlLHQscil9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19KSl9LGUucHJvdG90eXBlLnJhd09uTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJyYXdPbk1lc3NhZ2VcIixlLnRvT2JqZWN0KCkpLHRoaXMuY29tcGxldGVkfHx0aGlzLmNsb3NlZHx8dGhpcy5vbk1lc3NhZ2VDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtpZighdC5jbG9zZWQpdHJ5e3IoZSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19KX0sZS5wcm90b3R5cGUub25IZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMub25IZWFkZXJzQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLm9uTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXt0aGlzLm9uRW5kQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBzdGFydGVkIC0gY2Fubm90IC5zdGFydCgpXCIpO3RoaXMuc3RhcnRlZD0hMDt2YXIgdD1uZXcgbi5NZXRhZGF0YShlfHx7fSk7dC5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL2dycGMtd2ViK3Byb3RvXCIpLHQuc2V0KFwieC1ncnBjLXdlYlwiLFwiMVwiKSx0aGlzLnRyYW5zcG9ydC5zdGFydCh0KX0sZS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5zdGFydCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuc2VuZCgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKHRoaXMuZmluaXNoZWRTZW5kaW5nKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGZpbmlzaGVkIHNlbmRpbmcgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZighdGhpcy5tZXRob2REZWZpbml0aW9uLnJlcXVlc3RTdHJlYW0mJnRoaXMuc2VudEZpcnN0TWVzc2FnZSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIGFscmVhZHkgc2VudCBmb3Igbm9uLWNsaWVudC1zdHJlYW1pbmcgbWV0aG9kIC0gY2Fubm90IC5zZW5kKClcIik7dGhpcy5zZW50Rmlyc3RNZXNzYWdlPSEwO3ZhciB0PXUuZnJhbWVSZXF1ZXN0KGUpO3RoaXMudHJhbnNwb3J0LnNlbmRNZXNzYWdlKHQpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuZmluaXNoU2VuZCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuY2xvc2UoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZih0aGlzLmZpbmlzaGVkU2VuZGluZyl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBmaW5pc2hlZCBzZW5kaW5nIC0gY2Fubm90IC5maW5pc2hTZW5kKClcIik7dGhpcy5maW5pc2hlZFNlbmRpbmc9ITAsdGhpcy50cmFuc3BvcnQuZmluaXNoU2VuZCgpfSxlLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLnN0YXJ0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5jbG9zZSgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuY2xvc2UoKVwiKTt0aGlzLmNsb3NlZD0hMCx0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwicmVxdWVzdC5hYm9ydCBhYm9ydGluZyByZXF1ZXN0XCIpLHRoaXMudHJhbnNwb3J0LmNhbmNlbCgpfSxlfSgpO2Z1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5nZXQoXCJncnBjLXN0YXR1c1wiKXx8W107aWYodC5sZW5ndGg+MCl0cnl7dmFyIHI9dFswXTtyZXR1cm4gcGFyc2VJbnQociwxMCl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIG51bGx9fSxmdW5jdGlvbihlLHQscil7dmFyIG47bj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsXCJhXCIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9XCJcIixyKHIucz0xKX0oW2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDMpO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPXt9KSx2b2lkIDA9PT10JiYodD17c3BsaXRWYWx1ZXM6ITF9KTt2YXIgcixvPXRoaXM7aWYodGhpcy5oZWFkZXJzTWFwPXt9LGUpaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhlYWRlcnMmJmUgaW5zdGFuY2VvZiBIZWFkZXJzKW4uZ2V0SGVhZGVyS2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe24uZ2V0SGVhZGVyVmFsdWVzKGUscikuZm9yRWFjaChmdW5jdGlvbihlKXt0LnNwbGl0VmFsdWVzP28uYXBwZW5kKHIsbi5zcGxpdEhlYWRlclZhbHVlKGUpKTpvLmFwcGVuZChyLGUpfSl9KTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZihyPWUpJiZcIm9iamVjdFwiPT10eXBlb2Ygci5oZWFkZXJzTWFwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmZvckVhY2gpZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7by5hcHBlbmQoZSx0KX0pO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCYmZSBpbnN0YW5jZW9mIE1hcCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7by5hcHBlbmQodCxlKX0pfWVsc2VcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLmFwcGVuZEZyb21TdHJpbmcoZSk6XCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihlKXtvLmFwcGVuZCh0LGUpfSk6by5hcHBlbmQodCxyKX0pfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiXFxyXFxuXCIpLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxvPW4uaW5kZXhPZihcIjpcIik7aWYobz4wKXt2YXIgcz1uLnN1YnN0cmluZygwLG8pLnRyaW0oKSxpPW4uc3Vic3RyaW5nKG8rMSkudHJpbSgpO3RoaXMuYXBwZW5kKHMsaSl9fX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bi5ub3JtYWxpemVOYW1lKGUpO2lmKHZvaWQgMD09PXQpZGVsZXRlIHRoaXMuaGVhZGVyc01hcFtyXTtlbHNle3ZhciBvPXRoaXMuaGVhZGVyc01hcFtyXTtpZihvKXt2YXIgcz1vLmluZGV4T2YodCk7cz49MCYmby5zcGxpY2UocywxKSwwPT09by5sZW5ndGgmJmRlbGV0ZSB0aGlzLmhlYWRlcnNNYXBbcl19fX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxvPW4ubm9ybWFsaXplTmFtZShlKTtBcnJheS5pc0FycmF5KHRoaXMuaGVhZGVyc01hcFtvXSl8fCh0aGlzLmhlYWRlcnNNYXBbb109W10pLEFycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuaGVhZGVyc01hcFtvXS5wdXNoKG4ubm9ybWFsaXplVmFsdWUoZSkpfSk6dGhpcy5oZWFkZXJzTWFwW29dLnB1c2gobi5ub3JtYWxpemVWYWx1ZSh0KSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPW4ubm9ybWFsaXplTmFtZShlKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbz1bXTt0LmZvckVhY2goZnVuY3Rpb24oZSl7by5wdXNoKG4ubm9ybWFsaXplVmFsdWUoZSkpfSksdGhpcy5oZWFkZXJzTWFwW3JdPW99ZWxzZSB0aGlzLmhlYWRlcnNNYXBbcl09W24ubm9ybWFsaXplVmFsdWUodCldfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmhlYWRlcnNNYXBbbi5ub3JtYWxpemVOYW1lKGUpXTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10KXt2YXIgbz1uLm5vcm1hbGl6ZVZhbHVlKHQpO3JldHVybiByLmluZGV4T2Yobyk+PTB9cmV0dXJuITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhlYWRlcnNNYXBbbi5ub3JtYWxpemVOYW1lKGUpXTtyZXR1cm4gdm9pZCAwIT09dD90LmNvbmNhdCgpOltdfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5oZWFkZXJzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2Uocix0LmhlYWRlcnNNYXBbcl0pfSx0aGlzKX0sZS5wcm90b3R5cGUudG9IZWFkZXJzPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhlYWRlcnMpe3ZhciBlPW5ldyBIZWFkZXJzO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7ZS5hcHBlbmQodCxyKX0pfSksZX10aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNsYXNzIGlzIG5vdCBkZWZpbmVkXCIpfSxlfSgpO3QuQnJvd3NlckhlYWRlcnM9b30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMCk7dC5Ccm93c2VySGVhZGVycz1uLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pdGVyYXRlSGVhZGVycz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lW1N5bWJvbC5pdGVyYXRvcl0oKSxuPXIubmV4dCgpOyFuLmRvbmU7KXQobi52YWx1ZVswXSksbj1yLm5leHQoKX0sdC5pdGVyYXRlSGVhZGVyc0tleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5rZXlzKCksbj1yLm5leHQoKTshbi5kb25lOyl0KG4udmFsdWUpLG49ci5uZXh0KCl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlfXQubm9ybWFsaXplTmFtZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWVcIik7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sdC5ub3JtYWxpemVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfSx0LmdldEhlYWRlclZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciByPW8oZSk7aWYociBpbnN0YW5jZW9mIEhlYWRlcnMmJnIuZ2V0QWxsKXJldHVybiByLmdldEFsbCh0KTt2YXIgbj1yLmdldCh0KTtyZXR1cm4gbiYmXCJzdHJpbmdcIj09dHlwZW9mIG4/W25dOm59LHQuZ2V0SGVhZGVyS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1vKGUpLHI9e30scz1bXTtyZXR1cm4gdC5rZXlzP24uaXRlcmF0ZUhlYWRlcnNLZXlzKHQsZnVuY3Rpb24oZSl7cltlXXx8KHJbZV09ITAscy5wdXNoKGUpKX0pOnQuZm9yRWFjaD90LmZvckVhY2goZnVuY3Rpb24oZSx0KXtyW3RdfHwoclt0XT0hMCxzLnB1c2godCkpfSk6bi5pdGVyYXRlSGVhZGVycyh0LGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07clt0XXx8KHJbdF09ITAscy5wdXNoKHQpKX0pLHN9LHQuc3BsaXRIZWFkZXJWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5zcGxpdChcIiwgXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSl9KX0pLHR9fV0pfSxlLmV4cG9ydHM9bigpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cig1KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBuLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQoe3dpdGhDcmVkZW50aWFsczohMX0pKGUpfTt0LnNldERlZmF1bHRUcmFuc3BvcnRGYWN0b3J5PWZ1bmN0aW9uKGUpe289ZX0sdC5tYWtlRGVmYXVsdFRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDYpLG89cig3KTt0LkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7aWYobi5kZXRlY3RGZXRjaFN1cHBvcnQoKSl7dmFyIHQ9e2NyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzP1wiaW5jbHVkZVwiOlwic2FtZS1vcmlnaW5cIn07cmV0dXJuIG4uRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydCh0KX1yZXR1cm4gby5YaHJUcmFuc3BvcnQoe3dpdGhDcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFsc30pfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbcl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1yKDApLHM9cigxKTt0LkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlLmRlYnVnJiZzLmRlYnVnKFwiZmV0Y2hSZXF1ZXN0XCIsZSksbmV3IGkoZSx0KX0odCxlKX19O3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuY2FuY2VsbGVkPSExLHRoaXMuY29udHJvbGxlcj1zZWxmLkFib3J0Q29udHJvbGxlciYmbmV3IEFib3J0Q29udHJvbGxlcix0aGlzLm9wdGlvbnM9ZSx0aGlzLmluaXQ9dH1yZXR1cm4gZS5wcm90b3R5cGUucHVtcD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7aWYodGhpcy5yZWFkZXI9ZSx0aGlzLmNhbmNlbGxlZClyZXR1cm4gdGhpcy5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2gucHVtcC5jYW5jZWwgYXQgZmlyc3QgcHVtcFwiKSx2b2lkIHRoaXMucmVhZGVyLmNhbmNlbCgpO3RoaXMucmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUuZG9uZSlyZXR1cm4gci5vcHRpb25zLm9uRW5kKCksdDtyLm9wdGlvbnMub25DaHVuayhlLnZhbHVlKSxyLnB1bXAoci5yZWFkZXIsdCl9KS5jYXRjaChmdW5jdGlvbihlKXtyLmNhbmNlbGxlZD9yLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5jYXRjaCAtIHJlcXVlc3QgY2FuY2VsbGVkXCIpOihyLmNhbmNlbGxlZD0hMCxyLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5jYXRjaFwiLGUubWVzc2FnZSksci5vcHRpb25zLm9uRW5kKGUpKX0pfSxlLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZmV0Y2godGhpcy5vcHRpb25zLnVybCxuKHt9LHRoaXMuaW5pdCx7aGVhZGVyczp0aGlzLm1ldGFkYXRhLnRvSGVhZGVycygpLG1ldGhvZDpcIlBPU1RcIixib2R5OmUsc2lnbmFsOnRoaXMuY29udHJvbGxlciYmdGhpcy5jb250cm9sbGVyLnNpZ25hbH0pKS50aGVuKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIkZldGNoLnJlc3BvbnNlXCIsZSksdC5vcHRpb25zLm9uSGVhZGVycyhuZXcgby5NZXRhZGF0YShlLmhlYWRlcnMpLGUuc3RhdHVzKSwhZS5ib2R5KXJldHVybiBlO3QucHVtcChlLmJvZHkuZ2V0UmVhZGVyKCksZSl9KS5jYXRjaChmdW5jdGlvbihlKXt0LmNhbmNlbGxlZD90Lm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5jYXRjaCAtIHJlcXVlc3QgY2FuY2VsbGVkXCIpOih0LmNhbmNlbGxlZD0hMCx0Lm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5jYXRjaFwiLGUubWVzc2FnZSksdC5vcHRpb25zLm9uRW5kKGUpKX0pfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMubWV0YWRhdGE9ZX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ/dGhpcy5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsIGFscmVhZHkgY2FuY2VsbGVkXCIpOih0aGlzLmNhbmNlbGxlZD0hMCx0aGlzLnJlYWRlcj8odGhpcy5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsXCIpLHRoaXMucmVhZGVyLmNhbmNlbCgpKTp0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5hYm9ydC5jYW5jZWwgYmVmb3JlIHJlYWRlclwiKSx0aGlzLmNvbnRyb2xsZXImJnRoaXMuY29udHJvbGxlci5hYm9ydCgpKX0sZX0oKTt0LmRldGVjdEZldGNoU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZXNwb25zZSYmUmVzcG9uc2UucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgSGVhZGVyc319LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixvPXRoaXMmJnRoaXMuX19leHRlbmRzfHwobj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcz1yKDApLGk9cigxKSxhPXIoMTEpO3QuWGhyVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihhLmRldGVjdE1velhIUlN1cHBvcnQoKSlyZXR1cm4gbmV3IGQodCxlKTtpZihhLmRldGVjdFhIUk92ZXJyaWRlTWltZVR5cGVTdXBwb3J0KCkpcmV0dXJuIG5ldyB1KHQsZSk7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbnZpcm9ubWVudCdzIFhIUiBpbXBsZW1lbnRhdGlvbiBjYW5ub3Qgc3VwcG9ydCBiaW5hcnkgdHJhbnNmZXIuXCIpfX07dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIlhIUi5vblByb2dyZXNzRXZlbnQubGVuZ3RoOiBcIix0aGlzLnhoci5yZXNwb25zZS5sZW5ndGgpO3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlLnN1YnN0cih0aGlzLmluZGV4KTt0aGlzLmluZGV4PXRoaXMueGhyLnJlc3BvbnNlLmxlbmd0aDt2YXIgdD1wKGUpO3RoaXMub3B0aW9ucy5vbkNodW5rKHQpfSxlLnByb3RvdHlwZS5vbkxvYWRFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIlhIUi5vbkxvYWRFdmVudFwiKSx0aGlzLm9wdGlvbnMub25FbmQoKX0sZS5wcm90b3R5cGUub25TdGF0ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIlhIUi5vblN0YXRlQ2hhbmdlXCIsdGhpcy54aHIucmVhZHlTdGF0ZSksdGhpcy54aHIucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQmJnRoaXMub3B0aW9ucy5vbkhlYWRlcnMobmV3IHMuTWV0YWRhdGEodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHRoaXMueGhyLnN0YXR1cyl9LGUucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMueGhyLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5tZXRhZGF0YT1lO3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLnhocj1yLHIub3BlbihcIlBPU1RcIix0aGlzLm9wdGlvbnMudXJsKSx0aGlzLmNvbmZpZ3VyZVhocigpLHRoaXMubWV0YWRhdGEuZm9yRWFjaChmdW5jdGlvbihlLHQpe3Iuc2V0UmVxdWVzdEhlYWRlcihlLHQuam9pbihcIiwgXCIpKX0pLHIud2l0aENyZWRlbnRpYWxzPUJvb2xlYW4odGhpcy5pbml0LndpdGhDcmVkZW50aWFscyksci5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLHRoaXMub25Qcm9ncmVzc0V2ZW50LmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRlbmRcIix0aGlzLm9uTG9hZEV2ZW50LmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsZnVuY3Rpb24oZSl7dC5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiWEhSLmVycm9yXCIsZSksdC5vcHRpb25zLm9uRW5kKGUuZXJyb3IpfSl9LGUucHJvdG90eXBlLmNvbmZpZ3VyZVhocj1mdW5jdGlvbigpe3RoaXMueGhyLnJlc3BvbnNlVHlwZT1cInRleHRcIix0aGlzLnhoci5vdmVycmlkZU1pbWVUeXBlKFwidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZFwiKX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiWEhSLmFib3J0XCIpLHRoaXMueGhyLmFib3J0KCl9LGV9KCk7dC5YSFI9dTt2YXIgZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmNvbmZpZ3VyZVhocj1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIk1velhIUi5jb25maWd1cmVYaHI6IHNldHRpbmcgcmVzcG9uc2VUeXBlIHRvICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcidcIiksdGhpcy54aHIucmVzcG9uc2VUeXBlPVwibW96LWNodW5rZWQtYXJyYXlidWZmZXJcIn0sdC5wcm90b3R5cGUub25Qcm9ncmVzc0V2ZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54aHIucmVzcG9uc2U7dGhpcy5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiTW96WEhSLm9uUHJvZ3Jlc3NFdmVudDogXCIsbmV3IFVpbnQ4QXJyYXkoZSkpLHRoaXMub3B0aW9ucy5vbkNodW5rKG5ldyBVaW50OEFycmF5KGUpKX0sdH0odSk7ZnVuY3Rpb24gYyhlLHQpe3ZhciByPWUuY2hhckNvZGVBdCh0KTtpZihyPj01NTI5NiYmcjw9NTYzMTkpe3ZhciBuPWUuY2hhckNvZGVBdCh0KzEpO24+PTU2MzIwJiZuPD01NzM0MyYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsobi01NjMyMCkpfXJldHVybiByfWZ1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSxyPTAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0P2UuY29kZVBvaW50QXQobik6YyhlLG4pO3RbcisrXT0yNTUmb31yZXR1cm4gdH10Lk1vekNodW5rZWRBcnJheUJ1ZmZlclhIUj1kLHQuc3RyaW5nVG9BcnJheUJ1ZmZlcj1wfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG4sbz1yKDApLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIDk9PT1lfHwxMD09PWV8fDEzPT09ZX07ZnVuY3Rpb24gaShlKXtyZXR1cm4gcyhlKXx8ZT49MzImJmU8PTEyNn1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD0wO3QhPT1lLmxlbmd0aDsrK3QpaWYoIWkoZVt0XSkpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgaXMgbm90IHZhbGlkIChwcmludGFibGUpIEFTQ0lJXCIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gMTI4PT0oMTI4JmUuZ2V0VWludDgoMCkpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUuZ2V0VWludDMyKDEsITEpfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBlLmJ5dGVMZW5ndGgtdD49cn1mdW5jdGlvbiBwKGUsdCxyKXtpZihlLnNsaWNlKXJldHVybiBlLnNsaWNlKHQscik7dmFyIG49ZS5sZW5ndGg7dm9pZCAwIT09ciYmKG49cik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KG4tdCkscz0wLGk9dDtpPG47aSsrKW9bcysrXT1lW2ldO3JldHVybiBvfXQuZGVjb2RlQVNDSUk9YSx0LmVuY29kZUFTQ0lJPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCkscj0wO3IhPT1lLmxlbmd0aDsrK3Ipe3ZhciBuPWUuY2hhckNvZGVBdChyKTtpZighaShuKSl0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBjb250YWlucyBpbnZhbGlkIEFTQ0lJXCIpO3Rbcl09bn1yZXR1cm4gdH0sZnVuY3Rpb24oZSl7ZVtlLk1FU1NBR0U9MV09XCJNRVNTQUdFXCIsZVtlLlRSQUlMRVJTPTJdPVwiVFJBSUxFUlNcIn0obj10LkNodW5rVHlwZXx8KHQuQ2h1bmtUeXBlPXt9KSk7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5idWZmZXI9bnVsbCx0aGlzLnBvc2l0aW9uPTB9cmV0dXJuIGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7aWYoMD09PWUubGVuZ3RoJiZ0KXJldHVybltdO3ZhciByLHM9W107aWYobnVsbD09dGhpcy5idWZmZXIpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZSBpZih0aGlzLnBvc2l0aW9uPT09dGhpcy5idWZmZXIuYnl0ZUxlbmd0aCl0aGlzLmJ1ZmZlcj1lLHRoaXMucG9zaXRpb249MDtlbHNle3ZhciBpPXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtdGhpcy5wb3NpdGlvbixoPW5ldyBVaW50OEFycmF5KGkrZS5ieXRlTGVuZ3RoKSxmPXAodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbik7aC5zZXQoZiwwKTt2YXIgbD1uZXcgVWludDhBcnJheShlKTtoLnNldChsLGkpLHRoaXMuYnVmZmVyPWgsdGhpcy5wb3NpdGlvbj0wfWZvcig7Oyl7aWYoIWModGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1KSlyZXR1cm4gczt2YXIgZz1wKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sdGhpcy5wb3NpdGlvbis1KSxiPW5ldyBEYXRhVmlldyhnLmJ1ZmZlcixnLmJ5dGVPZmZzZXQsZy5ieXRlTGVuZ3RoKSx5PWQoYik7aWYoIWModGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1K3kpKXJldHVybiBzO3ZhciB2PXAodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbis1LHRoaXMucG9zaXRpb24rNSt5KTtpZih0aGlzLnBvc2l0aW9uKz01K3ksdShiKSlyZXR1cm4gcy5wdXNoKHtjaHVua1R5cGU6bi5UUkFJTEVSUyx0cmFpbGVyczoocj12LG5ldyBvLk1ldGFkYXRhKGEocikpKX0pLHM7cy5wdXNoKHtjaHVua1R5cGU6bi5NRVNTQUdFLGRhdGE6dn0pfX0sZX0oKTt0LkNodW5rUGFyc2VyPWh9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuT0s9MF09XCJPS1wiLGVbZS5DYW5jZWxlZD0xXT1cIkNhbmNlbGVkXCIsZVtlLlVua25vd249Ml09XCJVbmtub3duXCIsZVtlLkludmFsaWRBcmd1bWVudD0zXT1cIkludmFsaWRBcmd1bWVudFwiLGVbZS5EZWFkbGluZUV4Y2VlZGVkPTRdPVwiRGVhZGxpbmVFeGNlZWRlZFwiLGVbZS5Ob3RGb3VuZD01XT1cIk5vdEZvdW5kXCIsZVtlLkFscmVhZHlFeGlzdHM9Nl09XCJBbHJlYWR5RXhpc3RzXCIsZVtlLlBlcm1pc3Npb25EZW5pZWQ9N109XCJQZXJtaXNzaW9uRGVuaWVkXCIsZVtlLlJlc291cmNlRXhoYXVzdGVkPThdPVwiUmVzb3VyY2VFeGhhdXN0ZWRcIixlW2UuRmFpbGVkUHJlY29uZGl0aW9uPTldPVwiRmFpbGVkUHJlY29uZGl0aW9uXCIsZVtlLkFib3J0ZWQ9MTBdPVwiQWJvcnRlZFwiLGVbZS5PdXRPZlJhbmdlPTExXT1cIk91dE9mUmFuZ2VcIixlW2UuVW5pbXBsZW1lbnRlZD0xMl09XCJVbmltcGxlbWVudGVkXCIsZVtlLkludGVybmFsPTEzXT1cIkludGVybmFsXCIsZVtlLlVuYXZhaWxhYmxlPTE0XT1cIlVuYXZhaWxhYmxlXCIsZVtlLkRhdGFMb3NzPTE1XT1cIkRhdGFMb3NzXCIsZVtlLlVuYXV0aGVudGljYXRlZD0xNl09XCJVbmF1dGhlbnRpY2F0ZWRcIn0obj10LkNvZGV8fCh0LkNvZGU9e30pKSx0Lmh0dHBTdGF0dXNUb0NvZGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gbi5JbnRlcm5hbDtjYXNlIDIwMDpyZXR1cm4gbi5PSztjYXNlIDQwMDpyZXR1cm4gbi5JbnZhbGlkQXJndW1lbnQ7Y2FzZSA0MDE6cmV0dXJuIG4uVW5hdXRoZW50aWNhdGVkO2Nhc2UgNDAzOnJldHVybiBuLlBlcm1pc3Npb25EZW5pZWQ7Y2FzZSA0MDQ6cmV0dXJuIG4uTm90Rm91bmQ7Y2FzZSA0MDk6cmV0dXJuIG4uQWJvcnRlZDtjYXNlIDQxMjpyZXR1cm4gbi5GYWlsZWRQcmVjb25kaXRpb247Y2FzZSA0Mjk6cmV0dXJuIG4uUmVzb3VyY2VFeGhhdXN0ZWQ7Y2FzZSA0OTk6cmV0dXJuIG4uQ2FuY2VsZWQ7Y2FzZSA1MDA6cmV0dXJuIG4uVW5rbm93bjtjYXNlIDUwMTpyZXR1cm4gbi5VbmltcGxlbWVudGVkO2Nhc2UgNTAzOnJldHVybiBuLlVuYXZhaWxhYmxlO2Nhc2UgNTA0OnJldHVybiBuLkRlYWRsaW5lRXhjZWVkZWQ7ZGVmYXVsdDpyZXR1cm4gbi5Vbmtub3dufX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDMpLG89cig0KSxzPXIoNiksaT1yKDEyKSxhPXIoNyksdT1yKDUpLGQ9cig5KSxjPXIoMTMpLHA9cigxNSksaD1yKDIpOyFmdW5jdGlvbihlKXtlLnNldERlZmF1bHRUcmFuc3BvcnQ9by5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeSxlLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9dS5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0LGUuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1zLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQsZS5YaHJUcmFuc3BvcnQ9YS5YaHJUcmFuc3BvcnQsZS5XZWJzb2NrZXRUcmFuc3BvcnQ9aS5XZWJzb2NrZXRUcmFuc3BvcnQsZS5Db2RlPWQuQ29kZSxlLk1ldGFkYXRhPW4uQnJvd3NlckhlYWRlcnMsZS5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaC5jbGllbnQoZSx0KX0sZS5pbnZva2U9Yy5pbnZva2UsZS51bmFyeT1wLnVuYXJ5fSh0LmdycGN8fCh0LmdycGM9e30pKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuO2Z1bmN0aW9uIG8oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO2lmKFhNTEh0dHBSZXF1ZXN0KXtuPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7bi5vcGVuKFwiR0VUXCIsXCJodHRwczovL2xvY2FsaG9zdFwiKX1jYXRjaChlKXt9fXJldHVybiBufWZ1bmN0aW9uIHMoZSl7dmFyIHQ9bygpO2lmKCF0KXJldHVybiExO3RyeXtyZXR1cm4gdC5yZXNwb25zZVR5cGU9ZSx0LnJlc3BvbnNlVHlwZT09PWV9Y2F0Y2goZSl7fXJldHVybiExfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9cyx0LmRldGVjdE1velhIUlN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJnMoXCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwiKX0sdC5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwib3ZlcnJpZGVNaW1lVHlwZVwiKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbixvPXIoMSkscz1yKDgpOyFmdW5jdGlvbihlKXtlW2UuRklOSVNIX1NFTkQ9MV09XCJGSU5JU0hfU0VORFwifShufHwobj17fSkpO3ZhciBpPW5ldyBVaW50OEFycmF5KFsxXSk7dC5XZWJzb2NrZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuZGVidWcmJm8uZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0XCIsZSk7dmFyIHQscj1mdW5jdGlvbihlKXtpZihcImh0dHBzOi8vXCI9PT1lLnN1YnN0cigwLDgpKXJldHVyblwid3NzOi8vXCIrZS5zdWJzdHIoOCk7aWYoXCJodHRwOi8vXCI9PT1lLnN1YnN0cigwLDcpKXJldHVyblwid3M6Ly9cIitlLnN1YnN0cig3KTt0aHJvdyBuZXcgRXJyb3IoXCJXZWJzb2NrZXQgdHJhbnNwb3J0IGNvbnN0cnVjdGVkIHdpdGggbm9uLWh0dHBzOi8vIG9yIGh0dHA6Ly8gaG9zdC5cIil9KGUudXJsKSxhPVtdO2Z1bmN0aW9uIHUoZSl7aWYoZT09PW4uRklOSVNIX1NFTkQpdC5zZW5kKGkpO2Vsc2V7dmFyIHI9ZSxvPW5ldyBJbnQ4QXJyYXkoci5ieXRlTGVuZ3RoKzEpO28uc2V0KG5ldyBVaW50OEFycmF5KFswXSkpLG8uc2V0KHIsMSksdC5zZW5kKG8pfX1yZXR1cm57c2VuZE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP3UoZSk6YS5wdXNoKGUpfSxmaW5pc2hTZW5kOmZ1bmN0aW9uKCl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP3Uobi5GSU5JU0hfU0VORCk6YS5wdXNoKG4uRklOSVNIX1NFTkQpfSxzdGFydDpmdW5jdGlvbihuKXsodD1uZXcgV2ViU29ja2V0KHIsW1wiZ3JwYy13ZWJzb2NrZXRzXCJdKSkuYmluYXJ5VHlwZT1cImFycmF5YnVmZmVyXCIsdC5vbm9wZW49ZnVuY3Rpb24oKXt2YXIgcjtlLmRlYnVnJiZvLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbm9wZW5cIiksdC5zZW5kKChyPVwiXCIsbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7cis9ZStcIjogXCIrdC5qb2luKFwiLCBcIikrXCJcXHJcXG5cIn0pLHMuZW5jb2RlQVNDSUkocikpKSxhLmZvckVhY2goZnVuY3Rpb24oZSl7dShlKX0pfSx0Lm9uY2xvc2U9ZnVuY3Rpb24odCl7ZS5kZWJ1ZyYmby5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3Qub25jbG9zZVwiLHQpLGUub25FbmQoKX0sdC5vbmVycm9yPWZ1bmN0aW9uKHQpe2UuZGVidWcmJm8uZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uZXJyb3JcIix0KX0sdC5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7ZS5vbkNodW5rKG5ldyBVaW50OEFycmF5KHQuZGF0YSkpfX0sY2FuY2VsOmZ1bmN0aW9uKCl7ZS5kZWJ1ZyYmby5kZWJ1ZyhcIndlYnNvY2tldC5hYm9ydFwiKSx0LmNsb3NlKCl9fX0oZSl9fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMik7dC5pbnZva2U9ZnVuY3Rpb24oZSx0KXtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLmludm9rZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIHI9bi5jbGllbnQoZSx7aG9zdDp0Lmhvc3QsdHJhbnNwb3J0OnQudHJhbnNwb3J0LGRlYnVnOnQuZGVidWd9KTtyZXR1cm4gdC5vbkhlYWRlcnMmJnIub25IZWFkZXJzKHQub25IZWFkZXJzKSx0Lm9uTWVzc2FnZSYmci5vbk1lc3NhZ2UodC5vbk1lc3NhZ2UpLHQub25FbmQmJnIub25FbmQodC5vbkVuZCksci5zdGFydCh0Lm1ldGFkYXRhKSxyLnNlbmQodC5yZXF1ZXN0KSxyLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXtyLmNsb3NlKCl9fX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmZyYW1lUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNlcmlhbGl6ZUJpbmFyeSgpLHI9bmV3IEFycmF5QnVmZmVyKHQuYnl0ZUxlbmd0aCs1KTtyZXR1cm4gbmV3IERhdGFWaWV3KHIsMSw0KS5zZXRVaW50MzIoMCx0Lmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkociw1KS5zZXQodCksbmV3IFVpbnQ4QXJyYXkocil9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cigwKSxvPXIoMik7dC51bmFyeT1mdW5jdGlvbihlLHQpe2lmKGUucmVzcG9uc2VTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLnVuYXJ5IGNhbm5vdCBiZSB1c2VkIHdpdGggc2VydmVyLXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmludm9rZSBvciAuY2xpZW50IGluc3RlYWQuXCIpO2lmKGUucmVxdWVzdFN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIudW5hcnkgY2Fubm90IGJlIHVzZWQgd2l0aCBjbGllbnQtc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuY2xpZW50IGluc3RlYWQuXCIpO3ZhciByPW51bGwscz1udWxsLGk9by5jbGllbnQoZSx7aG9zdDp0Lmhvc3QsdHJhbnNwb3J0OnQudHJhbnNwb3J0LGRlYnVnOnQuZGVidWd9KTtyZXR1cm4gaS5vbkhlYWRlcnMoZnVuY3Rpb24oZSl7cj1lfSksaS5vbk1lc3NhZ2UoZnVuY3Rpb24oZSl7cz1lfSksaS5vbkVuZChmdW5jdGlvbihlLG8saSl7dC5vbkVuZCh7c3RhdHVzOmUsc3RhdHVzTWVzc2FnZTpvLGhlYWRlcnM6cnx8bmV3IG4uTWV0YWRhdGEsbWVzc2FnZTpzLHRyYWlsZXJzOml9KX0pLGkuc3RhcnQodC5tZXRhZGF0YSksaS5zZW5kKHQucmVxdWVzdCksaS5maW5pc2hTZW5kKCkse2Nsb3NlOmZ1bmN0aW9uKCl7aS5jbG9zZSgpfX19fV0pfSk7IiwiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5ycGM9dCgpOmUucnBjPXQoKX0od2luZG93LChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBvKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgbj10W3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxvKSxuLmw9ITAsbi5leHBvcnRzfXJldHVybiBvLm09ZSxvLmM9dCxvLmQ9ZnVuY3Rpb24oZSx0LHIpe28ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpyfSl9LG8ucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxvLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW8oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihvLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpby5kKHIsbixmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG4pKTtyZXR1cm4gcn0sby5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBvLmQodCxcImFcIix0KSx0fSxvLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG8ucD1cIlwiLG8oby5zPTgpfShbZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGZ1bmN0aW9uKGdsb2JhbCxCdWZmZXIpe3ZhciAkanNjb21wPSRqc2NvbXB8fHt9OyRqc2NvbXAuc2NvcGU9e30sJGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oZSx0LG8pe2UgaW5zdGFuY2VvZiBTdHJpbmcmJihlPVN0cmluZyhlKSk7Zm9yKHZhciByPWUubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT1lW25dO2lmKHQuY2FsbChvLGksbixlKSlyZXR1cm57aTpuLHY6aX19cmV0dXJue2k6LTEsdjp2b2lkIDB9fSwkanNjb21wLkFTU1VNRV9FUzU9ITEsJGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMSwkanNjb21wLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExLCRqc2NvbXAuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMSwkanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGUsdCxvKXtlIT1BcnJheS5wcm90b3R5cGUmJmUhPU9iamVjdC5wcm90b3R5cGUmJihlW3RdPW8udmFsdWUpfSwkanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihlKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1lP2U6dm9pZCAwIT09Z2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmV9LCRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpLCRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oZSx0LG8scil7aWYodCl7Zm9yKG89JGpzY29tcC5nbG9iYWwsZT1lLnNwbGl0KFwiLlwiKSxyPTA7cjxlLmxlbmd0aC0xO3IrKyl7dmFyIG49ZVtyXTtuIGluIG98fChvW25dPXt9KSxvPW9bbl19KHQ9dChyPW9bZT1lW2UubGVuZ3RoLTFdXSkpIT1yJiZudWxsIT10JiYkanNjb21wLmRlZmluZVByb3BlcnR5KG8sZSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KX19LCRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4XCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGUsdCkuaX19KSxcImVzNlwiLFwiZXMzXCIpLCRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLlwiK28rXCIgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7aWYodCBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5cIitvK1wiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uXCIpO3JldHVybiBlK1wiXCJ9LCRqc2NvbXAucG9seWZpbGwoXCJTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3ZhciBvPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsZSxcImVuZHNXaXRoXCIpO2UrPVwiXCIsdm9pZCAwPT09dCYmKHQ9by5sZW5ndGgpLHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigwfHQsby5sZW5ndGgpKTtmb3IodmFyIHI9ZS5sZW5ndGg7MDxyJiYwPHQ7KWlmKG9bLS10XSE9ZVstLXJdKXJldHVybiExO3JldHVybiAwPj1yfX0pLFwiZXM2XCIsXCJlczNcIiksJGpzY29tcC5wb2x5ZmlsbChcIkFycmF5LnByb3RvdHlwZS5maW5kXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGUsdCkudn19KSxcImVzNlwiLFwiZXMzXCIpLCRqc2NvbXAucG9seWZpbGwoXCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGhcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG89JGpzY29tcC5jaGVja1N0cmluZ0FyZ3ModGhpcyxlLFwic3RhcnRzV2l0aFwiKTtlKz1cIlwiO3ZhciByPW8ubGVuZ3RoLG49ZS5sZW5ndGg7dD1NYXRoLm1heCgwLE1hdGgubWluKDB8dCxvLmxlbmd0aCkpO2Zvcih2YXIgaT0wO2k8biYmdDxyOylpZihvW3QrK10hPWVbaSsrXSlyZXR1cm4hMTtyZXR1cm4gaT49bn19KSxcImVzNlwiLFwiZXMzXCIpLCRqc2NvbXAucG9seWZpbGwoXCJTdHJpbmcucHJvdG90eXBlLnJlcGVhdFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9JGpzY29tcC5jaGVja1N0cmluZ0FyZ3ModGhpcyxudWxsLFwicmVwZWF0XCIpO2lmKDA+ZXx8MTM0MjE3NzI3OTxlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBjb3VudCB2YWx1ZVwiKTtlfD0wO2Zvcih2YXIgbz1cIlwiO2U7KTEmZSYmKG8rPXQpLChlPj4+PTEpJiYodCs9dCk7cmV0dXJuIG99fSksXCJlczZcIixcImVzM1wiKTt2YXIgQ09NUElMRUQ9ITAsZ29vZz1nb29nfHx7fTtnb29nLmdsb2JhbD10aGlzfHxzZWxmLGdvb2cuaXNEZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LGdvb2cuaXNTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9LGdvb2cuaXNCb29sZWFuPWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZX0sZ29vZy5pc051bWJlcj1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZX0sZ29vZy5leHBvcnRQYXRoXz1mdW5jdGlvbihlLHQsbyl7ZT1lLnNwbGl0KFwiLlwiKSxvPW98fGdvb2cuZ2xvYmFsLGVbMF1pbiBvfHx2b2lkIDA9PT1vLmV4ZWNTY3JpcHR8fG8uZXhlY1NjcmlwdChcInZhciBcIitlWzBdKTtmb3IodmFyIHI7ZS5sZW5ndGgmJihyPWUuc2hpZnQoKSk7KSFlLmxlbmd0aCYmZ29vZy5pc0RlZih0KT9vW3JdPXQ6bz1vW3JdJiZvW3JdIT09T2JqZWN0LnByb3RvdHlwZVtyXT9vW3JdOm9bcl09e319LGdvb2cuZGVmaW5lPWZ1bmN0aW9uKGUsdCl7aWYoIUNPTVBJTEVEKXt2YXIgbz1nb29nLmdsb2JhbC5DTE9TVVJFX1VOQ09NUElMRURfREVGSU5FUyxyPWdvb2cuZ2xvYmFsLkNMT1NVUkVfREVGSU5FUztvJiZ2b2lkIDA9PT1vLm5vZGVUeXBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxlKT90PW9bZV06ciYmdm9pZCAwPT09ci5ub2RlVHlwZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSkmJih0PXJbZV0pfXJldHVybiB0fSxnb29nLkZFQVRVUkVTRVRfWUVBUj0yMDEyLGdvb2cuREVCVUc9ITAsZ29vZy5MT0NBTEU9XCJlblwiLGdvb2cuVFJVU1RFRF9TSVRFPSEwLGdvb2cuU1RSSUNUX01PREVfQ09NUEFUSUJMRT0hMSxnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFPUNPTVBJTEVEJiYhZ29vZy5ERUJVRyxnb29nLkVOQUJMRV9DSFJPTUVfQVBQX1NBRkVfU0NSSVBUX0xPQURJTkc9ITEsZ29vZy5wcm92aWRlPWZ1bmN0aW9uKGUpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cucHJvdmlkZSBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gYSBtb2R1bGUuXCIpO2lmKCFDT01QSUxFRCYmZ29vZy5pc1Byb3ZpZGVkXyhlKSl0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJytlKydcIiBhbHJlYWR5IGRlY2xhcmVkLicpO2dvb2cuY29uc3RydWN0TmFtZXNwYWNlXyhlKX0sZ29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfPWZ1bmN0aW9uKGUsdCl7aWYoIUNPTVBJTEVEKXtkZWxldGUgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2VdO2Zvcih2YXIgbz1lOyhvPW8uc3Vic3RyaW5nKDAsby5sYXN0SW5kZXhPZihcIi5cIikpKSYmIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKG8pOylnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bb109ITB9Z29vZy5leHBvcnRQYXRoXyhlLHQpfSxnb29nLmdldFNjcmlwdE5vbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlIT1nb29nLmdsb2JhbD9nb29nLmdldFNjcmlwdE5vbmNlXyhlLmRvY3VtZW50KToobnVsbD09PWdvb2cuY3NwTm9uY2VfJiYoZ29vZy5jc3BOb25jZV89Z29vZy5nZXRTY3JpcHROb25jZV8oZ29vZy5nbG9iYWwuZG9jdW1lbnQpKSxnb29nLmNzcE5vbmNlXyl9LGdvb2cuTk9OQ0VfUEFUVEVSTl89L15bXFx3Ky9fLV0rWz1dezAsMn0kLyxnb29nLmNzcE5vbmNlXz1udWxsLGdvb2cuZ2V0U2NyaXB0Tm9uY2VfPWZ1bmN0aW9uKGUpe3JldHVybihlPWUucXVlcnlTZWxlY3RvciYmZS5xdWVyeVNlbGVjdG9yKFwic2NyaXB0W25vbmNlXVwiKSkmJihlPWUubm9uY2V8fGUuZ2V0QXR0cmlidXRlKFwibm9uY2VcIikpJiZnb29nLk5PTkNFX1BBVFRFUk5fLnRlc3QoZSk/ZTpcIlwifSxnb29nLlZBTElEX01PRFVMRV9SRV89L15bYS16QS1aXyRdW2EtekEtWjAtOS5fJF0qJC8sZ29vZy5tb2R1bGU9ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaXNTdHJpbmcoZSl8fCFlfHwtMT09ZS5zZWFyY2goZ29vZy5WQUxJRF9NT0RVTEVfUkVfKSl0aHJvdyBFcnJvcihcIkludmFsaWQgbW9kdWxlIGlkZW50aWZpZXJcIik7aWYoIWdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJNb2R1bGUgXCIrZStcIiBoYXMgYmVlbiBsb2FkZWQgaW5jb3JyZWN0bHkuIE5vdGUsIG1vZHVsZXMgY2Fubm90IGJlIGxvYWRlZCBhcyBub3JtYWwgc2NyaXB0cy4gVGhleSByZXF1aXJlIHNvbWUga2luZCBvZiBwcmUtcHJvY2Vzc2luZyBzdGVwLiBZb3UncmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIGEgbW9kdWxlIHZpYSBhIHNjcmlwdCB0YWcgb3IgYXMgYSBwYXJ0IG9mIGEgY29uY2F0ZW5hdGVkIGJ1bmRsZSB3aXRob3V0IHJld3JpdGluZyB0aGUgbW9kdWxlLiBGb3IgbW9yZSBpbmZvIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvd2lraS9nb29nLm1vZHVsZTotYW4tRVM2LW1vZHVsZS1saWtlLWFsdGVybmF0aXZlLXRvLWdvb2cucHJvdmlkZS5cIik7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZSl0aHJvdyBFcnJvcihcImdvb2cubW9kdWxlIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBtb2R1bGUuXCIpO2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWU9ZSwhQ09NUElMRUQpe2lmKGdvb2cuaXNQcm92aWRlZF8oZSkpdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicrZSsnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtkZWxldGUgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2VdfX0sZ29vZy5tb2R1bGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF8oZSl9LGdvb2cubW9kdWxlLmdldEludGVybmFsXz1mdW5jdGlvbihlKXtpZighQ09NUElMRUQpe2lmKGUgaW4gZ29vZy5sb2FkZWRNb2R1bGVzXylyZXR1cm4gZ29vZy5sb2FkZWRNb2R1bGVzX1tlXS5leHBvcnRzO2lmKCFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bZV0pcmV0dXJuIG51bGwhPShlPWdvb2cuZ2V0T2JqZWN0QnlOYW1lKGUpKT9lOm51bGx9cmV0dXJuIG51bGx9LGdvb2cuTW9kdWxlVHlwZT17RVM2OlwiZXM2XCIsR09PRzpcImdvb2dcIn0sZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbCxnb29nLmlzSW5Nb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfKCl8fGdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl8oKX0sZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl89ZnVuY3Rpb24oKXtyZXR1cm4hIWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy50eXBlPT1nb29nLk1vZHVsZVR5cGUuR09PR30sZ29vZy5pc0luRXM2TW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy50eXBlPT1nb29nLk1vZHVsZVR5cGUuRVM2KXJldHVybiEwO3ZhciBlPWdvb2cuZ2xvYmFsLiRqc2NvbXA7cmV0dXJuISFlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXRDdXJyZW50TW9kdWxlUGF0aCYmISFlLmdldEN1cnJlbnRNb2R1bGVQYXRoKCkpfSxnb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlPWZ1bmN0aW9uKCl7aWYoIUNPTVBJTEVEJiYhZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2UgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBnb29nLm1vZHVsZVwiKTtpZighQ09NUElMRUQmJiFnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZS5cIik7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8uZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT0hMH0sZ29vZy5kZWNsYXJlTW9kdWxlSWQ9ZnVuY3Rpb24oZSl7aWYoIUNPTVBJTEVEKXtpZighZ29vZy5pc0luRXM2TW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5kZWNsYXJlTW9kdWxlSWQgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIEVTNiBtb2R1bGVcIik7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8mJmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLmRlY2xhcmVNb2R1bGVJZCBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlLlwiKTtpZihlIGluIGdvb2cubG9hZGVkTW9kdWxlc18pdGhyb3cgRXJyb3IoJ01vZHVsZSB3aXRoIG5hbWVzcGFjZSBcIicrZSsnXCIgYWxyZWFkeSBleGlzdHMuJyl9aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8pZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZT1lO2Vsc2V7dmFyIHQ9Z29vZy5nbG9iYWwuJGpzY29tcDtpZighdHx8XCJmdW5jdGlvblwiIT10eXBlb2YgdC5nZXRDdXJyZW50TW9kdWxlUGF0aCl0aHJvdyBFcnJvcignTW9kdWxlIHdpdGggbmFtZXNwYWNlIFwiJytlKydcIiBoYXMgYmVlbiBsb2FkZWQgaW5jb3JyZWN0bHkuJyk7dD10LnJlcXVpcmUodC5nZXRDdXJyZW50TW9kdWxlUGF0aCgpKSxnb29nLmxvYWRlZE1vZHVsZXNfW2VdPXtleHBvcnRzOnQsdHlwZTpnb29nLk1vZHVsZVR5cGUuRVM2LG1vZHVsZUlkOmV9fX0sZ29vZy5zZXRUZXN0T25seT1mdW5jdGlvbihlKXtpZihnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFKXRocm93IGU9ZXx8XCJcIixFcnJvcihcIkltcG9ydGluZyB0ZXN0LW9ubHkgY29kZSBpbnRvIG5vbi1kZWJ1ZyBlbnZpcm9ubWVudFwiKyhlP1wiOiBcIitlOlwiLlwiKSl9LGdvb2cuZm9yd2FyZERlY2xhcmU9ZnVuY3Rpb24oZSl7fSxDT01QSUxFRHx8KGdvb2cuaXNQcm92aWRlZF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gZ29vZy5sb2FkZWRNb2R1bGVzX3x8IWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXSYmZ29vZy5pc0RlZkFuZE5vdE51bGwoZ29vZy5nZXRPYmplY3RCeU5hbWUoZSkpfSxnb29nLmltcGxpY2l0TmFtZXNwYWNlc189e1wiZ29vZy5tb2R1bGVcIjohMH0pLGdvb2cuZ2V0T2JqZWN0QnlOYW1lPWZ1bmN0aW9uKGUsdCl7ZT1lLnNwbGl0KFwiLlwiKSx0PXR8fGdvb2cuZ2xvYmFsO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKHQ9dFtlW29dXSwhZ29vZy5pc0RlZkFuZE5vdE51bGwodCkpcmV0dXJuIG51bGw7cmV0dXJuIHR9LGdvb2cuZ2xvYmFsaXplPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQ9dHx8Z29vZy5nbG9iYWwsZSl0W29dPWVbb119LGdvb2cuYWRkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyKXshQ09NUElMRUQmJmdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQmJmdvb2cuZGVidWdMb2FkZXJfLmFkZERlcGVuZGVuY3koZSx0LG8scil9LGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUj0hMCxnb29nLmxvZ1RvQ29uc29sZV89ZnVuY3Rpb24oZSl7Z29vZy5nbG9iYWwuY29uc29sZSYmZ29vZy5nbG9iYWwuY29uc29sZS5lcnJvcihlKX0sZ29vZy5yZXF1aXJlPWZ1bmN0aW9uKGUpe2lmKCFDT01QSUxFRCl7aWYoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSJiZnb29nLmRlYnVnTG9hZGVyXy5yZXF1ZXN0ZWQoZSksZ29vZy5pc1Byb3ZpZGVkXyhlKSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXJldHVybiBnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF8oZSl9ZWxzZSBpZihnb29nLkVOQUJMRV9ERUJVR19MT0FERVIpe3ZhciB0PWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGw7dHJ5e2dvb2cuZGVidWdMb2FkZXJfLmxvYWRfKGUpfWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89dH19cmV0dXJuIG51bGx9fSxnb29nLnJlcXVpcmVUeXBlPWZ1bmN0aW9uKGUpe3JldHVybnt9fSxnb29nLmJhc2VQYXRoPVwiXCIsZ29vZy5udWxsRnVuY3Rpb249ZnVuY3Rpb24oKXt9LGdvb2cuYWJzdHJhY3RNZXRob2Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcInVuaW1wbGVtZW50ZWQgYWJzdHJhY3QgbWV0aG9kXCIpfSxnb29nLmFkZFNpbmdsZXRvbkdldHRlcj1mdW5jdGlvbihlKXtlLmluc3RhbmNlXz12b2lkIDAsZS5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBlLmluc3RhbmNlXz9lLmluc3RhbmNlXzooZ29vZy5ERUJVRyYmKGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc19bZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXy5sZW5ndGhdPWUpLGUuaW5zdGFuY2VfPW5ldyBlKX19LGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc189W10sZ29vZy5MT0FEX01PRFVMRV9VU0lOR19FVkFMPSEwLGdvb2cuU0VBTF9NT0RVTEVfRVhQT1JUUz1nb29nLkRFQlVHLGdvb2cubG9hZGVkTW9kdWxlc189e30sZ29vZy5ERVBFTkRFTkNJRVNfRU5BQkxFRD0hQ09NUElMRUQmJmdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUixnb29nLlRSQU5TUElMRT1cImRldGVjdFwiLGdvb2cuQVNTVU1FX0VTX01PRFVMRVNfVFJBTlNQSUxFRD0hMSxnb29nLlRSQU5TUElMRV9UT19MQU5HVUFHRT1cIlwiLGdvb2cuVFJBTlNQSUxFUj1cInRyYW5zcGlsZS5qc1wiLGdvb2cuaGFzQmFkTGV0U2NvcGluZz1udWxsLGdvb2cudXNlU2FmYXJpMTBXb3JrYXJvdW5kPWZ1bmN0aW9uKCl7aWYobnVsbD09Z29vZy5oYXNCYWRMZXRTY29waW5nKXt0cnl7dmFyIGE9IWV2YWwoJ1widXNlIHN0cmljdFwiO2xldCB4ID0gMTsgZnVuY3Rpb24gZigpIHsgcmV0dXJuIHR5cGVvZiB4OyB9O2YoKSA9PSBcIm51bWJlclwiOycpfWNhdGNoKGUpe2E9ITF9Z29vZy5oYXNCYWRMZXRTY29waW5nPWF9cmV0dXJuIGdvb2cuaGFzQmFkTGV0U2NvcGluZ30sZ29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnPWZ1bmN0aW9uKGUpe3JldHVyblwiKGZ1bmN0aW9uKCl7XCIrZStcIlxcbjt9KSgpO1xcblwifSxnb29nLmxvYWRNb2R1bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV87dHJ5e2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXttb2R1bGVOYW1lOlwiXCIsZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZTohMSx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HfSxnb29nLmlzRnVuY3Rpb24oZSkpdmFyIG89ZS5jYWxsKHZvaWQgMCx7fSk7ZWxzZXtpZighZ29vZy5pc1N0cmluZyhlKSl0aHJvdyBFcnJvcihcIkludmFsaWQgbW9kdWxlIGRlZmluaXRpb25cIik7Z29vZy51c2VTYWZhcmkxMFdvcmthcm91bmQoKSYmKGU9Z29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnKGUpKSxvPWdvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfLmNhbGwodm9pZCAwLGUpfXZhciByPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWU7aWYoIWdvb2cuaXNTdHJpbmcocil8fCFyKXRocm93IEVycm9yKCdJbnZhbGlkIG1vZHVsZSBuYW1lIFwiJytyKydcIicpO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2U/Z29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfKHIsbyk6Z29vZy5TRUFMX01PRFVMRV9FWFBPUlRTJiZPYmplY3Quc2VhbCYmXCJvYmplY3RcIj09dHlwZW9mIG8mJm51bGwhPW8mJk9iamVjdC5zZWFsKG8pLGdvb2cubG9hZGVkTW9kdWxlc19bcl09e2V4cG9ydHM6byx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9fWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89dH19LGdvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfPWZ1bmN0aW9uKGEpe3JldHVybiBldmFsKGEpLHt9fSxnb29nLm5vcm1hbGl6ZVBhdGhfPWZ1bmN0aW9uKGUpe2U9ZS5zcGxpdChcIi9cIik7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDspXCIuXCI9PWVbdF0/ZS5zcGxpY2UodCwxKTp0JiZcIi4uXCI9PWVbdF0mJmVbdC0xXSYmXCIuLlwiIT1lW3QtMV0/ZS5zcGxpY2UoLS10LDIpOnQrKztyZXR1cm4gZS5qb2luKFwiL1wiKX0sZ29vZy5sb2FkRmlsZVN5bmNfPWZ1bmN0aW9uKGUpe2lmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfTE9BRF9GSUxFX1NZTkMpcmV0dXJuIGdvb2cuZ2xvYmFsLkNMT1NVUkVfTE9BRF9GSUxFX1NZTkMoZSk7dHJ5e3ZhciB0PW5ldyBnb29nLmdsb2JhbC5YTUxIdHRwUmVxdWVzdDtyZXR1cm4gdC5vcGVuKFwiZ2V0XCIsZSwhMSksdC5zZW5kKCksMD09dC5zdGF0dXN8fDIwMD09dC5zdGF0dXM/dC5yZXNwb25zZVRleHQ6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGdvb2cudHJhbnNwaWxlXz1mdW5jdGlvbihlLHQsbyl7dmFyIHI9Z29vZy5nbG9iYWwuJGpzY29tcDtyfHwoZ29vZy5nbG9iYWwuJGpzY29tcD1yPXt9KTt2YXIgbj1yLnRyYW5zcGlsZTtpZighbil7dmFyIGk9Z29vZy5iYXNlUGF0aCtnb29nLlRSQU5TUElMRVIscz1nb29nLmxvYWRGaWxlU3luY18oaSk7aWYocyl7aWYoZnVuY3Rpb24oKXsoMCxldmFsKShzK1wiXFxuLy8jIHNvdXJjZVVSTD1cIitpKX0uY2FsbChnb29nLmdsb2JhbCksZ29vZy5nbG9iYWwuJGd3dEV4cG9ydCYmZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wJiYhZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wLnRyYW5zcGlsZSl0aHJvdyBFcnJvcignVGhlIHRyYW5zcGlsZXIgZGlkIG5vdCBwcm9wZXJseSBleHBvcnQgdGhlIFwidHJhbnNwaWxlXCIgbWV0aG9kLiAkZ3d0RXhwb3J0OiAnK0pTT04uc3RyaW5naWZ5KGdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQpKTtnb29nLmdsb2JhbC4kanNjb21wLnRyYW5zcGlsZT1nb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAudHJhbnNwaWxlLG49KHI9Z29vZy5nbG9iYWwuJGpzY29tcCkudHJhbnNwaWxlfX1yZXR1cm4gbnx8KG49ci50cmFuc3BpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5sb2dUb0NvbnNvbGVfKHQrXCIgcmVxdWlyZXMgdHJhbnNwaWxhdGlvbiBidXQgbm8gdHJhbnNwaWxlciB3YXMgZm91bmQuXCIpLGV9KSxuKGUsdCxvKX0sZ29vZy50eXBlT2Y9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGU7aWYoXCJvYmplY3RcIj09dCl7aWYoIWUpcmV0dXJuXCJudWxsXCI7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXJldHVyblwiYXJyYXlcIjtpZihlIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiB0O3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtpZihcIltvYmplY3QgV2luZG93XVwiPT1vKXJldHVyblwib2JqZWN0XCI7aWYoXCJbb2JqZWN0IEFycmF5XVwiPT1vfHxcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgmJnZvaWQgMCE9PWUuc3BsaWNlJiZ2b2lkIDAhPT1lLnByb3BlcnR5SXNFbnVtZXJhYmxlJiYhZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShcInNwbGljZVwiKSlyZXR1cm5cImFycmF5XCI7aWYoXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT1vfHx2b2lkIDAhPT1lLmNhbGwmJnZvaWQgMCE9PWUucHJvcGVydHlJc0VudW1lcmFibGUmJiFlLnByb3BlcnR5SXNFbnVtZXJhYmxlKFwiY2FsbFwiKSlyZXR1cm5cImZ1bmN0aW9uXCJ9ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXQmJnZvaWQgMD09PWUuY2FsbClyZXR1cm5cIm9iamVjdFwiO3JldHVybiB0fSxnb29nLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LGdvb2cuaXNEZWZBbmROb3ROdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lfSxnb29nLmlzQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJhcnJheVwiPT1nb29nLnR5cGVPZihlKX0sZ29vZy5pc0FycmF5TGlrZT1mdW5jdGlvbihlKXt2YXIgdD1nb29nLnR5cGVPZihlKTtyZXR1cm5cImFycmF5XCI9PXR8fFwib2JqZWN0XCI9PXQmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aH0sZ29vZy5pc0RhdGVMaWtlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmlzT2JqZWN0KGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldEZ1bGxZZWFyfSxnb29nLmlzRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT1nb29nLnR5cGVPZihlKX0sZ29vZy5pc09iamVjdD1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm5cIm9iamVjdFwiPT10JiZudWxsIT1lfHxcImZ1bmN0aW9uXCI9PXR9LGdvb2cuZ2V0VWlkPWZ1bmN0aW9uKGUpe3JldHVybiBlW2dvb2cuVUlEX1BST1BFUlRZX118fChlW2dvb2cuVUlEX1BST1BFUlRZX109Kytnb29nLnVpZENvdW50ZXJfKX0sZ29vZy5oYXNVaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuISFlW2dvb2cuVUlEX1BST1BFUlRZX119LGdvb2cucmVtb3ZlVWlkPWZ1bmN0aW9uKGUpe251bGwhPT1lJiZcInJlbW92ZUF0dHJpYnV0ZVwiaW4gZSYmZS5yZW1vdmVBdHRyaWJ1dGUoZ29vZy5VSURfUFJPUEVSVFlfKTt0cnl7ZGVsZXRlIGVbZ29vZy5VSURfUFJPUEVSVFlfXX1jYXRjaChlKXt9fSxnb29nLlVJRF9QUk9QRVJUWV89XCJjbG9zdXJlX3VpZF9cIisoMWU5Kk1hdGgucmFuZG9tKCk+Pj4wKSxnb29nLnVpZENvdW50ZXJfPTAsZ29vZy5nZXRIYXNoQ29kZT1nb29nLmdldFVpZCxnb29nLnJlbW92ZUhhc2hDb2RlPWdvb2cucmVtb3ZlVWlkLGdvb2cuY2xvbmVPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy50eXBlT2YoZSk7aWYoXCJvYmplY3RcIj09dHx8XCJhcnJheVwiPT10KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNsb25lKXJldHVybiBlLmNsb25lKCk7Zm9yKHZhciBvIGluIHQ9XCJhcnJheVwiPT10P1tdOnt9LGUpdFtvXT1nb29nLmNsb25lT2JqZWN0KGVbb10pO3JldHVybiB0fXJldHVybiBlfSxnb29nLmJpbmROYXRpdmVfPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZS5jYWxsLmFwcGx5KGUuYmluZCxhcmd1bWVudHMpfSxnb29nLmJpbmRKc189ZnVuY3Rpb24oZSx0LG8pe2lmKCFlKXRocm93IEVycm9yKCk7aWYoMjxhcmd1bWVudHMubGVuZ3RoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkobyxyKSxlLmFwcGx5KHQsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19LGdvb2cuYmluZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/Z29vZy5iaW5kPWdvb2cuYmluZE5hdGl2ZV86Z29vZy5iaW5kPWdvb2cuYmluZEpzXyxnb29nLmJpbmQuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxnb29nLnBhcnRpYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9by5zbGljZSgpO3JldHVybiB0LnB1c2guYXBwbHkodCxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyx0KX19LGdvb2cubWl4aW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdCllW29dPXRbb119LGdvb2cubm93PWdvb2cuVFJVU1RFRF9TSVRFJiZEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LGdvb2cuZ2xvYmFsRXZhbD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5leGVjU2NyaXB0KWdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQoZSxcIkphdmFTY3JpcHRcIik7ZWxzZXtpZighZ29vZy5nbG9iYWwuZXZhbCl0aHJvdyBFcnJvcihcImdvb2cuZ2xvYmFsRXZhbCBub3QgYXZhaWxhYmxlXCIpO2lmKG51bGw9PWdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pe3RyeXtnb29nLmdsb2JhbC5ldmFsKFwidmFyIF9ldmFsVGVzdF8gPSAxO1wiKX1jYXRjaChlKXt9aWYodm9pZCAwIT09Z29vZy5nbG9iYWwuX2V2YWxUZXN0Xyl7dHJ5e2RlbGV0ZSBnb29nLmdsb2JhbC5fZXZhbFRlc3RffWNhdGNoKGUpe31nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPSEwfWVsc2UgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz0hMX1pZihnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfKWdvb2cuZ2xvYmFsLmV2YWwoZSk7ZWxzZXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudCxvPXQuY3JlYXRlRWxlbWVudChcIlNDUklQVFwiKTtvLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIixvLmRlZmVyPSExLG8uYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShlKSksdC5oZWFkLmFwcGVuZENoaWxkKG8pLHQuaGVhZC5yZW1vdmVDaGlsZChvKX19fSxnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPW51bGwsZ29vZy5nZXRDc3NOYW1lPWZ1bmN0aW9uKGUsdCl7aWYoXCIuXCI9PVN0cmluZyhlKS5jaGFyQXQoMCkpdGhyb3cgRXJyb3IoJ2NsYXNzTmFtZSBwYXNzZWQgaW4gZ29vZy5nZXRDc3NOYW1lIG11c3Qgbm90IHN0YXJ0IHdpdGggXCIuXCIuIFlvdSBwYXNzZWQ6ICcrZSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2VdfHxlfSxyPWZ1bmN0aW9uKGUpe2U9ZS5zcGxpdChcIi1cIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2gobyhlW3JdKSk7cmV0dXJuIHQuam9pbihcIi1cIil9O3JldHVybiByPWdvb2cuY3NzTmFtZU1hcHBpbmdfP1wiQllfV0hPTEVcIj09Z29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXz9vOnI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGU9dD9lK1wiLVwiK3IodCk6cihlKSxnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTj9nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTihlKTplfSxnb29nLnNldENzc05hbWVNYXBwaW5nPWZ1bmN0aW9uKGUsdCl7Z29vZy5jc3NOYW1lTWFwcGluZ189ZSxnb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfPXR9LCFDT01QSUxFRCYmZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HJiYoZ29vZy5jc3NOYW1lTWFwcGluZ189Z29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HKSxnb29nLmdldE1zZz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG8mJm8uaHRtbCYmKGU9ZS5yZXBsYWNlKC88L2csXCImbHQ7XCIpKSx0JiYoZT1lLnJlcGxhY2UoL1xce1xcJChbXn1dKyl9L2csKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG51bGwhPXQmJm8gaW4gdD90W29dOmV9KSkpLGV9LGdvb2cuZ2V0TXNnV2l0aEZhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LGdvb2cuZXhwb3J0U3ltYm9sPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmV4cG9ydFBhdGhfKGUsdCxvKX0sZ29vZy5leHBvcnRQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbyl7ZVt0XT1vfSxnb29nLmluaGVyaXRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe31vLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnN1cGVyQ2xhc3NfPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBvLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5iYXNlPWZ1bmN0aW9uKGUsbyxyKXtmb3IodmFyIG49QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0yKSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3JldHVybiB0LnByb3RvdHlwZVtvXS5hcHBseShlLG4pfX0sZ29vZy5iYXNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1hcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtpZihnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEV8fGdvb2cuREVCVUcmJiFyKXRocm93IEVycm9yKFwiYXJndW1lbnRzLmNhbGxlciBub3QgZGVmaW5lZC4gIGdvb2cuYmFzZSgpIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RyaWN0IG1vZGUgY29kZS4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy1DXCIpO2lmKHZvaWQgMCE9PXIuc3VwZXJDbGFzc18pe2Zvcih2YXIgbj1BcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIHIuc3VwZXJDbGFzc18uY29uc3RydWN0b3IuYXBwbHkoZSxuKX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCYmXCJzeW1ib2xcIiE9dHlwZW9mIHQpdGhyb3cgRXJyb3IoXCJtZXRob2QgbmFtZXMgcHJvdmlkZWQgdG8gZ29vZy5iYXNlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xcIik7Zm9yKG49QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0yKSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO2k9ITE7Zm9yKHZhciBzPWUuY29uc3RydWN0b3IucHJvdG90eXBlO3M7cz1PYmplY3QuZ2V0UHJvdG90eXBlT2YocykpaWYoc1t0XT09PXIpaT0hMDtlbHNlIGlmKGkpcmV0dXJuIHNbdF0uYXBwbHkoZSxuKTtpZihlW3RdPT09cilyZXR1cm4gZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbdF0uYXBwbHkoZSxuKTt0aHJvdyBFcnJvcihcImdvb2cuYmFzZSBjYWxsZWQgZnJvbSBhIG1ldGhvZCBvZiBvbmUgbmFtZSB0byBhIG1ldGhvZCBvZiBhIGRpZmZlcmVudCBuYW1lXCIpfSxnb29nLnNjb3BlPWZ1bmN0aW9uKGUpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cuc2NvcGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoaW4gYSBtb2R1bGUuXCIpO2UuY2FsbChnb29nLmdsb2JhbCl9LENPTVBJTEVEfHwoZ29vZy5nbG9iYWwuQ09NUElMRUQ9Q09NUElMRUQpLGdvb2cuZGVmaW5lQ2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbz10LmNvbnN0cnVjdG9yLHI9dC5zdGF0aWNzO3JldHVybiBvJiZvIT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yfHwobz1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwiY2Fubm90IGluc3RhbnRpYXRlIGFuIGludGVyZmFjZSAobm8gY29uc3RydWN0b3IgZGVmaW5lZCkuXCIpfSksbz1nb29nLmRlZmluZUNsYXNzLmNyZWF0ZVNlYWxpbmdDb25zdHJ1Y3Rvcl8obyxlKSxlJiZnb29nLmluaGVyaXRzKG8sZSksZGVsZXRlIHQuY29uc3RydWN0b3IsZGVsZXRlIHQuc3RhdGljcyxnb29nLmRlZmluZUNsYXNzLmFwcGx5UHJvcGVydGllc18oby5wcm90b3R5cGUsdCksbnVsbCE9ciYmKHIgaW5zdGFuY2VvZiBGdW5jdGlvbj9yKG8pOmdvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXyhvLHIpKSxvfSxnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTPWdvb2cuREVCVUcsZ29vZy5kZWZpbmVDbGFzcy5jcmVhdGVTZWFsaW5nQ29uc3RydWN0b3JfPWZ1bmN0aW9uKGUsdCl7aWYoIWdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVMpcmV0dXJuIGU7dmFyIG89IWdvb2cuZGVmaW5lQ2xhc3MuaXNVbnNlYWxhYmxlXyh0KSxyPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHRbZ29vZy5VSURfUFJPUEVSVFlfXT10W2dvb2cuVUlEX1BST1BFUlRZX10sdGhpcy5jb25zdHJ1Y3Rvcj09PXImJm8mJk9iamVjdC5zZWFsIGluc3RhbmNlb2YgRnVuY3Rpb24mJk9iamVjdC5zZWFsKHQpLHR9O3JldHVybiByfSxnb29nLmRlZmluZUNsYXNzLmlzVW5zZWFsYWJsZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUucHJvdG90eXBlJiZlLnByb3RvdHlwZVtnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfXX0sZ29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU189XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIiksZ29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO2Zvcih2YXIgcj0wO3I8Z29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU18ubGVuZ3RoO3IrKylvPWdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfW3JdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKX0sZ29vZy50YWdVbnNlYWxhYmxlQ2xhc3M9ZnVuY3Rpb24oZSl7IUNPTVBJTEVEJiZnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTJiYoZS5wcm90b3R5cGVbZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZX109ITApfSxnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfPVwiZ29vZ19kZWZpbmVDbGFzc19sZWdhY3lfdW5zZWFsYWJsZVwiLCFDT01QSUxFRCYmZ29vZy5ERVBFTkRFTkNJRVNfRU5BQkxFRCYmKGdvb2cuaW5IdG1sRG9jdW1lbnRfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIG51bGwhPWUmJlwid3JpdGVcImluIGV9LGdvb2cuaXNEb2N1bWVudExvYWRpbmdfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIGUuYXR0YWNoRXZlbnQ/XCJjb21wbGV0ZVwiIT1lLnJlYWR5U3RhdGU6XCJsb2FkaW5nXCI9PWUucmVhZHlTdGF0ZX0sZ29vZy5maW5kQmFzZVBhdGhfPWZ1bmN0aW9uKCl7aWYoZ29vZy5pc0RlZihnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkmJmdvb2cuaXNTdHJpbmcoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpKWdvb2cuYmFzZVBhdGg9Z29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEg7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudCx0PWUuY3VycmVudFNjcmlwdDtmb3IodD0oZT10P1t0XTplLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiU0NSSVBUXCIpKS5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIG89ZVt0XS5zcmMscj1vLmxhc3RJbmRleE9mKFwiP1wiKTtpZihyPS0xPT1yP28ubGVuZ3RoOnIsXCJiYXNlLmpzXCI9PW8uc3Vic3RyKHItNyw3KSl7Z29vZy5iYXNlUGF0aD1vLnN1YnN0cigwLHItNyk7YnJlYWt9fX19LGdvb2cuZmluZEJhc2VQYXRoXygpLGdvb2cuVHJhbnNwaWxlcj1mdW5jdGlvbigpe3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1udWxsLHRoaXMudHJhbnNwaWxhdGlvblRhcmdldF89Z29vZy5UUkFOU1BJTEVfVE9fTEFOR1VBR0V9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCxvKXtlP2RbdF09ITA6bygpPyhjPXQsZFt0XT0hMSk6ZT1kW3RdPSEwfWZ1bmN0aW9uIGIoYSl7dHJ5e3JldHVybiEhZXZhbChhKX1jYXRjaChlKXtyZXR1cm4hMX19dmFyIGM9XCJlczNcIixkPXtlczM6ITF9LGU9ITEsZj1nb29nLmdsb2JhbC5uYXZpZ2F0b3ImJmdvb2cuZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ/Z29vZy5nbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudDpcIlwiO3JldHVybiBhKFwiZXM1XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJbMSxdLmxlbmd0aD09MVwiKX0pKSxhKFwiZXM2XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIWYubWF0Y2goL0VkZ2VcXC8oXFxkKykoXFwuXFxkKSovaSkmJmIoJygoKT0+e1widXNlIHN0cmljdFwiO2NsYXNzIFh7Y29uc3RydWN0b3IoKXtpZihuZXcudGFyZ2V0IT1TdHJpbmcpdGhyb3cgMTt0aGlzLng9NDJ9fWxldCBxPVJlZmxlY3QuY29uc3RydWN0KFgsW10sU3RyaW5nKTtpZihxLnghPTQyfHwhKHEgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IDE7Zm9yKGNvbnN0IGEgb2ZbMiwzXSl7aWYoYT09Miljb250aW51ZTtmdW5jdGlvbiBmKHo9e2F9KXtsZXQgYT0wO3JldHVybiB6LmF9e2Z1bmN0aW9uIGYoKXtyZXR1cm4gMDt9fXJldHVybiBmKCk9PTN9fSkoKScpfSkpLGEoXCJlczdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcIjIgKiogMiA9PSA0XCIpfSkpLGEoXCJlczhcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcImFzeW5jICgpID0+IDEsIHRydWVcIil9KSksYShcImVzOVwiLChmdW5jdGlvbigpe3JldHVybiBiKFwiKHsuLi5yZXN0fSA9IHt9KSwgdHJ1ZVwiKX0pKSxhKFwiZXNfbmV4dFwiLChmdW5jdGlvbigpe3JldHVybiExfSkpLHt0YXJnZXQ6YyxtYXA6ZH19LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUubmVlZHNUcmFuc3BpbGU9ZnVuY3Rpb24oZSx0KXtpZihcImFsd2F5c1wiPT1nb29nLlRSQU5TUElMRSlyZXR1cm4hMDtpZihcIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFKXJldHVybiExO2lmKCF0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl8pe3ZhciBvPXRoaXMuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXygpO3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1vLm1hcCx0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfPXRoaXMudHJhbnNwaWxhdGlvblRhcmdldF98fG8udGFyZ2V0fWlmKGUgaW4gdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fKXJldHVybiEhdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fW2VdfHwhKCFnb29nLmluSHRtbERvY3VtZW50XygpfHxcImVzNlwiIT10fHxcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKTt0aHJvdyBFcnJvcihcIlVua25vd24gbGFuZ3VhZ2UgbW9kZTogXCIrZSl9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUudHJhbnNwaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cudHJhbnNwaWxlXyhlLHQsdGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0Xyl9LGdvb2cudHJhbnNwaWxlcl89bmV3IGdvb2cuVHJhbnNwaWxlcixnb29nLnByb3RlY3RTY3JpcHRUYWdfPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLzxcXC8oU0NSSVBUKS9naSxcIlxcXFx4M2MvJDFcIil9LGdvb2cuRGVidWdMb2FkZXJfPWZ1bmN0aW9uKCl7dGhpcy5kZXBlbmRlbmNpZXNfPXt9LHRoaXMuaWRUb1BhdGhfPXt9LHRoaXMud3JpdHRlbl89e30sdGhpcy5sb2FkaW5nRGVwc189W10sdGhpcy5kZXBzVG9Mb2FkXz1bXSx0aGlzLnBhdXNlZF89ITEsdGhpcy5mYWN0b3J5Xz1uZXcgZ29vZy5EZXBlbmRlbmN5RmFjdG9yeShnb29nLnRyYW5zcGlsZXJfKSx0aGlzLmRlZmVycmVkQ2FsbGJhY2tzXz17fSx0aGlzLmRlZmVycmVkUXVldWVfPVtdfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYm9vdHN0cmFwPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe3ImJihnb29nLmdsb2JhbC5zZXRUaW1lb3V0KHIsMCkscj1udWxsKX12YXIgcj10O2lmKGUubGVuZ3RoKXt0PVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT10aGlzLmdldFBhdGhGcm9tRGVwc18oZVtuXSk7aWYoIWkpdGhyb3cgRXJyb3IoXCJVbnJlZ29uaXplZCBuYW1lc3BhY2U6IFwiK2Vbbl0pO3QucHVzaCh0aGlzLmRlcGVuZGVuY2llc19baV0pfWk9Z29vZy5yZXF1aXJlO3ZhciBzPTA7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpKGVbbl0pLHRbbl0ub25Mb2FkKChmdW5jdGlvbigpeysrcz09ZS5sZW5ndGgmJm8oKX0pKX1lbHNlIG8oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRDbG9zdXJlRGVwcz1mdW5jdGlvbigpe3RoaXMuZGVwc1RvTG9hZF8ucHVzaCh0aGlzLmZhY3RvcnlfLmNyZWF0ZURlcGVuZGVuY3koZ29vZy5ub3JtYWxpemVQYXRoXyhnb29nLmJhc2VQYXRoK1wiZGVwcy5qc1wiKSxcImRlcHMuanNcIixbXSxbXSx7fSwhMSkpLHRoaXMubG9hZERlcHNfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5yZXF1ZXN0ZWQ9ZnVuY3Rpb24oZSx0KXsoZT10aGlzLmdldFBhdGhGcm9tRGVwc18oZSkpJiYodHx8dGhpcy5hcmVEZXBzTG9hZGVkXyh0aGlzLmRlcGVuZGVuY2llc19bZV0ucmVxdWlyZXMpKSYmKHQ9dGhpcy5kZWZlcnJlZENhbGxiYWNrc19bZV0pJiYoZGVsZXRlIHRoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2VdLHQoKSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5zZXREZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihlKXt0aGlzLmZhY3RvcnlfPWV9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkXz1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRQYXRoRnJvbURlcHNfKGUpKXRocm93IGU9XCJnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6IFwiK2UsZ29vZy5sb2dUb0NvbnNvbGVfKGUpLEVycm9yKGUpO3ZhciB0PXRoaXMsbz1bXSxyPWZ1bmN0aW9uKGUpe3ZhciBuPXQuZ2V0UGF0aEZyb21EZXBzXyhlKTtpZighbil0aHJvdyBFcnJvcihcIkJhZCBkZXBlbmRlbmN5IHBhdGggb3Igc3ltYm9sOiBcIitlKTtpZighdC53cml0dGVuX1tuXSl7Zm9yKHQud3JpdHRlbl9bbl09ITAsZT10LmRlcGVuZGVuY2llc19bbl0sbj0wO248ZS5yZXF1aXJlcy5sZW5ndGg7bisrKWdvb2cuaXNQcm92aWRlZF8oZS5yZXF1aXJlc1tuXSl8fHIoZS5yZXF1aXJlc1tuXSk7by5wdXNoKGUpfX07cihlKSxlPSEhdGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgsdGhpcy5kZXBzVG9Mb2FkXz10aGlzLmRlcHNUb0xvYWRfLmNvbmNhdChvKSx0aGlzLnBhdXNlZF98fGV8fHRoaXMubG9hZERlcHNfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkRGVwc189ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PXRoaXMucGF1c2VkXzt0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aCYmIXQ7KSFmdW5jdGlvbigpe3ZhciBvPSExLHI9ZS5kZXBzVG9Mb2FkXy5zaGlmdCgpLG49ITE7ZS5sb2FkaW5nXyhyKTt2YXIgaT17cGF1c2U6ZnVuY3Rpb24oKXtpZihvKXRocm93IEVycm9yKFwiQ2Fubm90IGNhbGwgcGF1c2UgYWZ0ZXIgdGhlIGNhbGwgdG8gbG9hZC5cIik7dD0hMH0scmVzdW1lOmZ1bmN0aW9uKCl7bz9lLnJlc3VtZV8oKTp0PSExfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZihuKXRocm93IEVycm9yKFwiRG91YmxlIGNhbGwgdG8gbG9hZGVkLlwiKTtuPSEwLGUubG9hZGVkXyhyKX0scGVuZGluZzpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxvYWRpbmdEZXBzXy5sZW5ndGg7bysrKXQucHVzaChlLmxvYWRpbmdEZXBzX1tvXSk7cmV0dXJuIHR9LHNldE1vZHVsZVN0YXRlOmZ1bmN0aW9uKGUpe2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXt0eXBlOmUsbW9kdWxlTmFtZTpcIlwiLGRlY2xhcmVMZWdhY3lOYW1lc3BhY2U6ITF9fSxyZWdpc3RlckVzNk1vZHVsZUV4cG9ydHM6ZnVuY3Rpb24oZSx0LG8pe28mJihnb29nLmxvYWRlZE1vZHVsZXNfW29dPXtleHBvcnRzOnQsdHlwZTpnb29nLk1vZHVsZVR5cGUuRVM2LG1vZHVsZUlkOm98fFwiXCJ9KX0scmVnaXN0ZXJHb29nTW9kdWxlRXhwb3J0czpmdW5jdGlvbihlLHQpe2dvb2cubG9hZGVkTW9kdWxlc19bZV09e2V4cG9ydHM6dCx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmV9fSxjbGVhck1vZHVsZVN0YXRlOmZ1bmN0aW9uKCl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbH0sZGVmZXI6ZnVuY3Rpb24odCl7aWYobyl0aHJvdyBFcnJvcihcIkNhbm5vdCByZWdpc3RlciB3aXRoIGRlZmVyIGFmdGVyIHRoZSBjYWxsIHRvIGxvYWQuXCIpO2UuZGVmZXJfKHIsdCl9LGFyZURlcHNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcmVEZXBzTG9hZGVkXyhyLnJlcXVpcmVzKX19O3RyeXtyLmxvYWQoaSl9ZmluYWxseXtvPSEwfX0oKTt0JiZ0aGlzLnBhdXNlXygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucGF1c2VfPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWRfPSEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucmVzdW1lXz1mdW5jdGlvbigpe3RoaXMucGF1c2VkXyYmKHRoaXMucGF1c2VkXz0hMSx0aGlzLmxvYWREZXBzXygpKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRpbmdfPWZ1bmN0aW9uKGUpe3RoaXMubG9hZGluZ0RlcHNfLnB1c2goZSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkZWRfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sb2FkaW5nRGVwc18ubGVuZ3RoO3QrKylpZih0aGlzLmxvYWRpbmdEZXBzX1t0XT09ZSl7dGhpcy5sb2FkaW5nRGVwc18uc3BsaWNlKHQsMSk7YnJlYWt9Zm9yKHQ9MDt0PHRoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoO3QrKylpZih0aGlzLmRlZmVycmVkUXVldWVfW3RdPT1lLnBhdGgpe3RoaXMuZGVmZXJyZWRRdWV1ZV8uc3BsaWNlKHQsMSk7YnJlYWt9aWYodGhpcy5sb2FkaW5nRGVwc18ubGVuZ3RoPT10aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aCYmIXRoaXMuZGVwc1RvTG9hZF8ubGVuZ3RoKWZvcig7dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGg7KXRoaXMucmVxdWVzdGVkKHRoaXMuZGVmZXJyZWRRdWV1ZV8uc2hpZnQoKSwhMCk7ZS5sb2FkZWQoKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmFyZURlcHNMb2FkZWRfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbz10aGlzLmdldFBhdGhGcm9tRGVwc18oZVt0XSk7aWYoIW98fCEobyBpbiB0aGlzLmRlZmVycmVkQ2FsbGJhY2tzXykmJiFnb29nLmlzUHJvdmlkZWRfKGVbdF0pKXJldHVybiExfXJldHVybiEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuZ2V0UGF0aEZyb21EZXBzXz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLmlkVG9QYXRoXz90aGlzLmlkVG9QYXRoX1tlXTplIGluIHRoaXMuZGVwZW5kZW5jaWVzXz9lOm51bGx9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5kZWZlcl89ZnVuY3Rpb24oZSx0KXt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1tlLnBhdGhdPXQsdGhpcy5kZWZlcnJlZFF1ZXVlXy5wdXNoKGUucGF0aCl9LGdvb2cuTG9hZENvbnRyb2xsZXI9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucGVuZGluZz1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzPWZ1bmN0aW9uKGUsdCxvKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnNldE1vZHVsZVN0YXRlPWZ1bmN0aW9uKGUpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuY2xlYXJNb2R1bGVTdGF0ZT1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuZGVmZXI9ZnVuY3Rpb24oZSl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5hcmVEZXBzTG9hZGVkPWZ1bmN0aW9uKCl7fSxnb29nLkRlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXt0aGlzLnBhdGg9ZSx0aGlzLnJlbGF0aXZlUGF0aD10LHRoaXMucHJvdmlkZXM9byx0aGlzLnJlcXVpcmVzPXIsdGhpcy5sb2FkRmxhZ3M9bix0aGlzLmxvYWRlZF89ITEsdGhpcy5sb2FkQ2FsbGJhY2tzXz1bXX0sZ29vZy5EZXBlbmRlbmN5LnByb3RvdHlwZS5nZXRQYXRoTmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGF0aCx0PWUuaW5kZXhPZihcIjovL1wiKTtyZXR1cm4gMDw9dCYmKDA8PSh0PShlPWUuc3Vic3RyaW5nKHQrMykpLmluZGV4T2YoXCIvXCIpKSYmKGU9ZS5zdWJzdHJpbmcodCsxKSkpLGV9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUub25Mb2FkPWZ1bmN0aW9uKGUpe3RoaXMubG9hZGVkXz9lKCk6dGhpcy5sb2FkQ2FsbGJhY2tzXy5wdXNoKGUpfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3RoaXMubG9hZGVkXz0hMDt2YXIgZT10aGlzLmxvYWRDYWxsYmFja3NfO3RoaXMubG9hZENhbGxiYWNrc189W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfSxnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSExLGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF89e30sZ29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzIpO3JldHVybiBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW3RdPWUsdH0sZ29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja189ZnVuY3Rpb24oZSl7ZGVsZXRlIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF9bZV19LGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja189ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwXykpdGhyb3cgRXJyb3IoXCJDYWxsYmFjayBrZXkgXCIrZStcIiBkb2VzIG5vdCBleGlzdCAod2FzIGJhc2UuanMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlPykuXCIpO2Zvcih2YXIgbz1nb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2VdLHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspci5wdXNoKGFyZ3VtZW50c1tuXSk7by5hcHBseSh2b2lkIDAscil9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/ZS5sb2FkZWQoKTplLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudDtpZihcImNvbXBsZXRlXCI9PXQucmVhZHlTdGF0ZSYmIWdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORyl7aWYoL1xcYmRlcHMuanMkLy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuIHZvaWQgZS5sb2FkZWQoKTt0aHJvdyBFcnJvcignQ2Fubm90IHdyaXRlIFwiJyt0aGlzLnBhdGgrJ1wiIGFmdGVyIGRvY3VtZW50IGxvYWQnKX1pZighZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HJiZnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpKXt2YXIgbz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKHQpe2dvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJlwiY29tcGxldGVcIiE9dC5yZWFkeVN0YXRlfHwoZ29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18obyksZS5sb2FkZWQoKSl9KSkscj0hZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5nZXRTY3JpcHROb25jZSgpPycgbm9uY2U9XCInK2dvb2cuZ2V0U2NyaXB0Tm9uY2UoKSsnXCInOlwiXCI7cj0nPHNjcmlwdCBzcmM9XCInK3RoaXMucGF0aCsnXCIgJysoZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXz9cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiOlwib25sb2FkXCIpK1wiPVxcXCJnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKCdcIitvKydcXCcsIHRoaXMpXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiICcrKGdvb2cuRGVwZW5kZW5jeS5kZWZlcl8/XCJkZWZlclwiOlwiXCIpK3IrXCI+PFxcL3NjcmlwdD5cIix0LndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwocik6cil9ZWxzZXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5kZWZlcj1nb29nLkRlcGVuZGVuY3kuZGVmZXJfLG4uYXN5bmM9ITEsbi50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIsKHI9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmbi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHIpLGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8/KGUucGF1c2UoKSxuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1wibG9hZGVkXCIhPW4ucmVhZHlTdGF0ZSYmXCJjb21wbGV0ZVwiIT1uLnJlYWR5U3RhdGV8fChlLmxvYWRlZCgpLGUucmVzdW1lKCkpfSk6bi5vbmxvYWQ9ZnVuY3Rpb24oKXtuLm9ubG9hZD1udWxsLGUubG9hZGVkKCl9LG4uc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTCh0aGlzLnBhdGgpOnRoaXMucGF0aCx0LmhlYWQuYXBwZW5kQ2hpbGQobil9fWVsc2UgZ29vZy5sb2dUb0NvbnNvbGVfKFwiQ2Fubm90IHVzZSBkZWZhdWx0IGRlYnVnIGxvYWRlciBvdXRzaWRlIG9mIEhUTUwgZG9jdW1lbnRzLlwiKSxcImRlcHMuanNcIj09dGhpcy5yZWxhdGl2ZVBhdGg/KGdvb2cubG9nVG9Db25zb2xlXyhcIkNvbnNpZGVyIHNldHRpbmcgQ0xPU1VSRV9JTVBPUlRfU0NSSVBUIGJlZm9yZSBsb2FkaW5nIGJhc2UuanMsIG9yIHNldHRpbmcgQ0xPU1VSRV9OT19ERVBTIHRvIHRydWUuXCIpLGUubG9hZGVkKCkpOmUucGF1c2UoKX0sZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIsbil7Z29vZy5EZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pfSxnb29nLmluaGVyaXRzKGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/ZS5sb2FkZWQoKTplLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudCxvPXRoaXM7aWYoZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSl7dmFyIHI9ZnVuY3Rpb24oZSxvKXtlPW8/JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luPicrbytcIjxcXC9zY3JpcHQ+XCI6JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luIHNyYz1cIicrZSsnXCI+PFxcL3NjcmlwdD4nLHQud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChlKTplKX07Z29vZy5EZXBlbmRlbmN5LmRlZmVyXz0hMH1lbHNlIHI9ZnVuY3Rpb24oZSxvKXt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7ci5kZWZlcj0hMCxyLmFzeW5jPSExLHIudHlwZT1cIm1vZHVsZVwiLHIuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwhMCk7dmFyIG49Z29vZy5nZXRTY3JpcHROb25jZSgpO24mJnIuc2V0QXR0cmlidXRlKFwibm9uY2VcIixuKSxvP3IudGV4dENvbnRlbnQ9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlU2NyaXB0KG8pOm86ci5zcmM9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlU2NyaXB0VVJMKGUpOmUsdC5oZWFkLmFwcGVuZENoaWxkKHIpfTt2YXIgbj1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKCl7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18obiksZS5zZXRNb2R1bGVTdGF0ZShnb29nLk1vZHVsZVR5cGUuRVM2KX0pKTtyKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicrbisnXCIpJykscih0aGlzLnBhdGgsdm9pZCAwKTt2YXIgaT1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKHQpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKGkpLGUucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzKG8ucGF0aCx0LGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpfSkpO3Iodm9pZCAwLCdpbXBvcnQgKiBhcyBtIGZyb20gXCInK3RoaXMucGF0aCsnXCI7IGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK2krJ1wiLCBtKScpO3ZhciBzPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXygoZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhzKSxlLmNsZWFyTW9kdWxlU3RhdGUoKSxlLmxvYWRlZCgpfSkpO3Iodm9pZCAwLCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytzKydcIiknKX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksZS5wYXVzZSgpfSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKSx0aGlzLmNvbnRlbnRzXz1udWxsLHRoaXMubGF6eUZldGNoXz0hZ29vZy5pbkh0bWxEb2N1bWVudF8oKXx8IShcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKX0sZ29vZy5pbmhlcml0cyhnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyLmNvbnRlbnRzXz1nb29nLmxvYWRGaWxlU3luY18oci5wYXRoKSxyLmNvbnRlbnRzXyYmKHIuY29udGVudHNfPXIudHJhbnNmb3JtKHIuY29udGVudHNfKSxyLmNvbnRlbnRzXyYmKHIuY29udGVudHNfKz1cIlxcbi8vIyBzb3VyY2VVUkw9XCIrci5wYXRoKSl9ZnVuY3Rpb24gbygpe2lmKHIubGF6eUZldGNoXyYmdCgpLHIuY29udGVudHNfKXtuJiZlLnNldE1vZHVsZVN0YXRlKGdvb2cuTW9kdWxlVHlwZS5FUzYpO3RyeXt2YXIgbz1yLmNvbnRlbnRzXztpZihyLmNvbnRlbnRzXz1udWxsLGdvb2cuZ2xvYmFsRXZhbChvKSxuKXZhciBpPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9ZmluYWxseXtuJiZlLmNsZWFyTW9kdWxlU3RhdGUoKX1uJiZnb29nLmdsb2JhbC4kanNjb21wLnJlcXVpcmUuZW5zdXJlKFtyLmdldFBhdGhOYW1lKCldLChmdW5jdGlvbigpe2UucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzKHIucGF0aCxnb29nLmdsb2JhbC4kanNjb21wLnJlcXVpcmUoci5nZXRQYXRoTmFtZSgpKSxpKX0pKSxlLmxvYWRlZCgpfX12YXIgcj10aGlzO2lmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCl0KCksdGhpcy5jb250ZW50c18mJmdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVChcIlwiLHRoaXMuY29udGVudHNfKT8odGhpcy5jb250ZW50c189bnVsbCxlLmxvYWRlZCgpKTplLnBhdXNlKCk7ZWxzZXt2YXIgbj10aGlzLmxvYWRGbGFncy5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5FUzY7dGhpcy5sYXp5RmV0Y2hffHx0KCk7dmFyIGk9MTxlLnBlbmRpbmcoKS5sZW5ndGgscz1pJiZnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfO2lmKGk9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXyYmKGl8fGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpLHN8fGkpZS5kZWZlcigoZnVuY3Rpb24oKXtvKCl9KSk7ZWxzZXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudDtpZihzPWdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJlwiQWN0aXZlWE9iamVjdFwiaW4gZ29vZy5nbG9iYWwsbiYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSYmIXMpe2dvb2cuRGVwZW5kZW5jeS5kZWZlcl89ITAsZS5wYXVzZSgpO3ZhciBwPWEub25yZWFkeXN0YXRlY2hhbmdlO2Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XCJpbnRlcmFjdGl2ZVwiPT1hLnJlYWR5U3RhdGUmJihhLm9ucmVhZHlzdGF0ZWNoYW5nZT1wLG8oKSxlLnJlc3VtZSgpKSxnb29nLmlzRnVuY3Rpb24ocCkmJnAuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWVsc2UhZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKT9mdW5jdGlvbigpe3ZhciBlPWdvb2cuZ2xvYmFsLmRvY3VtZW50LHQ9Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKHQpLG8oKX0pKSxyPSc8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4nK2dvb2cucHJvdGVjdFNjcmlwdFRhZ18oJ2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK3QrJ1wiKTsnKStcIjxcXC9zY3JpcHQ+XCI7ZS53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKHIpOnIpfSgpOm8oKX19fSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe30sZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4saSl7Z29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy50cmFuc3BpbGVyPWl9LGdvb2cuaW5oZXJpdHMoZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSksZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zcGlsZXIudHJhbnNwaWxlKGUsdGhpcy5nZXRQYXRoTmFtZSgpKX0sZ29vZy5QcmVUcmFuc3BpbGVkRXM2TW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pfSxnb29nLmluaGVyaXRzKGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4saSxzKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKSx0aGlzLm5lZWRzVHJhbnNwaWxlXz1pLHRoaXMudHJhbnNwaWxlcl89c30sZ29vZy5pbmhlcml0cyhnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVlZHNUcmFuc3BpbGVfJiYoZT10aGlzLnRyYW5zcGlsZXJfLnRyYW5zcGlsZShlLHRoaXMuZ2V0UGF0aE5hbWUoKSkpLGdvb2cuTE9BRF9NT0RVTEVfVVNJTkdfRVZBTCYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC5KU09OKT9cImdvb2cubG9hZE1vZHVsZShcIitnb29nLmdsb2JhbC5KU09OLnN0cmluZ2lmeShlK1wiXFxuLy8jIHNvdXJjZVVSTD1cIit0aGlzLnBhdGgrXCJcXG5cIikrXCIpO1wiOidnb29nLmxvYWRNb2R1bGUoZnVuY3Rpb24oZXhwb3J0cykge1widXNlIHN0cmljdFwiOycrZStcIlxcbjtyZXR1cm4gZXhwb3J0c30pO1xcbi8vIyBzb3VyY2VVUkw9XCIrdGhpcy5wYXRoK1wiXFxuXCJ9LGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV89IShnb29nLmdsb2JhbC5hdG9ifHwhZ29vZy5nbG9iYWwuZG9jdW1lbnR8fCFnb29nLmdsb2JhbC5kb2N1bWVudC5hbGwpLGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5hZGREZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIpe3Q9dHx8W10sZT1lLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7dmFyIG49Z29vZy5ub3JtYWxpemVQYXRoXyhnb29nLmJhc2VQYXRoK2UpO2ZvcihyJiZcImJvb2xlYW5cIiE9dHlwZW9mIHJ8fChyPXI/e21vZHVsZTpnb29nLk1vZHVsZVR5cGUuR09PR306e30pLG89dGhpcy5mYWN0b3J5Xy5jcmVhdGVEZXBlbmRlbmN5KG4sZSx0LG8scixnb29nLnRyYW5zcGlsZXJfLm5lZWRzVHJhbnNwaWxlKHIubGFuZ3x8XCJlczNcIixyLm1vZHVsZSkpLHRoaXMuZGVwZW5kZW5jaWVzX1tuXT1vLG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmlkVG9QYXRoX1t0W29dXT1uO3RoaXMuaWRUb1BhdGhfW2VdPW59LGdvb2cuRGVwZW5kZW5jeUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dGhpcy50cmFuc3BpbGVyPWV9LGdvb2cuRGVwZW5kZW5jeUZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLGkpe3JldHVybiBuLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0c/bmV3IGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3koZSx0LG8scixuLGksdGhpcy50cmFuc3BpbGVyKTppP25ldyBnb29nLlRyYW5zcGlsZWREZXBlbmRlbmN5KGUsdCxvLHIsbix0aGlzLnRyYW5zcGlsZXIpOm4ubW9kdWxlPT1nb29nLk1vZHVsZVR5cGUuRVM2P1wibmV2ZXJcIj09Z29vZy5UUkFOU1BJTEUmJmdvb2cuQVNTVU1FX0VTX01PRFVMRVNfVFJBTlNQSUxFRD9uZXcgZ29vZy5QcmVUcmFuc3BpbGVkRXM2TW9kdWxlRGVwZW5kZW5jeShlLHQsbyxyLG4pOm5ldyBnb29nLkVzNk1vZHVsZURlcGVuZGVuY3koZSx0LG8scixuKTpuZXcgZ29vZy5EZXBlbmRlbmN5KGUsdCxvLHIsbil9LGdvb2cuZGVidWdMb2FkZXJfPW5ldyBnb29nLkRlYnVnTG9hZGVyXyxnb29nLmxvYWRDbG9zdXJlRGVwcz1mdW5jdGlvbigpe2dvb2cuZGVidWdMb2FkZXJfLmxvYWRDbG9zdXJlRGVwcygpfSxnb29nLnNldERlcGVuZGVuY3lGYWN0b3J5PWZ1bmN0aW9uKGUpe2dvb2cuZGVidWdMb2FkZXJfLnNldERlcGVuZGVuY3lGYWN0b3J5KGUpfSxnb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFN8fGdvb2cuZGVidWdMb2FkZXJfLmxvYWRDbG9zdXJlRGVwcygpLGdvb2cuYm9vdHN0cmFwPWZ1bmN0aW9uKGUsdCl7Z29vZy5kZWJ1Z0xvYWRlcl8uYm9vdHN0cmFwKGUsdCl9KSxnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUU9XCJcIixnb29nLmlkZW50aXR5Xz1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZ29vZy5jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3k9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgVHJ1c3RlZFR5cGVzfHwhVHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSlyZXR1cm4gdDt0cnl7dD1UcnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KGUse2NyZWF0ZUhUTUw6Z29vZy5pZGVudGl0eV8sY3JlYXRlU2NyaXB0Omdvb2cuaWRlbnRpdHlfLGNyZWF0ZVNjcmlwdFVSTDpnb29nLmlkZW50aXR5XyxjcmVhdGVVUkw6Z29vZy5pZGVudGl0eV99KX1jYXRjaChlKXtnb29nLmxvZ1RvQ29uc29sZV8oZS5tZXNzYWdlKX1yZXR1cm4gdH0sZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV89Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNiYXNlXCIpOm51bGwsZ29vZy5vYmplY3Q9e30sZ29vZy5vYmplY3QuaXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPWUmJnQhPXR9LGdvb2cub2JqZWN0LmZvckVhY2g9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKXQuY2FsbChvLGVbcl0scixlKX0sZ29vZy5vYmplY3QuZmlsdGVyPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpdC5jYWxsKG8sZVtyXSxyLGUpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0sZ29vZy5vYmplY3QubWFwPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpbltyXT10LmNhbGwobyxlW3JdLHIsZSk7cmV0dXJuIG59LGdvb2cub2JqZWN0LnNvbWU9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKWlmKHQuY2FsbChvLGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5vYmplY3QuZXZlcnk9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKWlmKCF0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cub2JqZWN0LmdldENvdW50PWZ1bmN0aW9uKGUpe3ZhciB0LG89MDtmb3IodCBpbiBlKW8rKztyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0QW55S2V5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiB0fSxnb29nLm9iamVjdC5nZXRBbnlWYWx1ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4gZVt0XX0sZ29vZy5vYmplY3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5vYmplY3QuY29udGFpbnNWYWx1ZShlLHQpfSxnb29nLm9iamVjdC5nZXRWYWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQsbz1bXSxyPTA7Zm9yKHQgaW4gZSlvW3IrK109ZVt0XTtyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0S2V5cz1mdW5jdGlvbihlKXt2YXIgdCxvPVtdLHI9MDtmb3IodCBpbiBlKW9bcisrXT10O3JldHVybiBvfSxnb29nLm9iamVjdC5nZXRWYWx1ZUJ5S2V5cz1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuaXNBcnJheUxpa2UodCkscj1vP3Q6YXJndW1lbnRzO2ZvcihvPW8/MDoxO288ci5sZW5ndGg7bysrKXtpZihudWxsPT1lKXJldHVybjtlPWVbcltvXV19cmV0dXJuIGV9LGdvb2cub2JqZWN0LmNvbnRhaW5zS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPT1lJiZ0IGluIGV9LGdvb2cub2JqZWN0LmNvbnRhaW5zVmFsdWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gZSlpZihlW29dPT10KXJldHVybiEwO3JldHVybiExfSxnb29nLm9iamVjdC5maW5kS2V5PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZih0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuIHJ9LGdvb2cub2JqZWN0LmZpbmRWYWx1ZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuKHQ9Z29vZy5vYmplY3QuZmluZEtleShlLHQsbykpJiZlW3RdfSxnb29nLm9iamVjdC5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnb29nLm9iamVjdC5jbGVhcj1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlkZWxldGUgZVt0XX0sZ29vZy5vYmplY3QucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG87cmV0dXJuKG89dCBpbiBlKSYmZGVsZXRlIGVbdF0sb30sZ29vZy5vYmplY3QuYWRkPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsIT09ZSYmdCBpbiBlKXRocm93IEVycm9yKCdUaGUgb2JqZWN0IGFscmVhZHkgY29udGFpbnMgdGhlIGtleSBcIicrdCsnXCInKTtnb29nLm9iamVjdC5zZXQoZSx0LG8pfSxnb29nLm9iamVjdC5nZXQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsIT09ZSYmdCBpbiBlP2VbdF06b30sZ29vZy5vYmplY3Quc2V0PWZ1bmN0aW9uKGUsdCxvKXtlW3RdPW99LGdvb2cub2JqZWN0LnNldElmVW5kZWZpbmVkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdCBpbiBlP2VbdF06ZVt0XT1vfSxnb29nLm9iamVjdC5zZXRXaXRoUmV0dXJuVmFsdWVJZk5vdFNldD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQgaW4gZT9lW3RdOihvPW8oKSxlW3RdPW8pfSxnb29nLm9iamVjdC5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gZSlpZighKG8gaW4gdCl8fGVbb10hPT10W29dKXJldHVybiExO2Zvcih2YXIgciBpbiB0KWlmKCEociBpbiBlKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5vYmplY3QuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIHQsbz17fTtmb3IodCBpbiBlKW9bdF09ZVt0XTtyZXR1cm4gb30sZ29vZy5vYmplY3QudW5zYWZlQ2xvbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy50eXBlT2YoZSk7aWYoXCJvYmplY3RcIj09dHx8XCJhcnJheVwiPT10KXtpZihnb29nLmlzRnVuY3Rpb24oZS5jbG9uZSkpcmV0dXJuIGUuY2xvbmUoKTtmb3IodmFyIG8gaW4gdD1cImFycmF5XCI9PXQ/W106e30sZSl0W29dPWdvb2cub2JqZWN0LnVuc2FmZUNsb25lKGVbb10pO3JldHVybiB0fXJldHVybiBlfSxnb29nLm9iamVjdC50cmFuc3Bvc2U9ZnVuY3Rpb24oZSl7dmFyIHQsbz17fTtmb3IodCBpbiBlKW9bZVt0XV09dDtyZXR1cm4gb30sZ29vZy5vYmplY3QuUFJPVE9UWVBFX0ZJRUxEU189XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIiksZ29vZy5vYmplY3QuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe2ZvcihvIGluIHI9YXJndW1lbnRzW25dKWVbb109cltvXTtmb3IodmFyIGk9MDtpPGdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfLmxlbmd0aDtpKyspbz1nb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTX1tpXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixvKSYmKGVbb109cltvXSl9fSxnb29nLm9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDtpZigxPT10JiZnb29nLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gZ29vZy5vYmplY3QuY3JlYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTtpZih0JTIpdGhyb3cgRXJyb3IoXCJVbmV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtmb3IodmFyIG89e30scj0wO3I8dDtyKz0yKW9bYXJndW1lbnRzW3JdXT1hcmd1bWVudHNbcisxXTtyZXR1cm4gb30sZ29vZy5vYmplY3QuY3JlYXRlU2V0PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMT09dCYmZ29vZy5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIGdvb2cub2JqZWN0LmNyZWF0ZVNldC5hcHBseShudWxsLGFyZ3VtZW50c1swXSk7Zm9yKHZhciBvPXt9LHI9MDtyPHQ7cisrKW9bYXJndW1lbnRzW3JdXT0hMDtyZXR1cm4gb30sZ29vZy5vYmplY3QuY3JlYXRlSW1tdXRhYmxlVmlldz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBPYmplY3QuaXNGcm96ZW4mJiFPYmplY3QuaXNGcm96ZW4oZSkmJih0PU9iamVjdC5jcmVhdGUoZSksT2JqZWN0LmZyZWV6ZSh0KSksdH0sZ29vZy5vYmplY3QuaXNJbW11dGFibGVWaWV3PWZ1bmN0aW9uKGUpe3JldHVybiEhT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oZSl9LGdvb2cub2JqZWN0LmdldEFsbFByb3BlcnR5TmFtZXM9ZnVuY3Rpb24oZSx0LG8pe2lmKCFlKXJldHVybltdO2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8IU9iamVjdC5nZXRQcm90b3R5cGVPZilyZXR1cm4gZ29vZy5vYmplY3QuZ2V0S2V5cyhlKTtmb3IodmFyIHI9e307ZSYmKGUhPT1PYmplY3QucHJvdG90eXBlfHx0KSYmKGUhPT1GdW5jdGlvbi5wcm90b3R5cGV8fG8pOyl7Zm9yKHZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPSEwO2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfXJldHVybiBnb29nLm9iamVjdC5nZXRLZXlzKHIpfSxnb29nLm9iamVjdC5nZXRTdXBlckNsYXNzPWZ1bmN0aW9uKGUpe3JldHVybihlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSkpJiZlLmNvbnN0cnVjdG9yfSxnb29nLmRlYnVnPXt9LGdvb2cuZGVidWcuRXJyb3I9ZnVuY3Rpb24oZSl7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxnb29nLmRlYnVnLkVycm9yKTtlbHNle3ZhciB0PUVycm9yKCkuc3RhY2s7dCYmKHRoaXMuc3RhY2s9dCl9ZSYmKHRoaXMubWVzc2FnZT1TdHJpbmcoZSkpLHRoaXMucmVwb3J0RXJyb3JUb1NlcnZlcj0hMH0sZ29vZy5pbmhlcml0cyhnb29nLmRlYnVnLkVycm9yLEVycm9yKSxnb29nLmRlYnVnLkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQ3VzdG9tRXJyb3JcIixnb29nLmRvbT17fSxnb29nLmRvbS5Ob2RlVHlwZT17RUxFTUVOVDoxLEFUVFJJQlVURToyLFRFWFQ6MyxDREFUQV9TRUNUSU9OOjQsRU5USVRZX1JFRkVSRU5DRTo1LEVOVElUWTo2LFBST0NFU1NJTkdfSU5TVFJVQ1RJT046NyxDT01NRU5UOjgsRE9DVU1FTlQ6OSxET0NVTUVOVF9UWVBFOjEwLERPQ1VNRU5UX0ZSQUdNRU5UOjExLE5PVEFUSU9OOjEyfSxnb29nLmFzc2VydHM9e30sZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTPWdvb2cuREVCVUcsZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKGUsdCl7Z29vZy5kZWJ1Zy5FcnJvci5jYWxsKHRoaXMsZ29vZy5hc3NlcnRzLnN1YnNfKGUsdCkpLHRoaXMubWVzc2FnZVBhdHRlcm49ZX0sZ29vZy5pbmhlcml0cyhnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IsZ29vZy5kZWJ1Zy5FcnJvciksZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIixnb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSPWZ1bmN0aW9uKGUpe3Rocm93IGV9LGdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfPWdvb2cuYXNzZXJ0cy5ERUZBVUxUX0VSUk9SX0hBTkRMRVIsZ29vZy5hc3NlcnRzLnN1YnNfPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVwiXCIscj0oZT1lLnNwbGl0KFwiJXNcIikpLmxlbmd0aC0xLG49MDtuPHI7bisrKW8rPWVbbl0rKG48dC5sZW5ndGg/dFtuXTpcIiVzXCIpO3JldHVybiBvK2Vbcl19LGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPVwiQXNzZXJ0aW9uIGZhaWxlZFwiO2lmKG8pe24rPVwiOiBcIitvO3ZhciBpPXJ9ZWxzZSBlJiYobis9XCI6IFwiK2UsaT10KTtlPW5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJcIituLGl8fFtdKSxnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXyhlKX0sZ29vZy5hc3NlcnRzLnNldEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJihnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1lKX0sZ29vZy5hc3NlcnRzLmFzc2VydD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWUmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiXCIsbnVsbCx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEV4aXN0cz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmbnVsbD09ZSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCB0byBleGlzdDogJXMuXCIsW2VdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuZmFpbD1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl8obmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIkZhaWx1cmVcIisoZT9cIjogXCIrZTpcIlwiKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpKX0sZ29vZy5hc3NlcnRzLmFzc2VydE51bWJlcj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNOdW1iZXIoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNTdHJpbmcoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgc3RyaW5nIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0Z1bmN0aW9uKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGZ1bmN0aW9uIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydE9iamVjdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNPYmplY3QoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEFycmF5PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0FycmF5KGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGFycmF5IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEJvb2xlYW49ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzQm9vbGVhbihlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBib29sZWFuIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGdvb2cuaXNPYmplY3QoZSkmJmUubm9kZVR5cGU9PWdvb2cuZG9tLk5vZGVUeXBlLkVMRU1FTlR8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgRWxlbWVudCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGUgaW5zdGFuY2VvZiB0fHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGluc3RhbmNlb2YgJXMgYnV0IGdvdCAlcy5cIixbZ29vZy5hc3NlcnRzLmdldFR5cGVfKHQpLGdvb2cuYXNzZXJ0cy5nZXRUeXBlXyhlKV0sbyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMykpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRGaW5pdGU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fFwibnVtYmVyXCI9PXR5cGVvZiBlJiZpc0Zpbml0ZShlKXx8Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCAlcyB0byBiZSBhIGZpbml0ZSBudW1iZXIgYnV0IGl0IGlzIG5vdC5cIixbZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRPYmplY3RQcm90b3R5cGVJc0ludGFjdD1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBPYmplY3QucHJvdG90eXBlKWdvb2cuYXNzZXJ0cy5mYWlsKGUrXCIgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIGluIE9iamVjdC5wcm90b3R5cGUuXCIpfSxnb29nLmFzc2VydHMuZ2V0VHlwZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGdW5jdGlvbj9lLmRpc3BsYXlOYW1lfHxlLm5hbWV8fFwidW5rbm93biB0eXBlIG5hbWVcIjplIGluc3RhbmNlb2YgT2JqZWN0P2UuY29uc3RydWN0b3IuZGlzcGxheU5hbWV8fGUuY29uc3RydWN0b3IubmFtZXx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpOm51bGw9PT1lP1wibnVsbFwiOnR5cGVvZiBlfTt2YXIganNwYj17QmluYXJ5Q29uc3RhbnRzOnt9LENvbnN0QmluYXJ5TWVzc2FnZTpmdW5jdGlvbigpe30sQmluYXJ5TWVzc2FnZTpmdW5jdGlvbigpe319O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZT17SU5WQUxJRDotMSxET1VCTEU6MSxGTE9BVDoyLElOVDY0OjMsVUlOVDY0OjQsSU5UMzI6NSxGSVhFRDY0OjYsRklYRUQzMjo3LEJPT0w6OCxTVFJJTkc6OSxHUk9VUDoxMCxNRVNTQUdFOjExLEJZVEVTOjEyLFVJTlQzMjoxMyxFTlVNOjE0LFNGSVhFRDMyOjE1LFNGSVhFRDY0OjE2LFNJTlQzMjoxNyxTSU5UNjQ6MTgsRkhBU0g2NDozMCxWSEFTSDY0OjMxfSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZT17SU5WQUxJRDotMSxWQVJJTlQ6MCxGSVhFRDY0OjEsREVMSU1JVEVEOjIsU1RBUlRfR1JPVVA6MyxFTkRfR1JPVVA6NCxGSVhFRDMyOjV9LGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRvV2lyZVR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlLG89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU7c3dpdGNoKGUpe2Nhc2UgdC5JTlQzMjpjYXNlIHQuSU5UNjQ6Y2FzZSB0LlVJTlQzMjpjYXNlIHQuVUlOVDY0OmNhc2UgdC5TSU5UMzI6Y2FzZSB0LlNJTlQ2NDpjYXNlIHQuQk9PTDpjYXNlIHQuRU5VTTpjYXNlIHQuVkhBU0g2NDpyZXR1cm4gby5WQVJJTlQ7Y2FzZSB0LkRPVUJMRTpjYXNlIHQuRklYRUQ2NDpjYXNlIHQuU0ZJWEVENjQ6Y2FzZSB0LkZIQVNINjQ6cmV0dXJuIG8uRklYRUQ2NDtjYXNlIHQuU1RSSU5HOmNhc2UgdC5NRVNTQUdFOmNhc2UgdC5CWVRFUzpyZXR1cm4gby5ERUxJTUlURUQ7Y2FzZSB0LkZMT0FUOmNhc2UgdC5GSVhFRDMyOmNhc2UgdC5TRklYRUQzMjpyZXR1cm4gby5GSVhFRDMyO2RlZmF1bHQ6cmV0dXJuIG8uSU5WQUxJRH19LGpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSPS0xLGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfRVBTPTE0MDEyOTg0NjQzMjQ4MTdlLTYwLGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOPTExNzU0OTQzNTA4MjIyODc1ZS01NCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWD0zNDAyODIzNDY2Mzg1Mjg4NmUyMixqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X0VQUz01ZS0zMjQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU49MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWD0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwPTEwNDg1NzYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIzPTgzODg2MDgsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxPTIxNDc0ODM2NDgsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyPTQyOTQ5NjcyOTYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyPTQ1MDM1OTk2MjczNzA0OTYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzPTB4ODAwMDAwMDAwMDAwMDAwMCxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQ9MHgxMDAwMDAwMDAwMDAwMDAwMCxqc3BiLkJpbmFyeUNvbnN0YW50cy5aRVJPX0hBU0g9XCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIixnb29nLmFycmF5PXt9LGdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVM9Z29vZy5UUlVTVEVEX1NJVEUsZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OUz0yMDEyPGdvb2cuRkVBVFVSRVNFVF9ZRUFSLGdvb2cuYXJyYXkucGVlaz1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sZ29vZy5hcnJheS5sYXN0PWdvb2cuYXJyYXkucGVlayxnb29nLmFycmF5LmluZGV4T2Y9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5pbmRleE9mKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7aWYobz1udWxsPT1vPzA6MD5vP01hdGgubWF4KDAsZS5sZW5ndGgrbyk6byxnb29nLmlzU3RyaW5nKGUpKXJldHVybiBnb29nLmlzU3RyaW5nKHQpJiYxPT10Lmxlbmd0aD9lLmluZGV4T2YodCxvKTotMTtmb3IoO288ZS5sZW5ndGg7bysrKWlmKG8gaW4gZSYmZVtvXT09PXQpcmV0dXJuIG87cmV0dXJuLTF9LGdvb2cuYXJyYXkubGFzdEluZGV4T2Y9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbnVsbD09bz9lLmxlbmd0aC0xOm8pfTpmdW5jdGlvbihlLHQsbyl7aWYoMD4obz1udWxsPT1vP2UubGVuZ3RoLTE6bykmJihvPU1hdGgubWF4KDAsZS5sZW5ndGgrbykpLGdvb2cuaXNTdHJpbmcoZSkpcmV0dXJuIGdvb2cuaXNTdHJpbmcodCkmJjE9PXQubGVuZ3RoP2UubGFzdEluZGV4T2YodCxvKTotMTtmb3IoOzA8PW87by0tKWlmKG8gaW4gZSYmZVtvXT09PXQpcmV0dXJuIG87cmV0dXJuLTF9LGdvb2cuYXJyYXkuZm9yRWFjaD1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmZvckVhY2gpP2Z1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGk9MDtpPHI7aSsrKWkgaW4gbiYmdC5jYWxsKG8sbltpXSxpLGUpfSxnb29nLmFycmF5LmZvckVhY2hSaWdodD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZTtmb3IoLS1yOzA8PXI7LS1yKXIgaW4gbiYmdC5jYWxsKG8sbltyXSxyLGUpfSxnb29nLmFycmF5LmZpbHRlcj1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmZpbHRlcik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPWUubGVuZ3RoLG49W10saT0wLHM9Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUsYT0wO2E8cjthKyspaWYoYSBpbiBzKXt2YXIgcD1zW2FdO3QuY2FsbChvLHAsYSxlKSYmKG5baSsrXT1wKX1yZXR1cm4gbn0sZ29vZy5hcnJheS5tYXA9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5tYXApP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPUFycmF5KHIpLGk9Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUscz0wO3M8cjtzKyspcyBpbiBpJiYobltzXT10LmNhbGwobyxpW3NdLHMsZSkpO3JldHVybiBufSxnb29nLmFycmF5LnJlZHVjZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnJlZHVjZSk/ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLHImJih0PWdvb2cuYmluZCh0LHIpKSxBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1vO3JldHVybiBnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24obyxpKXtuPXQuY2FsbChyLG4sbyxpLGUpfSkpLG59LGdvb2cuYXJyYXkucmVkdWNlUmlnaHQ9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCk/ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9dCksciYmKHQ9Z29vZy5iaW5kKHQscikpLEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49bztyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQoZSwoZnVuY3Rpb24obyxpKXtuPXQuY2FsbChyLG4sbyxpLGUpfSkpLG59LGdvb2cuYXJyYXkuc29tZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnNvbWUpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxpPTA7aTxyO2krKylpZihpIGluIG4mJnQuY2FsbChvLG5baV0saSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5hcnJheS5ldmVyeT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmV2ZXJ5KT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGk9MDtpPHI7aSsrKWlmKGkgaW4gbiYmIXQuY2FsbChvLG5baV0saSxlKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5hcnJheS5jb3VudD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9MDtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbixpKXt0LmNhbGwobyxlLG4saSkmJisrcn0pLG8pLHJ9LGdvb2cuYXJyYXkuZmluZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KHQ9Z29vZy5hcnJheS5maW5kSW5kZXgoZSx0LG8pKT9udWxsOmdvb2cuaXNTdHJpbmcoZSk/ZS5jaGFyQXQodCk6ZVt0XX0sZ29vZy5hcnJheS5maW5kSW5kZXg9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGk9MDtpPHI7aSsrKWlmKGkgaW4gbiYmdC5jYWxsKG8sbltpXSxpLGUpKXJldHVybiBpO3JldHVybi0xfSxnb29nLmFycmF5LmZpbmRSaWdodD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KHQ9Z29vZy5hcnJheS5maW5kSW5kZXhSaWdodChlLHQsbykpP251bGw6Z29vZy5pc1N0cmluZyhlKT9lLmNoYXJBdCh0KTplW3RdfSxnb29nLmFycmF5LmZpbmRJbmRleFJpZ2h0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplO2ZvcigtLXI7MDw9cjtyLS0paWYociBpbiBuJiZ0LmNhbGwobyxuW3JdLHIsZSkpcmV0dXJuIHI7cmV0dXJuLTF9LGdvb2cuYXJyYXkuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDw9Z29vZy5hcnJheS5pbmRleE9mKGUsdCl9LGdvb2cuYXJyYXkuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4gMD09ZS5sZW5ndGh9LGdvb2cuYXJyYXkuY2xlYXI9ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaXNBcnJheShlKSlmb3IodmFyIHQ9ZS5sZW5ndGgtMTswPD10O3QtLSlkZWxldGUgZVt0XTtlLmxlbmd0aD0wfSxnb29nLmFycmF5Lmluc2VydD1mdW5jdGlvbihlLHQpe2dvb2cuYXJyYXkuY29udGFpbnMoZSx0KXx8ZS5wdXNoKHQpfSxnb29nLmFycmF5Lmluc2VydEF0PWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFycmF5LnNwbGljZShlLG8sMCx0KX0sZ29vZy5hcnJheS5pbnNlcnRBcnJheUF0PWZ1bmN0aW9uKGUsdCxvKXtnb29nLnBhcnRpYWwoZ29vZy5hcnJheS5zcGxpY2UsZSxvLDApLmFwcGx5KG51bGwsdCl9LGdvb2cuYXJyYXkuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcjsyPT1hcmd1bWVudHMubGVuZ3RofHwwPihyPWdvb2cuYXJyYXkuaW5kZXhPZihlLG8pKT9lLnB1c2godCk6Z29vZy5hcnJheS5pbnNlcnRBdChlLHQscil9LGdvb2cuYXJyYXkucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG87cmV0dXJuKG89MDw9KHQ9Z29vZy5hcnJheS5pbmRleE9mKGUsdCkpKSYmZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLG99LGdvb2cuYXJyYXkucmVtb3ZlTGFzdD1mdW5jdGlvbihlLHQpe3JldHVybiAwPD0odD1nb29nLmFycmF5Lmxhc3RJbmRleE9mKGUsdCkpJiYoZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLCEwKX0sZ29vZy5hcnJheS5yZW1vdmVBdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSwxPT1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoZSx0LDEpLmxlbmd0aH0sZ29vZy5hcnJheS5yZW1vdmVJZj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA8PSh0PWdvb2cuYXJyYXkuZmluZEluZGV4KGUsdCxvKSkmJihnb29nLmFycmF5LnJlbW92ZUF0KGUsdCksITApfSxnb29nLmFycmF5LnJlbW92ZUFsbElmPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wO3JldHVybiBnb29nLmFycmF5LmZvckVhY2hSaWdodChlLChmdW5jdGlvbihuLGkpe3QuY2FsbChvLG4saSxlKSYmZ29vZy5hcnJheS5yZW1vdmVBdChlLGkpJiZyKyt9KSkscn0sZ29vZy5hcnJheS5jb25jYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sYXJndW1lbnRzKX0sZ29vZy5hcnJheS5qb2luPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9LGdvb2cuYXJyYXkudG9BcnJheT1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigwPHQpe2Zvcih2YXIgbz1BcnJheSh0KSxyPTA7cjx0O3IrKylvW3JdPWVbcl07cmV0dXJuIG99cmV0dXJuW119LGdvb2cuYXJyYXkuY2xvbmU9Z29vZy5hcnJheS50b0FycmF5LGdvb2cuYXJyYXkuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIHI9YXJndW1lbnRzW29dO2lmKGdvb2cuaXNBcnJheUxpa2Uocikpe3ZhciBuPWUubGVuZ3RofHwwLGk9ci5sZW5ndGh8fDA7ZS5sZW5ndGg9bitpO2Zvcih2YXIgcz0wO3M8aTtzKyspZVtuK3NdPXJbc119ZWxzZSBlLnB1c2gocil9fSxnb29nLmFycmF5LnNwbGljZT1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShlLGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKX0sZ29vZy5hcnJheS5zbGljZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLDI+PWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLHQsbyl9LGdvb2cuYXJyYXkucmVtb3ZlRHVwbGljYXRlcz1mdW5jdGlvbihlLHQsbyl7dD10fHxlO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmlzT2JqZWN0KGUpP1wib1wiK2dvb2cuZ2V0VWlkKGUpOih0eXBlb2YgZSkuY2hhckF0KDApK2V9O289b3x8cixyPXt9O2Zvcih2YXIgbj0wLGk9MDtpPGUubGVuZ3RoOyl7dmFyIHM9ZVtpKytdLGE9byhzKTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixhKXx8KHJbYV09ITAsdFtuKytdPXMpfXQubGVuZ3RoPW59LGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfKGUsb3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZSwhMSx0KX0sZ29vZy5hcnJheS5iaW5hcnlTZWxlY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFycmF5LmJpbmFyeVNlYXJjaF8oZSx0LCEwLHZvaWQgMCxvKX0sZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfPWZ1bmN0aW9uKGUsdCxvLHIsbil7Zm9yKHZhciBpLHM9MCxhPWUubGVuZ3RoO3M8YTspe3ZhciBwPXMrYT4+MSxnPW8/dC5jYWxsKG4sZVtwXSxwLGUpOnQocixlW3BdKTswPGc/cz1wKzE6KGE9cCxpPSFnKX1yZXR1cm4gaT9zOn5zfSxnb29nLmFycmF5LnNvcnQ9ZnVuY3Rpb24oZSx0KXtlLnNvcnQodHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZSl9LGdvb2cuYXJyYXkuc3RhYmxlU29ydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1BcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW9bcl09e2luZGV4OnIsdmFsdWU6ZVtyXX07dmFyIG49dHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IoZ29vZy5hcnJheS5zb3J0KG8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZS52YWx1ZSx0LnZhbHVlKXx8ZS5pbmRleC10LmluZGV4fSkpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPW9bcl0udmFsdWV9LGdvb2cuYXJyYXkuc29ydEJ5S2V5PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2dvb2cuYXJyYXkuc29ydChlLChmdW5jdGlvbihlLG8pe3JldHVybiByKHQoZSksdChvKSl9KSl9LGdvb2cuYXJyYXkuc29ydE9iamVjdHNCeUtleT1mdW5jdGlvbihlLHQsbyl7Z29vZy5hcnJheS5zb3J0QnlLZXkoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19KSxvKX0sZ29vZy5hcnJheS5pc1NvcnRlZD1mdW5jdGlvbihlLHQsbyl7dD10fHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10KGVbci0xXSxlW3JdKTtpZigwPG58fDA9PW4mJm8pcmV0dXJuITF9cmV0dXJuITB9LGdvb2cuYXJyYXkuZXF1YWxzPWZ1bmN0aW9uKGUsdCxvKXtpZighZ29vZy5pc0FycmF5TGlrZShlKXx8IWdvb2cuaXNBcnJheUxpa2UodCl8fGUubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTt2YXIgcj1lLmxlbmd0aDtvPW98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eTtmb3IodmFyIG49MDtuPHI7bisrKWlmKCFvKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cuYXJyYXkuY29tcGFyZTM9ZnVuY3Rpb24oZSx0LG8pe289b3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIHI9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLG49MDtuPHI7bisrKXt2YXIgaT1vKGVbbl0sdFtuXSk7aWYoMCE9aSlyZXR1cm4gaX1yZXR1cm4gZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZShlLmxlbmd0aCx0Lmxlbmd0aCl9LGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT50PzE6ZTx0Py0xOjB9LGdvb2cuYXJyYXkuaW52ZXJzZURlZmF1bHRDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLWdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUoZSx0KX0sZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZUVxdWFsaXR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSxnb29nLmFycmF5LmJpbmFyeUluc2VydD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KG89Z29vZy5hcnJheS5iaW5hcnlTZWFyY2goZSx0LG8pKSYmKGdvb2cuYXJyYXkuaW5zZXJ0QXQoZSx0LC0obysxKSksITApfSxnb29nLmFycmF5LmJpbmFyeVJlbW92ZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA8PSh0PWdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoKGUsdCxvKSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KX0sZ29vZy5hcnJheS5idWNrZXQ9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl0scz10LmNhbGwobyxpLG4sZSk7Z29vZy5pc0RlZihzKSYmKHJbc118fChyW3NdPVtdKSkucHVzaChpKX1yZXR1cm4gcn0sZ29vZy5hcnJheS50b09iamVjdD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9e307cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChlLChmdW5jdGlvbihuLGkpe3JbdC5jYWxsKG8sbixpLGUpXT1ufSkpLHJ9LGdvb2cuYXJyYXkucmFuZ2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPVtdLG49MCxpPWU7aWYodm9pZCAwIT09dCYmKG49ZSxpPXQpLDA+KG89b3x8MSkqKGktbikpcmV0dXJuW107aWYoMDxvKWZvcihlPW47ZTxpO2UrPW8pci5wdXNoKGUpO2Vsc2UgZm9yKGU9bjtlPmk7ZSs9bylyLnB1c2goZSk7cmV0dXJuIHJ9LGdvb2cuYXJyYXkucmVwZWF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLHI9MDtyPHQ7cisrKW9bcl09ZTtyZXR1cm4gb30sZ29vZy5hcnJheS5mbGF0dGVuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIHI9YXJndW1lbnRzW29dO2lmKGdvb2cuaXNBcnJheShyKSlmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTgxOTIpe3ZhciBpPWdvb2cuYXJyYXkuc2xpY2UocixuLG4rODE5Mik7aT1nb29nLmFycmF5LmZsYXR0ZW4uYXBwbHkobnVsbCxpKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl0LnB1c2goaVtzXSl9ZWxzZSB0LnB1c2gocil9cmV0dXJuIHR9LGdvb2cuYXJyYXkucm90YXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLGUubGVuZ3RoJiYoMDwodCU9ZS5sZW5ndGgpP0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGUsZS5zcGxpY2UoLXQsdCkpOjA+dCYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSxlLnNwbGljZSgwLC10KSkpLGV9LGdvb2cuYXJyYXkubW92ZUl0ZW09ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxlLmxlbmd0aCksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1vJiZvPGUubGVuZ3RoKSx0PUFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChlLHQsMSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGUsbywwLHRbMF0pfSxnb29nLmFycmF5LnppcD1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIHQ9W10sbz1hcmd1bWVudHNbMF0ubGVuZ3RoLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWFyZ3VtZW50c1tyXS5sZW5ndGg8byYmKG89YXJndW1lbnRzW3JdLmxlbmd0aCk7Zm9yKHI9MDtyPG87cisrKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbi5wdXNoKGFyZ3VtZW50c1tpXVtyXSk7dC5wdXNoKG4pfXJldHVybiB0fSxnb29nLmFycmF5LnNodWZmbGU9ZnVuY3Rpb24oZSx0KXt0PXR8fE1hdGgucmFuZG9tO2Zvcih2YXIgbz1lLmxlbmd0aC0xOzA8bztvLS0pe3ZhciByPU1hdGguZmxvb3IodCgpKihvKzEpKSxuPWVbb107ZVtvXT1lW3JdLGVbcl09bn19LGdvb2cuYXJyYXkuY29weUJ5SW5kZXg9ZnVuY3Rpb24oZSx0KXt2YXIgbz1bXTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe28ucHVzaChlW3RdKX0pKSxvfSxnb29nLmFycmF5LmNvbmNhdE1hcD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXJyYXkuY29uY2F0LmFwcGx5KFtdLGdvb2cuYXJyYXkubWFwKGUsdCxvKSl9LGdvb2cuY3J5cHQ9e30sZ29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZS5jaGFyQ29kZUF0KHIpOzI1NTxuJiYodFtvKytdPTI1NSZuLG4+Pj04KSx0W28rK109bn1yZXR1cm4gdH0sZ29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZz1mdW5jdGlvbihlKXtpZig4MTkyPj1lLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpO2Zvcih2YXIgdD1cIlwiLG89MDtvPGUubGVuZ3RoO28rPTgxOTIpe3ZhciByPWdvb2cuYXJyYXkuc2xpY2UoZSxvLG8rODE5Mik7dCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIpfXJldHVybiB0fSxnb29nLmNyeXB0LmJ5dGVBcnJheVRvSGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXJyYXkubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiAxPChlPWUudG9TdHJpbmcoMTYpKS5sZW5ndGg/ZTpcIjBcIitlfSkpLmpvaW4odHx8XCJcIil9LGdvb2cuY3J5cHQuaGV4VG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPT1lLmxlbmd0aCUyLFwiS2V5IHN0cmluZyBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiAyXCIpO2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxlbmd0aDtvKz0yKXQucHVzaChwYXJzZUludChlLnN1YnN0cmluZyhvLG8rMiksMTYpKTtyZXR1cm4gdH0sZ29vZy5jcnlwdC5zdHJpbmdUb1V0ZjhCeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckNvZGVBdChyKTsxMjg+bj90W28rK109bjooMjA0OD5uP3RbbysrXT1uPj42fDE5MjooNTUyOTY9PSg2NDUxMiZuKSYmcisxPGUubGVuZ3RoJiY1NjMyMD09KDY0NTEyJmUuY2hhckNvZGVBdChyKzEpKT8obj02NTUzNisoKDEwMjMmbik8PDEwKSsoMTAyMyZlLmNoYXJDb2RlQXQoKytyKSksdFtvKytdPW4+PjE4fDI0MCx0W28rK109bj4+MTImNjN8MTI4KTp0W28rK109bj4+MTJ8MjI0LHRbbysrXT1uPj42JjYzfDEyOCksdFtvKytdPTYzJm58MTI4KX1yZXR1cm4gdH0sZ29vZy5jcnlwdC51dGY4Qnl0ZUFycmF5VG9TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7bzxlLmxlbmd0aDspe3ZhciBuPWVbbysrXTtpZigxMjg+bil0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZShuKTtlbHNlIGlmKDE5MTxuJiYyMjQ+bil7dmFyIGk9ZVtvKytdO3RbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZuKTw8Nnw2MyZpKX1lbHNlIGlmKDIzOTxuJiYzNjU+bil7aT1lW28rK107dmFyIHM9ZVtvKytdO249KCg3Jm4pPDwxOHwoNjMmaSk8PDEyfCg2MyZzKTw8Nnw2MyZlW28rK10pLTY1NTM2LHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhuPj4xMCkpLHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJm4pKX1lbHNlIGk9ZVtvKytdLHM9ZVtvKytdLHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZuKTw8MTJ8KDYzJmkpPDw2fDYzJnMpfXJldHVybiB0LmpvaW4oXCJcIil9LGdvb2cuY3J5cHQueG9yQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChlLmxlbmd0aD09dC5sZW5ndGgsXCJYT1IgYXJyYXkgbGVuZ3RocyBtdXN0IG1hdGNoXCIpO2Zvcih2YXIgbz1bXSxyPTA7cjxlLmxlbmd0aDtyKyspby5wdXNoKGVbcl1edFtyXSk7cmV0dXJuIG99LGdvb2cuZG9tLmFzc2VydHM9e30sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uPWZ1bmN0aW9uKGUpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIHQ9Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGUpO3QmJighZXx8IShlIGluc3RhbmNlb2YgdC5Mb2NhdGlvbikmJmUgaW5zdGFuY2VvZiB0LkVsZW1lbnQpJiZnb29nLmFzc2VydHMuZmFpbChcIkFyZ3VtZW50IGlzIG5vdCBhIExvY2F0aW9uIChvciBhIG5vbi1FbGVtZW50IG1vY2spOyBnb3Q6ICVzXCIsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGUpKX1yZXR1cm4gZX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIG89Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGUpO28mJnZvaWQgMCE9PW9bdF0mJihlJiYoZSBpbnN0YW5jZW9mIG9bdF18fCEoZSBpbnN0YW5jZW9mIG8uTG9jYXRpb258fGUgaW5zdGFuY2VvZiBvLkVsZW1lbnQpKXx8Z29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSAlcyAob3IgYSBub24tRWxlbWVudCwgbm9uLUxvY2F0aW9uIG1vY2spOyBnb3Q6ICVzXCIsdCxnb29nLmRvbS5hc3NlcnRzLmRlYnVnU3RyaW5nRm9yVHlwZV8oZSkpKX1yZXR1cm4gZX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBbmNob3JFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQW5jaG9yRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQnV0dG9uRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxMaW5rRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTExpbmtFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEltYWdlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEltYWdlRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBdWRpb0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxBdWRpb0VsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVmlkZW9FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MVmlkZW9FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElucHV0RWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTElucHV0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxUZXh0QXJlYUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxUZXh0QXJlYUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQ2FudmFzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTENhbnZhc0VsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRW1iZWRFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZvcm1FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRm9ybUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRnJhbWVFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJRnJhbWVFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTE9iamVjdEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxPYmplY3RFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxTY3JpcHRFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmRlYnVnU3RyaW5nRm9yVHlwZV89ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaXNPYmplY3QoZSkpcmV0dXJuIHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZTt0cnl7cmV0dXJuIGUuY29uc3RydWN0b3IuZGlzcGxheU5hbWV8fGUuY29uc3RydWN0b3IubmFtZXx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWNhdGNoKGUpe3JldHVyblwiPG9iamVjdCBjb3VsZCBub3QgYmUgc3RyaW5naWZpZWQ+XCJ9fSxnb29nLmRvbS5hc3NlcnRzLmdldFdpbmRvd189ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWUmJmUub3duZXJEb2N1bWVudCxvPXQmJih0LmRlZmF1bHRWaWV3fHx0LnBhcmVudFdpbmRvdyk7aWYoKG89b3x8Z29vZy5nbG9iYWwpLkVsZW1lbnQmJm8uTG9jYXRpb24pcmV0dXJuIG99Y2F0Y2goZSl7fXJldHVybiBudWxsfSxnb29nLmZ1bmN0aW9ucz17fSxnb29nLmZ1bmN0aW9ucy5jb25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19LGdvb2cuZnVuY3Rpb25zLkZBTFNFPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGdvb2cuZnVuY3Rpb25zLlRSVUU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZ29vZy5mdW5jdGlvbnMuTlVMTD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxnb29nLmZ1bmN0aW9ucy5pZGVudGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxnb29nLmZ1bmN0aW9ucy5lcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihlKX19LGdvb2cuZnVuY3Rpb25zLmZhaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgZX19LGdvb2cuZnVuY3Rpb25zLmxvY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHwwLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCx0KSl9fSxnb29nLmZ1bmN0aW9ucy5udGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1tlXX19LGdvb2cuZnVuY3Rpb25zLnBhcnRpYWxSaWdodD1mdW5jdGlvbihlLHQpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0LnB1c2guYXBwbHkodCxvKSxlLmFwcGx5KHRoaXMsdCl9fSxnb29nLmZ1bmN0aW9ucy53aXRoUmV0dXJuVmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5mdW5jdGlvbnMuc2VxdWVuY2UoZSxnb29nLmZ1bmN0aW9ucy5jb25zdGFudCh0KSl9LGdvb2cuZnVuY3Rpb25zLmVxdWFsVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIHQ/ZT09bzplPT09b319LGdvb2cuZnVuY3Rpb25zLmNvbXBvc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbz1hcmd1bWVudHMscj1vLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZTtyJiYoZT1vW3ItMV0uYXBwbHkodGhpcyxhcmd1bWVudHMpKTtmb3IodmFyIHQ9ci0yOzA8PXQ7dC0tKWU9b1t0XS5jYWxsKHRoaXMsZSk7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5zZXF1ZW5jZT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGUscj0wO3I8bztyKyspZT10W3JdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZX19LGdvb2cuZnVuY3Rpb25zLmFuZD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG87ZSsrKWlmKCF0W2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm4hMTtyZXR1cm4hMH19LGdvb2cuZnVuY3Rpb25zLm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cyxvPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bztlKyspaWYodFtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITA7cmV0dXJuITF9fSxnb29nLmZ1bmN0aW9ucy5ub3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZ29vZy5mdW5jdGlvbnMuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZnVuY3Rpb24oKXt9O3JldHVybiBvLnByb3RvdHlwZT1lLnByb3RvdHlwZSxvPW5ldyBvLGUuYXBwbHkobyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpLG99LGdvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRT0hMCxnb29nLmZ1bmN0aW9ucy5jYWNoZVJldHVyblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0LG89ITE7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRT8ob3x8KHQ9ZSgpLG89ITApLHQpOmUoKX19LGdvb2cuZnVuY3Rpb25zLm9uY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gZnVuY3Rpb24oKXtpZih0KXt2YXIgZT10O3Q9bnVsbCxlKCl9fX0sZ29vZy5mdW5jdGlvbnMuZGVib3VuY2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKG4pe2dvb2cuZ2xvYmFsLmNsZWFyVGltZW91dChyKTt2YXIgaT1hcmd1bWVudHM7cj1nb29nLmdsb2JhbC5zZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuYXBwbHkobyxpKX0pLHQpfX0sZ29vZy5mdW5jdGlvbnMudGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTAsbj0hMSxpPVtdLHM9ZnVuY3Rpb24oKXtyPTAsbiYmKG49ITEsYSgpKX0sYT1mdW5jdGlvbigpe3I9Z29vZy5nbG9iYWwuc2V0VGltZW91dChzLHQpLGUuYXBwbHkobyxpKX07cmV0dXJuIGZ1bmN0aW9uKGUpe2k9YXJndW1lbnRzLHI/bj0hMDphKCl9fSxnb29nLmZ1bmN0aW9ucy5yYXRlTGltaXQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTAsbj1mdW5jdGlvbigpe3I9MH07cmV0dXJuIGZ1bmN0aW9uKGkpe3J8fChyPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQobix0KSxlLmFwcGx5KG8sYXJndW1lbnRzKSl9fSxnb29nLmRvbS5IdG1sRWxlbWVudD1mdW5jdGlvbigpe30sZ29vZy5kb20uVGFnTmFtZT1mdW5jdGlvbihlKXt0aGlzLnRhZ05hbWVfPWV9LGdvb2cuZG9tLlRhZ05hbWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnTmFtZV99LGdvb2cuZG9tLlRhZ05hbWUuQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFcIiksZ29vZy5kb20uVGFnTmFtZS5BQkJSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUJCUlwiKSxnb29nLmRvbS5UYWdOYW1lLkFDUk9OWU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBQ1JPTllNXCIpLGdvb2cuZG9tLlRhZ05hbWUuQUREUkVTUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFERFJFU1NcIiksZ29vZy5kb20uVGFnTmFtZS5BUFBMRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUFBMRVRcIiksZ29vZy5kb20uVGFnTmFtZS5BUkVBPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVJFQVwiKSxnb29nLmRvbS5UYWdOYW1lLkFSVElDTEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUlRJQ0xFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVNJREU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBU0lERVwiKSxnb29nLmRvbS5UYWdOYW1lLkFVRElPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVVESU9cIiksZ29vZy5kb20uVGFnTmFtZS5CPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQlwiKSxnb29nLmRvbS5UYWdOYW1lLkJBU0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCQVNFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQkFTRUZPTlQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCQVNFRk9OVFwiKSxnb29nLmRvbS5UYWdOYW1lLkJEST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJESVwiKSxnb29nLmRvbS5UYWdOYW1lLkJETz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJET1wiKSxnb29nLmRvbS5UYWdOYW1lLkJJRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJJR1wiKSxnb29nLmRvbS5UYWdOYW1lLkJMT0NLUVVPVEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCTE9DS1FVT1RFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQk9EWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJPRFlcIiksZ29vZy5kb20uVGFnTmFtZS5CUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJSXCIpLGdvb2cuZG9tLlRhZ05hbWUuQlVUVE9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQlVUVE9OXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0FOVkFTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0FOVkFTXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5DRU5URVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDRU5URVJcIiksZ29vZy5kb20uVGFnTmFtZS5DSVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0lURVwiKSxnb29nLmRvbS5UYWdOYW1lLkNPREU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0RFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ09MPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ09MR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0xHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTU1BTkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT01NQU5EXCIpLGdvb2cuZG9tLlRhZ05hbWUuREFUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFcIiksZ29vZy5kb20uVGFnTmFtZS5EQVRBTElTVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFMSVNUXCIpLGdvb2cuZG9tLlRhZ05hbWUuREQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERFwiKSxnb29nLmRvbS5UYWdOYW1lLkRFTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRFTFwiKSxnb29nLmRvbS5UYWdOYW1lLkRFVEFJTFM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERVRBSUxTXCIpLGdvb2cuZG9tLlRhZ05hbWUuREZOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREZOXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElBTE9HPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElBTE9HXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElSXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElWXCIpLGdvb2cuZG9tLlRhZ05hbWUuREw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJETFwiKSxnb29nLmRvbS5UYWdOYW1lLkRUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRFRcIiksZ29vZy5kb20uVGFnTmFtZS5FTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkVNXCIpLGdvb2cuZG9tLlRhZ05hbWUuRU1CRUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJFTUJFRFwiKSxnb29nLmRvbS5UYWdOYW1lLkZJRUxEU0VUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRklFTERTRVRcIiksZ29vZy5kb20uVGFnTmFtZS5GSUdDQVBUSU9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRklHQ0FQVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLkZJR1VSRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJR1VSRVwiKSxnb29nLmRvbS5UYWdOYW1lLkZPTlQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT05UXCIpLGdvb2cuZG9tLlRhZ05hbWUuRk9PVEVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9PVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuRk9STT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPUk1cIiksZ29vZy5kb20uVGFnTmFtZS5GUkFNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZSQU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuRlJBTUVTRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVNFVFwiKSxnb29nLmRvbS5UYWdOYW1lLkgxPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDFcIiksZ29vZy5kb20uVGFnTmFtZS5IMj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgyXCIpLGdvb2cuZG9tLlRhZ05hbWUuSDM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIM1wiKSxnb29nLmRvbS5UYWdOYW1lLkg0PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDRcIiksZ29vZy5kb20uVGFnTmFtZS5INT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg1XCIpLGdvb2cuZG9tLlRhZ05hbWUuSDY9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINlwiKSxnb29nLmRvbS5UYWdOYW1lLkhFQUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIRUFEXCIpLGdvb2cuZG9tLlRhZ05hbWUuSEVBREVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBREVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuSEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEdST1VQXCIpLGdvb2cuZG9tLlRhZ05hbWUuSFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIUlwiKSxnb29nLmRvbS5UYWdOYW1lLkhUTUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIVE1MXCIpLGdvb2cuZG9tLlRhZ05hbWUuST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklcIiksZ29vZy5kb20uVGFnTmFtZS5JRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJRlJBTUVcIiksZ29vZy5kb20uVGFnTmFtZS5JTUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTUdcIiksZ29vZy5kb20uVGFnTmFtZS5JTlBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklOUFVUXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU5TXCIpLGdvb2cuZG9tLlRhZ05hbWUuSVNJTkRFWD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklTSU5ERVhcIiksZ29vZy5kb20uVGFnTmFtZS5LQkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJLQkRcIiksZ29vZy5kb20uVGFnTmFtZS5LRVlHRU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJLRVlHRU5cIiksZ29vZy5kb20uVGFnTmFtZS5MQUJFTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxBQkVMXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEVHRU5EPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTEVHRU5EXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMSVwiKSxnb29nLmRvbS5UYWdOYW1lLkxJTks9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMSU5LXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFJTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BSU5cIiksZ29vZy5kb20uVGFnTmFtZS5NQVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQVBcIiksZ29vZy5kb20uVGFnTmFtZS5NQVJLPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFSS1wiKSxnb29nLmRvbS5UYWdOYW1lLk1BVEg9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQVRIXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVOVT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FTlVcIiksZ29vZy5kb20uVGFnTmFtZS5NRU5VSVRFTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FTlVJVEVNXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEFcIiksZ29vZy5kb20uVGFnTmFtZS5NRVRFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuTkFWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTkFWXCIpLGdvb2cuZG9tLlRhZ05hbWUuTk9GUkFNRVM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJOT0ZSQU1FU1wiKSxnb29nLmRvbS5UYWdOYW1lLk5PU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9TQ1JJUFRcIiksZ29vZy5kb20uVGFnTmFtZS5PQkpFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPQkpFQ1RcIiksZ29vZy5kb20uVGFnTmFtZS5PTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9MXCIpLGdvb2cuZG9tLlRhZ05hbWUuT1BUR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPUFRHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLk9QVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9QVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLk9VVFBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9VVFBVVFwiKSxnb29nLmRvbS5UYWdOYW1lLlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQXCIpLGdvb2cuZG9tLlRhZ05hbWUuUEFSQU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQQVJBTVwiKSxnb29nLmRvbS5UYWdOYW1lLlBJQ1RVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQSUNUVVJFXCIpLGdvb2cuZG9tLlRhZ05hbWUuUFJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFJFXCIpLGdvb2cuZG9tLlRhZ05hbWUuUFJPR1JFU1M9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQUk9HUkVTU1wiKSxnb29nLmRvbS5UYWdOYW1lLlE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJRXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSUFwiKSxnb29nLmRvbS5UYWdOYW1lLlJUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRcIiksZ29vZy5kb20uVGFnTmFtZS5SVEM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSVENcIiksZ29vZy5kb20uVGFnTmFtZS5SVUJZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlVCWVwiKSxnb29nLmRvbS5UYWdOYW1lLlM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0FNUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNBTVBcIiksZ29vZy5kb20uVGFnTmFtZS5TQ1JJUFQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTQ1JJUFRcIiksZ29vZy5kb20uVGFnTmFtZS5TRUNUSU9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0VDVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLlNFTEVDVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNFTEVDVFwiKSxnb29nLmRvbS5UYWdOYW1lLlNNQUxMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU01BTExcIiksZ29vZy5kb20uVGFnTmFtZS5TT1VSQ0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTT1VSQ0VcIiksZ29vZy5kb20uVGFnTmFtZS5TUEFOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1BBTlwiKSxnb29nLmRvbS5UYWdOYW1lLlNUUklLRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUklLRVwiKSxnb29nLmRvbS5UYWdOYW1lLlNUUk9ORz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUk9OR1wiKSxnb29nLmRvbS5UYWdOYW1lLlNUWUxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1RZTEVcIiksZ29vZy5kb20uVGFnTmFtZS5TVUI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVUJcIiksZ29vZy5kb20uVGFnTmFtZS5TVU1NQVJZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VNTUFSWVwiKSxnb29nLmRvbS5UYWdOYW1lLlNVUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVUFwiKSxnb29nLmRvbS5UYWdOYW1lLlNWRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNWR1wiKSxnb29nLmRvbS5UYWdOYW1lLlRBQkxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEFCTEVcIiksZ29vZy5kb20uVGFnTmFtZS5UQk9EWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRCT0RZXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURFwiKSxnb29nLmRvbS5UYWdOYW1lLlRFTVBMQVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEVNUExBVEVcIiksZ29vZy5kb20uVGFnTmFtZS5URVhUQVJFQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRFWFRBUkVBXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEZPT1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURk9PVFwiKSxnb29nLmRvbS5UYWdOYW1lLlRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEhcIiksZ29vZy5kb20uVGFnTmFtZS5USEVBRD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRIRUFEXCIpLGdvb2cuZG9tLlRhZ05hbWUuVElNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJTUVcIiksZ29vZy5kb20uVGFnTmFtZS5USVRMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJVExFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUUlwiKSxnb29nLmRvbS5UYWdOYW1lLlRSQUNLPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFJBQ0tcIiksZ29vZy5kb20uVGFnTmFtZS5UVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRUXCIpLGdvb2cuZG9tLlRhZ05hbWUuVT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlVcIiksZ29vZy5kb20uVGFnTmFtZS5VTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlVMXCIpLGdvb2cuZG9tLlRhZ05hbWUuVkFSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVkFSXCIpLGdvb2cuZG9tLlRhZ05hbWUuVklERU89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJWSURFT1wiKSxnb29nLmRvbS5UYWdOYW1lLldCUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIldCUlwiKSxnb29nLmRvbS50YWdzPXt9LGdvb2cuZG9tLnRhZ3MuVk9JRF9UQUdTXz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGdvb2cuZG9tLnRhZ3MuaXNWb2lkVGFnPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09Z29vZy5kb20udGFncy5WT0lEX1RBR1NfW2VdfSxnb29nLmh0bWw9e30sZ29vZy5odG1sLnRydXN0ZWR0eXBlcz17fSxnb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUU/Z29vZy5jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3koZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FK1wiI2h0bWxcIik6bnVsbCxnb29nLnN0cmluZz17fSxnb29nLnN0cmluZy5UeXBlZFN0cmluZz1mdW5jdGlvbigpe30sZ29vZy5zdHJpbmcuQ29uc3Q9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV89ZT09PWdvb2cuc3RyaW5nLkNvbnN0LkdPT0dfU1RSSU5HX0NPTlNUUlVDVE9SX1RPS0VOX1BSSVZBVEVfJiZ0fHxcIlwiLHRoaXMuU1RSSU5HX0NPTlNUX1RZUEVfTUFSS0VSX19HT09HX1NUUklOR19TRUNVUklUWV9QUklWQVRFXz1nb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl99LGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nQ29uc3RWYWx1ZVdpdGhTZWN1cml0eUNvbnRyYWN0X19nb29nU3RyaW5nU2VjdXJpdHlQcml2YXRlX30sZ29vZy5zdHJpbmcuQ29uc3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDb25zdHtcIit0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV8rXCJ9XCJ9LGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0JiZlLmNvbnN0cnVjdG9yPT09Z29vZy5zdHJpbmcuQ29uc3QmJmUuU1RSSU5HX0NPTlNUX1RZUEVfTUFSS0VSX19HT09HX1NUUklOR19TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXz9lLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgQ29uc3QsIGdvdCAnXCIrZStcIidcIiksXCJ0eXBlX2Vycm9yOkNvbnN0XCIpfSxnb29nLnN0cmluZy5Db25zdC5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ29vZy5zdHJpbmcuQ29uc3QoZ29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV8sZSl9LGdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXz17fSxnb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXz17fSxnb29nLnN0cmluZy5Db25zdC5FTVBUWT1nb29nLnN0cmluZy5Db25zdC5mcm9tKFwiXCIpLGdvb2cuaHRtbC5TYWZlU2NyaXB0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX30sZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Db25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gMD09PShlPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSkubGVuZ3RoP2dvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZOmdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUNvbnN0YW50QW5kQXJncz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylvLnB1c2goZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiKFwiK2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKStcIikoXCIrby5qb2luKFwiLCBcIikrXCIpO1wiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUpzb249ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuU2FmZVNjcmlwdC5zdHJpbmdpZnlfKGUpKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU2NyaXB0e1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU2NyaXB0JiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTY3JpcHQmJmUuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVNjcmlwdCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZVNjcmlwdFwiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xz1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvPC9nLFwiXFxcXHgzY1wiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVTY3JpcHQpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVNjcmlwdChlKTplLHRoaXN9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZPWdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmZzPXt9LGdvb2cuZnMudXJsPXt9LGdvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5mcy51cmwuZ2V0VXJsT2JqZWN0XygpLmNyZWF0ZU9iamVjdFVSTChlKX0sZ29vZy5mcy51cmwucmV2b2tlT2JqZWN0VXJsPWZ1bmN0aW9uKGUpe2dvb2cuZnMudXJsLmdldFVybE9iamVjdF8oKS5yZXZva2VPYmplY3RVUkwoZSl9LGdvb2cuZnMudXJsLmdldFVybE9iamVjdF89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmZzLnVybC5maW5kVXJsT2JqZWN0XygpO2lmKG51bGwhPWUpcmV0dXJuIGU7dGhyb3cgRXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgYmxvYiBVUkxzXCIpfSxnb29nLmZzLnVybC5maW5kVXJsT2JqZWN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLlVSTCkmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuVVJMLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWwuVVJMOmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwud2Via2l0VVJMKSYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbC53ZWJraXRVUkw6Z29vZy5pc0RlZihnb29nLmdsb2JhbC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsOm51bGx9LGdvb2cuZnMudXJsLmJyb3dzZXJTdXBwb3J0c09iamVjdFVybHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9Z29vZy5mcy51cmwuZmluZFVybE9iamVjdF8oKX0sZ29vZy5pMThuPXt9LGdvb2cuaTE4bi5iaWRpPXt9LGdvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTD0hMSxnb29nLmkxOG4uYmlkaS5JU19SVEw9Z29vZy5pMThuLmJpZGkuRk9SQ0VfUlRMfHwoXCJhclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcImZhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiaGVcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJpd1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInBzXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwic2RcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ1Z1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInVyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwieWlcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKSkmJigyPT1nb29nLkxPQ0FMRS5sZW5ndGh8fFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKXx8Mzw9Z29vZy5MT0NBTEUubGVuZ3RoJiZcImNrYlwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwzKS50b0xvd2VyQ2FzZSgpJiYoMz09Z29vZy5MT0NBTEUubGVuZ3RofHxcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSl8fDc8PWdvb2cuTE9DQUxFLmxlbmd0aCYmKFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKSYmKFwiYWRsbVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcImFyYWJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJoZWJyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwibmtvb1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcInJvaGdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJ0aGFhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCkpfHw4PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJyb2hnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwidGhhYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpKSxnb29nLmkxOG4uYmlkaS5Gb3JtYXQ9e0xSRTpcIuKAqlwiLFJMRTpcIuKAq1wiLFBERjpcIuKArFwiLExSTTpcIuKAjlwiLFJMTTpcIuKAj1wifSxnb29nLmkxOG4uYmlkaS5EaXI9e0xUUjoxLFJUTDotMSxORVVUUkFMOjB9LGdvb2cuaTE4bi5iaWRpLlJJR0hUPVwicmlnaHRcIixnb29nLmkxOG4uYmlkaS5MRUZUPVwibGVmdFwiLGdvb2cuaTE4bi5iaWRpLkkxOE5fUklHSFQ9Z29vZy5pMThuLmJpZGkuSVNfUlRMP2dvb2cuaTE4bi5iaWRpLkxFRlQ6Z29vZy5pMThuLmJpZGkuUklHSFQsZ29vZy5pMThuLmJpZGkuSTE4Tl9MRUZUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5SSUdIVDpnb29nLmkxOG4uYmlkaS5MRUZULGdvb2cuaTE4bi5iaWRpLnRvRGlyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDxlP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6MD5lP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6dD9udWxsOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOm51bGw9PWU/bnVsbDplP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn0sZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfPVwiQS1aYS16w4Atw5bDmC3DtsO4Lcq4zIAt1pDgpIAt4b+/4oCO4rCALVxcdWQ4MDFcXHVkODA0LVxcdWQ4MzlcXHVkODNjLVxcdWRiZmbvpIAt76yc77iALe+5r++7vS3vv79cIixnb29nLmkxOG4uYmlkaS5ydGxDaGFyc189XCLWkS3br9u6LeCjv+KAj1xcdWQ4MDItXFx1ZDgwM1xcdWQ4M2EtXFx1ZDgzYu+snS3vt7/vubAt77u8XCIsZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfPS88W14+XSo+fCZbXjtdKzsvZyxnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfLFwiXCIpOmV9LGdvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5sdHJDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkuaGFzQW55UnRsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5oYXNSdGxDaGFyPWdvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bCxnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ18udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmx0clJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnJ0bFJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbENoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIWdvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcihlKSYmIWdvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcihlKX0sZ29vZy5pMThuLmJpZGkubHRyRGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIl5bXlwiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl0qW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkucnRsRGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIl5bXlwiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl0qW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxEaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNSdGxUZXh0PWdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhSdGwsZ29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aEx0cj1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJEaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNMdHJUZXh0PWdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHIsZ29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXz0vXmh0dHA6XFwvXFwvLiovLGdvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbFRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1nb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSxnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3QoZSl8fCFnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIoZSkmJiFnb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoZSl9LGdvb2cuaTE4bi5iaWRpLmx0ckV4aXREaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1bXlwiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl0qJFwiKSxnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKiRcIiksZ29vZy5pMThuLmJpZGkuZW5kc1dpdGhMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRXhpdERpckNoZWNrUmVfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5pc0x0ckV4aXRUZXh0PWdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoTHRyLGdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoUnRsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bEV4aXREaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNSdGxFeGl0VGV4dD1nb29nLmkxOG4uYmlkaS5lbmRzV2l0aFJ0bCxnb29nLmkxOG4uYmlkaS5ydGxMb2NhbGVzUmVfPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGdvb2cuaTE4bi5iaWRpLmlzUnRsTGFuZ3VhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bExvY2FsZXNSZV8udGVzdChlKX0sZ29vZy5pMThuLmJpZGkuYnJhY2tldEd1YXJkVGV4dFJlXz0vKFxcKC4qP1xcKSspfChcXFsuKj9cXF0rKXwoXFx7Lio/XFx9Kyl8KDwuKj8+KykvZyxnb29nLmkxOG4uYmlkaS5ndWFyZEJyYWNrZXRJblRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD0odm9pZCAwPT09dD9nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoZSk6dCk/Z29vZy5pMThuLmJpZGkuRm9ybWF0LlJMTTpnb29nLmkxOG4uYmlkaS5Gb3JtYXQuTFJNLGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5icmFja2V0R3VhcmRUZXh0UmVfLHQrXCIkJlwiK3QpfSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5IdG1sPWZ1bmN0aW9uKGUpe3JldHVyblwiPFwiPT1lLmNoYXJBdCgwKT9lLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1ydGxcIik6XCJcXG48c3BhbiBkaXI9cnRsPlwiK2UrXCI8L3NwYW4+XCJ9LGdvb2cuaTE4bi5iaWRpLmVuZm9yY2VSdGxJblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5STEUrZStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlTHRySW5IdG1sPWZ1bmN0aW9uKGUpe3JldHVyblwiPFwiPT1lLmNoYXJBdCgwKT9lLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1sdHJcIik6XCJcXG48c3BhbiBkaXI9bHRyPlwiK2UrXCI8L3NwYW4+XCJ9LGdvb2cuaTE4bi5iaWRpLmVuZm9yY2VMdHJJblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5MUkUrZStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfSxnb29nLmkxOG4uYmlkaS5kaW1lbnNpb25zUmVfPS86XFxzKihbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKS9nLGdvb2cuaTE4bi5iaWRpLmxlZnRSZV89L2xlZnQvZ2ksZ29vZy5pMThuLmJpZGkucmlnaHRSZV89L3JpZ2h0L2dpLGdvb2cuaTE4bi5iaWRpLnRlbXBSZV89LyUlJSUvZyxnb29nLmkxOG4uYmlkaS5taXJyb3JDU1M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5kaW1lbnNpb25zUmVfLFwiOiQxICQ0ICQzICQyXCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkubGVmdFJlXyxcIiUlJSVcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5yaWdodFJlXyxnb29nLmkxOG4uYmlkaS5MRUZUKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLnRlbXBSZV8sZ29vZy5pMThuLmJpZGkuUklHSFQpfSxnb29nLmkxOG4uYmlkaS5kb3VibGVRdW90ZVN1YnN0aXR1dGVSZV89LyhbXFx1MDU5MS1cXHUwNWYyXSlcIi9nLGdvb2cuaTE4bi5iaWRpLnNpbmdsZVF1b3RlU3Vic3RpdHV0ZVJlXz0vKFtcXHUwNTkxLVxcdTA1ZjJdKScvZyxnb29nLmkxOG4uYmlkaS5ub3JtYWxpemVIZWJyZXdRdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmRvdWJsZVF1b3RlU3Vic3RpdHV0ZVJlXyxcIiQx17RcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMdezXCIpfSxnb29nLmkxOG4uYmlkaS53b3JkU2VwYXJhdG9yUmVfPS9cXHMrLyxnb29nLmkxOG4uYmlkaS5oYXNOdW1lcmFsc1JlXz0vW1xcZFxcdTA2ZjAtXFx1MDZmOV0vLGdvb2cuaTE4bi5iaWRpLnJ0bERldGVjdGlvblRocmVzaG9sZF89LjQsZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgbz0wLHI9MCxuPSExO2ZvcihlPWdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpLnNwbGl0KGdvb2cuaTE4bi5iaWRpLndvcmRTZXBhcmF0b3JSZV8pLHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTtnb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsKGkpPyhvKysscisrKTpnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3QoaSk/bj0hMDpnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIoaSk/cisrOmdvb2cuaTE4bi5iaWRpLmhhc051bWVyYWxzUmVfLnRlc3QoaSkmJihuPSEwKX1yZXR1cm4gMD09cj9uP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6by9yPmdvb2cuaTE4bi5iaWRpLnJ0bERldGVjdGlvblRocmVzaG9sZF8/Z29vZy5pMThuLmJpZGkuRGlyLlJUTDpnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLmkxOG4uYmlkaS5kZXRlY3RSdGxEaXJlY3Rpb25hbGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5lc3RpbWF0ZURpcmVjdGlvbihlLHQpPT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMfSxnb29nLmkxOG4uYmlkaS5zZXRFbGVtZW50RGlyQW5kQWxpZ249ZnVuY3Rpb24oZSx0KXtlJiYodD1nb29nLmkxOG4uYmlkaS50b0Rpcih0KSkmJihlLnN0eWxlLnRleHRBbGlnbj10PT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMP2dvb2cuaTE4bi5iaWRpLlJJR0hUOmdvb2cuaTE4bi5iaWRpLkxFRlQsZS5kaXI9dD09Z29vZy5pMThuLmJpZGkuRGlyLlJUTD9cInJ0bFwiOlwibHRyXCIpfSxnb29nLmkxOG4uYmlkaS5zZXRFbGVtZW50RGlyQnlUZXh0RGlyZWN0aW9uYWxpdHk9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb24odCkpe2Nhc2UgZ29vZy5pMThuLmJpZGkuRGlyLkxUUjplLmRpcj1cImx0clwiO2JyZWFrO2Nhc2UgZ29vZy5pMThuLmJpZGkuRGlyLlJUTDplLmRpcj1cInJ0bFwiO2JyZWFrO2RlZmF1bHQ6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJkaXJcIil9fSxnb29nLmkxOG4uYmlkaS5EaXJlY3Rpb25hbFN0cmluZz1mdW5jdGlvbigpe30sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMudHJ1c3RlZFVSTF89bnVsbCx0aGlzLlRSVVNURURfUkVTT1VSQ0VfVVJMX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX30sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITAsZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmNsb25lV2l0aFBhcmFtcz1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKHRoaXMpLHI9KG89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5VUkxfUEFSQU1fUEFSU0VSXy5leGVjKG8pKVszXXx8XCJcIjtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvWzFdK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIj9cIixvWzJdfHxcIlwiLGUpK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIiNcIixyLHQpKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJUcnVzdGVkUmVzb3VyY2VVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTChlKS50b1N0cmluZygpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmZS5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgVHJ1c3RlZFJlc291cmNlVXJsLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpUcnVzdGVkUmVzb3VyY2VVcmxcIil9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gZS50cnVzdGVkVVJMXz9lLnRydXN0ZWRVUkxfOmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGUpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdD1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTtpZighZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5CQVNFX1VSTF8udGVzdChvKSl0aHJvdyBFcnJvcihcIkludmFsaWQgVHJ1c3RlZFJlc291cmNlVXJsIGZvcm1hdDogXCIrbyk7cmV0dXJuIGU9by5yZXBsYWNlKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl8sKGZ1bmN0aW9uKGUscil7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpKXRocm93IEVycm9yKCdGb3VuZCBtYXJrZXIsIFwiJytyKydcIiwgaW4gZm9ybWF0IHN0cmluZywgXCInK28rJ1wiLCBidXQgbm8gdmFsaWQgbGFiZWwgbWFwcGluZyBmb3VuZCBpbiBhcmdzOiAnK0pTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4oZT10W3JdKWluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpOmVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZSkpfSkpLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl89LyV7KFxcdyspfS9nLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfPS9eKChodHRwczopP1xcL1xcL1swLTlhLXouOltcXF0tXStcXC98XFwvW14vXFxcXF18W146L1xcXFwlXStcXC98W146L1xcXFwlXSpbPyNdfGFib3V0OmJsYW5rIykvaSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlVSTF9QQVJBTV9QQVJTRVJfPS9eKFtePyNdKikoXFw/W14jXSopPygjW1xcc1xcU10qKT8vLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZm9ybWF0V2l0aFBhcmFtcz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXQoZSx0KS5jbG9uZVdpdGhQYXJhbXMobyxyKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mcm9tQ29uc3RhbnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLG89MDtvPGUubGVuZ3RoO28rKyl0Kz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZVtvXSk7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw7cmV0dXJuIHQucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwoZSk6ZSxnb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWSYmKHQudHJ1c3RlZFVSTF89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlVVJMKGUpKSx0fSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc189ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGw9PW8pcmV0dXJuIHQ7aWYoZ29vZy5pc1N0cmluZyhvKSlyZXR1cm4gbz9lK2VuY29kZVVSSUNvbXBvbmVudChvKTpcIlwiO2Zvcih2YXIgciBpbiBvKXt2YXIgbj1vW3JdO249Z29vZy5pc0FycmF5KG4pP246W25dO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldO251bGwhPXMmJih0fHwodD1lKSx0Kz0odC5sZW5ndGg+ZS5sZW5ndGg/XCImXCI6XCJcIikrZW5jb2RlVVJJQ29tcG9uZW50KHIpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcocykpKX19cmV0dXJuIHR9LGdvb2cuc3RyaW5nLmludGVybmFsPXt9LGdvb2cuc3RyaW5nLmludGVybmFsLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09ZS5sYXN0SW5kZXhPZih0LDApfSxnb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aD1mdW5jdGlvbihlLHQpe3ZhciBvPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiAwPD1vJiZlLmluZGV4T2YodCxvKT09b30sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiAwPT1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlKHQsZS5zdWJzdHIoMCx0Lmxlbmd0aCkpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiAwPT1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlKHQsZS5zdWJzdHIoZS5sZW5ndGgtdC5sZW5ndGgsdC5sZW5ndGgpKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKT09dC50b0xvd2VyQ2FzZSgpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybi9eW1xcc1xceGEwXSokLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pbnRlcm5hbC50cmltPWdvb2cuVFJVU1RFRF9TSVRFJiZTdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfTpmdW5jdGlvbihlKXtyZXR1cm4vXltcXHNcXHhhMF0qKFtcXHNcXFNdKj8pW1xcc1xceGEwXSokLy5leGVjKGUpWzFdfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpPCh0PVN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKT8tMTplPT10PzA6MX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csdD9cIjxiciAvPlwiOlwiPGJyPlwiKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZT1mdW5jdGlvbihlLHQpe2lmKHQpZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXyxcIiZhbXA7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFwiJmx0O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXyxcIiZndDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXyxcIiZxdW90O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKTtlbHNle2lmKCFnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfLnRlc3QoZSkpcmV0dXJuIGU7LTEhPWUuaW5kZXhPZihcIiZcIikmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5BTVBfUkVfLFwiJmFtcDtcIikpLC0xIT1lLmluZGV4T2YoXCI8XCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFwiJmx0O1wiKSksLTEhPWUuaW5kZXhPZihcIj5cIikmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV8sXCImZ3Q7XCIpKSwtMSE9ZS5pbmRleE9mKCdcIicpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuUVVPVF9SRV8sXCImcXVvdDtcIikpLC0xIT1lLmluZGV4T2YoXCInXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuU0lOR0xFX1FVT1RFX1JFXyxcIiYjMzk7XCIpKSwtMSE9ZS5pbmRleE9mKFwiXFwwXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV8sXCImIzA7XCIpKX1yZXR1cm4gZX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXz0vJi9nLGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXz0vPC9nLGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXz0vPi9nLGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfPS9cIi9nLGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV89LycvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5OVUxMX1JFXz0vXFx4MDAvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfPS9bXFx4MDAmPD5cIiddLyxnb29nLnN0cmluZy5pbnRlcm5hbC53aGl0ZXNwYWNlRXNjYXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyKGUucmVwbGFjZSgvICAvZyxcIiAmIzE2MDtcIiksdCl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPWUuaW5kZXhPZih0KX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZS50b0xvd2VyQ2FzZSgpLHQudG9Mb3dlckNhc2UoKSl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucz1mdW5jdGlvbihlLHQpe3ZhciBvPTA7ZT1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltKFN0cmluZyhlKSkuc3BsaXQoXCIuXCIpLHQ9Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbShTdHJpbmcodCkpLnNwbGl0KFwiLlwiKTtmb3IodmFyIHI9TWF0aC5tYXgoZS5sZW5ndGgsdC5sZW5ndGgpLG49MDswPT1vJiZuPHI7bisrKXt2YXIgaT1lW25dfHxcIlwiLHM9dFtuXXx8XCJcIjtkb3tpZihpPS8oXFxkKikoXFxEKikoLiopLy5leGVjKGkpfHxbXCJcIixcIlwiLFwiXCIsXCJcIl0scz0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhzKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLDA9PWlbMF0ubGVuZ3RoJiYwPT1zWzBdLmxlbmd0aClicmVhaztvPTA9PWlbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoaVsxXSwxMCk7dmFyIGE9MD09c1sxXS5sZW5ndGg/MDpwYXJzZUludChzWzFdLDEwKTtvPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18obyxhKXx8Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXygwPT1pWzJdLmxlbmd0aCwwPT1zWzJdLmxlbmd0aCl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oaVsyXSxzWzJdKSxpPWlbM10scz1zWzNdfXdoaWxlKDA9PW8pfXJldHVybiBvfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTowfSxnb29nLmh0bWwuU2FmZVVybD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfVVJMX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkc9XCJhYm91dDppbnZhbGlkI3pDbG9zdXJlelwiLGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChlKS50b1N0cmluZygpfSxnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwmJmUuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVVybCYmZS5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlVXJsLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlVXJsXCIpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpfSxnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl89L14oPzphdWRpb1xcLyg/OjNncHAyfDNncHB8YWFjfEwxNnxtaWRpfG1wM3xtcDR8bXBlZ3xvZ2F8b2dnfG9wdXN8eC1tNGF8eC13YXZ8d2F2fHdlYm0pfGltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwfHgtaWNvbil8dGV4dFxcL2Nzdnx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtfHF1aWNrdGltZSkpKD86O1xcdys9KD86XFx3K3xcIltcXHc7PV0rXCIpKSokL2ksZ29vZy5odG1sLlNhZmVVcmwuaXNTYWZlTWltZVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TQUZFX01JTUVfVFlQRV9QQVRURVJOXy50ZXN0KGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tQmxvYj1mdW5jdGlvbihlKXtyZXR1cm4gZT1nb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChlLnR5cGUpP2dvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybChlKTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fPS9eZGF0YTooW14sXSopO2Jhc2U2NCxbYS16MC05K1xcL10rPSokL2ksZ29vZy5odG1sLlNhZmVVcmwuZnJvbURhdGFVcmw9ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9ZS5yZXBsYWNlKC8oJTBBfCUwRCkvZyxcIlwiKSkubWF0Y2goZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fKTtyZXR1cm4gdD10JiZnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdCh0WzFdKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodD9lOmdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tVGVsVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJ0ZWw6XCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fPS9ec2lwW3NdPzpbK2EtejAtOV8uISQlJicqXFwvPV5ge3x9fi1dK0AoW2EtejAtOS1dK1xcLikrW2EtejAtOV17Miw2M30kL2ksZ29vZy5odG1sLlNhZmVVcmwuZnJvbVNpcFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNJUF9VUkxfUEFUVEVSTl8udGVzdChkZWNvZGVVUklDb21wb25lbnQoZSkpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21GYWNlYm9va01lc3NlbmdlclVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwiZmItbWVzc2VuZ2VyOi8vc2hhcmVcIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVdoYXRzQXBwVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJ3aGF0c2FwcDovL3NlbmRcIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVNtc1VybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwic21zOlwiKSYmZ29vZy5odG1sLlNhZmVVcmwuaXNTbXNVcmxCb2R5VmFsaWRfKGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXz1mdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoXCIjXCIpO2lmKDA8dCYmKGU9ZS5zdWJzdHJpbmcoMCx0KSksISh0PWUubWF0Y2goL1s/Jl1ib2R5PS9naSkpKXJldHVybiEwO2lmKDE8dC5sZW5ndGgpcmV0dXJuITE7aWYoIShlPWUubWF0Y2goL1s/Jl1ib2R5PShbXiZdKikvKVsxXSkpcmV0dXJuITA7dHJ5e2RlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4vXig/OlthLXowLTlcXC1fLn5dfCVbMC05YS1mXXsyfSkrJC9pLnRlc3QoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21Tc2hVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcInNzaDovL1wiKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUNocm9tZUV4dGVuc2lvblVybD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15jaHJvbWUtZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVGaXJlZm94RXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXm1vei1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxlLHQpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUVkZ2VFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9ebXMtYnJvd3Nlci1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxlLHQpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF89ZnVuY3Rpb24oZSx0LG8pe3JldHVybihlPWUuZXhlYyh0KSk/KGU9ZVsxXSwtMT09KG8gaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdD9bZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKG8pXTpvLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKX0pKSkuaW5kZXhPZihlKSYmKHQ9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORykpOnQ9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKSl9LGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXz0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaSxnb29nLmh0bWwuU2FmZVVybC5TQUZFX1VSTF9QQVRURVJOPWdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXyxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2U6KGU9XCJvYmplY3RcIj09dHlwZW9mIGUmJmUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9lLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoZSksZ29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fLnRlc3QoZSl8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKSl9LGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOihlPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLHQmJi9eZGF0YTovaS50ZXN0KGUpJiYodD1nb29nLmh0bWwuU2FmZVVybC5mcm9tRGF0YVVybChlKSkuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpPT1lP3Q6KGdvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fLnRlc3QoZSksXCIlcyBkb2VzIG5vdCBtYXRjaCB0aGUgc2FmZSBVUkwgcGF0dGVyblwiLGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpKX0sZ29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgZ29vZy5odG1sLlNhZmVVcmw7cmV0dXJuIHQucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlVVJMKGUpOmUsdH0sZ29vZy5odG1sLlNhZmVVcmwuQUJPVVRfQkxBTks9Z29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiYWJvdXQ6YmxhbmtcIiksZ29vZy5odG1sLlNhZmVTdHlsZT1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e30sZ29vZy5odG1sLlNhZmVTdHlsZS5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZOihnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoKGUsXCI7XCIpLFwiTGFzdCBjaGFyYWN0ZXIgb2Ygc3R5bGUgc3RyaW5nIGlzIG5vdCAnOyc6IFwiK2UpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZSxcIjpcIiksXCJTdHlsZSBzdHJpbmcgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSAnOicsIHRvIHNwZWNpZnkgYSBcXFwibmFtZTogdmFsdWVcXFwiIHBhaXI6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlX30sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGV7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTdHlsZS51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTdHlsZSYmZS5TQUZFX1NUWUxFX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlU3R5bGUsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTdHlsZVwiKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGUpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1lLHRoaXN9LGdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFk9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkc9XCJ6Q2xvc3VyZXpcIixnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgdCxvPVwiXCI7Zm9yKHQgaW4gZSl7aWYoIS9eWy1fYS16QS1aMC05XSskLy50ZXN0KHQpKXRocm93IEVycm9yKFwiTmFtZSBhbGxvd3Mgb25seSBbLV9hLXpBLVowLTldLCBnb3Q6IFwiK3QpO3ZhciByPWVbdF07bnVsbCE9ciYmKG8rPXQrXCI6XCIrKHI9Z29vZy5pc0FycmF5KHIpP2dvb2cuYXJyYXkubWFwKHIsZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKS5qb2luKFwiIFwiKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZV8ocikpK1wiO1wiKX1yZXR1cm4gbz9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKG8pOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9LGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXz1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpcmV0dXJuJ3VybChcIicrZ29vZy5odG1sLlNhZmVVcmwudW53cmFwKGUpLnJlcGxhY2UoLzwvZyxcIiUzY1wiKS5yZXBsYWNlKC9bXFxcXFwiXS9nLFwiXFxcXCQmXCIpKydcIiknO2lmKGU9ZSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ18oU3RyaW5nKGUpKSwvW3s7fV0vLnRlc3QoZSkpdGhyb3cgbmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIlZhbHVlIGRvZXMgbm90IGFsbG93IFt7O31dLCBnb3Q6ICVzLlwiLFtlXSk7cmV0dXJuIGV9LGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlU3RyaW5nXz1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfLFwiJDFcIikucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLkZVTkNUSU9OU19SRV8sXCIkMVwiKS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXyxcInVybFwiKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9SRV8udGVzdCh0KT9nb29nLmh0bWwuU2FmZVN0eWxlLkNPTU1FTlRfUkVfLnRlc3QoZSk/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIGRpc2FsbG93cyBjb21tZW50cywgZ290OiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkcpOmdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRRdW90ZXNfKGUpP2dvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRTcXVhcmVCcmFja2V0c18oZSk/Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVVybF8oZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIHJlcXVpcmVzIGJhbGFuY2VkIHNxdWFyZSBicmFja2V0cyBhbmQgb25lIGlkZW50aWZpZXIgcGVyIHBhaXIgb2YgYnJhY2tldHMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgcmVxdWlyZXMgYmFsYW5jZWQgcXVvdGVzLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIGFsbG93cyBvbmx5IFwiK2dvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfQUxMT1dFRF9DSEFSU18rXCIgYW5kIHNpbXBsZSBmdW5jdGlvbnMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFF1b3Rlc189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLG89ITAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJBdChyKTtcIidcIj09biYmbz90PSF0OidcIic9PW4mJnQmJihvPSFvKX1yZXR1cm4gdCYmb30sZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFNxdWFyZUJyYWNrZXRzXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITAsbz0vXlstX2EtekEtWjAtOV0kLyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckF0KHIpO2lmKFwiXVwiPT1uKXtpZih0KXJldHVybiExO3Q9ITB9ZWxzZSBpZihcIltcIj09bil7aWYoIXQpcmV0dXJuITE7dD0hMX1lbHNlIGlmKCF0JiYhby50ZXN0KG4pKXJldHVybiExfXJldHVybiB0fSxnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfPVwiWy0sLlxcXCInJV8hIyBhLXpBLVowLTlcXFxcW1xcXFxdXVwiLGdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfPW5ldyBSZWdFeHAoXCJeXCIrZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXytcIiskXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXz0vXFxiKHVybFxcKFsgXFx0XFxuXSopKCdbIC0mKC1cXFtcXF0tfl0qJ3xcIlsgISMtXFxbXFxdLX5dKlwifFshIy0mKi1cXFtcXF0tfl0qKShbIFxcdFxcbl0qXFwpKS9nLGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXz0vXFxiKGhzbHxoc2xhfHJnYnxyZ2JhfG1hdHJpeHxjYWxjfG1pbm1heHxmaXQtY29udGVudHxyZXBlYXR8KHJvdGF0ZXxzY2FsZXx0cmFuc2xhdGUpKFh8WXxafDNkKT8pXFwoWy0rKi8wLTlhLXouJVxcW1xcXSwgXStcXCkvZyxnb29nLmh0bWwuU2FmZVN0eWxlLkNPTU1FTlRfUkVfPS9cXC9cXCovLGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVVcmxfPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5VUkxfUkVfLChmdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1cIlwiO3JldHVybiBvPW8ucmVwbGFjZSgvXihbJ1wiXSkoLiopXFwxJC8sKGZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbj10LG99KSksZT1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShvKS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCksdCtuK2UrbityfSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlLmNvbmNhdD1mdW5jdGlvbihlKXt2YXIgdD1cIlwiLG89ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG8pOnQrPWdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKGUpfTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGFyZ3VtZW50cyxvKSx0P2dvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCk6Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU1RZTEVfU0hFRVRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVSdWxlPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZSxcIjxcIikpdGhyb3cgRXJyb3IoXCJTZWxlY3RvciBkb2VzIG5vdCBhbGxvdyAnPCcsIGdvdDogXCIrZSk7dmFyIG89ZS5yZXBsYWNlKC8oJ3xcIikoKD8hXFwxKVteXFxyXFxuXFxmXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvZyxcIlwiKTtpZighL15bLV9hLXpBLVowLTkjLjoqICw+K35bXFxdKCk9XiR8XSskLy50ZXN0KG8pKXRocm93IEVycm9yKFwiU2VsZWN0b3IgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05Iy46KiAsPit+W1xcXFxdKCk9XiR8XSBhbmQgc3RyaW5ncywgZ290OiBcIitlKTtpZighZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0Lmhhc0JhbGFuY2VkQnJhY2tldHNfKG8pKXRocm93IEVycm9yKFwiKCkgYW5kIFtdIGluIHNlbGVjdG9yIG11c3QgYmUgYmFsYW5jZWQsIGdvdDogXCIrZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlfHwodD1nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZSh0KSksZT1lK1wie1wiK2dvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKHQpLnJlcGxhY2UoLzwvZyxcIlxcXFwzQyBcIikrXCJ9XCIsZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5oYXNCYWxhbmNlZEJyYWNrZXRzXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e1wiKFwiOlwiKVwiLFwiW1wiOlwiXVwifSxvPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZih0W25dKW8ucHVzaCh0W25dKTtlbHNlIGlmKGdvb2cub2JqZWN0LmNvbnRhaW5zKHQsbikmJm8ucG9wKCkhPW4pcmV0dXJuITF9cmV0dXJuIDA9PW8ubGVuZ3RofSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY29uY2F0PWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIsbz1mdW5jdGlvbihlKXtnb29nLmlzQXJyYXkoZSk/Z29vZy5hcnJheS5mb3JFYWNoKGUsbyk6dCs9Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcChlKX07cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChhcmd1bWVudHMsbyksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuRU1QVFk6KGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI8XCIpLFwiRm9yYmlkZGVuICc8JyBjaGFyYWN0ZXIgaW4gc3R5bGUgc2hlZXQgc3RyaW5nOiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlX30sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVTdHlsZVNoZWV0e1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCYmZS5TQUZFX1NUWUxFX1NIRUVUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVN0eWxlU2hlZXQsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTdHlsZVNoZWV0XCIpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhlKX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXz1lLHRoaXN9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5FTVBUWT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmxhYnM9e30sZ29vZy5sYWJzLnVzZXJBZ2VudD17fSxnb29nLmxhYnMudXNlckFnZW50LnV0aWw9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ189ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXygpO3JldHVybiBlJiYoZT1lLnVzZXJBZ2VudCk/ZTpcIlwifSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5uYXZpZ2F0b3J9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRfPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfKCksZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnNldFVzZXJBZ2VudD1mdW5jdGlvbihlKXtnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50Xz1lfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXygpfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRffSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyh0LGUpfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnModCxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxvPS8oXFx3W1xcdyBdKylcXC8oW15cXHNdKylcXHMqKD86XFwoKC4qPylcXCkpPy9nLHI9W107dD1vLmV4ZWMoZSk7KXIucHVzaChbdFsxXSx0WzJdLHRbM118fHZvaWQgMF0pO3JldHVybiByfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXI9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk9wZXJhXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiVHJpZGVudFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTVNJRVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZ2VcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRWRnL1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiT1BSXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGaXJlZm94XCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGeGlPU1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoU2FmYXJpXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJTYWZhcmlcIikmJiEoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ2hyb21lXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGsoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQW5kcm9pZFwiKSl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDb2FzdFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld189ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBhZFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBob25lXCIpKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0XygpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8oKSYmZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQXBwbGVXZWJLaXRcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV89ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ2hyb21lXCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDcmlPU1wiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikmJiEoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2lsaygpKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmE9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElFXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlQ2hyb21pdW09Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUNocm9taXVtXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYUNocm9taXVtPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3g9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ29hc3Q9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lvc1dlYnZpZXc9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld18sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQW5kcm9pZEJyb3dzZXI9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGs9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2lsa1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldFZlcnNpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPWdvb2cuYXJyYXkuZmluZChlLHIpLG9bZV18fFwiXCJ9dmFyIHQ9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO2lmKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCkpcmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRJRVZlcnNpb25fKHQpO3Q9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzKHQpO3ZhciBvPXt9O2dvb2cuYXJyYXkuZm9yRWFjaCh0LChmdW5jdGlvbihlKXtvW2VbMF1dPWVbMV19KSk7dmFyIHI9Z29vZy5wYXJ0aWFsKGdvb2cub2JqZWN0LmNvbnRhaW5zS2V5LG8pO3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpP2UoW1wiVmVyc2lvblwiLFwiT3BlcmFcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2UoKT9lKFtcIkVkZ2VcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2VDaHJvbWl1bSgpP2UoW1wiRWRnXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKT9lKFtcIkNocm9tZVwiLFwiQ3JpT1NcIl0pOih0PXRbMl0pJiZ0WzFdfHxcIlwifSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0VmVyc2lvbigpLGUpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0SUVWZXJzaW9uXz1mdW5jdGlvbihlKXt2YXIgdD0vcnY6ICooW1xcZFxcLl0qKS8uZXhlYyhlKTtpZih0JiZ0WzFdKXJldHVybiB0WzFdO3Q9XCJcIjt2YXIgbz0vTVNJRSArKFtcXGRcXC5dKykvLmV4ZWMoZSk7aWYobyYmb1sxXSlpZihlPS9UcmlkZW50XFwvKFxcZC5cXGQpLy5leGVjKGUpLFwiNy4wXCI9PW9bMV0paWYoZSYmZVsxXSlzd2l0Y2goZVsxXSl7Y2FzZVwiNC4wXCI6dD1cIjguMFwiO2JyZWFrO2Nhc2VcIjUuMFwiOnQ9XCI5LjBcIjticmVhaztjYXNlXCI2LjBcIjp0PVwiMTAuMFwiO2JyZWFrO2Nhc2VcIjcuMFwiOnQ9XCIxMS4wXCJ9ZWxzZSB0PVwiNy4wXCI7ZWxzZSB0PW9bMV07cmV0dXJuIHR9LGdvb2cuaHRtbC5TYWZlSHRtbD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8sdGhpcy5kaXJfPW51bGx9LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyX30sZ29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZUh0bWx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVIdG1sJiZlLlNBRkVfSFRNTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVIdG1sLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlSHRtbFwiKX0sZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbClyZXR1cm4gZTt2YXIgdD1cIm9iamVjdFwiPT10eXBlb2YgZSxvPW51bGw7cmV0dXJuIHQmJmUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nJiYobz1lLmdldERpcmVjdGlvbigpKSxlPXQmJmUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9lLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShlKSxvKX0sZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGVQcmVzZXJ2aW5nTmV3bGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWw/ZTooZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccihnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlLmdldERpcmVjdGlvbigpKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlUHJlc2VydmluZ05ld2xpbmVzQW5kU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sP2U6KGU9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwud2hpdGVzcGFjZUVzY2FwZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlLmdldERpcmVjdGlvbigpKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5mcm9tPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlLGdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfPS9eW2EtekEtWjAtOS1dKyQvLGdvb2cuaHRtbC5TYWZlSHRtbC5VUkxfQVRUUklCVVRFU189e2FjdGlvbjohMCxjaXRlOiEwLGRhdGE6ITAsZm9ybWFjdGlvbjohMCxocmVmOiEwLG1hbmlmZXN0OiEwLHBvc3RlcjohMCxzcmM6ITB9LGdvb2cuaHRtbC5TYWZlSHRtbC5OT1RfQUxMT1dFRF9UQUdfTkFNRVNfPXtBUFBMRVQ6ITAsQkFTRTohMCxFTUJFRDohMCxJRlJBTUU6ITAsTElOSzohMCxNQVRIOiEwLE1FVEE6ITAsT0JKRUNUOiEwLFNDUklQVDohMCxTVFlMRTohMCxTVkc6ITAsVEVNUExBVEU6ITB9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZShTdHJpbmcoZSkpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFN0cmluZyhlKSx0LG8pfSxnb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZT1mdW5jdGlvbihlKXtpZighZ29vZy5odG1sLlNhZmVIdG1sLlZBTElEX05BTUVTX0lOX1RBR18udGVzdChlKSl0aHJvdyBFcnJvcihcIkludmFsaWQgdGFnIG5hbWUgPFwiK2UrXCI+LlwiKTtpZihlLnRvVXBwZXJDYXNlKClpbiBnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXyl0aHJvdyBFcnJvcihcIlRhZyBuYW1lIDxcIitlK1wiPiBpcyBub3QgYWxsb3dlZCBmb3IgU2FmZUh0bWwuXCIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlSWZyYW1lPWZ1bmN0aW9uKGUsdCxvLHIpe2UmJmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGUpO3ZhciBuPXt9O3JldHVybiBuLnNyYz1lfHxudWxsLG4uc3JjZG9jPXQmJmdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAodCksZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMobix7c2FuZGJveDpcIlwifSxvKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGUscil9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYW5kYm94SWZyYW1lPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZSgpKXRocm93IEVycm9yKFwiVGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzYW5kYm94ZWQgaWZyYW1lcy5cIik7dmFyIG49e307cmV0dXJuIG4uc3JjPWU/Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplKGUpKTpudWxsLG4uc3JjZG9jPXR8fG51bGwsbi5zYW5kYm94PVwiXCIsZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMobix7fSxvKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGUscil9LGdvb2cuaHRtbC5TYWZlSHRtbC5jYW5Vc2VTYW5kYm94SWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZ2xvYmFsLkhUTUxJRnJhbWVFbGVtZW50JiZcInNhbmRib3hcImluIGdvb2cuZ2xvYmFsLkhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNjcmlwdFNyYz1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKSxlPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7c3JjOmV9LHt9LHQpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic2NyaXB0XCIsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdCl7dmFyIHI9by50b0xvd2VyQ2FzZSgpO2lmKFwibGFuZ3VhZ2VcIj09cnx8XCJzcmNcIj09cnx8XCJ0ZXh0XCI9PXJ8fFwidHlwZVwiPT1yKXRocm93IEVycm9yKCdDYW5ub3Qgc2V0IFwiJytyKydcIiBhdHRyaWJ1dGUnKX1mb3Iobz1cIlwiLGU9Z29vZy5hcnJheS5jb25jYXQoZSkscj0wO3I8ZS5sZW5ndGg7cisrKW8rPWdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcChlW3JdKTtyZXR1cm4gZT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcInNjcmlwdFwiLHQsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTdHlsZT1mdW5jdGlvbihlLHQpe3Q9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKHt0eXBlOlwidGV4dC9jc3NcIn0se30sdCk7dmFyIG89XCJcIjtlPWdvb2cuYXJyYXkuY29uY2F0KGUpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKW8rPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoZVtyXSk7cmV0dXJuIGU9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uobyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzdHlsZVwiLHQsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVNZXRhUmVmcmVzaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShlKSksKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2UoKSkmJmdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI7XCIpJiYoZT1cIidcIitlLnJlcGxhY2UoLycvZyxcIiUyN1wiKStcIidcIiksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJtZXRhXCIse1wiaHR0cC1lcXVpdlwiOlwicmVmcmVzaFwiLGNvbnRlbnQ6KHR8fDApK1wiOyB1cmw9XCIrZX0pfSxnb29nLmh0bWwuU2FmZUh0bWwuZ2V0QXR0ck5hbWVBbmRWYWx1ZV89ZnVuY3Rpb24oZSx0LG8pe2lmKG8gaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdClvPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChvKTtlbHNlIGlmKFwic3R5bGVcIj09dC50b0xvd2VyQ2FzZSgpKW89Z29vZy5odG1sLlNhZmVIdG1sLmdldFN0eWxlVmFsdWVfKG8pO2Vsc2V7aWYoL15vbi9pLnRlc3QodCkpdGhyb3cgRXJyb3IoJ0F0dHJpYnV0ZSBcIicrdCsnXCIgcmVxdWlyZXMgZ29vZy5zdHJpbmcuQ29uc3QgdmFsdWUsIFwiJytvKydcIiBnaXZlbi4nKTtpZih0LnRvTG93ZXJDYXNlKClpbiBnb29nLmh0bWwuU2FmZUh0bWwuVVJMX0FUVFJJQlVURVNfKWlmKG8gaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsKW89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAobyk7ZWxzZSBpZihvIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpbz1nb29nLmh0bWwuU2FmZVVybC51bndyYXAobyk7ZWxzZXtpZighZ29vZy5pc1N0cmluZyhvKSl0aHJvdyBFcnJvcignQXR0cmlidXRlIFwiJyt0KydcIiBvbiB0YWcgXCInK2UrJ1wiIHJlcXVpcmVzIGdvb2cuaHRtbC5TYWZlVXJsLCBnb29nLnN0cmluZy5Db25zdCwgb3Igc3RyaW5nLCB2YWx1ZSBcIicrbysnXCIgZ2l2ZW4uJyk7bz1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShvKS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCl9fXJldHVybiBvLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmcmJihvPW8uZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNTdHJpbmcobyl8fGdvb2cuaXNOdW1iZXIobyksXCJTdHJpbmcgb3IgbnVtYmVyIHZhbHVlIGV4cGVjdGVkLCBnb3QgXCIrdHlwZW9mIG8rXCIgd2l0aCB2YWx1ZTogXCIrbyksdCsnPVwiJytnb29nLnN0cmluZy5pbnRlcm5hbC5odG1sRXNjYXBlKFN0cmluZyhvKSkrJ1wiJ30sZ29vZy5odG1sLlNhZmVIdG1sLmdldFN0eWxlVmFsdWVfPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzT2JqZWN0KGUpKXRocm93IEVycm9yKCdUaGUgXCJzdHlsZVwiIGF0dHJpYnV0ZSByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVN0eWxlIG9yIG1hcCBvZiBzdHlsZSBwcm9wZXJ0aWVzLCAnK3R5cGVvZiBlK1wiIGdpdmVuOiBcIitlKTtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGV8fChlPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlKGUpKSxnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChlKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVdpdGhEaXI9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuKHQ9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZSh0LG8scikpLmRpcl89ZSx0fSxnb29nLmh0bWwuU2FmZUh0bWwuam9pbj1mdW5jdGlvbihlLHQpe3ZhciBvPShlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpKS5nZXREaXJlY3Rpb24oKSxyPVtdLG49ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG4pOihlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpLHIucHVzaChnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlPWUuZ2V0RGlyZWN0aW9uKCksbz09Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw/bz1lOmUhPWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMJiZvIT1lJiYobz1udWxsKSl9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2godCxuKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShyLmpvaW4oZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksbyl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdFdpdGhEaXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKTtyZXR1cm4gby5kaXJfPWUsb30sZ29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlLHQpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVIdG1sKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUsdCl9LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVIVE1MKGUpOmUsdGhpcy5kaXJfPXQsdGhpc30sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPW51bGwsbj1cIjxcIitlK2dvb2cuaHRtbC5TYWZlSHRtbC5zdHJpbmdpZnlBdHRyaWJ1dGVzKGUsdCk7cmV0dXJuIGdvb2cuaXNEZWZBbmROb3ROdWxsKG8pP2dvb2cuaXNBcnJheShvKXx8KG89W29dKTpvPVtdLGdvb2cuZG9tLnRhZ3MuaXNWb2lkVGFnKGUudG9Mb3dlckNhc2UoKSk/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoIW8ubGVuZ3RoLFwiVm9pZCB0YWcgPFwiK2UrXCI+IGRvZXMgbm90IGFsbG93IGNvbnRlbnQuXCIpLG4rPVwiPlwiKToocj1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KG8pLG4rPVwiPlwiK2dvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAocikrXCI8L1wiK2UrXCI+XCIscj1yLmdldERpcmVjdGlvbigpKSwoZT10JiZ0LmRpcikmJihyPS9eKGx0cnxydGx8YXV0bykkL2kudGVzdChlKT9nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTDpudWxsKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShuLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcz1mdW5jdGlvbihlLHQpe3ZhciBvPVwiXCI7aWYodClmb3IodmFyIHIgaW4gdCl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QocikpdGhyb3cgRXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUgXCInK3IrJ1wiLicpO3ZhciBuPXRbcl07Z29vZy5pc0RlZkFuZE5vdE51bGwobikmJihvKz1cIiBcIitnb29nLmh0bWwuU2FmZUh0bWwuZ2V0QXR0ck5hbWVBbmRWYWx1ZV8oZSxyLG4pKX1yZXR1cm4gb30sZ29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpZ29vZy5hc3NlcnRzLmFzc2VydChyLnRvTG93ZXJDYXNlKCk9PXIsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksbltyXT1lW3JdO2ZvcihyIGluIHQpZ29vZy5hc3NlcnRzLmFzc2VydChyLnRvTG93ZXJDYXNlKCk9PXIsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksbltyXT10W3JdO2ZvcihyIGluIG8pe3ZhciBpPXIudG9Mb3dlckNhc2UoKTtpZihpIGluIGUpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBvdmVycmlkZSBcIicraSsnXCIgYXR0cmlidXRlLCBnb3QgXCInK3IrJ1wiIHdpdGggdmFsdWUgXCInK29bcl0rJ1wiJyk7aSBpbiB0JiZkZWxldGUgbltpXSxuW3JdPW9bcl19cmV0dXJuIG59LGdvb2cuaHRtbC5TYWZlSHRtbC5ET0NUWVBFX0hUTUw9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCI8IURPQ1RZUEUgaHRtbD5cIixnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLkVNUFRZPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiXCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5CUj1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIjxicj5cIixnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zPXt9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlSHRtbEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQsb3x8bnVsbCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU2NyaXB0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZUZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVN0eWxlU2hlZXRGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnRydXN0ZWRSZXNvdXJjZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmRvbS5zYWZlPXt9LGdvb2cuZG9tLnNhZmUuSW5zZXJ0QWRqYWNlbnRIdG1sUG9zaXRpb249e0FGVEVSQkVHSU46XCJhZnRlcmJlZ2luXCIsQUZURVJFTkQ6XCJhZnRlcmVuZFwiLEJFRk9SRUJFR0lOOlwiYmVmb3JlYmVnaW5cIixCRUZPUkVFTkQ6XCJiZWZvcmVlbmRcIn0sZ29vZy5kb20uc2FmZS5pbnNlcnRBZGphY2VudEh0bWw9ZnVuY3Rpb24oZSx0LG8pe2UuaW5zZXJ0QWRqYWNlbnRIVE1MKHQsZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKG8pKX0sZ29vZy5kb20uc2FmZS5TRVRfSU5ORVJfSFRNTF9ESVNBTExPV0VEX1RBR1NfPXtNQVRIOiEwLFNDUklQVDohMCxTVFlMRTohMCxTVkc6ITAsVEVNUExBVEU6ITB9LGdvb2cuZG9tLnNhZmUuaXNJbm5lckh0bWxDbGVhbnVwUmVjdXJzaXZlXz1nb29nLmZ1bmN0aW9ucy5jYWNoZVJldHVyblZhbHVlKChmdW5jdGlvbigpe2lmKGdvb2cuREVCVUcmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudClyZXR1cm4hMTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxlLmFwcGVuZENoaWxkKHQpLCEoZ29vZy5ERUJVRyYmIWUuZmlyc3RDaGlsZCkmJih0PWUuZmlyc3RDaGlsZC5maXJzdENoaWxkLGUuaW5uZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChnb29nLmh0bWwuU2FmZUh0bWwuRU1QVFkpLCF0LnBhcmVudEVsZW1lbnQpfSkpLGdvb2cuZG9tLnNhZmUudW5zYWZlU2V0SW5uZXJIdG1sRG9Ob3RVc2VPckVsc2U9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmRvbS5zYWZlLmlzSW5uZXJIdG1sQ2xlYW51cFJlY3Vyc2l2ZV8oKSlmb3IoO2UubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUubGFzdENoaWxkKTtlLmlubmVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SW5uZXJIdG1sPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTKXt2YXIgbz1lLnRhZ05hbWUudG9VcHBlckNhc2UoKTtpZihnb29nLmRvbS5zYWZlLlNFVF9JTk5FUl9IVE1MX0RJU0FMTE9XRURfVEFHU19bb10pdGhyb3cgRXJyb3IoXCJnb29nLmRvbS5zYWZlLnNldElubmVySHRtbCBjYW5ub3QgYmUgdXNlZCB0byBzZXQgY29udGVudCBvZiBcIitlLnRhZ05hbWUrXCIuXCIpfWdvb2cuZG9tLnNhZmUudW5zYWZlU2V0SW5uZXJIdG1sRG9Ob3RVc2VPckVsc2UoZSx0KX0sZ29vZy5kb20uc2FmZS5zZXRPdXRlckh0bWw9ZnVuY3Rpb24oZSx0KXtlLm91dGVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0Rm9ybUVsZW1lbnRBY3Rpb249ZnVuY3Rpb24oZSx0KXt0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRm9ybUVsZW1lbnQoZSkuYWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0QnV0dG9uRm9ybUFjdGlvbj1mdW5jdGlvbihlLHQpe3Q9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50KGUpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbnB1dEZvcm1BY3Rpb249ZnVuY3Rpb24oZSx0KXt0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW5wdXRFbGVtZW50KGUpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRTdHlsZT1mdW5jdGlvbihlLHQpe2Uuc3R5bGUuY3NzVGV4dD1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcCh0KX0sZ29vZy5kb20uc2FmZS5kb2N1bWVudFdyaXRlPWZ1bmN0aW9uKGUsdCl7ZS53cml0ZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCkpfSxnb29nLmRvbS5zYWZlLnNldEFuY2hvckhyZWY9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEFuY2hvckVsZW1lbnQoZSksdD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxlLmhyZWY9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbWFnZVNyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW1hZ2VFbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOmltYWdlXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRBdWRpb1NyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQXVkaW9FbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOmF1ZGlvXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRWaWRlb1NyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVmlkZW9FbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOnZpZGVvXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRFbWJlZFNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRGcmFtZVNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJZnJhbWVTcmM9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQoZSksZS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldElmcmFtZVNyY2RvYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSUZyYW1lRWxlbWVudChlKSxlLnNyY2RvYz1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0TGlua0hyZWZBbmRSZWw9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MTGlua0VsZW1lbnQoZSksZS5yZWw9byxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucyhvLFwic3R5bGVzaGVldFwiKT8oZ29vZy5hc3NlcnRzLmFzc2VydCh0IGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCwnVVJMIG11c3QgYmUgVHJ1c3RlZFJlc291cmNlVXJsIGJlY2F1c2UgXCJyZWxcIiBjb250YWlucyBcInN0eWxlc2hlZXRcIicpLGUuaHJlZj1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCkpOmUuaHJlZj10IGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybD9nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCk6dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCk6Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSl9LGdvb2cuZG9tLnNhZmUuc2V0T2JqZWN0RGF0YT1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MT2JqZWN0RWxlbWVudChlKSxlLmRhdGE9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldFNjcmlwdFNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudChlKSxlLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwodCksKHQ9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHQpfSxnb29nLmRvbS5zYWZlLnNldFNjcmlwdENvbnRlbnQ9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQoZSksZS50ZXh0PWdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQodCksKHQ9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHQpfSxnb29nLmRvbS5zYWZlLnNldExvY2F0aW9uSHJlZj1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihlKSx0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGUuaHJlZj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLmFzc2lnbkxvY2F0aW9uPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5hc3NpZ24oZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KSl9LGdvb2cuZG9tLnNhZmUucmVwbGFjZUxvY2F0aW9uPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCkpfSxnb29nLmRvbS5zYWZlLm9wZW5JbldpbmRvdz1mdW5jdGlvbihlLHQsbyxyLG4pe3JldHVybiBlPWUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGUpLCh0fHxnb29nLmdsb2JhbCkub3Blbihnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGUpLG8/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKG8pOlwiXCIscixuKX0sZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmdIdG1sPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nKGUsdCxcInRleHQvaHRtbFwiKX0sZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlLnBhcnNlRnJvbVN0cmluZyhnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCksbyl9LGdvb2cuZG9tLnNhZmUuY3JlYXRlSW1hZ2VGcm9tQmxvYj1mdW5jdGlvbihlKXtpZighL15pbWFnZVxcLy4qL2cudGVzdChlLnR5cGUpKXRocm93IEVycm9yKFwiZ29vZy5kb20uc2FmZS5jcmVhdGVJbWFnZUZyb21CbG9iIG9ubHkgYWNjZXB0cyBNSU1FIHR5cGUgaW1hZ2UvLiouXCIpO3ZhciB0PWdvb2cuZ2xvYmFsLlVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cmV0dXJuKGU9bmV3IGdvb2cuZ2xvYmFsLkltYWdlKS5vbmxvYWQ9ZnVuY3Rpb24oKXtnb29nLmdsb2JhbC5VUkwucmV2b2tlT2JqZWN0VVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEltYWdlU3JjKGUsZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVVcmxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3QoZ29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIkltYWdlIGJsb2IgVVJMLlwiKSx0KSksZX0sZ29vZy5zdHJpbmcuREVURUNUX0RPVUJMRV9FU0NBUElORz0hMSxnb29nLnN0cmluZy5GT1JDRV9OT05fRE9NX0hUTUxfVU5FU0NBUElORz0hMSxnb29nLnN0cmluZy5Vbmljb2RlPXtOQlNQOlwiwqBcIn0sZ29vZy5zdHJpbmcuc3RhcnRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoLGdvb2cuc3RyaW5nLmVuZHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoLGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aCxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aCxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFcXVhbHM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzLGdvb2cuc3RyaW5nLnN1YnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89ZS5zcGxpdChcIiVzXCIpLHI9XCJcIixuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtuLmxlbmd0aCYmMTxvLmxlbmd0aDspcis9by5zaGlmdCgpK24uc2hpZnQoKTtyZXR1cm4gcitvLmpvaW4oXCIlc1wiKX0sZ29vZy5zdHJpbmcuY29sbGFwc2VXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXHNcXHhhMF0rL2csXCIgXCIpLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9LGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2U9Z29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZSxnb29nLnN0cmluZy5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiAwPT1lLmxlbmd0aH0sZ29vZy5zdHJpbmcuaXNFbXB0eT1nb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlLGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2VTYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLm1ha2VTYWZlKGUpKX0sZ29vZy5zdHJpbmcuaXNFbXB0eVNhZmU9Z29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZVNhZmUsZ29vZy5zdHJpbmcuaXNCcmVha2luZ1doaXRlc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXlxcdFxcblxcciBdLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc0FscGhhPWZ1bmN0aW9uKGUpe3JldHVybiEvW15hLXpBLVpdLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXjAtOV0vLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzQWxwaGFOdW1lcmljPWZ1bmN0aW9uKGUpe3JldHVybiEvW15hLXpBLVowLTldLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc1NwYWNlPWZ1bmN0aW9uKGUpe3JldHVyblwiIFwiPT1lfSxnb29nLnN0cmluZy5pc1VuaWNvZGVDaGFyPWZ1bmN0aW9uKGUpe3JldHVybiAxPT1lLmxlbmd0aCYmXCIgXCI8PWUmJlwiflwiPj1lfHxcIsKAXCI8PWUmJlwi77+9XCI+PWV9LGdvb2cuc3RyaW5nLnN0cmlwTmV3bGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKSsvZyxcIiBcIil9LGdvb2cuc3RyaW5nLmNhbm9uaWNhbGl6ZU5ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikvZyxcIlxcblwiKX0sZ29vZy5zdHJpbmcubm9ybWFsaXplV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHhhMHxcXHMvZyxcIiBcIil9LGdvb2cuc3RyaW5nLm5vcm1hbGl6ZVNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHhhMHxbIFxcdF0rL2csXCIgXCIpfSxnb29nLnN0cmluZy5jb2xsYXBzZUJyZWFraW5nU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXHRcXHJcXG4gXSsvZyxcIiBcIikucmVwbGFjZSgvXltcXHRcXHJcXG4gXSt8W1xcdFxcclxcbiBdKyQvZyxcIlwiKX0sZ29vZy5zdHJpbmcudHJpbT1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltLGdvb2cuc3RyaW5nLnRyaW1MZWZ0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL15bXFxzXFx4YTBdKy8sXCJcIil9LGdvb2cuc3RyaW5nLnRyaW1SaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxzXFx4YTBdKyQvLFwiXCIpfSxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUsZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXz1mdW5jdGlvbihlLHQsbyl7aWYoZT09dClyZXR1cm4gMDtpZighZSlyZXR1cm4tMTtpZighdClyZXR1cm4gMTtmb3IodmFyIHI9ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKG8pLG49dC50b0xvd2VyQ2FzZSgpLm1hdGNoKG8pLGk9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpLHM9MDtzPGk7cysrKXtvPXJbc107dmFyIGE9bltzXTtpZihvIT1hKXJldHVybiBlPXBhcnNlSW50KG8sMTApLCFpc05hTihlKSYmKHQ9cGFyc2VJbnQoYSwxMCksIWlzTmFOKHQpJiZlLXQpP2UtdDpvPGE/LTE6MX1yZXR1cm4gci5sZW5ndGghPW4ubGVuZ3RoP3IubGVuZ3RoLW4ubGVuZ3RoOmU8dD8tMToxfSxnb29nLnN0cmluZy5pbnRBd2FyZUNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXyhlLHQsL1xcZCt8XFxEKy9nKX0sZ29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXyhlLHQsL1xcZCt8XFwuXFxkK3xcXEQrL2cpfSxnb29nLnN0cmluZy5udW1lcmF0ZUNvbXBhcmU9Z29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmUsZ29vZy5zdHJpbmcudXJsRW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGUpKX0sZ29vZy5zdHJpbmcudXJsRGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpfSxnb29nLnN0cmluZy5uZXdMaW5lVG9Ccj1nb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccixnb29nLnN0cmluZy5odG1sRXNjYXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Z29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShlLHQpLGdvb2cuc3RyaW5nLkRFVEVDVF9ET1VCTEVfRVNDQVBJTkcmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5FX1JFXyxcIiYjMTAxO1wiKSksZX0sZ29vZy5zdHJpbmcuRV9SRV89L2UvZyxnb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5jb250YWlucyhlLFwiJlwiKT8hZ29vZy5zdHJpbmcuRk9SQ0VfTk9OX0RPTV9IVE1MX1VORVNDQVBJTkcmJlwiZG9jdW1lbnRcImluIGdvb2cuZ2xvYmFsP2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV8oZSk6Z29vZy5zdHJpbmcudW5lc2NhcGVQdXJlWG1sRW50aXRpZXNfKGUpOmV9LGdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNXaXRoRG9jdW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZSxcIiZcIik/Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tXyhlLHQpOmV9LGdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV89ZnVuY3Rpb24oZSx0KXt2YXIgbz17XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJ30scj10P3QuY3JlYXRlRWxlbWVudChcImRpdlwiKTpnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLnJlcGxhY2UoZ29vZy5zdHJpbmcuSFRNTF9FTlRJVFlfUEFUVEVSTl8sKGZ1bmN0aW9uKGUsdCl7dmFyIG49b1tlXTtyZXR1cm4gbnx8KFwiI1wiPT10LmNoYXJBdCgwKSYmKHQ9TnVtYmVyKFwiMFwiK3Quc3Vic3RyKDEpKSxpc05hTih0KXx8KG49U3RyaW5nLmZyb21DaGFyQ29kZSh0KSkpLG58fChnb29nLmRvbS5zYWZlLnNldElubmVySHRtbChyLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlSHRtbEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdChnb29nLnN0cmluZy5Db25zdC5mcm9tKFwiU2luZ2xlIEhUTUwgZW50aXR5LlwiKSxlK1wiIFwiKSksbj1yLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnNsaWNlKDAsLTEpKSxvW2VdPW4pfSkpfSxnb29nLnN0cmluZy51bmVzY2FwZVB1cmVYbWxFbnRpdGllc189ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VcImFtcFwiOnJldHVyblwiJlwiO2Nhc2VcImx0XCI6cmV0dXJuXCI8XCI7Y2FzZVwiZ3RcIjpyZXR1cm5cIj5cIjtjYXNlXCJxdW90XCI6cmV0dXJuJ1wiJztkZWZhdWx0OnJldHVyblwiI1wiIT10LmNoYXJBdCgwKXx8KHQ9TnVtYmVyKFwiMFwiK3Quc3Vic3RyKDEpKSxpc05hTih0KSk/ZTpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX0pKX0sZ29vZy5zdHJpbmcuSFRNTF9FTlRJVFlfUEFUVEVSTl89LyYoW147XFxzPCZdKyk7Py9nLGdvb2cuc3RyaW5nLndoaXRlc3BhY2VFc2NhcGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubmV3TGluZVRvQnIoZS5yZXBsYWNlKC8gIC9nLFwiICYjMTYwO1wiKSx0KX0sZ29vZy5zdHJpbmcucHJlc2VydmVTcGFjZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKF58W1xcbiBdKSAvZyxcIiQxXCIrZ29vZy5zdHJpbmcuVW5pY29kZS5OQlNQKX0sZ29vZy5zdHJpbmcuc3RyaXBRdW90ZXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89dC5sZW5ndGgscj0wO3I8bztyKyspe3ZhciBuPTE9PW8/dDp0LmNoYXJBdChyKTtpZihlLmNoYXJBdCgwKT09biYmZS5jaGFyQXQoZS5sZW5ndGgtMSk9PW4pcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSl9cmV0dXJuIGV9LGdvb2cuc3RyaW5nLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbyYmKGU9Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllcyhlKSksZS5sZW5ndGg+dCYmKGU9ZS5zdWJzdHJpbmcoMCx0LTMpK1wiLi4uXCIpLG8mJihlPWdvb2cuc3RyaW5nLmh0bWxFc2NhcGUoZSkpLGV9LGdvb2cuc3RyaW5nLnRydW5jYXRlTWlkZGxlPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG8mJihlPWdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXMoZSkpLHImJmUubGVuZ3RoPnQpe3I+dCYmKHI9dCk7dmFyIG49ZS5sZW5ndGgtcjtlPWUuc3Vic3RyaW5nKDAsdC1yKStcIi4uLlwiK2Uuc3Vic3RyaW5nKG4pfWVsc2UgZS5sZW5ndGg+dCYmKHI9TWF0aC5mbG9vcih0LzIpLG49ZS5sZW5ndGgtcixlPWUuc3Vic3RyaW5nKDAscit0JTIpK1wiLi4uXCIrZS5zdWJzdHJpbmcobikpO3JldHVybiBvJiYoZT1nb29nLnN0cmluZy5odG1sRXNjYXBlKGUpKSxlfSxnb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfPXtcIlxcMFwiOlwiXFxcXDBcIixcIlxcYlwiOlwiXFxcXGJcIixcIlxcZlwiOlwiXFxcXGZcIixcIlxcblwiOlwiXFxcXG5cIixcIlxcclwiOlwiXFxcXHJcIixcIlxcdFwiOlwiXFxcXHRcIixcIlxcdlwiOlwiXFxcXHgwQlwiLCdcIic6J1xcXFxcIicsXCJcXFxcXCI6XCJcXFxcXFxcXFwiLFwiPFwiOlwiXFxcXHUwMDNDXCJ9LGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfPXtcIidcIjpcIlxcXFwnXCJ9LGdvb2cuc3RyaW5nLnF1b3RlPWZ1bmN0aW9uKGUpe2U9U3RyaW5nKGUpO2Zvcih2YXIgdD1bJ1wiJ10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lLmNoYXJBdChvKSxuPXIuY2hhckNvZGVBdCgwKTt0W28rMV09Z29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzX1tyXXx8KDMxPG4mJjEyNz5uP3I6Z29vZy5zdHJpbmcuZXNjYXBlQ2hhcihyKSl9cmV0dXJuIHQucHVzaCgnXCInKSx0LmpvaW4oXCJcIil9LGdvb2cuc3RyaW5nLmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wO288ZS5sZW5ndGg7bysrKXRbb109Z29vZy5zdHJpbmcuZXNjYXBlQ2hhcihlLmNoYXJBdChvKSk7cmV0dXJuIHQuam9pbihcIlwiKX0sZ29vZy5zdHJpbmcuZXNjYXBlQ2hhcj1mdW5jdGlvbihlKXtpZihlIGluIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfKXJldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1tlXTtpZihlIGluIGdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc18pcmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2VdPWdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc19bZV07dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO2lmKDMxPHQmJjEyNz50KXZhciBvPWU7ZWxzZSAyNTY+dD8obz1cIlxcXFx4XCIsKDE2PnR8fDI1Njx0KSYmKG8rPVwiMFwiKSk6KG89XCJcXFxcdVwiLDQwOTY+dCYmKG8rPVwiMFwiKSksbys9dC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bZV09b30sZ29vZy5zdHJpbmcuY29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMsZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMsZ29vZy5zdHJpbmcuY291bnRPZj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZ0P2Uuc3BsaXQodCkubGVuZ3RoLTE6MH0sZ29vZy5zdHJpbmcucmVtb3ZlQXQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWU7cmV0dXJuIDA8PXQmJnQ8ZS5sZW5ndGgmJjA8byYmKHI9ZS5zdWJzdHIoMCx0KStlLnN1YnN0cih0K28sZS5sZW5ndGgtdC1vKSkscn0sZ29vZy5zdHJpbmcucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LFwiXCIpfSxnb29nLnN0cmluZy5yZW1vdmVBbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1uZXcgUmVnRXhwKGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSh0KSxcImdcIiksZS5yZXBsYWNlKHQsXCJcIil9LGdvb2cuc3RyaW5nLnJlcGxhY2VBbGw9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0PW5ldyBSZWdFeHAoZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKHQpLFwiZ1wiKSxlLnJlcGxhY2UodCxvLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKSl9LGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbLSgpXFxbXFxde30rPyouJFxcXnwsOiM8IVxcXFxdKS9nLFwiXFxcXCQxXCIpLnJlcGxhY2UoL1xceDA4L2csXCJcXFxceDA4XCIpfSxnb29nLnN0cmluZy5yZXBlYXQ9U3RyaW5nLnByb3RvdHlwZS5yZXBlYXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBlYXQodCl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5KHQrMSkuam9pbihlKX0sZ29vZy5zdHJpbmcucGFkTnVtYmVyPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4tMT09KG89KGU9Z29vZy5pc0RlZihvKT9lLnRvRml4ZWQobyk6U3RyaW5nKGUpKS5pbmRleE9mKFwiLlwiKSkmJihvPWUubGVuZ3RoKSxnb29nLnN0cmluZy5yZXBlYXQoXCIwXCIsTWF0aC5tYXgoMCx0LW8pKStlfSxnb29nLnN0cmluZy5tYWtlU2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOlN0cmluZyhlKX0sZ29vZy5zdHJpbmcuYnVpbGRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLFwiXCIpfSxnb29nLnN0cmluZy5nZXRSYW5kb21TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcigyMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KStNYXRoLmFicyhNYXRoLmZsb29yKDIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKSleZ29vZy5ub3coKSkudG9TdHJpbmcoMzYpfSxnb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZVZlcnNpb25zLGdvb2cuc3RyaW5nLmhhc2hDb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG89MDtvPGUubGVuZ3RoOysrbyl0PTMxKnQrZS5jaGFyQ29kZUF0KG8pPj4+MDtyZXR1cm4gdH0sZ29vZy5zdHJpbmcudW5pcXVlU3RyaW5nQ291bnRlcl89MjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpfDAsZ29vZy5zdHJpbmcuY3JlYXRlVW5pcXVlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJnb29nX1wiK2dvb2cuc3RyaW5nLnVuaXF1ZVN0cmluZ0NvdW50ZXJfKyt9LGdvb2cuc3RyaW5nLnRvTnVtYmVyPWZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlcihlKTtyZXR1cm4gMD09dCYmZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShlKT9OYU46dH0sZ29vZy5zdHJpbmcuaXNMb3dlckNhbWVsQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4vXlthLXpdKyhbQS1aXVthLXpdKikqJC8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNVcHBlckNhbWVsQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4vXihbQS1aXVthLXpdKikrJC8udGVzdChlKX0sZ29vZy5zdHJpbmcudG9DYW1lbENhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9cXC0oW2Etel0pL2csKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pKX0sZ29vZy5zdHJpbmcudG9TZWxlY3RvckNhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC8oW0EtWl0pL2csXCItJDFcIikudG9Mb3dlckNhc2UoKX0sZ29vZy5zdHJpbmcudG9UaXRsZUNhc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1nb29nLmlzU3RyaW5nKHQpP2dvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSh0KTpcIlxcXFxzXCIsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXlwiKyh0P1wifFtcIit0K1wiXStcIjpcIlwiKStcIikoW2Etel0pXCIsXCJnXCIpLChmdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQrby50b1VwcGVyQ2FzZSgpfSkpfSxnb29nLnN0cmluZy5jYXBpdGFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZS5jaGFyQXQoMCkpLnRvVXBwZXJDYXNlKCkrU3RyaW5nKGUuc3Vic3RyKDEpKS50b0xvd2VyQ2FzZSgpfSxnb29nLnN0cmluZy5wYXJzZUludD1mdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUoZSkmJihlPVN0cmluZyhlKSksZ29vZy5pc1N0cmluZyhlKT8vXlxccyotPzB4L2kudGVzdChlKT9wYXJzZUludChlLDE2KTpwYXJzZUludChlLDEwKTpOYU59LGdvb2cuc3RyaW5nLnNwbGl0TGltaXQ9ZnVuY3Rpb24oZSx0LG8pe2U9ZS5zcGxpdCh0KTtmb3IodmFyIHI9W107MDxvJiZlLmxlbmd0aDspci5wdXNoKGUuc2hpZnQoKSksby0tO3JldHVybiBlLmxlbmd0aCYmci5wdXNoKGUuam9pbih0KSkscn0sZ29vZy5zdHJpbmcubGFzdENvbXBvbmVudD1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bdF0pO2Zvcih2YXIgbz0tMSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYoXCJcIiE9dFtyXSl7dmFyIG49ZS5sYXN0SW5kZXhPZih0W3JdKTtuPm8mJihvPW4pfXJldHVybi0xPT1vP2U6ZS5zbGljZShvKzEpfSxnb29nLnN0cmluZy5lZGl0RGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbz1bXSxyPVtdO2lmKGU9PXQpcmV0dXJuIDA7aWYoIWUubGVuZ3RofHwhdC5sZW5ndGgpcmV0dXJuIE1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoKzE7bisrKW9bbl09bjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtyWzBdPW4rMTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylyW2krMV09TWF0aC5taW4ocltpXSsxLG9baSsxXSsxLG9baV0rTnVtYmVyKGVbbl0hPXRbaV0pKTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV09cltpXX1yZXR1cm4gclt0Lmxlbmd0aF19LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lPXt9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzUHJlc3RvPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlByZXN0b1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlKFwiV2ViS2l0XCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCl9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja289ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiR2Vja29cIikmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdCgpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50KCkmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtpZihlKXtlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcyhlKTt2YXIgdCxvPWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldEVuZ2luZVR1cGxlXyhlKTtpZihvKXJldHVyblwiR2Vja29cIj09b1swXT9nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uRm9yS2V5XyhlLFwiRmlyZWZveFwiKTpvWzFdO2lmKChlPWVbMF0pJiYodD1lWzJdKSYmKHQ9L1RyaWRlbnRcXC8oW15cXHM7XSspLy5leGVjKHQpKSlyZXR1cm4gdFsxXX1yZXR1cm5cIlwifSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRFbmdpbmVUdXBsZV89ZnVuY3Rpb24oZSl7aWYoIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpKXJldHVybiBlWzFdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbz1lW3RdO2lmKFwiRWRnZVwiPT1vWzBdKXJldHVybiBvfX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uKCksZSl9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb25Gb3JLZXlfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9Z29vZy5hcnJheS5maW5kKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0PT1lWzBdfSkpKSYmZVsxXXx8XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybT17fSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQW5kcm9pZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUG9kXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQb2RcIikmJiFnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwYWQoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc01hY2ludG9zaD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNYWNpbnRvc2hcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNMaW51eD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJMaW51eFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1dpbmRvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiV2luZG93c1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyT1NcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVjYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyS2V5XCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkthaU9TXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzR28yUGhvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkdBRlBcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKSx0PVwiXCI7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzKCk/dD0oZT0odD0vV2luZG93cyAoPzpOVHxQaG9uZSkgKFswLTkuXSspLykuZXhlYyhlKSk/ZVsxXTpcIjAuMFwiOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKT90PShlPSh0PS8oPzppUGhvbmV8aVBvZHxpUGFkfENQVSlcXHMrT1NcXHMrKFxcUyspLykuZXhlYyhlKSkmJmVbMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoKCk/dD0oZT0odD0vTWFjIE9TIFggKFswLTlfLl0rKS8pLmV4ZWMoZSkpP2VbMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIjEwXCI6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TKCk/dD0oZT0odD0vKD86S2FpT1MpXFwvKFxcUyspL2kpLmV4ZWMoZSkpJiZlWzFdOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCk/dD0oZT0odD0vQW5kcm9pZFxccysoW15cXCk7XSspKFxcKXw7KS8pLmV4ZWMoZSkpJiZlWzFdOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUygpJiYodD0oZT0odD0vKD86Q3JPU1xccysoPzppNjg2fHg4Nl82NClcXHMrKFswLTkuXSspKS8pLmV4ZWMoZSkpJiZlWzFdKSx0fHxcIlwifSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5nZXRWZXJzaW9uKCksZSl9LGdvb2cucmVmbGVjdD17fSxnb29nLnJlZmxlY3Qub2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LGdvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxnb29nLnJlZmxlY3Quc2lua1ZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnJlZmxlY3Quc2lua1ZhbHVlW1wiIFwiXShlKSxlfSxnb29nLnJlZmxlY3Quc2lua1ZhbHVlW1wiIFwiXT1nb29nLm51bGxGdW5jdGlvbixnb29nLnJlZmxlY3QuY2FuQWNjZXNzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGdvb2cucmVmbGVjdC5zaW5rVmFsdWUoZVt0XSksITB9Y2F0Y2goZSl7fXJldHVybiExfSxnb29nLnJlZmxlY3QuY2FjaGU9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIHI9cj9yKHQpOnQsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscik/ZVtyXTplW3JdPW8odCl9LGdvb2cudXNlckFnZW50PXt9LGdvb2cudXNlckFnZW50LkFTU1VNRV9JRT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfR0VDS089ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkE9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OPSExLGdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9JRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0V8fGdvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLT3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQSxnb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpfSxnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5uYXZpZ2F0b3J8fG51bGx9LGdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvcj1mdW5jdGlvbigpe3JldHVybiBnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpfSxnb29nLnVzZXJBZ2VudC5PUEVSQT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkE6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKSxnb29nLnVzZXJBZ2VudC5JRT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSUU6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzSUUoKSxnb29nLnVzZXJBZ2VudC5FREdFPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9FREdFOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpLGdvb2cudXNlckFnZW50LkVER0VfT1JfSUU9Z29vZy51c2VyQWdlbnQuRURHRXx8Z29vZy51c2VyQWdlbnQuSUUsZ29vZy51c2VyQWdlbnQuR0VDS089Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja28oKSxnb29nLnVzZXJBZ2VudC5XRUJLSVQ9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNXZWJLaXQoKSxnb29nLnVzZXJBZ2VudC5pc01vYmlsZV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuV0VCS0lUJiZnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNb2JpbGVcIil9LGdvb2cudXNlckFnZW50Lk1PQklMRT1nb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuaXNNb2JpbGVfKCksZ29vZy51c2VyQWdlbnQuU0FGQVJJPWdvb2cudXNlckFnZW50LldFQktJVCxnb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpO3JldHVybiBlJiZlLnBsYXRmb3JtfHxcIlwifSxnb29nLnVzZXJBZ2VudC5QTEFURk9STT1nb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV8oKSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkU9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUQ9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0tBSU9TPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9HTzJQSE9ORT0hMSxnb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX01BQ3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dJTkRPV1N8fGdvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1gxMXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRCxnb29nLnVzZXJBZ2VudC5NQUM9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9NQUM6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc01hY2ludG9zaCgpLGdvb2cudXNlckFnZW50LldJTkRPV1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzKCksZ29vZy51c2VyQWdlbnQuaXNMZWdhY3lMaW51eF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0xpbnV4KCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUygpfSxnb29nLnVzZXJBZ2VudC5MSU5VWD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYOmdvb2cudXNlckFnZW50LmlzTGVnYWN5TGludXhfKCksZ29vZy51c2VyQWdlbnQuaXNYMTFfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKTtyZXR1cm4hIWUmJmdvb2cuc3RyaW5nLmNvbnRhaW5zKGUuYXBwVmVyc2lvbnx8XCJcIixcIlgxMVwiKX0sZ29vZy51c2VyQWdlbnQuWDExPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExOmdvb2cudXNlckFnZW50LmlzWDExXygpLGdvb2cudXNlckFnZW50LkFORFJPSUQ9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCksZ29vZy51c2VyQWdlbnQuSVBIT05FPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKSxnb29nLnVzZXJBZ2VudC5JUEFEPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpLGdvb2cudXNlckFnZW50LklQT0Q9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCksZ29vZy51c2VyQWdlbnQuSU9TPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcygpLGdvb2cudXNlckFnZW50LktBSU9TPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfS0FJT1M6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TKCksZ29vZy51c2VyQWdlbnQuR08yUEhPTkU9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9HTzJQSE9ORTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzR28yUGhvbmUoKSxnb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVWZXJzaW9uXz1mdW5jdGlvbigpe3ZhciBlPVwiXCIsdD1nb29nLnVzZXJBZ2VudC5nZXRWZXJzaW9uUmVnZXhSZXN1bHRfKCk7cmV0dXJuIHQmJihlPXQ/dFsxXTpcIlwiKSxnb29nLnVzZXJBZ2VudC5JRSYmKG51bGwhPSh0PWdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV8oKSkmJnQ+cGFyc2VGbG9hdChlKSk/U3RyaW5nKHQpOmV9LGdvb2cudXNlckFnZW50LmdldFZlcnNpb25SZWdleFJlc3VsdF89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmcoKTtyZXR1cm4gZ29vZy51c2VyQWdlbnQuR0VDS08/L3J2OihbXlxcKTtdKykoXFwpfDspLy5leGVjKGUpOmdvb2cudXNlckFnZW50LkVER0U/L0VkZ2VcXC8oW1xcZFxcLl0rKS8uZXhlYyhlKTpnb29nLnVzZXJBZ2VudC5JRT8vXFxiKD86TVNJRXxydilbOiBdKFteXFwpO10rKShcXCl8OykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuV0VCS0lUPy9XZWJLaXRcXC8oXFxTKykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuT1BFUkE/Lyg/OlZlcnNpb24pWyBcXC9dPyhcXFMrKS8uZXhlYyhlKTp2b2lkIDB9LGdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gZT9lLmRvY3VtZW50TW9kZTp2b2lkIDB9LGdvb2cudXNlckFnZW50LlZFUlNJT049Z29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lVmVyc2lvbl8oKSxnb29nLnVzZXJBZ2VudC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhlLHQpfSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlckNhY2hlXz17fSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OfHxnb29nLnJlZmxlY3QuY2FjaGUoZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXJDYWNoZV8sZSwoZnVuY3Rpb24oKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGdvb2cudXNlckFnZW50LlZFUlNJT04sZSl9KSl9LGdvb2cudXNlckFnZW50LmlzVmVyc2lvbj1nb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcixnb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZU9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZ29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERSk+PWV9LGdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlPWdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlT3JIaWdoZXIsZ29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERT1mdW5jdGlvbigpe2lmKGdvb2cuZ2xvYmFsLmRvY3VtZW50JiZnb29nLnVzZXJBZ2VudC5JRSlyZXR1cm4gZ29vZy51c2VyQWdlbnQuZ2V0RG9jdW1lbnRNb2RlXygpfSgpLGdvb2cudXNlckFnZW50LnByb2R1Y3Q9e30sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfRklSRUZPWD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9BTkRST0lEPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRT0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkk9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz1nb29nLnVzZXJBZ2VudC5BU1NVTUVfSUV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9FREdFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkF8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1h8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRHx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5PUEVSQT1nb29nLnVzZXJBZ2VudC5PUEVSQSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LklFPWdvb2cudXNlckFnZW50LklFLGdvb2cudXNlckFnZW50LnByb2R1Y3QuRURHRT1nb29nLnVzZXJBZ2VudC5FREdFLGdvb2cudXNlckFnZW50LnByb2R1Y3QuRklSRUZPWD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1g6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRmlyZWZveCgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKX0sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JUEhPTkU9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU6Z29vZy51c2VyQWdlbnQucHJvZHVjdC5pc0lwaG9uZU9ySXBvZF8oKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LklQQUQ9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEFEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BTkRST0lEPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRDpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNBbmRyb2lkQnJvd3NlcigpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQ0hST01FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNTYWZhcmlEZXNrdG9wXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTYWZhcmkoKSYmIWdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKX0sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkk9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkk6Z29vZy51c2VyQWdlbnQucHJvZHVjdC5pc1NhZmFyaURlc2t0b3BfKCksZ29vZy5jcnlwdC5iYXNlNjQ9e30sZ29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIixnb29nLmNyeXB0LmJhc2U2NC5FTkNPREVEX1ZBTFM9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fK1wiKy89XCIsZ29vZy5jcnlwdC5iYXNlNjQuRU5DT0RFRF9WQUxTX1dFQlNBRkU9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fK1wiLV8uXCIsZ29vZy5jcnlwdC5iYXNlNjQuQWxwaGFiZXQ9e0RFRkFVTFQ6MCxOT19QQURESU5HOjEsV0VCU0FGRToyLFdFQlNBRkVfRE9UX1BBRERJTkc6MyxXRUJTQUZFX05PX1BBRERJTkc6NH0sZ29vZy5jcnlwdC5iYXNlNjQucGFkZGluZ0NoYXJzXz1cIj0uXCIsZ29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZ29vZy5jcnlwdC5iYXNlNjQucGFkZGluZ0NoYXJzXyxlKX0sZ29vZy5jcnlwdC5iYXNlNjQuYnl0ZVRvQ2hhck1hcHNfPXt9O2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPW51bGwsZ29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUXz1nb29nLnVzZXJBZ2VudC5HRUNLT3x8Z29vZy51c2VyQWdlbnQuV0VCS0lUJiYhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkl8fGdvb2cudXNlckFnZW50Lk9QRVJBLGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBnb29nLmdsb2JhbC5idG9hLGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfREVDT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHwhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkkmJiFnb29nLnVzZXJBZ2VudC5JRSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYXRvYixnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXk9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNBcnJheUxpa2UoZSksXCJlbmNvZGVCeXRlQXJyYXkgdGFrZXMgYW4gYXJyYXkgYXMgYSBwYXJhbWV0ZXJcIiksdm9pZCAwPT09dCYmKHQ9Z29vZy5jcnlwdC5iYXNlNjQuQWxwaGFiZXQuREVGQVVMVCksZ29vZy5jcnlwdC5iYXNlNjQuaW5pdF8oKSx0PWdvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzX1t0XTtmb3IodmFyIG89W10scj0wO3I8ZS5sZW5ndGg7cis9Myl7dmFyIG49ZVtyXSxpPXIrMTxlLmxlbmd0aCxzPWk/ZVtyKzFdOjAsYT1yKzI8ZS5sZW5ndGgscD1hP2VbcisyXTowLGc9bj4+MjtuPSgzJm4pPDw0fHM+PjQscz0oMTUmcyk8PDJ8cD4+NixwJj02MyxhfHwocD02NCxpfHwocz02NCkpLG8ucHVzaCh0W2ddLHRbbl0sdFtzXXx8XCJcIix0W3BdfHxcIlwiKX1yZXR1cm4gby5qb2luKFwiXCIpfSxnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVTdHJpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9FTkNPREVfJiYhdD9nb29nLmdsb2JhbC5idG9hKGUpOmdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShnb29nLmNyeXB0LnN0cmluZ1RvQnl0ZUFycmF5KGUpLHQpfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0RFQ09ERV8mJiF0KXJldHVybiBnb29nLmdsb2JhbC5hdG9iKGUpO3ZhciBvPVwiXCI7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhlLChmdW5jdGlvbihlKXtvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSkpLG99LGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7dmFyIG89W107cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhlLChmdW5jdGlvbihlKXtvLnB1c2goZSl9KSksb30sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cudXNlckFnZW50LklFfHxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcihcIjEwXCIpLFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5c1wiKTt2YXIgdD1lLmxlbmd0aCxvPTMqdC80O28lMz9vPU1hdGguZmxvb3Iobyk6Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhlW3QtMV0pJiYobz1nb29nLmNyeXB0LmJhc2U2NC5pc1BhZGRpbmdfKGVbdC0yXSk/by0yOm8tMSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkobyksbj0wO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7cltuKytdPWV9KSksci5zdWJhcnJheSgwLG4pfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF89ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKHQpe2Zvcig7cjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KHIrKyksbj1nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tvXTtpZihudWxsIT1uKXJldHVybiBuO2lmKCFnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKG8pKXRocm93IEVycm9yKFwiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogXCIrbyl9cmV0dXJuIHR9Z29vZy5jcnlwdC5iYXNlNjQuaW5pdF8oKTtmb3IodmFyIHI9MDs7KXt2YXIgbj1vKC0xKSxpPW8oMCkscz1vKDY0KSxhPW8oNjQpO2lmKDY0PT09YSYmLTE9PT1uKWJyZWFrO3Qobjw8MnxpPj40KSw2NCE9cyYmKHQoaTw8NCYyNDB8cz4+MiksNjQhPWEmJnQoczw8NiYxOTJ8YSkpfX0sZ29vZy5jcnlwdC5iYXNlNjQuaW5pdF89ZnVuY3Rpb24oKXtpZighZ29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF8pe2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPXt9O2Zvcih2YXIgZT1nb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl8uc3BsaXQoXCJcIiksdD1bXCIrLz1cIixcIisvXCIsXCItXz1cIixcIi1fLlwiLFwiLV9cIl0sbz0wOzU+bztvKyspe3ZhciByPWUuY29uY2F0KHRbb10uc3BsaXQoXCJcIikpO2dvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzX1tvXT1yO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLHM9Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9baV07dm9pZCAwPT09cz9nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tpXT1uOmdvb2cuYXNzZXJ0cy5hc3NlcnQocz09PW4pfX19fSxqc3BiLnV0aWxzPXt9LGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0VWludDY0PWZ1bmN0aW9uKGUpe3ZhciB0PWU+Pj4wO2U9TWF0aC5mbG9vcigoZS10KS9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9dCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWV9LGpzcGIudXRpbHMuc3BsaXRJbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD0wPmUsbz0oZT1NYXRoLmFicyhlKSk+Pj4wO2U9TWF0aC5mbG9vcigoZS1vKS9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLGU+Pj49MCx0JiYoZT1+ZT4+PjAsNDI5NDk2NzI5NTwobz0xKyh+bz4+PjApKSYmKG89MCw0Mjk0OTY3Mjk1PCsrZSYmKGU9MCkpKSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9byxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWV9LGpzcGIudXRpbHMuc3BsaXRaaWd6YWc2ND1mdW5jdGlvbihlKXt2YXIgdD0wPmU7ZT0yKk1hdGguYWJzKGUpLGpzcGIudXRpbHMuc3BsaXRVaW50NjQoZSksZT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIG89anNwYi51dGlscy5zcGxpdDY0SGlnaDt0JiYoMD09ZT8wPT1vP289ZT00Mjk0OTY3Mjk1OihvLS0sZT00Mjk0OTY3Mjk1KTplLS0pLGpzcGIudXRpbHMuc3BsaXQ2NExvdz1lLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9b30sanNwYi51dGlscy5zcGxpdEZsb2F0MzI9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lPzE6MDtpZigwPT09KGU9dD8tZTplKSkwPDEvZT8oanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wKTooanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0yMTQ3NDgzNjQ4KTtlbHNlIGlmKGlzTmFOKGUpKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MjE0NzQ4MzY0NztlbHNlIGlmKGU+anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8MjEzOTA5NTA0MCk+Pj4wO2Vsc2UgaWYoZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01JTillPU1hdGgucm91bmQoZS9NYXRoLnBvdygyLC0xNDkpKSxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PSh0PDwzMXxlKT4+PjA7ZWxzZXt2YXIgbz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKTtlKj1NYXRoLnBvdygyLC1vKSxlPTgzODg2MDcmTWF0aC5yb3VuZChlKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMyksanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8bysxMjc8PDIzfGUpPj4+MH19LGpzcGIudXRpbHMuc3BsaXRGbG9hdDY0PWZ1bmN0aW9uKGUpe3ZhciB0PTA+ZT8xOjA7aWYoMD09PShlPXQ/LWU6ZSkpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wPDEvZT8wOjIxNDc0ODM2NDgsanNwYi51dGlscy5zcGxpdDY0TG93PTA7ZWxzZSBpZihpc05hTihlKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTIxNDc0ODM2NDcsanNwYi51dGlscy5zcGxpdDY0TG93PTQyOTQ5NjcyOTU7ZWxzZSBpZihlPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KHQ8PDMxfDIxNDY0MzUwNzIpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtlbHNlIGlmKGU8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4pe3ZhciBvPWUvTWF0aC5wb3coMiwtMTA3NCk7ZT1vL2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMixqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPSh0PDwzMXxlKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PW8+Pj4wfWVsc2V7dmFyIHI9MDtpZigyPD0obz1lKSlmb3IoOzI8PW8mJjEwMjM+cjspcisrLG8vPTI7ZWxzZSBmb3IoOzE+byYmLTEwMjI8cjspbyo9MixyLS07ZT0obz1lKk1hdGgucG93KDIsLXIpKSpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMjAmMTA0ODU3NSxvPW8qanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPSh0PDwzMXxyKzEwMjM8PDIwfGUpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9b319LGpzcGIudXRpbHMuc3BsaXRIYXNoNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG89ZS5jaGFyQ29kZUF0KDEpLHI9ZS5jaGFyQ29kZUF0KDIpLG49ZS5jaGFyQ29kZUF0KDMpLGk9ZS5jaGFyQ29kZUF0KDQpLHM9ZS5jaGFyQ29kZUF0KDUpLGE9ZS5jaGFyQ29kZUF0KDYpO2U9ZS5jaGFyQ29kZUF0KDcpLGpzcGIudXRpbHMuc3BsaXQ2NExvdz10KyhvPDw4KSsocjw8MTYpKyhuPDwyNCk+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9aSsoczw8OCkrKGE8PDE2KSsoZTw8MjQpPj4+MH0sanNwYi51dGlscy5qb2luVWludDY0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKyhlPj4+MCl9LGpzcGIudXRpbHMuam9pbkludDY0PWZ1bmN0aW9uKGUsdCl7dmFyIG89MjE0NzQ4MzY0OCZ0O3JldHVybiBvJiYodD1+dD4+PjAsMD09KGU9MSt+ZT4+PjApJiYodD10KzE+Pj4wKSksZT1qc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KSxvPy1lOmV9LGpzcGIudXRpbHMudG9aaWd6YWc2ND1mdW5jdGlvbihlLHQsbyl7dmFyIHI9dD4+MzE7cmV0dXJuIG8oZTw8MV5yLCh0PDwxfGU+Pj4zMSlecil9LGpzcGIudXRpbHMuam9pblppZ3phZzY0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KGUsdCxqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9LGpzcGIudXRpbHMuZnJvbVppZ3phZzY0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0tKDEmZSk7cmV0dXJuIG8oKGU+Pj4xfHQ8PDMxKV5yLHQ+Pj4xXnIpfSxqc3BiLnV0aWxzLmpvaW5GbG9hdDMyPWZ1bmN0aW9uKGUsdCl7dD0yKihlPj4zMSkrMTt2YXIgbz1lPj4+MjMmMjU1O3JldHVybiBlJj04Mzg4NjA3LDI1NT09bz9lP05hTjoxLzAqdDowPT1vP3QqTWF0aC5wb3coMiwtMTQ5KSplOnQqTWF0aC5wb3coMixvLTE1MCkqKGUrTWF0aC5wb3coMiwyMykpfSxqc3BiLnV0aWxzLmpvaW5GbG9hdDY0PWZ1bmN0aW9uKGUsdCl7dmFyIG89MioodD4+MzEpKzEscj10Pj4+MjAmMjA0NztyZXR1cm4gZT1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIqKDEwNDg1NzUmdCkrZSwyMDQ3PT1yP2U/TmFOOjEvMCpvOjA9PXI/bypNYXRoLnBvdygyLC0xMDc0KSplOm8qTWF0aC5wb3coMixyLTEwNzUpKihlK2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mil9LGpzcGIudXRpbHMuam9pbkhhc2g2ND1mdW5jdGlvbihlLHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+Pj4wJjI1NSxlPj4+OCYyNTUsZT4+PjE2JjI1NSxlPj4+MjQmMjU1LHQ+Pj4wJjI1NSx0Pj4+OCYyNTUsdD4+PjE2JjI1NSx0Pj4+MjQmMjU1KX0sanNwYi51dGlscy5ESUdJVFM9XCIwMTIzNDU2Nzg5YWJjZGVmXCIuc3BsaXQoXCJcIiksanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV89NDgsanNwYi51dGlscy5BX0NIQVJfQ09ERV89OTcsanNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPWU/U3RyaW5nKGUpOlwiXCIsdD9cIjAwMDAwMDBcIi5zbGljZShlLmxlbmd0aCkrZTplfWlmKDIwOTcxNTE+PXQpcmV0dXJuXCJcIitqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KTt2YXIgcj0oZT4+PjI0fHQ8PDgpPj4+MCYxNjc3NzIxNTtyZXR1cm4gZT0oMTY3NzcyMTUmZSkrNjc3NzIxNipyKzY3MTA2NTYqKHQ9dD4+MTYmNjU1MzUpLHIrPTgxNDc0OTcqdCx0Kj0yLDFlNzw9ZSYmKHIrPU1hdGguZmxvb3IoZS8xZTcpLGUlPTFlNyksMWU3PD1yJiYodCs9TWF0aC5mbG9vcihyLzFlNyksciU9MWU3KSxvKHQsMCkrbyhyLHQpK28oZSwxKX0sanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBvPTIxNDc0ODM2NDgmdDtyZXR1cm4gbyYmKHQ9fnQrKDA9PShlPTErfmU+Pj4wKT8xOjApPj4+MCksZT1qc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoZSx0KSxvP1wiLVwiK2U6ZX0sanNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSx0KXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIHQ/anNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyhlLG8pOmpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhlLG8pfSxqc3BiLnV0aWxzLmhhc2g2NEFycmF5VG9EZWNpbWFsU3RyaW5ncz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1BcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW9bcl09anNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmcoZVtyXSx0KTtyZXR1cm4gb30sanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe2Zvcih2YXIgbz0wOzg+byYmKDEhPT1lfHwwPHQpO28rKyl0PWUqcltvXSt0LHJbb109MjU1JnQsdD4+Pj04fWdvb2cuYXNzZXJ0cy5hc3NlcnQoMDxlLmxlbmd0aCk7dmFyIG89ITE7XCItXCI9PT1lWzBdJiYobz0hMCxlPWUuc2xpY2UoMSkpO2Zvcih2YXIgcj1bMCwwLDAsMCwwLDAsMCwwXSxuPTA7bjxlLmxlbmd0aDtuKyspdCgxMCxlLmNoYXJDb2RlQXQobiktanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV8pO3JldHVybiBvJiYoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDs4PmU7ZSsrKXJbZV09MjU1Jn5yW2VdfSgpLHQoMSwxKSksZ29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZyhyKX0sanNwYi51dGlscy5zcGxpdERlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChlKSl9LGpzcGIudXRpbHMudG9IZXhEaWdpdF89ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMTA+ZT9qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXytlOmpzcGIudXRpbHMuQV9DSEFSX0NPREVfLTEwK2UpfSxqc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PWpzcGIudXRpbHMuQV9DSEFSX0NPREVfP2UtanNwYi51dGlscy5BX0NIQVJfQ09ERV8rMTA6ZS1qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFX30sanNwYi51dGlscy5oYXNoNjRUb0hleFN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1BcnJheSgxOCk7dFswXT1cIjBcIix0WzFdPVwieFwiO2Zvcih2YXIgbz0wOzg+bztvKyspe3ZhciByPWUuY2hhckNvZGVBdCg3LW8pO3RbMipvKzJdPWpzcGIudXRpbHMudG9IZXhEaWdpdF8ocj4+NCksdFsyKm8rM109anNwYi51dGlscy50b0hleERpZ2l0XygxNSZyKX1yZXR1cm4gdC5qb2luKFwiXCIpfSxqc3BiLnV0aWxzLmhleFN0cmluZ1RvSGFzaDY0PWZ1bmN0aW9uKGUpe2U9ZS50b0xvd2VyQ2FzZSgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMTg9PWUubGVuZ3RoKSxnb29nLmFzc2VydHMuYXNzZXJ0KFwiMFwiPT1lWzBdKSxnb29nLmFzc2VydHMuYXNzZXJ0KFwieFwiPT1lWzFdKTtmb3IodmFyIHQ9XCJcIixvPTA7OD5vO28rKyl7dmFyIHI9anNwYi51dGlscy5mcm9tSGV4Q2hhckNvZGVfKGUuY2hhckNvZGVBdCgyKm8rMikpLG49anNwYi51dGlscy5mcm9tSGV4Q2hhckNvZGVfKGUuY2hhckNvZGVBdCgyKm8rMykpO3Q9U3RyaW5nLmZyb21DaGFyQ29kZSgxNipyK24pK3R9cmV0dXJuIHR9LGpzcGIudXRpbHMuaGFzaDY0VG9OdW1iZXI9ZnVuY3Rpb24oZSx0KXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIHQ/anNwYi51dGlscy5qb2luSW50NjQoZSxvKTpqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSxvKX0sanNwYi51dGlscy5udW1iZXJUb0hhc2g2ND1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi51dGlscy5zcGxpdEludDY0KGUpLGpzcGIudXRpbHMuam9pbkhhc2g2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIudXRpbHMuY291bnRWYXJpbnRzPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9MCxuPXQ7bjxvO24rKylyKz1lW25dPj43O3JldHVybiBvLXQtcn0sanNwYi51dGlscy5jb3VudFZhcmludEZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj0wO2lmKDEyOD4ocj04KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSlmb3IoO3Q8byYmZVt0KytdPT1yOylmb3IobisrOzspe3ZhciBpPWVbdCsrXTtpZigwPT0oMTI4JmkpKWJyZWFrfWVsc2UgZm9yKDt0PG87KXtmb3IoaT1yOzEyODxpOyl7aWYoZVt0XSE9KDEyNyZpfDEyOCkpcmV0dXJuIG47dCsrLGk+Pj03fWlmKGVbdCsrXSE9aSlicmVhaztmb3IobisrOzAhPSgxMjgmKGk9ZVt0KytdKSk7KTt9cmV0dXJuIG59LGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc189ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgaT0wO2lmKDEyOD5yKWZvcig7dDxvJiZlW3QrK109PXI7KWkrKyx0Kz1uO2Vsc2UgZm9yKDt0PG87KXtmb3IodmFyIHM9cjsxMjg8czspe2lmKGVbdCsrXSE9KDEyNyZzfDEyOCkpcmV0dXJuIGk7cz4+PTd9aWYoZVt0KytdIT1zKWJyZWFrO2krKyx0Kz1ufXJldHVybiBpfSxqc3BiLnV0aWxzLmNvdW50Rml4ZWQzMkZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4ganNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXyhlLHQsbyw4KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiw0KX0sanNwYi51dGlscy5jb3VudEZpeGVkNjRGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc18oZSx0LG8sOCpyK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQsOCl9LGpzcGIudXRpbHMuY291bnREZWxpbWl0ZWRGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49MDtmb3Iocj04KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEO3Q8bzspe2Zvcih2YXIgaT1yOzEyODxpOyl7aWYoZVt0KytdIT0oMTI3Jml8MTI4KSlyZXR1cm4gbjtpPj49N31pZihlW3QrK10hPWkpYnJlYWs7bisrO2Zvcih2YXIgcz0wLGE9MTtzKz0oMTI3JihpPWVbdCsrXSkpKmEsYSo9MTI4LDAhPSgxMjgmaSk7KTt0Kz1zfXJldHVybiBufSxqc3BiLnV0aWxzLmRlYnVnQnl0ZXNUb1RleHRGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9J1wiJztpZihlKXtlPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShlKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl0Kz1cIlxcXFx4XCIsMTY+ZVtvXSYmKHQrPVwiMFwiKSx0Kz1lW29dLnRvU3RyaW5nKDE2KX1yZXR1cm4gdCsnXCInfSxqc3BiLnV0aWxzLmRlYnVnU2NhbGFyVG9UZXh0Rm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2dvb2cuc3RyaW5nLnF1b3RlKGUpOmUudG9TdHJpbmcoKX0sanNwYi51dGlscy5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG8pO2lmKDI1NTxyKXRocm93IEVycm9yKFwiQ29udmVyc2lvbiBlcnJvcjogc3RyaW5nIGNvbnRhaW5zIGNvZGVwb2ludCBvdXRzaWRlIG9mIGJ5dGUgcmFuZ2VcIik7dFtvXT1yfXJldHVybiB0fSxqc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5P2U6ZS5jb25zdHJ1Y3Rvcj09PUFycmF5QnVmZmVyfHx2b2lkIDAhPT1CdWZmZXImJmUuY29uc3RydWN0b3I9PT1CdWZmZXJ8fGUuY29uc3RydWN0b3I9PT1BcnJheT9uZXcgVWludDhBcnJheShlKTplLmNvbnN0cnVjdG9yPT09U3RyaW5nP2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShlKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJUeXBlIG5vdCBjb252ZXJ0aWJsZSB0byBVaW50OEFycmF5LlwiKSxuZXcgVWludDhBcnJheSgwKSl9LGpzcGIuQmluYXJ5RGVjb2Rlcj1mdW5jdGlvbihlLHQsbyl7dGhpcy5ieXRlc189bnVsbCx0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTAsdGhpcy5lcnJvcl89ITEsZSYmdGhpcy5zZXRCbG9jayhlLHQsbyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXz1bXSxqc3BiLkJpbmFyeURlY29kZXIuYWxsb2M9ZnVuY3Rpb24oZSx0LG8pe2lmKGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpe3ZhciByPWpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTtyZXR1cm4gZSYmci5zZXRCbG9jayhlLHQsbykscn1yZXR1cm4gbmV3IGpzcGIuQmluYXJ5RGVjb2RlcihlLHQsbyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuY2xlYXIoKSwxMDA+anNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCYmanNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLnB1c2godGhpcyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKHRoaXMuYnl0ZXNfLHRoaXMuc3RhcnRfLHRoaXMuZW5kXy10aGlzLnN0YXJ0Xyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmJ5dGVzXz1udWxsLHRoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MCx0aGlzLmVycm9yXz0hMX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ieXRlc199LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0QmxvY2s9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuYnl0ZXNfPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShlKSx0aGlzLnN0YXJ0Xz12b2lkIDAhPT10P3Q6MCx0aGlzLmVuZF89dm9pZCAwIT09bz90aGlzLnN0YXJ0XytvOnRoaXMuYnl0ZXNfLmxlbmd0aCx0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7dGhpcy5lbmRfPWV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRDdXJzb3I9ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JfPWV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbihlKXt0aGlzLmN1cnNvcl8rPWUsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuYXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPT10aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucGFzdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl8+dGhpcy5lbmRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHwwPnRoaXMuY3Vyc29yX3x8dGhpcy5jdXJzb3JfPnRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTI4LG89MCxyPTAsbj0wOzQ+biYmMTI4PD10O24rKylvfD0oMTI3Jih0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSkpPDw3Km47aWYoMTI4PD10JiYob3w9KDEyNyYodD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10pKTw8Mjgscnw9KDEyNyZ0KT4+NCksMTI4PD10KWZvcihuPTA7NT5uJiYxMjg8PXQ7bisrKXJ8PSgxMjcmKHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdKSk8PDcqbiszO2lmKDEyOD50KXJldHVybiBlKG8+Pj4wLHI+Pj4wKTtnb29nLmFzc2VydHMuZmFpbChcIkZhaWxlZCB0byByZWFkIHZhcmludCwgZW5jb2RpbmcgaXMgaW52YWxpZC5cIiksdGhpcy5lcnJvcl89ITB9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoKGZ1bmN0aW9uKHQsbyl7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KHQsbyxlKX0pKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXNfLG89dGhpcy5jdXJzb3JfO3RoaXMuY3Vyc29yXys9ODtmb3IodmFyIHI9MCxuPTAsaT1vKzc7aT49bztpLS0pcj1yPDw4fHRbaV0sbj1uPDw4fHRbaSs0XTtyZXR1cm4gZShyLG4pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNraXBWYXJpbnQ9ZnVuY3Rpb24oKXtmb3IoOzEyOCZ0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl9dOyl0aGlzLmN1cnNvcl8rKzt0aGlzLmN1cnNvcl8rK30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS51bnNraXBWYXJpbnQ9ZnVuY3Rpb24oZSl7Zm9yKDsxMjg8ZTspdGhpcy5jdXJzb3JfLS0sZT4+Pj03O3RoaXMuY3Vyc29yXy0tfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc18sdD1lW3RoaXMuY3Vyc29yXyswXSxvPTEyNyZ0O3JldHVybiAxMjg+dD8odGhpcy5jdXJzb3JfKz0xLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTI3Jih0PWVbdGhpcy5jdXJzb3JfKzFdKSk8PDcsMTI4PnQ/KHRoaXMuY3Vyc29yXys9Mixnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXysyXSkpPDwxNCwxMjg+dD8odGhpcy5jdXJzb3JfKz0zLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTI3Jih0PWVbdGhpcy5jdXJzb3JfKzNdKSk8PDIxLDEyOD50Pyh0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksbyk6KG98PSgxNSYodD1lW3RoaXMuY3Vyc29yXys0XSkpPDwyOCwxMjg+dD8odGhpcy5jdXJzb3JfKz01LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8+Pj4wKToodGhpcy5jdXJzb3JfKz01LDEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJmdvb2cuYXNzZXJ0cy5hc3NlcnQoITEpLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pKSkpKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzI9anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMixqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiBlPj4+MV4tKDEmZSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5VaW50NjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luWmlnemFnNjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5IYXNoNjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50OD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0xLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGU8PDB8dDw8OH0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLG89dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLHI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3JldHVybiB0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksKGU8PDB8dDw8OHxvPDwxNnxyPDwyNCk+Pj4wfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07cmV0dXJuIHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwyND4+MjR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdO3JldHVybiB0aGlzLmN1cnNvcl8rPTIsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksKGU8PDB8dDw8OCk8PDE2Pj4xNn0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sdD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sbz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0scj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107cmV0dXJuIHRoaXMuY3Vyc29yXys9NCxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwwfHQ8PDh8bzw8MTZ8cjw8MjR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luSW50NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0MzIoZSwwKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luRmxvYXQ2NChlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK119LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXNfLG89dGhpcy5jdXJzb3JfO2U9bytlO2Zvcih2YXIgcj1bXSxuPVwiXCI7bzxlOyl7dmFyIGk9dFtvKytdO2lmKDEyOD5pKXIucHVzaChpKTtlbHNle2lmKDE5Mj5pKWNvbnRpbnVlO2lmKDIyND5pKXt2YXIgcz10W28rK107ci5wdXNoKCgzMSZpKTw8Nnw2MyZzKX1lbHNlIGlmKDI0MD5pKXtzPXRbbysrXTt2YXIgYT10W28rK107ci5wdXNoKCgxNSZpKTw8MTJ8KDYzJnMpPDw2fDYzJmEpfWVsc2UgaWYoMjQ4Pmkpe2k9KDcmaSk8PDE4fCg2MyYocz10W28rK10pKTw8MTJ8KDYzJihhPXRbbysrXSkpPDw2fDYzJnRbbysrXSxpLT02NTUzNixyLnB1c2goNTUyOTYrKGk+PjEwJjEwMjMpLDU2MzIwKygxMDIzJmkpKX19ODE5Mjw9ci5sZW5ndGgmJihuKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsciksci5sZW5ndGg9MCl9cmV0dXJuIG4rPWdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmcociksdGhpcy5jdXJzb3JfPW8sbn0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nV2l0aExlbmd0aD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGUpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRCeXRlcz1mdW5jdGlvbihlKXtpZigwPmV8fHRoaXMuY3Vyc29yXytlPnRoaXMuYnl0ZXNfLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcl89ITAsZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGJ5dGUgbGVuZ3RoIVwiKSxuZXcgVWludDhBcnJheSgwKTt2YXIgdD10aGlzLmJ5dGVzXy5zdWJhcnJheSh0aGlzLmN1cnNvcl8sdGhpcy5jdXJzb3JfK2UpO3JldHVybiB0aGlzLmN1cnNvcl8rPWUsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksdH0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luSGFzaDY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzXyx0PXRoaXMuY3Vyc29yXyxvPWVbdCswXSxyPWVbdCsxXSxuPWVbdCsyXSxpPWVbdCszXSxzPWVbdCs0XSxhPWVbdCs1XSxwPWVbdCs2XTtyZXR1cm4gZT1lW3QrN10sdGhpcy5jdXJzb3JfKz04LFN0cmluZy5mcm9tQ2hhckNvZGUobyxyLG4saSxzLGEscCxlKX0sanNwYi5CaW5hcnlSZWFkZXI9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuZGVjb2Rlcl89anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKGUsdCxvKSx0aGlzLmZpZWxkQ3Vyc29yXz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpLHRoaXMubmV4dEZpZWxkXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUix0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuSU5WQUxJRCx0aGlzLmVycm9yXz0hMSx0aGlzLnJlYWRDYWxsYmFja3NfPW51bGx9LGpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfPVtdLGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jPWZ1bmN0aW9uKGUsdCxvKXtpZihqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpe3ZhciByPWpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLnBvcCgpO3JldHVybiBlJiZyLmRlY29kZXJfLnNldEJsb2NrKGUsdCxvKSxyfXJldHVybiBuZXcganNwYi5CaW5hcnlSZWFkZXIoZSx0LG8pfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuYWxsb2M9anNwYi5CaW5hcnlSZWFkZXIuYWxsb2MsanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLmNsZWFyKCksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElELHRoaXMuZXJyb3JfPSExLHRoaXMucmVhZENhbGxiYWNrc189bnVsbCwxMDA+anNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoJiZqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RmllbGRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZEN1cnNvcl99LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RmllbGROdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0RmllbGRffSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0V2lyZVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0V2lyZVR5cGVffSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuaXNEZWxpbWl0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUR9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5pc0VuZEdyb3VwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcl98fHRoaXMuZGVjb2Rlcl8uZ2V0RXJyb3IoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNldEJsb2NrPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmRlY29kZXJfLnNldEJsb2NrKGUsdCxvKSx0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVIsdGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUR9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8ucmVzZXQoKSx0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVIsdGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUR9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLm5leHRGaWVsZD1mdW5jdGlvbigpe2lmKHRoaXMuZGVjb2Rlcl8uYXRFbmQoKSlyZXR1cm4hMTtpZih0aGlzLmdldEVycm9yKCkpcmV0dXJuIGdvb2cuYXNzZXJ0cy5mYWlsKFwiRGVjb2RlciBoaXQgYW4gZXJyb3JcIiksITE7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksdD1lPj4+MztyZXR1cm4oZSY9NykhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEJiZlIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQPyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlOiAlcyAoYXQgcG9zaXRpb24gJXMpXCIsZSx0aGlzLmZpZWxkQ3Vyc29yXyksdGhpcy5lcnJvcl89ITAsITEpOih0aGlzLm5leHRGaWVsZF89dCx0aGlzLm5leHRXaXJlVHlwZV89ZSwhMCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS51bnNraXBIZWFkZXI9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnVuc2tpcFZhcmludCh0aGlzLm5leHRGaWVsZF88PDN8dGhpcy5uZXh0V2lyZVR5cGVfKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBNYXRjaGluZ0ZpZWxkcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMubmV4dEZpZWxkXztmb3IodGhpcy51bnNraXBIZWFkZXIoKTt0aGlzLm5leHRGaWVsZCgpJiZ0aGlzLmdldEZpZWxkTnVtYmVyKCk9PWU7KXRoaXMuc2tpcEZpZWxkKCk7dGhpcy5kZWNvZGVyXy5hdEVuZCgpfHx0aGlzLnVuc2tpcEhlYWRlcigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcFZhcmludEZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQ/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBWYXJpbnRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLnNraXBWYXJpbnQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBEZWxpbWl0ZWRGaWVsZD1mdW5jdGlvbigpe2lmKHRoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKWdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBEZWxpbWl0ZWRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpO2Vsc2V7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShlKX19LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRml4ZWQzMkZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyPyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRml4ZWQzMkZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBGaXhlZDY0RmllbGQ9ZnVuY3Rpb24oKXt0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQ/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDY0RmllbGRcIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5hZHZhbmNlKDgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEdyb3VwPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMubmV4dEZpZWxkXzs7KXtpZighdGhpcy5uZXh0RmllbGQoKSl7Z29vZy5hc3NlcnRzLmZhaWwoXCJVbm1hdGNoZWQgc3RhcnQtZ3JvdXAgdGFnOiBzdHJlYW0gRU9GXCIpLHRoaXMuZXJyb3JfPSEwO2JyZWFrfWlmKHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKXt0aGlzLm5leHRGaWVsZF8hPWUmJihnb29nLmFzc2VydHMuZmFpbChcIlVubWF0Y2hlZCBlbmQtZ3JvdXAgdGFnXCIpLHRoaXMuZXJyb3JfPSEwKTticmVha310aGlzLnNraXBGaWVsZCgpfX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBGaWVsZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5leHRXaXJlVHlwZV8pe2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UOnRoaXMuc2tpcFZhcmludEZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0OnRoaXMuc2tpcEZpeGVkNjRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEOnRoaXMuc2tpcERlbGltaXRlZEZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyOnRoaXMuc2tpcEZpeGVkMzJGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVA6dGhpcy5za2lwR3JvdXAoKTticmVhaztkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIGVuY29kaW5nIGZvciBmaWVsZC5cIil9fSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVnaXN0ZXJSZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtudWxsPT09dGhpcy5yZWFkQ2FsbGJhY2tzXyYmKHRoaXMucmVhZENhbGxiYWNrc189e30pLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIXRoaXMucmVhZENhbGxiYWNrc19bZV0pLHRoaXMucmVhZENhbGxiYWNrc19bZV09dH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJ1blJlYWRDYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT09dGhpcy5yZWFkQ2FsbGJhY2tzXyksZT10aGlzLnJlYWRDYWxsYmFja3NfW2VdLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZSksZSh0aGlzKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRBbnk9ZnVuY3Rpb24oZSl7dGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRvV2lyZVR5cGUoZSk7dmFyIHQ9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlO3N3aXRjaChlKXtjYXNlIHQuRE9VQkxFOnJldHVybiB0aGlzLnJlYWREb3VibGUoKTtjYXNlIHQuRkxPQVQ6cmV0dXJuIHRoaXMucmVhZEZsb2F0KCk7Y2FzZSB0LklOVDY0OnJldHVybiB0aGlzLnJlYWRJbnQ2NCgpO2Nhc2UgdC5VSU5UNjQ6cmV0dXJuIHRoaXMucmVhZFVpbnQ2NCgpO2Nhc2UgdC5JTlQzMjpyZXR1cm4gdGhpcy5yZWFkSW50MzIoKTtjYXNlIHQuRklYRUQ2NDpyZXR1cm4gdGhpcy5yZWFkRml4ZWQ2NCgpO2Nhc2UgdC5GSVhFRDMyOnJldHVybiB0aGlzLnJlYWRGaXhlZDMyKCk7Y2FzZSB0LkJPT0w6cmV0dXJuIHRoaXMucmVhZEJvb2woKTtjYXNlIHQuU1RSSU5HOnJldHVybiB0aGlzLnJlYWRTdHJpbmcoKTtjYXNlIHQuR1JPVVA6Z29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpXCIpO2Nhc2UgdC5NRVNTQUdFOmdvb2cuYXNzZXJ0cy5mYWlsKFwiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpXCIpO2Nhc2UgdC5CWVRFUzpyZXR1cm4gdGhpcy5yZWFkQnl0ZXMoKTtjYXNlIHQuVUlOVDMyOnJldHVybiB0aGlzLnJlYWRVaW50MzIoKTtjYXNlIHQuRU5VTTpyZXR1cm4gdGhpcy5yZWFkRW51bSgpO2Nhc2UgdC5TRklYRUQzMjpyZXR1cm4gdGhpcy5yZWFkU2ZpeGVkMzIoKTtjYXNlIHQuU0ZJWEVENjQ6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDY0KCk7Y2FzZSB0LlNJTlQzMjpyZXR1cm4gdGhpcy5yZWFkU2ludDMyKCk7Y2FzZSB0LlNJTlQ2NDpyZXR1cm4gdGhpcy5yZWFkU2ludDY0KCk7Y2FzZSB0LkZIQVNINjQ6cmV0dXJuIHRoaXMucmVhZEZpeGVkSGFzaDY0KCk7Y2FzZSB0LlZIQVNINjQ6cmV0dXJuIHRoaXMucmVhZFZhcmludEhhc2g2NCgpO2RlZmF1bHQ6Z29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gcmVhZEFueSgpXCIpfXJldHVybiAwfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgbz10aGlzLmRlY29kZXJfLmdldEVuZCgpLHI9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3I9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKStyLHRoaXMuZGVjb2Rlcl8uc2V0RW5kKHIpLHQoZSx0aGlzKSx0aGlzLmRlY29kZXJfLnNldEN1cnNvcihyKSx0aGlzLmRlY29kZXJfLnNldEVuZChvKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRHcm91cD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dEZpZWxkXz09ZSksbyh0LHRoaXMpLHRoaXMuZXJyb3JffHx0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUHx8KGdvb2cuYXNzZXJ0cy5mYWlsKFwiR3JvdXAgc3VibWVzc2FnZSBkaWQgbm90IGVuZCB3aXRoIGFuIEVORF9HUk9VUCB0YWdcIiksdGhpcy5lcnJvcl89ITApfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RmllbGREZWNvZGVyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLHQ9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSxvPXQrZTtyZXR1cm4gZT1qc3BiLkJpbmFyeURlY29kZXIuYWxsb2ModGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKSx0LGUpLHRoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKG8pLGV9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRJbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRJbnQzMigpLnRvU3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWREb3VibGUoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLCEhdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFN0cmluZyhlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRCeXRlcz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkQnl0ZXMoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50SGFzaDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRWYXJpbnQ2NChlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTcGxpdFZhcmludDY0KChmdW5jdGlvbih0LG8pe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NCh0LG8sZSl9KSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRGaXhlZDY0KGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpZWxkXz1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgdD10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7dD10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK3Q7Zm9yKHZhciBvPVtdO3RoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk8dDspby5wdXNoKGUuY2FsbCh0aGlzLmRlY29kZXJfKSk7cmV0dXJuIG99LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNpbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50NjRTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWREb3VibGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEJvb2wpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEVudW0pfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVmFyaW50SGFzaDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQpfSxqc3BiLkJpbmFyeUVuY29kZXI9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlcl89W119LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGh9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5idWZmZXJfO3JldHVybiB0aGlzLmJ1ZmZlcl89W10sZX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSx0KXtmb3IoZ29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KHQ9PU1hdGguZmxvb3IodCkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpOzA8dHx8MTI3PGU7KXRoaXMuYnVmZmVyXy5wdXNoKDEyNyZlfDEyOCksZT0oZT4+Pjd8dDw8MjUpPj4+MCx0Pj4+PTc7dGhpcy5idWZmZXJfLnB1c2goZSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQodD09TWF0aC5mbG9vcih0KSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZVVpbnQzMihlKSx0aGlzLndyaXRlVWludDMyKHQpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQzMj1mdW5jdGlvbihlKXtmb3IoZ29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTsxMjc8ZTspdGhpcy5idWZmZXJfLnB1c2goMTI3JmV8MTI4KSxlPj4+PTc7dGhpcy5idWZmZXJfLnB1c2goZSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMj1mdW5jdGlvbihlKXtpZihnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLDA8PWUpdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoZSk7ZWxzZXtmb3IodmFyIHQ9MDs5PnQ7dCsrKXRoaXMuYnVmZmVyXy5wdXNoKDEyNyZlfDEyOCksZT4+PTc7dGhpcy5idWZmZXJfLnB1c2goMSl9fSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLGpzcGIudXRpbHMuc3BsaXRJbnQ2NChlKSx0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLGpzcGIudXRpbHMuc3BsaXRJbnQ2NChlKSx0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKChlPDwxXmU+PjMxKT4+PjApfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSxqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSl7dGhpcy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChlKSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLGpzcGIudXRpbHMudG9aaWd6YWc2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCwoZnVuY3Rpb24oZSxvKXt0LndyaXRlU3BsaXRWYXJpbnQ2NChlPj4+MCxvPj4+MCl9KSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OD1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmMjU2PmUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MTY9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJjY1NTM2PmUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjgmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjgmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MTYmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MjQmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ2ND1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLGpzcGIudXRpbHMuc3BsaXRVaW50NjQoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgtMTI4PD1lJiYxMjg+ZSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgtMzI3Njg8PWUmJjMyNzY4PmUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjgmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+OCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4xNiYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4yNCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSxqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksdGhpcy53cml0ZVNwbGl0Rml4ZWQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoK2U+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJitlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChlKSksdGhpcy53cml0ZVNwbGl0Rml4ZWQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVGbG9hdD1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KDEvMD09PWV8fC0xLzA9PT1lfHxpc05hTihlKXx8ZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYJiZlPD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCksanNwYi51dGlscy5zcGxpdEZsb2F0MzIoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMS8wPT09ZXx8LTEvMD09PWV8fGlzTmFOKGUpfHxlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgmJmU8PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYKSxqc3BiLnV0aWxzLnNwbGl0RmxvYXQ2NChlKSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJvb2w9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChcImJvb2xlYW5cIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPzE6MCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVFbnVtPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyKGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlQnl0ZXM9ZnVuY3Rpb24oZSl7dGhpcy5idWZmZXJfLnB1c2guYXBwbHkodGhpcy5idWZmZXJfLGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oZSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5idWZmZXJfLmxlbmd0aCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWUuY2hhckNvZGVBdChvKTtpZigxMjg+cil0aGlzLmJ1ZmZlcl8ucHVzaChyKTtlbHNlIGlmKDIwNDg+cil0aGlzLmJ1ZmZlcl8ucHVzaChyPj42fDE5MiksdGhpcy5idWZmZXJfLnB1c2goNjMmcnwxMjgpO2Vsc2UgaWYoNjU1MzY+cilpZig1NTI5Njw9ciYmNTYzMTk+PXImJm8rMTxlLmxlbmd0aCl7dmFyIG49ZS5jaGFyQ29kZUF0KG8rMSk7NTYzMjA8PW4mJjU3MzQzPj1uJiYocj0xMDI0KihyLTU1Mjk2KStuLTU2MzIwKzY1NTM2LHRoaXMuYnVmZmVyXy5wdXNoKHI+PjE4fDI0MCksdGhpcy5idWZmZXJfLnB1c2gocj4+MTImNjN8MTI4KSx0aGlzLmJ1ZmZlcl8ucHVzaChyPj42JjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goNjMmcnwxMjgpLG8rKyl9ZWxzZSB0aGlzLmJ1ZmZlcl8ucHVzaChyPj4xMnwyMjQpLHRoaXMuYnVmZmVyXy5wdXNoKHI+PjYmNjN8MTI4KSx0aGlzLmJ1ZmZlcl8ucHVzaCg2MyZyfDEyOCl9cmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGgtdH0sanNwYi5hcml0aD17fSxqc3BiLmFyaXRoLlVJbnQ2ND1mdW5jdGlvbihlLHQpe3RoaXMubG89ZSx0aGlzLmhpPXR9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGk8ZS5oaXx8dGhpcy5oaT09ZS5oaSYmdGhpcy5sbzxlLmxvPy0xOnRoaXMuaGk9PWUuaGkmJnRoaXMubG89PWUubG8/MDoxfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUucmlnaHRTaGlmdD1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoKHRoaXMubG8+Pj4xfCgxJnRoaXMuaGkpPDwzMSk+Pj4wLHRoaXMuaGk+Pj4xPj4+MCl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5sZWZ0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG88PDE+Pj4wLCh0aGlzLmhpPDwxfHRoaXMubG8+Pj4zMSk+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLm1zYj1mdW5jdGlvbigpe3JldHVybiEhKDIxNDc0ODM2NDgmdGhpcy5oaSl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5sc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISgxJnRoaXMubG8pfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuemVybz1mdW5jdGlvbigpe3JldHVybiAwPT10aGlzLmxvJiYwPT10aGlzLmhpfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoKHRoaXMubG8rZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaStlLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rZS5sbz8xOjApPj4+MCl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgodGhpcy5sby1lLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWUuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWUubG8/MTowKT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMj1mdW5jdGlvbihlLHQpe3ZhciBvPTY1NTM1JmUscj02NTUzNSZ0LG49dD4+PjE2O2Zvcih0PW8qcis2NTUzNioobypuJjY1NTM1KSs2NTUzNiooKGU+Pj49MTYpKnImNjU1MzUpLG89ZSpuKyhvKm4+Pj4xNikrKGUqcj4+PjE2KTs0Mjk0OTY3Mjk2PD10Oyl0LT00Mjk0OTY3Mjk2LG8rPTE7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0Pj4+MCxvPj4+MCl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7dmFyIHQ9anNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzIodGhpcy5sbyxlKTtyZXR1cm4oZT1qc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMih0aGlzLmhpLGUpKS5oaT1lLmxvLGUubG89MCx0LmFkZChlKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmRpdj1mdW5jdGlvbihlKXtpZigwPT1lKXJldHVybltdO3ZhciB0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLG89bmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSk7ZT1uZXcganNwYi5hcml0aC5VSW50NjQoZSwwKTtmb3IodmFyIHI9bmV3IGpzcGIuYXJpdGguVUludDY0KDEsMCk7IWUubXNiKCk7KWU9ZS5sZWZ0U2hpZnQoKSxyPXIubGVmdFNoaWZ0KCk7Zm9yKDshci56ZXJvKCk7KTA+PWUuY21wKG8pJiYodD10LmFkZChyKSxvPW8uc3ViKGUpKSxlPWUucmlnaHRTaGlmdCgpLHI9ci5yaWdodFNoaWZ0KCk7cmV0dXJuW3Qsb119LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgZT1cIlwiLHQ9dGhpczshdC56ZXJvKCk7KXt2YXIgbz0odD10LmRpdigxMCkpWzBdO2U9dFsxXS5sbytlLHQ9b31yZXR1cm5cIlwiPT1lJiYoZT1cIjBcIiksZX0sanNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCksbz1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxyPTA7cjxlLmxlbmd0aDtyKyspe2lmKFwiMFwiPmVbcl18fFwiOVwiPGVbcl0pcmV0dXJuIG51bGw7dmFyIG49cGFyc2VJbnQoZVtyXSwxMCk7by5sbz1uLHQ9dC5tdWwoMTApLmFkZChvKX1yZXR1cm4gdH0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpfSxqc3BiLmFyaXRoLkludDY0PWZ1bmN0aW9uKGUsdCl7dGhpcy5sbz1lLHRoaXMuaGk9dH0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNwYi5hcml0aC5JbnQ2NCgodGhpcy5sbytlLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK2UuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbytlLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNwYi5hcml0aC5JbnQ2NCgodGhpcy5sby1lLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWUuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWUubG8/MTowKT4+PjApfSxqc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5JbnQ2NCh0aGlzLmxvLHRoaXMuaGkpfSxqc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTAhPSgyMTQ3NDgzNjQ4JnRoaXMuaGkpLHQ9bmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSk7cmV0dXJuIGUmJih0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLnN1Yih0KSksKGU/XCItXCI6XCJcIikrdC50b1N0cmluZygpfSxqc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9MDxlLmxlbmd0aCYmXCItXCI9PWVbMF07cmV0dXJuIHQmJihlPWUuc3Vic3RyaW5nKDEpKSxudWxsPT09KGU9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyhlKSk/bnVsbDoodCYmKGU9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCkuc3ViKGUpKSxuZXcganNwYi5hcml0aC5JbnQ2NChlLmxvLGUuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXI9ZnVuY3Rpb24oKXt0aGlzLmJsb2Nrc189W10sdGhpcy50b3RhbExlbmd0aF89MCx0aGlzLmVuY29kZXJfPW5ldyBqc3BiLkJpbmFyeUVuY29kZXIsdGhpcy5ib29rbWFya3NfPVtdfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYXBwZW5kVWludDhBcnJheV89ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbmNvZGVyXy5lbmQoKTt0aGlzLmJsb2Nrc18ucHVzaCh0KSx0aGlzLmJsb2Nrc18ucHVzaChlKSx0aGlzLnRvdGFsTGVuZ3RoXys9dC5sZW5ndGgrZS5sZW5ndGh9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5iZWdpbkRlbGltaXRlZF89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLGU9dGhpcy5lbmNvZGVyXy5lbmQoKSx0aGlzLmJsb2Nrc18ucHVzaChlKSx0aGlzLnRvdGFsTGVuZ3RoXys9ZS5sZW5ndGgsZS5wdXNoKHRoaXMudG90YWxMZW5ndGhfKSxlfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZW5kRGVsaW1pdGVkXz1mdW5jdGlvbihlKXt2YXIgdD1lLnBvcCgpO2Zvcih0PXRoaXMudG90YWxMZW5ndGhfK3RoaXMuZW5jb2Rlcl8ubGVuZ3RoKCktdCxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQpOzEyNzx0OyllLnB1c2goMTI3JnR8MTI4KSx0Pj4+PTcsdGhpcy50b3RhbExlbmd0aF8rKztlLnB1c2godCksdGhpcy50b3RhbExlbmd0aF8rK30sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2VyaWFsaXplZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuYXBwZW5kVWludDhBcnJheV8oZS5zdWJhcnJheSh0LG8pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLm1heWJlV3JpdGVTZXJpYWxpemVkTWVzc2FnZT1mdW5jdGlvbihlLHQsbyl7bnVsbCE9ZSYmbnVsbCE9dCYmbnVsbCE9byYmdGhpcy53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlKGUsdCxvKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdLHRoaXMuZW5jb2Rlcl8uZW5kKCksdGhpcy50b3RhbExlbmd0aF89MCx0aGlzLmJvb2ttYXJrc189W119LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5nZXRSZXN1bHRCdWZmZXI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA9PXRoaXMuYm9va21hcmtzXy5sZW5ndGgpO2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpKSx0PXRoaXMuYmxvY2tzXyxvPXQubGVuZ3RoLHI9MCxuPTA7bjxvO24rKyl7dmFyIGk9dFtuXTtlLnNldChpLHIpLHIrPWkubGVuZ3RofXJldHVybiB0PXRoaXMuZW5jb2Rlcl8uZW5kKCksZS5zZXQodCxyKSxyKz10Lmxlbmd0aCxnb29nLmFzc2VydHMuYXNzZXJ0KHI9PWUubGVuZ3RoKSx0aGlzLmJsb2Nrc189W2VdLGV9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5nZXRSZXN1bHRCYXNlNjRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheSh0aGlzLmdldFJlc3VsdEJ1ZmZlcigpLGUpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYmVnaW5TdWJNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMuYm9va21hcmtzXy5wdXNoKHRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmVuZFN1Yk1lc3NhZ2U9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXRoaXMuYm9va21hcmtzXy5sZW5ndGgpLHRoaXMuZW5kRGVsaW1pdGVkXyh0aGlzLmJvb2ttYXJrc18ucG9wKCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaWVsZEhlYWRlcl89ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0KDE8PWUmJmU9PU1hdGguZmxvb3IoZSkpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqZSt0KX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQW55PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU7c3dpdGNoKGUpe2Nhc2Ugci5ET1VCTEU6dGhpcy53cml0ZURvdWJsZSh0LG8pO2JyZWFrO2Nhc2Ugci5GTE9BVDp0aGlzLndyaXRlRmxvYXQodCxvKTticmVhaztjYXNlIHIuSU5UNjQ6dGhpcy53cml0ZUludDY0KHQsbyk7YnJlYWs7Y2FzZSByLlVJTlQ2NDp0aGlzLndyaXRlVWludDY0KHQsbyk7YnJlYWs7Y2FzZSByLklOVDMyOnRoaXMud3JpdGVJbnQzMih0LG8pO2JyZWFrO2Nhc2Ugci5GSVhFRDY0OnRoaXMud3JpdGVGaXhlZDY0KHQsbyk7YnJlYWs7Y2FzZSByLkZJWEVEMzI6dGhpcy53cml0ZUZpeGVkMzIodCxvKTticmVhaztjYXNlIHIuQk9PTDp0aGlzLndyaXRlQm9vbCh0LG8pO2JyZWFrO2Nhc2Ugci5TVFJJTkc6dGhpcy53cml0ZVN0cmluZyh0LG8pO2JyZWFrO2Nhc2Ugci5HUk9VUDpnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpXCIpO2JyZWFrO2Nhc2Ugci5NRVNTQUdFOmdvb2cuYXNzZXJ0cy5mYWlsKFwiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKVwiKTticmVhaztjYXNlIHIuQllURVM6dGhpcy53cml0ZUJ5dGVzKHQsbyk7YnJlYWs7Y2FzZSByLlVJTlQzMjp0aGlzLndyaXRlVWludDMyKHQsbyk7YnJlYWs7Y2FzZSByLkVOVU06dGhpcy53cml0ZUVudW0odCxvKTticmVhaztjYXNlIHIuU0ZJWEVEMzI6dGhpcy53cml0ZVNmaXhlZDMyKHQsbyk7YnJlYWs7Y2FzZSByLlNGSVhFRDY0OnRoaXMud3JpdGVTZml4ZWQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5TSU5UMzI6dGhpcy53cml0ZVNpbnQzMih0LG8pO2JyZWFrO2Nhc2Ugci5TSU5UNjQ6dGhpcy53cml0ZVNpbnQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5GSEFTSDY0OnRoaXMud3JpdGVGaXhlZEhhc2g2NCh0LG8pO2JyZWFrO2Nhc2Ugci5WSEFTSDY0OnRoaXMud3JpdGVWYXJpbnRIYXNoNjQodCxvKTticmVhaztkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBmaWVsZCB0eXBlIGluIHdyaXRlQW55KClcIil9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQzMl89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmcodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQzMj1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PXBhcnNlSW50KHQsMTApLGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9anNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nKHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHQubG8sdC5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50MzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1wYXJzZUludCh0LDEwKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnQzMj1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlWmlnemFnVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50NjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludEhhc2g2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJnRoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfKGUsdCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJnRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oZSx0KX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQzMj1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NCh0LmxvLHQuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlSW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NCh0LmxvLHQuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmxvYXQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZURvdWJsZT1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZSh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUJvb2w9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydChcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlQm9vbCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUVudW09ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGU9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSksdGhpcy5lbmNvZGVyXy53cml0ZVN0cmluZyh0KSx0aGlzLmVuZERlbGltaXRlZF8oZSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVCeXRlcz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheSh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih0Lmxlbmd0aCksdGhpcy5hcHBlbmRVaW50OEFycmF5Xyh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe251bGwhPXQmJihlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpLG8odCx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oZSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlU2V0PWZ1bmN0aW9uKGUsdCxvKXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXygxLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDIsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIoZSksZT10aGlzLmJlZ2luRGVsaW1pdGVkXygzKSxvKHQsdGhpcyksdGhpcy5lbmREZWxpbWl0ZWRfKGUpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlR3JvdXA9ZnVuY3Rpb24oZSx0LG8pe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLG8odCx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoOD09dC5sZW5ndGgpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNoNjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCg4PT10Lmxlbmd0aCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVZhcmludEhhc2g2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlLHQsbyl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQodCxvKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQodCxvKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7dmFyIHI9dGhpcy5lbmNvZGVyXztqc3BiLnV0aWxzLnRvWmlnemFnNjQodCxvLChmdW5jdGlvbihlLHQpe3Iud3JpdGVTcGxpdFZhcmludDY0KGU+Pj4wLHQ+Pj4wKX0pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlSW50MzJTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDY0XyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMud3JpdGVTcGxpdEZpeGVkNjQoZSxvKHRbbl0pLHIodFtuXSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChlLG8odFtuXSkscih0W25dKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMud3JpdGVTcGxpdFppZ3phZ1ZhcmludDY0KGUsbyh0W25dKSxyKHRbbl0pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUludDY0U3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVVaW50MzJTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDY0XyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVVpbnQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZpeGVkMzIoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWQ2NChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGaXhlZDY0U3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTZml4ZWQzMihlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2ZpeGVkNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNmaXhlZDY0U3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRmxvYXQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGbG9hdChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZERvdWJsZT1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZURvdWJsZShlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEJvb2w9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVCb29sKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRW51bT1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUVudW0oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCeXRlcz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUJ5dGVzKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkTWVzc2FnZT1mdW5jdGlvbihlLHQsbyl7aWYobnVsbCE9dClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7byh0W3JdLHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhuKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkR3JvdXA9ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGwhPXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSxvKHRbcl0sdGhpcyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGaXhlZEhhc2g2NChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFZhcmludEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVZhcmludEhhc2g2NChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMih0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihwYXJzZUludCh0W29dLDEwKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChvKHRbbl0pLHIodFtuXSkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChvKHRbbl0pLHIodFtuXSkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG49dGhpcy5lbmNvZGVyXyxpPTA7aTx0Lmxlbmd0aDtpKyspanNwYi51dGlscy50b1ppZ3phZzY0KG8odFtpXSkscih0W2ldKSwoZnVuY3Rpb24oZSx0KXtuLndyaXRlU3BsaXRWYXJpbnQ2NChlPj4+MCx0Pj4+MCl9KSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9anNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nKHRbb10pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHIubG8sci5oaSl9dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIocGFyc2VJbnQodFtvXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKHRbb10pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHIubG8sci5oaSl9dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDMyKHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KHRbb10pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDMyKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG89anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyh0W2VdKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KG8ubG8sby5oaSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDY0U3RyaW5nKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGbG9hdD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWREb3VibGU9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVEb3VibGUodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEJvb2w9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlQm9vbCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRW51bT1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVFbnVtKHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNoNjQodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFZhcmludEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5NYXA9ZnVuY3Rpb24oZSx0KXt0aGlzLmFycl89ZSx0aGlzLnZhbHVlQ3Rvcl89dCx0aGlzLm1hcF89e30sdGhpcy5hcnJDbGVhbj0hMCwwPHRoaXMuYXJyXy5sZW5ndGgmJnRoaXMubG9hZEZyb21BcnJheV8oKX0sanNwYi5NYXAucHJvdG90eXBlLmxvYWRGcm9tQXJyYXlfPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmFycl8ubGVuZ3RoO2UrKyl7dmFyIHQ9dGhpcy5hcnJfW2VdLG89dFswXTt0aGlzLm1hcF9bby50b1N0cmluZygpXT1uZXcganNwYi5NYXAuRW50cnlfKG8sdFsxXSl9dGhpcy5hcnJDbGVhbj0hMH0sanNwYi5NYXAucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtpZih0aGlzLmFyckNsZWFuKXtpZih0aGlzLnZhbHVlQ3Rvcl8pe3ZhciBlLHQ9dGhpcy5tYXBfO2ZvcihlIGluIHQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkpe3ZhciBvPXRbZV0udmFsdWVXcmFwcGVyO28mJm8udG9BcnJheSgpfX19ZWxzZXtmb3IodGhpcy5hcnJfLmxlbmd0aD0wLCh0PXRoaXMuc3RyaW5nS2V5c18oKSkuc29ydCgpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5tYXBfW3RbZV1dOyhvPXIudmFsdWVXcmFwcGVyKSYmby50b0FycmF5KCksdGhpcy5hcnJfLnB1c2goW3Iua2V5LHIudmFsdWVdKX10aGlzLmFyckNsZWFuPSEwfXJldHVybiB0aGlzLmFycl99LGpzcGIuTWFwLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz10aGlzLnRvQXJyYXkoKSxyPVtdLG49MDtuPG8ubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5tYXBfW29bbl1bMF0udG9TdHJpbmcoKV07dGhpcy53cmFwRW50cnlfKGkpO3ZhciBzPWkudmFsdWVXcmFwcGVyO3M/KGdvb2cuYXNzZXJ0cy5hc3NlcnQodCksci5wdXNoKFtpLmtleSx0KGUscyldKSk6ci5wdXNoKFtpLmtleSxpLnZhbHVlXSl9cmV0dXJuIHJ9LGpzcGIuTWFwLmZyb21PYmplY3Q9ZnVuY3Rpb24oZSx0LG8pe3Q9bmV3IGpzcGIuTWFwKFtdLHQpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdWzBdLGk9byhlW3JdWzFdKTt0LnNldChuLGkpfXJldHVybiB0fSxqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfPWZ1bmN0aW9uKGUpe3RoaXMuaWR4Xz0wLHRoaXMuYXJyXz1lfSxqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR4Xzx0aGlzLmFycl8ubGVuZ3RoP3tkb25lOiExLHZhbHVlOnRoaXMuYXJyX1t0aGlzLmlkeF8rK119Ontkb25lOiEwLHZhbHVlOnZvaWQgMH19LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJihqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxqc3BiLk1hcC5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nS2V5c18oKS5sZW5ndGh9LGpzcGIuTWFwLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwXz17fSx0aGlzLmFyckNsZWFuPSExfSxqc3BiLk1hcC5wcm90b3R5cGUuZGVsPWZ1bmN0aW9uKGUpe2U9ZS50b1N0cmluZygpO3ZhciB0PXRoaXMubWFwXy5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gZGVsZXRlIHRoaXMubWFwX1tlXSx0aGlzLmFyckNsZWFuPSExLHR9LGpzcGIuTWFwLnByb3RvdHlwZS5nZXRFbnRyeUxpc3Q9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dGhpcy5tYXBfW3Rbb11dO2UucHVzaChbci5rZXksci52YWx1ZV0pfXJldHVybiBlfSxqc3BiLk1hcC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zdHJpbmdLZXlzXygpO3Quc29ydCgpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10aGlzLm1hcF9bdFtvXV07ZS5wdXNoKFtyLmtleSx0aGlzLndyYXBFbnRyeV8ocildKX1yZXR1cm4gbmV3IGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnN0cmluZ0tleXNfKCk7dC5zb3J0KCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspZS5wdXNoKHRoaXMubWFwX1t0W29dXS5rZXkpO3JldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhlKX0sanNwYi5NYXAucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zdHJpbmdLZXlzXygpO3Quc29ydCgpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWUucHVzaCh0aGlzLndyYXBFbnRyeV8odGhpcy5tYXBfW3Rbb11dKSk7cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGUpfSxqc3BiLk1hcC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe3ZhciBvPXRoaXMuc3RyaW5nS2V5c18oKTtvLnNvcnQoKTtmb3IodmFyIHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5tYXBfW29bcl1dO2UuY2FsbCh0LHRoaXMud3JhcEVudHJ5XyhuKSxuLmtleSx0aGlzKX19LGpzcGIuTWFwLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uZXcganNwYi5NYXAuRW50cnlfKGUpO3JldHVybiB0aGlzLnZhbHVlQ3Rvcl8/KG8udmFsdWVXcmFwcGVyPXQsby52YWx1ZT10LnRvQXJyYXkoKSk6by52YWx1ZT10LHRoaXMubWFwX1tlLnRvU3RyaW5nKCldPW8sdGhpcy5hcnJDbGVhbj0hMSx0aGlzfSxqc3BiLk1hcC5wcm90b3R5cGUud3JhcEVudHJ5Xz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhlLnZhbHVlV3JhcHBlcnx8KGUudmFsdWVXcmFwcGVyPW5ldyB0aGlzLnZhbHVlQ3Rvcl8oZS52YWx1ZSkpLGUudmFsdWVXcmFwcGVyKTplLnZhbHVlfSxqc3BiLk1hcC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe2lmKGU9dGhpcy5tYXBfW2UudG9TdHJpbmcoKV0pcmV0dXJuIHRoaXMud3JhcEVudHJ5XyhlKX0sanNwYi5NYXAucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygpaW4gdGhpcy5tYXBffSxqc3BiLk1hcC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUsdCxvLHIsbil7dmFyIGk9dGhpcy5zdHJpbmdLZXlzXygpO2kuc29ydCgpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgYT10aGlzLm1hcF9baVtzXV07dC5iZWdpblN1Yk1lc3NhZ2UoZSksby5jYWxsKHQsMSxhLmtleSksdGhpcy52YWx1ZUN0b3JfP3IuY2FsbCh0LDIsdGhpcy53cmFwRW50cnlfKGEpLG4pOnIuY2FsbCh0LDIsYS52YWx1ZSksdC5lbmRTdWJNZXNzYWdlKCl9fSxqc3BiLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlLHQsbyxyLG4saSxzKXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3ZhciBhPXQuZ2V0RmllbGROdW1iZXIoKTsxPT1hP2k9by5jYWxsKHQpOjI9PWEmJihlLnZhbHVlQ3Rvcl8/KGdvb2cuYXNzZXJ0cy5hc3NlcnQobiksc3x8KHM9bmV3IGUudmFsdWVDdG9yXyksci5jYWxsKHQscyxuKSk6cz1yLmNhbGwodCkpfWdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9aSksZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1zKSxlLnNldChpLHMpfSxqc3BiLk1hcC5wcm90b3R5cGUuc3RyaW5nS2V5c189ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMubWFwXyxvPVtdO2ZvcihlIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm8ucHVzaChlKTtyZXR1cm4gb30sanNwYi5NYXAuRW50cnlfPWZ1bmN0aW9uKGUsdCl7dGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXQsdGhpcy52YWx1ZVdyYXBwZXI9dm9pZCAwfSxqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz1mdW5jdGlvbihlLHQsbyxyLG4pe3RoaXMuZmllbGRJbmRleD1lLHRoaXMuZmllbGROYW1lPXQsdGhpcy5jdG9yPW8sdGhpcy50b09iamVjdEZuPXIsdGhpcy5pc1JlcGVhdGVkPW59LGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPWZ1bmN0aW9uKGUsdCxvLHIsbixpKXt0aGlzLmZpZWxkSW5mbz1lLHRoaXMuYmluYXJ5UmVhZGVyRm49dCx0aGlzLmJpbmFyeVdyaXRlckZuPW8sdGhpcy5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm49cix0aGlzLmJpbmFyeU1lc3NhZ2VEZXNlcmlhbGl6ZUZuPW4sdGhpcy5pc1BhY2tlZD1pfSxqc3BiLkV4dGVuc2lvbkZpZWxkSW5mby5wcm90b3R5cGUuaXNNZXNzYWdlVHlwZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jdG9yfSxqc3BiLk1lc3NhZ2U9ZnVuY3Rpb24oKXt9LGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1Q9ITAsanNwYi5NZXNzYWdlLkdFTkVSQVRFX0ZST01fT0JKRUNUPSFnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFLGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19TVFJJTkc9ITAsanNwYi5NZXNzYWdlLkFTU1VNRV9MT0NBTF9BUlJBWVM9ITEsanNwYi5NZXNzYWdlLlNFUklBTElaRV9FTVBUWV9UUkFJTElOR19GSUVMRFM9ITAsanNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfPVwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXksanNwYi5NZXNzYWdlLnByb3RvdHlwZS5nZXRKc1BiTWVzc2FnZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkX30sanNwYi5NZXNzYWdlLmdldEluZGV4Xz1mdW5jdGlvbihlLHQpe3JldHVybiB0K2UuYXJyYXlJbmRleE9mZnNldF99LGpzcGIuTWVzc2FnZS5oaWRkZW5FUzZQcm9wZXJ0eV89ZnVuY3Rpb24oKXt9LGpzcGIuTWVzc2FnZS5nZXRGaWVsZE51bWJlcl89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lLmFycmF5SW5kZXhPZmZzZXRffSxqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZT1mdW5jdGlvbihlLHQsbyxyLG4saSl7aWYoZS53cmFwcGVyc189bnVsbCx0fHwodD1vP1tvXTpbXSksZS5tZXNzYWdlSWRfPW8/U3RyaW5nKG8pOnZvaWQgMCxlLmFycmF5SW5kZXhPZmZzZXRfPTA9PT1vPy0xOjAsZS5hcnJheT10LGpzcGIuTWVzc2FnZS5pbml0UGl2b3RBbmRFeHRlbnNpb25PYmplY3RfKGUsciksZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9LGpzcGIuTWVzc2FnZS5TRVJJQUxJWkVfRU1QVFlfVFJBSUxJTkdfRklFTERTfHwoZS5yZXBlYXRlZEZpZWxkcz1uKSxuKWZvcih0PTA7dDxuLmxlbmd0aDt0KyspKG89blt0XSk8ZS5waXZvdF8/KG89anNwYi5NZXNzYWdlLmdldEluZGV4XyhlLG8pLGUuYXJyYXlbb109ZS5hcnJheVtvXXx8anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfKTooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhlKSxlLmV4dGVuc2lvbk9iamVjdF9bb109ZS5leHRlbnNpb25PYmplY3RfW29dfHxqc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8pO2lmKGkmJmkubGVuZ3RoKWZvcih0PTA7dDxpLmxlbmd0aDt0KyspanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UoZSxpW3RdKX0sanNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfPWdvb2cuREVCVUcmJk9iamVjdC5mcmVlemU/T2JqZWN0LmZyZWV6ZShbXSk6W10sanNwYi5NZXNzYWdlLmlzQXJyYXlfPWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLk1lc3NhZ2UuQVNTVU1FX0xPQ0FMX0FSUkFZUz9lIGluc3RhbmNlb2YgQXJyYXk6QXJyYXkuaXNBcnJheShlKX0sanNwYi5NZXNzYWdlLmlzRXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihlKXtyZXR1cm4hKG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZXx8anNwYi5NZXNzYWdlLmlzQXJyYXlfKGUpfHxqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KX0sanNwYi5NZXNzYWdlLmluaXRQaXZvdEFuZEV4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oZSx0KXt2YXIgbz1lLmFycmF5Lmxlbmd0aCxyPS0xO2lmKG8mJihyPW8tMSxvPWUuYXJyYXlbcl0sanNwYi5NZXNzYWdlLmlzRXh0ZW5zaW9uT2JqZWN0XyhvKSkpcmV0dXJuIGUucGl2b3RfPWpzcGIuTWVzc2FnZS5nZXRGaWVsZE51bWJlcl8oZSxyKSx2b2lkKGUuZXh0ZW5zaW9uT2JqZWN0Xz1vKTstMTx0PyhlLnBpdm90Xz1NYXRoLm1heCh0LGpzcGIuTWVzc2FnZS5nZXRGaWVsZE51bWJlcl8oZSxyKzEpKSxlLmV4dGVuc2lvbk9iamVjdF89bnVsbCk6ZS5waXZvdF89TnVtYmVyLk1BWF9WQUxVRX0sanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihlKXt2YXIgdD1qc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsZS5waXZvdF8pO2UuYXJyYXlbdF18fChlLmV4dGVuc2lvbk9iamVjdF89ZS5hcnJheVt0XT17fSl9LGpzcGIuTWVzc2FnZS50b09iamVjdExpc3Q9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspcltuXT10LmNhbGwoZVtuXSxvLGVbbl0pO3JldHVybiByfSxqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb249ZnVuY3Rpb24oZSx0LG8scixuKXtmb3IodmFyIGkgaW4gbyl7dmFyIHM9b1tpXSxhPXIuY2FsbChlLHMpO2lmKG51bGwhPWEpe2Zvcih2YXIgcCBpbiBzLmZpZWxkTmFtZSlpZihzLmZpZWxkTmFtZS5oYXNPd25Qcm9wZXJ0eShwKSlicmVhazt0W3BdPXMudG9PYmplY3RGbj9zLmlzUmVwZWF0ZWQ/anNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChhLHMudG9PYmplY3RGbixuKTpzLnRvT2JqZWN0Rm4obixhKTphfX19LGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zPWZ1bmN0aW9uKGUsdCxvLHIpe2Zvcih2YXIgbiBpbiBvKXt2YXIgaT1vW25dLHM9aS5maWVsZEluZm87aWYoIWkuYmluYXJ5V3JpdGVyRm4pdGhyb3cgRXJyb3IoXCJNZXNzYWdlIGV4dGVuc2lvbiBwcmVzZW50IHRoYXQgd2FzIGdlbmVyYXRlZCB3aXRob3V0IGJpbmFyeSBzZXJpYWxpemF0aW9uIHN1cHBvcnRcIik7dmFyIGE9ci5jYWxsKGUscyk7aWYobnVsbCE9YSlpZihzLmlzTWVzc2FnZVR5cGUoKSl7aWYoIWkuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuKXRocm93IEVycm9yKFwiTWVzc2FnZSBleHRlbnNpb24gcHJlc2VudCBob2xkaW5nIHN1Ym1lc3NhZ2Ugd2l0aG91dCBiaW5hcnkgc3VwcG9ydCBlbmFibGVkLCBhbmQgbWVzc2FnZSBpcyBiZWluZyBzZXJpYWxpemVkIHRvIGJpbmFyeSBmb3JtYXRcIik7aS5iaW5hcnlXcml0ZXJGbi5jYWxsKHQscy5maWVsZEluZGV4LGEsaS5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4pfWVsc2UgaS5iaW5hcnlXcml0ZXJGbi5jYWxsKHQscy5maWVsZEluZGV4LGEpfX0sanNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb249ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgaT1vW3QuZ2V0RmllbGROdW1iZXIoKV07aWYoaSl7aWYobz1pLmZpZWxkSW5mbywhaS5iaW5hcnlSZWFkZXJGbil0aHJvdyBFcnJvcihcIkRlc2VyaWFsaXppbmcgZXh0ZW5zaW9uIHdob3NlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90IHN1cHBvcnQgYmluYXJ5IGZvcm1hdFwiKTtpZihvLmlzTWVzc2FnZVR5cGUoKSl7dmFyIHM9bmV3IG8uY3RvcjtpLmJpbmFyeVJlYWRlckZuLmNhbGwodCxzLGkuYmluYXJ5TWVzc2FnZURlc2VyaWFsaXplRm4pfWVsc2Ugcz1pLmJpbmFyeVJlYWRlckZuLmNhbGwodCk7by5pc1JlcGVhdGVkJiYhaS5pc1BhY2tlZD8odD1yLmNhbGwoZSxvKSk/dC5wdXNoKHMpOm4uY2FsbChlLG8sW3NdKTpuLmNhbGwoZSxvLHMpfWVsc2UgdC5za2lwRmllbGQoKX0sanNwYi5NZXNzYWdlLmdldEZpZWxkPWZ1bmN0aW9uKGUsdCl7aWYodDxlLnBpdm90Xyl7dD1qc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsdCk7dmFyIG89ZS5hcnJheVt0XTtyZXR1cm4gbz09PWpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz9lLmFycmF5W3RdPVtdOm99aWYoZS5leHRlbnNpb25PYmplY3RfKXJldHVybihvPWUuZXh0ZW5zaW9uT2JqZWN0X1t0XSk9PT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8/ZS5leHRlbnNpb25PYmplY3RfW3RdPVtdOm99LGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpfSxqc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsdCkpP2U6K2V9LGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsdCkpP2U6ISFlfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGbG9hdGluZ1BvaW50RmllbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpO2lmKGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX3x8KGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSksIWUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1t0XSl7Zm9yKHZhciByPTA7cjxvLmxlbmd0aDtyKyspb1tyXT0rb1tyXTtlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bdF09ITB9cmV0dXJuIG99LGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEJvb2xlYW5GaWVsZD1mdW5jdGlvbihlLHQpe3ZhciBvPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGUsdCk7aWYoZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KSwhZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdKXtmb3IodmFyIHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdPSEhb1tyXTtlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bdF09ITB9cmV0dXJuIG99LGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHxcInN0cmluZ1wiPT10eXBlb2YgZT9lOmpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/Z29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5KGUpOihnb29nLmFzc2VydHMuZmFpbChcIkNhbm5vdCBjb2VyY2UgdG8gYjY0IHN0cmluZzogXCIrZ29vZy50eXBlT2YoZSkpLG51bGwpfSxqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHxlIGluc3RhbmNlb2YgVWludDhBcnJheT9lOlwic3RyaW5nXCI9PXR5cGVvZiBlP2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShlKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJDYW5ub3QgY29lcmNlIHRvIFVpbnQ4QXJyYXk6IFwiK2dvb2cudHlwZU9mKGUpKSxudWxsKX0sanNwYi5NZXNzYWdlLmJ5dGVzTGlzdEFzQjY0PWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyhlKSxlLmxlbmd0aCYmXCJzdHJpbmdcIiE9dHlwZW9mIGVbMF0/Z29vZy5hcnJheS5tYXAoZSxqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NCk6ZX0sanNwYi5NZXNzYWdlLmJ5dGVzTGlzdEFzVTg9ZnVuY3Rpb24oZSl7cmV0dXJuIGpzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfKGUpLCFlLmxlbmd0aHx8ZVswXWluc3RhbmNlb2YgVWludDhBcnJheT9lOmdvb2cuYXJyYXkubWFwKGUsanNwYi5NZXNzYWdlLmJ5dGVzQXNVOCl9LGpzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfPWZ1bmN0aW9uKGUpe2lmKGdvb2cuREVCVUcmJmUmJjE8ZS5sZW5ndGgpe3ZhciB0PWdvb2cudHlwZU9mKGVbMF0pO2dvb2cuYXJyYXkuZm9yRWFjaChlLChmdW5jdGlvbihlKXtnb29nLnR5cGVPZihlKSE9dCYmZ29vZy5hc3NlcnRzLmZhaWwoXCJJbmNvbnNpc3RlbnQgdHlwZSBpbiBKU1BCIHJlcGVhdGVkIGZpZWxkIGFycmF5LiBHb3QgXCIrZ29vZy50eXBlT2YoZSkrXCIgZXhwZWN0ZWQgXCIrdCl9KSl9fSxqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpKT9vOmV9LGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQoZSx0KSk/bzplfSxqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQoZSx0KSk/bzplfSxqc3BiLk1lc3NhZ2UuZ2V0RmllbGRQcm90bzM9anNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQsanNwYi5NZXNzYWdlLmdldE1hcEZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLHQgaW4gZS53cmFwcGVyc18pcmV0dXJuIGUud3JhcHBlcnNfW3RdO3ZhciBuPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpO2lmKCFuKXtpZihvKXJldHVybjtuPVtdLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQsbil9cmV0dXJuIGUud3JhcHBlcnNfW3RdPW5ldyBqc3BiLk1hcChuLHIpfSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksdDxlLnBpdm90Xz9lLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSx0KV09bzooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhlKSxlLmV4dGVuc2lvbk9iamVjdF9bdF09byksZX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbywwKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLDApfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbywhMSl9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sXCJcIil9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbyxcIlwiKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sMCl9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdJbnRGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sXCIwXCIpfSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksbyE9PXI/anNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxvKTp0PGUucGl2b3RfP2UuYXJyYXlbanNwYi5NZXNzYWdlLmdldEluZGV4XyhlLHQpXT1udWxsOihqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfKGUpLGRlbGV0ZSBlLmV4dGVuc2lvbk9iamVjdF9bdF0pLGV9LGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQ9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSx0PWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGUsdCksbnVsbCE9cj90LnNwbGljZShyLDAsbyk6dC5wdXNoKG8pLGV9LGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksKG89anNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UoZSxvKSkmJm8hPT10JiZ2b2lkIDAhPT1yJiYoZS53cmFwcGVyc18mJm8gaW4gZS53cmFwcGVyc18mJihlLndyYXBwZXJzX1tvXT12b2lkIDApLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLG8sdm9pZCAwKSksanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxyKX0sanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8scixuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0scz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSxpKTtudWxsIT1zJiYobz1pLHI9cyxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSxpLHZvaWQgMCkpfXJldHVybiBvPyhqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSxvLHIpLG8pOjB9LGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8scil7aWYoZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSksIWUud3JhcHBlcnNfW29dKXt2YXIgbj1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSxvKTsocnx8bikmJihlLndyYXBwZXJzX1tvXT1uZXcgdChuKSl9cmV0dXJuIGUud3JhcHBlcnNfW29dfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uud3JhcFJlcGVhdGVkRmllbGRfKGUsdCxvKSwodD1lLndyYXBwZXJzX1tvXSk9PWpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXyYmKHQ9ZS53cmFwcGVyc19bb109W10pLHR9LGpzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF89ZnVuY3Rpb24oZSx0LG8pe2lmKGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLCFlLndyYXBwZXJzX1tvXSl7Zm9yKHZhciByPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGUsbyksbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbltpXT1uZXcgdChyW2ldKTtlLndyYXBwZXJzX1tvXT1ufX0sanNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pO3ZhciByPW8/by50b0FycmF5KCk6bztyZXR1cm4gZS53cmFwcGVyc19bdF09byxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LHIpfSxqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8scil7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pO3ZhciBuPXI/ci50b0FycmF5KCk6cjtyZXR1cm4gZS53cmFwcGVyc19bdF09cixqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZChlLHQsbyxuKX0sanNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSksbz1vfHxbXTtmb3IodmFyIHI9W10sbj0wO248by5sZW5ndGg7bisrKXJbbl09b1tuXS50b0FycmF5KCk7cmV0dXJuIGUud3JhcHBlcnNfW3RdPW8sanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxyKX0sanNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8scixuKXtqc3BiLk1lc3NhZ2Uud3JhcFJlcGVhdGVkRmllbGRfKGUscix0KTt2YXIgaT1lLndyYXBwZXJzX1t0XTtyZXR1cm4gaXx8KGk9ZS53cmFwcGVyc19bdF09W10pLG89b3x8bmV3IHIsZT1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpLG51bGwhPW4/KGkuc3BsaWNlKG4sMCxvKSxlLnNwbGljZShuLDAsby50b0FycmF5KCkpKTooaS5wdXNoKG8pLGUucHVzaChvLnRvQXJyYXkoKSkpLG99LGpzcGIuTWVzc2FnZS50b01hcD1mdW5jdGlvbihlLHQsbyxyKXtmb3IodmFyIG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKW5bdC5jYWxsKGVbaV0pXT1vP28uY2FsbChlW2ldLHIsZVtpXSk6ZVtpXTtyZXR1cm4gbn0sanNwYi5NZXNzYWdlLnByb3RvdHlwZS5zeW5jTWFwRmllbGRzXz1mdW5jdGlvbigpe2lmKHRoaXMud3JhcHBlcnNfKWZvcih2YXIgZSBpbiB0aGlzLndyYXBwZXJzXyl7dmFyIHQ9dGhpcy53cmFwcGVyc19bZV07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0W29dJiZ0W29dLnRvQXJyYXkoKTtlbHNlIHQmJnQudG9BcnJheSgpfX0sanNwYi5NZXNzYWdlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3luY01hcEZpZWxkc18oKSx0aGlzLmFycmF5fSxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fU1RSSU5HJiYoanNwYi5NZXNzYWdlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN5bmNNYXBGaWVsZHNfKCksdGhpcy5hcnJheS50b1N0cmluZygpfSksanNwYi5NZXNzYWdlLnByb3RvdHlwZS5nZXRFeHRlbnNpb249ZnVuY3Rpb24oZSl7aWYodGhpcy5leHRlbnNpb25PYmplY3RfKXt0aGlzLndyYXBwZXJzX3x8KHRoaXMud3JhcHBlcnNfPXt9KTt2YXIgdD1lLmZpZWxkSW5kZXg7aWYoZS5pc1JlcGVhdGVkKXtpZihlLmlzTWVzc2FnZVR5cGUoKSlyZXR1cm4gdGhpcy53cmFwcGVyc19bdF18fCh0aGlzLndyYXBwZXJzX1t0XT1nb29nLmFycmF5Lm1hcCh0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF18fFtdLChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUuY3Rvcih0KX0pKSksdGhpcy53cmFwcGVyc19bdF19ZWxzZSBpZihlLmlzTWVzc2FnZVR5cGUoKSlyZXR1cm4hdGhpcy53cmFwcGVyc19bdF0mJnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1t0XSYmKHRoaXMud3JhcHBlcnNfW3RdPW5ldyBlLmN0b3IodGhpcy5leHRlbnNpb25PYmplY3RfW3RdKSksdGhpcy53cmFwcGVyc19bdF07cmV0dXJuIHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1t0XX19LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSksanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0Xyh0aGlzKTt2YXIgbz1lLmZpZWxkSW5kZXg7cmV0dXJuIGUuaXNSZXBlYXRlZD8odD10fHxbXSxlLmlzTWVzc2FnZVR5cGUoKT8odGhpcy53cmFwcGVyc19bb109dCx0aGlzLmV4dGVuc2lvbk9iamVjdF9bb109Z29vZy5hcnJheS5tYXAodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9BcnJheSgpfSkpKTp0aGlzLmV4dGVuc2lvbk9iamVjdF9bb109dCk6ZS5pc01lc3NhZ2VUeXBlKCk/KHRoaXMud3JhcHBlcnNfW29dPXQsdGhpcy5leHRlbnNpb25PYmplY3RfW29dPXQ/dC50b0FycmF5KCk6dCk6dGhpcy5leHRlbnNpb25PYmplY3RfW29dPXQsdGhpc30sanNwYi5NZXNzYWdlLmRpZmZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yKSl0aHJvdyBFcnJvcihcIk1lc3NhZ2VzIGhhdmUgZGlmZmVyZW50IHR5cGVzLlwiKTt2YXIgbz1lLnRvQXJyYXkoKTt0PXQudG9BcnJheSgpO3ZhciByPVtdLG49MCxpPW8ubGVuZ3RoPnQubGVuZ3RoP28ubGVuZ3RoOnQubGVuZ3RoO2ZvcihlLmdldEpzUGJNZXNzYWdlSWQoKSYmKHJbMF09ZS5nZXRKc1BiTWVzc2FnZUlkKCksbj0xKTtuPGk7bisrKWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKG9bbl0sdFtuXSl8fChyW25dPXRbbl0pO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyKX0sanNwYi5NZXNzYWdlLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT10fHwhKCFlfHwhdCkmJmUgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yJiZqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhlLnRvQXJyYXkoKSx0LnRvQXJyYXkoKSl9LGpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucz1mdW5jdGlvbihlLHQpe2U9ZXx8e30sdD10fHx7fTt2YXIgbyxyPXt9O2ZvcihvIGluIGUpcltvXT0wO2ZvcihvIGluIHQpcltvXT0wO2ZvcihvIGluIHIpaWYoIWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGVbb10sdFtvXSkpcmV0dXJuITE7cmV0dXJuITB9LGpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzPWZ1bmN0aW9uKGUsdCl7aWYoZT09dClyZXR1cm4hMDtpZighZ29vZy5pc09iamVjdChlKXx8IWdvb2cuaXNPYmplY3QodCkpcmV0dXJuISEoXCJudW1iZXJcIj09dHlwZW9mIGUmJmlzTmFOKGUpfHxcIm51bWJlclwiPT10eXBlb2YgdCYmaXNOYU4odCkpJiZTdHJpbmcoZSk9PVN0cmluZyh0KTtpZihlLmNvbnN0cnVjdG9yIT10LmNvbnN0cnVjdG9yKXJldHVybiExO2lmKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmZS5jb25zdHJ1Y3Rvcj09PVVpbnQ4QXJyYXkpe2lmKGUubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZihlW29dIT10W29dKXJldHVybiExO3JldHVybiEwfWlmKGUuY29uc3RydWN0b3I9PT1BcnJheSl7dmFyIHI9dm9pZCAwLG49dm9pZCAwLGk9TWF0aC5tYXgoZS5sZW5ndGgsdC5sZW5ndGgpO2ZvcihvPTA7bzxpO28rKyl7dmFyIHM9ZVtvXSxhPXRbb107aWYocyYmcy5jb25zdHJ1Y3Rvcj09T2JqZWN0JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh2b2lkIDA9PT1yKSxnb29nLmFzc2VydHMuYXNzZXJ0KG89PT1lLmxlbmd0aC0xKSxyPXMscz12b2lkIDApLGEmJmEuY29uc3RydWN0b3I9PU9iamVjdCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodm9pZCAwPT09biksZ29vZy5hc3NlcnRzLmFzc2VydChvPT09dC5sZW5ndGgtMSksbj1hLGE9dm9pZCAwKSwhanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMocyxhKSlyZXR1cm4hMX1yZXR1cm4hciYmIW58fChyPXJ8fHt9LG49bnx8e30sanNwYi5NZXNzYWdlLmNvbXBhcmVFeHRlbnNpb25zKHIsbikpfWlmKGUuY29uc3RydWN0b3I9PT1PYmplY3QpcmV0dXJuIGpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucyhlLHQpO3Rocm93IEVycm9yKFwiSW52YWxpZCB0eXBlIGluIEpTUEIgYXJyYXlcIil9LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuY2xvbmVNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UodGhpcyl9LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZSh0aGlzKX0sanNwYi5NZXNzYWdlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKGUpfSxqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZS5jb25zdHJ1Y3Rvcihqc3BiLk1lc3NhZ2UuY2xvbmVfKGUudG9BcnJheSgpKSl9LGpzcGIuTWVzc2FnZS5jb3B5SW50bz1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZih0LGpzcGIuTWVzc2FnZSksZ29vZy5hc3NlcnRzLmFzc2VydChlLmNvbnN0cnVjdG9yPT10LmNvbnN0cnVjdG9yLFwiQ29weSBzb3VyY2UgYW5kIHRhcmdldCBtZXNzYWdlIHNob3VsZCBoYXZlIHRoZSBzYW1lIHR5cGUuXCIpLGU9anNwYi5NZXNzYWdlLmNsb25lKGUpO2Zvcih2YXIgbz10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG49by5sZW5ndGg9MDtuPHIubGVuZ3RoO24rKylvW25dPXJbbl07dC53cmFwcGVyc189ZS53cmFwcGVyc18sdC5leHRlbnNpb25PYmplY3RfPWUuZXh0ZW5zaW9uT2JqZWN0X30sanNwYi5NZXNzYWdlLmNsb25lXz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9QXJyYXkoZS5sZW5ndGgpLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZVtvXTtudWxsIT1yJiYodFtvXT1cIm9iamVjdFwiPT10eXBlb2Ygcj9qc3BiLk1lc3NhZ2UuY2xvbmVfKGdvb2cuYXNzZXJ0cy5hc3NlcnQocikpOnIpfXJldHVybiB0fWlmKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO2ZvcihvIGluIHQ9e30sZSludWxsIT0ocj1lW29dKSYmKHRbb109XCJvYmplY3RcIj09dHlwZW9mIHI/anNwYi5NZXNzYWdlLmNsb25lXyhnb29nLmFzc2VydHMuYXNzZXJ0KHIpKTpyKTtyZXR1cm4gdH0sanNwYi5NZXNzYWdlLnJlZ2lzdGVyTWVzc2FnZVR5cGU9ZnVuY3Rpb24oZSx0KXt0Lm1lc3NhZ2VJZD1lfSxqc3BiLk1lc3NhZ2UubWVzc2FnZVNldEV4dGVuc2lvbnM9e30sanNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zQmluYXJ5PXt9LGpzcGIuRXhwb3J0PXt9LGV4cG9ydHMuTWFwPWpzcGIuTWFwLGV4cG9ydHMuTWVzc2FnZT1qc3BiLk1lc3NhZ2UsZXhwb3J0cy5CaW5hcnlSZWFkZXI9anNwYi5CaW5hcnlSZWFkZXIsZXhwb3J0cy5CaW5hcnlXcml0ZXI9anNwYi5CaW5hcnlXcml0ZXIsZXhwb3J0cy5FeHRlbnNpb25GaWVsZEluZm89anNwYi5FeHRlbnNpb25GaWVsZEluZm8sZXhwb3J0cy5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm89anNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8sZXhwb3J0cy5leHBvcnRTeW1ib2w9Z29vZy5leHBvcnRTeW1ib2wsZXhwb3J0cy5pbmhlcml0cz1nb29nLmluaGVyaXRzLGV4cG9ydHMub2JqZWN0PXtleHRlbmQ6Z29vZy5vYmplY3QuZXh0ZW5kfSxleHBvcnRzLnR5cGVPZj1nb29nLnR5cGVPZn0pLmNhbGwodGhpcyxfX3dlYnBhY2tfcmVxdWlyZV9fKDQpLF9fd2VicGFja19yZXF1aXJlX18oMTEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxvKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gbyhyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIG49dFtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbcl0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsbyksbi5sPSEwLG4uZXhwb3J0c31yZXR1cm4gby5tPWUsby5jPXQsby5kPWZ1bmN0aW9uKGUsdCxyKXtvLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxvLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sby50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1vKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciByPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoby5yKHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKW8uZChyLG4sZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxuKSk7cmV0dXJuIHJ9LG8ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gby5kKHQsXCJhXCIsdCksdH0sby5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvLnA9XCJcIixvKG8ucz0xMCl9KFtmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygzKTt0Lk1ldGFkYXRhPXIuQnJvd3NlckhlYWRlcnN9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlYnVnPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2NvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5hcHBseShudWxsLGUpOmNvbnNvbGUubG9nLmFwcGx5KG51bGwsZSl9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygwKSxuPW8oOCksaT1vKDkpLHM9bygxKSxhPW8oNCkscD1vKDE0KTt0LmNsaWVudD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgZyhlLHQpfTt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnN0YXJ0ZWQ9ITEsdGhpcy5zZW50Rmlyc3RNZXNzYWdlPSExLHRoaXMuY29tcGxldGVkPSExLHRoaXMuY2xvc2VkPSExLHRoaXMuZmluaXNoZWRTZW5kaW5nPSExLHRoaXMub25IZWFkZXJzQ2FsbGJhY2tzPVtdLHRoaXMub25NZXNzYWdlQ2FsbGJhY2tzPVtdLHRoaXMub25FbmRDYWxsYmFja3M9W10sdGhpcy5wYXJzZXI9bmV3IG4uQ2h1bmtQYXJzZXIsdGhpcy5tZXRob2REZWZpbml0aW9uPWUsdGhpcy5wcm9wcz10LHRoaXMuY3JlYXRlVHJhbnNwb3J0KCl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZVRyYW5zcG9ydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaG9zdCtcIi9cIit0aGlzLm1ldGhvZERlZmluaXRpb24uc2VydmljZS5zZXJ2aWNlTmFtZStcIi9cIit0aGlzLm1ldGhvZERlZmluaXRpb24ubWV0aG9kTmFtZSx0PXttZXRob2REZWZpbml0aW9uOnRoaXMubWV0aG9kRGVmaW5pdGlvbixkZWJ1Zzp0aGlzLnByb3BzLmRlYnVnfHwhMSx1cmw6ZSxvbkhlYWRlcnM6dGhpcy5vblRyYW5zcG9ydEhlYWRlcnMuYmluZCh0aGlzKSxvbkNodW5rOnRoaXMub25UcmFuc3BvcnRDaHVuay5iaW5kKHRoaXMpLG9uRW5kOnRoaXMub25UcmFuc3BvcnRFbmQuYmluZCh0aGlzKX07dGhpcy5wcm9wcy50cmFuc3BvcnQ/dGhpcy50cmFuc3BvcnQ9dGhpcy5wcm9wcy50cmFuc3BvcnQodCk6dGhpcy50cmFuc3BvcnQ9YS5tYWtlRGVmYXVsdFRyYW5zcG9ydCh0KX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRIZWFkZXJzPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uSGVhZGVyc1wiLGUsdCksdGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcImdycGMub25IZWFkZXJzIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2UgaWYoMD09PXQpO2Vsc2V7dGhpcy5yZXNwb25zZUhlYWRlcnM9ZSx0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwib25IZWFkZXJzLnJlc3BvbnNlSGVhZGVyc1wiLEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2VIZWFkZXJzLG51bGwsMikpO3ZhciBvPWwoZSk7dGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uSGVhZGVycy5nUlBDU3RhdHVzXCIsbyk7dmFyIHI9byYmbz49MD9vOmkuaHR0cFN0YXR1c1RvQ29kZSh0KTt0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwib25IZWFkZXJzLmNvZGVcIixyKTt2YXIgbj1lLmdldChcImdycGMtbWVzc2FnZVwiKXx8W107aWYodGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uSGVhZGVycy5nUlBDTWVzc2FnZVwiLG4pLHRoaXMucmF3T25IZWFkZXJzKGUpLHIhPT1pLkNvZGUuT0spe3ZhciBhPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyhuWzBdKTt0aGlzLnJhd09uRXJyb3IocixhLGUpfX19LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0Q2h1bms9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwiZ3JwYy5vbkNodW5rIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2V7dmFyIG89W107dHJ5e289dGhpcy5wYXJzZXIucGFyc2UoZSl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJvbkNodW5rLnBhcnNpbmcgZXJyb3JcIixlLGUubWVzc2FnZSksdm9pZCB0aGlzLnJhd09uRXJyb3IoaS5Db2RlLkludGVybmFsLFwicGFyc2luZyBlcnJvcjogXCIrZS5tZXNzYWdlKX1vLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuY2h1bmtUeXBlPT09bi5DaHVua1R5cGUuTUVTU0FHRSl7dmFyIG89dC5tZXRob2REZWZpbml0aW9uLnJlc3BvbnNlVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeShlLmRhdGEpO3QucmF3T25NZXNzYWdlKG8pfWVsc2UgZS5jaHVua1R5cGU9PT1uLkNodW5rVHlwZS5UUkFJTEVSUyYmKHQucmVzcG9uc2VIZWFkZXJzPyh0LnJlc3BvbnNlVHJhaWxlcnM9bmV3IHIuTWV0YWRhdGEoZS50cmFpbGVycyksdC5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uQ2h1bmsudHJhaWxlcnNcIix0LnJlc3BvbnNlVHJhaWxlcnMpKToodC5yZXNwb25zZUhlYWRlcnM9bmV3IHIuTWV0YWRhdGEoZS50cmFpbGVycyksdC5yYXdPbkhlYWRlcnModC5yZXNwb25zZUhlYWRlcnMpKSl9KSl9fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydEVuZD1mdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJncnBjLm9uRW5kXCIpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJncnBjLm9uRW5kIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2UgaWYodm9pZCAwIT09dGhpcy5yZXNwb25zZVRyYWlsZXJzKXt2YXIgZT1sKHRoaXMucmVzcG9uc2VUcmFpbGVycyk7aWYobnVsbCE9PWUpe3ZhciB0PXRoaXMucmVzcG9uc2VUcmFpbGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIiksbz10aGlzLmRlY29kZUdSUENTdGF0dXModFswXSk7dGhpcy5yYXdPbkVuZChlLG8sdGhpcy5yZXNwb25zZVRyYWlsZXJzKX1lbHNlIHRoaXMucmF3T25FcnJvcihpLkNvZGUuSW50ZXJuYWwsXCJSZXNwb25zZSBjbG9zZWQgd2l0aG91dCBncnBjLXN0YXR1cyAoVHJhaWxlcnMgcHJvdmlkZWQpXCIpfWVsc2V7aWYodm9pZCAwPT09dGhpcy5yZXNwb25zZUhlYWRlcnMpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVycm9yKGkuQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgaGVhZGVyc1wiKTt2YXIgcj1sKHRoaXMucmVzcG9uc2VIZWFkZXJzKSxuPXRoaXMucmVzcG9uc2VIZWFkZXJzLmdldChcImdycGMtbWVzc2FnZVwiKTtpZih0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwiZ3JwYy5oZWFkZXJzIG9ubHkgcmVzcG9uc2UgXCIscixuKSxudWxsPT09cilyZXR1cm4gdm9pZCB0aGlzLnJhd09uRW5kKGkuQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKEhlYWRlcnMgb25seSlcIix0aGlzLnJlc3BvbnNlSGVhZGVycyk7dmFyIGE9dGhpcy5kZWNvZGVHUlBDU3RhdHVzKG5bMF0pO3RoaXMucmF3T25FbmQocixhLHRoaXMucmVzcG9uc2VIZWFkZXJzKX19LGUucHJvdG90eXBlLmRlY29kZUdSUENTdGF0dXM9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuXCJcIjt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZX19LGUucHJvdG90eXBlLnJhd09uRW5kPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj10aGlzO3RoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJyYXdPbkVuZFwiLGUsdCxvKSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoIXIuY2xvc2VkKXRyeXtuKGUsdCxvKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25IZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJyYXdPbkhlYWRlcnNcIixlKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHJ5e3QoZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSkpfX0pKX0sZS5wcm90b3R5cGUucmF3T25FcnJvcj1mdW5jdGlvbihlLHQsbyl7dmFyIG49dGhpczt2b2lkIDA9PT1vJiYobz1uZXcgci5NZXRhZGF0YSksdGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcInJhd09uRXJyb3JcIixlLHQpLHRoaXMuY29tcGxldGVkfHwodGhpcy5jb21wbGV0ZWQ9ITAsdGhpcy5vbkVuZENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihyKXtpZighbi5jbG9zZWQpdHJ5e3IoZSx0LG8pfWNhdGNoKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX19KSkpfSxlLnByb3RvdHlwZS5yYXdPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwicmF3T25NZXNzYWdlXCIsZS50b09iamVjdCgpKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5jbG9zZWR8fHRoaXMub25NZXNzYWdlQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKG8pe2lmKCF0LmNsb3NlZCl0cnl7byhlKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9fSkpfSxlLnByb3RvdHlwZS5vbkhlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUub25NZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMub25NZXNzYWdlQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe3RoaXMub25FbmRDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IHN0YXJ0ZWQgLSBjYW5ub3QgLnN0YXJ0KClcIik7dGhpcy5zdGFydGVkPSEwO3ZhciB0PW5ldyByLk1ldGFkYXRhKGV8fHt9KTt0LnNldChcImNvbnRlbnQtdHlwZVwiLFwiYXBwbGljYXRpb24vZ3JwYy13ZWIrcHJvdG9cIiksdC5zZXQoXCJ4LWdycGMtd2ViXCIsXCIxXCIpLHRoaXMudHJhbnNwb3J0LnN0YXJ0KHQpfSxlLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLnN0YXJ0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5zZW5kKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5zZW5kKClcIik7aWYodGhpcy5maW5pc2hlZFNlbmRpbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgZmluaXNoZWQgc2VuZGluZyAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKCF0aGlzLm1ldGhvZERlZmluaXRpb24ucmVxdWVzdFN0cmVhbSYmdGhpcy5zZW50Rmlyc3RNZXNzYWdlKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgYWxyZWFkeSBzZW50IGZvciBub24tY2xpZW50LXN0cmVhbWluZyBtZXRob2QgLSBjYW5ub3QgLnNlbmQoKVwiKTt0aGlzLnNlbnRGaXJzdE1lc3NhZ2U9ITA7dmFyIHQ9cC5mcmFtZVJlcXVlc3QoZSk7dGhpcy50cmFuc3BvcnQuc2VuZE1lc3NhZ2UodCl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5maW5pc2hTZW5kKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5jbG9zZSgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKHRoaXMuZmluaXNoZWRTZW5kaW5nKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGZpbmlzaGVkIHNlbmRpbmcgLSBjYW5ub3QgLmZpbmlzaFNlbmQoKVwiKTt0aGlzLmZpbmlzaGVkU2VuZGluZz0hMCx0aGlzLnRyYW5zcG9ydC5maW5pc2hTZW5kKCl9LGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLmNsb3NlKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5jbG9zZSgpXCIpO3RoaXMuY2xvc2VkPSEwLHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJyZXF1ZXN0LmFib3J0IGFib3J0aW5nIHJlcXVlc3RcIiksdGhpcy50cmFuc3BvcnQuY2FuY2VsKCl9LGV9KCk7ZnVuY3Rpb24gbChlKXt2YXIgdD1lLmdldChcImdycGMtc3RhdHVzXCIpfHxbXTtpZih0Lmxlbmd0aD4wKXRyeXt2YXIgbz10WzBdO3JldHVybiBwYXJzZUludChvLDEwKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH19LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG8ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBuPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLG8pLG4ubD0hMCxuLmV4cG9ydHN9cmV0dXJuIG8ubT1lLG8uYz10LG8uaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sby5kPWZ1bmN0aW9uKGUsdCxyKXtvLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnJ9KX0sby5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBvLmQodCxcImFcIix0KSx0fSxvLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG8ucD1cIlwiLG8oby5zPTEpfShbZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oMyksbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9e3NwbGl0VmFsdWVzOiExfSk7dmFyIG8sbj10aGlzO3RoaXMuaGVhZGVyc01hcD17fSxlJiYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhlYWRlcnMmJmUgaW5zdGFuY2VvZiBIZWFkZXJzP3IuZ2V0SGVhZGVyS2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihvKXtyLmdldEhlYWRlclZhbHVlcyhlLG8pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc3BsaXRWYWx1ZXM/bi5hcHBlbmQobyxyLnNwbGl0SGVhZGVyVmFsdWUoZSkpOm4uYXBwZW5kKG8sZSl9KSl9KSk6XCJvYmplY3RcIj09dHlwZW9mKG89ZSkmJlwib2JqZWN0XCI9PXR5cGVvZiBvLmhlYWRlcnNNYXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8uZm9yRWFjaD9lLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bi5hcHBlbmQoZSx0KX0pKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgTWFwJiZlIGluc3RhbmNlb2YgTWFwP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuLmFwcGVuZCh0LGUpfSkpOlwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuYXBwZW5kRnJvbVN0cmluZyhlKTpcIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG89ZVt0XTtBcnJheS5pc0FycmF5KG8pP28uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5hcHBlbmQodCxlKX0pKTpuLmFwcGVuZCh0LG8pfSkpKX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zcGxpdChcIlxcclxcblwiKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb10sbj1yLmluZGV4T2YoXCI6XCIpO2lmKG4+MCl7dmFyIGk9ci5zdWJzdHJpbmcoMCxuKS50cmltKCkscz1yLnN1YnN0cmluZyhuKzEpLnRyaW0oKTt0aGlzLmFwcGVuZChpLHMpfX19LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBvPXIubm9ybWFsaXplTmFtZShlKTtpZih2b2lkIDA9PT10KWRlbGV0ZSB0aGlzLmhlYWRlcnNNYXBbb107ZWxzZXt2YXIgbj10aGlzLmhlYWRlcnNNYXBbb107aWYobil7dmFyIGk9bi5pbmRleE9mKHQpO2k+PTAmJm4uc3BsaWNlKGksMSksMD09PW4ubGVuZ3RoJiZkZWxldGUgdGhpcy5oZWFkZXJzTWFwW29dfX19LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3ZhciBvPXRoaXMsbj1yLm5vcm1hbGl6ZU5hbWUoZSk7QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnNNYXBbbl0pfHwodGhpcy5oZWFkZXJzTWFwW25dPVtdKSxBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5oZWFkZXJzTWFwW25dLnB1c2goci5ub3JtYWxpemVWYWx1ZShlKSl9KSk6dGhpcy5oZWFkZXJzTWFwW25dLnB1c2goci5ub3JtYWxpemVWYWx1ZSh0KSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBvPXIubm9ybWFsaXplTmFtZShlKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj1bXTt0LmZvckVhY2goKGZ1bmN0aW9uKGUpe24ucHVzaChyLm5vcm1hbGl6ZVZhbHVlKGUpKX0pKSx0aGlzLmhlYWRlcnNNYXBbb109bn1lbHNlIHRoaXMuaGVhZGVyc01hcFtvXT1bci5ub3JtYWxpemVWYWx1ZSh0KV19LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlLHQpe3ZhciBvPXRoaXMuaGVhZGVyc01hcFtyLm5vcm1hbGl6ZU5hbWUoZSldO2lmKCFBcnJheS5pc0FycmF5KG8pKXJldHVybiExO2lmKHZvaWQgMCE9PXQpe3ZhciBuPXIubm9ybWFsaXplVmFsdWUodCk7cmV0dXJuIG8uaW5kZXhPZihuKT49MH1yZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVhZGVyc01hcFtyLm5vcm1hbGl6ZU5hbWUoZSldO3JldHVybiB2b2lkIDAhPT10P3QuY29uY2F0KCk6W119LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmhlYWRlcnNNYXApLmZvckVhY2goKGZ1bmN0aW9uKG8pe2Uobyx0LmhlYWRlcnNNYXBbb10pfSksdGhpcyl9LGUucHJvdG90eXBlLnRvSGVhZGVycz1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzKXt2YXIgZT1uZXcgSGVhZGVycztyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbih0LG8pe28uZm9yRWFjaCgoZnVuY3Rpb24obyl7ZS5hcHBlbmQodCxvKX0pKX0pKSxlfXRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2xhc3MgaXMgbm90IGRlZmluZWRcIil9LGV9KCk7dC5Ccm93c2VySGVhZGVycz1ufSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygwKTt0LkJyb3dzZXJIZWFkZXJzPXIuQnJvd3NlckhlYWRlcnN9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lml0ZXJhdGVIZWFkZXJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPWVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9by5uZXh0KCk7IXIuZG9uZTspdChyLnZhbHVlWzBdKSxyPW8ubmV4dCgpfSx0Lml0ZXJhdGVIZWFkZXJzS2V5cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1lLmtleXMoKSxyPW8ubmV4dCgpOyFyLmRvbmU7KXQoci52YWx1ZSkscj1vLm5leHQoKX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDIpO3Qubm9ybWFsaXplTmFtZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWVcIik7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sdC5ub3JtYWxpemVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfSx0LmdldEhlYWRlclZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBvPWU7aWYobyBpbnN0YW5jZW9mIEhlYWRlcnMmJm8uZ2V0QWxsKXJldHVybiBvLmdldEFsbCh0KTt2YXIgcj1vLmdldCh0KTtyZXR1cm4gciYmXCJzdHJpbmdcIj09dHlwZW9mIHI/W3JdOnJ9LHQuZ2V0SGVhZGVyS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1lLG89e30sbj1bXTtyZXR1cm4gdC5rZXlzP3IuaXRlcmF0ZUhlYWRlcnNLZXlzKHQsKGZ1bmN0aW9uKGUpe29bZV18fChvW2VdPSEwLG4ucHVzaChlKSl9KSk6dC5mb3JFYWNoP3QuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtvW3RdfHwob1t0XT0hMCxuLnB1c2godCkpfSkpOnIuaXRlcmF0ZUhlYWRlcnModCwoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtvW3RdfHwob1t0XT0hMCxuLnB1c2godCkpfSkpLG59LHQuc3BsaXRIZWFkZXJWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5zcGxpdChcIiwgXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3BsaXQoXCIsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKX0pKSx0fX1dKX0sZS5leHBvcnRzPXIoKX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oNSksbj1mdW5jdGlvbihlKXtyZXR1cm4gci5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ITF9KShlKX07dC5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeT1mdW5jdGlvbihlKXtuPWV9LHQubWFrZURlZmF1bHRUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9byg2KSxuPW8oNyk7dC5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe2lmKHIuZGV0ZWN0RmV0Y2hTdXBwb3J0KCkpe3ZhciB0PXtjcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFscz9cImluY2x1ZGVcIjpcInNhbWUtb3JpZ2luXCJ9O3JldHVybiByLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQodCl9cmV0dXJuIG4uWGhyVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHN9KX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxvPTEscj1hcmd1bWVudHMubGVuZ3RoO288cjtvKyspZm9yKHZhciBuIGluIHQ9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49bygwKSxpPW8oMSk7dC5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWJ1ZyYmaS5kZWJ1ZyhcImZldGNoUmVxdWVzdFwiLGUpLG5ldyBzKGUsdCl9KHQsZSl9fTt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmNhbmNlbGxlZD0hMSx0aGlzLmNvbnRyb2xsZXI9c2VsZi5BYm9ydENvbnRyb2xsZXImJm5ldyBBYm9ydENvbnRyb2xsZXIsdGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLnB1bXA9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzO2lmKHRoaXMucmVhZGVyPWUsdGhpcy5jYW5jZWxsZWQpcmV0dXJuIHRoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLnB1bXAuY2FuY2VsIGF0IGZpcnN0IHB1bXBcIiksdm9pZCB0aGlzLnJlYWRlci5jYW5jZWwoKTt0aGlzLnJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7aWYoZS5kb25lKXJldHVybiBvLm9wdGlvbnMub25FbmQoKSx0O28ub3B0aW9ucy5vbkNodW5rKGUudmFsdWUpLG8ucHVtcChvLnJlYWRlcix0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7by5jYW5jZWxsZWQ/by5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKTooby5jYW5jZWxsZWQ9ITAsby5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLG8ub3B0aW9ucy5vbkVuZChlKSl9KSl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztmZXRjaCh0aGlzLm9wdGlvbnMudXJsLHIoe30sdGhpcy5pbml0LHtoZWFkZXJzOnRoaXMubWV0YWRhdGEudG9IZWFkZXJzKCksbWV0aG9kOlwiUE9TVFwiLGJvZHk6ZSxzaWduYWw6dGhpcy5jb250cm9sbGVyJiZ0aGlzLmNvbnRyb2xsZXIuc2lnbmFsfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLnJlc3BvbnNlXCIsZSksdC5vcHRpb25zLm9uSGVhZGVycyhuZXcgbi5NZXRhZGF0YShlLmhlYWRlcnMpLGUuc3RhdHVzKSwhZS5ib2R5KXJldHVybiBlO3QucHVtcChlLmJvZHkuZ2V0UmVhZGVyKCksZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuY2FuY2VsbGVkP3Qub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmNhdGNoIC0gcmVxdWVzdCBjYW5jZWxsZWRcIik6KHQuY2FuY2VsbGVkPSEwLHQub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmNhdGNoXCIsZS5tZXNzYWdlKSx0Lm9wdGlvbnMub25FbmQoZSkpfSkpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMubWV0YWRhdGE9ZX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ/dGhpcy5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsIGFscmVhZHkgY2FuY2VsbGVkXCIpOih0aGlzLmNhbmNlbGxlZD0hMCx0aGlzLnJlYWRlcj8odGhpcy5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsXCIpLHRoaXMucmVhZGVyLmNhbmNlbCgpKTp0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJGZXRjaC5hYm9ydC5jYW5jZWwgYmVmb3JlIHJlYWRlclwiKSx0aGlzLmNvbnRyb2xsZXImJnRoaXMuY29udHJvbGxlci5hYm9ydCgpKX0sZX0oKTt0LmRldGVjdEZldGNoU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZXNwb25zZSYmUmVzcG9uc2UucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgSGVhZGVyc319LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcixuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiB0KXQuaGFzT3duUHJvcGVydHkobykmJihlW29dPXRbb10pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihvLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbyl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1vKDApLHM9bygxKSxhPW8oMTEpO3QuWGhyVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihhLmRldGVjdE1velhIUlN1cHBvcnQoKSlyZXR1cm4gbmV3IGcodCxlKTtpZihhLmRldGVjdFhIUk92ZXJyaWRlTWltZVR5cGVTdXBwb3J0KCkpcmV0dXJuIG5ldyBwKHQsZSk7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbnZpcm9ubWVudCdzIFhIUiBpbXBsZW1lbnRhdGlvbiBjYW5ub3Qgc3VwcG9ydCBiaW5hcnkgdHJhbnNmZXIuXCIpfX07dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIlhIUi5vblByb2dyZXNzRXZlbnQubGVuZ3RoOiBcIix0aGlzLnhoci5yZXNwb25zZS5sZW5ndGgpO3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlLnN1YnN0cih0aGlzLmluZGV4KTt0aGlzLmluZGV4PXRoaXMueGhyLnJlc3BvbnNlLmxlbmd0aDt2YXIgdD11KGUpO3RoaXMub3B0aW9ucy5vbkNodW5rKHQpfSxlLnByb3RvdHlwZS5vbkxvYWRFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIlhIUi5vbkxvYWRFdmVudFwiKSx0aGlzLm9wdGlvbnMub25FbmQoKX0sZS5wcm90b3R5cGUub25TdGF0ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIlhIUi5vblN0YXRlQ2hhbmdlXCIsdGhpcy54aHIucmVhZHlTdGF0ZSksdGhpcy54aHIucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQmJnRoaXMub3B0aW9ucy5vbkhlYWRlcnMobmV3IGkuTWV0YWRhdGEodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHRoaXMueGhyLnN0YXR1cyl9LGUucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMueGhyLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5tZXRhZGF0YT1lO3ZhciBvPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLnhocj1vLG8ub3BlbihcIlBPU1RcIix0aGlzLm9wdGlvbnMudXJsKSx0aGlzLmNvbmZpZ3VyZVhocigpLHRoaXMubWV0YWRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtvLnNldFJlcXVlc3RIZWFkZXIoZSx0LmpvaW4oXCIsIFwiKSl9KSksby53aXRoQ3JlZGVudGlhbHM9Qm9vbGVhbih0aGlzLmluaXQud2l0aENyZWRlbnRpYWxzKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcykpLG8uYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsdGhpcy5vblByb2dyZXNzRXZlbnQuYmluZCh0aGlzKSksby5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLHRoaXMub25Mb2FkRXZlbnQuYmluZCh0aGlzKSksby5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7dC5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiWEhSLmVycm9yXCIsZSksdC5vcHRpb25zLm9uRW5kKGUuZXJyb3IpfSkpfSxlLnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJ0ZXh0XCIsdGhpcy54aHIub3ZlcnJpZGVNaW1lVHlwZShcInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWRcIil9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIlhIUi5hYm9ydFwiKSx0aGlzLnhoci5hYm9ydCgpfSxlfSgpO3QuWEhSPXA7dmFyIGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJNb3pYSFIuY29uZmlndXJlWGhyOiBzZXR0aW5nIHJlc3BvbnNlVHlwZSB0byAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInXCIpLHRoaXMueGhyLnJlc3BvbnNlVHlwZT1cIm1vei1jaHVua2VkLWFycmF5YnVmZmVyXCJ9LHQucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlO3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIk1velhIUi5vblByb2dyZXNzRXZlbnQ6IFwiLG5ldyBVaW50OEFycmF5KGUpKSx0aGlzLm9wdGlvbnMub25DaHVuayhuZXcgVWludDhBcnJheShlKSl9LHR9KHApO2Z1bmN0aW9uIGwoZSx0KXt2YXIgbz1lLmNoYXJDb2RlQXQodCk7aWYobz49NTUyOTYmJm88PTU2MzE5KXt2YXIgcj1lLmNoYXJDb2RlQXQodCsxKTtyPj01NjMyMCYmcjw9NTczNDMmJihvPTY1NTM2KyhvLTU1Mjk2PDwxMCkrKHItNTYzMjApKX1yZXR1cm4gb31mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbz0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD9lLmNvZGVQb2ludEF0KHIpOmwoZSxyKTt0W28rK109MjU1Jm59cmV0dXJuIHR9dC5Nb3pDaHVua2VkQXJyYXlCdWZmZXJYSFI9Zyx0LnN0cmluZ1RvQXJyYXlCdWZmZXI9dX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByLG49bygwKTtmdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gOT09PWV8fDEwPT09ZXx8MTM9PT1lfShlKXx8ZT49MzImJmU8PTEyNn1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD0wO3QhPT1lLmxlbmd0aDsrK3QpaWYoIWkoZVt0XSkpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgaXMgbm90IHZhbGlkIChwcmludGFibGUpIEFTQ0lJXCIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gMTI4PT0oMTI4JmUuZ2V0VWludDgoMCkpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuZ2V0VWludDMyKDEsITEpfWZ1bmN0aW9uIGcoZSx0LG8pe3JldHVybiBlLmJ5dGVMZW5ndGgtdD49b31mdW5jdGlvbiBsKGUsdCxvKXtpZihlLnNsaWNlKXJldHVybiBlLnNsaWNlKHQsbyk7dmFyIHI9ZS5sZW5ndGg7dm9pZCAwIT09byYmKHI9byk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KHItdCksaT0wLHM9dDtzPHI7cysrKW5baSsrXT1lW3NdO3JldHVybiBufXQuZGVjb2RlQVNDSUk9cyx0LmVuY29kZUFTQ0lJPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbz0wO28hPT1lLmxlbmd0aDsrK28pe3ZhciByPWUuY2hhckNvZGVBdChvKTtpZighaShyKSl0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBjb250YWlucyBpbnZhbGlkIEFTQ0lJXCIpO3Rbb109cn1yZXR1cm4gdH0sZnVuY3Rpb24oZSl7ZVtlLk1FU1NBR0U9MV09XCJNRVNTQUdFXCIsZVtlLlRSQUlMRVJTPTJdPVwiVFJBSUxFUlNcIn0ocj10LkNodW5rVHlwZXx8KHQuQ2h1bmtUeXBlPXt9KSk7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5idWZmZXI9bnVsbCx0aGlzLnBvc2l0aW9uPTB9cmV0dXJuIGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7aWYoMD09PWUubGVuZ3RoJiZ0KXJldHVybltdO3ZhciBvLGk9W107aWYobnVsbD09dGhpcy5idWZmZXIpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZSBpZih0aGlzLnBvc2l0aW9uPT09dGhpcy5idWZmZXIuYnl0ZUxlbmd0aCl0aGlzLmJ1ZmZlcj1lLHRoaXMucG9zaXRpb249MDtlbHNle3ZhciB1PXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtdGhpcy5wb3NpdGlvbixjPW5ldyBVaW50OEFycmF5KHUrZS5ieXRlTGVuZ3RoKSxkPWwodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbik7Yy5zZXQoZCwwKTt2YXIgZj1uZXcgVWludDhBcnJheShlKTtjLnNldChmLHUpLHRoaXMuYnVmZmVyPWMsdGhpcy5wb3NpdGlvbj0wfWZvcig7Oyl7aWYoIWcodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1KSlyZXR1cm4gaTt2YXIgaD1sKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sdGhpcy5wb3NpdGlvbis1KSxiPW5ldyBEYXRhVmlldyhoLmJ1ZmZlcixoLmJ5dGVPZmZzZXQsaC5ieXRlTGVuZ3RoKSx5PXAoYik7aWYoIWcodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1K3kpKXJldHVybiBpO3ZhciBtPWwodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbis1LHRoaXMucG9zaXRpb24rNSt5KTtpZih0aGlzLnBvc2l0aW9uKz01K3ksYShiKSlyZXR1cm4gaS5wdXNoKHtjaHVua1R5cGU6ci5UUkFJTEVSUyx0cmFpbGVyczoobz1tLG5ldyBuLk1ldGFkYXRhKHMobykpKX0pLGk7aS5wdXNoKHtjaHVua1R5cGU6ci5NRVNTQUdFLGRhdGE6bX0pfX0sZX0oKTt0LkNodW5rUGFyc2VyPXV9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuT0s9MF09XCJPS1wiLGVbZS5DYW5jZWxlZD0xXT1cIkNhbmNlbGVkXCIsZVtlLlVua25vd249Ml09XCJVbmtub3duXCIsZVtlLkludmFsaWRBcmd1bWVudD0zXT1cIkludmFsaWRBcmd1bWVudFwiLGVbZS5EZWFkbGluZUV4Y2VlZGVkPTRdPVwiRGVhZGxpbmVFeGNlZWRlZFwiLGVbZS5Ob3RGb3VuZD01XT1cIk5vdEZvdW5kXCIsZVtlLkFscmVhZHlFeGlzdHM9Nl09XCJBbHJlYWR5RXhpc3RzXCIsZVtlLlBlcm1pc3Npb25EZW5pZWQ9N109XCJQZXJtaXNzaW9uRGVuaWVkXCIsZVtlLlJlc291cmNlRXhoYXVzdGVkPThdPVwiUmVzb3VyY2VFeGhhdXN0ZWRcIixlW2UuRmFpbGVkUHJlY29uZGl0aW9uPTldPVwiRmFpbGVkUHJlY29uZGl0aW9uXCIsZVtlLkFib3J0ZWQ9MTBdPVwiQWJvcnRlZFwiLGVbZS5PdXRPZlJhbmdlPTExXT1cIk91dE9mUmFuZ2VcIixlW2UuVW5pbXBsZW1lbnRlZD0xMl09XCJVbmltcGxlbWVudGVkXCIsZVtlLkludGVybmFsPTEzXT1cIkludGVybmFsXCIsZVtlLlVuYXZhaWxhYmxlPTE0XT1cIlVuYXZhaWxhYmxlXCIsZVtlLkRhdGFMb3NzPTE1XT1cIkRhdGFMb3NzXCIsZVtlLlVuYXV0aGVudGljYXRlZD0xNl09XCJVbmF1dGhlbnRpY2F0ZWRcIn0ocj10LkNvZGV8fCh0LkNvZGU9e30pKSx0Lmh0dHBTdGF0dXNUb0NvZGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gci5JbnRlcm5hbDtjYXNlIDIwMDpyZXR1cm4gci5PSztjYXNlIDQwMDpyZXR1cm4gci5JbnZhbGlkQXJndW1lbnQ7Y2FzZSA0MDE6cmV0dXJuIHIuVW5hdXRoZW50aWNhdGVkO2Nhc2UgNDAzOnJldHVybiByLlBlcm1pc3Npb25EZW5pZWQ7Y2FzZSA0MDQ6cmV0dXJuIHIuTm90Rm91bmQ7Y2FzZSA0MDk6cmV0dXJuIHIuQWJvcnRlZDtjYXNlIDQxMjpyZXR1cm4gci5GYWlsZWRQcmVjb25kaXRpb247Y2FzZSA0Mjk6cmV0dXJuIHIuUmVzb3VyY2VFeGhhdXN0ZWQ7Y2FzZSA0OTk6cmV0dXJuIHIuQ2FuY2VsZWQ7Y2FzZSA1MDA6cmV0dXJuIHIuVW5rbm93bjtjYXNlIDUwMTpyZXR1cm4gci5VbmltcGxlbWVudGVkO2Nhc2UgNTAzOnJldHVybiByLlVuYXZhaWxhYmxlO2Nhc2UgNTA0OnJldHVybiByLkRlYWRsaW5lRXhjZWVkZWQ7ZGVmYXVsdDpyZXR1cm4gci5Vbmtub3dufX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDMpLG49byg0KSxpPW8oNikscz1vKDEyKSxhPW8oNykscD1vKDUpLGc9byg5KSxsPW8oMTMpLHU9bygxNSksYz1vKDIpOyFmdW5jdGlvbihlKXtlLnNldERlZmF1bHRUcmFuc3BvcnQ9bi5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeSxlLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9cC5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0LGUuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1pLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQsZS5YaHJUcmFuc3BvcnQ9YS5YaHJUcmFuc3BvcnQsZS5XZWJzb2NrZXRUcmFuc3BvcnQ9cy5XZWJzb2NrZXRUcmFuc3BvcnQsZS5Db2RlPWcuQ29kZSxlLk1ldGFkYXRhPXIuQnJvd3NlckhlYWRlcnMsZS5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5jbGllbnQoZSx0KX0sZS5pbnZva2U9bC5pbnZva2UsZS51bmFyeT11LnVuYXJ5fSh0LmdycGN8fCh0LmdycGM9e30pKX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO3ZhciByO2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKFhNTEh0dHBSZXF1ZXN0KXtyPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7ci5vcGVuKFwiR0VUXCIsXCJodHRwczovL2xvY2FsaG9zdFwiKX1jYXRjaChlKXt9fXJldHVybiByfSgpO2lmKCF0KXJldHVybiExO3RyeXtyZXR1cm4gdC5yZXNwb25zZVR5cGU9ZSx0LnJlc3BvbnNlVHlwZT09PWV9Y2F0Y2goZSl7fXJldHVybiExfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9bix0LmRldGVjdE1velhIUlN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJm4oXCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwiKX0sdC5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwib3ZlcnJpZGVNaW1lVHlwZVwiKX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcixuPW8oMSksaT1vKDgpOyFmdW5jdGlvbihlKXtlW2UuRklOSVNIX1NFTkQ9MV09XCJGSU5JU0hfU0VORFwifShyfHwocj17fSkpO3ZhciBzPW5ldyBVaW50OEFycmF5KFsxXSk7dC5XZWJzb2NrZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuZGVidWcmJm4uZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0XCIsZSk7dmFyIHQsbz1mdW5jdGlvbihlKXtpZihcImh0dHBzOi8vXCI9PT1lLnN1YnN0cigwLDgpKXJldHVyblwid3NzOi8vXCIrZS5zdWJzdHIoOCk7aWYoXCJodHRwOi8vXCI9PT1lLnN1YnN0cigwLDcpKXJldHVyblwid3M6Ly9cIitlLnN1YnN0cig3KTt0aHJvdyBuZXcgRXJyb3IoXCJXZWJzb2NrZXQgdHJhbnNwb3J0IGNvbnN0cnVjdGVkIHdpdGggbm9uLWh0dHBzOi8vIG9yIGh0dHA6Ly8gaG9zdC5cIil9KGUudXJsKSxhPVtdO2Z1bmN0aW9uIHAoZSl7aWYoZT09PXIuRklOSVNIX1NFTkQpdC5zZW5kKHMpO2Vsc2V7dmFyIG89ZSxuPW5ldyBJbnQ4QXJyYXkoby5ieXRlTGVuZ3RoKzEpO24uc2V0KG5ldyBVaW50OEFycmF5KFswXSkpLG4uc2V0KG8sMSksdC5zZW5kKG4pfX1yZXR1cm57c2VuZE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP3AoZSk6YS5wdXNoKGUpfSxmaW5pc2hTZW5kOmZ1bmN0aW9uKCl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP3Aoci5GSU5JU0hfU0VORCk6YS5wdXNoKHIuRklOSVNIX1NFTkQpfSxzdGFydDpmdW5jdGlvbihyKXsodD1uZXcgV2ViU29ja2V0KG8sW1wiZ3JwYy13ZWJzb2NrZXRzXCJdKSkuYmluYXJ5VHlwZT1cImFycmF5YnVmZmVyXCIsdC5vbm9wZW49ZnVuY3Rpb24oKXt2YXIgbztlLmRlYnVnJiZuLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbm9wZW5cIiksdC5zZW5kKChvPVwiXCIsci5mb3JFYWNoKChmdW5jdGlvbihlLHQpe28rPWUrXCI6IFwiK3Quam9pbihcIiwgXCIpK1wiXFxyXFxuXCJ9KSksaS5lbmNvZGVBU0NJSShvKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cChlKX0pKX0sdC5vbmNsb3NlPWZ1bmN0aW9uKHQpe2UuZGVidWcmJm4uZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uY2xvc2VcIix0KSxlLm9uRW5kKCl9LHQub25lcnJvcj1mdW5jdGlvbih0KXtlLmRlYnVnJiZuLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbmVycm9yXCIsdCl9LHQub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2Uub25DaHVuayhuZXcgVWludDhBcnJheSh0LmRhdGEpKX19LGNhbmNlbDpmdW5jdGlvbigpe2UuZGVidWcmJm4uZGVidWcoXCJ3ZWJzb2NrZXQuYWJvcnRcIiksdC5jbG9zZSgpfX19KGUpfX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDIpO3QuaW52b2tlPWZ1bmN0aW9uKGUsdCl7aWYoZS5yZXF1ZXN0U3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi5pbnZva2UgY2Fubm90IGJlIHVzZWQgd2l0aCBjbGllbnQtc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuY2xpZW50IGluc3RlYWQuXCIpO3ZhciBvPXIuY2xpZW50KGUse2hvc3Q6dC5ob3N0LHRyYW5zcG9ydDp0LnRyYW5zcG9ydCxkZWJ1Zzp0LmRlYnVnfSk7cmV0dXJuIHQub25IZWFkZXJzJiZvLm9uSGVhZGVycyh0Lm9uSGVhZGVycyksdC5vbk1lc3NhZ2UmJm8ub25NZXNzYWdlKHQub25NZXNzYWdlKSx0Lm9uRW5kJiZvLm9uRW5kKHQub25FbmQpLG8uc3RhcnQodC5tZXRhZGF0YSksby5zZW5kKHQucmVxdWVzdCksby5maW5pc2hTZW5kKCkse2Nsb3NlOmZ1bmN0aW9uKCl7by5jbG9zZSgpfX19fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5mcmFtZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXJpYWxpemVCaW5hcnkoKSxvPW5ldyBBcnJheUJ1ZmZlcih0LmJ5dGVMZW5ndGgrNSk7cmV0dXJuIG5ldyBEYXRhVmlldyhvLDEsNCkuc2V0VWludDMyKDAsdC5sZW5ndGgsITEpLG5ldyBVaW50OEFycmF5KG8sNSkuc2V0KHQpLG5ldyBVaW50OEFycmF5KG8pfX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oMCksbj1vKDIpO3QudW5hcnk9ZnVuY3Rpb24oZSx0KXtpZihlLnJlc3BvbnNlU3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIHNlcnZlci1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5pbnZva2Ugb3IgLmNsaWVudCBpbnN0ZWFkLlwiKTtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLnVuYXJ5IGNhbm5vdCBiZSB1c2VkIHdpdGggY2xpZW50LXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmNsaWVudCBpbnN0ZWFkLlwiKTt2YXIgbz1udWxsLGk9bnVsbCxzPW4uY2xpZW50KGUse2hvc3Q6dC5ob3N0LHRyYW5zcG9ydDp0LnRyYW5zcG9ydCxkZWJ1Zzp0LmRlYnVnfSk7cmV0dXJuIHMub25IZWFkZXJzKChmdW5jdGlvbihlKXtvPWV9KSkscy5vbk1lc3NhZ2UoKGZ1bmN0aW9uKGUpe2k9ZX0pKSxzLm9uRW5kKChmdW5jdGlvbihlLG4scyl7dC5vbkVuZCh7c3RhdHVzOmUsc3RhdHVzTWVzc2FnZTpuLGhlYWRlcnM6b3x8bmV3IHIuTWV0YWRhdGEsbWVzc2FnZTppLHRyYWlsZXJzOnN9KX0pKSxzLnN0YXJ0KHQubWV0YWRhdGEpLHMuc2VuZCh0LnJlcXVlc3QpLHMuZmluaXNoU2VuZCgpLHtjbG9zZTpmdW5jdGlvbigpe3MuY2xvc2UoKX19fX1dKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWk/aTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKSxzPW8oMTYpO24ub2JqZWN0LmV4dGVuZChwcm90byxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5ycGMuU3RhdHVzXCIsbnVsbCxpKSxwcm90by5nb29nbGUucnBjLlN0YXR1cz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucnBjLlN0YXR1cy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5ycGMuU3RhdHVzXCIpLHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnJlcGVhdGVkRmllbGRzXz1bM10sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17Y29kZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsMCksbWVzc2FnZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIiksZGV0YWlsc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldERldGFpbHNMaXN0KCkscy5BbnkudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzO3JldHVybiBwcm90by5nb29nbGUucnBjLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50MzIoKTtlLnNldENvZGUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRNZXNzYWdlKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBzLkFueTt0LnJlYWRNZXNzYWdlKG8scy5BbnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZERldGFpbHMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDswIT09KG89ZS5nZXRDb2RlKCkpJiZ0LndyaXRlSW50MzIoMSxvKSwobz1lLmdldE1lc3NhZ2UoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKSwobz1lLmdldERldGFpbHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsbyxzLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5nZXRDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLnNldENvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5nZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5nZXREZXRhaWxzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxzLkFueSwzKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLnNldERldGFpbHNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUuYWRkRGV0YWlscz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LHQpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUuY2xlYXJEZXRhaWxzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERldGFpbHNMaXN0KFtdKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLnJwYyl9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM/dGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9LmNhbGwobnVsbCkscz1vKDE1KTtuLm9iamVjdC5leHRlbmQocHJvdG8scyk7dmFyIGE9bygyKTtuLm9iamVjdC5leHRlbmQocHJvdG8sYSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LlR5cGVDYXNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UuVHlwZUNhc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5nc1wiLG51bGwsaSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdFwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnNcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5nc1wiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhXCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2RhdGE6dC5nZXREYXRhX2FzQjY0KCksZW9tOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDIsITEpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRCeXRlcygpO2Uuc2V0RGF0YShvKTticmVhaztjYXNlIDI6bz10LnJlYWRCb29sKCk7ZS5zZXRFb20obyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldERhdGFfYXNVOCgpKS5sZW5ndGg+MCYmdC53cml0ZUJ5dGVzKDEsbyksKG89ZS5nZXRFb20oKSkmJnQud3JpdGVCb29sKDIsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuZ2V0RGF0YV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldERhdGEoKSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuZ2V0RGF0YV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXREYXRhKCkpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnByb3RvdHlwZS5nZXRFb209ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuc2V0RW9tPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMixlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0udG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFVpbnQ2NCgpO2Uuc2V0SWQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOzAhPT0obz1lLmdldElkKCkpJiZ0LndyaXRlVWludDY0KDEsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzIsM11dLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5UeXBlQ2FzZT17VFlQRV9OT1RfU0VUOjAsSEVBREVSUzoyLE1FU1NBR0U6M30scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5nZXRUeXBlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3N0cmVhbToobz10LmdldFN0cmVhbSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0udG9PYmplY3QoZSxvKSxoZWFkZXJzOihvPXQuZ2V0SGVhZGVycygpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy50b09iamVjdChlLG8pLG1lc3NhZ2U6KG89dC5nZXRNZXNzYWdlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3Q7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFN0cmVhbShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVyczt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SGVhZGVycyhvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0TWVzc2FnZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0U3RyZWFtKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0SGVhZGVycygpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0TWVzc2FnZSgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLmdldFN0cmVhbT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0sMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuc2V0U3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclN0cmVhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFN0cmVhbSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLmhhc1N0cmVhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhckhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRIZWFkZXJzKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuaGFzSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5nZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhck1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXNzYWdlKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuaGFzTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXttZXRob2Q6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLG1ldGFkYXRhOihvPXQuZ2V0TWV0YWRhdGEoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEudG9PYmplY3QoZSxvKSx0aW1lb3V0OihvPXQuZ2V0VGltZW91dCgpKSYmcy5EdXJhdGlvbi50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnM7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRNZXRob2Qobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGE7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE1ldGFkYXRhKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBzLkR1cmF0aW9uO3QucmVhZE1lc3NhZ2UobyxzLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRUaW1lb3V0KG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRNZXRob2QoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldE1ldGFkYXRhKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRUaW1lb3V0KCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scy5EdXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLmdldE1ldGhvZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLnNldE1ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuZ2V0TWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLnNldE1ldGFkYXRhPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuY2xlYXJNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE1ldGFkYXRhKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLmhhc01ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5nZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxzLkR1cmF0aW9uLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5zZXRUaW1lb3V0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuY2xlYXJUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VGltZW91dCh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5oYXNUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2hhc01lc3NhZ2U6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMSwhMSkscGFja2V0TWVzc2FnZToobz10LmdldFBhY2tldE1lc3NhZ2UoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS50b09iamVjdChlLG8pLGVvczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEJvb2woKTtlLnNldEhhc01lc3NhZ2Uobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRQYWNrZXRNZXNzYWdlKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEJvb2woKTtlLnNldEVvcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0SGFzTWVzc2FnZSgpKSYmdC53cml0ZUJvb2woMSxvKSxudWxsIT0obz1lLmdldFBhY2tldE1lc3NhZ2UoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RW9zKCkpJiZ0LndyaXRlQm9vbCgzLG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5nZXRIYXNNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5zZXRIYXNNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuZ2V0UGFja2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5zZXRQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuY2xlYXJQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UGFja2V0TWVzc2FnZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5oYXNQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5nZXRFb3M9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UucHJvdG90eXBlLnNldEVvcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDMsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMiwzLDRdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLlR5cGVDYXNlPXtUWVBFX05PVF9TRVQ6MCxIRUFERVJTOjIsTUVTU0FHRTozLFRSQUlMRVJTOjR9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmdldFR5cGVDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3N0cmVhbToobz10LmdldFN0cmVhbSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0udG9PYmplY3QoZSxvKSxoZWFkZXJzOihvPXQuZ2V0SGVhZGVycygpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMudG9PYmplY3QoZSxvKSxtZXNzYWdlOihvPXQuZ2V0TWVzc2FnZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UudG9PYmplY3QoZSxvKSx0cmFpbGVyczoobz10LmdldFRyYWlsZXJzKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFN0cmVhbShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnM7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRIZWFkZXJzKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE1lc3NhZ2Uobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVyczt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRUcmFpbGVycyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0U3RyZWFtKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0SGVhZGVycygpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldE1lc3NhZ2UoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRUcmFpbGVycygpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmdldFN0cmVhbT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0sMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLnNldFN0cmVhbT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyU3RyZWFtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3RyZWFtKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmhhc1N0cmVhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuZ2V0SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLnNldEhlYWRlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmNsZWFySGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEhlYWRlcnModm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuaGFzSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuZ2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE1lc3NhZ2Uodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuaGFzTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuZ2V0VHJhaWxlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycyw0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuc2V0VHJhaWxlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDQscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVHJhaWxlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRUcmFpbGVycyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5oYXNUcmFpbGVycz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXttZXRhZGF0YToobz10LmdldE1ldGFkYXRhKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGE7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE1ldGFkYXRhKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldE1ldGFkYXRhKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnByb3RvdHlwZS5nZXRNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YSwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMucHJvdG90eXBlLnNldE1ldGFkYXRhPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMucHJvdG90eXBlLmNsZWFyTWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXRhZGF0YSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5wcm90b3R5cGUuaGFzTWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17cGFja2V0TWVzc2FnZToobz10LmdldFBhY2tldE1lc3NhZ2UoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0UGFja2V0TWVzc2FnZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRQYWNrZXRNZXNzYWdlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLmdldFBhY2tldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZSwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLnNldFBhY2tldE1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5wcm90b3R5cGUuY2xlYXJQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UGFja2V0TWVzc2FnZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5wcm90b3R5cGUuaGFzUGFja2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtzdGF0dXM6KG89dC5nZXRTdGF0dXMoKSkmJmEuU3RhdHVzLnRvT2JqZWN0KGUsbyksbWV0YWRhdGE6KG89dC5nZXRNZXRhZGF0YSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgYS5TdGF0dXM7dC5yZWFkTWVzc2FnZShvLGEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTdGF0dXMobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGE7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE1ldGFkYXRhKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ZS5nZXRTdGF0dXMoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxhLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRNZXRhZGF0YSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsYS5TdGF0dXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuc2V0U3RhdHVzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnByb3RvdHlwZS5jbGVhclN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFN0YXR1cyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLmhhc1N0YXR1cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnByb3RvdHlwZS5nZXRNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnByb3RvdHlwZS5zZXRNZXRhZGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuY2xlYXJNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE1ldGFkYXRhKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuaGFzTWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17dmFsdWVzTGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDEpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncztyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5hZGRWYWx1ZXMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0VmFsdWVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5wcm90b3R5cGUuZ2V0VmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucHJvdG90eXBlLnNldFZhbHVlc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZXx8W10pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucHJvdG90eXBlLmFkZFZhbHVlcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMSxlLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucHJvdG90eXBlLmNsZWFyVmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFZhbHVlc0xpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e21kTWFwOihvPXQuZ2V0TWRNYXAoKSk/by50b09iamVjdChlLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy50b09iamVjdCk6W119O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1lLmdldE1kTWFwKCk7dC5yZWFkTWVzc2FnZShvLChmdW5jdGlvbihlLHQpe3IuTWFwLmRlc2VyaWFsaXplQmluYXJ5KGUsdCxyLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFN0cmluZyxyLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2UscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcixcIlwiLG5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MpfSkpO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRNZE1hcCghMCkpJiZvLmdldExlbmd0aCgpPjAmJm8uc2VyaWFsaXplQmluYXJ5KDEsdCxyLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmcsci5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnByb3RvdHlwZS5nZXRNZE1hcD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLmdldE1hcEZpZWxkKHRoaXMsMSxlLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEucHJvdG90eXBlLmNsZWFyTWRNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRNZE1hcCgpLmNsZWFyKCksdGhpc30sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MSl9LGZ1bmN0aW9uKGUsdCl7dmFyIG87bz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtvPW98fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmKG89d2luZG93KX1lLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWk/aTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKSxzPW8oNik7bi5vYmplY3QuZXh0ZW5kKHByb3RvLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3RcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3RcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzXCIsbnVsbCxpKSxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHNcIikscHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlXCIpLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2VcIiksci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17dHlwZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIikscGF5bG9hZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHM7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0VHlwZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBheWxvYWQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFR5cGUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFBheWxvYWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnByb3RvdHlwZS5zZXRUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMucHJvdG90eXBlLmdldFBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMucHJvdG90eXBlLnNldFBheWxvYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17ZW50aXR5OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxjcmVkZW50aWFsczoobz10LmdldENyZWRlbnRpYWxzKCkpJiZwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3Q7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEVudGl0eShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldENyZWRlbnRpYWxzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRFbnRpdHkoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldENyZWRlbnRpYWxzKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QucHJvdG90eXBlLmdldEVudGl0eT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRFbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRDcmVkZW50aWFscz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLDIpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuc2V0Q3JlZGVudGlhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJDcmVkZW50aWFscz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENyZWRlbnRpYWxzKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnByb3RvdHlwZS5oYXNDcmVkZW50aWFscz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWNjZXNzVG9rZW46ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEFjY2Vzc1Rva2VuKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldEFjY2Vzc1Rva2VuKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UucHJvdG90eXBlLnNldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtlbnRpdHk6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3Q7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRFbnRpdHkobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0RW50aXR5KCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QucHJvdG90eXBlLmdldEVudGl0eT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QucHJvdG90eXBlLnNldEVudGl0eT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWNjZXNzVG9rZW46ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0QWNjZXNzVG9rZW4obyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0QWNjZXNzVG9rZW4oKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2UucHJvdG90eXBlLnNldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5wcm90by5ycGMudjEpfSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9bygwKSxuPXIsaT1mdW5jdGlvbigpe3JldHVybiB0aGlzP3RoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09aT9pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfS5jYWxsKG51bGwpLHM9bygyMSk7bi5vYmplY3QuZXh0ZW5kKHByb3RvLHMpO3ZhciBhPW8oMjIpO24ub2JqZWN0LmV4dGVuZChwcm90byxhKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5hcGkuaHR0cFwiLG51bGwsaSkscHJvdG8uZ29vZ2xlLmFwaS5odHRwPW5ldyByLkV4dGVuc2lvbkZpZWxkSW5mbyg3MjI5NTcyOCx7aHR0cDowfSxzLkh0dHBSdWxlLHMuSHR0cFJ1bGUudG9PYmplY3QsMCksYS5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnlbNzIyOTU3MjhdPW5ldyByLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbyhwcm90by5nb29nbGUuYXBpLmh0dHAsci5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlLHIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2Uscy5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcixzLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciwhMSksYS5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNbNzIyOTU3MjhdPXByb3RvLmdvb2dsZS5hcGkuaHR0cCxuLm9iamVjdC5leHRlbmQodCxwcm90by5nb29nbGUuYXBpKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWk/aTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKSxzPW8oNik7bi5vYmplY3QuZXh0ZW5kKHByb3RvLHMpO3ZhciBhPW8oMik7bi5vYmplY3QuZXh0ZW5kKHByb3RvLGEpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5TdGFnZUNhc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5TdGFnZUNhc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLlN0YWdlQ2FzZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3RcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5VcGRhdGVDYXNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZ1wiLG51bGwsaSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGVcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdFwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXI9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlclwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdFwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2VcIiksci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17Y2FuZGlkYXRlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxzZHBNaWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpLHNkcG1MaW5lSW5kZXg6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLDApLHVzZXJuYW1lRnJhZ21lbnQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw0LFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0Q2FuZGlkYXRlKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpO2Uuc2V0U2RwTWlkKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZFVpbnQzMigpO2Uuc2V0U2RwbUxpbmVJbmRleChvKTticmVhaztjYXNlIDQ6bz10LnJlYWRTdHJpbmcoKTtlLnNldFVzZXJuYW1lRnJhZ21lbnQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldENhbmRpZGF0ZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZVN0cmluZygyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZVVpbnQzMigzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZVN0cmluZyg0LG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuZ2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLnNldENhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLmdldFNkcE1pZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5zZXRTZHBNaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5jbGVhclNkcE1pZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5oYXNTZHBNaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5nZXRTZHBtTGluZUluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLnNldFNkcG1MaW5lSW5kZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5jbGVhclNkcG1MaW5lSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuaGFzU2RwbUxpbmVJbmRleD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLmdldFVzZXJuYW1lRnJhZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuc2V0VXNlcm5hbWVGcmFnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLmNsZWFyVXNlcm5hbWVGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5oYXNVc2VybmFtZUZyYWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtzZHA6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGRpc2FibGVUcmlja2xlOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDIsITEpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3Q7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTZHAobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpO2Uuc2V0RGlzYWJsZVRyaWNrbGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFNkcCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0RGlzYWJsZVRyaWNrbGUoKSkmJnQud3JpdGVCb29sKDIsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLmdldFNkcD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLnNldFNkcD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5wcm90b3R5cGUuZ2V0RGlzYWJsZVRyaWNrbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLnNldERpc2FibGVUcmlja2xlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMixlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17c2RwOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFNkcChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRTZHAoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UucHJvdG90eXBlLmdldFNkcD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnByb3RvdHlwZS5zZXRTZHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17Y2FuZGlkYXRlOihvPXQuZ2V0Q2FuZGlkYXRlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2FuZGlkYXRlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldENhbmRpZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuZ2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZSwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuc2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuY2xlYXJDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDYW5kaWRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuaGFzQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5vbmVvZkdyb3Vwc189W1syLDNdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5TdGFnZUNhc2U9e1NUQUdFX05PVF9TRVQ6MCxJTklUOjIsVVBEQVRFOjN9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGFnZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3V1aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGluaXQ6KG89dC5nZXRJbml0KCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS50b09iamVjdChlLG8pLHVwZGF0ZToobz10LmdldFVwZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0VXVpZChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRJbml0KG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGRhdGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFV1aWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldEluaXQoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRVcGRhdGUoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLmdldFV1aWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuc2V0VXVpZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLmdldEluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuc2V0SW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJbml0KHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5oYXNJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuZ2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuc2V0VXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VXBkYXRlKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5oYXNVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Qub25lb2ZHcm91cHNfPVtbMiwzLDRdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LlVwZGF0ZUNhc2U9e1VQREFURV9OT1RfU0VUOjAsQ0FORElEQVRFOjIsRE9ORTozLEVSUk9SOjR9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmdldFVwZGF0ZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17dXVpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksY2FuZGlkYXRlOihvPXQuZ2V0Q2FuZGlkYXRlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS50b09iamVjdChlLG8pLGRvbmU6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMywhMSksZXJyb3I6KG89dC5nZXRFcnJvcigpKSYmYS5TdGF0dXMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0VXVpZChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGU7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDYW5kaWRhdGUobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkQm9vbCgpO2Uuc2V0RG9uZShvKTticmVhaztjYXNlIDQ6bz1uZXcgYS5TdGF0dXM7dC5yZWFkTWVzc2FnZShvLGEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFcnJvcihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0VXVpZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0Q2FuZGlkYXRlKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZUJvb2woMyxvKSxudWxsIT0obz1lLmdldEVycm9yKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8sYS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRVdWlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuc2V0VXVpZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuc2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckNhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENhbmRpZGF0ZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5oYXNDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmdldERvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLnNldERvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5oYXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsYS5TdGF0dXMsNCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLnNldEVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw0LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXJyb3Iodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e307cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3QuZ2V0RmllbGROdW1iZXIoKTt0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7fSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17dXJsc0xpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxKSk/dm9pZCAwOm8sdXNlcm5hbWU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpLGNyZWRlbnRpYWw6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLFwiXCIpfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2UuYWRkVXJscyhvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldFVzZXJuYW1lKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZFN0cmluZygpO2Uuc2V0Q3JlZGVudGlhbChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0VXJsc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZFN0cmluZygxLG8pLChvPWUuZ2V0VXNlcm5hbWUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKSwobz1lLmdldENyZWRlbnRpYWwoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMyxvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLmdldFVybHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5zZXRVcmxzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlfHxbXSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5hZGRVcmxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxLGUsdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5jbGVhclVybHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VXJsc0xpc3QoW10pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuZ2V0VXNlcm5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuc2V0VXNlcm5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5nZXRDcmVkZW50aWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMyxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLnNldENyZWRlbnRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDMsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWRkaXRpb25hbEljZVNlcnZlcnNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRBZGRpdGlvbmFsSWNlU2VydmVyc0xpc3QoKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci50b09iamVjdCxlKSxkaXNhYmxlVHJpY2tsZTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWc7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXI7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRBZGRpdGlvbmFsSWNlU2VydmVycyhvKTticmVhaztjYXNlIDI6bz10LnJlYWRCb29sKCk7ZS5zZXREaXNhYmxlVHJpY2tsZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0QWRkaXRpb25hbEljZVNlcnZlcnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXREaXNhYmxlVHJpY2tsZSgpKSYmdC53cml0ZUJvb2woMixvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLmdldEFkZGl0aW9uYWxJY2VTZXJ2ZXJzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlciwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLnNldEFkZGl0aW9uYWxJY2VTZXJ2ZXJzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLmFkZEFkZGl0aW9uYWxJY2VTZXJ2ZXJzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5wcm90b3R5cGUuY2xlYXJBZGRpdGlvbmFsSWNlU2VydmVyc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBZGRpdGlvbmFsSWNlU2VydmVyc0xpc3QoW10pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5wcm90b3R5cGUuZ2V0RGlzYWJsZVRyaWNrbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnByb3RvdHlwZS5zZXREaXNhYmxlVHJpY2tsZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17c2RwOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxvcHRpb25hbENvbmZpZzoobz10LmdldE9wdGlvbmFsQ29uZmlnKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFNkcChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWc7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25hbENvbmZpZyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0U2RwKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25hbENvbmZpZygpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5nZXRTZHA9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLnNldFNkcD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5nZXRPcHRpb25hbENvbmZpZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5wcm90b3R5cGUuc2V0T3B0aW9uYWxDb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLmNsZWFyT3B0aW9uYWxDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25hbENvbmZpZyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLmhhc09wdGlvbmFsQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2NhbmRpZGF0ZToobz10LmdldENhbmRpZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGU7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDYW5kaWRhdGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0Q2FuZGlkYXRlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5wcm90b3R5cGUuZ2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZSwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UucHJvdG90eXBlLnNldENhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnByb3RvdHlwZS5jbGVhckNhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENhbmRpZGF0ZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5wcm90b3R5cGUuaGFzQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7dC5nZXRGaWVsZE51bWJlcigpO3Quc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17c3RhdHVzOihvPXQuZ2V0U3RhdHVzKCkpJiZhLlN0YXR1cy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IGEuU3RhdHVzO3QucmVhZE1lc3NhZ2UobyxhLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0U3RhdHVzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldFN0YXR1cygpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLGEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5wcm90b3R5cGUuZ2V0U3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxhLlN0YXR1cywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5wcm90b3R5cGUuc2V0U3RhdHVzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5wcm90b3R5cGUuY2xlYXJTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTdGF0dXModm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5wcm90b3R5cGUuaGFzU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qub25lb2ZHcm91cHNfPVtbMiwzLDQsNV1dLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5TdGFnZUNhc2U9e1NUQUdFX05PVF9TRVQ6MCxJTklUOjIsVVBEQVRFOjMsRE9ORTo0LEVSUk9SOjV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuZ2V0U3RhZ2VDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17dXVpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksaW5pdDoobz10LmdldEluaXQoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS50b09iamVjdChlLG8pLHVwZGF0ZToobz10LmdldFVwZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UudG9PYmplY3QoZSxvKSxkb25lOihvPXQuZ2V0RG9uZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnRvT2JqZWN0KGUsbyksZXJyb3I6KG89dC5nZXRFcnJvcigpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFV1aWQobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRJbml0KG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwZGF0ZShvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERvbmUobyk7YnJlYWs7Y2FzZSA1Om89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEVycm9yKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRVdWlkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRJbml0KCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFVwZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldERvbmUoKSkmJnQud3JpdGVNZXNzYWdlKDQsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0RXJyb3IoKSkmJnQud3JpdGVNZXNzYWdlKDUsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRVdWlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRVdWlkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmdldEluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRJbml0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SW5pdCh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmhhc0luaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuZ2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZSwzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRVcGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5jbGVhclVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwZGF0ZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmhhc1VwZGF0ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXREb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UsNCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0RG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsNCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmNsZWFyRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERvbmUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5oYXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLDUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLnNldEVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw1LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuaGFzRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3NkcDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFNkcChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRTZHAoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUuZ2V0U2RwPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUuc2V0U2RwPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2NhbmRpZGF0ZToobz10LmdldENhbmRpZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2FuZGlkYXRlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldENhbmRpZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS5nZXRDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLnNldENhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuY2xlYXJDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDYW5kaWRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS5oYXNDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e307cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7dC5nZXRGaWVsZE51bWJlcigpO3Quc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17c3RhdHVzOihvPXQuZ2V0U3RhdHVzKCkpJiZhLlN0YXR1cy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBhLlN0YXR1czt0LnJlYWRNZXNzYWdlKG8sYS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFN0YXR1cyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRTdGF0dXMoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxhLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnByb3RvdHlwZS5nZXRTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLGEuU3RhdHVzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5wcm90b3R5cGUuc2V0U3RhdHVzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UucHJvdG90eXBlLmNsZWFyU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3RhdHVzKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnByb3RvdHlwZS5oYXNTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMiwzLDQsNV1dLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UuU3RhZ2VDYXNlPXtTVEFHRV9OT1RfU0VUOjAsSU5JVDoyLFVQREFURTozLERPTkU6NCxFUlJPUjo1fSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGFnZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17dXVpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksaW5pdDoobz10LmdldEluaXQoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UudG9PYmplY3QoZSxvKSx1cGRhdGU6KG89dC5nZXRVcGRhdGUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdChlLG8pLGRvbmU6KG89dC5nZXREb25lKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnRvT2JqZWN0KGUsbyksZXJyb3I6KG89dC5nZXRFcnJvcigpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0VXVpZChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SW5pdChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwZGF0ZShvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RG9uZShvKTticmVhaztjYXNlIDU6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFcnJvcihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0VXVpZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0SW5pdCgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VXBkYXRlKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldERvbmUoKSkmJnQud3JpdGVNZXNzYWdlKDQsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEVycm9yKCkpJiZ0LndyaXRlTWVzc2FnZSg1LG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5nZXRVdWlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0VXVpZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0SW5pdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0SW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SW5pdCh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5oYXNJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5nZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZSwzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0VXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwZGF0ZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5oYXNVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmdldERvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2UsNCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLnNldERvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDQscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERvbmUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuaGFzRG9uZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLDUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5zZXRFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsNSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXt0LmdldEZpZWxkTnVtYmVyKCk7dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe30sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtjb25maWc6KG89dC5nZXRDb25maWcoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZzt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldENvbmZpZyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRDb25maWcoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q29uZmlnKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5wcm90b3R5cGUuaGFzQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5wcm90by5ycGMud2VicnRjLnYxKX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGlhbFdlYlJUQz10LmRpYWxEaXJlY3Q9dm9pZCAwO3ZhciByPW8oOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkaWFsRGlyZWN0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGlhbERpcmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImRpYWxXZWJSVENcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kaWFsV2ViUlRDfX0pfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbz0xLHI9YXJndW1lbnRzLmxlbmd0aDtvPHI7bysrKWZvcih2YXIgbiBpbiB0PWFyZ3VtZW50c1tvXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG49dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKChmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIHMoZSl7dHJ5e3Aoci5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtwKHIudGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHAoZSl7dmFyIHQ7ZS5kb25lP24oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbz90Om5ldyBvKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9cCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfSxpPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIG8scixuLGkscz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZuWzBdKXRocm93IG5bMV07cmV0dXJuIG5bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gaT17bmV4dDphKDApLHRocm93OmEoMSkscmV0dXJuOmEoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBhKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO3M7KXRyeXtpZihvPTEsciYmKG49MiZpWzBdP3IucmV0dXJuOmlbMF0/ci50aHJvd3x8KChuPXIucmV0dXJuKSYmbi5jYWxsKHIpLDApOnIubmV4dCkmJiEobj1uLmNhbGwocixpWzFdKSkuZG9uZSlyZXR1cm4gbjtzd2l0Y2gocj0wLG4mJihpPVsyJmlbMF0sbi52YWx1ZV0pLGlbMF0pe2Nhc2UgMDpjYXNlIDE6bj1pO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcy5sYWJlbCsrLHt2YWx1ZTppWzFdLGRvbmU6ITF9O2Nhc2UgNTpzLmxhYmVsKysscj1pWzFdLGk9WzBdO2NvbnRpbnVlO2Nhc2UgNzppPXMub3BzLnBvcCgpLHMudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobj1zLnRyeXMsKG49bi5sZW5ndGg+MCYmbltuLmxlbmd0aC0xXSl8fDYhPT1pWzBdJiYyIT09aVswXSkpe3M9MDtjb250aW51ZX1pZigzPT09aVswXSYmKCFufHxpWzFdPm5bMF0mJmlbMV08blszXSkpe3MubGFiZWw9aVsxXTticmVha31pZig2PT09aVswXSYmcy5sYWJlbDxuWzFdKXtzLmxhYmVsPW5bMV0sbj1pO2JyZWFrfWlmKG4mJnMubGFiZWw8blsyXSl7cy5sYWJlbD1uWzJdLHMub3BzLnB1c2goaSk7YnJlYWt9blsyXSYmcy5vcHMucG9wKCkscy50cnlzLnBvcCgpO2NvbnRpbnVlfWk9dC5jYWxsKGUscyl9Y2F0Y2goZSl7aT1bNixlXSxyPTB9ZmluYWxseXtvPW49MH1pZig1JmlbMF0pdGhyb3cgaVsxXTtyZXR1cm57dmFsdWU6aVswXT9pWzFdOnZvaWQgMCxkb25lOiEwfX0oW2ksYV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGlhbFdlYlJUQz10LmRpYWxEaXJlY3Q9dm9pZCAwO3ZhciBzPW8oMSksYT1vKDEwKSxwPW8oMjApLGc9bygyKSxsPW8oNSksdT1vKDIzKSxjPW8oNyksZD1vKDI0KSxmPW8oMjUpO2Z1bmN0aW9uIGgoZSx0KXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG87cmV0dXJuIGkodGhpcywoZnVuY3Rpb24ocil7cmV0dXJuIG89ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZ3JwYy5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ITF9KShlKX0sKG51bGw9PXQ/dm9pZCAwOnQuY3JlZGVudGlhbHMpP1syLGIoZSxvLHQpXTpbMixvXX0pKX0pKX1mdW5jdGlvbiBiKGUsdCxvKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHIsYSxwPXRoaXM7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcj1cIlwiLFs0LGZ1bmN0aW9uKCl7cmV0dXJuIG4ocCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBuLGEscCxnLGMsZCxmLGgsYix5LG07cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm5cIlwiIT1yP1szLDNdOigobj1uZXcgbC5BdXRoZW50aWNhdGVSZXF1ZXN0KS5zZXRFbnRpdHkoKG51bGw9PW8/dm9pZCAwOm8uYXV0aEVudGl0eSk/by5hdXRoRW50aXR5OmUucmVwbGFjZSgvXiguKjpcXC9cXC8pLyxcIlwiKSksKGE9bmV3IGwuQ3JlZGVudGlhbHMpLnNldFR5cGUobnVsbD09PSh5PW51bGw9PW8/dm9pZCAwOm8uY3JlZGVudGlhbHMpfHx2b2lkIDA9PT15P3ZvaWQgMDp5LnR5cGUpLGEuc2V0UGF5bG9hZChudWxsPT09KG09bnVsbD09bz92b2lkIDA6by5jcmVkZW50aWFscyl8fHZvaWQgMD09PW0/dm9pZCAwOm0ucGF5bG9hZCksbi5zZXRDcmVkZW50aWFscyhhKSxjPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3A9ZSxnPXR9KSksZD1cIlwiLHMuZ3JwYy5pbnZva2UodS5BdXRoU2VydmljZS5BdXRoZW50aWNhdGUse3JlcXVlc3Q6bixob3N0OihudWxsPT1vP3ZvaWQgMDpvLmV4dGVybmFsQXV0aEFkZHJlc3MpP28uZXh0ZXJuYWxBdXRoQWRkcmVzczplLHRyYW5zcG9ydDp0LG9uTWVzc2FnZTpmdW5jdGlvbihlKXtkPWUuZ2V0QWNjZXNzVG9rZW4oKX0sb25FbmQ6ZnVuY3Rpb24oZSx0LG8pe2U9PXMuZ3JwYy5Db2RlLk9LP3AoYik6Zyh0KX19KSxbNCxjXSk7Y2FzZSAxOnJldHVybiBpLnNlbnQoKSxyPWQsKG51bGw9PW8/dm9pZCAwOm8uZXh0ZXJuYWxBdXRoQWRkcmVzcykmJihudWxsPT1vP3ZvaWQgMDpvLmV4dGVybmFsQXV0aFRvRW50aXR5KT8oKGY9bmV3IHMuZ3JwYy5NZXRhZGF0YSkuc2V0KFwiYXV0aG9yaXphdGlvblwiLFwiQmVhcmVyIFwiK3IpLGM9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7cD1lLGc9dH0pKSxkPVwiXCIsKGg9bmV3IGwuQXV0aGVudGljYXRlVG9SZXF1ZXN0KS5zZXRFbnRpdHkoby5leHRlcm5hbEF1dGhUb0VudGl0eSkscy5ncnBjLmludm9rZSh1LkV4dGVybmFsQXV0aFNlcnZpY2UuQXV0aGVudGljYXRlVG8se3JlcXVlc3Q6aCxob3N0Om8uZXh0ZXJuYWxBdXRoQWRkcmVzcyx0cmFuc3BvcnQ6dCxtZXRhZGF0YTpmLG9uTWVzc2FnZTpmdW5jdGlvbihlKXtkPWUuZ2V0QWNjZXNzVG9rZW4oKX0sb25FbmQ6ZnVuY3Rpb24oZSx0LG8pe2U9PXMuZ3JwYy5Db2RlLk9LP3AoZik6Zyh0KX19KSxbNCxjXSk6WzMsM107Y2FzZSAyOmkuc2VudCgpLHI9ZCxpLmxhYmVsPTM7Y2FzZSAzOnJldHVybihiPW5ldyBzLmdycGMuTWV0YWRhdGEpLnNldChcImF1dGhvcml6YXRpb25cIixcIkJlYXJlciBcIityKSxbMixiXX19KSl9KSl9KCldO2Nhc2UgMTpyZXR1cm4gYT1nLnNlbnQoKSxbMixmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSx0LGEpfV19fSkpfSkpfXQuZGlhbERpcmVjdD1oO3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbyl7dGhpcy5vcHRzPWUsdGhpcy5leHRyYU1ldGFkYXRhPW8sdGhpcy50cmFuc3BvcnQ9dChlKX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmV4dHJhTWV0YWRhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXtlLnNldCh0LG8pfSkpLHRoaXMudHJhbnNwb3J0LnN0YXJ0KGUpLFsyXX0pKX0pKX0sZS5wcm90b3R5cGUuc2VuZE1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy50cmFuc3BvcnQuc2VuZE1lc3NhZ2UoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zcG9ydC5maW5pc2hTZW5kKCl9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMudHJhbnNwb3J0LmNhbmNlbCgpfSxlfSgpO3QuZGlhbFdlYlJUQz1mdW5jdGlvbihlLHQsbyl7dmFyIGwsdSxiLHksbSxTO3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgRSx2LHcsXyxSLE0sVCxPLEEsRixDLEQsQixJLFAsaixVLE4sTCxXLHgsSCx6LGs9dGhpcztyZXR1cm4gaSh0aGlzLChmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiBFPW51bGw9PW8/dm9pZCAwOm8ud2VicnRjT3B0aW9ucyxbNCxmLm5ld1BlZXJDb25uZWN0aW9uRm9yQ2xpZW50KHZvaWQgMCE9PUUmJkUuZGlzYWJsZVRyaWNrbGVJQ0UsbnVsbD09RT92b2lkIDA6RS5ydGNDb25maWcpXTtjYXNlIDE6cmV0dXJuIHY9Ry5zZW50KCksdz12LnBjLF89di5kYyxSPW8sbyYmKChSPXIoe30sbykpLmF1dGhFbnRpdHk9bnVsbD09PShsPW51bGw9PW8/dm9pZCAwOm8ud2VicnRjT3B0aW9ucyl8fHZvaWQgMD09PWw/dm9pZCAwOmwuc2lnbmFsaW5nQXV0aEVudGl0eSxSLmF1dGhFbnRpdHl8fChSLmV4dGVybmFsQXV0aEFkZHJlc3M/Ui5hdXRoRW50aXR5PW51bGw9PT0odT1vLmV4dGVybmFsQXV0aEFkZHJlc3MpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnJlcGxhY2UoL14oLio6XFwvXFwvKS8sXCJcIik6Ui5hdXRoRW50aXR5PWUucmVwbGFjZSgvXiguKjpcXC9cXC8pLyxcIlwiKSksUi5jcmVkZW50aWFscz1udWxsPT09KGI9bnVsbD09bz92b2lkIDA6by53ZWJydGNPcHRpb25zKXx8dm9pZCAwPT09Yj92b2lkIDA6Yi5zaWduYWxpbmdDcmVkZW50aWFscyxSLmV4dGVybmFsQXV0aEFkZHJlc3M9bnVsbD09PSh5PW51bGw9PW8/dm9pZCAwOm8ud2VicnRjT3B0aW9ucyl8fHZvaWQgMD09PXk/dm9pZCAwOnkuc2lnbmFsaW5nRXh0ZXJuYWxBdXRoQWRkcmVzcyxSLmV4dGVybmFsQXV0aFRvRW50aXR5PW51bGw9PT0obT1udWxsPT1vP3ZvaWQgMDpvLndlYnJ0Y09wdGlvbnMpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnNpZ25hbGluZ0V4dGVybmFsQXV0aFRvRW50aXR5KSxbNCxoKGUsUildO2Nhc2UgMjpyZXR1cm4gTT1HLnNlbnQoKSxUPXMuZ3JwYy5jbGllbnQoZC5TaWduYWxpbmdTZXJ2aWNlLkNhbGwse2hvc3Q6ZSx0cmFuc3BvcnQ6TX0pLChudWxsPT1vP3ZvaWQgMDpvLmV4dGVybmFsQXV0aEFkZHJlc3MpfHxudWxsPT09KFM9bnVsbD09bz92b2lkIDA6by5jcmVkZW50aWFscyl8fHZvaWQgMD09PVN8fFMudHlwZSxPPVwiXCIsQT0hMSxGPWZ1bmN0aW9uKG8pe2lmKCFBKXtBPSEwO3ZhciByPW5ldyBjLkNhbGxVcGRhdGVSZXF1ZXN0O3Iuc2V0VXVpZChPKTt2YXIgbj1uZXcgZy5TdGF0dXM7bi5zZXRDb2RlKHAuQ29kZS5VTktOT1dOKSxuLnNldE1lc3NhZ2Uobyksci5zZXRFcnJvcihuKSxzLmdycGMudW5hcnkoZC5TaWduYWxpbmdTZXJ2aWNlLkNhbGxVcGRhdGUse3JlcXVlc3Q6cixtZXRhZGF0YTp7XCJycGMtaG9zdFwiOnR9LGhvc3Q6ZSx0cmFuc3BvcnQ6TSxvbkVuZDpmdW5jdGlvbihlKXt2YXIgdD1lLnN0YXR1cyxvPWUuc3RhdHVzTWVzc2FnZSxyPWUubWVzc2FnZTt0PT09cy5ncnBjLkNvZGUuT0smJnJ8fGNvbnNvbGUuZXJyb3Iobyl9fSl9fSxDPWZ1bmN0aW9uKCl7aWYoIUEpe0E9ITA7dmFyIG89bmV3IGMuQ2FsbFVwZGF0ZVJlcXVlc3Q7by5zZXRVdWlkKE8pLG8uc2V0RG9uZSghMCkscy5ncnBjLnVuYXJ5KGQuU2lnbmFsaW5nU2VydmljZS5DYWxsVXBkYXRlLHtyZXF1ZXN0Om8sbWV0YWRhdGE6e1wicnBjLWhvc3RcIjp0fSxob3N0OmUsdHJhbnNwb3J0Ok0sb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0dXMsbz1lLnN0YXR1c01lc3NhZ2Uscj1lLm1lc3NhZ2U7dD09PXMuZ3JwYy5Db2RlLk9LJiZyfHxjb25zb2xlLmVycm9yKG8pfX0pfX0sQj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtEPWUsdH0pKSxJPSExLChudWxsPT1FP3ZvaWQgMDpFLmRpc2FibGVUcmlja2xlSUNFKT9bMyw1XTpbNCx3LmNyZWF0ZU9mZmVyKCldO2Nhc2UgMzpyZXR1cm4gUD1HLnNlbnQoKSxqPSExLHcub25pY2VjYW5kaWRhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIG4oayx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciByLG47cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxCXTtjYXNlIDE6cmV0dXJuIGkuc2VudCgpLEk/WzJdOm51bGw9PT1vLmNhbmRpZGF0ZT8oaj0hMCxDKCksWzJdKToocj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYy5JQ0VDYW5kaWRhdGU7dC5zZXRDYW5kaWRhdGUoZS5jYW5kaWRhdGUpLGUuc2RwTWlkJiZ0LnNldFNkcE1pZChlLnNkcE1pZCk7ZS5zZHBNTGluZUluZGV4JiZ0LnNldFNkcG1MaW5lSW5kZXgoZS5zZHBNTGluZUluZGV4KTtlLnVzZXJuYW1lRnJhZ21lbnQmJnQuc2V0VXNlcm5hbWVGcmFnbWVudChlLnVzZXJuYW1lRnJhZ21lbnQpO3JldHVybiB0fShvLmNhbmRpZGF0ZSksKG49bmV3IGMuQ2FsbFVwZGF0ZVJlcXVlc3QpLnNldFV1aWQoTyksbi5zZXRDYW5kaWRhdGUocikscy5ncnBjLnVuYXJ5KGQuU2lnbmFsaW5nU2VydmljZS5DYWxsVXBkYXRlLHtyZXF1ZXN0Om4sbWV0YWRhdGE6e1wicnBjLWhvc3RcIjp0fSxob3N0OmUsdHJhbnNwb3J0Ok0sb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0dXMsbz1lLnN0YXR1c01lc3NhZ2Uscj1lLm1lc3NhZ2U7dD09PXMuZ3JwYy5Db2RlLk9LJiZyfHxJfHxqfHxjb25zb2xlLmVycm9yKFwiZXJyb3Igc2VuZGluZyBjYW5kaWRhdGVcIixvKX19KSxbMl0pfX0pKX0pKX0sWzQsdy5zZXRMb2NhbERlc2NyaXB0aW9uKFApXTtjYXNlIDQ6Ry5zZW50KCksRy5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gVT0hMSxULm9uTWVzc2FnZSgoZnVuY3Rpb24oZSl7cmV0dXJuIG4oayx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0LG8scixuLHM7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZS5oYXNJbml0KCk/VT8oRihcImdvdCBpbml0IHN0YWdlIG1vcmUgdGhhbiBvbmNlXCIpLFsyXSk6KHQ9ZS5nZXRJbml0KCksVT0hMCxPPWUuZ2V0VXVpZCgpLG89bmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihKU09OLnBhcnNlKGF0b2IodC5nZXRTZHAoKSkpKSx3LnNldFJlbW90ZURlc2NyaXB0aW9uKG8pLEQoITApLChudWxsPT1FP3ZvaWQgMDpFLmRpc2FibGVUcmlja2xlSUNFKT8oST0hMCxDKCksWzJdKTpbMyw3XSk6WzMsMV07Y2FzZSAxOmlmKCFlLmhhc1VwZGF0ZSgpKXJldHVyblszLDZdO2lmKCFVKXJldHVybiBGKFwiZ290IHVwZGF0ZSBzdGFnZSBiZWZvcmUgaW5pdCBzdGFnZVwiKSxbMl07aWYoZS5nZXRVdWlkKCkhPT1PKXJldHVybiBGKFwidXVpZCBtaXNtYXRjaDsgaGF2ZT1cIitlLmdldFV1aWQoKStcIiB3YW50PVwiK08pLFsyXTtyPWUuZ2V0VXBkYXRlKCksbj1mdW5jdGlvbihlKXt2YXIgdD17Y2FuZGlkYXRlOmUuZ2V0Q2FuZGlkYXRlKCl9O2UuaGFzU2RwTWlkKCkmJih0LnNkcE1pZD1lLmdldFNkcE1pZCgpKTtlLmhhc1NkcG1MaW5lSW5kZXgoKSYmKHQuc2RwTUxpbmVJbmRleD1lLmdldFNkcG1MaW5lSW5kZXgoKSk7ZS5oYXNVc2VybmFtZUZyYWdtZW50KCkmJih0LnVzZXJuYW1lRnJhZ21lbnQ9ZS5nZXRVc2VybmFtZUZyYWdtZW50KCkpO3JldHVybiB0fShyLmdldENhbmRpZGF0ZSgpKSxpLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBpLnRyeXMucHVzaChbMiw0LCw1XSksWzQsdy5hZGRJY2VDYW5kaWRhdGUobildO2Nhc2UgMzpyZXR1cm4gaS5zZW50KCksWzMsNV07Y2FzZSA0OnJldHVybiBzPWkuc2VudCgpLEYocyksWzJdO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDY6cmV0dXJuIEYoXCJ1bmtub3duIENhbGxSZXNwb25zZSBzdGFnZVwiKSxbMl07Y2FzZSA3OnJldHVyblsyXX19KSl9KSl9KSksVz1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtOPWUsTD10fSkpLFQub25FbmQoKGZ1bmN0aW9uKGUsdCxvKXtlIT09cy5ncnBjLkNvZGUuT0s/KGNvbnNvbGUuZXJyb3IodCksTCh0KSk6TigpfSkpLFQuc3RhcnQoe1wicnBjLWhvc3RcIjp0fSkseD1uZXcgYy5DYWxsUmVxdWVzdCxIPWJ0b2EoSlNPTi5zdHJpbmdpZnkody5sb2NhbERlc2NyaXB0aW9uKSkseC5zZXRTZHAoSCksRSYmRS5kaXNhYmxlVHJpY2tsZUlDRSYmeC5zZXREaXNhYmxlVHJpY2tsZShFLmRpc2FibGVUcmlja2xlSUNFKSxULnNlbmQoeCksKHo9bmV3IGEuQ2xpZW50Q2hhbm5lbCh3LF8pKS5yZWFkeS50aGVuKChmdW5jdGlvbigpe3JldHVybiBOKCl9KSksWzQsV107Y2FzZSA2OnJldHVybiBHLnNlbnQoKSxbNCx6LnJlYWR5XTtjYXNlIDc6cmV0dXJuIEcuc2VudCgpLEk9ITAsQygpLFsyLHt0cmFuc3BvcnRGYWN0b3J5OnoudHJhbnNwb3J0RmFjdG9yeSgpLHBlZXJDb25uZWN0aW9uOnd9XX19KSl9KSl9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG8ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBvKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2xpZW50Q2hhbm5lbD12b2lkIDA7dmFyIGk9bygzKSxzPW8oMTcpLGE9bygxOCkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbyl7dmFyIHI9ZS5jYWxsKHRoaXMsdCxvKXx8dGhpcztyZXR1cm4gci5zdHJlYW1JRENvdW50ZXI9MCxyLnN0cmVhbXM9e30sby5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIub25DaGFubmVsTWVzc2FnZShlKX0scn1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLnRyYW5zcG9ydEZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5uZXdTdHJlYW0oZS5uZXh0U3RyZWFtSUQoKSx0KX19LHQucHJvdG90eXBlLm9uQ2hhbm5lbE1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ7dHJ5e3Q9aS5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeShlLmRhdGEpfWNhdGNoKGUpe3JldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBkZXNlcmlhbGl6aW5nIG1lc3NhZ2VcIixlKX12YXIgbz10LmdldFN0cmVhbSgpO2lmKHZvaWQgMCE9PW8pe3ZhciByPW8uZ2V0SWQoKSxuPXRoaXMuc3RyZWFtc1tyXTt2b2lkIDAhPT1uP24uY3Mub25SZXNwb25zZSh0KTpjb25zb2xlLmVycm9yKFwibm8gc3RyZWFtIGZvciBpZDsgZGlzY2FyZGluZ1wiLFwiaWRcIixyKX1lbHNlIGNvbnNvbGUuZXJyb3IoXCJubyBzdHJlYW0gaWQ7IGRpc2NhcmRpbmdcIil9LHQucHJvdG90eXBlLm5leHRTdHJlYW1JRD1mdW5jdGlvbigpe3ZhciBlPW5ldyBpLlN0cmVhbTtyZXR1cm4gZS5zZXRJZCh0aGlzLnN0cmVhbUlEQ291bnRlcisrKSxlfSx0LnByb3RvdHlwZS5uZXdTdHJlYW09ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLHI9dGhpcy5zdHJlYW1zW2UuZ2V0SWQoKV07aWYodm9pZCAwPT09cil7aWYoT2JqZWN0LmtleXModGhpcy5zdHJlYW1zKS5sZW5ndGg+MjU2KXRocm93IG5ldyBFcnJvcihcInN0cmVhbSBsaW1pdCBoaXRcIik7cj17Y3M6bmV3IGEuQ2xpZW50U3RyZWFtKHRoaXMsZSwoZnVuY3Rpb24oZSl7cmV0dXJuIG8ucmVtb3ZlU3RyZWFtQnlJRChlKX0pLHQpfSx0aGlzLnN0cmVhbXNbZS5nZXRJZCgpXT1yfXJldHVybiByLmNzfSx0LnByb3RvdHlwZS5yZW1vdmVTdHJlYW1CeUlEPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnN0cmVhbXNbZV19LHQucHJvdG90eXBlLndyaXRlSGVhZGVycz1mdW5jdGlvbihlLHQpe3ZhciBvPW5ldyBpLlJlcXVlc3Q7by5zZXRTdHJlYW0oZSksby5zZXRIZWFkZXJzKHQpLHRoaXMud3JpdGUobyl9LHQucHJvdG90eXBlLndyaXRlTWVzc2FnZT1mdW5jdGlvbihlLHQpe3ZhciBvPW5ldyBpLlJlcXVlc3Q7by5zZXRTdHJlYW0oZSksby5zZXRNZXNzYWdlKHQpLHRoaXMud3JpdGUobyl9LHR9KHMuQmFzZUNoYW5uZWwpO3QuQ2xpZW50Q2hhbm5lbD1wfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe1xuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbnZhciByPW8oMTIpLG49bygxMyksaT1vKDE0KTtmdW5jdGlvbiBzKCl7cmV0dXJuIHAuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gYShlLHQpe2lmKHMoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGhcIik7cmV0dXJuIHAuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPXAucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IHAodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gcChlLHQsbyl7aWYoIShwLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSx0LG8pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoXCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtyZXR1cm4gdSh0aGlzLGUpfXJldHVybiBnKHRoaXMsZSx0LG8pfWZ1bmN0aW9uIGcoZSx0LG8scil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG8scil7aWYodC5ieXRlTGVuZ3RoLG88MHx8dC5ieXRlTGVuZ3RoPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKHQuYnl0ZUxlbmd0aDxvKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHNcIik7dD12b2lkIDA9PT1vJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxvKTpuZXcgVWludDhBcnJheSh0LG8scik7cC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1wLnByb3RvdHlwZTplPWMoZSx0KTtyZXR1cm4gZX0oZSx0LG8scik6XCJzdHJpbmdcIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG8pe1wic3RyaW5nXCI9PXR5cGVvZiBvJiZcIlwiIT09b3x8KG89XCJ1dGY4XCIpO2lmKCFwLmlzRW5jb2RpbmcobykpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfGYodCxvKSxuPShlPWEoZSxyKSkud3JpdGUodCxvKTtuIT09ciYmKGU9ZS5zbGljZSgwLG4pKTtyZXR1cm4gZX0oZSx0LG8pOmZ1bmN0aW9uKGUsdCl7aWYocC5pc0J1ZmZlcih0KSl7dmFyIG89MHxkKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPWEoZSxvKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsbyksZX1pZih0KXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fFwibGVuZ3RoXCJpbiB0KXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0Lmxlbmd0aHx8KHI9dC5sZW5ndGgpIT1yP2EoZSwwKTpjKGUsdCk7aWYoXCJCdWZmZXJcIj09PXQudHlwZSYmaSh0LmRhdGEpKXJldHVybiBjKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LlwiKX0oZSx0KX1mdW5jdGlvbiBsKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdShlLHQpe2lmKGwodCksZT1hKGUsdDwwPzA6MHxkKHQpKSwhcC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbz0wO288dDsrK28pZVtvXT0wO3JldHVybiBlfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbz10Lmxlbmd0aDwwPzA6MHxkKHQubGVuZ3RoKTtlPWEoZSxvKTtmb3IodmFyIHI9MDtyPG87cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIGQoZSl7aWYoZT49cygpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK3MoKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBmKGUsdCl7aWYocC5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDtcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9XCJcIitlKTt2YXIgbz1lLmxlbmd0aDtpZigwPT09bylyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gbztjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlIHZvaWQgMDpyZXR1cm4geChlKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqbztjYXNlXCJoZXhcIjpyZXR1cm4gbz4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEgoZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4geChlKS5sZW5ndGg7dD0oXCJcIit0KS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGgoZSx0LG8pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PW98fG8+dGhpcy5sZW5ndGgpJiYobz10aGlzLmxlbmd0aCksbzw9MClyZXR1cm5cIlwiO2lmKChvPj4+PTApPD0odD4+Pj0wKSlyZXR1cm5cIlwiO2ZvcihlfHwoZT1cInV0ZjhcIik7Oylzd2l0Y2goZSl7Y2FzZVwiaGV4XCI6cmV0dXJuIEYodGhpcyx0LG8pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBUKHRoaXMsdCxvKTtjYXNlXCJhc2NpaVwiOnJldHVybiBPKHRoaXMsdCxvKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gQSh0aGlzLHQsbyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIE0odGhpcyx0LG8pO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBDKHRoaXMsdCxvKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBiKGUsdCxvKXt2YXIgcj1lW3RdO2VbdF09ZVtvXSxlW29dPXJ9ZnVuY3Rpb24geShlLHQsbyxyLG4pe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbz8ocj1vLG89MCk6bz4yMTQ3NDgzNjQ3P289MjE0NzQ4MzY0NzpvPC0yMTQ3NDgzNjQ4JiYobz0tMjE0NzQ4MzY0OCksbz0rbyxpc05hTihvKSYmKG89bj8wOmUubGVuZ3RoLTEpLG88MCYmKG89ZS5sZW5ndGgrbyksbz49ZS5sZW5ndGgpe2lmKG4pcmV0dXJuLTE7bz1lLmxlbmd0aC0xfWVsc2UgaWYobzwwKXtpZighbilyZXR1cm4tMTtvPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXAuZnJvbSh0LHIpKSxwLmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6bShlLHQsbyxyLG4pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUscC5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP24/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxvKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxvKTptKGUsW3RdLG8scixuKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIG0oZSx0LG8scixuKXt2YXIgaSxzPTEsYT1lLmxlbmd0aCxwPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJihcInVjczJcIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09cnx8XCJ1dGYxNmxlXCI9PT1yfHxcInV0Zi0xNmxlXCI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixwLz0yLG8vPTJ9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYobil7dmFyIGw9LTE7Zm9yKGk9bztpPGE7aSsrKWlmKGcoZSxpKT09PWcodCwtMT09PWw/MDppLWwpKXtpZigtMT09PWwmJihsPWkpLGktbCsxPT09cClyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihpLT1pLWwpLGw9LTF9ZWxzZSBmb3IobytwPmEmJihvPWEtcCksaT1vO2k+PTA7aS0tKXtmb3IodmFyIHU9ITAsYz0wO2M8cDtjKyspaWYoZyhlLGkrYykhPT1nKHQsYykpe3U9ITE7YnJlYWt9aWYodSlyZXR1cm4gaX1yZXR1cm4tMX1mdW5jdGlvbiBTKGUsdCxvLHIpe289TnVtYmVyKG8pfHwwO3ZhciBuPWUubGVuZ3RoLW87cj8ocj1OdW1iZXIocikpPm4mJihyPW4pOnI9bjt2YXIgaT10Lmxlbmd0aDtpZihpJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtyPmkvMiYmKHI9aS8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbytzXT1hfXJldHVybiBzfWZ1bmN0aW9uIEUoZSx0LG8scil7cmV0dXJuIHooeCh0LGUubGVuZ3RoLW8pLGUsbyxyKX1mdW5jdGlvbiB2KGUsdCxvLHIpe3JldHVybiB6KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxlbmd0aDsrK28pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobykpO3JldHVybiB0fSh0KSxlLG8scil9ZnVuY3Rpb24gdyhlLHQsbyxyKXtyZXR1cm4gdihlLHQsbyxyKX1mdW5jdGlvbiBfKGUsdCxvLHIpe3JldHVybiB6KEgodCksZSxvLHIpfWZ1bmN0aW9uIFIoZSx0LG8scil7cmV0dXJuIHooZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8scixuLGk9W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylvPWUuY2hhckNvZGVBdChzKSxyPW8+Pjgsbj1vJTI1NixpLnB1c2gobiksaS5wdXNoKHIpO3JldHVybiBpfSh0LGUubGVuZ3RoLW8pLGUsbyxyKX1mdW5jdGlvbiBNKGUsdCxvKXtyZXR1cm4gMD09PXQmJm89PT1lLmxlbmd0aD9yLmZyb21CeXRlQXJyYXkoZSk6ci5mcm9tQnl0ZUFycmF5KGUuc2xpY2UodCxvKSl9ZnVuY3Rpb24gVChlLHQsbyl7bz1NYXRoLm1pbihlLmxlbmd0aCxvKTtmb3IodmFyIHI9W10sbj10O248bzspe3ZhciBpLHMsYSxwLGc9ZVtuXSxsPW51bGwsdT1nPjIzOT80Omc+MjIzPzM6Zz4xOTE/MjoxO2lmKG4rdTw9bylzd2l0Y2godSl7Y2FzZSAxOmc8MTI4JiYobD1nKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbbisxXSkpJiYocD0oMzEmZyk8PDZ8NjMmaSk+MTI3JiYobD1wKTticmVhaztjYXNlIDM6aT1lW24rMV0scz1lW24rMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImcykmJihwPSgxNSZnKTw8MTJ8KDYzJmkpPDw2fDYzJnMpPjIwNDcmJihwPDU1Mjk2fHxwPjU3MzQzKSYmKGw9cCk7YnJlYWs7Y2FzZSA0Omk9ZVtuKzFdLHM9ZVtuKzJdLGE9ZVtuKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihwPSgxNSZnKTw8MTh8KDYzJmkpPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnA8MTExNDExMiYmKGw9cCl9bnVsbD09PWw/KGw9NjU1MzMsdT0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLG4rPXV9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBvPVwiXCIscj0wO2Zvcig7cjx0OylvKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9NDA5NikpO3JldHVybiBvfShyKX10LkJ1ZmZlcj1wLHQuU2xvd0J1ZmZlcj1mdW5jdGlvbihlKXsrZSE9ZSYmKGU9MCk7cmV0dXJuIHAuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLHAuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdWJhcnJheSYmMD09PWUuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGUpe3JldHVybiExfX0oKSx0LmtNYXhMZW5ndGg9cygpLHAucG9vbFNpemU9ODE5MixwLl9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1wLnByb3RvdHlwZSxlfSxwLmZyb209ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnKG51bGwsZSx0LG8pfSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihwLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscC5fX3Byb3RvX189VWludDhBcnJheSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuc3BlY2llcyYmcFtTeW1ib2wuc3BlY2llc109PT1wJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9KSkscC5hbGxvYz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBsKHQpLHQ8PTA/YShlLHQpOnZvaWQgMCE9PW8/XCJzdHJpbmdcIj09dHlwZW9mIHI/YShlLHQpLmZpbGwobyxyKTphKGUsdCkuZmlsbChvKTphKGUsdCl9KG51bGwsZSx0LG8pfSxwLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KG51bGwsZSl9LHAuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB1KG51bGwsZSl9LHAuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSxwLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighcC5pc0J1ZmZlcihlKXx8IXAuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPWUubGVuZ3RoLHI9dC5sZW5ndGgsbj0wLGk9TWF0aC5taW4obyxyKTtuPGk7KytuKWlmKGVbbl0hPT10W25dKXtvPWVbbl0scj10W25dO2JyZWFrfXJldHVybiBvPHI/LTE6cjxvPzE6MH0scC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0scC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighaShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHAuYWxsb2MoMCk7dmFyIG87aWYodm9pZCAwPT09dClmb3IodD0wLG89MDtvPGUubGVuZ3RoOysrbyl0Kz1lW29dLmxlbmd0aDt2YXIgcj1wLmFsbG9jVW5zYWZlKHQpLG49MDtmb3Iobz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcz1lW29dO2lmKCFwLmlzQnVmZmVyKHMpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO3MuY29weShyLG4pLG4rPXMubGVuZ3RofXJldHVybiByfSxwLmJ5dGVMZW5ndGg9ZixwLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpYih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30scC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpYih0aGlzLHQsdCszKSxiKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWIodGhpcyx0LHQrNyksYih0aGlzLHQrMSx0KzYpLGIodGhpcyx0KzIsdCs1KSxiKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9UKHRoaXMsMCxlKTpoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFwLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXAuY29tcGFyZSh0aGlzLGUpfSxwLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9XCJcIixvPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLG8pLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPm8mJihlKz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrZStcIj5cIn0scC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbyxyLG4pe2lmKCFwLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW8mJihvPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09biYmKG49dGhpcy5sZW5ndGgpLHQ8MHx8bz5lLmxlbmd0aHx8cjwwfHxuPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI+PW4mJnQ+PW8pcmV0dXJuIDA7aWYocj49bilyZXR1cm4tMTtpZih0Pj1vKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgaT0obj4+Pj0wKS0ocj4+Pj0wKSxzPShvPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4oaSxzKSxnPXRoaXMuc2xpY2UocixuKSxsPWUuc2xpY2UodCxvKSx1PTA7dTxhOysrdSlpZihnW3VdIT09bFt1XSl7aT1nW3VdLHM9bFt1XTticmVha31yZXR1cm4gaTxzPy0xOnM8aT8xOjB9LHAucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbyl9LHAucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB5KHRoaXMsZSx0LG8sITApfSxwLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHkodGhpcyxlLHQsbywhMSl9LHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKHZvaWQgMD09PXQpcj1cInV0ZjhcIixvPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW8mJlwic3RyaW5nXCI9PXR5cGVvZiB0KXI9dCxvPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFwiKTt0fD0wLGlzRmluaXRlKG8pPyhvfD0wLHZvaWQgMD09PXImJihyPVwidXRmOFwiKSk6KHI9byxvPXZvaWQgMCl9dmFyIG49dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09b3x8bz5uKSYmKG89biksZS5sZW5ndGg+MCYmKG88MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO3J8fChyPVwidXRmOFwiKTtmb3IodmFyIGk9ITE7Oylzd2l0Y2gocil7Y2FzZVwiaGV4XCI6cmV0dXJuIFModGhpcyxlLHQsbyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEUodGhpcyxlLHQsbyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gdih0aGlzLGUsdCxvKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gdyh0aGlzLGUsdCxvKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLGUsdCxvKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gUih0aGlzLGUsdCxvKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX0scC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIE8oZSx0LG8pe3ZhciByPVwiXCI7bz1NYXRoLm1pbihlLmxlbmd0aCxvKTtmb3IodmFyIG49dDtuPG87KytuKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbbl0pO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0LG8pe3ZhciByPVwiXCI7bz1NYXRoLm1pbihlLmxlbmd0aCxvKTtmb3IodmFyIG49dDtuPG87KytuKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRihlLHQsbyl7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW98fG88MHx8bz5yKSYmKG89cik7Zm9yKHZhciBuPVwiXCIsaT10O2k8bzsrK2kpbis9VyhlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBDKGUsdCxvKXtmb3IodmFyIHI9ZS5zbGljZSh0LG8pLG49XCJcIixpPTA7aTxyLmxlbmd0aDtpKz0yKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUocltpXSsyNTYqcltpKzFdKTtyZXR1cm4gbn1mdW5jdGlvbiBEKGUsdCxvKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZihlK3Q+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gQihlLHQsbyxyLG4saSl7aWYoIXAuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5ufHx0PGkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobytyPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEkoZSx0LG8scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgbj0wLGk9TWF0aC5taW4oZS5sZW5ndGgtbywyKTtuPGk7KytuKWVbbytuXT0odCYyNTU8PDgqKHI/bjoxLW4pKT4+PjgqKHI/bjoxLW4pfWZ1bmN0aW9uIFAoZSx0LG8scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbihlLmxlbmd0aC1vLDQpO248aTsrK24pZVtvK25dPXQ+Pj44KihyP246My1uKSYyNTV9ZnVuY3Rpb24gaihlLHQsbyxyLG4saSl7aWYobytyPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBVKGUsdCxvLHIsaSl7cmV0dXJuIGl8fGooZSwwLG8sNCksbi53cml0ZShlLHQsbyxyLDIzLDQpLG8rNH1mdW5jdGlvbiBOKGUsdCxvLHIsaSl7cmV0dXJuIGl8fGooZSwwLG8sOCksbi53cml0ZShlLHQsbyxyLDUyLDgpLG8rOH1wLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBvLHI9dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLCh0PXZvaWQgMD09PXQ/cjp+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksdDxlJiYodD1lKSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQpKG89dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189cC5wcm90b3R5cGU7ZWxzZXt2YXIgbj10LWU7bz1uZXcgcChuLHZvaWQgMCk7Zm9yKHZhciBpPTA7aTxuOysraSlvW2ldPXRoaXNbaStlXX1yZXR1cm4gb30scC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbyl7ZXw9MCx0fD0wLG98fEQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxuPTEsaT0wOysraTx0JiYobio9MjU2KTspcis9dGhpc1tlK2ldKm47cmV0dXJuIHJ9LHAucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG8pe2V8PTAsdHw9MCxvfHxEKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLG49MTt0PjAmJihuKj0yNTYpOylyKz10aGlzW2UrLS10XSpuO3JldHVybiByfSxwLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LHAucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LHAucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHAucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0scC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxwLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG8pe2V8PTAsdHw9MCxvfHxEKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0sbj0xLGk9MDsrK2k8dCYmKG4qPTI1Nik7KXIrPXRoaXNbZStpXSpuO3JldHVybiByPj0obio9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0scC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxvKXtlfD0wLHR8PTAsb3x8RChlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LG49MSxpPXRoaXNbZSstLXJdO3I+MCYmKG4qPTI1Nik7KWkrPXRoaXNbZSstLXJdKm47cmV0dXJuIGk+PShuKj0xMjgpJiYoaS09TWF0aC5wb3coMiw4KnQpKSxpfSxwLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LHAucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8RChlLDIsdGhpcy5sZW5ndGgpO3ZhciBvPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZvPzQyOTQ5MDE3NjB8bzpvfSxwLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEQoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbz10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbz80Mjk0OTAxNzYwfG86b30scC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0scC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0scC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITAsMjMsNCl9LHAucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyxlLCExLDIzLDQpfSxwLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITAsNTIsOCl9LHAucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsOCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsZSwhMSw1Miw4KX0scC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG8scil7KGU9K2UsdHw9MCxvfD0wLHIpfHxCKHRoaXMsZSx0LG8sTWF0aC5wb3coMiw4Km8pLTEsMCk7dmFyIG49MSxpPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytpPG8mJihuKj0yNTYpOyl0aGlzW3QraV09ZS9uJjI1NTtyZXR1cm4gdCtvfSxwLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbyxyKXsoZT0rZSx0fD0wLG98PTAscil8fEIodGhpcyxlLHQsbyxNYXRoLnBvdygyLDgqbyktMSwwKTt2YXIgbj1vLTEsaT0xO2Zvcih0aGlzW3Qrbl09MjU1JmU7LS1uPj0wJiYoaSo9MjU2KTspdGhpc1t0K25dPWUvaSYyNTU7cmV0dXJuIHQrb30scC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDEsMjU1LDApLHAuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LHAucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCwyLDY1NTM1LDApLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkkodGhpcyxlLHQsITApLHQrMn0scC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDIsNjU1MzUsMCkscC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6SSh0aGlzLGUsdCwhMSksdCsyfSxwLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpQKHRoaXMsZSx0LCEwKSx0KzR9LHAucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCkscC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOlAodGhpcyxlLHQsITEpLHQrNH0scC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbyxyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBuPU1hdGgucG93KDIsOCpvLTEpO0IodGhpcyxlLHQsbyxuLTEsLW4pfXZhciBpPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8byYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QraS0xXSYmKGE9MSksdGhpc1t0K2ldPShlL3M+PjApLWEmMjU1O3JldHVybiB0K299LHAucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG8scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgbj1NYXRoLnBvdygyLDgqby0xKTtCKHRoaXMsZSx0LG8sbi0xLC1uKX12YXIgaT1vLTEscz0xLGE9MDtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QraSsxXSYmKGE9MSksdGhpc1t0K2ldPShlL3M+PjApLWEmMjU1O3JldHVybiB0K299LHAucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDEsMTI3LC0xMjgpLHAuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0scC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkkodGhpcyxlLHQsITApLHQrMn0scC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkkodGhpcyxlLHQsITEpLHQrMn0scC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6UCh0aGlzLGUsdCwhMCksdCs0fSxwLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpQKHRoaXMsZSx0LCExKSx0KzR9LHAucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIFUodGhpcyxlLHQsITAsbyl9LHAucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIFUodGhpcyxlLHQsITEsbyl9LHAucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBOKHRoaXMsZSx0LCEwLG8pfSxwLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gTih0aGlzLGUsdCwhMSxvKX0scC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbyxyKXtpZihvfHwobz0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG8mJihyPW8pLHI9PT1vKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobzwwfHxvPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1vJiYocj1lLmxlbmd0aC10K28pO3ZhciBuLGk9ci1vO2lmKHRoaXM9PT1lJiZvPHQmJnQ8cilmb3Iobj1pLTE7bj49MDstLW4pZVtuK3RdPXRoaXNbbitvXTtlbHNlIGlmKGk8MWUzfHwhcC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihuPTA7bjxpOysrbillW24rdF09dGhpc1tuK29dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG8sbytpKSx0KTtyZXR1cm4gaX0scC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbyxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KHI9dCx0PTAsbz10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIG8mJihyPW8sbz10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCk7bjwyNTYmJihlPW4pfWlmKHZvaWQgMCE9PXImJlwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYhcC5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIityKX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihvPD10KXJldHVybiB0aGlzO3ZhciBpO2lmKHQ+Pj49MCxvPXZvaWQgMD09PW8/dGhpcy5sZW5ndGg6bz4+PjAsZXx8KGU9MCksXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKGk9dDtpPG87KytpKXRoaXNbaV09ZTtlbHNle3ZhciBzPXAuaXNCdWZmZXIoZSk/ZTp4KG5ldyBwKGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3IoaT0wO2k8by10OysraSl0aGlzW2krdF09c1tpJWFdfXJldHVybiB0aGlzfTt2YXIgTD0vW14rXFwvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZTwxNj9cIjBcIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB4KGUsdCl7dmFyIG87dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLG49bnVsbCxpPVtdLHM9MDtzPHI7KytzKXtpZigobz1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZvPDU3MzQ0KXtpZighbil7aWYobz41NjMxOSl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1uPW87Y29udGludWV9aWYobzw1NjMyMCl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpLG49bztjb250aW51ZX1vPTY1NTM2KyhuLTU1Mjk2PDwxMHxvLTU2MzIwKX1lbHNlIG4mJih0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtpZihuPW51bGwsbzwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO2kucHVzaChvKX1lbHNlIGlmKG88MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7aS5wdXNoKG8+PjZ8MTkyLDYzJm98MTI4KX1lbHNlIGlmKG88NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO2kucHVzaChvPj4xMnwyMjQsbz4+NiY2M3wxMjgsNjMmb3wxMjgpfWVsc2V7aWYoIShvPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigodC09NCk8MClicmVhaztpLnB1c2gobz4+MTh8MjQwLG8+PjEyJjYzfDEyOCxvPj42JjYzfDEyOCw2MyZvfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIEgoZSl7cmV0dXJuIHIudG9CeXRlQXJyYXkoZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9KGUpLnJlcGxhY2UoTCxcIlwiKSkubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPVwiPVwiO3JldHVybiBlfShlKSl9ZnVuY3Rpb24geihlLHQsbyxyKXtmb3IodmFyIG49MDtuPHImJiEobitvPj10Lmxlbmd0aHx8bj49ZS5sZW5ndGgpOysrbil0W24rb109ZVtuXTtyZXR1cm4gbn19KS5jYWxsKHRoaXMsbyg0KSl9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt0LmJ5dGVMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKSxvPXRbMF0scj10WzFdO3JldHVybiAzKihvK3IpLzQtcn0sdC50b0J5dGVBcnJheT1mdW5jdGlvbihlKXt2YXIgdCxvLHI9ZyhlKSxzPXJbMF0sYT1yWzFdLHA9bmV3IGkoZnVuY3Rpb24oZSx0LG8pe3JldHVybiAzKih0K28pLzQtb30oMCxzLGEpKSxsPTAsdT1hPjA/cy00OnM7Zm9yKG89MDtvPHU7bys9NCl0PW5bZS5jaGFyQ29kZUF0KG8pXTw8MTh8bltlLmNoYXJDb2RlQXQobysxKV08PDEyfG5bZS5jaGFyQ29kZUF0KG8rMildPDw2fG5bZS5jaGFyQ29kZUF0KG8rMyldLHBbbCsrXT10Pj4xNiYyNTUscFtsKytdPXQ+PjgmMjU1LHBbbCsrXT0yNTUmdDsyPT09YSYmKHQ9bltlLmNoYXJDb2RlQXQobyldPDwyfG5bZS5jaGFyQ29kZUF0KG8rMSldPj40LHBbbCsrXT0yNTUmdCk7MT09PWEmJih0PW5bZS5jaGFyQ29kZUF0KG8pXTw8MTB8bltlLmNoYXJDb2RlQXQobysxKV08PDR8bltlLmNoYXJDb2RlQXQobysyKV0+PjIscFtsKytdPXQ+PjgmMjU1LHBbbCsrXT0yNTUmdCk7cmV0dXJuIHB9LHQuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbz1lLmxlbmd0aCxuPW8lMyxpPVtdLHM9MCxhPW8tbjtzPGE7cys9MTYzODMpaS5wdXNoKGwoZSxzLHMrMTYzODM+YT9hOnMrMTYzODMpKTsxPT09bj8odD1lW28tMV0saS5wdXNoKHJbdD4+Ml0rclt0PDw0JjYzXStcIj09XCIpKToyPT09biYmKHQ9KGVbby0yXTw8OCkrZVtvLTFdLGkucHVzaChyW3Q+PjEwXStyW3Q+PjQmNjNdK3JbdDw8MiY2M10rXCI9XCIpKTtyZXR1cm4gaS5qb2luKFwiXCIpfTtmb3IodmFyIHI9W10sbj1bXSxpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXkscz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixhPTAscD1zLmxlbmd0aDthPHA7KythKXJbYV09c1thXSxuW3MuY2hhckNvZGVBdChhKV09YTtmdW5jdGlvbiBnKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIG89ZS5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PW8mJihvPXQpLFtvLG89PT10PzA6NC1vJTRdfWZ1bmN0aW9uIGwoZSx0LG8pe2Zvcih2YXIgbixpLHM9W10sYT10O2E8bzthKz0zKW49KGVbYV08PDE2JjE2NzExNjgwKSsoZVthKzFdPDw4JjY1MjgwKSsoMjU1JmVbYSsyXSkscy5wdXNoKHJbKGk9bik+PjE4JjYzXStyW2k+PjEyJjYzXStyW2k+PjYmNjNdK3JbNjMmaV0pO3JldHVybiBzLmpvaW4oXCJcIil9bltcIi1cIi5jaGFyQ29kZUF0KDApXT02MixuW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbihlLHQpe1xuLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbnQucmVhZD1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBpLHMsYT04Km4tci0xLHA9KDE8PGEpLTEsZz1wPj4xLGw9LTcsdT1vP24tMTowLGM9bz8tMToxLGQ9ZVt0K3VdO2Zvcih1Kz1jLGk9ZCYoMTw8LWwpLTEsZD4+PS1sLGwrPWE7bD4wO2k9MjU2KmkrZVt0K3VdLHUrPWMsbC09OCk7Zm9yKHM9aSYoMTw8LWwpLTEsaT4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K3VdLHUrPWMsbC09OCk7aWYoMD09PWkpaT0xLWc7ZWxzZXtpZihpPT09cClyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsciksaS09Z31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsaS1yKX0sdC53cml0ZT1mdW5jdGlvbihlLHQsbyxyLG4saSl7dmFyIHMsYSxwLGc9OCppLW4tMSxsPSgxPDxnKS0xLHU9bD4+MSxjPTIzPT09bj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1yPzA6aS0xLGY9cj8xOi0xLGg9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHA9TWF0aC5wb3coMiwtcykpPDEmJihzLS0scCo9MiksKHQrPXMrdT49MT9jL3A6YypNYXRoLnBvdygyLDEtdSkpKnA+PTImJihzKysscC89Mikscyt1Pj1sPyhhPTAscz1sKTpzK3U+PTE/KGE9KHQqcC0xKSpNYXRoLnBvdygyLG4pLHMrPXUpOihhPXQqTWF0aC5wb3coMix1LTEpKk1hdGgucG93KDIsbikscz0wKSk7bj49ODtlW28rZF09MjU1JmEsZCs9ZixhLz0yNTYsbi09OCk7Zm9yKHM9czw8bnxhLGcrPW47Zz4wO2VbbytkXT0yNTUmcyxkKz1mLHMvPTI1NixnLT04KTtlW28rZC1mXXw9MTI4Kmh9fSxmdW5jdGlvbihlLHQpe3ZhciBvPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PW8uY2FsbChlKX19LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblwiLG51bGwsaSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uXCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3NlY29uZHM6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLG5hbm9zOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMiwwKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50NjQoKTtlLnNldFNlY29uZHMobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkSW50MzIoKTtlLnNldE5hbm9zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0U2Vjb25kcygpKSYmdC53cml0ZUludDY0KDEsbyksMCE9PShvPWUuZ2V0TmFub3MoKSkmJnQud3JpdGVJbnQzMigyLG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLmdldFNlY29uZHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnNldFNlY29uZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5wcm90b3R5cGUuZ2V0TmFub3M9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnNldE5hbm9zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLGUpfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5nb29nbGUucHJvdG9idWYpfSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9bygwKSxuPXIsaT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7bi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuQW55XCIsbnVsbCxpKSxwcm90by5nb29nbGUucHJvdG9idWYuQW55PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuQW55XCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3R5cGVVcmw6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLHZhbHVlOnQuZ2V0VmFsdWVfYXNCNjQoKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuQW55O3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0VHlwZVVybChvKTticmVhaztjYXNlIDI6bz10LnJlYWRCeXRlcygpO2Uuc2V0VmFsdWUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuQW55LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFR5cGVVcmwoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFZhbHVlX2FzVTgoKSkubGVuZ3RoPjAmJnQud3JpdGVCeXRlcygyLG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRUeXBlVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2V0VHlwZVVybD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRWYWx1ZV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFZhbHVlKCkpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRWYWx1ZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRWYWx1ZSgpKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixlKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmKSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFR5cGVVcmwoKS5zcGxpdChcIi9cIikucG9wKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24oZSx0LG8pe298fChvPVwidHlwZS5nb29nbGVhcGlzLmNvbS9cIiksXCIvXCIhPW8uc3Vic3RyKC0xKT90aGlzLnNldFR5cGVVcmwobytcIi9cIit0KTp0aGlzLnNldFR5cGVVcmwobyt0KSx0aGlzLnNldFZhbHVlKGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS51bnBhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUeXBlTmFtZSgpPT10P2UodGhpcy5nZXRWYWx1ZV9hc1U4KCkpOm51bGx9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYXNlQ2hhbm5lbD12b2lkIDA7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG89dGhpczt0aGlzLm1heERhdGFDaGFubmVsU2l6ZT0xNjM4NCx0aGlzLnBlZXJDb25uPWUsdGhpcy5kYXRhQ2hhbm5lbD10LHRoaXMucmVhZHk9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe28ucFJlc29sdmU9ZX0pKSx0Lm9ub3Blbj1mdW5jdGlvbigpe3JldHVybiBvLm9uQ2hhbm5lbE9wZW4oKX0sdC5vbmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIG8ub25DaGFubmVsQ2xvc2UoKX0sdC5vbmVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBvLm9uQ2hhbm5lbEVycm9yKGUpfSxlLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUubG9nKGUuaWNlQ29ubmVjdGlvblN0YXRlKX19cmV0dXJuIGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZVdpdGhSZWFzb24odm9pZCAwKX0sZS5wcm90b3R5cGUuaXNDbG9zZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9zZWR9LGUucHJvdG90eXBlLmlzQ2xvc2VkUmVhc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvc2VkUmVhc29ufSxlLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb249ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZWR8fCh0aGlzLmNsb3NlZD0hMCx0aGlzLmNsb3NlZFJlYXNvbj1lLHRoaXMucGVlckNvbm4uY2xvc2UoKSl9LGUucHJvdG90eXBlLm9uQ2hhbm5lbE9wZW49ZnVuY3Rpb24oKXt0aGlzLnBSZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLm9uQ2hhbm5lbENsb3NlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZVdpdGhSZWFzb24obmV3IEVycm9yKFwiZGF0YSBjaGFubmVsIGNsb3NlZFwiKSl9LGUucHJvdG90eXBlLm9uQ2hhbm5lbEVycm9yPWZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoXCJjaGFubmVsIGVycm9yXCIsZSksdGhpcy5jbG9zZVdpdGhSZWFzb24oZS5lcnJvcil9LGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3RoaXMuZGF0YUNoYW5uZWwuc2VuZChlLnNlcmlhbGl6ZUJpbmFyeSgpKX0sZX0oKTt0LkJhc2VDaGFubmVsPXJ9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcixuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbygpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooby5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG8pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5lbmNvZGVBU0NJST10LkNsaWVudFN0cmVhbT12b2lkIDA7dmFyIGk9bygxKSxzPW8oMyksYT1vKDE5KSxwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxvLHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMsbyxyLG4pfHx0aGlzO3JldHVybiBpLmhlYWRlcnNSZWNlaXZlZD0hMSxpLnRyYWlsZXJzUmVjZWl2ZWQ9ITEsaS5jaGFubmVsPXQsaX1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PVwiL1wiK3RoaXMub3B0cy5tZXRob2REZWZpbml0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUrXCIvXCIrdGhpcy5vcHRzLm1ldGhvZERlZmluaXRpb24ubWV0aG9kTmFtZSxvPW5ldyBzLlJlcXVlc3RIZWFkZXJzO28uc2V0TWV0aG9kKHQpLG8uc2V0TWV0YWRhdGEobChlKSk7dHJ5e3RoaXMuY2hhbm5lbC53cml0ZUhlYWRlcnModGhpcy5zdHJlYW0sbyl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcImVycm9yIHdyaXRpbmcgaGVhZGVyc1wiLGUpLHRoaXMuY2xvc2VXaXRoUmVjdkVycm9yKGUpfX0sdC5wcm90b3R5cGUuc2VuZE1lc3NhZ2U9ZnVuY3Rpb24oZSl7ZT90aGlzLndyaXRlTWVzc2FnZSghMSxlLnNsaWNlKDUpKTp0aGlzLndyaXRlTWVzc2FnZSghMSx2b2lkIDApfSx0LnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7dGhpcy5vcHRzLm1ldGhvZERlZmluaXRpb24ucmVxdWVzdFN0cmVhbSYmdGhpcy53cml0ZU1lc3NhZ2UoITAsdm9pZCAwKX0sdC5wcm90b3R5cGUud3JpdGVNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7dHJ5e2lmKCF0fHwwPT10Lmxlbmd0aClyZXR1cm4obz1uZXcgcy5QYWNrZXRNZXNzYWdlKS5zZXRFb20oITApLChyPW5ldyBzLlJlcXVlc3RNZXNzYWdlKS5zZXRIYXNNZXNzYWdlKCEhdCksci5zZXRQYWNrZXRNZXNzYWdlKG8pLHIuc2V0RW9zKGUpLHZvaWQgdGhpcy5jaGFubmVsLndyaXRlTWVzc2FnZSh0aGlzLnN0cmVhbSxyKTtmb3IoOzAhPT10Lmxlbmd0aDspe3ZhciBvLHIsbj1NYXRoLm1pbih0Lmxlbmd0aCwxNjM3Myk7KG89bmV3IHMuUGFja2V0TWVzc2FnZSkuc2V0RGF0YSh0LnNsaWNlKDAsbikpLDA9PT0odD10LnNsaWNlKG4pKS5sZW5ndGgmJm8uc2V0RW9tKCEwKSwocj1uZXcgcy5SZXF1ZXN0TWVzc2FnZSkuc2V0SGFzTWVzc2FnZSghIXQpLHIuc2V0UGFja2V0TWVzc2FnZShvKSxyLnNldEVvcyhlKSx0aGlzLmNoYW5uZWwud3JpdGVNZXNzYWdlKHRoaXMuc3RyZWFtLHIpfX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZXJyb3Igd3JpdGluZyBtZXNzYWdlXCIsZSksdGhpcy5jbG9zZVdpdGhSZWN2RXJyb3IoZSl9fSx0LnByb3RvdHlwZS5vblJlc3BvbnNlPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmdldFR5cGVDYXNlKCkpe2Nhc2Ugcy5SZXNwb25zZS5UeXBlQ2FzZS5IRUFERVJTOmlmKHRoaXMuaGVhZGVyc1JlY2VpdmVkKXJldHVybiB2b2lkIHRoaXMuY2xvc2VXaXRoUmVjdkVycm9yKG5ldyBFcnJvcihcImhlYWRlcnMgYWxyZWFkeSByZWNlaXZlZFwiKSk7aWYodGhpcy50cmFpbGVyc1JlY2VpdmVkKXJldHVybiB2b2lkIHRoaXMuY2xvc2VXaXRoUmVjdkVycm9yKG5ldyBFcnJvcihcImhlYWRlcnMgcmVjZWl2ZWQgYWZ0ZXIgdHJhaWxlcnNcIikpO3RoaXMucHJvY2Vzc0hlYWRlcnMoZS5nZXRIZWFkZXJzKCkpO2JyZWFrO2Nhc2Ugcy5SZXNwb25zZS5UeXBlQ2FzZS5NRVNTQUdFOmlmKCF0aGlzLmhlYWRlcnNSZWNlaXZlZClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcihuZXcgRXJyb3IoXCJoZWFkZXJzIG5vdCB5ZXQgcmVjZWl2ZWRcIikpO2lmKHRoaXMudHJhaWxlcnNSZWNlaXZlZClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcihuZXcgRXJyb3IoXCJoZWFkZXJzIHJlY2VpdmVkIGFmdGVyIHRyYWlsZXJzXCIpKTt0aGlzLnByb2Nlc3NNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTticmVhaztjYXNlIHMuUmVzcG9uc2UuVHlwZUNhc2UuVFJBSUxFUlM6dGhpcy5wcm9jZXNzVHJhaWxlcnMoZS5nZXRUcmFpbGVycygpKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoXCJ1bmtub3duIHJlc3BvbnNlIHR5cGVcIixlLmdldFR5cGVDYXNlKCkpfX0sdC5wcm90b3R5cGUucHJvY2Vzc0hlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5oZWFkZXJzUmVjZWl2ZWQ9ITAsdGhpcy5vcHRzLm9uSGVhZGVycyh1KGUuZ2V0TWV0YWRhdGEoKSksMjAwKX0sdC5wcm90b3R5cGUucHJvY2Vzc01lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIG89ZS5wcm90b3R5cGUucHJvY2Vzc1BhY2tldE1lc3NhZ2UuY2FsbCh0aGlzLHQuZ2V0UGFja2V0TWVzc2FnZSgpKTtpZihvKXt2YXIgcj1uZXcgQXJyYXlCdWZmZXIoby5sZW5ndGgrNSk7bmV3IERhdGFWaWV3KHIsMSw0KS5zZXRVaW50MzIoMCxvLmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkociw1KS5zZXQobyksdGhpcy5vcHRzLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkocikpfX0sdC5wcm90b3R5cGUucHJvY2Vzc1RyYWlsZXJzPWZ1bmN0aW9uKGUpe3RoaXMudHJhaWxlcnNSZWNlaXZlZD0hMDt2YXIgdCxvLHI9dShlLmdldE1ldGFkYXRhKCkpLG49ZS5nZXRTdGF0dXMoKTtuPyh0PW4uZ2V0Q29kZSgpLG89bi5nZXRNZXNzYWdlKCksci5zZXQoXCJncnBjLXN0YXR1c1wiLFwiXCIrbi5nZXRDb2RlKCkpLHZvaWQgMCE9PW8mJnIuc2V0KFwiZ3JwYy1tZXNzYWdlXCIsbi5nZXRNZXNzYWdlKCkpKToodD0wLHIuc2V0KFwiZ3JwYy1zdGF0dXNcIixcIjBcIiksbz1cIlwiKTt2YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1cIlwiO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7dCs9ZStcIjogXCIrby5qb2luKFwiLCBcIikrXCJcXHJcXG5cIn0pKSxnKHQpfShyKSxzPW5ldyBBcnJheUJ1ZmZlcihpLmxlbmd0aCs1KTtuZXcgRGF0YVZpZXcocywwLDEpLnNldFVpbnQ4KDAsMTI4KSxuZXcgRGF0YVZpZXcocywxLDQpLnNldFVpbnQzMigwLGkubGVuZ3RoLCExKSxuZXcgVWludDhBcnJheShzLDUpLnNldChpKSx0aGlzLm9wdHMub25DaHVuayhuZXcgVWludDhBcnJheShzKSksMCE9PXQ/dGhpcy5jbG9zZVdpdGhSZWN2RXJyb3IobmV3IEVycm9yKFwiQ29kZT1cIit0K1wiIE1lc3NhZ2U9XCIrbykpOnRoaXMuY2xvc2VXaXRoUmVjdkVycm9yKCl9LHR9KGEuQmFzZVN0cmVhbSk7ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQsbyxyPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSxuPTA7biE9PWUubGVuZ3RoOysrbil7dmFyIGk9ZS5jaGFyQ29kZUF0KG4pO2lmKCEoOT09PSh0PW89aSl8fDEwPT09dHx8MTM9PT10fHxvPj0zMiYmbzw9MTI2KSl0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBjb250YWlucyBpbnZhbGlkIEFTQ0lJXCIpO3Jbbl09aX1yZXR1cm4gcn10LkNsaWVudFN0cmVhbT1wLHQuZW5jb2RlQVNDSUk9Zzt2YXIgbD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1uZXcgcy5NZXRhZGF0YSxvPXQuZ2V0TWRNYXAoKTtpZihlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IHMuU3RyaW5ncztyLnNldFZhbHVlc0xpc3QodCksby5zZXQoZSxyKX0pKSwwIT09dC5nZXRNZE1hcCgpLmdldExlbmd0aCgpKXJldHVybiB0fX0sdT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgaS5ncnBjLk1ldGFkYXRhO3JldHVybiBlJiZlLmdldE1kTWFwKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSxvKXtyZXR1cm4gdC5hcHBlbmQobyxlLmdldFZhbHVlc0xpc3QoKSl9KSksdH19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbyl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5wYWNrZXRCdWY9W10sdGhpcy5wYWNrZXRCdWZTaXplPTAsdGhpcy5zdHJlYW09ZSx0aGlzLm9uRG9uZT10LHRoaXMub3B0cz1vfXJldHVybiBlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLm9wdHMuZGVidWcmJmNvbnNvbGUuZGVidWcoXCJjYW5jZWxcIil9LGUucHJvdG90eXBlLmNsb3NlV2l0aFJlY3ZFcnJvcj1mdW5jdGlvbihlKXt0aGlzLmNsb3NlZHx8KHRoaXMuY2xvc2VkPSEwLHRoaXMuZXJyPWUsdGhpcy5jYW5jZWwoKSx0aGlzLm9uRG9uZSh0aGlzLnN0cmVhbS5nZXRJZCgpKSx0aGlzLm9wdHMub25FbmQodGhpcy5lcnIpKX0sZS5wcm90b3R5cGUucHJvY2Vzc1BhY2tldE1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXRhX2FzVTgoKTtpZih0Lmxlbmd0aCt0aGlzLnBhY2tldEJ1ZlNpemU+MTw8MjUpcmV0dXJuIHRoaXMucGFja2V0QnVmLmxlbmd0aD0wLHRoaXMucGFja2V0QnVmU2l6ZT0wLHZvaWQgY29uc29sZS5lcnJvcihcIm1lc3NhZ2Ugc2l6ZSBsYXJnZXIgdGhhbiBtYXggMzM1NTQ0MzI7IGRpc2NhcmRpbmdcIik7aWYodGhpcy5wYWNrZXRCdWYucHVzaCh0KSx0aGlzLnBhY2tldEJ1ZlNpemUrPXQubGVuZ3RoLGUuZ2V0RW9tKCkpe2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSh0aGlzLnBhY2tldEJ1ZlNpemUpLHI9MCxuPTA7bjx0aGlzLnBhY2tldEJ1Zi5sZW5ndGg7bisrKXt2YXIgaT10aGlzLnBhY2tldEJ1ZltuXTtvLnNldChpLHIpLHIrPWkubGVuZ3RofXJldHVybiB0aGlzLnBhY2tldEJ1Zi5sZW5ndGg9MCx0aGlzLnBhY2tldEJ1ZlNpemU9MCxvfX0sZX0oKTt0LkJhc2VTdHJlYW09cn0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1mdW5jdGlvbigpe3JldHVybiB0aGlzP3RoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09bj9uOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfS5jYWxsKG51bGwpO3IuZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnJwYy5Db2RlXCIsbnVsbCxuKSxwcm90by5nb29nbGUucnBjLkNvZGU9e09LOjAsQ0FOQ0VMTEVEOjEsVU5LTk9XTjoyLElOVkFMSURfQVJHVU1FTlQ6MyxERUFETElORV9FWENFRURFRDo0LE5PVF9GT1VORDo1LEFMUkVBRFlfRVhJU1RTOjYsUEVSTUlTU0lPTl9ERU5JRUQ6NyxVTkFVVEhFTlRJQ0FURUQ6MTYsUkVTT1VSQ0VfRVhIQVVTVEVEOjgsRkFJTEVEX1BSRUNPTkRJVElPTjo5LEFCT1JURUQ6MTAsT1VUX09GX1JBTkdFOjExLFVOSU1QTEVNRU5URUQ6MTIsSU5URVJOQUw6MTMsVU5BVkFJTEFCTEU6MTQsREFUQV9MT1NTOjE1fSxyLm9iamVjdC5leHRlbmQodCxwcm90by5nb29nbGUucnBjKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWk/aTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKTtuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm5cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLmFwaS5IdHRwXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGVcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5QYXR0ZXJuQ2FzZVwiLG51bGwsaSkscHJvdG8uZ29vZ2xlLmFwaS5IdHRwPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5hcGkuSHR0cC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLmFwaS5IdHRwLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLmFwaS5IdHRwXCIpLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5yZXBlYXRlZEZpZWxkc18scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZVwiKSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuXCIpLHByb3RvLmdvb2dsZS5hcGkuSHR0cC5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHAudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3J1bGVzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UnVsZXNMaXN0KCkscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS50b09iamVjdCxlKSxmdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDIsITEpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5hcGkuSHR0cC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwO3JldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUnVsZXMobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpO2Uuc2V0RnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0UnVsZXNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24oKSkmJnQud3JpdGVCb29sKDIsbyl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuZ2V0UnVsZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsMSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuc2V0UnVsZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmFkZFJ1bGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsdCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuY2xlYXJSdWxlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSdWxlc0xpc3QoW10pfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmdldEZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuc2V0RnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucmVwZWF0ZWRGaWVsZHNfPVsxMV0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc189W1syLDMsNCw1LDYsOF1dLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuUGF0dGVybkNhc2U9e1BBVFRFUk5fTk9UX1NFVDowLEdFVDoyLFBVVDozLFBPU1Q6NCxERUxFVEU6NSxQQVRDSDo2LENVU1RPTTo4fSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQYXR0ZXJuQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzZWxlY3RvcjpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksZ2V0OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxwdXQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLFwiXCIpLHBvc3Q6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw0LFwiXCIpLHBiX2RlbGV0ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDUsXCJcIikscGF0Y2g6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw2LFwiXCIpLGN1c3RvbToobz10LmdldEN1c3RvbSgpKSYmcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi50b09iamVjdChlLG8pLGJvZHk6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw3LFwiXCIpLHJlc3BvbnNlQm9keTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEyLFwiXCIpLGFkZGl0aW9uYWxCaW5kaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoKSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU7cmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTZWxlY3RvcihvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldEdldChvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKTtlLnNldFB1dChvKTticmVhaztjYXNlIDQ6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBvc3Qobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXREZWxldGUobyk7YnJlYWs7Y2FzZSA2Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQYXRjaChvKTticmVhaztjYXNlIDg6bz1uZXcgcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q3VzdG9tKG8pO2JyZWFrO2Nhc2UgNzpvPXQucmVhZFN0cmluZygpO2Uuc2V0Qm9keShvKTticmVhaztjYXNlIDEyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRSZXNwb25zZUJvZHkobyk7YnJlYWs7Y2FzZSAxMTpvPW5ldyBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRBZGRpdGlvbmFsQmluZGluZ3Mobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFNlbGVjdG9yKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlU3RyaW5nKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlU3RyaW5nKDMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNCkpJiZ0LndyaXRlU3RyaW5nKDQsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNSkpJiZ0LndyaXRlU3RyaW5nKDUsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNikpJiZ0LndyaXRlU3RyaW5nKDYsbyksbnVsbCE9KG89ZS5nZXRDdXN0b20oKSkmJnQud3JpdGVNZXNzYWdlKDgsbyxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEJvZHkoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoNyxvKSwobz1lLmdldFJlc3BvbnNlQm9keSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxMixvKSwobz1lLmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMTEsbyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0U2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0R2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0R2V0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDIscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyR2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMixwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNHZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFB1dD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldFB1dD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywzLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhclB1dD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDMscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzUHV0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQb3N0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCxcIlwiKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0UG9zdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw0LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhclBvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw0LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc1Bvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldERlbGV0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldERlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw1LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckRlbGV0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDUscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzRGVsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQYXRjaD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldFBhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDYscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyUGF0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw2LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc1BhdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRDdXN0b209ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4sOCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEN1c3RvbT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsOCxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJDdXN0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDdXN0b20odm9pZCAwKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzQ3VzdG9tPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDgpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRCb2R5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNyxcIlwiKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0Qm9keT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UmVzcG9uc2VCb2R5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTIsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldFJlc3BvbnNlQm9keT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMTIsZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSwxMSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDExLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5hZGRBZGRpdGlvbmFsQmluZGluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMSxlLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsdCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyQWRkaXRpb25hbEJpbmRpbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtraW5kOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxwYXRoOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuO3JldHVybiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0S2luZChvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBhdGgobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldEtpbmQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFBhdGgoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuZ2V0S2luZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnNldEtpbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5nb29nbGUuYXBpKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO24uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFwiLG51bGwsaSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0XCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZVwiKSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2VcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnM9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnNcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsNTAwLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5PXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnM9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsNTAwLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5PXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnM9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0XCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb249ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb25cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17ZmlsZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEZpbGVMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQ7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEZpbGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0RmlsZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5nZXRGaWxlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5zZXRGaWxlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5hZGRGaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLmNsZWFyRmlsZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaWxlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXz1bMywxMCwxMSw0LDUsNiw3XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLHBiX3BhY2thZ2U6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLGRlcGVuZGVuY3lMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMykpP3ZvaWQgMDpvLHB1YmxpY0RlcGVuZGVuY3lMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMTApKT92b2lkIDA6byx3ZWFrRGVwZW5kZW5jeUxpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxMSkpP3ZvaWQgMDpvLG1lc3NhZ2VUeXBlTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0TWVzc2FnZVR5cGVMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxlbnVtVHlwZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEVudW1UeXBlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLHNlcnZpY2VMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRTZXJ2aWNlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLGV4dGVuc2lvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEV4dGVuc2lvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy50b09iamVjdChlLG8pLHNvdXJjZUNvZGVJbmZvOihvPXQuZ2V0U291cmNlQ29kZUluZm8oKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby50b09iamVjdChlLG8pLHN5bnRheDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxMikpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBhY2thZ2Uobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkU3RyaW5nKCk7ZS5hZGREZXBlbmRlbmN5KG8pO2JyZWFrO2Nhc2UgMTA6Zm9yKHZhciByPXQuaXNEZWxpbWl0ZWQoKT90LnJlYWRQYWNrZWRJbnQzMigpOlt0LnJlYWRJbnQzMigpXSxuPTA7bjxyLmxlbmd0aDtuKyspZS5hZGRQdWJsaWNEZXBlbmRlbmN5KHJbbl0pO2JyZWFrO2Nhc2UgMTE6Zm9yKHI9dC5pc0RlbGltaXRlZCgpP3QucmVhZFBhY2tlZEludDMyKCk6W3QucmVhZEludDMyKCldLG49MDtuPHIubGVuZ3RoO24rKyllLmFkZFdlYWtEZXBlbmRlbmN5KHJbbl0pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRNZXNzYWdlVHlwZShvKTticmVhaztjYXNlIDU6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFbnVtVHlwZShvKTticmVhaztjYXNlIDY6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRTZXJ2aWNlKG8pO2JyZWFrO2Nhc2UgNzpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXh0ZW5zaW9uJChvKTticmVhaztjYXNlIDg6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7Y2FzZSA5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTb3VyY2VDb2RlSW5mbyhvKTticmVhaztjYXNlIDEyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTeW50YXgobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVTdHJpbmcoMixvKSwobz1lLmdldERlcGVuZGVuY3lMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRTdHJpbmcoMyxvKSwobz1lLmdldFB1YmxpY0RlcGVuZGVuY3lMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRJbnQzMigxMCxvKSwobz1lLmdldFdlYWtEZXBlbmRlbmN5TGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkSW50MzIoMTEsbyksKG89ZS5nZXRNZXNzYWdlVHlwZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RW51bVR5cGVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDUsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRTZXJ2aWNlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg2LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXh0ZW5zaW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg3LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldE9wdGlvbnMoKSkmJnQud3JpdGVNZXNzYWdlKDgsbyxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0U291cmNlQ29kZUluZm8oKSkmJnQud3JpdGVNZXNzYWdlKDksbyxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEyKSkmJnQud3JpdGVTdHJpbmcoMTIsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UGFja2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUGFja2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldERlcGVuZGVuY3lMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDMsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREZXBlbmRlbmN5TGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRQdWJsaWNEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFB1YmxpY0RlcGVuZGVuY3lMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCxlfHxbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRQdWJsaWNEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxMCxlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJQdWJsaWNEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFB1YmxpY0RlcGVuZGVuY3lMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFdlYWtEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFdlYWtEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTEsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkV2Vha0RlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDExLGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhcldlYWtEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFdlYWtEZXBlbmRlbmN5TGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRNZXNzYWdlVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byw0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE1lc3NhZ2VUeXBlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZE1lc3NhZ2VUeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VUeXBlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE1lc3NhZ2VUeXBlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFbnVtVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFbnVtVHlwZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDUsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFbnVtVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDUsZSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRW51bVR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RW51bVR5cGVMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFNlcnZpY2VMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U2VydmljZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRTZXJ2aWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNixlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJTZXJ2aWNlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFNlcnZpY2VMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuc2lvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLDcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEV4dGVuc2lvbiQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw3LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXh0ZW5zaW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9wdGlvbnModm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRTb3VyY2VDb2RlSW5mbz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLDkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U291cmNlQ29kZUluZm89ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJTb3VyY2VDb2RlSW5mbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFNvdXJjZUNvZGVJbmZvKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNTb3VyY2VDb2RlSW5mbz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFN5bnRheD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEyLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U3ludGF4PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU3ludGF4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNTeW50YXg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXz1bMiw2LDMsNCw1LDgsOSwxMF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxmaWVsZExpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEZpZWxkTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxleHRlbnNpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFeHRlbnNpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLG5lc3RlZFR5cGVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXROZXN0ZWRUeXBlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksZW51bVR5cGVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFbnVtVHlwZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxleHRlbnNpb25SYW5nZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEV4dGVuc2lvblJhbmdlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UudG9PYmplY3QsZSksb25lb2ZEZWNsTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0T25lb2ZEZWNsTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxvcHRpb25zOihvPXQuZ2V0T3B0aW9ucygpKSYmcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnRvT2JqZWN0KGUsbykscmVzZXJ2ZWRSYW5nZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFJlc2VydmVkUmFuZ2VMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnRvT2JqZWN0LGUpLHJlc2VydmVkTmFtZUxpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxMCkpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRmllbGQobyk7YnJlYWs7Y2FzZSA2Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFeHRlbnNpb24kKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGROZXN0ZWRUeXBlKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEVudW1UeXBlKG8pO2JyZWFrO2Nhc2UgNTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFeHRlbnNpb25SYW5nZShvKTticmVhaztjYXNlIDg6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZE9uZW9mRGVjbChvKTticmVhaztjYXNlIDc6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7Y2FzZSA5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRSZXNlcnZlZFJhbmdlKG8pO2JyZWFrO2Nhc2UgMTA6bz10LnJlYWRTdHJpbmcoKTtlLmFkZFJlc2VydmVkTmFtZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0RmllbGRMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXh0ZW5zaW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg2LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldE5lc3RlZFR5cGVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsbyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEVudW1UeXBlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXh0ZW5zaW9uUmFuZ2VMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDUsbyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldE9uZW9mRGVjbExpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSg3LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFJlc2VydmVkUmFuZ2VMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDksbyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0UmVzZXJ2ZWROYW1lTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkU3RyaW5nKDEwLG8pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3N0YXJ0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxlbmQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZTtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRJbnQzMigpO2Uuc2V0U3RhcnQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkSW50MzIoKTtlLnNldEVuZChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9ucyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUludDMyKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlSW50MzIoMixvKSxudWxsIT0obz1lLmdldE9wdGlvbnMoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuZ2V0U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXRTdGFydD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuY2xlYXJTdGFydD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5nZXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmNsZWFyRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuaGFzRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3N0YXJ0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxlbmQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRJbnQzMigpO2Uuc2V0U3RhcnQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkSW50MzIoKTtlLnNldEVuZChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUludDMyKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlSW50MzIoMixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5nZXRTdGFydD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJTdGFydD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuaGFzU3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc0VuZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEZpZWxkTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEZpZWxkTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRmllbGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckZpZWxkTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZpZWxkTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuc2lvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFeHRlbnNpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFeHRlbnNpb24kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNixlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXh0ZW5zaW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5lc3RlZFR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5lc3RlZFR5cGVMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGROZXN0ZWRUeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmVzdGVkVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXROZXN0ZWRUeXBlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEVudW1UeXBlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byw0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RW51bVR5cGVMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFbnVtVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFbnVtVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnVtVHlwZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbnNpb25SYW5nZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSw1KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uUmFuZ2VMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFeHRlbnNpb25SYW5nZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDUsZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckV4dGVuc2lvblJhbmdlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEV4dGVuc2lvblJhbmdlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9uZW9mRGVjbExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLDgpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPbmVvZkRlY2xMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw4LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRPbmVvZkRlY2w9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw4LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9uZW9mRGVjbExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPbmVvZkRlY2xMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLDcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRSZXNlcnZlZFJhbmdlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UsOSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFJlc2VydmVkUmFuZ2VMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZFJhbmdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJSZXNlcnZlZFJhbmdlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc2VydmVkUmFuZ2VMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTAsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZE5hbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDEwLGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc2VydmVkTmFtZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixlKSxlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgOTk5OnZhciBvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOTk5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLHIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLG51bWJlcjpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzKSk/dm9pZCAwOm8sbGFiZWw6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNCkpP3ZvaWQgMDpvLHR5cGU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNSkpP3ZvaWQgMDpvLHR5cGVOYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDYpKT92b2lkIDA6byxleHRlbmRlZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwyKSk/dm9pZCAwOm8sZGVmYXVsdFZhbHVlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDcpKT92b2lkIDA6byxvbmVvZkluZGV4Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDkpKT92b2lkIDA6byxqc29uTmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxMCkpP3ZvaWQgMDpvLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRvT2JqZWN0KGUsbykscHJvdG8zT3B0aW9uYWw6bnVsbD09KG89ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZCh0LDE3KSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRJbnQzMigpO2Uuc2V0TnVtYmVyKG8pO2JyZWFrO2Nhc2UgNDpvPXQucmVhZEVudW0oKTtlLnNldExhYmVsKG8pO2JyZWFrO2Nhc2UgNTpvPXQucmVhZEVudW0oKTtlLnNldFR5cGUobyk7YnJlYWs7Y2FzZSA2Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRUeXBlTmFtZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldEV4dGVuZGVlKG8pO2JyZWFrO2Nhc2UgNzpvPXQucmVhZFN0cmluZygpO2Uuc2V0RGVmYXVsdFZhbHVlKG8pO2JyZWFrO2Nhc2UgOTpvPXQucmVhZEludDMyKCk7ZS5zZXRPbmVvZkluZGV4KG8pO2JyZWFrO2Nhc2UgMTA6bz10LnJlYWRTdHJpbmcoKTtlLnNldEpzb25OYW1lKG8pO2JyZWFrO2Nhc2UgODpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2Nhc2UgMTc6bz10LnJlYWRCb29sKCk7ZS5zZXRQcm90bzNPcHRpb25hbChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZUludDMyKDMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNCkpJiZ0LndyaXRlRW51bSg0LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZUVudW0oNSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw2KSkmJnQud3JpdGVTdHJpbmcoNixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVTdHJpbmcoMixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw3KSkmJnQud3JpdGVTdHJpbmcoNyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw5KSkmJnQud3JpdGVJbnQzMig5LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEwKSkmJnQud3JpdGVTdHJpbmcoMTAsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSg4LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTcpKSYmdC53cml0ZUJvb2woMTcsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlPXtUWVBFX0RPVUJMRToxLFRZUEVfRkxPQVQ6MixUWVBFX0lOVDY0OjMsVFlQRV9VSU5UNjQ6NCxUWVBFX0lOVDMyOjUsVFlQRV9GSVhFRDY0OjYsVFlQRV9GSVhFRDMyOjcsVFlQRV9CT09MOjgsVFlQRV9TVFJJTkc6OSxUWVBFX0dST1VQOjEwLFRZUEVfTUVTU0FHRToxMSxUWVBFX0JZVEVTOjEyLFRZUEVfVUlOVDMyOjEzLFRZUEVfRU5VTToxNCxUWVBFX1NGSVhFRDMyOjE1LFRZUEVfU0ZJWEVENjQ6MTYsVFlQRV9TSU5UMzI6MTcsVFlQRV9TSU5UNjQ6MTh9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbD17TEFCRUxfT1BUSU9OQUw6MSxMQUJFTF9SRVFVSVJFRDoyLExBQkVMX1JFUEVBVEVEOjN9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc051bWJlcj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TGFiZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJMYWJlbD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFR5cGVOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyVHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1R5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuZGVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFeHRlbmRlZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckV4dGVuZGVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNFeHRlbmRlZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXREZWZhdWx0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw3LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldERlZmF1bHRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckRlZmF1bHRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw3LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzRGVmYXVsdFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9uZW9mSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw5LDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9uZW9mSW5kZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPbmVvZkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDksdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPbmVvZkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEpzb25OYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTAsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0SnNvbk5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEwLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFySnNvbk5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTAsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNKc29uTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyw4KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw4KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRQcm90bzNPcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxNywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UHJvdG8zT3B0aW9uYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE3LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUHJvdG8zT3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTcsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNQcm90bzNPcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxNyl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfPVsyLDQsNV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byx2YWx1ZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFZhbHVlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy50b09iamVjdChlLG8pLHJlc2VydmVkUmFuZ2VMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRSZXNlcnZlZFJhbmdlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnRvT2JqZWN0LGUpLHJlc2VydmVkTmFtZUxpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCw1KSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRWYWx1ZShvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUmVzZXJ2ZWRSYW5nZShvKTticmVhaztjYXNlIDU6bz10LnJlYWRTdHJpbmcoKTtlLmFkZFJlc2VydmVkTmFtZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0VmFsdWVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldE9wdGlvbnMoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFJlc2VydmVkTmFtZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZFN0cmluZyg1LG8pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3N0YXJ0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxlbmQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZTtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEludDMyKCk7ZS5zZXRTdGFydChvKTticmVhaztjYXNlIDI6bz10LnJlYWRJbnQzMigpO2Uuc2V0RW5kKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlSW50MzIoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVJbnQzMigyLG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhclN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmNsZWFyRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc0VuZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRWYWx1ZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJWYWx1ZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRSZXNlcnZlZFJhbmdlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFJlc2VydmVkUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkUmFuZ2VMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmVzZXJ2ZWRSYW5nZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSxlfHxbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZE5hbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDUsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUmVzZXJ2ZWROYW1lTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc2VydmVkTmFtZUxpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLG51bWJlcjpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwyKSk/dm9pZCAwOm8sb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkSW50MzIoKTtlLnNldE51bWJlcihvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnM7dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlSW50MzIoMixvKSxudWxsIT0obz1lLmdldE9wdGlvbnMoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9wdGlvbnModm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfPVsyXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLG1ldGhvZExpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldE1ldGhvZExpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZE1ldGhvZChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldE1ldGhvZExpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMixvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0T3B0aW9ucygpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE1ldGhvZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE1ldGhvZExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRNZXRob2Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTWV0aG9kTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE1ldGhvZExpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLGlucHV0VHlwZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwyKSk/dm9pZCAwOm8sb3V0cHV0VHlwZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzKSk/dm9pZCAwOm8sb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnRvT2JqZWN0KGUsbyksY2xpZW50U3RyZWFtaW5nOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDUsITEpLHNlcnZlclN0cmVhbWluZzpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCw2LCExKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldElucHV0VHlwZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKTtlLnNldE91dHB1dFR5cGUobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9ucyhvKTticmVhaztjYXNlIDU6bz10LnJlYWRCb29sKCk7ZS5zZXRDbGllbnRTdHJlYW1pbmcobyk7YnJlYWs7Y2FzZSA2Om89dC5yZWFkQm9vbCgpO2Uuc2V0U2VydmVyU3RyZWFtaW5nKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlU3RyaW5nKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlU3RyaW5nKDMsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZUJvb2woNSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw2KSkmJnQud3JpdGVCb29sKDYsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRJbnB1dFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRJbnB1dFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFySW5wdXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzSW5wdXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPdXRwdXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMyxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3V0cHV0VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPdXRwdXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3V0cHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldENsaWVudFN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw1LCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0Q2xpZW50U3RyZWFtaW5nPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckNsaWVudFN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw1LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc0NsaWVudFN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U2VydmVyU3RyZWFtaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRTZXJ2ZXJTdHJlYW1pbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU2VydmVyU3RyZWFtaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU2VydmVyU3RyZWFtaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17amF2YVBhY2thZ2U6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLGphdmFPdXRlckNsYXNzbmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw4KSk/dm9pZCAwOm8samF2YU11bHRpcGxlRmlsZXM6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMTAsITEpLGphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g6bnVsbD09KG89ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZCh0LDIwKSk/dm9pZCAwOm8samF2YVN0cmluZ0NoZWNrVXRmODpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyNywhMSksb3B0aW1pemVGb3I6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw5LDEpLGdvUGFja2FnZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxMSkpP3ZvaWQgMDpvLGNjR2VuZXJpY1NlcnZpY2VzOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDE2LCExKSxqYXZhR2VuZXJpY1NlcnZpY2VzOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDE3LCExKSxweUdlbmVyaWNTZXJ2aWNlczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwxOCwhMSkscGhwR2VuZXJpY1NlcnZpY2VzOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDQyLCExKSxkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDIzLCExKSxjY0VuYWJsZUFyZW5hczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzMSwhMCksb2JqY0NsYXNzUHJlZml4Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDM2KSk/dm9pZCAwOm8sY3NoYXJwTmFtZXNwYWNlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDM3KSk/dm9pZCAwOm8sc3dpZnRQcmVmaXg6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMzkpKT92b2lkIDA6byxwaHBDbGFzc1ByZWZpeDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0MCkpP3ZvaWQgMDpvLHBocE5hbWVzcGFjZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0MSkpP3ZvaWQgMDpvLHBocE1ldGFkYXRhTmFtZXNwYWNlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDQ0KSk/dm9pZCAwOm8scnVieVBhY2thZ2U6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNDUpKT92b2lkIDA6byx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG4scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sZSksZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEphdmFQYWNrYWdlKG8pO2JyZWFrO2Nhc2UgODpvPXQucmVhZFN0cmluZygpO2Uuc2V0SmF2YU91dGVyQ2xhc3NuYW1lKG8pO2JyZWFrO2Nhc2UgMTA6bz10LnJlYWRCb29sKCk7ZS5zZXRKYXZhTXVsdGlwbGVGaWxlcyhvKTticmVhaztjYXNlIDIwOm89dC5yZWFkQm9vbCgpO2Uuc2V0SmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaChvKTticmVhaztjYXNlIDI3Om89dC5yZWFkQm9vbCgpO2Uuc2V0SmF2YVN0cmluZ0NoZWNrVXRmOChvKTticmVhaztjYXNlIDk6bz10LnJlYWRFbnVtKCk7ZS5zZXRPcHRpbWl6ZUZvcihvKTticmVhaztjYXNlIDExOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRHb1BhY2thZ2Uobyk7YnJlYWs7Y2FzZSAxNjpvPXQucmVhZEJvb2woKTtlLnNldENjR2VuZXJpY1NlcnZpY2VzKG8pO2JyZWFrO2Nhc2UgMTc6bz10LnJlYWRCb29sKCk7ZS5zZXRKYXZhR2VuZXJpY1NlcnZpY2VzKG8pO2JyZWFrO2Nhc2UgMTg6bz10LnJlYWRCb29sKCk7ZS5zZXRQeUdlbmVyaWNTZXJ2aWNlcyhvKTticmVhaztjYXNlIDQyOm89dC5yZWFkQm9vbCgpO2Uuc2V0UGhwR2VuZXJpY1NlcnZpY2VzKG8pO2JyZWFrO2Nhc2UgMjM6bz10LnJlYWRCb29sKCk7ZS5zZXREZXByZWNhdGVkKG8pO2JyZWFrO2Nhc2UgMzE6bz10LnJlYWRCb29sKCk7ZS5zZXRDY0VuYWJsZUFyZW5hcyhvKTticmVhaztjYXNlIDM2Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRPYmpjQ2xhc3NQcmVmaXgobyk7YnJlYWs7Y2FzZSAzNzpvPXQucmVhZFN0cmluZygpO2Uuc2V0Q3NoYXJwTmFtZXNwYWNlKG8pO2JyZWFrO2Nhc2UgMzk6bz10LnJlYWRTdHJpbmcoKTtlLnNldFN3aWZ0UHJlZml4KG8pO2JyZWFrO2Nhc2UgNDA6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBocENsYXNzUHJlZml4KG8pO2JyZWFrO2Nhc2UgNDE6bz10LnJlYWRTdHJpbmcoKTtlLnNldFBocE5hbWVzcGFjZShvKTticmVhaztjYXNlIDQ0Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQaHBNZXRhZGF0YU5hbWVzcGFjZShvKTticmVhaztjYXNlIDQ1Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRSdWJ5UGFja2FnZShvKTticmVhaztjYXNlIDk5OTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw4KSkmJnQud3JpdGVTdHJpbmcoOCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxMCkpJiZ0LndyaXRlQm9vbCgxMCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyMCkpJiZ0LndyaXRlQm9vbCgyMCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyNykpJiZ0LndyaXRlQm9vbCgyNyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw5KSkmJnQud3JpdGVFbnVtKDksbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTEpKSYmdC53cml0ZVN0cmluZygxMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxNikpJiZ0LndyaXRlQm9vbCgxNixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxNykpJiZ0LndyaXRlQm9vbCgxNyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxOCkpJiZ0LndyaXRlQm9vbCgxOCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0MikpJiZ0LndyaXRlQm9vbCg0MixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyMykpJiZ0LndyaXRlQm9vbCgyMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzMSkpJiZ0LndyaXRlQm9vbCgzMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzNikpJiZ0LndyaXRlU3RyaW5nKDM2LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDM3KSkmJnQud3JpdGVTdHJpbmcoMzcsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzkpKSYmdC53cml0ZVN0cmluZygzOSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0MCkpJiZ0LndyaXRlU3RyaW5nKDQwLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQxKSkmJnQud3JpdGVTdHJpbmcoNDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNDQpKSYmdC53cml0ZVN0cmluZyg0NCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0NSkpJiZ0LndyaXRlU3RyaW5nKDQ1LG8pLChvPWUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOTk5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLHIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU9e1NQRUVEOjEsQ09ERV9TSVpFOjIsTElURV9SVU5USU1FOjN9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YVBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFQYWNrYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YVBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFPdXRlckNsYXNzbmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDgsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YU91dGVyQ2xhc3NuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw4LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YU91dGVyQ2xhc3NuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDgsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhT3V0ZXJDbGFzc25hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YU11bHRpcGxlRmlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTAsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFNdWx0aXBsZUZpbGVzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFNdWx0aXBsZUZpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEwLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YU11bHRpcGxlRmlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjAsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIwLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyMCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMjApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFTdHJpbmdDaGVja1V0Zjg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjcsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFTdHJpbmdDaGVja1V0Zjg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDI3LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YVN0cmluZ0NoZWNrVXRmOD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyNyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFTdHJpbmdDaGVja1V0Zjg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMjcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldE9wdGltaXplRm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOSwxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRPcHRpbWl6ZUZvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsOSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhck9wdGltaXplRm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDksdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNPcHRpbWl6ZUZvcj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRHb1BhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRHb1BhY2thZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDExLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyR29QYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDExLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzR29QYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRDY0dlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxNiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0Q2NHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyQ2NHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNDY0dlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxNil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxNywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhR2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE3LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxNyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UHlHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTgsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFB5R2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclB5R2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE4LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUHlHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTgpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFBocEdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw0MiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwR2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0MixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclBocEdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0Mix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocEdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0Mil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywyMywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMjMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q2NFbmFibGVBcmVuYXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMzEsITApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldENjRW5hYmxlQXJlbmFzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckNjRW5hYmxlQXJlbmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzQ2NFbmFibGVBcmVuYXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldE9iamNDbGFzc1ByZWZpeD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDM2LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldE9iamNDbGFzc1ByZWZpeD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzYsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJPYmpjQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNPYmpjQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldENzaGFycE5hbWVzcGFjZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDM3LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldENzaGFycE5hbWVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDc2hhcnBOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzcsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNDc2hhcnBOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFN3aWZ0UHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMzksXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0U3dpZnRQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyU3dpZnRQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzksdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNTd2lmdFByZWZpeD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzOSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0MCxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBDbGFzc1ByZWZpeD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDAsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBDbGFzc1ByZWZpeD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0MCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocENsYXNzUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQaHBOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0MSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBOYW1lc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGhwTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUGhwTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQaHBNZXRhZGF0YU5hbWVzcGFjZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQ0LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFBocE1ldGFkYXRhTmFtZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0NCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclBocE1ldGFkYXRhTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQ0LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUGhwTWV0YWRhdGFOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFJ1YnlQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNDUsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UnVieVBhY2thZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQ1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUnVieVBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDUsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNSdWJ5UGFja2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0NSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bWVzc2FnZVNldFdpcmVGb3JtYXQ6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMSwhMSksbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcjpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKSxkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMsITEpLG1hcEVudHJ5Om51bGw9PShvPXIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQodCw3KSk/dm9pZCAwOm8sdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxuLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkQm9vbCgpO2Uuc2V0TWVzc2FnZVNldFdpcmVGb3JtYXQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpO2Uuc2V0Tm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcihvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCk7ZS5zZXREZXByZWNhdGVkKG8pO2JyZWFrO2Nhc2UgNzpvPXQucmVhZEJvb2woKTtlLnNldE1hcEVudHJ5KG8pO2JyZWFrO2Nhc2UgOTk5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbihvKTticmVhaztkZWZhdWx0OnIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbil9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUJvb2woMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVCb29sKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlQm9vbCgzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDcpKSYmdC53cml0ZUJvb2woNyxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldE1lc3NhZ2VTZXRXaXJlRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldE1lc3NhZ2VTZXRXaXJlRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyTWVzc2FnZVNldFdpcmVGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc01lc3NhZ2VTZXRXaXJlRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0Tm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc05vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywzLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRNYXBFbnRyeT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw3LCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRNYXBFbnRyeT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck1hcEVudHJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDcsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5oYXNNYXBFbnRyeT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17Y3R5cGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLHBhY2tlZDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKHQsMikpP3ZvaWQgMDpvLGpzdHlwZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDYsMCksbGF6eTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCw1LCExKSxkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMsITEpLHdlYWs6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMTAsITEpLHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LGUpfTtyZXR1cm4gci5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKHQsbixwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEVudW0oKTtlLnNldEN0eXBlKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKTtlLnNldFBhY2tlZChvKTticmVhaztjYXNlIDY6bz10LnJlYWRFbnVtKCk7ZS5zZXRKc3R5cGUobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkQm9vbCgpO2Uuc2V0TGF6eShvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCk7ZS5zZXREZXByZWNhdGVkKG8pO2JyZWFrO2Nhc2UgMTA6bz10LnJlYWRCb29sKCk7ZS5zZXRXZWFrKG8pO2JyZWFrO2Nhc2UgOTk5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbihvKTticmVhaztkZWZhdWx0OnIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbil9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUVudW0oMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVCb29sKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNikpJiZ0LndyaXRlRW51bSg2LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZUJvb2woNSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVCb29sKDMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTApKSYmdC53cml0ZUJvb2woMTAsbyksKG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlPXtTVFJJTkc6MCxDT1JEOjEsU1RSSU5HX1BJRUNFOjJ9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlPXtKU19OT1JNQUw6MCxKU19TVFJJTkc6MSxKU19OVU1CRVI6Mn0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRDdHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDdHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc0N0eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRQYWNrZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldFBhY2tlZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQYWNrZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNQYWNrZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEpzdHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldEpzdHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKc3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNKc3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldExhenk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldExhenk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyTGF6eT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw1LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc0xhenk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldFdlYWs9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTAsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRXZWFrPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJXZWFrPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEwLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc1dlYWs9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3VuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LGUpfTtyZXR1cm4gci5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKHQsbyxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSA5OTk6dmFyIG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbihvKTticmVhaztkZWZhdWx0OnIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbil9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5yZXBlYXRlZEZpZWxkc189Wzk5OV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXthbGxvd0FsaWFzOm51bGw9PShvPXIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQodCwyKSk/dm9pZCAwOm8sZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKSx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG4scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sZSksZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMjp2YXIgbz10LnJlYWRCb29sKCk7ZS5zZXRBbGxvd0FsaWFzKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEJvb2woKTtlLnNldERlcHJlY2F0ZWQobyk7YnJlYWs7Y2FzZSA5OTk6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlQm9vbCgyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZUJvb2woMyxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldEFsbG93QWxpYXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0QWxsb3dBbGlhcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5jbGVhckFsbG93QWxpYXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmhhc0FsbG93QWxpYXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywzLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDEsITEpLHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LGUpfTtyZXR1cm4gci5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKHQsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sZSksZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEJvb2woKTtlLnNldERlcHJlY2F0ZWQobyk7YnJlYWs7Y2FzZSA5OTk6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlQm9vbCgxLG8pLChvPWUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOTk5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLHIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLDk5OSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMzLCExKSx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sZSksZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMzM6dmFyIG89dC5yZWFkQm9vbCgpO2Uuc2V0RGVwcmVjYXRlZChvKTticmVhaztjYXNlIDk5OTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzMykpJiZ0LndyaXRlQm9vbCgzMyxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMzMsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzMpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLDk5OSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2RlcHJlY2F0ZWQ6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMzMsITEpLGlkZW1wb3RlbmN5TGV2ZWw6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzNCwwKSx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9ucyxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnM7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMzM6dmFyIG89dC5yZWFkQm9vbCgpO2Uuc2V0RGVwcmVjYXRlZChvKTticmVhaztjYXNlIDM0Om89dC5yZWFkRW51bSgpO2Uuc2V0SWRlbXBvdGVuY3lMZXZlbChvKTticmVhaztjYXNlIDk5OTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzMykpJiZ0LndyaXRlQm9vbCgzMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzNCkpJiZ0LndyaXRlRW51bSgzNCxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbD17SURFTVBPVEVOQ1lfVU5LTk9XTjowLE5PX1NJREVfRUZGRUNUUzoxLElERU1QT1RFTlQ6Mn0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMzMsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzMpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0SWRlbXBvdGVuY3lMZXZlbD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDM0LDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0SWRlbXBvdGVuY3lMZXZlbD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5jbGVhcklkZW1wb3RlbmN5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzQsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmhhc0lkZW1wb3RlbmN5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5yZXBlYXRlZEZpZWxkc189WzJdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bmFtZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldE5hbWVMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3QsZSksaWRlbnRpZmllclZhbHVlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDMpKT92b2lkIDA6byxwb3NpdGl2ZUludFZhbHVlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDQpKT92b2lkIDA6byxuZWdhdGl2ZUludFZhbHVlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDUpKT92b2lkIDA6byxkb3VibGVWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQodCw2KSk/dm9pZCAwOm8sc3RyaW5nVmFsdWU6dC5nZXRTdHJpbmdWYWx1ZV9hc0I2NCgpLGFnZ3JlZ2F0ZVZhbHVlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDgpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMjp2YXIgbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQ7dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGROYW1lKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZFN0cmluZygpO2Uuc2V0SWRlbnRpZmllclZhbHVlKG8pO2JyZWFrO2Nhc2UgNDpvPXQucmVhZFVpbnQ2NCgpO2Uuc2V0UG9zaXRpdmVJbnRWYWx1ZShvKTticmVhaztjYXNlIDU6bz10LnJlYWRJbnQ2NCgpO2Uuc2V0TmVnYXRpdmVJbnRWYWx1ZShvKTticmVhaztjYXNlIDY6bz10LnJlYWREb3VibGUoKTtlLnNldERvdWJsZVZhbHVlKG8pO2JyZWFrO2Nhc2UgNzpvPXQucmVhZEJ5dGVzKCk7ZS5zZXRTdHJpbmdWYWx1ZShvKTticmVhaztjYXNlIDg6bz10LnJlYWRTdHJpbmcoKTtlLnNldEFnZ3JlZ2F0ZVZhbHVlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXROYW1lTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZVN0cmluZygzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZVVpbnQ2NCg0LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZUludDY0KDUsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNikpJiZ0LndyaXRlRG91YmxlKDYsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNykpJiZ0LndyaXRlQnl0ZXMoNyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw4KSkmJnQud3JpdGVTdHJpbmcoOCxvKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lUGFydDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8saXNFeHRlbnNpb246bnVsbD09KG89ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZCh0LDIpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQ7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWVQYXJ0KG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKTtlLnNldElzRXh0ZW5zaW9uKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlQm9vbCgyLG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuZ2V0TmFtZVBhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuc2V0TmFtZVBhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5jbGVhck5hbWVQYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmhhc05hbWVQYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuZ2V0SXNFeHRlbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5zZXRJc0V4dGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmNsZWFySXNFeHRlbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuaGFzSXNFeHRlbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXROYW1lTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCwyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldE5hbWVMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuYWRkTmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyTmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXROYW1lTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0SWRlbnRpZmllclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJJZGVudGlmaWVyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzSWRlbnRpZmllclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0UG9zaXRpdmVJbnRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXRQb3NpdGl2ZUludFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJQb3NpdGl2ZUludFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc1Bvc2l0aXZlSW50VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXROZWdhdGl2ZUludFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldE5lZ2F0aXZlSW50VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhck5lZ2F0aXZlSW50VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzTmVnYXRpdmVJbnRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldERvdWJsZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXREb3VibGVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyRG91YmxlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzRG91YmxlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFN0cmluZ1ZhbHVlKCkpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0U3RyaW5nVmFsdWUoKSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXRTdHJpbmdWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRBZ2dyZWdhdGVWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDgsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXRBZ2dyZWdhdGVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyQWdncmVnYXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsOCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzQWdncmVnYXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2xvY2F0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0TG9jYXRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZExvY2F0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldExvY2F0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnJlcGVhdGVkRmllbGRzXz1bMSwyLDZdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17cGF0aExpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxKSk/dm9pZCAwOm8sc3Bhbkxpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwyKSk/dm9pZCAwOm8sbGVhZGluZ0NvbW1lbnRzOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDMpKT92b2lkIDA6byx0cmFpbGluZ0NvbW1lbnRzOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDQpKT92b2lkIDA6byxsZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCw2KSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb247cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOmZvcih2YXIgbz10LmlzRGVsaW1pdGVkKCk/dC5yZWFkUGFja2VkSW50MzIoKTpbdC5yZWFkSW50MzIoKV0scj0wO3I8by5sZW5ndGg7cisrKWUuYWRkUGF0aChvW3JdKTticmVhaztjYXNlIDI6Zm9yKG89dC5pc0RlbGltaXRlZCgpP3QucmVhZFBhY2tlZEludDMyKCk6W3QucmVhZEludDMyKCldLHI9MDtyPG8ubGVuZ3RoO3IrKyllLmFkZFNwYW4ob1tyXSk7YnJlYWs7Y2FzZSAzOnZhciBuPXQucmVhZFN0cmluZygpO2Uuc2V0TGVhZGluZ0NvbW1lbnRzKG4pO2JyZWFrO2Nhc2UgNDpuPXQucmVhZFN0cmluZygpO2Uuc2V0VHJhaWxpbmdDb21tZW50cyhuKTticmVhaztjYXNlIDY6bj10LnJlYWRTdHJpbmcoKTtlLmFkZExlYWRpbmdEZXRhY2hlZENvbW1lbnRzKG4pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRQYXRoTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVBhY2tlZEludDMyKDEsbyksKG89ZS5nZXRTcGFuTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVBhY2tlZEludDMyKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlU3RyaW5nKDMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNCkpJiZ0LndyaXRlU3RyaW5nKDQsbyksKG89ZS5nZXRMZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZFN0cmluZyg2LG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldFBhdGhMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0UGF0aExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmFkZFBhdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDEsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclBhdGhMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UGF0aExpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldFNwYW5MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0U3Bhbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmFkZFNwYW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDIsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclNwYW5MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3Bhbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldExlYWRpbmdDb21tZW50cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0TGVhZGluZ0NvbW1lbnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmNsZWFyTGVhZGluZ0NvbW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5oYXNMZWFkaW5nQ29tbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0VHJhaWxpbmdDb21tZW50cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0VHJhaWxpbmdDb21tZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclRyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmhhc1RyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsNil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw2LGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5hZGRMZWFkaW5nRGV0YWNoZWRDb21tZW50cz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsNixlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmNsZWFyTGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5nZXRMb2NhdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnNldExvY2F0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5hZGRMb2NhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuY2xlYXJMb2NhdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRMb2NhdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXthbm5vdGF0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0QW5ub3RhdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkQW5ub3RhdGlvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRBbm5vdGF0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17cGF0aExpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxKSk/dm9pZCAwOm8sc291cmNlRmlsZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwyKSk/dm9pZCAwOm8sYmVnaW46bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMykpP3ZvaWQgMDpvLGVuZDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0KSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6Zm9yKHZhciBvPXQuaXNEZWxpbWl0ZWQoKT90LnJlYWRQYWNrZWRJbnQzMigpOlt0LnJlYWRJbnQzMigpXSxyPTA7cjxvLmxlbmd0aDtyKyspZS5hZGRQYXRoKG9bcl0pO2JyZWFrO2Nhc2UgMjp2YXIgbj10LnJlYWRTdHJpbmcoKTtlLnNldFNvdXJjZUZpbGUobik7YnJlYWs7Y2FzZSAzOm49dC5yZWFkSW50MzIoKTtlLnNldEJlZ2luKG4pO2JyZWFrO2Nhc2UgNDpuPXQucmVhZEludDMyKCk7ZS5zZXRFbmQobik7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFBhdGhMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUGFja2VkSW50MzIoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVTdHJpbmcoMixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVJbnQzMigzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZUludDMyKDQsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5nZXRQYXRoTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2V0UGF0aExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuYWRkUGF0aD1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMSxlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuY2xlYXJQYXRoTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhdGhMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldFNvdXJjZUZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2V0U291cmNlRmlsZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyU291cmNlRmlsZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5oYXNTb3VyY2VGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuZ2V0QmVnaW49ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2V0QmVnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhckJlZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmhhc0JlZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmhhc0VuZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5nZXRBbm5vdGF0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbiwxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5zZXRBbm5vdGF0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5hZGRBbm5vdGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBbm5vdGF0aW9uTGlzdChbXSl9LG4ub2JqZWN0LmV4dGVuZCh0LHByb3RvLmdvb2dsZS5wcm90b2J1Zil9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDUpLG49bygxKS5ncnBjLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnNlcnZpY2VOYW1lPVwicHJvdG8ucnBjLnYxLkF1dGhTZXJ2aWNlXCIsZX0oKTtmdW5jdGlvbiBzKGUsdCl7dGhpcy5zZXJ2aWNlSG9zdD1lLHRoaXMub3B0aW9ucz10fHx7fX1pLkF1dGhlbnRpY2F0ZT17bWV0aG9kTmFtZTpcIkF1dGhlbnRpY2F0ZVwiLHNlcnZpY2U6aSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOnIuQXV0aGVudGljYXRlUmVxdWVzdCxyZXNwb25zZVR5cGU6ci5BdXRoZW50aWNhdGVSZXNwb25zZX0sdC5BdXRoU2VydmljZT1pLHMucHJvdG90eXBlLmF1dGhlbnRpY2F0ZT1mdW5jdGlvbihlLHQsbyl7Mj09PWFyZ3VtZW50cy5sZW5ndGgmJihvPWFyZ3VtZW50c1sxXSk7dmFyIHI9bi51bmFyeShpLkF1dGhlbnRpY2F0ZSx7cmVxdWVzdDplLGhvc3Q6dGhpcy5zZXJ2aWNlSG9zdCxtZXRhZGF0YTp0LHRyYW5zcG9ydDp0aGlzLm9wdGlvbnMudHJhbnNwb3J0LGRlYnVnOnRoaXMub3B0aW9ucy5kZWJ1ZyxvbkVuZDpmdW5jdGlvbihlKXtpZihvKWlmKGUuc3RhdHVzIT09bi5Db2RlLk9LKXt2YXIgdD1uZXcgRXJyb3IoZS5zdGF0dXNNZXNzYWdlKTt0LmNvZGU9ZS5zdGF0dXMsdC5tZXRhZGF0YT1lLnRyYWlsZXJzLG8odCxudWxsKX1lbHNlIG8obnVsbCxlLm1lc3NhZ2UpfX0pO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtvPW51bGwsci5jbG9zZSgpfX19LHQuQXV0aFNlcnZpY2VDbGllbnQ9czt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuc2VydmljZU5hbWU9XCJwcm90by5ycGMudjEuRXh0ZXJuYWxBdXRoU2VydmljZVwiLGV9KCk7ZnVuY3Rpb24gcChlLHQpe3RoaXMuc2VydmljZUhvc3Q9ZSx0aGlzLm9wdGlvbnM9dHx8e319YS5BdXRoZW50aWNhdGVUbz17bWV0aG9kTmFtZTpcIkF1dGhlbnRpY2F0ZVRvXCIsc2VydmljZTphLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6ci5BdXRoZW50aWNhdGVUb1JlcXVlc3QscmVzcG9uc2VUeXBlOnIuQXV0aGVudGljYXRlVG9SZXNwb25zZX0sdC5FeHRlcm5hbEF1dGhTZXJ2aWNlPWEscC5wcm90b3R5cGUuYXV0aGVudGljYXRlVG89ZnVuY3Rpb24oZSx0LG8pezI9PT1hcmd1bWVudHMubGVuZ3RoJiYobz1hcmd1bWVudHNbMV0pO3ZhciByPW4udW5hcnkoYS5BdXRoZW50aWNhdGVUbyx7cmVxdWVzdDplLGhvc3Q6dGhpcy5zZXJ2aWNlSG9zdCxtZXRhZGF0YTp0LHRyYW5zcG9ydDp0aGlzLm9wdGlvbnMudHJhbnNwb3J0LGRlYnVnOnRoaXMub3B0aW9ucy5kZWJ1ZyxvbkVuZDpmdW5jdGlvbihlKXtpZihvKWlmKGUuc3RhdHVzIT09bi5Db2RlLk9LKXt2YXIgdD1uZXcgRXJyb3IoZS5zdGF0dXNNZXNzYWdlKTt0LmNvZGU9ZS5zdGF0dXMsdC5tZXRhZGF0YT1lLnRyYWlsZXJzLG8odCxudWxsKX1lbHNlIG8obnVsbCxlLm1lc3NhZ2UpfX0pO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtvPW51bGwsci5jbG9zZSgpfX19LHQuRXh0ZXJuYWxBdXRoU2VydmljZUNsaWVudD1wfSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9byg3KSxuPW8oMSkuZ3JwYyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5zZXJ2aWNlTmFtZT1cInByb3RvLnJwYy53ZWJydGMudjEuU2lnbmFsaW5nU2VydmljZVwiLGV9KCk7ZnVuY3Rpb24gcyhlLHQpe3RoaXMuc2VydmljZUhvc3Q9ZSx0aGlzLm9wdGlvbnM9dHx8e319aS5DYWxsPXttZXRob2ROYW1lOlwiQ2FsbFwiLHNlcnZpY2U6aSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiEwLHJlcXVlc3RUeXBlOnIuQ2FsbFJlcXVlc3QscmVzcG9uc2VUeXBlOnIuQ2FsbFJlc3BvbnNlfSxpLkNhbGxVcGRhdGU9e21ldGhvZE5hbWU6XCJDYWxsVXBkYXRlXCIsc2VydmljZTppLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6ci5DYWxsVXBkYXRlUmVxdWVzdCxyZXNwb25zZVR5cGU6ci5DYWxsVXBkYXRlUmVzcG9uc2V9LGkuQW5zd2VyPXttZXRob2ROYW1lOlwiQW5zd2VyXCIsc2VydmljZTppLHJlcXVlc3RTdHJlYW06ITAscmVzcG9uc2VTdHJlYW06ITAscmVxdWVzdFR5cGU6ci5BbnN3ZXJSZXNwb25zZSxyZXNwb25zZVR5cGU6ci5BbnN3ZXJSZXF1ZXN0fSxpLk9wdGlvbmFsV2ViUlRDQ29uZmlnPXttZXRob2ROYW1lOlwiT3B0aW9uYWxXZWJSVENDb25maWdcIixzZXJ2aWNlOmkscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTpyLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdCxyZXNwb25zZVR5cGU6ci5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlfSx0LlNpZ25hbGluZ1NlcnZpY2U9aSxzLnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG89e2RhdGE6W10sZW5kOltdLHN0YXR1czpbXX0scj1uLmludm9rZShpLkNhbGwse3JlcXVlc3Q6ZSxob3N0OnRoaXMuc2VydmljZUhvc3QsbWV0YWRhdGE6dCx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydCxkZWJ1Zzp0aGlzLm9wdGlvbnMuZGVidWcsb25NZXNzYWdlOmZ1bmN0aW9uKGUpe28uZGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0KGUpfSkpfSxvbkVuZDpmdW5jdGlvbihlLHQscil7by5zdGF0dXMuZm9yRWFjaCgoZnVuY3Rpb24obyl7byh7Y29kZTplLGRldGFpbHM6dCxtZXRhZGF0YTpyfSl9KSksby5lbmQuZm9yRWFjaCgoZnVuY3Rpb24obyl7byh7Y29kZTplLGRldGFpbHM6dCxtZXRhZGF0YTpyfSl9KSksbz1udWxsfX0pO3JldHVybntvbjpmdW5jdGlvbihlLHQpe3JldHVybiBvW2VdLnB1c2godCksdGhpc30sY2FuY2VsOmZ1bmN0aW9uKCl7bz1udWxsLHIuY2xvc2UoKX19fSxzLnByb3RvdHlwZS5jYWxsVXBkYXRlPWZ1bmN0aW9uKGUsdCxvKXsyPT09YXJndW1lbnRzLmxlbmd0aCYmKG89YXJndW1lbnRzWzFdKTt2YXIgcj1uLnVuYXJ5KGkuQ2FsbFVwZGF0ZSx7cmVxdWVzdDplLGhvc3Q6dGhpcy5zZXJ2aWNlSG9zdCxtZXRhZGF0YTp0LHRyYW5zcG9ydDp0aGlzLm9wdGlvbnMudHJhbnNwb3J0LGRlYnVnOnRoaXMub3B0aW9ucy5kZWJ1ZyxvbkVuZDpmdW5jdGlvbihlKXtpZihvKWlmKGUuc3RhdHVzIT09bi5Db2RlLk9LKXt2YXIgdD1uZXcgRXJyb3IoZS5zdGF0dXNNZXNzYWdlKTt0LmNvZGU9ZS5zdGF0dXMsdC5tZXRhZGF0YT1lLnRyYWlsZXJzLG8odCxudWxsKX1lbHNlIG8obnVsbCxlLm1lc3NhZ2UpfX0pO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtvPW51bGwsci5jbG9zZSgpfX19LHMucHJvdG90eXBlLmFuc3dlcj1mdW5jdGlvbihlKXt2YXIgdD17ZGF0YTpbXSxlbmQ6W10sc3RhdHVzOltdfSxvPW4uY2xpZW50KGkuQW5zd2VyLHtob3N0OnRoaXMuc2VydmljZUhvc3QsbWV0YWRhdGE6ZSx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydH0pO3JldHVybiBvLm9uRW5kKChmdW5jdGlvbihlLG8scil7dC5zdGF0dXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCh7Y29kZTplLGRldGFpbHM6byxtZXRhZGF0YTpyfSl9KSksdC5lbmQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCh7Y29kZTplLGRldGFpbHM6byxtZXRhZGF0YTpyfSl9KSksdD1udWxsfSkpLG8ub25NZXNzYWdlKChmdW5jdGlvbihlKXt0LmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChlKX0pKX0pKSxvLnN0YXJ0KGUpLHtvbjpmdW5jdGlvbihlLG8pe3JldHVybiB0W2VdLnB1c2gobyksdGhpc30sd3JpdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG8uc2VuZChlKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtvLmZpbmlzaFNlbmQoKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dD1udWxsLG8uY2xvc2UoKX19fSxzLnByb3RvdHlwZS5vcHRpb25hbFdlYlJUQ0NvbmZpZz1mdW5jdGlvbihlLHQsbyl7Mj09PWFyZ3VtZW50cy5sZW5ndGgmJihvPWFyZ3VtZW50c1sxXSk7dmFyIHI9bi51bmFyeShpLk9wdGlvbmFsV2ViUlRDQ29uZmlnLHtyZXF1ZXN0OmUsaG9zdDp0aGlzLnNlcnZpY2VIb3N0LG1ldGFkYXRhOnQsdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnQsZGVidWc6dGhpcy5vcHRpb25zLmRlYnVnLG9uRW5kOmZ1bmN0aW9uKGUpe2lmKG8paWYoZS5zdGF0dXMhPT1uLkNvZGUuT0spe3ZhciB0PW5ldyBFcnJvcihlLnN0YXR1c01lc3NhZ2UpO3QuY29kZT1lLnN0YXR1cyx0Lm1ldGFkYXRhPWUudHJhaWxlcnMsbyh0LG51bGwpfWVsc2UgbyhudWxsLGUubWVzc2FnZSl9fSk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe289bnVsbCxyLmNsb3NlKCl9fX0sdC5TaWduYWxpbmdTZXJ2aWNlQ2xpZW50PXN9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIG5ldyhvfHwobz1Qcm9taXNlKSkoKGZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gcyhlKXt0cnl7cChyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGEoZSl7dHJ5e3Aoci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcChlKXt2YXIgdDtlLmRvbmU/bihlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBvP3Q6bmV3IG8oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4ocyxhKX1wKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LG49dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbyxyLG4saSxzPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm5bMF0pdGhyb3cgblsxXTtyZXR1cm4gblsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBpPXtuZXh0OmEoMCksdGhyb3c6YSgxKSxyZXR1cm46YSgyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIGEoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihpKXtpZihvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7czspdHJ5e2lmKG89MSxyJiYobj0yJmlbMF0/ci5yZXR1cm46aVswXT9yLnRocm93fHwoKG49ci5yZXR1cm4pJiZuLmNhbGwociksMCk6ci5uZXh0KSYmIShuPW4uY2FsbChyLGlbMV0pKS5kb25lKXJldHVybiBuO3N3aXRjaChyPTAsbiYmKGk9WzImaVswXSxuLnZhbHVlXSksaVswXSl7Y2FzZSAwOmNhc2UgMTpuPWk7YnJlYWs7Y2FzZSA0OnJldHVybiBzLmxhYmVsKysse3ZhbHVlOmlbMV0sZG9uZTohMX07Y2FzZSA1OnMubGFiZWwrKyxyPWlbMV0saT1bMF07Y29udGludWU7Y2FzZSA3Omk9cy5vcHMucG9wKCkscy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShuPXMudHJ5cywobj1uLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdKXx8NiE9PWlbMF0mJjIhPT1pWzBdKSl7cz0wO2NvbnRpbnVlfWlmKDM9PT1pWzBdJiYoIW58fGlbMV0+blswXSYmaVsxXTxuWzNdKSl7cy5sYWJlbD1pWzFdO2JyZWFrfWlmKDY9PT1pWzBdJiZzLmxhYmVsPG5bMV0pe3MubGFiZWw9blsxXSxuPWk7YnJlYWt9aWYobiYmcy5sYWJlbDxuWzJdKXtzLmxhYmVsPW5bMl0scy5vcHMucHVzaChpKTticmVha31uWzJdJiZzLm9wcy5wb3AoKSxzLnRyeXMucG9wKCk7Y29udGludWV9aT10LmNhbGwoZSxzKX1jYXRjaChlKXtpPVs2LGVdLHI9MH1maW5hbGx5e289bj0wfWlmKDUmaVswXSl0aHJvdyBpWzFdO3JldHVybnt2YWx1ZTppWzBdP2lbMV06dm9pZCAwLGRvbmU6ITB9fShbaSxhXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5uZXdQZWVyQ29ubmVjdGlvbkZvckNsaWVudD12b2lkIDAsdC5uZXdQZWVyQ29ubmVjdGlvbkZvckNsaWVudD1mdW5jdGlvbihlLHQpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbyxpLHMsYSxwLGcsbCx1PXRoaXM7cmV0dXJuIG4odGhpcywoZnVuY3Rpb24oYyl7c3dpdGNoKGMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdHx8KHQ9e2ljZVNlcnZlcnM6W3t1cmxzOlwic3R1bjpnbG9iYWwuc3R1bi50d2lsaW8uY29tOjM0Nzg/dHJhbnNwb3J0PXVkcFwifV19KSxvPW5ldyBSVENQZWVyQ29ubmVjdGlvbih0KSxzPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtpPWV9KSksKGE9by5jcmVhdGVEYXRhQ2hhbm5lbChcImRhdGFcIix7aWQ6MCxuZWdvdGlhdGVkOiEwLG9yZGVyZWQ6ITB9KSkuYmluYXJ5VHlwZT1cImFycmF5YnVmZmVyXCIsKHA9by5jcmVhdGVEYXRhQ2hhbm5lbChcIm5lZ290aWF0aW9uXCIse2lkOjEsbmVnb3RpYXRlZDohMCxvcmRlcmVkOiEwfSkpLmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLHAub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByKHUsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxyLGk7cmV0dXJuIG4odGhpcywoZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gbi50cnlzLnB1c2goWzAsNCwsNV0pLHQ9bmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihKU09OLnBhcnNlKGF0b2IoZS5kYXRhKSkpLFs0LG8uc2V0UmVtb3RlRGVzY3JpcHRpb24odCldO2Nhc2UgMTpyZXR1cm4gbi5zZW50KCksWzQsby5jcmVhdGVBbnN3ZXIoKV07Y2FzZSAyOnJldHVybiByPW4uc2VudCgpLFs0LG8uc2V0TG9jYWxEZXNjcmlwdGlvbihyKV07Y2FzZSAzOnJldHVybiBuLnNlbnQoKSxwLnNlbmQoYnRvYShKU09OLnN0cmluZ2lmeShvLmxvY2FsRGVzY3JpcHRpb24pKSksWzMsNV07Y2FzZSA0OnJldHVybiBpPW4uc2VudCgpLGNvbnNvbGUuZXJyb3IoaSksWzMsNV07Y2FzZSA1OnJldHVyblsyXX19KSl9KSl9LGU/WzQsby5jcmVhdGVPZmZlcigpXTpbMixQcm9taXNlLnJlc29sdmUoe3BjOm8sZGM6YX0pXTtjYXNlIDE6Zz1jLnNlbnQoKSxjLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBjLnRyeXMucHVzaChbMiw0LCw1XSksWzQsby5zZXRMb2NhbERlc2NyaXB0aW9uKGcpXTtjYXNlIDM6cmV0dXJuIGMuc2VudCgpLFszLDVdO2Nhc2UgNDpyZXR1cm4gbD1jLnNlbnQoKSxbMixQcm9taXNlLnJlamVjdChsKV07Y2FzZSA1OnJldHVybiBvLm9uaWNlY2FuZGlkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByKHUsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PWUuY2FuZGlkYXRlfHxpKHtwYzpvLGRjOmF9KSxbMl19KSl9KSl9LFsyLHNdfX0pKX0pKX19XSl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbmRsWW5CaFkyczZMeTl5Y0dNdmQyVmljR0ZqYXk5MWJtbDJaWEp6WVd4TmIyUjFiR1ZFWldacGJtbDBhVzl1SWl3aWQyVmljR0ZqYXpvdkwzSndZeTkzWldKd1lXTnJMMkp2YjNSemRISmhjQ0lzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl1YjJSbFgyMXZaSFZzWlhNdloyOXZaMnhsTFhCeWIzUnZZblZtTDJkdmIyZHNaUzF3Y205MGIySjFaaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5dWIyUmxYMjF2WkhWc1pYTXZRR2x0Y0hKdlltRmliR1V0Wlc1bkwyZHljR010ZDJWaUwyUnBjM1F2WjNKd1l5MTNaV0l0WTJ4cFpXNTBMblZ0WkM1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXpjbU12WjJWdUwyZHZiMmRzWlM5eWNHTXZjM1JoZEhWelgzQmlMbXB6SWl3aWQyVmljR0ZqYXpvdkwzSndZeTh1TDNOeVl5OW5aVzR2Y0hKdmRHOHZjbkJqTDNkbFluSjBZeTkyTVM5bmNuQmpYM0JpTG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4b2QyVmljR0ZqYXlrdlluVnBiR1JwYmk5bmJHOWlZV3d1YW5NaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmMzSmpMMmRsYmk5d2NtOTBieTl5Y0dNdmRqRXZZWFYwYUY5d1lpNXFjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdloyVnVMMmR2YjJkc1pTOWhjR2t2WVc1dWIzUmhkR2x2Ym5OZmNHSXVhbk1pTENKM1pXSndZV05yT2k4dmNuQmpMeTR2YzNKakwyZGxiaTl3Y205MGJ5OXljR012ZDJWaWNuUmpMM1l4TDNOcFoyNWhiR2x1WjE5d1lpNXFjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdmFXNWtaWGd1ZEhNaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmMzSmpMMlJwWVd3dWRITWlMQ0ozWldKd1lXTnJPaTh2Y25Cakx5NHZjM0pqTDBOc2FXVnVkRU5vWVc1dVpXd3VkSE1pTENKM1pXSndZV05yT2k4dmNuQmpMeTR2Ym05a1pWOXRiMlIxYkdWekwySjFabVpsY2k5cGJtUmxlQzVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5dWIyUmxYMjF2WkhWc1pYTXZZbUZ6WlRZMExXcHpMMmx1WkdWNExtcHpJaXdpZDJWaWNHRmphem92TDNKd1l5OHVMMjV2WkdWZmJXOWtkV3hsY3k5cFpXVmxOelUwTDJsdVpHVjRMbXB6SWl3aWQyVmljR0ZqYXpvdkwzSndZeTh1TDI1dlpHVmZiVzlrZFd4bGN5OXBjMkZ5Y21GNUwybHVaR1Y0TG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4dUwyNXZaR1ZmYlc5a2RXeGxjeTluYjI5bmJHVXRjSEp2ZEc5aWRXWXZaMjl2WjJ4bEwzQnliM1J2WW5WbUwyUjFjbUYwYVc5dVgzQmlMbXB6SWl3aWQyVmljR0ZqYXpvdkwzSndZeTh1TDI1dlpHVmZiVzlrZFd4bGN5OW5iMjluYkdVdGNISnZkRzlpZFdZdloyOXZaMnhsTDNCeWIzUnZZblZtTDJGdWVWOXdZaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5emNtTXZRbUZ6WlVOb1lXNXVaV3d1ZEhNaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmMzSmpMME5zYVdWdWRGTjBjbVZoYlM1MGN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXpjbU12UW1GelpWTjBjbVZoYlM1MGN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXpjbU12WjJWdUwyZHZiMmRzWlM5eWNHTXZZMjlrWlY5d1lpNXFjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdloyVnVMMmR2YjJkc1pTOWhjR2t2YUhSMGNGOXdZaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5dWIyUmxYMjF2WkhWc1pYTXZaMjl2WjJ4bExYQnliM1J2WW5WbUwyZHZiMmRzWlM5d2NtOTBiMkoxWmk5a1pYTmpjbWx3ZEc5eVgzQmlMbXB6SWl3aWQyVmljR0ZqYXpvdkwzSndZeTh1TDNOeVl5OW5aVzR2Y0hKdmRHOHZjbkJqTDNZeEwyRjFkR2hmY0dKZmMyVnlkbWxqWlM1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXpjbU12WjJWdUwzQnliM1J2TDNKd1l5OTNaV0p5ZEdNdmRqRXZjMmxuYm1Gc2FXNW5YM0JpWDNObGNuWnBZMlV1YW5NaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmMzSmpMM0JsWlhJdWRITWlYU3dpYm1GdFpYTWlPbHNpY205dmRDSXNJbVpoWTNSdmNua2lMQ0psZUhCdmNuUnpJaXdpYlc5a2RXeGxJaXdpWkdWbWFXNWxJaXdpWVcxa0lpd2lkMmx1Wkc5M0lpd2lhVzV6ZEdGc2JHVmtUVzlrZFd4bGN5SXNJbDlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMThpTENKdGIyUjFiR1ZKWkNJc0lta2lMQ0pzSWl3aWJXOWtkV3hsY3lJc0ltTmhiR3dpTENKdElpd2lZeUlzSW1RaUxDSnVZVzFsSWl3aVoyVjBkR1Z5SWl3aWJ5SXNJazlpYW1WamRDSXNJbVJsWm1sdVpWQnliM0JsY25SNUlpd2laVzUxYldWeVlXSnNaU0lzSW1kbGRDSXNJbklpTENKVGVXMWliMndpTENKMGIxTjBjbWx1WjFSaFp5SXNJblpoYkhWbElpd2lkQ0lzSW0xdlpHVWlMQ0pmWDJWelRXOWtkV3hsSWl3aWJuTWlMQ0pqY21WaGRHVWlMQ0pyWlhraUxDSmlhVzVrSWl3aWJpSXNJbTlpYW1WamRDSXNJbkJ5YjNCbGNuUjVJaXdpY0hKdmRHOTBlWEJsSWl3aWFHRnpUM2R1VUhKdmNHVnlkSGtpTENKd0lpd2ljeUlzSWlScWMyTnZiWEFpTENKelkyOXdaU0lzSW1acGJtUkpiblJsY201aGJDSXNJbUVpTENKaUlpd2lVM1J5YVc1bklpd2liR1Z1WjNSb0lpd2laU0lzSW1ZaUxDSjJJaXdpUVZOVFZVMUZYMFZUTlNJc0lrRlRVMVZOUlY5T1QxOU9RVlJKVmtWZlRVRlFJaXdpUVZOVFZVMUZYMDVQWDA1QlZFbFdSVjlUUlZRaUxDSlRTVTFRVEVWZlJsSlBWVTVFWDFCUFRGbEdTVXhNSWl3aVpHVm1hVzVsVUhKdmNHVnlkR2xsY3lJc0lrRnljbUY1SWl3aVoyVjBSMnh2WW1Gc0lpd2laMnh2WW1Gc0lpd2lkR2hwY3lJc0luQnZiSGxtYVd4c0lpd2ljM0JzYVhRaUxDSmpiMjVtYVdkMWNtRmliR1VpTENKM2NtbDBZV0pzWlNJc0ltTm9aV05yVTNSeWFXNW5RWEpuY3lJc0lsUjVjR1ZGY25KdmNpSXNJbEpsWjBWNGNDSXNJazFoZEdnaUxDSnRZWGdpTENKdGFXNGlMQ0puSWl3aVVtRnVaMlZGY25KdmNpSXNJa05QVFZCSlRFVkVJaXdpWjI5dlp5SXNJbk5sYkdZaUxDSnBjMFJsWmlJc0ltbHpVM1J5YVc1bklpd2lhWE5DYjI5c1pXRnVJaXdpYVhOT2RXMWlaWElpTENKbGVIQnZjblJRWVhSb1h5SXNJbVY0WldOVFkzSnBjSFFpTENKemFHbG1kQ0lzSWtOTVQxTlZVa1ZmVlU1RFQwMVFTVXhGUkY5RVJVWkpUa1ZUSWl3aVEweFBVMVZTUlY5RVJVWkpUa1ZUSWl3aWJtOWtaVlI1Y0dVaUxDSkdSVUZVVlZKRlUwVlVYMWxGUVZJaUxDSkVSVUpWUnlJc0lreFBRMEZNUlNJc0lsUlNWVk5VUlVSZlUwbFVSU0lzSWxOVVVrbERWRjlOVDBSRlgwTlBUVkJCVkVsQ1RFVWlMQ0pFU1ZOQlRFeFBWMTlVUlZOVVgwOU9URmxmUTA5RVJTSXNJa1ZPUVVKTVJWOURTRkpQVFVWZlFWQlFYMU5CUmtWZlUwTlNTVkJVWDB4UFFVUkpUa2NpTENKd2NtOTJhV1JsSWl3aWFYTkpiazF2WkhWc1pVeHZZV1JsY2w4aUxDSkZjbkp2Y2lJc0ltbHpVSEp2ZG1sa1pXUmZJaXdpWTI5dWMzUnlkV04wVG1GdFpYTndZV05sWHlJc0ltbHRjR3hwWTJsMFRtRnRaWE53WVdObGMxOGlMQ0p6ZFdKemRISnBibWNpTENKc1lYTjBTVzVrWlhoUFppSXNJbWRsZEU5aWFtVmpkRUo1VG1GdFpTSXNJbWRsZEZOamNtbHdkRTV2Ym1ObElpd2laMlYwVTJOeWFYQjBUbTl1WTJWZklpd2laRzlqZFcxbGJuUWlMQ0pqYzNCT2IyNWpaVjhpTENKT1QwNURSVjlRUVZSVVJWSk9YeUlzSW5GMVpYSjVVMlZzWldOMGIzSWlMQ0p1YjI1alpTSXNJbWRsZEVGMGRISnBZblYwWlNJc0luUmxjM1FpTENKV1FVeEpSRjlOVDBSVlRFVmZVa1ZmSWl3aWMyVmhjbU5vSWl3aWFYTkpia2R2YjJkTmIyUjFiR1ZNYjJGa1pYSmZJaXdpYlc5a2RXeGxURzloWkdWeVUzUmhkR1ZmSWl3aWJXOWtkV3hsVG1GdFpTSXNJbWRsZEVsdWRHVnlibUZzWHlJc0lteHZZV1JsWkUxdlpIVnNaWE5mSWl3aVRXOWtkV3hsVkhsd1pTSXNJa1ZUTmlJc0lrZFBUMGNpTENKcGMwbHVSWE0yVFc5a2RXeGxURzloWkdWeVh5SXNJblI1Y0dVaUxDSm5aWFJEZFhKeVpXNTBUVzlrZFd4bFVHRjBhQ0lzSW1SbFkyeGhjbVZNWldkaFkzbE9ZVzFsYzNCaFkyVWlMQ0prWldOc1lYSmxUVzlrZFd4bFNXUWlMQ0p5WlhGMWFYSmxJaXdpYzJWMFZHVnpkRTl1YkhraUxDSm1iM0ozWVhKa1JHVmpiR0Z5WlNJc0ltbHpSR1ZtUVc1a1RtOTBUblZzYkNJc0ltZHNiMkpoYkdsNlpTSXNJbUZrWkVSbGNHVnVaR1Z1WTNraUxDSkVSVkJGVGtSRlRrTkpSVk5mUlU1QlFreEZSQ0lzSW1SbFluVm5URzloWkdWeVh5SXNJa1ZPUVVKTVJWOUVSVUpWUjE5TVQwRkVSVklpTENKc2IyZFViME52Ym5OdmJHVmZJaXdpWTI5dWMyOXNaU0lzSW1WeWNtOXlJaXdpY21WeGRXVnpkR1ZrSWl3aWJHOWhaRjhpTENKeVpYRjFhWEpsVkhsd1pTSXNJbUpoYzJWUVlYUm9JaXdpYm5Wc2JFWjFibU4wYVc5dUlpd2lZV0p6ZEhKaFkzUk5aWFJvYjJRaUxDSmhaR1JUYVc1bmJHVjBiMjVIWlhSMFpYSWlMQ0pwYm5OMFlXNWpaVjhpTENKblpYUkpibk4wWVc1alpTSXNJbWx1YzNSaGJuUnBZWFJsWkZOcGJtZHNaWFJ2Ym5OZklpd2lURTlCUkY5TlQwUlZURVZmVlZOSlRrZGZSVlpCVENJc0lsTkZRVXhmVFU5RVZVeEZYMFZZVUU5U1ZGTWlMQ0pVVWtGT1UxQkpURVVpTENKQlUxTlZUVVZmUlZOZlRVOUVWVXhGVTE5VVVrRk9VMUJKVEVWRUlpd2lWRkpCVGxOUVNVeEZYMVJQWDB4QlRrZFZRVWRGSWl3aVZGSkJUbE5RU1V4RlVpSXNJbWhoYzBKaFpFeGxkRk5qYjNCcGJtY2lMQ0oxYzJWVFlXWmhjbWt4TUZkdmNtdGhjbTkxYm1RaUxDSmxkbUZzSWl3aWQyOXlhMkZ5YjNWdVpGTmhabUZ5YVRFd1JYWmhiRUoxWnlJc0lteHZZV1JOYjJSMWJHVWlMQ0pwYzBaMWJtTjBhVzl1SWl3aWJHOWhaRTF2WkhWc1pVWnliMjFUYjNWeVkyVmZJaXdpYzJWaGJDSXNJbTV2Y20xaGJHbDZaVkJoZEdoZklpd2ljM0JzYVdObElpd2lhbTlwYmlJc0lteHZZV1JHYVd4bFUzbHVZMThpTENKRFRFOVRWVkpGWDB4UFFVUmZSa2xNUlY5VFdVNURJaXdpV0UxTVNIUjBjRkpsY1hWbGMzUWlMQ0p2Y0dWdUlpd2ljMlZ1WkNJc0luTjBZWFIxY3lJc0luSmxjM0J2Ym5ObFZHVjRkQ0lzSW5SeVlXNXpjR2xzWlY4aUxDSjBjbUZ1YzNCcGJHVWlMQ0lrWjNkMFJYaHdiM0owSWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0luUjVjR1ZQWmlJc0luUnZVM1J5YVc1bklpd2ljSEp2Y0dWeWRIbEpjMFZ1ZFcxbGNtRmliR1VpTENKcGMwNTFiR3dpTENKcGMwRnljbUY1SWl3aWFYTkJjbkpoZVV4cGEyVWlMQ0pwYzBSaGRHVk1hV3RsSWl3aWFYTlBZbXBsWTNRaUxDSm5aWFJHZFd4c1dXVmhjaUlzSW1kbGRGVnBaQ0lzSWxWSlJGOVFVazlRUlZKVVdWOGlMQ0oxYVdSRGIzVnVkR1Z5WHlJc0ltaGhjMVZwWkNJc0luSmxiVzkyWlZWcFpDSXNJbkpsYlc5MlpVRjBkSEpwWW5WMFpTSXNJbkpoYm1SdmJTSXNJbWRsZEVoaGMyaERiMlJsSWl3aWNtVnRiM1psU0dGemFFTnZaR1VpTENKamJHOXVaVTlpYW1WamRDSXNJbU5zYjI1bElpd2lZbWx1WkU1aGRHbDJaVjhpTENKaGNIQnNlU0lzSW1GeVozVnRaVzUwY3lJc0ltSnBibVJLYzE4aUxDSnpiR2xqWlNJc0luVnVjMmhwWm5RaUxDSkdkVzVqZEdsdmJpSXNJbWx1WkdWNFQyWWlMQ0p3WVhKMGFXRnNJaXdpY0hWemFDSXNJbTFwZUdsdUlpd2libTkzSWl3aVJHRjBaU0lzSW1kc2IySmhiRVYyWVd3aUxDSmxkbUZzVjI5eWEzTkdiM0pIYkc5aVlXeHpYeUlzSWw5bGRtRnNWR1Z6ZEY4aUxDSmpjbVZoZEdWRmJHVnRaVzUwSWl3aVpHVm1aWElpTENKaGNIQmxibVJEYUdsc1pDSXNJbU55WldGMFpWUmxlSFJPYjJSbElpd2lhR1ZoWkNJc0luSmxiVzkyWlVOb2FXeGtJaXdpWjJWMFEzTnpUbUZ0WlNJc0ltTm9ZWEpCZENJc0ltTnpjMDVoYldWTllYQndhVzVuWHlJc0ltTnpjMDVoYldWTllYQndhVzVuVTNSNWJHVmZJaXdpUTB4UFUxVlNSVjlEVTFOZlRrRk5SVjlOUVZCZlJrNGlMQ0p6WlhSRGMzTk9ZVzFsVFdGd2NHbHVaeUlzSWtOTVQxTlZVa1ZmUTFOVFgwNUJUVVZmVFVGUVVFbE9SeUlzSW1kbGRFMXpaeUlzSW1oMGJXd2lMQ0p5WlhCc1lXTmxJaXdpWjJWMFRYTm5WMmwwYUVaaGJHeGlZV05ySWl3aVpYaHdiM0owVTNsdFltOXNJaXdpWlhod2IzSjBVSEp2Y0dWeWRIa2lMQ0pwYm1obGNtbDBjeUlzSW5OMWNHVnlRMnhoYzNOZklpd2lZMjl1YzNSeWRXTjBiM0lpTENKaVlYTmxJaXdpWTJGc2JHVmxJaXdpWTJGc2JHVnlJaXdpWjJWMFVISnZkRzkwZVhCbFQyWWlMQ0prWldacGJtVkRiR0Z6Y3lJc0luTjBZWFJwWTNNaUxDSmpjbVZoZEdWVFpXRnNhVzVuUTI5dWMzUnlkV04wYjNKZklpd2lZWEJ3YkhsUWNtOXdaWEowYVdWelh5SXNJbE5GUVV4ZlEweEJVMU5mU1U1VFZFRk9RMFZUSWl3aWFYTlZibk5sWVd4aFlteGxYeUlzSWxWT1UwVkJURUZDVEVWZlEwOU9VMVJTVlVOVVQxSmZVRkpQVUVWU1ZGbGZJaXdpVDBKS1JVTlVYMUJTVDFSUFZGbFFSVjlHU1VWTVJGTmZJaXdpZEdGblZXNXpaV0ZzWVdKc1pVTnNZWE56SWl3aWFXNUlkRzFzUkc5amRXMWxiblJmSWl3aWFYTkViMk4xYldWdWRFeHZZV1JwYm1kZklpd2lZWFIwWVdOb1JYWmxiblFpTENKeVpXRmtlVk4wWVhSbElpd2labWx1WkVKaGMyVlFZWFJvWHlJc0lrTk1UMU5WVWtWZlFrRlRSVjlRUVZSSUlpd2lZM1Z5Y21WdWRGTmpjbWx3ZENJc0ltZGxkRVZzWlcxbGJuUnpRbmxVWVdkT1lXMWxJaXdpYzNKaklpd2ljM1ZpYzNSeUlpd2lWSEpoYm5Od2FXeGxjaUlzSW5KbGNYVnBjbVZ6VkhKaGJuTndhV3hoZEdsdmJsOGlMQ0owY21GdWMzQnBiR0YwYVc5dVZHRnlaMlYwWHlJc0ltTnlaV0YwWlZKbGNYVnBjbVZ6VkhKaGJuTndhV3hoZEdsdmJsOGlMQ0pvSWl3aVpYTXpJaXdpYm1GMmFXZGhkRzl5SWl3aWRYTmxja0ZuWlc1MElpd2liV0YwWTJnaUxDSjBZWEpuWlhRaUxDSnRZWEFpTENKdVpXVmtjMVJ5WVc1emNHbHNaU0lzSW5SeVlXNXpjR2xzWlhKZklpd2ljSEp2ZEdWamRGTmpjbWx3ZEZSaFoxOGlMQ0pFWldKMVoweHZZV1JsY2w4aUxDSmtaWEJsYm1SbGJtTnBaWE5mSWl3aWFXUlViMUJoZEdoZklpd2lkM0pwZEhSbGJsOGlMQ0pzYjJGa2FXNW5SR1Z3YzE4aUxDSmtaWEJ6Vkc5TWIyRmtYeUlzSW5CaGRYTmxaRjhpTENKbVlXTjBiM0o1WHlJc0lrUmxjR1Z1WkdWdVkzbEdZV04wYjNKNUlpd2laR1ZtWlhKeVpXUkRZV3hzWW1GamEzTmZJaXdpWkdWbVpYSnlaV1JSZFdWMVpWOGlMQ0ppYjI5MGMzUnlZWEFpTENKelpYUlVhVzFsYjNWMElpd2laMlYwVUdGMGFFWnliMjFFWlhCelh5SXNJbTl1VEc5aFpDSXNJbXh2WVdSRGJHOXpkWEpsUkdWd2N5SXNJbU55WldGMFpVUmxjR1Z1WkdWdVkza2lMQ0pzYjJGa1JHVndjMThpTENKaGNtVkVaWEJ6VEc5aFpHVmtYeUlzSW5KbGNYVnBjbVZ6SWl3aWMyVjBSR1Z3Wlc1a1pXNWplVVpoWTNSdmNua2lMQ0pqYjI1allYUWlMQ0pzYjJGa2FXNW5YeUlzSW5CaGRYTmxJaXdpY21WemRXMWxJaXdpY21WemRXMWxYeUlzSW14dllXUmxaQ0lzSW14dllXUmxaRjhpTENKd1pXNWthVzVuSWl3aWMyVjBUVzlrZFd4bFUzUmhkR1VpTENKeVpXZHBjM1JsY2tWek5rMXZaSFZzWlVWNGNHOXlkSE1pTENKeVpXZHBjM1JsY2tkdmIyZE5iMlIxYkdWRmVIQnZjblJ6SWl3aVkyeGxZWEpOYjJSMWJHVlRkR0YwWlNJc0ltUmxabVZ5WHlJc0ltRnlaVVJsY0hOTWIyRmtaV1FpTENKc2IyRmtJaXdpY0dGMWMyVmZJaXdpY0dGMGFDSXNJa3h2WVdSRGIyNTBjbTlzYkdWeUlpd2lSR1Z3Wlc1a1pXNWplU0lzSW5KbGJHRjBhWFpsVUdGMGFDSXNJbkJ5YjNacFpHVnpJaXdpYkc5aFpFWnNZV2R6SWl3aWJHOWhaRU5oYkd4aVlXTnJjMThpTENKblpYUlFZWFJvVG1GdFpTSXNJbU5oYkd4aVlXTnJUV0Z3WHlJc0luSmxaMmx6ZEdWeVEyRnNiR0poWTJ0Zklpd2lkVzV5WldkcGMzUmxja05oYkd4aVlXTnJYeUlzSW1OaGJHeGlZV05yWHlJc0lrTk1UMU5WVWtWZlNVMVFUMUpVWDFORFVrbFFWQ0lzSWtsVFgwOU1SRjlKUlY4aUxDSjNjbWwwWlNJc0lsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYeUlzSW1OeVpXRjBaVWhVVFV3aUxDSmhjM2x1WXlJc0luTmxkRUYwZEhKcFluVjBaU0lzSW05dWNtVmhaSGx6ZEdGMFpXTm9ZVzVuWlNJc0ltOXViRzloWkNJc0ltTnlaV0YwWlZOamNtbHdkRlZTVENJc0lrVnpOazF2WkhWc1pVUmxjR1Z1WkdWdVkza2lMQ0owWlhoMFEyOXVkR1Z1ZENJc0ltTnlaV0YwWlZOamNtbHdkQ0lzSW1zaUxDSlVjbUZ1YzJadmNtMWxaRVJsY0dWdVpHVnVZM2tpTENKamIyNTBaVzUwYzE4aUxDSnNZWHA1Um1WMFkyaGZJaXdpZEhKaGJuTm1iM0p0SWl3aVpXNXpkWEpsSWl3aVZISmhibk53YVd4bFpFUmxjR1Z1WkdWdVkza2lMQ0owY21GdWMzQnBiR1Z5SWl3aVVISmxWSEpoYm5Od2FXeGxaRVZ6TmsxdlpIVnNaVVJsY0dWdVpHVnVZM2tpTENKSGIyOW5UVzlrZFd4bFJHVndaVzVrWlc1amVTSXNJbTVsWldSelZISmhibk53YVd4bFh5SXNJbUYwYjJJaUxDSmhiR3dpTENKc1lXNW5JaXdpUTB4UFUxVlNSVjlPVDE5RVJWQlRJaXdpVkZKVlUxUkZSRjlVV1ZCRlUxOVFUMHhKUTFsZlRrRk5SU0lzSW1sa1pXNTBhWFI1WHlJc0ltTnlaV0YwWlZSeWRYTjBaV1JVZVhCbGMxQnZiR2xqZVNJc0lsUnlkWE4wWldSVWVYQmxjeUlzSW1OeVpXRjBaVkJ2YkdsamVTSXNJbU55WldGMFpWVlNUQ0lzSW0xbGMzTmhaMlVpTENKcGN5SXNJbVp2Y2tWaFkyZ2lMQ0ptYVd4MFpYSWlMQ0p6YjIxbElpd2laWFpsY25raUxDSm5aWFJEYjNWdWRDSXNJbWRsZEVGdWVVdGxlU0lzSW1kbGRFRnVlVlpoYkhWbElpd2lZMjl1ZEdGcGJuTWlMQ0pqYjI1MFlXbHVjMVpoYkhWbElpd2laMlYwVm1Gc2RXVnpJaXdpWjJWMFMyVjVjeUlzSW1kbGRGWmhiSFZsUW5sTFpYbHpJaXdpWTI5dWRHRnBibk5MWlhraUxDSm1hVzVrUzJWNUlpd2labWx1WkZaaGJIVmxJaXdpYVhORmJYQjBlU0lzSW1Oc1pXRnlJaXdpY21WdGIzWmxJaXdpWVdSa0lpd2ljMlYwSWl3aWMyVjBTV1pWYm1SbFptbHVaV1FpTENKelpYUlhhWFJvVW1WMGRYSnVWbUZzZFdWSlprNXZkRk5sZENJc0ltVnhkV0ZzY3lJc0luVnVjMkZtWlVOc2IyNWxJaXdpZEhKaGJuTndiM05sSWl3aVVGSlBWRTlVV1ZCRlgwWkpSVXhFVTE4aUxDSmxlSFJsYm1RaUxDSmpjbVZoZEdWVFpYUWlMQ0pqY21WaGRHVkpiVzExZEdGaWJHVldhV1YzSWl3aWFYTkdjbTk2Wlc0aUxDSm1jbVZsZW1VaUxDSnBjMGx0YlhWMFlXSnNaVlpwWlhjaUxDSm5aWFJCYkd4UWNtOXdaWEowZVU1aGJXVnpJaXdpWjJWMFQzZHVVSEp2Y0dWeWRIbE9ZVzFsY3lJc0ltZGxkRk4xY0dWeVEyeGhjM01pTENKa1pXSjFaeUlzSW1OaGNIUjFjbVZUZEdGamExUnlZV05sSWl3aWMzUmhZMnNpTENKeVpYQnZjblJGY25KdmNsUnZVMlZ5ZG1WeUlpd2laRzl0SWl3aVRtOWtaVlI1Y0dVaUxDSkZURVZOUlU1VUlpd2lRVlJVVWtsQ1ZWUkZJaXdpVkVWWVZDSXNJa05FUVZSQlgxTkZRMVJKVDA0aUxDSkZUbFJKVkZsZlVrVkdSVkpGVGtORklpd2lSVTVVU1ZSWklpd2lVRkpQUTBWVFUwbE9SMTlKVGxOVVVsVkRWRWxQVGlJc0lrTlBUVTFGVGxRaUxDSkVUME5WVFVWT1ZDSXNJa1JQUTFWTlJVNVVYMVJaVUVVaUxDSkVUME5WVFVWT1ZGOUdVa0ZIVFVWT1ZDSXNJazVQVkVGVVNVOU9JaXdpWVhOelpYSjBjeUlzSWtWT1FVSk1SVjlCVTFORlVsUlRJaXdpUVhOelpYSjBhVzl1UlhKeWIzSWlMQ0p6ZFdKelh5SXNJbTFsYzNOaFoyVlFZWFIwWlhKdUlpd2lSRVZHUVZWTVZGOUZVbEpQVWw5SVFVNUVURVZTSWl3aVpYSnliM0pJWVc1a2JHVnlYeUlzSW1SdlFYTnpaWEowUm1GcGJIVnlaVjhpTENKelpYUkZjbkp2Y2toaGJtUnNaWElpTENKaGMzTmxjblFpTENKaGMzTmxjblJGZUdsemRITWlMQ0ptWVdsc0lpd2lZWE56WlhKMFRuVnRZbVZ5SWl3aVlYTnpaWEowVTNSeWFXNW5JaXdpWVhOelpYSjBSblZ1WTNScGIyNGlMQ0poYzNObGNuUlBZbXBsWTNRaUxDSmhjM05sY25SQmNuSmhlU0lzSW1GemMyVnlkRUp2YjJ4bFlXNGlMQ0poYzNObGNuUkZiR1Z0Wlc1MElpd2lZWE56WlhKMFNXNXpkR0Z1WTJWdlppSXNJbWRsZEZSNWNHVmZJaXdpWVhOelpYSjBSbWx1YVhSbElpd2lhWE5HYVc1cGRHVWlMQ0poYzNObGNuUlBZbXBsWTNSUWNtOTBiM1I1Y0dWSmMwbHVkR0ZqZENJc0ltUnBjM0JzWVhsT1lXMWxJaXdpYW5Od1lpSXNJa0pwYm1GeWVVTnZibk4wWVc1MGN5SXNJa052Ym5OMFFtbHVZWEo1VFdWemMyRm5aU0lzSWtKcGJtRnllVTFsYzNOaFoyVWlMQ0pHYVdWc1pGUjVjR1VpTENKSlRsWkJURWxFSWl3aVJFOVZRa3hGSWl3aVJreFBRVlFpTENKSlRsUTJOQ0lzSWxWSlRsUTJOQ0lzSWtsT1ZETXlJaXdpUmtsWVJVUTJOQ0lzSWtaSldFVkVNeklpTENKQ1QwOU1JaXdpVTFSU1NVNUhJaXdpUjFKUFZWQWlMQ0pOUlZOVFFVZEZJaXdpUWxsVVJWTWlMQ0pWU1U1VU16SWlMQ0pGVGxWTklpd2lVMFpKV0VWRU16SWlMQ0pUUmtsWVJVUTJOQ0lzSWxOSlRsUXpNaUlzSWxOSlRsUTJOQ0lzSWtaSVFWTklOalFpTENKV1NFRlRTRFkwSWl3aVYybHlaVlI1Y0dVaUxDSldRVkpKVGxRaUxDSkVSVXhKVFVsVVJVUWlMQ0pUVkVGU1ZGOUhVazlWVUNJc0lrVk9SRjlIVWs5VlVDSXNJa1pwWld4a1ZIbHdaVlJ2VjJseVpWUjVjR1VpTENKSlRsWkJURWxFWDBaSlJVeEVYMDVWVFVKRlVpSXNJa1pNVDBGVU16SmZSVkJUSWl3aVJreFBRVlF6TWw5TlNVNGlMQ0pHVEU5QlZETXlYMDFCV0NJc0lrWk1UMEZVTmpSZlJWQlRJaXdpUmt4UFFWUTJORjlOU1U0aUxDSkdURTlCVkRZMFgwMUJXQ0lzSWxSWFQxOVVUMTh5TUNJc0lsUlhUMTlVVDE4eU15SXNJbFJYVDE5VVQxOHpNU0lzSWxSWFQxOVVUMTh6TWlJc0lsUlhUMTlVVDE4MU1pSXNJbFJYVDE5VVQxODJNeUlzSWxSWFQxOVVUMTgyTkNJc0lscEZVazlmU0VGVFNDSXNJbUZ5Y21GNUlpd2lUa0ZVU1ZaRlgwRlNVa0ZaWDFCU1QxUlBWRmxRUlZNaUxDSkJVMU5WVFVWZlRrRlVTVlpGWDBaVlRrTlVTVTlPVXlJc0luQmxaV3NpTENKc1lYTjBJaXdpWm05eVJXRmphRkpwWjJoMElpd2ljbVZrZFdObElpd2ljbVZrZFdObFVtbG5hSFFpTENKamIzVnVkQ0lzSW1acGJtUWlMQ0ptYVc1a1NXNWtaWGdpTENKbWFXNWtVbWxuYUhRaUxDSm1hVzVrU1c1a1pYaFNhV2RvZENJc0ltbHVjMlZ5ZENJc0ltbHVjMlZ5ZEVGMElpd2lhVzV6WlhKMFFYSnlZWGxCZENJc0ltbHVjMlZ5ZEVKbFptOXlaU0lzSW5KbGJXOTJaVUYwSWl3aWNtVnRiM1psVEdGemRDSXNJbkpsYlc5MlpVbG1JaXdpY21WdGIzWmxRV3hzU1dZaUxDSjBiMEZ5Y21GNUlpd2ljbVZ0YjNabFJIVndiR2xqWVhSbGN5SXNJbUpwYm1GeWVWTmxZWEpqYUNJc0ltSnBibUZ5ZVZObFlYSmphRjhpTENKa1pXWmhkV3gwUTI5dGNHRnlaU0lzSW1KcGJtRnllVk5sYkdWamRDSXNJbk52Y25RaUxDSnpkR0ZpYkdWVGIzSjBJaXdpYVc1a1pYZ2lMQ0p6YjNKMFFubExaWGtpTENKemIzSjBUMkpxWldOMGMwSjVTMlY1SWl3aWFYTlRiM0owWldRaUxDSmtaV1poZFd4MFEyOXRjR0Z5WlVWeGRXRnNhWFI1SWl3aVkyOXRjR0Z5WlRNaUxDSnBiblpsY25ObFJHVm1ZWFZzZEVOdmJYQmhjbVVpTENKaWFXNWhjbmxKYm5ObGNuUWlMQ0ppYVc1aGNubFNaVzF2ZG1VaUxDSmlkV05yWlhRaUxDSjBiMDlpYW1WamRDSXNJbkpoYm1kbElpd2ljbVZ3WldGMElpd2labXhoZEhSbGJpSXNJbkp2ZEdGMFpTSXNJbTF2ZG1WSmRHVnRJaXdpZW1sd0lpd2ljMmgxWm1ac1pTSXNJbVpzYjI5eUlpd2lZMjl3ZVVKNVNXNWtaWGdpTENKamIyNWpZWFJOWVhBaUxDSmpjbmx3ZENJc0luTjBjbWx1WjFSdlFubDBaVUZ5Y21GNUlpd2lZMmhoY2tOdlpHVkJkQ0lzSW1KNWRHVkJjbkpoZVZSdlUzUnlhVzVuSWl3aVpuSnZiVU5vWVhKRGIyUmxJaXdpWW5sMFpVRnljbUY1Vkc5SVpYZ2lMQ0pvWlhoVWIwSjVkR1ZCY25KaGVTSXNJbkJoY25ObFNXNTBJaXdpYzNSeWFXNW5WRzlWZEdZNFFubDBaVUZ5Y21GNUlpd2lkWFJtT0VKNWRHVkJjbkpoZVZSdlUzUnlhVzVuSWl3aWVHOXlRbmwwWlVGeWNtRjVJaXdpWVhOelpYSjBTWE5NYjJOaGRHbHZiaUlzSW1kbGRGZHBibVJ2ZDE4aUxDSk1iMk5oZEdsdmJpSXNJa1ZzWlcxbGJuUWlMQ0prWldKMVoxTjBjbWx1WjBadmNsUjVjR1ZmSWl3aVlYTnpaWEowU1hORmJHVnRaVzUwVkhsd1pWOGlMQ0poYzNObGNuUkpjMGhVVFV4QmJtTm9iM0pGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ0lzSW1GemMyVnlkRWx6U0ZSTlRFeHBibXRGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVNXMWhaMlZGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVFYVmthVzlGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVZtbGtaVzlGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVNXNXdkWFJGYkdWdFpXNTBJaXdpWVhOelpYSjBTWE5JVkUxTVZHVjRkRUZ5WldGRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1RMkZ1ZG1GelJXeGxiV1Z1ZENJc0ltRnpjMlZ5ZEVselNGUk5URVZ0WW1Wa1JXeGxiV1Z1ZENJc0ltRnpjMlZ5ZEVselNGUk5URVp2Y20xRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1SbkpoYldWRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1TVVp5WVcxbFJXeGxiV1Z1ZENJc0ltRnpjMlZ5ZEVselNGUk5URTlpYW1WamRFVnNaVzFsYm5RaUxDSmhjM05sY25SSmMwaFVUVXhUWTNKcGNIUkZiR1Z0Wlc1MElpd2liM2R1WlhKRWIyTjFiV1Z1ZENJc0ltUmxabUYxYkhSV2FXVjNJaXdpY0dGeVpXNTBWMmx1Wkc5M0lpd2lablZ1WTNScGIyNXpJaXdpWTI5dWMzUmhiblFpTENKR1FVeFRSU0lzSWxSU1ZVVWlMQ0pPVlV4TUlpd2lhV1JsYm5ScGRIa2lMQ0pzYjJOcklpd2liblJvSWl3aWNHRnlkR2xoYkZKcFoyaDBJaXdpZDJsMGFGSmxkSFZ5YmxaaGJIVmxJaXdpYzJWeGRXVnVZMlVpTENKbGNYVmhiRlJ2SWl3aVkyOXRjRzl6WlNJc0ltRnVaQ0lzSW05eUlpd2libTkwSWl3aVEwRkRTRVZmVWtWVVZWSk9YMVpCVEZWRklpd2lZMkZqYUdWU1pYUjFjbTVXWVd4MVpTSXNJbTl1WTJVaUxDSmtaV0p2ZFc1alpTSXNJbU5zWldGeVZHbHRaVzkxZENJc0luUm9jbTkwZEd4bElpd2ljbUYwWlV4cGJXbDBJaXdpU0hSdGJFVnNaVzFsYm5RaUxDSlVZV2RPWVcxbElpd2lkR0ZuVG1GdFpWOGlMQ0pCSWl3aVFVSkNVaUlzSWtGRFVrOU9XVTBpTENKQlJFUlNSVk5USWl3aVFWQlFURVZVSWl3aVFWSkZRU0lzSWtGU1ZFbERURVVpTENKQlUwbEVSU0lzSWtGVlJFbFBJaXdpUWlJc0lrSkJVMFVpTENKQ1FWTkZSazlPVkNJc0lrSkVTU0lzSWtKRVR5SXNJa0pKUnlJc0lrSk1UME5MVVZWUFZFVWlMQ0pDVDBSWklpd2lRbElpTENKQ1ZWUlVUMDRpTENKRFFVNVdRVk1pTENKRFFWQlVTVTlPSWl3aVEwVk9WRVZTSWl3aVEwbFVSU0lzSWtOUFJFVWlMQ0pEVDB3aUxDSkRUMHhIVWs5VlVDSXNJa05QVFUxQlRrUWlMQ0pFUVZSQklpd2lSRUZVUVV4SlUxUWlMQ0pFUkNJc0lrUkZUQ0lzSWtSRlZFRkpURk1pTENKRVJrNGlMQ0pFU1VGTVQwY2lMQ0pFU1ZJaUxDSkVTVllpTENKRVRDSXNJa1JVSWl3aVJVMGlMQ0pGVFVKRlJDSXNJa1pKUlV4RVUwVlVJaXdpUmtsSFEwRlFWRWxQVGlJc0lrWkpSMVZTUlNJc0lrWlBUbFFpTENKR1QwOVVSVklpTENKR1QxSk5JaXdpUmxKQlRVVWlMQ0pHVWtGTlJWTkZWQ0lzSWtneElpd2lTRElpTENKSU15SXNJa2cwSWl3aVNEVWlMQ0pJTmlJc0lraEZRVVFpTENKSVJVRkVSVklpTENKSVIxSlBWVkFpTENKSVVpSXNJa2hVVFV3aUxDSkpJaXdpU1VaU1FVMUZJaXdpU1UxSElpd2lTVTVRVlZRaUxDSkpUbE1pTENKSlUwbE9SRVZZSWl3aVMwSkVJaXdpUzBWWlIwVk9JaXdpVEVGQ1JVd2lMQ0pNUlVkRlRrUWlMQ0pNU1NJc0lreEpUa3NpTENKTlFVbE9JaXdpVFVGUUlpd2lUVUZTU3lJc0lrMUJWRWdpTENKTlJVNVZJaXdpVFVWT1ZVbFVSVTBpTENKTlJWUkJJaXdpVFVWVVJWSWlMQ0pPUVZZaUxDSk9UMFpTUVUxRlV5SXNJazVQVTBOU1NWQlVJaXdpVDBKS1JVTlVJaXdpVDB3aUxDSlBVRlJIVWs5VlVDSXNJazlRVkVsUFRpSXNJazlWVkZCVlZDSXNJbEFpTENKUVFWSkJUU0lzSWxCSlExUlZVa1VpTENKUVVrVWlMQ0pRVWs5SFVrVlRVeUlzSWxFaUxDSlNVQ0lzSWxKVUlpd2lVbFJESWl3aVVsVkNXU0lzSWxNaUxDSlRRVTFRSWl3aVUwTlNTVkJVSWl3aVUwVkRWRWxQVGlJc0lsTkZURVZEVkNJc0lsTk5RVXhNSWl3aVUwOVZVa05GSWl3aVUxQkJUaUlzSWxOVVVrbExSU0lzSWxOVVVrOU9SeUlzSWxOVVdVeEZJaXdpVTFWQ0lpd2lVMVZOVFVGU1dTSXNJbE5WVUNJc0lsTldSeUlzSWxSQlFreEZJaXdpVkVKUFJGa2lMQ0pVUkNJc0lsUkZUVkJNUVZSRklpd2lWRVZZVkVGU1JVRWlMQ0pVUms5UFZDSXNJbFJJSWl3aVZFaEZRVVFpTENKVVNVMUZJaXdpVkVsVVRFVWlMQ0pVVWlJc0lsUlNRVU5MSWl3aVZGUWlMQ0pWSWl3aVZVd2lMQ0pXUVZJaUxDSldTVVJGVHlJc0lsZENVaUlzSW5SaFozTWlMQ0pXVDBsRVgxUkJSMU5mSWl3aVlYSmxZU0lzSW1KeUlpd2lZMjlzSWl3aVkyOXRiV0Z1WkNJc0ltVnRZbVZrSWl3aWFISWlMQ0pwYldjaUxDSnBibkIxZENJc0ltdGxlV2RsYmlJc0lteHBibXNpTENKdFpYUmhJaXdpY0dGeVlXMGlMQ0p6YjNWeVkyVWlMQ0owY21GamF5SXNJbmRpY2lJc0ltbHpWbTlwWkZSaFp5SXNJblJ5ZFhOMFpXUjBlWEJsY3lJc0lsQlNTVlpCVkVWZlJFOWZUazlVWDBGRFEwVlRVMTlQVWw5RlRGTkZYMUJQVEVsRFdTSXNJbk4wY21sdVp5SXNJbFI1Y0dWa1UzUnlhVzVuSWl3aVEyOXVjM1FpTENKemRISnBibWREYjI1emRGWmhiSFZsVjJsMGFGTmxZM1Z5YVhSNVEyOXVkSEpoWTNSZlgyZHZiMmRUZEhKcGJtZFRaV04xY21sMGVWQnlhWFpoZEdWZklpd2lSMDlQUjE5VFZGSkpUa2RmUTA5T1UxUlNWVU5VVDFKZlZFOUxSVTVmVUZKSlZrRlVSVjhpTENKVFZGSkpUa2RmUTA5T1UxUmZWRmxRUlY5TlFWSkxSVkpmWDBkUFQwZGZVMVJTU1U1SFgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZklpd2lWRmxRUlY5TlFWSkxSVkpmSWl3aWFXMXdiR1Z0Wlc1MGMwZHZiMmRUZEhKcGJtZFVlWEJsWkZOMGNtbHVaeUlzSW1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVaUxDSjFibmR5WVhBaUxDSm1jbTl0SWl3aVJVMVFWRmtpTENKVFlXWmxVMk55YVhCMElpd2ljSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk5qY21sd2RGZHlZWEJ3WldSV1lXeDFaVjhpTENKVFFVWkZYMU5EVWtsUVZGOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjhpTENKVVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOGlMQ0ptY205dFEyOXVjM1JoYm5RaUxDSmpjbVZoZEdWVFlXWmxVMk55YVhCMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVpTENKbWNtOXRRMjl1YzNSaGJuUkJibVJCY21keklpd2ljM1J5YVc1bmFXWjVYeUlzSW1aeWIyMUtjMjl1SWl3aWRXNTNjbUZ3VkhKMWMzUmxaRk5qY21sd2RDSXNJbWx1YVhSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVjhpTENKbWN5SXNJblZ5YkNJc0ltTnlaV0YwWlU5aWFtVmpkRlZ5YkNJc0ltZGxkRlZ5YkU5aWFtVmpkRjhpTENKamNtVmhkR1ZQWW1wbFkzUlZVa3dpTENKeVpYWnZhMlZQWW1wbFkzUlZjbXdpTENKeVpYWnZhMlZQWW1wbFkzUlZVa3dpTENKbWFXNWtWWEpzVDJKcVpXTjBYeUlzSWxWU1RDSXNJbmRsWW10cGRGVlNUQ0lzSW1KeWIzZHpaWEpUZFhCd2IzSjBjMDlpYW1WamRGVnliSE1pTENKcE1UaHVJaXdpWW1sa2FTSXNJa1pQVWtORlgxSlVUQ0lzSWtsVFgxSlVUQ0lzSW5SdlRHOTNaWEpEWVhObElpd2lSbTl5YldGMElpd2lURkpGSWl3aVVreEZJaXdpVUVSR0lpd2lURkpOSWl3aVVreE5JaXdpUkdseUlpd2lURlJTSWl3aVVsUk1JaXdpVGtWVlZGSkJUQ0lzSWxKSlIwaFVJaXdpVEVWR1ZDSXNJa2t4T0U1ZlVrbEhTRlFpTENKSk1UaE9YMHhGUmxRaUxDSjBiMFJwY2lJc0lteDBja05vWVhKelh5SXNJbkowYkVOb1lYSnpYeUlzSW1oMGJXeFRhMmx3VW1Wblh5SXNJbk4wY21sd1NIUnRiRWxtVG1WbFpHVmtYeUlzSW5KMGJFTm9ZWEpTWldkZklpd2liSFJ5UTJoaGNsSmxaMThpTENKb1lYTkJibmxTZEd3aUxDSm9ZWE5TZEd4RGFHRnlJaXdpYUdGelFXNTVUSFJ5SWl3aWJIUnlVbVZmSWl3aWNuUnNVbVZmSWl3aWFYTlNkR3hEYUdGeUlpd2lhWE5NZEhKRGFHRnlJaXdpYVhOT1pYVjBjbUZzUTJoaGNpSXNJbXgwY2tScGNrTm9aV05yVW1WZklpd2ljblJzUkdseVEyaGxZMnRTWlY4aUxDSnpkR0Z5ZEhOWGFYUm9VblJzSWl3aWFYTlNkR3hVWlhoMElpd2ljM1JoY25SelYybDBhRXgwY2lJc0ltbHpUSFJ5VkdWNGRDSXNJbWx6VW1WeGRXbHlaV1JNZEhKU1pWOGlMQ0pwYzA1bGRYUnlZV3hVWlhoMElpd2liSFJ5UlhocGRFUnBja05vWldOclVtVmZJaXdpY25Sc1JYaHBkRVJwY2tOb1pXTnJVbVZmSWl3aVpXNWtjMWRwZEdoTWRISWlMQ0pwYzB4MGNrVjRhWFJVWlhoMElpd2laVzVrYzFkcGRHaFNkR3dpTENKcGMxSjBiRVY0YVhSVVpYaDBJaXdpY25Sc1RHOWpZV3hsYzFKbFh5SXNJbWx6VW5Sc1RHRnVaM1ZoWjJVaUxDSmljbUZqYTJWMFIzVmhjbVJVWlhoMFVtVmZJaXdpWjNWaGNtUkNjbUZqYTJWMFNXNVVaWGgwSWl3aVpXNW1iM0pqWlZKMGJFbHVTSFJ0YkNJc0ltVnVabTl5WTJWU2RHeEpibFJsZUhRaUxDSmxibVp2Y21ObFRIUnlTVzVJZEcxc0lpd2laVzVtYjNKalpVeDBja2x1VkdWNGRDSXNJbVJwYldWdWMybHZibk5TWlY4aUxDSnNaV1owVW1WZklpd2ljbWxuYUhSU1pWOGlMQ0owWlcxd1VtVmZJaXdpYldseWNtOXlRMU5USWl3aVpHOTFZbXhsVVhWdmRHVlRkV0p6ZEdsMGRYUmxVbVZmSWl3aWMybHVaMnhsVVhWdmRHVlRkV0p6ZEdsMGRYUmxVbVZmSWl3aWJtOXliV0ZzYVhwbFNHVmljbVYzVVhWdmRHVWlMQ0ozYjNKa1UyVndZWEpoZEc5eVVtVmZJaXdpYUdGelRuVnRaWEpoYkhOU1pWOGlMQ0p5ZEd4RVpYUmxZM1JwYjI1VWFISmxjMmh2YkdSZklpd2laWE4wYVcxaGRHVkVhWEpsWTNScGIyNGlMQ0prWlhSbFkzUlNkR3hFYVhKbFkzUnBiMjVoYkdsMGVTSXNJbk5sZEVWc1pXMWxiblJFYVhKQmJtUkJiR2xuYmlJc0luTjBlV3hsSWl3aWRHVjRkRUZzYVdkdUlpd2laR2x5SWl3aWMyVjBSV3hsYldWdWRFUnBja0o1VkdWNGRFUnBjbVZqZEdsdmJtRnNhWFI1SWl3aVJHbHlaV04wYVc5dVlXeFRkSEpwYm1jaUxDSlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd2lMQ0p3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmSWl3aWRISjFjM1JsWkZWU1RGOGlMQ0pVVWxWVFZFVkVYMUpGVTA5VlVrTkZYMVZTVEY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOGlMQ0pwYlhCc1pXMWxiblJ6UjI5dlowa3hPRzVDYVdScFJHbHlaV04wYVc5dVlXeFRkSEpwYm1jaUxDSm5aWFJFYVhKbFkzUnBiMjRpTENKamJHOXVaVmRwZEdoUVlYSmhiWE1pTENKVlVreGZVRUZTUVUxZlVFRlNVMFZTWHlJc0ltVjRaV01pTENKamNtVmhkR1ZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTSXNJbk4wY21sdVoybG1lVkJoY21GdGMxOGlMQ0oxYm5keVlYQlVjblZ6ZEdWa1UyTnlhWEIwVlZKTUlpd2lkVzUzY21Gd1ZISjFjM1JsWkZWU1RDSXNJbVp2Y20xaGRDSXNJa0pCVTBWZlZWSk1YeUlzSWtaUFVrMUJWRjlOUVZKTFJWSmZJaXdpWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwSWl3aVptOXliV0YwVjJsMGFGQmhjbUZ0Y3lJc0ltWnliMjFEYjI1emRHRnVkSE1pTENKcGJuUmxjbTVoYkNJc0luTjBZWEowYzFkcGRHZ2lMQ0psYm1SelYybDBhQ0lzSW1OaGMyVkpibk5sYm5OcGRHbDJaVk4wWVhKMGMxZHBkR2dpTENKallYTmxTVzV6Wlc1emFYUnBkbVZEYjIxd1lYSmxJaXdpWTJGelpVbHVjMlZ1YzJsMGFYWmxSVzVrYzFkcGRHZ2lMQ0pqWVhObFNXNXpaVzV6YVhScGRtVkZjWFZoYkhNaUxDSnBjMFZ0Y0hSNVQzSlhhR2wwWlhOd1lXTmxJaXdpZEhKcGJTSXNJbTVsZDB4cGJtVlViMEp5SWl3aWFIUnRiRVZ6WTJGd1pTSXNJa0ZOVUY5U1JWOGlMQ0pNVkY5U1JWOGlMQ0pIVkY5U1JWOGlMQ0pSVlU5VVgxSkZYeUlzSWxOSlRrZE1SVjlSVlU5VVJWOVNSVjhpTENKT1ZVeE1YMUpGWHlJc0lrRk1URjlTUlY4aUxDSjNhR2wwWlhOd1lXTmxSWE5qWVhCbElpd2lZMkZ6WlVsdWMyVnVjMmwwYVhabFEyOXVkR0ZwYm5NaUxDSmpiMjF3WVhKbFZtVnljMmx2Ym5NaUxDSmpiMjF3WVhKbFJXeGxiV1Z1ZEhOZklpd2lVMkZtWlZWeWJDSXNJbkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWTmhabVZWY214WGNtRndjR1ZrVm1Gc2RXVmZJaXdpVTBGR1JWOVZVa3hmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZklpd2lTVTVPVDBOVlQxVlRYMU5VVWtsT1J5SXNJbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU0lzSWxOQlJrVmZUVWxOUlY5VVdWQkZYMUJCVkZSRlVrNWZJaXdpYVhOVFlXWmxUV2x0WlZSNWNHVWlMQ0ptY205dFFteHZZaUlzSWtSQlZFRmZWVkpNWDFCQlZGUkZVazVmSWl3aVpuSnZiVVJoZEdGVmNtd2lMQ0ptY205dFZHVnNWWEpzSWl3aVUwbFFYMVZTVEY5UVFWUlVSVkpPWHlJc0ltWnliMjFUYVhCVmNtd2lMQ0prWldOdlpHVlZVa2xEYjIxd2IyNWxiblFpTENKbWNtOXRSbUZqWldKdmIydE5aWE56Wlc1blpYSlZjbXdpTENKbWNtOXRWMmhoZEhOQmNIQlZjbXdpTENKbWNtOXRVMjF6VlhKc0lpd2lhWE5UYlhOVmNteENiMlI1Vm1Gc2FXUmZJaXdpWm5KdmJWTnphRlZ5YkNJc0luTmhibWwwYVhwbFEyaHliMjFsUlhoMFpXNXphVzl1VlhKc0lpd2ljMkZ1YVhScGVtVkZlSFJsYm5OcGIyNVZjbXhmSWl3aWMyRnVhWFJwZW1WR2FYSmxabTk0UlhoMFpXNXphVzl1VlhKc0lpd2ljMkZ1YVhScGVtVkZaR2RsUlhoMFpXNXphVzl1VlhKc0lpd2labkp2YlZSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkNJc0lsTkJSa1ZmVlZKTVgxQkJWRlJGVWs1Zklpd2lVMEZHUlY5VlVreGZVRUZVVkVWU1RpSXNJbk5oYm1sMGFYcGxJaXdpYzJGdWFYUnBlbVZCYzNObGNuUlZibU5vWVc1blpXUWlMQ0pCUWs5VlZGOUNURUZPU3lJc0lsTmhabVZUZEhsc1pTSXNJbkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWTmhabVZUZEhsc1pWZHlZWEJ3WldSV1lXeDFaVjhpTENKVFFVWkZYMU5VV1V4RlgxUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYeUlzSW1OeVpXRjBaVk5oWm1WVGRIbHNaVk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObElpd2ljMkZ1YVhScGVtVlFjbTl3WlhKMGVWWmhiSFZsWHlJc0luTmhibWwwYVhwbFVISnZjR1Z5ZEhsV1lXeDFaVk4wY21sdVoxOGlMQ0pHVlU1RFZFbFBUbE5mVWtWZklpd2lWVkpNWDFKRlh5SXNJbFpCVEZWRlgxSkZYeUlzSWtOUFRVMUZUbFJmVWtWZklpd2lhR0Z6UW1Gc1lXNWpaV1JSZFc5MFpYTmZJaXdpYUdGelFtRnNZVzVqWldSVGNYVmhjbVZDY21GamEyVjBjMThpTENKellXNXBkR2w2WlZWeWJGOGlMQ0pXUVV4VlJWOUJURXhQVjBWRVgwTklRVkpUWHlJc0lsTmhabVZUZEhsc1pWTm9aV1YwSWl3aWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpWTjBlV3hsVTJobFpYUlhjbUZ3Y0dWa1ZtRnNkV1ZmSWl3aVUwRkdSVjlUVkZsTVJWOVRTRVZGVkY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOGlMQ0pqY21WaGRHVlNkV3hsSWl3aWFHRnpRbUZzWVc1alpXUkNjbUZqYTJWMGMxOGlMQ0pqY21WaGRHVlRZV1psVTNSNWJHVlRhR1ZsZEZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxJaXdpY0c5d0lpd2liR0ZpY3lJc0luVjBhV3dpTENKblpYUk9ZWFJwZG1WVmMyVnlRV2RsYm5SVGRISnBibWRmSWl3aVoyVjBUbUYyYVdkaGRHOXlYeUlzSW5WelpYSkJaMlZ1ZEY4aUxDSnpaWFJWYzJWeVFXZGxiblFpTENKblpYUlZjMlZ5UVdkbGJuUWlMQ0p0WVhSamFGVnpaWEpCWjJWdWRDSXNJbTFoZEdOb1ZYTmxja0ZuWlc1MFNXZHViM0psUTJGelpTSXNJbVY0ZEhKaFkzUldaWEp6YVc5dVZIVndiR1Z6SWl3aVluSnZkM05sY2lJc0ltMWhkR05vVDNCbGNtRmZJaXdpYldGMFkyaEpSVjhpTENKdFlYUmphRVZrWjJWSWRHMXNYeUlzSW0xaGRHTm9SV1JuWlVOb2NtOXRhWFZ0WHlJc0ltMWhkR05vVDNCbGNtRkRhSEp2YldsMWJWOGlMQ0p0WVhSamFFWnBjbVZtYjNoZklpd2liV0YwWTJoVFlXWmhjbWxmSWl3aWJXRjBZMmhEYUhKdmJXVmZJaXdpYldGMFkyaERiMkZ6ZEY4aUxDSnBjMU5wYkdzaUxDSnRZWFJqYUVsdmMxZGxZblpwWlhkZklpd2liV0YwWTJoQmJtUnliMmxrUW5KdmQzTmxjbDhpTENKcGMwTm9jbTl0WlNJc0ltbHpSbWx5WldadmVDSXNJbWx6VDNCbGNtRWlMQ0pwYzBsRklpd2lhWE5GWkdkbElpd2lhWE5GWkdkbFEyaHliMjFwZFcwaUxDSnBjMDl3WlhKaFEyaHliMjFwZFcwaUxDSnBjMU5oWm1GeWFTSXNJbWx6UTI5aGMzUWlMQ0pwYzBsdmMxZGxZblpwWlhjaUxDSnBjMEZ1WkhKdmFXUkNjbTkzYzJWeUlpd2laMlYwVm1WeWMybHZiaUlzSW1kbGRFbEZWbVZ5YzJsdmJsOGlMQ0pwYzFabGNuTnBiMjVQY2tocFoyaGxjaUlzSWxOaFptVklkRzFzSWl3aWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpVaDBiV3hYY21Gd2NHVmtWbUZzZFdWZklpd2lVMEZHUlY5SVZFMU1YMVJaVUVWZlRVRlNTMFZTWDBkUFQwZGZTRlJOVEY5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHlJc0ltUnBjbDhpTENKMWJuZHlZWEJVY25WemRHVmtTRlJOVENJc0ltTnlaV0YwWlZOaFptVklkRzFzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVWlMQ0pvZEcxc1JYTmpZWEJsVUhKbGMyVnlkbWx1WjA1bGQyeHBibVZ6SWl3aWFIUnRiRVZ6WTJGd1pWQnlaWE5sY25acGJtZE9aWGRzYVc1bGMwRnVaRk53WVdObGN5SXNJbFpCVEVsRVgwNUJUVVZUWDBsT1gxUkJSMThpTENKVlVreGZRVlJVVWtsQ1ZWUkZVMThpTENKaFkzUnBiMjRpTENKamFYUmxJaXdpWkdGMFlTSXNJbVp2Y20xaFkzUnBiMjRpTENKb2NtVm1JaXdpYldGdWFXWmxjM1FpTENKd2IzTjBaWElpTENKT1QxUmZRVXhNVDFkRlJGOVVRVWRmVGtGTlJWTmZJaXdpZG1WeWFXWjVWR0ZuVG1GdFpTSXNJbU55WldGMFpWTmhabVZJZEcxc1ZHRm5VMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVaUxDSjBiMVZ3Y0dWeVEyRnpaU0lzSW1OeVpXRjBaVWxtY21GdFpTSXNJbk55WTJSdll5SXNJbU52YldKcGJtVkJkSFJ5YVdKMWRHVnpJaXdpYzJGdVpHSnZlQ0lzSW1OeVpXRjBaVk5oYm1SaWIzaEpabkpoYldVaUxDSmpZVzVWYzJWVFlXNWtZbTk0U1daeVlXMWxJaXdpU0ZSTlRFbEdjbUZ0WlVWc1pXMWxiblFpTENKamNtVmhkR1ZUWTNKcGNIUlRjbU1pTENKamNtVmhkR1ZUZEhsc1pTSXNJbU55WldGMFpVMWxkR0ZTWldaeVpYTm9JaXdpWTI5dWRHVnVkQ0lzSW1kbGRFRjBkSEpPWVcxbFFXNWtWbUZzZFdWZklpd2laMlYwVTNSNWJHVldZV3gxWlY4aUxDSmpjbVZoZEdWWGFYUm9SR2x5SWl3aVkyOXVZMkYwVjJsMGFFUnBjaUlzSW5OMGNtbHVaMmxtZVVGMGRISnBZblYwWlhNaUxDSkVUME5VV1ZCRlgwaFVUVXdpTENKMWJtTm9aV05yWldSamIyNTJaWEp6YVc5dWN5SXNJbk5oWm1WSWRHMXNSbkp2YlZOMGNtbHVaMHR1YjNkdVZHOVRZWFJwYzJaNVZIbHdaVU52Ym5SeVlXTjBJaXdpYzJGbVpWTmpjbWx3ZEVaeWIyMVRkSEpwYm1kTGJtOTNibFJ2VTJGMGFYTm1lVlI1Y0dWRGIyNTBjbUZqZENJc0luTmhabVZUZEhsc1pVWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamRDSXNJbk5oWm1WVGRIbHNaVk5vWldWMFJuSnZiVk4wY21sdVowdHViM2R1Vkc5VFlYUnBjMlo1Vkhsd1pVTnZiblJ5WVdOMElpd2ljMkZtWlZWeWJFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamRDSXNJblJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliRVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkQ0lzSW5OaFptVWlMQ0pKYm5ObGNuUkJaR3BoWTJWdWRFaDBiV3hRYjNOcGRHbHZiaUlzSWtGR1ZFVlNRa1ZIU1U0aUxDSkJSbFJGVWtWT1JDSXNJa0pGUms5U1JVSkZSMGxPSWl3aVFrVkdUMUpGUlU1RUlpd2lhVzV6WlhKMFFXUnFZV05sYm5SSWRHMXNJaXdpYVc1elpYSjBRV1JxWVdObGJuUklWRTFNSWl3aVUwVlVYMGxPVGtWU1gwaFVUVXhmUkVsVFFVeE1UMWRGUkY5VVFVZFRYeUlzSW1selNXNXVaWEpJZEcxc1EyeGxZVzUxY0ZKbFkzVnljMmwyWlY4aUxDSm1hWEp6ZEVOb2FXeGtJaXdpYVc1dVpYSklWRTFNSWl3aWNHRnlaVzUwUld4bGJXVnVkQ0lzSW5WdWMyRm1aVk5sZEVsdWJtVnlTSFJ0YkVSdlRtOTBWWE5sVDNKRmJITmxJaXdpYkdGemRFTm9hV3hrSWl3aWMyVjBTVzV1WlhKSWRHMXNJaXdpZEdGblRtRnRaU0lzSW5ObGRFOTFkR1Z5U0hSdGJDSXNJbTkxZEdWeVNGUk5UQ0lzSW5ObGRFWnZjbTFGYkdWdFpXNTBRV04wYVc5dUlpd2ljMlYwUW5WMGRHOXVSbTl5YlVGamRHbHZiaUlzSW1admNtMUJZM1JwYjI0aUxDSnpaWFJKYm5CMWRFWnZjbTFCWTNScGIyNGlMQ0p6WlhSVGRIbHNaU0lzSW1OemMxUmxlSFFpTENKa2IyTjFiV1Z1ZEZkeWFYUmxJaXdpYzJWMFFXNWphRzl5U0hKbFppSXNJbk5sZEVsdFlXZGxVM0pqSWl3aWMyVjBRWFZrYVc5VGNtTWlMQ0p6WlhSV2FXUmxiMU55WXlJc0luTmxkRVZ0WW1Wa1UzSmpJaXdpYzJWMFJuSmhiV1ZUY21NaUxDSnpaWFJKWm5KaGJXVlRjbU1pTENKelpYUkpabkpoYldWVGNtTmtiMk1pTENKelpYUk1hVzVyU0hKbFprRnVaRkpsYkNJc0luSmxiQ0lzSW5ObGRFOWlhbVZqZEVSaGRHRWlMQ0p6WlhSVFkzSnBjSFJUY21NaUxDSnpaWFJUWTNKcGNIUkRiMjUwWlc1MElpd2lkR1Y0ZENJc0luTmxkRXh2WTJGMGFXOXVTSEpsWmlJc0ltRnpjMmxuYmt4dlkyRjBhVzl1SWl3aVlYTnphV2R1SWl3aWNtVndiR0ZqWlV4dlkyRjBhVzl1SWl3aWIzQmxia2x1VjJsdVpHOTNJaXdpY0dGeWMyVkdjbTl0VTNSeWFXNW5TSFJ0YkNJc0luQmhjbk5sUm5KdmJWTjBjbWx1WnlJc0ltTnlaV0YwWlVsdFlXZGxSbkp2YlVKc2IySWlMQ0pKYldGblpTSXNJa1JGVkVWRFZGOUVUMVZDVEVWZlJWTkRRVkJKVGtjaUxDSkdUMUpEUlY5T1QwNWZSRTlOWDBoVVRVeGZWVTVGVTBOQlVFbE9SeUlzSWxWdWFXTnZaR1VpTENKT1FsTlFJaXdpYzNWaWN5SXNJbU52Ykd4aGNITmxWMmhwZEdWemNHRmpaU0lzSW1selJXMXdkSGxUZEhKcGJtY2lMQ0pwYzBWdGNIUjVUM0pYYUdsMFpYTndZV05sVTJGbVpTSXNJbTFoYTJWVFlXWmxJaXdpYVhORmJYQjBlVk5oWm1VaUxDSnBjMEp5WldGcmFXNW5WMmhwZEdWemNHRmpaU0lzSW1selFXeHdhR0VpTENKcGMwNTFiV1Z5YVdNaUxDSnBjMEZzY0doaFRuVnRaWEpwWXlJc0ltbHpVM0JoWTJVaUxDSnBjMVZ1YVdOdlpHVkRhR0Z5SWl3aWMzUnlhWEJPWlhkc2FXNWxjeUlzSW1OaGJtOXVhV05oYkdsNlpVNWxkMnhwYm1Weklpd2libTl5YldGc2FYcGxWMmhwZEdWemNHRmpaU0lzSW01dmNtMWhiR2w2WlZOd1lXTmxjeUlzSW1OdmJHeGhjSE5sUW5KbFlXdHBibWRUY0dGalpYTWlMQ0owY21sdFRHVm1kQ0lzSW5SeWFXMVNhV2RvZENJc0ltNTFiV0psY2tGM1lYSmxRMjl0Y0dGeVpWOGlMQ0pwYzA1aFRpSXNJbWx1ZEVGM1lYSmxRMjl0Y0dGeVpTSXNJbVpzYjJGMFFYZGhjbVZEYjIxd1lYSmxJaXdpYm5WdFpYSmhkR1ZEYjIxd1lYSmxJaXdpZFhKc1JXNWpiMlJsSWl3aWRYSnNSR1ZqYjJSbElpd2lSVjlTUlY4aUxDSjFibVZ6WTJGd1pVVnVkR2wwYVdWeklpd2lkVzVsYzJOaGNHVkZiblJwZEdsbGMxVnphVzVuUkc5dFh5SXNJblZ1WlhOallYQmxVSFZ5WlZodGJFVnVkR2wwYVdWelh5SXNJblZ1WlhOallYQmxSVzUwYVhScFpYTlhhWFJvUkc5amRXMWxiblFpTENKSVZFMU1YMFZPVkVsVVdWOVFRVlJVUlZKT1h5SXNJazUxYldKbGNpSXNJbTV2WkdWV1lXeDFaU0lzSW5CeVpYTmxjblpsVTNCaFkyVnpJaXdpYzNSeWFYQlJkVzkwWlhNaUxDSjBjblZ1WTJGMFpTSXNJblJ5ZFc1allYUmxUV2xrWkd4bElpd2ljM0JsWTJsaGJFVnpZMkZ3WlVOb1lYSnpYeUlzSW1welJYTmpZWEJsUTJGamFHVmZJaXdpY1hWdmRHVWlMQ0psYzJOaGNHVkRhR0Z5SWl3aVpYTmpZWEJsVTNSeWFXNW5JaXdpWTI5MWJuUlBaaUlzSW5KbGJXOTJaVUZzYkNJc0luSmxaMFY0Y0VWelkyRndaU0lzSW5KbGNHeGhZMlZCYkd3aUxDSndZV1JPZFcxaVpYSWlMQ0owYjBacGVHVmtJaXdpWW5WcGJHUlRkSEpwYm1jaUxDSm5aWFJTWVc1a2IyMVRkSEpwYm1jaUxDSmhZbk1pTENKb1lYTm9RMjlrWlNJc0luVnVhWEYxWlZOMGNtbHVaME52ZFc1MFpYSmZJaXdpWTNKbFlYUmxWVzVwY1hWbFUzUnlhVzVuSWl3aWRHOU9kVzFpWlhJaUxDSk9ZVTRpTENKcGMweHZkMlZ5UTJGdFpXeERZWE5sSWl3aWFYTlZjSEJsY2tOaGJXVnNRMkZ6WlNJc0luUnZRMkZ0Wld4RFlYTmxJaXdpZEc5VFpXeGxZM1J2Y2tOaGMyVWlMQ0owYjFScGRHeGxRMkZ6WlNJc0ltTmhjR2wwWVd4cGVtVWlMQ0p6Y0d4cGRFeHBiV2wwSWl3aWJHRnpkRU52YlhCdmJtVnVkQ0lzSW1Wa2FYUkVhWE4wWVc1alpTSXNJbVZ1WjJsdVpTSXNJbWx6VUhKbGMzUnZJaXdpYVhOVWNtbGtaVzUwSWl3aWFYTlhaV0pMYVhRaUxDSnBjMGRsWTJ0dklpd2laMlYwUlc1bmFXNWxWSFZ3YkdWZklpd2laMlYwVm1WeWMybHZia1p2Y2t0bGVWOGlMQ0p3YkdGMFptOXliU0lzSW1selFXNWtjbTlwWkNJc0ltbHpTWEJ2WkNJc0ltbHpTWEJvYjI1bElpd2lhWE5KY0dGa0lpd2lhWE5KYjNNaUxDSnBjMDFoWTJsdWRHOXphQ0lzSW1selRHbHVkWGdpTENKcGMxZHBibVJ2ZDNNaUxDSnBjME5vY205dFpVOVRJaXdpYVhORGFISnZiV1ZqWVhOMElpd2lhWE5MWVdsUFV5SXNJbWx6UjI4eVVHaHZibVVpTENKeVpXWnNaV04wSWl3aWIySnFaV04wVUhKdmNHVnlkSGtpTENKemFXNXJWbUZzZFdVaUxDSmpZVzVCWTJObGMzTlFjbTl3WlhKMGVTSXNJbU5oWTJobElpd2lRVk5UVlUxRlgwbEZJaXdpUVZOVFZVMUZYMFZFUjBVaUxDSkJVMU5WVFVWZlIwVkRTMDhpTENKQlUxTlZUVVZmVjBWQ1MwbFVJaXdpUVZOVFZVMUZYMDFQUWtsTVJWOVhSVUpMU1ZRaUxDSkJVMU5WVFVWZlQxQkZVa0VpTENKQlUxTlZUVVZmUVU1WlgxWkZVbE5KVDA0aUxDSkNVazlYVTBWU1gwdE9UMWRPWHlJc0ltZGxkRlZ6WlhKQloyVnVkRk4wY21sdVp5SXNJbWRsZEU1aGRtbG5ZWFJ2Y2xSNWNHVmtJaXdpWjJWMFRtRjJhV2RoZEc5eUlpd2lUMUJGVWtFaUxDSkpSU0lzSWtWRVIwVWlMQ0pGUkVkRlgwOVNYMGxGSWl3aVIwVkRTMDhpTENKWFJVSkxTVlFpTENKcGMwMXZZbWxzWlY4aUxDSk5UMEpKVEVVaUxDSlRRVVpCVWtraUxDSmtaWFJsY20xcGJtVlFiR0YwWm05eWJWOGlMQ0pRVEVGVVJrOVNUU0lzSWtGVFUxVk5SVjlOUVVNaUxDSkJVMU5WVFVWZlYwbE9SRTlYVXlJc0lrRlRVMVZOUlY5TVNVNVZXQ0lzSWtGVFUxVk5SVjlZTVRFaUxDSkJVMU5WVFVWZlFVNUVVazlKUkNJc0lrRlRVMVZOUlY5SlVFaFBUa1VpTENKQlUxTlZUVVZmU1ZCQlJDSXNJa0ZUVTFWTlJWOUpVRTlFSWl3aVFWTlRWVTFGWDB0QlNVOVRJaXdpUVZOVFZVMUZYMGRQTWxCSVQwNUZJaXdpVUV4QlZFWlBVazFmUzA1UFYwNWZJaXdpVFVGRElpd2lWMGxPUkU5WFV5SXNJbWx6VEdWbllXTjVUR2x1ZFhoZklpd2lURWxPVlZnaUxDSnBjMWd4TVY4aUxDSmhjSEJXWlhKemFXOXVJaXdpV0RFeElpd2lRVTVFVWs5SlJDSXNJa2xRU0U5T1JTSXNJa2xRUVVRaUxDSkpVRTlFSWl3aVNVOVRJaXdpUzBGSlQxTWlMQ0pIVHpKUVNFOU9SU0lzSW1SbGRHVnliV2x1WlZabGNuTnBiMjVmSWl3aVoyVjBWbVZ5YzJsdmJsSmxaMlY0VW1WemRXeDBYeUlzSW1kbGRFUnZZM1Z0Wlc1MFRXOWtaVjhpTENKd1lYSnpaVVpzYjJGMElpd2laRzlqZFcxbGJuUk5iMlJsSWl3aVZrVlNVMGxQVGlJc0ltTnZiWEJoY21VaUxDSnBjMVpsY25OcGIyNVBja2hwWjJobGNrTmhZMmhsWHlJc0ltbHpWbVZ5YzJsdmJpSXNJbWx6Ukc5amRXMWxiblJOYjJSbFQzSklhV2RvWlhJaUxDSkVUME5WVFVWT1ZGOU5UMFJGSWl3aWFYTkViMk4xYldWdWRFMXZaR1VpTENKd2NtOWtkV04wSWl3aVFWTlRWVTFGWDBaSlVrVkdUMWdpTENKQlUxTlZUVVZmUTBoU1QwMUZJaXdpUVZOVFZVMUZYMU5CUmtGU1NTSXNJbEJTVDBSVlExUmZTMDVQVjA1Zklpd2lSa2xTUlVaUFdDSXNJbWx6U1hCb2IyNWxUM0pKY0c5a1h5SXNJa05JVWs5TlJTSXNJbWx6VTJGbVlYSnBSR1Z6YTNSdmNGOGlMQ0ppWVhObE5qUWlMQ0pFUlVaQlZVeFVYMEZNVUVoQlFrVlVYME5QVFUxUFRsOGlMQ0pGVGtOUFJFVkVYMVpCVEZNaUxDSkZUa05QUkVWRVgxWkJURk5mVjBWQ1UwRkdSU0lzSWtGc2NHaGhZbVYwSWl3aVJFVkdRVlZNVkNJc0lrNVBYMUJCUkVSSlRrY2lMQ0pYUlVKVFFVWkZJaXdpVjBWQ1UwRkdSVjlFVDFSZlVFRkVSRWxPUnlJc0lsZEZRbE5CUmtWZlRrOWZVRUZFUkVsT1J5SXNJbkJoWkdScGJtZERhR0Z5YzE4aUxDSnBjMUJoWkdScGJtZGZJaXdpWW5sMFpWUnZRMmhoY2sxaGNITmZJaXdpWTJoaGNsUnZRbmwwWlUxaGNGOGlMQ0pCVTFOVlRVVmZUa0ZVU1ZaRlgxTlZVRkJQVWxSZklpd2lTRUZUWDA1QlZFbFdSVjlGVGtOUFJFVmZJaXdpWW5SdllTSXNJa2hCVTE5T1FWUkpWa1ZmUkVWRFQwUkZYeUlzSW1WdVkyOWtaVUo1ZEdWQmNuSmhlU0lzSW1sdWFYUmZJaXdpWlc1amIyUmxVM1J5YVc1bklpd2laR1ZqYjJSbFUzUnlhVzVuSWl3aVpHVmpiMlJsVTNSeWFXNW5TVzUwWlhKdVlXeGZJaXdpWkdWamIyUmxVM1J5YVc1blZHOUNlWFJsUVhKeVlYa2lMQ0prWldOdlpHVlRkSEpwYm1kVWIxVnBiblE0UVhKeVlYa2lMQ0pWYVc1ME9FRnljbUY1SWl3aWMzVmlZWEp5WVhraUxDSjFkR2xzY3lJc0luTndiR2wwTmpSTWIzY2lMQ0p6Y0d4cGREWTBTR2xuYUNJc0luTndiR2wwVldsdWREWTBJaXdpYzNCc2FYUkpiblEyTkNJc0luTndiR2wwV21sbmVtRm5OalFpTENKemNHeHBkRVpzYjJGME16SWlMQ0p5YjNWdVpDSXNJbkJ2ZHlJc0lteHZaeUlzSWt4T01pSXNJbk53YkdsMFJteHZZWFEyTkNJc0luTndiR2wwU0dGemFEWTBJaXdpYW05cGJsVnBiblEyTkNJc0ltcHZhVzVKYm5RMk5DSXNJblJ2V21sbmVtRm5OalFpTENKcWIybHVXbWxuZW1Gbk5qUWlMQ0ptY205dFdtbG5lbUZuTmpRaUxDSnFiMmx1Um14dllYUXpNaUlzSWtsdVptbHVhWFI1SWl3aWFtOXBia1pzYjJGME5qUWlMQ0pxYjJsdVNHRnphRFkwSWl3aVJFbEhTVlJUSWl3aVdrVlNUMTlEU0VGU1gwTlBSRVZmSWl3aVFWOURTRUZTWDBOUFJFVmZJaXdpYW05cGJsVnVjMmxuYm1Wa1JHVmphVzFoYkZOMGNtbHVaeUlzSW1wdmFXNVRhV2R1WldSRVpXTnBiV0ZzVTNSeWFXNW5JaXdpYUdGemFEWTBWRzlFWldOcGJXRnNVM1J5YVc1bklpd2lhR0Z6YURZMFFYSnlZWGxVYjBSbFkybHRZV3hUZEhKcGJtZHpJaXdpWkdWamFXMWhiRk4wY21sdVoxUnZTR0Z6YURZMElpd2ljM0JzYVhSRVpXTnBiV0ZzVTNSeWFXNW5JaXdpZEc5SVpYaEVhV2RwZEY4aUxDSm1jbTl0U0dWNFEyaGhja052WkdWZklpd2lhR0Z6YURZMFZHOUlaWGhUZEhKcGJtY2lMQ0pvWlhoVGRISnBibWRVYjBoaGMyZzJOQ0lzSW1oaGMyZzJORlJ2VG5WdFltVnlJaXdpYm5WdFltVnlWRzlJWVhOb05qUWlMQ0pqYjNWdWRGWmhjbWx1ZEhNaUxDSmpiM1Z1ZEZaaGNtbHVkRVpwWld4a2N5SXNJbU52ZFc1MFJtbDRaV1JHYVdWc1pITmZJaXdpWTI5MWJuUkdhWGhsWkRNeVJtbGxiR1J6SWl3aVkyOTFiblJHYVhobFpEWTBSbWxsYkdSeklpd2lZMjkxYm5SRVpXeHBiV2wwWldSR2FXVnNaSE1pTENKa1pXSjFaMEo1ZEdWelZHOVVaWGgwUm05eWJXRjBJaXdpWW5sMFpWTnZkWEpqWlZSdlZXbHVkRGhCY25KaGVTSXNJbVJsWW5WblUyTmhiR0Z5Vkc5VVpYaDBSbTl5YldGMElpd2lRWEp5WVhsQ2RXWm1aWElpTENKQ2RXWm1aWElpTENKQ2FXNWhjbmxFWldOdlpHVnlJaXdpWW5sMFpYTmZJaXdpWTNWeWMyOXlYeUlzSW1WdVpGOGlMQ0p6ZEdGeWRGOGlMQ0psY25KdmNsOGlMQ0p6WlhSQ2JHOWpheUlzSW1sdWMzUmhibU5sUTJGamFHVmZJaXdpWVd4c2IyTWlMQ0ptY21WbElpd2laMlYwUW5WbVptVnlJaXdpWjJWMFJXNWtJaXdpYzJWMFJXNWtJaXdpY21WelpYUWlMQ0puWlhSRGRYSnpiM0lpTENKelpYUkRkWEp6YjNJaUxDSmhaSFpoYm1ObElpd2lZWFJGYm1RaUxDSndZWE4wUlc1a0lpd2laMlYwUlhKeWIzSWlMQ0p5WldGa1UzQnNhWFJXWVhKcGJuUTJOQ0lzSW5KbFlXUlRjR3hwZEZwcFozcGhaMVpoY21sdWREWTBJaXdpY21WaFpGTndiR2wwUm1sNFpXUTJOQ0lzSW5OcmFYQldZWEpwYm5RaUxDSjFibk5yYVhCV1lYSnBiblFpTENKeVpXRmtWVzV6YVdkdVpXUldZWEpwYm5Rek1pSXNJbkpsWVdSVGFXZHVaV1JXWVhKcGJuUXpNaUlzSW5KbFlXUlZibk5wWjI1bFpGWmhjbWx1ZERNeVUzUnlhVzVuSWl3aWNtVmhaRk5wWjI1bFpGWmhjbWx1ZERNeVUzUnlhVzVuSWl3aWNtVmhaRnBwWjNwaFoxWmhjbWx1ZERNeUlpd2ljbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBOalFpTENKeVpXRmtWVzV6YVdkdVpXUldZWEpwYm5RMk5GTjBjbWx1WnlJc0luSmxZV1JUYVdkdVpXUldZWEpwYm5RMk5DSXNJbkpsWVdSVGFXZHVaV1JXWVhKcGJuUTJORk4wY21sdVp5SXNJbkpsWVdSYWFXZDZZV2RXWVhKcGJuUTJOQ0lzSW5KbFlXUmFhV2Q2WVdkV1lYSnBiblJJWVhOb05qUWlMQ0p5WldGa1dtbG5lbUZuVm1GeWFXNTBOalJUZEhKcGJtY2lMQ0p5WldGa1ZXbHVkRGdpTENKeVpXRmtWV2x1ZERFMklpd2ljbVZoWkZWcGJuUXpNaUlzSW5KbFlXUlZhVzUwTmpRaUxDSnlaV0ZrVldsdWREWTBVM1J5YVc1bklpd2ljbVZoWkVsdWREZ2lMQ0p5WldGa1NXNTBNVFlpTENKeVpXRmtTVzUwTXpJaUxDSnlaV0ZrU1c1ME5qUWlMQ0p5WldGa1NXNTBOalJUZEhKcGJtY2lMQ0p5WldGa1JteHZZWFFpTENKeVpXRmtSRzkxWW14bElpd2ljbVZoWkVKdmIyd2lMQ0p5WldGa1JXNTFiU0lzSW5KbFlXUlRkSEpwYm1jaUxDSnlaV0ZrVTNSeWFXNW5WMmwwYUV4bGJtZDBhQ0lzSW5KbFlXUkNlWFJsY3lJc0luSmxZV1JXWVhKcGJuUklZWE5vTmpRaUxDSnlaV0ZrUm1sNFpXUklZWE5vTmpRaUxDSkNhVzVoY25sU1pXRmtaWElpTENKa1pXTnZaR1Z5WHlJc0ltWnBaV3hrUTNWeWMyOXlYeUlzSW01bGVIUkdhV1ZzWkY4aUxDSnVaWGgwVjJseVpWUjVjR1ZmSWl3aWNtVmhaRU5oYkd4aVlXTnJjMThpTENKblpYUkdhV1ZzWkVOMWNuTnZjaUlzSW1kbGRFWnBaV3hrVG5WdFltVnlJaXdpWjJWMFYybHlaVlI1Y0dVaUxDSnBjMFJsYkdsdGFYUmxaQ0lzSW1selJXNWtSM0p2ZFhBaUxDSnVaWGgwUm1sbGJHUWlMQ0oxYm5OcmFYQklaV0ZrWlhJaUxDSnphMmx3VFdGMFkyaHBibWRHYVdWc1pITWlMQ0p6YTJsd1JtbGxiR1FpTENKemEybHdWbUZ5YVc1MFJtbGxiR1FpTENKemEybHdSR1ZzYVcxcGRHVmtSbWxsYkdRaUxDSnphMmx3Um1sNFpXUXpNa1pwWld4a0lpd2ljMnRwY0VacGVHVmtOalJHYVdWc1pDSXNJbk5yYVhCSGNtOTFjQ0lzSW5KbFoybHpkR1Z5VW1WaFpFTmhiR3hpWVdOcklpd2ljblZ1VW1WaFpFTmhiR3hpWVdOcklpd2ljbVZoWkVGdWVTSXNJbkpsWVdSR2FYaGxaRFkwSWl3aWNtVmhaRVpwZUdWa016SWlMQ0p5WldGa1UyWnBlR1ZrTXpJaUxDSnlaV0ZrVTJacGVHVmtOalFpTENKeVpXRmtVMmx1ZERNeUlpd2ljbVZoWkZOcGJuUTJOQ0lzSW5KbFlXUk5aWE56WVdkbElpd2ljbVZoWkVkeWIzVndJaXdpWjJWMFJtbGxiR1JFWldOdlpHVnlJaXdpY21WaFpFbHVkRE15VTNSeWFXNW5JaXdpY21WaFpGVnBiblF6TWxOMGNtbHVaeUlzSW5KbFlXUlRhVzUwTmpSVGRISnBibWNpTENKeVpXRmtSbWw0WldRMk5GTjBjbWx1WnlJc0luSmxZV1JUWm1sNFpXUXpNbE4wY21sdVp5SXNJbkpsWVdSVFptbDRaV1EyTkZOMGNtbHVaeUlzSW5KbFlXUlRhVzUwU0dGemFEWTBJaXdpY21WaFpGQmhZMnRsWkVacFpXeGtYeUlzSW5KbFlXUlFZV05yWldSSmJuUXpNaUlzSW5KbFlXUlFZV05yWldSSmJuUXpNbE4wY21sdVp5SXNJbkpsWVdSUVlXTnJaV1JKYm5RMk5DSXNJbkpsWVdSUVlXTnJaV1JKYm5RMk5GTjBjbWx1WnlJc0luSmxZV1JRWVdOclpXUlZhVzUwTXpJaUxDSnlaV0ZrVUdGamEyVmtWV2x1ZERNeVUzUnlhVzVuSWl3aWNtVmhaRkJoWTJ0bFpGVnBiblEyTkNJc0luSmxZV1JRWVdOclpXUlZhVzUwTmpSVGRISnBibWNpTENKeVpXRmtVR0ZqYTJWa1UybHVkRE15SWl3aWNtVmhaRkJoWTJ0bFpGTnBiblEyTkNJc0luSmxZV1JRWVdOclpXUlRhVzUwTmpSVGRISnBibWNpTENKeVpXRmtVR0ZqYTJWa1JtbDRaV1F6TWlJc0luSmxZV1JRWVdOclpXUkdhWGhsWkRZMElpd2ljbVZoWkZCaFkydGxaRVpwZUdWa05qUlRkSEpwYm1jaUxDSnlaV0ZrVUdGamEyVmtVMlpwZUdWa016SWlMQ0p5WldGa1VHRmphMlZrVTJacGVHVmtOalFpTENKeVpXRmtVR0ZqYTJWa1UyWnBlR1ZrTmpSVGRISnBibWNpTENKeVpXRmtVR0ZqYTJWa1JteHZZWFFpTENKeVpXRmtVR0ZqYTJWa1JHOTFZbXhsSWl3aWNtVmhaRkJoWTJ0bFpFSnZiMndpTENKeVpXRmtVR0ZqYTJWa1JXNTFiU0lzSW5KbFlXUlFZV05yWldSV1lYSnBiblJJWVhOb05qUWlMQ0p5WldGa1VHRmphMlZrUm1sNFpXUklZWE5vTmpRaUxDSkNhVzVoY25sRmJtTnZaR1Z5SWl3aVluVm1abVZ5WHlJc0ltVnVaQ0lzSW5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNJc0luZHlhWFJsVTNCc2FYUkdhWGhsWkRZMElpd2lkM0pwZEdWVmFXNTBNeklpTENKM2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SWlMQ0ozY21sMFpWTnBaMjVsWkZaaGNtbHVkRE15SWl3aWQzSnBkR1ZWYm5OcFoyNWxaRlpoY21sdWREWTBJaXdpZDNKcGRHVlRhV2R1WldSV1lYSnBiblEyTkNJc0luZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME16SWlMQ0ozY21sMFpWcHBaM3BoWjFaaGNtbHVkRFkwSWl3aWQzSnBkR1ZhYVdkNllXZFdZWEpwYm5RMk5GTjBjbWx1WnlJc0luZHlhWFJsV21sbmVtRm5WbUZ5YVc1MFNHRnphRFkwSWl3aWQzSnBkR1ZWYVc1ME9DSXNJbmR5YVhSbFZXbHVkREUySWl3aWQzSnBkR1ZWYVc1ME5qUWlMQ0ozY21sMFpVbHVkRGdpTENKM2NtbDBaVWx1ZERFMklpd2lkM0pwZEdWSmJuUXpNaUlzSW5keWFYUmxTVzUwTmpRaUxDSjNjbWwwWlVsdWREWTBVM1J5YVc1bklpd2lkM0pwZEdWR2JHOWhkQ0lzSW5keWFYUmxSRzkxWW14bElpd2lkM0pwZEdWQ2IyOXNJaXdpZDNKcGRHVkZiblZ0SWl3aWQzSnBkR1ZDZVhSbGN5SXNJbmR5YVhSbFZtRnlhVzUwU0dGemFEWTBJaXdpZDNKcGRHVkdhWGhsWkVoaGMyZzJOQ0lzSW5keWFYUmxVM1J5YVc1bklpd2lZWEpwZEdnaUxDSlZTVzUwTmpRaUxDSnNieUlzSW1ocElpd2lZMjF3SWl3aWNtbG5hSFJUYUdsbWRDSXNJbXhsWm5SVGFHbG1kQ0lzSW0xellpSXNJbXh6WWlJc0lucGxjbThpTENKemRXSWlMQ0p0ZFd3ek1uZ3pNaUlzSW0xMWJDSXNJbVJwZGlJc0ltWnliMjFUZEhKcGJtY2lMQ0pKYm5RMk5DSXNJa0pwYm1GeWVWZHlhWFJsY2lJc0ltSnNiMk5yYzE4aUxDSjBiM1JoYkV4bGJtZDBhRjhpTENKbGJtTnZaR1Z5WHlJc0ltSnZiMnR0WVhKcmMxOGlMQ0poY0hCbGJtUlZhVzUwT0VGeWNtRjVYeUlzSW1KbFoybHVSR1ZzYVcxcGRHVmtYeUlzSW5keWFYUmxSbWxsYkdSSVpXRmtaWEpmSWl3aVpXNWtSR1ZzYVcxcGRHVmtYeUlzSW5keWFYUmxVMlZ5YVdGc2FYcGxaRTFsYzNOaFoyVWlMQ0p0WVhsaVpWZHlhWFJsVTJWeWFXRnNhWHBsWkUxbGMzTmhaMlVpTENKblpYUlNaWE4xYkhSQ2RXWm1aWElpTENKblpYUlNaWE4xYkhSQ1lYTmxOalJUZEhKcGJtY2lMQ0ppWldkcGJsTjFZazFsYzNOaFoyVWlMQ0psYm1SVGRXSk5aWE56WVdkbElpd2lkM0pwZEdWQmJua2lMQ0ozY21sMFpVWnBlR1ZrTmpRaUxDSjNjbWwwWlVacGVHVmtNeklpTENKM2NtbDBaVk5tYVhobFpETXlJaXdpZDNKcGRHVlRabWw0WldRMk5DSXNJbmR5YVhSbFUybHVkRE15SWl3aWQzSnBkR1ZUYVc1ME5qUWlMQ0ozY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpKZklpd2lkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNbDhpTENKM2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUmZJaXdpZDNKcGRHVlRhV2R1WldSV1lYSnBiblEyTkY4aUxDSjNjbWwwWlZwcFozcGhaMVpoY21sdWRETXlYeUlzSW5keWFYUmxXbWxuZW1GblZtRnlhVzUwTmpSZklpd2lkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUTJORk4wY21sdVoxOGlMQ0ozY21sMFpWcHBaM3BoWjFaaGNtbHVkRWhoYzJnMk5GOGlMQ0ozY21sMFpVbHVkRE15VTNSeWFXNW5JaXdpZDNKcGRHVlZhVzUwTXpKVGRISnBibWNpTENKM2NtbDBaVlZwYm5RMk5GTjBjbWx1WnlJc0luZHlhWFJsVTJsdWRFaGhjMmcyTkNJc0luZHlhWFJsVTJsdWREWTBVM1J5YVc1bklpd2lkM0pwZEdWR2FYaGxaRFkwVTNSeWFXNW5JaXdpZDNKcGRHVlRabWw0WldRMk5GTjBjbWx1WnlJc0luZHlhWFJsVFdWemMyRm5aU0lzSW5keWFYUmxUV1Z6YzJGblpWTmxkQ0lzSW5keWFYUmxSM0p2ZFhBaUxDSjNjbWwwWlZOd2JHbDBXbWxuZW1GblZtRnlhVzUwTmpRaUxDSjNjbWwwWlZKbGNHVmhkR1ZrU1c1ME16SWlMQ0ozY21sMFpWSmxjR1ZoZEdWa1NXNTBNekpUZEhKcGJtY2lMQ0ozY21sMFpWSmxjR1ZoZEdWa1NXNTBOalFpTENKM2NtbDBaVkpsY0dWaGRHVmtVM0JzYVhSR2FYaGxaRFkwSWl3aWQzSnBkR1ZTWlhCbFlYUmxaRk53YkdsMFZtRnlhVzUwTmpRaUxDSjNjbWwwWlZKbGNHVmhkR1ZrVTNCc2FYUmFhV2Q2WVdkV1lYSnBiblEyTkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JKYm5RMk5GTjBjbWx1WnlJc0luZHlhWFJsVW1Wd1pXRjBaV1JWYVc1ME16SWlMQ0ozY21sMFpWSmxjR1ZoZEdWa1ZXbHVkRE15VTNSeWFXNW5JaXdpZDNKcGRHVlNaWEJsWVhSbFpGVnBiblEyTkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JWYVc1ME5qUlRkSEpwYm1jaUxDSjNjbWwwWlZKbGNHVmhkR1ZrVTJsdWRETXlJaXdpZDNKcGRHVlNaWEJsWVhSbFpGTnBiblEyTkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JUYVc1ME5qUlRkSEpwYm1jaUxDSjNjbWwwWlZKbGNHVmhkR1ZrVTJsdWRFaGhjMmcyTkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JHYVhobFpETXlJaXdpZDNKcGRHVlNaWEJsWVhSbFpFWnBlR1ZrTmpRaUxDSjNjbWwwWlZKbGNHVmhkR1ZrUm1sNFpXUTJORk4wY21sdVp5SXNJbmR5YVhSbFVtVndaV0YwWldSVFptbDRaV1F6TWlJc0luZHlhWFJsVW1Wd1pXRjBaV1JUWm1sNFpXUTJOQ0lzSW5keWFYUmxVbVZ3WldGMFpXUlRabWw0WldRMk5GTjBjbWx1WnlJc0luZHlhWFJsVW1Wd1pXRjBaV1JHYkc5aGRDSXNJbmR5YVhSbFVtVndaV0YwWldSRWIzVmliR1VpTENKM2NtbDBaVkpsY0dWaGRHVmtRbTl2YkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JGYm5WdElpd2lkM0pwZEdWU1pYQmxZWFJsWkZOMGNtbHVaeUlzSW5keWFYUmxVbVZ3WldGMFpXUkNlWFJsY3lJc0luZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxJaXdpZDNKcGRHVlNaWEJsWVhSbFpFZHliM1Z3SWl3aWQzSnBkR1ZTWlhCbFlYUmxaRVpwZUdWa1NHRnphRFkwSWl3aWQzSnBkR1ZTWlhCbFlYUmxaRlpoY21sdWRFaGhjMmcyTkNJc0luZHlhWFJsVUdGamEyVmtTVzUwTXpJaUxDSjNjbWwwWlZCaFkydGxaRWx1ZERNeVUzUnlhVzVuSWl3aWQzSnBkR1ZRWVdOclpXUkpiblEyTkNJc0luZHlhWFJsVUdGamEyVmtVM0JzYVhSR2FYaGxaRFkwSWl3aWQzSnBkR1ZRWVdOclpXUlRjR3hwZEZaaGNtbHVkRFkwSWl3aWQzSnBkR1ZRWVdOclpXUlRjR3hwZEZwcFozcGhaMVpoY21sdWREWTBJaXdpZDNKcGRHVlFZV05yWldSSmJuUTJORk4wY21sdVp5SXNJbmR5YVhSbFVHRmphMlZrVldsdWRETXlJaXdpZDNKcGRHVlFZV05yWldSVmFXNTBNekpUZEhKcGJtY2lMQ0ozY21sMFpWQmhZMnRsWkZWcGJuUTJOQ0lzSW5keWFYUmxVR0ZqYTJWa1ZXbHVkRFkwVTNSeWFXNW5JaXdpZDNKcGRHVlFZV05yWldSVGFXNTBNeklpTENKM2NtbDBaVkJoWTJ0bFpGTnBiblEyTkNJc0luZHlhWFJsVUdGamEyVmtVMmx1ZERZMFUzUnlhVzVuSWl3aWQzSnBkR1ZRWVdOclpXUlRhVzUwU0dGemFEWTBJaXdpZDNKcGRHVlFZV05yWldSR2FYaGxaRE15SWl3aWQzSnBkR1ZRWVdOclpXUkdhWGhsWkRZMElpd2lkM0pwZEdWUVlXTnJaV1JHYVhobFpEWTBVM1J5YVc1bklpd2lkM0pwZEdWUVlXTnJaV1JUWm1sNFpXUXpNaUlzSW5keWFYUmxVR0ZqYTJWa1UyWnBlR1ZrTmpRaUxDSjNjbWwwWlZCaFkydGxaRk5tYVhobFpEWTBVM1J5YVc1bklpd2lkM0pwZEdWUVlXTnJaV1JHYkc5aGRDSXNJbmR5YVhSbFVHRmphMlZrUkc5MVlteGxJaXdpZDNKcGRHVlFZV05yWldSQ2IyOXNJaXdpZDNKcGRHVlFZV05yWldSRmJuVnRJaXdpZDNKcGRHVlFZV05yWldSR2FYaGxaRWhoYzJnMk5DSXNJbmR5YVhSbFVHRmphMlZrVm1GeWFXNTBTR0Z6YURZMElpd2lUV0Z3SWl3aVlYSnlYeUlzSW5aaGJIVmxRM1J2Y2w4aUxDSnRZWEJmSWl3aVlYSnlRMnhsWVc0aUxDSnNiMkZrUm5KdmJVRnljbUY1WHlJc0lrVnVkSEo1WHlJc0luWmhiSFZsVjNKaGNIQmxjaUlzSW5OMGNtbHVaMHRsZVhOZklpd2lkM0poY0VWdWRISjVYeUlzSW1aeWIyMVBZbXBsWTNRaUxDSkJjbkpoZVVsMFpYSmhkRzl5U1hSbGNtRmliR1ZmSWl3aWFXUjRYeUlzSW01bGVIUWlMQ0prYjI1bElpd2lhWFJsY21GMGIzSWlMQ0puWlhSTVpXNW5kR2dpTENKa1pXd2lMQ0puWlhSRmJuUnllVXhwYzNRaUxDSmxiblJ5YVdWeklpd2lhMlY1Y3lJc0luWmhiSFZsY3lJc0ltaGhjeUlzSW5ObGNtbGhiR2w2WlVKcGJtRnllU0lzSW1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SWl3aVJYaDBaVzV6YVc5dVJtbGxiR1JKYm1adklpd2labWxsYkdSSmJtUmxlQ0lzSW1acFpXeGtUbUZ0WlNJc0ltTjBiM0lpTENKMGIwOWlhbVZqZEVadUlpd2lhWE5TWlhCbFlYUmxaQ0lzSWtWNGRHVnVjMmx2YmtacFpXeGtRbWx1WVhKNVNXNW1ieUlzSW1acFpXeGtTVzVtYnlJc0ltSnBibUZ5ZVZKbFlXUmxja1p1SWl3aVltbHVZWEo1VjNKcGRHVnlSbTRpTENKaWFXNWhjbmxOWlhOellXZGxVMlZ5YVdGc2FYcGxSbTRpTENKaWFXNWhjbmxOWlhOellXZGxSR1Z6WlhKcFlXeHBlbVZHYmlJc0ltbHpVR0ZqYTJWa0lpd2lhWE5OWlhOellXZGxWSGx3WlNJc0lrMWxjM05oWjJVaUxDSkhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUWlMQ0pIUlU1RlVrRlVSVjlHVWs5TlgwOUNTa1ZEVkNJc0lrZEZUa1ZTUVZSRlgxUlBYMU5VVWtsT1J5SXNJa0ZUVTFWTlJWOU1UME5CVEY5QlVsSkJXVk1pTENKVFJWSkpRVXhKV2tWZlJVMVFWRmxmVkZKQlNVeEpUa2RmUmtsRlRFUlRJaXdpVTFWUVVFOVNWRk5mVlVsT1ZEaEJVbEpCV1Y4aUxDSm5aWFJLYzFCaVRXVnpjMkZuWlVsa0lpd2liV1Z6YzJGblpVbGtYeUlzSW1kbGRFbHVaR1Y0WHlJc0ltRnljbUY1U1c1a1pYaFBabVp6WlhSZklpd2lhR2xrWkdWdVJWTTJVSEp2Y0dWeWRIbGZJaXdpWjJWMFJtbGxiR1JPZFcxaVpYSmZJaXdpYVc1cGRHbGhiR2w2WlNJc0luZHlZWEJ3WlhKelh5SXNJbWx1YVhSUWFYWnZkRUZ1WkVWNGRHVnVjMmx2Yms5aWFtVmpkRjhpTENKamIyNTJaWEowWldSUWNtbHRhWFJwZG1WR2FXVnNaSE5mSWl3aWNtVndaV0YwWldSR2FXVnNaSE1pTENKd2FYWnZkRjhpTENKRlRWQlVXVjlNU1ZOVVgxTkZUbFJKVGtWTVh5SXNJbTFoZVdKbFNXNXBkRVZ0Y0hSNVJYaDBaVzV6YVc5dVQySnFaV04wWHlJc0ltVjRkR1Z1YzJsdmJrOWlhbVZqZEY4aUxDSmpiMjF3ZFhSbFQyNWxiMlpEWVhObElpd2lhWE5CY25KaGVWOGlMQ0pwYzBWNGRHVnVjMmx2Yms5aWFtVmpkRjhpTENKTlFWaGZWa0ZNVlVVaUxDSjBiMDlpYW1WamRFeHBjM1FpTENKMGIwOWlhbVZqZEVWNGRHVnVjMmx2YmlJc0luTmxjbWxoYkdsNlpVSnBibUZ5ZVVWNGRHVnVjMmx2Ym5NaUxDSnlaV0ZrUW1sdVlYSjVSWGgwWlc1emFXOXVJaXdpWjJWMFJtbGxiR1FpTENKblpYUlNaWEJsWVhSbFpFWnBaV3hrSWl3aVoyVjBUM0IwYVc5dVlXeEdiRzloZEdsdVoxQnZhVzUwUm1sbGJHUWlMQ0puWlhSQ2IyOXNaV0Z1Um1sbGJHUWlMQ0puWlhSU1pYQmxZWFJsWkVac2IyRjBhVzVuVUc5cGJuUkdhV1ZzWkNJc0ltZGxkRkpsY0dWaGRHVmtRbTl2YkdWaGJrWnBaV3hrSWl3aVlubDBaWE5CYzBJMk5DSXNJbUo1ZEdWelFYTlZPQ0lzSW1KNWRHVnpUR2x6ZEVGelFqWTBJaXdpWVhOelpYSjBRMjl1YzJsemRHVnVkRlI1Y0dWelh5SXNJbUo1ZEdWelRHbHpkRUZ6VlRnaUxDSm5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBJaXdpWjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFpTENKblpYUkdiRzloZEdsdVoxQnZhVzUwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ0lzSW1kbGRFWnBaV3hrVUhKdmRHOHpJaXdpWjJWMFRXRndSbWxsYkdRaUxDSnpaWFJHYVdWc1pDSXNJbk5sZEZCeWIzUnZNMGx1ZEVacFpXeGtJaXdpYzJWMFJtbGxiR1JKWjI1dmNtbHVaMFJsWm1GMWJIUmZJaXdpYzJWMFVISnZkRzh6Um14dllYUkdhV1ZzWkNJc0luTmxkRkJ5YjNSdk0wSnZiMnhsWVc1R2FXVnNaQ0lzSW5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0lpd2ljMlYwVUhKdmRHOHpRbmwwWlhOR2FXVnNaQ0lzSW5ObGRGQnliM1J2TTBWdWRXMUdhV1ZzWkNJc0luTmxkRkJ5YjNSdk0xTjBjbWx1WjBsdWRFWnBaV3hrSWl3aVlXUmtWRzlTWlhCbFlYUmxaRVpwWld4a0lpd2ljMlYwVDI1bGIyWkdhV1ZzWkNJc0ltZGxkRmR5WVhCd1pYSkdhV1ZzWkNJc0ltZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrSWl3aWQzSmhjRkpsY0dWaGRHVmtSbWxsYkdSZklpd2ljMlYwVjNKaGNIQmxja1pwWld4a0lpd2ljMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FpTENKelpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ0lzSW1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FpTENKMGIwMWhjQ0lzSW5ONWJtTk5ZWEJHYVdWc1pITmZJaXdpWjJWMFJYaDBaVzV6YVc5dUlpd2ljMlYwUlhoMFpXNXphVzl1SWl3aVpHbG1abVZ5Wlc1alpTSXNJbU52YlhCaGNtVkdhV1ZzWkhNaUxDSmpiMjF3WVhKbFJYaDBaVzV6YVc5dWN5SXNJbU5zYjI1bFRXVnpjMkZuWlNJc0ltTnNiMjVsWHlJc0ltTnZjSGxKYm5Sdklpd2ljbVZuYVhOMFpYSk5aWE56WVdkbFZIbHdaU0lzSW0xbGMzTmhaMlZKWkNJc0ltMWxjM05oWjJWVFpYUkZlSFJsYm5OcGIyNXpJaXdpYldWemMyRm5aVk5sZEVWNGRHVnVjMmx2Ym5OQ2FXNWhjbmtpTENKRmVIQnZjblFpTENKa1pXWmhkV3gwSWl3aVRXVjBZV1JoZEdFaUxDSkNjbTkzYzJWeVNHVmhaR1Z5Y3lJc0luVWlMQ0pqYkdsbGJuUWlMQ0p6ZEdGeWRHVmtJaXdpYzJWdWRFWnBjbk4wVFdWemMyRm5aU0lzSW1OdmJYQnNaWFJsWkNJc0ltTnNiM05sWkNJc0ltWnBibWx6YUdWa1UyVnVaR2x1WnlJc0ltOXVTR1ZoWkdWeWMwTmhiR3hpWVdOcmN5SXNJbTl1VFdWemMyRm5aVU5oYkd4aVlXTnJjeUlzSW05dVJXNWtRMkZzYkdKaFkydHpJaXdpY0dGeWMyVnlJaXdpUTJoMWJtdFFZWEp6WlhJaUxDSnRaWFJvYjJSRVpXWnBibWwwYVc5dUlpd2ljSEp2Y0hNaUxDSmpjbVZoZEdWVWNtRnVjM0J2Y25RaUxDSm9iM04wSWl3aWMyVnlkbWxqWlNJc0luTmxjblpwWTJWT1lXMWxJaXdpYldWMGFHOWtUbUZ0WlNJc0ltOXVTR1ZoWkdWeWN5SXNJbTl1VkhKaGJuTndiM0owU0dWaFpHVnljeUlzSW05dVEyaDFibXNpTENKdmJsUnlZVzV6Y0c5eWRFTm9kVzVySWl3aWIyNUZibVFpTENKdmJsUnlZVzV6Y0c5eWRFVnVaQ0lzSW5SeVlXNXpjRzl5ZENJc0ltMWhhMlZFWldaaGRXeDBWSEpoYm5Od2IzSjBJaXdpY21WemNHOXVjMlZJWldGa1pYSnpJaXdpYUhSMGNGTjBZWFIxYzFSdlEyOWtaU0lzSW5KaGQwOXVTR1ZoWkdWeWN5SXNJa052WkdVaUxDSlBTeUlzSW1SbFkyOWtaVWRTVUVOVGRHRjBkWE1pTENKeVlYZFBia1Z5Y205eUlpd2ljR0Z5YzJVaUxDSkpiblJsY201aGJDSXNJbU5vZFc1clZIbHdaU0lzSWtOb2RXNXJWSGx3WlNJc0luSmxjM0J2Ym5ObFZIbHdaU0lzSW5KaGQwOXVUV1Z6YzJGblpTSXNJbFJTUVVsTVJWSlRJaXdpY21WemNHOXVjMlZVY21GcGJHVnljeUlzSW5SeVlXbHNaWEp6SWl3aWNtRjNUMjVGYm1RaUxDSlZibXR1YjNkdUlpd2liMjVOWlhOellXZGxJaXdpYzNSaGNuUWlMQ0p5WlhGMVpYTjBVM1J5WldGdElpd2labkpoYldWU1pYRjFaWE4wSWl3aWMyVnVaRTFsYzNOaFoyVWlMQ0ptYVc1cGMyaFRaVzVrSWl3aVkyeHZjMlVpTENKallXNWpaV3dpTENKemNHeHBkRlpoYkhWbGN5SXNJbWhsWVdSbGNuTk5ZWEFpTENKSVpXRmtaWEp6SWl3aVoyVjBTR1ZoWkdWeVMyVjVjeUlzSW1kbGRFaGxZV1JsY2xaaGJIVmxjeUlzSW1Gd2NHVnVaQ0lzSW5Od2JHbDBTR1ZoWkdWeVZtRnNkV1VpTENKaGNIQmxibVJHY205dFUzUnlhVzVuSWl3aVpHVnNaWFJsSWl3aWJtOXliV0ZzYVhwbFRtRnRaU0lzSW01dmNtMWhiR2w2WlZaaGJIVmxJaXdpZEc5SVpXRmtaWEp6SWl3aWFYUmxjbUYwWlVobFlXUmxjbk1pTENKcGRHVnlZWFJsU0dWaFpHVnljMHRsZVhNaUxDSm5aWFJCYkd3aUxDSkRjbTl6YzBKeWIzZHpaWEpJZEhSd1ZISmhibk53YjNKMElpd2lkMmwwYUVOeVpXUmxiblJwWVd4eklpd2ljMlYwUkdWbVlYVnNkRlJ5WVc1emNHOXlkRVpoWTNSdmNua2lMQ0prWlhSbFkzUkdaWFJqYUZOMWNIQnZjblFpTENKamNtVmtaVzUwYVdGc2N5SXNJa1psZEdOb1VtVmhaR0ZpYkdWVGRISmxZVzFVY21GdWMzQnZjblFpTENKWWFISlVjbUZ1YzNCdmNuUWlMQ0pmWDJGemMybG5iaUlzSW1OaGJtTmxiR3hsWkNJc0ltTnZiblJ5YjJ4c1pYSWlMQ0pCWW05eWRFTnZiblJ5YjJ4c1pYSWlMQ0p2Y0hScGIyNXpJaXdpYVc1cGRDSXNJbkIxYlhBaUxDSnlaV0ZrWlhJaUxDSnlaV0ZrSWl3aWRHaGxiaUlzSW1OaGRHTm9JaXdpWm1WMFkyZ2lMQ0pvWldGa1pYSnpJaXdpYldWMFlXUmhkR0VpTENKdFpYUm9iMlFpTENKaWIyUjVJaXdpYzJsbmJtRnNJaXdpWjJWMFVtVmhaR1Z5SWl3aVlXSnZjblFpTENKU1pYTndiMjV6WlNJc0lsOWZaWGgwWlc1a2N5SXNJbk5sZEZCeWIzUnZkSGx3WlU5bUlpd2lYMTl3Y205MGIxOWZJaXdpWkdWMFpXTjBUVzk2V0VoU1UzVndjRzl5ZENJc0ltUmxkR1ZqZEZoSVVrOTJaWEp5YVdSbFRXbHRaVlI1Y0dWVGRYQndiM0owSWl3aWIyNVFjbTluY21WemMwVjJaVzUwSWl3aWVHaHlJaXdpY21WemNHOXVjMlVpTENKdmJreHZZV1JGZG1WdWRDSXNJbTl1VTNSaGRHVkRhR0Z1WjJVaUxDSklSVUZFUlZKVFgxSkZRMFZKVmtWRUlpd2laMlYwUVd4c1VtVnpjRzl1YzJWSVpXRmtaWEp6SWl3aVkyOXVabWxuZFhKbFdHaHlJaXdpYzJWMFVtVnhkV1Z6ZEVobFlXUmxjaUlzSWtKdmIyeGxZVzRpTENKaFpHUkZkbVZ1ZEV4cGMzUmxibVZ5SWl3aWIzWmxjbkpwWkdWTmFXMWxWSGx3WlNJc0lsaElVaUlzSW1OdlpHVlFiMmx1ZEVGMElpd2lUVzk2UTJoMWJtdGxaRUZ5Y21GNVFuVm1abVZ5V0VoU0lpd2ljM1J5YVc1blZHOUJjbkpoZVVKMVptWmxjaUlzSW1kbGRGVnBiblE0SWl3aVoyVjBWV2x1ZERNeUlpd2lZbmwwWlV4bGJtZDBhQ0lzSW1SbFkyOWtaVUZUUTBsSklpd2laVzVqYjJSbFFWTkRTVWtpTENKaWRXWm1aWElpTENKd2IzTnBkR2x2YmlJc0lrUmhkR0ZXYVdWM0lpd2lZbmwwWlU5bVpuTmxkQ0lzSW5raUxDSkRZVzVqWld4bFpDSXNJa2x1ZG1Gc2FXUkJjbWQxYldWdWRDSXNJa1JsWVdSc2FXNWxSWGhqWldWa1pXUWlMQ0pPYjNSR2IzVnVaQ0lzSWtGc2NtVmhaSGxGZUdsemRITWlMQ0pRWlhKdGFYTnphVzl1UkdWdWFXVmtJaXdpVW1WemIzVnlZMlZGZUdoaGRYTjBaV1FpTENKR1lXbHNaV1JRY21WamIyNWthWFJwYjI0aUxDSkJZbTl5ZEdWa0lpd2lUM1YwVDJaU1lXNW5aU0lzSWxWdWFXMXdiR1Z0Wlc1MFpXUWlMQ0pWYm1GMllXbHNZV0pzWlNJc0lrUmhkR0ZNYjNOeklpd2lWVzVoZFhSb1pXNTBhV05oZEdWa0lpd2ljMlYwUkdWbVlYVnNkRlJ5WVc1emNHOXlkQ0lzSWxkbFluTnZZMnRsZEZSeVlXNXpjRzl5ZENJc0ltbHVkbTlyWlNJc0luVnVZWEo1SWl3aVozSndZeUlzSW5ob2NsTjFjSEJ2Y25SelVtVnpjRzl1YzJWVWVYQmxJaXdpUmtsT1NWTklYMU5GVGtRaUxDSkpiblE0UVhKeVlYa2lMQ0pEVDA1T1JVTlVTVTVISWl3aVYyVmlVMjlqYTJWMElpd2lZbWx1WVhKNVZIbHdaU0lzSW05dWIzQmxiaUlzSW05dVkyeHZjMlVpTENKdmJtVnljbTl5SWl3aWIyNXRaWE56WVdkbElpd2ljbVZ4ZFdWemRDSXNJbk5sZEZWcGJuUXpNaUlzSW5KbGMzQnZibk5sVTNSeVpXRnRJaXdpYzNSaGRIVnpUV1Z6YzJGblpTSXNJbWR2YjJkc1pWOXdjbTkwYjJKMVpsOWhibmxmY0dJaUxDSndjbTkwYnlJc0ltZHZiMmRzWlNJc0luSndZeUlzSWxOMFlYUjFjeUlzSW05d2RGOWtZWFJoSWl3aWNtVndaV0YwWldSR2FXVnNaSE5mSWl3aWIzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTSXNJbWx1WTJ4MVpHVkpibk4wWVc1alpTSXNJbTF6WnlJc0ltOWlhaUlzSW1OdlpHVWlMQ0prWlhSaGFXeHpUR2x6ZENJc0ltZGxkRVJsZEdGcGJITk1hWE4wSWl3aVFXNTVJaXdpSkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVaUxDSmllWFJsY3lJc0ltUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpSXNJbk5sZEVOdlpHVWlMQ0p6WlhSTlpYTnpZV2RsSWl3aVlXUmtSR1YwWVdsc2N5SXNJbmR5YVhSbGNpSXNJbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlpd2lkVzVrWldacGJtVmtJaXdpWjJWMFEyOWtaU0lzSW1kbGRFMWxjM05oWjJVaUxDSnpaWFJFWlhSaGFXeHpUR2x6ZENJc0ltOXdkRjkyWVd4MVpTSXNJbTl3ZEY5cGJtUmxlQ0lzSW5CeWIzUnZZblZtSWl3aVkyeGxZWEpFWlhSaGFXeHpUR2x6ZENJc0ltZHZiMmRzWlY5d2NtOTBiMkoxWmw5a2RYSmhkR2x2Ymw5d1lpSXNJbWR2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpSWl3aWQyVmljblJqSWl3aWRqRWlMQ0pRWVdOclpYUk5aWE56WVdkbElpd2lVM1J5WldGdElpd2lVbVZ4ZFdWemRDSXNJbTl1Wlc5bVIzSnZkWEJ6WHlJc0lsSmxjWFZsYzNSSVpXRmtaWEp6SWl3aVVtVnhkV1Z6ZEUxbGMzTmhaMlVpTENKU1pYTndiMjV6WlVobFlXUmxjbk1pTENKU1pYTndiMjV6WlUxbGMzTmhaMlVpTENKU1pYTndiMjV6WlZSeVlXbHNaWEp6SWl3aVUzUnlhVzVuY3lJc0ltZGxkRVJoZEdGZllYTkNOalFpTENKbGIyMGlMQ0p6WlhSRVlYUmhJaXdpYzJWMFJXOXRJaXdpWjJWMFJHRjBZVjloYzFVNElpd2laMlYwUlc5dElpd2laMlYwUkdGMFlTSXNJbWxrSWl3aWMyVjBTV1FpTENKblpYUkpaQ0lzSWxSNWNHVkRZWE5sSWl3aVZGbFFSVjlPVDFSZlUwVlVJaXdpU0VWQlJFVlNVeUlzSW1kbGRGUjVjR1ZEWVhObElpd2ljM1J5WldGdElpd2laMlYwVTNSeVpXRnRJaXdpWjJWMFNHVmhaR1Z5Y3lJc0luTmxkRk4wY21WaGJTSXNJbk5sZEVobFlXUmxjbk1pTENKamJHVmhjbE4wY21WaGJTSXNJbWhoYzFOMGNtVmhiU0lzSW1Oc1pXRnlTR1ZoWkdWeWN5SXNJbWhoYzBobFlXUmxjbk1pTENKamJHVmhjazFsYzNOaFoyVWlMQ0pvWVhOTlpYTnpZV2RsSWl3aVoyVjBUV1YwWVdSaGRHRWlMQ0owYVcxbGIzVjBJaXdpWjJWMFZHbHRaVzkxZENJc0lrUjFjbUYwYVc5dUlpd2ljMlYwVFdWMGFHOWtJaXdpYzJWMFRXVjBZV1JoZEdFaUxDSm5aWFJOWlhSb2IyUWlMQ0pqYkdWaGNrMWxkR0ZrWVhSaElpd2lhR0Z6VFdWMFlXUmhkR0VpTENKb1lYTlVhVzFsYjNWMElpd2ljR0ZqYTJWMFRXVnpjMkZuWlNJc0ltZGxkRkJoWTJ0bGRFMWxjM05oWjJVaUxDSmxiM01pTENKelpYUklZWE5OWlhOellXZGxJaXdpYzJWMFVHRmphMlYwVFdWemMyRm5aU0lzSW5ObGRFVnZjeUlzSW1kbGRFaGhjMDFsYzNOaFoyVWlMQ0puWlhSRmIzTWlMQ0pqYkdWaGNsQmhZMnRsZEUxbGMzTmhaMlVpTENKb1lYTlFZV05yWlhSTlpYTnpZV2RsSWl3aVoyVjBWSEpoYVd4bGNuTWlMQ0p6WlhSVWNtRnBiR1Z5Y3lJc0ltTnNaV0Z5VkhKaGFXeGxjbk1pTENKb1lYTlVjbUZwYkdWeWN5SXNJbWRsZEZOMFlYUjFjeUlzSW5ObGRGTjBZWFIxY3lJc0ltTnNaV0Z5VTNSaGRIVnpJaXdpYUdGelUzUmhkSFZ6SWl3aWRtRnNkV1Z6VEdsemRDSXNJbUZrWkZaaGJIVmxjeUlzSW1kbGRGWmhiSFZsYzB4cGMzUWlMQ0p6WlhSV1lXeDFaWE5NYVhOMElpd2lZMnhsWVhKV1lXeDFaWE5NYVhOMElpd2liV1JOWVhBaUxDSm5aWFJOWkUxaGNDSXNJbTl3ZEY5dWIweGhlbmxEY21WaGRHVWlMQ0pqYkdWaGNrMWtUV0Z3SWl3aVoyOXZaMnhsWDJGd2FWOWhibTV2ZEdGMGFXOXVjMTl3WWlJc0lrTnlaV1JsYm5ScFlXeHpJaXdpUVhWMGFHVnVkR2xqWVhSbFVtVnhkV1Z6ZENJc0lrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxJaXdpUVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMElpd2lRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlNJc0luQmhlV3h2WVdRaUxDSnpaWFJVZVhCbElpd2ljMlYwVUdGNWJHOWhaQ0lzSW1kbGRGUjVjR1VpTENKblpYUlFZWGxzYjJGa0lpd2laVzUwYVhSNUlpd2laMlYwUTNKbFpHVnVkR2xoYkhNaUxDSnpaWFJGYm5ScGRIa2lMQ0p6WlhSRGNtVmtaVzUwYVdGc2N5SXNJbWRsZEVWdWRHbDBlU0lzSW1Oc1pXRnlRM0psWkdWdWRHbGhiSE1pTENKb1lYTkRjbVZrWlc1MGFXRnNjeUlzSW1GalkyVnpjMVJ2YTJWdUlpd2ljMlYwUVdOalpYTnpWRzlyWlc0aUxDSm5aWFJCWTJObGMzTlViMnRsYmlJc0ltZHZiMmRzWlY5aGNHbGZhSFIwY0Y5d1lpSXNJbWR2YjJkc1pWOXdjbTkwYjJKMVpsOWtaWE5qY21sd2RHOXlYM0JpSWl3aVlYQnBJaXdpYUhSMGNDSXNJa2gwZEhCU2RXeGxJaXdpVFdWMGFHOWtUM0IwYVc5dWN5SXNJbVY0ZEdWdWMybHZibk5DYVc1aGNua2lMQ0psZUhSbGJuTnBiMjV6SWl3aVNVTkZRMkZ1Wkdsa1lYUmxJaXdpUTJGc2JGSmxjWFZsYzNRaUxDSkRZV3hzVW1WemNHOXVjMlZKYm1sMFUzUmhaMlVpTENKRFlXeHNVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aU0lzSWtOaGJHeFNaWE53YjI1elpTSXNJa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBJaXdpUTJGc2JGVndaR0YwWlZKbGMzQnZibk5sSWl3aVNVTkZVMlZ5ZG1WeUlpd2lWMlZpVWxSRFEyOXVabWxuSWl3aVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aU0lzSWtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aU0lzSWtGdWMzZGxjbEpsY1hWbGMzUkViMjVsVTNSaFoyVWlMQ0pCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpTSXNJa0Z1YzNkbGNsSmxjWFZsYzNRaUxDSkJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlNJc0lrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVaUxDSkJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlNJc0lrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlNJc0lrRnVjM2RsY2xKbGMzQnZibk5sSWl3aVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWEYxWlhOMElpd2lUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhOd2IyNXpaU0lzSW1OaGJtUnBaR0YwWlNJc0luTmtjRTFwWkNJc0luTmtjRzFNYVc1bFNXNWtaWGdpTENKMWMyVnlibUZ0WlVaeVlXZHRaVzUwSWl3aWMyVjBRMkZ1Wkdsa1lYUmxJaXdpYzJWMFUyUndUV2xrSWl3aWMyVjBVMlJ3YlV4cGJtVkpibVJsZUNJc0luTmxkRlZ6WlhKdVlXMWxSbkpoWjIxbGJuUWlMQ0puWlhSRFlXNWthV1JoZEdVaUxDSm5aWFJUWkhCTmFXUWlMQ0pqYkdWaGNsTmtjRTFwWkNJc0ltaGhjMU5rY0UxcFpDSXNJbWRsZEZOa2NHMU1hVzVsU1c1a1pYZ2lMQ0pqYkdWaGNsTmtjRzFNYVc1bFNXNWtaWGdpTENKb1lYTlRaSEJ0VEdsdVpVbHVaR1Y0SWl3aVoyVjBWWE5sY201aGJXVkdjbUZuYldWdWRDSXNJbU5zWldGeVZYTmxjbTVoYldWR2NtRm5iV1Z1ZENJc0ltaGhjMVZ6WlhKdVlXMWxSbkpoWjIxbGJuUWlMQ0p6WkhBaUxDSmthWE5oWW14bFZISnBZMnRzWlNJc0luTmxkRk5rY0NJc0luTmxkRVJwYzJGaWJHVlVjbWxqYTJ4bElpd2laMlYwVTJSd0lpd2laMlYwUkdsellXSnNaVlJ5YVdOcmJHVWlMQ0pqYkdWaGNrTmhibVJwWkdGMFpTSXNJbWhoYzBOaGJtUnBaR0YwWlNJc0lsTjBZV2RsUTJGelpTSXNJbE5VUVVkRlgwNVBWRjlUUlZRaUxDSkpUa2xVSWl3aVZWQkVRVlJGSWl3aVoyVjBVM1JoWjJWRFlYTmxJaXdpZFhWcFpDSXNJbWRsZEVsdWFYUWlMQ0oxY0dSaGRHVWlMQ0puWlhSVmNHUmhkR1VpTENKelpYUlZkV2xrSWl3aWMyVjBTVzVwZENJc0luTmxkRlZ3WkdGMFpTSXNJbWRsZEZWMWFXUWlMQ0pqYkdWaGNrbHVhWFFpTENKb1lYTkpibWwwSWl3aVkyeGxZWEpWY0dSaGRHVWlMQ0pvWVhOVmNHUmhkR1VpTENKVmNHUmhkR1ZEWVhObElpd2lWVkJFUVZSRlgwNVBWRjlUUlZRaUxDSkRRVTVFU1VSQlZFVWlMQ0pFVDA1Rklpd2lSVkpTVDFJaUxDSm5aWFJWY0dSaGRHVkRZWE5sSWl3aWMyVjBSRzl1WlNJc0luTmxkRVZ5Y205eUlpd2laMlYwUkc5dVpTSXNJbU5zWldGeVJHOXVaU0lzSW1oaGMwUnZibVVpTENKamJHVmhja1Z5Y205eUlpd2lhR0Z6UlhKeWIzSWlMQ0oxY214elRHbHpkQ0lzSW5WelpYSnVZVzFsSWl3aVkzSmxaR1Z1ZEdsaGJDSXNJbUZrWkZWeWJITWlMQ0p6WlhSVmMyVnlibUZ0WlNJc0luTmxkRU55WldSbGJuUnBZV3dpTENKblpYUlZjbXh6VEdsemRDSXNJbWRsZEZWelpYSnVZVzFsSWl3aVoyVjBRM0psWkdWdWRHbGhiQ0lzSW5ObGRGVnliSE5NYVhOMElpd2lZMnhsWVhKVmNteHpUR2x6ZENJc0ltRmtaR2wwYVc5dVlXeEpZMlZUWlhKMlpYSnpUR2x6ZENJc0ltZGxkRUZrWkdsMGFXOXVZV3hKWTJWVFpYSjJaWEp6VEdsemRDSXNJbUZrWkVGa1pHbDBhVzl1WVd4SlkyVlRaWEoyWlhKeklpd2ljMlYwUVdSa2FYUnBiMjVoYkVsalpWTmxjblpsY25OTWFYTjBJaXdpWTJ4bFlYSkJaR1JwZEdsdmJtRnNTV05sVTJWeWRtVnljMHhwYzNRaUxDSnZjSFJwYjI1aGJFTnZibVpwWnlJc0ltZGxkRTl3ZEdsdmJtRnNRMjl1Wm1sbklpd2ljMlYwVDNCMGFXOXVZV3hEYjI1bWFXY2lMQ0pqYkdWaGNrOXdkR2x2Ym1Gc1EyOXVabWxuSWl3aWFHRnpUM0IwYVc5dVlXeERiMjVtYVdjaUxDSmpiMjVtYVdjaUxDSm5aWFJEYjI1bWFXY2lMQ0p6WlhSRGIyNW1hV2NpTENKamJHVmhja052Ym1acFp5SXNJbWhoYzBOdmJtWnBaeUlzSW1ScFlXeEVhWEpsWTNRaUxDSmthV0ZzVjJWaVVsUkRJaXdpWVdSa2NtVnpjeUlzSW05d2RITWlMQ0prWldaaGRXeDBSbUZqZEc5eWVTSXNJbTFoYTJWQmRYUm9aVzUwYVdOaGRHVmtWSEpoYm5Od2IzSjBSbUZqZEc5eWVTSXNJbUYxZEdoRmJuUnBkSGtpTENKamNtVmtjeUlzSWxCeWIyMXBjMlVpTENKeVpYTnZiSFpsSWl3aWNtVnFaV04wSWl3aVFYVjBhRk5sY25acFkyVWlMQ0pCZFhSb1pXNTBhV05oZEdVaUxDSmxlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpJaXdpYldRaUxDSmxlSFJsY201aGJFRjFkR2hVYjBWdWRHbDBlU0lzSWtWNGRHVnlibUZzUVhWMGFGTmxjblpwWTJVaUxDSkJkWFJvWlc1MGFXTmhkR1ZVYnlJc0ltZGxkRVY0ZEhKaFRXVjBZV1JoZEdFaUxDSmxlSFJ5WVUxa0lpd2lZWFYwYUdWdWRHbGpZWFJsWkZSeVlXNXpjRzl5ZENJc0ltVjRkSEpoVFdWMFlXUmhkR0VpTENKdGMyZENlWFJsY3lJc0luTnBaMjVoYkdsdVowRmtaSEpsYzNNaUxDSjNaV0p5ZEdOUGNIUnpJaXdpZDJWaWNuUmpUM0IwYVc5dWN5SXNJbTVsZDFCbFpYSkRiMjV1WldOMGFXOXVSbTl5UTJ4cFpXNTBJaXdpWkdsellXSnNaVlJ5YVdOcmJHVkpRMFVpTENKeWRHTkRiMjVtYVdjaUxDSndZeUlzSW1Saklpd2liM0IwYzBOdmNIa2lMQ0p6YVdkdVlXeHBibWRCZFhSb1JXNTBhWFI1SWl3aWMybG5ibUZzYVc1blEzSmxaR1Z1ZEdsaGJITWlMQ0p6YVdkdVlXeHBibWRGZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56SWl3aWMybG5ibUZzYVc1blJYaDBaWEp1WVd4QmRYUm9WRzlGYm5ScGRIa2lMQ0prYVhKbFkzUlVjbUZ1YzNCdmNuUWlMQ0pUYVdkdVlXeHBibWRUWlhKMmFXTmxJaXdpUTJGc2JDSXNJbk5sYm5SRWIyNWxUM0pGY25KdmNrOXVZMlVpTENKelpXNWtSWEp5YjNJaUxDSmxjbklpTENKallXeHNVbVZ4ZFdWemRGVndaR0YwWlNJc0lsVk9TMDVQVjA0aUxDSkRZV3hzVlhCa1lYUmxJaXdpYjNWMGNIVjBJaXdpYzJWdVpFUnZibVVpTENKeVpXMXZkR1ZFWlhOalUyVjBJaXdpY0ZKbGMyOXNkbVVpTENKbGVHTm9ZVzVuWlVSdmJtVWlMQ0pqY21WaGRHVlBabVpsY2lJc0ltOW1abVZ5UkdWell5SXNJbTl1YVdObFkyRnVaR2xrWVhSbElpd2laWFpsYm5RaUxDSnBVSEp2ZEc4aUxDSnpaSEJOVEdsdVpVbHVaR1Y0SWl3aWFXTmxRMkZ1Wkdsa1lYUmxWRzlRY205MGJ5SXNJbk5sZEV4dlkyRnNSR1Z6WTNKcGNIUnBiMjRpTENKb1lYWmxTVzVwZENJc0luSmxiVzkwWlZORVVDSXNJbEpVUTFObGMzTnBiMjVFWlhOamNtbHdkR2x2YmlJc0luTmxkRkpsYlc5MFpVUmxjMk55YVhCMGFXOXVJaXdpWTJGdVpDSXNJbWxqWlVOaGJtUnBaR0YwWlVaeWIyMVFjbTkwYnlJc0ltRmtaRWxqWlVOaGJtUnBaR0YwWlNJc0ltTnNhV1Z1ZEVWdVpDSXNJbU5zYVdWdWRFVnVaRkpsYzI5c2RtVWlMQ0pqYkdsbGJuUkZibVJTWldwbFkzUWlMQ0pqWVd4c1VtVnhkV1Z6ZENJc0ltVnVZMjlrWldSVFJGQWlMQ0pzYjJOaGJFUmxjMk55YVhCMGFXOXVJaXdpWTJNaUxDSkRiR2xsYm5SRGFHRnVibVZzSWl3aWNtVmhaSGtpTENKMGNtRnVjM0J2Y25SR1lXTjBiM0o1SWl3aWNHVmxja052Ym01bFkzUnBiMjRpTENKemRISmxZVzFKUkVOdmRXNTBaWElpTENKemRISmxZVzF6SWl3aWIyNURhR0Z1Ym1Wc1RXVnpjMkZuWlNJc0ltNWxkMU4wY21WaGJTSXNJbTVsZUhSVGRISmxZVzFKUkNJc0luSmxjM0FpTENKaFkzUnBkbVZUZEhKbFlXMGlMQ0pqY3lJc0ltOXVVbVZ6Y0c5dWMyVWlMQ0pEYkdsbGJuUlRkSEpsWVcwaUxDSnlaVzF2ZG1WVGRISmxZVzFDZVVsRUlpd2lkM0pwZEdWSVpXRmtaWEp6SWl3aVFtRnpaVU5vWVc1dVpXd2lMQ0pwWldWbE56VTBJaXdpYTAxaGVFeGxibWQwYUNJc0lsUlpVRVZFWDBGU1VrRlpYMU5WVUZCUFVsUWlMQ0pqY21WaGRHVkNkV1ptWlhJaUxDSjBhR0YwSWl3aVlYSm5JaXdpWlc1amIyUnBibWRQY2s5bVpuTmxkQ0lzSW1Gc2JHOWpWVzV6WVdabElpd2labkp2YlVGeWNtRjVUR2xyWlNJc0ltWnliMjFCY25KaGVVSjFabVpsY2lJc0ltVnVZMjlrYVc1bklpd2lhWE5GYm1OdlpHbHVaeUlzSW1GamRIVmhiQ0lzSW1selFuVm1abVZ5SWl3aWJHVnVJaXdpWTJobFkydGxaQ0lzSW1OdmNIa2lMQ0oyWVd3aUxDSmhjM05sY25SVGFYcGxJaXdpYzJsNlpTSXNJbWx6Vm1sbGR5SXNJbXh2ZDJWeVpXUkRZWE5sSWl3aWRYUm1PRlJ2UW5sMFpYTWlMQ0ppWVhObE5qUlViMEo1ZEdWeklpd2ljMnh2ZDFSdlUzUnlhVzVuSWl3aWFHVjRVMnhwWTJVaUxDSjFkR1k0VTJ4cFkyVWlMQ0poYzJOcGFWTnNhV05sSWl3aWJHRjBhVzR4VTJ4cFkyVWlMQ0ppWVhObE5qUlRiR2xqWlNJc0luVjBaakUyYkdWVGJHbGpaU0lzSW5OM1lYQWlMQ0ppYVdScGNtVmpkR2x2Ym1Gc1NXNWtaWGhQWmlJc0ltRnljbUY1U1c1a1pYaFBaaUlzSW1GeWNpSXNJbWx1WkdWNFUybDZaU0lzSW1GeWNreGxibWQwYUNJc0luWmhiRXhsYm1kMGFDSXNJbUoxWmlJc0luSmxZV1JWU1c1ME1UWkNSU0lzSW1admRXNWtTVzVrWlhnaUxDSm1iM1Z1WkNJc0ltb2lMQ0pvWlhoWGNtbDBaU0lzSW05bVpuTmxkQ0lzSW5KbGJXRnBibWx1WnlJc0luTjBja3hsYmlJc0luQmhjbk5sWkNJc0luVjBaamhYY21sMFpTSXNJbUpzYVhSQ2RXWm1aWElpTENKaGMyTnBhVmR5YVhSbElpd2ljM1J5SWl3aVlubDBaVUZ5Y21GNUlpd2lZWE5qYVdsVWIwSjVkR1Z6SWl3aWJHRjBhVzR4VjNKcGRHVWlMQ0ppWVhObE5qUlhjbWwwWlNJc0luVmpjekpYY21sMFpTSXNJblZ1YVhSeklpd2lkWFJtTVRac1pWUnZRbmwwWlhNaUxDSm1jbTl0UW5sMFpVRnljbUY1SWl3aWNtVnpJaXdpYzJWamIyNWtRbmwwWlNJc0luUm9hWEprUW5sMFpTSXNJbVp2ZFhKMGFFSjVkR1VpTENKMFpXMXdRMjlrWlZCdmFXNTBJaXdpWm1seWMzUkNlWFJsSWl3aVkyOWtaVkJ2YVc1MElpd2lZbmwwWlhOUVpYSlRaWEYxWlc1alpTSXNJbU52WkdWUWIybHVkSE1pTENKa1pXTnZaR1ZEYjJSbFVHOXBiblJ6UVhKeVlYa2lMQ0pUYkc5M1FuVm1abVZ5SWl3aVNVNVRVRVZEVkY5TlFWaGZRbGxVUlZNaUxDSm1iMjhpTENKMGVYQmxaRUZ5Y21GNVUzVndjRzl5ZENJc0luQnZiMnhUYVhwbElpd2lYMkYxWjIxbGJuUWlMQ0p6Y0dWamFXVnpJaXdpWm1sc2JDSXNJbUZzYkc5alZXNXpZV1psVTJ4dmR5SXNJbDlwYzBKMVptWmxjaUlzSW5naUxDSnNhWE4wSWl3aWNHOXpJaXdpYzNkaGNERTJJaXdpYzNkaGNETXlJaXdpYzNkaGNEWTBJaXdpYVc1emNHVmpkQ0lzSW5Sb2FYTlRkR0Z5ZENJc0luUm9hWE5GYm1RaUxDSjBhR2x6UTI5d2VTSXNJblJoY21kbGRFTnZjSGtpTENKcGJtTnNkV1JsY3lJc0luUnZTbE5QVGlJc0lsOWhjbklpTENKeVpYUWlMQ0p2ZFhRaUxDSjBiMGhsZUNJc0ltTm9aV05yVDJabWMyVjBJaXdpWlhoMElpd2lZMmhsWTJ0SmJuUWlMQ0p2WW1wbFkzUlhjbWwwWlZWSmJuUXhOaUlzSW14cGRIUnNaVVZ1WkdsaGJpSXNJbTlpYW1WamRGZHlhWFJsVlVsdWRETXlJaXdpWTJobFkydEpSVVZGTnpVMElpd2libTlCYzNObGNuUWlMQ0p1WlhkQ2RXWWlMQ0p6YkdsalpVeGxiaUlzSW5KbFlXUlZTVzUwVEVVaUxDSnlaV0ZrVlVsdWRFSkZJaXdpY21WaFpGVkpiblE0SWl3aWNtVmhaRlZKYm5ReE5reEZJaXdpY21WaFpGVkpiblF6TWt4Rklpd2ljbVZoWkZWSmJuUXpNa0pGSWl3aWNtVmhaRWx1ZEV4Rklpd2ljbVZoWkVsdWRFSkZJaXdpY21WaFpFbHVkREUyVEVVaUxDSnlaV0ZrU1c1ME1UWkNSU0lzSW5KbFlXUkpiblF6TWt4Rklpd2ljbVZoWkVsdWRETXlRa1VpTENKeVpXRmtSbXh2WVhSTVJTSXNJbkpsWVdSR2JHOWhkRUpGSWl3aWNtVmhaRVJ2ZFdKc1pVeEZJaXdpY21WaFpFUnZkV0pzWlVKRklpd2lkM0pwZEdWVlNXNTBURVVpTENKM2NtbDBaVlZKYm5SQ1JTSXNJbmR5YVhSbFZVbHVkRGdpTENKM2NtbDBaVlZKYm5ReE5reEZJaXdpZDNKcGRHVlZTVzUwTVRaQ1JTSXNJbmR5YVhSbFZVbHVkRE15VEVVaUxDSjNjbWwwWlZWSmJuUXpNa0pGSWl3aWQzSnBkR1ZKYm5STVJTSXNJbXhwYldsMElpd2lkM0pwZEdWSmJuUkNSU0lzSW5keWFYUmxTVzUwTVRaTVJTSXNJbmR5YVhSbFNXNTBNVFpDUlNJc0luZHlhWFJsU1c1ME16Sk1SU0lzSW5keWFYUmxTVzUwTXpKQ1JTSXNJbmR5YVhSbFJteHZZWFJNUlNJc0luZHlhWFJsUm14dllYUkNSU0lzSW5keWFYUmxSRzkxWW14bFRFVWlMQ0ozY21sMFpVUnZkV0pzWlVKRklpd2lkR0Z5WjJWMFUzUmhjblFpTENKSlRsWkJURWxFWDBKQlUwVTJORjlTUlNJc0lteGxZV1JUZFhKeWIyZGhkR1VpTENKMGIwSjVkR1ZCY25KaGVTSXNJbk4wY21sdVozUnlhVzBpTENKaVlYTmxOalJqYkdWaGJpSXNJbVJ6ZENJc0ltSTJOQ0lzSW14bGJuTWlMQ0puWlhSTVpXNXpJaXdpZG1Gc2FXUk1aVzRpTENKd2JHRmpaVWh2YkdSbGNuTk1aVzRpTENKMGJYQWlMQ0pCY25JaUxDSmZZbmwwWlV4bGJtZDBhQ0lzSW1OMWNrSjVkR1VpTENKeVpYWk1iMjlyZFhBaUxDSjFhVzUwT0NJc0ltVjRkSEpoUW5sMFpYTWlMQ0p3WVhKMGN5SXNJbXhsYmpJaUxDSmxibU52WkdWRGFIVnVheUlzSW14dmIydDFjQ0lzSW01MWJTSXNJbWx6VEVVaUxDSnRUR1Z1SWl3aWJrSjVkR1Z6SWl3aVpVeGxiaUlzSW1WTllYZ2lMQ0psUW1saGN5SXNJbTVDYVhSeklpd2ljblFpTENKelpXTnZibVJ6SWl3aWJtRnViM01pTENKelpYUlRaV052Ym1Seklpd2ljMlYwVG1GdWIzTWlMQ0puWlhSVFpXTnZibVJ6SWl3aVoyVjBUbUZ1YjNNaUxDSjBlWEJsVlhKc0lpd2laMlYwVm1Gc2RXVmZZWE5DTmpRaUxDSnpaWFJVZVhCbFZYSnNJaXdpYzJWMFZtRnNkV1VpTENKblpYUlVlWEJsVlhKc0lpd2laMlYwVm1Gc2RXVmZZWE5WT0NJc0ltZGxkRlpoYkhWbElpd2laMlYwVkhsd1pVNWhiV1VpTENKd1lXTnJJaXdpYzJWeWFXRnNhWHBsWkNJc0ltOXdkRjkwZVhCbFZYSnNVSEpsWm1sNElpd2lkVzV3WVdOcklpd2laR1Z6WlhKcFlXeHBlbVVpTENKd1pXVnlRMjl1YmlJc0ltUmhkR0ZEYUdGdWJtVnNJaXdpYldGNFJHRjBZVU5vWVc1dVpXeFRhWHBsSWl3aWIyNURhR0Z1Ym1Wc1QzQmxiaUlzSW05dVEyaGhibTVsYkVOc2IzTmxJaXdpWlhZaUxDSnZia05vWVc1dVpXeEZjbkp2Y2lJc0ltOXVhV05sWTI5dWJtVmpkR2x2Ym5OMFlYUmxZMmhoYm1kbElpd2lhV05sUTI5dWJtVmpkR2x2YmxOMFlYUmxJaXdpWTJ4dmMyVlhhWFJvVW1WaGMyOXVJaXdpYVhORGJHOXpaV1FpTENKcGMwTnNiM05sWkZKbFlYTnZiaUlzSW1Oc2IzTmxaRkpsWVhOdmJpSXNJbU5vWVc1dVpXd2lMQ0p2YmtSdmJtVWlMQ0pvWldGa1pYSnpVbVZqWldsMlpXUWlMQ0owY21GcGJHVnljMUpsWTJWcGRtVmtJaXdpY21WeGRXVnpkRWhsWVdSbGNuTWlMQ0ptY205dFIxSlFRMDFsZEdGa1lYUmhJaXdpWTJ4dmMyVlhhWFJvVW1WamRrVnljbTl5SWl3aWNHRmphMlYwSWl3aWNtVnhkV1Z6ZEUxbGMzTmhaMlVpTENKaGJXOTFiblJVYjFObGJtUWlMQ0p3Y205alpYTnpTR1ZoWkdWeWN5SXNJbkJ5YjJObGMzTk5aWE56WVdkbElpd2ljSEp2WTJWemMxUnlZV2xzWlhKeklpd2lkRzlIVWxCRFRXVjBZV1JoZEdFaUxDSnlaWE4xYkhRaUxDSndjbTlqWlhOelVHRmphMlYwVFdWemMyRm5aU0lzSW1Ob2RXNXJJaXdpYzNSaGRIVnpRMjlrWlNJc0ltaGxZV1JsY2tKNWRHVnpJaXdpWVhOVGRISnBibWNpTENKb1pXRmtaWEp6Vkc5Q2VYUmxjeUlzSW5ObGRGVnBiblE0SWl3aVFtRnpaVk4wY21WaGJTSXNJbU5vWVhJaUxDSmxibU52WkdWa0lpd2lZMmhoY2tOdlpHVWlMQ0p6ZEhKcGJtZHpJaXdpWlc1MGNua2lMQ0p3WVdOclpYUkNkV1lpTENKd1lXTnJaWFJDZFdaVGFYcGxJaXdpY0dGeWRHbGhiRVJoZEdFaUxDSkRRVTVEUlV4TVJVUWlMQ0pKVGxaQlRFbEVYMEZTUjFWTlJVNVVJaXdpUkVWQlJFeEpUa1ZmUlZoRFJVVkVSVVFpTENKT1QxUmZSazlWVGtRaUxDSkJURkpGUVVSWlgwVllTVk5VVXlJc0lsQkZVazFKVTFOSlQwNWZSRVZPU1VWRUlpd2lWVTVCVlZSSVJVNVVTVU5CVkVWRUlpd2lVa1ZUVDFWU1EwVmZSVmhJUVZWVFZFVkVJaXdpUmtGSlRFVkVYMUJTUlVOUFRrUkpWRWxQVGlJc0lrRkNUMUpVUlVRaUxDSlBWVlJmVDBaZlVrRk9SMFVpTENKVlRrbE5VRXhGVFVWT1ZFVkVJaXdpU1U1VVJWSk9RVXdpTENKVlRrRldRVWxNUVVKTVJTSXNJa1JCVkVGZlRFOVRVeUlzSWtoMGRIQWlMQ0pEZFhOMGIyMUlkSFJ3VUdGMGRHVnliaUlzSW5KMWJHVnpUR2x6ZENJc0ltZGxkRkoxYkdWelRHbHpkQ0lzSW1aMWJHeDVSR1ZqYjJSbFVtVnpaWEoyWldSRmVIQmhibk5wYjI0aUxDSmhaR1JTZFd4bGN5SXNJbk5sZEVaMWJHeDVSR1ZqYjJSbFVtVnpaWEoyWldSRmVIQmhibk5wYjI0aUxDSm5aWFJHZFd4c2VVUmxZMjlrWlZKbGMyVnlkbVZrUlhod1lXNXphVzl1SWl3aWMyVjBVblZzWlhOTWFYTjBJaXdpWTJ4bFlYSlNkV3hsYzB4cGMzUWlMQ0pRWVhSMFpYSnVRMkZ6WlNJc0lsQkJWRlJGVWs1ZlRrOVVYMU5GVkNJc0lrZEZWQ0lzSWxCVlZDSXNJbEJQVTFRaUxDSkVSVXhGVkVVaUxDSlFRVlJEU0NJc0lrTlZVMVJQVFNJc0ltZGxkRkJoZEhSbGNtNURZWE5sSWl3aWMyVnNaV04wYjNJaUxDSndkWFFpTENKd2IzTjBJaXdpY0dKZlpHVnNaWFJsSWl3aWNHRjBZMmdpTENKamRYTjBiMjBpTENKblpYUkRkWE4wYjIwaUxDSnlaWE53YjI1elpVSnZaSGtpTENKaFpHUnBkR2x2Ym1Gc1FtbHVaR2x1WjNOTWFYTjBJaXdpWjJWMFFXUmthWFJwYjI1aGJFSnBibVJwYm1kelRHbHpkQ0lzSW5ObGRGTmxiR1ZqZEc5eUlpd2ljMlYwUjJWMElpd2ljMlYwVUhWMElpd2ljMlYwVUc5emRDSXNJbk5sZEVSbGJHVjBaU0lzSW5ObGRGQmhkR05vSWl3aWMyVjBRM1Z6ZEc5dElpd2ljMlYwUW05a2VTSXNJbk5sZEZKbGMzQnZibk5sUW05a2VTSXNJbUZrWkVGa1pHbDBhVzl1WVd4Q2FXNWthVzVuY3lJc0ltZGxkRk5sYkdWamRHOXlJaXdpWjJWMFFtOWtlU0lzSW1kbGRGSmxjM0J2Ym5ObFFtOWtlU0lzSW1kbGRFZGxkQ0lzSW1Oc1pXRnlSMlYwSWl3aWFHRnpSMlYwSWl3aVoyVjBVSFYwSWl3aVkyeGxZWEpRZFhRaUxDSm9ZWE5RZFhRaUxDSm5aWFJRYjNOMElpd2lZMnhsWVhKUWIzTjBJaXdpYUdGelVHOXpkQ0lzSW1kbGRFUmxiR1YwWlNJc0ltTnNaV0Z5UkdWc1pYUmxJaXdpYUdGelJHVnNaWFJsSWl3aVoyVjBVR0YwWTJnaUxDSmpiR1ZoY2xCaGRHTm9JaXdpYUdGelVHRjBZMmdpTENKamJHVmhja04xYzNSdmJTSXNJbWhoYzBOMWMzUnZiU0lzSW5ObGRFRmtaR2wwYVc5dVlXeENhVzVrYVc1bmMweHBjM1FpTENKamJHVmhja0ZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRaUxDSnJhVzVrSWl3aWMyVjBTMmx1WkNJc0luTmxkRkJoZEdnaUxDSm5aWFJMYVc1a0lpd2laMlYwVUdGMGFDSXNJa1pwYkdWRVpYTmpjbWx3ZEc5eVUyVjBJaXdpUm1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnlJc0lrUmxjMk55YVhCMGIzSlFjbTkwYnlJc0lrVjRkR1Z1YzJsdmJsSmhibWRsSWl3aVVtVnpaWEoyWldSU1lXNW5aU0lzSWtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5SXNJa1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2SWl3aVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOGlMQ0pGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2SWl3aVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVaUxDSkZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4aUxDSlRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2SWl3aVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZJaXdpUm1sc1pVOXdkR2x2Ym5NaUxDSk5aWE56WVdkbFQzQjBhVzl1Y3lJc0lrWnBaV3hrVDNCMGFXOXVjeUlzSWs5dVpXOW1UM0IwYVc5dWN5SXNJa1Z1ZFcxUGNIUnBiMjV6SWl3aVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3lJc0lsTmxjblpwWTJWUGNIUnBiMjV6SWl3aVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpSXNJazVoYldWUVlYSjBJaXdpVTI5MWNtTmxRMjlrWlVsdVptOGlMQ0pIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieUlzSWtGdWJtOTBZWFJwYjI0aUxDSm1hV3hsVEdsemRDSXNJbWRsZEVacGJHVk1hWE4wSWl3aVlXUmtSbWxzWlNJc0luTmxkRVpwYkdWTWFYTjBJaXdpWTJ4bFlYSkdhV3hsVEdsemRDSXNJbkJpWDNCaFkydGhaMlVpTENKa1pYQmxibVJsYm1ONVRHbHpkQ0lzSW5CMVlteHBZMFJsY0dWdVpHVnVZM2xNYVhOMElpd2lkMlZoYTBSbGNHVnVaR1Z1WTNsTWFYTjBJaXdpYldWemMyRm5aVlI1Y0dWTWFYTjBJaXdpWjJWMFRXVnpjMkZuWlZSNWNHVk1hWE4wSWl3aVpXNTFiVlI1Y0dWTWFYTjBJaXdpWjJWMFJXNTFiVlI1Y0dWTWFYTjBJaXdpYzJWeWRtbGpaVXhwYzNRaUxDSm5aWFJUWlhKMmFXTmxUR2x6ZENJc0ltVjRkR1Z1YzJsdmJreHBjM1FpTENKblpYUkZlSFJsYm5OcGIyNU1hWE4wSWl3aVoyVjBUM0IwYVc5dWN5SXNJbk52ZFhKalpVTnZaR1ZKYm1adklpd2laMlYwVTI5MWNtTmxRMjlrWlVsdVptOGlMQ0p6ZVc1MFlYZ2lMQ0p6WlhST1lXMWxJaXdpYzJWMFVHRmphMkZuWlNJc0ltRmtaRkIxWW14cFkwUmxjR1Z1WkdWdVkza2lMQ0poWkdSWFpXRnJSR1Z3Wlc1a1pXNWplU0lzSW1Ga1pFMWxjM05oWjJWVWVYQmxJaXdpWVdSa1JXNTFiVlI1Y0dVaUxDSmhaR1JUWlhKMmFXTmxJaXdpWVdSa1JYaDBaVzV6YVc5dUpDSXNJbk5sZEU5d2RHbHZibk1pTENKelpYUlRiM1Z5WTJWRGIyUmxTVzVtYnlJc0luTmxkRk41Ym5SaGVDSXNJbWRsZEVSbGNHVnVaR1Z1WTNsTWFYTjBJaXdpWjJWMFVIVmliR2xqUkdWd1pXNWtaVzVqZVV4cGMzUWlMQ0puWlhSWFpXRnJSR1Z3Wlc1a1pXNWplVXhwYzNRaUxDSm5aWFJPWVcxbElpd2lZMnhsWVhKT1lXMWxJaXdpYUdGelRtRnRaU0lzSW1kbGRGQmhZMnRoWjJVaUxDSmpiR1ZoY2xCaFkydGhaMlVpTENKb1lYTlFZV05yWVdkbElpd2ljMlYwUkdWd1pXNWtaVzVqZVV4cGMzUWlMQ0pqYkdWaGNrUmxjR1Z1WkdWdVkzbE1hWE4wSWl3aWMyVjBVSFZpYkdsalJHVndaVzVrWlc1amVVeHBjM1FpTENKamJHVmhjbEIxWW14cFkwUmxjR1Z1WkdWdVkzbE1hWE4wSWl3aWMyVjBWMlZoYTBSbGNHVnVaR1Z1WTNsTWFYTjBJaXdpWTJ4bFlYSlhaV0ZyUkdWd1pXNWtaVzVqZVV4cGMzUWlMQ0p6WlhSTlpYTnpZV2RsVkhsd1pVeHBjM1FpTENKamJHVmhjazFsYzNOaFoyVlVlWEJsVEdsemRDSXNJbk5sZEVWdWRXMVVlWEJsVEdsemRDSXNJbU5zWldGeVJXNTFiVlI1Y0dWTWFYTjBJaXdpYzJWMFUyVnlkbWxqWlV4cGMzUWlMQ0pqYkdWaGNsTmxjblpwWTJWTWFYTjBJaXdpYzJWMFJYaDBaVzV6YVc5dVRHbHpkQ0lzSW1Oc1pXRnlSWGgwWlc1emFXOXVUR2x6ZENJc0ltTnNaV0Z5VDNCMGFXOXVjeUlzSW1oaGMwOXdkR2x2Ym5NaUxDSmpiR1ZoY2xOdmRYSmpaVU52WkdWSmJtWnZJaXdpYUdGelUyOTFjbU5sUTI5a1pVbHVabThpTENKblpYUlRlVzUwWVhnaUxDSmpiR1ZoY2xONWJuUmhlQ0lzSW1oaGMxTjViblJoZUNJc0ltWnBaV3hrVEdsemRDSXNJbWRsZEVacFpXeGtUR2x6ZENJc0ltNWxjM1JsWkZSNWNHVk1hWE4wSWl3aVoyVjBUbVZ6ZEdWa1ZIbHdaVXhwYzNRaUxDSmxlSFJsYm5OcGIyNVNZVzVuWlV4cGMzUWlMQ0puWlhSRmVIUmxibk5wYjI1U1lXNW5aVXhwYzNRaUxDSnZibVZ2WmtSbFkyeE1hWE4wSWl3aVoyVjBUMjVsYjJaRVpXTnNUR2x6ZENJc0luSmxjMlZ5ZG1Wa1VtRnVaMlZNYVhOMElpd2laMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FpTENKeVpYTmxjblpsWkU1aGJXVk1hWE4wSWl3aVlXUmtSbWxsYkdRaUxDSmhaR1JPWlhOMFpXUlVlWEJsSWl3aVlXUmtSWGgwWlc1emFXOXVVbUZ1WjJVaUxDSmhaR1JQYm1WdlprUmxZMndpTENKaFpHUlNaWE5sY25abFpGSmhibWRsSWl3aVlXUmtVbVZ6WlhKMlpXUk9ZVzFsSWl3aVoyVjBVbVZ6WlhKMlpXUk9ZVzFsVEdsemRDSXNJbk5sZEZOMFlYSjBJaXdpWjJWMFUzUmhjblFpTENKamJHVmhjbE4wWVhKMElpd2lhR0Z6VTNSaGNuUWlMQ0pqYkdWaGNrVnVaQ0lzSW1oaGMwVnVaQ0lzSW5ObGRFWnBaV3hrVEdsemRDSXNJbU5zWldGeVJtbGxiR1JNYVhOMElpd2ljMlYwVG1WemRHVmtWSGx3WlV4cGMzUWlMQ0pqYkdWaGNrNWxjM1JsWkZSNWNHVk1hWE4wSWl3aWMyVjBSWGgwWlc1emFXOXVVbUZ1WjJWTWFYTjBJaXdpWTJ4bFlYSkZlSFJsYm5OcGIyNVNZVzVuWlV4cGMzUWlMQ0p6WlhSUGJtVnZaa1JsWTJ4TWFYTjBJaXdpWTJ4bFlYSlBibVZ2WmtSbFkyeE1hWE4wSWl3aWMyVjBVbVZ6WlhKMlpXUlNZVzVuWlV4cGMzUWlMQ0pqYkdWaGNsSmxjMlZ5ZG1Wa1VtRnVaMlZNYVhOMElpd2ljMlYwVW1WelpYSjJaV1JPWVcxbFRHbHpkQ0lzSW1Oc1pXRnlVbVZ6WlhKMlpXUk9ZVzFsVEdsemRDSXNJblZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElpd2laMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWlMQ0poWkdSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUlpd2ljMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWlMQ0pqYkdWaGNsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSWl3aWJuVnRZbVZ5SWl3aWJHRmlaV3dpTENKMGVYQmxUbUZ0WlNJc0ltVjRkR1Z1WkdWbElpd2laR1ZtWVhWc2RGWmhiSFZsSWl3aWIyNWxiMlpKYm1SbGVDSXNJbXB6YjI1T1lXMWxJaXdpY0hKdmRHOHpUM0IwYVc5dVlXd2lMQ0p6WlhST2RXMWlaWElpTENKelpYUk1ZV0psYkNJc0luTmxkRlI1Y0dWT1lXMWxJaXdpYzJWMFJYaDBaVzVrWldVaUxDSnpaWFJFWldaaGRXeDBWbUZzZFdVaUxDSnpaWFJQYm1WdlprbHVaR1Y0SWl3aWMyVjBTbk52Yms1aGJXVWlMQ0p6WlhSUWNtOTBiek5QY0hScGIyNWhiQ0lzSWxSNWNHVWlMQ0pVV1ZCRlgwUlBWVUpNUlNJc0lsUlpVRVZmUmt4UFFWUWlMQ0pVV1ZCRlgwbE9WRFkwSWl3aVZGbFFSVjlWU1U1VU5qUWlMQ0pVV1ZCRlgwbE9WRE15SWl3aVZGbFFSVjlHU1ZoRlJEWTBJaXdpVkZsUVJWOUdTVmhGUkRNeUlpd2lWRmxRUlY5Q1QwOU1JaXdpVkZsUVJWOVRWRkpKVGtjaUxDSlVXVkJGWDBkU1QxVlFJaXdpVkZsUVJWOU5SVk5UUVVkRklpd2lWRmxRUlY5Q1dWUkZVeUlzSWxSWlVFVmZWVWxPVkRNeUlpd2lWRmxRUlY5RlRsVk5JaXdpVkZsUVJWOVRSa2xZUlVRek1pSXNJbFJaVUVWZlUwWkpXRVZFTmpRaUxDSlVXVkJGWDFOSlRsUXpNaUlzSWxSWlVFVmZVMGxPVkRZMElpd2lUR0ZpWld3aUxDSk1RVUpGVEY5UFVGUkpUMDVCVENJc0lreEJRa1ZNWDFKRlVWVkpVa1ZFSWl3aVRFRkNSVXhmVWtWUVJVRlVSVVFpTENKblpYUk9kVzFpWlhJaUxDSmpiR1ZoY2s1MWJXSmxjaUlzSW1oaGMwNTFiV0psY2lJc0ltZGxkRXhoWW1Wc0lpd2lZMnhsWVhKTVlXSmxiQ0lzSW1oaGMweGhZbVZzSWl3aVkyeGxZWEpVZVhCbElpd2lhR0Z6Vkhsd1pTSXNJbU5zWldGeVZIbHdaVTVoYldVaUxDSm9ZWE5VZVhCbFRtRnRaU0lzSW1kbGRFVjRkR1Z1WkdWbElpd2lZMnhsWVhKRmVIUmxibVJsWlNJc0ltaGhjMFY0ZEdWdVpHVmxJaXdpWjJWMFJHVm1ZWFZzZEZaaGJIVmxJaXdpWTJ4bFlYSkVaV1poZFd4MFZtRnNkV1VpTENKb1lYTkVaV1poZFd4MFZtRnNkV1VpTENKblpYUlBibVZ2WmtsdVpHVjRJaXdpWTJ4bFlYSlBibVZ2WmtsdVpHVjRJaXdpYUdGelQyNWxiMlpKYm1SbGVDSXNJbWRsZEVwemIyNU9ZVzFsSWl3aVkyeGxZWEpLYzI5dVRtRnRaU0lzSW1oaGMwcHpiMjVPWVcxbElpd2laMlYwVUhKdmRHOHpUM0IwYVc5dVlXd2lMQ0pqYkdWaGNsQnliM1J2TTA5d2RHbHZibUZzSWl3aWFHRnpVSEp2ZEc4elQzQjBhVzl1WVd3aUxDSjJZV3gxWlV4cGMzUWlMQ0puWlhSV1lXeDFaVXhwYzNRaUxDSmhaR1JXWVd4MVpTSXNJbk5sZEZaaGJIVmxUR2x6ZENJc0ltTnNaV0Z5Vm1Gc2RXVk1hWE4wSWl3aWJXVjBhRzlrVEdsemRDSXNJbWRsZEUxbGRHaHZaRXhwYzNRaUxDSmhaR1JOWlhSb2IyUWlMQ0p6WlhSTlpYUm9iMlJNYVhOMElpd2lZMnhsWVhKTlpYUm9iMlJNYVhOMElpd2lhVzV3ZFhSVWVYQmxJaXdpYjNWMGNIVjBWSGx3WlNJc0ltTnNhV1Z1ZEZOMGNtVmhiV2x1WnlJc0luTmxjblpsY2xOMGNtVmhiV2x1WnlJc0luTmxkRWx1Y0hWMFZIbHdaU0lzSW5ObGRFOTFkSEIxZEZSNWNHVWlMQ0p6WlhSRGJHbGxiblJUZEhKbFlXMXBibWNpTENKelpYUlRaWEoyWlhKVGRISmxZVzFwYm1jaUxDSm5aWFJKYm5CMWRGUjVjR1VpTENKamJHVmhja2x1Y0hWMFZIbHdaU0lzSW1oaGMwbHVjSFYwVkhsd1pTSXNJbWRsZEU5MWRIQjFkRlI1Y0dVaUxDSmpiR1ZoY2s5MWRIQjFkRlI1Y0dVaUxDSm9ZWE5QZFhSd2RYUlVlWEJsSWl3aVoyVjBRMnhwWlc1MFUzUnlaV0Z0YVc1bklpd2lZMnhsWVhKRGJHbGxiblJUZEhKbFlXMXBibWNpTENKb1lYTkRiR2xsYm5SVGRISmxZVzFwYm1jaUxDSm5aWFJUWlhKMlpYSlRkSEpsWVcxcGJtY2lMQ0pqYkdWaGNsTmxjblpsY2xOMGNtVmhiV2x1WnlJc0ltaGhjMU5sY25abGNsTjBjbVZoYldsdVp5SXNJbXBoZG1GUVlXTnJZV2RsSWl3aWFtRjJZVTkxZEdWeVEyeGhjM051WVcxbElpd2lhbUYyWVUxMWJIUnBjR3hsUm1sc1pYTWlMQ0pxWVhaaFIyVnVaWEpoZEdWRmNYVmhiSE5CYm1SSVlYTm9JaXdpYW1GMllWTjBjbWx1WjBOb1pXTnJWWFJtT0NJc0ltOXdkR2x0YVhwbFJtOXlJaXdpWjI5UVlXTnJZV2RsSWl3aVkyTkhaVzVsY21salUyVnlkbWxqWlhNaUxDSnFZWFpoUjJWdVpYSnBZMU5sY25acFkyVnpJaXdpY0hsSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKd2FIQkhaVzVsY21salUyVnlkbWxqWlhNaUxDSmtaWEJ5WldOaGRHVmtJaXdpWTJORmJtRmliR1ZCY21WdVlYTWlMQ0p2WW1walEyeGhjM05RY21WbWFYZ2lMQ0pqYzJoaGNuQk9ZVzFsYzNCaFkyVWlMQ0p6ZDJsbWRGQnlaV1pwZUNJc0luQm9jRU5zWVhOelVISmxabWw0SWl3aWNHaHdUbUZ0WlhOd1lXTmxJaXdpY0dod1RXVjBZV1JoZEdGT1lXMWxjM0JoWTJVaUxDSnlkV0o1VUdGamEyRm5aU0lzSW5ObGRFcGhkbUZRWVdOcllXZGxJaXdpYzJWMFNtRjJZVTkxZEdWeVEyeGhjM051WVcxbElpd2ljMlYwU21GMllVMTFiSFJwY0d4bFJtbHNaWE1pTENKelpYUktZWFpoUjJWdVpYSmhkR1ZGY1hWaGJITkJibVJJWVhOb0lpd2ljMlYwU21GMllWTjBjbWx1WjBOb1pXTnJWWFJtT0NJc0luTmxkRTl3ZEdsdGFYcGxSbTl5SWl3aWMyVjBSMjlRWVdOcllXZGxJaXdpYzJWMFEyTkhaVzVsY21salUyVnlkbWxqWlhNaUxDSnpaWFJLWVhaaFIyVnVaWEpwWTFObGNuWnBZMlZ6SWl3aWMyVjBVSGxIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0p6WlhSUWFIQkhaVzVsY21salUyVnlkbWxqWlhNaUxDSnpaWFJFWlhCeVpXTmhkR1ZrSWl3aWMyVjBRMk5GYm1GaWJHVkJjbVZ1WVhNaUxDSnpaWFJQWW1walEyeGhjM05RY21WbWFYZ2lMQ0p6WlhSRGMyaGhjbkJPWVcxbGMzQmhZMlVpTENKelpYUlRkMmxtZEZCeVpXWnBlQ0lzSW5ObGRGQm9jRU5zWVhOelVISmxabWw0SWl3aWMyVjBVR2h3VG1GdFpYTndZV05sSWl3aWMyVjBVR2h3VFdWMFlXUmhkR0ZPWVcxbGMzQmhZMlVpTENKelpYUlNkV0o1VUdGamEyRm5aU0lzSWs5d2RHbHRhWHBsVFc5a1pTSXNJbE5RUlVWRUlpd2lRMDlFUlY5VFNWcEZJaXdpVEVsVVJWOVNWVTVVU1UxRklpd2laMlYwU21GMllWQmhZMnRoWjJVaUxDSmpiR1ZoY2twaGRtRlFZV05yWVdkbElpd2lhR0Z6U21GMllWQmhZMnRoWjJVaUxDSm5aWFJLWVhaaFQzVjBaWEpEYkdGemMyNWhiV1VpTENKamJHVmhja3BoZG1GUGRYUmxja05zWVhOemJtRnRaU0lzSW1oaGMwcGhkbUZQZFhSbGNrTnNZWE56Ym1GdFpTSXNJbWRsZEVwaGRtRk5kV3gwYVhCc1pVWnBiR1Z6SWl3aVkyeGxZWEpLWVhaaFRYVnNkR2x3YkdWR2FXeGxjeUlzSW1oaGMwcGhkbUZOZFd4MGFYQnNaVVpwYkdWeklpd2laMlYwU21GMllVZGxibVZ5WVhSbFJYRjFZV3h6UVc1a1NHRnphQ0lzSW1Oc1pXRnlTbUYyWVVkbGJtVnlZWFJsUlhGMVlXeHpRVzVrU0dGemFDSXNJbWhoYzBwaGRtRkhaVzVsY21GMFpVVnhkV0ZzYzBGdVpFaGhjMmdpTENKblpYUktZWFpoVTNSeWFXNW5RMmhsWTJ0VmRHWTRJaXdpWTJ4bFlYSktZWFpoVTNSeWFXNW5RMmhsWTJ0VmRHWTRJaXdpYUdGelNtRjJZVk4wY21sdVowTm9aV05yVlhSbU9DSXNJbWRsZEU5d2RHbHRhWHBsUm05eUlpd2lZMnhsWVhKUGNIUnBiV2w2WlVadmNpSXNJbWhoYzA5d2RHbHRhWHBsUm05eUlpd2laMlYwUjI5UVlXTnJZV2RsSWl3aVkyeGxZWEpIYjFCaFkydGhaMlVpTENKb1lYTkhiMUJoWTJ0aFoyVWlMQ0puWlhSRFkwZGxibVZ5YVdOVFpYSjJhV05sY3lJc0ltTnNaV0Z5UTJOSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKb1lYTkRZMGRsYm1WeWFXTlRaWEoyYVdObGN5SXNJbWRsZEVwaGRtRkhaVzVsY21salUyVnlkbWxqWlhNaUxDSmpiR1ZoY2twaGRtRkhaVzVsY21salUyVnlkbWxqWlhNaUxDSm9ZWE5LWVhaaFIyVnVaWEpwWTFObGNuWnBZMlZ6SWl3aVoyVjBVSGxIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0pqYkdWaGNsQjVSMlZ1WlhKcFkxTmxjblpwWTJWeklpd2lhR0Z6VUhsSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKblpYUlFhSEJIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0pqYkdWaGNsQm9jRWRsYm1WeWFXTlRaWEoyYVdObGN5SXNJbWhoYzFCb2NFZGxibVZ5YVdOVFpYSjJhV05sY3lJc0ltZGxkRVJsY0hKbFkyRjBaV1FpTENKamJHVmhja1JsY0hKbFkyRjBaV1FpTENKb1lYTkVaWEJ5WldOaGRHVmtJaXdpWjJWMFEyTkZibUZpYkdWQmNtVnVZWE1pTENKamJHVmhja05qUlc1aFlteGxRWEpsYm1Geklpd2lhR0Z6UTJORmJtRmliR1ZCY21WdVlYTWlMQ0puWlhSUFltcGpRMnhoYzNOUWNtVm1hWGdpTENKamJHVmhjazlpYW1ORGJHRnpjMUJ5WldacGVDSXNJbWhoYzA5aWFtTkRiR0Z6YzFCeVpXWnBlQ0lzSW1kbGRFTnphR0Z5Y0U1aGJXVnpjR0ZqWlNJc0ltTnNaV0Z5UTNOb1lYSndUbUZ0WlhOd1lXTmxJaXdpYUdGelEzTm9ZWEp3VG1GdFpYTndZV05sSWl3aVoyVjBVM2RwWm5SUWNtVm1hWGdpTENKamJHVmhjbE4zYVdaMFVISmxabWw0SWl3aWFHRnpVM2RwWm5SUWNtVm1hWGdpTENKblpYUlFhSEJEYkdGemMxQnlaV1pwZUNJc0ltTnNaV0Z5VUdod1EyeGhjM05RY21WbWFYZ2lMQ0pvWVhOUWFIQkRiR0Z6YzFCeVpXWnBlQ0lzSW1kbGRGQm9jRTVoYldWemNHRmpaU0lzSW1Oc1pXRnlVR2h3VG1GdFpYTndZV05sSWl3aWFHRnpVR2h3VG1GdFpYTndZV05sSWl3aVoyVjBVR2h3VFdWMFlXUmhkR0ZPWVcxbGMzQmhZMlVpTENKamJHVmhjbEJvY0UxbGRHRmtZWFJoVG1GdFpYTndZV05sSWl3aWFHRnpVR2h3VFdWMFlXUmhkR0ZPWVcxbGMzQmhZMlVpTENKblpYUlNkV0o1VUdGamEyRm5aU0lzSW1Oc1pXRnlVblZpZVZCaFkydGhaMlVpTENKb1lYTlNkV0o1VUdGamEyRm5aU0lzSW0xbGMzTmhaMlZUWlhSWGFYSmxSbTl5YldGMElpd2libTlUZEdGdVpHRnlaRVJsYzJOeWFYQjBiM0pCWTJObGMzTnZjaUlzSW0xaGNFVnVkSEo1SWl3aWMyVjBUV1Z6YzJGblpWTmxkRmRwY21WR2IzSnRZWFFpTENKelpYUk9iMU4wWVc1a1lYSmtSR1Z6WTNKcGNIUnZja0ZqWTJWemMyOXlJaXdpYzJWMFRXRndSVzUwY25raUxDSm5aWFJOWlhOellXZGxVMlYwVjJseVpVWnZjbTFoZENJc0ltTnNaV0Z5VFdWemMyRm5aVk5sZEZkcGNtVkdiM0p0WVhRaUxDSm9ZWE5OWlhOellXZGxVMlYwVjJseVpVWnZjbTFoZENJc0ltZGxkRTV2VTNSaGJtUmhjbVJFWlhOamNtbHdkRzl5UVdOalpYTnpiM0lpTENKamJHVmhjazV2VTNSaGJtUmhjbVJFWlhOamNtbHdkRzl5UVdOalpYTnpiM0lpTENKb1lYTk9iMU4wWVc1a1lYSmtSR1Z6WTNKcGNIUnZja0ZqWTJWemMyOXlJaXdpWjJWMFRXRndSVzUwY25raUxDSmpiR1ZoY2sxaGNFVnVkSEo1SWl3aWFHRnpUV0Z3Ulc1MGNua2lMQ0pqZEhsd1pTSXNJbkJoWTJ0bFpDSXNJbXB6ZEhsd1pTSXNJbXhoZW5raUxDSjNaV0ZySWl3aWMyVjBRM1I1Y0dVaUxDSnpaWFJRWVdOclpXUWlMQ0p6WlhSS2MzUjVjR1VpTENKelpYUk1ZWHA1SWl3aWMyVjBWMlZoYXlJc0lrTlVlWEJsSWl3aVEwOVNSQ0lzSWxOVVVrbE9SMTlRU1VWRFJTSXNJa3BUVkhsd1pTSXNJa3BUWDA1UFVrMUJUQ0lzSWtwVFgxTlVVa2xPUnlJc0lrcFRYMDVWVFVKRlVpSXNJbWRsZEVOMGVYQmxJaXdpWTJ4bFlYSkRkSGx3WlNJc0ltaGhjME4wZVhCbElpd2laMlYwVUdGamEyVmtJaXdpWTJ4bFlYSlFZV05yWldRaUxDSm9ZWE5RWVdOclpXUWlMQ0puWlhSS2MzUjVjR1VpTENKamJHVmhja3B6ZEhsd1pTSXNJbWhoYzBwemRIbHdaU0lzSW1kbGRFeGhlbmtpTENKamJHVmhja3hoZW5raUxDSm9ZWE5NWVhwNUlpd2laMlYwVjJWaGF5SXNJbU5zWldGeVYyVmhheUlzSW1oaGMxZGxZV3NpTENKaGJHeHZkMEZzYVdGeklpd2ljMlYwUVd4c2IzZEJiR2xoY3lJc0ltZGxkRUZzYkc5M1FXeHBZWE1pTENKamJHVmhja0ZzYkc5M1FXeHBZWE1pTENKb1lYTkJiR3h2ZDBGc2FXRnpJaXdpYVdSbGJYQnZkR1Z1WTNsTVpYWmxiQ0lzSW5ObGRFbGtaVzF3YjNSbGJtTjVUR1YyWld3aUxDSkpaR1Z0Y0c5MFpXNWplVXhsZG1Wc0lpd2lTVVJGVFZCUFZFVk9RMWxmVlU1TFRrOVhUaUlzSWs1UFgxTkpSRVZmUlVaR1JVTlVVeUlzSWtsRVJVMVFUMVJGVGxRaUxDSm5aWFJKWkdWdGNHOTBaVzVqZVV4bGRtVnNJaXdpWTJ4bFlYSkpaR1Z0Y0c5MFpXNWplVXhsZG1Wc0lpd2lhR0Z6U1dSbGJYQnZkR1Z1WTNsTVpYWmxiQ0lzSW01aGJXVk1hWE4wSWl3aVoyVjBUbUZ0WlV4cGMzUWlMQ0pwWkdWdWRHbG1hV1Z5Vm1Gc2RXVWlMQ0p3YjNOcGRHbDJaVWx1ZEZaaGJIVmxJaXdpYm1WbllYUnBkbVZKYm5SV1lXeDFaU0lzSW1SdmRXSnNaVlpoYkhWbElpd2ljM1J5YVc1blZtRnNkV1VpTENKblpYUlRkSEpwYm1kV1lXeDFaVjloYzBJMk5DSXNJbUZuWjNKbFoyRjBaVlpoYkhWbElpd2lZV1JrVG1GdFpTSXNJbk5sZEVsa1pXNTBhV1pwWlhKV1lXeDFaU0lzSW5ObGRGQnZjMmwwYVhabFNXNTBWbUZzZFdVaUxDSnpaWFJPWldkaGRHbDJaVWx1ZEZaaGJIVmxJaXdpYzJWMFJHOTFZbXhsVm1Gc2RXVWlMQ0p6WlhSVGRISnBibWRXWVd4MVpTSXNJbk5sZEVGblozSmxaMkYwWlZaaGJIVmxJaXdpYm1GdFpWQmhjblFpTENKcGMwVjRkR1Z1YzJsdmJpSXNJbk5sZEU1aGJXVlFZWEowSWl3aWMyVjBTWE5GZUhSbGJuTnBiMjRpTENKblpYUk9ZVzFsVUdGeWRDSXNJbU5zWldGeVRtRnRaVkJoY25RaUxDSm9ZWE5PWVcxbFVHRnlkQ0lzSW1kbGRFbHpSWGgwWlc1emFXOXVJaXdpWTJ4bFlYSkpjMFY0ZEdWdWMybHZiaUlzSW1oaGMwbHpSWGgwWlc1emFXOXVJaXdpYzJWMFRtRnRaVXhwYzNRaUxDSmpiR1ZoY2s1aGJXVk1hWE4wSWl3aVoyVjBTV1JsYm5ScFptbGxjbFpoYkhWbElpd2lZMnhsWVhKSlpHVnVkR2xtYVdWeVZtRnNkV1VpTENKb1lYTkpaR1Z1ZEdsbWFXVnlWbUZzZFdVaUxDSm5aWFJRYjNOcGRHbDJaVWx1ZEZaaGJIVmxJaXdpWTJ4bFlYSlFiM05wZEdsMlpVbHVkRlpoYkhWbElpd2lhR0Z6VUc5emFYUnBkbVZKYm5SV1lXeDFaU0lzSW1kbGRFNWxaMkYwYVhabFNXNTBWbUZzZFdVaUxDSmpiR1ZoY2s1bFoyRjBhWFpsU1c1MFZtRnNkV1VpTENKb1lYTk9aV2RoZEdsMlpVbHVkRlpoYkhWbElpd2laMlYwUkc5MVlteGxWbUZzZFdVaUxDSmpiR1ZoY2tSdmRXSnNaVlpoYkhWbElpd2lhR0Z6Ukc5MVlteGxWbUZzZFdVaUxDSm5aWFJUZEhKcGJtZFdZV3gxWlNJc0ltZGxkRk4wY21sdVoxWmhiSFZsWDJGelZUZ2lMQ0pqYkdWaGNsTjBjbWx1WjFaaGJIVmxJaXdpYUdGelUzUnlhVzVuVm1Gc2RXVWlMQ0puWlhSQloyZHlaV2RoZEdWV1lXeDFaU0lzSW1Oc1pXRnlRV2RuY21WbllYUmxWbUZzZFdVaUxDSm9ZWE5CWjJkeVpXZGhkR1ZXWVd4MVpTSXNJbXh2WTJGMGFXOXVUR2x6ZENJc0ltZGxkRXh2WTJGMGFXOXVUR2x6ZENJc0ltRmtaRXh2WTJGMGFXOXVJaXdpY0dGMGFFeHBjM1FpTENKemNHRnVUR2x6ZENJc0lteGxZV1JwYm1kRGIyMXRaVzUwY3lJc0luUnlZV2xzYVc1blEyOXRiV1Z1ZEhNaUxDSnNaV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwYzB4cGMzUWlMQ0poWkdSUVlYUm9JaXdpWVdSa1UzQmhiaUlzSW5ObGRFeGxZV1JwYm1kRGIyMXRaVzUwY3lJc0luTmxkRlJ5WVdsc2FXNW5RMjl0YldWdWRITWlMQ0poWkdSTVpXRmthVzVuUkdWMFlXTm9aV1JEYjIxdFpXNTBjeUlzSW1kbGRGQmhkR2hNYVhOMElpd2laMlYwVTNCaGJreHBjM1FpTENKblpYUk1aV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwYzB4cGMzUWlMQ0p6WlhSUVlYUm9UR2x6ZENJc0ltTnNaV0Z5VUdGMGFFeHBjM1FpTENKelpYUlRjR0Z1VEdsemRDSXNJbU5zWldGeVUzQmhia3hwYzNRaUxDSm5aWFJNWldGa2FXNW5RMjl0YldWdWRITWlMQ0pqYkdWaGNreGxZV1JwYm1kRGIyMXRaVzUwY3lJc0ltaGhjMHhsWVdScGJtZERiMjF0Wlc1MGN5SXNJbWRsZEZSeVlXbHNhVzVuUTI5dGJXVnVkSE1pTENKamJHVmhjbFJ5WVdsc2FXNW5RMjl0YldWdWRITWlMQ0pvWVhOVWNtRnBiR2x1WjBOdmJXMWxiblJ6SWl3aWMyVjBUR1ZoWkdsdVowUmxkR0ZqYUdWa1EyOXRiV1Z1ZEhOTWFYTjBJaXdpWTJ4bFlYSk1aV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwYzB4cGMzUWlMQ0p6WlhSTWIyTmhkR2x2Ymt4cGMzUWlMQ0pqYkdWaGNreHZZMkYwYVc5dVRHbHpkQ0lzSW1GdWJtOTBZWFJwYjI1TWFYTjBJaXdpWjJWMFFXNXViM1JoZEdsdmJreHBjM1FpTENKaFpHUkJibTV2ZEdGMGFXOXVJaXdpYzI5MWNtTmxSbWxzWlNJc0ltSmxaMmx1SWl3aWMyVjBVMjkxY21ObFJtbHNaU0lzSW5ObGRFSmxaMmx1SWl3aVoyVjBVMjkxY21ObFJtbHNaU0lzSW1Oc1pXRnlVMjkxY21ObFJtbHNaU0lzSW1oaGMxTnZkWEpqWlVacGJHVWlMQ0puWlhSQ1pXZHBiaUlzSW1Oc1pXRnlRbVZuYVc0aUxDSm9ZWE5DWldkcGJpSXNJbk5sZEVGdWJtOTBZWFJwYjI1TWFYTjBJaXdpWTJ4bFlYSkJibTV2ZEdGMGFXOXVUR2x6ZENJc0luQnliM1J2WDNKd1kxOTJNVjloZFhSb1gzQmlJaXdpUVhWMGFGTmxjblpwWTJWRGJHbGxiblFpTENKelpYSjJhV05sU0c5emRDSXNJbkpsY1hWbGMzUlVlWEJsSWl3aVlYVjBhR1Z1ZEdsallYUmxJaXdpWTJGc2JHSmhZMnNpTENKRmVIUmxjbTVoYkVGMWRHaFRaWEoyYVdObFEyeHBaVzUwSWl3aVlYVjBhR1Z1ZEdsallYUmxWRzhpTENKd2NtOTBiMTl5Y0dOZmQyVmljblJqWDNZeFgzTnBaMjVoYkdsdVoxOXdZaUlzSWxOcFoyNWhiR2x1WjFObGNuWnBZMlZEYkdsbGJuUWlMQ0pCYm5OM1pYSWlMQ0pQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWnlJc0lteHBjM1JsYm1WeWN5SXNJbkpsYzNCdmJuTmxUV1Z6YzJGblpTSXNJbWhoYm1Sc1pYSWlMQ0prWlhSaGFXeHpJaXdpYjI0aUxDSmpZV3hzVlhCa1lYUmxJaXdpWVc1emQyVnlJaXdpYjNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdjaUxDSnBZMlZUWlhKMlpYSnpJaXdpZFhKc2N5SXNJbEpVUTFCbFpYSkRiMjV1WldOMGFXOXVJaXdpWTNKbFlYUmxSR0YwWVVOb1lXNXVaV3dpTENKdVpXZHZkR2xoZEdWa0lpd2liM0prWlhKbFpDSXNJbTVsWjI5MGFXRjBhVzl1UTJoaGJtNWxiQ0lzSW1OeVpXRjBaVUZ1YzNkbGNpSXNJbUZ1YzNkbGNrUmxjMk1pWFN3aWJXRndjR2x1WjNNaU9pSkRRVUZCTEZOQlFUSkRRU3hGUVVGTlF5eEhRVU14UWl4cFFrRkJXa01zVTBGQk1FTXNhVUpCUVZoRExFOUJRM2hEUVN4UFFVRlBSQ3hSUVVGVlJDeEpRVU5STEcxQ1FVRllSeXhSUVVGNVFrRXNUMEZCVDBNc1NVRkRPVU5FTEU5QlFVOHNSMEZCU1Vnc1IwRkRaU3hwUWtGQldrTXNVVUZEWkVFc1VVRkJZU3hKUVVGSlJDeEpRVVZxUWtRc1JVRkJWU3hKUVVGSlF5eEpRVkpvUWl4RFFWTkhTeXhSUVVGUkxGZEJRMWdzVHl4WlExUkZMRWxCUVVsRExFVkJRVzFDTEVkQlIzWkNMRk5CUVZORExFVkJRVzlDUXl4SFFVYzFRaXhIUVVGSFJpeEZRVUZwUWtVc1IwRkRia0lzVDBGQlQwWXNSVUZCYVVKRkxFZEJRVlZRTEZGQlIyNURMRWxCUVVsRExFVkJRVk5KTEVWQlFXbENSU3hIUVVGWkxFTkJRM3BEUXl4RlFVRkhSQ3hGUVVOSVJTeEhRVUZITEVWQlEwaFVMRkZCUVZNc1NVRlZWaXhQUVU1QlZTeEZRVUZSU0N4SFFVRlZTU3hMUVVGTFZpeEZRVUZQUkN4UlFVRlRReXhGUVVGUlFTeEZRVUZQUkN4UlFVRlRUU3hIUVVjdlJFd3NSVUZCVDFFc1IwRkJTU3hGUVVkS1VpeEZRVUZQUkN4UlFUQkVaaXhQUVhKRVFVMHNSVUZCYjBKTkxFVkJRVWxHTEVWQlIzaENTaXhGUVVGdlFrOHNSVUZCU1ZJc1JVRkhlRUpETEVWQlFXOUNVU3hGUVVGSkxGTkJRVk5rTEVWQlFWTmxMRVZCUVUxRExFZEJRek5EVml4RlFVRnZRbGNzUlVGQlJXcENMRVZCUVZObExFbEJRMnhEUnl4UFFVRlBReXhsUVVGbGJrSXNSVUZCVTJVc1JVRkJUU3hEUVVGRlN5eFpRVUZaTEVWQlFVMURMRWxCUVV0TUxFdEJTMmhGVml4RlFVRnZRbWRDTEVWQlFVa3NVMEZCVTNSQ0xFZEJRMWdzYjBKQlFWaDFRaXhSUVVFd1FrRXNUMEZCVDBNc1lVRkRNVU5PTEU5QlFVOURMR1ZCUVdWdVFpeEZRVUZUZFVJc1QwRkJUME1zV1VGQllTeERRVUZGUXl4TlFVRlBMRmRCUlRkRVVDeFBRVUZQUXl4bFFVRmxia0lzUlVGQlV5eGhRVUZqTEVOQlFVVjVRaXhQUVVGUExFdEJVWFpFYmtJc1JVRkJiMEp2UWl4RlFVRkpMRk5CUVZORUxFVkJRVTlGTEVkQlJYWkRMRWRCUkZVc1JVRkJVRUVzU1VGQlZVWXNSVUZCVVc1Q0xFVkJRVzlDYlVJc1NVRkRMMElzUlVGQlVFVXNSVUZCVlN4UFFVRlBSaXhGUVVOd1FpeEhRVUZYTEVWQlFWQkZMRWRCUVRoQ0xHbENRVUZXUml4SFFVRnpRa0VzUjBGQlUwRXNSVUZCVFVjc1YwRkJXU3hQUVVGUFNDeEZRVU5vUml4SlFVRkpTU3hGUVVGTFdDeFBRVUZQV1N4UFFVRlBMRTFCUjNaQ0xFZEJSa0Y0UWl4RlFVRnZRbWRDTEVWQlFVVlBMRWRCUTNSQ1dDeFBRVUZQUXl4bFFVRmxWU3hGUVVGSkxGVkJRVmNzUTBGQlJWUXNXVUZCV1N4RlFVRk5TeXhOUVVGUFFTeEpRVU4wUkN4RlFVRlFSU3hIUVVFMFFpeHBRa0ZCVkVZc1JVRkJiVUlzU1VGQlNTeEpRVUZKVFN4TFFVRlBUaXhGUVVGUGJrSXNSVUZCYjBKUkxFVkJRVVZsTEVWQlFVbEZMRVZCUVVzc1UwRkJVMEVzUjBGQlR5eFBRVUZQVGl4RlFVRk5UU3hKUVVGUlF5eExRVUZMTEV0QlFVMUVMRWxCUXpsSkxFOUJRVTlHTEVkQlNWSjJRaXhGUVVGdlFqSkNMRVZCUVVrc1UwRkJVMmhETEVkQlEyaERMRWxCUVVsbExFVkJRVk5tTEVkQlFWVkJMRVZCUVU4eVFpeFhRVU0zUWl4WFFVRjNRaXhQUVVGUE0wSXNSVUZCWjBJc1UwRkRMME1zVjBGQk9FSXNUMEZCVDBFc1IwRkZkRU1zVDBGRVFVc3NSVUZCYjBKUkxFVkJRVVZGTEVWQlFWRXNTVUZCUzBFc1IwRkROVUpCTEVkQlNWSldMRVZCUVc5Q1Z5eEZRVUZKTEZOQlFWTnBRaXhGUVVGUlF5eEhRVUZaTEU5QlFVOXFRaXhQUVVGUGEwSXNWVUZCVlVNc1pVRkJaVEZDTEV0QlFVdDFRaXhGUVVGUlF5eEpRVWQ2UnpkQ0xFVkJRVzlDWjBNc1JVRkJTU3hIUVVscVFtaERMRVZCUVc5Q1FTeEZRVUZ2UW1sRExFVkJRVWtzUnl4blJFTnNSbkpFTEdkRVFVRjNRa01zVVVGQlVVTXNUVUZCVFN4SFFVRkhSQ3hSUVVGUlJTeGhRVUZoTEZOQlFWTkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhPRUlzWVVGQllVVXNVMEZCVTBZc1JVRkJSVVVzVDBGQlQwWXNTVUZCU1N4SlFVRkpMRWxCUVVrM1FpeEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQwTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmFrTXNSVUZCUldsRExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZUQ3hGUVVGRlNTeEhRVUZITEVkQlFVZElMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZiVU1zUlVGQlJVUXNSVUZCUlVvc1IwRkJSeXhOUVVGTkxFTkJRVU51UXl4RlFVRkZkVU1zUlVGQlJVVXNSVUZCUlVRc1IwRkJSeXhOUVVGTkxFTkJRVU40UXl4SFFVRkhMRVZCUVVWNVF5eFBRVUZGTEVsQlFWTlVMRkZCUVZGVkxGbEJRVmNzUlVGQlIxWXNVVUZCVVZjc2MwSkJRWEZDTEVWQlFVZFlMRkZCUVZGWkxITkNRVUZ4UWl4RlFVRkhXaXhSUVVGUllTeDNRa0ZCZFVJc1JVRkRNMVZpTEZGQlFWRnlRaXhsUVVGbGNVSXNVVUZCVVZVc1dVRkJXU3h0UWtGQmJVSm9ReXhQUVVGUGIwTXNhVUpCUVdsQ2NFTXNUMEZCVDBNc1pVRkJaU3hUUVVGVGQwSXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVYzRRaXhIUVVGSFdTeE5RVUZOYmtJc1YwRkJWMDhzUjBGQlIzcENMRTlCUVU5clFpeFpRVUZaVHl4RlFVRkZReXhIUVVGSEwwSXNSVUZCUlZrc1VVRkJVV1VzVVVGQlVXZENMRlZCUVZVc1UwRkJVMklzUjBGQlJ5eE5RVUZOTEc5Q1FVRnZRblpETEZGQlFWRkJMRk5CUVZOMVF5eEZRVUZGUVN4UFFVRkZMRWxCUVc5Q1l5eFJRVUZSTEUxQlFVMUJMRTlCUVU5QkxFOUJRVTlrTEVkQlFVZElMRkZCUVZGcFFpeFBRVUZQYWtJc1VVRkJVV2RDTEZWQlFWVkZMRTFCUTNSV2JFSXNVVUZCVVcxQ0xGTkJRVk1zVTBGQlUyaENMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGSExFZEJRVWM0UWl4RlFVRkZMRU5CUVdsRExFbEJRV2hETDBJc1JVRkJSVEpDTEZGQlFWRnBRaXhQUVVGUFpDeEZRVUZGUVN4RlFVRkZhVUlzVFVGQlRTeExRVUZUT1VNc1JVRkJSU3hGUVVGRlFTeEZRVUZGTmtJc1JVRkJSVWNzVDBGQlR5eEZRVUZGYUVNc1NVRkJTU3hEUVVGRExFbEJRVWxwUXl4RlFVRkZTaXhGUVVGRk4wSXNSMEZCUjJsRExFdEJRVXRzUXl4SlFVRkpRU3hGUVVGRmEwTXNSMEZCUnl4SlFVRkpiRU1zUlVGQlJVRXNSVUZCUld0RExFbEJRVEJDU0N4RlFVRkZRU3hGUVVGVU9VSXNSVUZCUlVRc1JVRkJiRUk0UWl4RlFVRkZRU3hGUVVGRlFTeEZRVUZGUnl4UFFVRlBMRTlCUVc5Q2FFTXNSMEZCUnl4TlFVRk5PRUlzUjBGQlIwb3NVVUZCVVhKQ0xHVkJRV1ZPTEVWQlFVVTRRaXhGUVVGRkxFTkJRVU5yUWl4alFVRmhMRVZCUVVkRExGVkJRVk1zUlVGQlIzSkRMRTFCUVUxdFFpeE5RVUZOU2l4UlFVRlJiVUlzVTBGQlV5dzJRa0ZCTkVJc1UwRkJVMmhDTEVkQlFVY3NUMEZCVDBFc1IwRkJTU3hUUVVGVFFTeEZRVUZGT1VJc1IwRkJSeXhQUVVGUE1rSXNVVUZCVVVVc1lVRkJZV2RDTEV0QlFVdG1MRVZCUVVVNVFpeEhRVUZIVEN4TFFVRkpMRTFCUVUwc1QwRkRNVmhuUXl4UlFVRlJkVUlzWjBKQlFXZENMRk5CUVZOd1FpeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEhRVUZITEUxQlFVMDRRaXhGUVVGRkxFMUJRVTBzU1VGQlNYRkNMRlZCUVZVc2VVTkJRWGxEYmtRc1JVRkJSU3hyUTBGQmEwTXNSMEZCUnl0Q0xHRkJRV0Z4UWl4UFFVRlBMRTFCUVUwc1NVRkJTVVFzVlVGQlZTeHpRMEZCYzBOdVJDeEZRVUZGTEhGRFFVRnhReXhQUVVGUE9FSXNSVUZCUlN4SlFVTnlVa2dzVVVGQlVXMUNMRk5CUVZNc05rSkJRVFJDTEZOQlFWTm9RaXhIUVVGSExFOUJRVTlCTEVkQlFVa3NVMEZCVTBFc1JVRkJSVGxDTEVkQlFVY3NTVUZCU1N0Q0xFVkJRVVZLTEZGQlFWRjFRaXhuUWtGQlowSk1MRXRCUVV0bUxFVkJRVVVzV1VGQldVRXNSMEZCUnl4UlFVRkhMRWxCUVZNNVFpeEpRVUZKUVN4RlFVRkZLMElzUlVGQlJVVXNVVUZCVVdwRExFVkJRVVZ4UkN4TFFVRkxReXhKUVVGSkxFVkJRVVZFTEV0QlFVdEZMRWxCUVUwc1JVRkJSblpFTEVWQlFVa3JRaXhGUVVGRlJTeFRRVUZUTEVsQlFVa3NTVUZCU1VNc1JVRkJSVW9zUlVGQlJVY3NUMEZCVHl4RlFVRkZReXhIUVVGSExFVkJRVVZzUXl4SFFVRkhMRWRCUVVjclFpeEpRVUZKTDBJc1NVRkJTVGhDTEVsQlFVbEpMRWRCUVVjc1QwRkJUU3hGUVVGSExFOUJRVThzUjBGQlIwRXNTMEZCU1N4TlFVRk5MRTlCUVU5UUxGRkJRVkZ0UWl4VFFVRlRMSGRDUVVGMVFpeFRRVUZUYUVJc1IwRkJSeXhQUVVGUFFTeEhRVUZKTEZOQlFWTkJMRVZCUVVVNVFpeEhRVUZITEU5QlFVOHlRaXhSUVVGUlJTeGhRVUZoWjBJc1MwRkJTMllzUlVGQlJUbENMRWRCUVVkdlF5eExRVUZKTEUxQlFVMHNUMEZEZGxwVUxGRkJRVkZ0UWl4VFFVRlRMQ3RDUVVFNFFpeFRRVUZUYUVJc1IwRkJSeXhQUVVGUFFTeEhRVUZKTEZOQlFWTkJMRVZCUVVVNVFpeEhRVUZITEVsQlFVa3JRaXhGUVVGRlNpeFJRVUZSZFVJc1owSkJRV2RDVEN4TFFVRkxaaXhGUVVGRkxHTkJRV05CTEVkQlFVY3NSMEZCUnl4SlFVRkpTU3hGUVVGRlNDeEZRVUZGUlN4UFFVRlBSU3hGUVVGRlRDeEZRVUZGUnl4UFFVRlBha01zUlVGQlJYRkVMRXRCUVV0RExFbEJRVWtzUlVGQlJVUXNTMEZCUzBVc1NVRkJUU3hGUVVGR2RrUXNSVUZCU1N0Q0xFVkJRVVZGTEZOQlFWTXNTVUZCU1N4SlFVRkpkVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZja0lzUjBGQlIyNURMRVZCUVVWclF5eEhRVUZITEVkQlFVZElMRVZCUVVVdlFpeE5RVUZOT0VJc1JVRkJSVEJDTEV0QlFVc3NUMEZCVFN4RlFVRkhMRTlCUVU5QkxFZEJRVWR5UWl4TFFVRkpMRTFCUVUwc1QwRkRhbEpTTEZGQlFWRnRRaXhUUVVGVExESkNRVUV3UWl4VFFVRlRhRUlzUjBGQlJ5eFBRVUZQUVN4SFFVRkpMRk5CUVZOQkxFZEJRVWNzU1VGQlNVTXNSVUZCUlVvc1VVRkJVWFZDTEdkQ1FVRm5Ra3dzUzBGQlN5eExRVUZMTEZWQlFWVXNSMEZCUnl4RlFVRkZaaXhIUVVGSExGZEJRVmRCTEVWQlFVVXNUVUZCVFN4SlFVRkpNa0lzVjBGQlZ5eDFRa0ZCZFVJelFpeEhRVUZITEVWQlFVVXNTVUZCU1N4SlFVRkpOMElzUlVGQlJTeEhRVUZITmtJc1IwRkJVU3hGUVVGR1FTeEpRVUZOTjBJc1IwRkJSemhDTEVsQlFVZEVMRXRCUVVzc1MwRkJSVU1zUjBGQlIwRXNSMEZCUlN4UFFVRlBPVUlzUzBGQlNTeE5RVUZOTEU5QlFVOHNTVUZCU1hsRUxGVkJRVk1zUlVGQlIwTXNTMEZCUzBFc1RVRkJUU3hIUVVGSFFTeExRVUZMWml4UFFVRlBReXhOUVVGTlpTeExRVUZMUkN4TFFVRkxSU3hOUVVGTkxGTkJRVk12UWl4SFFVRkhMRmxCUVU4c1NVRkJVMEVzUjBGQlJ6WkNMRXRCUVV0SExGTkJRVk1zVTBGQlUyaERMRWRCUVVjc1RVRkJUU3hwUWtGQmFVSkJMRWRCUVVjMlFpeExRVUZMU1N4VlFVRlZMRk5CUVZOcVF5eEhRVUZITEUxQlFVMHNhMEpCUVd0Q1FTeEhRVU12WXpaQ0xFdEJRVXRMTEZOQlFWTXNVMEZCVTJ4RExFZEJRVWNzVFVGQlRTeHBRa0ZCYVVKQkxFZEJRVWMyUWl4TFFVRkxUU3haUVVGWkxGTkJRVk51UXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpoQ0xFVkJRVVZCTEVWQlFVVnBRaXhOUVVGTkxFdEJRVXN2UXl4RlFVRkZRU3hIUVVGSE1rUXNTMEZCUzJZc1QwRkJUMlFzUlVGQlJTeExRVUZMT1VJc1VVRkJSeXhKUVVGdlFrRXNSVUZCUld0RkxGbEJRVmxzUlN4RlFVRkZhMFVzVjBGQlZ5eFBRVUZQY0VNc1JVRkJSU3hKUVVGSkxFbEJRVWtzU1VGQlNUZENMRVZCUVVVMlFpeEZRVUZGUnl4VFFVRlRhRU1zUlVGQlJUWkNMRVZCUVVWeFF5eFhRVUZYY2tNc1JVRkJSVWNzVVVGQlVUQkNMRXRCUVV0RkxFMUJRVTA1UWl4SFFVRkhMMElzUlVGQlJVTXNSMEZCUnpoQ0xFVkJRVVV2UWl4RlFVRkZRU3hGUVVGRlF5eEpRVUZKUkN4RlFVRkZReXhMUVVGTFNTeFBRVUZQYTBJc1ZVRkJWWFJDTEVkQlFVZEVMRVZCUVVWRExFZEJRVWRFTEVWQlFVVkRMRWRCUVVjc1NVRkRNMU13UkN4TFFVRkxkRVVzVDBGQlR5eFRRVUZUZVVNc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTWtJc1UwRkJVeXhEUVVGRExFbEJRVWt4UkN4RlFVRkZNa1FzUzBGQlMyWXNUMEZCVDNkQ0xESkNRVUV5UW01RkxFVkJRVVV3UkN4TFFVRkxaaXhQUVVGUGVVSXNaMEpCUVdkQ2NrVXNVVUZCUnl4SlFVRlRRU3hGUVVGRmMwVXNWVUZCVldwRkxFOUJRVTlyUWl4VlFVRlZReXhsUVVGbE1VSXNTMEZCUzBVc1JVRkJSVGhDTEVkQlFVZERMRVZCUVVVdlFpeEZRVUZGT0VJc1IwRkJSemRDTEZGQlFVY3NTVUZCVTBFc1JVRkJSWEZGTEZWQlFWVnFSU3hQUVVGUGEwSXNWVUZCVlVNc1pVRkJaVEZDTEV0QlFVdEhMRVZCUVVVMlFpeExRVUZMUXl4RlFVRkZPVUlzUlVGQlJUWkNMRWxCUVVrc1QwRkJUME1zUjBGQlJ6UkNMRXRCUVV0WkxHZENRVUZuUWl4TFFVRkxXaXhMUVVGTFlTeFBRVUZOTEVWQlFVZGlMRXRCUVV0akxFOUJRVThzUzBGQlMyUXNTMEZCUzJVc1kwRkJZU3hGUVVGSFppeExRVUZMWjBJc2QwSkJRWFZDTEVWQlFVZG9RaXhMUVVGTGFVSXNkMEpCUVhkQ2JFSXNWMEZCVjBNc1MwRkJTMkVzVFVGQlRXSXNTMEZCUzJ0Q0xIVkRRVUZ6UXl4RlFVTTNaR3hDTEV0QlFVdHRRaXhSUVVGUkxGTkJRVk5vUkN4SFFVRkhMRWRCUVVjMlFpeExRVUZMYjBJc2IwSkJRVzlDTEUxQlFVMURMRTFCUVUwc1owUkJRV2RFTEVsQlFVbDBRaXhWUVVGVlF5eExRVUZMYzBJc1dVRkJXVzVFTEVkQlFVY3NUVUZCVFd0RUxFMUJRVTBzWTBGQlkyeEVMRVZCUVVVc2RVSkJRWFZDTmtJc1MwRkJTM1ZDTEc5Q1FVRnZRbkJFTEVsQlFVazJRaXhMUVVGTGRVSXNiMEpCUVc5Q0xGTkJRVk53UkN4RlFVRkZReXhIUVVGSExFbEJRVWt5UWl4VFFVRlRMRkZCUVZGRExFdEJRVXQzUWl4dlFrRkJiMEp5UkN4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVTRRaXhIUVVGSE9VSXNSVUZCUlVFc1JVRkJSVzlHTEZWQlFWVXNSVUZCUlhCR0xFVkJRVVZ4Uml4WlFVRlpMRk5CUVZNeFFpeExRVUZMTWtJc1owSkJRV2RDZEVZc1NVRkJTVEpFTEV0QlFVdDNRaXh2UWtGQmIwSnVSaXhKUVVGSExFVkJRVWN5UkN4TFFVRkxUU3haUVVGWmJrTXNSVUZCUlVNc1NVRkRNV0kwUWl4TFFVRkxORUlzWlVGQlpTeFRRVUZUZWtRc1IwRkJSeXhQUVVGSFFTeEhRVUZIUVN4SFFVRkhOa0lzUzBGQlMyWXNUMEZCWTJVc1MwRkJTelpDTEdkQ1FVRm5RakZFTEVWQlFVVXlSQ3hYUVVGVkxFOUJRVTg1UWl4TFFVRkxLMElzV1VGQldTOUNMRXRCUVVzclFpeFZRVUZWTDBJc1MwRkJTelpDTEdkQ1FVRm5RamRDTEV0QlFVdG1MRTlCUVU4MlF5eFhRVUZyUWpsQ0xFdEJRVXNyUWl4WlFVRlhMMElzUzBGQlMyZERMR1ZCUVdVc2MwSkJRWE5DYUVNc1MwRkJTeXRDTEZWQlFWVXNTMEZCU3k5Q0xFdEJRVXMyUWl4blFrRkJaMElzVTBGQlV6RkVMRWRCUVVjc1QwRkJUMEVzUlVGQlJVRXNSVUZCUlRoRUxHVkJRV1U1UkN4RlFVRkZPRVFzWTBGQll5eHZRa0ZCYjBJNVJDeEZRVUZGUVN4RlFVRkZLMFFzVDBGQlR5OUVMRVZCUVVWblJTeGhRVUZoTEZkQlFWZHVReXhMUVVGTFowTXNaVUZCWlVrc1MwRkJTMnBGTEVkQlFVZEJMRVZCUVVVc1NVRkJTVFpDTEV0QlFVdHhReXhwUWtGQmFVSXNPRUpCUTJwamNrTXNTMEZCUzNaRkxFOUJRVThzVTBGQlV6QkRMRWRCUVVjc1NVRkJTVFpDTEV0QlFVdEhMRk5CUVZOb1F5eExRVUZMUVN4SlFVRkpMRWRCUVVkQkxFVkJRVVZ0UlN4UFFVRlBkRU1zUzBGQlMzRkRMR3RDUVVGclFpeE5RVUZOYUVJc1RVRkJUU3cyUWtGQk5rSXNTVUZCU1hKQ0xFdEJRVXQxUXl4M1FrRkJkMElzVFVGQlRXeENMRTFCUVUwc1ZVRkJWV3hFTEVWQlFVVXNORmhCUTNoTUxFZEJRVWMyUWl4TFFVRkxkME1zYlVKQlFXMUNReXhYUVVGWExFMUJRVTF3UWl4TlFVRk5MRzFFUVVGM1JpeEhRVUZ5UTNKQ0xFdEJRVXQzUXl4dFFrRkJiVUpETEZkQlFWZDBSU3hIUVVGTk5FSXNVMEZCVXl4RFFVRkRMRWRCUVVkRExFdEJRVXR6UWl4WlFVRlpia1FzUjBGQlJ5eE5RVUZOYTBRc1RVRkJUU3hqUVVGamJFUXNSVUZCUlN3NFFrRkJPRUkyUWl4TFFVRkxkMElzYjBKQlFXOUNja1FzUzBGQlN6WkNMRXRCUVV0MlJTeFBRVUZQYjBJc1NVRkJTU3hUUVVGVGMwSXNSMEZCUnl4UFFVRlBOa0lzUzBGQlMzWkZMRTlCUVU5cFNDeGhRVUZoZGtVc1NVRkRibFUyUWl4TFFVRkxka1VzVDBGQlQybElMR0ZCUVdFc1UwRkJVM1pGTEVkQlFVY3NTVUZCU1RSQ0xGTkJRVk1zUTBGQlF5eEhRVUZITlVJc1MwRkJTelpDTEV0QlFVc3lReXhsUVVGbExFOUJRVTh6UXl4TFFVRkxNa01zWlVGQlpYaEZMRWRCUVVjelF5eFJRVUZSTEVsQlFVbDNSU3hMUVVGTGQwSXNiMEpCUVc5Q2NrUXNSMEZCUnl4UFFVRnBReXhQUVVFeFFrRXNSVUZCUlRaQ0xFdEJRVXN5UWl4blFrRkJaMEo0UkN4SlFVRlhRU3hGUVVGRkxFdEJRVXNzVDBGQlR5eE5RVUZOTmtJc1MwRkJTelJETEZkQlFWY3NRMEZCUTBNc1NVRkJTU3hOUVVGTlF5eExRVUZMTEZGQlFWRTVReXhMUVVGTGQwTXNiVUpCUVcxQ0xFdEJRVXQ0UXl4TFFVRkxiMElzYTBKQlFXdENMRmRCUVZjc1QwRkJUM0JDTEV0QlFVdDFReXg1UWtGQmVVSjJReXhMUVVGTEswTXNkMEpCUVhkQ0wwTXNTMEZCUzNWRExITkNRVUZ6UWl4WFFVRlhMRkZCUVZGMlF5eExRVUZMZDBNc2IwSkJRVzlDZUVNc1MwRkJTM2RETEcxQ1FVRnRRbEVzVFVGQlRXaEVMRXRCUVVzMFF5eFhRVUZYUlN4TlFVTm9aamxETEV0QlFVc3JReXh4UWtGQmNVSXNWMEZCVnl4SFFVRkhMME1zUzBGQlMzZERMRzlDUVVGdlFuaERMRXRCUVV0M1F5eHRRa0ZCYlVKUkxFMUJRVTFvUkN4TFFVRkxORU1zVjBGQlYwTXNTVUZCU1N4UFFVRk5MRVZCUVVjc1NVRkJTVEZGTEVWQlFVVTJRaXhMUVVGTFppeFBRVUZQYWtJc1VVRkJVU3hSUVVGUFJ5eEpRVUZGTEcxQ1FVRnRRa0VzUlVGQlJUaEZMSGRDUVVFd1FqbEZMRVZCUVVVNFJTeDVRa0ZEYUU1cVJDeExRVUZMZGtVc1QwRkJUM2xJTEhWQ1FVRjFRaXhYUVVGWExFbEJRVWx1UkN4WFFVRlhReXhMUVVGTGRVTXNkMEpCUVhkQ0xFMUJRVTFzUWl4TlFVRk5MQ3RGUVVFclJTeEpRVUZKZEVJc1YwRkJWME1zUzBGQlMzZERMRzFDUVVGdFFrTXNWMEZCVnl4TlFVRk5jRUlzVFVGQlRTd3lSVUZCTWtWeVFpeExRVUZMZDBNc2JVSkJRVzFDVlN4M1FrRkJkVUlzUjBGRE4xZHNSQ3hMUVVGTGJVUXNaMEpCUVdkQ0xGTkJRVk5vUml4SFFVRkhMRWxCUVVrMFFpeFRRVUZUTEVOQlFVTXNTVUZCU1VNc1MwRkJTeXRETEhWQ1FVRjFRaXhOUVVGTk1VSXNUVUZCVFN4eFJVRkJjVVVzUjBGQlIzSkNMRXRCUVV0M1F5eHZRa0ZCYjBKNFF5eExRVUZMZDBNc2JVSkJRVzFDUXl4WFFVRlhMRTFCUVUxd1FpeE5RVUZOTERSRVFVRTBSQ3hIUVVGSGJFUXNTMEZCU3paQ0xFdEJRVXN5UXl4bFFVRmxMRTFCUVUxMFFpeE5RVUZOTERCQ1FVRXdRbXhFTEVWQlFVVXNjVUpCUVhOQ0xFZEJRVWMyUWl4TFFVRkxkME1zYlVKQlFXMUNlRU1zUzBGQlMzZERMRzFDUVVGdFFrTXNWMEZCVjNSRkxFMUJRVTBzUTBGQlF5eEpRVUZKUXl4RlFVRkZORUlzUzBGQlMyWXNUMEZCVDJwQ0xGRkJRVkVzU1VGQlNVa3NSMEZCUnl4dFFrRkJiVUpCTEVWQlFVVTJSU3h4UWtGQmNVSXNUVUZCVFRWQ0xFMUJRVTBzTUVKQlF6ZG9RbXhFTEVWQlFVVXNhME5CUVd0RFF5eEZRVUZGUVN4RlFVRkZaMFlzVVVGQlVXaEdMRVZCUVVVMlJTeDNRa0ZCZDBKcVJDeExRVUZMTWtNc1pVRkJaWGhGTEVkQlFVY3NRMEZCUXpORExGRkJRVkUwUXl4RlFVRkZORVVzUzBGQlMyaEVMRXRCUVVzMFF5eFhRVUZYUXl4SlFVRkpPVWNzVTBGQlUyOURMRXRCUVVzMlFpeExRVUZMY1VRc1dVRkJXU3hUUVVGVGJFWXNSMEZCUnl4SFFVRkhOa0lzUzBGQlMybENMSGRDUVVGM1FpeE5RVUZOT1VNc1JVRkJSVUVzUjBGQlJ5eEhRVUZIYTBRc1RVRkJUU3gxUkVGQmRVUnNSQ3hGUVVGRkxFdEJRVXRCTEVWQlFVVXNUMEZCVVRaQ0xFdEJRVXR6UkN4bFFVRmxMRk5CUVZOdVJpeExRVU42VlRSQ0xGZEJRVmRETEV0QlFVdHpRaXhaUVVGWkxGTkJRVk51UkN4SFFVRkhMRTlCUVU5QkxFdEJRVXMyUWl4TFFVRkxNa01zYVVKQlFXbENNME1zUzBGQlMzZENMRzlDUVVGdlFuSkVMRWxCUVVrMlFpeExRVUZMZFVRc1owSkJRV2RDZGtRc1MwRkJTekpDTEdkQ1FVRm5RbmhFTEV0QlFVczJRaXhMUVVGTGQwSXNiMEpCUVc5Q0xFTkJRVU1zWlVGQll5eEpRVUZMZUVJc1MwRkJTekpDTEdkQ1FVRm5RaXhUUVVGVGVFUXNSVUZCUlVNc1IwRkJSMFFzUlVGQlJVRXNSVUZCUldsQ0xFMUJRVTBzUzBGQlMyaENMRVZCUVVWQkxFZEJRVWMwUWl4TFFVRkxaaXhQUVVGUExFbEJRVWtzU1VGQlNUVkRMRVZCUVVVc1JVRkJSVUVzUlVGQlJUaENMRVZCUVVWSExFOUJRVTlxUXl4SlFVRkpMRWRCUVVjclFpeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRk9VSXNTMEZCU3pKRUxFdEJRVXQxUkN4blFrRkJaMEp1Uml4SFFVRkhMRTlCUVU4c1MwRkJTeXhQUVVGUFFTeEhRVUZITkVJc1MwRkJTM2RFTEZWQlFWVXNVMEZCVTNKR0xFVkJRVVZETEVkQlFXOUNMRWxCUVVrc1NVRkJTUzlDTEV0QlFYcENLMElzUlVGQlJVRXNSMEZCUnpSQ0xFdEJRVXRtTEU5QlFXOUNaQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSemhDTEVWQlFVVTVRaXhKUVVOcVlUSkVMRXRCUVV0NVJDeGpRVUZqTEZOQlFWTjBSaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zU1VGQlNYbEVMRlZCUVZWRExFdEJRVXN3UkN4elFrRkJjMEl4UkN4TFFVRkxNa1FzWVVGQllVWXNZMEZCWTNSR0xFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEpRVUZKTUVRc1MwRkJTelJFTEhGQ1FVRnZRaXhGUVVGSE5VUXNTMEZCU3paRUxHTkJRV01zVTBGQlV6RkdMRWRCUVVjMlFpeExRVUZMWml4UFFVRlBOa1VzVTBGQlV6bEVMRXRCUVV0bUxFOUJRVTgyUlN4UlFVRlJReXhOUVVGTk5VWXNTVUZETDA0MlFpeExRVUZMYjBRc1VVRkJVU3hUUVVGVGFrWXNSMEZCUnl4SlFVRkpORUlzVTBGQlV5eERRVUV3UkN4SFFVRjZSRU1zUzBGQlN6UkVMSEZDUVVGeFFqVkVMRXRCUVVzeVJDeGhRVUZoU3l4VlFVRlZOMFlzUjBGQlRUWkNMRXRCUVV0elFpeFpRVUZaYmtRc1NVRkJTU3hIUVVGSE5rSXNTMEZCUzI5Q0xHOUNRVUZ2UWl4UFFVRlBjRUlzUzBGQlMzWkZMRTlCUVU5cFNDeGhRVUZoZGtVc1VVRkJVU3hIUVVGSE5rSXNTMEZCU3pSRUxHOUNRVUZ2UWl4RFFVRkRMRWxCUVVsNFJpeEZRVUZGTkVJc1MwRkJTM2RETEcxQ1FVRnRRbmhETEV0QlFVdDNReXh0UWtGQmJVSXNTMEZCU3l4SlFVRkplRU1zUzBGQlN6SkVMR0ZCUVdGTkxFMUJRVTA1Uml4SFFVRkhMRkZCUVZFMlFpeExRVUZMZDBNc2JVSkJRVzFDY0VVc1IwRkJSeXhQUVVGUExFOUJRVTgwUWl4TFFVRkxhMFVzV1VGQldTeFRRVUZUTDBZc1IwRkJSeXhOUVVGTkxFbEJRVWsyUWl4TFFVRkxiVVVzVTBGQlV5eEhRVUZIYmtVc1MwRkJTMjlGTEdGQlFXRXNZVUZET1dGd1JTeExRVUZMY1VVc1pVRkJaU3hYUVVGWExFMUJRVTFvUkN4TlFVRk5MR3REUVVGdFEzSkNMRXRCUVV0elJTeHRRa0ZCYlVJc1UwRkJVMjVITEVkQlFVZEJMRVZCUVVWdlJ5eGxRVUZWTEVWQlFVOXdSeXhGUVVGRmNVY3NXVUZCV1N4WFFVRlhMRTlCUVVkeVJ5eEZRVUZGYjBjc1ZVRkJhVUp3Unl4RlFVRkZiMGNzVjBGQlZYWkZMRXRCUVV0aExGRkJRVkZpTEV0QlFVdDVSU3gzUWtGQmQwSjZSU3hMUVVGTGVVVXNkMEpCUVhkQ2JrY3NVVUZCVVVnc1IwRkJWVUVzUlVGQlJXOUhMRlZCUVZVc1NVRkJTWEJITEV0QlFVazJRaXhMUVVGTGVVVXNkMEpCUVhkQ0xFZEJRVWQ2UlN4TFFVRkxNRVVzZDBKQlFYVkNMRVZCUVVjeFJTeExRVUZMTWtVc2IwSkJRVzlDTTBVc1MwRkJTMkVzVFVGQlRXSXNTMEZCU3pKRExHVkJRV1VzUjBGQlJ6TkRMRXRCUVVzd1JDeHpRa0ZCYzBJelJDeFZRVUZWUXl4TFFVRkxORVFzYjBKQlFXOUNOVVFzUzBGQlN6UkZMRlZCUVZVc1UwRkRjR1kxUlN4TFFVRkxOa1VzT0VKQlFUWkNMRVZCUVVjM1JTeExRVUZMT0VVc2MwSkJRWE5DTEVkQlFVYzVSU3hMUVVGTEswVXNWMEZCVnl4bFFVRmxMMFVzUzBGQlMyZEdMR2xDUVVGcFFpeExRVUZMYUVZc1MwRkJTMmxHTEhOQ1FVRnpRaXhYUVVGWExFZEJRVWNzVFVGQlRXcEdMRXRCUVV0blJpeHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFbEJRVWszUnl4SFFVRkhLMGNzUzBGQlN5dzRSVUZCT0VVc1RVRkJUVGxITEVkQlFVZEVMRWRCUVVVc1JVRkJSelpDTEV0QlFVdG5SaXhwUWtGQmFVSTNSeXhGUVVGRkxFOUJRVTgyUWl4TFFVRkxaMFlzYTBKQlFXdENhRVlzUzBGQlMyMUdMREJDUVVFd1FpeFRRVUZUYUVnc1IwRkJSeXhOUVVGTkxHVkJRV1ZCTEVWQlFVVXNZMEZEZG1FMlFpeExRVUZMYjBZc1YwRkJWeXhUUVVGVGFrZ3NSMEZCUnl4SlFVRkpReXhGUVVGRk5FSXNTMEZCUzNkRExHMUNRVUZ0UWl4SlFVRm5SeXhIUVVFMVJuaERMRXRCUVV0M1F5eHRRa0ZCYlVJc1EwRkJRME1zVjBGQlZ5eEhRVUZIVXl4M1FrRkJkVUlzUlVGQlIwWXNTMEZCUzJoRUxFdEJRVXMwUXl4WFFVRlhSU3hOUVVGVE9VTXNTMEZCUzNGR0xGZEJRVmRzU0N4SFFVRkhMRWxCUVVrNVFpeEZRVUZGT0VJc1JVRkJSV2hETEZWQlFVc3NSVUZCVHl4UlFVRlRMRXRCUVVjMlJDeExRVUZMUnl4VFFVRlRhRU1zUjBGQmQwZ3NUVUZCVFd0RUxFMUJRVTBzTmtKQlFXcEpja0lzUzBGQlMybEdMREJDUVVFd1FqbEhMRVZCUVVVMlFpeExRVUZMYlVZc01FSkJRVEJDYUVnc1NVRkJTVGxDTEVWQlFVVXlSQ3hMUVVGTGMwWXNjMEpCUVhOQ2Jrb3NWVUZCU3l4RlFVRlBaME1zUjBGQmFVUXNTVUZCU1RkQ0xFVkJRVVV3UkN4TFFVRkxkME1zYlVKQlFXMUNReXhYUVVGWExFbEJRVWQ2UXl4TFFVRkxSeXhUUVVGVE4wUXNTMEZCU1VFc1JVRkRlbEFzVFVGQlRTdEZMRTFCUVUwc2QwSkJRWGRDTDBVc1JVRkJSU3hMUVVSeFRqQkVMRXRCUVV0M1F5eHRRa0ZCYlVKVkxIVkNRVUYxUW14RUxFdEJRVXQxUWl4dlFrRkJiMEpxUml4RlFVTjJaMEpFTEVkQlFVY3lSQ3hMUVVGTE1rVXNjVUpCUVhGQ2Fra3NUMEZCVHpaSkxFMUJRVTBzYVVKQlFXbENiRW9zUjBGQlJ5eE5RVUZOUVN4SFFVRkhTeXhQUVVGUE5ra3NTMEZCUzJ4S0xFZEJRVWN5UkN4TFFVRkxNa01zWlVGQlpYSkhMRWRCUVVjc1EwRkJRMlFzVVVGQlVXRXNSVUZCUlRKSExFdEJRVXRvUkN4TFFVRkxORU1zVjBGQlYwVXNTMEZCU3k5SExGTkJRVk5wUlN4TFFVRkxkME1zYlVKQlFXMUNReXhaUVVFMlJDeFJRVUZSZWtNc1MwRkJTM2RETEcxQ1FVRnRRbkJGTEVsQlFVazBRaXhMUVVGTGMwWXNjMEpCUVhOQ0xGTkJRVk51U0N4SFFVRlhMRTlCUVZJclJ5eExRVUZMTDBjc1IwRkJVeXhKUVVGSk5rSXNTMEZCUzNkR0xHVkJRV1VzVTBGQlUzSklMRWRCUVVkQkxFVkJRVVZCTEVWQlFVVnBRaXhOUVVGTkxFdEJRVXNzU1VGQlNTeEpRVUZKYUVJc1JVRkJSU3hGUVVGRlFTeEZRVUZGUkN4RlFVRkZSeXhSUVVGUkxFdEJRVXRJTEVWQlFVVkRMRWRCUVVkRUxFVkJRVVZ6U0N4UFFVRlBja2dzUlVGQlJTeEhRVUZIUVN4SFFVRkhMRTFCUVUxRUxFVkJRVVZETEVsQlFVbEVMRVZCUVVWRExFVkJRVVVzU1VGQlNTeE5RVUZOUkN4RlFVRkZReXhGUVVGRkxFZEJRVWRFTEVWQlFVVnpTQ3hUUVVGVGNrZ3NSVUZCUlN4SFFVRkhRU3hKUVVGSkxFOUJRVTlFTEVWQlFVVjFTQ3hMUVVGTExFMUJRMnhtTVVZc1MwRkJTekpHTEdOQlFXTXNVMEZCVTNoSUxFZEJRVWNzUjBGQlJ6WkNMRXRCUVV0bUxFOUJRVTh5Unl4MVFrRkJkVUlzVDBGQlR6VkdMRXRCUVV0bUxFOUJRVTh5Unl4MVFrRkJkVUo2U0N4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEpRVUZKTkVJc1MwRkJTMllzVDBGQlR6UkhMR1ZCUVRKRExFOUJRVFZDZWtnc1JVRkJSVEJJTEV0QlFVc3NUVUZCVFROSUxFZEJRVVVzUjBGQlNVTXNSVUZCUlRKSUxFOUJRV01zUjBGQlJ6TklMRVZCUVVVMFNDeFJRVUZSTEV0QlFVczFTQ3hGUVVGRk5FZ3NUMEZCVHpWSUxFVkJRVVUyU0N4aFFVRmhMRXRCUVVzc1RVRkJUVFZLTEVkQlFVY3NUMEZCVHl4UFFVTTNVREpFTEV0QlFVdHJSeXhYUVVGWExGTkJRVk12U0N4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRk1FUXNTMEZCUzJZc1QwRkJUMnBDTEZGQlFWRXhRaXhKUVVGSk1FUXNTMEZCUzJZc1QwRkJUMnBDTEZGQlFWRXhRaXhGUVVGRkxFbEJRVWtzU1VGQlNXbERMRVZCUVVWcVF5eEZRVUZGTmtvc1ZVRkJWU3hKUVVGSk5VZ3NSVUZCUlN4RFFVRkRMRWxCUVVsRExFVkJRVVYzUWl4TFFVRkxiVVVzVTBGQlUyNUZMRXRCUVVzclJTeFhRVUZYYkVZc1JVRkJSVWNzUzBGQlN6SkdMR05CUVdOdVNDeEhRVUZITEVkQlFVZHhRaXhGUVVGRkxFTkJRV3RGTEVkQlFXcEZMRmxCUVZrc1JVRkJSM0ZHTEUxQlFVMXlSaXhGUVVGRkxHMUNRVUZ0UW5KQ0xFbEJRVXR5UXl4TFFVRkxOa1FzUzBGQlMyWXNVVUZCVjJVc1MwRkJTMllzVDBGQlQyMUlMRmxCUVZsd1J5eExRVUZMWml4UFFVRlBiVWdzVjBGQlYzQkpMRlZCUVZWblF5eExRVUZMWml4UFFVRlBiVWdzVjBGQlYzQkpMRkZCUVZGdFNTeFZRVUZWTEUxQlFVMDVSU3hOUVVGTkxEaEZRVUU0UldkR0xFdEJRVXRETEZWQlFWVjBSeXhMUVVGTFppeFBRVUZQYlVnc1lVRkJZWEJITEV0QlFVdG1MRTlCUVU5cVFpeFJRVUZSYlVrc1ZVRkRMMlZ1Unl4TFFVRkxaaXhQUVVGUGJVZ3NWMEZCVjNCSkxGRkJRVkZ0U1N4VlFVRm5RelZJTEVkQlFYUkNha01zUlVGQlJUQkVMRXRCUVV0bUxFOUJRVTlxUWl4VFFVRlpiVWtzVjBGQmJVa3NUMEZCZUVnMVNDeEpRVUZKUVN4RlFVRkZha01zUlVGQlJUWktMRlZCUVZVc1UwRkJVMmhKTEVWQlFVVkRMRWRCUVdkR0xFOUJRVGRGTkVJc1MwRkJTelpFTEdOQlFXTjZSaXhGUVVGRkxIZEVRVUVyUkVRc1NVRkJWMGtzUlVGQlJVb3NSVUZCUlVNc1JVRkJSUzlDTEVsQlEyNU9Na1FzUzBGQlMzVkhMRTlCUVU4c1UwRkJVM0JKTEVkQlFVY3NTVUZCU1VNc1UwRkJVMFFzUlVGQlJTeEhRVUZITEZWQlFWVkRMRVZCUVVVc1MwRkJSMFFzUlVGQk5HUXNUVUZCVFN4UFFVRXZaQ3hIUVVGSFFTeGhRVUZoV1N4TlFVRk5MRTFCUVUwc1VVRkJVU3hIUVVGSFdpeGhRVUZoZWtJc1QwRkJUeXhQUVVGUE1FSXNSVUZCUlN4SlFVRkpMMElzUlVGQlJVc3NUMEZCVDJ0Q0xGVkJRVlUwU1N4VFFVRlRja3NzUzBGQlMyZERMRWRCUVVjc1IwRkJSeXh0UWtGQmJVSTVRaXhGUVVGRkxFMUJRVTBzVTBGQlV5eEhRVUZITEd0Q1FVRnJRa0VzUjBGQlJ5eHBRa0ZCYVVJNFFpeEZRVUZGUnl4aFFVRlJMRWxCUVc5Q1NDeEZRVUZGYzBnc1lVRkJVU3hKUVVGdlFuUklMRVZCUVVWelNTeDFRa0ZCZFVKMFNTeEZRVUZGYzBrc2NVSkJRWEZDTEZWQlFWVXNUVUZCVFN4UlFVRlJMRWRCUVVjc2NVSkJRWEZDY0Vzc1VVRkJSeXhKUVVGdlFqaENMRVZCUVVWb1F5eFhRVUZOTEVsQlFXOUNaME1zUlVGQlJYTkpMSFZDUVVGMVFuUkpMRVZCUVVWelNTeHhRa0ZCY1VJc1VVRkJVU3hOUVVGTkxHZENRVU5vWjBJc1IwRkJSeXhaUVVGWmNra3NVVUZCUnl4SlFVRnZRa1FzUlVGQlJXaERMRXRCUVVzc1RVRkJUU3hUUVVGVExFOUJRVTlwUXl4SFFVRkhORUlzUzBGQlN6QkhMRTlCUVU4c1UwRkJVM1pKTEVkQlFVY3NUMEZCVHl4UFFVRlBRU3hIUVVGSE5rSXNTMEZCUzNWRUxHZENRVUZuUWl4VFFVRlRjRVlzUjBGQlJ5eFBRVUZQTEUxQlFVMUJMRWRCUVVjMlFpeExRVUZMTWtjc1VVRkJVU3hUUVVGVGVFa3NSMEZCUnl4TlFVRk5MRk5CUVZNMlFpeExRVUZMZFVjc1QwRkJUM0JKTEVsQlFVazJRaXhMUVVGTE5FY3NXVUZCV1N4VFFVRlRla2tzUjBGQlJ5eEpRVUZKUXl4RlFVRkZORUlzUzBGQlMzVkhMRTlCUVU5d1NTeEhRVUZITEUxQlFVMHNVMEZCVTBNc1IwRkJSeXhWUVVGVlFTeEhRVUZITEdsQ1FVRnBRa1FzUlVGQlJVY3NVVUZCVVRCQ0xFdEJRVXMyUnl4WFFVRlhMRk5CUVZNeFNTeEhRVUZITEU5QlFVODJRaXhMUVVGTE9FY3NVMEZCVXpOSkxFbEJRVWtzYlVKQlFXMUNRU3hGUVVGRk5Fa3NZVUZCWVM5SExFdEJRVXR4Uml4WFFVRlhMRk5CUVZOc1NDeEhRVUZITEUxQlFVMHNXVUZCV1RaQ0xFdEJRVXQxUnl4UFFVRlBjRWtzU1VGRE1XUTJRaXhMUVVGTE9FY3NVMEZCVXl4VFFVRlRNMGtzUjBGQlJ5eEpRVUZKUXl4VFFVRlRSQ3hGUVVGRkxFMUJRVTBzVlVGQlZVTXNSMEZCUnl4TlFVRk5SQ3hIUVVGSExGbEJRVmxETEVkQlFVYzBRaXhMUVVGTFowZ3NUMEZCVHl4VFFVRlROMGtzUjBGQlJ5eFBRVUZQUVN4RlFVRkZOa0lzUzBGQlMybElMR2xDUVVGcFFqbEpMRVZCUVVVMlFpeExRVUZMYVVnc2FVSkJRV2xDYWtnc1MwRkJTMnRJTEdOQlFXTnNTQ3hMUVVGTGJVZ3NUMEZCVHl4VFFVRlRhRW9zUjBGQlJ5eFJRVUZSUVN4RlFVRkZOa0lzUzBGQlMybElMR2RDUVVGblFtcElMRXRCUVV0dlNDeFZRVUZWTEZOQlFWTnFTaXhIUVVGSExFOUJRVTlCTEVkQlFVY3NiMEpCUVc5Q1FTeEhRVUZIUVN4RlFVRkZhMG9zWjBKQlFXZENja2dzUzBGQlMybElMR1ZCUVdVc1YwRkJWemxKTEVWQlFVVTJRaXhMUVVGTGFVZ3NaVUZCWlN4TlFVRk5OMGtzVFVGQlRUUkNMRXRCUVV0cFNDeGpRVUZqTEdkQ1FVRm5RaXhKUVVGSmRrZ3NTMEZCU3pSSUxGZEJRVmNzUjBGQlIzUklMRXRCUVV0clNDeFpRVUZaTEVWQlFVVnNTQ3hMUVVGTGRVZ3NXVUZCV1haSUxFdEJRVXRuU0N4UFFVTXZaR2hJTEV0QlFVdDNTQ3hsUVVGbGVFZ3NTMEZCUzI5SUxGVkJRVlZ3U0N4TFFVRkxlVWdzV1VGQldTeFRRVUZUZEVvc1IwRkJSeXhKUVVGSlF5eEZRVUZGTkVJc1MwRkJTM1ZITEU5QlFVOXdTU3hIUVVGSExFZEJRVWNzVlVGQlZVTXNSMEZCUnl4VFFVRlRRU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eHRRa0ZCYjBKRUxFVkJRVVYxU2l4TlFVRk5MRTlCUVU5MlNpeEZRVUZGZFVvc1VVRkJNa0lzU1VGQlNTeEpRVUZKY2t3c1MwRkJNMElyUWl4RlFVRkZMRk5CUVZOQkxFVkJRVVVzUjBGQlJ5eEhRVUZuUWtRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjeVJDeExRVUZMZVVnc1dVRkJXWFJLTEVWQlFVVTVRaXhKUVVGSkxFOUJRVThyUWl4RlFVRkZMRTlCUVU5RUxFZEJRVWMyUWl4TFFVRkxNa2dzV1VGQldTeFRRVUZUZUVvc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUemhDTEVWQlFVVm9ReXhMUVVGTGVVd3NUVUZCVFhwS0xFVkJRVVZZTEV0QlFVdHhTeXhaUVVNNVV6ZElMRXRCUVVzNFNDeFJRVUZSTEZOQlFWTXpTaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSk9FSXNSVUZCUlN4TlFVRk5hMFFzVVVGQlVTeEhRVUZITEVWQlFVVjNSeXhWUVVGVmRrb3NUMEZCVHl4RFFVRkRMRWxCUVVsb1F5eEZRVUZGZVVNc1RVRkJUVzVDTEZWQlFWVnRTeXhOUVVGTk5Vd3NTMEZCU3pCTUxGVkJRVlVzUjBGQlJ5eFBRVUZQTEZkQlFWY3NTVUZCU1hoTUxFVkJRVVV3UXl4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMTUV3c1YwRkJPRU1zVDBGQmJrTTVTU3hOUVVGTmJrSXNWVUZCVlc5TExGRkJRVkZLTEUxQlFVMTJUQ3hGUVVGRlF5eEhRVUZWTmtJc1JVRkJSWGxLTEUxQlFVMTRTaXhGUVVGRkwwSXNTVUZCU1N4UFFVRlBMRmRCUVZjc1QwRkJUemhDTEVWQlFVVjVTaXhOUVVGTmVFb3NSVUZCUlhsS0xHRkJRV0UzU0N4TFFVRkxlRU1zUzBGQlN5eFRRVUZUVnl4RlFVRkZReXhGUVVGRkwwSXNSMEZCTkVrc1QwRkJla2swVEN4VFFVRlRja3NzVlVGQlZVb3NUMEZCVHl4SFFVRkhlVXNzVTBGQlUzSkxMRlZCUVZWS0xFdEJRVXRuU2l4WFFVRlhNRUlzVVVGQlVTeGxRVUZsYkVrc1MwRkJTM2hETEV0QlFVdDNReXhMUVVGTE1rZ3NXVUZCV1ROSUxFdEJRVXQ0UXl4TFFVRkxkME1zUzBGQlN6aElMRkZCUVdVNVNDeExRVUZMZUVNc1MwRkJTMjlMTEUxQlFVMHNTMEZCUzBNc1dVRkRNMlEzU0N4TFFVRkxiVWtzVVVGQlVTeFRRVUZUYUVzc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSVEJETEUxQlFVMXVRaXhWUVVGVmJVc3NUVUZCVFRWTUxFdEJRVXN3VEN4VlFVRlZMRWRCUVVjc1QwRkJUeXhYUVVGWExFbEJRVWw2U2l4RlFVRkZMMElzUlVGQlJUQk1MRkZCUVd0RExFOUJRVEZDTTBvc1JVRkJSV2RMTEV0QlFVdFNMRTFCUVUxNFNpeEZRVUZGZVVvc1YwRkJhMEl4U2l4RlFVRkZlVW9zVFVGQlRURkpMRXRCUVV0a0xFdEJRVXMwUWl4TFFVRkxjVWtzVFVGQlRTeFRRVUZUYkVzc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTEVsQlFVa3ZRaXhMUVVGTEswSXNSVUZCUlVRc1JVRkJSVGxDTEVkQlFVY3JRaXhGUVVGRkwwSXNTVUZCU1RKRUxFdEJRVXR6U1N4SlFVRkpkRWtzUzBGQlMyVXNZMEZCWTNkSUxFdEJRVXRFTEV0QlFVc3NWMEZCVnl4UFFVRlBMRWxCUVVsRExFMUJRemRSZGtrc1MwRkJTM2RKTEZkQlFWY3NVMEZCVTNKTExFZEJRVWNzUjBGQlJ6WkNMRXRCUVV0bUxFOUJRVTl6UWl4WFFVRlhVQ3hMUVVGTFppeFBRVUZQYzBJc1YwRkJWM0JETEVWQlFVVXNhMEpCUVcxQ0xFdEJRVWMyUWl4TFFVRkxaaXhQUVVGUGFVY3NTMEZEZWtJc1RVRkJUVGRFTEUxQlFVMHNhVU5CUkcxQ0xFZEJRVWNzVFVGQlRYSkNMRXRCUVV0NVNTeHhRa0ZCY1VJc1EwRkJReXhKUVVGSmVra3NTMEZCUzJZc1QwRkJUMmxITEV0QlFVc3NkVUpCUVhWQ0xFMUJRVTAxU1N4SlFVRkpMRkZCUVVjc1NVRkJiMEl3UkN4TFFVRkxaaXhQUVVGUGVVb3NWMEZCVnl4RFFVRkRMRmRCUVZjeFNTeExRVUZMWml4UFFVRlBlVW9zVjBGQlZ5eE5RVUZOY0Uwc1NVRkJTVEJFTEV0QlFVdDVTU3h6UWtGQmNVSXNUMEZCVVhwSkxFdEJRVXQ1U1N4elFrRkJjVUlzUlVGQlJ5eEhRVUZIZWtrc1MwRkJTM2xKTEhGQ1FVRnhRbnBKTEV0QlFVdG1MRTlCUVU5cFJ5eExRVUZMTDBjc1QwRkJUeXhEUVVGRExFbEJRVWxETEVWQlFVVTBRaXhMUVVGTFppeFBRVUZQTmtNc1UwRkJVM3BHTEVWQlFVVXJRaXhGUVVGRmRVc3NZMEZCWXl4VlFVRlZkRTBzUlVGQlJUSkhMRXRCUVVzc2EwSkJRV3RDTTBjc1JVRkJSWFZOTEU5QlEyNW1MRVZCUVVkMlRTeEZRVUZGZDAwc1dVRkJXWHBMTEVWQlFVVXdTeXhsUVVGbE0wc3NTVUZCU1VNc1JVRkJSVEpMTEV0QlFVdEdMRmxCUVZsNFRTeEhRVUZISzBJc1JVRkJSVEpMTEV0QlFVdERMRmxCUVZrelRTeE5RVUYzUkRKRUxFdEJRVXQ1U1N4eFFrRkJjVUlzUzBGRGFrdDZTU3hMUVVGTGFVb3NWMEZCVnl4VFFVRlRPVXNzUlVGQlJVTXNSMEZCUnl4SFFVRkhMRXRCUVV0RExFOUJRVTlHTEVkQlFVY3JTeXhQUVVGUExFZEJRVWNzVFVGQlRUZElMRTFCUVUwc05FVkJRVFJGYkVRc1IwRkJSeXhKUVVGSk9VSXNSVUZCUlN4VFFVRlRPRUlzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTMjFLTEdkQ1FVRm5RbWhNTEVsQlFVbEJMRWRCUVVjM1FpeEZRVUZGTEZOQlFWTTJRaXhIUVVGSFFTeEZRVUZGUVN4RlFVRkZhVUlzVFVGQlRTeExRVUZMTEVsQlFVa3NTVUZCU1doQ0xFVkJRVVVzUjBGQlJ6bENMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpPRUlzUlVGQlJXZExMRXRCUVVzdlRDeEZRVUZGT0VJc1JVRkJSVGRDTEV0QlFVc3NUMEZCVHpoQ0xFVkJRVVZ6U0N4TFFVRkxMRTFCUVdsSUxFOUJRVE5IY0Vvc1JVRkJSVEJFTEV0QlFVdHRTaXhuUWtGQlowSXNXVUZCV1c1S0xFdEJRVXR2U2l4eFFrRkJjVUl2VFN4RlFVRkZReXhGUVVGRkxGTkJRVk0yUWl4SFFVRkhMRTlCUVU5QkxFZEJRVWRCTEVWQlFVVkRMRVZCUVVWRUxFVkJRVVVzU1VGQlNUZENMRVZCUVVVNFFpeEhRVUZIT1VJc1JVRkJSVFpDTEVkQlFWVTJRaXhMUVVGTFppeFBRVUZQYjBzc2QwSkJRWGRDY2tvc1MwRkJTMllzVDBGQlQyOUxMSGRDUVVGM1FteE1MRWRCUVVkQkxFZEJRM2hsTmtJc1MwRkJTM05LTEd0Q1FVRnJRaXhUUVVGVGJrd3NSVUZCUlVNc1IwRkJSelJDTEV0QlFVdHRTaXhuUWtGQlowSm9UQ3hGUVVGRk5rSXNTMEZCUzI5S0xIRkNRVUZ4UW1oTUxFbEJRVWt5UWl4VlFVRlZReXhMUVVGTFppeFBRVUZQYzBzc01rSkJRVEpDZGtvc1MwRkJTMjFLTEdkQ1FVRm5RbTVLTEV0QlFVdG1MRTlCUVU5elN5d3dRa0ZCTUVKMlNpeExRVUZMZDBvc1QwRkJUeXhUUVVGVGNrd3NSVUZCUlVNc1JVRkJSUzlDTEVkQlFYZElMRTlCUVhKSVFTeEhRVUZIUVN4RlFVRkZiMDRzVDBGQlQzUk1MRVZCUVVWQkxFVkJRVVYxVEN4UlFVRlJMRXRCUVVzc1UwRkJVM1JNTEVsQlFVbEVMRVZCUVVWQkxFVkJRVVYxVEN4UlFVRlJMR2xDUVVGblFpeFRRVUZUZGt3c1JVRkJSVGxDTEVkQlFVY3NUMEZCVHl4TlFVRk5LMElzUjBGQlJ5OUNMRXRCUVVzclFpeEZRVUZGUVN4RlFVRkZMMElzUjBGQlJ6aENMRTFCUVZsQkxFZEJRVWMyUWl4TFFVRkxNa29zYlVKQlFXMUNMRk5CUVZONFRDeEZRVUZGUXl4SFFVRkhMRTlCUVU5RUxFZEJRVWMyUWl4TFFVRkxORW9zWVVGQllTeFRRVUZUZWt3c1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjeVJDeExRVUZMVFN4WlFVRlpia01zUlVGQlJVTXNSVUZCUlM5Q0xFbEJRM2hqTWtRc1MwRkJTelpLTEdWQlFXVXNVMEZCVXpGTUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE9FSXNSVUZCUlVNc1IwRkJSeTlDTEVkQlFVY3lSQ3hMUVVGTE9Fb3NVMEZCVXl4VFFVRlRNMHdzUlVGQlJVTXNSMEZCUnl4VFFVRlRMMElzUzBGQlMwRXNSVUZCUlhWQ0xGVkJRVlZSTEVWQlFVVlNMRlZCUVZWUExFVkJRVVUwVEN4WlFVRlpNMHdzUlVGQlJWSXNWVUZCVlU4c1JVRkJSVkFzVlVGQlZTeEpRVUZKZGtJc1JVRkJSVGhDTEVWQlFVVlFMRlZCUVZWdlRTeFpRVUZaTjB3c1JVRkJSVUVzUlVGQlJUaE1MRXRCUVVzc1UwRkJVemxNTEVWQlFVVTVRaXhGUVVGRmJVTXNSMEZCUnl4SlFVRkpMRWxCUVVsc1F5eEZRVUZGZVVNc1RVRkJUVGhKTEZWQlFWVjJTaXhQUVVGUExFZEJRVWRETEVWQlFVVXNSVUZCUlVFc1JVRkJSWE5LTEZWQlFWVjJTaXhQUVVGUFF5eEpRVUZKYWtNc1JVRkJSV2xETEVWQlFVVXNSMEZCUjNOS0xGVkJRVlYwU2l4SFFVRkhMRTlCUVU5SUxFVkJRVVZTTEZWQlFWVjJRaXhIUVVGSGRVd3NUVUZCVFhwS0xFVkJRVVUzUWl4TFFVTTFWREJFTEV0QlFVdHBTeXhMUVVGTExGTkJRVk01VEN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRmRVd3NWVUZCVlhGRExFOUJRVTlETEU5QlFVOHNSMEZCUjI1TExFdEJRVXRuUWl4M1FrRkJkMEpvUWl4TFFVRkxZU3hSUVVGUmRrVXNSVUZCUlN4TlFVRk5LMFVzVFVGQlRTdzRTVUZCT0Vrc1VVRkJSeXhKUVVGeFFpOUZMRVZCUVVWNVRpeFpRVUZaTEVOQlFVTXNTVUZCU1N4SlFVRkplRXdzUlVGQlJWRXNUVUZCVFRoSkxGVkJRVlYyU2l4UFFVRlBMRWRCUVVkRkxFVkJRVVVzUlVGQlJVRXNSVUZCUlhGS0xGVkJRVlYyU2l4UFFVRlBSU3hKUVVGSlJDeEZRVUZGUXl4RlFVRkZMRWRCUVVkeFNpeFZRVUZWY2tvc1IwRkJSeXhQUVVGUGJFTXNSVUZCUlhsT0xGbEJRVmxETEZsQlFWbHdReXhOUVVGTmVrb3NSVUZCUlVrc1IwRkJSeXhIUVVGSExHbENRVUZwUWtnc1IwRkJSeXhwUWtGQmFVSkJMRVZCUVVVc1RVRkJUV2xFTEUxQlFVMHNiVVZCUTJwakxFbEJRVFZDT1VNc1JVRkJSVkVzVFVGQlRUaEpMRlZCUVZWMlNpeFBRVUZQTEVkQlFVOUZMRVZCUVVVc1JVRkJSVUVzUlVGQlJYRktMRlZCUVZWMlNpeFBRVUZQUlN4SlFVRkpSQ3hGUVVGRlF5eEZRVUZGTEVkQlFVZHhTaXhWUVVGVmNrb3NSMEZCUjBFc1IwRkJSU3hGUVVGSExFbEJRVWtzU1VGQlNYRkNMRVZCUVVVeFFpeEZRVUZGTmt3c1dVRkJXWEJOTEZWQlFWVnBReXhGUVVGRlFTeEZRVUZGYmtRc1QwRkJUekJPTEdWQlFXVjJTeXhIUVVGSExFZEJRVWRCTEVWQlFVVjZRaXhMUVVGTE9VSXNSVUZCUld0RExFZEJRVVVzVDBGQlVTeEhRVUZIUVN4RlFVRkZMRTlCUVU5eFFpeEZRVUZGZWtJc1IwRkJSM2RLTEUxQlFVMTZTaXhGUVVGRlNTeEhRVUZITEVkQlFVZEtMRVZCUVVWRExFdEJRVXM1UWl4RlFVRkZMRTlCUVU4MlFpeEZRVUZGTmt3c1dVRkJXWEJOTEZWQlFWVlJMRWRCUVVkM1NpeE5RVUZOZWtvc1JVRkJSVWtzUjBGQlJ5eE5RVUZOT0VNc1RVRkJUU3dyUlVGQlowWnlRaXhMUVVGTEwwSXNUVUZCVFN4VFFVRlRSU3hIUVVGSExFZEJRVWMyUWl4TFFVRkxiMElzYjBKQlFXOUNMRTFCUVUxRExFMUJRVTBzWjBSQlFXZEViRVFzUlVGQlJXaERMRXRCUVVzMlJDeExRVUZMWml4VFFVTnlaR01zVjBGQlYwTXNTMEZCUzJZc1QwRkJUMk1zVTBGQlUwRXNWVUZCVlVNc1MwRkJTM0ZMTEZsQlFWa3NVMEZCVTJ4TkxFVkJRVVZETEVkQlFVY3NTVUZCU1M5Q0xFVkJRVVVyUWl4RlFVRkZORXdzV1VGQldURk9MRVZCUVVVNFFpeEZRVUZGYTAwc1VVRkJhMWdzVDBGQk1WZHFUeXhIUVVGSFFTeEhRVUZIU3l4UFFVRlBhMElzVlVGQlZXOU5MR05CUVdNelRpeEZRVUZGTEZkQlFWY3NUVUZCVFdkR0xFMUJRVTBzSzBSQlFXZEZhRVlzUlVGQlJUSkVMRXRCUVV0eFN5eFpRVUZaUlN3d1FrRkJNRUpzVHl4RlFVRkZPRUlzUjBGQlIwRXNSMEZCUnpaQ0xFdEJRVXM0U2l4VFFVRlRlazRzUlVGQlJUaENMRlZCUVZWRExFVkJRVVUwVEN4dFFrRkJiVUkxVEN4RlFVRkZhMDBzVVVGQlVYUkxMRXRCUVV0eFN5eFpRVUZaUnl4cFFrRkJhVUp1VHl4RlFVRkZkVUlzVlVGQlZWRXNSMEZCUnl4TlFVRk5PVUlzU1VGQlNVRXNZVUZCWVRKTUxGTkJRVk16VEN4RlFVRkZSQ3hIUVVGSE1rUXNTMEZCUzNGTExGbEJRVmxITEdsQ1FVRnBRbTVQTEVWQlFVVkRMRWxCUVZkRUxFZEJRekZrTWtRc1MwRkJTM0ZMTEZsQlFWbEpMSEZDUVVGeFFucExMRXRCUVV0aExFMUJRVTFpTEV0QlFVdHhTeXhaUVVGWlJTd3dRa0ZCTUVJc1UwRkJVM0JOTEVWQlFVVkRMRWRCUVVjc1NVRkJTVFJDTEV0QlFVdHhTeXhaUVVGWlNTeHhRa0ZCY1VJc1QwRkJUM1JOTEVWQlFVVXNTVUZCU1RsQ0xFZEJRVWN5UkN4TFFVRkxjVXNzV1VGQldVc3NZMEZCWTNSTkxFZEJRVWM1UWl4RlFVRkZMRmRCUVZjc1NVRkJTVGhDTEVWQlFVVkVMRVZCUVVWNVNpeE5RVUZOTVVrc1MwRkJTekpKTEZsQlFWa3pTU3hMUVVFd1NDeFBRVUZ5U0dRc1JVRkJSVFJDTEV0QlFVdHBTQ3hsUVVGbE4wa3NSVUZCUlRSQ0xFdEJRVXRwU0N4bFFVRmxMMGdzUzBGQlN6aExMR05CUVdNeFRpeEhRVUZIUkN4SFFVRkhTeXhQUVVGUE5ra3NaMEpCUVdkQ01FTXNWVUZCVlhaTUxFOUJRVTgyU1N4TFFVRkxia2dzUjBGQlZVRXNSMEZCUnl4UFFVRlBPVUlzUjBGQlJ6QkVMRXRCUVV0eFN5eFpRVUZaU3l4alFVRmpMRk5CUVZOMlRTeEhRVUZITEU5QlFVOUJMRWRCUVVkQkxFVkJRVVZRTEZkQlFWZFBMRVZCUVVWUUxGVkJRVlZ2UXl4TFFVRkxNa3NzYlVOQlEyNWtNMHNzUzBGQlMzRkxMRmxCUVZsUExIbENRVUY1UWl4blIwRkJaMGQ0VEN4TlFVRk5MRXRCUVV0WkxFdEJRVXR4U3l4WlFVRlpSeXhwUWtGQmFVSXNVMEZCVTNKTkxFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkpMMElzUzBGQlN5dENMRVZCUVVVeFFpeFBRVUZQYTBJc1ZVRkJWVU1zWlVGQlpURkNMRXRCUVV0cFF5eEZRVUZGTDBJc1MwRkJTemhDTEVWQlFVVTVRaXhIUVVGSEswSXNSVUZCUlM5Q0xFbEJRVWtzU1VGQlNTeEpRVUZKUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVV3UkN4TFFVRkxjVXNzV1VGQldVOHNlVUpCUVhsQ2RFMHNUMEZCVDJoRExFbEJRVWxFTEVWQlFVVXlSQ3hMUVVGTGNVc3NXVUZCV1U4c2VVSkJRWGxDZEU4c1IwRkJSMGtzVDBGQlQydENMRlZCUVZWRExHVkJRV1V4UWl4TFFVRkxhVU1zUlVGQlJTOUNMRXRCUVVzNFFpeEZRVUZGT1VJc1IwRkJSeXRDTEVWQlFVVXZRaXhMUVVOb1lqSkVMRXRCUVVzMlN5eHRRa0ZCYlVJc1UwRkJVekZOTEVsQlFVazBRaXhWUVVGVlF5eExRVUZMY1Vzc1dVRkJXVWtzZFVKQlFYVkNkRTBzUlVGQlJWQXNWVUZCVlc5RExFdEJRVXN5U3l4dFEwRkJhME1zU1VGQlN6TkxMRXRCUVVzeVN5eHBRMEZCYVVNc2MwTkJRM0JNTlVzc1ZVRkJWVU1zUzBGQlN6QkVMSFZDUVVGMVFqRkVMRXRCUVVzNFN5eG5Ra0ZCWjBJc1YwRkJWeXhKUVVGSk0wMHNSVUZCUlRaQ0xFdEJRVXRtTEU5QlFVODJReXhUUVVGVExFOUJRVThzVFVGQlRUTkVMRWRCUVVjc1ZVRkJWVUVzUjBGQlJ6WkNMRXRCUVVzclN5eHRRa0ZCYlVJc1YwRkJWeXhKUVVGSk5VMHNSVUZCUlRaQ0xFdEJRVXRtTEU5QlFVODJReXhUUVVGVExFOUJRVTh6UkN4RlFVRkZOazBzV1VGQldTeFpRVUZaTjAwc1JVRkJSVGhOTEZkQlFWY3NWMEZCVnpsTkxFVkJRVVU0VFN4WlFVRlpha3dzUzBGQlMydE1MR05CUVdNc1YwRkJWeXhIUVVGSGJFd3NTMEZCUzBVc1RVRkJUVVlzUzBGQlMyWXNUMEZCVDJ0TkxHOUNRVUZ2UW01TUxFdEJRVXRITEZOQlFWTklMRXRCUVV0bUxFOUJRVTlyVFN4dFFrRkJiVUp1VEN4TFFVRkxiVVVzVTBGQlUyNUZMRXRCUVV0bUxFOUJRVTlyVFN4MVFrRkJkVUlzUjBGQlIyNU1MRXRCUVVzNFN5eHJRa0ZCYTBJc1EwRkJReXhKUVVGSk0wMHNSVUZCUlRaQ0xFdEJRVXRtTEU5QlFVODJReXhUUVVGVE1VUXNSVUZCUlVRc1JVRkJSV2xPTEdOQlF5OWlMRWxCUVVsb1RpeEhRVUUzUTBRc1JVRkJSVU1zUlVGQlJTeERRVUZEUVN4SFFVRkhSQ3hGUVVGRmEwNHNjVUpCUVhGQ0xGZEJRV3RDTDAwc1QwRkJUeXhGUVVGRkxFZEJRVWRHTEVsQlFVbEJMRVZCUVVVc1EwRkJReXhKUVVGSkwwSXNSVUZCUlRoQ0xFVkJRVVZETEVkQlFVZHJUaXhKUVVGSmFGQXNSVUZCUlVRc1JVRkJSWEZHTEZsQlFWa3NTMEZCZDBJc1IwRkJia0p3Uml4SFFVRkhMRWRCUVVkQkxFVkJRVVZFTEVWQlFVVnBReXhQUVVGUGFFTXNSVUZCU3l4WFFVRlhSQ3hGUVVGRmExQXNUMEZCVDJwUUxFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXdSQ3hMUVVGTGJVVXNVMEZCVXpsSUxFVkJRVVZyVUN4UFFVRlBMRVZCUVVWcVVDeEZRVUZGTEVkQlFVY3NWVUZCVlRCRUxFdEJRVXRyVEN4blFrRkJaMEpzVEN4TFFVRkxkMHdzVjBGQlZ5eFhRVUZYZEUwc1MwRkJTM1ZOTEhWQ1FVRjFRaXhMUVVGTGRrMHNTMEZCUzNkTkxIRkNRVUZ4UWpGTUxFdEJRVXM0UlN4MVFrRkJkVUk1UlN4TFFVRkxkMHdzVjBGQlZ6Vk9MRlZCUVZVclRpdzJRa0ZCTmtJc1YwRkJWeXhUUVVGVGVFNHNSVUZCUlVFc1JVRkJSVU1zUjBGQlIwY3NSVUZCUldwRExFVkJRVVUyUWl4SlFVRkhMRVZCUVVkRExFdEJRVXN2UWl4RlFVRkZPRUlzUlVGQlJUZENMRVZCUVVVMlFpeEpRVUZITEVkQlFVbEpMRVZCUVVWcVF5eEZRVUZGTmtJc1NVRkJSeXhGUVVGSExGTkJRVk5ETEVWQlFVVkVMRWRCUVVjc1NVRkJTU3hSUVVGUkswY3NTMEZCU3k5SExFZEJRVWNzVFVGQlRYbE9MRWRCUVVjc1QwRkJUU3hIUVVOc1ppeEpRVUZKZGxBc1JVRkJSU3hOUVVGTlF5eEZRVUZGTEVOQlFVTjFVQ3hMUVVGSkxFZEJRVWwwVGl4SFFVRkZMRVZCUVVkRExFVkJRVVYzUWl4TFFVRkxaaXhQUVVGUE5rMHNWMEZCVnpsTUxFdEJRVXRtTEU5QlFVODJUU3hWUVVGVlF5eFZRVUZWTDB3c1MwRkJTMllzVDBGQlR6Wk5MRlZCUVZWRExGVkJRVlVzUjBGRGRVVXNUMEZFY0VVMVRpeEZRVUZGTEU5QlFVMHNWMEZCVnl4UFFVRlBReXhGUVVGRkxIRkNRVUZ2UWtRc1JVRkJSU3hQUVVGTkxGZEJRVmNzVDBGQlQwc3NSVUZCUlhkT0xFMUJRVTBzZDBKQlFUQkNOVTRzUlVGQlJTd3JVa0ZEZEU5RUxFVkJRVVVzVDBGQlRTeFhRVUZYTEU5QlFVOURMRVZCUVVVc2EwSkJRV2xDUkN4RlFVRkZMRTlCUVUwc1YwRkJWeXhQUVVGUFF5eEZRVUZGTERCQ1FVRjVRa1FzUlVGQlJTeFBRVUZOTEZkQlFWY3NUMEZCVDBNc1JVRkJSU3cyUWtGQk5FSkVMRVZCUVVVc1YwRkJWU3hYUVVGWExFOUJRVTBzUzBGQlZ5eERRVUZET0U0c1QwRkJUelZRTEVWQlFVVTJVQ3hKUVVGSk5WQXNTVUZCU1RCRUxFdEJRVXQzVEN4WFFVRlhOVTRzVlVGQlZYVlBMR1ZCUVdVc1UwRkJVMmhQTEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhWUVVGVk5FSXNTMEZCU3pSRkxGVkJRVlVzVDBGQlRTeEZRVUZITEVkQlFVY3NVMEZCVXpWRkxFdEJRVXMwUlN4VlFVRlZMRTlCUVUwc1JVRkJSeXhKUVVGSk1VWXNTMEZCUzNWTkxIVkNRVUYxUWl4RFFVRkRMRWxCUVVsd1VDeEZRVUZGTmtNc1MwRkJTM2xOTEN0Q1FVRXJRbnBOTEV0QlFVdDFUU3gxUWtGQmRVSndVQ3hGUVVGRk5sQXNTVUZCU1doT0xFdEJRVXQzVFN4eFFrRkJjVUo0VFN4TFFVRkxkMDBzYzBKQlEyaGxjbEFzUlVGQlJUUlFMRTlCUVU4c1IwRkJSemxPTEV0QlFVdGxMRXRCUVV0MVRTeDFRa0ZCZFVJc1VVRkJUM1pOTEV0QlFVdDFUU3gxUWtGQmRVSjBUaXhQUVVGUE5rSXNTMEZCU3poTExHMUNRVUZ0UWl4UFFVRlBNVTBzUjBGQlJ5eGhRVUZoTkVJc1MwRkJTMllzVDBGQlR6WkRMRk5CUVZNMlJ5eGpRVUZqTEZkQlFXZENMRTFCUVUxMFNDeE5RVUZOTERCQ1FVRXdRbXhFTEVsQlFVczJRaXhMUVVGTGQwd3NWMEZCVnpWT0xGVkJRVlYxU1N4VlFVRlZMRk5CUVZOb1NTeEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMYTBjc1YwRkJWeTlJTEVWQlFVVkRMRVZCUVVWakxFdEJRVXQzVFN4MVFrRkJkVUl4VEN4TFFVRkxiMDBzV1VGQldTeEpRVUZKY0Uwc1MwRkJTM2RNTEZkQlFWZDRUQ3hMUVVGTGNVMHNhMEpCUVd0Q0xGTkJRVk5zVHl4SFFVRkhMRTlCUVU5QkxFVkJRVVYxVEN4UlFVRlJMR2RDUVVGblFpeGhRVUZoTVVvc1MwRkJTM05OTEdGQlFXRXNWMEZCVjNCT0xFdEJRVXR4VGl4alFVRmpMRWRCUTI1bWNrNHNTMEZCUzNOT0xGVkJRVlVzUjBGQlIzUk9MRXRCUVV0MVRpeFRRVUZUTEVkQlFVZDJUaXhMUVVGTGQwNHNZVUZCWVN4SFFVRkhlRTRzUzBGQlMzbE9MRmxCUVZrc1IwRkJSM3BPTEV0QlFVc3dUaXhUUVVGUkxFVkJRVWN4VGl4TFFVRkxNazRzVTBGQlV5eEpRVUZKTjAwc1MwRkJTemhOTEd0Q1FVRnJRamxOTEV0QlFVdHZUU3hoUVVGaGJFNHNTMEZCU3paT0xHMUNRVUZ0UWl4SFFVRkhOMDRzUzBGQlN6aE9MR1ZCUVdVc1NVRkJTV2hPTEV0QlFVdHpUU3hoUVVGaE1VOHNWVUZCVlhGUUxGVkJRVlVzVTBGQlV6bFBMRVZCUVVWRExFZEJRVWNzVTBGQlV5OUNMRWxCUVVsRExFbEJRVWt3UkN4TFFVRkxaaXhQUVVGUGFVOHNWMEZCVnpWUkxFVkJRVVVzUjBGQlIwRXNSVUZCUlN4TlFVRk5MRWxCUVVsQkxFVkJRVVU0UWl4RlFVRkZMRWRCUVVkRUxFVkJRVVZITEU5QlFVOHNRMEZCUTBZc1JVRkJSU3hIUVVGSExFbEJRVWtzU1VGQlNVY3NSVUZCUlN4RlFVRkZRU3hGUVVGRlNpeEZRVUZGUnl4UFFVRlBReXhKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlZVc1MwRkJTMmxQTEdsQ1FVRnBRbWhRTEVWQlFVVkpMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeE5RVUZOTmtNc1RVRkJUU3d3UWtGQk1FSnNSQ3hGUVVGRlNTeEpRVUZKU0N4RlFVRkZaMHNzUzBGQlMyeEtMRXRCUVV0eFRpeGpRVUZqTDA0c1NVRkJTVUVzUlVGQlJYZENMRXRCUVV0dlJDeFJRVUZSTEVsQlFVbDJSQ3hGUVVGRkxFVkJRVVVzU1VGQlNYUkNMRVZCUTNSbUxFVkJRVVZCTEVWQlFVVktMRVZCUVVWSExFOUJRVTlETEVsQlFVbERMRVZCUVVWTUxFVkJRVVZKTEVsQlFVbElMRVZCUVVWSExFZEJRVWMyVHl4UlFVRlBMR0ZCUVdGMlRpeEhRVUZITVVJc1JVRkJSVWNzVVVGQlVXcERMRmxCUVZkQkxFdEJRVXN5UkN4TFFVRkxjMDBzWVVGQllURlBMRlZCUVZWNVVDeG5Ra0ZCWjBJc1YwRkJWMjVQTEV0QlFVdDVUaXhaUVVGWmRrVXNTMEZCUzJ4S0xFdEJRVXN5VGl4VFFVRlRVeXhwUWtGQmFVSjBUaXhMUVVGTGQwWXNaVUZCWlhoR0xFdEJRVXR0UlN4VFFVRlRMRmRCUVZjc1ZVRkJWU3hIUVVGSExFZEJRVWNzU1VGQlJ5eEpRVUZMYWtZc1MwRkJTM0ZQTEdGQlFXRjJUaXhMUVVGTGMwMHNZVUZCWVRGUExGVkJRVlZ2Unl4VlFVRlZMRk5CUVZNM1JpeEZRVUZGUXl4SlFVRkpSQ3hGUVVGRlpTeExRVUZMYVU4c2FVSkJRV2xDYUZBc1RVRkJUVU1zUjBGQlIyTXNTMEZCUzNOUExHVkJRV1YwVHl4TFFVRkxjVTRzWTBGQlkzQlBMRWRCUVVkelVDeGhRVUZoY2xBc1JVRkJSV01zUzBGQlN6Wk9MRzFDUVVGdFFqVlBMR0ZCUVdGbExFdEJRVXMyVGl4dFFrRkJiVUkxVHl4SFFVRkhReXhOUVVGTk5FSXNTMEZCUzNOTkxHRkJRV0V4VHl4VlFVRlZPRkFzY1VKQlEyNW5RaXhUUVVGVGRsQXNSMEZCUjJVc1MwRkJTekpPTEZOQlFWTXhUeXhIUVVGSE5rSXNTMEZCUzNOTkxHRkJRV0V4VHl4VlFVRlZjVWNzVFVGQlRTeFRRVUZUT1VZc1IwRkJSeXhKUVVGSFpTeExRVUZMYVU4c2FVSkJRV2xDYUZBc1IwRkJaMWtzVFVGQlRVRXNSVUZCUlN4blEwRkROV1ZCTEVWQlFVVTJRaXhMUVVGTE5rUXNZMEZCWXpGR0xFZEJRVWRyUkN4TlFVRk5iRVFzUjBGRU1FVXNTVUZCU1VNc1JVRkJSV01zUzBGQlN6ZERMRVZCUVVVc1IwRkJSME1zUlVGQlJTeFRRVUZUTmtJc1IwRkJSeXhKUVVGSlNTeEZRVUZGU0N4RlFVRkZLMDhzYVVKQlFXbENhRkFzUjBGQlJ5eEpRVUZKU1N4RlFVRkZMRTFCUVUwNFF5eE5RVUZOTEd0RFFVRnJRMnhFTEVkQlFVY3NTVUZCU1VNc1JVRkJSWEZQTEZOQlFWTnNUeXhIUVVGSExFTkJRWFZETEVsQlFYUkRTQ3hGUVVGRmNVOHNVMEZCVTJ4UExFbEJRVWNzUlVGQlIwb3NSVUZCUlVNc1JVRkJSVzFQTEdOQlFXTm9UeXhIUVVGUFFTeEZRVUZGTEVWQlFVVkJMRVZCUVVWS0xFVkJRVVZ6VUN4VFFVRlRibEFzVDBGQlQwTXNTVUZCU1hsQ0xFdEJRVXR6UWl4WlFVRlpia1FzUlVGQlJYTlFMRk5CUVZOc1VDeExRVUZMYWtNc1JVRkJSVFpDTEVWQlFVVnpVQ3hUUVVGVGJGQXNTVUZCU1d4RExFVkJRVVVyVEN4TFFVRkxha3NzUzBGQlN6ZENMRVZCUVVVMlFpeEhRVUZIUVN4SlFVRkpaU3hMUVVGTGVVNHNXVUZCV1hKUExFOUJRVTlaTEV0QlFVdDVUaXhaUVVGWmVrNHNTMEZCUzNsT0xGbEJRVmxuUWl4UFFVRlBkRklzUjBGQlJ6WkRMRXRCUVVzd1RpeFRRVUZUZWs4c1IwRkJSMlVzUzBGQlMzRlBMR0ZCUTJoaWRrNHNTMEZCUzNOTkxHRkJRV0V4VHl4VlFVRlZNbEFzVlVGQlZTeFhRVUZYTEVsQlFVa3NTVUZCU1hCUUxFVkJRVVZsTEV0QlFVdGtMRVZCUVVWakxFdEJRVXN3VGl4UlFVRlJNVTRzUzBGQlMzbE9MRmxCUVZseVR5eFRRVUZUUml4SlFVRkhMRmRCUVZrc1NVRkJTUzlDTEVkQlFVVXNSVUZCUjBNc1JVRkJSVFpDTEVWQlFVVjNUeXhaUVVGWmJrMHNVVUZCVVdwRExFZEJRVVVzUlVGQlIwb3NSVUZCUlhsUUxGTkJRVk4wVWl4SFFVRkhMRWxCUVVsclF5eEZRVUZGTEVOQlFVTnhVQ3hOUVVGTkxGZEJRVmNzUjBGQlIzaFNMRVZCUVVVc1RVRkJUV2RHTEUxQlFVMHNOa05CUVRaRGFrUXNSMEZCUlN4SFFVRkpNRkFzVDBGQlR5eFhRVUZYZWxJc1JVRkJSVGhDTEVWQlFVVTBVQ3hWUVVGVk0xQXNSMEZCUlN4SFFVRkpORkFzVDBGQlR5eFhRVUZYTEVkQlFVZDZVQ3hGUVVGRkxFMUJRVTA0UXl4TlFVRk5MREJDUVVFd1FqbERMRWRCUVVVc1JVRkJSMG9zUlVGQlJUaFFMRkZCUVZFelVpeEpRVUZKTkZJc1VVRkJVU3hYUVVGWExFbEJRVWtzU1VGQlNUbFFMRVZCUVVVc1IwRkJSeTlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSVGhDTEVWQlFVVjFUeXhoUVVGaGNFOHNUMEZCVDJwRExFbEJRVWtyUWl4RlFVRkZaMHNzUzBGQlMycExMRVZCUVVWMVR5eGhRVUZoY2xFc1NVRkRkbVlzVDBGQlR5dENMRWRCUVVjclVDeGxRVUZsTEZOQlFWTm9VU3hIUVVGSE5rSXNTMEZCUzNkRExHMUNRVUZ0UWl4RFFVRkRVU3hMUVVGTE4wVXNSVUZCUlhORkxGZEJRVmNzUjBGQlIxTXNkMEpCUVhWQ0xFbEJRVXRyVEN4NVFrRkJlVUlzVTBGQlUycFJMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhRU3hKUVVGSk1rUXNTMEZCU3pKRExHVkJRV1YwUnl4SFFVRkhMRU5CUVVOaUxGRkJRVkUwUXl4RlFVRkZORVVzUzBGQlMyaEVMRXRCUVVzMFF5eFhRVUZYUXl4SlFVRkpPVWNzVTBGQlUwMHNSMEZCUnl4TlFVRk5aMU1zTUVKQlFUQkNMRk5CUVZOc1VTeEZRVUZGUXl4SFFVRkhORUlzUzBGQlN6SkRMR1ZCUVdWNFJTeEhRVUZITEVOQlFVTXpReXhSUVVGUk5FTXNSVUZCUlRSRkxFdEJRVXRvUkN4TFFVRkxORU1zVjBGQlYwVXNTMEZCU3k5SExGTkJRVk52UXl4SlFVRkpiVkVzYVVKQlFXbENMRmRCUVZkMFR5eExRVUZMZDBNc2JVSkJRVzFDTEUxQlFVMXZSeXhOUVVGTkxGTkJRVk40U3l4SFFVRkhMRWRCUVVjdlFpeEZRVUZGTEUxQlFVMW5SaXhOUVVGTkxITkVRVUZ6Ukd4RUxFVkJRVVZ2VVN4UFFVRlBhbE1zUlVGRGRHWTRRaXhKUVVGSmIxRXNZMEZCWXl4WFFVRlhMRTlCUVU5eVVTeEZRVUZGY1ZBc1pVRkJaV3hTTEVWQlFVVnRVaXhaUVVGWkxFbEJRVWx1VWl4RlFVRkZiVk1zUzBGQlMycFJMRWRCUVVjc1VVRkJVVzVETEVkQlFVVXNSMEZHYjBRc1IwRkZOVU1yUWl4SFFVRkhZeXhMUVVGTGQxQXNWVUZCVlRGUExFdEJRVXR6VFN4aFFVRmhNVThzVlVGQlZUaFJMRTlCUVU4c1YwRkJWM2hRTEV0QlFVc3dUaXhUUVVGUkxFZEJRVWsxVFN4TFFVRkxjMDBzWVVGQllURlBMRlZCUVZWdFVTeFJRVUZSTEZkQlFWYzNUeXhMUVVGTE1FNHNWVUZCVlRGT0xFdEJRVXN3VGl4VFFVRlJMRVZCUVVjeFRpeExRVUZMY1U4c1kwRkJZM1pPTEV0QlFVdHpUU3hoUVVGaE1VOHNWVUZCVldkUkxGTkJRVk1zVTBGQlUzcFFMRWRCUVVkbExFdEJRVXQzVGl4aFFVRmhkRVVzUzBGQlMycExMRWxCUVVrMlFpeExRVUZMYzAwc1lVRkJZVEZQTEZWQlFWVnhVU3hSUVVGUkxGTkJRVk01VUN4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZZeXhMUVVGTGQwNHNZVUZCWVhCUExFOUJRVTlHTEVsQlFVa3NSMEZCUjJNc1MwRkJTM2RPTEdGQlFXRjBUeXhKUVVGSlJDeEZRVUZGTEVOQlFVTmxMRXRCUVV0M1RpeGhRVUZoYWtnc1QwRkJUM0pJTEVWQlFVVXNSMEZEYm1Zc1RVRkJUU3hKUVVGSlFTeEZRVUZGTEVWQlFVVkJMRVZCUVVWakxFdEJRVXM0VGl4bFFVRmxNVThzVDBGQlQwWXNTVUZCU1N4SFFVRkhZeXhMUVVGTE9FNHNaVUZCWlRWUExFbEJRVWxFTEVWQlFVVjNVU3hMUVVGTExFTkJRVU42VUN4TFFVRkxPRTRzWlVGQlpYWklMRTlCUVU5eVNDeEZRVUZGTEVkQlFVY3NUVUZCVFN4SFFVRkhZeXhMUVVGTGQwNHNZVUZCWVhCUExGRkJRVkZaTEV0QlFVczRUaXhsUVVGbE1VOHNVMEZCVTFrc1MwRkJTM2xPTEZsQlFWbHlUeXhQUVVGUExFdEJRVXRaTEV0QlFVczRUaXhsUVVGbE1VOHNVVUZCVVZrc1MwRkJTemhGTEZWQlFWVTVSU3hMUVVGTE9FNHNaVUZCWlhoTkxGTkJRVkVzUjBGQlNYSkRMRVZCUVVVMlVDeFZRVUZWYUU4c1MwRkJTM05OTEdGQlFXRXhUeXhWUVVGVk5GQXNaVUZCWlN4VFFVRlRjbEFzUjBGQlJ5eEpRVUZKTEVsQlFVbERMRVZCUVVVc1JVRkJSVUVzUlVGQlJVUXNSVUZCUlVjc1QwRkJUMFlzU1VGQlNTeERRVUZETEVsQlFVa3ZRaXhGUVVGRk5rTXNTMEZCUzJsUExHbENRVUZwUW1oUUxFVkJRVVZETEVsQlFVa3NTVUZCU1M5Q0xFdEJRVXRCTEV0QlFVczJReXhMUVVGTE5rNHNjMEpCUVc5Q0wwMHNTMEZCUzNOQ0xGbEJRVmx1UkN4RlFVRkZReXhKUVVGTExFOUJRVTBzUlVGQlJ5eFBRVUZOTEVkQlFVazBRaXhMUVVGTGMwMHNZVUZCWVRGUExGVkJRVlYxVUN4cFFrRkRlbWRDTEZOQlFWTm9VQ3hIUVVGSExFOUJRVTlCTEV0QlFVdGxMRXRCUVV0elRpeFZRVUZWZEU0c1MwRkJTM05PTEZWQlFWVnlUeXhIUVVGSFFTeExRVUZMWlN4TFFVRkxjVTRzWTBGQlkzQlBMRVZCUVVVc1RVRkJUVFpDTEV0QlFVdHpUU3hoUVVGaE1VOHNWVUZCVlRKUkxFOUJRVThzVTBGQlUzQlJMRVZCUVVWRExFZEJRVWRqTEV0QlFVczJUaXh0UWtGQmJVSTFUeXhGUVVGRmQxRXNUVUZCVFhaUkxFVkJRVVZqTEV0QlFVczRUaXhsUVVGbE5VVXNTMEZCUzJwTExFVkJRVVYzVVN4UFFVRlBNMDhzUzBGQlN6UlBMR1ZCUVdVc1lVRkJZVFZQTEV0QlFVczBUeXhsUVVGbGFGSXNWVUZCVldsUkxFMUJRVTBzWVVGQllUZE9MRXRCUVVzMFR5eGxRVUZsYUZJc1ZVRkJWV3RSTEU5QlFVOHNZVUZCWVRsT0xFdEJRVXMwVHl4bFFVRmxhRklzVlVGQlZXOVJMRTlCUVU4c1lVRkJZV2hQTEV0QlFVczBUeXhsUVVGbGFGSXNWVUZCVlhOUkxGRkJRVkVzWVVGQllXeFBMRXRCUVVzMFR5eGxRVUZsYUZJc1ZVRkJWWGRSTEhsQ1FVRjVRaXhUUVVGVGFsRXNSVUZEZG1aRExFVkJRVVV2UWl4TFFVRkxNa1FzUzBGQlN6UlBMR1ZCUVdWb1VpeFZRVUZWZFZFc1pVRkJaU3hUUVVGVGFGRXNTMEZCU3paQ0xFdEJRVXMwVHl4bFFVRmxhRklzVlVGQlZUQlJMR2xDUVVGcFFpeGhRVUZoZEU4c1MwRkJTelJQTEdWQlFXVm9VaXhWUVVGVlowd3NUVUZCVFN4VFFVRlRla3NzUzBGQlN6WkNMRXRCUVVzMFR5eGxRVUZsYUZJc1ZVRkJWVFJSTEdOQlFXTXNZVUZCWVhoUExFdEJRVXMyVHl4WFFVRlhMRk5CUVZNeFVTeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSVUZCUldsRExFZEJRVWRYTEV0QlFVdDVVQ3hMUVVGTGVGRXNSVUZCUldVc1MwRkJTelJRTEdGQlFXRXhVU3hGUVVGRll5eExRVUZMTmxBc1UwRkJVekZUTEVWQlFVVTJReXhMUVVGTGRVOHNVMEZCVTI1U0xFVkJRVVUwUXl4TFFVRkxPRkFzVlVGQlZYcFJMRVZCUVVWWExFdEJRVXNyVHl4VFFVRlJMRVZCUVVjdlR5eExRVUZMSzFBc1pVRkJaU3hKUVVGSmFsQXNTMEZCU3paUExGZEJRVmRxVWl4VlFVRlZjMUlzV1VGQldTeFhRVUZYTEVsQlFVa3ZVU3hGUVVGRlpTeExRVUZMZVZBc1MwRkJTM1pSTEVWQlFVVkVMRVZCUVVVclNpeFJRVUZSTEU5QlEzaGhMRTlCUkN0aExFZEJRVWM1U2l4SlFVTTVZeXhKUVVSeFpVRXNSMEZCYmtKRUxFVkJRVVZCTEVWQlFVVnpSQ3hWUVVGVmNrUXNSVUZCUlN4SlFVTXZaVGhLTEZGQlFWRXNVVUZCV1M5S0xFVkJRVVZCTEVWQlFVVnpSQ3hWUVVGVmNrUXNSVUZCUlN4TFFVRlpSQ3hIUVVGSE5rSXNTMEZCU3paUExGZEJRVmRxVWl4VlFVRlZkMUFzVDBGQlR5eFRRVUZUYWxBc1IwRkJSMlVzUzBGQlN5dFBMRkZCUVZFNVVDeEpRVUZKWlN4TFFVRkxLMUFzWlVGQlpUZEhMRXRCUVV0cVN5eEpRVUZKTmtJc1MwRkJTelpQTEZkQlFWZHFVaXhWUVVGVmIxRXNUMEZCVHl4WFFVRlhPVThzUzBGQlN5dFBMRk5CUVZFc1JVRkJSeXhKUVVGSk9WQXNSVUZCUldVc1MwRkJTeXRRTEdWQlFXVXZVQ3hMUVVGTEsxQXNaVUZCWlN4SFFVRkhMRWxCUVVrc1NVRkJTVGRSTEVWQlFVVXNSVUZCUlVFc1JVRkJSVVFzUlVGQlJVY3NUMEZCVDBZc1NVRkJTVVFzUlVGQlJVTXNUVUZCVFRSQ0xFdEJRVXMyVHl4WFFVRlhUaXhSUVVGUExFVkJRVWQyVHl4TFFVRkxOazhzVjBGQlYwMHNZVUZCWVN4SFFVRkhibEFzUzBGQlN6WlBMRmRCUVZkUExHdENRVUZyUWl4VFFVRlRhbElzUjBGQlJ5eEpRVUZKUXl4RlFVRkZjMElzUzBGQlN6UklMRk5CUVZOa0xGTkJRVk1zU1VGQmMwTXNUMEZCYkVONFJ5eExRVUZMTms4c1YwRkJWMDBzWVVGQllTOVJMRWRCUVVkRUxFVkJRVk5ETEVkQlFVYzBRaXhMUVVGTE5rOHNWMEZCVjFFc2IwSkJRM0psTEZOQlFWTnNVaXhWUVVGVk5rSXNTMEZCU3paUExGZEJRVmROTEdGQlFXRm9VaXhKUVVGSk5rSXNTMEZCU3paUExGZEJRVmRUTEZWQlFWVXNVMEZCVTI1U0xFVkJRVVZETEVkQlFVY3NTMEZCUjBRc1MwRkJTelpDTEV0QlFVczJUeXhYUVVGWFRTeGpRVUZ2U1N4TlFVRk5PVTRzVFVGQlRTeG5Ra0ZCWjBKc1JDeEZRVUZGTEhsRVFVRndTaXhKUVVGSkxFbEJRVWs1UWl4RlFVRkZNa1FzUzBGQlN6WlBMRmRCUVZkTkxHRkJRV0ZvVWl4SFFVRkhOMElzUlVGQlJTeEhRVUZIYVVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGYzBvc1ZVRkJWWFpLTEU5QlFVOURMRWxCUVVscVF5eEZRVUZGT0V3c1MwRkJTMUFzVlVGQlZYUktMRWxCUVVsc1F5eEZRVUZGZFV3c1YwRkJUU3hGUVVGUGRFd3NTVUZCYVVjd1JDeExRVUZMTms4c1YwRkJWMnBTTEZWQlFWVTJVU3hMUVVGTExGTkJRVk4wVVN4SFFVRkhMRWRCUVVjMlFpeExRVUZMWml4UFFVRlBjMUVzYzBKQlFYTkNkbEFzUzBGQlMyWXNUMEZCVDNOUkxITkNRVUZ6UW5KUkxFdEJRVXQ1VUN4TlFVRk5lRkVzUlVGQlJUWlFMRk5CUVZNM1VDeEZRVUZGTUZBc1lVRkJZU3hIUVVGSE4wNHNTMEZCU3poTExHdENRVUZyUWl4RFFVRkRMRWxCUVVreFRTeEZRVU4yWjBJMFFpeExRVUZMWml4UFFVRlBOa01zVTBGQlV5eEhRVUZITEZsQlFWa3hSQ3hGUVVGRk5rMHNZVUZCWVdwTUxFdEJRVXRyUWl4elEwRkJjME1zUTBGQlF5eEhRVUZITEdGQlFXRnJRaXhMUVVGTGJFUXNTMEZCUzNsUUxFMUJRV3RDTEZsQlFWaDRVU3hGUVVGRk5sQXNVMEZCWjBJc1RVRkJUVE5OTEUxQlFVMHNhVUpCUVdsQ2JrTXNTMEZCUzNsUUxFdEJRVXNzZVVKQlFUQkNMRWxCUVVrelR5eExRVUZMYTBJc2RVTkJRWFZEYkVJc1MwRkJTeXRMTEhGQ1FVRnhRaXhEUVVGRExFbEJRVWt4VHl4RlFVRkZNa1FzUzBGQlN6WlBMRmRCUVZkUExHMUNRVUZyUWl4VFFVRlRhRklzUjBGQlJ6UkNMRXRCUVV0elRTeGhRVUZoYTBRc1dVRkJXU3haUVVGWmNGSXNSVUZCUlRaTkxHRkJRV0ZxVEN4TFFVRkxOazhzVjBGQlYxRXNiMEpCUVc5Q2FGUXNSMEZCUnpoQ0xFVkJRVVUyVUN4aFFVRlpNVklzUjBGQlJ6QkVMRXRCUVV0elRTeGhRVUZoYTBRc1dVRkJXWGhRTEV0QlFVczBRaXhwUWtGRGRHVXNWMEZCVnpWQ0xFdEJRVXMwUWl4cFFrRkJhVUlzU1VGQlNTeEhRVUZIZEVZc1JVRkJSU3huUWtGQlowSTBReXhMUVVGTGVWQXNTMEZCU3l4TlFVRk5NMDhzUzBGQlMzTk5MR0ZCUVdGclJDeFhRVUZYTEhGQ1FVRnhRaXhWUVVGVkxHbERRVUZwUTI1VUxFVkJRVVVzYzBOQlFYTkRNa1FzUzBGQlN6WlBMRmRCUVZkT0xFOUJRVThzVVVGQlVTeEpRVUZKYWxNc1JVRkJSU3hqUVVGblFqaENMRVZCUVVWeFVpeE5RVUZOZWxBc1MwRkJTekJRTEhOQ1FVRnpRakZRTEV0QlFVc3dVQ3h6UWtGQmMwSkRMRmRCUVZkeVZDeEhRVUZIUVN4UFFVRlBMRU5CUVVNc1NVRkJTV2xETEVWQlFVVklMRVZCUVVWMVN5eGpRVUZqTEZWQlFWVndTeXhGUVVGRmNVc3NUVUZCVFRWSkxFdEJRVXMyVHl4WFFVRlhUaXhQUVVGUGFGRXNSVUZCUlhGU0xFOUJRVTBzUlVGQlIzSlNMRVZCUVVWNVJTeExRVUZMTEcxQ1FVRnRRakZITEVWQlFVVXdSQ3hMUVVGTE5FSXNiVUpCUVcxQ2NrUXNSVUZCUlhOU0xHRkJRV0VzVVVGQlVYWlVMRWRCUVVjd1JDeExRVUZMYzAwc1lVRkJZV3RFTEZsQlEycG5RbkpTTEVWQlFVVXdVQ3hSUVVGUmRGQXNSVUZCUlhWU0xHMUNRVUZ0UWl4WFFVRmpMRlZCUVZWMlVpeEZRVUZGTUUwc1dVRkJXU3haUVVGWk1VMHNSVUZCUlRCTkxHRkJRVmM1VFN4RlFVRkZObEFzVTBGQlV6ZFFMRVZCUVVVeVVDeFpRVUZYZGxBc1JVRkJSWGRTTEU5QlFVOHNWMEZCVjNoU0xFVkJRVVYzVWl4UFFVRlBMRXRCUVVzMVVpeEZRVUZGTmxBc1ZVRkJWWHBRTEVWQlFVVXJUU3hKUVVGSmRFd3NTMEZCU3pCUUxITkNRVUZ6UWpGUUxFdEJRVXN3VUN4elFrRkJjMEpOTEdkQ1FVRm5RamxSTEV0QlFVdDVVQ3hOUVVGTmVsQXNTMEZCUzNsUUxFdEJRVXQyVVN4RlFVRkZNa3NzUzBGQlMwWXNXVUZCV1hSTExGTkJRVk41UWl4TFFVRkxOa1FzWTBGQll5dzRSRUZCT0VRc1YwRkJWek5GTEV0QlFVczBVQ3hqUVVGak9VOHNTMEZCU3paRUxHTkJRV01zYzBkQlEzQmhNVVlzUlVGQlJUWlFMRlZCUVZVM1VDeEZRVUZGTUZBc1UwRkJVemRPTEV0QlFVdHBVU3h2UWtGQmIwSXNVMEZCVXpsU0xFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1IwRkJSM2xDTEV0QlFVczJUeXhYUVVGWE1WTXNTMEZCU3l0RExFdEJRVXRtTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zU1VGQlNYbENMRXRCUVVzNFNpeFRRVUZUT1Vvc1MwRkJTMmxSTEc5Q1FVRnZRbXBSTEV0QlFVczJUeXhaUVVGWk4wOHNTMEZCUzJsUkxHOUNRVUZ2UW5KVExGVkJRVlUyVVN4TFFVRkxMRk5CUVZOMFVTeEhRVU1yUlN4SFFVRkhOa0lzUzBGQlMyWXNUMEZCVDNOUkxITkNRVUZ6UW5aUUxFdEJRVXRtTEU5QlFVOXpVU3h6UWtGQmMwSnlVU3hMUVVGTGVWQXNUVUZCVFhoUkxFVkJRVVUyVUN4VFFVRlROMUFzUlVGQlJUQlFMR0ZCUVdFc1IwRkJSemRPTEV0QlFVczRTeXhyUWtGQmEwSXNRMEZCUXl4SlFVRkplRThzUlVGQlJUQkVMRXRCUVV0bUxFOUJRVTgyUXl4VFFVRlRka1FzUlVGQlJWY3NTMEZCU3l4SFFVRkhZeXhMUVVGTEswc3NjVUpCUVhGQ0xFTkJRVU1zU1VGQlNYWk5MRVZCUkhaU0xGTkJRVmRNTEVWQlFVVkRMRWRCUVVkRUxFVkJRVVZETEVWQlFVVXNjVU5CUVhGRFFTeEZRVUZGTEdGQlFXVXNNRU5CUVRCRFJDeEZRVUZGTEdWQlFXbENOMElzUlVGQlJXMVVMRTFCUVUxNlVDeExRVUZMTUZBc2MwSkJRWE5DTVZBc1MwRkJTekJRTEhOQ1FVRnpRa01zVjBGQlYzaFNMRWRCUVVkQkxFbEJRM2RGTmtJc1MwRkJTelpQTEZkQlFWZE9MRkZCUTJwblFpeFBRVUZSTDFBc1JVRkdiMkVzVTBGQlYwd3NSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlVNc1JVRkJSWEZOTEdOQlFXTXNWVUZCVlhSTkxFVkJRVVYxVFN4UFFVRk5MRVZCUVVkMlRTeEZRVUZGZFZRc1QwRkJUU3hGUVVGSGRsUXNSVUZCUlRKSExFdEJRM0JtTEZOQlFWTXpSeXhGUVVGRmQxUXNZVUZCWVN4bFFVRmpMRWRCUVVrc1NVRkJTWFJTTEVWQlFVVjVRaXhMUVVGTE5FSXNhVUpCUVdsQ2NrUXNSMEZCUjJ4RExFVkJRVVYzVkN4aFFVRmhMRkZCUVZGMFVpeEhRVUZIU0N4RlFVRkZMMElzUlVGQlJUWlVMRmxCUVZsc1VTeExRVUZMTUZBc2MwSkJRWE5DTVZBc1MwRkJTekJRTEhOQ1FVRnpRbE1zWVVGQllTOVNMRWRCUVVkQkxFVkJRVVV2UWl4RlFVRkZhVkFzU1VGQlNYUk1MRXRCUVVzd1VDeHpRa0ZCYzBJeFVDeExRVUZMTUZBc2MwSkJRWE5DVFN4blFrRkJaMEkzVWl4SFFVRkhRU3hGUVVGRk4wSXNSVUZCUlhsTkxFdEJRVXRHTEZsQlFWbDRUU3hKUVVOdVVpeEpRVUZKZDBRc1JVRkJSVWNzUzBGQlN6WlBMRmRCUVZkUExHMUNRVUZyUWl4WFFVRlhjRkFzUzBGQlN6WlBMRmRCUVZkUkxHOUNRVUZ2UW5oUUxFZEJRVWN4UWl4RlFVRkZaMUVzWlVGQlpXNVBMRXRCUVVzMFF5eFhRVUZYUXl4UlFVRlBja1VzVDBGQlJTeEZRVUZQTERoQ1FVRTRRbkZDTEVWQlFVVXNUVUZCVFhKQ0xFVkJRVVZWTEV0QlFVdDVVQ3hWUVVGTExFZEJRVkVzU1VGQlNTOURMRVZCUVVVMVRDeExRVUZMTms4c1YwRkJWMDhzYlVKQlFXdENMRk5CUVZOb1VpeEhRVUZITkVJc1MwRkJTelpQTEZkQlFWZFJMRzlDUVVGdlFucEVMRWRCUVVkNlRpeEZRVUZGYVZFc2VVSkJRWGxDTjFBc1JVRkJSVzlSTEV0QlFVdDJVU3hGUVVGRk5FSXNTMEZCUzNkRExHMUNRVUZ0UWtNc1pVRkJZMnBGTEU5QlFVVXNSVUZCVHl4MVFrRkJkVUpWTEV0QlFVdDVVQ3hMUVVGTExHbERRVUZwUXk5RExFVkJRVVVzVTBGQlV5eEpRVUZKZDBVc1JVRkJSWEJSTEV0QlFVczJUeXhYUVVGWFR5eHRRa0ZCYTBJc1YwRkJWM0JRTEV0QlFVczJUeXhYUVVGWFVTeHZRa0ZCYjBKbExFZEJRMjVwUW1wVExFVkJRVVZ0VVN4dFFrRkJiVUp1VVN4RlFVRkZObEFzV1VGQlYzaFFMRTlCUVVVc1JVRkJUeXc0UWtGQk9FSTBVaXhGUVVGRkxGZEJRVmR3VVN4TFFVRkxOa1FzWTBGQll5dzRSRUZCT0VReFJpeEZRVUZGTUZBc1UwRkJVemRPTEV0QlFVdHhVU3h6UWtGQmMwSXNVMEZCVTJ4VExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1IwRkJSM2xDTEV0QlFVczJUeXhYUVVGWE1WTXNTMEZCU3l0RExFdEJRVXRtTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUjBGQlIxY3NTMEZCUzI5U0xGVkJRVlVzUzBGQlMzQlNMRXRCUVV0eFVpeFpRVUZaZGxFc1MwRkJTemhMTEhGQ1FVRnhRaXhoUVVGaE9Vc3NTMEZCUzJZc1QwRkJUelpETEZOQlFWTTJSeXhqUVVGakxGbEJRVmt6U1N4TFFVRkxPRW9zVTBGQlV6bEtMRXRCUVV0eFVTeHpRa0ZCYzBKeVVTeExRVUZMTms4c1dVRkJXVGRQTEV0QlFVdHhVU3h6UWtGQmMwSjZVeXhWUVVGVk5sRXNTMEZCU3l4VFFVRlRkRkVzUjBGQlJ5eFRRVUZUUXl4SlFVRkpSeXhGUVVGRksxSXNWVUZEYUdkQ2RGRXNTMEZCU3pKR0xHTkJRV053U0N4RlFVRkZiMUVzVFVGQlRYQlJMRVZCUVVVclVpeFpRVUZaTDFJc1JVRkJSU3RTTEZWQlFWVXZVaXhGUVVGRmFWTXNWVUZCVldwVExFVkJRVVVyVWl4WFFVRlhMMUlzUlVGQlJTdFNMRmxCUVZrdlVpeEZRVUZGSzFJc1YwRkJWeXh0UWtGQmJVSXZVaXhGUVVGRmIxRXNUMEZCVHl4VFFVRlRkRk1zU1VGQmMwSXNSMEZCYkVKclF5eEZRVUZGWjFNc1dVRkJXVzVUTEVsQlFVOUhMRVZCUVVVclVpeFZRVUZWTEVOQlFVTTVVaXhIUVVGSFRDeEZRVUZGWjFFc1pVRkJaVzVQTEV0QlFVczBReXhYUVVGWFF5eExRVUZMTEVsQlFVa3NTVUZCU1hoSExFVkJRVVZyUXl4RlFVRkZLMUlzVlVGQk9FTXNSMEZCY0VNdlVpeEZRVUZGSzFJc1ZVRkJWU3hMUVVGTGRGRXNTMEZCUzNkSkxGZEJRVmR1VFN4SFFVRk5iVU1zUlVGQlJTeEpRVUZKYkVNc1JVRkJSVEJFTEV0QlFVdDNReXh0UWtGQmJVSkRMRmRCUVZjc1VVRkJVV3BGTEVkQlFVZE1MRVZCUVVWdFVTeHRRa0ZCYlVJNVVDeEhRVUZIZDBJc1MwRkJTMllzVDBGQlQycENMRkZCUVZGdlJpeFJRVUZSY1U0c1QwRkJUeXhEUVVGRGJGTXNSVUZCUlRKUkxHZENRVUZsTEZkQlFWY3ZVU3hGUVVGRmFWRXNlVUpCUVhsQ04xQXNSVUZCUlc5UkxFdEJRVXN6VHl4TFFVRkxaaXhQUVVGUGFrSXNVVUZCVVc5R0xGRkJRVkUzUlN4RlFVRkZNbEVzWlVGRGVHVTFVeXhOUVVGTE5rSXNSVUZCUlRaUUxGVkJRVGhWTEVsQlFVbDZVQ3hGUVVGRlZ5eExRVUZMTEVkQlFVZGpMRXRCUVV0bUxFOUJRVTl6VVN4elFrRkJjMEp1VWl4SlFVRkpZeXhMUVVGTGIxSXNWMEZCVjNSUkxFdEJRVXRtTEU5QlFVOXpVU3h6UWtGQmMwSXNSMEZCUjNKUkxFdEJRVXR2VWl4WlFVRlpjRklzUzBGQlMyOVNMRlZCUVZVc1MwRkJTMjVUTEVWQlFVVTJVQ3hWUVVGVk4xQXNSVUZCUlRCUUxGbEJRemRsTEVOQlFVTXNTVUZCU1hKUUxFVkJRVVZWTEV0QlFVczRVQ3hWUVVGVmRsUXNVVUZCVVhWRkxFdEJRVXMwUXl4WFFVRlhReXhKUVVGSk0wUXNTMEZCUzNGU0xGbEJRVmx1VXl4SlFVRkpMRWxCUVVsNVFpeEZRVUZGTEVWQlFVVXhRaXhGUVVGRksxQXNWVUZCVlRWUUxFOUJRVTl6VGl4RlFVRkZMMHdzUjBGQlIwY3NTMEZCUzNOTkxHRkJRV0ZyUkN4WFFVRnZSU3hIUVVGNlJETlFMRVZCUVVWSExFdEJRVXMyVHl4WFFVRlhUaXhUUVVGVE1VOHNSMEZCUjBjc1MwRkJTeXRMTEhOQ1FVRjVRbUVzUjBGQlJ5OU1MRVZCUVVVeFFpeEZRVUZGZVVzc1QwRkJUU3hYUVVGWGRrMHNWMEZCVlN4RFFVRkRMRWxCUVVrclZDeEZRVUZGY0ZFc1MwRkJTMllzVDBGQlR6WkRMRk5CUVdsRkxFZEJRWGhFT0Vvc1JVRkJSVFZNTEV0QlFVczRTeXh0UWtGQmJVSXNhMEpCUVd0Q09Vc3NTMEZCUzJZc1QwRkJWVlFzUjBGQlIzZENMRXRCUVVzNFN5eHRRa0ZCYlVJNVN5eExRVUZMSzBzc2RVSkJRWFZDWVN4RlFVRkZMRU5CUVVNMVRDeExRVUZMTms4c1YwRkJWMDRzVVVGQlR5eEZRVUZIY0ZFc1JVRkJSVEJRTEZGQlFWRXNTVUZCU1RWU0xFVkJRVVZ0VlN4RlFVRkZUaXh0UWtGQmJVSk5MRVZCUVVWT0xHMUNRVUZ0UWl4WFFVRlhMR1ZCUVdWTkxFVkJRVVZ1Uml4aFFVRmhiVVlzUlVGQlJVNHNiVUpCUTNSbU4xUXNSVUZCUlVrc1NVRkJTVGhDTEVWQlFVVXlVQ3hWUVVGVk9VNHNTMEZCUzNGR0xGZEJRVmR3U2l4SlFVRkpRU3hGUVVGRk1rd3NWMEZCVFN4RlFVRlBReXhwUWtGQmFVSTNTQ3hMUVVGTGMwMHNZVUZCWVd0RUxGbEJRVmw0VUN4TFFVRkxPRXNzYlVKQlFXMUNPVXNzUzBGQlN5dExMSEZDUVVab1NDeFhRVUZoTEVsQlFVazFUU3hGUVVGRk5rSXNTMEZCUzJZc1QwRkJUelpETEZOQlFWTXhSQ3hGUVVGRk5FSXNTMEZCU3paUExGZEJRVmRQTEcxQ1FVRnJRaXhYUVVGWGNGQXNTMEZCU3paUExGZEJRVmRSTEc5Q1FVRnZRbXBTTEVkQlFVY3ZRaXhQUVVGTlF5eEZRVUZGTEd0RFFVRnJRekJFTEV0QlFVdHhUU3hyUWtGQmEwSXNPRUpCUVRoQ2FrOHNSVUZCUlN4UFFVRlBMR0ZCUVdWRUxFVkJRVVZ6VWl4TlFVRk5lbEFzUzBGQlN6QlFMSE5DUVVGelFqRlFMRXRCUVVzd1VDeHpRa0ZCYzBKRExGZEJRVmR5VkN4SFFVRkhRU3hIUVVVMVRFRXNSMEZCU1VRc1QwRkJUekpFTEV0QlFVdHhVU3h6UWtGQmMwSjZVeXhWUVVGVk5GTXNWVUZCVlN4VFFVRlRjbE1zUzBGQlN6WkNMRXRCUVVzd1VTeHhRa0ZCY1VJc1UwRkJVM1pUTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUlVGQlJVTXNSMEZCUjNkQ0xFdEJRVXR4VVN4elFrRkJjMEpzVlN4TFFVRkxLME1zUzBGQlMyWXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRVZCUVVWcFF5eEhRVUZIVnl4TFFVRkxlVklzVjBGQlYyNVRMRWRCUVVkM1FpeExRVUZMT0Vvc1UwRkJVemxLTEV0QlFVc3dVU3h4UWtGQmNVSXhVU3hMUVVGTGNWRXNkVUpCUVhWQ2NsRXNTMEZCU3pCUkxIRkNRVUZ4UWpsVExGVkJRVlUwVXl4VlFVRlZMRk5CUVZOeVV5eEhRVUZITEU5QlFVOWxMRXRCUVV0NVVpeFhRVUZYZUVzc1ZVRkJWV2hKTEVWQlFVVmxMRXRCUVV0blVTeG5Ra0ZEZG1ac1VDeExRVUZMTkZFc2FVTkJRV2xETEZOQlFWTjZVeXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRWRCUVVkNVFpeExRVUZMY1ZFc2MwSkJRWE5DYkZVc1MwRkJTeXRETEV0QlFVdG1MRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNTVUZCU1hsQ0xFdEJRVXM0U2l4VFFVRlRPVW9zUzBGQlN6UlJMR2xEUVVGcFF6VlJMRXRCUVV0eFVTeDFRa0ZCZFVKeVVTeExRVUZMTkZFc2FVTkJRV2xEYUZRc1ZVRkJWVFJUTEZWQlFWVXNVMEZCVTNKVExFZEJRVWNzVDBGQlQwRXNSMEZCUnpaQ0xFdEJRVXMyVVN4eFFrRkJjVUlzVTBGQlV6RlRMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlVNc1JVRkJSWEZDTEVkQlFVZEhMRXRCUVV0eFVTeHpRa0ZCYzBKc1ZTeExRVUZMSzBNc1MwRkJTMllzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVWQlFVVnBReXhIUVVGSFZ5eExRVUZMTkZJc1owSkJRV2RDZEZNc1JVRkJSVlVzUzBGQlMydE9MRmxCUVZsMlRTeEhRVUZIUnl4TFFVRkxPRW9zVTBGQlV6bEtMRXRCUVVzMlVTeHhRa0ZCY1VJM1VTeExRVUZMY1ZFc2RVSkJRWFZDY2xFc1MwRkJTelpSTEhGQ1FVRnhRbXBVTEZWQlFWVTBVeXhWUVVOb1owSXNVMEZCVTNKVExFZEJRVGhGTEU5QlFUTkZaU3hMUVVGTE5GSXNhMEpCUVd0Q00xTXNSVUZCUldVc1MwRkJTMnRPTEZsQlFWbHFSeXhWUVVGVmFFa3NSVUZCUldVc1MwRkJTMmRSTEdkQ1FVRjFRbXhRTEV0QlFVc3dSU3gzUWtGQmQwSXhSU3hMUVVGTFJTeE5RVUZOUml4TFFVRkxaaXhQUVVGUGIwZ3NUVUZCVFN4dFFrRkJiVUp5Unl4TFFVRkxaaXhQUVVGUGIwZ3NTMEZCUzBNc1ZVRkJWVzVKTEVWQlFVVXNiVUpCUVcxQ1pTeExRVUZMZVZBc1MwRkJTeXhOUVVGTkxFdEJRVXNzYlVSQlFXMUVlRkVzUlVGQlJTeDFRMEZCZFVObExFdEJRVXQ1VUN4TFFVRkxMRTFCUVUwelR5eExRVUZMYzAwc1lVRkJZV3RFTEdGQlFXRjRVQ3hMUVVGTFppeFBRVUZQT0ZJc1QwRkJUeTlSTEV0QlFVdG1MRTlCUVU4MlF5eFhRVUZYT1VJc1MwRkJTMllzVDBGQlR6WkRMRk5CUVZOclVDeExRVUZMYUZJc1MwRkJTM05OTEdGQlFXRXhUeXhWUVVGVk5rWXNZMEZCWXl4VFFVRlRkRVlzUlVGQlJVTXNSVUZEY0dZdlFpeEZRVUZGUXl4SFFVRkhPRUlzUlVGQlJVRXNSMEZCUnl4SFFVRkhSQ3hGUVVGRlFTeEZRVUZGZFV3c1VVRkJVU3hOUVVGTkxFdEJRVXNzU1VGQlNXNU1MRVZCUVVWNVFpeExRVUZMZDBZc1pVRkJaWGhHTEV0QlFVdHRSU3hUUVVGVGFFY3NSMEZCSzB3c1NVRkJOVXczUWl4SFFVRkhMR3RDUVVGdFFrRXNTVUZCU1VFc1JVRkJSVUVzUlVGQlJTeERRVUZEWWl4UFFVRlBkVVVzUzBGQlN6UkRMRmRCUVZkRkxFMUJRVTBzU1VGQlNYcEhMRVZCUVVVMlF5eExRVUZMTWs0c1UwRkJVMU1zYVVKQlFXbENMMDhzUlVGQlJVb3NSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRVZCUVVVd1JDeExRVUZMYjAwc1dVRkJXVVFzWlVGQlpUZFFMRVZCUVVVeVZTeE5RVUZOTEUxQlFVMHpWU3hGUVVGRllpeFRRVUZUZVVRc1MwRkJTM0ZPTEdOQlFXTm9UeXhIUVVGSGJFTXNSVUZCVFVFc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMYzA0c1ZVRkJWWEJQTEVWQlFVVXZRaXhKUVVGSmEwTXNSVUZCUlZjc1MwRkJTM05PTEZWQlFWVnlUeXhIUVVGSFNTeEhRVUZIZVVJc1MwRkJTemhOTEd0Q1FVRnJRaXhUUVVGVE0wOHNSMEZCUjJVc1MwRkJTM2xTTEZkQlFWZDRVeXhIUVVGSE5rSXNTMEZCU3poTkxHdENRVUZyUW14UUxGVkJRVlV3VUN4cFFrRkJhVUlzVTBGQlUyNVFMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlVNc1IwRkJSeXhQUVVGUFJDeEZRVUZGT1VNc1VVRkJVWFZGTEV0QlFVczBReXhYUVVGWFJTeExRVUZMTEVsQlFVazVReXhMUVVGTE5sRXNjVUpCUVhGQ01WTXNSVUZEYUdoQ1F5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRVZCUVVWRExFVkJRVVZWTEV0QlFVdDVVaXhaUVVGWmJsTXNSVUZCUlN4SlFVRkpkMElzUzBGQlN6QlJMSEZDUVVGeFFuWlRMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlZjc1MwRkJTM2xTTEZsQlFWbHdVeXhGUVVGRk9VTXNVVUZCVVhWRkxFdEJRVXMwUXl4WFFVRlhReXhKUVVGSkxGTkJRVk0zUXl4TFFVRkxORVVzVjBGQlZ6VkZMRXRCUVVzMlJTdzJRa0ZCTmtJc1NVRkJTVGRGTEV0QlFVczBVU3hwUTBGQmFVTjZVeXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRWRCUVVjc1NVRkJTWGxDTEV0QlFVdHBVU3h2UWtGQmIwSTVVaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRWRCUVVjc1NVRkJTWGxDTEV0QlFVczJUeXhYUVVGWE1WRXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRVZCUVVWcFF5eEpRVUZKZVVJc1MwRkJTekpFTEdGQlFXRXNTVUZCU1RORUxFdEJRVXR6VFN4aFFVRmhkRTBzUzBGQlMzRk9MR2RDUVVGblFpeFhRVUZYY2s0c1MwRkJTekpFTEdGQlFXRXdTaXh0UWtGQmJVSnlUaXhMUVVGTE1FNHNjVUpCUVhGQ0xGTkJRVk4yVUN4SFFVRkhOa0lzUzBGQlN6SkVMR0ZCUVdFclNpeHhRa0ZCY1VKMlVDeEpRVUZKTmtJc1MwRkJTMllzVDBGQlQybFRMR2xDUVVOMFpteFNMRXRCUVVzeVJDeGhRVUZoTUVvc2EwSkJRV3RDY2s0c1MwRkJTMmxPTEZWQlFWVXNVMEZCVXpsUExFVkJRVVZETEVkQlFVYzBRaXhMUVVGTE1rUXNZVUZCWVhOS0xGVkJRVlU1VHl4RlFVRkZReXhMUVVGTE5FSXNTMEZCUzIxU0xEQkNRVUV3UWl4SFFVRkhibElzUzBGQlMyOVNMRlZCUVZVc1UwRkJVMnBVTEVkQlFVY3NUMEZCVDBFc1IwRkJSelpDTEV0QlFVdHhVaXg1UWtGQmVVSXNVMEZCVTJ4VUxFZEJRVWNzU1VGQlNVTXNSVUZCUlN4TFFVRkxMRWRCUVVjc2IwSkJRWEZDYTFRc1pVRkJaVUVzWVVGQllVTXNZVUZCWVN4UFFVRlBibFFzUlVGQlJTeEpRVUZKUVN4RlFVRkZhMVFzWVVGQllVTXNZVUZCWVhCVUxFVkJRVVVzUTBGQlEzZFNMRmRCUVZjelVDeExRVUZMYjFJc1ZVRkJWV3BDTEdGQlFXRnVVU3hMUVVGTGIxSXNWVUZCVlhCQ0xHZENRVUZuUW1oUkxFdEJRVXR2VWl4VlFVRlZTU3hWUVVGVmVGSXNTMEZCUzI5U0xGbEJRVmtzVFVGQlRTOVZMRWRCUVVjeVJDeExRVUZMTmtRc1kwRkJZM2hJTEVWQlFVVnZWaXhUUVVGVExFOUJRVTl5VkN4SFFVTXpaVFJDTEV0QlFVc3dVQ3h6UWtGQmMwSXhVQ3hMUVVGTGJWSXNNRUpCUVRCQ2JsSXNTMEZCUzNGU0xIbENRVUY1UW5KU0xFdEJRVXR0VWl3d1FrRkJNRUlzVTBGQlV5eExRVUZMYmxJc1MwRkJTM1JETEU5QlFVOHNSMEZCUjNORExFdEJRVXQwUXl4UFFVRlBaMVVzUjBGQlJ5eFRRVUZUZGxRc1JVRkJSVU1zUjBGQlJ5eFBRVUZQUkN4SlFVRkpReXhGUVVGRkxFbEJRVWxFTEVkQlFVY3NSVUZCUlVFc1IwRkJTU3hGUVVGRlF5eEZRVUZGUkN4SFFVRkpRU3hIUVVGSFF5eEhRVUZKUVN4SFFVRkhORUlzUzBGQlMzUkRMRTlCUVU5cFZTeFJRVUZSTEZOQlFWTjRWQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSkxFbEJRVWxETEV0QlFVczJRaXhGUVVGRlF5eEZRVUZGYWtNc1MwRkJTMFVzUlVGQlJUaENMRVZCUVVVM1FpeEhRVUZIUVN4RlFVRkZOa0lzU1VGQlNUWkNMRXRCUVV0MFF5eFBRVUZQYTFVc1QwRkJUeXhUUVVGVGVsUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCVTJ0RExFVkJRVXhxUXl4RlFVRkZMRWRCUVVzc1NVRkJTV2xETEV0QlFVdEtMRVZCUVVWRExFVkJRVVZxUXl4TFFVRkxSU3hGUVVGRk9FSXNSVUZCUlVrc1IwRkJSMEVzUlVGQlJVb3NTMEZCU3pkQ0xFVkJRVVZwUXl4SFFVRkhTaXhGUVVGRlNTeEpRVUZKTEU5QlFVOXFReXhIUVVGSE1FUXNTMEZCUzNSRExFOUJRVTkzVHl4SlFVRkpMRk5CUVZNdlRpeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZUYTBNc1JVRkJUR3BETEVWQlFVVXNSMEZCU3l4SlFVRkphVU1zUzBGQlMwb3NSVUZCUlRkQ0xFVkJRVVZwUXl4SFFVRkhTQ3hGUVVGRmFrTXNTMEZCUzBVc1JVRkJSVGhDTEVWQlFVVkpMRWRCUVVkQkxFVkJRVVZLTEVkQlFVY3NUMEZCVHpkQ0xFZEJRVWN3UkN4TFFVRkxkRU1zVDBGQlQyMVZMRXRCUVVzc1UwRkJVekZVTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1MwRkJTelpDTEVWQlFVVXNSMEZCUjBNc1JVRkJSV3BETEV0QlFVdEZMRVZCUVVVNFFpeEZRVUZGTjBJc1IwRkJSMEVzUlVGQlJUWkNMRWRCUVVjc1QwRkJUU3hGUVVGSExFOUJRVTBzUjBGRGNHcENOa0lzUzBGQlMzUkRMRTlCUVU5dlZTeE5RVUZOTEZOQlFWTXpWQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSkxFbEJRVWxETEV0QlFVczJRaXhGUVVGRkxFbEJRVWxETEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGT0VJc1JVRkJSVGRDTEVkQlFVZEJMRVZCUVVVMlFpeEhRVUZITEU5QlFVMHNSVUZCUnl4UFFVRk5MRWRCUVVrMlFpeExRVUZMZEVNc1QwRkJUM0ZWTEZOQlFWTXNVMEZCVXpWVUxFZEJRVWNzU1VGQlVUbENMRVZCUVVvclFpeEZRVUZGTEVWQlFVa3NTVUZCU1M5Q0xFdEJRVXM0UWl4RlFVRkZReXhKUVVGSkxFOUJRVTlCTEVkQlFVYzBRaXhMUVVGTGRFTXNUMEZCVDNOVkxGVkJRVlVzVTBGQlV6ZFVMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eExRVUZMUkN4RlFVRkZMRTlCUVU5RExFZEJRVWMwUWl4TFFVRkxkRU1zVDBGQlQzVlZMRmxCUVZrc1UwRkJVemxVTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTFJDeEZRVUZGTEU5QlFVOUJMRVZCUVVWRExFbEJRVWswUWl4TFFVRkxkRU1zVDBGQlQzZFZMRk5CUVZNc1UwRkJVeTlVTEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVdDBReXhQUVVGUGVWVXNZMEZCWTJoVkxFVkJRVVZETEVsQlFVazBRaXhMUVVGTGRFTXNUMEZCVHpCVkxGVkJRVlVzVTBGQlUycFZMRWRCUVVjc1NVRkJZVGRDTEVWQlFWUTRRaXhGUVVGRkxFZEJRVWN2UWl4RlFVRkZMRVZCUVVrc1NVRkJTVU1zUzBGQlN6WkNMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxPRUlzUlVGQlJUZENMRWRCUVVjc1QwRkJUemhDTEVkQlEyNWlORUlzUzBGQlMzUkRMRTlCUVU4eVZTeFJRVUZSTEZOQlFWTnNWU3hIUVVGSExFbEJRV0UzUWl4RlFVRlVPRUlzUlVGQlJTeEhRVUZITDBJc1JVRkJSU3hGUVVGSkxFbEJRVWxETEV0QlFVczJRaXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTME1zUlVGQlJTeFBRVUZQT0VJc1IwRkJSelJDTEV0QlFVdDBReXhQUVVGUE5GVXNaVUZCWlN4VFFVRlRibFVzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJUSkVMRXRCUVVzMFJ5eFpRVUZaZUVrc1IwRkJSemxDTEVWQlFVVkVMRVZCUVVVclFpeEZRVUZGZVVvc1ZVRkJWU3hKUVVGSmVFd3NSVUZCUlVFc1JVRkJSU3hGUVVGRkxFVkJRVVZCTEVWQlFVVkRMRVZCUVVWblF5eFBRVUZQYWtNc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlRUaENMRVZCUVVVc1QwRkJUMEVzUlVGQlJVRXNSVUZCUlRkQ0xFVkJRVVZFTEVsQlFVa3NUMEZCVHpoQ0xFZEJRVWMyUWl4TFFVRkxkRU1zVDBGQlR6WlZMRmxCUVZrc1UwRkJVM0JWTEVWQlFVVkRMRWRCUVVjc1QwRkJUeXhQUVVGUFJDeEhRVUZIUXl4TFFVRkxSQ3hIUVVGSE5rSXNTMEZCUzNSRExFOUJRVTk1VlN4alFVRmpMRk5CUVZOb1ZTeEZRVUZGUXl4SFFVRkhMRWxCUVVrc1NVRkJTUzlDTEV0QlFVczRRaXhGUVVGRkxFZEJRVWRCTEVWQlFVVTVRaXhKUVVGSkswSXNSVUZCUlN4UFFVRk5MRVZCUVVjc1QwRkJUU3hIUVVGSk5FSXNTMEZCUzNSRExFOUJRVTg0VlN4UlFVRlJMRk5CUVZOeVZTeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKTEVsQlFVbERMRXRCUVVzMlFpeEZRVUZGTEVkQlFVZERMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZPRUlzUlVGQlJUZENMRWRCUVVkQkxFVkJRVVUyUWl4SFFVRkhMRTlCUVU4M1FpeEhRVU4wWXpCRUxFdEJRVXQwUXl4UFFVRlBLMVVzVlVGQlZTeFRRVUZUZEZVc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUeXRDTEVWQlFVVTBRaXhMUVVGTGRFTXNUMEZCVHpoVkxGRkJRVkZ5VlN4RlFVRkZReXhGUVVGRkwwSXNTMEZCU3poQ0xFVkJRVVZETEVsQlFVazBRaXhMUVVGTGRFTXNUMEZCVDJkV0xGRkJRVkVzVTBGQlUzWlZMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eExRVUZMUkN4RlFVRkZMRTlCUVUwc1JVRkJSeXhQUVVGTkxFZEJRVWsyUWl4TFFVRkxkRU1zVDBGQlQybFdMRTFCUVUwc1UwRkJVM2hWTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTFJDeFRRVUZUUVN4RlFVRkZReXhKUVVGSk5FSXNTMEZCUzNSRExFOUJRVTlyVml4UFFVRlBMRk5CUVZONlZTeEZRVUZGUXl4SFFVRkhMRWxCUVVrdlFpeEZRVUV3UWl4UFFVRjJRa0VzUlVGQlJTdENMRXRCUVV0RUxGZEJRVmRCTEVWQlFVVkRMRWRCUVZVdlFpeEhRVUZITWtRc1MwRkJTM1JETEU5QlFVOXRWaXhKUVVGSkxGTkJRVk14VlN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SFFVRkhMRTlCUVU4NFFpeEhRVUZIUXl4TFFVRkxSQ3hGUVVGRkxFMUJRVTFyUkN4TlFVRk5MSGREUVVGM1EycEVMRVZCUVVVc1MwRkJTelJDTEV0QlFVdDBReXhQUVVGUGIxWXNTVUZCU1ROVkxFVkJRVVZETEVWQlFVVXZRaXhKUVVGSk1rUXNTMEZCUzNSRExFOUJRVTlpTEVsQlFVa3NVMEZCVTNOQ0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVThzVDBGQlR6aENMRWRCUVVkRExFdEJRVXRFTEVWQlFVVkJMRVZCUVVWRExFZEJRVWN2UWl4SFFVTXpaREpFTEV0QlFVdDBReXhQUVVGUGIxWXNTVUZCU1N4VFFVRlRNMVVzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWM0UWl4RlFVRkZReXhIUVVGSEwwSXNSMEZCUnpKRUxFdEJRVXQwUXl4UFFVRlBjVllzWlVGQlpTeFRRVUZUTlZVc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUeXRDTEV0QlFVdEVMRVZCUVVWQkxFVkJRVVZETEVkQlFVZEVMRVZCUVVWRExFZEJRVWN2UWl4SFFVRkhNa1FzUzBGQlMzUkRMRTlCUVU5elZpd3lRa0ZCTWtJc1UwRkJVemRWTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEU5QlFVY3JRaXhMUVVGTFJDeEZRVUZUUVN4RlFVRkZReXhKUVVGSEwwSXNSVUZCUlVFc1NVRkJWemhDTEVWQlFVVkRMRWRCUVVjdlFpeEpRVUZITWtRc1MwRkJTM1JETEU5QlFVOTFWaXhQUVVGUExGTkJRVk01VlN4RlFVRkZReXhIUVVGSExFbEJRVWtzU1VGQlNTOUNMRXRCUVVzNFFpeEZRVUZGTEV0QlFVczVRaXhMUVVGTEswSXNTVUZCU1VRc1JVRkJSVGxDTEV0QlFVc3JRaXhGUVVGRkwwSXNSMEZCUnl4UFFVRk5MRVZCUVVjc1NVRkJTU3hKUVVGSlF5eExRVUZMT0VJc1JVRkJSU3hMUVVGTE9VSXNTMEZCU3paQ0xFZEJRVWNzVDBGQlRTeEZRVUZITEU5QlFVMHNSMEZCU1RaQ0xFdEJRVXQwUXl4UFFVRlBaMHNzVFVGQlRTeFRRVUZUZGtvc1IwRkJSeXhKUVVGVE9VSXNSVUZCVEN0Q0xFVkJRVVVzUjBGQlN5eEpRVUZKTDBJc1MwRkJTemhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZIT0VJc1JVRkJSVGxDTEVkQlFVY3NUMEZCVHl0Q0xFZEJRM1phTkVJc1MwRkJTM1JETEU5QlFVOTNWaXhaUVVGWkxGTkJRVk12VlN4SFFVRkhMRWxCUVVsRExFVkJRVVUwUWl4TFFVRkxkVWNzVDBGQlQzQkpMRWRCUVVjc1IwRkJSeXhWUVVGVlF5eEhRVUZITEZOQlFWTkJMRVZCUVVVc1EwRkJReXhIUVVGSE5FSXNTMEZCUzNGR0xGZEJRVmRzU0N4RlFVRkZkVW9zVDBGQlR5eFBRVUZQZGtvc1JVRkJSWFZLTEZGQlFUSkNMRWxCUVVrc1NVRkJTWEpNTEV0QlFUTkNLMElzUlVGQlJTeFRRVUZUUVN4RlFVRkZMRWRCUVVjc1IwRkJaMEpFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITWtRc1MwRkJTM1JETEU5QlFVOTNWaXhaUVVGWkwxVXNSVUZCUlRsQ0xFbEJRVWtzVDBGQlR5dENMRVZCUVVVc1QwRkJUMFFzUjBGQlJ6WkNMRXRCUVV0MFF5eFBRVUZQZVZZc1ZVRkJWU3hUUVVGVGFGWXNSMEZCUnl4SlFVRlRPVUlzUlVGQlRDdENMRVZCUVVVc1IwRkJTeXhKUVVGSkwwSXNTMEZCU3poQ0xFVkJRVVZETEVWQlFVVkVMRVZCUVVVNVFpeEpRVUZKUVN4RlFVRkZMRTlCUVU4clFpeEhRVUZITkVJc1MwRkJTM1JETEU5QlFVOHdWaXhyUWtGQmEwSXNaMGRCUVdkSGFGVXNUVUZCVFN4TFFVTXhZVmtzUzBGQlMzUkRMRTlCUVU4eVZpeFBRVUZQTEZOQlFWTnNWaXhGUVVGRlF5eEhRVUZITEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVZETEVWQlFVVnBReXhGUVVGRkxFVkJRVVZCTEVWQlFVVnpTaXhWUVVGVmRrb3NUMEZCVDBNc1NVRkJTU3hEUVVGblFpeEpRVUZKYkVNc1MwRkJia0pETEVWQlFVVjFUQ3hWUVVGVmRFb3NSMEZCWTBvc1JVRkJSVGxDTEVkQlFVZERMRVZCUVVWRUxFZEJRVWNzU1VGQlNTeEpRVUZKYlVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGZDBJc1MwRkJTM1JETEU5QlFVOHdWaXhyUWtGQmEwSTVWU3hQUVVGUFJTeEpRVUZKYmtNc1JVRkJSVEpFTEV0QlFVdDBReXhQUVVGUE1GWXNhMEpCUVd0Q05WVXNSMEZCUnpsQ0xFOUJRVTlyUWl4VlFVRlZReXhsUVVGbE1VSXNTMEZCUzBjc1JVRkJSVVFzUzBGQlN6aENMRVZCUVVVNVFpeEhRVUZIUXl4RlFVRkZSQ3hOUVVNeFVESkVMRXRCUVV0MFF5eFBRVUZQU2l4UFFVRlBMRk5CUVZOaExFZEJRVWNzU1VGQlNVTXNSVUZCUlhsS0xGVkJRVlYyU2l4UFFVRlBMRWRCUVVjc1IwRkJSMFlzUjBGQlJ6UkNMRXRCUVVzeVJ5eFJRVUZSYTBJc1ZVRkJWU3hKUVVGSkxFOUJRVTgzU0N4TFFVRkxkRU1zVDBGQlQwb3NUMEZCVDNOTExFMUJRVTBzUzBGQlMwTXNWVUZCVlN4SlFVRkpMRWRCUVVkNlNpeEZRVUZGTEVWQlFVVXNUVUZCVFdsRUxFMUJRVTBzT0VKQlFUaENMRWxCUVVrc1NVRkJTV2hHTEVWQlFVVXNSMEZCUjBNc1JVRkJSU3hGUVVGRlFTeEZRVUZGT0VJc1JVRkJSVGxDTEVkQlFVY3NSVUZCUlVRc1JVRkJSWGRNTEZWQlFWVjJUQ3hKUVVGSmRVd3NWVUZCVlhaTUxFVkJRVVVzUjBGQlJ5eFBRVUZQUkN4SFFVRkhNa1FzUzBGQlMzUkRMRTlCUVU4MFZpeFZRVUZWTEZOQlFWTnVWaXhIUVVGSExFbEJRVWxETEVWQlFVVjVTaXhWUVVGVmRrb3NUMEZCVHl4SFFVRkhMRWRCUVVkR0xFZEJRVWMwUWl4TFFVRkxNa2NzVVVGQlVXdENMRlZCUVZVc1NVRkJTU3hQUVVGUE4wZ3NTMEZCUzNSRExFOUJRVTgwVml4VlFVRlZNVXdzVFVGQlRTeExRVUZMUXl4VlFVRlZMRWxCUVVrc1NVRkJTU3hKUVVGSmVFd3NSVUZCUlN4SFFVRkhReXhGUVVGRkxFVkJRVVZCTEVWQlFVVTRRaXhGUVVGRk9VSXNTVUZCU1VRc1JVRkJSWGRNTEZWQlFWVjJUQ3hMUVVGSkxFVkJRVWNzVDBGQlQwUXNSMEZEZG1NeVJDeExRVUZMZEVNc1QwRkJUelpXTEc5Q1FVRnZRaXhUUVVGVGNGWXNSMEZCUnl4SlFVRkpReXhGUVVGRlJDeEZRVUU0UlN4UFFVRTFSWHBDTEU5QlFVODRWeXhYUVVGWE9WY3NUMEZCVHpoWExGTkJRVk55Vml4TFFVRkxReXhGUVVGRk1VSXNUMEZCVDFrc1QwRkJUMkVzUjBGQlIzcENMRTlCUVU4clZ5eFBRVUZQY2xZc1NVRkJWMEVzUjBGQlJ6UkNMRXRCUVV0MFF5eFBRVUZQWjFjc1owSkJRV2RDTEZOQlFWTjJWaXhIUVVGSExGRkJRVkY2UWl4UFFVRlBPRmNzVlVGQlZUbFhMRTlCUVU4NFZ5eFRRVUZUY2xZc1NVRkRNMDQyUWl4TFFVRkxkRU1zVDBGQlQybFhMRzlDUVVGdlFpeFRRVUZUZUZZc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTVGhDTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVsNlFpeFBRVUZQYTFnc2MwSkJRWE5DYkZnc1QwRkJUekJPTEdWQlFXVXNUMEZCVDNCTExFdEJRVXQwUXl4UFFVRlBNbFVzVVVGQlVXeFZMRWRCUVVjc1NVRkJTU3hKUVVGSk4wSXNSVUZCUlN4SFFVRkhOa0lzU1VGQlNVRXNTVUZCU1hwQ0xFOUJRVTlyUWl4WFFVRlhVU3hMUVVGTFJDeEpRVUZKT0Vvc1UwRkJVM0pMTEZkQlFWZDJRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKYTBNc1JVRkJSVGRDTEU5QlFVOXJXQ3h2UWtGQmIwSjZWaXhIUVVGSFN5eEZRVUZGTEVWQlFVVkJMRVZCUVVWRUxFVkJRVVZFTEU5QlFVOUZMRWxCUVVsc1F5eEZRVUZGYVVNc1JVRkJSVU1zUzBGQlNTeEZRVUZIVEN4RlFVRkZla0lzVDBGQlR6Qk9MR1ZCUVdWcVRTeEhRVUZITEU5QlFVODJRaXhMUVVGTGRFTXNUMEZCVHpKVkxGRkJRVkV2Vml4SlFVRkpNRVFzUzBGQlMzUkRMRTlCUVU5dFZ5eGpRVUZqTEZOQlFWTXhWaXhIUVVGSExFOUJRVTlCTEVWQlFVVjZRaXhQUVVGUE1FNHNaVUZCWldwTkxFVkJRVVZRTEdGQlFXRlBMRVZCUVVVMlRDeGhRVUZoYUVzc1MwRkJTemhVTEUxQlFVMHNSMEZCUnpsVUxFdEJRVXM0VkN4TlFVRk5lbE1zVFVGQlRTeFRRVUZUYkVRc1IwRkJSeXhIUVVGSGEwUXNUVUZCVFRCVExHdENRVUZyUWpGVExFMUJRVTB3VXl4clFrRkJhMEkzVlN4TFFVRkxZeXhMUVVGTE9GUXNUVUZCVFhwVExGZEJRVmNzUTBGQlF5eEpRVUZKYWtRc1JVRkJSV2xFTEZGQlFWRXlVeXhOUVVGTk5WWXNTVUZCU1dNc1MwRkJTemhWTEUxQlFVMDFWaXhIUVVGSFJDeEpRVUZKWlN4TFFVRkxkVk1zVVVGQlVYQlVMRTlCUVU5R0xFbEJRVWxsTEV0QlFVc3JWU3h4UWtGQmIwSXNSMEZCU1dwVkxFdEJRVXM0U2l4VFFVRlRPVW9zUzBGQlN6aFVMRTFCUVUxNlV5eE5RVUZOUVN4UFFVRlBja0lzUzBGQlN6aFVMRTFCUVUxNlV5eE5RVUZOZWtRc1ZVRkJWWEpDTEV0QlFVc3NZMEZCWTNsRUxFdEJRVXRyVlN4SlFVRkpMRWRCUVVkc1ZTeExRVUZMYTFVc1NVRkJTVU1zVTBGQlV5eERRVUZEUXl4UlFVRlJMRVZCUVVWRExGVkJRVlVzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhqUVVGakxFVkJRVVZETEdsQ1FVRnBRaXhGUVVGRlF5eFBRVUZQTEVWQlFVVkRMSFZDUVVGMVFpeEZRVUZGUXl4UlFVRlJMRVZCUVVWRExGTkJRVk1zUlVGQlJVTXNZMEZCWXl4SFFVRkhReXhyUWtGQmEwSXNSMEZCUjBNc1UwRkJVeXhKUVVGSkwxVXNTMEZCUzJkV0xGRkJRVkVzUjBGQlIyaFdMRXRCUVV0blZpeFJRVUZSUXl4bFFVRmxhbFlzUzBGQlMyRXNUVUZCVFdJc1MwRkJTMmRXTEZGQlFWRkZMR1ZCUVdVc1UwRkJVeTlYTEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMT0ZRc1RVRkJUWHBUTEUxQlFVMXNSaXhMUVVGTEswTXNTMEZCUzJNc1MwRkJTMmRXTEZGQlFWRkhMRTFCUVUxb1dDeEZRVUZGUXl4SlFVRkpZeXhMUVVGTGExY3NaVUZCWldwWUxFZEJRVWMyUWl4TFFVRkxPRW9zVTBGQlV6bEtMRXRCUVV0blZpeFJRVUZSUlN4bFFVRmxiRllzUzBGQlN6aFVMRTFCUVUxNlV5eFBRVUZQY2tJc1MwRkJTMmRXTEZGQlFWRkZMR1ZCUVdWMFdDeFZRVUZWY2tJc1MwRkJTeXhwUWtGQmFVSjVSQ3hMUVVGTFoxWXNVVUZCVVVzc2MwSkJRWE5DTEZOQlFWTnNXQ3hIUVVGSExFMUJRVTFCTEVkQlFVazJRaXhMUVVGTFoxWXNVVUZCVVUwc1kwRkJZM1JXTEV0QlFVdG5WaXhSUVVGUlN5eHpRa0ZETTNwRGNsWXNTMEZCUzJkV0xGRkJRVkZITEUxQlFVMHNVMEZCVTJoWUxFVkJRVVZETEVkQlFXMUNMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSMEZCUjBNc1IwRkJOMEkyUWl4RlFVRkZRU3hGUVVGRmFVSXNUVUZCVFN4UFFVRjFRbVFzVDBGQlR5eEZRVUZGUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZxUXl4RlFVRkZhVU1zU1VGQlNXeERMRWRCUVVjNFFpeEZRVUZGU1N4SlFVRkpRU3hGUVVGRlNDeEZRVUZGUlN4UFFVRlBSaXhGUVVGRlJ5eEhRVUZITEUxQlFVMHNUMEZCVDJ4RExFVkJRVVU0UWl4RlFVRkZOMElzU1VGQlNUQkVMRXRCUVV0blZpeFJRVUZSVHl4cFFrRkJhVUlzVTBGQlUzQllMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGSExFbEJRVWxwUXl4RlFVRkZMRzFDUVVGdFFpeEhRVUZIYkVNc1JVRkJSU3hEUVVGRGEwTXNSMEZCUnl4TFFVRkxiRU1zUlVGQlJTeEpRVUZKYlVNc1JVRkJSV3hETEU5QlFVODJRaXhKUVVGSlNTeEhRVUZITEV0QlFVdEtMRVZCUVVWTExFVkJRVVZLTEVkQlFVZEVMRVZCUVVVc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlJTeGxRVUZsTEVkQlFVY3pWeXhGUVVGRlF5eEhRVUZITEVsQlFVbDNRaXhMUVVGTFoxWXNVVUZCVVUwc1kwRkJZMjVZTEVsQlFVazJRaXhMUVVGTFoxWXNVVUZCVVZFc1owSkJRV2RDTEZOQlFWTnlXQ3hIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZETEdsQ1FVRnBRbXBXTEV0QlFVdG5WaXhSUVVGUlRTeGpRVUZqYmxnc1NVRkROMkUyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4VFFVRlRkRmdzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRWEZJTEU5QlFXeElNa1FzUzBGQlMyZFdMRkZCUVZGRExHbENRVUZwUWpsWExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVVOHNhVUpCUVdsQ0xFZEJRVWNzUzBGQlMyNVlMRVZCUVVWWExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFZRVUZWTEVsQlFWY3hTaXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZWTEdGQlFXRXNVMEZCVTNaWUxFVkJRVVZETEVWQlFVVXZRaXhIUVVFclNTeFBRVUUxU1RKRUxFdEJRVXRuVml4UlFVRlJReXhuUWtGQlowSXNUVUZCVFRsWExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVVOHNhVUpCUVdsQ0xIbENRVUY1UWl4RFFVRkRjRmdzUjBGQlIwTXNSVUZCUlZjc1RVRkJUVzVDTEZWQlFWVnRTeXhOUVVGTk5Vd3NTMEZCU3pCTUxGVkJRVlVzU1VGQlZ6RktMRWRCUXpkV05rSXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NVMEZCVTNoWUxFVkJRVVZETEVkQlFVYzBRaXhMUVVGTFoxWXNVVUZCVVVNc1owSkJRV2RDYWxZc1MwRkJTMmRXTEZGQlFWRk5MR05CUVdNc1NVRkJTWFJXTEV0QlFVdG5WaXhSUVVGUlJTeGxRVUZsTEZkQlFWY3ZWeXhGUVVGRkxFdEJRVXRCTEVWQlFVVXNTVUZCU1Zrc1RVRkJUVzVDTEZWQlFWVnRTeXhOUVVGTk5Vd3NTMEZCU3pCTUxGVkJRVlVzVFVGQlRUZElMRXRCUVV0blZpeFJRVUZSV1N4aFFVRmhMRk5CUVZONldDeEZRVUZGUXl4RlFVRkZMMElzUjBGQmFVd3NUMEZCT1VzeVJDeExRVUZMWjFZc1VVRkJVVU1zYVVKQlFXbENhbFlzUzBGQlMwc3NVMEZCVTJ4RExFbEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVVOHNhVUpCUVdsQ0xHdERRVUZyUXl4RFFVRkRkbFlzUzBGQlMzVkhMRTlCUVU5d1NTeEhRVUZIUVN4SFFVRkhReXhGUVVGRlZ5eE5RVUZOYmtJc1ZVRkJWVzFMTEUxQlFVMDFUQ3hMUVVGTE1Fd3NWVUZCVlN4SlFVRlhNVW9zUjBGRE1WbzJRaXhMUVVGTFoxWXNVVUZCVVdFc1lVRkJZU3hUUVVGVE1WZ3NSVUZCUlVNc1JVRkJSUzlDTEVkQlFXbE1MRTlCUVRsTE1rUXNTMEZCUzJkV0xGRkJRVkZETEdsQ1FVRnBRbXBXTEV0QlFVdEhMRk5CUVZOb1F5eEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlBMR2xDUVVGcFFpeHJRMEZCYTBNc1EwRkJRM1pXTEV0QlFVdDFSeXhQUVVGUGNFa3NSMEZCUjBFc1IwRkJSME1zUlVGQlJWY3NUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1NVRkJWekZLTEVkQlFVYzJRaXhMUVVGTFoxWXNVVUZCVVdNc1pVRkJaU3hUUVVGVE0xZ3NSVUZCUlVNc1JVRkJSUzlDTEVkQlFYRk1MRTlCUVd4TU1rUXNTMEZCUzJkV0xGRkJRVkZETEdsQ1FVRnBRbXBXTEV0QlFVdHhSaXhYUVVGWGJFZ3NTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJUeXhwUWtGQmFVSXNiME5CUVc5RExFTkJRVU4yVml4TFFVRkxkVWNzVDBGQlQzQkpMRWRCUVVkQkxFZEJRVWRETEVWQlFVVlhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVc3dUQ3hWUVVGVkxFbEJRVmN4U2l4SFFVTjJZelpDTEV0QlFVdG5WaXhSUVVGUlpTeGhRVUZoTEZOQlFWTTFXQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJhVXdzVDBGQk9Vc3lSQ3hMUVVGTFoxWXNVVUZCVVVNc2FVSkJRV2xDYWxZc1MwRkJTemhITEZOQlFWTXpTU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZQTEdsQ1FVRnBRaXhyUTBGQmEwTXNRMEZCUTNaV0xFdEJRVXQxUnl4UFFVRlBjRWtzUjBGQlIwRXNSMEZCUjBNc1JVRkJSVmNzVFVGQlRXNUNMRlZCUVZWdFN5eE5RVUZOTlV3c1MwRkJTekJNTEZWQlFWVXNTVUZCVnpGS0xFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVXZENMRmxCUVZrc1UwRkJVemRZTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUVyU3l4UFFVRTFTekpFTEV0QlFVdG5WaXhSUVVGUlF5eHBRa0ZCYVVKcVZpeExRVUZMTWtjc1VVRkJVWGhKTEVsQlFVazJRaXhMUVVGTFoxWXNVVUZCVVU4c2FVSkJRV2xDTEdsRFFVRnBReXhEUVVGRGRsWXNTMEZCUzNWSExFOUJRVTl3U1N4SFFVRkhRU3hIUVVGSFF5eEZRVUZGVnl4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMTUV3c1ZVRkJWU3hKUVVGWE1Vb3NSMEZET1dJMlFpeExRVUZMWjFZc1VVRkJVV2xDTEdOQlFXTXNVMEZCVXpsWUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGdFRDeFBRVUZvVERKRUxFdEJRVXRuVml4UlFVRlJReXhwUWtGQmFVSnFWaXhMUVVGTFNTeFZRVUZWYWtNc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlR5eHBRa0ZCYVVJc2JVTkJRVzFETEVOQlFVTjJWaXhMUVVGTGRVY3NUMEZCVDNCSkxFZEJRVWRCTEVkQlFVZERMRVZCUVVWWExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFZRVUZWTEVsQlFWY3hTaXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZyUWl4alFVRmpMRk5CUVZNdldDeEZRVUZGUXl4RlFVRkZMMElzUjBGQmVVNHNUMEZCY2s0eVJDeExRVUZMWjFZc1VVRkJVVU1zWjBKQlFXZENhbFlzUzBGQlN6aEhMRk5CUVZNelNTeEpRVUZKUVN4RlFVRkZkME1zVlVGQlZWZ3NTMEZCUzJ0VkxFbEJRVWxETEZOQlFWTkRMRk5CUVZOd1ZTeExRVUZMWjFZc1VVRkJVVThzYVVKQlFXbENMRzFEUVVGdFF5eERRVUZEZGxZc1MwRkJTM1ZITEU5QlFVOXdTU3hIUVVGSFFTeEhRVUZIUXl4RlFVRkZWeXhOUVVGTmJrSXNWVUZCVlcxTExFMUJRVTAxVEN4TFFVRkxNRXdzVlVGQlZTeEpRVUZYTVVvc1IwRkROMlUyUWl4TFFVRkxaMVlzVVVGQlVXMUNMR2xDUVVGcFFpeFRRVUZUYUZrc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVzFPTEU5QlFTOU5NRVFzUzBGQlMyZFdMRkZCUVZGRExHZENRVUZuUWpsWExHRkJRV0ZETEVkQlFVYzBRaXhMUVVGTFoxWXNVVUZCVVU4c2FVSkJRV2xDTEhGRFFVRnhReXhEUVVGRGRsWXNTMEZCUzJkV0xGRkJRVkZ2UWl4VFFVRlRhRmtzUjBGQlJ6UkNMRXRCUVV0blZpeFJRVUZSYjBJc1UwRkJVMnBaTEVsQlFVazVRaXhGUVVGRk1FTXNUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1NVRkJWekZLTEVkQlFVYzJRaXhMUVVGTFoxWXNVVUZCVVhGQ0xHRkJRV0VzVTBGQlUyeFpMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnJUU3hQUVVFNVRESkVMRXRCUVV0blZpeFJRVUZSUXl4blFrRkJaMElzYVVKQlFXbENPVmNzUjBGQlIyMVpMRk5CUVZOdVdTeEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlBMR2xDUVVGcFFpeHRSRUZCYlVRc1EwRkJRM0JZTEVkQlFVZERMRVZCUVVWWExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFZRVUZWTEVsQlFWY3hTaXhIUVVNeFpqWkNMRXRCUVV0blZpeFJRVUZSZFVJc09FSkJRVGhDTEZkQlFWY3NTVUZCU1N4SlFVRkpjRmtzUzBGQlMzcENMRTlCUVU5clFpeFZRVUZWYjBNc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVV0NFdDeEZRVUZGTEcxRVFVRnRSRFpDTEV0QlFVdG5WaXhSUVVGUmIwSXNVMEZCVXl4VFFVRlRhbGtzUjBGQlJ5eFBRVUZQUVN4aFFVRmhPRW9zVTBGQlV6bEtMRVZCUVVWeFdTeGhRVUZoY2xrc1JVRkJSVFZDTEUxQlFVMHNiMEpCUVc5Q05FSXNZVUZCWVhwQ0xFOUJRVTk1UWl4RlFVRkZOa3dzV1VGQldYZE5MR0ZCUVdGeVdTeEZRVUZGTmt3c1dVRkJXWHBPTEUxQlFVMUhMRTlCUVU5clFpeFZRVUZWTkVrc1UwRkJVM0pMTEV0QlFVdG5ReXhIUVVGSExFOUJRVTlCTEVWQlFVVXNZMEZCWTBFc1IwRkJSeXhKUVVGSmMxa3NTMEZCU3l4RFFVRkRReXhuUWtGQlowSXNSMEZCUjBNc2JVSkJRVzFDTEdGQlFXRkRMR05CUVdNc1kwRkJZMGdzUzBGQlMwTXNaMEpCUVdkQ1J5eFZRVUZWTEVOQlFVTkRMRk5CUVZNc1JVRkJSVU1zVDBGQlR5eEZRVUZGUXl4TlFVRk5MRVZCUVVWRExFMUJRVTBzUlVGQlJVTXNUMEZCVHl4RlFVRkZReXhOUVVGTkxFVkJRVVZETEZGQlFWRXNSVUZCUlVNc1VVRkJVU3hGUVVGRlF5eExRVUZMTEVWQlFVVkRMRTlCUVU4c1JVRkJSVU1zVFVGQlRTeEhRVUZIUXl4UlFVRlJMRWRCUVVkRExFMUJRVTBzUjBGQlIwTXNUMEZCVHl4SFFVRkhReXhMUVVGTExFZEJRVWRETEZOQlFWTXNSMEZCUjBNc1UwRkJVeXhIUVVGSFF5eFBRVUZQTEVkQlFVZERMRTlCUVU4c1IwRkJSME1zVVVGQlVTeEhRVUZIUXl4UlFVRlJMRWxCUVVsNlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRMRU5CUVVOeVFpeFRRVUZUTEVWQlFVVnpRaXhQUVVGUExFVkJRVVZvUWl4UlFVRlJMRVZCUVVWcFFpeFZRVUZWTEVWQlFVVkRMRmxCUVZrc1JVRkJSVU1zVlVGQlZTeEZRVUZGYkVJc1VVRkJVU3hIUVVOdWVrSmFMRXRCUVV0RExHZENRVUZuUWpoQ0xHOUNRVUZ2UWl4VFFVRlRjbUVzUjBGQlJ5eEpRVUZKUXl4RlFVRkZjVmtzUzBGQlMwTXNaMEpCUVdkQ1J5eFZRVUZWZUdFc1JVRkJSVzloTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZNc1QwRkJUMmhoTEVkQlFVY3NTMEZCUzBNc1JVRkJSU3RaTEUxQlFVMHNTMEZCU3k5WkxFVkJRVVUyV1N4TlFVRk5MRXRCUVVzM1dTeEZRVUZGZFZvc1QwRkJUeXhMUVVGTGRsb3NSVUZCUlRoWkxFOUJRVThzUzBGQlN6bFpMRVZCUVVVeVdpeFBRVUZQTEV0QlFVc3pXaXhGUVVGRk5Gb3NUMEZCVHl4TFFVRkxOVm9zUlVGQlJXdGFMRXRCUVVzc1MwRkJTMnhhTEVWQlFVVjNXaXhMUVVGTExFdEJRVXQ0V2l4RlFVRkZPRm9zVVVGQlVTeFBRVUZQTjJJc1JVRkJSU3RpTEU5QlFVOHNTMEZCUzJoaExFVkJRVVV5V1N4UFFVRlBMRXRCUVVzeldTeEZRVUZGWjFvc1VVRkJVU3hMUVVGTGFGb3NSVUZCUlRCYUxGTkJRVk1zUzBGQlN6RmFMRVZCUVVVMldpeFJRVUZSTEU5QlFVODFZaXhGUVVGRksyRXNVVUZCVVN4TFFVRkxhRm9zUlVGQlJXMWFMRTlCUVU4c1MwRkJTMjVhTEVWQlFVVnhXaXhSUVVGUkxFdEJRVXR5V2l4RlFVRkZjMW9zVFVGQlRTeFBRVUZQY21Jc1JVRkJSV2RqTEZWQlFWVXNTMEZCUzJwaExFVkJRVVUwV1N4TlFVRk5MRXRCUVVzMVdTeEZRVUZGYVZvc1VVRkJVU3hMUVVGTGFsb3NSVUZCUlhsYUxGTkJRVk1zVDBGQlQzaGlMRVZCUVVWbllpeFJRVUZSTEZGQlFWRXNUMEZCVDJoaUxFVkJRVVY1WVN4VlFVTnlaVXdzUzBGQlMwTXNaMEpCUVdkQ0swSXNjMEpCUVhOQ0xFVkJRVVZvUXl4TFFVRkxReXhuUWtGQlowSm5ReXhaUVVGWkxIRkNRVUZ6UW1wRExFdEJRVXRETEdkQ1FVRm5RbWxETEZsQlFWa3NjMEpCUVhWQ2JFTXNTMEZCUzBNc1owSkJRV2RDYTBNc1dVRkJXU3h4UWtGQmMwSnVReXhMUVVGTFF5eG5Ra0ZCWjBKdFF5eFpRVUZaTEU5QlFWTndReXhMUVVGTFF5eG5Ra0ZCWjBKdlF5eFpRVUZaTEhWQ1FVRjNRbkpETEV0QlFVdERMR2RDUVVGblFuRkRMRmxCUVZrc2MwSkJRWFZDZEVNc1MwRkJTME1zWjBKQlFXZENjME1zVlVGQlZTeFJRVUZSZGtNc1MwRkJTME1zWjBKQlFXZENkVU1zVlVGQlZTeFJRVUZSZUVNc1MwRkJTME1zWjBKQlFXZENkME1zVlVGQlZTeFhRVU16WkhwRExFdEJRVXRETEdkQ1FVRm5RbmxETEZWQlFWVXNWMEZCVnpGRExFdEJRVXRETEdkQ1FVRm5RakJETEZWQlFWVXNhVUpCUVdsQ00wTXNTMEZCUzBNc1owSkJRV2RDTWtNc1ZVRkJWU3h0UWtGQmJVSTFReXhMUVVGTFF5eG5Ra0ZCWjBJMFF5eFZRVUZWTEc5Q1FVRnpRamRETEV0QlFVdERMR2RDUVVGblFqWkRMRlZCUVZVc2JVSkJRVzFEZGxvc1MwRkJTM2RhTEUxQlFVMHNSMEZCUjNoYUxFdEJRVXQ1V2l4M1FrRkJkMEo2V2l4TFFVRkxaU3hoUVVGaFppeExRVUZMZDFvc1RVRkJUVVVzZDBKQlFYZENMRXRCUVVzeFdpeExRVUZMV1N4blFrRkJaMEphTEV0QlFVdDNXaXhOUVVGTlJ5eExRVUZMTEZOQlFWTjRZaXhIUVVGSExFOUJRVTlCTEVWQlFVVkJMRVZCUVVWSExFOUJRVThzU1VGQlNUQkNMRXRCUVV0M1dpeE5RVUZOU1N4TFFVRkxOVm9zUzBGQlMzZGFMRTFCUVUxSExFdEJRekZqTTFvc1MwRkJTM2RhTEUxQlFVMTBVaXhSUVVGUmJFa3NTMEZCUzNsYUxEQkNRVUV3UW5wYUxFdEJRVXQzV2l4TlFVRk5SU3g1UWtGQmVVSXpZU3hOUVVGTmJrSXNWVUZCVlhOTExGTkJRVk1zVTBGQlV5OUtMRVZCUVVWRExFVkJRVVV2UWl4SFFVRjFReXhQUVVGd1F6SkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVUxMFdDeEZRVUZGUnl4UlFVRmxVeXhOUVVGTmJrSXNWVUZCVlhOTExGRkJRVkV2VEN4TFFVRkxaME1zUlVGQlJVTXNSVUZCUlM5Q0xFbEJRVWtzVTBGQlV6aENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRTBReXhIUVVGNlEwRXNSVUZCUlN4TlFVRk5RU3hGUVVGRkxFVkJRVVVzUlVGQlJVRXNSVUZCUlhGRUxFdEJRVXRETEVsQlFVa3NSVUZCUlhoQ0xFVkJRVVZITEU5QlFVOXFReXhIUVVGSFFTeEZRVUZMTWtRc1MwRkJTMGNzVTBGQlUyaERMRWRCUVVjc1QwRkJUelpDTEV0QlFVdEhMRk5CUVZNdlFpeEpRVUZKTEVkQlFVZEJMRVZCUVVWRkxFOUJRVTlJTEVWQlFVVXJTaXhSUVVGUk9Vb3NSVUZCUlM5Q0xFbEJRVWtzUlVGQlJTeExRVUZMUVN4RlFVRkZPRUlzUlVGQlJVY3NUMEZCVDJwRExFbEJRVWtzUjBGQlIwRXNTMEZCU3poQ0xFZEJRVWRCTEVWQlFVVTVRaXhMUVVGTEswSXNSVUZCUlN4UFFVRlBMMElzUlVGQlJTeFBRVUZQTEVkQlF6TlpNa1FzUzBGQlMzZGFMRTFCUVUwNVdDeFpRVUZaTVVJc1MwRkJTM2xhTERCQ1FVRXdRbnBhTEV0QlFVdDNXaXhOUVVGTlJTeDVRa0ZCZVVJellTeE5RVUZOYmtJc1ZVRkJWVGhFTEdGQlFXRXNVMEZCVTNaRUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGMVF5eFBRVUZ3UXpKRUxFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFMUJRVTEwV0N4RlFVRkZSeXhSUVVGbFV5eE5RVUZOYmtJc1ZVRkJWVGhFTEZsQlFWbDJSaXhMUVVGTFowTXNSVUZCUlVNc1JVRkJSU3hOUVVGTkwwSXNSVUZCUlRoQ0xFVkJRVVZITEU5QlFVOHNSVUZCUldwRExFbEJRVWtzVTBGQlV6aENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRXdSQ3hIUVVGb1F5eEhRVUYyUWtFc1JVRkJSU3hOUVVGTlFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlR5eEZRVUZGYWtNc1MwRkJVVUVzUlVGQlJYRkVMRXRCUVV0RExFbEJRVWtzUlVGQlJYaENMRVZCUVVWSExFOUJRVTlxUXl4SlFVRlBNa1FzUzBGQlMwY3NVMEZCVTJoRExFZEJRVWNzVDBGQlR6WkNMRXRCUVV0SExGTkJRVk12UWl4SlFVRkpMRWRCUVVkQkxFVkJRVVZGTEU5QlFVOUlMRVZCUVVWMVJDeFpRVUZaZEVRc1JVRkJSUzlDTEVsQlFVa3NSVUZCUlN4TFFVRkxMRWRCUVVkQkxFVkJRVVZCTEVsQlFVa3NSMEZCUjBFc1MwRkJTemhDTEVkQlFVZEJMRVZCUVVVNVFpeExRVUZMSzBJc1JVRkJSU3hQUVVGUEwwSXNSVUZCUlN4UFFVRlBMRWRCUTNSaU1rUXNTMEZCUzNkYUxFMUJRVTAzU0N4UlFVRlJNMUlzUzBGQlMzbGFMREJDUVVFd1FucGFMRXRCUVV0M1dpeE5RVUZOUlN4NVFrRkJlVUl6WVN4TlFVRk5ia0lzVlVGQlZTdFVMRk5CUVZNc1UwRkJVM2hVTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITWtRc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1RVRkJUWFJZTEVWQlFVVkhMRkZCUVZGVExFMUJRVTF1UWl4VlFVRlZLMVFzVVVGQlVYaFdMRXRCUVV0blF5eEZRVUZGUXl4RlFVRkZMMElzU1VGQlNTeFRRVUZUT0VJc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQwTXNSVUZCUlhsQ0xFdEJRVXRITEZOQlFWTm9ReXhIUVVGSFFTeEZRVUZGYVVJc1RVRkJUU3hKUVVGSmFrSXNSVUZCUlVzc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV3RETEVsQlFVbEJMRXRCUVV0RUxFZEJRVWRJTEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGYTBNc1JVRkJSVU1zUjBGQlIwRXNSVUZCUlV3c1NVRkJTVFpDTEV0QlFVdDNXaXhOUVVGTlN5eGhRVUZoTEZOQlFWTXhZaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQwTXNSVUZCUlhsQ0xFdEJRVXRITEZOQlFWTm9ReXhIUVVGSFFTeEZRVUZGYVVJc1RVRkJUU3hKUVVGSmFrSXNSVUZCUlN4TlFVRk5OMElzUlVGQlJTeEhRVUZIUVN4SlFVRkpRU3hGUVVGRlFTeExRVUZMYVVNc1IwRkJSMGdzUlVGQlJXcERMRXRCUVV0RkxFVkJRVVZyUXl4RlFVRkZha01zUjBGQlIwRXNSVUZCUlRaQ0xFbEJRM0ppTmtJc1MwRkJTM2RhTEUxQlFVMDFTQ3hQUVVGUE5WSXNTMEZCUzNsYUxEQkNRVUV3UW5wYUxFdEJRVXQzV2l4TlFVRk5SU3g1UWtGQmVVSXpZU3hOUVVGTmJrSXNWVUZCVldkVkxGRkJRVkVzVTBGQlUzcFVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRjFReXhQUVVGd1F6SkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVUxMFdDeEZRVUZGUnl4UlFVRmxVeXhOUVVGTmJrSXNWVUZCVldkVkxFOUJRVTk2Vml4TFFVRkxaME1zUlVGQlJVTXNSVUZCUlM5Q0xFbEJRVWtzVTBGQlV6aENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlETEVWQlFVVXNSMEZCUjBNc1JVRkJSU3hGUVVGRmNVSXNSVUZCUlVjc1MwRkJTMGNzVTBGQlUyaERMRWRCUVVkQkxFVkJRVVZwUWl4TlFVRk5MRWxCUVVscVFpeEZRVUZGZVU0c1JVRkJSU3hGUVVGRlFTeEZRVUZGZEZBc1JVRkJSWE5RTEVsQlFVa3NSMEZCUjBFc1MwRkJTeTlNTEVWQlFVVXNRMEZCUXl4SlFVRkpkVkVzUlVGQlJYWlJMRVZCUVVVclRDeEhRVUZIZUU0c1JVRkJSV3BETEV0QlFVdEZMRVZCUVVVclZDeEZRVUZGZUVVc1JVRkJSWHBPTEV0QlFVdEpMRVZCUVVWRExFdEJRVXMwVWl4SFFVRkhMRTlCUVU4M1VpeEhRVU01Vm5sQ0xFdEJRVXQzV2l4TlFVRk5kRTRzU1VGQlNXeE5MRXRCUVV0NVdpd3dRa0ZCTUVKNldpeExRVUZMZDFvc1RVRkJUVVVzZVVKQlFYbENNMkVzVFVGQlRXNUNMRlZCUVZWelR5eExRVUZMTEZOQlFWTXZUaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJkVU1zVDBGQmNFTXlSQ3hMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhOUVVGTmRGZ3NSVUZCUlVjc1VVRkJaVk1zVFVGQlRXNUNMRlZCUVZWelR5eEpRVUZKTDFBc1MwRkJTMmRETEVWQlFVVkRMRVZCUVVVdlFpeEpRVUZKTEZOQlFWTTRRaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSkxFbEJRVWxETEVWQlFVVTJRaXhGUVVGRlJ5eFBRVUZQUXl4RlFVRkZVU3hOUVVGTmVrTXNSMEZCUjJ0RExFVkJRVVYzUWl4TFFVRkxSeXhUUVVGVGFFTXNSMEZCUjBFc1JVRkJSV2xDTEUxQlFVMHNTVUZCU1dwQ0xFVkJRVVV3UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVYyUkN4RlFVRkZkVVFzU1VGQlNVRXNTMEZCUzNKQ0xFbEJRVWxFTEVWQlFVVnpRaXhIUVVGSGVrSXNSVUZCUldwRExFdEJRVXRGTEVWQlFVVnRReXhGUVVGRmNVSXNSMEZCUjBFc1JVRkJSVEZDTEVsQlFVa3NUMEZCVDBrc1IwRkRkbFY1UWl4TFFVRkxkMW9zVFVGQlRVMHNUMEZCVHpsYUxFdEJRVXQ1V2l3d1FrRkJNRUo2V2l4TFFVRkxkMW9zVFVGQlRVVXNlVUpCUVhsQ00yRXNUVUZCVFc1Q0xGVkJRVlZyWXl4UlFVRlJMRk5CUVZNellpeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCTmtRc1QwRkJNVVF3UkN4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4TlFVRk5kRmdzUlVGQlJVY3NVVUZCVVdoRExFbEJRVWs0UWl4RlFVRkZORUlzUzBGQlMzaERMRXRCUVV0WkxFVkJRVVU1UWl4SlFVRlhlVU1zVFVGQlRXNUNMRlZCUVZWcll5eFBRVUZQTTJRc1MwRkJTMmRETEVWQlFVVkRMRVZCUVVVdlFpeEpRVUZKTEZOQlFWTTRRaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKYVVNc1JVRkJSV3hETEVWQlFUSkVMRTlCUVhwRU1rUXNTMEZCUzNkYUxFMUJRVTAzU0N4UlFVRlJlRlFzUjBGQlJTeFRRVUZUT1VJc1JVRkJSWGRFTEVkQlFVZDBRaXhGUVVGRlNDeEZRVUZGYWtNc1MwRkJTMGNzUlVGQlJXbERMRVZCUVVWc1F5eEZRVUZGZDBRc1JVRkJSVEZDTEUxQlFWbEpMRWRCUXpsVWVVSXNTMEZCUzNkYUxFMUJRVTFQTEZsQlFWa3ZXaXhMUVVGTGVWb3NNRUpCUVRCQ2Vsb3NTMEZCUzNkYUxFMUJRVTFGTEhsQ1FVRjVRak5oTEUxQlFVMXVRaXhWUVVGVmJXTXNZVUZCWVN4VFFVRlROV0lzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFUQkdMRTlCUVhaR01FUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNUVUZCVFhSWUxFVkJRVVZITEZGQlFWRXdRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhOUVVGTmNsZ3NSMEZCUnpsQ0xFbEJRVWs0UWl4RlFVRkZORUlzUzBGQlMzaERMRXRCUVV0WkxFVkJRVVU1UWl4SlFVRlhlVU1zVFVGQlRXNUNMRlZCUVZWdFl5eFpRVUZaTldRc1MwRkJTMmRETEVWQlFVVkRMRVZCUVVVdlFpeEpRVUZKTEZOQlFWTTRRaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKYVVNc1JVRkJSV3hETEVWQlFXZEZMRTlCUVRsRU1rUXNTMEZCUzNkYUxFMUJRVTFMTEdGQlFXRXhZaXhIUVVGRkxGTkJRVk01UWl4RlFVRkZkMFFzUjBGQlIzUkNMRVZCUVVWSUxFVkJRVVZxUXl4TFFVRkxSeXhGUVVGRmFVTXNSVUZCUld4RExFVkJRVVYzUkN4RlFVRkZNVUlzVFVGQldVa3NSMEZETDFkNVFpeExRVUZMZDFvc1RVRkJUVE5JTEV0QlFVczNVaXhMUVVGTGVWb3NNRUpCUVRCQ2Vsb3NTMEZCUzNkYUxFMUJRVTFGTEhsQ1FVRjVRak5oTEUxQlFVMXVRaXhWUVVGVmFWVXNUVUZCVFN4VFFVRlRNVlFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRWFZETEU5QlFYQkRNa1FzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzVFVGQlRYUllMRVZCUVVWSExGRkJRV1ZUTEUxQlFVMXVRaXhWUVVGVmFWVXNTMEZCU3pGV0xFdEJRVXRuUXl4RlFVRkZReXhGUVVGRkwwSXNTVUZCU1N4VFFVRlRPRUlzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzU1VGQlNTeEpRVUZKUXl4RlFVRkZOa0lzUlVGQlJVY3NUMEZCVDBNc1JVRkJSWGxDTEV0QlFVdEhMRk5CUVZOb1F5eEhRVUZIUVN4RlFVRkZhVUlzVFVGQlRTeEpRVUZKYWtJc1JVRkJSVXNzUlVGQlJTeEZRVUZGUVN4RlFVRkZiRU1zUlVGQlJXdERMRWxCUVVrc1IwRkJSMEVzUzBGQlMwUXNSMEZCUjBnc1JVRkJSV3BETEV0QlFVdEZMRVZCUVVWclF5eEZRVUZGUXl4SFFVRkhRU3hGUVVGRlRDeEhRVUZITEU5QlFVMHNSVUZCUnl4UFFVRk5MRWRCUTI1Vk5rSXNTMEZCUzNkYUxFMUJRVTB4U0N4TlFVRk5PVklzUzBGQlMzbGFMREJDUVVFd1FucGFMRXRCUVV0M1dpeE5RVUZOUlN4NVFrRkJlVUl6WVN4TlFVRk5ia0lzVlVGQlZXdFZMRTlCUVU4c1UwRkJVek5VTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUYxUXl4UFFVRndRekpFTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEUxQlFVMTBXQ3hGUVVGRlJ5eFJRVUZsVXl4TlFVRk5ia0lzVlVGQlZXdFZMRTFCUVUwelZpeExRVUZMWjBNc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVVrc1UwRkJVemhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5RExFVkJRVVY1UWl4TFFVRkxSeXhUUVVGVGFFTXNSMEZCUjBFc1JVRkJSV2xDTEUxQlFVMHNTVUZCU1dwQ0xFVkJRVVZMTEVWQlFVVXNSVUZCUlVFc1JVRkJSV3hETEVWQlFVVnJReXhKUVVGSkxFZEJRVWRCTEV0QlFVdEVMRWxCUVVsSUxFVkJRVVZxUXl4TFFVRkxSU3hGUVVGRmEwTXNSVUZCUlVNc1IwRkJSMEVzUlVGQlJVd3NSMEZCUnl4UFFVRk5MRVZCUVVjc1QwRkJUU3hIUVVGSk5rSXNTMEZCUzNkYUxFMUJRVTFSTEUxQlFVMHNVMEZCVXpkaUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWxETEVWQlFVVXNSVUZCWjBVc1QwRkJPVVF3UkN4TFFVRkxkMW9zVFVGQlRUZElMRkZCUVZGNFZDeEhRVUZGTEZOQlFWTkJMRVZCUVVWTExFVkJRVVZ4UWl4SFFVRkhla0lzUlVGQlJXcERMRXRCUVV0RkxFVkJRVVU0UWl4RlFVRkZTeXhGUVVGRmNVSXNUVUZCVFhaRUxFbEJRVWRFTEVkQlFWVkRMRWRCUTNwaU1FUXNTMEZCUzNkYUxFMUJRVTFUTEV0QlFVc3NVMEZCVXpsaUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGcFF5eFBRVUZQTEVkQlFYSkRLMElzUlVGQlJUUkNMRXRCUVV0M1dpeE5RVUZOVlN4VlFVRlZMMklzUlVGQlJVTXNSVUZCUlM5Q0xFbEJRV01zUzBGQlN6SkVMRXRCUVV0SExGTkJRVk5vUXl4SFFVRkhRU3hGUVVGRkswc3NUMEZCVHpsTExFZEJRVWRFTEVWQlFVVkRMRWxCUVVrMFFpeExRVUZMZDFvc1RVRkJUVlVzVlVGQlZTeFRRVUZUTDJJc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQwTXNSVUZCUlhsQ0xFdEJRVXRITEZOQlFWTm9ReXhIUVVGSFFTeEZRVUZGYVVJc1RVRkJUU3hKUVVGSmFrSXNSVUZCUlVzc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV3RETEVsQlFVa3NSMEZCUjBFc1MwRkJTMFFzUjBGQlIwZ3NSVUZCUldwRExFdEJRVXRGTEVWQlFVVnJReXhGUVVGRlF5eEhRVUZIUVN4RlFVRkZUQ3hIUVVGSExFOUJRVTlMTEVWQlFVVXNUMEZCVHl4SFFVRkhkMElzUzBGQlMzZGFMRTFCUVUxWExGVkJRVlVzVTBGQlUyaGpMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnpReXhQUVVGUExFZEJRVEZESzBJc1JVRkJSVFJDTEV0QlFVdDNXaXhOUVVGTldTeGxRVUZsYW1Nc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVdNc1MwRkJTekpFTEV0QlFVdEhMRk5CUVZOb1F5eEhRVUZIUVN4RlFVRkZLMHNzVDBGQlR6bExMRWRCUVVkRUxFVkJRVVZETEVsQlF6bFlORUlzUzBGQlMzZGFMRTFCUVUxWkxHVkJRV1VzVTBGQlUycGpMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVVsRExFVkJRVVUyUWl4RlFVRkZSeXhQUVVGUFF5eEZRVUZGZVVJc1MwRkJTMGNzVTBGQlUyaERMRWRCUVVkQkxFVkJRVVZwUWl4TlFVRk5MRWxCUVVscVFpeEZRVUZGTEUxQlFVMDNRaXhGUVVGRkxFZEJRVWRCTEVWQlFVVkJMRWxCUVVrc1IwRkJSMEVzUzBGQlMybERMRWRCUVVkSUxFVkJRVVZxUXl4TFFVRkxSU3hGUVVGRmEwTXNSVUZCUldwRExFZEJRVWRCTEVWQlFVVTJRaXhIUVVGSExFOUJRVTgzUWl4RlFVRkZMRTlCUVU4c1IwRkJSekJFTEV0QlFVdDNXaXhOUVVGTmRFZ3NVMEZCVXl4VFFVRlRMMVFzUlVGQlJVTXNSMEZCUnl4UFFVRlBMRWRCUVVjMFFpeExRVUZMZDFvc1RVRkJUWFJTTEZGQlFWRXZTaXhGUVVGRlF5eEpRVUZKTkVJc1MwRkJTM2RhTEUxQlFVMDVSeXhSUVVGUkxGTkJRVk4yVlN4SFFVRkhMRTlCUVU4c1IwRkJSMEVzUlVGQlJVY3NVVUZCVVRCQ0xFdEJRVXQzV2l4TlFVRk5OMGNzVFVGQlRTeFRRVUZUZUZVc1IwRkJSeXhKUVVGSk5rSXNTMEZCU3pKSExGRkJRVkY0U1N4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJVUXNSVUZCUlVjc1QwRkJUeXhGUVVGRkxFZEJRVWRHTEVWQlFVVkJMRmRCUVZkRUxFVkJRVVZETEVkQlFVZEVMRVZCUVVWSExFOUJRVThzUjBGQlJ6QkNMRXRCUVV0M1dpeE5RVUZOWVN4UFFVRlBMRk5CUVZOc1l5eEZRVUZGUXl4SFFVRkhORUlzUzBGQlMzZGFMRTFCUVUxMFNDeFRRVUZUTDFRc1JVRkJSVU1zU1VGQlNVUXNSVUZCUldsTExFdEJRVXRvU3l4SlFVTTFZalJDTEV0QlFVdDNXaXhOUVVGTll5eFRRVUZUTEZOQlFWTnVZeXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSekpFTEV0QlFVdDNXaXhOUVVGTkwxUXNUMEZCVDNSSUxFVkJRVVU1UWl4RlFVRkZMRVZCUVVVclFpeEpRVUZKTkVJc1MwRkJTM2RhTEUxQlFVMWxMR05CUVdNc1UwRkJVM0JqTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITWtRc1MwRkJTMjFKTEZGQlFWRnVTU3hMUVVGTGQxb3NUVUZCVFM5VUxFOUJRVTkwU0N4RlFVRkZPVUlzUlVGQlJTeEhRVUZIZFV3c1RVRkJUU3hMUVVGTGVFb3NTVUZCU1RSQ0xFdEJRVXQzV2l4TlFVRk5aMElzWVVGQllTeFRRVUZUY21Nc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeEhRVUZIZFV3c1ZVRkJWWFpLTEZGQlFWRXNSMEZCUjJoRExFVkJRVVV3UkN4TFFVRkxkMW9zVFVGQlRYUlNMRkZCUVZFdlNpeEZRVUZGT1VJc1NVRkJTVGhDTEVWQlFVVnBTeXhMUVVGTGFFc3NSMEZCUnpSQ0xFdEJRVXQzV2l4TlFVRk5ZeXhUUVVGVGJtTXNSVUZCUlVNc1JVRkJSVGxDTEVsQlFVa3dSQ3hMUVVGTGQxb3NUVUZCVFRWSExFOUJRVThzVTBGQlUzcFZMRVZCUVVWRExFZEJRVFpDTEVsQlFVa3ZRaXhGUVVGeFF5eFBRVUZzUTBFc1JVRkJSU3hKUVVGdVF5dENMRVZCUVVVMFFpeExRVUZMZDFvc1RVRkJUWFJTTEZGQlFWRXZTaXhGUVVGRlF5eE5RVUZ0UWpSQ0xFdEJRVXQzV2l4TlFVRk5hVUlzVTBGQlUzUmpMRVZCUVVWRExFZEJRVlV2UWl4SFFVTXZXVEpFTEV0QlFVdDNXaXhOUVVGTmEwSXNWMEZCVnl4VFFVRlRkbU1zUlVGQlJVTXNSMEZCYVVNc1QwRkJUeXhKUVVGeVEwRXNSVUZCUlRSQ0xFdEJRVXQzV2l4TlFVRk5PVmdzV1VGQldYWkVMRVZCUVVWRExFMUJRV2RDTkVJc1MwRkJTM2RhTEUxQlFVMXBRaXhUUVVGVGRHTXNSVUZCUlVNc1NVRkJSeXhKUVVGUk5FSXNTMEZCUzNkYUxFMUJRVTFwUWl4VFFVRlRMRk5CUVZOMFl5eEZRVUZGUXl4SFFVRjFReXhQUVVGd1F6UkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVUxMFdDeEZRVUZGUnl4UlFVRmxMRWRCUVVkVExFMUJRVTF1UWl4VlFVRlZOa2dzVDBGQlQzUktMRXRCUVV0blF5eEZRVUZGUXl4RlFVRkZMRWRCUVVkRkxGRkJRVkV3UWl4TFFVRkxkMW9zVFVGQlRXMUNMRk5CUVZNc1UwRkJVM2hqTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZwUXl4UFFVRlBMRWxCUVhKREswSXNSVUZCUlRSQ0xFdEJRVXQzV2l4TlFVRk5WU3hWUVVGVkwySXNSVUZCUlVNc1JVRkJSUzlDTEUxQlFXZENNa1FzUzBGQlMzZGFMRTFCUVUxcFFpeFRRVUZUZEdNc1JVRkJSVU1zU1VGQlJ5eEpRVUZSTkVJc1MwRkJTM2RhTEUxQlFVMXZRaXhaUVVGWkxGTkJRVk42WXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFVkJRVEpHTEU5QlFYcEdNRVFzUzBGQlMzZGFMRTFCUVUxTExHRkJRV0V4WWl4SFFVRkZMRk5CUVZOSkxFVkJRVVZETEVkQlFVZEtMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZhME1zUlVGQlJVTXNSVUZCUlV3c1NVRkJTVFpDTEV0QlFVdDNXaXhOUVVGTmFVSXNVMEZCVTNSakxFVkJRVVZMTEVsQlFVbHNReXhQUVVGaFFTeEhRVU14WlRCRUxFdEJRVXQzV2l4TlFVRk5OMHdzVDBGQlR5eFRRVUZUZUZBc1IwRkJSeXhQUVVGUFdTeE5RVUZOYmtJc1ZVRkJWU3RRTEU5QlFVOHZSaXhOUVVGTkxFZEJRVWRETEZsQlFWazNTQ3hMUVVGTGQxb3NUVUZCVFRsVUxFdEJRVXNzVTBGQlUzWklMRWRCUVVjc1QwRkJUMWtzVFVGQlRXNUNMRlZCUVZVclVDeFBRVUZQTDBZc1RVRkJUU3hIUVVGSFF5eFpRVUZaTjBnc1MwRkJTM2RhTEUxQlFVMXhRaXhSUVVGUkxGTkJRVk14WXl4SFFVRkhMRWxCUVVsRExFVkJRVVZFTEVWQlFVVkhMRTlCUVU4c1IwRkJSeXhGUVVGRlJpeEZRVUZGTEVOQlFVTXNTVUZCU1N4SlFVRkpMMElzUlVGQlJUQkRMRTFCUVUxWUxFZEJRVWM1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZPVUlzU1VGQlNVUXNSVUZCUlVNc1IwRkJSelpDTEVWQlFVVTNRaXhIUVVGSExFOUJRVTlFTEVWQlFVVXNUVUZCVFN4SlFVRkpNa1FzUzBGQlMzZGFMRTFCUVUwNVVpeE5RVUZOTVVnc1MwRkJTM2RhTEUxQlFVMXhRaXhSUVVGUk4yRXNTMEZCUzNkYUxFMUJRVTF1Unl4UFFVRlBMRk5CUVZOc1ZpeEZRVUZGUXl4SFFVRkhMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSWGRNTEZWQlFWVjJTaXhQUVVGUGFrTXNTVUZCU1N4RFFVRkRMRWxCUVVsRExFVkJRVVYxVEN4VlFVRlZlRXdzUjBGQlJ5eEhRVUZITWtRc1MwRkJTelJITEZsQlFWbDBTeXhIUVVGSExFTkJRVU1zU1VGQlNXbERMRVZCUVVWS0xFVkJRVVZITEZGQlFWRXNSVUZCUlVVc1JVRkJSV3hETEVWQlFVVm5ReXhSUVVGUkxFVkJRVVZJTEVWQlFVVkhMRTlCUVU5RExFVkJRVVZETEVWQlFVVXNTVUZCU1N4SlFVRkpjVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZja0lzUlVGQlJYRkNMRWxCUVVreFFpeEZRVUZGU1N4RlFVRkZjMElzUjBGQlIzWkVMRVZCUVVWMVJDeFJRVUZSTVVJc1JVRkJSV2xMTEV0QlFVczVUQ3hMUVVNNVpqQkVMRXRCUVV0M1dpeE5RVUZOTDFRc1QwRkJUeXhUUVVGVGRFZ3NSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVhWRExFOUJRWEJETUVRc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1RVRkJUWFJZTEVWQlFVVkhMRkZCUVdWVExFMUJRVTF1UWl4VlFVRlZOa2dzVDBGQlQyMURMRTFCUVUxNlNpeEZRVUZGTmtJc1MwRkJTM2RhTEUxQlFVMTZVaXhOUVVGTlJpeFZRVUZWTEV0QlFVczNTQ3hMUVVGTGQxb3NUVUZCVFhwU0xFMUJRVTBzVTBGQlV6VktMRVZCUVVWRExFVkJRVVV2UWl4SFFVRjFReXhQUVVGd1F6SkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVUxMFdDeEZRVUZGUnl4UlFVRmxMRWRCUVVkMVNpeFZRVUZWZGtvc1QwRkJUMU1zVFVGQlRXNUNMRlZCUVZWdFN5eE5RVUZOTlV3c1MwRkJTMmRETEVWQlFVVkRMRWRCUVVkWExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVV0blF5eEZRVUZGUXl4RlFVRkZMMElzU1VGRE4xTXlSQ3hMUVVGTGQxb3NUVUZCVFhOQ0xHbENRVUZwUWl4VFFVRlRNMk1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNyUWl4RlFVRkZRU3hIUVVGSFJDeEZRVUZGTEVsQlFVazNRaXhGUVVGRkxGTkJRVk0yUWl4SFFVRkhMRTlCUVU4MlFpeExRVUZMT0Vjc1UwRkJVek5KTEVkQlFVY3NTVUZCU1RaQ0xFdEJRVXRuU0N4UFFVRlBOMGtzVjBGQlYwRXNSMEZCUnl0TExFOUJRVThzUjBGQlJ5OUxMRWRCUVVjNVFpeEZRVUZGUVN4SFFVRkhReXhGUVVGRlFTeEZRVUZGTEVkQlFVY3NTVUZCU1N4SlFVRkphVU1zUlVGQlJTeEZRVUZGUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZNTEVWQlFVVkhMRkZCUVZFc1EwRkJReXhKUVVGSmRVSXNSVUZCUlRGQ0xFVkJRVVZMTEV0QlFVdHZUaXhGUVVGRmRsQXNSVUZCUlhkRUxFZEJRVWR1UkN4UFFVRlBhMElzVlVGQlZVTXNaVUZCWlRGQ0xFdEJRVXRITEVWQlFVVnpVQ3hMUVVGTGRGQXNSVUZCUlhOUUxFbEJRVWNzUlVGQlIzaE9MRVZCUVVWSExFdEJRVXR6UWl4SFFVRkhla0lzUlVGQlJVVXNUMEZCVDBNc1IwRkJSM2xDTEV0QlFVdDNXaXhOUVVGTmRVSXNZVUZCWVN4VFFVRlROV01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVDBGQlR6SkVMRXRCUVV0M1dpeE5RVUZOZDBJc1kwRkJZemRqTEVWQlFVVTVRaXhIUVVGSE1rUXNTMEZCUzNkYUxFMUJRVTE1UWl4blFrRkJaU3hGUVVGSE4yTXNTVUZCU1RSQ0xFdEJRVXQzV2l4TlFVRk5NRUlzWVVGQllTeFRRVUZUTDJNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUekpFTEV0QlFVdDNXaXhOUVVGTmQwSXNZMEZCWXpkakxFVkJRVVZETEVkQlFVVXNUMEZCUnl4RlFVRlBMMElzU1VGRGJtUXlSQ3hMUVVGTGQxb3NUVUZCVFhkQ0xHTkJRV01zVTBGQlV6ZGpMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSMEZCUnl4SlFVRkpMRWxCUVcxQ2NVNHNSVUZCWm5CT0xFVkJRVVVzUlVGQlJYRkNMRVZCUVVVeFFpeEZRVUZGUnl4UFFVRlRSU3hGUVVGRmNVSXNSMEZCUnl4RFFVRkRMRWxCUVVsMVVTeEZRVUZGTlZJc1JVRkJSWEZDTEVkQlFVY3NSVUZCVFRWRUxFVkJRVVZKTEVWQlFVVXJRaXhGUVVGRmFrTXNTMEZCUzI5RExFVkJRVVZLTEVWQlFVVnBVeXhIUVVGSFFTeEZRVUZGYWxNc1IwRkJSME1zUlVGQlJUbENMRVZCUVVVMlFpeEZRVUZGYVZNc1NVRkJTU3hGUVVGRmJsVXNSVUZCUlhWRExFVkJRVVUwVWl4RlFVRkZMRWRCUVVkMlVTeEZRVUZGZFZFc1JVRkJSWGhGTEVkQlFVY3pVQ3hIUVVGSExFOUJRVTh5VUN4RlFVRkZjRTRzUjBGQlIwRXNSMEZCUjNkQ0xFdEJRVXQzV2l4TlFVRk5Na0lzUzBGQlN5eFRRVUZUYUdRc1JVRkJSVU1zUjBGQlIwUXNSVUZCUldka0xFdEJRVXN2WXl4SFFVRkhORUlzUzBGQlMzZGFMRTFCUVUxNVFpeHBRa0ZCYVVKcVlpeExRVUZMZDFvc1RVRkJUVFJDTEZkQlFWY3NVMEZCVTJwa0xFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkpMMElzUlVGQlJUQkRMRTFCUVUxYUxFVkJRVVZITEZGQlFWRm9ReXhGUVVGRkxFVkJRVVZCTEVWQlFVVTJRaXhGUVVGRlJ5eFBRVUZQYUVNc1NVRkJTVVFzUlVGQlJVTXNSMEZCUnl4RFFVRkRLMlVzVFVGQlRTOWxMRVZCUVVWWExFMUJRVTFyUWl4RlFVRkZOMElzU1VGQlNTeEpRVUZKYVVNc1JVRkJSVWdzUjBGQlJ6UkNMRXRCUVV0M1dpeE5RVUZOZVVJc1pVRkJORVlzU1VGQk4wVnFZaXhMUVVGTGQxb3NUVUZCVFRKQ0xFdEJRVXM1WlN4SFFVRkZMRk5CUVZNNFFpeEZRVUZGUXl4SFFVRkhMRTlCUVU5SExFVkJRVVZLTEVWQlFVVnNRaXhOUVVGTmJVSXNSVUZCUlc1Q0xGRkJRVkZyUWl4RlFVRkZhMlFzVFVGQlRXcGtMRVZCUVVWcFpDeFRRVUZaTDJVc1JVRkJSU3hGUVVGRlFTeEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQyaERMRWxCUVVrMlFpeEZRVUZGTjBJc1IwRkJSMFFzUlVGQlJVTXNSMEZCUjFjc1QwRkRiR1VyUXl4TFFVRkxkMW9zVFVGQlRUaENMRlZCUVZVc1UwRkJVMjVrTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVbERMRVZCUVVWRUxFZEJRVWN5UkN4TFFVRkxkMW9zVFVGQlRYbENMR1ZCUVdWcVlpeExRVUZMZDFvc1RVRkJUVEpDTEV0QlFVdG9aQ3hIUVVGRkxGTkJRVk5CTEVWQlFVVTVRaXhIUVVGSExFOUJRVTlETEVWQlFVVTRRaXhGUVVGRlJDeEhRVUZIUXl4RlFVRkZMMElzVVVGQlR6SkVMRXRCUVV0M1dpeE5RVUZOSzBJc2FVSkJRV2xDTEZOQlFWTndaQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSekpFTEV0QlFVdDNXaXhOUVVGTk9FSXNWVUZCVlc1a0xFZEJRVVVzVTBGQlUwRXNSMEZCUnl4UFFVRlBRU3hGUVVGRlF5eExRVUZKTDBJc1NVRkJTVEpFTEV0QlFVdDNXaXhOUVVGTlowTXNVMEZCVXl4VFFVRlRjbVFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNyUWl4RlFVRkZRU3hIUVVGSE5FSXNTMEZCUzNkYUxFMUJRVTE1UWl4bFFVRmxMRWxCUVVrc1NVRkJTVE5sTEVWQlFVVXNSVUZCUlVFc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5b1F5eEpRVUZKTEVOQlFVTXNTVUZCU1dsRExFVkJRVVZJTEVWQlFVVkVMRVZCUVVVM1FpeEZRVUZGTEVkQlFVYzJRaXhGUVVGRk4wSXNTVUZCU1N4SFFVRkhMRVZCUVVWcFF5eEhRVUZITEVkQlFVZEJMRWRCUVVkc1F5eEZRVUZGTEU5QlFVMHNSVUZCUnl4UFFVRk5MRWRCUTJ4WU1rUXNTMEZCUzNkYUxFMUJRVTEyUnl4UFFVRlBMRk5CUVZNNVZTeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKTWtRc1MwRkJTelJITEZsQlFWbDZTU3hMUVVGTE5rSXNTMEZCU3pSSExGbEJRVmw0U1N4SlFVRkpSQ3hGUVVGRlJ5eFJRVUZSUml4RlFVRkZSU3hQUVVGUExFOUJRVTBzUlVGQlJ5eEpRVUZKYUVNc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5cVF5eEZRVUZGUVN4SFFVRkhNa1FzUzBGQlMzZGFMRTFCUVUxcFF5eDFRa0ZCZFVJc1NVRkJTU3hKUVVGSmJHUXNSVUZCUlN4RlFVRkZRU3hGUVVGRmFrTXNSVUZCUldsRExFbEJRVWtzU1VGQlNXeERMRVZCUVVVNFFpeEZRVUZGU1N4SFFVRkhTQ3hGUVVGRlJ5eEpRVUZKTEU5QlFVMHNSVUZCUnl4UFFVRk5MRWRCUVVsNVFpeExRVUZMZDFvc1RVRkJUV3RETEZOQlFWTXNVMEZCVTNaa0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSFFTeEZRVUZGUVN4SFFVRkhNa1FzUzBGQlMzZGFMRTFCUVUxNVFpeGxRVUZsTEVsQlFVa3NTVUZCU1RObExFVkJRVVZ2UkN4TFFVRkxSU3hKUVVGSmVrSXNSVUZCUlVjc1QwRkJUMFlzUlVGQlJVVXNVVUZCVVVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGYWtNc1JVRkJSV2xETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRmJrTXNSVUZCUlRoQ0xFVkJRVVZKTEVkQlFVZElMRVZCUVVWSExFbEJRVWtzUjBGQlJ5eEhRVUZIUXl4RlFVRkZMRTlCUVU5QkxFVkJRVVVzVDBGQlQzZENMRXRCUVV0M1dpeE5RVUZOZVVJc1pVRkJaVGxqTEVWQlFVVkhMRTlCUVU5R0xFVkJRVVZGTEZOQlFWTXdRaXhMUVVGTGQxb3NUVUZCVFhsQ0xHVkJRV1VzVTBGQlV6bGpMRVZCUVVWRExFZEJRVWNzVDBGQlQwUXNSVUZCUlVNc1JVRkJSU3hGUVVGRlJDeEZRVUZGUXl4SFFVRkhMRVZCUVVVc1IwRkRkR1UwUWl4TFFVRkxkMW9zVFVGQlRXMURMSE5DUVVGelFpeFRRVUZUZUdRc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTM2RhTEUxQlFVMTVRaXhsUVVGbE9XTXNSVUZCUlVNc1NVRkJTVFJDTEV0QlFVdDNXaXhOUVVGTmFVTXNkVUpCUVhWQ0xGTkJRVk4wWkN4RlFVRkZReXhIUVVGSExFOUJRVTlFTEVsQlFVbERMRWRCUVVjMFFpeExRVUZMZDFvc1RVRkJUVzlETEdGQlFXRXNVMEZCVTNwa0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGdlF5eFBRVUZQTEVkQlFYaERRU3hGUVVGRk1rUXNTMEZCUzNkYUxFMUJRVTExUWl4aFFVRmhOV01zUlVGQlJVTXNSVUZCUlM5Q0xFMUJRV1V5UkN4TFFVRkxkMW9zVFVGQlRXTXNVMEZCVTI1akxFVkJRVVZETEVsQlFVa3ZRaXhGUVVGRkxFdEJRVWtzU1VGQlVUSkVMRXRCUVV0M1dpeE5RVUZOY1VNc1lVRkJZU3hUUVVGVE1XUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFXOURMRTlCUVU4c1NVRkJlRU1yUWl4RlFVRkZORUlzUzBGQlMzZGFMRTFCUVUxMVFpeGhRVUZoTldNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVdVeVJDeExRVUZMZDFvc1RVRkJUV2xDTEZOQlFWTjBZeXhGUVVGRlF5eEpRVU0xV0RSQ0xFdEJRVXQzV2l4TlFVRk5jME1zVDBGQlR5eFRRVUZUTTJRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTEVkQlFVZHBReXhGUVVGRkxFVkJRVVZCTEVWQlFVVktMRVZCUVVWSExFOUJRVTlETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRlRDeEZRVUZGU1N4SFFVRkhjMElzUlVGQlJYcENMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZiVU1zUlVGQlJVUXNSVUZCUlVvc1IwRkJSelpDTEV0QlFVdEZMRTFCUVUxTUxFdEJRVXQyUkN4RlFVRkZkVVFzUzBGQlMzWkVMRVZCUVVWMVJDeEhRVUZITEV0QlFVdDFTU3hMUVVGTE5Vb3NSMEZCUnl4UFFVRlBiRU1zUjBGQlJ6QkVMRXRCUVV0M1dpeE5RVUZOZFVNc1UwRkJVeXhUUVVGVE5XUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hIUVVFMlJDeFBRVUV4UkRCRUxFdEJRVXQzV2l4TlFVRk5OMGdzVVVGQlVYaFVMRWRCUVVVc1UwRkJVMGtzUlVGQlJVTXNSMEZCUjJ4RExFVkJRVVU0UWl4RlFVRkZha01zUzBGQlMwVXNSVUZCUld0RExFVkJRVVZETEVWQlFVVk1MRWxCUVVsSkxFdEJRVmRxUXl4SFFVRkhNRVFzUzBGQlMzZGFMRTFCUVUxM1F5eE5RVUZOTEZOQlFWTTNaQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSlF5eEZRVUZGTEVkQlFVZHBReXhGUVVGRkxFVkJRVVZETEVWQlFVVk1MRVZCUVN0Q0xGRkJRWFJDTEVsQlFWTkRMRWxCUVVsSExFVkJRVVZLTEVWQlFVVkxMRVZCUVVWS0xFZEJRVTBzUjBGQmFFTXZRaXhGUVVGRlFTeEhRVUZITEVsQlFXZERiVU1zUlVGQlJVUXNSMEZCUnl4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRmJFTXNSVUZCUlN4SlFVRkpPRUlzUlVGQlJVa3NSVUZCUlVvc1JVRkJSVXNzUlVGQlJVd3NSMEZCUnpsQ0xFVkJRVVZETEVWQlFVVTRUQ3hMUVVGTGFrc3NVVUZCVVN4SlFVRkpRU3hGUVVGRlNTeEZRVUZGU2l4RlFVRkZTeXhGUVVGRlRDeEhRVUZIT1VJc1JVRkJSVU1zUlVGQlJUaE1MRXRCUVV0cVN5eEhRVUZITEU5QlFVODNRaXhIUVVOc1lqQkVMRXRCUVV0M1dpeE5RVUZOZVVNc1QwRkJUeXhUUVVGVE9XUXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRWRCUVVkRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVU1UWl4SlFVRkpSQ3hGUVVGRlF5eEhRVUZITmtJc1JVRkJSU3hQUVVGUE9VSXNSMEZCUnpKRUxFdEJRVXQzV2l4TlFVRk5NRU1zVVVGQlVTeFRRVUZUTDJRc1IwRkJSeXhKUVVGSkxFbEJRVWxETEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlhkTUxGVkJRVlYyU2l4UFFVRlBha01zU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVWMVRDeFZRVUZWZUV3c1IwRkJSeXhIUVVGSE1rUXNTMEZCU3pKSExGRkJRVkZ5U3l4SFFVRkhMRWxCUVVrc1NVRkJTV2xETEVWQlFVVXNSVUZCUlVFc1JVRkJSV3BETEVWQlFVVm5ReXhQUVVGUFF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpReXhGUVVGRmQwSXNTMEZCUzNkYUxFMUJRVTE2VWl4TlFVRk5la3dzUlVGQlJXbERMRVZCUVVWQkxFVkJRVVVzVFVGQlRVTXNSVUZCUlhkQ0xFdEJRVXQzV2l4TlFVRk5NRU1zVVVGQlVYUlZMRTFCUVUwc1MwRkJTM0JLTEVkQlFVY3NTVUZCU1N4SlFVRkpjVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZja0lzUlVGQlJVWXNUMEZCVDNWQ0xFbEJRVWw2UWl4RlFVRkZaMHNzUzBGQlN6VktMRVZCUVVWeFFpeFRRVUZUZWtJc1JVRkJSV2RMTEV0QlFVczVUQ3hIUVVGSExFOUJRVTg0UWl4SFFVTTFWalJDTEV0QlFVdDNXaXhOUVVGTk1rTXNUMEZCVHl4VFFVRlRhR1VzUlVGQlJVTXNSMEZCY1Vzc1QwRkJiRXMwUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4TlFVRk5kRmdzUlVGQlJVY3NVVUZCVVVnc1JVRkJSVWNzVTBGQmNVSXNSMEZCV2tZc1IwRkJSMFFzUlVGQlJVY3NVVUZCVjFNc1RVRkJUVzVDTEZWQlFWVnZTeXhSUVVGUlNpeE5RVUZOZWtvc1JVRkJSVUVzUlVGQlJYTklMRkZCUVZGeVNDeEZRVUZGUVN4SlFVRkpMRVZCUVVWQkxFZEJRVWRYTEUxQlFVMXVRaXhWUVVGVmQwc3NTMEZCUzFJc1RVRkJUWHBLTEVWQlFVVkJMRVZCUVVWelNDeFBRVUZQTEVkQlFVZHlTQ3hMUVVGWlJDeEhRVUZITmtJc1MwRkJTM2RhTEUxQlFVMDBReXhUUVVGVExGTkJRVk5xWlN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpKRUxFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFZEJRVWR5V0N4SFFVRkhRU3hGUVVGRlJDeEZRVUZGUnl4UlFVRlJNRUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzQmFMRWRCUVVkQkxFVkJRVVU0UWl4RlFVRkZSeXhSUVVGUlJpeEZRVUZGVnl4TlFVRk5ia0lzVlVGQlZUWklMRTlCUVU5MFNpeExRVUZMWjBNc1JVRkJSVU1zUlVGQlJTeEhRVUZIVnl4TlFVRk5ia0lzVlVGQlZUWklMRTlCUVU5MFNpeExRVUZMWjBNc1JVRkJSVGxDTEVWQlFVVXNSVUZCUlN0Q0xFVkJRVVVzUzBGRGNsazBRaXhMUVVGTGQxb3NUVUZCVFRaRExFbEJRVWtzVTBGQlUyeGxMRWRCUVVjc1NVRkJTVEJLTEZWQlFWVjJTaXhQUVVGUExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVbEdMRVZCUVVVc1IwRkJSeTlDTEVWQlFVVjNUQ3hWUVVGVkxFZEJRVWQyU2l4UFFVRlBhRU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZkVXdzVlVGQlZYWktMRTlCUVU5b1F5eEpRVUZKZFV3c1ZVRkJWWFpNTEVkQlFVZG5ReXhQUVVGUGFrTXNTVUZCU1VFc1JVRkJSWGRNTEZWQlFWVjJUQ3hIUVVGSFowTXNVVUZCVVN4SlFVRkphRU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkphVU1zUlVGQlJTeEhRVUZIUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZ4U2l4VlFVRlZka29zVDBGQlQwVXNTVUZCU1VRc1JVRkJSVFpLTEV0QlFVdFFMRlZCUVZWeVNpeEhRVUZIYkVNc1NVRkJTVGhDTEVWQlFVVm5TeXhMUVVGTE4wb3NSMEZCUnl4UFFVRlBTQ3hIUVVGSE5FSXNTMEZCUzNkYUxFMUJRVTA0UXl4UlFVRlJMRk5CUVZOdVpTeEZRVUZGUXl4SFFVRkhRU3hGUVVGRlFTeEhRVUZIYzBJc1MwRkJTelJJTEU5QlFVOHNTVUZCU1N4SlFVRkpha3dzUlVGQlJUaENMRVZCUVVWSExFOUJRVThzUlVGQlJTeEZRVUZGYWtNc1JVRkJSVUVzU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVWdlJDeExRVUZMTm1Nc1RVRkJUVzVsTEV0QlFVc3ZRaXhGUVVGRkxFbEJRVWxyUXl4RlFVRkZTaXhGUVVGRk9VSXNSMEZCUnpoQ0xFVkJRVVU1UWl4SFFVRkhPRUlzUlVGQlJUZENMRWRCUVVjMlFpeEZRVUZGTjBJc1IwRkJSMmxETEVsQlFVbDVRaXhMUVVGTGQxb3NUVUZCVFdkRUxGbEJRVmtzVTBGQlUzSmxMRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVVc1IwRkJiVVFzVDBGQmFFUXlSQ3hMUVVGTGQxb3NUVUZCVFRkSUxGRkJRVkYyVkN4SFFVRkZMRk5CUVZOQkxFZEJRVWN2UWl4RlFVRkZLMHdzUzBGQlMycExMRVZCUVVWRExFOUJRV0V2UWl4SFFVTjBaakpFTEV0QlFVdDNXaXhOUVVGTmFVUXNWVUZCVlN4VFFVRlRkR1VzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVDBGQlR6SkVMRXRCUVV0M1dpeE5RVUZOTjB3c1QwRkJUeTlHTEUxQlFVMHNSMEZCUnpWSUxFdEJRVXQzV2l4TlFVRk5kRTRzU1VGQlNTOU9MRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxNa1FzUzBGQlN6QmpMRTFCUVUwc1IwRkJSekZqTEV0QlFVc3dZeXhOUVVGTlF5eHJRa0ZCYTBJc1UwRkJVM2hsTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRkxFZEJRVWN2UWl4RlFVRkZMRVZCUVVWRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSkxFTkJRVU1zU1VGQlNXbERMRVZCUVVWS0xFVkJRVVY1WlN4WFFVRlhkR2RDTEVkQlFVY3NTVUZCU1dsRExFbEJRVWxJTEVWQlFVVXZRaXhMUVVGUExFbEJRVVpyUXl4RlFVRk5RU3hKUVVGSkxFZEJRVWRJTEVWQlFVVXZRaXhMUVVGTGEwTXNSVUZCUlN4UFFVRlBTQ3hIUVVGSE5FSXNTMEZCU3pCakxFMUJRVTFITEd0Q1FVRnJRaXhUUVVGVE1XVXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVZITEU5QlFVOHNUMEZCVDBRc1QwRkJUM2xsTEdGQlFXRnNWaXhOUVVGTkxFdEJRVXQ2U2l4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEhRVUZITDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQycERMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWxETEVWQlFVVXdSQ3hMUVVGTGQxb3NUVUZCVFhwU0xFMUJRVTAxU2l4RlFVRkZPVUlzUlVGQlJVRXNSVUZCUlN4TlFVRk5LMElzUjBGQlIwTXNUMEZCVDNsbExHRkJRV0ZzVml4TlFVRk5MRXRCUVV0MFRDeEhRVUZITEU5QlFVODRRaXhIUVVONFpEUkNMRXRCUVVzd1l5eE5RVUZOU3l4bFFVRmxMRk5CUVZNMVpTeEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMZDFvc1RVRkJUWFJPTEVsQlFVa3ZUaXhIUVVGRkxGTkJRVk5CTEVkQlFXOUNMRTlCUVU4c1IwRkJlRUpCTEVWQlFVVkJMRVZCUVVWeFNTeFRRVUZUTEV0QlFXVnNTU3hQUVVGUFNDeEZRVUZGTEVsQlFVbEJMRXRCUVVsMVNDeExRVUZMZEVnc1IwRkJSeXhMUVVGTE5FSXNTMEZCU3pCakxFMUJRVTFOTEdWQlFXVXNVMEZCVXpkbExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhkRmdzUlVGQlJVY3NUMEZCVHl4RlFVRkZMREpEUVVFeVF5eEpRVUZKTEVsQlFVbEdMRVZCUVVVc1IwRkJSeTlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSVGhDTEVWQlFVVkhMRTlCUVU5cVF5eEhRVUZITEVWQlFVVXJRaXhGUVVGRlowc3NTMEZCU3paVkxGTkJRVk01WlN4RlFVRkZjMFFzVlVGQlZYQkdMRVZCUVVWQkxFVkJRVVVzUjBGQlJ5eExRVUZMTEU5QlFVOHJRaXhIUVVONlZUUkNMRXRCUVVzd1l5eE5RVUZOVVN4elFrRkJjMElzVTBGQlV5OWxMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTEVkQlFVY3ZRaXhGUVVGRkxFVkJRVVZETEVWQlFVVXNSVUZCUlVFc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5b1F5eEpRVUZKTEVOQlFVTXNTVUZCU1dsRExFVkJRVVZLTEVWQlFVVjVaU3hYUVVGWGRHZENMRWRCUVVjc1NVRkJTV2xETEVWQlFVVklMRVZCUVVVdlFpeExRVUZMYTBNc1IwRkJSeXhMUVVGTFFTeEZRVUZGU0N4RlFVRkZMMElzUzBGQlMydERMRWRCUVVjc1JVRkJSU3hMUVVGTExGRkJRVlVzVFVGQlJrRXNTVUZCVldwRExFVkJRVVVzUlVGQlJUWkNMRVZCUVVWSExGRkJRVkVzVVVGQk1FSXNUVUZCYkVKSUxFVkJRVVY1WlN4WFFVRlhkR2RDTEVWQlFVVXNTMEZCVjJsRExFVkJRVVVzVVVGQlZTeExRVUZHUVN4SlFVRlRMRXRCUVhWQ0xFdEJRV3hDU2l4RlFVRkZlV1VzWVVGQllYUm5RaXhKUVVGVE9FSXNSVUZCUlM5Q0xFdEJRVXRyUXl4SFFVRkhMRWRCUVVjc1NVRkJTVWdzUlVGQlJTOUNMRXRCUVV0clF5eEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxTQ3hGUVVGRkwwSXNTMEZCUzJ0RExFZEJRVWNzUjBGQlJ5eEpRVUZKU0N4RlFVRkZMMElzUzBGQlMydERMRWRCUVVjc1JVRkJSU3hIUVVGSExFdEJRVXRJTEVWQlFVVXZRaXhMUVVGUExFZEJRVVpyUXl4RlFVRkxMRXRCUVVzc1QwRkJUMGdzUjBGRGNsYzBRaXhMUVVGTE1HTXNUVUZCVFZNc2MwSkJRWE5DTEZOQlFWTm9aaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SFFVRkhMMElzUlVGQlJTeEZRVUZGUXl4RlFVRkZMRVZCUVVWRUxFVkJRVVU0UWl4RlFVRkZSeXhSUVVGUkxFTkJRVU1zU1VGQlNVTXNSVUZCUlVvc1JVRkJSVGxDTEV0QlFVc3NSMEZCUnl4SlFVRkphME1zUlVGQlJVZ3NSVUZCUlRsQ0xFdEJRVXNyUWl4UFFVRlBlV1VzWVVGQllYWmxMRkZCUVZFc1IwRkJSeXhKUVVGSlFTeEhRVUZITEVsQlFVbEJMRVZCUVVVc1EwRkJReXhKUVVGSlF5eEZRVUZGVEN4RlFVRkZPVUlzUzBGQlN5dENMRVZCUVVVNVFpeExRVUZMSzBJc1QwRkJUM2xsTEdOQlFXZENMRWRCUVVaMlpTeEpRVUZQTEVWQlFVa3NSMEZCUmtNc1VVRkJWeXhIUVVGSExFbEJRVWxFTEVkQlFVY3NTVUZCU1VFc1JVRkJSU3hEUVVGRFF5eEZRVUZGVEN4RlFVRkZPVUlzUzBGQlN5eEpRVUZKZDBRc1JVRkJSVEZDTEVWQlFVVTVRaXhMUVVGamEwTXNTVUZCVFN4RlFVRkdRU3hKUVVGTkxFbEJRVTBzUjBGQlJrTXNTVUZCVHl4SlFVRk5MRWRCUVVaeFFpeEpRVUZQTEVWQlFVa3NSMEZCTTBNeFFpeEZRVUZGT1VJc1RVRkJOa01zVFVGQlRTdENMRVZCUVVVNVFpeExRVUZMSzBJc1QwRkJUM2xsTEdGQlFXRXNUMEZCVDNabExFZEJRVWNzUzBGQlMwZ3NSVUZCUlRsQ0xFdEJRVXNyUWl4UFFVRlBlV1VzWVVGQllTeFBRVUZUTEV0QlFVWjJaU3hUUVVGalF5eEZRVUZGVEN4RlFVRkZPVUlzUzBGQlMzZEVMRVZCUVVVeFFpeEZRVUZGT1VJc1MwRkJTeXRDTEVWQlFVVTVRaXhMUVVGTEswSXNUMEZCVDNsbExHTkJRV2RDTEVkQlFVWjJaU3hKUVVGUExFbEJRVTBzUjBGQlJrTXNTVUZCVHl4RlFVRkpMRWRCUVVaeFFpeEhRVUZOTEU5QlFVOTZRaXhGUVVGRmMwZ3NTMEZCU3l4TFFVTndaVEZHTEV0QlFVc3dZeXhOUVVGTlZTeGhRVUZoTEZOQlFWTnFaaXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEZRVUZGUnl4UlFVRlJSaXhGUVVGRlJTeFBRVUZQTEdkRFFVRm5ReXhKUVVGSkxFbEJRVWxxUXl4RlFVRkZMRWRCUVVkRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSlJDeEZRVUZGSzB3c1MwRkJTMnBMTEVWQlFVVTNRaXhIUVVGSE9FSXNSVUZCUlRsQ0xFbEJRVWtzVDBGQlQwUXNSMEZCUnpKRUxFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUkxFZEJRVWRvVml4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhGSkxHbENRVUZwUWl4VFFVRlRiR1lzUjBGQlJ5eEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRkRMR1ZCUVdVc1EwRkJReXhKUVVGSk4xY3NSVUZCUlRSQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUmMwa3NWMEZCVjI1bUxFZEJRVWRETEV0QlFVdEVMRXRCUVV0QkxHRkJRV0ZETEVWQlFVVnRaaXhYUVVGWGNHWXNZVUZCWVVNc1JVRkJSVzltTEZWQlFWVjRaQ3hMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXc0UkVGQk9FUXpWaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWGxKTEc5Q1FVRnZRblJtTEVsQlFVa3NUMEZCVDBFc1IwRkROMlUyUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVRCSkxIRkNRVUZ4UWl4VFFVRlRkbVlzUlVGQlJVTXNSMEZCUnl4SFFVRkhORUlzUzBGQlMyZFdMRkZCUVZGRExHVkJRV1VzUTBGQlF5eEpRVUZKTlZrc1JVRkJSVEpFTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSYzBrc1YwRkJWMjVtTEVkQlFVYzVRaXhSUVVGSExFbEJRVzlDUVN4RlFVRkZLMElzUzBGQlMwUXNTVUZCU1VFc1lVRkJZVGxDTEVWQlFVVXJRaXhOUVVGTlJDeGhRVUZoT1VJc1JVRkJSV3RvUWl4VlFVRlZjR1lzWVVGQllUbENMRVZCUVVWdGFFSXNWMEZCVjNoa0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExITkZRVUZ6UlhaWUxFVkJRVVUwUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhsSkxHOUNRVUZ2UW5SbUxFdEJRVXNzVDBGQlQwRXNSMEZCUnpaQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUk1ra3NNRUpCUVRCQ0xGTkJRVk40Wml4SFFVRkhMRTlCUVU4MlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVUQkpMSEZDUVVGeFFuWm1MRVZCUVVVc2MwSkJRM1prTmtJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFMFNTd3dRa0ZCTUVJc1UwRkJVM3BtTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUk1Fa3NjVUpCUVhGQ2RtWXNSVUZCUlN4elFrRkJjMEkyUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVRaSkxIZENRVUYzUWl4VFFVRlRNV1lzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFd1NTeHhRa0ZCY1VKMlppeEZRVUZGTEc5Q1FVRnZRalpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZST0Vrc2VVSkJRWGxDTEZOQlFWTXpaaXhIUVVGSExFOUJRVTgyUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVRCSkxIRkNRVUZ4UW5abUxFVkJRVVVzY1VKQlFYRkNOa0lzUzBGQlMydFZMRWxCUVVsakxGRkJRVkVyU1N4NVFrRkJlVUlzVTBGQlV6Vm1MRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h4UWtGRGJtUTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVV2RLTEhsQ1FVRjVRaXhUUVVGVE4yWXNSMEZCUnl4UFFVRlBOa0lzUzBGQlMydFZMRWxCUVVsakxGRkJRVkV3U1N4eFFrRkJjVUoyWml4RlFVRkZMSEZDUVVGeFFqWkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJhVW9zZVVKQlFYbENMRk5CUVZNNVppeEhRVUZITEU5QlFVODJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVVEJKTEhGQ1FVRnhRblptTEVWQlFVVXNjVUpCUVhGQ05rSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRnJTaXcwUWtGQk5FSXNVMEZCVXk5bUxFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeDNRa0ZCZDBJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVXMUtMREJDUVVFd1FpeFRRVUZUYUdkQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHpRa0ZETVdRMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVXOUtMSGxDUVVGNVFpeFRRVUZUYW1kQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHhRa0ZCY1VJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYRktMSGRDUVVGM1FpeFRRVUZUYkdkQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHZRa0ZCYjBJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYTktMSGxDUVVGNVFpeFRRVUZUYm1kQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHhRa0ZCY1VJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYVktMREJDUVVFd1FpeFRRVUZUY0dkQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHpRa0ZEYkdRMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYZEtMREJDUVVFd1FpeFRRVUZUY21kQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHpRa0ZCYzBJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYbEtMREJDUVVFd1FpeFRRVUZUZEdkQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHpRa0ZEYkU4MlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYbEpMRzlDUVVGdlFpeFRRVUZUZEdZc1IwRkJSeXhKUVVGSE5rSXNTMEZCU3poSExGTkJRVk16U1N4SFFVRjFTaXhaUVVGUExFbEJRVk5CTEVWQlFVVXNXVUZCV1N4UFFVRlBRU3hGUVVGRkxHTkJRV05CTEVWQlFYcE5MRWxCUVVrc1QwRkJUMEVzUlVGQlJUWk1MRmxCUVZsM1RTeGhRVUZoY2xrc1JVRkJSVFpNTEZsQlFWbDZUaXhOUVVGTlJ5eFBRVUZQYTBJc1ZVRkJWVFJKTEZOQlFWTnlTeXhMUVVGTFowTXNSMEZCUnl4TlFVRk5ReXhIUVVGSExFMUJRVTBzYzBOQlFXbEhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZ6U1N4WFFVRlhMRk5CUVZOdVppeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSVVFzUjBGQlIwRXNSVUZCUlhWblFpeGpRVUZqY21sQ0xFVkJRVVVyUWl4SlFVRkpRU3hGUVVGRmRXZENMR0ZCUVdGMlowSXNSVUZCUlhkblFpeGpRVUVyUWl4SlFVRnFRblpwUWl4RlFVRkZRU3hIUVVGSE1rUXNTMEZCUzJZc1VVRkJXWFZsTEZOQlFWTnVhRUlzUlVGQlJXdG9RaXhUUVVGVExFOUJRVTlzYUVJc1JVRkJSU3hOUVVGTlF5eEpRVUZKTEU5QlFVOHNUVUZCVFRCRUxFdEJRVXMyWlN4VlFVRlZMRWRCUVVjM1pTeExRVUZMTm1Vc1ZVRkJWVU1zVTBGQlV5eFRRVUZUTTJkQ0xFZEJRVWNzVDBGQlR5eFhRVUZYTEU5QlFVOUJMRWxCUVVrMlFpeExRVUZMTm1Vc1ZVRkJWVVVzVFVGQlRTeFhRVUZYTEU5QlFVMHNSMEZCU1M5bExFdEJRVXMyWlN4VlFVRlZSeXhMUVVGTExGZEJRVmNzVDBGQlRTeEhRVUZKYUdZc1MwRkJTelpsTEZWQlFWVkpMRXRCUVVzc1YwRkJWeXhQUVVGUExFMUJRVTFxWml4TFFVRkxObVVzVlVGQlZVc3NVMEZCVXl4VFFVRlRMMmRDTEVWQlFVVkRMRWRCUVVjc1QwRkJUMFFzUjBGQlJ6WkNMRXRCUVVzMlpTeFZRVUZWT1dFc1RVRkJUU3hUUVVGVE5VWXNSMEZCUnl4UFFVRlBMRmRCUVZjc1RVRkJUV3RFTEUxQlFVMXNSQ3hMUVVGTk5rSXNTMEZCU3pabExGVkJRVlZzU2l4TFFVRkxMRk5CUVZONFdDeEhRVUZITEU5QlFVOHNWMEZCVnl4TlFVRk5RU3hKUVVOd01FSTJRaXhMUVVGTE5tVXNWVUZCVlUwc1MwRkJTeXhUUVVGVGFHaENMRVZCUVVWRExFZEJRVlVzVDBGQlVFRXNSVUZCUlVFc1IwRkJSeXhGUVVGVExGZEJRVmNzVDBGQlQwUXNSVUZCUlhsS0xFMUJRVTB4U1N4TFFVRkxTQ3hOUVVGTmJrSXNWVUZCVlcxTExFMUJRVTAxVEN4TFFVRkxNRXdzVlVGQlZTeEZRVUZGZWtvc1RVRkJUVFJDTEV0QlFVczJaU3hWUVVGVlR5eEpRVUZKTEZOQlFWTnFhRUlzUjBGQlJ5eFBRVUZQTEZkQlFWY3NUMEZCVHpCS0xGVkJRVlV4U2l4TFFVRkxOa0lzUzBGQlN6WmxMRlZCUVZWUkxHRkJRV0VzVTBGQlUyeG9RaXhGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGRk1FTXNUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1IwRkJSeXhQUVVGUExGZEJRVmNzU1VGQlNYcEtMRVZCUVVWWExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFhRVUUyUWl4UFFVRnNRbnBLTEVWQlFVVm5TeXhMUVVGTFVpeE5RVUZOZUVvc1JVRkJSUzlDTEVkQlFWVTRRaXhGUVVGRmVVb3NUVUZCVFRGSkxFdEJRVXRrTEV0QlFVczBRaXhMUVVGTE5tVXNWVUZCVlZNc1owSkJRV2RDTEZOQlFWTnVhRUlzUlVGQlJVTXNSMEZCUnl4UFFVRlBORUlzUzBGQlN6WmxMRlZCUVZWVkxGTkJRVk53YUVJc1JVRkJSVFpDTEV0QlFVczJaU3hWUVVGVlF5eFRRVUZUTVdkQ0xFdEJRekZsTkVJc1MwRkJTelpsTEZWQlFWVlhMRkZCUVZFc1UwRkJVM0pvUWl4RlFVRkZReXhIUVVGSExFOUJRVThzVTBGQlV5OUNMRWRCUVVjc1QwRkJUeXRDTEVWQlFVVkVMRWRCUVVjNVFpeEZRVUZGT0VJc1NVRkJTVGxDTEVsQlFVa3lSQ3hMUVVGTE5tVXNWVUZCVlZrc1VVRkJVU3hUUVVGVGRHaENMRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVWM1RDeFZRVUZWZGt3c1JVRkJSVVFzUlVGQlJXbERMRTlCUVU4c1QwRkJUeXhYUVVGWExFbEJRVWxJTEVWQlFVVTNRaXhKUVVGSk5rSXNSVUZCUlRsQ0xFVkJRVVZETEVWQlFVVXNSMEZCUjNOTUxFMUJRVTB4U1N4TFFVRkxNa2tzV1VGQldTeEpRVUZKTEVsQlFVbDZTaXhGUVVGRk9VSXNSVUZCUlN4RlFVRkZMRWRCUVVjNFFpeEZRVUZGUVN4SlFVRkpSQ3hGUVVGRk9VSXNSVUZCUlN0Q0xFZEJRVWRxUXl4TFFVRkxLME1zUzBGQlMyWXNSMEZCUnl4UFFVRlBRU3hKUVVGSk5rSXNTMEZCU3pabExGVkJRVlZWTEZOQlFWTXNVMEZCVTNCb1FpeEhRVUZITEVsQlFVbERMRVZCUVVWNVNpeFZRVUZWZUV3c1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU4c1QwRkJUeXhYUVVGWExFbEJRVWtzU1VGQlNVZ3NSVUZCUlVrc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV3RETEVsQlFVbEtMRVZCUVVWRExFVkJRVVZITEVkQlFVZHhTaXhOUVVGTk1Va3NTMEZCU3pKSkxGZEJRVmNzVDBGQlR6RktMRWxCUXpOWk5rSXNTMEZCU3pabExGVkJRVlZoTEVsQlFVa3NVMEZCVTNab1FpeEhRVUZITEVsQlFVbERMRVZCUVVWNVNpeFZRVUZWZUV3c1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU4c1QwRkJUeXhYUVVGWExFbEJRVWtzU1VGQlNVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRk9VSXNSVUZCUlRoQ0xFbEJRVWtzU1VGQlNVTXNSVUZCUlVRc1IwRkJSM2xLTEUxQlFVMHhTU3hMUVVGTE1ra3NWMEZCVnl4UFFVRk5MRVZCUVVjc1QwRkJUU3hKUVVGTE4wZ3NTMEZCU3pabExGVkJRVlZqTEVkQlFVY3NVMEZCVTNob1FpeEhRVUZITEVsQlFVbERMRVZCUVVWNVNpeFZRVUZWZUV3c1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU4c1QwRkJUeXhYUVVGWExFbEJRVWtzU1VGQlNVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRk9VSXNSVUZCUlRoQ0xFbEJRVWtzUjBGQlIwTXNSVUZCUlVRc1IwRkJSM2xLTEUxQlFVMHhTU3hMUVVGTE1ra3NWMEZCVnl4UFFVRk5MRVZCUVVjc1QwRkJUU3hKUVVGTE4wZ3NTMEZCU3pabExGVkJRVlZsTEVsQlFVa3NVMEZCVTNwb1FpeEhRVUZITEU5QlFVOHNWMEZCVnl4UFFVRlBRU3hGUVVGRmVVb3NUVUZCVFRGSkxFdEJRVXN5U1N4aFFVTjZWemRJTEV0QlFVczJaU3hWUVVGVmRtaENMRTlCUVU4c1UwRkJVMkVzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJTeGhRVUZuUnl4UFFVRnVSa0VzUlVGQlJYVkNMRlZCUVZWUExFVkJRVVZRTEZWQlFWVjJRaXhGUVVGRkxFbEJRVWxCTEVWQlFVVTRRaXhGUVVGRmVVb3NUVUZCVFhaTUxFVkJRVVV3UXl4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMTUV3c1ZVRkJWU3hKUVVGWGVFd3NSMEZCUnpKRUxFdEJRVXMyWlN4VlFVRlZaMElzYjBKQlFXMUNMRVZCUVVjM1ppeExRVUZMTm1Vc1ZVRkJWV2xDTEdsQ1FVRnBRaXhUUVVGVE0yaENMRWRCUVVjc1NVRkJVemxDTEVWQlFVd3JRaXhIUVVGRkxFVkJRVXNzVDBGQlR5eFhRVUZYTEU5QlFVazBRaXhMUVVGTE5tVXNWVUZCVldkQ0xHOUNRVUU0UW5wb1FpeEpRVUZKTDBJc1JVRkJSVGhDTEVsQlFVbERMRWRCUVVVc1IwRkJWeTlDTEVkQlFUTkNPRUlzVFVGQkswSTJRaXhMUVVGTE5tVXNWVUZCVld0Q0xFdEJRVXNzVTBGQlV6Vm9RaXhIUVVGSExFbEJRVWxETEVWQlFVVkVMRVZCUVVVc1QwRkJUeXhYUVVGWExFZEJRVWRETEVWQlFVVXNRMEZCUXl4SlFVRkpSQ3hGUVVGRlF5eEZRVUZGUVN4RlFVRkZMRXRCUVV0RUxFOUJRemRhTmtJc1MwRkJTelpsTEZWQlFWVnRRaXhUUVVGVExGTkJRVk0zYUVJc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeEZRVUZGTEU5QlFVOHNVMEZCVTJsRExFZEJRVWQ1UWl4TFFVRkxaaXhQUVVGUFoyaENMR0ZCUVdFemFrSXNSMEZCUnl4SlFVRkphME1zUlVGQlJYRktMRlZCUVZWMlRDeEZRVUZGTUVRc1MwRkJTMllzVDBGQlQybFBMRmxCUVZjc1YwRkJWeTlQTEVWQlFVVjVTaXhOUVVGTmRrd3NSVUZCUlcxRExFdEJRVWxLTEV0QlFVczBRaXhMUVVGTE5tVXNWVUZCVlhGQ0xGTkJRVk1zVTBGQlV5OW9RaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSlF5eEZRVUZGTEVWQlFVVnBReXhIUVVGRkxFVkJRVWRETEVWQlFVVXNSMEZCUjNGQ0xFVkJRVVVzVjBGQlYzWkVMRVZCUVVVc1JVRkJSV2xETEVsQlFVbEJMRWRCUVVVc1JVRkJSM0ZPTEUxQlFVMUJMRVZCUVVVc1YwRkJWM1JRTEVWQlFVVXdSQ3hMUVVGTFppeFBRVUZQYVU4c1YwRkJWM0pPTEVWQlFVVjZRaXhIUVVGSFJDeEZRVUZGZVVvc1RVRkJUWFpNTEVWQlFVVnRReXhKUVVGSkxFOUJRVThzVTBGQlUwd3NSMEZCUjBzc1JVRkJSWEZLTEZWQlFWVjJUQ3hGUVVGRmFVTXNSMEZCUlN4RlFVRkhjVTRzVFVGQlRUVk1MRXRCUVVzMlpTeFZRVUZWYzBJc1ZVRkJWU3hUUVVGVGFHbENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVVsRExFVkJRVVVzUlVGQlJXbERMRVZCUVVVc1YwRkJWMnBETEVWQlFVVXNSMEZCUnl4UFFVRlBMRk5CUVZOclF5eEhRVUZIYkVNc1NVRkJTVUVzUlVGQlJUQkVMRXRCUVV0bUxFOUJRVTlwVHl4WFFVRlhNMDhzUlVGQlJVZ3NSMEZCUjBRc1JVRkJSWGxLTEUxQlFVMTJUQ3hGUVVGRmQwd3NZMEZCWXpkSUxFdEJRVXRyVlN4SlFVRkphMDBzV1VGQldTeGhRVUZoY0dkQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUYkdsQ0xFZEJRVWRsTEV0QlFVdHZhRUlzVTBGQlUyNXBRaXhIUVVGSE5rSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJlbWxDTEZWQlFWVTBTU3hUUVVGVExGZEJRVmNzVDBGQlQzUklMRXRCUVV0dmFFSXNWVUZCVlhSblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRkZMRVZCUVVVc1NVRkJTWFpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1MwRkJTM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGSExFdEJRVXNzU1VGQlNYaG5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVVVGQlVYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZKTEZGQlFWRXNTVUZCU1hwblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWMEZCVjNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRkxMRkZCUVZFc1NVRkJTVEZuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1YwRkJWM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGTkxFOUJRVThzU1VGQlNUTm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZQTEV0QlFVc3NTVUZCU1RWblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZCVVhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRlJMRkZCUVZFc1NVRkJTVGRuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1YwRkRjQzlDY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVWTXNUVUZCVFN4SlFVRkpPV2RDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVZVc1RVRkJUU3hKUVVGSkwyZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVmNzUlVGQlJTeEpRVUZKYUdoQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeExRVUZMY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVWa3NTMEZCU3l4SlFVRkphbWhDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UlFVRlJjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdFc1UwRkJVeXhKUVVGSmJHaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3haUVVGWmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV01zU1VGQlNTeEpRVUZKYm1oQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFBRVUZQY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXVXNTVUZCU1N4SlFVRkpjR2hDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UFFVRlBjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdkQ0xFbEJRVWtzU1VGQlNYSm9RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZwUWl4WFFVRlhMRWxCUVVsMGFFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMR05CUVdOeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJhMElzUzBGQlN5eEpRVUZKZG1oQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFJRVU5zWjBKeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJiVUlzUjBGQlJ5eEpRVUZKZUdoQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeE5RVUZOY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXOUNMRTlCUVU4c1NVRkJTWHBvUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGeFFpeFBRVUZQTEVsQlFVa3hhRUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZWQlFWVnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYzBJc1VVRkJVU3hKUVVGSk0yaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hYUVVGWGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWFZDTEU5QlFVOHNTVUZCU1RWb1FpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZCVlhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRjNRaXhMUVVGTExFbEJRVWszYUVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmVVSXNTMEZCU3l4SlFVRkpPV2hDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UlFVRlJjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRCQ0xFbEJRVWtzU1VGQlNTOW9RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkV5UWl4VFFVRlRMRWxCUVVsb2FVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmxCUTI1a2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVFJDTEZGQlFWRXNTVUZCU1dwcFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWMEZCVjNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTJRaXhMUVVGTExFbEJRVWxzYVVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk9FSXNVMEZCVXl4SlFVRkpibWxDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4WlFVRlpjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN0Q0xFZEJRVWNzU1VGQlNYQnBRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVFVGQlRYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZuUXl4SlFVRkpMRWxCUVVseWFVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTlCUVU5eVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJhVU1zVVVGQlVTeEpRVUZKZEdsQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFhRVUZYY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXdERMRWxCUVVrc1NVRkJTWFpwUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGdFF5eFBRVUZQTEVsQlFVbDRhVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZWQlFWVnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYjBNc1NVRkJTU3hKUVVGSmVtbENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hQUVVGUGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWEZETEVsQlFVa3NTVUZCU1RGcFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZEYm1kQ2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWE5ETEVkQlFVY3NTVUZCU1ROcFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZCVFhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRjFReXhIUVVGSExFbEJRVWsxYVVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFMUJRVTF5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmQwTXNSMEZCUnl4SlFVRkpOMmxDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4TlFVRk5jbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhsRExFMUJRVTBzU1VGQlNUbHBRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVTBGQlUzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkV3UXl4VFFVRlRMRWxCUVVrdmFVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmxCUVZseVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJNa01zVjBGQlZ5eEpRVUZKYUdwQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeGpRVUZqY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUUkRMRTlCUVU4c1NVRkJTV3BxUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFMlF5eExRVUZMTEVsQlFVbHNha0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZGQlFWRnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZST0VNc1QwRkJUeXhKUVVGSmJtcENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hWUVVGVmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3RETEV0QlFVc3NTVUZCU1hCcVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZEZUdkQ2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV2RFTEUxQlFVMHNTVUZCU1hKcVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVMEZCVTNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnBSQ3hUUVVGVExFbEJRVWwwYWtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGbEJRVmx5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmEwUXNSMEZCUnl4SlFVRkpkbXBDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4TlFVRk5jbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVcxRUxFZEJRVWNzU1VGQlNYaHFRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVFVGQlRYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZ2UkN4SFFVRkhMRWxCUVVsNmFrSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUVUxeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJjVVFzUjBGQlJ5eEpRVUZKTVdwQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeE5RVUZOY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYTkVMRWRCUVVjc1NVRkJTVE5xUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkJUWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGMVJDeEhRVUZITEVsQlFVazFha0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSZDBRc1MwRkJTeXhKUVVGSk4ycENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hSUVVGUmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWGxFTEU5QlFVOHNTVUZCU1RscVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZETVdWeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJNRVFzVDBGQlR5eEpRVUZKTDJwQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFZRVUZWY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUSkVMRWRCUVVjc1NVRkJTV2hyUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkJUWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFMFJDeExRVUZMTEVsQlFVbHFhMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZGQlFWRnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTmtRc1JVRkJSU3hKUVVGSmJHdENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hMUVVGTGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVGhFTEU5QlFVOHNTVUZCU1c1clFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZCVlhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXJSQ3hKUVVGSkxFbEJRVWx3YTBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFOUJRVTl5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUlowVXNUVUZCVFN4SlFVRkpjbXRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdsRkxFbEJRVWtzU1VGQlNYUnJRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZyUlN4UlFVRlJMRWxCUVVsMmEwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmRCUVZkeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJiVVVzU1VGQlNTeEpRVUZKZUd0Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFBRVU4yWm5KblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnZSU3hQUVVGUExFbEJRVWw2YTBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmNVVXNUVUZCVFN4SlFVRkpNV3RDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhORkxFOUJRVThzU1VGQlNUTnJRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkYxUlN4SFFVRkhMRWxCUVVrMWEwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUVUxeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJkMFVzUzBGQlN5eEpRVUZKTjJ0Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFJRVUZSY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYbEZMRXRCUVVzc1NVRkJTVGxyUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1VVRkJVWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFd1JTeEpRVUZKTEVsQlFVa3ZhMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEU5QlFVOXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTWtVc1MwRkJTeXhKUVVGSmFHeENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hSUVVGUmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVFJGTEV0QlFVc3NTVUZCU1dwc1FpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZCVVhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTJSU3hMUVVGTExFbEJRVWxzYkVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRekZtY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUaEZMRk5CUVZNc1NVRkJTVzVzUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1dVRkJXWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFclJTeExRVUZMTEVsQlFVbHdiRUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZGQlFWRnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSWjBZc1RVRkJUU3hKUVVGSmNteENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV2xHTEVsQlFVa3NTVUZCU1hSc1FpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZCVDNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnJSaXhUUVVGVExFbEJRVWwyYkVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGbEJRVmx5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmJVWXNVMEZCVXl4SlFVRkplR3hDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4WlFVRlpjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVc5R0xFOUJRVThzU1VGQlNYcHNRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZ4Uml4SFFVRkhMRWxCUVVreGJFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUVUxeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJjMFlzVTBGQlV5eEpRVUZKTTJ4Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFpRVU12WkhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRjFSaXhQUVVGUExFbEJRVWsxYkVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmQwWXNUMEZCVHl4SlFVRkpOMnhDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VlFVRlZjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhsR0xFVkJRVVVzU1VGQlNUbHNRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzUzBGQlMzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkV3Uml4TlFVRk5MRWxCUVVrdmJFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRk5CUVZOeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJNa1lzVVVGQlVTeEpRVUZKYUcxQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFhRVUZYY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUUkdMRWxCUVVrc1NVRkJTV3B0UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFMlJpeFRRVUZUTEVsQlFVbHNiVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZsQlFWbHlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZST0VZc1JVRkJSU3hKUVVGSmJtMUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hMUVVGTGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3RHTEVkQlFVY3NTVUZCU1hCdFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZCVFhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRm5SeXhIUVVGSExFbEJRVWx5YlVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFMUJRekZtY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXbEhMRWxCUVVrc1NVRkJTWFJ0UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGclJ5eExRVUZMTEVsQlFVbDJiVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZGQlFWRnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYlVjc1JVRkJSU3hKUVVGSmVHMUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hMUVVGTGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVzlITEV0QlFVc3NTVUZCU1hwdFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZCVVhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnhSeXhQUVVGUExFbEJRVWt4YlVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmMwY3NVVUZCVVN4SlFVRkpNMjFDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4WFFVRlhjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhWSExFOUJRVThzU1VGQlNUVnRRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkYzUnl4TlFVRk5MRWxCUVVrM2JVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRk5CUVZOeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJlVWNzVDBGQlR5eEpRVUZKT1cxQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFZRVUZWY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUQkhMRXRCUVVzc1NVRkJTUzl0UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1VVRkRiR2RDY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUSkhMRTlCUVU4c1NVRkJTV2h1UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFMFJ5eFBRVUZQTEVsQlFVbHFia0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZWQlFWVnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTmtjc1RVRkJUU3hKUVVGSmJHNUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVGhITEVsQlFVa3NTVUZCU1c1dVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZCVDNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXJSeXhSUVVGUkxFbEJRVWx3YmtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGZEJRVmR5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUlowZ3NTVUZCU1N4SlFVRkpjbTVDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UFFVRlBjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdsSUxFbEJRVWtzU1VGQlNYUnVRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZyU0N4TlFVRk5MRWxCUVVsMmJrSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRk5CUVZOeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJiVWdzVFVGQlRTeEpRVUZKZUc1Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXOUlMRWRCUVVjc1NVRkJTWHB1UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkRiR2RDY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYRklMRk5CUVZNc1NVRkJTVEZ1UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1dVRkJXWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGelNDeFRRVUZUTEVsQlFVa3pia0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZsQlFWbHlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSZFVnc1RVRkJUU3hKUVVGSk5XNUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWGRJTEVkQlFVY3NTVUZCU1RkdVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZCVFhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRjVTQ3hOUVVGTkxFbEJRVWs1YmtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGTkJRVk55WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk1FZ3NTMEZCU3l4SlFVRkpMMjVDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UlFVRlJjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRKSUxFMUJRVTBzU1VGQlNXaHZRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVTBGQlUzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkUwU0N4SFFVRkhMRWxCUVVscWIwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUVUxeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJOa2dzVFVGQlRTeEpRVUZKYkc5Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUaElMRWRCUVVjc1NVRkJTVzV2UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkRjR2RDY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTdElMRVZCUVVVc1NVRkJTWEJ2UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1MwRkJTM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGblNTeEhRVUZITEVsQlFVbHliMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYVVrc1NVRkJTU3hKUVVGSmRHOUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hQUVVGUGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV3RKTEUxQlFVMHNTVUZCU1hadlFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVMEZCVTNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnRTU3hKUVVGSkxFbEJRVWw0YjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFOUJRVTl5WjBJc1MwRkJTMnRWTEVsQlFVbDFWU3hMUVVGTExFZEJRVWQ2YjBJc1MwRkJTMnRWTEVsQlFVbDFWU3hMUVVGTFF5eFhRVUZYTEVOQlFVTkRMRTFCUVVzc1JVRkJSekZsTEUxQlFVc3NSVUZCUnpKbExFbEJRVWNzUlVGQlIwTXNTMEZCU1N4RlFVRkhReXhUUVVGUkxFVkJRVWRETEU5QlFVMHNSVUZCUjBNc1NVRkJSeXhGUVVGSFF5eExRVUZKTEVWQlFVZERMRTlCUVUwc1JVRkJSME1zVVVGQlR5eEZRVUZIUXl4TlFVRkxMRVZCUVVkRExFMUJRVXNzUlVGQlIwTXNUMEZCVFN4RlFVRkhReXhSUVVGUExFVkJRVWRETEU5QlFVMHNSVUZCUjBNc1MwRkJTU3hIUVVGSmVuQkNMRXRCUVV0clZTeEpRVUZKZFZVc1MwRkJTMmxDTEZWQlFWVXNVMEZCVTNaeVFpeEhRVUZITEU5QlFVMHNTVUZCU3paQ0xFdEJRVXRyVlN4SlFVRkpkVlVzUzBGQlMwTXNWMEZCVjNaeFFpeEpRVUZKTmtJc1MwRkJTM2xLTEV0QlFVc3NSMEZCUjNwS0xFdEJRVXQ1U2l4TFFVRkxhMmRDTEdGQlFXRXNSMEZCUnpOd1FpeExRVUZMZVVvc1MwRkJTMnRuUWl4aFFVRmhReXh4UTBGQmNVTTFjRUlzUzBGQlMyMVNMREJDUVVFd1FtNVNMRXRCUVV0eFVpeDVRa0ZCZVVKeVVpeExRVUZMYlZJc01FSkJRVEJDTEZOQlFWTXNTMEZCUzI1U0xFdEJRVXMyY0VJc1QwRkJUeXhIUVVGSE4zQkNMRXRCUVVzMmNFSXNUMEZCVDBNc1dVRkJXU3hoUVVGaE9YQkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUU3hUUVVGVE5YSkNMRVZCUVVWRExFZEJRVWRqTEV0QlFVczRjVUlzYVVWQlFXbEZOM0pDTEVsQlFVazJRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFGTEhkRFFVRjNRemR5UWl4SFFVRkhMRWRCUVVkakxFdEJRVXRuY2tJc2QwUkJRWGRFYkhGQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVa3NZMEZCWTI1eFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMXVjMElzVlVGQlZYZHpRaXhwUTBGQlowTXNSVUZCUjNCeFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMXVjMElzVlVGQlZYbHpRaXh2UWtGQmIwSXNWMEZCVnl4UFFVRlBibkpDTEV0QlFVczRjVUlzYTBWQlF6ZHVRMmh4UWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxdWMwSXNWVUZCVlRSSkxGTkJRVk1zVjBGQlZ5eE5RVUZOTEZOQlFWTjBTQ3hMUVVGTE9IRkNMR2xGUVVGcFJTeExRVUZMYUhGQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVHl4VFFVRlRibk5DTEVkQlFVY3NUMEZCUjBFc1lVRkJZVFpDTEV0QlFVczJjRUlzVDBGQlQwVXNUMEZCVHpWeVFpeEZRVUZGTmt3c1kwRkJZMmhMTEV0QlFVczJjRUlzVDBGQlQwVXNUMEZCVHpWeVFpeEZRVUZGSzNKQ0xEQkVRVUV3Ukd4eFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMUpMR0ZCUVc5Q2FITkNMRVZCUVVVMmNrSXNhMFZCUVdsRmFIRkNMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMSFZEUVVGMVEzaFlMRVZCUVVVc1MwRkJWeXh4UWtGRGFHVTJRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFSTEV0QlFVc3NVMEZCVTNCelFpeEhRVUZITEU5QlFVOHNTVUZCU1RaQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRTOXdRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFGTEhWRFFVRjFRemx5UWl4SlFVRkpOa0lzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOU1N4aFFVRmhMRWRCUVVkdWNVSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5SU3gxUTBGQmRVTXNSMEZCUjJweFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMVRMRTFCUVUxNGNVSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5VU3hMUVVGTExFbEJRVWwyY1VJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlZ5eFhRVUZYZG5KQ0xFdEJRVXQzY2tJc1owUkJRV2RFTEVkQlFVZDRja0lzUzBGQlMzbHlRaXh2UkVGQmIwUXpjVUlzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjBjc2VVTkJRWGxETlhGQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWYzNjMElzVlVGQlZYZHpRaXhwUTBGQlowTXNSVUZCUjNCeFFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhSeXgzUTBGQmQwTXNSMEZCUnpWeFFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhTU3hoUVVGaExGTkJRVk14YzBJc1IwRkJhVU1zVDBGQlR5eExRVUZ5UTBFc1JVRkJSVFpDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRm5Ra2NzVDBGQlR6QkNMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmRFTEUxQlFVMTRjVUlzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjBzc2FVUkJRV2xFTTNOQ0xFbEJRMmg1UWpaQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZE5MRzlDUVVGdlFpeFRRVUZUTlhOQ0xFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkpMMElzUlVGQlJTeEhRVUZIUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVYxVEN4VlFVRlZka29zVDBGQlQyaERMRWxCUVVsRUxFVkJRVVVyVEN4TFFVRkxjRWtzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjA4c1YwRkJWMjVxUWl4VlFVRlZka3dzUzBGQlN5eFBRVUZQTUVRc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwc3NhVVJCUVdsRUxFbEJRVWs1Y1VJc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTlR5eFBRVUZQYm5OQ0xFZEJRVWNzUzBGQlN6bENMRVZCUVVWeFNpeExRVUZMTEUxQlFVMHNUMEZCVHpGR0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZFJMRk5CUVZNc1UwRkJVemx6UWl4SFFVRkhMRTlCUVU4MlFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhTeXhwUkVGQmFVUTVjVUlzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjA4c1YwRkJWemR6UWl4TFFVRkxOa0lzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVnpkelFpeFZRVUZWZVhOQ0xHOUNRVUZ2UWl4WFFVRlhMRTlCUVU5dWNrSXNTMEZCUzNkeVFpeG5SRUZCWjBSc2EwSXNXVUZEYW1wQ2VFY3NTMEZCUzJFc1VVRkJVV0lzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVnpkelFpeFZRVUZWTkVrc1UwRkJVeXhYUVVGWExFMUJRVTBzWTBGQlkzUklMRXRCUVV0M2NrSXNaMFJCUVdkRUxFMUJRVTB4Y1VJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwZ3NUMEZCVHl4VFFVRlRibk5DTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZFRMRzlDUVVGdlFpOXpRaXhIUVVGSGNVa3NXVUZETVU5NFJ5eExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhVeXh2UWtGQmIwSXNVMEZCVXk5elFpeEhRVUZITEU5QlFVZEJMR0ZCUVdFMlFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WlFVRlpkSE5DTEVWQlFVVTJUQ3hqUVVGamFFc3NTMEZCUzNsS0xFdEJRVXRuYUVJc1dVRkJXWFJ6UWl4RlFVRkZkM05DTEhORVFVRnpSRE54UWl4TFFVRkxlVW9zUzBGQlMyZG9RaXhYUVVGWFJ5eDNRMEZCSzBONmMwSXNSVUZCUlhWelFpeHBSRUZCWjBReGNVSXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NORU5CUVRSRGVGZ3NSVUZCUlN4aFFVRmhOa0lzUzBGQlMzVkhMRTlCUVU5d1NTeEpRVUZWTERCQ1FVTnNXalpDTEV0QlFVdDVTaXhMUVVGTFoyaENMRmRCUVZkUExGZEJRVmNzVTBGQlV6ZHpRaXhIUVVGSExFOUJRVTlyU1N4TFFVRkxReXhWUVVGVmJra3NSMEZCUjNWTUxGRkJRVkVzUzBGQlN5eFZRVUZWTVVvc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwc3NhVVJCUVdsRUxGTkJRVk16YzBJc1IwRkJSeXhQUVVGTkxFbEJRVXMyUWl4TFFVRkxlVW9zUzBGQlMyZG9RaXhaUVVGWlZTeHpRMEZCYzBOb2RFSXNTVUZEY2xBMlFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhOM05DTEZWQlFWVjFkRUlzYzBOQlFYTkRMRk5CUVZOb2RFSXNSMEZCYTAwc1QwRkJMMHhsTEV0QlFVdDNja0lzWjBSQlFXZEVNWEZDTEV0QlFVdDVTaXhMUVVGTGEyZENMR0ZCUVdGRExIRkRRVUZ4UXpWd1FpeExRVUZMZVVvc1MwRkJTMnRuUWl4aFFVRmhReXh4UTBGQmNVTjZXaXhoUVVGaGFGTXNSMEZCUjBFc1JVRkJVMlVzVFVGQlRXTXNTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWMFFzVFVGQlRYaHhRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYU3l4cFJFRkJhVVFzU1VGQlNUbHhRaXhMUVVGTGIzSkNMRWRCUVVjc1IwRkJSM0J5UWl4TFFVRkxiM0pDTEVkQlFVZERMRWxCUVVrc1IwRkJSM0p5UWl4TFFVRkxiM0pDTEVkQlFVZERMRWxCUVVsRExHZENRVUZuUWl4VFFVRlRiblJDTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXR2Y2tJc1IwRkJSME1zU1VGQlNVVXNaMEpCUVdkQ1F5eG5Ra0ZCWjBKeWRFSXNTVUZCU1RaQ0xFdEJRVXR2Y2tJc1IwRkJSME1zU1VGQlNVa3NaMEpCUVdkQ0xGTkJRVk4wZEVJc1IwRkJSelpDTEV0QlFVdHZja0lzUjBGQlIwTXNTVUZCU1VVc1owSkJRV2RDUnl4blFrRkJaMEoyZEVJc1NVRkJTVFpDTEV0QlFVdHZja0lzUjBGQlIwTXNTVUZCU1VVc1kwRkJZeXhYUVVGWExFbEJRVWx3ZEVJc1JVRkJSVFpDTEV0QlFVdHZja0lzUjBGQlIwTXNTVUZCU1Uwc2FVSkJRV2xDTEVkQlFVY3NUVUZCVFhoMFFpeEZRVUZGTEU5QlFVOUJMRVZCUVVVc1RVRkJUV3RFTEUxQlFVMHNiVVJCUXpOeVFuSkNMRXRCUVV0dmNrSXNSMEZCUjBNc1NVRkJTVTBzWlVGQlpTeFhRVUZYTEU5QlFVOHpja0lzUzBGQlMwVXNUVUZCVFVZc1MwRkJTMllzVDBGQlR6SnpRaXhOUVVGTk5YSkNMRXRCUVV0RkxFMUJRVTFHTEV0QlFVdG1MRTlCUVU4eWMwSXNTVUZCU1Vvc2FVSkJRV2xDZUhKQ0xFdEJRVXRtTEU5QlFVOHljMElzU1VGQlNUVnlRaXhMUVVGTFJTeE5RVUZOUml4TFFVRkxaaXhQUVVGUE5ITkNMRmxCUVZrM2NrSXNTMEZCUzBVc1RVRkJUVVlzUzBGQlMyWXNUMEZCVHpSelFpeFZRVUZWVEN4cFFrRkJhVUo0Y2tJc1MwRkJTMllzVDBGQlR6UnpRaXhWUVVGVk4zSkNMRXRCUVV0RkxFMUJRVTFHTEV0QlFVdG1MRTlCUVU5MWMwSXNhVUpCUVdsQ2VISkNMRXRCUVV0bUxFOUJRVThzVFVGQlRXVXNTMEZCUzI5eVFpeEhRVUZIUXl4SlFVRkpVeXd3UWtGQk1FSXNWMEZCVnl4UFFVRlBMRTFCUVUwNWNrSXNTMEZCUzI5eVFpeEhRVUZIUXl4SlFVRkpUU3hyUWtGQmEwSXpja0lzUzBGQlN5dHlRaXhMUVVGTExFZEJRVWN2Y2tJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTExFZEJRVWRvYzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFF5eFhRVUZWTEVWQlF5OWlhbk5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzBVc1QwRkJUMnh6UWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0RExGbEJRVmtzVFVGQlRXcHpRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1IwRkJSekJ4UWl4bFFVRmxMRTFCUVUxdWMwSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVUZGTEVkQlFVY3djVUlzWlVGQlpTeE5RVUZOYm5OQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hIUVVGSE1IRkNMR1ZCUVdVc1RVRkJUVzV6UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNSMEZCUnpCeFFpeGxRVUZsTEUxQlFVMXVjMElzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFZEJRVWN3Y1VJc1pVRkJaU3hOUVVGTmJuTkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SFFVRkhNSEZDTEdWQlFXVXNUVUZCVFc1elFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzUjBGQlJ6QnhRaXhsUVVGbExFMUJRVTF1YzBJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaVUZCWlN4TlFVRk5ibk5DTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEhRVUZITUhGQ0xHbENRVUZwUWl4SFFVRkhibk5DTEV0QlFVdGpMRTlCUVU5NFF5eFJRVU5zWml4TFFVRkxNRUlzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUzBGQlMzcENMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4TFFVRkxMRWRCUVVkNlFpeExRVUZMWXl4UFFVRlBlRU1zVVVGQlVTeFBRVUZQTUVJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaMEpCUVdkQ0xFZEJRVWR1YzBJc1MwRkJTMk1zVDBGQlQzaERMRkZCUVZFc1MwRkJTekJDTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEpRVUZKTEV0QlFVdDZRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1MwRkJTeXhIUVVGSGVrSXNTMEZCUzJNc1QwRkJUM2hETEZOQlFWTXNTMEZCU3pCQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hKUVVGSkxFdEJRVXQ2UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNUVUZCVFN4UlFVRlJla0lzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFZEJRVWN3Y1VJc1pVRkJaU3hSUVVGUmJuTkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SFFVRkhNSEZDTEdWQlFXVXNVVUZCVVc1elFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzUjBGQlJ6QnhRaXhsUVVGbExGRkJRVkZ1YzBJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVTjBaaXhIUVVGSE1IRkNMR1ZCUVdVc1VVRkJVVzV6UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNSMEZCUnpCeFFpeGxRVUZsTEZGQlFWRnVjMElzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFZEJRVWN3Y1VJc1owSkJRV2RDTEVkQlFVZHVjMElzUzBGQlMyTXNUMEZCVDNoRExGTkJRVk1zUzBGQlN6QkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SlFVRkpMRXRCUVV0NlFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzVFVGQlRTeFJRVUZSZWtJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaVUZCWlN4UlFVRlJibk5DTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEhRVUZITUhGQ0xHVkJRV1VzVVVGQlVXNXpRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1IwRkJSekJ4UWl4bFFVRmxMRkZCUVZGdWMwSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVUZGTEVkQlFVY3djVUlzWlVGQlpTeFJRVUZSYm5OQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hIUVVGSE1IRkNMR1ZCUVdVc1VVRkJVVzV6UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNSMEZCUnpCeFFpeGxRVU5vWm01elFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdEpMRTlCUVU4c1EwRkJRME1zU1VGQlNTeEpRVUZUUXl4SlFVRkpMRWxCUVZORExFbEJRVWtzU1VGQlUwTXNTVUZCU1N4SlFVRlRReXhKUVVGSkxFdEJRVlY2YzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKTEVOQlFVTkRMRWxCUVVrc1JVRkJSVU1zUzBGQlN5eEZRVUZGUXl4UlFVRlJMRWRCUVVjM2MwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxZeXhOUVVGTkxGRkJRVkU1YzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFpTeExRVUZMTEU5QlFVOHZjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMWjBJc1YwRkJWMmgwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0RkxFOUJRVTlzYzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFpTeExRVUZMTDNOQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyTXNUVUZCVFRselFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHBRaXhWUVVGVmFuUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMFVzVDBGQlQyeHpRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRqTEUxQlFVMDVjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMWlN4TFFVTjZWeTl6UWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0clFpeE5RVUZOTEZOQlFWTXZkVUlzUlVGQlJVTXNSMEZCUnl4TlFVRk5MR2xDUVVGcFFrUXNSVUZCUlN4RlFVRkZRU3hGUVVGRk5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxWU3hKUVVGSlF5eEpRVUZKTEVWQlFVVjRkVUlzUlVGQlJUWkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVVXNTVUZCU1hoMVFpeEZRVUZGTEV0QlFVczBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRWTEVsQlFVbEhMRkZCUVZFc1RVRkJUVEYxUWl4RlFVRkZMRXRCUVV0QkxFVkJRVVUyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxGTEVsQlFVazFjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMVlN4SlFVRkpReXhMUVVGTE0zTkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjFDTEZWQlFWVXNiMFZCUVRoS2JuUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjlDTEZWQlFWVXNNRU5CUTJ4aGNIUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM0ZDTEdGQlFXRXNiVUpCUVcxQ2NuUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM05DTEcxQ1FVRnRRaXhUUVVGVGJuWkNMRVZCUVVWRExFZEJRVWNzVDBGQlQwRXNSVUZCUlVRc1JVRkJSWFZNTEZGQlFWRXhTaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR4UWl4aFFVRmhMRWxCUVVsc2RrSXNSMEZCUnpaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzVkNMRmxCUVZrc1NVRkJTVGwwUWl4UFFVRlBMRWxCUVVsUExFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyOUNMRlZCUVZVc1MwRkJTM0IwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0M1FpeFpRVUZaTEVsQlFVa3ZkRUlzVDBGQlR5eEpRVUZKVHl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0dFFpeFZRVUZWTEV0QlFVdHVkRUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMZVVJc1ZVRkJWU3hUUVVGVGRIWkNMRVZCUVVWRExFZEJRVWNzVDBGQlR6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM1ZDTEZsQlFWbHVja0lzUzBGQlMzQkRMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM05DTEcxQ1FVRnRRbTUyUWl4RlFVRkZReXhMUVVGTE5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxNRUlzVjBGQlZ6RjBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQ1UWl4VlFVTnlZM3AwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzeVFpeFZRVUZWTEZOQlFWTjRka0lzUlVGQlJVTXNSMEZCUnl4UFFVRlBORUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMZDBJc1dVRkJXWEJ5UWl4TFFVRkxjRU1zUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYzBJc2JVSkJRVzFDYm5aQ0xFVkJRVVZETEV0QlFVczBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXMwUWl4UFFVRlBMRWxCUVVsdWRVSXNUMEZCVHl4TFFVRkxUeXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR0UWl4VlFVRlZMRXRCUVV0dWRFSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxOa0lzVDBGQlR5eEpRVUZKY0hWQ0xFOUJRVThzUzBGQlMwOHNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxiMElzVlVGQlZTeExRVUZMY0hSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6aENMRlZCUVZVc1UwRkJVek4yUWl4SFFVRkhMRTlCUVU4MlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVczJRaXhQUVVGUGVuSkNMRXRCUVV0cVJTeEpRVUZKTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTEswSXNWVUZCVlN4VFFVRlROWFpDTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6UkNMRTlCUVU5NGNrSXNTMEZCUzJwRkxFbEJRVWsyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0blF5eGpRVUZqTEZOQlFWTTNka0lzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTEswSXNWVUZCVlRWMlFpeExRVUZMTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTE9FSXNWVUZCVlROMlFpeEpRVU0xWmpaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMybERMR1ZCUVdVc1NVRkJTWGgxUWl4UFFVRlBMRTFCUVUxUExFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyOUNMRlZCUVZVc1RVRkJUWEIwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0dFFpeFZRVUZWTEV0QlFVdHVkRUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYTBNc1pVRkJaU3hKUVVGSmVuVkNMRTlCUVU4c1RVRkJUVThzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYlVJc1ZVRkJWU3hOUVVGTmJuUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjlDTEZWQlFWVXNTMEZCUzNCMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHRReXhqUVVGakxGTkJRVk5vZDBJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGEwTXNaVUZCWlRseVFpeExRVUZMY0VNc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGMwSXNiVUpCUVcxQ2JuWkNMRVZCUVVWRExFdEJRVXMwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0dlF5eFZRVUZWY0hWQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyMURMR05CUXpsWWJuVkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM0ZETEdOQlFXTXNVMEZCVTJ4M1FpeEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHBReXhsUVVGbE4zSkNMRXRCUVV0d1F5eExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHpRaXh0UWtGQmJVSnVka0lzUlVGQlJVTXNTMEZCU3pSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzTkRMRlZCUVZWMGRVSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxjVU1zWTBGQlkzSjFRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQxUXl4cFFrRkJhVUlzWlVGQlpYWjFRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQzUXl4alFVRmpMRk5CUVZOeWQwSXNSVUZCUlVNc1IwRkJORU1zVDBGQmVrTkVMRVZCUVVVMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHpRaXh0UWtGQmJVSnVka0lzUlVGQlJVTXNSMEZCVlRSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzVkRMR2xDUVVGcFFtNXpRaXhMUVVGTGFrVXNTMEZCU3paQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6SkNMRlZCUVZWNGRrSXNTMEZCU3paQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzbENMRlZCUVZWMGRrSXNTVUZETDFvMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdDVReXh0UWtGQmJVSXNTVUZCU1doMlFpeFBRVUZQTEVsQlFVbFBMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjFDTEZWQlFWVXNUVUZCVFc1MFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHZRaXhWUVVGVkxFOUJRVTl3ZEVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTE1FTXNiVUpCUVcxQ0xFbEJRVWxxZGtJc1QwRkJUeXhKUVVGSlR5eExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHZRaXhWUVVGVkxFMUJRVTF3ZEVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGJVSXNWVUZCVlN4UFFVRlBiblJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCU3pKRExGbEJRVmtzVTBGQlUzaDNRaXhGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQ1UXl4dFFrRkJiVUp5YzBJc1MwRkJTM0JETEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNOQ0xHMUNRVUZ0UW01MlFpeEZRVUZGUXl4TFFVRkxORUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMTkVNc1kwRkJZelYxUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzeVF5eFpRVU0xV1ROMVFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVczJReXhaUVVGWkxGTkJRVk14ZDBJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTE1FTXNiVUpCUVcxQ2RITkNMRXRCUVV0d1F5eExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHpRaXh0UWtGQmJVSnVka0lzUlVGQlJVTXNTMEZCU3pSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6aERMR05CUVdNNWRVSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxOa01zV1VGQldUZDFRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXNyUXl4alFVRmpMSEZJUVVGeFNDOTFRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRuUkN4alFVRmpMRk5CUVZNM2QwSXNSMEZCUnl4UFFVRlBOa0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMSzBNc1kwRkJZek56UWl4TFFVRkxha1VzU1VGQlNUWkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMmxFTEc5Q1FVRnZRaXcyUTBGRGJtTnFka0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYTBRc2JVSkJRVzFDTEZOQlFWTXZkMElzUlVGQlJVTXNSMEZCYjBjc1QwRkJha2RCTEZGQlFVY3NTVUZCVTBFc1JVRkJSVFJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNsQ0xGVkJRVlYwZGtJc1IwRkJSME1zUjBGQlJ6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMGtzVDBGQlQwc3NTVUZCU1hwelFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdEpMRTlCUVU5SkxFbEJRVmR5ZFVJc1JVRkJSWFZNTEZGQlFWRXhTaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRwUkN4dlFrRkJiMEkzZDBJc1JVRkJSU3hMUVVGTFFTeEpRVUZKTkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGJVUXNhVUpCUVdsQ0xGTkJRVk5vZUVJc1IwRkJSeXhOUVVGTkxFdEJRVXRCTEVWQlFVVXJTeXhQUVVGUExFZEJRVWN2U3l4RlFVRkZkVXdzVVVGQlVTeFBRVUZQTEdOQlFXTXNiVUpCUVcxQ2Rrd3NSVUZCUlN4WFFVRlhOa0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYjBRc2FVSkJRV2xDTEZOQlFWTnFlRUlzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFNTeFBRVUZQUlN4SlFVRkpiblZDTEVWQlFVVTJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRKTEU5QlFVOUhMRXRCUTNaaWRuTkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM0ZFTEdsQ1FVRnBRaXhUUVVGVGJIaENMRWRCUVVjc1RVRkJUU3hMUVVGTFFTeEZRVUZGSzBzc1QwRkJUeXhIUVVGSEwwc3NSVUZCUlhWTUxGRkJRVkVzVDBGQlR5eGpRVUZqTEcxQ1FVRnRRblpNTEVWQlFVVXNWMEZCVnpaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzTkVMR2xDUVVGcFFpeFRRVUZUYm5oQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMGtzVDBGQlQwTXNTVUZCU1d4MVFpeEZRVUZGTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFNTeFBRVUZQUnl4TFFVRkxkbk5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNWRUxHTkJRV01zY1VWQlFYRkZkblpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNkRUxGRkJRVkVzVTBGQlUzaDJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQ1UkN4VFFVRlRMRlZCUVZWNmRrSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxNRVFzVVVGQlVTeFJRVU4yWVRGMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVc3lSQ3hWUVVGVkxGTkJRVk40ZUVJc1IwRkJSeXhQUVVGUFFTeEZRVUZGZFV3c1VVRkJVVEZLTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNWRUxHTkJRV01zWjBKQlFXZENOMnhDTEZGQlFWRXhTaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQzUkN4UlFVRlJMRkZCUVZFNWJFSXNVVUZCVVRGS0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzbEVMRk5CUVZONmRrSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxaU3hOUVVGTmNtcENMRkZCUVZFeFNpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVc3dSQ3hSUVVGUk1YWkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMk1zVVVGQlVUbHpRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXMwUkN4NVFrRkJlVUlzYzBKQlFYTkNOWFpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCU3paRUxIbENRVUY1UWl4elFrRkRNMVkzZGtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTE9FUXNjVUpCUVhGQ0xGTkJRVk16ZUVJc1IwRkJSeXhQUVVGUFFTeEZRVUZGZFV3c1VVRkJVVEZLTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCU3pSRUxIbENRVUY1UWl4UFFVRlpiRzFDTEZGQlFWRXhTaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXMyUkN4NVFrRkJlVUlzVVVGQllUZDJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXNyUkN4cFFrRkJhVUlzVFVGQlRTOTJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRuUlN4bFFVRmxMRzlDUVVGdlFtaDNRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRwUlN4MVFrRkJkVUlzUjBGRGFGUnFkMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYTBVc2EwSkJRV3RDTEZOQlFWTXZlRUlzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJTeEZRVUZGUXl4RlFVRkZMRVZCUVVWcFF5eEhRVUZGTEVWQlFXMUdMRWxCUVdoR1NpeEZRVUZGTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGMwSXNiVUpCUVcxQ2JuWkNMRVZCUVVWRExFZEJRVWRuUWl4TlFVRk5XU3hMUVVGTEszSkNMRXRCUVV0RExFdEJRVXNyUkN4clFrRkJjMEl6ZUVJc1JVRkJSU3hGUVVGRlFTeEZRVUZGUkN4RlFVRkZSeXhQUVVGUFJpeEpRVUZKTEVOQlFVTXNTVUZCU1Vrc1JVRkJSVXdzUlVGQlJVTXNSMEZCUnpSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyMURMR05CUVdNemRrSXNTVUZCU1c1RExFbEJRVWxETEV0QlFVc3dSQ3hMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQxUXl4cFFrRkJhVUp1YzBJc1MwRkJTelZFTEVkQlFVZEVMRWRCUVVVc1JVRkJSM2xDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCU3pKQ0xGVkJRVlZ1ZGtJc1IwRkJSMnhETEVsQlFVa3dSQ3hMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRuUlN4bFFVRmxOWFJDTEV0QlFVczFSQ3hMUVVGTFJDeEhRVUZGTEVkQlFVa3NUMEZCVHl4SFFVRkhha01zUlVGQlJXbERMRVZCUVVWNVFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRExFbEJRVWt6YzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKUnl4UlFVRlJlSGRDTEVWQlFVVkRMRVZCUVVVd1JDeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHBSU3gxUWtGQmRVSnFkMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMVlN4SlFVRkpSU3hKUVVGSk5YTkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVTXNTMEZETldVemMwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxiVVVzZDBKQlFYZENMRk5CUVZOb2VVSXNSVUZCUlVNc1IwRkJSeXhQUVVGUE5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxhMFVzYTBKQlFXdENMM2hDTEVWQlFVVkRMRWxCUVVrMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRkxFdEJRVXMxYzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGIwVXNjMEpCUVhOQ0xGTkJRVk5xZVVJc1JVRkJSVU1zUjBGQlIwUXNTVUZCU1VNc1JVRkJSVFJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzJ0Q0xFMUJRVTA1ZFVJc1RVRkJUVVFzUlVGQlJXdDVRaXhOUVVGTlF5eFZRVUZWYkhsQ0xFZEJRVWMwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxGTEVsQlFVazFjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMWXl4TlFVRk5PWE5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzJVc1MwRkJTelYxUWl4RlFVRkZiM2xDTEVsQlFVbHVlVUlzUjBGQlJ6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVVXNTVUZCU1N4TlFVRk5MRkZCUXpGVk5YTkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM2RGTEd0RFFVRnJReXhUUVVGVGNubENMRVZCUVVWRExFZEJRVWNzVDBGQlR6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMnRGTEd0Q1FVRnJRamw0UWl4SlFVRkpMRXRCUVVzMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRExFbEJRVWw0ZFVJc1JVRkJSVzk1UWl4SlFVRkpMRTFCUVUwc1RVRkJUU3hMUVVGTGRuZENMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVVXNTVUZCU1hwMVFpeEZRVUZGYjNsQ0xFbEJRVWtzVFVGQlRTeE5RVUZOTEZGQlFWRndlVUlzUlVGQlJXdEtMR2RDUVVGblFpeFRRVUZUY2tnc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGVVVXNhMEpCUVd0Q0xHRkJRV0Y2ZDBJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNMRmRCUVZkNGVFSXNTMEZCUzNsNFFpeDNSRUZCZDBRc1IwRkJSM3A0UWl4TFFVRkxNSGhDTEZsQlFWa3NTMEZCU3pGNFFpeExRVUZMTW5oQ0xEWkVRVUUyUkRkM1FpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUk1Uml4NVEwRkJlVU0xY1VJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNPWGxDTEZWQlFWVjNjMElzYVVOQlFXZERMRVZCUVVkd2NVSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDT1hsQ0xGVkJRVlY1YzBJc2IwSkJRVzlDTEZkQlFWY3NUMEZCVDI1eVFpeExRVUZMZVhoQ0xIZEVRVUYzUkc1eFFpeFpRVU5zZGtKNFJ5eExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUk1ZVVJc1ZVRkJWV3Q2UWl4NVEwRkJkME1zUlVGQlJ6bDNRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVJNWVVSXNWVUZCVlcxNlFpeGhRVUZoTEZkQlFWY3NUMEZCVHk5M1FpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRExFdEJRek5MTTNOQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRamw1UWl4VlFVRlZiM3BDTEdkQ1FVRm5RaXhUUVVGVE4zbENMRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVVeVJDeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUp3Unl4UFFVRlBjSEpDTEUxQlFXMUZOVU1zUjBGQk4wUkVMRVZCUVVVeVJDeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpQTEd0Q1FVRnJRa01zUzBGQlN6Y3dRaXhKUVVGWExFbEJRVWtzUjBGQlJ5eFBRVUZQTWtRc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNVeXg1UkVGQmVVUTVNRUlzUlVGQlJTeEhRVUZITWtRc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNWU3hwUWtGQmFVSXNTVUZCU1M4d1FpeEZRVUZGTEVsQlFVa3NSMEZCUnpoQ0xFZEJRVWMyUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSlZMR2xDUVVGcFFpeEpRVUZKT1RCQ0xFVkJRVVU0UWl4TFFVTnFXalJDTEV0QlFVdGhMRkZCUVZGaUxFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRamw1UWl4VlFVRlZORWtzVTBGQlV5eFhRVUZYTEUxQlFVMHNjMEpCUVhOQ2RFZ3NTMEZCUzNsNFFpeDNSRUZCZDBRc1RVRkJUVE4zUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSndSeXhQUVVGUExGTkJRVk51YzBJc1IwRkJSeXhQUVVGUE5rSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDVnl4MVFrRkJkVUpzZWtJc1IwRkJSM0ZKTEZsQlEzSlNlRWNzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1Z5eDFRa0ZCZFVJc1UwRkJVMng2UWl4SFFVRkhMRTlCUVVkQkxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh2UWtGQmIwSjJlVUlzUlVGQlJUWk1MR05CUVdOb1N5eExRVUZMZVVvc1MwRkJTMmx1UWl4dlFrRkJiMEoyZVVJc1JVRkJSVEI1UWl3clJFRkJLMFEzZDBJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNPVVlzZDBOQlFTdERlbk5DTEVWQlFVVjNlVUlzZVVSQlFYZEVNM2RDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEc5RVFVRnZSSGhZTEVWQlFVVXNZVUZCWVRaQ0xFdEJRVXQxUnl4UFFVRlBjRWtzU1VGQlZTeHJRMEZET1dNMlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpaTEdsQ1FVRnBRaXhUUVVGVGJucENMRWRCUVVjc1QwRkJUMEVzUlVGQlJYbDVRaXhaUVVGWmVubENMRVZCUVVWNWVVSXNXVUZCV1RWM1FpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUp3Unl4UFFVRlBibk5DTEVsQlEycEpOa0lzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1lTeFBRVUZQTEZOQlFWTndla0lzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJUSkVMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExFbEJRVWsyUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSmpMRlZCUVZWd2RrSXNTMEZCU3k5R0xFZEJRVWNzVFVGQlRXZEdMRTFCUVUwc2MwTkJRWE5EYUVZc1IwRkRla29zVDBGRU5FbzRRaXhGUVVGRk9VSXNSVUZCUlhGT0xGRkJRVkV4U2l4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSmxMR2RDUVVGbExGTkJRVk4wZWtJc1JVRkJSVWtzUjBGQlJ5eEpRVUZKTjBJc1QwRkJUMnRDTEZWQlFWVkRMR1ZCUVdVeFFpeExRVUZMYVVNc1JVRkJSVWNzUjBGQlJ5eE5RVUZOT0VNc1RVRkJUU3hyUWtGQmEwSTVReXhGUVVGRkxIbENRVUY1UW14RExFVkJRVVVzWjBSQlFXZEVaMHNzUzBGQlMwTXNWVUZCVld4SkxFbEJRVmNzVDBGQlVFUXNSVUZCUlVNc1JVRkJSVWNzWTBGQmRVSjVRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTB2Y0VJc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTlR5eFBRVUZQYm5OQ0xFZEJRM0JtZFhwQ0xHMUNRVUZ0UW5KNlFpeFBRVUZQUml4UFFVRmhOa0lzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1V5eDVSRUZCZVVSb2VrSXNTVUZCU1RaQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbVVzWlVGQlpTeFpRVUZaZW5oQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbU1zVlVGQlZTeHhSa0ZCY1VaNGVFSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDVHl4clFrRkJhMElzYVVOQlEzQlhhbmhDTEV0QlFVdDVTaXhMUVVGTGFXNUNMRzFDUVVGdFFtbENMR2xDUVVGcFFpeFRRVUZUZUhwQ0xFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEhRVUZITEU5QlFVOHdSQ3hMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKaExFOUJRVTl3ZWtJc1JVRkJSVU1zUjBGQlJ6UjVRaXhuUWtGQlowSXpNRUlzUlVGQlJVTXNTVUZCU1RCRUxFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRamRHTEdGQlFXRXNVMEZCVXpGelFpeEhRVUZITEU5QlFVODJRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKVExIbEVRVUY1Ukc1NFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMVBMRTlCUVU5dWMwSXNTMEZCU3paQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbXRDTEdOQlFXTXNVMEZCVTNwNlFpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hIUVVGSEwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRk9FSXNSVUZCUlVjc1QwRkJUMnBETEVsQlFVa3JRaXhIUVVGSE5FSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5UeXhQUVVGUGJuTkNMRVZCUVVVNVFpeEpRVUZKTEU5QlFVOHlSQ3hMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKVExIbEVRVUY1UkM5NVFpeEpRVU0zWjBJMFFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUk1Uml4M1EwRkJkME1zUjBGRGNrVTFjVUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1V5eDVSRUZCZVVRc1UwRkJVMmg2UWl4SFFVRkhMRWxCUVVsRExFVkJRVVVzU1VGQlNUUkNMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZuV0N4UFFVRTNWblI1UWl4RlFVRkZkWGxDTEhkRVFVRjNSRE4zUWl4TFFVRkxlVW9zUzBGQlMydG5RaXhoUVVGaFF5eHhRMEZCY1VNMWNFSXNTMEZCUzNsS0xFdEJRVXRyWjBJc1lVRkJZVU1zY1VOQlFYRkROVm9zWjBKQlFXZENOMUlzUjBGQlIwRXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxhMmRDTEdGQlFXRkRMSFZEUVVGMVEzaHlRaXhGUVVGRmQzbENMRmxCUVZrMWQwSXNTMEZCUzNsS0xFdEJRVXRyWjBJc1lVRkJZVU1zY1VOQlFYRkRjRmtzVlVGQlZYSlVMRWxCUVZkRExFZEJRemRsTkVJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNWU3hwUWtGQmFVSXNVMEZCVTJwNlFpeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1QwRkJUeXRDTEVWQlFVVXNSMEZCUnpSQ0xFdEJRVXRITEZOQlFWTTVSQ3hIUVVGSExFOUJRVTlCTEVWQlFVVTRRaXhGUVVGRmRYcENMRzFDUVVGdFFuSXhRaXhIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKUXl4TFFVRkxSQ3hGUVVGRkxFTkJRVU1zU1VGQlNXdERMRVZCUVVWc1F5eEZRVUZGUXl4SFFVRkhhVU1zUlVGQlJYbENMRXRCUVVzeVJ5eFJRVUZSY0Vrc1IwRkJSMEVzUlVGQlJTeERRVUZEUVN4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRlJDeFBRVUZQUlN4SlFVRkpMRU5CUVVNc1NVRkJTWEZDTEVWQlFVVjBRaXhGUVVGRlF5eEhRVUZITEUxQlFVMXhRaXhKUVVGSmVrSXNTVUZCU1VFc1JVRkJSVVFzUjBGQlIwTXNTVUZCU1VFc1JVRkJSVVVzVDBGQlQwZ3NSVUZCUlVjc1QwRkJUeXhKUVVGSkxFbEJRVWx2ZWtJc2JVSkJRVzFDY0RGQ0xFZEJRVWNzU1VGQlNXOHhRaXh0UWtGQmJVSnlla0lzVDBGQlQzZENMRTFCUVUwc1QwRkJUM3BDTEVkQlFVYzBRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUTEVkQlFVYzNlRUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTBNc1YwRkJWeXhUUVVGVE0zcENMRVZCUVVWRExFZEJRVWNzVDBGQlR5eEhRVUZIUkN4RlFVRkZkVVFzV1VGQldYUkVMRVZCUVVVc1NVRkJTVFJDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZORkxGTkJRVk1zVTBGQlV6VjZRaXhGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGRk9FSXNSVUZCUlVjc1QwRkJUMFlzUlVGQlJVVXNUMEZCVHl4UFFVRlBMRWRCUVVkcVF5eEhRVUZIT0VJc1JVRkJSU3RLTEZGQlFWRTVTaXhGUVVGRkwwSXNTVUZCU1VFc1IwRkJSekpFTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOSExEQkNRVUV3UWl4VFFVRlROM3BDTEVWQlFVVkRMRWRCUVVjc1QwRkJUeXhIUVVGSE5FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMGtzZFVKQlFYVkNOM3BDTEVWQlFVVkVMRVZCUVVWdlRpeFBRVUZQTEVWQlFVVnVUaXhGUVVGRlJTeFZRVUZWTUVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwc3NkMEpCUVhkQ0xGTkJRVk12ZWtJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTEVkQlFVYzBRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUU1N4MVFrRkJkVUkzZWtJc1JVRkJSVVFzUlVGQlJXOU9MRTlCUVU5d1RpeEZRVUZGUnl4UFFVRlBSaXhGUVVGRlJTeFBRVUZQUml4RlFVRkZSU3hWUVVNM2VrSXdRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUVFN4elFrRkJjMElzVTBGQlUyZ3dRaXhGUVVGRlF5eEhRVUZITEU5QlFVOUVMRVZCUVVWbmRVSXNaVUZCWlM5MFFpeEZRVUZGSzNSQ0xHVkJRV1Z1YzBJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q0xGTkJRVk5xTUVJc1IwRkJSeXhOUVVGTkxHTkJRV05wUlN4TFFVRkxha1VzU1VGQlNUWkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5STEV0QlFVdHllVUlzUzBGQlMyVXNZMEZCWXpGRExFOUJRVTlVTEZWQlFWVjVNRUlzUzBGQlN5eFRRVUZUYkRCQ0xFZEJRVWNzVDBGQlQwRXNSVUZCUldzd1FpeFJRVUZSTEZOQlFWTnNNRUlzUjBGQlJ5eE5RVUZOTEdsRFFVRnBReXQ1UWl4TFFVRkxMM2xDTEVkQlFVY3NTVUZCU1RaQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTkpMSFZDUVVGMVFpeFRRVUZUT1hwQ0xFVkJRVVZETEVkQlFYVkVMRTlCUVhCRVJDeEZRVUZGUlN4UFFVRlBSaXhIUVVGSFozVkNMR2RDUVVGakwzUkNMRVZCUVVWRExFOUJRVTlFTEVkQlFVY3JkRUlzWjBKQlFUQkNMRVZCUVVWb2RVSXNSMEZCUjBNc1JVRkJSU3hGUVVGRkxFZEJRM1JrTkVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUxTXNXVUZCV1N4VFFVRlRiakJDTEVWQlFVVkRMRWRCUVVjc1QwRkJUMFFzUlVGQlJYVk1MRkZCUVZFc1owSkJRV2RDZEV3c1JVRkJSU3hUUVVGVExGTkJRek5HTkVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUxVXNWMEZCVnl4VFFVRlRjREJDTEVWQlFVVkRMRWRCUVVjc1IwRkJSMEVzUlVGQlJVUXNSVUZCUlVFc1JVRkJSWFZNTEZGQlFWRXhTaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUVnl4UlFVRlJMRk5CUVZNNWIwSXNVVUZCVVRGS0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTlpMRTlCUVU4c1VVRkJVUzl2UWl4UlFVRlJNVW9zUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTJFc1QwRkJUeXhSUVVGUmFIQkNMRkZCUVZFeFNpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRZeXhUUVVGVExGVkJRVlZxY0VJc1VVRkJVVEZLTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZObExHbENRVUZwUWl4VFFVRlRiSEJDTEZGQlFWRXhTaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUWjBJc1UwRkJVeXhaUVVGWkxFTkJRVU1zU1VGQlNUZDVRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUYVVJc1VVRkJVVEYzUWl4TFFVRkxha1VzUjBGQlJ5eFBRVUZQUVN4SFFVRkhMRWRCUVVkQkxFVkJRVVVyU2l4UlFVRlJMRTlCUVU4dlNpeEZRVUZGUVN4RlFVRkZkVXdzVVVGQlVURktMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5YTEZGQlFWRXNWMEZCVnl4SFFVRkhjakJDTEVWQlFVVXJTaXhSUVVGUkxFOUJRVTh2U2l4RlFVRkZRU3hGUVVGRmRVd3NVVUZCVVRGS0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTlpMRTlCUTNablFpeFZRVUZWTEVkQlFVZDBNRUlzUlVGQlJTdEtMRkZCUVZFc1QwRkJUeTlLTEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTVVvc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyRXNUMEZCVHl4VlFVRlZMRWRCUVVkMk1FSXNSVUZCUlN0S0xGRkJRVkVzVDBGQlR5OUtMRVZCUVVWQkxFVkJRVVYxVEN4UlFVRlJNVW9zUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTJNc1UwRkJVeXhaUVVGWkxFZEJRVWQ0TUVJc1JVRkJSU3RLTEZGQlFWRXNUMEZCVHk5S0xFVkJRVVZCTEVWQlFVVjFUQ3hSUVVGUk1Vb3NTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMlVzYVVKQlFXbENMRmRCUVZjc1IwRkJSM293UWl4RlFVRkZLMG9zVVVGQlVTeFJRVUZWTDBvc1JVRkJSVUVzUlVGQlJYVk1MRkZCUVZFeFNpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRaMElzVTBGQlV5eFRRVUZUTEU5QlFVOHhNRUlzUjBGQlJ6WkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5YTEZGQlFWRXNTMEZCUzNoNVFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRXU3hQUVVGUExFdEJRVXQ2ZVVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyRXNUMEZCVHl4TFFVRkxNWGxDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOakxGTkJRVk1zUzBGQlN6TjVRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUWlN4cFFrRkJhVUlzUzBGRE5XVTFlVUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTJkQ0xGTkJRVk1zVVVGQlVUZDVRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUYVVJc1VVRkJVU3hqUVVGak9YbENMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5yUWl4cFFrRkJhVUlzVTBGQlV6VXdRaXhGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUVXl4WlFVRlpiakJDTEVWQlFVVjFUQ3hSUVVGUkxFMUJRVTBzVjBGQlYzUk1MRWxCUVVrMFFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRNMllzVTBGQlV5eFRRVUZUTDFRc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTEVkQlFVZEVMRVZCUVVVclNpeFJRVUZST1Vvc1NVRkJTVFJDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOdFFpeDNRa0ZCZDBJc1UwRkJVemN3UWl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVE0yWXNVMEZCVXk5VUxFVkJRVVZuZFVJc1kwRkJZeTkwUWl4RlFVRkZLM1JDTEdkQ1FVTnNXVzV6UWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVGIwSXNaMEpCUVdkQ0xGTkJRVk01TUVJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hGUVVGRk9FSXNSVUZCUlRaQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTlJMRXRCUVV0b01FSXNUMEZCVDBZc1NVRkJTV2xDTEUxQlFVMHNTMEZCUzJoQ0xFVkJRVVUwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFVTeExRVUZMYURCQ0xFOUJRVTlFTEVsQlFVbG5RaXhOUVVGTkxFdEJRVXNzU1VGQlNTeEpRVUZKT1VNc1JVRkJSVzlFTEV0QlFVdERMRWxCUVVsNFFpeEZRVUZGUnl4UFFVRlBSaXhGUVVGRlJTeFJRVUZSUXl4RlFVRkZMRVZCUVVVc1IwRkJSMnhETEVkQlFVZHJReXhGUVVGRmFrTXNSVUZCUldsRExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZUQ3hGUVVGRlNTeEpRVUZKTEVkQlFVZHpRaXhGUVVGRmVrSXNSVUZCUlVjc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQmNVWXNSMEZCY0VaRExFVkJRVVVzYVVKQlFXbENNSGxDTEV0QlFVc3hlVUlzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWxCUVVseFFpeEZRVUZGTEdsQ1FVRnBRbkY0UWl4TFFVRkxjbmhDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhKUVVGUExFZEJRVWR5UWl4RlFVRkZMRWRCUVVkR0xGRkJRVkVzUjBGQlIzVkNMRVZCUVVVc1IwRkJSM1pDTEU5QlFVOHNUVUZCVFdwRExFVkJRVVVzUjBGQlIyMURMRVZCUVVVc1IwRkJSMFlzVDBGQlR5eEZRVUZGTW1Vc1UwRkJVM3BsTEVWQlFVVXNSMEZCUnl4SlFVRkpMRWxCUVVsdlRpeEZRVUZGTEVkQlFVY3ZUQ3hGUVVGRkxFZEJRVWQyUWl4UFFVRlBMRVZCUVVVeVpTeFRRVUZUY0dRc1JVRkJSU3hIUVVGSExFbEJRVWw0UkN4RlFVRkZNa1FzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTNGQ0xHbENRVUZwUWpjeVFpeEZRVUZGZFZBc1NVRkJTVFZNTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOeFFpeHBRa0ZCYVVJc1IwRkRibWhDTVRCQ0xFVkJRVVVzUjBGQlIwWXNUMEZCVHl4SFFVRkhkVUlzUlVGQlJTeEhRVUZIZGtJc1UwRkJVekJDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOeFFpeHBRa0ZCYVVJeE1FSXNSVUZCUlN4SFFVRkhjVUlzUlVGQlJTeEpRVUZKY2tJc1JVRkJSVUVzUlVGQlJTeEhRVUZIY1VJc1JVRkJSVUVzUlVGQlJTeFRRVUZUTEVkQlFVZDRSQ3hIUVVGSExFOUJRVTlCTEVkQlFVY3lSQ3hMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUY1VJc2FVSkJRV2xDTEZOQlFWTXZNRUlzUlVGQlJVTXNSMEZCUnl4UFFVRlBSQ3hGUVVGRlF5eEhRVUZITEVWQlFVVkVMRVZCUVVWRExFVkJRVVVzUlVGQlJTeEhRVUZITkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVTeFhRVUZYYWpCQ0xFdEJRVXRyTUVJc05rTkJRVFpETEVkQlFVZHNNRUlzUzBGQlMyMHdRaXhwUkVGQmFVUnlla0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVhaSkxIbERRVUY1UXpWeFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJSeXhwUWtGQmFVSXNNRUpCUVRCQ2RIcENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkYyTVVJc1ZVRkJWWGR6UWl4cFEwRkJaME1zUlVGQlIzQnhRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSZGpGQ0xGVkJRVlY1YzBJc2IwSkJRVzlDTEZkQlFWY3NUMEZCVDI1eVFpeExRVUZMYXpCQ0xEWkRRVUUyUXpWelFpeFpRVU5vYmtKNFJ5eExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJkakZDTEZWQlFWVnJla0lzZVVOQlFYZERMRVZCUVVjNWQwSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVWFl4UWl4VlFVRlZiWHBDTEdGQlFXRXNWMEZCVnl4UFFVRlBMM2RDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzFVc1NVRkJTVU1zUzBGQlN6TnpRaXhMUVVGTFlTeFJRVUZSWWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUmRqRkNMRlZCUVZVMFNTeFRRVUZUTEZkQlFWY3NUVUZCVFN4WFFVRlhkRWdzUzBGQlMyc3dRaXcyUTBGQk5rTXNUVUZCVFhCNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMGtzVDBGQlR5eFRRVUZUYm5OQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkUzUWl4cFFrRkJhVUp1ZWtJc1IwRkJSM0ZKTEZsQlEyeFllRWNzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUWl4VFFVRlRibnBDTEVkQlFVY3NUMEZCUjBFc1lVRkJZVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRk5CUVZOb01VSXNSVUZCUlRaTUxHTkJRV05vU3l4TFFVRkxlVW9zUzBGQlN6QndRaXhUUVVGVGFERkNMRVZCUVVWck1VSXNiVVJCUVcxRWNucENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkYyU1N4M1EwRkJLME42YzBJc1JVRkJSV2t4UWl3NFEwRkJOa053ZWtJc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2VVTkJRWGxEZUZnc1JVRkJSU3hoUVVGaE5rSXNTMEZCUzNWSExFOUJRVTl3U1N4SlFVRlZMSFZDUVVGelFqWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkYwU1N4aFFVRmhMRk5CUVZNeGMwSXNSMEZCUnl4UFFVRlBOa0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVrc09FTkJRVGhEZG5wQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeExRVU16YUVJMlFpeExRVUZMZVVvc1MwRkJTeXR3UWl4M1FrRkJkMElzZDA1QlFYZE9lSHBDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGTkxHVkJRV1VzVTBGQlUzUXhRaXhIUVVGSExFOUJRVTgyUWl4TFFVRkxlVW9zUzBGQlN5dHdRaXgzUWtGQmQwSndlRUlzUzBGQlMycEZMRWxCUVVrMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJUeXhUUVVGVExGTkJRVk4yTVVJc1IwRkJjMGdzVDBGQmJraEJMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTeXR3UWl4M1FrRkJkMEp3ZUVJc1MwRkJTMnBGTEVWQlFVVTJSU3hOUVVGTmFFUXNTMEZCUzI5eVFpeEhRVUZIUXl4SlFVRkpReXhuUWtGQlowSnVkRUlzUjBGQlJ6WkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZITEdsQ1FVRjNRblI2UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlNTdzRRMEZCT0VOd01VSXNTVUZETVdwQ05rSXNTMEZCUzNsS0xFdEJRVXRyY1VJc2EwSkJRV3RDTEhkRFFVRjNRek42UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlV5eFpRVUZaTEZOQlFWTjZNVUlzUjBGQlowTXNTVUZCU1VNc1IwRkJha05FTEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTEdGQlFXRXNTMEZCV1hORExFMUJRVTFvVFN4TFFVRkxlVW9zUzBGQlMydHhRaXh0UWtGQmNVVXNUMEZCYkVSMk1VSXNSVUZCUlVFc1IwRkJSelJDTEV0QlFVdDVTaXhMUVVGTEszQkNMSGRDUVVGM1FuQjRRaXhMUVVGTGFFVXNSVUZCUlN4SlFVRlhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVrc09FTkJRVGhEYmpGQ0xFVkJRVVZFTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSUnl4dFFrRkJiVUowZWtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVWVXNWMEZCVnl4VFFVRlRNVEZDTEVkQlFXOUhMRTlCUVdwSE5rSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMGNzTUVKQlFUQkNOM3BDTEVWQlFVVXNWVUZCVlVFc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHdENRVUY1UW5SNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTndNVUlzU1VGRGVtbENOa0lzUzBGQlMzbEtMRXRCUVV0eGNVSXNhVUpCUVdsQ0xIZEZRVUYzUlRsNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJXU3hYUVVGWExGTkJRVk0xTVVJc1IwRkJhMGNzVDBGQkwwWTJRaXhMUVVGTGVVb3NTMEZCUzNGeFFpeHBRa0ZCYVVJeGVFSXNTMEZCU3pSNFFpeHRRa0ZCYlVJM01VSXNUVUZCVFVFc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHdENRVUY1UW5SNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTndNVUlzU1VGQlNUWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZqTEhsQ1FVRjVRaXhUUVVGVE9URkNMRWRCUVc5SUxFOUJRV3BJTmtJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwY3NNRUpCUVRCQ04zcENMRVZCUVVVc01FSkJRVEJDUVN4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVjc2EwSkJRWGxDZEhwQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEzQXhRaXhKUVVOeWFVSTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSWlN4blFrRkJaMElzVTBGQlV5OHhRaXhIUVVFclJ5eFBRVUUxUnpaQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTkhMREJDUVVFd1FqZDZRaXhGUVVGRkxIRkNRVUZ4UWtFc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHdENRVUY1UW5SNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTndNVUlzU1VGQlNUWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZuUWl4WFFVRlhMRk5CUVZOb01rSXNSMEZCTmtrc1QwRkJNVWsyUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFJ5d3dRa0ZCTUVJM2VrSXNSVUZCUlN4VFFVRlROa0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVdsQ0xHMUNRVUZ0UW1veVFpeExRVUZMUVN4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVjc2EwSkJRWGxDZEhwQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEzQXhRaXhKUVVNdlpEWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZwUWl4dFFrRkJiVUlzVTBGQlUyb3lRaXhIUVVGSExFbEJRVWxETEVWQlFVVkVMRVZCUVVVclNpeFJRVUZSTEV0QlFYZEVMRWRCUVc1RUxFVkJRVVU1U2l4SlFVRkpSQ3hGUVVGRlFTeEZRVUZGYzBRc1ZVRkJWU3hGUVVGRmNrUXNUVUZCU1VFc1JVRkJSVVFzUlVGQlJUWk9MRTFCUVUwc1owSkJRWEZDTEU5QlFVMHNSVUZCUnl4SFFVRkhMRVZCUVVVMVRpeEZRVUZGUlN4UFFVRlBMRTlCUVUwc1JVRkJiME1zUzBGQmFrTklMRVZCUVVWQkxFVkJRVVUyVGl4TlFVRk5MRzlDUVVGdlFpeEpRVUZUTEU5QlFVMHNSVUZCUnl4SlFVRkpaMjlDTEcxQ1FVRnRRamN4UWl4SFFVRkhMRTFCUVUwNVFpeEhRVUZITEU5QlFVMHNSVUZCUnl4TlFVRk5MSEZEUVVGeFF5dEdMRXRCUVV0cVJTeEpRVUZKTmtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVXdENMRmRCUVZjc1UwRkJVMnd5UWl4SFFVRnpSeXhQUVVGdVJ6WkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5ITERCQ1FVRXdRamQ2UWl4RlFVRkZMRmxCUVZsQkxFVkJRVVUyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlJ5eHJRa0ZCZVVKMGVrSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVWtzT0VOQlFUaERjREZDTEVsQlEyeG5RalpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGdFFpd3lRa0ZCTWtJc1UwRkJVMjR5UWl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUmIwSXNjMEpCUVhOQ0xHMURRVUZ0UTNBeVFpeEZRVUZGUXl4SlFVRkpORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVhGQ0xEUkNRVUUwUWl4VFFVRlRjakpDTEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGdlFpeHpRa0ZCYzBJc1owTkJRV2REY0RKQ0xFVkJRVVZETEVsQlFVazBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSYzBJc2VVSkJRWGxDTEZOQlFWTjBNa0lzUlVGQlJVTXNSMEZCUnl4UFFVRlBORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVc5Q0xITkNRVUZ6UWl4MVEwRkJkVU53TWtJc1JVRkJSVU1zU1VGRGNtSTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSYjBJc2MwSkJRWE5DTEZOQlFWTndNa0lzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVFJQTEU5QlFYaFBPRUlzUlVGQlJVRXNSVUZCUlN0NVFpeExRVUZMT1hsQ0xFdEJRVXRFTEVWQlFVVkJMRVZCUVVVc1NVRkJTU3hKUVVGSk9VSXNZVUZCWVRKRUxFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRTeERRVUZETDNCQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDJwMVFpeEpRVUZKUVN4RlFVRkZObEFzUzBGQlNTeFRRVUZUTDA0c1IwRkJSeXhQUVVGUE5rSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5UeXhQUVVGUGJuTkNMRTlCUVUwclNpeFJRVUZSTDBvc1MwRkJTME1zUlVGQlJUUkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZITEcxQ1FVRnRRbXd4UWl4RlFVRkZORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVjc2FVSkJRWGRDZEhwQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEyNHhRaXhKUVVGSk5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVWFZDTEhWQ1FVRjFRaXhUUVVGVGRqSkNMRWRCUVVjc1QwRkJUelpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSkxEaERRVUU0UTNaNlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUp3Unl4UFFVRlBibk5DTEV0QlF6Vm5RalpDTEV0QlFVdDVTaXhMUVVGTGEzSkNMR3RDUVVGclFpeHRSRUZCYlVRek1FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVWGxDTEdsQ1FVRnBRalV3UWl4TFFVRkxlVW9zUzBGQlMydHlRaXhyUWtGQmEwSXpNRUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRCQ0xGTkJRVk1zVTBGQlV6RXlRaXhIUVVGSExFOUJRVWRCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZsYURGQ0xFZEJRVVZCTEVWQlFVVXNhVUpCUVdsQ1FTeEhRVUZIUVN4RlFVRkZhWE5DTEdkRFFVRm5RMnB6UWl4RlFVRkZhM05DTEhOQ1FVRnpRbWh6UWl4UFFVRlBSaXhIUVVGSE5rSXNTMEZCUzNsS0xFdEJRVXRyY2tJc2EwSkJRV3RDZG5sQ0xFdEJRVXRxUlN4TFFVRkxRU3hGUVVGRk5rSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVWNzYTBKQlFYbENkSHBDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSkxEaERRVUU0UTNBeFFpeExRVU0zWXpaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRXlRaXgzUWtGQmQwSXNVMEZCVXpNeVFpeEZRVUZGUXl4SFFVRkhMRTlCUVVkRUxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGbGFERkNMRWRCUVVWQkxFVkJRVVVzYVVKQlFXbENRU3hIUVVGSFFTeEZRVUZGYVhOQ0xHZERRVUZuUTJwelFpeEZRVUZGYTNOQ0xITkNRVUZ6UW1oelFpeFBRVUZQUml4SFFVRk5ReXhIUVVGSExGVkJRVlZuUlN4TFFVRkxha1VzUzBGQlMwTXNSVUZCUlRSQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRlRMRmxCUVZsNk1VSXNTVUZCUzJ0elFpeDFRa0ZCZFVKc2MwSXNSVUZCVlVNc1IwRkJSVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZWxZc1MwRkJTM2xLTEV0QlFVdHJja0lzYTBKQlFXdENkbmxDTEV0QlFVdHFSU3hIUVVGSExIbERRVUY1UTBFc1MwRkJTMEVzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZITEd0Q1FVRjVRblI2UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlNTdzRRMEZCT0VOd01VSXNUVUZEYkdZMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJka2tzZDBOQlFYZERMRWRCUVVjMWNVSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVWtzT0VOQlFUaERMRk5CUVZOd01VSXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFbEJRVWswUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVFNFRDeFBRVUYwVEM4d1FpeEZRVUZGWnpGQ0xEWkRRVUUyUTNCNlFpeExRVUZMZVVvc1MwRkJTMnRuUWl4aFFVRmhReXh4UTBGQmNVTTFjRUlzUzBGQlMzbEtMRXRCUVV0clowSXNZVUZCWVVNc2NVTkJRWEZEY0Zrc1ZVRkJWWEpVTEVkQlFVZEJMRVZCUVZORExFZEJRVWMwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk5FSXNXVUZCV1M4d1FpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTXNaVUZCWlhaNlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZMRmRCUVZjNU1VSXNTMEZCU3lzeFFpd3JRMEZCSzBNc1IwRkJSeTh4UWl4TFFVRkxaekpDTEcxRVFVRnRSR3d4UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVmNFc3NlVU5CUVhsRE5YRkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZ3TTBJc1ZVRkJWWGR6UWl4cFEwRkJaME1zUlVGQlIzQnhRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWY0Vzc2QwTkJRWGRETEVkQlF6RjRRalZ4UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVmJrc3NZVUZCWVN4VFFVRlRNWE5DTEVkQlFXbERMRTlCUVVjc1MwRkJha05CTEVWQlFVVTJRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFQTEU5QlFVOXVjMElzU1VGQldVY3NUMEZCWXpCQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVjRTeXhQUVVGTmVIRkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBlbFlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTBVc1UwRkJVelY2UWl4RlFVRkZMRXRCUVVzc09FTkJRVGhEUVN4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTk2Vml4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVE0yWXNVMEZCVXk5VUxFVkJRVVVzUzBGQlN5eHJSa0ZCYTBaQkxFZEJRVlUyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlJ5eG5SRUZCWjBSb00wSXNTMEZETDJJMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZjRE5DTEZWQlFWVjVjMElzYjBKQlFXOUNMRmRCUVZjc1QwRkJUMjV5UWl4TFFVRkxLekZDTEdkRVFVRm5SR294UWl4TFFVRkxZU3hSUVVGUllpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZjRE5DTEZWQlFWVTBTU3hUUVVGVExGZEJRVmNzVFVGQlRTeGhRVUZoZEVnc1MwRkJTeXN4UWl3clEwRkJLME1zVFVGREwxQnFNVUlzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlRGTExFOUJRVThzVTBGQlUyNXpRaXhIUVVGSExFOUJRVWRCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFhRVUZYTnpKQ0xFVkJRVVUyVEN4alFVRmphRXNzUzBGQlMzbEtMRXRCUVV0MWNrSXNWMEZCVnpjeVFpeEZRVUZGS3pKQ0xIRkVRVUZ4Ukd3eFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZjRXNzZDBOQlFTdERlbk5DTEVWQlFVVTRNa0lzWjBSQlFTdERhakZDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTERKRFFVRXlRM2hZTEVWQlFVVXNZVUZCWVRaQ0xFdEJRVXQxUnl4UFFVRlBjRWtzU1VGQlZTeDVRa0ZCZDBJMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZSeXhuUkVGQlowUXNVMEZCVTJnelFpeEhRVUZITEU5QlFVMHNTVUZCU3paQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZkQlFWYzNTaXh6UTBGQmMwTm9kRUlzU1VGRE5XbENOa0lzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlhBelFpeFZRVUZWZFhSQ0xITkRRVUZ6UXl4VFFVRlRhSFJDTEVkQlFYbEVMRTlCUVhSRVpTeExRVUZMS3pGQ0xDdERRVUVyUXpreVFpeEZRVUZUWlN4TlFVRk5ZeXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWZUVzc1RVRkJUWGh4UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlJ5eG5SRUZCWjBRc1NVRkJTVzR4UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVk1VSXNhVUpCUVdsQ0xGbEJRekZTZEhwQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVXhNMElzVDBGQlR5eFRRVUZUWVN4SFFVRkhMRWxCUVZNNVFpeEZRVUZNSzBJc1JVRkJSU3hIUVVGTExFbEJRVWt2UWl4TFFVRkxPRUlzUlVGQlJTeERRVUZETEVsQlFVa3NiVUpCUVcxQ2FVVXNTMEZCU3k5R0xFZEJRVWNzVFVGQlRXZEdMRTFCUVUwc2QwTkJRWGREYUVZc1IwRkJSeXhKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVGxDTEVkQlFVY3NUVUZCVFVNc1NVRkJNa2s0UWl4SFFVRkhMMElzUlVGQlJTeExRVUUxU1VNc1JVRkJSVEJFTEV0QlFVc3lSeXhSUVVGUmNrc3NSMEZCUnpCRUxFdEJRVXQzV2l4TlFVRk5kRTRzU1VGQlNUVlFMRVZCUVVVd1JDeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZTU3gzUWtGQmQwSXhka0lzUzBGQlN5eExRVUZMTVVZc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZVa3NkVUpCUVhWQ09UUkNMRWxCUVdNc1MwRkJTeXhQUVVGUE9FSXNSVUZCUlRSQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVkhMR2RFUVVGblJDOHlRaXhIUVVGSE5FSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWWGhMTEU5QlEzQmhlSEZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWSkxIVkNRVUYxUWl4VFFVRlRhak5DTEVkQlFVY3NSMEZCUjBFc1lVRkJZVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFc1RVRkJUU3hSUVVGUmJucENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkUzU1N4UFFVRlBibk5DTEVkQlFVZDFUQ3hSUVVGUkxFdEJRVXNzVDBGQlQwRXNVVUZCVVN4VFFVRlRMRkZCUVZFc1MwRkJPRWdzUjBGQmVraDJUQ3hGUVVGRlFTeGhRVUZoTmtJc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTkwzQkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSE5rSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVXNzTmtKQlFUWkNhRE5DTEU5QlFVOUdMRWxCUVU4c1VVRkJVV2xGTEV0QlFVdHFSU3hIUVVGSExFMUJRVTBzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSUlN4bFFVRmxMSFZEUVVGMVF5eERRVUZETDFjc1NVRkJTU3hQUVVGUFFTeEhRVU14V2paQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVkxMRFpDUVVFMlFpeFRRVUZUYkROQ0xFZEJRVWNzU1VGQlNVTXNSVUZCUlVRc1JVRkJSWFZNTEZGQlFWRXhTaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWVFN4alFVRmpMRTFCUVUwMWNrSXNVVUZCVVRGS0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVk5MR05CUVdNc1RVRkJUVFZ5UWl4UlFVRlJNVW9zUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlU4c1VVRkJVU3hQUVVGUExFOUJRVWQyTVVJc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZWRXNWVUZCVlhCNlFpeExRVUZMYUVVc1IwRkJUelJDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWVExGbEJRVmx5ZWtJc1MwRkJTMnBGTEVsQlFWVTJRaXhMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXg1UTBGQmVVTjRXQ3hIUVVGSE5rSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVEZDTEd0Q1FVRnhRblI2UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlZTeHRRa0ZCYlVKMk0wSXNSMEZET1ZrMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZWeXd5UWtGQk1rSjRNMElzUjBGQmNWWTJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWV1N4aFFVRmhlak5DTEVsQlFUVlhOa0lzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzWjBkQlFXZEhlRmdzUjBGQlJ6WkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlV4UWl4dFFrRkVjMDUwZWtJc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc0swTkJRM1JrZUZnc1IwRkJSelpDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZVeFFpeHRRa0ZCYjFCMGVrSXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NORUpCUVRSQ00xWXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWV0VzY1VKQlFYRkNMQ3RDUVVFclFqRXpRaXhIUVVGSE5rSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVEZDTEcxQ1FVTjRXblI2UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlZTeHRRa0ZCYlVJc1UwRkJVM1l6UWl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUjBGQlJTeEZRVUZITDBJc1IwRkJSU3hGUVVGSFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVVMlFpeEZRVUZGUnl4UFFVRlBhRU1zU1VGQlNTeERRVUZETEVsQlFVbHBReXhGUVVGRlNpeEZRVUZGSzBzc1QwRkJUelZOTEVkQlFVY3NTMEZCUzJsRExFZEJRVWRzUXl4RlFVRkZLMElzUjBGQlIwRXNSVUZCUlN4TFFVRkxSeXhIUVVGSFNDeEpRVUZKTDBJc1IwRkJSMEVzUjBGQlJ5eFBRVUZQSzBJc1IwRkJSeTlDTEVkQlFVY3lSQ3hMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWVnl3eVFrRkJNa0lzVTBGQlUzZ3pRaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSMEZCUlN4RlFVRkhMMElzUlVGQlJTeHJRa0ZCYTBKRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSkxFTkJRVU1zU1VGQlNXbERMRVZCUVVWS0xFVkJRVVVyU3l4UFFVRlBOVTBzUjBGQlJ5eEhRVUZITEV0QlFVdHBReXhGUVVGRkxFTkJRVU1zUjBGQlIwZ3NSVUZCUlN4UFFVRk5MRVZCUVVkQkxFZEJRVVVzVDBGQlVTeEhRVUZITEV0QlFVdEhMRVZCUVVVc1EwRkJReXhKUVVGSlNDeEZRVUZGTEU5QlFVMHNSVUZCUjBFc1IwRkJSU3hQUVVGUkxFbEJRVWxCTEVsQlFVa3ZRaXhGUVVGRkswWXNTMEZCU3pkRUxFZEJRVWNzVDBGQlRTeEZRVUZITEU5QlFVOUlMRWRCUVVjMFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZZU3h4UWtGQmNVSXNLMEpCUTJoaU56RkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZSTEZWQlFWVXNTVUZCU1M4eFFpeFBRVUZQTEVsQlFVbFBMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZoTEhGQ1FVRnhRaXhOUVVGTk56RkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZQTEZGQlFWRXNiVVpCUVcxR2RqRkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZOTEdOQlFXTXNORWhCUVRSSWRERkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZUTEZsQlFWa3NUMEZEZWxsNk1VSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVmtzWVVGQllTeFRRVUZUZWpOQ0xFZEJRVWNzVDBGQlQwRXNSVUZCUlhWTUxGRkJRVkV4U2l4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlR5eFRRVUZSTEZOQlFWTndNMElzUlVGQlJUbENMRVZCUVVWRExFVkJRVVZwUXl4SFFVRkhMRWxCUVVsSUxFVkJRVVVzUjBGQmNVZ3NUMEZCYkVnNVFpeEZRVUZGUVN4RlFVRkZiMDRzVVVGQlVTeHJRa0ZCYVVJc1UwRkJVM1pNTEVWQlFVVTVRaXhGUVVGRlF5eEhRVUZQTEU5QlFVbzRRaXhGUVVGRkwwSXNSVUZCVTBNc1MwRkJTVFpDTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTUVJc1UwRkJVM1kwUWl4SFFVRkhLM1JDTEhOQ1FVRTJRbWgxUWl4RlFVRkZLMElzUlVGQlJVUXNSVUZCUlVNc1JVRkJSVWNzVFVGQlMzbENMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZ5YmtJc1QwRkJUeXhUUVVGVGVGQXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFZEJRVWN2UWl4RlFVRkZMRk5CUVZNNFFpeEhRVUZITmtJc1MwRkJTekpITEZGQlFWRjRTU3hIUVVGSE5rSXNTMEZCUzNkYUxFMUJRVTAzU0N4UlFVRlJlRlFzUlVGQlJUbENMRWRCUVVjclFpeEhRVUZITkVJc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZURkxMRTlCUVU5dWMwSXNTVUZCYjBNc1QwRkJhRU0yUWl4TFFVRkxkMW9zVFVGQlRUZElMRkZCUVZFNVNpeFZRVUZWZUV3c1IwRkJWU3RDTEVWQlFVVTBRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWUnl4blJFRkJaMFF2TWtJc1IwRkJSelJDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWNFN5eFBRVUZQZUhGQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVXNWMEZCVnpVeVFpeExRVUZMTmpKQ0xHOUVRVUZ2UkN4SFFVRkhOekpDTEV0QlFVczRNa0lzZVVSQlFYbEVhREpDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR1ZCUVdWc1RDeDVRMEZCZVVNMWNVSXNTMEZCUzNsS0xFdEJRVXR4YzBJc1pVRkJaV3cwUWl4VlFVRlZkM05DTEdsRFFVRm5ReXhGUVVGSGNIRkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHVkJRV1ZzVEN4M1EwRkJkME1zUjBGRGNqTkNOWEZDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR1ZCUVdWSExGZEJRVmNzVTBGQlV6a3pRaXhGUVVGRlF5eEhRVUZITEVkQlFVYzBRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUTTJZc1UwRkJVeTlVTEVWQlFVVXNTMEZCU3l4TlFVRk5hMFFzVFVGQlRTeHhRMEZCY1VOc1JDeEhRVUZITEVsQlFVazVRaXhGUVVGRk9FSXNSVUZCUlhWTUxGRkJRVkVzZDBOQlFYZERMRWxCUVVrc1NVRkJTU3h4UTBGQmNVTjBTQ3hMUVVGTEwwWXNSMEZCUnl4TlFVRk5aMFlzVFVGQlRTd3lSVUZCTWtWc1JDeEhRVUZITEVsQlFVazJRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsU1N4eFFrRkJjVUkzTlVJc1IwRkJSeXhOUVVGTlowWXNUVUZCVFN4blJFRkJaMFJzUkN4SFFVTjBXU3hQUVVSNVdVTXNZVUZCWVRSQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZsQlFWazFNa0lzUlVGQlJUUkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlV4TTBJc1QwRkJUMk1zU1VGRGVtZENSQ3hGUVVGRlFTeEZRVUZGTEVsQlFVazJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWTVVzc1QwRkJUMnh6UWl4SFFVRkhjMHdzVVVGQlVTeExRVUZMTEZOQlFWTXNTVUZCVnpGS0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVkxMSEZFUVVGeFJHZzBRaXhKUVVGSk5rSXNTMEZCUzNsS0xFdEJRVXR4YzBJc1pVRkJaVWtzY1VKQlFYRkNMRk5CUVZNdk0wSXNSMEZCUnl4SlFVRkpMRWxCUVVsRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVsQlFVa3NTVUZCU1N4TFFVRkxMMElzUlVGQlJTeEhRVUZIUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVUyUWl4RlFVRkZSeXhQUVVGUGFFTXNTVUZCU1N4RFFVRkRMRWxCUVVscFF5eEZRVUZGU2l4RlFVRkZOMElzUjBGQlJ5eEhRVUZIT0VJc1JVRkJSVWNzUjBGQlIyeERMRVZCUVVVclRDeExRVUZMYUVzc1JVRkJSVWNzVTBGQlV5eEhRVUZIZVVJc1MwRkJTM1JETEU5QlFVOTNWU3hUUVVGVE9WUXNSVUZCUlVjc1NVRkJTV3hETEVWQlFVVXJOVUlzVDBGQlR6Y3pRaXhGUVVGRkxFOUJRVTBzUlVGQlJ5eFBRVUZQTEVkQlFVZHNReXhGUVVGRmFVTXNVVUZETTFjd1FpeExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxibTlDTEU5QlFVOHNVMEZCVTNoUUxFZEJRVWNzU1VGQlNVTXNSVUZCUlN4SFFVRkhMMElzUlVGQlJTeFRRVUZUT0VJc1IwRkJSelpDTEV0QlFVc3lSeXhSUVVGUmVFa3NSMEZCUnpaQ0xFdEJRVXQzV2l4TlFVRk5OMGdzVVVGQlVYaFVMRVZCUVVVNVFpeEhRVUZISzBJc1IwRkJSelJDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR1ZCUVdWNFRDeFBRVUZQYm5OQ0xFbEJRVzlETEU5QlFXaEROa0lzUzBGQlMzZGFMRTFCUVUwM1NDeFJRVUZST1Vvc1ZVRkJWWGhNTEVkQlFWVXlSQ3hMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsU3l4eFJFRkJjVVF2TTBJc1NVRkRkbEUwUWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGFrd3NZVUZCWVN4VFFVRlRNWE5DTEVkQlFXbERMRTlCUVVjc1MwRkJha05CTEVWQlFVVTJRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFQTEU5QlFVOXVjMElzU1VGQldVY3NUMEZCWXpCQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVjBUQ3hQUVVGTmVIRkNMRXRCUVV0blZpeFJRVUZSVXl4UlFVRlJlbFlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVXpObUxGTkJRVk12VkN4RlFVRkZMRXRCUVVzc2EwUkJRV3RFUVN4SFFVRlZOa0lzUzBGQlMzbEtMRXRCUVV0eGMwSXNaVUZCWlVzc2NVUkJRWEZFYURSQ0xFdEJRVWsyUWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGJEUkNMRlZCUVZWNWMwSXNiMEpCUVc5Q0xGZEJRVmNzVDBGQlQyNXlRaXhMUVVGTE5qSkNMSEZFUVVNMVdpOHhRaXhMUVVGTFlTeFJRVUZSWWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGJEUkNMRlZCUVZVMFNTeFRRVUZUTEZkQlFWY3NUVUZCVFN4clFrRkJhMEowU0N4TFFVRkxOakpDTEc5RVFVRnZSQ3hOUVVOeVNpOHhRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsZUV3c1QwRkJUeXhUUVVGVGJuTkNMRWRCUVVjc1QwRkJSMEVzWVVGQllUWkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHZENRVUZuUWpNelFpeEZRVUZGTmt3c1kwRkJZMmhMTEV0QlFVdDVTaXhMUVVGTGNYTkNMR2RDUVVGblFqTXpRaXhGUVVGRk5qTkNMREpFUVVFeVJHZ3lRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsYkV3c2QwTkJRU3REZW5OQ0xFVkJRVVUwTTBJc2NVUkJRVzlFTHpGQ0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExHZEVRVUZuUkhoWUxFVkJRVVVzWVVGQllUWkNMRXRCUVV0MVJ5eFBRVUZQY0Vrc1NVRkJWU3c0UWtGRGJHRTJRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsU3l4eFJFRkJjVVFzVTBGQlUyZzBRaXhIUVVGSExFOUJRVTBzU1VGQlN6WkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHZENRVUZuUWpOTExITkRRVUZ6UTJoMFFpeEpRVUZKTmtJc1MwRkJTM2xLTEV0QlFVdHhjMElzWlVGQlpXdzBRaXhWUVVGVmRYUkNMSE5EUVVGelF5eFRRVUZUYUhSQ0xFZEJRVGhFTEU5QlFUTkVaU3hMUVVGTE5qSkNMRzlFUVVGdlJEVXpRaXhGUVVGVFpTeE5RVUZOWXl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGRFd3NUVUZCVFhoeFFpeExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxTeXh4UkVGQmNVUXNTVUZCU1c0eVFpeExRVUZMY1RKQ0xFdEJRVXNzUjBGQlIzSXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlN4SFFVRkhMMHdzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCU3l4SFFVRkhkREpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0RExEQkNRVUV3UWl4WFFVRlhMRWxCUVVsd05FSXNSVUZCUlRaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdEZMR2RDUVVGblFpeFBRVUZQY2pSQ0xFbEJRVWxCTEVWQlFVVkJMRVZCUVVVMFRpeFhRVUZYTlU0c1JVRkJSU3hKUVVGSk5rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMFVzWTBGQll5eFhRVUZYTEU5QlFVOTRNa0lzUzBGQlMyWXNUMEZCVHpaTkxGZEJRVmM1VEN4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFJ5eFhRVUZYZWpKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdERMRFJDUVVFMFFuWXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMU1N4aFFVRmhMRk5CUVZOMk5FSXNSMEZCUnpaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdEhMRmRCUVZkME5FSXNSMEZCUnpaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdERMRFpDUVVNdk5VSjJNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzBzc1lVRkJZU3hYUVVGWExFOUJRVTh6TWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwY3NXVUZCV1hveVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGTkJRVk42TkVJc1IwRkJSeXhKUVVGSlF5eEZRVUZGTkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwc3NaVUZCWlN4UFFVRlBNekpDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZNelppeFRRVUZUT1ZRc1JVRkJSVVFzU1VGQlNUWkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRQTEhsQ1FVRjVRaXhUUVVGVE1UUkNMRWRCUVVjc1NVRkJTVU1zUlVGQlJUUkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRMTEdWQlFXVXNUMEZCVHpNeVFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRiVUlzZDBKQlFYZENOVEJDTEVWQlFVVkVMRWxCUXpWWk5rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMUVzY1VKQlFYRkNMRk5CUVZNek5FSXNSMEZCUnl4SlFVRkpMRWxCUVc5RU4wSXNSVUZCYUVRNFFpeEZRVUZGTEhsRFFVRjVReTlDTEVWQlFVVXNSMEZCUzBNc1JVRkJSVGhDTEVWQlFVVTRlVUlzUzBGQlN5OTVRaXhKUVVGSk9VSXNSVUZCUlN0TUxFdEJRVXNzUTBGQlF6bE1MRVZCUVVVc1IwRkJSMEVzUlVGQlJTeEhRVUZIUVN4RlFVRkZMRk5CUVVrc1NVRkJVeXhQUVVGUFJDeEhRVUZITWtRc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVTeEhRVUZITHpKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRkRMRmxCUVZrc1YwRkJWeXhQUVVGUGFETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNWVUZCVlRVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJSU3hUUVVGVExGZEJRVmNzVDBGQlQyb3pRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRmxCUVZrMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFRRVUZUTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRkhMR1ZCUVdVc1YwRkJWeXhQUVVGUGJETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNVMEZCVXpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJTU3h0UWtGQmJVSXNWMEZCVnl4UFFVRlBiak5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVTBGRE1YRkNOVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGTExHOUNRVUZ2UWl4WFFVRlhMRTlCUVU5d00wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFJRVUZSTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRk5MR05CUVdNc1YwRkJWeXhQUVVGUGNqTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNXVUZCV1RVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGVkJRekZSTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlBMR0ZCUVdFc1YwRkJWeXhQUVVGUGRETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNZVUZCWVRVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJVU3huUWtGQlowSjJNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVZNc1pVRkJaWGd6UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUlF5eGxRVUZsYUROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRkhMR3RDUVVGclFtd3pRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSU1N4elFrRkJjMEp1TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVc3NkVUpCUVhWQ2NETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZOTEdsQ1FVRnBRbkl6UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUlZTeFZRVUZWZWpOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1lVRkRhR2RDTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlRMRmxCUVZrc1YwRkJWeXhQUVVGUGVETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNWVUZCVlRVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJWeXhwUWtGQmFVSXNWMEZCVnl4UFFVRlBNVE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVTBGQlV6VXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMR0ZCUVdFMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVThzYVVKQlFXbENkRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGUkxHbENRVUZwUW5ZelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJVeXhuUWtGQlowSjRNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVUwc2FVSkJRV2xDY2pOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1owSkJRelZsTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlJMR0ZCUVdFc1YwRkJWeXhQUVVGUGRqTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNWMEZCVnpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGbEJRVmsxTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVY3NhMEpCUVd0Q2JETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZaTEhGQ1FVRnhRaXhYUVVGWExFOUJRVTh6TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwMHNaVUZCWlN4alFVRmpOVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGaExGbEJRVmsxTTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXTXNZVUZCWVRjelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJaU3hYUVVGWE9UTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZWTEZkQlF6ZGtlak5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGbExGRkJRVkU1TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVTXNXVUZCV1dnelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJaMElzUzBGQlN5OHpRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSUlN4VFFVRlRhak5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGcFFpeFBRVUZQYURSQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRkhMR1ZCUVdWc00wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV3RDTEdWQlFXVnFORUlzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVVrc2JVSkJRVzFDYmpOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRnRRaXhuUWtGQlowSnNORUlzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVVzc2IwSkJRVzlDY0ROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRmpMRlZCUVZVM00wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVTBzWTBGRGVHUnlNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVc5Q0xGTkJRVk51TkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVOHNZVUZCWVhRelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJjVUlzVVVGQlVYQTBRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSVXl4WlFVRlplRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGelFpeGhRVUZoY2pSQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlhMR2xDUVVGcFFqRXpRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSWVN4VFFVRlROVE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGUkxHRkJRV0YyTTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVYVkNMR2xDUVVGcFFuUTBRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSV1N4eFFrRkJjVUl6TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVWVXNUMEZCVHl4WFFVRlhMRTlCUVU5Nk0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFRRVU42WmpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJkMElzVjBGQlZ5eFhRVUZYTEZOQlFWTndOa0lzUlVGQlJVRXNSMEZCTUVJc1QwRkJka0pCTEVWQlFVVTJRaXhMUVVGTGQxb3NUVUZCVFZNc1MwRkJTemxpTEVWQlFVVTNRaXhIUVVGVlJDeEZRVUZGT0VJc1NVRkJTU3hIUVVGSExFbEJRVWxETEVWQlFVVTBRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMU3l4bFFVRmxMRWRCUVVjek1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV2RDTEU5QlFVOHNUMEZCVHk4elFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJlVUlzWTBGQlkzQTJRaXhIUVVGSFFTeEZRVUZGTkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMxRXNjVUpCUVhGQ01UUkNMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXNSMEZCUnpKRUxFdEJRVXQzV2l4TlFVRk5OMGdzVVVGQlVYWlVMRWRCUVVVc1UwRkJVMFFzUjBGQlJ6bENMRVZCUVVVNFFpeEZRVUZGTEVsQlFVbEJMRVZCUVVVc1RVRkJTeXhKUVVGSk4wSXNSVUZCUlRCRUxFdEJRVXR0U1N4UlFVRlJia2tzUzBGQlMzUkRMRTlCUVU4MlZTeFpRVUZaYkZjc1IwRkJSeXhQUVVGUE1rUXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV1VzVlVGQlZUTTFRaXhGUVVGRkxFTkJRVU1zVlVGQlZTeFZRVUZWTmtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXbENMRk5CUVZNM05VSXNSVUZCUlN4RFFVRkRMRk5CUTNKbU5rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV3RDTEdsQ1FVRnBRamsxUWl4RlFVRkZMRU5CUVVNc1VVRkJVVFpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGaExGZEJRVmQ2TlVJc1JVRkJSU3hEUVVGRExGTkJRVk1zVjBGQlYwTXNSVUZCUlVFc1JVRkJSU3hMUVVGTFFTeEZRVUZGTEVsQlFVa3NTVUZCU1RSQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRXdRaXhyUWtGQmEwSXNVMEZCVTNRMlFpeEhRVUZITEU5QlFVOHNSMEZCUnpaQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTnZRaXhuUWtGQlowSnFla0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVhkQ0xHRkJRV0Z3TmtJc1NVRkRNMUkyUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUmVVSXNZMEZCWXl4VFFVRlRjalpDTEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hwUWtGQmFVSTRlVUlzUzBGQlN5OTVRaXhIUVVGSExFZEJRVWRETEVkQlFVZEJMRVZCUVVVc1IwRkJSeXhQUVVGUFFTeEZRVUZGTEVkQlFVZEJMRVZCUVVVc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlN4clFrRkJhMEkyTUVJc1MwRkJTeTk1UWl4SFFVRkhMRWRCUVVjNVFpeEhRVUZIUVN4RlFVRkZMRWRCUVVjc1IwRkJSemhDTEVWQlFVVXNiVUpCUVcxQ0szbENMRXRCUVVzdmVVSXNSMEZCUnl4UFFVRlBPVUlzUlVGQlJTeEhRVUZITEVkQlFVYzRRaXhIUVVGSFFTeEZRVUZGTEVkQlFVY3NUMEZCVDBFc1JVRkJSU3hKUVVGSkxFbEJRVXNzVFVGQlRVTXNSVUZCUlN4TlFVRk5MRTFCUVUwc1NVRkJTeXhOUVVGTlFTeEZRVUZGTEUxQlFVMHNUVUZCVFN4SlFVRkxMRTFCUVUxQkxFVkJRVVVzVDBGQlR5eE5RVUZOTEVsQlFVc3NUVUZCVFVFc1JVRkJSU3haUVVGWlFTeEZRVUZGTEZkQlFWZEJMRVZCUVVVdlFpeEZRVUZGTEVkQlFVY3NUMEZCVHl0Q0xFZEJRVWMwUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVExGZEJRVmQ0TlVJc1MwRkJTM2sxUWl3NFEwRkJPRU1zUjBGQlIzbzFRaXhMUVVGTE1EVkNMR3RFUVVGclJEVTBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUT1U0c2QwTkJRWGRETVhKQ0xFdEJRVXN5TlVJc1MwRkJTeXhOUVVGTk56UkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk01TmtJc1ZVRkJWV3Q2UWl4NVEwRkJkME1zUlVGQlJ6bDNRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUT1RaQ0xGVkJRVlZ0ZWtJc1lVRkJZU3hYUVVGWExFOUJRVTgzZUVJc1MwRkJTekkxUWl4TlFVRk5OelJDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZNNU5rSXNWVUZCVlhkelFpeHBRMEZCWjBNc1JVRkJSM0J4UWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVE9UWkNMRlZCUVZWNWMwSXNiMEpCUVc5Q0xGZEJRVmNzVDBGQlQyNXlRaXhMUVVGTGVUVkNMRGhEUVVFNFEyNTVRaXhaUVVNNU0wSjRSeXhMUVVGTFlTeFJRVUZSWWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVE9UWkNMRlZCUVZVMFNTeFRRVUZUTEZkQlFWY3NUVUZCVFN4WlFVRlpkRWdzUzBGQlMzazFRaXc0UTBGQk9FTXNUVUZCVFRNMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRjRThzVDBGQlR5eFRRVUZUYm5OQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5KTEd0Q1FVRnJRak0yUWl4SFFVRkhjVWtzV1VGRE9VNTRSeXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUU1N4clFrRkJhMElzVTBGQlV6TTJRaXhIUVVGSExFOUJRVWRCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFZRVUZWZGpaQ0xFVkJRVVUyVEN4alFVRmphRXNzUzBGQlMzbEtMRXRCUVV0cGRrSXNWVUZCVlhZMlFpeEZRVUZGZVRaQ0xHOUVRVUZ2UkRVMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRPVTRzZDBOQlFTdERlbk5DTEVWQlFVVjNOa0lzSzBOQlFUaERNelJDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTERCRFFVRXdRM2hZTEVWQlFVVXNZVUZCWVRaQ0xFdEJRVXQxUnl4UFFVRlBjRWtzU1VGQlZTeDNRa0ZEYkZrMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRia2NzVjBGQlZ5eFRRVUZUY0RCQ0xFZEJRVWNzUjBGQlIwRXNZVUZCWVRaQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTXNUMEZCVDNZMlFpeEZRVUZGTEVsQlFVbERMRVZCUVVVc2FVSkJRV2xDUkN4RlFVRkZPVUlzUlVGQlJTeExRVUZwU2l4UFFVRTFTU3RDTEVkQlFVZEVMRVZCUVVVeWVVSXNNRU5CUVRCRGVqQkNMRVZCUVVVNFFpeEZRVUZGTkhsQ0xHZENRVUZuUWpWNVFpeEZRVUZGUXl4SFFVRkhSQ3hGUVVGRmFYTkNMR2REUVVGblEycHpRaXhGUVVGRmEzTkNMSE5DUVVGelFtaHpRaXhQUVVGUFJpeEhRVUZWTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0REx6UkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5WTEZkQlFWZHdNRUlzUjBGQlJ6bENMRWxCUXpsWE1rUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMDBzTmtKQlFUWkNMRk5CUVZNM05rSXNSMEZCUnl4UFFVRkhRU3hoUVVGaE5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJaMEoyTmtJc1IwRkJSVUVzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk51Unl4WFFVRlhjREJDTEVkQlFWVTJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUU3l3clEwRkJLME12TkVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUxTXNXVUZCV1hSNVFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRjRThzVDBGQlQyNXpRaXhKUVVGSlFTeEZRVUZGTkhsQ0xHdENRVU55VWk5M1FpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRUeXh6UTBGQmMwTXNVMEZCVXprMlFpeEhRVUZITEU5QlFVZEJMR0ZCUVdFMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRm5RblkyUWl4SFFVRkZRU3hGUVVGRk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMjVITEZkQlFWZHdNRUlzUjBGQlZUWkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5MTEN0RFFVRXJReTgwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVGEwSXNhVUpCUVdsQ0wzbENMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk53VHl4UFFVRlBibk5DTEVsQlFVbEJMRVZCUVVVMGVVSXNhMEpCUVdsQ0wzZENMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk51VHl4TFFVRkxkbkZDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOdVJ5eFhRVUZYZG5sQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTlJMRzlDUVVGdlFpeHJRa0ZEYWxwc05VSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMU1zWjBKQlFXZENMRU5CUVVORExGRkJRVThzUlVGQlIwTXNUVUZCU3l4RlFVRkhReXhOUVVGTExFVkJRVWRETEZsQlFWY3NSVUZCUjBNc1RVRkJTeXhGUVVGSFF5eFZRVUZUTEVWQlFVZERMRkZCUVU4c1JVRkJSM0IxUWl4TFFVRkpMRWRCUVVsMFRDeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRhVUlzZFVKQlFYVkNMRU5CUVVOb1dpeFJRVUZQTEVWQlFVZE5MRTFCUVVzc1JVRkJSelpDTEU5QlFVMHNSVUZCUjNGQ0xGRkJRVThzUlVGQlIxVXNUVUZCU3l4RlFVRkhTU3hOUVVGTExFVkJRVWRITEUxQlFVc3NSVUZCUjBzc1VVRkJUeXhGUVVGSGFVSXNVVUZCVHl4RlFVRkhVU3hQUVVGTkxFVkJRVWRKTEV0QlFVa3NSVUZCUjBrc1ZVRkJVeXhIUVVGSk1XNUNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk53TjBJc1QwRkJUeXhUUVVGVFlTeEZRVUZGUXl4RlFVRkZMMElzUjBGQkswTXNUMEZCTlVNeVJDeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRhMElzWTBGQlkzWTNRaXhQUVVGUFJpeEpRVUZYTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUyMUNMR3RFUVVGclJIZzNRaXhQUVVGUFJpeEhRVUZIUXl4RlFVRkZMMElzU1VGRGVtSXlSQ3hMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYTBJc1kwRkJZeXhUUVVGVGVqZENMRWRCUVVjc1NVRkJTVFpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOUkxHOUNRVUZ2UWpreVFpeExRVUZMYWtVc1IwRkJSeXhOUVVGTmEwUXNUVUZCVFN4eFFrRkJjVUpzUkN4RlFVRkZMRTFCUVUwc1IwRkJSMEVzUlVGQlJUSTNRaXhuUWtGQlowSTVOVUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJsQ0xIVkNRVUYxUWl4TlFVRk5kRFJDTEUxQlFVMHNZVUZCWVd4RUxFVkJRVVVzYlVOQlEyNVBOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNGQ0xHRkJRV0VzVTBGQlV6VTNRaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ6WkNMRWRCUVVjMlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUp3Unl4UFFVRlBibk5DTEVkQlFVY3NTVUZCU1Vrc1JVRkJSU3hIUVVGdFNDeFBRVUZvU0VFc1JVRkJSU3ROTEVsQlFVbHVUaXhIUVVGSExFdEJRVXRKTEVWQlFVVjVOMElzVDBGQlR6VTNRaXhIUVVGSE5FSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM0JQTEU5QlFVOXNjMElzUjBGQlIwUXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTjFRaXhyUWtGQmEwSXhOMElzUlVGQlJTeERRVUZETWpkQ0xGRkJRVkVzU1VGQlNUYzVRaXhIUVVGVk1rUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMjFDTEd0RVFVRnJSQ3hUUVVGVE1UZENMRVZCUVVVM1FpeEpRVU0xVXpCRUxFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTjVRaXh2UWtGQmIwSXNVMEZCVTJnNFFpeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCUnl4SlFVRkpNRVFzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVXpCQ0xITkNRVUZ6UWl4TlFVRk5MelJDTEUxQlFVMHNiVVJCUVcxRUxFbEJRVWs1UXl4RlFVRkZMRWRCUVhGS0xFOUJRV3hLUVN4RlFVRkZLMDBzU1VGQlNXNU9MRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMGtzVDBGQlQzUnhRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTUVJc1UwRkJVekV5UWl4SlFVRkpMRXRCUVV0SkxFVkJRVVY1TjBJc1QwRkJUelUzUWl4SFFVRkhMRXRCUVV0SExFVkJRVVV5TjBJc1VVRkJVU3hIUVVGSEx6ZENMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRkVUlzYTBKQlFXdENNVGRDTEVWQlFVVXNSMEZCUjJ4RExFZEJRVlV5UkN4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGJVSXNhMFJCUVd0RUxGTkJRVk14TjBJc1JVRkJSVGRDTEVsQlEzWmFNRVFzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVXpCQ0xHOUNRVUZ2UWl4WFFVRlhMRTlCUVU5d05rSXNTMEZCUzJZc1QwRkJUMjgzUWl4dFFrRkJiVUlzV1VGQldYSTJRaXhMUVVGTFppeFBRVUZQYnpkQ0xHdENRVUZyUW5vNFFpeFhRVUZYYjBNc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlV6UkNMR2RDUVVGblFpeFRRVUZUYmpoQ0xFVkJRVVZETEVkQlFTdEdMRTlCUVRWR05FSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDY0Vjc1QwRkJUMjV6UWl4SFFVRkhRU3hGUVVGRk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM1ZDTEd0Q1FVRnJRaXhEUVVGRE0zVkNMRWxCUVVsdVRpeEhRVUZITEVkQlFVZERMRWRCUVZVMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRiVUlzYTBSQlFXdEVMRk5CUVZNeE4wSXNTVUZETDFjMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRkbTlDTEdGQlFXRXNVMEZCVTJoVExFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkpMMElzUzBGQlN5dENMRVZCUVVVc1EwRkJReXhKUVVGSk9VSXNSVUZCUlVRc1JVRkJSVGgyUWl4alFVRmpMRWRCUVVjc1dVRkJXVGQyUWl4SFFVRkhMRTlCUVU5QkxFZEJRVWNzVVVGQlVVRXNSMEZCUnl4UlFVRlJRU3hGUVVGRkxFMUJRVTByUlN4TlFVRk5MR1ZCUVdVdlJTeEZRVUZGTEdWQlFUUkRMRWxCUVRWQ1JDeEZRVUZGTEVkQlFVYzRRaXhGUVVGRk5rSXNTMEZCUzNkYUxFMUJRVTAzVEN4UFFVRlBlRkFzUjBGQlR6ZENMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpSQ3hIUVVGSE1rUXNTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWMGdzVDBGQlQyNXpRaXhGUVVGRk4wSXNTVUZCYzBjc1QwRkJiRWMyUWl4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3RETVRoQ0xFVkJRVVV5UkN4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxITEZOQlFXZENOM05DTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOdFFpeHJSRUZCYTBRc1UwRkJVM28zUWl4RlFVRkZSQ3hKUVVOdVl6WkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk0yUWl4WlFVRlpMRk5CUVZOd09FSXNSVUZCUlVNc1IwRkJSMEVzUlVGQlJUUkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk4xUWl4clFrRkJhMElzUTBGQlEyb3pRaXhMUVVGTExGbEJRVmtzUjBGQlJ6VkZMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXNSMEZCUnpoQ0xFVkJRVVUyUWl4TFFVRkxkMW9zVFVGQlRUZE1MRTlCUVU5NFVDeEhRVUZITEVsQlFVa3NTVUZCU1RkQ0xFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSlJDeEhRVUZITWtRc1MwRkJTM2xLTEV0QlFVdHhjMElzWlVGQlpYaE1MRTlCUVU5dWMwSXNSVUZCUlRkQ0xFbEJRWE5ITEU5QlFXeEhOa0lzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5MTEN0RFFVRXJRekU0UWl4RlFVRkZNa1FzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMVlN4SlFVRkpSeXhUUVVGblFqZHpRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYlVJc2EwUkJRV3RFTEZGQlFWRjZOMElzUlVGQlJVUXNTVUZEZUZrMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRPRUlzYTBKQlFXdENMRk5CUVZOeU9FSXNSVUZCUlVNc1IwRkJhVTRzVDBGQk9VMUVMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMGtzVDBGQlQzUnhRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTUVJc1UwRkJVekV5UWl4TFFVRkxOa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVdkQ0xGRkJRVkV2TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXbENMRmRCUVZkb05FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVek5tTEZOQlFWTXZWQ3hGUVVGRkxFOUJRVTlCTEVWQlFVVXNTVUZCU1VFc1JVRkJSWFZNTEZGQlFWRXNTMEZCU3l4UFFVRlBMRXRCUVZreFNpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRiVUlzYTBSQlFXdEVMRTlCUVU4c1EwRkJReXhoUVVGaExGVkJRVlZaTEZOQlFWTnlPRUlzUjBGQlJ5eEhRVUZITEZOQlFWTkVMRXRCUTNCWk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMmRETEhGQ1FVRnhRaXhUUVVGVGRqaENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWRCUVVkQkxHRkJRV0V5UkN4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUweGRFSXNSVUZCUlRKRUxFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDJwMVFpeFJRVUZSTEVkQlFVY3NVMEZCVXl0Q0xFVkJRVVVyZEVJc1kwRkJZemwyUWl4RlFVRkZNa1FzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJsRExHVkJRV1YwSzBJc1QwRkJUeXhEUVVGRExFZEJRVWNzVDBGQlR5dEdMRXRCUVV0b1JTeEhRVUZITEUxQlFVMXBSQ3hOUVVGTkxHTkJRV05xUkN4RlFVRkZMSGREUVVGM1F5OUNMRVZCUVVVc1dVRkJXU3hIUVVGSEswSXNSVUZCUlN0MFFpeG5Ra0ZCWjBKdWMwSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMU1zWjBKQlFXZENMRWRCUVVjNU9FSXNZVUZCWVRKRUxFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbkl3UWl4RlFVRkZNa1FzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ2NFY3NUMEZCVDJwMVFpeFJRVUZSTEVkQlFVZEJMR0ZCUVdFeVJDeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJPVEpDTEVWQlFVVXlSQ3hMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBrc1QwRkJUMnAxUWl4UFFVTndaaXhMUVVGSE1rUXNTMEZCUzBjc1UwRkJVemxFTEVkQlFUaEVMRTFCUVUxblJpeE5RVUZOTEdOQlFXTnFSQ3hGUVVGRkxHRkJRV0ZFTEVWQlFVVXNjMFZCUVhORk9VSXNSVUZCUlN4WlFVRTVTMEVzUlVGQlJUSkVMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkV3UWl4VFFVRlRlRFJDTEVkQlFVZG5kVUlzZFVKQlFYRldMRTlCUVRGTWFIVkNMRVZCUVVVcmRFSXNhME5CUVd0REwzUkNMRVZCUVVWQkxFVkJRVVZuZFVJc2RVSkJRWFZDY25GQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGVsWXNTMEZCUzBjc1UwRkJVemxFTEVsQlFVa3lSQ3hMUVVGTFN5eFRRVUZUYUVVc1IwRkJSeXdyUTBGQkswTkJMRVZCUVVVc1owSkJRV2RDUVN4SFFVRlZLMElzUlVGQlJTeExRVUZMTkVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUxVXNWMEZCVjJ3d1FpeFBRVUZQYUVNc1NVRkJTU3hMUVVOMll6SkVMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5wUXl4bFFVRmxMRk5CUVZONE9FSXNSMEZCUnl4SlFVRkpOa0lzUzBGQlN6aEhMRk5CUVZNelNTeEhRVUZITEUxQlFVMXJSQ3hOUVVGTkxIbEdRVUY1Um14RUxFVkJRVVVzVjBGQlYwRXNSMEZCZFVVc1QwRkJjRVZCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFpRVUZaTnpKQ0xFVkJRVVUyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVk1UTkNMRTlCUVU5aExFbEJRVmMyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVk1Vc3NUMEZCVDI1elFpeEpRVUZKTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUydERMR05CUVdNc1UwRkJVM280UWl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJLME1zVDBGQk5VTTRRaXhGUVVGRk5FSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM0EzUWl4UFFVRlBZeXhGUVVGRkwwSXNSVUZCUlVNc1NVRkJTM1U0UWl4TFFVRkxNVFpDTEVWQlFWTkRMRWRCUTNoWk5FSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMmg2UWl4TFFVRkxMRk5CUVZOMlNDeEZRVUZGUXl4SFFVRnpReXhKUVVGSkwwSXNSMEZCZGtNNFFpeEZRVUZGTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUyNUhMRmRCUVZkd01FSXNTVUZCVnpSNVFpeGxRVUZsZWpCQ0xFVkJRVVVzUjBGQlIybERMRVZCUVVVc1UwRkJVMG9zUjBGQlJ6WkNMRXRCUVVzeVJ5eFJRVUZSZUVrc1IwRkJSelpDTEV0QlFVdDNXaXhOUVVGTk4wZ3NVVUZCVVhoVUxFVkJRVVZKTEVsQlFVbEtMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRia2NzVjBGQlYzQXdRaXhIUVVGSE4wSXNSVUZCUlRoTUxFdEJRVXR3U1N4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGNFOHNUMEZCVDI1elFpeEpRVUZKUVN4RlFVRkZRU3hGUVVGRk5IbENMR1ZCUVdVeE1FSXNSMEZCUnpKRUxFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMxVXNTVUZCU1Vjc1VVRkJVWGgzUWl4RlFVRkZPRUlzUlVGQlJVRXNSMEZCUnpaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMxVXNTVUZCU1Vjc1UwRkJVM2gzUWl4SFFVRkhPRUlzU1VGQlNUbENMRVZCUVVVc1VVRkJaME1zVDBGQmVFSXlSQ3hMUVVGTGQxb3NUVUZCVFRkSUxGRkJRVkYyVkN4RlFVRkZSeXhIUVVGVmVVSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMHNzSzBOQlFTdERlamhDTEVWQlFVVnZTaXhMUVVGTE1VWXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM0JQTEU5QlFVOXVjMElzU1VGQlNUbENMRWxCUXk5ak1rUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVeTl4UWl4UFFVRlBMRk5CUVZONFVDeEhRVUZITEU5QlFVODJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYUhwQ0xFdEJRVXN4Uml4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGJFOHNUVUZCVFhweVFpeE5RVUZOYmtJc1ZVRkJWVzFMTEUxQlFVMDFUQ3hMUVVGTE1Fd3NZVUZCWVRkSUxFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTnRReXhqUVVGakxGTkJRVk14T0VJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSVEpFTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZNdmNVSXNUMEZCVHpOT0xFdEJRVXQzV2l4TlFVRk5lbElzVFVGQlRVWXNWVUZCVlN4SlFVRmhMRTlCUVZSNFRDeEZRVUZGZHpoQ0xFdEJRVXN4TmtJc1JVRkJVemxDTEVkQlFVY3lSQ3hMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUT1U0c2QwTkJRWGRETEVkQlFVYzFjVUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3RETEZOQlFWTTFOa0lzUlVGQlJVTXNSMEZCUnl4UFFVRk5MRWxCUVVzMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VlFVRlZkazRzYzBOQlFYTkRhSFJDTEVWQlFVVkRMRWxCUXpWa05FSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVemsyUWl4VlFVRlZkWFJDTEhORFFVRnpReXhUUVVGVGFIUkNMRVZCUVVWRExFZEJRVEJOTEU5QlFYWk5ZeXhMUVVGTGVUVkNMRGhEUVVFNFF6TTBRaXhMUVVGTGVVb3NTMEZCUzJ0blFpeGhRVUZoUXl4eFEwRkJjVU0xY0VJc1MwRkJTM2xLTEV0QlFVdHJaMElzWVVGQllVTXNjVU5CUVhGRGFtRXNWMEZCVjNoU0xFZEJRVWRCTEVWQlFVVmxMRXRCUVVzeU5VSXNTMEZCUzNvMlFpeEZRVUZUWXl4TlFVTXZVbU1zUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTIxQ0xHdEVRVUZyUkN4VFFVRlRNVGRDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVbERMRVZCUVVVc1MwRkJVMmxETEVWQlFVVXNTVUZCU1Vvc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOdlF5eHZRa0ZCYjBJek9FSXNSVUZCUlVNc1IwRkRMMGtzVDBGRWEwbzBRaXhMUVVGTGRVUXNaMEpCUVdkQ2JFZ3NSMEZCUnpKRUxFdEJRVXN5Unl4UlFVRlJkRXNzUzBGQlMwRXNSVUZCUlN4RFFVRkRRU3hKUVVGSlFTeEZRVUZGTEVkQlFVY3lSQ3hMUVVGTGExVXNTVUZCU1hWVkxFdEJRVXRwUWl4VlFVRlZkbkpDTEVWQlFVVm5kVUlzWjBKQlFXZENibk5DTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSY0Zvc1JVRkJSV2xETEU5QlFVOHNZVUZCWVVnc1JVRkJSU3cyUWtGQk5rSkpMRWRCUVVjc1RVRkJUV3BETEVWQlFVVXdSQ3hMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUTDNGQ0xFOUJRVTkwVWl4SFFVRkhhME1zUjBGQlJ5eEpRVUZKZVVJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUzQlBMRTlCUVU5b2RVSXNSMEZCUnl4TFFVRkxOa0lzUlVGQlJTeEpRVUZKTjBJc1JVRkJSVUVzUlVGQlJYa3dRaXhwUWtGQmFVSTFlVUlzUlVGQlJVTXNSMEZCUjBFc1JVRkJSVzE1UWl4UFFVRlBhakJDTEVWQlFVVXNiMEpCUVc5Q09FWXNTMEZCUzJwRkxFZEJRVWMyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxITEZGQlF6ZGxMRTFCUVdFM2MwSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMHNzSzBOQlFTdERlRFpDTEVWQlFVVnFReXhKUVVGSk1FUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMjlETEc5Q1FVRnZRaXhUUVVGVE16aENMRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVVc1IwRkJSeXhIUVVGSEswSXNSVUZCUlN4SlFVRkpMRWxCUVVrNVFpeExRVUZMT0VJc1JVRkJSU3hEUVVGRExFbEJRVWswUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFVTeHZRa0ZCYjBJNU1rSXNTMEZCU3psR0xFZEJRVWNzVFVGQlRTdEZMRTFCUVUwc01rSkJRVEpDTDBVc1JVRkJSU3hOUVVGTkxFbEJRVWxwUXl4RlFVRkZTQ3hGUVVGRk9VSXNSMEZCUnpCRUxFdEJRVXQxUkN4blFrRkJaMEpvUml4TFFVRkxiRU1zUjBGQlJ5eEpRVUZKTWtRc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUyZERMSEZDUVVGeFFuWTRRaXhGUVVGRk4wSXNSVUZCUldsRExFbEJRVWtzVDBGQlQyeERMRWRCUXpkWE1rUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM1ZDTEd0Q1FVRnJRaXhUUVVGVE9UZENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVZOclF5eEZRVUZNYWtNc1JVRkJSU3hIUVVGTExFbEJRVWxwUXl4TFFVRkxTaXhGUVVGRk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOXNXQ3hGUVVGRk5IUkNMR1ZCUVdVMWRFSXNSVUZCUlN4elFrRkJjMEpxUXl4RlFVRkZhVU1zUjBGQlIwb3NSVUZCUlVrc1IwRkJSeXhKUVVGSlFTeExRVUZMU0N4RlFVRkZORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTlzV0N4RlFVRkZOSFJDTEdWQlFXVTFkRUlzUlVGQlJTeHpRa0ZCYzBKcVF5eEZRVUZGYVVNc1IwRkJSMGdzUlVGQlJVY3NSMEZCUnl4SlFVRkpRU3hMUVVGTGJFTXNSVUZCUlN4RFFVRkRMRWxCUVVsdFF5eEZRVUZGUkN4RlFVRkZOSFJDTEdOQlFXTXNSMEZCUnpOMFFpeExRVUZMVEN4RlFVRkZMRTFCUVUxclJDeE5RVUZOTEc5Q1FVRnZRamRETEVWQlFVVXNjVUpCUVhGQ1JDeEZRVUZGTEdsQ1FVRnBRbXhETEVWQlFVVnJReXhIUVVGSExFdEJRVXRETEV0QlFVdEtMRlZCUVZVNVFpeEZRVUZGYTBNc1IwRkJSMnhETEVWQlFVVnBReXhIUVVGSGJFTXNSVUZCUld0RExFZEJRVWNzVDBGQlQycERMRWRCUTNwWk1FUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM0ZETEdGQlFXRXZOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3RETEd0Q1FVRnJRaTgwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxITEZOQlFWTTNjMElzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJ4UExFMUJRVTE0Y1VJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0RExFZEJRVWN2TkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKUnl4VFFVRlROM05DTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOc1dDeEhRVUZIZUdoQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTkxMQ3REUVVFclF5eFBRVUZQTHpSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMxVXNTVUZCU1Vjc1UwRkJVemR6UWl4TFFVRkxlVW9zUzBGQlMzVjRRaXh4UWtGQmNVSXNSMEZCUjJnM1FpeExRVUZMZVVvc1MwRkJTM1Y0UWl4eFFrRkJjVUpETERaRFFVRTJReXhUUVVGVE9UaENMRVZCUVVWRExFVkJRVVV2UWl4SFFVRXdUaXhQUVVGMlRqSkVMRXRCUVV0blZpeFJRVUZSWVN4aFFVRmhOMVlzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOVHl4UFFVRlBibk5DTEVkQlFVY3NPRUpCUVRoQ05rSXNTMEZCUzJkV0xGRkJRVkZUTEZGQlFWRjZWaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUVHl4dlFrRkJiMEp3ZVVJc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTlR5eFBRVUZQYm5OQ0xFbEJRVWtzZDBOQlFTdEROa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3RETXpaQ0xFVkJRVVV2UWl4SFFVRkhMRTlCUTNoNVFqSkVMRXRCUVV0NVNpeExRVUZMZFhoQ0xIRkNRVUZ4UWtVc0swTkJRU3RETEZOQlFWTXZPRUlzUlVGQlJVTXNSMEZCTUU0c1QwRkJkazQwUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVRkV0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEhRVUZITERoQ1FVRTRRalpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhKUVVGSkxIZERRVUVyUXpaQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZExMR2xFUVVGcFJERnpRaXhKUVVOb1dUUkNMRXRCUVV0NVNpeExRVUZMZFhoQ0xIRkNRVUZ4UWtjc09FTkJRVGhETEZOQlFWTm9PVUlzUlVGQlJVTXNSMEZCTUU0c1QwRkJkazQwUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVRkV0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEhRVUZITERoQ1FVRTRRalpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhKUVVGSkxIZERRVUVyUXpaQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVkhMR2RFUVVGblJDOHlRaXhKUVVNM1dEUkNMRXRCUVV0NVNpeExRVUZMZFhoQ0xIRkNRVUZ4UWtrc2JVUkJRVzFFTEZOQlFWTnFPVUlzUlVGQlJVTXNSMEZCTUU0c1QwRkJkazQwUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVRkV0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEhRVUZITERoQ1FVRTRRalpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhKUVVGSkxIZERRVUVyUXpaQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVkxMSEZFUVVGeFJDOHpRaXhKUVVNMVdUUkNMRXRCUVV0NVNpeExRVUZMZFhoQ0xIRkNRVUZ4UWtzc05FTkJRVFJETEZOQlFWTnNPVUlzUlVGQlJVTXNSMEZCTUU0c1QwRkJkazQwUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVRkV0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEhRVUZITERoQ1FVRTRRalpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhKUVVGSkxIZERRVUVyUXpaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEyNHhRaXhKUVVOMldEUkNMRXRCUVV0NVNpeExRVUZMZFhoQ0xIRkNRVUZ4UWswc2RVUkJRWFZFTEZOQlFWTnVPVUlzUlVGQlJVTXNSMEZCTUU0c1QwRkJkazQwUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVRkV0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEhRVUZITERoQ1FVRTRRalpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhKUVVGSkxIZERRVUVyUXpaQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbE1zZVVSQlFYbEVMM2xDTEVsQlFVazBRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMTEVkQlFVZDJOMElzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzBNc01rSkJRVEpDTEVOQlFVTkRMRmRCUVZjc1lVRkJZVU1zVTBGQlV5eFhRVUZYUXl4WlFVRlpMR05CUVdORExGVkJRVlVzWVVGQllUVTNRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMVFN4dFFrRkJiVUlzVTBGQlV6RTVRaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSemhDTEVWQlFVVXlPVUlzYlVKQlFXMUNNVGxDTEVWQlFVVTBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUU1N4clFrRkJhMEo2T0VJc1MwRkJTekpFTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0UkxHZERRVUZuUXl4RFFVRkRPVmNzVFVGQlN5eEZRVUZIZVVJc1VVRkJUeXhGUVVGSFVTeFBRVUZOTEVWQlFVZEpMRXRCUVVrc1JVRkJSMGtzVlVGQlV5eEhRVU5vZDBJeGJrSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTMU1zTmtKQlFUWkNhRGhDTEV0QlFVczJaU3hWUVVGVmFVSXNhMEpCUVdsQ0xGZEJRVmNzUjBGQlJ6bG1MRXRCUVV0aExFOUJRVThzYjBKQlFYRkNhVUlzVTBGQlV5eFBRVUZOTEVWQlFVY3NTVUZCU1RORUxFVkJRVVV5UkN4VFFVRlROa2NzWTBGQll5eFBRVUZQZGtzc1JVRkJSVEJFTEZOQlFWTTJSeXhqUVVGakxFOUJRWEZGTEU5QlFUbEVka3NzUlVGQlJYbExMRmxCUVZrdlJ5eFRRVUZUTmtjc1kwRkJZeXhSUVVGUmVFc3NSVUZCUlRCTExGbEJRVmw2U3l4TFFVRk5ORUlzUzBGQlMyRXNVVUZCVVRGRExFVkJRVVU0T1VJc1kwRkJiMEkzT1VJc1JVRkJSVVFzUlVGQlJUZzVRaXhYUVVGWFFTeFhRVUZYT1RsQ0xFVkJRVVVyT1VJc1ZVRkJWV3c0UWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFNTeHJRa0ZCYTBJNU5FSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMnhQTEZGQlFXTndjMElzUlVGQlJTczVRaXhyUWtGRGJHRnVPRUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzJFc2FVTkJRV2xETEZOQlFWTnFLMElzUlVGQlJVTXNSMEZCUnl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzFNc0swSkJRU3RDTEV0QlFVczNPVUlzUlVGQlJXc3JRaXhYUVVGWGJDdENMRVZCUVVVMlN5eFpRVUZaTjBzc1JVRkJSV3NyUWl4WFFVRlhiQ3RDTEVWQlFVVXJPVUlzVlVGQlZXdzRRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUU1N4clFrRkJhMEl4TmtJc1NVRkRNMDAwUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFpTeGhRVUZoTEZOQlFWTnVLMElzUlVGQlJVTXNSMEZCUnl4SFFVRkhORUlzUzBGQlMyZFdMRkZCUVZGRExHVkJRV1VzUTBGQlF5eEpRVUZKTlZrc1JVRkJSVGhDTEVWQlFVVnZLMElzVVVGQlVYcERMR05CUVdNc1IwRkJSemsxUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFVTeG5RMEZCWjBNeEwwSXNSMEZCUnl4TlFVRk5aMFlzVFVGQlRTd3JSRUZCSzBSc1JDeEZRVUZGYnl0Q0xGRkJRVkVzUzBGQlRYWTRRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMWVN4cFEwRkJhVU5xSzBJc1JVRkJSVU1zU1VGQlNUUkNMRXRCUVV0clZTeEpRVUZKY1c1Q0xFdEJRVXRwUWl4aFFVRmhMRk5CUVZOeUswSXNSVUZCUlVNc1IwRkJSMFFzUlVGQlJYTXJRaXhWUVVGVmVqaENMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5KTEd0Q1FVRnJRakUyUWl4SlFVTnlXVFJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0dFFpeHhRa0ZCY1VJc1UwRkJVM1lyUWl4RlFVRkZReXhIUVVGSFFTeEZRVUZGUVN4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVM4d1FpeEZRVUZGTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUSkNMSGRDUVVGM1FqRXlRaXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRnhTaXgzUWtGQmQwSnNaMElzUjBGQlIyazNRaXhQUVVGUGNEVkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkUzUWl4cFFrRkJhVUpzZWtJc1NVRkJTVFJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0dlFpeHZRa0ZCYjBJc1UwRkJVM2dyUWl4RlFVRkZReXhIUVVGSFFTeEZRVUZGUVN4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVM4d1FpeEZRVUZGTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUSkNMSGRDUVVGM1FqRXlRaXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRTBTU3d3UWtGQk1FSjZaaXhIUVVGSGVTdENMRmRCUVZjMU9FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVGRDTEdsQ1FVRnBRbXg2UWl4SlFVTjJZalJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0elFpeHRRa0ZCYlVJc1UwRkJVekVyUWl4RlFVRkZReXhIUVVGSFFTeEZRVUZGUVN4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVM4d1FpeEZRVUZGTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUSkNMSGRDUVVGM1FqRXlRaXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRnBTaXg1UWtGQmVVSTVaaXhIUVVGSGVTdENMRmRCUVZjMU9FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVGRDTEdsQ1FVRnBRbXg2UWl4SlFVRkpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzNWQ0xGTkJRVk1zVTBGQlV6TXJRaXhGUVVGRlF5eEhRVUZIUkN4RlFVRkZhM2xDTEUxQlFVMHdUU3hSUVVGUkx6aENMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlV4U3l4UFFVRlBiSE5DTEVsQlFVazBRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMZVVJc1kwRkJZeXhUUVVGVE55dENMRVZCUVVWRExFZEJRVWRFTEVWQlFVVnpVaXhOUVVGTmVsQXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMGtzYTBKQlFXdENNVFpDTEV0QlEzcFpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCU3pCQ0xHTkJRV01zVTBGQlV6a3JRaXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFeVNTd3dRa0ZCTUVKNFppeEhRVUZIUXl4RlFVRkZRU3hoUVVGaE5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVUzh3UWl4RlFVRkZORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRKQ0xIZENRVUYzUWpFeVFpeEhRVUZIUkN4RlFVRkZjVGRDTEV0QlFVdDROVUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW14NlFpeEpRVUZKTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlN6SkNMRmxCUVZrc1UwRkJVeThyUWl4RlFVRkZReXhIUVVGblJDeEhRVUUzUXpSQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUk9Fa3NlVUpCUVhsQ00yWXNTMEZCVVVNc1lVRkJZVFJDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRk5CUVZNc1EwRkJReXhKUVVGSk9USkNMRVZCUVVVc2FVSkJRV2xDSzBZc1MwRkJTMmhGTEVkQlFVZEJMRVZCUVVVMFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJNa0lzZDBKQlFYZENNVEpDTEVWQlFVVXZRaXhIUVVGSE9FSXNSVUZCUlcxT0xFbEJRVWwwVEN4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk4wSXNhVUpCUVdsQ2JIcENMRWxCUXpGak5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTelJDTEZsQlFWa3NVMEZCVTJndlFpeEZRVUZGUXl4SFFVRm5SQ3hIUVVFM1F6UkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJLMGtzZVVKQlFYbENOV1lzUzBGQlVVTXNZVUZCWVRSQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZOQlFWTXNRMEZCUXl4SlFVRkpPVEpDTEVWQlFVVXNhVUpCUVdsQ0swWXNTMEZCUzJoRkxFZEJRVWRCTEVWQlFVVTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTWtJc2QwSkJRWGRDTVRKQ0xFVkJRVVV2UWl4SFFVRkhPRUlzUlVGQlJXMU9MRWxCUVVsMFRDeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMElzYVVKQlFXbENiSHBDTEVsQlFVazBRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMTmtJc1dVRkJXU3hUUVVGVGFpOUNMRVZCUVVWRExFZEJRV2RFTEVkQlFUZERORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZuU2l4NVFrRkJlVUkzWml4TFFVRlJReXhoUVVGaE5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1UwRkJVeXhEUVVGRExFbEJRVWs1TWtJc1JVRkJSU3hwUWtGQmFVSXJSaXhMUVVGTGFFVXNSMEZCUjBFc1JVRkJSVFJDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFeVFpeDNRa0ZCZDBJeE1rSXNSVUZCUlM5Q0xFZEJRVWM0UWl4RlFVRkZiVTRzU1VGQlNYUk1MRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkUzUWl4cFFrRkJhVUpzZWtJc1NVRkROV1UwUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTE9FSXNXVUZCV1N4VFFVRlRiQzlDTEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVXOUtMSGxDUVVGNVFtcG5RaXhIUVVGSFFTeEZRVUZGYlU0c1NVRkJTWFJNTEV0QlFVdDVTaXhMUVVGTGFXNUNMRzFDUVVGdFFsY3NkVUpCUVhWQ2FucENMRWxCUVVrMFFpeExRVUZMYTFVc1NVRkJTWEZ1UWl4TFFVRkxLMElzV1VGQldTeFRRVUZUYmk5Q0xFVkJRVVZETEVkQlFVYzBRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWE5LTEhsQ1FVRjVRbTVuUWl4SFFVRkhRU3hGUVVGRmJVNHNTVUZCU1hSTUxFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbGtzYVVKQlFXbENiSHBDTEVsQlFVazBRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMWjBNc1lVRkJZU3hUUVVGVGNDOUNMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhWS0xEQkNRVUV3UW5CblFpeEhRVUZIUVN4RlFVRkZiVTRzU1VGQlNYUk1MRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWxrc2FVSkJRV2xDYkhwQ0xFbEJRek5oTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMybERMR2RDUVVGblFpeFRRVUZUY2k5Q0xFVkJRVVZETEVkQlFVYzBRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWFZLTERCQ1FVRXdRbkJuUWl4SFFVRkhRU3hGUVVGRk5qZENMRTlCUVU5b05rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMGtzYTBKQlFXdENNVFpDTEVsQlEzaEpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzJ0RExHdENRVUZyUWl4VFFVRlRkQzlDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITWtRc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFMlNTeDNRa0ZCZDBJeFppeEhRVUZIUVN4RlFVRkZkUzlDTEVsQlFVbHlhRU1zUlVGQlJUSkVMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk50UWl4M1FrRkJkMEl6TWtJc1JVRkJSU3hsUVVGbE1rUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOXlXQ3hoUVVGaE5FSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDTEhORlFVRnpSWFo1UWl4RlFVRkZjVGRDTEV0QlFVdDROVUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1dTeHBRa0ZCYVVKc2VrSXNTVUZCU1VRc1JVRkJSWEUzUWl4TFFVRkxjRGRDTEdGQlFXRTBRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVJeGQwSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDV1N4cFFrRkJhVUpzZWtJc1IwRkJSMEVzWVVGQllUUkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZ1ZWtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUZENMR2xDUVVGcFFteDZRaXhIUVVOdVowSTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBJc2FVSkJRV2xDZEhoQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRXlRaXgzUWtGQmQwSXhNa0lzUzBGQlN6UkNMRXRCUVV0clZTeEpRVUZKY1c1Q0xFdEJRVXR2UXl4alFVRmpMRk5CUVZONEwwSXNSVUZCUlVNc1IwRkJSelJDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSZDBvc01FSkJRVEJDY21kQ0xFZEJRVWRCTEVWQlFVVnROMElzUzBGQlMzUTFRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKWExIVkNRVUYxUW1wNlFpeEpRVUZKTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMzRkRMR0ZCUVdFc1UwRkJVM292UWl4RlFVRkZReXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRjVTaXd3UWtGQk1FSjBaMElzUjBGQlIwRXNSVUZCUlcxT0xFbEJRVWwwVEN4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSlhMSFZDUVVGMVFtcDZRaXhKUVVGSlFTeEZRVUZGTkVJc1MwRkJTelJDTEcxQ1FVRnRRbnBFTEVWQlFVVXdVaXhoUVVGaExGRkJRVkY2VWl4SlFVTXZZVFJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0elF5eHBRa0ZCYVVJc1UwRkJVekV2UWl4RlFVRkZReXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRjVTaXd3UWtGQk1FSjBaMElzUjBGQlIwRXNSVUZCUlRJdlFpeExRVUZMT1RsQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZFRMRzlDUVVGdlFqbHpRaXhKUVVGSlFTeEZRVUZGTkVJc1MwRkJTelJDTEcxQ1FVRnRRbnBFTEVWQlFVVXdVaXhoUVVGaExGRkJRVkY2VWl4SlFVRkpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzNkRExHZENRVUZuUWl4VFFVRlROUzlDTEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYRkpMR2xDUVVGcFFteG1MRWRCUVVkRExFVkJRVVZCTEdGQlFXRTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTHpCQ0xFVkJRVVUwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1rSXNkMEpCUVhkQ01USkNMRWRCUVVkRUxFVkJRVVZ4TjBJc1MwRkJTM2cxUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk4wSXNhVUpCUVdsQ2JIcENMRWxCUXk5Wk5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTM2xETEdWQlFXVXNVMEZCVXpjdlFpeEZRVUZGUXl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZ4U1N4cFFrRkJhVUpzWml4SFFVRkhReXhGUVVGRlFTeGhRVUZoTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVTOHdRaXhGUVVGRk5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVEpDTEhkQ1FVRjNRakV5UWl4SFFVRkhSQ3hGUVVGRk9DOUNMRTlCUVU5cUswSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVGRDTEdsQ1FVRnBRbXg2UWl4TFFVRkxORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCU3pKRExHZENRVUZuUWl4VFFVRlRMeTlDTEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYRkpMR2xDUVVGcFFteG1MRWRCUVVkRExFVkJRVVZCTEdGQlFXRTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTHpCQ0xFVkJRVVUwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1rSXNkMEpCUVhkQ01USkNMRWRCUVVkRUxFVkJRVVYxVEN4UlFVRlJNVW9zUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW14NlFpeExRVU12V2pSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVczBReXhoUVVGaExGTkJRVk5vWjBNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFVkJRVVZwUXl4SFFVRnRSaXhQUVVGb1Jrb3NSVUZCUlVFc1lVRkJZVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGb01VSXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRXlRaXgzUWtGQmQwSXpNa0lzU1VGQlZVTXNSMEZCUnpSQ0xFdEJRVXRtTEZGQlFWRTJSeXhMUVVGTE9VWXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVGRDTEdsQ1FVRnBRbTU2UWl4SFFVRkhPVUlzUlVGQlJUSkVMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQycDFRaXhIUVVGSExFZEJRVWRETEVWQlFVVnBReXhKUVVGSmVVSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTelpETEc5Q1FVRnZRaXhUUVVGVGFtZERMRVZCUVVWRExFZEJRVWNzVDBGQlR6UkNMRXRCUVV0clZTeEpRVUZKY1c1Q0xFdEJRVXM0UXl4blFrRkJaMEpzWjBNc1JVRkJSVU1zUlVGQlJTeGpRVUZqTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlN6aERMR2RDUVVGblFpeFRRVUZUYkdkRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVTg0UWl4RlFVRkZhMmRETEdkQ1FVRm5RbklyUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFNTeHJRa0ZCYTBJeE5rSXNSMEZCUnk5Q0xFbEJRemxpTWtRc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlN5dERMRzlDUVVGdlFpeFRRVUZUYm1kRExFZEJRVWNzU1VGQlNTeGpRVUZqYVVVc1MwRkJTMnBGTEVWQlFVVTJSU3hOUVVGTkxFMUJRVTB6UWl4TlFVRk5MSE5GUVVGelJTeEpRVUZKYWtRc1JVRkJSVFJDTEV0QlFVdG1MRTlCUVU4eWMwSXNTVUZCU1Vvc1owSkJRV2RDY25SQ0xFZEJRWGRQTEU5QlFYSlBRU3hGUVVGRkxFbEJRVWsyUWl4TFFVRkxaaXhQUVVGUGN5OUNMRTlCUVZGNGRVSXNUMEZCVHl4WFFVRlhMMUFzUzBGQlMyWXNUMEZCVHpKelFpeEpRVUZKUml4blFrRkJaMEowZEVJc1NVRkJTVFJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVVzeVFpeFpRVUZaTHl0Q0xFVkJRVVUyUWl4TFFVRkxlVW9zUzBGQlMzVjRRaXh4UWtGQmNVSkxMRFJEUVVFMFEzSTNRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFSTEV0QlFVc3NiVUpCUVcxQ2JuTkNMRWxCUVZkRUxFZEJRVWMyUWl4TFFVRkxObkJDTEU5QlFVOHlWU3gzUWtGQmRVSXNSVUZCUjNnclFpeExRVUZMTm5CQ0xFOUJRVTgwVlN3clFrRkJPRUlzUlVGQlIzb3JRaXhMUVVGTE5uQkNMRTlCUVU4MlZTeFJRVUZSTEVOQlFVTkRMRXRCUVVzc1MwRkJWVE1yUWl4TFFVRkxObkJDTEU5QlFVOXBTU3hYUVVGWE9YaENMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5ETEZkQlFWYzVlRUlzUzBGQlN6WndRaXhQUVVGUGEwa3NVMEZCVXk5NFFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRSU3hUUVVGVEwzaENMRXRCUVVzMmNFSXNUMEZCVDIxSkxEQkNRVUV3UW1oNVFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRSeXd3UWtGQk1FSm9lVUlzUzBGQlN6WndRaXhQUVVGUGNVa3NkMEpCUVhkQ2JIbENMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5MTEhkQ1FVRjNRbXg1UWl4TFFVRkxObkJDTEU5QlFVOXpTU3h6UWtGQmMwSnVlVUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTAwc2MwSkJRM0l6UW01NVFpeExRVUZMTm5CQ0xFOUJRVThyVlN4TFFVRkxMRk5CUVZONlowTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4RlFVRkZPRUlzUlVGQlJXbENMRTFCUVUwc1RVRkJUVGxETEVWQlFVVXNSMEZCUjJsRExFVkJRVVZSTEUxQlFVMXVRaXhWUVVGVmJVc3NUVUZCVFRWTUxFdEJRVXN3VEN4VlFVRlZMRWRCUVVkMFNpeEZRVUZGUkN4UlFVRlJMRVZCUVVWcVF5eEZRVUZGYVVNc1VVRkJVV2hETEVkQlFVZEVMRVZCUVVWdFJTeFJRVUZSYWtNc1JVRkJSV2xETEZGQlFWRXNUMEZCVDJ4RkxFVkJRVVZFTEVWQlFVVnhTaXhMUVVGTExFOUJRVTh4Uml4TFFVRkxObkJDTEU5QlFVOW5WaXh0UWtGQmJVSXNVMEZCVXpGblF5eEhRVUZITEU5QlFVOUJMRVZCUVVWMVRDeFJRVUZSTEdGQlFXRXNTMEZCUzBFc1VVRkJVU3hoUVVGaExFdEJRVXN4U2l4TFFVRkxObkJDTEU5QlFVOTFTU3h2UWtGQmIwSndlVUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTA4c2IwSkJRVzlDY0hsQ0xFdEJRVXMyY0VJc1QwRkJUMmxXTEdOQlFXTXNVMEZCVXpOblF5eEhRVUZITEU5QlFVOHNSMEZCUjBFc1JVRkJSVWNzVVVGQlVUQkNMRXRCUVVzMmNFSXNUMEZCVDI1WUxGRkJRVkV4VXl4TFFVRkxObkJDTEU5QlFVOTFTU3h2UWtGQmIwSndlVUlzUzBGQlN6WndRaXhQUVVGUGExWXNkMEpCUVhkQ0xGTkJRVk0xWjBNc1IwRkJSeXhQUVVGUE5rSXNTMEZCU3pad1FpeFBRVUZQZFVrc2IwSkJRVzlDY0hsQ0xFdEJRVXMyY0VJc1QwRkJUMjFXTEZOQlFWTTNaME1zUzBGRGNtcENOa0lzUzBGQlN6WndRaXhQUVVGUGIxWXNXVUZCV1dvdlFpeExRVUZMTm5CQ0xFOUJRVTlyVml4M1FrRkJkMEl2SzBJc1MwRkJTelp3UWl4UFFVRlBjVllzY1VKQlFYRkNMRk5CUVZNdlowTXNSMEZCUnl4UFFVRlBMR0ZCUVdGcFJTeExRVUZMYWtVc1NVRkJTVFpDTEV0QlFVczJjRUlzVDBGQlQzTldMRkZCUVZFc1UwRkJVMmhvUXl4SFFVRkhMRTlCUVU4c1dVRkJXV2xGTEV0QlFVdHFSU3hKUVVGSk5rSXNTMEZCU3pad1FpeFBRVUZQZFZZc1ZVRkJWU3hUUVVGVGFtaERMRWRCUVVjc1QwRkJUeXhUUVVGVGFVVXNTMEZCUzJwRkxFbEJRVWsyUWl4TFFVRkxObkJDTEU5QlFVOTNWaXhsUVVGbExGTkJRVk5zYUVNc1IwRkJSeXhQUVVGUExHVkJRV1ZwUlN4TFFVRkxha1VzU1VGQlNUWkNMRXRCUVVzMmNFSXNUMEZCVDNsV0xGRkJRVkVzVTBGQlUyNW9ReXhIUVVGSExFMUJRVTBzUzBGQlMwRXNSMEZCUnpaQ0xFdEJRVXMyY0VJc1QwRkJUekJXTEdOQlFXTXNVMEZCVTNCb1F5eEhRVUZITEU5QlFVOHNSMEZCUjBFc1JVRkJSVWNzVVVGQlVTeExRVUZMU0N4SFFVRkhMRXRCUVV0QkxFZEJRVWNzUzBGQlZVRXNSMEZCUnl4TFFVRlZRU3hIUVVOc1pEWkNMRXRCUVVzMmNFSXNUMEZCVHpKV0xHTkJRV01zVTBGQlUzSm9ReXhIUVVGSExFOUJRVTlCTEVWQlFVVjFUQ3hSUVVGUkxHbENRVUZwUWl4TlFVRk5NVW9zUzBGQlN6WndRaXhQUVVGUE5GWXNjVUpCUVhGQ0xGTkJRVk4wYUVNc1IwRkJSeXhQUVVGUFFTeEZRVUZGZFV3c1VVRkJVU3huUWtGQlowSXNUMEZCVHpGS0xFdEJRVXMyY0VJc1QwRkJUelpXTEc5Q1FVRnZRaXhUUVVGVGRtaERMRWRCUVVjc1QwRkJUMEVzUlVGQlJYVk1MRkZCUVZFc1YwRkJWeXhOUVVGTk1Vb3NTMEZCU3pad1FpeFBRVUZQT0ZZc1owSkJRV2RDTEZOQlFWTjRhRU1zUjBGQlJ5eFBRVUZQUVN4RlFVRkZkVXdzVVVGQlVTeGxRVUZsTEUxQlFVMHhTaXhMUVVGTE5uQkNMRTlCUVU4clZpeDFRa0ZCZFVJc1UwRkJVM3BvUXl4SFFVRkhMRTlCUVU5QkxFVkJRVVYxVEN4UlFVRlJMR05CUVdNc1MwRkJTMEVzVVVGQlVTd3lRa0ZCTWtJc1MwRkJTekZLTEV0QlFVczJjRUlzVDBGQlQzZEpMRXRCUVV0eWVVSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMUVzUzBGRGFHVnllVUlzUzBGQlN6WndRaXhQUVVGUFoxY3NVMEZCVXl4VFFVRlRNV2hETEVkQlFVY3NUMEZCVDBFc1JVRkJSWFZNTEZGQlFWRXNZVUZCWVN4TFFVRkxNVW9zUzBGQlN6WndRaXhQUVVGUGFWY3NWVUZCVlN4VFFVRlRNMmhETEVkQlFVY3NUMEZCVDBFc1JVRkJSWFZNTEZGQlFWRXNZVUZCWVN4TFFVRkxNVW9zUzBGQlN6WndRaXhQUVVGUGIwa3NkVUpCUVhWQ2FubENMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5KTEhWQ1FVTnFUV3A1UWl4TFFVRkxObkJDTEU5QlFVOXJWeXh2UWtGQmIwSXNVMEZCVXpWb1F5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEhRVUZIT0VJc1IwRkJSME1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1VRc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNVTXNSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlRaQ0xFVkJRVVZuZFVJc1kwRkJZMjVuUWl4TlFVRk5NMUFzUjBGQlIydERMRVZCUVVWSUxFVkJRVVVyZEVJc1kwRkJZMjVuUWl4TlFVRk5NMUFzUjBGQlIyMURMRVZCUVVWclFpeExRVUZMUlN4SlFVRkpkRVFzUlVGQlJXZERMRTlCUVU5RExFVkJRVVZFTEZGQlFWRjFRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVnlRaXhGUVVGRmNVSXNTVUZCU1N4RFFVRkRlRVFzUlVGQlJVTXNSVUZCUlhWRUxFZEJRVWNzU1VGQlNTdE1MRVZCUVVWeVRpeEZRVUZGYzBJc1IwRkJSeXhIUVVGSGVFUXNSMEZCUjNWUUxFVkJRVVVzVDBGQlQzcE9MRVZCUVVVNFpTeFRRVUZUTldkQ0xFVkJRVVVzUzBGQlN6SnFReXhOUVVGTk4yaERMRXRCUVV0RExFVkJRVVUyWlN4VFFVRlRjbElzUlVGQlJTeExRVUZMYnpCQ0xFMUJRVTAxYUVNc1NVRkJTVVFzUlVGQlJVTXNSMEZCUjBRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWMVVDeEhRVUZITEVWQlFVVXNSVUZCUlN4UFFVRlBkRkFzUlVGQlJXZERMRkZCUVZGRExFVkJRVVZFTEU5QlFVOW9ReXhGUVVGRlowTXNUMEZCVDBNc1JVRkJSVVFzVDBGQlQwZ3NSVUZCUlVNc1IwRkJSeXhGUVVGRkxFZEJRVWMwUWl4TFFVRkxObkJDTEU5QlFVOXZWeXhuUWtGQlowSXNVMEZCVXpsb1F5eEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMTm5CQ0xFOUJRVTlyVnl4dlFrRkJiMEkxYUVNc1JVRkJSVU1zUlVGQlJTeGhRVU12WWpSQ0xFdEJRVXMyY0VJc1QwRkJUM0ZYTEd0Q1FVRnJRaXhUUVVGVEwyaERMRVZCUVVWRExFZEJRVWNzVDBGQlR6UkNMRXRCUVVzMmNFSXNUMEZCVDJ0WExHOUNRVUZ2UWpWb1F5eEZRVUZGUXl4RlFVRkZMRzFDUVVGdFFqUkNMRXRCUVVzMmNFSXNUMEZCVDNOWExHZENRVUZuUW01blF5eExRVUZMTm5CQ0xFOUJRVTl4Vnl4clFrRkJhMEpzWjBNc1MwRkJTelp3UWl4UFFVRlBkVmNzVlVGQlZTeFRRVUZUYW1sRExFZEJRVWNzVDBGQlQzVjZRaXh0UWtGQmJVSnlla0lzVDBGQlQwWXNTMEZCU3paQ0xFdEJRVXMyY0VJc1QwRkJUM2RYTEZWQlFWVXNVMEZCVTJ4cFF5eEhRVUZITEU5QlFVODJNVUlzYlVKQlFXMUNOekZDTEVWQlFVVjFUQ3hSUVVGUkxFMUJRVTBzVDBGQlR6RktMRXRCUVVzMmNFSXNUMEZCVDNsSkxGbEJRVmwwZVVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUxTXNXVUZETlZkMGVVSXNTMEZCU3pad1FpeFBRVUZQTUVrc1YwRkJWeXhUUVVGVGNEQkNMRVZCUVVWRExFZEJRWGRJTEU5QlFYSklSQ3hGUVVGRk5rSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMVVzVjBGQlYzQXdRaXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTelp3UWl4UFFVRlBNbFVzZVVKQlFYbENjbWRETEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTVVvc1MwRkJTelp3UWl4UFFVRlBlVmNzVFVGQlRTeFhRVUZyUW01cFF5eEhRVUZITmtJc1MwRkJTelp3UWl4UFFVRlBlVmNzVFVGQlRTeExRVUZMZEdkRExFdEJRVXMyY0VJc1QwRkJUekJYTEdsQ1FVRnBRaXhUUVVGVGNHbERMRWRCUVVjc1QwRkJUelpDTEV0QlFVczJjRUlzVDBGQlR6TllMRk5CUVZNdlZDeEZRVUZGTEUxQlFVMDJRaXhMUVVGTE5uQkNMRTlCUVU4MFZTd3JRa0ZCSzBJc1lVRkJZWG9yUWl4TFFVRkxaaXhQUVVGUFpTeExRVUZMTm5CQ0xFOUJRVTh5Vnl3d1FrRkJNRUp5YVVNc1IwRkJSelpDTEV0QlFVczJjRUlzVDBGQlR6UlhMSGxDUVVGNVFuUnBReXhIUVVGSFFTeEhRVU0zV2paQ0xFdEJRVXMyY0VJc1QwRkJUelpYTERaQ1FVRTJRaXhUUVVGVGRtbERMRVZCUVVWRExFZEJRVWNzVDBGQlR6UkNMRXRCUVVzMmNFSXNUMEZCVHpOWUxGTkJRVk12VkN4RlFVRkZMRXRCUVVzMlFpeExRVUZMTm5CQ0xFOUJRVTh5Vnl3d1FrRkJNRUp5YVVNc1JVRkJSVU1zUjBGQlIwUXNSMEZEY2trMlFpeExRVUZMTm5CQ0xFOUJRVTh5Vnl3d1FrRkJNRUlzVTBGQlUzSnBReXhGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGRkxFTkJRVU1zVVVGQlVTeEpRVUZKTEU5QlFVOHNTVUZCU1N4UFFVRlBMRWxCUVVrc1UwRkJVeXhMUVVGVFF5eEZRVUZGT0VJc1JVRkJSVUVzUlVGQlJYVkxMR05CUVdNc1QwRkJUek5KTEV0QlFVdG1MRTlCUVU4MlF5eFRRVUZUTmtjc1kwRkJZeXhQUVVGUExFOUJRVTk0U3l4RlFVRkZkVXdzVVVGQlVURktMRXRCUVVzMmNFSXNUMEZCVHpoWExITkNRVUZ4UWl4VFFVRlRlR2xETEVWQlFVVkRMRWRCUVVjc1NVRkJTVWNzUlVGQlJXeERMRVZCUVVVNFFpeEhRVUZITEU5QlFVZEpMRWxCUVZjc1MwRkJTMGdzUlVGQlJUaExMRTlCUVU4c1MwRkJTemxMTEVWQlFVVjNhVU1zVDBGQlR5eEpRVUZKZUdsRExFVkJRVVZ0VGl4UFFVRlBMRWxCUVVsNU1FSXNUVUZCVFRWb1F5eExRVUZMUnl4RlFVRkZSaXhQUVVGUGVXVXNZVUZCWVRGbExFdEJRVXRITEVsQlFVbDVRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMWlN4aFFVRmhhR2RETEVWQlFVVXdSQ3hMUVVGTGVVb3NTMEZCUzNWNFFpeHhRa0ZCY1VKRExEWkRRVUUyUTJvM1FpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMVJMRXRCUVVzc2RVSkJRM0JsY0hOQ0xFVkJRVVVzVFVGQlRVa3NSVUZCUldwRExFVkJRVVV5TDBJc1YwRkJWelJGTEZWQlFWVTVORUlzVFVGQlRTeEhRVUZITEVsQlFWY3hUQ3hGUVVGRk9FSXNSMEZCUjBrc1QwRkJTM2xDTEV0QlFVczJjRUlzVDBGQlR6UlhMSGxDUVVGNVFpeFRRVUZUZEdsRExFZEJRVWNzVDBGQlQwRXNSVUZCUlhWTUxGRkJRVkVzWTBGQllTeFRRVUZUZGt3c1JVRkJSVGxDTEVkQlFVY3NUMEZCVDBFc1IwRkJSeXhKUVVGTExFMUJRVTBzVFVGQlRTeEpRVUZKTEVsQlFVc3NTMEZCU3l4TlFVRk5MRWxCUVVrc1NVRkJTeXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZMTEU5QlFVOHNUVUZCVFN4SlFVRkpMRkZCUVZFc1RVRkJUU3hMUVVGTFFTeEZRVUZGTmswc1QwRkJUeXhMUVVGTE4wMHNSVUZCUlhWclF5eFBRVUZQTEVsQlFVbDJhME1zUlVGQlJXdFFMRTlCUVU4c1NVRkJTWGt3UWl4TlFVRk5NMnBETEVsQlFVazRRaXhGUVVGRlJTeFBRVUZQZVdVc1lVRkJZWHBuUWl4UlFVRlBNa1FzUzBGQlN6WndRaXhQUVVGUE9GY3NjVUpCUVhGQ0xHdENRVUZyUWpOblF5eExRVUZMTm5CQ0xFOUJRVTlyU2l4cFFrRkJhVUlzVTBGQlV6VXdRaXhGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTE5uQkNMRTlCUVU5NVNTeFpRVUZaYmpCQ0xFVkJRVVYxVEN4UlFVRlJMRTFCUVUwc1YwRkJWM1JNTEVsQlEyNW1ORUlzUzBGQlN6WndRaXhQUVVGUGFWZ3NaVUZCWlN4VFFVRlRNMmxETEVkQlFVY3NUMEZCVDBFc1JVRkJSWFZNTEZGQlFWRXNZMEZCWXl4TFFVRkxNVW9zUzBGQlN6WndRaXhQUVVGUE5sVXNVVUZCVVVNc1QwRkJUek1yUWl4TFFVRkxObkJDTEU5QlFVOXJXQ3haUVVGWkxGTkJRVk0xYVVNc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkswSXNSVUZCUlVVc1QwRkJUMmhETEVWQlFVVXNSVUZCUlVFc1JVRkJSVVFzUlVGQlJVTXNTVUZCU1N4RFFVRkRMRWxCUVVscFF5eEZRVUZGTEVkQlFVZHNReXhGUVVGRkswSXNSVUZCUlVFc1JVRkJSVGhMTEU5QlFVODFUU3hIUVVGSExFZEJRVWMyUWl4RlFVRkZLMHNzVDBGQlR5eEpRVUZKTTBzc1IwRkJSMG9zUlVGQlJTdExMRTlCUVU4dlN5eEZRVUZGUnl4UFFVRlBMRWxCUVVsRExFVkJRVVVzVDBGQlQwb3NSVUZCUlhORUxGVkJRVlVzUlVGQlJYUkVMRVZCUVVWSExFOUJRVThzUjBGQlJ5eFBRVUZQU0N4SFFVRkhOa0lzUzBGQlN6WndRaXhQUVVGUGJWZ3NVMEZCVXl4VFFVRlROMmxETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZ2U0N4UFFVRnFTRUVzU1VGQlNUaENMRVZCUVVVMlFpeExRVUZMTm5CQ0xFOUJRVTh3Vnl4cFFrRkJhVUp3YVVNc1NVRkJTVUVzUlVGQlJVY3NUMEZCVDBZc1NVRkJTVVFzUlVGQlJVRXNSVUZCUlhORUxGVkJRVlVzUlVGQlJYSkVMRVZCUVVVc1IwRkJSeXhQUVVGUEwwSXNTVUZCU1RoQ0xFVkJRVVUyUWl4TFFVRkxObkJDTEU5QlFVOHdTU3hYUVVGWGNEQkNMRWxCUVZkQkxFZEJRM2hpTmtJc1MwRkJTelp3UWl4UFFVRlBiMWdzWlVGQlpTeFRRVUZUT1dsRExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEhRVUV3UXl4SFFVRjJRMFFzU1VGQlNUaENMRVZCUVVVMlFpeExRVUZMTm5CQ0xFOUJRVTh3Vnl4cFFrRkJhVUp3YVVNc1NVRkJUemRDTEVkQlFVYzJRaXhGUVVGRlJ5eFBRVUZQUml4RlFVRkZMRU5CUVVNNVFpeEZRVUZGT0VJc1NVRkJTVGxDTEVWQlFVVTRRaXhIUVVGSExFbEJRVWxITEVWQlFVVktMRVZCUVVWSExFOUJRVTlvUXl4RlFVRkZOa0lzUlVGQlJVRXNSVUZCUlhORUxGVkJRVlVzUlVGQlJYSkVMRVZCUVVVNVFpeEhRVUZITEUxQlFVMDJRaXhGUVVGRmMwUXNWVUZCVld4RUxGRkJRVkZLTEVWQlFVVkhMRTlCUVU5R0xFbEJRVWs1UWl4RlFVRkZiMFFzUzBGQlN6WmpMRTFCUVUxdVpTeEZRVUZGTEVkQlFVZEhMRVZCUVVWS0xFVkJRVVZITEU5QlFVOW9ReXhGUVVGRk5rSXNSVUZCUlVFc1JVRkJSWE5FTEZWQlFWVXNSVUZCUlc1R0xFVkJRVVU0UWl4RlFVRkZMRWRCUVVjc1RVRkJUVVFzUlVGQlJYTkVMRlZCUVZWc1JDeEpRVUZ4UXl4UFFVRnFRMnhETEVsQlFVazRRaXhGUVVGRk5rSXNTMEZCU3pad1FpeFBRVUZQTUVrc1YwRkJWM0F3UWl4SlFVRlhRU3hIUVVGSE5rSXNTMEZCU3pad1FpeFBRVUZQY1Znc2IwSkJRVzlDTEVOQlFVTXNTMEZCVHl4TlFVRk5MRXRCUVVzc1RVRkJUU3hMUVVGTExFMUJRVTBzUzBGQlN5eE5RVUZOTEV0QlFVc3NUVUZCVFN4TFFVRkxMRTFCUVUwc1MwRkJUeXhSUVVGUkxFbEJRVWtzVFVGQlRTeExRVUZMTEU5QlFVOHNTVUZCU1N4WFFVRlhiR2hETEV0QlFVczJjRUlzVDBGQlQzTllMR1ZCUVdVc1EwRkJReXhKUVVGSkxFOUJRemxsYm1oRExFdEJRVXMyY0VJc1QwRkJUM1ZZTEUxQlFVMHNVMEZCVTJwcVF5eEhRVUZIUVN4RlFVRkZSU3hQUVVGUFJpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hEUVVGRExFdEJRVXN2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZSeXhQUVVGUGFrTXNTVUZCU1N4RFFVRkRMRWxCUVVsRExFVkJRVVUyUWl4RlFVRkZLMHNzVDBGQlR6ZE5MRWRCUVVkclF5eEZRVUZGYWtNc1JVRkJSWE5uUWl4WFFVRlhMRWRCUVVkNFpTeEZRVUZGTDBJc1JVRkJSU3hIUVVGSE1rUXNTMEZCU3pad1FpeFBRVUZQY1Znc2IwSkJRVzlDTld0RExFdEJRVXNzUjBGQlIybERMRWRCUVVjc1NVRkJTVUVzUlVGQlJXcERMRVZCUVVVd1JDeExRVUZMTm5CQ0xFOUJRVTkzV0N4WFFVRlhMMnRETEVsQlFXZENMRTlCUVZvNFFpeEZRVUZGWjBzc1MwRkJTeXhMUVVGWmFFc3NSVUZCUlhOSUxFdEJRVXNzUzBGQlN6RkdMRXRCUVVzMmNFSXNUMEZCVDNsWUxHRkJRV0VzVTBGQlUyNXFReXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SFFVRkhMMElzUlVGQlJTeEZRVUZGUVN4RlFVRkZPRUlzUlVGQlJVY3NUMEZCVDJwRExFbEJRVWtyUWl4RlFVRkZMMElzUjBGQlJ6SkVMRXRCUVVzMmNFSXNUMEZCVDNkWUxGZEJRVmRzYWtNc1JVRkJSU3RMTEU5QlFVODNUU3hKUVVGSkxFOUJRVThyUWl4RlFVRkZjMGdzUzBGQlN5eExRVU5zVnpGR0xFdEJRVXMyY0VJc1QwRkJUM2RZTEZkQlFWY3NVMEZCVTJ4cVF5eEhRVUZITEVkQlFVZEJMRXRCUVVzMlFpeExRVUZMTm5CQ0xFOUJRVTl6V0N4bFFVRmxMRTlCUVU5dWFFTXNTMEZCU3pad1FpeFBRVUZQYzFnc1pVRkJaV2hxUXl4SFFVRkhMRWRCUVVkQkxFdEJRVXMyUWl4TFFVRkxObkJDTEU5QlFVOXhXQ3h2UWtGQmIwSXNUMEZCVDJ4b1F5eExRVUZMTm5CQ0xFOUJRVTl6V0N4bFFVRmxhR3BETEVkQlFVYzJRaXhMUVVGTE5uQkNMRTlCUVU5eFdDeHZRa0ZCYjBJdmFVTXNSMEZCUnl4SlFVRkpReXhGUVVGRlJDeEZRVUZGZVdVc1YwRkJWeXhIUVVGSExFZEJRVWNzUjBGQlIzaGxMRWRCUVVjc1NVRkJTVUVzUlVGQlJTeEpRVUZKTDBJc1JVRkJSVGhDTEU5QlFWVXNTVUZCU1VNc1IwRkJUUzlDTEVWQlFVVXNUMEZCVFN4SFFVRkhLMElzUjBGQlJ5eEpRVUZKUVN4TFFVRkZMMElzUjBGQlJ5eFBRVUZUUVN4RlFVRkZMRTFCUVUwc1MwRkJTeXRDTEVsQlFVa3ZRaXhIUVVGSExFMUJRVXRCTEVkQlFVY3JRaXhGUVVGRmIwa3NVMEZCVXl4SlFVRkpjM3BDTEdOQlFXTXNUMEZCVHprMVFpeExRVUZMTm5CQ0xFOUJRVTl6V0N4bFFVRmxhR3BETEVkQlFVYzVRaXhIUVVGSE1rUXNTMEZCU3pad1FpeFBRVUZQTTFnc1UwRkJVMnhUTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZNelppeFRRVUZUYkZNc1MwRkJTelp3UWl4UFFVRlBiVW9zZDBKQlFYZENhSHBDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOdFFpeDNRa0ZEZG1kQ2FIcENMRXRCUVVzMmNFSXNUMEZCVHpCWUxGRkJRVkVzVTBGQlUzQnFReXhGUVVGRlF5eEhRVUZITEU5QlFVOUVMRWRCUVVkRExFVkJRVVZFTEVWQlFVVnBRaXhOUVVGTmFFSXNSMEZCUjBVc1QwRkJUeXhGUVVGRkxFZEJRVWN3UWl4TFFVRkxObkJDTEU5QlFVOXdVQ3hUUVVGVExGTkJRVk4wWXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRk5rSXNSVUZCYzBVc1QwRkJjRVVzUjBGQlIwTXNSMEZCUjBFc1JVRkJSVVFzUlVGQlJVY3NVVUZCVVN4RlFVRkZha01zU1VGQlNVTXNSVUZCUlRaQ0xFVkJRVVZ2VGl4UFFVRlBMRVZCUVVWdVRpeEhRVUZIUkN4RlFVRkZiMDRzVDBGQlQyNU9MRVZCUVVVdlFpeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQwWXNSVUZCUlM5Q0xFbEJRVmRETEVkQlFVY3dSQ3hMUVVGTE5uQkNMRTlCUVU5cVdDeFBRVUZQTEZOQlFWTjZWU3hGUVVGRlF5eEhRVUZITEU5QlFVOUVMRVZCUVVWMVRDeFJRVUZSZEV3c1JVRkJSU3hMUVVGTE5FSXNTMEZCU3pad1FpeFBRVUZQTWxnc1ZVRkJWU3hUUVVGVGNtcERMRVZCUVVWRExFZEJRV2xFTEU5QlFUbERRU3hGUVVGRkxFbEJRVWx4UWl4UFFVRlBUeXhMUVVGTE5uQkNMRTlCUVU4MFdDeGhRVUZoY21wRExFZEJRVWNzUzBGQldVUXNSVUZCUlhWTUxGRkJRVkYwVEN4RlFVRkZMRXRCUVVzMFFpeExRVUZMTm5CQ0xFOUJRVTgyV0N4WFFVRlhMRk5CUVZOMmFrTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFXbEVMRTlCUVRsREswSXNSVUZCUlN4SlFVRkpjVUlzVDBGQlQwOHNTMEZCU3pad1FpeFBRVUZQTkZnc1lVRkJZWEpxUXl4SFFVRkhMRXRCUVZsRUxFVkJRVVYxVEN4UlFVRlJkRXdzUlVGQlJTOUNMRVZCUVVWeFRpeFJRVUZSTEUxQlFVMHNWVUZETTJReFNpeExRVUZMTm5CQ0xFOUJRVTgwV0N4aFFVRmhMRk5CUVZOMGFrTXNSMEZCUnl4UFFVRlBSU3hQUVVGUFJpeEhRVUZIZFV3c1VVRkJVU3huUTBGQlowTXNVVUZCVVVFc1VVRkJVU3hSUVVGUkxGVkJRVlV4U2l4TFFVRkxObkJDTEU5QlFVODFUaXhQUVVGUE5XUXNUMEZCVDFRc1ZVRkJWWEZsTEU5QlFVOHNVMEZCVXpsa0xFVkJRVVZETEVkQlFVY3NUMEZCVDBRc1JVRkJSVGhrTEU5QlFVODNaQ3hKUVVGSkxGTkJRVk5FTEVWQlFVVkRMRWRCUVVjc1QwRkJUMWNzVFVGQlRWZ3NSVUZCUlN4SFFVRkhjMGdzUzBGQlMzWklMRWxCUVVrMlFpeExRVUZMTm5CQ0xFOUJRVTg0V0N4VlFVRlZMRk5CUVZONGFrTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFTdEZMRTlCUVc1Q0xFbEJRV3hDUVN4SFFVRjJRemhDTEVWQlFVVTJRaXhMUVVGTFJTeE5RVUZOTjBRc1IwRkJSemhDTEVWQlFVVjVha01zVVVGQlVYWnNReXhIUVVGSFowTXNUMEZCVDBZc1NVRkJUeXRLTEZGQlFWRXNVVUZCWVRkTUxFVkJRVVU0UWl4RlFVRkZSeXhSUVVGbE1FSXNTMEZCU3pad1FpeFBRVUZQTlU0c1QwRkJUeXhKUVVGSmRtTXNTMEZCUzBNc1NVRkJTU3hGUVVGRmRrSXNSVUZCUlM5Q0xFbEJRVWs0UWl4SFFVRkhOa0lzUzBGQlN6WndRaXhQUVVGUGJWWXNVMEZCVXl4VFFVRlROMmRETEVkQlFVY3NUMEZCVHl4TlFVRk5RU3hGUVVGRkxFZEJRVWRGTEU5QlFVOUdMRWxCUTNCa05rSXNTMEZCU3pad1FpeFBRVUZQWjFrc1dVRkJXU3hUUVVGVE1XcERMRWRCUVVjc1QwRkJUMWtzVFVGQlRXNUNMRlZCUVZVNFNDeExRVUZMZGtvc1MwRkJTekJNTEZWQlFWVXNTMEZCU3pkSUxFdEJRVXMyY0VJc1QwRkJUMmxaTEdkQ1FVRm5RaXhYUVVGWExFOUJRVTl3YVVNc1MwRkJTelpqTEUxQlFVMHNWMEZCVnpkakxFdEJRVXMwU0N4VlFVRlZaQ3hUUVVGVExFbEJRVWs1Unl4TFFVRkxjV2xETEVsQlFVbHlhVU1zUzBGQlN6WmpMRTFCUVUwc1YwRkJWemRqTEV0QlFVczBTQ3hWUVVGVmRFZ3NTMEZCUzNOSkxFOUJRVTg1UWl4VFFVRlRMRXRCUVV0NFJ5eExRVUZMTm5CQ0xFOUJRVTl2U2l4blFrRkJaMEpxZWtJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyOUNMR2RDUVVGblFtcDZRaXhMUVVGTE5uQkNMRTlCUVU5dFdTeFRRVUZUTEZOQlFWTTNha01zUjBGQlJ5eEpRVUZKTEVsQlFVbERMRVZCUVVVc1JVRkJSUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSVGhDTEVWQlFVVkhMRk5CUVZOcVF5eEZRVUZGSzBJc1JVRkJSU3hIUVVGSFFTeEZRVUZGUkN4RlFVRkZlV1VzVjBGQlYzWm5RaXhMUVVGTExFVkJRVVVzVDBGQlR5dENMRWRCUVVjMFFpeExRVUZMTm5CQ0xFOUJRVTl2V1N4eFFrRkJjVUlzVjBGQlYzWnBReXhMUVVGTE5FZ3NVMEZCVXl4RlFVTTFaSFJJTEV0QlFVczJjRUlzVDBGQlQzRlpMRzFDUVVGdFFpeFhRVUZYTEUxQlFVMHNVVUZCVVd4cFF5eExRVUZMTm5CQ0xFOUJRVTl2V1N4M1FrRkJkMEpxYVVNc1MwRkJTelp3UWl4UFFVRlBjMWtzVTBGQlV5eFRRVUZUYUd0RExFZEJRVWNzU1VGQlNVTXNSVUZCUlhkcFF5eFBRVUZQZW1sRExFZEJRVWNzVDBGQlR5eEhRVUZIUXl4SFFVRkhORUlzUzBGQlN6WndRaXhQUVVGUGRVa3NiMEpCUVc5Q2FqQkNMRWRCUVVkcGEwTXNTVUZCU1doclF5eEhRVUZITkVJc1MwRkJTelp3UWl4UFFVRlBkMWtzYVVKQlFXbENMRk5CUVZOc2EwTXNSMEZCUnl4TlFVRk5MSGxDUVVGNVFtbEZMRXRCUVV0cVJTeEpRVUZKTmtJc1MwRkJTelp3UWl4UFFVRlBlVmtzYVVKQlFXbENMRk5CUVZOdWEwTXNSMEZCUnl4TlFVRk5MRzFDUVVGdFFtbEZMRXRCUVV0cVJTeEpRVUZKTmtJc1MwRkJTelp3UWl4UFFVRlBNRmtzV1VGQldTeFRRVUZUY0d0RExFZEJRVWNzVDBGQlQwVXNUMEZCVDBZc1IwRkJSM1ZNTEZGQlFWRXNZMEZCWVN4VFFVRlRka3dzUlVGQlJUbENMRWRCUVVjc1QwRkJUMEVzUlVGQlJYazVRaXhyUWtGRGFtTTVOVUlzUzBGQlN6WndRaXhQUVVGUE1sa3NaVUZCWlN4VFFVRlRjbXRETEVkQlFVY3NUMEZCVDBVc1QwRkJUMFlzUjBGQlIzVk1MRkZCUVZFc1YwRkJWeXhQUVVGUGVXbENMR1ZCUVdWdWMwSXNTMEZCU3pad1FpeFBRVUZQTkZrc1dVRkJXU3hUUVVGVGRHdERMRVZCUVVWRExFZEJRWGRFTEU5QlFYSkVRU3hGUVVGRk5FSXNTMEZCUzBjc1UwRkJVeTlDTEVkQlFVYzBRaXhMUVVGTE5uQkNMRTlCUVU4MFdDeGhRVUZoY21wRExFZEJRVWNzVFVGQllVUXNSVUZCUlhWTUxGRkJRVkVzU1VGQlNXcExMRTlCUVU4c1RVRkJUWEpDTEVWQlFVVXNTMEZCUzBFc1JVRkJSU3hMUVVGTExFbEJRVWtzVjBGQlZ5eE5RVUZMTEZOQlFWTkVMRVZCUVVWRExFVkJRVVZITEVkQlFVY3NUMEZCVDBnc1JVRkJSVWNzUlVGQlJYVTNRaXhyUWtGQmFVSTVOVUlzUzBGQlN6WndRaXhQUVVGUE5sa3NWMEZCVnl4VFFVRlRkbXRETEVkQlFVY3NUMEZCVDBVc1QwRkJUMFlzUlVGQlJTdExMRTlCUVU4c1NVRkJTVFIzUWl4alFVRmplamRDTEU5QlFVOUdMRVZCUVVWdlRpeFBRVUZQTEVsQlFVazBaMElzWlVGRE5WbHVjMElzUzBGQlN6WndRaXhQUVVGUE5VMHNVMEZCVXl4VFFVRlRPV1VzUjBGQk9FSXNUMEZCTTBKdFdTeFRRVUZUYmxrc1MwRkJTMEVzUlVGQlJVVXNUMEZCVDBZc1NVRkJWelpDTEV0QlFVdEhMRk5CUVZOb1F5eEhRVUZITEZsQlFWbHBSU3hMUVVGTGFrVXNSMEZCUnpobExGTkJRVk01WlN4RlFVRkZMRWxCUVVrNFpTeFRRVUZUT1dVc1JVRkJSU3hKUVVGSmFXdERMRXRCUVV0d2FVTXNTMEZCU3pad1FpeFBRVUZQT0Zrc1YwRkJWeXhUUVVGVGVHdERMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhPRUlzUlVGQlJVRXNSVUZCUldsQ0xFMUJRVTFvUWl4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVXNSMEZCUnl4RlFVRkZSQ3hIUVVGSE9FSXNSVUZCUlVjc1VVRkJVV2hETEVWQlFVVTRUQ3hMUVVGTGFrc3NSVUZCUlhGRExGTkJRVk51UlN4SlFVRm5ReXhQUVVFMVFqaENMRVZCUVVWSExGRkJRVkZvUXl4RlFVRkZPRXdzUzBGQlMycExMRVZCUVVWMVNDeExRVUZMZEVnc1NVRkJWemxDTEVkQlFVY3dSQ3hMUVVGTE5uQkNMRTlCUVU4cldTeGpRVUZqTEZOQlFWTjZhME1zUlVGQlJVTXNSMEZCUnl4SlFVRkhRU3hGUVVGdFF5eFBRVUZQUkN4RlFVRjRReXhwUWtGQmFVSkRMRWxCUVVsQkxFVkJRVVVzUTBGQlEwRXNTVUZCYTBJc1NVRkJTU3hKUVVGSkwwSXNSMEZCUnl4RlFVRkZReXhGUVVGRkxFVkJRVVZCTEVWQlFVVTRRaXhGUVVGRlJTeFBRVUZQYUVNc1NVRkJTU3hIUVVGSExFbEJRVWs0UWl4RlFVRkZPVUlzUjBGQlJ5eERRVUZETEVsQlFVbHBReXhGUVVGRlNpeEZRVUZGZFVRc1dVRkJXWFJFTEVWQlFVVTVRaXhKUVVGSmFVTXNSVUZCUld4RExFbEJRVWxCTEVWQlFVVnJReXhIUVVGSExFOUJRVThzUjBGQlIyeERMRVZCUVVVNFFpeEZRVUZGUVN4RlFVRkZORW9zVFVGQlRURk1MRVZCUVVVc1NVRkRlR1F5UkN4TFFVRkxObkJDTEU5QlFVOW5XaXhoUVVGaExGTkJRVk14YTBNc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hIUVVGSFF5eEZRVUZGTEVkQlFVY3NSMEZCUnpaQ0xFZEJRVWRETEVWQlFVVXNUMEZCVHl4RlFVRkZMRWxCUVVsRUxFVkJRVVZITEZOQlFWTkdMRVZCUVVWRkxFOUJRVThzVDBGQlQyOUNMRXRCUVV0RExFbEJRVWw0UWl4RlFVRkZSeXhQUVVGUFJpeEZRVUZGUlN4UlFVRlJMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZTQ3hGUVVGRlJTeFBRVUZQTEVWQlFVVkRMRWxCUVVsc1F5eEZRVUZGYTBNc1IwRkJSMEVzUlVGQlJTeEpRVUZKUVN4RlFVRkZMRVZCUVVWQkxFVkJRVVZLTEVWQlFVVkhMRTlCUVU5RExFbEJRVWtzUTBGQlEycERMRVZCUVVVc1IwRkJSMmxETEVWQlFVVXNSVUZCUlN4SlFVRkpMRWxCUVVsRExFVkJRVVVzUlVGQlJVRXNSVUZCUlVvc1JVRkJSVVVzVDBGQlQwVXNTVUZCU1d4RExFVkJRVVZyUXl4RlFVRkZMRWRCUVVkclFpeExRVUZMUlN4SlFVRkpkRVFzUlVGQlJXdERMRWRCUVVjc1JVRkJSVzVETEVWQlFVVnRReXhGUVVGRkxFZEJRVWNzUlVGQlJXNURMRVZCUVVWdFF5eEhRVUZIYjJsRExFOUJRVTk2YVVNc1JVRkJSVWtzU1VGQlNVZ3NSVUZCUlVrc1MwRkJTeXhKUVVGSlFTeEZRVUZGTEVWQlFVVkJMRVZCUVVWdVF5eEZRVUZGYVVNc1QwRkJUMFVzU1VGQlNXNURMRVZCUVVWdFF5eEhRVUZIYkVNc1JVRkJSV3RETEVkQlFVY3NUMEZCVDJ4RExFVkJRVVU0UWl4RlFVRkZSU3hUUVVGVE1FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlVyTWtJc1QwRkJUeXhIUVVGSE9XbERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTlETEZOQlFWTXNWMEZCVnl4UFFVRlBMMmxETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVjBGQlZ6VXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlNzeVFpeFBRVUZQUlN4VlFVRlZMRmRCUVZjc1QwRkJUMmhxUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEZsQlFWazFNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hUUVVGVE5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTg1U3l4UFFVRlBMRmRCUVZjc1QwRkJUMmcwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEZOQlF6bHpRalV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUFJ5eFRRVUZUTEZkQlFWY3NUMEZCVDJwcVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUeXg1UWtGQmVVSXNXVUZCV1RjeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWU3N5UWl4UFFVRlBPVXNzVlVGQlZXZzBRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlNzeVFpeFBRVUZQU1N4UlFVRlJMRmRCUVZjc1QwRkJUMnhxUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEZkQlFWYzFNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZVck1rSXNUMEZCVDBjc1lVRkJZV3BxUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUFJTeGpRVUZqYUdwRExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZLekpDTEU5QlFVODVTeXhWUVVNM1YyZzBRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlNzeVFpeFBRVUZQZGtzc1YwRkJWeXhYUVVGWExFbEJRVWx3TmtJc1JVRkJSVFpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TExHVkJRV1VzUjBGQlIzZzBRaXhGUVVGRkxFTkJRVU5CTEVWQlFVVTJRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVVN4eFFrRkJjVUl6TkVJc1IwRkJSeXhKUVVGMVNqbENMRVZCUVc1S0swSXNSVUZCUlRSQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZLekpDTEU5QlFVOUxMR2RDUVVGblFtaHNReXhIUVVGSExFZEJRVWRETEVWQlFVVXNUVUZCVFN4VFFVRlRRU3hGUVVGRkxFZEJRVWMwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUFRTeHJRa0ZCYTBKcWJFTXNSVUZCUlN4WFFVRlhReXhGUVVGRkxFZEJRV2RDTEVsQlFXSkVMRVZCUVVWQkxFVkJRVVVzVFVGQlowSTVRaXhGUVVGRk9FSXNSVUZCUlN4TlFVRk5PVUlzUlVGQlJTeHhRa0ZCY1VJMk1FSXNTMEZCU3pjd1FpeEpRVUZKTEU5QlFVOUJMRVZCUVVVc1IwRkJSeXhOUVVGTkxFbEJRM0JZTWtRc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVXJNa0lzVDBGQlQwc3NaMEpCUVdkQ0xGTkJRVk5vYkVNc1IwRkJSeXhKUVVGSk5rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlVyTWtJc1QwRkJUemxMTEZOQlFWTXNUMEZCVHpjMVFpeEZRVUZGTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRkxFVkJRVVZCTEVWQlFVVkVMRVZCUVVWSExFOUJRVTlHTEVsQlFVa3NRMEZCUXl4SlFVRkpMMElzUlVGQlJUaENMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eFJRVUZSTDBJc1JVRkJSU3hIUVVGSExFOUJRVTlCTEVsQlFVa3lSQ3hMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlNzeVFpeFBRVUZQY2tzc2EwSkJRV3RDTEZOQlFWTjBOa0lzUjBGQlJ5eFBRVUZQTEVkQlFVYzJRaXhMUVVGTE5uQkNMRTlCUVU5dlNpeG5Ra0ZCWjBKcWVrSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlVyTWtJc1QwRkJUM1pMTEdGQlFXRndOa0lzU1VGQlNUWkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTlOTEd0Q1FVRnJRaXhUUVVGVGFteERMRVZCUVVWRExFZEJRVWNzVDBGQlQwUXNSVUZCUlRaQ0xFdEJRVXQzV2l4TlFVRk5VeXhMUVVGTE9XSXNSMEZCUlN4VFFVRlRRU3hIUVVGSExFOUJRVTlETEVkQlFVZEVMRVZCUVVVc1VVRkJUMEVzUlVGQlJTeEpRVUZKTEVsQlFVazJRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhNelFpeFRRVUZUTEVkQlFVZHlha01zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTBNc1ZVRkJWU3hYUVVGWExFOUJRVTkwYWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwMHNaVUZCWlN4WlFVRlpOVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZORkxFOUJRVThzVjBGQlZ5eFBRVUZQZG1wRExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1UwRkJVelV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFJ5eFRRVUZUTEZkQlFWY3NUMEZCVDNocVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGbEJRVmsxTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwMHNaVUZCWlN4VlFVRlZOVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVTBGQlV6VXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhNelFpeFRRVUZUU1N4UFFVRlBMRmRCUVZjc1QwRkJUM3BxUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEZOQlEzZzVRalV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFN5eE5RVUZOTEZkQlFWY3NUMEZCVHpGcVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRSeXhaUVVGWmVHcERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5KTEZWQlFWVjZha01zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTBVc1ZVRkJWWFpxUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFRTeFpRVUZaTEZkQlFWY3NUMEZCVHpOcVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExHTkJRV00xTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwOHNVVUZCVVN4WFFVRlhMRTlCUVU4MWFrTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFZRVUZWTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTlJMRlZCUVZVc1YwRkJWeXhQUVVGUE4ycERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNXVUZEZG1VMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMU1zVjBGQlZ5eFhRVUZYTEU5QlFVODVha01zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hUUVVGVE5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5WTEdGQlFXRXNWMEZCVnl4UFFVRlBMMnBETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVlVGQlZUVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhNelFpeFRRVUZUVnl4UlFVRlJMRmRCUVZjc1QwRkJUMmhyUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFR5eDVRa0ZCZVVJc1ZVRkJWVGN5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFdTeFhRVUZYTEZkQlFWY3NUMEZCVDJwclF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUeXg1UWtGQmVVSXNVMEZEZUdJM01rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVemxMTEZkQlFWY3NWMEZCVnl4SlFVRkpjRFpDTEVWQlFVVTJRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMU3l4bFFVRmxkalJDTEVWQlFVVXNSMEZEYVVrc1QwRkVPVWcwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFVTeFpRVUZuUkhwc1F5eEhRVUZIUkN4SFFVRjBRME1zUlVGQlJTeHJRMEZCZDBNNGVVSXNTMEZCU3k5NVFpeEpRVUZKUVN4RlFVRkZMRWRCUVVjc1RVRkJUelpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOTExGRkJRVzFFZEd4RExFZEJRVWRFTEVkQlFUZERReXhGUVVGRkxIbERRVUVyUXpoNVFpeExRVUZMTDNsQ0xFdEJRVXRCTEVWQlFVVXNSMEZCUjNWTUxGRkJRVkVzUzBGQlN5eExRVUZOTVVvc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwMHNZMEZCZFVOMmJFTXNSMEZCUjBRc1IwRkJNMEpETEVWQlFVVXNkVUpCUVRaQ09IbENMRXRCUVVzdmVVSXNTVUZCU1VFc1JVRkJSU3hIUVVGSGRVd3NVVUZCVVN4TFFVRkxMRXRCUVVzc1MwRkJUVEZLTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOWExGVkJRM1JrTld4RExFZEJRVWRFTEVkQlJEaGtReXhGUVVGRkxIRkNRVU0xWkRoNVFpeExRVUZMTDNsQ0xFdEJRVXRCTEVWQlFVVXNSMEZCU1RaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTkRMRmxCUVRKRGJHeERMRWRCUVVkRUxFZEJRV3BEUXl4RlFVRkZMRFpDUVVGdFF6aDVRaXhMUVVGTEwzbENMRXRCUVV0QkxFVkJRVVVzUjBGQlNUWkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5UTEdWQlFUQkVNV3hETEVkQlFVZEVMRWRCUVRsRFF5eEZRVUZGTERCRFFVRm5SRGg1UWl4TFFVRkxMM2xDTEV0QlFVdEJMRVZCUVVVc1NVRkJWME1zUjBGQlJ5eEpRVUZKTkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlV6VkxMR3RDUVVGclFpeFRRVUZUZERaQ0xFZEJRVWNzVDBGQlR5eEhRVUZITmtJc1MwRkJTelp3UWl4UFFVRlBiMG9zWjBKQlFXZENhbnBDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZNNVN5eGhRVUZoY0RaQ0xFbEJRVWsyUWl4TFFVRkxhMnRETEZGQlFWRXNSMEZCUjJ4clF5eExRVUZMYTJ0RExGRkJRVkY0YlVNc1QwRkJUeXhUUVVGVFV5eEZRVUZGUXl4SFFVRkhMRTlCUVU5QkxFZEJRVWMwUWl4TFFVRkxhMnRETEZGQlFWRkRMR1ZCUVdVc1UwRkJVMmh0UXl4RlFVRkZReXhIUVVGSExFOUJRVTlFTEVkQlFVYzJRaXhMUVVGTGEydERMRkZCUVZGRkxGVkJRVlVzVTBGQlUycHRReXhIUVVGclF5eFBRVUV2UWpaQ0xFdEJRVXRyYTBNc1VVRkJVVVVzVlVGQlZTeExRVUZMYW0xRExFZEJRVlZCTEVkQlFVYzJRaXhMUVVGTGEydERMRkZCUVZGRkxGVkJRVlVzUzBGQlMzQnJReXhMUVVGTGIwVXNZVUZCWVhCRkxFdEJRVXRyYTBNc1VVRkJVVWNzYTBKQlFXdENMRk5CUVZOc2JVTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFOUJRVTgwUWl4TFFVRkxhMnRETEZGQlFWRkZMRlZCUVZWcWJVTXNSVUZCUlVNc1MwRkJTU3hGUVVGSExFMUJRVTB2UWl4SlFVRkpMRTlCUVUwc1IwRkJTVEpFTEV0QlFVdHJhME1zVVVGQlVVa3NUVUZCVFN4VFFVRlRibTFETEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRmpMRTlCUVZoQkxFVkJRVVZCTEVWQlFVVkJMRVZCUVVVNFFpeEhRVUZIUVN4RlFVRlRNVUlzVDBGQlQydENMRlZCUVZWRExHVkJRV1V4UWl4TFFVRkxaME1zUlVGQlJUZENMRWRCUVVjMlFpeEZRVUZGTjBJc1IwRkJSelpDTEVWQlFVVTNRaXhIUVVGSFJDeEZRVUZGSzBJc1NVRkJTVFJDTEV0QlFVc3JUQ3hWUVVGVkxFZEJRVWN2VEN4TFFVRkxLMHdzVlVGQlZYYzBRaXhYUVVGVkxFVkJRVWQyYTBNc1MwRkJTeXRNTEZWQlFWVjVORUlzWVVGQldTeEZRVUZIZUd0RExFdEJRVXNyVEN4VlFVRlZNRFJDTEdOQlFXRXNSVUZCUjNwclF5eExRVUZMSzB3c1ZVRkJWVEkwUWl4bFFVRmpMRVZCUVVjeGEwTXNTMEZCU3l0TUxGVkJRVlUwTkVJc2MwSkJRWEZDTEVWQlFVY3phME1zUzBGQlN5dE1MRlZCUVZVMk5FSXNZMEZCWVN4RlFVRkhOV3RETEV0QlFVc3JUQ3hWUVVGVk9EUkNMRzlDUVVGdFFpeEZRVUZITjJ0RExFdEJRVXNyVEN4VlFVRlZLelJDTEdWQlFXVTVhME1zUzBGQlN5dE1MRlZCUVZWM05FSXNWMEZCVjNaclF5eExRVUZMSzB3c1ZVRkJWWGswUWl4aFFVRmhlR3RETEV0QlFVc3JUQ3hWUVVGVk1EUkNMR05CUVdONmEwTXNTMEZCU3l0TUxGVkJRVlUwTkVJc2MwSkJRWE5DTTJ0RExFdEJRVXNyVEN4VlFVRlZNalJDTEdWQlFXVXhhME1zUzBGQlN5dE1MRlZCUVZVMk5FSXNZVUZCWVRWclF5eExRVUZMSzB3c1ZVRkJWV2MxUWl4dFFrRkJiVUlzVjBGQlZ5eFBRVUZQTDJ0RExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdExMR2RDUVVNek1VTXpNa0lzUzBGQlN5dE1MRlZCUVZWcE5VSXNhMEpCUVd0Q0xGZEJRVmNzVDBGQlQyaHNReXhMUVVGTFppeFBRVUZQTmswc1YwRkJWeXhOUVVGTk9Vd3NTMEZCU3l0TUxGVkJRVlZyTlVJc1lVRkJZU3hYUVVGWExFOUJRVTlxYkVNc1MwRkJTeXRNTEZWQlFWVnBOVUlzY1VKQlFYRkNhR3hETEV0QlFVc3JUQ3hWUVVGVmJUVkNMRTFCUVUxc2JFTXNTMEZCU3l0TUxGVkJRVlVyTkVJc1pVRkJaVGxyUXl4TFFVRkxLMHdzVlVGQlZUWTBRaXhoUVVGaE5XdERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZsTEZWQlFWVTVNMElzUzBGQlN5dE1MRlZCUVZWdk5VSXNSMEZCUjI1c1F5eExRVUZMSzB3c1ZVRkJWU3MwUWl4bFFVRmxPV3RETEV0QlFVc3JUQ3hWUVVGVmR6UkNMRlZCUVZWMmEwTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV2RDTEU5QlFVOHZNMElzUzBGQlN5dE1MRlZCUVZWeE5VSXNTMEZCUzNCc1F5eExRVUZMSzB3c1ZVRkJWU3MwUWl4bFFVRmxPV3RETEV0QlFVc3JUQ3hWUVVGVmVUUkNMRmxCUVZsNGEwTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlVyTWtJc1QwRkJUemxMTEZOQlF6TmxhRFJDTEV0QlFVc3JUQ3hWUVVGVmN6VkNMRmRCUVZkeWJFTXNTMEZCU3l0TUxGVkJRVlZ4TlVJc1RVRkJUWEJzUXl4TFFVRkxLMHdzVlVGQlZXODFRaXhIUVVGSGJteERMRXRCUVVzclRDeFZRVUZWZFRWQ0xFMUJRVTEwYkVNc1MwRkJTeXRNTEZWQlFWVXJORUlzWlVGQlpUbHJReXhMUVVGTEswd3NWVUZCVlRBMFFpeGhRVUZoZW10RExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZLekpDTEU5QlFVOUpMRlZCUVZWc2FrTXNTMEZCU3l0TUxGVkJRVlYzTlVJc1QwRkJUM1pzUXl4TFFVRkxLMHdzVlVGQlZTczBRaXhsUVVGbE9XdERMRXRCUVVzclRDeFZRVUZWTWpSQ0xHVkJRV1V4YTBNc1MwRkJTeXRNTEZWQlFWVTBORUlzY1VKQlFYRkNNMnRETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVkt6SkNMRTlCUVU5SExGZEJRVmRxYWtNc1MwRkJTeXRNTEZWQlFWVjVOVUlzVlVGQlZTeFhRVUZYTEU5QlFVOTRiRU1zUzBGQlN5dE1MRlZCUVZWM05VSXNVVUZCVVhac1F5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGZEJRek5pTlRKQ0xFdEJRVXNyVEN4VlFVRlZNRFZDTEU5QlFVOTZiRU1zUzBGQlN5dE1MRlZCUVZVME5FSXNjMEpCUVhOQ00ydERMRXRCUVVzclRDeFZRVUZWZVRWQ0xGbEJRVmw0YkVNc1MwRkJTeXRNTEZWQlFWVXlOVUlzVDBGQlR6RnNReXhMUVVGTEswd3NWVUZCVlhjMVFpeFBRVUZQZG14RExFdEJRVXNyVEN4VlFVRlZORFZDTEcxQ1FVRnRRaXhYUVVGWExFbEJRVWw0YmtNc1JVRkJSVFpDTEV0QlFVc3JUQ3hWUVVGVmFUVkNMRzlDUVVGdlFpeFBRVUZQTjIxRExFZEJRVWRCTEVWQlFVVnJiRU1zVlVGQlZTeEpRVUZKY21wRExFdEJRVXNyVEN4VlFVRlZOalZDTEZOQlFWTTFiRU1zUzBGQlN5dE1MRlZCUVZVME5VSXNjVUpCUVhGQ00yeERMRXRCUVVzclRDeFZRVUZWT0RWQ0xGbEJRVmNzUlVGQlJ6ZHNReXhMUVVGTEswd3NWVUZCVlNzMVFpeG5Ra0ZCWlN4RlFVRkhPV3hETEV0QlFVc3JUQ3hWUVVGVlp6WkNMR05CUVdFc1JVRkJSeTlzUXl4TFFVRkxLMHdzVlVGQlZXazJRaXhaUVVGWExFVkJRVWRvYlVNc1MwRkJTeXRNTEZWQlFWVnJOa0lzWjBKQlFXVXNSVUZCUjJwdFF5eExRVUZMSzB3c1ZVRkJWVzAyUWl4bFFVRmpMRVZCUTNSbGJHMURMRXRCUVVzclRDeFZRVUZWYnpaQ0xHRkJRVmtzUlVGQlIyNXRReXhMUVVGTEswd3NWVUZCVlhFMlFpeGhRVUZaTEVWQlFVZHdiVU1zUzBGQlN5dE1MRlZCUVZWek5rSXNZMEZCWVN4RlFVRkhjbTFETEV0QlFVc3JUQ3hWUVVGVmRUWkNMR2xDUVVGblFpeEZRVUZIZEcxRExFdEJRVXNyVEN4VlFVRlZkelpDTEdkQ1FVRm5Rblp0UXl4TFFVRkxLMHdzVlVGQlZUZzFRaXhaUVVGWk4yeERMRXRCUVVzclRDeFZRVUZWS3pWQ0xHZENRVUZuUWpsc1F5eExRVUZMSzB3c1ZVRkJWV2MyUWl4alFVRmpMMnhETEV0QlFVc3JUQ3hWUVVGVmFUWkNMRmxCUVZsb2JVTXNTMEZCU3l0TUxGVkJRVlZyTmtJc1owSkJRV2RDYW0xRExFdEJRVXNyVEN4VlFVRlZiVFpDTEdWQlFXVnNiVU1zUzBGQlN5dE1MRlZCUVZWdk5rSXNZVUZCWVc1dFF5eExRVUZMSzB3c1ZVRkJWWEUyUWl4WlFVRlpjRzFETEV0QlFVc3JUQ3hWUVVGVmVUWkNMRWxCUVVsNGJVTXNTMEZCU3l0TUxGVkJRVlYzTmtJc1owSkJRV2RDZG0xRExFdEJRVXNyVEN4VlFVRlZPRFZDTEZkQlFWYzNiRU1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTAwc1kwRkRNMlV6YWtNc1MwRkJTeXRNTEZWQlFWVXdOa0lzVVVGQlVYcHRReXhMUVVGTEswd3NWVUZCVlhjMlFpeG5Ra0ZCWjBKMmJVTXNTMEZCU3l0TUxGVkJRVlVyTlVJc1pVRkJaVGxzUXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFVTeFpRVUZaTjJwRExFdEJRVXNyVEN4VlFVRlZNalpDTEdWQlFXVXNWMEZCVnl4UFFVRlBNVzFETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOUExGZEJRVmMxYWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUxTXNZMEZCWXpscVF5eExRVUZMSzB3c1ZVRkJWVFEyUWl4TlFVRk5NMjFETEV0QlFVc3JUQ3hWUVVGVmR6WkNMR2RDUVVGblFuWnRReXhMUVVGTEswd3NWVUZCVldjMlFpeGhRVUZoTDJ4RExFdEJRVXNyVEN4VlFVRlZNalpDTEdsQ1FVRnBRakZ0UXl4TFFVRkxLMHdzVlVGQlZUWTJRaXhQUVVGUExGZEJRVmNzU1VGQlNYcHZReXhGUVVGRk5rSXNTMEZCU3l0TUxGVkJRVlZwTlVJc2IwSkJRVzlDTEZGQlFWRTNiVU1zUjBGQlJ6WkNMRXRCUVVzMmNFSXNUMEZCVHpOWUxGTkJRVk12VkN4RlFVRkZNRzlETEZsQlFWa3NSMEZCUnl4UlFVTXpaVGR0UXl4TFFVRkxLMHdzVlVGQlZTczJRaXhKUVVGSk9XMURMRXRCUVVzclRDeFZRVUZWZHpaQ0xHZENRVUZuUW5adFF5eExRVUZMSzB3c1ZVRkJWV2syUWl4WFFVRlhhRzFETEV0QlFVc3JUQ3hWUVVGVk5qWkNMRk5CUVZNMWJVTXNTMEZCU3l0TUxGVkJRVlZuTjBJc1VVRkJVUzl0UXl4TFFVRkxLMHdzVlVGQlZYYzJRaXhuUWtGQlowSjJiVU1zUzBGQlN5dE1MRlZCUVZWck5rSXNaVUZCWldwdFF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRReXhaUVVGWmRHcERMRXRCUVVzclRDeFZRVUZWYVRkQ0xFOUJRVTlvYmtNc1MwRkJTeXRNTEZWQlFWVjNOa0lzWjBKQlFXZENkbTFETEV0QlFVc3JUQ3hWUVVGVmJUWkNMR05CUVdOc2JVTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMGNzVjBGQlYzaHFReXhMUVVGTEswd3NWVUZCVldzM1FpeExRVUZMYW01RExFdEJRVXNyVEN4VlFVRlZkelpDTEdkQ1FVRm5Rblp0UXl4TFFVRkxLMHdzVlVGQlZXODJRaXhaUVVGWmJtMURMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5KTEZOQlEzUmplbXBETEV0QlFVc3JUQ3hWUVVGVmJUZENMRXRCUVV0c2JrTXNTMEZCU3l0TUxGVkJRVlYzTmtJc1owSkJRV2RDZG0xRExFdEJRVXNyVEN4VlFVRlZjVFpDTEZsQlFWbHdiVU1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTBVc1UwRkJVM1pxUXl4TFFVRkxLMHdzVlVGQlZXODNRaXhKUVVGSmJtNURMRXRCUVVzclRDeFZRVUZWZHpaQ0xHZENRVUZuUW5adFF5eExRVUZMSzB3c1ZVRkJWVzAyUWl4bFFVRmxiRzFETEV0QlFVc3JUQ3hWUVVGVmJ6WkNMR0ZCUVdGdWJVTXNTMEZCU3l0TUxGVkJRVlZ4TmtJc1dVRkJXWEJ0UXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFN5eFJRVUZSTVdwRExFdEJRVXNyVEN4VlFVRlZjVGRDTEUxQlFVMXdia01zUzBGQlN5dE1MRlZCUVZWM05rSXNaMEpCUVdkQ2RtMURMRXRCUVVzclRDeFZRVUZWY3paQ0xHRkJRV0Z5YlVNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUxY3NWVUZCVldoclF5eExRVUZMSzB3c1ZVRkJWWE0zUWl4VFFVRlRjbTVETEV0QlFVc3JUQ3hWUVVGVmR6WkNMR2RDUVVGblFuWnRReXhMUVVGTEswd3NWVUZCVlhVMlFpeG5Ra0ZCWjBKMGJVTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMWtzWVVGRE1XZENhbXRETEV0QlFVc3JUQ3hWUVVGVmRUZENMR3RDUVVGclFpeFhRVUZYTEVsQlFVbHVjRU1zUlVGQlJTeEhRVUZIUXl4RlFVRkZORUlzUzBGQlN5dE1MRlZCUVZWM04wSXNlVUpCUVRCRExFOUJRV3BDYm5CRExFbEJRVWxFTEVWQlFVVkRMRVZCUVVWQkxFVkJRVVVzUjBGQlJ5eEpRVUZYTkVJc1MwRkJTeXRNTEZWQlFWVnZOVUlzUzBGQmVVTXNUMEZCY0VNdmJVTXNSVUZCUlRSQ0xFdEJRVXNyVEN4VlFVRlZlVGRDTEhGQ1FVRTBRbkJ3UXl4RlFVRkZjWEJETEZkQlFWZDBjRU1zU1VGQlNVVXNUMEZCVDBRc1IwRkJSMFFzUjBGRGJrNDJRaXhMUVVGTEswd3NWVUZCVlhjM1FpeDFRa0ZCZFVJc1YwRkJWeXhKUVVGSmNIQkRMRVZCUVVVMlFpeExRVUZMSzB3c1ZVRkJWV2MxUWl4eFFrRkJjVUlzVDBGQlJ5OXJReXhMUVVGTEswd3NWVUZCVlhVMVFpeE5RVUZaTEhGQ1FVRnhRbkJWTEV0QlFVc3ZlVUlzUjBGQlRUWkNMRXRCUVVzclRDeFZRVUZWY1RWQ0xFdEJRVmNzYTBKQlFXdENiRlVzUzBGQlN5OTVRaXhIUVVGTk5rSXNTMEZCU3l0TUxGVkJRVlZ2TlVJc1IwRkJVeXh0UTBGQmJVTnFWU3hMUVVGTEwzbENMRWRCUVUwMlFpeExRVUZMSzB3c1ZVRkJWWGMxUWl4UFFVRmhMR2RDUVVGblFuSlZMRXRCUVVzdmVVSXNSMEZCVFRaQ0xFdEJRVXNyVEN4VlFVRlZiVFZDTEUxQlFWa3NlVUpCUVhsQ2FGVXNTMEZCU3k5NVFpeFJRVUUxUkN4SFFVRm5SVFpDTEV0QlFVc3JUQ3hWUVVGVmVUZENMR2xDUVVGcFFpeFhRVUZYTEVsQlFVbHljRU1zUlVGQlJUWkNMRXRCUVV0bUxFOUJRVTgyUXl4VFFVRlRMRTlCUVU4elJDeEZRVUZGUVN4RlFVRkZkWEJETEd0Q1FVRmhMRWRCUTNobE1XNURMRXRCUVVzclRDeFZRVUZWTkRkQ0xGRkJRVkV6YmtNc1MwRkJTeXRNTEZWQlFWVjFOMElzYjBKQlFXOUNkRzVETEV0QlFVc3JUQ3hWUVVGVk5qZENMRkZCUVZFc1UwRkJVM3B3UXl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxObkJDTEU5QlFVOXZTaXhuUWtGQlowSTVNRUlzUlVGQlJVTXNTVUZCU1RSQ0xFdEJRVXNyVEN4VlFVRlZPRGRDTEhkQ1FVRjNRaXhIUVVGSE4yNURMRXRCUVVzclRDeFZRVUZWTUhOQ0xHdENRVUZyUWl4VFFVRlRkRFpDTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXNyVEN4VlFVRlZPRFJDTEc5Q1FVRnZRamRyUXl4TFFVRkxhMnRETEZGQlFWRkpMRTFCUVUxMGEwTXNTMEZCU3l0TUxGVkJRVlU0TjBJc2QwSkJRWGRDTVhCRExFZEJRVVVzVjBGQlZ5eFBRVUZQTEVkQlFVYzJRaXhMUVVGTE5uQkNMRTlCUVU5dlNpeG5Ra0ZCWjBKcWVrSXNTMEZCU3l0TUxGVkJRVlUwTjBJc1VVRkJVWGh3UXl4UFFVRk5Oa0lzUzBGQlN5dE1MRlZCUVZVck4wSXNWVUZCVlRsdVF5eExRVUZMSzB3c1ZVRkJWVEJ6UWl4clFrRkRNMko2TkVJc1MwRkJTeXRNTEZWQlFWVm5PRUlzZFVKQlFYVkNMRk5CUVZNMWNFTXNSMEZCUnl4UFFVRlBlV2xETEU5QlFVODFaME1zUzBGQlN5dE1MRlZCUVZWcE9FSXNaMEpCUVdkQ04zQkRMRWRCUVVjMlFpeExRVUZMSzB3c1ZVRkJWV3M0UWl4bFFVRmxhbTlETEV0QlFVc3JUQ3hWUVVGVlp6aENMSFZDUVVGMVFpOXVReXhMUVVGTEswd3NWVUZCVldrNFFpeGpRVUZqTEZkQlFWY3NSMEZCUjJodlF5eExRVUZMWml4UFFVRlBOa01zVlVGQlZUbENMRXRCUVVzclRDeFZRVUZWYnpWQ0xFZEJRVWNzVDBGQlQyNXNReXhMUVVGTEswd3NWVUZCVlhrM1FpeHRRa0ZCTlVVc1IwRkJhMGQ0YmtNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVTeEhRVUZIYkc5RExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRkRMR2RDUVVGbExFVkJRVWR1YjBNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVXaERMR1ZCUVdNc1JVRkJSMnh0UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUkwwSXNZVUZCV1N4RlFVRkhibTFETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGcVF5eG5Ra0ZCWlN4RlFVRkhhbTFETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGRkxHVkJRV01zUlVGQlIzQnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSUnl4bFFVRmpMRVZCUXpWcFFuSnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSU1N4bFFVRmxkRzlETEV0QlFVc3JUQ3hWUVVGVmR6UkNMRmRCUVZkMmEwTXNTMEZCU3l0TUxGVkJRVlY1TkVJc1lVRkJZWGhyUXl4TFFVRkxLMHdzVlVGQlZUWTBRaXhqUVVGak5XdERMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZETEdkQ1FVRm5RbTV2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUmFFTXNaVUZCWld4dFF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJMMElzWVVGQllXNXRReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSYWtNc1owSkJRV2RDYW0xRExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRkZMR1ZCUVdWd2IwTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVWNzWTBGQlkzSnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSYUVRc1RVRkJUV3hzUXl4TFFVRkxLMHdzVlVGQlZXMDFRaXhOUVVGTmJHeERMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkV2UXl4SFFVRkhibXhETEV0QlFVc3JUQ3hWUVVGVmJ6VkNMRWRCUVVkdWJFTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVGxETEV0QlFVdHdiRU1zUzBGQlN5dE1MRlZCUVZWeE5VSXNTMEZEY21Wd2JFTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVXNzVVVGQlVYWnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSU1N4bFFVRmxkRzlETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGRExHVkJRV1Z1YjBNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXTXNXVUZCV1RjelFpeExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJUU3huUWtGQlowSXNWMEZCVnl4UFFVRlBlRzlETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOSExGbEJRVmw0YWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwVXNWVUZCVlhacVF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJiRUlzVDBGQlQyaHVReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSU1N4bFFVRmxkRzlETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGb1F5eGpRVUZqYkcxRExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRk5MR3RDUVVNMVduaHZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSYWtJc1MwRkJTMnB1UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlNTeGxRVUZsZEc5RExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRXZRaXhaUVVGWmJtMURMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5KTEZOQlFWTjZha01zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVc1Q0xGRkJRVkV2YlVNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVVa3NaVUZCWlhSdlF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJha01zWlVGQlpXcHRReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSZFVJc2JVSkJRVzFDZERSQ0xFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRlBMRTlCUVU5NmIwTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVWtzWlVGQlpYUnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSUlN4alFVRmpjRzlETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGaExGZEJRekZoTlROQ0xFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRlJMR2xDUVVGcFFpeFhRVUZYTEU5QlFVOHhiME1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVc5Q0xHRkJRV0Z1TkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwc3NVMEZCVXpGcVF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJlRU1zVDBGQlR6RnNReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSU1N4bFFVRmxkRzlETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGSExHTkJRV055YjBNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVWRXNiVUpCUVcxQ01XOURMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVThzUjBGQlJ6TnZReXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQUXl4NVFrRkJlVUlzYVVWQlFXbEZOVzlETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5RkxHRkJRV0UzYjBNc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQwTXNlVUpCUVhsQ0xFMUJRVTAxYjBNc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQwY3NjVUpCUVhGQ09XOURMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlETEhsQ1FVRjVRaXhOUVVGTk5XOURMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlKTEZOQlFWTXNRMEZCUTBNc1VVRkJVU3hGUVVGRlF5eFhRVUZYTEVWQlFVVkRMRkZCUVZFc1JVRkJSVU1zYjBKQlFXOUNMRVZCUVVWRExHMUNRVUZ0UWl4SFFVRkhjSEJETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5VkxHTkJRV01zUzBGRE9YTkNjbkJETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5WExGZEJRVmNzVTBGQlUyNXlReXhIUVVGSExFOUJRVTgyUWl4TFFVRkxObkJDTEU5QlFVOHpXQ3hUUVVGVGJGTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMVVzWTBGQlkyeHlReXhKUVVGSk5rSXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMWtzWjBKQlFXZENMRWRCUVVkMmNFTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMkVzWlVGQlpTeExRVUZMZUhCRExFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOWpMSFZDUVVGMVFucHdReXhMUVVGTEswd3NWVUZCVlhVMVFpeFBRVUZQZEd4RExFdEJRVXNyVEN4VlFVRlZkelZDTEZOQlFWTjJiRU1zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVhoRExGRkJRVkV4YkVNc1MwRkJTeXRNTEZWQlFWVnROVUlzVFVGQlRXeHNReXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQWlN4dFFrRkJiVUl4Y0VNc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQyTXNkMEpCUVhkQ0xHMUNRVUZ0UW5wd1F5eExRVUZMWml4UFFVRlBNSEZETEV0QlF6ZGhNM0JETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5cFFpeHRRa0ZCYlVJMWNFTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMk1zZVVKQlFYbENlbkJETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGNFF5eFRRVUZUTVd4RExFdEJRVXNyVEN4VlFVRlZielZDTEVsQlFVa3NiVUpCUVcxQ2JteERMRXRCUVV0bUxFOUJRVTg0VWl4TFFVTnNTeTlSTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5clFpeG5Ra0ZCWjBJc1UwRkJVekZ5UXl4RlFVRkZReXhIUVVGSE5FSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTZWaXhMUVVGTE5FY3NXVUZCV1hwSkxFZEJRVWNzYzBSQlFXbEVMRWxCUVZORExFbEJRVWxCTEVWQlFVVTBRaXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQU1N4VFFVRlRReXhUUVVGVGFIQkRMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTl0UWl4UlFVRlJNWEpETEVWQlFVVTBRaXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQV1N4blFrRkJaMEp1Y2tNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRWRCUVVkRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKYVVNc1JVRkJSVW9zUlVGQlJUZENMRWRCUVVkclF5eEZRVUZGYkVNc1JVRkJSU3hGUVVGRk5rSXNSVUZCUlVjc1QwRkJUM1ZDTEVWQlFVVnlRaXhGUVVGRlRDeEZRVUZGTjBJc1JVRkJSU3hIUVVGSExFVkJRVVZ6VUN4RlFVRkZkRkFzUlVGQlJTeEZRVUZGTmtJc1JVRkJSVWNzVDBGQlR6aFNMRVZCUVVWNFJTeEZRVUZGZWs0c1JVRkJSVGRDTEVWQlFVVXNSMEZCUnl4RlFVRkZUQ3hGUVVGRmMwTXNSMEZCUnl4RlFVRkZRU3hIUVVGTExFVkJRVVpCTEVsQlFVMHNSVUZCUlhOQ0xFZEJRVWNzUlVGQlJVRXNSMEZCU3l4SFFVRkdRU3hKUVVGUExFVkJRVVYxVVN4SFFVRkhMRVZCUVVWQkxFZEJRVWNzUjBGQlIzaEZMRWxCUVVsM1JTeEZRVUZGTEVkQlFVYzFVaXhKUVVGSmNVSXNSVUZCUlN4TFFVRkxlRVFzUlVGQlJTdE1MRXRCUVV0b1N5eEZRVUZGYmtNc1IwRkJSMjFETEVWQlFVVkhMRWRCUVVkSUxFVkJRVVY1UWl4SlFVRkpMRWRCUVVkNlFpeEZRVUZGWjFNc1NVRkJTU3hKUVVGSkxFOUJRVTh2VkN4RlFVRkZjVW9zUzBGQlN5eExRVU4wWkRGR0xFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXZRaXhoUVVGaExGTkJRVk0xY2tNc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQyVXNjVUpCUVhGQ2RISkRMRVZCUVVVMFFpeExRVUZMWml4UFFVRlBNSEZETEV0QlFVdDRja01zUjBGQlJ6WkNMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlyUWl4blFrRkJaMEkzY0VNc1MwRkJTekJqTEUxQlFVMURMR3RDUVVGclFuaGxMRWRCUVVkRExFbEJRVWswUWl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGNVSXNZVUZCWVN4VFFVRlROM0pETEVWQlFVVkRMRWRCUVVjc1IwRkJSelJDTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5cFFpeHhRa0ZCY1VKNGNrTXNSVUZCUlN4UFFVRlBORUlzUzBGQlMyWXNUMEZCVHpoU0xFdEJRVXMxVXl4SFFVRkhMRWxCUVVrNVFpeEZRVUZGTEVkQlFYRkdMRTlCUVd4R01rUXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUM05DTEhOQ1FVRnpRamx5UXl4SFFVRkZMRk5CUVZOQkxFZEJRVWM1UWl4SFFVRkhaME1zVDBGQlQzbGxMR0ZCUVdFelpTeE5RVUZaT1VJc1IwRkROMWt5UkN4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGRVSXNkMEpCUVhkQ0xGTkJRVk12Y2tNc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hIUVVGeFJTeFBRVUZzUlRKRUxFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXpRaXh6UWtGQmMwSTVja01zUjBGQlJTeFRRVUZUUVN4SFFVRkhPVUlzUlVGQlJTdE1MRXRCUVV0cVN5eE5RVUZaT1VJc1IwRkRNVWt5UkN4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGQwSXNlVUpCUVhsQ0xGTkJRVk5vYzBNc1IwRkJSelpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTeXRNTEZWQlFWVnZOVUlzU1VGQlNXNXNReXhMUVVGTEswd3NWVUZCVlRCelFpeHJRa0ZCYTBJc1RVRkJUU3g1UTBGQmVVTXNTVUZCU1hJMlFpeEZRVUZGUkN4RlFVRkZSeXhQUVVGUGFrTXNSVUZCUlN4RlFVRkZLMElzUlVGQlJTeEZRVUZGTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGY1VRc1MwRkJTelpqTEUxQlFVMXNaMElzUjBGQlJ6SkVMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlYTEZkQlFWZHVja01zUlVGQlJVTXNSVUZCUlN4TlFVRk5MMElzUlVGQlJUSkVMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlYTEZkQlFWZHVja01zUlVGQlJVTXNSVUZCUlN4SlFVRkpMMElzUlVGQlJTeEZRVUZGUVN4RlFVRkZMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeEpRVUZKT0hSRExGZEJRVmN2ZEVNc1IwRkJSMnRETEVWQlFVVXNSVUZCYlVVc1QwRkJha1Y1UWl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGMwSXNjMEpCUVhOQ09YSkRMRWRCUVVVc1UwRkJVMEVzUjBGQlJ6ZENMRVZCUVVWcFF5eExRVUZMU2l4TFFVRlhOMElzUlVGQlJTdDBReXhUUVVGVExFVkJRVVU1Y2tNc1NVRkRiR0Y1UWl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGMwSXNjMEpCUVhOQ0xGTkJRVk01Y2tNc1JVRkJSVU1zUjBGQlJ5eFRRVUZUTDBJc1JVRkJSU3RDTEVkQlFVY3NTMEZCU3psQ0xFVkJRVVUyUWl4RlFVRkZSeXhSUVVGUkxFTkJRVU1zU1VGQlNXcERMRVZCUVVVNFFpeEZRVUZGSzBzc1QwRkJUelZOTEV0QlFVdHBReXhGUVVGRmVVSXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMkVzWlVGQlpXNTBReXhIUVVGSExFZEJRVWNzVFVGQlRXdERMRVZCUVVVc1QwRkJUMEVzUlVGQlJTeEpRVUZKZVVJc1MwRkJTelp3UWl4UFFVRlBkVWtzYjBKQlFXOUNMekZDTEVkQlFVY3NUVUZCVFdkR0xFMUJRVTBzYjBOQlFXOURhRVlzUjBGQlNTeFBRVUZQSzBJc1JVRkJSVFJDTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5dFFpeFJRVUZSTEVsQlFVa3NTVUZCU1hoMFF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkphVU1zUlVGQlJXeERMRWRCUVVjc1IwRkJSMjFETEVWQlFVVnVReXhGUVVGRkxFZEJRVWQzUkN4RlFVRkZlRVFzUlVGQlJTeEpRVUZKZFZBc1JVRkJSWFpRTEVWQlFVVXNTVUZCU1N4SFFVRkhMRXRCUVV0MVVDeEpRVUZKTEVsQlFVbHlUaXhGUVVGRkxFMUJRVTFJTEVWQlFVVkhMRWRCUVVjc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEVsQlFVbHhRaXhKUVVGSmVrSXNSVUZCUlVrc1IwRkJSeXhGUVVGRkxFbEJRVWx4UWl4SFFVRkhMRWRCUVVjc1NVRkJTU3RNTEVkQlFVZDRUaXhGUVVGRmVVSXNSMEZCUnl4RlFVRkZMRWxCUVVrclRDeE5RVU53WVRWTUxFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXRRaXhOUVVGTkxGZEJRVmNzU1VGQlNUbHdReXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQWVN4bFFVRmxMRU5CUVVONGNFTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMkVzWlVGQlpTeEhRVUZITEVsQlFVa3NTVUZCU1hKeVF5eEZRVUZGTmtJc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQwTXNlVUpCUVhsQ2VIQkRMRTFCUVUwc1NVRkJTV2hDTEVWQlFVVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3hOUVVGTkxFMUJRVTB2UWl4RlFVRkZMRVZCUVVVc1JVRkJSVUVzUlVGQlJVRXNTVUZCU1N4RFFVRkRMRWxCUVVsRExFVkJRVVUyUWl4RlFVRkZkMUFzVDBGQlQzWlFMRVZCUVVVdlFpeEhRVUZISzBNc1RVRkJUU3hMUVVGTFdTeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBXU3huUWtGQlowSnNkRU1zUjBGQlIwTXNSVUZCUlN4SlFVRkpMRWxCUVVscFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWcVF5eEZRVUZGWjBNc1QwRkJUME1zU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVWc1F5eEZRVUZGYVVNc1IwRkJSM05DTEVWQlFVVkhMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTloTEdWQlFXVm9ja01zVVVGQlJ5eEpRVUZUY1VJc1JVRkJSVWNzUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJFc1pVRkJaV2h5UXl4SFFVRkhSQ3hGUVVGRmVVSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVODFWaXhKUVVGSmRFSXNUMEZCVDJ0WkxFdEJRVXMyZWtJc1RVRkJUU3hIUVVGSE4zcENMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWeXhGUVVGRk9YcENMRXRCUVVzMmVrSXNUVUZCVFVVc1dVRkJXU3hGUVVGRkwzcENMRXRCUVVzMmVrSXNUVUZCVFVjc1dVRkJXU3hUUVVGVGRITkRMRWRCUVVjc1NVRkJTVU1zUlVGQlJVUXNTVUZCU1N4RlFVRkZRU3hGUVVGRmRVSXNTMEZCU3paakxFOUJRVTl3WlN4RlFVRkZReXhIUVVGSGNWa3NTMEZCUzBNc1owSkJRV2RDZVVNc1lVRkJZU3hGUVVGRk1VTXNTMEZCU3paNlFpeE5RVUZOUXl4WFFVRlhibk5ETEVWQlFVVnhXU3hMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmx5YzBNc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRVa3NWMEZCVnl4VFFVRlRkbk5ETEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hGUVVGRlJDeEZRVUZ2UWpsQ0xFZEJRV3hDT0VJc1JVRkJSWFZDTEV0QlFVdHhhVU1zU1VGQlNUVnFReXhOUVVGaExFVkJRVVZCTEVWQlFVVjFRaXhMUVVGTE5tTXNUMEZCVDNCbExFVkJRVVU1UWl4SFFVRkhiMkVzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCVjJoaUxFdEJRVXNzUlVGQlJVTXNTVUZCU1VRc1IwRkJSMEVzU1VGQlNTeEZRVUZsTEZsQlFXSTVRaXhGUVVGWExFbEJRVkJCTEVsQlFVa3NUVUZCYjBKQkxFVkJRVVVzUlVGQlRTeGhRVUZLT0VJc1NVRkJiVUpCTEVWQlFVVXNTMEZCUzNOWkxFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlYyeDFReXhGUVVGRmIyRXNTMEZCU3paNlFpeE5RVUZOUlN4WlFVRlpjbk5ETEVkQlEzbzBRbk5aTEV0QlFVczJla0lzVFVGQlRVc3NZMEZCWXl4VFFVRlRlSE5ETEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hGUVVGRlJDeEZRVUZGUVN4RlFVRkZMRVZCUVVWMVFpeExRVUZMY1dsRExFbEJRVWsxYWtNc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRVY3NXVUZCV1hSelF5eEhRVUZIUVN4RlFVRkZjMWtzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYTEVsQlFVbHNkVU1zUlVGQlJXOWhMRXRCUVVzMmVrSXNUVUZCVFVVc1dVRkJXWEJ6UXl4SlFVRkpMRWRCUVVkRUxFVkJRVVVzUjBGQlJ6bENMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZMRmxCUVZrNVFpeEpRVUZKT0VJc1JVRkJSU3haUVVGWlFTeExRVUZMYzFrc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWGNITkRMRVZCUVVWeldTeExRVUZMTm5wQ0xFMUJRVTFGTEZsQlFWbHVkVU1zUjBGRGJGQnZZU3hMUVVGTE5ucENMRTFCUVUxTkxHRkJRV0VzVTBGQlUzcHpReXhIUVVGSExFbEJRVWxETEVWQlFVVXNSVUZCUlVRc1JVRkJSU3hGUVVGRkxFVkJRVmNzUjBGQlJ5eExRVUZhUVN4RlFVRkZReXhIUVVGSFJDeEZRVUZGUVN4SFFVRlhMRVZCUVVVc1JVRkJSVUVzUjBGQlIzTlpMRXRCUVVzMmVrSXNUVUZCVFVVc1dVRkJXU3hGUVVGRkwzcENMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWeXhKUVVGSk9YcENMRXRCUVVzMmVrSXNUVUZCVFVVc1dVRkJXU3hGUVVGRkwzcENMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWeXhwUWtGQmFVSXNSMEZCUjNaTExFMUJRVTAzYUVNc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4RlFVRkZMM3BDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4blFrRkJaMElzUjBGQlIzQnpReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDYTBNc1dVRkJXVzVETEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4RlFVRkZMM3BDTEV0QlFVczJla0lzVFVGQlRVTXNXVUZCV1c1elF5eEhRVUZITEVkQlFVY3NZMEZCWXl4UFFVRlBMRWRCUVVkRUxFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSnBReXhaUVVGWmVHRXNSVUZCUlhWQ0xFdEJRVXR0Y2tNc1RVRkJUVEZ6UXl4RlFVRkZkVUlzUzBGQlMyOXlReXhKUVVGSkxFZEJRVWNzVFVGQlRYSXdRaXhMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmtzUlVGQlJTOTZRaXhMUVVGTE5ucENMRTFCUVUxRExGbEJRVmx1YzBNc1IwRkJSeXhIUVVOd1prUXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTVGxDTEVWQlFVVnhSQ3hMUVVGTE5tTXNUVUZCVFRkakxFdEJRVXR4Y2tNc1NVRkJTVFZ6UXl4SFFVRkhkVUlzUzBGQlMzTnlReXhMUVVGTE4zTkRMRWRCUVVkMVFpeExRVUZMYjNKRExFbEJRVWtzUjBGQlIzcDFReXhIUVVGSE9FSXNSVUZCSzBNc1VVRkJOME4xUWl4TFFVRkxiWEpETEUxQlFVMHhjME1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5WRExGZEJRVzFDZUVNc1MwRkJTelo2UWl4TlFVRk5SU3haUVVGWkxFVkJRVVV2ZWtJc1MwRkJTelo2UWl4TlFVRk5ReXhaUVVGWmJuTkRMRWRCUVVjc1IwRkJSeTlDTEVWQlFVVXNTMEZCU3l4SFFVRkhPRUlzUzBGQlN5eEpRVU5xVFhOWkxFdEJRVXMyZWtJc1RVRkJUVmNzWVVGQllTeFRRVUZUT1hORExFZEJRVWNzU1VGQlNVTXNSVUZCUlN4RlFVRkZSQ3hGUVVGRkxFVkJRVVVzUlVGQlZ5eEhRVUZITEV0QlFWcEJMRVZCUVVWRExFZEJRVWRFTEVWQlFVVkJMRWRCUVZkeldTeExRVUZMTm5wQ0xFMUJRVTFGTEZsQlFWa3NSVUZCUlN4RlFVRkZjbk5ETEVWQlFVVXNSVUZCUlN4WFFVRlhjMWtzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYTEU5QlFVOHNSMEZCUjNaTExFMUJRVTAzYUVNc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4WFFVRlhMM3BDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4blFrRkJaMElzUjBGQlIzQnpReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDY1VNc1dVRkJXWFJETEV0QlFVczJla0lzVFVGQlRVVXNZVUZCWVhCelF5eEhRVUZITEVkQlFVY3NZMEZCWXl4RlFVRkZjVmtzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYTEU5QlFVOHNSMEZCUjNCelF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENiME1zV1VGQldTeERRVUZETEVsQlFVbDZZeXhGUVVGRk9FSXNSVUZCUlhWQ0xFdEJRVXR2Y2tNc1NVRkJTU3hIUVVGSExFMUJRVTB6YzBNc1JVRkJSVGxDTEVWQlFVVnZZU3hMUVVGTFF5eG5Ra0ZCWjBKNVF5eFZRVUZWTVVNc1MwRkJTelo2UWl4TlFVRk5SU3hoUVVGaGNITkRMRWRCUVVjc1IwRkJSMFFzUzBGQlN5eEZRVUZGYzFrc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWGJIVkRMRWxCUVVrc1RVRkJUU3hEUVVOMlppeEpRVUZKUXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhKUVVRMlpVUXNSVUZETVdZNFFpeEhRVUZyUWl4TFFVRkxMRWRCUVVjNVFpeEhRVUZITEV0QlFVdERMRWRCUVVkQkxFbEJRVWxFTEVkQlFVY3NUMEZCVHl4TFFVRkxMRVZCUVVWQkxFbEJRVWtzUzBGQlMwTXNSMEZCUjBRc1IwRkJSeXhGUVVGRlF5eEpRVUYxUWpaQ0xFZEJRVzVDT1VJc1JVRkJSVGhDTEVWQlFVVjFRaXhMUVVGTGIzSkRMRWxCUVVrc1IwRkJSM2gxUXl4SlFVRlBiV0VzUzBGQlMwTXNaMEpCUVdkQ2MwTXNWVUZCVlN4UlFVRlJNMk1zUlVGQlJVRXNSVUZCUlc5aExFdEJRVXRETEdkQ1FVRm5RakJETEZsQlFWa3NSVUZCUlRORExFdEJRVXMyZWtJc1RVRkJUVVVzWVVGQllYQnpReXhIUVVGSExFZEJRVWM1UWl4RlFVRkZMRTFCUVUwc1IwRkJSelpDTEV0QlFVc3NSVUZCUlhOWkxFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlYyeDFReXhKUVVNeFVHOWhMRXRCUVVzMmVrSXNUVUZCVFZrc1dVRkJXU3hUUVVGVEwzTkRMRWRCUVVjc1NVRkJTVU1zUlVGQlJVUXNSVUZCUlhsbExGZEJRVmNzUjBGQlIzWm5RaXhGUVVGRk9FSXNSVUZCUlhsbExGZEJRVmNzUjBGQlIzUm5RaXhGUVVGRk5rSXNSVUZCUlhsbExGZEJRVmNzUjBGQlIzSmxMRVZCUVVWS0xFVkJRVVY1WlN4WFFVRlhMRWRCUVVkd1pTeEZRVUZGVEN4RlFVRkZlV1VzVjBGQlZ5eEhRVUZITDJNc1JVRkJSVEZDTEVWQlFVVjVaU3hYUVVGWExFZEJRVWRvVWl4RlFVRkZlazRzUlVGQlJYbGxMRmRCUVZjc1IwRkJSM3BsTEVWQlFVVkJMRVZCUVVWNVpTeFhRVUZYTEVkQlFVZHVSeXhMUVVGTE5ucENMRTFCUVUxRExGZEJRVmR1YzBNc1IwRkJSeTlDTEVkQlFVY3NTVUZCU1VNc1IwRkJSeXhMUVVGTGFVTXNSMEZCUnl4TlFVRk5MRVZCUVVWcldTeExRVUZMTm5wQ0xFMUJRVTFGTEZsQlFWbG9jME1zUjBGQlIzRkNMRWRCUVVjc1NVRkJTU3RNTEVkQlFVY3NTMEZCUzNwT0xFZEJRVWNzVFVGQlRTeEhRVUZIYzFrc1MwRkJTelo2UWl4TlFVRk5ZU3hYUVVGWExGTkJRVk5vZEVNc1JVRkJSVU1zUjBGQlJ5eFBRVUZQUVN4RlFVRkZjVmtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCVjJoaUxFbEJRVWtzU1VGRGFGaHpXU3hMUVVGTE5ucENMRTFCUVUxakxGVkJRVlVzVTBGQlUycDBReXhGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGSkxGZEJRVVlyUWl4RlFVRnhSaXhQUVVGNFJTOUNMRWxCUVdVclFpeEhRVUZIUVN4SlFVRkpMRVZCUVVVc1NVRkJjRUpFTEVWQlFVc3NSMEZCUmtFc1NVRkJUU3hMUVVGclFrTXNSVUZCUlVFc1JVRkJSU3hKUVVGSkxFbEJRVWxFTEVWQlFVVnpXU3hMUVVGTE5ucENMRTFCUVUxaExGZEJRVmRvZEVNc1JVRkJSVU1zUjBGQlZTOUNMRWRCUVVjNFFpeEZRVUZGUVN4SFFVRkhjMWtzUzBGQlN6WjZRaXhOUVVGTlpTeFhRVUZYTEZOQlFWTnNkRU1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzU1VGQlNVTXNSVUZCUlRoQ0xFZEJRVWNzUjBGQlJ5eFBRVUZQTDBJc1JVRkJSVGhDTEVkQlFVY3NSVUZCUlRkQ0xFZEJRVWM0UWl4SFFVRkhMRVZCUVVWRUxFbEJRVWtzU1VGQlNUZENMRWxCUVVsdFlTeExRVUZMTm5wQ0xFMUJRVTFuUWl4aFFVRmhMRk5CUVZOdWRFTXNSVUZCUlVNc1IwRkJSeXhQUVVGUGNWa3NTMEZCU3paNlFpeE5RVUZOYVVJc1lVRkJZWEIwUXl4RlFVRkZReXhGUVVGRmNWa3NTMEZCU3paNlFpeE5RVUZOWXl4WlFVRlpNekJDTEV0QlFVczJla0lzVFVGQlRXbENMR0ZCUVdFc1UwRkJVM0IwUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhKUVVGTkxFVkJRVVkyUWl4SFFVRkxMRTlCUVU4NVFpeEhRVUZIT0VJc1NVRkJTU3hGUVVGRlF5eEhRVUZITEVsQlFVazVRaXhGUVVGRk9FSXNTVUZCU1N4RlFVRkZPVUlzU1VGRGNscHRZU3hMUVVGTE5ucENMRTFCUVUxclFpeFpRVUZaTEZOQlFWTnlkRU1zUlVGQlJVTXNSMEZCUjBFc1JVRkJSU3hIUVVGSFJDeEhRVUZITEVsQlFVa3NSVUZCUlN4SlFVRkpPVUlzUlVGQlJUaENMRWxCUVVrc1IwRkJSeXhKUVVGbExFOUJRVmhCTEVkQlFVY3NVVUZCWlN4TFFVRkxPVUlzUlVGQlJUaENMRVZCUVVWcGEwTXNTVUZCU1hGS0xFbEJRVk55ZEVNc1JVRkJSU3hIUVVGSEwwSXNSVUZCUlN0Q0xFVkJRVVZ6UWl4TFFVRkxiM0pETEVsQlFVa3NSMEZCUnl4TFFVRkxNM05ETEVWQlFVVkRMRVZCUVVWelFpeExRVUZMYjNKRExFbEJRVWtzUlVGQlJYcDFReXhGUVVGRkxFMUJRVTA0UWl4RlFVRkZkVUlzUzBGQlMyOXlReXhKUVVGSkxFVkJRVVVzVFVGQlRYSXdRaXhMUVVGTE5ucENMRTFCUVUxdlFpeFpRVUZaTEZOQlFWTjJkRU1zUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJTeEhRVUZISzBJc1IwRkJSeXhKUVVGSkxFVkJRVVU1UWl4RlFVRkZPRUlzU1VGQlNTeEhRVUZITEV0QlFXOUVMRTlCUVM5RFJDeEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQllTeFJRVUZHTDJFc1IwRkJWMFFzUlVGQlV5eE5RVUZOTjBJc1JVRkJSVFpDTEVWQlFVVnBhME1zU1VGQlNYRktMRWxCUVZOd2RrTXNSVUZCUlN4SFFVRkhReXhGUVVGRlJDeEZRVUZGY1VRc1MwRkJTMjl5UXl4SlFVRkpMRWRCUVVjc1RVRkJUVE56UXl4RlFVRkZPVUlzUlVGQlJYRkVMRXRCUVV0dmNrTXNTVUZCU1N4RlFVRkZlSFZETEVWQlFVVXNUMEZCVHpaQ0xFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSXdReXhaUVVNMVdUTkRMRXRCUVVzMmVrSXNUVUZCVFhGQ0xGZEJRVmNzVTBGQlUzaDBReXhGUVVGRlF5eEhRVUZITEU5QlFVOURMRTlCUVU5NVpTeGhRVUZoTTJVc1NVRkJTU3hGUVVGRkxFbEJRVWxCTEVsQlFVa3NSVUZCUlN4SlFVRkpRU3hKUVVGSkxFZEJRVWNzU1VGQlNVRXNTVUZCU1N4SFFVRkhMRWxCUVVsRExFbEJRVWtzUlVGQlJTeEpRVUZKUVN4SlFVRkpMRVZCUVVVc1NVRkJTVUVzU1VGQlNTeEhRVUZITEVsQlFVbEJMRWxCUVVrc1IwRkJSeXhOUVVGTmNWa3NTMEZCU3paNlFpeE5RVUZOYzBJc1QwRkJUeXh0UWtGQmJVSjRjME1zVFVGQlRTeEpRVUZKY1Znc1MwRkJTelo2UWl4TlFVRk5kVUlzWjBKQlFXZENMRWRCUVVkd01VSXNTMEZCU3paNlFpeE5RVUZOZDBJc1lVRkJZU3hIUVVNeFVISXhRaXhMUVVGTE5ucENMRTFCUVUxNVFpd3dRa0ZCTUVJc1UwRkJVelYwUXl4RlFVRkZReXhIUVVGSExGTkJRVk12UWl4RlFVRkZPRUlzUlVGQlJVTXNSMEZCYjBJc1QwRkJha0pFTEVWQlFVVkJMRVZCUVVWRkxFOUJRVTlHTEVkQlFVY3NSMEZCVlVNc1JVRkJSU3hWUVVGVk1rb3NUVUZCVFRWS0xFVkJRVVZITEZGQlFWRklMRVZCUVVWQkxFVkJRVVVzUjBGQlJ5eFRRVUZUUXl4RlFVRkZMRTFCUVUwc1IwRkJSM0ZaTEV0QlFVczJla0lzVFVGQlRXRXNWMEZCVjJoMFF5eEZRVUZGUXl4SFFVRkhMRWxCUVVrNVFpeEhRVUZITmtJc1NVRkJTU3hIUVVGSFF5eEhRVUZITEV0QlFVc3NSVUZCUlN4VFFVRjNTaXhQUVVGcVNVUXNSMEZCU3l4VFFVRkdRU3hIUVVGWkxGRkJRVkUzUWl4RlFVRkZMRk5CUVhaRE9FSXNSVUZCUlVFc1IwRkJSeXhIUVVGSExFOUJRWGxET1VJc1IwRkJSeXhSUVVGUk9FSXNSVUZCUlVFc1IwRkJSeXhGUVVGRkxFdEJRVXRFTEVsQlFVazNRaXhIUVVGSGIwUXNTMEZCU3paakxFMUJRVTF3WlN4RlFVRkZMRXRCUVV0QkxFZEJRVWNzUzBGQlN5eExRVUZMTjBJc1NVRkJTVGhDTEVkQlFVZHpRaXhMUVVGTE5tTXNUVUZCVFdwblFpeEZRVUZGTEV0QlFVdEJMRWRCUVVjc1MwRkJXVVFzUlVGQlJTdENMRVZCUVVVc1IwRkJSeTlDTEVWQlFVVkRMRVZCUVVVNFFpeEhRVUZITDBJc1JVRkJSVGhDTEVWQlFVVXNTVUZEZEZoeldTeExRVUZMTm5wQ0xFMUJRVTB3UWl4M1FrRkJkMElzVTBGQlV6ZDBReXhGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGSkxGZEJRVVlyUWl4RlFVRTJSaXhQUVVGb1JpOUNMRWxCUVdVclFpeEhRVUZIUVN4SFFVRkhMRWxCUVdwQ1JDeEZRVUZMTEVkQlFVWkJMRWxCUVUwc1IwRkJZU3hGUVVGRkxFdEJRVXNzUjBGQlIwRXNSVUZCUlhOWkxFdEJRVXMyZWtJc1RVRkJUWGxDTERCQ1FVRXdRalYwUXl4RlFVRkZReXhIUVVGVkwwSXNSVUZCUlN4SlFVRkpPRUlzUlVGQlJVRXNSMEZCUjNOWkxFdEJRVXMyZWtJc1RVRkJUVEpDTEhOQ1FVRnpRaXhUUVVGVE9YUkRMRVZCUVVWRExFZEJRVWR4V1N4TFFVRkxObnBDTEUxQlFVMVpMRmxCUVZrdmMwTXNSMEZCUjBFc1JVRkJSWE5aTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4SlFVRkpiSFZETEVWQlFVVnZZU3hMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmtzVDBGQlQzQnpReXhGUVVGRmNWa3NTMEZCU3paNlFpeE5RVUZOTUVJc2QwSkJRWGRDTjNSRExFVkJRVVU1UWl4SFFVRkhiMkVzUzBGQlN6WjZRaXhOUVVGTmVVSXNNRUpCUVRCQ05YUkRMRVZCUVVVNVFpeEpRVU0xV0c5aExFdEJRVXMyZWtJc1RVRkJUVFJDTERSQ1FVRTBRaXhUUVVGVEwzUkRMRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1JVRkJSVEJETEUxQlFVMWFMRVZCUVVWSExGRkJRVkZvUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVUyUWl4RlFVRkZSeXhQUVVGUGFFTXNTVUZCU1VRc1JVRkJSVU1zUjBGQlIyMWhMRXRCUVVzMmVrSXNUVUZCVFRKQ0xITkNRVUZ6UWpsMFF5eEZRVUZGTjBJc1IwRkJSemhDTEVkQlFVY3NUMEZCVHk5Q0xFZEJRM1pLYjJFc1MwRkJTelo2UWl4TlFVRk5Oa0lzYzBKQlFYTkNMRk5CUVZOb2RVTXNSMEZCUnl4VFFVRlRReXhGUVVGRlJDeEZRVUZGUXl4SFFVRkhMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlN4RlFVRkZRU3hKUVVGSkxFbEJRVWs0UWl4SFFVRkhMRVZCUVVWRExFZEJRVWN2UWl4SlFVRkpLMElzUlVGQlJVUXNSVUZCUlVrc1JVRkJSV3hETEVkQlFVY3JRaXhGUVVGRlJ5eEZRVUZGYkVNc1IwRkJTeXhKUVVGR0swSXNSVUZCVFVFc1MwRkJTeXhGUVVGclJEUkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRVZCUVVWMFdDeEZRVUZGUnl4UlFVRlJMRWxCUVVsb1F5eEhRVUZGTEVWQlFVY3NUVUZCVFRaQ0xFVkJRVVVzUzBGQlN6ZENMRWRCUVVVc1JVRkJSelpDTEVWQlFVVkJMRVZCUVVVMFNpeE5RVUZOTEVsQlFVa3NTVUZCU1N4SlFVRkplRW9zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUjBGQlIwTXNSVUZCUlN4RlFVRkZRU3hGUVVGRlRDeEZRVUZGUnl4UFFVRlBSU3hKUVVGSlNpeEZRVUZGTEVkQlFVZEVMRVZCUVVWNVpTeFhRVUZYY0dVc1IwRkJSMmxaTEV0QlFVczJla0lzVFVGQlRYVkNMR2xDUVVGcFF5eFBRVUZvUW5aMlF5eEpRVUY2VGl4WFFVRmhMRWxCUVVrc1NVRkJTVFpDTEVWQlFVVXNSVUZCUlN4RlFVRkZRU3hGUVVGRlFTeEpRVUZKU1N4RlFVRkZTaXhIUVVGVExFdEJRVXhKTEVWQlFVVktMRWRCUVc5TU9VSXNSMEZCU1N0Q0xFVkJRVVVzUlVGQlJTeEpRVUZYTkVJc1MwRkJTekJqTEUxQlFVMUhMR3RDUVVGclFuUmxMRWxCUVVscldTeExRVUZMTm5wQ0xFMUJRVTA0UWl4dFFrRkJiVUlzVTBGQlUycDFReXhIUVVGSGMxa3NTMEZCU3paNlFpeE5RVUZOV1N4WlFVRlplakJDTEV0QlFVczJla0lzVFVGQlRUWkNMSE5DUVVGelFtaDFReXhMUVVNdlpYTlpMRXRCUVVzMmVrSXNUVUZCVFN0Q0xGbEJRVmtzVTBGQlUyeDFReXhIUVVGSExFOUJRVTlGTEU5QlFVOTVaU3hoUVVGaExFZEJRVWN6WlN4RlFVRkZjMWtzUzBGQlN6WjZRaXhOUVVGTmRVSXNaMEpCUVdkQ01YUkRMRVZCUVVWeldTeExRVUZMTm5wQ0xFMUJRVTEzUWl4aFFVRmhMRWRCUVVjemRFTXNTVUZCU1hOWkxFdEJRVXMyZWtJc1RVRkJUV2RETEdsQ1FVRnBRaXhUUVVGVGJuVkRMRWRCUVVjc1QwRkJUMEVzUjBGQlIzTlpMRXRCUVVzMmVrSXNUVUZCVFhkQ0xHRkJRV0V6ZEVNc1JVRkJSWE5aTEV0QlFVczJla0lzVFVGQlRYZENMR0ZCUVdFc1IwRkJSek4wUXl4RlFVRkZjMWtzUzBGQlN6WjZRaXhOUVVGTmRVSXNhVUpCUVdsQ2NERkNMRXRCUVVzMmVrSXNUVUZCVFdsRExHdENRVUZyUWl4VFFVRlRjSFZETEVkQlFVY3NTVUZCU1VNc1JVRkJSVmNzVFVGQlRTeEpRVUZKV0N4RlFVRkZMRWRCUVVjc1NVRkJTVUVzUlVGQlJTeEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMMElzUlVGQlJTeEZRVUZGTEVWQlFVVkJMRVZCUVVWQkxFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZOa0lzUlVGQlJYbGxMRmRCUVZjc1JVRkJSWFpuUWl4SFFVRkhLMElzUlVGQlJTeEZRVUZGTDBJc1JVRkJSU3hIUVVGSGIyRXNTMEZCU3paNlFpeE5RVUZOSzBJc1dVRkJXUzkyUXl4SFFVRkhMRWRCUVVjNFFpeEZRVUZGTEVWQlFVVXZRaXhGUVVGRkxFZEJRVWR2WVN4TFFVRkxObnBDTEUxQlFVMHJRaXhaUVVGakxFZEJRVVl2ZGtNc1IwRkJUU3hQUVVGUE9FSXNSVUZCUlhOSUxFdEJRVXNzUzBGRGRHUXJVU3hMUVVGTE5ucENMRTFCUVUxclF5eHJRa0ZCYTBJc1UwRkJVM0oxUXl4SFFVRkhRU3hGUVVGRlFTeEZRVUZGWjNWQ0xHTkJRV051YzBJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1NVRkJTWFJZTEVWQlFVVkhMRkZCUVZFd1FpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eExRVUZMZEZnc1JVRkJSU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNTMEZCUzNSWUxFVkJRVVVzU1VGQlNTeEpRVUZKTEVsQlFVbERMRVZCUVVVc1IwRkJSeTlDTEVWQlFVVXNSVUZCUlN4RlFVRkZRU3hGUVVGRlFTeEpRVUZKTEVOQlFVTXNTVUZCU1VNc1JVRkJSVzFoTEV0QlFVczJla0lzVFVGQlRXZERMR2xDUVVGcFFtNTFReXhGUVVGRmVXVXNWMEZCVnl4RlFVRkZkbWRDTEVWQlFVVXNTVUZCU1d0RExFVkJRVVZyV1N4TFFVRkxObnBDTEUxQlFVMW5ReXhwUWtGQmFVSnVkVU1zUlVGQlJYbGxMRmRCUVZjc1JVRkJSWFpuUWl4RlFVRkZMRWxCUVVrclFpeEZRVUZGUXl4UFFVRlBlV1VzWVVGQllTeEhRVUZIZUdkQ0xFVkJRVVZwUXl4SFFVRkhTQ3hGUVVGRkxFOUJRVTlCTEVkQlEzUlZjVmtzUzBGQlN6WjZRaXhOUVVGTmJVTXNaVUZCWlN4VFFVRlRkSFZETEVWQlFVVkRMRWRCUVVkeFdTeExRVUZMTm5wQ0xFMUJRVTFaTEZsQlFWa3ZjME1zUjBGQlIwRXNSVUZCUlhOWkxFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ5eEpRVUZKYkhWRExFVkJRVVZ2WVN4TFFVRkxObnBDTEUxQlFVMUZMRmxCUVZrc1QwRkJUM0J6UXl4RlFVRkZjVmtzUzBGQlN6WjZRaXhOUVVGTll5eFZRVUZWYW5SRExFVkJRVVU1UWl4SFFVRkhiMkVzUzBGQlN6WjZRaXhOUVVGTllTeFhRVUZYYUhSRExFVkJRVVU1UWl4SlFVRkpiMkVzUzBGQlN6WjZRaXhOUVVGTmIwTXNaVUZCWlN4VFFVRlRkblZETEVkQlFUUkNMRTlCUVhwQ2Mxa3NTMEZCU3paNlFpeE5RVUZOU1N4WFFVRlhkbk5ETEVkQlFWVnpXU3hMUVVGTE5ucENMRTFCUVUxeFFpeFhRVUZYYkRGQ0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ6bDZRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRV012ZWtJc1MwRkJTelo2UWl4TlFVRk5jVU1zWVVGQllTeFRRVUZUZUhWRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4RlFVRkZhVU1zUlVGQlJVZ3NSVUZCUlVjc1JVRkJSV3hETEVWQlFVVnJReXhKUVVGSmFrTXNSMEZCUnpaQ0xFVkJRVVZKTEVsQlFVa3NSVUZCUlN4UFFVRlBiRU1zUlVGQlJTdENMRVZCUVVVNVFpeEhRVU4yV20xaExFdEJRVXMyZWtJc1RVRkJUWE5ETEd0Q1FVRnJRaXhUUVVGVGVuVkRMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGSExFbEJRVWxwUXl4RlFVRkZMRVZCUVRaRExFZEJRVWNzUzBGQk9VTnFReXhGUVVGRkxFVkJRVVZCTEVWQlFVVnRZU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUXl4UlFVRm5RaXhMUVVGTGFHRXNSVUZCUlM5Q0xFZEJRVWM0UWl4RlFVRkZReXhOUVVGTk9VSXNSMEZCUnl4SlFVRkphVU1zVFVGQlRTeERRVUZETEVsQlFVbERMRVZCUVVWTUxFVkJRVVZETEV0QlFVc3NSMEZCUnl4SlFVRk5MRWxCUVVaSkxFZEJRVThzVjBGQlZ5eExRVUZMU2l4RlFVRkZMMElzUjBGQlJ5eERRVUZETEVsQlFVbHRReXhGUVVGRmJFTXNSVUZCUlN4SlFVRkphME1zUjBGQlJ5eERRVUZETEVkQlFVZE1MRVZCUVVWRExFdEJRVThzU1VGQlJra3NSVUZCVFN4TFFVRkxMRTlCUVU5RUxFVkJRVVZJTEVsQlFVbEpMRWxCUVVrc1JVRkJSU3hIUVVGSFRDeEZRVUZGUXl4TlFVRk5TU3hGUVVGRkxFMUJRVTBzU1VGQlNVUXNTVUZCWVN4SlFVRk5MRXRCUVdaRExFVkJRVVZNTEVWQlFVVkRMRlZCUVcxQ0xFOUJRVTlITEVkQlFVZHJXU3hMUVVGTE5ucENMRTFCUVUxMVF5eHJRa0ZCYTBJc1UwRkJVekYxUXl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlNXeERMRVZCUVVVc1MwRkJTemhDTEVWQlFVVXZRaXhIUVVGSE9FSXNSVUZCUlVNc1RVRkJUVGxDTEVkQlFVZHJReXhKUVVGSlNpeEhRVUZIUnl4UFFVRlBMRXRCUVV0SUxFVkJRVVV2UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hKUVVGSmQwUXNSVUZCUlhaRUxFVkJRVVVzU1VGQlNYVkVMRWRCUVVjc1EwRkJReXhIUVVGSE1VSXNSVUZCUlVNc1QwRkJVeXhKUVVGR2VVSXNSVUZCVFN4TFFVRkxMRTlCUVU5eVFpeEZRVUZGY1VJc1NVRkJTU3hGUVVGRkxFZEJRVWN4UWl4RlFVRkZReXhOUVVGTmVVSXNSVUZCUlN4TlFVRk5ja0lzU1VGQlNVb3NSMEZCUjBjc1JVRkJSU3hQUVVGUFF5eEhRVU0zWm1sWkxFdEJRVXMyZWtJc1RVRkJUWGRETEcxQ1FVRnRRaXhUUVVGVE0zVkRMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGSExFOUJRVTl0WVN4TFFVRkxObnBDTEUxQlFVMTFReXhyUWtGQmEwSXhkVU1zUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVVzUlVGQlJVTXNSVUZCUlcxaExFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTmtMRkZCUVZFc1NVRkJTVm9zUzBGQlN6WjZRaXhOUVVGTmVVTXNiVUpCUVcxQ0xGTkJRVk0xZFVNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVWNzVDBGQlQyMWhMRXRCUVVzMmVrSXNUVUZCVFhWRExHdENRVUZyUWpGMVF5eEZRVUZGUXl4RlFVRkZMMElzUlVGQlJTeEZRVUZGUXl4RlFVRkZiV0VzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJZc1VVRkJVU3hKUVVNMVVWZ3NTMEZCU3paNlFpeE5RVUZOTUVNc2NVSkJRWEZDTEZOQlFWTTNkVU1zUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFVY3NTVUZCU1dsRExFVkJRVVVzUlVGQlJTeEpRVUZKYWtNc1JVRkJSU3hGUVVGRlFTeEZRVUZGYldFc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwVXNWVUZCVldwaExFVkJRVVV2UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hKUVVGSmJVTXNSVUZCUld4RExFVkJRVVVzU1VGQlNXdERMRWRCUVVjc1EwRkJReXhIUVVGSFRDeEZRVUZGUXl4UFFVRlRMRWxCUVVaSkxFVkJRVTBzUzBGQlN5eFBRVUZQUkN4RlFVRkZReXhKUVVGSkxFVkJRVVVzUjBGQlIwd3NSVUZCUlVNc1RVRkJUVWtzUlVGQlJTeE5RVUZOUkN4SlFVRkpMRWxCUVVrc1NVRkJTWE5DTEVWQlFVVXNSVUZCUlN0TUxFVkJRVVVzUlVGQlZ5OU1MRWxCUVUwc1MwRkJabkpDTEVWQlFVVk1MRVZCUVVWRExFOUJRV2RDZDA0c1JVRkJSVUVzUjBGQlJ5eEpRVUZKTEVsQlFVMHNTVUZCUm5CT0xFdEJRVk5LTEVkQlFVZDVRaXhGUVVGRkxFOUJRVTkwUWl4SFFVRkhhMWtzUzBGQlN6WjZRaXhOUVVGTk1rTXNkVUpCUVhWQ0xGTkJRVk01ZFVNc1IwRkJSeXhKUVVGSlF5eEZRVUZGTEVsQlFVa3NSMEZCUjBRc1JVRkJSU3hEUVVGRFFTeEZRVUZGYzFrc1MwRkJTelo2UWl4TlFVRk5ORU1zZFVKQlFYVkNMM1ZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZPRUlzUlVGQlJVY3NUMEZCVDJwRExFbEJRVWtyUWl4SFFVRkhMRTFCUVUwc1IwRkJSMFFzUlVGQlJUbENMRXRCUVVzclFpeEhRVUZITEV0QlFVdEJMRWRCUVVkRUxFVkJRVVU1UWl4SFFVRkhiVXNzVTBGQlV5eEpRVUZKTEU5QlFVOXdTU3hGUVVGRkxFdEJRM0pqY1Zrc1MwRkJTelo2UWl4TlFVRk5Oa01zZDBKQlFYZENMRk5CUVZOb2RrTXNSMEZCUnl4TlFVRk5MR2xDUVVGclFrRXNSVUZCUlRaQ0xFdEJRVXMyY0VJc1QwRkJUM1ZZTEUxQlFVMXFha01zUjBGQlIwRXNSVUZCUlhGSkxGbEJRVmxwVVN4TFFVRkxObnBDTEUxQlFVMHpkRUlzYTBKQlFXdENMRk5CUVZONFpTeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hKUVVGSlozTkRMRmRCUVZkcWMwTXNSVUZCUlVjc1VVRkJVV3BETEVWQlFVVXNSVUZCUlVFc1JVRkJSVGhDTEVWQlFVVkhMRTlCUVU5cVF5eEpRVUZKTEVOQlFVTXNTVUZCU1VNc1JVRkJSVFpDTEVWQlFVVjVaU3hYUVVGWGRtZENMRWRCUVVjc1IwRkJSeXhKUVVGSlF5eEZRVUZGTEUxQlFVMHJSU3hOUVVGTkxIRkZRVUZ4UldwRUxFVkJRVVV2UWl4SFFVRkhReXhGUVVGRkxFOUJRVTg0UWl4SFFVTXhWWEZaTEV0QlFVczJla0lzVFVGQlRUUkRMSFZDUVVGMVFpeFRRVUZUTDNWRExFZEJRVWNzVDBGQlIwRXNSVUZCUlRaTUxHTkJRV052WjBNc1YwRkJhMEpxYzBNc1JVRkJTMEVzUlVGQlJUWk1MR05CUVdOdmFrTXNhMEpCUVdFc1NVRkJiMEpETEZGQlFWRnNka01zUlVGQlJUWk1MR05CUVdOeGFrTXNVVUZCVVd4MlF5eEZRVUZGTmt3c1kwRkJZMnBNTEUxQlFXRXNTVUZCU1hGeVF5eFhRVUZYYW5ORExFZEJRVTFCTEVWQlFVVTJUQ3hqUVVGak0wd3NUMEZCWXpKQ0xFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOTNRaXg1UWtGQmVVSm9jME1zU1VGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMSFZEUVVFNFF5eEpRVUZKZVRCQ0xGZEJRVmNzUzBGQlNUTjZRaXhMUVVGTE5qSkNMR05CUVdNc1UwRkJVMjUyUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpaRExFdEJRVXR4ZFVNc1QwRkJUeXhMUVVGTGNuVkRMRXRCUVV0emRVTXNVVUZCVVhSMVF5eExRVUZMZFhWRExFdEJRVXQyZFVNc1MwRkJTM2QxUXl4UFFVRlBMRVZCUVVWNGRVTXNTMEZCUzNsMVF5eFJRVUZQTEVWQlFVZDRka01zUjBGQlIyVXNTMEZCU3pCMVF5eFRRVUZUZW5aRExFVkJRVVZETEVWQlFVVXZRaXhKUVVGSmIyRXNTMEZCU3pZeVFpeGpRVUZqVHl4bFFVRmxMRWRCUVVkd00wSXNTMEZCU3pZeVFpeGpRVUZqVVN4TlFVRk5MRk5CUVZNemRrTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NSMEZCUjI5aExFdEJRVXMyTWtJc1kwRkJZMDhzWlVGQlpYWjJReXhQUVVGUExFTkJRVU1zU1VGQlNXaERMRVZCUVVWdFlTeExRVUZMTmpKQ0xHTkJRV05QTEdWQlFXVjZXQ3hOUVVFeVFpeFBRVUZ5UW1vMFFpeEhRVUZITjBJc1JVRkJSWE40UXl4VFFVRlRlblpETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZWUXl4RlFVRkZMRTlCUVU4c1NVRkJTVzFoTEV0QlFVczJNa0lzWTBGQlkyNTJReXhGUVVGRlF5eEZRVUZGTDBJc1NVRkJTVzloTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVmJYZERMRXRCUVVzc1YwRkJWemQxUXl4TFFVRkxlVlFzVVVGQlVTeEpRVUZKT0VRc1MwRkJTell5UWl4alFVRmpUeXhsUVVGbGRuWkRMRkZCUVZGdFdTeExRVUZMTmpKQ0xHTkJRV05QTEdWQlFXVjZiRU1zUzBGQlMyeEtMRTlCUTNZelFuVllMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWT0Vvc1RVRkJUU3hYUVVGWExFOUJRVThyVHl4TFFVRkxOakpDTEdOQlFXTlJMRTFCUVUwMWRVTXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXQzZFVNc1QwRkJUM2gxUXl4TFFVRkxkWFZETEV0QlFVdDJkVU1zUzBGQlMzZDFReXhUUVVGVGFqTkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWSzFVc1RVRkJUU3hYUVVGWGVsUXNTMEZCUzNGMVF5eFBRVUZQTEV0QlFVdHlkVU1zUzBGQlMzTjFReXhSUVVGUmRIVkRMRXRCUVV0MWRVTXNTMEZCUzNaMVF5eExRVUZMZDNWRExFOUJRVThzUlVGQlJYaDFReXhMUVVGTGVYVkRMRkZCUVU4c1IwRkJTV3d6UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZXOTNReXhWUVVGVkxGZEJRVmNzVDBGQlR6bDFReXhMUVVGTGNYVkRMRkZCUTJoVU9USkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWWjNkRExGTkJRVk1zVTBGQlUzcDJReXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSelpETEV0QlFVdHhkVU1zVDBGQlR6a3lRaXhMUVVGTE5ucENMRTFCUVUwMFF5eDFRa0ZCZFVJdmRVTXNSMEZCUjJVc1MwRkJTM2QxUXl4WlFVRlBMRWxCUVZOMGRrTXNSVUZCUlVFc1JVRkJSU3hGUVVGRll5eExRVUZMZFhWRExGVkJRVXNzU1VGQlUzQjRReXhGUVVGRk5rTXNTMEZCUzNkMVF5eFBRVUZQY25oRExFVkJRVVUyUXl4TFFVRkxjWFZETEU5QlFVOXFka01zVDBGQlQxa3NTMEZCUzNOMVF5eFJRVUZSZEhWRExFdEJRVXQzZFVNc1VVRkJVV296UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZYRjNReXhQUVVGUExGZEJRVmNzVDBGQlR5OTFReXhMUVVGTGRYVkRMRTFCUVUxb00wSXNTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZ6ZDBNc1QwRkJUeXhUUVVGVEwzWkRMRWRCUVVkbExFdEJRVXQxZFVNc1MwRkJTM1IyUXl4SFFVRkhjMWtzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWMWQwTXNUVUZCVFN4WFFVRlhhblpETEV0QlFVdHpkVU1zVVVGQlVYUjFReXhMUVVGTGQzVkRMRkZCUVZGcU0wSXNTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlYzZDBNc1ZVRkJWU3hYUVVGWExFOUJRVTlzZGtNc1MwRkJTM04xUXl4VFFVTjBaQzh5UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZYbDNReXhWUVVGVkxGTkJRVk5zZDBNc1IwRkJSMlVzUzBGQlMzTjFReXhSUVVGUmNuWkRMRWRCUVVkeldTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWVEIzUXl4UlFVRlJMRk5CUVZOdWQwTXNSMEZCUjJVc1MwRkJTM04xUXl4VFFVRlRjblpETEVWQlFVVTJRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGRYVkRMRTlCUVU5b00wSXNTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlV5ZDBNc1RVRkJUU3hYUVVGWExFOUJRVTl5ZGtNc1MwRkJTM04xUXl4VFFVRlRkSFZETEV0QlFVdDFkVU1zVFVGQlRXZ3pRaXhMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlRSM1F5eFJRVUZSTEZkQlFWY3NUMEZCVDNSMlF5eExRVUZMYzNWRExGRkJRVkYwZFVNc1MwRkJTM1YxUXl4TlFVRk5hRE5DTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVk5uZERMRk5CUVZNc1YwRkJWeXhQUVVGUGRuWkRMRXRCUVV0NWRVTXNVVUZCVVN4RlFVRkZlblZETEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGMzVkRMRkZCUVZGMGRVTXNTMEZCUzNWMVF5eE5RVU4wWW1nelFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWVGgzUXl4clFrRkJhMElzVTBGQlUzWjNReXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SlFVRkpMMElzUlVGQlJTeEZRVUZGUXl4RlFVRkZMRVZCUVVWcFF5eEZRVUZGTEVWQlFVVXNSVUZCUlVFc1IwRkJSeXhMUVVGTFNDeEZRVUZGUnl4SlFVRnJRMnhETEVsQlFVMHNTMEZCY0VNclFpeEZRVUZGWXl4TFFVRkxjWFZETEU5QlFVOXlkVU1zUzBGQlMzTjFReXhqUVVGMVFpeEZRVUZGYW5aRExFVkJRWFZGTEVkQlFYSkZMRXRCUVV0SUxFbEJRV3RETDBJc1NVRkJUU3hMUVVGd1F5dENMRVZCUVVWakxFdEJRVXR4ZFVNc1QwRkJUM0oxUXl4TFFVRkxjM1ZETEdOQlFYVkNMRWRCUVVkc2VFTXNTVUZCVFN4SlFVRkdPRUlzU1VGQlVTeEhRVUZOTEV0QlFVdEJMRVZCUVVVc1NVRkJTVWNzUlVGQlJTeEZRVUZGTEVWQlFVVkJMRWRCUVVjc1MwRkJTMGdzUlVGQlJVY3NTVUZCYTBOcVF5eEpRVUZOTEV0QlFYQkRPRUlzUlVGQlJXTXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1kwRkJkVUlzUlVGQlJXcDJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZKU0N4RlFVRkZMRTlCUVU5RUxFVkJRVVU1UWl4SlFVRkpMRVZCUVVWRExFbEJRVWtzUjBGQlJ6QkVMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMQ3REUVVFclEzcFhMRXRCUVV0NWRVTXNVVUZCVHl4SFFVTjBXbXd6UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZTdDNReXgzUWtGQmQwSXNVMEZCVTNoM1F5eEhRVUZITEU5QlFVOWxMRXRCUVV0M2RrTXNiVUpCUVd0Q0xGTkJRVk4wZDBNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVDI5aExFdEJRVXMyZWtJc1RVRkJUV2xDTEdGQlFXRnVkRU1zUlVGQlJTOUNMRVZCUVVVNFFpeFBRVUZOYzFrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVm5lRU1zYVVKQlFXbENMRk5CUVZONmQwTXNSMEZCUnl4SlFVRkpReXhGUVVGRll5eExRVUZMY1hWRExFOUJRVTlzZUVNc1JVRkJSVFpETEV0QlFVdHpkVU1zVVVGQlVYUjFReXhMUVVGTGMzVkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFbEJRVWxzZUVNc1JVRkJSU3hGUVVGRmFVTXNSVUZCUlN4RlFVRkZReXhGUVVGRmJrTXNSVUZCUlN4RlFVRkZiVU1zUjBGQlIyNURMRVZCUVVWdFF5eEpRVUZKYkVNc1JVRkJSVUVzUjBGQlJ5eEZRVUZGT0VJc1JVRkJSVWtzUjBGQlIwUXNSVUZCUlVFc1IwRkJSeXhGUVVGRlNDeEZRVUZGU1N4RlFVRkZMRWRCUVVjc1QwRkJUMHdzUlVGQlJUZENMRVZCUVVWcFF5eEpRVUZKYTFrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVnBlRU1zVjBGQlZ5eFhRVUZYTEV0QlFTdENMRWxCUVRGQ00zWkRMRXRCUVV0eGRVTXNUMEZCVDNKMVF5eExRVUZMYzNWRExGVkJRV04wZFVNc1MwRkJTM04xUXl4VlFVRlZkSFZETEV0QlFVdHpkVU1zVjBGRGNHSXZNa0lzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWcmVFTXNZVUZCWVN4VFFVRlRNM2RETEVkQlFVY3NTMEZCU3l4SlFVRkpRU3hIUVVGSFpTeExRVUZMYzNWRExGVkJRVlZ5ZGtNc1MwRkJTeXhGUVVGRlpTeExRVUZMYzNWRExGZEJRemRHTHpKQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZiWGhETEhGQ1FVRnhRaXhYUVVGWExFbEJRVWsxZDBNc1JVRkJSV1VzUzBGQlMzRjFReXhQUVVGWGJuWkRMRVZCUVVWRUxFVkJRVVZsTEV0QlFVdHpkVU1zVVVGQlVTeEhRVUZQYm5oRExFVkJRVWtzU1VGQlJpdENMRVZCUVUwc1QwRkJSeXhKUVVGSlFTeEhRVUZUWXl4TFFVRkxjM1ZETEZOQlFWTXNSVUZCUlhoMFF5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0emRVTXNVMEZCVTNSMVF5eExRVUZMZFhWRExFMUJRVTF3ZUVNc1NVRkJjMEpCTEVsQlFVMHNTMEZCTVVJclFpeEZRVUZGUkN4RlFVRkZaU3hMUVVGTGMzVkRMRkZCUVZFc1RVRkJaU3hGUVVGTExFbEJRVWx3ZGtNc1IwRkJVMk1zUzBGQlMzTjFReXhUUVVGVExFVkJRVVY0ZEVNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMYzNWRExGTkJRVk4wZFVNc1MwRkJTM1YxUXl4TlFVRk5jSGhETEVsQlFYTkNRU3hKUVVGTkxFdEJRVEZDSzBJc1JVRkJSVVFzUlVGQlJXVXNTMEZCUzNOMVF5eFJRVUZSTEUxQlFXVXNSMEZCVFN4SlFVRkpjSFpETEVkQlFWTmpMRXRCUVV0emRVTXNVMEZCVXl4RlFVRkZlSFJETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTM04xUXl4VFFVRlRkSFZETEV0QlFVdDFkVU1zVFVGQlRYQjRReXhKUVVGelFrRXNTVUZCVFN4TFFVRXhRaXRDTEVWQlFVVkVMRVZCUVVWbExFdEJRVXR6ZFVNc1VVRkJVU3hOUVVGbExFZEJRVTBzU1VGQlNYQjJReXhIUVVGVFl5eExRVUZMYzNWRExGTkJRVk1zUlVGQlJYaDBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGRGFtZENkSFZETEV0QlFVdDFkVU1zVFVGQlRYQjRReXhKUVVGelFrRXNTVUZCVFN4SlFVRXhRaXRDTEVWQlFVVkVMRVZCUVVWbExFdEJRVXR6ZFVNc1VVRkJVU3hOUVVGakxFZEJRVTBzU1VGQlNYQjJReXhIUVVGVFl5eExRVUZMYzNWRExGTkJRVk1zUlVGQlJYaDBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGRYVkRMRTFCUVUxd2VFTXNTVUZCU1N4SlFVRkZOa01zUzBGQlMzTjFReXhUUVVGVExFVkJRVVVzUzBGQlMzSjJReXhGUVVGRlpTeExRVUZMYzNWRExGbEJRVmtzUzBGQlMzSjJReXhGUVVGRlpTeExRVUZMYzNWRExGbEJRVmtzUzBGQlMzSjJReXhGUVVGRlpTeExRVUZMYzNWRExGbEJRVmtzUzBGQlMzSjJReXhGUVVGRlpTeExRVUZMYzNWRExGbEJRVmtzUzBGQlMzSjJReXhGUVVGRlpTeExRVUZMYzNWRExGbEJRVmw0ZEVNc1MwRkJTMmRXTEZGQlFWRlRMRkZCUVU4c1IwRkJTWHBXTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTM04xUXl4VFFVRlRkSFZETEV0QlFVdDFkVU1zVFVGQllYQjRReXhSUVVGSGIyRXNTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZ2ZUVNc2JVSkJRVzFDZGpSQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZiWGhETEhGQ1FVRnhRblEwUWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZYRjRReXd5UWtGQk1rSXNWMEZCVnl4UFFVRlBMM1pETEV0QlFVczJka01zZFVKQlFYVkNkbTlETEZsQlEycHBRbWxSTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVmMzaERMSGxDUVVGNVFpeFhRVUZYTEU5QlFVOW9kME1zUzBGQlN6aDJReXh4UWtGQmNVSjRiME1zV1VGQldXbFJMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWZFhoRExHMUNRVUZ0UWl4WFFVRlhMRWxCUVVsb2VFTXNSVUZCUldVc1MwRkJTeloyUXl4MVFrRkJkVUlzVDBGQlR6VjNReXhKUVVGSkxFbEJRVTBzUlVGQlJrRXNTVUZCVFhOWkxFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZkM2hETEhGQ1FVRnhRaXhYUVVGWExFOUJRVTlzZDBNc1MwRkJTM2QyUXl4clFrRkJhMEpxTkVJc1MwRkJTelo2UWl4TlFVRk5ZU3hoUVVGaE1UQkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWZVhoRExESkNRVUV5UWl4WFFVRlhMRTlCUVU5dWQwTXNTMEZCUzNkMlF5eHJRa0ZCYTBKcU5FSXNTMEZCU3paNlFpeE5RVUZOZVVJc05FSkJReTlpZERGQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZNSGhETEcxQ1FVRnRRaXhYUVVGWExFOUJRVTl3ZDBNc1MwRkJTM2QyUXl4clFrRkJhMEpxTkVJc1MwRkJTelo2UWl4TlFVRk5ZeXhaUVVGWk16QkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWTW5oRExIbENRVUY1UWl4WFFVRlhMRTlCUVU5eWQwTXNTMEZCUzNkMlF5eHJRa0ZCYTBKcU5FSXNTMEZCU3paNlFpeE5RVUZOTUVJc01FSkJRVEJDZGpGQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZOSGhETEcxQ1FVRnRRaXhYUVVGWExFOUJRVTkwZDBNc1MwRkJTM2QyUXl4clFrRkJhMEpxTkVJc1MwRkJTelo2UWl4TlFVRk5aMElzWlVGQlpUY3dRaXhMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlRaNFF5eDFRa0ZCZFVJc1YwRkJWeXhQUVVGUGRuZERMRXRCUVV0NWRrTXNkMEpCUVhkQ2JEUkNMRXRCUVVzMmVrSXNUVUZCVFhGQ0xHRkJRM0prYkRGQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZPSGhETEhsQ1FVRjVRaXhYUVVGWExFOUJRVTk0ZDBNc1MwRkJTM2wyUXl4M1FrRkJkMEpzTkVJc1MwRkJTelo2UWl4TlFVRk5NRUlzTUVKQlFUQkNkakZDTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVkszaERMRlZCUVZVc1YwRkJWeXhKUVVGSmVIaERMRVZCUVVWbExFdEJRVXR4ZFVNc1QwRkJUM0oxUXl4TFFVRkxjM1ZETEZGQlFWRXNSMEZCWjBVc1QwRkJOMFIwZFVNc1MwRkJTM04xUXl4VFFVRlRMRVZCUVVWNGRFTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTGMzVkRMRk5CUVZOMGRVTXNTMEZCUzNWMVF5eE5RVUZoZEhaRExFZEJRVWR6V1N4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZXZDVReXhYUVVGWExGZEJRVmNzU1VGQlNYcDRReXhGUVVGRlpTeExRVUZMY1hWRExFOUJRVTl5ZFVNc1MwRkJTM04xUXl4UlFVRlJMRWRCUVVkd2RrTXNSVUZCUldNc1MwRkJTM0YxUXl4UFFVRlBjblZETEV0QlFVdHpkVU1zVVVGQlVTeEhRVUZuUlN4UFFVRTNSSFIxUXl4TFFVRkxjM1ZETEZOQlFWTXNSVUZCUlhoMFF5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0emRVTXNVMEZCVTNSMVF5eExRVUZMZFhWRExFMUJRV0YwZGtNc1IwRkJSeXhGUVVGRlF5eEhRVUZITEVkQlEzQmxjVmtzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWcGVVTXNWMEZCVnl4WFFVRlhMRWxCUVVreGVFTXNSVUZCUldVc1MwRkJTM0YxUXl4UFFVRlBjblZETEV0QlFVdHpkVU1zVVVGQlVTeEhRVUZIY0haRExFVkJRVVZqTEV0QlFVdHhkVU1zVDBGQlQzSjFReXhMUVVGTGMzVkRMRkZCUVZFc1IwRkJSMjU0UXl4RlFVRkZOa01zUzBGQlMzRjFReXhQUVVGUGNuVkRMRXRCUVV0emRVTXNVVUZCVVN4SFFVRkhiSGhETEVWQlFVVTBReXhMUVVGTGNYVkRMRTlCUVU5eWRVTXNTMEZCUzNOMVF5eFJRVUZSTEVkQlFXZEZMRTlCUVRkRWRIVkRMRXRCUVV0emRVTXNVMEZCVXl4RlFVRkZlSFJETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTM04xUXl4VFFVRlRkSFZETEV0QlFVdDFkVU1zVDBGQllYUjJReXhIUVVGSExFVkJRVVZETEVkQlFVY3NSVUZCUlM5Q0xFZEJRVWNzUjBGQlIwTXNSMEZCUnl4TlFVRk5MRWRCUVVkdFlTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWV3Q1UXl4WFFVRlhMRmRCUVZjc1NVRkJTVE40UXl4RlFVRkZaU3hMUVVGTE1uZERMR0ZCUVdGNmVFTXNSVUZCUldNc1MwRkJTekozUXl4aFFVRmhMRTlCUVU5d05VSXNTMEZCU3paNlFpeE5RVUZOWVN4WFFVRlhhSFJETEVWQlFVVkRMRWxCUXpkWmNWa3NTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZ0ZVVNc2FVSkJRV2xDTEZkQlFWY3NTVUZCU1RWNFF5eEZRVUZGWlN4TFFVRkxNbmRETEdGQlFXRjZlRU1zUlVGQlJXTXNTMEZCU3pKM1F5eGhRVUZoTEU5QlFVOXdOVUlzUzBGQlN6WjZRaXhOUVVGTmVVSXNNRUpCUVRCQ05YUkRMRVZCUVVWRExFbEJRVWx4V1N4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZXOTVReXhUUVVGVExGZEJRVmNzU1VGQlNUZDRReXhGUVVGRlpTeExRVUZMY1hWRExFOUJRVTl5ZFVNc1MwRkJTM04xUXl4UlFVRlJMRWRCUVdkRkxFOUJRVGRFZEhWRExFdEJRVXR6ZFVNc1UwRkJVeXhGUVVGRmVIUkRMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMzTjFReXhUUVVGVGRIVkRMRXRCUVV0MWRVTXNUVUZCWVhSMlF5eEhRVUZITEVsQlFVa3NTVUZEY2xSeldTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWWEY1UXl4VlFVRlZMRmRCUVZjc1NVRkJTVGw0UXl4RlFVRkZaU3hMUVVGTGNYVkRMRTlCUVU5eWRVTXNTMEZCUzNOMVF5eFJRVUZSTEVkQlFVZHdka01zUlVGQlJXTXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGblJTeFBRVUUzUkhSMVF5eExRVUZMYzNWRExGTkJRVk1zUlVGQlJYaDBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGRYVkRMRTlCUVdGMGRrTXNSMEZCUnl4RlFVRkZReXhIUVVGSExFbEJRVWtzU1VGQlNTeEpRVUZKY1Zrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVnplVU1zVlVGQlZTeFhRVUZYTEVsQlFVa3ZlRU1zUlVGQlJXVXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGSGNIWkRMRVZCUVVWakxFdEJRVXR4ZFVNc1QwRkJUM0oxUXl4TFFVRkxjM1ZETEZGQlFWRXNSMEZCUjI1NFF5eEZRVUZGTmtNc1MwRkJTM0YxUXl4UFFVRlBjblZETEV0QlFVdHpkVU1zVVVGQlVTeEhRVUZIYkhoRExFVkJRVVUwUXl4TFFVRkxjWFZETEU5QlFVOXlkVU1zUzBGQlMzTjFReXhSUVVGUkxFZEJRV2RGTEU5QlFUZEVkSFZETEV0QlFVdHpkVU1zVTBGQlV5eEZRVUZGZUhSRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzNOMVF5eFRRVUZUZEhWRExFdEJRVXQxZFVNc1RVRkJZWFIyUXl4SFFVRkhMRVZCUVVWRExFZEJRVWNzUlVGQlJTOUNMRWRCUVVjc1IwRkJSME1zUjBGQlJ5eEpRVU12WTIxaExFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZkWGxETEZWQlFWVXNWMEZCVnl4SlFVRkphSGxETEVWQlFVVmxMRXRCUVVzeWQwTXNZVUZCWVhwNFF5eEZRVUZGWXl4TFFVRkxNbmRETEdGQlFXRXNUMEZCVDNBMVFpeExRVUZMTm5wQ0xFMUJRVTFqTEZWQlFWVnFkRU1zUlVGQlJVTXNTVUZCU1hGWkxFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZkM2xETEdkQ1FVRm5RaXhYUVVGWExFbEJRVWxxZVVNc1JVRkJSV1VzUzBGQlN6SjNReXhoUVVGaGVuaERMRVZCUVVWakxFdEJRVXN5ZDBNc1lVRkJZU3hQUVVGUGNEVkNMRXRCUVVzMmVrSXNUVUZCVFRCQ0xIZENRVUYzUWpkMFF5eEZRVUZGUXl4SlFVRkpjVmtzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWNWVVTXNWVUZCVlN4WFFVRlhMRWxCUVVsc2VVTXNSVUZCUldVc1MwRkJTekozUXl4aFFVRmhMRTlCUVU5d05VSXNTMEZCU3paNlFpeE5RVUZOYTBJc1dVRkJXWEowUXl4RlFVRkZMRWxCUXpsWWMxa3NTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlV3ZVVNc1YwRkJWeXhYUVVGWExFbEJRVWx1ZVVNc1JVRkJSV1VzUzBGQlN6SjNReXhoUVVGaGVuaERMRVZCUVVWakxFdEJRVXN5ZDBNc1lVRkJZU3hQUVVGUGNEVkNMRXRCUVVzMmVrSXNUVUZCVFc5Q0xGbEJRVmwyZEVNc1JVRkJSVU1zU1VGQlNYRlpMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWTW5sRExGTkJRVk1zVjBGQlZ5eFJRVUZSY25oRExFdEJRVXR4ZFVNc1QwRkJUM0oxUXl4TFFVRkxjM1ZETEZsQlFWa3ZNa0lzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZVMGVVTXNVMEZCVXl4WFFVRlhMRTlCUVU5MGVFTXNTMEZCU3poMlF5eHpRa0ZEZEZKMk5FSXNTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlUyZVVNc1YwRkJWeXhUUVVGVGRIbERMRWRCUVVjc1NVRkJTVU1zUlVGQlJXTXNTMEZCUzNGMVF5eFBRVUZQYkhoRExFVkJRVVUyUXl4TFFVRkxjM1ZETEZGQlFWRnlka01zUlVGQlJUbENMRVZCUVVVNFFpeEZRVUZGTEVsQlFVa3NTVUZCU1RkQ0xFVkJRVVVzUjBGQlIybERMRVZCUVVVc1IwRkJSMnhETEVWQlFVVTRRaXhIUVVGSExFTkJRVU1zU1VGQlNVc3NSVUZCUlVvc1JVRkJSUzlDTEV0QlFVc3NSMEZCUnl4SlFVRkpiVU1zUlVGQlJXeERMRVZCUVVVNFRDeExRVUZMTlVvc1QwRkJVU3hKUVVGSExFbEJRVWxCTEVWQlFVVXNVMEZCWXl4SFFVRkhMRWxCUVVsQkxFVkJRVVVzUTBGQlF5eEpRVUZKY1VJc1JVRkJSWHBDTEVWQlFVVXZRaXhMUVVGTFF5eEZRVUZGT0V3c1RVRkJVU3hIUVVGR05Vb3NTVUZCVHl4RlFVRkpMRWRCUVVaeFFpeFJRVUZYTEVkQlFVY3NTVUZCU1hKQ0xFVkJRVVVzUTBGQlEzRkNMRVZCUVVWNlFpeEZRVUZGTDBJc1MwRkJTeXhKUVVGSmRWQXNSVUZCUlhoT0xFVkJRVVV2UWl4TFFVRkxReXhGUVVGRk9Fd3NUVUZCVVN4SFFVRkdOVW9zU1VGQlR5eEpRVUZOTEVkQlFVWnhRaXhKUVVGUExFVkJRVWtzUjBGQlJpdE1MRkZCUVZjc1IwRkJSeXhKUVVGSmNFNHNSVUZCUlN4RFFVRm5RMEVzUjBGQlN5eEZRVUZHUVN4SlFVRk5MRWxCUVUwc1NVRkJPVU54UWl4RlFVRkZla0lzUlVGQlJTOUNMRkZCUVN0RExFbEJRVTBzU1VGQmFFUjFVQ3hGUVVGRmVFNHNSVUZCUlM5Q0xGRkJRV2xFTEVWQlFVa3NSMEZCTVVNclFpeEZRVUZGTDBJc1MwRkJNa050UXl4SFFVRkhMRTFCUVUxc1F5eEZRVUZGT0V3c1MwRkJhMElzVDBGQldqVktMRWRCUVVjc1IwRkJSeXhOUVVGeFFpeFBRVUZPTEV0QlFVWkJMRXRCUVdVc1RVRkJUV3hETEVWQlFVVm5ReXhUUVVGVFF5eEhRVUZIUml4UFFVRlBlV1VzWVVGQllXeFdMRTFCUVUwc1MwRkJTM1JNTEVkQlFVZEJMRVZCUVVWblF5eFBRVUZQTEVkQlF6TmtMRTlCUkRoa1F5eEhRVUZIZVVJc1MwRkJTekJqTEUxQlFVMUhMR3RDUVVGclFuWm5RaXhIUVVNM1owSTBReXhMUVVGTGMzVkRMRkZCUVZGdWVFTXNSVUZCVTJ0RExFZEJRVWRyV1N4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZUaDVReXh4UWtGQmNVSXNWMEZCVnl4SlFVRkpkbmxETEVWQlFVVmxMRXRCUVVzMmRrTXNkVUpCUVhWQ0xFOUJRVTgzZGtNc1MwRkJTM1Y0UXl4WFFVRlhkSGxETEVsQlFVbHpXU3hMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlN0NVF5eFZRVUZWTEZOQlFWTjRlVU1zUjBGQlJ5eEhRVUZITEVWQlFVVkJMRWRCUVVkbExFdEJRVXR6ZFVNc1VVRkJVWEoyUXl4RlFVRkZaU3hMUVVGTGNYVkRMRTlCUVU5cWRrTXNUMEZCVHl4UFFVRlBXU3hMUVVGTGVYVkRMRkZCUVU4c1JVRkJSek4wUXl4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4M1FrRkJkMElzU1VGQlNYa3dRaXhYUVVGWExFZEJRVWNzU1VGQlNXaHpReXhGUVVGRll5eExRVUZMY1hWRExFOUJRVTlzUkN4VFFVRlRibkpETEV0QlFVdHpkVU1zVVVGQlVYUjFReXhMUVVGTGMzVkRMRkZCUVZGeWRrTXNSMEZCWjBVc1QwRkJOMFJsTEV0QlFVdHpkVU1zVTBGQlUzSjJReXhGUVVGRk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTGMzVkRMRk5CUVZOMGRVTXNTMEZCUzNWMVF5eE5RVUZoY25aRExFZEJRVWR4V1N4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZXZDZReXhwUWtGQmFVSXNWMEZCVnl4UFFVRlBNWGhETEV0QlFVdDNka01zYTBKQlFXdENhalJDTEV0QlFVczJla0lzVFVGQlRYRkNMR0ZCUTI1cFFtd3hRaXhMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVldsNlF5eG5Ra0ZCWjBJc1YwRkJWeXhKUVVGSk1YbERMRVZCUVVWbExFdEJRVXR4ZFVNc1QwRkJUMjUyUXl4RlFVRkZZeXhMUVVGTGMzVkRMRkZCUVZGdWVFTXNSVUZCUlRoQ0xFVkJRVVZETEVWQlFVVXNSMEZCUnpsQ0xFVkJRVVUyUWl4RlFVRkZReXhGUVVGRkxFZEJRVWRITEVWQlFVVktMRVZCUVVWRExFVkJRVVVzUjBGQlIwa3NSVUZCUlV3c1JVRkJSVU1zUlVGQlJTeEhRVUZIZVVJc1JVRkJSVEZDTEVWQlFVVkRMRVZCUVVVc1IwRkJSM2RPTEVWQlFVVjZUaXhGUVVGRlF5eEZRVUZGTEVkQlFVZG5VeXhGUVVGRmFsTXNSVUZCUlVNc1JVRkJSU3hIUVVFMFFpeFBRVUY2UWtRc1JVRkJSVUVzUlVGQlJVTXNSVUZCUlN4SFFVRkhZeXhMUVVGTGMzVkRMRk5CUVZNc1JVRkJVMjUyUXl4UFFVRlBlV1VzWVVGQllYcG5RaXhGUVVGRlF5eEZRVUZGYVVNc1JVRkJSVU1zUlVGQlJYRkNMRVZCUVVVclRDeEZRVUZGZDBVc1JVRkJSV3BUTEVsQlFVbHpXU3hMUVVGTGNUWkNMR0ZCUVdFc1UwRkJVek41UXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpaRExFdEJRVXMyZUVNc1UwRkJVM1EyUWl4TFFVRkxOakpDTEdOQlFXTlJMRTFCUVUwemRrTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVYzJReXhMUVVGTE9IaERMR0ZCUVdFNWVFTXNTMEZCU3paNFF5eFRRVUZUTTBNc1dVRkJXV3gyUXl4TFFVRkxLM2hETEZkQlFWZDROa0lzUzBGQlMwTXNaMEpCUVdkQ0swSXNjVUpCUVhGQ2Rsb3NTMEZCUzJkNVF5eGpRVUZqZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTnlRaXhSUVVGUk5WZ3NTMEZCUzNsMVF5eFJRVUZQTEVWQlFVZDZkVU1zUzBGQlMybDVReXhsUVVGbExFMUJRVTB4TmtJc1MwRkJTM0UyUWl4aFFVRmhha1FzWlVGQlpTeEhRVU4yYUVKd00wSXNTMEZCUzNFMlFpeGhRVUZoYUVRc1RVRkJUU3hUUVVGVE0zWkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWRCUVVkdllTeExRVUZMY1RaQ0xHRkJRV0ZxUkN4bFFVRmxkblpETEU5QlFVOHNRMEZCUXl4SlFVRkphRU1zUlVGQlJXMWhMRXRCUVV0eE5rSXNZVUZCWVdwRUxHVkJRV1Y2V0N4TlFVRnZReXhQUVVFNVFtbzBRaXhIUVVGSE4wSXNSVUZCUlhrd1F5eFRRVUZUYmtRc1UwRkJVM3AyUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCVlVNc1JVRkJSU3hQUVVGUExFbEJRVWx0WVN4TFFVRkxjVFpDTEdGQlFXRXplVU1zUlVGQlJVTXNSVUZCUlM5Q0xFbEJRVWx2WVN4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZXdDNReXhOUVVGTmNqTkNMRXRCUVV0eE5rSXNZVUZCWVdoRUxFMUJRMnBSY2pOQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZiWGRETEV0QlFVc3NWMEZCVnpkMVF5eExRVUZMTm5oRExGTkJRVk53SzBJc1VVRkJVWHBVTEV0QlFVc3JlRU1zVjBGQlYzZzJRaXhMUVVGTFF5eG5Ra0ZCWjBJclFpeHhRa0ZCY1VKMldpeExRVUZMWjNsRExHTkJRV042TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUzSkNMRkZCUVZFMVdDeExRVUZMZVhWRExGRkJRVThzUlVGQlIzcDFReXhMUVVGTGFYbERMR1ZCUVdVc1MwRkJTeXhKUVVGSk1UWkNMRXRCUVV0eE5rSXNZVUZCWVdwRUxHVkJRV1YyZGtNc1VVRkJVVzFaTEV0QlFVdHhOa0lzWVVGQllXcEVMR1ZCUVdWNmJFTXNTMEZCUzJ4S0xFOUJRVTkxV0N4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZYZDZReXhsUVVGbExGZEJRVmNzVDBGQlQyeDVReXhMUVVGTE9IaERMR05CUVdOMk5rSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlYzZDBNc1ZVRkJWU3hYUVVGWExFOUJRVTlzZGtNc1MwRkJTelo0UXl4VFFVRlRNME1zWVVGRE4yTXpNMElzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWdmQwTXNWVUZCVlN4WFFVRlhMRTlCUVU4NWRVTXNTMEZCU3paNFF5eFRRVUZUTDBNc1lVRkJZWFl6UWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZYbDZReXhsUVVGbExGZEJRVmNzVDBGQlQyNTVReXhMUVVGTEszaERMRmxCUVZsNE5rSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlV3ZWtNc1dVRkJXU3hYUVVGWExFOUJRVTl3ZVVNc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk1ucERMRmxCUVZrc1YwRkJWeXhQUVVGUGNubERMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWE5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlUwZWtNc1YwRkJWeXhYUVVGWExFOUJRVTkwZVVNc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZOSkxGZEJRMnBrT1VJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVTJkME1zVTBGQlV5eFhRVUZYTEU5QlFVOTJka01zUzBGQlMzbDFReXhSUVVGUmVuVkRMRXRCUVVzMmVFTXNVMEZCVTNSRExGbEJRVmxvTkVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVm5kME1zVTBGQlV5eFRRVUZUZW5aRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE5rTXNTMEZCU3paNFF5eFRRVUZUYmtRc1UwRkJVM3AyUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpaRExFdEJRVXNyZUVNc1YwRkJWM2cyUWl4TFFVRkxReXhuUWtGQlowSXJRaXh4UWtGQmNVSjJXaXhMUVVGTFozbERMR05CUVdONk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVM0pDTEZOQlFWTk1MRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWZFhkRExFMUJRVTBzVjBGQlYycDJReXhMUVVGTE5uaERMRk5CUVZNMVF5eFJRVUZSYW5aRExFdEJRVXNyZUVNc1YwRkJWM2cyUWl4TFFVRkxReXhuUWtGQlowSXJRaXh4UWtGQmNVSjJXaXhMUVVGTFozbERMR05CUVdONk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVM0pDTEZOQlEyNWtUQ3hMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlRCM1F5eFJRVUZSTEZOQlFWTnVkME1zUjBGQlIyVXNTMEZCU3paNFF5eFRRVUZUZWtNc1VVRkJVVzUzUXl4SlFVTjBSWE5aTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk5ucERMRlZCUVZVc1YwRkJWeXhIUVVGSGRubERMRXRCUVVzMmVFTXNVMEZCVTNoRExGRkJRVkVzVDBGQlRTeEZRVUZITEVkQlFVZHlka01zUzBGQlMzVjJReXhYUVVGWExFOUJRVTk2ZFVNc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2VVSkJRWGRDTEVWQlFVZDZWeXhMUVVGTE9IaERMR0ZCUVdFNWVFTXNTMEZCU3paNFF5eFRRVUZUTTBNc1dVRkJXU3hKUVVGSmFuZERMRVZCUVVWbExFdEJRVXMyZUVNc1UwRkJVMmhETEhWQ1FVRjFRak4zUXl4RlFVRkZSQ3hKUVVGSkxFVkJRVThzVDBGQlRFRXNSMEZCUnl4SlFVRlJjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3BoTEVkQlFVZHpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWkN4VFFVRlRiRm9zUjBGQlIzTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFWTnFXaXhIUVVGSGMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVjBGQlYyeGhMRWRCUVVkeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSeXhoUVVGaGJtRXNSMEZCUjNOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkpMRmRCUVdsQ2Rsa3NTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NlVU5CUXpWb1FuaFlMRVZCUVVWbExFdEJRVXM0ZUVNc1kwRkJZemw0UXl4TFFVRkxlWFZETEZGQlFVOHNSMEZCUnl4SlFVRkhlblZETEV0QlFVc3JlRU1zVjBGQlZ6ZDVReXhGUVVGRll5eExRVUZMWjNsRExHTkJRV012ZVVNc1IwRkJVU3hKUVVGSmMxa3NTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlU0ZWtNc1lVRkJZU3hYUVVGWGVIbERMRXRCUVVzMmVFTXNVMEZCVTJwRExHRkJRV0UxZGtNc1MwRkJTeXQ0UXl4WlFVRlpMRVZCUVVVdmVFTXNTMEZCUzJkNVF5eG5Ra0ZCWjBKNk5rSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlVyZWtNc2JVSkJRVzFDTEZkQlFWY3NTVUZCU1hoNlF5eEZRVUZGWlN4TFFVRkxLM2hETEZkQlFWY3NTVUZCU1M5NFF5eExRVUZMZDNsRExHVkJRV1Y0ZVVNc1MwRkJTM1Y1UXl4aFFVRmhkbmxETEV0QlFVdHRlVU1zYTBKQlFXdENiSHBETEVkQlFVZGxMRXRCUVVzd2VVTXNXVUZCV1RGNVF5eExRVUZMTm5oRExGTkJRVk40UXl4VFFVRlRjblpETEV0QlFVdDNlVU1zWjBKQlEyaGFhamRDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmFUQkRMR2RDUVVGblFpeFhRVUZYTTNsRExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZSY0Zrc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2VVTkJRWGxEZWxjc1MwRkJTekI1UXl4aFFVRmhNWGxETEV0QlFVczJlRU1zVTBGQlUyeERMR05CUVdOd05FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZyTUVNc2JVSkJRVzFDTEZkQlFWY3NSMEZCUnpWNVF5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwVXNWVUZCVlhKWkxFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExEUkRRVUUwUTNwWExFdEJRVXN3ZVVNc1owSkJRV2RDTEVOQlFVTXNTVUZCU1hwNlF5eEZRVUZGWlN4TFFVRkxObmhETEZOQlFWTm9ReXgxUWtGQmRVSTNka01zUzBGQlN6WjRReXhUUVVGVGVrTXNVVUZCVVc1M1F5eExRVU40WlhOWkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZiVEJETEdsQ1FVRnBRaXhYUVVGWE4zbERMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaQ3hUUVVGVGNsZ3NTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NNRU5CUVRCRGVsY3NTMEZCU3pCNVF5eGhRVUZoTVhsRExFdEJRVXMyZUVNc1UwRkJVM3BETEZGQlFWRXNTVUZCU1RjelFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVzh3UXl4cFFrRkJhVUlzVjBGQlZ6bDVReXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMllzVTBGQlUzQllMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMREJEUVVFd1EzcFhMRXRCUVVzd2VVTXNZVUZCWVRGNVF5eExRVUZMTm5oRExGTkJRVk42UXl4UlFVRlJMRWxCUTJ4aU56TkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWY1RCRExGVkJRVlVzVjBGQmFVTXNTVUZCZEVJc1NVRkJTVGw2UXl4RlFVRkZaU3hMUVVGTEszaERMR0ZCUVdFc1EwRkJReXhKUVVGSkwzaERMRXRCUVV0MWVVTXNXVUZCV1N4RFFVRkRlbmhETEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEhsRFFVRjVRM3BYTEV0QlFVdDVkVU1zVVVGQlR5eEZRVUZITEUxQlFVMHNSMEZCUjNwMVF5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwa3NWVUZCVlN4RFFVRkRjbG9zUzBGQlN5dDRReXhaUVVGWk9YbERMRWxCUVVrMlFpeExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5d3lRa0ZCTWtKNlZ5eExRVUZMZVhWRExGRkJRVThzUjBGQlNTeE5RVUZOZW5WRExFdEJRVXN3ZVVNc1kwRkROMVZ1TjBJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVm5NRU1zVlVGQlZTeFhRVUZYTEU5QlFVOHhlVU1zUzBGQlMyZDVReXhsUVVGbExFdEJRVXQ2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNUMEZCVDJ4YUxFdEJRVXN5ZVVNc2EwSkJRV3RDTEUxQlFVMHNTMEZCUzNBM1FpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaaXhSUVVGUmJGa3NTMEZCU3poNVF5eHRRa0ZCYlVJc1RVRkJUU3hMUVVGTGRqZENMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5GTEZWQlFWVnVXaXhMUVVGTE5IbERMSEZDUVVGeFFpeE5RVUZOTEV0QlFVdHlOMElzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJRc1VVRkJVVzVaTEV0QlFVczJlVU1zYlVKQlFXMUNMRTFCUVUwc1MwRkJTM1EzUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJ5eFpRVUZaY0Zvc1MwRkJTeXQ1UXl4WlFVRlpMRTFCUVUwc1VVRkJVV3A1UXl4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4elEwRkRiR1JqTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmN6QkRMSEZDUVVGeFFpeFRRVUZUTDNwRExFVkJRVVZETEVkQlFVY3NUMEZCVDJNc1MwRkJTMmw1UXl4cFFrRkJhVUpxZVVNc1MwRkJTMmw1UXl4bFFVRmxMRWxCUVVsdWVFTXNTMEZCUzJkV0xGRkJRVkZUTEZGQlFWRjJWeXhMUVVGTGFYbERMR1ZCUVdWb2VrTXNTVUZCU1dVc1MwRkJTMmw1UXl4bFFVRmxhSHBETEVkQlFVZERMRWRCUVVkeFdTeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWWFV3UXl4blFrRkJaMElzVTBGQlUyZ3dReXhIUVVGdFJ5eFBRVUZvUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFOUJRVTkyVnl4TFFVRkxhWGxETEdkQ1FVRm5RbWg2UXl4RlFVRkZaU3hMUVVGTGFYbERMR1ZCUVdWb2VrTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCVlVFc1JVRkJSV1VzVDBGRE5WWjFXQ3hMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlhjd1F5eFJRVUZSTEZOQlFWTnFNRU1zUjBGQlIyVXNTMEZCUzJkNVF5eGpRVUZqZWpaQ0xFdEJRVXRETEdkQ1FVRm5RamhDTEc5Q1FVRnZRbkpoTEVkQlFVY3NTVUZCU1VNc1JVRkJSWEZaTEV0QlFVdERMR2RDUVVGblFrY3NWVUZCVlN4UFFVRlBNVmtzUjBGQlJ5eExRVUZMUXl4RlFVRkZNbGtzVDBGQlR5eFBRVUZQTjFnc1MwRkJTMjk0UXl4aFFVRmhMRXRCUVV0c2VVTXNSVUZCUlRSWkxFMUJRVTBzVDBGQlR6bFlMRXRCUVV0dGVFTXNXVUZCV1N4TFFVRkxhbmxETEVWQlFVVTJXU3hOUVVGTkxFOUJRVTh2V0N4TFFVRkxhWGhETEZsQlFWa3NTMEZCU3k5NFF5eEZRVUZGT0Zrc1QwRkJUeXhQUVVGUGFGa3NTMEZCU3pSM1F5eGhRVUZoTEV0QlFVc3hlRU1zUlVGQlJTdFpMRTFCUVUwc1QwRkJUMnBaTEV0QlFVdG5lRU1zV1VGQldTeExRVUZMT1hoRExFVkJRVVZuV2l4UlFVRlJMRTlCUVU5c1dTeExRVUZMYlhwRExHTkJRV01zUzBGQlMyb3dReXhGUVVGRmFWb3NVVUZCVVN4UFFVRlBibGtzUzBGQlMyOTZReXhqUVVGakxFdEJRVXRzTUVNc1JVRkJSV3RhTEV0QlFVc3NUMEZCVDNCWkxFdEJRVXR4ZUVNc1YwRkJWeXhMUVVGTGJubERMRVZCUVVWdFdpeFBRVUZQTEU5QlFVOXlXU3hMUVVGTGRYaERMR0ZCUXpGbExFdEJRVXR5ZVVNc1JVRkJSVzlhTEUxQlFVMTRXQ3hMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXdyUTBGQkswTXNTMEZCUzNaWUxFVkJRVVZ4V2l4UlFVRlJlbGdzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzYVVSQlFXbEVMRXRCUVV0MldDeEZRVUZGYzFvc1RVRkJUU3hQUVVGUGVGa3NTMEZCUzNsNFF5eFpRVUZaTEV0QlFVdDJlVU1zUlVGQlJYVmFMRTlCUVU4c1QwRkJUM3BaTEV0QlFVc3lkME1zWVVGQllTeExRVUZMZW5oRExFVkJRVVYzV2l4TFFVRkxMRTlCUVU4eFdTeExRVUZMYzNoRExGZEJRVmNzUzBGQlMzQjVReXhGUVVGRmVWb3NVMEZCVXl4UFFVRlBNMWtzUzBGQlMzRjZReXhsUVVGbExFdEJRVXR1TUVNc1JVRkJSVEJhTEZOQlFWTXNUMEZCVHpWWkxFdEJRVXR6ZWtNc1pVRkJaU3hMUVVGTGNEQkRMRVZCUVVVeVdpeFBRVUZQTEU5QlFVODNXU3hMUVVGTGRYcERMR0ZCUVdFc1MwRkJTM0l3UXl4RlFVRkZORm9zVDBGQlR5eFBRVUZQT1Zrc1MwRkJTM2Q2UXl4aFFVRmhMRXRCUVV0ME1FTXNSVUZCUlRaYUxGRkJRVkVzVDBGQlR5OVpMRXRCUVVzeWVFTXNhMEpCUVd0Q0xFdEJRVXQ2ZVVNc1JVRkJSVGhhTEZGQlFWRXNUMEZCVDJoYUxFdEJRVXN3ZUVNc2JVSkJRek5tTEZGQlFWRTFkME1zUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzYlVOQlFXMURMRTlCUVU4c1IwRkJSMk1zUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVck1FTXNXVUZCV1N4VFFVRlRlREJETEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWExFbEJRVWxvWXl4RlFVRkZOa01zUzBGQlN6WjRReXhUUVVGVE9VTXNVMEZCVXpONFF5eEZRVUZGTkVNc1MwRkJTelo0UXl4VFFVRlRhRU1zZFVKQlFYVkNlbmxETEVWQlFVVTBReXhMUVVGTE5uaERMRk5CUVZNelF5eFpRVUZaT1hoRExFVkJRVVUwUXl4TFFVRkxObmhETEZOQlFWTTNReXhQUVVGUE5YaERMRWRCUVVjNFFpeEZRVUZGUkN4RlFVRkZaU3hOUVVGTlFTeExRVUZMTm5oRExGTkJRVk14UXl4VlFVRlZMM2hETEVkQlFVYzBReXhMUVVGTE5uaERMRk5CUVZNM1F5eFBRVUZQTjNoRExFbEJRMnhaYjJFc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVm5NVU1zVlVGQlZTeFRRVUZUZWpCRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE1rUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMGNzWVVGQllYUlpMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlN5dDRReXhaUVVGWk9YbERMRWRCUVVjNVFpeEZRVUZGSzBJc1JVRkJSV01zVFVGQlRVRXNTMEZCUzNsMVF5eFJRVUZSZW5WRExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFNTeFpRVUZaZGxrc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2MwUkJRWE5FZWxjc1MwRkJTM2wxUXl4UlFVRlBMRWxCUXpGV2JETkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYVRGRExHZENRVUZuUWl4WFFVRlhOM2xETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORkxGZEJRVmNzU1VGQlNXeGhMRVZCUVVWbExFdEJRVXMyZUVNc1UwRkJVMmhETEhWQ1FVRjFRak4zUXl4RlFVRkZZeXhMUVVGTE5uaERMRk5CUVZNelF5eFpRVUZaTDNoRExFVkJRVVVyUWl4RlFVRkZSQ3hGUVVGMVJpeFBRVUZ5UmtFc1JVRkJSWE5aTEV0QlFVczJNa0lzWTBGQlkxRXNUVUZCVFRWMVF5eExRVUZMTm5oRExGTkJRVk12UXl4WlFVRlpOWFpETEVWQlFVVkVMRWRCUVVkbExFdEJRVXMyZUVNc1UwRkJVekZETEZWQlFWVm9lVU1zUjBGQlZUaENMRWRCUVVkeldTeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWWE41UXl4VlFVRlZMRmRCUVhsR0xFOUJRVGxGYkhkRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVdWc1dpeExRVUZMTm5oRExGTkJRVk12UWl4elFrRkRlR04yTkVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVnJNVU1zWjBKQlFXZENMRmRCUVhsR0xFOUJRVGxGT1hsRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVdWc1dpeExRVUZMTm5oRExGTkJRVk0zUWl3MFFrRkJORUo2TkVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVjFlVU1zVlVGQlZTeFhRVUY1Uml4UFFVRTVSVzUzUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZsYkZvc1MwRkJTelo0UXl4VFFVRlRla0lzYzBKQlFYTkNOelJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmQzbERMR2RDUVVGblFpeFhRVUY1Uml4UFFVRTVSWEIzUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZsYkZvc1MwRkJTelo0UXl4VFFVRlRlRUlzTkVKQlF6Rm1PVFJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmFYbERMRmRCUVZjc1YwRkJlVVlzVDBGQk9VVTNka01zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJaV3hhTEV0QlFVczJlRU1zVTBGQlUyaERMSGRDUVVGM1FuUTBRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlcweFF5eHBRa0ZCYVVJc1YwRkJlVVlzVDBGQk9VVXZlVU1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJaV3hhTEV0QlFVczJlRU1zVTBGQlV6bENMRGhDUVVFNFFuZzBRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVld0NVF5eFhRVUZYTEZkQlFYbEdMRTlCUVRsRk9YWkRMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZNelFpeDNRa0ZETTJZek5FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZ0ZVVNc2FVSkJRV2xDTEZkQlFYbEdMRTlCUVRsRkwzWkRMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZNeFFpdzRRa0ZCT0VJMU5FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlUyTUVNc1YwRkJWeXhYUVVGNVJpeFBRVUU1UlhwNVF5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGbGJGb3NTMEZCU3paNFF5eFRRVUZUTlVJc2MwSkJRWE5DTVRSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZPREJETEZkQlFWY3NWMEZCZVVZc1QwRkJPVVV4ZVVNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCWld4YUxFdEJRVXMyZUVNc1UwRkJVM1pDTEhOQ1FVTjZaaTgwUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZXOHhReXhwUWtGQmFVSXNWMEZCZVVZc1QwRkJPVVZvZWtNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCWld4YUxFdEJRVXMyZUVNc1UwRkJVM0pDTERSQ1FVRTBRbW8xUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZUQXdReXhaUVVGWkxGZEJRVEJHTEU5QlFTOUZkSGxETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZOa0xGTkJRV2RDYmxrc1MwRkJTelo0UXl4VFFVRlRiRUlzWTBGQlkzQTFRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlhrd1F5eFpRVUZaTEZkQlFUQkdMRTlCUVM5RmNubERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFXZENiRmtzUzBGQlN6WjRReXhUUVVGVGFrSXNZMEZEYm1aeU5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZ4TVVNc2EwSkJRV3RDTEZkQlFUQkdMRTlCUVM5RmFucERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFXZENiRmtzUzBGQlN6WjRReXhUUVVGVGFFSXNiMEpCUVc5Q2REVkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTWpCRExHRkJRV0VzVjBGQk1FWXNUMEZCTDBWMmVVTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMlFzVTBGQlowSnVXU3hMUVVGTE5uaERMRk5CUVZOaUxHRkJRV0Y2TlVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVnpNVU1zYlVKQlFXMUNMRmRCUVRCR0xFOUJRUzlGYkhwRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTmtMRk5CUVdkQ2Jsa3NTMEZCU3paNFF5eFRRVUZUWWl4WlFVRlpNWEJETEZsQlEyaG5RbWxSTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk5EQkRMR0ZCUVdFc1YwRkJNRVlzVDBGQkwwVjRlVU1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJZc1UwRkJaMEpzV1N4TFFVRkxObmhETEZOQlFWTmFMR0ZCUVdFeE5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlYxTVVNc2JVSkJRVzFDTEZkQlFUQkdMRTlCUVM5RmJucERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFXZENiRmtzUzBGQlN6WjRReXhUUVVGVFdDeHRRa0ZCYlVJek5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlY1ZVVNc1ZVRkJWU3hYUVVFd1JpeFBRVUV2UlhKM1F5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaQ3hUUVVGblFtNVpMRXRCUVVzMmVFTXNVMEZCVTFZc1lVRkRNMlUxTlVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVXdlVU1zVjBGQlZ5eFhRVUV3Uml4UFFVRXZSWFIzUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFppeFRRVUZuUW14WkxFdEJRVXMyZUVNc1UwRkJVMVFzWTBGQll6YzFRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlRKNVF5eFRRVUZUTEZkQlFYbEdMRTlCUVRsRmRuZERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZWQlFXZENiRm9zUzBGQlN6WjRReXhUUVVGVGFFTXNkMEpCUVhkQ2REUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTkhsRExGTkJRVk1zVjBGQmVVWXNUMEZCT1VWNGQwTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlpXeGFMRXRCUVVzMmVFTXNVMEZCVTNwQ0xITkNRVU51WlRjMFFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVFo1UXl4WFFVRlhMRmRCUVZkNmQwTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVjBGQlZ5eEpRVUZKYkdFc1JVRkJSV1VzUzBGQlN6WjRReXhUUVVGVGFFTXNkVUpCUVhWQ0xFOUJRVTgzZGtNc1MwRkJTelo0UXl4VFFVRlRUaXhYUVVGWGRIbERMRWxCUVVseldTeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWU3Q1UXl4VlFVRlZMRmRCUVZjemQwTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVjBGQlZ5eEpRVUZKYkdFc1JVRkJSV1VzUzBGQlN6WjRReXhUUVVGVGFFTXNkVUpCUVhWQ0xFOUJRVTgzZGtNc1MwRkJTelo0UXl4VFFVRlRTaXhWUVVGVmVIbERMRWxCUXpsYWMxa3NTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZuZWtNc2FVSkJRV2xDTEZkQlFYbEdMRTlCUVRsRk5YZERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZOSUxHOUNRVUZ2UW00MlFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWWGN4UXl4bFFVRmxMRmRCUVhsR0xFOUJRVGxGY0hwRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVdWc1dpeExRVUZMTm5oRExGTkJRVk4wUWl3d1FrRkJNRUpvTlVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVTRkME1zYTBKQlFXdENMRk5CUVZOMmQwTXNSMEZCYVVZc1QwRkJPVVUyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZsYkZvc1MwRkJTelo0UXl4VFFVRlRja01zYTBKQlFXdENkbmRETEVsQlEycG9Rbk5aTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVkszZERMSGRDUVVGM1FpeFRRVUZUZUhkRExFZEJRV2xHTEU5QlFUbEZOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJaV3hhTEV0QlFVczJlRU1zVTBGQlUzSkRMRzFDUVVGclFpeFRRVUZUZEhkRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU5dllTeExRVUZMTm5wQ0xFMUJRVTFwUWl4aFFVRmhiblJETEVWQlFVVXZRaXhGUVVGRk9FSXNUMEZCVFhOWkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZhWHBETEdkQ1FVRm5RaXhYUVVFd1JpeFBRVUV2UlRkM1F5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaaXhUUVVGblFteFpMRXRCUVVzMmVFTXNVMEZCVTBZc2JVSkJRM1paY0RaQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZaM2hETEdsQ1FVRnBRaXhUUVVGVGVuZERMRWRCUVd0R0xFOUJRUzlGTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyWXNVMEZCWjBKc1dTeExRVUZMTm5oRExGTkJRVk51UXl4cFFrRkJhVUo2ZDBNc1NVRkJTWE5aTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmVURkRMR2xDUVVGcFFpeFRRVUZUYkRGRExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXRuZVVNc1pVRkJaWG8yUWl4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYTEVsQlFVbHFZU3hGUVVGRll5eExRVUZMTm5oRExGTkJRVk5vUXl4MVFrRkJkVUl6ZDBNc1JVRkJSV01zUzBGQlN6WjRReXhUUVVGVE0wTXNXVUZCV1doM1F5eEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUjBGQlJ6WkRMRXRCUVVzMmVFTXNVMEZCVXpORExGbEJRVmxvZDBNc1IwRkJSeTlDTEVWQlFVVXJUQ3hMUVVGTGFrc3NSVUZCUldoRExFdEJRVXNyUXl4TFFVRkxObmhETEZkQlFWY3NUMEZCVHpFd1F5eEhRVU53Wkc5aExFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZNREZETEdkQ1FVRm5RaXhYUVVGWExFOUJRVTl3TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRMMElzY1VKQlFYRkNkalJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk1qRkRMSE5DUVVGelFpeFhRVUZYTEU5QlFVOXlNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVE4wSXNNa0pCUVRKQ2VqUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTkRGRExHZENRVUZuUWl4WFFVRlhMRTlCUVU5ME1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUZWtJc2NVSkJRWEZDTnpSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZOakZETEhOQ1FVRnpRaXhYUVVGWExFOUJRVTkyTUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRlRUlzTWtKQlEzcGtPVFJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk9ERkRMR2xDUVVGcFFpeFhRVUZYTEU5QlFVOTRNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVGFFTXNkVUpCUVhWQ2REUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWS3pGRExIVkNRVUYxUWl4WFFVRlhMRTlCUVU5Nk1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUT1VJc05rSkJRVFpDZURSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZaekpETEdsQ1FVRnBRaXhYUVVGWExFOUJRVTh4TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRNMElzZFVKQlFYVkNNelJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmFUSkRMSFZDUVVGMVFpeFhRVUZYTEU5QlFVOHpNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVE1VSXNOa0pCUTI1bE5UUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYXpKRExHbENRVUZwUWl4WFFVRlhMRTlCUVU4MU1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUTlVJc2NVSkJRWEZDTVRSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZiVEpETEdsQ1FVRnBRaXhYUVVGWExFOUJRVTgzTUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRka0lzY1VKQlFYRkNMelJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmJ6SkRMSFZDUVVGMVFpeFhRVUZYTEU5QlFVODVNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVGNrSXNNa0pCUVRKQ2FqVkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWY1RKRExHdENRVUZyUWl4WFFVRlhMRTlCUVU4dk1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUYkVJc1lVRkRlR1J3TlVJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVnpNa01zYTBKQlFXdENMRmRCUVZjc1QwRkJUMmd4UXl4TFFVRkxiVEJETEdsQ1FVRnBRbTR3UXl4TFFVRkxObmhETEZOQlFWTnFRaXhoUVVGaGNqVkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWZFRKRExIZENRVUYzUWl4WFFVRlhMRTlCUVU5cU1VTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUYUVJc2JVSkJRVzFDZERWQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZkekpETEcxQ1FVRnRRaXhYUVVGWExFOUJRVTlzTVVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRZaXhaUVVGWmVqVkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWZVRKRExHMUNRVUZ0UWl4WFFVRlhMRTlCUVU5dU1VTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUV2l4WlFVTndZekUxUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZUQXlReXg1UWtGQmVVSXNWMEZCVnl4UFFVRlBjREZETEV0QlFVdHRNRU1zYVVKQlFXbENiakJETEV0QlFVczJlRU1zVTBGQlUxZ3NhMEpCUVd0Q016VkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTWpKRExHZENRVUZuUWl4WFFVRlhMRTlCUVU5eU1VTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUVml4WlFVRlpOVFZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk5ESkRMR2xDUVVGcFFpeFhRVUZYTEU5QlFVOTBNVU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVFZDeGhRVUZoTnpWQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZOakpETEdWQlFXVXNWMEZCVnl4UFFVRlBkakZETEV0QlFVdHRNRU1zYVVKQlFXbENiakJETEV0QlFVczJlRU1zVTBGQlUxSXNWMEZCVnprMVFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVGd5UXl4bFFVRmxMRmRCUVZjc1QwRkJUM2d4UXl4TFFVRkxiVEJETEdsQ1FVRnBRbTR3UXl4TFFVRkxObmhETEZOQlFWTlFMRmRCUTNocFFpODFRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlNzeVF5eDFRa0ZCZFVJc1YwRkJWeXhQUVVGUGVqRkRMRXRCUVV0dE1FTXNhVUpCUVdsQ2JqQkRMRXRCUVVzMmVFTXNVMEZCVTBnc2JVSkJRVzFDYmpaQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZaek5ETEhOQ1FVRnpRaXhYUVVGWExFOUJRVTh4TVVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRSaXhyUWtGQmEwSndOa0lzUzBGQlMyOHJRaXhqUVVGakxGZEJRVmN6TVVNc1MwRkJTelF4UXl4UlFVRlJMRWxCUVVseUswSXNTMEZCUzI4clFpeGpRVUZqYWpORExGVkJRVlZWTEU5QlFVOHNWMEZCVnl4UFFVRlBXU3hMUVVGTE5ERkRMRkZCUVZGNE1rTXNVVUZCVVcxWkxFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZiVE5ETEVsQlFVa3NWMEZCVnl4SlFVRkpOVEpETEVWQlFVVmxMRXRCUVVzME1VTXNVVUZCZDBJc1QwRkJhRUkxTVVNc1MwRkJTelF4UXl4UlFVRlJMRWRCUVZVek1rTXNSMEZEZEdOeldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWVzh6UXl4dFFrRkJiVUlzVTBGQlV6Y3lReXhGUVVGRlF5eEhRVUV5U1N4SlFVRjRTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGNsZ3NSMEZCUjNOQ0xFdEJRVXMyWXl4TlFVRk5ibVVzU1VGQlNUUkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkMFdDeEhRVUZIUVN4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCWlc1YUxFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFZEJRVWR5V0N4SFFVRkhRU3hGUVVGRmNWa3NTMEZCUzBNc1owSkJRV2RDZVVNc1YwRkJWeXhGUVVGRkwyRXNSMEZCUnl4SlFVRkpSQ3hIUVVGSFpTeExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJUeXhKUVVGR2Frc3NSVUZCVFN4TFFVRkxRU3hIUVVGSFFTeEpRVUZKTEVWQlFVVkRMRWRCUVVjc1RVRkJUU3hGUVVGRlFTeExRVUZMTEVWQlFVVmpMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkROVlp6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZYRXpReXhyUWtGQmEwSXNVMEZCVXpreVF5eEZRVUZGUXl4SFFVRkhORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SFFVRkhkVUlzUzBGQlN6WmpMRTFCUVUxd1pTeEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5eVdDeEhRVUZIYzBJc1MwRkJTelpqTEUxQlFVMXVaU3hKUVVGSk5FSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNSMEZCUjNSWUxFZEJRVWRCTEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVF5eFhRVUZYYmxvc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1IwRkJSM0pZTEVkQlFVZEJMRVZCUVVWeFdTeExRVUZMUXl4blFrRkJaMEo1UXl4WFFVRlhhbUVzUzBGQlMyY3lReXhaUVVGWkx6SkRMRWRCUVVkbExFdEJRVXRuTWtNc1dVRkJXVGt5UXl4SlFVTjBVM0ZaTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVmRUTkRMSE5DUVVGelFpeFRRVUZUYURORExFZEJRWGxETEVsQlFYUkROa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SFFVRkhkVUlzUzBGQlN6WmpMRTFCUVUxd1pTeEpRVUZSTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1IwRkJSM1JZTEVkQlFVZEJMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UXl4WFFVRlhMRWxCUVVsb1lpeEhRVUZIWlN4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlR5eEpRVUZHYWtzc1JVRkJUU3hMUVVGTFFTeExRVUZMTEVWQlFVVmxMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkRiRTl6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZYY3pReXh2UWtGQmIwSXNVMEZCVTJvelF5eEhRVUZ0U1N4SFFVRm9TVFpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NTVUZCU1hOWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWY3ZZU3hGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZDBNc1YwRkJZeXhIUVVGSEwyRXNSVUZCUldVc1MwRkJTMmt5UXl4elFrRkJjMEpvTTBNc1QwRkJUeXhEUVVGRExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4RlFVRkZMRVZCUVVWQkxFVkJRVVZCTEVsQlFVbGpMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZQTEVsQlFVWnFTeXhGUVVGTkxFdEJRVXRCTEVsQlFVa3NSVUZCUldVc1MwRkJTelF4UXl4UlFVRlJNWE5ETEV0QlFVc3NTMEZEYWxSeFR5eExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWWGt6UXl4elFrRkJjMElzVTBGQlUyd3pReXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hIUVVGSGRVSXNTMEZCU3paakxFMUJRVTF3WlN4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzUllMRWRCUVVkQkxFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSTBReXhYUVVGWE4wTXNTMEZCU3paNlFpeE5RVUZOU1N4WFFVRlhkbk5ETEVkQlFVZGxMRXRCUVVzNE1VTXNiVUpCUVcxQ2RpdENMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWemw2UWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUTI1UUwzcENMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWTURORExHOUNRVUZ2UWl4VFFVRlRiak5ETEVkQlFVYzJRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1JZTEVkQlFVZDFRaXhMUVVGTE5tTXNUVUZCVFhCbExFbEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNSWUxFbEJRVWx6V1N4TFFVRkxReXhuUWtGQlowSXlReXhYUVVGWGJHSXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RakpETEZkQlFWYzFReXhMUVVGTE5ucENMRTFCUVUxSkxGZEJRVmQyYzBNc1IwRkJSMlVzUzBGQlN6Z3hReXh0UWtGQmJVSjJLMElzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYT1hwQ0xFdEJRVXMyZWtJc1RVRkJUVVVzWTBGREwxRXZla0lzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZVeU0wTXNiMEpCUVc5Q0xGTkJRVk53TTBNc1IwRkJSelpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NTVUZCU1hOWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWY3ZZU3hGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZDBNc1YwRkJWMmhoTEV0QlFVdHBNa01zZFVKQlFYVkNhRE5ETEVkQlFVY3NSVUZCUlVFc1IwRkJSeXhOUVVGTkxFbEJRVWx6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZUUXpReXh2UWtGQmIwSXNVMEZCVTNJelF5eEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEhRVUZIZFVJc1MwRkJTelpqTEUxQlFVMXdaU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hKUVVGSmMxa3NTMEZCUzBNc1owSkJRV2RDTWtNc1YwRkJWMnhpTEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBJeVF5eFhRVUZYTlVNc1MwRkJTelo2UWl4TlFVRk5TeXhqUVVGamVITkRMRWRCUVVkbExFdEJRVXM0TVVNc2JVSkJRVzFDZGl0Q0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ6bDZRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRemRtTDNwQ0xFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZOak5ETERCQ1FVRXdRaXhUUVVGVGRETkRMRWRCUVVkbExFdEJRVXQzTWtNc2QwSkJRWGRDYWk5Q0xFdEJRVXMyZWtJc1RVRkJUVFpDTEhOQ1FVRnpRbWgxUXl4TFFVRkxjMWtzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZVNE0wTXNkMEpCUVhkQ0xGTkJRVk4yTTBNc1IwRkJSeXhKUVVGSlF5eEZRVUZGWXl4TFFVRkxkVmdzUzBGQlN6WjZRaXhOUVVGTldTeFpRVUZaTDNORExFZEJRVWR6V1N4TFFVRkxObnBDTEUxQlFVMWxMRmRCUVZjMU1FSXNTMEZCU3paNlFpeE5RVUZOUXl4WFFVRlhPWHBDTEV0QlFVczJla0lzVFVGQlRVVXNZVUZCV1N4VFFVRlRjbk5ETEVWQlFVVTNRaXhIUVVGSE9FSXNSVUZCUlRReVF5eHRRa0ZCYlVJM01rTXNTVUZCU1N4RlFVRkZOMElzU1VGQlNTeFBRVU0xVm0xaExFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZLek5ETEZkQlFWY3NVMEZCVTNnelF5eEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEhRVUZIZFVJc1MwRkJTelpqTEUxQlFVMXdaU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNSMEZCUjNSWUxFZEJRVWNzU1VGQlNVRXNSMEZCUjJVc1MwRkJTelF4UXl4UlFVRlJNWE5ETEV0QlFVdHFTeXhKUVVGSkxFVkJRVVVzVFVGQlRYTlpMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWWnpSRExGbEJRVmtzVTBGQlUzb3pReXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hIUVVGSGRVSXNTMEZCU3paakxFMUJRVTF3WlN4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzUllMRWRCUVVjc1RVRkJUVUVzUjBGQlIyVXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXRxU3l4SlFVRkpMRVZCUVVVc1MwRkJTMlVzUzBGQlN6UXhReXhSUVVGUk1YTkRMRXRCUVV0cVN5eEpRVUZKTEVWQlFVVXNUVUZETlZWeldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWWE16UXl4WlFVRlpMRk5CUVZNdk1rTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkMFdDeEhRVUZIUVN4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCVjJwaExFdEJRVXMwTVVNc1VVRkJVVEZ6UXl4TFFVRkxha3NzU1VGQlNTeEZRVUZGTEV0QlFVdGxMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkJTU3hGUVVGRkxFdEJRVXRsTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZCU1N4SFFVRkhMRXRCUVV0bExFdEJRVXMwTVVNc1VVRkJVVEZ6UXl4TFFVRkxha3NzU1VGQlNTeEhRVUZITEUxQlFVMXpXU3hMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVldrMFF5eFpRVUZaTEZOQlFWTXhNME1zUjBGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzUjBGQlIzVkNMRXRCUVVzMll5eE5RVUZOY0dVc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEVkQlFVZDBXQ3hIUVVGSFFTeEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENORU1zVjBGQlZ6ZERMRXRCUVVzMmVrSXNUVUZCVFVjc1dVRkJXWFJ6UXl4SFFVRkhaU3hMUVVGTFp6SkRMRmxCUVZsNkswSXNTMEZCU3paNlFpeE5RVUZOUXl4WlFVRlpjbkpETEV0QlFVdG5Na01zV1VGQldYb3JRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRMjVuUWk5NlFpeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWV3MwUXl4VlFVRlZMRk5CUVZNek0wTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UlFVRlJMRXRCUVV0MFdDeEhRVUZITEVsQlFVbEJMRWRCUVVkbExFdEJRVXMwTVVNc1VVRkJVVEZ6UXl4TFFVRkxha3NzU1VGQlNTeEZRVUZGTEUxQlFVMXpXU3hMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVlcwMFF5eFhRVUZYTEZOQlFWTTFNME1zUjBGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzUjBGQlIzVkNMRXRCUVVzMll5eE5RVUZOY0dVc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSTEU5QlFVOTBXQ3hIUVVGSExFMUJRVTFCTEVkQlFVZGxMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkJTU3hGUVVGRkxFdEJRVXRsTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZCU1N4RlFVRkZMRTFCUTJ4V2Mxa3NTMEZCUzI4clFpeGpRVUZqYWpORExGVkJRVlZ2TkVNc1YwRkJWeXhUUVVGVE56TkRMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzUllMRWRCUVVkMVFpeExRVUZMTm1Nc1RVRkJUWEJsTEVsQlFVazJRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1JZTEVsQlFVbHpXU3hMUVVGTFF5eG5Ra0ZCWjBKM1F5eFhRVUZYTDJFc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFuZERMRmRCUVZkb1lTeExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJTMnBMTEVsQlFVa3NSVUZCUlN4TFFVRkxaU3hMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCUzJwTExFbEJRVWtzUlVGQlJTeExRVUZMWlN4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlMycExMRWxCUVVrc1IwRkJSeXhMUVVGTFpTeExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJTMnBMTEVsQlFVa3NSMEZCUnl4TlFVTnlVM05aTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVmNUUkRMRmRCUVZjc1UwRkJVemt6UXl4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SFFVRkhkVUlzUzBGQlN6WmpMRTFCUVUxd1pTeEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEpRVUZKYzFrc1MwRkJTME1zWjBKQlFXZENNa01zVjBGQlYyeGlMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEl5UXl4WFFVRlhOVU1zUzBGQlN6WjZRaXhOUVVGTlNTeFhRVUZYZG5ORExFZEJRVWRsTEV0QlFVc3JNVU1zYTBKQlFXdENlQ3RDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnpsNlFpeExRVUZMTm5wQ0xFMUJRVTFGTEdOQlEzSlJMM3BDTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVmN6UkRMR2xDUVVGcFFpeFRRVUZUTHpORExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNSWUxFZEJRVWQxUWl4TFFVRkxObU1zVFVGQlRYQmxMRWxCUVVrMlFpeExRVUZMWjFZc1VVRkJVVk1zVVVGQlVYUllMRWxCUVVseldTeExRVUZMUXl4blFrRkJaMEl5UXl4WlFVRlpiR0lzUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUWpKRExGZEJRVmMxUXl4TFFVRkxObnBDTEUxQlFVMVpMRmxCUVZsNk1FSXNTMEZCU3paNlFpeE5RVUZOTmtJc2MwSkJRWE5DYUhWRExFbEJRVWxsTEV0QlFVc3JNVU1zYTBKQlFXdENlQ3RDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnpsNlFpeExRVUZMTm5wQ0xFMUJRVTFGTEdOQlEyaFVMM3BDTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVmRUUkRMRmRCUVZjc1UwRkJVMmcwUXl4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTluTWtJc1RVRkJWM1IwUXl4SlFVRkpjM1JETEUxQlFWZDBkRU1zUjBGQlJ6Wm9ReXhOUVVGTk4yaERMRWxCUVVsQkxFbEJRVWx6V1N4TFFVRkxReXhuUWtGQlowSnJReXhoUVVGaGVtRXNSMEZCUjNOWkxFdEJRVXRETEdkQ1FVRm5RbXRETEdGQlFXRnVReXhMUVVGTE5ucENMRTFCUVUxTkxHRkJRV0Y2YzBNc1IwRkJSMlVzUzBGQlMyY3lReXhaUVVGWmVpdENMRXRCUVVzMmVrSXNUVUZCVFVNc1lVRkRhbEE1ZWtJc1MwRkJTMjhyUWl4alFVRmphak5ETEZWQlFWVjNORU1zV1VGQldTeFRRVUZUYWpSRExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDJjeVFpeE5RVUZYZEhSRExFbEJRVWx6ZEVNc1RVRkJWM1IwUXl4SFFVRkhObWhETEUxQlFVMDNhRU1zU1VGQlNVRXNTVUZCU1hOWkxFdEJRVXRETEdkQ1FVRm5RbkZETEdGQlFXRTFZU3hIUVVGSGMxa3NTMEZCUzBNc1owSkJRV2RDY1VNc1lVRkJZWFJETEV0QlFVczJla0lzVFVGQlRWY3NZVUZCWVRselF5eEhRVUZIWlN4TFFVRkxaekpETEZsQlFWbDZLMElzUzBGQlN6WjZRaXhOUVVGTlF5eFpRVUZaY25KRExFdEJRVXRuTWtNc1dVRkJXWG9yUWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUVdNdmVrSXNTMEZCUzI4clFpeGpRVUZqYWpORExGVkJRVlY1TkVNc1ZVRkJWU3hUUVVGVGJEUkRMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eHJRa0ZCYlVKMFdDeEhRVUZITEdsQ1FVRnJRa0VzUjBGQlIyVXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXRxU3l4RlFVRkZMRVZCUVVVc1NVRkRhR0p6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZUQTBReXhWUVVGVkxGTkJRVk51TkVNc1IwRkJSelpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NTVUZCU1hOWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWY3ZZU3hGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZDBNc1YwRkJWMmhoTEV0QlFVdHJNa01zYjBKQlFXOUNhak5ETEVsQlFVbHpXU3hMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVlRJMFF5eFhRVUZYTEZOQlFWTndORU1zUjBGQlIyVXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXRTTEUxQlFVMHhTU3hMUVVGTE5ERkRMRkZCUVZFek1rTXNTVUZCU1hOWkxFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZORFJETEd0Q1FVRnJRaXhUUVVGVGNqUkRMRWRCUVVkeldTeExRVUZMTm5wQ0xFMUJRVTFaTEZsQlFWa3ZjME1zUjBGQlIyVXNTMEZCU3pneFF5eHRRa0ZCYlVKMkswSXNTMEZCU3paNlFpeE5RVUZOUXl4WFFVRlhPWHBDTEV0QlFVczJla0lzVFVGQlRVVXNZMEZETTJJdmVrSXNTMEZCUzI4clFpeGpRVUZqYWpORExGVkJRVlUyTkVNc2FVSkJRV2xDTEZOQlFWTjBORU1zUjBGQlIzTlpMRXRCUVVzMmVrSXNUVUZCVFZrc1dVRkJXUzl6UXl4SFFVRkhaU3hMUVVGTFp6SkRMRmxCUVZsNkswSXNTMEZCU3paNlFpeE5RVUZOUXl4WlFVRlpjbkpETEV0QlFVdG5Na01zV1VGQldYb3JRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRM2hLTDNwQ0xFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZPRFJETEZsQlFWa3NVMEZCVTNZMFF5eEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSV01zUzBGQlN6UXhReXhSUVVGUmVESkRMRTlCUVU5cVF5eEZRVUZGTEVWQlFVVkJMRVZCUVVVNFFpeEZRVUZGUnl4UFFVRlBha01zU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVVMlFpeEZRVUZGZVdVc1YwRkJWM1puUWl4SFFVRkhMRWRCUVVjc1NVRkJTVU1zUlVGQlJUUkRMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMT1V3c1VVRkJVU3hIUVVGSExFdEJRVXRCTEVWQlFVVTBReXhMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCU3psTUxFZEJRVWNzUlVGQlJTeExRVUZMTkVNc1MwRkJTelF4UXl4UlFVRlJNWE5ETEV0QlFVOHNSMEZCUmpsTUxFVkJRVXNzVlVGQlZTeEhRVUZITEUxQlFVMUJMRVZCUVVVc1IwRkJSeXhQUVVGUFFTeEhRVUZITEU5QlFVOUJMRWRCUVVkRUxFVkJRVVVzUlVGQlJUaENMRVZCUVVWSExFOUJRVThzUTBGQlF5eEpRVUZKUXl4RlFVRkZTaXhGUVVGRmVXVXNWMEZCVjNablFpeEZRVUZGTEVkQlFVY3NUMEZCVDJ0RExFZEJRVWNzVDBGQlQwRXNTVUZCU1dwRExFVkJRVVVzVFVGQlRVRXNSVUZCUlN4UFFVRlBhVU1zUlVGQlJTeE5RVUZOTEUxQlFVMVhMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMT1V3c1IwRkJSeXhIUVVGSExFdEJRVXMwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlN6bE1MRWRCUVVjc1IwRkJSeXhIUVVGSExFdEJRVXMwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlN6bE1MRWRCUVVjc1JVRkJSU3hIUVVGSExFdEJRVXMwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlR5eEhRVUZHT1V3c1JVRkJTeXhMUVVGTFJDeFZRVUZWTmtNc1MwRkJTelF4UXl4UlFVRlJNWE5ETEV0QlFVczVUQ3hIUVVOMlppeEhRVUZITEV0QlFVczBReXhMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCU3psTUxFZEJRVWNzUlVGQlJTeEhRVUZITEV0QlFVczBReXhMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCVHl4SFFVRkdPVXdzUlVGQlN5eExRVUZMTEU5QlFVODBReXhMUVVGTE5ERkRMRkZCUVZGNE1rTXNUMEZCVDBZc1IwRkJSM0ZaTEV0QlFVdHJaME1zVFVGQlRTeEhRVUZIYkdkRExFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlR5eFRRVUZUZWpSRExFVkJRVVZETEVkQlFVZGpMRXRCUVVzeU0wTXNSMEZCUnpFMFF5eEZRVUZGWlN4TFFVRkxORE5ETEVkQlFVY3hORU1zUjBGQlIzRlpMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUMmcxUXl4VlFVRlZiVFZETEVsQlFVa3NVMEZCVXpVMFF5eEhRVUZITEU5QlFVOWxMRXRCUVVzME0wTXNSMEZCUnpNMFF5eEZRVUZGTWpSRExFbEJRVWsxTTBNc1MwRkJTelF6UXl4SlFVRkpNelJETEVWQlFVVXlORU1zU1VGQlNUVXpReXhMUVVGTE1qTkRMRWRCUVVjeE5FTXNSVUZCUlRBMFF5eEpRVUZKTEVWQlFVVXpNME1zUzBGQlN6UXpReXhKUVVGSk16UkRMRVZCUVVVeU5FTXNTVUZCU1RVelF5eExRVUZMTWpORExFbEJRVWt4TkVNc1JVRkJSVEEwUXl4SFFVRkhMRVZCUVVVc1IwRkJSM0JuUXl4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlc4MVF5eFhRVUZYTEZkQlFWY3NUMEZCVHl4SlFVRkpkbWRETEV0QlFVdHJaME1zVFVGQlRVTXNVVUZCVVRFelF5eExRVUZMTWpORExFdEJRVXNzUjBGQlZ5eEZRVUZTTXpORExFdEJRVXMwTTBNc1MwRkJUeXhOUVVGTkxFVkJRVVUxTTBNc1MwRkJTelF6UXl4TFFVRkxMRWxCUVVrc1NVRkJTWEpuUXl4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlhFMVF5eFZRVUZWTEZkQlFWY3NUMEZCVHl4SlFVRkplR2RETEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVHpFelF5eExRVUZMTWpORExFbEJRVWtzU1VGQlNTeEhRVUZITXpORExFdEJRVXMwTTBNc1NVRkJTU3hGUVVGRk5UTkRMRXRCUVVzeU0wTXNTMEZCU3l4TlFVRk5MRWxCUTJ4cFFuQm5ReXhMUVVGTGEyZERMRTFCUVUxRExFOUJRVTlvTlVNc1ZVRkJWWE0xUXl4SlFVRkpMRmRCUVZjc1UwRkJhVUlzVjBGQlVtZzBReXhMUVVGTE5ETkRMRXRCUVdkQ2NtZERMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUMmcxUXl4VlFVRlZkVFZETEVsQlFVa3NWMEZCVnl4VFFVRnBRaXhGUVVGU2FqUkRMRXRCUVVzeU0wTXNTMEZCVDNCblF5eExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZYYzFReXhMUVVGTExGZEJRVmNzVDBGQlR5eEhRVUZIYkRSRExFdEJRVXN5TTBNc1NVRkJTU3hIUVVGSE16TkRMRXRCUVVzME0wTXNTVUZCU1hKblF5eExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZXbFdMRWxCUVVrc1UwRkJVekZWTEVkQlFVY3NUMEZCVHl4SlFVRkpjMWtzUzBGQlMydG5ReXhOUVVGTlF5eFJRVUZSTVRORExFdEJRVXN5TTBNc1IwRkJSekUwUXl4RlFVRkZNRFJETEVkQlFVY3NZMEZCWXl4SlFVRkpMRWxCUVVrek0wTXNTMEZCU3pRelF5eEhRVUZITXpSRExFVkJRVVV5TkVNc1IwRkJSeXhqUVVGakxFbEJRVWtzV1VGQldUVXpReXhMUVVGTE1qTkRMRWRCUVVjeE5FTXNSVUZCUlRBMFF5eEhRVUZITEVWQlFVVXNTMEZCU3l4SlFVTm9XWEJuUXl4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlhrMVF5eEpRVUZKTEZOQlFWTnNOVU1zUjBGQlJ5eFBRVUZQTEVsQlFVbHpXU3hMUVVGTGEyZERMRTFCUVUxRExGRkJRVkV4TTBNc1MwRkJTekl6UXl4SFFVRkhNVFJETEVWQlFVVXdORU1zUjBGQlJ5eGpRVUZqTEVsQlFVa3NTVUZCU1RNelF5eExRVUZMTkRORExFZEJRVWN6TkVNc1JVRkJSVEkwUXl4SFFVRkhMR05CUVdNc1NVRkJTU3hGUVVGRk5UTkRMRXRCUVVzeU0wTXNSMEZCUnpFMFF5eEZRVUZGTURSRExFZEJRVWNzUlVGQlJTeExRVUZMTEVsQlFVbHdaME1zUzBGQlMydG5ReXhOUVVGTlF5eFBRVUZQVlN4VFFVRlRMRk5CUVZOdU5VTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCU1N4TlFVRkdPRUlzUlVGQmIwSTNRaXhGUVVGSkxFMUJRVVk0UWl4RlFVRlJSeXhGUVVGRlNDeEpRVUZKTEVkQlFUWkRMRWxCUVRGRFFTeEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJTeFBRVUZQUkN4RlFVRkZhME1zUlVGQlJTeFBRVUZQTEZGQlFYWkVTaXhMUVVGTExFbEJRVEpFTjBJc1JVRkJSU3hQUVVGWFJDeEZRVUZGT0VJc1JVRkJSVWtzUjBGQlIyeERMRVZCUVVWclF5eEpRVUZKTEV0QlFVdEtMRVZCUVVVM1FpeEpRVUZKTEVsQlFVa3NXVUZCV1RoQ0xFZEJRVWRCTEVkQlFVY3NWMEZCVnk5Q0xFZEJRVWNzUlVGQlJTeFBRVUZQTEVsQlFVbHZZU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVTk0TkVNc1NVRkJTU3hGUVVGRkwwSXNTVUZCU1N4SlFVTXZXVzloTEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVDJnMVF5eFZRVUZWTWpWRExFbEJRVWtzVTBGQlUzQTFReXhIUVVGSExFbEJRVWxETEVWQlFVVnhXU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVTlWTEZOQlFWTndORU1zUzBGQlN6SXpReXhIUVVGSE1UUkRMRWRCUVRSRUxFOUJRWHBFUVN4RlFVRkZjMWtzUzBGQlMydG5ReXhOUVVGTlF5eFBRVUZQVlN4VFFVRlRjRFJETEV0QlFVczBNME1zUjBGQlJ6TTBReXhKUVVGTE1qUkRMRWRCUVVjek5FTXNSVUZCUlRBMFF5eEhRVUZITVRSRExFVkJRVVV3TkVNc1IwRkJSeXhGUVVGVGVqUkRMRVZCUVVWNVZTeEpRVUZKTVZVc1NVRkRPVXB6V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlRRMVF5eEpRVUZKTEZOQlFWTnlOVU1zUjBGQlJ5eEhRVUZITEVkQlFVZEJMRVZCUVVVc1RVRkJUU3hIUVVGSExFbEJRVWxETEVWQlFVVXNTVUZCU1hGWkxFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlR5eEZRVUZGTEVkQlFVZDJOa01zUlVGQlJTeEpRVUZKYjJFc1MwRkJTMnRuUXl4TlFVRk5ReXhQUVVGUE1UTkRMRXRCUVVzeU0wTXNSMEZCUnpNelF5eExRVUZMTkRORExFbEJRVWt6TkVNc1JVRkJSU3hKUVVGSmMxa3NTMEZCUzJ0blF5eE5RVUZOUXl4UFFVRlBlalJETEVWQlFVVXNSMEZCUnl4SlFVRkpMRWxCUVVrM1FpeEZRVUZGTEVsQlFVbHRZU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVThzUlVGQlJTeEpRVUZKZWpSRExFVkJRVVVyTkVNc1QwRkJUeTgwUXl4RlFVRkZRU3hGUVVGRk9EUkRMRmxCUVZrek5rTXNSVUZCUlVFc1JVRkJSVEkyUXl4WlFVRlpMRTFCUVUwek5rTXNSVUZCUlRnMlF5eFJRVUZSTEVkQlFVZHFOVU1zUlVGQlJUUTBReXhKUVVGSk1UWkRMRXRCUVVzclFpeEZRVUZGUVN4RlFVRkZlVlVzU1VGQlNYWlhMRWRCUVVkRUxFVkJRVVZCTEVWQlFVVm5OME1zU1VGQlNXdzFReXhKUVVGSlFTeEZRVUZGUVN4RlFVRkZOalJETEdGQlFXRXhOa01zUlVGQlJVRXNSVUZCUlRBMlF5eGhRVUZoTEUxQlFVMHNRMEZCUXpVMFF5eEZRVUZGTDBJc1NVRkJTVzloTEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVDJnMVF5eFZRVUZWTkVrc1UwRkJVeXhYUVVGWExFbEJRVWtzU1VGQlNYSkpMRVZCUVVVc1IwRkJSME1zUlVGQlJXTXNUVUZCVFdRc1JVRkJSV2MxUXl4UlFVRlJMRU5CUVdFc1NVRkJTUzgyUXl4SFFVRm9RaXRDTEVWQlFVVkJMRVZCUVVWdk5VTXNTVUZCU1N4TFFVRlpMRWRCUVVkeU5VTXNSVUZCUlVNc1JVRkJSU3hIUVVGSGVUUkRMRWRCUVVjeE5FTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFXbENMRTFCUVdZc1NVRkJTVGhDTEVsQlFVbEJMRVZCUVVVc1MwRkJXVUVzUjBGRGNHVnpXU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVTloTEZkQlFWY3NVMEZCVTNRMVF5eEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hKUVVGSmNWa3NTMEZCUzJ0blF5eE5RVUZOUXl4UFFVRlBMRVZCUVVVc1IwRkJSM1kyUXl4RlFVRkZMRWxCUVVsdllTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOHNSVUZCUlN4SFFVRkhkRFpETEVWQlFVVXNSVUZCUlVFc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5b1F5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpOa0lzUlVGQlJUZENMRWxCUVVrc1NVRkJTVFpDTEVWQlFVVTNRaXhIUVVGSExFOUJRVThzUzBGQlN5eEpRVUZKYVVNc1JVRkJSVEJsTEZOQlFWTTVaU3hGUVVGRk4wSXNSMEZCUnl4SlFVRkpSQ3hGUVVGRmR6WkRMRWRCUVVkME5FTXNSVUZCUlVnc1JVRkJSVUVzUlVGQlJXMDFReXhKUVVGSkxFbEJRVWt4YTBNc1NVRkJTWGhYTEVkQlFVY3NUMEZCVHl0Q0xFZEJRVWR4V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlRoS0xFMUJRVTBzVjBGQlZ5eFBRVUZQTEVsQlFVa3JUeXhMUVVGTGEyZERMRTFCUVUxRExFOUJRVTh4TTBNc1MwRkJTekl6UXl4SFFVRkhNek5ETEV0QlFVczBNME1zUzBGQlMzSm5ReXhMUVVGTGEyZERMRTFCUVUxbExFMUJRVTBzVTBGQlUzWTFReXhGUVVGRlF5eEhRVUZIWXl4TFFVRkxNak5ETEVkQlFVY3hORU1zUlVGQlJXVXNTMEZCU3pRelF5eEhRVUZITVRSRExFZEJRekZYY1Zrc1MwRkJTMnRuUXl4TlFVRk5aU3hOUVVGTk9UVkRMRlZCUVZWcFZpeEpRVUZKTEZOQlFWTXhWU3hIUVVGSExFOUJRVThzU1VGQlNYTlpMRXRCUVV0clowTXNUVUZCVFdVc1QwRkJUM2cwUXl4TFFVRkxNak5ETEVkQlFVY3hORU1zUlVGQlJUQTBReXhIUVVGSExHTkJRV01zU1VGQlNTeEpRVUZKTXpORExFdEJRVXMwTTBNc1IwRkJSek0wUXl4RlFVRkZNalJETEVkQlFVY3NZMEZCWXl4SlFVRkpMRmxCUVZrMU0wTXNTMEZCU3pJelF5eEhRVUZITVRSRExFVkJRVVV3TkVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzU1VGQlNYQm5ReXhMUVVGTGEyZERMRTFCUVUxbExFMUJRVTA1TlVNc1ZVRkJWWGsxUXl4SlFVRkpMRk5CUVZOc05VTXNSMEZCUnl4UFFVRlBMRWxCUVVseldTeExRVUZMYTJkRExFMUJRVTFsTEU5QlFVOTRORU1zUzBGQlN6SXpReXhIUVVGSE1UUkRMRVZCUVVVd05FTXNSMEZCUnl4alFVRmpMRWxCUVVrc1NVRkJTVE16UXl4TFFVRkxORE5ETEVkQlFVY3pORU1zUlVGQlJUSTBReXhIUVVGSExHTkJRV01zU1VGQlNTeEZRVUZGTlRORExFdEJRVXN5TTBNc1IwRkJSekUwUXl4RlFVRkZNRFJETEVkQlFVY3NSVUZCUlN4TFFVRkxMRWxCUVVsd1owTXNTMEZCUzJ0blF5eE5RVUZOWlN4TlFVRk5PVFZETEZWQlFWVTRTaXhOUVVGTkxGZEJRVmNzVDBGQlR5eEpRVUZKSzA4c1MwRkJTMnRuUXl4TlFVRk5aU3hOUVVGTmVEUkRMRXRCUVVzeU0wTXNSMEZCUnpNelF5eExRVUZMTkRORExFdEJRM1poY21kRExFdEJRVXRyWjBNc1RVRkJUV1VzVFVGQlRUazFReXhWUVVGVk5Fa3NVMEZCVXl4WFFVRlhMRWxCUVVseVNTeEZRVUZGTEVsQlFWa3NWMEZCVW1Vc1MwRkJTelF6UXl4SlFVRmxNVFJETEVWQlFVVXNTVUZCU1hGWkxFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlR6RXpReXhMUVVGTE1qTkRMRWRCUVVjek0wTXNTMEZCU3pRelF5eEpRVUVyUXl4UFFVRXpRek0wUXl4SlFVRkpReXhGUVVGRkxFbEJRVXR4V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU4c1JVRkJSU3hIUVVGSlV5eEpRVUZKYWpWRExFdEJRVmRFTEVWQlFVVXNTVUZCU1N4SlFVRkpReXhGUVVGRmIwa3NXVUZCV1dsUkxFdEJRVXRyWjBNc1RVRkJUV1VzVFVGQlRVUXNWMEZCVnl4VFFVRlRkRFZETEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hGUVVGRlJDeEZRVUZGUnl4UlFVRlJMRXRCUVV0SUxFVkJRVVVzUjBGQk1rUXNUMEZCZUVSRExFbEJRVWxFTEVWQlFVVkJMRVZCUVVWelJDeFZRVUZWTEVsQlFYbERMRkZCUVhKRGRFUXNSVUZCUlhOWkxFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlQyRXNWMEZCVjNRMVF5eEpRVUZ6UWl4TlFVRkxReXhKUVVGSlJDeEZRVUZGTEVsQlFVdHpXU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVThzUlVGQlJTeEhRVUZKVXl4SlFVRkpiRFZETEVsQlFWY3NTVUZCU1hOWkxFdEJRVXRyWjBNc1RVRkJUV1VzVFVGQlRYWTFReXhGUVVGRk1EUkRMRWRCUVVjeE5FTXNSVUZCUlRJMFF5eE5RVUZMY21kRExFdEJRVXRyYUVNc1lVRkJZU3hYUVVGWGVqUkRMRXRCUVVzd05FTXNVVUZCVVN4SFFVRkhNVFJETEV0QlFVc3lORU1zWVVGQllTeEZRVUZGTXpSRExFdEJRVXMwTkVNc1UwRkJVeXhKUVVGSmNtaERMRXRCUVV0dkswSXNZMEZCWXpNeFF5eExRVUZMTmpSRExGZEJRVmNzU1VGQlNYUm9ReXhMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlc4MlF5eHJRa0ZCYTBJc1UwRkJVemMxUXl4SFFVRkhMRWxCUVVsRExFVkJRVVZqTEV0QlFVczBORU1zVTBGQlV5OURMRTFCUVUwM01VTXNTMEZCU3pBMFF5eFJRVUZSZUhaRExFdEJRVXRvU3l4SFFVRkhZeXhMUVVGTE1EUkRMRkZCUVZGNGRrTXNTMEZCUzJwTExFZEJRVWRsTEV0QlFVc3lORU1zWTBGQlkzbzFReXhGUVVGRlJTeFBRVUZQU0N4RlFVRkZSeXhSUVVNM2NrSnRXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhFMlF5eG5Ra0ZCWjBJc1UwRkJVemsxUXl4SFFVRnpTeXhQUVVGdVMyVXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkZMRmRCUVZkc1lTeEZRVUZGWlN4TFFVRkxORFJETEZOQlFWTXZReXhOUVVGTk56RkRMRXRCUVVzd05FTXNVVUZCVVhoMlF5eExRVUZMYWtzc1IwRkJSMlVzUzBGQlN6STBReXhqUVVGak1UVkRMRVZCUVVWSExFOUJRVTlJTEVWQlFVVnBTeXhMUVVGTGJFb3NTMEZCU3pJMFF5eGpRVUZ4UWpFMVF5eEhRVUZIYzFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjFOa01zWTBGQll5eFRRVUZUYURaRExFZEJRVWNzU1VGQlNVTXNSVUZCUlVRc1JVRkJSV2swUWl4TlFVRnRSQ3hKUVVFM1EyZzBRaXhGUVVGRll5eExRVUZMTWpSRExHRkJRV0V6TkVNc1MwRkJTelEwUXl4VFFVRlRlRFZETEZOQlFWTkdMRVZCUVUwMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIY2xnc1IwRkJSeXhKUVVGSlFTeEhRVUZIUkN4RlFVRkZhVXNzUzBGQlR5eEpRVUZHYUVzc1JVRkJUU3hMUVVGTFFTeExRVUZMTEVWQlFVVmpMRXRCUVVzeU5FTXNaVUZCWlRFMVF5eEZRVUZGYVVzc1MwRkJTMmhMTEVkQlFVZGpMRXRCUVVzeU5FTXNaMEpCUTNaaWNHaERMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZHpaRExIVkNRVUYxUWl4VFFVRlRhalpETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITmtNc1MwRkJTemcwUXl4clFrRkJhMEkzTlVNc1JVRkJSV3R6UXl4VFFVRlRhbk5ETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlY1TmtNc05FSkJRVFJDTEZOQlFWTnNOa01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRUaENMRWRCUVVjc1RVRkJUVU1zUjBGQlJ5eE5RVUZOTDBJc1IwRkJSelpETEV0QlFVdHJOVU1zZFVKQlFYVkNhalpETEVWQlFVVkRMRVZCUVVVdlFpeEpRVUZKYjJFc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjFkME1zVFVGQlRTeFhRVUZYYW5aRExFdEJRVXN3TkVNc1VVRkJVU3hIUVVGSE1UUkRMRXRCUVVzME5FTXNVMEZCVXk5RExFMUJRVTAzTVVNc1MwRkJTekkwUXl4aFFVRmhMRVZCUVVVek5FTXNTMEZCU3pZMFF5eFhRVUZYTEVsQlEzaFhkR2hETEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1EWkRMR2RDUVVGblFpeFhRVUZYZERSRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFZEJRVWQyVnl4TFFVRkxOalJETEZkQlFWZDZOVU1zVVVGQlVTeEpRVUZKTEVsQlFVbElMRVZCUVVVc1NVRkJTV2x6UXl4WFFVRlhiSEpETEV0QlFVc3lORU1zWVVGQllUTTBReXhMUVVGTE5EUkRMRk5CUVZONE5VTXNWVUZCVlVZc1JVRkJSV01zUzBGQlN6QTBReXhSUVVGUmRqZERMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBhRU1zUlVGQlJTeEZRVUZGYVVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV3RETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRlNpeEZRVUZGUnl4SFFVRkhTaXhGUVVGRk1sVXNTVUZCU1hSVkxFVkJRVVZzUXl4SFFVRkhRU3hIUVVGSGEwTXNSVUZCUlVZc1QwRkJjMGNzVDBGQkwwWkdMRVZCUVVWakxFdEJRVXMwTkVNc1UwRkJVeTlETEUxQlFVMDFNa01zUlVGQlJUSlZMRWxCUVVreFZTeEZRVUZGT1VJc1IwRkJSMEVzUjBGQlJ6aENMRVZCUVVWRkxFOUJRVTh3UWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDI1YUxFZEJRVWMyUWl4RlFVRkZSeXhSUVVGUldTeExRVUZMTURSRExGRkJRVkVzUTBGQlEzbzFReXhIUVVGVlFTeEhRVUZIYzFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVXlOa01zYzBKQlFYTkNMRk5CUVZOd05rTXNSMEZCUnl4UFFVRlBOa0lzUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJ0Q0xHZENRVUZuUWpOeFF5eExRVUZMYnpWRExHdENRVUZyUW00MlF5eEpRVU0zWkhOWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZORFpETEdkQ1FVRm5RaXhUUVVGVGNqWkRMRWRCUVVkbExFdEJRVXMyTkVNc1YwRkJWek4yUXl4TFFVRkxiRW9zUzBGQlN5czBReXhuUWtGQlowSTVOVU1zUzBGQlMzTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTmpaRExHTkJRV01zVjBGQlYzbzBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGRsY3NTMEZCU3pZMFF5eFhRVUZYZWpWRExGRkJRVkZaTEV0QlFVdHBOVU1zWTBGQlkybzFReXhMUVVGTE5qUkRMRmRCUVZjemFFSXNVVUZCVVRObUxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZjelpETEd0Q1FVRnJRaXhUUVVGVEx6VkRMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhkRmdzUjBGQlIwRXNSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUTTBNc2MwSkJRWE5DTEVWQlFVVm9NME1zUlVGQlJVTXNTVUZEZEZseFdTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVGcyUXl4VFFVRlRMRk5CUVZOMk5rTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1VNc1JVRkJSVzFoTEV0QlFVdERMR2RDUVVGblFrY3NWVUZCVlN4UFFVRlBNVmtzUjBGQlJ5eExRVUZMTjBJc1JVRkJSWGxoTEU5QlFVODNXQ3hMUVVGTGF6TkRMRmxCUVZsb05FTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTeExRVUZMUXl4RlFVRkZNR0VzVFVGQlRUbFlMRXRCUVV0cE0wTXNWMEZCVnk4elF5eEZRVUZGTDBJc1IwRkJSeXhOUVVGTkxFdEJRVXRETEVWQlFVVXlZU3hOUVVGTkwxZ3NTMEZCU3lzeVF5eFhRVUZYTnpORExFVkJRVVV2UWl4SFFVRkhMRTFCUVUwc1MwRkJTME1zUlVGQlJUUmhMRTlCUVU5b1dTeExRVUZMTWpKRExGbEJRVmw2TTBNc1JVRkJSUzlDTEVkQlFVY3NUVUZCVFN4TFFVRkxReXhGUVVGRk5tRXNUVUZCVFdwWkxFdEJRVXM0TWtNc1YwRkJWelV6UXl4RlFVRkZMMElzUjBGQlJ5eE5RVUZOTEV0QlFVdERMRVZCUVVVNFlTeFJRVUZSYkZrc1MwRkJTM2sxUXl4aFFVRmhkalpETEVWQlFVVXZRaXhIUVVGSExFMUJRVTBzUzBGQlMwTXNSVUZCUlN0aExGRkJRVkZ1V1N4TFFVRkxNRFZETEdGQlFXRjROa01zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3hMUVVGTFF5eEZRVUZGWjJJc1MwRkJTM0JaTEV0QlFVdHRNME1zVlVGQlZXbzBReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5MRXRCUVV0RExFVkJRVVZwWWl4UFFVRlBjbGtzUzBGQlMzY3pReXhaUVVGWmREUkRMRVZCUVVVdlFpeEhRVUZITEUxQlFVMHNTMEZCUzBNc1JVRkJSV3RpTEUxQlFVMTRXQ3hMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXhuUkVGRGRtWXNUVUZCVFN4TFFVRkxjbG9zUlVGQlJXMWlMRkZCUVZGNldDeExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eHJSRUZCYTBRc1RVRkJUU3hMUVVGTGNsb3NSVUZCUlc5aUxFMUJRVTE0V1N4TFFVRkxjVE5ETEZkQlFWZHVORU1zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3hMUVVGTFF5eEZRVUZGY1dJc1QwRkJUM3BaTEV0QlFVdG5Na01zV1VGQldUa3lReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5MRXRCUVV0RExFVkJRVVZ6WWl4TFFVRkxNVmtzUzBGQlMyOHpReXhWUVVGVmJEUkRMRVZCUVVVdlFpeEhRVUZITEUxQlFVMHNTMEZCUzBNc1JVRkJSWFZpTEZOQlFWTXpXU3hMUVVGTE1qVkRMR05CUVdONk5rTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTeExRVUZMUXl4RlFVRkZkMklzVTBGQlV6VlpMRXRCUVVzME5VTXNZMEZCWXpFMlF5eEZRVUZGTDBJc1IwRkJSeXhOUVVGTkxFdEJRVXRETEVWQlFVVjVZaXhQUVVGUE4xa3NTMEZCU3pZMVF5eFpRVUZaTXpaRExFVkJRVVV2UWl4SFFVRkhMRTFCUVUwc1MwRkJTME1zUlVGQlJUQmlMRTlCUVU4NVdTeExRVUZMT0RWRExGbEJRVmsxTmtNc1JVRkJSUzlDTEVkQlFVY3NUVUZCVFN4TFFVRkxReXhGUVVGRk1tSXNVVUZCVVM5WkxFdEJRVXQxTTBNc2FVSkJRV2xDY2pSRExFVkJRVVV2UWl4SFFVRkhMRTFCUVUwc1MwRkJTME1zUlVGQlJUUmlMRkZCUVZGb1dpeExRVUZMY3pORExHdENRVUZyUW5BMFF5eEZRVUZGTDBJc1IwRkJSeXhOUVVGTkxGRkJRVkV5UkN4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4elEwRkRiR2RDWXl4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYRTNReXgxUWtGQmRVSXNVMEZCVXprMlF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxqTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUXl4UlFVRlJiRm9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0x6SkRMRXRCUVV0eFdTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWE0zUXl4eFFrRkJjVUlzVTBGQlV5ODJReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsakxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZSYkZvc1MwRkJTelEwUXl4VFFVRlRNVU1zYjBKQlFXOUNhRE5ETEV0QlFVdHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhVM1F5eDFRa0ZCZFVJc1UwRkJVMmczUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVbGpMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGUmJGb3NTMEZCU3pRMFF5eFRRVUZUZWtNc2MwSkJRWE5DYWpORExFdEJRMmhvUW5GWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZkemRETEhGQ1FVRnhRaXhUUVVGVGFqZERMRVZCUVVWRExFZEJRVWNzVFVGQlRVRXNTVUZCU1dNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRVkZzV2l4TFFVRkxORFJETEZOQlFWTjRReXh2UWtGQmIwSnNNME1zUzBGQlMzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZVRkRExIRkNRVUZ4UWl4VFFVRlRiRGRETEVWQlFVVkRMRWRCUVVjc1RVRkJUVUVzU1VGQlNXTXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVZGc1dpeExRVUZMTkRSRExGTkJRVk4yUXl4dlFrRkJiMEp1TTBNc1MwRkJTM0ZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1EZERMSEZDUVVGeFFpeFRRVUZUYmpkRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTV01zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFWRnNXaXhMUVVGTE5EUkRMRk5CUVZOMFF5eHZRa0ZCYjBKd00wTXNTMEZEZUdkQ2NWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlV5TjBNc01rSkJRVEpDTEZOQlFWTndOME1zUlVGQlJVTXNSMEZCUnl4TlFVRk5RU3hKUVVGSll5eExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCVVd4YUxFdEJRVXMwTkVNc1UwRkJVM0pETERCQ1FVRXdRbkl6UXl4TFFVRkxjVmtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVME4wTXNlVUpCUVhsQ0xGTkJRVk55TjBNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SlFVRkpZeXhMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlVXeGFMRXRCUVVzME5FTXNVMEZCVTNCRExIZENRVUYzUW5RelF5eExRVU0zVjNGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZielJETEZkQlFWY3NVMEZCVXpjelF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNKWUxFbEJRVWx4V1N4TFFVRkxReXhuUWtGQlowSjNReXhYUVVGWE9XRXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWZG9ZU3hMUVVGTFp6WkRMSEZDUVVGeFFpODJReXhGUVVGRlF5eExRVUZMY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVTJOME1zYVVKQlFXbENMRk5CUVZOME4wTXNSVUZCUlVNc1IwRkJSeXhOUVVGTlFTeEpRVUZKUVN4RlFVRkZObVVzVTBGQlV6ZGxMRVZCUVVVc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQY2xnc1NVRkJTWEZaTEV0QlFVdERMR2RDUVVGblFuZERMRmRCUVZjNVlTeEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENkME1zVjBGQlYyaGhMRXRCUVV0bk5rTXNjVUpCUVhGQ0x6WkRMRVZCUVVWRExFdEJRM1JaY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnhORU1zVjBGQlZ5eFRRVUZUT1RORExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQY2xnc1NVRkJTWEZaTEV0QlFVdERMR2RDUVVGblFqSkRMRmRCUVZkcVlpeEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENNa01zVjBGQlYyNWhMRXRCUVV0ck5rTXNjVUpCUVhGQ2FqZERMRVZCUVVWRExFdEJRVXR4V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYTTBReXhwUWtGQmFVSXNVMEZCVXk4elF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxCTEVWQlFVVnhXU3hMUVVGTGEyZERMRTFCUVUxbExFMUJRVTFFTEZkQlFWZHlOVU1zUjBGQlIyTXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVZGc1dpeExRVUZMTkRSRExGTkJRVk01UXl4dFFrRkJiVUkxTWtNc1JVRkJSWGswUXl4SFFVRkhlalJETEVWQlFVVXdORU1zVFVGRGRsbHlaME1zUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWek0wTXNXVUZCV1N4VFFVRlRMekpETEVWQlFVVkRMRWRCUVVjc1RVRkJUVUVzU1VGQlNUUkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkeVdDeEhRVUZIUVN4RlFVRkZjVmtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCVjJwaExFdEJRVXNyTlVNc2RVSkJRWFZDT1RaRExFVkJRVVZETEV0QlFVdHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRnM1F5eHJRa0ZCYTBJc1UwRkJVM1kzUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVbEJMRVZCUVVVMlpTeFRRVUZUTjJVc1JVRkJSU3hKUVVGSk5FSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNSMEZCUjNKWUxFZEJRVWRCTEVWQlFVVnhXU3hMUVVGTFF5eG5Ra0ZCWjBKNVF5eFhRVUZYYW1Fc1MwRkJTeXMxUXl4MVFrRkJkVUk1TmtNc1JVRkJSVU1zUzBGQlMzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYVRSRExGbEJRVmtzVTBGQlV6RXpReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIY2xnc1IwRkJSMEVzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUWpSRExGZEJRVmR3WVN4TFFVRkxhVFpETEhWQ1FVRjFRbWczUXl4RlFVRkZReXhMUVVNdlpYRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWS3pkRExHdENRVUZyUWl4VFFVRlRlRGRETEVWQlFVVkRMRWRCUVVjc1RVRkJUVUVzU1VGQlNVRXNSVUZCUlhGWkxFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlQyRXNWMEZCVjNJMVF5eEhRVUZIWXl4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlV6bERMRzFDUVVGdFFqVXlReXhGUVVGRmVUUkRMRWRCUVVkNk5FTXNSVUZCUlRBMFF5eE5RVUZOY21kRExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZiVGRETEZsQlFWa3NVMEZCVXpVMlF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNKWUxFbEJRVWx4V1N4TFFVRkxReXhuUWtGQlowSjNReXhYUVVGWE9XRXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWZG9ZU3hMUVVGTGJUWkRMSEZDUVVGeFFtdzNReXhGUVVGRlF5eExRVU16V1hGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZiemRETEZsQlFWa3NVMEZCVXpjMlF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNKWUxFbEJRVWx4V1N4TFFVRkxReXhuUWtGQlowSXlReXhYUVVGWGFtSXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5RakpETEZkQlFWZHVZU3hMUVVGTGJ6WkRMSEZDUVVGeFFtNDNReXhGUVVGRlF5eExRVUZMY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVm5PRU1zWjBKQlFXZENMRk5CUVZONk4wTXNSVUZCUlVNc1IwRkJSeXhOUVVGTlFTeEhRVUZIWXl4TFFVRkxjelpETEhsQ1FVRjVRbkkzUXl4RlFVRkZReXhKUVVGSmNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZwT0VNc2EwSkJRV3RDTEZOQlFWTXhOME1zUlVGQlJVTXNSMEZCUnl4TlFVRk5RU3hIUVVGSFl5eExRVUZMY1RaRExESkNRVUV5UW5BM1F5eEZRVUZGUXl4SlFVTjZXWEZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVlp6ZERMR0ZCUVdFc1UwRkJVM28yUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVazBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGNsZ3NSMEZCUjBFc1JVRkJSWEZaTEV0QlFVdERMR2RDUVVGblFubERMRmRCUVZkcVlTeExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyUXNVMEZCVTI1WkxFdEJRVXMwTkVNc1UwRkJVelZETEZsQlFWazVNa01zUzBGQlMzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWS3paRExHRkJRV0VzVTBGQlUzZzJReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIY2xnc1IwRkJSMEVzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUWpSRExGZEJRVmR3WVN4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJZc1UwRkJVMnhaTEV0QlFVczBORU1zVTBGQlUycERMRmxCUVZsNk0wTXNTMEZEYm1KeFdTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV3M0UXl4dFFrRkJiVUlzVTBGQlV6TTNReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsQkxFVkJRVVZ4V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5aExGZEJRVmR5TlVNc1IwRkJSMk1zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFWTnNXU3hMUVVGTE5EUkRMRk5CUVZNM1F5eHJRa0ZCYTBJM01rTXNSVUZCUlhrMFF5eEhRVUZIZWpSRExFVkJRVVV3TkVNc1RVRkJUWEpuUXl4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXazNReXhqUVVGakxGTkJRVk14TmtNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SlFVRkpORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTl5V0N4SlFVRkpjVmtzUzBGQlMwTXNaMEpCUVdkQ2QwTXNWMEZCVnpsaExFVkJRVVZ4V1N4TFFVRkxReXhuUWtGQlowSjNReXhYUVVGWGFHRXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTmtMRk5CUVZOdVdTeExRVUZMTkRSRExGTkJRVk01UWl4WFFVRlhOVE5ETEV0QlF6TmpjVmtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWck4wTXNZMEZCWXl4VFFVRlRNelpETEVWQlFVVkRMRWRCUVVjc1RVRkJUVUVzU1VGQlNUUkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBjbGdzU1VGQlNYRlpMRXRCUVV0RExHZENRVUZuUWpKRExGZEJRVmRxWWl4RlFVRkZjVmtzUzBGQlMwTXNaMEpCUVdkQ01rTXNWMEZCVjI1aExFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFppeFRRVUZUYkZrc1MwRkJTelEwUXl4VFFVRlROMElzVjBGQlZ6Y3pReXhMUVVGTGNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ0T0VNc2IwSkJRVzlDTEZOQlFWTTFOME1zUlVGQlJVTXNSMEZCUnl4TlFVRk5RU3hKUVVGSlFTeEZRVUZGY1Zrc1MwRkJTMnRuUXl4TlFVRk5aU3hOUVVGTlJDeFhRVUZYY2pWRExFZEJRVWRqTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWml4VFFVRlRiRmtzUzBGQlN6UTBReXhUUVVGVE4wTXNhMEpCUVd0Q056SkRMRVZCUVVWNU5FTXNSMEZCUjNvMFF5eEZRVUZGTURSRExFMUJRekZqY21kRExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZkVFJETEZkQlFWY3NVMEZCVTJnMFF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxqTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWkN4VFFVRlRibGtzUzBGQlN6UTBReXhUUVVGVE0wSXNWMEZCVnk4elF5eExRVUZMY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjNORU1zV1VGQldTeFRRVUZUYWpSRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTV01zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFWTnNXU3hMUVVGTE5EUkRMRk5CUVZNeFFpeFpRVUZaYURSRExFdEJRM1pVY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjVORU1zVlVGQlZTeFRRVUZUYkRSRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEd0Q1FVRnRRbkpZTEVkQlFVY3NhVUpCUVd0Q1FTeEhRVUZIWXl4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlUzcENMRlZCUVZWcU5FTXNTMEZCUzNGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZNRFJETEZWQlFWVXNVMEZCVTI0MFF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNKWUxFbEJRVWx4V1N4TFFVRkxReXhuUWtGQlowSjNReXhYUVVGWE9XRXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWZG9ZU3hMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlVXeGFMRXRCUVVzME5FTXNVMEZCVXpGRExHOUNRVUZ2UW1nelF5eExRVU5zWkhGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZPRFJETEZsQlFWa3NVMEZCVTNZMFF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxFTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVkbExFdEJRVXMwTkVNc1UwRkJVM0JDTEZsQlFWbDBORU1zUjBGQlIyTXNTMEZCUzJrMVF5eGpRVUZqYURaRExFdEJRVXR6V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUSTBReXhYUVVGWExGTkJRVk53TkVNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SlFVRkpRU3hGUVVGRmNWa3NTMEZCU3paNlFpeE5RVUZOTkVNc2RVSkJRWFZDT1hWRExFZEJRVWRqTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0x6SkRMRVZCUVVWRkxGRkJRVkZaTEV0QlFVczRORU1zYTBKQlFXdENOVFZETEV0QlFVdHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlc4NFF5eGhRVUZoTEZOQlFWTTNOME1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTdENMRWxCUVVsRUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVYzVRaXhGUVVGRkswSXNSVUZCUldNc1RVRkJUVUVzUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUXpObWMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ4T0VNc1owSkJRV2RDTEZOQlFWTTVOME1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTdENMRWxCUVVsakxFdEJRVXRuTlVNc2EwSkJRV3RDTEVWQlFVVjZhRU1zUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBjc1lVRkJZWEJhTEV0QlFVdG5OVU1zYTBKQlFXdENMRVZCUVVWNmFFTXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlVXeGFMRXRCUVVzME5FTXNVMEZCVXpGRExHOUNRVUZ2UW1velF5eEhRVUZIUVN4RlFVRkZaU3hMUVVGTEt6UkRMR2RDUVVGblFpeEhRVUZITlRkRExFVkJRVVVyUWl4RlFVRkZZeXhOUVVGTlFTeExRVUZMYVRWRExHTkJRV05vTmtNc1IwRkJSMlVzUzBGQlMyYzFReXhyUWtGQmEwSXNSVUZCUlhwb1F5eExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRTU3hoUVVNdlZqbENMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWY3poRExGZEJRVmNzVTBGQlV5ODNReXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhOUVVGTkswSXNTVUZCU1dNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZOSExHRkJRV0ZxWXl4RlFVRkZLMElzUlVGQlJXTXNUVUZCVFVFc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZOSkxHRkJRV0U1UWl4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUWTBReXhwUWtGQmFVSXNVMEZCVTNRMFF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhjbGdzUlVGQlJVVXNVVUZCVVZrc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRVk5zV1N4TFFVRkxORFJETEZOQlFWTnlRaXhwUWtGQmFVSnlORU1zUzBGRGVGcHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRRMFF5eHJRa0ZCYTBJc1UwRkJVM0kwUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVazBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGNsZ3NSVUZCUlVVc1VVRkJVVmtzUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFWRnNXaXhMUVVGTE5EUkRMRk5CUVZOMFFpeHJRa0ZCYTBKd05FTXNTMEZCUzNGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZjVE5ETEd0Q1FVRnJRaXhUUVVGVE9USkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhOa01zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5tTEZOQlFWTnNXU3hMUVVGTE5EUkRMRk5CUVZNM1F5eHJRa0ZCYTBJM01rTXNSVUZCUlM5Q0xFbEJRek5YYjJFc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnZNME1zYlVKQlFXMUNMRk5CUVZNM01rTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVYzJReXhMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlVXeGFMRXRCUVVzME5FTXNVMEZCVXpsRExHMUNRVUZ0UWpVeVF5eEZRVUZGTDBJc1NVRkJTVzloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmRUaERMSGxDUVVGNVFpeFRRVUZUYURoRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE5rTXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVZFc1NVRkJTVGxpTEVWQlFVVTBReXhMUVVGTE5EUkRMRk5CUVZOeWFFTXNTMEZCU3paNlFpeE5RVUZOWlN4WFFVRlhhblJETEVWQlFVVXZRaXhIUVVGRkxGTkJRVk00UWl4RlFVRkZReXhIUVVGSE9VSXNSVUZCUlRBMFF5eHRRa0ZCYlVJM01rTXNTVUZCU1N4RlFVRkZReXhKUVVGSkxFOUJRM0JaY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjNPRU1zYlVKQlFXMUNMRk5CUVZOcU9FTXNSVUZCUlVNc1IwRkJSeXhIUVVGSExFMUJRVTFCTEVWQlFVVXNTVUZCU1N4SlFVRkpMMElzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxaelpETEhGQ1FVRnhRaTgyUXl4RlFVRkZReXhGUVVGRkwwSXNTMEZCUzI5aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZlVGhETEhsQ1FVRjVRaXhUUVVGVGJEaERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4RlFVRkZMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTM1UyUXl4cFFrRkJhVUowTjBNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVV0dllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVEE0UXl4dFFrRkJiVUlzVTBGQlUyNDRReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXRyTmtNc2NVSkJRWEZDYWpkRExFVkJRVVZETEVWQlFVVXZRaXhMUVVNdldXOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTWpoRExEQkNRVUV3UWl4VFFVRlRjRGhETEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVGhDTEVWQlFVVXNTVUZCU1N4SlFVRkpSeXhGUVVGRkxFVkJRVVZCTEVWQlFVVklMRVZCUVVWRkxFOUJRVTlETEVsQlFVbFhMRXRCUVVzck1VTXNhMEpCUVd0Q09USkRMRVZCUVVVNVFpeEZRVUZGSzBJc1JVRkJSVWNzU1VGQlNXcERMRVZCUVVVNFFpeEZRVUZGUnl4TlFVRk5hMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVME9FTXNNa0pCUVRKQ0xGTkJRVk55T0VNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOT0VJc1JVRkJSU3hKUVVGSkxFbEJRVWxITEVWQlFVVXNSVUZCUlVFc1JVRkJSVWdzUlVGQlJVVXNUMEZCVDBNc1NVRkJTVmNzUzBGQlN6Z3hReXh0UWtGQmJVSTNNa01zUlVGQlJUbENMRVZCUVVVclFpeEZRVUZGUnl4SlFVRkpha01zUlVGQlJUaENMRVZCUVVWSExFMUJRVTFyV1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUWTRReXhwUTBGQmFVTXNVMEZCVTNRNFF5eEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUwNFFpeEZRVUZGTEVsQlFVa3NTVUZCU1Vjc1JVRkJSU3hGUVVGRlFTeEZRVUZGU0N4RlFVRkZSU3hQUVVGUFF5eEpRVUZKVnl4TFFVRkxhVGRETEhsQ1FVRjVRbWc0UXl4RlFVRkZPVUlzUlVGQlJTdENMRVZCUVVWSExFbEJRVWxxUXl4RlFVRkZPRUlzUlVGQlJVY3NUVUZEY21ScldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVGc0UXl4NVFrRkJlVUlzVTBGQlUzWTRReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXRuTTBNc2FVSkJRV2xDTHpORExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlVyT0VNc2IwSkJRVzlDTEZOQlFWTjRPRU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMS3pWRExIVkNRVUYxUWprMlF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWWnpsRExEQkNRVUV3UWl4VFFVRlRlamhETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzNjMlF5eHJRa0ZCYTBKMk4wTXNSVUZCUlVNc1JVRkJSUzlDTEV0QlEzUmFiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWcE9VTXNiMEpCUVc5Q0xGTkJRVk14T0VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTGFUWkRMSFZDUVVGMVFtZzNReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTMjloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmF6bERMREJDUVVFd1FpeFRRVUZUTXpoRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlMzazJReXhyUWtGQmEwSjROME1zUlVGQlJVTXNSVUZCUlM5Q0xFdEJRVXR2WVN4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXMDVReXh2UWtGQmIwSXNVMEZCVXpVNFF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUlVGQlJTeEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVdHROa01zY1VKQlFYRkNiRGRETEVWQlFVVkRMRVZCUVVVdlFpeExRVU55V205aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZiemxETEc5Q1FVRnZRaXhUUVVGVE56aERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4RlFVRkZMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTMjgyUXl4eFFrRkJjVUp1TjBNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVV0dllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWEU1UXl3d1FrRkJNRUlzVTBGQlV6azRReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXR4TmtNc01rSkJRVEpDY0RkRExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ6T1VNc2QwSkJRWGRDTEZOQlFWTXZPRU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMY3paRExIbENRVUY1UW5JM1F5eEZRVUZGUXl4RlFVRkZMMElzUzBGRGNHRnZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhVNVF5eHhRa0ZCY1VJc1UwRkJVMmc1UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzd05VTXNZVUZCWVhvMlF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZHpsRExIRkNRVUZ4UWl4VFFVRlRhamxETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzNrMVF5eGhRVUZoZURaRExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlY1T1VNc01rSkJRVEpDTEZOQlFWTnNPVU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMTkRaRExHMUNRVUZ0UWpNM1F5eEZRVUZGUXl4RlFVRkZMMElzUzBGRGRsbHZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRBNVF5eHpRa0ZCYzBJc1UwRkJVMjQ1UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzeU5VTXNZMEZCWXpFMlF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTWpsRExITkNRVUZ6UWl4VFFVRlRjRGxETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCU3pRMVF5eGpRVUZqTXpaRExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlUwT1VNc05FSkJRVFJDTEZOQlFWTnlPVU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMTmpaRExHOUNRVUZ2UWpVM1F5eEZRVUZGUXl4RlFVRkZMMElzUzBGRE4xbHZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRZNVF5eHRRa0ZCYlVJc1UwRkJVM1E1UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0cE0wTXNWMEZCVjJnMFF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWT0RsRExHOUNRVUZ2UWl4VFFVRlRkamxETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzJzelF5eFpRVUZaYWpSRExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlVyT1VNc2EwSkJRV3RDTEZOQlFWTjRPVU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMYlRORExGVkJRVlZzTkVNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVV0dllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2NyUXl4clFrRkJhMElzVTBGQlUzbzVReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXR2TTBNc1ZVRkJWVzQwUXl4RlFVRkZReXhGUVVGRkwwSXNTMEZEZW1WdllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2tyUXl4dlFrRkJiMElzVTBGQlV6RTVReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXQzTTBNc1dVRkJXWFkwUXl4RlFVRkZReXhGUVVGRkwwSXNTMEZCUzI5aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZheXRETEcxQ1FVRnRRaXhUUVVGVE16bERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4RlFVRkZMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTM0V6UXl4WFFVRlhjRFJETEVWQlFVVkRMRVZCUVVVdlFpeExRVUZMYjJFc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnRLME1zY1VKQlFYRkNMRk5CUVZNMU9VTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NSMEZCUnl4TlFVRk5LMElzUlVGQlJTeEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVTRRaXhGUVVGRlJTeFBRVUZQYUVNc1NVRkJTU3hEUVVGRExFbEJRVWxwUXl4RlFVRkZWeXhMUVVGTEt6UkRMR2RDUVVGblFqazFReXhIUVVGSE9VSXNSVUZCUlN0Q0xFVkJRVVU1UWl4SFFVRkhORU1zVFVGQlRVRXNTMEZCUzJrMVF5eGpRVUZqTlRWRExFdEJRMmhoYTFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnZLME1zYlVKQlFXMUNMRk5CUVZNM09VTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NSMEZCUnl4TlFVRk5LMElzUlVGQlJTeEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVTRRaXhGUVVGRlJTeFBRVUZQYUVNc1NVRkJTVFJETEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUnl4aFFVRmhhbU1zUlVGQlJTdENMRVZCUVVVNVFpeEhRVUZITkVNc1RVRkJUVUVzUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5KTEZsQlFWazVRaXhMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhFclF5eDVRa0ZCZVVJc1UwRkJVems1UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0MU0wTXNhVUpCUVdsQ2REUkRMRVZCUVVWRExFVkJRVVV2UWl4TFFVTTFXRzloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmN5dERMREJDUVVFd1FpeFRRVUZUTHpsRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlMzTXpReXhyUWtGQmEwSnlORU1zUlVGQlJVTXNSVUZCUlM5Q0xFdEJRVXR2WVN4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYVXJReXhwUWtGQmFVSXNVMEZCVTJnclF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUjBGQlIwRXNSVUZCUlVVc1QwRkJUeXhEUVVGRFNDeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTelEwUXl4VFFVRlRNVU1zYjBKQlFXOUNhRE5ETEVWQlFVVXZRaXhKUVVGSk5rTXNTMEZCUzJrMVF5eGpRVUZqYURaRExFdEJRek5WYzFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVjNLME1zZFVKQlFYVkNMRk5CUVZOcUswTXNSVUZCUlVNc1IwRkJSeXhIUVVGSExFMUJRVTFCTEVkQlFVZEJMRVZCUVVWRkxFOUJRVThzUTBGQlEwZ3NSVUZCUldVc1MwRkJTeXMwUXl4blFrRkJaMEk1TlVNc1IwRkJSeXhKUVVGSkxFbEJRVWs1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXMwTkVNc1UwRkJVekZETEc5Q1FVRnZRbTQwUWl4VFFVRlROMlVzUlVGQlJTOUNMRWRCUVVjc1MwRkJTelpETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVGTGMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlY1SzBNc2FVSkJRV2xDTEZOQlFWTnNLME1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU4c1EwRkJRMGdzUlVGQlJXVXNTMEZCU3lzMFF5eG5Ra0ZCWjBJNU5VTXNSMEZCUnl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzME5FTXNVMEZCVTNoRExHOUNRVUZ2UW13elF5eEZRVUZGTDBJc1NVRkJTVFpETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVNeFduTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTUN0RExIZENRVUYzUWl4VFFVRlRiaXRETEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVGhDTEVWQlFVVXNRMEZCUTBRc1JVRkJSV1VzUzBGQlN5czBReXhuUWtGQlowSTVOVU1zUjBGQlJ5eEpRVUZKTEVsQlFVbEpMRVZCUVVVc1JVRkJSVUVzUlVGQlJVZ3NSVUZCUlVVc1QwRkJUME1zU1VGQlNWY3NTMEZCU3pRMFF5eFRRVUZUTjBNc2EwSkJRV3RDTlRSRExFVkJRVVVyUWl4RlFVRkZSeXhKUVVGSmFrTXNSVUZCUlRoQ0xFVkJRVVZITEV0QlFVdFhMRXRCUVV0cE5VTXNZMEZCWTJnMlF5eExRVUZMYzFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVXlLME1zZVVKQlFYbENMRk5CUVZOd0swTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTk9FSXNSVUZCUlN4RFFVRkRSQ3hGUVVGRlpTeExRVUZMS3pSRExHZENRVUZuUWprMVF5eEhRVUZITEVsQlFVa3NTVUZCU1Vrc1JVRkJSU3hGUVVGRlFTeEZRVUZGU0N4RlFVRkZSU3hQUVVGUFF5eEpRVUZKVnl4TFFVRkxORFJETEZOQlFWTTVReXh0UWtGQmJVSXpORU1zUlVGQlJTdENMRVZCUVVWSExFbEJRVWxxUXl4RlFVRkZPRUlzUlVGQlJVY3NTMEZCUzFjc1MwRkJTMmsxUXl4alFVRmphRFpETEV0QlF6ZGFjMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVMEswTXNLMEpCUVN0Q0xGTkJRVk55SzBNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOT0VJc1JVRkJSU3hEUVVGRFJDeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVWtzUlVGQlJWY3NTMEZCU3pRMFF5eFRRVUZUZERWRExFVkJRVVVzUlVGQlJVRXNSVUZCUlVvc1JVRkJSVVVzVDBGQlQwVXNTVUZCU1dsWkxFdEJRVXMyZWtJc1RVRkJUV1VzVjBGQlYyaDJReXhGUVVGRkswSXNSVUZCUlVrc1NVRkJTV3hETEVWQlFVVTRRaXhGUVVGRlNTeExRVUZKTEZOQlFWTk1MRVZCUVVWRExFZEJRVWRITEVWQlFVVjVNa01zYlVKQlFXMUNOekpETEVsQlFVa3NSVUZCUlVNc1NVRkJTU3hOUVVGTFl5eExRVUZMYVRWRExHTkJRV05vTmtNc1MwRkJTM05aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk5pdERMSFZDUVVGMVFpeFRRVUZUZEN0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZiV0VzUzBGQlMydG5ReXhOUVVGTlpTeE5RVUZOUkN4WFFVRlhjalZETEVWQlFVVXZRaXhKUVVGSk5rTXNTMEZCU3pRMFF5eFRRVUZUT1VNc2JVSkJRVzFDTVRSRExFVkJRVVYxTmtNc1IwRkJSM1kyUXl4RlFVRkZkelpETEVsQlFVazFNME1zUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUTJ4blFuTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWT0N0RExHdENRVUZyUWl4VFFVRlRkaXRETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFTkJRVU5JTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EUkRMRk5CUVZNelF5eHpRa0ZCYzBJdk1rTXNSVUZCUlM5Q0xFbEJRVWsyUXl4TFFVRkxhVFZETEdOQlFXTm9Oa01zUzBGQlMzTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWS3l0RExIZENRVUYzUWl4VFFVRlRlQ3RETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFTkJRVU5JTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EUkRMRk5CUVZNelF5eHpRa0ZCYzBKc05FSXNVMEZCVXpkbExFVkJRVVV2UWl4SFFVRkhMRXRCUVVzMlF5eExRVUZMYVRWRExHTkJRV05vTmtNc1MwRkRhR0Z6V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXY3ZReXhyUWtGQmEwSXNVMEZCVTNvclF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUjBGQlIwRXNSVUZCUlVVc1QwRkJUeXhEUVVGRFNDeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTelEwUXl4VFFVRlRla01zYzBKQlFYTkNhak5ETEVWQlFVVXZRaXhKUVVGSk5rTXNTMEZCUzJrMVF5eGpRVUZqYURaRExFdEJRVXR6V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXa3ZReXgzUWtGQmQwSXNVMEZCVXpFclF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUjBGQlIwRXNSVUZCUlVVc1QwRkJUeXhEUVVGRFNDeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTEVOQlFVTXNTVUZCU1VNc1JVRkJSVzFoTEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVDJFc1YwRkJWM0kxUXl4RlFVRkZMMElzU1VGQlNUWkRMRXRCUVVzME5FTXNVMEZCVXpsRExHMUNRVUZ0UWpFMFF5eEZRVUZGZFRaRExFZEJRVWQyTmtNc1JVRkJSWGMyUXl4SlFVRkpOVE5ETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVNdlluTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYXk5RExHdENRVUZyUWl4VFFVRlRNeXRETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFTkJRVU5JTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EUkRMRk5CUVZOMlF5eHZRa0ZCYjBKdU0wTXNSVUZCUlM5Q0xFbEJRVWsyUXl4TFFVRkxhVFZETEdOQlFXTm9Oa01zUzBGQlMzTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYlM5RExHdENRVUZyUWl4VFFVRlROU3RETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFTkJRVU5JTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EUkRMRk5CUVZOMFF5eHZRa0ZCYjBKd00wTXNSVUZCUlM5Q0xFbEJRVWsyUXl4TFFVRkxhVFZETEdOQlFXTm9Oa01zUzBGRGVsbHpXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlc4dlF5eDNRa0ZCZDBJc1UwRkJVemNyUXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSMEZCUjBFc1JVRkJSVVVzVDBGQlR5eERRVUZEU0N4RlFVRkZaU3hMUVVGTEt6UkRMR2RDUVVGblFqazFReXhIUVVGSExFbEJRVWtzU1VGQlNUbENMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlN6UTBReXhUUVVGVGNFTXNkMEpCUVhkQ2FpOUNMRXRCUVVzMmVrSXNUVUZCVFRaQ0xITkNRVUZ6UWk5MFF5eEZRVUZGTDBJc1MwRkJTelpETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVGTGMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ4TDBNc2MwSkJRWE5DTEZOQlFWTTVLME1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU4c1EwRkJRMGdzUlVGQlJXVXNTMEZCU3lzMFF5eG5Ra0ZCWjBJNU5VTXNSMEZCUnl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzME5FTXNVMEZCVTNCRExIZENRVUYzUW5RelF5eEZRVUZGTDBJc1NVRkJTVFpETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVNM1luTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWY3k5RExHMUNRVUZ0UWl4VFFVRlRMeXRETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFbEJRVWxaTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0xFVkJRVVV2TWtNc1JVRkJSVVVzVVVGQlVVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRlF5eEZRVUZGUlN4UFFVRlBTQ3hKUVVGSlpTeExRVUZMTkRSRExGTkJRVk0xUXl4WlFVRlpPVEpETEVWQlFVVkVMRXRCUVV0eldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWFV2UXl4dFFrRkJiVUlzVTBGQlUyZ3ZReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1IwRkJSMEVzUlVGQlJVVXNUMEZCVHl4SlFVRkpXU3hMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVjBGQlYyNWFMRXRCUVVzME5FTXNVMEZCVXpORExITkNRVUZ6UWl4RlFVRkZMekpETEVWQlFVVkZMRkZCUVZGSUxFVkJRVVVzUlVGQlJVRXNSVUZCUlVNc1JVRkJSVVVzVDBGQlQwZ3NTVUZCU1dVc1MwRkJTelEwUXl4VFFVRlRha01zV1VGQldYb3pReXhGUVVGRlJDeExRVU51Wm5OWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZkeTlETEhsQ1FVRjVRaXhUUVVGVGFpOURMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4SFFVRkhRU3hGUVVGRlJTeFBRVUZQTEVsQlFVbFpMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWGJsb3NTMEZCU3pRMFF5eFRRVUZUTTBNc2MwSkJRWE5DTEVWQlFVVXZNa01zUlVGQlJVVXNVVUZCVVVnc1JVRkJSU3hGUVVGRlFTeEZRVUZGUXl4RlFVRkZSU3hQUVVGUFNDeEpRVUZKTEVOQlFVTXNTVUZCU1RsQ0xFVkJRVVZ2WVN4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5aExGZEJRVmR5TlVNc1JVRkJSVVFzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUTjBNc2EwSkJRV3RDTlRSRExFVkJRVVYzTmtNc1IwRkJSM2cyUXl4RlFVRkZlVFpETEUxQlEyeFVjbWRETEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmVTOURMRzlDUVVGdlFpeFRRVUZUYkM5RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRWxCUVVsWkxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYYmxvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMRVZCUVVVdk1rTXNSVUZCUlVVc1VVRkJVVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZReXhGUVVGRlJTeFBRVUZQU0N4SlFVRkpaU3hMUVVGTE5EUkRMRk5CUVZNNVFpeFhRVUZYTlRORExFVkJRVVZFTEV0QlFVdHpXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRBdlF5eHZRa0ZCYjBJc1UwRkJVMjR2UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSMEZCUjBFc1JVRkJSVVVzVDBGQlR5eEpRVUZKV1N4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWMjVhTEV0QlFVczBORU1zVTBGQlV6TkRMSE5DUVVGelFpeEZRVUZGTHpKRExFVkJRVVZGTEZGQlFWRklMRVZCUVVVc1JVRkJSVUVzUlVGQlJVTXNSVUZCUlVVc1QwRkJUMGdzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUTjBJc1YwRkJWemN6UXl4RlFVRkZSQ3hMUVVOdVpuTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTWk5RExEQkNRVUV3UWl4VFFVRlRjQzlETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFbEJRVWxaTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0xFVkJRVVV2TWtNc1JVRkJSVVVzVVVGQlVVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRlF5eEZRVUZGUlN4UFFVRlBTQ3hKUVVGSlpTeExRVUZMTkRSRExGTkJRVk0xUWl4cFFrRkJhVUk1TTBNc1JVRkJSVVFzUzBGQlMzTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTkM5RExHbENRVUZwUWl4VFFVRlRjaTlETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFbEJRVWxaTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0xFVkJRVVV2TWtNc1JVRkJSVVVzVVVGQlVVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRlF5eEZRVUZGUlN4UFFVRlBTQ3hKUVVGSlpTeExRVUZMTkRSRExGTkJRVk16UWl4WFFVRlhMek5ETEVWQlFVVkVMRXRCUXpWbWMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlUyTDBNc2EwSkJRV3RDTEZOQlFWTjBMME1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU4c1NVRkJTVmtzUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5GTEZkQlFWZHVXaXhMUVVGTE5EUkRMRk5CUVZNelF5eHpRa0ZCYzBJc1JVRkJSUzh5UXl4RlFVRkZSU3hSUVVGUlNDeEZRVUZGTEVWQlFVVkJMRVZCUVVWRExFVkJRVVZGTEU5QlFVOUlMRWxCUVVsbExFdEJRVXMwTkVNc1UwRkJVekZDTEZsQlFWbG9ORU1zUlVGQlJVUXNTMEZCUzNOWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZPQzlETEdkQ1FVRm5RaXhUUVVGVGRpOURMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4SFFVRkhRU3hGUVVGRlJTeFBRVUZQTEVsQlFVbFpMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWGJsb3NTMEZCU3pRMFF5eFRRVUZUTTBNc2MwSkJRWE5DTHpKRExFVkJRVVZGTEZGQlFWRklMRVZCUVVVc1JVRkJSVUVzUlVGQlJVTXNSVUZCUlVVc1QwRkJUMGdzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUZWtJc1ZVRkJWV28wUXl4RlFVRkZSQ3hMUVVNelpYTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWS3k5RExHZENRVUZuUWl4VFFVRlRlQzlETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFTkJRVU5JTEVWQlFVVmxMRXRCUVVzck5FTXNaMEpCUVdkQ09UVkRMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EUkRMRk5CUVZONFFpeFZRVUZWYkRSRExFVkJRVVV2UWl4SlFVRkpOa01zUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUVV0eldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2RuUkN4MVFrRkJkVUlzVTBGQlUzb3ZReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1IwRkJSMEVzUlVGQlJVVXNUMEZCVHl4SlFVRkpXU3hMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVjBGQlYyNWFMRXRCUVVzME5FTXNVMEZCVXpORExITkNRVUZ6UWl4RlFVRkZMekpETEVWQlFVVkZMRkZCUVZGSUxFVkJRVVVzUlVGQlJVRXNSVUZCUlVNc1JVRkJSVVVzVDBGQlQwZ3NTVUZCU1dVc1MwRkJTelEwUXl4VFFVRlRja0lzYVVKQlFXbENjalJETEVWQlFVVkVMRXRCUXpOaWMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZwWjBRc2QwSkJRWGRDTEZOQlFWTXhMME1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU4c1EwRkJRMGdzUlVGQlJXVXNTMEZCU3lzMFF5eG5Ra0ZCWjBJNU5VTXNSMEZCUnl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzME5FTXNVMEZCVTNSQ0xHdENRVUZyUW5BMFF5eEZRVUZGTDBJc1NVRkJTVFpETEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVGTGMxa3NTMEZCUzNGdVF5eEpRVUZKTEZOQlFWTXpMME1zUlVGQlJVTXNSMEZCUjJNc1MwRkJTellyUXl4TFFVRkxOUzlETEVWQlFVVmxMRXRCUVVzNEswTXNWMEZCVnpVdlF5eEZRVUZGWXl4TFFVRkxLeXRETEV0QlFVc3NSMEZCUnk4clF5eExRVUZMWnk5RExGVkJRVk1zUlVGQlJ5eEZRVUZGYUM5RExFdEJRVXMySzBNc1MwRkJTM292UXl4UlFVRlJXU3hMUVVGTGFTOURMR3RDUVVGclFqRnVReXhMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlhWblJDeGxRVUZsTEZkQlFWY3NTVUZCU1N4SlFVRkphR2RFTEVWQlFVVXNSVUZCUlVFc1JVRkJSV1VzUzBGQlN6WXJReXhMUVVGTGVpOURMRTlCUVU5SUxFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZZeXhMUVVGTE5pdERMRXRCUVVzMUwwTXNSMEZCUnpsQ0xFVkJRVVVyUWl4RlFVRkZMRWRCUVVkakxFdEJRVXNySzBNc1MwRkJTelZvUkN4RlFVRkZiVXNzV1VGQldTeEpRVUZKYVZFc1MwRkJTM0Z1UXl4SlFVRkpUU3hQUVVGUEwyaEVMRVZCUVVVclFpeEZRVUZGTEVsQlFVbGpMRXRCUVV0bkwwTXNWVUZCVXl4SFFVTjBabnB1UXl4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZXbGtMRkZCUVZFc1YwRkJWeXhIUVVGSE0ySXNTMEZCUzJjdlF5eFZRVUZWTEVkQlFVZG9MME1zUzBGQlN6Z3JReXhYUVVGWExFTkJRVU1zU1VGQlowSTFMME1zUlVGQldrUXNSVUZCUldVc1MwRkJTeXNyUXl4TFFVRlBMRWxCUVVrM0wwTXNTMEZCUzBRc1JVRkJSU3hIUVVGSGVrSXNUMEZCVDJ0Q0xGVkJRVlZETEdWQlFXVXhRaXhMUVVGTFowTXNSVUZCUlVNc1IwRkJSeXhEUVVGRExFbEJRVWt2UWl4RlFVRkZPRUlzUlVGQlJVTXNSMEZCUjJsblJDeGhRVUZoYUdsRUxFZEJRVWRCTEVWQlFVVjNaU3huUWtGQlowSXNRMEZCYTBRc1NVRkJha1F6WWl4TFFVRkxOaXRETEV0QlFVdDZMME1zVDBGQlR5eEhRVUZGU0N4RlFVRkZaU3hMUVVGTGJ5OURMR1ZCUVdkQ2JtcERMRTlCUVZjdll5eEZRVUZGTEVWQlFVVkJMRVZCUVVWRUxFVkJRVVZITEU5QlFVOUdMRWxCUVVrc1EwRkJReXhKUVVGSk9VSXNSVUZCUlRSRExFdEJRVXNySzBNc1MwRkJTemt2UXl4RlFVRkZReXhMUVVGTEwwSXNSVUZCUlVNc1JVRkJSU3RvUkN4bFFVRmxhR2xFTEVWQlFVVjNaU3hWUVVGVk0ySXNTMEZCU3pZclF5eExRVUZMTXpGRExFdEJRVXNzUTBGQlF6bE1MRVZCUVVWcFFpeEpRVUZKYWtJc1JVRkJSVmNzVVVGQlVXbERMRXRCUVV0bkwwTXNWVUZCVXl4RlFVRkhMRTlCUVU5b0wwTXNTMEZCU3pZclF5eE5RVU5xV1hSdVF5eExRVUZMY1c1RExFbEJRVWxzWjBRc1ZVRkJWVzFsTEZOQlFWTXNVMEZCVXpWa0xFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkpMMElzUlVGQlJUWkRMRXRCUVVzeVlpeFZRVUZWZG1Vc1JVRkJSU3hIUVVGSGFVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUldsRExFOUJRVTlETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRlZTeExRVUZMS3l0RExFdEJRVXMxYUVRc1JVRkJSV3RETEVkQlFVY3NSMEZCUjJsSkxGbEJRVmwwU0N4TFFVRkxjUzlETEZkQlFWY3ZMME1zUjBGQlJ5eEpRVUZKY1VJc1JVRkJSWEpDTEVWQlFVVTJMME1zWVVGQllYZ3JReXhIUVVGSFJ5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzSllMRWRCUVVjNVFpeEZRVUZGT0V3c1MwRkJTeXhEUVVGRE5Vb3NSVUZCUldwQ0xFbEJRVWxoTEVWQlFVVkVMRVZCUVVVd1FpeE5RVUZOZGtRc1JVRkJSVGhNTEV0QlFVc3NRMEZCUXpWS0xFVkJRVVZxUWl4SlFVRkphVUlzUlVGQlJYWkNMRkZCUVZFc1QwRkJUMWdzUjBGQlIyMWhMRXRCUVV0eGJrTXNTVUZCU1ZVc1YwRkJWeXhUUVVGVGNtZEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhLMElzUlVGQlJTeEpRVUZKY1Zrc1MwRkJTM0Z1UXl4SlFVRkpMRWRCUVVjeEwwTXNSMEZCUnl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVMlFpeEZRVUZGUnl4UFFVRlBhRU1zU1VGQlNTeERRVUZETEVsQlFVbHBReXhGUVVGRlNpeEZRVUZGTjBJc1IwRkJSeXhIUVVGSGEwTXNSVUZCUlc1RExFVkJRVVU0UWl4RlFVRkZOMElzUjBGQlJ5eEpRVUZKT0VJc1JVRkJSVEJWTEVsQlFVbDJWU3hGUVVGRlF5eEhRVUZITEU5QlFVOUtMRWRCUVVkeFdTeExRVUZMY1c1RExFbEJRVWxYTEhWQ1FVRjFRaXhUUVVGVGRHZEVMRWRCUVVkbExFdEJRVXQzTDBNc1MwRkJTeXhGUVVGRmVDOURMRXRCUVVzMkswTXNTMEZCU3pVdlF5eEhRVU51WTNOWkxFdEJRVXR4YmtNc1NVRkJTVmNzZFVKQlFYVkNOMmRFTEZWQlFWVXJaMFFzUzBGQlN5eFhRVUZYTEU5QlFVOTZMME1zUzBGQlMzY3ZReXhMUVVGTGVDOURMRXRCUVVzMkswTXNTMEZCUzNvdlF5eFBRVUZQTEVOQlFVTnpaMFFzVFVGQlN5eEZRVUZITTJoRUxFMUJRVTFwUXl4TFFVRkxOaXRETEV0QlFVczNLME1zUzBGQlMzY3ZReXhUUVVGVExFTkJRVU5GTEUxQlFVc3NSVUZCUnpOb1JDeFhRVUZOTEVsQlFWTXNiMEpCUVc5Q1JpeFRRVUZUTUZvc1MwRkJTM0Z1UXl4SlFVRkpWeXgxUWtGQmRVSTNaMFFzVlVGQlZXSXNUMEZCVHpob1JDeFZRVUZWTEZkQlFWY3NUMEZCVHpNdlF5eFBRVUZQZFZnc1MwRkJTM0Z1UXl4SlFVRkpiR2RFTEZWQlFWVnJhRVFzVlVGQlZTeFhRVUZYTEU5QlFVODFMME1zUzBGQlMyOHZReXhqUVVGamFHZEVMRkZCUVZGdFdTeExRVUZMY1c1RExFbEJRVWxzWjBRc1ZVRkJWU3RWTEUxQlFVMHNWMEZCVjNwVUxFdEJRVXNySzBNc1MwRkJTeXhIUVVGSEx5dERMRXRCUVV0bkwwTXNWVUZCVXl4SFFVTnlXbnB1UXl4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZXMW9SQ3hKUVVGSkxGTkJRVk0xWjBRc1IwRkJSMEVzUlVGQlJVRXNSVUZCUlhGSkxGZEJRVmNzU1VGQlNYQkpMRVZCUVVWakxFdEJRVXNySzBNc1MwRkJTM0JuUkN4bFFVRmxUU3hIUVVGM1F5eGpRVUU1UW1Vc1MwRkJTeXNyUXl4TFFVRkxPUzlETEVkQlFVZGxMRXRCUVV0bkwwTXNWVUZCVXl4RlFVRlZPUzlETEVkQlFVZHhXU3hMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlc5b1JDeGhRVUZoTEZkQlFWY3NTVUZCU1RkblJDeEZRVUZGTEVkQlFVZERMRVZCUVVWakxFdEJRVXR2TDBNc1kwRkJZMnhuUkN4RlFVRkZLMk1zVDBGQlR5eEpRVUZKTEVsQlFVazVaU3hGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTU3hEUVVGRExFbEJRVWxETEVWQlFVVTBReXhMUVVGTEt5dERMRXRCUVVzM0wwTXNSVUZCUlM5Q0xFbEJRVWs0UWl4RlFVRkZhVXNzUzBGQlN5eERRVUZET1V3c1JVRkJSV2xDTEVsQlFVbHFRaXhGUVVGRlZ5eFJRVUZSTEU5QlFVOXJRaXhIUVVGSGMxa3NTMEZCUzNGdVF5eEpRVUZKYkdkRUxGVkJRVlZ4YUVRc1VVRkJVU3hYUVVGWExFbEJRVWs1WjBRc1JVRkJSU3hIUVVGSFF5eEZRVUZGWXl4TFFVRkxieTlETEdOQlFXTnNaMFFzUlVGQlJTdGpMRTlCUVU4c1NVRkJTU3hKUVVGSk9XVXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRk5FTXNTMEZCU3lzclF5eExRVUZMTnk5RExFVkJRVVV2UWl4SlFVRkpPRUlzUlVGQlJXbExMRXRCUVVzc1EwRkJRemxNTEVWQlFVVnBRaXhKUVVGSk1rSXNTMEZCUzNFdlF5eFhRVUZYYW1sRUxFdEJRVXNzVDBGQlR5eEpRVUZKYldFc1MwRkJTM0Z1UXl4SlFVRkpWeXgxUWtGQmRVSjBaMFFzU1VGRGRHWnpXU3hMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlhOb1JDeExRVUZMTEZkQlFWY3NTVUZCU1M5blJDeEZRVUZGTEVkQlFVZERMRVZCUVVWakxFdEJRVXR2TDBNc1kwRkJZMnhuUkN4RlFVRkZLMk1zVDBGQlR5eEpRVUZKTEVsQlFVazVaU3hGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVGhDTEVWQlFVVnBTeXhMUVVGTGJFb3NTMEZCU3lzclF5eExRVUZMTnk5RExFVkJRVVV2UWl4SlFVRkphMElzUzBGQlN5eFBRVUZQTEVsQlFVbHJXaXhMUVVGTGNXNURMRWxCUVVsWExIVkNRVUYxUW5SblJDeEpRVUZKYzFrc1MwRkJTM0Z1UXl4SlFVRkpiR2RFTEZWQlFWVjFhRVFzVDBGQlR5eFhRVUZYTEVsQlFVbG9hRVFzUlVGQlJTeEhRVUZIUXl4RlFVRkZZeXhMUVVGTGJ5OURMR05CUVdOc1owUXNSVUZCUlN0akxFOUJRVThzU1VGQlNTeEpRVUZKT1dVc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrNFFpeEZRVUZGYVVzc1MwRkJTMnhLTEV0QlFVdHhMME1zVjBGQlYzSXZReXhMUVVGTEt5dERMRXRCUVVzM0wwTXNSVUZCUlM5Q0xFMUJRVTBzVDBGQlR5eEpRVUZKYjJFc1MwRkJTM0Z1UXl4SlFVRkpWeXgxUWtGQmRVSjBaMFFzU1VGRE0xZHpXU3hMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlN0VUxGRkJRVkVzVTBGQlUzaFVMRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVVMlF5eExRVUZMYnk5RExHTkJRV05xYVVRc1JVRkJSVGhsTEU5QlFVOHNTVUZCU1N4SlFVRkpOMlVzUlVGQlJTeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRmFVTXNUMEZCVDJoRExFbEJRVWtzUTBGQlF5eEpRVUZKYVVNc1JVRkJSVmNzUzBGQlN5c3JReXhMUVVGTE5XaEVMRVZCUVVWRExFbEJRVWsyUWl4RlFVRkZhRU1zUzBGQlMybERMRVZCUVVWakxFdEJRVXR4TDBNc1YwRkJWMmhuUkN4SFFVRkhRU3hGUVVGRmFFSXNTVUZCU1RKQ0xGRkJRVkYxV0N4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZXdFdMRWxCUVVrc1UwRkJVek5WTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXNTVUZCU1c5aExFdEJRVXR4YmtNc1NVRkJTVTBzVDBGQlQycG5SQ3hIUVVFclJ5eFBRVUUxUjJVc1MwRkJTemdyUXl4WlFVRlpNMmhFTEVWQlFVVm5hVVFzWVVGQllXcG5SQ3hGUVVGRkwwSXNSVUZCUlZrc1RVRkJUVzFDTEVWQlFVVjVZeXhYUVVGWGVHVXNSVUZCUlZrc1RVRkJUVzFDTEVWQlFVVmpMRXRCUVVzckswTXNTMEZCU3prdlF5eEZRVUZGY1Vrc1dVRkJXVzVMTEVWQlFVVTJReXhMUVVGTFp5OURMRlZCUVZNc1JVRkJWV2d2UXl4TlFVRk5kVmdzUzBGQlMzRnVReXhKUVVGSmJHZEVMRlZCUVZVeVowUXNWMEZCVnl4VFFVRlRjR2RFTEVkQlFVY3NUMEZCVDJVc1MwRkJTemdyUXl4WlFVRlpOeTlETEVWQlFVVnJaMFFzWlVGQlpXeG5SQ3hGUVVGRmEyZEVMR0ZCUVdFc1NVRkJTVzR2UXl4TFFVRkxPQ3RETEZkQlFWYzNMME1zUlVGQlJXeENMRkZCUVZGclFpeEZRVUZGYTJkRUxHTkJRV05zWjBRc1JVRkJSV3hDTEU5QlEzQm1kMW9zUzBGQlMzRnVReXhKUVVGSmJHZEVMRlZCUVZWbUxFbEJRVWtzVTBGQlUzTkNMRWRCUVVjc1IwRkJSMEVzUlVGQlJXVXNTMEZCU3lzclF5eExRVUZMT1M5RExFVkJRVVZ4U1N4WlFVRlpMRTlCUVU5MFNDeExRVUZMY1M5RExGZEJRVmR3WjBRc1NVRkJTWE5aTEV0QlFVdHhia01zU1VGQlNXeG5SQ3hWUVVGVmQyaEVMRWxCUVVrc1UwRkJVMnBvUkN4SFFVRkhMRTlCUVU5QkxFVkJRVVZ4U1N4aFFVRmhkRWdzUzBGQlN5c3JReXhOUVVGTmVHNURMRXRCUVV0eGJrTXNTVUZCU1d4blJDeFZRVUZWZVdoRUxHZENRVUZuUWl4VFFVRlRiR2hFTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUjBGQlJ5eEpRVUZKUXl4RlFVRkZWU3hMUVVGTGJ5OURMR05CUVdNNUwwTXNSVUZCUlRKakxFOUJRVThzU1VGQlNTeEpRVUZKZEdJc1JVRkJSU3hGUVVGRlFTeEZRVUZGY2tJc1JVRkJSVVlzVDBGQlQzVkNMRWxCUVVrc1EwRkJReXhKUVVGSkswd3NSVUZCUlRGTkxFdEJRVXNySzBNc1MwRkJTM292UXl4RlFVRkZjVUlzU1VGQlNYcENMRVZCUVVWdk5rTXNaMEpCUVdkQ2NqWkRMRWRCUVVjNVFpeEZRVUZGUml4TFFVRkxhVU1zUlVGQlJTeEZRVUZGZDA0c1JVRkJSWEpQTEV0QlFVc3lRaXhMUVVGTE9DdERMRmRCUVZjeGFFUXNSVUZCUlVnc1MwRkJTMmxETEVWQlFVVXNSVUZCUldNc1MwRkJTM0V2UXl4WFFVRlhNM2xETEVkQlFVZHlUaXhIUVVGSGFrTXNSVUZCUlVnc1MwRkJTMmxETEVWQlFVVXNSVUZCUlhkT0xFVkJRVVV6VHl4UFFVRlBiVUlzUlVGQlJYRTJReXhyUWtGRGVGcG9hVU1zUzBGQlMzRnVReXhKUVVGSmQwSXNhMEpCUVd0Q0xGTkJRVk51YUVRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFVkJRVVZwUXl4RlFVRkZReXhGUVVGRmNVSXNSMEZCUnl4TFFVRkxla0lzUlVGQlJYRjZReXhqUVVGamNucERMRVZCUVVWdmVrTXNZMEZCWXl4RFFVRkRMRWxCUVVrMWJFTXNSVUZCUlhoT0xFVkJRVVZwZWtNc2FVSkJRV2xDTEVkQlFVZDZiRU1zUlVGQlJYQk9MRVZCUVVWdVF5eEZRVUZGUml4TFFVRkxhVU1zUjBGQlJ5eEhRVUZIZDA0c1NVRkJTWHBPTEVWQlFVVTJMME1zV1VGQldXZ3JReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUMnhZTEVkQlFVZHpRaXhKUVVGSlFTeEZRVUZGTEVsQlFVa3hRaXhGUVVGRk5pOURMRmxCUVZreGFFUXNSVUZCUlVnc1MwRkJTMmxETEVWQlFVVjVRaXhGUVVGRmRFSXNTVUZCU1hOQ0xFVkJRVVYyUkN4RlFVRkZTQ3hMUVVGTGFVTXNTVUZCU1RSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFMUJRVkZxV0N4SFFVRkhkMElzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzVFVGQlVUVldMRWRCUVVjeFFpeEZRVUZGTWxVc1NVRkJTWFJWTEVWQlFVVnhRaXhKUVVGSk5GY3NTMEZCUzNGdVF5eEpRVUZKYkdkRUxGVkJRVlV3WjBRc1dVRkJXU3hYUVVGWExFbEJRWEZDYW1sRUxFVkJRV3BDT0VJc1JVRkJSV1VzUzBGQlN5c3JReXhMUVVGTE55OURMRVZCUVVVc1IwRkJTeXhKUVVGSkwwSXNTMEZCU3poQ0xFVkJRVVY2UWl4UFFVRlBhMElzVlVGQlZVTXNaVUZCWlRGQ0xFdEJRVXRuUXl4RlFVRkZPVUlzU1VGQlNTdENMRVZCUVVWblN5eExRVUZMTDB3c1IwRkJSeXhQUVVGUEswSXNSMEZEY21KeFdTeExRVUZMY1c1RExFbEJRVWxOTEU5QlFVOHNVMEZCVTJwblJDeEZRVUZGUXl4SFFVRkhZeXhMUVVGTE0wSXNTVUZCU1Zrc1JVRkJSV1VzUzBGQlMycERMRTFCUVUxdFFpeEZRVUZGWXl4TFFVRkxiUzlETEd0Q1FVRmhMRWRCUVZFMWJrTXNTMEZCU3podlF5eHRRa0ZCYlVJc1UwRkJVM0JvUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVZFhMRXRCUVV0elowUXNWMEZCVjNKb1JDeEZRVUZGWlN4TFFVRkxkV2RFTEZWQlFWVnlhRVFzUlVGQlJXTXNTMEZCUzNkblJDeExRVUZMY21wRUxFVkJRVVUyUXl4TFFVRkxlV2RFTEZkQlFWZHlha1FzUlVGQlJUUkRMRXRCUVVzd1owUXNWMEZCVjNKb1JDeEhRVUZIYTFrc1MwRkJTMjl3UXl4NVFrRkJlVUlzVTBGQlV6Rm9SQ3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRVZCUVVWRExFZEJRVWRWTEV0QlFVczBaMFFzVlVGQlZUTm9SQ3hGUVVGRlpTeExRVUZMTm1kRUxHVkJRV1V6YUVRc1JVRkJSV01zUzBGQlN6aG5SQ3hsUVVGbE0ycEVMRVZCUVVVMlF5eExRVUZMSzJkRUxIbENRVUY1UWpOcVJDeEZRVUZGTkVNc1MwRkJTMmRvUkN3eVFrRkJNa0l6YUVRc1JVRkJSVmNzUzBGQlMybG9SQ3hUUVVGVE0yaEVMRWRCUVVkcFdTeExRVUZMT0c5RExHMUNRVUZ0UWpOb1JDeFZRVUZWZDJsRUxHTkJRV01zVjBGQlZ5eFJRVUZSYkdoRUxFdEJRVXQzWjBRc1RVRkJUV3B3UXl4TFFVRkxOSEJETEZGQlFWRXNZVUZCWVRWd1F5eExRVUZMTkhCRExGRkJRVkZETEc5Q1FVRnRRaXhGUVVGSE4zQkRMRXRCUVVzMGNFTXNVVUZCVVVVc2MwSkJRWE5DZG1kRUxFdEJRVXRwUWl4M1FrRkRkbXRDZDFZc1MwRkJTelJ3UXl4UlFVRlJSeXh2UWtGQmJVSXNSVUZCUnk5d1F5eExRVUZMTkhCRExGRkJRVkZKTEhGQ1FVRnZRaXhGUVVGSGFIRkRMRXRCUVVzMGNFTXNVVUZCVVVzc2FVTkJRV2RETEVWQlFVZHFjVU1zUzBGQlN6UndReXhSUVVGUlRTeHhRa0ZCY1VJc2JVSkJRVzFDZGxjc1YwRkJWek42UWl4TFFVRkxOSEJETEZGQlFWRjZhVVFzVlVGQlZXZHFSQ3hwUWtGQmFVSXNWMEZCVnl4UFFVRlBNV2hFTEV0QlFVc3lhRVFzV1VGQldYQnhReXhMUVVGTE5IQkRMRkZCUVZGVExGVkJRVlVzVTBGQlV6TnBSQ3hGUVVGRlF5eEhRVUZITEU5QlFVOUJMRVZCUVVWRUxFVkJRVVUwYVVRc2JVSkJRVzFDZEhGRExFdEJRVXMwY0VNc1VVRkJVVmNzYlVKQlFXMUNMR0ZCUVdGMmNVTXNTMEZCU3pSd1F5eFJRVUZSV1N4blFrRkJaMElzVTBGQlV6bHBSQ3hGUVVGRlF5eEhRVUZITEU5QlFVOUJMRVZCUVVWRUxFVkJRVVUwYVVRc2JVSkJRM2hoZEhGRExFdEJRVXMwY0VNc1VVRkJVV0VzVjBGQlZ5eFRRVUZUTDJsRUxFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1JVRkJSVU1zUjBGQk9GQXNSMEZCTTFCTUxFVkJRVVZuYWtRc1ZVRkJWU3hMUVVGTEwybEVMRWxCUVVsQkxFVkJRVVV2UWl4RlFVRkZMRU5CUVVOQkxFZEJRVWNzU1VGQlNUaENMRVZCUVVVd2FVUXNWMEZCVjNoclJDeEZRVUZGWjBNc1QwRkJUMmhETEZGQlFVY3NSVUZCVHpoQ0xFVkJRVVUwYVVRc2EwSkJRV3RDTEVsQlFVa3hhMFFzUjBGQlJ5eEZRVUZGTEVWQlFVVTRRaXhGUVVGRmNXSXNUVUZCVFhCaUxFVkJRVVZ4V1N4TFFVRkxOSEJETEZGQlFWRmxMRFpDUVVFMlFtcHFSQ3hGUVVGRk4wSXNSMEZCUnpaQ0xFVkJRVVZyYWtRc01FSkJRVEJDTEVkQlFVYzFjVU1zUzBGQlN6UndReXhSUVVGUlN5eHJRMEZCYTBOMmFVUXNSVUZCUlcxcVJDeGxRVUZsTDJsRUxFZEJRVTFCTEVWQlFVVXNTVUZCU1Vnc1JVRkJSU3hGUVVGRlFTeEZRVUZGUnl4RlFVRkZSQ3hQUVVGUFJpeExRVUZKTDBJc1JVRkJSV3RETEVWQlFVVklMRWxCUVV0RUxFVkJRVVZ2YWtRc1VVRkJVV3hzUkN4RlFVRkZiMkVzUzBGQlN6UndReXhSUVVGUlV5eFZRVUZWTTJsRUxFVkJRVVU1UWl4SFFVRkhPRUlzUlVGQlJYRmlMRTFCUVUxdVpDeEhRVUZIT0VJc1JVRkJSWEZpTEUxQlFVMXVaQ3hKUVVGSmIyRXNTMEZCU3pSd1F5eFJRVUZSYlVJc2RVSkJRWFZDTDNGRExFdEJRVXMwY0VNc1VVRkJVVzlDTEN0Q1FVRXJRblJxUkN4SFFVRkhRU3hGUVVGRmRXcEVMR2xDUVVGcFFuSnNSQ3hIUVVOdVpqaENMRVZCUVVWMWFrUXNhVUpCUVdsQ2NteEVMRWxCUVVsdllTeExRVUZMTkhCRExGRkJRVkZ0UWl4elFrRkJjMElzUjBGQlIyaHFSQ3hIUVVGSFFTeEZRVUZGUml4UFFVRlBMRWxCUVVsR0xFVkJRVVVzUlVGQlJVRXNSVUZCUlVrc1JVRkJSVVlzVDBGQlQwWXNTVUZCU1hGWkxFdEJRVXMwY0VNc1VVRkJVWE5DTEdsQ1FVRnBRbmhxUkN4RlFVRkZTeXhGUVVGRlNpeExRVUZMY1Zrc1MwRkJTelJ3UXl4UlFVRlJiVUlzY1VKQlFYRkNlR2hFTEV0QlFVdGhMRTlCUVU5dVJTeFBRVUZQSzFjc1QwRkJUeTlYTEU5QlFVOHJWeXhQUVVGUExFbEJRVWtzUjBGQlIyZEVMRXRCUVVzMGNFTXNVVUZCVVhWQ0xGTkJRVk1zVTBGQlUzcHFSQ3hIUVVGSExFOUJRVTl6V1N4TFFVRkxOSEJETEZGQlFWRkpMRzlDUVVGdlFuUnBSQ3hoUVVGaFdTeE5RVUZOUVN4TlFVRk5ORWdzVVVGQlVYaEpMRWxCUVVseldTeExRVUZMTkhCRExGRkJRVkYzUWl4dFFrRkJiVUlzVTBGQlV6RnFSQ3hIUVVGSExGRkJRVThzVDBGQlQwRXNSMEZCUnl4cFFrRkJhVUpCTEVkQlFVbHpXU3hMUVVGTE5IQkRMRkZCUVZGMVFpeFRRVUZUZW1wRUxFbEJRVTF6V1N4TFFVRkxOSEJETEZGQlFWRk5MSE5DUVVGelFuaHBSQ3hoUVVGaGFYTkRMR0ZCUTNKbE0zcENMRXRCUVVzMGNFTXNVVUZCVVdVc05rSkJRVFpDTEZOQlFWTnFha1FzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJUaENMRVZCUVVWeFlpeE5RVUZOYkdJc1QwRkJUMmhETEVkQlFVY3NSVUZCUlN4SFFVRkhSQ3hKUVVGSlF5eEZRVUZGUkN4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZjV0lzVFVGQlRXeGtMRWRCUVVkdFlTeExRVUZMTkhCRExGRkJRVkYzUWl4dFFrRkJiVUo0YkVRc1NVRkJjVVVzVDBGQmFFVTRRaXhGUVVGRmIycEVMRTlCUVU4NWNVTXNTMEZCU3pSd1F5eFJRVUZSV1N4blFrRkJaMEk1YVVRc1JVRkJSVGRDTEZGQlFVYzJRaXhGUVVGRmRXcEVMR2xDUVVGcFFuSnNSQ3hKUVVGVkxFVkJRVVVyUWl4SFFVRkhSQ3hGUVVGRmIycEVMRTlCUVU4M2FFUXNTMEZCUzBNc1NVRkJTWFpDTEVWQlFVVnhXU3hMUVVGTE5IQkRMRkZCUVZGWkxHZENRVUZuUWpscFJDeEZRVUZGTjBJc1JVRkJSU3hKUVVGSk5rSXNSVUZCUlhWcVJDeHBRa0ZCYVVJc1RVRkJUWFpxUkN4RlFVRkZiMnBFTEU5QlFVOHpaMElzVDBGQlQydG9RaXhYUVVGWGNuSkRMRXRCUVVzMGNFTXNVVUZCVVc5Q0xDdENRVUVyUWl4VFFVRlRkR3BFTEVkQlFVY3NTVUZCU1VNc1JVRkJSWEZaTEV0QlFVczBjRU1zVVVGQlVWTXNWVUZCVlROcFJDeEZRVUZGUVN4RlFVRkZiMnBFTEZGQlFWRndha1FzUlVGQlJYRmlMRTFCUVUxd1lpeExRVUZMUkN4RlFVRkZkV3BFTEdsQ1FVRnBRblpxUkN4RlFVRkZjV0lzVFVGQlRYQmlMRWRCUVVjc1MwRkRkbVJ4V1N4TFFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaExGTkJRVk0xYWtRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTEVkQlFVZHBReXhGUVVGRkxFVkJRVVZCTEVWQlFVVktMRVZCUVVWSExFOUJRVTlETEVsQlFVbHFReXhGUVVGRmFVTXNSMEZCUjBnc1JVRkJSV3BETEV0QlFVdG5ReXhGUVVGRlNTeEhRVUZIYkVNc1JVRkJSVGhDTEVWQlFVVkpMRWxCUVVrc1QwRkJUMnBETEVkQlFVZHRZU3hMUVVGTE5IQkRMRkZCUVZFeVFpeHJRa0ZCYTBJc1UwRkJVemRxUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTGJrTXNSVUZCUlN4RFFVRkRMRWxCUVVsM1JDeEZRVUZGZUVRc1JVRkJSVzFETEVkQlFVZHZUaXhGUVVGRmRGQXNSVUZCUlVnc1MwRkJTMmRETEVWQlFVVXdRaXhIUVVGSExFZEJRVWNzVFVGQlRTdE1MRVZCUVVVc1EwRkJReXhKUVVGSkxFbEJRVWwzUlN4TFFVRkxkbEVzUlVGQlJUUXZReXhWUVVGVkxFZEJRVWMxTDBNc1JVRkJSVFF2UXl4VlFVRlZOV2hFTEdWQlFXVjFVeXhIUVVGSExFMUJRVTFvVXl4RlFVRkZaMU1zUjBGQlIzWlJMRVZCUVVVNEwwTXNWMEZCVnprdlF5eEZRVUZGS3k5RExGZEJRVmR1Y0VNc1MwRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXNHlReXhGUVVGRkwwd3NSVUZCUlRndlF5eFhRVUZYY0doRUxFZEJRVWR6UWl4RlFVRkZPQzlETEZkQlFWZHdhRVFzUlVGQlJYRk9MRWRCUVVkQkxFdEJRMnhZTmtzc1MwRkJTelJ3UXl4UlFVRlJORUlzTUVKQlFUQkNMRk5CUVZNNWFrUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVVjc1NVRkJTU3hKUVVGSmFVTXNTMEZCUzJ4RExFVkJRVVVzUTBGQlF5eEpRVUZKYlVNc1JVRkJSVzVETEVWQlFVVnJReXhIUVVGSGMwSXNSVUZCUlhKQ0xFVkJRVVZ6YUVRc1ZVRkJWU3hKUVVGSmRHaEVMRVZCUVVWM2FFUXNaVUZCWlN4TlFVRk5NeXRETEUxQlFVMHNjVVpCUVhGR0xFbEJRVWwxU3l4RlFVRkZkRkFzUlVGQlJVZ3NTMEZCUzJkRExFVkJRVVV3UWl4SFFVRkhMRWRCUVVjc1RVRkJUU3RNTEVWQlFVVXNSMEZCUnk5TUxFVkJRVVYxWjBRc1owSkJRV2RDTEV0QlFVYzFhRVFzUlVGQlJYbG9SQ3g1UWtGQmFVY3NUVUZCVFRVclF5eE5RVUZOTEdsSlFVRndSamRETEVWQlFVVjNhRVFzWlVGQlpUZHFSQ3hMUVVGTGFVTXNSVUZCUlhsQ0xFVkJRVVV5TDBNc1YwRkJWelY2UXl4RlFVRkZjRTRzUlVGQlJYbG9SQ3dyUWtGRE5WVjZhRVFzUlVGQlJYZG9SQ3hsUVVGbE4ycEVMRXRCUVV0cFF5eEZRVUZGZVVJc1JVRkJSVEl2UXl4WFFVRlhOWHBETEV0QlFVczJTeXhMUVVGTE5IQkRMRkZCUVZFMlFpeHZRa0ZCYjBJc1UwRkJVeTlxUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVY3NTVUZCU1VNc1JVRkJSVzVETEVWQlFVVXJRaXhGUVVGRmFYcERMR3RDUVVGclFpeEhRVUZITjNsRExFVkJRVVVzUTBGQlpTeEhRVUZrYmtNc1JVRkJSVzFETEVWQlFVVnphRVFzVjBGQlkzUm9SQ3hGUVVGRmRXaEVMR1ZCUVdVc1RVRkJUVEVyUXl4TlFVRk5MQ3RGUVVFclJTeEhRVUZIYUVZc1JVRkJSU3RxUkN4blFrRkJaMElzUTBGQlF5eEpRVUZKZG1kRUxFVkJRVVVzU1VGQlNYaEVMRVZCUVVWeGFrUXNTMEZCUzJ4b1JDeEZRVUZGZFdoRUxHVkJRV1UxYWtRc1MwRkJTMmxETEVWQlFVVjVRaXhGUVVGRmNrSXNSVUZCUlRCb1JDeHBRMEZCYVVOeVowUXNSVUZCUlhKQ0xFVkJRVVYxYUVRc1pVRkJaVFZxUkN4TFFVRkxhVU1zUjBGQlJ5OUNMRVZCUVVWMWFrUXNZVUZCWVhCb1JDeEZRVUZGTW1oRUxGVkJRVlV2YUVRc1JVRkJSVGxDTEVWQlFVVklMRXRCUVV0blF5eEZRVUZGT1VJc1NVRkJTU3RDTEVWQlFVVm5TeXhMUVVGTGRra3NSMEZCUjNSQ0xFVkJRVVZ3UXl4TFFVRkxaME1zUlVGQlJUbENMRVZCUVVVc1EwRkJRM2RFTEVsQlFVbDBRaXhGUVVGRmNFTXNTMEZCUzJkRExFVkJRVVU1UWl4RlFVRkZkMFFzVVVGQlVYcENMRVZCUVVWM2VrTXNZVUZETldSdU4wSXNTMEZCU3pSd1F5eFJRVUZST0VJc1UwRkJVeXhUUVVGVGFHdEVMRVZCUVVWRExFZEJRVWNzUjBGQlIwRXNSVUZCUlVRc1JVRkJSVzlxUkN4UFFVRlBMRU5CUVVOdWFrUXNSVUZCUlhGWkxFdEJRVXMwY0VNc1VVRkJVVk1zVlVGQlZUTnBSQ3hGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGRk9FSXNSVUZCUlhGaUxFMUJRVTF3WWl4SFFVRkhMRTlCUVU4dlFpeEpRVUZKYjJFc1MwRkJTelJ3UXl4UlFVRlJiVUlzY1VKQlFYRkNjbXBFTEVWQlFVVnhZaXhOUVVGTmNHSXNSMEZCUnl4SFFVRkhMMElzUlVGQlJTeEhRVUZIT0VJc1JVRkJSWFZxUkN4cFFrRkJhVUlzVDBGQlQzSnNSQ3hGUVVGRk9FSXNSVUZCUlhWcVJDeHBRa0ZCYVVKMGFrUXNUVUZCVDNGWkxFdEJRVXMwY0VNc1VVRkJVVzFDTEhGQ1FVRnhRbkpxUkN4RlFVRkZkV3BFTEdsQ1FVRnBRblJxUkN4SFFVRkhMRWRCUVVjdlFpeEhRVUZIYjJFc1MwRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENMRk5CUVZOcWEwUXNSVUZCUlVNc1IwRkJSeXhQUVVGUGNWa3NTMEZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMmhyUkN4RlFVRkZReXhKUVVGSmNWa3NTMEZCU3pSd1F5eFJRVUZSWjBNc09FSkJRVGhDTEZOQlFWTnNhMFFzUlVGQlJVTXNSMEZCWjBNc1QwRkJUeXhQUVVGd1EwUXNSVUZCUlhOWkxFdEJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTm9hMFFzUlVGQlJVTXNTVUZCYTBKRUxFZEJRVWRCTEVkQlF6ZGpjMWtzUzBGQlN6UndReXhSUVVGUmFVTXNaMEpCUVdkQ0xGTkJRVk51YTBRc1JVRkJSVU1zUjBGQlowTXNUMEZCVHl4UFFVRndRMFFzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5vYTBRc1JVRkJSVU1zU1VGQmEwSkVMRWxCUVVsQkxFZEJRVWR6V1N4TFFVRkxOSEJETEZGQlFWRnJReXc0UWtGQk9FSXNVMEZCVTNCclJDeEZRVUZGUXl4SFFVRkhMRWxCUVVrdlFpeEZRVUZGYjJFc1MwRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENhbXRFTEVWQlFVVkRMRWRCUVdsRkxFZEJRVGxFUkN4RlFVRkZhMnBFTERSQ1FVRTBRbXhxUkN4RlFVRkZhMnBFTERCQ1FVRXdRaXhMUVVGUmJHcEVMRVZCUVVWcmFrUXNNRUpCUVRCQ2FtcEVMRWRCUVVjc1EwRkJReXhKUVVGSkxFbEJRVWs1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVZFTEVWQlFVVnBReXhQUVVGUGFFTXNTVUZCU1VRc1JVRkJSVU1zU1VGQlNVUXNSVUZCUlVNc1IwRkJSelpDTEVWQlFVVnJha1FzTUVKQlFUQkNhbXBFTEVsQlFVY3NSVUZCUnl4UFFVRlBMMElzUjBGRGFsaHZZU3hMUVVGTE5IQkRMRkZCUVZGdFF5eDNRa0ZCZDBJc1UwRkJVM0pyUkN4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkZiMkVzUzBGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2FtdEVMRVZCUVVWRExFZEJRV2xGTEVkQlFUbEVSQ3hGUVVGRmEycEVMRFJDUVVFMFFteHFSQ3hGUVVGRmEycEVMREJDUVVFd1FpeExRVUZSYkdwRUxFVkJRVVZyYWtRc01FSkJRVEJDYW1wRUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVkVMRVZCUVVWcFF5eFBRVUZQYUVNc1NVRkJTVVFzUlVGQlJVTXNTMEZCUzBRc1JVRkJSVU1zUjBGQlJ6WkNMRVZCUVVWcmFrUXNNRUpCUVRCQ2FtcEVMRWxCUVVjc1JVRkJSeXhQUVVGUEwwSXNSMEZET1ZGdllTeExRVUZMTkhCRExGRkJRVkZ2UXl4WFFVRlhMRk5CUVZOMGEwUXNSMEZCUnl4UFFVRkhMRTFCUVUxQkxFZEJRVWNzYVVKQlFXdENRU3hGUVVGVFFTeEZRVUZMYzFrc1MwRkJTelJ3UXl4UlFVRlJUU3h6UWtGQmMwSjRhVVFzWVVGQllXbHpReXhYUVVGclFuQnhReXhMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQYTBJc1owSkJRV2RDTVhKRExFbEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4blEwRkJaME16Vml4TFFVRkxkVWNzVDBGQlQzQkpMRWxCUVZjc1QwRkJUWE5aTEV0QlFVczBjRU1zVVVGQlVYRkRMRlZCUVZVc1UwRkJVM1pyUkN4SFFVRkhMRTlCUVVjc1RVRkJUVUVzUjBGQlIwRXNZVUZCWVdselF5eFhRVUZyUW1welF5eEZRVUZMTEdsQ1FVRnJRa0VzUlVGQlV6WkNMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTkzUWl4NVFrRkJlVUpvYzBNc1NVRkJSelpDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEdkRFFVRm5Rek5XTEV0QlFVdDFSeXhQUVVGUGNFa3NTVUZCVnl4UFFVTXpaWE5aTEV0QlFVczBjRU1zVVVGQlVYTkRMR1ZCUVdVc1UwRkJVM2hyUkN4SFFVRXdReXhQUVVGMlEzTlpMRXRCUVVzMGNFTXNVVUZCVVhWRExIVkNRVUYxUW5wclJDeEhRVUZWUVN4RlFVRkZSeXhSUVVGUkxHbENRVUZyUWtnc1JVRkJSU3hIUVVGSE5rSXNTMEZCUzNkYUxFMUJRVTEwVGl4SlFVRkpMMDRzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVc5RExGbEJRVmwwYTBRc1IwRkJSM05aTEV0QlFVczBjRU1zVVVGQlVYZERMR05CUVdNc1UwRkJVekZyUkN4SFFVRXdReXhQUVVGMlEzTlpMRXRCUVVzMGNFTXNVVUZCVVhWRExIVkNRVUYxUW5wclJDeEpRVUZWUVN4RlFVRkZSeXhSUVVGUlNDeEZRVUZGTEdGQlFXRnBjME1zVjBGQlYycHpReXhGUVVGRk5rSXNTMEZCUzNkYUxFMUJRVTEwVGl4SlFVRkpMMDRzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVhGRExGbEJRemRVYW5ORExFdEJRVXMwY0VNc1VVRkJVWFZETEhWQ1FVRjFRaXhUUVVGVGVtdEVMRWRCUVVjc1IwRkJSelpDTEV0QlFVdGhMRTlCUVU4eFF5eEhRVUZITEVWQlFVVkJMRVZCUVVWSExFOUJRVThzUTBGQlF5eEpRVUZKUml4RlFVRkZORUlzUzBGQlMzVkhMRTlCUVU5d1NTeEZRVUZGTEVsQlFVazJRaXhMUVVGTGQxb3NUVUZCVFRkSUxGRkJRVkY0VkN4SFFVRkZMRk5CUVZOQkxFZEJRVWMyUWl4TFFVRkxkVWNzVDBGQlQzQkpMRWxCUVVsRExFZEJRVWMwUWl4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4MVJFRkJkVVF6Vml4TFFVRkxkVWNzVDBGQlQzQkpMRWRCUVVjc1lVRkJZVU1zVVVGQlQzRlpMRXRCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWl4VFFVRlRNMnRFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZuUXl4UFFVRlBMRTlCUVhCRE9FSXNSVUZCUlhOWkxFdEJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTm9hMFFzUlVGQlJVTXNTVUZCYTBJdlFpeEZRVUZGT0VJc1IwRkJSM05aTEV0QlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFpeFRRVUZUTld0RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGMVF5eFBRVUZQTEU5QlFUTkRPRUlzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVdsRExHZENRVUZuUW01clJDeEZRVUZGUXl4SlFVRnJRaTlDTEVWQlFVVTRRaXhIUVVOeVpITlpMRXRCUVVzMGNFTXNVVUZCVVRKRExHbERRVUZwUXl4VFFVRlROMnRFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZ4UkN4UFFVRlBMRTlCUVhwRU9FSXNSVUZCUlhOWkxFdEJRVXMwY0VNc1VVRkJVV2RETERoQ1FVRTRRbXhyUkN4RlFVRkZReXhKUVVGclFpOUNMRVZCUVVVNFFpeEhRVUZIYzFrc1MwRkJTelJ3UXl4UlFVRlJORU1zWlVGQlpYaHpReXhMUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKeWMwTXNTMEZCU3pSd1F5eFJRVUZSTmtNc1dVRkJXU3hUUVVGVEwydEVMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGcFF5eEhRVUU1UWpaQ0xFVkJRVVZuYWtRc1dVRkJXV2hxUkN4RlFVRkZaMnBFTEZWQlFWVXNTVUZCVHk5cFJDeExRVUZMUkN4RlFVRkZaMnBFTEZWQlFWVXNUMEZCVDJocVJDeEZRVUZGWjJwRUxGVkJRVlV2YVVRc1IwRkJSeXhKUVVGSlJ5eEZRVUZGYTFrc1MwRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUyaHJSQ3hGUVVGRlF5eEhRVUZITEVsQlFVbEhMRVZCUVVVc1EwRkJReXhIUVVGSGJFTXNSVUZCUlN4UFFVRlBhME1zUlVGQlJTeEhRVUZIYTFrc1MwRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUyaHNSQ3hGUVVGRlF5eEZRVUZGUnl4SFFVRkhMRTlCUVU5S0xFVkJRVVZuYWtRc1ZVRkJWUzlwUkN4SFFVRkhMRWxCUVVseFdTeExRVUZMY1c1RExFbEJRVWwyTDBNc1JVRkJSV3BETEVsQlF5OWhiV0VzUzBGQlN6UndReXhSUVVGUk9FTXNVMEZCVXl4VFFVRlRhR3hFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUUwU3l4UFFVRjZTekpFTEV0QlFVdG5WaXhSUVVGUmJVSXNhVUpCUVdsQ2FGa3NSVUZCUlhOWkxFdEJRVXMwY0VNc1UwRkJVMnBwUkN4RlFVRkZSQ3hGUVVGRmIycEVMRTlCUVU5d2FrUXNSVUZCUlhGaUxFMUJRVTB2UXl4TFFVRkxOSEJETEZGQlFWRlRMRlZCUVZVemFVUXNSVUZCUlVNc1NVRkJTUzlDTEVkQlFVZHZZU3hMUVVGTE5IQkRMRkZCUVZGdlFpd3JRa0ZCSzBKMGFrUXNSMEZCUjBFc1JVRkJSWFZxUkN4cFFrRkJhVUowYWtRc1IwRkJSeTlDTEVkQlFWVTRRaXhIUVVGSGMxa3NTMEZCU3pSd1F5eFJRVUZSSzBNc2EwSkJRV3RDTEZOQlFWTnFiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVDBGQlQyOWhMRXRCUVVzMGNFTXNVVUZCVVdkRUxIbENRVUY1UW14c1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJTeEpRVUZKYjJFc1MwRkJTelJ3UXl4UlFVRlJhVVFzYjBKQlFXOUNMRk5CUVZOdWJFUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVDI5aExFdEJRVXMwY0VNc1VVRkJVV2RFTEhsQ1FVRjVRbXhzUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlN4SlFVTnVZVzloTEV0QlFVczBjRU1zVVVGQlVXdEVMSE5DUVVGelFpeFRRVUZUY0d4RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVTl2WVN4TFFVRkxOSEJETEZGQlFWRm5SQ3g1UWtGQmVVSnNiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVVVzU1VGQlMyOWhMRXRCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UWl4VFFVRlRjbXhFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEU5QlFVOXZZU3hMUVVGTE5IQkRMRkZCUVZGblJDeDVRa0ZCZVVKc2JFUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVXNTMEZCUzI5aExFdEJRVXMwY0VNc1VVRkJVVzlFTEc5Q1FVRnZRaXhUUVVGVGRHeEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU5dllTeExRVUZMTkhCRExGRkJRVkZuUkN4NVFrRkJlVUpzYkVRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVVc1MwRkJTMjloTEV0QlFVczBjRU1zVVVGQlVYRkVMRzFDUVVGdFFpeFRRVUZUZG14RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVTl2WVN4TFFVRkxOSEJETEZGQlFWRm5SQ3g1UWtGQmVVSnNiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVVzU1VGRGFtRnZZU3hMUVVGTE5IQkRMRkZCUVZGelJDeDNRa0ZCZDBJc1UwRkJVM2hzUkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4UFFVRlBiMkVzUzBGQlN6UndReXhSUVVGUlowUXNlVUpCUVhsQ2JHeEVMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZMRTFCUVUxdllTeExRVUZMTkhCRExGRkJRVkZuUkN4NVFrRkJlVUlzVTBGQlUyeHNSQ3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQmRVNHNUMEZCY0U0d1JDeExRVUZMWjFZc1VVRkJVVzFDTEdsQ1FVRnBRbWhaTEVWQlFVVnpXU3hMUVVGTE5IQkRMRk5CUVZOb2EwUXNTVUZCU1VNc1JVRkJSVzFoTEV0QlFVczBjRU1zVVVGQlVUaERMRk5CUVZOb2JFUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3JRaXhGUVVGRlJDeEZRVUZGYjJwRUxFOUJRVTl3YWtRc1JVRkJSWEZpTEUxQlFVMHZReXhMUVVGTE5IQkRMRkZCUVZGVExGVkJRVlV6YVVRc1JVRkJSVU1zU1VGQlNTeE5RVUZOY1Zrc1MwRkJTelJ3UXl4UlFVRlJiMElzSzBKQlFTdENkR3BFTEZWQlFWVkJMRVZCUVVWMWFrUXNhVUpCUVdsQ2RHcEVMRWxCUVZkRUxFZEJRMnBaYzFrc1MwRkJTelJ3UXl4UlFVRlJkVVFzYlVKQlFXMUNMRk5CUVZONmJFUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVRCSUxFOUJRWFpJTUVRc1MwRkJTMmRXTEZGQlFWRnRRaXhwUWtGQmFVSm9XU3hGUVVGRmMxa3NTMEZCU3pSd1F5eFRRVUZUYW1sRUxFVkJRVVZ4V1N4TFFVRkxOSEJETEZGQlFWRXJRaXhwUWtGQmFVSnFhMFFzUlVGQlJVTXNSMEZCUnl4TlFVRlJPVUlzUlVGQlJUaENMRVZCUVVWeFNDeFBRVUZQYmtvc1JVRkJSU3hGUVVGRlJDeEhRVUZISzBJc1JVRkJSV2RMTEV0QlFVc3ZUQ3hIUVVGVk9FSXNSMEZCUjNOWkxFdEJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXNVMEZCVXpGc1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCZFUwc1QwRkJjRTB3UkN4TFFVRkxaMVlzVVVGQlVXMUNMR2xDUVVGcFFtaFpMRVZCUVVWeldTeExRVUZMTkhCRExGVkJRVlZvYTBRc1JVRkJSVzloTEV0QlFVczBjRU1zVVVGQlVYTkNMR2xDUVVGcFFuaHFSQ3hGUVVGRk9VSXNTMEZCUzBFc1NVRkJTU3RDTEZGQlFVY3NTVUZCVXpsQ0xFbEJRVWsyUWl4RlFVRkZaMnBFTEZkQlFWYzVhMFFzUzBGQlN6aENMRVZCUVVWbmFrUXNXVUZCV1docVJDeEZRVUZGWjJwRUxGVkJRVlU1YTBRc1VVRkJSeXhIUVVGUmIyRXNTMEZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMmhzUkN4RlFVRkZPVUlzVDBGQlJTeEpRVUZuUW05aExFdEJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTm9iRVFzUlVGQlJVTXNSVUZCUlRsQ0xFbEJRM0pqYldFc1MwRkJTelJ3UXl4UlFVRlJjMElzYVVKQlFXbENMRk5CUVZONGFrUXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRlNDeEZRVUZGUlN4UFFVRlBReXhKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlVvc1JVRkJSVWNzUjBGQlIzTkNMRVZCUVVVMFZ5eExRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhR3RFTEVWQlFVVkxMRWRCUVVjc1RVRkJUWEZDTEVsQlFVbDRSQ3hGUVVGRmJVTXNSVUZCUld4RExFVkJRVVYxUkN4RlFVRkZORmNzUzBGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJoc1JDeEZRVUZGU3l4UFFVRkZMRWxCUVZNc1QwRkJUMjVETEVkQlFVZHZZU3hMUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYUd4RUxFVkJRVVU1UWl4RlFVRkZReXhIUVVGSFJDeEhRVUZITEVkQlFVZHZZU3hMUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJc1UwRkJVek5zUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJhVU1zUjBGQk9VSTJRaXhGUVVGRloycEVMRmxCUVZsb2FrUXNSVUZCUldkcVJDeFZRVUZWTEV0QlFWRm9ha1FzUlVGQlJXZHFSQ3hWUVVGVk9XdEVMRWRCUVVjc1EwRkJReXhKUVVGSmEwTXNSVUZCUld0WkxFdEJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTm9hMFFzUlVGQlJUbENMRWxCUVUxRExFZEJRVWRwUXl4TFFVRkZTaXhGUVVGRloycEVMRlZCUVZVNWEwUXNSMEZCUnl4SlFVRkpLMElzUlVGQlJVY3NTVUZCUnl4UFFVRlBTaXhGUVVGRloycEVMRlZCUVZVNWEwUXNTVUZETTFsdllTeExRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMElzVTBGQlV6VnNSQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJkVWdzVDBGQmNFaHZZU3hMUVVGTE5IQkRMRkZCUVZFeVJDeHRRa0ZCYlVJM2JFUXNSVUZCUlVNc1JVRkJSUzlDTEVsQlFVY3JRaXhGUVVGRlJDeEZRVUZGWjJwRUxGVkJRVlU1YTBRc1MwRkJUVzloTEV0QlFVczBjRU1zVVVGQlVXMUNMSFZDUVVGMVFuQnFSQ3hGUVVGRlJDeEZRVUZGWjJwRUxGVkJRVlU1YTBRc1IwRkJSeXhKUVVGWEswSXNSMEZCUjNGWkxFdEJRVXMwY0VNc1VVRkJVVEpFTEcxQ1FVRnRRaXhUUVVGVE4yeEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnBReXhIUVVFNVFqaENMRVZCUVVWbmFrUXNXVUZCV1docVJDeEZRVUZGWjJwRUxGVkJRVlVzUzBGQlVXaHFSQ3hGUVVGRloycEVMRlZCUVZVNWEwUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1NVRkJTVU1zUlVGQlJXMWhMRXRCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUW1wclJDeEZRVUZGT1VJc1IwRkJSMnRETEVWQlFVVXNSMEZCUjBNc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV2RETEU5QlFVOUZMRWxCUVVsRUxFVkJRVVZETEVkQlFVY3NTVUZCU1Vvc1JVRkJSVGxDTEVWQlFVVnJReXhKUVVGSlRDeEZRVUZGWjJwRUxGVkJRVlU1YTBRc1IwRkJSMnRETEVsQlF6RllhMWtzUzBGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0xGTkJRVk01YkVRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjeVJDeExRVUZMWjFZc1VVRkJVVzFDTEdsQ1FVRnBRbWhaTEVWQlFVVnpXU3hMUVVGTE5IQkRMRk5CUVZOc2FVUXNSVUZCUldkcVJDeFpRVUZaYUdwRUxFVkJRVVZuYWtRc1ZVRkJWU3hKUVVGSkxFbEJRVWszYTBRc1JVRkJSVVFzUlVGQlJVRXNSVUZCUlhkbExGVkJRVlY0WlN4RlFVRnRRaXhQUVVGcVFqaENMRVZCUVVWbmFrUXNWVUZCVlM5cFJDeEhRVUZITDBJc1JVRkJVMjloTEV0QlFVczBjRU1zVVVGQlVUaERMRk5CUVZOb2JFUXNSVUZCUlVNc1JVRkJSVGxDTEVsQlFVbHRZU3hMUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VJc1UwRkJVeTlzUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJSekJFTEV0QlFVdG5WaXhSUVVGUmJVSXNhVUpCUVdsQ2FGa3NSVUZCUlhOWkxFdEJRVXMwY0VNc1UwRkJVMnhwUkN4RlFVRkZaMnBFTEZsQlFWbG9ha1FzUlVGQlJXZHFSQ3hWUVVGVkxFbEJRVWtzU1VGQlNUVnBSQ3hGUVVGRmFrTXNSVUZCUlVFc1JVRkJSWFZsTEZWQlFWVjJaU3hGUVVGdFFpeFBRVUZxUWpaQ0xFVkJRVVZuYWtRc1ZVRkJWUzlwUkN4SFFVRkhPVUlzUlVGQlUyMWhMRXRCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV014YkVRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWclF5eEpRVU53V210WkxFdEJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRaXhUUVVGVGFHMUVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhNa1FzUzBGQlMyZFdMRkZCUVZGdFFpeHBRa0ZCYVVKb1dTeEZRVUZGYzFrc1MwRkJTelJ3UXl4VFFVRlRiR2xFTEVWQlFVVm5ha1FzV1VGQldXaHFSQ3hGUVVGRloycEVMRlZCUVZVc1NVRkJTVGxyUkN4RlFVRkZRU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKUXl4RlFVRkZMRWRCUVVkcFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWc1F5eEZRVUZGYVVNc1QwRkJUME1zU1VGQlNXcERMRVZCUVVWcFF5eEhRVUZIYkVNc1JVRkJSV3RETEVkQlFVZHpZeXhWUVVFeVFpeFBRVUZxUWpGakxFVkJRVVZuYWtRc1ZVRkJWUzlwUkN4SFFVRkhMMElzUlVGQlUyOWhMRXRCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5vYkVRc1JVRkJSVU1zUlVGQlJUbENMRWxCUXk5UGJXRXNTMEZCU3pSd1F5eFJRVUZSSzBRc01FSkJRVEJDTEZOQlFWTnFiVVFzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVWQlFVVnBReXhIUVVGSGExa3NTMEZCU3pSd1F5eFJRVUZSTWtRc2JVSkJRVzFDTjJ4RUxFVkJRVVUzUWl4RlFVRkZPRUlzUjBGQlJ5eEpRVUZKU1N4RlFVRkZUQ3hGUVVGRloycEVMRlZCUVZVdmFVUXNSMEZCYlVzc1QwRkJhRXRKTEVsQlFVbEJMRVZCUVVWTUxFVkJRVVZuYWtRc1ZVRkJWUzlwUkN4SFFVRkhMRWxCUVVrdlFpeEZRVUZGUVN4SFFVRkpMRWxCUVVsRExFVkJRVVUyUWl4RlFVRkZjMWtzUzBGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2FtdEVMRVZCUVVWRExFZEJRVWNzVFVGQlVVY3NSMEZCUjBNc1JVRkJSV2xJTEU5QlFVOXNTQ3hGUVVGRkxFVkJRVVZzUXl4SFFVRkhPRUlzUlVGQlJYTklMRTlCUVU5c1NDeEZRVUZGTEVWQlFVVnNReXhGUVVGRmQyVXNZVUZCWVhKakxFVkJRVVUwU2l4TFFVRkxMMHdzUjBGQlJ6aENMRVZCUVVWcFN5eExRVUZMTDB3c1JVRkJSWGRsTEZsQlFXMUNlR1VzUjBGQlIyOWhMRXRCUVVzMGNFTXNVVUZCVVdkRkxFMUJRVTBzVTBGQlUyeHRSQ3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTEVsQlFVbHBReXhGUVVGRkxFZEJRVWRETEVWQlFVVXNSVUZCUlVFc1JVRkJSVXdzUlVGQlJVY3NUMEZCVDBVc1NVRkJTVVFzUlVGQlJVZ3NSVUZCUldwRExFdEJRVXRuUXl4RlFVRkZTeXhMUVVGTGJrTXNSVUZCUlVFc1JVRkJSVVlzUzBGQlMyZERMRVZCUVVWTExFZEJRVWRzUXl4RlFVRkZOa0lzUlVGQlJVc3NTVUZCU1V3c1JVRkJSVXNzUjBGQlJ5eFBRVUZQUkN4SFFVTjRXbXRaTEV0QlFVczBjRU1zVVVGQlVYcHBSQ3hWUVVGVk1HMUVMR1ZCUVdVc1YwRkJWeXhIUVVGSGNHeEVMRXRCUVV0cGFVUXNWVUZCVlN4SlFVRkpMRWxCUVVsb2FrUXNTMEZCUzJVc1MwRkJTMmxwUkN4VlFVRlZMRU5CUVVNc1NVRkJTUzlwUkN4RlFVRkZZeXhMUVVGTGFXbEVMRlZCUVZWb2FrUXNSMEZCUnl4SFFVRkhXU3hOUVVGTk5FZ3NVVUZCVVhaSkxFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrclFpeEZRVUZGTDBJc1NVRkJTU3RDTEVWQlFVVXZRaXhIUVVGSGQyVXNaVUZCWlhwakxFZEJRVWRCTEVWQlFVVjVZeXhaUVVGWmNFVXNTMEZCU3pSd1F5eFJRVUZSZW1sRUxGVkJRVlZwWkN4UlFVRlJMRmRCUVdsRExFOUJRWFJDTTJJc1MwRkJTMjlzUkN4cFFrRkJkMEp3YkVRc1MwRkJTM05oTEU5QlFVOHZReXhMUVVGTE5IQkRMRkZCUVZGSExIRkNRVUZ4UWk5d1F5eExRVUZMTkhCRExGRkJRVkY2YVVRc1ZVRkJWVFJKTEZOQlFWTXNWMEZCYVVNc1QwRkJkRUowU0N4TFFVRkxiMnhFTEdsQ1FVRjNRbkJzUkN4TFFVRkxjMkVzVFVGQlRXaFVMR0ZCUXpGYWFWRXNTMEZCU3pSd1F5eFJRVUZSZW1sRUxGVkJRVlV5YlVRc1lVRkJZU3hUUVVGVGNHMUVMRWRCUVVjc1IwRkJSMlVzUzBGQlMzZHBSQ3hwUWtGQmFVSXNRMEZCUTNocFJDeExRVUZMYVdsRUxGbEJRVmxxYVVRc1MwRkJTMmxwUkN4VlFVRlZMRWxCUVVrc1NVRkJTUzlwUkN4RlFVRkZSQ3hGUVVGRmNXaEVMRmRCUVZjc1IwRkJSM0pvUkN4RlFVRkZlV2hFTEZsQlFWa3NSMEZCUjNwb1JDeEZRVUZGYVdsRUxHZENRVUZuUWl4UFFVRlBiR2hFTEV0QlFVdHBhVVFzVlVGQlZTOXBSQ3hMUVVGTFl5eExRVUZMYVdsRUxGVkJRVlV2YVVRc1IwRkJSelJDTEV0QlFVdDNXaXhOUVVGTmRFNHNTVUZCU1doT0xFdEJRVXQzYVVRc2FVSkJRV2xDZEdwRUxFbEJRVWtzU1VGQlJ5eFRRVUZUUVN4SFFVRkhMRTlCUVU4c1NVRkJTVVFzUlVGQlJYVm9SQ3hMUVVGTGRHaEVMRTlCUVUxakxFdEJRVXRwYVVRc1ZVRkJWUzlwUkN4UlFVRlJMRWRCUVVkRUxFVkJRVVZwYVVRc1owSkJRV2RDTEU5QlFVOXNhRVFzUzBGQlMybHBSQ3hWUVVGVkwybEVMRWxCUVVsakxFdEJRVXQzYVVRc2FVSkJRV2xDZEdwRUxFdEJRVXRqTEV0QlFVdHBhVVFzVlVGQlZTOXBSQ3hIUVVGSExFbEJRVWxFTEVWQlFVVjFhRVFzUzBGQlMzaG5SQ3hMUVVGTGQybEVMR2xDUVVGcFFuUnFSQ3hMUVVGTFl5eExRVUZMYVdsRUxGVkJRVlV2YVVRc1IwRkJSeXhQUVVGUFl5eExRVUZMZDJsRUxHbENRVUZwUW5ScVJDeExRVU0xWlhGWkxFdEJRVXMwY0VNc1VVRkJVWHBwUkN4VlFVRlZORzFFTEdGQlFXRXNVMEZCVTNKdFJDeEZRVUZGUXl4SFFVRkhZeXhMUVVGTGFXbEVMRmxCUVZscWFVUXNTMEZCUzJscFJDeFZRVUZWTEVsQlFVa3hjVU1zUzBGQlN6UndReXhSUVVGUmIwSXNLMEpCUVN0Q2RtbEVMRTFCUVUwc1NVRkJTVGRETEVWQlFVVTRRaXhGUVVGRmNXaEVMRmRCUVRSU0xFOUJRV3BTY21oRUxFVkJRVVY1YUVRc1dVRkJXWGhvUkN4RlFVRkZRU3hIUVVGSExFZEJRVWRFTEVWQlFVVnBhVVFzYVVKQlFXbENiR2hFTEV0QlFVdHBhVVFzVlVGQlZUbHJSQ3hIUVVGSEswSXNSVUZCUldNc1MwRkJTM2RwUkN4cFFrRkJhVUp5YkVRc1IwRkJSekpFTEV0QlFVdDNXaXhOUVVGTmRFNHNTVUZCU1RsT0xFZEJRVVVzVTBGQlUwUXNSMEZCUnl4UFFVRlBRU3hGUVVGRk1HTXNZMEZCWVROaUxFdEJRVXQzYVVRc2FVSkJRV2xDY214RUxFZEJRVWNyUWl4SFFVRkhSQ3hGUVVGRmFXbEVMR2xDUVVGcFFteG9SQ3hMUVVGTGFXbEVMRlZCUVZVNWEwUXNSMEZCUnl0Q0xFVkJRVVZqTEV0QlFVdDNhVVFzYVVKQlFXbENjbXhFTEVkQlFVY3JRaXhGUVVGRlFTeEZRVUZGZVdNc1ZVRkJWWHBqTEVkQlFVZGpMRXRCUVV0M2FVUXNhVUpCUVdsQ2NteEVMRWRCUVVjclFpeEZRVUZUWXl4TlFVTnVZblZZTEV0QlFVczBjRU1zVVVGQlVXOUZMRmRCUVZjc1UwRkJVM1J0UkN4RlFVRkZReXhIUVVGSExFdEJRVXRFTEdGQlFXRkRMRVZCUVVVMFRDeGhRVUZoTEUxQlFVMHpTU3hOUVVGTkxHdERRVUZyUXl4SlFVRkphRVlzUlVGQlJUaENMRVZCUVVVd1l5eFZRVUZWZW1Nc1JVRkJSVUVzUlVGQlJYbGpMRlZCUVZVc1NVRkJTWFpsTEVWQlFVVXNSMEZCUjJsRExFVkJRVVVzUlVGQlJVTXNSVUZCUlc1RExFVkJRVVZwUXl4UFFVRlBSaXhGUVVGRlJTeFBRVUZQYWtNc1JVRkJSV2xETEU5QlFVOUdMRVZCUVVWRkxFOUJRVFpFTEVsQlFYUkVTQ3hGUVVGRmVXbEVMSEZDUVVGeFFuUnJSQ3hGUVVGRkxFZEJRVWMyUWl4RlFVRkZlV2xFTEcxQ1FVRnRRbkpwUkN4RlFVRkZMRWRCUVZGQkxFVkJRVVZETEVWQlFVVkVMRWxCUVVscldTeExRVUZMTkhCRExGRkJRVkZ4UlN4alFVRmpjbTlFTEVWQlFVVnJReXhIUVVGSFNDeEZRVUZGUnl4TlFVRk5ha01zUlVGQlJXbERMRWRCUVVkSUxFVkJRVVZITEVsQlFVa3NUMEZCVHl4SlFVRkpTaXhGUVVGRk5rd3NXVUZCV1RGT0xFbEJRVWx0WVN4TFFVRkxOSEJETEZGQlFWRndkRU1zVDBGQlR5eFRRVUZUT1ZVc1JVRkJSVU1zUjBGQlJ5eFBRVUZQUkN4SFFVRkhReXhOUVVGTlJDeEpRVUZKUXl4SlFVRkpSQ3hoUVVGaFF5eEZRVUZGTkV3c1lVRkJZWGxOTEV0QlFVczBjRU1zVVVGQlVYRkZMR05CUVdOMmJVUXNSVUZCUlRCakxGVkJRVlY2WXl4RlFVRkZlV01zV1VGRE1XUndSU3hMUVVGTE5IQkRMRkZCUVZGelJTeHJRa0ZCYTBJc1UwRkJVM2h0UkN4RlFVRkZReXhIUVVGSFJDeEZRVUZGUVN4SFFVRkhMRWRCUVVkRExFVkJRVVZCTEVkQlFVY3NSMEZCUnl4SlFVRlRPVUlzUlVGQlRFUXNSVUZCUlN4SFFVRkxMRWxCUVVsRExFdEJRVXMyUWl4RlFVRkZPVUlzUlVGQlJVTXNSMEZCUnl4RlFVRkZMRWxCUVVsQkxFdEJRVXM0UWl4RlFVRkZMMElzUlVGQlJVTXNSMEZCUnl4RlFVRkZMRWxCUVVsQkxFdEJRVXRFTEVWQlFVVXNTVUZCU1c5aExFdEJRVXMwY0VNc1VVRkJVWEZGTEdOQlFXTjJiVVFzUlVGQlJUZENMRWRCUVVjNFFpeEZRVUZGT1VJc1NVRkJTU3hQUVVGTkxFVkJRVWNzVDBGQlRTeEhRVU5vVEcxaExFdEJRVXMwY0VNc1VVRkJVWEZGTEdOQlFXTXNVMEZCVTNadFJDeEZRVUZGUXl4SFFVRkhMRWRCUVVkRUxFZEJRVWRETEVWQlFVVXNUMEZCVFN4RlFVRkhMRWxCUVVrMFFpeExRVUZMT0Vjc1UwRkJVek5KTEV0QlFVczJRaXhMUVVGTE9FY3NVMEZCVXpGSkxFZEJRVWNzVTBGQlRTeHBRa0ZCYTBKRUxFZEJRVWMyYUVNc1RVRkJUVGRvUXl4SlFVRkpMR2xDUVVGclFrTXNSMEZCUnpSb1F5eE5RVUZOTldoRExFdEJRVWRETEU5QlFVOUdMRWxCUVVsRkxFOUJRVTlFTEVkQlFVMHNSMEZCUjBRc1JVRkJSVFpNTEdGQlFXRTFUQ3hGUVVGRk5Fd3NXVUZCV1N4UFFVRk5MRVZCUVVjc1IwRkJSM2xOTEV0QlFVczBjRU1zVVVGQlVVMHNjMEpCUVhOQ2VHbEVMRVZCUVVVMlRDeGpRVUZqYjJkRExGZEJRVmNzUTBGQlF5eEhRVUZIYW5ORExFVkJRVVZITEZGQlFWRkdMRVZCUVVWRkxFOUJRVThzVDBGQlRTeEZRVUZITEVsQlFVa3NTVUZCU1dwRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVZITEU5QlFVOXFReXhKUVVGSkxFZEJRVWM0UWl4RlFVRkZPVUlzU1VGQlNTdENMRVZCUVVVdlFpeEhRVUZITEU5QlFVMHNSVUZCUnl4UFFVRk5MRVZCUVVjc1IwRkJSemhDTEVWQlFVVTJUQ3hqUVVGamFrd3NUVUZCVFN4RFFVRkRMRWxCUVVsNlF5eFBRVUZGTEVWQlFVOXBReXhQUVVGRkxFVkJRVTlETEVWQlFVVnJRaXhMUVVGTFF5eEpRVUZKZUVJc1JVRkJSVWNzVDBGQlQwWXNSVUZCUlVVc1VVRkJVU3hKUVVGSmFrTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmJVTXNSVUZCUlc1RExFbEJRVWtzUTBGQlF5eEpRVUZKZDBRc1JVRkJSVEZDTEVWQlFVVTVRaXhIUVVGSGRWQXNSVUZCUlhoT0xFVkJRVVV2UWl4SFFVTjZVaXhIUVVRMFVuZEVMRWRCUTI1bVFTeEZRVUZGYlVzc1lVRkJZWFJPTEZOQlFWTnpSQ3hMUVVGTFoxWXNVVUZCVVZNc1dVRkJUeXhKUVVGVGJsb3NSMEZCUnpCRUxFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGNGb3NTVUZCU1RoQ0xFVkJRVVZITEU5QlFVOHNSMEZCUjJoRExFVkJRVVYxUkN4RlFVRkZRU3hQUVVGRkxFZEJRVkVyVEN4SFFVRkhRU3hGUVVGRk5VSXNZVUZCWVhST0xGTkJRVk56UkN4TFFVRkxaMVlzVVVGQlVWTXNXVUZCVHl4SlFVRlRiRmdzUjBGQlIzbENMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBjRm9zU1VGQlNTdENMRVZCUVVWRkxFOUJRVThzUjBGQlIwTXNSVUZCUlhGT0xFVkJRVVZCTEU5QlFVVXNTVUZCV1RaTExFdEJRVXMwY0VNc1VVRkJVWEZGTEdOQlFXTTNhMFFzUlVGQlJTdE1MRWRCUVVjc1QwRkJUU3hGUVVGSExFOUJRVTkwVUN4SlFVRkhhVU1zU1VGQlIycERMRVZCUVVWQkxFZEJRVWNzUjBGQlIybERMRVZCUVVWQkxFZEJRVWNzUjBGQlIydFpMRXRCUVVzMGNFTXNVVUZCVVhORkxHdENRVUZyUW5KdlJDeEZRVUZGYVVNc1NVRkJUeXhIUVVGSFNpeEZRVUZGTmt3c1kwRkJZM1JPTEU5QlFVOHNUMEZCVHl0YUxFdEJRVXMwY0VNc1VVRkJVWE5GTEd0Q1FVRnJRbmh0UkN4RlFVRkZReXhIUVVGSExFMUJRVTFwUkN4TlFVRk5MQ3RDUVVGblEyOVdMRXRCUVVzMGNFTXNVVUZCVVhwcFJDeFZRVUZWWjI1RUxHRkJRV0VzVjBGQlZ5eFBRVUZQYm5WRExFdEJRVXMwY0VNc1VVRkJVWFZGTEdGQlFXRXhiRVFzVDBGRE1XZENkVmdzUzBGQlN6UndReXhSUVVGUmVtbEVMRlZCUVZVNFNpeE5RVUZOTEZkQlFWY3NUMEZCVHl0UExFdEJRVXMwY0VNc1VVRkJVWFZGTEdGQlFXRXhiRVFzVDBGQlQzVllMRXRCUVVzMGNFTXNVVUZCVVRNMFF5eE5RVUZOTEZOQlFWTjJTaXhIUVVGSExFOUJRVTl6V1N4TFFVRkxOSEJETEZGQlFWRjFSU3hoUVVGaGVtMUVMRWxCUVVseldTeExRVUZMTkhCRExGRkJRVkYxUlN4aFFVRmhMRk5CUVZONmJVUXNSMEZCUnl4UFFVRlBMRWxCUVVsQkxFVkJRVVUyVEN4WlFVRlplVTBzUzBGQlN6UndReXhSUVVGUmQwVXNUMEZCVHpGdFJDeEZRVUZGTUdNc1lVRkRlazl3UlN4TFFVRkxOSEJETEZGQlFWRjVSU3hUUVVGVExGTkJRVk16YlVRc1JVRkJSVU1zUjBGQlJ6UkNMRXRCUVV0blZpeFJRVUZSYlVJc2FVSkJRV2xDYUZrc1JVRkJSWE5aTEV0QlFVczBjRU1zVTBGQlUzSm5SQ3hMUVVGTFoxWXNVVUZCVVcxQ0xHbENRVUZwUWk5WUxFVkJRVVZ4V1N4TFFVRkxOSEJETEZOQlFWTnlaMFFzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4RlFVRkZOa3dzWVVGQllUVk1MRVZCUVVVMFRDeFpRVUZaTERaRVFVRTJSRGRNTEVWQlFVVnpXU3hMUVVGTE5IQkRMRkZCUVZFek5FTXNUVUZCVFhaS0xFZEJRVWNzU1VGQlNTeEpRVUZKT1VJc1JVRkJSU3RDTEVWQlFVVjVZeXhWUVVGVmRtVXNSVUZCUlRaQ0xFVkJRVVV3WXl4VlFVRlZkR01zUlVGQlJXeERMRVZCUVVWcFF5eFBRVUZQTEVWQlFVVkRMRVZCUVVWcVF5eEZRVUZGWjBNc1QwRkJUME1zU1VGQlNXeERMRVZCUVVWclF5eEhRVUZIYWtNc1JVRkJSV2xETEVkQlFVZElMRVZCUVVVcmFVUXNWVUZCVldocVJDeEZRVUZGWjJwRUxGVkJRVlV2YVVRc1JVRkJSWE5xUkN4cFFrRkJhVUoyYWtRc1JVRkJSWFZxUkN4clFrRkROMWhxY2tNc1MwRkJTelJ3UXl4UlFVRlJkMFVzVDBGQlR5eFRRVUZUTVcxRUxFZEJRVWNzUjBGQlIxa3NUVUZCVFRSSUxGRkJRVkY0U1N4SFFVRkhMRU5CUVVNc1NVRkJTU3hKUVVGSlF5eEZRVUZGVnl4TlFVRk5XaXhGUVVGRlJ5eFJRVUZSYWtNc1JVRkJSU3hGUVVGRlFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQycERMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVGxDTEVkQlFVY3NUVUZCVFVNc1NVRkJTVGhDTEVWQlFVVXZRaXhIUVVGSExHbENRVUZwUWtNc1JVRkJSVzFoTEV0QlFVczBjRU1zVVVGQlVYZEZMRTlCUVU4M2EwUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOXVXaXhKUVVGSlFTeEhRVUZITEU5QlFVODRRaXhGUVVGRkxFZEJRVWR4V1N4TFFVRkxOSEJETEZGQlFWRk5MSE5DUVVGelFuaHBSQ3hoUVVGaGFYTkRMRmRCUVZjc1QwRkJUeXhKUVVGSlFTeFhRVUZYYW5ORExFZEJRVkVzU1VGQlNUbENMRXRCUVZRclFpeEZRVUZGTEVkQlFWbEVMRVZCUVZNc1QwRkJVRGRDTEVWQlFVVTJRaXhGUVVGRk9VSXNUVUZCWVN0Q0xFVkJRVVV2UWl4SFFVRkhMR2xDUVVGcFFrTXNSVUZCUlcxaExFdEJRVXMwY0VNc1VVRkJVWGRGTEU5QlFVODNhMFFzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTl1V2l4SlFVRkpRU3hIUVVGSExFOUJRVTg0UWl4SFFVRkhjVmtzUzBGQlN6UndReXhSUVVGUk1FVXNiMEpCUVc5Q0xGTkJRVk0xYlVRc1JVRkJSVU1zUjBGQlIwRXNSVUZCUlRSdFJDeFZRVUZWTjIxRUxFZEJRVWR6V1N4TFFVRkxOSEJETEZGQlFWRTBSU3h4UWtGQmNVSXNSMEZEYW1aNGRVTXNTMEZCU3pSd1F5eFJRVUZSTmtVc01rSkJRVEpDTEVkQlFVZDZkVU1zUzBGQlN6QjFReXhQUVVGUExFZEJRVWN6Y0VRc1VVRkJVWE5wUkN4SlFVRkpjbTVETEV0QlFVdHhia01zU1VGQlNYUnBSQ3hSUVVGUk5tdEVMRkZCUVZFMWNFTXNTMEZCU3pSd1F5eFJRVUZSTjJ0RUxGRkJRVkZ6TVVNc1lVRkJZWEkyUWl4TFFVRkxjVFpDTEdGQlFXRjBNVU1zVVVGQlVXMDRReXhoUVVGaGJHaERMRXRCUVV0cmFFTXNZVUZCWVc0NFF5eFJRVUZSSzJwRUxHMUNRVUZ0UWpsdlF5eExRVUZMT0c5RExHMUNRVUZ0UWk5cVJDeFJRVUZSY1d0RUxIbENRVUY1UW5Cd1F5eExRVUZMYjNCRExIbENRVUY1UW5KclJDeFJRVUZSYjA4c1lVRkJZVFZLTEV0QlFVczBTaXhoUVVGaGNFOHNVVUZCVVhOUExGTkJRVk01U2l4TFFVRkxPRW9zVTBGQlUzUlBMRkZCUVZGclF5eFBRVUZQTEVOQlFVTXlWaXhQUVVGUGNsUXNTMEZCUzNSRExFOUJRVTh5Vml4UlFVRlJOMWdzVVVGQlVTdExMRTlCUVU5MlJ5eExRVUZMZFVjc1V5eHJSa014WjBJM1Z6bExMRVZCUVU5RUxGRkJRVEpMTEZOQlFWTXJReXhIUVVGSExFbEJRVWx5UWl4RlFVRkZMRWRCUVVjc1UwRkJVMG9zUlVGQlJWY3NSMEZCUnl4SFFVRkhVQ3hGUVVGRlR5eEhRVUZITEU5QlFVOVFMRVZCUVVWUExFZEJRVWRxUXl4UlFVRlJMRWxCUVVscFFpeEZRVUZGVXl4RlFVRkZUeXhIUVVGSExFTkJRVU42UWl4RlFVRkZlVUlzUlVGQlJYaENMRWRCUVVVc1JVRkJSMVFzVVVGQlVTeEpRVUZKTEU5QlFVOHJReXhGUVVGRlpDeEhRVUZIZEVJc1MwRkJTMDBzUlVGQlJXcENMRkZCUVZGcFFpeEZRVUZGUVN4RlFVRkZha0lzVVVGQlVYTkNMRWRCUVVkTUxFVkJRVVZTTEVkQlFVVXNSVUZCUjFFc1JVRkJSV3BDTEZGQlFWRXNUMEZCVDNOQ0xFVkJRVVZXTEVWQlFVVnRReXhGUVVGRmVrSXNSVUZCUlZRc1JVRkJSV0VzUlVGQlJVb3NSVUZCUlZJc1JVRkJSU3hUUVVGVGFVTXNSVUZCUlhKQ0xFVkJRVVZQTEVkQlFVZFlMRVZCUVVWTUxFVkJRVVU0UWl4RlFVRkZja0lzU1VGQlNWSXNUMEZCVDBNc1pVRkJaVFJDTEVWQlFVVnlRaXhGUVVGRkxFTkJRVU5PTEZsQlFWY3NSVUZCUjBNc1NVRkJTVmtzUzBGQlMxZ3NSVUZCUlVFc1JVRkJSU3hUUVVGVGVVSXNSMEZCUnl4dlFrRkJiMEo0UWl4UlFVRlJRU3hQUVVGUFF5eGhRVUZoVGl4UFFVRlBReXhsUVVGbE5FSXNSVUZCUlhoQ0xFOUJRVTlETEZsQlFWa3NRMEZCUTBNc1RVRkJUU3hYUVVGWFVDeFBRVUZQUXl4bFFVRmxORUlzUlVGQlJTeGhRVUZoTEVOQlFVTjBRaXhQUVVGTkxFdEJRVTFJTEVWQlFVVkpMRVZCUVVVc1UwRkJVM0ZDTEVWQlFVVnlRaXhIUVVGSExFZEJRVWNzUlVGQlJVRXNTVUZCU1hGQ0xFVkJRVVY2UWl4RlFVRkZlVUlzU1VGQlNTeEZRVUZGY2tJc1JVRkJSU3hQUVVGUGNVSXNSVUZCUlN4SFFVRkhMRVZCUVVWeVFpeEhRVUZITEdsQ1FVRnBRbkZDTEVkQlFVZEJMRWRCUVVkQkxFVkJRVVZ1UWl4WFFVRlhMRTlCUVU5dFFpeEZRVUZGTEVsQlFVbGtMRVZCUVVWbUxFOUJRVTlaTEU5QlFVOHNUVUZCVFN4SFFVRkhVaXhGUVVGRlFTeEZRVUZGVnl4SFFVRkhaaXhQUVVGUFF5eGxRVUZsWXl4RlFVRkZMRlZCUVZVc1EwRkJRMklzV1VGQlZ5eEZRVUZIU3l4TlFVRk5jMElzU1VGQlNTeEZRVUZGY2tJc1IwRkJSeXhwUWtGQmFVSnhRaXhGUVVGRkxFbEJRVWtzU1VGQlNUbENMRXRCUVVzNFFpeEZRVUZGZWtJc1JVRkJSVklzUlVGQlJXMUNMRVZCUVVWb1FpeEZRVUZGTEZOQlFWTlRMRWRCUVVjc1QwRkJUM0ZDTEVWQlFVVnlRaXhKUVVGSlRTeExRVUZMTEV0QlFVdG1MRWxCUVVrc1QwRkJUMmRDTEVkQlFVZFlMRVZCUVVWWExFVkJRVVVzVTBGQlUyTXNSMEZCUnl4SlFVRkpja0lzUlVGQlJYRkNMRWRCUVVkQkxFVkJRVVZ1UWl4WFFVRlhMRmRCUVZjc1QwRkJUMjFDTEVWQlFVVTJiVVFzVTBGQlV5eFhRVUZYTEU5QlFVODNiVVFzUjBGQlJ5eFBRVUZQZWtJc1JVRkJSVklzUlVGQlJWa3NSVUZCUlN4SlFVRkpRU3hIUVVGSFFTeEhRVUZIU2l4RlFVRkZUQ3hGUVVGRkxGTkJRVk00UWl4RlFVRkZja0lzUjBGQlJ5eFBRVUZQVWl4UFFVRlBhMElzVlVGQlZVTXNaVUZCWlRGQ0xFdEJRVXR2UXl4RlFVRkZja0lzU1VGQlNVb3NSVUZCUldkQ0xFVkJRVVVzUjBGQlIyaENMRVZCUVVWQkxFVkJRVVZwUWl4RlFVRkZMRWxCUVdvMVFpeERRVUZ6TlVJc1EwRkJReXhUUVVGVFVTeEZRVUZGY2tJc1JVRkJSVW9zUjBGQlJ5eGhRVUZoU2l4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxSTEVWQlFVVllMRVZCUVVVc1IwRkJSMGtzUlVGQlJXMXZSQ3hUUVVGVE5XNUVMRVZCUVVVMmJrUXNaMEpCUVdkQ0xGTkJRVk12YlVRc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1lVRkJZVW9zVDBGQlQwTXNaVUZCWlU4c1JVRkJSU3hoUVVGaExFTkJRVU5FTEU5QlFVMHNTVUZCUzBNc1JVRkJSVFJYTEUxQlFVMHNWMEZCVnl4SlFVRkpMRWxCUVVsMlZpeEZRVUZGTEVkQlFVZHlRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXlTeXhWUVVGVmRrb3NUMEZCVDNCQ0xFbEJRVWx4UWl4RlFVRkZja0lzUjBGQlJ6SkxMRlZCUVZVelN5eEhRVUZITkVjc1VVRkJVV2RSTEUxQlFVMW9VU3hSUVVGUloxRXNUVUZCVFd4TkxFMUJRVTBzUzBGQlMzSktMRWRCUVVkMVJpeFJRVUZSYVc1RExFbEJRVWx1YWtNc1RVRkJUU3hMUVVGTGNrb3NTMEZCU3l4VFFVRlRRU3hGUVVGRmNrSXNSVUZCUlVvc1IwRkJSeXhoUVVGaFNpeFBRVUZQUXl4bFFVRmxUeXhGUVVGRkxHRkJRV0VzUTBGQlEwUXNUMEZCVFN4SlFVRkxMRWxCUVVsUkxFVkJRVVZZTEVWQlFVVXNSMEZCUjB3c1JVRkJSVXNzUlVGQlJTeEhRVUZIYVVJc1JVRkJSV3BDTEVWQlFVVXNSMEZCUjJRc1JVRkJSV01zUlVGQlJTeEhRVUZIY1VJc1JVRkJSWEpDTEVWQlFVVXNSMEZCUjNsdlJDeEZRVUZGZW05RUxFVkJRVVVzU1VGQlNVa3NSVUZCUlhOdlJDeFBRVUZQTEZOQlFWTnFia1FzUlVGQlJYSkNMRWRCUVVjc1QwRkJUeXhKUVVGSldpeEZRVUZGYVVNc1JVRkJSWEpDTEVsQlFVa3NTVUZCU1Zvc1JVRkJSU3hYUVVGWExGTkJRVk5wUXl4RlFVRkZRU3hGUVVGRmNrSXNSMEZCUjJkRExFdEJRVXQxYlVRc1UwRkJVU3hGUVVGSGRtMUVMRXRCUVV0M2JVUXNhMEpCUVdsQ0xFVkJRVWQ0YlVRc1MwRkJTM2x0UkN4WFFVRlZMRVZCUVVkNmJVUXNTMEZCU3pCdFJDeFJRVUZQTEVWQlFVY3hiVVFzUzBGQlN6SnRSQ3hwUWtGQlowSXNSVUZCUnpOdFJDeExRVUZMTkcxRUxHMUNRVUZ0UWl4SFFVRkhOVzFFTEV0QlFVczJiVVFzYlVKQlFXMUNMRWRCUVVjM2JVUXNTMEZCU3podFJDeGxRVUZsTEVkQlFVYzViVVFzUzBGQlN5dHRSQ3hQUVVGUExFbEJRVWw0Y0VRc1JVRkJSWGx3UkN4WlFVRlphRzVFTEV0QlFVdHBia1FzYVVKQlFXbENOVzVFTEVWQlFVVlhMRXRCUVV0cmJrUXNUVUZCVFd4d1JDeEZRVUZGWjBNc1MwRkJTMjF1UkN4clFrRkJhMElzVDBGQlR6bHVSQ3hGUVVGRldDeFZRVUZWZVc5RUxHZENRVUZuUWl4WFFVRlhMRWxCUVVrNWJrUXNSVUZCUlZjc1MwRkJTMnR1UkN4TlFVRk5SU3hMUVVGTExFbEJRVWx3YmtRc1MwRkJTMmx1UkN4cFFrRkJhVUpKTEZGQlFWRkRMRmxCUVZrc1NVRkJTWFJ1UkN4TFFVRkxhVzVFTEdsQ1FVRnBRazBzVjBGQlYzWndSQ3hGUVVGRkxFTkJRVU5wY0VRc2FVSkJRV2xDYW01RUxFdEJRVXRwYmtRc2FVSkJRV2xDY25sRExFMUJRVTAxVlN4TFFVRkxhMjVFTEUxQlFVMTBlVU1zVVVGQlR5eEZRVUZIZFZnc1NVRkJTVGx6UWl4RlFVRkZiVzlFTEZWQlFWVjRia1FzUzBGQlMzbHVSQ3h0UWtGQmJVSnVjRVFzUzBGQlN6QkNMRTFCUVUwd2JrUXNVVUZCVVRGdVJDeExRVUZMTW01RUxHbENRVUZwUW5Kd1JDeExRVUZMTUVJc1RVRkJUVFJ1UkN4TlFVRk5OVzVFTEV0QlFVczJia1FzWlVGQlpYWndSQ3hMUVVGTE1FSXNUMEZCVDBFc1MwRkJTMnR1UkN4TlFVRk5XU3hWUVVGVk9XNUVMRXRCUVVzNGJrUXNWVUZCVlRsdVJDeExRVUZMYTI1RUxFMUJRVTFaTEZWQlFWVTVjRVFzUjBGQlIyZERMRXRCUVVzNGJrUXNWVUZCVlRkdlJDeEZRVUZGT0c5RUxIRkNRVUZ4UWk5d1JDeEpRVUZKY1VJc1JVRkJSVmdzVlVGQlZTdHZSQ3h0UWtGQmJVSXNVMEZCVTNCdlJDeEZRVUZGY2tJc1IwRkJSeXhIUVVGSFowTXNTMEZCUzJ0dVJDeE5RVUZOZEhsRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTeFpRVUZaZGxZc1JVRkJSWEpDTEVkQlFVZG5ReXhMUVVGTE1HMUVMRTlCUVU4eGJVUXNTMEZCUzJ0dVJDeE5RVUZOZEhsRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTeHZSVUZCYjBVc1IwRkJSeXhKUVVGSk5WY3NUMEZCVHl4RFFVRkRaME1zUzBGQlMyZHZSQ3huUWtGQlowSXpiMFFzUlVGQlJWY3NTMEZCUzJ0dVJDeE5RVUZOZEhsRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTdzBRa0ZCTkVKNlRpeExRVUZMUXl4VlFVRlZjRWdzUzBGQlMyZHZSQ3huUWtGQlowSXNTMEZCU3l4SlFVRkpMRWxCUVVsd2NVUXNSVUZCUlZRc1JVRkJSV3RETEVkQlFVZFhMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNkVUpCUVhWQ2FGZ3NSMEZCUnl4SlFVRkpWeXhGUVVGRldDeEhRVUZIUVN4SFFVRkhMRVZCUVVWQkxFVkJRVVZwUWl4RlFVRkZiM0JFTEdsQ1FVRnBRbXB4UkN4SFFVRkhaME1zUzBGQlMydHVSQ3hOUVVGTmRIbERMRTlCUVU4NVdDeEZRVUZGT0Znc1RVRkJUU3hwUWtGQmFVSnlWeXhIUVVGSExFbEJRVWxvUWl4RlFVRkZPRUlzUlVGQlJURkNMRWxCUVVrc2FVSkJRV2xDTEVkQlFVY3NSMEZCUjNGRExFdEJRVXRyYmtRc1RVRkJUWFI1UXl4UFFVRlBPVmdzUlVGQlJUaFlMRTFCUVUwc2QwSkJRWGRDY2xnc1IwRkJSM2xETEV0QlFVdHJiMFFzWVVGQllUZHZSQ3hIUVVGSFpDeEpRVUZKVFN4RlFVRkZjM0JFTEV0QlFVdERMRWRCUVVjc1EwRkJReXhKUVVGSmJuQkVMRVZCUVVWbExFdEJRVXR4YjBRc2FVSkJRV2xDT1hGRUxFVkJRVVVzU1VGQlNYbERMRXRCUVV0emIwUXNWMEZCVnk5d1JDeEZRVUZGVlN4RlFVRkZTU3hOUVVGTlFTeEZRVUZGV0N4VlFVRlZhWEJFTEdsQ1FVRnBRaXhUUVVGVGRHOUVMRWRCUVVjc1NVRkJTWEpDTEVWQlFVVm5ReXhMUVVGTExFZEJRVWRCTEV0QlFVc3diVVFzVDBGQlR6RnRSQ3hMUVVGTGEyNUVMRTFCUVUxMGVVTXNUMEZCVHpsWUxFVkJRVVU0V0N4TlFVRk5MR2xGUVVGcFJTeERRVUZETEVsQlFVbG9XQ3hGUVVGRkxFZEJRVWNzU1VGQlNVRXNSVUZCUlc5RExFdEJRVXNyYlVRc1QwRkJUM2RDTEUxQlFVMXNjRVFzUjBGQlJ5eE5RVUZOUVN4SFFVRkhMRTlCUVU5WExFdEJRVXRyYmtRc1RVRkJUWFI1UXl4UFFVRlBPVmdzUlVGQlJUaFlMRTFCUVUwc2QwSkJRWGRDZGxZc1JVRkJSVUVzUlVGQlJXdFVMR05CUVdOMlV5eExRVUZMYzI5RUxGZEJRVmQ2Y0VRc1JVRkJSWE53UkN4TFFVRkxTeXhUUVVGVExHdENRVUZyUW01d1JDeEZRVUZGYTFRc1UwRkJVek5WTEVWQlFVVTJWU3hUUVVGUkxGTkJRVk53VkN4SFFVRkhMRWRCUVVkQkxFVkJRVVZ2Y0VRc1dVRkJXV3h5UkN4RlFVRkZiWEpFTEZWQlFWVnVkME1zVVVGQlVTeERRVUZETEVsQlFVa3pZU3hGUVVGRlNTeEZRVUZGYVhCRUxHbENRVUZwUWpCQ0xHRkJRV0YyU1N4clFrRkJhMEl2WjBRc1JVRkJSU3MyUWl4TlFVRk5jRGhDTEVWQlFVVTBjVVFzWVVGQllXaHlSQ3hSUVVGUmVVSXNSVUZCUlc5d1JDeFpRVUZaYkhKRUxFVkJRVVZ0Y2tRc1ZVRkJWVWNzVjBGQlZ6ZHhSQ3hGUVVGRlozRkVMR2xDUVVGcFFtaHhSQ3hGUVVGRk9IRkVMR2xDUVVGcFFpeEpRVUZKZG5GRUxFVkJRVVUwYmtRc1UwRkJVemx0UkN4RlFVRkZNSEJFTEZWQlFWVXZjVVFzUlVGQlJXdHdSQ3hOUVVGTmRIbERMRTlCUVU4NVdDeEZRVUZGT0Znc1RVRkJUU3h0UWtGQmJVSTFWeXhGUVVGRk9IRkVMRzlDUVVGdlFqbHhSQ3hGUVVGRlozRkVMR2RDUVVGblFpeEpRVUZKZW5CRUxFVkJRVVUwYmtRc1UwRkJVemx0UkN4RlFVRkZNSEJFTEZWQlFWVXZjVVFzUlVGQlJXdHhSQ3hoUVVGaGJIRkVMRVZCUVVWbmNVUXNkMEpCUVhWQ00yOUVMRVZCUVVWWUxGVkJRVlZ0Y0VRc1pVRkJaU3hYUVVGWExFZEJRVWMzYmtRc1MwRkJTMnR1UkN4TlFVRk5kSGxETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN4alFVRmpOVlVzUzBGQlN6QnRSQ3hQUVVGUE1XMUVMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNaMFZCUVdkRkxGRkJRVWNzU1VGQlV6VlZMRXRCUVVzNGIwUXNhVUpCUVdsQ0xFTkJRVU1zU1VGQlNYcHdSQ3hGUVVGRmJFTXNSVUZCUlRaRExFdEJRVXM0YjBRc2EwSkJRV3RDTEVkQlFVY3NUMEZCVDNwd1JDeEZRVUZGTEVOQlFVTXNTVUZCU1hKQ0xFVkJRVVZuUXl4TFFVRkxPRzlFTEdsQ1FVRnBRbTV5UkN4SlFVRkpMR2RDUVVGblFrTXNSVUZCUlc5RExFdEJRVXR4YjBRc2FVSkJRV2xDY25GRUxFVkJRVVVzU1VGQlNXZERMRXRCUVV0bmNFUXNVMEZCVXpOd1JDeEZRVUZGZWtJc1JVRkJSVzlETEV0QlFVczRiMFFzZFVKQlFYVkNPVzlFTEV0QlFVdHpiMFFzVjBGQlYzcHdSQ3hGUVVGRmMzQkVMRXRCUVV0TExGTkJRVk1zSzBSQlFTdEVMRU5CUVVNc1VVRkJSeXhKUVVGVGVHOUVMRXRCUVV0bmIwUXNaMEpCUVdkQ0xGbEJRVmxvYjBRc1MwRkJTM052UkN4WFFVRlhlbkJFTEVWQlFVVnpjRVFzUzBGQlMyTXNVVUZCVVN4dFEwRkJiVU1zU1VGQlNURnhSQ3hGUVVGRmNFSXNSVUZCUlRaRExFdEJRVXRuYjBRc2FVSkJRV2xDZW5GRUxFVkJRVVY1UXl4TFFVRkxaMjlFTEdkQ1FVRm5Rbkp4UkN4SlFVRkpMR2RDUVVGblFpeEhRVUZIY1VNc1MwRkJTMnR1UkN4TlFVRk5kSGxETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN3NFFrRkJPRUp5Vnl4RlFVRkZhRUlzUjBGQlJ5eFBRVUZQWjBJc1JVRkJSU3haUVVGWmVVSXNTMEZCUzJkd1JDeFRRVUZUYm5GRUxFVkJRVVZ6Y0VRc1MwRkJTMk1zVVVGQlVTeHhSRUZCY1VScWNFUXNTMEZCUzJkdlJDeHBRa0ZCYVVJc1NVRkJTUzl2UkN4RlFVRkZaU3hMUVVGTGNXOUVMR2xDUVVGcFFqbHhSQ3hGUVVGRkxFbEJRVWw1UXl4TFFVRkxaM0JFTEZOQlFWTjZjVVFzUlVGQlJWVXNSVUZCUldVc1MwRkJTMmR2UkN4dFFrRkJiVUl6YjBRc1JVRkJSVmdzVlVGQlZUSndSQ3hwUWtGQmFVSXNVMEZCVTJod1JDeEhRVUZITEVsQlFVbEJMRVZCUVVVc1RVRkJUU3hIUVVGSExFbEJRVWtzVDBGQlQza3hRaXh0UWtGQmJVSjZNVUlzUjBGQlJ5eE5RVUZOY2tJc1IwRkJSeXhQUVVGUGNVSXNTVUZCU1VFc1JVRkJSVmdzVlVGQlZYTnhSQ3hUUVVGVExGTkJRVk16Y0VRc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1NVRkJTVmNzUlVGQlJYbENMRXRCUVV0QkxFdEJRVXRyYmtRc1RVRkJUWFI1UXl4UFFVRlBPVmdzUlVGQlJUaFlMRTFCUVUwc1YwRkJWM1pXTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZIYjBNc1MwRkJTM2x0UkN4WlFVRlplbTFFTEV0QlFVdDViVVFzVjBGQlZTeEZRVUZIZW0xRUxFdEJRVXM0YlVRc1pVRkJaWEl3UXl4VFFVRlJMRk5CUVZOc1ZpeEhRVUZITEVsQlFVbG5RaXhGUVVGRmJXOUVMRTlCUVU4c1NVRkJTVzV3UkN4RlFVRkZPRUlzUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzVFVGQlRYbENMRWRCUVVjeVR5eFpRVUZYTEZkQlFWY3NUVUZCVFROUExGZEJRVk5CTEVWQlFVVllMRlZCUVZWM2NFUXNZVUZCWVN4VFFVRlROMjlFTEVkQlFVZFhMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNaVUZCWlhaV0xFZEJRVWRYTEV0QlFVdDViVVFzVjBGQlYzcHRSQ3hMUVVGTE5HMUVMRzFDUVVGdFFtNHdReXhUUVVGUkxGTkJRVk42VlN4SFFVRkhMRWxCUVVsQkxFVkJRVVZ4UWl4SFFVRkhMRTFCUVUxQkxFZEJRVWN5VHl4WlFVRlhMRmRCUVZjc1RVRkJUVE5QTEZWQlFWRkJMRVZCUVVWWUxGVkJRVlUwY0VRc1YwRkJWeXhUUVVGVGFuQkVMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMRWxCUVVsTUxFVkJRVVY1UXl4VlFVRkxMRWxCUVZOd1F5eEpRVUZKUVN4RlFVRkZMRWxCUVVsWExFVkJRVVUwYmtRc1ZVRkJWVzV0UkN4TFFVRkxhMjVFTEUxQlFVMTBlVU1zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEdGQlFXRjJWaXhGUVVGRmNrSXNSMEZCUjJkRExFdEJRVXQ1YlVRc1dVRkJXWHB0UkN4TFFVRkxlVzFFTEZkQlFWVXNSVUZCUjNwdFJDeExRVUZMT0cxRUxHVkJRV1Z5TUVNc1UwRkJVU3hUUVVGVGJGVXNSMEZCUnl4SlFVRkphRUlzUlVGQlJXMXdSQ3hQUVVGUExFbEJRVWx1YjBRc1JVRkJSV01zUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzVFVGQlRYbENMRWRCUVVjeVR5eFpRVUZYTEZkQlFWY3NUVUZCVFROUExGZEJRVk5CTEVWQlFVVllMRlZCUVZWcmNVUXNZVUZCWVN4VFFVRlRkbkJFTEVkQlFVY3NTVUZCU1hKQ0xFVkJRVVZuUXl4TFFVRkxRU3hMUVVGTGEyNUVMRTFCUVUxMGVVTXNUMEZCVHpsWUxFVkJRVVU0V0N4TlFVRk5MR1ZCUVdWMlZpeEZRVUZGZDJRc1dVRkJXVGRqTEV0QlFVdDViVVFzVjBGQlYzcHRSQ3hMUVVGTE1HMUVMRkZCUVZFeGJVUXNTMEZCU3padFJDeHRRa0ZCYlVKd01FTXNVMEZCVVN4VFFVRlROMVVzUjBGQlJ5eEpRVUZKU1N4RlFVRkZNRzlFTEU5QlFVOHNTVUZCU1RsdlJDeEZRVUZGZVVJc1IwRkJSeXhOUVVGTlFTeEhRVUZITWs4c1dVRkJWeXhYUVVGWExFMUJRVTB6VHl4VlFVRlJRU3hGUVVGRldDeFZRVUZWT0c5RUxGVkJRVlVzVTBGQlUyNXZSQ3hIUVVGSFZ5eExRVUZMTkcxRUxHMUNRVUZ0UWpFNVF5eExRVUZMTjBvc1NVRkJTVUVzUlVGQlJWZ3NWVUZCVlhkeFJDeFZRVUZWTEZOQlFWTTNjRVFzUjBGQlIxY3NTMEZCU3padFJDeHRRa0ZCYlVJek9VTXNTMEZCU3pkS0xFbEJRVWxCTEVWQlFVVllMRlZCUVZWcmNFUXNUVUZCVFN4VFFVRlRkbTlFTEVkQlFVZFhMRXRCUVVzNGJVUXNaVUZCWlRVNVF5eExRVUZMTjBvc1NVRkJTVUVzUlVGQlJWZ3NWVUZCVlhseFJDeE5RVUZOTEZOQlFWTTVjRVFzUjBGQlJ5eEhRVUZIVnl4TFFVRkxkVzFFTEZGQlFWRXNUVUZCVFN4SlFVRkpjR3RFTEUxQlFVMHNORU5CUVRSRGJrTXNTMEZCUzNWdFJDeFRRVUZSTEVWQlFVY3NTVUZCU1hadlJDeEZRVUZGTEVsQlFVbFBMRVZCUVVVMGJrUXNVMEZCVXpsdFJDeEhRVUZITEVsQlFVbHlRaXhGUVVGRk5GWXNTVUZCU1N4bFFVRmxMRGhDUVVFNFFqVldMRVZCUVVVMFZpeEpRVUZKTEdGQlFXRXNTMEZCU3pWVUxFdEJRVXM0YmtRc1ZVRkJWWEZDTEUxQlFVMXVja1FzU1VGQlNYRkNMRVZCUVVWWUxGVkJRVlZ0U1N4TFFVRkxMRk5CUVZONFNDeEhRVUZITEVsQlFVbFhMRXRCUVV0MWJVUXNVVUZCVVN4TlFVRk5MRWxCUVVsd2EwUXNUVUZCVFN3clJFRkJLMFFzUjBGQlIyNURMRXRCUVVzd2JVUXNUMEZCVHl4TlFVRk5MRWxCUVVsMmEwUXNUVUZCVFN3d1EwRkJNRU1zUjBGQlIyNURMRXRCUVVzeWJVUXNaMEpCUVdkQ0xFMUJRVTBzU1VGQlNYaHJSQ3hOUVVGTkxHOUVRVUZ2UkN4SlFVRkpia01zUzBGQlMybHVSQ3hwUWtGQmFVSnRReXhsUVVGbGNIQkVMRXRCUVV0M2JVUXNhVUpCUVdsQ0xFMUJRVTBzU1VGQlNYSnJSQ3hOUVVGTkxIbEZRVUY1Ulc1RExFdEJRVXQzYlVRc2EwSkJRV2xDTEVWQlFVY3NTVUZCU1hodlJDeEZRVUZGY1c5RUxFVkJRVVZuUkN4aFFVRmhhSEZFTEVkQlFVZFhMRXRCUVVzNGJrUXNWVUZCVlhkQ0xGbEJRVmwwY2tRc1NVRkJTWEZDTEVWQlFVVllMRlZCUVZVMmNVUXNWMEZCVnl4WFFVRlhMRWxCUVVsMmNFUXNTMEZCUzNWdFJDeFJRVUZSTEUxQlFVMHNTVUZCU1hCclJDeE5RVUZOTEhGRlFVRnhSU3hIUVVGSGJrTXNTMEZCU3pCdFJDeFBRVUZQTEUxQlFVMHNTVUZCU1haclJDeE5RVUZOTERCRFFVRXdReXhIUVVGSGJrTXNTMEZCU3pKdFJDeG5Ra0ZCWjBJc1RVRkJUU3hKUVVGSmVHdEVMRTFCUVUwc01FUkJRVEJFYmtNc1MwRkJTekp0UkN4cFFrRkJaMElzUlVGQlJ6TnRSQ3hMUVVGTE9HNUVMRlZCUVZWNVFpeGpRVUZqYkhGRUxFVkJRVVZZTEZWQlFWVTRjVVFzVFVGQlRTeFhRVUZYTEVsQlFVbDRjRVFzUzBGQlMzVnRSQ3hSUVVGUkxFMUJRVTBzU1VGQlNYQnJSQ3hOUVVGTkxHZEZRVUZuUlN4SFFVRkhia01zUzBGQlN6QnRSQ3hQUVVGUExFMUJRVTBzU1VGQlNYWnJSQ3hOUVVGTkxESkRRVUV5UTI1RExFdEJRVXN3YlVRc1VVRkJUeXhGUVVGSE1XMUVMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNhME5CUVd0RE5WVXNTMEZCU3podVJDeFZRVUZWTWtJc1ZVRkJWWEJ4UkN4RlFVRnFiMHdzUjBGQmMyOU1MRk5CUVZOc1F5eEZRVUZGYTBNc1IwRkJSeXhKUVVGSmNrSXNSVUZCUlhGQ0xFVkJRVVV4UWl4SlFVRkpMR2RDUVVGblFpeEhRVUZITEVkQlFVZExMRVZCUVVWdlFpeFBRVUZQTEVWQlFVVXNTVUZCU1N4SlFVRkplRUlzUlVGQlJVa3NSVUZCUlN4SFFVRkhMRTlCUVU4clppeFRRVUZUYm1kQ0xFVkJRVVVzU1VGQlNTeE5RVUZOZVVJc1IwRkJSeXhQUVVGUExFdEJRVXNzVDBGQlR5eFBRVUZQTEZOQlFWTkJMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMRWxCUVVsWExFVkJRVVZCTEVWQlFVVXNWMEZCVnl4UFFVRlBMRk5CUVZOakxFZEJRVWNzU1VGQlNYSkNMRVZCUVVVc1IwRkJSeXhUUVVGVFNpeEZRVUZGVnl4SFFVRkhMRWRCUVVkUUxFVkJRVVZQTEVkQlFVY3NUMEZCVDFBc1JVRkJSVThzUjBGQlIycERMRkZCUVZFc1NVRkJTV2xDTEVWQlFVVlRMRVZCUVVWUExFZEJRVWNzUTBGQlEzcENMRVZCUVVWNVFpeEZRVUZGZUVJc1IwRkJSU3hGUVVGSFZDeFJRVUZSTEVsQlFVa3NUMEZCVHl0RExFVkJRVVZrTEVkQlFVZDBRaXhMUVVGTFRTeEZRVUZGYWtJc1VVRkJVV2xDTEVWQlFVVkJMRVZCUVVWcVFpeFJRVUZSYzBJc1IwRkJSMHdzUlVGQlJWSXNSMEZCUlN4RlFVRkhVU3hGUVVGRmFrSXNVVUZCVVN4UFFVRlBjMElzUlVGQlJWWXNSVUZCUlcxRExFVkJRVVY2UWl4RlFVRkZWQ3hGUVVGRllTeEZRVUZGU2l4RlFVRkZaQ3hGUVVGRkxGTkJRVk4xUXl4SFFVRkhMRTlCUVU5QkxFZEJRVWQ2UWl4RlFVRkZVaXhGUVVGRkxGTkJRVk5wUXl4RlFVRkZja0lzUlVGQlJVOHNSMEZCUjFnc1JVRkJSVXdzUlVGQlJUaENMRVZCUVVWeVFpeEpRVUZKVWl4UFFVRlBReXhsUVVGbE5FSXNSVUZCUlhKQ0xFVkJRVVVzUTBGQlEyMURMR05CUVdFc1JVRkJSM3BETEZsQlFWY3NSVUZCUjBNc1NVRkJTVmtzUzBGQlMxZ3NSVUZCUlZjc1JVRkJSU3hUUVVGVFl5eEhRVUZITEVsQlFVbHlRaXhGUVVGRmNVSXNSMEZCUjBFc1JVRkJSVzVDTEZkQlFWY3NWMEZCVnl4UFFVRlBiVUlzUlVGQlJUWnRSQ3hUUVVGVExGZEJRVmNzVDBGQlR6ZHRSQ3hIUVVGSExFOUJRVTk2UWl4RlFVRkZVaXhGUVVGRldTeEZRVUZGTEVsQlFVbEJMRWRCUVVkQkxFZEJRVWRLTEVWQlFVVk1MRVZCUVVVc1UwRkJVemhDTEVWQlFVVnlRaXhIUVVGSExFOUJRVTlTTEU5QlFVOXJRaXhWUVVGVlF5eGxRVUZsTVVJc1MwRkJTMjlETEVWQlFVVnlRaXhKUVVGSlNpeEZRVUZGWjBJc1JVRkJSU3hIUVVGSGFFSXNSVUZCUlVFc1JVRkJSV2xDTEVWQlFVVXNSMEZCZUdVc1EwRkJOR1VzUTBGQlF5eFRRVUZUVVN4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhTaXhQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFJMRVZCUVVWWUxFVkJRVVVzUjBGQlQwd3NSVUZCUlN4WFFVRlhMRk5CUVZNNFFpeEZRVUZGUVN4RlFVRkZja0lzVVVGQlJ5eEpRVUZUY1VJc1NVRkJTVUVzUlVGQlJTeFRRVUZKTEVsQlFWTnlRaXhKUVVGSlFTeEZRVUZGTEVOQlFVTXdja1FzWVVGQldTeEpRVUZMTEVsQlFVazVja1FzUlVGQlJVd3NSVUZCUlhsRExFdEJRVkZCTEV0QlFVc3ljRVFzVjBGQlZ5eEhRVUZIZEhGRUxFbEJRVXNzYjBKQlFXOUNkWEZFTEZOQlFWTjJjVVFzWVVGQllYVnhSQ3hSUVVGUmNuSkVMRVZCUVVWemNrUXNZMEZCWTNoeFJDeEhRVUZIYjFRc1UwRkJVU3hUUVVGVE4xVXNSMEZCUjFjc1JVRkJSWFZ5UkN4blFrRkJaMEo2Y1VRc1JVRkJSWHBDTEVkQlFVYzJWU3hUUVVGUkxGTkJRVk53VkN4SFFVRkhja0lzUlVGQlJUQnlSQ3haUVVGWmJuTkVMRVZCUVVWM2MwUXNUMEZCVDI1elJDeEZRVUZGVnl4RlFVRkZlWEpFTEdsQ1FVRnBRak54UkN4SlFVRkpPVUlzUlVGQlJYZHpSQ3hQUVVGUGJuTkVMRVZCUVVWNVFpeFRRVUZsTEdsQ1FVRnBRbnBDTEVWQlFVVjVRaXhKUVVGSkxHbENRVUZwUW5wQ0xFVkJRVVVyY2tRc1dVRkJXU3h0UWtGQmJVSXZja1FzUlVGQlJUWlZMRkZCUVZGd1ZDeEZRVUZGYjFRc1UwRkJVU3hUUVVGVGNGUXNSVUZCUlhKQ0xFZEJRVWRVTEVWQlFVVjNjMFFzVDBGQlR6RnhSQ3hGUVVGRmNrSXNUVUZCWVN4dlFrRkJiMEkwWjBRc1MwRkJTM1l2UXl4aFFVRmhkUzlETEVsQlFVdDJMME1zUlVGQlJXOVVMRk5CUVZFc1UwRkJVM0JVTEVWQlFVVnlRaXhIUVVGSFZDeEZRVUZGZDNORUxFOUJRVTh2Y2tRc1JVRkJSWEZDTEUxQlFWTXNhVUpCUVdsQ1FTeEZRVUZGVnl4TFFVRkxhWEZFTEdsQ1FVRnBRalZ4UkN4SFFVRkhMR2xDUVVGcFFrRXNSMEZCUnpkQ0xFOUJRVTlyV0N4dlFrRkJiMEp5Vml4SFFVRkhiMVFzVTBGQlVTeFRRVUZUZWxVc1IwRkJSeXhKUVVGSlNpeEZRVUZGZVVJc1JVRkJSWEpDTEVkQlFVYzJRaXhOUVVGTk5FZ3NVVUZCVVRkS0xFZEJRVWRCTEVWQlFVVTJWU3hUUVVGUkxGTkJRVk53VkN4SFFVRkhPVUlzUlVGQlJYZHpSQ3hQUVVGUEwzSkVMRVZCUVVWeFFpeE5RVUZMT1VJc1JVRkJSWGR6UkN4UFFVRlBMM0pFTEVWQlFVVktMRTlCUVVzc1QwRkJUM2xDTEVWQlFVVllMRlZCUVZWMWNrUXNhVUpCUVdsQ0xGTkJRVk0xY1VRc1IwRkJSeXhKUVVGSkxFbEJRVWx5UWl4RlFVRkZjVUlzUlVGQlJXRXNUVUZCVFN4UlFVRlJkRU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZTU3hGUVVGRmIwSXNUMEZCVDNoQ0xFbEJRVWtzUTBGQlF5eEpRVUZKVnl4RlFVRkZVQ3hGUVVGRlNpeEhRVUZIVEN4RlFVRkZaMElzUlVGQlJYbExMRkZCUVZFc1MwRkJTeXhIUVVGSGVrd3NSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTWE5DTEVWQlFVVk9MRVZCUVVWblJTeFZRVUZWTEVWQlFVVm9SaXhIUVVGSE5ERkNMRTlCUVU5eU1rSXNSVUZCUlhsQ0xFVkJRVVZuUlN4VlFVRlZhRVlzUlVGQlJTeEhRVUZITkRGQ0xFOUJRVTl1ZWtJc1MwRkJTeXR3UkN4UFFVRlBiSEpFTEVWQlFVVXZRaXhOUVVGTmRVTXNSVUZCUlZnc1ZVRkJWWGR5UkN4UFFVRlBMRk5CUVZNM2NVUXNSVUZCUlhKQ0xFZEJRVWNzU1VGQlNVb3NSVUZCUlZjc1JVRkJSVFJ5UkN4alFVRmpPWEZFTEVkQlFVY3NVVUZCUnl4SlFVRlRja0lzVTBGQlUyZERMRXRCUVVzeWNFUXNWMEZCVnk5eVJDeFBRVUZQTEVOQlFVTXNTVUZCU1V3c1JVRkJSWGxETEV0QlFVc3ljRVFzVjBGQlZ5OXlSQ3hIUVVGSExFZEJRVWRNTEVWQlFVVXNRMEZCUXl4SlFVRkpjMElzUlVGQlJYUkNMRVZCUVVWNVRDeFJRVUZSYUV3c1IwRkJSMkVzUjBGQlJ5eEhRVUZIZEVJc1JVRkJSV2RLTEU5QlFVOHhTQ3hGUVVGRkxFZEJRVWNzU1VGQlNYUkNMRVZCUVVVMlFpeGxRVUZsV1N4TFFVRkxNbkJFTEZkQlFWY3Zja1FzVFVGQlRYbENMRVZCUVVWWUxGVkJRVlZ4Y2tRc1QwRkJUeXhUUVVGVE1YRkVMRVZCUVVWeVFpeEhRVUZITEVsQlFVbEtMRVZCUVVWdlF5eExRVUZMZWtNc1JVRkJSV2RDTEVWQlFVVTBja1FzWTBGQll6bHhSQ3hIUVVGSFVTeE5RVUZOTkVnc1VVRkJVWHBJTEV0QlFVc3ljRVFzVjBGQlYzQnpSQ3hOUVVGTmVVTXNTMEZCU3pKd1JDeFhRVUZYY0hORUxFZEJRVWNzU1VGQlNYTkRMRTFCUVUwMFNDeFJRVUZSZWtvc1IwRkJSMEVzUlVGQlJYbFZMRk5CUVZFc1UwRkJVM0JVTEVkQlFVZDZRaXhGUVVGRkszSkVMRmRCUVZkd2MwUXNSMEZCUnpKTUxFdEJRVXN6U3l4RlFVRkZObkpFTEdWQlFXVXZjVVFzVDBGQlRWY3NTMEZCU3pKd1JDeFhRVUZYY0hORUxFZEJRVWN5VEN4TFFVRkxNMHNzUlVGQlJUWnlSQ3hsUVVGbGNITkVMRXRCUVV0eFFpeEZRVUZGV0N4VlFVRlZhMVlzU1VGQlNTeFRRVUZUZGxVc1JVRkJSWEpDTEVkQlFVY3NTVUZCU1Vvc1JVRkJSVmNzUlVGQlJUUnlSQ3hqUVVGak9YRkVMRWRCUVVjc1IwRkJSMUVzVFVGQlRUUklMRkZCUVZGNlNpeEhRVUZITEVOQlFVTXNTVUZCU1ZRc1JVRkJSU3hIUVVGSFV5eEZRVUZGZVZVc1UwRkJVU3hUUVVGVGNGUXNSMEZCUnpsQ0xFVkJRVVV5VEN4TFFVRkxNMHNzUlVGQlJUWnlSQ3hsUVVGbEwzRkVMRTlCUVUxWExFdEJRVXN5Y0VRc1YwRkJWeTl5UkN4SFFVRkhUQ3hQUVVGUGVVTXNTMEZCU3pKd1JDeFhRVUZYTDNKRUxFZEJRVWNzUTBGQlExY3NSVUZCUlRaeVJDeGxRVUZsY0hORUxFdEJRVXR4UWl4RlFVRkZXQ3hWUVVGVmQyaEVMRWxCUVVrc1UwRkJVemRuUkN4RlFVRkZja0lzUjBGQlJ5eEpRVUZKU2l4RlFVRkZiME1zUzBGQlN6SndSQ3hYUVVGWGNISkVMRVZCUVVVMGNrUXNZMEZCWXpseFJDeEpRVUZKTEVsQlFVbFJMRTFCUVUwMFNDeFJRVUZSTjBvc1IwRkJSeXhQUVVGTkxFVkJRVWNzVVVGQlJ5eEpRVUZUU1N4RlFVRkZMRU5CUVVNc1NVRkJTVlFzUlVGQlJXZENMRVZCUVVVMmNrUXNaVUZCWlhCelJDeEhRVUZITEU5QlFVOUtMRVZCUVVWdlRDeFJRVUZSZWt3c1NVRkJTU3hGUVVGRkxFOUJRVTBzUjBGQlNUaENMRVZCUVVWWUxGVkJRVlZtTEVsQlFVa3NVMEZCVXpCQ0xFZEJRVWNzU1VGQlNYSkNMRVZCUVVWblF5eExRVUZMTW5CRUxGZEJRVmR3Y2tRc1JVRkJSVFJ5UkN4alFVRmpPWEZFTEVsQlFVa3NXVUZCVHl4SlFVRlRja0lzUlVGQlJVRXNSVUZCUlhsUkxGTkJRVk1zU1VGQlNYQlFMRVZCUVVWWUxGVkJRVlVyVkN4UlFVRlJMRk5CUVZOd1ZDeEhRVUZITEVsQlFVbHlRaXhGUVVGRlowTXNTMEZCUzNoRExFOUJRVTlyV0N4dlFrRkJiMEl4VlN4TFFVRkxNbkJFTEZsQlFWbHNNME1zVTBGQlVTeFRRVUZUTjFVc1IwRkJSM2xDTEVWQlFVVjZRaXhGUVVGRlNTeEZRVUZGTW5KRUxGZEJRVmN2Y2tRc1RVRkJTMjlETEU5QlFVOVlMRVZCUVVWWUxGVkJRVlV5Y2tRc1ZVRkJWU3hYUVVGWExFZEJRVWNzYjBKQlFXOUNWQ3hSUVVGUkxFTkJRVU1zU1VGQlNYWnhSQ3hGUVVGRkxFbEJRVWwxY1VRc1VVRkJVU3hQUVVGUE5YQkVMRXRCUVV0NVV5eFRRVUZSTEZOQlFWTjZWU3hGUVVGRlNpeEhRVUZIUVN4RlFVRkZObFVzVTBGQlVTeFRRVUZUTjFVc1IwRkJSM2xDTEVWQlFVVXdjVVFzVDBGQlR5OXlSQ3hGUVVGRlNpeFRRVUZQZVVJc1JVRkJSU3hOUVVGTkxFbEJRVWs0UXl4TlFVRk5MR2xEUVVGcFF6bERMRVZCUVd4elJTeEhRVUYxYzBWeVFpeEZRVUZGYjI5RUxHVkJRV1UzYjBRc1IwRkJSeXhUUVVGVE9FSXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NZVUZCWVVvc1QwRkJUME1zWlVGQlpVOHNSVUZCUlN4aFFVRmhMRU5CUVVORUxFOUJRVTBzU1VGQlN5eEpRVUZKVVN4RlFVRkZXQ3hGUVVGRkxFZEJRVWRKTEVWQlFVVnZiMFFzWlVGQlpUZHVSQ3hGUVVGRk5tNUVMR2RDUVVGblFpeFRRVUZUTDIxRUxFVkJRVVZ5UWl4RlFVRkZTaXhIUVVGSExHRkJRV0ZLTEU5QlFVOURMR1ZCUVdWUExFVkJRVVVzWVVGQllTeERRVUZEUkN4UFFVRk5MRWxCUVV0RExFVkJRVVZ6YzBRc1pVRkJaU3hUUVVGVGFuSkVMRVZCUVVWeVFpeEhRVUZITEVsQlFVa3NTVUZCU1Vvc1JVRkJSWGxDTEVWQlFVVjRRaXhQUVVGUE9HaEVMRmxCUVZsd2FFUXNSVUZCUlZnc1JVRkJSVFpvUkN4UlFVRlJiR2hFTEVWQlFVVnRhRVFzVFVGQlRURm9SQ3hGUVVGRlR5eEZRVUZGVWl4TlFVRk5MRWxCUVVsUkxFVkJRVVZZTEVWQlFVVTJhRVFzVVVGQlVYcG9SQ3hGUVVGRmRYTkVMRzFDUVVGdFFpeFRRVUZUYkhKRUxFVkJRVVZ5UWl4SFFVRkhMRWxCUVVrc1NVRkJTVW9zUlVGQlJYbENMRVZCUVVVeVowUXNUMEZCVDNwb1JDeEZRVUZGV0N4RlFVRkZObWhFTEZGQlFWRnNhRVFzUlVGQlJXMW9SQ3hOUVVGTk1XaEVMRVZCUVVWUExFVkJRVVZTTEU5QlFVOVJMRVZCUVVWWUxFVkJRVVUyYUVRc1UwRkJVeXhUUVVGVGNHZEVMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMR0ZCUVdGS0xFOUJRVTlETEdWQlFXVlBMRVZCUVVVc1lVRkJZU3hEUVVGRFJDeFBRVUZOTEVsQlFVc3NTVUZCU1ZFc1JVRkJSVmdzUlVGQlJTeEhRVUV3UWtrc1JVRkJSVzF6UkN4alFVRmpMRk5CUVZNNWNVUXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFrRXNTVUZCU1VFc1JVRkJSVVlzVDBGQlQwVXNTVUZCU1N3MlFrRkJOa0kyUkN4TFFVRkxOMFFzUjBGQlJ5eE5RVUZOTEVsQlFVbHBRaXhWUVVGVkxEQkRRVUV3UXl4UFFVRlBha0lzUlVGQlJUUjBRaXhsUVVGbGFuWkNMRVZCUVVWdmMwUXNaVUZCWlN4VFFVRlRMM0ZFTEVkQlFVY3NUVUZCVFN4cFFrRkJhVUpCTEVsQlFVbEJMRVZCUVVWR0xFOUJRVTlGTEVsQlFVbEJMRWRCUVVkeVFpeEZRVUZGT0hKRUxHZENRVUZuUWl4VFFVRlRlbkZFTEVWQlFVVnlRaXhIUVVGSExFbEJRVWxLTEVWQlFVbDVRaXhGUVVGSExFZEJRVWQ2UWl4aFFVRmhaM05FTEZOQlFWTm9jMFFzUlVGQlJUUnpSQ3hQUVVGUExFOUJRVTgxYzBRc1JVRkJSVFJ6UkN4UFFVRlBlSE5FTEVkQlFVY3NTVUZCU1U4c1JVRkJSVmdzUlVGQlJVUXNTVUZCU1Vzc1IwRkJSeXhQUVVGUFR5eEhRVUZITEdsQ1FVRnBRa0VzUlVGQlJTeERRVUZEUVN4SFFVRkhRU3hIUVVGSFVDeEZRVUZGTm5KRUxHTkJRV01zVTBGQlUzaHhSQ3hIUVVGSExFbEJRVWx5UWl4RlFVRkpjVUlzUlVGQlIzcENMRVZCUVVVc1IwRkJSMmxDTEVWQlFVVXNSMEZCUnl4UFFVRlBZaXhGUVVGRloybEVMRXRCUVV0NmFFUXNSVUZCUldkelJDeHRRa0ZCYlVKMmMwUXNSMEZCUlN4VFFVRlRjVUlzUjBGQlIzcENMRVZCUVVWNVFpeExRVUZMZWtJc1JVRkJSWGxDTEVsQlFVY3NSVUZCUjFJc1JVRkJSWEZMTEV0QlFVczNTaXhQUVVGTmNrSXNSVUZCUlhsVkxGRkJRVkY2VlN4RlFVRkZlVlVzVTBGQlVTeFRRVUZUY0ZRc1JVRkJSWEpDTEVkQlFVZEtMRVZCUVVWSkxFdEJRVXRLTEVWQlFVVkpMRWxCUVVjc1JVRkJSMkVzUlVGQlJYRkxMRXRCUVV0c1RDeFBRVUZOVHl4RlFVRkZLM0pFTEdWQlFXVjBjMFFzUjBGQlJTeFRRVUZUY1VJc1IwRkJSeXhKUVVGSmNrSXNSVUZCUlhGQ0xFVkJRVVVzUjBGQlIzcENMRVZCUVVWSkxFdEJRVXRLTEVWQlFVVkpMRWxCUVVjc1JVRkJSMkVzUlVGQlJYRkxMRXRCUVV0c1RDeFBRVUZOWVN4SFFVRkhZaXhGUVVGRlozTkVMR2xDUVVGcFFpeFRRVUZUTTNGRUxFZEJRVWNzU1VGQlNYSkNMRVZCUVVVc1IwRkJSeXhQUVVGUGNVSXNSVUZCUldFc1RVRkJUU3hOUVVGTmRWTXNVMEZCVVN4VFFVRlRjRlFzUjBGQlIwRXNSVUZCUldFc1RVRkJUU3hMUVVGTGRWTXNVMEZCVVN4VFFVRlRjRlFzUjBGQlIzSkNMRVZCUVVWclRDeExRVUZMTjBvc1UwRkJUM0pDTEU5QlFVOXhRaXhGUVVGRkwwTXNVVUZCVVdsRExFdEJRVXNzVTBGQlUyTXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NZVUZCWVVvc1QwRkJUME1zWlVGQlpVOHNSVUZCUlN4aFFVRmhMRU5CUVVORUxFOUJRVTBzU1VGQlN5eEpRVUZKVVN4RlFVRkZXQ3hGUVVGRkxFZEJRVWRNTEVWQlFVVXNVMEZCVXpoQ0xFZEJRVWNzVDBGQlQyUXNSVUZCUld0elJDd3dRa0ZCTUVJc1EwRkJRME1zYVVKQlFXZENMRWRCUVRkRGJuTkVMRU5CUVd0RVl5eEpRVUZKY2tJc1JVRkJSVEp6UkN3eVFrRkJNa0lzVTBGQlUzUnlSQ3hIUVVGSE9VSXNSVUZCUlRoQ0xFZEJRVWR5UWl4RlFVRkZLM0JFTEhGQ1FVRnhRaXhUUVVGVE1XOUVMRWRCUVVjc1QwRkJUemxDTEVWQlFVVTRRaXhMUVVGTExGTkJRVk5CTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEdGQlFXRktMRTlCUVU5RExHVkJRV1ZQTEVWQlFVVXNZVUZCWVN4RFFVRkRSQ3hQUVVGTkxFbEJRVXNzU1VGQlNWRXNSVUZCUlZnc1JVRkJSU3hIUVVGSFRDeEZRVUZGU3l4RlFVRkZMRWRCUVVkSkxFVkJRVVY1YzBRc01FSkJRVEJDTEZOQlFWTndja1FzUjBGQlJ5eEhRVUZIWkN4RlFVRkZjWE5FTEhGQ1FVRnhRaXhEUVVGRExFbEJRVWsxYzBRc1JVRkJSU3hEUVVGRE5uTkVMRmxCUVZsNGNrUXNSVUZCUlhGeVJDeG5Ra0ZCWjBJc1ZVRkJWU3hsUVVGbExFOUJRVTl1YzBRc1JVRkJSWFZ6UkN3MlFrRkJOa0k1YzBRc1IwRkJSeXhQUVVGUFZDeEZRVUZGZDNSRUxHRkJRV0VzUTBGQlEwd3NaMEpCUVdkQ2NuSkVMRVZCUVVWeGNrUXNiMEpCUVc5Q0xGTkJRVk55Y2tRc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1lVRkJZU3hKUVVGSlZ5eEZRVUZGZVVJc1RVRkJUVUVzUzBGQlMyZHlSQ3hWUVVGVkxGZEJRVmNzVDBGQlQzcHpSQ3hGUVVGRlppeFBRVUZQZFdoRExGRkJRVkVzVTBGQlV6RXZRaXhIUVVGSExFbEJRVWtzU1VGQlNYSkNMRVZCUVVWS0xFVkJRVVVzUlVGQlJWY3NSVUZCUlc5TExGVkJRVlYyU2l4UFFVRlBlRUlzUlVGQlJWY3NSVUZCUlZnc1NVRkJTU3hKUVVGSkxFbEJRVWxNTEV0QlFVdFRMRVZCUVVVeVN5eFZRVUZWTDBzc1IwRkJSMG9zVDBGQlQydENMRlZCUVZWRExHVkJRV1V4UWl4TFFVRkxaU3hGUVVGRlZDeExRVUZMT0VJc1JVRkJSVGxDTEVkQlFVZFRMRVZCUVVWVUxFbEJRVWtzVDBGQlR6aENMRWxCUVVseFNpeE5RVUZOTVVrc1MwRkJTekpKTEZsQlFWbHVUQ3hQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFNMRVZCUVVWTExFVkJRVVVzUjBGQlIybENMRVZCUVVWcVFpeEZRVUZGTEVkQlFVZEpMRVZCUVVVNGMwUXNOa0pCUVRaQ0xGTkJRVk42Y2tRc1IwRkJSeXhQUVVGUExGTkJRVk55UWl4SFFVRkhMRTlCUVU4c1UwRkJVM0ZDTEVWQlFVVnlRaXhIUVVGSExFOUJRVTl4UWl4RlFVRkZkVllzVDBGQlR5OVdMRVZCUVVVclZpeE5RVUZOTEdWQlFXVjJWaXhIUVVGSExFbEJRVWwyUXl4RlFVRkZkVU1zUlVGQlJYSkNMRWRCUVdoRkxFTkJRVzlGUVN4RlFVRkZjVUlzUzBGQlN5eEpRVUZKZGtNc1JVRkJSU3hYUVVGWExGTkJRVk4xUXl4RlFVRkZRU3hGUVVGRmNrSXNSMEZCUjJkRExFdEJRVXRwY2tRc1YwRkJWU3hGUVVGSGFuSkVMRXRCUVV0cmNrUXNWMEZCVjI1eFJDeExRVUZMYjNGRUxHbENRVUZwUWl4SlFVRkpRU3huUWtGQlowSnVja1FzUzBGQlMyOXlSQ3hSUVVGUkwzSkVMRVZCUVVWWExFdEJRVXR4Y2tRc1MwRkJTM0owUkN4RlFVRkZMRTlCUVU5eFFpeEZRVUZGV0N4VlFVRlZOSE5FTEV0QlFVc3NVMEZCVTJwelJDeEZRVUZGY2tJc1IwRkJSeXhKUVVGSlNpeEZRVUZGYjBNc1MwRkJTeXhIUVVGSFFTeExRVUZMZFhKRUxFOUJRVTlzYzBRc1JVRkJSVmNzUzBGQlMybHlSQ3hWUVVGVkxFOUJRVTlxY2tRc1MwRkJTMjl5UkN4UlFVRlJlREpETEU5QlFVOHZWaXhGUVVGRksxWXNUVUZCVFN4M1EwRkJkME0xVlN4TFFVRkxkWEpFTEU5QlFVODVRaXhUUVVGVGVuQkVMRXRCUVV0MWNrUXNUMEZCVDBNc1QwRkJUME1zVFVGQlN5eFRRVUZUY0hORUxFZEJRVWNzUjBGQlIwRXNSVUZCUlhGblJDeExRVUZMTEU5QlFVODVhRVFzUlVGQlJYZDBSQ3hSUVVGUmVFUXNVVUZCVVRWd1JDeEZRVUZGU2l4RlFVRkZkM1JFTEZGQlFWRXhSQ3hSUVVGUmNtOUVMRVZCUVVWMFFpeFBRVUZQU0N4RlFVRkZNSFJFTEV0QlFVc3hkRVFzUlVGQlJUSjBSQ3hQUVVGUGRuUkVMRTFCUVVzd2RFUXNUMEZCVFN4VFFVRlRjbk5FTEVkQlFVZDZRaXhGUVVGRmNYUkVMRlZCUVZWeWRFUXNSVUZCUlhkMFJDeFJRVUZSZURKRExFOUJRVTh2Vml4RlFVRkZLMVlzVFVGQlRTeHZRMEZCYjBOb1dDeEZRVUZGY1hSRUxGZEJRVlVzUlVGQlIzSjBSQ3hGUVVGRmQzUkVMRkZCUVZGNE1rTXNUMEZCVHk5V0xFVkJRVVVyVml4TlFVRk5MR05CUVdOMlZpeEZRVUZGYTFRc1UwRkJVek5WTEVWQlFVVjNkRVFzVVVGQlVYaEVMRTFCUVUxMmIwUXNVVUZCVDBFc1JVRkJSVmdzVlVGQlZXMUpMRXRCUVVzc1UwRkJVM2hJTEVkQlFVY3NTVUZCU1hKQ0xFVkJRVVZuUXl4TFFVRkxNbkpFTEUxQlFVMHpja1FzUzBGQlMyOXlSQ3hSUVVGUmFpOUNMRWxCUVVrMWRFSXNSVUZCUlN4SFFVRkhlVUlzUzBGQlMzRnlSQ3hMUVVGTExFTkJRVU5QTEZGQlFWRTFja1FzUzBGQlN6WnlSQ3hUUVVGVGVFSXNXVUZCV1hsQ0xFOUJRVThzVDBGQlQwTXNTMEZCU3pGelJDeEZRVUZGTW5ORUxFOUJRVTlvYzBRc1MwRkJTMnR5UkN4WlFVRlpiSEpFTEV0QlFVdHJja1FzVjBGQlYyTXNWVUZCVlZBc1RVRkJTeXhUUVVGVGNITkVMRWRCUVVjc1IwRkJSM0pDTEVWQlFVVnZkRVFzVVVGQlVYZ3lReXhQUVVGUEwxWXNSVUZCUlN0V0xFMUJRVTBzYVVKQlFXbENkbFlzUjBGQlIzSkNMRVZCUVVWdmRFUXNVVUZCVVRWRUxGVkJRVlVzU1VGQlNXcHhSQ3hGUVVGRk5HOUVMRk5CUVZNNWJVUXNSVUZCUlhWelJDeFRRVUZUZG5ORUxFVkJRVVY1U0N4VFFVRlRla2dzUlVGQlJUQnpSQ3hMUVVGTExFOUJRVTh4YzBRc1JVRkJSWEpDTEVWQlFVVnpkRVFzUzBGQlMycHpSQ3hGUVVGRk1ITkVMRXRCUVV0RkxGbEJRVmsxYzBRc1RVRkJTM0Z6UkN4UFFVRk5MRk5CUVZOeWMwUXNSMEZCUjNKQ0xFVkJRVVZwZEVRc1ZVRkJWV3AwUkN4RlFVRkZiM1JFTEZGQlFWRjRNa01zVDBGQlR5OVdMRVZCUVVVclZpeE5RVUZOTEc5RFFVRnZRelZYTEVWQlFVVnBkRVFzVjBGQlZTeEZRVUZIYW5SRUxFVkJRVVZ2ZEVRc1VVRkJVWGd5UXl4UFFVRlBMMVlzUlVGQlJTdFdMRTFCUVUwc1kwRkJZM1pXTEVWQlFVVnJWQ3hUUVVGVGRsVXNSVUZCUlc5MFJDeFJRVUZSZUVRc1RVRkJUWFp2UkN4UlFVRlBRU3hGUVVGRldDeFZRVUZWTkhGRUxGbEJRVmtzVTBGQlUycHhSQ3hIUVVGSFZ5eExRVUZMTmtjc1MwRkJTM2hJTEVsQlFVbEJMRVZCUVVWWUxGVkJRVlUyY1VRc1YwRkJWeXhoUVVGaGJIRkVMRVZCUVVWWUxGVkJRVlY1Y1VRc1RVRkJUU3hUUVVGVE9YQkVMRWRCUVVkWExFdEJRVXMyY2tRc1UwRkJVM2h6UkN4SFFVRkhRU3hGUVVGRldDeFZRVUZWSzNGRUxFOUJRVThzVjBGQlYzcHdSQ3hMUVVGTGFYSkVMRlZCUVZWcWNrUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTh2Vml4RlFVRkZLMVlzVFVGQlRTeDVRMEZCZVVNMVZTeExRVUZMYVhKRUxGZEJRVlVzUlVGQlIycHlSQ3hMUVVGTGRYSkVMRkZCUVZGMmNrUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTh2Vml4RlFVRkZLMVlzVFVGQlRTeHpRa0ZCYzBJMVZTeExRVUZMZFhKRUxFOUJRVTg1UWl4VlFVRlZlbkJFTEV0QlFVdHZja1FzVVVGQlVYZ3lReXhQUVVGUEwxWXNSVUZCUlN0V0xFMUJRVTBzYjBOQlFXOUROVlVzUzBGQlMydHlSQ3haUVVGWmJISkVMRXRCUVV0cmNrUXNWMEZCVjJkQ0xGVkJRVlUzYzBRc1JVRkJOV3BFTEVkQlFXbHJSSEpDTEVWQlFVVTBjMFFzYlVKQlFXMUNMRmRCUVZjc1RVRkJUU3h2UWtGQmIwSjFRaXhWUVVGVlFTeFRRVUZUZW5SRUxGVkJRVlZETEdWQlFXVXNVMEZCVXl4dFFrRkJiVUpwY2tRc1ZVRkJWU3hUUVVGVGRuRkVMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMR0ZCUVdFc1NVRkJTVmNzUlVGQlJXaENMRVZCUVVWNVF5eE5RVUZOUVN4TFFVRkxiM05FTEZsQlFWazNkRVFzUlVGQlJTeFRRVUZUWXl4RlFVRkZja0lzUjBGQlJ5eFBRVUZQVHl4RlFVRkZaaXhQUVVGUE5uVkVMR2RDUVVGblFpeERRVUZEUXl4VlFVRlZMR05CUVdONmMwUXNUMEZCVHl4VFFVRlRVaXhGUVVGRmNrSXNSMEZCUjNGQ0xFVkJRVVZwZEVRc1ZVRkJWWFIxUkN4SlFVRkpMRk5CUVZOeFFpeEZRVUZGY2tJc1IwRkJSeXhKUVVGSkxFbEJRVWxLTEV0QlFVdEpMRVZCUVVWQkxFVkJRVVZYTEdWQlFXVm1MRXRCUVV0NVFpeEZRVUZGZWtJc1IwRkJSMGtzUlVGQlJVb3NUVUZCVFhsQ0xFVkJRVVZ5UWl4SlFVRkpMRk5CUVZOeFFpeEZRVUZGY2tJc1IwRkJSeXhUUVVGVFNpeEpRVUZKYjBNc1MwRkJTemhMTEZsQlFWbDZUQ3hGUVVGRlpDeEZRVUZGWXl4RlFVRkZja0lzUjBGQlIzRkNMRVZCUVVWWUxGVkJRVlVzVDBGQlQxWXNSVUZCUlZJc1QwRkJUMWtzVDBGQlQwb3NTVUZCU1Vvc1JVRkJSV01zVlVGQlZWWXNSVUZCUlZVc1ZVRkJWU3hKUVVGSlpDeExRVUZMU2l4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxqTEVWQlFVVnFRaXhGUVVGRkxFZEJRVWRrTEVWQlFVVmpMRVZCUVVVc1IwRkJSM0ZDTEVWQlFVVnlRaXhGUVVGRkxFbEJRVWxKTEVWQlFVVXJjMFFzWVVGQllTeFRRVUZUTVhKRUxFZEJRVWNzVDBGQlR5eFRRVUZUY2tJc1IwRkJSeXhIUVVGSGFVSXNSVUZCUlhOMFJDeHpRa0ZCYzBJc1QwRkJUeXhKUVVGSmJuWkVMRVZCUVVWWkxFVkJRVVZ4UWl4SFFVRkhMRWRCUVVkS0xFVkJRVVYxZEVRc2JVTkJRVzFETEU5QlFVOHNTVUZCU1c1SExFVkJRVVZ5YjBRc1JVRkJSWEZDTEVkQlFVY3NUVUZCVFN4SlFVRkpPRU1zVFVGQlRTd3lSVUZCTWtVc1NVRkJTV3RyUkN4RlFVRkZMRmRCUVZjc1UwRkJVMmh1UkN4RlFVRkZRU3hGUVVGRmNrSXNSMEZCUjJkRExFdEJRVXR2Y2tRc1VVRkJVUzl5UkN4RlFVRkZWeXhMUVVGTGNYSkVMRXRCUVV0eWRFUXNSVUZCUlN4UFFVRlBjVUlzUlVGQlJWZ3NWVUZCVlN0MFJDeG5Ra0ZCWjBJc1YwRkJWM3B6UkN4TFFVRkxiM0pFTEZGQlFWRjRNa01zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEN0Q1FVRXJRalZWTEV0QlFVc3djMFFzU1VGQlNVTXNVMEZCVTNaMFJDeFJRVUZSTEVsQlFVbERMRVZCUVVWWExFdEJRVXN3YzBRc1NVRkJTVU1zVTBGQlUzUm5SQ3hQUVVGUGNrMHNTMEZCUzIxakxFOUJRVTl1WXl4TFFVRkxiV01zVFVGQlRXNWpMRXRCUVVzd2MwUXNTVUZCU1VNc1UwRkJVM1owUkN4UFFVRlBMRWxCUVVsd1FpeEZRVUZGV1N4RlFVRkZVeXhIUVVGSFZ5eExRVUZMYjNKRUxGRkJRVkV4UkN4UlFVRlJNWEJFTEVsQlFVbHhRaXhGUVVGRldDeFZRVUZWYTNWRUxGbEJRVmtzVjBGQlZ6VnpSQ3hMUVVGTGIzSkVMRkZCUVZGNE1rTXNUMEZCVHpsWUxFVkJRVVU0V0N4TlFVRk5MRzFDUVVGdFFqVlZMRXRCUVV0dmNrUXNVVUZCVVhoRUxGTkJRVk4yYjBRc1JVRkJSVmdzVlVGQlZXMTFSQ3hqUVVGakxGZEJRVmMzYzBRc1MwRkJTMjl5UkN4UlFVRlJlREpETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN4dlFrRkJiMEkxVlN4TFFVRkxNSE5FTEVsQlFVa3paMFFzV1VGQldTOU1MRXRCUVVzd2MwUXNTVUZCU1ROblJDeGhRVUZoY0VZc1pVRkJaVzF0UkN4clFrRkJhMEk1YzBRc1MwRkJTMjl5UkN4UlFVRlJOVVFzVlVGQlZTeEpRVUZKTTI5RUxFVkJRVVZ6YmtRc1UwRkJVMjV0UkN4TFFVRkxNSE5FTEVsQlFVbExMSGxDUVVGNVFpOXpSQ3hMUVVGTE1ITkVMRWxCUVVrMWJFUXNVMEZCVTNwSUxFVkJRVVZZTEZWQlFWVTBjVVFzV1VGQldTeFRRVUZUYW5GRUxFZEJRVWRYTEV0QlFVc3djMFFzU1VGQlNUZHNSQ3hMUVVGTGVFZ3NTVUZCU1VFc1JVRkJSVmdzVlVGQlZUWnhSQ3hYUVVGWExHRkJRV0ZzY1VRc1JVRkJSVmdzVlVGQlZYbHhSQ3hOUVVGTkxGTkJRVk01Y0VRc1IwRkJSeXhKUVVGSmNrSXNSVUZCUldkRExFdEJRVXRCTEV0QlFVczJja1FzVTBGQlUzaHpSQ3hGUVVGRkxFbEJRVWw2UWl4RlFVRkZMRWxCUVVrclNTeGxRVUZsTTBjc1MwRkJTekJ6UkN4SlFVRkpPWFZFTEVWQlFVVkJMRVZCUVVWblNpeExRVUZMTEU5QlFVODFSeXhMUVVGTGIzSkVMRkZCUVZGcUwwSXNTMEZCUzI1elFpeExRVUZMWjNSRUxHVkJRV1ZvZEVRc1MwRkJTelp5UkN4VFFVRlRjRFZETEZOQlFWRXNVMEZCVTNCVUxFVkJRVVZ5UWl4SFFVRkhTaXhGUVVGRmNYWkVMR2xDUVVGcFFqVjBSQ3hGUVVGRmNrSXNSVUZCUlhkSkxFdEJRVXNzVlVGQlV6VkpMRVZCUVVVNGMwUXNaMEpCUVdkQ2QwTXNVVUZCVVd4MFJDeExRVUZMY1hKRUxFdEJRVXRZTEdsQ1FVRnBRamx6UkN4RlFVRkZkWFpFTEdsQ1FVRnBRaXh0UWtGQmJVSnVkRVFzUzBGQlN6WnpSQ3hqUVVGamRuVkVMRXRCUVVzd1FpeFBRVUZQY0VNc1JVRkJSWFYyUkN4cFFrRkJhVUlzVjBGQlYyNTBSQ3hMUVVGTGVYTkVMR2RDUVVGblFtNTFSQ3hMUVVGTE1FSXNUMEZCVDNCRExFVkJRVVYxZGtRc2FVSkJRV2xDTEZWQlFWVnVkRVFzUzBGQlN6UnpSQ3haUVVGWmRIVkVMRXRCUVVzd1FpeFBRVUZQY0VNc1JVRkJSWFYyUkN4cFFrRkJhVUlzVTBGQlVTeFRRVUZUT1hSRUxFZEJRVWR5UWl4RlFVRkZiM1JFTEZGQlFWRjRNa01zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEZsQlFWbDJWaXhIUVVGSGNrSXNSVUZCUlc5MFJDeFJRVUZSZUVRc1RVRkJUWFp2UkN4RlFVRkZkMFlzVjBGQlZYaEdMRVZCUVVWWUxGVkJRVlZ6ZFVRc1lVRkJZU3hYUVVGWGFIUkVMRXRCUVVzd2MwUXNTVUZCU1M5RUxHRkJRV0VzVDBGQlR6TnZSQ3hMUVVGTE1ITkVMRWxCUVVsVkxHbENRVUZwUWl4MVEwRkJkVU12ZEVRc1JVRkJSVmdzVlVGQlZTdHhSQ3hQUVVGUExGZEJRVmQ2Y0VRc1MwRkJTMjl5UkN4UlFVRlJlREpETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN4aFFVRmhOVlVzUzBGQlN6QnpSQ3hKUVVGSlVpeFRRVUZUTjNORUxFVkJRVFV2UXl4SFFVRnBaMFJ5UWl4RlFVRkZjWFpFTEVsQlFVbG9TQ3hGUVVGRkxFbEJRVWxxY0VRc1JVRkJSU3hUUVVGVGFVTXNSMEZCUnl4VFFVRlRja0lzU1VGQlNTeFBRVUZQTEU5QlFVOXhRaXhIUVVGSFFTeEZRVUZGY1Vvc1RVRkJUVEZKTEV0QlFVc3lTU3haUVVGWk0wa3NTMEZCU3l4UFFVRlBla01zUlVGQlJWTXNSVUZCUlhGQ0xFZEJRVWR5UWl4RlFVRkZWU3hWUVVGVmMzVkVMR0ZCUVdFc1YwRkJWMmgwUkN4TFFVRkxiM0pFTEZGQlFWRjRNa01zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTERCRlFVRXdSVFZWTEV0QlFVc3djMFFzU1VGQlNTOUVMR0ZCUVdFc01rSkJRVEpDTTNGRUxFVkJRVVZWTEZWQlFWVXJkRVFzWjBKQlFXZENMRmRCUVZjc1NVRkJTWEIwUkN4RlFVRkZWeXhMUVVGTE1ITkVMRWxCUVVsRExGTkJRVk16YzBRc1MwRkJTMjl5UkN4UlFVRlJlREpETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN3eVFrRkJNa0lzU1VGQlNYTXlRaXhYUVVGWE4zSkRMRWxCUVVsWExFdEJRVXR2Y2tRc1VVRkJVVEZFTEZGQlFWRXNTVUZCU1hoakxGZEJRVmMzY2tNc1MwRkJTM0pDTEVWQlFXNWpMRU5CUVhOamNXOUVMRWRCUVVjc1UwRkJVMnh3UkN4RlFVRkZhME1zUlVGQlJYSkNMRWRCUVVjc1NVRkJTVW9zUlVGQlJYbENMRVZCUVVWeFpTeFhRVUZYTVdZc1IwRkJSeXhIUVVGSFNpeEhRVUZITEU5QlFVOUJMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWxYTEVWQlFVVmpMRVZCUVVWeFpTeFhRVUZYTVdZc1JVRkJSU3hIUVVGSFR5eEhRVUZITEU5QlFVOUJMRWRCUVVjc1VVRkJVVmdzUlVGQlJTeFBRVUZQUVN4RlFVRkZMRTlCUVU4c1MwRkJTMWNzUlVGQlJTeFJRVUZSTEU5QlFVOVlMRVZCUVVVc1UwRkJVMmRDTEVWQlFVVlRMRWRCUVVjc1NVRkJTU3hKUVVGSmNrSXNSVUZCUlN4SlFVRkphM1JETEZkQlFWYzNja01zUlVGQlJVUXNVVUZCVVhoQ0xFVkJRVVVzUlVGQlJWY3NSVUZCUlN4RlFVRkZRU3hGUVVGRll5eEZRVUZGUkN4UFFVRlBZaXhKUVVGSkxFTkJRVU1zU1VGQlNXaENMRVZCUVVVMFFpeFBRVUZQVkN4VlFVRlZOSFZFTEZsQlFWbHFkVVFzUlVGQlJXbDFSQ3haUVVGWkwzVkVMRWRCUVVkd1FpeEZRVUZGYTBNc1JVRkJSV1FzUjBGQlIxQXNSVUZCUlVvc1MwRkJTeXhKUVVGSlRDeEZRVUZGTEU5QlFVOVRMRVZCUVVWQkxFVkJRVVYxZGtRc2VVSkJRWGxDYm5kRUxFVkJRVVZaTEVWQlFVVjNka1FzYjBKQlFXOUNOWFZFTEVkQlFVY3NVMEZCVTFNc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1lVRkJZVW9zVDBGQlQwTXNaVUZCWlU4c1JVRkJSU3hoUVVGaExFTkJRVU5FTEU5QlFVMHNTVUZCU3l4SlFVRkpVU3hGUVVGRmFFSXNSVUZCUlVzc1JVRkJSU3hIUVVFclF5eFRRVUZUWkN4RlFVRkZkVU1zUjBGQlJ5eFBRVUY0UkN4VFFVRlRRU3hIUVVGSExFOUJRVThzU1VGQlNVRXNSMEZCUnl4TFFVRkxRU3hIUVVGSExFdEJRVXRCTEVWQlFYZENVaXhEUVVGRlVTeEpRVUZKUVN4SFFVRkhMRWxCUVVsQkxFZEJRVWNzU1VGQlNTeFRRVUZUU2l4RlFVRkZTU3hIUVVGSExFbEJRVWtzU1VGQlNYSkNMRVZCUVVVc1JVRkJSVUVzU1VGQlNYRkNMRVZCUVVWRUxGTkJRVk53UWl4RlFVRkZMRWxCUVVsc1FpeEZRVUZGZFVNc1JVRkJSWEpDTEVsQlFVa3NUVUZCVFN4SlFVRkpiVVVzVFVGQlRTd3lRMEZCTWtNc1QwRkJUMmhFTEU5QlFVOTVaU3hoUVVGaGJGWXNUVUZCVFhaS0xFOUJRVTlWTEUxQlFVMXVRaXhWUVVGVmJVc3NUVUZCVFRWTUxFdEJRVXR2UXl4SlFVRkpMRk5CUVZObmJrUXNSVUZCUldodVJDeEhRVUZITEU5QlFVOHNUVUZCVFN4SlFVRkpRU3hGUVVGRmIzVkVMRk5CUVZNc1NVRkJTU3hUUVVGVGNuZEVMRVZCUVVWcFF5eEhRVUZITEU5QlFVOUJMRVZCUVVWeGRVUXNWVUZCVlN4SFFVRkZMRWRCUVVrc1UwRkJVM1ozUkN4RlFVRkZhME1zUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzVDBGQlQzbENMRVZCUVVWemRVUXNWMEZCVnpOMlJDeEhRVUZIU2l4RlFVRkZMRk5CUVZOblFpeEZRVUZGVXl4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4SFFVRkhlVUlzUlVGQlJYZEtMRTFCUVUwc1QwRkJUM2hLTEVWQlFVVjNTaXhOUVVGTk4wc3NSVUZCUlVvc1IwRkJSeXhKUVVGSlZ5eEZRVUZGWXl4RlFVRkZSQ3haUVVGUExFbEJRVk40UWl4SlFVRkpWeXhGUVVGRldDeEhRVUZITEVsQlFVa3NTVUZCU1V3c1JVRkJSU3hKUVVGSk1uUkRMRmRCUVZjemMwTXNSVUZCUlZBc1IwRkJSMkVzUlVGQlJTeEZRVUZGTDBJc1JVRkJSV3RDTEVWQlFVVnNRaXhGUVVGRmVVSXNSVUZCUlhwQ0xFbEJRVWxUTEVWQlFVVnpRaXhMUVVGTFVTeEZRVUZGZGtNc1IwRkJSeXhQUVVGUFV5eEZRVUZGVXl4RlFVRkZOSFpFTEZsQlFWa3pkVVFzUlVGQlJXcENMRVZCUVVVMmRrUXNXVUZCV1N4VFFVRlRlSFZFTEVkQlFVY3NTVUZCU1N4SlFVRkpja0lzUlVGQlJTeEpRVUZKYTNSRExGZEJRVmMzY2tNc1JVRkJSVVFzVVVGQlVYaENMRVZCUVVVc1JVRkJSVUVzU1VGQlNYbENMRVZCUVVWRUxGTkJRVk40UWl4RlFVRkZMRU5CUVVNc1NVRkJTVmNzUlVGQlJXTXNSVUZCUlhGbExGZEJRVmM1Wml4SFFVRkhMRWxCUVVsa0xFVkJRVVY1UWl4SFFVRkhMRTFCUVUwc1NVRkJTVFJFTEUxQlFVMHNiVU5CUVcxRGJrVXNSVUZCUlVvc1IwRkJSMWNzUlVGQlJTeFBRVUZQVUN4SFFVRkhMRk5CUVZOeFFpeEhRVUZIUVN4RlFVRkZRU3hGUVVGRmExb3NVVUZCVVN4SFFVRkhMRlZCUVZWc1dpeEZRVUZGUVN4RlFVRkZkM0JFTEZOQlFWTXNSMEZCUnl4WFFVRnlSQ3hEUVVGcFJYUnhSQ3hGUVVGRlVDeEZRVUZGTUhGRUxGbEJRVmt4Y1VRc1JVRkJSVEJ4UkN4VlFVRlZMRXRCUVVzc1NVRkJTV2c0UXl4RlFVRkZMRmRCUVZjc1UwRkJVM0pPTEVsQlFVbFhMRXRCUVVzNGRFUXNUMEZCVHl4TFFVRkxPWFJFTEV0QlFVc3JkRVFzVTBGQlV5eEZRVUZGTEU5QlFVOHhkVVFzUlVGQlJWZ3NWVUZCVlRad1JDeE5RVUZOTEZOQlFWTnNjRVFzUlVGQlJYSkNMRWRCUVVjc1IwRkJSeXhKUVVGSmNVSXNSVUZCUlVRc1VVRkJVWEJDTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVsS0xFVkJRVVZwUWl4RlFVRkZMRWRCUVVjc1IwRkJSeXhOUVVGTmJVSXNTMEZCU3poMFJDeFBRVUZQT1hSRUxFdEJRVXM0ZEVRc1QwRkJUM3AxUkN4RlFVRkZWeXhMUVVGTEszUkVMRk5CUVZNc1QwRkJUeXhIUVVGSEwzUkVMRXRCUVVzcmRFUXNWMEZCVnk5MFJDeExRVUZMT0hSRUxFOUJRVTlJTEZkQlFWY3pkRVFzUzBGQlN6aDBSQ3hQUVVGUGVuVkVMRVZCUVVWWExFdEJRVXNyZEVRc1UwRkJVeXhOUVVGTkxFTkJRVU1zU1VGQlNXcDRSQ3hGUVVGRmEwUXNTMEZCU3poMFJDeFBRVUZQU0N4WFFVRlhNM1JFTEV0QlFVc3JkRVFzVTBGQlUzSm9SQ3hGUVVGRkxFbEJRVWwzSzBJc1YwRkJWM0IxUXl4RlFVRkZkVU1zUlVGQlJYTjFSQ3haUVVGWmNuVkVMRVZCUVVWV0xFVkJRVVZ2UWl4TFFVRkxPSFJFTEU5QlFVODVkRVFzUzBGQlN5dDBSQ3hWUVVGVmNtaEVMRVZCUVVWclNDeEpRVUZKZEZVc1JVRkJSU3hIUVVGSExFbEJRVWwyUXl4RlFVRkZMRWxCUVVsdGRVTXNWMEZCVnpkeVF5eEhRVUZIY1U0c1JVRkJSV3RJTEVsQlFVazNWeXhGUVVGRlJDeEhRVUZIYTBRc1MwRkJTemgwUkN4UFFVRlBjR2hFTEVWQlFVVXhUU3hMUVVGTEszUkVMRk5CUVZNc1JVRkJSU3hQUVVGUExFTkJRVU1zU1VGQlNUVjNSQ3hGUVVGRk5rTXNTMEZCU3poMFJDeFBRVUZQT1hSRUxFdEJRVXNyZEVRc1UwRkJVeXhIUVVGSExFOUJRVTlzZGtRc1JVRkJSU3hKUVVGSk9FSXNSVUZCUlM5Q0xFVkJRVVZ2UWl4TFFVRkxPSFJFTEU5QlFVODVkRVFzUzBGQlN5dDBSQ3hUUVVGVEwzUkVMRXRCUVVzcmRFUXNVMEZCVXl4SFFVRkhOM1ZFTEVWQlFVVXNTVUZCU1RoMVJDeFRRVUZUY25SRUxFVkJRVVZ0ZEVRc1QwRkJUMjUwUkN4RlFVRkZjM1JFTEZkQlFWZDBkRVFzUlVGQlJXZDBSQ3haUVVGWlR5eEZRVUZGT1hkRUxFVkJRVVU0UWl4SFFVRkhMRWxCUVVrdlFpeEZRVUZGTmtNc1MwRkJTemgwUkN4UFFVRlBPWFJFTEV0QlFVc3JkRVFzVTBGQlV5eEZRVUZGUnl4SFFVRkhMRTlCUVU5eWRrUXNSVUZCUlN4SlFVRkpWU3hGUVVGRldDeEZRVUZGYjBJc1MwRkJTemgwUkN4UFFVRlBPWFJFTEV0QlFVc3JkRVFzVTBGQlV5eEZRVUZGTDNSRUxFdEJRVXNyZEVRc1UwRkJVeXhGUVVGRlJ5eEhRVUZITEVkQlFVZHNkVVFzUzBGQlN5dDBSQ3hWUVVGVkxFVkJRVVZITEVWQlFVVTNTQ3hGUVVGRmJtNUVMRWRCUVVjc1QwRkJUMHdzUlVGQlJYRkxMRXRCUVVzc1EwRkJRM1V2UXl4VlFVRlZiSEZFTEVWQlFVVnpjVVFzVTBGQlUwVXNWVUZCVlc1eVJDeEZRVUZGTWtJc1JVRkJSU3hKUVVGSmFFTXNSVUZCUlRSdlJDeFRRVUZUYkc1RUxFVkJRVVZ5UWl4UFFVRlBhVUlzUlVGQlJVRXNSVUZCUlhGTExFdEJRVXNzUTBGQlEzVXZReXhWUVVGVmJIRkVMRVZCUVVWbllTeFJRVUZSTm1oQ0xFdEJRVXMzTmtJc1RVRkJUVVlzUlVGQmRqRkNMRWRCUVRReFFuSkNMRVZCUVVWbmNFUXNXVUZCV1hRMlF5eEhRVUZITEZOQlFWTnlUaXhGUVVGRmNrSXNSVUZCUlVvc1IwRkJSeXhoUVVGaExFbEJRVWxYTEVWQlFVVm1MRTlCUVU5RExHVkJRV1ZQTEVWQlFVVXNZVUZCWVN4RFFVRkRSQ3hQUVVGTkxFbEJRVXNzVTBGQlUzTkNMRWRCUVVkQkxFVkJRVVZCTEVWQlFVVXJiMFFzUjBGQlJ5eEhRVUZITEV0QlFVc3ZiMFFzUlVGQlJVRXNSVUZCUlRoMVJDeFRRVUZUTEVkQlFVY3NWMEZCVnpsMVJDeEZRVUZGUVN4RlFVRkZOSEJFTEZGQlFWRXNSMEZCUnl4VlFVRlZOWEJFTEVWQlFVVkJMRVZCUVVVcmRVUXNaMEpCUVdkQ0xFZEJRVWNzYTBKQlFXdENMM1ZFTEVWQlFVVkJMRVZCUVVWbmRrUXNhVUpCUVdsQ0xFZEJRVWNzYlVKQlFXMUNhSFpFTEVWQlFVVkJMRVZCUVVWcGRrUXNVMEZCVXl4SFFVRkhMRmRCUVZkcWRrUXNSVUZCUlVFc1JVRkJSV3QyUkN4alFVRmpMRWRCUVVjc1owSkJRV2RDYkhaRUxFVkJRVVZCTEVWQlFVVnRka1FzYVVKQlFXbENMRWRCUVVjc2JVSkJRVzFDYm5aRUxFVkJRVVZCTEVWQlFVVnZka1FzYTBKQlFXdENMRWRCUVVjc2IwSkJRVzlDY0haRUxFVkJRVVZCTEVWQlFVVnhka1FzYlVKQlFXMUNMRWRCUVVjc2NVSkJRWEZDY25aRUxFVkJRVVZCTEVWQlFVVnpka1FzVVVGQlVTeEpRVUZKTEZWQlFWVjBka1FzUlVGQlJVRXNSVUZCUlhWMlJDeFhRVUZYTEVsQlFVa3NZVUZCWVhaMlJDeEZRVUZGUVN4RlFVRkZkM1pFTEdOQlFXTXNTVUZCU1N4blFrRkJaMEo0ZGtRc1JVRkJSVUVzUlVGQlJXMXdSQ3hUUVVGVExFbEJRVWtzVjBGQlYyNXdSQ3hGUVVGRlFTeEZRVUZGZVhaRUxGbEJRVmtzU1VGQlNTeGpRVUZqZW5aRUxFVkJRVVZCTEVWQlFVVXdka1FzVTBGQlV5eEpRVUZKTEZkQlFWY3hka1FzUlVGQlJVRXNSVUZCUlRKMlJDeG5Ra0ZCWjBJc1NVRkJTU3hyUWtGQk5XcENMRU5CUVN0clFucDNSQ3hGUVVGRlVDeEZRVUZGYlhGRUxFOUJRVTl1Y1VRc1JVRkJSVzF4UkN4TFFVRkxMRXRCUVV0dWNVUXNSVUZCUldseFJDeHBRa0ZCYVVJc1UwRkJVelZ2UkN4SFFVRkhMRTlCUVU5QkxFZEJRVWNzUzBGQlN5eEZRVUZGTEU5QlFVOWtMRVZCUVVWcGNVUXNVMEZCVXl4TFFVRkxMRWxCUVVrc1QwRkJUMnB4UkN4RlFVRkZObkJFTEVkQlFVY3NTMEZCU3l4SlFVRkpMRTlCUVU4M2NFUXNSVUZCUlRaMlJDeG5Ra0ZCWjBJc1MwRkJTeXhKUVVGSkxFOUJRVTgzZGtRc1JVRkJSWGwzUkN4blFrRkJaMElzUzBGQlN5eEpRVUZKTEU5QlFVOTZkMFFzUlVGQlJXbDNSQ3hwUWtGQmFVSXNTMEZCU3l4SlFVRkpMRTlCUVU5cWQwUXNSVUZCUlN0MlJDeFRRVUZUTEV0QlFVc3NTVUZCU1N4UFFVRlBMM1pFTEVWQlFVVnZkMFFzVVVGQlVTeExRVUZMTEVsQlFVa3NUMEZCVDNCM1JDeEZRVUZGYlhkRUxHMUNRVUZ0UWl4TFFVRkxMRWxCUVVrc1QwRkJUMjUzUkN4RlFVRkZhM2RFTEd0Q1FVRnJRaXhMUVVGTExFbEJRVWtzVDBGQlQyeDNSQ3hGUVVGRk5IWkVMRk5CUVZNc1MwRkJTeXhKUVVGSkxFOUJRVTgxZGtRc1JVRkJSVEJ4UkN4UlFVRlJMRXRCUVVzc1NVRkJTU3hQUVVGUE1YRkVMRVZCUVVWemQwUXNZMEZCWXl4TFFVRkxMRWxCUVVrc1QwRkJUM1IzUkN4RlFVRkZkWGRFTEZsQlFWa3NTMEZCU3l4SlFVRkpMRTlCUVU5MmQwUXNSVUZCUlRoMlJDeHBRa0ZCYVVJc1VVRkJVU3hQUVVGUE9YWkVMRVZCUVVVd2NVUXNWMEZCVnl4VFFVRlROWEJFTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEdGQlFXRktMRTlCUVU5RExHVkJRV1ZQTEVWQlFVVXNZVUZCWVN4RFFVRkRSQ3hQUVVGTkxFbEJRVXNzU1VGQlNWRXNSVUZCUlZnc1JVRkJSU3hIUVVGSFRDeEZRVUZGU3l4RlFVRkZMRWRCUVVkcFFpeEZRVUZGYWtJc1JVRkJSU3hIUVVGSFpDeEZRVUZGWXl4RlFVRkZMRWxCUVVseFFpeEZRVUZGY2tJc1JVRkJSU3hIUVVGSGVXOUVMRVZCUVVWNmIwUXNSVUZCUlN4SFFVRkhVaXhGUVVGRlVTeEZRVUZGTEVkQlFVZFVMRVZCUVVWVExFVkJRVVVzU1VGQlNXZENMRVZCUVVWb1FpeEZRVUZGTEVsQlFVazRUeXhGUVVGRk9VOHNSVUZCUlN4SlFVRkpMRk5CUVZONVFpeEhRVUZIUVN4RlFVRkZOSFpFTEc5Q1FVRnZRakY0UkN4RlFVRkZiM1JFTERKQ1FVRXlRblJ5UkN4RlFVRkZiM0pFTERCQ1FVRXdRbkJGTEVWQlFVVnZSU3d3UWtGQk1FSndja1FzUlVGQlJYbHlSQ3cyUWtGQk5rSnFjMFFzUlVGQlJXbHpSQ3cyUWtGQk5rSjZja1FzUlVGQlJUQnlSQ3hoUVVGaE9YSkVMRVZCUVVVNGNrUXNZVUZCWVRGeVJDeEZRVUZGTm5aRUxHMUNRVUZ0UW5CNVJDeEZRVUZGYjNsRUxHMUNRVUZ0UWpkMlJDeEZRVUZGT0c5RUxFdEJRVXN2Y1VRc1JVRkJSU3R4UkN4TFFVRkxPVzlFTEVWQlFVVTRiVVFzVTBGQlV6VnVSQ3hGUVVGRk5tNUVMR1ZCUVdVdmJVUXNSVUZCUldsdVJDeFBRVUZQTEZOQlFWTnFia1FzUlVGQlJYSkNMRWRCUVVjc1QwRkJUekJQTEVWQlFVVTBOVU1zVDBGQlQycHVSQ3hGUVVGRmNrSXNTVUZCU1hGQ0xFVkJRVVU0ZGtRc1QwRkJUMmg1UkN4RlFVRkZaM2xFTEU5QlFVODVka1FzUlVGQlJTdDJSQ3hOUVVGTmVIZEVMRVZCUVVWM2QwUXNUVUZCYUZnc1EwRkJkVmh3ZUVRc1JVRkJSWEY0UkN4UFFVRlBjbmhFTEVWQlFVVnhlRVFzUzBGQlN5eE5RVUZOTEZOQlFWTm9kMFFzUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzWVVGQllTeEpRVUZKVnl4RlFVRjNTU3hUUVVGVFRTeEZRVUZGVVN4SFFVRkhMRWxCUVVseVFpeEZRVUY0U2l4WFFVRmhMRkZCUVVjc1NVRkJVMDhzUlVGQlJTeFBRVUZQUVN4RlFVRkZMRWRCUVVkdlNTeGxRVUZsTEVOQlFVTndTU3hGUVVGRkxFbEJRVWx2U1N4bFFVRmxMRWxCUVVsd1NTeEZRVUZGY1Vrc1MwRkJTeXhOUVVGTkxIRkNRVUZ4UWl4TlFVRk5ka2dzUzBGQlN5eFBRVUZQWkN4RlFVRnpRbWhDTEVkQlFVa3NTVUZCU1ZNc1JVRkJSU3hQUVVGTkxFVkJRVWNzU1VGQlNTeFBRVUZQUVN4RlFVRkZNbkZFTEdGQlFXRjBjRVFzUlVGQlJYSkNMRVZCUVVVeWNVUXNaVUZCWlhSd1JDeEZRVUZGTEUxQlFVMUJMRWxCUVVrc1QwRkJUU3hGUVVGSE4wSXNUMEZCVDBNc1pVRkJaVThzUlVGQlJTeGhRVUZoTEVOQlFVTkVMRTlCUVUwc1NVRkJTME1zUlVGQlJYTjRSQ3gzUWtGQmQwSjZkMFFzUlVGQlJXSXNSVUZCUlhWMVJDeHZRa0ZCYjBJc1YwRkJWeXhOUVVGTkxHOUNRVUZ2UWpWc1JDeG5Ra0ZCWjBJNVNDeEZRVUZGTERSQ1FVRTBRbUlzUlVGQlJYZDFSQ3hwUTBGQmFVTXNWMEZCVnl4TlFVRk5MRzlDUVVGdlFqZHNSQ3huUWtGQlowSkJMR1ZCUVdWcVNTeFZRVUZWUXl4bFFVRmxMSE5DUVVGelFpeFRRVUZUVlN4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhTaXhQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFJMRVZCUVVWb1FpeEZRVUZGU3l4RlFVRkZMRWRCUVVkcFFpeEZRVUZGYWtJc1JVRkJSU3hKUVVGSkxGTkJRVk41UWl4SFFVRkhRU3hGUVVGRlFTeEZRVUZGYTNkRUxGbEJRVmtzUjBGQlJ5eGpRVUV2UWl4RFFVRTRRMmg0UkN4SlFVRkpRU3hGUVVGRkxFdEJRVXNzU1VGQlNYcENMRVZCUVVVc1NVRkJTVzkxUXl4WFFVRlhMRU5CUVVNc1NVRkJTV3gwUXl4RlFVRkZhM2hFTEcxQ1FVRnRRaXhYUVVGWExFOUJRVThzVTBGQlV6ZDJSQ3hIUVVGSExFOUJRVThzVTBGQlUwRXNSMEZCUjBFc1JVRkJSWFZXTEU5QlFVOXlXQ3hGUVVGRmNWZ3NUVUZCVFN4dFFrRkJiVUoyVml4SFFVRkhMRWxCUVVseVFpeEZRVUZGU2l4RlFVRkZMRk5CUVZONVFpeEhRVUZITEVkQlFVY3NZVUZCWVVFc1JVRkJSV2RPTEU5QlFVOHNSVUZCUlN4SFFVRkhMRTFCUVUwc1UwRkJVMmhPTEVWQlFVVm5UaXhQUVVGUExFZEJRVWNzUjBGQlJ5eFpRVUZaYUU0c1JVRkJSV2RPTEU5QlFVOHNSVUZCUlN4SFFVRkhMRTFCUVUwc1VVRkJVV2hPTEVWQlFVVm5UaXhQUVVGUExFZEJRVWNzVFVGQlRTeEpRVUZKYkVzc1RVRkJUU3h6UlVGQk5Va3NRMEZCYlU0NVF5eEZRVUZGT0hOQ0xFdEJRVXRzZEVJc1JVRkJSU3hIUVVGSExGTkJRVk52YmtRc1JVRkJSV2h1UkN4SFFVRkhMRWRCUVVkQkxFbEJRVWxrTEVWQlFVVm5lRVFzV1VGQldYWjRSQ3hGUVVGRk5ra3NTMEZCU3k5S0xFOUJRVThzUTBGQlF5eEpRVUZKWXl4RlFVRkZlVUlzUlVGQlJUbENMRVZCUVVVc1NVRkJTV2w1UkN4VlFVRlZOWGhFTEVWQlFVVXJka1FzVjBGQlZ5eEhRVUZIY0hkRUxFVkJRVVZ4Vnl4SlFVRkpMRWxCUVVsek0wSXNWMEZCVnl4RFFVRkRMRXRCUVVzemRFTXNSVUZCUlhGWExFbEJRVWxvVnl4RlFVRkZMRWRCUVVkSkxFVkJRVVUyU1N4TFFVRkxkRW9zU1VGQlNTeE5RVUZOTEVOQlFVTXJja1FzV1VGQldTeFRRVUZUYW5GRUxFZEJRVWR5UWl4SFFVRkhRU3hGUVVGRkswNHNZVUZCWVM5T0xFVkJRVVY1ZUVRc1YwRkJWM0JLTEVWQlFVVm9ia1FzUjBGQlIwb3NSVUZCUldsTExFdEJRVXMzU2l4SlFVRkphM0ZFTEZkQlFWY3NWMEZCVjNaeVJDeEhRVUZIUVN4RlFVRkZLMDRzWVVGQllTOU9MRVZCUVVWNWVFUXNWMEZCVjNCS0xFVkJRVVU1YmtRc1JVRkJSV2Q0UkN4aFFVRmhkSGRFTEVWQlFVVnBTeXhMUVVGTE0wc3NSVUZCUldkNFJDeGpRVUZqY0Vjc1RVRkJUU3hUUVVGVE5YRkVMRWxCUVVsUUxFVkJRVVVzU1VGQlNUQjRSQ3hWUVVGVk9YaEVMRVZCUVVVc1EwRkJReXh4UWtGQmNVSXJlRVFzVjBGQlZ5eGpRVUZqTTNoRUxFVkJRVVUwZUVRc1QwRkJUeXhYUVVGWExFbEJRVWxvZVVRc1JVRkJSWGxDTEVWQlFVVjFWaXhQUVVGUGNsZ3NSVUZCUlhGWUxFMUJRVTBzTWtKQlFUSkNOVmNzUlVGQlJUWkpMRTFCUVUxcVNpeEZRVUZGTEVkQlFVZFhMRVZCUVVWclZTeFRRVUZSTEZOQlFWTndWQ3hGUVVGRmNrSXNSMEZCUjBvc1IwRkJSM2xDTEVWQlFVVXNTMEZCUzNKQ0xFVkJRVVYzU1N4TFFVRkxMRTFCUVUwc1ZVRkJVek5JTEVWQlFVVm5ka1FzV1VGQldXcDNSQ3hMUVVGTGNVSXNSVUZCUlhkVUxGTkJRVkVzVTBGQlUzQlVMRWRCUVVkbmJrUXNSVUZCUldodVJDeFBRVUZOY2tJc1JVRkJSVFo0UkN4UlFVRlJMRk5CUVZNM2VFUXNSMEZCUjNGQ0xFVkJRVVYxVml4UFFVRlBjbGdzUlVGQlJYRllMRTFCUVUwc01rSkJRVEpDTlZjc1IwRkJSM0ZDTEVWQlFVVjFiMFFzVTBGQlV6VndSQ3hGUVVGRk9IaEVMRkZCUVZFc1UwRkJVemw0UkN4SFFVRkhjVUlzUlVGQlJYVldMRTlCUVU5eVdDeEZRVUZGY1Znc1RVRkJUU3d5UWtGQk1rSTFWeXhKUVVGSlFTeEZRVUZGSzNoRUxGVkJRVlVzVTBGQlV5OTRSQ3hIUVVGSGNVSXNSVUZCUlhGdlJDeFJRVUZSTEVsQlFVbDRZeXhYUVVGWGJIUkRMRVZCUVVWdk9FSXNVMEZCVTNGMlFpeFBRVUZQTEZkQlFWZHdjVVFzUlVGQlJYVldMRTlCUVU5eVdDeEZRVUZGY1Znc1RVRkJUU3h0UWtGQmJVSTFWeXhGUVVGRmQzSkVMRlZCUVRGdFF5eERRVUZ4YmtOdWNVUXNUVUZCVFN4VFFVRlRRU3hGUVVGRmNrSXNSVUZCUlVvc1IwRkJSeXhoUVVGaFNpeFBRVUZQUXl4bFFVRmxUeXhGUVVGRkxHRkJRV0VzUTBGQlEwUXNUMEZCVFN4SlFVRkxMRWxCUVVsUkxFVkJRVVZZTEVWQlFVVXNSMEZCUjBrc1JVRkJSVzE0UkN4UFFVRlBMRk5CUVZNNWRrUXNSVUZCUlhKQ0xFZEJRVWNzUjBGQlIzRkNMRVZCUVVVcmNFUXNZMEZCWXl4TlFVRk5MRWxCUVVscWJrUXNUVUZCVFN3NFJVRkJPRVVzU1VGQlNYWkZMRVZCUVVWWExFVkJRVVVyYmtRc1QwRkJUMnB1UkN4RlFVRkZMRU5CUVVNcmJrUXNTMEZCUzNCd1JDeEZRVUZGYjNCRUxFdEJRVXRWTEZWQlFWVTVjRVFzUlVGQlJUaHdSQ3hWUVVGVmJIcERMRTFCUVUwMVZ5eEZRVUZGTkZjc1VVRkJVU3hQUVVGUE5WY3NSVUZCUlhkd1JDeFhRVUZYTlhCRUxFVkJRVVUwY0VRc1ZVRkJWWGh3UkN4RlFVRkZkM0JFTEZkQlFWZDRjRVFzUlVGQlJXdHlSQ3hYUVVGWGRISkVMRVZCUVVWemNrUXNWVUZCVld4eVJDeEZRVUZGYTNKRUxGZEJRVmRzY2tRc1JVRkJSVFJ3UkN4UFFVRlBhSEZFTEVWQlFVVm5jVVFzVFVGQlRUVndSQ3hGUVVGRk5IQkVMRTlCUVU5b2NVUXNSVUZCUlhWeVJDeE5RVUZOYm5KRUxFVkJRVVUyZEVRc1ZVRkJWV3AxUkN4RlFVRkZhVW9zUzBGQlN6ZEpMRVZCUVVWbmVVUXNVMEZCVTNCNVJDeEZRVUZGTW5KRUxHRkJRV0VzUTBGQlEwTXNUVUZCVFN4WFFVRlhOWEpFTEVWQlFVVTBja1FzV1VGQldTeFRRVUZUYm5GRUxFVkJRVVZ5UWl4RlFVRkZTaXhIUVVGSExHRkJRV0ZLTEU5QlFVOURMR1ZCUVdWUExFVkJRVVVzWVVGQllTeERRVUZEUkN4UFFVRk5MRWxCUVV0RExFVkJRVVZ4Y2tRc1lVRkJZU3hUUVVGVGFIRkVMRWRCUVVjc1NVRkJTWEpDTEVWQlFVVnhRaXhGUVVGRk9HZEVMR3RDUVVGclFuWnBSQ3hGUVVGRkxFbEJRVWx6ZDBNc1dVRkJXV3gzUXl4RlFVRkZNblpFTEZkQlFWY3NSMEZCUnl4UFFVRlBMRWxCUVVsTExGTkJRVk53ZDBRc1JVRkJSU3hGUVVGRkxFZEJRVWR4ZVVRc1ZVRkJWU3hGUVVGRmFubEVMRVZCUVVWdlFpeFJRVUZQTEVkQlFVa3NTVUZCU1RoeVF5eFhRVUZYZEhSRExFVkJRVVVzUjBGQlIyZFhMRWxCUVVrMVZpeEhRVUZITEVsQlFVbHJkRU1zVjBGQlYzUjBReXhMUVVGTExGTkJRVk41UWl4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhTaXhQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFJMRVZCUVVWWUxFVkJRVVVzUjBGQlIwd3NSVUZCUlVzc1JVRkJSU3hIUVVGSFNTeEZRVUZGYjNoRUxFMUJRVTBzVTBGQlV5OTJSQ3hGUVVGRmNrSXNSMEZCUnl4SFFVRkhjVUlzUlVGQlJUWjNSQ3hsUVVGbExFMUJRVTBzU1VGQlNTOTBSQ3hOUVVGTkxIZEdRVUYzUml4SFFVRkhPVU1zUlVGQlJTdHdSQ3hqUVVGakxFMUJRVTBzU1VGQlNXcHVSQ3hOUVVGTkxEWkZRVUUyUlN4SlFVRkpka1VzUlVGQlJTeExRVUZMYVVJc1JVRkJSU3hMUVVGTEwwSXNSVUZCUlZNc1JVRkJSU3R2UkN4UFFVRlBhbTVFTEVWQlFVVXNRMEZCUXl0dVJDeExRVUZMY0hCRUxFVkJRVVZ2Y0VRc1MwRkJTMVVzVlVGQlZUbHdSQ3hGUVVGRk9IQkVMRlZCUVZWc2VrTXNUVUZCVFRWWExFVkJRVVUwVnl4UlFVRlJMRTlCUVU4NVdDeEZRVUZGTUhGRUxGZEJRVlVzVTBGQlUyNXZSQ3hIUVVGSGVrSXNSVUZCUlhsQ0xFdEJRVWwyUXl4RlFVRkZiM05FTEZkQlFWVXNVMEZCVXpkd1JDeEhRVUZIVWl4RlFVRkZVU3hMUVVGSmRrTXNSVUZCUlRoeFJDeFBRVUZOTEZOQlFWTjJiMFFzUlVGQlJUbENMRVZCUVVWVUxFZEJRVWRyUWl4RlFVRkZOSEJFTEUxQlFVMHNRMEZCUXpsblJDeFBRVUZQZWtnc1JVRkJSVGgzUkN4alFVRmpOWGxFTEVWQlFVVnhkVVFzVVVGQlVXaDFSQ3hIUVVGSExFbEJRVWxYTEVWQlFVVTBia1FzVTBGQlV6VjZReXhSUVVGUk1WUXNSVUZCUld0eFJDeFRRVUZUYW5ORUxFOUJRVTFCTEVWQlFVVnhjMFFzVFVGQlRXNXlSQ3hGUVVGRk5uUkVMRlZCUVZVdmRVUXNSVUZCUlN0S0xFdEJRVXMzU1N4RlFVRkZaM2xFTEZOQlFWTnNla1FzUlVGQlJYbHpSQ3hoUVVGaExFTkJRVU5ETEUxQlFVMHNWMEZCVnpGelJDeEZRVUZGTUhORUxHVXNaMEpEWVc1c2QwSXNTVUZCU1dwNVF5eEZRVUZQTEVWQlFWRXNSMEZEWm5wWExFVkJRVTk1Vnl4RlFVTlFlRmdzUlVGQlZTeFhRVU5hTEU5QlFVbERMRXRCUVdWQkxFdEJRMGNzYjBKQlFWaDBSQ3hQUVVGcFEwRXNXVUZEZEVJc1NVRkJXSEZFTEVWQlFXbERRU3hGUVVONFFpeHZRa0ZCVkdkQ0xFdEJRU3RDUVN4TFFVTnVRMmRKTEZOQlFWTXNZMEZCVkVFc1NVRkRVRGxNTEV0QlFVc3NUVUZGU0cxNlJDeEZRVUY1UWl4RlFVRlJMRWxCUTNKRGRIWkVMRVZCUVV0MFF5eFBRVUZQTWxZc1QwRkJUMnM0UXl4TlFVRlBSQ3hIUVVNeFFuUjJSQ3hGUVVGTE5Fb3NZVUZCWVN3d1FrRkJNa0lzUzBGQlRUTkxMRWRCVjI1RWMzZEVMRTFCUVUxRExFOUJRVTlETEVsQlFVbERMRTlCUVZNc1UwRkJVME1zUjBGRGFrTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU5RExFbEJRVWxETEU5QlFVOUZMR2RDUVVGcFFpeFBRVVV4UmpWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlJhalZETEVWQlFVczBjRU1zVTBGRGVFTnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1VNc1QwRkJUMncxUXl4WlFVRmpMREpDUVZGNFF5czBReXhOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUFJTeG5Ra0ZCYTBJc1EwRkJReXhIUVVsMlEyNDFReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOURMRWxCUVVsRExFOUJRVTg1ZUVRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU53UkN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUE0zcERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTDBSeGQwUXNUVUZCVFVNc1QwRkJUME1zU1VGQlNVTXNUMEZCVHpONlF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXpORUxFbEJRVTlETEVWQlFVMHNRMEZEV0VNc1MwRkJUWGcxUXl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzUjBGREwwTjBLME1zVVVGQlUyZEdMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UW1sT0xFVkJRVXNzUlVGQlJ5eEpRVU5zUkVjc1dVRkJZWG8xUXl4RlFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaFowOHNSVUZCU1Vrc2FVSkJRek5EWWl4RlFVRjFRbU1zU1VGQlNYSXdReXhUUVVGVkszcERMRWxCVFhaRExFOUJTRWxCTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTlETEVsQlFVbERMRTlCUVU5d1VTeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEyNUVMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUME1zU1VGQlNVTXNUMEZETDBJc1QwRkJUMGdzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGQlQyRXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhiRVU0UlN4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBZU3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEyeEZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUM1poTEZsQlF6RkRObVlzUlVGQlNWTXNVVUZCVVhaNlJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKVlN4WFFVRlhlSHBFTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYRjVSQ3hGUVVGMVFtTXNTVUZEZGtNelJpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jWGxFTEVWQlFYVkNZeXhKUVVGSlJ5dzJRa0ZEY0VSU0xFVkJRVWxYTEZkQlFWZDZla1FzUjBGRFppeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTlETEVsQlFVbERMRTlCUVU4NWVFUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRiRVFzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBReXhKUVVGSlF5eFBRVUZQYTBJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRMME5CTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUGEwSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTnNSU3hKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUlN4TFFVUldjbmxFTEVWQlFVbHBWQ3hGUVVGUmNTOURMRmxCUlZaSUxFVkJRVTh6WVN4WFFVTk1MRVZCUTBGNE0wTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRnpMME1zWTBGRFRucDVSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVUQXJReXhyUWtGRFRqZDRSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUelZWTEhGQ1FVTk1MRVZCUTBGMk9VTXNSVUZEUVRoM1JDeEZRVUYxUW1Nc1NVRkJTVkVzTUVKQlZXcERja0lzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGQlR6bDRSQ3hWUVVGVmEzcEVMRkZCUVZVc1YwRkRNVU1zVDBGQk9FSnlOa01zUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhKUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUE9YaEVMRlZCUVZVMGVVUXNVVUZCVlN4VFFVRlRkbnBFTEVkQlEyNUVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkVyUXl4clFrRkJhMEpzYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSYWtSemVVUXNUVUZCVFVNc1QwRkJUME1zU1VGQlNVTXNUMEZCVHpsNFJDeFZRVUZWYlhwRUxGZEJRV0VzVjBGRE4wTXNUMEZCT0VKME5rTXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBReXhKUVVGSlF5eFBRVUZQT1hoRUxGVkJRVlUyZVVRc1YwRkJZU3hUUVVGVGVIcEVMRWRCUTNSRUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRnRSQ3h4UWtGQmNVSjBhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJjRVJ6ZVVRc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1VNc1QwRkJUemw0UkN4VlFVRlZkWGxFTEdWQlFXbENMRmRCUTJwRUxFOUJRMFV4TlVNc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXZkMFFzUlVGQmRVSmpMRWxCUVVzc1NVRlJNMFZpTEUxQlFVMURMRTlCUVU5RExFbEJRVWxETEU5QlFVODVlRVFzVlVGQlZXOTZSQ3hsUVVGcFFpeFRRVUZUTDNwRUxFZEJRekZFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4RlFVRkhha01zU1VGVGRrUnplVVFzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGQlR6bDRSQ3hWUVVGVk9IbEVMRmRCUVdFc1UwRkJVMDhzUlVGQlYwTXNSMEZEYWtVc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTMk1zU1VGUkwwWXpRaXhOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUE9YaEVMRlZCUVZWM2VrUXNhVUpCUVcxQ0xGZEJRMjVFTEU5QlFVOXNlVVFzUzBGQlN6aDRSQ3hsUVVGbExFdEJTVGRDYUhoRUxFVkJRVXQwUXl4UFFVRlBNbFlzVDBGQlR6ZFlMRVZCUVZNcmVrUXNUVUZCVFVNc1QwRkJUME1zVFN4blFrTTVVSHBETEVsQlFVbG9OVU1zUlVGQlR5eEZRVUZSTEVkQlEyWjZWeXhGUVVGUGVWY3NSVUZEVUhoWUxFVkJRVlVzVjBGRFdpeFBRVUZKUXl4TFFVRmxRU3hMUVVOSExHOUNRVUZZZEVRc1QwRkJhVU5CTEZsQlEzUkNMRWxCUVZoeFJDeEZRVUZwUTBFc1JVRkRlRUlzYjBKQlFWUm5RaXhMUVVFclFrRXNTMEZEYmtOblNTeFRRVUZUTEdOQlFWUkJMRWxCUTFBNVRDeExRVUZMTEUxQlJVaHJNVVFzUlVGQk9FSXNSVUZCVVN4SlFVTXhRM0o0UkN4RlFVRkxkRU1zVDBGQlR6SldMRTlCUVU5ck9FTXNUVUZCVHpoQ0xFZEJRekZDTEVsQlFVbERMRVZCUVhWQ0xFVkJRVkVzUjBGRGJrTjBlRVFzUlVGQlMzUkRMRTlCUVU4eVZpeFBRVUZQYXpoRExFMUJRVThyUWl4SFFVTXhRblI0UkN4RlFVRkxORW9zWVVGQllTeHhRMEZCYzBNc1MwRkJUVE5MTEVkQlF6bEVaU3hGUVVGTE5Fb3NZVUZCWVN3d1EwRkJNa01zUzBGQlRUTkxMRWRCUTI1RlpTeEZRVUZMTkVvc1lVRkJZU3h2UTBGQmNVTXNTMEZCVFROTExFZEJRemRFWlN4RlFVRkxORW9zWVVGQllTdzJRMEZCT0VNc1MwRkJUVE5MTEVkQlEzUkZaU3hGUVVGTE5Fb3NZVUZCWVN3eVEwRkJORU1zUzBGQlRUTkxMRWRCUTNCRlpTeEZRVUZMTkVvc1lVRkJZU3d5UTBGQk5FTXNTMEZCVFROTExFZEJRM0JGWlN4RlFVRkxORW9zWVVGQllTeHhRMEZCYzBNc1MwRkJUVE5MTEVkQlF6bEVaU3hGUVVGTE5Fb3NZVUZCWVN3NFEwRkJLME1zUzBGQlRUTkxMRWRCUTNaRlpTeEZRVUZMTkVvc1lVRkJZU3cwUTBGQk5rTXNTMEZCVFROTExFZEJRM0pGWlN4RlFVRkxORW9zWVVGQllTdzBRMEZCTmtNc1MwRkJUVE5MTEVkQlEzSkZaU3hGUVVGTE5Fb3NZVUZCWVN3MlEwRkJPRU1zUzBGQlRUTkxMRWRCUTNSRlpTeEZRVUZMTkVvc1lVRkJZU3h0UTBGQmIwTXNTMEZCVFROTExFZEJRelZFWlN4RlFVRkxORW9zWVVGQllTeHZRMEZCY1VNc1MwRkJUVE5MTEVkQlZ6ZEVjM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZuUWl4VFFVRlRPVUlzUjBGRGFrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZCWldnM1F5eEZRVUZMTkhCRExGTkJRM2hFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmphamRETEZsQlFXTXNNa05CV1hoRUt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlRMRk5CUVZNdlFpeEhRVU14UTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlJhamRETEVWQlFVczBjRU1zVTBGRGFrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEZMRTlCUVU5c04wTXNXVUZCWXl4dlEwRlpha1FyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZVc1UwRkJVMmhETEVkQlF6TkRiRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMUtMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUnl4UlFVRlJReXhsUVVWNlJqVjRSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlUydzNReXhGUVVGTE5IQkRMRk5CUTJ4RWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSYmpkRExGbEJRV01zY1VOQldXeEVLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZwUWl4VFFVRlRiRU1zUjBGRGJFUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZCWjBKd04wTXNSVUZCU3pSd1F5eFRRVU42UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBzc1pVRkJaWEkzUXl4WlFVRmpMRFJEUVZsNlJDczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJhVUlzVTBGQlUyNURMRWRCUTJ4RWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTkxHVkJRV2RDY2pkRExFVkJRVXMwY0VNc1UwRkRla1J5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWROTEdWQlFXVjBOME1zV1VGQll5dzBRMEZaZWtRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1Unl4VFFVRlhMRk5CUVZOelJTeEhRVU0xUTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOU2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZOMVJ5eGxRVVV4UmpWNFJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZVMU1FTXNSVUZCU3pSd1F5eFRRVU51UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRVk0zTUVNc1dVRkJZeXh6UTBGWmJrUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZyUWl4VFFVRlRjRU1zUjBGRGJrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwOHNaMEpCUVdsQ2REZERMRVZCUVVzMGNFTXNVMEZETVVSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZuUW5ZM1F5eFpRVUZqTERaRFFWa3hSQ3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUVd0Q0xGTkJRVk55UXl4SFFVTnVSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQmFVSjJOME1zUlVGQlN6UndReXhUUVVNeFJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUVdkQ2VEZERMRmxCUVdNc05rTkJXVEZFS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmJVSXNVMEZCVTNSRExFZEJRM0JFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnJRbmczUXl4RlFVRkxOSEJETEZOQlF6TkVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmFVSjZOME1zV1VGQll5dzRRMEZaTTBRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRWTEZGQlFWVXNVMEZCVTNaRExFZEJRek5EYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSFNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzVVVGQlVYUkRMR2RDUVVGcFFpeFBRVVZ3UnpWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVTNvM1F5eEZRVUZMTkhCRExGTkJRMnhFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVlN4UlFVRlJNVGRETEZsQlFXTXNjVU5CV1d4RUt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmswc1UwRkJWeXhUUVVGVGMwc3NSMEZETlVOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVlUxZFVNc1JVRkJTelJ3UXl4VFFVTnVSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWTTNkVU1zV1VGQll5eHpRMEZMTDBORExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV00zZWtRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU53UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkJZekV4UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllTOUZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZqTVRGRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETTBVc1NVRkJUME1zUlVGQlRTeERRVU5ZTVRKQ0xFdEJRVTE1TWtJc1JVRkJTVzlETEdkQ1FVTldReXhKUVVGTE16ZERMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UW1kT0xFVkJRVXNzUjBGQlJ5eEpRVTEyUkN4UFFVaEpSQ3hKUVVOR1JTeEZRVUZKU3l4eFFrRkJkVUpPTEVkQlJYUkNReXhKUVZWVVZDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlkyNVRMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRia1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkRlRU1zVDBGQlQyeERMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmpiRUlzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYYkVZNFJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlkyeENMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGJFWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRnZRM2QwUkN4RlFVRlBPVm9zV1VGREwwTnZaaXhGUVVGSmMwTXNVVUZCVVhBeFJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKZFVNc1QwRkJUM0l4UkN4SFFVTllMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV00zZWtRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGJFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZCWTJJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRMMFJCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkJZMklzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU5zUml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUjBGRFVuSjVSQ3hGUVVGSmFWUXNSVUZCVVRoblJDeG5Ra0ZEVG1vd1JDeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQzQmhMRmRCUTB3c1JVRkRRUzh6UXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVN0blJDeFhRVVZXTjBJc1JVRkJUM1JoTEZWQlEwd3NSVUZEUVRjelF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhReXhqUVVGak4zcEVMRlZCUVZVMk1FUXNVVUZCVlN4WFFVTXhSQ3hQUVVFNFFtZzRReXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVXpGRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmpOM3BFTEZWQlFWVjFNRVFzWTBGQlowSXNWMEZEYUVVc1QwRkJPRUl4TjBNc1JVRkJTelJ3UXl4UlFVRlJiME1zVjBGRGRrTjJha1FzUzBGQlMzVjZSQ3haUVZkWWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRETEdOQlFXTTNla1FzVlVGQlZUSXdSQ3hoUVVGbExGZEJReTlFTEU5QlFXMURPVGRETEVWQlFVczBjRU1zVVVGQlVYRkRMRlZCUXpWRGVHcEVMRXRCUVV0MWVrUXNXVUZSV0d4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhReXhqUVVGak4zcEVMRlZCUVZWNU1FUXNVVUZCVlN4VFFVRlRjREZFTEVkQlEyNUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ2UkN4dlFrRkJiMEoyYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSYmtSemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRETEdOQlFXTTNla1FzVlVGQlZUUXdSQ3hQUVVGVExGZEJRM3BFTEU5QlFTdENMemRETEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFZEJRVWNzU1VGUmJFWnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV00zZWtRc1ZVRkJWVEF3UkN4UFFVRlRMRk5CUVZOeU1VUXNSMEZEYkVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVXdEVMSE5DUVVGelFuSnJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFVOXFSSGRhTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVODVla1FzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTTNSQ3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMFVzVDBGQlR6TXhReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVhoRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBNekZETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRjRVVzU1VGQlQwTXNSVUZCVFN4RFFVTllNRU1zUjBGQlNXbzRReXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZOTDBNc1QwRklTVVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVOXdVeXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRelZFTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRM2hETEU5QlFVOXVReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJUMjVDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpORk9FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVOXVRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6TkZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUek5oTEdGQlF6RkRhV2RDTEVWQlFVazBReXhOUVVGTk1URkVMRWRCUTFZc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMFVzVDBGQlR6bDZSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU16UkN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBaQ3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVONFJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSU3hQUVVGUFpDeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlF6TkZMRWxCUVVsdWVVUXNSVUZGVFN4TFFVUldRU3hGUVVGSmFWUXNSVUZCVVcxb1JDeFZRVVZXYWtNc1JVRkJUemxoTEZsQlEwd3NSVUZEUVhJelF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSU3hQUVVGUE9YcEVMRlZCUVZWbk1VUXNUVUZCVVN4WFFVTnFSQ3hQUVVFNFFtNDRReXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBPWHBFTEZWQlFWVXJNRVFzVFVGQlVTeFRRVUZUTVRGRUxFZEJRekZFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFclF5eHJRa0ZCYTBKc2EwUXNTMEZCVFN4RlFVRkhha01zU1VGaGFrUnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkZETEdGQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkxja1J5UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVd0Q0xGTkJRVmNzUTBGRE0wTkRMR0ZCUVdNc1JVRkRaRU1zVVVGQlV5eEZRVU5VZERkRExGRkJRVk1zUjBGTldEZ3pReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVUzk2UkN4VlFVRlZiekZFTEZsQlFXTXNWMEZEZUVRc1QwRkJhVVYyT0VNc1JVRkJTelJ3UXl4UlFVRlJjMElzYVVKQlFXbENlbWxFTEV0QlFVMXhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkZETEdGQlFXRXNTMEZMYkVwdU4wTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXpsRUxFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSTlRGRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhla1Z4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFMU1VTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOeVJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWFVUXNVVUZCVTNvd1JDeEZRVUZKZFhoRUxFVkJRVWx0UkN4alFVRm5Rak5FTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZQTXpGRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkROVVp6YzBRc1UwRkJWWFJ6UkN4RlFVRkpkWGhFTEVWQlFVbHZSQ3hsUVVGcFFqVkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxPVEZETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRGRFZHBWQ3hUUVVGVmFsUXNSVUZCU1hWNFJDeEZRVUZKWjBJc1pVRkJhVUo0UWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWlM4eFF5eFRRVUZUSzNwRExFVkJRV2xDZEhoRUxFbEJUWGhITEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRITEZGQlFWRnlVeXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRemRFTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRM2hETEU5QlFVOXdReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVWEJDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpWRk9FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRITEZGQlFWRndRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6VkZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVTXhRMnBJTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVOXVRaXcyUWtGRE1VUlNMRVZCUVVseFJDeFZRVUZWYmpKRUxFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZETVVOd1NDeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsZEVJc05rSkJRMnhGVWl4RlFVRkpjMFFzVjBGQlYzQXlSQ3hIUVVObUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWROTEdWQlF6RkRja2dzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpYWkNMRFpDUVVOc1JWSXNSVUZCU1ZVc1YwRkJWM2g2UkN4SFFVTm1MRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkV2ZWtRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE5VUXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVdZc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRla1JCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVV1lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU0xUlN4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVWxwVkN4RlFVRlJlV2hFTEdOQlJWWjJReXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRVTlrTEhsQ1FVazFRaXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZSTUdoRUxHVkJSVlo0UXl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZExMR1ZCUVdWcVFpeDVRa0ZKY0VNc1QwRkVWSEI1UkN4RlFVRkphVlFzUlVGQlVYTXZReXhsUVVWV1NpeEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWROTEdWQlFXVnNRaXd3UWtGVkwwTnlRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVUzk2UkN4VlFVRlZjekZFTEZWQlFWa3NWMEZEZEVRc1QwRkRSWG80UXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJVU3hKUVZGNlJXNURMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUnl4UlFVRlJMM3BFTEZWQlFWVjNNVVFzVlVGQldTeFRRVUZUYmpKRUxFZEJReTlFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkV2ZWtRc1ZVRkJWVEF4UkN4WlFVRmpMRmRCUTNoRUxFOUJRVTl3TUVRc1MwRkJTMnN3UkN4bFFVRlZka01zU1VGUmVFSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVUzk2UkN4VlFVRlZNakZFTEZWQlFWa3NWMEZEZEVRc1QwRkJlVU1zVFVGQmJFTTVPRU1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSTDNwRUxGVkJRVlYxTVVRc1YwRkJZU3hYUVVOMlJDeFBRVU5GTVRoRExFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZuUWl4SlFWRnFSblJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSTDNwRUxGVkJRVlY1TVVRc1YwRkJZU3hUUVVGVGNESkVMRWRCUTJoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUlF5eGhRVUZoTEVkQlFVa3pNRVFzU1VGUmRrZHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkV2ZWtRc1ZVRkJWVFF4UkN4aFFVRmxMRmRCUTNwRUxFOUJRVTkwTUVRc1MwRkJTMjB3UkN4blFrRkJWM2hETEVsQlVYcENkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkV2ZWtRc1ZVRkJWVFl4UkN4WFFVRmhMRmRCUTNaRUxFOUJRWGxETEUxQlFXeERhRGxETEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWYlhwRUxGZEJRV0VzVjBGRGRrUXNUMEZEUlhRMlF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWjBJc1NVRlJha1oyUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWTm5sRUxGZEJRV0VzVTBGQlUzaDZSQ3hIUVVOb1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJOa1FzY1VKQlFYRkNhR3hFTEV0QlFVMHNSVUZCUjNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVVTXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYWkhjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSTDNwRUxGVkJRVlU0TVVRc1lVRkJaU3hYUVVONlJDeFBRVUZQZURCRUxFdEJRVXQxZUVRc1owSkJRVmRKTEVsQlVYcENkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkV2ZWtRc1ZVRkJWU3N4UkN4WFFVRmhMRmRCUTNaRUxFOUJRWGxETEUxQlFXeERiRGxETEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFVOXFRM1ZZTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFNRVFzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTnlSU3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGQlpUa3hReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdoR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxPVEZETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkROVVVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXR2hHTEU5QlFWRjJNRU1zUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUTJwRWFFWXNWVUZCVjNaelJDeEZRVUZKZFhoRUxFVkJRVWsyUkN4blFrRkJhMEp5UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZOMGNFTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEhRVU5zUjNFeFJDeFRRVUZWY2pGRUxFVkJRVWwxZUVRc1JVRkJTU3RFTEdWQlFXbENla01zUlVGQk5FSXdReXhUUVVGVGFEUkRMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNTVUZOY0Vjc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBzc1pVRkJaWFpUTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEY0VVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZEZUVNc1QwRkJUM1JETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsZEVJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGJrWTRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBzc1pVRkJaWFJDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRia1lzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkphVVVzVlVGQlZTOHlSQ3hIUVVOa0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVTXhRMjlHTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRhMHdzTmtKQlF6VkVVaXhGUVVGSmEwVXNXVUZCV1dnelJDeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYnpCRUxFVkJRVFJDTUVNc1UwRkROVU4wU2l4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmJ6QkVMRVZCUVRSQ01FTXNVMEZCVTNoRUxEWkNRVU01UkZJc1JVRkJTVGRwUkN4WFFVRlhhbEVzUjBGRFppeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxhakJFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUTI1RkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxUWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTm9SVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxha0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU51Uml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUjBGRFVuSjVSQ3hGUVVGSmFWUXNSVUZCVVhscFJDeGhRVU5PTlRGRUxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRnRhVVFzWjBKQlJWWnFSQ3hGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUZFV3c2VVSkJTVGxDTEU5QlJGUndlVVFzUlVGQlNXbFVMRVZCUVZGeGFVUXNaVUZGVm01RUxFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVRaNVJDeEZRVUUwUWpCRExGTkJRVk51UkN3d1FrRlZNME55UWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZCWldvd1JDeFZRVUZWY3pKRUxGVkJRVmtzVjBGRE4wUXNUMEZCT0VKNk9VTXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGQlpXb3dSQ3hWUVVGVmJ6SkVMRlZCUVZrc1UwRkJVeTh5UkN4SFFVTjBSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVVhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxhakJFTEZWQlFWVm5Na1FzV1VGQll5eFhRVU12UkN4UFFVTkZiamxETEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmswc1UwRkJWU3hKUVZFelJXdExMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIU3l4bFFVRmxhakJFTEZWQlFWVnhNa1FzV1VGQll5eFRRVUZUYURORUxFZEJRM2hGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxTUVRc1ZVRkJWWFV5UkN4alFVRm5RaXhYUVVOcVJTeFBRVUZQYWpGRUxFdEJRVXNyTUVRc2FVSkJRVmx3UkN4SlFWRXhRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsYWpCRUxGVkJRVlYzTWtRc1dVRkJZeXhYUVVNdlJDeFBRVUY1UXl4TlFVRnNRek01UXl4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZExMR1ZCUVdWcU1FUXNWVUZCVldzeVJDeFhRVUZoTEZkQlF6bEVMRTlCUTBWeU9VTXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF0ZVVRc1JVRkJORUl3UXl4VFFVRlZMRWxCVVRkRmVFVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFNRVFzVlVGQlZYTlFMRmRCUVdFc1UwRkJVMnBSTEVkQlEzWkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFNRVFzVlVGQlZYRnBRaXhoUVVGbExGZEJRMmhGTEU5QlFVOHZaMElzUzBGQlMyZFBMR2RDUVVGWE1tcEVMRWxCVVhwQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFNRVFzVlVGQlZYa3lSQ3hYUVVGaExGZEJRemxFTEU5QlFYbERMRTFCUVd4RE5UbERMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVU5cVEzVllMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZE5MR1ZCUVdWc01FUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOeVJTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWlM4eFF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZV2hHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUU3hsUVVGbEx6RkRMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE5VVXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdESkVMRmRCUVZsc09VTXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhIUVVGSExFZEJRelZFZFVVc1pVRkJaMEk1TVVRc1JVRkJTWFY0UkN4RlFVRkpkMFVzY1VKQlFYVkNhRVlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV014TVVNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTnFTR2N5UkN4SlFVRkxMemxETEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1IwRkJSeXhKUVUxMlJDeFBRVWhKUkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJaWGhUTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEY0VVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZEZUVNc1QwRkJUM1pETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFRTeGxRVUZsZGtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGJrWTRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJaWFpDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRia1lzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkpNRVVzWTBGQlkzZ3pSQ3hIUVVOc1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVTXhRMmhJTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRETEdOQlFXTnNRaXcyUWtGRGFrVlNMRVZCUVVreVJTeHBRa0ZCYVVKNk0wUXNSMEZEY2tJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVrMFJTeFBRVUZQTVRORUxFZEJRMWdzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWld3d1JDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTnVSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUU3hsUVVGbGJFSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEYUVWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWld4Q0xIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRGJrWXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRnRha1FzYTBKQlJWWnFSU3hGUVVGUGRHRXNWVUZEVEN4RlFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRTRhVVFzY1VKQlJWWTFSQ3hGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV05pTERCQ1FVYzFRM0I1UkN4RlFVRkphVlFzUlVGQlVXOXFSQ3hYUVVWV2JFVXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVFN4bFFVRmxiREJFTEZWQlFWVm5NMFFzWTBGQlowSXNWMEZEYWtVc1QwRkJLMEp1SzBNc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNSMEZCUnl4SlFWRnNSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWld3d1JDeFZRVUZWTmpKRUxHTkJRV2RDTEZOQlFWTjRNMFFzUjBGRE1VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVV3RFTEhOQ1FVRnpRbkpyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkZ5UkhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpXd3dSQ3hWUVVGVk1qSkVMR2xDUVVGdFFpeFhRVU53UlN4UFFVTkZPVGxETEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmxMRWxCVVdoR2JFTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWROTEdWQlFXVnNNRVFzVlVGQlZUZ3lSQ3hwUWtGQmJVSXNVMEZCVTNvelJDeEhRVU0zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFRTeGxRVUZsYkRCRUxGVkJRVlZyTTBRc2JVSkJRWEZDTEZkQlEzUkZMRTlCUVU4MU1VUXNTMEZCUzNjeFJDeHpRa0ZCYVVJM1JDeEpRVkV2UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUU3hsUVVGbGJEQkVMRlZCUVZWdE0wUXNhVUpCUVcxQ0xGZEJRM0JGTEU5QlFYbERMRTFCUVd4RGRDdERMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJaV3d3UkN4VlFVRlZhVE5FTEU5QlFWTXNWMEZETVVRc1QwRkJLMEp3SzBNc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNSMEZCUnl4SlFWRnNSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWld3d1JDeFZRVUZWS3pKRUxFOUJRVk1zVTBGQlV6RXpSQ3hIUVVOdVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJhMFFzYzBKQlFYTkNjbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJZWEpFYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzVkhMR0ZCUVdVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEpRVXQ0UkhKRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzZElMRk5CUVZjc1EwRkROVU5ETEdGQlFXTXNSVUZEWkVNc1VVRkJVeXhGUVVOVWREZERMRkZCUVZNc1JVRkRWSE4zUXl4VFFVRlZMRWRCVFZwM1NDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjZkRVFzVlVGQlZXOHhSQ3haUVVGakxGZEJRM3BFTEU5QlFXdEZkamhETEVWQlFVczBjRU1zVVVGQlVYTkNMR2xDUVVGcFFucHBSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM1ZITEdGQlFXRXNTMEZMY0VwdU4wTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZONmRFUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNdlJDeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZOMGRrTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0V4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjBka01zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTjBSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllhVVFzVVVGQlUzb3dSQ3hGUVVGSmRYaEVMRVZCUVVsdFJDeGpRVUZuUWpORUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSU3hQUVVGUE16RkRMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNSMEZETlVaemMwUXNVMEZCVlhSelJDeEZRVUZKZFhoRUxFVkJRVWx2UkN4bFFVRnBRalZFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFR5eG5Ra0ZCWjBKb01rTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEhRVU4yUjJsVUxGTkJRVlZxVkN4RlFVRkpkWGhFTEVWQlFVbG5RaXhsUVVGcFFuaENMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVVN4blFrRkJaMEpxTWtNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTjJSM2x3UkN4VlFVRlhlbkJFTEVWQlFVbDFlRVFzUlVGQlNXbEdMR2RDUVVGclFucEdMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJhVUpzTWtNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMDFSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlV5OU1MR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRPVVFzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRM2hETEU5QlFVOXJSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRVk5yUml3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjM1JUaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVMnRHTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkROMFVzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRekZEYWtnc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJUMjVDTERaQ1FVTXhSRklzUlVGQlNYRkVMRlZCUVZWdU1rUXNSMEZEWkN4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUeXhuUWtGRE1VTjBTQ3hGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUeXhuUWtGQlowSjRRaXcyUWtGRGJrVlNMRVZCUVVselJDeFhRVUZYY0RKRUxFZEJRMllzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUXpGRGRrZ3NSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUVdkQ2VrSXNOa0pCUTI1RlVpeEZRVUZKVlN4WFFVRlhlSHBFTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFNc2FVSkJRekZEZUVnc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFNc2FVSkJRV2xDTVVJc05rSkJRM0JGVWl4RlFVRkphMFlzV1VGQldXZzBSQ3hIUVVOb1FpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNM1JDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNWR0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZUZFVZc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNM1JTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVVscFZDeEZRVUZSZVdoRUxHTkJSVloyUXl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEZMRTlCUVU5a0xIbENRVWsxUWl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk1HaEVMR1ZCUlZaNFF5eEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRQTEdkQ1FVRm5RbTVDTEhsQ1FVbHlReXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZSY3k5RExHVkJSVlpLTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUVdkQ2NFSXNlVUpCU1hKRExFOUJSRlJ3ZVVRc1JVRkJTV2xVTEVWQlFWRjFha1FzWjBKQlJWWnlSU3hGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUW5KQ0xEQkNRVlZxUkhKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVmN6RkVMRlZCUVZrc1YwRkRka1FzVDBGRFJYbzRReXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMFVzVDBGQlVTeEpRVkY2Ulc1RExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVmR6RkVMRlZCUVZrc1UwRkJVMjR5UkN4SFFVTm9SU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTkVRc1owSkJRV2RDTDJ0RUxFdEJRVTBzUlVGQlIycERMRWxCVVM5RGMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZNREZFTEZsQlFXTXNWMEZEZWtRc1QwRkJUM0F3UkN4TFFVRkxhekJFTEdWQlFWVjJReXhKUVZGNFFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZNakZFTEZWQlFWa3NWMEZEZGtRc1QwRkJlVU1zVFVGQmJFTTVPRU1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNwMFJDeFZRVUZWZFRGRUxGZEJRV0VzVjBGRGVFUXNUMEZEUlRFNFF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwOHNaMEpCUVdsQ0xFbEJVV3hHZUVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVSeXhUUVVGVGVuUkVMRlZCUVZWNU1VUXNWMEZCWVN4VFFVRlRjREpFTEVkQlEycEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUyUkN4eFFrRkJjVUpvYkVRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM1ZITEdGQlFXRXNSMEZCU1RNd1JDeEpRVkY0UjNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjZkRVFzVlVGQlZUUXhSQ3hoUVVGbExGZEJRekZFTEU5QlFVOTBNRVFzUzBGQlMyMHdSQ3huUWtGQlYzaERMRWxCVVhwQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1Unl4VFFVRlRlblJFTEZWQlFWVTJNVVFzVjBGQllTeFhRVU40UkN4UFFVRjVReXhOUVVGc1EyZzVReXhGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZUZW5SRUxGVkJRVlZ0ZWtRc1YwRkJZU3hYUVVONFJDeFBRVU5GZERaRExFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCYVVJc1NVRlJiRVo2UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZONmRFUXNWVUZCVlRaNVJDeFhRVUZoTEZOQlFWTjRla1FzUjBGRGFrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVFpFTEhGQ1FVRnhRbWhzUkN4TFFVRk5MRVZCUVVkeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1Unl4VFFVRlRkVWNzWVVGQllTeEhRVUZKTXpCRUxFbEJVWGhIYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVk9ERkVMR0ZCUVdVc1YwRkRNVVFzVDBGQlQzZ3dSQ3hMUVVGTGRYaEVMR2RDUVVGWFNTeEpRVkY2UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVkt6RkVMRmRCUVdFc1YwRkRlRVFzVDBGQmVVTXNUVUZCYkVOc09VTXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZiek5FTEZsQlFXTXNWMEZEZWtRc1QwRkRSWFlyUXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFNc2FVSkJRV3RDTEVsQlVXNUdNVU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZUZW5SRUxGVkJRVlZ4TTBRc1dVRkJZeXhUUVVGVGFEUkVMRWRCUTJ4RkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzVkhMR0ZCUVdFc1IwRkJTVE13UkN4SlFWRjRSM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZONmRFUXNWVUZCVlhNelJDeGpRVUZuUWl4WFFVTXpSQ3hQUVVGUGFESkVMRXRCUVVzck1VUXNhVUpCUVZsd1JTeEpRVkV4UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVmRUTkVMRmxCUVdNc1YwRkRla1FzVDBGQmVVTXNUVUZCYkVNeEswTXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVDJwRGRWZ3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwOHNaMEpCUVdkQ2JqQkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGRFVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFtZ3lReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdwR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVHl4blFrRkJaMEpvTWtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU0zUlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYWtZc1ZVRkJWM1p6UkN4RlFVRkpkWGhFTEVWQlFVazJSQ3huUWtGQmEwSnlSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVk4wY0VNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMXdSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUeXhuUWtGQlowSjZVeXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRM0pGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVU40UXl4UFFVRlBlRU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZuUW5oQ0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYzQkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZuUW5oQ0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEY0VZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVNeFEyOUdMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGEwd3NOa0pCUXpWRVVpeEZRVUZKYTBVc1dVRkJXV2d6UkN4SFFVTm9RaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFR5eG5Ra0ZCWjBKdU1FUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRjRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXZENia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXZENia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU53Uml4SlFVRkpibmxFTEVWQlJVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRnRhVVFzWjBKQlJWWnFSQ3hGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUZFV3c01FSkJWWHBEY2tJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFtNHdSQ3hWUVVGVlp6SkVMRmxCUVdNc1YwRkRhRVVzVDBGRFJXNDVReXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWVXNTVUZSTTBWclN5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXZENiakJFTEZWQlFWVnhNa1FzV1VGQll5eFRRVUZUYURORUxFZEJRM3BGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZuUW00d1JDeFZRVUZWZFRKRUxHTkJRV2RDTEZkQlEyeEZMRTlCUVU5cU1VUXNTMEZCU3lzd1JDeHBRa0ZCV1hCRUxFbEJVVEZDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFtNHdSQ3hWUVVGVmR6SkVMRmxCUVdNc1YwRkRhRVVzVDBGQmVVTXNUVUZCYkVNek9VTXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVDJwRGRWZ3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxRXNaMEpCUVdkQ2NEQkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGRFVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFJMR2RDUVVGblFtb3lReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdwR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVVN4blFrRkJaMEpxTWtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU0zUlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYzBVc1pVRkJaMEk1TVVRc1JVRkJTWFY0UkN4RlFVRkpkMFVzY1VKQlFYVkNhRVlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV014TVVNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMXVTQ3hQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQlowSXhVeXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRM0pGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUkxHZENRVU40UXl4UFFVRlBla01zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUkxHZENRVUZuUW5wQ0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYzQkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUkxHZENRVUZuUW5wQ0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEY0VZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUXpGRGFFZ3NSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZCWTJ4Q0xEWkNRVU5xUlZJc1JVRkJTVEpGTEdsQ1FVRnBRbm96UkN4SFFVTnlRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCWjBKd01FUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRjRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENjRUlzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENjRUlzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU53Uml4SlFVRkpibmxFTEVWQlJVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRTRhVVFzY1VKQlJWWTFSQ3hGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV05pTERCQ1FWVTVRM0pDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCWjBKd01FUXNWVUZCVlRJeVJDeHBRa0ZCYlVJc1YwRkRja1VzVDBGRFJUazVReXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlpTeEpRVkZvUm14RExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQlowSndNRVFzVlVGQlZUZ3lSQ3hwUWtGQmJVSXNVMEZCVTNvelJDeEhRVU01UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCWjBKd01FUXNWVUZCVldzelJDeHRRa0ZCY1VJc1YwRkRka1VzVDBGQlR6VXhSQ3hMUVVGTGR6RkVMSE5DUVVGcFFqZEVMRWxCVVM5Q2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRSTEdkQ1FVRm5RbkF3UkN4VlFVRlZiVE5FTEdsQ1FVRnRRaXhYUVVOeVJTeFBRVUY1UXl4TlFVRnNRM1FyUXl4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlBha04xV0N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJhVUp5TUVRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU4yUlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFNc2FVSkJRV2xDYkRKRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhiRVp4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFRMR2xDUVVGcFFtd3lReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF6bEZMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaG9jVVFzVVVGQlUzaElMRVZCUVVsMWVFUXNSVUZCU1hGR0xHTkJRV2RDT1VRc1JVRkJjVUkxUWl4UFFVRlBNM3BETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRGRrWjFjMFFzVlVGQlYzWnpSQ3hGUVVGSmRYaEVMRVZCUVVrMlJDeG5Ra0ZCYTBKeVJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWTjBjRU1zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hKUVUxd1J5eFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFV5eHBRa0ZCYVVJelV5eHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEzUkZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVTjRReXhQUVVGUE1VTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRakZDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjNKR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRakZDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRja1lzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZSTEVsQlFVbHhNRVFzUlVGQmNVSTFRaXhQUVVOeVEycEdMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF4TUVRc1JVRkJjVUkxUWl4UFFVRlBZU3cyUWtGRGNrUlNMRVZCUVVselJpeFZRVUZWY0RSRUxFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUXpGRGIwWXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZOclRDdzJRa0ZETlVSU0xFVkJRVWxyUlN4WlFVRlphRE5FTEVkQlEyaENMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUW5Jd1JDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTnlSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmFVSnlRaXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVOc1JVRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmFVSnlRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRM0pHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hGUVVWRExFOUJSRlJ5ZVVRc1JVRkJTV2xVTEVWQlFWRXlha1FzWTBGRlZucEZMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFUaDVSQ3hGUVVGeFFqVkNMRTlCUVU5clFpeDVRa0ZKZGtJc1QwRkVWSEI1UkN4RlFVRkphVlFzUlVGQlVXMXBSQ3huUWtGRlZtcEVMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVk4xVEN3d1FrRlZla055UWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVdsQ2NqQkVMRlZCUVZWM00wUXNWVUZCV1N4WFFVTXZSQ3hQUVVORk15dERMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOYjNsRUxFVkJRWEZDTlVJc1QwRkJVU3hKUVZGd1JVZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRbkl3UkN4VlFVRlZlVE5FTEZWQlFWa3NVMEZCVTNBMFJDeEhRVU40UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFV5eHBRa0ZCYVVKeU1FUXNWVUZCVlRBelJDeFpRVUZqTEZkQlEycEZMRTlCUVU5d01rUXNTMEZCUzIweVJDeGxRVUZWZUVVc1NVRlJlRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVdsQ2NqQkVMRlZCUVZVeU0wUXNWVUZCV1N4WFFVTXZSQ3hQUVVGNVF5eE5RVUZzUXprclF5eEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRbkl3UkN4VlFVRlZaekpFTEZsQlFXTXNWMEZEYWtVc1QwRkRSVzQ1UXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVlVzU1VGUk0wVnJTeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFNc2FVSkJRV2xDY2pCRUxGVkJRVlZ4TWtRc1dVRkJZeXhUUVVGVGFETkVMRWRCUXpGRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFRMR2xDUVVGcFFuSXdSQ3hWUVVGVmRUSkVMR05CUVdkQ0xGZEJRMjVGTEU5QlFVOXFNVVFzUzBGQlN5c3dSQ3hwUWtGQldYQkVMRWxCVVRGQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRbkl3UkN4VlFVRlZkekpFTEZsQlFXTXNWMEZEYWtVc1QwRkJlVU1zVFVGQmJFTXpPVU1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlZYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZEVNc1owSkJRV3RDTEVOQlFVTXNSMEZKYWtSdU5VTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVVhRd1JDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXpsRUxFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSYmpKRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhla1Z4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFZMRkZCUVZGdU1rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOeVJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWQwWXNWMEZCTWtRc1QwRkJPVU5vTTBRc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFqSk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hIUVUxb1JpeFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSTlZNc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNM1JDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVONFF5eFBRVUZQTTBNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFZMRkZCUVZFelFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzFSVGhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSTTBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU0xUlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWt3Uml4VlFVRlZlRFJFTEVkQlEyUXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFVc1VVRkJVWFF3UkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNMVJDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZEVJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRla1JCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFVc1VVRkJVWFJDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETlVVc1NVRkJTVzU1UkN4SFFVTktRU3hGUVVGSmFWUXNSVUZCVVdsclJDeHBRa0ZEVG5BelJDeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6bFZMRzlDUVVOTUxFVkJRMEZ5T1VNc1NVRlZUaXQzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVVhRd1JDeFZRVUZWT0RORUxHTkJRV2RDTEZkQlF6RkVMRTlCUVhORGFpOURMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUW14cVJDeExRVUZOTEVsQlVUVkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZERCRUxGVkJRVlVyTTBRc1kwRkJaMElzVTBGQlV6RTBSQ3hIUVVOdVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SFFVRlRMRXRCVTJwRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVlN4UlFVRlJkREJFTEZWQlFWVTJNMFFzVlVGQldTeFRRVUZUZURSRUxFVkJRVTlwTUVRc1IwRkRkRVVzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZGMVJDeHRRa0ZCYlVJeGEwUXNTMEZCVFN4RlFVRkhha01zUlVGQlQya3dSQ3hKUVZGNlJETkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVlN4UlFVRlJkREJFTEZWQlFWVm5ORVFzWjBKQlFXdENMRmRCUXpWRUxFOUJRVTh4TWtRc1MwRkJTM2t5UkN4alFVRmpMRXRCVDNoQ2JDOURMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGVtNUVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGREwwUXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGRIQkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRkSEJETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRkRVVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXRFpHTEU5QlFWRnlNMFFzUlVGQlNYVjRSQ3hGUVVGSkswWXNXVUZCWTNRelJDeEZRVUZGZFdRc1UwRkJVeXQ2UXl4RlFVRnBRbEFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVkxGRkJRVkZ1TWtNc1ZVRkJXU3hKUVUweFJ5eFBRVWhKSzNwRExFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrMHNVMEZCVXk5R0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE9VUXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlEzaERMRTlCUVU5clN5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWTnJUQ3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmMzUlRoRkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiazBzVTBGQlUydE1MRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRE4wVXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRlJPSGxFTEVWQlFVa3JSaXhYUVVOb1FuSk1MRVZCUVU4NVdDeFpRVUZaTVRGRExFZEJRVThzVTBGQlUzZFZMRVZCUVZObk5VTXNSMEZETVVOb01FTXNSVUZCUzNGdVF5eEpRVUZKZDBJc2EwSkJRV3RDTjNSRExFVkJRVk5uTlVNc1JVRkJVV2d3UXl4RlFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZUWjVReXhYUVVGWmFEWkNMRVZCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWS3pCRExGbEJRV0UwWXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVVROQ0xEUkNRVUUyUWl4SFFVRkpMRWxCUVVsb1FpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzV1VGRmFFOHNUVUZEUml4UlFVTkZla2dzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmswc1UwRkJVM3B1UkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNM1JDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrMHNVMEZCVTNWTUxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUZFV3c2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNM1JTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVYRnJSQ3hWUVVGVExFdEJRMXAwTTBRc1JVRkJSWE5uUkN4WlFVRmpMRWRCUTNaQ2RHZEVMRVZCUVVVMlowUXNaMEpCUVdkQ0xFVkJRVWR6VWl4RlFVRlJiRFpETEVWQlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk9EUkRMRmxCUVdGcVowTXNSVUZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ2T0VNc1lVRkJZM1ZXTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZEVJc01FSkJWM1JLY2tJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGVtNUVMRlZCUVZWck5FUXNVMEZCVnl4VFFVRlRReXhIUVVNdlJDeFBRVU5KZEM5RExFVkJRVXMwY0VNc1VVRkJVVFpETEZsQlFWbG9hMFFzUzBGQlRTeEZRVUZITmpKRUxFVkJRMnhEZUVjc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFZMRlZCVVdoRE0wTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRlbTVFTEZWQlFWVnZORVFzVjBGQllTeFhRVVY0UkN4UFFVUkJPVEpFTEV0QlFVczBNa1FzVjBGQlYyNXFSQ3hSUVVOVWVsUXNUVUZIVkdNc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUE4xZ3NSVUZCVXl0NlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1N5eGpReTh6Ulc1RUxFbEJRVWt6ZUVRc1JVRkhTa0VzUlVGQlNTeFhRVU5JTEU5QlFVOVlMRXRCUkVvc1IwRkpTaXhKUVVWRFZ5eEZRVUZKUVN4SFFVRkxMRWxCUVVsdlNTeFRRVUZUTEdOQlFXSXNSMEZEVWl4TlFVRlBNVW9zUjBGRll5eHBRa0ZCV0RORExGTkJRWEZDYVVVc1JVRkJTV3BGTEZGQlQzSkRTQ3hGUVVGUFJDeFJRVUZWY1VVc1J5eG5Ra05PYWtJc1NVRkJTVFJYTEVWQlFVOHNSVUZCVVN4SFFVTm1lbGNzUlVGQlQzbFhMRVZCUTFCNFdDeEZRVUZWTEZkQlExb3NUMEZCU1VNc1MwRkJaVUVzUzBGRFJ5eHZRa0ZCV0hSRUxFOUJRV2xEUVN4WlFVTjBRaXhKUVVGWWNVUXNSVUZCYVVOQkxFVkJRM2hDTEc5Q1FVRlVaMElzUzBGQkswSkJMRXRCUTI1RFowa3NVMEZCVXl4alFVRlVRU3hKUVVOUU9Vd3NTMEZCU3l4TlFVVklPRFZFTEVWQlFUUkNMRVZCUVZFc1IwRkRlRU5xTWtRc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUGF6aERMRTFCUVU4d1J5eEhRVU14UW1veVJDeEZRVUZMTkVvc1lVRkJZU3g1UTBGQk1FTXNTMEZCVFROTExFZEJRMnhGWlN4RlFVRkxORW9zWVVGQllTd3dRMEZCTWtNc1MwRkJUVE5MTEVkQlEyNUZaU3hGUVVGTE5Fb3NZVUZCWVN3eVEwRkJORU1zUzBGQlRUTkxMRWRCUTNCRlpTeEZRVUZMTkVvc1lVRkJZU3cwUTBGQk5rTXNTMEZCVFROTExFZEJRM0pGWlN4RlFVRkxORW9zWVVGQllTeHBRMEZCYTBNc1MwRkJUVE5MTEVkQlZ6RkVjM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhNRVVzV1VGQll5eFRRVUZUZGtjc1IwRkRlRU5zTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRV0Y2TDBNc1JVRkJTelJ3UXl4VFFVTXZRM0puUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmt4TDBNc1dVRkJZeXhyUTBGWkwwTXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3lSU3h2UWtGQmMwSXNVMEZCVTNoSExFZEJRMmhFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjeVJTeHZRa0ZCY1VJeEwwTXNSVUZCU3pSd1F5eFRRVU4yUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFqTXZReXhaUVVGakxEQkRRVmwyUkNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpSRkxIRkNRVUYxUWl4VFFVRlRla2NzUjBGRGFrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSelJGTEhGQ1FVRnpRak12UXl4RlFVRkxOSEJETEZOQlEzaEVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITkVVc2NVSkJRWEZDTlM5RExGbEJRV01zTWtOQldYaEVLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlFYZENMRk5CUVZNeFJ5eEhRVU5zUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5rVXNjMEpCUVhWQ05TOURMRVZCUVVzMGNFTXNVMEZEZWtSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzJSU3h6UWtGQmMwSTNMME1zV1VGQll5dzBRMEZaZWtRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZVVJc1UwRkJVek5ITEVkQlEyNUViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMHNUMEZGZGtRemRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWM0UlN4MVFrRkJkMEkzTDBNc1JVRkJTelJ3UXl4VFFVTXhSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpoRkxIVkNRVUYxUWprdlF5eFpRVUZqTERaRFFVdDBSRU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmwwTkVRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU16UkN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsdU5rTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0YwUlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmx1TmtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU5zUlN4SlFVRlBReXhGUVVGTkxFTkJRMWhvZEVRc1MwRkJUWGxVTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhKUVVNdlEzZEhMRkZCUVZNNUwwTXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFdEJUWEJFTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITUVVc1dVRkJXVFZYTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZETVVRc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlEycERMRTlCUVU4elJ5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmt6Uml3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkNlJUaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1FVXNXVUZCV1ROR0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEZWtVc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKZVVjc1VVRkJVWFkxUkN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNRWNzVjBGQlYzZzFSQ3hIUVVObUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjd1JTeFpRVUZaZERSRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEzcEVMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN3UlN4WlFVRlpkRVlzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGRFUkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmwwUml4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTNwRkxFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUmFXeEVMRmRCUTA1d05FUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZGcmJFUXNZMEZEVG5JMFJDeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFWVk9LM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhNRVVzV1VGQldYUTBSQ3hWUVVGVk9EUkVMRkZCUVZVc1YwRkRha1FzVDBGQk9FSnFaMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsME5FUXNWVUZCVlRRMFJDeFJRVUZWTEZOQlFWTjJOVVFzUjBGRE1VUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVzFFTEhGQ1FVRnhRblJyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkZ3UkhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmwwTkVRc1ZVRkJWU3MwUkN4WFFVRmhMRmRCUTNCRUxFOUJRVGhDYkdkRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN3UlN4WlFVRlpkRFJFTEZWQlFWVTJORVFzVjBGQllTeFRRVUZUZURWRUxFZEJRemRFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGUGFFUjNXaXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITWtVc2IwSkJRVzlDZGpSRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEYmtVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3lSU3h2UWtGQmIwSndOa01zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFNVJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuQTJReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF6RkZMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExZzBSeXhQUVVGUmJtZEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UW1sT0xFVkJRVXNzUlVGQlJ5eEpRVU5xUkdoSExHRkJRV04yY2tRc1JVRkJTWFY0UkN4RlFVRkpPRWNzYlVKQlFYRkNkRWdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3dSU3haUVVGWmJqWkRMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNTVUZOZEVjc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFqZFhMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRiRVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVOcVF5eFBRVUZQTlVjc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN5UlN4dlFrRkJiMEkxUml3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkcVJqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1rVXNiMEpCUVc5Q05VWXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOcVJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrclJ5eFZRVUZWTnpWRUxFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlEyNURla3dzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRVmt6Uml3MlFrRkRlRVJTTEVWQlFVbG5TQ3hsUVVGbE9UVkVMRWRCUTI1Q0xFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjeVJTeHZRa0ZCYjBKMk5FUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRha1VzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpKRkxHOUNRVUZ2UW5aR0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRemxFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3lSU3h2UWtGQmIwSjJSaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRMnBHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hIUVVOU2NubEVMRVZCUVVscFZDeEZRVUZSZFd4RUxHRkJRMDR4TkVRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRkphVlFzUlVGQlVXOXNSQ3h0UWtGRlZteEhMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsMFJpd3dRa0ZWY2tOeVFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpKRkxHOUNRVUZ2UW5ZMFJDeFZRVUZWYnpWRUxGVkJRVmtzVjBGRE0wUXNUMEZCT0VKMlowUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpKRkxHOUNRVUZ2UW5ZMFJDeFZRVUZWYXpWRUxGVkJRVmtzVTBGQlV6YzFSQ3hIUVVOd1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJVWEJFYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITWtVc2IwSkJRVzlDZGpSRUxGVkJRVlZwTlVRc1pVRkJhVUlzVjBGRGFFVXNUMEZEUlhCblJDeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlFXRXNTVUZSZGtVelJ5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpKRkxHOUNRVUZ2UW5ZMFJDeFZRVUZWYlRWRUxHVkJRV2xDTEZOQlFWTTVOVVFzUjBGRGVrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVFJFTEdkQ1FVRm5RaTlyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkV2UTNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpKRkxHOUNRVUZ2UW5ZMFJDeFZRVUZWY1RWRUxHbENRVUZ0UWl4WFFVTnNSU3hQUVVGUEx6TkVMRXRCUVVzMk0wUXNiMEpCUVdWc1J5eEpRVkUzUW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITWtVc2IwSkJRVzlDZGpSRUxGVkJRVlZ6TlVRc1pVRkJhVUlzVjBGRGFFVXNUMEZCZVVNc1RVRkJiRU42WjBRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJUMnBEZFZnc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6UkZMSEZDUVVGeFFuZzBSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEzQkZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITkVVc2NVSkJRWEZDY2paRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhMMFZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMwUlN4eFFrRkJjVUp5TmtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU16UlN4SlFVRlBReXhGUVVGTkxFTkJRMWh0U0N4WlFVRmhNV2RFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhMUVUxNFJDeFBRVWhKUkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6UkZMSEZDUVVGeFFqbFhMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRia1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6UkZMSEZDUVVOcVF5eFBRVUZQTjBjc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMwUlN4eFFrRkJjVUkzUml3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkc1JqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5FVXNjVUpCUVhGQ04wWXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOc1JpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVseFNDeGxRVUZsYmpaRUxFZEJRMjVDTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMwUlN4eFFrRkJjVUo0TkVRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGJFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSelJGTEhGQ1FVRnhRbmhHTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF5OUVRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMFJTeHhRa0ZCY1VKNFJpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEyeEdMRWxCUVVsdWVVUXNSMEZEU2tFc1JVRkJTV2xVTEVWQlFWRTBiRVFzYTBKQlEwNHZORVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZWVGl0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpSRkxIRkNRVUZ4UW5nMFJDeFZRVUZWZVRWRUxHVkJRV2xDTEZkQlEycEZMRTlCUVRoQ05XZEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMFJTeHhRa0ZCY1VKNE5FUXNWVUZCVlhjMVJDeGxRVUZwUWl4VFFVRlRialpFTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZQYUVSM1dpeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlFYTkNlalJFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRja1VzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMlJTeHpRa0ZCYzBKME5rTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0ZvUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpaRkxITkNRVUZ6UW5RMlF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXpWRkxFbEJRVTlETEVWQlFVMHNRMEZEV0RSSExFOUJRVkZ1WjBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEV0QlRXNUVMRTlCU0VsRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlFYTkNMMWNzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU53UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlEycERMRTlCUVU4NVJ5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpaRkxITkNRVUZ6UWpsR0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYyNUdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzJSU3h6UWtGQmMwSTVSaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEyNUdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNTdEhMRlZCUVZVM05VUXNSMEZEWkN4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITmtVc2MwSkJRWE5DZWpSRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEyNUZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMyUlN4elFrRkJjMEo2Uml4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTm9SVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5rVXNjMEpCUVhOQ2VrWXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTnVSaXhKUVVGSmJubEVMRWRCUTBwQkxFVkJRVWxwVkN4RlFVRlJkV3hFTEdGQlEwNHhORVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZWVGl0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpaRkxITkNRVUZ6UW5vMFJDeFZRVUZWYnpWRUxGVkJRVmtzVjBGRE4wUXNUMEZCT0VKMlowUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpaRkxITkNRVUZ6UW5vMFJDeFZRVUZWYXpWRUxGVkJRVmtzVTBGQlV6YzFSQ3hIUVVOMFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJUMmhFZDFvc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6aEZMSFZDUVVGMVFqRTBSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEzUkZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZIT0VVc2RVSkJRWFZDZGpaRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhha1p4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWM0UlN4MVFrRkJkVUoyTmtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU0zUlN4SlFVRlBReXhGUVVGTkxFTkJRMWh0U0N4WlFVRmhNV2RFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhMUVUxNFJDeFBRVWhKUkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6aEZMSFZDUVVGMVFtaFlMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRja1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6aEZMSFZDUVVOcVF5eFBRVUZQTDBjc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWM0UlN4MVFrRkJkVUl2Uml3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkd1JqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE9FVXNkVUpCUVhWQ0wwWXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOd1JpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVseFNDeGxRVUZsYmpaRUxFZEJRMjVDTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWM0UlN4MVFrRkJkVUl4TkVRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGNFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSemhGTEhWQ1FVRjFRakZHTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlEycEZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZFVJeFJpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEzQkdMRWxCUVVsdWVVUXNSMEZEU2tFc1JVRkJTV2xVTEVWQlFWRTBiRVFzYTBKQlEwNHZORVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZWVGl0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpoRkxIVkNRVUYxUWpFMFJDeFZRVUZWZVRWRUxHVkJRV2xDTEZkQlEyNUZMRTlCUVRoQ05XZEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZFVJeE5FUXNWVUZCVlhjMVJDeGxRVUZwUWl4VFFVRlRialpFTEVkQlF6VkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZKY0VRclF5eEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVODNXQ3hGUVVGVEszcEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhMTEdkQ1EzSXhRalZETEVsQlFVa3ZOa01zUlVGQlR5eEZRVUZSTEVkQlEyWjZWeXhGUVVGUGVWY3NSVUZEVUhoWUxFVkJRVlVzVjBGRFdpeFBRVUZKUXl4TFFVRmxRU3hMUVVOSExHOUNRVUZZZEVRc1QwRkJhVU5CTEZsQlEzUkNMRWxCUVZoeFJDeEZRVUZwUTBFc1JVRkRlRUlzYjBKQlFWUm5RaXhMUVVFclFrRXNTMEZEYmtOblNTeFRRVUZUTEdOQlFWUkJMRWxCUTFBNVRDeExRVUZMTEUxQlJVaHROMFFzUlVGQmNVSXNSVUZCVVN4SlFVTnFRM1F6UkN4RlFVRkxkRU1zVDBGQlR6SldMRTlCUVU5ck9FTXNUVUZCVHl0SUxFZEJRekZDTEVsQlFVbERMRVZCUVdkRExFVkJRVkVzU1VGRE5VTjJNMFFzUlVGQlMzUkRMRTlCUVU4eVZpeFBRVUZQYXpoRExFMUJRVTluU1N4SFFVTXhRbll6UkN4RlFVRkxORW9zWVVGQllTeDNRa0ZCZVVJc1MwRkJUVE5MTEVkQlQycEVjM2RFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUXl4TFFVRlBMRWxCUVVsb2FFUXNSVUZCU3podlF5eHRRa0ZETjBJc1UwRkRRU3hEUVVGRGExa3NTMEZCVFN4SFFVTlFTQ3hGUVVGdFFra3NVMEZGWkVvc1JVRkJiVUpKTEZOQlFXbENMRk5CUTNwRExFZEJSVXBJTEVWQlFUaENTU3hqUVVGalF5eHBRa0ZCYVVJc1ZVRkJXU3hKUVVGSmJtaEVMRVZCUVV0dmNFTXNlVUpCUXpsRk1GQXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbERMRXRCUTJwQ2FHaEVMRVZCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWS3pCRExGbEJRelZDYkRoQ0xFVkJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZiemhETEdGQlF6VkNjMlFzUlVGQmJVSkpMRk5CUVZNNVJ5eDNRa0ZETlVJd1J5eEZRVUZ0UWtrc1UwRkJVMjVJTERaQ1FVTTFRaXhIUVVkS1owZ3NSVUZCT0VKSkxHTkJRV05GTEZkQlFWY3NWVUZCV1hSSkxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlF5eExRVVZ3Um5velJDeEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVODNXQ3hGUVVGVEszcEVMRTFCUVUxRExFOUJRVTluU1N4TkxHZENRM2hEZWtNc1NVRkJTUzluUkN4RlFVRlBMRVZCUVZFc1IwRkRabnBYTEVWQlFVOTVWeXhGUVVOUWVGZ3NSVUZCVlN4WFFVTmFMRTlCUVVsRExFdEJRV1ZCTEV0QlEwY3NiMEpCUVZoMFJDeFBRVUZwUTBFc1dVRkRkRUlzU1VGQldIRkVMRVZCUVdsRFFTeEZRVU40UWl4dlFrRkJWR2RDTEV0QlFTdENRU3hMUVVOdVEyZEpMRk5CUVZNc1kwRkJWRUVzU1VGRFVEbE1MRXRCUVVzc1RVRkZTRGcxUkN4RlFVRTBRaXhGUVVGUkxFZEJRM2hEYWpKRUxFVkJRVXQwUXl4UFFVRlBNbFlzVDBGQlQyczRReXhOUVVGUE1FY3NSMEZETVVJc1NVRkJTVE5GTEVWQlFYVkNMRVZCUVZFc1IwRkRia04wZUVRc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUGF6aERMRTFCUVU4clFpeEhRVU14UW5SNFJDeEZRVUZMTkVvc1lVRkJZU3d3UTBGQk1rTXNTMEZCVFROTExFZEJRMjVGWlN4RlFVRkxORW9zWVVGQllTeHZSRUZCY1VRc1MwRkJUVE5MTEVkQlF6ZEZaU3hGUVVGTE5Fb3NZVUZCWVN4dFJFRkJiMFFzUzBGQlRUTkxMRWRCUXpWRlpTeEZRVUZMTkVvc1lVRkJZU3h2UkVGQmNVUXNTMEZCVFROTExFZEJRemRGWlN4RlFVRkxORW9zWVVGQllTeHRSRUZCYjBRc1MwRkJUVE5MTEVkQlF6VkZaU3hGUVVGTE5Fb3NZVUZCWVN4eFJFRkJjMFFzUzBGQlRUTkxMRWRCUXpsRlpTeEZRVUZMTkVvc1lVRkJZU3d5UTBGQk5FTXNTMEZCVFROTExFZEJRM0JGWlN4RlFVRkxORW9zWVVGQllTeHhSRUZCYzBRc1MwRkJUVE5MTEVkQlF6bEZaU3hGUVVGTE5Fb3NZVUZCWVN4dlJFRkJjVVFzUzBGQlRUTkxMRWRCUXpkRlpTeEZRVUZMTkVvc1lVRkJZU3h4UkVGQmMwUXNTMEZCVFROTExFZEJRemxGWlN4RlFVRkxORW9zWVVGQllTeHZSRUZCY1VRc1MwRkJUVE5MTEVkQlF6ZEZaU3hGUVVGTE5Fb3NZVUZCWVN4elJFRkJkVVFzUzBGQlRUTkxMRWRCUXk5RlpTeEZRVUZMTkVvc1lVRkJZU3gzUTBGQmVVTXNTMEZCVFROTExFZEJRMnBGWlN4RlFVRkxORW9zWVVGQllTeDVRMEZCTUVNc1MwRkJUVE5MTEVkQlEyeEZaU3hGUVVGTE5Fb3NZVUZCWVN4dFJFRkJiMFFzUzBGQlRUTkxMRWRCUXpWRlpTeEZRVUZMTkVvc1lVRkJZU3hyUkVGQmJVUXNTMEZCVFROTExFZEJRek5GWlN4RlFVRkxORW9zWVVGQllTeHZSRUZCY1VRc1MwRkJUVE5MTEVkQlF6ZEZaU3hGUVVGTE5Fb3NZVUZCWVN3NFEwRkJLME1zUzBGQlRUTkxMRWRCUTNaRlpTeEZRVUZMTkVvc1lVRkJZU3g1UkVGQk1FUXNTMEZCVFROTExFZEJRMnhHWlN4RlFVRkxORW9zWVVGQllTd3JRMEZCWjBRc1MwRkJUVE5MTEVkQlEzaEZaU3hGUVVGTE5Fb3NZVUZCWVN4NVEwRkJNRU1zUzBGQlRUTkxMRWRCUTJ4RlpTeEZRVUZMTkVvc1lVRkJZU3h6UTBGQmRVTXNTMEZCVFROTExFZEJReTlFWlN4RlFVRkxORW9zWVVGQllTeDNSRUZCZVVRc1MwRkJUVE5MTEVkQlEycEdaU3hGUVVGTE5Fb3NZVUZCWVN4NVJFRkJNRVFzUzBGQlRUTkxMRWRCUTJ4R1pTeEZRVUZMTkVvc1lVRkJZU3g1UTBGQk1FTXNTMEZCVFROTExFZEJWMnhGYzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQlpTeFRRVUZUYmtrc1IwRkRhRVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXTnlhRVFzUlVGQlN6UndReXhUUVVOMlJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdGMGFFUXNXVUZCWXl3d1EwRlpka1FyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFSeXhaUVVGakxGTkJRVk53U1N4SFFVTXZRMncxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQllYUm9SQ3hGUVVGTE5IQkRMRk5CUTNSRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVY3NXVUZCV1hab1JDeFpRVUZqTEhsRFFWbDBSQ3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGM1FpeFRRVUZUY2trc1IwRkRla1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RITEhOQ1FVRjFRblpvUkN4RlFVRkxOSEJETEZOQlEyaEZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGNzYzBKQlFYTkNlR2hFTEZsQlFXTXNiVVJCV1doRkt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRVEJDTEZOQlFWTjBTU3hIUVVNelJHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVhsQ2VHaEVMRVZCUVVzMGNFTXNVMEZEYkVWeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVJ5eDNRa0ZCZDBKNmFFUXNXVUZCWXl4eFJFRlpiRVVyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGbExGTkJRVk4yU1N4SFFVTm9SR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5TaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0YwUnl4bFFVVTVSalY0UkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV042YUVRc1JVRkJTelJ3UXl4VFFVTjJSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRXhhRVFzV1VGQll5d3dRMEZaZGtRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJiMElzVTBGQlUzaEpMRWRCUTNKRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUxS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENka2NzWlVGRmJrYzFlRVFzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJiVUl4YUVRc1JVRkJTelJ3UXl4VFFVTTFSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekpITEd0Q1FVRnJRak5vUkN4WlFVRmpMQ3REUVZrMVJDczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpSSExHMUNRVUZ4UWl4VFFVRlRla2tzUjBGRGRFUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6UkhMRzFDUVVGdlFqTm9SQ3hGUVVGTE5IQkRMRk5CUXpkRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5FY3NiVUpCUVcxQ05XaEVMRmxCUVdNc1owUkJXVGRFS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQldTeFRRVUZUTVVrc1IwRkROME5zTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVkS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZYcEpMR2RDUVVGcFFpeFBRVVYwUnpWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZjMWFFUXNSVUZCU3pSd1F5eFRRVU53UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlUzYUVRc1dVRkJZeXgxUTBGWmNFUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZsTEZOQlFWTXpTU3hIUVVOb1JHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSMG9zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZoTVVrc1owSkJRV2xDTEU5QlJYcEhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZemRvUkN4RlFVRkxOSEJETEZOQlEzWkVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllUbG9SQ3haUVVGakxEQkRRVmwyUkNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjVRaXhUUVVGVE5Va3NSMEZETVVSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYzUWpsb1JDeEZRVUZMTkhCRExGTkJRMnBGY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWFZDTDJoRUxGbEJRV01zYjBSQldXcEZLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUVRKQ0xGTkJRVk0zU1N4SFFVTTFSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFUQkNMMmhFTEVWQlFVczBjRU1zVTBGRGJrVnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQmVVSm9hVVFzV1VGQll5eHpSRUZaYmtVck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRwU0N4MVFrRkJlVUlzVTBGQlV6bEpMRWRCUXpGRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkcFNDeDFRa0ZCZDBKb2FVUXNSVUZCU3pSd1F5eFRRVU5xUlhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJsSUxIVkNRVUYxUW1wcFJDeFpRVUZqTEc5RVFWbHFSU3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVFd1FpeFRRVUZUTDBrc1IwRkRNMFJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRjVRbXBwUkN4RlFVRkxOSEJETEZOQlEyeEZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENiR2xFTEZsQlFXTXNjVVJCV1d4Rkt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJaMElzVTBGQlUyaEtMRWRCUTJwRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUxS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5OUhMR1ZCUlM5R05YaEVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQlpXeHBSQ3hGUVVGTE5IQkRMRk5CUTNoRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWTI1cFJDeFpRVUZqTERKRFFWbDRSQ3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyOUlMSGRDUVVFd1FpeFRRVUZUYWtvc1IwRkRNMFJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjlJTEhkQ1FVRjVRbTVwUkN4RlFVRkxOSEJETEZOQlEyeEZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENjR2xFTEZsQlFXTXNjVVJCV1d4Rkt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIY1Vnc01FSkJRVFJDTEZOQlFWTnNTaXhIUVVNM1JHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGNVZ3NNRUpCUVRKQ2NHbEVMRVZCUVVzMGNFTXNVMEZEY0VWeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkeFNDd3dRa0ZCTUVKeWFVUXNXVUZCWXl4MVJFRlpjRVVyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGQk1FSXNVMEZCVTI1S0xFZEJRek5FYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkJlVUp5YVVRc1JVRkJTelJ3UXl4VFFVTnNSWEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05JTEhkQ1FVRjNRblJwUkN4WlFVRmpMSEZFUVZsc1JTczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSUxIbENRVUV5UWl4VFFVRlRjRW9zUjBGRE5VUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVFd1FuUnBSQ3hGUVVGTE5IQkRMRk5CUTI1RmNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVZ3NlVUpCUVhsQ2RtbEVMRmxCUVdNc2MwUkJXVzVGS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQmFVSXNVMEZCVTNKS0xFZEJRMnhFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTFLTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhCSUxHVkJSV2hITlhoRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWjBKMmFVUXNSVUZCU3pSd1F5eFRRVU42UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Y0YVVRc1dVRkJZeXcwUTBGWmVrUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVNDdzBRa0ZCT0VJc1UwRkJVM1JLTEVkQlF5OUViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMHNUMEZGZGtRemRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVTQ3cwUWtGQk5rSjRhVVFzUlVGQlN6UndReXhUUVVOMFJYSm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbElMRFJDUVVFMFFucHBSQ3haUVVGakxIbEVRVmwwUlNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJJTERaQ1FVRXJRaXhUUVVGVGRrb3NSMEZEYUVWc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUU0UW5wcFJDeEZRVUZMTkhCRExGTkJRM1pGY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVnc05rSkJRVFpDTVdsRUxGbEJRV01zTUVSQlMyNUZReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXdzJSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEyNUZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllTODNReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRsRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZUzgzUXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRekZGTEVsQlFVOURMRVZCUVUwc1EwRkRXRzFLTEZWQlFWY3hhVVFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUTNCRWNVb3NUMEZCVVROcFJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1NVRkRha1J6U2l4alFVRmxOV2xFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhIUVVONFJIVktMR2xDUVVGclFqZHBSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTMEZOTjBRc1QwRklTVVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6Unl4aFFVRmhlRmtzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU5zUlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZEZUVNc1QwRkJUM1pKTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVhaSUxEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYycEdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoZGtnc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU5xUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWwzU2l4aFFVRmhkRGhFTEVkQlEycENMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkplVW9zVlVGQlZYWTRSQ3hIUVVOa0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBOV0VzWVVGRE1VTnJaMElzUlVGQlNUQktMR2xDUVVGcFFuZzRSQ3hIUVVOeVFpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUSktMRzlDUVVGdlFubzRSQ3hIUVVONFFpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOcVJTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd4SUxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRemxFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoYkVnc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOcVJpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVXdHZSQ3huUWtGRFRuSTNSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBlbUlzV1VGRFRDeEZRVU5CTVRKRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZLemRFTEdGQlFXVXNWMEZET1VRc1QwRkJPRUpzYWtRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdGc05rUXNWVUZCVlRJM1JDeGhRVUZsTEZOQlFWTjBPRVFzUjBGRGRrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVzFFTEhGQ1FVRnhRblJyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkZ3UkhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXRnNOa1FzVlVGQlZXYzRSQ3hWUVVGWkxGZEJRek5FTEU5QlFUaENibXBFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoYkRaRUxGVkJRVlUwTjBRc1ZVRkJXU3hUUVVGVGRqaEVMRWRCUTNCRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd3MlJDeFZRVUZWYVRoRUxGbEJRV01zVjBGRE4wUXNUMEZCVDNCcVJDeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXdzJSQ3hWUVVGVmF6aEVMRlZCUVZrc1YwRkRNMFFzVDBGQmVVTXNUVUZCYkVOeWFrUXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZiVGhFTEdsQ1FVRnRRaXhYUVVOc1JTeFBRVUU0UW5ScVJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXdzJSQ3hWUVVGVk5qZEVMR2xDUVVGdFFpeFRRVUZUZURoRUxFZEJRek5GTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZiemhFTEcxQ1FVRnhRaXhYUVVOd1JTeFBRVUZQZG1wRUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGJEWkVMRlZCUVZWeE9FUXNhVUpCUVcxQ0xGZEJRMnhGTEU5QlFYbERMRTFCUVd4RGVHcEVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0ZzTmtRc1ZVRkJWWE00UkN4dlFrRkJjMElzVjBGRGNrVXNUMEZCT0VKNmFrUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXRnNOa1FzVlVGQlZUZzNSQ3h2UWtGQmMwSXNVMEZCVTNvNFJDeEhRVU01UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0ZzTmtRc1ZVRkJWWFU0UkN4elFrRkJkMElzVjBGRGRrVXNUMEZCVHpGcVJDeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXdzJSQ3hWUVVGVmR6aEVMRzlDUVVGelFpeFhRVU55UlN4UFFVRjVReXhOUVVGc1F6TnFSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUGFrTjFXQ3hGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldXNDJSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEyeEZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldXZzRReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRkRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXV2c0UXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM3BGTEVsQlFVOURMRVZCUVUwc1EwRkRXSEZMTEVsQlFVczFha1FzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUXpsRGRVc3NaVUZCWjBJM2FrUXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhIUVVGSExFbEJUV3hGTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldYcFpMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRha1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSExGbEJRM2hETEU5QlFVOTRTU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSExGbEJRVmw0U0N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkb1JqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXWGhJTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRhRVlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpkMHNzVDBGQlQzUTVSQ3hIUVVOWUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSmVVc3NhMEpCUVd0Q2RqbEVMRWRCUTNSQ0xFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxUnl4WlFVRlpialpFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUTJoRkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVJ5eFpRVUZaYmtnc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkROMFJCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSExGbEJRVmx1U0N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTJoR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUlozQkVMRlZCUTA1dU9FUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZGcGNFUXNjMEpCUlZZdlNpeEZRVUZQZEdFc1ZVRkRUQ3hGUVVOQk56TkRMRWxCVlU0cmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxUnl4WlFVRlpialpFTEZWQlFWVTJPRVFzVDBGQlV5eFhRVU4yUkN4UFFVRTRRbWhyUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVY3NXVUZCV1c0MlJDeFZRVUZWTWpoRUxFOUJRVk1zVTBGQlUzUTVSQ3hIUVVOb1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJVWEJFYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldXNDJSQ3hWUVVGVk9EaEVMR3RDUVVGdlFpeFhRVU5zUlN4UFFVRXJRbXByUkN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEhRVUZITEVsQlVXeEdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVY3NXVUZCV1c0MlJDeFZRVUZWTkRoRUxHdENRVUZ2UWl4VFFVRlRkamxFTEVkQlF6TkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZyUkN4elFrRkJjMEp5YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZQYWtSM1dpeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwY3NjMEpCUVhOQ2NEWkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRE5VVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNSeXh6UWtGQmMwSnFPRU1zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGMlJuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSExITkNRVUZ6UW1vNFF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTI1R0xFbEJRVTlETEVWQlFVMHNRMEZEV0hGTExFbEJRVXMxYWtRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEV0QlRXaEVMRTlCU0VsRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwY3NjMEpCUVhOQ01Wa3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTXpSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBjc2MwSkJRM2hETEU5QlFVOTZTU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSExITkNRVUZ6UW5wSUxEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6RkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1J5eHpRa0ZCYzBKNlNDdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXpGR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1hkTExFOUJRVTkwT1VRc1IwRkRXQ3hOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwY3NjMEpCUVhOQ2NEWkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRekZGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzUnl4elFrRkJjMEp3U0N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTjJSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBjc2MwSkJRWE5DY0Vnc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNeFJpeEpRVUZKYm5sRUxFZEJRMHBCTEVWQlFVbHBWQ3hGUVVGUlozQkVMRlZCUTA1dU9FUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1NVRlZUaXQzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGelFuQTJSQ3hWUVVGVk5qaEVMRTlCUVZNc1YwRkRha1VzVDBGQk9FSm9hMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSExITkNRVUZ6UW5BMlJDeFZRVUZWTWpoRUxFOUJRVk1zVTBGQlUzUTVSQ3hIUVVNeFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJUMmhFZDFvc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNsSExIZENRVUYzUW5JMlJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXpsRkxFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVhkQ2JEaERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoZWtaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1Unl4M1FrRkJkMEpzT0VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU55Uml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYlVvc1YwRkJXVE0yUkN4RlFVRkpkWGhFTEVWQlFVazBTaXhwUWtGQmJVSndTeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0V2TjBNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMHhSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENNMWtzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU0zUlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUTNoRExFOUJRVTh4U1N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbEhMSGRDUVVGM1FqRklMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWelZHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVSeXgzUWtGQmQwSXhTQ3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6VkdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkRNVU55VGl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZWFpJTERaQ1FVTm9SVklzUlVGQlNYZEtMR0ZCUVdGME9FUXNSMEZEYWtJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xITEhkQ1FVRjNRbkkyUkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNMVJTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVhkQ2NrZ3NkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEZWtWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbEhMSGRDUVVGM1FuSklMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkROVVlzU1VGQlNXNTVSQ3hGUVVWTExFOUJSRlJCTEVWQlFVbHBWQ3hGUVVGUmEyOUVMR2xDUVVWV2FFb3NSVUZCVHpOWExHRkJRMHdzUlVGRFFYZzNReXhGUVVOQkszZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3hJTERCQ1FWVTNRM0pDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVhkQ2NqWkVMRlZCUVZVck4wUXNZVUZCWlN4WFFVTjZSU3hQUVVORmJHcEVMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQll5eEpRVkV2UlhaSkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENjalpFTEZWQlFWVXlOMFFzWVVGQlpTeFRRVUZUZERoRUxFZEJRMnhHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVJ5eDNRa0ZCZDBKeU5rUXNWVUZCVlNzNFJDeGxRVUZwUWl4WFFVTXpSU3hQUVVGUGVqZEVMRXRCUVV0eE5rUXNhMEpCUVdFeFNTeEpRVkV6UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENjalpFTEZWQlFWVm5PVVFzWVVGQlpTeFhRVU42UlN4UFFVRjVReXhOUVVGc1EyNXJSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGaGNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1J5eGhRVUZoZEVjc1lVRkJaU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVXN4UkhKRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllUSkRMRlZCUVZrc1EwRkRha1JETEdOQlFXVXNSVUZEWmtNc1MwRkJUU3hGUVVOT1F5eFBRVUZSTEVkQlRWWjZUQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0YwTmtRc1ZVRkJWWEU1UkN4aFFVRmxMRmRCUXpsRUxFOUJRWFZGZUd0RUxFVkJRVXMwY0VNc1VVRkJVWE5DTEdsQ1FVRnBRbnBwUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FY3NZVUZCWVhSSExHRkJRV0VzUzBGTE4wcHVOME1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBOa1FzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTnVSU3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRnVPRU1zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFNVJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0Z1T0VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU14UlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYTB3c1MwRkJUWHByUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzU1VGREwwTjRSaXhOUVVGUEwzSkVMRVZCUVVsMWVFUXNSVUZCU1c5TUxGbEJRV00xVEN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGelFtbzRReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWRCUTNaSE5EaEVMRkZCUVZNMU9FUXNSVUZCU1hWNFJDeEZRVUZKYzB3c1kwRkJaMEk1VEN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbEhMSGRDUVVGM1FtdzRReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFM5SExFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1J5eGhRVUZoTlZrc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOc1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGRGVFTXNUMEZCVHpOSkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllUTklMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWMnBHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaE0wZ3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOcVJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsMVRDeFJRVUZSY2l0RUxFZEJRMW9zVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVNeFEzWk9MRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNSeXh6UWtGQmMwSjZTQ3cyUWtGRGVrVlNMRVZCUVVsM1RDeFJRVUZSZEN0RUxFZEJRMW9zVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbEhMSGRDUVVNeFEzaE9MRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVSeXgzUWtGQmQwSXhTQ3cyUWtGRE0wVlNMRVZCUVVsNVRDeFZRVUZWZGl0RUxFZEJRMlFzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGME5rUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRha1VzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBTQ3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNNVJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllYUklMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRha1lzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRWRCUTFKeWVVUXNSVUZCU1dsVUxFVkJRVkZuY1VRc1YwRkRUbTQ1UkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhIUVVsTExFOUJSRlJCTEVWQlFVbHBWQ3hGUVVGUk1IQkVMRmxCUlZaNFN5eEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzUnl4elFrRkJjMEp3U0N4NVFrRkpNME1zVDBGRVZIQjVSQ3hGUVVGSmFWUXNSVUZCVVRSd1JDeGpRVVZXTVVzc1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENja2dzTUVKQlZYaEVja0lzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1J5eGhRVUZoZERaRUxGVkJRVlUyT1VRc1VVRkJWU3hYUVVONlJDeFBRVUU0UW1oc1JDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllYUTJSQ3hWUVVGVk1EbEVMRkZCUVZVc1UwRkJVM0lyUkN4SFFVTnNSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVVhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZWFEyUkN4VlFVRlZkVGxFTEZGQlFWVXNWMEZEZWtRc1QwRkRSVEZyUkN4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSExITkNRVUYxUWl4SlFWRjRSbnBKTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FY3NZVUZCWVhRMlJDeFZRVUZWTWpsRUxGRkJRVlVzVTBGQlUzUXJSQ3hIUVVOc1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJOa1FzY1VKQlFYRkNhR3hFTEV0QlFVMHNSVUZCUjNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBSeXhoUVVGaExFZEJRVWt6TUVRc1NVRlJOVWR6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaGREWkVMRlZCUVZVNE9VUXNWVUZCV1N4WFFVTXpSQ3hQUVVGUGVEaEVMRXRCUVV0eE9FUXNZVUZCVVRGTExFbEJVWFJDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaGREWkVMRlZCUVZVck9VUXNVVUZCVlN4WFFVTjZSQ3hQUVVGNVF5eE5RVUZzUTJ4c1JDeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3Unl4aFFVRmhkRFpFTEZWQlFWVjVPVVFzVlVGQldTeFhRVU16UkN4UFFVTkZOV3RFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRWGxDTEVsQlVURkdNVWtzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1J5eGhRVUZoZERaRUxGVkJRVlUwT1VRc1ZVRkJXU3hUUVVGVGRpdEVMRWRCUTNCRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllYUkhMR0ZCUVdFc1IwRkJTVE13UkN4SlFWRTFSM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGME5rUXNWVUZCVldjclJDeFpRVUZqTEZkQlF6ZEVMRTlCUVU4eE9FUXNTMEZCUzNNNFJDeGxRVUZWTTBzc1NVRlJlRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGME5rUXNWVUZCVldrclJDeFZRVUZaTEZkQlF6TkVMRTlCUVhsRExFMUJRV3hEY0d4RUxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRV0Z5UTNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekpITEd0Q1FVRnJRblpITEdGQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hKUVV0cVJYSkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITWtjc2EwSkJRV3RDTWtRc1YwRkJZU3hEUVVOMlJFTXNaVUZCWjBJc1JVRkRhRUpETEZWQlFWY3NSVUZEV0VNc1MwRkJUU3hGUVVOT1F5eE5RVUZQTEVkQlRWUXpUU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWZFN0RUxHTkJRV2RDTEZkQlEzQkZMRTlCUVRaRk1XeEVMRVZCUVVzMGNFTXNVVUZCVVhOQ0xHbENRVUZwUW5wcFJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENka2NzWVVGQllTeExRVXQ0UzI0M1F5eEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1rY3NhMEpCUVd0Q2RqWkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGVFVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSndPRU1zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGdVJuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5BNFF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXk5RkxFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFoclRDeExRVUZOZW10RUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRbWxPTEVWQlFVc3NSVUZCUnl4SlFVTXZRMjlLTEZkQlFWa3pOa1FzUlVGQlNYVjRSQ3hGUVVGSk5Fb3NhVUpCUVcxQ2NFc3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6Unl4aFFVRmhMemRETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRGVFZHZaMFFzUzBGQlRXNXZReXhGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVkQlFVY3NSMEZEZEVSb2MwUXNUMEZCVVhaR0xFVkJRVWwxZUVRc1JVRkJTWFJvUWl4aFFVRmxObWxDTEVWQlFYRkNOVUlzVDBGQlR6TjZReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFhaR0xFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBJM1dTeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEzWkZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkRlRU1zVDBGQlR6VkpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITWtjc2EwSkJRV3RDTlVnc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGRFWTRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUWpWSUxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEZEVZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKZFV3c1VVRkJVWElyUkN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVU14UTNKT0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoZGtnc05rSkJRMmhGVWl4RlFVRkpkMG9zWVVGQllYUTRSQ3hIUVVOcVFpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJaME4zZEVRc1JVRkJUMnhoTEZkQlF6TkRkMllzUlVGQlNYRk5MRkZCUVZGdUwwUXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKY1RCRUxFVkJRWEZDTlVJc1QwRkRja05xUml4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmNUQkVMRVZCUVhGQ05VSXNUMEZCVDJFc05rSkJRM0pFVWl4RlFVRkpjMDBzVTBGQlUzQXZSQ3hIUVVOaUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGRFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWklMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUTI1RlFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJTQ3gzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRM1JHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hIUVVOU2NubEVMRVZCUVVscFZDeEZRVUZSWjNGRUxGZEJRMDV1T1VRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRkphVlFzUlVGQlVXdHZSQ3hwUWtGRlZtaEtMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0ZzU0N4NVFrRkpiRU1zVDBGRVZIQjVSQ3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4RlFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRm5PVUlzWVVGRlZtdHBRaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRTRlVVFzUlVGQmNVSTFRaXhQUVVGUGEwSXNNRUpCVld4RGNrSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWVFk1UkN4UlFVRlZMRmRCUXpsRUxFOUJRVGhDYUd4RUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJOa1FzVlVGQlZUQTVSQ3hSUVVGVkxGTkJRVk55SzBRc1IwRkRka1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UW5SclJDeExRVUZOTEVWQlFVZHFReXhKUVZGd1JITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWS3pkRUxHRkJRV1VzVjBGRGJrVXNUMEZEUld4cVJDeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdNc1NVRlJMMFYyU1N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVk1qZEVMR0ZCUVdVc1UwRkJVM1E0UkN4SFFVTTFSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTmtRc2NVSkJRWEZDYUd4RUxFdEJRVTBzUlVGQlIzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5aSExHRkJRV0VzUjBGQlNUTXdSQ3hKUVZGcVNITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWS3poRUxHVkJRV2xDTEZkQlEzSkZMRTlCUVU5Nk4wUXNTMEZCUzNFMlJDeHJRa0ZCWVRGSkxFbEJVVE5DZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJOa1FzVlVGQlZXYzVSQ3hoUVVGbExGZEJRMjVGTEU5QlFYbERMRTFCUVd4RGJtdEVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWTUN0RUxGRkJRVlVzVjBGRE9VUXNUMEZCSzBJM2JFUXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekpITEd0Q1FVRnJRblkyUkN4VlFVRlZkeXRFTEZGQlFWVXNVMEZCVTI0dlJDeEhRVU4yUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmQwUXNZMEZCWXpOclJDeExRVUZOTEVWQlFVZHhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBKMlJ5eGhRVUZoTEVkQlFVa3pNRVFzU1VGUk1VZHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBKMk5rUXNWVUZCVlRJclJDeFZRVUZaTEZkQlEyaEZMRTlCUVU4NWJFUXNSVUZCU3pSd1F5eFJRVUZSZDBRc1kwRkJZek5yUkN4TFFVRk5MRVZCUVVkeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyUnl4aFFVRmhMRkZCUVVsbUxFbEJVVEZIZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJOa1FzVlVGQlZUUXJSQ3hSUVVGVkxGZEJRemxFTEU5QlFYbERMRTFCUVd4REwyeEVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWTm5kRExGTkJRVmNzVjBGREwwUXNUMEZEUldnMFFpeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUVzk1UkN4RlFVRnhRalZDTEU5QlFWRXNTVUZSY0VWSUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENkalpFTEZWQlFWVjVLMFFzVTBGQlZ5eFRRVUZUY0M5RUxFZEJRM2hGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VKb2JFUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1rY3NhMEpCUVd0Q2RrY3NZVUZCWVN4SFFVRkpNekJFTEVsQlVXcEljM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1rY3NhMEpCUVd0Q2RqWkVMRlZCUVZVMkswUXNWMEZCWVN4WFFVTnFSU3hQUVVGUGRqbEVMRXRCUVV0dE9VUXNZMEZCVTNoTUxFbEJVWFpDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJOa1FzVlVGQlZUZ3JSQ3hUUVVGWExGZEJReTlFTEU5QlFYbERMRTFCUVd4RGFtMUVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVU5cVEzVllMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzBSeXh0UWtGQmJVSjROa1FzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTjZSU3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelJITEcxQ1FVRnRRbkk0UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllYQkdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5FY3NiVUpCUVcxQ2NqaERMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGFFWXNTVUZCVDBNc1JVRkJUU3hIUVU5aUxFOUJTRWxHTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITkVjc2JVSkJRVzFDT1Zrc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVONFJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhORWNzYlVKQlEzaERMRTlCUVU4M1NTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelJITEcxQ1FVRnRRamRJTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjNaR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMwUnl4dFFrRkJiVUkzU0N3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRM1pHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZKWW1sYUxFVkJRVTl3V2l4cFFrRkhha0p2V2l4RlFVRlBOMWtzV1VGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMFJ5eHRRa0ZCYlVKNE5rUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRka1VzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelJITEcxQ1FVRnRRbmhJTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlEzQkZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMwUnl4dFFrRkJiVUo0U0N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRXRCVjNwR2NFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMyUnl4VlFVRlZla2tzWjBKQlFXdENMRU5CUVVNc1IwRkpia1J1TlVNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlY2TmtRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU5vUlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlYwT0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRXpSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZWME9FTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOMlJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWU1rMHNVMEZCZVVRc1QwRkJPVU51SzBRc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFqSk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVNMVJXOHJSQ3hUUVVGVmJtMUVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UW1sT0xFVkJRVXNzUlVGQlJ5eEpRVU51UkRoTkxGZEJRVmx3YlVRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEV0QlRYWkVMRTlCU0VsRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5rY3NWVUZCVlM5WkxHdENRVUZ2UWl4VFFVRlRaMUlzUjBGREwwUXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlEzaERMRTlCUVU4NVNTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlFWVTVTQ3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmM1UlRoRkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZUbElMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRE9VVXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSkswMHNVVUZCVVRjdlJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKWjA0c1dVRkJXVGt2UkN4SFFVTm9RaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTV2xPTEdOQlFXTXZMMFFzUjBGRGJFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlY2TmtRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE9VUXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZWNlNDeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU16UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5rY3NWVUZCVlhwSUxIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE9VVXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRjNja1FzWlVGRFRqTXJSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUemxWTEc5Q1FVTk1MRVZCUTBGeU9VTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRjVja1FzWlVGRFRqVXJSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVUQnlSQ3hwUWtGRFRqY3JSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZYbzJSQ3hWUVVGVmNTOUVMRmxCUVdNc1YwRkRNVVFzVDBGQmMwTjRiVVFzUlVGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2JHcEVMRXRCUVUwc1NVRlJOVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmVqWkVMRlZCUVZWM0wwUXNXVUZCWXl4VFFVRlRibWRGTEVkQlEyNUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFZEJRVk1zUzBGVGFrUnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMlJ5eFZRVUZWZWpaRUxGVkJRVlZyTDBRc1VVRkJWU3hUUVVGVE55OUVMRVZCUVU5cE1FUXNSMEZEZEVVc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRjFSQ3h0UWtGQmJVSXhhMFFzUzBGQlRTeEZRVUZIYWtNc1JVRkJUMmt3UkN4SlFWRjZSRE5DTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5rY3NWVUZCVlhvMlJDeFZRVUZWZVM5RUxHTkJRV2RDTEZkQlF6VkVMRTlCUVU5dUswUXNTMEZCUzJzclJDeFpRVUZaTEV0QlVURkNOMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMlJ5eFZRVUZWZWpaRUxGVkJRVlZ6TDBRc1dVRkJZeXhYUVVNeFJDeFBRVUU0UW5wdFJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZYbzJSQ3hWUVVGVmJTOUVMRmxCUVdNc1UwRkJVemt2UkN4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVVhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWWG8yUkN4VlFVRlZkUzlFTEdOQlFXZENMRmRCUXpWRUxFOUJRVGhDTVcxRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmVqWkVMRlZCUVZWdkwwUXNZMEZCWjBJc1UwRkJVeTh2UkN4SFFVTnlSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVlhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZVEZKTEdkQ1FVRnJRaXhEUVVGRExFZEJTWFJFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZoTVRaRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEYmtVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZoZGpoRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhPVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaGRqaERMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE1VVXNTVUZCVDBNc1JVRkJUU3hEUVVOWWMwNHNlVUpCUVRCQ04yMUVMRVZCUVVzMGNFTXNVVUZCVVRCQ0xHRkJRV0ZuVHl4RlFVRkpkMDRzT0VKQlEzaEVhRThzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMlJ5eFZRVUZWZERoRExGTkJRVlVyZWtNc1IwRkRPVU4zU3l4bFFVRm5RamRxUkN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzU1VGTmJFVXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZoYUZvc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOc1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGRGVFTXNUMEZCVHk5SkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllTOUlMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWMnBHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaEwwZ3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOcVJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlF6RkROVTRzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlFWVTVTQ3cyUWtGRE4wUlNMRVZCUVVsNVRpeDNRa0ZCZDBKMlowVXNSMEZETlVJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVsNVN5eHJRa0ZCYTBKMk9VUXNSMEZEZEVJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSemhITEdGQlFXRXhOa1FzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYWtVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRV0V4U0N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTVSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZVEZJTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEYWtZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZFNGNrUXNLMEpCUTA1cUwwUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEZRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmVrZ3NNRUpCUjNoRGNIbEVMRVZCUVVscFZDeEZRVUZSYVhCRUxITkNRVVZXTDBvc1JVRkJUM1JoTEZWQlEwd3NSVUZEUVRjelF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllURTJSQ3hWUVVGVk1pOUVMRFJDUVVFNFFpeFhRVU0zUlN4UFFVTkZPVzFFTEVWQlFVczBjRU1zVVVGQlVUQkVMSGRDUVVGM1FqZHJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWeXhKUVZGd1JqbEpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZVEUyUkN4VlFVRlZOaTlFTERSQ1FVRTRRaXhUUVVGVGVHZEZMRWRCUTNSR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEZRVUZIYWtNc1NVRlRka1J6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaE1UWkVMRlZCUVZVMEwwUXNkMEpCUVRCQ0xGTkJRVk4yVFN4RlFVRlhReXhIUVVNM1JpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRVZCUVVjcmVFUXNSVUZCVnpGQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlYyNUlMRWxCVVhwSE0wSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhNVFpFTEZWQlFWVTRMMFFzT0VKQlFXZERMRmRCUXk5RkxFOUJRVTk0SzBRc1MwRkJTM1VyUkN3MFFrRkJORUlzUzBGUk1VTnNUeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRV0V4TmtRc1ZVRkJWVGc0UkN4clFrRkJiMElzVjBGRGJrVXNUMEZCSzBKcWEwUXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSemhITEdGQlFXRXhOa1FzVlVGQlZUUTRSQ3hyUWtGQmIwSXNVMEZCVTNZNVJDeEhRVU0xUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmEwUXNjMEpCUVhOQ2NtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlQycEVkMW9zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjFRak0yUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRemRGTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWFZDZURoRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhlRVp4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3JSeXgxUWtGQmRVSjRPRU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTndSaXhKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTlljVXNzU1VGQlN6VnFSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZET1VNMFRpeG5Ra0ZCYVVKdUwwUXNSVUZCU1hWNFJDeEZRVUZKTms0c2MwSkJRWGRDY2s4c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaGRqaERMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNTVUZOY0Vnc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYxUW1wYUxHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE5VVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVTjRReXhQUVVGUGFFb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWNyUnl4MVFrRkJkVUpvU1N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjelJqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWFZDYUVrc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU16Uml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWwzU3l4UFFVRlBkRGxFTEVkQlExZ3NUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRekZETjA0c1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRV0V2U0N3MlFrRkRhRVZTTEVWQlFVazRUaXhyUWtGQmEwSTFaMFVzUjBGRGRFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYxUWpNMlJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTXpSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhLMGNzZFVKQlFYVkNNMGdzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGVFVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjFRak5JTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETTBZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZGbmNFUXNWVUZEVG00NFJDeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVWxwVkN4RlFVRlJiWE5FTEhOQ1FVVldhazRzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWVRGSUxEQkNRVlUzUTNKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhLMGNzZFVKQlFYVkNNelpFTEZWQlFWVTJPRVFzVDBGQlV5eFhRVU5zUlN4UFFVRTRRbWhyUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSEswY3NkVUpCUVhWQ016WkVMRlZCUVZVeU9FUXNUMEZCVXl4VFFVRlRkRGxFTEVkQlF6TkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSY0VSemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWNyUnl4MVFrRkJkVUl6TmtRc1ZVRkJWV2RuUlN4clFrRkJiMElzVjBGRE4wVXNUMEZEUlc1dVJDeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6aEhMR0ZCUVdNc1NVRlJMMFV2U1N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ5dEhMSFZDUVVGMVFqTTJSQ3hWUVVGVmFXZEZMR3RDUVVGdlFpeFRRVUZUTldkRkxFZEJRM1JHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjclJ5eDFRa0ZCZFVJek5rUXNWVUZCVld0blJTeHZRa0ZCYzBJc1YwRkRMMFVzVDBGQlR6VXJSQ3hMUVVGTE1pdEVMSFZDUVVGclFtaE9MRWxCVVdoRGRFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWNyUnl4MVFrRkJkVUl6TmtRc1ZVRkJWVzFuUlN4clFrRkJiMElzVjBGRE4wVXNUMEZCZVVNc1RVRkJiRU4wYmtRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJUMnBEZFZnc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJkSUxIbENRVUY1UWpVMlJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXk5RkxFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUVhsQ2VqaERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTVVaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJlVUo2T0VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU4wUml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYlVvc1YwRkJXVE0yUkN4RlFVRkpkWGhFTEVWQlFVazBTaXhwUWtGQmJVSndTeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0V2TjBNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMHhSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENiRm9zYTBKQlFXOUNMRk5CUVZOblVpeEhRVU01UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUTNoRExFOUJRVTlxU2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyZElMSGxDUVVGNVFtcEpMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWemRHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQmVVSnFTU3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6ZEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkRNVU55VGl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZWFpJTERaQ1FVTm9SVklzUlVGQlNYZEtMR0ZCUVdGME9FUXNSMEZEYWtJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmRJTEhsQ1FVRjVRalUyUkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNM1JTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUVhsQ05VZ3NkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETVVWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyZElMSGxDUVVGNVFqVklMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkROMFlzU1VGQlNXNTVSQ3hGUVVWTExFOUJSRlJCTEVWQlFVbHBWQ3hGUVVGUmEyOUVMR2xDUVVWV2FFb3NSVUZCVHpOWExHRkJRMHdzUlVGRFFYZzNReXhGUVVOQkszZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3hJTERCQ1FWVTNRM0pDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUVhsQ05UWkVMRlZCUVZVck4wUXNZVUZCWlN4WFFVTXhSU3hQUVVORmJHcEVMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQll5eEpRVkV2UlhaSkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENOVFpFTEZWQlFWVXlOMFFzWVVGQlpTeFRRVUZUZERoRUxFZEJRMjVHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkblNDeDVRa0ZCZVVJMU5rUXNWVUZCVlNzNFJDeGxRVUZwUWl4WFFVTTFSU3hQUVVGUGVqZEVMRXRCUVV0eE5rUXNhMEpCUVdFeFNTeEpRVkV6UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENOVFpFTEZWQlFWVm5PVVFzWVVGQlpTeFhRVU14UlN4UFFVRjVReXhOUVVGc1EyNXJSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUGFrTjFXQ3hGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhVWdzZFVKQlFYVkNOelpFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkROMFVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRwU0N4MVFrRkJkVUl4T0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRjRSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGMVFqRTRReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzQkdMRWxCUVU5RExFVkJRVTBzUjBGUFlpeFBRVWhKUml4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJsSUxIVkNRVUYxUW01YUxHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE5VVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmxJTEhWQ1FVTjRReXhQUVVGUGJFb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRwU0N4MVFrRkJkVUpzU1N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjelJqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYVVnc2RVSkJRWFZDYkVrc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU16Uml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CU1dKcFdpeEZRVUZQY0Zvc2FVSkJSMnBDYjFvc1JVRkJUemRaTEZsQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGFVZ3NkVUpCUVhWQ056WkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRek5GTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRwU0N4MVFrRkJkVUkzU0N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTjRSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYVVnc2RVSkJRWFZDTjBnc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhMUVZGNlJtdzJReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENPVFpFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRPVVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRyU0N4M1FrRkJkMEl6T0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRjZSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVGM1FqTTRReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzSkdMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaG9jVVFzVVVGQlUzaElMRVZCUVVsMWVFUXNSVUZCU1hGR0xHTkJRV2RDT1VRc1JVRkJjVUkxUWl4UFFVRlBNM3BETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzU1VGTmVrWXNUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVGM1FuQmFMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkROMFVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJ0SUxIZENRVU40UXl4UFFVRlBia29zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkclNDeDNRa0ZCZDBKdVNTdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzFSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUVhkQ2Jra3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNMVJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFWRXNTVUZCU1hFd1JDeEZRVUZ4UWpWQ0xFOUJRM0pEYWtZc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYRXdSQ3hGUVVGeFFqVkNMRTlCUVU5aExEWkNRVU55UkZJc1JVRkJTWE5HTEZWQlFWVndORVFzUjBGRFpDeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYTBnc2QwSkJRWGRDT1RaRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF6VkZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHJTQ3gzUWtGQmQwSTVTQ3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVONlJVRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENPVWdzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU0xUml4SlFVRkpibmxFTEVWQlJVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRXlha1FzWTBGRlZucEZMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFUaDVSQ3hGUVVGeFFqVkNMRTlCUVU5clFpd3dRa0ZWYkVOeVFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRjNRamsyUkN4VlFVRlZkek5FTEZWQlFWa3NWMEZEZEVVc1QwRkRSVE1yUXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRXOTVSQ3hGUVVGeFFqVkNMRTlCUVZFc1NVRlJjRVZJTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUVhkQ09UWkVMRlZCUVZWNU0wUXNWVUZCV1N4VFFVRlRjRFJFTEVkQlF5OUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRyU0N4M1FrRkJkMEk1TmtRc1ZVRkJWVEF6UkN4WlFVRmpMRmRCUTNoRkxFOUJRVTl3TWtRc1MwRkJTMjB5UkN4bFFVRlZlRVVzU1VGUmVFSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJ0SUxIZENRVUYzUWprMlJDeFZRVUZWTWpORUxGVkJRVmtzVjBGRGRFVXNUMEZCZVVNc1RVRkJiRU01SzBNc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJZWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5OUhMR0ZCUVdVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVsQlN5OUVja01zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqYTBNc1ZVRkJXU3hEUVVOc1JFTXNZMEZCWlN4RlFVTm1ReXhMUVVGTkxFVkJRMDVETEU5QlFWRXNSVUZEVW1sQ0xFdEJRVTBzUlVGRFRrTXNUVUZCVHl4SFFVMVVNMDBzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlZ4T1VRc1lVRkJaU3hYUVVNdlJDeFBRVUYzUlhoclJDeEZRVUZMTkhCRExGRkJRVkZ6UWl4cFFrRkJhVUo2YVVRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdNdlJ5eGhRVUZoTEV0QlN5OUtiamRETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRjRVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpOVGhETEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaEwwVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTlRoRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETTBVc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0d0TUxFdEJRVTE2YTBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlF5OURlRVlzVFVGQlR5OXlSQ3hGUVVGSmRYaEVMRVZCUVVsdlRDeFpRVUZqTlV3c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3JSeXgxUWtGQmRVSjRPRU1zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hIUVVONFJ6UTRSQ3hSUVVGVE5UaEVMRVZCUVVsMWVFUXNSVUZCU1hOTUxHTkJRV2RDT1V3c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQmVVSjZPRU1zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hIUVVNNVIyOW5SQ3hOUVVGUGNHZEVMRVZCUVVsMWVFUXNSVUZCU1hWTkxGbEJRV012VFN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGMVFqRTRReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWRCUTNoSGRVWXNUMEZCVVhaR0xFVkJRVWwxZUVRc1JVRkJTWFJvUWl4aFFVRmxPR2RDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUVhkQ016aERMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNTVUZOTjBjc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV055V2l4clFrRkJiMElzVTBGQlUyZFNMRWRCUTI1RkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVONFF5eFBRVUZQY0Vvc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGamNFa3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhiRVk0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdOd1NTdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTJ4R0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1hWTUxGRkJRVkZ5SzBRc1IwRkRXaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSEswY3NkVUpCUXpGRE9VNHNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ5dEhMSFZDUVVGMVFtaEpMRFpDUVVNeFJWSXNSVUZCU1hkTUxGRkJRVkYwSzBRc1IwRkRXaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFowZ3NlVUpCUXpGREwwNHNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyZElMSGxDUVVGNVFtcEpMRFpDUVVNMVJWSXNSVUZCU1hsTUxGVkJRVlYySzBRc1IwRkRaQ3hOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGFVZ3NkVUpCUXpGRGFFOHNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGMVFteEpMRFpDUVVNeFJWSXNSVUZCU1hGTkxGRkJRVkZ1TDBRc1IwRkRXaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUXpGRGFrOHNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVGM1FtNUpMRFpDUVVNelJWSXNSVUZCU1hOTkxGTkJRVk53TDBRc1IwRkRZaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk4MlJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTnNSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5OUlMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXk5RVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakwwZ3NkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTnNSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSMEZEVW5KNVJDeEZRVUZKYVZRc1JVRkJVV2R4UkN4WFFVTk9iamxFTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQlNXbFVMRVZCUVZFd2NFUXNXVUZGVm5oTExFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjFRak5JTEhsQ1FVazFReXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZSTkhCRUxHTkJSVll4U3l4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQmVVSTFTQ3g1UWtGSk9VTXNUMEZFVkhCNVJDeEZRVUZKYVZRc1JVRkJVVFp4UkN4WlFVVldNMHdzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGFVZ3NkVUpCUVhWQ04wZ3NlVUpCU1RWRExFOUJSRlJ3ZVVRc1JVRkJTV2xVTEVWQlFWRm5PVUlzWVVGRlZtdHBRaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkclNDeDNRa0ZCZDBJNVNDd3dRa0ZWZUVSeVFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZOa1FzVlVGQlZUWTVSQ3hSUVVGVkxGZEJRekZFTEU5QlFUaENhR3hFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlV3T1VRc1VVRkJWU3hUUVVGVGNpdEVMRWRCUTI1RkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRnRSQ3h4UWtGQmNVSjBhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJjRVJ6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakx6WkVMRlZCUVZWMU9VUXNVVUZCVlN4WFFVTXhSQ3hQUVVORk1XdEVMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhLMGNzZFVKQlFYZENMRWxCVVhwR2FFb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVXlPVVFzVVVGQlZTeFRRVUZUZEN0RUxFZEJRMjVGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VKb2JFUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk5SExHRkJRV0VzUjBGQlNUTXdSQ3hKUVZFM1IzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWVGc1UkN4VlFVRlpMRmRCUXpWRUxFOUJRVTk0T0VRc1MwRkJTM0U0UkN4aFFVRlJNVXNzU1VGUmRFSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWU3M1UkN4UlFVRlZMRmRCUXpGRUxFOUJRWGxETEUxQlFXeERiR3hFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdNdk5rUXNWVUZCVlhrNVJDeFZRVUZaTEZkQlF6VkVMRTlCUTBVMWEwUXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQk1FSXNTVUZSTTBacVNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZOa1FzVlVGQlZUUTVSQ3hWUVVGWkxGTkJRVk4ySzBRc1IwRkRja1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRaRUxIRkNRVUZ4UW1oc1JDeExRVUZOTEVWQlFVZHhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTDBjc1lVRkJZU3hIUVVGSk16QkVMRWxCVVRkSGMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTgyUkN4VlFVRlZaeXRFTEZsQlFXTXNWMEZET1VRc1QwRkJUekU0UkN4TFFVRkxjemhFTEdWQlFWVXpTeXhKUVZGNFFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTgyUkN4VlFVRlZhU3RFTEZWQlFWa3NWMEZETlVRc1QwRkJlVU1zVFVGQmJFTndiRVFzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk4MlJDeFZRVUZWTUN0RUxGRkJRVlVzVjBGRE1VUXNUMEZEUlRkc1JDeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGM1FpeEpRVkY2Um14S0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5ODJSQ3hWUVVGVmR5dEVMRkZCUVZVc1UwRkJVMjR2UkN4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTmtRc2NVSkJRWEZDYUd4RUxFdEJRVTBzUlVGQlIzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012Unl4aFFVRmhMRWRCUVVrek1FUXNTVUZSTjBkemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVXlLMFFzVlVGQldTeFhRVU0xUkN4UFFVRlBjamxFTEV0QlFVdHJPVVFzWVVGQlVYWk1MRWxCVVhSQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVTBLMFFzVVVGQlZTeFhRVU14UkN4UFFVRjVReXhOUVVGc1F5OXNSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlUyZDBNc1UwRkJWeXhYUVVNelJDeFBRVU5GYURSQ0xFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUVhsQ0xFbEJVVEZHYmtvc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakx6WkVMRlZCUVZWNUswUXNVMEZCVnl4VFFVRlRjQzlFTEVkQlEzQkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUyUkN4eFFrRkJjVUpvYkVRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTlITEdGQlFXRXNSMEZCU1RNd1JDeEpRVkUzUjNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZOa1FzVlVGQlZUWXJSQ3hYUVVGaExGZEJRemRFTEU5QlFVOTJPVVFzUzBGQlMyMDVSQ3hqUVVGVGVFd3NTVUZSZGtKMFFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZOa1FzVlVGQlZUZ3JSQ3hUUVVGWExGZEJRek5FTEU5QlFYbERMRTFCUVd4RGFtMUVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVU5cVEzVllMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGQmQwSm9OMFFzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTTVSU3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjlJTEhkQ1FVRjNRamM0UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllYcEdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGIwZ3NkMEpCUVhkQ056aERMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGNrWXNTVUZCVDBNc1JVRkJUU3hEUVVOWWNVc3NTVUZCU3pWcVJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1MwRk5hRVFzVDBGSVNVUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGQmQwSjBXaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRemRGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdlNDeDNRa0ZEZUVNc1QwRkJUM0pLTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGIwZ3NkMEpCUVhkQ2Nra3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhOVVk0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyOUlMSGRDUVVGM1FuSkpMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRE5VWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmQwc3NUMEZCVDNRNVJDeEhRVU5ZTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGQmQwSm9OMFFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETlVVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI5SUxIZENRVUYzUW1oSkxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRM3BGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdlNDeDNRa0ZCZDBKb1NTeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlF6VkdMRWxCUVVsdWVVUXNSMEZEU2tFc1JVRkJTV2xVTEVWQlFWRm5jRVFzVlVGRFRtNDRSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENhRGRFTEZWQlFWVTJPRVFzVDBGQlV5eFhRVU51UlN4UFFVRTRRbWhyUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGIwZ3NkMEpCUVhkQ2FEZEVMRlZCUVZVeU9FUXNUMEZCVXl4VFFVRlRkRGxFTEVkQlF6VkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZQYUVSM1dpeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGNVZ3NNRUpCUVRCQ2FqZEVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGFFWXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGQk1FSTVPRU1zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFelJuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNGSUxEQkNRVUV3UWprNFF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTNaR0xFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFodFNpeFhRVUZaTXpaRUxFVkJRVWwxZUVRc1JVRkJTVFJLTEdsQ1FVRnRRbkJMTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVM4M1F5eFRRVUZUSzNwRExFVkJRV2xDZEhoRUxFbEJUVEZITEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUoyV2l4clFrRkJiMElzVTBGQlUyZFNMRWRCUXk5RkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGRGVFTXNUMEZCVDNSS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjVWdzTUVKQlFUQkNkRWtzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYT1VZNFJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM0ZJTERCQ1FVRXdRblJKTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRPVVlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVU14UTNKT0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoZGtnc05rSkJRMmhGVWl4RlFVRkpkMG9zWVVGQllYUTRSQ3hIUVVOcVFpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIY1Vnc01FSkJRVEJDYWpkRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF6bEZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGQk1FSnFTU3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNelJVRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjVWdzTUVKQlFUQkNha2tzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU01Uml4SlFVRkpibmxFTEVWQlJVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRnJiMFFzYVVKQlJWWm9TaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoYkVnc01FSkJWVGREY2tJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGQk1FSnFOMFFzVlVGQlZTczNSQ3hoUVVGbExGZEJRek5GTEU5QlEwVnNha1FzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6Unl4aFFVRmpMRWxCVVM5RmRra3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUpxTjBRc1ZVRkJWVEkzUkN4aFFVRmxMRk5CUVZOME9FUXNSMEZEY0VZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUUkVMR2RDUVVGblFpOXJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRXZRM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzRklMREJDUVVFd1FtbzNSQ3hWUVVGVkt6aEVMR1ZCUVdsQ0xGZEJRemRGTEU5QlFVOTZOMFFzUzBGQlMzRTJSQ3hyUWtGQllURkpMRWxCVVROQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUpxTjBRc1ZVRkJWV2M1UkN4aFFVRmxMRmRCUXpORkxFOUJRWGxETEUxQlFXeERibXRFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFVOXFRM1ZZTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkJkMEpzTjBRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU01UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSUxIZENRVUYzUWk4NFF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZWHBHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGdzZDBKQlFYZENMemhETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRja1lzU1VGQlQwTXNSVUZCVFN4SFFVOWlMRTlCU0VsR0xFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwZ3NkMEpCUVhkQ2VGb3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTTNSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBnc2QwSkJRM2hETEU5QlFVOTJTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSUxIZENRVUYzUW5aSkxEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6VkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelNDeDNRa0ZCZDBKMlNTdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXpWR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGSlltbGFMRVZCUVU5d1dpeHBRa0ZIYWtKdldpeEZRVUZQTjFrc1dVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGQmQwSnNOMFFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETlVVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSUxIZENRVUYzUW14SkxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRM3BGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelNDeDNRa0ZCZDBKc1NTeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEV0QlVURkdiRFpETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJlVUp1TjBRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU12UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSUxIbENRVUY1UW1nNVF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVEZHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlFYbENhRGxETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRkRVlzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXR2h4UkN4UlFVRlRlRWdzUlVGQlNYVjRSQ3hGUVVGSmNVWXNZMEZCWjBJNVJDeEZRVUZ4UWpWQ0xFOUJRVTh6ZWtNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMTZSaXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlFYbENlbG9zYTBKQlFXOUNMRk5CUVZOblVpeEhRVU01UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVZ3NlVUpCUTNoRExFOUJRVTk0U2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVGNVFuaEpMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWemRHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGQmVVSjRTU3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6ZEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmNUQkVMRVZCUVhGQ05VSXNUMEZEY2tOcVJpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jVEJFTEVWQlFYRkNOVUlzVDBGQlQyRXNOa0pCUTNKRVVpeEZRVUZKYzBZc1ZVRkJWWEEwUkN4SFFVTmtMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVNDeDVRa0ZCZVVKdU4wUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkROMFVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM1ZJTEhsQ1FVRjVRbTVKTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF6RkZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJlVUp1U1N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUXpkR0xFbEJRVWx1ZVVRc1JVRkZTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVVEpxUkN4alFVVldla1VzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJPSGxFTEVWQlFYRkNOVUlzVDBGQlQydENMREJDUVZWc1EzSkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVnc2VVSkJRWGxDYmpkRUxGVkJRVlYzTTBRc1ZVRkJXU3hYUVVOMlJTeFBRVU5GTXl0RExFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5iM2xFTEVWQlFYRkNOVUlzVDBGQlVTeEpRVkZ3UlVnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGQmVVSnVOMFFzVlVGQlZYa3pSQ3hWUVVGWkxGTkJRVk53TkVRc1IwRkRhRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRSRUxHZENRVUZuUWk5clJDeExRVUZOTEVWQlFVZHFReXhKUVZFdlEzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSUxIbENRVUY1UW00M1JDeFZRVUZWTURORUxGbEJRV01zVjBGRGVrVXNUMEZCVDNBeVJDeExRVUZMYlRKRUxHVkJRVlY0UlN4SlFWRjRRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVZ3NlVUpCUVhsQ2JqZEVMRlZCUVZVeU0wUXNWVUZCV1N4WFFVTjJSU3hQUVVGNVF5eE5RVUZzUXprclF5eEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZoY2tOeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRWdzWVVGQlpTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkxhRVZ5UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdVMlFpeFZRVUZaTEVOQlEyNUVReXhqUVVGbExFVkJRMlpETEV0QlFVMHNSVUZEVGtNc1QwRkJVU3hGUVVOU2FVSXNTMEZCVFN4RlFVTk9ReXhOUVVGUExFZEJUVlF6VFN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlhFNVJDeGhRVUZsTEZkQlEyaEZMRTlCUVhsRmVHdEVMRVZCUVVzMGNFTXNVVUZCVVhOQ0xHbENRVUZwUW5wcFJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQklMR0ZCUVdFc1MwRkxha3R1TjBNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU55UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1ZxT1VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRm9SbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWcU9VTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNMVJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWEwd3NTMEZCVFhwclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1NVRkRMME40Uml4TlFVRlBMM0pFTEVWQlFVbDFlRVFzUlVGQlNXOU1MRmxCUVdNMVRDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjlJTEhkQ1FVRjNRamM0UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlEzcEhORGhFTEZGQlFWTTFPRVFzUlVGQlNYVjRSQ3hGUVVGSmMwd3NZMEZCWjBJNVRDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM0ZJTERCQ1FVRXdRams0UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlF5OUhiMmRFTEUxQlFVOXdaMFFzUlVGQlNYVjRSQ3hGUVVGSmRVMHNXVUZCWXk5TkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGdzZDBKQlFYZENMemhETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRGVrZDFSaXhQUVVGUmRrWXNSVUZCU1hWNFJDeEZRVUZKZEdoQ0xHRkJRV1U0WjBJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGQmVVSm9PVU1zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hKUVUwNVJ5eFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlRGYUxHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGNFVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlEzaERMRTlCUVU5NlNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVjZTU3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmR1UmpoRkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYcEpMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGJrWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmRVd3NVVUZCVVhJclJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGRE1VTnVUeXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENja2tzTmtKQlF6TkZVaXhGUVVGSmQwd3NVVUZCVVhRclJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGRE1VTndUeXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjVWdzTUVKQlFUQkNkRWtzTmtKQlF6ZEZVaXhGUVVGSmVVd3NWVUZCVlhZclJDeEhRVU5rTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGRE1VTnlUeXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGdzZDBKQlFYZENka2tzTmtKQlF6TkZVaXhGUVVGSmNVMHNVVUZCVVc0dlJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGRE1VTjBUeXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlFYbENlRWtzTmtKQlF6VkZVaXhGUVVGSmMwMHNVMEZCVTNBdlJDeEhRVU5pTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNEZEVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRMjVGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRWtzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFFVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndTU3gzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRMjVHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hIUVVOU2NubEVMRVZCUVVscFZDeEZRVUZSWjNGRUxGZEJRMDV1T1VRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRkphVlFzUlVGQlVUQndSQ3haUVVWV2VFc3NSVUZCVHpOWExHRkJRMHdzUlVGRFFYZzNReXhGUVVOQkszZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYjBnc2QwSkJRWGRDYUVrc2VVSkJTVGRETEU5QlJGUndlVVFzUlVGQlNXbFVMRVZCUVZFMGNFUXNZMEZGVmpGTExFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM0ZJTERCQ1FVRXdRbXBKTEhsQ1FVa3ZReXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZSTm5GRUxGbEJSVll6VEN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGQmQwSnNTU3g1UWtGSk4wTXNUMEZFVkhCNVJDeEZRVUZKYVZRc1JVRkJVV2M1UWl4aFFVVldhMmxDTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVGNVFtNUpMREJDUVZWNlJISkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEEzUkN4VlFVRlZOamxFTEZGQlFWVXNWMEZETTBRc1QwRkJPRUpvYkVRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlRBNVJDeFJRVUZWTEZOQlFWTnlLMFFzUjBGRGNFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVzFFTEhGQ1FVRnhRblJyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkZ3UkhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndOMFFzVlVGQlZYVTVSQ3hSUVVGVkxGZEJRek5FTEU5QlEwVXhhMFFzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR2U0N4M1FrRkJlVUlzU1VGUk1VWnlTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWVEk1UkN4UlFVRlZMRk5CUVZOMEswUXNSMEZEY0VVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUWkVMSEZDUVVGeFFtaHNSQ3hMUVVGTkxFVkJRVWR4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNFZ3NZVUZCWVN4SFFVRkpNekJFTEVsQlVUbEhjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWT0RsRUxGVkJRVmtzVjBGRE4wUXNUMEZCVDNnNFJDeExRVUZMY1RoRUxHRkJRVkV4U3l4SlFWRjBRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWS3psRUxGRkJRVlVzVjBGRE0wUXNUMEZCZVVNc1RVRkJiRU5zYkVRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQTNSQ3hWUVVGVmVUbEVMRlZCUVZrc1YwRkROMFFzVDBGRFJUVnJSQ3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM0ZJTERCQ1FVRXlRaXhKUVZFMVJuUktMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEEzUkN4VlFVRlZORGxFTEZWQlFWa3NVMEZCVTNZclJDeEhRVU4wUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5rUXNjVUpCUVhGQ2FHeEVMRXRCUVUwc1JVRkJSM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd1NDeGhRVUZoTEVkQlFVa3pNRVFzU1VGUk9VZHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0RkRUxGVkJRVlZuSzBRc1dVRkJZeXhYUVVNdlJDeFBRVUZQTVRoRUxFdEJRVXR6T0VRc1pVRkJWVE5MTEVsQlVYaENkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0RkRUxGVkJRVlZwSzBRc1ZVRkJXU3hYUVVNM1JDeFBRVUY1UXl4TlFVRnNRM0JzUkN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNEZEVMRlZCUVZVd0swUXNVVUZCVlN4WFFVTXpSQ3hQUVVORk4yeEVMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGdzZDBKQlFYbENMRWxCVVRGR2Rrb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRGRFTEZWQlFWVjNLMFFzVVVGQlZTeFRRVUZUYmk5RUxFZEJRM0JGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VKb2JFUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhCSUxHRkJRV0VzUjBGQlNUTXdSQ3hKUVZFNVIzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWVElyUkN4VlFVRlpMRmRCUXpkRUxFOUJRVTl5T1VRc1MwRkJTMnM1UkN4aFFVRlJka3dzU1VGUmRFSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWVFFyUkN4UlFVRlZMRmRCUXpORUxFOUJRWGxETEUxQlFXeERMMnhFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlRaM1F5eFRRVUZYTEZkQlF6VkVMRTlCUTBWb05FSXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGQk1FSXNTVUZSTTBaNFNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndOMFFzVlVGQlZYa3JSQ3hUUVVGWExGTkJRVk53TDBRc1IwRkRja1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRaRUxIRkNRVUZ4UW1oc1JDeExRVUZOTEVWQlFVZHhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0Vnc1lVRkJZU3hIUVVGSk16QkVMRWxCVVRsSGMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEEzUkN4VlFVRlZOaXRFTEZkQlFXRXNWMEZET1VRc1QwRkJUM1k1UkN4TFFVRkxiVGxFTEdOQlFWTjRUQ3hKUVZGMlFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEEzUkN4VlFVRlZPQ3RFTEZOQlFWY3NWMEZETlVRc1QwRkJlVU1zVFVGQmJFTnFiVVFzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlQycERkVmdzUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xJTERSQ1FVRTBRbkkzUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMnhHTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVnc05FSkJRVFJDYkRsRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhOMFp4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVTQ3cwUWtGQk5FSnNPVU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTjZSaXhKUVVGUFF5eEZRVUZOTEVkQlQySXNUMEZJU1VZc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVNDdzBRa0ZCTkVJeldpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEycEdMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1U0N3MFFrRkRlRU1zVDBGQlR6RktMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVnc05FSkJRVFJDTVVrc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGFFYzRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNsSUxEUkNRVUUwUWpGSkxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEYUVjc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVVsaWFWb3NSVUZCVDNCYUxHbENRVWRxUW05YUxFVkJRVTgzV1N4WlFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbElMRFJDUVVFMFFuSTNSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU5vUml4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVnc05FSkJRVFJDY2trc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkROMFZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNsSUxEUkNRVUUwUW5KSkxIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUzBGUk9VWnNOa01zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJJTERaQ1FVRTJRblEzUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMjVHTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVnc05rSkJRVFpDYmpsRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhPVVp4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dTQ3cyUWtGQk5rSnVPVU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTXhSaXhKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllaMDhzVVVGQlUzZ3ZSQ3hGUVVGSmRYaEVMRVZCUVVsclR5eGpRVUZuUWpGUExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllYWTRReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFhCSExFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1NDdzJRa0ZCTmtJMVdpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEyeEdMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3U0N3MlFrRkRlRU1zVDBGQlR6TktMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVnc05rSkJRVFpDTTBrc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGFrYzRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUUyUWpOSkxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEYWtjc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVNeFF6ZE9MRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaEwwZ3NOa0pCUTJoRlVpeEZRVUZKYlU4c1ZVRkJWV3BvUlN4SFFVTmtMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1NDdzJRa0ZCTmtKME4wUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRha1lzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJJTERaQ1FVRTJRblJKTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF6bEZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3U0N3MlFrRkJOa0owU1N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTJwSExFbEJRVWx1ZVVRc1JVRkZTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVWGR6UkN4alFVVldkRTRzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWVRGSUxEQkNRVlUzUTNKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWdzTmtKQlFUWkNkRGRFTEZWQlFWVnhaMFVzVlVGQldTeFhRVU16UlN4UFFVTkZlRzVFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZeXhKUVZFdlJTOUpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVnc05rSkJRVFpDZERkRUxGVkJRVlZ6WjBVc1ZVRkJXU3hUUVVGVGFtaEZMRWRCUTNCR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dTQ3cyUWtGQk5rSjBOMFFzVlVGQlZYVm5SU3haUVVGakxGZEJRemRGTEU5QlFVOXFMMFFzUzBGQlMyY3ZSQ3hsUVVGVmNrNHNTVUZSZUVKMFFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJJTERaQ1FVRTJRblEzUkN4VlFVRlZkMmRGTEZWQlFWa3NWMEZETTBVc1QwRkJlVU1zVFVGQmJFTXpia1FzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlNYSkRZeXhGUVVGTGRFTXNUMEZCVHpKV0xFOUJRVTgzV0N4RlFVRlRLM3BFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhMTEN0SFEzSjRTVzVFTEZkQlIwTXNNRVZCU0ZFc1JVRkJRVFpOTEdOQlNWSXNNRVZCU205Q0xFVkJRVUZETEdVc2EzUkVRMEZ5UWl4WFFVTkJMRkZCUTBFc1VVRkRRU3hQUVVOQkxFOUJRMEVzVVVGRFFTeFBRVU5CTEZGQlEwRXNVVUZ4UTBFc1UwRkJjMEpFTEVWQlFWZEZMRVZCUVdsQ1F5eEhMSGxGUVVscVJDeFBRVWhOUXl4RlFVRnBRaXhUUVVGRFJDeEhRVU4yUWl4UFFVRlBMRVZCUVVGcVVTeExRVUZMTlVVc01FSkJRVEJDTEVOQlFVVkRMR2xDUVVGcFFpeEhRVUZzUkN4RFFVRXlSRFJWTEV0QlJUbEVRU3hoUVVGSkxFVkJRVXBCTEVWQlFVMTZWU3hoUVVkS0xFTkJRVkFzUlVGQlR6SlZMRVZCUVd0RFNDeEZRVUZUUlN4RlFVRm5Ra1FzU1VGR01VUXNRMEZCVUN4RlFVRlBReXhUUVV0VUxGTkJRV1ZETEVWQlFXdERTQ3hGUVVGcFFrVXNSVUZCZFVORUxFY3NlVWRCZVVWNFJpeFBRWGhGV25KSUxFVkJRV01zUjBGM1JVWXNSMEYyUlZNc1owUXNhMFpCUlV3c1NVRkJaa0VzUlVGQlFTeFJRVU5IYWtrc1JVRkJWU3hKUVVGSkxFVkJRVUZwU0N4eFFrRkRXbGNzVjBGQlZUQklMR0ZCUVVrc1JVRkJTa0VzUlVGQlRVY3NXVUZCWVVnc1JVRkJTMGNzVjBGQllVb3NSVUZCVVRjd1JDeFJRVUZSTEdGQlFXTXNUVUZETDBWck1VUXNSVUZCVVN4SlFVRkpMR1ZCUTFwd1NTeFJRVUY1UWl4UlFVRnFRaXhGUVVGQlowa3NZVUZCU1N4RlFVRktRU3hGUVVGTmVsVXNiVUpCUVZjc1pVRkJSUzl0UkN4TlFVTnFRelEzUkN4RlFVRk5ia2tzVjBGQk5FSXNVVUZCYWtJc1JVRkJRU3RJTEdGQlFVa3NSVUZCU2tFc1JVRkJUWHBWTEcxQ1FVRlhMR1ZCUVVWM1RTeFRRVU53UTNKSUxFVkJRVkUyU0N4bFFVRmxOa2dzUjBGSmJrSm9aMElzUlVGQlR5eEpRVUZKYVdkQ0xGTkJRWFZDTEZOQlFVTkRMRVZCUVZORExFZEJReTlETEVWQlFWZEVMRVZCUTFnc1JVRkJWVU1zUzBGRlVDeEZRVUZyUWl4SFFVTjBRaXhGUVVGQmVGRXNTMEZCUzBZc1QwRkJUeXhGUVVGQk1sRXNXVUZCV1VNc1lVRkJZeXhEUVVOeVF5OVFMRkZCUVZOQkxFVkJRMVExU1N4TlFVRk5hMWtzWVVGQlNTeEZRVUZLUVN4RlFVRk5WU3h4UWtGQmMwSldMRVZCUVV0VkxHOUNRVUZ6UWxnc1JVRkROMFIyV0N4VlFVRlhlVmdzUlVGRFdISlhMRlZCUVZjc1UwRkJRek15UXl4SFFVTllMRVZCUVd0Q1FTeEZRVUZSTkd4RUxHdENRVVV6UW5aUkxFMUJRVThzVTBGQlEyMUtMRVZCUVdsQ1JpeEZRVUY1UWpsSUxFZEJRemREWjBrc1IwRkJVU3hGUVVGQk1VSXNTMEZCUzJ4SUxFdEJRVXRETEVkQlEzSkNMRVZCUVZNMldDeEhRVVZVTEVWQlFWRndVQ3hOUVVsWUxFZEJRVTF1VWl4SkxHTkJRVTRzVTBGRFFYVlpMRVZCUVdNc1IwRkZWbkZJTEdGQlFVa3NSVUZCU2tFc1JVRkJUVlVzZFVKQlFYVkNWaXhoUVVGSkxFVkJRVXBCTEVWQlFVMVpMSGRDUVVOb1F5eEZRVUZMTEVsQlFVa3NSVUZCUVRkUkxFdEJRVXRzU2l4VlFVTnFRblo1UXl4SlFVRkpMR2RDUVVGcFFpeFZRVUZWY1d0RUxFZEJSV3hEZGxrc1JVRkJUeXhKUVVGSmFXZENMRk5CUVhWQ0xGTkJRVU5ETEVWQlFWTkRMRWRCUXpORExFVkJRVmRFTEVWQlExZ3NSVUZCVlVNc1MwRkZXQ3hGUVVGclFpeEpRVVZhTEVWQlFWVXNTVUZCU1N4RlFVRkJNVWtzZFVKQlExcFRMRlZCUVZVd1NDeEZRVUZMV1N4elFrRkRka0lzUlVGQlFUZFJMRXRCUVV0R0xFOUJRVThzUlVGQlFXZFNMRzlDUVVGdlFrTXNaVUZCWjBJc1EwRkRMME53VVN4UlFVRlRMRVZCUTFRMVNTeExRVUZOYTFrc1JVRkJTMVVzYjBKQlExaHNXU3hWUVVGWGVWZ3NSVUZEV0RGVUxGTkJRVlVzUlVGRFZqTkRMRlZCUVZjc1UwRkJRek15UXl4SFFVTllMRVZCUVd0Q1FTeEZRVUZSTkd4RUxHdENRVVV6UW5aUkxFMUJRVThzVTBGQlEyMUtMRVZCUVdsQ1JpeEZRVUY1UWpsSUxFZEJRemREWjBrc1IwRkJVU3hGUVVGQk1VSXNTMEZCUzJ4SUxFdEJRVXRETEVkQlEzSkNMRVZCUVZNc1IwRkZWQ3hGUVVGUmVVa3NUVUZKV0N4SFFVRk5ibElzU1VFMVFrZ3NUU3hQUVRSQ1NDeFRRVU5CZFZrc1JVRkJZeXhGTEdsQ1FVdG9RaXhQUVVaTlowa3NSVUZCU3l4SlFVRkpMRVZCUVVFMVVTeExRVUZMYkVvc1ZVRkRha0oyZVVNc1NVRkJTU3huUWtGQmFVSXNWVUZCVlhGclJDeEhRVU16UWl4RFFVRlFMRVZCUVU5blNTeFZRVVZqU1N4SkxFOUJRM1JDTEU5QlJFMURMRVZCUVZVc1UwRkRWQ3hEUVVGUUxFVkJRVThzVTBGQlEyaENMRWRCUTFBc1QwRkJUeXhKUVVGSmFVSXNSVUZCZFVKcVFpeEZRVUZOUXl4RlFVRm5RbVVzV1VGeVJqRkVMR1ZCZVVaQkxHbENRVXRETEZkQlFWbG9RaXhGUVVFMlFrTXNSVUZCZFVOcFFpeEhRVU12UlhoblJTeExRVUZMY3k5RUxFdEJRVTlCTEVWQlExcDBMMFFzUzBGQlMzZG5SU3hqUVVGblFrRXNSVUZEY2tKNFowVXNTMEZCU3podVJDeFZRVUZaZVZnc1JVRkJaVVFzUjBGeFFteERMRTlCYkVKakxGbEJRVUZ1Vnl4TlFVRmlMRk5CUVcxQ01FTXNSeXd3UlVGRGJFSTNja1FzUzBGQlMzZG5SU3hqUVVGakwzUkVMRk5CUVZFc1UwRkJRM0JWTEVWQlFVczBhRVFzUjBGRGFFTTBUQ3hGUVVGVGFqUkRMRWxCUVVsMlZpeEZRVUZMTkdoRUxFMUJSVzVDYW1kRUxFdEJRVXM0YmtRc1ZVRkJWWEZDTEUxQlFVMHdReXhITEZkQlIyWXNXVUZCUVhaRExGbEJRVkFzVTBGQmJVSnRXQ3hIUVVOc1FucG5SU3hMUVVGTE9HNUVMRlZCUVZWM1FpeFpRVUZaYlZnc1NVRkhja0lzV1VGQlFXeFlMRmRCUVZBc1YwRkRRM1p3UkN4TFFVRkxPRzVFTEZWQlFWVjVRaXhqUVVkVUxGbEJRVUZGTEU5QlFWQXNWMEZEUTNwd1JDeExRVUZMT0c1RUxGVkJRVlV5UWl4VlFVVnFRaXhGUVRkQ1FTeEhRWGxEUVN4elFrRkJhVU5wV0N4RlFVRXdRblJhTEVWQlFXTnJXU3hITEcxTFFVVnlSQ3hQUVVSaWNVSXNSVUZCWVhKQ0xHRkJRVWtzUlVGQlNrRXNSVUZCVFhOQ0xHTkJRMDRzUjBGQlRTeEZRVUZCUXl4blEwRkJNRU5zVUN4SlFVRm1aMUFzUjBGQk5FSkJMRVZCUVZkSExHdENRVUZ0UWtnc1lVRkJWU3hGUVVGV1FTeEZRVUZaU1N4WkxFOUJiMEpzUnl4UFFYQkNiRUlzUlVGQllTeFRRVUZZUXl4RlFVRkZMRXRCUVVWRExFVkJRVVVzUzBGSFZrTXNSVUZCVnpWQ0xFVkJRMWhCTEV0QlEwZzBRaXhGUVVGWExFdEJRVXMxUWl4SlFVVlFSeXhYUVVGblF5eFJRVUZ1UWl4RlFVRkJTQ3hoUVVGSkxFVkJRVXBCTEVWQlFVMXpRaXh4UWtGQllTeGxRVUZGVHl4dlFrRkRkRU5FTEVWQlFWTjZRaXhoUVVOVWVVSXNSVUZCVTJ4Q0xHOUNRVU5hYTBJc1JVRkJVM3BDTEZkQlFYRkRMRkZCUVhoQ0xFVkJRVUZJTEVWQlFVdFZMREpDUVVGdFFpeGxRVUZGZURGRUxGRkJRVkVzWVVGQll5eEpRVVYwUlRBeVJDeEZRVUZUZWtJc1YwRkJZV2xDTEVWQlFXbENiREpFTEZGQlFWRXNZVUZCWXl4TFFVY3ZSREF5UkN4RlFVRlRjbGNzV1VGQmFVTXNVVUZCYmtJc1JVRkJRWGxWTEdGQlFVa3NSVUZCU2tFc1JVRkJUWE5DTEhGQ1FVRmhMR1ZCUVVWUkxIRkNRVU0xUTBZc1JVRkJVMnhDTEc5Q1FVRjVReXhSUVVGdVFpeEZRVUZCVml4aFFVRkpMRVZCUVVwQkxFVkJRVTF6UWl4eFFrRkJZU3hsUVVGRlV5dzJRa0ZEY0VSSUxFVkJRVk5vUWl4eFFrRkJNRU1zVVVGQmJrSXNSVUZCUVZvc1lVRkJTU3hGUVVGS1FTeEZRVUZOYzBJc2NVSkJRV0VzWlVGQlJWVXNLMEpCUnpsQ0xFZEJRVTF1UXl4RlFVRlhkVUlzUlVGQmEwSlJMRWtzWTBGQmNrUkxMRVZCUVd0Q0xGTkJRMnhDYW1Jc1JVRkJVeXhGUVVGQkswa3NTMEZCU3k5SkxFOUJRVThzUlVGQlFXdGlMR2xDUVVGcFFrTXNTMEZCVFN4RFFVTnFSSEpoTEV0QlFVMXpXaXhGUVVOT05Wa3NWVUZCVjNsYUxFdEJSMUpxUXl4aFFVRkpMRVZCUVVwQkxFVkJRVTFWTEhOQ1FVZHJRaXhSUVVGcVFpeEZRVUZCVml4aFFVRkpMRVZCUVVwQkxFVkJRVTE2VlN4dFFrRkJWeXhUUVVGRkwyMUVMRXRCU3pGQ2F6UkVMRVZCUVU4c1IwRkZVREJHTEVkQlFYTkNMRVZCUTNCQ1F5eEZRVUZaTEZOQlFVTkRMRWRCUTJ4Q0xFbEJRVWxHTEVWQlFVb3NRMEZIUVVFc1IwRkJjMElzUlVGRGRFSXNTVUZCVFVjc1JVRkJiMElzU1VGQlNTeEZRVUZCTlVrc2EwSkJRemxDTkVrc1JVRkJhMEo2Uml4UlFVRlJTaXhIUVVNeFFpeEpRVUZOYkRGRUxFVkJRVk1zU1VGQlNTeEZRVUZCTUhCRUxFOUJRMjVDTVhCRUxFVkJRVTkzY1VRc1VVRkJVU3hGUVVGQmJrb3NTMEZCU3pKYUxGTkJRM0JDYURkRUxFVkJRVTk1Y1VRc1YwRkJWM0ZSTEVkQlEyeENReXhGUVVGclFqRkZMRk5CUVZOeU1rUXNSMEZETTBJc1JVRkJRWFZ2UkN4TFFVRkxSQ3hOUVVGTkxFVkJRVUZ2VXl4cFFrRkJhVUpQTEZkQlFWa3NRMEZEZGtNdlVpeFJRVUZUTmxJc1JVRkRWR2hYTEZOQlFWVXNRMEZEVkN4WFFVRlpla1VzUjBGRllrRXNTMEZCVFhOYUxFVkJRMDQxV1N4VlFVRlhlVm9zUlVGRFdETmFMRTFCUVU4c1UwRkJRMjloTEVkQlEwTXNTVUZCUVd3M1JDeEZRVUZ0UTJzM1JDeEZRVUZOTEU5QlFXcEROMUlzUlVGQk1rSTJVaXhGUVVGTkxHTkJRV3hDZW5aRUxFVkJRVmw1ZGtRc1JVRkJUU3hSUVVNM1EydzNSQ3hKUVVGWExFVkJRVUYxYjBRc1MwRkJTMnhJTEV0QlFVdERMRWxCUVUwM01VTXNSMEZITDBJelRpeFJRVUZSUXl4TlFVRk5jM0pFTEZGQlNWZzRVaXhGUVVGWExGZEJRMmhDTEVsQlFVbFFMRVZCUVVvc1EwRkhRVUVzUjBGQmMwSXNSVUZEZEVJc1NVRkJUVWNzUlVGQmIwSXNTVUZCU1N4RlFVRkJOVWtzYTBKQlF6bENORWtzUlVGQmEwSjZSaXhSUVVGUlNpeEhRVU14UWpaR0xFVkJRV3RDTTBVc1UwRkJVU3hIUVVNeFFpeEZRVUZCTjA0c1MwRkJTMFFzVFVGQlRTeEZRVUZCYjFNc2FVSkJRV2xDVHl4WFFVRlpMRU5CUTNaREwxSXNVVUZCVXpaU0xFVkJRMVJvVnl4VFFVRlZMRU5CUTFRc1YwRkJXWHBGTEVkQlJXSkJMRXRCUVUxeldpeEZRVU5PTlZrc1ZVRkJWM2xhTEVWQlExZ3pXaXhOUVVGUExGTkJRVU52WVN4SFFVTkRMRWxCUVVGc04wUXNSVUZCYlVOck4wUXNSVUZCVFN4UFFVRnFRemRTTEVWQlFUSkNObElzUlVGQlRTeGpRVUZzUW5wMlJDeEZRVUZaZVhaRUxFVkJRVTBzVVVGRE4wTnNOMFFzU1VGQlZ5eEZRVUZCZFc5RUxFdEJRVXRzU0N4TFFVRkxReXhKUVVGTk56RkRMRWRCUnk5Q00wNHNVVUZCVVVNc1RVRkJUWE55UkN4UlFVOWlLMUlzUlVGQlowSXNTVUZCU1haRExGTkJRV0VzVTBGQlEwTXNSVUZCVTBNc1IwRkRPVU56UXl4RlFVRlhka01zUlVGRFJFTXNTMEZGVUhWRExFZEJRV1VzUjBGRFpIcENMR0ZCUVZVc1JVRkJWa0VzUlVGQldVY3NiVUpCUVdJc1RVRkZaU3hIUVVGTlJTeEZRVUZIY1VJc1pTeFBRWFZETTBJc1QwRjJRMDFETEVWQlFWa3NVMEZGWkN4SFFVRmpMRVZCUTJ4Q2RFSXNSVUZCUjNWQ0xHVkJRV2xDTEZOQlFVMURMRWRCUVVzc2NVTXNNRVJCUXpsQ0xGTkJRVTFPTEVjc1QwRkRUaXhQUVVSQkxGTkJRMGxGTEVWQlEwZ3NTVUZIZFVJc1QwRkJjRUpKTEVWQlFVMTJTU3hYUVVOVUxFZEJRV01zUlVGRFpHZEpMRWxCUTBFc1RVRkhTMUVzUlVGM1NGUXNVMEZCTmtJemJFVXNSMEZETlVJc1NVRkJTVzA1UkN4RlFVRlpMRWxCUVVrc1JVRkJRWEpDTEdGQlEzQkNjVUlzUlVGQlZVa3NZVUZCWVhZNVJDeEZRVUZGYlRsRUxGZEJRM0pDYmpsRUxFVkJRVVZ2T1VRc1VVRkRURVFzUlVGQlZVc3NWVUZCVlhnNVJDeEZRVUZGYnpsRUxGRkJSVzVDY0RsRUxFVkJRVVUwYkVVc1pVRkRUSHBKTEVWQlFWVk5MR2xDUVVGcFFubzVSQ3hGUVVGRk5HeEZMR1ZCUlRGQ05XeEZMRVZCUVVWek9VUXNhMEpCUTB4SUxFVkJRVlZQTEc5Q1FVRnZRakU1UkN4RlFVRkZjemxFTEd0Q1FVVnFReXhQUVVGUFNDeEZRWEJKVlRCSkxFTkJRVzlDU0N4RlFVRk5ka2tzV1VGRGJrTTBTQ3hGUVVGdlFpeEpRVUZKTEVWQlFVRTFTU3h0UWtGRFdtMUVMRkZCUVZGS0xFZEJRekZDTmtZc1JVRkJhMEo0U0N4aFFVRmhiMGtzUjBGREwwSXNSVUZCUVhCVUxFdEJRVXRFTEUxQlFVMHNSVUZCUVc5VExHbENRVUZwUWs4c1YwRkJXU3hEUVVOMlF5OVNMRkZCUVZNMlVpeEZRVU5VYUZjc1UwRkJWU3hEUVVOVUxGZEJRVmw2UlN4SFFVVmlRU3hMUVVGTmMxb3NSVUZEVGpWWkxGVkJRVmQ1V2l4RlFVTllNMW9zVFVGQlR5eFRRVUZEYjJFc1IwRkRReXhKUVVGQmJEZEVMRVZCUVcxRGF6ZEVMRVZCUVUwc1QwRkJha00zVWl4RlFVRXlRalpTTEVWQlFVMHNZMEZCYkVKNmRrUXNSVUZCV1hsMlJDeEZRVUZOTEZGQlF6ZERiRGRFTEVsQlFWY3NSVUZCUVhWdlJDeExRVUZMYkVnc1MwRkJTME1zU1VGQlRUY3hReXhIUVVjelFqWjJSQ3hIUVVGblFpeEhRVWR3UW5nNVJDeFJRVUZSUXl4TlFVRk5MREJDUVVFeVFuTnlSQ3hOTEdGQlN6VkRMRWRCUVUwMlVTeEZRVUZITkVJc2IwSkJRVzlDVGl4SkxFOUJRVGRDTEZNc2FVSkJlVVZFTEU5QmRFVkpUeXhIUVVGWExFVkJRMloyWXl4RlFVRlBORU1zVjBGQlZTeFRRVUZQTXpKRExFZEJRWEZDTEhGRExIVkZRVU40UTBFc1JVRkJVV3R4UkN4VlFVTlFiMGNzUjBGRFNHeENMRVZCUVZVc2FVTkJRMVlzVFVGRlMzUlhMRVZCUVU4NU5FTXNSVUZCVVRCd1JDeFZRVU55UWpSSExFZEJRVmNzUlVGRFdEZEhMRVZCUVU5NmNFUXNSVUZCVVdkeFJDeFZRVVZVZFVjc1JVRkJXU3hKUVVGSlF5eHpRa0ZCYzBJMU4wUXNTMEZCUzI5b1JDeE5RVUZOTVRKRExFdEJRVXQzTlVNc1JVRkJTMnRSTEZsQlEycEZlVVlzUlVGQlIyZERMSEZDUVVGeFFrWXNSMEZGZUVKWUxFZEJRVk1zU1VGRlRIaENMR0ZCUVZVc1JVRkJWa0VzUlVGQldVY3NiMEpCUTJaelFpeEhRVUZsTEVWQlEyWklMRWxCUTBFc1N5eFBRV3BDUlN4TkxGZEJiVUpQTVhaRUxFVkJRVkZ2Y1VRc1dVRkJVaXhaUVVOV0xFbEJRVXRyUnl4RlFVVktMRTlCUkVGc1FpeEZRVUZWTEhORFFVTldMRWxCUlVRc1IwRkJTWEIyUkN4RlFVRlJaM0ZFTEZsQlFXTlFMRVZCUlhwQ0xFOUJSRUV5Uml4RlFVRlZMSFZDUVVGMVFuQjJSQ3hGUVVGUlozRkVMRlZCUVZNc1UwRkJVMUFzUjBGRE0wUXNTVUZGUzBVc1JVRkJVek53UkN4RlFVRlJOSEJFTEZsQlEycENPRWNzUlVFNFExUXNVMEZCSzBKdWJVVXNSMEZET1VJc1NVRkJTVzA1UkN4RlFVRnBReXhEUVVOd1EwRXNWVUZCVjI0NVJDeEZRVUZGTWpsRUxHZENRVVZXTXpsRUxFVkJRVVU0T1VRc1kwRkRURmdzUlVGQlZVTXNUMEZCVTNBNVJDeEZRVUZGTkRsRUxHRkJSV3hDTlRsRUxFVkJRVVZwSzBRc2NVSkJRMHhrTEVWQlFWVjVTU3hqUVVGblFqVnNSU3hGUVVGRkt6bEVMRzlDUVVWNlFpODVSQ3hGUVVGRmJ5dEVMSGRDUVVOTWFrSXNSVUZCVlVjc2FVSkJRVzFDZERsRUxFVkJRVVZySzBRc2RVSkJSV2hETEU5QlFVOW1MRVZCTTBSUmFVb3NRMEZCYzBKb1NDeEZRVUZQZWtJc1owSXNhVUpCUlhwRExFOHNjMEpCUVVFc1IwRkJUWFZITEVWQlFVZHRReXhuUWtGQlowSkdMRWtzWTBGQmVrSXNVeXhoUVVkQkxFOHNWMEZFUVhSQ0xFVkJRVlVzUjBGRFZpeEpMREJDUVVsRUxFOUJSRUZCTEVWQlFWVXNPRUpCUTFZc1NTd3lRa0ZOUlhsQ0xFVkJRVmtzU1VGQlNYcEVMRk5CUVdNc1UwRkJRME1zUlVGQlUwTXNSMEZETTBOM1JDeEZRVUZ0UW5wRUxFVkJRMjVDTUVRc1JVRkJhMEo2UkN4TFFVVnVRblphTEVWQlFVOXpRaXhQUVVGTkxGTkJRVU01WjBRc1JVRkJiVUp4Y0VRc1JVRkJkVUp3U0N4SFFVTnVSR3BwUkN4SlFVRlhMRVZCUVVGMWIwUXNTMEZCUzJ4SUxFdEJRVXRETEVsQlNYcENlR3BFTEZGQlFWRkRMRTFCUVUxemNrUXNSMEZEWkcxVUxFVkJRV2RDYmxRc1NVRktabXRVTEU5QlRVWXZZeXhGUVVGUE5rTXNUVUZCVFN4RFFVRkZMRmRCUVZrdlFpeEpRVVZ5UW0xakxFVkJRV01zU1VGQlNTeEZRVUZCTVVzc1dVRkRiRUl5U3l4RlFVRmhMelJDTEV0QlFVdDBha01zUzBGQlMwTXNWVUZCVlRRMVJDeEZRVUZIZVVNc2JVSkJRekZEUml4RlFVRlpiRWtzVDBGQlQyMUpMRWRCUTJZM1F5eEhRVUZqUVN4RlFVRlhSeXh0UWtGRE5VSjVReXhGUVVGWmFra3NhMEpCUVd0Q2NVWXNSVUZCVjBjc2JVSkJSVEZEZUdFc1JVRkJUM292UXl4TFFVRkxNRGhFTEVsQlJVNUhMRVZCUVVzc1NVRkJTU3hGUVVGQlF5eGpRVUZqTTBNc1JVRkJTVU1zU1VGRE9VSXlReXhOUVVGTmJsa3NUVUZCU3l4WFFVRk5MRTlCUVVFMFdDeFBRVU53UWl4SFFVRk5SQ3hITEU5QlEwNHNUMEZFUVN4VFFVTkJMRWRCUVUxTkxFVkJRVWRGTEU4c1QwRkhWQ3hQUVVoQkxGTkJRMEY0UWl4SFFVRmxMRVZCUTJaSUxFbEJRMDhzUTBGQlVDeEZRVUZQTEVOQlFVVTBRaXhwUWtGQmEwSklMRVZCUVVkSExHMUNRVUZ2UWtNc1pVRkJaMEk1UXl4aExHMXJRa04wV1c1RkxGZEJRMEVzVVVGRFFTeFJRVk5CTEdOQlNVTXNWMEZCV1VFc1JVRkJkVUpETEVkQlFXNURMRTFCUTBNc1dVRkJUVVFzUlVGQlNVTXNTVUZCUnl4TExFOUJTazRzUlVGQlFUaERMR2RDUVVGclFpeEZRVU5VTEVWQlFVRkRMRkZCUVRaRExFZEJTVGRFTDBNc1JVRkJSMnhTTEZWQlFWa3NVMEZCUTNsVExFZEJRVFpDTEZOQlFVdDVRaXhwUWtGQmFVSjZRaXhKTEVWQmNVVnlSU3hQUVRORmJVTXNUMEZUTTBJc1dVRkJRWEZDTEdsQ1FVRlFMSE5DUVVORExFOUJRVThzVTBGQlEzWkZMRWRCUTFBc1QwRkJUeXhGUVVGTE5FVXNWVUZCVlN4RlFVRkxReXhsUVVGblFqZEZMRXRCU1hKRExGbEJRVUV5UlN4cFFrRkJVaXhUUVVGNVFucENMRWRCUTNoQ0xFbEJRVWswUWl4RlFVTktMRWxCUTBOQkxFVkJRVThzUlVGQlFXcFpMRk5CUVZNdlRDeHJRa0ZCYTBKdmFVSXNSVUZCVFhCdlF5eE5RVU4yUXl4TlFVRlBMelpDTEVkQlJWSXNXVUZFUVhWR0xGRkJRVkZETEUxQlFVMHNPRUpCUVN0Q2VFWXNSMEZKT1VNc1NVRkJUVEF3UkN4RlFVRlRjVkVzUlVGQlMzQlJMRmxCUTNCQ0xGRkJRV1Z5UXl4SlFVRlliME1zUlVGQlNpeERRVXRCTEVsQlFVMVFMRVZCUVV0UExFVkJRVTlNTEZGQlExb3lVU3hGUVVGbGNtdEZMRXRCUVV0bmEwVXNVVUZCVVhoUkxGRkJRMkkzUWl4SlFVRnFRakJUTEVWQlNVcEJMRVZCUVdGRExFZEJRVWRETEZkQlFWZElMRWRCU0RGQ2VDOUVMRkZCUVZGRExFMUJRVTBzSzBKQlFXZERMRXRCUVUweWRVUXNVVUZRY0VRMWRVUXNVVUZCVVVNc1RVRkJUU3cyUWtGaFVpeFpRVUZCY3k5RUxHRkJRVklzVjBGRFF5eEpRVUZOY0ZFc1JVRkJVeXhKUVVGSkxFVkJRVUYyUWl4UFFVVnVRaXhQUVVSQmRVSXNSVUZCVDA0c1RVRkJUWHA2UkN4TFFVRkxLMnBGTEcxQ1FVTllhRkVzUjBGSFFTeFpRVUZCYlZFc1ZVRkJVaXhUUVVGclFtNVJMRVZCUVdkQ2RVd3NSMEZCYkVNc1YwRkRTeXRGTEVWQlFXVnlhMFVzUzBGQlMyZHJSU3hSUVVGUmFsRXNSVUZCVDB3c1UwRkRka01zVVVGQmNVSXZRaXhKUVVGcVFqQlRMRVZCUVRSQ0xFTkJReTlDTEVkQlFVazNiVVVzVDBGQlQzZHBSQ3hMUVVGTGFHZEVMRXRCUVV0bmEwVXNVMEZCVXpWclJTeFBRWFJFV2l4SlFYVkVha0lzVFVGQlRTeEpRVUZKSzBNc1RVRkJUU3h2UWtGSGFrSnJhVVVzUlVGQlpTeERRVUZGUXl4SFFVUkpMRWxCUVVrc1JVRkJRVVVzWVVGQllYaHJSU3hMUVVGTkszcEVMRWRCUVZFc1UwRkJRMUFzUjBGQlpTeFRRVUZMYVZJc2FVSkJRV2xDYWxJc1MwRkJTemhNTEVsQlJTOUdkQzlFTEV0QlFVdG5hMFVzVVVGQlVXcFJMRVZCUVU5TUxGTkJRVmN5VVN4RlFVVm9ReXhQUVVGUFFTeEZRVUZoUXl4SlFVZGlMRmxCUVVGSExHbENRVUZTTEZOQlFYbENhbElzVlVGRGFrSjRla1FzUzBGQlMyZHJSU3hSUVVGUmVGRXNTVUZIWkN4WlFVRkJhMUlzWVVGQlVDeFRRVUZ2UWpOUkxFVkJRV2RDYmtrc1IwRkRia01zU1VGQlRXOUZMRVZCUVZVc1NVRkJTU3hGUVVGQmVVTXNVVUZEY0VKNlF5eEZRVUZSYTBVc1ZVRkJWVWdzUjBGRGJFSXZSQ3hGUVVGUmJVVXNWMEZCVjNaSkxFZEJRMjVDTlhKRUxFdEJRVXQxVVN4TlFVRk5lUzlETEVsQlIwd3NXVUZCUVd4V0xHRkJRVkFzVTBGQmIwSnBXaXhGUVVGblFteEVMRWRCUTI1RExFbEJRVTFpTEVWQlFWVXNTVUZCU1N4RlFVRkJlVU1zVVVGRGNFSjZReXhGUVVGUmEwVXNWVUZCVlVnc1IwRkRiRUl2UkN4RlFVRlJkVUlzVjBGQlYxWXNSMEZEYmtJM2QwUXNTMEZCUzNWUkxFMUJRVTE1TDBNc1NVRkZZaXhGUVRORlFTeERRVUZ0UXl4RlFVRkJNbFVzWVVGQmRFSXNSVUZCUVdoQ0xHbENMRGhDUTFwaU96czdPenM3TzBGQlZVRXNTVUZCU1d3MlFpeEZRVUZUTEVWQlFWRXNTVUZEYWtKdE4wSXNSVUZCVlN4RlFVRlJMRWxCUTJ4Q2JqbEVMRVZCUVZVc1JVRkJVU3hKUVcxRWRFSXNVMEZCVTI4NVJDeEpRVU5RTEU5QlFVOHhNa0lzUlVGQlR6SXlRaXh2UWtGRFZpeFhRVU5CTEZkQlIwNHNVMEZCVTBNc1JVRkJZME1zUlVGQlRUVnNSU3hIUVVNelFpeEhRVUZKZVd4RkxFbEJRV1Y2YkVVc1JVRkRha0lzVFVGQlRTeEpRVUZKZDBJc1YwRkJWeXc0UWtGamRrSXNUMEZhU1hWMFF5eEZRVUZQTWpKQ0xIRkNRVVZVUlN4RlFVRlBMRWxCUVVrNU5VSXNWMEZCVnpseVF5eEpRVU5xUW10MFJDeFZRVUZaYm1Vc1JVRkJUM3AyUXl4WFFVZFlMRTlCUVZSemJVVXNTVUZEUmtFc1JVRkJUeXhKUVVGSk56SkNMRVZCUVU4dmRVTXNTVUZGY0VJMGJFVXNSVUZCU3pWc1JTeFBRVUZUUVN4SFFVZFVOR3hGTEVWQllWUXNVMEZCVXpjeVFpeEZRVUZST0RKQ0xFVkJRVXRETEVWQlFXdENPV3hGTEVkQlEzUkRMRXRCUVVzcmRVTXNSVUZCVHpJeVFpeHhRa0ZCZVVJNWEwVXNaMEpCUVdkQ2JYVkRMRWRCUTI1RUxFOUJRVThzU1VGQlNVRXNSVUZCVHpneVFpeEZRVUZMUXl4RlFVRnJRamxzUlN4SFFVa3pReXhIUVVGdFFpeHBRa0ZCVWpac1JTeEZRVUZyUWl4RFFVTXpRaXhIUVVGblF5eHBRa0ZCY2tKRExFVkJRMVFzVFVGQlRTeEpRVUZKTDJsRkxFMUJRMUlzY1VWQlIwb3NUMEZCVDJkcVJTeEZRVUZaYm14RkxFdEJRVTFwYkVVc1IwRkZNMElzVDBGQlR6VTFReXhGUVVGTGNuSkNMRXRCUVUxcGJFVXNSVUZCUzBNc1JVRkJhMEk1YkVVc1IwRlhNME1zVTBGQlUybHpRaXhGUVVGTk1qVkRMRVZCUVUxcWJrVXNSVUZCVDIxdVJTeEZRVUZyUWpsc1JTeEhRVU0xUXl4SFFVRnhRaXhwUWtGQlZuSkNMRVZCUTFRc1RVRkJUU3hKUVVGSmRVTXNWVUZCVlN4NVEwRkhkRUlzVFVGQk1rSXNiMEpCUVdoQ05IUkRMR0ZCUVN0Q2JuZERMR0ZCUVdsQ2JYZERMRmxCTmtnM1JDeFRRVUV3UWpneVFpeEZRVUZOTVhGRUxFVkJRVTh5ZWtNc1JVRkJXVGQxUkN4SFFVZHFSQ3hIUVVaQmEySXNSVUZCVFhGNlF5eFhRVVZHVFN4RlFVRmhMRWRCUVVzemVrTXNSVUZCVFhGNlF5eFhRVUZoVFN4RlFVTjJReXhOUVVGTkxFbEJRVWx5ZEVRc1YwRkJWeXcyUWtGSGRrSXNSMEZCU1RCYUxFVkJRVTF4ZWtNc1YwRkJZVTBzUjBGQll6ZDFSQ3hIUVVGVkxFZEJRemRETEUxQlFVMHNTVUZCU1hkQ0xGZEJRVmNzTmtKQlNYSkNNRm9zVDBGRWFVSnhNME1zU1VGQlpqRkVMRkZCUVhWRE1FUXNTVUZCV0haNVJDeEZRVU4wUWl4SlFVRkpPSEpETEZkQlFWYzFkMElzVVVGRFNIRXpReXhKUVVGWWRubEVMRVZCUTBRc1NVRkJTVGh5UXl4WFFVRlhOWGRDTEVWQlFVOHlla01zUjBGRmRFSXNTVUZCU1M5cFFpeFhRVUZYTlhkQ0xFVkJRVTh5ZWtNc1JVRkJXVGQxUkN4SFFVZDRReXQxUXl4RlFVRlBNakpDTEhGQ1FVVlVSU3hGUVVGUE1YRkVMRWRCUTBabmVVTXNWVUZCV1c1bExFVkJRVTk2ZGtNc1ZVRkhlRUp6YlVVc1JVRkJUMGtzUlVGQlkwb3NSVUZCVFRGeFJDeEhRVVUzUWl4UFFVRlBNSEZFTEVWQmRrcEZTeXhEUVVGblFrd3NSVUZCVFdwdVJTeEZRVUZQYlc1RkxFVkJRV3RDT1d4RkxFZEJSMjVETEdsQ1FVRldja0lzUlVGM1JtSXNVMEZCY1VKcGJrVXNSVUZCVFhJMlF5eEZRVUZSTWpaRExFZEJRMVFzYVVKQlFXSkJMRWRCUVhORExFdEJRV0pCTEVsQlEyeERRU3hGUVVGWExGRkJSMklzU1VGQlMyNHpRaXhGUVVGUGJ6TkNMRmRCUVZkRUxFZEJRM0pDTEUxQlFVMHNTVUZCU1doc1JTeFZRVUZWTERoRFFVZDBRaXhKUVVGSmJFSXNSVUZCZDBNc1JVRkJMMEoxZFVRc1JVRkJWMmhxUXl4RlFVRlJNalpETEVkQlJ6VkNSU3hIUVVaS1VpeEZRVUZQUkN4RlFVRmhReXhGUVVGTk5XeEZMRWxCUlZKdFVpeE5RVUZOYjJFc1JVRkJVVEkyUXl4SFFVVTFRa1VzU1VGQlYzQnRSU3hKUVVsaU5HeEZMRVZCUVU5QkxFVkJRVXR1T0VRc1RVRkJUU3hGUVVGSE1qaEVMRWxCUjNaQ0xFOUJRVTlTTEVWQk5VZEZlbk5DTEVOQlFWZDVjMElzUlVGQlRXcHVSU3hGUVVGUGJXNUZMRWRCYzBwdVF5eFRRVUZ4UWtZc1JVRkJUV3hWTEVkQlEzcENMRWRCUVVremFVSXNSVUZCVDNNelFpeFRRVUZUTTFVc1IwRkJUU3hEUVVONFFpeEpRVUZKTkZVc1JVRkJORUlzUlVGQmRFSkRMRVZCUVZFM1ZTeEZRVUZKTVhoRUxGRkJSM1JDTEU5QlFXOUNMRXRCUm5CQ05HeEZMRVZCUVU5RUxFVkJRV0ZETEVWQlFVMVZMRWxCUldwQ2RHMUZMRkZCU1ZRd2VFUXNSVUZCU1RoVkxFdEJRVXRhTEVWQlFVMHNSVUZCUnl4RlFVRkhWU3hIUVVoYVZpeEZRVTlZTEVkQlFVbHNWU3hGUVVGTExFTkJRMUFzUjBGQk5FSXNiMEpCUVdoQ05XbENMR0ZCUTFJMGFVSXNSVUZCU1doRUxHdENRVUZyUWpWbUxHRkJRV2RDTEZkQlFWazBhVUlzUlVGRGNFUXNUVUZCTUVJc2FVSkJRV1pCTEVWQlFVa3hlRVFzVTBFck9FTk1lVzFGTEVWQkx6aERhME12VlN4RlFVRkpNWGhFTEZOQlp6bERja041YlVVc1JVRXZPRU5HWkN4RlFVRmhReXhGUVVGTkxFZEJSWEpDU1N4RlFVRmpTaXhGUVVGTmJGVXNSMEZITjBJc1IwRkJhVUlzVjBGQllrRXNSVUZCU1doMFJDeE5RVUZ4UWpKRUxFVkJRVkZ4Y0VRc1JVRkJTVEV5UWl4TlFVTjJReXhQUVVGUFozSkRMRVZCUVdOS0xFVkJRVTFzVlN4RlFVRkpNVEpDTEUxQmR6aERja01zU1VGQlowSjVja01zUlVGd09FTmtMRTFCUVUwc1NVRkJTWFpzUlN4VlFVRlZMSE5HUVRsTFltY3ZReXhEUVVGWE1HeENMRVZCUVUxcWJrVXNSMEUwUWpGQ0xGTkJRVk1yYmtVc1JVRkJXVU1zUjBGRGJrSXNSMEZCYjBJc2FVSkJRVlJCTEVWQlExUXNUVUZCVFN4SlFVRkplbXhGTEZWQlFWVXNiME5CUTJZc1IwRkJTWGxzUlN4RlFVRlBMRVZCUTJoQ0xFMUJRVTBzU1VGQlNXNXNSU3hYUVVGWExIZERRVFJDZWtJc1UwRkJVM1ZyUlN4RlFVRmhTQ3hGUVVGTlpTeEhRVWN4UWl4SFFVWkJSQ3hGUVVGWFF5eEhRVU5ZWml4RlFVRlBSQ3hGUVVGaFF5eEZRVUZOWlN4RlFVRlBMRVZCUVVrc1JVRkJiMElzUlVGQmFFSktMRVZCUVZGSkxFdEJRelZETlROQ0xFVkJRVTh5TWtJc2IwSkJRMVlzU1VGQlN5eEpRVUZKYUc5RkxFVkJRVWtzUlVGQlIwRXNSVUZCU1dsd1JTeEpRVUZSYW5CRkxFVkJRekZDYTI5RkxFVkJRVXRzYjBVc1IwRkJTeXhGUVVka0xFOUJRVTlyYjBVc1JVRjNRMVFzVTBGQlUwa3NSVUZCWlVvc1JVRkJUVEZ4UkN4SFFVTTFRaXhKUVVGSmJHSXNSVUZCVTJ0aUxFVkJRVTFzWWl4UFFVRlRMRVZCUVVrc1JVRkJORUlzUlVGQmVFSjFiVVVzUlVGQlVYSnlSQ3hGUVVGTmJHSXNVVUZEYkVRMGJFVXNSVUZCVDBRc1JVRkJZVU1zUlVGQlRUVnNSU3hIUVVNeFFpeEpRVUZMTEVsQlFVbDBReXhGUVVGSkxFVkJRVWRCTEVWQlFVbHpReXhGUVVGUmRFTXNSMEZCU3l4RlFVTXZRbXR2UlN4RlFVRkxiRzlGTEVkQlFXZENMRWxCUVZoM1pDeEZRVUZOZUdRc1IwRkZiRUlzVDBGQlQydHZSU3hGUVN0RVZDeFRRVUZUVnl4RlFVRlRkbTFGTEVkQlIyaENMRWRCUVVsQkxFZEJRVlY1YkVVc1NVRkRXaXhOUVVGTkxFbEJRVWxxYTBVc1YwRkJWeXd3UkVGRFlXbHJSU3hKUVVGaGRqbEVMRk5CUVZNc1NVRkJUU3hWUVVWb1JTeFBRVUZuUWl4RlFVRlViRWtzUlVGelJsUXNVMEZCVTNWMVJDeEZRVUZaYUdwRExFVkJRVkV5TmtNc1IwRkRNMElzUjBGQlNXNHpRaXhGUVVGUGN6TkNMRk5CUVZNNU5rTXNSMEZEYkVJc1QwRkJUMEVzUlVGQlQzWnlRaXhQUVVWb1FpeEhRVUV5UWl4dlFrRkJhRUk0ZFVNc1lVRkJOa1FzYlVKQlFYWkNRU3haUVVGWk9ETkNMRk5CUTNoRU9UTkNMRmxCUVZrNE0wSXNUMEZCVDNJM1F5eEpRVUZYUVN4aFFVRnJRblZxUWl4aFFVTnVSQ3hQUVVGUGRtcENMRVZCUVU5bmFrTXNWMEZGVFN4cFFrRkJXR2hxUXl4SlFVTlVRU3hGUVVGVExFZEJRVXRCTEVkQlIyaENMRWxCUVVrck5rTXNSVUZCVFM4MlF5eEZRVUZQZG5KQ0xFOUJRMnBDTEVkQlFWa3NTVUZCVW5OdFJTeEZRVUZYTEU5QlFVOHNSVUZKZEVJc1NVRkVRU3hKUVVGSlR5eEhRVUZqTEVsQlJXaENMRTlCUVZGWUxFZEJRMDRzU1VGQlN5eFJRVU5NTEVsQlFVc3NVMEZEVEN4SlFVRkxMRk5CUTBnc1QwRkJUMGtzUlVGRFZDeEpRVUZMTEU5QlEwd3NTVUZCU3l4UlFVTk1MRlZCUVVzdlZDeEZRVU5JTEU5QlFVOTFWU3hGUVVGWmRqZERMRWRCUVZGMmNrSXNUMEZETjBJc1NVRkJTeXhQUVVOTUxFbEJRVXNzVVVGRFRDeEpRVUZMTEZWQlEwd3NTVUZCU3l4WFFVTklMRTlCUVdFc1JVRkJUbk50UlN4RlFVTlVMRWxCUVVzc1RVRkRTQ3hQUVVGUFFTeEpRVUZSTEVWQlEycENMRWxCUVVzc1UwRkRTQ3hQUVVGUFV5eEZRVUZqZURkRExFZEJRVkYyY2tJc1QwRkRMMElzVVVGRFJTeEhRVUZKTm0xRkxFVkJRV0VzVDBGQlQwTXNSVUZCV1hZM1F5eEhRVUZSZG5KQ0xFOUJRelZEYTIxRkxFZEJRVmtzUjBGQlMwRXNSMEZCVlhJMFF5eGpRVU16UW1jMVF5eEhRVUZqTEVkQlRYUkNMRk5CUVZOSExFVkJRV05rTEVWQlFWVnVZeXhGUVVGUGRGUXNSMEZEZEVNc1NVRkJTVzkzUWl4SFFVRmpMRVZCWTJ4Q0xGTkJUR04wVlN4SlFVRldlRWtzUjBGQmRVSkJMRVZCUVZFc1MwRkRha05CTEVWQlFWRXNSMEZKVGtFc1JVRkJVVzV3UkN4TFFVRkxXaXhQUVVObUxFMUJRVThzUjBGUFZDeFRRVXBaZFhsRUxFbEJRVkk1WWl4SFFVRnhRa0VzUlVGQlRUY3hReXhMUVVGTFdpeFZRVU5zUTNreVF5eEZRVUZOTnpGRExFdEJRVXRhTEZGQlIxUjVNa01zUjBGQlR5eEZRVU5VTEUxQlFVOHNSMEZQVkN4SlFVaEJRU3hMUVVGVExFdEJRMVJ6VkN4TFFVRlhMRWRCUjFRc1RVRkJUeXhIUVV0VUxFbEJSa3R0WXl4SlFVRlZRU3hGUVVGWExGVkJSM2hDTEU5QlFWRkJMRWRCUTA0c1NVRkJTeXhOUVVOSUxFOUJRVTlsTEVWQlFWTnliVVVzUzBGQlRXMXdSQ3hGUVVGUGRGUXNSMEZGTDBJc1NVRkJTeXhQUVVOTUxFbEJRVXNzVVVGRFNDeFBRVUZQZVhkQ0xFVkJRVlYwYlVVc1MwRkJUVzF3UkN4RlFVRlBkRlFzUjBGRmFFTXNTVUZCU3l4UlFVTklMRTlCUVU4d2QwSXNSVUZCVjNadFJTeExRVUZOYlhCRUxFVkJRVTkwVkN4SFFVVnFReXhKUVVGTExGTkJRMHdzU1VGQlN5eFRRVU5JTEU5QlFVOHlkMElzUlVGQldYaHRSU3hMUVVGTmJYQkVMRVZCUVU5MFZDeEhRVVZzUXl4SlFVRkxMRk5CUTBnc1QwRkJUelIzUWl4RlFVRlplbTFGTEV0QlFVMXRjRVFzUlVGQlQzUlVMRWRCUld4RExFbEJRVXNzVDBGRFRDeEpRVUZMTEZGQlEwd3NTVUZCU3l4VlFVTk1MRWxCUVVzc1YwRkRTQ3hQUVVGUE5uZENMRVZCUVdFeGJVVXNTMEZCVFcxd1JDeEZRVUZQZEZRc1IwRkZia01zVVVGRFJTeEhRVUZKYjNkQ0xFVkJRV0VzVFVGQlRTeEpRVUZKTTJ4RkxGVkJRVlVzY1VKQlFYVkNaMnhGTEVkQlF6VkVRU3hIUVVGWlFTeEZRVUZYTEVsQlFVbHlORU1zWTBGRE0wSm5OVU1zUjBGQll5eEhRVk4wUWl4VFFVRlRWU3hGUVVGTmVtNUZMRVZCUVVkWUxFVkJRVWR5UWl4SFFVTnVRaXhKUVVGSlNpeEZRVUZKYjBNc1JVRkJSVmdzUjBGRFZsY3NSVUZCUlZnc1IwRkJTMWNzUlVGQlJXaERMRWRCUTFSblF5eEZRVUZGYUVNc1IwRkJTMG9zUlVGdFNWUXNVMEZCVXpod1JTeEZRVUZ6UWpsWkxFVkJRVkVyV0N4RlFVRkxOVmdzUlVGQldYRllMRVZCUVZWcU1FTXNSMEZGYUVVc1IwRkJjMElzU1VGQmJFSjVPRUlzUlVGQlR6RjFSQ3hQUVVGakxFOUJRVkVzUlVGdFFtcERMRWRCYUVJd1FpeHBRa0ZCWmpaMVJDeEhRVU5VY1Znc1JVRkJWM0pZTEVWQlExaEJMRVZCUVdFc1IwRkRTa0VzUlVGQllTeFhRVU4wUWtFc1JVRkJZU3hYUVVOS1FTeEhRVUZqTEdGQlEzWkNRU3hIUVVGakxGbEJSV2hDUVN4SFFVRmpRU3hGUVVOV2JuUkNMRTFCUVUxdGRFSXNTMEZGVWtFc1JVRkJZVFU0UWl4RlFVRk5MRVZCUVV0NU9FSXNSVUZCVHpGMVJDeFBRVUZUTEVkQlNYUkROblZFTEVWQlFXRXNTVUZCUjBFc1JVRkJZVWdzUlVGQlR6RjFSQ3hQUVVGVE5uVkVMRWRCUXpkRFFTeEhRVUZqU0N4RlFVRlBNWFZFTEU5QlFWRXNRMEZETDBJc1IwRkJTV2w1UWl4RlFVRkxMRTlCUVZFc1JVRkRXalE0UWl4RlFVRmhTQ3hGUVVGUE1YVkVMRTlCUVZNc1QwRkROMElzUjBGQlNUWjFSQ3hGUVVGaExFVkJRVWNzUTBGRGVrSXNTVUZCU1RVNFFpeEZRVU5ETEU5QlFWRXNSVUZFU2pRNFFpeEZRVUZoTEVWQlZYaENMRWRCVEcxQ0xHbENRVUZTTkZnc1NVRkRWRUVzUlVGQlRURXpRaXhGUVVGUE9XbENMRXRCUVV0M05rTXNSVUZCUzFBc1NVRkpja0p1TTBJc1JVRkJUM016UWl4VFFVRlRTU3hIUVVWc1FpeFBRVUZ0UWl4SlFVRm1RU3hGUVVGSmVtMUZMRkZCUTBVc1JVRkZTSGx1UlN4RlFVRmhMMWtzUlVGQlVTdFlMRVZCUVVzMVdDeEZRVUZaY1Znc1JVRkJWV293UXl4SFFVTnNSQ3hIUVVGdFFpeHBRa0ZCVW5jd1F5eEZRVVZvUWl4UFFVUkJRU3hIUVVGWkxFbEJRMUl4TTBJc1JVRkJUekl5UWl4eFFrRkRhVU1zYlVKQlFXcEROVFZDTEZkQlFWZDRjME1zVlVGQlZYTkxMRkZCUXpGQ2NXOUNMRVZCUTBzMldpeFhRVUZYZUhORExGVkJRVlZ6U3l4UlFVRlJMMHdzUzBGQlN6WjNSQ3hGUVVGUksxZ3NSVUZCU3pWWUxFZEJSUzlETDJsQ0xGZEJRVmQ0YzBNc1ZVRkJWVGhFTEZsQlFWbDJSaXhMUVVGTE5uZEVMRVZCUVZFcldDeEZRVUZMTlZnc1IwRkhka1EwV1N4RlFVRmhMMWtzUlVGQlVTeERRVUZGSzFnc1IwRkJUelZZTEVWQlFWbHhXQ3hGUVVGVmFqQkRMRWRCUnpkRUxFMUJRVTBzU1VGQlNTOTNRaXhWUVVGVkxIZERRVWQwUWl4VFFVRlRkVzFGTEVWQlFXTkRMRVZCUVV0cVFpeEZRVUZMTlZnc1JVRkJXWEZZTEVWQlFWVnFNRU1zUjBGRGNrUXNTVUV3UWtsMk1FSXNSVUV4UWtGcGNVVXNSVUZCV1N4RlFVTmFReXhGUVVGWlJpeEZRVUZKTVc1RkxFOUJRMmhDTm01RkxFVkJRVmx3UWl4RlFVRkplbTFGTEU5QlJYQkNMRkZCUVdsQ2RYbEVMRWxCUVdJeVZDeEpRVVZsTEZWQlJHcENRU3hGUVVGWGJtMUZMRTlCUVU5dGJVVXNSMEZCVlhJMFF5eG5Ra0ZEV1N4VlFVRmljVFJETEVkQlExWXNXVUZCWWtFc1IwRkJkVU1zWVVGQllrRXNSMEZCZVVJc1EwRkRja1FzUjBGQlNYZENMRVZCUVVreGJrVXNUMEZCVXl4SFFVRkxlVzFGTEVWQlFVbDZiVVVzVDBGQlV5eEZRVU5xUXl4UFFVRlJMRVZCUlZZeWJrVXNSVUZCV1N4RlFVTmFReXhIUVVGaExFVkJRMkpETEVkQlFXRXNSVUZEWW1oYUxFZEJRV01zUlVGSmJFSXNVMEZCVTNwRExFVkJRVTB3WWl4RlFVRkxjSEZGTEVkQlEyeENMRTlCUVd0Q0xFbEJRV1JwY1VVc1JVRkRTMGNzUlVGQlNYQnhSU3hIUVVWS2IzRkZMRVZCUVVsRExHRkJRV0Z5Y1VVc1JVRkJTV2x4UlN4SFFVdG9ReXhIUVVGSk1URkRMRVZCUVVzc1EwRkRVQ3hKUVVGSkt6RkRMRWRCUVdNc1JVRkRiRUlzU1VGQlMzUnhSU3hGUVVGSmJYaEVMRVZCUVZsdWVFUXNSVUZCU1d0eFJTeEZRVUZYYkhGRkxFbEJRMnhETEVkQlFVa3dkVVFzUlVGQlMzTmlMRVZCUVV0b2NVVXNTMEZCVHpCMVJDeEZRVUZMY1dFc1IwRkJjVUlzU1VGQmFFSjFRaXhGUVVGdlFpeEZRVUZKZEhGRkxFVkJRVWx6Y1VVc1NVRkZla1FzU1VGRWIwSXNTVUZCYUVKQkxFbEJRVzFDUVN4RlFVRmhkSEZGTEVkQlEyaERRU3hGUVVGSmMzRkZMRVZCUVdFc1NVRkJUVWdzUlVGQlZ5eFBRVUZQUnl4RlFVRmhUQ3hQUVVWMFF5eEpRVUZvUWtzc1NVRkJiVUowY1VVc1IwRkJTMEVzUlVGQlNYTnhSU3hIUVVOb1EwRXNSMEZCWXl4UFFVdHNRaXhKUVVSSmJsb3NSVUZCWVdkYUxFVkJRVmxFTEVsQlFWY3ZXU3hGUVVGaEsxa3NSVUZCV1VNc1IwRkROVVJ1Y1VVc1JVRkJTVzE0UkN4RlFVRlpibmhFTEVkQlFVc3NSVUZCUjBFc1NVRkJTeXhEUVVWb1F5eEpRVVJCTEVsQlFVbDFjVVVzUjBGQlVTeEZRVU5JUXl4RlFVRkpMRVZCUVVkQkxFVkJRVWxNTEVWQlFWZExMRWxCUXpkQ0xFZEJRVWs1WWl4RlFVRkxjMklzUlVGQlMyaHhSU3hGUVVGSmQzRkZMRXRCUVU4NVlpeEZRVUZMY1dFc1JVRkJTM2xDTEVkQlFVa3NRMEZEY2tORUxFZEJRVkVzUlVGRFVpeE5RVWRLTEVkQlFVbEJMRVZCUVU4c1QwRkJUM1p4UlN4RlFVbDBRaXhQUVVGUkxFVkJaVllzVTBGQlUzbHhSU3hGUVVGVlRDeEZRVUZMZGpoRExFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVTjBRMjl2UlN4RlFVRlRPV3hETEU5QlFVODRiRU1zU1VGQlZ5eEZRVU16UWl4SlFVRkpReXhGUVVGWlVDeEZRVUZKT1c1RkxFOUJRVk52YjBVc1JVRkRlRUp3YjBVc1IwRkhTRUVzUlVGQlUzTnBReXhQUVVGUGRHbERMRWxCUTBoeGIwVXNTVUZEV0hKdlJTeEZRVUZUY1c5RkxFZEJTbGh5YjBVc1JVRkJVM0Z2UlN4RlFWTllMRWxCUVVsRExFVkJRVk12T0VNc1JVRkJUM1p5UWl4UFFVTndRaXhIUVVGSmMyOUZMRVZCUVZNc1IwRkJUU3hGUVVGSExFMUJRVTBzU1VGQlNYQnVSU3hWUVVGVkxITkNRVVYwUTJ4Q0xFVkJRVk56YjBVc1JVRkJVeXhKUVVOd1FuUnZSU3hGUVVGVGMyOUZMRVZCUVZNc1IwRkZjRUlzU1VGQlN5eEpRVUZKTlhGRkxFVkJRVWtzUlVGQlIwRXNSVUZCU1hORExFbEJRVlYwUXl4RlFVRkhMRU5CUXk5Q0xFbEJRVWsyY1VVc1JVRkJVelZ3UkN4VFFVRlRORTBzUlVGQlQzUmxMRTlCUVZjc1JVRkJTblpRTEVWQlFVOHNSMEZCU1N4SlFVTXZReXhIUVVGSloydERMRTFCUVUwMmJVTXNSMEZCVXl4UFFVRlBOM0ZGTEVWQlF6RkNiM0ZGTEVWQlFVbE5MRVZCUVZNeGNVVXNSMEZCU3paeFJTeEZRVVZ3UWl4UFFVRlBOM0ZGTEVWQlIxUXNVMEZCVXpoeFJTeEZRVUZYVml4RlFVRkxkamhETEVWQlFWRTJPRU1zUlVGQlVYQnZSU3hIUVVOMlF5eFBRVUZQZVc5RkxFVkJRVmN6UWl4RlFVRlpkamRETEVWQlFWRjFPRU1zUlVGQlNUbHVSU3hQUVVGVGIyOUZMRWRCUVZOT0xFVkJRVXROTEVWQlFWRndiMFVzUjBGSE0wVXNVMEZCVXpCdlJTeEZRVUZaV2l4RlFVRkxkamhETEVWQlFWRTJPRU1zUlVGQlVYQnZSU3hIUVVONFF5eFBRVUZQZVc5RkxFVkJjVFpDVkN4VFFVRjFRa1VzUjBGRmNrSXNTVUZFUVN4SlFVRkpReXhGUVVGWkxFZEJRMUJzY2tVc1JVRkJTU3hGUVVGSFFTeEZRVUZKYVhKRkxFVkJRVWt6YjBVc1UwRkJWWFJETEVWQlJXaERhM0pGTEVWQlFWVTVLMFFzUzBGQmVVSXNTVUZCY0VJMkswUXNSVUZCU1hKeFJDeFhRVUZYTldkQ0xFbEJSV2hETEU5QlFVOXJja1VzUlVFek5rSlhReXhEUVVGaGREbERMRWRCUVZOMU9FTXNSVUZCUzAwc1JVRkJVWEJ2UlN4SFFVZDJSQ3hUUVVGVE9HOUZMRVZCUVdGb1FpeEZRVUZMZGpoRExFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVTjZReXhQUVVGUE1HOUZMRVZCUVZkYUxFVkJRVXQyT0VNc1JVRkJVVFk0UXl4RlFVRlJjRzlGTEVkQlIzcERMRk5CUVZNcmIwVXNSVUZCWVdwQ0xFVkJRVXQyT0VNc1JVRkJVVFk0UXl4RlFVRlJjRzlGTEVkQlEzcERMRTlCUVU5NWIwVXNSVUZCVnpGQ0xFVkJRV040TjBNc1IwRkJVM1U0UXl4RlFVRkxUU3hGUVVGUmNHOUZMRWRCUjNoRUxGTkJRVk5uY0VVc1JVRkJWMnhDTEVWQlFVdDJPRU1zUlVGQlVUWTRReXhGUVVGUmNHOUZMRWRCUTNaRExFOUJRVTk1YjBVc1JVRnJOa0pVTEZOQlFYbENSU3hGUVVGTFRTeEhRVWMxUWl4SlFVWkJMRWxCUVVsc2NrVXNSVUZCUjNrMlF5eEZRVUZKUkN4RlFVTlFjWGRDTEVWQlFWa3NSMEZEVUd4eVJTeEZRVUZKTEVWQlFVZEJMRVZCUVVscGNrVXNSVUZCU1ROdlJTeFhRVU5xUW1sd1JTeEhRVUZUTEVkQlFVc3NTMEZFWVhaeVJTeEZRVWRvUTBzc1JVRkJTVFJ4UlN4RlFVRkpjbkZFTEZkQlFWYzFaMElzUjBGRGJrSTROa01zUlVGQlMzbzJReXhIUVVGTExFVkJRMVozTmtNc1JVRkJTM2cyUXl4RlFVRkpMRWxCUTFRMmNVVXNSVUZCVlRrclJDeExRVUZMZVhWRExFZEJRMlp4ZDBJc1JVRkJWVGtyUkN4TFFVRkxNSFZETEVkQlIycENMRTlCUVU5dmQwSXNSVUV2TmtKWFRTeERRVUZsTXpsRExFVkJRVkYxT0VNc1JVRkJTVGx1UlN4UFFVRlRiMjlGTEVkQlFWTk9MRVZCUVV0TkxFVkJRVkZ3YjBVc1IwRnJSamxGTEZOQlFWTnhia1VzUlVGQllWTXNSVUZCU3k5a0xFVkJRVTkwVkN4SFFVTm9ReXhQUVVGakxFbEJRVlp6VkN4SFFVRmxkRlFzU1VGQlVYRjRRaXhGUVVGSk9XNUZMRTlCUTNSQ2NYRkRMRVZCUVU4NEswSXNZMEZCWTNKQ0xFZEJSWEpDZWpsQ0xFVkJRVTg0SzBJc1kwRkJZM0pDTEVWQlFVbHlLMFFzVFVGQlRYTm5SQ3hGUVVGUGRGUXNTVUZKYWtRc1UwRkJVM2wzUWl4RlFVRlhXU3hGUVVGTEwyUXNSVUZCVDNSVUxFZEJRemxDUVN4RlFVRk5jakZETEV0QlFVdEZMRWxCUVVsM2JVVXNSVUZCU1RsdVJTeFBRVUZSZVRKRExFZEJTVE5DTEVsQlNFRXNTVUZCU1RKNVFpeEZRVUZOTEVkQlJVNHhja1VzUlVGQlNYRnpSQ3hGUVVORWNuTkVMRVZCUVVrck5FTXNSMEZCU3l4RFFVTmtMRWxCVVUwMGVVSXNSVUZCV1VNc1JVRkJWME1zUlVGQldVTXNSVUZTY2tORExFVkJRVmt6UWl4RlFVRkpjSEZGTEVkQlEyaENaM05GTEVWQlFWa3NTMEZEV2tNc1JVRkJiMEpHTEVWQlFWa3NTVUZCVVN4RlFVTjJRMEVzUlVGQldTeEpRVUZSTEVWQlEzQkNRU3hGUVVGWkxFbEJRVkVzUlVGRGNrSXNSVUZGU2l4SFFVRkpMM0pGTEVWQlFVbHBjMFVzUjBGQmIwSnNla0lzUlVGSE1VSXNUMEZCVVd0NlFpeEhRVU5PTEV0QlFVc3NSVUZEUTBZc1JVRkJXU3hOUVVOa1F5eEZRVUZaUkN4SFFVVmtMRTFCUTBZc1MwRkJTeXhGUVVWNVFpeE5RVUZXTEV0QlJHeENTaXhGUVVGaGRrSXNSVUZCU1hCeFJTeEZRVUZKTEU5QlJXNUNPSEpGTEVkQlFUWkNMRWRCUVZwRExFbEJRWEZDTEVWQlFXOUNMRWRCUVdKS0xFZEJRM3BDTEUxQlEyeENTeXhGUVVGWlJpeEhRVWRvUWl4TlFVTkdMRXRCUVVzc1JVRkRTRWdzUlVGQllYWkNMRVZCUVVsd2NVVXNSVUZCU1N4SFFVTnlRalJ5UlN4RlFVRlplRUlzUlVGQlNYQnhSU3hGUVVGSkxFZEJRMUVzVFVGQlZpeEpRVUZpTW5KRkxFbEJRWE5FTEUxQlFWWXNTVUZCV2tNc1MwRkRia05GTEVkQlFUWkNMRWRCUVZwRExFbEJRVzlDTEVsQlFXOUNMRWRCUVdKS0xFbEJRWE5DTEVWQlFXMUNMRWRCUVZwRExFZEJRM0pFTEU5QlFWVkZMRVZCUVdkQ0xFOUJRVlZCTEVWQlFXZENMRk5CUTNSRlJTeEZRVUZaUml4SFFVZG9RaXhOUVVOR0xFdEJRVXNzUlVGRFNFZ3NSVUZCWVhaQ0xFVkJRVWx3Y1VVc1JVRkJTU3hIUVVOeVFqUnlSU3hGUVVGWmVFSXNSVUZCU1hCeFJTeEZRVUZKTEVkQlEzQkNObkpGTEVWQlFXRjZRaXhGUVVGSmNIRkZMRVZCUVVrc1IwRkRUeXhOUVVGV0xFbEJRV0l5Y2tVc1NVRkJjMFFzVFVGQlZpeEpRVUZhUXl4SlFVRnpSQ3hOUVVGV0xFbEJRV0pETEV0QlEyeEZReXhIUVVFMlFpeEhRVUZhUXl4SlFVRnZRaXhKUVVGeFFpeEhRVUZpU2l4SlFVRnpRaXhKUVVGdFFpeEhRVUZhUXl4SlFVRnhRaXhGUVVGdlFpeEhRVUZpUXl4SFFVTnNSaXhQUVVGVlF5eEZRVUZuUWl4VlFVTTFRMFVzUlVGQldVWXNSMEZOU2l4UFFVRmtSU3hIUVVkR1FTeEZRVUZaTEUxQlExcERMRVZCUVcxQ0xFZEJRMVpFTEVWQlFWa3NVVUZGY2tKQkxFZEJRV0VzVFVGRFlrNHNSVUZCU1hRdlJDeExRVUZMTkM5RUxFbEJRV01zUjBGQlN5eExRVUZSTEU5QlEzQkRRU3hGUVVGWkxFMUJRWEZDTEV0QlFWcEJMRWRCUjNaQ1RpeEZRVUZKZEM5RUxFdEJRVXMwTDBRc1IwRkRWR2h6UlN4SFFVRkxhWE5GTEVWQlIxQXNUMEZSUml4VFFVRm5RME1zUjBGRE9VSXNTVUZCU1hSRUxFVkJRVTF6UkN4RlFVRlhOWEJGTEU5QlEzSkNMRWRCUVVsemJVVXNSMEZLY1VJc1MwRkxka0lzVDBGQlQzWnRSU3hQUVVGUGVXVXNZVUZCWVd4V0xFMUJRVTEyU2l4UFFVRlJObkJGTEVkQlNUTkRMRWxCUVVsU0xFVkJRVTBzUjBGRFRqRnlSU3hGUVVGSkxFVkJRMUlzUzBGQlQwRXNSVUZCU1RSdlJTeEhRVU5VT0VNc1IwRkJUM0p3UlN4UFFVRlBlV1VzWVVGQllXeFdMRTFCUTNwQ2Rrb3NUMEZEUVRad1JTeEZRVUZYYm1kRkxFMUJRVTB2VEN4RlFVRkhRU3hIUVdSRExFOUJhVUo2UWl4UFFVRlBNSEpGTEVWQmRrSkJVeXhEUVVGelFsUXNSMEU1T0VJdlFteHpSU3hGUVVGUk5uaERMRTlCUVZOQkxFVkJRMnBDTjNoRExFVkJRVkUwYzBVc1YwRnZWRklzVTBGQmNVSTVjRVVzU1VGRFpFRXNSMEZCVlVFc1NVRkRZa0VzUlVGQlV5eEhRVVZZTEU5QlFVOHJkVU1zUlVGQlQxTXNUMEZCVDNoMlF5eEpRWFpVZGtJNVF5eEZRVUZSTm5ORkxHdENRVUZ2UWl4SFFUQkNOVUpvTjBJc1JVRkJUekl5UWl4NVFrRkJjVVJ1VkN4SlFVRXZRalY0UkN4RlFVRlBLMnRGTEc5Q1FVTm9ReTlyUlN4RlFVRlBLMnRGTEc5Q1FWRllMRmRCUTBVc1NVRkRSU3hKUVVGSlowTXNSVUZCVFN4SlFVRkpOVGRDTEZkQlFWY3NSMEZGZWtJc1QwRkVRVFEzUWl4RlFVRkplR0VzVlVGQldTeERRVUZEUVN4VlFVRlhjR2hDTEZkQlFWZDRjME1zVlVGQlZ6QnhSU3hKUVVGTExGZEJRV01zVDBGQlR5eExRVU4yUkN4TFFVRmtkRU1zUlVGQlNYTkRMRTlCUTJsQ0xHMUNRVUZxUW5SRExFVkJRVWt6TjBJc1ZVRkRkVUlzU1VGQmJFTXlOMElzUlVGQlNUTTNRaXhUUVVGVExFVkJRVWNzUjBGQlIzZHBRaXhYUVVOMlFpeE5RVUZQZEhWRUxFZEJRMUFzVDBGQlR5eEhRV1pRWjNGRkxFZEJTMG92YzBVc1JVRkJVWFZ2UlN4WFFVRmhRU3hKUVd0RmNrSXhNa0lzUlVGQlQyMDNRaXhUUVVGWExFdEJSMnhDYmpkQ0xFVkJRVTl2TjBJc1UwRkJWeXhUUVVGVmVrTXNSMEZGTVVJc1QwRkVRVUVzUlVGQlNYaGhMRlZCUVZsdVpTeEZRVUZQZW5aRExGVkJRMmhDYjI5RkxFZEJNa0pVTXpSQ0xFVkJRVTg1YVVJc1MwRkJUeXhUUVVGVmRIUkNMRVZCUVU5dGJrVXNSVUZCYTBJNWJFVXNSMEZETDBNc1QwRkJUMmx6UWl4RlFVRkxMRXRCUVUxMGRFSXNSVUZCVDIxdVJTeEZRVUZyUWpsc1JTeEpRVWQ2UXl0MVF5eEZRVUZQTWpKQ0xITkNRVU5VTXpKQ0xFVkJRVTk2ZGtNc1ZVRkJWVFIwUkN4VlFVRlpjR2hDTEZkQlFWZDRjME1zVlVGRGVFTjVka01zUlVGQlQyMWxMRlZCUVZsd2FFSXNWMEZEUnl4dlFrRkJXSEowUXl4UlFVRXdRa0VzVDBGQlR6SnlSU3hUUVVONFEzSTNRaXhGUVVGUGRIZERMRTlCUVU4eWNrVXNWMEZCWVhJM1FpeEhRVVUzUWpOM1F5eFBRVUZQUXl4bFFVRmxNSGRETEVWQlFWRjBkME1zVDBGQlR6SnlSU3hSUVVGVExFTkJRelZEZW5KRkxFMUJRVThzUzBGRFVHOURMR05CUVdNc1MwRnBRM0JDWjNWRExFVkJRVTlUTEUxQlFWRXNVMEZCVlcwelFpeEZRVUZOTUVRc1JVRkJUVzVGTEVkQlEyNURMRTlCY2tKR0xGTkJRV2RDVGl4RlFVRk5aU3hGUVVGTk1FUXNSVUZCVFc1RkxFZEJSV2hETEU5QlJFRlJMRVZCUVZkRExFZEJRMUJCTEVkQlFWRXNSVUZEU0doQ0xFVkJRV0ZETEVWQlFVMWxMRkZCUldad1ZTeEpRVUZVT0Znc1JVRkplVUlzYVVKQlFXSnVSU3hGUVVOV1VDeEZRVUZoUXl4RlFVRk5aU3hIUVVGTk1FUXNTMEZCUzBFc1JVRkJUVzVGTEVkQlEzQkRVQ3hGUVVGaFF5eEZRVUZOWlN4SFFVRk5NRVFzUzBGQlMwRXNSMEZGTjBJeFJTeEZRVUZoUXl4RlFVRk5aU3hIUVZGdVFtNHpRaXhEUVVGTkxFdEJRVTF0TTBJc1JVRkJUVEJFTEVWQlFVMXVSU3hKUVdsQ2FrTnVNMElzUlVGQlQyY3pRaXhaUVVGakxGTkJRVlZaTEVkQlF6ZENMRTlCUVU5YUxFVkJRVmtzUzBGQlRWa3NTVUZMTTBJMU0wSXNSVUZCVDNVM1FpeG5Ra0ZCYTBJc1UwRkJWVE5FTEVkQlEycERMRTlCUVU5YUxFVkJRVmtzUzBGQlRWa3NTVUZwU0ROQ05UTkNMRVZCUVU5ek0wSXNVMEZCVnl4VFFVRnRRblp0UlN4SFFVTnVReXhSUVVGbExFMUJRVXhCTEVsQlFXRkJMRVZCUVVWNWNVVXNXVUZITTBKNE4wSXNSVUZCVDNwR0xGRkJRVlVzVTBGQmEwSjZjRU1zUlVGQlIwTXNSMEZEY0VNc1NVRkJTMmwyUXl4RlFVRlBjek5DTEZOQlFWTjRiVVVzUzBGQlQydDJReXhGUVVGUGN6TkNMRk5CUVZOMmJVVXNSMEZETVVNc1RVRkJUU3hKUVVGSmIwSXNWVUZCVlN3MlFrRkhkRUlzUjBGQlNYSkNMRWxCUVUxRExFVkJRVWNzVDBGQlR5eEZRVXR3UWl4SlFVaEJMRWxCUVVrd2NVVXNSVUZCU1ROeFJTeEZRVUZGUnl4UFFVTk9PSFZFTEVWQlFVbG9ka1FzUlVGQlJVVXNUMEZGUkhSRExFVkJRVWtzUlVGQlJ6UnZSU3hGUVVGTmJHeEZMRXRCUVV0RkxFbEJRVWxyY0VVc1JVRkJSekZpTEVkQlFVbHdlRVFzUlVGQlNUUnZSU3hKUVVGUE5XOUZMRVZCUXk5RExFZEJRVWx0UXl4RlFVRkZia01zUzBGQlQyOURMRVZCUVVWd1F5eEhRVUZKTEVOQlEycENPSE5GTEVWQlFVa3pjVVVzUlVGQlJXNURMRWRCUTA1dmVFUXNSVUZCU1doMlJDeEZRVUZGY0VNc1IwRkRUaXhOUVVsS0xFOUJRVWs0YzBVc1JVRkJTVEZpTEVkQlFWY3NSVUZEWmtFc1JVRkJTVEJpTEVWQlFWVXNSVUZEV0N4SFFVZFVlamRDTEVWQlFVOXZNMElzVjBGQllTeFRRVUZ4UWtRc1IwRkRka01zVDBGQlVXNXRSU3hQUVVGUGJXMUZMRWRCUVZWeU5FTXNaVUZEZGtJc1NVRkJTeXhOUVVOTUxFbEJRVXNzVDBGRFRDeEpRVUZMTEZGQlEwd3NTVUZCU3l4UlFVTk1MRWxCUVVzc1UwRkRUQ3hKUVVGTExGTkJRMHdzU1VGQlN5eFRRVU5NTEVsQlFVc3NUMEZEVEN4SlFVRkxMRkZCUTB3c1NVRkJTeXhWUVVOTUxFbEJRVXNzVjBGRFNDeFBRVUZQTEVWQlExUXNVVUZEUlN4UFFVRlBMRWxCU1dKcmFFSXNSVUZCVHpFdlFpeFBRVUZUTEZOQlFXbENiemRFTEVWQlFVMTZjVVVzUjBGRGNrTXNTVUZCUzNGSkxFVkJRVkZ2YVVVc1IwRkRXQ3hOUVVGTkxFbEJRVWwyY0VVc1ZVRkJWU3dyUTBGSGRFSXNSMEZCYjBJc1NVRkJhRUoxY0VVc1JVRkJTM3B4UlN4UFFVTlFMRTlCUVU4cmRVTXNSVUZCVDFNc1RVRkJUU3hIUVVkMFFpeEpRVUZKT1hoRExFVkJRMG9zVVVGQlpUWXdSQ3hKUVVGWWRubEVMRVZCUlVZc1NVRkVRVUVzUlVGQlV5eEZRVU5LZEVNc1JVRkJTU3hGUVVGSFFTeEZRVUZKSzNORkxFVkJRVXQ2Y1VVc1UwRkJWWFJETEVWQlF6ZENjME1zUjBGQlZYbHhSU3hGUVVGTEwzTkZMRWRCUVVkelF5eFBRVWwwUWl4SlFVRkpNSFZFTEVWQlFWTXpaaXhGUVVGUFp6TkNMRmxCUVZrdmJFVXNSMEZETlVJd2NVVXNSVUZCVFN4RlFVTldMRWxCUVV0b2RFVXNSVUZCU1N4RlFVRkhRU3hGUVVGSkszTkZMRVZCUVV0NmNVVXNVMEZCVlhSRExFVkJRVWNzUTBGRGFFTXNTVUZCU1c5eFJTeEZRVUZOTWtNc1JVRkJTeTl6UlN4SFFVTm1MRWxCUVV0eGVFTXNSVUZCVDNNelFpeFRRVUZUZVVJc1IwRkRia0lzVFVGQlRTeEpRVUZKTlcxRkxGVkJRVlVzSzBOQlJYUkNORzFGTEVWQlFVbDBRaXhMUVVGTE9WZ3NSVUZCVVdkakxFZEJRMnBDUVN4SFFVRlBOVU1zUlVGQlNUbHVSU3hQUVVWaUxFOUJRVTh3ZFVRc1IwRTRRMVF6Wml4RlFVRlBkMllzVjBGQllVRXNSVUV3UlhCQ2VHWXNSVUZCVDNwMlF5eFZRVUZWYVhKRkxGZEJRVmtzUlVGUk4wSjROMElzUlVGQlQzcDJReXhWUVVGVmNYSkZMRTlCUVZNc1YwRkRlRUlzU1VGQlNYSkZMRVZCUVUweGJFVXNTMEZCUzFvc1QwRkRaaXhIUVVGSmMyMUZMRVZCUVUwc1IwRkJUU3hGUVVOa0xFMUJRVTBzU1VGQlNUbHJSU3hYUVVGWExEWkRRVVYyUWl4SlFVRkxMRWxCUVVrNVJDeEZRVUZKTEVWQlFVZEJMRVZCUVVrMGIwVXNSVUZCU3pWdlJTeEhRVUZMTEVWQlF6VkNObkJGTEVWQlFVc3piVVVzUzBGQlRXeEVMRVZCUVVkQkxFVkJRVWtzUjBGRmNFSXNUMEZCVDJ0RUxFMUJSMVJ0ZFVNc1JVRkJUM3AyUXl4VlFVRlZjM0pGTEU5QlFWTXNWMEZEZUVJc1NVRkJTWFJGTEVWQlFVMHhiRVVzUzBGQlMxb3NUMEZEWml4SFFVRkpjMjFGTEVWQlFVMHNSMEZCVFN4RlFVTmtMRTFCUVUwc1NVRkJTVGxyUlN4WFFVRlhMRFpEUVVWMlFpeEpRVUZMTEVsQlFVazVSQ3hGUVVGSkxFVkJRVWRCTEVWQlFVazBiMFVzUlVGQlN6VnZSU3hIUVVGTExFVkJRelZDTm5CRkxFVkJRVXN6YlVVc1MwRkJUV3hFTEVWQlFVZEJMRVZCUVVrc1IwRkRiRUkyY0VVc1JVRkJTek50UlN4TFFVRk5iRVFzUlVGQlNTeEZRVUZIUVN4RlFVRkpMRWRCUlhoQ0xFOUJRVTlyUkN4TlFVZFViWFZETEVWQlFVOTZka01zVlVGQlZYVnlSU3hQUVVGVExGZEJRM2hDTEVsQlFVbDJSU3hGUVVGTk1XeEZMRXRCUVV0YUxFOUJRMllzUjBGQlNYTnRSU3hGUVVGTkxFZEJRVTBzUlVGRFpDeE5RVUZOTEVsQlFVazVhMFVzVjBGQlZ5dzJRMEZGZGtJc1NVRkJTeXhKUVVGSk9VUXNSVUZCU1N4RlFVRkhRU3hGUVVGSk5HOUZMRVZCUVVzMWIwVXNSMEZCU3l4RlFVTTFRalp3UlN4RlFVRkxNMjFGTEV0QlFVMXNSQ3hGUVVGSFFTeEZRVUZKTEVkQlEyeENObkJGTEVWQlFVc3piVVVzUzBGQlRXeEVMRVZCUVVrc1JVRkJSMEVzUlVGQlNTeEhRVU4wUWpad1JTeEZRVUZMTTIxRkxFdEJRVTFzUkN4RlFVRkpMRVZCUVVkQkxFVkJRVWtzUjBGRGRFSTJjRVVzUlVGQlN6TnRSU3hMUVVGTmJFUXNSVUZCU1N4RlFVRkhRU3hGUVVGSkxFZEJSWGhDTEU5QlFVOXJSQ3hOUVVkVWJYVkRMRVZCUVU5NmRrTXNWVUZCVlRSSkxGTkJRVmNzVjBGRE1VSXNTVUZCU1d4SkxFVkJRWFZDTEVWQlFXUlpMRXRCUVV0YUxFOUJRMnhDTEU5QlFXVXNTVUZCV0VFc1JVRkJjVUlzUjBGRFFTeEpRVUZ5UW5WS0xGVkJRVlYyU2l4UFFVRnhRbXR1UlN4RlFVRlZkRzFGTEV0QlFVMHNSVUZCUjFvc1IwRkRMME5uYmtVc1JVRkJZVEU1UkN4TlFVRk5NVWtzUzBGQlRUSkpMRmxCUjJ4RGQyeERMRVZCUVU5NmRrTXNWVUZCVlhGV0xFOUJRVk1zVTBGQmFVSTNWU3hIUVVONlF5eEpRVUZMYVhaRExFVkJRVTl6TTBJc1UwRkJVM1p0UlN4SFFVRkpMRTFCUVUwc1NVRkJTVzlDTEZWQlFWVXNOa0pCUXpkRExFOUJRVWxPTEU5QlFWTmtMRWRCUTNOQ0xFbEJRVFZDYVhaRExFVkJRVTk2Uml4UlFVRlJNVzlETEV0QlFVMWtMRWxCUnpsQ2FYWkRMRVZCUVU5NmRrTXNWVUZCVlhkeVJTeFJRVUZWTEZkQlEzcENMRWxCUVVsdVF5eEZRVUZOTEVkQlEwNTBia1VzUlVGQlRXNUZMRVZCUVZFMmMwVXNhMEpCUzJ4Q0xFOUJTa2x1Y0VVc1MwRkJTMW9zVDBGQlV5eEpRVU5vUWpKdlJTeEZRVUZOTDI1RkxFdEJRVXR6U0N4VFFVRlRMRTFCUVU4c1JVRkJSemRITEVkQlFVdHhUU3hOUVVGTkxGTkJRVk4wUnl4TFFVRkxMRXRCUTI1RWVFY3NTMEZCUzFvc1QwRkJVM0ZDTEVsQlFVdHpia1VzUjBGQlR5eFZRVVY2UWl4WFFVRmhRU3hGUVVGTkxFdEJSelZDTlRWQ0xFVkJRVTk2ZGtNc1ZVRkJWV2R4UXl4UlFVRlZMRk5CUVd0Q016ZENMRVZCUVZGdk9FTXNSVUZCVDNSVUxFVkJRVXR6TUVJc1JVRkJWME1zUjBGRE1VVXNTVUZCUzJvNFFpeEZRVUZQY3pOQ0xGTkJRVk14TkVRc1IwRkRia0lzVFVGQlRTeEpRVUZKZWswc1ZVRkJWU3cyUWtGblFuUkNMRkZCWW1OeGVFUXNTVUZCVm5oSkxFbEJRMFpCTEVWQlFWRXNVVUZGUlhkSkxFbEJRVkk1WWl4SlFVTkdRU3hGUVVGTk9XOURMRVZCUVZOQkxFVkJRVTh6VGl4UFFVRlRMRkZCUldaMWVVUXNTVUZCWkhkWkxFbEJRMFpCTEVWQlFWa3NVVUZGUlhoWkxFbEJRVnA1V1N4SlFVTkdRU3hGUVVGVmNIRkZMRXRCUVV0YUxGRkJSMklyY0VRc1JVRkJVU3hIUVVGTGRGUXNSVUZCVFRsdlF5eEZRVUZQTTA0c1VVRkJWU3R4UlN4RlFVRlpMRWRCUVV0RExFVkJRVlZ3Y1VVc1MwRkJTMW9zVDBGRGRFVXNUVUZCVFN4SlFVRkpkMElzVjBGQlZ5eHpRa0ZIZGtJc1IwRkJTWFZ3UlN4SFFVRmhReXhIUVVGWGFtaENMRWRCUVZOMFZDeEZRVU51UXl4UFFVRlBMRVZCUlZRc1IwRkJTWE13UWl4SFFVRmhReXhGUVVObUxFOUJRVkVzUlVGRlZpeEhRVUZKYW1oQ0xFZEJRVk4wVkN4RlFVTllMRTlCUVU4c1JVRlJWQ3hIUVVGSk56RkRMRTlCUVZNclRTeEZRVUZSTEU5QlFVOHNSVUZUTlVJc1NVRlFRU3hKUVVGSk5qaEVMRWRCU2twUkxFdEJRV0VzU1VGRVlrUXNTMEZCWlN4SFFVMVlhbU1zUjBGUVNuSlpMRXRCUVZNc1NVRkVWSE5VTEV0QlFWY3NSMEZUVUhWakxFVkJRVTFzYkVVc1MwRkJTMFVzU1VGQlNXdHdSU3hGUVVGSE1XSXNSMEZGYkVKdFl5eEZRVUZYY25GRkxFdEJRVXMyU1N4TlFVRk5jMmhGTEVWQlFWZERMRWRCUTJwRFJTeEZRVUZoZGpsRUxFVkJRVTlzUlN4TlFVRk5jMmRFTEVWQlFVOTBWQ3hIUVVVMVFpODBReXhGUVVGSkxFVkJRVWRCTEVWQlFVazBiMFVzU1VGQlR6VnZSU3hGUVVONlFpeEhRVUZKZFhSRkxFVkJRVk4yZEVVc1MwRkJUM2QwUlN4RlFVRlhlSFJGTEVkQlFVa3NRMEZEYWtNNGMwVXNSVUZCU1ZNc1JVRkJVM1owUlN4SFFVTmliM2hFTEVWQlFVbHZZeXhGUVVGWGVIUkZMRWRCUTJZc1RVRkpTaXhQUVVGSk9ITkZMRVZCUVVreFlpeEhRVUZYTEVWQlEyWkJMRVZCUVVrd1lpeEZRVUZWTEVWQlExZ3NSMEUyU0ZSNk4wSXNSVUZCVDNwMlF5eFZRVUZWTm5KRkxGTkJRVmNzVTBGQmJVSXhSU3hGUVVGTE5WZ3NSVUZCV1hGWUxFZEJRemxFTEU5QlFXOUVMRWxCUVRkRGRHeEZMRXRCUVV0blNpeFJRVUZSTmpoRUxFVkJRVXMxV0N4RlFVRlpjVmdzU1VGSGRrTnVNMElzUlVGQlQzcDJReXhWUVVGVmMwc3NVVUZCVlN4VFFVRnJRalk0UkN4RlFVRkxOVmdzUlVGQldYRllMRWRCUXpWRUxFOUJRVTl6UWl4RlFVRnhRalZ0UlN4TFFVRk5ObXhGTEVWQlFVczFXQ3hGUVVGWmNWZ3NSMEZCVlN4SlFVY3ZSRzR6UWl4RlFVRlBlblpETEZWQlFWVTRSQ3haUVVGakxGTkJRWE5DY1dwRkxFVkJRVXMxV0N4RlFVRlpjVmdzUjBGRGNFVXNUMEZCVDNOQ0xFVkJRWEZDTlcxRkxFdEJRVTAyYkVVc1JVRkJTelZZTEVWQlFWbHhXQ3hIUVVGVkxFbEJhMFF2Ukc0elFpeEZRVUZQZW5aRExGVkJRVlUyVWl4TlFVRlJMRk5CUVdkQ2IyRXNSVUZCVVRZNFF5eEZRVUZSY0c5RkxFVkJRVkZyYlVVc1IwRkZMMFFzVVVGQlpUTlVMRWxCUVZnMlZpeEZRVU5HYkVNc1JVRkJWeXhQUVVOWWJHMUZMRVZCUVZOWkxFdEJRVXRhTEU5QlEyUnZiMFVzUlVGQlV5eFBRVVZLTEZGQlFXVTNWaXhKUVVGWWRubEVMRWRCUVRCRExHbENRVUZZYjI5RkxFVkJRM2hEYkVNc1JVRkJWMnRETEVWQlExaHdiMFVzUlVGQlUxa3NTMEZCUzFvc1QwRkRaRzl2UlN4RlFVRlRMRTFCUlVvc1MwRkJTWEIzUkN4VFFVRlRiM2RFTEVkQlYyeENMRTFCUVUwc1NVRkJTWEpzUlN4TlFVTlNMREpGUVZoR2NXeEZMRWRCUVd0Q0xFVkJRMlJ3ZDBRc1UwRkJVMmhaTEVsQlExaEJMRWRCUVd0Q0xFOUJRMFIxZVVRc1NVRkJZakpVTEVsQlFYZENRU3hGUVVGWExGVkJSWFpEUVN4RlFVRlhiRzFGTEVWQlExaEJMRTlCUVZOMWVVUXNSMEZUWWl4SlFVRkpPRllzUlVGQldYcHVSU3hMUVVGTFdpeFBRVUZUYjI5RkxFVkJSemxDTEZOQlJtVTNWaXhKUVVGWWRubEVMRWRCUVhkQ1FTeEZRVUZUY1c5RkxFdEJRVmR5YjBVc1JVRkJVM0Z2UlN4SFFVVndSRGs0UXl4RlFVRlBkbkpDTEU5QlFWTXNTVUZCVFVFc1JVRkJVeXhIUVVGTGIyOUZMRVZCUVZNc1NVRkJUMEVzUlVGQlUzaHVSU3hMUVVGTFdpeFBRVU55UlN4TlFVRk5MRWxCUVVsM1FpeFhRVUZYTERCRFFVZHNRakJyUlN4SlFVRlZRU3hGUVVGWExGRkJSekZDTEVsQlJFRXNTVUZCU1Zjc1IwRkJZeXhKUVVWb1FpeFBRVUZSV0N4SFFVTk9MRWxCUVVzc1RVRkRTQ3hQUVVGUGFVTXNSVUZCVTNadVJTeExRVUZOTW5GQ0xFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVVjRReXhKUVVGTExFOUJRMHdzU1VGQlN5eFJRVU5JTEU5QlFVOTNiMFVzUlVGQlZUVnVSU3hMUVVGTk1uRkNMRVZCUVZFMk9FTXNSVUZCVVhCdlJTeEhRVVY2UXl4SlFVRkxMRkZCUTBnc1QwRkJUekJ2UlN4RlFVRlhPVzVGTEV0QlFVMHljVUlzUlVGQlVUWTRReXhGUVVGUmNHOUZMRWRCUlRGRExFbEJRVXNzVTBGRFRDeEpRVUZMTEZOQlEwZ3NUMEZCVHpodlJTeEZRVUZaYkc5RkxFdEJRVTB5Y1VJc1JVRkJVVFk0UXl4RlFVRlJjRzlGTEVkQlJUTkRMRWxCUVVzc1UwRkZTQ3hQUVVGUEsyOUZMRVZCUVZsdWIwVXNTMEZCVFRKeFFpeEZRVUZSTmpoRExFVkJRVkZ3YjBVc1IwRkZNME1zU1VGQlN5eFBRVU5NTEVsQlFVc3NVVUZEVEN4SlFVRkxMRlZCUTB3c1NVRkJTeXhYUVVOSUxFOUJRVTluY0VVc1JVRkJWWEJ2UlN4TFFVRk5NbkZDTEVWQlFWRTJPRU1zUlVGQlVYQnZSU3hIUVVWNlF5eFJRVU5GTEVkQlFVazJiVVVzUlVGQllTeE5RVUZOTEVsQlFVa3piRVVzVlVGQlZTeHhRa0ZCZFVKbmJFVXNSMEZETlVSQkxFZEJRVmtzUjBGQlMwRXNSMEZCVlhJMFF5eGpRVU16UW1jMVF5eEhRVUZqTEVsQlMzUkNPVE5DTEVWQlFVOTZka01zVlVGQlZUaHlSU3hQUVVGVExGZEJRM2hDTEUxQlFVOHNRMEZEVERGdFJTeExRVUZOTEZOQlEwNXpNa0lzUzBGQlRYWTJRaXhOUVVGTmJrSXNWVUZCVlcxTExFMUJRVTAxVEN4TFFVRkxLME1zUzBGQlMzbHhSU3hOUVVGUmVuRkZMRXRCUVUwc1MwRTBSM2hFTEZOQlFWTjFiVVVzUlVGQldWY3NSVUZCU3k5a0xFVkJRVTkwVkN4SFFVTXZRaXhKUVVGSk5qQkNMRVZCUVUwc1IwRkRWamN3UWl4RlFVRk5jakZETEV0QlFVdEZMRWxCUVVsM2JVVXNSVUZCU1RsdVJTeFBRVUZSZVRKRExFZEJSVE5DTEVsQlFVc3NTVUZCU1M4MFF5eEZRVUZKY1hORUxFVkJRVTl5YzBRc1JVRkJTU3MwUXl4SlFVRlBMelJETEVWQlF6ZENOSFJGTEVkQlFVOTJja1VzVDBGQlQzbGxMR0ZCUVhOQ0xFbEJRVlJ6Y0VRc1JVRkJTWEJ4UlN4SlFVVnFReXhQUVVGUE5IUkZMRVZCUjFRc1UwRkJVMnhGTEVWQlFXRlZMRVZCUVVzdlpDeEZRVUZQZEZRc1IwRkRhRU1zU1VGQlNUWXdRaXhGUVVGTkxFZEJRMVkzTUVJc1JVRkJUWEl4UXl4TFFVRkxSU3hKUVVGSmQyMUZMRVZCUVVrNWJrVXNUMEZCVVhreVF5eEhRVVV6UWl4SlFVRkxMRWxCUVVrdk5FTXNSVUZCU1hGelJDeEZRVUZQY25ORUxFVkJRVWtyTkVNc1NVRkJUeTgwUXl4RlFVTTNRalIwUlN4SFFVRlBkbkpGTEU5QlFVOTVaU3hoUVVGaGMzQkVMRVZCUVVsd2NVVXNTVUZGYWtNc1QwRkJUelIwUlN4RlFVZFVMRk5CUVZOeVJTeEZRVUZWWVN4RlFVRkxMMlFzUlVGQlQzUlVMRWRCUXpkQ0xFbEJRVWsyZGtJc1JVRkJUWGRDTEVWQlFVazVia1VzVTBGRlZDdHdSQ3hIUVVGVFFTeEZRVUZSTEV0QlFVZEJMRVZCUVZFc1MwRkROVUowVkN4SFFVRlBRU3hGUVVGTkxFZEJRVXRCTEVWQlFVMDJka0lzUzBGQlN6ZDJRaXhGUVVGTk5uWkNMRWRCUjNoRExFbEJSRUVzU1VGQlNXbEdMRVZCUVUwc1IwRkRSRGQwUlN4RlFVRkpjWE5FTEVWQlFVOXljMFFzUlVGQlNTczBReXhKUVVGUEx6UkRMRVZCUXpkQ05uUkZMRWRCUVU5RExFVkJRVTB4UkN4RlFVRkpjSEZGTEVsQlJXNUNMRTlCUVU4MmRFVXNSVUZIVkN4VFFVRlRha1VzUlVGQlkxRXNSVUZCU3k5a0xFVkJRVTkwVkN4SFFVZHFReXhKUVVaQkxFbEJRVWwxWWl4RlFVRlJPRllzUlVGQlNYSXJSQ3hOUVVGTmMyZEVMRVZCUVU5MFZDeEhRVU42UWpKNVFpeEZRVUZOTEVkQlEwUXhja1VzUlVGQlNTeEZRVUZIUVN4RlFVRkpjekJFTEVWQlFVMW9lVVFzVDBGQlVYUkRMRWRCUVVzc1JVRkRja013Y2tVc1IwRkJUM0p3UlN4UFFVRlBlV1VzWVVGQllYZDZReXhGUVVGTmREQkVMRWRCUVc5Q0xFbEJRV1p6TUVRc1JVRkJUWFF3UkN4RlFVRkpMRWxCUld4RUxFOUJRVTh3Y2tVc1JVRXdRMVFzVTBGQlUzRkRMRVZCUVdGeVJDeEZRVUZSYzBRc1JVRkJTekZ5UlN4SFFVTnFReXhIUVVGTGIyOUZMRVZCUVZNc1IwRkJUeXhIUVVGTFFTeEZRVUZUTEVWQlFVY3NUVUZCVFN4SlFVRkpOVzFGTEZkQlFWY3NjMEpCUXpORUxFZEJRVWswYlVVc1JVRkJVM05FTEVWQlFVMHhja1VzUlVGQlVTeE5RVUZOTEVsQlFVbDNRaXhYUVVGWExIbERRU3RLYkVRc1UwRkJVMjF4UlN4RlFVRlZOMFFzUlVGQlMyNXdSU3hGUVVGUGVYQkZMRVZCUVZGelJDeEZRVUZMY25GRkxFVkJRVXRETEVkQlF5OURMRWxCUVV0NWRFTXNSVUZCVDNNelFpeFRRVUZUZVVJc1IwRkJUU3hOUVVGTkxFbEJRVWsxYlVVc1ZVRkJWU3dyUTBGREwwTXNSMEZCU1haRExFVkJRVkV3UXl4SFFVRlBNVU1zUlVGQlVUSkRMRVZCUVVzc1RVRkJUU3hKUVVGSlJTeFhRVUZYTEhGRFFVTnlSQ3hIUVVGSk5HMUZMRVZCUVZOelJDeEZRVUZOTlVRc1JVRkJTVGx1UlN4UFFVRlJMRTFCUVUwc1NVRkJTWGRDTEZkQlFWY3NjMEpCYTBSMFJDeFRRVUZUYjNGRkxFVkJRVzFDT1VRc1JVRkJTMjV3UlN4RlFVRlBlWEJGTEVWQlFWRjVSQ3hIUVVNeFEyeDBSU3hGUVVGUkxFbEJRVWRCTEVWQlFWRXNUVUZCVTBFc1JVRkJVU3hIUVVONFF5eEpRVUZMTEVsQlFVbHFRaXhGUVVGSkxFVkJRVWQzY1VVc1JVRkJTVGx0UlN4TFFVRkxSU3hKUVVGSmQyMUZMRVZCUVVrNWJrVXNUMEZCVTI5dlJTeEZRVUZSTEVkQlFVa3hjVVVzUlVGQlNYZHhSU3hKUVVGTGVIRkZMRVZCUXpkRWIzRkZMRVZCUVVsTkxFVkJRVk14Y1VVc1NVRkJUV2xDTEVWQlFWTXNTMEZCVXl4SFFVRkxhM1JGTEVWQlFXVnVkVVVzUlVGQlNTeEZRVUZKUVN4TlFVTnNReXhIUVVFMVFtMTFSU3hGUVVGbGJuVkZMRVZCUVVrc1JVRkJTVUVzUjBFNFFqbENMRk5CUVZOdmRVVXNSVUZCYlVKb1JTeEZRVUZMYm5CRkxFVkJRVTk1Y0VVc1JVRkJVWGxFTEVkQlF6RkRiSFJGTEVWQlFWRXNTVUZCUjBFc1JVRkJVU3hYUVVGaFFTeEZRVUZSTEVkQlF6VkRMRWxCUVVzc1NVRkJTV3BDTEVWQlFVa3NSVUZCUjNkeFJTeEZRVUZKT1cxRkxFdEJRVXRGTEVsQlFVbDNiVVVzUlVGQlNUbHVSU3hQUVVGVGIyOUZMRVZCUVZFc1IwRkJTVEZ4UlN4RlFVRkpkM0ZGTEVsQlFVdDRjVVVzUlVGRE4wUnZjVVVzUlVGQlNVMHNSVUZCVXpGeFJTeEhRVUZOYVVJc1NVRkJkVU1zUjBGQk5VSnJkRVVzUlVGQlpXNTFSU3hGUVVGSkxFVkJRVWxCTEVkQlFWVXNTVUZ0U201RkxGTkJRVk54ZFVVc1JVRkJZMnBGTEVWQlFVdHVjRVVzUlVGQlQzbHdSU3hGUVVGUmMwUXNSVUZCUzNKeFJTeEZRVUZMUXl4SFFVTnVSQ3hIUVVGSk9HMUZMRVZCUVZOelJDeEZRVUZOTlVRc1JVRkJTVGx1UlN4UFFVRlJMRTFCUVUwc1NVRkJTWGRDTEZkQlFWY3NjMEpCUTNCRUxFZEJRVWswYlVVc1JVRkJVeXhGUVVGSExFMUJRVTBzU1VGQlNUVnRSU3hYUVVGWExITkNRVWQyUXl4VFFVRlRjVEpETEVWQlFWbHBkMElzUlVGQlMyNXdSU3hGUVVGUGVYQkZMRVZCUVZGNVJDeEZRVUZqUnl4SFFVdHlSQ3hQUVVwTFFTeEhRVU5JUkN4RlFVRmhha1VzUlVGQlMyNXdSU3hGUVVGUGVYQkZMRVZCUVZFc1IwRkZia00xUXl4RlFVRlJjakJFTEUxQlFVMHlNa1FzUlVGQlMyNXdSU3hGUVVGUGVYQkZMRVZCUVZGNVJDeEZRVUZqTEVkQlFVa3NSMEZETjBONlJDeEZRVUZUTEVWQlYyeENMRk5CUVZOMGQwSXNSVUZCWVdkM1FpeEZRVUZMYm5CRkxFVkJRVTk1Y0VVc1JVRkJVWGxFTEVWQlFXTkhMRWRCUzNSRUxFOUJTa3RCTEVkQlEwaEVMRVZCUVdGcVJTeEZRVUZMYm5CRkxFVkJRVTk1Y0VVc1JVRkJVU3hIUVVWdVF6VkRMRVZCUVZGeU1FUXNUVUZCVFRJeVJDeEZRVUZMYm5CRkxFVkJRVTk1Y0VVc1JVRkJVWGxFTEVWQlFXTXNSMEZCU1N4SFFVTTNRM3BFTEVWQlFWTXNSVUV2WTJ4Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVlcxTExFMUJRVkVzVTBGQlowSnpaMFFzUlVGQlQzUlVMRWRCUXpsRExFbEJiMEpKZHpGQ0xFVkJjRUpCTTBZc1JVRkJUVEZzUlN4TFFVRkxXaXhQUVhGQ1ppeEpRWEJDUVN0d1JDeEpRVUZWUVN4SFFVZEZMRWRCUTFaQkxFZEJRVk4xWXl4SFFVTkhMRWxCUVVkMll5eEZRVUZSTEVkQlEyUkJMRVZCUVZGMVl5eEpRVU5xUW5aakxFVkJRVkYxWXl4SlFVNVdOM1pDTEU5QlFXTTRZaXhKUVVGU09XSXNSVUZCYjBJMmRrSXNTVUZCVVRkMlFpeEhRVk40UWl4SFFVTlNRU3hIUVVGUE5uWkNMRWRCUTBjc1NVRkJSemQyUWl4RlFVRk5MRWRCUTFaQkxFVkJRVTAyZGtJc1NVRkRaamQyUWl4RlFVRk5OblpDTEVkQlIwbzNka0lzUlVGQlRYTlVMRWxCUVU5MFZDeEZRVUZOYzFRc1IwRkhia0pvWWl4RlFVRlBNakpDTEhGQ1FVTlVkVWNzUlVGQlUzSnlSU3hMUVVGTGJYSkRMRk5CUVZOblpTeEZRVUZQZEZRc1NVRkRka0o1Vnl4VlFVRlpibVVzUlVGQlQzcDJReXhqUVVOeVFpeERRVU5NTEVsQlFVazBjMFVzUlVGQlYzb3hRaXhGUVVGTmMxUXNSVUZEY2tKcmFVSXNSVUZCVXl4SlFVRkpiRGxDTEVWQlFVOXRPVUlzVDBGQlZUTmFMRWRCUXpsQ0xFbEJRVXNzU1VGQlNUY3dSQ3hGUVVGSkxFVkJRVWRCTEVWQlFVbDNkVVVzU1VGQldYaDFSU3hGUVVNNVFuVjFSU3hGUVVGUGRuVkZMRWRCUVV0clJDeExRVUZMYkVRc1JVRkJTWEZ6UkN4SFFVbDZRaXhQUVVGUGEybENMRWRCVjFSc09VSXNSVUZCVDNwMlF5eFZRVUZWTm5ORkxGZEJRV0VzVTBGQmNVSXZSQ3hGUVVGUk4xb3NSVUZCV1hsa0xFZEJRM0pGTlVRc1IwRkJhMElzUlVGRGJFSTNXaXhIUVVFd1FpeEZRVU55UW5sa0xFZEJRVlZRTEVWQlFWbHlSQ3hGUVVGUk4xb3NSVUZCV1ROMFJDeExRVUZMV2l4UlFVdHdSQ3hKUVVoQkxFbEJRVWw1YlVVc1JVRkJUVGRzUlN4TFFVRkxkMjVGTEVkQlExaHVka0lzUlVGQlRTeEZRVU5PZGpkRExFVkJRVWtzU1VGRFEwRXNSVUZCU1RaM1JDeEpRVUZsZEZZc1IwRkJUeXhOUVVOcVEzZDBRaXhIUVVGUE4yeEZMRXRCUVV0M2JrVXNSVUZCVXpGeFJTeEhRVUZMZFRkRExFVkJSelZDTEU5QlFVOTNkRUlzUjBGSFZERXpRaXhGUVVGUGVuWkRMRlZCUVZVNGMwVXNWMEZCWVN4VFFVRnhRbWhGTEVWQlFWRTNXaXhGUVVGWmVXUXNSMEZEY2tVMVJDeEhRVUZyUWl4RlFVTnNRamRhTEVkQlFUQkNMRVZCUTNKQ2VXUXNSMEZEU0ZBc1JVRkJXWEpFTEVWQlFWRTNXaXhGUVVGWk0zUkVMRXRCUVV0YUxGRkJTM1pETEVsQlJrRXNTVUZCU1hsdFJTeEZRVUZOTjJ4RkxFdEJRVXQzYmtVc1NVRkJWemRhTEVkQlEzUkNkRllzUlVGQlRTeEZRVU5JYzFZc1JVRkJZU3hKUVVGTmRGWXNSMEZCVHl4TlFVTXZRbmQwUWl4SFFVRlBOMnhGTEV0QlFVdDNia1VzU1VGQlZ6ZGFMRWRCUVdOMFZpeEZRVWQyUXl4UFFVRlBkM1JDTEVkQlIxUXhNMElzUlVGQlQzcDJReXhWUVVGVkszTkZMRlZCUVZrc1UwRkJiMEpxUlN4RlFVRlJORVFzUjBGRmRrUXNUMEZFUzBFc1IwRkJWVkFzUlVGQldYSkVMRVZCUVZFc1JVRkJSM2h1UlN4TFFVRkxXaXhSUVVOd1Exa3NTMEZCUzNkdVJTeEpRVWRrY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWV2QwUlN4aFFVRmxMRk5CUVhWQ2JFVXNSVUZCVVRSRUxFZEJSVGRFTEU5QlJFdEJMRWRCUVZWUUxFVkJRVmx5UkN4RlFVRlJMRVZCUVVkNGJrVXNTMEZCUzFvc1VVRkRjRU5aTEV0QlFVdDNia1VzUjBGQlYzaHVSU3hMUVVGTGQyNUZMRVZCUVZNc1NVRkJUU3hIUVVjM1EzSTFRaXhGUVVGUGVuWkRMRlZCUVZWNWIwVXNZVUZCWlN4VFFVRjFRa3NzUlVGQlVUUkVMRWRCUlRkRUxFOUJSRXRCTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTEVWQlFVZDRia1VzUzBGQlMxb3NVVUZEYmtOWkxFdEJRVXQzYmtVc1NVRkJWeXhGUVVGTGVHNUZMRXRCUVV0M2JrVXNSVUZCVXl4SlFVYzNRM0kxUWl4RlFVRlBlblpETEZWQlFWVnBkRVVzWVVGQlpTeFRRVUYxUW01RkxFVkJRVkUwUkN4SFFVYzNSQ3hQUVVaTFFTeEhRVUZWVUN4RlFVRlpja1FzUlVGQlVTeEZRVUZIZUc1RkxFdEJRVXRhTEZOQlJXeERXU3hMUVVGTGQyNUZMRWRCUTFSNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEVsQlFVMHNSVUZEY0VKNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEVsQlFVMHNTVUZEUkN4VFFVRnVRbmh1UlN4TFFVRkxkMjVGTEVWQlFWTXNTVUZIY2tKeU5VSXNSVUZCVDNwMlF5eFZRVUZWYTNSRkxHRkJRV1VzVTBGQmRVSndSU3hGUVVGUk5FUXNSMEZITjBRc1QwRkdTMEVzUjBGQlZWQXNSVUZCV1hKRUxFVkJRVkVzUlVGQlIzaHVSU3hMUVVGTFdpeFJRVVZ3UWl4VFFVRm1XU3hMUVVGTGQyNUZMRWxCUTFSNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEVsQlFVMHNSMEZEY2tKNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEVsQlFVMHNSVUZEY2tKNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEV0QlIyeENjalZDTEVWQlFVOTZka01zVlVGQlZXMTBSU3hWUVVGWkxGTkJRVzlDY2tVc1JVRkJVVGRhTEVWQlFWbDVaQ3hIUVVOdVJUVkVMRWRCUVd0Q0xFVkJRMnhDTjFvc1IwRkJNRUlzUlVGRGNrSjVaQ3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVVGRhTEVWQlFWa3pkRVFzUzBGQlMxb3NVVUZMY0VRc1NVRklRU3hKUVVGSmVXMUZMRVZCUVUwM2JFVXNTMEZCUzNkdVJTeEhRVU5ZYm5aQ0xFVkJRVTBzUlVGRFRuWTNReXhGUVVGSkxFbEJRME5CTEVWQlFVazJkMFFzU1VGQlpYUldMRWRCUVU4c1RVRkRha04zZEVJc1IwRkJUemRzUlN4TFFVRkxkMjVGTEVWQlFWTXhjVVVzUjBGQlMzVTNReXhGUVUwMVFpeFBRVVpKZDNSQ0xFbEJSa3A0ZEVJc1IwRkJUeXhQUVVWVGQzUkNMRWRCUVU5eWJFVXNTMEZCUzI5eVF5eEpRVUZKTEVWQlFVY3NSVUZCU1N0b1FpeEpRVVZvUTJ0WkxFZEJSMVF4TTBJc1JVRkJUM3AyUXl4VlFVRlZiM1JGTEZWQlFWa3NVMEZCYjBKMFJTeEZRVUZSTjFvc1JVRkJXWGxrTEVkQlEyNUZOVVFzUjBGQmEwSXNSVUZEYkVJM1dpeEhRVUV3UWl4RlFVTnlRbmxrTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTjFvc1JVRkJXVE4wUkN4TFFVRkxXaXhSUVV0d1JDeEpRVWhCTEVsQlFVbDBReXhGUVVGSk5uZEVMRVZCUTBwMFZpeEZRVUZOTEVWQlEwNTNkRUlzUlVGQlRUZHNSU3hMUVVGTGQyNUZMRWxCUVZjeGNVVXNSMEZEYmtKQkxFVkJRVWtzU1VGQlRYVTNReXhIUVVGUExFMUJRM1JDZDNSQ0xFZEJRVTgzYkVVc1MwRkJTM2R1UlN4SlFVRlhNWEZGTEVkQlFVdDFOME1zUlVGTk9VSXNUMEZHU1hkMFFpeEpRVVpLZUhSQ0xFZEJRVThzVDBGRlUzZDBRaXhIUVVGUGNteEZMRXRCUVV0dmNrTXNTVUZCU1N4RlFVRkhMRVZCUVVrcmFFSXNTVUZGYUVOcldTeEhRVWRVTVROQ0xFVkJRVTk2ZGtNc1ZVRkJWVzk1UXl4VFFVRlhMRk5CUVcxQ01ESkNMRVZCUVZFMFJDeEhRVVZ5UkN4UFFVUkxRU3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVU3hGUVVGSGVHNUZMRXRCUVV0YUxGRkJRM1JDTEVsQlFXWlpMRXRCUVV0M2JrVXNTVUZETUVJc1IwRkJOVUlzU1VGQlQzaHVSU3hMUVVGTGQyNUZMRWRCUVZVc1IwRkVTM2h1UlN4TFFVRkxkMjVGTEVsQlNUTkRjalZDTEVWQlFVOTZka01zVlVGQlZYRjBSU3haUVVGakxGTkJRWE5DZGtVc1JVRkJVVFJFTEVkQlEzUkVRU3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVU3hGUVVGSGVHNUZMRXRCUVV0YUxGRkJRek5ETEVsQlFVbDViVVVzUlVGQlRUZHNSU3hMUVVGTGQyNUZMRWRCUVZkNGJrVXNTMEZCUzNkdVJTeEZRVUZUTEVsQlFVMHNSVUZET1VNc1QwRkJZeXhOUVVGT00wSXNSVUZCYzBJc1YwRkJUa0VzUlVGQmJVSkJMRWRCUnpkRE1UTkNMRVZCUVU5NmRrTXNWVUZCVlhOMFJTeFpRVUZqTEZOQlFYTkNlRVVzUlVGQlVUUkVMRWRCUTNSRVFTeEhRVUZWVUN4RlFVRlpja1FzUlVGQlVTeEZRVUZIZUc1RkxFdEJRVXRhTEZGQlF6TkRMRWxCUVVsNWJVVXNSVUZCVFRkc1JTeExRVUZMZDI1RkxFVkJRVk1zUjBGQlRYaHVSU3hMUVVGTGQyNUZMRWxCUVZjc1JVRkRPVU1zVDBGQll5eE5RVUZPTTBJc1JVRkJjMElzVjBGQlRrRXNSVUZCYlVKQkxFZEJSemRETVROQ0xFVkJRVTk2ZGtNc1ZVRkJWWFYwUlN4WlFVRmpMRk5CUVhOQ2VrVXNSVUZCVVRSRUxFZEJSek5FTEU5QlJrdEJMRWRCUVZWUUxFVkJRVmx5UkN4RlFVRlJMRVZCUVVkNGJrVXNTMEZCUzFvc1VVRkZia05aTEV0QlFVdDNia1VzUjBGRFZuaHVSU3hMUVVGTGQyNUZMRVZCUVZNc1NVRkJUU3hGUVVOd1FuaHVSU3hMUVVGTGQyNUZMRVZCUVZNc1NVRkJUU3hIUVVOd1FuaHVSU3hMUVVGTGQyNUZMRVZCUVZNc1NVRkJUU3hKUVVkNlFuSTFRaXhGUVVGUGVuWkRMRlZCUVZWM2RFVXNXVUZCWXl4VFFVRnpRakZGTEVWQlFWRTBSQ3hIUVVjelJDeFBRVVpMUVN4SFFVRlZVQ3hGUVVGWmNrUXNSVUZCVVN4RlFVRkhlRzVGTEV0QlFVdGFMRkZCUlc1RFdTeExRVUZMZDI1RkxFbEJRVmNzUjBGRGNrSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUjBGRGNFSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUlVGRGNFSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJSMjVDY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWWGwwUlN4WlFVRmpMRk5CUVhOQ00wVXNSVUZCVVRSRUxFZEJSVE5FTEU5QlJFdEJMRWRCUVZWUUxFVkJRVmx5UkN4RlFVRlJMRVZCUVVkNGJrVXNTMEZCUzFvc1VVRkRjRU4zYkVVc1JVRkJVWEJhTEV0QlFVdDRja1FzUzBGQlRYZHVSU3hIUVVGUkxFVkJRVTBzUjBGQlNTeEpRVWM1UTNJMVFpeEZRVUZQZW5aRExGVkJRVlV3ZEVVc1dVRkJZeXhUUVVGelFqVkZMRVZCUVZFMFJDeEhRVVV6UkN4UFFVUkxRU3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVU3hGUVVGSGVHNUZMRXRCUVV0YUxGRkJRM0JEZDJ4RkxFVkJRVkZ3V2l4TFFVRkxlSEpFTEV0QlFVMTNia1VzUjBGQlVTeEZRVUZQTEVkQlFVa3NTVUZITDBOeU5VSXNSVUZCVDNwMlF5eFZRVUZWTW5SRkxHRkJRV1VzVTBGQmRVSTNSU3hGUVVGUk5FUXNSMEZGTjBRc1QwRkVTMEVzUjBGQlZWQXNSVUZCV1hKRUxFVkJRVkVzUlVGQlIzaHVSU3hMUVVGTFdpeFJRVU53UTNkc1JTeEZRVUZSY0Zvc1MwRkJTM2h5UkN4TFFVRk5kMjVGTEVkQlFWRXNSVUZCVFN4SFFVRkpMRWxCUnpsRGNqVkNMRVZCUVU5NmRrTXNWVUZCVlRSMFJTeGhRVUZsTEZOQlFYVkNPVVVzUlVGQlVUUkVMRWRCUlRkRUxFOUJSRXRCTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTEVWQlFVZDRia1VzUzBGQlMxb3NVVUZEY0VOM2JFVXNSVUZCVVhCYUxFdEJRVXQ0Y2tRc1MwRkJUWGR1UlN4SFFVRlJMRVZCUVU4c1IwRkJTU3hKUVZNdlEzSTFRaXhGUVVGUGVuWkRMRlZCUVZVMmRFVXNXVUZCWXl4VFFVRnpRbmgxUlN4RlFVRlBlWEJGTEVWQlFWRTNXaXhGUVVGWmVXUXNTVUZET1VWeWRFVXNSMEZCVTBFc1JVRkRWSGx3UlN4SFFVRnJRaXhGUVVOc1FqZGFMRWRCUVRCQ0xFVkJRM0pDZVdRc1NVRkZTRXdzUlVGQlV5OXhSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEZRVUZSTjFvc1JVRkVabTUwUkN4TFFVRkxiM0pETEVsQlFVa3NSVUZCUnl4RlFVRkpLMmhDTEVkQlFXTXNSVUZEVHl4SFFVZDBSQ3hKUVVGSmRGWXNSVUZCVFN4RlFVTk9kamRETEVWQlFVa3NSVUZGVWl4SlFVUkJhMFFzUzBGQlMzZHVSU3hIUVVGclFpeEpRVUZTZW5CRkxFbEJRMDVxUWl4RlFVRkpObmRFTEVsQlFXVjBWaXhIUVVGUExFMUJRMnBEY2pSRExFdEJRVXQzYmtVc1JVRkJVekZ4UlN4SFFVRk5hVUlzUlVGQlVYTTJReXhGUVVGUExFbEJSM0pETEU5QlFVOXRka0lzUlVGQlV6ZGFMRWRCUjJ4Q2VHWXNSVUZCVDNwMlF5eFZRVUZWT0hSRkxGbEJRV01zVTBGQmMwSjZkVVVzUlVGQlQzbHdSU3hGUVVGUk4xb3NSVUZCV1hsa0xFbEJRemxGY25SRkxFZEJRVk5CTEVWQlExUjVjRVVzUjBGQmEwSXNSVUZEYkVJM1dpeEhRVUV3UWl4RlFVTnlRbmxrTEVsQlJVaE1MRVZCUVZNdmNVVXNTMEZCVFdwRExFVkJRVTk1Y0VVc1JVRkJVVGRhTEVWQlJHWnVkRVFzUzBGQlMyOXlReXhKUVVGSkxFVkJRVWNzUlVGQlNTdG9RaXhIUVVGakxFVkJRMDhzUjBGSGRFUXNTVUZCU1RkM1JDeEZRVUZKTm5kRUxFVkJRV0VzUlVGRGFrSjBWaXhGUVVGTkxFVkJSVllzU1VGRVFYSTBReXhMUVVGTGQyNUZMRVZCUVZNeGNVVXNSMEZCWVN4SlFVRlNhVUlzU1VGRFZtcENMRWRCUVVzc1NVRkJUWFUzUXl4SFFVRlBMRTFCUTNwQ2NqUkRMRXRCUVV0M2JrVXNSVUZCVXpGeFJTeEhRVUZOYVVJc1JVRkJVWE0yUXl4RlFVRlBMRWxCUjNKRExFOUJRVTl0ZGtJc1JVRkJVemRhTEVkQlIyeENlR1lzUlVGQlQzcDJReXhWUVVGVkszUkZMRmRCUVdFc1UwRkJjVUl4ZFVVc1JVRkJUM2x3UlN4RlFVRlJORVFzUjBGTmFFVXNUMEZNUVhKMFJTeEhRVUZUUVN4RlFVTlVlWEJGTEVkQlFXdENMRVZCUTJJMFJDeEhRVUZWVEN4RlFVRlRMM0ZGTEV0QlFVMXFReXhGUVVGUGVYQkZMRVZCUVZFc1JVRkJSeXhKUVVGTkxFZEJRMnBFY2pWQ0xFVkJRVTh5TWtJc2MwSkJRWEZDTDIxRkxFVkJRVkY1UXl4TFFVRkxObU1zVFVGQlRYUm1MRWxCUTNCRWFVTXNTMEZCUzNkdVJTeEhRVUZ0UWl4SlFVRlNlbkJGTEVWQlExUjVjRVVzUlVGQlV5eEhRVmRzUW5JMVFpeEZRVUZQZW5aRExGVkJRVlZuZFVVc1kwRkJaMElzVTBGQmQwSXpkVVVzUlVGQlQzbHdSU3hGUVVGUk5FUXNSMEZWZEVVc1QwRlVRWEowUlN4SFFVRlRRU3hGUVVOVWVYQkZMRWRCUVd0Q0xFVkJRMkkwUkN4SFFVRlZUQ3hGUVVGVEwzRkZMRXRCUVUxcVF5eEZRVUZQZVhCRkxFVkJRVkVzUlVGQlJ5eE5RVUZSTEVkQlEzQkVjalZDTEVWQlFVOHlNa0lzY1VKQlExUTVhMFVzUzBGQlMzZHVSU3hIUVVGdFFpeEpRVUZTZW5CRkxFVkJRMmhDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SFFVVTVRbWwwUlN4RlFVRnJRbWh5UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hIUVVGUkxFZEJSV3hEUVN4RlFVRlRMRWRCUjJ4Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVldsMVJTeGpRVUZuUWl4VFFVRjNRalYxUlN4RlFVRlBlWEJGTEVWQlFWRTBSQ3hIUVZWMFJTeFBRVlJCY25SRkxFZEJRVk5CTEVWQlExUjVjRVVzUjBGQmEwSXNSVUZEWWpSRUxFZEJRVlZNTEVWQlFWTXZjVVVzUzBGQlRXcERMRVZCUVU5NWNFVXNSVUZCVVN4RlFVRkhMRTFCUVZFc1IwRkRjRVJ5TlVJc1JVRkJUekl5UWl4eFFrRkRWRGxyUlN4TFFVRkxkMjVGTEVkQlFWZDZjRVVzU1VGQlZTeEZRVU14UW1sRExFdEJRVXQzYmtVc1JVRkJVeXhIUVVGakxFbEJRVko2Y0VVc1IwRkZjRUpwZEVVc1JVRkJhMEpvY2tVc1MwRkJUV3BETEVWQlFVOTVjRVVzUjBGQlVTeEhRVVZzUTBFc1JVRkJVeXhIUVZWc1FuSTFRaXhGUVVGUGVuWkRMRlZCUVZWcmRVVXNZMEZCWjBJc1UwRkJkMEkzZFVVc1JVRkJUM2x3UlN4RlFVRlJORVFzUjBGWmRFVXNUMEZZUVhKMFJTeEhRVUZUUVN4RlFVTlVlWEJGTEVkQlFXdENMRVZCUTJJMFJDeEhRVUZWVEN4RlFVRlRMM0ZGTEV0QlFVMXFReXhGUVVGUGVYQkZMRVZCUVZFc1JVRkJSeXhYUVVGWkxFZEJRM2hFY2pWQ0xFVkJRVTh5TWtJc2NVSkJRMVE1YTBVc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SFFVTTVRbWxETEV0QlFVdDNia1VzUlVGQlV5eEhRVUZOZW5CRkxFbEJRVlVzUjBGRE9VSnBReXhMUVVGTGQyNUZMRVZCUVZNc1IwRkJUWHB3UlN4SlFVRlZMRVZCUXpsQ2FVTXNTMEZCUzNkdVJTeEhRVUZ0UWl4SlFVRlNlbkJGTEVkQlJXaENiWFJGTEVWQlFXdENiSEpGTEV0QlFVMXFReXhGUVVGUGVYQkZMRWRCUVZFc1IwRkZiRU5CTEVWQlFWTXNSMEZIYkVKeU5VSXNSVUZCVDNwMlF5eFZRVUZWYlhWRkxHTkJRV2RDTEZOQlFYZENPWFZGTEVWQlFVOTVjRVVzUlVGQlVUUkVMRWRCV1hSRkxFOUJXRUZ5ZEVVc1IwRkJVMEVzUlVGRFZIbHdSU3hIUVVGclFpeEZRVU5pTkVRc1IwRkJWVXdzUlVGQlV5OXhSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEZRVUZSTEVWQlFVY3NWMEZCV1N4SFFVTjRSSEkxUWl4RlFVRlBNakpDTEhGQ1FVTlVPV3RGTEV0QlFVdDNia1VzUjBGQlYzcHdSU3hKUVVGVkxFZEJRekZDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SFFVTTVRbWxETEV0QlFVdDNia1VzUlVGQlV5eEhRVUZOZW5CRkxFbEJRVlVzUlVGRE9VSnBReXhMUVVGTGQyNUZMRVZCUVZNc1IwRkJZeXhKUVVGU2VuQkZMRWRCUlhCQ2JYUkZMRVZCUVd0Q2JISkZMRXRCUVUxcVF5eEZRVUZQZVhCRkxFZEJRVkVzUjBGRmJFTkJMRVZCUVZNc1IwRkhiRUp5TlVJc1JVRkJUM3AyUXl4VlFVRlZiM1ZGTEZkQlFXRXNVMEZCY1VJdmRVVXNSVUZCVDNsd1JTeEZRVUZSTjFvc1JVRkJXWGxrTEVkQlJ6VkZMRWRCUmtGeWRFVXNSMEZCVTBFc1JVRkRWSGx3UlN4SFFVRnJRaXhIUVVOaU5FUXNSVUZCVlN4RFFVTmlMRWxCUVVreVFpeEZRVUZSZG5ORkxFdEJRVXR2Y2tNc1NVRkJTU3hGUVVGSExFVkJRVWtyYUVJc1JVRkJZU3hIUVVWNlEyOWtMRVZCUVZNdmNVVXNTMEZCVFdwRExFVkJRVTk1Y0VVc1JVRkJVVGRhTEVWQlFWbHZaaXhGUVVGUkxFZEJRVWxCTEVkQlIzaEVMRWxCUVVscWQwVXNSVUZCU1N4RlFVTktkVGRETEVWQlFVMHNSVUZEVGtZc1JVRkJUU3hGUVVWV0xFbEJSRUZ1TkVNc1MwRkJTM2R1UlN4SFFVRnJRaXhKUVVGU2VuQkZMRWxCUTA1cVFpeEZRVUZKTm5kRUxFbEJRV1YwVml4SFFVRlBMRTFCUXpkQ2REWkRMRVZCUVZFc1IwRkJZU3hKUVVGU2J6WkRMRWRCUVhORExFbEJRWHBDYmpSRExFdEJRVXQzYmtVc1JVRkJVekZ4UlN4RlFVRkpMRXRCUXpsRGNUZERMRVZCUVUwc1IwRkZVbTQwUXl4TFFVRkxkMjVGTEVWQlFWTXhjVVVzU1VGQlQybENMRVZCUVZGek5rTXNSMEZCVVN4SFFVRkxSaXhGUVVGTkxFbEJSMnhFTEU5QlFVOXhka0lzUlVGQlV6ZGFMRWRCUjJ4Q2VHWXNSVUZCVDNwMlF5eFZRVUZWYzNWRkxGZEJRV0VzVTBGQmNVSnFka1VzUlVGQlQzbHdSU3hGUVVGUk4xb3NSVUZCV1hsa0xFZEJSelZGTEVkQlJrRnlkRVVzUjBGQlUwRXNSVUZEVkhsd1JTeEhRVUZyUWl4SFFVTmlORVFzUlVGQlZTeERRVU5pTEVsQlFVa3lRaXhGUVVGUmRuTkZMRXRCUVV0dmNrTXNTVUZCU1N4RlFVRkhMRVZCUVVrcmFFSXNSVUZCWVN4SFFVVjZRMjlrTEVWQlFWTXZjVVVzUzBGQlRXcERMRVZCUVU5NWNFVXNSVUZCVVRkYUxFVkJRVmx2Wml4RlFVRlJMRWRCUVVsQkxFZEJSM2hFTEVsQlFVbHFkMFVzUlVGQlNUWjNSQ3hGUVVGaExFVkJRMnBDZEZZc1JVRkJUU3hGUVVOT1JpeEZRVUZOTEVWQlJWWXNTVUZFUVc0MFF5eExRVUZMZDI1RkxFVkJRVk14Y1VVc1IwRkJZU3hKUVVGU2FVSXNTVUZEVm1wQ0xFZEJRVXNzU1VGQlRYVTNReXhIUVVGUExFMUJRM0pDZERaRExFVkJRVkVzUjBGQllTeEpRVUZTYnpaRExFZEJRWE5ETEVsQlFYcENialJETEV0QlFVdDNia1VzUlVGQlV6RnhSU3hGUVVGSkxFdEJRemxEY1RkRExFVkJRVTBzUjBGRlVtNDBReXhMUVVGTGQyNUZMRVZCUVZNeGNVVXNTVUZCVDJsQ0xFVkJRVkZ6TmtNc1IwRkJVU3hIUVVGTFJpeEZRVUZOTEVsQlIyeEVMRTlCUVU5eGRrSXNSVUZCVXpkYUxFZEJSMnhDZUdZc1JVRkJUM3AyUXl4VlFVRlZhelJETEZWQlFWa3NVMEZCYjBJM05FTXNSVUZCVDNsd1JTeEZRVUZSTkVRc1IwRlBPVVFzVDBGT1FYSjBSU3hIUVVGVFFTeEZRVU5VZVhCRkxFZEJRV3RDTEVWQlEySTBSQ3hIUVVGVlRDeEZRVUZUTDNGRkxFdEJRVTFxUXl4RlFVRlBlWEJGTEVWQlFWRXNSVUZCUnl4TFFVRlBMRXRCUTJ4RWNqVkNMRVZCUVU4eU1rSXNjMEpCUVhGQ0wyMUZMRVZCUVZGNVF5eExRVUZMTm1Nc1RVRkJUWFJtTEVsQlEyaEVRU3hGUVVGUkxFbEJRVWRCTEVWQlFWRXNTVUZCVDBFc1JVRkJVU3hIUVVOMFEybERMRXRCUVV0M2JrVXNSMEZCYlVJc1NVRkJVbnB3UlN4RlFVTlVlWEJGTEVWQlFWTXNSMEZIYkVKeU5VSXNSVUZCVDNwMlF5eFZRVUZWZFhWRkxHRkJRV1VzVTBGQmRVSnNka1VzUlVGQlQzbHdSU3hGUVVGUk5FUXNSMEZWY0VVc1QwRlVRWEowUlN4SFFVRlRRU3hGUVVOVWVYQkZMRWRCUVd0Q0xFVkJRMkkwUkN4SFFVRlZUQ3hGUVVGVEwzRkZMRXRCUVUxcVF5eEZRVUZQZVhCRkxFVkJRVkVzUlVGQlJ5eFBRVUZUTEU5QlEzSkVjalZDTEVWQlFVOHlNa0lzY1VKQlExUTVhMFVzUzBGQlMzZHVSU3hIUVVGdFFpeEpRVUZTZW5CRkxFVkJRMmhDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SFFVVTVRbWwwUlN4RlFVRnJRbWh5UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hIUVVGUkxFZEJSV3hEUVN4RlFVRlRMRWRCUjJ4Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVlhkMVJTeGhRVUZsTEZOQlFYVkNiblpGTEVWQlFVOTVjRVVzUlVGQlVUUkVMRWRCVlhCRkxFOUJWRUZ5ZEVVc1IwRkJVMEVzUlVGRFZIbHdSU3hIUVVGclFpeEZRVU5pTkVRc1IwRkJWVXdzUlVGQlV5OXhSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEZRVUZSTEVWQlFVY3NUMEZCVXl4UFFVTnlSSEkxUWl4RlFVRlBNakpDTEhGQ1FVTlVPV3RGTEV0QlFVdDNia1VzUjBGQlYzcHdSU3hKUVVGVkxFVkJRekZDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVdNc1NVRkJVbnB3UlN4SFFVVndRbWwwUlN4RlFVRnJRbWh5UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hIUVVGUkxFZEJSV3hEUVN4RlFVRlRMRWRCUjJ4Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVlhsMVJTeGhRVUZsTEZOQlFYVkNjSFpGTEVWQlFVOTVjRVVzUlVGQlVUUkVMRWRCV1hCRkxFOUJXRUZ5ZEVVc1IwRkJVMEVzUlVGRFZIbHdSU3hIUVVGclFpeEZRVU5pTkVRc1IwRkJWVXdzUlVGQlV5OXhSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEZRVUZSTEVWQlFVY3NXVUZCWVN4WlFVTjZSSEkxUWl4RlFVRlBNakpDTEhGQ1FVTlVPV3RGTEV0QlFVdDNia1VzUjBGQmJVSXNTVUZCVW5wd1JTeEZRVU5vUW1sRExFdEJRVXQzYmtVc1JVRkJVeXhIUVVGTmVuQkZMRWxCUVZVc1JVRkRPVUpwUXl4TFFVRkxkMjVGTEVWQlFWTXNSMEZCVFhwd1JTeEpRVUZWTEVkQlF6bENhVU1zUzBGQlMzZHVSU3hGUVVGVExFZEJRVTE2Y0VVc1NVRkJWU3hKUVVVNVFtMTBSU3hGUVVGclFteHlSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEhRVUZSTEVkQlJXeERRU3hGUVVGVExFZEJSMnhDY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWVEIxUlN4aFFVRmxMRk5CUVhWQ2NuWkZMRVZCUVU5NWNFVXNSVUZCVVRSRUxFZEJZWEJGTEU5QldrRnlkRVVzUjBGQlUwRXNSVUZEVkhsd1JTeEhRVUZyUWl4RlFVTmlORVFzUjBGQlZVd3NSVUZCVXk5eFJTeExRVUZOYWtNc1JVRkJUM2x3UlN4RlFVRlJMRVZCUVVjc1dVRkJZU3haUVVONlJIcHdSU3hGUVVGUkxFbEJRVWRCTEVWQlFWRXNWMEZCWVVFc1JVRkJVU3hIUVVONFEyOTNReXhGUVVGUE1qSkNMSEZDUVVOVU9XdEZMRXRCUVV0M2JrVXNSMEZCVjNwd1JTeEpRVUZWTEVkQlF6RkNhVU1zUzBGQlMzZHVSU3hGUVVGVExFZEJRVTE2Y0VVc1NVRkJWU3hIUVVNNVFtbERMRXRCUVV0M2JrVXNSVUZCVXl4SFFVRk5lbkJGTEVsQlFWVXNSVUZET1VKcFF5eExRVUZMZDI1RkxFVkJRVk1zUjBGQll5eEpRVUZTZW5CRkxFZEJSWEJDYlhSRkxFVkJRV3RDYkhKRkxFdEJRVTFxUXl4RlFVRlBlWEJGTEVkQlFWRXNSMEZGYkVOQkxFVkJRVk1zUjBGblFteENjalZDTEVWQlFVOTZka01zVlVGQlZUSjFSU3hoUVVGbExGTkJRWFZDZEhaRkxFVkJRVTk1Y0VVc1JVRkJVVFJFTEVkQlEzQkZMRTlCUVU5dU1FSXNSVUZCVjJvelF5eExRVUZOYWtNc1JVRkJUM2x3UlN4SFFVRlJMRVZCUVUwMFJDeEpRVWN2UTJvNVFpeEZRVUZQZW5aRExGVkJRVlUwZFVVc1lVRkJaU3hUUVVGMVFuWjJSU3hGUVVGUGVYQkZMRVZCUVZFMFJDeEhRVU53UlN4UFFVRlBiakJDTEVWQlFWZHFNME1zUzBGQlRXcERMRVZCUVU5NWNFVXNSMEZCVVN4RlFVRlBORVFzU1VGWGFFUnFPVUlzUlVGQlQzcDJReXhWUVVGVk5uVkZMR05CUVdkQ0xGTkJRWGRDZUhaRkxFVkJRVTk1Y0VVc1JVRkJVVFJFTEVkQlEzUkZMRTlCUVU5c01FSXNSVUZCV1d3elF5eExRVUZOYWtNc1JVRkJUM2x3UlN4SFFVRlJMRVZCUVUwMFJDeEpRVWRvUkdvNVFpeEZRVUZQZW5aRExGVkJRVlU0ZFVVc1kwRkJaMElzVTBGQmQwSjZka1VzUlVGQlQzbHdSU3hGUVVGUk5FUXNSMEZEZEVVc1QwRkJUMnd3UWl4RlFVRlpiRE5ETEV0QlFVMXFReXhGUVVGUGVYQkZMRWRCUVZFc1JVRkJUelJFTEVsQlNXcEVhamxDTEVWQlFVOTZka01zVlVGQlZXdHVSU3hMUVVGUExGTkJRV1UzTkVRc1JVRkJVVEJuUlN4RlFVRmhkR3RDTEVWQlFVOTBWQ3hIUVZGcVJTeEhRVkJMYzFRc1NVRkJUMEVzUlVGQlVTeEhRVU5tZEZRc1IwRkJaU3hKUVVGU1FTeEpRVUZYUVN4RlFVRk5OekZETEV0QlFVdGFMRkZCUXpsQ2NYVkZMRWRCUVdVeFowVXNSVUZCVHpOT0xGTkJRVkZ4ZFVVc1JVRkJZekZuUlN4RlFVRlBNMDRzVVVGRGJFUnhkVVVzU1VGQllVRXNSVUZCWXl4SFFVTTFRalV6UWl4RlFVRk5MRWRCUVV0QkxFVkJRVTF6VkN4SlFVRlBkRlFzUlVGQlRYTlVMRWRCUnpsQ2RGUXNTVUZCVVhOVUxFVkJRVThzVDBGQlR5eEZRVU14UWl4SFFVRnpRaXhKUVVGc1FuQTRReXhGUVVGUE0wNHNVVUZCWjBNc1NVRkJhRUpaTEV0QlFVdGFMRTlCUVdNc1QwRkJUeXhGUVVkeVJDeEhRVUZKY1hWRkxFVkJRV01zUlVGRGFFSXNUVUZCVFN4SlFVRkpOM05GTEZkQlFWY3NOa0pCUlhaQ0xFZEJRVWwxYjBRc1JVRkJVU3hIUVVGTFFTeEhRVUZUYm5CRUxFdEJRVXRhTEU5QlFWRXNUVUZCVFN4SlFVRkpkMElzVjBGQlZ5dzJRa0ZETlVRc1IwRkJTV2t4UXl4RlFVRk5MRVZCUVVjc1RVRkJUU3hKUVVGSmFqRkRMRmRCUVZjc01rSkJSemxDYVRGRExFVkJRVTAzTVVNc1MwRkJTMW9zVTBGQlVYa3lReXhGUVVGTk56RkRMRXRCUVV0YUxGRkJRemxDTWs0c1JVRkJUek5PTEU5QlFWTnhkVVVzUlVGQll6VXpRaXhGUVVGTmMxUXNTVUZEZEVOMFZDeEZRVUZOT1c5RExFVkJRVTh6VGl4UFFVRlRjWFZGTEVWQlFXTjBhMElzUjBGSGRFTXNTVUZEU1hKelJDeEZRVVJCTkc5RkxFVkJRVTAzZGtJc1JVRkJUWE5VTEVWQlIyaENMRWRCUVVsdWNFUXNUMEZCVXl0TkxFZEJRVlZ2T0VNc1JVRkJVWE5yUWl4SFFVRmxRU3hGUVVGak5UTkNMRVZCUlRGRUxFbEJRVXN2TkVNc1JVRkJTVFJ2UlN4RlFVRk5MRVZCUVVjMWIwVXNSMEZCU3l4SlFVRkxRU3hGUVVNeFFtbFJMRVZCUVU5cVVTeEZRVUZKTW5kRkxFZEJRV1Y2ZEVVc1MwRkJTMnhFTEVWQlFVbHhjMFFzVVVGRmFFTXNSMEZCU1hWakxFVkJRVTBzVFVGQlUzWXpRaXhGUVVGUE1qSkNMRzlDUVVVdlFpeEpRVUZMYUc5RkxFVkJRVWtzUlVGQlIwRXNSVUZCU1RSdlJTeEpRVUZQTlc5RkxFVkJRM0pDYVZFc1JVRkJUMnBSTEVWQlFVa3lkMFVzUjBGQlpYcDBSU3hMUVVGTGJFUXNSVUZCU1hGelJDeFJRVWR5UTJwbExGZEJRVmQ0YzBNc1ZVRkJWV3RXTEVsQlFVa3pWeXhMUVVOMlFqaFFMRVZCUTBFdlRTeExRVUZMYlhKRExGTkJRVk5uWlN4RlFVRlBRU3hGUVVGUmRXTXNSMEZETjBJclNDeEhRVWxLTEU5QlFVOHZTQ3hIUVU5VWRqTkNMRVZCUVU5NmRrTXNWVUZCVlN0eFJTeExRVUZQTEZOQlFXVTFSQ3hGUVVGTE1XTXNSVUZCVDNSVUxFVkJRVXQ1ZGtJc1IwRkZkRVFzUjBGQmJVSXNhVUpCUVZKUExFVkJRV3RDTEVOQlV6TkNMRWRCVW5GQ0xHbENRVUZXTVdNc1IwRkRWRzFqTEVWQlFWZHVZeXhGUVVOWVFTeEZRVUZSTEVWQlExSjBWQ3hGUVVGTk56RkRMRXRCUVV0YUxGRkJRMkVzYVVKQlFWSjVNa01zU1VGRGFFSjVka0lzUlVGQlYzcDJRaXhGUVVOWVFTeEZRVUZOTnpGRExFdEJRVXRhTEZGQlJVMHNTVUZCWm5sdFJTeEZRVUZKZW0xRkxFOUJRV01zUTBGRGNFSXNTVUZCU1RKNFJDeEZRVUZQT0ZVc1JVRkJTVzV2UkN4WFFVRlhMRWRCUTNSQ2NYcERMRVZCUVU4c1RVRkRWRGhWTEVWQlFVMDVWU3hIUVVkV0xGRkJRV2xDV1N4SlFVRmlNbFFzUjBGQk9FTXNhVUpCUVdKQkxFVkJRMjVETEUxQlFVMHNTVUZCU1doc1JTeFZRVUZWTERaQ1FVVjBRaXhIUVVGM1FpeHBRa0ZCWW1kc1JTeEpRVUV3UW00elFpeEZRVUZQYnpOQ0xGZEJRVmRFTEVkQlEzSkVMRTFCUVUwc1NVRkJTV2hzUlN4VlFVRlZMSEZDUVVGMVFtZHNSU3hQUVVWeVFpeHBRa0ZCVWs4c1NVRkRhRUpCTEVkQlFWa3NTMEZKWkN4SFFVRkpNV01zUlVGQlVTeEhRVUZMYm5CRUxFdEJRVXRhTEU5QlFWTXJjRVFzUjBGQlUyNXdSQ3hMUVVGTFdpeFBRVUZUZVRKRExFVkJRM0JFTEUxQlFVMHNTVUZCU1dveFF5eFhRVUZYTEhOQ1FVZDJRaXhIUVVGSmFURkRMRWRCUVU5elZDeEZRVU5VTEU5QlFVOXVjRVFzUzBGUlZDeEpRVUZKYkVRc1JVRkRTaXhIUVU1QmNYTkVMRXRCUVd0Q0xFVkJRMnhDZEZRc1QwRkJZemhpTEVsQlFWSTVZaXhGUVVGdlFqY3hReXhMUVVGTFdpeFBRVUZUZVRKRExFbEJRVkVzUlVGRk0wTm5kMElzU1VGQlMwRXNSVUZCVFN4SFFVZEhMR2xDUVVGU1FTeEZRVU5VTEVsQlFVc3ZiMFVzUlVGQlNYRnpSQ3hGUVVGUGNuTkVMRVZCUVVrck5FTXNTVUZCVHk4MFF5eEZRVU42UW10RUxFdEJRVXRzUkN4SFFVRkxLMjlGTEUxQlJWQXNRMEZEVEN4SlFVRkplbFVzUlVGQlVXcHFRaXhGUVVGUGN6TkNMRk5CUVZOSkxFZEJRM2hDUVN4RlFVTkJTeXhGUVVGWkxFbEJRVWt2TTBJc1JVRkJUekF6UWl4RlFVRkxVQ3hIUVVGVmFDdEVMRmxCUTNSRGJ5dEVMRVZCUVUxMFZTeEZRVUZOYUhsRUxFOUJRMmhDTEVsQlFVdDBReXhGUVVGSkxFVkJRVWRCTEVWQlFVa3JORU1zUlVGQlRYTlVMRWxCUVZOeWMwUXNSVUZETjBKclJDeExRVUZMYkVRc1JVRkJTWEZ6UkN4SFFVRlRhVWtzUlVGQlRYUXdSQ3hGUVVGSk5HOUZMRWRCU1doRExFOUJRVTh4YkVVc1RVRk5WQ3hKUVVGSk1IUkZMRVZCUVc5Q0xIRkNRVzFDZUVJc1UwRkJVemxETEVWQlFVOXljMFVzUjBGRFpDeFBRVUZKUVN4RlFVRkpMRWRCUVZjc1NVRkJUVUVzUlVGQlJTdEpMRk5CUVZNc1NVRkROMEl2U1N4RlFVRkZLMGtzVTBGQlV5eEpRVWR3UWl4VFFVRlROQ3RFTEVWQlFXRjJOME1zUlVGQlVUQTVReXhIUVVVMVFpeEpRVUZKVXl4RlFVUktWQ3hGUVVGUlFTeEhRVUZUT1RkQ0xFbEJUV3BDTEVsQlNrRXNTVUZCU1c1MFF5eEZRVUZUZFhKQ0xFVkJRVTkyY2tJc1QwRkRhRUoxZFVVc1JVRkJaMElzUzBGRGFFSjJZeXhGUVVGUkxFZEJSVWgwTUVRc1JVRkJTU3hGUVVGSFFTeEZRVUZKYzBNc1NVRkJWWFJETEVWQlFVY3NRMEZKTDBJc1NVRklRV2R6UlN4RlFVRlpiaXRETEVWQlFVOXFUaXhYUVVGWE5XZENMRWxCUjJRc1QwRkJWV2R6UlN4RlFVRlpMRTFCUVZFc1EwRkZOVU1zU1VGQlN6WkZMRVZCUVdVc1EwRkZiRUlzUjBGQlNUZEZMRVZCUVZrc1RVRkJVU3hGUVVWcVFsUXNSMEZCVXl4SlFVRk5MRWRCUVVkcVdDeEZRVUZOYkc5RUxFdEJRVXNzU1VGQlRTeEpRVUZOTEV0QlF6bERMRk5CUTBzc1IwRkJTWEJOTEVWQlFVa3NTVUZCVFhORExFVkJRVkVzUlVGRmRFSnBjRVVzUjBGQlV5eEpRVUZOTEVkQlFVZHFXQ3hGUVVGTmJHOUVMRXRCUVVzc1NVRkJUU3hKUVVGTkxFdEJRemxETEZOQlNVWjVhMFVzUlVGQlowSTNSU3hGUVVWb1FpeFRRVWxHTEVkQlFVbEJMRVZCUVZrc1RVRkJVU3hGUVVOcVFsUXNSMEZCVXl4SlFVRk5MRWRCUVVkcVdDeEZRVUZOYkc5RUxFdEJRVXNzU1VGQlRTeEpRVUZOTEV0QlF6bERlV3RGTEVWQlFXZENOMFVzUlVGRGFFSXNVMEZKUmtFc1JVRkJhMFVzVDBGQmNrUTJSU3hGUVVGblFpeFBRVUZWTEVkQlFVczNSU3hGUVVGWkxGbEJReTlETmtVc1NVRkZTblJHTEVkQlFWTXNTVUZCVFN4SFFVRkhhbGdzUlVGQlRXeHZSQ3hMUVVGTExFbEJRVTBzU1VGQlRTeExRVTFvUkN4SFFVaEJlV3RGTEVWQlFXZENMRXRCUjFvM1JTeEZRVUZaTEVsQlFVMHNRMEZEY0VJc1NVRkJTMVFzUjBGQlV5eEhRVUZMTEVWQlFVY3NUVUZEZEVKcVdDeEZRVUZOYkc5RUxFdEJRVXMwTDBRc1VVRkRUaXhIUVVGSlFTeEZRVUZaTEV0QlFVOHNRMEZETlVJc1NVRkJTMVFzUjBGQlV5eEhRVUZMTEVWQlFVY3NUVUZEZEVKcVdDeEZRVUZOYkc5RUxFdEJRMG8wTDBRc1IwRkJZU3hGUVVGTkxFbEJRMUFzUjBGQldrRXNSVUZCYlVJc1ZVRkZhRUlzUjBGQlNVRXNSVUZCV1N4TlFVRlRMRU5CUXpsQ0xFbEJRVXRVTEVkQlFWTXNSMEZCU3l4RlFVRkhMRTFCUTNSQ2FsZ3NSVUZCVFd4dlJDeExRVU5LTkM5RUxFZEJRV0VzUjBGQlRTeEpRVU51UWtFc1IwRkJZU3hGUVVGTkxFZEJRVThzU1VGRFpDeEhRVUZhUVN4RlFVRnRRaXhUUVVWb1FpeE5RVUZKUVN4RlFVRlpMRk5CVTNKQ0xFMUJRVTBzU1VGQlNUTnRSU3hOUVVGTkxITkNRVkpvUWl4SlFVRkxhMjFGTEVkQlFWTXNSMEZCU3l4RlFVRkhMRTFCUTNSQ2FsZ3NSVUZCVFd4dlJDeExRVU5LTkM5RUxFZEJRV0VzUjBGQlR5eEpRVU53UWtFc1IwRkJZU3hIUVVGTkxFZEJRVThzU1VGRE1VSkJMRWRCUVdFc1JVRkJUU3hIUVVGUExFbEJRMlFzUjBGQldrRXNSVUZCYlVJc1RVRlBla0lzVDBGQlR6RllMRVZCTkVKVUxGTkJRVk1yVlN4RlFVRmxORUlzUjBGRGRFSXNUMEZCVDNRclFpeEZRVUZQYld0RExGbEJhRWxvUWl4VFFVRnpRamRHTEVkQlNYQkNMRWxCUmtGQkxFVkJWVVlzVTBGQmNVSkJMRWRCUTI1Q0xFOUJRVWxCTEVWQlFVazFNRU1zUzBGQllUUXdReXhGUVVGSk5UQkRMRTlCUTJ4Q05EQkRMRVZCUVVsMk9VUXNVVUZCVVN4aFFVRmpMRWxCV2pOQ2NXcEZMRU5CUVZjNVJpeEhRVUZMZGpsRUxGRkJRVkZyYWtVc1JVRkJiVUlzUzBGRmVrTjBkVVVzVDBGQlV5eEZRVUZITEUxQlFVOHNSMEZGTTBJc1MwRkJUekp2UlN4RlFVRkpNMjlGTEU5QlFWTXNSMEZCVFN4SFFVTjRRakp2UlN4SFFVRlpMRWxCUldRc1QwRkJUMEVzUlVGMVNHMUNLMFlzUTBGQldTOUdMRWxCUjNoRExGTkJRVk5HTEVWQlFWbDZOMFFzUlVGQlN6Sm9SU3hGUVVGTGRrY3NSVUZCVVhCdlJTeEhRVU55UXl4SlFVRkxMRWxCUVVsMFF5eEZRVUZKTEVWQlFVZEJMRVZCUVVselF5eExRVU5pZEVNc1JVRkJTVEJ4UlN4SFFVRlZkVWNzUlVGQlNUTjFSU3hSUVVGWmRFTXNSMEZCUzNOUUxFVkJRVWxvVGl4VlFVUm9RblJETEVWQlJUVkNhWGhGTEVWQlFVbHFlRVVzUlVGQlNUQnhSU3hIUVVGVmNEZEVMRVZCUVVsMFVDeEhRVVY0UWl4UFFVRlBRU3hMTERoRFEzSjJSRlJTTEVWQlFWRnhlRVFzVjBGMVExSXNVMEZCY1VKeFowSXNSMEZEYmtJc1NVRkJTVU1zUlVGQlQwTXNSVUZCVVVZc1IwRkRaa2NzUlVGQlYwWXNSVUZCU3l4SFFVTm9Ra2NzUlVGQmEwSklMRVZCUVVzc1IwRkRNMElzVDBGQmRVTXNSMEZCT1VKRkxFVkJRVmRETEVkQlFYVkNMRVZCUVV0QkxFZEJNVU5zUkRsNFJTeEZRVUZSYzNoRkxGbEJhVVJTTEZOQlFYTkNTU3hIUVVOd1FpeEpRVUZKU3l4RlFXTkJkbmhGTEVWQllrRnRlRVVzUlVGQlQwTXNSVUZCVVVZc1IwRkRaa2NzUlVGQlYwWXNSVUZCU3l4SFFVTm9Ra2NzUlVGQmEwSklMRVZCUVVzc1IwRkZka0p1U0N4RlFVRk5MRWxCUVVsM1NDeEZRVlpvUWl4VFFVRnpRazRzUlVGQlMwY3NSVUZCVlVNc1IwRkRia01zVDBGQmRVTXNSMEZCT1VKRUxFVkJRVmRETEVkQlFYVkNMRVZCUVV0QkxFVkJVemxDUnl4RFFVRlpVQ3hGUVVGTFJ5eEZRVUZWUXl4SlFVVjZRMGtzUlVGQlZTeEZRVWRXT1Vrc1JVRkJUVEJKTEVWQlFXdENMRVZCUTNoQ1JDeEZRVUZYTEVWQlExaEJMRVZCUjBvc1NVRkJTM0o0UlN4RlFVRkpMRVZCUVVkQkxFVkJRVWswYjBVc1JVRkJTelZ2UlN4SFFVRkxMRVZCUTNoQ2RYaEZMRVZCUTBkSkxFVkJRVlZVTEVWQlFVbDBkMFFzVjBGQlZ6Vm5RaXhMUVVGUExFZEJRMmhETW5oRkxFVkJRVlZVTEVWQlFVbDBkMFFzVjBGQlZ6Vm5RaXhGUVVGSkxFdEJRVThzUjBGRGNFTXllRVVzUlVGQlZWUXNSVUZCU1hSM1JDeFhRVUZYTldkQ0xFVkJRVWtzUzBGQlR5eEZRVU55UXpKNFJTeEZRVUZWVkN4RlFVRkpkSGRFTEZkQlFWYzFaMElzUlVGQlNTeEpRVU12UW1keFJTeEZRVUZKTUVnc1MwRkJZMGdzUjBGQlR5eEhRVUZOTEVsQlF5OUNka2dzUlVGQlNUQklMRXRCUVdOSUxFZEJRVThzUlVGQlN5eEpRVU01UW5aSUxFVkJRVWt3U0N4TFFVRnRRaXhKUVVGT1NDeEZRVWRMTEVsQlFYQkNSQ3hKUVVOR1F5eEZRVU5IU1N4RlFVRlZWQ3hGUVVGSmRIZEVMRmRCUVZjMVowSXNTMEZCVHl4RlFVTm9Reko0UlN4RlFVRlZWQ3hGUVVGSmRIZEVMRmRCUVZjMVowSXNSVUZCU1N4TFFVRlBMRVZCUTNaRFozRkZMRVZCUVVrd1NDeExRVUZ0UWl4SlFVRk9TQ3hIUVVkTExFbEJRWEJDUkN4SlFVTkdReXhGUVVOSFNTeEZRVUZWVkN4RlFVRkpkSGRFTEZkQlFWYzFaMElzUzBGQlR5eEhRVU5vUXpKNFJTeEZRVUZWVkN4RlFVRkpkSGRFTEZkQlFWYzFaMElzUlVGQlNTeExRVUZQTEVWQlEzQkRNbmhGTEVWQlFWVlVMRVZCUVVsMGQwUXNWMEZCVnpWblFpeEZRVUZKTEV0QlFVOHNSVUZEZGtObmNVVXNSVUZCU1RCSUxFdEJRV05JTEVkQlFVOHNSVUZCU3l4SlFVTTVRblpJTEVWQlFVa3dTQ3hMUVVGdFFpeEpRVUZPU0N4SFFVZHVRaXhQUVVGUGRrZ3NSMEV6UmxSNGNVVXNSVUZCVVdselJTeGpRV3RJVWl4VFFVRjNRbTFITEVkQlVYUkNMRWxCVUVFc1NVRkJTVXdzUlVGRFFUTkpMRVZCUVUxblNpeEZRVUZOZEhaRkxFOUJRMXAxZGtVc1JVRkJZV3BLTEVWQlFVMHNSVUZEYmtKclNpeEZRVUZSTEVkQlNVZzVlRVVzUlVGQlNTeEZRVUZISzNoRkxFVkJRVTl1U2l4RlFVRk5hVW9zUlVGQldUZDRSU3hGUVVGSkszaEZMRVZCUVUwdmVFVXNSMEZJT1VJc1RVRkpia0k0ZUVVc1JVRkJUVEZzUlN4TFFVRkxOR3hGTEVWQlFWbEtMRVZCUVU4MWVFVXNSVUZCU1VFc1JVRktaaXhOUVVseFF5dDRSU3hGUVVGUFFTeEZRVUZSTDNoRkxFVkJTbkJFTEZGQlVVWXNTVUZCWmpaNFJTeEhRVU5HVGl4RlFVRk5TeXhGUVVGTmFFb3NSVUZCVFN4SFFVTnNRbXRLTEVWQlFVMHhiRVVzUzBGRFNqWnNSU3hGUVVGUFZpeEhRVUZQTEVkQlEyUlZMRVZCUVZGV0xFZEJRVThzUlVGQlN5eEpRVU53UWl4UFFVVnpRaXhKUVVGbVRTeEpRVU5VVGl4SFFVRlBTeXhGUVVGTmFFb3NSVUZCVFN4SlFVRk5MRWRCUVV0blNpeEZRVUZOYUVvc1JVRkJUU3hIUVVNeFEydEtMRVZCUVUweGJFVXNTMEZEU2pac1JTeEZRVUZQVml4SFFVRlBMRWxCUTJSVkxFVkJRVkZXTEVkQlFVOHNSVUZCU3l4SlFVTndRbFVzUlVGQlVWWXNSMEZCVHl4RlFVRkxMRWxCUTNCQ0xFMUJTVW9zVDBGQlQwOHNSVUZCVFhCdlJTeExRVUZMTEV0QmVrbHdRaXhKUVV4QkxFbEJRVWwxYjBVc1JVRkJVeXhIUVVOVVRpeEZRVUZaTEVkQlExcElMRVZCUVRSQ0xHOUNRVUZtY0dwRExGZEJRVFpDUVN4WFFVRmhjbkpETEUxQlJYWkVhM2hFTEVWQlFVOHNiVVZCUTBacU1FUXNSVUZCU1N4RlFVRkhORzlGTEVWQlFVMHpWU3hGUVVGTE0zaEVMRTlCUVZGMFF5eEZRVUZKTkc5RkxFbEJRVTgxYjBVc1JVRkROVU5wZVVVc1JVRkJUMnA1UlN4SFFVRkxhVEJFTEVWQlFVdHFNRVFzUjBGRGFrSXllRVVzUlVGQlZURmtMRVZCUVV0eWVrTXNWMEZCVnpWblFpeEpRVUZOUVN4RlFWRnNReXhUUVVGVGIzaEZMRVZCUVZOR0xFZEJRMmhDTEVsQlFVbDBTU3hGUVVGTmMwa3NSVUZCU1RWMVJTeFBRVVZrTEVkQlFVbHpiVVVzUlVGQlRTeEZRVUZKTEVWQlExb3NUVUZCVFN4SlFVRkpkbXBGTEUxQlFVMHNhMFJCUzJ4Q0xFbEJRVWxuYzBVc1JVRkJWMGdzUlVGQlNXaHNSU3hSUVVGUkxFdEJUek5DTEU5QlRtdENMRWxCUVdSdGJFVXNTVUZCYVVKQkxFVkJRVmQ2U1N4SFFVMTZRaXhEUVVGRGVVa3NSVUZLWTBFc1NVRkJZWHBKTEVWQlF5OUNMRVZCUTBFc1JVRkJTM2xKTEVWQlFWY3NSMEZ6UlhSQ0xGTkJRVk5YTEVWQlFXRktMRVZCUVU5MmJFSXNSVUZCVDNSVUxFZEJSMnhETEVsQlJrRXNTVUZCU1hjMFFpeEZRVkp2UWxjc1JVRlRjRUpvVGl4RlFVRlRMRWRCUTBwc2JFVXNSVUZCU1hGelJDeEZRVUZQY25ORUxFVkJRVWtyTkVNc1JVRkJTeTgwUXl4SFFVRkxMRVZCUTJoRGRYaEZMRWRCUTBsTExFVkJRVTAxZUVVc1NVRkJUU3hIUVVGTkxGZEJRMnhDTkhoRkxFVkJRVTAxZUVVc1JVRkJTU3hKUVVGTkxFVkJRVXNzVVVGRFVDeEpRVUZtTkhoRkxFVkJRVTAxZUVVc1JVRkJTU3hKUVVOaWEyeEZMRVZCUVU4NU5FUXNTMEZrUmpac1JTeEhRVVJwUWtNc1JVRmxUVmdzU1VGa1ZDeEhRVUZMTEVsQlEzaENWU3hGUVVGUFF5eEhRVUZQTEVkQlFVc3NTVUZEYmtKRUxFVkJRVTlETEVkQlFVOHNSVUZCU1N4SlFVTnNRa1FzUlVGQllTeEhRVUZPUXl4SlFXRlVMRTlCUVU5b1RpeEZRVUZQZURkRUxFdEJRVXNzU1VGcVIzSkNhVzlGTEVWQlFWVXNTVUZCU1M5M1JDeFhRVUZYTEVsQlFVMHNSMEZETDBJcmQwUXNSVUZCVlN4SlFVRkpMM2RFTEZkQlFWY3NTVUZCVFN4Sk96dEJRMnhDTDBKd2FFSXNSVUZCVVd0MlJDeExRVUZQTEZOQlFWVnpReXhGUVVGUk1Gb3NSVUZCVVhsSUxFVkJRVTFETEVWQlFVMURMRWRCUTI1RUxFbEJRVWs1ZGtVc1JVRkJSMjVETEVWQlEwaHJlVVVzUlVGQmFVSXNSVUZCVkVRc1JVRkJZMFFzUlVGQlR5eEZRVU0zUWtjc1IwRkJVU3hIUVVGTFJDeEhRVUZSTEVWQlEzSkNSU3hGUVVGUlJDeEhRVUZSTEVWQlEyaENSU3hIUVVGVExFVkJRMVI2ZVVVc1JVRkJTVzE1UlN4RlFVRlJSU3hGUVVGVExFVkJRVXNzUlVGRE1VSXZlRVVzUlVGQlNUWjRSU3hIUVVGUkxFVkJRVWtzUlVGRGFFSndkMFVzUlVGQlNXbDJSQ3hGUVVGUE1Gb3NSVUZCVXpGeFJTeEhRVTk0UWl4SlFVeEJRU3hIUVVGTFRTeEZRVVZNYVVNc1JVRkJTVklzUjBGQlRTeEpRVUZQTUhkRkxFZEJRVlVzUlVGRE0wSXhkMFVzUzBGQlVUQjNSU3hGUVVOU1FTeEhRVUZUU0N4RlFVTkdSeXhGUVVGUkxFVkJRVWRzZDBVc1JVRkJVeXhKUVVGS1FTeEZRVUZYZVhWRUxFVkJRVTh3V2l4RlFVRlRNWEZGTEVkQlFVbEJMRWRCUVV0TkxFVkJRVWR0ZVVVc1IwRkJVeXhIUVV0MlJTeEpRVWhCY25sRkxFVkJRVWx0UXl4SFFVRk5MRWxCUVU5cmQwVXNSMEZCVlN4RlFVTXpRbXgzUlN4TFFVRlJhM2RGTEVWQlExSkJMRWRCUVZOTUxFVkJRMFpMTEVWQlFWRXNSVUZCUjNKNVJTeEZRVUZUTEVsQlFVcEJMRVZCUVZjMGQwUXNSVUZCVHpCYUxFVkJRVk14Y1VVc1IwRkJTVUVzUjBGQlMwMHNSVUZCUjIxNVJTeEhRVUZUTEVkQlJYWkZMRWRCUVZVc1NVRkJUbXgzUlN4RlFVTkdRU3hGUVVGSkxFVkJRVWxwZDBVc1RVRkRTQ3hKUVVGSmFuZEZMRWxCUVUxbmQwVXNSVUZEWml4UFFVRlBibmxGTEVWQlFVbG5iVU1zU1VGQmMwSnhTaXhMUVVGa01YUkRMRWRCUVVzc1JVRkJTU3hIUVVVMVFqTkNMRWRCUVZGelJDeExRVUZMYjNKRExFbEJRVWtzUlVGQlIzTnFReXhIUVVOd1FqZDJSU3hIUVVGUmFYZEZMRVZCUlZZc1QwRkJVWHAzUlN4SFFVRkxMRVZCUVVrc1IwRkJTek5DTEVWQlFVbHpSQ3hMUVVGTGIzSkRMRWxCUVVrc1JVRkJSM1p6UXl4RlFVRkpOblpGTEVsQlJ6VkROWGxGTEVWQlFWRnBWU3hOUVVGUkxGTkJRVlYxT1VNc1JVRkJVUzkyUkN4RlFVRlBlWEJGTEVWQlFWRjVTQ3hGUVVGTlF5eEZRVUZOUXl4SFFVTXpSQ3hKUVVGSk9YWkZMRVZCUVVkdVF5eEZRVUZIUXl4RlFVTk9hWGxGTEVWQlFXbENMRVZCUVZSRUxFVkJRV05FTEVWQlFVOHNSVUZETjBKSExFZEJRVkVzUjBGQlMwUXNSMEZCVVN4RlFVTnlRa1VzUlVGQlVVUXNSMEZCVVN4RlFVTm9Ra2NzUlVGQlpTeExRVUZVVGl4RlFVRmpNWFZGTEV0QlFVdHZja01zU1VGQlNTeEhRVUZKTEVsQlFVMXdja01zUzBGQlMyOXlReXhKUVVGSkxFZEJRVWtzU1VGQlRTeEZRVU14UkRsMVF5eEZRVUZKYlhsRkxFVkJRVThzUlVGQlMwVXNSVUZCVXl4RlFVTjZRaTk0UlN4RlFVRkpObmhGTEVWQlFVOHNSMEZCU3l4RlFVTm9RbkIzUlN4RlFVRkpaQ3hGUVVGUkxFZEJRV2RDTEVsQlFWWkJMRWRCUVdVc1JVRkJTVUVzUlVGQlVTeEZRVUZMTEVWQlFVa3NSVUZ0UXpGRUxFbEJha05CUVN4RlFVRlJlVU1zUzBGQlMzRnBReXhKUVVGSk9XdERMRWRCUldJcmFVTXNUVUZCVFM5cFF5eEpRVUZWUVN4SlFVRlZkM1ZETEV0QlF6VkNjblpETEVWQlFVazBha01zVFVGQlRTOXBReXhIUVVGVExFVkJRVWtzUlVGRGRrSnpRaXhGUVVGSlozZEZMRWxCUlVwb2QwVXNSVUZCU1cxQ0xFdEJRVXMyWXl4TlFVRk5OMk1zUzBGQlMzRnlReXhKUVVGSk9YUkRMRWRCUVZONVF5eExRVUZMYzNKRExFdEJRMnhETDNSRExFZEJRVk5hTEVWQlFVbHhSQ3hMUVVGTGIzSkRMRWxCUVVrc1IwRkJTWFp6UXl4SlFVRk5MRWxCUTJ4RFFTeEpRVU5CYkVNc1IwRkJTeXhKUVVkTVdTeEhRVVJGYzBJc1JVRkJTV2wzUlN4SFFVRlRMRVZCUTA1RkxFVkJRVXR5ZVVVc1JVRkZUSEY1UlN4RlFVRkxhSFpGTEV0QlFVdHZja01zU1VGQlNTeEZRVUZITEVWQlFVa3dha01zU1VGRmNFSnVlVVVzUjBGQlN5eEpRVU5tYTBNc1NVRkRRV3hETEVkQlFVc3NSMEZIU0d0RExFVkJRVWxwZDBVc1IwRkJVMFFzUjBGRFptNTVSU3hGUVVGSkxFVkJRMHB0UXl4RlFVRkpaM2RGTEVkQlEwdG9kMFVzUlVGQlNXbDNSU3hIUVVGVExFZEJRM1JDY0hsRkxFZEJRVTFoTEVWQlFWRmFMRVZCUVVzc1IwRkJTM0ZFTEV0QlFVdHZja01zU1VGQlNTeEZRVUZIYzJwRExFZEJRM0JETjNaRkxFZEJRVkZwZDBVc1NVRkZVbkI1UlN4RlFVRkpZU3hGUVVGUmVVTXNTMEZCUzI5eVF5eEpRVUZKTEVWQlFVY3dha01zUlVGQlVTeEhRVUZMT1hWRkxFdEJRVXR2Y2tNc1NVRkJTU3hGUVVGSGMycERMRWRCUTJwRU4zWkZMRVZCUVVrc1NVRkpSRFoyUlN4SFFVRlJMRVZCUVVkd2FFSXNSVUZCVHpCYUxFVkJRVk14Y1VVc1IwRkJVeXhKUVVGS1NTeEZRVUZWU2l4SFFVRkxUU3hGUVVGSFJpeEhRVUZMTEVsQlFVdG5lVVVzUjBGQlVTeEhRVWt6UlN4SlFVWkJOM1pGTEVWQlFVdEJMRWRCUVVzMmRrVXNSVUZCVVdoNVJTeEZRVU5zUW10NVJTeEhRVUZSUml4RlFVTkVSU3hGUVVGUExFVkJRVWQwYUVJc1JVRkJUekJhTEVWQlFWTXhjVVVzUjBGQlV5eEpRVUZLZFVNc1JVRkJWWFpETEVkQlFVdE5MRVZCUVVkcFF5eEhRVUZMTEVsQlFVc3Jka1VzUjBGQlVTeEhRVVV4UlhSb1FpeEZRVUZQTUZvc1JVRkJVekZ4UlN4RlFVRkpUU3hKUVVGVkxFbEJRVXA1UWl4SkxHTkRia1kxUWl4SlFVRkplVWtzUlVGQlZ5eEhRVUZIUVN4VFFVVnNRaTlMTEVWQlFVOUVMRkZCUVZWMVJDeE5RVUZOTkVnc1UwRkJWeXhUUVVGVmNTOUVMRWRCUXpGRExFMUJRVFpDTEd0Q1FVRjBRbmd2UkN4RlFVRlRja3NzUzBGQlN6WndSU3hMTEdkQ1ExVjJRaXhKUVVGSmRuWkVMRVZCUVU4c1JVRkJVU3hIUVVObWVsY3NSVUZCVDNsWExFVkJRMUI0V0N4RlFVRlRaMG9zVTBGQlV5eGpRVUZVUVN4SFFVVmlha2tzUlVGQlN6UktMR0ZCUVdFc2FVTkJRV3RETEV0QlFVMHpTeXhIUVZjeFJITjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJETEZOQlFWY3NVMEZCVTNCRkxFZEJRM2hEYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBReXhUUVVGVmREbERMRVZCUVVzMGNFTXNVMEZETDBOeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wUXl4VFFVRlRkamxETEZsQlFXTXNhME5CU3pORFF5eEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMjR5UkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRek5FTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORU1zVTBGQlUyZzBReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVhSRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORU1zVTBGQlUyZzBReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEyeEZMRWxCUVU5RExFVkJRVTBzUTBGRFdESmxMRkZCUVZOc05FUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFZEJRMnhFTm1Vc1RVRkJUMjQwUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzU1VGTmJFUXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wUXl4VFFVRlRlbFVzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU14UkN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkRjRU1zVDBGQlQzaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORU1zVTBGQlUzaEVMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWM3BGT0VVc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMFF5eFRRVUZUZUVRc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU42UlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5MFlTeFpRVU14UXpSbUxFVkJRVWs0WlN4WFFVRlhOWGhGTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkyWVN4WlFVTXhRelptTEVWQlFVa3JaU3hUUVVGVE4zaEZMRWRCUTJJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UkRMRk5CUVZOdU1rUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRla1FzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UkRMRk5CUVZOdVJDeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU4wUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMjVFTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEZWtVc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVVXNTMEZFVm5KNVJDeEZRVUZKYVZRc1JVRkJVWE01UkN4bFFVVldjR1VzUlVGQlR6RmhMRmRCUTB3c1JVRkRRWG96UXl4SFFVbE5MRXRCUkZaQkxFVkJRVWxwVkN4RlFVRlJkVGxFTEdGQlJWWnlaU3hGUVVGUE0yRXNWMEZEVEN4RlFVTkJlRE5ETEVsQlZVNHJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wUXl4VFFVRlRiakpFTEZWQlFWVnRlRVVzVjBGQllTeFhRVU53UkN4UFFVRTRRblEwUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMjR5UkN4VlFVRlZhWGhGTEZkQlFXRXNVMEZCVXpWNFJTeEhRVU0zUkN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUkswTXNhMEpCUVd0Q2JHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVXcEVjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMjR5UkN4VlFVRlZiM2hGTEZOQlFWY3NWMEZEYkVRc1QwRkJPRUoyTkVRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSRExGTkJRVk51TWtRc1ZVRkJWV3Q0UlN4VFFVRlhMRk5CUVZNM2VFVXNSMEZETTBRc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVTdERMR3RDUVVGclFteHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFVbHFSQ3RETEVWQlFVdDBReXhQUVVGUE1sWXNUMEZCVHpkWUxFVkJRVk1yZWtRc1RVRkJUVU1zVDBGQlR6SkNMRmNzWjBKRE1VeDZReXhKUVVGSk1UWkRMRVZCUVU4c1JVRkJVU3hIUVVObWVsY3NSVUZCVDNsWExFVkJRMUI0V0N4RlFVRlRaMG9zVTBGQlV5eGpRVUZVUVN4SFFVVmlha2tzUlVGQlN6UktMR0ZCUVdFc05FSkJRVFpDTEV0QlFVMHpTeXhIUVZkeVJITjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMllzU1VGQlRTeFRRVUZUVkN4SFFVTnVRMncxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZMTXpWRExFVkJRVXMwY0VNc1UwRkRNVU55WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm1MRWxCUVVrMU5VTXNXVUZCWXl3MlFrRkxkRU5ETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm1MRWxCUVVsNGVVUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOMFJDeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTWEl3UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXcEZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkpjakJETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkROMFFzU1VGQlQwTXNSVUZCVFN4RFFVTllhV1lzVVVGQlUzZzBSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZEYkVRNWVVUXNUVUZCVHpoNVJDeEZRVUZKYldZc2EwSkJUV0lzVDBGSVNYQm1MRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKT1ZFc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOeVJDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVU53UXl4UFFVRlBZaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMllzU1VGQlNVY3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhjRVU0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTVWNzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTndSU3hMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbHZaaXhYUVVGWGJIbEZMRWRCUTJZc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXOURkM1JFTEVWQlFVODVXaXhaUVVNdlEyOW1MRVZCUVVseFppeFRRVUZUYm5sRkxFZEJRMklzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTWGg1UkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOd1JDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkpVU3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVOcVJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKVVN4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTNCRkxFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUk5EbEVMR05CUTA0dmQwVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZFMk9VUXNhVUpCUTA1b2VFVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXdZU3hYUVVOTUxFVkJRMEV2TTBNc1NVRlZUaXQzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTWGg1UkN4VlFVRlZlWGhGTEZkQlFXRXNWMEZETDBNc1QwRkJPRUkxTkVRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTWGg1UkN4VlFVRlZkWGhGTEZkQlFXRXNVMEZCVTJ4NVJTeEhRVU40UkN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYQkVjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkplSGxFTEZWQlFWVXllRVVzVTBGQlZ5eFhRVU0zUXl4UFFVRTBRemswUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlUzaEdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkplSGxFTEZWQlFWVnplRVVzWlVGQmFVSXNWMEZEYmtRc1QwRkJPRUo2TkVRc1JVRkJTelJ3UXl4UlFVRlJiME1zVjBGRGRrTjJha1FzUzBGQlMzRjNSU3hoUVZkWWFHZENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGSmVIbEVMRlZCUVZVd2VFVXNZMEZCWjBJc1YwRkRiRVFzVDBGQmJVTTNORVFzUlVGQlN6UndReXhSUVVGUmNVTXNWVUZETlVONGFrUXNTMEZCUzNGM1JTeGhRVkZZYUdkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKZUhsRUxGVkJRVlYzZUVVc1UwRkJWeXhUUVVGVGJubEZMRWRCUTNSRUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRnZSQ3h2UWtGQmIwSjJhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRkpia1FyUXl4RlFVRkxkRU1zVDBGQlR6SldMRTlCUVU4M1dDeEZRVUZUSzNwRUxFMUJRVTFETEU5QlFVOHlRaXhWUVZGNlF6VkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGSmVIbEVMRlZCUVZVMGVFVXNXVUZCWXl4WFFVTm9SQ3hQUVVGUGRIZEZMRXRCUVV0dGQwVXNZVUZCWVdwM1JTeE5RVUZOTEV0QlFVdG5NMElzVDBGWGRFTnROVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5tTEVsQlFVbDRlVVFzVlVGQlZUWjRSU3hMUVVGUExGTkJRVk5ETEVWQlFWbHVla1VzUlVGRFdtOTZSU3hIUVVNM1EwRXNTVUZEU0VFc1JVRkJiMElzZDBKQlIyTXNTMEZCYUVOQkxFVkJRV3RDY0d0RkxGRkJRVkVzUjBGRE5VSnlUU3hMUVVGTGFYZEZMRmRCUVZkUkxFVkJRVzlDTEVsQlFVMXdla1VzUjBGRk1VTXlReXhMUVVGTGFYZEZMRmRCUVZkUkxFVkJRVzlDY0hwRkxFZEJSM1JETWtNc1MwRkJTMnQzUlN4VFFVRlRUU3hKUVdGb1FtNW5RaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMllzU1VGQlNYaDVSQ3hWUVVGVlozbEZMRTlCUVZNc1UwRkJVME1zUlVGQllYUjZSU3hIUVVOcVJTeFBRVUZKTWtNc1MwRkJTM04zUlN4bFFVRnBRbXA2UlN4RlFVTnFRbk42UlN4RlFVRlpNM2RGTEV0QlFVdHZkMFVzYVVKQlJXcENMRThzYlVkRE9WRllMR2xDUVZsRExGZEJRVmxSTEVWQlFUWkNReXhIUVVGNlF5eFhRVVpWTEV0QlFVRkRMRzFDUVVGeFFpeE5RVWM1UWpsM1JTeExRVUZMTkhkRkxGTkJRVmRCTEVWQlEyaENOWGRGTEV0QlFVczJkMFVzV1VGQlkwRXNSVUZGYmtJM2QwVXNTMEZCU3pScVJTeE5RVUZSTEVsQlFVbHFSU3hUUVVGaExGTkJRVUZETEVkQlF6ZENMRVZCUVV0MVF5eFRRVUZYZGtNc1MwRkhha0pwVWl4RlFVRlphbWhDTEU5QlFWTXNWMEZCVFN4VFFVRkxiV2hDTEdsQ1FVTm9RMFlzUlVGQldXaG9RaXhSUVVGVkxGZEJRVTBzVTBGQlMyMW9RaXhyUWtGRGFrTklMRVZCUVZrdlowSXNVVUZCVlN4VFFVRkRiV2hDTEVkQlFYTkNMRk5CUVV0RExHVkJRV1ZFTEVsQlJXcEZUQ3hGUVVGVFR5d3lRa0ZCTmtJc1YwRkJUU3hQUVVGQmRuTkZMRkZCUVZGcGJrTXNTVUZCU1N0clF5eEZRVUZUVVN4eFFrRjNRMjVGTEU5QmNrTlJMRmxCUVVFMWJrSXNUVUZCVUN4WFFVTkRlSEJFTEV0QlFVdHhlRVVzY1VKQlFXZENNV1lzU1VGSFppeFpRVUZCTW1Zc1UwRkJVQ3hYUVVORExFOUJRVTkwZUVVc1MwRkJTekJ0UkN4UlFVZE9MRmxCUVVFMmNVSXNaVUZCVUN4WFFVTkRMRTlCUVU5MmVFVXNTMEZCUzNkNFJTeGpRVWRNTEZsQlFVRklMR2RDUVVGU0xGTkJRWGRDZWxBc1IwRkRia0kxYUVVc1MwRkJTekJ0UkN4VFFVZFVNVzFFTEV0QlFVc3diVVFzVVVGQlV5eEZRVU5rTVcxRUxFdEJRVXQzZUVVc1lVRkJaVFZRTEVWQlEzQkNOV2hGTEV0QlFVczBkMFVzVTBGQlUzQnVRaXhWUVVkUUxGbEJRVUYxYmtJc1kwRkJVaXhYUVVOREwzZEZMRXRCUVV0dGFVVXNZMEZCVTNoUkxFbEJSMUFzV1VGQlFYRm1MR1ZCUVZJc1YwRkRRMmg0UlN4TFFVRkxjWGhGTEdkQ1FVRm5RaXhKUVVGSmJIWkZMRTFCUVUwc2VVSkJSM2hDTEZsQlFVRXJkVVVzWlVGQlVpeFRRVUYxUWtRc1IwRkRkRUp5YzBVc1VVRkJVVU1zVFVGQlRTeG5Ra0ZCYVVKdmMwVXNSMEZETDBKcWVFVXNTMEZCUzNGNFJTeG5Ra0ZCWjBKS0xFVkJRVWR3YzBVc1VVRkhaaXhaUVVGQk1Fd3NUVUZCVml4VFFVRm5Rbk5uUkN4SFFVTm1OM2RFTEV0QlFVczJkMFVzV1VGQldXaHhSU3hMUVVGTFozRkVMRVZCUVVreFVTeHZRa0ZGTlVJc1JVRm9SVUVzUjBGQllTeEZRVUZCZDJ0Q0xHVXNaMnhDUTBaaUxGZEJRMEVzVDBGRFFTeFJRVTFCTEdOQlMwTXNWMEZCV1RoTkxFVkJRWGRDTVdRc1JVRkJaMEl5WkN4RlFVRTRRbkJUTEVkQlFXeEdMRTFCUTBNc1dVRkJUWFpNTEVWQlFWRXlaQ3hGUVVGUmNGTXNTVUZCU3l4TExFOUJTbkJDTEVWQlFVRnhVeXhwUWtGQk1rSXNSVUZETTBJc1JVRkJRVU1zYTBKQlFUUkNMRVZCU1c1RExFVkJRVXRJTEZGQlFWVkJMRVVzUlVGcFNtcENMRTlCZUVwclF5eFBRVlV4UWl4WlFVRkJkRzlDTEUxQlFWQXNVMEZCWVRCRExFZEJRMW9zU1VGQlRVTXNSVUZCVXl4SlFVRkpPWEpFTEV0QlFVdHpMMFFzUzBGQlMzSlpMR2xDUVVGcFFra3NVVUZCVVVNc1dVRkJWeXhKUVVGSmRHNUVMRXRCUVV0ekwwUXNTMEZCUzNKWkxHbENRVUZwUWswc1YwRkRNVVp6Y1VJc1JVRkJhVUlzU1VGQlNTeEZRVUZCYkdZc1pVRkRNMEpyWml4RlFVRmxMMk1zVlVGQlZXaEtMRWRCUTNwQ0syeENMRVZCUVdVNVl5eFpRVUZaSzJNc1JVRkJhVUpxYlVJc1NVRkZOVU1zU1VGRFF6ZHlSQ3hMUVVGTGVYaEZMRkZCUVZFdlRTeGhRVUZoTVd0RkxFdEJRVXNyZWtRc1QwRkJVVGhrTEVkQlEzUkRMRTFCUVU5NGVVVXNSMEZEVW5WR0xGRkJRVkZETEUxQlFVMHNkMEpCUVhsQ2VFWXNSMEZEZGtOWExFdEJRVXNyZUVVc2JVSkJRVzFDTVhsRkxFdEJTVzVDTEZsQlFVRnBjVVFzV1VGQlVDeFRRVUZ0UW0xWUxFZEJSV1JCTEVWQlEwaDZaMFVzUzBGQlN6ZzJReXhqUVVGaExFVkJRVTh5YkVJc1JVRkJVelV6UkN4TlFVRk5MRWxCUjNwRE4wa3NTMEZCU3pnMlF5eGpRVUZoTEU5QlFVODJWeXhKUVVkdVFpeFpRVUZCY0Vrc1YwRkJVQ3hYUVVOTmRuQkVMRXRCUVV0ekwwUXNTMEZCUzNKWkxHbENRVUZwUW0xRExHVkJSMmhEY0hCRUxFdEJRVXM0TmtNc1kwRkJZU3hQUVVGTk5sY3NTVUZIYWtJc1dVRkJRVGRYTEdGQlFWSXNVMEZCY1VKM1lTeEZRVUZqYlV3c1IwRkRiRU1zU1VGRFF5eEpRVUZMUVN4SFFVRXJRaXhIUVVGdVFrRXNSVUZCVTNKb1JTeFBRVkY2UWl4UFFWQk5OSGxGTEVWQlFWTXNTVUZCU1N4RlFVRkJlbVlzWlVGRFdtRXNVVUZCVHl4SlFVTlNObVVzUlVGQmFVSXNTVUZCU1N4RlFVRkJjbVlzWjBKQlExb3lReXhuUWtGQlowSnJUQ3hIUVVNdlFuZFNMRVZCUVdWNll5eHBRa0ZCYVVKM1l5eEhRVU5vUTBNc1JVRkJaWGhqTEU5QlFVOUlMRkZCUTNSQ2RERkVMRXRCUVV0NWVFVXNVVUZCVVRNeVFpeGhRVUZoT1RaRExFdEJRVXNyZWtRc1QwRkJVV3RsTEVkQlNYaERMRXRCUVRKQ0xFbEJRWEJDZUZJc1JVRkJVM0pvUlN4UlFVRmpMRU5CUXpkQ0xFbEJRMDAwZVVVc1JVRk5RVU1zUlVGUVFVTXNSVUZCWlRGNFJTeExRVUZMUlN4SlFVRkpLeTlFTEVWQlFWTnlhRVVzVDBGNFJFZ3NVVUY1UkRsQ05IbEZMRVZCUVZNc1NVRkJTU3hGUVVGQmVtWXNaVUZEV2xrc1VVRkJVWE5PTEVWQlFWTTFNMFFzVFVGQlRTeEZRVUZIY1hCRkxFbEJSVlFzUzBGRWVFSjZVaXhGUVVGWFFTeEZRVUZUTlRORUxFMUJRVTF4Y0VVc1NVRkRZamw1UlN4UlFVTmFOSGxGTEVWQlFVODFaU3hSUVVGUExFbEJSVlEyWlN4RlFVRnBRaXhKUVVGSkxFVkJRVUZ5Wml4blFrRkRXakpETEdkQ1FVRm5RbXRNTEVkQlF5OUNkMUlzUlVGQlpYcGpMR2xDUVVGcFFuZGpMRWRCUTJoRFF5eEZRVUZsZUdNc1QwRkJUMGdzUjBGRGRFSjBNVVFzUzBGQlMzbDRSU3hSUVVGUk16SkNMR0ZCUVdFNU5rTXNTMEZCU3l0NlJDeFBRVUZSYTJVc1NVRkZka01zVFVGQlR6VjVSU3hIUVVOU2RVWXNVVUZCVVVNc1RVRkJUU3gzUWtGQmVVSjRSaXhIUVVOMlExY3NTMEZCU3l0NFJTeHRRa0ZCYlVJeGVVVXNTMEZKYmtJc1dVRkJRV3RzUlN4WFFVRlFMRk5CUVd0Q1NDeEhRVU5xUWl4UFFVRlJRU3hGUVVGTGRGRXNaVUZEV2l4TFFVRkxMRVZCUVVFelNDeFRRVUZUZDBnc1UwRkJVMFVzVVVGRGRFSXNSMEZCU1RkNlJDeExRVUZMTW5oRkxHZENRVVZTTEZsQlJFRXplRVVzUzBGQlN5dDRSU3h0UWtGQmJVSXNTVUZCU1RWMlJTeE5RVUZOTERaQ1FVZHVReXhIUVVGSmJrTXNTMEZCU3pSNFJTeHBRa0ZGVWl4WlFVUkJOWGhGTEV0QlFVc3JlRVVzYlVKQlFXMUNMRWxCUVVrMWRrVXNUVUZCVFN4dlEwRkhia051UXl4TFFVRkxiWGxGTEdWQlFXVXZUaXhGUVVGTGJsRXNZMEZEZWtJc1RVRkRSQ3hMUVVGTExFVkJRVUU1U0N4VFFVRlRkMGdzVTBGQlUzQTNReXhSUVVOMFFpeEpRVUZMZGxrc1MwRkJTeko0UlN4blFrRkZWQ3haUVVSQk0zaEZMRXRCUVVzcmVFVXNiVUpCUVcxQ0xFbEJRVWsxZGtVc1RVRkJUU3cyUWtGSGJrTXNSMEZCU1c1RExFdEJRVXMwZUVVc2FVSkJSVklzV1VGRVFUVjRSU3hMUVVGTEszaEZMRzFDUVVGdFFpeEpRVUZKTlhaRkxFMUJRVTBzYjBOQlIyNURia01zUzBGQlMyOTVSU3hsUVVGbGFFOHNSVUZCUzNaVExHTkJRM3BDTEUxQlEwUXNTMEZCU3l4RlFVRkJNVVlzVTBGQlUzZElMRk5CUVZNNVN5eFRRVU4wUWpkdlJDeExRVUZMY1hsRkxHZENRVUZuUW1wUExFVkJRVXQwVHl4bFFVTXhRaXhOUVVORUxGRkJRME5zZUVRc1VVRkJVVU1zVFVGQlRTeDNRa0ZCZVVKMUwwUXNSVUZCUzNSUkxHbENRVXQyUXl4WlFVRkJjV1VzWlVGQlVpeFRRVUYxUW5adFFpeEhRVU4wUWpWeVJDeExRVUZMTW5oRkxHbENRVUZyUWl4RlFVTjJRak40UlN4TFFVRkxjeTlFTEV0QlFVczVXQ3hWUVVGVk9IRkNMRVZCUVdVeGJVSXNSVUZCVVRoSkxHVkJRV2RDTEUxQlIzQkVMRmxCUVVFd1pDeGxRVUZTTEZOQlFYVkNkbWhDTEVkQlEzUkNMRWxCUVUwd2FFSXNSVUZCVXl4WlFVRk5ReXh4UWtGQmIwSXNWVUZCUXpOb1FpeEZRVUZKZDBVc2IwSkJRemxETEVkQlFVdHJaQ3hGUVVGTUxFTkJSMEVzU1VGQlRVVXNSVUZCVVN4SlFVRkpkbXRETEZsQlFWbHhhME1zUlVGQlQyNTZSU3hQUVVGVExFZEJRemxETEVsQlFVazBkVVFzVTBGQlUzbHJRaXhGUVVGUExFVkJRVWNzUjBGQlIzaHBRaXhWUVVGVkxFVkJRVWR6YVVJc1JVRkJUMjU2UlN4UlFVRlJMRWRCUTNSRUxFbEJRVWs0Y2tNc1YwRkJWM1Z1UXl4RlFVRlBMRWRCUVVjM0swUXNTVUZCU1RJclJDeEhRVU0zUW5aNVJTeExRVUZMY3k5RUxFdEJRVXMxV0N4UlFVRlJMRWxCUVVsNFl5eFhRVUZYZFc1RExFMUJSekZDTEZsQlFVRktMR2RDUVVGU0xGTkJRWGRDZEhCQ0xFZEJRM1pDTDI5RUxFdEJRVXMwZUVVc2EwSkJRVzFDTEVWQlEzaENMRWxCUTBsakxFVkJRVmwyYVVJc1JVRkVWblpGTEVWQlFWVXdiVUlzUlVGQlpYWndRaXhGUVVGVE1rd3NaVUZGYkVNMWRFUXNSVUZCVTJscFJDeEZRVUZUYlU0c1dVRkRjRUp3ZGtRc1IwRkRTRFJ5UlN4RlFVRmhOWEpGTEVWQlFVODRjVVFzVlVGRGNFSjZRaXhGUVVGblFuSndSQ3hGUVVGUEszRkVMR0ZCUTNaQ2FrY3NSVUZCVVdnMFF5eEpRVUZKTEdOQlFXVXNSMEZCUnpsTkxFVkJRVTg0Y1VRc1owSkJRMlpFTEVsQlFXeENlRUlzUjBGRFNIWkZMRVZCUVZGb05FTXNTVUZCU1N4bFFVRm5RamxOTEVWQlFVOHJjVVFzWjBKQlIzQkRObWRDTEVWQlFXRXNSVUZEWWpsdFFpeEZRVUZSYURSRExFbEJRVWtzWTBGQlpTeExRVU16UW5VNFF5eEZRVUZuUWl4SlFVZHFRaXhKUVVGTmQybENMRVZCYVVOU0xGTkJRWGRDTDIxQ0xFZEJRM1pDTEVsQlFVbG5ia0lzUlVGQlZ5eEhRVWxtTEU5QlNFRm9ia0lzUlVGQlVXNDFReXhUUVVGUkxGTkJRVU53VlN4RlFVRkxOR2hFTEVkQlEzSkNNbmxDTEVkQlFXVjJNRVVzUlVGQlJ5eExRVUZMTkdoRUxFVkJRVTk2TlVNc1MwRkJTeXhOUVVGTExGVkJSV3hEY1c1RUxFVkJRVmtyYTBJc1IwRjBRMFZETEVOQlFXVnFia0lzUjBGRE4wSTJiVUlzUlVGQlVTeEpRVUZKZG10RExGbEJRVmw1YTBNc1JVRkJXWFo2UlN4UFFVRlRMRWRCUTI1RUxFbEJRVWswZFVRc1UwRkJVM2xyUWl4RlFVRlBMRVZCUVVjc1IwRkJSMHNzVTBGQlV5eEZRVUZITEV0QlEzUkRMRWxCUVVrNWEwSXNVMEZCVTNsclFpeEZRVUZQTEVWQlFVY3NSMEZCUjNocFFpeFZRVUZWTEVWQlFVY3dhVUlzUlVGQldYWjZSU3hSUVVGUkxFZEJRek5FTEVsQlFVazRja01zVjBGQlYzVnVReXhGUVVGUExFZEJRVWMzSzBRc1NVRkJTU3NyUkN4SFFVTTNRak41UlN4TFFVRkxjeTlFTEV0QlFVczFXQ3hSUVVGUkxFbEJRVWw0WXl4WFFVRlhkVzVETEVsQlEyUXNTVUZCWmtNc1JVRkpTakY1UlN4TFFVRkxLM2hGTEcxQ1FVRnRRaXhKUVVGSk5YWkZMRTFCUVUwc1VVRkJVWFYzUlN4RlFVRlZMRmxCUVZsMmFVSXNTVUZJTDBSdWQwUXNTMEZCU3l0NFJTeHpRa0ZMVWl4RlFYaEtRU3hEUVVGclF5eEZRVUZCWjBJc1dVRXlTbXhETEZOQlFXZENiR3hDTEVWQlFWazNha01zUjBGRk0wSXNTVUZFUVN4SlFWYzRRbWR3UkN4RlFVVkliazRzUlVGaWNrSnZUaXhGUVVGVkxFbEJRVWt2YmtNc1YwRkJWMnhvUWl4RlFVRk5OWEZDTEZGQlF6VkNkRU1zUlVGQlNTeEZRVUZIUVN4SlFVRk5hM1JDTEVWQlFVMDFjVUlzVTBGQlZYUkRMRVZCUVVjc1EwRkRlRU1zU1VGQlRXOHlSU3hGUVVGWGJIQkVMRVZCUVUxMFRTeFhRVUZYTldkQ0xFZEJRMnhETEV0QlVYVkVMRXRCUVRGQ2F6SkZMRVZCUlVodVRpeEZRVlpHY1U0c1NVRlJLME1zUzBGQlZFWXNSMEZCZVVJc1MwRkJWRUVzUjBGSGVrTnVUaXhIUVVGUExFbEJRVkZCTEVkQlFVOHNTMEZXTVVRc1RVRkJUU3hKUVVGSk1XcEZMRTFCUVUwc2JVTkJSV3BDT0hkRkxFVkJRVkZ1TWtVc1IwRkJTMjh5UlN4RlFVVmtMRTlCUVU5RUxFVkJjRXRMTEVWQlFVRjZUeXhsUVRKS1lpeG5Ra0V5UWtFc1NVRkJUWE5PTEVWQlFXMUNMRk5CUVVOcWJVSXNSMEZEZWtJc1IwRkJTMEVzUlVGQlRDeERRVWRCTEVsQlFVMHdiVUlzUlVGQlV5eEpRVUZKTEVWQlFVRndjMElzVTBGRFlqaGFMRVZCUVV0elV5eEZRVUZQTTJJc1YwRk5iRUlzUjBGTVFTOUxMRVZCUVZOd05VTXNVMEZCVVN4VFFVRkRjRlVzUlVGQlN6Um9SQ3hIUVVOMFFpeEpRVUZOYTNwQ0xFVkJRVlVzU1VGQlNTeEZRVUZCYm1kQ0xGRkJRM0JDYldkQ0xFVkJRVkV4WXl4alFVRmplRmNzUjBGRGRFSm5aMElzUlVGQlIzSnpSQ3hKUVVGSmRsWXNSVUZCU3pnd1JTeE5RVVY1UWl4SlFVRnNRMW9zUlVGQlR6TmlMRmRCUVZkb1dDeFpRVWQwUWl4UFFVRlBNbmxDTEVsQlIwWkVMRVZCUVdsQ0xGTkJRVU42YlVJc1IwRkRka0lzU1VGQlRUQnRRaXhGUVVGVExFbEJRVWtzUlVGQlFXeHFRaXhMUVVGTGJFb3NVMEZOZUVJc1QwRk1TVEJHTEVkQlEwaEJMRVZCUVZNclN5eFhRVUZYYm10RUxGTkJRVkVzVTBGQlF6Sm5SU3hGUVVGWkx6QkZMRWRCUTNoRExFOUJRVUZyTUVVc1JVRkJUM2h2UWl4UFFVRlBNWEpFTEVWQlFVc3JNRVVzUlVGQlRUVmpMRzlDUVVkd1FpdGlMRWtzYTBkRGJFNVNMRWxCUlVFc1lVRlRReXhYUVVGWmVHVXNSVUZCWjBJeVpDeEZRVUU0UW5CVExFZEJUR3hFTEV0QlFVRTFXU3hSUVVGclFpeEZRVU5VTEV0QlFVRXljMElzVlVGQkswSXNSMEZEZUVNc1MwRkJRVU1zWTBGQlowSXNSVUZKZGtKMGVrVXNTMEZCU3l0NlJDeFBRVUZUUVN4RlFVTmtMM3BFTEV0QlFVc3dlRVVzVDBGQlUwRXNSVUZEWkRGNFJTeExRVUZMY3k5RUxFdEJRVTlCTEVWQk5rTmtMRTlCTVVOUkxGbEJRVUUzVml4UFFVRlFMRmRCUTB0NmNFUXNTMEZCUzNNdlJDeExRVUZMTVhGRUxFOUJRMkpvVVN4UlFVRlJaMUVzVFVGQlRTeFhRVWxPTEZsQlFVRnRPVVFzYlVKQlFWWXNVMEZCTmtKdVVTeEhRVU40UWpWb1JTeExRVUZMTUcxRUxGTkJSMVF4YlVRc1MwRkJTekJ0UkN4UlFVRlRMRVZCUTJReGJVUXNTMEZCU3pSb1JTeEpRVUZOUVN4RlFVTllOV2hGTEV0QlFVdDVjRVFzVTBGRFRIcHdSQ3hMUVVGTE1IaEZMRTlCUVU4eGVFVXNTMEZCU3l0NlJDeFBRVUZQVEN4VFFVVjRRakY2UkN4TFFVRkxjeTlFTEV0QlFVc3hXQ3hOUVVGTk5XNUVMRXRCUVVzMGFFVXNUMEZIV2l4WlFVRkJORkVzY1VKQlFWWXNVMEZCSzBJemFFSXNSMEZET1VJc1NVRkJUWG95UWl4RlFVRlBlVEpDTEVWQlFVbDNReXhsUVVOcVFpeEhRVUZKYWpWQ0xFVkJRVXRvTjBJc1QwRkJVMWtzUzBGQlMzTjZSU3hqUVhKRFNpeEhRVUZMTEVkQmVVTjJRaXhQUVVoQmRIcEZMRXRCUVV0eGVrVXNWVUZCVldvd1JTeFBRVUZUTEVWQlEzaENXU3hMUVVGTGMzcEZMR05CUVdkQ0xFOUJRM0pDTVhWRkxGRkJRVkZETEUxQlFVMHNjVVJCUzJZc1IwRkdRVGRGTEV0QlFVdHhla1VzVlVGQlZXNXhSU3hMUVVGTGEzaENMRWRCUTNCQ2NEWkNMRXRCUVV0emVrVXNaVUZCYVVKc05VTXNSVUZCUzJnM1FpeFBRVU4yUW5sNFJDeEZRVUZKZVVNc1UwRkJWU3hEUVVkcVFpeEpRVVpCTEVsQlFVMHNSVUZCVHl4SlFVRkpjRzlDTEZkQlFWZHNja01zUzBGQlMzTjZSU3hsUVVNM1FuWnNRaXhGUVVGWExFVkJRMDVxZUVRc1JVRkJTU3hGUVVGSFFTeEZRVUZKYTBRc1MwRkJTM0Y2UlN4VlFVRlZhakJGTEU5QlFWRjBReXhKUVVGTExFTkJReTlETEVsQlFVMTVNa1VzUlVGQlkzWjZSU3hMUVVGTGNYcEZMRlZCUVZWMk1rVXNSMEZEYmtNc1JVRkJTemhYTEVsQlFVa3lMMFFzUlVGQllYaHNRaXhIUVVOMFFrRXNSMEZCV1hkc1FpeEZRVUZaYmpCRkxFOUJTWHBDTEU5QlJrRlpMRXRCUVV0eGVrVXNWVUZCVldvd1JTeFBRVUZUTEVWQlEzaENXU3hMUVVGTGMzcEZMR05CUVdkQ0xFVkJRMlFzU1VGSlZpeEZRWHBFUVN4SFFVRmhMRVZCUVVGUUxHTXNaMEpEVDJJc1NVRkRTV3A1UlN4RlFVUlBMRVZCUVZFc1IwRkZabVlzUlVGQlZTeFhRVU5hTEU5QlFVbERMRXRCUVdWQkxFdEJRMGNzYjBKQlFWaDBSQ3hQUVVGcFEwRXNXVUZEZEVJc1NVRkJXSEZFTEVWQlFXbERRU3hGUVVONFFpeHZRa0ZCVkdkQ0xFdEJRU3RDUVN4TFFVTnVRMmRKTEZOQlFWTXNZMEZCVkVFc1NVRkRVRGxNTEV0QlFVc3NUVUZGVURaRUxFVkJRVXMwU2l4aFFVRmhMSGRDUVVGNVFpeExRVUZOTTBzc1IwRkpha1J6ZDBRc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1hCSkxFdEJRVThzUTBGRGRFSkRMRWRCUVVrc1JVRkRTbTl5UWl4VlFVRlhMRVZCUTFneFVpeFJRVUZUTEVWQlExUXlVaXhwUWtGQmEwSXNSVUZEYkVKRExHdENRVUZ0UWl4RlFVTnVRa01zVlVGQlZ5eEZRVU5ZUXl4bFFVRm5RaXhGUVVOb1FrTXNhMEpCUVcxQ0xFVkJRMjVDUXl4blFrRkJhVUlzUjBGRGFrSkRMRzFDUVVGdlFpeEZRVU53UWtNc2IwSkJRWEZDTEVWQlEzSkNReXhSUVVGVExFZEJRMVJETEdGQlFXTXNSMEZEWkVNc1kwRkJaU3hIUVVObVF5eFRRVUZWTEVkQlExWkRMRmxCUVdFc1IwRkRZa01zVlVGQlZ5eEpRVWRpZUhwRkxFVkJRVXQwUXl4UFFVRlBNbFlzVDBGQlR6ZFlMRVZCUVZNcmVrUXNUVUZCVFVNc1QwRkJUME1zVFN4blFrTnNRM3BETEVsQlFVbG9OVU1zUlVGQlR5eEZRVUZSTEVkQlEyWjZWeXhGUVVGUGVWY3NSVUZEVUhoWUxFVkJRVlVzVjBGRFdpeFBRVUZKUXl4TFFVRmxRU3hMUVVOSExHOUNRVUZZZEVRc1QwRkJhVU5CTEZsQlEzUkNMRWxCUVZoeFJDeEZRVUZwUTBFc1JVRkRlRUlzYjBKQlFWUm5RaXhMUVVFclFrRXNTMEZEYmtOblNTeFRRVUZUTEdOQlFWUkJMRWxCUTFBNVRDeExRVUZMTEUxQlJWQTJSQ3hGUVVGTE5Fb3NZVUZCWVN4eFEwRkJjME1zUzBGQlRUTkxMRWRCUXpsRVpTeEZRVUZMTkVvc1lVRkJZU3gzUWtGQmVVSXNTMEZCVFROTExFZEJRMnBFWlN4RlFVRkxORW9zWVVGQllTdzBRa0ZCTmtJc1MwRkJUVE5MTEVkQlEzSkVaU3hGUVVGTE5Fb3NZVUZCWVN4M1EwRkJlVU1zUzBGQlRUTkxMRWRCVjJwRmMzZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphV01zUzBGQlR5eFRRVUZUT1dwQ0xFZEJReTlDYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSFNpeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNXbGpMRXRCUVVzM2FrSXNaMEpCUVdsQ0xFOUJSWGhHTlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJUV2c1UkN4RlFVRkxOSEJETEZOQlEzUkRjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCUzJvNVJDeFpRVUZqTEhsQ1FWbDBReXMwUXl4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJWeXhUUVVGVEwwZ3NSMEZEYmtOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVZEtMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VZ3NaMEpCUVdsQ1RDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVXpsR0xHVkJSWFJJTlhoRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlZhbWhFTEVWQlFVczBjRU1zVTBGRE1VTnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk5zYUVRc1dVRkJZeXcyUWtGWk1VTXJORU1zVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJiMElzVTBGQlV5OXFRaXhIUVVNMVEydzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYTJNc2EwSkJRVzFDYWpsRUxFVkJRVXMwY0VNc1UwRkRia1J5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHJZeXhyUWtGQmEwSnNPVVFzV1VGQll5eHpRMEZSYmtRck5FTXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE4ycENMR2RDUVVGclFpeERRVUZETEVkQlNYSkRialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE56RkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGJFUXNUMEZCVDA0c1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscFl5eExRVUZMTVRORUxGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhOMFJ4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscFl5eExRVUZMTVRORUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZWtRc1NVRkJUME1zUlVGQlRTeERRVU5ZTW1wQ0xGVkJRVmRzT1VRc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVrMmFrSXNaVUZEZWtOeWEwSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNek4wTXNVMEZCVlN0NlF5eEhRVU53UXl0cVFpdzJRa0ZCT0VKd09VUXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhIUVVGSExFbEJUV2hHTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCUzI0d1FpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEycEVMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVNdlFpeFBRVUZQYkd0Q0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCUzJ4cVFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZG9SVGhGTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJTMnhxUWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRMmhGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVTnFRMnBPTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZOdVNDdzJRa0ZEYmtSU0xFVkJRVWtyYWtJc1UwRkJVemN5UlN4SFFVTmlMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkpaMnRDTEdkRFFVRm5Remt5UlN4SFFVTndReXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJTemN4UlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOb1JDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJTemRwUWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTNRMEVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphV01zUzBGQlN6ZHBRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRMmhGTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hIUVVOU2NubEVMRVZCUVVscFZDeEZRVUZSYldsRkxHZENRVU5PZERGRkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVWNzTUVKQlJ6bENjSGxFTEVWQlFVbHBWQ3hGUVVGUmRXbEZMRzlEUVVWV2NtcENMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zU1VGVlRpdDNSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV2xqTEV0QlFVczNNVVVzVlVGQlZXY3lSU3hoUVVGbExGZEJRemRETEU5QlEwVnVPVVFzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZVc1NVRlJNVVZ1U1N4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1dsakxFdEJRVXMzTVVVc1ZVRkJWWEV5UlN4aFFVRmxMRk5CUVZOb00wVXNSMEZEZEVRc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWTjJSSE41UkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1dsakxFdEJRVXMzTVVVc1ZVRkJWV3N5UlN4VFFVRlhMRk5CUVZNM2FVSXNSVUZCVjBNc1IwRkROMFFzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlZYaEhMRWxCVVM5R00wSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE56RkZMRlZCUVZWek1rVXNaVUZCYVVJc1YwRkRMME1zVDBGQlQyZ3hSU3hMUVVGTEt6QkZMR0ZCUVdFc1MwRlJNMEl4YTBJc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscFl5eExRVUZMTnpGRkxGVkJRVlZ2TWtVc1owTkJRV3RETEZkQlEyaEZMRTlCUVN0Q2RqbEVMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVkQlFVY3NTVUZSYkVaeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE56RkZMRlZCUVZWdE1rVXNaME5CUVd0RExGTkJRVk01TWtVc1IwRkRla1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVd0RUxITkNRVUZ6UW5KclJDeExRVUZOTEVWQlFVZHFReXhKUVZWeVJITjVSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6bElMR2RDUVVGclFpeERRVUZETEVsQlZUZERUQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6bEdMR0ZCUVdVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4SlFVdHlSSEpETEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRlV01zV1VGQll5eERRVU4wUTBNc1owSkJRV2xDTEVWQlEycENReXhKUVVGTExFVkJRMHhETEVsQlFVc3NSVUZEVEVNc1MwRkJUU3hGUVVOT1F5eFBRVUZSTEVWQlExSkRMRTFCUVU4c1JVRkRVRU1zVDBGQlVTeEhRVTFXYm14Q0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1RWRUxGVkJRVlVyTWtVc1pVRkJhVUlzVjBGRGJrUXNUMEZCTkVSc0swUXNSVUZCU3pSd1F5eFJRVUZSYzBJc2FVSkJRV2xDZW1sRUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01Uml4aFFVRmhMRXRCUzNKSmJqZERMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01TlVRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU4wUkN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6TTNReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdwRmNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE16ZERMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE4wUXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdEUnJRaXhUUVVGVmJpdEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UW1sT0xFVkJRVXNzUlVGQlJ5eEpRVU51Ukd4NlJDeEpRVUZMTkZvc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlF6bERPR3RDTEVsQlFVdHdLMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUXpsREsydENMRXRCUVUxeUswUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFbEJReTlEWjJ4Q0xGVkJRVmQwSzBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlEzQkVhV3hDTEUxQlFVOTJLMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUTJoRWEyeENMRkZCUVZONk1rVXNSVUZCU1hWNFJDeEZRVUZKYld4Q0xHTkJRV2RDTTJ4Q0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmEyTXNhMEpCUVd0Q016TkVMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNSMEZET1VaNWMwUXNTMEZCVFhnd1F5eEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1NVRkRMME52YkVJc1lVRkJZekVyUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFZEJRVWtzU1VGRGVFUnhiRUlzZFVKQlFYZENNeXRFTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKYzJ4Q0xEUkNRVU4wUkRsc1FpeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVXpNM1F5eFRRVUZWSzNwRExFbEJUWFJETEU5QlNFbEJMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUY0Zrc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOeVJDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVU12UWl4UFFVRlBia2tzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTnVTQ3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmR3UlRoRkxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUYmtnc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU53UlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWwxYkVJc1dVRkJXWEkwUlN4SFFVTm9RaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTWGRzUWl4UFFVRlBkRFJGTEVkQlExZ3NUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDViRUlzVDBGQlQzWTBSU3hIUVVOWUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSk1HeENMRkZCUVZGNE5FVXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1RKc1FpeFZRVUZWZWpSRkxFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWswYkVJc1UwRkJVekUwUlN4SFFVTmlMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkRha05xY0VJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRbTVxUWl3MlFrRkROVVJTTEVWQlFVazJiRUlzVlVGQlZUTTBSU3hIUVVOa0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSk9HeENMRkZCUVZFMU5FVXNSMEZEV2l4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1N0c1FpeG5Ra0ZCWjBJM05FVXNSMEZEY0VJc1RVRkRSaXhMUVVGTExFZEJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZEYWtOcVRpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRia2dzTmtKQlEyNUVVaXhGUVVGSloyMUNMSE5DUVVGelFqazBSU3hIUVVNeFFpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRM0JFTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNVJ5eDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU5xUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVWNzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU53UlN4SlFVRkpibmxFTEU5QlFVbHhlVVFzUjBGRFVuSjVSQ3hGUVVGSmFWUXNSVUZCVVhWclJTeGxRVU5PTVRORkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVWGxxUlN4alFVVldkbXRDTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUWpscFFpd3dRa0ZIZGtOd2VVUXNSVUZCU1dsVUxFVkJRVkYzYTBVc1YwRkRUak16UlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVWGxyUlN4dFFrRkRUalV6UlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUjBGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVFJxUlN3MlFrRkRUaTh5UlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVkQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6bEhMREJDUVZWb1EzSkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWdk5FVXNXVUZCWXl4WFFVTm9SQ3hQUVVFNFFuWXZSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVd00wVXNXVUZCWXl4VFFVRlRjalJGTEVkQlEzcEVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSY0VSemVVUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlhVMFJTeFBRVUZUTEZkQlF6TkRMRTlCUVRoQ01TOUVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRJelJTeFBRVUZUTEZOQlFWTjBORVVzUjBGRGNFUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXphMFFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1VZc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoR2MzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWM05FVXNVMEZCVnl4WFFVTTNReXhQUVVGUE15OUVMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4UlFVRkpaaXhKUVZGNFJuUkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWNU5FVXNUMEZCVXl4WFFVTXpReXhQUVVGNVF5eE5RVUZzUXpVdlJDeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRBMFJTeFBRVUZUTEZkQlF6TkRMRTlCUVRoQ055OUVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRRelJTeFBRVUZUTEZOQlFWTjJORVVzUjBGRGNFUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXphMFFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1VZc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoR2MzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVeU5FVXNVMEZCVnl4WFFVTTNReXhQUVVGUE9TOUVMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4UlFVRkpaaXhKUVZGNFJuUkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVME5FVXNUMEZCVXl4WFFVTXpReXhQUVVGNVF5eE5RVUZzUXk4dlJDeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRZMFJTeFJRVUZWTEZkQlF6VkRMRTlCUVRoQ2FHZEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRZelJTeFJRVUZWTEZOQlFWTjRORVVzUjBGRGNrUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXphMFFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1VZc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoR2MzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVNE5FVXNWVUZCV1N4WFFVTTVReXhQUVVGUGFtZEZMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4UlFVRkpaaXhKUVZGNFJuUkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVck5FVXNVVUZCVlN4WFFVTTFReXhQUVVGNVF5eE5RVUZzUTJ4blJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVldjMVJTeFZRVUZaTEZkQlF6bERMRTlCUVRoQ2JtZEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlRnelJTeFZRVUZaTEZOQlFWTjZORVVzUjBGRGRrUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXphMFFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1VZc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoR2MzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWcE5VVXNXVUZCWXl4WFFVTm9SQ3hQUVVGUGNHZEZMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4UlFVRkpaaXhKUVZGNFJuUkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWck5VVXNWVUZCV1N4WFFVTTVReXhQUVVGNVF5eE5RVUZzUTNKblJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlcwMVJTeFRRVUZYTEZkQlF6ZERMRTlCUVRoQ2RHZEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlNzelJTeFRRVUZYTEZOQlFWTXhORVVzUjBGRGRFUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVWGRFTEdOQlFXTXphMFFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1VZc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoR2MzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWdk5VVXNWMEZCWVN4WFFVTXZReXhQUVVGUGRtZEZMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4UlFVRkpaaXhKUVZGNFJuUkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWeE5VVXNVMEZCVnl4WFFVTTNReXhQUVVGNVF5eE5RVUZzUTNoblJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlhNelJTeFZRVUZaTEZkQlF6bERMRTlCUTBWNkswUXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYlVJc1NVRlJNMFZ1YTBJc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01TlVRc1ZVRkJWV2MwUlN4VlFVRlpMRk5CUVZNek5FVXNSMEZEZGtRc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUWkVMSEZDUVVGeFFtaHNSQ3hMUVVGTkxFVkJRVWR4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01Uml4aFFVRmhMRWRCUVVrek1FUXNTVUZSTDBaemVVUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlhNMVJTeFpRVUZqTEZkQlEyaEVMRTlCUVU5b05FVXNTMEZCU3pBeVJTeGxRVUZWTDJ0Q0xFbEJVWGhDZEVJc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01TlVRc1ZVRkJWWFUxUlN4VlFVRlpMRmRCUXpsRExFOUJRWGxETEUxQlFXeERNV2RGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemsxUkN4VlFVRlZjVFJGTEZGQlFWVXNWMEZETlVNc1QwRkJPRUo0TDBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemsxUkN4VlFVRlZhVFJGTEZGQlFWVXNVMEZCVXpVMFJTeEhRVU55UkN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYQkVjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnpORVVzWjBKQlFXdENMRmRCUTNCRUxFOUJRVGhDZWk5RUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRWRCUVVrc1MwRlJNMFZ4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01TlVRc1ZVRkJWV3MwUlN4blFrRkJhMElzVTBGQlV6YzBSU3hIUVVNM1JDeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSMEZCU1dwRExFbEJVWEpFYzNsRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1RWRUxGVkJRVlY1TTBVc01FSkJRVFJDTEZkQlF6bEVMRTlCUTBVMUswUXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVlVzUzBGUk1VVnVTU3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6azFSQ3hWUVVGVmR6VkZMREJDUVVFMFFpeFRRVUZUYmpaRkxFZEJRM1pGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4SFFVRkpha01zU1VGVGVFUnplVVFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZXMDBSU3h6UWtGQmQwSXNVMEZCVXpsclFpeEZRVUZYUXl4SFFVTTVSU3hQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVkQlFVa3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVmVFY3NTVUZSYUVjelFpeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVXprMVJDeFZRVUZWZVRWRkxEUkNRVUU0UWl4WFFVTm9SU3hQUVVGUGJqUkZMRXRCUVV0ck5FVXNNRUpCUVRCQ0xFdEJUM0JETTJkRkxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEk1TVVVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU12UkN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRak16UkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllURkZjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYTJNc2EwSkJRV3RDTXpORUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZEVVc1NVRkJUME1zUlVGQlRTeERRVU5ZYzI1Q0xFdEJRVTAzWjBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlF5OURjR2hFTEV0QlFVMDRTQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTMEZOYWtRc1QwRklTVVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHJZeXhyUWtGQmEwSndNRUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU01UkN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYTJNc2EwSkJReTlDTEU5QlFVOXVhMElzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEp1YWtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWE4wVTRSU3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRbTVxUWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRemRGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTWGR1UWl4UlFVRlJkRFpGTEVkQlExb3NUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDVia0lzVVVGQlVYWTJSU3hIUVVOYUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHJZeXhyUWtGQmEwSTVNVVVzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETjBRc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRamxwUWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTXhSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphMk1zYTBKQlFXdENPV2xDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETjBVc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZGbmJVVXNWMEZEVG00MVJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVdsdFJTeFhRVU5PY0RWRkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVsQlZVNHJkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEk1TVVVc1ZVRkJWVFkxUlN4UlFVRlZMRmRCUTNKRUxFOUJRVGhDYUdoRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYTBJNU1VVXNWVUZCVlRJMVJTeFJRVUZWTEZOQlFWTjBOa1VzUjBGRE9VUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVzFFTEhGQ1FVRnhRblJyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkZ3UkhONVJDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNXdGpMR3RDUVVGclFqa3hSU3hWUVVGVk9EVkZMRkZCUVZVc1YwRkRja1FzVDBGQk9FSnFhRVVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRamt4UlN4VlFVRlZORFZGTEZGQlFWVXNVMEZCVTNZMlJTeEhRVU01UkN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlNYQkVLME1zUlVGQlMzUkRMRTlCUVU4eVZpeFBRVUZQTjFnc1JVRkJVeXQ2UkN4TlFVRk5ReXhQUVVGUFowa3NUU3huUWtOMEswSjZReXhKUVVGSkwyZEVMRVZCUVU4c1JVRkJVU3hIUVVObWVsY3NSVUZCVDNsWExFVkJRMUI0V0N4RlFVRlRaMG9zVTBGQlV5eGpRVUZVUVN4SFFVVmlha2tzUlVGQlN6UktMR0ZCUVdFc2QwTkJRWGxETEV0QlFVMHpTeXhIUVVOcVJXVXNSVUZCU3pSS0xHRkJRV0VzZFVSQlFYZEVMRXRCUVUwelN5eEhRVU5vUm1Vc1JVRkJTelJLTEdGQlFXRXNjMFJCUVhWRUxFdEJRVTB6U3l4SFFVTXZSV1VzUlVGQlN6UktMR0ZCUVdFc05FTkJRVFpETEV0QlFVMHpTeXhIUVVOeVJXVXNSVUZCU3pSS0xHRkJRV0VzT0VSQlFTdEVMRXRCUVUwelN5eEhRVU4yUm1Vc1JVRkJTelJLTEdGQlFXRXNiME5CUVhGRExFdEJRVTB6U3l4SFFVTTNSR1VzUlVGQlN6UktMR0ZCUVdFc2FVUkJRV3RFTEV0QlFVMHpTeXhIUVVNeFJXVXNSVUZCU3pSS0xHRkJRV0VzZVVOQlFUQkRMRXRCUVUwelN5eEhRVU5zUldVc1JVRkJTelJLTEdGQlFXRXNPRU5CUVN0RExFdEJRVTB6U3l4SFFVTjJSV1VzUlVGQlN6UktMR0ZCUVdFc05rTkJRVGhETEV0QlFVMHpTeXhIUVVOMFJXVXNSVUZCU3pSS0xHRkJRV0VzYlVSQlFXOUVMRXRCUVUwelN5eEhRVU0xUldVc1JVRkJTelJLTEdGQlFXRXNhMFJCUVcxRUxFdEJRVTB6U3l4SFFVTXpSV1VzUlVGQlN6UktMR0ZCUVdFc2NVTkJRWE5ETEV0QlFVMHpTeXhIUVVNNVJHVXNSVUZCU3pSS0xHRkJRV0VzTWtOQlFUUkRMRXRCUVUwelN5eEhRVU53UldVc1JVRkJTelJLTEdGQlFXRXNORU5CUVRaRExFdEJRVTB6U3l4SFFVTnlSV1VzUlVGQlN6UktMR0ZCUVdFc05FTkJRVFpETEV0QlFVMHpTeXhIUVVOeVJXVXNSVUZCU3pSS0xHRkJRV0VzTUVOQlFUSkRMRXRCUVUwelN5eEhRVU51UldVc1JVRkJTelJLTEdGQlFXRXNiME5CUVhGRExFdEJRVTB6U3l4SFFVTTNSR1VzUlVGQlN6UktMR0ZCUVdFc2FVUkJRV3RFTEV0QlFVMHpTeXhIUVVNeFJXVXNSVUZCU3pSS0xHRkJRV0VzTUVOQlFUSkRMRXRCUVUwelN5eEhRVU51UldVc1JVRkJTelJLTEdGQlFXRXNjVVJCUVhORUxFdEJRVTB6U3l4SFFVTTVSV1VzUlVGQlN6UktMR0ZCUVdFc2RVTkJRWGRETEV0QlFVMHpTeXhIUVVOb1JXVXNSVUZCU3pSS0xHRkJRV0VzT0VOQlFTdERMRXRCUVUwelN5eEhRVU4yUldVc1JVRkJTelJLTEdGQlFXRXNjME5CUVhWRExFdEJRVTB6U3l4SFFVTXZSR1VzUlVGQlN6UktMR0ZCUVdFc2RVUkJRWGRFTEV0QlFVMHpTeXhIUVVOb1JtVXNSVUZCU3pSS0xHRkJRV0VzTmtOQlFUaERMRXRCUVUwelN5eEhRVU4wUldVc1JVRkJTelJLTEdGQlFXRXNjVU5CUVhORExFdEJRVTB6U3l4SFFVTTVSR1VzUlVGQlN6UktMR0ZCUVdFc0swTkJRV2RFTEV0QlFVMHpTeXhIUVVONFJXVXNSVUZCU3pSS0xHRkJRV0VzZFVOQlFYZERMRXRCUVUwelN5eEhRVU5vUldVc1JVRkJTelJLTEdGQlFXRXNkVU5CUVhkRExFdEJRVTB6U3l4SFFVTm9SV1VzUlVGQlN6UktMR0ZCUVdFc1owUkJRV2xFTEV0QlFVMHpTeXhIUVVONlJXVXNSVUZCU3pSS0xHRkJRV0VzTkVOQlFUWkRMRXRCUVUwelN5eEhRVU55UldVc1JVRkJTelJLTEdGQlFXRXNjVVJCUVhORUxFdEJRVTB6U3l4SFFWYzVSWE4zUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdFFpeHJRa0ZCYjBJc1UwRkJVMmh2UWl4SFFVTnFSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUjBvc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JVSXNhMEpCUVd0Q0wyNUNMR2RDUVVGcFFpeFBRVVV4UnpWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdFFpeHJRa0ZCYlVKc2FFVXNSVUZCU3pSd1F5eFRRVU40UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkJhMEp1YUVVc1dVRkJZeXd5UTBGWmVFUXJORU1zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRWE5DTEZOQlFWTnFiMElzUjBGRGJrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1odlFpeG5Ra0ZCYVVJc1QwRkZOVWMxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRWEZDYm1oRkxFVkJRVXMwY0VNc1UwRkRNVVJ5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNjR2hGTEZsQlFXTXNOa05CV1RGRUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRnJRaXhUUVVGVGJHOUNMRWRCUXk5RGJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhTaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxYjBJc1owSkJRV2xDTEU5QlJYaEhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRnBRbkJvUlN4RlFVRkxOSEJETEZOQlEzUkVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFuSm9SU3haUVVGakxIbERRVmwwUkNzMFF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdsQ0xGTkJRVk51YjBJc1IwRkRPVVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdkQ2NtaEZMRVZCUVVzMGNFTXNVMEZEY2tWeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUXl4bFFVRmxkR2hGTEZsQlFXTXNkMFJCV1hKRkt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlowSXNVMEZCVTNCdlFpeEhRVU0zUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlpYUm9SU3hGUVVGTE5IQkRMRk5CUTNCRmNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZM1pvUlN4WlFVRmpMSFZFUVZsd1JTczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJkMElzVTBGQlUzSnZRaXhIUVVOeVJHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRVZCUVVjc1NVRkJTMG9zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRWE5DY0c5Q0xHZENRVUZwUWl4UFFVVXZSelYyUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJkVUoyYUVVc1JVRkJTelJ3UXl4VFFVTTFSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSjRhRVVzV1VGQll5d3JRMEZsTlVRck5FTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYTkNibWRDTEZkQlFXRXNSMEZsZWtSMFNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndaMElzYVVKQlFXMUNMRWRCV1M5RWNra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYVkNMRk5CUVZOMGIwSXNSMEZEY0VSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjMEo0YUVVc1JVRkJTelJ3UXl4VFFVTXpSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSjZhRVVzV1VGQll5dzRRMEZaTTBRck5FTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYVkNMRk5CUVZOMmIwSXNSMEZEY0VSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjMEo2YUVVc1JVRkJTelJ3UXl4VFFVTXpSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSXhhRVVzV1VGQll5dzRRMEZaTTBRck5FTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFYTkNMRk5CUVZONGIwSXNSMEZEYmtSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVZEtMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblp2UWl4blFrRkJhVUlzVDBGRk5VYzFka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFYRkNNV2hGTEVWQlFVczBjRU1zVTBGRE1VUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q00yaEZMRmxCUVdNc05rTkJXVEZFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVc5Q0xGTkJRVk42YjBJc1IwRkRja1ZzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSkRMR3RDUVVGdFFqTm9SU3hGUVVGTE5IQkRMRk5CUXpWRmNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRV3RDTldoRkxGbEJRV01zSzBSQldUVkZLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUV5UWl4VFFVRlRNVzlDTEVkQlEzaEViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMHNUMEZGZGtRemRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVRCQ05XaEZMRVZCUVVzMGNFTXNVMEZETDBSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5yYmtJc2VVSkJRWGxDTjJoRkxGbEJRV01zYTBSQldTOUVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUY1UWl4VFFVRlRNMjlDTEVkQlEzUkViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZIU2l4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJeGIwSXNaMEpCUVdsQ0xFOUJSUzlITlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYzUWpkb1JTeEZRVUZMTkhCRExGTkJRemRFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRamxvUlN4WlFVRmpMR2RFUVZrM1JDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJkMElzVTBGQlV6VnZRaXhIUVVOeVJHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUYxUWpsb1JTeEZRVUZMTkhCRExGTkJRelZFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRaTlvUlN4WlFVRmpMQ3REUVZrMVJDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRmpMRk5CUVZNM2IwSXNSMEZETTBOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEZRVUZITEVsQlFVdEtMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFiMElzWjBKQlFXbENMRTlCUlhKSE5YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVdFdmFFVXNSVUZCU3pSd1F5eFRRVU5zUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlphR2xGTEZsQlFXTXNjVU5CWld4RUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWa3paMElzVjBGQllTeEhRV1V2UTNSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMVowSXNhVUpCUVcxQ0xFZEJXWEpFY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCYVVJc1UwRkJVemx2UWl4SFFVTTVRMncxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVWQlFVY3NTVUZCUzBvc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRkdlFpeG5Ra0ZCYVVJc1QwRkZlRWMxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaMEpvYVVVc1JVRkJTelJ3UXl4VFFVTnlSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzTnVRaXhsUVVGbGFtbEZMRmxCUVdNc2QwTkJaWEpFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVMVowSXNWMEZCWVN4SFFXVnNSSFJKTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzWjBJc2FVSkJRVzFDTEVkQldYaEVja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJaU3hUUVVGVEwyOUNMRWRCUXpWRGJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSVUZCUnl4SlFVRkxTaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVzlDTEdkQ1FVRnBRaXhQUVVWMFJ6VjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGamFtbEZMRVZCUVVzMGNFTXNVMEZEYmtSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZV3hwUlN4WlFVRmpMSE5EUVdWdVJDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhOMmRDTEZkQlFXRXNSMEZsYUVSMFNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9XZENMR2xDUVVGdFFpeEhRVmwwUkhKSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdVc1UwRkJVMmh3UWl4SFFVTTFRMncxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVWQlFVY3NTVUZCUzBvc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWVM5dlFpeG5Ra0ZCYVVJc1QwRkZkRWMxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZMnhwUlN4RlFVRkxOSEJETEZOQlEyNUVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdGdWFVVXNXVUZCWXl4elEwRmxia1FyTkVNc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWVRsblFpeFhRVUZoTEVkQlpXaEVkRWtzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzluUWl4cFFrRkJiVUlzUjBGWmRFUnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRmpMRk5CUVZOcWNFSXNSMEZETTBOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEZRVUZITEVsQlFVdEtMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9jRUlzWjBKQlFXbENMRTlCUlhKSE5YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVdGdWFVVXNSVUZCU3pSd1F5eFRRVU5zUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlpjR2xGTEZsQlFXTXNjVU5CWld4RUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWa3ZaMElzVjBGQllTeEhRV1V2UTNSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb2FFSXNhVUpCUVcxQ0xFZEJXWEpFY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVcxQ0xGTkJRVk5zY0VJc1IwRkRhRVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4RlFVRkhMRWxCUVV0S0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtcHdRaXhuUWtGQmFVSXNUMEZGTVVjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVd0Q2NHbEZMRVZCUVVzMGNFTXNVMEZEZGtSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDY21sRkxGbEJRV01zTUVOQlpYWkVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1ob1FpeFhRVUZoTEVkQlpYQkVkRWtzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDYW1oQ0xHbENRVUZ0UWl4SFFWa3hSSEpKTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV2xDTEZOQlFWTnVjRUlzUjBGRE9VTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hGUVVGSExFbEJRVXRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzY0VJc1owSkJRV2xDTEU5QlJYaEhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXZENjbWxGTEVWQlFVczBjRU1zVTBGRGNrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWlhScFJTeFpRVUZqTEhkRFFXVnlSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpKdVFpeGxRVUZsYW1oQ0xGZEJRV0VzUjBGbGJFUjBTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekp1UWl4bFFVRmxiR2hDTEdsQ1FVRnRRaXhIUVZsNFJISkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQlowSXNVMEZCVTJoSkxFZEJRemREYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1JVRkJSeXhKUVVGTFNpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdlNDeG5Ra0ZCYVVJc1QwRkZka2MxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmxiR2hFTEVWQlFVczBjRU1zVTBGRGNFUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZqYm1oRUxGbEJRV01zZFVOQlpYQkVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZMFVzVjBGQllTeEhRV1ZxUkhSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWTBNc2FVSkJRVzFDTEVkQldYWkVja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRWE5DTEZOQlFWTndjRUlzUjBGRGJrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW01d1FpeG5Ra0ZCYVVJc1QwRkZOVWMxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRWEZDZEdsRkxFVkJRVXMwY0VNc1UwRkRNVVJ5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNkbWxGTEZsQlFXTXNOa05CV1RGRUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlZ5eFRRVUZUY25CQ0xFZEJRelZFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVmRtbEZMRVZCUVVzMGNFTXNVMEZEYmtWeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRlR2xGTEZsQlFXTXNjMFJCV1c1Rkt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXbENMRk5CUVZOMGNFSXNSMEZET1VOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVZEtMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVnljRUlzWjBKQlFXbENMRTlCUlhaSE5YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdkQ2VHbEZMRVZCUVVzMGNFTXNVMEZEY2tSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaWHBwUlN4WlFVRmpMSGREUVZseVJDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWY3NVMEZCVTI5NVF5eEhRVU4yUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlIwb3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVGNYbERMR2RDUVVGcFFpeFBRVVZvU0RWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVlU1Unl4RlFVRkxOSEJETEZOQlF6bEVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXk5SExGbEJRV01zYVVSQldUbEVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZ2UWl4VFFVRlRkbkJDTEVkQlEycEViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZIU2l4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKMGNFSXNaMEpCUVdsQ0xFOUJSVEZITlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZ0UW5wcFJTeEZRVUZMTkhCRExGTkJRM2hFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRakZwUlN4WlFVRmpMREpEUVZsNFJDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFXRXNVMEZCVTNod1FpeEhRVU0xUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlIwb3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENReXhYUVVGWGRuQkNMR2RDUVVGcFFpeFBRVVZ5U0RWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmt4YVVVc1JVRkJTelJ3UXl4VFFVTnVSWEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZjemFVVXNXVUZCWXl4elJFRlJia1VyTkVNc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JVSXNhMEpCUVd0Q0wyNUNMR2RDUVVGclFpeERRVUZETEVkQlNYWkVialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNiVUlzYTBKQlFXdENMelZGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRjRVVzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNiVUlzYTBKQlFXdENOVGRFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaEwwVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYlVJc2EwSkJRV3RDTlRkRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETTBVc1NVRkJUME1zUlVGQlRTeERRVU5ZYjNCQ0xGTkJRVlV6YVVVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVsemNFSXNZMEZEZUVNNWNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNOemRFTEZOQlFWVXJla01zU1VGTmRFUXNUMEZJU1VFc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYlVJc2EwSkJRV3RDY2pSQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGJrVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGRGNFTXNUMEZCVDNCdlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmEwSndia0lzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYYkVZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmEwSndia0lzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnNSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkRkRU51ZEVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEp5YmtJc05rSkJRMjVGVWl4RlFVRkpkWEJDTEZGQlFWRnlPRVVzUjBGRFdpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMjFDTEd0Q1FVRnJRaTgxUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOc1JTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDIxQ0xHdENRVUZyUWk5dFFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU12UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDIxQ0xHdENRVUZyUWk5dFFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEyeEdMRWxCUVVsdWVVUXNSMEZEU2tFc1JVRkJTV2xVTEVWQlFWRTBia1VzWlVGRFRpODJSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUelZWTEhGQ1FVTk1MRVZCUTBGMk9VTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9ia0lzTUVKQlZXaEVja0lzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYlVJc2EwSkJRV3RDTHpWRkxGVkJRVlY1TjBVc1dVRkJZeXhYUVVNNVJDeFBRVU5GTldsRkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ4UWl4SlFWRXhSbkp2UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdFFpeHJRa0ZCYTBJdk5VVXNWVUZCVlRJM1JTeFpRVUZqTEZOQlFWTjBPRVVzUjBGRGRrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRVZCUVVkcVF5eEpRVk4yUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmEwSXZOVVVzVlVGQlZUQTNSU3hSUVVGVkxGTkJRVk55YjBJc1JVRkJWME1zUjBGRE9VVXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmNVSXhiVUlzU1VGUkwwY3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkJhMEl2TlVVc1ZVRkJWVFEzUlN4alFVRm5RaXhYUVVOb1JTeFBRVUZQZERaRkxFdEJRVXR4TmtVc1dVRkJXU3hMUVZVeFFtaHhRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvYjBJc1owSkJRV3RDTEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFVkJRVVVzUjBGSmRrVnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTjBSU3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSTNOMFFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGcVJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEkzTjBRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU0zUlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZZW5wRUxFdEJRVFpETEU5QlFYUkRhVU1zUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRhRVZwTjBVc1YwRkJiVVFzVDBGQmRFTnFOMFVzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRkRVZyTjBVc1pVRkJLMFFzVDBGQk9VTnNOMFVzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUWpKT0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5zUm0wM1JTeHhRa0ZCYzBVc1QwRkJMME51TjBVc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFqSk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVONlJtODNSU3h0UWtGQmIwVXNUMEZCTDBOd04wVXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRakpPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTjJSbkUzUlN4blFrRkJhVUp3YWtVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVrcmNFSXNjVUpCUXk5RGRuRkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RamszUkN4VFFVRlZLM3BETEVkQlEyaEVhWEZDTEdGQlFXTjBha1VzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWxwY1VJc2EwSkJRelZEZW5GQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuQTRSQ3hUUVVGVkszcERMRWRCUTNCRWJYRkNMRmxCUVdGNGFrVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVbHRjVUlzYVVKQlF6TkRNM0ZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUW5ZNFJDeFRRVUZWSzNwRExFZEJRM1pFY1hGQ0xHTkJRV1V4YWtVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVseGNVSXNiVUpCUXpkRE4zRkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbXc0UkN4VFFVRlZLM3BETEVkQlEzSkVlRVlzVTBGQlZUbHlSQ3hGUVVGSmRYaEVMRVZCUVVsemNVSXNaVUZCYVVJNWNVSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldYbzRSQ3hUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWRCUXk5R09EZEZMR2RDUVVGcFFqazNSU3hGUVVGSmRYaEVMRVZCUVVsM2NVSXNjMEpCUVhkQ2FISkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVnNPVVFzVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hIUVVOb1NHYzRSU3hQUVVGblJDeFBRVUYyUTJnNFJTeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hIUVUxeVJTeFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW5RMFFpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEzSkZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlEzQkRMRTlCUVU5eWIwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNjbTVDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjNCR09FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNjbTVDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRjRVlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNSEZDTEZGQlFWRjRPVVVzUjBGRFdpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUSnhRaXhYUVVGWGVqbEZMRWRCUTJZc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsMGMwUXNZMEZCWTNoSExFZEJRMnhDTEUxQlEwWXNTMEZCU3l4SFFVVklMRWxCUkVFc1NVRkJTV3RwUkN4RlFVRjNRM05NTEVWQlFVOXNXaXhqUVVGblFtdGFMRVZCUVU5dVdDeHJRa0ZCYjBJc1EwRkJRMjFZTEVWQlFVOTJZU3hoUVVNM1Jtd3dReXhGUVVGSkxFVkJRVWRCTEVWQlFVbHRha1FzUlVGQlR6ZG5SQ3hQUVVGUmRFTXNTVUZEYWtNcmVrUXNSVUZCU1RSeFFpeHZRa0ZCYjBKNE4wSXNSVUZCVDI1cVJDeEpRVVZxUXl4TlFVTkdMRXRCUVVzc1IwRkZTQ3hKUVVSSmJXcEVMRVZCUVhkRGMwd3NSVUZCVDJ4YUxHTkJRV2RDYTFvc1JVRkJUMjVZTEd0Q1FVRnZRaXhEUVVGRGJWZ3NSVUZCVDNaaExHRkJRemRHYkRCRExFVkJRVWtzUlVGQlIwRXNSVUZCU1cxcVJDeEZRVUZQTjJkRUxFOUJRVkYwUXl4SlFVTnFReXQ2UkN4RlFVRkpObkZDTEd0Q1FVRnJRbm8zUWl4RlFVRlBibXBFTEVsQlJTOUNMRTFCUTBZc1MwRkJTeXhGUVVORGFVSXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVU4wUTNCMFFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW5SdVFpdzJRa0ZETDBSU0xFVkJRVWs0Y1VJc1pVRkJaVFU1UlN4SFFVTnVRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVU4wUXpGMFFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWpWdVFpdzJRa0ZEYmtWU0xFVkJRVWtyY1VJc1dVRkJXVGM1UlN4SFFVTm9RaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVU4wUXpkMFFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWk5dVFpdzJRa0ZEZEVWU0xFVkJRVWxuY2tJc1YwRkJWems1UlN4SFFVTm1MRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRM1JEZUhSQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDTVc1Q0xEWkNRVU53UlZJc1JVRkJTV2x5UWl4alFVRmpMemxGTEVkQlEyeENMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkRkRU12ZEVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlphbTlDTERaQ1FVTXpSRklzUlVGQlNXdHlRaXhYUVVGWGFDdEZMRWRCUTJZc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVOMFEzaDFRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeGIwSXNOa0pCUXpsRVVpeEZRVUZKYlhKQ0xHdENRVUZyUW1vclJTeEhRVU4wUWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1c5eVFpeFZRVUZWYkN0RkxFZEJRMlFzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRjRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9ia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9ia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU53Uml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVsQlIwcEJMRVZCUVVscFZDeEZRVUZSTW5CRkxIRkNRVU5PT1RoRkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE9WVXNiMEpCUTB3c1JVRkRRWEk1UXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVRSd1JTd3lRa0ZEVGk4NFJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQzWlhMRzFDUVVOTUxFZEJRMEUxTjBNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZFMmNFVXNlVUpCUTA1b09VVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOTJWeXh0UWtGRFRDeEhRVU5CTlRkRExFbEJSMHBCTEVWQlFVbHBWQ3hGUVVGUmNXOUZMSE5DUVVOT2VEZEZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtcHVRaXd3UWtGSE1VTndlVVFzUlVGQlNXbFVMRVZCUVZGMWIwVXNiVUpCUTA0eE4wVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEZRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RtNUNMREJDUVVjNVEzQjVSQ3hGUVVGSmFWUXNSVUZCVVhsdlJTeHJRa0ZEVGpVM1JTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFVkJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJeGJrSXNNRUpCUjJwRWNIbEVMRVZCUVVscFZDeEZRVUZSTW05RkxHOUNRVU5PT1RkRkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5KdVFpeDVRa0ZKZEVNc1QwRkVWSEI1UkN4RlFVRkphVlFzUlVGQlVUUnZSU3hsUVVWV01YQkNMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVzVDTEhsQ1FVazNRaXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZST0c5RkxITkNRVVZXTlhCQ0xFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbGNtOUNMSGxDUVVsb1F5eFBRVVJVY0hsRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFMUJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRWRCUTBGc05FTXNTVUZWVGl0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZUSTVSU3hSUVVGVkxGZEJRelZFTEU5QlFUaENPV3RGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlUyT0VVc1VVRkJWU3hUUVVGVGVEbEZMRWRCUTNKRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWTkRsRkxGVkJRVmtzVjBGRE9VUXNUMEZCVHk5clJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVk5qbEZMRkZCUVZVc1YwRkROVVFzVDBGQmVVTXNUVUZCYkVOb2JFVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZPRGxGTEZkQlFXRXNWMEZETDBRc1QwRkJPRUpxYkVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlRnNFJTeFhRVUZoTEZOQlFWTjZPVVVzUjBGRGVFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVck9VVXNZVUZCWlN4WFFVTnFSU3hQUVVGUGJHeEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVm5LMFVzVjBGQllTeFhRVU12UkN4UFFVRjVReXhOUVVGc1EyNXNSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlYzT1VVc2EwSkJRVzlDTEZkQlEzUkZMRTlCUVhORE0ydEZMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUW14cVJDeExRVUZOTEVsQlVUVkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWYVN0RkxHdENRVUZ2UWl4VFFVRlROU3RGTEVkQlF5OUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFZEJRVk1zUzBGVGFrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlUyUml4alFVRm5RaXhUUVVGVGVFY3NSVUZCVDJrd1JDeEhRVU5zUml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVYVkVMRzFDUVVGdFFqRnJSQ3hMUVVGTkxFVkJRVWRxUXl4RlFVRlBhVEJFTEVsQlVYcEVNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZySzBVc2IwSkJRWE5DTEZkQlEzaEZMRTlCUVU4MU9FVXNTMEZCU3pJNFJTeHJRa0ZCYTBJc1MwRlJhRU4wYzBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWNU9VVXNkMEpCUVRCQ0xGZEJRelZGTEU5QlFYTkROV3RGTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFdEJVVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmJTdEZMSGRDUVVFd1FpeFRRVUZUT1N0RkxFZEJRM0pHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWRCUVZNc1MwRlRiRVJ6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVck9FVXNiMEpCUVhOQ0xGTkJRVk14T1VVc1JVRkJUMmt3UkN4SFFVTjRSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVhWRUxHMUNRVUZ0UWpGclJDeExRVUZOTEVkQlFVbHFReXhGUVVGUGFUQkVMRWxCVVRGRU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnZLMFVzTUVKQlFUUkNMRmRCUXpsRkxFOUJRVTg1T0VVc1MwRkJTelk0UlN4M1FrRkJkMElzUzBGUmRFTjRjMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlV3T1VVc2MwSkJRWGRDTEZkQlF6RkZMRTlCUVhORE4ydEZMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUW14cVJDeExRVUZOTEV0QlVUVkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWY1N0RkxITkNRVUYzUWl4VFFVRlRhQzlGTEVkQlEyNUdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSMEZCU1dwRExFZEJRVk1zUzBGVGJFUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZuT1VVc2EwSkJRVzlDTEZOQlFWTXpPVVVzUlVGQlQya3dSQ3hIUVVOMFJpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVWFZFTEcxQ1FVRnRRakZyUkN4TFFVRk5MRWRCUVVscVF5eEZRVUZQYVRCRUxFbEJVVEZFTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWekswVXNkMEpCUVRCQ0xGZEJRelZGTEU5QlFVOW9PVVVzUzBGQlN5czRSU3h6UWtGQmMwSXNTMEZSY0VNeGMwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnJPRVVzYlVKQlFYRkNMRmRCUTNaRkxFOUJRMFZ5YWtVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2xDTEVsQlVYUkdkRzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWZFN0RkxHMUNRVUZ4UWl4VFFVRlRiQzlGTEVkQlEyaEdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnBPVVVzWlVGQmFVSXNVMEZCVXpWd1FpeEZRVUZYUXl4SFFVTjJSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRnBRak50UWl4SlFWRXpSek5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWZHl0RkxIRkNRVUYxUWl4WFFVTjZSU3hQUVVGUGJEbEZMRXRCUVV0cE9VVXNiVUpCUVcxQ0xFdEJVV3BETlhOQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmJ6aEZMR2RDUVVGclFpeFhRVU53UlN4UFFVTkZkbXBGTEVWQlFVczBjRU1zVVVGQlVUQkVMSGRDUVVGM1FqZHJSQ3hMUVVGTmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnhRaXhKUVZFeFJqVnZRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWWGtyUlN4blFrRkJhMElzVTBGQlUzQXZSU3hIUVVNM1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNSVUZCUjJwRExFbEJVM1pFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmF6bEZMRmxCUVdNc1UwRkJVemR3UWl4RlFVRlhReXhIUVVOd1JpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRVZCUVVjcmVFUXNSVUZCVnpGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGeFFtcHVRaXhKUVZFdlJ6TkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZNQ3RGTEd0Q1FVRnZRaXhYUVVOMFJTeFBRVUZQY0RsRkxFdEJRVXR0T1VVc1owSkJRV2RDTEV0QlVUbENPWE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWY3poRkxHVkJRV2xDTEZkQlEyNUZMRTlCUTBWNmFrVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhkQ0xFbEJVVGRHTDI5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVk1pdEZMR1ZCUVdsQ0xGTkJRVk4wTDBVc1IwRkROVVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVWQlFVZHFReXhKUVZOMlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWVzA1UlN4WFFVRmhMRk5CUVZNNWNFSXNSVUZCVjBNc1IwRkRia1lzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkJkMEp3YmtJc1NVRlJiRWd6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlRRclJTeHBRa0ZCYlVJc1YwRkRja1VzVDBGQlQzUTVSU3hMUVVGTGNUbEZMR1ZCUVdVc1MwRlJOMEpvZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWM09FVXNhVUpCUVcxQ0xGZEJRM0pGTEU5QlEwVXpha1VzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYTkNMRWxCVVROR01XOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZOaXRGTEdsQ1FVRnRRaXhUUVVGVGVDOUZMRWRCUXpsRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEZRVUZIYWtNc1NVRlRka1J6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWdk9VVXNZMEZCWjBJc1UwRkJVeTl3UWl4RlFVRlhReXhIUVVOMFJpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRVZCUVVjcmVFUXNSVUZCVnpGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGelFpOXRRaXhKUVZGb1NETkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZPQ3RGTEcxQ1FVRnhRaXhYUVVOMlJTeFBRVUZQZURsRkxFdEJRVXQxT1VVc2FVSkJRV2xDTEV0QlVTOUNiSFJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWZVRoRkxGZEJRV0VzVjBGREwwUXNUMEZEUlRWcVJTeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZoTEVsQlVURkZhbkJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVONFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkRha1VzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVm5MMFVzVjBGQllTeFhRVU12UkN4UFFVRjVReXhOUVVGc1EyNXRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlV5T0VVc2EwSkJRVzlDTEZkQlEzUkZMRTlCUTBVNWFrVXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWjBJc1NVRlJOMFV4Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWek9VVXNhMEpCUVc5Q0xGTkJRVk5xSzBVc1IwRkRMMFVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRSRUxHZENRVUZuUWk5clJDeExRVUZOTEVWQlFVZHFReXhKUVZFdlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWV2t2UlN4dlFrRkJjMElzVjBGRGVFVXNUMEZCVHpNNVJTeExRVUZMWnpoRkxIVkNRVUZyUW5KeFFpeEpRVkZvUTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmF5OUZMR3RDUVVGdlFpeFhRVU4wUlN4UFFVRjVReXhOUVVGc1EzSnRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZ0TDBVc1ZVRkJXU3hYUVVNNVJDeFBRVUU0UW5SdFJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hIUVVGSkxFdEJVVE5GY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmRUbEZMRlZCUVZrc1UwRkJVMndyUlN4SFFVTjJSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZXOHZSU3haUVVGakxGZEJRMmhGTEU5QlFVOTJiVVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWWEV2UlN4VlFVRlpMRmRCUXpsRUxFOUJRVEJETEUxQlFXNURlRzFGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWVnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcWIwSXNaMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hKUVVsdVJXNDFReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEyeEZMRTlCUVU5T0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFqazNSQ3hUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRkRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RamszUkN4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM3BGTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWg2ZWtRc1MwRkJOa01zVDBGQmRFTnBReXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTm9SVEFyUlN4VlFVRlhlbTFGTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKYjNSQ0xHVkJRM3BETlhSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFtdzRSQ3hUUVVGVkszcERMRWRCUTNKRWNYRkNMR05CUVdVeGFrVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVbHhjVUlzYlVKQlF6ZEROM0ZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW13NFJDeFRRVUZWSzNwRExFZEJRM0pFYzNSQ0xHVkJRV2RDTTIxRkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmMzUkNMRzlDUVVNNVF6bDBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEk1TjBRc1UwRkJWU3Q2UXl4SFFVTm9SR2x4UWl4aFFVRmpkR3BGTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKYVhGQ0xHdENRVU0xUTNweFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSndPRVFzVTBGQlZTdDZReXhIUVVOd1JIZDBRaXh0UWtGQmIwSTNiVVVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWwzZEVJc2QwSkJRMnhFYUhWQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlM4M1JDeFRRVUZWSzNwRExFZEJReTlFTUhSQ0xHTkJRV1V2YlVVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVrd2RFSXNiVUpCUXpkRGJIVkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjFDTEhGQ1FVRnhRbTQ0UkN4VFFVRlZLM3BETEVkQlEzSkVlRVlzVTBGQlZUbHlSQ3hGUVVGSmRYaEVMRVZCUVVsemNVSXNaVUZCYVVJNWNVSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpURTRSQ3hUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWRCUTJ4SGF5OUZMR3RDUVVGdFFtcHVSU3hGUVVGTE5IQkRMRkZCUVZFd1FpeGhRVUZoWjA4c1JVRkJTVFIwUWl4MVFrRkRha1J3ZFVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1JTeGpRVUZqYURoRUxGTkJRVlVyZWtNc1IwRkRPVVE0ZEVJc2FVSkJRV3RGTEU5QlFTOURjQzlGTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFclFpeHBRa0ZCYVVJeVRpeEZRVUZMTEZWQlFXVmpMRVZCUVZseWVVUXNSMEZOZGtZc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEoyTkVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOcVJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVOd1F5eFBRVUZQZEc5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFuUnVRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmRvUmpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFuUnVRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEyaEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUQnhRaXhSUVVGUmVEbEZMRWRCUTFvc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGRGRFTjRkRUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSXhia0lzTmtKQlEzQkZVaXhGUVVGSk9IUkNMRk5CUVZNMVowWXNSMEZEWWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVOMFEzaDBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFqRnVRaXcyUWtGRGNFVlNMRVZCUVVscGNrSXNZMEZCWXk4NVJTeEhRVU5zUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVOMFEzQjBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFuUnVRaXcyUWtGREwwUlNMRVZCUVVrcmRFSXNZMEZCWXpkblJpeEhRVU5zUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVOMFF6RjBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFqVnVRaXcyUWtGRGJrVlNMRVZCUVVrcmNVSXNXVUZCV1RjNVJTeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZEZEVSeWRFSXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRExHVkJRV1YyYmtJc05rSkJRemxGVWl4RlFVRkpaM1ZDTEd0Q1FVRnJRamxuUml4SFFVTjBRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzIxQ0xIRkNRVU4wUTNwMFFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzIxQ0xIRkNRVUZ4UWpOdVFpdzJRa0ZEY0VWU0xFVkJRVWxwZFVJc1lVRkJZUzluUml4SFFVTnFRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRM1JEYUhWQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaV3h2UWl3MlFrRkRPVVJTTEVWQlFVbHJja0lzVjBGQlYyZ3JSU3hIUVVObUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVOMFJIUjBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTNodVFpdzJRa0ZETjBWU0xFVkJRVWxyZFVJc2FVSkJRV2xDYUdoR0xFZEJRM0pDTEUxQlEwWXNTMEZCU3l4SFFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKYlhWQ0xHZENRVUZuUW1wb1JpeEhRVU53UWl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU5vUlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbXB1UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTNSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbXB1UWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTJoR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4RlFVVkRMRTlCUkZSeWVVUXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVEJ5UlN4blFrRkRUamNyUlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVWQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5YmtJc01FSkJSeTlEY0hsRUxFVkJRVWxwVkN4RlFVRlJNbTlGTEc5Q1FVTk9PVGRGTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkp1UWl3d1FrRkhMME53ZVVRc1JVRkJTV2xVTEVWQlFWRTBja1VzY1VKQlEwNHZLMFVzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTgxVlN4eFFrRkRUQ3hGUVVOQmRqbERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhbTVDTERCQ1FVY3hRM0I1UkN4RlFVRkphVlFzUlVGQlVYVnZSU3h0UWtGRFRqRTNSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUelZWTEhGQ1FVTk1MRVZCUTBGMk9VTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJia0lzTUVKQlJ6bERjSGxFTEVWQlFVbHBWQ3hGUVVGUk9ISkZMSGxDUVVOT2FpOUZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWld4dVFpd3dRa0ZIZWtSd2VVUXNSVUZCU1dsVUxFVkJRVkZuYzBVc2IwSkJRMDV1TDBVc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4MVZTeHhRa0ZEVEN4RlFVTkJkamxETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWEZDZEc1Q0xIbENRVWwwUXl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk5HOUZMR1ZCUlZZeGNFSXNSVUZCVHpOWExHRkJRMHdzUlVGRFFYZzNReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNia0lzTUVKQlIzcERjSGxFTEVWQlFVbHBWQ3hGUVVGUmEzTkZMSGRDUVVOT2NpOUZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTI1dVFpd3dRa0ZIZUVSd2VVUXNSVUZCU1dsVUxFVkJRVkV3YzBVc2RVSkJRMDQzTDBVc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4NVZTeHZRa0ZEVEN4SFFVTkJjamxETEVsQlUwWnBXU3hGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWld3MlJTeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTJwR0xFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtNc1pVRkJaUzgzUkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllUVkdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtNc1pVRkJaUzgzUkN4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM2hHTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWd6U0N4TlFVRTRReXhQUVVGMFF6ZHdSQ3hGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTnFSWFV5UXl4SlFVRTBReXhQUVVGMFEzWXlReXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTXZSRGh5UkN4VFFVRlZPWEpFTEVWQlFVbDFlRVFzUlVGQlNYTnhRaXhsUVVGcFFqbHhRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEpxT0VRc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMHpSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlhnMFFpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEyaEdMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENReXhsUVVOd1JDeFBRVUZQZG05Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlhadVFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWY3ZSamhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtNc1pVRkJaWFp1UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJReTlHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDNaaExGbEJRekZETm1Zc1JVRkJTWEYxUWl4VFFVRlRibWhHTEVkQlEySXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkyWVN4WlFVTXhRelptTEVWQlFVazNhRUlzVDBGQlQycDRReXhIUVVOWUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlEzUkRkblJDTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYTkNlbTVDTERaQ1FVTnlSVklzUlVGQlNXdHlRaXhYUVVGWGFDdEZMRWRCUTJZc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc05rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRMMFVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc2JrSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETlVWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRExHVkJRV1ZzYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNdlJpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU4ellTeFhRVU5NTEVWQlEwRjRNME1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBNMkVzVjBGRFRDeEZRVU5CZURORExFZEJTVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkUwYjBVc1pVRkZWakZ3UWl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMmJVSXNjMEpCUVhOQ2NHNUNMREJDUVZWc1JISkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXdzJSU3hWUVVGVmVXZEdMRk5CUVZjc1YwRkRlRVVzVDBGQk9FSTFia1VzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhKUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNOa1VzVlVGQlZYZG5SaXhUUVVGWExGTkJRVk51YUVZc1IwRkRha1lzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENReXhsUVVGbGJEWkZMRlZCUVZVd1owWXNWMEZCWVN4WFFVTXhSU3hQUVVGUE4yNUZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENReXhsUVVGbGJEWkZMRlZCUVZVeVowWXNVMEZCVnl4WFFVTjRSU3hQUVVGNVF5eE5RVUZzUXpsdVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENReXhsUVVGbGJEWkZMRlZCUVZWeGQwTXNUMEZCVXl4WFFVTjBSU3hQUVVFNFFuZ3pRaXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXdzJSU3hWUVVGVmMzZERMRTlCUVZNc1UwRkJVMnA0UXl4SFFVTXZSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc05rVXNWVUZCVlRSblJpeFRRVUZYTEZkQlEzaEZMRTlCUVU4dmJrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc05rVXNWVUZCVlRablJpeFBRVUZUTEZkQlEzUkZMRTlCUVhsRExFMUJRV3hEYUc5RkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc05rVXNWVUZCVlhrNFJTeFhRVUZoTEZkQlF6RkZMRTlCUTBVMWFrVXNSVUZCU3pSd1F5eFJRVUZSZVVRc1owSkJRV2RDTld0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMmJVSXNjMEpCUVhWQ0xFbEJVWEJHZW05Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWld3MlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVOdVJpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWld3MlJTeFZRVUZWS3l0RkxHRkJRV1VzVjBGRE5VVXNUMEZCVDNvNVJTeExRVUZMS3pkRkxHZENRVUZYY0hGQ0xFbEJVWHBDZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1F5eGxRVUZsYkRaRkxGVkJRVlZuTDBVc1YwRkJZU3hYUVVNeFJTeFBRVUY1UXl4TlFVRnNRMjV0UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlBha04xV0N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyNDJSU3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEyaEdMRTlCUVU5T0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTJnNFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVE5HY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTJnNFJDeFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTNaR0xFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFnelNDeE5RVUU0UXl4UFFVRjBRemR3UkN4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5xUlhVeVF5eEpRVUUwUXl4UFFVRjBRM1l5UXl4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEhRVTFxUlN4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkzbzBRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJReTlGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVTndSQ3hQUVVGUGVHOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkzaHVRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmM1UmpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTNodVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXpsR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQzWmhMRmxCUXpGRE5tWXNSVUZCU1hGMVFpeFRRVUZUYm1oR0xFZEJRMklzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5MllTeFpRVU14UXpabUxFVkJRVWszYUVJc1QwRkJUMnA0UXl4SFFVTllMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpialpGTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXpsRkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpibTVDTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF6TkZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGamJtNUNMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRPVVlzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRVZCUlVNc1QwRkVWSEo1UkN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBNMkVzVjBGRFRDeEZRVU5CZURORExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVHpOaExGZEJRMHdzUlVGRFFYZ3pReXhKUVZWT0szZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyNDJSU3hWUVVGVmVXZEdMRk5CUVZjc1YwRkRka1VzVDBGQk9FSTFia1VzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhKUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpGTEdOQlFXTnVOa1VzVlVGQlZYZG5SaXhUUVVGWExGTkJRVk51YUVZc1IwRkRhRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGamJqWkZMRlZCUVZVd1owWXNWMEZCWVN4WFFVTjZSU3hQUVVGUE4yNUZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGamJqWkZMRlZCUVZVeVowWXNVMEZCVnl4WFFVTjJSU3hQUVVGNVF5eE5RVUZzUXpsdVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGamJqWkZMRlZCUVZWeGQwTXNUMEZCVXl4WFFVTnlSU3hQUVVFNFFuZ3pRaXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyNDJSU3hWUVVGVmMzZERMRTlCUVZNc1UwRkJVMnA0UXl4SFFVTTVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkZMR05CUVdOdU5rVXNWVUZCVlRSblJpeFRRVUZYTEZkQlEzWkZMRTlCUVU4dmJrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkZMR05CUVdOdU5rVXNWVUZCVlRablJpeFBRVUZUTEZkQlEzSkZMRTlCUVhsRExFMUJRV3hEYUc5RkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZUSTVSU3hSUVVGVkxGZEJRM2hFTEU5QlFUaENPV3RGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlUyT0VVc1VVRkJWU3hUUVVGVGVEbEZMRWRCUTJwRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWTkRsRkxGVkJRVmtzVjBGRE1VUXNUMEZCVHk5clJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVk5qbEZMRkZCUVZVc1YwRkRlRVFzVDBGQmVVTXNUVUZCYkVOb2JFVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZkUzlGTEdGQlFXVXNWMEZETjBRc1QwRkRSVEZ0UlN4RlFVRkxOSEJETEZGQlFWRXdSQ3gzUWtGQmQwSTNhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjMElzU1VGUk0wWXhiMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlU0WjBZc1lVRkJaU3hUUVVGVGVtaEdMRWRCUTNSRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEZRVUZIYWtNc1NVRlRka1J6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZWcFowWXNVMEZCVnl4VFFVRlROWE5DTEVWQlFWZERMRWRCUXpkRkxFOUJRVTk2TmtNc1JVRkJTelJ3UXl4UlFVRlJLMFFzTUVKQlFUQkNiR3hFTEV0QlFVMHNSVUZCUnl0NFJDeEZRVUZYTVVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhOQ0wyMUNMRWxCVVdoSU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVXJaMFlzWlVGQmFVSXNWMEZETDBRc1QwRkJUM292UlN4TFFVRkxkeTlGTEdGQlFXRXNTMEZSTTBKdWRrSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVjNPRVVzYVVKQlFXMUNMRmRCUTJwRkxFOUJRMFV6YWtVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWE5DTEVsQlVUTkdNVzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWTml0RkxHbENRVUZ0UWl4VFFVRlRlQzlGTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnZPVVVzWTBGQlowSXNVMEZCVXk5d1FpeEZRVUZYUXl4SFFVTnNSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnpRaTl0UWl4SlFWRm9TRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWT0N0RkxHMUNRVUZ4UWl4WFFVTnVSU3hQUVVGUGVEbEZMRXRCUVV0MU9VVXNhVUpCUVdsQ0xFdEJVUzlDYkhSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmVTOUZMR3RDUVVGdlFpeFhRVU5zUlN4UFFVTkZOVzFGTEVWQlFVczBjRU1zVVVGQlVUQkVMSGRDUVVGM1FqZHJSQ3hMUVVGTmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRnBRaXhKUVZGMFJuUnZRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWV2RvUml4clFrRkJiMElzVTBGQlV6Tm9SaXhIUVVNelJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNSVUZCUjJwRExFbEJVM1pFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmEyZEdMR05CUVdkQ0xGTkJRVk0zYzBJc1JVRkJWME1zUjBGRGJFWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQmFVSXpiVUlzU1VGUk0wY3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWV2xvUml4dlFrRkJjMElzVjBGRGNFVXNUMEZCVHpNdlJTeExRVUZMTUM5RkxHdENRVUZyUWl4TFFWRm9RM0oyUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVlc4NFJTeG5Ra0ZCYTBJc1YwRkRhRVVzVDBGRFJYWnFSU3hGUVVGTE5IQkRMRkZCUVZFd1JDeDNRa0ZCZDBJM2EwUXNTMEZCVFhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmNVSXNTVUZSTVVZMWIwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVjVLMFVzWjBKQlFXdENMRk5CUVZOd0wwVXNSMEZEZWtVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWTjJSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVldzNVJTeFpRVUZqTEZOQlFWTTNjRUlzUlVGQlYwTXNSMEZEYUVZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCY1VKcWJrSXNTVUZSTDBjelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZUQXJSU3hyUWtGQmIwSXNWMEZEYkVVc1QwRkJUM0E1UlN4TFFVRkxiVGxGTEdkQ1FVRm5RaXhMUVZFNVFqbHpRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWVEl2UlN4elFrRkJkMElzVjBGRGRFVXNUMEZEUlRsdFJTeEZRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMEkzYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRExHVkJRV2RDTEVsQlVYSkhkbTlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWYTJoR0xITkNRVUYzUWl4VFFVRlROMmhHTEVkQlF5OUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnRaMFlzYTBKQlFXOUNMRk5CUVZNNWMwSXNSVUZCVjBNc1IwRkRkRVlzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXZENOVzFDTEVsQlVURklNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZ0YUVZc2QwSkJRVEJDTEZkQlEzaEZMRTlCUVU4M0wwVXNTMEZCU3pRdlJTeHpRa0ZCYzBJc1MwRlJjRU4yZGtJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZVMkwwVXNhVUpCUVcxQ0xGZEJRMnBGTEU5QlEwVm9ia1VzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYTkNMRWxCVVROR00yOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZiMmhHTEdsQ1FVRnRRaXhUUVVGVEwyaEdMRWRCUXpGRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEZRVUZIYWtNc1NVRlRka1J6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZWdlowWXNZVUZCWlN4VFFVRlRMM05DTEVWQlFWZERMRWRCUTJwR0xFOUJRVTk2TmtNc1JVRkJTelJ3UXl4UlFVRlJLMFFzTUVKQlFUQkNiR3hFTEV0QlFVMHNSVUZCUnl0NFJDeEZRVUZYTVVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhOQ2FHNUNMRWxCVVdoSU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnhhRVlzYlVKQlFYRkNMRmRCUTI1RkxFOUJRVTh2TDBVc1MwRkJTemd2UlN4cFFrRkJhVUlzUzBGUkwwSjZka0lzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlY1T0VVc1YwRkJZU3hYUVVNelJDeFBRVU5GTldwRkxFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV2RDTEVsQlVUZEZiSEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVOd1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkROMFFzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVm5MMFVzVjBGQllTeFhRVU16UkN4UFFVRjVReXhOUVVGc1EyNXRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlVyTDBVc2NVSkJRWFZDTEZkQlEzSkZMRTlCUTBWc2JrVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1JTeGpRVUZsTEVsQlVYQkhlRzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWYzJoR0xIRkNRVUYxUWl4VFFVRlRhbWxHTEVkQlF6bEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnhaMFlzYVVKQlFXMUNMRk5CUVZOb2RFSXNSVUZCVjBNc1IwRkRja1lzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpGTEdOQlFXVTNiVUlzU1VGUmVrZ3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWWFZvUml4MVFrRkJlVUlzVjBGRGRrVXNUMEZCVDJwblJpeExRVUZMWjJkR0xIRkNRVUZ4UWl4TFFWRnVRek4yUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVlhWblJpeHZRa0ZCYzBJc1YwRkRjRVVzVDBGQmMwTXhia1VzUlVGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2JHcEVMRXRCUVUwc1MwRlJOVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZWM2FFWXNiMEpCUVhOQ0xGTkJRVk51YVVZc1IwRkROMFVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNSMEZCVXl4TFFWTnNSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVlhOblJpeG5Ra0ZCYTBJc1UwRkJVMnBvUml4RlFVRlBhVEJFTEVkQlEyaEdMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSZFVRc2JVSkJRVzFDTVd0RUxFdEJRVTBzUjBGQlNXcERMRVZCUVU5cE1FUXNTVUZSTVVRelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZYbG9SaXh6UWtGQmQwSXNWMEZEZEVVc1QwRkJUMjVuUml4TFFVRkxhMmRHTEc5Q1FVRnZRaXhMUVZWc1F6ZDJRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3YjBJc1owSkJRV3RDTEVOQlFVTXNTMEZKTTBSdU5VTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd05rVXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVONFJTeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKcU9FUXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0Z1Um5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSnFPRVFzVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTXZSU3hKUVVGUFF5eEZRVUZOTEVOQlExaHpka0lzZDBKQlFYbENOMjlGTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKZDNaQ0xEWkNRVU4yUkdoM1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSm9PVVFzVTBGQlZTdDZReXhKUVZOMFJDeFBRVTVCY2pWRExFVkJRVXMwY0VNc1VVRkJVVEpDTEd0Q1FVRXJReXhGUVVGUFowOHNSVUZETDBSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5tMUNMSE5DUVVGelFtNW5RaXhYUVVGWmRFa3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYTkNjRFpGTEZWQlFWVXliVVFzWVVGRE9VZDFUQ3hIUVVOQlFTeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBJeE5FSXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTjJSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVTndReXhQUVVGUGVtOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVRnpRbnB1UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkMFJqaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVRnpRbnB1UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRM1JHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4SlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVU4wUTNSMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW5odlFpdzJRa0ZEYmtWU0xFVkJRVWw1ZGtJc2RVSkJRWFZDZG1sR0xFZEJRek5DTEUxQlEwWXNVVUZEUlhkYUxFVkJRVXMwY0VNc1VVRkJVVFpDTEc5Q1FVRnZRalpPTEVWQlFVdDBSaXhGUVVOd1F6aEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVRnpRbkJuUWl4cFFrRkROVU55U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd05rVXNWVUZCVlRKdFJDeGhRVU4wUkdkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5tMUNMSE5DUVVGelFuQTJSU3hWUVVGVk5HMUVMR1ZCU1RWRUxFOUJRVTkxVEN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3TmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGRFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd2JrSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEYmtWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd2JrSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTjBSaXhKUVVGSmJubEVMRWRCUTBwQkxFVkJRVWxwVkN4RlFVRlJPSFJGTERoQ1FVTk9hbWhHTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzU1VGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTV2UWl4NVFrRkhPVU51TmtNc1JVRkJTelJ3UXl4UlFVRlJORUlzTUVKQlFUQkNlSGRETEVWQlFWTnJMME1zUlVGRE9VTndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3WjBJc2FVSkJRV3RDY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMmJVSXNjMEpCUVhOQ2NEWkZMRlZCUVZVeWJVUXNaVUZSZUVoblRDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndOa1VzVlVGQlZUSm9SaXd5UWtGQk5rSXNWMEZEYWtZc1QwRkRSVGx2UlN4RlFVRkxOSEJETEZGQlFWRXdSQ3gzUWtGQmQwSTNhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJjVUlzVFVGUk1VWjRjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRWE5DY0RaRkxGVkJRVlUyYUVZc01rSkJRVFpDTEZOQlFWTjRhVVlzUjBGRE1VWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRWxCUVV0cVF5eEpRVk42UkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndOa1VzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTnFSeXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTm0xQ0xITkNRVUZ6UW5BMlJTeFZRVUZWT0doR0xEWkNRVUVyUWl4WFFVTnVSaXhQUVVGUGVHZEdMRXRCUVV0MVowWXNNa0pCUVRKQ0xFdEJUM0pEYUhCRkxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEZGtVc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDYkRoRUxGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhiRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2JEaEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE9VVXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdIcDZSQ3hMUVVFMlF5eFBRVUYwUTJsRExFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTJoRmJXaEdMRTlCUVN0RExFOUJRWFJEYm1oR0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTJ4RmIyaEdMRTFCUVRoRExFOUJRWFJEY0doR0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTJwRmQwVXNTMEZCTmtNc1QwRkJkRU40UlN4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5vUlhGb1JpeFRRVUZwUkN4UFFVRjBRM0pvUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU53UlhOb1JpeFRRVUZwUkN4UFFVRjBRM1JvUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU53UlhWb1JpeGhRVUZ4UkN4UFFVRjBRM1pvUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU40Ulhkb1JpeFhRVUZ0UkN4UFFVRjBRM2hvUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU4wUlhsb1JpeFRRVUZyUkN4UFFVRjJRM3BvUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVlVGQlpXTXNSVUZCV1hKNVJDeEZRVU55UlRoeVJDeFRRVUZWT1hKRUxFVkJRVWwxZUVRc1JVRkJTWE54UWl4bFFVRnBRamx4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoTXpoRUxGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRhRWN3YUVZc1pVRkJLMFFzVDBGQk9VTXhhRVlzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVdsRExHZENRVUZuUW5sT0xFVkJRVXNzVlVGQlpXTXNSVUZCV1hKNVJDeEhRVTF3Uml4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRak0wUWl4clFrRkJiMElzVTBGQlUyZFNMRWRCUTNSRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUTNCRExFOUJRVTh4YjBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ01XNUNMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWM0pHT0VVc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ01XNUNMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGNrWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSk1IRkNMRkZCUVZGNE9VVXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQzWmhMRmxCUXpGRE5tWXNSVUZCU1c5M1FpeFZRVUZWYkdwR0xFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVRCRmQzUkVMRVZCUVU5cVlTeFhRVU55Um5WbUxFVkJRVWx4ZDBJc1UwRkJVMjVxUml4SFFVTmlMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUY1UlhkMFJDeEZRVUZQYW1Fc1YwRkRjRVoxWml4RlFVRkplVWNzVVVGQlVYWTFSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmMzZENMRmxCUVZsd2FrWXNSMEZEYUVJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsMWQwSXNXVUZCV1hKcVJpeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1hkM1FpeG5Ra0ZCWjBKMGFrWXNSMEZEY0VJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOTJZU3haUVVNeFF6Wm1MRVZCUVVsNWQwSXNZMEZCWTNacVJpeEhRVU5zUWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1RCM1FpeFpRVUZaZUdwR0xFZEJRMmhDTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZEZEVOcWRVSXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoYm05Q0xEWkNRVU0xUkZJc1JVRkJTV3R5UWl4WFFVRlhhQ3RGTEVkQlEyWXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVa3lkMElzYTBKQlFXdENlbXBHTEVkQlEzUkNMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEzSkZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NtNUNMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUTJ4RlFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NtNUNMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRja1lzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRVZCUlVNc1QwRkVWSEo1UkN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVHpOaExGZEJRMHdzUlVGRFFYZ3pReXhIUVVsTExFOUJSRlJCTEVWQlFYTkZhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJXNUhheTlETEVWQlFVOXlZU3hWUVVOTUxFVkJRMEU1TTBNc1IwRkpTeXhQUVVSVVFTeEZRVUZ4UldsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVZzUjJzdlF5eEZRVUZQY21Fc1ZVRkRUQ3hGUVVOQk9UTkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUek5oTEZkQlEwd3NSVUZEUVhnelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVkQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRkphVlFzUlVGQlVUUnZSU3hsUVVWV01YQkNMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVzVDTEhsQ1FVazVRaXhQUVVSVWNIbEVMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVkQlEwRTNNME1zU1VGVFRpdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUl3U1N4TFFVRlBMRU5CUTJoRVF5eFpRVUZoTEVWQlEySkRMRmRCUVZrc1JVRkRXa01zVjBGQldTeEZRVU5hUXl4WlFVRmhMRVZCUTJKRExGZEJRVmtzUlVGRFdrTXNZVUZCWXl4RlFVTmtReXhoUVVGakxFVkJRMlJETEZWQlFWY3NSVUZEV0VNc1dVRkJZU3hGUVVOaVF5eFhRVUZaTEVkQlExcERMR0ZCUVdNc1IwRkRaRU1zVjBGQldTeEhRVU5hUXl4WlFVRmhMRWRCUTJKRExGVkJRVmNzUjBGRFdFTXNZMEZCWlN4SFFVTm1ReXhqUVVGbExFZEJRMlpETEZsQlFXRXNSMEZEWWtNc1dVRkJZU3hKUVUxbWRIbENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRalpLTEUxQlFWRXNRMEZEYWtSRExHVkJRV2RDTEVWQlEyaENReXhsUVVGblFpeEZRVU5vUWtNc1pVRkJaMElzUjBGUGJFSXhlVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlV5T1VVc1VVRkJWU3hYUVVNM1JDeFBRVUU0UWpsclJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVk5qaEZMRkZCUVZVc1UwRkJVM2c1UlN4SFFVTjBSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUUTVSU3hWUVVGWkxGZEJReTlFTEU5QlFVOHZhMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVFk1UlN4UlFVRlZMRmRCUXpkRUxFOUJRWGxETEUxQlFXeERhR3hGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlhOclJpeFZRVUZaTEZkQlF5OUVMRTlCUVRoQ2VuSkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTVUZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVjFhVVlzVlVGQldTeFRRVUZUYkdwR0xFZEJRM2hGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZkV3RHTEZsQlFXTXNWMEZEYWtVc1QwRkJUekZ5UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWZDJ0R0xGVkJRVmtzVjBGREwwUXNUMEZCZVVNc1RVRkJiRU16Y2tVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVmVXdEdMRk5CUVZjc1YwRkRPVVFzVDBGQmVVVTFja1VzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhKUVZGeVNIRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWWGRwUml4VFFVRlhMRk5CUVZOdWFrWXNSMEZEZGtVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlV3YTBZc1YwRkJZU3hYUVVOb1JTeFBRVUZQTjNKRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZVeWEwWXNVMEZCVnl4WFFVTTVSQ3hQUVVGNVF5eE5RVUZzUXpseVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVTRORVFzVVVGQlZTeFhRVU0zUkN4UFFVRjNSV3BuUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVYQkljWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWTkRSRUxGRkJRVlVzVTBGQlUzWTFSQ3hIUVVOMFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRSclJpeFZRVUZaTEZkQlF5OUVMRTlCUVU4dmNrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUWnJSaXhSUVVGVkxGZEJRemRFTEU5QlFYbERMRTFCUVd4RGFITkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVFI0UlN4WlFVRmpMRmRCUTJwRkxFOUJRVGhDTHpSRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZWNWFVWXNXVUZCWXl4VFFVRlRjR3BHTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVk9HdEdMR05CUVdkQ0xGZEJRMjVGTEU5QlFVOXFjMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWU3RyUml4WlFVRmpMRmRCUTJwRkxFOUJRWGxETEUxQlFXeERiSE5GTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVldkc1JpeFpRVUZqTEZkQlEycEZMRTlCUVRoQ2JuTkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVXdhVVlzV1VGQll5eFRRVUZUY21wR0xFZEJRekZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZhV3hHTEdOQlFXZENMRmRCUTI1RkxFOUJRVTl3YzBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVld0c1JpeFpRVUZqTEZkQlEycEZMRTlCUVhsRExFMUJRV3hEY25ORkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZXMXNSaXhuUWtGQmEwSXNWMEZEY2tVc1QwRkJPRUowYzBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRKcFJpeG5Ra0ZCYTBJc1UwRkJVM1JxUml4SFFVTTVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZXOXNSaXhyUWtGQmIwSXNWMEZEZGtVc1QwRkJUM1p6UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWY1d4R0xHZENRVUZyUWl4WFFVTnlSU3hQUVVGNVF5eE5RVUZzUTNoelJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVnpiRVlzWTBGQlowSXNWMEZEYmtVc1QwRkJPRUo2YzBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRScFJpeGpRVUZuUWl4VFFVRlRkbXBHTEVkQlF6VkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVmRXeEdMR2RDUVVGclFpeFhRVU55UlN4UFFVRlBNWE5GTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlYzYkVZc1kwRkJaMElzVjBGRGJrVXNUMEZCZVVNc1RVRkJiRU16YzBVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVmVXeEdMRmxCUVdNc1YwRkRha1VzVDBGQk9FSTFjMFVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1IwRkJTU3hMUVZFelJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVFpwUml4WlFVRmpMRk5CUVZONGFrWXNSMEZETVVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlV3YkVZc1kwRkJaMElzVjBGRGJrVXNUMEZCVHpkelJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVk1teEdMRmxCUVdNc1YwRkRha1VzVDBGQk1FTXNUVUZCYmtNNWMwVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZlVGhGTEZkQlFXRXNWMEZEYUVVc1QwRkRSVFZxUlN4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmpMRWxCVVRORmJuQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZjVGxGTEZkQlFXRXNVMEZCVTJnclJTeEhRVU42UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWS3l0RkxHRkJRV1VzVjBGRGJFVXNUMEZCVDNvNVJTeExRVUZMS3pkRkxHZENRVUZYY0hGQ0xFbEJVWHBDZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZWbkwwVXNWMEZCWVN4WFFVTm9SU3hQUVVGNVF5eE5RVUZzUTI1dFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVTBiRVlzYTBKQlFXOUNMRmRCUTNaRkxFOUJRU3RDTDNORkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWxCUVVrc1NVRlJia1p4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZVNGFVWXNhMEpCUVc5Q0xGTkJRVk42YWtZc1IwRkRhRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVTJiRVlzYjBKQlFYTkNMRmRCUTNwRkxFOUJRVTlvZEVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRoc1JpeHJRa0ZCYjBJc1YwRkRka1VzVDBGQk1FTXNUVUZCYmtOcWRFVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVDJwRGRWZ3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dFFpeHhRa0ZCY1VKME5rVXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOMlJTeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dFFpeHhRa0ZCY1VKdU9FUXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0ZzUm5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSnVPRVFzVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTTVSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTlllbnBFTEV0QlFUWkRMRTlCUVhSRGFVTXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTTBUaXhGUVVGTExGTkJRV05qTEVWQlFWbHllVVFzUlVGRGFFVTRja1FzVTBGQlZUbHlSQ3hGUVVGSmRYaEVMRVZCUVVsemNVSXNaVUZCYVVJNWNVSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllUVTRSQ3hUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFd4SExFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWEZDTlRSQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGRFVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGRGNFTXNUMEZCVHpOdlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSXpia0lzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYY2tZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSXpia0lzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnlSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVa3djVUlzVVVGQlVYZzVSU3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGRGRFTnNkVUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaGNHOUNMRFpDUVVNMVJGSXNSVUZCU1d0eVFpeFhRVUZYYUN0RkxFZEJRMllzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dFFpeHhRa0ZCY1VKME5rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRja1VzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGJFVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU55Uml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVGSmFWUXNSVUZCVVRSdlJTeGxRVVZXTVhCQ0xFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaEwyNUNMREJDUVZWNlEzSkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjFDTEhGQ1FVRnhRblEyUlN4VlFVRlZNamxGTEZGQlFWVXNWMEZETjBRc1QwRkJPRUk1YTBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dFFpeHhRa0ZCY1VKME5rVXNWVUZCVlRZNFJTeFJRVUZWTEZOQlFWTjRPVVVzUjBGRGRFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ2REWkZMRlZCUVZVME9VVXNWVUZCV1N4WFFVTXZSQ3hQUVVGUEwydEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYRkNkRFpGTEZWQlFWVTJPVVVzVVVGQlZTeFhRVU0zUkN4UFFVRjVReXhOUVVGc1EyaHNSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWEZDZERaRkxGVkJRVlY1T0VVc1YwRkJZU3hYUVVOb1JTeFBRVU5GTldwRkxFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDI1Q0xHRkJRV01zU1VGUk0wVndjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWEZDZERaRkxGVkJRVlZ4T1VVc1YwRkJZU3hUUVVGVGFDdEZMRWRCUTNwRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ2REWkZMRlZCUVZVckswVXNZVUZCWlN4WFFVTnNSU3hQUVVGUGVqbEZMRXRCUVVzck4wVXNaMEpCUVZkd2NVSXNTVUZSZWtKMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBOa1VzVlVGQlZXY3ZSU3hYUVVGaExGZEJRMmhGTEU5QlFYbERMRTFCUVd4RGJtMUZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZWeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyYjBJc1owSkJRV3RDTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCU1RkRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGRFVXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2NEaEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoYWtaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNjRGhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkROMFVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXSHA2UkN4TFFVRTJReXhQUVVGMFEybERMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEyaEZiV3hHTEZWQlFWZHNkRVVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWsyZWtJc1pVRkRla055TUVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ2REaEVMRk5CUVZVcmVrTXNSMEZEZWtSNFJpeFRRVUZWT1hKRUxFVkJRVWwxZUVRc1JVRkJTWE54UWl4bFFVRnBRamx4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaTnpoRUxGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRMMFpyTDBVc2EwSkJRVzFDYW01RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSk5IUkNMSFZDUVVOcVJIQjFRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnJRbkk0UkN4VFFVRlZLM3BETEVkQlEzUkZPSFJDTEdsQ1FVRnBSU3hQUVVFNVEzQXZSU3hGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZSSzBJc2FVSkJRV2xDTWs0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFZEJUWFJHTEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNOelJDTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEY2tVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZEY0VNc1QwRkJUelZ2UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBJMWJrSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhjRVk0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBJMWJrSXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOd1JpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrd2NVSXNVVUZCVVhnNVJTeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUTNSRE5YUkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ09XNUNMRFpDUVVONFJWSXNSVUZCU1RoNlFpeFRRVUZUTlcxR0xFZEJRMklzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVU4wUTI1MVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmx5YjBJc05rSkJRek5FVWl4RlFVRkphM0pDTEZkQlFWZG9LMFVzUjBGRFppeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlF6RkVNM1JDTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNReXhyUWtGQmEwSTNia0lzTmtKQlEzSkdVaXhGUVVGSmEzVkNMR2xDUVVGcFFtaG9SaXhIUVVOeVFpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNXMTFRaXhuUWtGQlowSnFhRVlzUjBGRGNFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyTmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGNFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMmJrSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEYWtWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMmJrSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTndSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZGdGVVVXNaMEpCUTA1MGJFWXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEZRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ2VtNUNMSGxDUVVreFF5eFBRVVJVY0hsRUxFVkJRVWxwVkN4RlFVRlJORzlGTEdWQlJWWXhjRUlzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvYjBJc01FSkJSM1JEY0hsRUxFVkJRVWxwVkN4RlFVRlJhM05GTEhkQ1FVTk9jaTlGTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXdENlRzVDTERCQ1FVZG9SWEI1UkN4RlFVRkphVlFzUlVGQlVUQnpSU3gxUWtGRFRqY3ZSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUemxWTEc5Q1FVTk1MRVZCUTBGeU9VTXNTVUZUUm1sWkxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEo0TmtVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU40Uml4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnJRbkk0UkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXNUhjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRV3RDY2poRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETDBZc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0ROSUxFMUJRVGhETEU5QlFYUkROM0JFTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTkU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFVkJRMnBGZFRKRExFbEJRVFJETEU5QlFYUkRkakpETEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTkU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFZEJUV3BGTEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNReXhyUWtGQmEwSTVORUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU4yUml4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRM2hFTEU5QlFVODNiMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEkzYmtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGRFYzRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnJRamR1UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRM1JITEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDNaaExGbEJRekZETm1Zc1JVRkJTWEYxUWl4VFFVRlRibWhHTEVkQlEySXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkyWVN4WlFVTXhRelptTEVWQlFVazNhRUlzVDBGQlQycDRReXhIUVVOWUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNReXhyUWtGQmEwSjROa1VzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEZEVZc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnJRbmh1UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTnVSa0VzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXdENlRzVDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEZEVjc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVTXNUMEZFVkhKNVJDeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQTTJFc1YwRkRUQ3hGUVVOQmVETkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlR6TmhMRmRCUTB3c1JVRkRRWGd6UXl4SlFWVk9LM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRV3RDZURaRkxGVkJRVlY1WjBZc1UwRkJWeXhYUVVNdlJTeFBRVUU0UWpWdVJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q2VEWkZMRlZCUVZWM1owWXNVMEZCVnl4VFFVRlRibWhHTEVkQlEzaEdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q2VEWkZMRlZCUVZVd1owWXNWMEZCWVN4WFFVTnFSaXhQUVVGUE4yNUZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNReXhyUWtGQmEwSjROa1VzVlVGQlZUSm5SaXhUUVVGWExGZEJReTlGTEU5QlFYbERMRTFCUVd4RE9XNUZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnJRbmcyUlN4VlFVRlZjWGRETEU5QlFWTXNWMEZETjBVc1QwRkJPRUo0TTBJc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5nMlJTeFZRVUZWYzNkRExFOUJRVk1zVTBGQlUycDRReXhIUVVOMFJpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5nMlJTeFZRVUZWTkdkR0xGTkJRVmNzVjBGREwwVXNUMEZCVHk5dVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q2VEWkZMRlZCUVZVMlowWXNUMEZCVXl4WFFVTTNSU3hQUVVGNVF5eE5RVUZzUTJodlJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVXlPVVVzVVVGQlZTeFhRVU0xUkN4UFFVRTRRamxyUlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWTmpoRkxGRkJRVlVzVTBGQlUzZzVSU3hIUVVOeVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMk5rVXNWVUZCVlRRNVJTeFZRVUZaTEZkQlF6bEVMRTlCUVU4dmEwVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJOa1VzVlVGQlZUWTVSU3hSUVVGVkxGZEJRelZFTEU5QlFYbERMRTFCUVd4RGFHeEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyTmtVc1ZVRkJWV2R0Uml4aFFVRmxMRmRCUTJwRkxFOUJRMFZ1ZEVVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5yYmtJc2VVSkJRVEJDTEVsQlVTOUdPVzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWYTIxR0xHRkJRV1VzVTBGQlV6ZHRSaXhIUVVNeFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNSVUZCUjJwRExFbEJVM1pFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuWTJSU3hWUVVGVmFXMUdMRk5CUVZjc1UwRkJVelY1UWl4RlFVRlhReXhIUVVOcVJpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRVZCUVVjcmVFUXNSVUZCVnpGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVFd1FtNXVRaXhKUVZGd1NETkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblkyUlN4VlFVRlZiVzFHTEdWQlFXbENMRmRCUTI1RkxFOUJRVTgzYTBZc1MwRkJTelJyUml4aFFVRmhMRXRCVVROQ2RqQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblkyUlN4VlFVRlZlVGhGTEZkQlFXRXNWMEZETDBRc1QwRkRSVFZxUlN4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRmhMRWxCVVRGRmNuQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblkyUlN4VlFVRlZjVGxGTEZkQlFXRXNVMEZCVTJnclJTeEhRVU40UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWS3l0RkxHRkJRV1VzVjBGRGFrVXNUMEZCVDNvNVJTeExRVUZMS3pkRkxHZENRVUZYY0hGQ0xFbEJVWHBDZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWbkwwVXNWMEZCWVN4WFFVTXZSQ3hQUVVGNVF5eE5RVUZzUTI1dFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVXJMMFVzY1VKQlFYVkNMRmRCUTNwRkxFOUJRMFZzYmtVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJiVUlzU1VGUk5VYzNiMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDZGpaRkxGVkJRVlZ6YUVZc2NVSkJRWFZDTEZOQlFWTnFhVVlzUjBGRGJFWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRVZCUVVkcVF5eEpRVk4yUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJOa1VzVlVGQlZYRm5SaXhwUWtGQmJVSXNVMEZCVTJoMFFpeEZRVUZYUXl4SFFVTjZSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXMUNiRzVDTEVsQlVXcEpNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDZGpaRkxGVkJRVlYxYUVZc2RVSkJRWGxDTEZkQlF6TkZMRTlCUVU5cVowWXNTMEZCUzJkblJpeHhRa0ZCY1VJc1MwRlJia016ZGtJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWMVowWXNiMEpCUVhOQ0xGZEJRM2hGTEU5QlFYTkRNVzVGTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFbEJVVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuWTJSU3hWUVVGVmQyaEdMRzlDUVVGelFpeFRRVUZUYm1sR0xFZEJRMnBHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWRCUVZNc1MwRlRha1J6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWelowWXNaMEpCUVd0Q0xGTkJRVk5xYUVZc1JVRkJUMmt3UkN4SFFVTndSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVhWRUxHMUNRVUZ0UWpGclJDeExRVUZOTEVWQlFVZHFReXhGUVVGUGFUQkVMRWxCVVhwRU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVjVhRVlzYzBKQlFYZENMRmRCUXpGRkxFOUJRVTl1WjBZc1MwRkJTMnRuUml4dlFrRkJiMElzUzBGUE9VSXpiMFVzUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZOa1VzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTXpSU3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjBPRVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGMFJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUowT0VRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU5zUml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZZW5wRUxFdEJRVFpETEU5QlFYUkRhVU1zUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRhRVZ0YUVZc1QwRkJLME1zVDBGQmRFTnVhRVlzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRiRVU0Y2tRc1UwRkJWVGx5UkN4RlFVRkpkWGhFTEVWQlFVbHpjVUlzWlVGQmFVSTVjVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDT1RoRUxGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1NVRk5kRWNzVDBGSVNYTjRSQ3hKUVVOR1JTeEZRVUZKU3l4eFFrRkJkVUpPTEVkQlJYUkNReXhKUVZWVVZDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSXZORUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU14UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVU53UXl4UFFVRlBPVzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UWpsdVFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZDZSamhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UWpsdVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTNwR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1RCeFFpeFJRVUZSZURsRkxFZEJRMW9zVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5MllTeFpRVU14UXpabUxFVkJRVWx2ZDBJc1ZVRkJWV3hxUml4SFFVTmtMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRM1JEY0hWQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDZEc5Q0xEWkNRVU5vUlZJc1JVRkJTV3R5UWl4WFFVRlhhQ3RGTEVkQlEyWXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUo2TmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGVrVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKNmJrSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEZEVWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKNmJrSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTjZSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQTTJFc1YwRkRUQ3hGUVVOQmVETkRMRWRCU1Vzc1QwRkVWRUVzUlVGQlNXbFVMRVZCUVZFMGIwVXNaVUZGVmpGd1FpeEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXbENhbTlDTERCQ1FWVTNRM0pDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UW5vMlJTeFZRVUZWTWpsRkxGRkJRVlVzVjBGRGFrVXNUMEZCT0VJNWEwVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZOa1VzVlVGQlZUWTRSU3hSUVVGVkxGTkJRVk40T1VVc1IwRkRNVVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENlalpGTEZWQlFWVTBPVVVzVlVGQldTeFhRVU51UlN4UFFVRlBMMnRGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5yYmtJc2VVSkJRWGxDZWpaRkxGVkJRVlUyT1VVc1VVRkJWU3hYUVVOcVJTeFBRVUY1UXl4TlFVRnNRMmhzUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ2VqWkZMRlZCUVZWemEwWXNWVUZCV1N4WFFVTnVSU3hQUVVFNFFucHlSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRhMjVDTEhsQ1FVRjVRbm8yUlN4VlFVRlZkV2xHTEZWQlFWa3NVMEZCVTJ4cVJpeEhRVU0xUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUo2TmtVc1ZVRkJWWFZyUml4WlFVRmpMRmRCUTNKRkxFOUJRVTh4Y2tVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKNk5rVXNWVUZCVlhkclJpeFZRVUZaTEZkQlEyNUZMRTlCUVhsRExFMUJRV3hETTNKRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZOa1VzVlVGQlZYazRSU3hYUVVGaExGZEJRM0JGTEU5QlEwVTFha1VzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXdENMRWxCVVM5RmRIQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRhMjVDTEhsQ1FVRjVRbm8yUlN4VlFVRlZjVGxGTEZkQlFXRXNVMEZCVTJnclJTeEhRVU0zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UW5vMlJTeFZRVUZWS3l0RkxHRkJRV1VzVjBGRGRFVXNUMEZCVDNvNVJTeExRVUZMS3pkRkxHZENRVUZYY0hGQ0xFbEJVWHBDZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ2VqWkZMRlZCUVZWbkwwVXNWMEZCWVN4WFFVTndSU3hQUVVGNVF5eE5RVUZzUTI1dFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZWY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYVkNNVzlDTEdkQ1FVRnJRaXhEUVVGRExFZEJTVFZFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk50YmtJc2RVSkJRWFZDTVRaRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEZWtVc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk50YmtJc2RVSkJRWFZDZGpoRUxGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhjRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ2RqaEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGFFWXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdIcDZSQ3hMUVVFMlF5eFBRVUYwUTJsRExFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTJoRmQyeEdMRmRCUVZsMmRFVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVbHJNRUlzWjBKQlF6RkRNVEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UW5nNFJDeFRRVUZWSzNwRExFZEJRM1JFZUVZc1UwRkJWVGx5UkN4RlFVRkpkWGhFTEVWQlFVbHpjVUlzWlVGQmFVSTVjVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaUzg0UkN4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVsQlRYQkhMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ2FEVkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRlRVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkRjRU1zVDBGQlR5OXZRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkJkVUl2YmtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGRrWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkJkVUl2YmtJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU4yUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWt3Y1VJc1VVRkJVWGc1UlN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRM1JET1hSQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DYUc5Q0xEWkNRVU55UlZJc1JVRkJTVzB3UWl4VlFVRlZhbTVHTEVkQlEyUXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekp1UWl4bFFVTjBRM0oxUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVjJiMElzTmtKQlF6bEVVaXhGUVVGSmEzSkNMRmRCUVZkb0swVXNSMEZEWml4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFqRTJSU3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU4yUlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakZ1UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTndSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakZ1UWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTNaR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4RlFVVkRMRTlCUkZSeWVVUXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVWGQ1UlN4cFFrRkRUak5zUml4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVWQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6YmtJc2VVSkJTWFpETEU5QlJGUndlVVFzUlVGQlNXbFVMRVZCUVZFMGIwVXNaVUZGVmpGd1FpeEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXeHZRaXd3UWtGVk0wTnlRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkJkVUl4TmtVc1ZVRkJWVEk1UlN4UlFVRlZMRmRCUXk5RUxFOUJRVGhDT1d0RkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ01UWkZMRlZCUVZVMk9FVXNVVUZCVlN4VFFVRlRlRGxGTEVkQlEzaEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFqRTJSU3hWUVVGVk5EbEZMRlZCUVZrc1YwRkRha1VzVDBGQlR5OXJSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZOamxGTEZGQlFWVXNWMEZETDBRc1QwRkJlVU1zVFVGQmJFTm9iRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpFMlJTeFZRVUZWY1cxR0xHTkJRV2RDTEZkQlEzSkZMRTlCUTBWNGRFVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhWQ0xFbEJVVFZHYUhCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFqRTJSU3hWUVVGVmRXMUdMR05CUVdkQ0xGTkJRVk5zYmtZc1IwRkRPVVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVWQlFVZHFReXhKUVZOMlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjF1UWl4MVFrRkJkVUl4TmtVc1ZVRkJWWE50Uml4VlFVRlpMRk5CUVZOcWVrSXNSVUZCVjBNc1IwRkRja1lzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJkVUp5YmtJc1NVRlJha2d6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJeE5rVXNWVUZCVlhkdFJpeG5Ra0ZCYTBJc1YwRkRka1VzVDBGQlQyeHNSaXhMUVVGTGFXeEdMR05CUVdNc1MwRlJOVUkxTUVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ01UWkZMRlZCUVZWNU9FVXNWMEZCWVN4WFFVTnNSU3hQUVVORk5XcEZMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdkQ0xFbEJVVGRGZG5CQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFqRTJSU3hWUVVGVmNUbEZMRmRCUVdFc1UwRkJVMmdyUlN4SFFVTXpSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTkVRc1owSkJRV2RDTDJ0RUxFdEJRVTBzUlVGQlIycERMRWxCVVM5RGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZLeXRGTEdGQlFXVXNWMEZEY0VVc1QwRkJUM281UlN4TFFVRkxLemRGTEdkQ1FVRlhjSEZDTEVsQlVYcENkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk50YmtJc2RVSkJRWFZDTVRaRkxGVkJRVlZuTDBVc1YwRkJZU3hYUVVOc1JTeFBRVUY1UXl4TlFVRnNRMjV0UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlBha04xV0N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRM2hGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRbmc0UkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXNUdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UW5nNFJDeFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXk5RkxFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFoNmVrUXNTMEZCTmtNc1QwRkJkRU5wUXl4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5vUlRac1JpeFZRVUZyUkN4UFFVRjBRemRzUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU55UlRoc1JpeFhRVUZ0UkN4UFFVRjBRemxzUml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU4wUlRoeVJDeFRRVUZWT1hKRUxFVkJRVWwxZUVRc1JVRkJTWE54UWl4bFFVRnBRamx4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRV00xTjBNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTnFSeXRzUml4blFrRkJhVUk1ZEVVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNaMDRzUlVGQlN5eEhRVUZITEVkQlEycEZlVEJDTEdkQ1FVRnBRaTkwUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzU1VGTmJrVXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DYWpWQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGRrVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGRGNFTXNUMEZCVDJod1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSm9iMElzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYZEVZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSm9iMElzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTjBSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVa3djVUlzVVVGQlVYZzVSU3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSk1EQkNMR0ZCUVdGNGJrWXNSMEZEYWtJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVreU1FSXNZMEZCWTNwdVJpeEhRVU5zUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZEZEVOc1RpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZM0JJTERaQ1FVTTNSRklzUlVGQlNXdHlRaXhYUVVGWGFDdEZMRWRCUTJZc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVrME1FSXNiVUpCUVcxQ01XNUdMRWRCUTNaQ0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSk5qQkNMRzFDUVVGdFFqTnVSaXhIUVVOMlFpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOMFJTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpOdVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU51UlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpOdVFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEzUkdMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEZRVVZETEU5QlJGUnllVVFzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRTBiMFVzWlVGRlZqRndRaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmpMMGNzZVVKQlNTOUNMRTlCUkZSd2VVUXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1NVRlZUaXQzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlRJNVJTeFJRVUZWTEZkQlF6bEVMRTlCUVRoQ09XdEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVTJPRVVzVVVGQlZTeFRRVUZUZURsRkxFZEJRM1pGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZORGxGTEZWQlFWa3NWMEZEYUVVc1QwRkJUeTlyUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWTmpsRkxGRkJRVlVzVjBGRE9VUXNUMEZCZVVNc1RVRkJiRU5vYkVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTTJSU3hWUVVGVmFXNUdMR0ZCUVdVc1YwRkRia1VzVDBGQk9FSndkVVVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWVFp0Uml4aFFVRmxMRk5CUVZONGJrWXNSMEZETlVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DTXpaRkxGVkJRVlZyYmtZc1pVRkJhVUlzVjBGRGNrVXNUMEZCVDNKMVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTTJSU3hWUVVGVmJXNUdMR0ZCUVdVc1YwRkRia1VzVDBGQmVVTXNUVUZCYkVOMGRVVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZiMjVHTEdOQlFXZENMRmRCUTNCRkxFOUJRVGhDZG5WRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZVNGJVWXNZMEZCWjBJc1UwRkJVM3B1Uml4SFFVTTNSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSXpOa1VzVlVGQlZYRnVSaXhuUWtGQmEwSXNWMEZEZEVVc1QwRkJUM2gxUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWYzI1R0xHTkJRV2RDTEZkQlEzQkZMRTlCUVhsRExFMUJRV3hEZW5WRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSXpOa1VzVlVGQlZYazRSU3hYUVVGaExGZEJRMnBGTEU5QlEwVTFha1VzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGbExFbEJVVFZGY0Vrc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZWeE9VVXNWMEZCWVN4VFFVRlRhQ3RGTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVXJLMFVzWVVGQlpTeFhRVU51UlN4UFFVRlBlamxGTEV0QlFVc3JOMFVzWjBKQlFWZHdjVUlzU1VGUmVrSjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWV2N2UlN4WFFVRmhMRmRCUTJwRkxFOUJRWGxETEUxQlFXeERibTFGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlhWdVJpeHRRa0ZCY1VJc1YwRkRla1VzVDBGQkswSXhkVVVzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWU3R0Uml4dFFrRkJjVUlzVTBGQlV6RnVSaXhIUVVOc1JpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlhkdVJpeHhRa0ZCZFVJc1YwRkRNMFVzVDBGQlR6TjFSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZlVzVHTEcxQ1FVRnhRaXhYUVVONlJTeFBRVUY1UXl4TlFVRnNRelYxUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZVd2JrWXNiVUpCUVhGQ0xGZEJRM3BGTEU5QlFTdENOM1ZGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFZEJRVWNzU1VGUmJFWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DTXpaRkxGVkJRVlZuYmtZc2JVSkJRWEZDTEZOQlFWTXpia1lzUjBGRGJFWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZVeWJrWXNjVUpCUVhWQ0xGZEJRek5GTEU5QlFVODVkVVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWVFJ1Uml4dFFrRkJjVUlzVjBGRGVrVXNUMEZCZVVNc1RVRkJiRU12ZFVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJWWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMWIwSXNaMEpCUVd0Q0xFTkJRVU1zUzBGSmFrUnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRE9VUXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1hvNFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZWHBGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZsNk9FUXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOeVJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWVURkNMRmxCUVc5RUxFOUJRWFJEYW01R0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTNaRmEyNUdMRzFDUVVFeVJDeFBRVUYwUTJ4dVJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVNNVJXMXVSaXhyUWtGQmJVSnNka1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SlFVRkpMRWRCUTNCRk5qRkNMREJDUVVFd1JTeFBRVUU1UTNCdVJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJhVU1zWjBKQlFXZENlVTRzUlVGQlN5eFZRVUZsWXl4RlFVRlpjbmxFTEVWQlF6ZEdjVzVHTEc5Q1FVRnhRbkIyUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFbEJRVWtzUjBGRGRFVXJNVUlzV1VGQllYSjJSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NSMEZEZEVSbk1rSXNWVUZCYlVRc1QwRkJka04yYmtZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZWQlFXVmpMRVZCUVZseWVVUXNSVUZEZEVWM2JrWXNhMEpCUVcxQ2RuWkZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UW1kT0xFVkJRVXNzU1VGQlNTeEhRVU53UldzeVFpeHZRa0ZCY1VKNGRrVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhKUVVGSkxFZEJRM1JGYlRKQ0xHdENRVUZ0UW5wMlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWxCUVVrc1IwRkRjRVZ2TWtJc2JVSkJRVzlDTVhaRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRbWRPTEVWQlFVc3NTVUZCU1N4SFFVTnlSWEV5UWl4WFFVRlpNM1pGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1NVRkJTU3hIUVVNM1JITXlRaXhsUVVGblFqVjJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVsQlFVa3NSMEZEYWtWMU1rSXNaMEpCUVhsRUxFOUJRWFpET1c1R0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VlFVRmxZeXhGUVVGWmNubEVMRVZCUXpWRksyNUdMR2RDUVVGNVJDeFBRVUYyUXk5dVJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVNMVJXZHZSaXhaUVVGeFJDeFBRVUYyUTJodlJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVONFJXbHZSaXhsUVVGM1JDeFBRVUYyUTJwdlJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVNelJXdHZSaXhoUVVGelJDeFBRVUYyUTJ4dlJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVONlJXMXZSaXh4UWtGQk9FUXNUMEZCZGtOdWIwWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTTBUaXhGUVVGTExGVkJRV1ZqTEVWQlFWbHllVVFzUlVGRGFrWnZiMFlzV1VGQmNVUXNUMEZCZGtOd2IwWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTTBUaXhGUVVGTExGVkJRV1ZqTEVWQlFWbHllVVFzUlVGRGVFVTRaMFlzZDBKQlFYbENOMjlGTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKZDNaQ0xEWkNRVU4yUkdoM1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSm9PVVFzVTBGQlZTdDZReXhKUVZOMFJDeFBRVTVCY2pWRExFVkJRVXMwY0VNc1VVRkJVVEpDTEd0Q1FVRXJReXhGUVVGUFowOHNSVUZETDBSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrelowSXNWMEZCV1hSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRKdFJDeGhRVU14Um5WTUxFZEJRMEZCTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWbHNOVUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU0zUkN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRM0JETEU5QlFVOXFjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXV3B2UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjMVJUaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWbHFiMElzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTTFSU3hMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVazRNa0lzWlVGQlpUVndSaXhIUVVOdVFpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNTc3lRaXh6UWtGQmMwSTNjRVlzUjBGRE1VSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbG5NMElzY1VKQlFYRkNPWEJHTEVkQlEzcENMRTFCUTBZc1MwRkJTeXhIUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkphVE5DTERaQ1FVRTJRaTl3Uml4SFFVTnFReXhOUVVOR0xFdEJRVXNzUjBGRFEwRXNSVUZCWjBOM2RFUXNSVUZCVDJ4aExGZEJRek5EZDJZc1JVRkJTV3N6UWl4MVFrRkJkVUpvY1VZc1IwRkRNMElzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVhkRmQzUkVMRVZCUVU5cVlTeFhRVU51Um5WbUxFVkJRVWx0TTBJc1pVRkJaV3B4Uml4SFFVTnVRaXhOUVVOR0xFdEJRVXNzUjBGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTVzh6UWl4aFFVRmhiSEZHTEVkQlEycENMRTFCUTBZc1MwRkJTeXhIUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkpjVE5DTEhGQ1FVRnhRbTV4Uml4SFFVTjZRaXhOUVVOR0xFdEJRVXNzUjBGRFEwRXNSVUZCWjBOM2RFUXNSVUZCVDJ4aExGZEJRek5EZDJZc1JVRkJTWE16UWl4MVFrRkJkVUp3Y1VZc1IwRkRNMElzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWwxTTBJc2NVSkJRWEZDY25GR0xFZEJRM3BDTEUxQlEwWXNTMEZCU3l4SFFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKZHpOQ0xITkNRVUZ6UW5SeFJpeEhRVU14UWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQlowTjNkRVFzUlVGQlQyeGhMRmRCUXpORGQyWXNSVUZCU1hrelFpeGpRVUZqZG5GR0xFZEJRMnhDTEUxQlEwWXNTMEZCU3l4SFFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKTUROQ0xHdENRVUZyUW5oeFJpeEhRVU4wUWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1RJelFpeHRRa0ZCYlVKNmNVWXNSMEZEZGtJc1RVRkRSaXhMUVVGTExFZEJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrME0wSXNiVUpCUVcxQ01YRkdMRWRCUTNaQ0xFMUJRMFlzUzBGQlN5eEhRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSk5qTkNMR1ZCUVdVemNVWXNSMEZEYmtJc1RVRkRSaXhMUVVGTExFZEJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrNE0wSXNhMEpCUVd0Q05YRkdMRWRCUTNSQ0xFMUJRMFlzUzBGQlN5eEhRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSkt6TkNMR2RDUVVGblFqZHhSaXhIUVVOd1FpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNXYzBRaXgzUWtGQmQwSTVjVVlzUjBGRE5VSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbHBORUlzWlVGQlpTOXhSaXhIUVVOdVFpeE5RVU5HTEV0QlFVc3NTVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVTjBRM1IxUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbmh2UWl3MlFrRkRia1ZTTEVWQlFVbDVka0lzZFVKQlFYVkNkbWxHTEVkQlF6TkNMRTFCUTBZc1VVRkRSWGRhTEVWQlFVczBjRU1zVVVGQlVUWkNMRzlDUVVGdlFqWk9MRVZCUVV0MFJpeEZRVU53UXpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMVowSXNhVUpCUTJ4RGNra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk1tMUVMR0ZCUXpWRFowd3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk5HMUVMR1ZCU1d4RUxFOUJRVTkxVEN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXpWRUxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFZ1UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTjZSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU0xUlN4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJORUpwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1RVRkZla1JyTDBNc1JVRkJUM1JoTEZWQlEwd3NSMEZEUVRjelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVkQlEwRTNNME1zUjBGSlN5eFBRVVJVUVN4RlFVRTBRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TlFVVjZSR3N2UXl4RlFVRlBkR0VzVlVGRFRDeEhRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCYjBWcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGYWtkckwwTXNSVUZCVDNKaExGVkJRMHdzUlVGRFFUa3pReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFZEJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUUwUW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY2UkdzdlF5eEZRVUZQZEdFc1ZVRkRUQ3hIUVVOQk56TkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk5FSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zVFVGRmVrUnJMME1zUlVGQlQzUmhMRlZCUTB3c1IwRkRRVGN6UXl4SFFVbExMRTlCUkZSQkxFVkJRVFJDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFMUJSWHBFYXk5RExFVkJRVTkwWVN4VlFVTk1MRWRCUTBFM00wTXNSMEZKU3l4UFFVUlVRU3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4SFFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJORUpwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1RVRkZla1JyTDBNc1JVRkJUM1JoTEZWQlEwd3NSMEZEUVRjelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVkQlEwRTNNME1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TlFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEhRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNUVUZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUjBGRFFXdzBReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFZEJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hIUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zVFVGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1IwRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFMUJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRWRCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4SFFVTkJiRFJETEVsQlIwcEJMRVZCUVVscFZDeEZRVUZST0hSRkxEaENRVU5PYW1oR0xFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1NVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW01dlFpeDVRa0ZIT1VOdU5rTXNSVUZCU3pSd1F5eFJRVUZSTkVJc01FSkJRVEJDZUhkRExFVkJRVk5yTDBNc1JVRkRPVU53UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTldkQ0xHbENRVUZyUW5KSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRKdFJDeGxRVTl3UjJkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZsNVVDeGhRVUZsTEVOQlF5OURReXhOUVVGUExFVkJRMUJETEZWQlFWY3NSVUZEV0VNc1lVRkJZeXhIUVU5b1FqYzBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVjVjVVlzWlVGQmFVSXNWMEZETTBRc1QwRkJPRUkxZUVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZwY0VZc1pVRkJhVUlzVTBGQlV6VndSaXhIUVVOd1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV3Y1VZc2FVSkJRVzFDTEZkQlF6ZEVMRTlCUVU4M2VFVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVeWNVWXNaVUZCYVVJc1YwRkRNMFFzVDBGQmVVTXNUVUZCYkVNNWVFVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUUnhSaXh6UWtGQmQwSXNWMEZEYkVVc1QwRkJPRUl2ZUVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZyY0VZc2MwSkJRWGRDTEZOQlFWTTNjRVlzUjBGRE0wVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWTm5GR0xIZENRVUV3UWl4WFFVTndSU3hQUVVGUGFIbEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk9IRkdMSE5DUVVGM1FpeFhRVU5zUlN4UFFVRjVReXhOUVVGc1EycDVSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZLM0ZHTEhGQ1FVRjFRaXhYUVVOcVJTeFBRVUVyUW14NVJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hKUVVGSkxFbEJVVzVHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlcxd1JpeHhRa0ZCZFVJc1UwRkJVemx3Uml4SFFVTXhSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWbmNrWXNkVUpCUVhsQ0xGZEJRMjVGTEU5QlFVOXVlVVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVnBja1lzY1VKQlFYVkNMRmRCUTJwRkxFOUJRVEJETEUxQlFXNURjSGxGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZyY2tZc05rSkJRU3RDTEZkQlEzcEZMRTlCUVN0Q2NubEZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVsQlFVa3NTVUZSYmtaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmIzQkdMRFpDUVVFclFpeFRRVUZUTDNCR0xFZEJRMnhHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhwRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXMXlSaXdyUWtGQmFVTXNWMEZETTBVc1QwRkJUM1I1UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1VVRkJTVEo0UkN4SlFWRjZRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVzl5Uml3MlFrRkJLMElzVjBGRGVrVXNUMEZCTUVNc1RVRkJia04yZVVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFdEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlhGeVJpeDFRa0ZCZVVJc1YwRkRia1VzVDBGQkswSjRlVVVzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1NVRkJTU3hKUVZGdVJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVnhjRVlzZFVKQlFYbENMRk5CUVZOb2NVWXNSMEZETlVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZjM0pHTEhsQ1FVRXlRaXhYUVVOeVJTeFBRVUZQZW5sRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFJRVUZKTW5oRUxFbEJVWHBEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWZFhKR0xIVkNRVUY1UWl4WFFVTnVSU3hQUVVFd1F5eE5RVUZ1UXpGNVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTMEZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmQzSkdMR1ZCUVdsQ0xGZEJRek5FTEU5QlFYVkZNM2xGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzU1VGUmJraHhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZjM0JHTEdWQlFXbENMRk5CUVZOcWNVWXNSMEZEY0VVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZlWEpHTEdsQ1FVRnRRaXhYUVVNM1JDeFBRVUZQTlhsRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWTUhKR0xHVkJRV2xDTEZkQlF6TkVMRTlCUVhsRExFMUJRV3hETjNsRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVeWNrWXNZVUZCWlN4WFFVTjZSQ3hQUVVFNFFqbDVSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4SFFVRkpMRXRCVVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZYVndSaXhoUVVGbExGTkJRVk5zY1VZc1IwRkRiRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk5ISkdMR1ZCUVdsQ0xGZEJRek5FTEU5QlFVOHZlVVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVTJja1lzWVVGQlpTeFhRVU42UkN4UFFVRXdReXhOUVVGdVEyaDZSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzUzBGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZPSEpHTEhGQ1FVRjFRaXhYUVVOcVJTeFBRVUVyUW1wNlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hKUVVGSkxFbEJVVzVHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlhkd1JpeHhRa0ZCZFVJc1UwRkJVMjV4Uml4SFFVTXhSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVcmNrWXNkVUpCUVhsQ0xGZEJRMjVGTEU5QlFVOXNla1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVm5jMFlzY1VKQlFYVkNMRmRCUTJwRkxFOUJRVEJETEUxQlFXNURibnBGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZwYzBZc2RVSkJRWGxDTEZkQlEyNUZMRTlCUVN0Q2NIcEZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVsQlFVa3NTVUZSYmtaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmVYQkdMSFZDUVVGNVFpeFRRVUZUY0hGR0xFZEJRelZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhwRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXdHpSaXg1UWtGQk1rSXNWMEZEY2tVc1QwRkJUM0o2UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1VVRkJTVEo0UkN4SlFWRjZRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVzF6Uml4MVFrRkJlVUlzVjBGRGJrVXNUMEZCTUVNc1RVRkJia04wZWtVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFdEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlc5elJpeHhRa0ZCZFVJc1YwRkRha1VzVDBGQkswSjJla1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1NVRkJTU3hKUVZGdVJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXdjRVlzY1VKQlFYVkNMRk5CUVZOeWNVWXNSMEZETVVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZjWE5HTEhWQ1FVRjVRaXhYUVVOdVJTeFBRVUZQZUhwRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFJRVUZKTW5oRUxFbEJVWHBEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYzNOR0xIRkNRVUYxUWl4WFFVTnFSU3hQUVVFd1F5eE5RVUZ1UTNwNlJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTMEZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmRYTkdMSE5DUVVGM1FpeFhRVU5zUlN4UFFVRXJRakY2UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEpRVUZKTEVsQlVXNUdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVEp3Uml4elFrRkJkMElzVTBGQlUzUnhSaXhIUVVNelJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFZEJRVWxxUXl4SlFWRjZRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlYzYzBZc2QwSkJRVEJDTEZkQlEzQkZMRTlCUVU4emVrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRkZCUVVreWVFUXNTVUZSZWtOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWNWMwWXNjMEpCUVhkQ0xGZEJRMnhGTEU5QlFUQkRMRTFCUVc1RE5YcEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hMUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXdjMFlzWTBGQlowSXNWMEZETVVRc1QwRkJLMEkzZWtVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNTVUZCU1N4SlFWRnVSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlUwY0VZc1kwRkJaMElzVTBGQlUzWnhSaXhIUVVOdVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFZEJRVWxxUXl4SlFWRjZRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV5YzBZc1owSkJRV3RDTEZkQlF6VkVMRTlCUVU4NWVrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRkZCUVVreWVFUXNTVUZSZWtOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVMGMwWXNZMEZCWjBJc1YwRkRNVVFzVDBGQk1FTXNUVUZCYmtNdmVrVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUWnpSaXhyUWtGQmIwSXNWMEZET1VRc1QwRkJLMEpvTUVVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNTVUZCU1N4SlFWRnVSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlUyY0VZc2EwSkJRVzlDTEZOQlFWTjRjVVlzUjBGRGRrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWT0hOR0xHOUNRVUZ6UWl4WFFVTm9SU3hQUVVGUGFqQkZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVkszTkdMR3RDUVVGdlFpeFhRVU01UkN4UFFVRXdReXhOUVVGdVEyd3dSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzUzBGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZaM1JHTEcxQ1FVRnhRaXhYUVVNdlJDeFBRVUU0UW00d1JTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hIUVVGSkxFdEJVVE5GY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRod1JpeHRRa0ZCY1VJc1UwRkJVM3B4Uml4SFFVTjRSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWcGRFWXNjVUpCUVhWQ0xGZEJRMnBGTEU5QlFVOXdNRVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVnJkRVlzYlVKQlFYRkNMRmRCUXk5RUxFOUJRVEJETEUxQlFXNURjakJGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZ0ZEVZc2JVSkJRWEZDTEZkQlF5OUVMRTlCUVRoQ2REQkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVkQlFVa3NTMEZSTTBWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVkszQkdMRzFDUVVGeFFpeFRRVUZUTVhGR0xFZEJRM2hGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhwRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXOTBSaXh4UWtGQmRVSXNWMEZEYWtVc1QwRkJUM1l3UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1VVRkJTVEo0UkN4SlFWRjZRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWWEYwUml4dFFrRkJjVUlzVjBGREwwUXNUMEZCTUVNc1RVRkJia040TUVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFdEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlhOMFJpeGxRVUZwUWl4WFFVTXpSQ3hQUVVFNFFub3dSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4SFFVRkpMRXRCVVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXZHhSaXhsUVVGcFFpeFRRVUZUTTNGR0xFZEJRM0JGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhwRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZYVjBSaXhwUWtGQmJVSXNWMEZETjBRc1QwRkJUekV3UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1VVRkJTVEo0UkN4SlFWRjZRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWWGQwUml4bFFVRnBRaXhYUVVNelJDeFBRVUV3UXl4TlFVRnVRek13UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1MwRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWZVhSR0xHdENRVUZ2UWl4WFFVTTVSQ3hQUVVFNFFqVXdSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4SFFVRkpMRXRCVVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXbHhSaXhyUWtGQmIwSXNVMEZCVXpWeFJpeEhRVU4yUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVkQlFVbHFReXhKUVZGNlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXdkRVlzYjBKQlFYTkNMRmRCUTJoRkxFOUJRVTgzTUVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV5ZEVZc2EwSkJRVzlDTEZkQlF6bEVMRTlCUVRCRExFMUJRVzVET1RCRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVMGRFWXNaMEpCUVd0Q0xGZEJRelZFTEU5QlFUaENMekJGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFZEJRVWtzUzBGUk0wVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZhM0ZHTEdkQ1FVRnJRaXhUUVVGVE4zRkdMRWRCUTNKRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVFowUml4clFrRkJiMElzVjBGRE9VUXNUMEZCVDJneFJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRoMFJpeG5Ra0ZCYTBJc1YwRkROVVFzVDBGQk1FTXNUVUZCYmtOcU1VVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZTdDBSaXgzUWtGQk1FSXNWMEZEY0VVc1QwRkJPRUpzTVVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSMEZCU1N4TFFWRXpSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZ0Y1VZc2QwSkJRVEJDTEZOQlFWTTVjVVlzUjBGRE4wVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWWjNWR0xEQkNRVUUwUWl4WFFVTjBSU3hQUVVGUGJqRkZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmFYVkdMSGRDUVVFd1FpeFhRVU53UlN4UFFVRXdReXhOUVVGdVEzQXhSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzUzBGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZhM1ZHTEdWQlFXbENMRmRCUXpORUxFOUJRVGhDY2pGRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRWRCUVVrc1MwRlJNMFZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYjNGR0xHVkJRV2xDTEZOQlFWTXZjVVlzUjBGRGNFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYlhWR0xHbENRVUZ0UWl4WFFVTTNSQ3hQUVVGUGRERkZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmIzVkdMR1ZCUVdsQ0xGZEJRek5FTEU5QlFUQkRMRTFCUVc1RGRqRkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hMUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXlhRVlzTWtKQlFUWkNMRmRCUTNaRkxFOUJRMFU1YjBVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRWEZDTEUxQlVURkdlSEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVFpvUml3eVFrRkJOa0lzVTBGQlUzaHBSaXhIUVVOb1JpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNTVUZCUzJwRExFbEJVM3BFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRSb1JpeDFRa0ZCZVVJc1UwRkJVM1oxUWl4RlFVRlhReXhIUVVOMlJpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRWxCUVVzcmVFUXNSVUZCVnpGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGeFFqZHVRaXhKUVZGcVNETkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUaG9SaXcyUWtGQkswSXNWMEZEZWtVc1QwRkJUM2huUml4TFFVRkxkV2RHTERKQ1FVRXlRaXhMUVZWNlEyeDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxOMjlDTEdkQ1FVRnJRaXhEUVVGRExFdEJTWEJFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMnBGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVXhPRVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFMVJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxNVGhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRlRVVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXR2s0UWl4eFFrRkJjMEo0TVVVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNaMDRzUlVGQlN5eEhRVUZITEVkQlEzUkZiVGhDTERaQ1FVRTRRbm94UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzUjBGRE9VVnhNa0lzVjBGQldUTjJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVkQlFVY3NSMEZETlVSdk9FSXNVMEZCZDBRc1QwRkJOME16ZEVZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVXbERMR2RDUVVGblFubE9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVNelJUaG5SaXgzUWtGQmVVSTNiMFVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWwzZGtJc05rSkJRM1pFYUhkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtZzVSQ3hUUVVGVkszcERMRWxCVTNSRUxFOUJUa0Z5TlVNc1JVRkJTelJ3UXl4UlFVRlJNa0lzYTBKQlFTdERMRVZCUVU5blR5eEZRVU12UkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRWblFpeFhRVUZaZEVrc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWTW0xRUxHRkJRMmhIZFV3c1IwRkRRVUVzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpXNDFRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMmhGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkRjRU1zVDBGQlQyeHdRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxiRzlDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnk5Rk9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpXeHZRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF5OUZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJaME4zZEVRc1JVRkJUMnhoTEZkQlF6TkRkMllzUlVGQlNYRTRRaXgzUWtGQmQwSnVka1lzUjBGRE5VSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbHpPRUlzWjBOQlFXZERjSFpHTEVkQlEzQkRMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkplVE5DTEdOQlFXTjJjVVlzUjBGRGJFSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbDFPRUlzV1VGQldYSjJSaXhIUVVOb1FpeE5RVU5HTEV0QlFVc3NTVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVTjBRM1IxUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbmh2UWl3MlFrRkRia1ZTTEVWQlFVbDVka0lzZFVKQlFYVkNkbWxHTEVkQlF6TkNMRTFCUTBZc1VVRkRSWGRhTEVWQlFVczBjRU1zVVVGQlVUWkNMRzlDUVVGdlFqWk9MRVZCUVV0MFJpeEZRVU53UXpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM1owSXNhVUpCUTNKRGNra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk1tMUVMR0ZCUXk5RFowd3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk5HMUVMR1ZCU1hKRUxFOUJRVTkxVEN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxOelpGTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXk5RUxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGR1UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTFSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU12UlN4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVFJDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWHBFYXk5RExFVkJRVTkwWVN4VlFVTk1MRVZCUTBFM00wTXNSMEZKU3l4UFFVUlVRU3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4RlFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJORUpwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZla1JyTDBNc1JVRkJUM1JoTEZWQlEwd3NSVUZEUVRjelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkU0ZEVVc09FSkJRMDVxYUVZc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4MVZTeHhRa0ZEVEN4SlFVTkJkamxETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYm05Q0xIbENRVWM1UTI0MlF5eEZRVUZMTkhCRExGRkJRVkUwUWl3d1FrRkJNRUo0ZDBNc1JVRkJVMnN2UXl4RlFVTTVRM0JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzWjBJc2FVSkJRV3RDY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWTW0xRUxHVkJVVEZIWjB3c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWTW5WR0xIZENRVUV3UWl4WFFVTjJSU3hQUVVFclFqa3hSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SFFVRkhMRWxCVVd4R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNOa1VzVlVGQlZYZDFSaXgzUWtGQk1FSXNVMEZCVTI1MlJpeEhRVU5vUml4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxOelpGTEZWQlFWVTBkVVlzTUVKQlFUUkNMRmRCUTNwRkxFOUJRVTh2TVVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTnpaRkxGVkJRVlUyZFVZc2QwSkJRVEJDTEZkQlEzWkZMRTlCUVhsRExFMUJRV3hEYURKRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzTnVRaXhsUVVGbE56WkZMRlZCUVZVNGRVWXNaME5CUVd0RExGZEJReTlGTEU5QlFTdENhakpGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFZEJRVWNzU1VGUmJFWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZlWFZHTEdkRFFVRnJReXhUUVVGVGNIWkdMRWRCUTNoR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWU3QxUml4clEwRkJiME1zVjBGRGFrWXNUMEZCVDJ3eVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVldkMlJpeG5RMEZCYTBNc1YwRkRMMFVzVDBGQmVVTXNUVUZCYkVOdU1rVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNOa1VzVlVGQlZUQnpSaXhqUVVGblFpeFhRVU0zUkN4UFFVRXJRamQ2UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEhRVUZITEVsQlVXeEdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWVFJ3Uml4alFVRm5RaXhUUVVGVGRuRkdMRWRCUTNSRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWVEp6Uml4blFrRkJhMElzVjBGREwwUXNUMEZCVHpsNlJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVlRSelJpeGpRVUZuUWl4WFFVTTNSQ3hQUVVGNVF5eE5RVUZzUXk5NlJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVmFYWkdMRmxCUVdNc1YwRkRNMFFzVDBGQkswSndNa1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxOelpGTEZWQlFWVXdkVVlzV1VGQll5eFRRVUZUY25aR0xFZEJRM0JGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNOa1VzVlVGQlZXdDJSaXhqUVVGblFpeFhRVU0zUkN4UFFVRlBjakpGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZiWFpHTEZsQlFXTXNWMEZETTBRc1QwRkJlVU1zVFVGQmJFTjBNa1VzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWVEpvUml3eVFrRkJOa0lzVjBGRE1VVXNUMEZEUlRsdlJTeEZRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMEkzYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCY1VJc1RVRlJNVVo0Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWTm1oR0xESkNRVUUyUWl4VFFVRlRlR2xHTEVkQlEyNUdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hKUVVGTGFrTXNTVUZUZWtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk5HaEdMSFZDUVVGNVFpeFRRVUZUZG5WQ0xFVkJRVmRETEVkQlF6RkdMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSSzBRc01FSkJRVEJDYkd4RUxFdEJRVTBzU1VGQlN5dDRSQ3hGUVVGWE1VSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFYRkNOMjVDTEVsQlVXcElNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZPR2hHTERaQ1FVRXJRaXhYUVVNMVJTeFBRVUZQZUdkR0xFdEJRVXQxWjBZc01rSkJRVEpDTEV0QlZYcERiSGRDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1YjBJc1owSkJRV3RDTEVOQlFVTXNTMEZKYkVSdU5VTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZETDBRc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVE00UkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0V6T0VRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU4wUlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZWnpsQ0xFMUJRVTkyTWtVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVkQlEyaEVhemxDTEU5QlFYTkVMRTlCUVRkRGVuVkdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkZwUXl4blFrRkJaMEo1VGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRla1V3ZFVZc1QwRkJVWG95UlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzUjBGRGFrUnZPVUlzUzBGQlRURXlSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVkQlFVY3NSMEZEZEVSeE1rSXNWMEZCV1ROMlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWRCUVVjc1IwRkROVVJ4T1VJc1MwRkJUVE15UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFbEJRVWtzUjBGRGRrUjFka0lzZDBKQlFYbENOMjlGTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKZDNaQ0xEWkNRVU4yUkdoM1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSm9PVVFzVTBGQlZTdDZReXhKUVZOMFJDeFBRVTVCY2pWRExFVkJRVXMwY0VNc1VVRkJVVEpDTEd0Q1FVRXJReXhGUVVGUFowOHNSVUZETDBSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFM1owSXNWMEZCV1hSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlRKdFJDeGhRVU0xUm5WTUxFZEJRMEZCTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRndOVUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU01UkN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRM0JETEU5QlFVOXVjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVzV2UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjM1JUaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRnViMElzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTTNSU3hMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRV3RGZDNSRUxFVkJRVTlxWVN4WFFVTTNSWFZtTEVWQlFVbHpPVUlzVTBGQlUzQjNSaXhIUVVOaUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSmRUbENMRlZCUVZWeWQwWXNSMEZEWkN4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQmJVVjNkRVFzUlVGQlQycGhMRmRCUXpsRmRXWXNSVUZCU1hjNVFpeFZRVUZWZEhkR0xFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWw1T1VJc1VVRkJVWFozUml4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkplVE5DTEdOQlFXTjJjVVlzUjBGRGJFSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVa3dPVUlzVVVGQlVYaDNSaXhIUVVOYUxFMUJRMFlzUzBGQlN5eEpRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlEzUkRkSFZDTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNlRzlDTERaQ1FVTnVSVklzUlVGQlNYbDJRaXgxUWtGQmRVSjJhVVlzUjBGRE0wSXNUVUZEUml4UlFVTkZkMW9zUlVGQlN6UndReXhSUVVGUk5rSXNiMEpCUVc5Q05rNHNSVUZCUzNSR0xFVkJRM0JET0VVc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRsblFpeHBRa0ZEYmtOeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZVeWJVUXNZVUZETjBOblRDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZVMGJVUXNaVUZKYmtRc1QwRkJUM1ZNTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETjBRc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVzVDTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF6RkVRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUbHVRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRemRGTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hGUVVWRExFOUJSRlJ5ZVVRc1JVRkJPRVJwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZNMFpyTDBNc1JVRkJUM0poTEZWQlEwd3NSVUZEUVRrelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zUjBGSlN5eFBRVVJVUVN4RlFVRXJSR2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVTFSbXN2UXl4RlFVRlBjbUVzVlVGRFRDeEZRVU5CT1RORExFZEJTVXNzVDBGRVZFRXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1IwRkpTeXhQUVVSVVFTeEZRVUUwUW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY2UkdzdlF5eEZRVUZQZEdFc1ZVRkRUQ3hIUVVOQk56TkRMRWxCUjBwQkxFVkJRVWxwVkN4RlFVRlJPSFJGTERoQ1FVTk9hbWhHTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzU1VGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTV2UWl4NVFrRkhPVU51TmtNc1JVRkJTelJ3UXl4UlFVRlJORUlzTUVKQlFUQkNlSGRETEVWQlFWTnJMME1zUlVGRE9VTndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPV2RDTEdsQ1FVRnJRbkpKTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVEp0UkN4bFFVOTBSMmRNTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0ZuVml4TlFVRlJMRU5CUTNwRGJqSkZMRTlCUVZFc1JVRkRVbTh5UlN4TFFVRk5MRVZCUTA1RExHRkJRV01zUjBGTmFFSnlLMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVzFXTEU5QlFWTXNRMEZETVVORExGVkJRVmNzUlVGRFdFTXNWVUZCVnl4RlFVTllReXhWUVVGWExFZEJUMko2SzBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWY1hkR0xGTkJRVmNzVjBGRGRFUXNUMEZCYVVWNE0wVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eEpRVkUzUjNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZWNWRrWXNVMEZCVnl4VFFVRlRjSGRHTEVkQlF5OUVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlhOM1JpeFhRVUZoTEZkQlEzaEVMRTlCUVU5Nk0wVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZWMWQwWXNVMEZCVnl4WFFVTjBSQ3hQUVVGNVF5eE5RVUZzUXpFelJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVmQzZEdMRlZCUVZrc1YwRkRka1FzVDBGQkswSXpNMFVzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVXdka1lzVlVGQldTeFRRVUZUY25kR0xFZEJRMmhGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZYbDNSaXhaUVVGakxGZEJRM3BFTEU5QlFVODFNMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVXdkMFlzVlVGQldTeFhRVU4yUkN4UFFVRjVReXhOUVVGc1F6Y3pSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZNbmRHTEZWQlFWa3NWMEZEZGtRc1QwRkJhMFU1TTBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRTVSM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlV5ZGtZc1ZVRkJXU3hUUVVGVGRIZEdMRWRCUTJoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVFIzUml4WlFVRmpMRmRCUTNwRUxFOUJRVTh2TTBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlUyZDBZc1ZVRkJXU3hYUVVOMlJDeFBRVUY1UXl4TlFVRnNRMmcwUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWT0hkR0xGRkJRVlVzVjBGRGNrUXNUMEZCSzBKcU5FVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZVMGRrWXNVVUZCVlN4VFFVRlRkbmRHTEVkQlF6bEVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlN0M1JpeFZRVUZaTEZkQlEzWkVMRTlCUVU5c05FVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZWbmVFWXNVVUZCVlN4WFFVTnlSQ3hQUVVGNVF5eE5RVUZzUTI0MFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVk1ITkdMR05CUVdkQ0xGZEJRek5FTEU5QlFTdENOM3BGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFZEJRVWNzU1VGUmJFWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZOSEJHTEdOQlFXZENMRk5CUVZOMmNVWXNSMEZEY0VVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZNbk5HTEdkQ1FVRnJRaXhYUVVNM1JDeFBRVUZQT1hwRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWTkhOR0xHTkJRV2RDTEZkQlF6TkVMRTlCUVhsRExFMUJRV3hETDNwRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZWcGVFWXNVVUZCVlN4WFFVTnlSQ3hQUVVFclFuQTBSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SlFVRkpMRWxCVVc1R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZUWjJSaXhSUVVGVkxGTkJRVk40ZDBZc1IwRkRPVVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVmEzaEdMRlZCUVZrc1YwRkRka1FzVDBGQlQzSTBSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVVVGQlNUSjRSQ3hKUVZGNlEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZXMTRSaXhSUVVGVkxGZEJRM0pFTEU5QlFUQkRMRTFCUVc1RGREUkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hMUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVXlhRVlzTWtKQlFUWkNMRmRCUTNoRkxFOUJRMFU1YjBVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRWEZDTEUxQlVURkdlSEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVFpvUml3eVFrRkJOa0lzVTBGQlUzaHBSaXhIUVVOcVJpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNTVUZCUzJwRExFbEJVM3BFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlRSb1JpeDFRa0ZCZVVJc1UwRkJVM1oxUWl4RlFVRlhReXhIUVVONFJpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVU3RFTERCQ1FVRXdRbXhzUkN4TFFVRk5MRWxCUVVzcmVFUXNSVUZCVnpGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGeFFqZHVRaXhKUVZGcVNETkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZUaG9SaXcyUWtGQkswSXNWMEZETVVVc1QwRkJUM2huUml4TFFVRkxkV2RHTERKQ1FVRXlRaXhMUVZWNlEyeDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMMjlDTEdkQ1FVRnJRaXhEUVVGRExFdEJTV3hFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzgyUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJReTlFTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMjVDTEdGQlFXRTFPRVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhOVGhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRkRVVzU1VGQlQwTXNSVUZCVFN4RFFVTlljM1pDTEhkQ1FVRjVRamR2UlN4RlFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaFowOHNSVUZCU1hkMlFpdzJRa0ZEZGtSb2QwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNhRGxFTEZOQlFWVXJla01zU1VGVGRFUXNUMEZPUVhJMVF5eEZRVUZMTkhCRExGRkJRVkV5UWl4clFrRkJLME1zUlVGQlQyZFBMRVZCUXk5RVZDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaE9XZENMRmRCUVZsMFNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaEx6WkZMRlZCUVZVeWJVUXNZVUZETlVaMVRDeEhRVU5CUVN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhjalZDTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZET1VRc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVU53UXl4UFFVRlBjSEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDI1Q0xHRkJRV0Z3YjBJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWE4wVTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhjRzlDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkROMFVzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVsQlEwZ3NTVUZCU1hBd1F5eEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRM1JEZEhWQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDZUc5Q0xEWkNRVU51UlZJc1JVRkJTWGwyUWl4MVFrRkJkVUoyYVVZc1IwRkRNMElzVFVGRFJpeFJRVU5GZDFvc1JVRkJTelJ3UXl4UlFVRlJOa0lzYjBKQlFXOUNOazRzUlVGQlMzUkdMRVZCUTNCRE9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllTOW5RaXhwUWtGRGJrTnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMelpGTEZWQlFWVXliVVFzWVVGRE4wTm5UQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMelpGTEZWQlFWVTBiVVFzWlVGSmJrUXNUMEZCVDNWTUxFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDI1Q0xHRkJRV0V2TmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE4wUXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTDI1Q0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzl1UWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUXpkRkxFbEJRVWx1ZVVRc1IwRkRTa0VzUlVGQlNXbFVMRVZCUVZFNGRFVXNPRUpCUTA1cWFFWXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEpRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JtOUNMSGxDUVVjNVEyNDJReXhGUVVGTE5IQkRMRkZCUVZFMFFpd3dRa0ZCTUVKNGQwTXNSVUZCVTJzdlF5eEZRVU01UTNCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdFdlowSXNhVUpCUVd0Q2Nra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllTODJSU3hWUVVGVk1tMUVMR1ZCVVhSSFowd3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllTODJSU3hWUVVGVk1taEdMREpDUVVFMlFpeFhRVU40UlN4UFFVTkZPVzlGTEVWQlFVczBjRU1zVVVGQlVUQkVMSGRDUVVGM1FqZHJSQ3hMUVVGTmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRaXhOUVZFeFJuaHdRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMelpGTEZWQlFWVTJhRVlzTWtKQlFUWkNMRk5CUVZONGFVWXNSMEZEYWtZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFbEJRVXRxUXl4SlFWTjZSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTHpaRkxGVkJRVlUwYUVZc2RVSkJRWGxDTEZOQlFWTjJkVUlzUlVGQlYwTXNSMEZEZUVZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEpRVUZMSzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCY1VJM2JrSXNTVUZSYWtnelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaEx6WkZMRlZCUVZVNGFFWXNOa0pCUVN0Q0xGZEJRekZGTEU5QlFVOTRaMFlzUzBGQlMzVm5SaXd5UWtGQk1rSXNTMEZWZWtOc2QwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldXaHdRaXhuUWtGQmEwSXNRMEZCUXl4TFFVbHFSRzQxUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTTVSQ3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWk56aEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoZWtWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldUYzRSQ3hUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzSkZMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaG5MMElzVjBGQk1FUXNUMEZCTjBONGQwWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVV2xETEdkQ1FVRm5RbmxPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTTNSVFJ1Uml4WFFVRlpNM1pGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1IwRkJSeXhIUVVNMVJIVjJRaXgzUWtGQmVVSTNiMFVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWwzZGtJc05rSkJRM1pFYUhkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtZzVSQ3hUUVVGVkszcERMRWxCVTNSRUxFOUJUa0Z5TlVNc1JVRkJTelJ3UXl4UlFVRlJNa0lzYTBKQlFTdERMRVZCUVU5blR5eEZRVU12UkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJrSXNXVUZCV1M5blFpeFhRVUZaZEVrc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJrSXNXVUZCV1dnM1JTeFZRVUZWTW0xRUxHRkJRekZHZFV3c1IwRkRRVUVzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldYUTFRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRemRFTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkRjRU1zVDBGQlQzSndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlpjbTlDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpWRk9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldYSnZRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6VkZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJaME4zZEVRc1JVRkJUMnhoTEZkQlF6TkRkMllzUlVGQlNXc3ZRaXhqUVVGamFIbEdMRWRCUTJ4Q0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSmVUTkNMR05CUVdOMmNVWXNSMEZEYkVJc1RVRkRSaXhMUVVGTExFbEJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGRGRFTjBkVUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSjRiMElzTmtKQlEyNUZVaXhGUVVGSmVYWkNMSFZDUVVGMVFuWnBSaXhIUVVNelFpeE5RVU5HTEZGQlEwVjNXaXhGUVVGTE5IQkRMRkZCUVZFMlFpeHZRa0ZCYjBJMlRpeEZRVUZMZEVZc1JVRkRjRU00UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYUdoQ0xHbENRVU5zUTNKSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb04wVXNWVUZCVlRKdFJDeGhRVU0xUTJkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb04wVXNWVUZCVlRSdFJDeGxRVWxzUkN4UFFVRlBkVXdzUjBGUlZGSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldXZzNSU3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU0xUkN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9iMElzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGVrUkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFHOUNMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkROVVVzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRVZCUlVNc1QwRkVWSEo1UkN4RlFVRTBRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjZSR3N2UXl4RlFVRlBkR0VzVlVGRFRDeEZRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVGgwUlN3NFFrRkRUbXBvUml4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVsQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1YjBJc2VVSkJSemxEYmpaRExFVkJRVXMwY0VNc1VVRkJVVFJDTERCQ1FVRXdRbmgzUXl4RlFVRlRheTlETEVWQlF6bERjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXV2hvUWl4cFFrRkJhMEp5U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYURkRkxGVkJRVlV5YlVRc1pVRlJjRWRuVEN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYURkRkxGVkJRVlZ6ZUVZc1kwRkJaMElzVjBGRE1VUXNUMEZCSzBKNk5FVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZWeGVFWXNZMEZCWjBJc1UwRkJVMmg1Uml4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZWMWVFWXNaMEpCUVd0Q0xGZEJRelZFTEU5QlFVOHhORVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRGRGTEZWQlFWVjNlRVlzWTBGQlowSXNWMEZETVVRc1QwRkJlVU1zVFVGQmJFTXpORVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvTjBVc1ZVRkJWVEJ6Uml4alFVRm5RaXhYUVVNeFJDeFBRVUVyUWpkNlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hIUVVGSExFbEJVV3hHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb04wVXNWVUZCVlRSd1JpeGpRVUZuUWl4VFFVRlRkbkZHTEVkQlEyNUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb04wVXNWVUZCVlRKelJpeG5Ra0ZCYTBJc1YwRkROVVFzVDBGQlR6bDZSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZUUnpSaXhqUVVGblFpeFhRVU14UkN4UFFVRjVReXhOUVVGc1F5OTZSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXV2czUlN4VlFVRlZNbWhHTERKQ1FVRTJRaXhYUVVOMlJTeFBRVU5GT1c5RkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWl4TlFWRXhSbmh3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYURkRkxGVkJRVlUyYUVZc01rSkJRVFpDTEZOQlFWTjRhVVlzUjBGRGFFWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRWxCUVV0cVF5eEpRVk42UkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZVMGFFWXNkVUpCUVhsQ0xGTkJRVk4yZFVJc1JVRkJWME1zUjBGRGRrWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hKUVVGTEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmNVSTNia0lzU1VGUmFrZ3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRGRGTEZWQlFWVTRhRVlzTmtKQlFTdENMRmRCUTNwRkxFOUJRVTk0WjBZc1MwRkJTM1ZuUml3eVFrRkJNa0lzUzBGVmVrTnNkMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDYW5CQ0xHZENRVUZyUWl4RFFVRkRMRXRCU1hSRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2FqZEZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGJrVXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ09UaEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoT1VWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXbENPVGhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRNVVVzU1VGQlQwTXNSVUZCVFN4RFFVTlliekpDTEZkQlFWa3pka1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SFFVRkhMRWRCUXpWRWRYWkNMSGRDUVVGNVFqZHZSU3hGUVVGTE5IQkRMRkZCUVZFd1FpeGhRVUZoWjA4c1JVRkJTWGQyUWl3MlFrRkRka1JvZDBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2FEbEVMRk5CUVZVcmVrTXNTVUZUZEVRc1QwRk9RWEkxUXl4RlFVRkxOSEJETEZGQlFWRXlRaXhyUWtGQkswTXNSVUZCVDJkUExFVkJReTlFVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdVFpeHBRa0ZCYVVKb2FFSXNWMEZCV1hSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtbzNSU3hWUVVGVk1tMUVMR0ZCUTNCSGRVd3NSMEZEUVVFc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDZGpWQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGJFVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGRGNFTXNUMEZCVDNSd1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSjBiMElzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYYWtZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSjBiMElzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnFSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbDVNMElzWTBGQlkzWnhSaXhIUVVOc1FpeE5RVU5HTEV0QlFVc3NTVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVTjBRM1IxUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbmh2UWl3MlFrRkRia1ZTTEVWQlFVbDVka0lzZFVKQlFYVkNkbWxHTEVkQlF6TkNMRTFCUTBZc1VVRkRSWGRhTEVWQlFVczBjRU1zVVVGQlVUWkNMRzlDUVVGdlFqWk9MRVZCUVV0MFJpeEZRVU53UXpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtcG9RaXhwUWtGRGRrTnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWVEp0UkN4aFFVTnFSR2RNTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1vM1JTeFZRVUZWTkcxRUxHVkJTWFpFTEU5QlFVOTFUQ3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSnFOMFVzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYWtVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxYjBJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRPVVJCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxYjBJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOcVJpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkU0ZEVVc09FSkJRMDVxYUVZc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4MVZTeHhRa0ZEVEN4SlFVTkJkamxETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYm05Q0xIbENRVWM1UTI0MlF5eEZRVUZMTkhCRExGRkJRVkUwUWl3d1FrRkJNRUo0ZDBNc1JVRkJVMnN2UXl4RlFVTTVRM0JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1wb1FpeHBRa0ZCYTBKeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSnFOMFVzVlVGQlZUSnRSQ3hsUVZFNVIyZE1MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzVDTEdsQ1FVRnBRbW8zUlN4VlFVRlZNSE5HTEdOQlFXZENMRmRCUXk5RUxFOUJRU3RDTjNwRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWRCUVVjc1NVRlJiRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2FqZEZMRlZCUVZVMGNFWXNZMEZCWjBJc1UwRkJVM1p4Uml4SFFVTjRSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSnFOMFVzVlVGQlZUSnpSaXhuUWtGQmEwSXNWMEZEYWtVc1QwRkJUemw2UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1vM1JTeFZRVUZWTkhOR0xHTkJRV2RDTEZkQlF5OUVMRTlCUVhsRExFMUJRV3hETDNwRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSnFOMFVzVlVGQlZUSm9SaXd5UWtGQk5rSXNWMEZETlVVc1QwRkRSVGx2UlN4RlFVRkxOSEJETEZGQlFWRXdSQ3gzUWtGQmQwSTNhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJjVUlzVFVGUk1VWjRjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDYWpkRkxGVkJRVlUyYUVZc01rSkJRVFpDTEZOQlFWTjRhVVlzUjBGRGNrWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRWxCUVV0cVF5eEpRVk42UkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSnFOMFVzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTTFSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1vM1JTeFZRVUZWT0doR0xEWkNRVUVyUWl4WFFVTTVSU3hQUVVGUGVHZEdMRXRCUVV0MVowWXNNa0pCUVRKQ0xFdEJWWHBEYkhkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc2NFSXNaMEpCUVd0Q0xFTkJRVU1zUzBGSmNFUnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6SnVRaXhsUVVGbGJEZEZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGFrVXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWlM4NFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdVdk9FUXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVONFJTeEpRVUZQUXl4RlFVRk5MRU5CUTFodk1rSXNWMEZCV1ROMlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWxCUVVrc1IwRkROMFIxZGtJc2QwSkJRWGxDTjI5RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmQzWkNMRFpDUVVOMlJHaDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpvT1VRc1UwRkJWU3Q2UXl4SlFWTjBSQ3hQUVU1QmNqVkRMRVZCUVVzMGNFTXNVVUZCVVRKQ0xHdENRVUVyUXl4RlFVRlBaMDhzUlVGREwwUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnFhRUlzVjBGQldYUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnNOMFVzVlVGQlZUSnRSQ3hoUVVOb1IzVk1MRWRCUTBGQkxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1Y0TlVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOb1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUTNCRExFOUJRVTkyY0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWlhadlFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWY3ZSVGhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1YyYjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU12UlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1IwRkRTQ3hKUVVGSmNEQkRMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWw1TTBJc1kwRkJZM1p4Uml4SFFVTnNRaXhOUVVOR0xFdEJRVXNzU1VGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVU4wUTNSMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW5odlFpdzJRa0ZEYmtWU0xFVkJRVWw1ZGtJc2RVSkJRWFZDZG1sR0xFZEJRek5DTEUxQlEwWXNVVUZEUlhkYUxFVkJRVXMwY0VNc1VVRkJVVFpDTEc5Q1FVRnZRalpPTEVWQlFVdDBSaXhGUVVOd1F6aEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnNhRUlzYVVKQlEzSkRja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3czUlN4VlFVRlZNbTFFTEdGQlF5OURaMHdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3czUlN4VlFVRlZORzFFTEdWQlNYSkVMRTlCUVU5MVRDeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpKdVFpeGxRVUZsYkRkRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF5OUVMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld4dlFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU0xUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzYjBJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNdlJTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVkQlEwRTNNME1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkU0ZEVVc09FSkJRMDVxYUVZc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4MVZTeHhRa0ZEVEN4SlFVTkJkamxETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYm05Q0xIbENRVWM1UTI0MlF5eEZRVUZMTkhCRExGRkJRVkUwUWl3d1FrRkJNRUo0ZDBNc1JVRkJVMnN2UXl4RlFVTTVRM0JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzYUVJc2FVSkJRV3RDY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld3M1JTeFZRVUZWTW0xRUxHVkJVVEZIWjB3c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld3M1JTeFZRVUZWTUhOR0xHTkJRV2RDTEZkQlF6ZEVMRTlCUVN0Q04zcEZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVsQlFVa3NTVUZSYmtaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXdzNSU3hWUVVGVk5IQkdMR05CUVdkQ0xGTkJRVk4yY1VZc1IwRkRkRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXdzNSU3hWUVVGVk1uTkdMR2RDUVVGclFpeFhRVU12UkN4UFFVRlBPWHBGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UlFVRkpNbmhFTEVsQlVYcERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3czUlN4VlFVRlZOSE5HTEdOQlFXZENMRmRCUXpkRUxFOUJRVEJETEUxQlFXNURMM3BGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpKdVFpeGxRVUZsYkRkRkxGVkJRVlV5YUVZc01rSkJRVFpDTEZkQlF6RkZMRTlCUTBVNWIwVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVhGQ0xFMUJVVEZHZUhCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc04wVXNWVUZCVlRab1Jpd3lRa0ZCTmtJc1UwRkJVM2hwUml4SFFVTnVSaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzU1VGQlMycERMRWxCVTNwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnNOMFVzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTXhSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzTjBVc1ZVRkJWVGhvUml3MlFrRkJLMElzVjBGRE5VVXNUMEZCVDNoblJpeExRVUZMZFdkR0xESkNRVUV5UWl4TFFWVjZRMngzUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRV012U0N4blFrRkJhMElzUTBGQlF5eExRVWx1Ukc0MVF5eEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTgxUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMmhGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQll6VTNReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQll6VTNReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzWkZMRWxCUVU5RExFVkJRVTBzUTBGRFdHOHlRaXhYUVVGWk0zWkZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UW1kT0xFVkJRVXNzU1VGQlNTeEhRVU0zUkhNdlFpeHBRa0ZCYTBJMU5FVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhIUVVGSkxFZEJRelZFZFhaQ0xIZENRVUY1UWpkdlJTeEZRVUZMTkhCRExGRkJRVkV3UWl4aFFVRmhaMDhzUlVGQlNYZDJRaXcyUWtGRGRrUm9kMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYURsRUxGTkJRVlVyZWtNc1NVRlRkRVFzVDBGT1FYSTFReXhGUVVGTE5IQkRMRkZCUVZFeVFpeHJRa0ZCSzBNc1JVRkJUMmRQTEVWQlF5OUVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTkZMRmRCUVZsMFNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlRKdFJDeGhRVU01Um5WTUxFZEJRMEZCTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQlkzSlpMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRMMFFzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlEzQkRMRTlCUVU5d1NTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdOd1NDdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzVSVGhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZM0JJTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRPVVVzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVkQlEwZ3NTVUZCU1hBd1F5eEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkplVE5DTEdOQlFXTjJjVVlzUjBGRGJFSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRVGhGZDNSRUxFVkJRVTlxWVN4WFFVTjZSblZtTEVWQlFVbDFMMElzYjBKQlFXOUNjbmxHTEVkQlEzaENMRTFCUTBZc1MwRkJTeXhKUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRM1JEZEhWQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDZUc5Q0xEWkNRVU51UlZJc1JVRkJTWGwyUWl4MVFrRkJkVUoyYVVZc1IwRkRNMElzVFVGRFJpeFJRVU5GZDFvc1JVRkJTelJ3UXl4UlFVRlJOa0lzYjBKQlFXOUNOazRzUlVGQlMzUkdMRVZCUTNCRE9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGalF5eHBRa0ZEY0VOeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlRKdFJDeGhRVU01UTJkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWTkcxRUxHVkJTWEJFTEU5QlFVOTFUQ3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRPVVFzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdlJ5eDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU16UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTlITEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZET1VVc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVTXNUMEZFVkhKNVJDeEZRVUUwUW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY2UkdzdlF5eEZRVUZQZEdFc1ZVRkRUQ3hIUVVOQk56TkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1FVnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zVFVGRmRrZHJMME1zUlVGQlQzSmhMRlZCUTB3c1IwRkRRVGt6UXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVRoMFJTdzRRa0ZEVG1wb1JpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFbEJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdWIwSXNlVUpCUnpsRGJqWkRMRVZCUVVzMGNFTXNVVUZCVVRSQ0xEQkNRVUV3UW5oM1F5eEZRVUZUYXk5RExFVkJRemxEY0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZqUXl4cFFrRkJhMEp5U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRV012TlVRc1ZVRkJWVEp0UkN4bFFVOTRSMmRNTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZelF6UWl4cFFrRkJiVUlzUTBGRGNrUkRMRzlDUVVGeFFpeEZRVU55UWtNc1owSkJRV2xDTEVWQlEycENReXhYUVVGWkxFZEJUMlJ1WjBNc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZqTHpWRUxGVkJRVlV3YzBZc1kwRkJaMElzVjBGRE5VUXNUMEZCSzBJM2VrVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzU1VGQlNTeEpRVkZ1Um5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlRSd1JpeGpRVUZuUWl4VFFVRlRkbkZHTEVkQlEzSkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSMEZCU1dwRExFbEJVWHBEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWTW5OR0xHZENRVUZyUWl4WFFVTTVSQ3hQUVVGUE9YcEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGakx6VkVMRlZCUVZVMGMwWXNZMEZCWjBJc1YwRkROVVFzVDBGQk1FTXNUVUZCYmtNdmVrVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQll5ODFSQ3hWUVVGVkszaEdMRzlDUVVGelFpeFhRVU5zUlN4UFFVRTJSV3cxUlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEhRVUZKTEVsQlVURkljWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTgxUkN4VlFVRlZNSGhHTEc5Q1FVRnpRaXhUUVVGVGNubEdMRWRCUXpORkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTgxUkN4VlFVRlZaM2xHTEhOQ1FVRjNRaXhYUVVOd1JTeFBRVUZQYmpWRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFJRVUZKTW5oRUxFbEJVWHBEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZqTHpWRUxGVkJRVlZwZVVZc2IwSkJRWE5DTEZkQlEyeEZMRTlCUVRCRExFMUJRVzVEY0RWRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlRKb1Jpd3lRa0ZCTmtJc1YwRkRla1VzVDBGRFJUbHZSU3hGUVVGTE5IQkRMRkZCUVZFd1JDeDNRa0ZCZDBJM2EwUXNTMEZCVFhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmNVSXNUVUZSTVVaNGNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGakx6VkVMRlZCUVZVMmFFWXNNa0pCUVRaQ0xGTkJRVk40YVVZc1IwRkRiRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVsQlFVdHFReXhKUVZONlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTjZSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTgxUkN4VlFVRlZPR2hHTERaQ1FVRXJRaXhYUVVNelJTeFBRVUZQZUdkR0xFdEJRVXQxWjBZc01rSkJRVEpDTEV0QlZYcERiSGRDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW01d1FpeG5Ra0ZCYTBJc1EwRkJReXhIUVVsNlJHNDFReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEzUkZMRTlCUVU5T0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtZzVSQ3hUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdwR2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbWc1UkN4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRemRGTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWc0TDBJc1UwRkJWWEkxUlN4RlFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaFowOHNSVUZCU1dkblF5eGpRVU40UTNoblF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUVZOcU9VUXNVMEZCVlN0NlF5eEhRVU0zUkd0blF5eG5Ra0ZCZDBRc1QwRkJkRU40ZUVZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZETTBWNWVFWXNhVUpCUVhsRUxFOUJRWFJEZW5oR0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUXpWRk1IaEdMR2xDUVVGNVJDeFBRVUYwUXpGNFJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVNMVJUSjRSaXhaUVVGNVJTeFBRVUV6UkRONFJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJaME1zT0VKQlFUaENNRTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlF6VkdOSGhHTEZsQlFXRnlaME1zUlVGQlNYTm5ReXgxUWtGRGFrSkRMR1ZCUVhWRUxFOUJRWFJET1hoR0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRWRCVFRWRkxFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDZWpWQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGNrVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGRGNFTXNUMEZCVDNod1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSjRiMElzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYY0VZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSjRiMElzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTndSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlF6RkVkblZDTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGVtOUNMRFpDUVVNMVJWSXNSVUZCU1hkblF5eFJRVUZSZEhwR0xFZEJRMW9zVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWw1WjBNc2JVSkJRVzFDZG5wR0xFZEJRM1pDTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUE0yRXNZVUZETVVOcFowSXNSVUZCU1RCblF5eHZRa0ZCYjBKNGVrWXNSMEZEZUVJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOTBZU3haUVVNeFF6Um1MRVZCUVVreVowTXNiMEpCUVc5Q2VucEdMRWRCUTNoQ0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBibUVzWVVGRE1VTjVaaXhGUVVGSk5HZERMR1ZCUVdVeGVrWXNSMEZEYmtJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXOURkM1JFTEVWQlFVODVXaXhaUVVNdlEyOW1MRVZCUVVrMlowTXNaVUZCWlRONlJpeEhRVU51UWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1RoblF5eHJRa0ZCYTBJMWVrWXNSMEZEZEVJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEY0VVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1YjBJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRha1ZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1YjBJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOd1JpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVYTXJSU3hsUVVOT2VuaEdMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFrTXNVMEZCVTNCdlFpeDVRa0ZKT1VNc1QwRkVWSEI1UkN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVHpsaExGbEJRMHdzUlVGRFFYSXpReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOHhZU3hYUVVOTUxFVkJRMEY2TTBNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQZG1Fc1dVRkRUQ3hGUVVOQk5UTkRMRWRCU1Vzc1QwRkVWRUVzUlVGQmVVTnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmRFVnJMME1zUlVGQlQzQmhMRmRCUTB3c1JVRkRRUzh6UXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZUUm1sWkxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRjRGRGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRMMFVzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGFqbEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTVVaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGFqbEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGRFWXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdEaG5ReXhUUVVGcFJDeFBRVUYwUTNSNVJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOd1JYVjVSaXhaUVVFeVJDeFBRVUUzUTNaNVJpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJhVU1zWjBKQlFXZENlVTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVkQlRXaEdMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q1F5eFRRVUZUTVRWQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE9VVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUTNoRUxFOUJRVTk2Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q1F5eFRRVUZUZW05Q0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6ZEdPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRlbTlDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkROMFlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkphV2hETEZsQlFWa3Zla1lzUjBGRGFFSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbHJhRU1zWlVGQlpXZ3dSaXhIUVVOdVFpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQTNSU3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU0zUlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQnZRaXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNeFJVRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFrTXNVMEZCVTNCdlFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlF6ZEdMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEZRVVZETEU5QlJGUnllVVFzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVFJDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWHBFYXk5RExFVkJRVTkwWVN4VlFVTk1MRVZCUTBFM00wTXNTVUZWVGl0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUVZOd04wVXNWVUZCVlhONlJpeFpRVUZqTEZkQlEzcEZMRTlCUVRoQ2VqWkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGNEZEZMRlZCUVZWdmVrWXNXVUZCWXl4VFFVRlRMM3BHTEVkQlEyeEdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFrTXNVMEZCVTNBM1JTeFZRVUZWZFhwR0xHTkJRV2RDTEZkQlF6TkZMRTlCUVU4eE5rVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUVZOd04wVXNWVUZCVlhkNlJpeFpRVUZqTEZkQlEzcEZMRTlCUVhsRExFMUJRV3hETXpaRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUVZOd04wVXNWVUZCVlhsNlJpeGxRVUZwUWl4WFFVTTFSU3hQUVVFclFqVTJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SFFVRkhMRWxCVVd4R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQTNSU3hWUVVGVmNYcEdMR1ZCUVdsQ0xGTkJRVk5vTUVZc1IwRkRja1lzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGNEZEZMRlZCUVZVd2VrWXNhVUpCUVcxQ0xGZEJRemxGTEU5QlFVODNOa1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlFWTndOMFVzVlVGQlZUSjZSaXhsUVVGcFFpeFhRVU0xUlN4UFFVRjVReXhOUVVGc1F6azJSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYmpkRkxGVkJRVlZ0ZVVZc1dVRkJZeXhYUVVOb1JTeFBRVU5GZERWRkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UWtNc1UwRkJWU3hKUVZGdVIzcHdRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWVFI2Uml4WlFVRmpMRk5CUVZOMk1FWXNSMEZEZWtVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWTjJSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRKNVJpeFJRVUZWTEZOQlFWTjBMMElzUlVGQlYwTXNSMEZEYUVZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKRExGTkJRVlU1YmtJc1NVRlJlRWd6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRaNlJpeGpRVUZuUWl4WFFVTnNSU3hQUVVGUGRubEdMRXRCUVV0emVVWXNXVUZCV1N4TFFWRXhRbXBwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRoNlJpeHRRa0ZCY1VJc1YwRkRka1VzVDBGQk9FSnFOMFVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWVFI1Uml4dFFrRkJjVUlzVTBGQlUzWjZSaXhIUVVOb1JpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlN0NlJpeHhRa0ZCZFVJc1YwRkRla1VzVDBGQlQydzNSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZaekJHTEcxQ1FVRnhRaXhYUVVOMlJTeFBRVUY1UXl4TlFVRnNRMjQzUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWcE1FWXNiMEpCUVhOQ0xGZEJRM2hGTEU5QlFUaENjRGRGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzU1VGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYmpkRkxGVkJRVlUyZVVZc2IwSkJRWE5DTEZOQlFWTjRla1lzUjBGRGFrWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWck1FWXNjMEpCUVhkQ0xGZEJRekZGTEU5QlFVOXlOMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWVzB3Uml4dlFrRkJjMElzVjBGRGVFVXNUMEZCZVVNc1RVRkJiRU4wTjBVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVmJ6QkdMRzlDUVVGelFpeFhRVU40UlN4UFFVRTRRblkzUlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWT0hsR0xHOUNRVUZ6UWl4VFFVRlRlbnBHTEVkQlEycEdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVmNUQkdMSE5DUVVGM1FpeFhRVU14UlN4UFFVRlBlRGRGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYmpkRkxGVkJRVlZ6TUVZc2IwSkJRWE5DTEZkQlEzaEZMRTlCUVhsRExFMUJRV3hEZWpkRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZYVXdSaXhsUVVGcFFpeFhRVU51UlN4UFFVRTRRakUzUlN4RlFVRkxOSEJETEZGQlFWRXlReXhwUTBGQmFVTTVha1FzUzBGQlRTeEZRVUZITEVsQlVYWkdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWSzNsR0xHVkJRV2xDTEZOQlFWTXhla1lzUjBGRE5VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWM01FWXNhVUpCUVcxQ0xGZEJRM0pGTEU5QlFVOHpOMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWWGt3Uml4bFFVRnBRaXhYUVVOdVJTeFBRVUY1UXl4TlFVRnNRelUzUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZVd01FWXNaVUZCYVVJc1YwRkRia1VzVDBGQk5FTTNOMFVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZONFJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWWGw1Uml4eFFrRkJkVUlzVjBGRGVrVXNUMEZCT0VJMU5VVXNSVUZCU3pSd1F5eFJRVUZSYjBNc1YwRkRka04yYWtRc1MwRkJTMjk2Uml4dFFrRlhXQzlwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRJd1JpeHZRa0ZCYzBJc1YwRkRlRVVzVDBGQmJVTTVOMFVzUlVGQlN6UndReXhSUVVGUmNVTXNWVUZETlVONGFrUXNTMEZCUzI5NlJpeHRRa0ZSV0M5cFF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZXZDZSaXhsUVVGcFFpeFRRVUZUTTNwR0xFZEJRelZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZOREJHTEdsQ1FVRnRRaXhYUVVOeVJTeFBRVUZQTHpkRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZVMk1FWXNaVUZCYVVJc1YwRkRia1VzVDBGQmVVTXNUVUZCYkVOb09FVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZPREJHTEd0Q1FVRnZRaXhYUVVOMFJTeFBRVUU0UW1vNFJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVmFYcEdMR3RDUVVGdlFpeFRRVUZUTlhwR0xFZEJReTlGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZLekJHTEc5Q1FVRnpRaXhYUVVONFJTeFBRVUZQYkRoRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWbk1VWXNhMEpCUVc5Q0xGZEJRM1JGTEU5QlFYbERMRTFCUVd4RGJqaEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZWeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxjbkJDTEdkQ1FVRnJRaXhEUVVGRExFZEJTWEJFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaWEkzUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMnBGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVnNPVVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFMVJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxiRGxFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRlRVVzU1VGQlQwTXNSVUZCVFN4RFFVTllObWxETEdGQlFXTndPRVVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWtyYVVNc2EwSkJRelZEZG1wRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVTNoQ0xGTkJRVlVyZWtNc1NVRk5NVVFzVDBGSVNVRXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRNMVFpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEyaEZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGRGNFTXNUMEZCVHpGd1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1XOUNMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWeTlGT0VVc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRGdlFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXk5RkxFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZEY2tScmRFTXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk5uZWtNc05rSkJRM1pGVWl4RlFVRkpaMnBETEZsQlFWazVNVVlzUjBGRGFFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxjamRGTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXk5RUxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaWEp2UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTFSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVnliMElzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU12UlN4SlFVRkpibmxFTEVkQlEwcEJMRVZCUVVscFZDeEZRVUZSY1doR0xHMUNRVU5PZURCR0xFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVM0Y2UXl3d1FrRlpjRVJ5UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk54ZVVNc1owSkJRV3RDTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCU1dwRmJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU14UlN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWTjRRaXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVhKR2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlUzaENMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGFrWXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdHZHFReXhUUVVGNVJDeFBRVUU1UTNnd1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENNazRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlF6VkZlVEJHTEZOQlFYbEVMRTlCUVRsRGVqQkdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkVyUWl4cFFrRkJhVUl5VGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkROVVV3TUVZc1owSkJRWGRFTEU5QlFYUkRNVEJHTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTkU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFVkJRek5GTWpCR0xHbENRVUY1UkN4UFFVRjBRek13Uml4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU0xUlRRd1JpdzBRa0ZCTkVVc1QwRkJPVU0xTUVZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFqSk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hIUVUxcVJ5eFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVeXRvUXl4clFrRkJiMElzVTBGQlUyZFNMRWRCUTNwRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVU51UkN4UFFVRlBaM2xETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVMmQ2UXl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkNFJqaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlUyZDZReXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEzaEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVWSUxFbEJSRUVzU1VGQlNUaE9MRVZCUVhkRGMwd3NSVUZCVDJ4YUxHTkJRV2RDYTFvc1JVRkJUMjVZTEd0Q1FVRnZRaXhEUVVGRGJWZ3NSVUZCVDNaaExHRkJRemRHYkRCRExFVkJRVWtzUlVGQlIwRXNSVUZCU1cxcVJDeEZRVUZQTjJkRUxFOUJRVkYwUXl4SlFVTnFReXQ2UkN4RlFVRkpjMnBETEZGQlFWRnNNRU1zUlVGQlQyNXFSQ3hKUVVWeVFpeE5RVU5HTEV0QlFVc3NSVUZGU0N4SlFVUkpiV3BFTEVWQlFYZERjMHdzUlVGQlQyeGFMR05CUVdkQ2Exb3NSVUZCVDI1WUxHdENRVUZ2UWl4RFFVRkRiVmdzUlVGQlQzWmhMR0ZCUXpkR2JEQkRMRVZCUVVrc1JVRkJSMEVzUlVGQlNXMXFSQ3hGUVVGUE4yZEVMRTlCUVZGMFF5eEpRVU5xUXl0NlJDeEZRVUZKZFdwRExGRkJRVkZ1TUVNc1JVRkJUMjVxUkN4SlFVVnlRaXhOUVVOR0xFdEJRVXNzUlVGRFNDeEpRVUZKYVVJc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNYZHFReXh0UWtGQmJVSjBNa1lzUjBGRGRrSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDVha01zYjBKQlFXOUNkakpHTEVkQlEzaENMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNR3BETERKQ1FVRXlRbmd5Uml4SFFVTXZRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVek5tTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUTNoRkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRjWHBETEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlEzSkZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVGNYcERMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRlRVlzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRWRCUTFKeWVVUXNSVUZCU1dsVUxFVkJRVkZwYVVZc1pVRkRUbkF4Uml4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDNoVkxHbENRVU5NTEVWQlEwRXpPVU1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkZyYVVZc1pVRkRUbkl4Uml4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDNoVkxHbENRVU5NTEVWQlEwRXpPVU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVzFwUml4clEwRkRUblF4Uml4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpsVkxHOUNRVU5NTEVWQlEwRnlPVU1zU1VGVlRpdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWTXpaaXhWUVVGVk9ERkdMRmxCUVdNc1YwRkRjRVVzVDBGQmMwTnFPVVVzUlVGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2JHcEVMRXRCUVUwc1NVRlJOVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWV2t5Uml4WlFVRmpMRk5CUVZNMU1rWXNSMEZETjBVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zUjBGQlV5eExRVk5xUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZNelppeFZRVUZWZVRGR0xGRkJRVlVzVTBGQlUzQXlSaXhGUVVGUGFUQkVMRWRCUTJoR0xFOUJRVTk2TmtNc1JVRkJTelJ3UXl4UlFVRlJkVVFzYlVKQlFXMUNNV3RFTEV0QlFVMHNSVUZCUjJwRExFVkJRVTlwTUVRc1NVRlJla1F6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZhekpHTEdOQlFXZENMRmRCUTNSRkxFOUJRVTgxTUVZc1MwRkJTekl3Uml4WlFVRlpMRXRCVVRGQ2RHdERMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlV6Tm1MRlZCUVZVck1VWXNXVUZCWXl4WFFVTndSU3hQUVVGelEydzVSU3hGUVVGTE5IQkRMRkZCUVZFclFpeHBRa0ZCYVVKc2FrUXNTMEZCVFN4SlFWRTFSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZiVEpHTEZsQlFXTXNVMEZCVXpreVJpeEhRVU0zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhIUVVGVExFdEJVMnBFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXpObUxGVkJRVlV3TVVZc1VVRkJWU3hUUVVGVGNqSkdMRVZCUVU5cE1FUXNSMEZEYUVZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRjFSQ3h0UWtGQmJVSXhhMFFzUzBGQlRTeEZRVUZIYWtNc1JVRkJUMmt3UkN4SlFWRjZSRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVek5tTEZWQlFWVnZNa1lzWTBGQlowSXNWMEZEZEVVc1QwRkJUemt3Uml4TFFVRkxOakJHTEZsQlFWa3NTMEZSTVVKNGEwTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVE0yWXNWVUZCVlhFeVJpeHRRa0ZCY1VJc1YwRkRNMFVzVDBGQk9FSjRPVVVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWTXpaaXhWUVVGVk1qRkdMRzFDUVVGeFFpeFRRVUZUZERKR0xFZEJRM0JHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlV6Tm1MRlZCUVZWek1rWXNjVUpCUVhWQ0xGZEJRemRGTEU5QlFVOTZPVVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWTXpaaXhWUVVGVmRUSkdMRzFDUVVGeFFpeFhRVU16UlN4UFFVRjVReXhOUVVGc1F6RTVSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRNMllzVlVGQlZYY3lSaXh2UWtGQmMwSXNWMEZETlVVc1QwRkJPRUl6T1VVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZOREZHTEc5Q1FVRnpRaXhUUVVGVGRqSkdMRWRCUTNKR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVek5tTEZWQlFWVjVNa1lzYzBKQlFYZENMRmRCUXpsRkxFOUJRVTgxT1VVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZNREpHTEc5Q1FVRnpRaXhYUVVNMVJTeFBRVUY1UXl4TlFVRnNRemM1UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWV2N5Uml3clFrRkJhVU1zVjBGRGRrWXNUMEZCYzBOdU9VVXNSVUZCU3pSd1F5eFJRVUZSSzBJc2FVSkJRV2xDYkdwRUxFdEJRVTBzU1VGUk5VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRNMllzVlVGQlZUSXlSaXdyUWtGQmFVTXNVMEZCVTNRelJpeEhRVU5vUnl4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhIUVVGVExFdEJVMnBFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXpObUxGVkJRVlUyTVVZc01rSkJRVFpDTEZOQlFWTjRNa1lzUlVGQlQya3dSQ3hIUVVOdVJ5eFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVWFZFTEcxQ1FVRnRRakZyUkN4TFFVRk5MRVZCUVVkcVF5eEZRVUZQYVRCRUxFbEJVWHBFTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWVFF5Uml4cFEwRkJiVU1zVjBGRGVrWXNUMEZCVDNReFJpeExRVUZMY1RGR0xDdENRVUVyUWl4TFFWRTNRMmhzUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsY2pkRkxGVkJRVlZyTVVZc1owSkJRV3RDTEZkQlF5OUVMRTlCUTBWeU9FVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZWTEVsQlVUbEdaM2xETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1Z5TjBVc1ZVRkJWVFl5Uml4blFrRkJhMElzVTBGQlUzZ3pSaXhIUVVONFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRVFzZDBKQlFYZENhbXhFTEV0QlFVMHNSVUZCUjJwRExFbEJVM1pFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdWeU4wVXNWVUZCVlcweFJpeFpRVUZqTEZOQlFWTTVhRU1zUlVGQlYwTXNSMEZETDBVc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVlV5ZWtNc1NVRlJia2d6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsY2pkRkxGVkJRVlU0TWtZc2EwSkJRVzlDTEZkQlEycEZMRTlCUVU5NE1VWXNTMEZCUzNVeFJpeG5Ra0ZCWjBJc1MwRlZPVUpzYkVNc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q2RIQkNMR2RDUVVGclFpeERRVUZETEVkQlNYWkVialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENkRGRGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRjRVVzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENiamxFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaEwwVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDYmpsRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETTBVc1NVRkJUME1zUlVGQlRTeERRVU5ZTW10RExHVkJRV2RDYkN0RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSk5tdERMRzlDUVVNNVEzSnNReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWZHdPVVFzVTBGQlZTdDZReXhKUVUwdlJDeFBRVWhKUVN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEkxTlVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOdVJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVOd1F5eFBRVUZQTTNCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFqTnZRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmRzUmpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFqTnZRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEyeEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRa01zVjBGRGVFUXhkVUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZjMWIwSXNOa0pCUXpWRlVpeEZRVUZKT0d0RExHTkJRV00xTTBZc1IwRkRiRUlzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKME4wVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRiRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSjBiMElzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGREwwUkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSjBiMElzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU5zUml4SlFVRkpibmxFTEVkQlEwcEJMRVZCUVVscFZDeEZRVUZSYldwR0xIRkNRVU5PZERKR0xFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkJWM1p2UWl3d1FrRlpla1J5UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyY0VJc1owSkJRV3RDTEVOQlFVTXNSMEZKYkVWdU5VTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU12UlN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWZHdPVVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFeFJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWZHdPVVFzVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTjBSaXhKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllaMnBETEZOQlFYbEVMRTlCUVRsRGVEQkdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkVyUWl4cFFrRkJhVUl5VGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkROVVZ6TWtZc1YwRkJiVVFzVDBGQmRFTjBNa1lzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRkRVYxTWtZc1RVRkJPRU1zVDBGQmRFTjJNa1lzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRha1YxTWtNc1NVRkJORU1zVDBGQmRFTjJNa01zUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1IwRk5ha1VzVDBGSVNYTjRSQ3hKUVVOR1JTeEZRVUZKU3l4eFFrRkJkVUpPTEVkQlJYUkNReXhKUVZWVVZDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZjM05VSXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTTVSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRa01zVjBGRGRFUXNUMEZCVHpWd1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZjMWIwSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhOMFk0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmMxYjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU0zUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkZTQ3hKUVVSQkxFbEJRVWs0VGl4RlFVRjNRM05NTEVWQlFVOXNXaXhqUVVGblFtdGFMRVZCUVU5dVdDeHJRa0ZCYjBJc1EwRkJRMjFZTEVWQlFVOTJZU3hoUVVNM1Jtd3dReXhGUVVGSkxFVkJRVWRCTEVWQlFVbHRha1FzUlVGQlR6ZG5SQ3hQUVVGUmRFTXNTVUZEYWtNcmVrUXNSVUZCU1hOcVF5eFJRVUZSYkRCRExFVkJRVTl1YWtRc1NVRkZja0lzVFVGRFJpeExRVUZMTEVWQlEwZ3NTVUZCU1dsQ0xFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbHBiRU1zWTBGQll5OHpSaXhIUVVOc1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUM1poTEZsQlF6RkRObVlzUlVGQlNXdHNReXhUUVVGVGFEUkdMRWRCUTJJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOTJZU3haUVVNeFF6Wm1MRVZCUVVrM2FFSXNUMEZCVDJwNFF5eEhRVU5ZTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZGpkRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF6ZEZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZG05Q0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDUXl4WFFVRlhkbTlDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETjBZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZGcGFVWXNaVUZEVG5BeFJpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQzaFZMR2xDUVVOTUxFVkJRMEV6T1VNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlR6TmhMRmRCUTB3c1JVRkRRWGd6UXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTh6WVN4WFFVTk1MRVZCUTBGNE0wTXNTVUZWVGl0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlRneFJpeFpRVUZqTEZkQlEzcEZMRTlCUVhORGFqbEZMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUW14cVJDeExRVUZOTEVsQlVUVkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkJWM1kzUlN4VlFVRlZhVEpHTEZsQlFXTXNVMEZCVXpVeVJpeEhRVU5zUml4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhIUVVGVExFdEJVMnBFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWZVRGR0xGRkJRVlVzVTBGQlUzQXlSaXhGUVVGUGFUQkVMRWRCUTNKR0xFOUJRVTk2TmtNc1JVRkJTelJ3UXl4UlFVRlJkVVFzYlVKQlFXMUNNV3RFTEV0QlFVMHNSVUZCUjJwRExFVkJRVTlwTUVRc1NVRlJla1F6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWV3N5Uml4alFVRm5RaXhYUVVNelJTeFBRVUZQTlRCR0xFdEJRVXN5TUVZc1dVRkJXU3hMUVZFeFFuUnJReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWZDJOMFVzVlVGQlZYTXpSaXhqUVVGblFpeFhRVU16UlN4UFFVRTRRbm9yUlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkJWM1kzUlN4VlFVRlZiek5HTEdOQlFXZENMRk5CUVZNdk0wWXNSMEZEY0VZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDUXl4WFFVRlhkamRGTEZWQlFWVjFNMFlzWjBKQlFXdENMRmRCUXpkRkxFOUJRVTh4SzBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWWGN6Uml4alFVRm5RaXhYUVVNelJTeFBRVUY1UXl4TlFVRnNRek1yUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZGpkRkxGVkJRVlY1TTBZc1UwRkJWeXhYUVVOMFJTeFBRVUU0UWpVclJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWY1ROR0xGTkJRVmNzVTBGQlUyZzBSaXhIUVVNdlJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWVEF6Uml4WFFVRmhMRmRCUTNoRkxFOUJRVTgzSzBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWVEl6Uml4VFFVRlhMRmRCUTNSRkxFOUJRWGxETEUxQlFXeERPU3RGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWWEYzUXl4UFFVRlRMRmRCUTNCRkxFOUJRVGhDZUROQ0xFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1NVRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZGpkRkxGVkJRVlZ6ZDBNc1QwRkJVeXhUUVVGVGFuaERMRWRCUXpkRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkJWM1kzUlN4VlFVRlZOR2RHTEZOQlFWY3NWMEZEZEVVc1QwRkJUeTl1UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkJWM1kzUlN4VlFVRlZObWRHTEU5QlFWTXNWMEZEY0VVc1QwRkJlVU1zVFVGQmJFTm9iMFVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUW5RM1JTeFZRVUZWWnpOR0xHdENRVUZ2UWl4WFFVTndSU3hQUVVORmJpdEZMRVZCUVVzMGNFTXNVVUZCVVRCRUxIZENRVUYzUWpkclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCV1N4SlFWRnVSelZ3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKME4wVXNWVUZCVlRRelJpeHJRa0ZCYjBJc1UwRkJVM1kwUml4SFFVTTNSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzUlVGQlIycERMRWxCVTNaRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRblEzUlN4VlFVRlZhVE5HTEdOQlFXZENMRk5CUVZNMWFrTXNSVUZCVjBNc1IwRkRjRVlzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWbHFiMElzU1VGUmVFZ3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEowTjBVc1ZVRkJWVFl6Uml4dlFrRkJjMElzVjBGRGRFVXNUMEZCVDNZeVJpeExRVUZMY3pKR0xHdENRVUZyUWl4TFFVbG9RM2d4Uml4RlFVRkxkRU1zVDBGQlR6SldMRTlCUVU4M1dDeEZRVUZUSzNwRUxFMUJRVTFETEU5QlFVOHlRaXhYTEdkQ1Eyd3hWSHBETEVsQlFVbDFhME1zUlVGQmRVSXNSVUZCVVN4SFFVTXZRbTV1UXl4RlFVRlBMRVZCUVZFc1IwRkJORUpCTEV0QlJUTkRlVkVzUlVGQlpTeFhRVU5xUWl4VFFVRlRRU3hMUVVWVUxFOUJSRUZCTEVWQlFWbDRXU3haUVVGakxESkNRVU51UW5kWkxFVkJTRk1zUjBGcFFteENMRk5CUVZNeU1rSXNSVUZCYTBKRExFVkJRV0YwY2tNc1IwRkRkRU53Y2tRc1MwRkJTekF5Uml4WlFVRmpRU3hGUVVOdVFqRXlSaXhMUVVGTGIzSkVMRkZCUVZWQkxFZEJRVmNzUjBGaU5VSXdWU3hGUVVGWlF5eGhRVUZsTEVOQlEzcENlRmtzVjBGQldTeGxRVU5hUml4UlFVRlRlVmtzUlVGRFZERlhMR1ZCUVdVc1JVRkRaamhITEdkQ1FVRm5RaXhGUVVOb1FubHRReXhaUVVGaFNDeEZRVUZ4UW5ZdlFpeHZRa0ZEYkVOMFR5eGhRVUZqTm5SRExFVkJRWEZDZEM5Q0xITkNRVWR5UXpVMlJDeEZRVUZSZDJwRkxGbEJRV05CTEVWQlQzUkNNakpDTEVWQlFXdENMek5HTEZWQlFWVnJORVlzWVVGQlpTeFRRVUZ6UWpOclFpeEZRVUZuUW5CdFFpeEZRVUZWWjNKRExFZEJRMmhGTEVsQlFYSkNiSFZHTEZWQlFWVjJTaXhUUVVOYWVUTkdMRVZCUVZkc2RVWXNWVUZCVlN4SlFVVjJRaXhKUVVGSk1qbERMRVZCUVZNclNTeEZRVUZMUkN4TlFVRk5NRkVzUlVGQldVTXNZVUZCWXl4RFFVTm9SQzlRTEZGQlFWTnBhVUlzUlVGRFZEZHhRaXhMUVVGTmNHNUVMRXRCUVVzd01rWXNXVUZEV0RkeFF5eFRRVUZWUVN4RlFVTldMMFFzVlVGQlZ6bHVSQ3hMUVVGTGIzSkVMRkZCUVZGMFJDeFZRVU40UW14NlF5eE5RVUZQTlZVc1MwRkJTMjl5UkN4UlFVRlJlREpETEUxQlEzQkNaM3BETEUxQlFVOHNVMEZCVlN0RkxFZEJRMllzUjBGQlNXdHhReXhGUVVOR0xFZEJRVWxzY1VNc1JVRkJVemRzUkN4VFFVRlhkVzlFTEVWQlFVdHNTQ3hMUVVGTFF5eEhRVUZKTEVOQlEzQkRMRWxCUVVsM1dpeEZRVUZOTEVsQlFVbDZMMFFzVFVGQlRYZHhSQ3hGUVVGVGQwUXNaVUZETjBKNVVpeEZRVUZKTjFFc1MwRkJUM0JGTEVWQlFWTTNiRVFzVDBGRGNFSTROa1FzUlVGQlNTOVdMRk5CUVZkakxFVkJRVk0xUkN4VFFVTjRRamgwUXl4RlFVRlRhakZDTEVWQlFVc3NWMEZGWkdreFFpeEZRVUZUTEV0QlFVMXNjVU1zUlVGQlUzQTJReXhaUVV0b1F5eE5RVUZQTEVOQlEweHJNME1zVDBGQlVTeFhRVU5PYjNSRExFVkJRVmNzUzBGRFdIWjNReXhGUVVGUGEwUXNWMEZMWW14MFJDeEZRVUZSYlRaR0xHdENRVUZ2UWtFc1JVRkZOVUlzU1VGQlNYUXlRaXhGUVVGMVFpeFhRVU42UWl4VFFVRlRRU3hMUVVWVUxFOUJSRUZCTEVWQlFXOUNOMWtzV1VGQll5eHRRMEZETTBJMldTeEZRVWhwUWl4SFFXbENNVUlzVTBGQlV6SXlRaXhGUVVFd1Frb3NSVUZCWVhSeVF5eEhRVU01UTNCeVJDeExRVUZMTURKR0xGbEJRV05CTEVWQlEyNUNNVEpHTEV0QlFVdHZja1FzVVVGQlZVRXNSMEZCVnl4SFFXSTFRaXRWTEVWQlFXOUNReXhsUVVGcFFpeERRVU51UXpkWkxGZEJRVmtzYVVKQlExcEdMRkZCUVZNNFdTeEZRVU5VTDFjc1pVRkJaU3hGUVVObU9FY3NaMEpCUVdkQ0xFVkJRMmhDZVcxRExGbEJRV0ZJTEVWQlFYRkNjaTlDTEhOQ1FVTnNRM2hQTEdGQlFXTTJkRU1zUlVGQmNVSndMMElzZDBKQlIzSkRPVFpFTEVWQlFWRTJha1VzYjBKQlFYTkNRU3hGUVU4NVFqSXlRaXhGUVVFd1FuQTBSaXhWUVVGVmNUUkdMR1ZCUVdsQ0xGTkJRWGRDT1d0Q0xFVkJRV2RDY0cxQ0xFVkJRVlZuY2tNc1IwRkROVVVzU1VGQmNrSnNkVVlzVlVGQlZYWktMRk5CUTFwNU0wWXNSVUZCVjJ4MVJpeFZRVUZWTEVsQlJYWkNMRWxCUVVreU9VTXNSVUZCVXl0SkxFVkJRVXRFTEUxQlFVMHJVU3hGUVVGdlFrTXNaVUZCWjBJc1EwRkRNVVJ3VVN4UlFVRlRhV2xDTEVWQlExUTNjVUlzUzBGQlRYQnVSQ3hMUVVGTE1ESkdMRmxCUTFnM2NVTXNVMEZCVlVFc1JVRkRWaTlFTEZWQlFWYzVia1FzUzBGQlMyOXlSQ3hSUVVGUmRFUXNWVUZEZUVKc2VrTXNUVUZCVHpWVkxFdEJRVXR2Y2tRc1VVRkJVWGd5UXl4TlFVTndRbWQ2UXl4TlFVRlBMRk5CUVZVclJTeEhRVU5tTEVkQlFVbHJjVU1zUlVGRFJpeEhRVUZKYkhGRExFVkJRVk0zYkVRc1UwRkJWM1Z2UkN4RlFVRkxiRWdzUzBGQlMwTXNSMEZCU1N4RFFVTndReXhKUVVGSmQxb3NSVUZCVFN4SlFVRkplaTlFTEUxQlFVMTNjVVFzUlVGQlUzZEVMR1ZCUXpkQ2VWSXNSVUZCU1RkUkxFdEJRVTl3UlN4RlFVRlROMnhFTEU5QlEzQkNPRFpFTEVWQlFVa3ZWaXhUUVVGWFl5eEZRVUZUTlVRc1UwRkRlRUk0ZEVNc1JVRkJVMm94UWl4RlFVRkxMRmRCUldScE1VSXNSVUZCVXl4TFFVRk5iSEZETEVWQlFWTndOa01zV1VGTGFFTXNUVUZCVHl4RFFVTk1hek5ETEU5QlFWRXNWMEZEVG05MFF5eEZRVUZYTEV0QlExaDJkME1zUlVGQlQydEVMRmRCUzJKc2RFUXNSVUZCVVhjMlJpd3dRa0ZCTkVKQkxFY3NaMEpETDBkd1F5eEpRVUZKUlN4RlFVRnRReXhGUVVGUkxFZEJRek5ETTI1RExFVkJRVThzUlVGQlVTeEhRVUUwUWtFc1MwRkZNME50VXl4RlFVRnZRaXhYUVVOMFFpeFRRVUZUUVN4TFFVVlVMRTlCUkVGQkxFVkJRV2xDYkdFc1dVRkJZeXgxUTBGRGVFSnJZU3hGUVVoakxFZEJORU4yUWl4VFFVRlRlVEZDTEVWQlFYVkNVQ3hGUVVGaGRISkRMRWRCUXpORGNISkVMRXRCUVVzd01rWXNXVUZCWTBFc1JVRkRia0l4TWtZc1MwRkJTMjl5UkN4UlFVRlZRU3hIUVVGWExFZEJlRU0xUW05WExFVkJRV2xDUXl4TFFVRlBMRU5CUTNSQ2JHRXNWMEZCV1N4UFFVTmFSaXhSUVVGVGJXRXNSVUZEVkhCWkxHVkJRV1VzUlVGRFpqaEhMR2RDUVVGblFpeEZRVU5vUW5sdFF5eFpRVUZoU3l4RlFVRnBRMjRyUWl4WlFVTTVRMnhSTEdGQlFXTnhkVU1zUlVGQmFVTm9LMElzWTBGSGFrUjNTU3hGUVVGcFFrOHNWMEZCWVN4RFFVTTFRbmhoTEZkQlFWa3NZVUZEV2tZc1VVRkJVMjFoTEVWQlExUndXU3hsUVVGbExFVkJRMlk0Unl4blFrRkJaMElzUlVGRGFFSjViVU1zV1VGQllVc3NSVUZCYVVNdk9VSXNhMEpCUXpsRGRGRXNZVUZCWTNGMVF5eEZRVUZwUXprNVFpeHZRa0ZIYWtSelNTeEZRVUZwUWpBeFFpeFBRVUZUTEVOQlEzaENNM1pETEZkQlFWa3NVMEZEV2tZc1VVRkJVMjFoTEVWQlExUndXU3hsUVVGbExFVkJRMlk0Unl4blFrRkJaMElzUlVGRGFFSjViVU1zV1VGQllVc3NSVUZCYVVOc09VSXNaVUZET1VOdVVpeGhRVUZqY1hWRExFVkJRV2xEZGpsQ0xHVkJSMnBFSzBnc1JVRkJhVUl5TVVJc2NVSkJRWFZDTEVOQlEzUkROWFpETEZkQlFWa3NkVUpCUTFwR0xGRkJRVk50WVN4RlFVTlVjRmtzWlVGQlpTeEZRVU5tT0Vjc1owSkJRV2RDTEVWQlEyaENlVzFETEZsQlFXRkxMRVZCUVdsRGFqbENMRFJDUVVNNVEzQlNMR0ZCUVdOeGRVTXNSVUZCYVVOb09VSXNPRUpCUjJwRU1UbEVMRVZCUVZGcmJFVXNhVUpCUVcxQ1FTeEZRVTh6UW5reFFpeEZRVUYxUW5ZMFJpeFZRVUZWZWtJc1MwRkJUeXhUUVVGalp6RkZMRVZCUVdkQ2NHMUNMRWRCUTNCRkxFbEJRVWwxY2tNc1JVRkJXU3hEUVVOa2FEbEVMRXRCUVUwc1IwRkRUbmxpTEVsQlFVc3NSMEZEVEM5MVF5eFBRVUZSTEVsQlJVNTNMME1zUlVGQlV5dEpMRVZCUVV0R0xFOUJRVTl4VXl4RlFVRnBRa01zUzBGQlRTeERRVU01UTNwU0xGRkJRVk5wYVVJc1JVRkRWRGR4UWl4TFFVRk5jRzVFTEV0QlFVc3dNa1lzV1VGRFdEZHhReXhUUVVGVlFTeEZRVU5XTDBRc1ZVRkJWemx1UkN4TFFVRkxiM0pFTEZGQlFWRjBSQ3hWUVVONFFteDZReXhOUVVGUE5WVXNTMEZCUzI5eVJDeFJRVUZSZURKRExFMUJRM0JDY3pCRExGVkJRVmNzVTBGQlZXMTFReXhIUVVOdVFrUXNSVUZCVldnNVJDeExRVUZMTTI1Q0xGTkJRVkVzVTBGQlZUWnJSaXhIUVVNdlFrRXNSVUZCVVVRc1QwRkhXbnAyUXl4TlFVRlBMRk5CUVZVNVowUXNSVUZCVVhGd1JDeEZRVUZsY0Vnc1IwRkRkRU54ZFVNc1JVRkJWWFIzUml4UFFVRlBNa3dzVTBGQlVTeFRRVUZWTm10R0xFZEJRMnBEUVN4RlFVRlJMRU5CUVVWMmJVTXNTMEZCVFdweFJDeEZRVUZSZVhkR0xGRkJRVk53YmtNc1JVRkJaWFJGTEZOQlFWVTVReXhQUVVVMVJIRjFReXhGUVVGVmRtaEVMRWxCUVVsd2FrTXNVMEZCVVN4VFFVRlZObXRHTEVkQlF6bENRU3hGUVVGUkxFTkJRVVYyYlVNc1MwRkJUV3B4UkN4RlFVRlJlWGRHTEZGQlFWTndia01zUlVGQlpYUkZMRk5CUVZVNVF5eFBRVVUxUkhGMVF5eEZRVUZaTEZGQlIyaENMRTFCUVU4c1EwRkRURWtzUjBGQlNTeFRRVUZWTVhwR0xFVkJRVTEzZWtZc1IwRkZiRUlzVDBGRVFVWXNSVUZCVlhSNlJpeEhRVUZOYjBZc1MwRkJTMjkxUml4SFFVTmtkRE5HTEUxQlJWUjVjRVFzVDBGQlVTeFhRVU5PTW5SRExFVkJRVmtzUzBGRFdqbDNReXhGUVVGUGEwUXNWMEZMWW5sMFF5eEZRVUYxUW5ZMFJpeFZRVUZWS3pSR0xGZEJRV0VzVTBGQmIwSjRiRUlzUlVGQlowSndiVUlzUlVGQlZXZHlReXhIUVVOcVJTeEpRVUZ5UW14MVJpeFZRVUZWZGtvc1UwRkRXbmt6Uml4RlFVRlhiSFZHTEZWQlFWVXNTVUZGZGtJc1NVRkJTVEk1UXl4RlFVRlRLMGtzUlVGQlMwUXNUVUZCVFc5VExFVkJRV2xDVHl4WFFVRlpMRU5CUTI1RUwxSXNVVUZCVTJscFFpeEZRVU5VTjNGQ0xFdEJRVTF3YmtRc1MwRkJTekF5Uml4WlFVTllOM0ZETEZOQlFWVkJMRVZCUTFZdlJDeFZRVUZYT1c1RUxFdEJRVXR2Y2tRc1VVRkJVWFJFTEZWQlEzaENiSHBETEUxQlFVODFWU3hMUVVGTGIzSkVMRkZCUVZGNE1rTXNUVUZEY0VKbmVrTXNUVUZCVHl4VFFVRlZLMFVzUjBGRFppeEhRVUZKYTNGRExFVkJRMFlzUjBGQlNXeHhReXhGUVVGVE4yeEVMRk5CUVZkMWIwUXNSVUZCUzJ4SUxFdEJRVXRETEVkQlFVa3NRMEZEY0VNc1NVRkJTWGRhTEVWQlFVMHNTVUZCU1hvdlJDeE5RVUZOZDNGRUxFVkJRVk4zUkN4bFFVTTNRbmxTTEVWQlFVazNVU3hMUVVGUGNFVXNSVUZCVXpkc1JDeFBRVU53UWpnMlJDeEZRVUZKTDFZc1UwRkJWMk1zUlVGQlV6VkVMRk5CUTNoQ09IUkRMRVZCUVZOcU1VSXNSVUZCU3l4WFFVVmthVEZDTEVWQlFWTXNTMEZCVFd4eFF5eEZRVUZUY0RaRExGbEJTMmhETEUxQlFVOHNRMEZEVEdzelF5eFBRVUZSTEZkQlEwNXZkRU1zUlVGQlZ5eExRVU5ZZG5kRExFVkJRVTlyUkN4WFFVdGllWFJETEVWQlFYVkNkalJHTEZWQlFWVm5OVVlzVDBGQlV5eFRRVUZuUWpkeVF5eEhRVU40UkN4SlFVRkpkWEpETEVWQlFWa3NRMEZEWkdnNVJDeExRVUZOTEVkQlEwNTVZaXhKUVVGTExFZEJRMHd2ZFVNc1QwRkJVU3hKUVVWT2R5OURMRVZCUVZNclNTeEZRVUZMTDBrc1QwRkJUMnRpTEVWQlFXbENNREZDTEU5QlFWRXNRMEZEYUVRNWRrTXNTMEZCVFhCdVJDeExRVUZMTURKR0xGbEJRMWczY1VNc1UwRkJWVUVzUlVGRFZpOUVMRlZCUVZjNWJrUXNTMEZCUzI5eVJDeFJRVUZSZEVRc1dVRnBRakZDTEU5QlprRjRRaXhGUVVGUGMwSXNUMEZCVFN4VFFVRlZPV2RFTEVWQlFWRnhjRVFzUlVGQlpYQklMRWRCUXpWRGNYVkRMRVZCUVZWMGQwWXNUMEZCVHpKTUxGTkJRVkVzVTBGQlZUWnJSaXhIUVVOcVEwRXNSVUZCVVN4RFFVRkZkbTFETEV0QlFVMXFjVVFzUlVGQlVYbDNSaXhSUVVGVGNHNURMRVZCUVdWMFJTeFRRVUZWT1VNc1QwRkZOVVJ4ZFVNc1JVRkJWWFpvUkN4SlFVRkpjR3BETEZOQlFWRXNVMEZCVlRaclJpeEhRVU01UWtFc1JVRkJVU3hEUVVGRmRtMURMRXRCUVUxcWNVUXNSVUZCVVhsM1JpeFJRVUZUY0c1RExFVkJRV1YwUlN4VFFVRlZPVU1zVDBGRk5VUnhkVU1zUlVGQldTeFJRVVZrT1hkRExFVkJRVTgwUXl4WFFVRlZMRk5CUVZVek1rTXNSMEZEZWtJMmEwWXNSVUZCVldnNVJDeExRVUZMTTI1Q0xGTkJRVkVzVTBGQlZUWnJSaXhIUVVNdlFrRXNSVUZCVVM5clJpeFRRVWRhSzNwRExFVkJRVTgyUXl4TlFVRk5NRU1zUjBGRFRpeERRVU5NTW5KRExFZEJRVWtzVTBGQlZURjZSaXhGUVVGTmQzcEdMRWRCUld4Q0xFOUJSRUZHTEVWQlFWVjBla1lzUjBGQlRXOUdMRXRCUVV0dmRVWXNSMEZEWkhRelJpeE5RVVZVZFZFc1RVRkJUeXhUUVVGVk1HaEZMRWRCUldZc1QwRkVRVE55UWl4RlFVRlBlaTlETEV0QlFVdHZja1VzUjBGRFRHcDVSU3hOUVVWVU5qRkRMRWxCUVVzc1YwRkRTSGxSTEVWQlFVOXBSQ3hqUVVWVVJTeFBRVUZSTEZkQlEwNHlkRU1zUlVGQldTeExRVU5hT1hkRExFVkJRVTlyUkN4WFFVdGllWFJETEVWQlFYVkNkalJHTEZWQlFWVnBOVVlzY1VKQlFYVkNMRk5CUVRoQ01XeENMRVZCUVdkQ2NHMUNMRVZCUVZWbmNrTXNSMEZEY2tZc1NVRkJja0pzZFVZc1ZVRkJWWFpLTEZOQlExcDVNMFlzUlVGQlYyeDFSaXhWUVVGVkxFbEJSWFpDTEVsQlFVa3lPVU1zUlVGQlV5dEpMRVZCUVV0RUxFMUJRVTF2VXl4RlFVRnBRakl4UWl4eFFrRkJjMElzUTBGRE4wUnVia01zVVVGQlUybHBRaXhGUVVOVU4zRkNMRXRCUVUxd2JrUXNTMEZCU3pBeVJpeFpRVU5ZTjNGRExGTkJRVlZCTEVWQlExWXZSQ3hWUVVGWE9XNUVMRXRCUVV0dmNrUXNVVUZCVVhSRUxGVkJRM2hDYkhwRExFMUJRVTgxVlN4TFFVRkxiM0pFTEZGQlFWRjRNa01zVFVGRGNFSm5la01zVFVGQlR5eFRRVUZWSzBVc1IwRkRaaXhIUVVGSmEzRkRMRVZCUTBZc1IwRkJTV3h4UXl4RlFVRlROMnhFTEZOQlFWZDFiMFFzUlVGQlMyeElMRXRCUVV0RExFZEJRVWtzUTBGRGNFTXNTVUZCU1hkYUxFVkJRVTBzU1VGQlNYb3ZSQ3hOUVVGTmQzRkVMRVZCUVZOM1JDeGxRVU0zUW5sU0xFVkJRVWszVVN4TFFVRlBjRVVzUlVGQlV6ZHNSQ3hQUVVOd1FqZzJSQ3hGUVVGSkwxWXNVMEZCVjJNc1JVRkJVelZFTEZOQlEzaENPSFJETEVWQlFWTnFNVUlzUlVGQlN5eFhRVVZrYVRGQ0xFVkJRVk1zUzBGQlRXeHhReXhGUVVGVGNEWkRMRmxCUzJoRExFMUJRVThzUTBGRFRHc3pReXhQUVVGUkxGZEJRMDV2ZEVNc1JVRkJWeXhMUVVOWWRuZERMRVZCUVU5clJDeFhRVXRpYkhSRUxFVkJRVkV5TmtZc2RVSkJRWGxDUVN4SExHa3ZRME53VFdwRExITkRRVUZwUkRjM1FpeEZRVUY1UWpKR0xFY3NiVWhCZVVONlJTeFBRWGhEUzBFc1NVRkRTa0VzUlVGQldTeERRVU5ZTmpKQ0xGZEJRVmtzUTBGRFdDeERRVU5EUXl4TFFVRk5MSEZFUVV0S0wzcENMRVZCUVdsQ0xFbEJRVWxuTUVJc2EwSkJRV3RDTHpKQ0xFZEJSM1pEZDFJc1JVRkJVeXhKUVVGSk5WTXNVMEZCYlVJc1UwRkJRVU1zUjBGRGNrTjFReXhGUVVGWGRrTXNUVUZGVG1sU0xFVkJRV012VFN4RlFVRmxhVEJDTEd0Q1FVRnJRaXhQUVVGUkxFTkJRelZFZG10RExFZEJRVWtzUlVGRFNuZHJReXhaUVVGWkxFVkJRMXBETEZOQlFWTXNTMEZGUlhSdlF5eFhRVUZoTEdWQlJXNUNkVzlETEVWQlFYRkNjREJDTEVWQlFXVnBNRUlzYTBKQlFXdENMR05CUVdVc1EwRkRNVVYyYTBNc1IwRkJTU3hGUVVOS2QydERMRmxCUVZrc1JVRkRXa01zVTBGQlV5eExRVVZUZEc5RExGZEJRV0VzWTBGRGFFTjFiME1zUlVGQmJVSnViME1zVlVGQldTeFRRVUZQZVZNc1IwRkJkMElzY1VNc05FUkJSelZFTEU4c2MwSkJSRTFOTEVWQlFWa3NTVUZCU1VNc2MwSkJRWE5DTlRkRUxFdEJRVXR2YUVRc1RVRkJUVEV5UXl4TFFVRkxNbmRFTEVWQlFVMXdiME1zVVVGRGJFVXNSMEZCVFRCd1F5eEZRVUZsWkN4eFFrRkJjVUpHTEVrc1QwRkRka0lzVDBGRWJrSXNVMEZEYlVJc1IwRkJUV2RDTEVWQlFXVnhNRUlzWjBJc1QwRkRlRU1zVDBGRVRVTXNSVUZCWVN4VFFVTnVRaXhIUVVGTmREQkNMRVZCUVdWc1FpeHZRa0ZCYjBKM01VSXNTU3hqUVVGNlF5eFRRVU5CUml4RlFVRnRRbko0Uml4TFFVRkxOR3BETEV0QlFVdDBha01zUzBGQlMwTXNWVUZCVlRBNFJDeEZRVUZsVEN4dlFpd3JRa0ZGTTBRM0swUXNVVUZCVVVNc1RVRkJUU3hITEN0Q1FVbFlkVEpFTEVWQlNXRXNSMEZCVFRCSkxFVkJRV1Y2UWl4bFFVZ3ZRaXhEUVVGUUxFVkJRVTh4UXl4UlFVRlJReXhSUVVGUkxFTkJRVVZ2UWl4SFFVRkpPRU1zUlVGQlowSTNReXhIUVVGSk5GQXNTeXhQUVVjMVEzWlBMRVZCUVZrc1V5eHBRa0ZGYWtJc1R5eHpRa0ZCUVN4SFFVRk5kMElzUlVGQlpXeENMRzlDUVVGdlFrNHNTU3hqUVVGNlF5eFRMR0ZCUlVFc1R5eFhRVUZQTEVOQlFWQXNSVUZCVHpORExGRkJRVkZGTEU5QlFVOHNTU3hQUVZWMlFpeFBRVkJCYVVVc1JVRkJaWFpDTEdWQlFXbENMRk5CUVUxRExFZEJRVXNzY1VNc01rSkJRekZETEU5QlFYZENMRTlCUVhCQ1FTeEZRVUZOZGtrc1YwRkhWbXRKTEVWQlFWTXNRMEZCUlc1Q0xFZEJRVWs0UXl4RlFVRm5RamRETEVkQlFVazBVQ3hKUVVac1F5eFhRVXRMTEVOQlFWQXNSVUZCVHpCQ0lpd2labWxzWlNJNkltMWhhVzR1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SW9ablZ1WTNScGIyNGdkMlZpY0dGamExVnVhWFpsY25OaGJFMXZaSFZzWlVSbFptbHVhWFJwYjI0b2NtOXZkQ3dnWm1GamRHOXllU2tnZTF4dVhIUnBaaWgwZVhCbGIyWWdaWGh3YjNKMGN5QTlQVDBnSjI5aWFtVmpkQ2NnSmlZZ2RIbHdaVzltSUcxdlpIVnNaU0E5UFQwZ0oyOWlhbVZqZENjcFhHNWNkRngwYlc5a2RXeGxMbVY0Y0c5eWRITWdQU0JtWVdOMGIzSjVLQ2s3WEc1Y2RHVnNjMlVnYVdZb2RIbHdaVzltSUdSbFptbHVaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJrWldacGJtVXVZVzFrS1Z4dVhIUmNkR1JsWm1sdVpTaGJYU3dnWm1GamRHOXllU2s3WEc1Y2RHVnNjMlVnYVdZb2RIbHdaVzltSUdWNGNHOXlkSE1nUFQwOUlDZHZZbXBsWTNRbktWeHVYSFJjZEdWNGNHOXlkSE5iWENKeWNHTmNJbDBnUFNCbVlXTjBiM0o1S0NrN1hHNWNkR1ZzYzJWY2JseDBYSFJ5YjI5MFcxd2ljbkJqWENKZElEMGdabUZqZEc5eWVTZ3BPMXh1ZlNrb2QybHVaRzkzTENCbWRXNWpkR2x2YmlncElIdGNibkpsZEhWeWJpQWlMQ0lnWEhRdkx5QlVhR1VnYlc5a2RXeGxJR05oWTJobFhHNGdYSFIyWVhJZ2FXNXpkR0ZzYkdWa1RXOWtkV3hsY3lBOUlIdDlPMXh1WEc0Z1hIUXZMeUJVYUdVZ2NtVnhkV2x5WlNCbWRXNWpkR2x2Ymx4dUlGeDBablZ1WTNScGIyNGdYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeWh0YjJSMWJHVkpaQ2tnZTF4dVhHNGdYSFJjZEM4dklFTm9aV05ySUdsbUlHMXZaSFZzWlNCcGN5QnBiaUJqWVdOb1pWeHVJRngwWEhScFppaHBibk4wWVd4c1pXUk5iMlIxYkdWelcyMXZaSFZzWlVsa1hTa2dlMXh1SUZ4MFhIUmNkSEpsZEhWeWJpQnBibk4wWVd4c1pXUk5iMlIxYkdWelcyMXZaSFZzWlVsa1hTNWxlSEJ2Y25Sek8xeHVJRngwWEhSOVhHNGdYSFJjZEM4dklFTnlaV0YwWlNCaElHNWxkeUJ0YjJSMWJHVWdLR0Z1WkNCd2RYUWdhWFFnYVc1MGJ5QjBhR1VnWTJGamFHVXBYRzRnWEhSY2RIWmhjaUJ0YjJSMWJHVWdQU0JwYm5OMFlXeHNaV1JOYjJSMWJHVnpXMjF2WkhWc1pVbGtYU0E5SUh0Y2JpQmNkRngwWEhScE9pQnRiMlIxYkdWSlpDeGNiaUJjZEZ4MFhIUnNPaUJtWVd4elpTeGNiaUJjZEZ4MFhIUmxlSEJ2Y25Sek9pQjdmVnh1SUZ4MFhIUjlPMXh1WEc0Z1hIUmNkQzh2SUVWNFpXTjFkR1VnZEdobElHMXZaSFZzWlNCbWRXNWpkR2x2Ymx4dUlGeDBYSFJ0YjJSMWJHVnpXMjF2WkhWc1pVbGtYUzVqWVd4c0tHMXZaSFZzWlM1bGVIQnZjblJ6TENCdGIyUjFiR1VzSUcxdlpIVnNaUzVsZUhCdmNuUnpMQ0JmWDNkbFluQmhZMnRmY21WeGRXbHlaVjlmS1R0Y2JseHVJRngwWEhRdkx5QkdiR0ZuSUhSb1pTQnRiMlIxYkdVZ1lYTWdiRzloWkdWa1hHNGdYSFJjZEcxdlpIVnNaUzVzSUQwZ2RISjFaVHRjYmx4dUlGeDBYSFF2THlCU1pYUjFjbTRnZEdobElHVjRjRzl5ZEhNZ2IyWWdkR2hsSUcxdlpIVnNaVnh1SUZ4MFhIUnlaWFIxY200Z2JXOWtkV3hsTG1WNGNHOXlkSE03WEc0Z1hIUjlYRzVjYmx4dUlGeDBMeThnWlhod2IzTmxJSFJvWlNCdGIyUjFiR1Z6SUc5aWFtVmpkQ0FvWDE5M1pXSndZV05yWDIxdlpIVnNaWE5mWHlsY2JpQmNkRjlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMTh1YlNBOUlHMXZaSFZzWlhNN1hHNWNiaUJjZEM4dklHVjRjRzl6WlNCMGFHVWdiVzlrZFd4bElHTmhZMmhsWEc0Z1hIUmZYM2RsWW5CaFkydGZjbVZ4ZFdseVpWOWZMbU1nUFNCcGJuTjBZV3hzWldSTmIyUjFiR1Z6TzF4dVhHNGdYSFF2THlCa1pXWnBibVVnWjJWMGRHVnlJR1oxYm1OMGFXOXVJR1p2Y2lCb1lYSnRiMjU1SUdWNGNHOXlkSE5jYmlCY2RGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOHVaQ0E5SUdaMWJtTjBhVzl1S0dWNGNHOXlkSE1zSUc1aGJXVXNJR2RsZEhSbGNpa2dlMXh1SUZ4MFhIUnBaaWdoWDE5M1pXSndZV05yWDNKbGNYVnBjbVZmWHk1dktHVjRjRzl5ZEhNc0lHNWhiV1VwS1NCN1hHNGdYSFJjZEZ4MFQySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLR1Y0Y0c5eWRITXNJRzVoYldVc0lIc2daVzUxYldWeVlXSnNaVG9nZEhKMVpTd2daMlYwT2lCblpYUjBaWElnZlNrN1hHNGdYSFJjZEgxY2JpQmNkSDA3WEc1Y2JpQmNkQzh2SUdSbFptbHVaU0JmWDJWelRXOWtkV3hsSUc5dUlHVjRjRzl5ZEhOY2JpQmNkRjlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMTh1Y2lBOUlHWjFibU4wYVc5dUtHVjRjRzl5ZEhNcElIdGNiaUJjZEZ4MGFXWW9kSGx3Wlc5bUlGTjViV0p2YkNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlZZ1UzbHRZbTlzTG5SdlUzUnlhVzVuVkdGbktTQjdYRzRnWEhSY2RGeDBUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0dWNGNHOXlkSE1zSUZONWJXSnZiQzUwYjFOMGNtbHVaMVJoWnl3Z2V5QjJZV3gxWlRvZ0owMXZaSFZzWlNjZ2ZTazdYRzRnWEhSY2RIMWNiaUJjZEZ4MFQySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLR1Y0Y0c5eWRITXNJQ2RmWDJWelRXOWtkV3hsSnl3Z2V5QjJZV3gxWlRvZ2RISjFaU0I5S1R0Y2JpQmNkSDA3WEc1Y2JpQmNkQzh2SUdOeVpXRjBaU0JoSUdaaGEyVWdibUZ0WlhOd1lXTmxJRzlpYW1WamRGeHVJRngwTHk4Z2JXOWtaU0FtSURFNklIWmhiSFZsSUdseklHRWdiVzlrZFd4bElHbGtMQ0J5WlhGMWFYSmxJR2wwWEc0Z1hIUXZMeUJ0YjJSbElDWWdNam9nYldWeVoyVWdZV3hzSUhCeWIzQmxjblJwWlhNZ2IyWWdkbUZzZFdVZ2FXNTBieUIwYUdVZ2JuTmNiaUJjZEM4dklHMXZaR1VnSmlBME9pQnlaWFIxY200Z2RtRnNkV1VnZDJobGJpQmhiSEpsWVdSNUlHNXpJRzlpYW1WamRGeHVJRngwTHk4Z2JXOWtaU0FtSURoOE1Ub2dZbVZvWVhabElHeHBhMlVnY21WeGRXbHlaVnh1SUZ4MFgxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NTBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXNJRzF2WkdVcElIdGNiaUJjZEZ4MGFXWW9iVzlrWlNBbUlERXBJSFpoYkhWbElEMGdYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeWgyWVd4MVpTazdYRzRnWEhSY2RHbG1LRzF2WkdVZ0ppQTRLU0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdYSFJjZEdsbUtDaHRiMlJsSUNZZ05Da2dKaVlnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYjJKcVpXTjBKeUFtSmlCMllXeDFaU0FtSmlCMllXeDFaUzVmWDJWelRXOWtkV3hsS1NCeVpYUjFjbTRnZG1Gc2RXVTdYRzRnWEhSY2RIWmhjaUJ1Y3lBOUlFOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdYRzRnWEhSY2RGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOHVjaWh1Y3lrN1hHNGdYSFJjZEU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHVjeXdnSjJSbFptRjFiSFFuTENCN0lHVnVkVzFsY21GaWJHVTZJSFJ5ZFdVc0lIWmhiSFZsT2lCMllXeDFaU0I5S1R0Y2JpQmNkRngwYVdZb2JXOWtaU0FtSURJZ0ppWWdkSGx3Wlc5bUlIWmhiSFZsSUNFOUlDZHpkSEpwYm1jbktTQm1iM0lvZG1GeUlHdGxlU0JwYmlCMllXeDFaU2tnWDE5M1pXSndZV05yWDNKbGNYVnBjbVZmWHk1a0tHNXpMQ0JyWlhrc0lHWjFibU4wYVc5dUtHdGxlU2tnZXlCeVpYUjFjbTRnZG1Gc2RXVmJhMlY1WFRzZ2ZTNWlhVzVrS0c1MWJHd3NJR3RsZVNrcE8xeHVJRngwWEhSeVpYUjFjbTRnYm5NN1hHNGdYSFI5TzF4dVhHNGdYSFF2THlCblpYUkVaV1poZFd4MFJYaHdiM0owSUdaMWJtTjBhVzl1SUdadmNpQmpiMjF3WVhScFltbHNhWFI1SUhkcGRHZ2dibTl1TFdoaGNtMXZibmtnYlc5a2RXeGxjMXh1SUZ4MFgxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NXVJRDBnWm5WdVkzUnBiMjRvYlc5a2RXeGxLU0I3WEc0Z1hIUmNkSFpoY2lCblpYUjBaWElnUFNCdGIyUjFiR1VnSmlZZ2JXOWtkV3hsTGw5ZlpYTk5iMlIxYkdVZ1AxeHVJRngwWEhSY2RHWjFibU4wYVc5dUlHZGxkRVJsWm1GMWJIUW9LU0I3SUhKbGRIVnliaUJ0YjJSMWJHVmJKMlJsWm1GMWJIUW5YVHNnZlNBNlhHNGdYSFJjZEZ4MFpuVnVZM1JwYjI0Z1oyVjBUVzlrZFd4bFJYaHdiM0owY3lncElIc2djbVYwZFhKdUlHMXZaSFZzWlRzZ2ZUdGNiaUJjZEZ4MFgxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NWtLR2RsZEhSbGNpd2dKMkVuTENCblpYUjBaWElwTzF4dUlGeDBYSFJ5WlhSMWNtNGdaMlYwZEdWeU8xeHVJRngwZlR0Y2JseHVJRngwTHk4Z1QySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c1hHNGdYSFJmWDNkbFluQmhZMnRmY21WeGRXbHlaVjlmTG04Z1BTQm1kVzVqZEdsdmJpaHZZbXBsWTNRc0lIQnliM0JsY25SNUtTQjdJSEpsZEhWeWJpQlBZbXBsWTNRdWNISnZkRzkwZVhCbExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29iMkpxWldOMExDQndjbTl3WlhKMGVTazdJSDA3WEc1Y2JpQmNkQzh2SUY5ZmQyVmljR0ZqYTE5d2RXSnNhV05mY0dGMGFGOWZYRzRnWEhSZlgzZGxZbkJoWTJ0ZmNtVnhkV2x5WlY5ZkxuQWdQU0JjSWx3aU8xeHVYRzVjYmlCY2RDOHZJRXh2WVdRZ1pXNTBjbmtnYlc5a2RXeGxJR0Z1WkNCeVpYUjFjbTRnWlhod2IzSjBjMXh1SUZ4MGNtVjBkWEp1SUY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4b1gxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NXpJRDBnT0NrN1hHNGlMQ0oyWVhJZ0pHcHpZMjl0Y0Qwa2FuTmpiMjF3Zkh4N2ZUc2thbk5qYjIxd0xuTmpiM0JsUFh0OU95UnFjMk52YlhBdVptbHVaRWx1ZEdWeWJtRnNQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGhJR2x1YzNSaGJtTmxiMllnVTNSeWFXNW5KaVlvWVQxVGRISnBibWNvWVNrcE8yWnZjaWgyWVhJZ1pEMWhMbXhsYm1kMGFDeGxQVEE3WlR4a08yVXJLeWw3ZG1GeUlHWTlZVnRsWFR0cFppaGlMbU5oYkd3b1l5eG1MR1VzWVNrcGNtVjBkWEp1ZTJrNlpTeDJPbVo5ZlhKbGRIVnlibnRwT2kweExIWTZkbTlwWkNBd2ZYMDdKR3B6WTI5dGNDNUJVMU5WVFVWZlJWTTFQU0V4T3lScWMyTnZiWEF1UVZOVFZVMUZYMDVQWDA1QlZFbFdSVjlOUVZBOUlURTdKR3B6WTI5dGNDNUJVMU5WVFVWZlRrOWZUa0ZVU1ZaRlgxTkZWRDBoTVRza2FuTmpiMjF3TGxOSlRWQk1SVjlHVWs5VlRrUmZVRTlNV1VaSlRFdzlJVEU3WEc0a2FuTmpiMjF3TG1SbFptbHVaVkJ5YjNCbGNuUjVQU1JxYzJOdmJYQXVRVk5UVlUxRlgwVlROWHg4WENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUnBaWE0vVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNU9tWjFibU4wYVc5dUtHRXNZaXhqS1h0aElUMUJjbkpoZVM1d2NtOTBiM1I1Y0dVbUptRWhQVTlpYW1WamRDNXdjbTkwYjNSNWNHVW1KaWhoVzJKZFBXTXVkbUZzZFdVcGZUc2thbk5qYjIxd0xtZGxkRWRzYjJKaGJEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNWNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnZDJsdVpHOTNKaVozYVc1a2IzYzlQVDFoUDJFNlhDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JR2RzYjJKaGJDWW1iblZzYkNFOVoyeHZZbUZzUDJkc2IySmhiRHBoZlRza2FuTmpiMjF3TG1kc2IySmhiRDBrYW5OamIyMXdMbWRsZEVkc2IySmhiQ2gwYUdsektUdGNiaVJxYzJOdmJYQXVjRzlzZVdacGJHdzlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdhV1lvWWlsN1l6MGthbk5qYjIxd0xtZHNiMkpoYkR0aFBXRXVjM0JzYVhRb1hDSXVYQ0lwTzJadmNpaGtQVEE3WkR4aExteGxibWQwYUMweE8yUXJLeWw3ZG1GeUlHVTlZVnRrWFR0bElHbHVJR044ZkNoalcyVmRQWHQ5S1R0alBXTmJaVjE5WVQxaFcyRXViR1Z1WjNSb0xURmRPMlE5WTF0aFhUdGlQV0lvWkNrN1lpRTlaQ1ltYm5Wc2JDRTlZaVltSkdwelkyOXRjQzVrWldacGJtVlFjbTl3WlhKMGVTaGpMR0VzZTJOdmJtWnBaM1Z5WVdKc1pUb2hNQ3gzY21sMFlXSnNaVG9oTUN4MllXeDFaVHBpZlNsOWZUc2thbk5qYjIxd0xuQnZiSGxtYVd4c0tGd2lRWEp5WVhrdWNISnZkRzkwZVhCbExtWnBibVJKYm1SbGVGd2lMR1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJoUDJFNlpuVnVZM1JwYjI0b1lTeGpLWHR5WlhSMWNtNGdKR3B6WTI5dGNDNW1hVzVrU1c1MFpYSnVZV3dvZEdocGN5eGhMR01wTG1sOWZTeGNJbVZ6Tmx3aUxGd2laWE16WENJcE8xeHVKR3B6WTI5dGNDNWphR1ZqYTFOMGNtbHVaMEZ5WjNNOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJsbUtHNTFiR3c5UFdFcGRHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpaGNJbFJvWlNBbmRHaHBjeWNnZG1Gc2RXVWdabTl5SUZOMGNtbHVaeTV3Y205MGIzUjVjR1V1WENJcll5dGNJaUJ0ZFhOMElHNXZkQ0JpWlNCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkZ3aUtUdHBaaWhpSUdsdWMzUmhibU5sYjJZZ1VtVm5SWGh3S1hSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb1hDSkdhWEp6ZENCaGNtZDFiV1Z1ZENCMGJ5QlRkSEpwYm1jdWNISnZkRzkwZVhCbExsd2lLMk1yWENJZ2JYVnpkQ0J1YjNRZ1ltVWdZU0J5WldkMWJHRnlJR1Y0Y0hKbGMzTnBiMjVjSWlrN2NtVjBkWEp1SUdFclhDSmNJbjA3WEc0a2FuTmpiMjF3TG5CdmJIbG1hV3hzS0Z3aVUzUnlhVzVuTG5CeWIzUnZkSGx3WlM1bGJtUnpWMmwwYUZ3aUxHWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhQMkU2Wm5WdVkzUnBiMjRvWVN4aktYdDJZWElnWWowa2FuTmpiMjF3TG1Ob1pXTnJVM1J5YVc1blFYSm5jeWgwYUdsekxHRXNYQ0psYm1SelYybDBhRndpS1R0aEt6MWNJbHdpTzNadmFXUWdNRDA5UFdNbUppaGpQV0l1YkdWdVozUm9LVHRqUFUxaGRHZ3ViV0Y0S0RBc1RXRjBhQzV0YVc0b1kzd3dMR0l1YkdWdVozUm9LU2s3Wm05eUtIWmhjaUJsUFdFdWJHVnVaM1JvT3pBOFpTWW1NRHhqT3lscFppaGlXeTB0WTEwaFBXRmJMUzFsWFNseVpYUjFjbTRoTVR0eVpYUjFjbTRnTUQ0OVpYMTlMRndpWlhNMlhDSXNYQ0psY3pOY0lpazdKR3B6WTI5dGNDNXdiMng1Wm1sc2JDaGNJa0Z5Y21GNUxuQnliM1J2ZEhsd1pTNW1hVzVrWENJc1puVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRS9ZVHBtZFc1amRHbHZiaWhoTEdNcGUzSmxkSFZ5YmlBa2FuTmpiMjF3TG1acGJtUkpiblJsY201aGJDaDBhR2x6TEdFc1l5a3VkbjE5TEZ3aVpYTTJYQ0lzWENKbGN6TmNJaWs3WEc0a2FuTmpiMjF3TG5CdmJIbG1hV3hzS0Z3aVUzUnlhVzVuTG5CeWIzUnZkSGx3WlM1emRHRnlkSE5YYVhSb1hDSXNablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0UvWVRwbWRXNWpkR2x2YmloaExHTXBlM1poY2lCaVBTUnFjMk52YlhBdVkyaGxZMnRUZEhKcGJtZEJjbWR6S0hSb2FYTXNZU3hjSW5OMFlYSjBjMWRwZEdoY0lpazdZU3M5WENKY0lqdDJZWElnWlQxaUxteGxibWQwYUN4bVBXRXViR1Z1WjNSb08yTTlUV0YwYUM1dFlYZ29NQ3hOWVhSb0xtMXBiaWhqZkRBc1lpNXNaVzVuZEdncEtUdG1iM0lvZG1GeUlHYzlNRHRuUEdZbUptTThaVHNwYVdZb1lsdGpLeXRkSVQxaFcyY3JLMTBwY21WMGRYSnVJVEU3Y21WMGRYSnVJR2MrUFdaOWZTeGNJbVZ6Tmx3aUxGd2laWE16WENJcE8xeHVKR3B6WTI5dGNDNXdiMng1Wm1sc2JDaGNJbE4wY21sdVp5NXdjbTkwYjNSNWNHVXVjbVZ3WldGMFhDSXNablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0UvWVRwbWRXNWpkR2x2YmloaEtYdDJZWElnWWowa2FuTmpiMjF3TG1Ob1pXTnJVM1J5YVc1blFYSm5jeWgwYUdsekxHNTFiR3dzWENKeVpYQmxZWFJjSWlrN2FXWW9NRDVoZkh3eE16UXlNVGMzTWpjNVBHRXBkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvWENKSmJuWmhiR2xrSUdOdmRXNTBJSFpoYkhWbFhDSXBPMkY4UFRBN1ptOXlLSFpoY2lCa1BWd2lYQ0k3WVRzcGFXWW9ZU1l4SmlZb1pDczlZaWtzWVQ0K1BqMHhLV0lyUFdJN2NtVjBkWEp1SUdSOWZTeGNJbVZ6Tmx3aUxGd2laWE16WENJcE8zWmhjaUJEVDAxUVNVeEZSRDBoTUN4bmIyOW5QV2R2YjJkOGZIdDlPMmR2YjJjdVoyeHZZbUZzUFhSb2FYTjhmSE5sYkdZN1oyOXZaeTVwYzBSbFpqMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdkbTlwWkNBd0lUMDlZWDA3WjI5dlp5NXBjMU4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNWNJbk4wY21sdVoxd2lQVDEwZVhCbGIyWWdZWDA3WjI5dlp5NXBjMEp2YjJ4bFlXNDlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVYQ0ppYjI5c1pXRnVYQ0k5UFhSNWNHVnZaaUJoZlR0Y2JtZHZiMmN1YVhOT2RXMWlaWEk5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1WENKdWRXMWlaWEpjSWowOWRIbHdaVzltSUdGOU8yZHZiMmN1Wlhod2IzSjBVR0YwYUY4OVpuVnVZM1JwYjI0b1lTeGlMR01wZTJFOVlTNXpjR3hwZENoY0lpNWNJaWs3WXoxamZIeG5iMjluTG1kc2IySmhiRHRoV3pCZGFXNGdZM3g4WENKMWJtUmxabWx1WldSY0lqMDlkSGx3Wlc5bUlHTXVaWGhsWTFOamNtbHdkSHg4WXk1bGVHVmpVMk55YVhCMEtGd2lkbUZ5SUZ3aUsyRmJNRjBwTzJadmNpaDJZWElnWkR0aExteGxibWQwYUNZbUtHUTlZUzV6YUdsbWRDZ3BLVHNwSVdFdWJHVnVaM1JvSmlabmIyOW5MbWx6UkdWbUtHSXBQMk5iWkYwOVlqcGpQV05iWkYwbUptTmJaRjBoUFQxUFltcGxZM1F1Y0hKdmRHOTBlWEJsVzJSZFAyTmJaRjA2WTF0a1hUMTdmWDA3WEc1bmIyOW5MbVJsWm1sdVpUMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtDRkRUMDFRU1V4RlJDbDdkbUZ5SUdNOVoyOXZaeTVuYkc5aVlXd3VRMHhQVTFWU1JWOVZUa05QVFZCSlRFVkVYMFJGUmtsT1JWTXNaRDFuYjI5bkxtZHNiMkpoYkM1RFRFOVRWVkpGWDBSRlJrbE9SVk03WXlZbWRtOXBaQ0F3UFQwOVl5NXViMlJsVkhsd1pTWW1UMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLR01zWVNrL1lqMWpXMkZkT21RbUpuWnZhV1FnTUQwOVBXUXVibTlrWlZSNWNHVW1KazlpYW1WamRDNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrdVkyRnNiQ2hrTEdFcEppWW9ZajFrVzJGZEtYMXlaWFIxY200Z1luMDdaMjl2Wnk1R1JVRlVWVkpGVTBWVVgxbEZRVkk5TWpBeE1qdG5iMjluTGtSRlFsVkhQU0V3TzJkdmIyY3VURTlEUVV4RlBWd2laVzVjSWp0bmIyOW5MbFJTVlZOVVJVUmZVMGxVUlQwaE1EdG5iMjluTGxOVVVrbERWRjlOVDBSRlgwTlBUVkJCVkVsQ1RFVTlJVEU3WjI5dlp5NUVTVk5CVEV4UFYxOVVSVk5VWDA5T1RGbGZRMDlFUlQxRFQwMVFTVXhGUkNZbUlXZHZiMmN1UkVWQ1ZVYzdaMjl2Wnk1RlRrRkNURVZmUTBoU1QwMUZYMEZRVUY5VFFVWkZYMU5EVWtsUVZGOU1UMEZFU1U1SFBTRXhPMXh1WjI5dlp5NXdjbTkyYVdSbFBXWjFibU4wYVc5dUtHRXBlMmxtS0dkdmIyY3VhWE5KYmsxdlpIVnNaVXh2WVdSbGNsOG9LU2wwYUhKdmR5QkZjbkp2Y2loY0ltZHZiMmN1Y0hKdmRtbGtaU0JqWVc1dWIzUWdZbVVnZFhObFpDQjNhWFJvYVc0Z1lTQnRiMlIxYkdVdVhDSXBPMmxtS0NGRFQwMVFTVXhGUkNZbVoyOXZaeTVwYzFCeWIzWnBaR1ZrWHloaEtTbDBhSEp2ZHlCRmNuSnZjaWduVG1GdFpYTndZV05sSUZ3aUp5dGhLeWRjSWlCaGJISmxZV1I1SUdSbFkyeGhjbVZrTGljcE8yZHZiMmN1WTI5dWMzUnlkV04wVG1GdFpYTndZV05sWHloaEtYMDdaMjl2Wnk1amIyNXpkSEoxWTNST1lXMWxjM0JoWTJWZlBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb0lVTlBUVkJKVEVWRUtYdGtaV3hsZEdVZ1oyOXZaeTVwYlhCc2FXTnBkRTVoYldWemNHRmpaWE5mVzJGZE8yWnZjaWgyWVhJZ1l6MWhPeWhqUFdNdWMzVmljM1J5YVc1bktEQXNZeTVzWVhOMFNXNWtaWGhQWmloY0lpNWNJaWtwS1NZbUlXZHZiMmN1WjJWMFQySnFaV04wUW5sT1lXMWxLR01wT3lsbmIyOW5MbWx0Y0d4cFkybDBUbUZ0WlhOd1lXTmxjMTliWTEwOUlUQjlaMjl2Wnk1bGVIQnZjblJRWVhSb1h5aGhMR0lwZlR0Y2JtZHZiMmN1WjJWMFUyTnlhWEIwVG05dVkyVTlablZ1WTNScGIyNG9ZU2w3YVdZb1lTWW1ZU0U5WjI5dlp5NW5iRzlpWVd3cGNtVjBkWEp1SUdkdmIyY3VaMlYwVTJOeWFYQjBUbTl1WTJWZktHRXVaRzlqZFcxbGJuUXBPMjUxYkd3OVBUMW5iMjluTG1OemNFNXZibU5sWHlZbUtHZHZiMmN1WTNOd1RtOXVZMlZmUFdkdmIyY3VaMlYwVTJOeWFYQjBUbTl1WTJWZktHZHZiMmN1WjJ4dlltRnNMbVJ2WTNWdFpXNTBLU2s3Y21WMGRYSnVJR2R2YjJjdVkzTndUbTl1WTJWZmZUdG5iMjluTGs1UFRrTkZYMUJCVkZSRlVrNWZQUzllVzF4Y2R5c3ZYeTFkSzFzOVhYc3dMREo5SkM4N1oyOXZaeTVqYzNCT2IyNWpaVjg5Ym5Wc2JEdG5iMjluTG1kbGRGTmpjbWx3ZEU1dmJtTmxYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRvWVQxaExuRjFaWEo1VTJWc1pXTjBiM0ltSm1FdWNYVmxjbmxUWld4bFkzUnZjaWhjSW5OamNtbHdkRnR1YjI1alpWMWNJaWtwSmlZb1lUMWhMbTV2Ym1ObGZIeGhMbWRsZEVGMGRISnBZblYwWlNoY0ltNXZibU5sWENJcEtTWW1aMjl2Wnk1T1QwNURSVjlRUVZSVVJWSk9YeTUwWlhOMEtHRXBQMkU2WENKY0luMDdaMjl2Wnk1V1FVeEpSRjlOVDBSVlRFVmZVa1ZmUFM5ZVcyRXRla0V0V2w4a1hWdGhMWHBCTFZvd0xUa3VYeVJkS2lRdk8xeHVaMjl2Wnk1dGIyUjFiR1U5Wm5WdVkzUnBiMjRvWVNsN2FXWW9JV2R2YjJjdWFYTlRkSEpwYm1jb1lTbDhmQ0ZoZkh3dE1UMDlZUzV6WldGeVkyZ29aMjl2Wnk1V1FVeEpSRjlOVDBSVlRFVmZVa1ZmS1NsMGFISnZkeUJGY25KdmNpaGNJa2x1ZG1Gc2FXUWdiVzlrZFd4bElHbGtaVzUwYVdacFpYSmNJaWs3YVdZb0lXZHZiMmN1YVhOSmJrZHZiMmROYjJSMWJHVk1iMkZrWlhKZktDa3BkR2h5YjNjZ1JYSnliM0lvWENKTmIyUjFiR1VnWENJcllTdGNJaUJvWVhNZ1ltVmxiaUJzYjJGa1pXUWdhVzVqYjNKeVpXTjBiSGt1SUU1dmRHVXNJRzF2WkhWc1pYTWdZMkZ1Ym05MElHSmxJR3h2WVdSbFpDQmhjeUJ1YjNKdFlXd2djMk55YVhCMGN5NGdWR2hsZVNCeVpYRjFhWEpsSUhOdmJXVWdhMmx1WkNCdlppQndjbVV0Y0hKdlkyVnpjMmx1WnlCemRHVndMaUJaYjNVbmNtVWdiR2xyWld4NUlIUnllV2x1WnlCMGJ5QnNiMkZrSUdFZ2JXOWtkV3hsSUhacFlTQmhJSE5qY21sd2RDQjBZV2NnYjNJZ1lYTWdZU0J3WVhKMElHOW1JR0VnWTI5dVkyRjBaVzVoZEdWa0lHSjFibVJzWlNCM2FYUm9iM1YwSUhKbGQzSnBkR2x1WnlCMGFHVWdiVzlrZFd4bExpQkdiM0lnYlc5eVpTQnBibVp2SUhObFpUb2dhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMmR2YjJkc1pTOWpiRzl6ZFhKbExXeHBZbkpoY25rdmQybHJhUzluYjI5bkxtMXZaSFZzWlRvdFlXNHRSVk0yTFcxdlpIVnNaUzFzYVd0bExXRnNkR1Z5Ym1GMGFYWmxMWFJ2TFdkdmIyY3VjSEp2ZG1sa1pTNWNJaWs3WEc1cFppaG5iMjluTG0xdlpIVnNaVXh2WVdSbGNsTjBZWFJsWHk1dGIyUjFiR1ZPWVcxbEtYUm9jbTkzSUVWeWNtOXlLRndpWjI5dlp5NXRiMlIxYkdVZ2JXRjVJRzl1YkhrZ1ltVWdZMkZzYkdWa0lHOXVZMlVnY0dWeUlHMXZaSFZzWlM1Y0lpazdaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4dWJXOWtkV3hsVG1GdFpUMWhPMmxtS0NGRFQwMVFTVXhGUkNsN2FXWW9aMjl2Wnk1cGMxQnliM1pwWkdWa1h5aGhLU2wwYUhKdmR5QkZjbkp2Y2lnblRtRnRaWE53WVdObElGd2lKeXRoS3lkY0lpQmhiSEpsWVdSNUlHUmxZMnhoY21Wa0xpY3BPMlJsYkdWMFpTQm5iMjluTG1sdGNHeHBZMmwwVG1GdFpYTndZV05sYzE5YllWMTlmVHRuYjI5bkxtMXZaSFZzWlM1blpYUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWJXOWtkV3hsTG1kbGRFbHVkR1Z5Ym1Gc1h5aGhLWDA3WEc1bmIyOW5MbTF2WkhWc1pTNW5aWFJKYm5SbGNtNWhiRjg5Wm5WdVkzUnBiMjRvWVNsN2FXWW9JVU5QVFZCSlRFVkVLWHRwWmloaElHbHVJR2R2YjJjdWJHOWhaR1ZrVFc5a2RXeGxjMThwY21WMGRYSnVJR2R2YjJjdWJHOWhaR1ZrVFc5a2RXeGxjMTliWVYwdVpYaHdiM0owY3p0cFppZ2haMjl2Wnk1cGJYQnNhV05wZEU1aGJXVnpjR0ZqWlhOZlcyRmRLWEpsZEhWeWJpQmhQV2R2YjJjdVoyVjBUMkpxWldOMFFubE9ZVzFsS0dFcExHNTFiR3doUFdFL1lUcHVkV3hzZlhKbGRIVnliaUJ1ZFd4c2ZUdG5iMjluTGsxdlpIVnNaVlI1Y0dVOWUwVlROanBjSW1Wek5sd2lMRWRQVDBjNlhDSm5iMjluWENKOU8yZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmUFc1MWJHdzdaMjl2Wnk1cGMwbHVUVzlrZFd4bFRHOWhaR1Z5WHoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbWx6U1c1SGIyOW5UVzlrZFd4bFRHOWhaR1Z5WHlncGZIeG5iMjluTG1selNXNUZjelpOYjJSMWJHVk1iMkZrWlhKZktDbDlPMmR2YjJjdWFYTkpia2R2YjJkTmIyUjFiR1ZNYjJGa1pYSmZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJU0ZuYjI5bkxtMXZaSFZzWlV4dllXUmxjbE4wWVhSbFh5WW1aMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4dWRIbHdaVDA5WjI5dlp5NU5iMlIxYkdWVWVYQmxMa2RQVDBkOU8xeHVaMjl2Wnk1cGMwbHVSWE0yVFc5a2RXeGxURzloWkdWeVh6MW1kVzVqZEdsdmJpZ3BlMmxtS0dkdmIyY3ViVzlrZFd4bFRHOWhaR1Z5VTNSaGRHVmZKaVpuYjI5bkxtMXZaSFZzWlV4dllXUmxjbE4wWVhSbFh5NTBlWEJsUFQxbmIyOW5MazF2WkhWc1pWUjVjR1V1UlZNMktYSmxkSFZ5YmlFd08zWmhjaUJoUFdkdmIyY3VaMnh2WW1Gc0xpUnFjMk52YlhBN2NtVjBkWEp1SUdFL1hDSm1kVzVqZEdsdmJsd2lJVDEwZVhCbGIyWWdZUzVuWlhSRGRYSnlaVzUwVFc5a2RXeGxVR0YwYUQ4aE1Ub2hJV0V1WjJWMFEzVnljbVZ1ZEUxdlpIVnNaVkJoZEdnb0tUb2hNWDA3WEc1bmIyOW5MbTF2WkhWc1pTNWtaV05zWVhKbFRHVm5ZV041VG1GdFpYTndZV05sUFdaMWJtTjBhVzl1S0NsN2FXWW9JVU5QVFZCSlRFVkVKaVloWjI5dlp5NXBjMGx1UjI5dlowMXZaSFZzWlV4dllXUmxjbDhvS1NsMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdWJXOWtkV3hsTG1SbFkyeGhjbVZNWldkaFkzbE9ZVzFsYzNCaFkyVWdiWFZ6ZENCaVpTQmpZV3hzWldRZ1puSnZiU0IzYVhSb2FXNGdZU0JuYjI5bkxtMXZaSFZzWlZ3aUtUdHBaaWdoUTA5TlVFbE1SVVFtSmlGbmIyOW5MbTF2WkhWc1pVeHZZV1JsY2xOMFlYUmxYeTV0YjJSMWJHVk9ZVzFsS1hSb2NtOTNJRVZ5Y205eUtGd2laMjl2Wnk1dGIyUjFiR1VnYlhWemRDQmlaU0JqWVd4c1pXUWdjSEpwYjNJZ2RHOGdaMjl2Wnk1dGIyUjFiR1V1WkdWamJHRnlaVXhsWjJGamVVNWhiV1Z6Y0dGalpTNWNJaWs3WjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHVaR1ZqYkdGeVpVeGxaMkZqZVU1aGJXVnpjR0ZqWlQwaE1IMDdYRzVuYjI5bkxtUmxZMnhoY21WTmIyUjFiR1ZKWkQxbWRXNWpkR2x2YmloaEtYdHBaaWdoUTA5TlVFbE1SVVFwZTJsbUtDRm5iMjluTG1selNXNUZjelpOYjJSMWJHVk1iMkZrWlhKZktDa3BkR2h5YjNjZ1JYSnliM0lvWENKbmIyOW5MbVJsWTJ4aGNtVk5iMlIxYkdWSlpDQnRZWGtnYjI1c2VTQmlaU0JqWVd4c1pXUWdabkp2YlNCM2FYUm9hVzRnWVc0Z1JWTTJJRzF2WkhWc1pWd2lLVHRwWmlobmIyOW5MbTF2WkhWc1pVeHZZV1JsY2xOMFlYUmxYeVltWjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHViVzlrZFd4bFRtRnRaU2wwYUhKdmR5QkZjbkp2Y2loY0ltZHZiMmN1WkdWamJHRnlaVTF2WkhWc1pVbGtJRzFoZVNCdmJteDVJR0psSUdOaGJHeGxaQ0J2Ym1ObElIQmxjaUJ0YjJSMWJHVXVYQ0lwTzJsbUtHRWdhVzRnWjI5dlp5NXNiMkZrWldSTmIyUjFiR1Z6WHlsMGFISnZkeUJGY25KdmNpZ25UVzlrZFd4bElIZHBkR2dnYm1GdFpYTndZV05sSUZ3aUp5dGhLeWRjSWlCaGJISmxZV1I1SUdWNGFYTjBjeTRuS1R0OWFXWW9aMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4cFoyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjh1Ylc5a2RXeGxUbUZ0WlQxaE8yVnNjMlY3ZG1GeUlHSTlaMjl2Wnk1bmJHOWlZV3d1SkdwelkyOXRjRHRwWmlnaFlueDhYQ0ptZFc1amRHbHZibHdpSVQxMGVYQmxiMllnWWk1blpYUkRkWEp5Wlc1MFRXOWtkV3hsVUdGMGFDbDBhSEp2ZHlCRmNuSnZjaWduVFc5a2RXeGxJSGRwZEdnZ2JtRnRaWE53WVdObElGd2lKeXRjYm1Fckoxd2lJR2hoY3lCaVpXVnVJR3h2WVdSbFpDQnBibU52Y25KbFkzUnNlUzRuS1R0aVBXSXVjbVZ4ZFdseVpTaGlMbWRsZEVOMWNuSmxiblJOYjJSMWJHVlFZWFJvS0NrcE8yZHZiMmN1Ykc5aFpHVmtUVzlrZFd4bGMxOWJZVjA5ZTJWNGNHOXlkSE02WWl4MGVYQmxPbWR2YjJjdVRXOWtkV3hsVkhsd1pTNUZVellzYlc5a2RXeGxTV1E2WVgxOWZUdG5iMjluTG5ObGRGUmxjM1JQYm14NVBXWjFibU4wYVc5dUtHRXBlMmxtS0dkdmIyY3VSRWxUUVV4TVQxZGZWRVZUVkY5UFRreFpYME5QUkVVcGRHaHliM2NnWVQxaGZIeGNJbHdpTEVWeWNtOXlLRndpU1cxd2IzSjBhVzVuSUhSbGMzUXRiMjVzZVNCamIyUmxJR2x1ZEc4Z2JtOXVMV1JsWW5WbklHVnVkbWx5YjI1dFpXNTBYQ0lyS0dFL1hDSTZJRndpSzJFNlhDSXVYQ0lwS1R0OU8yZHZiMmN1Wm05eWQyRnlaRVJsWTJ4aGNtVTlablZ1WTNScGIyNG9ZU2w3ZlR0Y2JrTlBUVkJKVEVWRWZId29aMjl2Wnk1cGMxQnliM1pwWkdWa1h6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZU0JwYmlCbmIyOW5MbXh2WVdSbFpFMXZaSFZzWlhOZmZId2haMjl2Wnk1cGJYQnNhV05wZEU1aGJXVnpjR0ZqWlhOZlcyRmRKaVpuYjI5bkxtbHpSR1ZtUVc1a1RtOTBUblZzYkNobmIyOW5MbWRsZEU5aWFtVmpkRUo1VG1GdFpTaGhLU2w5TEdkdmIyY3VhVzF3YkdsamFYUk9ZVzFsYzNCaFkyVnpYejE3WENKbmIyOW5MbTF2WkhWc1pWd2lPaUV3ZlNrN1oyOXZaeTVuWlhSUFltcGxZM1JDZVU1aGJXVTlablZ1WTNScGIyNG9ZU3hpS1h0aFBXRXVjM0JzYVhRb1hDSXVYQ0lwTzJJOVlueDhaMjl2Wnk1bmJHOWlZV3c3Wm05eUtIWmhjaUJqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwYVdZb1lqMWlXMkZiWTExZExDRm5iMjluTG1selJHVm1RVzVrVG05MFRuVnNiQ2hpS1NseVpYUjFjbTRnYm5Wc2JEdHlaWFIxY200Z1luMDdaMjl2Wnk1bmJHOWlZV3hwZW1VOVpuVnVZM1JwYjI0b1lTeGlLWHRpUFdKOGZHZHZiMmN1WjJ4dlltRnNPMlp2Y2loMllYSWdZeUJwYmlCaEtXSmJZMTA5WVZ0alhYMDdYRzVuYjI5bkxtRmtaRVJsY0dWdVpHVnVZM2s5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ2w3SVVOUFRWQkpURVZFSmlabmIyOW5Ma1JGVUVWT1JFVk9RMGxGVTE5RlRrRkNURVZFSmlabmIyOW5MbVJsWW5WblRHOWhaR1Z5WHk1aFpHUkVaWEJsYm1SbGJtTjVLR0VzWWl4akxHUXBmVHRuYjI5bkxrVk9RVUpNUlY5RVJVSlZSMTlNVDBGRVJWSTlJVEE3WjI5dlp5NXNiMmRVYjBOdmJuTnZiR1ZmUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1WjJ4dlltRnNMbU52Ym5OdmJHVW1KbWR2YjJjdVoyeHZZbUZzTG1OdmJuTnZiR1V1WlhKeWIzSW9ZU2w5TzF4dVoyOXZaeTV5WlhGMWFYSmxQV1oxYm1OMGFXOXVLR0VwZTJsbUtDRkRUMDFRU1V4RlJDbDdaMjl2Wnk1RlRrRkNURVZmUkVWQ1ZVZGZURTlCUkVWU0ppWm5iMjluTG1SbFluVm5URzloWkdWeVh5NXlaWEYxWlhOMFpXUW9ZU2s3YVdZb1oyOXZaeTVwYzFCeWIzWnBaR1ZrWHloaEtTbDdhV1lvWjI5dlp5NXBjMGx1VFc5a2RXeGxURzloWkdWeVh5Z3BLWEpsZEhWeWJpQm5iMjluTG0xdlpIVnNaUzVuWlhSSmJuUmxjbTVoYkY4b1lTbDlaV3h6WlNCcFppaG5iMjluTGtWT1FVSk1SVjlFUlVKVlIxOU1UMEZFUlZJcGUzWmhjaUJpUFdkdmIyY3ViVzlrZFd4bFRHOWhaR1Z5VTNSaGRHVmZPMmR2YjJjdWJXOWtkV3hsVEc5aFpHVnlVM1JoZEdWZlBXNTFiR3c3ZEhKNWUyZHZiMmN1WkdWaWRXZE1iMkZrWlhKZkxteHZZV1JmS0dFcGZXWnBibUZzYkhsN1oyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjg5WW4xOWNtVjBkWEp1SUc1MWJHeDlmVHRuYjI5bkxuSmxjWFZwY21WVWVYQmxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnlibnQ5ZlR0bmIyOW5MbUpoYzJWUVlYUm9QVndpWENJN1oyOXZaeTV1ZFd4c1JuVnVZM1JwYjI0OVpuVnVZM1JwYjI0b0tYdDlPMXh1WjI5dlp5NWhZbk4wY21GamRFMWxkR2h2WkQxbWRXNWpkR2x2YmlncGUzUm9jbTkzSUVWeWNtOXlLRndpZFc1cGJYQnNaVzFsYm5SbFpDQmhZbk4wY21GamRDQnRaWFJvYjJSY0lpazdmVHRuYjI5bkxtRmtaRk5wYm1kc1pYUnZia2RsZEhSbGNqMW1kVzVqZEdsdmJpaGhLWHRoTG1sdWMzUmhibU5sWHoxMmIybGtJREE3WVM1blpYUkpibk4wWVc1alpUMW1kVzVqZEdsdmJpZ3BlMmxtS0dFdWFXNXpkR0Z1WTJWZktYSmxkSFZ5YmlCaExtbHVjM1JoYm1ObFh6dG5iMjluTGtSRlFsVkhKaVlvWjI5dlp5NXBibk4wWVc1MGFXRjBaV1JUYVc1bmJHVjBiMjV6WDF0bmIyOW5MbWx1YzNSaGJuUnBZWFJsWkZOcGJtZHNaWFJ2Ym5OZkxteGxibWQwYUYwOVlTazdjbVYwZFhKdUlHRXVhVzV6ZEdGdVkyVmZQVzVsZHlCaGZYMDdaMjl2Wnk1cGJuTjBZVzUwYVdGMFpXUlRhVzVuYkdWMGIyNXpYejFiWFR0bmIyOW5Ma3hQUVVSZlRVOUVWVXhGWDFWVFNVNUhYMFZXUVV3OUlUQTdaMjl2Wnk1VFJVRk1YMDFQUkZWTVJWOUZXRkJQVWxSVFBXZHZiMmN1UkVWQ1ZVYzdaMjl2Wnk1c2IyRmtaV1JOYjJSMWJHVnpYejE3ZlR0bmIyOW5Ma1JGVUVWT1JFVk9RMGxGVTE5RlRrRkNURVZFUFNGRFQwMVFTVXhGUkNZbVoyOXZaeTVGVGtGQ1RFVmZSRVZDVlVkZlRFOUJSRVZTTzJkdmIyY3VWRkpCVGxOUVNVeEZQVndpWkdWMFpXTjBYQ0k3WEc1bmIyOW5Ma0ZUVTFWTlJWOUZVMTlOVDBSVlRFVlRYMVJTUVU1VFVFbE1SVVE5SVRFN1oyOXZaeTVVVWtGT1UxQkpURVZmVkU5ZlRFRk9SMVZCUjBVOVhDSmNJanRuYjI5bkxsUlNRVTVUVUVsTVJWSTlYQ0owY21GdWMzQnBiR1V1YW5OY0lqdG5iMjluTG1oaGMwSmhaRXhsZEZOamIzQnBibWM5Ym5Wc2JEdG5iMjluTG5WelpWTmhabUZ5YVRFd1YyOXlhMkZ5YjNWdVpEMW1kVzVqZEdsdmJpZ3BlMmxtS0c1MWJHdzlQV2R2YjJjdWFHRnpRbUZrVEdWMFUyTnZjR2x1WnlsN2RISjVlM1poY2lCaFBTRmxkbUZzS0NkY0luVnpaU0J6ZEhKcFkzUmNJanRzWlhRZ2VDQTlJREU3SUdaMWJtTjBhVzl1SUdZb0tTQjdJSEpsZEhWeWJpQjBlWEJsYjJZZ2VEc2dmVHRtS0NrZ1BUMGdYQ0p1ZFcxaVpYSmNJanNuS1gxallYUmphQ2hpS1h0aFBTRXhmV2R2YjJjdWFHRnpRbUZrVEdWMFUyTnZjR2x1WnoxaGZYSmxkSFZ5YmlCbmIyOW5MbWhoYzBKaFpFeGxkRk5qYjNCcGJtZDlPMmR2YjJjdWQyOXlhMkZ5YjNWdVpGTmhabUZ5YVRFd1JYWmhiRUoxWnoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY201Y0lpaG1kVzVqZEdsdmJpZ3BlMXdpSzJFclhDSmNYRzQ3ZlNrb0tUdGNYRzVjSW4wN1hHNW5iMjluTG14dllXUk5iMlIxYkdVOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVoyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjg3ZEhKNWUyZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmUFh0dGIyUjFiR1ZPWVcxbE9sd2lYQ0lzWkdWamJHRnlaVXhsWjJGamVVNWhiV1Z6Y0dGalpUb2hNU3gwZVhCbE9tZHZiMmN1VFc5a2RXeGxWSGx3WlM1SFQwOUhmVHRwWmlobmIyOW5MbWx6Um5WdVkzUnBiMjRvWVNrcGRtRnlJR005WVM1allXeHNLSFp2YVdRZ01DeDdmU2s3Wld4elpTQnBaaWhuYjI5bkxtbHpVM1J5YVc1bktHRXBLV2R2YjJjdWRYTmxVMkZtWVhKcE1UQlhiM0pyWVhKdmRXNWtLQ2ttSmloaFBXZHZiMmN1ZDI5eWEyRnliM1Z1WkZOaFptRnlhVEV3UlhaaGJFSjFaeWhoS1Nrc1l6MW5iMjluTG14dllXUk5iMlIxYkdWR2NtOXRVMjkxY21ObFh5NWpZV3hzS0hadmFXUWdNQ3hoS1R0bGJITmxJSFJvY205M0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCdGIyUjFiR1VnWkdWbWFXNXBkR2x2Ymx3aUtUdDJZWElnWkQxbmIyOW5MbTF2WkhWc1pVeHZZV1JsY2xOMFlYUmxYeTV0YjJSMWJHVk9ZVzFsTzJsbUtHZHZiMmN1YVhOVGRISnBibWNvWkNrbUptUXBaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4dVpHVmpiR0Z5WlV4bFoyRmplVTVoYldWemNHRmpaVDluYjI5bkxtTnZibk4wY25WamRFNWhiV1Z6Y0dGalpWOG9aQ3hjYm1NcE9tZHZiMmN1VTBWQlRGOU5UMFJWVEVWZlJWaFFUMUpVVXlZbVQySnFaV04wTG5ObFlXd21KbHdpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJqSmladWRXeHNJVDFqSmlaUFltcGxZM1F1YzJWaGJDaGpLU3huYjI5bkxteHZZV1JsWkUxdlpIVnNaWE5mVzJSZFBYdGxlSEJ2Y25Sek9tTXNkSGx3WlRwbmIyOW5MazF2WkhWc1pWUjVjR1V1UjA5UFJ5eHRiMlIxYkdWSlpEcG5iMjluTG0xdlpIVnNaVXh2WVdSbGNsTjBZWFJsWHk1dGIyUjFiR1ZPWVcxbGZUdGxiSE5sSUhSb2NtOTNJRVZ5Y205eUtDZEpiblpoYkdsa0lHMXZaSFZzWlNCdVlXMWxJRndpSnl0a0t5ZGNJaWNwTzMxbWFXNWhiR3g1ZTJkdmIyY3ViVzlrZFd4bFRHOWhaR1Z5VTNSaGRHVmZQV0o5ZlR0bmIyOW5MbXh2WVdSTmIyUjFiR1ZHY205dFUyOTFjbU5sWHoxbWRXNWpkR2x2YmloaEtYdGxkbUZzS0dFcE8zSmxkSFZ5Ym50OWZUdG5iMjluTG01dmNtMWhiR2w2WlZCaGRHaGZQV1oxYm1OMGFXOXVLR0VwZTJFOVlTNXpjR3hwZENoY0lpOWNJaWs3Wm05eUtIWmhjaUJpUFRBN1lqeGhMbXhsYm1kMGFEc3BYQ0l1WENJOVBXRmJZbDAvWVM1emNHeHBZMlVvWWl3eEtUcGlKaVpjSWk0dVhDSTlQV0ZiWWwwbUptRmJZaTB4WFNZbVhDSXVMbHdpSVQxaFcySXRNVjAvWVM1emNHeHBZMlVvTFMxaUxESXBPbUlyS3p0eVpYUjFjbTRnWVM1cWIybHVLRndpTDF3aUtYMDdYRzVuYjI5bkxteHZZV1JHYVd4bFUzbHVZMTg5Wm5WdVkzUnBiMjRvWVNsN2FXWW9aMjl2Wnk1bmJHOWlZV3d1UTB4UFUxVlNSVjlNVDBGRVgwWkpURVZmVTFsT1F5bHlaWFIxY200Z1oyOXZaeTVuYkc5aVlXd3VRMHhQVTFWU1JWOU1UMEZFWDBaSlRFVmZVMWxPUXloaEtUdDBjbmw3ZG1GeUlHSTlibVYzSUdkdmIyY3VaMnh2WW1Gc0xsaE5URWgwZEhCU1pYRjFaWE4wTzJJdWIzQmxiaWhjSW1kbGRGd2lMR0VzSVRFcE8ySXVjMlZ1WkNncE8zSmxkSFZ5YmlBd1BUMWlMbk4wWVhSMWMzeDhNakF3UFQxaUxuTjBZWFIxY3o5aUxuSmxjM0J2Ym5ObFZHVjRkRHB1ZFd4c2ZXTmhkR05vS0dNcGUzSmxkSFZ5YmlCdWRXeHNmWDA3WEc1bmIyOW5MblJ5WVc1emNHbHNaVjg5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BXZHZiMmN1WjJ4dlltRnNMaVJxYzJOdmJYQTdaSHg4S0dkdmIyY3VaMnh2WW1Gc0xpUnFjMk52YlhBOVpEMTdmU2s3ZG1GeUlHVTlaQzUwY21GdWMzQnBiR1U3YVdZb0lXVXBlM1poY2lCbVBXZHZiMmN1WW1GelpWQmhkR2dyWjI5dlp5NVVVa0ZPVTFCSlRFVlNMR2M5WjI5dlp5NXNiMkZrUm1sc1pWTjVibU5mS0dZcE8ybG1LR2NwZXlobWRXNWpkR2x2YmlncGV5Z3dMR1YyWVd3cEtHY3JYQ0pjWEc0dkx5TWdjMjkxY21ObFZWSk1QVndpSzJZcGZTa3VZMkZzYkNobmIyOW5MbWRzYjJKaGJDazdhV1lvWjI5dlp5NW5iRzlpWVd3dUpHZDNkRVY0Y0c5eWRDWW1aMjl2Wnk1bmJHOWlZV3d1SkdkM2RFVjRjRzl5ZEM0a2FuTmpiMjF3SmlZaFoyOXZaeTVuYkc5aVlXd3VKR2QzZEVWNGNHOXlkQzRrYW5OamIyMXdMblJ5WVc1emNHbHNaU2wwYUhKdmR5QkZjbkp2Y2lnblZHaGxJSFJ5WVc1emNHbHNaWElnWkdsa0lHNXZkQ0J3Y205d1pYSnNlU0JsZUhCdmNuUWdkR2hsSUZ3aWRISmhibk53YVd4bFhDSWdiV1YwYUc5a0xpQWtaM2QwUlhod2IzSjBPaUFuSzBwVFQwNHVjM1J5YVc1bmFXWjVLR2R2YjJjdVoyeHZZbUZzTGlSbmQzUkZlSEJ2Y25RcEtUdG5iMjluTG1kc2IySmhiQzRrYW5OamIyMXdMblJ5WVc1emNHbHNaVDFjYm1kdmIyY3VaMnh2WW1Gc0xpUm5kM1JGZUhCdmNuUXVKR3B6WTI5dGNDNTBjbUZ1YzNCcGJHVTdaRDFuYjI5bkxtZHNiMkpoYkM0a2FuTmpiMjF3TzJVOVpDNTBjbUZ1YzNCcGJHVjlmV1Y4ZkNobFBXUXVkSEpoYm5Od2FXeGxQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVzYjJkVWIwTnZibk52YkdWZktHSXJYQ0lnY21WeGRXbHlaWE1nZEhKaGJuTndhV3hoZEdsdmJpQmlkWFFnYm04Z2RISmhibk53YVd4bGNpQjNZWE1nWm05MWJtUXVYQ0lwTzNKbGRIVnliaUJoZlNrN2NtVjBkWEp1SUdVb1lTeGlMR01wZlR0Y2JtZHZiMmN1ZEhsd1pVOW1QV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQWFI1Y0dWdlppQmhPMmxtS0Z3aWIySnFaV04wWENJOVBXSXBhV1lvWVNsN2FXWW9ZU0JwYm5OMFlXNWpaVzltSUVGeWNtRjVLWEpsZEhWeWJsd2lZWEp5WVhsY0lqdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1QySnFaV04wS1hKbGRIVnliaUJpTzNaaGNpQmpQVTlpYW1WamRDNXdjbTkwYjNSNWNHVXVkRzlUZEhKcGJtY3VZMkZzYkNoaEtUdHBaaWhjSWx0dlltcGxZM1FnVjJsdVpHOTNYVndpUFQxaktYSmxkSFZ5Ymx3aWIySnFaV04wWENJN2FXWW9YQ0piYjJKcVpXTjBJRUZ5Y21GNVhWd2lQVDFqZkh4Y0ltNTFiV0psY2x3aVBUMTBlWEJsYjJZZ1lTNXNaVzVuZEdnbUpsd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJoTG5Od2JHbGpaU1ltWENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlHRXVjSEp2Y0dWeWRIbEpjMFZ1ZFcxbGNtRmliR1VtSmlGaExuQnliM0JsY25SNVNYTkZiblZ0WlhKaFlteGxLRndpYzNCc2FXTmxYQ0lwS1hKbGRIVnlibHdpWVhKeVlYbGNJanRwWmloY0lsdHZZbXBsWTNRZ1JuVnVZM1JwYjI1ZFhDSTlQV044ZkZ3aWRXNWtaV1pwYm1Wa1hDSWhQWFI1Y0dWdlppQmhMbU5oYkd3bUpsd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJoTG5CeWIzQmxjblI1U1hORmJuVnRaWEpoWW14bEppWWhZUzV3Y205d1pYSjBlVWx6Ulc1MWJXVnlZV0pzWlNoY0ltTmhiR3hjSWlrcGNtVjBkWEp1WENKbWRXNWpkR2x2Ymx3aWZXVnNjMlVnY21WMGRYSnVYQ0p1ZFd4c1hDSTdYRzVsYkhObElHbG1LRndpWm5WdVkzUnBiMjVjSWowOVlpWW1YQ0oxYm1SbFptbHVaV1JjSWowOWRIbHdaVzltSUdFdVkyRnNiQ2x5WlhSMWNtNWNJbTlpYW1WamRGd2lPM0psZEhWeWJpQmlmVHRuYjI5bkxtbHpUblZzYkQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2JuVnNiRDA5UFdGOU8yZHZiMmN1YVhORVpXWkJibVJPYjNST2RXeHNQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJ1ZFd4c0lUMWhmVHRuYjI5bkxtbHpRWEp5WVhrOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdVhDSmhjbkpoZVZ3aVBUMW5iMjluTG5SNWNHVlBaaWhoS1gwN1oyOXZaeTVwYzBGeWNtRjVUR2xyWlQxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxbmIyOW5MblI1Y0dWUFppaGhLVHR5WlhSMWNtNWNJbUZ5Y21GNVhDSTlQV0o4ZkZ3aWIySnFaV04wWENJOVBXSW1KbHdpYm5WdFltVnlYQ0k5UFhSNWNHVnZaaUJoTG14bGJtZDBhSDA3WjI5dlp5NXBjMFJoZEdWTWFXdGxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxtbHpUMkpxWldOMEtHRXBKaVpjSW1aMWJtTjBhVzl1WENJOVBYUjVjR1Z2WmlCaExtZGxkRVoxYkd4WlpXRnlmVHRuYjI5bkxtbHpSblZ1WTNScGIyNDlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVYQ0ptZFc1amRHbHZibHdpUFQxbmIyOW5MblI1Y0dWUFppaGhLWDA3WEc1bmIyOW5MbWx6VDJKcVpXTjBQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQWFI1Y0dWdlppQmhPM0psZEhWeWJsd2liMkpxWldOMFhDSTlQV0ltSm01MWJHd2hQV0Y4ZkZ3aVpuVnVZM1JwYjI1Y0lqMDlZbjA3WjI5dlp5NW5aWFJWYVdROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRmJaMjl2Wnk1VlNVUmZVRkpQVUVWU1ZGbGZYWHg4S0dGYloyOXZaeTVWU1VSZlVGSlBVRVZTVkZsZlhUMHJLMmR2YjJjdWRXbGtRMjkxYm5SbGNsOHBmVHRuYjI5bkxtaGhjMVZwWkQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200aElXRmJaMjl2Wnk1VlNVUmZVRkpQVUVWU1ZGbGZYWDA3WjI5dlp5NXlaVzF2ZG1WVmFXUTlablZ1WTNScGIyNG9ZU2w3Ym5Wc2JDRTlQV0VtSmx3aWNtVnRiM1psUVhSMGNtbGlkWFJsWENKcGJpQmhKaVpoTG5KbGJXOTJaVUYwZEhKcFluVjBaU2huYjI5bkxsVkpSRjlRVWs5UVJWSlVXVjhwTzNSeWVYdGtaV3hsZEdVZ1lWdG5iMjluTGxWSlJGOVFVazlRUlZKVVdWOWRmV05oZEdOb0tHSXBlMzE5TzJkdmIyY3VWVWxFWDFCU1QxQkZVbFJaWHoxY0ltTnNiM04xY21WZmRXbGtYMXdpS3lneFJUa3FUV0YwYUM1eVlXNWtiMjBvS1Q0K1BqQXBPMmR2YjJjdWRXbGtRMjkxYm5SbGNsODlNRHRuYjI5bkxtZGxkRWhoYzJoRGIyUmxQV2R2YjJjdVoyVjBWV2xrTzF4dVoyOXZaeTV5WlcxdmRtVklZWE5vUTI5a1pUMW5iMjluTG5KbGJXOTJaVlZwWkR0bmIyOW5MbU5zYjI1bFQySnFaV04wUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFdkdmIyY3VkSGx3WlU5bUtHRXBPMmxtS0Z3aWIySnFaV04wWENJOVBXSjhmRndpWVhKeVlYbGNJajA5WWlsN2FXWW9YQ0ptZFc1amRHbHZibHdpUFQwOWRIbHdaVzltSUdFdVkyeHZibVVwY21WMGRYSnVJR0V1WTJ4dmJtVW9LVHRpUFZ3aVlYSnlZWGxjSWowOVlqOWJYVHA3ZlR0bWIzSW9kbUZ5SUdNZ2FXNGdZU2xpVzJOZFBXZHZiMmN1WTJ4dmJtVlBZbXBsWTNRb1lWdGpYU2s3Y21WMGRYSnVJR0o5Y21WMGRYSnVJR0Y5TzJkdmIyY3VZbWx1WkU1aGRHbDJaVjg5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM0psZEhWeWJpQmhMbU5oYkd3dVlYQndiSGtvWVM1aWFXNWtMR0Z5WjNWdFpXNTBjeWw5TzF4dVoyOXZaeTVpYVc1a1NuTmZQV1oxYm1OMGFXOXVLR0VzWWl4aktYdHBaaWdoWVNsMGFISnZkeUJGY25KdmNpZ3BPMmxtS0RJOFlYSm5kVzFsYm5SekxteGxibWQwYUNsN2RtRnlJR1E5UVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk5zYVdObExtTmhiR3dvWVhKbmRXMWxiblJ6TERJcE8zSmxkSFZ5YmlCbWRXNWpkR2x2YmlncGUzWmhjaUJqUFVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0dGeVozVnRaVzUwY3lrN1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5WdWMyaHBablF1WVhCd2JIa29ZeXhrS1R0eVpYUjFjbTRnWVM1aGNIQnNlU2hpTEdNcGZYMXlaWFIxY200Z1puVnVZM1JwYjI0b0tYdHlaWFIxY200Z1lTNWhjSEJzZVNoaUxHRnlaM1Z0Wlc1MGN5bDlmVHRuYjI5bkxtSnBibVE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMFoxYm1OMGFXOXVMbkJ5YjNSdmRIbHdaUzVpYVc1a0ppWXRNU0U5Um5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVkRzlUZEhKcGJtY29LUzVwYm1SbGVFOW1LRndpYm1GMGFYWmxJR052WkdWY0lpay9aMjl2Wnk1aWFXNWtQV2R2YjJjdVltbHVaRTVoZEdsMlpWODZaMjl2Wnk1aWFXNWtQV2R2YjJjdVltbHVaRXB6WHp0eVpYUjFjbTRnWjI5dlp5NWlhVzVrTG1Gd2NHeDVLRzUxYkd3c1lYSm5kVzFsYm5SektYMDdYRzVuYjI5bkxuQmhjblJwWVd3OVpuVnVZM1JwYjI0b1lTeGlLWHQyWVhJZ1l6MUJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXNNU2s3Y21WMGRYSnVJR1oxYm1OMGFXOXVLQ2w3ZG1GeUlHSTlZeTV6YkdsalpTZ3BPMkl1Y0hWemFDNWhjSEJzZVNoaUxHRnlaM1Z0Wlc1MGN5azdjbVYwZFhKdUlHRXVZWEJ3Ykhrb2RHaHBjeXhpS1gxOU8yZHZiMmN1YldsNGFXNDlablZ1WTNScGIyNG9ZU3hpS1h0bWIzSW9kbUZ5SUdNZ2FXNGdZaWxoVzJOZFBXSmJZMTE5TzJkdmIyY3VibTkzUFdkdmIyY3VWRkpWVTFSRlJGOVRTVlJGSmlaRVlYUmxMbTV2ZDN4OFpuVnVZM1JwYjI0b0tYdHlaWFIxY200cmJtVjNJRVJoZEdWOU8xeHVaMjl2Wnk1bmJHOWlZV3hGZG1Gc1BXWjFibU4wYVc5dUtHRXBlMmxtS0dkdmIyY3VaMnh2WW1Gc0xtVjRaV05UWTNKcGNIUXBaMjl2Wnk1bmJHOWlZV3d1WlhobFkxTmpjbWx3ZENoaExGd2lTbUYyWVZOamNtbHdkRndpS1R0bGJITmxJR2xtS0dkdmIyY3VaMnh2WW1Gc0xtVjJZV3dwZTJsbUtHNTFiR3c5UFdkdmIyY3VaWFpoYkZkdmNtdHpSbTl5UjJ4dlltRnNjMThwZTNSeWVYdG5iMjluTG1kc2IySmhiQzVsZG1Gc0tGd2lkbUZ5SUY5bGRtRnNWR1Z6ZEY4Z1BTQXhPMXdpS1gxallYUmphQ2hrS1h0OWFXWW9YQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUdkdmIyY3VaMnh2WW1Gc0xsOWxkbUZzVkdWemRGOHBlM1J5ZVh0a1pXeGxkR1VnWjI5dlp5NW5iRzlpWVd3dVgyVjJZV3hVWlhOMFgzMWpZWFJqYUNoa0tYdDlaMjl2Wnk1bGRtRnNWMjl5YTNOR2IzSkhiRzlpWVd4elh6MGhNSDFsYkhObElHZHZiMmN1WlhaaGJGZHZjbXR6Um05eVIyeHZZbUZzYzE4OUlURjlhV1lvWjI5dlp5NWxkbUZzVjI5eWEzTkdiM0pIYkc5aVlXeHpYeWxuYjI5bkxtZHNiMkpoYkM1bGRtRnNLR0VwTzJWc2MyVjdkbUZ5SUdJOVoyOXZaeTVuYkc5aVlXd3VaRzlqZFcxbGJuUXNZejFpTG1OeVpXRjBaVVZzWlcxbGJuUW9YQ0pUUTFKSlVGUmNJaWs3WXk1MGVYQmxQVndpZEdWNGRDOXFZWFpoYzJOeWFYQjBYQ0k3WXk1a1pXWmxjajFjYmlFeE8yTXVZWEJ3Wlc1a1EyaHBiR1FvWWk1amNtVmhkR1ZVWlhoMFRtOWtaU2hoS1NrN1lpNW9aV0ZrTG1Gd2NHVnVaRU5vYVd4a0tHTXBPMkl1YUdWaFpDNXlaVzF2ZG1WRGFHbHNaQ2hqS1gxOVpXeHpaU0IwYUhKdmR5QkZjbkp2Y2loY0ltZHZiMmN1WjJ4dlltRnNSWFpoYkNCdWIzUWdZWFpoYVd4aFlteGxYQ0lwTzMwN1oyOXZaeTVsZG1Gc1YyOXlhM05HYjNKSGJHOWlZV3h6WHoxdWRXeHNPMXh1WjI5dlp5NW5aWFJEYzNOT1lXMWxQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9YQ0l1WENJOVBWTjBjbWx1WnloaEtTNWphR0Z5UVhRb01Da3BkR2h5YjNjZ1JYSnliM0lvSjJOc1lYTnpUbUZ0WlNCd1lYTnpaV1FnYVc0Z1oyOXZaeTVuWlhSRGMzTk9ZVzFsSUcxMWMzUWdibTkwSUhOMFlYSjBJSGRwZEdnZ1hDSXVYQ0l1SUZsdmRTQndZWE56WldRNklDY3JZU2s3ZG1GeUlHTTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdVkzTnpUbUZ0WlUxaGNIQnBibWRmVzJGZGZIeGhmU3hrUFdaMWJtTjBhVzl1S0dFcGUyRTlZUzV6Y0d4cGRDaGNJaTFjSWlrN1ptOXlLSFpoY2lCaVBWdGRMR1E5TUR0a1BHRXViR1Z1WjNSb08yUXJLeWxpTG5CMWMyZ29ZeWhoVzJSZEtTazdjbVYwZFhKdUlHSXVhbTlwYmloY0lpMWNJaWw5TzJROVoyOXZaeTVqYzNOT1lXMWxUV0Z3Y0dsdVoxOC9YQ0pDV1Y5WFNFOU1SVndpUFQxbmIyOW5MbU56YzA1aGJXVk5ZWEJ3YVc1blUzUjViR1ZmUDJNNlpEcG1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZWDA3WVQxaVAyRXJYQ0l0WENJclpDaGlLVHBrS0dFcE8zSmxkSFZ5YmlCbmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwTlRVMTlPUVUxRlgwMUJVRjlHVGo5bmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwTlRVMTlPUVUxRlgwMUJVRjlHVGloaEtUcGhmVHRjYm1kdmIyY3VjMlYwUTNOelRtRnRaVTFoY0hCcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbU56YzA1aGJXVk5ZWEJ3YVc1blh6MWhPMmR2YjJjdVkzTnpUbUZ0WlUxaGNIQnBibWRUZEhsc1pWODlZbjA3SVVOUFRWQkpURVZFSmlabmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwTlRVMTlPUVUxRlgwMUJVRkJKVGtjbUppaG5iMjluTG1OemMwNWhiV1ZOWVhCd2FXNW5YejFuYjI5bkxtZHNiMkpoYkM1RFRFOVRWVkpGWDBOVFUxOU9RVTFGWDAxQlVGQkpUa2NwTzJkdmIyY3VaMlYwVFhOblBXWjFibU4wYVc5dUtHRXNZaXhqS1h0akppWmpMbWgwYld3bUppaGhQV0V1Y21Wd2JHRmpaU2d2UEM5bkxGd2lKbXgwTzF3aUtTazdZaVltS0dFOVlTNXlaWEJzWVdObEtDOWNYSHRjWENRb1cxNTlYU3NwZlM5bkxHWjFibU4wYVc5dUtHRXNZeWw3Y21WMGRYSnVJRzUxYkd3aFBXSW1KbU1nYVc0Z1lqOWlXMk5kT21GOUtTazdjbVYwZFhKdUlHRjlPMmR2YjJjdVoyVjBUWE5uVjJsMGFFWmhiR3hpWVdOclBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0Y5TzJkdmIyY3VaWGh3YjNKMFUzbHRZbTlzUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtVjRjRzl5ZEZCaGRHaGZLR0VzWWl4aktYMDdYRzVuYjI5bkxtVjRjRzl5ZEZCeWIzQmxjblI1UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRoVzJKZFBXTjlPMmR2YjJjdWFXNW9aWEpwZEhNOVpuVnVZM1JwYjI0b1lTeGlLWHRtZFc1amRHbHZiaUJqS0NsN2ZXTXVjSEp2ZEc5MGVYQmxQV0l1Y0hKdmRHOTBlWEJsTzJFdWMzVndaWEpEYkdGemMxODlZaTV3Y205MGIzUjVjR1U3WVM1d2NtOTBiM1I1Y0dVOWJtVjNJR003WVM1d2NtOTBiM1I1Y0dVdVkyOXVjM1J5ZFdOMGIzSTlZVHRoTG1KaGMyVTlablZ1WTNScGIyNG9ZU3hqTEdZcGUyWnZjaWgyWVhJZ1pEMUJjbkpoZVNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvTFRJcExHVTlNanRsUEdGeVozVnRaVzUwY3k1c1pXNW5kR2c3WlNzcktXUmJaUzB5WFQxaGNtZDFiV1Z1ZEhOYlpWMDdjbVYwZFhKdUlHSXVjSEp2ZEc5MGVYQmxXMk5kTG1Gd2NHeDVLR0VzWkNsOWZUdGNibWR2YjJjdVltRnpaVDFtZFc1amRHbHZiaWhoTEdJc1l5bDdkbUZ5SUdROVlYSm5kVzFsYm5SekxtTmhiR3hsWlM1allXeHNaWEk3YVdZb1oyOXZaeTVUVkZKSlExUmZUVTlFUlY5RFQwMVFRVlJKUWt4RmZIeG5iMjluTGtSRlFsVkhKaVloWkNsMGFISnZkeUJGY25KdmNpaGNJbUZ5WjNWdFpXNTBjeTVqWVd4c1pYSWdibTkwSUdSbFptbHVaV1F1SUNCbmIyOW5MbUpoYzJVb0tTQmpZVzV1YjNRZ1ltVWdkWE5sWkNCM2FYUm9JSE4wY21samRDQnRiMlJsSUdOdlpHVXVJRk5sWlNCb2RIUndPaTh2ZDNkM0xtVmpiV0V0YVc1MFpYSnVZWFJwYjI1aGJDNXZjbWN2WldOdFlTMHlOakl2TlM0eEx5TnpaV010UTF3aUtUdHBaaWhjSW5WdVpHVm1hVzVsWkZ3aUlUMDlkSGx3Wlc5bUlHUXVjM1Z3WlhKRGJHRnpjMThwZTJadmNpaDJZWElnWlQxQmNuSmhlU2hoY21kMWJXVnVkSE11YkdWdVozUm9MVEVwTEdZOU1UdG1QR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdaaXNyS1dWYlppMHhYVDFoY21kMWJXVnVkSE5iWmwwN2NtVjBkWEp1SUdRdWMzVndaWEpEYkdGemMxOHVZMjl1YzNSeWRXTjBiM0l1WVhCd2JIa29ZU3hsS1gxcFppaGNJbk4wY21sdVoxd2lJVDEwZVhCbGIyWWdZaVltWENKemVXMWliMnhjSWlFOWRIbHdaVzltSUdJcGRHaHliM2NnUlhKeWIzSW9YQ0p0WlhSb2IyUWdibUZ0WlhNZ2NISnZkbWxrWldRZ2RHOGdaMjl2Wnk1aVlYTmxJRzExYzNRZ1ltVWdZU0J6ZEhKcGJtY2diM0lnWVNCemVXMWliMnhjSWlrN1hHNWxQVUZ5Y21GNUtHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdndE1pazdabTl5S0dZOU1qdG1QR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdaaXNyS1dWYlppMHlYVDFoY21kMWJXVnVkSE5iWmwwN1pqMGhNVHRtYjNJb2RtRnlJR2M5WVM1amIyNXpkSEoxWTNSdmNpNXdjbTkwYjNSNWNHVTdaenRuUFU5aWFtVmpkQzVuWlhSUWNtOTBiM1I1Y0dWUFppaG5LU2xwWmloblcySmRQVDA5WkNsbVBTRXdPMlZzYzJVZ2FXWW9aaWx5WlhSMWNtNGdaMXRpWFM1aGNIQnNlU2hoTEdVcE8ybG1LR0ZiWWwwOVBUMWtLWEpsZEhWeWJpQmhMbU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlZ0aVhTNWhjSEJzZVNoaExHVXBPM1JvY205M0lFVnljbTl5S0Z3aVoyOXZaeTVpWVhObElHTmhiR3hsWkNCbWNtOXRJR0VnYldWMGFHOWtJRzltSUc5dVpTQnVZVzFsSUhSdklHRWdiV1YwYUc5a0lHOW1JR0VnWkdsbVptVnlaVzUwSUc1aGJXVmNJaWs3ZlR0bmIyOW5Mbk5qYjNCbFBXWjFibU4wYVc5dUtHRXBlMmxtS0dkdmIyY3VhWE5KYmsxdlpIVnNaVXh2WVdSbGNsOG9LU2wwYUhKdmR5QkZjbkp2Y2loY0ltZHZiMmN1YzJOdmNHVWdhWE1nYm05MElITjFjSEJ2Y25SbFpDQjNhWFJvYVc0Z1lTQnRiMlIxYkdVdVhDSXBPMkV1WTJGc2JDaG5iMjluTG1kc2IySmhiQ2w5TzF4dVEwOU5VRWxNUlVSOGZDaG5iMjluTG1kc2IySmhiQzVEVDAxUVNVeEZSRDFEVDAxUVNVeEZSQ2s3WjI5dlp5NWtaV1pwYm1WRGJHRnpjejFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFdJdVkyOXVjM1J5ZFdOMGIzSXNaRDFpTG5OMFlYUnBZM003WXlZbVl5RTlUMkpxWldOMExuQnliM1J2ZEhsd1pTNWpiMjV6ZEhKMVkzUnZjbng4S0dNOVpuVnVZM1JwYjI0b0tYdDBhSEp2ZHlCRmNuSnZjaWhjSW1OaGJtNXZkQ0JwYm5OMFlXNTBhV0YwWlNCaGJpQnBiblJsY21aaFkyVWdLRzV2SUdOdmJuTjBjblZqZEc5eUlHUmxabWx1WldRcExsd2lLVHQ5S1R0alBXZHZiMmN1WkdWbWFXNWxRMnhoYzNNdVkzSmxZWFJsVTJWaGJHbHVaME52Ym5OMGNuVmpkRzl5WHloakxHRXBPMkVtSm1kdmIyY3VhVzVvWlhKcGRITW9ZeXhoS1R0a1pXeGxkR1VnWWk1amIyNXpkSEoxWTNSdmNqdGtaV3hsZEdVZ1lpNXpkR0YwYVdOek8yZHZiMmN1WkdWbWFXNWxRMnhoYzNNdVlYQndiSGxRY205d1pYSjBhV1Z6WHloakxuQnliM1J2ZEhsd1pTeGlLVHR1ZFd4c0lUMWtKaVlvWkNCcGJuTjBZVzVqWlc5bUlFWjFibU4wYVc5dVAyUW9ZeWs2WjI5dlp5NWtaV1pwYm1WRGJHRnpjeTVoY0hCc2VWQnliM0JsY25ScFpYTmZLR01zWkNrcE8zSmxkSFZ5YmlCamZUdGNibWR2YjJjdVpHVm1hVzVsUTJ4aGMzTXVVMFZCVEY5RFRFRlRVMTlKVGxOVVFVNURSVk05WjI5dlp5NUVSVUpWUnp0bmIyOW5MbVJsWm1sdVpVTnNZWE56TG1OeVpXRjBaVk5sWVd4cGJtZERiMjV6ZEhKMVkzUnZjbDg5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWdoWjI5dlp5NWtaV1pwYm1WRGJHRnpjeTVUUlVGTVgwTk1RVk5UWDBsT1UxUkJUa05GVXlseVpYUjFjbTRnWVR0MllYSWdZejBoWjI5dlp5NWtaV1pwYm1WRGJHRnpjeTVwYzFWdWMyVmhiR0ZpYkdWZktHSXBMR1E5Wm5WdVkzUnBiMjRvS1h0MllYSWdZajFoTG1Gd2NHeDVLSFJvYVhNc1lYSm5kVzFsYm5SektYeDhkR2hwY3p0aVcyZHZiMmN1VlVsRVgxQlNUMUJGVWxSWlgxMDlZbHRuYjI5bkxsVkpSRjlRVWs5UVJWSlVXVjlkTzNSb2FYTXVZMjl1YzNSeWRXTjBiM0k5UFQxa0ppWmpKaVpQWW1wbFkzUXVjMlZoYkNCcGJuTjBZVzVqWlc5bUlFWjFibU4wYVc5dUppWlBZbXBsWTNRdWMyVmhiQ2hpS1R0eVpYUjFjbTRnWW4wN2NtVjBkWEp1SUdSOU8yZHZiMmN1WkdWbWFXNWxRMnhoYzNNdWFYTlZibk5sWVd4aFlteGxYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVNZbVlTNXdjbTkwYjNSNWNHVW1KbUV1Y0hKdmRHOTBlWEJsVzJkdmIyY3VWVTVUUlVGTVFVSk1SVjlEVDA1VFZGSlZRMVJQVWw5UVVrOVFSVkpVV1Y5ZGZUdGNibWR2YjJjdVpHVm1hVzVsUTJ4aGMzTXVUMEpLUlVOVVgxQlNUMVJQVkZsUVJWOUdTVVZNUkZOZlBWd2lZMjl1YzNSeWRXTjBiM0lnYUdGelQzZHVVSEp2Y0dWeWRIa2dhWE5RY205MGIzUjVjR1ZQWmlCd2NtOXdaWEowZVVselJXNTFiV1Z5WVdKc1pTQjBiMHh2WTJGc1pWTjBjbWx1WnlCMGIxTjBjbWx1WnlCMllXeDFaVTltWENJdWMzQnNhWFFvWENJZ1hDSXBPMmR2YjJjdVpHVm1hVzVsUTJ4aGMzTXVZWEJ3YkhsUWNtOXdaWEowYVdWelh6MW1kVzVqZEdsdmJpaGhMR0lwZTJadmNpaDJZWElnWXlCcGJpQmlLVTlpYW1WamRDNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrdVkyRnNiQ2hpTEdNcEppWW9ZVnRqWFQxaVcyTmRLVHRtYjNJb2RtRnlJR1E5TUR0a1BHZHZiMmN1WkdWbWFXNWxRMnhoYzNNdVQwSktSVU5VWDFCU1QxUlBWRmxRUlY5R1NVVk1SRk5mTG14bGJtZDBhRHRrS3lzcFl6MW5iMjluTG1SbFptbHVaVU5zWVhOekxrOUNTa1ZEVkY5UVVrOVVUMVJaVUVWZlJrbEZURVJUWDF0a1hTeFBZbXBsWTNRdWNISnZkRzkwZVhCbExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29ZaXhqS1NZbUtHRmJZMTA5WWx0alhTbDlPMXh1WjI5dlp5NTBZV2RWYm5ObFlXeGhZbXhsUTJ4aGMzTTlablZ1WTNScGIyNG9ZU2w3SVVOUFRWQkpURVZFSmlabmIyOW5MbVJsWm1sdVpVTnNZWE56TGxORlFVeGZRMHhCVTFOZlNVNVRWRUZPUTBWVEppWW9ZUzV3Y205MGIzUjVjR1ZiWjI5dlp5NVZUbE5GUVV4QlFreEZYME5QVGxOVVVsVkRWRTlTWDFCU1QxQkZVbFJaWDEwOUlUQXBmVHRuYjI5bkxsVk9VMFZCVEVGQ1RFVmZRMDlPVTFSU1ZVTlVUMUpmVUZKUFVFVlNWRmxmUFZ3aVoyOXZaMTlrWldacGJtVkRiR0Z6YzE5c1pXZGhZM2xmZFc1elpXRnNZV0pzWlZ3aU8xeHVJVU5QVFZCSlRFVkVKaVpuYjI5bkxrUkZVRVZPUkVWT1EwbEZVMTlGVGtGQ1RFVkVKaVlvWjI5dlp5NXBia2gwYld4RWIyTjFiV1Z1ZEY4OVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxbmIyOW5MbWRzYjJKaGJDNWtiMk4xYldWdWREdHlaWFIxY200Z2JuVnNiQ0U5WVNZbVhDSjNjbWwwWlZ3aWFXNGdZWDBzWjI5dlp5NXBjMFJ2WTNWdFpXNTBURzloWkdsdVoxODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG1kc2IySmhiQzVrYjJOMWJXVnVkRHR5WlhSMWNtNGdZUzVoZEhSaFkyaEZkbVZ1ZEQ5Y0ltTnZiWEJzWlhSbFhDSWhQV0V1Y21WaFpIbFRkR0YwWlRwY0lteHZZV1JwYm1kY0lqMDlZUzV5WldGa2VWTjBZWFJsZlN4bmIyOW5MbVpwYm1SQ1lYTmxVR0YwYUY4OVpuVnVZM1JwYjI0b0tYdHBaaWhuYjI5bkxtbHpSR1ZtS0dkdmIyY3VaMnh2WW1Gc0xrTk1UMU5WVWtWZlFrRlRSVjlRUVZSSUtTWW1aMjl2Wnk1cGMxTjBjbWx1WnlobmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwSkJVMFZmVUVGVVNDa3BaMjl2Wnk1aVlYTmxVR0YwYUQxbmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwSkJVMFZmVUVGVVNEdGxiSE5sSUdsbUtHZHZiMmN1YVc1SWRHMXNSRzlqZFcxbGJuUmZLQ2twZTNaaGNpQmhQV2R2YjJjdVoyeHZZbUZzTG1SdlkzVnRaVzUwTEdJOVlTNWpkWEp5Wlc1MFUyTnlhWEIwTzF4dVlUMWlQMXRpWFRwaExtZGxkRVZzWlcxbGJuUnpRbmxVWVdkT1lXMWxLRndpVTBOU1NWQlVYQ0lwTzJadmNpaGlQV0V1YkdWdVozUm9MVEU3TUR3OVlqc3RMV0lwZTNaaGNpQmpQV0ZiWWwwdWMzSmpMR1E5WXk1c1lYTjBTVzVrWlhoUFppaGNJajljSWlrN1pEMHRNVDA5WkQ5akxteGxibWQwYURwa08ybG1LRndpWW1GelpTNXFjMXdpUFQxakxuTjFZbk4wY2loa0xUY3NOeWtwZTJkdmIyY3VZbUZ6WlZCaGRHZzlZeTV6ZFdKemRISW9NQ3hrTFRjcE8ySnlaV0ZyZlgxOWZTeG5iMjluTG1acGJtUkNZWE5sVUdGMGFGOG9LU3huYjI5bkxsUnlZVzV6Y0dsc1pYSTlablZ1WTNScGIyNG9LWHQwYUdsekxuSmxjWFZwY21WelZISmhibk53YVd4aGRHbHZibDg5Ym5Wc2JEdDBhR2x6TG5SeVlXNXpjR2xzWVhScGIyNVVZWEpuWlhSZlBXZHZiMmN1VkZKQlRsTlFTVXhGWDFSUFgweEJUa2RWUVVkRmZTeG5iMjluTGxSeVlXNXpjR2xzWlhJdWNISnZkRzkwZVhCbExtTnlaV0YwWlZKbGNYVnBjbVZ6VkhKaGJuTndhV3hoZEdsdmJsODlablZ1WTNScGIyNG9LWHRtZFc1amRHbHZiaUJoS0dFc1lpbDdaVDlrVzJGZFBTRXdPbUlvS1Q4b1l6MWhMR1JiWVYwOUlURXBPbVU5WkZ0aFhUMGhNSDFtZFc1amRHbHZiaUJpS0dFcGUzUnllWHR5WlhSMWNtNGhJV1YyWVd3b1lTbDlZMkYwWTJnb2FDbDdjbVYwZFhKdUlURjlmVnh1ZG1GeUlHTTlYQ0psY3pOY0lpeGtQWHRsY3pNNklURjlMR1U5SVRFc1pqMW5iMjluTG1kc2IySmhiQzV1WVhacFoyRjBiM0ltSm1kdmIyY3VaMnh2WW1Gc0xtNWhkbWxuWVhSdmNpNTFjMlZ5UVdkbGJuUS9aMjl2Wnk1bmJHOWlZV3d1Ym1GMmFXZGhkRzl5TG5WelpYSkJaMlZ1ZERwY0lsd2lPMkVvWENKbGN6VmNJaXhtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJpS0Z3aVd6RXNYUzVzWlc1bmRHZzlQVEZjSWlsOUtUdGhLRndpWlhNMlhDSXNablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaaTV0WVhSamFDZ3ZSV1JuWlZ4Y0x5aGNYR1FyS1NoY1hDNWNYR1FwS2k5cEtUOGhNVHBpS0Njb0tDazlQbnRjSW5WelpTQnpkSEpwWTNSY0lqdGpiR0Z6Y3lCWWUyTnZibk4wY25WamRHOXlLQ2w3YVdZb2JtVjNMblJoY21kbGRDRTlVM1J5YVc1bktYUm9jbTkzSURFN2RHaHBjeTU0UFRReWZYMXNaWFFnY1QxU1pXWnNaV04wTG1OdmJuTjBjblZqZENoWUxGdGRMRk4wY21sdVp5azdhV1lvY1M1NElUMDBNbng4SVNoeElHbHVjM1JoYm1ObGIyWWdVM1J5YVc1bktTbDBhSEp2ZHlBeE8yWnZjaWhqYjI1emRDQmhJRzltV3pJc00xMHBlMmxtS0dFOVBUSXBZMjl1ZEdsdWRXVTdablZ1WTNScGIyNGdaaWg2UFh0aGZTbDdiR1YwSUdFOU1EdHlaWFIxY200Z2VpNWhmWHRtZFc1amRHbHZiaUJtS0NsN2NtVjBkWEp1SURBN2ZYMXlaWFIxY200Z1ppZ3BQVDB6ZlgwcEtDa25LWDBwTzF4dVlTaGNJbVZ6TjF3aUxHWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHSW9YQ0l5SUNvcUlESWdQVDBnTkZ3aUtYMHBPMkVvWENKbGN6aGNJaXhtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJpS0Z3aVlYTjVibU1nS0NrZ1BUNGdNU3dnZEhKMVpWd2lLWDBwTzJFb1hDSmxjemxjSWl4bWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCaUtGd2lLSHN1TGk1eVpYTjBmU0E5SUh0OUtTd2dkSEoxWlZ3aUtYMHBPMkVvWENKbGMxOXVaWGgwWENJc1puVnVZM1JwYjI0b0tYdHlaWFIxY200aE1YMHBPM0psZEhWeWJudDBZWEpuWlhRNll5eHRZWEE2WkgxOUxHZHZiMmN1VkhKaGJuTndhV3hsY2k1d2NtOTBiM1I1Y0dVdWJtVmxaSE5VY21GdWMzQnBiR1U5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWhjSW1Gc2QyRjVjMXdpUFQxbmIyOW5MbFJTUVU1VFVFbE1SU2x5WlhSMWNtNGhNRHRwWmloY0ltNWxkbVZ5WENJOVBXZHZiMmN1VkZKQlRsTlFTVXhGS1hKbGRIVnliaUV4TzJsbUtDRjBhR2x6TG5KbGNYVnBjbVZ6VkhKaGJuTndhV3hoZEdsdmJsOHBlM1poY2lCalBYUm9hWE11WTNKbFlYUmxVbVZ4ZFdseVpYTlVjbUZ1YzNCcGJHRjBhVzl1WHlncE8zUm9hWE11Y21WeGRXbHlaWE5VY21GdWMzQnBiR0YwYVc5dVh6MWpMbTFoY0R0MGFHbHpMblJ5WVc1emNHbHNZWFJwYjI1VVlYSm5aWFJmUFhSb2FYTXVkSEpoYm5Od2FXeGhkR2x2YmxSaGNtZGxkRjk4ZkZ4dVl5NTBZWEpuWlhSOWFXWW9ZU0JwYmlCMGFHbHpMbkpsY1hWcGNtVnpWSEpoYm5Od2FXeGhkR2x2Ymw4cGNtVjBkWEp1SUhSb2FYTXVjbVZ4ZFdseVpYTlVjbUZ1YzNCcGJHRjBhVzl1WDF0aFhUOGhNRG9oWjI5dlp5NXBia2gwYld4RWIyTjFiV1Z1ZEY4b0tYeDhYQ0psY3paY0lpRTlZbng4WENKdWIwMXZaSFZzWlZ3aWFXNGdaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDaGNJbk5qY21sd2RGd2lLVDhoTVRvaE1EdDBhSEp2ZHlCRmNuSnZjaWhjSWxWdWEyNXZkMjRnYkdGdVozVmhaMlVnYlc5a1pUb2dYQ0lyWVNrN2ZTeG5iMjluTGxSeVlXNXpjR2xzWlhJdWNISnZkRzkwZVhCbExuUnlZVzV6Y0dsc1pUMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxuUnlZVzV6Y0dsc1pWOG9ZU3hpTEhSb2FYTXVkSEpoYm5Od2FXeGhkR2x2YmxSaGNtZGxkRjhwZlN4bmIyOW5MblJ5WVc1emNHbHNaWEpmUFc1bGR5Qm5iMjluTGxSeVlXNXpjR2xzWlhJc1oyOXZaeTV3Y205MFpXTjBVMk55YVhCMFZHRm5YejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0M4OFhGd3ZLRk5EVWtsUVZDa3ZhV2NzWENKY1hGeGNlRE5qTHlReFhDSXBmU3huYjI5bkxrUmxZblZuVEc5aFpHVnlYejFtZFc1amRHbHZiaWdwZTNSb2FYTXVaR1Z3Wlc1a1pXNWphV1Z6WHoxN2ZUdGNiblJvYVhNdWFXUlViMUJoZEdoZlBYdDlPM1JvYVhNdWQzSnBkSFJsYmw4OWUzMDdkR2hwY3k1c2IyRmthVzVuUkdWd2MxODlXMTA3ZEdocGN5NWtaWEJ6Vkc5TWIyRmtYejFiWFR0MGFHbHpMbkJoZFhObFpGODlJVEU3ZEdocGN5NW1ZV04wYjNKNVh6MXVaWGNnWjI5dlp5NUVaWEJsYm1SbGJtTjVSbUZqZEc5eWVTaG5iMjluTG5SeVlXNXpjR2xzWlhKZktUdDBhR2x6TG1SbFptVnljbVZrUTJGc2JHSmhZMnR6WHoxN2ZUdDBhR2x6TG1SbFptVnljbVZrVVhWbGRXVmZQVnRkZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1d2NtOTBiM1I1Y0dVdVltOXZkSE4wY21Gd1BXWjFibU4wYVc5dUtHRXNZaWw3Wm5WdVkzUnBiMjRnWXlncGUyUW1KaWhuYjI5bkxtZHNiMkpoYkM1elpYUlVhVzFsYjNWMEtHUXNNQ2tzWkQxdWRXeHNLWDEyWVhJZ1pEMWlPMmxtS0dFdWJHVnVaM1JvS1h0aVBWdGRPMlp2Y2loMllYSWdaVDB3TzJVOFlTNXNaVzVuZEdnN1pTc3JLWHQyWVhJZ1pqMTBhR2x6TG1kbGRGQmhkR2hHY205dFJHVndjMThvWVZ0bFhTazdhV1lvSVdZcGRHaHliM2NnUlhKeWIzSW9YQ0pWYm5KbFoyOXVhWHBsWkNCdVlXMWxjM0JoWTJVNklGd2lLMkZiWlYwcE8ySXVjSFZ6YUNoMGFHbHpMbVJsY0dWdVpHVnVZMmxsYzE5YlpsMHBmV1k5WjI5dlp5NXlaWEYxYVhKbE8zWmhjaUJuUFRBN1ptOXlLR1U5WEc0d08yVThZUzVzWlc1bmRHZzdaU3NyS1dZb1lWdGxYU2tzWWx0bFhTNXZia3h2WVdRb1puVnVZM1JwYjI0b0tYc3JLMmM5UFdFdWJHVnVaM1JvSmlaaktDbDlLWDFsYkhObElHTW9LWDBzWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1Y0hKdmRHOTBlWEJsTG14dllXUkRiRzl6ZFhKbFJHVndjejFtZFc1amRHbHZiaWdwZTNSb2FYTXVaR1Z3YzFSdlRHOWhaRjh1Y0hWemFDaDBhR2x6TG1aaFkzUnZjbmxmTG1OeVpXRjBaVVJsY0dWdVpHVnVZM2tvWjI5dlp5NXViM0p0WVd4cGVtVlFZWFJvWHlobmIyOW5MbUpoYzJWUVlYUm9LMXdpWkdWd2N5NXFjMXdpS1N4Y0ltUmxjSE11YW5OY0lpeGJYU3hiWFN4N2ZTd2hNU2twTzNSb2FYTXViRzloWkVSbGNITmZLQ2w5TEdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTG5CeWIzUnZkSGx3WlM1eVpYRjFaWE4wWldROVpuVnVZM1JwYjI0b1lTeGlLWHNvWVQxMGFHbHpMbWRsZEZCaGRHaEdjbTl0UkdWd2MxOG9ZU2twSmlZb1lueDhkR2hwY3k1aGNtVkVaWEJ6VEc5aFpHVmtYeWgwYUdsekxtUmxjR1Z1WkdWdVkybGxjMTliWVYwdWNtVnhkV2x5WlhNcEtTWW1LR0k5ZEdocGN5NWtaV1psY25KbFpFTmhiR3hpWVdOcmMxOWJZVjBwSmlZb1pHVnNaWFJsSUhSb2FYTXVaR1ZtWlhKeVpXUkRZV3hzWW1GamEzTmZXMkZkTEdJb0tTbDlMR2R2YjJjdVJHVmlkV2RNYjJGa1pYSmZMbkJ5YjNSdmRIbHdaUzV6WlhSRVpYQmxibVJsYm1ONVJtRmpkRzl5ZVQxY2JtWjFibU4wYVc5dUtHRXBlM1JvYVhNdVptRmpkRzl5ZVY4OVlYMHNaMjl2Wnk1RVpXSjFaMHh2WVdSbGNsOHVjSEp2ZEc5MGVYQmxMbXh2WVdSZlBXWjFibU4wYVc5dUtHRXBlMmxtS0hSb2FYTXVaMlYwVUdGMGFFWnliMjFFWlhCelh5aGhLU2w3ZG1GeUlHSTlkR2hwY3l4alBWdGRMR1E5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR1U5WWk1blpYUlFZWFJvUm5KdmJVUmxjSE5mS0dFcE8ybG1LQ0ZsS1hSb2NtOTNJRVZ5Y205eUtGd2lRbUZrSUdSbGNHVnVaR1Z1WTNrZ2NHRjBhQ0J2Y2lCemVXMWliMnc2SUZ3aUsyRXBPMmxtS0NGaUxuZHlhWFIwWlc1ZlcyVmRLWHRpTG5keWFYUjBaVzVmVzJWZFBTRXdPMkU5WWk1a1pYQmxibVJsYm1OcFpYTmZXMlZkTzJadmNpaGxQVEE3WlR4aExuSmxjWFZwY21WekxteGxibWQwYUR0bEt5c3BaMjl2Wnk1cGMxQnliM1pwWkdWa1h5aGhMbkpsY1hWcGNtVnpXMlZkS1h4OFpDaGhMbkpsY1hWcGNtVnpXMlZkS1R0akxuQjFjMmdvWVNsOWZUdGtLR0VwTzJFOUlTRjBhR2x6TG1SbGNITlViMHh2WVdSZkxteGxibWQwYUR0MGFHbHpMbVJsY0hOVWIweHZZV1JmUFhSb2FYTXVaR1Z3YzFSdlRHOWhaRjh1WTI5dVkyRjBLR01wTzNSb2FYTXVjR0YxYzJWa1gzeDhZWHg4ZEdocGN5NXNiMkZrUkdWd2MxOG9LWDFsYkhObElIUm9jbTkzSUdFOVhDSm5iMjluTG5KbGNYVnBjbVVnWTI5MWJHUWdibTkwSUdacGJtUTZJRndpSzF4dVlTeG5iMjluTG14dloxUnZRMjl1YzI5c1pWOG9ZU2tzUlhKeWIzSW9ZU2s3ZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1d2NtOTBiM1I1Y0dVdWJHOWhaRVJsY0hOZlBXWjFibU4wYVc5dUtDbDdabTl5S0haaGNpQmhQWFJvYVhNc1lqMTBhR2x6TG5CaGRYTmxaRjg3ZEdocGN5NWtaWEJ6Vkc5TWIyRmtYeTVzWlc1bmRHZ21KaUZpT3lrb1puVnVZM1JwYjI0b0tYdDJZWElnWXowaE1TeGtQV0V1WkdWd2MxUnZURzloWkY4dWMyaHBablFvS1N4bFBTRXhPMkV1Ykc5aFpHbHVaMThvWkNrN2RtRnlJR1k5ZTNCaGRYTmxPbVoxYm1OMGFXOXVLQ2w3YVdZb1l5bDBhSEp2ZHlCRmNuSnZjaWhjSWtOaGJtNXZkQ0JqWVd4c0lIQmhkWE5sSUdGbWRHVnlJSFJvWlNCallXeHNJSFJ2SUd4dllXUXVYQ0lwTzJJOUlUQjlMSEpsYzNWdFpUcG1kVzVqZEdsdmJpZ3BlMk0vWVM1eVpYTjFiV1ZmS0NrNllqMGhNWDBzYkc5aFpHVmtPbVoxYm1OMGFXOXVLQ2w3YVdZb1pTbDBhSEp2ZHlCRmNuSnZjaWhjSWtSdmRXSnNaU0JqWVd4c0lIUnZJR3h2WVdSbFpDNWNJaWs3WlQwaE1EdGhMbXh2WVdSbFpGOG9aQ2w5TEhCbGJtUnBibWM2Wm5WdVkzUnBiMjRvS1h0bWIzSW9kbUZ5SUdJOVcxMHNZejB3TzJNOFlTNXNiMkZrYVc1blJHVndjMTh1YkdWdVozUm9PMk1yS3lsaUxuQjFjMmdvWVM1c2IyRmthVzVuUkdWd2MxOWJZMTBwTzF4dWNtVjBkWEp1SUdKOUxITmxkRTF2WkhWc1pWTjBZWFJsT21aMWJtTjBhVzl1S0dFcGUyZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmUFh0MGVYQmxPbUVzYlc5a2RXeGxUbUZ0WlRwY0lsd2lMR1JsWTJ4aGNtVk1aV2RoWTNsT1lXMWxjM0JoWTJVNklURjlmU3h5WldkcGMzUmxja1Z6TmsxdlpIVnNaVVY0Y0c5eWRITTZablZ1WTNScGIyNG9ZU3hpTEdNcGUyTW1KaWhuYjI5bkxteHZZV1JsWkUxdlpIVnNaWE5mVzJOZFBYdGxlSEJ2Y25Sek9tSXNkSGx3WlRwbmIyOW5MazF2WkhWc1pWUjVjR1V1UlZNMkxHMXZaSFZzWlVsa09tTjhmRndpWENKOUtYMHNjbVZuYVhOMFpYSkhiMjluVFc5a2RXeGxSWGh3YjNKMGN6cG1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3ViRzloWkdWa1RXOWtkV3hsYzE5YllWMDllMlY0Y0c5eWRITTZZaXgwZVhCbE9tZHZiMmN1VFc5a2RXeGxWSGx3WlM1SFQwOUhMRzF2WkhWc1pVbGtPbUY5ZlN4amJHVmhjazF2WkhWc1pWTjBZWFJsT21aMWJtTjBhVzl1S0NsN1oyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjg5Ym5Wc2JIMHNaR1ZtWlhJNlpuVnVZM1JwYjI0b1lpbDdhV1lvWXlsMGFISnZkeUJGY25KdmNpaGNJa05oYm01dmRDQnlaV2RwYzNSbGNpQjNhWFJvSUdSbFptVnlJR0ZtZEdWeUlIUm9aU0JqWVd4c0lIUnZJR3h2WVdRdVhDSXBPMkV1WkdWbVpYSmZLR1FzWEc1aUtYMHNZWEpsUkdWd2MweHZZV1JsWkRwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCaExtRnlaVVJsY0hOTWIyRmtaV1JmS0dRdWNtVnhkV2x5WlhNcGZYMDdkSEo1ZTJRdWJHOWhaQ2htS1gxbWFXNWhiR3g1ZTJNOUlUQjlmU2tvS1R0aUppWjBhR2x6TG5CaGRYTmxYeWdwZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1d2NtOTBiM1I1Y0dVdWNHRjFjMlZmUFdaMWJtTjBhVzl1S0NsN2RHaHBjeTV3WVhWelpXUmZQU0V3ZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1d2NtOTBiM1I1Y0dVdWNtVnpkVzFsWHoxbWRXNWpkR2x2YmlncGUzUm9hWE11Y0dGMWMyVmtYeVltS0hSb2FYTXVjR0YxYzJWa1h6MGhNU3gwYUdsekxteHZZV1JFWlhCelh5Z3BLWDBzWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1Y0hKdmRHOTBlWEJsTG14dllXUnBibWRmUFdaMWJtTjBhVzl1S0dFcGUzUm9hWE11Ykc5aFpHbHVaMFJsY0hOZkxuQjFjMmdvWVNsOUxHZHZiMmN1UkdWaWRXZE1iMkZrWlhKZkxuQnliM1J2ZEhsd1pTNXNiMkZrWldSZlBXWjFibU4wYVc5dUtHRXBlMlp2Y2loMllYSWdZajB3TzJJOGRHaHBjeTVzYjJGa2FXNW5SR1Z3YzE4dWJHVnVaM1JvTzJJckt5bHBaaWgwYUdsekxteHZZV1JwYm1kRVpYQnpYMXRpWFQwOVlTbDdkR2hwY3k1c2IyRmthVzVuUkdWd2MxOHVjM0JzYVdObEtHSXNNU2s3WEc1aWNtVmhhMzFtYjNJb1lqMHdPMkk4ZEdocGN5NWtaV1psY25KbFpGRjFaWFZsWHk1c1pXNW5kR2c3WWlzcktXbG1LSFJvYVhNdVpHVm1aWEp5WldSUmRXVjFaVjliWWwwOVBXRXVjR0YwYUNsN2RHaHBjeTVrWldabGNuSmxaRkYxWlhWbFh5NXpjR3hwWTJVb1lpd3hLVHRpY21WaGEzMXBaaWgwYUdsekxteHZZV1JwYm1kRVpYQnpYeTVzWlc1bmRHZzlQWFJvYVhNdVpHVm1aWEp5WldSUmRXVjFaVjh1YkdWdVozUm9KaVloZEdocGN5NWtaWEJ6Vkc5TWIyRmtYeTVzWlc1bmRHZ3BabTl5S0R0MGFHbHpMbVJsWm1WeWNtVmtVWFZsZFdWZkxteGxibWQwYURzcGRHaHBjeTV5WlhGMVpYTjBaV1FvZEdocGN5NWtaV1psY25KbFpGRjFaWFZsWHk1emFHbG1kQ2dwTENFd0tUdGhMbXh2WVdSbFpDZ3BmU3huYjI5bkxrUmxZblZuVEc5aFpHVnlYeTV3Y205MGIzUjVjR1V1WVhKbFJHVndjMHh2WVdSbFpGODlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFRBN1lqeGhMbXhsYm1kMGFEdGlLeXNwZTNaaGNpQmpQWFJvYVhNdVoyVjBVR0YwYUVaeWIyMUVaWEJ6WHloaFcySmRLVHRwWmlnaFkzeDhJU2hqSUdsdUlIUm9hWE11WkdWbVpYSnlaV1JEWVd4c1ltRmphM05mZkh4bmIyOW5MbWx6VUhKdmRtbGtaV1JmS0dGYllsMHBLU2x5WlhSMWNtNGhNWDF5WlhSMWNtNGhNSDBzWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1Y0hKdmRHOTBlWEJsTG1kbGRGQmhkR2hHY205dFJHVndjMTg5WEc1bWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTQnBiaUIwYUdsekxtbGtWRzlRWVhSb1h6OTBhR2x6TG1sa1ZHOVFZWFJvWDF0aFhUcGhJR2x1SUhSb2FYTXVaR1Z3Wlc1a1pXNWphV1Z6WHo5aE9tNTFiR3g5TEdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTG5CeWIzUnZkSGx3WlM1a1pXWmxjbDg5Wm5WdVkzUnBiMjRvWVN4aUtYdDBhR2x6TG1SbFptVnljbVZrUTJGc2JHSmhZMnR6WDF0aExuQmhkR2hkUFdJN2RHaHBjeTVrWldabGNuSmxaRkYxWlhWbFh5NXdkWE5vS0dFdWNHRjBhQ2w5TEdkdmIyY3VURzloWkVOdmJuUnliMnhzWlhJOVpuVnVZM1JwYjI0b0tYdDlMR2R2YjJjdVRHOWhaRU52Ym5SeWIyeHNaWEl1Y0hKdmRHOTBlWEJsTG5CaGRYTmxQV1oxYm1OMGFXOXVLQ2w3ZlN4bmIyOW5Ma3h2WVdSRGIyNTBjbTlzYkdWeUxuQnliM1J2ZEhsd1pTNXlaWE4xYldVOVpuVnVZM1JwYjI0b0tYdDlMR2R2YjJjdVRHOWhaRU52Ym5SeWIyeHNaWEl1Y0hKdmRHOTBlWEJsTG14dllXUmxaRDFtZFc1amRHbHZiaWdwZTMwc1oyOXZaeTVNYjJGa1EyOXVkSEp2Ykd4bGNpNXdjbTkwYjNSNWNHVXVjR1Z1WkdsdVp6MW1kVzVqZEdsdmJpZ3BlMzBzWjI5dlp5NU1iMkZrUTI5dWRISnZiR3hsY2k1d2NtOTBiM1I1Y0dVdWNtVm5hWE4wWlhKRmN6Wk5iMlIxYkdWRmVIQnZjblJ6UFdaMWJtTjBhVzl1S0dFc1hHNWlMR01wZTMwc1oyOXZaeTVNYjJGa1EyOXVkSEp2Ykd4bGNpNXdjbTkwYjNSNWNHVXVjMlYwVFc5a2RXeGxVM1JoZEdVOVpuVnVZM1JwYjI0b1lTbDdmU3huYjI5bkxreHZZV1JEYjI1MGNtOXNiR1Z5TG5CeWIzUnZkSGx3WlM1amJHVmhjazF2WkhWc1pWTjBZWFJsUFdaMWJtTjBhVzl1S0NsN2ZTeG5iMjluTGt4dllXUkRiMjUwY205c2JHVnlMbkJ5YjNSdmRIbHdaUzVrWldabGNqMW1kVzVqZEdsdmJpaGhLWHQ5TEdkdmIyY3VURzloWkVOdmJuUnliMnhzWlhJdWNISnZkRzkwZVhCbExtRnlaVVJsY0hOTWIyRmtaV1E5Wm5WdVkzUnBiMjRvS1h0OUxHZHZiMmN1UkdWd1pXNWtaVzVqZVQxbWRXNWpkR2x2YmloaExHSXNZeXhrTEdVcGUzUm9hWE11Y0dGMGFEMWhPM1JvYVhNdWNtVnNZWFJwZG1WUVlYUm9QV0k3ZEdocGN5NXdjbTkyYVdSbGN6MWpPM1JvYVhNdWNtVnhkV2x5WlhNOVpEdDBhR2x6TG14dllXUkdiR0ZuY3oxbE8zUm9hWE11Ykc5aFpHVmtYejBoTVR0MGFHbHpMbXh2WVdSRFlXeHNZbUZqYTNOZlBWdGRmU3huYjI5bkxrUmxjR1Z1WkdWdVkza3VjSEp2ZEc5MGVYQmxMbWRsZEZCaGRHaE9ZVzFsUFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5ZEdocGN5NXdZWFJvTEdJOVlTNXBibVJsZUU5bUtGd2lPaTh2WENJcE96QThQV0ltSmloaFBXRXVjM1ZpYzNSeWFXNW5LR0lyTXlrc1lqMWNibUV1YVc1a1pYaFBaaWhjSWk5Y0lpa3NNRHc5WWlZbUtHRTlZUzV6ZFdKemRISnBibWNvWWlzeEtTa3BPM0psZEhWeWJpQmhmU3huYjI5bkxrUmxjR1Z1WkdWdVkza3VjSEp2ZEc5MGVYQmxMbTl1VEc5aFpEMW1kVzVqZEdsdmJpaGhLWHQwYUdsekxteHZZV1JsWkY4L1lTZ3BPblJvYVhNdWJHOWhaRU5oYkd4aVlXTnJjMTh1Y0hWemFDaGhLWDBzWjI5dlp5NUVaWEJsYm1SbGJtTjVMbkJ5YjNSdmRIbHdaUzVzYjJGa1pXUTlablZ1WTNScGIyNG9LWHQwYUdsekxteHZZV1JsWkY4OUlUQTdkbUZ5SUdFOWRHaHBjeTVzYjJGa1EyRnNiR0poWTJ0elh6dDBhR2x6TG14dllXUkRZV3hzWW1GamEzTmZQVnRkTzJadmNpaDJZWElnWWowd08ySThZUzVzWlc1bmRHZzdZaXNyS1dGYllsMG9LWDBzWjI5dlp5NUVaWEJsYm1SbGJtTjVMbVJsWm1WeVh6MGhNU3huYjI5bkxrUmxjR1Z1WkdWdVkza3VZMkZzYkdKaFkydE5ZWEJmUFh0OUxHZHZiMmN1UkdWd1pXNWtaVzVqZVM1eVpXZHBjM1JsY2tOaGJHeGlZV05yWHoxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxTllYUm9MbkpoYm1SdmJTZ3BMblJ2VTNSeWFXNW5LRE15S1R0bmIyOW5Ma1JsY0dWdVpHVnVZM2t1WTJGc2JHSmhZMnROWVhCZlcySmRQV0U3Y21WMGRYSnVJR0o5TEdkdmIyY3VSR1Z3Wlc1a1pXNWplUzUxYm5KbFoybHpkR1Z5UTJGc2JHSmhZMnRmUFZ4dVpuVnVZM1JwYjI0b1lTbDdaR1ZzWlhSbElHZHZiMmN1UkdWd1pXNWtaVzVqZVM1allXeHNZbUZqYTAxaGNGOWJZVjE5TEdkdmIyY3VSR1Z3Wlc1a1pXNWplUzVqWVd4c1ltRmphMTg5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWhoSUdsdUlHZHZiMmN1UkdWd1pXNWtaVzVqZVM1allXeHNZbUZqYTAxaGNGOHBlMlp2Y2loMllYSWdZejFuYjI5bkxrUmxjR1Z1WkdWdVkza3VZMkZzYkdKaFkydE5ZWEJmVzJGZExHUTlXMTBzWlQweE8yVThZWEpuZFcxbGJuUnpMbXhsYm1kMGFEdGxLeXNwWkM1d2RYTm9LR0Z5WjNWdFpXNTBjMXRsWFNrN1l5NWhjSEJzZVNoMmIybGtJREFzWkNsOVpXeHpaU0IwYUhKdmR5QkZjbkp2Y2loY0lrTmhiR3hpWVdOcklHdGxlU0JjSWl0aEsxd2lJR1J2WlhNZ2JtOTBJR1Y0YVhOMElDaDNZWE1nWW1GelpTNXFjeUJzYjJGa1pXUWdiVzl5WlNCMGFHRnVJRzl1WTJVL0tTNWNJaWs3ZlN4bmIyOW5Ma1JsY0dWdVpHVnVZM2t1Y0hKdmRHOTBlWEJsTG14dllXUTlablZ1WTNScGIyNG9ZU2w3YVdZb1oyOXZaeTVuYkc5aVlXd3VRMHhQVTFWU1JWOUpUVkJQVWxSZlUwTlNTVkJVS1dkdmIyY3VaMnh2WW1Gc0xrTk1UMU5WVWtWZlNVMVFUMUpVWDFORFVrbFFWQ2gwYUdsekxuQmhkR2dwUDJFdWJHOWhaR1ZrS0NrNllTNXdZWFZ6WlNncE8yVnNjMlVnYVdZb1oyOXZaeTVwYmtoMGJXeEViMk4xYldWdWRGOG9LU2w3ZG1GeUlHSTlYRzVuYjI5bkxtZHNiMkpoYkM1a2IyTjFiV1Z1ZER0cFppaGNJbU52YlhCc1pYUmxYQ0k5UFdJdWNtVmhaSGxUZEdGMFpTWW1JV2R2YjJjdVJVNUJRa3hGWDBOSVVrOU5SVjlCVUZCZlUwRkdSVjlUUTFKSlVGUmZURTlCUkVsT1J5bDdhV1lvTDF4Y1ltUmxjSE11YW5Na0x5NTBaWE4wS0hSb2FYTXVjR0YwYUNrcGUyRXViRzloWkdWa0tDazdjbVYwZFhKdWZYUm9jbTkzSUVWeWNtOXlLQ2REWVc1dWIzUWdkM0pwZEdVZ1hDSW5LM1JvYVhNdWNHRjBhQ3NuWENJZ1lXWjBaWElnWkc5amRXMWxiblFnYkc5aFpDY3BPMzFwWmlnaFoyOXZaeTVGVGtGQ1RFVmZRMGhTVDAxRlgwRlFVRjlUUVVaRlgxTkRVa2xRVkY5TVQwRkVTVTVISmlabmIyOW5MbWx6Ukc5amRXMWxiblJNYjJGa2FXNW5YeWdwS1h0MllYSWdZejFuYjI5bkxrUmxjR1Z1WkdWdVkza3VjbVZuYVhOMFpYSkRZV3hzWW1GamExOG9ablZ1WTNScGIyNG9ZaWw3WjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1U1ZOZlQweEVYMGxGWHlZbVhDSmpiMjF3YkdWMFpWd2lJVDFpTG5KbFlXUjVVM1JoZEdWOGZDaG5iMjluTGtSbGNHVnVaR1Z1WTNrdWRXNXlaV2RwYzNSbGNrTmhiR3hpWVdOclh5aGpLU3hoTG14dllXUmxaQ2dwS1gwcExHUTlJV2R2YjJjdVJHVmlkV2RNYjJGa1pYSmZMa2xUWDA5TVJGOUpSVjhtSm1kdmIyY3VaMlYwVTJOeWFYQjBUbTl1WTJVb0tUOWNiaWNnYm05dVkyVTlYQ0luSzJkdmIyY3VaMlYwVTJOeWFYQjBUbTl1WTJVb0tTc25YQ0luT2x3aVhDSTdaRDBuUEhOamNtbHdkQ0J6Y21NOVhDSW5LM1JvYVhNdWNHRjBhQ3NuWENJZ0p5c29aMjl2Wnk1RVpXSjFaMHh2WVdSbGNsOHVTVk5mVDB4RVgwbEZYejljSW05dWNtVmhaSGx6ZEdGMFpXTm9ZVzVuWlZ3aU9sd2liMjVzYjJGa1hDSXBLMXdpUFZ4Y1hDSm5iMjluTGtSbGNHVnVaR1Z1WTNrdVkyRnNiR0poWTJ0ZktDZGNJaXRqS3lkY1hDY3NJSFJvYVhNcFhDSWdkSGx3WlQxY0luUmxlSFF2YW1GMllYTmpjbWx3ZEZ3aUlDY3JLR2R2YjJjdVJHVndaVzVrWlc1amVTNWtaV1psY2w4L1hDSmtaV1psY2x3aU9sd2lYQ0lwSzJRclhDSStYRng0TTJNdmMyTnlhWEIwUGx3aU8ySXVkM0pwZEdVb1oyOXZaeTVVVWxWVFZFVkVYMVJaVUVWVFgxQlBURWxEV1Y4L1oyOXZaeTVVVWxWVFZFVkVYMVJaVUVWVFgxQlBURWxEV1Y4dVkzSmxZWFJsU0ZSTlRDaGtLVHBrS1gxbGJITmxlM1poY2lCbFBXSXVZM0psWVhSbFJXeGxiV1Z1ZENoY0luTmpjbWx3ZEZ3aUtUdGxMbVJsWm1WeVBXZHZiMmN1UkdWd1pXNWtaVzVqZVM1a1pXWmxjbDg3WlM1aGMzbHVZejBoTVR0bExuUjVjR1U5WENKMFpYaDBMMnBoZG1GelkzSnBjSFJjSWpzb1pEMW5iMjluTG1kbGRGTmpjbWx3ZEU1dmJtTmxLQ2twSmlabExuTmxkRUYwZEhKcFluVjBaU2hjSW01dmJtTmxYQ0lzWkNrN1oyOXZaeTVFWldKMVoweHZZV1JsY2w4dVNWTmZUMHhFWDBsRlh6OWNiaWhoTG5CaGRYTmxLQ2tzWlM1dmJuSmxZV1I1YzNSaGRHVmphR0Z1WjJVOVpuVnVZM1JwYjI0b0tYdHBaaWhjSW14dllXUmxaRndpUFQxbExuSmxZV1I1VTNSaGRHVjhmRndpWTI5dGNHeGxkR1ZjSWowOVpTNXlaV0ZrZVZOMFlYUmxLV0V1Ykc5aFpHVmtLQ2tzWVM1eVpYTjFiV1VvS1gwcE9tVXViMjVzYjJGa1BXWjFibU4wYVc5dUtDbDdaUzV2Ym14dllXUTliblZzYkR0aExteHZZV1JsWkNncGZUdGxMbk55WXoxbmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHo5bmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHk1amNtVmhkR1ZUWTNKcGNIUlZVa3dvZEdocGN5NXdZWFJvS1RwMGFHbHpMbkJoZEdnN1lpNW9aV0ZrTG1Gd2NHVnVaRU5vYVd4a0tHVXBmWDFsYkhObElHZHZiMmN1Ykc5blZHOURiMjV6YjJ4bFh5aGNJa05oYm01dmRDQjFjMlVnWkdWbVlYVnNkQ0JrWldKMVp5QnNiMkZrWlhJZ2IzVjBjMmxrWlNCdlppQklWRTFNSUdSdlkzVnRaVzUwY3k1Y0lpa3NYQ0prWlhCekxtcHpYQ0k5UFhSb2FYTXVjbVZzWVhScGRtVlFZWFJvUHlobmIyOW5MbXh2WjFSdlEyOXVjMjlzWlY4b1hDSkRiMjV6YVdSbGNpQnpaWFIwYVc1bklFTk1UMU5WVWtWZlNVMVFUMUpVWDFORFVrbFFWQ0JpWldadmNtVWdiRzloWkdsdVp5QmlZWE5sTG1wekxDQnZjaUJ6WlhSMGFXNW5JRU5NVDFOVlVrVmZUazlmUkVWUVV5QjBieUIwY25WbExsd2lLU3hjYm1FdWJHOWhaR1ZrS0NrcE9tRXVjR0YxYzJVb0tYMHNaMjl2Wnk1RmN6Wk5iMlIxYkdWRVpYQmxibVJsYm1ONVBXWjFibU4wYVc5dUtHRXNZaXhqTEdRc1pTbDdaMjl2Wnk1RVpYQmxibVJsYm1ONUxtTmhiR3dvZEdocGN5eGhMR0lzWXl4a0xHVXBmU3huYjI5bkxtbHVhR1Z5YVhSektHZHZiMmN1UlhNMlRXOWtkV3hsUkdWd1pXNWtaVzVqZVN4bmIyOW5Ma1JsY0dWdVpHVnVZM2twTEdkdmIyY3VSWE0yVFc5a2RXeGxSR1Z3Wlc1a1pXNWplUzV3Y205MGIzUjVjR1V1Ykc5aFpEMW1kVzVqZEdsdmJpaGhLWHRtZFc1amRHbHZiaUJpS0dFc1lpbDdZVDFpUHljOGMyTnlhWEIwSUhSNWNHVTlYQ0p0YjJSMWJHVmNJaUJqY205emMyOXlhV2RwYmo0bksySXJYQ0pjWEhnell5OXpZM0pwY0hRK1hDSTZKenh6WTNKcGNIUWdkSGx3WlQxY0ltMXZaSFZzWlZ3aUlHTnliM056YjNKcFoybHVJSE55WXoxY0lpY3JZU3NuWENJK1hGeDRNMk12YzJOeWFYQjBQaWM3WkM1M2NtbDBaU2huYjI5bkxsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYejluYjI5bkxsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYeTVqY21WaGRHVklWRTFNS0dFcE9tRXBmV1oxYm1OMGFXOXVJR01vWVN4aUtYdDJZWElnWXoxa0xtTnlaV0YwWlVWc1pXMWxiblFvWENKelkzSnBjSFJjSWlrN1l5NWtaV1psY2owaE1EdGpMbUZ6ZVc1alBTRXhPMk11ZEhsd1pUMWNibHdpYlc5a2RXeGxYQ0k3WXk1elpYUkJkSFJ5YVdKMWRHVW9YQ0pqY205emMyOXlhV2RwYmx3aUxDRXdLVHQyWVhJZ1pUMW5iMjluTG1kbGRGTmpjbWx3ZEU1dmJtTmxLQ2s3WlNZbVl5NXpaWFJCZEhSeWFXSjFkR1VvWENKdWIyNWpaVndpTEdVcE8ySS9ZeTUwWlhoMFEyOXVkR1Z1ZEQxbmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHo5bmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHk1amNtVmhkR1ZUWTNKcGNIUW9ZaWs2WWpwakxuTnlZejFuYjI5bkxsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYejluYjI5bkxsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYeTVqY21WaGRHVlRZM0pwY0hSVlVrd29ZU2s2WVR0a0xtaGxZV1F1WVhCd1pXNWtRMmhwYkdRb1l5bDlhV1lvWjI5dlp5NW5iRzlpWVd3dVEweFBVMVZTUlY5SlRWQlBVbFJmVTBOU1NWQlVLV2R2YjJjdVoyeHZZbUZzTGtOTVQxTlZVa1ZmU1UxUVQxSlVYMU5EVWtsUVZDaDBhR2x6TG5CaGRHZ3BQMkV1Ykc5aFpHVmtLQ2s2WVM1d1lYVnpaU2dwTzJWc2MyVWdhV1lvWjI5dlp5NXBia2gwYld4RWIyTjFiV1Z1ZEY4b0tTbDdkbUZ5SUdROVoyOXZaeTVuYkc5aVlXd3VaRzlqZFcxbGJuUXNaVDEwYUdsek8ybG1LR2R2YjJjdWFYTkViMk4xYldWdWRFeHZZV1JwYm1kZktDa3BlM1poY2lCbVBXSTdaMjl2Wnk1RVpYQmxibVJsYm1ONUxtUmxabVZ5WHoxY2JpRXdmV1ZzYzJVZ1pqMWpPM1poY2lCblBXZHZiMmN1UkdWd1pXNWtaVzVqZVM1eVpXZHBjM1JsY2tOaGJHeGlZV05yWHlobWRXNWpkR2x2YmlncGUyZHZiMmN1UkdWd1pXNWtaVzVqZVM1MWJuSmxaMmx6ZEdWeVEyRnNiR0poWTJ0ZktHY3BPMkV1YzJWMFRXOWtkV3hsVTNSaGRHVW9aMjl2Wnk1TmIyUjFiR1ZVZVhCbExrVlROaWw5S1R0bUtIWnZhV1FnTUN3bloyOXZaeTVFWlhCbGJtUmxibU41TG1OaGJHeGlZV05yWHloY0lpY3JaeXNuWENJcEp5azdaaWgwYUdsekxuQmhkR2dzZG05cFpDQXdLVHQyWVhJZ2FEMW5iMjluTGtSbGNHVnVaR1Z1WTNrdWNtVm5hWE4wWlhKRFlXeHNZbUZqYTE4b1puVnVZM1JwYjI0b1lpbDdaMjl2Wnk1RVpYQmxibVJsYm1ONUxuVnVjbVZuYVhOMFpYSkRZV3hzWW1GamExOG9hQ2s3WVM1eVpXZHBjM1JsY2tWek5rMXZaSFZzWlVWNGNHOXlkSE1vWlM1d1lYUm9MR0lzWjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHViVzlrZFd4bFRtRnRaU2w5S1R0bUtIWnZhV1FnTUN3bmFXMXdiM0owSUNvZ1lYTWdiU0JtY205dElGd2lKeXQwYUdsekxuQmhkR2dySjF3aU95Qm5iMjluTGtSbGNHVnVaR1Z1WTNrdVkyRnNiR0poWTJ0ZktGd2lKeXRvS3lkY0lpd2diU2tuS1R0MllYSWdhejFuYjI5bkxrUmxjR1Z1WkdWdVkza3VjbVZuYVhOMFpYSkRZV3hzWW1GamExOG9ablZ1WTNScGIyNG9LWHRuYjI5bkxrUmxjR1Z1WkdWdVkza3VkVzV5WldkcGMzUmxja05oYkd4aVlXTnJYeWhyS1R0Y2JtRXVZMnhsWVhKTmIyUjFiR1ZUZEdGMFpTZ3BPMkV1Ykc5aFpHVmtLQ2w5S1R0bUtIWnZhV1FnTUN3bloyOXZaeTVFWlhCbGJtUmxibU41TG1OaGJHeGlZV05yWHloY0lpY3JheXNuWENJcEp5bDlaV3h6WlNCbmIyOW5MbXh2WjFSdlEyOXVjMjlzWlY4b1hDSkRZVzV1YjNRZ2RYTmxJR1JsWm1GMWJIUWdaR1ZpZFdjZ2JHOWhaR1Z5SUc5MWRITnBaR1VnYjJZZ1NGUk5UQ0JrYjJOMWJXVnVkSE11WENJcExHRXVjR0YxYzJVb0tYMHNaMjl2Wnk1VWNtRnVjMlp2Y20xbFpFUmxjR1Z1WkdWdVkzazlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxLWHRuYjI5bkxrUmxjR1Z1WkdWdVkza3VZMkZzYkNoMGFHbHpMR0VzWWl4akxHUXNaU2s3ZEdocGN5NWpiMjUwWlc1MGMxODliblZzYkR0MGFHbHpMbXhoZW5sR1pYUmphRjg5SVdkdmIyY3VhVzVJZEcxc1JHOWpkVzFsYm5SZktDbDhmQ0VvWENKdWIwMXZaSFZzWlZ3aWFXNGdaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDaGNJbk5qY21sd2RGd2lLU2w5TEdkdmIyY3VhVzVvWlhKcGRITW9aMjl2Wnk1VWNtRnVjMlp2Y20xbFpFUmxjR1Z1WkdWdVkza3NaMjl2Wnk1RVpYQmxibVJsYm1ONUtTeG5iMjluTGxSeVlXNXpabTl5YldWa1JHVndaVzVrWlc1amVTNXdjbTkwYjNSNWNHVXViRzloWkQxbWRXNWpkR2x2YmloaEtYdG1kVzVqZEdsdmJpQmlLQ2w3WlM1amIyNTBaVzUwYzE4OVhHNW5iMjluTG14dllXUkdhV3hsVTNsdVkxOG9aUzV3WVhSb0tUdGxMbU52Ym5SbGJuUnpYeVltS0dVdVkyOXVkR1Z1ZEhOZlBXVXVkSEpoYm5ObWIzSnRLR1V1WTI5dWRHVnVkSE5mS1N4bExtTnZiblJsYm5Selh5WW1LR1V1WTI5dWRHVnVkSE5mS3oxY0lseGNiaTh2SXlCemIzVnlZMlZWVWt3OVhDSXJaUzV3WVhSb0tTbDlablZ1WTNScGIyNGdZeWdwZTJVdWJHRjZlVVpsZEdOb1h5WW1ZaWdwTzJsbUtHVXVZMjl1ZEdWdWRITmZLWHRtSmlaaExuTmxkRTF2WkhWc1pWTjBZWFJsS0dkdmIyY3VUVzlrZFd4bFZIbHdaUzVGVXpZcE8zUnllWHQyWVhJZ1l6MWxMbU52Ym5SbGJuUnpYenRsTG1OdmJuUmxiblJ6WHoxdWRXeHNPMmR2YjJjdVoyeHZZbUZzUlhaaGJDaGpLVHRwWmlobUtYWmhjaUJrUFdkdmIyY3ViVzlrZFd4bFRHOWhaR1Z5VTNSaGRHVmZMbTF2WkhWc1pVNWhiV1Y5Wm1sdVlXeHNlWHRtSmlaaExtTnNaV0Z5VFc5a2RXeGxVM1JoZEdVb0tYMW1KaVpuYjI5bkxtZHNiMkpoYkM0a2FuTmpiMjF3TG5KbGNYVnBjbVV1Wlc1emRYSmxLRnRsTG1kbGRGQmhkR2hPWVcxbEtDbGRMR1oxYm1OMGFXOXVLQ2w3WVM1eVpXZHBjM1JsY2tWek5rMXZaSFZzWlVWNGNHOXlkSE1vWlM1d1lYUm9MR2R2YjJjdVoyeHZZbUZzTGlScWMyTnZiWEF1Y21WeGRXbHlaU2hsTG1kbGRGQmhkR2hPWVcxbEtDa3BMRnh1WkNsOUtUdGhMbXh2WVdSbFpDZ3BmWDFtZFc1amRHbHZiaUJrS0NsN2RtRnlJR0U5WjI5dlp5NW5iRzlpWVd3dVpHOWpkVzFsYm5Rc1lqMW5iMjluTGtSbGNHVnVaR1Z1WTNrdWNtVm5hWE4wWlhKRFlXeHNZbUZqYTE4b1puVnVZM1JwYjI0b0tYdG5iMjluTGtSbGNHVnVaR1Z1WTNrdWRXNXlaV2RwYzNSbGNrTmhiR3hpWVdOclh5aGlLVHRqS0NsOUtTeGtQU2M4YzJOeWFYQjBJSFI1Y0dVOVhDSjBaWGgwTDJwaGRtRnpZM0pwY0hSY0lqNG5LMmR2YjJjdWNISnZkR1ZqZEZOamNtbHdkRlJoWjE4b0oyZHZiMmN1UkdWd1pXNWtaVzVqZVM1allXeHNZbUZqYTE4b1hDSW5LMklySjF3aUtUc25LU3RjSWx4Y2VETmpMM05qY21sd2RENWNJanRoTG5keWFYUmxLR2R2YjJjdVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZQMmR2YjJjdVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZMbU55WldGMFpVaFVUVXdvWkNrNlpDbDlkbUZ5SUdVOWRHaHBjenRwWmlobmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwbE5VRTlTVkY5VFExSkpVRlFwWWlncExIUm9hWE11WTI5dWRHVnVkSE5mSmlabmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwbE5VRTlTVkY5VFExSkpVRlFvWENKY0lpeDBhR2x6TG1OdmJuUmxiblJ6WHlrL0tIUm9hWE11WTI5dWRHVnVkSE5mUFc1MWJHd3NZUzVzYjJGa1pXUW9LU2s2WVM1d1lYVnpaU2dwTzF4dVpXeHpaWHQyWVhJZ1pqMTBhR2x6TG14dllXUkdiR0ZuY3k1dGIyUjFiR1U5UFdkdmIyY3VUVzlrZFd4bFZIbHdaUzVGVXpZN2RHaHBjeTVzWVhwNVJtVjBZMmhmZkh4aUtDazdkbUZ5SUdjOU1UeGhMbkJsYm1ScGJtY29LUzVzWlc1bmRHZ3NhRDFuSmlabmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1SlUxOVBURVJmU1VWZk8yYzlaMjl2Wnk1RVpYQmxibVJsYm1ONUxtUmxabVZ5WHlZbUtHZDhmR2R2YjJjdWFYTkViMk4xYldWdWRFeHZZV1JwYm1kZktDa3BPMmxtS0doOGZHY3BZUzVrWldabGNpaG1kVzVqZEdsdmJpZ3BlMk1vS1gwcE8yVnNjMlY3ZG1GeUlHczlaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblE3YUQxbmIyOW5MbWx1U0hSdGJFUnZZM1Z0Wlc1MFh5Z3BKaVpjSWtGamRHbDJaVmhQWW1wbFkzUmNJbWx1SUdkdmIyY3VaMnh2WW1Gc08ybG1LR1ltSm1kdmIyY3VhVzVJZEcxc1JHOWpkVzFsYm5SZktDa21KbWR2YjJjdWFYTkViMk4xYldWdWRFeHZZV1JwYm1kZktDa21KaUZvS1h0bmIyOW5Ma1JsY0dWdVpHVnVZM2t1WkdWbVpYSmZQU0V3TzJFdWNHRjFjMlVvS1R0MllYSWdiRDFyTG05dWNtVmhaSGx6ZEdGMFpXTm9ZVzVuWlR0ckxtOXVjbVZoWkhsemRHRjBaV05vWVc1blpUMW1kVzVqZEdsdmJpZ3BlMXdpYVc1MFpYSmhZM1JwZG1WY0lqMDlheTV5WldGa2VWTjBZWFJsSmlZb2F5NXZibkpsWVdSNWMzUmhkR1ZqYUdGdVoyVTlYRzVzTEdNb0tTeGhMbkpsYzNWdFpTZ3BLVHRuYjI5bkxtbHpSblZ1WTNScGIyNG9iQ2ttSm13dVlYQndiSGtvZG05cFpDQXdMR0Z5WjNWdFpXNTBjeWw5ZldWc2MyVWhaMjl2Wnk1RVpXSjFaMHh2WVdSbGNsOHVTVk5mVDB4RVgwbEZYeVltWjI5dlp5NXBia2gwYld4RWIyTjFiV1Z1ZEY4b0tTWW1aMjl2Wnk1cGMwUnZZM1Z0Wlc1MFRHOWhaR2x1WjE4b0tUOWtLQ2s2WXlncGZYMTlMR2R2YjJjdVZISmhibk5tYjNKdFpXUkVaWEJsYm1SbGJtTjVMbkJ5YjNSdmRIbHdaUzUwY21GdWMyWnZjbTA5Wm5WdVkzUnBiMjRvWVNsN2ZTeG5iMjluTGxSeVlXNXpjR2xzWldSRVpYQmxibVJsYm1ONVBXWjFibU4wYVc5dUtHRXNZaXhqTEdRc1pTeG1LWHRuYjI5bkxsUnlZVzV6Wm05eWJXVmtSR1Z3Wlc1a1pXNWplUzVqWVd4c0tIUm9hWE1zWVN4aUxHTXNaQ3hsS1R0MGFHbHpMblJ5WVc1emNHbHNaWEk5Wm4wc1oyOXZaeTVwYm1obGNtbDBjeWhuYjI5bkxsUnlZVzV6Y0dsc1pXUkVaWEJsYm1SbGJtTjVMR2R2YjJjdVZISmhibk5tYjNKdFpXUkVaWEJsYm1SbGJtTjVLU3huYjI5bkxsUnlZVzV6Y0dsc1pXUkVaWEJsYm1SbGJtTjVMbkJ5YjNSdmRIbHdaUzUwY21GdWMyWnZjbTA5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUhSb2FYTXVkSEpoYm5Od2FXeGxjaTUwY21GdWMzQnBiR1VvWVN4MGFHbHpMbWRsZEZCaGRHaE9ZVzFsS0NrcGZTeGNibWR2YjJjdVVISmxWSEpoYm5Od2FXeGxaRVZ6TmsxdlpIVnNaVVJsY0dWdVpHVnVZM2s5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsS1h0bmIyOW5MbFJ5WVc1elptOXliV1ZrUkdWd1pXNWtaVzVqZVM1allXeHNLSFJvYVhNc1lTeGlMR01zWkN4bEtYMHNaMjl2Wnk1cGJtaGxjbWwwY3lobmIyOW5MbEJ5WlZSeVlXNXpjR2xzWldSRmN6Wk5iMlIxYkdWRVpYQmxibVJsYm1ONUxHZHZiMmN1VkhKaGJuTm1iM0p0WldSRVpYQmxibVJsYm1ONUtTeG5iMjluTGxCeVpWUnlZVzV6Y0dsc1pXUkZjelpOYjJSMWJHVkVaWEJsYm1SbGJtTjVMbkJ5YjNSdmRIbHdaUzUwY21GdWMyWnZjbTA5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdGOUxHZHZiMmN1UjI5dlowMXZaSFZzWlVSbGNHVnVaR1Z1WTNrOVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bExHWXNaeWw3WjI5dlp5NVVjbUZ1YzJadmNtMWxaRVJsY0dWdVpHVnVZM2t1WTJGc2JDaDBhR2x6TEdFc1lpeGpMR1FzWlNrN2RHaHBjeTV1WldWa2MxUnlZVzV6Y0dsc1pWODlaanQwYUdsekxuUnlZVzV6Y0dsc1pYSmZQV2Q5TEdkdmIyY3VhVzVvWlhKcGRITW9aMjl2Wnk1SGIyOW5UVzlrZFd4bFJHVndaVzVrWlc1amVTeG5iMjluTGxSeVlXNXpabTl5YldWa1JHVndaVzVrWlc1amVTa3NaMjl2Wnk1SGIyOW5UVzlrZFd4bFJHVndaVzVrWlc1amVTNXdjbTkwYjNSNWNHVXVkSEpoYm5ObWIzSnRQVnh1Wm5WdVkzUnBiMjRvWVNsN2RHaHBjeTV1WldWa2MxUnlZVzV6Y0dsc1pWOG1KaWhoUFhSb2FYTXVkSEpoYm5Od2FXeGxjbDh1ZEhKaGJuTndhV3hsS0dFc2RHaHBjeTVuWlhSUVlYUm9UbUZ0WlNncEtTazdjbVYwZFhKdUlHZHZiMmN1VEU5QlJGOU5UMFJWVEVWZlZWTkpUa2RmUlZaQlRDWW1aMjl2Wnk1cGMwUmxaaWhuYjI5bkxtZHNiMkpoYkM1S1UwOU9LVDljSW1kdmIyY3ViRzloWkUxdlpIVnNaU2hjSWl0bmIyOW5MbWRzYjJKaGJDNUtVMDlPTG5OMGNtbHVaMmxtZVNoaEsxd2lYRnh1THk4aklITnZkWEpqWlZWU1REMWNJaXQwYUdsekxuQmhkR2dyWENKY1hHNWNJaWtyWENJcE8xd2lPaWRuYjI5bkxteHZZV1JOYjJSMWJHVW9ablZ1WTNScGIyNG9aWGh3YjNKMGN5a2dlMXdpZFhObElITjBjbWxqZEZ3aU95Y3JZU3RjSWx4Y2JqdHlaWFIxY200Z1pYaHdiM0owYzMwcE8xeGNiaTh2SXlCemIzVnlZMlZWVWt3OVhDSXJkR2hwY3k1d1lYUm9LMXdpWEZ4dVhDSjlMR2R2YjJjdVJHVmlkV2RNYjJGa1pYSmZMa2xUWDA5TVJGOUpSVjg5SVNobmIyOW5MbWRzYjJKaGJDNWhkRzlpZkh3aFoyOXZaeTVuYkc5aVlXd3VaRzlqZFcxbGJuUjhmQ0ZuYjI5bkxtZHNiMkpoYkM1a2IyTjFiV1Z1ZEM1aGJHd3BMR2R2YjJjdVJHVmlkV2RNYjJGa1pYSmZMbkJ5YjNSdmRIbHdaUzVoWkdSRVpYQmxibVJsYm1ONVBXWjFibU4wYVc5dUtHRXNZaXhjYm1Nc1pDbDdZajFpZkh4YlhUdGhQV0V1Y21Wd2JHRmpaU2d2WEZ4Y1hDOW5MRndpTDF3aUtUdDJZWElnWlQxbmIyOW5MbTV2Y20xaGJHbDZaVkJoZEdoZktHZHZiMmN1WW1GelpWQmhkR2dyWVNrN1pDWW1YQ0ppYjI5c1pXRnVYQ0loUFQxMGVYQmxiMllnWkh4OEtHUTlaRDk3Ylc5a2RXeGxPbWR2YjJjdVRXOWtkV3hsVkhsd1pTNUhUMDlIZlRwN2ZTazdZejEwYUdsekxtWmhZM1J2Y25sZkxtTnlaV0YwWlVSbGNHVnVaR1Z1WTNrb1pTeGhMR0lzWXl4a0xHZHZiMmN1ZEhKaGJuTndhV3hsY2w4dWJtVmxaSE5VY21GdWMzQnBiR1VvWkM1c1lXNW5mSHhjSW1Wek0xd2lMR1F1Ylc5a2RXeGxLU2s3ZEdocGN5NWtaWEJsYm1SbGJtTnBaWE5mVzJWZFBXTTdabTl5S0dNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbWxrVkc5UVlYUm9YMXRpVzJOZFhUMWxPM1JvYVhNdWFXUlViMUJoZEdoZlcyRmRQV1Y5TEdkdmIyY3VSR1Z3Wlc1a1pXNWplVVpoWTNSdmNuazlablZ1WTNScGIyNG9ZU2w3ZEdocGN5NTBjbUZ1YzNCcGJHVnlQV0Y5TEdkdmIyY3VSR1Z3Wlc1a1pXNWplVVpoWTNSdmNua3VjSEp2ZEc5MGVYQmxMbU55WldGMFpVUmxjR1Z1WkdWdVkzazlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxMR1lwZTNKbGRIVnliaUJsTG0xdlpIVnNaVDA5WjI5dlp5NU5iMlIxYkdWVWVYQmxMa2RQVDBjL2JtVjNJR2R2YjJjdVIyOXZaMDF2WkhWc1pVUmxjR1Z1WkdWdVkza29ZU3hjYm1Jc1l5eGtMR1VzWml4MGFHbHpMblJ5WVc1emNHbHNaWElwT21ZL2JtVjNJR2R2YjJjdVZISmhibk53YVd4bFpFUmxjR1Z1WkdWdVkza29ZU3hpTEdNc1pDeGxMSFJvYVhNdWRISmhibk53YVd4bGNpazZaUzV0YjJSMWJHVTlQV2R2YjJjdVRXOWtkV3hsVkhsd1pTNUZVelkvWENKdVpYWmxjbHdpUFQxbmIyOW5MbFJTUVU1VFVFbE1SU1ltWjI5dlp5NUJVMU5WVFVWZlJWTmZUVTlFVlV4RlUxOVVVa0ZPVTFCSlRFVkVQMjVsZHlCbmIyOW5MbEJ5WlZSeVlXNXpjR2xzWldSRmN6Wk5iMlIxYkdWRVpYQmxibVJsYm1ONUtHRXNZaXhqTEdRc1pTazZibVYzSUdkdmIyY3VSWE0yVFc5a2RXeGxSR1Z3Wlc1a1pXNWplU2hoTEdJc1l5eGtMR1VwT201bGR5Qm5iMjluTGtSbGNHVnVaR1Z1WTNrb1lTeGlMR01zWkN4bEtYMHNaMjl2Wnk1a1pXSjFaMHh2WVdSbGNsODlibVYzSUdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTEdkdmIyY3ViRzloWkVOc2IzTjFjbVZFWlhCelBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1a1pXSjFaMHh2WVdSbGNsOHViRzloWkVOc2IzTjFjbVZFWlhCektDbDlMR2R2YjJjdWMyVjBSR1Z3Wlc1a1pXNWplVVpoWTNSdmNuazlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWtaV0oxWjB4dllXUmxjbDh1YzJWMFJHVndaVzVrWlc1amVVWmhZM1J2Y25rb1lTbDlMR2R2YjJjdVoyeHZZbUZzTGtOTVQxTlZVa1ZmVGs5ZlJFVlFVM3g4WEc1bmIyOW5MbVJsWW5WblRHOWhaR1Z5WHk1c2IyRmtRMnh2YzNWeVpVUmxjSE1vS1N4bmIyOW5MbUp2YjNSemRISmhjRDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WkdWaWRXZE1iMkZrWlhKZkxtSnZiM1J6ZEhKaGNDaGhMR0lwZlNrN1oyOXZaeTVVVWxWVFZFVkVYMVJaVUVWVFgxQlBURWxEV1Y5T1FVMUZQVndpWENJN1oyOXZaeTVwWkdWdWRHbDBlVjg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdGOU8yZHZiMmN1WTNKbFlYUmxWSEoxYzNSbFpGUjVjR1Z6VUc5c2FXTjVQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQVzUxYkd3N2FXWW9YQ0oxYm1SbFptbHVaV1JjSWowOVBYUjVjR1Z2WmlCVWNuVnpkR1ZrVkhsd1pYTjhmQ0ZVY25WemRHVmtWSGx3WlhNdVkzSmxZWFJsVUc5c2FXTjVLWEpsZEhWeWJpQmlPM1J5ZVh0aVBWUnlkWE4wWldSVWVYQmxjeTVqY21WaGRHVlFiMnhwWTNrb1lTeDdZM0psWVhSbFNGUk5URHBuYjI5bkxtbGtaVzUwYVhSNVh5eGpjbVZoZEdWVFkzSnBjSFE2WjI5dlp5NXBaR1Z1ZEdsMGVWOHNZM0psWVhSbFUyTnlhWEIwVlZKTU9tZHZiMmN1YVdSbGJuUnBkSGxmTEdOeVpXRjBaVlZTVERwbmIyOW5MbWxrWlc1MGFYUjVYMzBwZldOaGRHTm9LR01wZTJkdmIyY3ViRzluVkc5RGIyNXpiMnhsWHloakxtMWxjM05oWjJVcGZYSmxkSFZ5YmlCaWZUdGNibWR2YjJjdVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZQV2R2YjJjdVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZUa0ZOUlQ5bmIyOW5MbU55WldGMFpWUnlkWE4wWldSVWVYQmxjMUJ2YkdsamVTaG5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlgwNUJUVVVyWENJalltRnpaVndpS1RwdWRXeHNPMmR2YjJjdWIySnFaV04wUFh0OU8yZHZiMmN1YjJKcVpXTjBMbWx6UFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHRTlQVDFpUHpBaFBUMWhmSHd4TDJFOVBUMHhMMkk2WVNFOVBXRW1KbUloUFQxaWZUdG5iMjluTG05aWFtVmpkQzVtYjNKRllXTm9QV1oxYm1OMGFXOXVLR0VzWWl4aktYdG1iM0lvZG1GeUlHUWdhVzRnWVNsaUxtTmhiR3dvWXl4aFcyUmRMR1FzWVNsOU8yZHZiMmN1YjJKcVpXTjBMbVpwYkhSbGNqMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5ZTMwc1pUdG1iM0lvWlNCcGJpQmhLV0l1WTJGc2JDaGpMR0ZiWlYwc1pTeGhLU1ltS0dSYlpWMDlZVnRsWFNrN2NtVjBkWEp1SUdSOU8yZHZiMmN1YjJKcVpXTjBMbTFoY0QxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTllMzBzWlR0bWIzSW9aU0JwYmlCaEtXUmJaVjA5WWk1allXeHNLR01zWVZ0bFhTeGxMR0VwTzNKbGRIVnliaUJrZlR0bmIyOW5MbTlpYW1WamRDNXpiMjFsUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRtYjNJb2RtRnlJR1FnYVc0Z1lTbHBaaWhpTG1OaGJHd29ZeXhoVzJSZExHUXNZU2twY21WMGRYSnVJVEE3Y21WMGRYSnVJVEY5TzF4dVoyOXZaeTV2WW1wbFkzUXVaWFpsY25rOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJadmNpaDJZWElnWkNCcGJpQmhLV2xtS0NGaUxtTmhiR3dvWXl4aFcyUmRMR1FzWVNrcGNtVjBkWEp1SVRFN2NtVjBkWEp1SVRCOU8yZHZiMmN1YjJKcVpXTjBMbWRsZEVOdmRXNTBQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQVEFzWXp0bWIzSW9ZeUJwYmlCaEtXSXJLenR5WlhSMWNtNGdZbjA3WjI5dlp5NXZZbXBsWTNRdVoyVjBRVzU1UzJWNVBXWjFibU4wYVc5dUtHRXBlMlp2Y2loMllYSWdZaUJwYmlCaEtYSmxkSFZ5YmlCaWZUdG5iMjluTG05aWFtVmpkQzVuWlhSQmJubFdZV3gxWlQxbWRXNWpkR2x2YmloaEtYdG1iM0lvZG1GeUlHSWdhVzRnWVNseVpYUjFjbTRnWVZ0aVhYMDdaMjl2Wnk1dlltcGxZM1F1WTI5dWRHRnBibk05Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTV2WW1wbFkzUXVZMjl1ZEdGcGJuTldZV3gxWlNoaExHSXBmVHRuYjI5bkxtOWlhbVZqZEM1blpYUldZV3gxWlhNOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVcxMHNZejB3TEdRN1ptOXlLR1FnYVc0Z1lTbGlXMk1ySzEwOVlWdGtYVHR5WlhSMWNtNGdZbjA3WEc1bmIyOW5MbTlpYW1WamRDNW5aWFJMWlhselBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBWdGRMR005TUN4a08yWnZjaWhrSUdsdUlHRXBZbHRqS3l0ZFBXUTdjbVYwZFhKdUlHSjlPMmR2YjJjdWIySnFaV04wTG1kbGRGWmhiSFZsUW5sTFpYbHpQV1oxYm1OMGFXOXVLR0VzWWlsN2RtRnlJR005WjI5dlp5NXBjMEZ5Y21GNVRHbHJaU2hpS1N4a1BXTS9ZanBoY21kMWJXVnVkSE03Wm05eUtHTTlZejh3T2pFN1l6eGtMbXhsYm1kMGFEdGpLeXNwZTJsbUtHNTFiR3c5UFdFcGNtVjBkWEp1TzJFOVlWdGtXMk5kWFgxeVpYUjFjbTRnWVgwN1oyOXZaeTV2WW1wbFkzUXVZMjl1ZEdGcGJuTkxaWGs5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z2JuVnNiQ0U5UFdFbUptSWdhVzRnWVgwN1oyOXZaeTV2WW1wbFkzUXVZMjl1ZEdGcGJuTldZV3gxWlQxbWRXNWpkR2x2YmloaExHSXBlMlp2Y2loMllYSWdZeUJwYmlCaEtXbG1LR0ZiWTEwOVBXSXBjbVYwZFhKdUlUQTdjbVYwZFhKdUlURjlPMmR2YjJjdWIySnFaV04wTG1acGJtUkxaWGs5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMlp2Y2loMllYSWdaQ0JwYmlCaEtXbG1LR0l1WTJGc2JDaGpMR0ZiWkYwc1pDeGhLU2x5WlhSMWNtNGdaSDA3WEc1bmIyOW5MbTlpYW1WamRDNW1hVzVrVm1Gc2RXVTlablZ1WTNScGIyNG9ZU3hpTEdNcGUzSmxkSFZ5YmloaVBXZHZiMmN1YjJKcVpXTjBMbVpwYm1STFpYa29ZU3hpTEdNcEtTWW1ZVnRpWFgwN1oyOXZaeTV2WW1wbFkzUXVhWE5GYlhCMGVUMW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0lnYVc0Z1lTbHlaWFIxY200aE1UdHlaWFIxY200aE1IMDdaMjl2Wnk1dlltcGxZM1F1WTJ4bFlYSTlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpSUdsdUlHRXBaR1ZzWlhSbElHRmJZbDE5TzJkdmIyY3ViMkpxWldOMExuSmxiVzkyWlQxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCak95aGpQV0lnYVc0Z1lTa21KbVJsYkdWMFpTQmhXMkpkTzNKbGRIVnliaUJqZlR0bmIyOW5MbTlpYW1WamRDNWhaR1E5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMmxtS0c1MWJHd2hQVDFoSmlaaUlHbHVJR0VwZEdoeWIzY2dSWEp5YjNJb0oxUm9aU0J2WW1wbFkzUWdZV3h5WldGa2VTQmpiMjUwWVdsdWN5QjBhR1VnYTJWNUlGd2lKeXRpS3lkY0lpY3BPMmR2YjJjdWIySnFaV04wTG5ObGRDaGhMR0lzWXlsOU8yZHZiMmN1YjJKcVpXTjBMbWRsZEQxbWRXNWpkR2x2YmloaExHSXNZeWw3Y21WMGRYSnVJRzUxYkd3aFBUMWhKaVppSUdsdUlHRS9ZVnRpWFRwamZUdGNibWR2YjJjdWIySnFaV04wTG5ObGREMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1lWdGlYVDFqZlR0bmIyOW5MbTlpYW1WamRDNXpaWFJKWmxWdVpHVm1hVzVsWkQxbWRXNWpkR2x2YmloaExHSXNZeWw3Y21WMGRYSnVJR0lnYVc0Z1lUOWhXMkpkT21GYllsMDlZMzA3WjI5dlp5NXZZbXBsWTNRdWMyVjBWMmwwYUZKbGRIVnlibFpoYkhWbFNXWk9iM1JUWlhROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJsbUtHSWdhVzRnWVNseVpYUjFjbTRnWVZ0aVhUdGpQV01vS1R0eVpYUjFjbTRnWVZ0aVhUMWpmVHRuYjI5bkxtOWlhbVZqZEM1bGNYVmhiSE05Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTWdhVzRnWVNscFppZ2hLR01nYVc0Z1lpbDhmR0ZiWTEwaFBUMWlXMk5kS1hKbGRIVnliaUV4TzJadmNpaDJZWElnWkNCcGJpQmlLV2xtS0NFb1pDQnBiaUJoS1NseVpYUjFjbTRoTVR0eVpYUjFjbTRoTUgwN1oyOXZaeTV2WW1wbFkzUXVZMnh2Ym1VOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOWUzMHNZenRtYjNJb1l5QnBiaUJoS1dKYlkxMDlZVnRqWFR0eVpYUjFjbTRnWW4wN1hHNW5iMjluTG05aWFtVmpkQzUxYm5OaFptVkRiRzl1WlQxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxbmIyOW5MblI1Y0dWUFppaGhLVHRwWmloY0ltOWlhbVZqZEZ3aVBUMWlmSHhjSW1GeWNtRjVYQ0k5UFdJcGUybG1LR2R2YjJjdWFYTkdkVzVqZEdsdmJpaGhMbU5zYjI1bEtTbHlaWFIxY200Z1lTNWpiRzl1WlNncE8ySTlYQ0poY25KaGVWd2lQVDFpUDF0ZE9udDlPMlp2Y2loMllYSWdZeUJwYmlCaEtXSmJZMTA5WjI5dlp5NXZZbXBsWTNRdWRXNXpZV1psUTJ4dmJtVW9ZVnRqWFNrN2NtVjBkWEp1SUdKOWNtVjBkWEp1SUdGOU8yZHZiMmN1YjJKcVpXTjBMblJ5WVc1emNHOXpaVDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajE3ZlN4ak8yWnZjaWhqSUdsdUlHRXBZbHRoVzJOZFhUMWpPM0psZEhWeWJpQmlmVHRuYjI5bkxtOWlhbVZqZEM1UVVrOVVUMVJaVUVWZlJrbEZURVJUWHoxY0ltTnZibk4wY25WamRHOXlJR2hoYzA5M2JsQnliM0JsY25SNUlHbHpVSEp2ZEc5MGVYQmxUMllnY0hKdmNHVnlkSGxKYzBWdWRXMWxjbUZpYkdVZ2RHOU1iMk5oYkdWVGRISnBibWNnZEc5VGRISnBibWNnZG1Gc2RXVlBabHdpTG5Od2JHbDBLRndpSUZ3aUtUdGNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaRDFtZFc1amRHbHZiaWhoTEdJcGUyWnZjaWgyWVhJZ1l5eGtMR1U5TVR0bFBHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnN1pTc3JLWHRrUFdGeVozVnRaVzUwYzF0bFhUdG1iM0lvWXlCcGJpQmtLV0ZiWTEwOVpGdGpYVHRtYjNJb2RtRnlJR1k5TUR0bVBHZHZiMmN1YjJKcVpXTjBMbEJTVDFSUFZGbFFSVjlHU1VWTVJGTmZMbXhsYm1kMGFEdG1LeXNwWXoxbmIyOW5MbTlpYW1WamRDNVFVazlVVDFSWlVFVmZSa2xGVEVSVFgxdG1YU3hQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvWkN4aktTWW1LR0ZiWTEwOVpGdGpYU2w5ZlR0Y2JtZHZiMmN1YjJKcVpXTjBMbU55WldGMFpUMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMWhjbWQxYldWdWRITXViR1Z1WjNSb08ybG1LREU5UFdJbUptZHZiMmN1YVhOQmNuSmhlU2hoY21kMWJXVnVkSE5iTUYwcEtYSmxkSFZ5YmlCbmIyOW5MbTlpYW1WamRDNWpjbVZoZEdVdVlYQndiSGtvYm5Wc2JDeGhjbWQxYldWdWRITmJNRjBwTzJsbUtHSWxNaWwwYUhKdmR5QkZjbkp2Y2loY0lsVnVaWFpsYmlCdWRXMWlaWElnYjJZZ1lYSm5kVzFsYm5SelhDSXBPMlp2Y2loMllYSWdZejE3ZlN4a1BUQTdaRHhpTzJRclBUSXBZMXRoY21kMWJXVnVkSE5iWkYxZFBXRnlaM1Z0Wlc1MGMxdGtLekZkTzNKbGRIVnliaUJqZlR0bmIyOW5MbTlpYW1WamRDNWpjbVZoZEdWVFpYUTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlZWEpuZFcxbGJuUnpMbXhsYm1kMGFEdHBaaWd4UFQxaUppWm5iMjluTG1selFYSnlZWGtvWVhKbmRXMWxiblJ6V3pCZEtTbHlaWFIxY200Z1oyOXZaeTV2WW1wbFkzUXVZM0psWVhSbFUyVjBMbUZ3Y0d4NUtHNTFiR3dzWVhKbmRXMWxiblJ6V3pCZEtUdG1iM0lvZG1GeUlHTTllMzBzWkQwd08yUThZanRrS3lzcFkxdGhjbWQxYldWdWRITmJaRjFkUFNFd08zSmxkSFZ5YmlCamZUdGNibWR2YjJjdWIySnFaV04wTG1OeVpXRjBaVWx0YlhWMFlXSnNaVlpwWlhjOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVlUdFBZbXBsWTNRdWFYTkdjbTk2Wlc0bUppRlBZbXBsWTNRdWFYTkdjbTk2Wlc0b1lTa21KaWhpUFU5aWFtVmpkQzVqY21WaGRHVW9ZU2tzVDJKcVpXTjBMbVp5WldWNlpTaGlLU2s3Y21WMGRYSnVJR0o5TzJkdmIyY3ViMkpxWldOMExtbHpTVzF0ZFhSaFlteGxWbWxsZHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200aElVOWlhbVZqZEM1cGMwWnliM3BsYmlZbVQySnFaV04wTG1selJuSnZlbVZ1S0dFcGZUdGNibWR2YjJjdWIySnFaV04wTG1kbGRFRnNiRkJ5YjNCbGNuUjVUbUZ0WlhNOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJsbUtDRmhLWEpsZEhWeWJsdGRPMmxtS0NGUFltcGxZM1F1WjJWMFQzZHVVSEp2Y0dWeWRIbE9ZVzFsYzN4OElVOWlhbVZqZEM1blpYUlFjbTkwYjNSNWNHVlBaaWx5WlhSMWNtNGdaMjl2Wnk1dlltcGxZM1F1WjJWMFMyVjVjeWhoS1R0bWIzSW9kbUZ5SUdROWUzMDdZU1ltS0dFaFBUMVBZbXBsWTNRdWNISnZkRzkwZVhCbGZIeGlLU1ltS0dFaFBUMUdkVzVqZEdsdmJpNXdjbTkwYjNSNWNHVjhmR01wT3lsN1ptOXlLSFpoY2lCbFBVOWlhbVZqZEM1blpYUlBkMjVRY205d1pYSjBlVTVoYldWektHRXBMR1k5TUR0bVBHVXViR1Z1WjNSb08yWXJLeWxrVzJWYlpsMWRQU0V3TzJFOVQySnFaV04wTG1kbGRGQnliM1J2ZEhsd1pVOW1LR0VwZlhKbGRIVnliaUJuYjI5bkxtOWlhbVZqZEM1blpYUkxaWGx6S0dRcGZUdG5iMjluTG05aWFtVmpkQzVuWlhSVGRYQmxja05zWVhOelBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpaGhQVTlpYW1WamRDNW5aWFJRY205MGIzUjVjR1ZQWmloaExuQnliM1J2ZEhsd1pTa3BKaVpoTG1OdmJuTjBjblZqZEc5eWZUdG5iMjluTG1SbFluVm5QWHQ5TzJkdmIyY3VaR1ZpZFdjdVJYSnliM0k5Wm5WdVkzUnBiMjRvWVNsN2FXWW9SWEp5YjNJdVkyRndkSFZ5WlZOMFlXTnJWSEpoWTJVcFJYSnliM0l1WTJGd2RIVnlaVk4wWVdOclZISmhZMlVvZEdocGN5eG5iMjluTG1SbFluVm5Ma1Z5Y205eUtUdGxiSE5sZTNaaGNpQmlQVVZ5Y205eUtDa3VjM1JoWTJzN1lpWW1LSFJvYVhNdWMzUmhZMnM5WWlsOVlTWW1LSFJvYVhNdWJXVnpjMkZuWlQxVGRISnBibWNvWVNrcE8zUm9hWE11Y21Wd2IzSjBSWEp5YjNKVWIxTmxjblpsY2owaE1IMDdaMjl2Wnk1cGJtaGxjbWwwY3lobmIyOW5MbVJsWW5WbkxrVnljbTl5TEVWeWNtOXlLVHRuYjI5bkxtUmxZblZuTGtWeWNtOXlMbkJ5YjNSdmRIbHdaUzV1WVcxbFBWd2lRM1Z6ZEc5dFJYSnliM0pjSWp0bmIyOW5MbVJ2YlQxN2ZUdG5iMjluTG1SdmJTNU9iMlJsVkhsd1pUMTdSVXhGVFVWT1ZEb3hMRUZVVkZKSlFsVlVSVG95TEZSRldGUTZNeXhEUkVGVVFWOVRSVU5VU1U5T09qUXNSVTVVU1ZSWlgxSkZSa1ZTUlU1RFJUbzFMRVZPVkVsVVdUbzJMRkJTVDBORlUxTkpUa2RmU1U1VFZGSlZRMVJKVDA0Nk55eERUMDFOUlU1VU9qZ3NSRTlEVlUxRlRsUTZPU3hFVDBOVlRVVk9WRjlVV1ZCRk9qRXdMRVJQUTFWTlJVNVVYMFpTUVVkTlJVNVVPakV4TEU1UFZFRlVTVTlPT2pFeWZUdG5iMjluTG1GemMyVnlkSE05ZTMwN1oyOXZaeTVoYzNObGNuUnpMa1ZPUVVKTVJWOUJVMU5GVWxSVFBXZHZiMmN1UkVWQ1ZVYzdaMjl2Wnk1aGMzTmxjblJ6TGtGemMyVnlkR2x2YmtWeWNtOXlQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVrWldKMVp5NUZjbkp2Y2k1allXeHNLSFJvYVhNc1oyOXZaeTVoYzNObGNuUnpMbk4xWW5OZktHRXNZaWtwTzNSb2FYTXViV1Z6YzJGblpWQmhkSFJsY200OVlYMDdaMjl2Wnk1cGJtaGxjbWwwY3lobmIyOW5MbUZ6YzJWeWRITXVRWE56WlhKMGFXOXVSWEp5YjNJc1oyOXZaeTVrWldKMVp5NUZjbkp2Y2lrN1oyOXZaeTVoYzNObGNuUnpMa0Z6YzJWeWRHbHZia1Z5Y205eUxuQnliM1J2ZEhsd1pTNXVZVzFsUFZ3aVFYTnpaWEowYVc5dVJYSnliM0pjSWp0bmIyOW5MbUZ6YzJWeWRITXVSRVZHUVZWTVZGOUZVbEpQVWw5SVFVNUVURVZTUFdaMWJtTjBhVzl1S0dFcGUzUm9jbTkzSUdFN2ZUdG5iMjluTG1GemMyVnlkSE11WlhKeWIzSklZVzVrYkdWeVh6MW5iMjluTG1GemMyVnlkSE11UkVWR1FWVk1WRjlGVWxKUFVsOUlRVTVFVEVWU08xeHVaMjl2Wnk1aGMzTmxjblJ6TG5OMVluTmZQV1oxYm1OMGFXOXVLR0VzWWlsN1lUMWhMbk53YkdsMEtGd2lKWE5jSWlrN1ptOXlLSFpoY2lCalBWd2lYQ0lzWkQxaExteGxibWQwYUMweExHVTlNRHRsUEdRN1pTc3JLV01yUFdGYlpWMHJLR1U4WWk1c1pXNW5kR2cvWWx0bFhUcGNJaVZ6WENJcE8zSmxkSFZ5YmlCaksyRmJaRjE5TzJkdmIyY3VZWE56WlhKMGN5NWtiMEZ6YzJWeWRFWmhhV3gxY21WZlBXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUzWmhjaUJsUFZ3aVFYTnpaWEowYVc5dUlHWmhhV3hsWkZ3aU8ybG1LR01wZTJVclBWd2lPaUJjSWl0ak8zWmhjaUJtUFdSOVpXeHpaU0JoSmlZb1pTczlYQ0k2SUZ3aUsyRXNaajFpS1R0aFBXNWxkeUJuYjI5bkxtRnpjMlZ5ZEhNdVFYTnpaWEowYVc5dVJYSnliM0lvWENKY0lpdGxMR1o4ZkZ0ZEtUdG5iMjluTG1GemMyVnlkSE11WlhKeWIzSklZVzVrYkdWeVh5aGhLWDA3WjI5dlp5NWhjM05sY25SekxuTmxkRVZ5Y205eVNHRnVaR3hsY2oxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVpYSnliM0pJWVc1a2JHVnlYejFoS1gwN1hHNW5iMjluTG1GemMyVnlkSE11WVhOelpYSjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KaUZoSmlabmIyOW5MbUZ6YzJWeWRITXVaRzlCYzNObGNuUkdZV2xzZFhKbFh5aGNJbHdpTEc1MWJHd3NZaXhCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zTWlrcE8zSmxkSFZ5YmlCaGZUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBSWGhwYzNSelBXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVSVTVCUWt4RlgwRlRVMFZTVkZNbUptNTFiR3c5UFdFbUptZHZiMmN1WVhOelpYSjBjeTVrYjBGemMyVnlkRVpoYVd4MWNtVmZLRndpUlhod1pXTjBaV1FnZEc4Z1pYaHBjM1E2SUNWekxsd2lMRnRoWFN4aUxFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3lLU2s3Y21WMGRYSnVJR0Y5TzF4dVoyOXZaeTVoYzNObGNuUnpMbVpoYVd3OVpuVnVZM1JwYjI0b1lTeGlLWHRuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1tSm1kdmIyY3VZWE56WlhKMGN5NWxjbkp2Y2toaGJtUnNaWEpmS0c1bGR5Qm5iMjluTG1GemMyVnlkSE11UVhOelpYSjBhVzl1UlhKeWIzSW9YQ0pHWVdsc2RYSmxYQ0lyS0dFL1hDSTZJRndpSzJFNlhDSmNJaWtzUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk5zYVdObExtTmhiR3dvWVhKbmRXMWxiblJ6TERFcEtTbDlPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJPZFcxaVpYSTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyZHZiMmN1WVhOelpYSjBjeTVGVGtGQ1RFVmZRVk5UUlZKVVV5WW1JV2R2YjJjdWFYTk9kVzFpWlhJb1lTa21KbWR2YjJjdVlYTnpaWEowY3k1a2IwRnpjMlZ5ZEVaaGFXeDFjbVZmS0Z3aVJYaHdaV04wWldRZ2JuVnRZbVZ5SUdKMWRDQm5iM1FnSlhNNklDVnpMbHdpTEZ0bmIyOW5MblI1Y0dWUFppaGhLU3hoWFN4aUxFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3lLU2s3Y21WMGRYSnVJR0Y5TzF4dVoyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRGTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXNZeWw3WjI5dlp5NWhjM05sY25SekxrVk9RVUpNUlY5QlUxTkZVbFJUSmlZaFoyOXZaeTVwYzFOMGNtbHVaeWhoS1NZbVoyOXZaeTVoYzNObGNuUnpMbVJ2UVhOelpYSjBSbUZwYkhWeVpWOG9YQ0pGZUhCbFkzUmxaQ0J6ZEhKcGJtY2dZblYwSUdkdmRDQWxjem9nSlhNdVhDSXNXMmR2YjJjdWRIbHdaVTltS0dFcExHRmRMR0lzUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk5zYVdObExtTmhiR3dvWVhKbmRXMWxiblJ6TERJcEtUdHlaWFIxY200Z1lYMDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRVoxYm1OMGFXOXVQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KaUZuYjI5bkxtbHpSblZ1WTNScGIyNG9ZU2ttSm1kdmIyY3VZWE56WlhKMGN5NWtiMEZ6YzJWeWRFWmhhV3gxY21WZktGd2lSWGh3WldOMFpXUWdablZ1WTNScGIyNGdZblYwSUdkdmRDQWxjem9nSlhNdVhDSXNXMmR2YjJjdWRIbHdaVTltS0dFcExHRmRMR0lzUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk5zYVdObExtTmhiR3dvWVhKbmRXMWxiblJ6TERJcEtUdHlaWFIxY200Z1lYMDdYRzVuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowVDJKcVpXTjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KaUZuYjI5bkxtbHpUMkpxWldOMEtHRXBKaVpuYjI5bkxtRnpjMlZ5ZEhNdVpHOUJjM05sY25SR1lXbHNkWEpsWHloY0lrVjRjR1ZqZEdWa0lHOWlhbVZqZENCaWRYUWdaMjkwSUNWek9pQWxjeTVjSWl4YloyOXZaeTUwZVhCbFQyWW9ZU2tzWVYwc1lpeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXNNaWtwTzNKbGRIVnliaUJoZlR0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFFYSnlZWGs5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMmR2YjJjdVlYTnpaWEowY3k1RlRrRkNURVZmUVZOVFJWSlVVeVltSVdkdmIyY3VhWE5CY25KaGVTaGhLU1ltWjI5dlp5NWhjM05sY25SekxtUnZRWE56WlhKMFJtRnBiSFZ5WlY4b1hDSkZlSEJsWTNSbFpDQmhjbkpoZVNCaWRYUWdaMjkwSUNWek9pQWxjeTVjSWl4YloyOXZaeTUwZVhCbFQyWW9ZU2tzWVYwc1lpeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXNNaWtwTzNKbGRIVnliaUJoZlR0Y2JtZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUkNiMjlzWldGdVBXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVSVTVCUWt4RlgwRlRVMFZTVkZNbUppRm5iMjluTG1selFtOXZiR1ZoYmloaEtTWW1aMjl2Wnk1aGMzTmxjblJ6TG1SdlFYTnpaWEowUm1GcGJIVnlaVjhvWENKRmVIQmxZM1JsWkNCaWIyOXNaV0Z1SUdKMWRDQm5iM1FnSlhNNklDVnpMbHdpTEZ0bmIyOW5MblI1Y0dWUFppaGhLU3hoWFN4aUxFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3lLU2s3Y21WMGRYSnVJR0Y5TzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SRmJHVnRaVzUwUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHNoWjI5dlp5NWhjM05sY25SekxrVk9RVUpNUlY5QlUxTkZVbFJUZkh4bmIyOW5MbWx6VDJKcVpXTjBLR0VwSmlaaExtNXZaR1ZVZVhCbFBUMW5iMjluTG1SdmJTNU9iMlJsVkhsd1pTNUZURVZOUlU1VWZIeG5iMjluTG1GemMyVnlkSE11Wkc5QmMzTmxjblJHWVdsc2RYSmxYeWhjSWtWNGNHVmpkR1ZrSUVWc1pXMWxiblFnWW5WMElHZHZkQ0FsY3pvZ0pYTXVYQ0lzVzJkdmIyY3VkSGx3WlU5bUtHRXBMR0ZkTEdJc1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxESXBLVHR5WlhSMWNtNGdZWDA3WEc1bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFNXNXpkR0Z1WTJWdlpqMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYc2haMjl2Wnk1aGMzTmxjblJ6TGtWT1FVSk1SVjlCVTFORlVsUlRmSHhoSUdsdWMzUmhibU5sYjJZZ1lueDhaMjl2Wnk1aGMzTmxjblJ6TG1SdlFYTnpaWEowUm1GcGJIVnlaVjhvWENKRmVIQmxZM1JsWkNCcGJuTjBZVzVqWlc5bUlDVnpJR0oxZENCbmIzUWdKWE11WENJc1cyZHZiMmN1WVhOelpYSjBjeTVuWlhSVWVYQmxYeWhpS1N4bmIyOW5MbUZ6YzJWeWRITXVaMlYwVkhsd1pWOG9ZU2xkTEdNc1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxETXBLVHR5WlhSMWNtNGdZWDA3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZEVacGJtbDBaVDFtZFc1amRHbHZiaWhoTEdJc1l5bDdJV2R2YjJjdVlYTnpaWEowY3k1RlRrRkNURVZmUVZOVFJWSlVVM3g4WENKdWRXMWlaWEpjSWowOWRIbHdaVzltSUdFbUptbHpSbWx1YVhSbEtHRXBmSHhuYjI5bkxtRnpjMlZ5ZEhNdVpHOUJjM05sY25SR1lXbHNkWEpsWHloY0lrVjRjR1ZqZEdWa0lDVnpJSFJ2SUdKbElHRWdabWx1YVhSbElHNTFiV0psY2lCaWRYUWdhWFFnYVhNZ2JtOTBMbHdpTEZ0aFhTeGlMRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd5S1NrN2NtVjBkWEp1SUdGOU8xeHVaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRTlpYW1WamRGQnliM1J2ZEhsd1pVbHpTVzUwWVdOMFBXWjFibU4wYVc5dUtDbDdabTl5S0haaGNpQmhJR2x1SUU5aWFtVmpkQzV3Y205MGIzUjVjR1VwWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWVN0Y0lpQnphRzkxYkdRZ2JtOTBJR0psSUdWdWRXMWxjbUZpYkdVZ2FXNGdUMkpxWldOMExuQnliM1J2ZEhsd1pTNWNJaWw5TzJkdmIyY3VZWE56WlhKMGN5NW5aWFJVZVhCbFh6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZU0JwYm5OMFlXNWpaVzltSUVaMWJtTjBhVzl1UDJFdVpHbHpjR3hoZVU1aGJXVjhmR0V1Ym1GdFpYeDhYQ0oxYm10dWIzZHVJSFI1Y0dVZ2JtRnRaVndpT21FZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRL1lTNWpiMjV6ZEhKMVkzUnZjaTVrYVhOd2JHRjVUbUZ0Wlh4OFlTNWpiMjV6ZEhKMVkzUnZjaTV1WVcxbGZIeFBZbXBsWTNRdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvWVNrNmJuVnNiRDA5UFdFL1hDSnVkV3hzWENJNmRIbHdaVzltSUdGOU8zWmhjaUJxYzNCaVBYdENhVzVoY25sRGIyNXpkR0Z1ZEhNNmUzMHNRMjl1YzNSQ2FXNWhjbmxOWlhOellXZGxPbVoxYm1OMGFXOXVLQ2w3ZlN4Q2FXNWhjbmxOWlhOellXZGxPbVoxYm1OMGFXOXVLQ2w3ZlgwN2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVSbWxsYkdSVWVYQmxQWHRKVGxaQlRFbEVPaTB4TEVSUFZVSk1SVG94TEVaTVQwRlVPaklzU1U1VU5qUTZNeXhWU1U1VU5qUTZOQ3hKVGxRek1qbzFMRVpKV0VWRU5qUTZOaXhHU1ZoRlJETXlPamNzUWs5UFREbzRMRk5VVWtsT1J6bzVMRWRTVDFWUU9qRXdMRTFGVTFOQlIwVTZNVEVzUWxsVVJWTTZNVElzVlVsT1ZETXlPakV6TEVWT1ZVMDZNVFFzVTBaSldFVkVNekk2TVRVc1UwWkpXRVZFTmpRNk1UWXNVMGxPVkRNeU9qRTNMRk5KVGxRMk5Eb3hPQ3hHU0VGVFNEWTBPak13TEZaSVFWTklOalE2TXpGOU8ycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxQWHRKVGxaQlRFbEVPaTB4TEZaQlVrbE9WRG93TEVaSldFVkVOalE2TVN4RVJVeEpUVWxVUlVRNk1peFRWRUZTVkY5SFVrOVZVRG96TEVWT1JGOUhVazlWVURvMExFWkpXRVZFTXpJNk5YMDdYRzVxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1R2FXVnNaRlI1Y0dWVWIxZHBjbVZVZVhCbFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa1pwWld4a1ZIbHdaU3hqUFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbE8zTjNhWFJqYUNoaEtYdGpZWE5sSUdJdVNVNVVNekk2WTJGelpTQmlMa2xPVkRZME9tTmhjMlVnWWk1VlNVNVVNekk2WTJGelpTQmlMbFZKVGxRMk5EcGpZWE5sSUdJdVUwbE9WRE15T21OaGMyVWdZaTVUU1U1VU5qUTZZMkZ6WlNCaUxrSlBUMHc2WTJGelpTQmlMa1ZPVlUwNlkyRnpaU0JpTGxaSVFWTklOalE2Y21WMGRYSnVJR011VmtGU1NVNVVPMk5oYzJVZ1lpNUVUMVZDVEVVNlkyRnpaU0JpTGtaSldFVkVOalE2WTJGelpTQmlMbE5HU1ZoRlJEWTBPbU5oYzJVZ1lpNUdTRUZUU0RZME9uSmxkSFZ5YmlCakxrWkpXRVZFTmpRN1kyRnpaU0JpTGxOVVVrbE9SenBqWVhObElHSXVUVVZUVTBGSFJUcGpZWE5sSUdJdVFsbFVSVk02Y21WMGRYSnVJR011UkVWTVNVMUpWRVZFTzJOaGMyVWdZaTVHVEU5QlZEcGpZWE5sSUdJdVJrbFlSVVF6TWpwallYTmxJR0l1VTBaSldFVkVNekk2Y21WMGRYSnVJR011UmtsWVJVUXpNanRrWldaaGRXeDBPbkpsZEhWeWJpQmpMa2xPVmtGTVNVUjlmVHRjYm1wemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrbE9Wa0ZNU1VSZlJrbEZURVJmVGxWTlFrVlNQUzB4TzJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrWk1UMEZVTXpKZlJWQlRQVEV1TkRBeE1qazRORFkwTXpJME9ERTNSUzAwTlR0cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NUdURTlCVkRNeVgwMUpUajB4TGpFM05UUTVORE0xTURneU1qSTROelZGTFRNNE8ycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa1pNVDBGVU16SmZUVUZZUFRNdU5EQXlPREl6TkRZMk16ZzFNamc0TmtVek9EdHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZEWTBYMFZRVXowMExqbEZMVE15TkR0cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NUdURTlCVkRZMFgwMUpUajB5TGpJeU5UQTNNemcxT0RVd056SXdNVFJGTFRNd09EdHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZEWTBYMDFCV0QweExqYzVOelk1TXpFek5EZzJNak14TlRkRk16QTRPMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh5TUQweE1EUTROVGMyTzJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4eU16MDRNemc0TmpBNE8ycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNVDB5TVRRM05EZ3pOalE0TzF4dWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXlQVFF5T1RRNU5qY3lPVFk3YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpVeVBUUTFNRE0xT1RrMk1qY3pOekEwT1RZN2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6WXpQVEI0TjJabVptWm1abVptWm1abVptWm1aanRxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpROU1TNDRORFEyTnpRME1EY3pOekE1TlRVeVJURTVPMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxwRlVrOWZTRUZUU0QxY0lseGNlREF3WEZ4NE1EQmNYSGd3TUZ4Y2VEQXdYRng0TURCY1hIZ3dNRnhjZURBd1hGeDRNREJjSWp0bmIyOW5MbUZ5Y21GNVBYdDlPMmR2YjJjdVRrRlVTVlpGWDBGU1VrRlpYMUJTVDFSUFZGbFFSVk05WjI5dlp5NVVVbFZUVkVWRVgxTkpWRVU3WjI5dlp5NWhjbkpoZVM1QlUxTlZUVVZmVGtGVVNWWkZYMFpWVGtOVVNVOU9VejB5TURFeVBHZHZiMmN1UmtWQlZGVlNSVk5GVkY5WlJVRlNPMmR2YjJjdVlYSnlZWGt1Y0dWbGF6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZVnRoTG14bGJtZDBhQzB4WFgwN1oyOXZaeTVoY25KaGVTNXNZWE4wUFdkdmIyY3VZWEp5WVhrdWNHVmxhenRjYm1kdmIyY3VZWEp5WVhrdWFXNWtaWGhQWmoxbmIyOW5MazVCVkVsV1JWOUJVbEpCV1Y5UVVrOVVUMVJaVUVWVEppWW9aMjl2Wnk1aGNuSmhlUzVCVTFOVlRVVmZUa0ZVU1ZaRlgwWlZUa05VU1U5T1UzeDhRWEp5WVhrdWNISnZkRzkwZVhCbExtbHVaR1Y0VDJZcFAyWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFdFdWJHVnVaM1JvS1R0eVpYUjFjbTRnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbWx1WkdWNFQyWXVZMkZzYkNoaExHSXNZeWw5T21aMWJtTjBhVzl1S0dFc1lpeGpLWHRqUFc1MWJHdzlQV00vTURvd1BtTS9UV0YwYUM1dFlYZ29NQ3hoTG14bGJtZDBhQ3RqS1Rwak8ybG1LR2R2YjJjdWFYTlRkSEpwYm1jb1lTa3BjbVYwZFhKdUlHZHZiMmN1YVhOVGRISnBibWNvWWlrbUpqRTlQV0l1YkdWdVozUm9QMkV1YVc1a1pYaFBaaWhpTEdNcE9pMHhPMlp2Y2lnN1l6eGhMbXhsYm1kMGFEdGpLeXNwYVdZb1l5QnBiaUJoSmlaaFcyTmRQVDA5WWlseVpYUjFjbTRnWXp0eVpYUjFjbTR0TVgwN1hHNW5iMjluTG1GeWNtRjVMbXhoYzNSSmJtUmxlRTltUFdkdmIyY3VUa0ZVU1ZaRlgwRlNVa0ZaWDFCU1QxUlBWRmxRUlZNbUppaG5iMjluTG1GeWNtRjVMa0ZUVTFWTlJWOU9RVlJKVmtWZlJsVk9RMVJKVDA1VGZIeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWJHRnpkRWx1WkdWNFQyWXBQMloxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLRzUxYkd3aFBXRXViR1Z1WjNSb0tUdHlaWFIxY200Z1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG14aGMzUkpibVJsZUU5bUxtTmhiR3dvWVN4aUxHNTFiR3c5UFdNL1lTNXNaVzVuZEdndE1UcGpLWDA2Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMk05Ym5Wc2JEMDlZejloTG14bGJtZDBhQzB4T21NN01ENWpKaVlvWXoxTllYUm9MbTFoZUNnd0xHRXViR1Z1WjNSb0syTXBLVHRwWmlobmIyOW5MbWx6VTNSeWFXNW5LR0VwS1hKbGRIVnliaUJuYjI5bkxtbHpVM1J5YVc1bktHSXBKaVl4UFQxaUxteGxibWQwYUQ5aExteGhjM1JKYm1SbGVFOW1LR0lzWXlrNkxURTdabTl5S0Rzd1BEMWpPMk10TFNscFppaGpJR2x1SUdFbUptRmJZMTA5UFQxaUtYSmxkSFZ5YmlCak8zSmxkSFZ5YmkweGZUdGNibWR2YjJjdVlYSnlZWGt1Wm05eVJXRmphRDFuYjI5bkxrNUJWRWxXUlY5QlVsSkJXVjlRVWs5VVQxUlpVRVZUSmlZb1oyOXZaeTVoY25KaGVTNUJVMU5WVFVWZlRrRlVTVlpGWDBaVlRrTlVTVTlPVTN4OFFYSnlZWGt1Y0hKdmRHOTBlWEJsTG1admNrVmhZMmdwUDJaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQV0V1YkdWdVozUm9LVHRCY25KaGVTNXdjbTkwYjNSNWNHVXVabTl5UldGamFDNWpZV3hzS0dFc1lpeGpLWDA2Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMlp2Y2loMllYSWdaRDFoTG14bGJtZDBhQ3hsUFdkdmIyY3VhWE5UZEhKcGJtY29ZU2svWVM1emNHeHBkQ2hjSWx3aUtUcGhMR1k5TUR0bVBHUTdaaXNyS1dZZ2FXNGdaU1ltWWk1allXeHNLR01zWlZ0bVhTeG1MR0VwZlR0bmIyOW5MbUZ5Y21GNUxtWnZja1ZoWTJoU2FXZG9kRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdkbUZ5SUdROVlTNXNaVzVuZEdnc1pUMW5iMjluTG1selUzUnlhVzVuS0dFcFAyRXVjM0JzYVhRb1hDSmNJaWs2WVR0bWIzSW9MUzFrT3pBOFBXUTdMUzFrS1dRZ2FXNGdaU1ltWWk1allXeHNLR01zWlZ0a1hTeGtMR0VwZlR0Y2JtZHZiMmN1WVhKeVlYa3VabWxzZEdWeVBXZHZiMmN1VGtGVVNWWkZYMEZTVWtGWlgxQlNUMVJQVkZsUVJWTW1KaWhuYjI5bkxtRnljbUY1TGtGVFUxVk5SVjlPUVZSSlZrVmZSbFZPUTFSSlQwNVRmSHhCY25KaGVTNXdjbTkwYjNSNWNHVXVabWxzZEdWeUtUOW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaExteGxibWQwYUNrN2NtVjBkWEp1SUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzVtYVd4MFpYSXVZMkZzYkNoaExHSXNZeWw5T21aMWJtTjBhVzl1S0dFc1lpeGpLWHRtYjNJb2RtRnlJR1E5WVM1c1pXNW5kR2dzWlQxYlhTeG1QVEFzWnoxbmIyOW5MbWx6VTNSeWFXNW5LR0VwUDJFdWMzQnNhWFFvWENKY0lpazZZU3hvUFRBN2FEeGtPMmdyS3lscFppaG9JR2x1SUdjcGUzWmhjaUJyUFdkYmFGMDdZaTVqWVd4c0tHTXNheXhvTEdFcEppWW9aVnRtS3l0ZFBXc3BmWEpsZEhWeWJpQmxmVHRjYm1kdmIyY3VZWEp5WVhrdWJXRndQV2R2YjJjdVRrRlVTVlpGWDBGU1VrRlpYMUJTVDFSUFZGbFFSVk1tSmlobmIyOW5MbUZ5Y21GNUxrRlRVMVZOUlY5T1FWUkpWa1ZmUmxWT1ExUkpUMDVUZkh4QmNuSmhlUzV3Y205MGIzUjVjR1V1YldGd0tUOW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaExteGxibWQwYUNrN2NtVjBkWEp1SUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV0WVhBdVkyRnNiQ2hoTEdJc1l5bDlPbVoxYm1OMGFXOXVLR0VzWWl4aktYdG1iM0lvZG1GeUlHUTlZUzVzWlc1bmRHZ3NaVDFCY25KaGVTaGtLU3htUFdkdmIyY3VhWE5UZEhKcGJtY29ZU2svWVM1emNHeHBkQ2hjSWx3aUtUcGhMR2M5TUR0blBHUTdaeXNyS1djZ2FXNGdaaVltS0dWYloxMDlZaTVqWVd4c0tHTXNabHRuWFN4bkxHRXBLVHR5WlhSMWNtNGdaWDA3WEc1bmIyOW5MbUZ5Y21GNUxuSmxaSFZqWlQxbmIyOW5MazVCVkVsV1JWOUJVbEpCV1Y5UVVrOVVUMVJaVUVWVEppWW9aMjl2Wnk1aGNuSmhlUzVCVTFOVlRVVmZUa0ZVU1ZaRlgwWlZUa05VU1U5T1UzeDhRWEp5WVhrdWNISnZkRzkwZVhCbExuSmxaSFZqWlNrL1puVnVZM1JwYjI0b1lTeGlMR01zWkNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaExteGxibWQwYUNrN1pDWW1LR0k5WjI5dlp5NWlhVzVrS0dJc1pDa3BPM0psZEhWeWJpQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWNtVmtkV05sTG1OaGJHd29ZU3hpTEdNcGZUcG1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdDJZWElnWlQxak8yZHZiMmN1WVhKeVlYa3VabTl5UldGamFDaGhMR1oxYm1OMGFXOXVLR01zWnlsN1pUMWlMbU5oYkd3b1pDeGxMR01zWnl4aEtYMHBPM0psZEhWeWJpQmxmVHRjYm1kdmIyY3VZWEp5WVhrdWNtVmtkV05sVW1sbmFIUTlaMjl2Wnk1T1FWUkpWa1ZmUVZKU1FWbGZVRkpQVkU5VVdWQkZVeVltS0dkdmIyY3VZWEp5WVhrdVFWTlRWVTFGWDA1QlZFbFdSVjlHVlU1RFZFbFBUbE44ZkVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV5WldSMVkyVlNhV2RvZENrL1puVnVZM1JwYjI0b1lTeGlMR01zWkNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaExteGxibWQwYUNrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaUtUdGtKaVlvWWoxbmIyOW5MbUpwYm1Rb1lpeGtLU2s3Y21WMGRYSnVJRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXlaV1IxWTJWU2FXZG9kQzVqWVd4c0tHRXNZaXhqS1gwNlpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN2RtRnlJR1U5WXp0bmIyOW5MbUZ5Y21GNUxtWnZja1ZoWTJoU2FXZG9kQ2hoTEdaMWJtTjBhVzl1S0dNc1p5bDdaVDFpTG1OaGJHd29aQ3hsTEdNc1p5eGhLWDBwTzNKbGRIVnliaUJsZlR0Y2JtZHZiMmN1WVhKeVlYa3VjMjl0WlQxbmIyOW5MazVCVkVsV1JWOUJVbEpCV1Y5UVVrOVVUMVJaVUVWVEppWW9aMjl2Wnk1aGNuSmhlUzVCVTFOVlRVVmZUa0ZVU1ZaRlgwWlZUa05VU1U5T1UzeDhRWEp5WVhrdWNISnZkRzkwZVhCbExuTnZiV1VwUDJaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQV0V1YkdWdVozUm9LVHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExuTnZiV1V1WTJGc2JDaGhMR0lzWXlsOU9tWjFibU4wYVc5dUtHRXNZaXhqS1h0bWIzSW9kbUZ5SUdROVlTNXNaVzVuZEdnc1pUMW5iMjluTG1selUzUnlhVzVuS0dFcFAyRXVjM0JzYVhRb1hDSmNJaWs2WVN4bVBUQTdaanhrTzJZckt5bHBaaWhtSUdsdUlHVW1KbUl1WTJGc2JDaGpMR1ZiWmwwc1ppeGhLU2x5WlhSMWNtNGhNRHR5WlhSMWNtNGhNWDA3WEc1bmIyOW5MbUZ5Y21GNUxtVjJaWEo1UFdkdmIyY3VUa0ZVU1ZaRlgwRlNVa0ZaWDFCU1QxUlBWRmxRUlZNbUppaG5iMjluTG1GeWNtRjVMa0ZUVTFWTlJWOU9RVlJKVmtWZlJsVk9RMVJKVDA1VGZIeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdVpYWmxjbmtwUDJaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQV0V1YkdWdVozUm9LVHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExtVjJaWEo1TG1OaGJHd29ZU3hpTEdNcGZUcG1kVzVqZEdsdmJpaGhMR0lzWXlsN1ptOXlLSFpoY2lCa1BXRXViR1Z1WjNSb0xHVTlaMjl2Wnk1cGMxTjBjbWx1WnloaEtUOWhMbk53YkdsMEtGd2lYQ0lwT21Fc1pqMHdPMlk4WkR0bUt5c3BhV1lvWmlCcGJpQmxKaVloWWk1allXeHNLR01zWlZ0bVhTeG1MR0VwS1hKbGRIVnliaUV4TzNKbGRIVnliaUV3ZlR0bmIyOW5MbUZ5Y21GNUxtTnZkVzUwUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHQyWVhJZ1pEMHdPMmR2YjJjdVlYSnlZWGt1Wm05eVJXRmphQ2hoTEdaMWJtTjBhVzl1S0dFc1ppeG5LWHRpTG1OaGJHd29ZeXhoTEdZc1p5a21KaXNyWkgwc1l5azdjbVYwZFhKdUlHUjlPMXh1WjI5dlp5NWhjbkpoZVM1bWFXNWtQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGlQV2R2YjJjdVlYSnlZWGt1Wm1sdVpFbHVaR1Y0S0dFc1lpeGpLVHR5WlhSMWNtNGdNRDVpUDI1MWJHdzZaMjl2Wnk1cGMxTjBjbWx1WnloaEtUOWhMbU5vWVhKQmRDaGlLVHBoVzJKZGZUdG5iMjluTG1GeWNtRjVMbVpwYm1SSmJtUmxlRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdabTl5S0haaGNpQmtQV0V1YkdWdVozUm9MR1U5WjI5dlp5NXBjMU4wY21sdVp5aGhLVDloTG5Od2JHbDBLRndpWENJcE9tRXNaajB3TzJZOFpEdG1LeXNwYVdZb1ppQnBiaUJsSmlaaUxtTmhiR3dvWXl4bFcyWmRMR1lzWVNrcGNtVjBkWEp1SUdZN2NtVjBkWEp1TFRGOU8yZHZiMmN1WVhKeVlYa3VabWx1WkZKcFoyaDBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGlQV2R2YjJjdVlYSnlZWGt1Wm1sdVpFbHVaR1Y0VW1sbmFIUW9ZU3hpTEdNcE8zSmxkSFZ5YmlBd1BtSS9iblZzYkRwbmIyOW5MbWx6VTNSeWFXNW5LR0VwUDJFdVkyaGhja0YwS0dJcE9tRmJZbDE5TzF4dVoyOXZaeTVoY25KaGVTNW1hVzVrU1c1a1pYaFNhV2RvZEQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlZUzVzWlc1bmRHZ3NaVDFuYjI5bkxtbHpVM1J5YVc1bktHRXBQMkV1YzNCc2FYUW9YQ0pjSWlrNllUdG1iM0lvTFMxa096QThQV1E3WkMwdEtXbG1LR1FnYVc0Z1pTWW1ZaTVqWVd4c0tHTXNaVnRrWFN4a0xHRXBLWEpsZEhWeWJpQmtPM0psZEhWeWJpMHhmVHRuYjI5bkxtRnljbUY1TG1OdmJuUmhhVzV6UFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlEQThQV2R2YjJjdVlYSnlZWGt1YVc1a1pYaFBaaWhoTEdJcGZUdG5iMjluTG1GeWNtRjVMbWx6Ulcxd2RIazlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJREE5UFdFdWJHVnVaM1JvZlR0bmIyOW5MbUZ5Y21GNUxtTnNaV0Z5UFdaMWJtTjBhVzl1S0dFcGUybG1LQ0ZuYjI5bkxtbHpRWEp5WVhrb1lTa3BabTl5S0haaGNpQmlQV0V1YkdWdVozUm9MVEU3TUR3OVlqdGlMUzBwWkdWc1pYUmxJR0ZiWWwwN1lTNXNaVzVuZEdnOU1IMDdaMjl2Wnk1aGNuSmhlUzVwYm5ObGNuUTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbUZ5Y21GNUxtTnZiblJoYVc1ektHRXNZaWw4ZkdFdWNIVnphQ2hpS1gwN1hHNW5iMjluTG1GeWNtRjVMbWx1YzJWeWRFRjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GeWNtRjVMbk53YkdsalpTaGhMR01zTUN4aUtYMDdaMjl2Wnk1aGNuSmhlUzVwYm5ObGNuUkJjbkpoZVVGMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbkJoY25ScFlXd29aMjl2Wnk1aGNuSmhlUzV6Y0d4cFkyVXNZU3hqTERBcExtRndjR3g1S0c1MWJHd3NZaWw5TzJkdmIyY3VZWEp5WVhrdWFXNXpaWEowUW1WbWIzSmxQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDJZWElnWkRzeVBUMWhjbWQxYldWdWRITXViR1Z1WjNSb2ZId3dQaWhrUFdkdmIyY3VZWEp5WVhrdWFXNWtaWGhQWmloaExHTXBLVDloTG5CMWMyZ29ZaWs2WjI5dlp5NWhjbkpoZVM1cGJuTmxjblJCZENoaExHSXNaQ2w5TzJkdmIyY3VZWEp5WVhrdWNtVnRiM1psUFdaMWJtTjBhVzl1S0dFc1lpbDdZajFuYjI5bkxtRnljbUY1TG1sdVpHVjRUMllvWVN4aUtUdDJZWElnWXpzb1l6MHdQRDFpS1NZbVoyOXZaeTVoY25KaGVTNXlaVzF2ZG1WQmRDaGhMR0lwTzNKbGRIVnliaUJqZlR0Y2JtZHZiMmN1WVhKeVlYa3VjbVZ0YjNabFRHRnpkRDFtZFc1amRHbHZiaWhoTEdJcGUySTlaMjl2Wnk1aGNuSmhlUzVzWVhOMFNXNWtaWGhQWmloaExHSXBPM0psZEhWeWJpQXdQRDFpUHlobmIyOW5MbUZ5Y21GNUxuSmxiVzkyWlVGMEtHRXNZaWtzSVRBcE9pRXhmVHRuYjI5bkxtRnljbUY1TG5KbGJXOTJaVUYwUFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdjbVYwZFhKdUlERTlQVUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpjR3hwWTJVdVkyRnNiQ2hoTEdJc01Ta3ViR1Z1WjNSb2ZUdG5iMjluTG1GeWNtRjVMbkpsYlc5MlpVbG1QV1oxYm1OMGFXOXVLR0VzWWl4aktYdGlQV2R2YjJjdVlYSnlZWGt1Wm1sdVpFbHVaR1Y0S0dFc1lpeGpLVHR5WlhSMWNtNGdNRHc5WWo4b1oyOXZaeTVoY25KaGVTNXlaVzF2ZG1WQmRDaGhMR0lwTENFd0tUb2hNWDA3WjI5dlp5NWhjbkpoZVM1eVpXMXZkbVZCYkd4SlpqMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5TUR0bmIyOW5MbUZ5Y21GNUxtWnZja1ZoWTJoU2FXZG9kQ2hoTEdaMWJtTjBhVzl1S0dVc1ppbDdZaTVqWVd4c0tHTXNaU3htTEdFcEppWm5iMjluTG1GeWNtRjVMbkpsYlc5MlpVRjBLR0VzWmlrbUptUXJLMzBwTzNKbGRIVnliaUJrZlR0Y2JtZHZiMmN1WVhKeVlYa3VZMjl1WTJGMFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdVkyOXVZMkYwTG1Gd2NHeDVLRnRkTEdGeVozVnRaVzUwY3lsOU8yZHZiMmN1WVhKeVlYa3VhbTlwYmoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG1OdmJtTmhkQzVoY0hCc2VTaGJYU3hoY21kMWJXVnVkSE1wZlR0bmIyOW5MbUZ5Y21GNUxuUnZRWEp5WVhrOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVlTNXNaVzVuZEdnN2FXWW9NRHhpS1h0bWIzSW9kbUZ5SUdNOVFYSnlZWGtvWWlrc1pEMHdPMlE4WWp0a0t5c3BZMXRrWFQxaFcyUmRPM0psZEhWeWJpQmpmWEpsZEhWeWJsdGRmVHRuYjI5bkxtRnljbUY1TG1Oc2IyNWxQV2R2YjJjdVlYSnlZWGt1ZEc5QmNuSmhlVHRuYjI5bkxtRnljbUY1TG1WNGRHVnVaRDFtZFc1amRHbHZiaWhoTEdJcGUyWnZjaWgyWVhJZ1l6MHhPMk04WVhKbmRXMWxiblJ6TG14bGJtZDBhRHRqS3lzcGUzWmhjaUJrUFdGeVozVnRaVzUwYzF0alhUdHBaaWhuYjI5bkxtbHpRWEp5WVhsTWFXdGxLR1FwS1h0MllYSWdaVDFoTG14bGJtZDBhSHg4TUN4bVBXUXViR1Z1WjNSb2ZId3dPMkV1YkdWdVozUm9QV1VyWmp0bWIzSW9kbUZ5SUdjOU1EdG5QR1k3WnlzcktXRmJaU3RuWFQxa1cyZGRmV1ZzYzJVZ1lTNXdkWE5vS0dRcGZYMDdYRzVuYjI5bkxtRnljbUY1TG5Od2JHbGpaVDFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQV0V1YkdWdVozUm9LVHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExuTndiR2xqWlM1aGNIQnNlU2hoTEdkdmIyY3VZWEp5WVhrdWMyeHBZMlVvWVhKbmRXMWxiblJ6TERFcEtYMDdaMjl2Wnk1aGNuSmhlUzV6YkdsalpUMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaHVkV3hzSVQxaExteGxibWQwYUNrN2NtVjBkWEp1SURJK1BXRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnL1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lTeGlLVHBCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoTEdJc1l5bDlPMXh1WjI5dlp5NWhjbkpoZVM1eVpXMXZkbVZFZFhCc2FXTmhkR1Z6UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRpUFdKOGZHRTdkbUZ5SUdROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YVhOUFltcGxZM1FvWVNrL1hDSnZYQ0lyWjI5dlp5NW5aWFJWYVdRb1lTazZLSFI1Y0dWdlppQmhLUzVqYUdGeVFYUW9NQ2tyWVgwN1l6MWpmSHhrTzJROWUzMDdabTl5S0haaGNpQmxQVEFzWmowd08yWThZUzVzWlc1bmRHZzdLWHQyWVhJZ1p6MWhXMllySzEwc2FEMWpLR2NwTzA5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoa0xHZ3BmSHdvWkZ0b1hUMGhNQ3hpVzJVcksxMDlaeWw5WWk1c1pXNW5kR2c5WlgwN1oyOXZaeTVoY25KaGVTNWlhVzVoY25sVFpXRnlZMmc5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM0psZEhWeWJpQm5iMjluTG1GeWNtRjVMbUpwYm1GeWVWTmxZWEpqYUY4b1lTeGpmSHhuYjI5bkxtRnljbUY1TG1SbFptRjFiSFJEYjIxd1lYSmxMQ0V4TEdJcGZUdG5iMjluTG1GeWNtRjVMbUpwYm1GeWVWTmxiR1ZqZEQxbWRXNWpkR2x2YmloaExHSXNZeWw3Y21WMGRYSnVJR2R2YjJjdVlYSnlZWGt1WW1sdVlYSjVVMlZoY21Ob1h5aGhMR0lzSVRBc2RtOXBaQ0F3TEdNcGZUdGNibWR2YjJjdVlYSnlZWGt1WW1sdVlYSjVVMlZoY21Ob1h6MW1kVzVqZEdsdmJpaGhMR0lzWXl4a0xHVXBlMlp2Y2loMllYSWdaajB3TEdjOVlTNXNaVzVuZEdnc2FEdG1QR2M3S1h0MllYSWdhejFtSzJjK1BqRTdkbUZ5SUd3OVl6OWlMbU5oYkd3b1pTeGhXMnRkTEdzc1lTazZZaWhrTEdGYmExMHBPekE4YkQ5bVBXc3JNVG9vWnoxckxHZzlJV3dwZlhKbGRIVnliaUJvUDJZNmZtWjlPMmR2YjJjdVlYSnlZWGt1YzI5eWREMW1kVzVqZEdsdmJpaGhMR0lwZTJFdWMyOXlkQ2hpZkh4bmIyOW5MbUZ5Y21GNUxtUmxabUYxYkhSRGIyMXdZWEpsS1gwN1oyOXZaeTVoY25KaGVTNXpkR0ZpYkdWVGIzSjBQV1oxYm1OMGFXOXVLR0VzWWlsN1ptOXlLSFpoY2lCalBVRnljbUY1S0dFdWJHVnVaM1JvS1N4a1BUQTdaRHhoTG14bGJtZDBhRHRrS3lzcFkxdGtYVDE3YVc1a1pYZzZaQ3gyWVd4MVpUcGhXMlJkZlR0MllYSWdaVDFpZkh4bmIyOW5MbUZ5Y21GNUxtUmxabUYxYkhSRGIyMXdZWEpsTzJkdmIyY3VZWEp5WVhrdWMyOXlkQ2hqTEdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHVW9ZUzUyWVd4MVpTeGlMblpoYkhWbEtYeDhZUzVwYm1SbGVDMWlMbWx1WkdWNGZTazdabTl5S0dROU1EdGtQR0V1YkdWdVozUm9PMlFyS3lsaFcyUmRQV05iWkYwdWRtRnNkV1Y5TzF4dVoyOXZaeTVoY25KaGVTNXpiM0owUW5sTFpYazlablZ1WTNScGIyNG9ZU3hpTEdNcGUzWmhjaUJrUFdOOGZHZHZiMmN1WVhKeVlYa3VaR1ZtWVhWc2RFTnZiWEJoY21VN1oyOXZaeTVoY25KaGVTNXpiM0owS0dFc1puVnVZM1JwYjI0b1lTeGpLWHR5WlhSMWNtNGdaQ2hpS0dFcExHSW9ZeWtwZlNsOU8yZHZiMmN1WVhKeVlYa3VjMjl5ZEU5aWFtVmpkSE5DZVV0bGVUMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoY25KaGVTNXpiM0owUW5sTFpYa29ZU3htZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVZ0aVhYMHNZeWw5TzJkdmIyY3VZWEp5WVhrdWFYTlRiM0owWldROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJJOVlueDhaMjl2Wnk1aGNuSmhlUzVrWldaaGRXeDBRMjl0Y0dGeVpUdG1iM0lvZG1GeUlHUTlNVHRrUEdFdWJHVnVaM1JvTzJRckt5bDdkbUZ5SUdVOVlpaGhXMlF0TVYwc1lWdGtYU2s3YVdZb01EeGxmSHd3UFQxbEppWmpLWEpsZEhWeWJpRXhmWEpsZEhWeWJpRXdmVHRjYm1kdmIyY3VZWEp5WVhrdVpYRjFZV3h6UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRwWmlnaFoyOXZaeTVwYzBGeWNtRjVUR2xyWlNoaEtYeDhJV2R2YjJjdWFYTkJjbkpoZVV4cGEyVW9ZaWw4ZkdFdWJHVnVaM1JvSVQxaUxteGxibWQwYUNseVpYUjFjbTRoTVR0MllYSWdaRDFoTG14bGJtZDBhRHRqUFdOOGZHZHZiMmN1WVhKeVlYa3VaR1ZtWVhWc2RFTnZiWEJoY21WRmNYVmhiR2wwZVR0bWIzSW9kbUZ5SUdVOU1EdGxQR1E3WlNzcktXbG1LQ0ZqS0dGYlpWMHNZbHRsWFNrcGNtVjBkWEp1SVRFN2NtVjBkWEp1SVRCOU8yZHZiMmN1WVhKeVlYa3VZMjl0Y0dGeVpUTTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyTTlZM3g4WjI5dlp5NWhjbkpoZVM1a1pXWmhkV3gwUTI5dGNHRnlaVHRtYjNJb2RtRnlJR1E5VFdGMGFDNXRhVzRvWVM1c1pXNW5kR2dzWWk1c1pXNW5kR2dwTEdVOU1EdGxQR1E3WlNzcktYdDJZWElnWmoxaktHRmJaVjBzWWx0bFhTazdhV1lvTUNFOVppbHlaWFIxY200Z1puMXlaWFIxY200Z1oyOXZaeTVoY25KaGVTNWtaV1poZFd4MFEyOXRjR0Z5WlNoaExteGxibWQwYUN4aUxteGxibWQwYUNsOU8yZHZiMmN1WVhKeVlYa3VaR1ZtWVhWc2RFTnZiWEJoY21VOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdZVDVpUHpFNllUeGlQeTB4T2pCOU8xeHVaMjl2Wnk1aGNuSmhlUzVwYm5abGNuTmxSR1ZtWVhWc2RFTnZiWEJoY21VOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNHRaMjl2Wnk1aGNuSmhlUzVrWldaaGRXeDBRMjl0Y0dGeVpTaGhMR0lwZlR0bmIyOW5MbUZ5Y21GNUxtUmxabUYxYkhSRGIyMXdZWEpsUlhGMVlXeHBkSGs5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1lUMDlQV0o5TzJkdmIyY3VZWEp5WVhrdVltbHVZWEo1U1c1elpYSjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGpQV2R2YjJjdVlYSnlZWGt1WW1sdVlYSjVVMlZoY21Ob0tHRXNZaXhqS1R0eVpYUjFjbTRnTUQ1alB5aG5iMjluTG1GeWNtRjVMbWx1YzJWeWRFRjBLR0VzWWl3dEtHTXJNU2twTENFd0tUb2hNWDA3WjI5dlp5NWhjbkpoZVM1aWFXNWhjbmxTWlcxdmRtVTlablZ1WTNScGIyNG9ZU3hpTEdNcGUySTlaMjl2Wnk1aGNuSmhlUzVpYVc1aGNubFRaV0Z5WTJnb1lTeGlMR01wTzNKbGRIVnliaUF3UEQxaVAyZHZiMmN1WVhKeVlYa3VjbVZ0YjNabFFYUW9ZU3hpS1RvaE1YMDdYRzVuYjI5bkxtRnljbUY1TG1KMVkydGxkRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdabTl5S0haaGNpQmtQWHQ5TEdVOU1EdGxQR0V1YkdWdVozUm9PMlVyS3lsN2RtRnlJR1k5WVZ0bFhTeG5QV0l1WTJGc2JDaGpMR1lzWlN4aEtUdG5iMjluTG1selJHVm1LR2NwSmlZb1pGdG5YWHg4S0dSYloxMDlXMTBwS1M1d2RYTm9LR1lwZlhKbGRIVnliaUJrZlR0bmIyOW5MbUZ5Y21GNUxuUnZUMkpxWldOMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MllYSWdaRDE3ZlR0bmIyOW5MbUZ5Y21GNUxtWnZja1ZoWTJnb1lTeG1kVzVqZEdsdmJpaGxMR1lwZTJSYllpNWpZV3hzS0dNc1pTeG1MR0VwWFQxbGZTazdjbVYwZFhKdUlHUjlPMmR2YjJjdVlYSnlZWGt1Y21GdVoyVTlablZ1WTNScGIyNG9ZU3hpTEdNcGUzWmhjaUJrUFZ0ZExHVTlNQ3htUFdFN1l6MWpmSHd4TzNadmFXUWdNQ0U5UFdJbUppaGxQV0VzWmoxaUtUdHBaaWd3UG1NcUtHWXRaU2twY21WMGRYSnVXMTA3YVdZb01EeGpLV1p2Y2loaFBXVTdZVHhtTzJFclBXTXBaQzV3ZFhOb0tHRXBPMlZzYzJVZ1ptOXlLR0U5WlR0aFBtWTdZU3M5WXlsa0xuQjFjMmdvWVNrN2NtVjBkWEp1SUdSOU8xeHVaMjl2Wnk1aGNuSmhlUzV5WlhCbFlYUTlablZ1WTNScGIyNG9ZU3hpS1h0bWIzSW9kbUZ5SUdNOVcxMHNaRDB3TzJROFlqdGtLeXNwWTF0a1hUMWhPM0psZEhWeWJpQmpmVHRuYjI5bkxtRnljbUY1TG1ac1lYUjBaVzQ5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLSFpoY2lCaVBWdGRMR005TUR0alBHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnN1l5c3JLWHQyWVhJZ1pEMWhjbWQxYldWdWRITmJZMTA3YVdZb1oyOXZaeTVwYzBGeWNtRjVLR1FwS1dadmNpaDJZWElnWlQwd08yVThaQzVzWlc1bmRHZzdaU3M5T0RFNU1pbDdkbUZ5SUdZOVoyOXZaeTVoY25KaGVTNXpiR2xqWlNoa0xHVXNaU3M0TVRreUtUdG1QV2R2YjJjdVlYSnlZWGt1Wm14aGRIUmxiaTVoY0hCc2VTaHVkV3hzTEdZcE8yWnZjaWgyWVhJZ1p6MHdPMmM4Wmk1c1pXNW5kR2c3WnlzcktXSXVjSFZ6YUNobVcyZGRLWDFsYkhObElHSXVjSFZ6YUNoa0tYMXlaWFIxY200Z1luMDdYRzVuYjI5bkxtRnljbUY1TG5KdmRHRjBaVDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9iblZzYkNFOVlTNXNaVzVuZEdncE8yRXViR1Z1WjNSb0ppWW9ZaVU5WVM1c1pXNW5kR2dzTUR4aVAwRnljbUY1TG5CeWIzUnZkSGx3WlM1MWJuTm9hV1owTG1Gd2NHeDVLR0VzWVM1emNHeHBZMlVvTFdJc1lpa3BPakErWWlZbVFYSnlZWGt1Y0hKdmRHOTBlWEJsTG5CMWMyZ3VZWEJ3Ykhrb1lTeGhMbk53YkdsalpTZ3dMQzFpS1NrcE8zSmxkSFZ5YmlCaGZUdG5iMjluTG1GeWNtRjVMbTF2ZG1WSmRHVnRQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE4UFdJbUptSThZUzVzWlc1bmRHZ3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVl5WW1ZenhoTG14bGJtZDBhQ2s3WWoxQmNuSmhlUzV3Y205MGIzUjVjR1V1YzNCc2FXTmxMbU5oYkd3b1lTeGlMREVwTzBGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6Y0d4cFkyVXVZMkZzYkNoaExHTXNNQ3hpV3pCZEtYMDdYRzVuYjI5bkxtRnljbUY1TG5wcGNEMW1kVzVqZEdsdmJpaGhLWHRwWmlnaFlYSm5kVzFsYm5SekxteGxibWQwYUNseVpYUjFjbTViWFR0bWIzSW9kbUZ5SUdJOVcxMHNZejFoY21kMWJXVnVkSE5iTUYwdWJHVnVaM1JvTEdROU1UdGtQR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdaQ3NyS1dGeVozVnRaVzUwYzF0a1hTNXNaVzVuZEdnOFl5WW1LR005WVhKbmRXMWxiblJ6VzJSZExteGxibWQwYUNrN1ptOXlLR1E5TUR0a1BHTTdaQ3NyS1h0bWIzSW9kbUZ5SUdVOVcxMHNaajB3TzJZOFlYSm5kVzFsYm5SekxteGxibWQwYUR0bUt5c3BaUzV3ZFhOb0tHRnlaM1Z0Wlc1MGMxdG1YVnRrWFNrN1lpNXdkWE5vS0dVcGZYSmxkSFZ5YmlCaWZUdG5iMjluTG1GeWNtRjVMbk5vZFdabWJHVTlablZ1WTNScGIyNG9ZU3hpS1h0aVBXSjhmRTFoZEdndWNtRnVaRzl0TzJadmNpaDJZWElnWXoxaExteGxibWQwYUMweE96QThZenRqTFMwcGUzWmhjaUJrUFUxaGRHZ3VabXh2YjNJb1lpZ3BLaWhqS3pFcEtTeGxQV0ZiWTEwN1lWdGpYVDFoVzJSZE8yRmJaRjA5WlgxOU8yZHZiMmN1WVhKeVlYa3VZMjl3ZVVKNVNXNWtaWGc5Wm5WdVkzUnBiMjRvWVN4aUtYdDJZWElnWXoxYlhUdG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyZ29ZaXhtZFc1amRHbHZiaWhpS1h0akxuQjFjMmdvWVZ0aVhTbDlLVHR5WlhSMWNtNGdZMzA3WEc1bmIyOW5MbUZ5Y21GNUxtTnZibU5oZEUxaGNEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdkdmIyY3VZWEp5WVhrdVkyOXVZMkYwTG1Gd2NHeDVLRnRkTEdkdmIyY3VZWEp5WVhrdWJXRndLR0VzWWl4aktTbDlPMmR2YjJjdVkzSjVjSFE5ZTMwN1oyOXZaeTVqY25sd2RDNXpkSEpwYm1kVWIwSjVkR1ZCY25KaGVUMW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0k5VzEwc1l6MHdMR1E5TUR0a1BHRXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlZUzVqYUdGeVEyOWtaVUYwS0dRcE96STFOVHhsSmlZb1lsdGpLeXRkUFdVbU1qVTFMR1UrUGowNEtUdGlXMk1ySzEwOVpYMXlaWFIxY200Z1luMDdaMjl2Wnk1amNubHdkQzVpZVhSbFFYSnlZWGxVYjFOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0cFppZzRNVGt5UGoxaExteGxibWQwYUNseVpYUjFjbTRnVTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlM1aGNIQnNlU2h1ZFd4c0xHRXBPMlp2Y2loMllYSWdZajFjSWx3aUxHTTlNRHRqUEdFdWJHVnVaM1JvTzJNclBUZ3hPVElwZTNaaGNpQmtQV2R2YjJjdVlYSnlZWGt1YzJ4cFkyVW9ZU3hqTEdNck9ERTVNaWs3WWlzOVUzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTNWhjSEJzZVNodWRXeHNMR1FwZlhKbGRIVnliaUJpZlR0Y2JtZHZiMmN1WTNKNWNIUXVZbmwwWlVGeWNtRjVWRzlJWlhnOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdaMjl2Wnk1aGNuSmhlUzV0WVhBb1lTeG1kVzVqZEdsdmJpaGhLWHRoUFdFdWRHOVRkSEpwYm1jb01UWXBPM0psZEhWeWJpQXhQR0V1YkdWdVozUm9QMkU2WENJd1hDSXJZWDBwTG1wdmFXNG9Zbng4WENKY0lpbDlPMmR2YjJjdVkzSjVjSFF1YUdWNFZHOUNlWFJsUVhKeVlYazlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BUMWhMbXhsYm1kMGFDVXlMRndpUzJWNUlITjBjbWx1WnlCc1pXNW5kR2dnYlhWemRDQmlaU0J0ZFd4MGFYQnNaU0J2WmlBeVhDSXBPMlp2Y2loMllYSWdZajFiWFN4alBUQTdZenhoTG14bGJtZDBhRHRqS3oweUtXSXVjSFZ6YUNod1lYSnpaVWx1ZENoaExuTjFZbk4wY21sdVp5aGpMR01yTWlrc01UWXBLVHR5WlhSMWNtNGdZbjA3WEc1bmIyOW5MbU55ZVhCMExuTjBjbWx1WjFSdlZYUm1PRUo1ZEdWQmNuSmhlVDFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJOVcxMHNZejB3TEdROU1EdGtQR0V1YkdWdVozUm9PMlFyS3lsN2RtRnlJR1U5WVM1amFHRnlRMjlrWlVGMEtHUXBPekV5T0Q1bFAySmJZeXNyWFQxbE9pZ3lNRFE0UG1VL1lsdGpLeXRkUFdVK1BqWjhNVGt5T2lnMU5USTVOajA5S0dVbU5qUTFNVElwSmlaa0t6RThZUzVzWlc1bmRHZ21KalUyTXpJd1BUMG9ZUzVqYUdGeVEyOWtaVUYwS0dRck1Ta21OalExTVRJcFB5aGxQVFkxTlRNMkt5Z29aU1l4TURJektUdzhNVEFwS3loaExtTm9ZWEpEYjJSbFFYUW9LeXRrS1NZeE1ESXpLU3hpVzJNcksxMDlaVDQrTVRoOE1qUXdMR0piWXlzclhUMWxQajR4TWlZMk0zd3hNamdwT21KYll5c3JYVDFsUGo0eE1ud3lNalFzWWx0akt5dGRQV1UrUGpZbU5qTjhNVEk0S1N4aVcyTXJLMTA5WlNZMk0zd3hNamdwZlhKbGRIVnliaUJpZlR0Y2JtZHZiMmN1WTNKNWNIUXVkWFJtT0VKNWRHVkJjbkpoZVZSdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFcGUyWnZjaWgyWVhJZ1lqMWJYU3hqUFRBc1pEMHdPMk04WVM1c1pXNW5kR2c3S1h0MllYSWdaVDFoVzJNcksxMDdhV1lvTVRJNFBtVXBZbHRrS3l0ZFBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9aU2s3Wld4elpTQnBaaWd4T1RFOFpTWW1NakkwUG1VcGUzWmhjaUJtUFdGYll5c3JYVHRpVzJRcksxMDlVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU2dvWlNZek1TazhQRFo4WmlZMk15bDlaV3h6WlNCcFppZ3lNems4WlNZbU16WTFQbVVwZTJZOVlWdGpLeXRkTzNaaGNpQm5QV0ZiWXlzclhTeG9QV0ZiWXlzclhUdGxQU2dvWlNZM0tUdzhNVGg4S0dZbU5qTXBQRHd4TW53b1p5WTJNeWs4UERaOGFDWTJNeWt0TmpVMU16WTdZbHRrS3l0ZFBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9OVFV5T1RZcktHVStQakV3S1NrN1lsdGtLeXRkUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb05UWXpNakFyS0dVbU1UQXlNeWtwZldWc2MyVWdaajFoVzJNcksxMHNaejFoVzJNcksxMHNZbHRrS3l0ZFBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9LR1VtTVRVcFBEd3hNbndvWmlZMk15azhQRFo4WnlZMk15bDljbVYwZFhKdUlHSXVhbTlwYmloY0lsd2lLWDA3WEc1bmIyOW5MbU55ZVhCMExuaHZja0o1ZEdWQmNuSmhlVDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZUzVzWlc1bmRHZzlQV0l1YkdWdVozUm9MRndpV0U5U0lHRnljbUY1SUd4bGJtZDBhSE1nYlhWemRDQnRZWFJqYUZ3aUtUdG1iM0lvZG1GeUlHTTlXMTBzWkQwd08yUThZUzVzWlc1bmRHZzdaQ3NyS1dNdWNIVnphQ2hoVzJSZFhtSmJaRjBwTzNKbGRIVnliaUJqZlR0bmIyOW5MbVJ2YlM1aGMzTmxjblJ6UFh0OU8yZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOTWIyTmhkR2x2YmoxbWRXNWpkR2x2YmloaEtYdHBaaWhuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1wZTNaaGNpQmlQV2R2YjJjdVpHOXRMbUZ6YzJWeWRITXVaMlYwVjJsdVpHOTNYeWhoS1R0aUppWW9JV0Y4ZkNFb1lTQnBibk4wWVc1alpXOW1JR0l1VEc5allYUnBiMjRwSmlaaElHbHVjM1JoYm1ObGIyWWdZaTVGYkdWdFpXNTBLU1ltWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKQmNtZDFiV1Z1ZENCcGN5QnViM1FnWVNCTWIyTmhkR2x2YmlBb2IzSWdZU0J1YjI0dFJXeGxiV1Z1ZENCdGIyTnJLVHNnWjI5ME9pQWxjMXdpTEdkdmIyY3VaRzl0TG1GemMyVnlkSE11WkdWaWRXZFRkSEpwYm1kR2IzSlVlWEJsWHloaEtTbDljbVYwZFhKdUlHRjlPMXh1WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMFZzWlcxbGJuUlVlWEJsWHoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0dkdmIyY3VZWE56WlhKMGN5NUZUa0ZDVEVWZlFWTlRSVkpVVXlsN2RtRnlJR005WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVuWlhSWGFXNWtiM2RmS0dFcE8yTW1KbHdpZFc1a1pXWnBibVZrWENJaFBYUjVjR1Z2WmlCalcySmRKaVlvWVNZbUtHRWdhVzV6ZEdGdVkyVnZaaUJqVzJKZGZId2hLR0VnYVc1emRHRnVZMlZ2WmlCakxreHZZMkYwYVc5dWZIeGhJR2x1YzNSaGJtTmxiMllnWXk1RmJHVnRaVzUwS1NsOGZHZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lRWEpuZFcxbGJuUWdhWE1nYm05MElHRWdKWE1nS0c5eUlHRWdibTl1TFVWc1pXMWxiblFzSUc1dmJpMU1iMk5oZEdsdmJpQnRiMk5yS1RzZ1oyOTBPaUFsYzF3aUxHSXNaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWtaV0oxWjFOMGNtbHVaMFp2Y2xSNWNHVmZLR0VwS1NsOWNtVjBkWEp1SUdGOU8yZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOSVZFMU1RVzVqYUc5eVJXeGxiV1Z1ZEQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh5aGhMRndpU0ZSTlRFRnVZMmh2Y2tWc1pXMWxiblJjSWlsOU8xeHVaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselJXeGxiV1Z1ZEZSNWNHVmZLR0VzWENKSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZEZ3aUtYMDdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwaFVUVXhNYVc1clJXeGxiV1Z1ZEQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh5aGhMRndpU0ZSTlRFeHBibXRGYkdWdFpXNTBYQ0lwZlR0bmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6U0ZSTlRFbHRZV2RsUld4bGJXVnVkRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMFZzWlcxbGJuUlVlWEJsWHloaExGd2lTRlJOVEVsdFlXZGxSV3hsYldWdWRGd2lLWDA3WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4QmRXUnBiMFZzWlcxbGJuUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTkZiR1Z0Wlc1MFZIbHdaVjhvWVN4Y0lraFVUVXhCZFdScGIwVnNaVzFsYm5SY0lpbDlPMXh1WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4V2FXUmxiMFZzWlcxbGJuUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTkZiR1Z0Wlc1MFZIbHdaVjhvWVN4Y0lraFVUVXhXYVdSbGIwVnNaVzFsYm5SY0lpbDlPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNU1c1d2RYUkZiR1Z0Wlc1MFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselJXeGxiV1Z1ZEZSNWNHVmZLR0VzWENKSVZFMU1TVzV3ZFhSRmJHVnRaVzUwWENJcGZUdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URlJsZUhSQmNtVmhSV3hsYldWdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwVnNaVzFsYm5SVWVYQmxYeWhoTEZ3aVNGUk5URlJsZUhSQmNtVmhSV3hsYldWdWRGd2lLWDA3WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4RFlXNTJZWE5GYkdWdFpXNTBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpSV3hsYldWdWRGUjVjR1ZmS0dFc1hDSklWRTFNUTJGdWRtRnpSV3hsYldWdWRGd2lLWDA3WEc1bmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6U0ZSTlRFVnRZbVZrUld4bGJXVnVkRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMFZzWlcxbGJuUlVlWEJsWHloaExGd2lTRlJOVEVWdFltVmtSV3hsYldWdWRGd2lLWDA3WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4R2IzSnRSV3hsYldWdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwVnNaVzFsYm5SVWVYQmxYeWhoTEZ3aVNGUk5URVp2Y20xRmJHVnRaVzUwWENJcGZUdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URVp5WVcxbFJXeGxiV1Z1ZEQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh5aGhMRndpU0ZSTlRFWnlZVzFsUld4bGJXVnVkRndpS1gwN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeEpSbkpoYldWRmJHVnRaVzUwUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6Uld4bGJXVnVkRlI1Y0dWZktHRXNYQ0pJVkUxTVNVWnlZVzFsUld4bGJXVnVkRndpS1gwN1hHNW5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URTlpYW1WamRFVnNaVzFsYm5ROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hORmJHVnRaVzUwVkhsd1pWOG9ZU3hjSWtoVVRVeFBZbXBsWTNSRmJHVnRaVzUwWENJcGZUdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URk5qY21sd2RFVnNaVzFsYm5ROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hORmJHVnRaVzUwVkhsd1pWOG9ZU3hjSWtoVVRVeFRZM0pwY0hSRmJHVnRaVzUwWENJcGZUdGNibWR2YjJjdVpHOXRMbUZ6YzJWeWRITXVaR1ZpZFdkVGRISnBibWRHYjNKVWVYQmxYejFtZFc1amRHbHZiaWhoS1h0cFppaG5iMjluTG1selQySnFaV04wS0dFcEtYUnllWHR5WlhSMWNtNGdZUzVqYjI1emRISjFZM1J2Y2k1a2FYTndiR0Y1VG1GdFpYeDhZUzVqYjI1emRISjFZM1J2Y2k1dVlXMWxmSHhQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b1lTbDlZMkYwWTJnb1lpbDdjbVYwZFhKdVhDSThiMkpxWldOMElHTnZkV3hrSUc1dmRDQmlaU0J6ZEhKcGJtZHBabWxsWkQ1Y0luMWxiSE5sSUhKbGRIVnliaUIyYjJsa0lEQTlQVDFoUDF3aWRXNWtaV1pwYm1Wa1hDSTZiblZzYkQwOVBXRS9YQ0p1ZFd4c1hDSTZkSGx3Wlc5bUlHRjlPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVaMlYwVjJsdVpHOTNYejFtZFc1amRHbHZiaWhoS1h0MGNubDdkbUZ5SUdJOVlTWW1ZUzV2ZDI1bGNrUnZZM1Z0Wlc1MExHTTlZaVltS0dJdVpHVm1ZWFZzZEZacFpYZDhmR0l1Y0dGeVpXNTBWMmx1Wkc5M0tUdGpQV044ZkdkdmIyY3VaMnh2WW1Gc08ybG1LR011Uld4bGJXVnVkQ1ltWXk1TWIyTmhkR2x2YmlseVpYUjFjbTRnWTMxallYUmphQ2hrS1h0OWNtVjBkWEp1SUc1MWJHeDlPMmR2YjJjdVpuVnVZM1JwYjI1elBYdDlPMmR2YjJjdVpuVnVZM1JwYjI1ekxtTnZibk4wWVc1MFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQmhmWDA3WjI5dlp5NW1kVzVqZEdsdmJuTXVSa0ZNVTBVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200aE1YMDdaMjl2Wnk1bWRXNWpkR2x2Ym5NdVZGSlZSVDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUV3ZlR0bmIyOW5MbVoxYm1OMGFXOXVjeTVPVlV4TVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHNTFiR3g5TzJkdmIyY3VablZ1WTNScGIyNXpMbWxrWlc1MGFYUjVQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdGOU8yZHZiMmN1Wm5WdVkzUnBiMjV6TG1WeWNtOXlQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJtZFc1amRHbHZiaWdwZTNSb2NtOTNJRVZ5Y205eUtHRXBPMzE5TzJkdmIyY3VablZ1WTNScGIyNXpMbVpoYVd3OVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHWjFibU4wYVc5dUtDbDdkR2h5YjNjZ1lUdDlmVHRjYm1kdmIyY3VablZ1WTNScGIyNXpMbXh2WTJzOVpuVnVZM1JwYjI0b1lTeGlLWHRpUFdKOGZEQTdjbVYwZFhKdUlHWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHRXVZWEJ3Ykhrb2RHaHBjeXhCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zTUN4aUtTbDlmVHRuYjI5bkxtWjFibU4wYVc5dWN5NXVkR2c5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdGeVozVnRaVzUwYzF0aFhYMTlPMmR2YjJjdVpuVnVZM1JwYjI1ekxuQmhjblJwWVd4U2FXZG9kRDFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0dGeVozVnRaVzUwY3l3eEtUdHlaWFIxY200Z1puVnVZM1JwYjI0b0tYdDJZWElnWWoxQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoaGNtZDFiV1Z1ZEhNcE8ySXVjSFZ6YUM1aGNIQnNlU2hpTEdNcE8zSmxkSFZ5YmlCaExtRndjR3g1S0hSb2FYTXNZaWw5ZlR0bmIyOW5MbVoxYm1OMGFXOXVjeTUzYVhSb1VtVjBkWEp1Vm1Gc2RXVTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NW1kVzVqZEdsdmJuTXVjMlZ4ZFdWdVkyVW9ZU3huYjI5bkxtWjFibU4wYVc5dWN5NWpiMjV6ZEdGdWRDaGlLU2w5TzF4dVoyOXZaeTVtZFc1amRHbHZibk11WlhGMVlXeFViejFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCbWRXNWpkR2x2YmloaktYdHlaWFIxY200Z1lqOWhQVDFqT21FOVBUMWpmWDA3WjI5dlp5NW1kVzVqZEdsdmJuTXVZMjl0Y0c5elpUMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQV0Z5WjNWdFpXNTBjeXhrUFdNdWJHVnVaM1JvTzNKbGRIVnliaUJtZFc1amRHbHZiaWdwZTNaaGNpQmhPMlFtSmloaFBXTmJaQzB4WFM1aGNIQnNlU2gwYUdsekxHRnlaM1Z0Wlc1MGN5a3BPMlp2Y2loMllYSWdZajFrTFRJN01EdzlZanRpTFMwcFlUMWpXMkpkTG1OaGJHd29kR2hwY3l4aEtUdHlaWFIxY200Z1lYMTlPMmR2YjJjdVpuVnVZM1JwYjI1ekxuTmxjWFZsYm1ObFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRnlaM1Z0Wlc1MGN5eGpQV0l1YkdWdVozUm9PM0psZEhWeWJpQm1kVzVqZEdsdmJpZ3BlMlp2Y2loMllYSWdZU3hsUFRBN1pUeGpPMlVyS3lsaFBXSmJaVjB1WVhCd2JIa29kR2hwY3l4aGNtZDFiV1Z1ZEhNcE8zSmxkSFZ5YmlCaGZYMDdYRzVuYjI5bkxtWjFibU4wYVc5dWN5NWhibVE5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5WVhKbmRXMWxiblJ6TEdNOVlpNXNaVzVuZEdnN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0NsN1ptOXlLSFpoY2lCaFBUQTdZVHhqTzJFckt5bHBaaWdoWWx0aFhTNWhjSEJzZVNoMGFHbHpMR0Z5WjNWdFpXNTBjeWtwY21WMGRYSnVJVEU3Y21WMGRYSnVJVEI5ZlR0bmIyOW5MbVoxYm1OMGFXOXVjeTV2Y2oxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxaGNtZDFiV1Z1ZEhNc1l6MWlMbXhsYm1kMGFEdHlaWFIxY200Z1puVnVZM1JwYjI0b0tYdG1iM0lvZG1GeUlHRTlNRHRoUEdNN1lTc3JLV2xtS0dKYllWMHVZWEJ3Ykhrb2RHaHBjeXhoY21kMWJXVnVkSE1wS1hKbGRIVnliaUV3TzNKbGRIVnliaUV4ZlgwN1oyOXZaeTVtZFc1amRHbHZibk11Ym05MFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpRmhMbUZ3Y0d4NUtIUm9hWE1zWVhKbmRXMWxiblJ6S1gxOU8xeHVaMjl2Wnk1bWRXNWpkR2x2Ym5NdVkzSmxZWFJsUFdaMWJtTjBhVzl1S0dFc1lpbDdkbUZ5SUdNOVpuVnVZM1JwYjI0b0tYdDlPMk11Y0hKdmRHOTBlWEJsUFdFdWNISnZkRzkwZVhCbE8yTTlibVYzSUdNN1lTNWhjSEJzZVNoakxFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3hLU2s3Y21WMGRYSnVJR045TzJkdmIyY3VablZ1WTNScGIyNXpMa05CUTBoRlgxSkZWRlZTVGw5V1FVeFZSVDBoTUR0bmIyOW5MbVoxYm1OMGFXOXVjeTVqWVdOb1pWSmxkSFZ5YmxaaGJIVmxQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQU0V4TEdNN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0NsN2FXWW9JV2R2YjJjdVpuVnVZM1JwYjI1ekxrTkJRMGhGWDFKRlZGVlNUbDlXUVV4VlJTbHlaWFIxY200Z1lTZ3BPMko4ZkNoalBXRW9LU3hpUFNFd0tUdHlaWFIxY200Z1kzMTlPMmR2YjJjdVpuVnVZM1JwYjI1ekxtOXVZMlU5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5WVR0eVpYUjFjbTRnWm5WdVkzUnBiMjRvS1h0cFppaGlLWHQyWVhJZ1lUMWlPMkk5Ym5Wc2JEdGhLQ2w5ZlgwN1hHNW5iMjluTG1aMWJtTjBhVzl1Y3k1a1pXSnZkVzVqWlQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlNRHR5WlhSMWNtNGdablZ1WTNScGIyNG9aU2w3WjI5dlp5NW5iRzlpWVd3dVkyeGxZWEpVYVcxbGIzVjBLR1FwTzNaaGNpQm1QV0Z5WjNWdFpXNTBjenRrUFdkdmIyY3VaMnh2WW1Gc0xuTmxkRlJwYldWdmRYUW9ablZ1WTNScGIyNG9LWHRoTG1Gd2NHeDVLR01zWmlsOUxHSXBmWDA3WjI5dlp5NW1kVzVqZEdsdmJuTXVkR2h5YjNSMGJHVTlablZ1WTNScGIyNG9ZU3hpTEdNcGUzWmhjaUJrUFRBc1pUMGhNU3htUFZ0ZExHYzlablZ1WTNScGIyNG9LWHRrUFRBN1pTWW1LR1U5SVRFc2FDZ3BLWDBzYUQxbWRXNWpkR2x2YmlncGUyUTlaMjl2Wnk1bmJHOWlZV3d1YzJWMFZHbHRaVzkxZENobkxHSXBPMkV1WVhCd2JIa29ZeXhtS1gwN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0dFcGUyWTlZWEpuZFcxbGJuUnpPMlEvWlQwaE1EcG9LQ2w5ZlR0bmIyOW5MbVoxYm1OMGFXOXVjeTV5WVhSbFRHbHRhWFE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BUQXNaVDFtZFc1amRHbHZiaWdwZTJROU1IMDdjbVYwZFhKdUlHWjFibU4wYVc5dUtHWXBlMlI4ZkNoa1BXZHZiMmN1WjJ4dlltRnNMbk5sZEZScGJXVnZkWFFvWlN4aUtTeGhMbUZ3Y0d4NUtHTXNZWEpuZFcxbGJuUnpLU2w5ZlR0bmIyOW5MbVJ2YlM1SWRHMXNSV3hsYldWdWREMW1kVzVqZEdsdmJpZ3BlMzA3WjI5dlp5NWtiMjB1VkdGblRtRnRaVDFtZFc1amRHbHZiaWhoS1h0MGFHbHpMblJoWjA1aGJXVmZQV0Y5TzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVkR0ZuVG1GdFpWOTlPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrRmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVCUWtKU1BXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUVVKQ1Vsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa0ZEVWs5T1dVMDlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKQlExSlBUbGxOWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFVUkVVa1ZUVXoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa0ZFUkZKRlUxTmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVCVUZCTVJWUTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKQlVGQk1SVlJjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1QlVrVkJQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVFWSkZRVndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtGU1ZFbERURVU5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkJVbFJKUTB4RlhDSXBPMXh1WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVCVTBsRVJUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtGVFNVUkZYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UVZWRVNVODlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKQlZVUkpUMXdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pDWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFrRlRSVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrSkJVMFZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1Q1FWTkZSazlPVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa0pCVTBWR1QwNVVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UWtSSlBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUWtSSlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRa1JQUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRa1JQWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFrbEhQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVFrbEhYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UWt4UFEwdFJWVTlVUlQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa0pNVDBOTFVWVlBWRVZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1Q1QwUlpQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVFrOUVXVndpS1R0Y2JtZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFsSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKQ1Vsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa0pWVkZSUFRqMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtKVlZGUlBUbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtOQlRsWkJVejF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrTkJUbFpCVTF3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrTkJVRlJKVDA0OWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pEUVZCVVNVOU9YQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UTBWT1ZFVlNQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVEwVk9WRVZTWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVEwbFVSVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrTkpWRVZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1RFQwUkZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVEwOUVSVndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtOUFREMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtOUFRGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa05QVEVkU1QxVlFQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVEwOU1SMUpQVlZCY0lpazdYRzVuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa05QVFUxQlRrUTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKRFQwMU5RVTVFWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJFRlVRVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrUkJWRUZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1RVFWUkJURWxUVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa1JCVkVGTVNWTlVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UkVROWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pFUkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrUkZURDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrUkZURndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtSRlZFRkpURk05Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkVSVlJCU1V4VFhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRVpPUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lSRVpPWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJFbEJURTlIUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lSRWxCVEU5SFhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRWxTUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lSRWxTWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJFbFdQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVJFbFdYQ0lwTzF4dVoyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1RVREMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtSTVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRlE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkVWRndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtWTlBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUlUxY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUZUVUpGUkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa1ZOUWtWRVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSa2xGVEVSVFJWUTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKR1NVVk1SRk5GVkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrWkpSME5CVUZSSlQwNDlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKR1NVZERRVkJVU1U5T1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSa2xIVlZKRlBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUmtsSFZWSkZYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1Ums5T1ZEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtaUFRsUmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVHVDA5VVJWSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKR1QwOVVSVkpjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1R1QxSk5QVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVJrOVNUVndpS1R0Y2JtZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJsSkJUVVU5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkdVa0ZOUlZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrWlNRVTFGVTBWVVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUmxKQlRVVlRSVlJjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1SU1UMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtneFhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVTREk5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSklNbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtnelBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpU0ROY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUlORDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrZzBYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1U0RVOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pJTlZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrZzJQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVNEWmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVJUlVGRVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpU0VWQlJGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa2hGUVVSRlVqMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtoRlFVUkZVbHdpS1R0Y2JtZHZiMmN1Wkc5dExsUmhaMDVoYldVdVNFZFNUMVZRUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lTRWRTVDFWUVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVTRkk5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSklVbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtoVVRVdzlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKSVZFMU1YQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1U1QxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa2xjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1SlJsSkJUVVU5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkpSbEpCVFVWY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUpUVWM5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkpUVWRjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1SlRsQlZWRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrbE9VRlZVWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVNVNVRQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVNVNVRYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1U1ZOSlRrUkZXRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrbFRTVTVFUlZoY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUxRa1E5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkxRa1JjSWlrN1hHNW5iMjluTG1SdmJTNVVZV2RPWVcxbExrdEZXVWRGVGoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa3RGV1VkRlRsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa3hCUWtWTVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVEVGQ1JVeGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVNUlVkRlRrUTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKTVJVZEZUa1JjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1TVNUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWt4SlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVURWxPU3oxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa3hKVGt0Y0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNU5RVWxPUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lUVUZKVGx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrMUJVRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrMUJVRndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGsxQlVrczlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKTlFWSkxYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VFVGVVNEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWsxQlZFaGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVOUlU1VlBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVFVWT1ZWd2lLVHRjYm1kdmIyY3VaRzl0TGxSaFowNWhiV1V1VFVWT1ZVbFVSVTA5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSk5SVTVWU1ZSRlRWd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazFGVkVFOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pOUlZSQlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVUVVZVUlZJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pOUlZSRlVsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazVCVmoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJazVCVmx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrNVBSbEpCVFVWVFBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVGs5R1VrRk5SVk5jSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1T1QxTkRVa2xRVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJazVQVTBOU1NWQlVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VDBKS1JVTlVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVQwSktSVU5VWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVQwdzlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKUFRGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazlRVkVkU1QxVlFQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVQxQlVSMUpQVlZCY0lpazdYRzVuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazlRVkVsUFRqMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWs5UVZFbFBUbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGs5VlZGQlZWRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrOVZWRkJWVkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsQTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKUVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVVRUZTUVUwOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pRUVZKQlRWd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbEJKUTFSVlVrVTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKUVNVTlVWVkpGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVVGSkZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVVGSkZYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VUZKUFIxSkZVMU05Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlFVazlIVWtWVFUxd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbEU5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlJYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VWxBOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pTVUZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsSlVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVVsUmNJaWs3WEc1bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxKVVF6MXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxKVVExd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbEpWUWxrOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pTVlVKWlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVVejF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsTmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVUUVUxUVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVTBGTlVGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbE5EVWtsUVZEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxORFVrbFFWRndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxORlExUkpUMDQ5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRSVU5VU1U5T1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVVMFZNUlVOVVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVTBWTVJVTlVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VTAxQlRFdzlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVFRVRk1URndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxOUFZWSkRSVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsTlBWVkpEUlZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsTlFRVTQ5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRVRUZPWENJcE8xeHVaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVRWRkpKUzBVOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pUVkZKSlMwVmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVUVkZKUFRrYzlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVFZGSlBUa2RjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VFZGbE1SVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsTlVXVXhGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVUxVkNQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVUxVkNYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VTFWTlRVRlNXVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsTlZUVTFCVWxsY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVRWVkE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRWVkJjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VFZrYzlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVFZrZGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVVUVVKTVJUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxSQlFreEZYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VkVKUFJGazlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVVFrOUVXVndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxSRVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVkVSY0lpazdYRzVuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbFJGVFZCTVFWUkZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVZFVk5VRXhCVkVWY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVVSVmhVUVZKRlFUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxSRldGUkJVa1ZCWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVZFWlBUMVE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlVSazlQVkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsUklQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVZFaGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVVU0VWQlJEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxSSVJVRkVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VkVsTlJUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxSSlRVVmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVVU1ZSTVJUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxSSlZFeEZYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VkZJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pVVWx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsUlNRVU5MUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lWRkpCUTB0Y0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVVWRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUlVYQ0lwTzF4dVoyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VlBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVlZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsVk1QVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVZVeGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVXUVZJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pXUVZKY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVdTVVJGVHoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbFpKUkVWUFhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVWMEpTUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lWMEpTWENJcE8yZHZiMmN1Wkc5dExuUmhaM005ZTMwN1oyOXZaeTVrYjIwdWRHRm5jeTVXVDBsRVgxUkJSMU5mUFh0aGNtVmhPaUV3TEdKaGMyVTZJVEFzWW5JNklUQXNZMjlzT2lFd0xHTnZiVzFoYm1RNklUQXNaVzFpWldRNklUQXNhSEk2SVRBc2FXMW5PaUV3TEdsdWNIVjBPaUV3TEd0bGVXZGxiam9oTUN4c2FXNXJPaUV3TEcxbGRHRTZJVEFzY0dGeVlXMDZJVEFzYzI5MWNtTmxPaUV3TEhSeVlXTnJPaUV3TEhkaWNqb2hNSDA3WjI5dlp5NWtiMjB1ZEdGbmN5NXBjMVp2YVdSVVlXYzlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJVEE5UFQxbmIyOW5MbVJ2YlM1MFlXZHpMbFpQU1VSZlZFRkhVMTliWVYxOU8yZHZiMmN1YUhSdGJEMTdmVHRuYjI5bkxtaDBiV3d1ZEhKMWMzUmxaSFI1Y0dWelBYdDlPMmR2YjJjdWFIUnRiQzUwY25WemRHVmtkSGx3WlhNdVVGSkpWa0ZVUlY5RVQxOU9UMVJmUVVORFJWTlRYMDlTWDBWTVUwVmZVRTlNU1VOWlBXZHZiMmN1VkZKVlUxUkZSRjlVV1ZCRlUxOVFUMHhKUTFsZlRrRk5SVDluYjI5bkxtTnlaV0YwWlZSeWRYTjBaV1JVZVhCbGMxQnZiR2xqZVNobmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWDA1QlRVVXJYQ0lqYUhSdGJGd2lLVHB1ZFd4c08yZHZiMmN1YzNSeWFXNW5QWHQ5TzJkdmIyY3VjM1J5YVc1bkxsUjVjR1ZrVTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3ZlR0bmIyOW5Mbk4wY21sdVp5NURiMjV6ZEQxbWRXNWpkR2x2YmloaExHSXBlM1JvYVhNdWMzUnlhVzVuUTI5dWMzUldZV3gxWlZkcGRHaFRaV04xY21sMGVVTnZiblJ5WVdOMFgxOW5iMjluVTNSeWFXNW5VMlZqZFhKcGRIbFFjbWwyWVhSbFh6MWhQVDA5WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1UjA5UFIxOVRWRkpKVGtkZlEwOU9VMVJTVlVOVVQxSmZWRTlMUlU1ZlVGSkpWa0ZVUlY4bUptSjhmRndpWENJN2RHaHBjeTVUVkZKSlRrZGZRMDlPVTFSZlZGbFFSVjlOUVZKTFJWSmZYMGRQVDBkZlUxUlNTVTVIWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmUFdkdmIyY3VjM1J5YVc1bkxrTnZibk4wTGxSWlVFVmZUVUZTUzBWU1gzMDdaMjl2Wnk1emRISnBibWN1UTI5dWMzUXVjSEp2ZEc5MGVYQmxMbWx0Y0d4bGJXVnVkSE5IYjI5blUzUnlhVzVuVkhsd1pXUlRkSEpwYm1jOUlUQTdaMjl2Wnk1emRISnBibWN1UTI5dWMzUXVjSEp2ZEc5MGVYQmxMbWRsZEZSNWNHVmtVM1J5YVc1blZtRnNkV1U5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXpkSEpwYm1kRGIyNXpkRlpoYkhWbFYybDBhRk5sWTNWeWFYUjVRMjl1ZEhKaFkzUmZYMmR2YjJkVGRISnBibWRUWldOMWNtbDBlVkJ5YVhaaGRHVmZmVHRjYm1kdmIyY3VjM1J5YVc1bkxrTnZibk4wTG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5Ymx3aVEyOXVjM1I3WENJcmRHaHBjeTV6ZEhKcGJtZERiMjV6ZEZaaGJIVmxWMmwwYUZObFkzVnlhWFI1UTI5dWRISmhZM1JmWDJkdmIyZFRkSEpwYm1kVFpXTjFjbWwwZVZCeWFYWmhkR1ZmSzF3aWZWd2lmVHRuYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQTlablZ1WTNScGIyNG9ZU2w3YVdZb1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlaMjl2Wnk1emRISnBibWN1UTI5dWMzUW1KbUV1VTFSU1NVNUhYME5QVGxOVVgxUlpVRVZmVFVGU1MwVlNYMTlIVDA5SFgxTlVVa2xPUjE5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHowOVBXZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExsUlpVRVZmVFVGU1MwVlNYeWx5WlhSMWNtNGdZUzV6ZEhKcGJtZERiMjV6ZEZaaGJIVmxWMmwwYUZObFkzVnlhWFI1UTI5dWRISmhZM1JmWDJkdmIyZFRkSEpwYm1kVFpXTjFjbWwwZVZCeWFYWmhkR1ZmTzJkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVpYaHdaV04wWldRZ2IySnFaV04wSUc5bUlIUjVjR1VnUTI5dWMzUXNJR2R2ZENBblhDSXJZU3RjSWlkY0lpazdjbVYwZFhKdVhDSjBlWEJsWDJWeWNtOXlPa052Ym5OMFhDSjlPMXh1WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1Wm5KdmJUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdibVYzSUdkdmIyY3VjM1J5YVc1bkxrTnZibk4wS0dkdmIyY3VjM1J5YVc1bkxrTnZibk4wTGtkUFQwZGZVMVJTU1U1SFgwTlBUbE5VVWxWRFZFOVNYMVJQUzBWT1gxQlNTVlpCVkVWZkxHRXBmVHRuYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzVVV1ZCRlgwMUJVa3RGVWw4OWUzMDdaMjl2Wnk1emRISnBibWN1UTI5dWMzUXVSMDlQUjE5VFZGSkpUa2RmUTA5T1UxUlNWVU5VVDFKZlZFOUxSVTVmVUZKSlZrRlVSVjg5ZTMwN1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdVJVMVFWRms5WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1Wm5KdmJTaGNJbHdpS1R0bmIyOW5MbWgwYld3dVUyRm1aVk5qY21sd2REMW1kVzVqZEdsdmJpZ3BlM1JvYVhNdWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpWTmpjbWx3ZEZkeVlYQndaV1JXWVd4MVpWODlYQ0pjSWp0MGFHbHpMbE5CUmtWZlUwTlNTVkJVWDFSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh6MW5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzVVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY5OU8yZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMbkJ5YjNSdmRIbHdaUzVwYlhCc1pXMWxiblJ6UjI5dloxTjBjbWx1WjFSNWNHVmtVM1J5YVc1blBTRXdPMmR2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTGxSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh6MTdmVHRuYjI5bkxtaDBiV3d1VTJGbVpWTmpjbWx3ZEM1bWNtOXRRMjl1YzNSaGJuUTlablZ1WTNScGIyNG9ZU2w3WVQxbmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrN2NtVjBkWEp1SURBOVBUMWhMbXhsYm1kMGFEOW5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzVGVFZCVVdUcG5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzVqY21WaGRHVlRZV1psVTJOeWFYQjBVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lTbDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlRZM0pwY0hRdVpuSnZiVU52Ym5OMFlXNTBRVzVrUVhKbmN6MW1kVzVqZEdsdmJpaGhMR0lwZTJadmNpaDJZWElnWXoxYlhTeGtQVEU3WkR4aGNtZDFiV1Z1ZEhNdWJHVnVaM1JvTzJRckt5bGpMbkIxYzJnb1oyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVjM1J5YVc1bmFXWjVYeWhoY21kMWJXVnVkSE5iWkYwcEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVZM0psWVhSbFUyRm1aVk5qY21sd2RGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aUtGd2lLMmR2YjJjdWMzUnlhVzVuTGtOdmJuTjBMblZ1ZDNKaGNDaGhLU3RjSWlrb1hDSXJZeTVxYjJsdUtGd2lMQ0JjSWlrclhDSXBPMXdpS1gwN1oyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVabkp2YlVwemIyNDlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTG1OeVpXRjBaVk5oWm1WVFkzSnBjSFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaG5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzV6ZEhKcGJtZHBabmxmS0dFcEtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1Y0hKdmRHOTBlWEJsTG1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlRZV1psVTJOeWFYQjBWM0poY0hCbFpGWmhiSFZsWHk1MGIxTjBjbWx1WnlncGZUdGNibWR2YjJjdVJFVkNWVWNtSmlobmIyOW5MbWgwYld3dVUyRm1aVk5qY21sd2RDNXdjbTkwYjNSNWNHVXVkRzlUZEhKcGJtYzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNWNJbE5oWm1WVFkzSnBjSFI3WENJcmRHaHBjeTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlRZV1psVTJOeWFYQjBWM0poY0hCbFpGWmhiSFZsWHl0Y0luMWNJbjBwTzJkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExuVnVkM0poY0QxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkQ2hoS1M1MGIxTjBjbWx1WnlncGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTG5WdWQzSmhjRlJ5ZFhOMFpXUlRZM0pwY0hROVpuVnVZM1JwYjI0b1lTbDdhV1lvWVNCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFFtSm1FdVUwRkdSVjlUUTFKSlVGUmZWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmUFQwOVoyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmS1hKbGRIVnliaUJoTG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVFkzSnBjSFJYY21Gd2NHVmtWbUZzZFdWZk8yZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2laWGh3WldOMFpXUWdiMkpxWldOMElHOW1JSFI1Y0dVZ1UyRm1aVk5qY21sd2RDd2daMjkwSUNkY0lpdGhLMXdpSnlCdlppQjBlWEJsSUZ3aUsyZHZiMmN1ZEhsd1pVOW1LR0VwS1R0eVpYUjFjbTVjSW5SNWNHVmZaWEp5YjNJNlUyRm1aVk5qY21sd2RGd2lmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExuTjBjbWx1WjJsbWVWODlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJRXBUVDA0dWMzUnlhVzVuYVdaNUtHRXBMbkpsY0d4aFkyVW9Mend2Wnl4Y0lseGNYRng0TTJOY0lpbDlPMmR2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTG1OeVpXRjBaVk5oWm1WVFkzSnBjSFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNG9ibVYzSUdkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMEtTNXBibWwwVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVmZLR0VwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMbkJ5YjNSdmRIbHdaUzVwYm1sMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZmUFdaMWJtTjBhVzl1S0dFcGUzUm9hWE11Y0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlZOamNtbHdkRmR5WVhCd1pXUldZV3gxWlY4OVoyOXZaeTVvZEcxc0xuUnlkWE4wWldSMGVYQmxjeTVRVWtsV1FWUkZYMFJQWDA1UFZGOUJRME5GVTFOZlQxSmZSVXhUUlY5UVQweEpRMWsvWjI5dlp5NW9kRzFzTG5SeWRYTjBaV1IwZVhCbGN5NVFVa2xXUVZSRlgwUlBYMDVQVkY5QlEwTkZVMU5mVDFKZlJVeFRSVjlRVDB4SlExa3VZM0psWVhSbFUyTnlhWEIwS0dFcE9tRTdjbVYwZFhKdUlIUm9hWE45TzJkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExrVk5VRlJaUFdkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExtTnlaV0YwWlZOaFptVlRZM0pwY0hSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hjSWx3aUtUdG5iMjluTG1aelBYdDlPMmR2YjJjdVpuTXVkWEpzUFh0OU8yZHZiMmN1Wm5NdWRYSnNMbU55WldGMFpVOWlhbVZqZEZWeWJEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1bWN5NTFjbXd1WjJWMFZYSnNUMkpxWldOMFh5Z3BMbU55WldGMFpVOWlhbVZqZEZWU1RDaGhLWDA3WjI5dlp5NW1jeTUxY213dWNtVjJiMnRsVDJKcVpXTjBWWEpzUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1Wm5NdWRYSnNMbWRsZEZWeWJFOWlhbVZqZEY4b0tTNXlaWFp2YTJWUFltcGxZM1JWVWt3b1lTbDlPMmR2YjJjdVpuTXVkWEpzTG1kbGRGVnliRTlpYW1WamRGODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG1aekxuVnliQzVtYVc1a1ZYSnNUMkpxWldOMFh5Z3BPMmxtS0c1MWJHd2hQV0VwY21WMGRYSnVJR0U3ZEdoeWIzY2dSWEp5YjNJb1hDSlVhR2x6SUdKeWIzZHpaWElnWkc5bGMyNG5kQ0J6WldWdElIUnZJSE4xY0hCdmNuUWdZbXh2WWlCVlVreHpYQ0lwTzMwN1hHNW5iMjluTG1aekxuVnliQzVtYVc1a1ZYSnNUMkpxWldOMFh6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG1selJHVm1LR2R2YjJjdVoyeHZZbUZzTGxWU1RDa21KbWR2YjJjdWFYTkVaV1lvWjI5dlp5NW5iRzlpWVd3dVZWSk1MbU55WldGMFpVOWlhbVZqZEZWU1RDay9aMjl2Wnk1bmJHOWlZV3d1VlZKTU9tZHZiMmN1YVhORVpXWW9aMjl2Wnk1bmJHOWlZV3d1ZDJWaWEybDBWVkpNS1NZbVoyOXZaeTVwYzBSbFppaG5iMjluTG1kc2IySmhiQzUzWldKcmFYUlZVa3d1WTNKbFlYUmxUMkpxWldOMFZWSk1LVDluYjI5bkxtZHNiMkpoYkM1M1pXSnJhWFJWVWt3NloyOXZaeTVwYzBSbFppaG5iMjluTG1kc2IySmhiQzVqY21WaGRHVlBZbXBsWTNSVlVrd3BQMmR2YjJjdVoyeHZZbUZzT201MWJHeDlPMmR2YjJjdVpuTXVkWEpzTG1KeWIzZHpaWEpUZFhCd2IzSjBjMDlpYW1WamRGVnliSE05Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnYm5Wc2JDRTlaMjl2Wnk1bWN5NTFjbXd1Wm1sdVpGVnliRTlpYW1WamRGOG9LWDA3WjI5dlp5NXBNVGh1UFh0OU8yZHZiMmN1YVRFNGJpNWlhV1JwUFh0OU8yZHZiMmN1YVRFNGJpNWlhV1JwTGtaUFVrTkZYMUpVVEQwaE1UdGNibWR2YjJjdWFURTRiaTVpYVdScExrbFRYMUpVVEQxbmIyOW5MbWt4T0c0dVltbGthUzVHVDFKRFJWOVNWRXg4ZkNoY0ltRnlYQ0k5UFdkdmIyY3VURTlEUVV4RkxuTjFZbk4wY21sdVp5Z3dMRElwTG5SdlRHOTNaWEpEWVhObEtDbDhmRndpWm1GY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RBc01pa3VkRzlNYjNkbGNrTmhjMlVvS1h4OFhDSm9aVndpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NQ3d5S1M1MGIweHZkMlZ5UTJGelpTZ3BmSHhjSW1sM1hDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1Wnlnd0xESXBMblJ2VEc5M1pYSkRZWE5sS0NsOGZGd2ljSE5jSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LREFzTWlrdWRHOU1iM2RsY2tOaGMyVW9LWHg4WENKelpGd2lQVDFuYjI5bkxreFBRMEZNUlM1emRXSnpkSEpwYm1jb01Dd3lLUzUwYjB4dmQyVnlRMkZ6WlNncGZIeGNJblZuWENJOVBXZHZiMmN1VEU5RFFVeEZMbk4xWW5OMGNtbHVaeWd3TERJcExuUnZURzkzWlhKRFlYTmxLQ2w4ZkZ3aWRYSmNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktEQXNNaWt1ZEc5TWIzZGxja05oYzJVb0tYeDhYQ0o1YVZ3aVBUMW5iMjluTGt4UFEwRk1SUzV6ZFdKemRISnBibWNvTUN3eUtTNTBiMHh2ZDJWeVEyRnpaU2dwS1NZbUtESTlQV2R2YjJjdVRFOURRVXhGTG14bGJtZDBhSHg4WEc1Y0lpMWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktESXNNeWw4ZkZ3aVgxd2lQVDFuYjI5bkxreFBRMEZNUlM1emRXSnpkSEpwYm1jb01pd3pLU2w4ZkRNOFBXZHZiMmN1VEU5RFFVeEZMbXhsYm1kMGFDWW1YQ0pqYTJKY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RBc015a3VkRzlNYjNkbGNrTmhjMlVvS1NZbUtETTlQV2R2YjJjdVRFOURRVXhGTG14bGJtZDBhSHg4WENJdFhDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1WnlnekxEUXBmSHhjSWw5Y0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RNc05Da3BmSHczUEQxbmIyOW5Ma3hQUTBGTVJTNXNaVzVuZEdnbUppaGNJaTFjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRElzTXlsOGZGd2lYMXdpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NaXd6S1NrbUppaGNJbUZrYkcxY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RNc055a3VkRzlNYjNkbGNrTmhjMlVvS1h4OFhDSmhjbUZpWENJOVBXZHZiMmN1VEU5RFFVeEZMbk4xWW5OMGNtbHVaeWd6TERjcExuUnZURzkzWlhKRFlYTmxLQ2w4ZkZ3aWFHVmljbHdpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NeXczS1M1MGIweHZkMlZ5UTJGelpTZ3BmSHhjSW01cmIyOWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktETXNYRzQzS1M1MGIweHZkMlZ5UTJGelpTZ3BmSHhjSW5KdmFHZGNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktETXNOeWt1ZEc5TWIzZGxja05oYzJVb0tYeDhYQ0owYUdGaFhDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1WnlnekxEY3BMblJ2VEc5M1pYSkRZWE5sS0NrcGZIdzRQRDFuYjI5bkxreFBRMEZNUlM1c1pXNW5kR2dtSmloY0lpMWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktETXNOQ2w4ZkZ3aVgxd2lQVDFuYjI5bkxreFBRMEZNUlM1emRXSnpkSEpwYm1jb015dzBLU2ttSmloY0ltRmtiRzFjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRFFzT0NrdWRHOU1iM2RsY2tOaGMyVW9LWHg4WENKaGNtRmlYQ0k5UFdkdmIyY3VURTlEUVV4RkxuTjFZbk4wY21sdVp5ZzBMRGdwTG5SdlRHOTNaWEpEWVhObEtDbDhmRndpYUdWaWNsd2lQVDFuYjI5bkxreFBRMEZNUlM1emRXSnpkSEpwYm1jb05DdzRLUzUwYjB4dmQyVnlRMkZ6WlNncGZIeGNJbTVyYjI5Y0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RRc09Da3VkRzlNYjNkbGNrTmhjMlVvS1h4OFhDSnliMmhuWENJOVBXZHZiMmN1VEU5RFFVeEZMbk4xWW5OMGNtbHVaeWcwTERncExuUnZURzkzWlhKRFlYTmxLQ2w4ZkZ3aWRHaGhZVndpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29OQ3c0S1M1MGIweHZkMlZ5UTJGelpTZ3BLVHRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMa1p2Y20xaGREMTdURkpGT2x3aVhGeDFNakF5WVZ3aUxGSk1SVHBjSWx4Y2RUSXdNbUpjSWl4UVJFWTZYQ0pjWEhVeU1ESmpYQ0lzVEZKTk9sd2lYRngxTWpBd1pWd2lMRkpNVFRwY0lseGNkVEl3TUdaY0luMDdaMjl2Wnk1cE1UaHVMbUpwWkdrdVJHbHlQWHRNVkZJNk1TeFNWRXc2TFRFc1RrVlZWRkpCVERvd2ZUdG5iMjluTG1reE9HNHVZbWxrYVM1U1NVZElWRDFjSW5KcFoyaDBYQ0k3WjI5dlp5NXBNVGh1TG1KcFpHa3VURVZHVkQxY0lteGxablJjSWp0bmIyOW5MbWt4T0c0dVltbGthUzVKTVRoT1gxSkpSMGhVUFdkdmIyY3VhVEU0Ymk1aWFXUnBMa2xUWDFKVVREOW5iMjluTG1reE9HNHVZbWxrYVM1TVJVWlVPbWR2YjJjdWFURTRiaTVpYVdScExsSkpSMGhVTzJkdmIyY3VhVEU0Ymk1aWFXUnBMa2t4T0U1ZlRFVkdWRDFuYjI5bkxta3hPRzR1WW1sa2FTNUpVMTlTVkV3L1oyOXZaeTVwTVRodUxtSnBaR2t1VWtsSFNGUTZaMjl2Wnk1cE1UaHVMbUpwWkdrdVRFVkdWRHRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMblJ2UkdseVBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVYQ0p1ZFcxaVpYSmNJajA5ZEhsd1pXOW1JR0UvTUR4aFAyZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNU1WRkk2TUQ1aFAyZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNVNWRXc2WWo5dWRXeHNPbWR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVPUlZWVVVrRk1PbTUxYkd3OVBXRS9iblZzYkRwaFAyZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNVNWRXc2WjI5dlp5NXBNVGh1TG1KcFpHa3VSR2x5TGt4VVVuMDdaMjl2Wnk1cE1UaHVMbUpwWkdrdWJIUnlRMmhoY25OZlBWd2lRUzFhWVMxNlhGeDFNREJqTUMxY1hIVXdNR1EyWEZ4MU1EQmtPQzFjWEhVd01HWTJYRngxTURCbU9DMWNYSFV3TW1JNFhGeDFNRE13TUMxY1hIVXdOVGt3WEZ4MU1Ea3dNQzFjWEhVeFptWm1YRngxTWpBd1pWeGNkVEpqTURBdFhGeDFaRGd3TVZ4Y2RXUTRNRFF0WEZ4MVpEZ3pPVnhjZFdRNE0yTXRYRngxWkdKbVpseGNkV1k1TURBdFhGeDFabUl4WTF4Y2RXWmxNREF0WEZ4MVptVTJabHhjZFdabFptUXRYRngxWm1abVpsd2lPMmR2YjJjdWFURTRiaTVpYVdScExuSjBiRU5vWVhKelh6MWNJbHhjZFRBMU9URXRYRngxTURabFpseGNkVEEyWm1FdFhGeDFNRGhtWmx4Y2RUSXdNR1pjWEhWa09EQXlMVnhjZFdRNE1ETmNYSFZrT0ROaExWeGNkV1E0TTJKY1hIVm1ZakZrTFZ4Y2RXWmtabVpjWEhWbVpUY3dMVnhjZFdabFptTmNJanRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMbWgwYld4VGEybHdVbVZuWHowdlBGdGVQbDBxUG53bVcxNDdYU3M3TDJjN1oyOXZaeTVwTVRodUxtSnBaR2t1YzNSeWFYQklkRzFzU1daT1pXVmtaV1JmUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHSS9ZUzV5WlhCc1lXTmxLR2R2YjJjdWFURTRiaTVpYVdScExtaDBiV3hUYTJsd1VtVm5YeXhjSWx3aUtUcGhmVHRuYjI5bkxta3hPRzR1WW1sa2FTNXlkR3hEYUdGeVVtVm5YejF1WlhjZ1VtVm5SWGh3S0Z3aVcxd2lLMmR2YjJjdWFURTRiaTVpYVdScExuSjBiRU5vWVhKelh5dGNJbDFjSWlrN1oyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVEyaGhjbEpsWjE4OWJtVjNJRkpsWjBWNGNDaGNJbHRjSWl0bmIyOW5MbWt4T0c0dVltbGthUzVzZEhKRGFHRnljMThyWENKZFhDSXBPMmR2YjJjdWFURTRiaTVpYVdScExtaGhjMEZ1ZVZKMGJEMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxta3hPRzR1WW1sa2FTNXlkR3hEYUdGeVVtVm5YeTUwWlhOMEtHZHZiMmN1YVRFNGJpNWlhV1JwTG5OMGNtbHdTSFJ0YkVsbVRtVmxaR1ZrWHloaExHSXBLWDA3WjI5dlp5NXBNVGh1TG1KcFpHa3VhR0Z6VW5Sc1EyaGhjajFuYjI5bkxta3hPRzR1WW1sa2FTNW9ZWE5CYm5sU2RHdzdYRzVuYjI5bkxta3hPRzR1WW1sa2FTNW9ZWE5CYm5sTWRISTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UTJoaGNsSmxaMTh1ZEdWemRDaG5iMjluTG1reE9HNHVZbWxrYVM1emRISnBjRWgwYld4SlprNWxaV1JsWkY4b1lTeGlLU2w5TzJkdmIyY3VhVEU0Ymk1aWFXUnBMbXgwY2xKbFh6MXVaWGNnVW1WblJYaHdLRndpWGx0Y0lpdG5iMjluTG1reE9HNHVZbWxrYVM1c2RISkRhR0Z5YzE4clhDSmRYQ0lwTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkZKbFh6MXVaWGNnVW1WblJYaHdLRndpWGx0Y0lpdG5iMjluTG1reE9HNHVZbWxrYVM1eWRHeERhR0Z5YzE4clhDSmRYQ0lwTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbWx6VW5Sc1EyaGhjajFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3VjblJzVW1WZkxuUmxjM1FvWVNsOU8yZHZiMmN1YVRFNGJpNWlhV1JwTG1selRIUnlRMmhoY2oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVVtVmZMblJsYzNRb1lTbDlPMmR2YjJjdWFURTRiaTVpYVdScExtbHpUbVYxZEhKaGJFTm9ZWEk5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SVdkdmIyY3VhVEU0Ymk1aWFXUnBMbWx6VEhSeVEyaGhjaWhoS1NZbUlXZHZiMmN1YVRFNGJpNWlhV1JwTG1selVuUnNRMmhoY2loaEtYMDdYRzVuYjI5bkxta3hPRzR1WW1sa2FTNXNkSEpFYVhKRGFHVmphMUpsWHoxdVpYY2dVbVZuUlhod0tGd2lYbHRlWENJcloyOXZaeTVwTVRodUxtSnBaR2t1Y25Sc1EyaGhjbk5mSzF3aVhTcGJYQ0lyWjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UTJoaGNuTmZLMXdpWFZ3aUtUdG5iMjluTG1reE9HNHVZbWxrYVM1eWRHeEVhWEpEYUdWamExSmxYejF1WlhjZ1VtVm5SWGh3S0Z3aVhsdGVYQ0lyWjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UTJoaGNuTmZLMXdpWFNwYlhDSXJaMjl2Wnk1cE1UaHVMbUpwWkdrdWNuUnNRMmhoY25OZksxd2lYVndpS1R0bmIyOW5MbWt4T0c0dVltbGthUzV6ZEdGeWRITlhhWFJvVW5Sc1BXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR2R2YjJjdWFURTRiaTVpYVdScExuSjBiRVJwY2tOb1pXTnJVbVZmTG5SbGMzUW9aMjl2Wnk1cE1UaHVMbUpwWkdrdWMzUnlhWEJJZEcxc1NXWk9aV1ZrWldSZktHRXNZaWtwZlR0bmIyOW5MbWt4T0c0dVltbGthUzVwYzFKMGJGUmxlSFE5WjI5dlp5NXBNVGh1TG1KcFpHa3VjM1JoY25SelYybDBhRkowYkR0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG5OMFlYSjBjMWRwZEdoTWRISTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UkdseVEyaGxZMnRTWlY4dWRHVnpkQ2huYjI5bkxta3hPRzR1WW1sa2FTNXpkSEpwY0VoMGJXeEpaazVsWldSbFpGOG9ZU3hpS1NsOU8yZHZiMmN1YVRFNGJpNWlhV1JwTG1selRIUnlWR1Y0ZEQxbmIyOW5MbWt4T0c0dVltbGthUzV6ZEdGeWRITlhhWFJvVEhSeU8yZHZiMmN1YVRFNGJpNWlhV1JwTG1selVtVnhkV2x5WldSTWRISlNaVjg5TDE1b2RIUndPbHhjTDF4Y0x5NHFMenRuYjI5bkxta3hPRzR1WW1sa2FTNXBjMDVsZFhSeVlXeFVaWGgwUFdaMWJtTjBhVzl1S0dFc1lpbDdZVDFuYjI5bkxta3hPRzR1WW1sa2FTNXpkSEpwY0VoMGJXeEpaazVsWldSbFpGOG9ZU3hpS1R0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3VhWE5TWlhGMWFYSmxaRXgwY2xKbFh5NTBaWE4wS0dFcGZId2haMjl2Wnk1cE1UaHVMbUpwWkdrdWFHRnpRVzU1VEhSeUtHRXBKaVloWjI5dlp5NXBNVGh1TG1KcFpHa3VhR0Z6UVc1NVVuUnNLR0VwZlR0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG14MGNrVjRhWFJFYVhKRGFHVmphMUpsWHoxdVpYY2dVbVZuUlhod0tGd2lXMXdpSzJkdmIyY3VhVEU0Ymk1aWFXUnBMbXgwY2tOb1lYSnpYeXRjSWwxYlhsd2lLMmR2YjJjdWFURTRiaTVpYVdScExuSjBiRU5vWVhKelh5dGNJbDBxSkZ3aUtUdG5iMjluTG1reE9HNHVZbWxrYVM1eWRHeEZlR2wwUkdseVEyaGxZMnRTWlY4OWJtVjNJRkpsWjBWNGNDaGNJbHRjSWl0bmIyOW5MbWt4T0c0dVltbGthUzV5ZEd4RGFHRnljMThyWENKZFcxNWNJaXRuYjI5bkxta3hPRzR1WW1sa2FTNXNkSEpEYUdGeWMxOHJYQ0pkS2lSY0lpazdaMjl2Wnk1cE1UaHVMbUpwWkdrdVpXNWtjMWRwZEdoTWRISTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UlhocGRFUnBja05vWldOclVtVmZMblJsYzNRb1oyOXZaeTVwTVRodUxtSnBaR2t1YzNSeWFYQklkRzFzU1daT1pXVmtaV1JmS0dFc1lpa3BmVHRuYjI5bkxta3hPRzR1WW1sa2FTNXBjMHgwY2tWNGFYUlVaWGgwUFdkdmIyY3VhVEU0Ymk1aWFXUnBMbVZ1WkhOWGFYUm9USFJ5TzF4dVoyOXZaeTVwTVRodUxtSnBaR2t1Wlc1a2MxZHBkR2hTZEd3OVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdaMjl2Wnk1cE1UaHVMbUpwWkdrdWNuUnNSWGhwZEVScGNrTm9aV05yVW1WZkxuUmxjM1FvWjI5dlp5NXBNVGh1TG1KcFpHa3VjM1J5YVhCSWRHMXNTV1pPWldWa1pXUmZLR0VzWWlrcGZUdG5iMjluTG1reE9HNHVZbWxrYVM1cGMxSjBiRVY0YVhSVVpYaDBQV2R2YjJjdWFURTRiaTVpYVdScExtVnVaSE5YYVhSb1VuUnNPMmR2YjJjdWFURTRiaTVpYVdScExuSjBiRXh2WTJGc1pYTlNaVjg5TDE0b1lYSjhZMnRpZkdSMmZHaGxmR2wzZkdaaGZHNXhiM3h3YzN4elpIeDFaM3gxY254NWFYd3VLbHN0WDEwb1FXUnNiWHhCY21GaWZFaGxZbko4VG10dmIzeFNiMmhuZkZSb1lXRXBLU2cvSVM0cVd5MWZYU2hNWVhSdWZFTjVjbXdwS0NSOExYeGZLU2tvSkh3dGZGOHBMMms3WjI5dlp5NXBNVGh1TG1KcFpHa3VhWE5TZEd4TVlXNW5kV0ZuWlQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1Y25Sc1RHOWpZV3hsYzFKbFh5NTBaWE4wS0dFcGZUdG5iMjluTG1reE9HNHVZbWxrYVM1aWNtRmphMlYwUjNWaGNtUlVaWGgwVW1WZlBTOG9YRndvTGlvL1hGd3BLeWw4S0Z4Y1d5NHFQMXhjWFNzcGZDaGNYSHN1S2o5Y1hIMHJLWHdvUEM0cVB6NHJLUzluTzF4dVoyOXZaeTVwTVRodUxtSnBaR2t1WjNWaGNtUkNjbUZqYTJWMFNXNVVaWGgwUFdaMWJtTjBhVzl1S0dFc1lpbDdZajBvZG05cFpDQXdQVDA5WWo5bmIyOW5MbWt4T0c0dVltbGthUzVvWVhOQmJubFNkR3dvWVNrNllpay9aMjl2Wnk1cE1UaHVMbUpwWkdrdVJtOXliV0YwTGxKTVRUcG5iMjluTG1reE9HNHVZbWxrYVM1R2IzSnRZWFF1VEZKTk8zSmxkSFZ5YmlCaExuSmxjR3hoWTJVb1oyOXZaeTVwTVRodUxtSnBaR2t1WW5KaFkydGxkRWQxWVhKa1ZHVjRkRkpsWHl4aUsxd2lKQ1pjSWl0aUtYMDdaMjl2Wnk1cE1UaHVMbUpwWkdrdVpXNW1iM0pqWlZKMGJFbHVTSFJ0YkQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY201Y0lqeGNJajA5WVM1amFHRnlRWFFvTUNrL1lTNXlaWEJzWVdObEtDODhYRngzS3k4c1hDSWtKaUJrYVhJOWNuUnNYQ0lwT2x3aVhGeHVQSE53WVc0Z1pHbHlQWEowYkQ1Y0lpdGhLMXdpUEM5emNHRnVQbHdpZlR0bmIyOW5MbWt4T0c0dVltbGthUzVsYm1admNtTmxVblJzU1c1VVpYaDBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxta3hPRzR1WW1sa2FTNUdiM0p0WVhRdVVreEZLMkVyWjI5dlp5NXBNVGh1TG1KcFpHa3VSbTl5YldGMExsQkVSbjA3WEc1bmIyOW5MbWt4T0c0dVltbGthUzVsYm1admNtTmxUSFJ5U1c1SWRHMXNQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnlibHdpUEZ3aVBUMWhMbU5vWVhKQmRDZ3dLVDloTG5KbGNHeGhZMlVvTHp4Y1hIY3JMeXhjSWlRbUlHUnBjajFzZEhKY0lpazZYQ0pjWEc0OGMzQmhiaUJrYVhJOWJIUnlQbHdpSzJFclhDSThMM053WVc0K1hDSjlPMmR2YjJjdWFURTRiaTVpYVdScExtVnVabTl5WTJWTWRISkpibFJsZUhROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YVRFNGJpNWlhV1JwTGtadmNtMWhkQzVNVWtVcllTdG5iMjluTG1reE9HNHVZbWxrYVM1R2IzSnRZWFF1VUVSR2ZUdG5iMjluTG1reE9HNHVZbWxrYVM1a2FXMWxibk5wYjI1elVtVmZQUzg2WEZ4ektpaGJMbHhjWkYxYkxseGNkMTBxS1Z4Y2N5c29XeTVjWEdSZFd5NWNYSGRkS2lsY1hITXJLRnN1WEZ4a1hWc3VYRngzWFNvcFhGeHpLeWhiTGx4Y1pGMWJMbHhjZDEwcUtTOW5PMmR2YjJjdWFURTRiaTVpYVdScExteGxablJTWlY4OUwyeGxablF2WjJrN1oyOXZaeTVwTVRodUxtSnBaR2t1Y21sbmFIUlNaVjg5TDNKcFoyaDBMMmRwTzJkdmIyY3VhVEU0Ymk1aWFXUnBMblJsYlhCU1pWODlMeVVsSlNVdlp6dGNibWR2YjJjdWFURTRiaTVpYVdScExtMXBjbkp2Y2tOVFV6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZUzV5WlhCc1lXTmxLR2R2YjJjdWFURTRiaTVpYVdScExtUnBiV1Z1YzJsdmJuTlNaVjhzWENJNkpERWdKRFFnSkRNZ0pESmNJaWt1Y21Wd2JHRmpaU2huYjI5bkxta3hPRzR1WW1sa2FTNXNaV1owVW1WZkxGd2lKU1VsSlZ3aUtTNXlaWEJzWVdObEtHZHZiMmN1YVRFNGJpNWlhV1JwTG5KcFoyaDBVbVZmTEdkdmIyY3VhVEU0Ymk1aWFXUnBMa3hGUmxRcExuSmxjR3hoWTJVb1oyOXZaeTVwTVRodUxtSnBaR2t1ZEdWdGNGSmxYeXhuYjI5bkxta3hPRzR1WW1sa2FTNVNTVWRJVkNsOU8yZHZiMmN1YVRFNGJpNWlhV1JwTG1SdmRXSnNaVkYxYjNSbFUzVmljM1JwZEhWMFpWSmxYejB2S0Z0Y1hIVXdOVGt4TFZ4Y2RUQTFaakpkS1Z3aUwyYzdaMjl2Wnk1cE1UaHVMbUpwWkdrdWMybHVaMnhsVVhWdmRHVlRkV0p6ZEdsMGRYUmxVbVZmUFM4b1cxeGNkVEExT1RFdFhGeDFNRFZtTWwwcEp5OW5PMXh1WjI5dlp5NXBNVGh1TG1KcFpHa3VibTl5YldGc2FYcGxTR1ZpY21WM1VYVnZkR1U5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdFdWNtVndiR0ZqWlNobmIyOW5MbWt4T0c0dVltbGthUzVrYjNWaWJHVlJkVzkwWlZOMVluTjBhWFIxZEdWU1pWOHNYQ0lrTVZ4Y2RUQTFaalJjSWlrdWNtVndiR0ZqWlNobmIyOW5MbWt4T0c0dVltbGthUzV6YVc1bmJHVlJkVzkwWlZOMVluTjBhWFIxZEdWU1pWOHNYQ0lrTVZ4Y2RUQTFaak5jSWlsOU8yZHZiMmN1YVRFNGJpNWlhV1JwTG5kdmNtUlRaWEJoY21GMGIzSlNaVjg5TDF4Y2N5c3ZPMmR2YjJjdWFURTRiaTVpYVdScExtaGhjMDUxYldWeVlXeHpVbVZmUFM5YlhGeGtYRngxTURabU1DMWNYSFV3Tm1ZNVhTODdaMjl2Wnk1cE1UaHVMbUpwWkdrdWNuUnNSR1YwWldOMGFXOXVWR2h5WlhOb2IyeGtYejB1TkR0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG1WemRHbHRZWFJsUkdseVpXTjBhVzl1UFdaMWJtTjBhVzl1S0dFc1lpbDdkbUZ5SUdNOU1DeGtQVEFzWlQwaE1UdGhQV2R2YjJjdWFURTRiaTVpYVdScExuTjBjbWx3U0hSdGJFbG1UbVZsWkdWa1h5aGhMR0lwTG5Od2JHbDBLR2R2YjJjdWFURTRiaTVpYVdScExuZHZjbVJUWlhCaGNtRjBiM0pTWlY4cE8yWnZjaWhpUFRBN1lqeGhMbXhsYm1kMGFEdGlLeXNwZTNaaGNpQm1QV0ZiWWwwN1oyOXZaeTVwTVRodUxtSnBaR2t1YzNSaGNuUnpWMmwwYUZKMGJDaG1LVDhvWXlzckxHUXJLeWs2WjI5dlp5NXBNVGh1TG1KcFpHa3VhWE5TWlhGMWFYSmxaRXgwY2xKbFh5NTBaWE4wS0dZcFAyVTlJVEE2WjI5dlp5NXBNVGh1TG1KcFpHa3VhR0Z6UVc1NVRIUnlLR1lwUDJRckt6cG5iMjluTG1reE9HNHVZbWxrYVM1b1lYTk9kVzFsY21Gc2MxSmxYeTUwWlhOMEtHWXBKaVlvWlQwaE1DbDljbVYwZFhKdUlEQTlQV1EvWlQ5bmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVRGUlNPbWR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVPUlZWVVVrRk1PbU12WkQ1bmIyOW5MbWt4T0c0dVltbGthUzV5ZEd4RVpYUmxZM1JwYjI1VWFISmxjMmh2YkdSZlAyZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNVNWRXc2WjI5dlp5NXBNVGh1TG1KcFpHa3VSR2x5TGt4VVVuMDdYRzVuYjI5bkxta3hPRzR1WW1sa2FTNWtaWFJsWTNSU2RHeEVhWEpsWTNScGIyNWhiR2wwZVQxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQm5iMjluTG1reE9HNHVZbWxrYVM1bGMzUnBiV0YwWlVScGNtVmpkR2x2YmloaExHSXBQVDFuYjI5bkxta3hPRzR1WW1sa2FTNUVhWEl1VWxSTWZUdG5iMjluTG1reE9HNHVZbWxrYVM1elpYUkZiR1Z0Wlc1MFJHbHlRVzVrUVd4cFoyNDlablZ1WTNScGIyNG9ZU3hpS1h0aEppWW9ZajFuYjI5bkxta3hPRzR1WW1sa2FTNTBiMFJwY2loaUtTa21KaWhoTG5OMGVXeGxMblJsZUhSQmJHbG5iajFpUFQxbmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVVsUk1QMmR2YjJjdWFURTRiaTVpYVdScExsSkpSMGhVT21kdmIyY3VhVEU0Ymk1aWFXUnBMa3hGUmxRc1lTNWthWEk5WWowOVoyOXZaeTVwTVRodUxtSnBaR2t1UkdseUxsSlVURDljSW5KMGJGd2lPbHdpYkhSeVhDSXBmVHRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMbk5sZEVWc1pXMWxiblJFYVhKQ2VWUmxlSFJFYVhKbFkzUnBiMjVoYkdsMGVUMW1kVzVqZEdsdmJpaGhMR0lwZTNOM2FYUmphQ2huYjI5bkxta3hPRzR1WW1sa2FTNWxjM1JwYldGMFpVUnBjbVZqZEdsdmJpaGlLU2w3WTJGelpTQm5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVURlJTT21FdVpHbHlQVndpYkhSeVhDSTdZbkpsWVdzN1kyRnpaU0JuYjI5bkxta3hPRzR1WW1sa2FTNUVhWEl1VWxSTU9tRXVaR2x5UFZ3aWNuUnNYQ0k3WW5KbFlXczdaR1ZtWVhWc2REcGhMbkpsYlc5MlpVRjBkSEpwWW5WMFpTaGNJbVJwY2x3aUtYMTlPMmR2YjJjdWFURTRiaTVpYVdScExrUnBjbVZqZEdsdmJtRnNVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdmVHRuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzUFdaMWJtTjBhVzl1S0NsN2RHaHBjeTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmUFZ3aVhDSTdkR2hwY3k1MGNuVnpkR1ZrVlZKTVh6MXVkV3hzTzNSb2FYTXVWRkpWVTFSRlJGOVNSVk5QVlZKRFJWOVZVa3hmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBXZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmZlR0bmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xuQnliM1J2ZEhsd1pTNXBiWEJzWlcxbGJuUnpSMjl2WjFOMGNtbHVaMVI1Y0dWa1UzUnlhVzVuUFNFd08yZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VjSEp2ZEc5MGVYQmxMbWRsZEZSNWNHVmtVM1J5YVc1blZtRnNkV1U5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVWNuVnpkR1ZrVW1WemIzVnlZMlZWY214WGNtRndjR1ZrVm1Gc2RXVmZMblJ2VTNSeWFXNW5LQ2w5TzF4dVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNXdjbTkwYjNSNWNHVXVhVzF3YkdWdFpXNTBjMGR2YjJkSk1UaHVRbWxrYVVScGNtVmpkR2x2Ym1Gc1UzUnlhVzVuUFNFd08yZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VjSEp2ZEc5MGVYQmxMbWRsZEVScGNtVmpkR2x2YmoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVRGUlNmVHRjYm1kdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dWNISnZkRzkwZVhCbExtTnNiMjVsVjJsMGFGQmhjbUZ0Y3oxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBXZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VkVzUzY21Gd0tIUm9hWE1wTzJNOVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNVZVa3hmVUVGU1FVMWZVRUZTVTBWU1h5NWxlR1ZqS0dNcE8zWmhjaUJrUFdOYk0xMThmRndpWENJN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dVkzSmxZWFJsVkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9ZMXN4WFN0bmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xuTjBjbWx1WjJsbWVWQmhjbUZ0YzE4b1hDSS9YQ0lzWTFzeVhYeDhYQ0pjSWl4aEtTdG5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbk4wY21sdVoybG1lVkJoY21GdGMxOG9YQ0lqWENJc1pDeGlLU2w5TzF4dVoyOXZaeTVFUlVKVlJ5WW1LR2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1WENKVWNuVnpkR1ZrVW1WemIzVnlZMlZWY214N1hDSXJkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhYY21Gd2NHVmtWbUZzZFdWZksxd2lmVndpZlNrN1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhBOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkRlZTVENoaEtTNTBiMU4wY21sdVp5Z3BmVHRjYm1kdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dWRXNTNjbUZ3VkhKMWMzUmxaRk5qY21sd2RGVlNURDFtZFc1amRHbHZiaWhoS1h0cFppaGhJR2x1YzNSaGJtTmxiMllnWjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkNZbVlTNWpiMjV6ZEhKMVkzUnZjajA5UFdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213bUptRXVWRkpWVTFSRlJGOVNSVk5QVlZKRFJWOVZVa3hmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBUMDlaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzVVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY4cGNtVjBkWEp1SUdFdWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzVjNKaGNIQmxaRlpoYkhWbFh6dG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJbVY0Y0dWamRHVmtJRzlpYW1WamRDQnZaaUIwZVhCbElGUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDd2daMjkwSUNkY0lpdGhLMXdpSnlCdlppQjBlWEJsSUZ3aUsyZHZiMmN1ZEhsd1pVOW1LR0VwS1R0eVpYUjFjbTVjSW5SNWNHVmZaWEp5YjNJNlZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1hDSjlPMXh1WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCaExuUnlkWE4wWldSVlVreGZQMkV1ZEhKMWMzUmxaRlZTVEY4NloyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhBb1lTbDlPMXh1WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1bWIzSnRZWFE5Wm5WdVkzUnBiMjRvWVN4aUtYdDJZWElnWXoxbmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrN2FXWW9JV2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1UWtGVFJWOVZVa3hmTG5SbGMzUW9ZeWtwZEdoeWIzY2dSWEp5YjNJb1hDSkpiblpoYkdsa0lGUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDQm1iM0p0WVhRNklGd2lLMk1wTzJFOVl5NXlaWEJzWVdObEtHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VSazlTVFVGVVgwMUJVa3RGVWw4c1puVnVZM1JwYjI0b1lTeGxLWHRwWmlnaFQySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tHSXNaU2twZEdoeWIzY2dSWEp5YjNJb0owWnZkVzVrSUcxaGNtdGxjaXdnWENJbksyVXJKMXdpTENCcGJpQm1iM0p0WVhRZ2MzUnlhVzVuTENCY0lpY3JZeXNuWENJc0lHSjFkQ0J1YnlCMllXeHBaQ0JzWVdKbGJDQnRZWEJ3YVc1bklHWnZkVzVrSUdsdUlHRnlaM002SUNjclNsTlBUaTV6ZEhKcGJtZHBabmtvWWlrcE8yRTlZbHRsWFR0eVpYUjFjbTRnWVNCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMFAyZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExuVnVkM0poY0NoaEtUcGNibVZ1WTI5a1pWVlNTVU52YlhCdmJtVnVkQ2hUZEhKcGJtY29ZU2twZlNrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dVkzSmxZWFJsVkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9ZU2w5TzJkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dVJrOVNUVUZVWDAxQlVrdEZVbDg5THlWN0tGeGNkeXNwZlM5bk8yZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VRa0ZUUlY5VlVreGZQUzllS0Nob2RIUndjem9wUDF4Y0wxeGNMMXN3TFRsaExYb3VPbHRjWEYwdFhTdGNYQzk4WEZ3dlcxNHZYRnhjWEYxOFcxNDZMMXhjWEZ3bFhTdGNYQzk4VzE0NkwxeGNYRndsWFNwYlB5TmRmR0ZpYjNWME9tSnNZVzVySXlrdmFUdG5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbFZTVEY5UVFWSkJUVjlRUVZKVFJWSmZQUzllS0Z0ZVB5TmRLaWtvWEZ3L1cxNGpYU29wUHlnalcxeGNjMXhjVTEwcUtUOHZPMXh1WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1bWIzSnRZWFJYYVhSb1VHRnlZVzF6UFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG1admNtMWhkQ2hoTEdJcExtTnNiMjVsVjJsMGFGQmhjbUZ0Y3loakxHUXBmVHRuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG1aeWIyMURiMjV6ZEdGdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzVqY21WaGRHVlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteFRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNobmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrcGZUdG5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbVp5YjIxRGIyNXpkR0Z1ZEhNOVpuVnVZM1JwYjI0b1lTbDdabTl5S0haaGNpQmlQVndpWENJc1l6MHdPMk04WVM1c1pXNW5kR2c3WXlzcktXSXJQV2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBMblZ1ZDNKaGNDaGhXMk5kS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1amNtVmhkR1ZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGlLWDA3WEc1bmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejE3ZlR0Y2JtZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VZM0psWVhSbFZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlU5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5Ym1WM0lHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtdzdZaTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmUFdkdmIyY3VhSFJ0YkM1MGNuVnpkR1ZrZEhsd1pYTXVVRkpKVmtGVVJWOUVUMTlPVDFSZlFVTkRSVk5UWDA5U1gwVk1VMFZmVUU5TVNVTlpQMmR2YjJjdWFIUnRiQzUwY25WemRHVmtkSGx3WlhNdVVGSkpWa0ZVUlY5RVQxOU9UMVJmUVVORFJWTlRYMDlTWDBWTVUwVmZVRTlNU1VOWkxtTnlaV0YwWlZOamNtbHdkRlZTVENoaEtUcGhPMmR2YjJjdWFIUnRiQzUwY25WemRHVmtkSGx3WlhNdVVGSkpWa0ZVUlY5RVQxOU9UMVJmUVVORFJWTlRYMDlTWDBWTVUwVmZVRTlNU1VOWkppWW9ZaTUwY25WemRHVmtWVkpNWHoxbmIyOW5MbWgwYld3dWRISjFjM1JsWkhSNWNHVnpMbEJTU1ZaQlZFVmZSRTlmVGs5VVgwRkRRMFZUVTE5UFVsOUZURk5GWDFCUFRFbERXUzVqY21WaGRHVlZVa3dvWVNrcE8zSmxkSFZ5YmlCaWZUdGNibWR2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1YzNSeWFXNW5hV1o1VUdGeVlXMXpYejFtZFc1amRHbHZiaWhoTEdJc1l5bDdhV1lvYm5Wc2JEMDlZeWx5WlhSMWNtNGdZanRwWmlobmIyOW5MbWx6VTNSeWFXNW5LR01wS1hKbGRIVnliaUJqUDJFclpXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtHTXBPbHdpWENJN1ptOXlLSFpoY2lCa0lHbHVJR01wZTNaaGNpQmxQV05iWkYwN1pUMW5iMjluTG1selFYSnlZWGtvWlNrL1pUcGJaVjA3Wm05eUtIWmhjaUJtUFRBN1pqeGxMbXhsYm1kMGFEdG1LeXNwZTNaaGNpQm5QV1ZiWmwwN2JuVnNiQ0U5WnlZbUtHSjhmQ2hpUFdFcExHSXJQU2hpTG14bGJtZDBhRDVoTG14bGJtZDBhRDljSWlaY0lqcGNJbHdpS1N0bGJtTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb1pDa3JYQ0k5WENJclpXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtGTjBjbWx1WnlobktTa3BmWDF5WlhSMWNtNGdZbjA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3OWUzMDdaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1YzNSaGNuUnpWMmwwYUQxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQXdQVDFoTG14aGMzUkpibVJsZUU5bUtHSXNNQ2w5TzJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtVnVaSE5YYVhSb1BXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTlZUzVzWlc1bmRHZ3RZaTVzWlc1bmRHZzdjbVYwZFhKdUlEQThQV01tSm1FdWFXNWtaWGhQWmloaUxHTXBQVDFqZlR0bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNWpZWE5sU1c1elpXNXphWFJwZG1WVGRHRnlkSE5YYVhSb1BXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJREE5UFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlVOdmJYQmhjbVVvWWl4aExuTjFZbk4wY2lnd0xHSXViR1Z1WjNSb0tTbDlPMmR2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OaGMyVkpibk5sYm5OcGRHbDJaVVZ1WkhOWGFYUm9QV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SURBOVBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVTnZiWEJoY21Vb1lpeGhMbk4xWW5OMGNpaGhMbXhsYm1kMGFDMWlMbXhsYm1kMGFDeGlMbXhsYm1kMGFDa3BmVHRjYm1kdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlVWeGRXRnNjejFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCaExuUnZURzkzWlhKRFlYTmxLQ2s5UFdJdWRHOU1iM2RsY2tOaGMyVW9LWDA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNHZYbHRjWEhOY1hIaGhNRjBxSkM4dWRHVnpkQ2hoS1gwN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VkSEpwYlQxbmIyOW5MbFJTVlZOVVJVUmZVMGxVUlNZbVUzUnlhVzVuTG5CeWIzUnZkSGx3WlM1MGNtbHRQMloxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJoTG5SeWFXMG9LWDA2Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1TDE1YlhGeHpYRng0WVRCZEtpaGJYRnh6WEZ4VFhTby9LVnRjWEhOY1hIaGhNRjBxSkM4dVpYaGxZeWhoS1ZzeFhYMDdaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTJGelpVbHVjMlZ1YzJsMGFYWmxRMjl0Y0dGeVpUMW1kVzVqZEdsdmJpaGhMR0lwZTJFOVUzUnlhVzVuS0dFcExuUnZURzkzWlhKRFlYTmxLQ2s3WWoxVGRISnBibWNvWWlrdWRHOU1iM2RsY2tOaGMyVW9LVHR5WlhSMWNtNGdZVHhpUHkweE9tRTlQV0kvTURveGZUdGNibWR2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG01bGQweHBibVZVYjBKeVBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0V1Y21Wd2JHRmpaU2d2S0Z4Y2NseGNibnhjWEhKOFhGeHVLUzluTEdJL1hDSThZbklnTHo1Y0lqcGNJanhpY2o1Y0lpbDlPMXh1WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFIUnRiRVZ6WTJGd1pUMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHSXBZVDFoTG5KbGNHeGhZMlVvWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVFVMVFYMUpGWHl4Y0lpWmhiWEE3WENJcExuSmxjR3hoWTJVb1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VURlJmVWtWZkxGd2lKbXgwTzF3aUtTNXlaWEJzWVdObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMa2RVWDFKRlh5eGNJaVpuZER0Y0lpa3VjbVZ3YkdGalpTaG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVSVlU5VVgxSkZYeXhjSWlaeGRXOTBPMXdpS1M1eVpYQnNZV05sS0dkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xsTkpUa2RNUlY5UlZVOVVSVjlTUlY4c1hDSW1Jek01TzF3aUtTNXlaWEJzWVdObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMazVWVEV4ZlVrVmZMRndpSmlNd08xd2lLVHRsYkhObGUybG1LQ0ZuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1QlRFeGZVa1ZmTG5SbGMzUW9ZU2twY21WMGRYSnVJR0U3TFRFaFBXRXVhVzVrWlhoUFppaGNJaVpjSWlrbUppaGhQV0V1Y21Wd2JHRmpaU2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1QlRWQmZVa1ZmTEZ3aUptRnRjRHRjSWlrcE95MHhJVDFoTG1sdVpHVjRUMllvWENJOFhDSXBKaVlvWVQxaExuSmxjR3hoWTJVb1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VURlJmVWtWZkxGeHVYQ0ltYkhRN1hDSXBLVHN0TVNFOVlTNXBibVJsZUU5bUtGd2lQbHdpS1NZbUtHRTlZUzV5WlhCc1lXTmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTGtkVVgxSkZYeXhjSWlabmREdGNJaWtwT3kweElUMWhMbWx1WkdWNFQyWW9KMXdpSnlrbUppaGhQV0V1Y21Wd2JHRmpaU2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1UlZVOVVYMUpGWHl4Y0lpWnhkVzkwTzF3aUtTazdMVEVoUFdFdWFXNWtaWGhQWmloY0lpZGNJaWttSmloaFBXRXVjbVZ3YkdGalpTaG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVUU1U1SFRFVmZVVlZQVkVWZlVrVmZMRndpSmlNek9UdGNJaWtwT3kweElUMWhMbWx1WkdWNFQyWW9YQ0pjWEhnd01Gd2lLU1ltS0dFOVlTNXlaWEJzWVdObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMazVWVEV4ZlVrVmZMRndpSmlNd08xd2lLU2w5Y21WMGRYSnVJR0Y5TzJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xrRk5VRjlTUlY4OUx5WXZaenRuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1TVZGOVNSVjg5THp3dlp6dG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVIVkY5U1JWODlMejR2Wnp0bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNVJWVTlVWDFKRlh6MHZYQ0l2Wnp0bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNVRTVTVIVEVWZlVWVlBWRVZmVWtWZlBTOG5MMmM3WEc1bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNU9WVXhNWDFKRlh6MHZYRng0TURBdlp6dG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVCVEV4ZlVrVmZQUzliWEZ4NE1EQW1QRDVjSWlkZEx6dG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzUzYUdsMFpYTndZV05sUlhOallYQmxQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtNWxkMHhwYm1WVWIwSnlLR0V1Y21Wd2JHRmpaU2d2SUNBdlp5eGNJaUFtSXpFMk1EdGNJaWtzWWlsOU8yZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU52Ym5SaGFXNXpQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1TFRFaFBXRXVhVzVrWlhoUFppaGlLWDA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyRnpaVWx1YzJWdWMybDBhWFpsUTI5dWRHRnBibk05Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMjl1ZEdGcGJuTW9ZUzUwYjB4dmQyVnlRMkZ6WlNncExHSXVkRzlNYjNkbGNrTmhjMlVvS1NsOU8xeHVaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dGNHRnlaVlpsY25OcGIyNXpQV1oxYm1OMGFXOXVLR0VzWWlsN2RtRnlJR005TUR0aFBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMblJ5YVcwb1UzUnlhVzVuS0dFcEtTNXpjR3hwZENoY0lpNWNJaWs3WWoxbmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNTBjbWx0S0ZOMGNtbHVaeWhpS1NrdWMzQnNhWFFvWENJdVhDSXBPMlp2Y2loMllYSWdaRDFOWVhSb0xtMWhlQ2hoTG14bGJtZDBhQ3hpTG14bGJtZDBhQ2tzWlQwd096QTlQV01tSm1VOFpEdGxLeXNwZTNaaGNpQm1QV0ZiWlYxOGZGd2lYQ0lzWnoxaVcyVmRmSHhjSWx3aU8yUnZlMlk5THloY1hHUXFLU2hjWEVRcUtTZ3VLaWt2TG1WNFpXTW9aaWw4ZkZ0Y0lsd2lMRndpWENJc1hDSmNJaXhjSWx3aVhUdG5QUzhvWEZ4a0tpa29YRnhFS2lrb0xpb3BMeTVsZUdWaktHY3BmSHhiWENKY0lpeGNJbHdpTEZ3aVhDSXNYQ0pjSWwwN2FXWW9NRDA5Wmxzd1hTNXNaVzVuZEdnbUpqQTlQV2RiTUYwdWJHVnVaM1JvS1dKeVpXRnJPMk05TUQwOVpsc3hYUzVzWlc1bmRHZy9NRHB3WVhKelpVbHVkQ2htV3pGZExERXdLVHQyWVhJZ2FEMHdQVDFuV3pGZExteGxibWQwYUQ4d09uQmhjbk5sU1c1MEtHZGJNVjBzTVRBcE8yTTlaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dGNHRnlaVVZzWlcxbGJuUnpYeWhqTEdncGZIeG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqYjIxd1lYSmxSV3hsYldWdWRITmZLREE5UFZ4dVpsc3lYUzVzWlc1bmRHZ3NNRDA5WjFzeVhTNXNaVzVuZEdncGZIeG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqYjIxd1lYSmxSV3hsYldWdWRITmZLR1piTWwwc1oxc3lYU2s3WmoxbVd6TmRPMmM5WjFzelhYMTNhR2xzWlNnd1BUMWpLWDF5WlhSMWNtNGdZMzA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyOXRjR0Z5WlVWc1pXMWxiblJ6WHoxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQmhQR0kvTFRFNllUNWlQekU2TUgwN1oyOXZaeTVvZEcxc0xsTmhabVZWY213OVpuVnVZM1JwYjI0b0tYdDBhR2x6TG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmUFZ3aVhDSTdkR2hwY3k1VFFVWkZYMVZTVEY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWODlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmZlR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1SlRrNVBRMVZQVlZOZlUxUlNTVTVIUFZ3aVlXSnZkWFE2YVc1MllXeHBaQ042UTJ4dmMzVnlaWHBjSWp0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1d2NtOTBiM1I1Y0dVdWFXMXdiR1Z0Wlc1MGMwZHZiMmRUZEhKcGJtZFVlWEJsWkZOMGNtbHVaejBoTUR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1d2NtOTBiM1I1Y0dVdVoyVjBWSGx3WldSVGRISnBibWRXWVd4MVpUMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmTG5SdlUzUnlhVzVuS0NsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjSEp2ZEc5MGVYQmxMbWx0Y0d4bGJXVnVkSE5IYjI5blNURTRia0pwWkdsRWFYSmxZM1JwYjI1aGJGTjBjbWx1WnowaE1EdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXdjbTkwYjNSNWNHVXVaMlYwUkdseVpXTjBhVzl1UFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1TVZGSjlPMmR2YjJjdVJFVkNWVWNtSmlobmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdHlaWFIxY201Y0lsTmhabVZWY214N1hDSXJkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFZYSnNWM0poY0hCbFpGWmhiSFZsWHl0Y0luMWNJbjBwTzJkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGVlNUQ2hoS1M1MGIxTjBjbWx1WnlncGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMblZ1ZDNKaGNGUnlkWE4wWldSVlVrdzlablZ1WTNScGIyNG9ZU2w3YVdZb1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd21KbUV1VTBGR1JWOVZVa3hmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmS1hKbGRIVnliaUJoTG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmTzJkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVpYaHdaV04wWldRZ2IySnFaV04wSUc5bUlIUjVjR1VnVTJGbVpWVnliQ3dnWjI5MElDZGNJaXRoSzF3aUp5QnZaaUIwZVhCbElGd2lLMmR2YjJjdWRIbHdaVTltS0dFcEtUdHlaWFIxY201Y0luUjVjR1ZmWlhKeWIzSTZVMkZtWlZWeWJGd2lmVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVtY205dFEyOXVjM1JoYm5ROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtTnlaV0YwWlZOaFptVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BmVHRjYm1kdmIyY3VhSFJ0YkM1VFFVWkZYMDFKVFVWZlZGbFFSVjlRUVZSVVJWSk9YejB2WGlnL09tRjFaR2x2WEZ3dktEODZNMmR3Y0RKOE0yZHdjSHhoWVdOOFRERTJmRzFwWkdsOGJYQXpmRzF3Tkh4dGNHVm5mRzluWVh4dloyZDhiM0IxYzN4NExXMDBZWHg0TFhkaGRueDNZWFo4ZDJWaWJTbDhhVzFoWjJWY1hDOG9QenBpYlhCOFoybG1mR3B3WldkOGFuQm5mSEJ1WjN4MGFXWm1mSGRsWW5COGVDMXBZMjl1S1h4MFpYaDBYRnd2WTNOMmZIWnBaR1Z2WEZ3dktEODZiWEJsWjN4dGNEUjhiMmRuZkhkbFltMThjWFZwWTJ0MGFXMWxLU2tvUHpvN1hGeDNLejBvUHpwY1hIY3JmRndpVzF4Y2R6czlYU3RjSWlrcEtpUXZhVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVwYzFOaFptVk5hVzFsVkhsd1pUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5CUmtWZlRVbE5SVjlVV1ZCRlgxQkJWRlJGVWs1ZkxuUmxjM1FvWVNsOU8yZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtWnliMjFDYkc5aVBXWjFibU4wYVc5dUtHRXBlMkU5WjI5dlp5NW9kRzFzTGxOQlJrVmZUVWxOUlY5VVdWQkZYMUJCVkZSRlVrNWZMblJsYzNRb1lTNTBlWEJsS1Q5bmIyOW5MbVp6TG5WeWJDNWpjbVZoZEdWUFltcGxZM1JWY213b1lTazZaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VTVTVPVDBOVlQxVlRYMU5VVWtsT1J6dHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVkzSmxZWFJsVTJGbVpWVnliRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHRXBmVHRjYm1kdmIyY3VhSFJ0YkM1RVFWUkJYMVZTVEY5UVFWUlVSVkpPWHowdlhtUmhkR0U2S0Z0ZUxGMHFLVHRpWVhObE5qUXNXMkV0ZWpBdE9TdGNYQzlkS3owcUpDOXBPMmR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbVp5YjIxRVlYUmhWWEpzUFdaMWJtTjBhVzl1S0dFcGUyRTlZUzV5WlhCc1lXTmxLQzhvSlRCQmZDVXdSQ2t2Wnl4Y0lsd2lLVHQyWVhJZ1lqMWhMbTFoZEdOb0tHZHZiMmN1YUhSdGJDNUVRVlJCWDFWU1RGOVFRVlJVUlZKT1h5azdZajFpSmlabmIyOW5MbWgwYld3dVUwRkdSVjlOU1UxRlgxUlpVRVZmVUVGVVZFVlNUbDh1ZEdWemRDaGlXekZkS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1WTNKbFlYUmxVMkZtWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0dJL1lUcG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNUpUazVQUTFWUFZWTmZVMVJTU1U1SEtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3Vabkp2YlZSbGJGVnliRDFtZFc1amRHbHZiaWhoS1h0bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNWpZWE5sU1c1elpXNXphWFJwZG1WVGRHRnlkSE5YYVhSb0tHRXNYQ0owWld3NlhDSXBmSHdvWVQxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1SlRrNVBRMVZQVlZOZlUxUlNTVTVIS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1WTNKbFlYUmxVMkZtWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0dFcGZUdGNibWR2YjJjdWFIUnRiQzVUU1ZCZlZWSk1YMUJCVkZSRlVrNWZQUzllYzJsd1czTmRQenBiSzJFdGVqQXRPVjh1SVNRbEppY3FYRnd2UFY1Z2UzeDlmaTFkSzBBb1cyRXRlakF0T1MxZEsxeGNMaWtyVzJFdGVqQXRPVjE3TWl3Mk0zMGtMMms3WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1Wm5KdmJWTnBjRlZ5YkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1oMGJXd3VVMGxRWDFWU1RGOVFRVlJVUlZKT1h5NTBaWE4wS0dSbFkyOWtaVlZTU1VOdmJYQnZibVZ1ZENoaEtTbDhmQ2hoUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTGtsT1RrOURWVTlWVTE5VFZGSkpUa2NwTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVqY21WaGRHVlRZV1psVlhKc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWVNsOU8yZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtWnliMjFHWVdObFltOXZhMDFsYzNObGJtZGxjbFZ5YkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqWVhObFNXNXpaVzV6YVhScGRtVlRkR0Z5ZEhOWGFYUm9LR0VzWENKbVlpMXRaWE56Wlc1blpYSTZMeTl6YUdGeVpWd2lLWHg4S0dFOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dVNVNU9UME5WVDFWVFgxTlVVa2xPUnlrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG1OeVpXRjBaVk5oWm1WVmNteFRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVtY205dFYyaGhkSE5CY0hCVmNtdzlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyRnpaVWx1YzJWdWMybDBhWFpsVTNSaGNuUnpWMmwwYUNoaExGd2lkMmhoZEhOaGNIQTZMeTl6Wlc1a1hDSXBmSHdvWVQxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1SlRrNVBRMVZQVlZOZlUxUlNTVTVIS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1WTNKbFlYUmxVMkZtWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0dFcGZUdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNW1jbTl0VTIxelZYSnNQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlZOMFlYSjBjMWRwZEdnb1lTeGNJbk50Y3pwY0lpa21KbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbWx6VTIxelZYSnNRbTlrZVZaaGJHbGtYeWhoS1h4OEtHRTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VTVTVPVDBOVlQxVlRYMU5VVWtsT1J5azdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtTnlaV0YwWlZOaFptVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGhLWDA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1cGMxTnRjMVZ5YkVKdlpIbFdZV3hwWkY4OVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVlTNXBibVJsZUU5bUtGd2lJMXdpS1Rzd1BHSW1KaWhoUFdFdWMzVmljM1J5YVc1bktEQXNZaWtwTzJJOVlTNXRZWFJqYUNndld6OG1YV0p2WkhrOUwyZHBLVHRwWmlnaFlpbHlaWFIxY200aE1EdHBaaWd4UEdJdWJHVnVaM1JvS1hKbGRIVnliaUV4TzJFOVlTNXRZWFJqYUNndld6OG1YV0p2WkhrOUtGdGVKbDBxS1M4cFd6RmRPMmxtS0NGaEtYSmxkSFZ5YmlFd08zUnllWHRrWldOdlpHVlZVa2xEYjIxd2IyNWxiblFvWVNsOVkyRjBZMmdvWXlsN2NtVjBkWEp1SVRGOWNtVjBkWEp1TDE0b1B6cGJZUzE2TUMwNVhGd3RYeTUrWFh3bFd6QXRPV0V0WmwxN01uMHBLeVF2YVM1MFpYTjBLR0VwZlR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1bWNtOXRVM05vVlhKc1BXWjFibU4wYVc5dUtHRXBlMmR2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OaGMyVkpibk5sYm5OcGRHbDJaVk4wWVhKMGMxZHBkR2dvWVN4Y0luTnphRG92TDF3aUtYeDhLR0U5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1U1U1T1QwTlZUMVZUWDFOVVVrbE9SeWs3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hoS1gwN1hHNW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXpZVzVwZEdsNlpVTm9jbTl0WlVWNGRHVnVjMmx2YmxWeWJEMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVVY0ZEdWdWMybHZibFZ5YkY4b0wxNWphSEp2YldVdFpYaDBaVzV6YVc5dU9seGNMMXhjTHloYlhseGNMMTByS1Z4Y0x5OHNZU3hpS1gwN1oyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1WR2FYSmxabTk0UlhoMFpXNXphVzl1VlhKc1BXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxSWGgwWlc1emFXOXVWWEpzWHlndlhtMXZlaTFsZUhSbGJuTnBiMjQ2WEZ3dlhGd3ZLRnRlWEZ3dlhTc3BYRnd2THl4aExHSXBmVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVVZrWjJWRmVIUmxibk5wYjI1VmNtdzlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1YzJGdWFYUnBlbVZGZUhSbGJuTnBiMjVWY214ZktDOWViWE10WW5KdmQzTmxjaTFsZUhSbGJuTnBiMjQ2WEZ3dlhGd3ZLRnRlWEZ3dlhTc3BYRnd2THl4aExHSXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUlhoMFpXNXphVzl1VlhKc1h6MW1kVzVqZEdsdmJpaGhMR0lzWXlsN0tHRTlZUzVsZUdWaktHSXBLVDhvWVQxaFd6RmRMQzB4UFQwb1l5QnBibk4wWVc1alpXOW1JR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBQMXRuYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZeWxkT21NdWJXRndLR1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2w5S1NrdWFXNWtaWGhQWmloaEtTWW1LR0k5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1U1U1T1QwTlZUMVZUWDFOVVVrbE9SeWtwT21JOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dVNVNU9UME5WVDFWVFgxTlVVa2xPUnp0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1WTNKbFlYUmxVMkZtWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0dJcGZUdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNW1jbTl0VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1amNtVmhkR1ZUWVdabFZYSnNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhBb1lTa3BmVHRjYm1kdmIyY3VhSFJ0YkM1VFFVWkZYMVZTVEY5UVFWUlVSVkpPWHowdlhpZy9PaWcvT21oMGRIQnpQM3h0WVdsc2RHOThablJ3S1RwOFcxNDZMejhqWFNvb1B6cGJMejhqWFh3a0tTa3ZhVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVUUVVaRlgxVlNURjlRUVZSVVJWSk9QV2R2YjJjdWFIUnRiQzVUUVVaRlgxVlNURjlRUVZSVVJWSk9YenRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVDFtZFc1amRHbHZiaWhoS1h0cFppaGhJR2x1YzNSaGJtTmxiMllnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXdwY21WMGRYSnVJR0U3WVQxY0ltOWlhbVZqZEZ3aVBUMTBlWEJsYjJZZ1lTWW1ZUzVwYlhCc1pXMWxiblJ6UjI5dloxTjBjbWx1WjFSNWNHVmtVM1J5YVc1blAyRXVaMlYwVkhsd1pXUlRkSEpwYm1kV1lXeDFaU2dwT2xOMGNtbHVaeWhoS1R0bmIyOW5MbWgwYld3dVUwRkdSVjlWVWt4ZlVFRlVWRVZTVGw4dWRHVnpkQ2hoS1h4OEtHRTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VTVTVPVDBOVlQxVlRYMU5VVWtsT1J5azdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtTnlaV0YwWlZOaFptVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGhLWDA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlVGemMyVnlkRlZ1WTJoaGJtZGxaRDFtZFc1amRHbHZiaWhoTEdJcGUybG1LR0VnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkNseVpYUjFjbTRnWVR0aFBWd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQmhKaVpoTG1sdGNHeGxiV1Z1ZEhOSGIyOW5VM1J5YVc1blZIbHdaV1JUZEhKcGJtYy9ZUzVuWlhSVWVYQmxaRk4wY21sdVoxWmhiSFZsS0NrNlUzUnlhVzVuS0dFcE8ybG1LR0ltSmk5ZVpHRjBZVG92YVM1MFpYTjBLR0VwSmlZb1lqMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNW1jbTl0UkdGMFlWVnliQ2hoS1N4aUxtZGxkRlI1Y0dWa1UzUnlhVzVuVm1Gc2RXVW9LVDA5WVNrcGNtVjBkWEp1SUdJN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaG5iMjluTG1oMGJXd3VVMEZHUlY5VlVreGZVRUZVVkVWU1RsOHVkR1Z6ZENoaEtTeGNJaVZ6SUdSdlpYTWdibTkwSUcxaGRHTm9JSFJvWlNCellXWmxJRlZTVENCd1lYUjBaWEp1WENJc1lTbDhmQ2hoUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTGtsT1RrOURWVTlWVTE5VFZGSkpUa2NwTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVqY21WaGRHVlRZV1psVlhKc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWVNsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmUFh0OU8yZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtTnlaV0YwWlZOaFptVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpUMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMXVaWGNnWjI5dlp5NW9kRzFzTGxOaFptVlZjbXc3WWk1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFZYSnNWM0poY0hCbFpGWmhiSFZsWHoxbmIyOW5MbWgwYld3dWRISjFjM1JsWkhSNWNHVnpMbEJTU1ZaQlZFVmZSRTlmVGs5VVgwRkRRMFZUVTE5UFVsOUZURk5GWDFCUFRFbERXVDluYjI5bkxtaDBiV3d1ZEhKMWMzUmxaSFI1Y0dWekxsQlNTVlpCVkVWZlJFOWZUazlVWDBGRFEwVlRVMTlQVWw5RlRGTkZYMUJQVEVsRFdTNWpjbVZoZEdWVlVrd29ZU2s2WVR0eVpYUjFjbTRnWW4wN1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVFVSlBWVlJmUWt4QlRrczlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VZM0psWVhSbFUyRm1aVlZ5YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLRndpWVdKdmRYUTZZbXhoYm10Y0lpazdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVDFtZFc1amRHbHZiaWdwZTNSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFYzSmhjSEJsWkZaaGJIVmxYejFjSWx3aU8zUm9hWE11VTBGR1JWOVRWRmxNUlY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWODlaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY5OU8yZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVjSEp2ZEc5MGVYQmxMbWx0Y0d4bGJXVnVkSE5IYjI5blUzUnlhVzVuVkhsd1pXUlRkSEpwYm1jOUlUQTdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY4OWUzMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG1aeWIyMURiMjV6ZEdGdWREMW1kVzVqZEdsdmJpaGhLWHRoUFdkdmIyY3VjM1J5YVc1bkxrTnZibk4wTG5WdWQzSmhjQ2hoS1R0cFppZ3dQVDA5WVM1c1pXNW5kR2dwY21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1UlUxUVZGazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1bGJtUnpWMmwwYUNoaExGd2lPMXdpS1N4Y0lreGhjM1FnWTJoaGNtRmpkR1Z5SUc5bUlITjBlV3hsSUhOMGNtbHVaeUJwY3lCdWIzUWdKenNuT2lCY0lpdGhLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTnZiblJoYVc1ektHRXNYQ0k2WENJcExGd2lVM1I1YkdVZ2MzUnlhVzVuSUcxMWMzUWdZMjl1ZEdGcGJpQmhkQ0JzWldGemRDQnZibVVnSnpvbkxDQjBieUJ6Y0dWamFXWjVJR0VnWEZ4Y0ltNWhiV1U2SUhaaGJIVmxYRnhjSWlCd1lXbHlPaUJjSWl0aEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNWpjbVZoZEdWVFlXWmxVM1I1YkdWVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hoS1gwN1hHNW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMbkJ5YjNSdmRIbHdaUzVuWlhSVWVYQmxaRk4wY21sdVoxWmhiSFZsUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFYzSmhjSEJsWkZaaGJIVmxYMzA3WjI5dlp5NUVSVUpWUnlZbUtHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVYQ0pUWVdabFUzUjViR1Y3WENJcmRHaHBjeTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlRZV1psVTNSNWJHVlhjbUZ3Y0dWa1ZtRnNkV1ZmSzF3aWZWd2lmU2s3WEc1bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExuVnVkM0poY0QxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTWW1ZUzVqYjI1emRISjFZM1J2Y2owOVBXZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVW1KbUV1VTBGR1JWOVRWRmxNUlY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWODlQVDFuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTGxSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh5bHlaWFIxY200Z1lTNXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVFlXWmxVM1I1YkdWWGNtRndjR1ZrVm1Gc2RXVmZPMmR2YjJjdVlYTnpaWEowY3k1bVlXbHNLRndpWlhod1pXTjBaV1FnYjJKcVpXTjBJRzltSUhSNWNHVWdVMkZtWlZOMGVXeGxMQ0JuYjNRZ0oxd2lLMkVyWENJbklHOW1JSFI1Y0dVZ1hDSXJaMjl2Wnk1MGVYQmxUMllvWVNrcE8zSmxkSFZ5Ymx3aWRIbHdaVjlsY25KdmNqcFRZV1psVTNSNWJHVmNJbjA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1amNtVmhkR1ZUWVdabFUzUjViR1ZUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNG9ibVYzSUdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVcExtbHVhWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWOG9ZU2w5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNXdjbTkwYjNSNWNHVXVhVzVwZEZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxYejFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWTmhabVZUZEhsc1pWZHlZWEJ3WldSV1lXeDFaVjg5WVR0eVpYUjFjbTRnZEdocGMzMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVGVFZCVVdUMW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMbU55WldGMFpWTmhabVZUZEhsc1pWTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aVhDSXBPMmR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1U1U1T1QwTlZUMVZUWDFOVVVrbE9SejFjSW5wRGJHOXpkWEpsZWx3aU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVqY21WaGRHVTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlYQ0pjSWl4ak8yWnZjaWhqSUdsdUlHRXBlMmxtS0NFdlhsc3RYMkV0ZWtFdFdqQXRPVjBySkM4dWRHVnpkQ2hqS1NsMGFISnZkeUJGY25KdmNpaGNJazVoYldVZ1lXeHNiM2R6SUc5dWJIa2dXeTFmWVMxNlFTMWFNQzA1WFN3Z1oyOTBPaUJjSWl0aktUdDJZWElnWkQxaFcyTmRPMjUxYkd3aFBXUW1KaWhrUFdkdmIyY3VhWE5CY25KaGVTaGtLVDluYjI5bkxtRnljbUY1TG0xaGNDaGtMR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1YzJGdWFYUnBlbVZRY205d1pYSjBlVlpoYkhWbFh5a3VhbTlwYmloY0lpQmNJaWs2WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1ellXNXBkR2w2WlZCeWIzQmxjblI1Vm1Gc2RXVmZLR1FwTEdJclBXTXJYQ0k2WENJclpDdGNJanRjSWlsOWNtVjBkWEp1SUdJL1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNWpjbVZoZEdWVFlXWmxVM1I1YkdWVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hpS1RwbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExrVk5VRlJaZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVjMkZ1YVhScGVtVlFjbTl3WlhKMGVWWmhiSFZsWHoxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZWY213cGNtVjBkWEp1SjNWeWJDaGNJaWNyWjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1ZFc1M2NtRndLR0VwTG5KbGNHeGhZMlVvTHp3dlp5eGNJaVV6WTF3aUtTNXlaWEJzWVdObEtDOWJYRnhjWEZ3aVhTOW5MRndpWEZ4Y1hDUW1YQ0lwS3lkY0lpa25PMkU5WVNCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMFAyZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExuVnVkM0poY0NoaEtUcG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMbk5oYm1sMGFYcGxVSEp2Y0dWeWRIbFdZV3gxWlZOMGNtbHVaMThvVTNSeWFXNW5LR0VwS1R0cFppZ3ZXM3M3ZlYwdkxuUmxjM1FvWVNrcGRHaHliM2NnYm1WM0lHZHZiMmN1WVhOelpYSjBjeTVCYzNObGNuUnBiMjVGY25KdmNpaGNJbFpoYkhWbElHUnZaWE1nYm05MElHRnNiRzkzSUZ0N08zMWRMQ0JuYjNRNklDVnpMbHdpTEZ0aFhTazdjbVYwZFhKdUlHRjlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1ellXNXBkR2w2WlZCeWIzQmxjblI1Vm1Gc2RXVlRkSEpwYm1kZlBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRXVjbVZ3YkdGalpTaG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMa1pWVGtOVVNVOU9VMTlTUlY4c1hDSWtNVndpS1M1eVpYQnNZV05sS0dkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVJsVk9RMVJKVDA1VFgxSkZYeXhjSWlReFhDSXBMbkpsY0d4aFkyVW9aMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVWVWt4ZlVrVmZMRndpZFhKc1hDSXBPMmxtS0dkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVZrRk1WVVZmVWtWZkxuUmxjM1FvWWlrcGUybG1LR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1UTA5TlRVVk9WRjlTUlY4dWRHVnpkQ2hoS1NseVpYUjFjbTRnWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKVGRISnBibWNnZG1Gc2RXVWdaR2x6WVd4c2IzZHpJR052YlcxbGJuUnpMQ0JuYjNRNklGd2lLMkVwTEdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVNVNU9UME5WVDFWVFgxTlVVa2xPUnp0cFppZ2haMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVvWVhOQ1lXeGhibU5sWkZGMWIzUmxjMThvWVNrcGNtVjBkWEp1SUdkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVUzUnlhVzVuSUhaaGJIVmxJSEpsY1hWcGNtVnpJR0poYkdGdVkyVmtJSEYxYjNSbGN5d2daMjkwT2lCY0lpdGNibUVwTEdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVNVNU9UME5WVDFWVFgxTlVVa2xPUnp0cFppZ2haMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVvWVhOQ1lXeGhibU5sWkZOeGRXRnlaVUp5WVdOclpYUnpYeWhoS1NseVpYUjFjbTRnWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKVGRISnBibWNnZG1Gc2RXVWdjbVZ4ZFdseVpYTWdZbUZzWVc1alpXUWdjM0YxWVhKbElHSnlZV05yWlhSeklHRnVaQ0J2Ym1VZ2FXUmxiblJwWm1sbGNpQndaWElnY0dGcGNpQnZaaUJpY21GamEyVjBjeXdnWjI5ME9pQmNJaXRoS1N4bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExrbE9UazlEVlU5VlUxOVRWRkpKVGtkOVpXeHpaU0J5WlhSMWNtNGdaMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0pUZEhKcGJtY2dkbUZzZFdVZ1lXeHNiM2R6SUc5dWJIa2dYQ0lyWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1V1FVeFZSVjlCVEV4UFYwVkVYME5JUVZKVFh5dGNJaUJoYm1RZ2MybHRjR3hsSUdaMWJtTjBhVzl1Y3l3Z1oyOTBPaUJjSWl0aEtTeG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMa2xPVGs5RFZVOVZVMTlUVkZKSlRrYzdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVjMkZ1YVhScGVtVlZjbXhmS0dFcGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1YUdGelFtRnNZVzVqWldSUmRXOTBaWE5mUFdaMWJtTjBhVzl1S0dFcGUyWnZjaWgyWVhJZ1lqMGhNQ3hqUFNFd0xHUTlNRHRrUEdFdWJHVnVaM1JvTzJRckt5bDdkbUZ5SUdVOVlTNWphR0Z5UVhRb1pDazdYQ0luWENJOVBXVW1KbU0vWWowaFlqb25YQ0luUFQxbEppWmlKaVlvWXowaFl5bDljbVYwZFhKdUlHSW1KbU45TzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdWFHRnpRbUZzWVc1alpXUlRjWFZoY21WQ2NtRmphMlYwYzE4OVpuVnVZM1JwYjI0b1lTbDdabTl5S0haaGNpQmlQU0V3TEdNOUwxNWJMVjloTFhwQkxWb3dMVGxkSkM4c1pEMHdPMlE4WVM1c1pXNW5kR2c3WkNzcktYdDJZWElnWlQxaExtTm9ZWEpCZENoa0tUdHBaaWhjSWwxY0lqMDlaU2w3YVdZb1lpbHlaWFIxY200aE1UdGlQU0V3ZldWc2MyVWdhV1lvWENKYlhDSTlQV1VwZTJsbUtDRmlLWEpsZEhWeWJpRXhPMkk5SVRGOVpXeHpaU0JwWmlnaFlpWW1JV011ZEdWemRDaGxLU2x5WlhSMWNtNGhNWDF5WlhSMWNtNGdZbjA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1V1FVeFZSVjlCVEV4UFYwVkVYME5JUVZKVFh6MWNJbHN0TEM1Y1hGd2lKeVZmSVNNZ1lTMTZRUzFhTUMwNVhGeGNYRnRjWEZ4Y1hWMWNJanRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVZrRk1WVVZmVWtWZlBXNWxkeUJTWldkRmVIQW9YQ0plWENJcloyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNVdRVXhWUlY5QlRFeFBWMFZFWDBOSVFWSlRYeXRjSWlza1hDSXBPMmR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1VlZKTVgxSkZYejB2WEZ4aUtIVnliRnhjS0ZzZ1hGeDBYRnh1WFNvcEtDZGJJQzBtS0MxY1hGdGNYRjB0ZmwwcUozeGNJbHNnSVNNdFhGeGJYRnhkTFg1ZEtsd2lmRnNoSXkwbUtpMWNYRnRjWEYwdGZsMHFLU2hiSUZ4Y2RGeGNibDBxWEZ3cEtTOW5PMmR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1UmxWT1ExUkpUMDVUWDFKRlh6MHZYRnhpS0doemJIeG9jMnhoZkhKbllueHlaMkpoZkcxaGRISnBlSHhqWVd4amZHMXBibTFoZUh4bWFYUXRZMjl1ZEdWdWRIeHlaWEJsWVhSOEtISnZkR0YwWlh4elkyRnNaWHgwY21GdWMyeGhkR1VwS0ZoOFdYeGFmRE5rS1Q4cFhGd29XeTByS2k4d0xUbGhMWG91SlZ4Y1cxeGNYU3dnWFN0Y1hDa3ZaenRuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTGtOUFRVMUZUbFJmVWtWZlBTOWNYQzljWENvdk8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzV6WVc1cGRHbDZaVlZ5YkY4OVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTaG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMbFZTVEY5U1JWOHNablZ1WTNScGIyNG9ZU3hqTEdRc1pTbDdkbUZ5SUdJOVhDSmNJanRrUFdRdWNtVndiR0ZqWlNndlhpaGJKMXdpWFNrb0xpb3BYRnd4SkM4c1puVnVZM1JwYjI0b1lTeGpMR1FwZTJJOVl6dHlaWFIxY200Z1pIMHBPMkU5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1YzJGdWFYUnBlbVVvWkNrdVoyVjBWSGx3WldSVGRISnBibWRXWVd4MVpTZ3BPM0psZEhWeWJpQmpLMklyWVN0aUsyVjlLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1amIyNWpZWFE5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5WENKY0lpeGpQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VhWE5CY25KaGVTaGhLVDluYjI5bkxtRnljbUY1TG1admNrVmhZMmdvWVN4aktUcGlLejFuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG5WdWQzSmhjQ2hoS1gwN1oyOXZaeTVoY25KaGVTNW1iM0pGWVdOb0tHRnlaM1Z0Wlc1MGN5eGpLVHR5WlhSMWNtNGdZajluYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG1OeVpXRjBaVk5oWm1WVGRIbHNaVk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHSXBPbWR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1UlUxUVZGbDlPMmR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1ZUYUdWbGREMW1kVzVqZEdsdmJpZ3BlM1JvYVhNdWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpWTjBlV3hsVTJobFpYUlhjbUZ3Y0dWa1ZtRnNkV1ZmUFZ3aVhDSTdkR2hwY3k1VFFVWkZYMU5VV1V4RlgxTklSVVZVWDFSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh6MW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdVZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZmVHRuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVjSEp2ZEc5MGVYQmxMbWx0Y0d4bGJXVnVkSE5IYjI5blUzUnlhVzVuVkhsd1pXUlRkSEpwYm1jOUlUQTdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejE3ZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVlRhR1ZsZEM1amNtVmhkR1ZTZFd4bFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMjl1ZEdGcGJuTW9ZU3hjSWp4Y0lpa3BkR2h5YjNjZ1JYSnliM0lvWENKVFpXeGxZM1J2Y2lCa2IyVnpJRzV2ZENCaGJHeHZkeUFuUENjc0lHZHZkRG9nWENJcllTazdkbUZ5SUdNOVlTNXlaWEJzWVdObEtDOG9KM3hjSWlrb0tEOGhYRnd4S1Z0ZVhGeHlYRnh1WEZ4bVhGeGNYRjE4WEZ4Y1hGdGNYSE5jWEZOZEtTcGNYREV2Wnl4Y0lsd2lLVHRwWmlnaEwxNWJMVjloTFhwQkxWb3dMVGtqTGpvcUlDdytLMzViWEZ4ZEtDazlYaVI4WFNza0x5NTBaWE4wS0dNcEtYUm9jbTkzSUVWeWNtOXlLRndpVTJWc1pXTjBiM0lnWVd4c2IzZHpJRzl1YkhrZ1d5MWZZUzE2UVMxYU1DMDVJeTQ2S2lBc1BpdCtXMXhjWEZ4ZEtDazlYaVI4WFNCaGJtUWdjM1J5YVc1bmN5d2daMjkwT2lCY0lpdGhLVHRwWmlnaFoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pWTm9aV1YwTG1oaGMwSmhiR0Z1WTJWa1FuSmhZMnRsZEhOZktHTXBLWFJvY205M0lFVnljbTl5S0Z3aUtDa2dZVzVrSUZ0ZElHbHVJSE5sYkdWamRHOXlJRzExYzNRZ1ltVWdZbUZzWVc1alpXUXNJR2R2ZERvZ1hDSXJZU2s3WWlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVjhmQ2hpUFdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVkzSmxZWFJsS0dJcEtUdGNibUU5WVN0Y0ludGNJaXRuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG5WdWQzSmhjQ2hpS1M1eVpYQnNZV05sS0M4OEwyY3NYQ0pjWEZ4Y00wTWdYQ0lwSzF3aWZWd2lPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdVkzSmxZWFJsVTJGbVpWTjBlV3hsVTJobFpYUlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaEtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExtaGhjMEpoYkdGdVkyVmtRbkpoWTJ0bGRITmZQV1oxYm1OMGFXOXVLR0VwZTJadmNpaDJZWElnWWoxN1hDSW9YQ0k2WENJcFhDSXNYQ0piWENJNlhDSmRYQ0o5TEdNOVcxMHNaRDB3TzJROFlTNXNaVzVuZEdnN1pDc3JLWHQyWVhJZ1pUMWhXMlJkTzJsbUtHSmJaVjBwWXk1d2RYTm9LR0piWlYwcE8yVnNjMlVnYVdZb1oyOXZaeTV2WW1wbFkzUXVZMjl1ZEdGcGJuTW9ZaXhsS1NZbVl5NXdiM0FvS1NFOVpTbHlaWFIxY200aE1YMXlaWFIxY200Z01EMDlZeTVzWlc1bmRHaDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBMbU52Ym1OaGREMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMWNJbHdpTEdNOVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1cGMwRnljbUY1S0dFcFAyZHZiMmN1WVhKeVlYa3VabTl5UldGamFDaGhMR01wT21JclBXZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVlRhR1ZsZEM1MWJuZHlZWEFvWVNsOU8yZHZiMmN1WVhKeVlYa3VabTl5UldGamFDaGhjbWQxYldWdWRITXNZeWs3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1ZUYUdWbGRDNWpjbVZoZEdWVFlXWmxVM1I1YkdWVGFHVmxkRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHSXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWVGFHVmxkQzVtY205dFEyOXVjM1JoYm5ROVpuVnVZM1JwYjI0b1lTbDdZVDFuYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2s3YVdZb01EMDlQV0V1YkdWdVozUm9LWEpsZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdVJVMVFWRms3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnaFoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMjl1ZEdGcGJuTW9ZU3hjSWp4Y0lpa3NYQ0pHYjNKaWFXUmtaVzRnSnp3bklHTm9ZWEpoWTNSbGNpQnBiaUJ6ZEhsc1pTQnphR1ZsZENCemRISnBibWM2SUZ3aUsyRXBPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdVkzSmxZWFJsVTJGbVpWTjBlV3hsVTJobFpYUlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaEtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExuQnliM1J2ZEhsd1pTNW5aWFJVZVhCbFpGTjBjbWx1WjFaaGJIVmxQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpWTjBlV3hsVTJobFpYUlhjbUZ3Y0dWa1ZtRnNkV1ZmZlR0Y2JtZHZiMmN1UkVWQ1ZVY21KaWhuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVYQ0pUWVdabFUzUjViR1ZUYUdWbGRIdGNJaXQwYUdsekxuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVlRkSGxzWlZOb1pXVjBWM0poY0hCbFpGWmhiSFZsWHl0Y0luMWNJbjBwTzF4dVoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pWTm9aV1YwTG5WdWQzSmhjRDFtZFc1amRHbHZiaWhoS1h0cFppaGhJR2x1YzNSaGJtTmxiMllnWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMEppWmhMbE5CUmtWZlUxUlpURVZmVTBoRlJWUmZWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmUFQwOVoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pWTm9aV1YwTGxSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh5bHlaWFIxY200Z1lTNXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVFlXWmxVM1I1YkdWVGFHVmxkRmR5WVhCd1pXUldZV3gxWlY4N1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSmxlSEJsWTNSbFpDQnZZbXBsWTNRZ2IyWWdkSGx3WlNCVFlXWmxVM1I1YkdWVGFHVmxkQ3dnWjI5MElDZGNJaXRoSzF3aUp5QnZaaUIwZVhCbElGd2lLMmR2YjJjdWRIbHdaVTltS0dFcEtUdHlaWFIxY201Y0luUjVjR1ZmWlhKeWIzSTZVMkZtWlZOMGVXeGxVMmhsWlhSY0luMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVZM0psWVhSbFUyRm1aVk4wZVd4bFUyaGxaWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNG9ibVYzSUdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWVGFHVmxkQ2t1YVc1cGRGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sWHloaEtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExuQnliM1J2ZEhsd1pTNXBibWwwVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVmZQV1oxYm1OMGFXOXVLR0VwZTNSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFUyaGxaWFJYY21Gd2NHVmtWbUZzZFdWZlBXRTdjbVYwZFhKdUlIUm9hWE45TzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWVGFHVmxkQzVGVFZCVVdUMW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdVkzSmxZWFJsVTJGbVpWTjBlV3hsVTJobFpYUlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoY0lsd2lLVHRuYjI5bkxteGhZbk05ZTMwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWREMTdmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXdzllMzA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbWRsZEU1aGRHbDJaVlZ6WlhKQloyVnVkRk4wY21sdVoxODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dVoyVjBUbUYyYVdkaGRHOXlYeWdwTzNKbGRIVnliaUJoSmlZb1lUMWhMblZ6WlhKQloyVnVkQ2svWVRwY0lsd2lmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3VaMlYwVG1GMmFXZGhkRzl5WHoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbWRzYjJKaGJDNXVZWFpwWjJGMGIzSjlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNTFjMlZ5UVdkbGJuUmZQV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNW5aWFJPWVhScGRtVlZjMlZ5UVdkbGJuUlRkSEpwYm1kZktDazdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xuTmxkRlZ6WlhKQloyVnVkRDFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1ZFhObGNrRm5aVzUwWHoxaGZIeG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dVoyVjBUbUYwYVhabFZYTmxja0ZuWlc1MFUzUnlhVzVuWHlncGZUdGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNW5aWFJWYzJWeVFXZGxiblE5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMblZ6WlhKQloyVnVkRjk5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWREMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dVoyVjBWWE5sY2tGblpXNTBLQ2s3Y21WMGRYSnVJR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OdmJuUmhhVzV6S0dJc1lTbDlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZEVsbmJtOXlaVU5oYzJVOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG1kbGRGVnpaWEpCWjJWdWRDZ3BPM0psZEhWeWJpQm5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqWVhObFNXNXpaVzV6YVhScGRtVkRiMjUwWVdsdWN5aGlMR0VwZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1bGVIUnlZV04wVm1WeWMybHZibFIxY0d4bGN6MW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0k5THloY1hIZGJYRngzSUYwcktWeGNMeWhiWGx4Y2MxMHJLVnhjY3lvb1B6cGNYQ2dvTGlvL0tWeGNLU2svTDJjc1l6MWJYU3hrTzJROVlpNWxlR1ZqS0dFcE95bGpMbkIxYzJnb1cyUmJNVjBzWkZzeVhTeGtXek5kZkh4MmIybGtJREJkS1R0eVpYUjFjbTRnWTMwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeVBYdDlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFOXdaWEpoWHoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pQY0dWeVlWd2lLWDA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9TVVZmUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJbFJ5YVdSbGJuUmNJaWw4ZkdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJazFUU1VWY0lpbDlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFVmtaMlZJZEcxc1h6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKRlpHZGxYQ0lwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhGWkdkbFEyaHliMjFwZFcxZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWtWa1p5OWNJaWw5TzF4dVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vVDNCbGNtRkRhSEp2YldsMWJWODlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtMWhkR05vVlhObGNrRm5aVzUwS0Z3aVQxQlNYQ0lwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhHYVhKbFptOTRYejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkdhWEpsWm05NFhDSXBmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkdlR2xQVTF3aUtYMDdYRzVuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaFRZV1poY21sZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWxOaFptRnlhVndpS1NZbUlTaG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoRGFISnZiV1ZmS0NsOGZHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVOdllYTjBYeWdwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhQY0dWeVlWOG9LWHg4WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9SV1JuWlVoMGJXeGZLQ2w4ZkdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRVZrWjJWRGFISnZiV2wxYlY4b0tYeDhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1QzQmxjbUZEYUhKdmJXbDFiVjhvS1h4OFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vUm1seVpXWnZlRjhvS1h4OFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpVMmxzYXlncGZIeG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKQmJtUnliMmxrWENJcEtYMDdYRzVuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaERiMkZ6ZEY4OVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG0xaGRHTm9WWE5sY2tGblpXNTBLRndpUTI5aGMzUmNJaWw5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRWx2YzFkbFluWnBaWGRmUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1S0dkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJbWxRWVdSY0lpbDhmR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0ltbFFhRzl1WlZ3aUtTa21KaUZuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaFRZV1poY21sZktDa21KaUZuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaERhSEp2YldWZktDa21KaUZuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaERiMkZ6ZEY4b0tTWW1JV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFWnBjbVZtYjNoZktDa21KbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lrRndjR3hsVjJWaVMybDBYQ0lwZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVOb2NtOXRaVjg5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRvWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbTFoZEdOb1ZYTmxja0ZuWlc1MEtGd2lRMmh5YjIxbFhDSXBmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkRjbWxQVTF3aUtTa21KaUZuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaEZaR2RsU0hSdGJGOG9LWDA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9RVzVrY205cFpFSnliM2R6WlhKZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWtGdVpISnZhV1JjSWlrbUppRW9aMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbWx6UTJoeWIyMWxLQ2w4ZkdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMwWnBjbVZtYjNnb0tYeDhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbWx6VDNCbGNtRW9LWHg4WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selUybHNheWdwS1gwN1hHNW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5QY0dWeVlUMW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoUGNHVnlZVjg3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selNVVTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1NVVmZPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBWa1oyVTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1JXUm5aVWgwYld4Zk8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMFZrWjJWRGFISnZiV2wxYlQxbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhGWkdkbFEyaHliMjFwZFcxZk8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMDl3WlhKaFEyaHliMjFwZFcwOVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vVDNCbGNtRkRhSEp2YldsMWJWODdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbWx6Um1seVpXWnZlRDFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaEdhWEpsWm05NFh6dGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzFOaFptRnlhVDFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaFRZV1poY21sZk8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjME52WVhOMFBXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVOdllYTjBYenRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhOSmIzTlhaV0oyYVdWM1BXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVsdmMxZGxZblpwWlhkZk8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjME5vY205dFpUMW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoRGFISnZiV1ZmTzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMwRnVaSEp2YVdSQ2NtOTNjMlZ5UFdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRUZ1WkhKdmFXUkNjbTkzYzJWeVh6dG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5UYVd4clBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWxOcGJHdGNJaWw5TzF4dVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtZGxkRlpsY25OcGIyNDlablZ1WTNScGIyNG9LWHRtZFc1amRHbHZiaUJoS0dFcGUyRTlaMjl2Wnk1aGNuSmhlUzVtYVc1a0tHRXNaQ2s3Y21WMGRYSnVJR05iWVYxOGZGd2lYQ0o5ZG1GeUlHSTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtZGxkRlZ6WlhKQloyVnVkQ2dwTzJsbUtHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMGxGS0NrcGNtVjBkWEp1SUdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1blpYUkpSVlpsY25OcGIyNWZLR0lwTzJJOVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG1WNGRISmhZM1JXWlhKemFXOXVWSFZ3YkdWektHSXBPM1poY2lCalBYdDlPMmR2YjJjdVlYSnlZWGt1Wm05eVJXRmphQ2hpTEdaMWJtTjBhVzl1S0dFcGUyTmJZVnN3WFYwOVlWc3hYWDBwTzNaaGNpQmtQV2R2YjJjdWNHRnlkR2xoYkNobmIyOW5MbTlpYW1WamRDNWpiMjUwWVdsdWMwdGxlU3hqS1R0eVpYUjFjbTRnWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selQzQmxjbUVvS1Q5aEtGdGNJbFpsY25OcGIyNWNJaXhjSWs5d1pYSmhYQ0pkS1RwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWFYTkZaR2RsS0NrL1lTaGJYQ0pGWkdkbFhDSmRLVHBjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMwVmtaMlZEYUhKdmJXbDFiU2dwUDJFb1cxd2lSV1JuWENKZEtUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5EYUhKdmJXVW9LVDloS0Z0Y0lrTm9jbTl0WlZ3aUxGd2lRM0pwVDFOY0lsMHBPaWhpUFdKYk1sMHBKaVppV3pGZGZIeGNJbHdpZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWFYTldaWEp6YVc5dVQzSklhV2RvWlhJOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlEQThQV2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OdmJYQmhjbVZXWlhKemFXOXVjeWhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1WjJWMFZtVnljMmx2YmlncExHRXBmVHRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1blpYUkpSVlpsY25OcGIyNWZQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQUzl5ZGpvZ0tpaGJYRnhrWEZ3dVhTb3BMeTVsZUdWaktHRXBPMmxtS0dJbUptSmJNVjBwY21WMGRYSnVJR0piTVYwN1lqMWNJbHdpTzNaaGNpQmpQUzlOVTBsRklDc29XMXhjWkZ4Y0xsMHJLUzh1WlhobFl5aGhLVHRwWmloakppWmpXekZkS1dsbUtHRTlMMVJ5YVdSbGJuUmNYQzhvWEZ4a0xseGNaQ2t2TG1WNFpXTW9ZU2tzWENJM0xqQmNJajA5WTFzeFhTbHBaaWhoSmlaaFd6RmRLWE4zYVhSamFDaGhXekZkS1h0allYTmxJRndpTkM0d1hDSTZZajFjSWpndU1Gd2lPMkp5WldGck8yTmhjMlVnWENJMUxqQmNJanBpUFZ3aU9TNHdYQ0k3WW5KbFlXczdZMkZ6WlNCY0lqWXVNRndpT21JOVhDSXhNQzR3WENJN1luSmxZV3M3WTJGelpTQmNJamN1TUZ3aU9tSTlYQ0l4TVM0d1hDSjlaV3h6WlNCaVBWd2lOeTR3WENJN1pXeHpaU0JpUFdOYk1WMDdjbVYwZFhKdUlHSjlPMmR2YjJjdWFIUnRiQzVUWVdabFNIUnRiRDFtZFc1amRHbHZiaWdwZTNSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVWgwYld4WGNtRndjR1ZrVm1Gc2RXVmZQVndpWENJN2RHaHBjeTVUUVVaRlgwaFVUVXhmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjg3ZEdocGN5NWthWEpmUFc1MWJHeDlPMmR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzV3Y205MGIzUjVjR1V1YVcxd2JHVnRaVzUwYzBkdmIyZEpNVGh1UW1sa2FVUnBjbVZqZEdsdmJtRnNVM1J5YVc1blBTRXdPMmR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzV3Y205MGIzUjVjR1V1WjJWMFJHbHlaV04wYVc5dVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11WkdseVgzMDdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbkJ5YjNSdmRIbHdaUzVwYlhCc1pXMWxiblJ6UjI5dloxTjBjbWx1WjFSNWNHVmtVM1J5YVc1blBTRXdPMmR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzV3Y205MGIzUjVjR1V1WjJWMFZIbHdaV1JUZEhKcGJtZFdZV3gxWlQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWTmhabVZJZEcxc1YzSmhjSEJsWkZaaGJIVmxYeTUwYjFOMGNtbHVaeWdwZlR0Y2JtZHZiMmN1UkVWQ1ZVY21KaWhuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1WENKVFlXWmxTSFJ0Ykh0Y0lpdDBhR2x6TG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WSWRHMXNWM0poY0hCbFpGWmhiSFZsWHl0Y0luMWNJbjBwTzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEE5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEJVY25WemRHVmtTRlJOVENoaEtTNTBiMU4wY21sdVp5Z3BmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEJVY25WemRHVmtTRlJOVEQxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0ppWmhMbU52Ym5OMGNuVmpkRzl5UFQwOVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0ppWmhMbE5CUmtWZlNGUk5URjlVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY4OVBUMW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmS1hKbGRIVnliaUJoTG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WSWRHMXNWM0poY0hCbFpGWmhiSFZsWHp0bmIyOW5MbUZ6YzJWeWRITXVabUZwYkNoY0ltVjRjR1ZqZEdWa0lHOWlhbVZqZENCdlppQjBlWEJsSUZOaFptVklkRzFzTENCbmIzUWdKMXdpSzJFclhDSW5JRzltSUhSNWNHVWdYQ0lyWjI5dlp5NTBlWEJsVDJZb1lTa3BPM0psZEhWeWJsd2lkSGx3WlY5bGNuSnZjanBUWVdabFNIUnRiRndpZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNW9kRzFzUlhOallYQmxQV1oxYm1OMGFXOXVLR0VwZTJsbUtHRWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3dwY21WMGRYSnVJR0U3ZG1GeUlHSTlYQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1JR0VzWXoxdWRXeHNPMkltSm1FdWFXMXdiR1Z0Wlc1MGMwZHZiMmRKTVRodVFtbGthVVJwY21WamRHbHZibUZzVTNSeWFXNW5KaVlvWXoxaExtZGxkRVJwY21WamRHbHZiaWdwS1R0aFBXSW1KbUV1YVcxd2JHVnRaVzUwYzBkdmIyZFRkSEpwYm1kVWVYQmxaRk4wY21sdVp6OWhMbWRsZEZSNWNHVmtVM1J5YVc1blZtRnNkV1VvS1RwVGRISnBibWNvWVNrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZUWVdabFNIUnRiRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbWgwYld4RmMyTmhjR1VvWVNrc1l5bDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1oMGJXeEZjMk5oY0dWUWNtVnpaWEoyYVc1blRtVjNiR2x1WlhNOVpuVnVZM1JwYjI0b1lTbDdhV1lvWVNCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDbHlaWFIxY200Z1lUdGhQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVvZEcxc1JYTmpZWEJsS0dFcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkzSmxZWFJsVTJGbVpVaDBiV3hUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzV1WlhkTWFXNWxWRzlDY2lobmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dWRXNTNjbUZ3S0dFcEtTeGhMbWRsZEVScGNtVmpkR2x2YmlncEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1YUhSdGJFVnpZMkZ3WlZCeVpYTmxjblpwYm1kT1pYZHNhVzVsYzBGdVpGTndZV05sY3oxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0tYSmxkSFZ5YmlCaE8yRTlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbWgwYld4RmMyTmhjR1VvWVNrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZUWVdabFNIUnRiRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbmRvYVhSbGMzQmhZMlZGYzJOaGNHVW9aMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMblZ1ZDNKaGNDaGhLU2tzWVM1blpYUkVhWEpsWTNScGIyNG9LU2w5TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1bWNtOXRQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVvZEcxc1JYTmpZWEJsTzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1V1FVeEpSRjlPUVUxRlUxOUpUbDlVUVVkZlBTOWVXMkV0ZWtFdFdqQXRPUzFkS3lRdk8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbFZTVEY5QlZGUlNTVUpWVkVWVFh6MTdZV04wYVc5dU9pRXdMR05wZEdVNklUQXNaR0YwWVRvaE1DeG1iM0p0WVdOMGFXOXVPaUV3TEdoeVpXWTZJVEFzYldGdWFXWmxjM1E2SVRBc2NHOXpkR1Z5T2lFd0xITnlZem9oTUgwN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xrNVBWRjlCVEV4UFYwVkVYMVJCUjE5T1FVMUZVMTg5ZTBGUVVFeEZWRG9oTUN4Q1FWTkZPaUV3TEVWTlFrVkVPaUV3TEVsR1VrRk5SVG9oTUN4TVNVNUxPaUV3TEUxQlZFZzZJVEFzVFVWVVFUb2hNQ3hQUWtwRlExUTZJVEFzVTBOU1NWQlVPaUV3TEZOVVdVeEZPaUV3TEZOV1J6b2hNQ3hVUlUxUVRFRlVSVG9oTUgwN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlQxbWRXNWpkR2x2YmloaExHSXNZeWw3WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5abGNtbG1lVlJoWjA1aGJXVW9VM1J5YVc1bktHRXBLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpWTmhabVZJZEcxc1ZHRm5VMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1UzUnlhVzVuS0dFcExHSXNZeWw5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xuWmxjbWxtZVZSaFowNWhiV1U5Wm5WdVkzUnBiMjRvWVNsN2FXWW9JV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVXUVV4SlJGOU9RVTFGVTE5SlRsOVVRVWRmTG5SbGMzUW9ZU2twZEdoeWIzY2dSWEp5YjNJb1hDSkpiblpoYkdsa0lIUmhaeUJ1WVcxbElEeGNJaXRoSzF3aVBpNWNJaWs3YVdZb1lTNTBiMVZ3Y0dWeVEyRnpaU2dwYVc0Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xrNVBWRjlCVEV4UFYwVkVYMVJCUjE5T1FVMUZVMThwZEdoeWIzY2dSWEp5YjNJb1hDSlVZV2NnYm1GdFpTQThYQ0lyWVN0Y0lqNGdhWE1nYm05MElHRnNiRzkzWldRZ1ptOXlJRk5oWm1WSWRHMXNMbHdpS1R0OU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpVbG1jbUZ0WlQxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0aEppWm5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMblZ1ZDNKaGNDaGhLVHQyWVhJZ1pUMTdmVHRsTG5OeVl6MWhmSHh1ZFd4c08yVXVjM0pqWkc5alBXSW1KbWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzUxYm5keVlYQW9ZaWs3WVQxbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkyOXRZbWx1WlVGMGRISnBZblYwWlhNb1pTeDdjMkZ1WkdKdmVEcGNJbHdpZlN4aktUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVkdGblUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWENKcFpuSmhiV1ZjSWl4aExHUXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZUWVc1a1ltOTRTV1p5WVcxbFBXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUybG1LQ0ZuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTJGdVZYTmxVMkZ1WkdKdmVFbG1jbUZ0WlNncEtYUm9jbTkzSUVWeWNtOXlLRndpVkdobElHSnliM2R6WlhJZ1pHOWxjeUJ1YjNRZ2MzVndjRzl5ZENCellXNWtZbTk0WldRZ2FXWnlZVzFsY3k1Y0lpazdkbUZ5SUdVOWUzMDdaUzV6Y21NOVlUOW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNTFibmR5WVhBb1oyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1Vb1lTa3BPbTUxYkd3N1pTNXpjbU5rYjJNOVlueDhiblZzYkR0bExuTmhibVJpYjNnOVhDSmNJanRoUFdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amIyMWlhVzVsUVhSMGNtbGlkWFJsY3lobExIdDlMR01wTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTNKbFlYUmxVMkZtWlVoMGJXeFVZV2RUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGNJbWxtY21GdFpWd2lMR0VzWkNsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU5oYmxWelpWTmhibVJpYjNoSlpuSmhiV1U5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWjI5dlp5NW5iRzlpWVd3dVNGUk5URWxHY21GdFpVVnNaVzFsYm5RbUpsd2ljMkZ1WkdKdmVGd2lhVzRnWjI5dlp5NW5iRzlpWVd3dVNGUk5URWxHY21GdFpVVnNaVzFsYm5RdWNISnZkRzkwZVhCbGZUdG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZM0psWVhSbFUyTnlhWEIwVTNKalBXWjFibU4wYVc5dUtHRXNZaWw3WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1MWJuZHlZWEFvWVNrN1lUMW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZMjl0WW1sdVpVRjBkSEpwWW5WMFpYTW9lM055WXpwaGZTeDdmU3hpS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNWR0ZuVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9YQ0p6WTNKcGNIUmNJaXhoS1gwN1hHNW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZM0psWVhSbFUyTnlhWEIwUFdaMWJtTjBhVzl1S0dFc1lpbDdabTl5S0haaGNpQmpJR2x1SUdJcGUzWmhjaUJrUFdNdWRHOU1iM2RsY2tOaGMyVW9LVHRwWmloY0lteGhibWQxWVdkbFhDSTlQV1I4ZkZ3aWMzSmpYQ0k5UFdSOGZGd2lkR1Y0ZEZ3aVBUMWtmSHhjSW5SNWNHVmNJajA5WkNsMGFISnZkeUJGY25KdmNpZ25RMkZ1Ym05MElITmxkQ0JjSWljclpDc25YQ0lnWVhSMGNtbGlkWFJsSnlrN2ZXTTlYQ0pjSWp0aFBXZHZiMmN1WVhKeVlYa3VZMjl1WTJGMEtHRXBPMlp2Y2loa1BUQTdaRHhoTG14bGJtZDBhRHRrS3lzcFl5czlaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1ZFc1M2NtRndLR0ZiWkYwcE8yRTlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpWTmhabVZJZEcxc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWXl4bmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVRrVlZWRkpCVENrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZUWVdabFNIUnRiRlJoWjFObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLRndpYzJOeWFYQjBYQ0lzWWl4aEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTNKbFlYUmxVM1I1YkdVOVpuVnVZM1JwYjI0b1lTeGlLWHRpUFdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amIyMWlhVzVsUVhSMGNtbGlkWFJsY3loN2RIbHdaVHBjSW5SbGVIUXZZM056WENKOUxIdDlMR0lwTzNaaGNpQmpQVndpWENJN1lUMW5iMjluTG1GeWNtRjVMbU52Ym1OaGRDaGhLVHRtYjNJb2RtRnlJR1E5TUR0a1BHRXViR1Z1WjNSb08yUXJLeWxqS3oxbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bFUyaGxaWFF1ZFc1M2NtRndLR0ZiWkYwcE8yRTlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpWTmhabVZJZEcxc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWXl4bmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVRrVlZWRkpCVENrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZUWVdabFNIUnRiRlJoWjFObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLRndpYzNSNWJHVmNJaXhpTEdFcGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVqY21WaGRHVk5aWFJoVW1WbWNtVnphRDFtZFc1amRHbHZiaWhoTEdJcGUyRTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VkVzUzY21Gd0tHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuTmhibWwwYVhwbEtHRXBLVHNvWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selNVVW9LWHg4WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selJXUm5aU2dwS1NZbVoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMjl1ZEdGcGJuTW9ZU3hjSWp0Y0lpa21KaWhoUFZ3aUoxd2lLMkV1Y21Wd2JHRmpaU2d2Snk5bkxGd2lKVEkzWENJcEsxd2lKMXdpS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNWR0ZuVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9YQ0p0WlhSaFhDSXNlMXdpYUhSMGNDMWxjWFZwZGx3aU9sd2ljbVZtY21WemFGd2lMR052Ym5SbGJuUTZLR0o4ZkRBcEsxd2lPeUIxY213OVhDSXJZWDBwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNW5aWFJCZEhSeVRtRnRaVUZ1WkZaaGJIVmxYejFtZFc1amRHbHZiaWhoTEdJc1l5bDdhV1lvWXlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMEtXTTlaMjl2Wnk1emRISnBibWN1UTI5dWMzUXVkVzUzY21Gd0tHTXBPMlZzYzJVZ2FXWW9YQ0p6ZEhsc1pWd2lQVDFpTG5SdlRHOTNaWEpEWVhObEtDa3BZejFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WjJWMFUzUjViR1ZXWVd4MVpWOG9ZeWs3Wld4elpYdHBaaWd2WG05dUwya3VkR1Z6ZENoaUtTbDBhSEp2ZHlCRmNuSnZjaWduUVhSMGNtbGlkWFJsSUZ3aUp5dGlLeWRjSWlCeVpYRjFhWEpsY3lCbmIyOW5Mbk4wY21sdVp5NURiMjV6ZENCMllXeDFaU3dnWENJbksyTXJKMXdpSUdkcGRtVnVMaWNwTzJsbUtHSXVkRzlNYjNkbGNrTmhjMlVvS1dsdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNVZVa3hmUVZSVVVrbENWVlJGVTE4cGFXWW9ZeUJwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213cFl6MW5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMblZ1ZDNKaGNDaGpLVHRsYkhObElHbG1LR01nYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkNsalBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0NoaktUdGNibVZzYzJVZ2FXWW9aMjl2Wnk1cGMxTjBjbWx1WnloaktTbGpQV2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxLR01wTG1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVb0tUdGxiSE5sSUhSb2NtOTNJRVZ5Y205eUtDZEJkSFJ5YVdKMWRHVWdYQ0luSzJJckoxd2lJRzl1SUhSaFp5QmNJaWNyWVNzblhDSWdjbVZ4ZFdseVpYTWdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3NJR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBMQ0J2Y2lCemRISnBibWNzSUhaaGJIVmxJRndpSnl0akt5ZGNJaUJuYVhabGJpNG5LVHQ5WXk1cGJYQnNaVzFsYm5SelIyOXZaMU4wY21sdVoxUjVjR1ZrVTNSeWFXNW5KaVlvWXoxakxtZGxkRlI1Y0dWa1UzUnlhVzVuVm1Gc2RXVW9LU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENobmIyOW5MbWx6VTNSeWFXNW5LR01wZkh4bmIyOW5MbWx6VG5WdFltVnlLR01wTEZ3aVUzUnlhVzVuSUc5eUlHNTFiV0psY2lCMllXeDFaU0JsZUhCbFkzUmxaQ3dnWjI5MElGd2lLM1I1Y0dWdlppQmpLMXdpSUhkcGRHZ2dkbUZzZFdVNklGd2lLMk1wTzNKbGRIVnliaUJpS3ljOVhDSW5LMmR2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1oMGJXeEZjMk5oY0dVb1UzUnlhVzVuS0dNcEtTc25YQ0luZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNW5aWFJUZEhsc1pWWmhiSFZsWHoxbWRXNWpkR2x2YmloaEtYdHBaaWdoWjI5dlp5NXBjMDlpYW1WamRDaGhLU2wwYUhKdmR5QkZjbkp2Y2lnblZHaGxJRndpYzNSNWJHVmNJaUJoZEhSeWFXSjFkR1VnY21WeGRXbHlaWE1nWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlNCdmNpQnRZWEFnYjJZZ2MzUjViR1VnY0hKdmNHVnlkR2xsY3l3Z0p5dDBlWEJsYjJZZ1lTdGNJaUJuYVhabGJqb2dYQ0lyWVNrN1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1Y4ZkNoaFBXZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVZM0psWVhSbEtHRXBLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzUxYm5keVlYQW9ZU2w5TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZYYVhSb1JHbHlQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlMkk5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaU2hpTEdNc1pDazdZaTVrYVhKZlBXRTdjbVYwZFhKdUlHSjlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1wdmFXNDlablZ1WTNScGIyNG9ZU3hpS1h0aFBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNW9kRzFzUlhOallYQmxLR0VwTzNaaGNpQmpQV0V1WjJWMFJHbHlaV04wYVc5dUtDa3NaRDFiWFN4bFBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdWFYTkJjbkpoZVNoaEtUOW5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyZ29ZU3hsS1Rvb1lUMW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VhSFJ0YkVWelkyRndaU2hoS1N4a0xuQjFjMmdvWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5WdWQzSmhjQ2hoS1Nrc1lUMWhMbWRsZEVScGNtVmpkR2x2YmlncExHTTlQV2R2YjJjdWFURTRiaTVpYVdScExrUnBjaTVPUlZWVVVrRk1QMk05WVRwaElUMW5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVUa1ZWVkZKQlRDWW1ZeUU5WVNZbUtHTTliblZzYkNrcGZUdG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyZ29ZaXhsS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1pDNXFiMmx1S0dkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEFvWVNrcExHTXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amIyNWpZWFE5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1cWIybHVLR2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVGVFZCVVdTeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXBLWDA3WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OdmJtTmhkRmRwZEdoRWFYSTlablZ1WTNScGIyNG9ZU3hpS1h0MllYSWdZejFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTI5dVkyRjBLR2R2YjJjdVlYSnlZWGt1YzJ4cFkyVW9ZWEpuZFcxbGJuUnpMREVwS1R0akxtUnBjbDg5WVR0eVpYUjFjbTRnWTMwN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejE3ZlR0bmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkzSmxZWFJsVTJGbVpVaDBiV3hUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpUMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaWh1WlhjZ1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0tTNXBibWwwVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVmZLR0VzWWlsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbkJ5YjNSdmRIbHdaUzVwYm1sMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZmUFdaMWJtTjBhVzl1S0dFc1lpbDdkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFNIUnRiRmR5WVhCd1pXUldZV3gxWlY4OVoyOXZaeTVvZEcxc0xuUnlkWE4wWldSMGVYQmxjeTVRVWtsV1FWUkZYMFJQWDA1UFZGOUJRME5GVTFOZlQxSmZSVXhUUlY5UVQweEpRMWsvWjI5dlp5NW9kRzFzTG5SeWRYTjBaV1IwZVhCbGN5NVFVa2xXUVZSRlgwUlBYMDVQVkY5QlEwTkZVMU5mVDFKZlJVeFRSVjlRVDB4SlExa3VZM0psWVhSbFNGUk5UQ2hoS1RwaE8zUm9hWE11WkdseVh6MWlPM0psZEhWeWJpQjBhR2x6ZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZSaFoxTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHQyWVhJZ1pEMXVkV3hzTzNaaGNpQmxQVndpUEZ3aUsyRXJaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbk4wY21sdVoybG1lVUYwZEhKcFluVjBaWE1vWVN4aUtUdG5iMjluTG1selJHVm1RVzVrVG05MFRuVnNiQ2hqS1Q5bmIyOW5MbWx6UVhKeVlYa29ZeWw4ZkNoalBWdGpYU2s2WXoxYlhUdG5iMjluTG1SdmJTNTBZV2R6TG1selZtOXBaRlJoWnloaExuUnZURzkzWlhKRFlYTmxLQ2twUHlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtDRmpMbXhsYm1kMGFDeGNJbFp2YVdRZ2RHRm5JRHhjSWl0aEsxd2lQaUJrYjJWeklHNXZkQ0JoYkd4dmR5QmpiMjUwWlc1MExsd2lLU3hsS3oxY0lqNWNJaWs2S0dROVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnZibU5oZENoaktTeGxLejFjSWo1Y0lpdG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VkVzUzY21Gd0tHUXBLMXdpUEM5Y0lpdGhLMXdpUGx3aUxHUTlaQzVuWlhSRWFYSmxZM1JwYjI0b0tTazdLR0U5WWlZbVlpNWthWElwSmlZb1pEMHZYaWhzZEhKOGNuUnNmR0YxZEc4cEpDOXBMblJsYzNRb1lTay9aMjl2Wnk1cE1UaHVMbUpwWkdrdVJHbHlMazVGVlZSU1FVdzZYRzV1ZFd4c0tUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9aU3hrS1gwN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xuTjBjbWx1WjJsbWVVRjBkSEpwWW5WMFpYTTlablZ1WTNScGIyNG9ZU3hpS1h0MllYSWdZejFjSWx3aU8ybG1LR0lwWm05eUtIWmhjaUJrSUdsdUlHSXBlMmxtS0NGbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVZrRk1TVVJmVGtGTlJWTmZTVTVmVkVGSFh5NTBaWE4wS0dRcEtYUm9jbTkzSUVWeWNtOXlLQ2RKYm5aaGJHbGtJR0YwZEhKcFluVjBaU0J1WVcxbElGd2lKeXRrS3lkY0lpNG5LVHQyWVhJZ1pUMWlXMlJkTzJkdmIyY3VhWE5FWldaQmJtUk9iM1JPZFd4c0tHVXBKaVlvWXlzOVhDSWdYQ0lyWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1kbGRFRjBkSEpPWVcxbFFXNWtWbUZzZFdWZktHRXNaQ3hsS1NsOWNtVjBkWEp1SUdOOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU52YldKcGJtVkJkSFJ5YVdKMWRHVnpQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDJZWElnWkQxN2ZTeGxPMlp2Y2lobElHbHVJR0VwWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENobExuUnZURzkzWlhKRFlYTmxLQ2s5UFdVc1hDSk5kWE4wSUdKbElHeHZkMlZ5SUdOaGMyVmNJaWtzWkZ0bFhUMWhXMlZkTzJadmNpaGxJR2x1SUdJcFoyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGxMblJ2VEc5M1pYSkRZWE5sS0NrOVBXVXNYQ0pOZFhOMElHSmxJR3h2ZDJWeUlHTmhjMlZjSWlrc1pGdGxYVDFpVzJWZE8yWnZjaWhsSUdsdUlHTXBlM1poY2lCbVBXVXVkRzlNYjNkbGNrTmhjMlVvS1R0cFppaG1JR2x1SUdFcGRHaHliM2NnUlhKeWIzSW9KME5oYm01dmRDQnZkbVZ5Y21sa1pTQmNJaWNyWmlzblhDSWdZWFIwY21saWRYUmxMQ0JuYjNRZ1hDSW5LMlVySjF3aUlIZHBkR2dnZG1Gc2RXVWdYQ0luSzJOYlpWMHJKMXdpSnlrN1ppQnBiaUJpSmlaa1pXeGxkR1VnWkZ0bVhUdGtXMlZkUFdOYlpWMTljbVYwZFhKdUlHUjlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTGtSUFExUlpVRVZmU0ZSTlREMW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZM0psWVhSbFUyRm1aVWgwYld4VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hjSWp3aFJFOURWRmxRUlNCb2RHMXNQbHdpTEdkdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1T1JWVlVVa0ZNS1R0bmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVJVMVFWRms5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1hDSmNJaXhuYjI5bkxta3hPRzR1WW1sa2FTNUVhWEl1VGtWVlZGSkJUQ2s3WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTGtKU1BXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLRndpUEdKeVBsd2lMR2R2YjJjdWFURTRiaTVpYVdScExrUnBjaTVPUlZWVVVrRk1LVHRuYjI5bkxtaDBiV3d1ZFc1amFHVmphMlZrWTI5dWRtVnljMmx2Ym5NOWUzMDdaMjl2Wnk1b2RHMXNMblZ1WTJobFkydGxaR052Ym5abGNuTnBiMjV6TG5OaFptVklkRzFzUm5KdmJWTjBjbWx1WjB0dWIzZHVWRzlUWVhScGMyWjVWSGx3WlVOdmJuUnlZV04wUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowVTNSeWFXNW5LR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBMblZ1ZDNKaGNDaGhLU3hjSW0xMWMzUWdjSEp2ZG1sa1pTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9JV2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1selJXMXdkSGxQY2xkb2FYUmxjM0JoWTJVb1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdWRXNTNjbUZ3S0dFcEtTeGNJbTExYzNRZ2NISnZkbWxrWlNCdWIyNHRaVzF3ZEhrZ2FuVnpkR2xtYVdOaGRHbHZibHdpS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lpeGpmSHh1ZFd4c0tYMDdYRzVuYjI5bkxtaDBiV3d1ZFc1amFHVmphMlZrWTI5dWRtVnljMmx2Ym5NdWMyRm1aVk5qY21sd2RFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamREMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SVGRISnBibWNvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR0VwTEZ3aWJYVnpkQ0J3Y205MmFXUmxJR3AxYzNScFptbGpZWFJwYjI1Y0lpazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2doWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BMRndpYlhWemRDQndjbTkyYVdSbElHNXZiaTFsYlhCMGVTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVk5qY21sd2RDNWpjbVZoZEdWVFlXWmxVMk55YVhCMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWWlsOU8xeHVaMjl2Wnk1b2RHMXNMblZ1WTJobFkydGxaR052Ym5abGNuTnBiMjV6TG5OaFptVlRkSGxzWlVaeWIyMVRkSEpwYm1kTGJtOTNibFJ2VTJGMGFYTm1lVlI1Y0dWRGIyNTBjbUZqZEQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJUZEhKcGJtY29aMjl2Wnk1emRISnBibWN1UTI5dWMzUXVkVzUzY21Gd0tHRXBMRndpYlhWemRDQndjbTkyYVdSbElHcDFjM1JwWm1sallYUnBiMjVjSWlrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ2haMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1YVhORmJYQjBlVTl5VjJocGRHVnpjR0ZqWlNobmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrcExGd2liWFZ6ZENCd2NtOTJhV1JsSUc1dmJpMWxiWEIwZVNCcWRYTjBhV1pwWTJGMGFXOXVYQ0lwTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG1OeVpXRjBaVk5oWm1WVGRIbHNaVk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHSXBmVHRjYm1kdmIyY3VhSFJ0YkM1MWJtTm9aV05yWldSamIyNTJaWEp6YVc5dWN5NXpZV1psVTNSNWJHVlRhR1ZsZEVaeWIyMVRkSEpwYm1kTGJtOTNibFJ2VTJGMGFYTm1lVlI1Y0dWRGIyNTBjbUZqZEQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJUZEhKcGJtY29aMjl2Wnk1emRISnBibWN1UTI5dWMzUXVkVzUzY21Gd0tHRXBMRndpYlhWemRDQndjbTkyYVdSbElHcDFjM1JwWm1sallYUnBiMjVjSWlrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ2haMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1YVhORmJYQjBlVTl5VjJocGRHVnpjR0ZqWlNobmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrcExGd2liWFZ6ZENCd2NtOTJhV1JsSUc1dmJpMWxiWEIwZVNCcWRYTjBhV1pwWTJGMGFXOXVYQ0lwTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVZM0psWVhSbFUyRm1aVk4wZVd4bFUyaGxaWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGlLWDA3WEc1bmIyOW5MbWgwYld3dWRXNWphR1ZqYTJWa1kyOXVkbVZ5YzJsdmJuTXVjMkZtWlZWeWJFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamREMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SVGRISnBibWNvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR0VwTEZ3aWJYVnpkQ0J3Y205MmFXUmxJR3AxYzNScFptbGpZWFJwYjI1Y0lpazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2doWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BMRndpYlhWemRDQndjbTkyYVdSbElHNXZiaTFsYlhCMGVTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1amNtVmhkR1ZUWVdabFZYSnNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lpbDlPMXh1WjI5dlp5NW9kRzFzTG5WdVkyaGxZMnRsWkdOdmJuWmxjbk5wYjI1ekxuUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamREMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SVGRISnBibWNvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR0VwTEZ3aWJYVnpkQ0J3Y205MmFXUmxJR3AxYzNScFptbGpZWFJwYjI1Y0lpazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2doWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BMRndpYlhWemRDQndjbTkyYVdSbElHNXZiaTFsYlhCMGVTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xtTnlaV0YwWlZSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR0lwZlR0bmIyOW5MbVJ2YlM1ellXWmxQWHQ5TzJkdmIyY3VaRzl0TG5OaFptVXVTVzV6WlhKMFFXUnFZV05sYm5SSWRHMXNVRzl6YVhScGIyNDllMEZHVkVWU1FrVkhTVTQ2WENKaFpuUmxjbUpsWjJsdVhDSXNRVVpVUlZKRlRrUTZYQ0poWm5SbGNtVnVaRndpTEVKRlJrOVNSVUpGUjBsT09sd2lZbVZtYjNKbFltVm5hVzVjSWl4Q1JVWlBVa1ZGVGtRNlhDSmlaV1p2Y21WbGJtUmNJbjA3WjI5dlp5NWtiMjB1YzJGbVpTNXBibk5sY25SQlpHcGhZMlZ1ZEVoMGJXdzlablZ1WTNScGIyNG9ZU3hpTEdNcGUyRXVhVzV6WlhKMFFXUnFZV05sYm5SSVZFMU1LR0lzWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5WdWQzSmhjRlJ5ZFhOMFpXUklWRTFNS0dNcEtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1VFJWUmZTVTVPUlZKZlNGUk5URjlFU1ZOQlRFeFBWMFZFWDFSQlIxTmZQWHROUVZSSU9pRXdMRk5EVWtsUVZEb2hNQ3hUVkZsTVJUb2hNQ3hUVmtjNklUQXNWRVZOVUV4QlZFVTZJVEI5TzF4dVoyOXZaeTVrYjIwdWMyRm1aUzVwYzBsdWJtVnlTSFJ0YkVOc1pXRnVkWEJTWldOMWNuTnBkbVZmUFdkdmIyY3VablZ1WTNScGIyNXpMbU5oWTJobFVtVjBkWEp1Vm1Gc2RXVW9ablZ1WTNScGIyNG9LWHRwWmlobmIyOW5Ma1JGUWxWSEppWmNJblZ1WkdWbWFXNWxaRndpUFQwOWRIbHdaVzltSUdSdlkzVnRaVzUwS1hKbGRIVnliaUV4TzNaaGNpQmhQV1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb1hDSmthWFpjSWlrc1lqMWtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0Z3aVpHbDJYQ0lwTzJJdVlYQndaVzVrUTJocGJHUW9aRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENoY0ltUnBkbHdpS1NrN1lTNWhjSEJsYm1SRGFHbHNaQ2hpS1R0cFppaG5iMjluTGtSRlFsVkhKaVloWVM1bWFYSnpkRU5vYVd4a0tYSmxkSFZ5YmlFeE8ySTlZUzVtYVhKemRFTm9hV3hrTG1acGNuTjBRMmhwYkdRN1lTNXBibTVsY2toVVRVdzlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMblZ1ZDNKaGNGUnlkWE4wWldSSVZFMU1LR2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVGVFZCVVdTazdjbVYwZFhKdUlXSXVjR0Z5Wlc1MFJXeGxiV1Z1ZEgwcE8xeHVaMjl2Wnk1a2IyMHVjMkZtWlM1MWJuTmhabVZUWlhSSmJtNWxja2gwYld4RWIwNXZkRlZ6WlU5eVJXeHpaVDFtZFc1amRHbHZiaWhoTEdJcGUybG1LR2R2YjJjdVpHOXRMbk5oWm1VdWFYTkpibTVsY2toMGJXeERiR1ZoYm5Wd1VtVmpkWEp6YVhabFh5Z3BLV1p2Y2lnN1lTNXNZWE4wUTJocGJHUTdLV0V1Y21WdGIzWmxRMmhwYkdRb1lTNXNZWE4wUTJocGJHUXBPMkV1YVc1dVpYSklWRTFNUFdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEJVY25WemRHVmtTRlJOVENoaUtYMDdYRzVuYjI5bkxtUnZiUzV6WVdabExuTmxkRWx1Ym1WeVNIUnRiRDFtZFc1amRHbHZiaWhoTEdJcGUybG1LR2R2YjJjdVlYTnpaWEowY3k1RlRrRkNURVZmUVZOVFJWSlVVeWw3ZG1GeUlHTTlZUzUwWVdkT1lXMWxMblJ2VlhCd1pYSkRZWE5sS0NrN2FXWW9aMjl2Wnk1a2IyMHVjMkZtWlM1VFJWUmZTVTVPUlZKZlNGUk5URjlFU1ZOQlRFeFBWMFZFWDFSQlIxTmZXMk5kS1hSb2NtOTNJRVZ5Y205eUtGd2laMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkpibTVsY2toMGJXd2dZMkZ1Ym05MElHSmxJSFZ6WldRZ2RHOGdjMlYwSUdOdmJuUmxiblFnYjJZZ1hDSXJZUzUwWVdkT1lXMWxLMXdpTGx3aUtUdDlaMjl2Wnk1a2IyMHVjMkZtWlM1MWJuTmhabVZUWlhSSmJtNWxja2gwYld4RWIwNXZkRlZ6WlU5eVJXeHpaU2hoTEdJcGZUdG5iMjluTG1SdmJTNXpZV1psTG5ObGRFOTFkR1Z5U0hSdGJEMW1kVzVqZEdsdmJpaGhMR0lwZTJFdWIzVjBaWEpJVkUxTVBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDaGlLWDA3WEc1bmIyOW5MbVJ2YlM1ellXWmxMbk5sZEVadmNtMUZiR1Z0Wlc1MFFXTjBhVzl1UFdaMWJtTjBhVzl1S0dFc1lpbDdZajFpSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZWY213L1lqcG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXpZVzVwZEdsNlpVRnpjMlZ5ZEZWdVkyaGhibWRsWkNoaUtUdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URVp2Y20xRmJHVnRaVzUwS0dFcExtRmpkR2x2YmoxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNS0dJcGZUdG5iMjluTG1SdmJTNXpZV1psTG5ObGRFSjFkSFJ2YmtadmNtMUJZM1JwYjI0OVpuVnVZM1JwYjI0b1lTeGlLWHRpUFdJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOWlPbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxRWE56WlhKMFZXNWphR0Z1WjJWa0tHSXBPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNUW5WMGRHOXVSV3hsYldWdWRDaGhLUzVtYjNKdFFXTjBhVzl1UFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3dvWWlsOU8xeHVaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkpibkIxZEVadmNtMUJZM1JwYjI0OVpuVnVZM1JwYjI0b1lTeGlLWHRpUFdJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOWlPbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxRWE56WlhKMFZXNWphR0Z1WjJWa0tHSXBPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNU1c1d2RYUkZiR1Z0Wlc1MEtHRXBMbVp2Y20xQlkzUnBiMjQ5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGVlNUQ2hpS1gwN1oyOXZaeTVrYjIwdWMyRm1aUzV6WlhSVGRIbHNaVDFtZFc1amRHbHZiaWhoTEdJcGUyRXVjM1I1YkdVdVkzTnpWR1Y0ZEQxbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExuVnVkM0poY0NoaUtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1a2IyTjFiV1Z1ZEZkeWFYUmxQV1oxYm1OMGFXOXVLR0VzWWlsN1lTNTNjbWwwWlNobmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dWRXNTNjbUZ3VkhKMWMzUmxaRWhVVFV3b1lpa3BmVHRjYm1kdmIyY3VaRzl0TG5OaFptVXVjMlYwUVc1amFHOXlTSEpsWmoxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNUVc1amFHOXlSV3hsYldWdWRDaGhLVHRpUFdJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOWlPbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxRWE56WlhKMFZXNWphR0Z1WjJWa0tHSXBPMkV1YUhKbFpqMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBmVHRuYjI5bkxtUnZiUzV6WVdabExuTmxkRWx0WVdkbFUzSmpQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeEpiV0ZuWlVWc1pXMWxiblFvWVNrN2FXWW9JU2hpSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZWY213cEtYdDJZWElnWXowdlhtUmhkR0U2YVcxaFoyVmNYQzh2YVM1MFpYTjBLR0lwTzJJOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1WQmMzTmxjblJWYm1Ob1lXNW5aV1FvWWl4aktYMWhMbk55WXoxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNS0dJcGZUdGNibWR2YjJjdVpHOXRMbk5oWm1VdWMyVjBRWFZrYVc5VGNtTTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6U0ZSTlRFRjFaR2x2Uld4bGJXVnVkQ2hoS1R0cFppZ2hLR0lnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkNrcGUzWmhjaUJqUFM5ZVpHRjBZVHBoZFdScGIxeGNMeTlwTG5SbGMzUW9ZaWs3WWoxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlVGemMyVnlkRlZ1WTJoaGJtZGxaQ2hpTEdNcGZXRXVjM0pqUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3dvWWlsOU8yZHZiMmN1Wkc5dExuTmhabVV1YzJWMFZtbGtaVzlUY21NOVpuVnVZM1JwYjI0b1lTeGlLWHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEZacFpHVnZSV3hsYldWdWRDaGhLVHRwWmlnaEtHSWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliQ2twZTNaaGNpQmpQUzllWkdGMFlUcDJhV1JsYjF4Y0x5OXBMblJsYzNRb1lpazdZajFuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVUZ6YzJWeWRGVnVZMmhoYm1kbFpDaGlMR01wZldFdWMzSmpQV2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMblZ1ZDNKaGNGUnlkWE4wWldSVlVrd29ZaWw5TzF4dVoyOXZaeTVrYjIwdWMyRm1aUzV6WlhSRmJXSmxaRk55WXoxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNUlcxaVpXUkZiR1Z0Wlc1MEtHRXBPMkV1YzNKalBXZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkRlZTVENoaUtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkdjbUZ0WlZOeVl6MW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVJuSmhiV1ZGYkdWdFpXNTBLR0VwTzJFdWMzSmpQV2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGVlNUQ2hpS1gwN1oyOXZaeTVrYjIwdWMyRm1aUzV6WlhSSlpuSmhiV1ZUY21NOVpuVnVZM1JwYjI0b1lTeGlLWHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEVsR2NtRnRaVVZzWlcxbGJuUW9ZU2s3WVM1emNtTTlaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1ZWSk1LR0lwZlR0Y2JtZHZiMmN1Wkc5dExuTmhabVV1YzJWMFNXWnlZVzFsVTNKalpHOWpQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeEpSbkpoYldWRmJHVnRaVzUwS0dFcE8yRXVjM0pqWkc5alBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDaGlLWDA3WEc1bmIyOW5MbVJ2YlM1ellXWmxMbk5sZEV4cGJtdEljbVZtUVc1a1VtVnNQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URXhwYm10RmJHVnRaVzUwS0dFcE8yRXVjbVZzUFdNN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMkZ6WlVsdWMyVnVjMmwwYVhabFEyOXVkR0ZwYm5Nb1l5eGNJbk4wZVd4bGMyaGxaWFJjSWlrL0tHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZaUJwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213c0oxVlNUQ0J0ZFhOMElHSmxJRlJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQ0JpWldOaGRYTmxJRndpY21Wc1hDSWdZMjl1ZEdGcGJuTWdYQ0p6ZEhsc1pYTm9aV1YwWENJbktTeGhMbWh5WldZOVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBLVHBoTG1oeVpXWTlZaUJwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213L1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBPbUlnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkQ5bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNS0dJcE9seHVaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VkVzUzY21Gd1ZISjFjM1JsWkZWU1RDaG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXpZVzVwZEdsNlpVRnpjMlZ5ZEZWdVkyaGhibWRsWkNoaUtTbDlPMmR2YjJjdVpHOXRMbk5oWm1VdWMyVjBUMkpxWldOMFJHRjBZVDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOSVZFMU1UMkpxWldOMFJXeGxiV1Z1ZENoaEtUdGhMbVJoZEdFOVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVTJOeWFYQjBWVkpNS0dJcGZUdG5iMjluTG1SdmJTNXpZV1psTG5ObGRGTmpjbWx3ZEZOeVl6MW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVUyTnlhWEIwUld4bGJXVnVkQ2hoS1R0aExuTnlZejFuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlRZM0pwY0hSVlVrd29ZaWs3S0dJOVoyOXZaeTVuWlhSVFkzSnBjSFJPYjI1alpTZ3BLU1ltWVM1elpYUkJkSFJ5YVdKMWRHVW9YQ0p1YjI1alpWd2lMR0lwZlR0Y2JtZHZiMmN1Wkc5dExuTmhabVV1YzJWMFUyTnlhWEIwUTI5dWRHVnVkRDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOSVZFMU1VMk55YVhCMFJXeGxiV1Z1ZENoaEtUdGhMblJsZUhROVoyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkQ2hpS1Rzb1lqMW5iMjluTG1kbGRGTmpjbWx3ZEU1dmJtTmxLQ2twSmlaaExuTmxkRUYwZEhKcFluVjBaU2hjSW01dmJtTmxYQ0lzWWlsOU8yZHZiMmN1Wkc5dExuTmhabVV1YzJWMFRHOWpZWFJwYjI1SWNtVm1QV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzB4dlkyRjBhVzl1S0dFcE8ySTlZaUJwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzUDJJNloyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1WQmMzTmxjblJWYm1Ob1lXNW5aV1FvWWlrN1lTNW9jbVZtUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3dvWWlsOU8xeHVaMjl2Wnk1a2IyMHVjMkZtWlM1aGMzTnBaMjVNYjJOaGRHbHZiajFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOTWIyTmhkR2x2YmloaEtUdGlQV0lnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkQ5aU9tZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuTmhibWwwYVhwbFFYTnpaWEowVlc1amFHRnVaMlZrS0dJcE8yRXVZWE56YVdkdUtHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0ZSeWRYTjBaV1JWVWt3b1lpa3BmVHRuYjI5bkxtUnZiUzV6WVdabExuSmxjR3hoWTJWTWIyTmhkR2x2YmoxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTk1iMk5oZEdsdmJpaGhLVHRpUFdJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOWlPbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxRWE56WlhKMFZXNWphR0Z1WjJWa0tHSXBPMkV1Y21Wd2JHRmpaU2huYjI5bkxtaDBiV3d1VTJGbVpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1ZWSk1LR0lwS1gwN1hHNW5iMjluTG1SdmJTNXpZV1psTG05d1pXNUpibGRwYm1SdmR6MW1kVzVqZEdsdmJpaGhMR0lzWXl4a0xHVXBlMkU5WVNCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc1AyRTZaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjMkZ1YVhScGVtVkJjM05sY25SVmJtTm9ZVzVuWldRb1lTazdjbVYwZFhKdUtHSjhmR2R2YjJjdVoyeHZZbUZzS1M1dmNHVnVLR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMblZ1ZDNKaGNGUnlkWE4wWldSVlVrd29ZU2tzWXo5bmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWXlrNlhDSmNJaXhrTEdVcGZUdG5iMjluTG1SdmJTNXpZV1psTG5CaGNuTmxSbkp2YlZOMGNtbHVaMGgwYld3OVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVjMkZtWlM1d1lYSnpaVVp5YjIxVGRISnBibWNvWVN4aUxGd2lkR1Y0ZEM5b2RHMXNYQ0lwZlR0bmIyOW5MbVJ2YlM1ellXWmxMbkJoY25ObFJuSnZiVk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdFdWNHRnljMlZHY205dFUzUnlhVzVuS0dkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEJVY25WemRHVmtTRlJOVENoaUtTeGpLWDA3WEc1bmIyOW5MbVJ2YlM1ellXWmxMbU55WldGMFpVbHRZV2RsUm5KdmJVSnNiMkk5Wm5WdVkzUnBiMjRvWVNsN2FXWW9JUzllYVcxaFoyVmNYQzh1S2k5bkxuUmxjM1FvWVM1MGVYQmxLU2wwYUhKdmR5QkZjbkp2Y2loY0ltZHZiMmN1Wkc5dExuTmhabVV1WTNKbFlYUmxTVzFoWjJWR2NtOXRRbXh2WWlCdmJteDVJR0ZqWTJWd2RITWdUVWxOUlNCMGVYQmxJR2x0WVdkbEx5NHFMbHdpS1R0MllYSWdZajFuYjI5bkxtZHNiMkpoYkM1VlVrd3VZM0psWVhSbFQySnFaV04wVlZKTUtHRXBPMkU5Ym1WM0lHZHZiMmN1WjJ4dlltRnNMa2x0WVdkbE8yRXViMjVzYjJGa1BXWjFibU4wYVc5dUtDbDdaMjl2Wnk1bmJHOWlZV3d1VlZKTUxuSmxkbTlyWlU5aWFtVmpkRlZTVENoaUtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkpiV0ZuWlZOeVl5aGhMR2R2YjJjdWFIUnRiQzUxYm1Ob1pXTnJaV1JqYjI1MlpYSnphVzl1Y3k1ellXWmxWWEpzUm5KdmJWTjBjbWx1WjB0dWIzZHVWRzlUWVhScGMyWjVWSGx3WlVOdmJuUnlZV04wS0dkdmIyY3VjM1J5YVc1bkxrTnZibk4wTG1aeWIyMG9YQ0pKYldGblpTQmliRzlpSUZWU1RDNWNJaWtzWWlrcE8zSmxkSFZ5YmlCaGZUdG5iMjluTG5OMGNtbHVaeTVFUlZSRlExUmZSRTlWUWt4RlgwVlRRMEZRU1U1SFBTRXhPMmR2YjJjdWMzUnlhVzVuTGtaUFVrTkZYMDVQVGw5RVQwMWZTRlJOVEY5VlRrVlRRMEZRU1U1SFBTRXhPMmR2YjJjdWMzUnlhVzVuTGxWdWFXTnZaR1U5ZTA1Q1UxQTZYQ0pjWEhVd01HRXdYQ0o5TzJkdmIyY3VjM1J5YVc1bkxuTjBZWEowYzFkcGRHZzlaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1YzNSaGNuUnpWMmwwYUR0bmIyOW5Mbk4wY21sdVp5NWxibVJ6VjJsMGFEMW5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVsYm1SelYybDBhRHRuYjI5bkxuTjBjbWx1Wnk1allYTmxTVzV6Wlc1emFYUnBkbVZUZEdGeWRITlhhWFJvUFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlZOMFlYSjBjMWRwZEdnN1oyOXZaeTV6ZEhKcGJtY3VZMkZ6WlVsdWMyVnVjMmwwYVhabFJXNWtjMWRwZEdnOVoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMkZ6WlVsdWMyVnVjMmwwYVhabFJXNWtjMWRwZEdnN1oyOXZaeTV6ZEhKcGJtY3VZMkZ6WlVsdWMyVnVjMmwwYVhabFJYRjFZV3h6UFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlVWeGRXRnNjenRjYm1kdmIyY3VjM1J5YVc1bkxuTjFZbk05Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTTlZUzV6Y0d4cGRDaGNJaVZ6WENJcExHUTlYQ0pjSWl4bFBVRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3hLVHRsTG14bGJtZDBhQ1ltTVR4akxteGxibWQwYURzcFpDczlZeTV6YUdsbWRDZ3BLMlV1YzJocFpuUW9LVHR5WlhSMWNtNGdaQ3RqTG1wdmFXNG9YQ0lsYzF3aUtYMDdaMjl2Wnk1emRISnBibWN1WTI5c2JHRndjMlZYYUdsMFpYTndZV05sUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCaExuSmxjR3hoWTJVb0wxdGNYSE5jWEhoaE1GMHJMMmNzWENJZ1hDSXBMbkpsY0d4aFkyVW9MMTVjWEhNcmZGeGNjeXNrTDJjc1hDSmNJaWw5TzJkdmIyY3VjM1J5YVc1bkxtbHpSVzF3ZEhsUGNsZG9hWFJsYzNCaFkyVTlaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1YVhORmJYQjBlVTl5VjJocGRHVnpjR0ZqWlR0bmIyOW5Mbk4wY21sdVp5NXBjMFZ0Y0hSNVUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlBd1BUMWhMbXhsYm1kMGFIMDdaMjl2Wnk1emRISnBibWN1YVhORmJYQjBlVDFuYjI5bkxuTjBjbWx1Wnk1cGMwVnRjSFI1VDNKWGFHbDBaWE53WVdObE8yZHZiMmN1YzNSeWFXNW5MbWx6Ulcxd2RIbFBjbGRvYVhSbGMzQmhZMlZUWVdabFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm5iMjluTG5OMGNtbHVaeTVwYzBWdGNIUjVUM0pYYUdsMFpYTndZV05sS0dkdmIyY3VjM1J5YVc1bkxtMWhhMlZUWVdabEtHRXBLWDA3WEc1bmIyOW5Mbk4wY21sdVp5NXBjMFZ0Y0hSNVUyRm1aVDFuYjI5bkxuTjBjbWx1Wnk1cGMwVnRjSFI1VDNKWGFHbDBaWE53WVdObFUyRm1aVHRuYjI5bkxuTjBjbWx1Wnk1cGMwSnlaV0ZyYVc1blYyaHBkR1Z6Y0dGalpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGhMMXRlWEZ4MFhGeHVYRnh5SUYwdkxuUmxjM1FvWVNsOU8yZHZiMmN1YzNSeWFXNW5MbWx6UVd4d2FHRTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJUzliWG1FdGVrRXRXbDB2TG5SbGMzUW9ZU2w5TzJkdmIyY3VjM1J5YVc1bkxtbHpUblZ0WlhKcFl6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGhMMXRlTUMwNVhTOHVkR1Z6ZENoaEtYMDdaMjl2Wnk1emRISnBibWN1YVhOQmJIQm9ZVTUxYldWeWFXTTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJUzliWG1FdGVrRXRXakF0T1YwdkxuUmxjM1FvWVNsOU8yZHZiMmN1YzNSeWFXNW5MbWx6VTNCaFkyVTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVYQ0lnWENJOVBXRjlPMmR2YjJjdWMzUnlhVzVuTG1selZXNXBZMjlrWlVOb1lYSTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJREU5UFdFdWJHVnVaM1JvSmlaY0lpQmNJanc5WVNZbVhDSitYQ0krUFdGOGZGd2lYRngxTURBNE1Gd2lQRDFoSmlaY0lseGNkV1ptWm1SY0lqNDlZWDA3WEc1bmIyOW5Mbk4wY21sdVp5NXpkSEpwY0U1bGQyeHBibVZ6UFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCaExuSmxjR3hoWTJVb0x5aGNYSEpjWEc1OFhGeHlmRnhjYmlrckwyY3NYQ0lnWENJcGZUdG5iMjluTG5OMGNtbHVaeTVqWVc1dmJtbGpZV3hwZW1WT1pYZHNhVzVsY3oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTNXlaWEJzWVdObEtDOG9YRnh5WEZ4dWZGeGNjbnhjWEc0cEwyY3NYQ0pjWEc1Y0lpbDlPMmR2YjJjdWMzUnlhVzVuTG01dmNtMWhiR2w2WlZkb2FYUmxjM0JoWTJVOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTZ3ZYRng0WVRCOFhGeHpMMmNzWENJZ1hDSXBmVHRuYjI5bkxuTjBjbWx1Wnk1dWIzSnRZV3hwZW1WVGNHRmpaWE05Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdFdWNtVndiR0ZqWlNndlhGeDRZVEI4V3lCY1hIUmRLeTluTEZ3aUlGd2lLWDA3WjI5dlp5NXpkSEpwYm1jdVkyOXNiR0Z3YzJWQ2NtVmhhMmx1WjFOd1lXTmxjejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0M5YlhGeDBYRnh5WEZ4dUlGMHJMMmNzWENJZ1hDSXBMbkpsY0d4aFkyVW9MMTViWEZ4MFhGeHlYRnh1SUYwcmZGdGNYSFJjWEhKY1hHNGdYU3NrTDJjc1hDSmNJaWw5TzJkdmIyY3VjM1J5YVc1bkxuUnlhVzA5WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWRISnBiVHRjYm1kdmIyY3VjM1J5YVc1bkxuUnlhVzFNWldaMFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhMbkpsY0d4aFkyVW9MMTViWEZ4elhGeDRZVEJkS3k4c1hDSmNJaWw5TzJkdmIyY3VjM1J5YVc1bkxuUnlhVzFTYVdkb2REMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZUzV5WlhCc1lXTmxLQzliWEZ4elhGeDRZVEJkS3lRdkxGd2lYQ0lwZlR0bmIyOW5Mbk4wY21sdVp5NWpZWE5sU1c1elpXNXphWFJwZG1WRGIyMXdZWEpsUFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlVOdmJYQmhjbVU3WEc1bmIyOW5Mbk4wY21sdVp5NXVkVzFpWlhKQmQyRnlaVU52YlhCaGNtVmZQV1oxYm1OMGFXOXVLR0VzWWl4aktYdHBaaWhoUFQxaUtYSmxkSFZ5YmlBd08ybG1LQ0ZoS1hKbGRIVnliaTB4TzJsbUtDRmlLWEpsZEhWeWJpQXhPMlp2Y2loMllYSWdaRDFoTG5SdlRHOTNaWEpEWVhObEtDa3ViV0YwWTJnb1l5a3NaVDFpTG5SdlRHOTNaWEpEWVhObEtDa3ViV0YwWTJnb1l5a3NaajFOWVhSb0xtMXBiaWhrTG14bGJtZDBhQ3hsTG14bGJtZDBhQ2tzWnowd08yYzhaanRuS3lzcGUyTTlaRnRuWFR0MllYSWdhRDFsVzJkZE8ybG1LR01oUFdncGNtVjBkWEp1SUdFOWNHRnljMlZKYm5Rb1l5d3hNQ2tzSVdselRtRk9LR0VwSmlZb1lqMXdZWEp6WlVsdWRDaG9MREV3S1N3aGFYTk9ZVTRvWWlrbUptRXRZaWsvWVMxaU9tTThhRDh0TVRveGZYSmxkSFZ5YmlCa0xteGxibWQwYUNFOVpTNXNaVzVuZEdnL1pDNXNaVzVuZEdndFpTNXNaVzVuZEdnNllUeGlQeTB4T2pGOU8yZHZiMmN1YzNSeWFXNW5MbWx1ZEVGM1lYSmxRMjl0Y0dGeVpUMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1dWRXMWlaWEpCZDJGeVpVTnZiWEJoY21WZktHRXNZaXd2WEZ4a0szeGNYRVFyTDJjcGZUdGNibWR2YjJjdWMzUnlhVzVuTG1ac2IyRjBRWGRoY21WRGIyMXdZWEpsUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHZHZiMmN1YzNSeWFXNW5MbTUxYldKbGNrRjNZWEpsUTI5dGNHRnlaVjhvWVN4aUxDOWNYR1FyZkZ4Y0xseGNaQ3Q4WEZ4RUt5OW5LWDA3WjI5dlp5NXpkSEpwYm1jdWJuVnRaWEpoZEdWRGIyMXdZWEpsUFdkdmIyY3VjM1J5YVc1bkxtWnNiMkYwUVhkaGNtVkRiMjF3WVhKbE8yZHZiMmN1YzNSeWFXNW5MblZ5YkVWdVkyOWtaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwS0ZOMGNtbHVaeWhoS1NsOU8yZHZiMmN1YzNSeWFXNW5MblZ5YkVSbFkyOWtaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWkdWamIyUmxWVkpKUTI5dGNHOXVaVzUwS0dFdWNtVndiR0ZqWlNndlhGd3JMMmNzWENJZ1hDSXBLWDA3WjI5dlp5NXpkSEpwYm1jdWJtVjNUR2x1WlZSdlFuSTlaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1Ym1WM1RHbHVaVlJ2UW5JN1hHNW5iMjluTG5OMGNtbHVaeTVvZEcxc1JYTmpZWEJsUFdaMWJtTjBhVzl1S0dFc1lpbDdZVDFuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1b2RHMXNSWE5qWVhCbEtHRXNZaWs3WjI5dlp5NXpkSEpwYm1jdVJFVlVSVU5VWDBSUFZVSk1SVjlGVTBOQlVFbE9SeVltS0dFOVlTNXlaWEJzWVdObEtHZHZiMmN1YzNSeWFXNW5Ma1ZmVWtWZkxGd2lKaU14TURFN1hDSXBLVHR5WlhSMWNtNGdZWDA3WjI5dlp5NXpkSEpwYm1jdVJWOVNSVjg5TDJVdlp6dG5iMjluTG5OMGNtbHVaeTUxYm1WelkyRndaVVZ1ZEdsMGFXVnpQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1amIyNTBZV2x1Y3loaExGd2lKbHdpS1Q4aFoyOXZaeTV6ZEhKcGJtY3VSazlTUTBWZlRrOU9YMFJQVFY5SVZFMU1YMVZPUlZORFFWQkpUa2NtSmx3aVpHOWpkVzFsYm5SY0ltbHVJR2R2YjJjdVoyeHZZbUZzUDJkdmIyY3VjM1J5YVc1bkxuVnVaWE5qWVhCbFJXNTBhWFJwWlhOVmMybHVaMFJ2YlY4b1lTazZaMjl2Wnk1emRISnBibWN1ZFc1bGMyTmhjR1ZRZFhKbFdHMXNSVzUwYVhScFpYTmZLR0VwT21GOU8xeHVaMjl2Wnk1emRISnBibWN1ZFc1bGMyTmhjR1ZGYm5ScGRHbGxjMWRwZEdoRWIyTjFiV1Z1ZEQxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQm5iMjluTG5OMGNtbHVaeTVqYjI1MFlXbHVjeWhoTEZ3aUpsd2lLVDluYjI5bkxuTjBjbWx1Wnk1MWJtVnpZMkZ3WlVWdWRHbDBhV1Z6VlhOcGJtZEViMjFmS0dFc1lpazZZWDA3WEc1bmIyOW5Mbk4wY21sdVp5NTFibVZ6WTJGd1pVVnVkR2wwYVdWelZYTnBibWRFYjIxZlBXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTllMXdpSm1GdGNEdGNJanBjSWlaY0lpeGNJaVpzZER0Y0lqcGNJanhjSWl4Y0lpWm5kRHRjSWpwY0lqNWNJaXhjSWlaeGRXOTBPMXdpT2lkY0lpZDlPM1poY2lCa1BXSS9ZaTVqY21WaGRHVkZiR1Z0Wlc1MEtGd2laR2wyWENJcE9tZHZiMmN1WjJ4dlltRnNMbVJ2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb1hDSmthWFpjSWlrN2NtVjBkWEp1SUdFdWNtVndiR0ZqWlNobmIyOW5Mbk4wY21sdVp5NUlWRTFNWDBWT1ZFbFVXVjlRUVZSVVJWSk9YeXhtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJsUFdOYllWMDdhV1lvWlNseVpYUjFjbTRnWlR0Y0lpTmNJajA5WWk1amFHRnlRWFFvTUNrbUppaGlQVTUxYldKbGNpaGNJakJjSWl0aUxuTjFZbk4wY2lneEtTa3NhWE5PWVU0b1lpbDhmQ2hsUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1lpa3BLVHRsZkh3b1oyOXZaeTVrYjIwdWMyRm1aUzV6WlhSSmJtNWxja2gwYld3b1pDeG5iMjluTG1oMGJXd3VkVzVqYUdWamEyVmtZMjl1ZG1WeWMybHZibk11YzJGbVpVaDBiV3hHY205dFUzUnlhVzVuUzI1dmQyNVViMU5oZEdselpubFVlWEJsUTI5dWRISmhZM1FvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1Wm5KdmJTaGNJbE5wYm1kc1pTQklWRTFNSUdWdWRHbDBlUzVjSWlrc1hHNWhLMXdpSUZ3aUtTa3NaVDFrTG1acGNuTjBRMmhwYkdRdWJtOWtaVlpoYkhWbExuTnNhV05sS0RBc0xURXBLVHR5WlhSMWNtNGdZMXRoWFQxbGZTbDlPMmR2YjJjdWMzUnlhVzVuTG5WdVpYTmpZWEJsVUhWeVpWaHRiRVZ1ZEdsMGFXVnpYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0M4bUtGdGVPMTByS1Rzdlp5eG1kVzVqZEdsdmJpaGhMR01wZTNOM2FYUmphQ2hqS1h0allYTmxJRndpWVcxd1hDSTZjbVYwZFhKdVhDSW1YQ0k3WTJGelpTQmNJbXgwWENJNmNtVjBkWEp1WENJOFhDSTdZMkZ6WlNCY0ltZDBYQ0k2Y21WMGRYSnVYQ0krWENJN1kyRnpaU0JjSW5GMWIzUmNJanB5WlhSMWNtNG5YQ0luTzJSbFptRjFiSFE2Y21WMGRYSnVYQ0lqWENJaFBXTXVZMmhoY2tGMEtEQXBmSHdvWXoxT2RXMWlaWElvWENJd1hDSXJZeTV6ZFdKemRISW9NU2twTEdselRtRk9LR01wS1Q5aE9sTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9ZeWw5ZlNsOU8yZHZiMmN1YzNSeWFXNW5Ma2hVVFV4ZlJVNVVTVlJaWDFCQlZGUkZVazVmUFM4bUtGdGVPMXhjY3p3bVhTc3BPejh2Wnp0bmIyOW5Mbk4wY21sdVp5NTNhR2wwWlhOd1lXTmxSWE5qWVhCbFBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR2R2YjJjdWMzUnlhVzVuTG01bGQweHBibVZVYjBKeUtHRXVjbVZ3YkdGalpTZ3ZJQ0F2Wnl4Y0lpQW1JekUyTUR0Y0lpa3NZaWw5TzF4dVoyOXZaeTV6ZEhKcGJtY3VjSEpsYzJWeWRtVlRjR0ZqWlhNOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTZ3ZLRjU4VzF4Y2JpQmRLU0F2Wnl4Y0lpUXhYQ0lyWjI5dlp5NXpkSEpwYm1jdVZXNXBZMjlrWlM1T1FsTlFLWDA3WjI5dlp5NXpkSEpwYm1jdWMzUnlhWEJSZFc5MFpYTTlablZ1WTNScGIyNG9ZU3hpS1h0bWIzSW9kbUZ5SUdNOVlpNXNaVzVuZEdnc1pEMHdPMlE4WXp0a0t5c3BlM1poY2lCbFBURTlQV00vWWpwaUxtTm9ZWEpCZENoa0tUdHBaaWhoTG1Ob1lYSkJkQ2d3S1QwOVpTWW1ZUzVqYUdGeVFYUW9ZUzVzWlc1bmRHZ3RNU2s5UFdVcGNtVjBkWEp1SUdFdWMzVmljM1J5YVc1bktERXNZUzVzWlc1bmRHZ3RNU2w5Y21WMGRYSnVJR0Y5TzJkdmIyY3VjM1J5YVc1bkxuUnlkVzVqWVhSbFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0akppWW9ZVDFuYjI5bkxuTjBjbWx1Wnk1MWJtVnpZMkZ3WlVWdWRHbDBhV1Z6S0dFcEtUdGhMbXhsYm1kMGFENWlKaVlvWVQxaExuTjFZbk4wY21sdVp5Z3dMR0l0TXlrclhDSXVMaTVjSWlrN1l5WW1LR0U5WjI5dlp5NXpkSEpwYm1jdWFIUnRiRVZ6WTJGd1pTaGhLU2s3Y21WMGRYSnVJR0Y5TzF4dVoyOXZaeTV6ZEhKcGJtY3VkSEoxYm1OaGRHVk5hV1JrYkdVOVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN1l5WW1LR0U5WjI5dlp5NXpkSEpwYm1jdWRXNWxjMk5oY0dWRmJuUnBkR2xsY3loaEtTazdhV1lvWkNZbVlTNXNaVzVuZEdnK1lpbDdaRDVpSmlZb1pEMWlLVHQyWVhJZ1pUMWhMbXhsYm1kMGFDMWtPMkU5WVM1emRXSnpkSEpwYm1jb01DeGlMV1FwSzF3aUxpNHVYQ0lyWVM1emRXSnpkSEpwYm1jb1pTbDlaV3h6WlNCaExteGxibWQwYUQ1aUppWW9aRDFOWVhSb0xtWnNiMjl5S0dJdk1pa3NaVDFoTG14bGJtZDBhQzFrTEdFOVlTNXpkV0p6ZEhKcGJtY29NQ3hrSzJJbE1pa3JYQ0l1TGk1Y0lpdGhMbk4xWW5OMGNtbHVaeWhsS1NrN1l5WW1LR0U5WjI5dlp5NXpkSEpwYm1jdWFIUnRiRVZ6WTJGd1pTaGhLU2s3Y21WMGRYSnVJR0Y5TzJkdmIyY3VjM1J5YVc1bkxuTndaV05wWVd4RmMyTmhjR1ZEYUdGeWMxODllMXdpWEZ4NE1EQmNJanBjSWx4Y1hGd3dYQ0lzWENKY1hHSmNJanBjSWx4Y1hGeGlYQ0lzWENKY1hHWmNJanBjSWx4Y1hGeG1YQ0lzWENKY1hHNWNJanBjSWx4Y1hGeHVYQ0lzWENKY1hISmNJanBjSWx4Y1hGeHlYQ0lzWENKY1hIUmNJanBjSWx4Y1hGeDBYQ0lzWENKY1hIZ3dRbHdpT2x3aVhGeGNYSGd3UWx3aUxDZGNJaWM2SjF4Y1hGeGNJaWNzWENKY1hGeGNYQ0k2WENKY1hGeGNYRnhjWEZ3aUxGd2lQRndpT2x3aVhGeGNYSFV3TURORFhDSjlPMmR2YjJjdWMzUnlhVzVuTG1welJYTmpZWEJsUTJGamFHVmZQWHRjSWlkY0lqcGNJbHhjWEZ3blhDSjlPMXh1WjI5dlp5NXpkSEpwYm1jdWNYVnZkR1U5Wm5WdVkzUnBiMjRvWVNsN1lUMVRkSEpwYm1jb1lTazdabTl5S0haaGNpQmlQVnNuWENJblhTeGpQVEE3WXp4aExteGxibWQwYUR0akt5c3BlM1poY2lCa1BXRXVZMmhoY2tGMEtHTXBMR1U5WkM1amFHRnlRMjlrWlVGMEtEQXBPMkpiWXlzeFhUMW5iMjluTG5OMGNtbHVaeTV6Y0dWamFXRnNSWE5qWVhCbFEyaGhjbk5mVzJSZGZId29NekU4WlNZbU1USTNQbVUvWkRwbmIyOW5Mbk4wY21sdVp5NWxjMk5oY0dWRGFHRnlLR1FwS1gxaUxuQjFjMmdvSjF3aUp5azdjbVYwZFhKdUlHSXVhbTlwYmloY0lsd2lLWDA3WjI5dlp5NXpkSEpwYm1jdVpYTmpZWEJsVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VwZTJadmNpaDJZWElnWWoxYlhTeGpQVEE3WXp4aExteGxibWQwYUR0akt5c3BZbHRqWFQxbmIyOW5Mbk4wY21sdVp5NWxjMk5oY0dWRGFHRnlLR0V1WTJoaGNrRjBLR01wS1R0eVpYUjFjbTRnWWk1cWIybHVLRndpWENJcGZUdGNibWR2YjJjdWMzUnlhVzVuTG1WelkyRndaVU5vWVhJOVpuVnVZM1JwYjI0b1lTbDdhV1lvWVNCcGJpQm5iMjluTG5OMGNtbHVaeTVxYzBWelkyRndaVU5oWTJobFh5bHlaWFIxY200Z1oyOXZaeTV6ZEhKcGJtY3Vhbk5GYzJOaGNHVkRZV05vWlY5YllWMDdhV1lvWVNCcGJpQm5iMjluTG5OMGNtbHVaeTV6Y0dWamFXRnNSWE5qWVhCbFEyaGhjbk5mS1hKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1cWMwVnpZMkZ3WlVOaFkyaGxYMXRoWFQxbmIyOW5Mbk4wY21sdVp5NXpjR1ZqYVdGc1JYTmpZWEJsUTJoaGNuTmZXMkZkTzNaaGNpQmlQV0V1WTJoaGNrTnZaR1ZCZENnd0tUdHBaaWd6TVR4aUppWXhNamMrWWlsMllYSWdZejFoTzJWc2MyVjdhV1lvTWpVMlBtSXBlMmxtS0dNOVhDSmNYRnhjZUZ3aUxERTJQbUo4ZkRJMU5qeGlLV01yUFZ3aU1Gd2lmV1ZzYzJVZ1l6MWNJbHhjWEZ4MVhDSXNOREE1Tmo1aUppWW9ZeXM5WENJd1hDSXBPMk1yUFdJdWRHOVRkSEpwYm1jb01UWXBMblJ2VlhCd1pYSkRZWE5sS0NsOWNtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtcHpSWE5qWVhCbFEyRmphR1ZmVzJGZFBXTjlPMmR2YjJjdWMzUnlhVzVuTG1OdmJuUmhhVzV6UFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTnZiblJoYVc1ek8yZHZiMmN1YzNSeWFXNW5MbU5oYzJWSmJuTmxibk5wZEdsMlpVTnZiblJoYVc1elBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVTnZiblJoYVc1ek8xeHVaMjl2Wnk1emRISnBibWN1WTI5MWJuUlBaajFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCaEppWmlQMkV1YzNCc2FYUW9ZaWt1YkdWdVozUm9MVEU2TUgwN1oyOXZaeTV6ZEhKcGJtY3VjbVZ0YjNabFFYUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUzWmhjaUJrUFdFN01EdzlZaVltWWp4aExteGxibWQwYUNZbU1EeGpKaVlvWkQxaExuTjFZbk4wY2lnd0xHSXBLMkV1YzNWaWMzUnlLR0lyWXl4aExteGxibWQwYUMxaUxXTXBLVHR5WlhSMWNtNGdaSDA3WjI5dlp5NXpkSEpwYm1jdWNtVnRiM1psUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTaGlMRndpWENJcGZUdG5iMjluTG5OMGNtbHVaeTV5WlcxdmRtVkJiR3c5Wm5WdVkzUnBiMjRvWVN4aUtYdGlQVzVsZHlCU1pXZEZlSEFvWjI5dlp5NXpkSEpwYm1jdWNtVm5SWGh3UlhOallYQmxLR0lwTEZ3aVoxd2lLVHR5WlhSMWNtNGdZUzV5WlhCc1lXTmxLR0lzWENKY0lpbDlPMmR2YjJjdWMzUnlhVzVuTG5KbGNHeGhZMlZCYkd3OVpuVnVZM1JwYjI0b1lTeGlMR01wZTJJOWJtVjNJRkpsWjBWNGNDaG5iMjluTG5OMGNtbHVaeTV5WldkRmVIQkZjMk5oY0dVb1lpa3NYQ0puWENJcE8zSmxkSFZ5YmlCaExuSmxjR3hoWTJVb1lpeGpMbkpsY0d4aFkyVW9MMXhjSkM5bkxGd2lKQ1FrSkZ3aUtTbDlPMXh1WjI5dlp5NXpkSEpwYm1jdWNtVm5SWGh3UlhOallYQmxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJUZEhKcGJtY29ZU2t1Y21Wd2JHRmpaU2d2S0ZzdEtDbGNYRnRjWEYxN2ZTcy9LaTRrWEZ4ZWZDdzZJendoWEZ4Y1hGMHBMMmNzWENKY1hGeGNKREZjSWlrdWNtVndiR0ZqWlNndlhGeDRNRGd2Wnl4Y0lseGNYRng0TURoY0lpbDlPMmR2YjJjdWMzUnlhVzVuTG5KbGNHVmhkRDFUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMbkpsY0dWaGREOW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJoTG5KbGNHVmhkQ2hpS1gwNlpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdRWEp5WVhrb1lpc3hLUzVxYjJsdUtHRXBmVHRuYjI5bkxuTjBjbWx1Wnk1d1lXUk9kVzFpWlhJOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJFOVoyOXZaeTVwYzBSbFppaGpLVDloTG5SdlJtbDRaV1FvWXlrNlUzUnlhVzVuS0dFcE8yTTlZUzVwYm1SbGVFOW1LRndpTGx3aUtUc3RNVDA5WXlZbUtHTTlZUzVzWlc1bmRHZ3BPM0psZEhWeWJpQm5iMjluTG5OMGNtbHVaeTV5WlhCbFlYUW9YQ0l3WENJc1RXRjBhQzV0WVhnb01DeGlMV01wS1N0aGZUdG5iMjluTG5OMGNtbHVaeTV0WVd0bFUyRm1aVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnYm5Wc2JEMDlZVDljSWx3aU9sTjBjbWx1WnloaEtYMDdYRzVuYjI5bkxuTjBjbWx1Wnk1aWRXbHNaRk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExtcHZhVzR1WTJGc2JDaGhjbWQxYldWdWRITXNYQ0pjSWlsOU8yZHZiMmN1YzNSeWFXNW5MbWRsZEZKaGJtUnZiVk4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQk5ZWFJvTG1ac2IyOXlLREl4TkRjME9ETTJORGdxVFdGMGFDNXlZVzVrYjIwb0tTa3VkRzlUZEhKcGJtY29NellwSzAxaGRHZ3VZV0p6S0UxaGRHZ3VabXh2YjNJb01qRTBOelE0TXpZME9DcE5ZWFJvTG5KaGJtUnZiU2dwS1Y1bmIyOW5MbTV2ZHlncEtTNTBiMU4wY21sdVp5Z3pOaWw5TzJkdmIyY3VjM1J5YVc1bkxtTnZiWEJoY21WV1pYSnphVzl1Y3oxbmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNWpiMjF3WVhKbFZtVnljMmx2Ym5NN1oyOXZaeTV6ZEhKcGJtY3VhR0Z6YUVOdlpHVTlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFRBc1l6MHdPMk04WVM1c1pXNW5kR2c3S3l0aktXSTlNekVxWWl0aExtTm9ZWEpEYjJSbFFYUW9ZeWsrUGo0d08zSmxkSFZ5YmlCaWZUdG5iMjluTG5OMGNtbHVaeTUxYm1seGRXVlRkSEpwYm1kRGIzVnVkR1Z5WHoweU1UUTNORGd6TmpRNEtrMWhkR2d1Y21GdVpHOXRLQ2w4TUR0Y2JtZHZiMmN1YzNSeWFXNW5MbU55WldGMFpWVnVhWEYxWlZOMGNtbHVaejFtZFc1amRHbHZiaWdwZTNKbGRIVnlibHdpWjI5dloxOWNJaXRuYjI5bkxuTjBjbWx1Wnk1MWJtbHhkV1ZUZEhKcGJtZERiM1Z1ZEdWeVh5c3JmVHRuYjI5bkxuTjBjbWx1Wnk1MGIwNTFiV0psY2oxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxT2RXMWlaWElvWVNrN2NtVjBkWEp1SURBOVBXSW1KbWR2YjJjdWMzUnlhVzVuTG1selJXMXdkSGxQY2xkb2FYUmxjM0JoWTJVb1lTay9UbUZPT21KOU8yZHZiMmN1YzNSeWFXNW5MbWx6VEc5M1pYSkRZVzFsYkVOaGMyVTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVMMTViWVMxNlhTc29XMEV0V2wxYllTMTZYU29wS2lRdkxuUmxjM1FvWVNsOU8yZHZiMmN1YzNSeWFXNW5MbWx6VlhCd1pYSkRZVzFsYkVOaGMyVTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVMMTRvVzBFdFdsMWJZUzE2WFNvcEt5UXZMblJsYzNRb1lTbDlPMmR2YjJjdWMzUnlhVzVuTG5SdlEyRnRaV3hEWVhObFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQlRkSEpwYm1jb1lTa3VjbVZ3YkdGalpTZ3ZYRnd0S0Z0aExYcGRLUzluTEdaMWJtTjBhVzl1S0dFc1l5bDdjbVYwZFhKdUlHTXVkRzlWY0hCbGNrTmhjMlVvS1gwcGZUdGNibWR2YjJjdWMzUnlhVzVuTG5SdlUyVnNaV04wYjNKRFlYTmxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJUZEhKcGJtY29ZU2t1Y21Wd2JHRmpaU2d2S0Z0QkxWcGRLUzluTEZ3aUxTUXhYQ0lwTG5SdlRHOTNaWEpEWVhObEtDbDlPMmR2YjJjdWMzUnlhVzVuTG5SdlZHbDBiR1ZEWVhObFBXWjFibU4wYVc5dUtHRXNZaWw3WWoxbmIyOW5MbWx6VTNSeWFXNW5LR0lwUDJkdmIyY3VjM1J5YVc1bkxuSmxaMFY0Y0VWelkyRndaU2hpS1RwY0lseGNYRnh6WENJN2NtVjBkWEp1SUdFdWNtVndiR0ZqWlNodVpYY2dVbVZuUlhod0tGd2lLRjVjSWlzb1lqOWNJbnhiWENJcllpdGNJbDByWENJNlhDSmNJaWtyWENJcEtGdGhMWHBkS1Z3aUxGd2laMXdpS1N4bWRXNWpkR2x2YmloaExHSXNaU2w3Y21WMGRYSnVJR0lyWlM1MGIxVndjR1Z5UTJGelpTZ3BmU2w5TzJkdmIyY3VjM1J5YVc1bkxtTmhjR2wwWVd4cGVtVTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJRk4wY21sdVp5aGhMbU5vWVhKQmRDZ3dLU2t1ZEc5VmNIQmxja05oYzJVb0tTdFRkSEpwYm1jb1lTNXpkV0p6ZEhJb01Ta3BMblJ2VEc5M1pYSkRZWE5sS0NsOU8xeHVaMjl2Wnk1emRISnBibWN1Y0dGeWMyVkpiblE5Wm5WdVkzUnBiMjRvWVNsN2FYTkdhVzVwZEdVb1lTa21KaWhoUFZOMGNtbHVaeWhoS1NrN2NtVjBkWEp1SUdkdmIyY3VhWE5UZEhKcGJtY29ZU2svTDE1Y1hITXFMVDh3ZUM5cExuUmxjM1FvWVNrL2NHRnljMlZKYm5Rb1lTd3hOaWs2Y0dGeWMyVkpiblFvWVN3eE1DazZUbUZPZlR0bmIyOW5Mbk4wY21sdVp5NXpjR3hwZEV4cGJXbDBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGhQV0V1YzNCc2FYUW9ZaWs3Wm05eUtIWmhjaUJrUFZ0ZE96QThZeVltWVM1c1pXNW5kR2c3S1dRdWNIVnphQ2hoTG5Ob2FXWjBLQ2twTEdNdExUdGhMbXhsYm1kMGFDWW1aQzV3ZFhOb0tHRXVhbTlwYmloaUtTazdjbVYwZFhKdUlHUjlPMmR2YjJjdWMzUnlhVzVuTG14aGMzUkRiMjF3YjI1bGJuUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaGlLVndpYzNSeWFXNW5YQ0k5UFhSNWNHVnZaaUJpSmlZb1lqMWJZbDBwTzJWc2MyVWdjbVYwZFhKdUlHRTdabTl5S0haaGNpQmpQUzB4TEdROU1EdGtQR0l1YkdWdVozUm9PMlFyS3lscFppaGNJbHdpSVQxaVcyUmRLWHQyWVhJZ1pUMWhMbXhoYzNSSmJtUmxlRTltS0dKYlpGMHBPMlUrWXlZbUtHTTlaU2w5Y21WMGRYSnVMVEU5UFdNL1lUcGhMbk5zYVdObEtHTXJNU2w5TzF4dVoyOXZaeTV6ZEhKcGJtY3VaV1JwZEVScGMzUmhibU5sUFdaMWJtTjBhVzl1S0dFc1lpbDdkbUZ5SUdNOVcxMHNaRDFiWFR0cFppaGhQVDFpS1hKbGRIVnliaUF3TzJsbUtDRmhMbXhsYm1kMGFIeDhJV0l1YkdWdVozUm9LWEpsZEhWeWJpQk5ZWFJvTG0xaGVDaGhMbXhsYm1kMGFDeGlMbXhsYm1kMGFDazdabTl5S0haaGNpQmxQVEE3WlR4aUxteGxibWQwYUNzeE8yVXJLeWxqVzJWZFBXVTdabTl5S0dVOU1EdGxQR0V1YkdWdVozUm9PMlVyS3lsN1pGc3dYVDFsS3pFN1ptOXlLSFpoY2lCbVBUQTdaanhpTG14bGJtZDBhRHRtS3lzcFpGdG1LekZkUFUxaGRHZ3ViV2x1S0dSYlpsMHJNU3hqVzJZck1WMHJNU3hqVzJaZEswNTFiV0psY2loaFcyVmRJVDFpVzJaZEtTazdabTl5S0dZOU1EdG1QR011YkdWdVozUm9PMllyS3lsalcyWmRQV1JiWmwxOWNtVjBkWEp1SUdSYllpNXNaVzVuZEdoZGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpUMTdmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1WdVoybHVaUzVwYzFCeVpYTjBiejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSlFjbVZ6ZEc5Y0lpbDlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Wlc1bmFXNWxMbWx6VkhKcFpHVnVkRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSlVjbWxrWlc1MFhDSXBmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSk5VMGxGWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNXBjMFZrWjJVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG0xaGRHTm9WWE5sY2tGblpXNTBLRndpUldSblpWd2lLWDA3WEc1bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMxZGxZa3RwZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUkpaMjV2Y21WRFlYTmxLRndpVjJWaVMybDBYQ0lwSmlZaFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWxibWRwYm1VdWFYTkZaR2RsS0NsOU8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVaVzVuYVc1bExtbHpSMlZqYTI4OVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG0xaGRHTm9WWE5sY2tGblpXNTBLRndpUjJWamEyOWNJaWttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMxZGxZa3RwZENncEppWWhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVsYm1kcGJtVXVhWE5VY21sa1pXNTBLQ2ttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMwVmtaMlVvS1gwN1hHNW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNW5aWFJXWlhKemFXOXVQV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtZGxkRlZ6WlhKQloyVnVkQ2dwTzJsbUtHRXBlMkU5WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbVY0ZEhKaFkzUldaWEp6YVc5dVZIVndiR1Z6S0dFcE8zWmhjaUJpUFdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVpXNW5hVzVsTG1kbGRFVnVaMmx1WlZSMWNHeGxYeWhoS1R0cFppaGlLWEpsZEhWeWJsd2lSMlZqYTI5Y0lqMDlZbHN3WFQ5bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1blpYUldaWEp6YVc5dVJtOXlTMlY1WHloaExGd2lSbWx5WldadmVGd2lLVHBpV3pGZE8yRTlZVnN3WFR0MllYSWdZenRwWmloaEppWW9ZejFoV3pKZEtTWW1LR005TDFSeWFXUmxiblJjWEM4b1cxNWNYSE03WFNzcEx5NWxlR1ZqS0dNcEtTbHlaWFIxY200Z1kxc3hYWDF5WlhSMWNtNWNJbHdpZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVaVzVuYVc1bExtZGxkRVZ1WjJsdVpWUjFjR3hsWHoxbWRXNWpkR2x2YmloaEtYdHBaaWdoWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1bGJtZHBibVV1YVhORlpHZGxLQ2twY21WMGRYSnVJR0ZiTVYwN1ptOXlLSFpoY2lCaVBUQTdZanhoTG14bGJtZDBhRHRpS3lzcGUzWmhjaUJqUFdGYllsMDdhV1lvWENKRlpHZGxYQ0k5UFdOYk1GMHBjbVYwZFhKdUlHTjlmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1WdVoybHVaUzVwYzFabGNuTnBiMjVQY2tocFoyaGxjajFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnTUR3OVoyOXZaeTV6ZEhKcGJtY3VZMjl0Y0dGeVpWWmxjbk5wYjI1ektHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVaVzVuYVc1bExtZGxkRlpsY25OcGIyNG9LU3hoS1gwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWxibWRwYm1VdVoyVjBWbVZ5YzJsdmJrWnZja3RsZVY4OVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNG9ZVDFuYjI5bkxtRnljbUY1TG1acGJtUW9ZU3htZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWWowOVlWc3dYWDBwS1NZbVlWc3hYWHg4WENKY0luMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliVDE3ZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpRVzVrY205cFpEMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKQmJtUnliMmxrWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1hCdlpEMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKcFVHOWtYQ0lwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTWEJvYjI1bFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSW1sUWFHOXVaVndpS1NZbUlXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSW1sUWIyUmNJaWttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pwVUdGa1hDSXBmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNYQmhaRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSnBVR0ZrWENJcGZUdGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOSmIzTTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzBsd2FHOXVaU2dwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTWEJoWkNncGZIeG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1hCdlpDZ3BmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selRXRmphVzUwYjNOb1BXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWsxaFkybHVkRzl6YUZ3aUtYMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzB4cGJuVjRQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lreHBiblY0WENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6VjJsdVpHOTNjejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSlhhVzVrYjNkelhDSXBmVHRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWNHeGhkR1p2Y20wdWFYTkRhSEp2YldWUFV6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKRGNrOVRYQ0lwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpRMmh5YjIxbFkyRnpkRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkRja3RsZVZ3aUtYMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzB0aGFVOVRQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZEVsbmJtOXlaVU5oYzJVb1hDSkxZV2xQVTF3aUtYMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzBkdk1sQm9iMjVsUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRFbG5ibTl5WlVOaGMyVW9YQ0pIUVVaUVhDSXBmVHRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWNHeGhkR1p2Y20wdVoyVjBWbVZ5YzJsdmJqMW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1blpYUlZjMlZ5UVdkbGJuUW9LU3hpUFZ3aVhDSTdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzFkcGJtUnZkM01vS1Q4b1lqMHZWMmx1Wkc5M2N5QW9QenBPVkh4UWFHOXVaU2tnS0Zzd0xUa3VYU3NwTHl4aVBTaGhQV0l1WlhobFl5aGhLU2svWVZzeFhUcGNJakF1TUZ3aUtUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1c5ektDay9LR0k5THlnL09tbFFhRzl1Wlh4cFVHOWtmR2xRWVdSOFExQlZLVnhjY3l0UFUxeGNjeXNvWEZ4VEt5a3ZMR0k5S0dFOVlpNWxlR1ZqS0dFcEtTWW1ZVnN4WFM1eVpYQnNZV05sS0M5ZkwyY3NYQ0l1WENJcEtUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6VFdGamFXNTBiM05vS0NrL0tHSTlMMDFoWXlCUFV5QllJQ2hiTUMwNVh5NWRLeWt2TEdJOUtHRTlZaTVsZUdWaktHRXBLVDloV3pGZExuSmxjR3hoWTJVb0wxOHZaeXhjSWk1Y0lpazZYQ0l4TUZ3aUtUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6UzJGcFQxTW9LVDhvWWowdktEODZTMkZwVDFNcFhGd3ZLRnhjVXlzcEwya3NYRzVpUFNoaFBXSXVaWGhsWXloaEtTa21KbUZiTVYwcE9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5CYm1SeWIybGtLQ2svS0dJOUwwRnVaSEp2YVdSY1hITXJLRnRlWEZ3cE8xMHJLU2hjWENsOE95a3ZMR0k5S0dFOVlpNWxlR1ZqS0dFcEtTWW1ZVnN4WFNrNloyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNXdiR0YwWm05eWJTNXBjME5vY205dFpVOVRLQ2ttSmloaVBTOG9QenBEY2s5VFhGeHpLeWcvT21rMk9EWjhlRGcyWHpZMEtWeGNjeXNvV3pBdE9TNWRLeWtwTHl4aVBTaGhQV0l1WlhobFl5aGhLU2ttSm1GYk1WMHBPM0psZEhWeWJpQmlmSHhjSWx3aWZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6Vm1WeWMybHZiazl5U0dsbmFHVnlQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUF3UEQxbmIyOW5Mbk4wY21sdVp5NWpiMjF3WVhKbFZtVnljMmx2Ym5Nb1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNXdiR0YwWm05eWJTNW5aWFJXWlhKemFXOXVLQ2tzWVNsOU8yZHZiMmN1Y21WbWJHVmpkRDE3ZlR0bmIyOW5MbkpsWm14bFkzUXViMkpxWldOMFBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0o5TzJkdmIyY3VjbVZtYkdWamRDNXZZbXBsWTNSUWNtOXdaWEowZVQxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQmhmVHRuYjI5bkxuSmxabXhsWTNRdWMybHVhMVpoYkhWbFBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdWNtVm1iR1ZqZEM1emFXNXJWbUZzZFdWYlhDSWdYQ0pkS0dFcE8zSmxkSFZ5YmlCaGZUdG5iMjluTG5KbFpteGxZM1F1YzJsdWExWmhiSFZsVzF3aUlGd2lYVDFuYjI5bkxtNTFiR3hHZFc1amRHbHZianRuYjI5bkxuSmxabXhsWTNRdVkyRnVRV05qWlhOelVISnZjR1Z5ZEhrOVpuVnVZM1JwYjI0b1lTeGlLWHQwY25sN2NtVjBkWEp1SUdkdmIyY3VjbVZtYkdWamRDNXphVzVyVm1Gc2RXVW9ZVnRpWFNrc0lUQjlZMkYwWTJnb1l5bDdmWEpsZEhWeWJpRXhmVHRuYjI5bkxuSmxabXhsWTNRdVkyRmphR1U5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ2w3WkQxa1AyUW9ZaWs2WWp0eVpYUjFjbTRnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0dFc1pDay9ZVnRrWFRwaFcyUmRQV01vWWlsOU8yZHZiMmN1ZFhObGNrRm5aVzUwUFh0OU8yZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlKUlQwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmUlVSSFJUMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlIwVkRTMDg5SVRFN1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMWRGUWt0SlZEMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlRVOUNTVXhGWDFkRlFrdEpWRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZUMUJGVWtFOUlURTdaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBGT1dWOVdSVkpUU1U5T1BTRXhPMmR2YjJjdWRYTmxja0ZuWlc1MExrSlNUMWRUUlZKZlMwNVBWMDVmUFdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpSWHg4WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwVkVSMFY4ZkdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUhSVU5MVDN4OFoyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMDFQUWtsTVJWOVhSVUpMU1ZSOGZHZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlYUlVKTFNWUjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5UFVFVlNRVHRuYjI5bkxuVnpaWEpCWjJWdWRDNW5aWFJWYzJWeVFXZGxiblJUZEhKcGJtYzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtZGxkRlZ6WlhKQloyVnVkQ2dwZlR0Y2JtZHZiMmN1ZFhObGNrRm5aVzUwTG1kbGRFNWhkbWxuWVhSdmNsUjVjR1ZrUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3VaMnh2WW1Gc0xtNWhkbWxuWVhSdmNueDhiblZzYkgwN1oyOXZaeTUxYzJWeVFXZGxiblF1WjJWMFRtRjJhV2RoZEc5eVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1ZFhObGNrRm5aVzUwTG1kbGRFNWhkbWxuWVhSdmNsUjVjR1ZrS0NsOU8yZHZiMmN1ZFhObGNrRm5aVzUwTGs5UVJWSkJQV2R2YjJjdWRYTmxja0ZuWlc1MExrSlNUMWRUUlZKZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOVBVRVZTUVRwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWFYTlBjR1Z5WVNncE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtsRlBXZHZiMmN1ZFhObGNrRm5aVzUwTGtKU1QxZFRSVkpmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlJUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5KUlNncE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtWRVIwVTlaMjl2Wnk1MWMyVnlRV2RsYm5RdVFsSlBWMU5GVWw5TFRrOVhUbDgvWjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwVkVSMFU2WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1bGJtZHBibVV1YVhORlpHZGxLQ2s3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzVGUkVkRlgwOVNYMGxGUFdkdmIyY3VkWE5sY2tGblpXNTBMa1ZFUjBWOGZHZHZiMmN1ZFhObGNrRm5aVzUwTGtsRk8yZHZiMmN1ZFhObGNrRm5aVzUwTGtkRlEwdFBQV2R2YjJjdWRYTmxja0ZuWlc1MExrSlNUMWRUUlZKZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUhSVU5MVHpwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMwZGxZMnR2S0NrN1oyOXZaeTUxYzJWeVFXZGxiblF1VjBWQ1MwbFVQV2R2YjJjdWRYTmxja0ZuWlc1MExrSlNUMWRUUlZKZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOVhSVUpMU1ZSOGZHZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlOVDBKSlRFVmZWMFZDUzBsVU9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVaVzVuYVc1bExtbHpWMlZpUzJsMEtDazdaMjl2Wnk1MWMyVnlRV2RsYm5RdWFYTk5iMkpwYkdWZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1ZFhObGNrRm5aVzUwTGxkRlFrdEpWQ1ltWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbTFoZEdOb1ZYTmxja0ZuWlc1MEtGd2lUVzlpYVd4bFhDSXBmVHRjYm1kdmIyY3VkWE5sY2tGblpXNTBMazFQUWtsTVJUMW5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmVFU5Q1NVeEZYMWRGUWt0SlZIeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdWFYTk5iMkpwYkdWZktDazdaMjl2Wnk1MWMyVnlRV2RsYm5RdVUwRkdRVkpKUFdkdmIyY3VkWE5sY2tGblpXNTBMbGRGUWt0SlZEdG5iMjluTG5WelpYSkJaMlZ1ZEM1a1pYUmxjbTFwYm1WUWJHRjBabTl5YlY4OVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxbmIyOW5MblZ6WlhKQloyVnVkQzVuWlhST1lYWnBaMkYwYjNKVWVYQmxaQ2dwTzNKbGRIVnliaUJoSmlaaExuQnNZWFJtYjNKdGZIeGNJbHdpZlR0bmIyOW5MblZ6WlhKQloyVnVkQzVRVEVGVVJrOVNUVDFuYjI5bkxuVnpaWEpCWjJWdWRDNWtaWFJsY20xcGJtVlFiR0YwWm05eWJWOG9LVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlRVRkRQU0V4TzJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOVhTVTVFVDFkVFBTRXhPMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5TVNVNVZXRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZXREV4UFNFeE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlCVGtSU1QwbEVQU0V4TzJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpVRWhQVGtVOUlURTdYRzVuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlNWQkJSRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZTVkJQUkQwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmUzBGSlQxTTlJVEU3WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwZFBNbEJJVDA1RlBTRXhPMmR2YjJjdWRYTmxja0ZuWlc1MExsQk1RVlJHVDFKTlgwdE9UMWRPWHoxbmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZUVUZEZkh4bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZWMGxPUkU5WFUzeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDB4SlRsVllmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZldERXhmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlFVNUVVazlKUkh4OFoyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMGxRU0U5T1JYeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBsUVFVUjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlVFOUVPMmR2YjJjdWRYTmxja0ZuWlc1MExrMUJRejFuYjI5bkxuVnpaWEpCWjJWdWRDNVFURUZVUms5U1RWOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMDFCUXpwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpUV0ZqYVc1MGIzTm9LQ2s3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzVYU1U1RVQxZFRQV2R2YjJjdWRYTmxja0ZuWlc1MExsQk1RVlJHVDFKTlgwdE9UMWRPWHo5bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZWMGxPUkU5WFV6cG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6VjJsdVpHOTNjeWdwTzJkdmIyY3VkWE5sY2tGblpXNTBMbWx6VEdWbllXTjVUR2x1ZFhoZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5NYVc1MWVDZ3BmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selEyaHliMjFsVDFNb0tYMDdaMjl2Wnk1MWMyVnlRV2RsYm5RdVRFbE9WVmc5WjI5dlp5NTFjMlZ5UVdkbGJuUXVVRXhCVkVaUFVrMWZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlNU1U1VldEcG5iMjluTG5WelpYSkJaMlZ1ZEM1cGMweGxaMkZqZVV4cGJuVjRYeWdwTzJkdmIyY3VkWE5sY2tGblpXNTBMbWx6V0RFeFh6MW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBXZHZiMmN1ZFhObGNrRm5aVzUwTG1kbGRFNWhkbWxuWVhSdmNsUjVjR1ZrS0NrN2NtVjBkWEp1SVNGaEppWm5iMjluTG5OMGNtbHVaeTVqYjI1MFlXbHVjeWhoTG1Gd2NGWmxjbk5wYjI1OGZGd2lYQ0lzWENKWU1URmNJaWw5TzF4dVoyOXZaeTUxYzJWeVFXZGxiblF1V0RFeFBXZHZiMmN1ZFhObGNrRm5aVzUwTGxCTVFWUkdUMUpOWDB0T1QxZE9YejluYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZldERXhPbWR2YjJjdWRYTmxja0ZuWlc1MExtbHpXREV4WHlncE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtGT1JGSlBTVVE5WjI5dlp5NTFjMlZ5UVdkbGJuUXVVRXhCVkVaUFVrMWZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlCVGtSU1QwbEVPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOQmJtUnliMmxrS0NrN1oyOXZaeTUxYzJWeVFXZGxiblF1U1ZCSVQwNUZQV2R2YjJjdWRYTmxja0ZuWlc1MExsQk1RVlJHVDFKTlgwdE9UMWRPWHo5bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZTVkJJVDA1Rk9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5KY0dodmJtVW9LVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUpVRUZFUFdkdmIyY3VkWE5sY2tGblpXNTBMbEJNUVZSR1QxSk5YMHRPVDFkT1h6OW5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmU1ZCQlJEcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1hCaFpDZ3BPMXh1WjI5dlp5NTFjMlZ5UVdkbGJuUXVTVkJQUkQxbmIyOW5MblZ6WlhKQloyVnVkQzVRVEVGVVJrOVNUVjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBsUVQwUTZaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzBsd2IyUW9LVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUpUMU05WjI5dlp5NTFjMlZ5UVdkbGJuUXVVRXhCVkVaUFVrMWZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlKVUVoUFRrVjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlVFRkVmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlNWQlBSRHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNXOXpLQ2s3WjI5dlp5NTFjMlZ5UVdkbGJuUXVTMEZKVDFNOVoyOXZaeTUxYzJWeVFXZGxiblF1VUV4QlZFWlBVazFmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5TFFVbFBVenBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selMyRnBUMU1vS1R0bmIyOW5MblZ6WlhKQloyVnVkQzVIVHpKUVNFOU9SVDFuYjI5bkxuVnpaWEpCWjJWdWRDNVFURUZVUms5U1RWOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMGRQTWxCSVQwNUZPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOSGJ6SlFhRzl1WlNncE8xeHVaMjl2Wnk1MWMyVnlRV2RsYm5RdVpHVjBaWEp0YVc1bFZtVnljMmx2Ymw4OVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxY0lsd2lMR0k5WjI5dlp5NTFjMlZ5UVdkbGJuUXVaMlYwVm1WeWMybHZibEpsWjJWNFVtVnpkV3gwWHlncE8ySW1KaWhoUFdJL1lsc3hYVHBjSWx3aUtUdHlaWFIxY200Z1oyOXZaeTUxYzJWeVFXZGxiblF1U1VVbUppaGlQV2R2YjJjdWRYTmxja0ZuWlc1MExtZGxkRVJ2WTNWdFpXNTBUVzlrWlY4b0tTeHVkV3hzSVQxaUppWmlQbkJoY25ObFJteHZZWFFvWVNrcFAxTjBjbWx1WnloaUtUcGhmVHRjYm1kdmIyY3VkWE5sY2tGblpXNTBMbWRsZEZabGNuTnBiMjVTWldkbGVGSmxjM1ZzZEY4OVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxbmIyOW5MblZ6WlhKQloyVnVkQzVuWlhSVmMyVnlRV2RsYm5SVGRISnBibWNvS1R0cFppaG5iMjluTG5WelpYSkJaMlZ1ZEM1SFJVTkxUeWx5WlhSMWNtNHZjblk2S0Z0ZVhGd3BPMTByS1NoY1hDbDhPeWt2TG1WNFpXTW9ZU2s3YVdZb1oyOXZaeTUxYzJWeVFXZGxiblF1UlVSSFJTbHlaWFIxY200dlJXUm5aVnhjTHloYlhGeGtYRnd1WFNzcEx5NWxlR1ZqS0dFcE8ybG1LR2R2YjJjdWRYTmxja0ZuWlc1MExrbEZLWEpsZEhWeWJpOWNYR0lvUHpwTlUwbEZmSEoyS1ZzNklGMG9XMTVjWENrN1hTc3BLRnhjS1h3N0tTOHVaWGhsWXloaEtUdHBaaWhuYjI5bkxuVnpaWEpCWjJWdWRDNVhSVUpMU1ZRcGNtVjBkWEp1TDFkbFlrdHBkRnhjTHloY1hGTXJLUzh1WlhobFl5aGhLVHRwWmlobmIyOW5MblZ6WlhKQloyVnVkQzVQVUVWU1FTbHlaWFIxY200dktEODZWbVZ5YzJsdmJpbGJJRnhjTDEwL0tGeGNVeXNwTHk1bGVHVmpLR0VwZlR0bmIyOW5MblZ6WlhKQloyVnVkQzVuWlhSRWIyTjFiV1Z1ZEUxdlpHVmZQV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblE3Y21WMGRYSnVJR0UvWVM1a2IyTjFiV1Z1ZEUxdlpHVTZkbTlwWkNBd2ZUdGNibWR2YjJjdWRYTmxja0ZuWlc1MExsWkZVbE5KVDA0OVoyOXZaeTUxYzJWeVFXZGxiblF1WkdWMFpYSnRhVzVsVm1WeWMybHZibDhvS1R0bmIyOW5MblZ6WlhKQloyVnVkQzVqYjIxd1lYSmxQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtTnZiWEJoY21WV1pYSnphVzl1Y3loaExHSXBmVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXBjMVpsY25OcGIyNVBja2hwWjJobGNrTmhZMmhsWHoxN2ZUdG5iMjluTG5WelpYSkJaMlZ1ZEM1cGMxWmxjbk5wYjI1UGNraHBaMmhsY2oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMEZPV1Y5V1JWSlRTVTlPZkh4bmIyOW5MbkpsWm14bFkzUXVZMkZqYUdVb1oyOXZaeTUxYzJWeVFXZGxiblF1YVhOV1pYSnphVzl1VDNKSWFXZG9aWEpEWVdOb1pWOHNZU3htZFc1amRHbHZiaWdwZTNKbGRIVnliaUF3UEQxbmIyOW5Mbk4wY21sdVp5NWpiMjF3WVhKbFZtVnljMmx2Ym5Nb1oyOXZaeTUxYzJWeVFXZGxiblF1VmtWU1UwbFBUaXhoS1gwcGZUdG5iMjluTG5WelpYSkJaMlZ1ZEM1cGMxWmxjbk5wYjI0OVoyOXZaeTUxYzJWeVFXZGxiblF1YVhOV1pYSnphVzl1VDNKSWFXZG9aWEk3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzVwYzBSdlkzVnRaVzUwVFc5a1pVOXlTR2xuYUdWeVBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQk9kVzFpWlhJb1oyOXZaeTUxYzJWeVFXZGxiblF1UkU5RFZVMUZUbFJmVFU5RVJTaytQV0Y5TzJkdmIyY3VkWE5sY2tGblpXNTBMbWx6Ukc5amRXMWxiblJOYjJSbFBXZHZiMmN1ZFhObGNrRm5aVzUwTG1selJHOWpkVzFsYm5STmIyUmxUM0pJYVdkb1pYSTdaMjl2Wnk1MWMyVnlRV2RsYm5RdVJFOURWVTFGVGxSZlRVOUVSVDFtZFc1amRHbHZiaWdwZTJsbUtHZHZiMmN1WjJ4dlltRnNMbVJ2WTNWdFpXNTBKaVpuYjI5bkxuVnpaWEpCWjJWdWRDNUpSU2x5WlhSMWNtNGdaMjl2Wnk1MWMyVnlRV2RsYm5RdVoyVjBSRzlqZFcxbGJuUk5iMlJsWHlncGZTZ3BPMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNROWUzMDdaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmUmtsU1JVWlBXRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa0ZUVTFWTlJWOUpVRWhQVGtVOUlURTdaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmU1ZCQlJEMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5QlRrUlNUMGxFUFNFeE8yZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1UVZOVFZVMUZYME5JVWs5TlJUMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5VFFVWkJVa2s5SVRFN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGxCU1QwUlZRMVJmUzA1UFYwNWZQV2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlJYeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBWRVIwVjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5UFVFVlNRWHg4WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNUJVMU5WVFVWZlJrbFNSVVpQV0h4OFoyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVCVTFOVlRVVmZTVkJJVDA1RmZIeG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtGVFUxVk5SVjlKVUVGRWZIeG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtGVFUxVk5SVjlCVGtSU1QwbEVmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5RFNGSlBUVVY4ZkdkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVRVk5UVlUxRlgxTkJSa0ZTU1R0bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMazlRUlZKQlBXZHZiMmN1ZFhObGNrRm5aVzUwTGs5UVJWSkJPMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdVNVVTlaMjl2Wnk1MWMyVnlRV2RsYm5RdVNVVTdaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1RlJFZEZQV2R2YjJjdWRYTmxja0ZuWlc1MExrVkVSMFU3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa1pKVWtWR1QxZzlaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1UVVrOUVWVU5VWDB0T1QxZE9YejluYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5R1NWSkZSazlZT21kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMwWnBjbVZtYjNnb0tUdG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTG1selNYQm9iMjVsVDNKSmNHOWtYejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNYQm9iMjVsS0NsOGZHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5KY0c5a0tDbDlPMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdVNWQklUMDVGUFdkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVVRkpQUkZWRFZGOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVCVTFOVlRVVmZTVkJJVDA1Rk9tZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1YVhOSmNHaHZibVZQY2tsd2IyUmZLQ2s3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa2xRUVVROVoyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVRVWs5RVZVTlVYMHRPVDFkT1h6OW5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtGVFUxVk5SVjlKVUVGRU9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5KY0dGa0tDazdaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlRrUlNUMGxFUFdkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVVRkpQUkZWRFZGOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVCVTFOVlRVVmZRVTVFVWs5SlJEcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5CYm1SeWIybGtRbkp2ZDNObGNpZ3BPMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdVEwaFNUMDFGUFdkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVVRkpQUkZWRFZGOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVCVTFOVlRVVmZRMGhTVDAxRk9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjME5vY205dFpTZ3BPMXh1WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNXBjMU5oWm1GeWFVUmxjMnQwYjNCZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMU5oWm1GeWFTZ3BKaVloWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMwbHZjeWdwZlR0bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMbE5CUmtGU1NUMW5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGxCU1QwUlZRMVJmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdVFWTlRWVTFGWDFOQlJrRlNTVHBuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExtbHpVMkZtWVhKcFJHVnphM1J2Y0Y4b0tUdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5EMTdmVHRuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVFUlVaQlZVeFVYMEZNVUVoQlFrVlVYME5QVFUxUFRsODlYQ0pCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbUZpWTJSbFptZG9hV3ByYkcxdWIzQnhjbk4wZFhaM2VIbDZNREV5TXpRMU5qYzRPVndpTzJkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTGtWT1EwOUVSVVJmVmtGTVV6MW5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUVSVVpCVlV4VVgwRk1VRWhCUWtWVVgwTlBUVTFQVGw4clhDSXJMejFjSWp0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1RlRrTlBSRVZFWDFaQlRGTmZWMFZDVTBGR1JUMW5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUVSVVpCVlV4VVgwRk1VRWhCUWtWVVgwTlBUVTFQVGw4clhDSXRYeTVjSWp0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1QmJIQm9ZV0psZEQxN1JFVkdRVlZNVkRvd0xFNVBYMUJCUkVSSlRrYzZNU3hYUlVKVFFVWkZPaklzVjBWQ1UwRkdSVjlFVDFSZlVFRkVSRWxPUnpvekxGZEZRbE5CUmtWZlRrOWZVRUZFUkVsT1J6bzBmVHRuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzV3WVdSa2FXNW5RMmhoY25OZlBWd2lQUzVjSWp0Y2JtZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtbHpVR0ZrWkdsdVoxODlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWMzUnlhVzVuTG1OdmJuUmhhVzV6S0dkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG5CaFpHUnBibWREYUdGeWMxOHNZU2w5TzJkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1KNWRHVlViME5vWVhKTllYQnpYejE3ZlR0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1amFHRnlWRzlDZVhSbFRXRndYejF1ZFd4c08yZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExrRlRVMVZOUlY5T1FWUkpWa1ZmVTFWUVVFOVNWRjg5WjI5dlp5NTFjMlZ5UVdkbGJuUXVSMFZEUzA5OGZHZHZiMmN1ZFhObGNrRm5aVzUwTGxkRlFrdEpWQ1ltSVdkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVVMEZHUVZKSmZIeG5iMjluTG5WelpYSkJaMlZ1ZEM1UFVFVlNRVHRuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVJUVZOZlRrRlVTVlpGWDBWT1EwOUVSVjg5WjI5dlp5NWpjbmx3ZEM1aVlYTmxOalF1UVZOVFZVMUZYMDVCVkVsV1JWOVRWVkJRVDFKVVgzeDhYQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnWjI5dlp5NW5iRzlpWVd3dVluUnZZVHRjYm1kdmIyY3VZM0o1Y0hRdVltRnpaVFkwTGtoQlUxOU9RVlJKVmtWZlJFVkRUMFJGWHoxbmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1QlUxTlZUVVZmVGtGVVNWWkZYMU5WVUZCUFVsUmZmSHdoWjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNVRRVVpCVWtrbUppRm5iMjluTG5WelpYSkJaMlZ1ZEM1SlJTWW1YQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnWjI5dlp5NW5iRzlpWVd3dVlYUnZZanRjYm1kdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1WdVkyOWtaVUo1ZEdWQmNuSmhlVDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9aMjl2Wnk1cGMwRnljbUY1VEdsclpTaGhLU3hjSW1WdVkyOWtaVUo1ZEdWQmNuSmhlU0IwWVd0bGN5QmhiaUJoY25KaGVTQmhjeUJoSUhCaGNtRnRaWFJsY2x3aUtUdDJiMmxrSURBOVBUMWlKaVlvWWoxbmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1QmJIQm9ZV0psZEM1RVJVWkJWVXhVS1R0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1cGJtbDBYeWdwTzJJOVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVlubDBaVlJ2UTJoaGNrMWhjSE5mVzJKZE8yWnZjaWgyWVhJZ1l6MWJYU3hrUFRBN1pEeGhMbXhsYm1kMGFEdGtLejB6S1h0MllYSWdaVDFoVzJSZExHWTlaQ3N4UEdFdWJHVnVaM1JvTEdjOVpqOWhXMlFyTVYwNk1DeG9QV1FyTWp4aExteGxibWQwYUN4clBXZy9ZVnRrS3pKZE9qQXNiRDFsUGo0eU8yVTlLR1VtTXlrOFBEUjhaejQrTkR0blBTaG5KakUxS1R3OE1ueHJQajQyTzJzbVBUWXpPMmg4ZkNoclBUWTBMR1o4ZkNoblBUWTBLU2s3WXk1d2RYTm9LR0piYkYwc1lsdGxYU3hpVzJkZGZIeGNJbHdpTEdKYmExMThmRndpWENJcGZYSmxkSFZ5YmlCakxtcHZhVzRvWENKY0lpbDlPMXh1WjI5dlp5NWpjbmx3ZEM1aVlYTmxOalF1Wlc1amIyUmxVM1J5YVc1blBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR2R2YjJjdVkzSjVjSFF1WW1GelpUWTBMa2hCVTE5T1FWUkpWa1ZmUlU1RFQwUkZYeVltSVdJL1oyOXZaeTVuYkc5aVlXd3VZblJ2WVNoaEtUcG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNWxibU52WkdWQ2VYUmxRWEp5WVhrb1oyOXZaeTVqY25sd2RDNXpkSEpwYm1kVWIwSjVkR1ZCY25KaGVTaGhLU3hpS1gwN1oyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVpHVmpiMlJsVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9aMjl2Wnk1amNubHdkQzVpWVhObE5qUXVTRUZUWDA1QlZFbFdSVjlFUlVOUFJFVmZKaVloWWlseVpYUjFjbTRnWjI5dlp5NW5iRzlpWVd3dVlYUnZZaWhoS1R0MllYSWdZejFjSWx3aU8yZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtUmxZMjlrWlZOMGNtbHVaMGx1ZEdWeWJtRnNYeWhoTEdaMWJtTjBhVzl1S0dFcGUyTXJQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvWVNsOUtUdHlaWFIxY200Z1kzMDdYRzVuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVrWldOdlpHVlRkSEpwYm1kVWIwSjVkR1ZCY25KaGVUMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQVnRkTzJkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1SbFkyOWtaVk4wY21sdVowbHVkR1Z5Ym1Gc1h5aGhMR1oxYm1OMGFXOXVLR0VwZTJNdWNIVnphQ2hoS1gwcE8zSmxkSFZ5YmlCamZUdGNibWR2YjJjdVkzSjVjSFF1WW1GelpUWTBMbVJsWTI5a1pWTjBjbWx1WjFSdlZXbHVkRGhCY25KaGVUMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0NGbmIyOW5MblZ6WlhKQloyVnVkQzVKUlh4OFoyOXZaeTUxYzJWeVFXZGxiblF1YVhOV1pYSnphVzl1VDNKSWFXZG9aWElvWENJeE1Gd2lLU3hjSWtKeWIzZHpaWElnWkc5bGN5QnViM1FnYzNWd2NHOXlkQ0IwZVhCbFpDQmhjbkpoZVhOY0lpazdkbUZ5SUdJOVlTNXNaVzVuZEdnc1l6MHpLbUl2TkR0akpUTS9ZejFOWVhSb0xtWnNiMjl5S0dNcE9tZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtbHpVR0ZrWkdsdVoxOG9ZVnRpTFRGZEtTWW1LR005WjI5dlp5NWpjbmx3ZEM1aVlYTmxOalF1YVhOUVlXUmthVzVuWHloaFcySXRNbDBwUDJNdE1qcGpMVEVwTzNaaGNpQmtQVzVsZHlCVmFXNTBPRUZ5Y21GNUtHTXBMR1U5TUR0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1a1pXTnZaR1ZUZEhKcGJtZEpiblJsY201aGJGOG9ZU3htZFc1amRHbHZiaWhoS1h0a1cyVXJLMTA5WVgwcE8zSmxkSFZ5YmlCa0xuTjFZbUZ5Y21GNUtEQXNaU2w5TzF4dVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVpHVmpiMlJsVTNSeWFXNW5TVzUwWlhKdVlXeGZQV1oxYm1OMGFXOXVLR0VzWWlsN1puVnVZM1JwYjI0Z1l5aGlLWHRtYjNJb08yUThZUzVzWlc1bmRHZzdLWHQyWVhJZ1l6MWhMbU5vWVhKQmRDaGtLeXNwTEdVOVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVkyaGhjbFJ2UW5sMFpVMWhjRjliWTEwN2FXWW9iblZzYkNFOVpTbHlaWFIxY200Z1pUdHBaaWdoWjI5dlp5NXpkSEpwYm1jdWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaGpLU2wwYUhKdmR5QkZjbkp2Y2loY0lsVnVhMjV2ZDI0Z1ltRnpaVFkwSUdWdVkyOWthVzVuSUdGMElHTm9ZWEk2SUZ3aUsyTXBPMzF5WlhSMWNtNGdZbjFuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVwYm1sMFh5Z3BPMlp2Y2loMllYSWdaRDB3T3pzcGUzWmhjaUJsUFdNb0xURXBMR1k5WXlnd0tTeG5QV01vTmpRcExHZzlZeWcyTkNrN2FXWW9OalE5UFQxb0ppWXRNVDA5UFdVcFluSmxZV3M3WWlobFBEd3lmR1krUGpRcE96WTBJVDFuSmlZb1lpaG1QRHcwSmpJME1IeG5QajR5S1N3Mk5DRTlhQ1ltWWloblBEdzJKakU1TW54b0tTbDlmVHRjYm1kdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1sdWFYUmZQV1oxYm1OMGFXOXVLQ2w3YVdZb0lXZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtTm9ZWEpVYjBKNWRHVk5ZWEJmS1h0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1amFHRnlWRzlDZVhSbFRXRndYejE3ZlR0bWIzSW9kbUZ5SUdFOVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVJFVkdRVlZNVkY5QlRGQklRVUpGVkY5RFQwMU5UMDVmTG5Od2JHbDBLRndpWENJcExHSTlXMXdpS3k4OVhDSXNYQ0lyTDF3aUxGd2lMVjg5WENJc1hDSXRYeTVjSWl4Y0lpMWZYQ0pkTEdNOU1EczFQbU03WXlzcktYdDJZWElnWkQxaExtTnZibU5oZENoaVcyTmRMbk53YkdsMEtGd2lYQ0lwS1R0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1aWVYUmxWRzlEYUdGeVRXRndjMTliWTEwOVpEdG1iM0lvZG1GeUlHVTlNRHRsUEdRdWJHVnVaM1JvTzJVckt5bDdkbUZ5SUdZOVpGdGxYU3huUFdkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1Ob1lYSlViMEo1ZEdWTllYQmZXMlpkTzNadmFXUWdNRDA5UFdjL1oyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVkyaGhjbFJ2UW5sMFpVMWhjRjliWmwwOVpUcG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR2M5UFQxbEtYMTlmWDA3YW5Od1lpNTFkR2xzY3oxN2ZUdHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUk1iM2M5TUR0cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9QVEE3YW5Od1lpNTFkR2xzY3k1emNHeHBkRlZwYm5RMk5EMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMWhQajQrTUR0aFBVMWhkR2d1Wm14dmIzSW9LR0V0WWlrdmFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXlLVDQrUGpBN2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQV0k3YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFEMWhmVHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBTVzUwTmpROVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOU1ENWhPMkU5VFdGMGFDNWhZbk1vWVNrN2RtRnlJR005WVQ0K1BqQTdZVDFOWVhSb0xtWnNiMjl5S0NoaExXTXBMMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlrN1lUNCtQajB3TzJJbUppaGhQWDVoUGo0K01DeGpQU2grWXo0K1BqQXBLekVzTkRJNU5EazJOekk1TlR4akppWW9ZejB3TEdFckt5dzBNamswT1RZM01qazFQR0VtSmloaFBUQXBLU2s3YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BXTTdhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBTR2xuYUQxaGZUdGNibXB6Y0dJdWRYUnBiSE11YzNCc2FYUmFhV2Q2WVdjMk5EMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMHdQbUU3WVQweUtrMWhkR2d1WVdKektHRXBPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUlZhVzUwTmpRb1lTazdZVDFxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjN2RtRnlJR005YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFEdGlKaVlvTUQwOVlUOHdQVDFqUDJNOVlUMDBNamswT1RZM01qazFPaWhqTFMwc1lUMDBNamswT1RZM01qazFLVHBoTFMwcE8ycHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkejFoTzJwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZzlZMzA3WEc1cWMzQmlMblYwYVd4ekxuTndiR2wwUm14dllYUXpNajFtZFc1amRHbHZiaWhoS1h0MllYSWdZajB3UG1FL01Ub3dPMkU5WWo4dFlUcGhPMmxtS0RBOVBUMWhLVEE4TVM5aFB5aHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvUFRBc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQVEFwT2locWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9QVEFzYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BUSXhORGMwT0RNMk5EZ3BPMlZzYzJVZ2FXWW9hWE5PWVU0b1lTa3Bhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBTR2xuYUQwd0xHcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkejB5TVRRM05EZ3pOalEzTzJWc2MyVWdhV1lvWVQ1cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NUdURTlCVkRNeVgwMUJXQ2xxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb1BUQXNhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzUFNoaVBEd3pNWHd5TVRNNU1EazFNRFF3S1Q0K1BqQTdaV3h6WlNCcFppaGhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtaTVQwRlVNekpmVFVsT0tXRTlUV0YwYUM1eWIzVnVaQ2hoTDAxaGRHZ3VjRzkzS0RJc0xURTBPU2twTEdwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZzlNQ3hxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjOUtHSThQRE14ZkZ4dVlTaytQajR3TzJWc2MyVjdkbUZ5SUdNOVRXRjBhQzVtYkc5dmNpaE5ZWFJvTG14dlp5aGhLUzlOWVhSb0xreE9NaWs3WVNvOVRXRjBhQzV3YjNjb01pd3RZeWs3WVQxTllYUm9Mbkp2ZFc1a0tHRXFhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYekl6S1NZNE16ZzROakEzTzJwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZzlNRHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjOUtHSThQRE14ZkdNck1USTNQRHd5TTN4aEtUNCtQakI5ZlR0Y2JtcHpjR0l1ZFhScGJITXVjM0JzYVhSR2JHOWhkRFkwUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFRBK1lUOHhPakE3WVQxaVB5MWhPbUU3YVdZb01EMDlQV0VwYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFEMHdQREV2WVQ4d09qSXhORGMwT0RNMk5EZ3Nhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzUFRBN1pXeHpaU0JwWmlocGMwNWhUaWhoS1NscWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9QVEl4TkRjME9ETTJORGNzYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BUUXlPVFE1TmpjeU9UVTdaV3h6WlNCcFppaGhQbXB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtaTVQwRlVOalJmVFVGWUtXcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc5S0dJOFBETXhmREl4TkRZME16VXdOeklwUGo0K01DeHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUk1iM2M5TUR0bGJITmxJR2xtS0dFOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVSa3hQUVZRMk5GOU5TVTRwZTNaaGNpQmpQV0V2VFdGMGFDNXdiM2NvTWl3dE1UQTNOQ2s3WVQxakwycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNanRxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb1BTaGlQRHd6TVh4aEtUNCtQakE3YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BXTStQajR3ZldWc2MyVjdZejFjYm1FN2RtRnlJR1E5TUR0cFppZ3lQRDFqS1dadmNpZzdNanc5WXlZbU1UQXlNejVrT3lsa0t5c3NZeTg5TWp0bGJITmxJR1p2Y2lnN01UNWpKaVl0TVRBeU1qeGtPeWxqS2oweUxHUXRMVHRqUFdFcVRXRjBhQzV3YjNjb01pd3RaQ2s3WVQxakttcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHlNQ1l4TURRNE5UYzFPMk05WXlwcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk5USStQajR3TzJwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZzlLR0k4UERNeGZHUXJNVEF5TXp3OE1qQjhZU2srUGo0d08ycHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkejFqZlgwN1hHNXFjM0JpTG5WMGFXeHpMbk53YkdsMFNHRnphRFkwUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFdFdVkyaGhja052WkdWQmRDZ3dLU3hqUFdFdVkyaGhja052WkdWQmRDZ3hLU3hrUFdFdVkyaGhja052WkdWQmRDZ3lLU3hsUFdFdVkyaGhja052WkdWQmRDZ3pLU3htUFdFdVkyaGhja052WkdWQmRDZzBLU3huUFdFdVkyaGhja052WkdWQmRDZzFLU3hvUFdFdVkyaGhja052WkdWQmRDZzJLVHRoUFdFdVkyaGhja052WkdWQmRDZzNLVHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjOVlpc29Zenc4T0NrcktHUThQREUyS1Nzb1pUdzhNalFwUGo0K01EdHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvUFdZcktHYzhQRGdwS3lob1BEd3hOaWtyS0dFOFBESTBLVDQrUGpCOU8ycHpjR0l1ZFhScGJITXVhbTlwYmxWcGJuUTJORDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCaUttcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNaXNvWVQ0K1BqQXBmVHRjYm1wemNHSXVkWFJwYkhNdWFtOXBia2x1ZERZMFBXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTlZaVl5TVRRM05EZ3pOalE0TzJNbUppaGhQWDVoS3pFK1BqNHdMR0k5Zm1JK1BqNHdMREE5UFdFbUppaGlQV0lyTVQ0K1BqQXBLVHRoUFdwemNHSXVkWFJwYkhNdWFtOXBibFZwYm5RMk5DaGhMR0lwTzNKbGRIVnliaUJqUHkxaE9tRjlPMnB6Y0dJdWRYUnBiSE11ZEc5YWFXZDZZV2MyTkQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlZajQrTXpFN2NtVjBkWEp1SUdNb1lUdzhNVjVrTENoaVBEd3hmR0UrUGo0ek1TbGVaQ2w5TzJwemNHSXVkWFJwYkhNdWFtOXBibHBwWjNwaFp6WTBQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdwemNHSXVkWFJwYkhNdVpuSnZiVnBwWjNwaFp6WTBLR0VzWWl4cWMzQmlMblYwYVd4ekxtcHZhVzVKYm5RMk5DbDlPMnB6Y0dJdWRYUnBiSE11Wm5KdmJWcHBaM3BoWnpZMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MllYSWdaRDB0S0dFbU1TazdjbVYwZFhKdUlHTW9LR0UrUGo0eGZHSThQRE14S1Y1a0xHSStQajR4WG1RcGZUdGNibXB6Y0dJdWRYUnBiSE11YW05cGJrWnNiMkYwTXpJOVpuVnVZM1JwYjI0b1lTeGlLWHRpUFRJcUtHRStQak14S1NzeE8zWmhjaUJqUFdFK1BqNHlNeVl5TlRVN1lTWTlPRE00T0RZd056dHlaWFIxY200Z01qVTFQVDFqUDJFL1RtRk9Pa2x1Wm1sdWFYUjVLbUk2TUQwOVl6OWlLazFoZEdndWNHOTNLRElzTFRFME9Ta3FZVHBpS2sxaGRHZ3VjRzkzS0RJc1l5MHhOVEFwS2loaEswMWhkR2d1Y0c5M0tESXNNak1wS1gwN2FuTndZaTUxZEdsc2N5NXFiMmx1Um14dllYUTJORDFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFRJcUtHSStQak14S1NzeExHUTlZajQrUGpJd0pqSXdORGM3WVQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk16SXFLR0ltTVRBME9EVTNOU2tyWVR0eVpYUjFjbTRnTWpBME56MDlaRDloUDA1aFRqcEpibVpwYm1sMGVTcGpPakE5UFdRL1l5cE5ZWFJvTG5CdmR5Z3lMQzB4TURjMEtTcGhPbU1xVFdGMGFDNXdiM2NvTWl4a0xURXdOelVwS2loaEsycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxODFNaWw5TzF4dWFuTndZaTUxZEdsc2N5NXFiMmx1U0dGemFEWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1lUNCtQakFtTWpVMUxHRStQajQ0SmpJMU5TeGhQajQrTVRZbU1qVTFMR0UrUGo0eU5DWXlOVFVzWWo0K1BqQW1NalUxTEdJK1BqNDRKakkxTlN4aVBqNCtNVFltTWpVMUxHSStQajR5TkNZeU5UVXBmVHRxYzNCaUxuVjBhV3h6TGtSSlIwbFVVejFjSWpBeE1qTTBOVFkzT0RsaFltTmtaV1pjSWk1emNHeHBkQ2hjSWx3aUtUdHFjM0JpTG5WMGFXeHpMbHBGVWs5ZlEwaEJVbDlEVDBSRlh6MDBPRHRxYzNCaUxuVjBhV3h6TGtGZlEwaEJVbDlEVDBSRlh6MDVOenRjYm1wemNHSXVkWFJwYkhNdWFtOXBibFZ1YzJsbmJtVmtSR1ZqYVcxaGJGTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMloxYm1OMGFXOXVJR01vWVN4aUtYdGhQV0UvVTNSeWFXNW5LR0VwT2x3aVhDSTdjbVYwZFhKdUlHSS9YQ0l3TURBd01EQXdYQ0l1YzJ4cFkyVW9ZUzVzWlc1bmRHZ3BLMkU2WVgxcFppZ3lNRGszTVRVeFBqMWlLWEpsZEhWeWJsd2lYQ0lyYW5Od1lpNTFkR2xzY3k1cWIybHVWV2x1ZERZMEtHRXNZaWs3ZG1GeUlHUTlLR0UrUGo0eU5IeGlQRHc0S1Q0K1BqQW1NVFkzTnpjeU1UVTdZajFpUGo0eE5pWTJOVFV6TlR0aFBTaGhKakUyTnpjM01qRTFLU3MyTnpjM01qRTJLbVFyTmpjeE1EWTFOaXBpTzJRclBUZ3hORGMwT1RjcVlqdGlLajB5T3pGRk56dzlZU1ltS0dRclBVMWhkR2d1Wm14dmIzSW9ZUzh4UlRjcExHRWxQVEZGTnlrN01VVTNQRDFrSmlZb1lpczlUV0YwYUM1bWJHOXZjaWhrTHpGRk55a3NaQ1U5TVVVM0tUdHlaWFIxY200Z1l5aGlMREFwSzJNb1pDeGlLU3RqS0dFc01TbDlPMXh1YW5Od1lpNTFkR2xzY3k1cWIybHVVMmxuYm1Wa1JHVmphVzFoYkZOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFdJbU1qRTBOelE0TXpZME9EdGpKaVlvWVQxK1lTc3hQajQrTUN4aVBYNWlLeWd3UFQxaFB6RTZNQ2srUGo0d0tUdGhQV3B6Y0dJdWRYUnBiSE11YW05cGJsVnVjMmxuYm1Wa1JHVmphVzFoYkZOMGNtbHVaeWhoTEdJcE8zSmxkSFZ5YmlCalAxd2lMVndpSzJFNllYMDdhbk53WWk1MWRHbHNjeTVvWVhOb05qUlViMFJsWTJsdFlXeFRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBTR0Z6YURZMEtHRXBPMkU5YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M08zWmhjaUJqUFdwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZzdjbVYwZFhKdUlHSS9hbk53WWk1MWRHbHNjeTVxYjJsdVUybG5ibVZrUkdWamFXMWhiRk4wY21sdVp5aGhMR01wT21wemNHSXVkWFJwYkhNdWFtOXBibFZ1YzJsbmJtVmtSR1ZqYVcxaGJGTjBjbWx1WnloaExHTXBmVHRjYm1wemNHSXVkWFJwYkhNdWFHRnphRFkwUVhKeVlYbFViMFJsWTJsdFlXeFRkSEpwYm1kelBXWjFibU4wYVc5dUtHRXNZaWw3Wm05eUtIWmhjaUJqUFVGeWNtRjVLR0V1YkdWdVozUm9LU3hrUFRBN1pEeGhMbXhsYm1kMGFEdGtLeXNwWTF0a1hUMXFjM0JpTG5WMGFXeHpMbWhoYzJnMk5GUnZSR1ZqYVcxaGJGTjBjbWx1WnloaFcyUmRMR0lwTzNKbGRIVnliaUJqZlR0Y2JtcHpjR0l1ZFhScGJITXVaR1ZqYVcxaGJGTjBjbWx1WjFSdlNHRnphRFkwUFdaMWJtTjBhVzl1S0dFcGUyWjFibU4wYVc5dUlHSW9ZU3hpS1h0bWIzSW9kbUZ5SUdNOU1EczRQbU1tSmlneElUMDlZWHg4TUR4aUtUdGpLeXNwWWoxaEttVmJZMTByWWl4bFcyTmRQV0ltTWpVMUxHSStQajQ5T0gxbWRXNWpkR2x2YmlCaktDbDdabTl5S0haaGNpQmhQVEE3T0Q1aE8yRXJLeWxsVzJGZFBYNWxXMkZkSmpJMU5YMW5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE4WVM1c1pXNW5kR2dwTzNaaGNpQmtQU0V4TzF3aUxWd2lQVDA5WVZzd1hTWW1LR1E5SVRBc1lUMWhMbk5zYVdObEtERXBLVHRtYjNJb2RtRnlJR1U5V3pBc01Dd3dMREFzTUN3d0xEQXNNRjBzWmowd08yWThZUzVzWlc1bmRHZzdaaXNyS1dJb01UQXNZUzVqYUdGeVEyOWtaVUYwS0dZcExXcHpjR0l1ZFhScGJITXVXa1ZTVDE5RFNFRlNYME5QUkVWZktUdGtKaVlvWXlncExHSW9NU3d4S1NrN2NtVjBkWEp1SUdkdmIyY3VZM0o1Y0hRdVlubDBaVUZ5Y21GNVZHOVRkSEpwYm1jb1pTbDlPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUkVaV05wYldGc1UzUnlhVzVuUFdaMWJtTjBhVzl1S0dFcGUycHpjR0l1ZFhScGJITXVjM0JzYVhSSVlYTm9OalFvYW5Od1lpNTFkR2xzY3k1a1pXTnBiV0ZzVTNSeWFXNW5WRzlJWVhOb05qUW9ZU2twZlR0Y2JtcHpjR0l1ZFhScGJITXVkRzlJWlhoRWFXZHBkRjg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb01UQStZVDlxYzNCaUxuVjBhV3h6TGxwRlVrOWZRMGhCVWw5RFQwUkZYeXRoT21wemNHSXVkWFJwYkhNdVFWOURTRUZTWDBOUFJFVmZMVEV3SzJFcGZUdHFjM0JpTG5WMGFXeHpMbVp5YjIxSVpYaERhR0Z5UTI5a1pWODlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0UrUFdwemNHSXVkWFJwYkhNdVFWOURTRUZTWDBOUFJFVmZQMkV0YW5Od1lpNTFkR2xzY3k1QlgwTklRVkpmUTA5RVJWOHJNVEE2WVMxcWMzQmlMblYwYVd4ekxscEZVazlmUTBoQlVsOURUMFJGWDMwN2FuTndZaTUxZEdsc2N5NW9ZWE5vTmpSVWIwaGxlRk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMUJjbkpoZVNneE9DazdZbHN3WFQxY0lqQmNJanRpV3pGZFBWd2llRndpTzJadmNpaDJZWElnWXowd096ZytZenRqS3lzcGUzWmhjaUJrUFdFdVkyaGhja052WkdWQmRDZzNMV01wTzJKYk1pcGpLekpkUFdwemNHSXVkWFJwYkhNdWRHOUlaWGhFYVdkcGRGOG9aRDQrTkNrN1lsc3lLbU1yTTEwOWFuTndZaTUxZEdsc2N5NTBiMGhsZUVScFoybDBYeWhrSmpFMUtYMXlaWFIxY200Z1lpNXFiMmx1S0Z3aVhDSXBmVHRjYm1wemNHSXVkWFJwYkhNdWFHVjRVM1J5YVc1blZHOUlZWE5vTmpROVpuVnVZM1JwYjI0b1lTbDdZVDFoTG5SdlRHOTNaWEpEWVhObEtDazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d4T0QwOVlTNXNaVzVuZEdncE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9YQ0l3WENJOVBXRmJNRjBwTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1hDSjRYQ0k5UFdGYk1WMHBPMlp2Y2loMllYSWdZajFjSWx3aUxHTTlNRHM0UG1NN1l5c3JLWHQyWVhJZ1pEMXFjM0JpTG5WMGFXeHpMbVp5YjIxSVpYaERhR0Z5UTI5a1pWOG9ZUzVqYUdGeVEyOWtaVUYwS0RJcVl5c3lLU2tzWlQxcWMzQmlMblYwYVd4ekxtWnliMjFJWlhoRGFHRnlRMjlrWlY4b1lTNWphR0Z5UTI5a1pVRjBLRElxWXlzektTazdZajFUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0RFMkttUXJaU2tyWW4xeVpYUjFjbTRnWW4wN1hHNXFjM0JpTG5WMGFXeHpMbWhoYzJnMk5GUnZUblZ0WW1WeVBXWjFibU4wYVc5dUtHRXNZaWw3YW5Od1lpNTFkR2xzY3k1emNHeHBkRWhoYzJnMk5DaGhLVHRoUFdwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkV4dmR6dDJZWElnWXoxcWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9PM0psZEhWeWJpQmlQMnB6Y0dJdWRYUnBiSE11YW05cGJrbHVkRFkwS0dFc1l5azZhbk53WWk1MWRHbHNjeTVxYjJsdVZXbHVkRFkwS0dFc1l5bDlPMnB6Y0dJdWRYUnBiSE11Ym5WdFltVnlWRzlJWVhOb05qUTlablZ1WTNScGIyNG9ZU2w3YW5Od1lpNTFkR2xzY3k1emNHeHBkRWx1ZERZMEtHRXBPM0psZEhWeWJpQnFjM0JpTG5WMGFXeHpMbXB2YVc1SVlYTm9OalFvYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M0xHcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmdwZlR0cWMzQmlMblYwYVd4ekxtTnZkVzUwVm1GeWFXNTBjejFtZFc1amRHbHZiaWhoTEdJc1l5bDdabTl5S0haaGNpQmtQVEFzWlQxaU8yVThZenRsS3lzcFpDczlZVnRsWFQ0K056dHlaWFIxY200Z1l5MWlMV1I5TzF4dWFuTndZaTUxZEdsc2N5NWpiM1Z1ZEZaaGNtbHVkRVpwWld4a2N6MW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdDJZWElnWlQwd08yUTlPQ3BrSzJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkR0cFppZ3hNamcrWkNsbWIzSW9PMkk4WXlZbVlWdGlLeXRkUFQxa095bG1iM0lvWlNzck96c3BlM1poY2lCbVBXRmJZaXNyWFR0cFppZ3dQVDBvWmlZeE1qZ3BLV0p5WldGcmZXVnNjMlVnWm05eUtEdGlQR003S1h0bWIzSW9aajFrT3pFeU9EeG1PeWw3YVdZb1lWdGlYU0U5S0dZbU1USTNmREV5T0NrcGNtVjBkWEp1SUdVN1lpc3JPMlkrUGowM2ZXbG1LR0ZiWWlzclhTRTlaaWxpY21WaGF6dG1iM0lvWlNzck8yWTlZVnRpS3l0ZExEQWhQU2htSmpFeU9DazdLVHQ5Y21WMGRYSnVJR1Y5TzJwemNHSXVkWFJwYkhNdVkyOTFiblJHYVhobFpFWnBaV3hrYzE4OVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bEtYdDJZWElnWmowd08ybG1LREV5T0Q1a0tXWnZjaWc3WWp4akppWmhXMklySzEwOVBXUTdLV1lyS3l4aUt6MWxPMlZzYzJVZ1ptOXlLRHRpUEdNN0tYdG1iM0lvZG1GeUlHYzlaRHN4TWpnOFp6c3BlMmxtS0dGYllpc3JYU0U5S0djbU1USTNmREV5T0NrcGNtVjBkWEp1SUdZN1p6NCtQVGQ5YVdZb1lWdGlLeXRkSVQxbktXSnlaV0ZyTzJZckt6dGlLejFsZlhKbGRIVnliaUJtZlR0Y2JtcHpjR0l1ZFhScGJITXVZMjkxYm5SR2FYaGxaRE15Um1sbGJHUnpQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlM0psZEhWeWJpQnFjM0JpTG5WMGFXeHpMbU52ZFc1MFJtbDRaV1JHYVdWc1pITmZLR0VzWWl4akxEZ3FaQ3RxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1R1NWaEZSRE15TERRcGZUdHFjM0JpTG5WMGFXeHpMbU52ZFc1MFJtbDRaV1EyTkVacFpXeGtjejFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHR5WlhSMWNtNGdhbk53WWk1MWRHbHNjeTVqYjNWdWRFWnBlR1ZrUm1sbGJHUnpYeWhoTEdJc1l5dzRLbVFyYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVEyTkN3NEtYMDdYRzVxYzNCaUxuVjBhV3h6TG1OdmRXNTBSR1ZzYVcxcGRHVmtSbWxsYkdSelBXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUzWmhjaUJsUFRBN1ptOXlLR1E5T0Nwa0sycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1JGVEVsTlNWUkZSRHRpUEdNN0tYdG1iM0lvZG1GeUlHWTlaRHN4TWpnOFpqc3BlMmxtS0dGYllpc3JYU0U5S0dZbU1USTNmREV5T0NrcGNtVjBkWEp1SUdVN1pqNCtQVGQ5YVdZb1lWdGlLeXRkSVQxbUtXSnlaV0ZyTzJVckt6dG1iM0lvZG1GeUlHYzlNQ3hvUFRFN1pqMWhXMklySzEwc1p5czlLR1ltTVRJM0tTcG9MR2dxUFRFeU9Dd3dJVDBvWmlZeE1qZ3BPeWs3WWlzOVozMXlaWFIxY200Z1pYMDdhbk53WWk1MWRHbHNjeTVrWldKMVowSjVkR1Z6Vkc5VVpYaDBSbTl5YldGMFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBTZGNJaWM3YVdZb1lTbDdZVDFxYzNCaUxuVjBhV3h6TG1KNWRHVlRiM1Z5WTJWVWIxVnBiblE0UVhKeVlYa29ZU2s3Wm05eUtIWmhjaUJqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwWWlzOVhDSmNYRnhjZUZ3aUxERTJQbUZiWTEwbUppaGlLejFjSWpCY0lpa3NZaXM5WVZ0alhTNTBiMU4wY21sdVp5Z3hOaWw5Y21WMGRYSnVJR0lySjF3aUozMDdYRzVxYzNCaUxuVjBhV3h6TG1SbFluVm5VMk5oYkdGeVZHOVVaWGgwUm05eWJXRjBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnlibHdpYzNSeWFXNW5YQ0k5UFQxMGVYQmxiMllnWVQ5bmIyOW5Mbk4wY21sdVp5NXhkVzkwWlNoaEtUcGhMblJ2VTNSeWFXNW5LQ2w5TzJwemNHSXVkWFJwYkhNdWMzUnlhVzVuVkc5Q2VYUmxRWEp5WVhrOVpuVnVZM1JwYjI0b1lTbDdabTl5S0haaGNpQmlQVzVsZHlCVmFXNTBPRUZ5Y21GNUtHRXViR1Z1WjNSb0tTeGpQVEE3WXp4aExteGxibWQwYUR0akt5c3BlM1poY2lCa1BXRXVZMmhoY2tOdlpHVkJkQ2hqS1R0cFppZ3lOVFU4WkNsMGFISnZkeUJGY25KdmNpaGNJa052Ym5abGNuTnBiMjRnWlhKeWIzSTZJSE4wY21sdVp5QmpiMjUwWVdsdWN5QmpiMlJsY0c5cGJuUWdiM1YwYzJsa1pTQnZaaUJpZVhSbElISmhibWRsWENJcE8ySmJZMTA5WkgxeVpYUjFjbTRnWW4wN1hHNXFjM0JpTG5WMGFXeHpMbUo1ZEdWVGIzVnlZMlZVYjFWcGJuUTRRWEp5WVhrOVpuVnVZM1JwYjI0b1lTbDdhV1lvWVM1amIyNXpkSEoxWTNSdmNqMDlQVlZwYm5RNFFYSnlZWGtwY21WMGRYSnVJR0U3YVdZb1lTNWpiMjV6ZEhKMVkzUnZjajA5UFVGeWNtRjVRblZtWm1WeWZIeGNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnUW5WbVptVnlKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlRblZtWm1WeWZIeGhMbU52Ym5OMGNuVmpkRzl5UFQwOVFYSnlZWGtwY21WMGRYSnVJRzVsZHlCVmFXNTBPRUZ5Y21GNUtHRXBPMmxtS0dFdVkyOXVjM1J5ZFdOMGIzSTlQVDFUZEhKcGJtY3BjbVYwZFhKdUlHZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtUmxZMjlrWlZOMGNtbHVaMVJ2VldsdWREaEJjbkpoZVNoaEtUdG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJbFI1Y0dVZ2JtOTBJR052Ym5abGNuUnBZbXhsSUhSdklGVnBiblE0UVhKeVlYa3VYQ0lwTzNKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTZ3dLWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHQwYUdsekxtSjVkR1Z6WHoxdWRXeHNPM1JvYVhNdVkzVnljMjl5WHoxMGFHbHpMbVZ1WkY4OWRHaHBjeTV6ZEdGeWRGODlNRHQwYUdsekxtVnljbTl5WHowaE1UdGhKaVowYUdsekxuTmxkRUpzYjJOcktHRXNZaXhqS1gwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxtbHVjM1JoYm1ObFEyRmphR1ZmUFZ0ZE8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNWhiR3h2WXoxbWRXNWpkR2x2YmloaExHSXNZeWw3YVdZb2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxtbHVjM1JoYm1ObFEyRmphR1ZmTG14bGJtZDBhQ2w3ZG1GeUlHUTlhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbWx1YzNSaGJtTmxRMkZqYUdWZkxuQnZjQ2dwTzJFbUptUXVjMlYwUW14dlkyc29ZU3hpTEdNcE8zSmxkSFZ5YmlCa2ZYSmxkSFZ5YmlCdVpYY2dhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlLR0VzWWl4aktYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzVtY21WbFBXWjFibU4wYVc5dUtDbDdkR2hwY3k1amJHVmhjaWdwT3pFd01ENXFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVhVzV6ZEdGdVkyVkRZV05vWlY4dWJHVnVaM1JvSmlacWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdWFXNXpkR0Z1WTJWRFlXTm9aVjh1Y0hWemFDaDBhR2x6S1gwN1hHNXFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbU5zYjI1bFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNWhiR3h2WXloMGFHbHpMbUo1ZEdWelh5eDBhR2x6TG5OMFlYSjBYeXgwYUdsekxtVnVaRjh0ZEdocGN5NXpkR0Z5ZEY4cGZUdHFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbU5zWldGeVBXWjFibU4wYVc5dUtDbDdkR2hwY3k1aWVYUmxjMTg5Ym5Wc2JEdDBhR2x6TG1OMWNuTnZjbDg5ZEdocGN5NWxibVJmUFhSb2FYTXVjM1JoY25SZlBUQTdkR2hwY3k1bGNuSnZjbDg5SVRGOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVaMlYwUW5WbVptVnlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVlubDBaWE5mZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjMlYwUW14dlkyczlablZ1WTNScGIyNG9ZU3hpTEdNcGUzUm9hWE11WW5sMFpYTmZQV3B6Y0dJdWRYUnBiSE11WW5sMFpWTnZkWEpqWlZSdlZXbHVkRGhCY25KaGVTaGhLVHQwYUdsekxuTjBZWEowWHoxMmIybGtJREFoUFQxaVAySTZNRHQwYUdsekxtVnVaRjg5ZG05cFpDQXdJVDA5WXo5MGFHbHpMbk4wWVhKMFh5dGpPblJvYVhNdVlubDBaWE5mTG14bGJtZDBhRHQwYUdsekxtTjFjbk52Y2w4OWRHaHBjeTV6ZEdGeWRGOTlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1WjJWMFJXNWtQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVpXNWtYMzA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1elpYUkZibVE5Wm5WdVkzUnBiMjRvWVNsN2RHaHBjeTVsYm1SZlBXRjlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WelpYUTlablZ1WTNScGIyNG9LWHQwYUdsekxtTjFjbk52Y2w4OWRHaHBjeTV6ZEdGeWRGOTlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1WjJWMFEzVnljMjl5UFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVZM1Z5YzI5eVgzMDdYRzVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5ObGRFTjFjbk52Y2oxbWRXNWpkR2x2YmloaEtYdDBhR2x6TG1OMWNuTnZjbDg5WVgwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNWhaSFpoYm1ObFBXWjFibU4wYVc5dUtHRXBlM1JvYVhNdVkzVnljMjl5WHlzOVlUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdVkzVnljMjl5WHp3OWRHaHBjeTVsYm1SZktYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzVoZEVWdVpEMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG1OMWNuTnZjbDg5UFhSb2FYTXVaVzVrWDMwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXdZWE4wUlc1a1BXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11WTNWeWMyOXlYejUwYUdsekxtVnVaRjk5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdVoyVjBSWEp5YjNJOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTVsY25KdmNsOThmREErZEdocGN5NWpkWEp6YjNKZmZIeDBhR2x6TG1OMWNuTnZjbDgrZEdocGN5NWxibVJmZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOd2JHbDBWbUZ5YVc1ME5qUTlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFRFeU9DeGpQVEFzWkQwd0xHVTlNRHMwUG1VbUpqRXlPRHc5WWp0bEt5c3BZajEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJLMTBzWTN3OUtHSW1NVEkzS1R3OE55cGxPekV5T0R3OVlpWW1LR0k5ZEdocGN5NWllWFJsYzE5YmRHaHBjeTVqZFhKemIzSmZLeXRkTEdOOFBTaGlKakV5TnlrOFBESTRMR1I4UFNoaUpqRXlOeWsrUGpRcE8ybG1LREV5T0R3OVlpbG1iM0lvWlQwd096VStaU1ltTVRJNFBEMWlPMlVyS3lsaVBYUm9hWE11WW5sMFpYTmZXM1JvYVhNdVkzVnljMjl5WHlzclhTeGtmRDBvWWlZeE1qY3BQRHczS21Vck16dHBaaWd4TWpnK1lpbHlaWFIxY200Z1lTaGpQajQrTUN4a1BqNCtNQ2s3WjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKR1lXbHNaV1FnZEc4Z2NtVmhaQ0IyWVhKcGJuUXNJR1Z1WTI5a2FXNW5JR2x6SUdsdWRtRnNhV1F1WENJcE8zUm9hWE11WlhKeWIzSmZQU0V3ZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOd2JHbDBXbWxuZW1GblZtRnlhVzUwTmpROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGTndiR2wwVm1GeWFXNTBOalFvWm5WdVkzUnBiMjRvWWl4aktYdHlaWFIxY200Z2FuTndZaTUxZEdsc2N5NW1jbTl0V21sbmVtRm5OalFvWWl4akxHRXBmU2w5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk53YkdsMFJtbDRaV1EyTkQxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxMGFHbHpMbUo1ZEdWelh5eGpQWFJvYVhNdVkzVnljMjl5WHp0MGFHbHpMbU4xY25OdmNsOHJQVGc3Wm05eUtIWmhjaUJrUFRBc1pUMHdMR1k5WXlzM08yWStQV003WmkwdEtXUTlaRHc4T0h4aVcyWmRMR1U5WlR3OE9IeGlXMllyTkYwN2NtVjBkWEp1SUdFb1pDeGxLWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1emEybHdWbUZ5YVc1MFBXWjFibU4wYVc5dUtDbDdabTl5S0R0MGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDlkSmpFeU9Ec3BkR2hwY3k1amRYSnpiM0pmS3lzN2RHaHBjeTVqZFhKemIzSmZLeXQ5TzF4dWFuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNTFibk5yYVhCV1lYSnBiblE5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLRHN4TWpnOFlUc3BkR2hwY3k1amRYSnpiM0pmTFMwc1lUNCtQajAzTzNSb2FYTXVZM1Z5YzI5eVh5MHRmVHRjYm1wemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16STlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG1KNWRHVnpYenQyWVhJZ1lqMWhXM1JvYVhNdVkzVnljMjl5WHlzd1hUdDJZWElnWXoxaUpqRXlOenRwWmlneE1qZytZaWx5WlhSMWNtNGdkR2hwY3k1amRYSnpiM0pmS3oweExHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1amRYSnpiM0pmUEQxMGFHbHpMbVZ1WkY4cExHTTdZajFoVzNSb2FYTXVZM1Z5YzI5eVh5c3hYVHRqZkQwb1lpWXhNamNwUER3M08ybG1LREV5T0Q1aUtYSmxkSFZ5YmlCMGFHbHpMbU4xY25OdmNsOHJQVElzWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbU4xY25OdmNsODhQWFJvYVhNdVpXNWtYeWtzWXp0aVBXRmJkR2hwY3k1amRYSnpiM0pmS3pKZE8yTjhQU2hpSmpFeU55azhQREUwTzJsbUtERXlPRDVpS1hKbGRIVnliaUIwYUdsekxtTjFjbk52Y2w4clBUTXNaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtTjFjbk52Y2w4OFBYUm9hWE11Wlc1a1h5a3NZenRpUFdGYmRHaHBjeTVqZFhKemIzSmZLek5kTzJOOFBTaGlKakV5TnlrOFBESXhPMmxtS0RFeU9ENWlLWEpsZEhWeWJpQjBhR2x6TG1OMWNuTnZjbDhyUFRRc1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG1OMWNuTnZjbDg4UFZ4dWRHaHBjeTVsYm1SZktTeGpPMkk5WVZ0MGFHbHpMbU4xY25OdmNsOHJORjA3WTN3OUtHSW1NVFVwUER3eU9EdHBaaWd4TWpnK1lpbHlaWFIxY200Z2RHaHBjeTVqZFhKemIzSmZLejAxTEdkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTVqZFhKemIzSmZQRDEwYUdsekxtVnVaRjhwTEdNK1BqNHdPM1JvYVhNdVkzVnljMjl5WHlzOU5Uc3hNamc4UFdGYmRHaHBjeTVqZFhKemIzSmZLeXRkSmlZeE1qZzhQV0ZiZEdocGN5NWpkWEp6YjNKZkt5dGRKaVl4TWpnOFBXRmJkR2hwY3k1amRYSnpiM0pmS3l0ZEppWXhNamc4UFdGYmRHaHBjeTVqZFhKemIzSmZLeXRkSmlZeE1qZzhQV0ZiZEdocGN5NWpkWEp6YjNKZkt5dGRKaVpuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0NFeEtUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdVkzVnljMjl5WHp3OWRHaHBjeTVsYm1SZktUdHlaWFIxY200Z1kzMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1UybG5ibVZrVm1GeWFXNTBNekk5YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtWVzV6YVdkdVpXUldZWEpwYm5Rek1qdHFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVmJuTnBaMjVsWkZaaGNtbHVkRE15VTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9LUzUwYjFOMGNtbHVaeWdwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOcFoyNWxaRlpoY21sdWRETXlVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGTnBaMjVsWkZaaGNtbHVkRE15S0NrdWRHOVRkSEpwYm1jb0tYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1dtbG5lbUZuVm1GeWFXNTBNekk5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxuSmxZV1JWYm5OcFoyNWxaRlpoY21sdWRETXlLQ2s3Y21WMGRYSnVJR0UrUGo0eFhpMG9ZU1l4S1gwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUTJORDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JUY0d4cGRGWmhjbWx1ZERZMEtHcHpjR0l1ZFhScGJITXVhbTlwYmxWcGJuUTJOQ2w5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV5WldGa1UzQnNhWFJXWVhKcGJuUTJOQ2hxYzNCaUxuVjBhV3h6TG1wdmFXNVZibk5wWjI1bFpFUmxZMmx0WVd4VGRISnBibWNwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOcFoyNWxaRlpoY21sdWREWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk53YkdsMFZtRnlhVzUwTmpRb2FuTndZaTUxZEdsc2N5NXFiMmx1U1c1ME5qUXBmVHRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlRhV2R1WldSV1lYSnBiblEyTkZOMGNtbHVaejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JUY0d4cGRGWmhjbWx1ZERZMEtHcHpjR0l1ZFhScGJITXVhbTlwYmxOcFoyNWxaRVJsWTJsdFlXeFRkSEpwYm1jcGZUdHFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSYWFXZDZZV2RXWVhKcGJuUTJORDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JUY0d4cGRGWmhjbWx1ZERZMEtHcHpjR0l1ZFhScGJITXVhbTlwYmxwcFozcGhaelkwS1gwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrV21sbmVtRm5WbUZ5YVc1MFNHRnphRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZOd2JHbDBXbWxuZW1GblZtRnlhVzUwTmpRb2FuTndZaTUxZEdsc2N5NXFiMmx1U0dGemFEWTBLWDA3WEc1cWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JhYVdkNllXZFdZWEpwYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSVGNHeHBkRnBwWjNwaFoxWmhjbWx1ZERZMEtHcHpjR0l1ZFhScGJITXVhbTlwYmxOcFoyNWxaRVJsWTJsdFlXeFRkSEpwYm1jcGZUdHFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVmFXNTBPRDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQWFJvYVhNdVlubDBaWE5mVzNSb2FYTXVZM1Z5YzI5eVh5c3dYVHQwYUdsekxtTjFjbk52Y2w4clBURTdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtTjFjbk52Y2w4OFBYUm9hWE11Wlc1a1h5azdjbVYwZFhKdUlHRjlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGVnBiblF4TmoxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFhSb2FYTXVZbmwwWlhOZlczUm9hWE11WTNWeWMyOXlYeXN3WFN4aVBYUm9hWE11WW5sMFpYTmZXM1JvYVhNdVkzVnljMjl5WHlzeFhUdDBhR2x6TG1OMWNuTnZjbDhyUFRJN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG1OMWNuTnZjbDg4UFhSb2FYTXVaVzVrWHlrN2NtVjBkWEp1SUdFOFBEQjhZanc4T0gwN1hHNXFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVmFXNTBNekk5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJNRjBzWWoxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhyTVYwc1l6MTBhR2x6TG1KNWRHVnpYMXQwYUdsekxtTjFjbk52Y2w4ck1sMHNaRDEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJNMTA3ZEdocGN5NWpkWEp6YjNKZkt6MDBPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NWpkWEp6YjNKZlBEMTBhR2x6TG1WdVpGOHBPM0psZEhWeWJpaGhQRHd3ZkdJOFBEaDhZenc4TVRaOFpEdzhNalFwUGo0K01IMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1ZXbHVkRFkwUFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5ZEdocGN5NXlaV0ZrVldsdWRETXlLQ2tzWWoxMGFHbHpMbkpsWVdSVmFXNTBNeklvS1R0eVpYUjFjbTRnYW5Od1lpNTFkR2xzY3k1cWIybHVWV2x1ZERZMEtHRXNZaWw5TzF4dWFuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVldsdWREWTBVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdkbUZ5SUdFOWRHaHBjeTV5WldGa1ZXbHVkRE15S0Nrc1lqMTBhR2x6TG5KbFlXUlZhVzUwTXpJb0tUdHlaWFIxY200Z2FuTndZaTUxZEdsc2N5NXFiMmx1Vlc1emFXZHVaV1JFWldOcGJXRnNVM1J5YVc1bktHRXNZaWw5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRWx1ZERnOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhyTUYwN2RHaHBjeTVqZFhKemIzSmZLejB4TzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTVqZFhKemIzSmZQRDEwYUdsekxtVnVaRjhwTzNKbGRIVnliaUJoUER3eU5ENCtNalI5TzF4dWFuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrU1c1ME1UWTlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG1KNWRHVnpYMXQwYUdsekxtTjFjbk52Y2w4ck1GMHNZajEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJNVjA3ZEdocGN5NWpkWEp6YjNKZkt6MHlPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NWpkWEp6YjNKZlBEMTBhR2x6TG1WdVpGOHBPM0psZEhWeWJpaGhQRHd3ZkdJOFBEZ3BQRHd4Tmo0K01UWjlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFbHVkRE15UFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5ZEdocGN5NWllWFJsYzE5YmRHaHBjeTVqZFhKemIzSmZLekJkTEdJOWRHaHBjeTVpZVhSbGMxOWJkR2hwY3k1amRYSnpiM0pmS3pGZExHTTlkR2hwY3k1aWVYUmxjMTliZEdocGN5NWpkWEp6YjNKZkt6SmRMR1E5ZEdocGN5NWllWFJsYzE5YmRHaHBjeTVqZFhKemIzSmZLek5kTzNSb2FYTXVZM1Z5YzI5eVh5czlORHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVZM1Z5YzI5eVh6dzlkR2hwY3k1bGJtUmZLVHR5WlhSMWNtNGdZVHc4TUh4aVBEdzRmR004UERFMmZHUThQREkwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVsdWREWTBQV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlkR2hwY3k1eVpXRmtWV2x1ZERNeUtDa3NZajEwYUdsekxuSmxZV1JWYVc1ME16SW9LVHR5WlhSMWNtNGdhbk53WWk1MWRHbHNjeTVxYjJsdVNXNTBOalFvWVN4aUtYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1NXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG5KbFlXUlZhVzUwTXpJb0tTeGlQWFJvYVhNdWNtVmhaRlZwYm5Rek1pZ3BPM0psZEhWeWJpQnFjM0JpTG5WMGFXeHpMbXB2YVc1VGFXZHVaV1JFWldOcGJXRnNVM1J5YVc1bktHRXNZaWw5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRVpzYjJGMFBXWjFibU4wYVc5dUtDbDdkbUZ5SUdFOWRHaHBjeTV5WldGa1ZXbHVkRE15S0NrN2NtVjBkWEp1SUdwemNHSXVkWFJwYkhNdWFtOXBia1pzYjJGME16SW9ZU3d3S1gwN1hHNXFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSRWIzVmliR1U5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxuSmxZV1JWYVc1ME16SW9LU3hpUFhSb2FYTXVjbVZoWkZWcGJuUXpNaWdwTzNKbGRIVnliaUJxYzNCaUxuVjBhV3h6TG1wdmFXNUdiRzloZERZMEtHRXNZaWw5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRUp2YjJ3OVpuVnVZM1JwYjI0b0tYdHlaWFIxY200aElYUm9hWE11WW5sMFpYTmZXM1JvYVhNdVkzVnljMjl5WHlzclhYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1JXNTFiVDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JUYVdkdVpXUldZWEpwYm5Rek1pZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMTBhR2x6TG1KNWRHVnpYeXhqUFhSb2FYTXVZM1Z5YzI5eVh6dGhQV01yWVR0bWIzSW9kbUZ5SUdROVcxMHNaVDFjSWx3aU8yTThZVHNwZTNaaGNpQm1QV0piWXlzclhUdHBaaWd4TWpnK1ppbGtMbkIxYzJnb1ppazdaV3h6WlNCcFppZ3hPVEkrWmlsamIyNTBhVzUxWlR0bGJITmxJR2xtS0RJeU5ENW1LWHQyWVhJZ1p6MWlXMk1ySzEwN1pDNXdkWE5vS0NobUpqTXhLVHc4Tm54bkpqWXpLWDFsYkhObElHbG1LREkwTUQ1bUtYdG5QV0piWXlzclhUdDJZWElnYUQxaVcyTXJLMTA3WkM1d2RYTm9LQ2htSmpFMUtUdzhNVEo4S0djbU5qTXBQRHcyZkdnbU5qTXBmV1ZzYzJVZ2FXWW9NalE0UG1ZcGUyYzlZbHRqS3l0ZE8yZzlZbHRqS3l0ZE8zWmhjaUJyUFdKYll5c3JYVHRtUFNobUpqY3BQRHd4T0h3b1p5WTJNeWs4UERFeWZDaG9Kall6S1R3OE5ueHJKall6TzJZdFBUWTFOVE0yTzJRdWNIVnphQ2dvWmo0K01UQW1NVEF5TXlrck5UVXlPVFlzS0dZbU1UQXlNeWtyTlRZek1qQXBmVGd4T1RJOFBXUXViR1Z1WjNSb0ppWW9aU3M5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlM1aGNIQnNlU2h1ZFd4c0xHUXBMR1F1YkdWdVozUm9QVEFwZldVclBXZHZiMmN1WTNKNWNIUXVZbmwwWlVGeWNtRjVWRzlUZEhKcGJtY29aQ2s3WEc1MGFHbHpMbU4xY25OdmNsODlZenR5WlhSMWNtNGdaWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVM1J5YVc1blYybDBhRXhsYm1kMGFEMW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBYUm9hWE11Y21WaFpGVnVjMmxuYm1Wa1ZtRnlhVzUwTXpJb0tUdHlaWFIxY200Z2RHaHBjeTV5WldGa1UzUnlhVzVuS0dFcGZUdHFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSQ2VYUmxjejFtZFc1amRHbHZiaWhoS1h0cFppZ3dQbUY4ZkhSb2FYTXVZM1Z5YzI5eVh5dGhQblJvYVhNdVlubDBaWE5mTG14bGJtZDBhQ2x5WlhSMWNtNGdkR2hwY3k1bGNuSnZjbDg5SVRBc1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkpiblpoYkdsa0lHSjVkR1VnYkdWdVozUm9JVndpS1N4dVpYY2dWV2x1ZERoQmNuSmhlU2d3S1R0MllYSWdZajEwYUdsekxtSjVkR1Z6WHk1emRXSmhjbkpoZVNoMGFHbHpMbU4xY25OdmNsOHNkR2hwY3k1amRYSnpiM0pmSzJFcE8zUm9hWE11WTNWeWMyOXlYeXM5WVR0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11WTNWeWMyOXlYenc5ZEdocGN5NWxibVJmS1R0eVpYUjFjbTRnWW4wN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVm1GeWFXNTBTR0Z6YURZMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGTndiR2wwVm1GeWFXNTBOalFvYW5Od1lpNTFkR2xzY3k1cWIybHVTR0Z6YURZMEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkdhWGhsWkVoaGMyZzJORDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQWFJvYVhNdVlubDBaWE5mTEdJOWRHaHBjeTVqZFhKemIzSmZMR005WVZ0aUt6QmRMR1E5WVZ0aUt6RmRMR1U5WVZ0aUt6SmRMR1k5WVZ0aUt6TmRMR2M5WVZ0aUt6UmRMR2c5WVZ0aUt6VmRMR3M5WVZ0aUt6WmRPMkU5WVZ0aUt6ZGRPM1JvYVhNdVkzVnljMjl5WHlzOU9EdHlaWFIxY200Z1UzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTaGpMR1FzWlN4bUxHY3NhQ3hyTEdFcGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNqMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RHaHBjeTVrWldOdlpHVnlYejFxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1WVd4c2IyTW9ZU3hpTEdNcE8zUm9hWE11Wm1sbGJHUkRkWEp6YjNKZlBYUm9hWE11WkdWamIyUmxjbDh1WjJWMFEzVnljMjl5S0NrN2RHaHBjeTV1WlhoMFJtbGxiR1JmUFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrbE9Wa0ZNU1VSZlJrbEZURVJmVGxWTlFrVlNPM1JvYVhNdWJtVjRkRmRwY21WVWVYQmxYejFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1SlRsWkJURWxFTzNSb2FYTXVaWEp5YjNKZlBTRXhPM1JvYVhNdWNtVmhaRU5oYkd4aVlXTnJjMTg5Ym5Wc2JIMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVhVzV6ZEdGdVkyVkRZV05vWlY4OVcxMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTVoYkd4dll6MW1kVzVqZEdsdmJpaGhMR0lzWXlsN2FXWW9hbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVhVzV6ZEdGdVkyVkRZV05vWlY4dWJHVnVaM1JvS1h0MllYSWdaRDFxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTVwYm5OMFlXNWpaVU5oWTJobFh5NXdiM0FvS1R0aEppWmtMbVJsWTI5a1pYSmZMbk5sZEVKc2IyTnJLR0VzWWl4aktUdHlaWFIxY200Z1pIMXlaWFIxY200Z2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0VzWWl4aktYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbUZzYkc5alBXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxtRnNiRzlqTzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExtWnlaV1U5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbVJsWTI5a1pYSmZMbU5zWldGeUtDazdkR2hwY3k1dVpYaDBSbWxsYkdSZlBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa2xPVmtGTVNVUmZSa2xGVEVSZlRsVk5Ra1ZTTzNSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHoxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUpUbFpCVEVsRU8zUm9hWE11WlhKeWIzSmZQU0V4TzNSb2FYTXVjbVZoWkVOaGJHeGlZV05yYzE4OWJuVnNiRHN4TURBK2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWFXNXpkR0Z1WTJWRFlXTm9aVjh1YkdWdVozUm9KaVpxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTVwYm5OMFlXNWpaVU5oWTJobFh5NXdkWE5vS0hSb2FYTXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1WjJWMFJtbGxiR1JEZFhKemIzSTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1bWFXVnNaRU4xY25OdmNsOTlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzVuWlhSRGRYSnpiM0k5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NW5aWFJEZFhKemIzSW9LWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdVoyVjBRblZtWm1WeVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1WjJWMFFuVm1abVZ5S0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNW5aWFJHYVdWc1pFNTFiV0psY2oxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbTVsZUhSR2FXVnNaRjk5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1blpYUlhhWEpsVkhsd1pUMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG01bGVIUlhhWEpsVkhsd1pWOTlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzVwYzBSbGJHbHRhWFJsWkQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1JGVEVsTlNWUkZSSDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG1selJXNWtSM0p2ZFhBOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV1WlhoMFYybHlaVlI1Y0dWZlBUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVGVGtSZlIxSlBWVkI5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExtZGxkRVZ5Y205eVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11WlhKeWIzSmZmSHgwYUdsekxtUmxZMjlrWlhKZkxtZGxkRVZ5Y205eUtDbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV6WlhSQ2JHOWphejFtZFc1amRHbHZiaWhoTEdJc1l5bDdkR2hwY3k1a1pXTnZaR1Z5WHk1elpYUkNiRzlqYXloaExHSXNZeWs3ZEdocGN5NXVaWGgwUm1sbGJHUmZQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtsT1ZrRk1TVVJmUmtsRlRFUmZUbFZOUWtWU08zUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVKVGxaQlRFbEVmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WelpYUTlablZ1WTNScGIyNG9LWHQwYUdsekxtUmxZMjlrWlhKZkxuSmxjMlYwS0NrN2RHaHBjeTV1WlhoMFJtbGxiR1JmUFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrbE9Wa0ZNU1VSZlJrbEZURVJmVGxWTlFrVlNPM1JvYVhNdWJtVjRkRmRwY21WVWVYQmxYejFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1SlRsWkJURWxFZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNWhaSFpoYm1ObFBXWjFibU4wYVc5dUtHRXBlM1JvYVhNdVpHVmpiMlJsY2w4dVlXUjJZVzVqWlNoaEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Ym1WNGRFWnBaV3hrUFdaMWJtTjBhVzl1S0NsN2FXWW9kR2hwY3k1a1pXTnZaR1Z5WHk1aGRFVnVaQ2dwS1hKbGRIVnliaUV4TzJsbUtIUm9hWE11WjJWMFJYSnliM0lvS1NseVpYUjFjbTRnWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKRVpXTnZaR1Z5SUdocGRDQmhiaUJsY25KdmNsd2lLU3doTVR0MGFHbHpMbVpwWld4a1EzVnljMjl5WHoxMGFHbHpMbVJsWTI5a1pYSmZMbWRsZEVOMWNuTnZjaWdwTzNaaGNpQmhQWFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9LU3hpUFdFK1BqNHpPMkVtUFRjN2FXWW9ZU0U5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVSmlaaElUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVHU1ZoRlJETXlKaVpoSVQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUdTVmhGUkRZMEppWmhJVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RVJVeEpUVWxVUlVRbUptRWhQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxOVVFWSlVYMGRTVDFWUUppWmhJVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RlRrUmZSMUpQVlZBcGNtVjBkWEp1SUdkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVNXNTJZV3hwWkNCM2FYSmxJSFI1Y0dVNklDVnpJQ2hoZENCd2IzTnBkR2x2YmlBbGN5bGNJaXhjYm1Fc2RHaHBjeTVtYVdWc1pFTjFjbk52Y2w4cExIUm9hWE11WlhKeWIzSmZQU0V3TENFeE8zUm9hWE11Ym1WNGRFWnBaV3hrWHoxaU8zUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MWhPM0psZEhWeWJpRXdmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1ZFc1emEybHdTR1ZoWkdWeVBXWjFibU4wYVc5dUtDbDdkR2hwY3k1a1pXTnZaR1Z5WHk1MWJuTnJhWEJXWVhKcGJuUW9kR2hwY3k1dVpYaDBSbWxsYkdSZlBEd3pmSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYeWw5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1emEybHdUV0YwWTJocGJtZEdhV1ZzWkhNOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxMGFHbHpMbTVsZUhSR2FXVnNaRjg3Wm05eUtIUm9hWE11ZFc1emEybHdTR1ZoWkdWeUtDazdkR2hwY3k1dVpYaDBSbWxsYkdRb0tTWW1kR2hwY3k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwUFQxaE95bDBhR2x6TG5OcmFYQkdhV1ZzWkNncE8zUm9hWE11WkdWamIyUmxjbDh1WVhSRmJtUW9LWHg4ZEdocGN5NTFibk5yYVhCSVpXRmtaWElvS1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjMnRwY0ZaaGNtbHVkRVpwWld4a1BXWjFibU4wYVc5dUtDbDdkR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZJVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFEvS0dkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVNXNTJZV3hwWkNCM2FYSmxJSFI1Y0dVZ1ptOXlJSE5yYVhCV1lYSnBiblJHYVdWc1pGd2lLU3gwYUdsekxuTnJhWEJHYVdWc1pDZ3BLVHAwYUdsekxtUmxZMjlrWlhKZkxuTnJhWEJXWVhKcGJuUW9LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5OcmFYQkVaV3hwYldsMFpXUkdhV1ZzWkQxbWRXNWpkR2x2YmlncGUybG1LSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYeUU5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtXZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lTVzUyWVd4cFpDQjNhWEpsSUhSNWNHVWdabTl5SUhOcmFYQkVaV3hwYldsMFpXUkdhV1ZzWkZ3aUtTeDBhR2x6TG5OcmFYQkdhV1ZzWkNncE8yVnNjMlY3ZG1GeUlHRTlkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWVzV6YVdkdVpXUldZWEpwYm5Rek1pZ3BPM1JvYVhNdVpHVmpiMlJsY2w4dVlXUjJZVzVqWlNoaEtYMTlPMXh1YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5OcmFYQkdhWGhsWkRNeVJtbGxiR1E5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4aFBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1pKV0VWRU16SS9LR2R2YjJjdVlYTnpaWEowY3k1bVlXbHNLRndpU1c1MllXeHBaQ0IzYVhKbElIUjVjR1VnWm05eUlITnJhWEJHYVhobFpETXlSbWxsYkdSY0lpa3NkR2hwY3k1emEybHdSbWxsYkdRb0tTazZkR2hwY3k1a1pXTnZaR1Z5WHk1aFpIWmhibU5sS0RRcGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjMnRwY0VacGVHVmtOalJHYVdWc1pEMW1kVzVqZEdsdmJpZ3BlM1JvYVhNdWJtVjRkRmRwY21WVWVYQmxYeUU5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVEyTkQ4b1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkpiblpoYkdsa0lIZHBjbVVnZEhsd1pTQm1iM0lnYzJ0cGNFWnBlR1ZrTmpSR2FXVnNaRndpS1N4MGFHbHpMbk5yYVhCR2FXVnNaQ2dwS1RwMGFHbHpMbVJsWTI5a1pYSmZMbUZrZG1GdVkyVW9PQ2w5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuTnJhWEJIY205MWNEMW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBYUm9hWE11Ym1WNGRFWnBaV3hrWHp0a2IzdHBaaWdoZEdocGN5NXVaWGgwUm1sbGJHUW9LU2w3WjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKVmJtMWhkR05vWldRZ2MzUmhjblF0WjNKdmRYQWdkR0ZuT2lCemRISmxZVzBnUlU5R1hDSXBPM1JvYVhNdVpYSnliM0pmUFNFd08ySnlaV0ZyZldsbUtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UlU1RVgwZFNUMVZRS1h0MGFHbHpMbTVsZUhSR2FXVnNaRjhoUFdFbUppaG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJbFZ1YldGMFkyaGxaQ0JsYm1RdFozSnZkWEFnZEdGblhDSXBMSFJvYVhNdVpYSnliM0pmUFNFd0tUdGljbVZoYTMxMGFHbHpMbk5yYVhCR2FXVnNaQ2dwZlhkb2FXeGxLREVwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXphMmx3Um1sbGJHUTlablZ1WTNScGIyNG9LWHR6ZDJsMFkyZ29kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZLWHRqWVhObElHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZEcDBhR2x6TG5OcmFYQldZWEpwYm5SR2FXVnNaQ2dwTzJKeVpXRnJPMk5oYzJVZ2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5EcDBhR2x6TG5OcmFYQkdhWGhsWkRZMFJtbGxiR1FvS1R0aWNtVmhhenRqWVhObElHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1JGVEVsTlNWUkZSRHAwYUdsekxuTnJhWEJFWld4cGJXbDBaV1JHYVdWc1pDZ3BPMkp5WldGck8yTmhjMlVnYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVF6TWpwMGFHbHpMbk5yYVhCR2FYaGxaRE15Um1sbGJHUW9LVHRpY21WaGF6dGpZWE5sSUdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsTlVRVkpVWDBkU1QxVlFPblJvYVhNdWMydHBjRWR5YjNWd0tDazdZbkpsWVdzN1pHVm1ZWFZzZERwbmIyOW5MbUZ6YzJWeWRITXVabUZwYkNoY0lrbHVkbUZzYVdRZ2QybHlaU0JsYm1OdlpHbHVaeUJtYjNJZ1ptbGxiR1F1WENJcGZYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WbmFYTjBaWEpTWldGa1EyRnNiR0poWTJzOVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c1BUMDlkR2hwY3k1eVpXRmtRMkZzYkdKaFkydHpYeVltS0hSb2FYTXVjbVZoWkVOaGJHeGlZV05yYzE4OWUzMHBPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvSVhSb2FYTXVjbVZoWkVOaGJHeGlZV05yYzE5YllWMHBPM1JvYVhNdWNtVmhaRU5oYkd4aVlXTnJjMTliWVYwOVluMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkoxYmxKbFlXUkRZV3hzWW1GamF6MW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQVDEwYUdsekxuSmxZV1JEWVd4c1ltRmphM05mS1R0aFBYUm9hWE11Y21WaFpFTmhiR3hpWVdOcmMxOWJZVjA3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaEtUdHlaWFIxY200Z1lTaDBhR2x6S1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVGdWVUMW1kVzVqZEdsdmJpaGhLWHQwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVJtbGxiR1JVZVhCbFZHOVhhWEpsVkhsd1pTaGhLVHQyWVhJZ1lqMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHYVdWc1pGUjVjR1U3YzNkcGRHTm9LR0VwZTJOaGMyVWdZaTVFVDFWQ1RFVTZjbVYwZFhKdUlIUm9hWE11Y21WaFpFUnZkV0pzWlNncE8yTmhjMlVnWWk1R1RFOUJWRHB5WlhSMWNtNGdkR2hwY3k1eVpXRmtSbXh2WVhRb0tUdGpZWE5sSUdJdVNVNVVOalE2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRWx1ZERZMEtDazdZMkZ6WlNCaUxsVkpUbFEyTkRweVpYUjFjbTRnZEdocGN5NXlaV0ZrVldsdWREWTBLQ2s3WTJGelpTQmlMa2xPVkRNeU9uSmxkSFZ5YmlCMGFHbHpMbkpsWVdSSmJuUXpNaWdwTzJOaGMyVWdZaTVHU1ZoRlJEWTBPbkpsZEhWeWJpQjBhR2x6TG5KbFlXUkdhWGhsWkRZMEtDazdZMkZ6WlNCaUxrWkpXRVZFTXpJNmNtVjBkWEp1SUhSb2FYTXVjbVZoWkVacGVHVmtNeklvS1R0allYTmxJR0l1UWs5UFREcHlaWFIxY200Z2RHaHBjeTV5WldGa1FtOXZiQ2dwTzJOaGMyVWdZaTVUVkZKSlRrYzZjbVYwZFhKdUlIUm9hWE11Y21WaFpGTjBjbWx1WnlncE8xeHVZMkZ6WlNCaUxrZFNUMVZRT21kdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVIzSnZkWEFnWm1sbGJHUWdkSGx3WlNCdWIzUWdjM1Z3Y0c5eWRHVmtJR2x1SUhKbFlXUkJibmtvS1Z3aUtUdGpZWE5sSUdJdVRVVlRVMEZIUlRwbmIyOW5MbUZ6YzJWeWRITXVabUZwYkNoY0lrMWxjM05oWjJVZ1ptbGxiR1FnZEhsd1pTQnViM1FnYzNWd2NHOXlkR1ZrSUdsdUlISmxZV1JCYm5rb0tWd2lLVHRqWVhObElHSXVRbGxVUlZNNmNtVjBkWEp1SUhSb2FYTXVjbVZoWkVKNWRHVnpLQ2s3WTJGelpTQmlMbFZKVGxRek1qcHlaWFIxY200Z2RHaHBjeTV5WldGa1ZXbHVkRE15S0NrN1kyRnpaU0JpTGtWT1ZVMDZjbVYwZFhKdUlIUm9hWE11Y21WaFpFVnVkVzBvS1R0allYTmxJR0l1VTBaSldFVkVNekk2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk5tYVhobFpETXlLQ2s3WTJGelpTQmlMbE5HU1ZoRlJEWTBPbkpsZEhWeWJpQjBhR2x6TG5KbFlXUlRabWw0WldRMk5DZ3BPMk5oYzJVZ1lpNVRTVTVVTXpJNmNtVjBkWEp1SUhSb2FYTXVjbVZoWkZOcGJuUXpNaWdwTzJOaGMyVWdZaTVUU1U1VU5qUTZjbVYwZFhKdUlIUm9hWE11Y21WaFpGTnBiblEyTkNncE8yTmhjMlVnWWk1R1NFRlRTRFkwT25KbGRIVnliaUIwYUdsekxuSmxZV1JHYVhobFpFaGhjMmcyTkNncE8yTmhjMlVnWWk1V1NFRlRTRFkwT25KbGRIVnliaUIwYUdsekxuSmxZV1JXWVhKcGJuUklZWE5vTmpRb0tUdGNibVJsWm1GMWJIUTZaMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0pKYm5aaGJHbGtJR1pwWld4a0lIUjVjR1VnYVc0Z2NtVmhaRUZ1ZVNncFhDSXBmWEpsZEhWeWJpQXdmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFMWxjM05oWjJVOVpuVnVZM1JwYjI0b1lTeGlLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLVHQyWVhJZ1l6MTBhR2x6TG1SbFkyOWtaWEpmTG1kbGRFVnVaQ2dwTEdROWRHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXNXphV2R1WldSV1lYSnBiblF6TWlncE8yUTlkR2hwY3k1a1pXTnZaR1Z5WHk1blpYUkRkWEp6YjNJb0tTdGtPM1JvYVhNdVpHVmpiMlJsY2w4dWMyVjBSVzVrS0dRcE8ySW9ZU3gwYUdsektUdDBhR2x6TG1SbFkyOWtaWEpmTG5ObGRFTjFjbk52Y2loa0tUdDBhR2x6TG1SbFkyOWtaWEpmTG5ObGRFVnVaQ2hqS1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVkeWIzVndQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVUxUkJVbFJmUjFKUFZWQXBPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NXVaWGgwUm1sbGJHUmZQVDFoS1R0aktHSXNkR2hwY3lrN2RHaHBjeTVsY25KdmNsOThmSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJVNUVYMGRTVDFWUWZId29aMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0pIY205MWNDQnpkV0p0WlhOellXZGxJR1JwWkNCdWIzUWdaVzVrSUhkcGRHZ2dZVzRnUlU1RVgwZFNUMVZRSUhSaFoxd2lLU3gwYUdsekxtVnljbTl5WHowaE1DbDlPMXh1YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG1kbGRFWnBaV3hrUkdWamIyUmxjajFtZFc1amRHbHZiaWdwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTV1WlhoMFYybHlaVlI1Y0dWZlBUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVFUlV4SlRVbFVSVVFwTzNaaGNpQmhQWFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9LU3hpUFhSb2FYTXVaR1ZqYjJSbGNsOHVaMlYwUTNWeWMyOXlLQ2tzWXoxaUsyRTdZVDFxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1WVd4c2IyTW9kR2hwY3k1a1pXTnZaR1Z5WHk1blpYUkNkV1ptWlhJb0tTeGlMR0VwTzNSb2FYTXVaR1ZqYjJSbGNsOHVjMlYwUTNWeWMyOXlLR01wTzNKbGRIVnliaUJoZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRWx1ZERNeVBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZOcFoyNWxaRlpoY21sdWRETXlLQ2w5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JKYm5Rek1sTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JUYVdkdVpXUldZWEpwYm5Rek1sTjBjbWx1WnlncGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVsdWREWTBQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGTnBaMjVsWkZaaGNtbHVkRFkwS0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrU1c1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVTJsbmJtVmtWbUZ5YVc1ME5qUlRkSEpwYm1jb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGVnBiblF6TWoxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JWYm5OcFoyNWxaRlpoY21sdWRETXlLQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtWV2x1ZERNeVUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SlRkSEpwYm1jb0tYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVmFXNTBOalE5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLVHR5WlhSMWNtNGdkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWVzV6YVdkdVpXUldZWEpwYm5RMk5DZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtWV2x1ZERZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUlRkSEpwYm1jb0tYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVGFXNTBNekk5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLVHR5WlhSMWNtNGdkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtXbWxuZW1GblZtRnlhVzUwTXpJb0tYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVGFXNTBOalE5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLVHR5WlhSMWNtNGdkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtXbWxuZW1GblZtRnlhVzUwTmpRb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTnBiblEyTkZOMGNtbHVaejFtZFc1amRHbHZiaWdwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTV1WlhoMFYybHlaVlI1Y0dWZlBUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBPM0psZEhWeWJpQjBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUmFhV2Q2WVdkV1lYSnBiblEyTkZOMGNtbHVaeWdwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRVpwZUdWa016STlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1pazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGVnBiblF6TWlncGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVacGVHVmtOalE5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUTJOQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZwYm5RMk5DZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtSbWw0WldRMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1R1NWaEZSRFkwS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVldsdWREWTBVM1J5YVc1bktDbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1UyWnBlR1ZrTXpJOVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVF6TWlrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkVsdWRETXlLQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVMlpwZUdWa016SlRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVF6TWlrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkVsdWRETXlLQ2t1ZEc5VGRISnBibWNvS1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZObWFYaGxaRFkwUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JKYm5RMk5DZ3BmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTm1hWGhsWkRZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JKYm5RMk5GTjBjbWx1WnlncGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVac2IyRjBQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1pKV0VWRU16SXBPM0psZEhWeWJpQjBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUkdiRzloZENncGZUdGNibXB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1JHOTFZbXhsUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JFYjNWaWJHVW9LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkNiMjlzUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJU0YwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JWYm5OcFoyNWxaRlpoY21sdWRETXlLQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtSVzUxYlQxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JUYVdkdVpXUldZWEpwYm5RMk5DZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrUkZURWxOU1ZSRlJDazdkbUZ5SUdFOWRHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXNXphV2R1WldSV1lYSnBiblF6TWlncE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVGRISnBibWNvWVNsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrUW5sMFpYTTlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLVHQyWVhJZ1lUMTBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUlZibk5wWjI1bFpGWmhjbWx1ZERNeUtDazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFSjVkR1Z6S0dFcGZUdGNibXB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1ZtRnlhVzUwU0dGemFEWTBQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGWmhjbWx1ZEVoaGMyZzJOQ2dwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk5wYm5SSVlYTm9OalE5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLVHR5WlhSMWNtNGdkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtXbWxuZW1GblZtRnlhVzUwU0dGemFEWTBLQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVM0JzYVhSV1lYSnBiblEyTkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVTNCc2FYUldZWEpwYm5RMk5DaGhLWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk53YkdsMFdtbG5lbUZuVm1GeWFXNTBOalE5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRk53YkdsMFZtRnlhVzUwTmpRb1puVnVZM1JwYjI0b1lpeGpLWHR5WlhSMWNtNGdhbk53WWk1MWRHbHNjeTVtY205dFdtbG5lbUZuTmpRb1lpeGpMR0VwZlNsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrUm1sNFpXUklZWE5vTmpROVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVEyTkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkVacGVHVmtTR0Z6YURZMEtDbDlPMXh1YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlRjR3hwZEVacGVHVmtOalE5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JUY0d4cGRFWnBlR1ZrTmpRb1lTbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrUm1sbGJHUmZQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTV1WlhoMFYybHlaVlI1Y0dWZlBUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVFUlV4SlRVbFVSVVFwTzNaaGNpQmlQWFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9LVHRpUFhSb2FYTXVaR1ZqYjJSbGNsOHVaMlYwUTNWeWMyOXlLQ2tyWWp0bWIzSW9kbUZ5SUdNOVcxMDdkR2hwY3k1a1pXTnZaR1Z5WHk1blpYUkRkWEp6YjNJb0tUeGlPeWxqTG5CMWMyZ29ZUzVqWVd4c0tIUm9hWE11WkdWamIyUmxjbDhwS1R0eVpYUjFjbTRnWTMwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZCaFkydGxaRWx1ZERNeVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JUYVdkdVpXUldZWEpwYm5Rek1pbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrU1c1ME16SlRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV5WldGa1VHRmphMlZrUm1sbGJHUmZLSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRk5wWjI1bFpGWmhjbWx1ZERNeVUzUnlhVzVuS1gwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JRWVdOclpXUkpiblEyTkQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSUVlXTnJaV1JHYVdWc1pGOG9kR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtVMmxuYm1Wa1ZtRnlhVzUwTmpRcGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZCaFkydGxaRWx1ZERZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUlRhV2R1WldSV1lYSnBiblEyTkZOMGNtbHVaeWw5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JRWVdOclpXUlZhVzUwTXpJOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV5WldGa1VHRmphMlZrUm1sbGJHUmZLSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkZWcGJuUXpNbE4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5KbFlXUlFZV05yWldSR2FXVnNaRjhvZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUXpNbE4wY21sdVp5bDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrVldsdWREWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVmJuTnBaMjVsWkZaaGNtbHVkRFkwS1gwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JRWVdOclpXUlZhVzUwTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXlaV0ZrVUdGamEyVmtSbWxsYkdSZktIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGVnVjMmxuYm1Wa1ZtRnlhVzUwTmpSVGRISnBibWNwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVUdGamEyVmtVMmx1ZERNeVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JhYVdkNllXZFdZWEpwYm5Rek1pbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrVTJsdWREWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSYWFXZDZZV2RXWVhKcGJuUTJOQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1UybHVkRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSYWFXZDZZV2RXWVhKcGJuUTJORk4wY21sdVp5bDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrUm1sNFpXUXpNajFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JRWVdOclpXUkdhV1ZzWkY4b2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXbHVkRE15S1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZCaFkydGxaRVpwZUdWa05qUTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmS0hSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWcGJuUTJOQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1JtbDRaV1EyTkZOMGNtbHVaejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JRWVdOclpXUkdhV1ZzWkY4b2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXbHVkRFkwVTNSeWFXNW5LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlFZV05yWldSVFptbDRaV1F6TWoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSUVlXTnJaV1JHYVdWc1pGOG9kR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtTVzUwTXpJcGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZCaFkydGxaRk5tYVhobFpEWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSSmJuUTJOQ2w5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JRWVdOclpXUlRabWw0WldRMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSUVlXTnJaV1JHYVdWc1pGOG9kR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtTVzUwTmpSVGRISnBibWNwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRkJoWTJ0bFpFWnNiMkYwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUkdiRzloZENsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVUdGamEyVmtSRzkxWW14bFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JFYjNWaWJHVXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVKdmIydzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmS0hSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkVKdmIyd3BmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVWdWRXMDlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmS0hSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkVWdWRXMHBmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1ZtRnlhVzUwU0dGemFEWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSV1lYSnBiblJJWVhOb05qUXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVacGVHVmtTR0Z6YURZMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JHYVhobFpFaGhjMmcyTkNsOU8ycHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNqMW1kVzVqZEdsdmJpZ3BlM1JvYVhNdVluVm1abVZ5WHoxYlhYMDdhbk53WWk1Q2FXNWhjbmxGYm1OdlpHVnlMbkJ5YjNSdmRIbHdaUzVzWlc1bmRHZzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1aWRXWm1aWEpmTG14bGJtZDBhSDA3YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1bGJtUTlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG1KMVptWmxjbDg3ZEdocGN5NWlkV1ptWlhKZlBWdGRPM0psZEhWeWJpQmhmVHRjYm1wemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUY0d4cGRGWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaWw3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBUMU5ZWFJvTG1ac2IyOXlLR0VwS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHSTlQVTFoZEdndVpteHZiM0lvWWlrcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NRHc5WVNZbVlUeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNeklwTzJadmNpaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE4UFdJbUptSThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek15S1Rzd1BHSjhmREV5Tnp4aE95bDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhKakV5TjN3eE1qZ3BMR0U5S0dFK1BqNDNmR0k4UERJMUtUNCtQakFzWWo0K1BqMDNPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0VwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGNHeHBkRVpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRTlQVTFoZEdndVpteHZiM0lvWVNrcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZajA5VFdGMGFDNW1iRzl2Y2loaUtTazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d3UEQxaEppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ3dQRDFpSmlaaVBHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNaWs3ZEdocGN5NTNjbWwwWlZWcGJuUXpNaWhoS1R0MGFHbHpMbmR5YVhSbFZXbHVkRE15S0dJcGZUdGNibXB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeVBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3Wm05eUtHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NRHc5WVNZbVlUeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNeklwT3pFeU56eGhPeWwwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hoSmpFeU4zd3hNamdwTEdFK1BqNDlOenQwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hoS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBNekk5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQVDFOWVhSb0xtWnNiMjl5S0dFcEtUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0UrUFMxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk16RW1KbUU4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeEtUdHBaaWd3UEQxaEtYUm9hWE11ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtHRXBPMlZzYzJWN1ptOXlLSFpoY2lCaVBUQTdPVDVpTzJJckt5bDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhKakV5TjN3eE1qZ3BMR0UrUGowM08zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tERXBmWDA3WEc1cWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUTJORDFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRTlQVTFoZEdndVpteHZiM0lvWVNrcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NRHc5WVNZbVlUeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZOalFwTzJwemNHSXVkWFJwYkhNdWMzQnNhWFJKYm5RMk5DaGhLVHQwYUdsekxuZHlhWFJsVTNCc2FYUldZWEpwYm5RMk5DaHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUk1iM2NzYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFDbDlPMXh1YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVk5wWjI1bFpGWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBqMHRhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYell6SmlaaFBHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxODJNeWs3YW5Od1lpNTFkR2xzY3k1emNHeHBkRWx1ZERZMEtHRXBPM1JvYVhNdWQzSnBkR1ZUY0d4cGRGWmhjbWx1ZERZMEtHcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkeXhxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVVWdVkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxXbWxuZW1GblZtRnlhVzUwTXpJOVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hoUFQxTllYUm9MbVpzYjI5eUtHRXBLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dFK1BTMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVtSm1FOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXhLVHQwYUdsekxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNaWdvWVR3OE1WNWhQajR6TVNrK1BqNHdLWDA3YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBqMHRhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYell6SmlaaFBHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxODJNeWs3YW5Od1lpNTFkR2xzY3k1emNHeHBkRnBwWjNwaFp6WTBLR0VwTzNSb2FYTXVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHl4cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9LWDA3WEc1cWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTbDdkR2hwY3k1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZEVoaGMyZzJOQ2hxYzNCaUxuVjBhV3h6TG1SbFkybHRZV3hUZEhKcGJtZFViMGhoYzJnMk5DaGhLU2w5TzJwemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZhYVdkNllXZFdZWEpwYm5SSVlYTm9OalE5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5ZEdocGN6dHFjM0JpTG5WMGFXeHpMbk53YkdsMFNHRnphRFkwS0dFcE8ycHpjR0l1ZFhScGJITXVkRzlhYVdkNllXYzJOQ2hxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hQ3htZFc1amRHbHZiaWhoTEdRcGUySXVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBLR0UrUGo0d0xHUStQajR3S1gwcGZUdGNibXB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlZhVzUwT0QxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVlTWW1NalUyUG1FcE8zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHRStQajR3SmpJMU5TbDlPMnB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlZhVzUwTVRZOVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hoUFQxTllYUm9MbVpzYjI5eUtHRXBLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXRW1KalkxTlRNMlBtRXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0d0pqSTFOU2s3ZEdocGN5NWlkV1ptWlhKZkxuQjFjMmdvWVQ0K1BqZ21NalUxS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZXbHVkRE15UFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZVDA5VFdGMGFDNW1iRzl2Y2loaEtTazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d3UEQxaEppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlrN2RHaHBjeTVpZFdabVpYSmZMbkIxYzJnb1lUNCtQakFtTWpVMUtUdDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhQajQrT0NZeU5UVXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0eE5pWXlOVFVwTzNSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dFK1BqNHlOQ1l5TlRVcGZUdHFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZXbHVkRFkwUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZVDA5VFdGMGFDNW1iRzl2Y2loaEtTazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d3UEQxaEppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTgyTkNrN2FuTndZaTUxZEdsc2N5NXpjR3hwZEZWcGJuUTJOQ2hoS1R0MGFHbHpMbmR5YVhSbFZXbHVkRE15S0dwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkV4dmR5azdkR2hwY3k1M2NtbDBaVlZwYm5Rek1paHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFNXNTBPRDFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRTlQVTFoZEdndVpteHZiM0lvWVNrcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9MVEV5T0R3OVlTWW1NVEk0UG1FcE8zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHRStQajR3SmpJMU5TbDlPMnB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkpiblF4TmoxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTFRNeU56WTRQRDFoSmlZek1qYzJPRDVoS1R0MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoaFBqNCtNQ1l5TlRVcE8zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHRStQajQ0SmpJMU5TbDlPMXh1YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERNeVBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBqMHRhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek14SmlaaFBHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNU2s3ZEdocGN5NWlkV1ptWlhKZkxuQjFjMmdvWVQ0K1BqQW1NalUxS1R0MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoaFBqNCtPQ1l5TlRVcE8zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHRStQajR4TmlZeU5UVXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0eU5DWXlOVFVwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWSmJuUTJORDFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRTlQVTFoZEdndVpteHZiM0lvWVNrcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZVDQ5TFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4Mk15WW1ZVHhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpNcE8ycHpjR0l1ZFhScGJITXVjM0JzYVhSSmJuUTJOQ2hoS1R0MGFHbHpMbmR5YVhSbFUzQnNhWFJHYVhobFpEWTBLR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHl4cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9LWDA3WEc1cWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsU1c1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hoUFQxTllYUm9MbVpzYjI5eUtHRXBLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0N0aFBqMHRhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYell6SmlZcllUeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZOak1wTzJwemNHSXVkWFJwYkhNdWMzQnNhWFJJWVhOb05qUW9hbk53WWk1MWRHbHNjeTVrWldOcGJXRnNVM1J5YVc1blZHOUlZWE5vTmpRb1lTa3BPM1JvYVhNdWQzSnBkR1ZUY0d4cGRFWnBlR1ZrTmpRb2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNMR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORWhwWjJncGZUdGNibXB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkdiRzloZEQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLRWx1Wm1sdWFYUjVQVDA5WVh4OExVbHVabWx1YVhSNVBUMDlZWHg4YVhOT1lVNG9ZU2w4ZkdFK1BTMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZETXlYMDFCV0NZbVlUdzlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11Umt4UFFWUXpNbDlOUVZncE8ycHpjR0l1ZFhScGJITXVjM0JzYVhSR2JHOWhkRE15S0dFcE8zUm9hWE11ZDNKcGRHVlZhVzUwTXpJb2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNLWDA3WEc1cWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsUkc5MVlteGxQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1NXNW1hVzVwZEhrOVBUMWhmSHd0U1c1bWFXNXBkSGs5UFQxaGZIeHBjMDVoVGloaEtYeDhZVDQ5TFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrWk1UMEZVTmpSZlRVRllKaVpoUEQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NUdURTlCVkRZMFgwMUJXQ2s3YW5Od1lpNTFkR2xzY3k1emNHeHBkRVpzYjJGME5qUW9ZU2s3ZEdocGN5NTNjbWwwWlZWcGJuUXpNaWhxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjcE8zUm9hWE11ZDNKcGRHVlZhVzUwTXpJb2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hQ2w5TzJwemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZDYjI5c1BXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWENKaWIyOXNaV0Z1WENJOVBUMTBlWEJsYjJZZ1lYeDhYQ0p1ZFcxaVpYSmNJajA5UFhSNWNHVnZaaUJoS1R0MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoaFB6RTZNQ2w5TzF4dWFuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVWdWRXMDlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBUMU5ZWFJvTG1ac2IyOXlLR0VwS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRStQUzFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpFbUptRThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek14S1R0MGFHbHpMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBNeklvWVNsOU8ycHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWQ2VYUmxjejFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUM1aGNIQnNlU2gwYUdsekxtSjFabVpsY2w4c1lTbDlPMnB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVldZWEpwYm5SSVlYTm9OalE5Wm5WdVkzUnBiMjRvWVNsN2FuTndZaTUxZEdsc2N5NXpjR3hwZEVoaGMyZzJOQ2hoS1R0MGFHbHpMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hQ2w5TzF4dWFuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVacGVHVmtTR0Z6YURZMFBXWjFibU4wYVc5dUtHRXBlMnB6Y0dJdWRYUnBiSE11YzNCc2FYUklZWE5vTmpRb1lTazdkR2hwY3k1M2NtbDBaVlZwYm5Rek1paHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUk1iM2NwTzNSb2FYTXVkM0pwZEdWVmFXNTBNeklvYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFDbDlPMXh1YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0k5ZEdocGN5NWlkV1ptWlhKZkxteGxibWQwYUN4alBUQTdZenhoTG14bGJtZDBhRHRqS3lzcGUzWmhjaUJrUFdFdVkyaGhja052WkdWQmRDaGpLVHRwWmlneE1qZytaQ2wwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hrS1R0bGJITmxJR2xtS0RJd05EZytaQ2wwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hrUGo0MmZERTVNaWtzZEdocGN5NWlkV1ptWlhKZkxuQjFjMmdvWkNZMk0zd3hNamdwTzJWc2MyVWdhV1lvTmpVMU16WStaQ2xwWmlnMU5USTVOanc5WkNZbU5UWXpNVGsrUFdRbUptTXJNVHhoTG14bGJtZDBhQ2w3ZG1GeUlHVTlZUzVqYUdGeVEyOWtaVUYwS0dNck1TazdOVFl6TWpBOFBXVW1KalUzTXpRelBqMWxKaVlvWkQweE1ESTBLaWhrTFRVMU1qazJLU3RsTFRVMk16SXdLelkxTlRNMkxIUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHUStQakU0ZkRJME1Da3NkR2hwY3k1aWRXWm1aWEpmTG5CMWMyZ29aRDQrTVRJbU5qTjhNVEk0S1N4MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoa1BqNDJKall6ZkRFeU9Da3NkR2hwY3k1aWRXWm1aWEpmTG5CMWMyZ29aQ1kyTTN3eE1qZ3BMR01yS3lsOVpXeHpaU0IwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hrUGo1Y2JqRXlmREl5TkNrc2RHaHBjeTVpZFdabVpYSmZMbkIxYzJnb1pENCtOaVkyTTN3eE1qZ3BMSFJvYVhNdVluVm1abVZ5WHk1d2RYTm9LR1FtTmpOOE1USTRLWDF5WlhSMWNtNGdkR2hwY3k1aWRXWm1aWEpmTG14bGJtZDBhQzFpZlR0cWMzQmlMbUZ5YVhSb1BYdDlPMnB6Y0dJdVlYSnBkR2d1VlVsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2RHaHBjeTVzYnoxaE8zUm9hWE11YUdrOVluMDdhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVjSEp2ZEc5MGVYQmxMbU50Y0QxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2RHaHBjeTVvYVR4aExtaHBmSHgwYUdsekxtaHBQVDFoTG1ocEppWjBhR2x6TG14dlBHRXViRzgvTFRFNmRHaHBjeTVvYVQwOVlTNW9hU1ltZEdocGN5NXNiejA5WVM1c2J6OHdPakY5TzJwemNHSXVZWEpwZEdndVZVbHVkRFkwTG5CeWIzUnZkSGx3WlM1eWFXZG9kRk5vYVdaMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHNWxkeUJxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQ2dvZEdocGN5NXNiejQrUGpGOEtIUm9hWE11YUdrbU1TazhQRE14S1Q0K1BqQXNkR2hwY3k1b2FUNCtQakUrUGo0d0tYMDdhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVjSEp2ZEc5MGVYQmxMbXhsWm5SVGFHbG1kRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJ1WlhjZ2FuTndZaTVoY21sMGFDNVZTVzUwTmpRb2RHaHBjeTVzYnp3OE1UNCtQakFzS0hSb2FYTXVhR2s4UERGOGRHaHBjeTVzYno0K1BqTXhLVDQrUGpBcGZUdGNibXB6Y0dJdVlYSnBkR2d1VlVsdWREWTBMbkJ5YjNSdmRIbHdaUzV0YzJJOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200aElTaDBhR2x6TG1ocEpqSXhORGMwT0RNMk5EZ3BmVHRxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQzV3Y205MGIzUjVjR1V1YkhOaVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlTRW9kR2hwY3k1c2J5WXhLWDA3YW5Od1lpNWhjbWwwYUM1VlNXNTBOalF1Y0hKdmRHOTBlWEJsTG5wbGNtODlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdNRDA5ZEdocGN5NXNieVltTUQwOWRHaHBjeTVvYVgwN2FuTndZaTVoY21sMGFDNVZTVzUwTmpRdWNISnZkRzkwZVhCbExtRmtaRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnYm1WM0lHcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMEtDaDBhR2x6TG14dksyRXViRzhtTkRJNU5EazJOekk1TlNrK1BqNHdQajQrTUN3b0tIUm9hWE11YUdrcllTNW9hU1kwTWprME9UWTNNamsxS1Q0K1BqQXBLeWcwTWprME9UWTNNamsyUEQxMGFHbHpMbXh2SzJFdWJHOC9NVG93S1Q0K1BqQXBmVHRjYm1wemNHSXVZWEpwZEdndVZVbHVkRFkwTG5CeWIzUnZkSGx3WlM1emRXSTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJRzVsZHlCcWMzQmlMbUZ5YVhSb0xsVkpiblEyTkNnb2RHaHBjeTVzYnkxaExteHZKalF5T1RRNU5qY3lPVFVwUGo0K01ENCtQakFzS0NoMGFHbHpMbWhwTFdFdWFHa21OREk1TkRrMk56STVOU2srUGo0d0tTMG9NRDUwYUdsekxteHZMV0V1Ykc4L01Ub3dLVDQrUGpBcGZUdHFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DNXRkV3d6TW5nek1qMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQV0VtTmpVMU16VTdZVDQrUGoweE5qdDJZWElnWkQxaUpqWTFOVE0xTEdVOVlqNCtQakUyTzJJOVl5cGtLelkxTlRNMktpaGpLbVVtTmpVMU16VXBLelkxTlRNMktpaGhLbVFtTmpVMU16VXBPMlp2Y2loalBXRXFaU3NvWXlwbFBqNCtNVFlwS3loaEttUStQajR4TmlrN05ESTVORGsyTnpJNU5qdzlZanNwWWkwOU5ESTVORGsyTnpJNU5peGpLejB4TzNKbGRIVnliaUJ1WlhjZ2FuTndZaTVoY21sMGFDNVZTVzUwTmpRb1lqNCtQakFzWXo0K1BqQXBmVHRjYm1wemNHSXVZWEpwZEdndVZVbHVkRFkwTG5CeWIzUnZkSGx3WlM1dGRXdzlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXViWFZzTXpKNE16SW9kR2hwY3k1c2J5eGhLVHRoUFdwemNHSXVZWEpwZEdndVZVbHVkRFkwTG0xMWJETXllRE15S0hSb2FYTXVhR2tzWVNrN1lTNW9hVDFoTG14dk8yRXViRzg5TUR0eVpYUjFjbTRnWWk1aFpHUW9ZU2w5TzF4dWFuTndZaTVoY21sMGFDNVZTVzUwTmpRdWNISnZkRzkwZVhCbExtUnBkajFtZFc1amRHbHZiaWhoS1h0cFppZ3dQVDFoS1hKbGRIVnlibHRkTzNaaGNpQmlQVzVsZHlCcWMzQmlMbUZ5YVhSb0xsVkpiblEyTkNnd0xEQXBMR005Ym1WM0lHcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMEtIUm9hWE11Ykc4c2RHaHBjeTVvYVNrN1lUMXVaWGNnYW5Od1lpNWhjbWwwYUM1VlNXNTBOalFvWVN3d0tUdG1iM0lvZG1GeUlHUTlibVYzSUdwemNHSXVZWEpwZEdndVZVbHVkRFkwS0RFc01DazdJV0V1YlhOaUtDazdLV0U5WVM1c1pXWjBVMmhwWm5Rb0tTeGtQV1F1YkdWbWRGTm9hV1owS0NrN1ptOXlLRHNoWkM1NlpYSnZLQ2s3S1RBK1BXRXVZMjF3S0dNcEppWW9ZajFpTG1Ga1pDaGtLU3hqUFdNdWMzVmlLR0VwS1N4aFBXRXVjbWxuYUhSVGFHbG1kQ2dwTEdROVpDNXlhV2RvZEZOb2FXWjBLQ2s3Y21WMGRYSnVXMklzWTExOU8ycHpjR0l1WVhKcGRHZ3VWVWx1ZERZMExuQnliM1J2ZEhsd1pTNTBiMU4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlMlp2Y2loMllYSWdZVDFjSWx3aUxHSTlkR2hwY3pzaFlpNTZaWEp2S0NrN0tYdGlQV0l1WkdsMktERXdLVHQyWVhJZ1l6MWlXekJkTzJFOVlsc3hYUzVzYnl0aE8ySTlZMzFjSWx3aVBUMWhKaVlvWVQxY0lqQmNJaWs3Y21WMGRYSnVJR0Y5TzF4dWFuTndZaTVoY21sMGFDNVZTVzUwTmpRdVpuSnZiVk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0k5Ym1WM0lHcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMEtEQXNNQ2tzWXoxdVpYY2dhbk53WWk1aGNtbDBhQzVWU1c1ME5qUW9NQ3d3S1N4a1BUQTdaRHhoTG14bGJtZDBhRHRrS3lzcGUybG1LRndpTUZ3aVBtRmJaRjE4ZkZ3aU9Wd2lQR0ZiWkYwcGNtVjBkWEp1SUc1MWJHdzdkbUZ5SUdVOWNHRnljMlZKYm5Rb1lWdGtYU3d4TUNrN1l5NXNiejFsTzJJOVlpNXRkV3dvTVRBcExtRmtaQ2hqS1gxeVpYUjFjbTRnWW4wN2FuTndZaTVoY21sMGFDNVZTVzUwTmpRdWNISnZkRzkwZVhCbExtTnNiMjVsUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUc1bGR5QnFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DaDBhR2x6TG14dkxIUm9hWE11YUdrcGZUdHFjM0JpTG1GeWFYUm9Ma2x1ZERZMFBXWjFibU4wYVc5dUtHRXNZaWw3ZEdocGN5NXNiejFoTzNSb2FYTXVhR2s5WW4wN1hHNXFjM0JpTG1GeWFYUm9Ma2x1ZERZMExuQnliM1J2ZEhsd1pTNWhaR1E5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUc1bGR5QnFjM0JpTG1GeWFYUm9Ma2x1ZERZMEtDaDBhR2x6TG14dksyRXViRzhtTkRJNU5EazJOekk1TlNrK1BqNHdQajQrTUN3b0tIUm9hWE11YUdrcllTNW9hU1kwTWprME9UWTNNamsxS1Q0K1BqQXBLeWcwTWprME9UWTNNamsyUEQxMGFHbHpMbXh2SzJFdWJHOC9NVG93S1Q0K1BqQXBmVHRxYzNCaUxtRnlhWFJvTGtsdWREWTBMbkJ5YjNSdmRIbHdaUzV6ZFdJOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHNWxkeUJxYzNCaUxtRnlhWFJvTGtsdWREWTBLQ2gwYUdsekxteHZMV0V1Ykc4bU5ESTVORGsyTnpJNU5TaytQajR3UGo0K01Dd29LSFJvYVhNdWFHa3RZUzVvYVNZME1qazBPVFkzTWprMUtUNCtQakFwTFNnd1BuUm9hWE11Ykc4dFlTNXNiejh4T2pBcFBqNCtNQ2w5TzJwemNHSXVZWEpwZEdndVNXNTBOalF1Y0hKdmRHOTBlWEJsTG1Oc2IyNWxQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJRzVsZHlCcWMzQmlMbUZ5YVhSb0xrbHVkRFkwS0hSb2FYTXViRzhzZEdocGN5NW9hU2w5TzF4dWFuTndZaTVoY21sMGFDNUpiblEyTkM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQwd0lUMG9kR2hwY3k1b2FTWXlNVFEzTkRnek5qUTRLU3hpUFc1bGR5QnFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DaDBhR2x6TG14dkxIUm9hWE11YUdrcE8yRW1KaWhpUFNodVpYY2dhbk53WWk1aGNtbDBhQzVWU1c1ME5qUW9NQ3d3S1NrdWMzVmlLR0lwS1R0eVpYUjFjbTRvWVQ5Y0lpMWNJanBjSWx3aUtTdGlMblJ2VTNSeWFXNW5LQ2w5TzJwemNHSXVZWEpwZEdndVNXNTBOalF1Wm5KdmJWTjBjbWx1WnoxbWRXNWpkR2x2YmloaEtYdDJZWElnWWowd1BHRXViR1Z1WjNSb0ppWmNJaTFjSWowOVlWc3dYVHRpSmlZb1lUMWhMbk4xWW5OMGNtbHVaeWd4S1NrN1lUMXFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DNW1jbTl0VTNSeWFXNW5LR0VwTzJsbUtHNTFiR3c5UFQxaEtYSmxkSFZ5YmlCdWRXeHNPMkltSmloaFBTaHVaWGNnYW5Od1lpNWhjbWwwYUM1VlNXNTBOalFvTUN3d0tTa3VjM1ZpS0dFcEtUdHlaWFIxY200Z2JtVjNJR3B6Y0dJdVlYSnBkR2d1U1c1ME5qUW9ZUzVzYnl4aExtaHBLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEk5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbUpzYjJOcmMxODlXMTA3ZEdocGN5NTBiM1JoYkV4bGJtZDBhRjg5TUR0MGFHbHpMbVZ1WTI5a1pYSmZQVzVsZHlCcWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJN2RHaHBjeTVpYjI5cmJXRnlhM05mUFZ0ZGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVZWEJ3Wlc1a1ZXbHVkRGhCY25KaGVWODlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlkR2hwY3k1bGJtTnZaR1Z5WHk1bGJtUW9LVHQwYUdsekxtSnNiMk5yYzE4dWNIVnphQ2hpS1R0MGFHbHpMbUpzYjJOcmMxOHVjSFZ6YUNoaEtUdDBhR2x6TG5SdmRHRnNUR1Z1WjNSb1h5czlZaTVzWlc1bmRHZ3JZUzVzWlc1bmRHaDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG1KbFoybHVSR1ZzYVcxcGRHVmtYejFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtUdGhQWFJvYVhNdVpXNWpiMlJsY2w4dVpXNWtLQ2s3ZEdocGN5NWliRzlqYTNOZkxuQjFjMmdvWVNrN2RHaHBjeTUwYjNSaGJFeGxibWQwYUY4clBXRXViR1Z1WjNSb08yRXVjSFZ6YUNoMGFHbHpMblJ2ZEdGc1RHVnVaM1JvWHlrN2NtVjBkWEp1SUdGOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNWxibVJFWld4cGJXbDBaV1JmUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFdFdWNHOXdLQ2s3WWoxMGFHbHpMblJ2ZEdGc1RHVnVaM1JvWHl0MGFHbHpMbVZ1WTI5a1pYSmZMbXhsYm1kMGFDZ3BMV0k3Wm05eUtHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NRHc5WWlrN01USTNQR0k3S1dFdWNIVnphQ2hpSmpFeU4zd3hNamdwTEdJK1BqNDlOeXgwYUdsekxuUnZkR0ZzVEdWdVozUm9YeXNyTzJFdWNIVnphQ2hpS1R0MGFHbHpMblJ2ZEdGc1RHVnVaM1JvWHlzcmZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWTmxjbWxoYkdsNlpXUk5aWE56WVdkbFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MGFHbHpMbUZ3Y0dWdVpGVnBiblE0UVhKeVlYbGZLR0V1YzNWaVlYSnlZWGtvWWl4aktTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzV0WVhsaVpWZHlhWFJsVTJWeWFXRnNhWHBsWkUxbGMzTmhaMlU5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMjUxYkd3aFBXRW1KbTUxYkd3aFBXSW1KbTUxYkd3aFBXTW1KblJvYVhNdWQzSnBkR1ZUWlhKcFlXeHBlbVZrVFdWemMyRm5aU2hoTEdJc1l5bDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzV5WlhObGREMW1kVzVqZEdsdmJpZ3BlM1JvYVhNdVlteHZZMnR6WHoxYlhUdDBhR2x6TG1WdVkyOWtaWEpmTG1WdVpDZ3BPM1JvYVhNdWRHOTBZV3hNWlc1bmRHaGZQVEE3ZEdocGN5NWliMjlyYldGeWEzTmZQVnRkZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNW5aWFJTWlhOMWJIUkNkV1ptWlhJOVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE5UFhSb2FYTXVZbTl2YTIxaGNtdHpYeTVzWlc1bmRHZ3BPMlp2Y2loMllYSWdZVDF1WlhjZ1ZXbHVkRGhCY25KaGVTaDBhR2x6TG5SdmRHRnNUR1Z1WjNSb1h5dDBhR2x6TG1WdVkyOWtaWEpmTG14bGJtZDBhQ2dwS1N4aVBYUm9hWE11WW14dlkydHpYeXhqUFdJdWJHVnVaM1JvTEdROU1DeGxQVEE3WlR4ak8yVXJLeWw3ZG1GeUlHWTlZbHRsWFR0aExuTmxkQ2htTEdRcE8yUXJQV1l1YkdWdVozUm9mV0k5ZEdocGN5NWxibU52WkdWeVh5NWxibVFvS1R0aExuTmxkQ2hpTEdRcE8yUXJQV0l1YkdWdVozUm9PMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWkQwOVlTNXNaVzVuZEdncE8zUm9hWE11WW14dlkydHpYejFiWVYwN2NtVjBkWEp1SUdGOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNW5aWFJTWlhOMWJIUkNZWE5sTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1WdVkyOWtaVUo1ZEdWQmNuSmhlU2gwYUdsekxtZGxkRkpsYzNWc2RFSjFabVpsY2lncExHRXBmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1aVpXZHBibE4xWWsxbGMzTmhaMlU5Wm5WdVkzUnBiMjRvWVNsN2RHaHBjeTVpYjI5cmJXRnlhM05mTG5CMWMyZ29kR2hwY3k1aVpXZHBia1JsYkdsdGFYUmxaRjhvWVNrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVaVzVrVTNWaVRXVnpjMkZuWlQxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NRHc5ZEdocGN5NWliMjlyYldGeWEzTmZMbXhsYm1kMGFDazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLSFJvYVhNdVltOXZhMjFoY210elh5NXdiM0FvS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh6MW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb01UdzlZU1ltWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3ZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlZWdWMybG5ibVZrVm1GeWFXNTBNeklvT0NwaEsySXBmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVUZ1ZVQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11Um1sbGJHUlVlWEJsTzNOM2FYUmphQ2hoS1h0allYTmxJR1F1UkU5VlFreEZPblJvYVhNdWQzSnBkR1ZFYjNWaWJHVW9ZaXhqS1R0aWNtVmhhenRqWVhObElHUXVSa3hQUVZRNmRHaHBjeTUzY21sMFpVWnNiMkYwS0dJc1l5azdZbkpsWVdzN1kyRnpaU0JrTGtsT1ZEWTBPblJvYVhNdWQzSnBkR1ZKYm5RMk5DaGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNVZTVTVVTmpRNmRHaHBjeTUzY21sMFpWVnBiblEyTkNoaUxHTXBPMkp5WldGck8yTmhjMlVnWkM1SlRsUXpNanAwYUdsekxuZHlhWFJsU1c1ME16SW9ZaXhqS1R0aWNtVmhhenRqWVhObElHUXVSa2xZUlVRMk5EcDBhR2x6TG5keWFYUmxSbWw0WldRMk5DaGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNUdTVmhGUkRNeU9uUm9hWE11ZDNKcGRHVkdhWGhsWkRNeUtHSXNZeWs3WW5KbFlXczdZMkZ6WlNCa0xrSlBUMHc2ZEdocGN5NTNjbWwwWlVKdmIyd29ZaXhqS1R0aWNtVmhhenRqWVhObElHUXVVMVJTU1U1SE9uUm9hWE11ZDNKcGRHVlRkSEpwYm1jb1lpeGpLVHRpY21WaGF6dGpZWE5sSUdRdVIxSlBWVkE2WjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKSGNtOTFjQ0JtYVdWc1pDQjBlWEJsSUc1dmRDQnpkWEJ3YjNKMFpXUWdhVzRnZDNKcGRHVkJibmtvS1Z3aUtUdGNibUp5WldGck8yTmhjMlVnWkM1TlJWTlRRVWRGT21kdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVRXVnpjMkZuWlNCbWFXVnNaQ0IwZVhCbElHNXZkQ0J6ZFhCd2IzSjBaV1FnYVc0Z2QzSnBkR1ZCYm5rb0tWd2lLVHRpY21WaGF6dGpZWE5sSUdRdVFsbFVSVk02ZEdocGN5NTNjbWwwWlVKNWRHVnpLR0lzWXlrN1luSmxZV3M3WTJGelpTQmtMbFZKVGxRek1qcDBhR2x6TG5keWFYUmxWV2x1ZERNeUtHSXNZeWs3WW5KbFlXczdZMkZ6WlNCa0xrVk9WVTA2ZEdocGN5NTNjbWwwWlVWdWRXMG9ZaXhqS1R0aWNtVmhhenRqWVhObElHUXVVMFpKV0VWRU16STZkR2hwY3k1M2NtbDBaVk5tYVhobFpETXlLR0lzWXlrN1luSmxZV3M3WTJGelpTQmtMbE5HU1ZoRlJEWTBPblJvYVhNdWQzSnBkR1ZUWm1sNFpXUTJOQ2hpTEdNcE8ySnlaV0ZyTzJOaGMyVWdaQzVUU1U1VU16STZkR2hwY3k1M2NtbDBaVk5wYm5Rek1paGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNVRTVTVVTmpRNmRHaHBjeTUzY21sMFpWTnBiblEyTkNoaUxHTXBPMkp5WldGck8yTmhjMlVnWkM1R1NFRlRTRFkwT25Sb2FYTXVkM0pwZEdWR2FYaGxaRWhoYzJnMk5DaGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNVdTRUZUU0RZME9uUm9hWE11ZDNKcGRHVldZWEpwYm5SSVlYTm9OalFvWWl4aktUdGljbVZoYXp0a1pXWmhkV3gwT21kdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVNXNTJZV3hwWkNCbWFXVnNaQ0IwZVhCbElHbHVJSGR5YVhSbFFXNTVLQ2xjSWlsOWZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpKZlBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRE15S0dJcEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBNekpmUFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5Rek1paGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUmZQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtIUm9hWE11ZDNKcGRHVkdhV1ZzWkVobFlXUmxjbDhvWVN4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERZMEtHSXBLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5RMk5GODlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWTnBaMjVsWkZaaGNtbHVkRFkwS0dJcEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBNekpmUFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZhYVdkNllXZFdZWEpwYm5Rek1paGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZERZMFh6MW1kVzVqZEdsdmJpaGhMR0lwZTI1MWJHd2hQV0ltSmloMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBOalFvWWlrcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWcHBaM3BoWjFaaGNtbHVkRFkwVTNSeWFXNW5YejFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxXbWxuZW1GblZtRnlhVzUwTmpSVGRISnBibWNvWWlrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUklZWE5vTmpSZlBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUklZWE5vTmpRb1lpa3BmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERNeVBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0dkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lqNDlMV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVNZbVlqeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVwTEhSb2FYTXVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNbDhvWVN4aUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVbHVkRE15VTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHSTljR0Z5YzJWSmJuUW9ZaXd4TUNrc1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGlQajB0YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeEppWmlQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVNrc2RHaHBjeTUzY21sMFpWTnBaMjVsWkZaaGNtbHVkRE15WHloaExHSXBLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZKYm5RMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTI1MWJHd2hQV0ltSmlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHSStQUzFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpNbUptSThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYell6S1N4MGFHbHpMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBOalJmS0dFc1lpa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkpiblEyTkZOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaGlQV3B6Y0dJdVlYSnBkR2d1U1c1ME5qUXVabkp2YlZOMGNtbHVaeWhpS1N4MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hpTG14dkxHSXVhR2twS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVmFXNTBNekk5Wm5WdVkzUnBiMjRvWVN4aUtYdHVkV3hzSVQxaUppWW9aMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d3UEQxaUppWmlQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlrc2RHaHBjeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpKZktHRXNZaWtwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZWYVc1ME16SlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvWWoxd1lYSnpaVWx1ZENoaUxERXdLU3huYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXSW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeUtTeDBhR2x6TG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1sOG9ZU3hpS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZWcGJuUTJORDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE4UFdJbUptSThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYelkwS1N4MGFHbHpMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblEyTkY4b1lTeGlLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVldsdWREWTBVM1J5YVc1blBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0dJOWFuTndZaTVoY21sMGFDNVZTVzUwTmpRdVpuSnZiVk4wY21sdVp5aGlLU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLU3gwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVTNCc2FYUldZWEpwYm5RMk5DaGlMbXh2TEdJdWFHa3BLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVMmx1ZERNeVBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0dkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lqNDlMV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVNZbVlqeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVwTEhSb2FYTXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUXpNbDhvWVN4aUtTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVMmx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0dkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lqNDlMV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTgyTXlZbVlqeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZOak1wTEhSb2FYTXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUTJORjhvWVN4aUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWTnBiblJJWVhOb05qUTlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlaMGFHbHpMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBTR0Z6YURZMFh5aGhMR0lwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUYVc1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVowYUdsekxuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME5qUlRkSEpwYm1kZktHRXNZaWw5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsUm1sNFpXUXpNajFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLREE4UFdJbUptSThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek15S1N4MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVF6TWlrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWVnBiblF6TWloaUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVWnBlR1ZrTmpROVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BEMWlKaVppUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4Mk5Da3NkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1pKV0VWRU5qUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZWYVc1ME5qUW9ZaWtwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVacGVHVmtOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb1lqMXFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DNW1jbTl0VTNSeWFXNW5LR0lwTEhSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1R1NWaEZSRFkwS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUzQnNhWFJHYVhobFpEWTBLR0l1Ykc4c1lpNW9hU2twZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUWm1sNFpXUXpNajFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0krUFMxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk16RW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeEtTeDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1pa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVWx1ZERNeUtHSXBLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUWm1sNFpXUTJORDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0krUFMxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk5qTW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZektTeDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5Da3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVWx1ZERZMEtHSXBLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVMlpwZUdWa05qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvWWoxcWMzQmlMbUZ5YVhSb0xrbHVkRFkwTG1aeWIyMVRkSEpwYm1jb1lpa3NkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1pKV0VWRU5qUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUY0d4cGRFWnBlR1ZrTmpRb1lpNXNieXhpTG1ocEtTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxSbXh2WVhROVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVNeklwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWR2JHOWhkQ2hpS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVSdmRXSnNaVDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5Da3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVVJ2ZFdKc1pTaGlLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsUW05dmJEMW1kVzVqZEdsdmJpaGhMR0lwZTI1MWJHd2hQV0ltSmlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtGd2lZbTl2YkdWaGJsd2lQVDA5ZEhsd1pXOW1JR0o4ZkZ3aWJuVnRZbVZ5WENJOVBUMTBlWEJsYjJZZ1lpa3NkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVUp2YjJ3b1lpa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkZiblZ0UFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWWo0OUxXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHpNU1ltWWp4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk16RXBMSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5Rek1paGlLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHRTlkR2hwY3k1aVpXZHBia1JsYkdsdGFYUmxaRjhvWVNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWTjBjbWx1WnloaUtTeDBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2twZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZDZVhSbGN6MW1kVzVqZEdsdmJpaGhMR0lwZTI1MWJHd2hQV0ltSmloaVBXcHpjR0l1ZFhScGJITXVZbmwwWlZOdmRYSmpaVlJ2VldsdWREaEJjbkpoZVNoaUtTeDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLU3gwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNaWhpTG14bGJtZDBhQ2tzZEdocGN5NWhjSEJsYm1SVmFXNTBPRUZ5Y21GNVh5aGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVTFsYzNOaFoyVTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyNTFiR3doUFdJbUppaGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcExHTW9ZaXgwYUdsektTeDBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2twZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlUxbGMzTmhaMlZUWlhROVpuVnVZM1JwYjI0b1lTeGlMR01wZTI1MWJHd2hQV0ltSmloMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLREVzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVUxUkJVbFJmUjFKUFZWQXBMSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b01peHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5Rek1paGhLU3hoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktETXBMR01vWWl4MGFHbHpLU3gwYUdsekxtVnVaRVJsYkdsdGFYUmxaRjhvWVNrc2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWd4TEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrVk9SRjlIVWs5VlVDa3BmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWR5YjNWd1BXWjFibU4wYVc5dUtHRXNZaXhqS1h0dWRXeHNJVDFpSmlZb2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsTlVRVkpVWDBkU1QxVlFLU3hqS0dJc2RHaHBjeWtzZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtWT1JGOUhVazlWVUNrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWR2FYaGxaRWhoYzJnMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTI1MWJHd2hQV0ltSmlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtEZzlQV0l1YkdWdVozUm9LU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUTJOQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVacGVHVmtTR0Z6YURZMEtHSXBLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZXWVhKcGJuUklZWE5vTmpROVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnNFBUMWlMbXhsYm1kMGFDa3NkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVlpoY21sdWRFaGhjMmcyTkNoaUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWTndiR2wwUm1sNFpXUTJORDFtZFc1amRHbHZiaWhoTEdJc1l5bDdkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1pKV0VWRU5qUXBPM1JvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUY0d4cGRFWnBlR1ZrTmpRb1lpeGpLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZUY0d4cGRGWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hpTEdNcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGNHeHBkRnBwWjNwaFoxWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0MllYSWdaRDEwYUdsekxtVnVZMjlrWlhKZk8ycHpjR0l1ZFhScGJITXVkRzlhYVdkNllXYzJOQ2hpTEdNc1puVnVZM1JwYjI0b1lTeGlLWHRrTG5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNoaFBqNCtNQ3hpUGo0K01DbDlLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZTWlhCbFlYUmxaRWx1ZERNeVBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBNekpmS0dFc1lsdGpYU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkpsY0dWaGRHVmtTVzUwTXpKVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZKYm5Rek1sTjBjbWx1WnloaExHSmJZMTBwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZTWlhCbFlYUmxaRWx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBOalJmS0dFc1lsdGpYU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JUY0d4cGRFWnBlR1ZrTmpROVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHVTlNRHRsUEdJdWJHVnVaM1JvTzJVckt5bDBhR2x6TG5keWFYUmxVM0JzYVhSR2FYaGxaRFkwS0dFc1l5aGlXMlZkS1N4a0tHSmJaVjBwS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JUY0d4cGRGWmhjbWx1ZERZMFBXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUybG1LRzUxYkd3aFBXSXBabTl5S0haaGNpQmxQVEE3WlR4aUxteGxibWQwYUR0bEt5c3BkR2hwY3k1M2NtbDBaVk53YkdsMFZtRnlhVzUwTmpRb1lTeGpLR0piWlYwcExHUW9ZbHRsWFNrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkZOd2JHbDBXbWxuZW1GblZtRnlhVzUwTmpROVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHVTlNRHRsUEdJdWJHVnVaM1JvTzJVckt5bDBhR2x6TG5keWFYUmxVM0JzYVhSYWFXZDZZV2RXWVhKcGJuUTJOQ2hoTEdNb1lsdGxYU2tzWkNoaVcyVmRLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JKYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NTNjbWwwWlVsdWREWTBVM1J5YVc1bktHRXNZbHRqWFNsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrVldsdWRETXlQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1sOG9ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVmFXNTBNekpUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11ZDNKcGRHVlZhVzUwTXpKVGRISnBibWNvWVN4aVcyTmRLWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZTWlhCbFlYUmxaRlZwYm5RMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJcFptOXlLSFpoY2lCalBUQTdZenhpTG14bGJtZDBhRHRqS3lzcGRHaHBjeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTmpSZktHRXNZbHRqWFNsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrVldsdWREWTBVM1J5YVc1blBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFZXbHVkRFkwVTNSeWFXNW5LR0VzWWx0alhTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWSmxjR1ZoZEdWa1UybHVkRE15UFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME16SmZLR0VzWWx0alhTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUlRhVzUwTmpROVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUTJORjhvWVN4aVcyTmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUlRhVzUwTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZhYVdkNllXZFdZWEpwYm5RMk5GTjBjbWx1WjE4b1lTeGlXMk5kS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JUYVc1MFNHRnphRFkwUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsV21sbmVtRm5WbUZ5YVc1MFNHRnphRFkwWHloaExHSmJZMTBwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrUm1sNFpXUXpNajFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSXBabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BkR2hwY3k1M2NtbDBaVVpwZUdWa016SW9ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSR2FYaGxaRFkwUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsUm1sNFpXUTJOQ2hoTEdKYlkxMHBmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlNaWEJsWVhSbFpFWnBlR1ZrTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZHYVhobFpEWTBVM1J5YVc1bktHRXNZbHRqWFNsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVFptbDRaV1F6TWoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NTNjbWwwWlZObWFYaGxaRE15S0dFc1lsdGpYU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkpsY0dWaGRHVmtVMlpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11ZDNKcGRHVlRabWw0WldRMk5DaGhMR0piWTEwcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkZObWFYaGxaRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxVMlpwZUdWa05qUlRkSEpwYm1jb1lTeGlXMk5kS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkVac2IyRjBQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxSbXh2WVhRb1lTeGlXMk5kS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JFYjNWaWJHVTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11ZDNKcGRHVkViM1ZpYkdVb1lTeGlXMk5kS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JDYjI5c1BXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFFtOXZiQ2hoTEdKYlkxMHBmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlNaWEJsWVhSbFpFVnVkVzA5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZGYm5WdEtHRXNZbHRqWFNsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZUZEhKcGJtY29ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSQ2VYUmxjejFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSXBabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BkR2hwY3k1M2NtbDBaVUo1ZEdWektHRXNZbHRqWFNsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aVDFtZFc1amRHbHZiaWhoTEdJc1l5bDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR1E5TUR0a1BHSXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlkR2hwY3k1aVpXZHBia1JsYkdsdGFYUmxaRjhvWVNrN1l5aGlXMlJkTEhSb2FYTXBPM1JvYVhNdVpXNWtSR1ZzYVcxcGRHVmtYeWhsS1gxOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSSGNtOTFjRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR1E5TUR0a1BHSXViR1Z1WjNSb08yUXJLeWwwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VTFSQlVsUmZSMUpQVlZBcExHTW9ZbHRrWFN4MGFHbHpLU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UlU1RVgwZFNUMVZRS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JHYVhobFpFaGhjMmcyTkQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NTNjbWwwWlVacGVHVmtTR0Z6YURZMEtHRXNZbHRqWFNsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSV1lYSnBiblJJWVhOb05qUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11ZDNKcGRHVldZWEpwYm5SSVlYTm9OalFvWVN4aVcyTmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1NXNTBNekk5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlKaVppTG14bGJtZDBhQ2w3WVQxMGFHbHpMbUpsWjJsdVJHVnNhVzFwZEdWa1h5aGhLVHRtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVTJsbmJtVmtWbUZ5YVc1ME16SW9ZbHRqWFNrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkpiblF6TWxOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LWHRoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5Rek1paHdZWEp6WlVsdWRDaGlXMk5kTERFd0tTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtTVzUwTmpROVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpSmlaaUxteGxibWQwYUNsN1lUMTBhR2x6TG1KbFoybHVSR1ZzYVcxcGRHVmtYeWhoS1R0bWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBOalFvWWx0alhTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JUY0d4cGRFWnBlR1ZrTmpROVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN2FXWW9iblZzYkNFOVlpbDdZVDEwYUdsekxtSmxaMmx1UkdWc2FXMXBkR1ZrWHloaEtUdG1iM0lvZG1GeUlHVTlNRHRsUEdJdWJHVnVaM1JvTzJVckt5bDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxVM0JzYVhSR2FYaGxaRFkwS0dNb1lsdGxYU2tzWkNoaVcyVmRLU2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrVTNCc2FYUldZWEpwYm5RMk5EMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdHBaaWh1ZFd4c0lUMWlLWHRoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBPMlp2Y2loMllYSWdaVDB3TzJVOFlpNXNaVzVuZEdnN1pTc3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUY0d4cGRGWmhjbWx1ZERZMEtHTW9ZbHRsWFNrc1pDaGlXMlZkS1NrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUlRjR3hwZEZwcFozcGhaMVpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlMmxtS0c1MWJHd2hQV0lwZTJFOWRHaHBjeTVpWldkcGJrUmxiR2x0YVhSbFpGOG9ZU2s3Wm05eUtIWmhjaUJsUFhSb2FYTXVaVzVqYjJSbGNsOHNaajB3TzJZOFlpNXNaVzVuZEdnN1ppc3JLV3B6Y0dJdWRYUnBiSE11ZEc5YWFXZDZZV2MyTkNoaktHSmJabDBwTEdRb1lsdG1YU2tzWm5WdVkzUnBiMjRvWVN4aUtYdGxMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hoUGo0K01DeGlQajQrTUNsOUtUdDBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2w5ZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkpiblEyTkZOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LWHRoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWHQyWVhJZ1pEMXFjM0JpTG1GeWFYUm9Ma2x1ZERZMExtWnliMjFUZEhKcGJtY29ZbHRqWFNrN2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWTndiR2wwVm1GeWFXNTBOalFvWkM1c2J5eGtMbWhwS1gxMGFHbHpMbVZ1WkVSbGJHbHRhWFJsWkY4b1lTbDlmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkJoWTJ0bFpGVnBiblF6TWoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRE15S0dKYlkxMHBPM1JvYVhNdVpXNWtSR1ZzYVcxcGRHVmtYeWhoS1gxOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRlZwYm5Rek1sTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRE15S0hCaGNuTmxTVzUwS0dKYlkxMHNNVEFwS1R0MGFHbHpMbVZ1WkVSbGJHbHRhWFJsWkY4b1lTbDlmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkJoWTJ0bFpGVnBiblEyTkQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRFkwS0dKYlkxMHBPM1JvYVhNdVpXNWtSR1ZzYVcxcGRHVmtYeWhoS1gxOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRlZwYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1h0MllYSWdaRDFxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQzVtY205dFUzUnlhVzVuS0dKYlkxMHBPM1JvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZUY0d4cGRGWmhjbWx1ZERZMEtHUXViRzhzWkM1b2FTbDlkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JUYVc1ME16STlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUppWmlMbXhsYm1kMGFDbDdZVDEwYUdsekxtSmxaMmx1UkdWc2FXMXBkR1ZrWHloaEtUdG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxXbWxuZW1GblZtRnlhVzUwTXpJb1lsdGpYU2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrVTJsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpWW1ZaTVzWlc1bmRHZ3BlMkU5ZEdocGN5NWlaV2RwYmtSbGJHbHRhWFJsWkY4b1lTazdabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZERZMEtHSmJZMTBwTzNSb2FYTXVaVzVrUkdWc2FXMXBkR1ZrWHloaEtYMTlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1UybHVkRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpWW1ZaTVzWlc1bmRHZ3BlMkU5ZEdocGN5NWlaV2RwYmtSbGJHbHRhWFJsWkY4b1lTazdabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZEVoaGMyZzJOQ2hxYzNCaUxuVjBhV3h6TG1SbFkybHRZV3hUZEhKcGJtZFViMGhoYzJnMk5DaGlXMk5kS1NrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1UybHVkRWhoYzJnMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tYdGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblJJWVhOb05qUW9ZbHRqWFNrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3WEc1cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkdhWGhsWkRNeVBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlZbVlpNXNaVzVuZEdncFptOXlLSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVFUlV4SlRVbFVSVVFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRE15S0RRcVlpNXNaVzVuZEdncExHRTlNRHRoUEdJdWJHVnVaM1JvTzJFckt5bDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWV2x1ZERNeUtHSmJZVjBwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkdhWGhsWkRZMFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlZbVlpNXNaVzVuZEdncFptOXlLSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVFUlV4SlRVbFVSVVFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRE15S0RncVlpNXNaVzVuZEdncExHRTlNRHRoUEdJdWJHVnVaM1JvTzJFckt5bDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWV2x1ZERZMEtHSmJZVjBwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRVpwZUdWa05qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpSmlaaUxteGxibWQwYUNsbWIzSW9kR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1JGVEVsTlNWUkZSQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlZWdWMybG5ibVZrVm1GeWFXNTBNeklvT0NwaUxteGxibWQwYUNrc1lUMHdPMkU4WWk1c1pXNW5kR2c3WVNzcktYdDJZWElnWXoxcWMzQmlMbUZ5YVhSb0xsVkpiblEyTkM1bWNtOXRVM1J5YVc1bktHSmJZVjBwTzNSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGNHeHBkRVpwZUdWa05qUW9ZeTVzYnl4akxtaHBLWDE5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtVMlpwZUdWa016STlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUppWmlMbXhsYm1kMGFDbG1iM0lvZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpJb05DcGlMbXhsYm1kMGFDa3NZVDB3TzJFOFlpNXNaVzVuZEdnN1lTc3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZKYm5Rek1paGlXMkZkS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtVMlpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUppWmlMbXhsYm1kMGFDbG1iM0lvZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpJb09DcGlMbXhsYm1kMGFDa3NZVDB3TzJFOFlpNXNaVzVuZEdnN1lTc3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZKYm5RMk5DaGlXMkZkS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JUWm1sNFpXUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tXWnZjaWgwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblF6TWlnNEttSXViR1Z1WjNSb0tTeGhQVEE3WVR4aUxteGxibWQwYUR0aEt5c3BkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVWx1ZERZMFUzUnlhVzVuS0dKYllWMHBmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlFZV05yWldSR2JHOWhkRDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LV1p2Y2loMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1pZzBLbUl1YkdWdVozUm9LU3hoUFRBN1lUeGlMbXhsYm1kMGFEdGhLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVac2IyRjBLR0piWVYwcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWQmhZMnRsWkVSdmRXSnNaVDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LV1p2Y2loMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1pZzRLbUl1YkdWdVozUm9LU3hoUFRBN1lUeGlMbXhsYm1kMGFEdGhLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVSdmRXSnNaU2hpVzJGZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrUW05dmJEMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tXWnZjaWgwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblF6TWloaUxteGxibWQwYUNrc1lUMHdPMkU4WWk1c1pXNW5kR2c3WVNzcktYUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVkNiMjlzS0dKYllWMHBmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkJoWTJ0bFpFVnVkVzA5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlKaVppTG14bGJtZDBhQ2w3WVQxMGFHbHpMbUpsWjJsdVJHVnNhVzFwZEdWa1h5aGhLVHRtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsUlc1MWJTaGlXMk5kS1R0MGFHbHpMbVZ1WkVSbGJHbHRhWFJsWkY4b1lTbDlmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlFZV05yWldSR2FYaGxaRWhoYzJnMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tXWnZjaWgwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblF6TWlnNEttSXViR1Z1WjNSb0tTeGhQVEE3WVR4aUxteGxibWQwYUR0aEt5c3BkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVVpwZUdWa1NHRnphRFkwS0dKYllWMHBmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkJoWTJ0bFpGWmhjbWx1ZEVoaGMyZzJORDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LWHRoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZXWVhKcGJuUklZWE5vTmpRb1lsdGpYU2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdhbk53WWk1TllYQTlablZ1WTNScGIyNG9ZU3hpS1h0MGFHbHpMbUZ5Y2w4OVlUdDBhR2x6TG5aaGJIVmxRM1J2Y2w4OVlqdDBhR2x6TG0xaGNGODllMzA3ZEdocGN5NWhjbkpEYkdWaGJqMGhNRHN3UEhSb2FYTXVZWEp5WHk1c1pXNW5kR2dtSm5Sb2FYTXViRzloWkVaeWIyMUJjbkpoZVY4b0tYMDdhbk53WWk1TllYQXVjSEp2ZEc5MGVYQmxMbXh2WVdSR2NtOXRRWEp5WVhsZlBXWjFibU4wYVc5dUtDbDdabTl5S0haaGNpQmhQVEE3WVR4MGFHbHpMbUZ5Y2w4dWJHVnVaM1JvTzJFckt5bDdkbUZ5SUdJOWRHaHBjeTVoY25KZlcyRmRMR005WWxzd1hUdDBhR2x6TG0xaGNGOWJZeTUwYjFOMGNtbHVaeWdwWFQxdVpYY2dhbk53WWk1TllYQXVSVzUwY25sZktHTXNZbHN4WFNsOWRHaHBjeTVoY25KRGJHVmhiajBoTUgwN1hHNXFjM0JpTGsxaGNDNXdjbTkwYjNSNWNHVXVkRzlCY25KaGVUMW1kVzVqZEdsdmJpZ3BlMmxtS0hSb2FYTXVZWEp5UTJ4bFlXNHBlMmxtS0hSb2FYTXVkbUZzZFdWRGRHOXlYeWw3ZG1GeUlHRTlkR2hwY3k1dFlYQmZMR0k3Wm05eUtHSWdhVzRnWVNscFppaFBZbXBsWTNRdWNISnZkRzkwZVhCbExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29ZU3hpS1NsN2RtRnlJR005WVZ0aVhTNTJZV3gxWlZkeVlYQndaWEk3WXlZbVl5NTBiMEZ5Y21GNUtDbDlmWDFsYkhObGUzUm9hWE11WVhKeVh5NXNaVzVuZEdnOU1EdGhQWFJvYVhNdWMzUnlhVzVuUzJWNWMxOG9LVHRoTG5OdmNuUW9LVHRtYjNJb1lqMHdPMkk4WVM1c1pXNW5kR2c3WWlzcktYdDJZWElnWkQxMGFHbHpMbTFoY0Y5YllWdGlYVjA3S0dNOVpDNTJZV3gxWlZkeVlYQndaWElwSmlaakxuUnZRWEp5WVhrb0tUdDBhR2x6TG1GeWNsOHVjSFZ6YUNoYlpDNXJaWGtzWkM1MllXeDFaVjBwZlhSb2FYTXVZWEp5UTJ4bFlXNDlJVEI5Y21WMGRYSnVJSFJvYVhNdVlYSnlYMzA3WEc1cWMzQmlMazFoY0M1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNROVpuVnVZM1JwYjI0b1lTeGlLWHRtYjNJb2RtRnlJR005ZEdocGN5NTBiMEZ5Y21GNUtDa3NaRDFiWFN4bFBUQTdaVHhqTG14bGJtZDBhRHRsS3lzcGUzWmhjaUJtUFhSb2FYTXViV0Z3WDF0alcyVmRXekJkTG5SdlUzUnlhVzVuS0NsZE8zUm9hWE11ZDNKaGNFVnVkSEo1WHlobUtUdDJZWElnWnoxbUxuWmhiSFZsVjNKaGNIQmxjanRuUHlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHSXBMR1F1Y0hWemFDaGJaaTVyWlhrc1lpaGhMR2NwWFNrcE9tUXVjSFZ6YUNoYlppNXJaWGtzWmk1MllXeDFaVjBwZlhKbGRIVnliaUJrZlR0cWMzQmlMazFoY0M1bWNtOXRUMkpxWldOMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0aVBXNWxkeUJxYzNCaUxrMWhjQ2hiWFN4aUtUdG1iM0lvZG1GeUlHUTlNRHRrUEdFdWJHVnVaM1JvTzJRckt5bDdkbUZ5SUdVOVlWdGtYVnN3WFN4bVBXTW9ZVnRrWFZzeFhTazdZaTV6WlhRb1pTeG1LWDF5WlhSMWNtNGdZbjA3YW5Od1lpNU5ZWEF1UVhKeVlYbEpkR1Z5WVhSdmNrbDBaWEpoWW14bFh6MW1kVzVqZEdsdmJpaGhLWHQwYUdsekxtbGtlRjg5TUR0MGFHbHpMbUZ5Y2w4OVlYMDdYRzVxYzNCaUxrMWhjQzVCY25KaGVVbDBaWEpoZEc5eVNYUmxjbUZpYkdWZkxuQnliM1J2ZEhsd1pTNXVaWGgwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVhV1I0WHp4MGFHbHpMbUZ5Y2w4dWJHVnVaM1JvUDN0a2IyNWxPaUV4TEhaaGJIVmxPblJvYVhNdVlYSnlYMXQwYUdsekxtbGtlRjhySzExOU9udGtiMjVsT2lFd0xIWmhiSFZsT25admFXUWdNSDE5TzF3aWRXNWtaV1pwYm1Wa1hDSWhQWFI1Y0dWdlppQlRlVzFpYjJ3bUppaHFjM0JpTGsxaGNDNUJjbkpoZVVsMFpYSmhkRzl5U1hSbGNtRmliR1ZmTG5CeWIzUnZkSGx3WlZ0VGVXMWliMnd1YVhSbGNtRjBiM0pkUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTjlLVHRxYzNCaUxrMWhjQzV3Y205MGIzUjVjR1V1WjJWMFRHVnVaM1JvUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjM1J5YVc1blMyVjVjMThvS1M1c1pXNW5kR2g5TzJwemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1amJHVmhjajFtZFc1amRHbHZiaWdwZTNSb2FYTXViV0Z3WHoxN2ZUdDBhR2x6TG1GeWNrTnNaV0Z1UFNFeGZUdGNibXB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzVrWld3OVpuVnVZM1JwYjI0b1lTbDdZVDFoTG5SdlUzUnlhVzVuS0NrN2RtRnlJR0k5ZEdocGN5NXRZWEJmTG1oaGMwOTNibEJ5YjNCbGNuUjVLR0VwTzJSbGJHVjBaU0IwYUdsekxtMWhjRjliWVYwN2RHaHBjeTVoY25KRGJHVmhiajBoTVR0eVpYUjFjbTRnWW4wN2FuTndZaTVOWVhBdWNISnZkRzkwZVhCbExtZGxkRVZ1ZEhKNVRHbHpkRDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQVnRkTEdJOWRHaHBjeTV6ZEhKcGJtZExaWGx6WHlncE8ySXVjMjl5ZENncE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYdDJZWElnWkQxMGFHbHpMbTFoY0Y5YllsdGpYVjA3WVM1d2RYTm9LRnRrTG10bGVTeGtMblpoYkhWbFhTbDljbVYwZFhKdUlHRjlPMnB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzVsYm5SeWFXVnpQV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlXMTBzWWoxMGFHbHpMbk4wY21sdVowdGxlWE5mS0NrN1lpNXpiM0owS0NrN1ptOXlLSFpoY2lCalBUQTdZenhpTG14bGJtZDBhRHRqS3lzcGUzWmhjaUJrUFhSb2FYTXViV0Z3WDF0aVcyTmRYVHRoTG5CMWMyZ29XMlF1YTJWNUxIUm9hWE11ZDNKaGNFVnVkSEo1WHloa0tWMHBmWEpsZEhWeWJpQnVaWGNnYW5Od1lpNU5ZWEF1UVhKeVlYbEpkR1Z5WVhSdmNrbDBaWEpoWW14bFh5aGhLWDA3WEc1cWMzQmlMazFoY0M1d2NtOTBiM1I1Y0dVdWEyVjVjejFtZFc1amRHbHZiaWdwZTNaaGNpQmhQVnRkTEdJOWRHaHBjeTV6ZEhKcGJtZExaWGx6WHlncE8ySXVjMjl5ZENncE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktXRXVjSFZ6YUNoMGFHbHpMbTFoY0Y5YllsdGpYVjB1YTJWNUtUdHlaWFIxY200Z2JtVjNJR3B6Y0dJdVRXRndMa0Z5Y21GNVNYUmxjbUYwYjNKSmRHVnlZV0pzWlY4b1lTbDlPMnB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzUyWVd4MVpYTTlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMWJYU3hpUFhSb2FYTXVjM1J5YVc1blMyVjVjMThvS1R0aUxuTnZjblFvS1R0bWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsaExuQjFjMmdvZEdocGN5NTNjbUZ3Ulc1MGNubGZLSFJvYVhNdWJXRndYMXRpVzJOZFhTa3BPM0psZEhWeWJpQnVaWGNnYW5Od1lpNU5ZWEF1UVhKeVlYbEpkR1Z5WVhSdmNrbDBaWEpoWW14bFh5aGhLWDA3WEc1cWMzQmlMazFoY0M1d2NtOTBiM1I1Y0dVdVptOXlSV0ZqYUQxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBYUm9hWE11YzNSeWFXNW5TMlY1YzE4b0tUdGpMbk52Y25Rb0tUdG1iM0lvZG1GeUlHUTlNRHRrUEdNdWJHVnVaM1JvTzJRckt5bDdkbUZ5SUdVOWRHaHBjeTV0WVhCZlcyTmJaRjFkTzJFdVkyRnNiQ2hpTEhSb2FYTXVkM0poY0VWdWRISjVYeWhsS1N4bExtdGxlU3gwYUdsektYMTlPMnB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzV6WlhROVpuVnVZM1JwYjI0b1lTeGlLWHQyWVhJZ1l6MXVaWGNnYW5Od1lpNU5ZWEF1Ulc1MGNubGZLR0VwTzNSb2FYTXVkbUZzZFdWRGRHOXlYejhvWXk1MllXeDFaVmR5WVhCd1pYSTlZaXhqTG5aaGJIVmxQV0l1ZEc5QmNuSmhlU2dwS1RwakxuWmhiSFZsUFdJN2RHaHBjeTV0WVhCZlcyRXVkRzlUZEhKcGJtY29LVjA5WXp0MGFHbHpMbUZ5Y2tOc1pXRnVQU0V4TzNKbGRIVnliaUIwYUdsemZUdHFjM0JpTGsxaGNDNXdjbTkwYjNSNWNHVXVkM0poY0VWdWRISjVYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnZEdocGN5NTJZV3gxWlVOMGIzSmZQeWhoTG5aaGJIVmxWM0poY0hCbGNueDhLR0V1ZG1Gc2RXVlhjbUZ3Y0dWeVBXNWxkeUIwYUdsekxuWmhiSFZsUTNSdmNsOG9ZUzUyWVd4MVpTa3BMR0V1ZG1Gc2RXVlhjbUZ3Y0dWeUtUcGhMblpoYkhWbGZUdGNibXB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzVuWlhROVpuVnVZM1JwYjI0b1lTbDdhV1lvWVQxMGFHbHpMbTFoY0Y5YllTNTBiMU4wY21sdVp5Z3BYU2x5WlhSMWNtNGdkR2hwY3k1M2NtRndSVzUwY25sZktHRXBmVHRxYzNCaUxrMWhjQzV3Y205MGIzUjVjR1V1YUdGelBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhMblJ2VTNSeWFXNW5LQ2xwYmlCMGFHbHpMbTFoY0Y5OU8ycHpjR0l1VFdGd0xuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rOVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bEtYdDJZWElnWmoxMGFHbHpMbk4wY21sdVowdGxlWE5mS0NrN1ppNXpiM0owS0NrN1ptOXlLSFpoY2lCblBUQTdaenhtTG14bGJtZDBhRHRuS3lzcGUzWmhjaUJvUFhSb2FYTXViV0Z3WDF0bVcyZGRYVHRpTG1KbFoybHVVM1ZpVFdWemMyRm5aU2hoS1R0akxtTmhiR3dvWWl3eExHZ3VhMlY1S1R0MGFHbHpMblpoYkhWbFEzUnZjbDgvWkM1allXeHNLR0lzTWl4MGFHbHpMbmR5WVhCRmJuUnllVjhvYUNrc1pTazZaQzVqWVd4c0tHSXNNaXhvTG5aaGJIVmxLVHRpTG1WdVpGTjFZazFsYzNOaFoyVW9LWDE5TzF4dWFuTndZaTVOWVhBdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rOVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bExHWXNaeWw3Wm05eUtEdGlMbTVsZUhSR2FXVnNaQ2dwSmlZaFlpNXBjMFZ1WkVkeWIzVndLQ2s3S1h0MllYSWdhRDFpTG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3TVQwOWFEOW1QV011WTJGc2JDaGlLVG95UFQxb0ppWW9ZUzUyWVd4MVpVTjBiM0pmUHlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHVXBMR2Q4ZkNoblBXNWxkeUJoTG5aaGJIVmxRM1J2Y2w4cExHUXVZMkZzYkNoaUxHY3NaU2twT21jOVpDNWpZV3hzS0dJcEtYMW5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFp2YVdRZ01DRTlaaWs3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMmIybGtJREFoUFdjcE8yRXVjMlYwS0dZc1p5bDlPMnB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzV6ZEhKcGJtZExaWGx6WHoxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFhSb2FYTXViV0Z3WHl4aVBWdGRMR003Wm05eUtHTWdhVzRnWVNsUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b1lTeGpLU1ltWWk1d2RYTm9LR01wTzNKbGRIVnliaUJpZlR0Y2JtcHpjR0l1VFdGd0xrVnVkSEo1WHoxbWRXNWpkR2x2YmloaExHSXBlM1JvYVhNdWEyVjVQV0U3ZEdocGN5NTJZV3gxWlQxaU8zUm9hWE11ZG1Gc2RXVlhjbUZ3Y0dWeVBYWnZhV1FnTUgwN2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTg5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsS1h0MGFHbHpMbVpwWld4a1NXNWtaWGc5WVR0MGFHbHpMbVpwWld4a1RtRnRaVDFpTzNSb2FYTXVZM1J2Y2oxak8zUm9hWE11ZEc5UFltcGxZM1JHYmoxa08zUm9hWE11YVhOU1pYQmxZWFJsWkQxbGZUdHFjM0JpTGtWNGRHVnVjMmx2YmtacFpXeGtRbWx1WVhKNVNXNW1iejFtZFc1amRHbHZiaWhoTEdJc1l5eGtMR1VzWmlsN2RHaHBjeTVtYVdWc1pFbHVabTg5WVR0MGFHbHpMbUpwYm1GeWVWSmxZV1JsY2tadVBXSTdkR2hwY3k1aWFXNWhjbmxYY21sMFpYSkdiajFqTzNSb2FYTXVZbWx1WVhKNVRXVnpjMkZuWlZObGNtbGhiR2w2WlVadVBXUTdkR2hwY3k1aWFXNWhjbmxOWlhOellXZGxSR1Z6WlhKcFlXeHBlbVZHYmoxbE8zUm9hWE11YVhOUVlXTnJaV1E5Wm4wN2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTh1Y0hKdmRHOTBlWEJsTG1selRXVnpjMkZuWlZSNWNHVTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGhJWFJvYVhNdVkzUnZjbjA3YW5Od1lpNU5aWE56WVdkbFBXWjFibU4wYVc5dUtDbDdmVHRxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVVBTRXdPMnB6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5R1VrOU5YMDlDU2tWRFZEMGhaMjl2Wnk1RVNWTkJURXhQVjE5VVJWTlVYMDlPVEZsZlEwOUVSVHRjYm1wemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlUVkZKSlRrYzlJVEE3YW5Od1lpNU5aWE56WVdkbExrRlRVMVZOUlY5TVQwTkJURjlCVWxKQldWTTlJVEU3YW5Od1lpNU5aWE56WVdkbExsTkZVa2xCVEVsYVJWOUZUVkJVV1Y5VVVrRkpURWxPUjE5R1NVVk1SRk05SVRBN2FuTndZaTVOWlhOellXZGxMbE5WVUZCUFVsUlRYMVZKVGxRNFFWSlNRVmxmUFZ3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlGVnBiblE0UVhKeVlYazdhbk53WWk1TlpYTnpZV2RsTG5CeWIzUnZkSGx3WlM1blpYUktjMUJpVFdWemMyRm5aVWxrUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXViV1Z6YzJGblpVbGtYMzA3YW5Od1lpNU5aWE56WVdkbExtZGxkRWx1WkdWNFh6MW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJpSzJFdVlYSnlZWGxKYm1SbGVFOW1abk5sZEY5OU8ycHpjR0l1VFdWemMyRm5aUzVvYVdSa1pXNUZVelpRY205d1pYSjBlVjg5Wm5WdVkzUnBiMjRvS1h0OU8ycHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRTUxYldKbGNsODlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWWkxaExtRnljbUY1U1c1a1pYaFBabVp6WlhSZmZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbFBXWjFibU4wYVc5dUtHRXNZaXhqTEdRc1pTeG1LWHRoTG5keVlYQndaWEp6WHoxdWRXeHNPMko4ZkNoaVBXTS9XMk5kT2x0ZEtUdGhMbTFsYzNOaFoyVkpaRjg5WXo5VGRISnBibWNvWXlrNmRtOXBaQ0F3TzJFdVlYSnlZWGxKYm1SbGVFOW1abk5sZEY4OU1EMDlQV00vTFRFNk1EdGhMbUZ5Y21GNVBXSTdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUlFhWFp2ZEVGdVpFVjRkR1Z1YzJsdmJrOWlhbVZqZEY4b1lTeGtLVHRoTG1OdmJuWmxjblJsWkZCeWFXMXBkR2wyWlVacFpXeGtjMTg5ZTMwN2FuTndZaTVOWlhOellXZGxMbE5GVWtsQlRFbGFSVjlGVFZCVVdWOVVVa0ZKVEVsT1IxOUdTVVZNUkZOOGZDaGhMbkpsY0dWaGRHVmtSbWxsYkdSelBXVXBPMmxtS0dVcFptOXlLR0k5TUR0aVBHVXViR1Z1WjNSb08ySXJLeWxqUFdWYllsMHNZenhoTG5CcGRtOTBYejhvWXoxcWMzQmlMazFsYzNOaFoyVXVaMlYwU1c1a1pYaGZLR0VzWXlrc1lTNWhjbkpoZVZ0alhUMWhMbUZ5Y21GNVcyTmRmSHhxYzNCaUxrMWxjM05oWjJVdVJVMVFWRmxmVEVsVFZGOVRSVTVVU1U1RlRGOHBPaWhxYzNCaUxrMWxjM05oWjJVdWJXRjVZbVZKYm1sMFJXMXdkSGxGZUhSbGJuTnBiMjVQWW1wbFkzUmZLR0VwTEdFdVpYaDBaVzV6YVc5dVQySnFaV04wWDF0alhUMWNibUV1WlhoMFpXNXphVzl1VDJKcVpXTjBYMXRqWFh4OGFuTndZaTVOWlhOellXZGxMa1ZOVUZSWlgweEpVMVJmVTBWT1ZFbE9SVXhmS1R0cFppaG1KaVptTG14bGJtZDBhQ2xtYjNJb1lqMHdPMkk4Wmk1c1pXNW5kR2c3WWlzcktXcHpjR0l1VFdWemMyRm5aUzVqYjIxd2RYUmxUMjVsYjJaRFlYTmxLR0VzWmx0aVhTbDlPMnB6Y0dJdVRXVnpjMkZuWlM1RlRWQlVXVjlNU1ZOVVgxTkZUbFJKVGtWTVh6MW5iMjluTGtSRlFsVkhKaVpQWW1wbFkzUXVabkpsWlhwbFAwOWlhbVZqZEM1bWNtVmxlbVVvVzEwcE9sdGRPMnB6Y0dJdVRXVnpjMkZuWlM1cGMwRnljbUY1WHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMa0ZUVTFWTlJWOU1UME5CVEY5QlVsSkJXVk0vWVNCcGJuTjBZVzVqWlc5bUlFRnljbUY1T2tGeWNtRjVMbWx6UVhKeVlYa29ZU2w5TzJwemNHSXVUV1Z6YzJGblpTNXBjMFY0ZEdWdWMybHZiazlpYW1WamRGODlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJRzUxYkd3aFBUMWhKaVpjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnWVNZbUlXcHpjR0l1VFdWemMyRm5aUzVwYzBGeWNtRjVYeWhoS1NZbUlTaHFjM0JpTGsxbGMzTmhaMlV1VTFWUVVFOVNWRk5mVlVsT1ZEaEJVbEpCV1Y4bUptRWdhVzV6ZEdGdVkyVnZaaUJWYVc1ME9FRnljbUY1S1gwN1hHNXFjM0JpTGsxbGMzTmhaMlV1YVc1cGRGQnBkbTkwUVc1a1JYaDBaVzV6YVc5dVQySnFaV04wWHoxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBXRXVZWEp5WVhrdWJHVnVaM1JvTEdROUxURTdhV1lvWXlZbUtHUTlZeTB4TEdNOVlTNWhjbkpoZVZ0a1hTeHFjM0JpTGsxbGMzTmhaMlV1YVhORmVIUmxibk5wYjI1UFltcGxZM1JmS0dNcEtTbDdZUzV3YVhadmRGODlhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVG5WdFltVnlYeWhoTEdRcE8yRXVaWGgwWlc1emFXOXVUMkpxWldOMFh6MWpPM0psZEhWeWJuMHRNVHhpUHloaExuQnBkbTkwWHoxTllYUm9MbTFoZUNoaUxHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRTUxYldKbGNsOG9ZU3hrS3pFcEtTeGhMbVY0ZEdWdWMybHZiazlpYW1WamRGODliblZzYkNrNllTNXdhWFp2ZEY4OVRuVnRZbVZ5TGsxQldGOVdRVXhWUlgwN2FuTndZaTVOWlhOellXZGxMbTFoZVdKbFNXNXBkRVZ0Y0hSNVJYaDBaVzV6YVc5dVQySnFaV04wWHoxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxcWMzQmlMazFsYzNOaFoyVXVaMlYwU1c1a1pYaGZLR0VzWVM1d2FYWnZkRjhwTzJFdVlYSnlZWGxiWWwxOGZDaGhMbVY0ZEdWdWMybHZiazlpYW1WamRGODlZUzVoY25KaGVWdGlYVDE3ZlNsOU8xeHVhbk53WWk1TlpYTnpZV2RsTG5SdlQySnFaV04wVEdsemREMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1ptOXlLSFpoY2lCa1BWdGRMR1U5TUR0bFBHRXViR1Z1WjNSb08yVXJLeWxrVzJWZFBXSXVZMkZzYkNoaFcyVmRMR01zWVZ0bFhTazdjbVYwZFhKdUlHUjlPMnB6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEVWNGRHVnVjMmx2YmoxbWRXNWpkR2x2YmloaExHSXNZeXhrTEdVcGUyWnZjaWgyWVhJZ1ppQnBiaUJqS1h0MllYSWdaejFqVzJaZExHZzlaQzVqWVd4c0tHRXNaeWs3YVdZb2JuVnNiQ0U5YUNsN1ptOXlLSFpoY2lCcklHbHVJR2N1Wm1sbGJHUk9ZVzFsS1dsbUtHY3VabWxsYkdST1lXMWxMbWhoYzA5M2JsQnliM0JsY25SNUtHc3BLV0p5WldGck8ySmJhMTA5Wnk1MGIwOWlhbVZqZEVadVAyY3VhWE5TWlhCbFlYUmxaRDlxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLR2dzWnk1MGIwOWlhbVZqZEVadUxHVXBPbWN1ZEc5UFltcGxZM1JHYmlobExHZ3BPbWg5ZlgwN1hHNXFjM0JpTGsxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVSWGgwWlc1emFXOXVjejFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRtYjNJb2RtRnlJR1VnYVc0Z1l5bDdkbUZ5SUdZOVkxdGxYU3huUFdZdVptbGxiR1JKYm1adk8ybG1LQ0ZtTG1KcGJtRnllVmR5YVhSbGNrWnVLWFJvY205M0lFVnljbTl5S0Z3aVRXVnpjMkZuWlNCbGVIUmxibk5wYjI0Z2NISmxjMlZ1ZENCMGFHRjBJSGRoY3lCblpXNWxjbUYwWldRZ2QybDBhRzkxZENCaWFXNWhjbmtnYzJWeWFXRnNhWHBoZEdsdmJpQnpkWEJ3YjNKMFhDSXBPM1poY2lCb1BXUXVZMkZzYkNoaExHY3BPMmxtS0c1MWJHd2hQV2dwYVdZb1p5NXBjMDFsYzNOaFoyVlVlWEJsS0NrcGFXWW9aaTVpYVc1aGNubE5aWE56WVdkbFUyVnlhV0ZzYVhwbFJtNHBaaTVpYVc1aGNubFhjbWwwWlhKR2JpNWpZV3hzS0dJc1p5NW1hV1ZzWkVsdVpHVjRMR2dzWmk1aWFXNWhjbmxOWlhOellXZGxVMlZ5YVdGc2FYcGxSbTRwTzJWc2MyVWdkR2h5YjNjZ1JYSnliM0lvWENKTlpYTnpZV2RsSUdWNGRHVnVjMmx2YmlCd2NtVnpaVzUwSUdodmJHUnBibWNnYzNWaWJXVnpjMkZuWlNCM2FYUm9iM1YwSUdKcGJtRnllU0J6ZFhCd2IzSjBJR1Z1WVdKc1pXUXNJR0Z1WkNCdFpYTnpZV2RsSUdseklHSmxhVzVuSUhObGNtbGhiR2w2WldRZ2RHOGdZbWx1WVhKNUlHWnZjbTFoZEZ3aUtUdGNibVZzYzJVZ1ppNWlhVzVoY25sWGNtbDBaWEpHYmk1allXeHNLR0lzWnk1bWFXVnNaRWx1WkdWNExHZ3BmWDA3YW5Od1lpNU5aWE56WVdkbExuSmxZV1JDYVc1aGNubEZlSFJsYm5OcGIyNDlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxLWHQyWVhJZ1pqMWpXMkl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVjA3YVdZb1ppbDdZejFtTG1acFpXeGtTVzVtYnp0cFppZ2haaTVpYVc1aGNubFNaV0ZrWlhKR2JpbDBhSEp2ZHlCRmNuSnZjaWhjSWtSbGMyVnlhV0ZzYVhwcGJtY2daWGgwWlc1emFXOXVJSGRvYjNObElHZGxibVZ5WVhSbFpDQmpiMlJsSUdSdlpYTWdibTkwSUhOMWNIQnZjblFnWW1sdVlYSjVJR1p2Y20xaGRGd2lLVHRwWmloakxtbHpUV1Z6YzJGblpWUjVjR1VvS1NsN2RtRnlJR2M5Ym1WM0lHTXVZM1J2Y2p0bUxtSnBibUZ5ZVZKbFlXUmxja1p1TG1OaGJHd29ZaXhuTEdZdVltbHVZWEo1VFdWemMyRm5aVVJsYzJWeWFXRnNhWHBsUm00cGZXVnNjMlVnWnoxbUxtSnBibUZ5ZVZKbFlXUmxja1p1TG1OaGJHd29ZaWs3WXk1cGMxSmxjR1ZoZEdWa0ppWWhaaTVwYzFCaFkydGxaRDhvWWoxa0xtTmhiR3dvWVN4aktTay9ZaTV3ZFhOb0tHY3BPbVV1WTJGc2JDaGhMR01zVzJkZEtUcGxMbU5oYkd3b1lTeGpMR2NwZldWc2MyVWdZaTV6YTJsd1JtbGxiR1FvS1gwN1hHNXFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWhpUEdFdWNHbDJiM1JmS1h0aVBXcHpjR0l1VFdWemMyRm5aUzVuWlhSSmJtUmxlRjhvWVN4aUtUdDJZWElnWXoxaExtRnljbUY1VzJKZE8zSmxkSFZ5YmlCalBUMDlhbk53WWk1TlpYTnpZV2RsTGtWTlVGUlpYMHhKVTFSZlUwVk9WRWxPUlV4ZlAyRXVZWEp5WVhsYllsMDlXMTA2WTMxcFppaGhMbVY0ZEdWdWMybHZiazlpYW1WamRGOHBjbVYwZFhKdUlHTTlZUzVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkTEdNOVBUMXFjM0JpTGsxbGMzTmhaMlV1UlUxUVZGbGZURWxUVkY5VFJVNVVTVTVGVEY4L1lTNWxlSFJsYm5OcGIyNVBZbXBsWTNSZlcySmRQVnRkT21OOU8ycHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkVacFpXeGtQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaGhMR0lwZlR0cWMzQmlMazFsYzNOaFoyVXVaMlYwVDNCMGFXOXVZV3hHYkc5aGRHbHVaMUJ2YVc1MFJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUtYdGhQV3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoaExHSXBPM0psZEhWeWJpQnVkV3hzUFQxaFAyRTZLMkY5TzF4dWFuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lwZTJFOWFuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLR0VzWWlrN2NtVjBkWEp1SUc1MWJHdzlQV0UvWVRvaElXRjlPMnB6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpFWnNiMkYwYVc1blVHOXBiblJHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQV3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpFWnBaV3hrS0dFc1lpazdZUzVqYjI1MlpYSjBaV1JRY21sdGFYUnBkbVZHYVdWc1pITmZmSHdvWVM1amIyNTJaWEowWldSUWNtbHRhWFJwZG1WR2FXVnNaSE5mUFh0OUtUdHBaaWdoWVM1amIyNTJaWEowWldSUWNtbHRhWFJwZG1WR2FXVnNaSE5mVzJKZEtYdG1iM0lvZG1GeUlHUTlNRHRrUEdNdWJHVnVaM1JvTzJRckt5bGpXMlJkUFN0alcyUmRPMkV1WTI5dWRtVnlkR1ZrVUhKcGJXbDBhWFpsUm1sbGJHUnpYMXRpWFQwaE1IMXlaWFIxY200Z1kzMDdYRzVxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkNiMjlzWldGdVJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUtYdDJZWElnWXoxcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JHYVdWc1pDaGhMR0lwTzJFdVkyOXVkbVZ5ZEdWa1VISnBiV2wwYVhabFJtbGxiR1J6WDN4OEtHRXVZMjl1ZG1WeWRHVmtVSEpwYldsMGFYWmxSbWxsYkdSelh6MTdmU2s3YVdZb0lXRXVZMjl1ZG1WeWRHVmtVSEpwYldsMGFYWmxSbWxsYkdSelgxdGlYU2w3Wm05eUtIWmhjaUJrUFRBN1pEeGpMbXhsYm1kMGFEdGtLeXNwWTF0a1hUMGhJV05iWkYwN1lTNWpiMjUyWlhKMFpXUlFjbWx0YVhScGRtVkdhV1ZzWkhOZlcySmRQU0V3ZlhKbGRIVnliaUJqZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzVpZVhSbGMwRnpRalkwUFdaMWJtTjBhVzl1S0dFcGUybG1LRzUxYkd3OVBXRjhmRndpYzNSeWFXNW5YQ0k5UFQxMGVYQmxiMllnWVNseVpYUjFjbTRnWVR0cFppaHFjM0JpTGsxbGMzTmhaMlV1VTFWUVVFOVNWRk5mVlVsT1ZEaEJVbEpCV1Y4bUptRWdhVzV6ZEdGdVkyVnZaaUJWYVc1ME9FRnljbUY1S1hKbGRIVnliaUJuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVsYm1OdlpHVkNlWFJsUVhKeVlYa29ZU2s3WjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKRFlXNXViM1FnWTI5bGNtTmxJSFJ2SUdJMk5DQnpkSEpwYm1jNklGd2lLMmR2YjJjdWRIbHdaVTltS0dFcEtUdHlaWFIxY200Z2JuVnNiSDA3YW5Od1lpNU5aWE56WVdkbExtSjVkR1Z6UVhOVk9EMW1kVzVqZEdsdmJpaGhLWHRwWmlodWRXeHNQVDFoZkh4aElHbHVjM1JoYm1ObGIyWWdWV2x1ZERoQmNuSmhlU2x5WlhSMWNtNGdZVHRwWmloY0luTjBjbWx1WjF3aVBUMDlkSGx3Wlc5bUlHRXBjbVYwZFhKdUlHZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtUmxZMjlrWlZOMGNtbHVaMVJ2VldsdWREaEJjbkpoZVNoaEtUdG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJa05oYm01dmRDQmpiMlZ5WTJVZ2RHOGdWV2x1ZERoQmNuSmhlVG9nWENJcloyOXZaeTUwZVhCbFQyWW9ZU2twTzNKbGRIVnliaUJ1ZFd4c2ZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1aWVYUmxjMHhwYzNSQmMwSTJORDFtZFc1amRHbHZiaWhoS1h0cWMzQmlMazFsYzNOaFoyVXVZWE56WlhKMFEyOXVjMmx6ZEdWdWRGUjVjR1Z6WHloaEtUdHlaWFIxY200Z1lTNXNaVzVuZEdnbUpsd2ljM1J5YVc1blhDSWhQVDEwZVhCbGIyWWdZVnN3WFQ5bmIyOW5MbUZ5Y21GNUxtMWhjQ2hoTEdwemNHSXVUV1Z6YzJGblpTNWllWFJsYzBGelFqWTBLVHBoZlR0cWMzQmlMazFsYzNOaFoyVXVZbmwwWlhOTWFYTjBRWE5WT0QxbWRXNWpkR2x2YmloaEtYdHFjM0JpTGsxbGMzTmhaMlV1WVhOelpYSjBRMjl1YzJsemRHVnVkRlI1Y0dWelh5aGhLVHR5WlhSMWNtNGhZUzVzWlc1bmRHaDhmR0ZiTUYxcGJuTjBZVzVqWlc5bUlGVnBiblE0UVhKeVlYay9ZVHBuYjI5bkxtRnljbUY1TG0xaGNDaGhMR3B6Y0dJdVRXVnpjMkZuWlM1aWVYUmxjMEZ6VlRncGZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1aGMzTmxjblJEYjI1emFYTjBaVzUwVkhsd1pYTmZQV1oxYm1OMGFXOXVLR0VwZTJsbUtHZHZiMmN1UkVWQ1ZVY21KbUVtSmpFOFlTNXNaVzVuZEdncGUzWmhjaUJpUFdkdmIyY3VkSGx3WlU5bUtHRmJNRjBwTzJkdmIyY3VZWEp5WVhrdVptOXlSV0ZqYUNoaExHWjFibU4wYVc5dUtHRXBlMmR2YjJjdWRIbHdaVTltS0dFcElUMWlKaVpuYjI5bkxtRnpjMlZ5ZEhNdVptRnBiQ2hjSWtsdVkyOXVjMmx6ZEdWdWRDQjBlWEJsSUdsdUlFcFRVRUlnY21Wd1pXRjBaV1FnWm1sbGJHUWdZWEp5WVhrdUlFZHZkQ0JjSWl0bmIyOW5MblI1Y0dWUFppaGhLU3RjSWlCbGVIQmxZM1JsWkNCY0lpdGlLWDBwZlgwN2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkU5YW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHRXNZaWs3Y21WMGRYSnVJRzUxYkd3OVBXRS9ZenBoZlR0cWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyRTlhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaQ2hoTEdJcE8zSmxkSFZ5YmlCdWRXeHNQVDFoUDJNNllYMDdYRzVxYzNCaUxrMWxjM05oWjJVdVoyVjBSbXh2WVhScGJtZFFiMmx1ZEVacFpXeGtWMmwwYUVSbFptRjFiSFE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkU5YW5Od1lpNU5aWE56WVdkbExtZGxkRTl3ZEdsdmJtRnNSbXh2WVhScGJtZFFiMmx1ZEVacFpXeGtLR0VzWWlrN2NtVjBkWEp1SUc1MWJHdzlQV0UvWXpwaGZUdHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JRY205MGJ6TTlhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRN2FuTndZaTVOWlhOellXZGxMbWRsZEUxaGNFWnBaV3hrUFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJFdWQzSmhjSEJsY25OZmZId29ZUzUzY21Gd2NHVnljMTg5ZTMwcE8ybG1LR0lnYVc0Z1lTNTNjbUZ3Y0dWeWMxOHBjbVYwZFhKdUlHRXVkM0poY0hCbGNuTmZXMkpkTzNaaGNpQmxQV3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoaExHSXBPMmxtS0NGbEtYdHBaaWhqS1hKbGRIVnlianRsUFZ0ZE8ycHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2hoTEdJc1pTbDljbVYwZFhKdUlHRXVkM0poY0hCbGNuTmZXMkpkUFc1bGR5QnFjM0JpTGsxaGNDaGxMR1FwZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRWx1YzNSaGJtTmxiMllvWVN4cWMzQmlMazFsYzNOaFoyVXBPMkk4WVM1d2FYWnZkRjgvWVM1aGNuSmhlVnRxYzNCaUxrMWxjM05oWjJVdVoyVjBTVzVrWlhoZktHRXNZaWxkUFdNNktHcHpjR0l1VFdWemMyRm5aUzV0WVhsaVpVbHVhWFJGYlhCMGVVVjRkR1Z1YzJsdmJrOWlhbVZqZEY4b1lTa3NZUzVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkUFdNcE8zSmxkSFZ5YmlCaGZUdHFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6U1c1MFJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM0psZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1JKWjI1dmNtbHVaMFJsWm1GMWJIUmZLR0VzWWl4akxEQXBmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elJteHZZWFJHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pFbG5ibTl5YVc1blJHVm1ZWFZzZEY4b1lTeGlMR01zTUNsOU8xeHVhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTBKdmIyeGxZVzVHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pFbG5ibTl5YVc1blJHVm1ZWFZzZEY4b1lTeGlMR01zSVRFcGZUdHFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6VTNSeWFXNW5SbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlMR01wZTNKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdSSloyNXZjbWx1WjBSbFptRjFiSFJmS0dFc1lpeGpMRndpWENJcGZUdHFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6UW5sMFpYTkdhV1ZzWkQxbWRXNWpkR2x2YmloaExHSXNZeWw3Y21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkVsbmJtOXlhVzVuUkdWbVlYVnNkRjhvWVN4aUxHTXNYQ0pjSWlsOU8ycHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5GYm5WdFJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM0psZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1JKWjI1dmNtbHVaMFJsWm1GMWJIUmZLR0VzWWl4akxEQXBmVHRjYm1wemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TlRkSEpwYm1kSmJuUkdhV1ZzWkQxbWRXNWpkR2x2YmloaExHSXNZeWw3Y21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkVsbmJtOXlhVzVuUkdWbVlYVnNkRjhvWVN4aUxHTXNYQ0l3WENJcGZUdHFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1JKWjI1dmNtbHVaMFJsWm1GMWJIUmZQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJKYm5OMFlXNWpaVzltS0dFc2FuTndZaTVOWlhOellXZGxLVHRqSVQwOVpEOXFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvWVN4aUxHTXBPbUk4WVM1d2FYWnZkRjgvWVM1aGNuSmhlVnRxYzNCaUxrMWxjM05oWjJVdVoyVjBTVzVrWlhoZktHRXNZaWxkUFc1MWJHdzZLR3B6Y0dJdVRXVnpjMkZuWlM1dFlYbGlaVWx1YVhSRmJYQjBlVVY0ZEdWdWMybHZiazlpYW1WamRGOG9ZU2tzWkdWc1pYUmxJR0V1WlhoMFpXNXphVzl1VDJKcVpXTjBYMXRpWFNrN2NtVjBkWEp1SUdGOU8xeHVhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUkdhV1ZzWkQxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFNXNXpkR0Z1WTJWdlppaGhMR3B6Y0dJdVRXVnpjMkZuWlNrN1lqMXFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2hoTEdJcE8zWnZhV1FnTUNFOVpEOWlMbk53YkdsalpTaGtMREFzWXlrNllpNXdkWE5vS0dNcE8zSmxkSFZ5YmlCaGZUdHFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBTVzV6ZEdGdVkyVnZaaWhoTEdwemNHSXVUV1Z6YzJGblpTazdLR005YW5Od1lpNU5aWE56WVdkbExtTnZiWEIxZEdWUGJtVnZaa05oYzJVb1lTeGpLU2ttSm1NaFBUMWlKaVoyYjJsa0lEQWhQVDFrSmlZb1lTNTNjbUZ3Y0dWeWMxOG1KbU1nYVc0Z1lTNTNjbUZ3Y0dWeWMxOG1KaWhoTG5keVlYQndaWEp6WDF0alhUMTJiMmxrSURBcExHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2hoTEdNc2RtOXBaQ0F3S1NrN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaGhMR0lzWkNsOU8xeHVhbk53WWk1TlpYTnpZV2RsTG1OdmJYQjFkR1ZQYm1WdlprTmhjMlU5Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTXNaQ3hsUFRBN1pUeGlMbXhsYm1kMGFEdGxLeXNwZTNaaGNpQm1QV0piWlYwc1p6MXFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvWVN4bUtUdHVkV3hzSVQxbkppWW9ZejFtTEdROVp5eHFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvWVN4bUxIWnZhV1FnTUNrcGZYSmxkSFZ5YmlCalB5aHFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvWVN4akxHUXBMR01wT2pCOU8ycHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUTlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdZUzUzY21Gd2NHVnljMTk4ZkNoaExuZHlZWEJ3WlhKelh6MTdmU2s3YVdZb0lXRXVkM0poY0hCbGNuTmZXMk5kS1h0MllYSWdaVDFxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb1lTeGpLVHRwWmloa2ZIeGxLV0V1ZDNKaGNIQmxjbk5mVzJOZFBXNWxkeUJpS0dVcGZYSmxkSFZ5YmlCaExuZHlZWEJ3WlhKelgxdGpYWDA3WEc1cWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJwemNHSXVUV1Z6YzJGblpTNTNjbUZ3VW1Wd1pXRjBaV1JHYVdWc1pGOG9ZU3hpTEdNcE8ySTlZUzUzY21Gd2NHVnljMTliWTEwN1lqMDlhbk53WWk1TlpYTnpZV2RsTGtWTlVGUlpYMHhKVTFSZlUwVk9WRWxPUlV4ZkppWW9ZajFoTG5keVlYQndaWEp6WDF0alhUMWJYU2s3Y21WMGRYSnVJR0o5TzJwemNHSXVUV1Z6YzJGblpTNTNjbUZ3VW1Wd1pXRjBaV1JHYVdWc1pGODlablZ1WTNScGIyNG9ZU3hpTEdNcGUyRXVkM0poY0hCbGNuTmZmSHdvWVM1M2NtRndjR1Z5YzE4OWUzMHBPMmxtS0NGaExuZHlZWEJ3WlhKelgxdGpYU2w3Wm05eUtIWmhjaUJrUFdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRVpwWld4a0tHRXNZeWtzWlQxYlhTeG1QVEE3Wmp4a0xteGxibWQwYUR0bUt5c3BaVnRtWFQxdVpYY2dZaWhrVzJaZEtUdGhMbmR5WVhCd1pYSnpYMXRqWFQxbGZYMDdYRzVxYzNCaUxrMWxjM05oWjJVdWMyVjBWM0poY0hCbGNrWnBaV3hrUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowU1c1emRHRnVZMlZ2WmloaExHcHpjR0l1VFdWemMyRm5aU2s3WVM1M2NtRndjR1Z5YzE5OGZDaGhMbmR5WVhCd1pYSnpYejE3ZlNrN2RtRnlJR1E5WXo5akxuUnZRWEp5WVhrb0tUcGpPMkV1ZDNKaGNIQmxjbk5mVzJKZFBXTTdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2hoTEdJc1pDbDlPMnB6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmxkeVlYQndaWEpHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBTVzV6ZEdGdVkyVnZaaWhoTEdwemNHSXVUV1Z6YzJGblpTazdZUzUzY21Gd2NHVnljMTk4ZkNoaExuZHlZWEJ3WlhKelh6MTdmU2s3ZG1GeUlHVTlaRDlrTG5SdlFYSnlZWGtvS1Rwa08yRXVkM0poY0hCbGNuTmZXMkpkUFdRN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0dFc1lpeGpMR1VwZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRFbHVjM1JoYm1ObGIyWW9ZU3hxYzNCaUxrMWxjM05oWjJVcE8yRXVkM0poY0hCbGNuTmZmSHdvWVM1M2NtRndjR1Z5YzE4OWUzMHBPMk05WTN4OFcxMDdabTl5S0haaGNpQmtQVnRkTEdVOU1EdGxQR011YkdWdVozUm9PMlVyS3lsa1cyVmRQV05iWlYwdWRHOUJjbkpoZVNncE8yRXVkM0poY0hCbGNuTmZXMkpkUFdNN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaGhMR0lzWkNsOU8xeHVhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsS1h0cWMzQmlMazFsYzNOaFoyVXVkM0poY0ZKbGNHVmhkR1ZrUm1sbGJHUmZLR0VzWkN4aUtUdDJZWElnWmoxaExuZHlZWEJ3WlhKelgxdGlYVHRtZkh3b1pqMWhMbmR5WVhCd1pYSnpYMXRpWFQxYlhTazdZejFqUDJNNmJtVjNJR1E3WVQxcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JHYVdWc1pDaGhMR0lwTzNadmFXUWdNQ0U5WlQ4b1ppNXpjR3hwWTJVb1pTd3dMR01wTEdFdWMzQnNhV05sS0dVc01DeGpMblJ2UVhKeVlYa29LU2twT2lobUxuQjFjMmdvWXlrc1lTNXdkWE5vS0dNdWRHOUJjbkpoZVNncEtTazdjbVYwZFhKdUlHTjlPMnB6Y0dJdVRXVnpjMkZuWlM1MGIwMWhjRDFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRtYjNJb2RtRnlJR1U5ZTMwc1pqMHdPMlk4WVM1c1pXNW5kR2c3WmlzcktXVmJZaTVqWVd4c0tHRmJabDBwWFQxalAyTXVZMkZzYkNoaFcyWmRMR1FzWVZ0bVhTazZZVnRtWFR0eVpYUjFjbTRnWlgwN1hHNXFjM0JpTGsxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG5ONWJtTk5ZWEJHYVdWc1pITmZQV1oxYm1OMGFXOXVLQ2w3YVdZb2RHaHBjeTUzY21Gd2NHVnljMThwWm05eUtIWmhjaUJoSUdsdUlIUm9hWE11ZDNKaGNIQmxjbk5mS1h0MllYSWdZajEwYUdsekxuZHlZWEJ3WlhKelgxdGhYVHRwWmloQmNuSmhlUzVwYzBGeWNtRjVLR0lwS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1dKYlkxMG1KbUpiWTEwdWRHOUJjbkpoZVNncE8yVnNjMlVnWWlZbVlpNTBiMEZ5Y21GNUtDbDlmVHRxYzNCaUxrMWxjM05oWjJVdWNISnZkRzkwZVhCbExuUnZRWEp5WVhrOVpuVnVZM1JwYjI0b0tYdDBhR2x6TG5ONWJtTk5ZWEJHYVdWc1pITmZLQ2s3Y21WMGRYSnVJSFJvYVhNdVlYSnlZWGw5TzJwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlUVkZKSlRrY21KaWhxYzNCaUxrMWxjM05oWjJVdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdkR2hwY3k1emVXNWpUV0Z3Um1sbGJHUnpYeWdwTzNKbGRIVnliaUIwYUdsekxtRnljbUY1TG5SdlUzUnlhVzVuS0NsOUtUdGNibXB6Y0dJdVRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVQV1oxYm1OMGFXOXVLR0VwZTJsbUtIUm9hWE11WlhoMFpXNXphVzl1VDJKcVpXTjBYeWw3ZEdocGN5NTNjbUZ3Y0dWeWMxOThmQ2gwYUdsekxuZHlZWEJ3WlhKelh6MTdmU2s3ZG1GeUlHSTlZUzVtYVdWc1pFbHVaR1Y0TzJsbUtHRXVhWE5TWlhCbFlYUmxaQ2w3YVdZb1lTNXBjMDFsYzNOaFoyVlVlWEJsS0NrcGNtVjBkWEp1SUhSb2FYTXVkM0poY0hCbGNuTmZXMkpkZkh3b2RHaHBjeTUzY21Gd2NHVnljMTliWWwwOVoyOXZaeTVoY25KaGVTNXRZWEFvZEdocGN5NWxlSFJsYm5OcGIyNVBZbXBsWTNSZlcySmRmSHhiWFN4bWRXNWpkR2x2YmloaUtYdHlaWFIxY200Z2JtVjNJR0V1WTNSdmNpaGlLWDBwS1N4MGFHbHpMbmR5WVhCd1pYSnpYMXRpWFgxbGJITmxJR2xtS0dFdWFYTk5aWE56WVdkbFZIbHdaU2dwS1hKbGRIVnliaUYwYUdsekxuZHlZWEJ3WlhKelgxdGlYU1ltZEdocGN5NWxlSFJsYm5OcGIyNVBZbXBsWTNSZlcySmRKaVlvZEdocGN5NTNjbUZ3Y0dWeWMxOWJZbDA5Ym1WM0lHRXVZM1J2Y2loMGFHbHpMbVY0ZEdWdWMybHZiazlpYW1WamRGOWJZbDBwS1N4MGFHbHpMbmR5WVhCd1pYSnpYMXRpWFR0eVpYUjFjbTRnZEdocGN5NWxlSFJsYm5OcGIyNVBZbXBsWTNSZlcySmRmWDA3WEc1cWMzQmlMazFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMbk5sZEVWNGRHVnVjMmx2YmoxbWRXNWpkR2x2YmloaExHSXBlM1JvYVhNdWQzSmhjSEJsY25OZmZId29kR2hwY3k1M2NtRndjR1Z5YzE4OWUzMHBPMnB6Y0dJdVRXVnpjMkZuWlM1dFlYbGlaVWx1YVhSRmJYQjBlVVY0ZEdWdWMybHZiazlpYW1WamRGOG9kR2hwY3lrN2RtRnlJR005WVM1bWFXVnNaRWx1WkdWNE8yRXVhWE5TWlhCbFlYUmxaRDhvWWoxaWZIeGJYU3hoTG1selRXVnpjMkZuWlZSNWNHVW9LVDhvZEdocGN5NTNjbUZ3Y0dWeWMxOWJZMTA5WWl4MGFHbHpMbVY0ZEdWdWMybHZiazlpYW1WamRGOWJZMTA5WjI5dlp5NWhjbkpoZVM1dFlYQW9ZaXhtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1MGIwRnljbUY1S0NsOUtTazZkR2hwY3k1bGVIUmxibk5wYjI1UFltcGxZM1JmVzJOZFBXSXBPbUV1YVhOTlpYTnpZV2RsVkhsd1pTZ3BQeWgwYUdsekxuZHlZWEJ3WlhKelgxdGpYVDFpTEhSb2FYTXVaWGgwWlc1emFXOXVUMkpxWldOMFgxdGpYVDFpUDJJdWRHOUJjbkpoZVNncE9tSXBPblJvYVhNdVpYaDBaVzV6YVc5dVQySnFaV04wWDF0alhUMWlPM0psZEhWeWJpQjBhR2x6ZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzVrYVdabVpYSmxibU5sUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvSVNoaElHbHVjM1JoYm1ObGIyWWdZaTVqYjI1emRISjFZM1J2Y2lrcGRHaHliM2NnUlhKeWIzSW9YQ0pOWlhOellXZGxjeUJvWVhabElHUnBabVpsY21WdWRDQjBlWEJsY3k1Y0lpazdkbUZ5SUdNOVlTNTBiMEZ5Y21GNUtDazdZajFpTG5SdlFYSnlZWGtvS1R0MllYSWdaRDFiWFN4bFBUQXNaajFqTG14bGJtZDBhRDVpTG14bGJtZDBhRDlqTG14bGJtZDBhRHBpTG14bGJtZDBhRHRoTG1kbGRFcHpVR0pOWlhOellXZGxTV1FvS1NZbUtHUmJNRjA5WVM1blpYUktjMUJpVFdWemMyRm5aVWxrS0Nrc1pUMHhLVHRtYjNJb08yVThaanRsS3lzcGFuTndZaTVOWlhOellXZGxMbU52YlhCaGNtVkdhV1ZzWkhNb1kxdGxYU3hpVzJWZEtYeDhLR1JiWlYwOVlsdGxYU2s3Y21WMGRYSnVJRzVsZHlCaExtTnZibk4wY25WamRHOXlLR1FwZlR0cWMzQmlMazFsYzNOaFoyVXVaWEYxWVd4elBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0U5UFdKOGZDRW9JV0Y4ZkNGaUtTWW1ZU0JwYm5OMFlXNWpaVzltSUdJdVkyOXVjM1J5ZFdOMGIzSW1KbXB6Y0dJdVRXVnpjMkZuWlM1amIyMXdZWEpsUm1sbGJHUnpLR0V1ZEc5QmNuSmhlU2dwTEdJdWRHOUJjbkpoZVNncEtYMDdYRzVxYzNCaUxrMWxjM05oWjJVdVkyOXRjR0Z5WlVWNGRHVnVjMmx2Ym5NOVpuVnVZM1JwYjI0b1lTeGlLWHRoUFdGOGZIdDlPMkk5WW54OGUzMDdkbUZ5SUdNOWUzMHNaRHRtYjNJb1pDQnBiaUJoS1dOYlpGMDlNRHRtYjNJb1pDQnBiaUJpS1dOYlpGMDlNRHRtYjNJb1pDQnBiaUJqS1dsbUtDRnFjM0JpTGsxbGMzTmhaMlV1WTI5dGNHRnlaVVpwWld4a2N5aGhXMlJkTEdKYlpGMHBLWEpsZEhWeWJpRXhPM0psZEhWeWJpRXdmVHRjYm1wemNHSXVUV1Z6YzJGblpTNWpiMjF3WVhKbFJtbGxiR1J6UFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvWVQwOVlpbHlaWFIxY200aE1EdHBaaWdoWjI5dlp5NXBjMDlpYW1WamRDaGhLWHg4SVdkdmIyY3VhWE5QWW1wbFkzUW9ZaWtwY21WMGRYSnVYQ0p1ZFcxaVpYSmNJajA5UFhSNWNHVnZaaUJoSmlacGMwNWhUaWhoS1h4OFhDSnVkVzFpWlhKY0lqMDlQWFI1Y0dWdlppQmlKaVpwYzA1aFRpaGlLVDlUZEhKcGJtY29ZU2s5UFZOMGNtbHVaeWhpS1RvaE1UdHBaaWhoTG1OdmJuTjBjblZqZEc5eUlUMWlMbU52Ym5OMGNuVmpkRzl5S1hKbGRIVnliaUV4TzJsbUtHcHpjR0l1VFdWemMyRm5aUzVUVlZCUVQxSlVVMTlWU1U1VU9FRlNVa0ZaWHlZbVlTNWpiMjV6ZEhKMVkzUnZjajA5UFZWcGJuUTRRWEp5WVhrcGUybG1LR0V1YkdWdVozUm9JVDFpTG14bGJtZDBhQ2x5WlhSMWNtNGhNVHRtYjNJb2RtRnlJR005TUR0alBHRXViR1Z1WjNSb08yTXJLeWxwWmloaFcyTmRJVDFpVzJOZEtYSmxkSFZ5YmlFeE8zSmxkSFZ5YmlFd2ZXbG1LR0V1WTI5dWMzUnlkV04wYjNJOVBUMUJjbkpoZVNsN2RtRnlJR1E5ZG05cFpDQXdMR1U5ZG05cFpDQXdMR1k5VFdGMGFDNXRZWGdvWVM1c1pXNW5kR2dzWWk1c1pXNW5kR2dwTzJadmNpaGpQVEE3WXp4bU8yTXJLeWw3ZG1GeUlHYzlZVnRqWFN4b1BXSmJZMTA3WnlZbVhHNW5MbU52Ym5OMGNuVmpkRzl5UFQxUFltcGxZM1FtSmlobmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIWnZhV1FnTUQwOVBXUXBMR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWXowOVBXRXViR1Z1WjNSb0xURXBMR1E5Wnl4blBYWnZhV1FnTUNrN2FDWW1hQzVqYjI1emRISjFZM1J2Y2owOVQySnFaV04wSmlZb1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDJiMmxrSURBOVBUMWxLU3huYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dNOVBUMWlMbXhsYm1kMGFDMHhLU3hsUFdnc2FEMTJiMmxrSURBcE8ybG1LQ0ZxYzNCaUxrMWxjM05oWjJVdVkyOXRjR0Z5WlVacFpXeGtjeWhuTEdncEtYSmxkSFZ5YmlFeGZYSmxkSFZ5YmlCa2ZIeGxQeWhrUFdSOGZIdDlMR1U5Wlh4OGUzMHNhbk53WWk1TlpYTnpZV2RsTG1OdmJYQmhjbVZGZUhSbGJuTnBiMjV6S0dRc1pTa3BPaUV3ZldsbUtHRXVZMjl1YzNSeWRXTjBiM0k5UFQxUFltcGxZM1FwY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1amIyMXdZWEpsUlhoMFpXNXphVzl1Y3loaExHSXBPM1JvY205M0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCMGVYQmxJR2x1SUVwVFVFSWdZWEp5WVhsY0lpazdmVHRxYzNCaUxrMWxjM05oWjJVdWNISnZkRzkwZVhCbExtTnNiMjVsVFdWemMyRm5aVDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVkyeHZibVZOWlhOellXZGxLSFJvYVhNcGZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVkyeHZibVU5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtTnNiMjVsVFdWemMyRm5aU2gwYUdsektYMDdhbk53WWk1TlpYTnpZV2RsTG1Oc2IyNWxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVkyeHZibVZOWlhOellXZGxLR0VwZlR0cWMzQmlMazFsYzNOaFoyVXVZMnh2Ym1WTlpYTnpZV2RsUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCdVpYY2dZUzVqYjI1emRISjFZM1J2Y2locWMzQmlMazFsYzNOaFoyVXVZMnh2Ym1WZktHRXVkRzlCY25KaGVTZ3BLU2w5TzF4dWFuTndZaTVOWlhOellXZGxMbU52Y0hsSmJuUnZQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRFbHVjM1JoYm1ObGIyWW9ZU3hxYzNCaUxrMWxjM05oWjJVcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUkpibk4wWVc1alpXOW1LR0lzYW5Od1lpNU5aWE56WVdkbEtUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0V1WTI5dWMzUnlkV04wYjNJOVBXSXVZMjl1YzNSeWRXTjBiM0lzWENKRGIzQjVJSE52ZFhKalpTQmhibVFnZEdGeVoyVjBJRzFsYzNOaFoyVWdjMmh2ZFd4a0lHaGhkbVVnZEdobElITmhiV1VnZEhsd1pTNWNJaWs3WVQxcWMzQmlMazFsYzNOaFoyVXVZMnh2Ym1Vb1lTazdabTl5S0haaGNpQmpQV0l1ZEc5QmNuSmhlU2dwTEdROVlTNTBiMEZ5Y21GNUtDa3NaVDFqTG14bGJtZDBhRDB3TzJVOFpDNXNaVzVuZEdnN1pTc3JLV05iWlYwOVpGdGxYVHRpTG5keVlYQndaWEp6WHoxaExuZHlZWEJ3WlhKelh6dGlMbVY0ZEdWdWMybHZiazlpYW1WamRGODlZUzVsZUhSbGJuTnBiMjVQWW1wbFkzUmZmVHRjYm1wemNHSXVUV1Z6YzJGblpTNWpiRzl1WlY4OVpuVnVZM1JwYjI0b1lTbDdhV1lvUVhKeVlYa3VhWE5CY25KaGVTaGhLU2w3Wm05eUtIWmhjaUJpUFVGeWNtRjVLR0V1YkdWdVozUm9LU3hqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwZTNaaGNpQmtQV0ZiWTEwN2JuVnNiQ0U5WkNZbUtHSmJZMTA5WENKdlltcGxZM1JjSWowOWRIbHdaVzltSUdRL2FuTndZaTVOWlhOellXZGxMbU5zYjI1bFh5aG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR1FwS1Rwa0tYMXlaWFIxY200Z1luMXBaaWhxYzNCaUxrMWxjM05oWjJVdVUxVlFVRTlTVkZOZlZVbE9WRGhCVWxKQldWOG1KbUVnYVc1emRHRnVZMlZ2WmlCVmFXNTBPRUZ5Y21GNUtYSmxkSFZ5YmlCdVpYY2dWV2x1ZERoQmNuSmhlU2hoS1R0aVBYdDlPMlp2Y2loaklHbHVJR0VwWkQxaFcyTmRMRzUxYkd3aFBXUW1KaWhpVzJOZFBWd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQmtQMnB6Y0dJdVRXVnpjMkZuWlM1amJHOXVaVjhvWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoa0tTazZaQ2s3Y21WMGRYSnVJR0o5TzJwemNHSXVUV1Z6YzJGblpTNXlaV2RwYzNSbGNrMWxjM05oWjJWVWVYQmxQV1oxYm1OMGFXOXVLR0VzWWlsN1lpNXRaWE56WVdkbFNXUTlZWDA3YW5Od1lpNU5aWE56WVdkbExtMWxjM05oWjJWVFpYUkZlSFJsYm5OcGIyNXpQWHQ5TzF4dWFuTndZaTVOWlhOellXZGxMbTFsYzNOaFoyVlRaWFJGZUhSbGJuTnBiMjV6UW1sdVlYSjVQWHQ5TzJwemNHSXVSWGh3YjNKMFBYdDlPMlY0Y0c5eWRITXVUV0Z3UFdwemNHSXVUV0Z3TzJWNGNHOXlkSE11VFdWemMyRm5aVDFxYzNCaUxrMWxjM05oWjJVN1pYaHdiM0owY3k1Q2FXNWhjbmxTWldGa1pYSTlhbk53WWk1Q2FXNWhjbmxTWldGa1pYSTdaWGh3YjNKMGN5NUNhVzVoY25sWGNtbDBaWEk5YW5Od1lpNUNhVzVoY25sWGNtbDBaWEk3Wlhod2IzSjBjeTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTg5YW5Od1lpNUZlSFJsYm5OcGIyNUdhV1ZzWkVsdVptODdaWGh3YjNKMGN5NUZlSFJsYm5OcGIyNUdhV1ZzWkVKcGJtRnllVWx1Wm04OWFuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFSnBibUZ5ZVVsdVptODdaWGh3YjNKMGN5NWxlSEJ2Y25SVGVXMWliMnc5WjI5dlp5NWxlSEJ2Y25SVGVXMWliMnc3Wlhod2IzSjBjeTVwYm1obGNtbDBjejFuYjI5bkxtbHVhR1Z5YVhSek8yVjRjRzl5ZEhNdWIySnFaV04wUFh0bGVIUmxibVE2WjI5dlp5NXZZbXBsWTNRdVpYaDBaVzVrZlR0bGVIQnZjblJ6TG5SNWNHVlBaajFuYjI5bkxuUjVjR1ZQWmp0Y2JpSXNJaUZtZFc1amRHbHZiaWhsTEhRcGUybG1LRndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJsZUhCdmNuUnpKaVpjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnYlc5a2RXeGxLVzF2WkhWc1pTNWxlSEJ2Y25SelBYUW9LVHRsYkhObElHbG1LRndpWm5WdVkzUnBiMjVjSWowOWRIbHdaVzltSUdSbFptbHVaU1ltWkdWbWFXNWxMbUZ0WkNsa1pXWnBibVVvVzEwc2RDazdaV3h6Wlh0MllYSWdjajEwS0NrN1ptOXlLSFpoY2lCdUlHbHVJSElwS0Z3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCbGVIQnZjblJ6UDJWNGNHOXlkSE02WlNsYmJsMDljbHR1WFgxOUtIUm9hWE1zWm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWm5WdVkzUnBiMjRvWlNsN2RtRnlJSFE5ZTMwN1puVnVZM1JwYjI0Z2NpaHVLWHRwWmloMFcyNWRLWEpsZEhWeWJpQjBXMjVkTG1WNGNHOXlkSE03ZG1GeUlHODlkRnR1WFQxN2FUcHVMR3c2SVRFc1pYaHdiM0owY3pwN2ZYMDdjbVYwZFhKdUlHVmJibDB1WTJGc2JDaHZMbVY0Y0c5eWRITXNieXh2TG1WNGNHOXlkSE1zY2lrc2J5NXNQU0V3TEc4dVpYaHdiM0owYzMxeVpYUjFjbTRnY2k1dFBXVXNjaTVqUFhRc2NpNWtQV1oxYm1OMGFXOXVLR1VzZEN4dUtYdHlMbThvWlN4MEtYeDhUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0dVc2RDeDdaVzUxYldWeVlXSnNaVG9oTUN4blpYUTZibjBwZlN4eUxuSTlablZ1WTNScGIyNG9aU2w3WENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlGTjViV0p2YkNZbVUzbHRZbTlzTG5SdlUzUnlhVzVuVkdGbkppWlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvWlN4VGVXMWliMnd1ZEc5VGRISnBibWRVWVdjc2UzWmhiSFZsT2x3aVRXOWtkV3hsWENKOUtTeFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvWlN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1gwc2NpNTBQV1oxYm1OMGFXOXVLR1VzZENsN2FXWW9NU1owSmlZb1pUMXlLR1VwS1N3NEpuUXBjbVYwZFhKdUlHVTdhV1lvTkNaMEppWmNJbTlpYW1WamRGd2lQVDEwZVhCbGIyWWdaU1ltWlNZbVpTNWZYMlZ6VFc5a2RXeGxLWEpsZEhWeWJpQmxPM1poY2lCdVBVOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdhV1lvY2k1eUtHNHBMRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodUxGd2laR1ZtWVhWc2RGd2lMSHRsYm5WdFpYSmhZbXhsT2lFd0xIWmhiSFZsT21WOUtTd3lKblFtSmx3aWMzUnlhVzVuWENJaFBYUjVjR1Z2WmlCbEtXWnZjaWgyWVhJZ2J5QnBiaUJsS1hJdVpDaHVMRzhzWm5WdVkzUnBiMjRvZENsN2NtVjBkWEp1SUdWYmRGMTlMbUpwYm1Rb2JuVnNiQ3h2S1NrN2NtVjBkWEp1SUc1OUxISXViajFtZFc1amRHbHZiaWhsS1h0MllYSWdkRDFsSmlabExsOWZaWE5OYjJSMWJHVS9ablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaUzVrWldaaGRXeDBmVHBtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJsZlR0eVpYUjFjbTRnY2k1a0tIUXNYQ0poWENJc2RDa3NkSDBzY2k1dlBXWjFibU4wYVc5dUtHVXNkQ2w3Y21WMGRYSnVJRTlpYW1WamRDNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrdVkyRnNiQ2hsTEhRcGZTeHlMbkE5WENKY0lpeHlLSEl1Y3oweE1DbDlLRnRtZFc1amRHbHZiaWhsTEhRc2NpbDdYQ0oxYzJVZ2MzUnlhV04wWENJN1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSFFzWENKZlgyVnpUVzlrZFd4bFhDSXNlM1poYkhWbE9pRXdmU2s3ZG1GeUlHNDljaWd6S1R0MExrMWxkR0ZrWVhSaFBXNHVRbkp2ZDNObGNraGxZV1JsY25OOUxHWjFibU4wYVc5dUtHVXNkQ3h5S1h0Y0luVnpaU0J6ZEhKcFkzUmNJanRQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2RDeGNJbDlmWlhOTmIyUjFiR1ZjSWl4N2RtRnNkV1U2SVRCOUtTeDBMbVJsWW5WblBXWjFibU4wYVc5dUtDbDdabTl5S0haaGNpQmxQVnRkTEhROU1EdDBQR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdkQ3NyS1dWYmRGMDlZWEpuZFcxbGJuUnpXM1JkTzJOdmJuTnZiR1V1WkdWaWRXYy9ZMjl1YzI5c1pTNWtaV0oxWnk1aGNIQnNlU2h1ZFd4c0xHVXBPbU52Ym5OdmJHVXViRzluTG1Gd2NHeDVLRzUxYkd3c1pTbDlmU3htZFc1amRHbHZiaWhsTEhRc2NpbDdYQ0oxYzJVZ2MzUnlhV04wWENJN1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSFFzWENKZlgyVnpUVzlrZFd4bFhDSXNlM1poYkhWbE9pRXdmU2s3ZG1GeUlHNDljaWd3S1N4dlBYSW9PQ2tzY3oxeUtEa3BMR2s5Y2lneEtTeGhQWElvTkNrc2RUMXlLREUwS1R0MExtTnNhV1Z1ZEQxbWRXNWpkR2x2YmlobExIUXBlM0psZEhWeWJpQnVaWGNnWkNobExIUXBmVHQyWVhJZ1pEMW1kVzVqZEdsdmJpZ3BlMloxYm1OMGFXOXVJR1VvWlN4MEtYdDBhR2x6TG5OMFlYSjBaV1E5SVRFc2RHaHBjeTV6Wlc1MFJtbHljM1JOWlhOellXZGxQU0V4TEhSb2FYTXVZMjl0Y0d4bGRHVmtQU0V4TEhSb2FYTXVZMnh2YzJWa1BTRXhMSFJvYVhNdVptbHVhWE5vWldSVFpXNWthVzVuUFNFeExIUm9hWE11YjI1SVpXRmtaWEp6UTJGc2JHSmhZMnR6UFZ0ZExIUm9hWE11YjI1TlpYTnpZV2RsUTJGc2JHSmhZMnR6UFZ0ZExIUm9hWE11YjI1RmJtUkRZV3hzWW1GamEzTTlXMTBzZEdocGN5NXdZWEp6WlhJOWJtVjNJRzh1UTJoMWJtdFFZWEp6WlhJc2RHaHBjeTV0WlhSb2IyUkVaV1pwYm1sMGFXOXVQV1VzZEdocGN5NXdjbTl3Y3oxMExIUm9hWE11WTNKbFlYUmxWSEpoYm5Od2IzSjBLQ2w5Y21WMGRYSnVJR1V1Y0hKdmRHOTBlWEJsTG1OeVpXRjBaVlJ5WVc1emNHOXlkRDFtZFc1amRHbHZiaWdwZTNaaGNpQmxQWFJvYVhNdWNISnZjSE11YUc5emRDdGNJaTljSWl0MGFHbHpMbTFsZEdodlpFUmxabWx1YVhScGIyNHVjMlZ5ZG1salpTNXpaWEoyYVdObFRtRnRaU3RjSWk5Y0lpdDBhR2x6TG0xbGRHaHZaRVJsWm1sdWFYUnBiMjR1YldWMGFHOWtUbUZ0WlN4MFBYdHRaWFJvYjJSRVpXWnBibWwwYVc5dU9uUm9hWE11YldWMGFHOWtSR1ZtYVc1cGRHbHZiaXhrWldKMVp6cDBhR2x6TG5CeWIzQnpMbVJsWW5WbmZId2hNU3gxY213NlpTeHZia2hsWVdSbGNuTTZkR2hwY3k1dmJsUnlZVzV6Y0c5eWRFaGxZV1JsY25NdVltbHVaQ2gwYUdsektTeHZia05vZFc1ck9uUm9hWE11YjI1VWNtRnVjM0J2Y25SRGFIVnVheTVpYVc1a0tIUm9hWE1wTEc5dVJXNWtPblJvYVhNdWIyNVVjbUZ1YzNCdmNuUkZibVF1WW1sdVpDaDBhR2x6S1gwN2RHaHBjeTV3Y205d2N5NTBjbUZ1YzNCdmNuUS9kR2hwY3k1MGNtRnVjM0J2Y25ROWRHaHBjeTV3Y205d2N5NTBjbUZ1YzNCdmNuUW9kQ2s2ZEdocGN5NTBjbUZ1YzNCdmNuUTlZUzV0WVd0bFJHVm1ZWFZzZEZSeVlXNXpjRzl5ZENoMEtYMHNaUzV3Y205MGIzUjVjR1V1YjI1VWNtRnVjM0J2Y25SSVpXRmtaWEp6UFdaMWJtTjBhVzl1S0dVc2RDbDdhV1lvZEdocGN5NXdjbTl3Y3k1a1pXSjFaeVltYVM1a1pXSjFaeWhjSW05dVNHVmhaR1Z5YzF3aUxHVXNkQ2tzZEdocGN5NWpiRzl6WldRcGRHaHBjeTV3Y205d2N5NWtaV0oxWnlZbWFTNWtaV0oxWnloY0ltZHljR011YjI1SVpXRmtaWEp6SUhKbFkyVnBkbVZrSUdGbWRHVnlJSEpsY1hWbGMzUWdkMkZ6SUdOc2IzTmxaQ0F0SUdsbmJtOXlhVzVuWENJcE8yVnNjMlVnYVdZb01EMDlQWFFwTzJWc2MyVjdkR2hwY3k1eVpYTndiMjV6WlVobFlXUmxjbk05WlN4MGFHbHpMbkJ5YjNCekxtUmxZblZuSmlacExtUmxZblZuS0Z3aWIyNUlaV0ZrWlhKekxuSmxjM0J2Ym5ObFNHVmhaR1Z5YzF3aUxFcFRUMDR1YzNSeWFXNW5hV1o1S0hSb2FYTXVjbVZ6Y0c5dWMyVklaV0ZrWlhKekxHNTFiR3dzTWlrcE8zWmhjaUJ5UFdNb1pTazdkR2hwY3k1d2NtOXdjeTVrWldKMVp5WW1hUzVrWldKMVp5aGNJbTl1U0dWaFpHVnljeTVuVWxCRFUzUmhkSFZ6WENJc2NpazdkbUZ5SUc0OWNpWW1jajQ5TUQ5eU9uTXVhSFIwY0ZOMFlYUjFjMVJ2UTI5a1pTaDBLVHQwYUdsekxuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpYjI1SVpXRmtaWEp6TG1OdlpHVmNJaXh1S1R0MllYSWdiejFsTG1kbGRDaGNJbWR5Y0dNdGJXVnpjMkZuWlZ3aUtYeDhXMTA3YVdZb2RHaHBjeTV3Y205d2N5NWtaV0oxWnlZbWFTNWtaV0oxWnloY0ltOXVTR1ZoWkdWeWN5NW5VbEJEVFdWemMyRm5aVndpTEc4cExIUm9hWE11Y21GM1QyNUlaV0ZrWlhKektHVXBMRzRoUFQxekxrTnZaR1V1VDBzcGUzWmhjaUJoUFhSb2FYTXVaR1ZqYjJSbFIxSlFRMU4wWVhSMWN5aHZXekJkS1R0MGFHbHpMbkpoZDA5dVJYSnliM0lvYml4aExHVXBmWDE5TEdVdWNISnZkRzkwZVhCbExtOXVWSEpoYm5Od2IzSjBRMmgxYm1zOVpuVnVZM1JwYjI0b1pTbDdkbUZ5SUhROWRHaHBjenRwWmloMGFHbHpMbU5zYjNObFpDbDBhR2x6TG5CeWIzQnpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2laM0p3WXk1dmJrTm9kVzVySUhKbFkyVnBkbVZrSUdGbWRHVnlJSEpsY1hWbGMzUWdkMkZ6SUdOc2IzTmxaQ0F0SUdsbmJtOXlhVzVuWENJcE8yVnNjMlY3ZG1GeUlISTlXMTA3ZEhKNWUzSTlkR2hwY3k1d1lYSnpaWEl1Y0dGeWMyVW9aU2w5WTJGMFkyZ29aU2w3Y21WMGRYSnVJSFJvYVhNdWNISnZjSE11WkdWaWRXY21KbWt1WkdWaWRXY29YQ0p2YmtOb2RXNXJMbkJoY25OcGJtY2daWEp5YjNKY0lpeGxMR1V1YldWemMyRm5aU2tzZG05cFpDQjBhR2x6TG5KaGQwOXVSWEp5YjNJb2N5NURiMlJsTGtsdWRHVnlibUZzTEZ3aWNHRnljMmx1WnlCbGNuSnZjam9nWENJclpTNXRaWE56WVdkbEtYMXlMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aU2w3YVdZb1pTNWphSFZ1YTFSNWNHVTlQVDF2TGtOb2RXNXJWSGx3WlM1TlJWTlRRVWRGS1h0MllYSWdjajEwTG0xbGRHaHZaRVJsWm1sdWFYUnBiMjR1Y21WemNHOXVjMlZVZVhCbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUtHVXVaR0YwWVNrN2RDNXlZWGRQYmsxbGMzTmhaMlVvY2lsOVpXeHpaU0JsTG1Ob2RXNXJWSGx3WlQwOVBXOHVRMmgxYm10VWVYQmxMbFJTUVVsTVJWSlRKaVlvZEM1eVpYTndiMjV6WlVobFlXUmxjbk0vS0hRdWNtVnpjRzl1YzJWVWNtRnBiR1Z5Y3oxdVpYY2diaTVOWlhSaFpHRjBZU2hsTG5SeVlXbHNaWEp6S1N4MExuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpYjI1RGFIVnVheTUwY21GcGJHVnljMXdpTEhRdWNtVnpjRzl1YzJWVWNtRnBiR1Z5Y3lrcE9paDBMbkpsYzNCdmJuTmxTR1ZoWkdWeWN6MXVaWGNnYmk1TlpYUmhaR0YwWVNobExuUnlZV2xzWlhKektTeDBMbkpoZDA5dVNHVmhaR1Z5Y3loMExuSmxjM0J2Ym5ObFNHVmhaR1Z5Y3lrcEtYMHBmWDBzWlM1d2NtOTBiM1I1Y0dVdWIyNVVjbUZ1YzNCdmNuUkZibVE5Wm5WdVkzUnBiMjRvS1h0cFppaDBhR2x6TG5CeWIzQnpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2laM0p3WXk1dmJrVnVaRndpS1N4MGFHbHpMbU5zYjNObFpDbDBhR2x6TG5CeWIzQnpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2laM0p3WXk1dmJrVnVaQ0J5WldObGFYWmxaQ0JoWm5SbGNpQnlaWEYxWlhOMElIZGhjeUJqYkc5elpXUWdMU0JwWjI1dmNtbHVaMXdpS1R0bGJITmxJR2xtS0hadmFXUWdNQ0U5UFhSb2FYTXVjbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5bDdkbUZ5SUdVOVl5aDBhR2x6TG5KbGMzQnZibk5sVkhKaGFXeGxjbk1wTzJsbUtHNTFiR3doUFQxbEtYdDJZWElnZEQxMGFHbHpMbkpsYzNCdmJuTmxWSEpoYVd4bGNuTXVaMlYwS0Z3aVozSndZeTF0WlhOellXZGxYQ0lwTEhJOWRHaHBjeTVrWldOdlpHVkhVbEJEVTNSaGRIVnpLSFJiTUYwcE8zUm9hWE11Y21GM1QyNUZibVFvWlN4eUxIUm9hWE11Y21WemNHOXVjMlZVY21GcGJHVnljeWw5Wld4elpTQjBhR2x6TG5KaGQwOXVSWEp5YjNJb2N5NURiMlJsTGtsdWRHVnlibUZzTEZ3aVVtVnpjRzl1YzJVZ1kyeHZjMlZrSUhkcGRHaHZkWFFnWjNKd1l5MXpkR0YwZFhNZ0tGUnlZV2xzWlhKeklIQnliM1pwWkdWa0tWd2lLWDFsYkhObGUybG1LSFp2YVdRZ01EMDlQWFJvYVhNdWNtVnpjRzl1YzJWSVpXRmtaWEp6S1hKbGRIVnliaUIyYjJsa0lIUm9hWE11Y21GM1QyNUZjbkp2Y2loekxrTnZaR1V1Vlc1cmJtOTNiaXhjSWxKbGMzQnZibk5sSUdOc2IzTmxaQ0IzYVhSb2IzVjBJR2hsWVdSbGNuTmNJaWs3ZG1GeUlHNDlZeWgwYUdsekxuSmxjM0J2Ym5ObFNHVmhaR1Z5Y3lrc2J6MTBhR2x6TG5KbGMzQnZibk5sU0dWaFpHVnljeTVuWlhRb1hDSm5jbkJqTFcxbGMzTmhaMlZjSWlrN2FXWW9kR2hwY3k1d2NtOXdjeTVrWldKMVp5WW1hUzVrWldKMVp5aGNJbWR5Y0dNdWFHVmhaR1Z5Y3lCdmJteDVJSEpsYzNCdmJuTmxJRndpTEc0c2J5a3NiblZzYkQwOVBXNHBjbVYwZFhKdUlIWnZhV1FnZEdocGN5NXlZWGRQYmtWdVpDaHpMa052WkdVdVZXNXJibTkzYml4Y0lsSmxjM0J2Ym5ObElHTnNiM05sWkNCM2FYUm9iM1YwSUdkeWNHTXRjM1JoZEhWeklDaElaV0ZrWlhKeklHOXViSGtwWENJc2RHaHBjeTV5WlhOd2IyNXpaVWhsWVdSbGNuTXBPM1poY2lCaFBYUm9hWE11WkdWamIyUmxSMUpRUTFOMFlYUjFjeWh2V3pCZEtUdDBhR2x6TG5KaGQwOXVSVzVrS0c0c1lTeDBhR2x6TG5KbGMzQnZibk5sU0dWaFpHVnljeWw5ZlN4bExuQnliM1J2ZEhsd1pTNWtaV052WkdWSFVsQkRVM1JoZEhWelBXWjFibU4wYVc5dUtHVXBlMmxtS0NGbEtYSmxkSFZ5Ymx3aVhDSTdkSEo1ZTNKbGRIVnliaUJrWldOdlpHVlZVa2xEYjIxd2IyNWxiblFvWlNsOVkyRjBZMmdvZENsN2NtVjBkWEp1SUdWOWZTeGxMbkJ5YjNSdmRIbHdaUzV5WVhkUGJrVnVaRDFtZFc1amRHbHZiaWhsTEhRc2NpbDdkbUZ5SUc0OWRHaHBjenQwYUdsekxuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpY21GM1QyNUZibVJjSWl4bExIUXNjaWtzZEdocGN5NWpiMjF3YkdWMFpXUjhmQ2gwYUdsekxtTnZiWEJzWlhSbFpEMGhNQ3gwYUdsekxtOXVSVzVrUTJGc2JHSmhZMnR6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYnlsN2FXWW9JVzR1WTJ4dmMyVmtLWFJ5ZVh0dktHVXNkQ3h5S1gxallYUmphQ2hsS1h0elpYUlVhVzFsYjNWMEtHWjFibU4wYVc5dUtDbDdkR2h5YjNjZ1pYMHBmWDBwS1gwc1pTNXdjbTkwYjNSNWNHVXVjbUYzVDI1SVpXRmtaWEp6UFdaMWJtTjBhVzl1S0dVcGUzUm9hWE11Y0hKdmNITXVaR1ZpZFdjbUpta3VaR1ZpZFdjb1hDSnlZWGRQYmtobFlXUmxjbk5jSWl4bEtTeDBhR2x6TG1OdmJYQnNaWFJsWkh4OGRHaHBjeTV2YmtobFlXUmxjbk5EWVd4c1ltRmphM011Wm05eVJXRmphQ2htZFc1amRHbHZiaWgwS1h0MGNubDdkQ2hsS1gxallYUmphQ2hsS1h0elpYUlVhVzFsYjNWMEtHWjFibU4wYVc5dUtDbDdkR2h5YjNjZ1pYMHBmWDBwZlN4bExuQnliM1J2ZEhsd1pTNXlZWGRQYmtWeWNtOXlQV1oxYm1OMGFXOXVLR1VzZEN4eUtYdDJZWElnYnoxMGFHbHpPM1p2YVdRZ01EMDlQWEltSmloeVBXNWxkeUJ1TGsxbGRHRmtZWFJoS1N4MGFHbHpMbkJ5YjNCekxtUmxZblZuSmlacExtUmxZblZuS0Z3aWNtRjNUMjVGY25KdmNsd2lMR1VzZENrc2RHaHBjeTVqYjIxd2JHVjBaV1I4ZkNoMGFHbHpMbU52YlhCc1pYUmxaRDBoTUN4MGFHbHpMbTl1Ulc1a1EyRnNiR0poWTJ0ekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2JpbDdhV1lvSVc4dVkyeHZjMlZrS1hSeWVYdHVLR1VzZEN4eUtYMWpZWFJqYUNobEtYdHpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVLQ2w3ZEdoeWIzY2daWDBwZlgwcEtYMHNaUzV3Y205MGIzUjVjR1V1Y21GM1QyNU5aWE56WVdkbFBXWjFibU4wYVc5dUtHVXBlM1poY2lCMFBYUm9hWE03ZEdocGN5NXdjbTl3Y3k1a1pXSjFaeVltYVM1a1pXSjFaeWhjSW5KaGQwOXVUV1Z6YzJGblpWd2lMR1V1ZEc5UFltcGxZM1FvS1Nrc2RHaHBjeTVqYjIxd2JHVjBaV1I4ZkhSb2FYTXVZMnh2YzJWa2ZIeDBhR2x6TG05dVRXVnpjMkZuWlVOaGJHeGlZV05yY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0hJcGUybG1LQ0YwTG1Oc2IzTmxaQ2wwY25sN2NpaGxLWDFqWVhSamFDaGxLWHR6WlhSVWFXMWxiM1YwS0daMWJtTjBhVzl1S0NsN2RHaHliM2NnWlgwcGZYMHBmU3hsTG5CeWIzUnZkSGx3WlM1dmJraGxZV1JsY25NOVpuVnVZM1JwYjI0b1pTbDdkR2hwY3k1dmJraGxZV1JsY25ORFlXeHNZbUZqYTNNdWNIVnphQ2hsS1gwc1pTNXdjbTkwYjNSNWNHVXViMjVOWlhOellXZGxQV1oxYm1OMGFXOXVLR1VwZTNSb2FYTXViMjVOWlhOellXZGxRMkZzYkdKaFkydHpMbkIxYzJnb1pTbDlMR1V1Y0hKdmRHOTBlWEJsTG05dVJXNWtQV1oxYm1OMGFXOXVLR1VwZTNSb2FYTXViMjVGYm1SRFlXeHNZbUZqYTNNdWNIVnphQ2hsS1gwc1pTNXdjbTkwYjNSNWNHVXVjM1JoY25ROVpuVnVZM1JwYjI0b1pTbDdhV1lvZEdocGN5NXpkR0Z5ZEdWa0tYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lrTnNhV1Z1ZENCaGJISmxZV1I1SUhOMFlYSjBaV1FnTFNCallXNXViM1FnTG5OMFlYSjBLQ2xjSWlrN2RHaHBjeTV6ZEdGeWRHVmtQU0V3TzNaaGNpQjBQVzVsZHlCdUxrMWxkR0ZrWVhSaEtHVjhmSHQ5S1R0MExuTmxkQ2hjSW1OdmJuUmxiblF0ZEhsd1pWd2lMRndpWVhCd2JHbGpZWFJwYjI0dlozSndZeTEzWldJcmNISnZkRzljSWlrc2RDNXpaWFFvWENKNExXZHljR010ZDJWaVhDSXNYQ0l4WENJcExIUm9hWE11ZEhKaGJuTndiM0owTG5OMFlYSjBLSFFwZlN4bExuQnliM1J2ZEhsd1pTNXpaVzVrUFdaMWJtTjBhVzl1S0dVcGUybG1LQ0YwYUdsekxuTjBZWEowWldRcGRHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVEyeHBaVzUwSUc1dmRDQnpkR0Z5ZEdWa0lDMGdMbk4wWVhKMEtDa2diWFZ6ZENCaVpTQmpZV3hzWldRZ1ltVm1iM0psSUM1elpXNWtLQ2xjSWlrN2FXWW9kR2hwY3k1amJHOXpaV1FwZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpUTJ4cFpXNTBJR0ZzY21WaFpIa2dZMnh2YzJWa0lDMGdZMkZ1Ym05MElDNXpaVzVrS0NsY0lpazdhV1lvZEdocGN5NW1hVzVwYzJobFpGTmxibVJwYm1jcGRHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVEyeHBaVzUwSUdGc2NtVmhaSGtnWm1sdWFYTm9aV1FnYzJWdVpHbHVaeUF0SUdOaGJtNXZkQ0F1YzJWdVpDZ3BYQ0lwTzJsbUtDRjBhR2x6TG0xbGRHaHZaRVJsWm1sdWFYUnBiMjR1Y21WeGRXVnpkRk4wY21WaGJTWW1kR2hwY3k1elpXNTBSbWx5YzNSTlpYTnpZV2RsS1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWsxbGMzTmhaMlVnWVd4eVpXRmtlU0J6Wlc1MElHWnZjaUJ1YjI0dFkyeHBaVzUwTFhOMGNtVmhiV2x1WnlCdFpYUm9iMlFnTFNCallXNXViM1FnTG5ObGJtUW9LVndpS1R0MGFHbHpMbk5sYm5SR2FYSnpkRTFsYzNOaFoyVTlJVEE3ZG1GeUlIUTlkUzVtY21GdFpWSmxjWFZsYzNRb1pTazdkR2hwY3k1MGNtRnVjM0J2Y25RdWMyVnVaRTFsYzNOaFoyVW9kQ2w5TEdVdWNISnZkRzkwZVhCbExtWnBibWx6YUZObGJtUTlablZ1WTNScGIyNG9LWHRwWmlnaGRHaHBjeTV6ZEdGeWRHVmtLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJa05zYVdWdWRDQnViM1FnYzNSaGNuUmxaQ0F0SUM1bWFXNXBjMmhUWlc1a0tDa2diWFZ6ZENCaVpTQmpZV3hzWldRZ1ltVm1iM0psSUM1amJHOXpaU2dwWENJcE8ybG1LSFJvYVhNdVkyeHZjMlZrS1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtOc2FXVnVkQ0JoYkhKbFlXUjVJR05zYjNObFpDQXRJR05oYm01dmRDQXVjMlZ1WkNncFhDSXBPMmxtS0hSb2FYTXVabWx1YVhOb1pXUlRaVzVrYVc1bktYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lrTnNhV1Z1ZENCaGJISmxZV1I1SUdacGJtbHphR1ZrSUhObGJtUnBibWNnTFNCallXNXViM1FnTG1acGJtbHphRk5sYm1Rb0tWd2lLVHQwYUdsekxtWnBibWx6YUdWa1UyVnVaR2x1WnowaE1DeDBhR2x6TG5SeVlXNXpjRzl5ZEM1bWFXNXBjMmhUWlc1a0tDbDlMR1V1Y0hKdmRHOTBlWEJsTG1Oc2IzTmxQV1oxYm1OMGFXOXVLQ2w3YVdZb0lYUm9hWE11YzNSaGNuUmxaQ2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0pEYkdsbGJuUWdibTkwSUhOMFlYSjBaV1FnTFNBdWMzUmhjblFvS1NCdGRYTjBJR0psSUdOaGJHeGxaQ0JpWldadmNtVWdMbU5zYjNObEtDbGNJaWs3YVdZb2RHaHBjeTVqYkc5elpXUXBkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2lRMnhwWlc1MElHRnNjbVZoWkhrZ1kyeHZjMlZrSUMwZ1kyRnVibTkwSUM1amJHOXpaU2dwWENJcE8zUm9hWE11WTJ4dmMyVmtQU0V3TEhSb2FYTXVjSEp2Y0hNdVpHVmlkV2NtSm1rdVpHVmlkV2NvWENKeVpYRjFaWE4wTG1GaWIzSjBJR0ZpYjNKMGFXNW5JSEpsY1hWbGMzUmNJaWtzZEdocGN5NTBjbUZ1YzNCdmNuUXVZMkZ1WTJWc0tDbDlMR1Y5S0NrN1puVnVZM1JwYjI0Z1l5aGxLWHQyWVhJZ2REMWxMbWRsZENoY0ltZHljR010YzNSaGRIVnpYQ0lwZkh4YlhUdHBaaWgwTG14bGJtZDBhRDR3S1hSeWVYdDJZWElnY2oxMFd6QmRPM0psZEhWeWJpQndZWEp6WlVsdWRDaHlMREV3S1gxallYUmphQ2hsS1h0eVpYUjFjbTRnYm5Wc2JIMXlaWFIxY200Z2JuVnNiSDE5TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHQyWVhJZ2JqdHVQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR1oxYm1OMGFXOXVLR1VwZTNaaGNpQjBQWHQ5TzJaMWJtTjBhVzl1SUhJb2JpbDdhV1lvZEZ0dVhTbHlaWFIxY200Z2RGdHVYUzVsZUhCdmNuUnpPM1poY2lCdlBYUmJibDA5ZTJrNmJpeHNPaUV4TEdWNGNHOXlkSE02ZTMxOU8zSmxkSFZ5YmlCbFcyNWRMbU5oYkd3b2J5NWxlSEJ2Y25SekxHOHNieTVsZUhCdmNuUnpMSElwTEc4dWJEMGhNQ3h2TG1WNGNHOXlkSE45Y21WMGRYSnVJSEl1YlQxbExISXVZejEwTEhJdWFUMW1kVzVqZEdsdmJpaGxLWHR5WlhSMWNtNGdaWDBzY2k1a1BXWjFibU4wYVc5dUtHVXNkQ3h1S1h0eUxtOG9aU3gwS1h4OFQySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLR1VzZEN4N1kyOXVabWxuZFhKaFlteGxPaUV4TEdWdWRXMWxjbUZpYkdVNklUQXNaMlYwT201OUtYMHNjaTV1UFdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwUFdVbUptVXVYMTlsYzAxdlpIVnNaVDltZFc1amRHbHZiaWdwZTNKbGRIVnliaUJsTG1SbFptRjFiSFI5T21aMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdWOU8zSmxkSFZ5YmlCeUxtUW9kQ3hjSW1GY0lpeDBLU3gwZlN4eUxtODlablZ1WTNScGIyNG9aU3gwS1h0eVpYUjFjbTRnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0dVc2RDbDlMSEl1Y0QxY0lsd2lMSElvY2k1elBURXBmU2hiWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTzNaaGNpQnVQWElvTXlrN2RtRnlJRzg5Wm5WdVkzUnBiMjRvS1h0bWRXNWpkR2x2YmlCbEtHVXNkQ2w3ZG05cFpDQXdQVDA5WlNZbUtHVTllMzBwTEhadmFXUWdNRDA5UFhRbUppaDBQWHR6Y0d4cGRGWmhiSFZsY3pvaE1YMHBPM1poY2lCeUxHODlkR2hwY3p0cFppaDBhR2x6TG1obFlXUmxjbk5OWVhBOWUzMHNaU2xwWmloY0luVnVaR1ZtYVc1bFpGd2lJVDEwZVhCbGIyWWdTR1ZoWkdWeWN5WW1aU0JwYm5OMFlXNWpaVzltSUVobFlXUmxjbk1wYmk1blpYUklaV0ZrWlhKTFpYbHpLR1VwTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvY2lsN2JpNW5aWFJJWldGa1pYSldZV3gxWlhNb1pTeHlLUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR1VwZTNRdWMzQnNhWFJXWVd4MVpYTS9ieTVoY0hCbGJtUW9jaXh1TG5Od2JHbDBTR1ZoWkdWeVZtRnNkV1VvWlNrcE9tOHVZWEJ3Wlc1a0tISXNaU2w5S1gwcE8yVnNjMlVnYVdZb1hDSnZZbXBsWTNSY0lqMDlkSGx3Wlc5bUtISTlaU2ttSmx3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCeUxtaGxZV1JsY25OTllYQW1KbHdpWm5WdVkzUnBiMjVjSWowOWRIbHdaVzltSUhJdVptOXlSV0ZqYUNsbExtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1pTeDBLWHR2TG1Gd2NHVnVaQ2hsTEhRcGZTazdaV3h6WlNCcFppaGNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnVFdGd0ppWmxJR2x1YzNSaGJtTmxiMllnVFdGd0tYdGxMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aU3gwS1h0dkxtRndjR1Z1WkNoMExHVXBmU2w5Wld4elpWd2ljM1J5YVc1blhDSTlQWFI1Y0dWdlppQmxQM1JvYVhNdVlYQndaVzVrUm5KdmJWTjBjbWx1WnlobEtUcGNJbTlpYW1WamRGd2lQVDEwZVhCbGIyWWdaU1ltVDJKcVpXTjBMbWRsZEU5M2JsQnliM0JsY25SNVRtRnRaWE1vWlNrdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloMEtYdDJZWElnY2oxbFczUmRPMEZ5Y21GNUxtbHpRWEp5WVhrb2Npay9jaTVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR1VwZTI4dVlYQndaVzVrS0hRc1pTbDlLVHB2TG1Gd2NHVnVaQ2gwTEhJcGZTbDljbVYwZFhKdUlHVXVjSEp2ZEc5MGVYQmxMbUZ3Y0dWdVpFWnliMjFUZEhKcGJtYzlablZ1WTNScGIyNG9aU2w3Wm05eUtIWmhjaUIwUFdVdWMzQnNhWFFvWENKY1hISmNYRzVjSWlrc2NqMHdPM0k4ZEM1c1pXNW5kR2c3Y2lzcktYdDJZWElnYmoxMFczSmRMRzg5Ymk1cGJtUmxlRTltS0Z3aU9sd2lLVHRwWmlodlBqQXBlM1poY2lCelBXNHVjM1ZpYzNSeWFXNW5LREFzYnlrdWRISnBiU2dwTEdrOWJpNXpkV0p6ZEhKcGJtY29ieXN4S1M1MGNtbHRLQ2s3ZEdocGN5NWhjSEJsYm1Rb2N5eHBLWDE5ZlN4bExuQnliM1J2ZEhsd1pTNWtaV3hsZEdVOVpuVnVZM1JwYjI0b1pTeDBLWHQyWVhJZ2NqMXVMbTV2Y20xaGJHbDZaVTVoYldVb1pTazdhV1lvZG05cFpDQXdQVDA5ZENsa1pXeGxkR1VnZEdocGN5NW9aV0ZrWlhKelRXRndXM0pkTzJWc2MyVjdkbUZ5SUc4OWRHaHBjeTVvWldGa1pYSnpUV0Z3VzNKZE8ybG1LRzhwZTNaaGNpQnpQVzh1YVc1a1pYaFBaaWgwS1R0elBqMHdKaVp2TG5Od2JHbGpaU2h6TERFcExEQTlQVDF2TG14bGJtZDBhQ1ltWkdWc1pYUmxJSFJvYVhNdWFHVmhaR1Z5YzAxaGNGdHlYWDE5ZlN4bExuQnliM1J2ZEhsd1pTNWhjSEJsYm1ROVpuVnVZM1JwYjI0b1pTeDBLWHQyWVhJZ2NqMTBhR2x6TEc4OWJpNXViM0p0WVd4cGVtVk9ZVzFsS0dVcE8wRnljbUY1TG1selFYSnlZWGtvZEdocGN5NW9aV0ZrWlhKelRXRndXMjlkS1h4OEtIUm9hWE11YUdWaFpHVnljMDFoY0Z0dlhUMWJYU2tzUVhKeVlYa3VhWE5CY25KaGVTaDBLVDkwTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWlNsN2NpNW9aV0ZrWlhKelRXRndXMjlkTG5CMWMyZ29iaTV1YjNKdFlXeHBlbVZXWVd4MVpTaGxLU2w5S1RwMGFHbHpMbWhsWVdSbGNuTk5ZWEJiYjEwdWNIVnphQ2h1TG01dmNtMWhiR2w2WlZaaGJIVmxLSFFwS1gwc1pTNXdjbTkwYjNSNWNHVXVjMlYwUFdaMWJtTjBhVzl1S0dVc2RDbDdkbUZ5SUhJOWJpNXViM0p0WVd4cGVtVk9ZVzFsS0dVcE8ybG1LRUZ5Y21GNUxtbHpRWEp5WVhrb2RDa3BlM1poY2lCdlBWdGRPM1F1Wm05eVJXRmphQ2htZFc1amRHbHZiaWhsS1h0dkxuQjFjMmdvYmk1dWIzSnRZV3hwZW1WV1lXeDFaU2hsS1NsOUtTeDBhR2x6TG1obFlXUmxjbk5OWVhCYmNsMDliMzFsYkhObElIUm9hWE11YUdWaFpHVnljMDFoY0Z0eVhUMWJiaTV1YjNKdFlXeHBlbVZXWVd4MVpTaDBLVjE5TEdVdWNISnZkRzkwZVhCbExtaGhjejFtZFc1amRHbHZiaWhsTEhRcGUzWmhjaUJ5UFhSb2FYTXVhR1ZoWkdWeWMwMWhjRnR1TG01dmNtMWhiR2w2WlU1aGJXVW9aU2xkTzJsbUtDRkJjbkpoZVM1cGMwRnljbUY1S0hJcEtYSmxkSFZ5YmlFeE8ybG1LSFp2YVdRZ01DRTlQWFFwZTNaaGNpQnZQVzR1Ym05eWJXRnNhWHBsVm1Gc2RXVW9kQ2s3Y21WMGRYSnVJSEl1YVc1a1pYaFBaaWh2S1Q0OU1IMXlaWFIxY200aE1IMHNaUzV3Y205MGIzUjVjR1V1WjJWMFBXWjFibU4wYVc5dUtHVXBlM1poY2lCMFBYUm9hWE11YUdWaFpHVnljMDFoY0Z0dUxtNXZjbTFoYkdsNlpVNWhiV1VvWlNsZE8zSmxkSFZ5YmlCMmIybGtJREFoUFQxMFAzUXVZMjl1WTJGMEtDazZXMTE5TEdVdWNISnZkRzkwZVhCbExtWnZja1ZoWTJnOVpuVnVZM1JwYjI0b1pTbDdkbUZ5SUhROWRHaHBjenRQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsT1lXMWxjeWgwYUdsekxtaGxZV1JsY25OTllYQXBMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9jaWw3WlNoeUxIUXVhR1ZoWkdWeWMwMWhjRnR5WFNsOUxIUm9hWE1wZlN4bExuQnliM1J2ZEhsd1pTNTBiMGhsWVdSbGNuTTlablZ1WTNScGIyNG9LWHRwWmloY0luVnVaR1ZtYVc1bFpGd2lJVDEwZVhCbGIyWWdTR1ZoWkdWeWN5bDdkbUZ5SUdVOWJtVjNJRWhsWVdSbGNuTTdjbVYwZFhKdUlIUm9hWE11Wm05eVJXRmphQ2htZFc1amRHbHZiaWgwTEhJcGUzSXVabTl5UldGamFDaG1kVzVqZEdsdmJpaHlLWHRsTG1Gd2NHVnVaQ2gwTEhJcGZTbDlLU3hsZlhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtobFlXUmxjbk1nWTJ4aGMzTWdhWE1nYm05MElHUmxabWx1WldSY0lpbDlMR1Y5S0NrN2RDNUNjbTkzYzJWeVNHVmhaR1Z5Y3oxdmZTeG1kVzVqZEdsdmJpaGxMSFFzY2lsN1hDSjFjMlVnYzNSeWFXTjBYQ0k3VDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUXNYQ0pmWDJWelRXOWtkV3hsWENJc2UzWmhiSFZsT2lFd2ZTazdkbUZ5SUc0OWNpZ3dLVHQwTGtKeWIzZHpaWEpJWldGa1pYSnpQVzR1UW5KdmQzTmxja2hsWVdSbGNuTjlMR1oxYm1OMGFXOXVLR1VzZEN4eUtYdGNJblZ6WlNCemRISnBZM1JjSWp0UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kQ3hjSWw5ZlpYTk5iMlIxYkdWY0lpeDdkbUZzZFdVNklUQjlLU3gwTG1sMFpYSmhkR1ZJWldGa1pYSnpQV1oxYm1OMGFXOXVLR1VzZENsN1ptOXlLSFpoY2lCeVBXVmJVM2x0WW05c0xtbDBaWEpoZEc5eVhTZ3BMRzQ5Y2k1dVpYaDBLQ2s3SVc0dVpHOXVaVHNwZENodUxuWmhiSFZsV3pCZEtTeHVQWEl1Ym1WNGRDZ3BmU3gwTG1sMFpYSmhkR1ZJWldGa1pYSnpTMlY1Y3oxbWRXNWpkR2x2YmlobExIUXBlMlp2Y2loMllYSWdjajFsTG10bGVYTW9LU3h1UFhJdWJtVjRkQ2dwT3lGdUxtUnZibVU3S1hRb2JpNTJZV3gxWlNrc2JqMXlMbTVsZUhRb0tYMTlMR1oxYm1OMGFXOXVLR1VzZEN4eUtYdGNJblZ6WlNCemRISnBZM1JjSWp0UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kQ3hjSWw5ZlpYTk5iMlIxYkdWY0lpeDdkbUZzZFdVNklUQjlLVHQyWVhJZ2JqMXlLRElwTzJaMWJtTjBhVzl1SUc4b1pTbDdjbVYwZFhKdUlHVjlkQzV1YjNKdFlXeHBlbVZPWVcxbFBXWjFibU4wYVc5dUtHVXBlMmxtS0Z3aWMzUnlhVzVuWENJaFBYUjVjR1Z2WmlCbEppWW9aVDFUZEhKcGJtY29aU2twTEM5YlhtRXRlakF0T1Z4Y0xTTWtKU1luS2lzdVhGeGVYMkI4ZmwwdmFTNTBaWE4wS0dVcEtYUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9YQ0pKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCb1pXRmtaWElnWm1sbGJHUWdibUZ0WlZ3aUtUdHlaWFIxY200Z1pTNTBiMHh2ZDJWeVEyRnpaU2dwZlN4MExtNXZjbTFoYkdsNlpWWmhiSFZsUFdaMWJtTjBhVzl1S0dVcGUzSmxkSFZ5Ymx3aWMzUnlhVzVuWENJaFBYUjVjR1Z2WmlCbEppWW9aVDFUZEhKcGJtY29aU2twTEdWOUxIUXVaMlYwU0dWaFpHVnlWbUZzZFdWelBXWjFibU4wYVc5dUtHVXNkQ2w3ZG1GeUlISTlieWhsS1R0cFppaHlJR2x1YzNSaGJtTmxiMllnU0dWaFpHVnljeVltY2k1blpYUkJiR3dwY21WMGRYSnVJSEl1WjJWMFFXeHNLSFFwTzNaaGNpQnVQWEl1WjJWMEtIUXBPM0psZEhWeWJpQnVKaVpjSW5OMGNtbHVaMXdpUFQxMGVYQmxiMllnYmo5YmJsMDZibjBzZEM1blpYUklaV0ZrWlhKTFpYbHpQV1oxYm1OMGFXOXVLR1VwZTNaaGNpQjBQVzhvWlNrc2NqMTdmU3h6UFZ0ZE8zSmxkSFZ5YmlCMExtdGxlWE0vYmk1cGRHVnlZWFJsU0dWaFpHVnljMHRsZVhNb2RDeG1kVzVqZEdsdmJpaGxLWHR5VzJWZGZId29jbHRsWFQwaE1DeHpMbkIxYzJnb1pTa3BmU2s2ZEM1bWIzSkZZV05vUDNRdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobExIUXBlM0piZEYxOGZDaHlXM1JkUFNFd0xITXVjSFZ6YUNoMEtTbDlLVHB1TG1sMFpYSmhkR1ZJWldGa1pYSnpLSFFzWm5WdVkzUnBiMjRvWlNsN2RtRnlJSFE5WlZzd1hUdHlXM1JkZkh3b2NsdDBYVDBoTUN4ekxuQjFjMmdvZENrcGZTa3NjMzBzZEM1emNHeHBkRWhsWVdSbGNsWmhiSFZsUFdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwUFZ0ZE8zSmxkSFZ5YmlCbExuTndiR2wwS0Z3aUxDQmNJaWt1Wm05eVJXRmphQ2htZFc1amRHbHZiaWhsS1h0bExuTndiR2wwS0Z3aUxGd2lLUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR1VwZTNRdWNIVnphQ2hsS1gwcGZTa3NkSDE5WFNsOUxHVXVaWGh3YjNKMGN6MXVLQ2w5TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHRjSW5WelpTQnpkSEpwWTNSY0lqdFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1R0MllYSWdiajF5S0RVcExHODlablZ1WTNScGIyNG9aU2w3Y21WMGRYSnVJRzR1UTNKdmMzTkNjbTkzYzJWeVNIUjBjRlJ5WVc1emNHOXlkQ2g3ZDJsMGFFTnlaV1JsYm5ScFlXeHpPaUV4ZlNrb1pTbDlPM1F1YzJWMFJHVm1ZWFZzZEZSeVlXNXpjRzl5ZEVaaFkzUnZjbms5Wm5WdVkzUnBiMjRvWlNsN2J6MWxmU3gwTG0xaGEyVkVaV1poZFd4MFZISmhibk53YjNKMFBXWjFibU4wYVc5dUtHVXBlM0psZEhWeWJpQnZLR1VwZlgwc1puVnVZM1JwYjI0b1pTeDBMSElwZTF3aWRYTmxJSE4wY21samRGd2lPMDlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMExGd2lYMTlsYzAxdlpIVnNaVndpTEh0MllXeDFaVG9oTUgwcE8zWmhjaUJ1UFhJb05pa3NiejF5S0RjcE8zUXVRM0p2YzNOQ2NtOTNjMlZ5U0hSMGNGUnlZVzV6Y0c5eWREMW1kVzVqZEdsdmJpaGxLWHRwWmlodUxtUmxkR1ZqZEVabGRHTm9VM1Z3Y0c5eWRDZ3BLWHQyWVhJZ2REMTdZM0psWkdWdWRHbGhiSE02WlM1M2FYUm9RM0psWkdWdWRHbGhiSE0vWENKcGJtTnNkV1JsWENJNlhDSnpZVzFsTFc5eWFXZHBibHdpZlR0eVpYUjFjbTRnYmk1R1pYUmphRkpsWVdSaFlteGxVM1J5WldGdFZISmhibk53YjNKMEtIUXBmWEpsZEhWeWJpQnZMbGhvY2xSeVlXNXpjRzl5ZENoN2QybDBhRU55WldSbGJuUnBZV3h6T21VdWQybDBhRU55WldSbGJuUnBZV3h6ZlNsOWZTeG1kVzVqZEdsdmJpaGxMSFFzY2lsN1hDSjFjMlVnYzNSeWFXTjBYQ0k3ZG1GeUlHNDlkR2hwY3lZbWRHaHBjeTVmWDJGemMybG5ibng4Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRvYmoxUFltcGxZM1F1WVhOemFXZHVmSHhtZFc1amRHbHZiaWhsS1h0bWIzSW9kbUZ5SUhRc2NqMHhMRzQ5WVhKbmRXMWxiblJ6TG14bGJtZDBhRHR5UEc0N2Npc3JLV1p2Y2loMllYSWdieUJwYmlCMFBXRnlaM1Z0Wlc1MGMxdHlYU2xQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvZEN4dktTWW1LR1ZiYjEwOWRGdHZYU2s3Y21WMGRYSnVJR1Y5S1M1aGNIQnNlU2gwYUdsekxHRnlaM1Z0Wlc1MGN5bDlPMDlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMExGd2lYMTlsYzAxdlpIVnNaVndpTEh0MllXeDFaVG9oTUgwcE8zWmhjaUJ2UFhJb01Da3NjejF5S0RFcE8zUXVSbVYwWTJoU1pXRmtZV0pzWlZOMGNtVmhiVlJ5WVc1emNHOXlkRDFtZFc1amRHbHZiaWhsS1h0eVpYUjFjbTRnWm5WdVkzUnBiMjRvZENsN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0dVc2RDbDdjbVYwZFhKdUlHVXVaR1ZpZFdjbUpuTXVaR1ZpZFdjb1hDSm1aWFJqYUZKbGNYVmxjM1JjSWl4bEtTeHVaWGNnYVNobExIUXBmU2gwTEdVcGZYMDdkbUZ5SUdrOVpuVnVZM1JwYjI0b0tYdG1kVzVqZEdsdmJpQmxLR1VzZENsN2RHaHBjeTVqWVc1alpXeHNaV1E5SVRFc2RHaHBjeTVqYjI1MGNtOXNiR1Z5UFhObGJHWXVRV0p2Y25SRGIyNTBjbTlzYkdWeUppWnVaWGNnUVdKdmNuUkRiMjUwY205c2JHVnlMSFJvYVhNdWIzQjBhVzl1Y3oxbExIUm9hWE11YVc1cGREMTBmWEpsZEhWeWJpQmxMbkJ5YjNSdmRIbHdaUzV3ZFcxd1BXWjFibU4wYVc5dUtHVXNkQ2w3ZG1GeUlISTlkR2hwY3p0cFppaDBhR2x6TG5KbFlXUmxjajFsTEhSb2FYTXVZMkZ1WTJWc2JHVmtLWEpsZEhWeWJpQjBhR2x6TG05d2RHbHZibk11WkdWaWRXY21Kbk11WkdWaWRXY29YQ0pHWlhSamFDNXdkVzF3TG1OaGJtTmxiQ0JoZENCbWFYSnpkQ0J3ZFcxd1hDSXBMSFp2YVdRZ2RHaHBjeTV5WldGa1pYSXVZMkZ1WTJWc0tDazdkR2hwY3k1eVpXRmtaWEl1Y21WaFpDZ3BMblJvWlc0b1puVnVZM1JwYjI0b1pTbDdhV1lvWlM1a2IyNWxLWEpsZEhWeWJpQnlMbTl3ZEdsdmJuTXViMjVGYm1Rb0tTeDBPM0l1YjNCMGFXOXVjeTV2YmtOb2RXNXJLR1V1ZG1Gc2RXVXBMSEl1Y0hWdGNDaHlMbkpsWVdSbGNpeDBLWDBwTG1OaGRHTm9LR1oxYm1OMGFXOXVLR1VwZTNJdVkyRnVZMlZzYkdWa1AzSXViM0IwYVc5dWN5NWtaV0oxWnlZbWN5NWtaV0oxWnloY0lrWmxkR05vTG1OaGRHTm9JQzBnY21WeGRXVnpkQ0JqWVc1alpXeHNaV1JjSWlrNktISXVZMkZ1WTJWc2JHVmtQU0V3TEhJdWIzQjBhVzl1Y3k1a1pXSjFaeVltY3k1a1pXSjFaeWhjSWtabGRHTm9MbU5oZEdOb1hDSXNaUzV0WlhOellXZGxLU3h5TG05d2RHbHZibk11YjI1RmJtUW9aU2twZlNsOUxHVXVjSEp2ZEc5MGVYQmxMbk5sYm1ROVpuVnVZM1JwYjI0b1pTbDdkbUZ5SUhROWRHaHBjenRtWlhSamFDaDBhR2x6TG05d2RHbHZibk11ZFhKc0xHNG9lMzBzZEdocGN5NXBibWwwTEh0b1pXRmtaWEp6T25Sb2FYTXViV1YwWVdSaGRHRXVkRzlJWldGa1pYSnpLQ2tzYldWMGFHOWtPbHdpVUU5VFZGd2lMR0p2WkhrNlpTeHphV2R1WVd3NmRHaHBjeTVqYjI1MGNtOXNiR1Z5SmlaMGFHbHpMbU52Ym5SeWIyeHNaWEl1YzJsbmJtRnNmU2twTG5Sb1pXNG9ablZ1WTNScGIyNG9aU2w3YVdZb2RDNXZjSFJwYjI1ekxtUmxZblZuSmlaekxtUmxZblZuS0Z3aVJtVjBZMmd1Y21WemNHOXVjMlZjSWl4bEtTeDBMbTl3ZEdsdmJuTXViMjVJWldGa1pYSnpLRzVsZHlCdkxrMWxkR0ZrWVhSaEtHVXVhR1ZoWkdWeWN5a3NaUzV6ZEdGMGRYTXBMQ0ZsTG1KdlpIa3BjbVYwZFhKdUlHVTdkQzV3ZFcxd0tHVXVZbTlrZVM1blpYUlNaV0ZrWlhJb0tTeGxLWDBwTG1OaGRHTm9LR1oxYm1OMGFXOXVLR1VwZTNRdVkyRnVZMlZzYkdWa1AzUXViM0IwYVc5dWN5NWtaV0oxWnlZbWN5NWtaV0oxWnloY0lrWmxkR05vTG1OaGRHTm9JQzBnY21WeGRXVnpkQ0JqWVc1alpXeHNaV1JjSWlrNktIUXVZMkZ1WTJWc2JHVmtQU0V3TEhRdWIzQjBhVzl1Y3k1a1pXSjFaeVltY3k1a1pXSjFaeWhjSWtabGRHTm9MbU5oZEdOb1hDSXNaUzV0WlhOellXZGxLU3gwTG05d2RHbHZibk11YjI1RmJtUW9aU2twZlNsOUxHVXVjSEp2ZEc5MGVYQmxMbk5sYm1STlpYTnpZV2RsUFdaMWJtTjBhVzl1S0dVcGUzUm9hWE11YzJWdVpDaGxLWDBzWlM1d2NtOTBiM1I1Y0dVdVptbHVhWE5vVTJWdVpEMW1kVzVqZEdsdmJpZ3BlMzBzWlM1d2NtOTBiM1I1Y0dVdWMzUmhjblE5Wm5WdVkzUnBiMjRvWlNsN2RHaHBjeTV0WlhSaFpHRjBZVDFsZlN4bExuQnliM1J2ZEhsd1pTNWpZVzVqWld3OVpuVnVZM1JwYjI0b0tYdDBhR2x6TG1OaGJtTmxiR3hsWkQ5MGFHbHpMbTl3ZEdsdmJuTXVaR1ZpZFdjbUpuTXVaR1ZpZFdjb1hDSkdaWFJqYUM1aFltOXlkQzVqWVc1alpXd2dZV3h5WldGa2VTQmpZVzVqWld4c1pXUmNJaWs2S0hSb2FYTXVZMkZ1WTJWc2JHVmtQU0V3TEhSb2FYTXVjbVZoWkdWeVB5aDBhR2x6TG05d2RHbHZibk11WkdWaWRXY21Kbk11WkdWaWRXY29YQ0pHWlhSamFDNWhZbTl5ZEM1allXNWpaV3hjSWlrc2RHaHBjeTV5WldGa1pYSXVZMkZ1WTJWc0tDa3BPblJvYVhNdWIzQjBhVzl1Y3k1a1pXSjFaeVltY3k1a1pXSjFaeWhjSWtabGRHTm9MbUZpYjNKMExtTmhibU5sYkNCaVpXWnZjbVVnY21WaFpHVnlYQ0lwTEhSb2FYTXVZMjl1ZEhKdmJHeGxjaVltZEdocGN5NWpiMjUwY205c2JHVnlMbUZpYjNKMEtDa3BmU3hsZlNncE8zUXVaR1YwWldOMFJtVjBZMmhUZFhCd2IzSjBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUZKbGMzQnZibk5sSmlaU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGtvWENKaWIyUjVYQ0lwSmlaY0ltWjFibU4wYVc5dVhDSTlQWFI1Y0dWdlppQklaV0ZrWlhKemZYMHNablZ1WTNScGIyNG9aU3gwTEhJcGUxd2lkWE5sSUhOMGNtbGpkRndpTzNaaGNpQnVMRzg5ZEdocGN5WW1kR2hwY3k1ZlgyVjRkR1Z1WkhOOGZDaHVQV1oxYm1OMGFXOXVLR1VzZENsN2NtVjBkWEp1S0c0OVQySnFaV04wTG5ObGRGQnliM1J2ZEhsd1pVOW1mSHg3WDE5d2NtOTBiMTlmT2x0ZGZXbHVjM1JoYm1ObGIyWWdRWEp5WVhrbUptWjFibU4wYVc5dUtHVXNkQ2w3WlM1ZlgzQnliM1J2WDE4OWRIMThmR1oxYm1OMGFXOXVLR1VzZENsN1ptOXlLSFpoY2lCeUlHbHVJSFFwZEM1b1lYTlBkMjVRY205d1pYSjBlU2h5S1NZbUtHVmJjbDA5ZEZ0eVhTbDlLU2hsTEhRcGZTeG1kVzVqZEdsdmJpaGxMSFFwZTJaMWJtTjBhVzl1SUhJb0tYdDBhR2x6TG1OdmJuTjBjblZqZEc5eVBXVjliaWhsTEhRcExHVXVjSEp2ZEc5MGVYQmxQVzUxYkd3OVBUMTBQMDlpYW1WamRDNWpjbVZoZEdVb2RDazZLSEl1Y0hKdmRHOTBlWEJsUFhRdWNISnZkRzkwZVhCbExHNWxkeUJ5S1gwcE8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTzNaaGNpQnpQWElvTUNrc2FUMXlLREVwTEdFOWNpZ3hNU2s3ZEM1WWFISlVjbUZ1YzNCdmNuUTlablZ1WTNScGIyNG9aU2w3Y21WMGRYSnVJR1oxYm1OMGFXOXVLSFFwZTJsbUtHRXVaR1YwWldOMFRXOTZXRWhTVTNWd2NHOXlkQ2dwS1hKbGRIVnliaUJ1WlhjZ1pDaDBMR1VwTzJsbUtHRXVaR1YwWldOMFdFaFNUM1psY25KcFpHVk5hVzFsVkhsd1pWTjFjSEJ2Y25Rb0tTbHlaWFIxY200Z2JtVjNJSFVvZEN4bEtUdDBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSlVhR2x6SUdWdWRtbHliMjV0Wlc1MEozTWdXRWhTSUdsdGNHeGxiV1Z1ZEdGMGFXOXVJR05oYm01dmRDQnpkWEJ3YjNKMElHSnBibUZ5ZVNCMGNtRnVjMlpsY2k1Y0lpbDlmVHQyWVhJZ2RUMW1kVzVqZEdsdmJpZ3BlMloxYm1OMGFXOXVJR1VvWlN4MEtYdDBhR2x6TG05d2RHbHZibk05WlN4MGFHbHpMbWx1YVhROWRIMXlaWFIxY200Z1pTNXdjbTkwYjNSNWNHVXViMjVRY205bmNtVnpjMFYyWlc1MFBXWjFibU4wYVc5dUtDbDdkR2hwY3k1dmNIUnBiMjV6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpV0VoU0xtOXVVSEp2WjNKbGMzTkZkbVZ1ZEM1c1pXNW5kR2c2SUZ3aUxIUm9hWE11ZUdoeUxuSmxjM0J2Ym5ObExteGxibWQwYUNrN2RtRnlJR1U5ZEdocGN5NTRhSEl1Y21WemNHOXVjMlV1YzNWaWMzUnlLSFJvYVhNdWFXNWtaWGdwTzNSb2FYTXVhVzVrWlhnOWRHaHBjeTU0YUhJdWNtVnpjRzl1YzJVdWJHVnVaM1JvTzNaaGNpQjBQWEFvWlNrN2RHaHBjeTV2Y0hScGIyNXpMbTl1UTJoMWJtc29kQ2w5TEdVdWNISnZkRzkwZVhCbExtOXVURzloWkVWMlpXNTBQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NXZjSFJwYjI1ekxtUmxZblZuSmlacExtUmxZblZuS0Z3aVdFaFNMbTl1VEc5aFpFVjJaVzUwWENJcExIUm9hWE11YjNCMGFXOXVjeTV2YmtWdVpDZ3BmU3hsTG5CeWIzUnZkSGx3WlM1dmJsTjBZWFJsUTJoaGJtZGxQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NXZjSFJwYjI1ekxtUmxZblZuSmlacExtUmxZblZuS0Z3aVdFaFNMbTl1VTNSaGRHVkRhR0Z1WjJWY0lpeDBhR2x6TG5ob2NpNXlaV0ZrZVZOMFlYUmxLU3gwYUdsekxuaG9jaTV5WldGa2VWTjBZWFJsUFQwOVdFMU1TSFIwY0ZKbGNYVmxjM1F1U0VWQlJFVlNVMTlTUlVORlNWWkZSQ1ltZEdocGN5NXZjSFJwYjI1ekxtOXVTR1ZoWkdWeWN5aHVaWGNnY3k1TlpYUmhaR0YwWVNoMGFHbHpMbmhvY2k1blpYUkJiR3hTWlhOd2IyNXpaVWhsWVdSbGNuTW9LU2tzZEdocGN5NTRhSEl1YzNSaGRIVnpLWDBzWlM1d2NtOTBiM1I1Y0dVdWMyVnVaRTFsYzNOaFoyVTlablZ1WTNScGIyNG9aU2w3ZEdocGN5NTRhSEl1YzJWdVpDaGxLWDBzWlM1d2NtOTBiM1I1Y0dVdVptbHVhWE5vVTJWdVpEMW1kVzVqZEdsdmJpZ3BlMzBzWlM1d2NtOTBiM1I1Y0dVdWMzUmhjblE5Wm5WdVkzUnBiMjRvWlNsN2RtRnlJSFE5ZEdocGN6dDBhR2x6TG0xbGRHRmtZWFJoUFdVN2RtRnlJSEk5Ym1WM0lGaE5URWgwZEhCU1pYRjFaWE4wTzNSb2FYTXVlR2h5UFhJc2NpNXZjR1Z1S0Z3aVVFOVRWRndpTEhSb2FYTXViM0IwYVc5dWN5NTFjbXdwTEhSb2FYTXVZMjl1Wm1sbmRYSmxXR2h5S0Nrc2RHaHBjeTV0WlhSaFpHRjBZUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR1VzZENsN2NpNXpaWFJTWlhGMVpYTjBTR1ZoWkdWeUtHVXNkQzVxYjJsdUtGd2lMQ0JjSWlrcGZTa3NjaTUzYVhSb1EzSmxaR1Z1ZEdsaGJITTlRbTl2YkdWaGJpaDBhR2x6TG1sdWFYUXVkMmwwYUVOeVpXUmxiblJwWVd4ektTeHlMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9YQ0p5WldGa2VYTjBZWFJsWTJoaGJtZGxYQ0lzZEdocGN5NXZibE4wWVhSbFEyaGhibWRsTG1KcGJtUW9kR2hwY3lrcExISXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpaGNJbkJ5YjJkeVpYTnpYQ0lzZEdocGN5NXZibEJ5YjJkeVpYTnpSWFpsYm5RdVltbHVaQ2gwYUdsektTa3NjaTVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLRndpYkc5aFpHVnVaRndpTEhSb2FYTXViMjVNYjJGa1JYWmxiblF1WW1sdVpDaDBhR2x6S1Nrc2NpNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtGd2laWEp5YjNKY0lpeG1kVzVqZEdsdmJpaGxLWHQwTG05d2RHbHZibk11WkdWaWRXY21KbWt1WkdWaWRXY29YQ0pZU0ZJdVpYSnliM0pjSWl4bEtTeDBMbTl3ZEdsdmJuTXViMjVGYm1Rb1pTNWxjbkp2Y2lsOUtYMHNaUzV3Y205MGIzUjVjR1V1WTI5dVptbG5kWEpsV0doeVBXWjFibU4wYVc5dUtDbDdkR2hwY3k1NGFISXVjbVZ6Y0c5dWMyVlVlWEJsUFZ3aWRHVjRkRndpTEhSb2FYTXVlR2h5TG05MlpYSnlhV1JsVFdsdFpWUjVjR1VvWENKMFpYaDBMM0JzWVdsdU95QmphR0Z5YzJWMFBYZ3RkWE5sY2kxa1pXWnBibVZrWENJcGZTeGxMbkJ5YjNSdmRIbHdaUzVqWVc1alpXdzlablZ1WTNScGIyNG9LWHQwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NtSm1rdVpHVmlkV2NvWENKWVNGSXVZV0p2Y25SY0lpa3NkR2hwY3k1NGFISXVZV0p2Y25Rb0tYMHNaWDBvS1R0MExsaElVajExTzNaaGNpQmtQV1oxYm1OMGFXOXVLR1VwZTJaMWJtTjBhVzl1SUhRb0tYdHlaWFIxY200Z2JuVnNiQ0U5UFdVbUptVXVZWEJ3Ykhrb2RHaHBjeXhoY21kMWJXVnVkSE1wZkh4MGFHbHpmWEpsZEhWeWJpQnZLSFFzWlNrc2RDNXdjbTkwYjNSNWNHVXVZMjl1Wm1sbmRYSmxXR2h5UFdaMWJtTjBhVzl1S0NsN2RHaHBjeTV2Y0hScGIyNXpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2lUVzk2V0VoU0xtTnZibVpwWjNWeVpWaG9jam9nYzJWMGRHbHVaeUJ5WlhOd2IyNXpaVlI1Y0dVZ2RHOGdKMjF2ZWkxamFIVnVhMlZrTFdGeWNtRjVZblZtWm1WeUoxd2lLU3gwYUdsekxuaG9jaTV5WlhOd2IyNXpaVlI1Y0dVOVhDSnRiM290WTJoMWJtdGxaQzFoY25KaGVXSjFabVpsY2x3aWZTeDBMbkJ5YjNSdmRIbHdaUzV2YmxCeWIyZHlaWE56UlhabGJuUTlablZ1WTNScGIyNG9LWHQyWVhJZ1pUMTBhR2x6TG5ob2NpNXlaWE53YjI1elpUdDBhR2x6TG05d2RHbHZibk11WkdWaWRXY21KbWt1WkdWaWRXY29YQ0pOYjNwWVNGSXViMjVRY205bmNtVnpjMFYyWlc1ME9pQmNJaXh1WlhjZ1ZXbHVkRGhCY25KaGVTaGxLU2tzZEdocGN5NXZjSFJwYjI1ekxtOXVRMmgxYm1zb2JtVjNJRlZwYm5RNFFYSnlZWGtvWlNrcGZTeDBmU2gxS1R0bWRXNWpkR2x2YmlCaktHVXNkQ2w3ZG1GeUlISTlaUzVqYUdGeVEyOWtaVUYwS0hRcE8ybG1LSEkrUFRVMU1qazJKaVp5UEQwMU5qTXhPU2w3ZG1GeUlHNDlaUzVqYUdGeVEyOWtaVUYwS0hRck1TazdiajQ5TlRZek1qQW1KbTQ4UFRVM016UXpKaVlvY2owMk5UVXpOaXNvY2kwMU5USTVOanc4TVRBcEt5aHVMVFUyTXpJd0tTbDljbVYwZFhKdUlISjlablZ1WTNScGIyNGdjQ2hsS1h0bWIzSW9kbUZ5SUhROWJtVjNJRlZwYm5RNFFYSnlZWGtvWlM1c1pXNW5kR2dwTEhJOU1DeHVQVEE3Ymp4bExteGxibWQwYUR0dUt5c3BlM1poY2lCdlBWTjBjbWx1Wnk1d2NtOTBiM1I1Y0dVdVkyOWtaVkJ2YVc1MFFYUS9aUzVqYjJSbFVHOXBiblJCZENodUtUcGpLR1VzYmlrN2RGdHlLeXRkUFRJMU5TWnZmWEpsZEhWeWJpQjBmWFF1VFc5NlEyaDFibXRsWkVGeWNtRjVRblZtWm1WeVdFaFNQV1FzZEM1emRISnBibWRVYjBGeWNtRjVRblZtWm1WeVBYQjlMR1oxYm1OMGFXOXVLR1VzZEN4eUtYdGNJblZ6WlNCemRISnBZM1JjSWp0UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kQ3hjSWw5ZlpYTk5iMlIxYkdWY0lpeDdkbUZzZFdVNklUQjlLVHQyWVhJZ2JpeHZQWElvTUNrc2N6MW1kVzVqZEdsdmJpaGxLWHR5WlhSMWNtNGdPVDA5UFdWOGZERXdQVDA5Wlh4OE1UTTlQVDFsZlR0bWRXNWpkR2x2YmlCcEtHVXBlM0psZEhWeWJpQnpLR1VwZkh4bFBqMHpNaVltWlR3OU1USTJmV1oxYm1OMGFXOXVJR0VvWlNsN1ptOXlLSFpoY2lCMFBUQTdkQ0U5UFdVdWJHVnVaM1JvT3lzcmRDbHBaaWdoYVNobFczUmRLU2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0pOWlhSaFpHRjBZU0JwY3lCdWIzUWdkbUZzYVdRZ0tIQnlhVzUwWVdKc1pTa2dRVk5EU1VsY0lpazdjbVYwZFhKdUlGTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVXVZWEJ3Ykhrb1UzUnlhVzVuTEVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0dVcEtYMW1kVzVqZEdsdmJpQjFLR1VwZTNKbGRIVnliaUF4TWpnOVBTZ3hNamdtWlM1blpYUlZhVzUwT0Nnd0tTbDlablZ1WTNScGIyNGdaQ2hsS1h0eVpYUjFjbTRnWlM1blpYUlZhVzUwTXpJb01Td2hNU2w5Wm5WdVkzUnBiMjRnWXlobExIUXNjaWw3Y21WMGRYSnVJR1V1WW5sMFpVeGxibWQwYUMxMFBqMXlmV1oxYm1OMGFXOXVJSEFvWlN4MExISXBlMmxtS0dVdWMyeHBZMlVwY21WMGRYSnVJR1V1YzJ4cFkyVW9kQ3h5S1R0MllYSWdiajFsTG14bGJtZDBhRHQyYjJsa0lEQWhQVDF5SmlZb2JqMXlLVHRtYjNJb2RtRnlJRzg5Ym1WM0lGVnBiblE0UVhKeVlYa29iaTEwS1N4elBUQXNhVDEwTzJrOGJqdHBLeXNwYjF0ekt5dGRQV1ZiYVYwN2NtVjBkWEp1SUc5OWRDNWtaV052WkdWQlUwTkpTVDFoTEhRdVpXNWpiMlJsUVZORFNVazlablZ1WTNScGIyNG9aU2w3Wm05eUtIWmhjaUIwUFc1bGR5QlZhVzUwT0VGeWNtRjVLR1V1YkdWdVozUm9LU3h5UFRBN2NpRTlQV1V1YkdWdVozUm9PeXNyY2lsN2RtRnlJRzQ5WlM1amFHRnlRMjlrWlVGMEtISXBPMmxtS0NGcEtHNHBLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJazFsZEdGa1lYUmhJR052Ym5SaGFXNXpJR2x1ZG1Gc2FXUWdRVk5EU1VsY0lpazdkRnR5WFQxdWZYSmxkSFZ5YmlCMGZTeG1kVzVqZEdsdmJpaGxLWHRsVzJVdVRVVlRVMEZIUlQweFhUMWNJazFGVTFOQlIwVmNJaXhsVzJVdVZGSkJTVXhGVWxNOU1sMDlYQ0pVVWtGSlRFVlNVMXdpZlNodVBYUXVRMmgxYm10VWVYQmxmSHdvZEM1RGFIVnVhMVI1Y0dVOWUzMHBLVHQyWVhJZ2FEMW1kVzVqZEdsdmJpZ3BlMloxYm1OMGFXOXVJR1VvS1h0MGFHbHpMbUoxWm1abGNqMXVkV3hzTEhSb2FYTXVjRzl6YVhScGIyNDlNSDF5WlhSMWNtNGdaUzV3Y205MGIzUjVjR1V1Y0dGeWMyVTlablZ1WTNScGIyNG9aU3gwS1h0cFppZ3dQVDA5WlM1c1pXNW5kR2dtSm5RcGNtVjBkWEp1VzEwN2RtRnlJSElzY3oxYlhUdHBaaWh1ZFd4c1BUMTBhR2x6TG1KMVptWmxjaWwwYUdsekxtSjFabVpsY2oxbExIUm9hWE11Y0c5emFYUnBiMjQ5TUR0bGJITmxJR2xtS0hSb2FYTXVjRzl6YVhScGIyNDlQVDEwYUdsekxtSjFabVpsY2k1aWVYUmxUR1Z1WjNSb0tYUm9hWE11WW5WbVptVnlQV1VzZEdocGN5NXdiM05wZEdsdmJqMHdPMlZzYzJWN2RtRnlJR2s5ZEdocGN5NWlkV1ptWlhJdVlubDBaVXhsYm1kMGFDMTBhR2x6TG5CdmMybDBhVzl1TEdnOWJtVjNJRlZwYm5RNFFYSnlZWGtvYVN0bExtSjVkR1ZNWlc1bmRHZ3BMR1k5Y0NoMGFHbHpMbUoxWm1abGNpeDBhR2x6TG5CdmMybDBhVzl1S1R0b0xuTmxkQ2htTERBcE8zWmhjaUJzUFc1bGR5QlZhVzUwT0VGeWNtRjVLR1VwTzJndWMyVjBLR3dzYVNrc2RHaHBjeTVpZFdabVpYSTlhQ3gwYUdsekxuQnZjMmwwYVc5dVBUQjlabTl5S0RzN0tYdHBaaWdoWXloMGFHbHpMbUoxWm1abGNpeDBhR2x6TG5CdmMybDBhVzl1TERVcEtYSmxkSFZ5YmlCek8zWmhjaUJuUFhBb2RHaHBjeTVpZFdabVpYSXNkR2hwY3k1d2IzTnBkR2x2Yml4MGFHbHpMbkJ2YzJsMGFXOXVLelVwTEdJOWJtVjNJRVJoZEdGV2FXVjNLR2N1WW5WbVptVnlMR2N1WW5sMFpVOW1abk5sZEN4bkxtSjVkR1ZNWlc1bmRHZ3BMSGs5WkNoaUtUdHBaaWdoWXloMGFHbHpMbUoxWm1abGNpeDBhR2x6TG5CdmMybDBhVzl1TERVcmVTa3BjbVYwZFhKdUlITTdkbUZ5SUhZOWNDaDBhR2x6TG1KMVptWmxjaXgwYUdsekxuQnZjMmwwYVc5dUt6VXNkR2hwY3k1d2IzTnBkR2x2YmlzMUsza3BPMmxtS0hSb2FYTXVjRzl6YVhScGIyNHJQVFVyZVN4MUtHSXBLWEpsZEhWeWJpQnpMbkIxYzJnb2UyTm9kVzVyVkhsd1pUcHVMbFJTUVVsTVJWSlRMSFJ5WVdsc1pYSnpPaWh5UFhZc2JtVjNJRzh1VFdWMFlXUmhkR0VvWVNoeUtTa3BmU2tzY3p0ekxuQjFjMmdvZTJOb2RXNXJWSGx3WlRwdUxrMUZVMU5CUjBVc1pHRjBZVHAyZlNsOWZTeGxmU2dwTzNRdVEyaDFibXRRWVhKelpYSTlhSDBzWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8zWmhjaUJ1TzA5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBMRndpWDE5bGMwMXZaSFZzWlZ3aUxIdDJZV3gxWlRvaE1IMHBMR1oxYm1OMGFXOXVLR1VwZTJWYlpTNVBTejB3WFQxY0lrOUxYQ0lzWlZ0bExrTmhibU5sYkdWa1BURmRQVndpUTJGdVkyVnNaV1JjSWl4bFcyVXVWVzVyYm05M2JqMHlYVDFjSWxWdWEyNXZkMjVjSWl4bFcyVXVTVzUyWVd4cFpFRnlaM1Z0Wlc1MFBUTmRQVndpU1c1MllXeHBaRUZ5WjNWdFpXNTBYQ0lzWlZ0bExrUmxZV1JzYVc1bFJYaGpaV1ZrWldROU5GMDlYQ0pFWldGa2JHbHVaVVY0WTJWbFpHVmtYQ0lzWlZ0bExrNXZkRVp2ZFc1a1BUVmRQVndpVG05MFJtOTFibVJjSWl4bFcyVXVRV3h5WldGa2VVVjRhWE4wY3owMlhUMWNJa0ZzY21WaFpIbEZlR2x6ZEhOY0lpeGxXMlV1VUdWeWJXbHpjMmx2YmtSbGJtbGxaRDAzWFQxY0lsQmxjbTFwYzNOcGIyNUVaVzVwWldSY0lpeGxXMlV1VW1WemIzVnlZMlZGZUdoaGRYTjBaV1E5T0YwOVhDSlNaWE52ZFhKalpVVjRhR0YxYzNSbFpGd2lMR1ZiWlM1R1lXbHNaV1JRY21WamIyNWthWFJwYjI0OU9WMDlYQ0pHWVdsc1pXUlFjbVZqYjI1a2FYUnBiMjVjSWl4bFcyVXVRV0p2Y25SbFpEMHhNRjA5WENKQlltOXlkR1ZrWENJc1pWdGxMazkxZEU5bVVtRnVaMlU5TVRGZFBWd2lUM1YwVDJaU1lXNW5aVndpTEdWYlpTNVZibWx0Y0d4bGJXVnVkR1ZrUFRFeVhUMWNJbFZ1YVcxd2JHVnRaVzUwWldSY0lpeGxXMlV1U1c1MFpYSnVZV3c5TVROZFBWd2lTVzUwWlhKdVlXeGNJaXhsVzJVdVZXNWhkbUZwYkdGaWJHVTlNVFJkUFZ3aVZXNWhkbUZwYkdGaWJHVmNJaXhsVzJVdVJHRjBZVXh2YzNNOU1UVmRQVndpUkdGMFlVeHZjM05jSWl4bFcyVXVWVzVoZFhSb1pXNTBhV05oZEdWa1BURTJYVDFjSWxWdVlYVjBhR1Z1ZEdsallYUmxaRndpZlNodVBYUXVRMjlrWlh4OEtIUXVRMjlrWlQxN2ZTa3BMSFF1YUhSMGNGTjBZWFIxYzFSdlEyOWtaVDFtZFc1amRHbHZiaWhsS1h0emQybDBZMmdvWlNsN1kyRnpaU0F3T25KbGRIVnliaUJ1TGtsdWRHVnlibUZzTzJOaGMyVWdNakF3T25KbGRIVnliaUJ1TGs5TE8yTmhjMlVnTkRBd09uSmxkSFZ5YmlCdUxrbHVkbUZzYVdSQmNtZDFiV1Z1ZER0allYTmxJRFF3TVRweVpYUjFjbTRnYmk1VmJtRjFkR2hsYm5ScFkyRjBaV1E3WTJGelpTQTBNRE02Y21WMGRYSnVJRzR1VUdWeWJXbHpjMmx2YmtSbGJtbGxaRHRqWVhObElEUXdORHB5WlhSMWNtNGdiaTVPYjNSR2IzVnVaRHRqWVhObElEUXdPVHB5WlhSMWNtNGdiaTVCWW05eWRHVmtPMk5oYzJVZ05ERXlPbkpsZEhWeWJpQnVMa1poYVd4bFpGQnlaV052Ym1ScGRHbHZianRqWVhObElEUXlPVHB5WlhSMWNtNGdiaTVTWlhOdmRYSmpaVVY0YUdGMWMzUmxaRHRqWVhObElEUTVPVHB5WlhSMWNtNGdiaTVEWVc1alpXeGxaRHRqWVhObElEVXdNRHB5WlhSMWNtNGdiaTVWYm10dWIzZHVPMk5oYzJVZ05UQXhPbkpsZEhWeWJpQnVMbFZ1YVcxd2JHVnRaVzUwWldRN1kyRnpaU0ExTURNNmNtVjBkWEp1SUc0dVZXNWhkbUZwYkdGaWJHVTdZMkZ6WlNBMU1EUTZjbVYwZFhKdUlHNHVSR1ZoWkd4cGJtVkZlR05sWldSbFpEdGtaV1poZFd4ME9uSmxkSFZ5YmlCdUxsVnVhMjV2ZDI1OWZYMHNablZ1WTNScGIyNG9aU3gwTEhJcGUxd2lkWE5sSUhOMGNtbGpkRndpTzA5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBMRndpWDE5bGMwMXZaSFZzWlZ3aUxIdDJZV3gxWlRvaE1IMHBPM1poY2lCdVBYSW9NeWtzYnoxeUtEUXBMSE05Y2lnMktTeHBQWElvTVRJcExHRTljaWczS1N4MVBYSW9OU2tzWkQxeUtEa3BMR005Y2lneE15a3NjRDF5S0RFMUtTeG9QWElvTWlrN0lXWjFibU4wYVc5dUtHVXBlMlV1YzJWMFJHVm1ZWFZzZEZSeVlXNXpjRzl5ZEQxdkxuTmxkRVJsWm1GMWJIUlVjbUZ1YzNCdmNuUkdZV04wYjNKNUxHVXVRM0p2YzNOQ2NtOTNjMlZ5U0hSMGNGUnlZVzV6Y0c5eWREMTFMa055YjNOelFuSnZkM05sY2toMGRIQlVjbUZ1YzNCdmNuUXNaUzVHWlhSamFGSmxZV1JoWW14bFUzUnlaV0Z0VkhKaGJuTndiM0owUFhNdVJtVjBZMmhTWldGa1lXSnNaVk4wY21WaGJWUnlZVzV6Y0c5eWRDeGxMbGhvY2xSeVlXNXpjRzl5ZEQxaExsaG9jbFJ5WVc1emNHOXlkQ3hsTGxkbFluTnZZMnRsZEZSeVlXNXpjRzl5ZEQxcExsZGxZbk52WTJ0bGRGUnlZVzV6Y0c5eWRDeGxMa052WkdVOVpDNURiMlJsTEdVdVRXVjBZV1JoZEdFOWJpNUNjbTkzYzJWeVNHVmhaR1Z5Y3l4bExtTnNhV1Z1ZEQxbWRXNWpkR2x2YmlobExIUXBlM0psZEhWeWJpQm9MbU5zYVdWdWRDaGxMSFFwZlN4bExtbHVkbTlyWlQxakxtbHVkbTlyWlN4bExuVnVZWEo1UFhBdWRXNWhjbmw5S0hRdVozSndZM3g4S0hRdVozSndZejE3ZlNrcGZTeG1kVzVqZEdsdmJpaGxMSFFzY2lsN1hDSjFjMlVnYzNSeWFXTjBYQ0k3ZG1GeUlHNDdablZ1WTNScGIyNGdieWdwZTJsbUtIWnZhV1FnTUNFOVBXNHBjbVYwZFhKdUlHNDdhV1lvV0UxTVNIUjBjRkpsY1hWbGMzUXBlMjQ5Ym1WM0lGaE5URWgwZEhCU1pYRjFaWE4wTzNSeWVYdHVMbTl3Wlc0b1hDSkhSVlJjSWl4Y0ltaDBkSEJ6T2k4dmJHOWpZV3hvYjNOMFhDSXBmV05oZEdOb0tHVXBlMzE5Y21WMGRYSnVJRzU5Wm5WdVkzUnBiMjRnY3lobEtYdDJZWElnZEQxdktDazdhV1lvSVhRcGNtVjBkWEp1SVRFN2RISjVlM0psZEhWeWJpQjBMbkpsYzNCdmJuTmxWSGx3WlQxbExIUXVjbVZ6Y0c5dWMyVlVlWEJsUFQwOVpYMWpZWFJqYUNobEtYdDljbVYwZFhKdUlURjlUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hRc1hDSmZYMlZ6VFc5a2RXeGxYQ0lzZTNaaGJIVmxPaUV3ZlNrc2RDNTRhSEpUZFhCd2IzSjBjMUpsYzNCdmJuTmxWSGx3WlQxekxIUXVaR1YwWldOMFRXOTZXRWhTVTNWd2NHOXlkRDFtZFc1amRHbHZiaWdwZTNKbGRIVnlibHdpZFc1a1pXWnBibVZrWENJaFBYUjVjR1Z2WmlCWVRVeElkSFJ3VW1WeGRXVnpkQ1ltY3loY0ltMXZlaTFqYUhWdWEyVmtMV0Z5Y21GNVluVm1abVZ5WENJcGZTeDBMbVJsZEdWamRGaElVazkyWlhKeWFXUmxUV2x0WlZSNWNHVlRkWEJ3YjNKMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdVhDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JRmhOVEVoMGRIQlNaWEYxWlhOMEppWllUVXhJZEhSd1VtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGtvWENKdmRtVnljbWxrWlUxcGJXVlVlWEJsWENJcGZYMHNablZ1WTNScGIyNG9aU3gwTEhJcGUxd2lkWE5sSUhOMGNtbGpkRndpTzA5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBMRndpWDE5bGMwMXZaSFZzWlZ3aUxIdDJZV3gxWlRvaE1IMHBPM1poY2lCdUxHODljaWd4S1N4elBYSW9PQ2s3SVdaMWJtTjBhVzl1S0dVcGUyVmJaUzVHU1U1SlUwaGZVMFZPUkQweFhUMWNJa1pKVGtsVFNGOVRSVTVFWENKOUtHNThmQ2h1UFh0OUtTazdkbUZ5SUdrOWJtVjNJRlZwYm5RNFFYSnlZWGtvV3pGZEtUdDBMbGRsWW5OdlkydGxkRlJ5WVc1emNHOXlkRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJtZFc1amRHbHZiaWhsS1h0eVpYUjFjbTRnWm5WdVkzUnBiMjRvWlNsN1pTNWtaV0oxWnlZbWJ5NWtaV0oxWnloY0luZGxZbk52WTJ0bGRGSmxjWFZsYzNSY0lpeGxLVHQyWVhJZ2RDeHlQV1oxYm1OMGFXOXVLR1VwZTJsbUtGd2lhSFIwY0hNNkx5OWNJajA5UFdVdWMzVmljM1J5S0RBc09Da3BjbVYwZFhKdVhDSjNjM002THk5Y0lpdGxMbk4xWW5OMGNpZzRLVHRwWmloY0ltaDBkSEE2THk5Y0lqMDlQV1V1YzNWaWMzUnlLREFzTnlrcGNtVjBkWEp1WENKM2N6b3ZMMXdpSzJVdWMzVmljM1J5S0RjcE8zUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lsZGxZbk52WTJ0bGRDQjBjbUZ1YzNCdmNuUWdZMjl1YzNSeWRXTjBaV1FnZDJsMGFDQnViMjR0YUhSMGNITTZMeThnYjNJZ2FIUjBjRG92THlCb2IzTjBMbHdpS1gwb1pTNTFjbXdwTEdFOVcxMDdablZ1WTNScGIyNGdkU2hsS1h0cFppaGxQVDA5Ymk1R1NVNUpVMGhmVTBWT1JDbDBMbk5sYm1Rb2FTazdaV3h6Wlh0MllYSWdjajFsTEc4OWJtVjNJRWx1ZERoQmNuSmhlU2h5TG1KNWRHVk1aVzVuZEdnck1TazdieTV6WlhRb2JtVjNJRlZwYm5RNFFYSnlZWGtvV3pCZEtTa3NieTV6WlhRb2Npd3hLU3gwTG5ObGJtUW9ieWw5ZlhKbGRIVnlibnR6Wlc1a1RXVnpjMkZuWlRwbWRXNWpkR2x2YmlobEtYdDBKaVowTG5KbFlXUjVVM1JoZEdVaFBUMTBMa05QVGs1RlExUkpUa2MvZFNobEtUcGhMbkIxYzJnb1pTbDlMR1pwYm1semFGTmxibVE2Wm5WdVkzUnBiMjRvS1h0MEppWjBMbkpsWVdSNVUzUmhkR1VoUFQxMExrTlBUazVGUTFSSlRrYy9kU2h1TGtaSlRrbFRTRjlUUlU1RUtUcGhMbkIxYzJnb2JpNUdTVTVKVTBoZlUwVk9SQ2w5TEhOMFlYSjBPbVoxYm1OMGFXOXVLRzRwZXloMFBXNWxkeUJYWldKVGIyTnJaWFFvY2l4YlhDSm5jbkJqTFhkbFluTnZZMnRsZEhOY0lsMHBLUzVpYVc1aGNubFVlWEJsUFZ3aVlYSnlZWGxpZFdabVpYSmNJaXgwTG05dWIzQmxiajFtZFc1amRHbHZiaWdwZTNaaGNpQnlPMlV1WkdWaWRXY21KbTh1WkdWaWRXY29YQ0ozWldKemIyTnJaWFJTWlhGMVpYTjBMbTl1YjNCbGJsd2lLU3gwTG5ObGJtUW9LSEk5WENKY0lpeHVMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aU3gwS1h0eUt6MWxLMXdpT2lCY0lpdDBMbXB2YVc0b1hDSXNJRndpS1N0Y0lseGNjbHhjYmx3aWZTa3NjeTVsYm1OdlpHVkJVME5KU1NoeUtTa3BMR0V1Wm05eVJXRmphQ2htZFc1amRHbHZiaWhsS1h0MUtHVXBmU2w5TEhRdWIyNWpiRzl6WlQxbWRXNWpkR2x2YmloMEtYdGxMbVJsWW5WbkppWnZMbVJsWW5WbktGd2lkMlZpYzI5amEyVjBVbVZ4ZFdWemRDNXZibU5zYjNObFhDSXNkQ2tzWlM1dmJrVnVaQ2dwZlN4MExtOXVaWEp5YjNJOVpuVnVZM1JwYjI0b2RDbDdaUzVrWldKMVp5WW1ieTVrWldKMVp5aGNJbmRsWW5OdlkydGxkRkpsY1hWbGMzUXViMjVsY25KdmNsd2lMSFFwZlN4MExtOXViV1Z6YzJGblpUMW1kVzVqZEdsdmJpaDBLWHRsTG05dVEyaDFibXNvYm1WM0lGVnBiblE0UVhKeVlYa29kQzVrWVhSaEtTbDlmU3hqWVc1alpXdzZablZ1WTNScGIyNG9LWHRsTG1SbFluVm5KaVp2TG1SbFluVm5LRndpZDJWaWMyOWphMlYwTG1GaWIzSjBYQ0lwTEhRdVkyeHZjMlVvS1gxOWZTaGxLWDE5ZlN4bWRXNWpkR2x2YmlobExIUXNjaWw3WENKMWMyVWdjM1J5YVdOMFhDSTdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hRc1hDSmZYMlZ6VFc5a2RXeGxYQ0lzZTNaaGJIVmxPaUV3ZlNrN2RtRnlJRzQ5Y2lneUtUdDBMbWx1ZG05clpUMW1kVzVqZEdsdmJpaGxMSFFwZTJsbUtHVXVjbVZ4ZFdWemRGTjBjbVZoYlNsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENJdWFXNTJiMnRsSUdOaGJtNXZkQ0JpWlNCMWMyVmtJSGRwZEdnZ1kyeHBaVzUwTFhOMGNtVmhiV2x1WnlCdFpYUm9iMlJ6TGlCVmMyVWdMbU5zYVdWdWRDQnBibk4wWldGa0xsd2lLVHQyWVhJZ2NqMXVMbU5zYVdWdWRDaGxMSHRvYjNOME9uUXVhRzl6ZEN4MGNtRnVjM0J2Y25RNmRDNTBjbUZ1YzNCdmNuUXNaR1ZpZFdjNmRDNWtaV0oxWjMwcE8zSmxkSFZ5YmlCMExtOXVTR1ZoWkdWeWN5WW1jaTV2YmtobFlXUmxjbk1vZEM1dmJraGxZV1JsY25NcExIUXViMjVOWlhOellXZGxKaVp5TG05dVRXVnpjMkZuWlNoMExtOXVUV1Z6YzJGblpTa3NkQzV2YmtWdVpDWW1jaTV2YmtWdVpDaDBMbTl1Ulc1a0tTeHlMbk4wWVhKMEtIUXViV1YwWVdSaGRHRXBMSEl1YzJWdVpDaDBMbkpsY1hWbGMzUXBMSEl1Wm1sdWFYTm9VMlZ1WkNncExIdGpiRzl6WlRwbWRXNWpkR2x2YmlncGUzSXVZMnh2YzJVb0tYMTlmWDBzWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTEhRdVpuSmhiV1ZTWlhGMVpYTjBQV1oxYm1OMGFXOXVLR1VwZTNaaGNpQjBQV1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVLQ2tzY2oxdVpYY2dRWEp5WVhsQ2RXWm1aWElvZEM1aWVYUmxUR1Z1WjNSb0t6VXBPM0psZEhWeWJpQnVaWGNnUkdGMFlWWnBaWGNvY2l3eExEUXBMbk5sZEZWcGJuUXpNaWd3TEhRdWJHVnVaM1JvTENFeEtTeHVaWGNnVldsdWREaEJjbkpoZVNoeUxEVXBMbk5sZENoMEtTeHVaWGNnVldsdWREaEJjbkpoZVNoeUtYMTlMR1oxYm1OMGFXOXVLR1VzZEN4eUtYdGNJblZ6WlNCemRISnBZM1JjSWp0UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kQ3hjSWw5ZlpYTk5iMlIxYkdWY0lpeDdkbUZzZFdVNklUQjlLVHQyWVhJZ2JqMXlLREFwTEc4OWNpZ3lLVHQwTG5WdVlYSjVQV1oxYm1OMGFXOXVLR1VzZENsN2FXWW9aUzV5WlhOd2IyNXpaVk4wY21WaGJTbDBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSXVkVzVoY25rZ1kyRnVibTkwSUdKbElIVnpaV1FnZDJsMGFDQnpaWEoyWlhJdGMzUnlaV0Z0YVc1bklHMWxkR2h2WkhNdUlGVnpaU0F1YVc1MmIydGxJRzl5SUM1amJHbGxiblFnYVc1emRHVmhaQzVjSWlrN2FXWW9aUzV5WlhGMVpYTjBVM1J5WldGdEtYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lpNTFibUZ5ZVNCallXNXViM1FnWW1VZ2RYTmxaQ0IzYVhSb0lHTnNhV1Z1ZEMxemRISmxZVzFwYm1jZ2JXVjBhRzlrY3k0Z1ZYTmxJQzVqYkdsbGJuUWdhVzV6ZEdWaFpDNWNJaWs3ZG1GeUlISTliblZzYkN4elBXNTFiR3dzYVQxdkxtTnNhV1Z1ZENobExIdG9iM04wT25RdWFHOXpkQ3gwY21GdWMzQnZjblE2ZEM1MGNtRnVjM0J2Y25Rc1pHVmlkV2M2ZEM1a1pXSjFaMzBwTzNKbGRIVnliaUJwTG05dVNHVmhaR1Z5Y3lobWRXNWpkR2x2YmlobEtYdHlQV1Y5S1N4cExtOXVUV1Z6YzJGblpTaG1kVzVqZEdsdmJpaGxLWHR6UFdWOUtTeHBMbTl1Ulc1a0tHWjFibU4wYVc5dUtHVXNieXhwS1h0MExtOXVSVzVrS0h0emRHRjBkWE02WlN4emRHRjBkWE5OWlhOellXZGxPbThzYUdWaFpHVnljenB5Zkh4dVpYY2diaTVOWlhSaFpHRjBZU3h0WlhOellXZGxPbk1zZEhKaGFXeGxjbk02YVgwcGZTa3NhUzV6ZEdGeWRDaDBMbTFsZEdGa1lYUmhLU3hwTG5ObGJtUW9kQzV5WlhGMVpYTjBLU3hwTG1acGJtbHphRk5sYm1Rb0tTeDdZMnh2YzJVNlpuVnVZM1JwYjI0b0tYdHBMbU5zYjNObEtDbDlmWDE5WFNsOUtUc2lMQ0l2THlCemIzVnlZMlU2SUdkdmIyZHNaUzl5Y0dNdmMzUmhkSFZ6TG5CeWIzUnZYRzR2S2lwY2JpQXFJRUJtYVd4bGIzWmxjblpwWlhkY2JpQXFJRUJsYm1oaGJtTmxZV0pzWlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHR0YVhOemFXNW5VbVZ4ZFdseVpYMGdjbVZ3YjNKMGN5Qmxjbkp2Y2lCdmJpQnBiWEJzYVdOcGRDQjBlWEJsSUhWellXZGxjeTVjYmlBcUlFQnpkWEJ3Y21WemN5QjdiV1Z6YzJGblpVTnZiblpsYm5ScGIyNXpmU0JLVXlCRGIyMXdhV3hsY2lCeVpYQnZjblJ6SUdGdUlHVnljbTl5SUdsbUlHRWdkbUZ5YVdGaWJHVWdiM0pjYmlBcUlDQWdJQ0JtYVdWc1pDQnpkR0Z5ZEhNZ2QybDBhQ0FuVFZOSFh5Y2dZVzVrSUdsemJpZDBJR0VnZEhKaGJuTnNZWFJoWW14bElHMWxjM05oWjJVdVhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JpOHZJRWRGVGtWU1FWUkZSQ0JEVDBSRklDMHRJRVJQSUU1UFZDQkZSRWxVSVZ4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ0tpOWNiaTh2SUVCMGN5MXViMk5vWldOclhHNWNiblpoY2lCcWMzQmlJRDBnY21WeGRXbHlaU2duWjI5dloyeGxMWEJ5YjNSdlluVm1KeWs3WEc1MllYSWdaMjl2WnlBOUlHcHpjR0k3WEc1MllYSWdaMnh2WW1Gc0lEMGdLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnBaaUFvZEdocGN5a2dleUJ5WlhSMWNtNGdkR2hwY3pzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHNnY21WMGRYSnVJSGRwYm1SdmR6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlHZHNiMkpoYkNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUdkc2IySmhiRHNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JSE5sYkdZZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCelpXeG1PeUI5WEc0Z0lISmxkSFZ5YmlCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dWZTNWpZV3hzS0c1MWJHd3BLVHRjYmx4dWRtRnlJR2R2YjJkc1pWOXdjbTkwYjJKMVpsOWhibmxmY0dJZ1BTQnlaWEYxYVhKbEtDZG5iMjluYkdVdGNISnZkRzlpZFdZdloyOXZaMnhsTDNCeWIzUnZZblZtTDJGdWVWOXdZaTVxY3ljcE8xeHVaMjl2Wnk1dlltcGxZM1F1WlhoMFpXNWtLSEJ5YjNSdkxDQm5iMjluYkdWZmNISnZkRzlpZFdaZllXNTVYM0JpS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3ljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE1nUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUhCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpMbkpsY0dWaGRHVmtSbWxsYkdSelh5d2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWekxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpKenRjYm4xY2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE11Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3pOZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3k1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ1kyOWtaVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQXdLU3hjYmlBZ0lDQnRaWE56WVdkbE9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRElzSUZ3aVhDSXBMRnh1SUNBZ0lHUmxkR0ZwYkhOTWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUkVaWFJoYVd4elRHbHpkQ2dwTEZ4dUlDQWdJR2R2YjJkc1pWOXdjbTkwYjJKMVpsOWhibmxmY0dJdVFXNTVMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3p0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVOdlpHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSTlpYTnpZV2RsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5Qm5iMjluYkdWZmNISnZkRzlpZFdaZllXNTVYM0JpTGtGdWVUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4bmIyOW5iR1ZmY0hKdmRHOWlkV1pmWVc1NVgzQmlMa0Z1ZVM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkVSbGRHRnBiSE1vZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWMzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRMjlrWlNncE8xeHVJQ0JwWmlBb1ppQWhQVDBnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVbHVkRE15S0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRTFsYzNOaFoyVW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJFWlhSaGFXeHpUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0JuYjI5bmJHVmZjSEp2ZEc5aWRXWmZZVzU1WDNCaUxrRnVlUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JwYm5Rek1pQmpiMlJsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdWNISnZkRzkwZVhCbExtZGxkRU52WkdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdWNISnZkRzkwZVhCbExuTmxkRU52WkdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTBsdWRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2diV1Z6YzJGblpTQTlJREk3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpMbkJ5YjNSdmRIbHdaUzVuWlhSTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWekxuQnliM1J2ZEhsd1pTNXpaWFJOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TlRkSEpwYm1kR2FXVnNaQ2gwYUdsekxDQXlMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlU0JrWlhSaGFXeHpJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVUNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6TG5CeWIzUnZkSGx3WlM1blpYUkVaWFJoYVd4elRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVUNTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2daMjl2WjJ4bFgzQnliM1J2WW5WbVgyRnVlVjl3WWk1QmJua3NJRE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlVDU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE45SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpMbkJ5YjNSdmRIbHdaUzV6WlhSRVpYUmhhV3h6VEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJuazlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdWNISnZkRzkwZVhCbExtRmtaRVJsZEdGcGJITWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNeXdnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVJHVjBZV2xzYzB4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFJHVjBZV2xzYzB4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1bmIyOW5MbTlpYW1WamRDNWxlSFJsYm1Rb1pYaHdiM0owY3l3Z2NISnZkRzh1WjI5dloyeGxMbkp3WXlrN1hHNGlMQ0l2THlCemIzVnlZMlU2SUhCeWIzUnZMM0p3WXk5M1pXSnlkR012ZGpFdlozSndZeTV3Y205MGIxeHVMeW9xWEc0Z0tpQkFabWxzWlc5MlpYSjJhV1YzWEc0Z0tpQkFaVzVvWVc1alpXRmliR1ZjYmlBcUlFQnpkWEJ3Y21WemN5QjdiV2x6YzJsdVoxSmxjWFZwY21WOUlISmxjRzl5ZEhNZ1pYSnliM0lnYjI0Z2FXMXdiR2xqYVhRZ2RIbHdaU0IxYzJGblpYTXVYRzRnS2lCQWMzVndjSEpsYzNNZ2UyMWxjM05oWjJWRGIyNTJaVzUwYVc5dWMzMGdTbE1nUTI5dGNHbHNaWElnY21Wd2IzSjBjeUJoYmlCbGNuSnZjaUJwWmlCaElIWmhjbWxoWW14bElHOXlYRzRnS2lBZ0lDQWdabWxsYkdRZ2MzUmhjblJ6SUhkcGRHZ2dKMDFUUjE4bklHRnVaQ0JwYzI0bmRDQmhJSFJ5WVc1emJHRjBZV0pzWlNCdFpYTnpZV2RsTGx4dUlDb2dRSEIxWW14cFkxeHVJQ292WEc0dkx5QkhSVTVGVWtGVVJVUWdRMDlFUlNBdExTQkVUeUJPVDFRZ1JVUkpWQ0ZjYmk4cUlHVnpiR2x1ZEMxa2FYTmhZbXhsSUNvdlhHNHZMeUJBZEhNdGJtOWphR1ZqYTF4dVhHNTJZWElnYW5Od1lpQTlJSEpsY1hWcGNtVW9KMmR2YjJkc1pTMXdjbTkwYjJKMVppY3BPMXh1ZG1GeUlHZHZiMmNnUFNCcWMzQmlPMXh1ZG1GeUlHZHNiMkpoYkNBOUlDaG1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2FXWWdLSFJvYVhNcElIc2djbVYwZFhKdUlIUm9hWE03SUgxY2JpQWdhV1lnS0hSNWNHVnZaaUIzYVc1a2IzY2dJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQjNhVzVrYjNjN0lIMWNiaUFnYVdZZ0tIUjVjR1Z2WmlCbmJHOWlZV3dnSVQwOUlDZDFibVJsWm1sdVpXUW5LU0I3SUhKbGRIVnliaUJuYkc5aVlXdzdJSDFjYmlBZ2FXWWdLSFI1Y0dWdlppQnpaV3htSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZXlCeVpYUjFjbTRnYzJWc1pqc2dmVnh1SUNCeVpYUjFjbTRnUm5WdVkzUnBiMjRvSjNKbGRIVnliaUIwYUdsekp5a29LVHRjYm4wdVkyRnNiQ2h1ZFd4c0tTazdYRzVjYm5aaGNpQm5iMjluYkdWZmNISnZkRzlpZFdaZlpIVnlZWFJwYjI1ZmNHSWdQU0J5WlhGMWFYSmxLQ2RuYjI5bmJHVXRjSEp2ZEc5aWRXWXZaMjl2WjJ4bEwzQnliM1J2WW5WbUwyUjFjbUYwYVc5dVgzQmlMbXB6SnlrN1hHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9jSEp2ZEc4c0lHZHZiMmRzWlY5d2NtOTBiMkoxWmw5a2RYSmhkR2x2Ymw5d1lpazdYRzUyWVhJZ1oyOXZaMnhsWDNKd1kxOXpkR0YwZFhOZmNHSWdQU0J5WlhGMWFYSmxLQ2N1TGk4dUxpOHVMaTh1TGk5bmIyOW5iR1V2Y25CakwzTjBZWFIxYzE5d1lpNXFjeWNwTzF4dVoyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a0tIQnliM1J2TENCbmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1VWVYQmxRMkZ6WlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeWNzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNVVlWEJsUTJGelpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25NbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk1uTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE4cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZENjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6Snp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRTFsYzNOaFoyVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlVuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlVzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlVuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKeklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25Nbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJVdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVW5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3lBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk11WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM01nUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTV5WlhCbFlYUmxaRVpwWld4a2MxOHNJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kekxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3ljN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaEp6dGNibjFjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aWDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JrWVhSaE9pQnRjMmN1WjJWMFJHRjBZVjloYzBJMk5DZ3BMRnh1SUNBZ0lHVnZiVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTWl3Z1ptRnNjMlVwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsQmhZMnRsZEUxbGMzTmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsQmhZMnRsZEUxbGMzTmhaMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdJVlZwYm5RNFFYSnlZWGw5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUo1ZEdWektDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFUmhkR0VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFVnZiU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBSR0YwWVY5aGMxVTRLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNlWFJsY3loY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJGYjIwb0tUdGNiaUFnYVdZZ0tHWXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZDYjI5c0tGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW5sMFpYTWdaR0YwWVNBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBSR0YwWVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW5sMFpYTWdaR0YwWVNBOUlERTdYRzRnS2lCVWFHbHpJR2x6SUdFZ2RIbHdaUzFqYjI1MlpYSnphVzl1SUhkeVlYQndaWElnWVhKdmRXNWtJR0JuWlhSRVlYUmhLQ2xnWEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVaMlYwUkdGMFlWOWhjMEkyTkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WW5sMFpYTkJjMEkyTkNoY2JpQWdJQ0FnSUhSb2FYTXVaMlYwUkdGMFlTZ3BLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW5sMFpYTWdaR0YwWVNBOUlERTdYRzRnS2lCT2IzUmxJSFJvWVhRZ1ZXbHVkRGhCY25KaGVTQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0lHOXVJR0ZzYkNCaWNtOTNjMlZ5Y3k1Y2JpQXFJRUJ6WldVZ2FIUjBjRG92TDJOaGJtbDFjMlV1WTI5dEwxVnBiblE0UVhKeVlYbGNiaUFxSUZSb2FYTWdhWE1nWVNCMGVYQmxMV052Ym5abGNuTnBiMjRnZDNKaGNIQmxjaUJoY205MWJtUWdZR2RsZEVSaGRHRW9LV0JjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsQmhZMnRsZEUxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG1kbGRFUmhkR0ZmWVhOVk9DQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hWV2x1ZERoQmNuSmhlWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVpZVhSbGMwRnpWVGdvWEc0Z0lDQWdJQ0IwYUdsekxtZGxkRVJoZEdFb0tTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJU2h6ZEhKcGJtZDhWV2x1ZERoQmNuSmhlU2w5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNXpaWFJFWVhSaElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOQ2VYUmxjMFpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR1Z2YlNBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVdWNISnZkRzkwZVhCbExtZGxkRVZ2YlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdWMyVjBSVzl0SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5DYjI5c1pXRnVSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKbFlXMTlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JwWkRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0F3S1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcxOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKbFlXMDdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzB1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JWYVc1ME5qUW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTV1FvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzB1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBTV1FvS1R0Y2JpQWdhV1lnS0dZZ0lUMDlJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVmFXNTBOalFvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQjFhVzUwTmpRZ2FXUWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzV3Y205MGIzUjVjR1V1WjJWMFNXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKbFlXMHVjSEp2ZEc5MGVYQmxMbk5sZEVsa0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOSmJuUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCUGJtVnZaaUJuY205MWNDQmtaV1pwYm1sMGFXOXVjeUJtYjNJZ2RHaHBjeUJ0WlhOellXZGxMaUJGWVdOb0lHZHliM1Z3SUdSbFptbHVaWE1nZEdobElHWnBaV3hrWEc0Z0tpQnVkVzFpWlhKeklHSmxiRzl1WjJsdVp5QjBieUIwYUdGMElHZHliM1Z3TGlCWGFHVnVJRzltSUhSb1pYTmxJR1pwWld4a2N5Y2dkbUZzZFdVZ2FYTWdjMlYwTENCaGJHeGNiaUFxSUc5MGFHVnlJR1pwWld4a2N5QnBiaUIwYUdVZ1ozSnZkWEFnWVhKbElHTnNaV0Z5WldRdUlFUjFjbWx1WnlCa1pYTmxjbWxoYkdsNllYUnBiMjRzSUdsbUlHMTFiSFJwY0d4bFhHNGdLaUJtYVdWc1pITWdZWEpsSUdWdVkyOTFiblJsY21Wa0lHWnZjaUJoSUdkeWIzVndMQ0J2Ym14NUlIUm9aU0JzWVhOMElIWmhiSFZsSUhObFpXNGdkMmxzYkNCaVpTQnJaWEIwTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUd2hRWEp5WVhrOGJuVnRZbVZ5UGo1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelh5QTlJRnRiTWl3elhWMDdYRzVjYmk4cUtseHVJQ29nUUdWdWRXMGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTGxSNWNHVkRZWE5sSUQwZ2UxeHVJQ0JVV1ZCRlgwNVBWRjlUUlZRNklEQXNYRzRnSUVoRlFVUkZVbE02SURJc1hHNGdJRTFGVTFOQlIwVTZJRE5jYm4wN1hHNWNiaThxS2x4dUlDb2dRSEpsZEhWeWJpQjdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExsUjVjR1ZEWVhObGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1kbGRGUjVjR1ZEWVhObElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1VWVYQmxRMkZ6WlgwZ0tpOG9hbk53WWk1TlpYTnpZV2RsTG1OdmJYQjFkR1ZQYm1WdlprTmhjMlVvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFNrcE8xeHVmVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkSDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCemRISmxZVzA2SUNobUlEMGdiWE5uTG1kbGRGTjBjbVZoYlNncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lHaGxZV1JsY25NNklDaG1JRDBnYlhObkxtZGxkRWhsWVdSbGNuTW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwTEZ4dUlDQWdJRzFsYzNOaFoyVTZJQ2htSUQwZ2JYTm5MbWRsZEUxbGMzTmhaMlVvS1NrZ0ppWWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZER0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1I5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1F1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGTjBjbVZoYlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3p0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNHVmhaR1Z5Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRXVnpjMkZuWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFUzUnlaV0Z0S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFNHVmhaR1Z5Y3lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFRXVnpjMkZuWlNncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCVGRISmxZVzBnYzNSeVpXRnRJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUlRkSEpsWVcwZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzE5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzE4ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1elpYUlRkSEpsWVcwZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1amJHVmhjbE4wY21WaGJTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVGRISmxZVzBvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1oaGMxTjBjbVZoYlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1VtVnhkV1Z6ZEVobFlXUmxjbk1nYUdWaFpHVnljeUE5SURJN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWMzMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUklaV0ZrWlhKeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEVobFlXUmxjbk45SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTXNJRElwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1YzJWMFNHVmhaR1Z5Y3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTWl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelgxc3dYU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpJWldGa1pYSnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFaGxZV1JsY25Nb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtaGhjMGhsWVdSbGNuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRkpsY1hWbGMzUk5aWE56WVdkbElHMWxjM05oWjJVZ1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVaMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbGZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsTENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMGZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxkRTFsYzNOaFoyVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lETXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJOWlhOellXZGxLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVvWVhOTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25NdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKemZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQnRaWFJvYjJRNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpa3NYRzRnSUNBZ2JXVjBZV1JoZEdFNklDaG1JRDBnYlhObkxtZGxkRTFsZEdGa1lYUmhLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtTeGNiaUFnSUNCMGFXMWxiM1YwT2lBb1ppQTlJRzF6Wnk1blpYUlVhVzFsYjNWMEtDa3BJQ1ltSUdkdmIyZHNaVjl3Y205MGIySjFabDlrZFhKaGRHbHZibDl3WWk1RWRYSmhkR2x2Ymk1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKemZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEUxbGRHaHZaQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUV1YwWVdSaGRHRW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUdkdmIyZHNaVjl3Y205MGIySjFabDlrZFhKaGRHbHZibDl3WWk1RWRYSmhkR2x2Ymp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3huYjI5bmJHVmZjSEp2ZEc5aWRXWmZaSFZ5WVhScGIyNWZjR0l1UkhWeVlYUnBiMjR1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJVYVcxbGIzVjBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEVobFlXUmxjbk45SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVFdWMGFHOWtLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVFdWMFlXUmhkR0VvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGUnBiV1Z2ZFhRb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXpMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJR2R2YjJkc1pWOXdjbTkwYjJKMVpsOWtkWEpoZEdsdmJsOXdZaTVFZFhKaGRHbHZiaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2diV1YwYUc5a0lEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXdjbTkwYjNSNWNHVXVaMlYwVFdWMGFHOWtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1YzJWMFRXVjBhRzlrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVFdWMFlXUmhkR0VnYldWMFlXUmhkR0VnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0Y5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25NdWNISnZkRzkwZVhCbExtZGxkRTFsZEdGa1lYUmhJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXNJRElwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbkJ5YjNSdmRIbHdaUzV6WlhSTlpYUmhaR0YwWVNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKTlpYUmhaR0YwWVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJOWlhSaFpHRjBZU2gxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTXVjSEp2ZEc5MGVYQmxMbWhoYzAxbGRHRmtZWFJoSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCbmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjRnZEdsdFpXOTFkQ0E5SURNN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbkJ5YjNSdmRIbHdaUzVuWlhSVWFXMWxiM1YwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2daMjl2WjJ4bFgzQnliM1J2WW5WbVgyUjFjbUYwYVc5dVgzQmlMa1IxY21GMGFXOXVMQ0F6S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekxuQnliM1J2ZEhsd1pTNXpaWFJVYVcxbGIzVjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG5CeWIzUnZkSGx3WlM1amJHVmhjbFJwYldWdmRYUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFZHbHRaVzkxZENoMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEVobFlXUmxjbk11Y0hKdmRHOTBlWEJsTG1oaGMxUnBiV1Z2ZFhRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBektTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRTFsYzNOaFoyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJR2hoYzAxbGMzTmhaMlU2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURFc0lHWmhiSE5sS1N4Y2JpQWdJQ0J3WVdOclpYUk5aWE56WVdkbE9pQW9aaUE5SUcxelp5NW5aWFJRWVdOclpYUk5aWE56WVdkbEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lHVnZjem9nYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTXl3Z1ptRnNjMlVwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTR0Z6VFdWemMyRm5aU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxuTmxkRkJoWTJ0bGRFMWxjM05oWjJVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F6T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSQ2IyOXNLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVZ2Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFaGhjMDFsYzNOaFoyVW9LVHRjYmlBZ2FXWWdLR1lwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWQ2IyOXNLRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGQmhZMnRsZEUxbGMzTmhaMlVvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUlc5ektDazdYRzRnSUdsbUlDaG1LU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUW05dmJDaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2dhR0Z6WDIxbGMzTmhaMlVnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBTR0Z6VFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsTG5CeWIzUnZkSGx3WlM1elpYUklZWE5OWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNiMjlzWldGdVJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRkJoWTJ0bGRFMWxjM05oWjJVZ2NHRmphMlYwWDIxbGMzTmhaMlVnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1WjJWMFVHRmphMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aU3dnTWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aWHgxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVjMlYwVUdGamEyVjBUV1Z6YzJGblpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1WTJ4bFlYSlFZV05yWlhSTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRkJoWTJ0bGRFMWxjM05oWjJVb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsTG5CeWIzUnZkSGx3WlM1b1lYTlFZV05yWlhSTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR1Z2Y3lBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNW5aWFJGYjNNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F6TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVjMlYwUlc5eklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOQ2IyOXNaV0Z1Um1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNWNiaThxS2x4dUlDb2dUMjVsYjJZZ1ozSnZkWEFnWkdWbWFXNXBkR2x2Ym5NZ1ptOXlJSFJvYVhNZ2JXVnpjMkZuWlM0Z1JXRmphQ0JuY205MWNDQmtaV1pwYm1WeklIUm9aU0JtYVdWc1pGeHVJQ29nYm5WdFltVnljeUJpWld4dmJtZHBibWNnZEc4Z2RHaGhkQ0JuY205MWNDNGdWMmhsYmlCdlppQjBhR1Z6WlNCbWFXVnNaSE1uSUhaaGJIVmxJR2x6SUhObGRDd2dZV3hzWEc0Z0tpQnZkR2hsY2lCbWFXVnNaSE1nYVc0Z2RHaGxJR2R5YjNWd0lHRnlaU0JqYkdWaGNtVmtMaUJFZFhKcGJtY2daR1Z6WlhKcFlXeHBlbUYwYVc5dUxDQnBaaUJ0ZFd4MGFYQnNaVnh1SUNvZ1ptbGxiR1J6SUdGeVpTQmxibU52ZFc1MFpYSmxaQ0JtYjNJZ1lTQm5jbTkxY0N3Z2IyNXNlU0IwYUdVZ2JHRnpkQ0IyWVd4MVpTQnpaV1Z1SUhkcGJHd2dZbVVnYTJWd2RDNWNiaUFxSUVCd2NtbDJZWFJsSUhzaFFYSnlZWGs4SVVGeWNtRjVQRzUxYldKbGNqNCtmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mSUQwZ1cxc3lMRE1zTkYxZE8xeHVYRzR2S2lwY2JpQXFJRUJsYm5WdElIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Vkhsd1pVTmhjMlVnUFNCN1hHNGdJRlJaVUVWZlRrOVVYMU5GVkRvZ01DeGNiaUFnU0VWQlJFVlNVem9nTWl4Y2JpQWdUVVZUVTBGSFJUb2dNeXhjYmlBZ1ZGSkJTVXhGVWxNNklEUmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FISmxkSFZ5YmlCN2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1VWVYQmxRMkZ6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WjJWMFZIbHdaVU5oYzJVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1VWVYQmxRMkZ6WlgwZ0tpOG9hbk53WWk1TlpYTnpZV2RsTG1OdmJYQjFkR1ZQYm1WdlprTmhjMlVvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXZibVZ2WmtkeWIzVndjMTliTUYwcEtUdGNibjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJSE4wY21WaGJUb2dLR1lnUFNCdGMyY3VaMlYwVTNSeVpXRnRLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0TG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlrc1hHNGdJQ0FnYUdWaFpHVnljem9nS0dZZ1BTQnRjMmN1WjJWMFNHVmhaR1Z5Y3lncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lHMWxjM05oWjJVNklDaG1JRDBnYlhObkxtZGxkRTFsYzNOaFoyVW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0IwY21GcGJHVnljem9nS0dZZ1BTQnRjMmN1WjJWMFZISmhhV3hsY25Nb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxuTmxkRk4wY21WaGJTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJJWldGa1pYSnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEUxbGMzTmhaMlVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3p0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlVjbUZwYkdWeWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZOMGNtVmhiU2dwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzB1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVobFlXUmxjbk1vS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSTlpYTnpZV2RsS0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ015eGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZISmhhV3hsY25Nb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQTBMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQlRkSEpsWVcwZ2MzUnlaV0Z0SUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVaMlYwVTNSeVpXRnRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdGZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlN3Z01Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdGZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzV6WlhSVGRISmxZVzBnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVM1J5WldGdElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZOMGNtVmhiU2gxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1oaGMxTjBjbVZoYlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1VtVnpjRzl1YzJWSVpXRmtaWEp6SUdobFlXUmxjbk1nUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW5aWFJJWldGa1pYSnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKemZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5Y3l3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKemZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzV6WlhSSVpXRmtaWEp6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZabGR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F5TENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sTG05dVpXOW1SM0p2ZFhCelgxc3dYU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNWpiR1ZoY2tobFlXUmxjbk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBTR1ZoWkdWeWN5aDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWhoYzBobFlXUmxjbk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUZKbGMzQnZibk5sVFdWemMyRm5aU0J0WlhOellXZGxJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBUV1Z6YzJGblpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlVzSURNcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVjMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFMWxjM05oWjJVb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW9ZWE5OWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JTWlhOd2IyNXpaVlJ5WVdsc1pYSnpJSFJ5WVdsc1pYSnpJRDBnTkR0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtZGxkRlJ5WVdsc1pYSnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWMzMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekxDQTBLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUlVjbUZwYkdWeWN5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBUMjVsYjJaWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z05Dd2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WTJ4bFlYSlVjbUZwYkdWeWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVWNtRnBiR1Z5Y3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtaGhjMVJ5WVdsc1pYSnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOQ2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5Y3k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKemZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5Y3k1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdiV1YwWVdSaGRHRTZJQ2htSUQwZ2JYTm5MbWRsZEUxbGRHRmtZWFJoS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk45WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25NN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5Y3k1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5YzMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUk5aWFJoWkdGMFlTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKekxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSTlpYUmhaR0YwWVNncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQk5aWFJoWkdGMFlTQnRaWFJoWkdGMFlTQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11Y0hKdmRHOTBlWEJsTG1kbGRFMWxkR0ZrWVhSaElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdGOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFc0lERXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTXVjSEp2ZEc5MGVYQmxMbk5sZEUxbGRHRmtZWFJoSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVRXVjBZV1JoZEdFZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVFdWMFlXUmhkR0VvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1YUdGelRXVjBZV1JoZEdFZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlY5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCd1lXTnJaWFJOWlhOellXZGxPaUFvWmlBOUlHMXpaeTVuWlhSUVlXTnJaWFJOWlhOellXZGxLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsQmhZMnRsZEUxbGMzTmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJRWVdOclpYUk5aWE56WVdkbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJVdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZCaFkydGxkRTFsYzNOaFoyVW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQlFZV05yWlhSTlpYTnpZV2RsSUhCaFkydGxkRjl0WlhOellXZGxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxMbkJ5YjNSdmRIbHdaUzVuWlhSUVlXTnJaWFJOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMbk5sZEZCaFkydGxkRTFsYzNOaFoyVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRWVdOclpYUk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZCaFkydGxkRTFsYzNOaFoyVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVhR0Z6VUdGamEyVjBUV1Z6YzJGblpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWMzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0J6ZEdGMGRYTTZJQ2htSUQwZ2JYTm5MbWRsZEZOMFlYUjFjeWdwS1NBbUppQm5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQnRaWFJoWkdGMFlUb2dLR1lnUFNCdGMyY3VaMlYwVFdWMFlXUmhkR0VvS1NrZ0ppWWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk45WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25OOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWk1VGRHRjBkWE03WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNaMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0l1VTNSaGRIVnpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVM1JoZEhWektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSTlpYUmhaR0YwWVNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3k1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlZSeVlXbHNaWEp6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFUzUmhkSFZ6S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQm5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRTFsZEdGa1lYUmhLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdkdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6SUhOMFlYUjFjeUE5SURFN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3k1d2NtOTBiM1I1Y0dVdVoyVjBVM1JoZEhWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCbmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpNVRkR0YwZFhNc0lERXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWMzeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXVjSEp2ZEc5MGVYQmxMbk5sZEZOMFlYUjFjeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVUzUmhkSFZ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRk4wWVhSMWN5aDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NXdjbTkwYjNSNWNHVXVhR0Z6VTNSaGRIVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JOWlhSaFpHRjBZU0J0WlhSaFpHRjBZU0E5SURJN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKekxuQnliM1J2ZEhsd1pTNW5aWFJOWlhSaFpHRjBZU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhMQ0F5S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKemZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25NdWNISnZkRzkwZVhCbExuTmxkRTFsZEdGa1lYUmhJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKTlpYUmhaR0YwWVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJOWlhSaFpHRjBZU2gxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTV3Y205MGIzUjVjR1V1YUdGelRXVjBZV1JoZEdFZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNWNiaThxS2x4dUlDb2dUR2x6ZENCdlppQnlaWEJsWVhSbFpDQm1hV1ZzWkhNZ2QybDBhR2x1SUhSb2FYTWdiV1Z6YzJGblpTQjBlWEJsTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ29nUUdOdmJuTjBYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3k1eVpYQmxZWFJsWkVacFpXeGtjMThnUFNCYk1WMDdYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5YVc1bmN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5YVc1bmN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnZG1Gc2RXVnpUR2x6ZERvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNodGMyY3NJREVwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2dabHh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kemZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jMzFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkZaaGJIVmxjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5YVc1bmN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVm1Gc2RXVnpUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCemRISnBibWNnZG1Gc2RXVnpJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUeHpkSEpwYm1jK2ZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011Y0hKdmRHOTBlWEJsTG1kbGRGWmhiSFZsYzB4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdJVUZ5Y21GNVBITjBjbWx1Wno1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNoMGFHbHpMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4YzNSeWFXNW5QbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM045SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011Y0hKdmRHOTBlWEJsTG5ObGRGWmhiSFZsYzB4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsSUh4OElGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6TG5CeWIzUnZkSGx3WlM1aFpHUldZV3gxWlhNZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsTENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTV3Y205MGIzUjVjR1V1WTJ4bFlYSldZV3gxWlhOTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGWmhiSFZsYzB4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdGOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJRzFrVFdGd09pQW9aaUE5SUcxelp5NW5aWFJOWkUxaGNDZ3BLU0EvSUdZdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011ZEc5UFltcGxZM1FwSURvZ1cxMWNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0Y5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdGOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUcxelp5NW5aWFJOWkUxaGNDZ3BPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExDQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQnlaV0ZrWlhJcElIdGNiaUFnSUNBZ0lDQWdhbk53WWk1TllYQXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua29iV1Z6YzJGblpTd2djbVZoWkdWeUxDQnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOMGNtbHVaeXdnYW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUk5aWE56WVdkbExDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUxDQmNJbHdpTENCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kektDa3BPMXh1SUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEUxa1RXRndLSFJ5ZFdVcE8xeHVJQ0JwWmlBb1ppQW1KaUJtTG1kbGRFeGxibWQwYUNncElENGdNQ2tnZTF4dUlDQWdJR1l1YzJWeWFXRnNhWHBsUW1sdVlYSjVLREVzSUhkeWFYUmxjaXdnYW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVM1J5YVc1bkxDQnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWTlpYTnpZV2RsTENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2JXRndQSE4wY21sdVp5d2dVM1J5YVc1bmN6NGdiV1FnUFNBeE8xeHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgyNXZUR0Y2ZVVOeVpXRjBaU0JFYnlCdWIzUWdZM0psWVhSbElIUm9aU0J0WVhBZ2FXWmNiaUFxSUdWdGNIUjVMQ0JwYm5OMFpXRmtJSEpsZEhWeWJtbHVaeUJnZFc1a1pXWnBibVZrWUZ4dUlDb2dRSEpsZEhWeWJpQjdJV3B6Y0dJdVRXRndQSE4wY21sdVp5d2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kelBuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVM1d2NtOTBiM1I1Y0dVdVoyVjBUV1JOWVhBZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYm05TVlYcDVRM0psWVhSbEtTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGcWMzQmlMazFoY0R4emRISnBibWNzSVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jejU5SUNvdklDaGNiaUFnSUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSTllYQkdhV1ZzWkNoMGFHbHpMQ0F4TENCdmNIUmZibTlNWVhwNVEzSmxZWFJsTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFpoYkhWbGN5Qm1jbTl0SUhSb1pTQnRZWEF1SUZSb1pTQnRZWEFnZDJsc2JDQmlaU0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlTNXdjbTkwYjNSNWNHVXVZMnhsWVhKTlpFMWhjQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IwYUdsekxtZGxkRTFrVFdGd0tDa3VZMnhsWVhJb0tUdGNiaUFnY21WMGRYSnVJSFJvYVhNN2ZUdGNibHh1WEc1bmIyOW5MbTlpYW1WamRDNWxlSFJsYm1Rb1pYaHdiM0owY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVNrN1hHNGlMQ0oyWVhJZ1p6dGNibHh1THk4Z1ZHaHBjeUIzYjNKcmN5QnBiaUJ1YjI0dGMzUnlhV04wSUcxdlpHVmNibWNnUFNBb1puVnVZM1JwYjI0b0tTQjdYRzVjZEhKbGRIVnliaUIwYUdsek8xeHVmU2tvS1R0Y2JseHVkSEo1SUh0Y2JseDBMeThnVkdocGN5QjNiM0pyY3lCcFppQmxkbUZzSUdseklHRnNiRzkzWldRZ0tITmxaU0JEVTFBcFhHNWNkR2NnUFNCbklIeDhJRzVsZHlCR2RXNWpkR2x2YmloY0luSmxkSFZ5YmlCMGFHbHpYQ0lwS0NrN1hHNTlJR05oZEdOb0lDaGxLU0I3WEc1Y2RDOHZJRlJvYVhNZ2QyOXlhM01nYVdZZ2RHaGxJSGRwYm1SdmR5QnlaV1psY21WdVkyVWdhWE1nWVhaaGFXeGhZbXhsWEc1Y2RHbG1JQ2gwZVhCbGIyWWdkMmx1Wkc5M0lEMDlQU0JjSW05aWFtVmpkRndpS1NCbklEMGdkMmx1Wkc5M08xeHVmVnh1WEc0dkx5Qm5JR05oYmlCemRHbHNiQ0JpWlNCMWJtUmxabWx1WldRc0lHSjFkQ0J1YjNSb2FXNW5JSFJ2SUdSdklHRmliM1YwSUdsMExpNHVYRzR2THlCWFpTQnlaWFIxY200Z2RXNWtaV1pwYm1Wa0xDQnBibk4wWldGa0lHOW1JRzV2ZEdocGJtY2dhR1Z5WlN3Z2MyOGdhWFFuYzF4dUx5OGdaV0Z6YVdWeUlIUnZJR2hoYm1Sc1pTQjBhR2x6SUdOaGMyVXVJR2xtS0NGbmJHOWlZV3dwSUhzZ0xpNHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUdjN1hHNGlMQ0l2THlCemIzVnlZMlU2SUhCeWIzUnZMM0p3WXk5Mk1TOWhkWFJvTG5CeWIzUnZYRzR2S2lwY2JpQXFJRUJtYVd4bGIzWmxjblpwWlhkY2JpQXFJRUJsYm1oaGJtTmxZV0pzWlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHR0YVhOemFXNW5VbVZ4ZFdseVpYMGdjbVZ3YjNKMGN5Qmxjbkp2Y2lCdmJpQnBiWEJzYVdOcGRDQjBlWEJsSUhWellXZGxjeTVjYmlBcUlFQnpkWEJ3Y21WemN5QjdiV1Z6YzJGblpVTnZiblpsYm5ScGIyNXpmU0JLVXlCRGIyMXdhV3hsY2lCeVpYQnZjblJ6SUdGdUlHVnljbTl5SUdsbUlHRWdkbUZ5YVdGaWJHVWdiM0pjYmlBcUlDQWdJQ0JtYVdWc1pDQnpkR0Z5ZEhNZ2QybDBhQ0FuVFZOSFh5Y2dZVzVrSUdsemJpZDBJR0VnZEhKaGJuTnNZWFJoWW14bElHMWxjM05oWjJVdVhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JpOHZJRWRGVGtWU1FWUkZSQ0JEVDBSRklDMHRJRVJQSUU1UFZDQkZSRWxVSVZ4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ0tpOWNiaTh2SUVCMGN5MXViMk5vWldOclhHNWNiblpoY2lCcWMzQmlJRDBnY21WeGRXbHlaU2duWjI5dloyeGxMWEJ5YjNSdlluVm1KeWs3WEc1MllYSWdaMjl2WnlBOUlHcHpjR0k3WEc1MllYSWdaMnh2WW1Gc0lEMGdLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnBaaUFvZEdocGN5a2dleUJ5WlhSMWNtNGdkR2hwY3pzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHNnY21WMGRYSnVJSGRwYm1SdmR6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlHZHNiMkpoYkNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUdkc2IySmhiRHNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JSE5sYkdZZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCelpXeG1PeUI5WEc0Z0lISmxkSFZ5YmlCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dWZTNWpZV3hzS0c1MWJHd3BLVHRjYmx4dWRtRnlJR2R2YjJkc1pWOWhjR2xmWVc1dWIzUmhkR2x2Ym5OZmNHSWdQU0J5WlhGMWFYSmxLQ2N1TGk4dUxpOHVMaTluYjI5bmJHVXZZWEJwTDJGdWJtOTBZWFJwYjI1elgzQmlMbXB6SnlrN1hHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9jSEp2ZEc4c0lHZHZiMmRzWlY5aGNHbGZZVzV1YjNSaGRHbHZibk5mY0dJcE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjWFZsYzNRbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzY3lBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhNc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhNdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRDd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaU2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZENBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRDNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsYzNCdmJuTmxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sSnp0Y2JuMWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2MzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQjBlWEJsT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXNJRndpWENJcExGeHVJQ0FnSUhCaGVXeHZZV1E2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01pd2dYQ0pjSWlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzYzMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzYzMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhOOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVWVYQmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFVHRjViRzloWkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVkhsd1pTZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRkJoZVd4dllXUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QjBlWEJsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG5CeWIzUnZkSGx3WlM1blpYUlVlWEJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhOOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRM0psWkdWdWRHbGhiSE11Y0hKdmRHOTBlWEJsTG5ObGRGUjVjR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZCeWIzUnZNMU4wY21sdVowWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2djR0Y1Ykc5aFpDQTlJREk3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5NXdjbTkwYjNSNWNHVXVaMlYwVUdGNWJHOWhaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXlMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpMbkJ5YjNSdmRIbHdaUzV6WlhSUVlYbHNiMkZrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRIMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1F1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHVnVkR2wwZVRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0JjSWx3aUtTeGNiaUFnSUNCamNtVmtaVzUwYVdGc2N6b2dLR1lnUFNCdGMyY3VaMlYwUTNKbFpHVnVkR2xoYkhNb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1I5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVZ1ZEdsMGVTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ek8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFTnlaV1JsYm5ScFlXeHpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNSOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVWdWRHbDBlU2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVOeVpXUmxiblJwWVd4ektDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhNdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUdWdWRHbDBlU0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSRmJuUnBkSGtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sZEVWdWRHbDBlU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRU55WldSbGJuUnBZV3h6SUdOeVpXUmxiblJwWVd4eklEMGdNanRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRM0psWkdWdWRHbGhiSE45WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUkRjbVZrWlc1MGFXRnNjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhOOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeXdnTWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjM3gxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1elpYUkRjbVZrWlc1MGFXRnNjeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrTnlaV1JsYm5ScFlXeHpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFTnlaV1JsYm5ScFlXeHpLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtaGhjME55WldSbGJuUnBZV3h6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUdGalkyVnpjMVJ2YTJWdU9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREVzSUZ3aVhDSXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWE53YjI1elpUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBRV05qWlhOelZHOXJaVzRvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWE53YjI1elpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFVtVnpjRzl1YzJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRUZqWTJWemMxUnZhMlZ1S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnWVdOalpYTnpYM1J2YTJWdUlEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW5aWFJCWTJObGMzTlViMnRsYmlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUkJZMk5sYzNOVWIydGxiaUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkQzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGNYVmxjM1I5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsY1hWbGMzUXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUdWdWRHbDBlVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQmNJbHdpS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjWFZsYzNRN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYRjFaWE4wTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsY1hWbGMzUjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJGYm5ScGRIa29kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkSDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJGYm5ScGRIa29LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QmxiblJwZEhrZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJGYm5ScGRIa2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzV6WlhSRmJuUnBkSGtnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZCeWIzUnZNMU4wY21sdVowWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdZV05qWlhOelZHOXJaVzQ2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhOd2IyNXpaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsYzNCdmJuTmxPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnpjRzl1YzJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRUZqWTJWemMxUnZhMlZ1S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnpjRzl1YzJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRUZqWTJWemMxUnZhMlZ1S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnWVdOalpYTnpYM1J2YTJWdUlEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWRsZEVGalkyVnpjMVJ2YTJWdUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhOd2IyNXpaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzV6WlhSQlkyTmxjM05VYjJ0bGJpQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9aWGh3YjNKMGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhLVHRjYmlJc0lpOHZJSE52ZFhKalpUb2daMjl2WjJ4bEwyRndhUzloYm01dmRHRjBhVzl1Y3k1d2NtOTBiMXh1THlvcVhHNGdLaUJBWm1sc1pXOTJaWEoyYVdWM1hHNGdLaUJBWlc1b1lXNWpaV0ZpYkdWY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldsemMybHVaMUpsY1hWcGNtVjlJSEpsY0c5eWRITWdaWEp5YjNJZ2IyNGdhVzF3YkdsamFYUWdkSGx3WlNCMWMyRm5aWE11WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlMjFsYzNOaFoyVkRiMjUyWlc1MGFXOXVjMzBnU2xNZ1EyOXRjR2xzWlhJZ2NtVndiM0owY3lCaGJpQmxjbkp2Y2lCcFppQmhJSFpoY21saFlteGxJRzl5WEc0Z0tpQWdJQ0FnWm1sbGJHUWdjM1JoY25SeklIZHBkR2dnSjAxVFIxOG5JR0Z1WkNCcGMyNG5kQ0JoSUhSeVlXNXpiR0YwWVdKc1pTQnRaWE56WVdkbExseHVJQ29nUUhCMVlteHBZMXh1SUNvdlhHNHZMeUJIUlU1RlVrRlVSVVFnUTA5RVJTQXRMU0JFVHlCT1QxUWdSVVJKVkNGY2JpOHFJR1Z6YkdsdWRDMWthWE5oWW14bElDb3ZYRzR2THlCQWRITXRibTlqYUdWamExeHVYRzUyWVhJZ2FuTndZaUE5SUhKbGNYVnBjbVVvSjJkdmIyZHNaUzF3Y205MGIySjFaaWNwTzF4dWRtRnlJR2R2YjJjZ1BTQnFjM0JpTzF4dWRtRnlJR2RzYjJKaGJDQTlJQ2htZFc1amRHbHZiaWdwSUh0Y2JpQWdhV1lnS0hSb2FYTXBJSHNnY21WMGRYSnVJSFJvYVhNN0lIMWNiaUFnYVdZZ0tIUjVjR1Z2WmlCM2FXNWtiM2NnSVQwOUlDZDFibVJsWm1sdVpXUW5LU0I3SUhKbGRIVnliaUIzYVc1a2IzYzdJSDFjYmlBZ2FXWWdLSFI1Y0dWdlppQm5iRzlpWVd3Z0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCbmJHOWlZV3c3SUgxY2JpQWdhV1lnS0hSNWNHVnZaaUJ6Wld4bUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2V5QnlaWFIxY200Z2MyVnNaanNnZlZ4dUlDQnlaWFIxY200Z1JuVnVZM1JwYjI0b0ozSmxkSFZ5YmlCMGFHbHpKeWtvS1R0Y2JuMHVZMkZzYkNodWRXeHNLU2s3WEc1Y2JuWmhjaUJuYjI5bmJHVmZZWEJwWDJoMGRIQmZjR0lnUFNCeVpYRjFhWEpsS0NjdUxpOHVMaTluYjI5bmJHVXZZWEJwTDJoMGRIQmZjR0l1YW5NbktUdGNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaQ2h3Y205MGJ5d2daMjl2WjJ4bFgyRndhVjlvZEhSd1gzQmlLVHRjYm5aaGNpQm5iMjluYkdWZmNISnZkRzlpZFdaZlpHVnpZM0pwY0hSdmNsOXdZaUE5SUhKbGNYVnBjbVVvSjJkdmIyZHNaUzF3Y205MGIySjFaaTluYjI5bmJHVXZjSEp2ZEc5aWRXWXZaR1Z6WTNKcGNIUnZjbDl3WWk1cWN5Y3BPMXh1WjI5dlp5NXZZbXBsWTNRdVpYaDBaVzVrS0hCeWIzUnZMQ0JuYjI5bmJHVmZjSEp2ZEc5aWRXWmZaR1Z6WTNKcGNIUnZjbDl3WWlrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNW9kSFJ3Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYmx4dUx5b3FYRzRnS2lCQklIUjFjR3hsSUc5bUlIdG1hV1ZzWkNCdWRXMWlaWElzSUdOc1lYTnpJR052Ym5OMGNuVmpkRzl5ZlNCbWIzSWdkR2hsSUdWNGRHVnVjMmx2Ymx4dUlDb2dabWxsYkdRZ2JtRnRaV1FnWUdoMGRIQmdMbHh1SUNvZ1FIUjVjR1VnZXlGcWMzQmlMa1Y0ZEdWdWMybHZia1pwWld4a1NXNW1iendoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaVDU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VhSFIwY0NBOUlHNWxkeUJxYzNCaUxrVjRkR1Z1YzJsdmJrWnBaV3hrU1c1bWJ5aGNiaUFnSUNBM01qSTVOVGN5T0N4Y2JpQWdJQ0I3YUhSMGNEb2dNSDBzWEc0Z0lDQWdaMjl2WjJ4bFgyRndhVjlvZEhSd1gzQmlMa2gwZEhCU2RXeGxMRnh1SUNBZ0lDQXZLaW9nUUhSNWNHVWdlejltZFc1amRHbHZiaWdvWW05dmJHVmhibngxYm1SbFptbHVaV1FwTENGcWMzQmlMazFsYzNOaFoyVTlLVG9nSVU5aWFtVmpkSDBnS2k4Z0tGeHVJQ0FnSUNBZ0lDQWdaMjl2WjJ4bFgyRndhVjlvZEhSd1gzQmlMa2gwZEhCU2RXeGxMblJ2VDJKcVpXTjBLU3hjYmlBZ0lDQXdLVHRjYmx4dVoyOXZaMnhsWDNCeWIzUnZZblZtWDJSbGMyTnlhWEIwYjNKZmNHSXVUV1YwYUc5a1QzQjBhVzl1Y3k1bGVIUmxibk5wYjI1elFtbHVZWEo1V3pjeU1qazFOekk0WFNBOUlHNWxkeUJxYzNCaUxrVjRkR1Z1YzJsdmJrWnBaV3hrUW1sdVlYSjVTVzVtYnloY2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMbWgwZEhBc1hHNGdJQ0FnYW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUk5aWE56WVdkbExGeHVJQ0FnSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVTFsYzNOaFoyVXNYRzRnSUNBZ1oyOXZaMnhsWDJGd2FWOW9kSFJ3WDNCaUxraDBkSEJTZFd4bExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5TEZ4dUlDQWdJR2R2YjJkc1pWOWhjR2xmYUhSMGNGOXdZaTVJZEhSd1VuVnNaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElzWEc0Z0lDQWdabUZzYzJVcE8xeHVMeThnVkdocGN5QnlaV2RwYzNSbGNuTWdkR2hsSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0IzYVhSb0lIUm9aU0JsZUhSbGJtUmxaQ0JqYkdGemN5d2djMjhnZEdoaGRGeHVMeThnZEc5UFltcGxZM1FvS1NCM2FXeHNJR1oxYm1OMGFXOXVJR052Y25KbFkzUnNlUzVjYm1kdmIyZHNaVjl3Y205MGIySjFabDlrWlhOamNtbHdkRzl5WDNCaUxrMWxkR2h2WkU5d2RHbHZibk11WlhoMFpXNXphVzl1YzFzM01qSTVOVGN5T0YwZ1BTQndjbTkwYnk1bmIyOW5iR1V1WVhCcExtaDBkSEE3WEc1Y2JtZHZiMmN1YjJKcVpXTjBMbVY0ZEdWdVpDaGxlSEJ2Y25SekxDQndjbTkwYnk1bmIyOW5iR1V1WVhCcEtUdGNiaUlzSWk4dklITnZkWEpqWlRvZ2NISnZkRzh2Y25CakwzZGxZbkowWXk5Mk1TOXphV2R1WVd4cGJtY3VjSEp2ZEc5Y2JpOHFLbHh1SUNvZ1FHWnBiR1Z2ZG1WeWRtbGxkMXh1SUNvZ1FHVnVhR0Z1WTJWaFlteGxYRzRnS2lCQWMzVndjSEpsYzNNZ2UyMXBjM05wYm1kU1pYRjFhWEpsZlNCeVpYQnZjblJ6SUdWeWNtOXlJRzl1SUdsdGNHeHBZMmwwSUhSNWNHVWdkWE5oWjJWekxseHVJQ29nUUhOMWNIQnlaWE56SUh0dFpYTnpZV2RsUTI5dWRtVnVkR2x2Ym5OOUlFcFRJRU52YlhCcGJHVnlJSEpsY0c5eWRITWdZVzRnWlhKeWIzSWdhV1lnWVNCMllYSnBZV0pzWlNCdmNseHVJQ29nSUNBZ0lHWnBaV3hrSUhOMFlYSjBjeUIzYVhSb0lDZE5VMGRmSnlCaGJtUWdhWE51SjNRZ1lTQjBjbUZ1YzJ4aGRHRmliR1VnYldWemMyRm5aUzVjYmlBcUlFQndkV0pzYVdOY2JpQXFMMXh1THk4Z1IwVk9SVkpCVkVWRUlFTlBSRVVnTFMwZ1JFOGdUazlVSUVWRVNWUWhYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0FxTDF4dUx5OGdRSFJ6TFc1dlkyaGxZMnRjYmx4dWRtRnlJR3B6Y0dJZ1BTQnlaWEYxYVhKbEtDZG5iMjluYkdVdGNISnZkRzlpZFdZbktUdGNiblpoY2lCbmIyOW5JRDBnYW5Od1lqdGNiblpoY2lCbmJHOWlZV3dnUFNBb1puVnVZM1JwYjI0b0tTQjdYRzRnSUdsbUlDaDBhR2x6S1NCN0lISmxkSFZ5YmlCMGFHbHpPeUI5WEc0Z0lHbG1JQ2gwZVhCbGIyWWdkMmx1Wkc5M0lDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2V5QnlaWFIxY200Z2QybHVaRzkzT3lCOVhHNGdJR2xtSUNoMGVYQmxiMllnWjJ4dlltRnNJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5a2dleUJ5WlhSMWNtNGdaMnh2WW1Gc095QjlYRzRnSUdsbUlDaDBlWEJsYjJZZ2MyVnNaaUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHNnY21WMGRYSnVJSE5sYkdZN0lIMWNiaUFnY21WMGRYSnVJRVoxYm1OMGFXOXVLQ2R5WlhSMWNtNGdkR2hwY3ljcEtDazdYRzU5TG1OaGJHd29iblZzYkNrcE8xeHVYRzUyWVhJZ1oyOXZaMnhsWDJGd2FWOWhibTV2ZEdGMGFXOXVjMTl3WWlBOUlISmxjWFZwY21Vb0p5NHVMeTR1THk0dUx5NHVMMmR2YjJkc1pTOWhjR2t2WVc1dWIzUmhkR2x2Ym5OZmNHSXVhbk1uS1R0Y2JtZHZiMmN1YjJKcVpXTjBMbVY0ZEdWdVpDaHdjbTkwYnl3Z1oyOXZaMnhsWDJGd2FWOWhibTV2ZEdGMGFXOXVjMTl3WWlrN1hHNTJZWElnWjI5dloyeGxYM0p3WTE5emRHRjBkWE5mY0dJZ1BTQnlaWEYxYVhKbEtDY3VMaTh1TGk4dUxpOHVMaTluYjI5bmJHVXZjbkJqTDNOMFlYUjFjMTl3WWk1cWN5Y3BPMXh1WjI5dlp5NXZZbXBsWTNRdVpYaDBaVzVrS0hCeWIzUnZMQ0JuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWlrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVVM1JoWjJWRFlYTmxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRWIyNWxVM1JoWjJVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlVuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlVuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVVM1JoWjJWRFlYTmxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1VTNSaFoyVkRZWE5sSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpVbHVhWFJUZEdGblpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZENjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1VmNHUmhkR1ZEWVhObEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWE53YjI1elpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1VuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZENjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeWNzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlNjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZENBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkQzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhGMVpYTjBKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVW5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE4cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlVzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaU2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOHBPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQ3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQ2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnpjRzl1YzJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWE53YjI1elpTYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxuSmxjR1ZoZEdWa1JtbGxiR1J6WHl3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2NuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJVdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEZWd1pHRjBaVk4wWVdkbExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JFYjI1bFUzUmhaMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlNjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMThwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQ2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpTNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExtOXVaVzltUjNKdmRYQnpYeWs3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRDd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYRjFaWE4wTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhGMVpYTjBKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhOd2IyNXpaU2M3WEc1OVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JqWVc1a2FXUmhkR1U2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlrc1hHNGdJQ0FnYzJSd1RXbGtPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURJc0lGd2lYQ0lwTEZ4dUlDQWdJSE5rY0cxTWFXNWxTVzVrWlhnNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNeXdnTUNrc1hHNGdJQ0FnZFhObGNtNWhiV1ZHY21GbmJXVnVkRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBMExDQmNJbHdpS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFEyRnVaR2xrWVhSbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTJSd1RXbGtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlZhVzUwTXpJb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUyUndiVXhwYm1WSmJtUmxlQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGVnpaWEp1WVcxbFJuSmhaMjFsYm5Rb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRMkZ1Wkdsa1lYUmxLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRElwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNeWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFZXbHVkRE15S0Z4dUlDQWdJQ0FnTXl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQTBLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0EwTEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1kyRnVaR2xrWVhSbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVdWNISnZkRzkwZVhCbExtZGxkRU5oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXdjbTkwYjNSNWNHVXVjMlYwUTJGdVpHbGtZWFJsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSE5rY0Y5dGFXUWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXdjbTkwYjNSNWNHVXVaMlYwVTJSd1RXbGtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuQnliM1J2ZEhsd1pTNXpaWFJUWkhCTmFXUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV3Y205MGIzUjVjR1V1WTJ4bFlYSlRaSEJOYVdRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5CeWIzUnZkSGx3WlM1b1lYTlRaSEJOYVdRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lIVnBiblF6TWlCelpIQnRYMnhwYm1WZmFXNWtaWGdnUFNBek8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV3Y205MGIzUjVjR1V1WjJWMFUyUndiVXhwYm1WSmJtUmxlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXpMQ0F3S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdWMyVjBVMlJ3YlV4cGJtVkpibVJsZUNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xOa2NHMU1hVzVsU1c1a1pYZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuQnliM1J2ZEhsd1pTNW9ZWE5UWkhCdFRHbHVaVWx1WkdWNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2RYTmxjbTVoYldWZlpuSmhaMjFsYm5RZ1BTQTBPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdVoyVjBWWE5sY201aGJXVkdjbUZuYldWdWRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBMExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdWMyVjBWWE5sY201aGJXVkdjbUZuYldWdWRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTkN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsVnpaWEp1WVcxbFJuSmhaMjFsYm5RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBMExDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5CeWIzUnZkSGx3WlM1b1lYTlZjMlZ5Ym1GdFpVWnlZV2R0Wlc1MElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1F1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhGMVpYTjBmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQnpaSEE2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlrc1hHNGdJQ0FnWkdsellXSnNaVlJ5YVdOcmJHVTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRElzSUdaaGJITmxLVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1E3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWEYxWlhOMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsY1hWbGMzUjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVFpIQW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkNiMjlzS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVScGMyRmliR1ZVY21samEyeGxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1I5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVMlJ3S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFJHbHpZV0pzWlZSeWFXTnJiR1VvS1R0Y2JpQWdhV1lnS0dZcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklITmtjQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWRsZEZOa2NDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGRGTmtjQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z1pHbHpZV0pzWlY5MGNtbGphMnhsSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1kbGRFUnBjMkZpYkdWVWNtbGphMnhsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sZEVScGMyRmliR1ZVY21samEyeGxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNiMjlzWldGdVJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCelpIQTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZKYm1sMFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZOa2NDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJUWkhBb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCelpIQWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpVbHVhWFJUZEdGblpTNXdjbTkwYjNSNWNHVXVaMlYwVTJSd0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpVbHVhWFJUZEdGblpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYUlRaSEFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZCeWIzUnZNMU4wY21sdVowWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCallXNWthV1JoZEdVNklDaG1JRDBnYlhObkxtZGxkRU5oYm1ScFpHRjBaU2dwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1U3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJEWVc1a2FXUmhkR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRFlXNWthV1JoZEdVb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUVsRFJVTmhibVJwWkdGMFpTQmpZVzVrYVdSaGRHVWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExuQnliM1J2ZEhsd1pTNW5aWFJEWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdWNISnZkRzkwZVhCbExuTmxkRU5oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpEWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBRMkZ1Wkdsa1lYUmxLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTNXdjbTkwYjNSNWNHVXVhR0Z6UTJGdVpHbGtZWFJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFOXVaVzltSUdkeWIzVndJR1JsWm1sdWFYUnBiMjV6SUdadmNpQjBhR2x6SUcxbGMzTmhaMlV1SUVWaFkyZ2daM0p2ZFhBZ1pHVm1hVzVsY3lCMGFHVWdabWxsYkdSY2JpQXFJRzUxYldKbGNuTWdZbVZzYjI1bmFXNW5JSFJ2SUhSb1lYUWdaM0p2ZFhBdUlGZG9aVzRnYjJZZ2RHaGxjMlVnWm1sbGJHUnpKeUIyWVd4MVpTQnBjeUJ6WlhRc0lHRnNiRnh1SUNvZ2IzUm9aWElnWm1sbGJHUnpJR2x1SUhSb1pTQm5jbTkxY0NCaGNtVWdZMnhsWVhKbFpDNGdSSFZ5YVc1bklHUmxjMlZ5YVdGc2FYcGhkR2x2Yml3Z2FXWWdiWFZzZEdsd2JHVmNiaUFxSUdacFpXeGtjeUJoY21VZ1pXNWpiM1Z1ZEdWeVpXUWdabTl5SUdFZ1ozSnZkWEFzSUc5dWJIa2dkR2hsSUd4aGMzUWdkbUZzZFdVZ2MyVmxiaUIzYVd4c0lHSmxJR3RsY0hRdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQQ0ZCY25KaGVUeHVkVzFpWlhJK1BuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE4Z1BTQmJXeklzTTExZE8xeHVYRzR2S2lwY2JpQXFJRUJsYm5WdElIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObExsTjBZV2RsUTJGelpTQTlJSHRjYmlBZ1UxUkJSMFZmVGs5VVgxTkZWRG9nTUN4Y2JpQWdTVTVKVkRvZ01peGNiaUFnVlZCRVFWUkZPaUF6WEc1OU8xeHVYRzR2S2lwY2JpQXFJRUJ5WlhSMWNtNGdlM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sTGxOMFlXZGxRMkZ6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtZGxkRk4wWVdkbFEyRnpaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1VGRHRm5aVU5oYzJWOUlDb3ZLR3B6Y0dJdVRXVnpjMkZuWlM1amIyMXdkWFJsVDI1bGIyWkRZWE5sS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sTG05dVpXOW1SM0p2ZFhCelgxc3dYU2twTzF4dWZUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUhWMWFXUTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWtzWEc0Z0lDQWdhVzVwZERvZ0tHWWdQU0J0YzJjdVoyVjBTVzVwZENncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcExGeHVJQ0FnSUhWd1pHRjBaVG9nS0dZZ1BTQnRjMmN1WjJWMFZYQmtZWFJsS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtWeHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlU3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWWFZwWkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZKYm1sMFUzUmhaMlU3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZKYm1sMFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJKYm1sMEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbE8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlZjR1JoZEdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWWFZwWkNncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFbHVhWFFvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJWY0dSaGRHVW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklIVjFhV1FnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WjJWMFZYVnBaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVjMlYwVlhWcFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU0JwYm1sMElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1kbGRFbHVhWFFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMQ0F5S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFNXNXBkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNaXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKSmJtbDBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFbHVhWFFvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVhR0Z6U1c1cGRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVZ2RYQmtZWFJsSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WjJWMFZYQmtZWFJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVc0lETXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbk5sZEZWd1pHRjBaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKVmNHUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBWWEJrWVhSbEtIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1oaGMxVndaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQlBibVZ2WmlCbmNtOTFjQ0JrWldacGJtbDBhVzl1Y3lCbWIzSWdkR2hwY3lCdFpYTnpZV2RsTGlCRllXTm9JR2R5YjNWd0lHUmxabWx1WlhNZ2RHaGxJR1pwWld4a1hHNGdLaUJ1ZFcxaVpYSnpJR0psYkc5dVoybHVaeUIwYnlCMGFHRjBJR2R5YjNWd0xpQlhhR1Z1SUc5bUlIUm9aWE5sSUdacFpXeGtjeWNnZG1Gc2RXVWdhWE1nYzJWMExDQmhiR3hjYmlBcUlHOTBhR1Z5SUdacFpXeGtjeUJwYmlCMGFHVWdaM0p2ZFhBZ1lYSmxJR05zWldGeVpXUXVJRVIxY21sdVp5QmtaWE5sY21saGJHbDZZWFJwYjI0c0lHbG1JRzExYkhScGNHeGxYRzRnS2lCbWFXVnNaSE1nWVhKbElHVnVZMjkxYm5SbGNtVmtJR1p2Y2lCaElHZHliM1Z3TENCdmJteDVJSFJvWlNCc1lYTjBJSFpoYkhWbElITmxaVzRnZDJsc2JDQmlaU0JyWlhCMExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHdoUVhKeVlYazhiblZ0WW1WeVBqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMThnUFNCYld6SXNNeXcwWFYwN1hHNWNiaThxS2x4dUlDb2dRR1Z1ZFcwZ2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzVWY0dSaGRHVkRZWE5sSUQwZ2UxeHVJQ0JWVUVSQlZFVmZUazlVWDFORlZEb2dNQ3hjYmlBZ1EwRk9SRWxFUVZSRk9pQXlMRnh1SUNCRVQwNUZPaUF6TEZ4dUlDQkZVbEpQVWpvZ05GeHVmVHRjYmx4dUx5b3FYRzRnS2lCQWNtVjBkWEp1SUh0d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTGxWd1pHRjBaVU5oYzJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1kbGRGVndaR0YwWlVOaGMyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNVZjR1JoZEdWRFlYTmxmU0FxTHlocWMzQmlMazFsYzNOaFoyVXVZMjl0Y0hWMFpVOXVaVzltUTJGelpTaDBhR2x6TENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelgxc3dYU2twTzF4dWZUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkSDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2RYVnBaRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQmNJbHdpS1N4Y2JpQWdJQ0JqWVc1a2FXUmhkR1U2SUNobUlEMGdiWE5uTG1kbGRFTmhibVJwWkdGMFpTZ3BLU0FtSmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lHUnZibVU2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURNc0lHWmhiSE5sS1N4Y2JpQWdJQ0JsY25KdmNqb2dLR1lnUFNCdGMyY3VaMlYwUlhKeWIzSW9LU2tnSmlZZ1oyOXZaMnhsWDNKd1kxOXpkR0YwZFhOZmNHSXVVM1JoZEhWekxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWWFZwWkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1U3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJEWVc1a2FXUmhkR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFUnZibVVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4bmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpNVRkR0YwZFhNdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRmNuSnZjaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGVjFhV1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRFlXNWthV1JoZEdVb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBekxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUlhKeWIzSW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0EwTEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUdkdmIyZHNaVjl5Y0dOZmMzUmhkSFZ6WDNCaUxsTjBZWFIxY3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnZFhWcFpDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1kbGRGVjFhV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzV6WlhSVmRXbGtJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TlRkSEpwYm1kR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dTVU5GUTJGdVpHbGtZWFJsSUdOaGJtUnBaR0YwWlNBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRU5oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXNJRElwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkSDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1YzJWMFEyRnVaR2xrWVhSbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmxkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrTmhibVJwWkdGMFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSRFlXNWthV1JoZEdVb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW9ZWE5EWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2daRzl1WlNBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSRWIyNWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z015d2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sZEVSdmJtVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVJtbGxiR1FvZEdocGN5d2dNeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtTnNaV0Z5Ukc5dVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1SbWxsYkdRb2RHaHBjeXdnTXl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWFHRnpSRzl1WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1oyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNZ1pYSnliM0lnUFNBME8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJGY25KdmNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxYzMwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z1oyOXZaMnhsWDNKd1kxOXpkR0YwZFhOZmNHSXVVM1JoZEhWekxDQTBLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGRFVnljbTl5SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZabGR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0EwTENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelgxc3dYU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNWpiR1ZoY2tWeWNtOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFVnljbTl5S0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWFHRnpSWEp5YjNJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBMEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlY5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGMzQnZibk5sTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmx4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWE53YjI1elpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGMzQnZibk5sTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJdWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6RmRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeWZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnZFhKc2MweHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2RYTmxjbTVoYldVNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNaXdnWENKY0lpa3NYRzRnSUNBZ1kzSmxaR1Z1ZEdsaGJEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F6TENCY0lsd2lLVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhKOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNuMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY24xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtWWEpzY3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRlZ6WlhKdVlXMWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFEzSmxaR1Z1ZEdsaGJDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlZjbXh6VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWWE5sY201aGJXVW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJEY21Wa1pXNTBhV0ZzS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXpMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCemRISnBibWNnZFhKc2N5QTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOGMzUnlhVzVuUG4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1Y0hKdmRHOTBlWEJsTG1kbGRGVnliSE5NYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RkJjbkpoZVR4emRISnBibWMrZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQSE4wY21sdVp6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEo5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2k1d2NtOTBiM1I1Y0dVdWMyVjBWWEpzYzB4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsSUh4OElGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhKOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNXdjbTkwYjNSNWNHVXVZV1JrVlhKc2N5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVc0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhKOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNXdjbTkwYjNSNWNHVXVZMnhsWVhKVmNteHpUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJWY214elRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhWelpYSnVZVzFsSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSXVjSEp2ZEc5MGVYQmxMbWRsZEZWelpYSnVZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjbjBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG5CeWIzUnZkSGx3WlM1elpYUlZjMlZ5Ym1GdFpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCamNtVmtaVzUwYVdGc0lEMGdNenRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1Y0hKdmRHOTBlWEJsTG1kbGRFTnlaV1JsYm5ScFlXd2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z015d2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSXVjSEp2ZEc5MGVYQmxMbk5sZEVOeVpXUmxiblJwWVd3Z1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0tIUm9hWE1zSURNc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFeHBjM1FnYjJZZ2NtVndaV0YwWldRZ1ptbGxiR1J6SUhkcGRHaHBiaUIwYUdseklHMWxjM05oWjJVZ2RIbHdaUzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFJRUJqYjI1emRGeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJNVjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5MblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXZDlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmhaR1JwZEdsdmJtRnNTV05sVTJWeWRtVnljMHhwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEVGa1pHbDBhVzl1WVd4SlkyVlRaWEoyWlhKelRHbHpkQ2dwTEZ4dUlDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBMRnh1SUNBZ0lHUnBjMkZpYkdWVWNtbGphMnhsT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeUxDQm1ZV3h6WlNsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5PMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXZDlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5MbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JCWkdScGRHbHZibUZzU1dObFUyVnlkbVZ5Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBSR2x6WVdKc1pWUnlhV05yYkdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3VjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaMzBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRV1JrYVhScGIyNWhiRWxqWlZObGNuWmxjbk5NYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRWFYTmhZbXhsVkhKcFkydHNaU2dwTzF4dUlDQnBaaUFvWmlrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQkpRMFZUWlhKMlpYSWdZV1JrYVhScGIyNWhiRjlwWTJWZmMyVnlkbVZ5Y3lBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5UG4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjdWNISnZkRzkwZVhCbExtZGxkRUZrWkdsMGFXOXVZV3hKWTJWVFpYSjJaWEp6VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJK2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxDQXhLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFozMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1Y0hKdmRHOTBlWEJsTG5ObGRFRmtaR2wwYVc5dVlXeEpZMlZUWlhKMlpYSnpUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeVBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeTV3Y205MGIzUjVjR1V1WVdSa1FXUmthWFJwYjI1aGJFbGpaVk5sY25abGNuTWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2l3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFozMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5CeWIzUnZkSGx3WlM1amJHVmhja0ZrWkdsMGFXOXVZV3hKWTJWVFpYSjJaWEp6VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSQlpHUnBkR2x2Ym1Gc1NXTmxVMlZ5ZG1WeWMweHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnWkdsellXSnNaVjkwY21samEyeGxJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5MbkJ5YjNSdmRIbHdaUzVuWlhSRWFYTmhZbXhsVkhKcFkydHNaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3VjSEp2ZEc5MGVYQmxMbk5sZEVScGMyRmliR1ZVY21samEyeGxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNiMjlzWldGdVJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjMlJ3T2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXNJRndpWENJcExGeHVJQ0FnSUc5d2RHbHZibUZzUTI5dVptbG5PaUFvWmlBOUlHMXpaeTVuWlhSUGNIUnBiMjVoYkVOdmJtWnBaeWdwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeTUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTJSd0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU5d2RHbHZibUZzUTI5dVptbG5LSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlRaSEFvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUGNIUnBiMjVoYkVOdmJtWnBaeWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3VjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklITmtjQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aUzV3Y205MGIzUjVjR1V1WjJWMFUyUndJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbk5sZEZOa2NDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lGZGxZbEpVUTBOdmJtWnBaeUJ2Y0hScGIyNWhiRjlqYjI1bWFXY2dQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJVdWNISnZkRzkwZVhCbExtZGxkRTl3ZEdsdmJtRnNRMjl1Wm1sbklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5mU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnl3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNXdjbTkwYjNSNWNHVXVjMlYwVDNCMGFXOXVZV3hEYjI1bWFXY2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBTVzVwZEZOMFlXZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x2Ym1Gc1EyOXVabWxuSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRTl3ZEdsdmJtRnNRMjl1Wm1sbktIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsTG5CeWIzUnZkSGx3WlM1b1lYTlBjSFJwYjI1aGJFTnZibVpwWnlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aWDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUdOaGJtUnBaR0YwWlRvZ0tHWWdQU0J0YzJjdVoyVjBRMkZ1Wkdsa1lYUmxLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRlZ3WkdGMFpWTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSVmNHUmhkR1ZUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEZWd1pHRjBaVk4wWVdkbE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkRZVzVrYVdSaGRHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSVmNHUmhkR1ZUZEdGblpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFEyRnVaR2xrWVhSbEtDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCSlEwVkRZVzVrYVdSaGRHVWdZMkZ1Wkdsa1lYUmxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWRsZEVOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1VzSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWHgxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhSRFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aUzV3Y205MGIzUjVjR1V1WTJ4bFlYSkRZVzVrYVdSaGRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFEyRnVaR2xrWVhSbEtIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVdWNISnZkRzkwZVhCbExtaGhjME5oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVJ2Ym1WVGRHRm5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVJ2Ym1WVGRHRm5aWDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JseHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkViMjVsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRWIyNWxVM1JoWjJVN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JFYjI1bFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFVnljbTl5VTNSaFoyVXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0J6ZEdGMGRYTTZJQ2htSUQwZ2JYTm5MbWRsZEZOMFlYUjFjeWdwS1NBbUppQm5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlU3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4bmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpNVRkR0YwZFhNdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVGRHRjBkWE1vZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSVGRHRjBkWE1vS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQm5iMjluYkdVdWNuQmpMbE4wWVhSMWN5QnpkR0YwZFhNZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbExuQnliM1J2ZEhsd1pTNW5aWFJUZEdGMGRYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhOOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN5d2dNU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDNCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWFJUZEdGMGRYTWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVM1JoZEhWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZOMFlYUjFjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFVnljbTl5VTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWhoYzFOMFlYUjFjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCUGJtVnZaaUJuY205MWNDQmtaV1pwYm1sMGFXOXVjeUJtYjNJZ2RHaHBjeUJ0WlhOellXZGxMaUJGWVdOb0lHZHliM1Z3SUdSbFptbHVaWE1nZEdobElHWnBaV3hrWEc0Z0tpQnVkVzFpWlhKeklHSmxiRzl1WjJsdVp5QjBieUIwYUdGMElHZHliM1Z3TGlCWGFHVnVJRzltSUhSb1pYTmxJR1pwWld4a2N5Y2dkbUZzZFdVZ2FYTWdjMlYwTENCaGJHeGNiaUFxSUc5MGFHVnlJR1pwWld4a2N5QnBiaUIwYUdVZ1ozSnZkWEFnWVhKbElHTnNaV0Z5WldRdUlFUjFjbWx1WnlCa1pYTmxjbWxoYkdsNllYUnBiMjRzSUdsbUlHMTFiSFJwY0d4bFhHNGdLaUJtYVdWc1pITWdZWEpsSUdWdVkyOTFiblJsY21Wa0lHWnZjaUJoSUdkeWIzVndMQ0J2Ym14NUlIUm9aU0JzWVhOMElIWmhiSFZsSUhObFpXNGdkMmxzYkNCaVpTQnJaWEIwTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUd2hRWEp5WVhrOGJuVnRZbVZ5UGo1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbTl1Wlc5bVIzSnZkWEJ6WHlBOUlGdGJNaXd6TERRc05WMWRPMXh1WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzVUZEdGblpVTmhjMlVnUFNCN1hHNGdJRk5VUVVkRlgwNVBWRjlUUlZRNklEQXNYRzRnSUVsT1NWUTZJRElzWEc0Z0lGVlFSRUZVUlRvZ015eGNiaUFnUkU5T1JUb2dOQ3hjYmlBZ1JWSlNUMUk2SURWY2JuMDdYRzVjYmk4cUtseHVJQ29nUUhKbGRIVnliaUI3Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExsTjBZV2RsUTJGelpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSVGRHRm5aVU5oYzJVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbE4wWVdkbFEyRnpaWDBnS2k4b2FuTndZaTVOWlhOellXZGxMbU52YlhCMWRHVlBibVZ2WmtOaGMyVW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTa3BPMXh1ZlR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCMWRXbGtPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURFc0lGd2lYQ0lwTEZ4dUlDQWdJR2x1YVhRNklDaG1JRDBnYlhObkxtZGxkRWx1YVhRb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbExuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppa3NYRzRnSUNBZ2RYQmtZWFJsT2lBb1ppQTlJRzF6Wnk1blpYUlZjR1JoZEdVb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQmtiMjVsT2lBb1ppQTlJRzF6Wnk1blpYUkViMjVsS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcExGeHVJQ0FnSUdWeWNtOXlPaUFvWmlBOUlHMXpaeTVuWlhSRmNuSnZjaWdwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVmRXbGtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBTVzVwZEZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTVzVwZENoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlZjR1JoZEdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EwT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRWIyNWxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRWIyNWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJGY25KdmNpaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZYVnBaQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVsdWFYUW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWWEJrWVhSbEtDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSVmNHUmhkR1ZUZEdGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBSRzl1WlNncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEUXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRmNuSnZjaWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURVc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2dkWFZwWkNBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdVoyVjBWWFZwWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1elpYUlZkV2xrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnUVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTQnBibWwwSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1WjJWMFNXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aU3dnTWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aWHgxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxkRWx1YVhRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURJc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtTnNaV0Z5U1c1cGRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSSmJtbDBLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW9ZWE5KYm1sMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVZ2RYQmtZWFJsSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUlZjR1JoZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlY5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxMQ0F6S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlY4ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkSDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNXpaWFJWY0dSaGRHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lETXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVZYQmtZWFJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRlZ3WkdGMFpTaDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWFHRnpWWEJrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsSUdSdmJtVWdQU0EwTzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJFYjI1bElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVJ2Ym1WVGRHRm5aWDBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExDQTBLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbGZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1YzJWMFJHOXVaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dOQ3dnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1WTJ4bFlYSkViMjVsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVJ2Ym1Vb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1oaGMwUnZibVVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0EwS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUVGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxJR1Z5Y205eUlEMGdOVHRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRVZ5Y205eUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlY5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFVnljbTl5VTNSaFoyVXNJRFVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVjBSWEp5YjNJZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURVc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtTnNaV0Z5UlhKeWIzSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFJYSnliM0lvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWhoYzBWeWNtOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCelpIQTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVMlJ3S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFUyUndLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2djMlJ3SUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBVMlJ3SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdWMyVjBVMlJ3SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aWDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCallXNWthV1JoZEdVNklDaG1JRDBnYlhObkxtZGxkRU5oYm1ScFpHRjBaU2dwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFTmhibVJwWkdGMFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRMkZ1Wkdsa1lYUmxLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkpRMFZEWVc1a2FXUmhkR1VnWTJGdVpHbGtZWFJsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5CeWIzUnZkSGx3WlM1blpYUkRZVzVrYVdSaGRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExDQXhLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWFJEWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrTmhibVJwWkdGMFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSRFlXNWthV1JoZEdVb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdWNISnZkRzkwZVhCbExtaGhjME5oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpTNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzVjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZFYjI1bFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZFYjI1bFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJWOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYzNSaGRIVnpPaUFvWmlBOUlHMXpaeTVuWlhSVGRHRjBkWE1vS1NrZ0ppWWdaMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0l1VTNSaGRIVnpMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ1oyOXZaMnhsWDNKd1kxOXpkR0YwZFhOZmNHSXVVM1JoZEhWek8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEdkdmIyZHNaVjl5Y0dOZmMzUmhkSFZ6WDNCaUxsTjBZWFIxY3k1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZOMFlYUjFjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlRkR0YwZFhNb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJR2R2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpTGxOMFlYUjFjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeUJ6ZEdGMGRYTWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzV3Y205MGIzUjVjR1V1WjJWMFUzUmhkSFZ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0JuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWk1VGRHRjBkWE1zSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxYzN4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYUlRkR0YwZFhNZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzV3Y205MGIzUjVjR1V1WTJ4bFlYSlRkR0YwZFhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVTNSaGRIVnpLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWhoYzFOMFlYUjFjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCUGJtVnZaaUJuY205MWNDQmtaV1pwYm1sMGFXOXVjeUJtYjNJZ2RHaHBjeUJ0WlhOellXZGxMaUJGWVdOb0lHZHliM1Z3SUdSbFptbHVaWE1nZEdobElHWnBaV3hrWEc0Z0tpQnVkVzFpWlhKeklHSmxiRzl1WjJsdVp5QjBieUIwYUdGMElHZHliM1Z3TGlCWGFHVnVJRzltSUhSb1pYTmxJR1pwWld4a2N5Y2dkbUZzZFdVZ2FYTWdjMlYwTENCaGJHeGNiaUFxSUc5MGFHVnlJR1pwWld4a2N5QnBiaUIwYUdVZ1ozSnZkWEFnWVhKbElHTnNaV0Z5WldRdUlFUjFjbWx1WnlCa1pYTmxjbWxoYkdsNllYUnBiMjRzSUdsbUlHMTFiSFJwY0d4bFhHNGdLaUJtYVdWc1pITWdZWEpsSUdWdVkyOTFiblJsY21Wa0lHWnZjaUJoSUdkeWIzVndMQ0J2Ym14NUlIUm9aU0JzWVhOMElIWmhiSFZsSUhObFpXNGdkMmxzYkNCaVpTQnJaWEIwTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUd2hRWEp5WVhrOGJuVnRZbVZ5UGo1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE4Z1BTQmJXeklzTXl3MExEVmRYVHRjYmx4dUx5b3FYRzRnS2lCQVpXNTFiU0I3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTGxOMFlXZGxRMkZ6WlNBOUlIdGNiaUFnVTFSQlIwVmZUazlVWDFORlZEb2dNQ3hjYmlBZ1NVNUpWRG9nTWl4Y2JpQWdWVkJFUVZSRk9pQXpMRnh1SUNCRVQwNUZPaUEwTEZ4dUlDQkZVbEpQVWpvZ05WeHVmVHRjYmx4dUx5b3FYRzRnS2lCQWNtVjBkWEp1SUh0d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbE4wWVdkbFEyRnpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBVM1JoWjJWRFlYTmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdVUzUmhaMlZEWVhObGZTQXFMeWhxYzNCaUxrMWxjM05oWjJVdVkyOXRjSFYwWlU5dVpXOW1RMkZ6WlNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExtOXVaVzltUjNKdmRYQnpYMXN3WFNrcE8xeHVmVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2RYVnBaRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQmNJbHdpS1N4Y2JpQWdJQ0JwYm1sME9pQW9aaUE5SUcxelp5NW5aWFJKYm1sMEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQjFjR1JoZEdVNklDaG1JRDBnYlhObkxtZGxkRlZ3WkdGMFpTZ3BLU0FtSmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0JrYjI1bE9pQW9aaUE5SUcxelp5NW5aWFJFYjI1bEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQmxjbkp2Y2pvZ0tHWWdQU0J0YzJjdVoyVjBSWEp5YjNJb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlU3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlZkV2xrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSSmJtbDBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlU3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFZYQmtZWFJsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdORHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRWIyNWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWeWNtOXlLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVlhWcFpDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRWx1YVhRb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGVndaR0YwWlNncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkViMjVsS0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ05DeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRmNuSnZjaWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURVc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSFYxYVdRZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW5aWFJWZFdsa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVjMlYwVlhWcFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsSUdsdWFYUWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWRsZEVsdWFYUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU3dnTWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlY4ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlY5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbk5sZEVsdWFYUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lESXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlTVzVwZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJKYm1sMEtIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWFHRnpTVzVwZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1FXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlNCMWNHUmhkR1VnUFNBek8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBWWEJrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUlZjR1JoZEdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbU5zWldGeVZYQmtZWFJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRlZ3WkdGMFpTaDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtaGhjMVZ3WkdGMFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJVZ1pHOXVaU0E5SURRN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WjJWMFJHOXVaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbGZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUkc5dVpWTjBZV2RsTENBMEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFJHOXVaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dOQ3dnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFYjI1bElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVSdmJtVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW9ZWE5FYjI1bElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJVZ1pYSnliM0lnUFNBMU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1blpYUkZjbkp2Y2lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aWDBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVXNJRFVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aWHgxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVjMlYwUlhKeWIzSWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEVXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSWEp5YjNJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwUlhKeWIzSW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW9ZWE5GY25KdmNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEVXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZEgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjWFZsYzNRdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dVhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkRHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYRjFaWE4wTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYRjFaWE4wZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhGMVpYTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjWFZsYzNRdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZEgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUdOdmJtWnBaem9nS0dZZ1BTQnRjMmN1WjJWMFEyOXVabWxuS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhOd2IyNXpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWE53YjI1elpYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnpjRzl1YzJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUTI5dVptbG5LSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRGIyNW1hV2NvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5Mbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRmRsWWxKVVEwTnZibVpwWnlCamIyNW1hV2NnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtZGxkRU52Ym1acFp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjc0lERXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWjN4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGRFTnZibVpwWnlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbU5zWldGeVEyOXVabWxuSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRU52Ym1acFp5aDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YUdGelEyOXVabWxuSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVoyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a0tHVjRjRzl5ZEhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFcE8xeHVJaXdpYVcxd2IzSjBJSHNnWkdsaGJFUnBjbVZqZEN3Z1pHbGhiRmRsWWxKVVF5d2dRM0psWkdWdWRHbGhiSE1nZlNCbWNtOXRJRndpTGk5a2FXRnNYQ0k3WEc1Y2JtVjRjRzl5ZENCN1hHNWNkR1JwWVd4RWFYSmxZM1FzWEc1Y2RHUnBZV3hYWldKU1ZFTXNYRzVjZEVOeVpXUmxiblJwWVd4ekxGeHVmVHRjYmlJc0ltbHRjRzl5ZENCN0lHZHljR01nZlNCbWNtOXRJRndpUUdsdGNISnZZbUZpYkdVdFpXNW5MMmR5Y0dNdGQyVmlYQ0k3WEc1cGJYQnZjblFnZXlCRGJHbGxiblJEYUdGdWJtVnNJSDBnWm5KdmJTQmNJaTR2UTJ4cFpXNTBRMmhoYm01bGJGd2lPMXh1YVcxd2IzSjBJSHNnUTI5a1pTQjlJR1p5YjIwZ1hDSXVMMmRsYmk5bmIyOW5iR1V2Y25CakwyTnZaR1ZmY0dKY0lqdGNibWx0Y0c5eWRDQjdJRk4wWVhSMWN5QjlJR1p5YjIwZ1hDSXVMMmRsYmk5bmIyOW5iR1V2Y25CakwzTjBZWFIxYzE5d1lsd2lPMXh1YVcxd2IzSjBJSHNnUVhWMGFHVnVkR2xqWVhSbFVtVnhkV1Z6ZEN3Z1FYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVXNJRUYxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEN3Z1FYVjBhR1Z1ZEdsallYUmxWRzlTWlhOd2IyNXpaU3dnUTNKbFpHVnVkR2xoYkhNZ1lYTWdVRUpEY21Wa1pXNTBhV0ZzY3lCOUlHWnliMjBnWENJdUwyZGxiaTl3Y205MGJ5OXljR012ZGpFdllYVjBhRjl3WWx3aU8xeHVhVzF3YjNKMElIc2dRWFYwYUZObGNuWnBZMlVzSUVWNGRHVnlibUZzUVhWMGFGTmxjblpwWTJVZ2ZTQm1jbTl0SUZ3aUxpOW5aVzR2Y0hKdmRHOHZjbkJqTDNZeEwyRjFkR2hmY0dKZmMyVnlkbWxqWlZ3aU8xeHVhVzF3YjNKMElIc2dRMkZzYkZKbGNYVmxjM1FzSUVOaGJHeFNaWE53YjI1elpTd2dRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXNJRU5oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaU3dnU1VORlEyRnVaR2xrWVhSbElIMGdabkp2YlNCY0lpNHZaMlZ1TDNCeWIzUnZMM0p3WXk5M1pXSnlkR012ZGpFdmMybG5ibUZzYVc1blgzQmlYQ0k3WEc1cGJYQnZjblFnZXlCVGFXZHVZV3hwYm1kVFpYSjJhV05sSUgwZ1puSnZiU0JjSWk0dloyVnVMM0J5YjNSdkwzSndZeTkzWldKeWRHTXZkakV2YzJsbmJtRnNhVzVuWDNCaVgzTmxjblpwWTJWY0lqdGNibWx0Y0c5eWRDQjdJRzVsZDFCbFpYSkRiMjV1WldOMGFXOXVSbTl5UTJ4cFpXNTBJSDBnWm5KdmJTQmNJaTR2Y0dWbGNsd2lPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVScFlXeFBjSFJwYjI1eklIdGNibHgwWVhWMGFFVnVkR2wwZVQ4NklITjBjbWx1Wnp0Y2JseDBZM0psWkdWdWRHbGhiSE0vT2lCRGNtVmtaVzUwYVdGc2N6dGNibHgwZDJWaWNuUmpUM0IwYVc5dWN6ODZJRVJwWVd4WFpXSlNWRU5QY0hScGIyNXpPMXh1WEhSbGVIUmxjbTVoYkVGMWRHaEJaR1J5WlhOelB6b2djM1J5YVc1bk8xeHVYSFJsZUhSbGNtNWhiRUYxZEdoVWIwVnVkR2wwZVQ4NklITjBjbWx1Wnp0Y2JuMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JFYVdGc1YyVmlVbFJEVDNCMGFXOXVjeUI3WEc1Y2RHUnBjMkZpYkdWVWNtbGphMnhsU1VORk9pQmliMjlzWldGdU8xeHVYSFJ5ZEdORGIyNW1hV2MvT2lCU1ZFTkRiMjVtYVdkMWNtRjBhVzl1TzF4dVhHNWNkQzh2SUhOcFoyNWhiR2x1WjBGMWRHaEZiblJwZEhrZ2FYTWdkR2hsSUdWdWRHbDBlU0IwYnlCaGRYUm9aVzUwYVdOaGRHVWdZWE1nZEc4Z2RHaGxJSE5wWjI1aGJHVnlMbHh1WEhSemFXZHVZV3hwYm1kQmRYUm9SVzUwYVhSNVB6b2djM1J5YVc1bk8xeHVYRzVjZEM4dklITnBaMjVoYkdsdVowVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTWdhWE1nZEdobElHRmtaSEpsYzNNZ2RHOGdjR1Z5Wm05eWJTQmxlSFJsY201aGJDQmhkWFJvSUhsbGRDNWNibHgwTHk4Z1ZHaHBjeUJwY3lCMWJteHBhMlZzZVNCMGJ5QmlaU0J1WldWa1pXUWdjMmx1WTJVZ2RHaGxJSE5wWjI1aGJHVnlJR2x6SUhSNWNHbGpZV3hzZVNCcGJpQjBhR1VnYzJGdFpWeHVYSFF2THlCd2JHRmpaU0IzYUdWeVpTQmhkWFJvWlc1MGFXTmhkR2x2YmlCb1lYQndaVzV6TGx4dVhIUnphV2R1WVd4cGJtZEZlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpQem9nYzNSeWFXNW5PMXh1WEc1Y2RDOHZJSE5wWjI1aGJHbHVaMFY0ZEdWeWJtRnNRWFYwYUZSdlJXNTBhWFI1SUdseklIUm9aU0JsYm5ScGRIa2dkRzhnWVhWMGFHVnVkR2xqWVhSbElHWnZjaUJoWm5SbGNseHVYSFF2THlCbGVIUmxjbTVoYkd4NUlHRjFkR2hsYm5ScFkyRjBhVzVuTGx4dVhIUXZMeUJVYUdseklHbHpJSFZ1YkdsclpXeDVJSFJ2SUdKbElHNWxaV1JsWkNCemFXNWpaU0IwYUdVZ2MybG5ibUZzWlhJZ2FYTWdkSGx3YVdOaGJHeDVJR2x1SUhSb1pTQnpZVzFsWEc1Y2RDOHZJSEJzWVdObElIZG9aWEpsSUdGMWRHaGxiblJwWTJGMGFXOXVJR2hoY0hCbGJuTXVYRzVjZEhOcFoyNWhiR2x1WjBWNGRHVnlibUZzUVhWMGFGUnZSVzUwYVhSNVB6b2djM1J5YVc1bk8xeHVYRzVjZEM4dklITnBaMjVoYkdsdVowTnlaV1JsYm5ScFlXeHpJR0Z5WlNCMWMyVmtJSFJ2SUdGMWRHaGxiblJwWTJGMFpTQjBhR1VnY21WeGRXVnpkQ0IwYnlCMGFHVWdjMmxuYm1Gc2FXNW5JSE5sY25abGNpNWNibHgwYzJsbmJtRnNhVzVuUTNKbFpHVnVkR2xoYkhNL09pQkRjbVZrWlc1MGFXRnNjenRjYm4xY2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRjbVZrWlc1MGFXRnNjeUI3WEc1Y2RIUjVjR1U2SUhOMGNtbHVaenRjYmx4MGNHRjViRzloWkRvZ2MzUnlhVzVuTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1pHbGhiRVJwY21WamRDaGhaR1J5WlhOek9pQnpkSEpwYm1jc0lHOXdkSE0vT2lCRWFXRnNUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThaM0p3WXk1VWNtRnVjM0J2Y25SR1lXTjBiM0o1UGlCN1hHNWNkR052Ym5OMElHUmxabUYxYkhSR1lXTjBiM0o1SUQwZ0tHOXdkSE02SUdkeWNHTXVWSEpoYm5Od2IzSjBUM0IwYVc5dWN5azZJR2R5Y0dNdVZISmhibk53YjNKMElEMCtJSHRjYmx4MFhIUnlaWFIxY200Z1ozSndZeTVEY205emMwSnliM2R6WlhKSWRIUndWSEpoYm5Od2IzSjBLSHNnZDJsMGFFTnlaV1JsYm5ScFlXeHpPaUJtWVd4elpTQjlLU2h2Y0hSektUdGNibHgwZlR0Y2JseDBhV1lnS0NGdmNIUnpQeTVqY21Wa1pXNTBhV0ZzY3lrZ2UxeHVYSFJjZEhKbGRIVnliaUJrWldaaGRXeDBSbUZqZEc5eWVUdGNibHgwZlZ4dVhIUnlaWFIxY200Z2JXRnJaVUYxZEdobGJuUnBZMkYwWldSVWNtRnVjM0J2Y25SR1lXTjBiM0o1S0dGa1pISmxjM01zSUdSbFptRjFiSFJHWVdOMGIzSjVMQ0J2Y0hSektUdGNibjFjYmx4dVlYTjVibU1nWm5WdVkzUnBiMjRnYldGclpVRjFkR2hsYm5ScFkyRjBaV1JVY21GdWMzQnZjblJHWVdOMGIzSjVLR0ZrWkhKbGMzTTZJSE4wY21sdVp5d2daR1ZtWVhWc2RFWmhZM1J2Y25rNklHZHljR011VkhKaGJuTndiM0owUm1GamRHOXllU3dnYjNCMGN6ODZJRVJwWVd4UGNIUnBiMjV6S1RvZ1VISnZiV2x6WlR4bmNuQmpMbFJ5WVc1emNHOXlkRVpoWTNSdmNuaytJSHRjYmx4MGJHVjBJR0ZqWTJWemMxUnZhMlZ1SUQwZ1hDSmNJanRjYmx4MFkyOXVjM1FnWjJWMFJYaDBjbUZOWlhSaFpHRjBZU0E5SUdGemVXNWpJQ2dwT2lCUWNtOXRhWE5sUEdkeWNHTXVUV1YwWVdSaGRHRStJRDArSUh0Y2JseDBYSFF2THlCVVQwUlBLR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzkyYVdGdGNtOWliM1JwWTNNdloyOTFkR2xzY3k5cGMzTjFaWE12TVRNcE9pQm9ZVzVrYkdVZ1pYaHdhWEpoZEdsdmJseHVYSFJjZEdsbUlDaGhZMk5sYzNOVWIydGxiaUE5UFNCY0lsd2lLU0I3WEc1Y2RGeDBYSFJqYjI1emRDQnlaWEYxWlhOMElEMGdibVYzSUVGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNRb0tUdGNibHgwWEhSY2RISmxjWFZsYzNRdWMyVjBSVzUwYVhSNUtHOXdkSE0vTG1GMWRHaEZiblJwZEhrZ1B5QnZjSFJ6TG1GMWRHaEZiblJwZEhrZ09pQmhaR1J5WlhOekxuSmxjR3hoWTJVb0wxNG9MaW82WEZ3dlhGd3ZLUzhzSUNjbktTazdYRzVjZEZ4MFhIUmpiMjV6ZENCamNtVmtjeUE5SUc1bGR5QlFRa055WldSbGJuUnBZV3h6S0NrN1hHNWNkRngwWEhSamNtVmtjeTV6WlhSVWVYQmxLRzl3ZEhNL0xtTnlaV1JsYm5ScFlXeHpQeTUwZVhCbElTazdYRzVjZEZ4MFhIUmpjbVZrY3k1elpYUlFZWGxzYjJGa0tHOXdkSE0vTG1OeVpXUmxiblJwWVd4elB5NXdZWGxzYjJGa0lTazdYRzVjZEZ4MFhIUnlaWEYxWlhOMExuTmxkRU55WldSbGJuUnBZV3h6S0dOeVpXUnpLVHRjYmx4dVhIUmNkRngwYkdWMElIQlNaWE52YkhabE9pQW9kbUZzZFdVNklHZHljR011VFdWMFlXUmhkR0VwSUQwK0lIWnZhV1E3WEc1Y2RGeDBYSFJzWlhRZ2NGSmxhbVZqZERvZ0tISmxZWE52Ymo4NklHRnVlU2tnUFQ0Z2RtOXBaRHRjYmx4MFhIUmNkR3hsZENCa2IyNWxJRDBnYm1WM0lGQnliMjFwYzJVOFozSndZeTVOWlhSaFpHRjBZVDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEZ4MFhIUndVbVZ6YjJ4MlpTQTlJSEpsYzI5c2RtVTdYRzVjZEZ4MFhIUmNkSEJTWldwbFkzUWdQU0J5WldwbFkzUTdYRzVjZEZ4MFhIUjlLVHRjYmx4MFhIUmNkR3hsZENCMGFHbHpRV05qWlhOelZHOXJaVzRnUFNCY0lsd2lPMXh1WEhSY2RGeDBaM0p3WXk1cGJuWnZhMlVvUVhWMGFGTmxjblpwWTJVdVFYVjBhR1Z1ZEdsallYUmxMQ0I3WEc1Y2RGeDBYSFJjZEhKbGNYVmxjM1E2SUhKbGNYVmxjM1FzWEc1Y2RGeDBYSFJjZEdodmMzUTZJRzl3ZEhNL0xtVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTWdQeUJ2Y0hSekxtVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTWdPaUJoWkdSeVpYTnpMRnh1WEhSY2RGeDBYSFIwY21GdWMzQnZjblE2SUdSbFptRjFiSFJHWVdOMGIzSjVMRnh1WEhSY2RGeDBYSFJ2YmsxbGMzTmhaMlU2SUNodFpYTnpZV2RsT2lCQmRYUm9aVzUwYVdOaGRHVlNaWE53YjI1elpTa2dQVDRnZTF4dVhIUmNkRngwWEhSY2RIUm9hWE5CWTJObGMzTlViMnRsYmlBOUlHMWxjM05oWjJVdVoyVjBRV05qWlhOelZHOXJaVzRvS1R0Y2JseDBYSFJjZEZ4MGZTeGNibHgwWEhSY2RGeDBiMjVGYm1RNklDaGpiMlJsT2lCbmNuQmpMa052WkdVc0lHMXpaem9nYzNSeWFXNW5JSHdnZFc1a1pXWnBibVZrTENCMGNtRnBiR1Z5Y3pvZ1ozSndZeTVOWlhSaFpHRjBZU2tnUFQ0Z2UxeHVYSFJjZEZ4MFhIUmNkR2xtSUNoamIyUmxJRDA5SUdkeWNHTXVRMjlrWlM1UFN5a2dlMXh1WEhSY2RGeDBYSFJjZEZ4MGNGSmxjMjlzZG1Vb2JXUXBPMXh1WEhSY2RGeDBYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFJjZEZ4MFhIUndVbVZxWldOMEtHMXpaeWs3WEc1Y2RGeDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUjlLVHRjYmx4MFhIUmNkR0YzWVdsMElHUnZibVU3WEc1Y2RGeDBYSFJoWTJObGMzTlViMnRsYmlBOUlIUm9hWE5CWTJObGMzTlViMnRsYmp0Y2JseHVYSFJjZEZ4MGFXWWdLRzl3ZEhNL0xtVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTWdKaVlnYjNCMGN6OHVaWGgwWlhKdVlXeEJkWFJvVkc5RmJuUnBkSGtwSUh0Y2JseDBYSFJjZEZ4MFkyOXVjM1FnYldRZ1BTQnVaWGNnWjNKd1l5NU5aWFJoWkdGMFlTZ3BPMXh1WEhSY2RGeDBYSFJ0WkM1elpYUW9YQ0poZFhSb2IzSnBlbUYwYVc5dVhDSXNJR0JDWldGeVpYSWdKSHRoWTJObGMzTlViMnRsYm4xZ0tUdGNibHh1WEhSY2RGeDBYSFJrYjI1bElEMGdibVYzSUZCeWIyMXBjMlU4WjNKd1l5NU5aWFJoWkdGMFlUNG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkRngwWEhSY2RIQlNaWE52YkhabElEMGdjbVZ6YjJ4MlpUdGNibHgwWEhSY2RGeDBYSFJ3VW1WcVpXTjBJRDBnY21WcVpXTjBPMXh1WEhSY2RGeDBYSFI5S1R0Y2JseDBYSFJjZEZ4MGRHaHBjMEZqWTJWemMxUnZhMlZ1SUQwZ1hDSmNJanRjYmx4dVhIUmNkRngwWEhSamIyNXpkQ0J5WlhGMVpYTjBJRDBnYm1WM0lFRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkQ2dwTzF4dVhIUmNkRngwWEhSeVpYRjFaWE4wTG5ObGRFVnVkR2wwZVNodmNIUnpMbVY0ZEdWeWJtRnNRWFYwYUZSdlJXNTBhWFI1S1R0Y2JseDBYSFJjZEZ4MFozSndZeTVwYm5admEyVW9SWGgwWlhKdVlXeEJkWFJvVTJWeWRtbGpaUzVCZFhSb1pXNTBhV05oZEdWVWJ5d2dlMXh1WEhSY2RGeDBYSFJjZEhKbGNYVmxjM1E2SUhKbGNYVmxjM1FzWEc1Y2RGeDBYSFJjZEZ4MGFHOXpkRG9nYjNCMGN5NWxlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpJU3hjYmx4MFhIUmNkRngwWEhSMGNtRnVjM0J2Y25RNklHUmxabUYxYkhSR1lXTjBiM0o1TEZ4dVhIUmNkRngwWEhSY2RHMWxkR0ZrWVhSaE9pQnRaQ3hjYmx4MFhIUmNkRngwWEhSdmJrMWxjM05oWjJVNklDaHRaWE56WVdkbE9pQkJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sS1NBOVBpQjdYRzVjZEZ4MFhIUmNkRngwWEhSMGFHbHpRV05qWlhOelZHOXJaVzRnUFNCdFpYTnpZV2RsTG1kbGRFRmpZMlZ6YzFSdmEyVnVLQ2s3WEc1Y2RGeDBYSFJjZEZ4MGZTeGNibHgwWEhSY2RGeDBYSFJ2YmtWdVpEb2dLR052WkdVNklHZHljR011UTI5a1pTd2diWE5uT2lCemRISnBibWNnZkNCMWJtUmxabWx1WldRc0lIUnlZV2xzWlhKek9pQm5jbkJqTGsxbGRHRmtZWFJoS1NBOVBpQjdYRzVjZEZ4MFhIUmNkRngwWEhScFppQW9ZMjlrWlNBOVBTQm5jbkJqTGtOdlpHVXVUMHNwSUh0Y2JseDBYSFJjZEZ4MFhIUmNkRngwY0ZKbGMyOXNkbVVvYldRcE8xeHVYSFJjZEZ4MFhIUmNkRngwZlNCbGJITmxJSHRjYmx4MFhIUmNkRngwWEhSY2RGeDBjRkpsYW1WamRDaHRjMmNwTzF4dVhIUmNkRngwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFJjZEgxY2JseDBYSFJjZEZ4MGZTazdYRzVjZEZ4MFhIUmNkR0YzWVdsMElHUnZibVU3WEc1Y2RGeDBYSFJjZEdGalkyVnpjMVJ2YTJWdUlEMGdkR2hwYzBGalkyVnpjMVJ2YTJWdU8xeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBYSFJqYjI1emRDQnRaQ0E5SUc1bGR5Qm5jbkJqTGsxbGRHRmtZWFJoS0NrN1hHNWNkRngwYldRdWMyVjBLRndpWVhWMGFHOXlhWHBoZEdsdmJsd2lMQ0JnUW1WaGNtVnlJQ1I3WVdOalpYTnpWRzlyWlc1OVlDazdYRzVjZEZ4MGNtVjBkWEp1SUcxa08xeHVYSFI5WEc1Y2RHTnZibk4wSUdWNGRISmhUV1FnUFNCaGQyRnBkQ0JuWlhSRmVIUnlZVTFsZEdGa1lYUmhLQ2s3WEc1Y2RISmxkSFZ5YmlBb2IzQjBjem9nWjNKd1l5NVVjbUZ1YzNCdmNuUlBjSFJwYjI1ektUb2daM0p3WXk1VWNtRnVjM0J2Y25RZ1BUNGdlMXh1WEhSY2RISmxkSFZ5YmlCdVpYY2dZWFYwYUdWdWRHbGpZWFJsWkZSeVlXNXpjRzl5ZENodmNIUnpMQ0JrWldaaGRXeDBSbUZqZEc5eWVTd2daWGgwY21GTlpDazdYRzVjZEgwN1hHNTlYRzVjYm1Oc1lYTnpJR0YxZEdobGJuUnBZMkYwWldSVWNtRnVjM0J2Y25RZ2FXMXdiR1Z0Wlc1MGN5Qm5jbkJqTGxSeVlXNXpjRzl5ZENCN1hHNWNkSEJ5YjNSbFkzUmxaQ0J5WldGa2IyNXNlU0J2Y0hSek9pQm5jbkJqTGxSeVlXNXpjRzl5ZEU5d2RHbHZibk03WEc1Y2RIQnliM1JsWTNSbFpDQnlaV0ZrYjI1c2VTQjBjbUZ1YzNCdmNuUTZJR2R5Y0dNdVZISmhibk53YjNKME8xeHVYSFJ3Y205MFpXTjBaV1FnY21WaFpHOXViSGtnWlhoMGNtRk5aWFJoWkdGMFlUb2daM0p3WXk1TlpYUmhaR0YwWVR0Y2JseHVYSFJqYjI1emRISjFZM1J2Y2lodmNIUnpPaUJuY25CakxsUnlZVzV6Y0c5eWRFOXdkR2x2Ym5Nc0lHUmxabUYxYkhSR1lXTjBiM0o1T2lCbmNuQmpMbFJ5WVc1emNHOXlkRVpoWTNSdmNua3NJR1Y0ZEhKaFRXVjBZV1JoZEdFNklHZHljR011VFdWMFlXUmhkR0VwSUh0Y2JseDBYSFIwYUdsekxtOXdkSE1nUFNCdmNIUnpPMXh1WEhSY2RIUm9hWE11WlhoMGNtRk5aWFJoWkdGMFlTQTlJR1Y0ZEhKaFRXVjBZV1JoZEdFN1hHNWNkRngwZEdocGN5NTBjbUZ1YzNCdmNuUWdQU0JrWldaaGRXeDBSbUZqZEc5eWVTaHZjSFJ6S1R0Y2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCaGMzbHVZeUJ6ZEdGeWRDaHRaWFJoWkdGMFlUb2daM0p3WXk1TlpYUmhaR0YwWVNrZ2UxeHVYSFJjZEhSb2FYTXVaWGgwY21GTlpYUmhaR0YwWVM1bWIzSkZZV05vS0NoclpYa3NJSFpoYkhWbGN5a2dQVDRnZTF4dVhIUmNkRngwYldWMFlXUmhkR0V1YzJWMEtHdGxlU3dnZG1Gc2RXVnpLVHRjYmx4MFhIUjlLVHRjYmx4MFhIUjBhR2x6TG5SeVlXNXpjRzl5ZEM1emRHRnlkQ2h0WlhSaFpHRjBZU2s3WEc1Y2RIMWNibHh1WEhSd2RXSnNhV01nYzJWdVpFMWxjM05oWjJVb2JYTm5RbmwwWlhNNklGVnBiblE0UVhKeVlYa3BJSHRjYmx4MFhIUjBhR2x6TG5SeVlXNXpjRzl5ZEM1elpXNWtUV1Z6YzJGblpTaHRjMmRDZVhSbGN5azdYRzVjZEgxY2JseHVYSFJ3ZFdKc2FXTWdabWx1YVhOb1UyVnVaQ2dwSUh0Y2JseDBYSFIwYUdsekxuUnlZVzV6Y0c5eWRDNW1hVzVwYzJoVFpXNWtLQ2s3WEc1Y2RIMWNibHh1WEhSd2RXSnNhV01nWTJGdVkyVnNLQ2tnZTF4dVhIUmNkSFJvYVhNdWRISmhibk53YjNKMExtTmhibU5sYkNncE8xeHVYSFI5WEc1OVhHNWNibWx1ZEdWeVptRmpaU0JYWldKU1ZFTkRiMjV1WldOMGFXOXVJSHRjYmx4MGRISmhibk53YjNKMFJtRmpkRzl5ZVRvZ1ozSndZeTVVY21GdWMzQnZjblJHWVdOMGIzSjVPMXh1WEhSd1pXVnlRMjl1Ym1WamRHbHZiam9nVWxSRFVHVmxja052Ym01bFkzUnBiMjQ3WEc1OVhHNWNiaTh2SUdScFlXeFhaV0pTVkVNZ2JXRnJaWE1nWVNCamIyNXVaV04wYVc5dUlIUnZJR2RwZG1WdUlHaHZjM1FnWW5rZ2MybG5ibUZzYVc1bklIZHBkR2dnZEdobElHRmtaSEpsYzNNZ2NISnZkbWxrWldRdUlFRWdVSEp2YldselpTQnBjeUJ5WlhSMWNtNWxaRnh1THk4Z2RYQnZiaUJ6ZFdOalpYTnpablZzSUdOdmJtNWxZM1JwYjI0Z2RHaGhkQ0JqYjI1MFlXbHVjeUJoSUhSeVlXNXpjRzl5ZENCbVlXTjBiM0o1SUhSdklIVnpaU0IzYVhSb0lHZFNVRU1nWTJ4cFpXNTBJR0Z6SUhkbGJHd2dZWE1nZEdobElGZGxZbEpVUTF4dUx5OGdVR1ZsY2tOdmJtNWxZM1JwYjI0Z2FYUnpaV3htTGlCRFlYSmxJSE5vYjNWc1pDQmlaU0IwWVd0bGJpQjNhWFJvSUhSb1pTQlFaV1Z5UTI5dWJtVmpkR2x2YmlCaGJtUWdhWE1nWTNWeWNtVnVkR3g1SUhKbGRIVnlibVZrSUdadmNpQmxlSEJsY21sdFpXNTBZV3hjYmk4dklIVnpaUzVjYmk4dklGUlBSRThvYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDNacFlXMXliMkp2ZEdsamN5OWpiM0psTDJsemMzVmxjeTh4TVRFcE9pQm1hV2QxY21VZ2IzVjBJR1JsWTJWdWRDQjNZWGtnZEc4Z2FHRnVaR3hsSUhKbFkyOXVibVZqZENCdmJpQmpiMjV1WldOMGFXOXVJSFJsY20xcGJtRjBhVzl1WEc1bGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdaR2xoYkZkbFlsSlVReWh6YVdkdVlXeHBibWRCWkdSeVpYTnpPaUJ6ZEhKcGJtY3NJR2h2YzNRNklITjBjbWx1Wnl3Z2IzQjBjejg2SUVScFlXeFBjSFJwYjI1ektUb2dVSEp2YldselpUeFhaV0pTVkVORGIyNXVaV04wYVc5dVBpQjdYRzVjZEdOdmJuTjBJSGRsWW5KMFkwOXdkSE1nUFNCdmNIUnpQeTUzWldKeWRHTlBjSFJwYjI1ek8xeHVYSFJqYjI1emRDQjdJSEJqTENCa1l5QjlJRDBnWVhkaGFYUWdibVYzVUdWbGNrTnZibTVsWTNScGIyNUdiM0pEYkdsbGJuUW9kMlZpY25SalQzQjBjeUFoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JSGRsWW5KMFkwOXdkSE11WkdsellXSnNaVlJ5YVdOcmJHVkpRMFVzSUhkbFluSjBZMDl3ZEhNL0xuSjBZME52Ym1acFp5azdYRzVjYmx4MEx5OGdjbVZ3YkdGalpTQmhkWFJvSUdWdWRHbDBlU0JoYm1RZ1kzSmxaSE5jYmx4MGJHVjBJRzl3ZEhORGIzQjVJRDBnYjNCMGN6dGNibHgwYVdZZ0tHOXdkSE1wSUh0Y2JseDBYSFJ2Y0hSelEyOXdlU0E5SUhzZ0xpNHViM0IwY3lCOUlHRnpJRVJwWVd4UGNIUnBiMjV6TzF4dVhHNWNkRngwYjNCMGMwTnZjSGt1WVhWMGFFVnVkR2wwZVNBOUlHOXdkSE0vTG5kbFluSjBZMDl3ZEdsdmJuTS9Mbk5wWjI1aGJHbHVaMEYxZEdoRmJuUnBkSGxjYmx4MFhIUnBaaUFvSVc5d2RITkRiM0I1TG1GMWRHaEZiblJwZEhrcElIdGNibHgwWEhSY2RHbG1JQ2h2Y0hSelEyOXdlUzVsZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56S1NCN1hHNWNkRngwWEhSY2RHOXdkSE5EYjNCNUxtRjFkR2hGYm5ScGRIa2dQU0J2Y0hSekxtVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTS9MbkpsY0d4aFkyVW9MMTRvTGlvNlhGd3ZYRnd2S1M4c0lDY25LVHRjYmx4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRzl3ZEhORGIzQjVMbUYxZEdoRmJuUnBkSGtnUFNCemFXZHVZV3hwYm1kQlpHUnlaWE56TG5KbGNHeGhZMlVvTDE0b0xpbzZYRnd2WEZ3dktTOHNJQ2NuS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5WEc1Y2RGeDBiM0IwYzBOdmNIa3VZM0psWkdWdWRHbGhiSE1nUFNCdmNIUnpQeTUzWldKeWRHTlBjSFJwYjI1elB5NXphV2R1WVd4cGJtZERjbVZrWlc1MGFXRnNjMXh1WEhSY2RHOXdkSE5EYjNCNUxtVjRkR1Z5Ym1Gc1FYVjBhRUZrWkhKbGMzTWdQU0J2Y0hSelB5NTNaV0p5ZEdOUGNIUnBiMjV6UHk1emFXZHVZV3hwYm1kRmVIUmxjbTVoYkVGMWRHaEJaR1J5WlhOelhHNWNkRngwYjNCMGMwTnZjSGt1WlhoMFpYSnVZV3hCZFhSb1ZHOUZiblJwZEhrZ1BTQnZjSFJ6UHk1M1pXSnlkR05QY0hScGIyNXpQeTV6YVdkdVlXeHBibWRGZUhSbGNtNWhiRUYxZEdoVWIwVnVkR2wwZVZ4dVhIUjlYRzVjYmx4MFkyOXVjM1FnWkdseVpXTjBWSEpoYm5Od2IzSjBJRDBnWVhkaGFYUWdaR2xoYkVScGNtVmpkQ2h6YVdkdVlXeHBibWRCWkdSeVpYTnpMQ0J2Y0hSelEyOXdlU2s3WEc1Y2RHTnZibk4wSUdOc2FXVnVkQ0E5SUdkeWNHTXVZMnhwWlc1MEtGTnBaMjVoYkdsdVoxTmxjblpwWTJVdVEyRnNiQ3dnZTF4dVhIUmNkR2h2YzNRNklITnBaMjVoYkdsdVowRmtaSEpsYzNNc1hHNWNkRngwZEhKaGJuTndiM0owT2lCa2FYSmxZM1JVY21GdWMzQnZjblFzWEc1Y2RIMHBPMXh1WEc1Y2RHbG1JQ2h2Y0hSelB5NWxlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpLU0I3WEc1Y2RGeDBMeThnVkU5RVR5aG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZkbWxoYlhKdlltOTBhV056TDJkdmRYUnBiSE12YVhOemRXVnpMekV5S1RvZ2NISmxjR0Z5WlNCQmRYUm9aVzUwYVdOaGRHVlVieUJvWlhKbFhHNWNkRngwTHk4Z1ptOXlJR05zYVdWdWRDQmphR0Z1Ym1Wc0xseHVYSFI5SUdWc2MyVWdhV1lnS0c5d2RITS9MbU55WldSbGJuUnBZV3h6UHk1MGVYQmxLU0I3WEc1Y2RGeDBMeThnVkU5RVR5aG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZkbWxoYlhKdlltOTBhV056TDJkdmRYUnBiSE12YVhOemRXVnpMekV5S1RvZ2NISmxjR0Z5WlNCQmRYUm9aVzUwYVdOaGRHVWdhR1Z5WlZ4dVhIUmNkQzh2SUdadmNpQmpiR2xsYm5RZ1kyaGhibTVsYkZ4dVhIUjlYRzVjYmx4MGJHVjBJSFYxYVdRZ1BTQW5KenRjYmx4MEx5OGdiMjVzZVNCelpXNWtJRzl1WTJVZ2MybHVZMlVnWlhoamFHRnVaMlVnYldGNUlHVnVaQ0J2Y2lCSlEwVWdiV0Y1SUdWdVpGeHVYSFJzWlhRZ2MyVnVkRVJ2Ym1WUGNrVnljbTl5VDI1alpTQTlJR1poYkhObE8xeHVYSFJqYjI1emRDQnpaVzVrUlhKeWIzSWdQU0FvWlhKeU9pQnpkSEpwYm1jcElEMCtJSHRjYmx4MFhIUnBaaUFvYzJWdWRFUnZibVZQY2tWeWNtOXlUMjVqWlNrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkSDFjYmx4MFhIUnpaVzUwUkc5dVpVOXlSWEp5YjNKUGJtTmxJRDBnZEhKMVpUdGNibHgwWEhSamIyNXpkQ0JqWVd4c1VtVnhkV1Z6ZEZWd1pHRjBaU0E5SUc1bGR5QkRZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDZ3BPMXh1WEhSY2RHTmhiR3hTWlhGMVpYTjBWWEJrWVhSbExuTmxkRlYxYVdRb2RYVnBaQ2s3WEc1Y2RGeDBZMjl1YzNRZ2MzUmhkSFZ6SUQwZ2JtVjNJRk4wWVhSMWN5Z3BPMXh1WEhSY2RITjBZWFIxY3k1elpYUkRiMlJsS0VOdlpHVXVWVTVMVGs5WFRpazdYRzVjZEZ4MGMzUmhkSFZ6TG5ObGRFMWxjM05oWjJVb1pYSnlLVHRjYmx4MFhIUmpZV3hzVW1WeGRXVnpkRlZ3WkdGMFpTNXpaWFJGY25KdmNpaHpkR0YwZFhNcE8xeHVYSFJjZEdkeWNHTXVkVzVoY25rb1UybG5ibUZzYVc1blUyVnlkbWxqWlM1RFlXeHNWWEJrWVhSbExDQjdYRzVjZEZ4MFhIUnlaWEYxWlhOME9pQmpZV3hzVW1WeGRXVnpkRlZ3WkdGMFpTeGNibHgwWEhSY2RHMWxkR0ZrWVhSaE9pQjdYRzVjZEZ4MFhIUmNkQ2R5Y0dNdGFHOXpkQ2M2SUdodmMzUXNYRzVjZEZ4MFhIUjlMRnh1WEhSY2RGeDBhRzl6ZERvZ2MybG5ibUZzYVc1blFXUmtjbVZ6Y3l4Y2JseDBYSFJjZEhSeVlXNXpjRzl5ZERvZ1pHbHlaV04wVkhKaGJuTndiM0owTEZ4dVhIUmNkRngwYjI1RmJtUTZJQ2h2ZFhSd2RYUTZJR2R5Y0dNdVZXNWhjbmxQZFhSd2RYUThRMkZzYkZWd1pHRjBaVkpsYzNCdmJuTmxQaWtnUFQ0Z2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCN0lITjBZWFIxY3l3Z2MzUmhkSFZ6VFdWemMyRm5aU3dnYldWemMyRm5aU0I5SUQwZ2IzVjBjSFYwTzF4dVhIUmNkRngwWEhScFppQW9jM1JoZEhWeklEMDlQU0JuY25CakxrTnZaR1V1VDBzZ0ppWWdiV1Z6YzJGblpTa2dlMXh1WEhSY2RGeDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSamIyNXpiMnhsTG1WeWNtOXlLSE4wWVhSMWMwMWxjM05oWjJVcFhHNWNkRngwWEhSOVhHNWNkRngwZlNrN1hHNWNkSDFjYmx4MFkyOXVjM1FnYzJWdVpFUnZibVVnUFNBb0tTQTlQaUI3WEc1Y2RGeDBhV1lnS0hObGJuUkViMjVsVDNKRmNuSnZjazl1WTJVcElIdGNibHgwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFI5WEc1Y2RGeDBjMlZ1ZEVSdmJtVlBja1Z5Y205eVQyNWpaU0E5SUhSeWRXVTdYRzVjZEZ4MFkyOXVjM1FnWTJGc2JGSmxjWFZsYzNSVmNHUmhkR1VnUFNCdVpYY2dRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUW9LVHRjYmx4MFhIUmpZV3hzVW1WeGRXVnpkRlZ3WkdGMFpTNXpaWFJWZFdsa0tIVjFhV1FwTzF4dVhIUmNkR05oYkd4U1pYRjFaWE4wVlhCa1lYUmxMbk5sZEVSdmJtVW9kSEoxWlNrN1hHNWNkRngwWjNKd1l5NTFibUZ5ZVNoVGFXZHVZV3hwYm1kVFpYSjJhV05sTGtOaGJHeFZjR1JoZEdVc0lIdGNibHgwWEhSY2RISmxjWFZsYzNRNklHTmhiR3hTWlhGMVpYTjBWWEJrWVhSbExGeHVYSFJjZEZ4MGJXVjBZV1JoZEdFNklIdGNibHgwWEhSY2RGeDBKM0p3WXkxb2IzTjBKem9nYUc5emRDeGNibHgwWEhSY2RIMHNYRzVjZEZ4MFhIUm9iM04wT2lCemFXZHVZV3hwYm1kQlpHUnlaWE56TEZ4dVhIUmNkRngwZEhKaGJuTndiM0owT2lCa2FYSmxZM1JVY21GdWMzQnZjblFzWEc1Y2RGeDBYSFJ2YmtWdVpEb2dLRzkxZEhCMWREb2daM0p3WXk1VmJtRnllVTkxZEhCMWREeERZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVStLU0E5UGlCN1hHNWNkRngwWEhSY2RHTnZibk4wSUhzZ2MzUmhkSFZ6TENCemRHRjBkWE5OWlhOellXZGxMQ0J0WlhOellXZGxJSDBnUFNCdmRYUndkWFE3WEc1Y2RGeDBYSFJjZEdsbUlDaHpkR0YwZFhNZ1BUMDlJR2R5Y0dNdVEyOWtaUzVQU3lBbUppQnRaWE56WVdkbEtTQjdYRzVjZEZ4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEdOdmJuTnZiR1V1WlhKeWIzSW9jM1JoZEhWelRXVnpjMkZuWlNsY2JseDBYSFJjZEgxY2JseDBYSFI5S1R0Y2JseDBmVnh1WEc1Y2RHeGxkQ0J3VW1WemIyeDJaVG9nS0haaGJIVmxPaUJoYm5rcElEMCtJSFp2YVdRN1hHNWNkR3hsZENCd1VtVnFaV04wT2lBb2NtVmhjMjl1UHpvZ1lXNTVLU0E5UGlCMmIybGtPMXh1WEhSc1pYUWdjbVZ0YjNSbFJHVnpZMU5sZENBOUlHNWxkeUJRY205dGFYTmxQR0Z1ZVQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RIQlNaWE52YkhabElEMGdjbVZ6YjJ4MlpUdGNibHgwWEhSd1VtVnFaV04wSUQwZ2NtVnFaV04wTzF4dVhIUjlLVHRjYmx4MGJHVjBJR1Y0WTJoaGJtZGxSRzl1WlNBOUlHWmhiSE5sTzF4dVhIUnBaaUFvSVhkbFluSjBZMDl3ZEhNL0xtUnBjMkZpYkdWVWNtbGphMnhsU1VORktTQjdYRzVjZEZ4MEx5OGdjMlYwSUhWd0lHOW1abVZ5WEc1Y2RGeDBZMjl1YzNRZ2IyWm1aWEpFWlhOaklEMGdZWGRoYVhRZ2NHTXVZM0psWVhSbFQyWm1aWElvS1R0Y2JseHVYSFJjZEd4bGRDQnBZMlZEYjIxd2JHVjBaU0E5SUdaaGJITmxPMXh1WEhSY2RIQmpMbTl1YVdObFkyRnVaR2xrWVhSbElEMGdZWE41Ym1NZ1pYWmxiblFnUFQ0Z2UxeHVYSFJjZEZ4MFlYZGhhWFFnY21WdGIzUmxSR1Z6WTFObGREdGNibHgwWEhSY2RHbG1JQ2hsZUdOb1lXNW5aVVJ2Ym1VcElIdGNibHgwWEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUnBaaUFvWlhabGJuUXVZMkZ1Wkdsa1lYUmxJRDA5UFNCdWRXeHNLU0I3WEc1Y2RGeDBYSFJjZEdsalpVTnZiWEJzWlhSbElEMGdkSEoxWlR0Y2JseDBYSFJjZEZ4MGMyVnVaRVJ2Ym1Vb0tUdGNibHgwWEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUmpiMjV6ZENCcFVISnZkRzhnUFNCcFkyVkRZVzVrYVdSaGRHVlViMUJ5YjNSdktHVjJaVzUwTG1OaGJtUnBaR0YwWlNrN1hHNWNkRngwWEhSamIyNXpkQ0JqWVd4c1VtVnhkV1Z6ZEZWd1pHRjBaU0E5SUc1bGR5QkRZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDZ3BPMXh1WEhSY2RGeDBZMkZzYkZKbGNYVmxjM1JWY0dSaGRHVXVjMlYwVlhWcFpDaDFkV2xrS1R0Y2JseDBYSFJjZEdOaGJHeFNaWEYxWlhOMFZYQmtZWFJsTG5ObGRFTmhibVJwWkdGMFpTaHBVSEp2ZEc4cE8xeHVYSFJjZEZ4MFozSndZeTUxYm1GeWVTaFRhV2R1WVd4cGJtZFRaWEoyYVdObExrTmhiR3hWY0dSaGRHVXNJSHRjYmx4MFhIUmNkRngwY21WeGRXVnpkRG9nWTJGc2JGSmxjWFZsYzNSVmNHUmhkR1VzWEc1Y2RGeDBYSFJjZEcxbGRHRmtZWFJoT2lCN1hHNWNkRngwWEhSY2RGeDBKM0p3WXkxb2IzTjBKem9nYUc5emRDeGNibHgwWEhSY2RGeDBmU3hjYmx4MFhIUmNkRngwYUc5emREb2djMmxuYm1Gc2FXNW5RV1JrY21WemN5eGNibHgwWEhSY2RGeDBkSEpoYm5Od2IzSjBPaUJrYVhKbFkzUlVjbUZ1YzNCdmNuUXNYRzVjZEZ4MFhIUmNkRzl1Ulc1a09pQW9iM1YwY0hWME9pQm5jbkJqTGxWdVlYSjVUM1YwY0hWMFBFTmhiR3hWY0dSaGRHVlNaWE53YjI1elpUNHBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUmpiMjV6ZENCN0lITjBZWFIxY3l3Z2MzUmhkSFZ6VFdWemMyRm5aU3dnYldWemMyRm5aU0I5SUQwZ2IzVjBjSFYwTzF4dVhIUmNkRngwWEhSY2RHbG1JQ2h6ZEdGMGRYTWdQVDA5SUdkeWNHTXVRMjlrWlM1UFN5QW1KaUJ0WlhOellXZGxLU0I3WEc1Y2RGeDBYSFJjZEZ4MFhIUnlaWFIxY200N1hHNWNkRngwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFJjZEdsbUlDaGxlR05vWVc1blpVUnZibVVnZkh3Z2FXTmxRMjl0Y0d4bGRHVXBJSHRjYmx4MFhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUmNkRngwWTI5dWMyOXNaUzVsY25KdmNpaGNJbVZ5Y205eUlITmxibVJwYm1jZ1kyRnVaR2xrWVhSbFhDSXNJSE4wWVhSMWMwMWxjM05oWjJVcFhHNWNkRngwWEhSY2RIMWNibHgwWEhSY2RIMHBPMXh1WEhSY2RIMWNibHh1WEhSY2RHRjNZV2wwSUhCakxuTmxkRXh2WTJGc1JHVnpZM0pwY0hScGIyNG9iMlptWlhKRVpYTmpLVHRjYmx4MGZWeHVYRzVjZEd4bGRDQm9ZWFpsU1c1cGRDQTlJR1poYkhObE8xeHVYSFJqYkdsbGJuUXViMjVOWlhOellXZGxLR0Z6ZVc1aklDaHRaWE56WVdkbE9pQkRZV3hzVW1WemNHOXVjMlVwSUQwK0lIdGNibHgwWEhScFppQW9iV1Z6YzJGblpTNW9ZWE5KYm1sMEtDa3BJSHRjYmx4MFhIUmNkR2xtSUNob1lYWmxTVzVwZENrZ2UxeHVYSFJjZEZ4MFhIUnpaVzVrUlhKeWIzSW9YQ0puYjNRZ2FXNXBkQ0J6ZEdGblpTQnRiM0psSUhSb1lXNGdiMjVqWlZ3aUtUdGNibHgwWEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEZ4MGZWeHVYSFJjZEZ4MFkyOXVjM1FnYVc1cGRDQTlJRzFsYzNOaFoyVXVaMlYwU1c1cGRDZ3BJVHRjYmx4MFhIUmNkR2hoZG1WSmJtbDBJRDBnZEhKMVpUdGNibHgwWEhSY2RIVjFhV1FnUFNCdFpYTnpZV2RsTG1kbGRGVjFhV1FvS1R0Y2JseHVYSFJjZEZ4MFkyOXVjM1FnY21WdGIzUmxVMFJRSUQwZ2JtVjNJRkpVUTFObGMzTnBiMjVFWlhOamNtbHdkR2x2YmloS1UwOU9MbkJoY25ObEtHRjBiMklvYVc1cGRDNW5aWFJUWkhBb0tTa3BLVHRjYmx4MFhIUmNkSEJqTG5ObGRGSmxiVzkwWlVSbGMyTnlhWEIwYVc5dUtISmxiVzkwWlZORVVDazdYRzVjYmx4MFhIUmNkSEJTWlhOdmJIWmxLSFJ5ZFdVcE8xeHVYRzVjZEZ4MFhIUnBaaUFvZDJWaWNuUmpUM0IwY3o4dVpHbHpZV0pzWlZSeWFXTnJiR1ZKUTBVcElIdGNibHgwWEhSY2RGeDBaWGhqYUdGdVoyVkViMjVsSUQwZ2RISjFaVHRjYmx4MFhIUmNkRngwYzJWdVpFUnZibVVvS1R0Y2JseDBYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkRngwZlZ4dVhIUmNkSDBnWld4elpTQnBaaUFvYldWemMyRm5aUzVvWVhOVmNHUmhkR1VvS1NrZ2UxeHVYSFJjZEZ4MGFXWWdLQ0ZvWVhabFNXNXBkQ2tnZTF4dVhIUmNkRngwWEhSelpXNWtSWEp5YjNJb1hDSm5iM1FnZFhCa1lYUmxJSE4wWVdkbElHSmxabTl5WlNCcGJtbDBJSE4wWVdkbFhDSXBPMXh1WEhSY2RGeDBYSFJ5WlhSMWNtNDdYRzVjZEZ4MFhIUjlYRzVjZEZ4MFhIUnBaaUFvYldWemMyRm5aUzVuWlhSVmRXbGtLQ2tnSVQwOUlIVjFhV1FwSUh0Y2JseDBYSFJjZEZ4MGMyVnVaRVZ5Y205eUtHQjFkV2xrSUcxcGMyMWhkR05vT3lCb1lYWmxQU1I3YldWemMyRm5aUzVuWlhSVmRXbGtLQ2w5SUhkaGJuUTlKSHQxZFdsa2ZXQXBPMXh1WEhSY2RGeDBYSFJ5WlhSMWNtNDdYRzVjZEZ4MFhIUjlYRzVjZEZ4MFhIUmpiMjV6ZENCMWNHUmhkR1VnUFNCdFpYTnpZV2RsTG1kbGRGVndaR0YwWlNncElUdGNibHgwWEhSY2RHTnZibk4wSUdOaGJtUWdQU0JwWTJWRFlXNWthV1JoZEdWR2NtOXRVSEp2ZEc4b2RYQmtZWFJsTG1kbGRFTmhibVJwWkdGMFpTZ3BJU2s3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmhkMkZwZENCd1l5NWhaR1JKWTJWRFlXNWthV1JoZEdVb1kyRnVaQ2s3WEc1Y2RGeDBYSFI5SUdOaGRHTm9JQ2hsS1NCN1hHNWNkRngwWEhSY2RITmxibVJGY25KdmNpaGxLVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEhSY2RIMGdaV3h6WlNCN1hHNWNkRngwWEhSelpXNWtSWEp5YjNJb1hDSjFibXR1YjNkdUlFTmhiR3hTWlhOd2IyNXpaU0J6ZEdGblpWd2lLVHRjYmx4MFhIUmNkSEpsZEhWeWJqdGNibHgwWEhSOVhHNWNkSDBwTzF4dVhHNWNkR3hsZENCamJHbGxiblJGYm1SU1pYTnZiSFpsT2lBb0tTQTlQaUIyYjJsa08xeHVYSFJzWlhRZ1kyeHBaVzUwUlc1a1VtVnFaV04wT2lBb2NtVmhjMjl1UHpvZ1lXNTVLU0E5UGlCMmIybGtPMXh1WEhSc1pYUWdZMnhwWlc1MFJXNWtJRDBnYm1WM0lGQnliMjFwYzJVOGRtOXBaRDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEdOc2FXVnVkRVZ1WkZKbGMyOXNkbVVnUFNCeVpYTnZiSFpsTzF4dVhIUmNkR05zYVdWdWRFVnVaRkpsYW1WamRDQTlJSEpsYW1WamREdGNibHgwZlNrN1hHNWNkR05zYVdWdWRDNXZia1Z1WkNnb2MzUmhkSFZ6T2lCbmNuQmpMa052WkdVc0lITjBZWFIxYzAxbGMzTmhaMlU2SUhOMGNtbHVaeXdnZEhKaGFXeGxjbk02SUdkeWNHTXVUV1YwWVdSaGRHRXBJRDArSUh0Y2JseDBYSFJwWmlBb2MzUmhkSFZ6SUQwOVBTQm5jbkJqTGtOdlpHVXVUMHNwSUh0Y2JseDBYSFJjZEdOc2FXVnVkRVZ1WkZKbGMyOXNkbVVvS1R0Y2JseDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUjlYRzVjZEZ4MFkyOXVjMjlzWlM1bGNuSnZjaWh6ZEdGMGRYTk5aWE56WVdkbEtUdGNibHgwWEhSamJHbGxiblJGYm1SU1pXcGxZM1FvYzNSaGRIVnpUV1Z6YzJGblpTazdYRzVjZEgwcE8xeHVYSFJqYkdsbGJuUXVjM1JoY25Rb2V5QW5jbkJqTFdodmMzUW5PaUJvYjNOMElIMHBYRzVjYmx4MFkyOXVjM1FnWTJGc2JGSmxjWFZsYzNRZ1BTQnVaWGNnUTJGc2JGSmxjWFZsYzNRb0tUdGNibHgwWTI5dWMzUWdaVzVqYjJSbFpGTkVVQ0E5SUdKMGIyRW9TbE5QVGk1emRISnBibWRwWm5rb2NHTXViRzlqWVd4RVpYTmpjbWx3ZEdsdmJpa3BPMXh1WEhSallXeHNVbVZ4ZFdWemRDNXpaWFJUWkhBb1pXNWpiMlJsWkZORVVDazdYRzVjZEdsbUlDaDNaV0p5ZEdOUGNIUnpJQ1ltSUhkbFluSjBZMDl3ZEhNdVpHbHpZV0pzWlZSeWFXTnJiR1ZKUTBVcElIdGNibHgwWEhSallXeHNVbVZ4ZFdWemRDNXpaWFJFYVhOaFlteGxWSEpwWTJ0c1pTaDNaV0p5ZEdOUGNIUnpMbVJwYzJGaWJHVlVjbWxqYTJ4bFNVTkZLVHRjYmx4MGZWeHVYSFJqYkdsbGJuUXVjMlZ1WkNoallXeHNVbVZ4ZFdWemRDazdYRzVjYmx4MFkyOXVjM1FnWTJNZ1BTQnVaWGNnUTJ4cFpXNTBRMmhoYm01bGJDaHdZeXdnWkdNcE8xeHVYSFJqWXk1eVpXRmtlUzUwYUdWdUtDZ3BJRDArSUdOc2FXVnVkRVZ1WkZKbGMyOXNkbVVvS1NrN1hHNWNkR0YzWVdsMElHTnNhV1Z1ZEVWdVpEdGNibHgwWVhkaGFYUWdZMk11Y21WaFpIazdYRzVjZEdWNFkyaGhibWRsUkc5dVpTQTlJSFJ5ZFdVN1hHNWNkSE5sYm1SRWIyNWxLQ2s3WEc1Y2RISmxkSFZ5YmlCN0lIUnlZVzV6Y0c5eWRFWmhZM1J2Y25rNklHTmpMblJ5WVc1emNHOXlkRVpoWTNSdmNua29LU3dnY0dWbGNrTnZibTVsWTNScGIyNDZJSEJqSUgwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdsalpVTmhibVJwWkdGMFpVWnliMjFRY205MGJ5aHBPaUJKUTBWRFlXNWthV1JoZEdVcE9pQlNWRU5KWTJWRFlXNWthV1JoZEdWSmJtbDBJSHRjYmx4MGJHVjBJR05oYm1ScFpHRjBaVG9nVWxSRFNXTmxRMkZ1Wkdsa1lYUmxTVzVwZENBOUlIdGNibHgwWEhSallXNWthV1JoZEdVNklHa3VaMlYwUTJGdVpHbGtZWFJsS0Nrc1hHNWNkSDFjYmx4MGFXWWdLR2t1YUdGelUyUndUV2xrS0NrcElIdGNibHgwWEhSallXNWthV1JoZEdVdWMyUndUV2xrSUQwZ2FTNW5aWFJUWkhCTmFXUW9LVHRjYmx4MGZWeHVYSFJwWmlBb2FTNW9ZWE5UWkhCdFRHbHVaVWx1WkdWNEtDa3BJSHRjYmx4MFhIUmpZVzVrYVdSaGRHVXVjMlJ3VFV4cGJtVkpibVJsZUNBOUlHa3VaMlYwVTJSd2JVeHBibVZKYm1SbGVDZ3BPMXh1WEhSOVhHNWNkR2xtSUNocExtaGhjMVZ6WlhKdVlXMWxSbkpoWjIxbGJuUW9LU2tnZTF4dVhIUmNkR05oYm1ScFpHRjBaUzUxYzJWeWJtRnRaVVp5WVdkdFpXNTBJRDBnYVM1blpYUlZjMlZ5Ym1GdFpVWnlZV2R0Wlc1MEtDazdYRzVjZEgxY2JseDBjbVYwZFhKdUlHTmhibVJwWkdGMFpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FXTmxRMkZ1Wkdsa1lYUmxWRzlRY205MGJ5aHBPaUJTVkVOSlkyVkRZVzVrYVdSaGRHVkpibWwwS1RvZ1NVTkZRMkZ1Wkdsa1lYUmxJSHRjYmx4MGJHVjBJR05oYm1ScFpHRjBaU0E5SUc1bGR5QkpRMFZEWVc1a2FXUmhkR1VvS1R0Y2JseDBZMkZ1Wkdsa1lYUmxMbk5sZEVOaGJtUnBaR0YwWlNocExtTmhibVJwWkdGMFpTRXBPMXh1WEhScFppQW9hUzV6WkhCTmFXUXBJSHRjYmx4MFhIUmpZVzVrYVdSaGRHVXVjMlYwVTJSd1RXbGtLR2t1YzJSd1RXbGtLVHRjYmx4MGZWeHVYSFJwWmlBb2FTNXpaSEJOVEdsdVpVbHVaR1Y0S1NCN1hHNWNkRngwWTJGdVpHbGtZWFJsTG5ObGRGTmtjRzFNYVc1bFNXNWtaWGdvYVM1elpIQk5UR2x1WlVsdVpHVjRLVHRjYmx4MGZWeHVYSFJwWmlBb2FTNTFjMlZ5Ym1GdFpVWnlZV2R0Wlc1MEtTQjdYRzVjZEZ4MFkyRnVaR2xrWVhSbExuTmxkRlZ6WlhKdVlXMWxSbkpoWjIxbGJuUW9hUzUxYzJWeWJtRnRaVVp5WVdkdFpXNTBLVHRjYmx4MGZWeHVYSFJ5WlhSMWNtNGdZMkZ1Wkdsa1lYUmxPMXh1ZlZ4dVhHNGlMQ0pwYlhCdmNuUWdleUJuY25CaklIMGdabkp2YlNCY0lrQnBiWEJ5YjJKaFlteGxMV1Z1Wnk5bmNuQmpMWGRsWWx3aU8xeHVhVzF3YjNKMElIc2dVbVZ4ZFdWemRDd2dVbVZ4ZFdWemRFaGxZV1JsY25Nc0lGSmxjWFZsYzNSTlpYTnpZV2RsTENCU1pYTndiMjV6WlN3Z1UzUnlaV0Z0SUgwZ1puSnZiU0JjSWk0dloyVnVMM0J5YjNSdkwzSndZeTkzWldKeWRHTXZkakV2WjNKd1kxOXdZbHdpTzF4dWFXMXdiM0owSUhzZ1FtRnpaVU5vWVc1dVpXd2dmU0JtY205dElGd2lMaTlDWVhObFEyaGhibTVsYkZ3aU8xeHVhVzF3YjNKMElIc2dRMnhwWlc1MFUzUnlaV0Z0SUgwZ1puSnZiU0JjSWk0dlEyeHBaVzUwVTNSeVpXRnRYQ0k3WEc1Y2JpOHZJRTFoZUZOMGNtVmhiVU52ZFc1MElHbHpJSFJvWlNCdFlYZ2diblZ0WW1WeUlHOW1JSE4wY21WaGJYTWdZU0JqYUdGdWJtVnNJR05oYmlCb1lYWmxMbHh1YkdWMElFMWhlRk4wY21WaGJVTnZkVzUwSUQwZ01qVTJPMXh1WEc1cGJuUmxjbVpoWTJVZ1lXTjBhWFpsUTJ4cFpXNVRkSEpsWVcwZ2UxeHVYSFJqY3pvZ1EyeHBaVzUwVTNSeVpXRnRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nUTJ4cFpXNTBRMmhoYm01bGJDQmxlSFJsYm1SeklFSmhjMlZEYUdGdWJtVnNJSHRjYmx4MGNISnBkbUYwWlNCemRISmxZVzFKUkVOdmRXNTBaWElnUFNBd08xeHVYSFJ3Y21sMllYUmxJSEpsWVdSdmJteDVJSE4wY21WaGJYTTZJRkpsWTI5eVpEeHVkVzFpWlhJc0lHRmpkR2wyWlVOc2FXVnVVM1J5WldGdFBpQTlJSHQ5T3lCY2JseHVYSFJqYjI1emRISjFZM1J2Y2lod1l6b2dVbFJEVUdWbGNrTnZibTVsWTNScGIyNHNJR1JqT2lCU1ZFTkVZWFJoUTJoaGJtNWxiQ2tnZTF4dVhIUmNkSE4xY0dWeUtIQmpMQ0JrWXlrN1hHNWNkRngwWkdNdWIyNXRaWE56WVdkbElEMGdLR1YyWlc1ME9pQk5aWE56WVdkbFJYWmxiblE4WVc1NVBpa2dQVDRnZEdocGN5NXZia05vWVc1dVpXeE5aWE56WVdkbEtHVjJaVzUwS1R0Y2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCMGNtRnVjM0J2Y25SR1lXTjBiM0o1S0NrNklHZHljR011VkhKaGJuTndiM0owUm1GamRHOXllU0I3WEc1Y2RGeDBjbVYwZFhKdUlDaHZjSFJ6T2lCbmNuQmpMbFJ5WVc1emNHOXlkRTl3ZEdsdmJuTXBJRDArSUh0Y2JseDBYSFJjZEhKbGRIVnliaUIwYUdsekxtNWxkMU4wY21WaGJTaDBhR2x6TG01bGVIUlRkSEpsWVcxSlJDZ3BMQ0J2Y0hSektUdGNibHgwWEhSOVhHNWNkSDFjYmx4dVhIUndjbWwyWVhSbElHOXVRMmhoYm01bGJFMWxjM05oWjJVb1pYWmxiblE2SUUxbGMzTmhaMlZGZG1WdWREeGhibmsrS1NCN1hHNWNkRngwYkdWMElISmxjM0E2SUZKbGMzQnZibk5sTzF4dVhIUmNkSFJ5ZVNCN1hHNWNkRngwWEhSeVpYTndJRDBnVW1WemNHOXVjMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtvWlhabGJuUXVaR0YwWVNrN1hHNWNkRngwZlNCallYUmphQ0FvWlNrZ2UxeHVYSFJjZEZ4MFkyOXVjMjlzWlM1bGNuSnZjaWhjSW1WeWNtOXlJR1JsYzJWeWFXRnNhWHBwYm1jZ2JXVnpjMkZuWlZ3aUxDQmxLVHRjYmx4MFhIUmNkSEpsZEhWeWJqdGNibHgwWEhSOVhHNWNibHgwWEhSamIyNXpkQ0J6ZEhKbFlXMGdQU0J5WlhOd0xtZGxkRk4wY21WaGJTZ3BPMXh1WEhSY2RHbG1JQ2h6ZEhKbFlXMGdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVYSFJjZEZ4MFkyOXVjMjlzWlM1bGNuSnZjaWhjSW01dklITjBjbVZoYlNCcFpEc2daR2x6WTJGeVpHbHVaMXdpS1R0Y2JseDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUjlYRzVjYmx4MFhIUmpiMjV6ZENCcFpDQTlJSE4wY21WaGJTNW5aWFJKWkNncE8xeHVYSFJjZEdOdmJuTjBJR0ZqZEdsMlpWTjBjbVZoYlNBOUlIUm9hWE11YzNSeVpXRnRjMXRwWkYwN1hHNWNkRngwYVdZZ0tHRmpkR2wyWlZOMGNtVmhiU0E5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzVjZEZ4MFhIUmpiMjV6YjJ4bExtVnljbTl5S0Z3aWJtOGdjM1J5WldGdElHWnZjaUJwWkRzZ1pHbHpZMkZ5WkdsdVoxd2lMQ0JjSW1sa1hDSXNJR2xrS1R0Y2JseDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUjlYRzVjZEZ4MFlXTjBhWFpsVTNSeVpXRnRMbU56TG05dVVtVnpjRzl1YzJVb2NtVnpjQ2s3WEc1Y2RIMWNibHh1WEhSd2NtbDJZWFJsSUc1bGVIUlRkSEpsWVcxSlJDZ3BPaUJUZEhKbFlXMGdlMXh1WEhSY2RHTnZibk4wSUhOMGNtVmhiU0E5SUc1bGR5QlRkSEpsWVcwb0tUdGNibHgwWEhSemRISmxZVzB1YzJWMFNXUW9kR2hwY3k1emRISmxZVzFKUkVOdmRXNTBaWElyS3lrN1hHNWNkRngwY21WMGRYSnVJSE4wY21WaGJUdGNibHgwZlZ4dVhHNWNkSEJ5YVhaaGRHVWdibVYzVTNSeVpXRnRLSE4wY21WaGJUb2dVM1J5WldGdExDQnZjSFJ6T2lCbmNuQmpMbFJ5WVc1emNHOXlkRTl3ZEdsdmJuTXBPaUJEYkdsbGJuUlRkSEpsWVcwZ2UxeHVYSFJjZEd4bGRDQmhZM1JwZG1WVGRISmxZVzBnUFNCMGFHbHpMbk4wY21WaGJYTmJjM1J5WldGdExtZGxkRWxrS0NsZE8xeHVYSFJjZEdsbUlDaGhZM1JwZG1WVGRISmxZVzBnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1WEhSY2RGeDBhV1lnS0U5aWFtVmpkQzVyWlhsektIUm9hWE11YzNSeVpXRnRjeWt1YkdWdVozUm9JRDRnVFdGNFUzUnlaV0Z0UTI5MWJuUXBJSHRjYmx4MFhIUmNkRngwZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpYzNSeVpXRnRJR3hwYldsMElHaHBkRndpS1R0Y2JseDBYSFJjZEgxY2JseDBYSFJjZEdOdmJuTjBJR05zYVdWdWRGTjBjbVZoYlNBOUlHNWxkeUJEYkdsbGJuUlRkSEpsWVcwb2RHaHBjeXdnYzNSeVpXRnRMQ0FvYVdRNklHNTFiV0psY2lrZ1BUNGdkR2hwY3k1eVpXMXZkbVZUZEhKbFlXMUNlVWxFS0dsa0tTd2diM0IwY3lrN1hHNWNkRngwWEhSaFkzUnBkbVZUZEhKbFlXMGdQU0I3SUdOek9pQmpiR2xsYm5SVGRISmxZVzBnZlR0Y2JseDBYSFJjZEhSb2FYTXVjM1J5WldGdGMxdHpkSEpsWVcwdVoyVjBTV1FvS1YwZ1BTQmhZM1JwZG1WVGRISmxZVzA3WEc1Y2RGeDBmVnh1WEhSY2RISmxkSFZ5YmlCaFkzUnBkbVZUZEhKbFlXMHVZM003WEc1Y2RIMWNibHh1WEhSd2NtbDJZWFJsSUhKbGJXOTJaVk4wY21WaGJVSjVTVVFvYVdRNklHNTFiV0psY2lrZ2UxeHVYSFJjZEdSbGJHVjBaU0IwYUdsekxuTjBjbVZoYlhOYmFXUmRPMXh1WEhSOVhHNWNibHgwY0hWaWJHbGpJSGR5YVhSbFNHVmhaR1Z5Y3loemRISmxZVzA2SUZOMGNtVmhiU3dnYUdWaFpHVnljem9nVW1WeGRXVnpkRWhsWVdSbGNuTXBJSHRjYmx4MFhIUmpiMjV6ZENCeVpYRjFaWE4wSUQwZ2JtVjNJRkpsY1hWbGMzUW9LVHRjYmx4MFhIUnlaWEYxWlhOMExuTmxkRk4wY21WaGJTaHpkSEpsWVcwcE8xeHVYSFJjZEhKbGNYVmxjM1F1YzJWMFNHVmhaR1Z5Y3lob1pXRmtaWEp6S1R0Y2JseDBYSFIwYUdsekxuZHlhWFJsS0hKbGNYVmxjM1FwTzF4dVhIUjlYRzVjYmx4MGNIVmliR2xqSUhkeWFYUmxUV1Z6YzJGblpTaHpkSEpsWVcwNklGTjBjbVZoYlN3Z2JYTm5PaUJTWlhGMVpYTjBUV1Z6YzJGblpTa2dlMXh1WEhSY2RHTnZibk4wSUhKbGNYVmxjM1FnUFNCdVpYY2dVbVZ4ZFdWemRDZ3BPMXh1WEhSY2RISmxjWFZsYzNRdWMyVjBVM1J5WldGdEtITjBjbVZoYlNrN1hHNWNkRngwY21WeGRXVnpkQzV6WlhSTlpYTnpZV2RsS0cxelp5azdYRzVjZEZ4MGRHaHBjeTUzY21sMFpTaHlaWEYxWlhOMEtUdGNibHgwZlZ4dWZWeHVJaXdpTHlvaFhHNGdLaUJVYUdVZ1luVm1abVZ5SUcxdlpIVnNaU0JtY205dElHNXZaR1V1YW5Nc0lHWnZjaUIwYUdVZ1luSnZkM05sY2k1Y2JpQXFYRzRnS2lCQVlYVjBhRzl5SUNBZ1JtVnliM056SUVGaWIzVnJhR0ZrYVdwbGFDQThhSFIwY0RvdkwyWmxjbTl6Y3k1dmNtYytYRzRnS2lCQWJHbGpaVzV6WlNBZ1RVbFVYRzRnS2k5Y2JpOHFJR1Z6YkdsdWRDMWthWE5oWW14bElHNXZMWEJ5YjNSdklDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEoxeHVYRzUyWVhJZ1ltRnpaVFkwSUQwZ2NtVnhkV2x5WlNnblltRnpaVFkwTFdwekp5bGNiblpoY2lCcFpXVmxOelUwSUQwZ2NtVnhkV2x5WlNnbmFXVmxaVGMxTkNjcFhHNTJZWElnYVhOQmNuSmhlU0E5SUhKbGNYVnBjbVVvSjJsellYSnlZWGtuS1Z4dVhHNWxlSEJ2Y25SekxrSjFabVpsY2lBOUlFSjFabVpsY2x4dVpYaHdiM0owY3k1VGJHOTNRblZtWm1WeUlEMGdVMnh2ZDBKMVptWmxjbHh1Wlhod2IzSjBjeTVKVGxOUVJVTlVYMDFCV0Y5Q1dWUkZVeUE5SURVd1hHNWNiaThxS2x4dUlDb2dTV1lnWUVKMVptWmxjaTVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVWURwY2JpQXFJQ0FnUFQwOUlIUnlkV1VnSUNBZ1ZYTmxJRlZwYm5RNFFYSnlZWGtnYVcxd2JHVnRaVzUwWVhScGIyNGdLR1poYzNSbGMzUXBYRzRnS2lBZ0lEMDlQU0JtWVd4elpTQWdJRlZ6WlNCUFltcGxZM1FnYVcxd2JHVnRaVzUwWVhScGIyNGdLRzF2YzNRZ1kyOXRjR0YwYVdKc1pTd2daWFpsYmlCSlJUWXBYRzRnS2x4dUlDb2dRbkp2ZDNObGNuTWdkR2hoZENCemRYQndiM0owSUhSNWNHVmtJR0Z5Y21GNWN5QmhjbVVnU1VVZ01UQXJMQ0JHYVhKbFptOTRJRFFyTENCRGFISnZiV1VnTnlzc0lGTmhabUZ5YVNBMUxqRXJMRnh1SUNvZ1QzQmxjbUVnTVRFdU5pc3NJR2xQVXlBMExqSXJMbHh1SUNwY2JpQXFJRVIxWlNCMGJ5QjJZWEpwYjNWeklHSnliM2R6WlhJZ1luVm5jeXdnYzI5dFpYUnBiV1Z6SUhSb1pTQlBZbXBsWTNRZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnZDJsc2JDQmlaU0IxYzJWa0lHVjJaVzVjYmlBcUlIZG9aVzRnZEdobElHSnliM2R6WlhJZ2MzVndjRzl5ZEhNZ2RIbHdaV1FnWVhKeVlYbHpMbHh1SUNwY2JpQXFJRTV2ZEdVNlhHNGdLbHh1SUNvZ0lDQXRJRVpwY21WbWIzZ2dOQzB5T1NCc1lXTnJjeUJ6ZFhCd2IzSjBJR1p2Y2lCaFpHUnBibWNnYm1WM0lIQnliM0JsY25ScFpYTWdkRzhnWUZWcGJuUTRRWEp5WVhsZ0lHbHVjM1JoYm1ObGN5eGNiaUFxSUNBZ0lDQlRaV1U2SUdoMGRIQnpPaTh2WW5WbmVtbHNiR0V1Ylc5NmFXeHNZUzV2Y21jdmMyaHZkMTlpZFdjdVkyZHBQMmxrUFRZNU5UUXpPQzVjYmlBcVhHNGdLaUFnSUMwZ1EyaHliMjFsSURrdE1UQWdhWE1nYldsemMybHVaeUIwYUdVZ1lGUjVjR1ZrUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk4xWW1GeWNtRjVZQ0JtZFc1amRHbHZiaTVjYmlBcVhHNGdLaUFnSUMwZ1NVVXhNQ0JvWVhNZ1lTQmljbTlyWlc0Z1lGUjVjR1ZrUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk4xWW1GeWNtRjVZQ0JtZFc1amRHbHZiaUIzYUdsamFDQnlaWFIxY201eklHRnljbUY1Y3lCdlpseHVJQ29nSUNBZ0lHbHVZMjl5Y21WamRDQnNaVzVuZEdnZ2FXNGdjMjl0WlNCemFYUjFZWFJwYjI1ekxseHVYRzRnS2lCWFpTQmtaWFJsWTNRZ2RHaGxjMlVnWW5Wbloza2dZbkp2ZDNObGNuTWdZVzVrSUhObGRDQmdRblZtWm1WeUxsUlpVRVZFWDBGU1VrRlpYMU5WVUZCUFVsUmdJSFJ2SUdCbVlXeHpaV0FnYzI4Z2RHaGxlVnh1SUNvZ1oyVjBJSFJvWlNCUFltcGxZM1FnYVcxd2JHVnRaVzUwWVhScGIyNHNJSGRvYVdOb0lHbHpJSE5zYjNkbGNpQmlkWFFnWW1Wb1lYWmxjeUJqYjNKeVpXTjBiSGt1WEc0Z0tpOWNia0oxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVJRDBnWjJ4dlltRnNMbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFFnSVQwOUlIVnVaR1ZtYVc1bFpGeHVJQ0EvSUdkc2IySmhiQzVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVWEc0Z0lEb2dkSGx3WldSQmNuSmhlVk4xY0hCdmNuUW9LVnh1WEc0dktseHVJQ29nUlhod2IzSjBJR3ROWVhoTVpXNW5kR2dnWVdaMFpYSWdkSGx3WldRZ1lYSnlZWGtnYzNWd2NHOXlkQ0JwY3lCa1pYUmxjbTFwYm1Wa0xseHVJQ292WEc1bGVIQnZjblJ6TG10TllYaE1aVzVuZEdnZ1BTQnJUV0Y0VEdWdVozUm9LQ2xjYmx4dVpuVnVZM1JwYjI0Z2RIbHdaV1JCY25KaGVWTjFjSEJ2Y25RZ0tDa2dlMXh1SUNCMGNua2dlMXh1SUNBZ0lIWmhjaUJoY25JZ1BTQnVaWGNnVldsdWREaEJjbkpoZVNneEtWeHVJQ0FnSUdGeWNpNWZYM0J5YjNSdlgxOGdQU0I3WDE5d2NtOTBiMTlmT2lCVmFXNTBPRUZ5Y21GNUxuQnliM1J2ZEhsd1pTd2dabTl2T2lCbWRXNWpkR2x2YmlBb0tTQjdJSEpsZEhWeWJpQTBNaUI5ZlZ4dUlDQWdJSEpsZEhWeWJpQmhjbkl1Wm05dktDa2dQVDA5SURReUlDWW1JQzh2SUhSNWNHVmtJR0Z5Y21GNUlHbHVjM1JoYm1ObGN5QmpZVzRnWW1VZ1lYVm5iV1Z1ZEdWa1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCaGNuSXVjM1ZpWVhKeVlYa2dQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWWdMeThnWTJoeWIyMWxJRGt0TVRBZ2JHRmpheUJnYzNWaVlYSnlZWGxnWEc0Z0lDQWdJQ0FnSUdGeWNpNXpkV0poY25KaGVTZ3hMQ0F4S1M1aWVYUmxUR1Z1WjNSb0lEMDlQU0F3SUM4dklHbGxNVEFnYUdGeklHSnliMnRsYmlCZ2MzVmlZWEp5WVhsZ1hHNGdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdabUZzYzJWY2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnJUV0Y0VEdWdVozUm9JQ2dwSUh0Y2JpQWdjbVYwZFhKdUlFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVVhHNGdJQ0FnUHlBd2VEZG1abVptWm1abVhHNGdJQ0FnT2lBd2VETm1abVptWm1abVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOeVpXRjBaVUoxWm1abGNpQW9kR2hoZEN3Z2JHVnVaM1JvS1NCN1hHNGdJR2xtSUNoclRXRjRUR1Z1WjNSb0tDa2dQQ0JzWlc1bmRHZ3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduU1c1MllXeHBaQ0IwZVhCbFpDQmhjbkpoZVNCc1pXNW5kR2duS1Z4dUlDQjlYRzRnSUdsbUlDaENkV1ptWlhJdVZGbFFSVVJmUVZKU1FWbGZVMVZRVUU5U1ZDa2dlMXh1SUNBZ0lDOHZJRkpsZEhWeWJpQmhiaUJoZFdkdFpXNTBaV1FnWUZWcGJuUTRRWEp5WVhsZ0lHbHVjM1JoYm1ObExDQm1iM0lnWW1WemRDQndaWEptYjNKdFlXNWpaVnh1SUNBZ0lIUm9ZWFFnUFNCdVpYY2dWV2x1ZERoQmNuSmhlU2hzWlc1bmRHZ3BYRzRnSUNBZ2RHaGhkQzVmWDNCeWIzUnZYMThnUFNCQ2RXWm1aWEl1Y0hKdmRHOTBlWEJsWEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnTHk4Z1JtRnNiR0poWTJzNklGSmxkSFZ5YmlCaGJpQnZZbXBsWTNRZ2FXNXpkR0Z1WTJVZ2IyWWdkR2hsSUVKMVptWmxjaUJqYkdGemMxeHVJQ0FnSUdsbUlDaDBhR0YwSUQwOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHRjBJRDBnYm1WM0lFSjFabVpsY2loc1pXNW5kR2dwWEc0Z0lDQWdmVnh1SUNBZ0lIUm9ZWFF1YkdWdVozUm9JRDBnYkdWdVozUm9YRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdkR2hoZEZ4dWZWeHVYRzR2S2lwY2JpQXFJRlJvWlNCQ2RXWm1aWElnWTI5dWMzUnlkV04wYjNJZ2NtVjBkWEp1Y3lCcGJuTjBZVzVqWlhNZ2IyWWdZRlZwYm5RNFFYSnlZWGxnSUhSb1lYUWdhR0YyWlNCMGFHVnBjbHh1SUNvZ2NISnZkRzkwZVhCbElHTm9ZVzVuWldRZ2RHOGdZRUoxWm1abGNpNXdjbTkwYjNSNWNHVmdMaUJHZFhKMGFHVnliVzl5WlN3Z1lFSjFabVpsY21BZ2FYTWdZU0J6ZFdKamJHRnpjeUJ2Wmx4dUlDb2dZRlZwYm5RNFFYSnlZWGxnTENCemJ5QjBhR1VnY21WMGRYSnVaV1FnYVc1emRHRnVZMlZ6SUhkcGJHd2dhR0YyWlNCaGJHd2dkR2hsSUc1dlpHVWdZRUoxWm1abGNtQWdiV1YwYUc5a2MxeHVJQ29nWVc1a0lIUm9aU0JnVldsdWREaEJjbkpoZVdBZ2JXVjBhRzlrY3k0Z1UzRjFZWEpsSUdKeVlXTnJaWFFnYm05MFlYUnBiMjRnZDI5eWEzTWdZWE1nWlhod1pXTjBaV1FnTFMwZ2FYUmNiaUFxSUhKbGRIVnlibk1nWVNCemFXNW5iR1VnYjJOMFpYUXVYRzRnS2x4dUlDb2dWR2hsSUdCVmFXNTBPRUZ5Y21GNVlDQndjbTkwYjNSNWNHVWdjbVZ0WVdsdWN5QjFibTF2WkdsbWFXVmtMbHh1SUNvdlhHNWNibVoxYm1OMGFXOXVJRUoxWm1abGNpQW9ZWEpuTENCbGJtTnZaR2x1WjA5eVQyWm1jMlYwTENCc1pXNW5kR2dwSUh0Y2JpQWdhV1lnS0NGQ2RXWm1aWEl1VkZsUVJVUmZRVkpTUVZsZlUxVlFVRTlTVkNBbUppQWhLSFJvYVhNZ2FXNXpkR0Z1WTJWdlppQkNkV1ptWlhJcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkNkV1ptWlhJb1lYSm5MQ0JsYm1OdlpHbHVaMDl5VDJabWMyVjBMQ0JzWlc1bmRHZ3BYRzRnSUgxY2JseHVJQ0F2THlCRGIyMXRiMjRnWTJGelpTNWNiaUFnYVdZZ0tIUjVjR1Z2WmlCaGNtY2dQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCbGJtTnZaR2x1WjA5eVQyWm1jMlYwSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5TV1lnWlc1amIyUnBibWNnYVhNZ2MzQmxZMmxtYVdWa0lIUm9aVzRnZEdobElHWnBjbk4wSUdGeVozVnRaVzUwSUcxMWMzUWdZbVVnWVNCemRISnBibWNuWEc0Z0lDQWdJQ0FwWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCaGJHeHZZMVZ1YzJGbVpTaDBhR2x6TENCaGNtY3BYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWnliMjBvZEdocGN5d2dZWEpuTENCbGJtTnZaR2x1WjA5eVQyWm1jMlYwTENCc1pXNW5kR2dwWEc1OVhHNWNia0oxWm1abGNpNXdiMjlzVTJsNlpTQTlJRGd4T1RJZ0x5OGdibTkwSUhWelpXUWdZbmtnZEdocGN5QnBiWEJzWlcxbGJuUmhkR2x2Ymx4dVhHNHZMeUJVVDBSUE9pQk1aV2RoWTNrc0lHNXZkQ0J1WldWa1pXUWdZVzU1Ylc5eVpTNGdVbVZ0YjNabElHbHVJRzVsZUhRZ2JXRnFiM0lnZG1WeWMybHZiaTVjYmtKMVptWmxjaTVmWVhWbmJXVnVkQ0E5SUdaMWJtTjBhVzl1SUNoaGNuSXBJSHRjYmlBZ1lYSnlMbDlmY0hKdmRHOWZYeUE5SUVKMVptWmxjaTV3Y205MGIzUjVjR1ZjYmlBZ2NtVjBkWEp1SUdGeWNseHVmVnh1WEc1bWRXNWpkR2x2YmlCbWNtOXRJQ2gwYUdGMExDQjJZV3gxWlN3Z1pXNWpiMlJwYm1kUGNrOW1abk5sZEN3Z2JHVnVaM1JvS1NCN1hHNGdJR2xtSUNoMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhDSjJZV3gxWlZ3aUlHRnlaM1Z0Wlc1MElHMTFjM1FnYm05MElHSmxJR0VnYm5WdFltVnlKeWxjYmlBZ2ZWeHVYRzRnSUdsbUlDaDBlWEJsYjJZZ1FYSnlZWGxDZFdabVpYSWdJVDA5SUNkMWJtUmxabWx1WldRbklDWW1JSFpoYkhWbElHbHVjM1JoYm1ObGIyWWdRWEp5WVhsQ2RXWm1aWElwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdabkp2YlVGeWNtRjVRblZtWm1WeUtIUm9ZWFFzSUhaaGJIVmxMQ0JsYm1OdlpHbHVaMDl5VDJabWMyVjBMQ0JzWlc1bmRHZ3BYRzRnSUgxY2JseHVJQ0JwWmlBb2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJtY205dFUzUnlhVzVuS0hSb1lYUXNJSFpoYkhWbExDQmxibU52WkdsdVowOXlUMlptYzJWMEtWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHWnliMjFQWW1wbFkzUW9kR2hoZEN3Z2RtRnNkV1VwWEc1OVhHNWNiaThxS2x4dUlDb2dSblZ1WTNScGIyNWhiR3g1SUdWeGRXbDJZV3hsYm5RZ2RHOGdRblZtWm1WeUtHRnlaeXdnWlc1amIyUnBibWNwSUdKMWRDQjBhSEp2ZDNNZ1lTQlVlWEJsUlhKeWIzSmNiaUFxSUdsbUlIWmhiSFZsSUdseklHRWdiblZ0WW1WeUxseHVJQ29nUW5WbVptVnlMbVp5YjIwb2MzUnlXeXdnWlc1amIyUnBibWRkS1Z4dUlDb2dRblZtWm1WeUxtWnliMjBvWVhKeVlYa3BYRzRnS2lCQ2RXWm1aWEl1Wm5KdmJTaGlkV1ptWlhJcFhHNGdLaUJDZFdabVpYSXVabkp2YlNoaGNuSmhlVUoxWm1abGNsc3NJR0o1ZEdWUFptWnpaWFJiTENCc1pXNW5kR2hkWFNsY2JpQXFLaTljYmtKMVptWmxjaTVtY205dElEMGdablZ1WTNScGIyNGdLSFpoYkhWbExDQmxibU52WkdsdVowOXlUMlptYzJWMExDQnNaVzVuZEdncElIdGNiaUFnY21WMGRYSnVJR1p5YjIwb2JuVnNiQ3dnZG1Gc2RXVXNJR1Z1WTI5a2FXNW5UM0pQWm1aelpYUXNJR3hsYm1kMGFDbGNibjFjYmx4dWFXWWdLRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVLU0I3WEc0Z0lFSjFabVpsY2k1d2NtOTBiM1I1Y0dVdVgxOXdjbTkwYjE5ZklEMGdWV2x1ZERoQmNuSmhlUzV3Y205MGIzUjVjR1ZjYmlBZ1FuVm1abVZ5TGw5ZmNISnZkRzlmWHlBOUlGVnBiblE0UVhKeVlYbGNiaUFnYVdZZ0tIUjVjR1Z2WmlCVGVXMWliMndnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUZONWJXSnZiQzV6Y0dWamFXVnpJQ1ltWEc0Z0lDQWdJQ0JDZFdabVpYSmJVM2x0WW05c0xuTndaV05wWlhOZElEMDlQU0JDZFdabVpYSXBJSHRjYmlBZ0lDQXZMeUJHYVhnZ2MzVmlZWEp5WVhrb0tTQnBiaUJGVXpJd01UWXVJRk5sWlRvZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwyWmxjbTl6Y3k5aWRXWm1aWEl2Y0hWc2JDODVOMXh1SUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2hDZFdabVpYSXNJRk41YldKdmJDNXpjR1ZqYVdWekxDQjdYRzRnSUNBZ0lDQjJZV3gxWlRvZ2JuVnNiQ3hjYmlBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ2RISjFaVnh1SUNBZ0lIMHBYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWVhOelpYSjBVMmw2WlNBb2MybDZaU2tnZTF4dUlDQnBaaUFvZEhsd1pXOW1JSE5wZW1VZ0lUMDlJQ2R1ZFcxaVpYSW5LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduWENKemFYcGxYQ0lnWVhKbmRXMWxiblFnYlhWemRDQmlaU0JoSUc1MWJXSmxjaWNwWEc0Z0lIMGdaV3h6WlNCcFppQW9jMmw2WlNBOElEQXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduWENKemFYcGxYQ0lnWVhKbmRXMWxiblFnYlhWemRDQnViM1FnWW1VZ2JtVm5ZWFJwZG1VbktWeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZzYkc5aklDaDBhR0YwTENCemFYcGxMQ0JtYVd4c0xDQmxibU52WkdsdVp5a2dlMXh1SUNCaGMzTmxjblJUYVhwbEtITnBlbVVwWEc0Z0lHbG1JQ2h6YVhwbElEdzlJREFwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZM0psWVhSbFFuVm1abVZ5S0hSb1lYUXNJSE5wZW1VcFhHNGdJSDFjYmlBZ2FXWWdLR1pwYkd3Z0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQzh2SUU5dWJIa2djR0Y1SUdGMGRHVnVkR2x2YmlCMGJ5QmxibU52WkdsdVp5QnBaaUJwZENkeklHRWdjM1J5YVc1bkxpQlVhR2x6WEc0Z0lDQWdMeThnY0hKbGRtVnVkSE1nWVdOamFXUmxiblJoYkd4NUlITmxibVJwYm1jZ2FXNGdZU0J1ZFcxaVpYSWdkR2hoZENCM2IzVnNaRnh1SUNBZ0lDOHZJR0psSUdsdWRHVnljSEpsZEhSbFpDQmhjeUJoSUhOMFlYSjBJRzltWm5ObGRDNWNiaUFnSUNCeVpYUjFjbTRnZEhsd1pXOW1JR1Z1WTI5a2FXNW5JRDA5UFNBbmMzUnlhVzVuSjF4dUlDQWdJQ0FnUHlCamNtVmhkR1ZDZFdabVpYSW9kR2hoZEN3Z2MybDZaU2t1Wm1sc2JDaG1hV3hzTENCbGJtTnZaR2x1WnlsY2JpQWdJQ0FnSURvZ1kzSmxZWFJsUW5WbVptVnlLSFJvWVhRc0lITnBlbVVwTG1acGJHd29abWxzYkNsY2JpQWdmVnh1SUNCeVpYUjFjbTRnWTNKbFlYUmxRblZtWm1WeUtIUm9ZWFFzSUhOcGVtVXBYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaElHNWxkeUJtYVd4c1pXUWdRblZtWm1WeUlHbHVjM1JoYm1ObExseHVJQ29nWVd4c2IyTW9jMmw2WlZzc0lHWnBiR3hiTENCbGJtTnZaR2x1WjExZEtWeHVJQ29xTDF4dVFuVm1abVZ5TG1Gc2JHOWpJRDBnWm5WdVkzUnBiMjRnS0hOcGVtVXNJR1pwYkd3c0lHVnVZMjlrYVc1bktTQjdYRzRnSUhKbGRIVnliaUJoYkd4dll5aHVkV3hzTENCemFYcGxMQ0JtYVd4c0xDQmxibU52WkdsdVp5bGNibjFjYmx4dVpuVnVZM1JwYjI0Z1lXeHNiMk5WYm5OaFptVWdLSFJvWVhRc0lITnBlbVVwSUh0Y2JpQWdZWE56WlhKMFUybDZaU2h6YVhwbEtWeHVJQ0IwYUdGMElEMGdZM0psWVhSbFFuVm1abVZ5S0hSb1lYUXNJSE5wZW1VZ1BDQXdJRDhnTUNBNklHTm9aV05yWldRb2MybDZaU2tnZkNBd0tWeHVJQ0JwWmlBb0lVSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVUtTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQnphWHBsT3lBcksya3BJSHRjYmlBZ0lDQWdJSFJvWVhSYmFWMGdQU0F3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQjBhR0YwWEc1OVhHNWNiaThxS2x4dUlDb2dSWEYxYVhaaGJHVnVkQ0IwYnlCQ2RXWm1aWElvYm5WdEtTd2dZbmtnWkdWbVlYVnNkQ0JqY21WaGRHVnpJR0VnYm05dUxYcGxjbTh0Wm1sc2JHVmtJRUoxWm1abGNpQnBibk4wWVc1alpTNWNiaUFxSUNvdlhHNUNkV1ptWlhJdVlXeHNiMk5WYm5OaFptVWdQU0JtZFc1amRHbHZiaUFvYzJsNlpTa2dlMXh1SUNCeVpYUjFjbTRnWVd4c2IyTlZibk5oWm1Vb2JuVnNiQ3dnYzJsNlpTbGNibjFjYmk4cUtseHVJQ29nUlhGMWFYWmhiR1Z1ZENCMGJ5QlRiRzkzUW5WbVptVnlLRzUxYlNrc0lHSjVJR1JsWm1GMWJIUWdZM0psWVhSbGN5QmhJRzV2YmkxNlpYSnZMV1pwYkd4bFpDQkNkV1ptWlhJZ2FXNXpkR0Z1WTJVdVhHNGdLaTljYmtKMVptWmxjaTVoYkd4dlkxVnVjMkZtWlZOc2IzY2dQU0JtZFc1amRHbHZiaUFvYzJsNlpTa2dlMXh1SUNCeVpYUjFjbTRnWVd4c2IyTlZibk5oWm1Vb2JuVnNiQ3dnYzJsNlpTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z1puSnZiVk4wY21sdVp5QW9kR2hoZEN3Z2MzUnlhVzVuTENCbGJtTnZaR2x1WnlrZ2UxeHVJQ0JwWmlBb2RIbHdaVzltSUdWdVkyOWthVzVuSUNFOVBTQW5jM1J5YVc1bkp5QjhmQ0JsYm1OdlpHbHVaeUE5UFQwZ0p5Y3BJSHRjYmlBZ0lDQmxibU52WkdsdVp5QTlJQ2QxZEdZNEoxeHVJQ0I5WEc1Y2JpQWdhV1lnS0NGQ2RXWm1aWEl1YVhORmJtTnZaR2x1WnlobGJtTnZaR2x1WnlrcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZGNJbVZ1WTI5a2FXNW5YQ0lnYlhWemRDQmlaU0JoSUhaaGJHbGtJSE4wY21sdVp5QmxibU52WkdsdVp5Y3BYRzRnSUgxY2JseHVJQ0IyWVhJZ2JHVnVaM1JvSUQwZ1lubDBaVXhsYm1kMGFDaHpkSEpwYm1jc0lHVnVZMjlrYVc1bktTQjhJREJjYmlBZ2RHaGhkQ0E5SUdOeVpXRjBaVUoxWm1abGNpaDBhR0YwTENCc1pXNW5kR2dwWEc1Y2JpQWdkbUZ5SUdGamRIVmhiQ0E5SUhSb1lYUXVkM0pwZEdVb2MzUnlhVzVuTENCbGJtTnZaR2x1WnlsY2JseHVJQ0JwWmlBb1lXTjBkV0ZzSUNFOVBTQnNaVzVuZEdncElIdGNiaUFnSUNBdkx5QlhjbWwwYVc1bklHRWdhR1Y0SUhOMGNtbHVaeXdnWm05eUlHVjRZVzF3YkdVc0lIUm9ZWFFnWTI5dWRHRnBibk1nYVc1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUhkcGJHeGNiaUFnSUNBdkx5QmpZWFZ6WlNCbGRtVnllWFJvYVc1bklHRm1kR1Z5SUhSb1pTQm1hWEp6ZENCcGJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCMGJ5QmlaU0JwWjI1dmNtVmtMaUFvWlM1bkxseHVJQ0FnSUM4dklDZGhZbmg0WTJRbklIZHBiR3dnWW1VZ2RISmxZWFJsWkNCaGN5QW5ZV0luS1Z4dUlDQWdJSFJvWVhRZ1BTQjBhR0YwTG5Oc2FXTmxLREFzSUdGamRIVmhiQ2xjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUIwYUdGMFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdaeWIyMUJjbkpoZVV4cGEyVWdLSFJvWVhRc0lHRnljbUY1S1NCN1hHNGdJSFpoY2lCc1pXNW5kR2dnUFNCaGNuSmhlUzVzWlc1bmRHZ2dQQ0F3SUQ4Z01DQTZJR05vWldOclpXUW9ZWEp5WVhrdWJHVnVaM1JvS1NCOElEQmNiaUFnZEdoaGRDQTlJR055WldGMFpVSjFabVpsY2loMGFHRjBMQ0JzWlc1bmRHZ3BYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lCcElDczlJREVwSUh0Y2JpQWdJQ0IwYUdGMFcybGRJRDBnWVhKeVlYbGJhVjBnSmlBeU5UVmNiaUFnZlZ4dUlDQnlaWFIxY200Z2RHaGhkRnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm1jbTl0UVhKeVlYbENkV1ptWlhJZ0tIUm9ZWFFzSUdGeWNtRjVMQ0JpZVhSbFQyWm1jMlYwTENCc1pXNW5kR2dwSUh0Y2JpQWdZWEp5WVhrdVlubDBaVXhsYm1kMGFDQXZMeUIwYUdseklIUm9jbTkzY3lCcFppQmdZWEp5WVhsZ0lHbHpJRzV2ZENCaElIWmhiR2xrSUVGeWNtRjVRblZtWm1WeVhHNWNiaUFnYVdZZ0tHSjVkR1ZQWm1aelpYUWdQQ0F3SUh4OElHRnljbUY1TG1KNWRHVk1aVzVuZEdnZ1BDQmllWFJsVDJabWMyVjBLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvSjF4Y0oyOW1abk5sZEZ4Y0p5QnBjeUJ2ZFhRZ2IyWWdZbTkxYm1Sekp5bGNiaUFnZlZ4dVhHNGdJR2xtSUNoaGNuSmhlUzVpZVhSbFRHVnVaM1JvSUR3Z1lubDBaVTltWm5ObGRDQXJJQ2hzWlc1bmRHZ2dmSHdnTUNrcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25YRnduYkdWdVozUm9YRnduSUdseklHOTFkQ0J2WmlCaWIzVnVaSE1uS1Z4dUlDQjlYRzVjYmlBZ2FXWWdLR0o1ZEdWUFptWnpaWFFnUFQwOUlIVnVaR1ZtYVc1bFpDQW1KaUJzWlc1bmRHZ2dQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUdGeWNtRjVJRDBnYm1WM0lGVnBiblE0UVhKeVlYa29ZWEp5WVhrcFhHNGdJSDBnWld4elpTQnBaaUFvYkdWdVozUm9JRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNCaGNuSmhlU0E5SUc1bGR5QlZhVzUwT0VGeWNtRjVLR0Z5Y21GNUxDQmllWFJsVDJabWMyVjBLVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR0Z5Y21GNUlEMGdibVYzSUZWcGJuUTRRWEp5WVhrb1lYSnlZWGtzSUdKNWRHVlBabVp6WlhRc0lHeGxibWQwYUNsY2JpQWdmVnh1WEc0Z0lHbG1JQ2hDZFdabVpYSXVWRmxRUlVSZlFWSlNRVmxmVTFWUVVFOVNWQ2tnZTF4dUlDQWdJQzh2SUZKbGRIVnliaUJoYmlCaGRXZHRaVzUwWldRZ1lGVnBiblE0UVhKeVlYbGdJR2x1YzNSaGJtTmxMQ0JtYjNJZ1ltVnpkQ0J3WlhKbWIzSnRZVzVqWlZ4dUlDQWdJSFJvWVhRZ1BTQmhjbkpoZVZ4dUlDQWdJSFJvWVhRdVgxOXdjbTkwYjE5ZklEMGdRblZtWm1WeUxuQnliM1J2ZEhsd1pWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDOHZJRVpoYkd4aVlXTnJPaUJTWlhSMWNtNGdZVzRnYjJKcVpXTjBJR2x1YzNSaGJtTmxJRzltSUhSb1pTQkNkV1ptWlhJZ1kyeGhjM05jYmlBZ0lDQjBhR0YwSUQwZ1puSnZiVUZ5Y21GNVRHbHJaU2gwYUdGMExDQmhjbkpoZVNsY2JpQWdmVnh1SUNCeVpYUjFjbTRnZEdoaGRGeHVmVnh1WEc1bWRXNWpkR2x2YmlCbWNtOXRUMkpxWldOMElDaDBhR0YwTENCdlltb3BJSHRjYmlBZ2FXWWdLRUoxWm1abGNpNXBjMEoxWm1abGNpaHZZbW9wS1NCN1hHNGdJQ0FnZG1GeUlHeGxiaUE5SUdOb1pXTnJaV1FvYjJKcUxteGxibWQwYUNrZ2ZDQXdYRzRnSUNBZ2RHaGhkQ0E5SUdOeVpXRjBaVUoxWm1abGNpaDBhR0YwTENCc1pXNHBYRzVjYmlBZ0lDQnBaaUFvZEdoaGRDNXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdGMFhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYjJKcUxtTnZjSGtvZEdoaGRDd2dNQ3dnTUN3Z2JHVnVLVnh1SUNBZ0lISmxkSFZ5YmlCMGFHRjBYRzRnSUgxY2JseHVJQ0JwWmlBb2IySnFLU0I3WEc0Z0lDQWdhV1lnS0NoMGVYQmxiMllnUVhKeVlYbENkV1ptWlhJZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbVhHNGdJQ0FnSUNBZ0lHOWlhaTVpZFdabVpYSWdhVzV6ZEdGdVkyVnZaaUJCY25KaGVVSjFabVpsY2lrZ2ZId2dKMnhsYm1kMGFDY2dhVzRnYjJKcUtTQjdYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1c1pXNW5kR2dnSVQwOUlDZHVkVzFpWlhJbklIeDhJR2x6Ym1GdUtHOWlhaTVzWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJqY21WaGRHVkNkV1ptWlhJb2RHaGhkQ3dnTUNsY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJtY205dFFYSnlZWGxNYVd0bEtIUm9ZWFFzSUc5aWFpbGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG5SNWNHVWdQVDA5SUNkQ2RXWm1aWEluSUNZbUlHbHpRWEp5WVhrb2IySnFMbVJoZEdFcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1puSnZiVUZ5Y21GNVRHbHJaU2gwYUdGMExDQnZZbW91WkdGMFlTbGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RHYVhKemRDQmhjbWQxYldWdWRDQnRkWE4wSUdKbElHRWdjM1J5YVc1bkxDQkNkV1ptWlhJc0lFRnljbUY1UW5WbVptVnlMQ0JCY25KaGVTd2diM0lnWVhKeVlYa3RiR2xyWlNCdlltcGxZM1F1SnlsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJobFkydGxaQ0FvYkdWdVozUm9LU0I3WEc0Z0lDOHZJRTV2ZEdVNklHTmhibTV2ZENCMWMyVWdZR3hsYm1kMGFDQThJR3ROWVhoTVpXNW5kR2dvS1dBZ2FHVnlaU0JpWldOaGRYTmxJSFJvWVhRZ1ptRnBiSE1nZDJobGJseHVJQ0F2THlCc1pXNW5kR2dnYVhNZ1RtRk9JQ2gzYUdsamFDQnBjeUJ2ZEdobGNuZHBjMlVnWTI5bGNtTmxaQ0IwYnlCNlpYSnZMaWxjYmlBZ2FXWWdLR3hsYm1kMGFDQStQU0JyVFdGNFRHVnVaM1JvS0NrcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25RWFIwWlcxd2RDQjBieUJoYkd4dlkyRjBaU0JDZFdabVpYSWdiR0Z5WjJWeUlIUm9ZVzRnYldGNGFXMTFiU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBbmMybDZaVG9nTUhnbklDc2dhMDFoZUV4bGJtZDBhQ2dwTG5SdlUzUnlhVzVuS0RFMktTQXJJQ2NnWW5sMFpYTW5LVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnNaVzVuZEdnZ2ZDQXdYRzU5WEc1Y2JtWjFibU4wYVc5dUlGTnNiM2RDZFdabVpYSWdLR3hsYm1kMGFDa2dlMXh1SUNCcFppQW9LMnhsYm1kMGFDQWhQU0JzWlc1bmRHZ3BJSHNnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0YkdsdVpTQmxjV1Z4WlhGY2JpQWdJQ0JzWlc1bmRHZ2dQU0F3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRUoxWm1abGNpNWhiR3h2WXlncmJHVnVaM1JvS1Z4dWZWeHVYRzVDZFdabVpYSXVhWE5DZFdabVpYSWdQU0JtZFc1amRHbHZiaUJwYzBKMVptWmxjaUFvWWlrZ2UxeHVJQ0J5WlhSMWNtNGdJU0VvWWlBaFBTQnVkV3hzSUNZbUlHSXVYMmx6UW5WbVptVnlLVnh1ZlZ4dVhHNUNkV1ptWlhJdVkyOXRjR0Z5WlNBOUlHWjFibU4wYVc5dUlHTnZiWEJoY21VZ0tHRXNJR0lwSUh0Y2JpQWdhV1lnS0NGQ2RXWm1aWEl1YVhOQ2RXWm1aWElvWVNrZ2ZId2dJVUoxWm1abGNpNXBjMEoxWm1abGNpaGlLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjBGeVozVnRaVzUwY3lCdGRYTjBJR0psSUVKMVptWmxjbk1uS1Z4dUlDQjlYRzVjYmlBZ2FXWWdLR0VnUFQwOUlHSXBJSEpsZEhWeWJpQXdYRzVjYmlBZ2RtRnlJSGdnUFNCaExteGxibWQwYUZ4dUlDQjJZWElnZVNBOUlHSXViR1Z1WjNSb1hHNWNiaUFnWm05eUlDaDJZWElnYVNBOUlEQXNJR3hsYmlBOUlFMWhkR2d1YldsdUtIZ3NJSGtwT3lCcElEd2diR1Z1T3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvWVZ0cFhTQWhQVDBnWWx0cFhTa2dlMXh1SUNBZ0lDQWdlQ0E5SUdGYmFWMWNiaUFnSUNBZ0lIa2dQU0JpVzJsZFhHNGdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR2xtSUNoNElEd2dlU2tnY21WMGRYSnVJQzB4WEc0Z0lHbG1JQ2g1SUR3Z2VDa2djbVYwZFhKdUlERmNiaUFnY21WMGRYSnVJREJjYm4xY2JseHVRblZtWm1WeUxtbHpSVzVqYjJScGJtY2dQU0JtZFc1amRHbHZiaUJwYzBWdVkyOWthVzVuSUNobGJtTnZaR2x1WnlrZ2UxeHVJQ0J6ZDJsMFkyZ2dLRk4wY21sdVp5aGxibU52WkdsdVp5a3VkRzlNYjNkbGNrTmhjMlVvS1NrZ2UxeHVJQ0FnSUdOaGMyVWdKMmhsZUNjNlhHNGdJQ0FnWTJGelpTQW5kWFJtT0NjNlhHNGdJQ0FnWTJGelpTQW5kWFJtTFRnbk9seHVJQ0FnSUdOaGMyVWdKMkZ6WTJscEp6cGNiaUFnSUNCallYTmxJQ2RzWVhScGJqRW5PbHh1SUNBZ0lHTmhjMlVnSjJKcGJtRnllU2M2WEc0Z0lDQWdZMkZ6WlNBblltRnpaVFkwSnpwY2JpQWdJQ0JqWVhObElDZDFZM015SnpwY2JpQWdJQ0JqWVhObElDZDFZM010TWljNlhHNGdJQ0FnWTJGelpTQW5kWFJtTVRac1pTYzZYRzRnSUNBZ1kyRnpaU0FuZFhSbUxURTJiR1VuT2x4dUlDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdWY2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sWEc0Z0lIMWNibjFjYmx4dVFuVm1abVZ5TG1OdmJtTmhkQ0E5SUdaMWJtTjBhVzl1SUdOdmJtTmhkQ0FvYkdsemRDd2diR1Z1WjNSb0tTQjdYRzRnSUdsbUlDZ2hhWE5CY25KaGVTaHNhWE4wS1NrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0oxd2liR2x6ZEZ3aUlHRnlaM1Z0Wlc1MElHMTFjM1FnWW1VZ1lXNGdRWEp5WVhrZ2IyWWdRblZtWm1WeWN5Y3BYRzRnSUgxY2JseHVJQ0JwWmlBb2JHbHpkQzVzWlc1bmRHZ2dQVDA5SURBcElIdGNiaUFnSUNCeVpYUjFjbTRnUW5WbVptVnlMbUZzYkc5aktEQXBYRzRnSUgxY2JseHVJQ0IyWVhJZ2FWeHVJQ0JwWmlBb2JHVnVaM1JvSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQnNaVzVuZEdnZ1BTQXdYRzRnSUNBZ1ptOXlJQ2hwSUQwZ01Ec2dhU0E4SUd4cGMzUXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUd4bGJtZDBhQ0FyUFNCc2FYTjBXMmxkTG14bGJtZDBhRnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFpoY2lCaWRXWm1aWElnUFNCQ2RXWm1aWEl1WVd4c2IyTlZibk5oWm1Vb2JHVnVaM1JvS1Z4dUlDQjJZWElnY0c5eklEMGdNRnh1SUNCbWIzSWdLR2tnUFNBd095QnBJRHdnYkdsemRDNXNaVzVuZEdnN0lDc3JhU2tnZTF4dUlDQWdJSFpoY2lCaWRXWWdQU0JzYVhOMFcybGRYRzRnSUNBZ2FXWWdLQ0ZDZFdabVpYSXVhWE5DZFdabVpYSW9ZblZtS1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25YQ0pzYVhOMFhDSWdZWEpuZFcxbGJuUWdiWFZ6ZENCaVpTQmhiaUJCY25KaGVTQnZaaUJDZFdabVpYSnpKeWxjYmlBZ0lDQjlYRzRnSUNBZ1luVm1MbU52Y0hrb1luVm1abVZ5TENCd2IzTXBYRzRnSUNBZ2NHOXpJQ3M5SUdKMVppNXNaVzVuZEdoY2JpQWdmVnh1SUNCeVpYUjFjbTRnWW5WbVptVnlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHSjVkR1ZNWlc1bmRHZ2dLSE4wY21sdVp5d2daVzVqYjJScGJtY3BJSHRjYmlBZ2FXWWdLRUoxWm1abGNpNXBjMEoxWm1abGNpaHpkSEpwYm1jcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaeTVzWlc1bmRHaGNiaUFnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JRUZ5Y21GNVFuVm1abVZ5SUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmlCMGVYQmxiMllnUVhKeVlYbENkV1ptWlhJdWFYTldhV1YzSUQwOVBTQW5ablZ1WTNScGIyNG5JQ1ltWEc0Z0lDQWdJQ0FvUVhKeVlYbENkV1ptWlhJdWFYTldhV1YzS0hOMGNtbHVaeWtnZkh3Z2MzUnlhVzVuSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGxDZFdabVpYSXBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1Wnk1aWVYUmxUR1Z1WjNSb1hHNGdJSDFjYmlBZ2FXWWdLSFI1Y0dWdlppQnpkSEpwYm1jZ0lUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdjM1J5YVc1bklEMGdKeWNnS3lCemRISnBibWRjYmlBZ2ZWeHVYRzRnSUhaaGNpQnNaVzRnUFNCemRISnBibWN1YkdWdVozUm9YRzRnSUdsbUlDaHNaVzRnUFQwOUlEQXBJSEpsZEhWeWJpQXdYRzVjYmlBZ0x5OGdWWE5sSUdFZ1ptOXlJR3h2YjNBZ2RHOGdZWFp2YVdRZ2NtVmpkWEp6YVc5dVhHNGdJSFpoY2lCc2IzZGxjbVZrUTJGelpTQTlJR1poYkhObFhHNGdJR1p2Y2lBb096c3BJSHRjYmlBZ0lDQnpkMmwwWTJnZ0tHVnVZMjlrYVc1bktTQjdYRzRnSUNBZ0lDQmpZWE5sSUNkaGMyTnBhU2M2WEc0Z0lDQWdJQ0JqWVhObElDZHNZWFJwYmpFbk9seHVJQ0FnSUNBZ1kyRnpaU0FuWW1sdVlYSjVKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR3hsYmx4dUlDQWdJQ0FnWTJGelpTQW5kWFJtT0NjNlhHNGdJQ0FnSUNCallYTmxJQ2QxZEdZdE9DYzZYRzRnSUNBZ0lDQmpZWE5sSUhWdVpHVm1hVzVsWkRwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWMFpqaFViMEo1ZEdWektITjBjbWx1WnlrdWJHVnVaM1JvWEc0Z0lDQWdJQ0JqWVhObElDZDFZM015SnpwY2JpQWdJQ0FnSUdOaGMyVWdKM1ZqY3kweUp6cGNiaUFnSUNBZ0lHTmhjMlVnSjNWMFpqRTJiR1VuT2x4dUlDQWdJQ0FnWTJGelpTQW5kWFJtTFRFMmJHVW5PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiR1Z1SUNvZ01seHVJQ0FnSUNBZ1kyRnpaU0FuYUdWNEp6cGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHeGxiaUErUGo0Z01WeHVJQ0FnSUNBZ1kyRnpaU0FuWW1GelpUWTBKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0poYzJVMk5GUnZRbmwwWlhNb2MzUnlhVzVuS1M1c1pXNW5kR2hjYmlBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJR2xtSUNoc2IzZGxjbVZrUTJGelpTa2djbVYwZFhKdUlIVjBaamhVYjBKNWRHVnpLSE4wY21sdVp5a3ViR1Z1WjNSb0lDOHZJR0Z6YzNWdFpTQjFkR1k0WEc0Z0lDQWdJQ0FnSUdWdVkyOWthVzVuSUQwZ0tDY25JQ3NnWlc1amIyUnBibWNwTG5SdlRHOTNaWEpEWVhObEtDbGNiaUFnSUNBZ0lDQWdiRzkzWlhKbFpFTmhjMlVnUFNCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNUNkV1ptWlhJdVlubDBaVXhsYm1kMGFDQTlJR0o1ZEdWTVpXNW5kR2hjYmx4dVpuVnVZM1JwYjI0Z2MyeHZkMVJ2VTNSeWFXNW5JQ2hsYm1OdlpHbHVaeXdnYzNSaGNuUXNJR1Z1WkNrZ2UxeHVJQ0IyWVhJZ2JHOTNaWEpsWkVOaGMyVWdQU0JtWVd4elpWeHVYRzRnSUM4dklFNXZJRzVsWldRZ2RHOGdkbVZ5YVdaNUlIUm9ZWFFnWENKMGFHbHpMbXhsYm1kMGFDQThQU0JOUVZoZlZVbE9WRE15WENJZ2MybHVZMlVnYVhRbmN5QmhJSEpsWVdRdGIyNXNlVnh1SUNBdkx5QndjbTl3WlhKMGVTQnZaaUJoSUhSNWNHVmtJR0Z5Y21GNUxseHVYRzRnSUM4dklGUm9hWE1nWW1Wb1lYWmxjeUJ1WldsMGFHVnlJR3hwYTJVZ1UzUnlhVzVuSUc1dmNpQlZhVzUwT0VGeWNtRjVJR2x1SUhSb1lYUWdkMlVnYzJWMElITjBZWEowTDJWdVpGeHVJQ0F2THlCMGJ5QjBhR1ZwY2lCMWNIQmxjaTlzYjNkbGNpQmliM1Z1WkhNZ2FXWWdkR2hsSUhaaGJIVmxJSEJoYzNObFpDQnBjeUJ2ZFhRZ2IyWWdjbUZ1WjJVdVhHNGdJQzh2SUhWdVpHVm1hVzVsWkNCcGN5Qm9ZVzVrYkdWa0lITndaV05wWVd4c2VTQmhjeUJ3WlhJZ1JVTk5RUzB5TmpJZ05uUm9JRVZrYVhScGIyNHNYRzRnSUM4dklGTmxZM1JwYjI0Z01UTXVNeTR6TGpjZ1VuVnVkR2x0WlNCVFpXMWhiblJwWTNNNklFdGxlV1ZrUW1sdVpHbHVaMGx1YVhScFlXeHBlbUYwYVc5dUxseHVJQ0JwWmlBb2MzUmhjblFnUFQwOUlIVnVaR1ZtYVc1bFpDQjhmQ0J6ZEdGeWRDQThJREFwSUh0Y2JpQWdJQ0J6ZEdGeWRDQTlJREJjYmlBZ2ZWeHVJQ0F2THlCU1pYUjFjbTRnWldGeWJIa2dhV1lnYzNSaGNuUWdQaUIwYUdsekxteGxibWQwYUM0Z1JHOXVaU0JvWlhKbElIUnZJSEJ5WlhabGJuUWdjRzkwWlc1MGFXRnNJSFZwYm5Rek1seHVJQ0F2THlCamIyVnlZMmx2YmlCbVlXbHNJR0psYkc5M0xseHVJQ0JwWmlBb2MzUmhjblFnUGlCMGFHbHpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lISmxkSFZ5YmlBbkoxeHVJQ0I5WEc1Y2JpQWdhV1lnS0dWdVpDQTlQVDBnZFc1a1pXWnBibVZrSUh4OElHVnVaQ0ErSUhSb2FYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1pXNWtJRDBnZEdocGN5NXNaVzVuZEdoY2JpQWdmVnh1WEc0Z0lHbG1JQ2hsYm1RZ1BEMGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQW5KMXh1SUNCOVhHNWNiaUFnTHk4Z1JtOXlZMlVnWTI5bGNuTnBiMjRnZEc4Z2RXbHVkRE15TGlCVWFHbHpJSGRwYkd3Z1lXeHpieUJqYjJWeVkyVWdabUZzYzJWNUwwNWhUaUIyWVd4MVpYTWdkRzhnTUM1Y2JpQWdaVzVrSUQ0K1BqMGdNRnh1SUNCemRHRnlkQ0ErUGo0OUlEQmNibHh1SUNCcFppQW9aVzVrSUR3OUlITjBZWEowS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2NuWEc0Z0lIMWNibHh1SUNCcFppQW9JV1Z1WTI5a2FXNW5LU0JsYm1OdlpHbHVaeUE5SUNkMWRHWTRKMXh1WEc0Z0lIZG9hV3hsSUNoMGNuVmxLU0I3WEc0Z0lDQWdjM2RwZEdOb0lDaGxibU52WkdsdVp5a2dlMXh1SUNBZ0lDQWdZMkZ6WlNBbmFHVjRKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2hsZUZOc2FXTmxLSFJvYVhNc0lITjBZWEowTENCbGJtUXBYRzVjYmlBZ0lDQWdJR05oYzJVZ0ozVjBaamduT2x4dUlDQWdJQ0FnWTJGelpTQW5kWFJtTFRnbk9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYUm1PRk5zYVdObEtIUm9hWE1zSUhOMFlYSjBMQ0JsYm1RcFhHNWNiaUFnSUNBZ0lHTmhjMlVnSjJGelkybHBKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0Z6WTJscFUyeHBZMlVvZEdocGN5d2djM1JoY25Rc0lHVnVaQ2xjYmx4dUlDQWdJQ0FnWTJGelpTQW5iR0YwYVc0eEp6cGNiaUFnSUNBZ0lHTmhjMlVnSjJKcGJtRnllU2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzWVhScGJqRlRiR2xqWlNoMGFHbHpMQ0J6ZEdGeWRDd2daVzVrS1Z4dVhHNGdJQ0FnSUNCallYTmxJQ2RpWVhObE5qUW5PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZbUZ6WlRZMFUyeHBZMlVvZEdocGN5d2djM1JoY25Rc0lHVnVaQ2xjYmx4dUlDQWdJQ0FnWTJGelpTQW5kV056TWljNlhHNGdJQ0FnSUNCallYTmxJQ2QxWTNNdE1pYzZYRzRnSUNBZ0lDQmpZWE5sSUNkMWRHWXhObXhsSnpwY2JpQWdJQ0FnSUdOaGMyVWdKM1YwWmkweE5teGxKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFYwWmpFMmJHVlRiR2xqWlNoMGFHbHpMQ0J6ZEdGeWRDd2daVzVrS1Z4dVhHNGdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNCcFppQW9iRzkzWlhKbFpFTmhjMlVwSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0oxVnVhMjV2ZDI0Z1pXNWpiMlJwYm1jNklDY2dLeUJsYm1OdlpHbHVaeWxjYmlBZ0lDQWdJQ0FnWlc1amIyUnBibWNnUFNBb1pXNWpiMlJwYm1jZ0t5QW5KeWt1ZEc5TWIzZGxja05oYzJVb0tWeHVJQ0FnSUNBZ0lDQnNiM2RsY21Wa1EyRnpaU0E5SUhSeWRXVmNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVMeThnVkdobElIQnliM0JsY25SNUlHbHpJSFZ6WldRZ1lua2dZRUoxWm1abGNpNXBjMEoxWm1abGNtQWdZVzVrSUdCcGN5MWlkV1ptWlhKZ0lDaHBiaUJUWVdaaGNta2dOUzAzS1NCMGJ5QmtaWFJsWTNSY2JpOHZJRUoxWm1abGNpQnBibk4wWVc1alpYTXVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbDlwYzBKMVptWmxjaUE5SUhSeWRXVmNibHh1Wm5WdVkzUnBiMjRnYzNkaGNDQW9ZaXdnYml3Z2JTa2dlMXh1SUNCMllYSWdhU0E5SUdKYmJsMWNiaUFnWWx0dVhTQTlJR0piYlYxY2JpQWdZbHR0WFNBOUlHbGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1emQyRndNVFlnUFNCbWRXNWpkR2x2YmlCemQyRndNVFlnS0NrZ2UxeHVJQ0IyWVhJZ2JHVnVJRDBnZEdocGN5NXNaVzVuZEdoY2JpQWdhV1lnS0d4bGJpQWxJRElnSVQwOUlEQXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduUW5WbVptVnlJSE5wZW1VZ2JYVnpkQ0JpWlNCaElHMTFiSFJwY0d4bElHOW1JREUyTFdKcGRITW5LVnh1SUNCOVhHNGdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnYkdWdU95QnBJQ3M5SURJcElIdGNiaUFnSUNCemQyRndLSFJvYVhNc0lHa3NJR2tnS3lBeEtWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCMGFHbHpYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWMzZGhjRE15SUQwZ1puVnVZM1JwYjI0Z2MzZGhjRE15SUNncElIdGNiaUFnZG1GeUlHeGxiaUE5SUhSb2FYTXViR1Z1WjNSb1hHNGdJR2xtSUNoc1pXNGdKU0EwSUNFOVBTQXdLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvSjBKMVptWmxjaUJ6YVhwbElHMTFjM1FnWW1VZ1lTQnRkV3gwYVhCc1pTQnZaaUF6TWkxaWFYUnpKeWxjYmlBZ2ZWeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJqc2dhU0FyUFNBMEtTQjdYRzRnSUNBZ2MzZGhjQ2gwYUdsekxDQnBMQ0JwSUNzZ015bGNiaUFnSUNCemQyRndLSFJvYVhNc0lHa2dLeUF4TENCcElDc2dNaWxjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdkR2hwYzF4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbk4zWVhBMk5DQTlJR1oxYm1OMGFXOXVJSE4zWVhBMk5DQW9LU0I3WEc0Z0lIWmhjaUJzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRnh1SUNCcFppQW9iR1Z1SUNVZ09DQWhQVDBnTUNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCU1lXNW5aVVZ5Y205eUtDZENkV1ptWlhJZ2MybDZaU0J0ZFhOMElHSmxJR0VnYlhWc2RHbHdiR1VnYjJZZ05qUXRZbWwwY3ljcFhHNGdJSDFjYmlBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrZ0t6MGdPQ2tnZTF4dUlDQWdJSE4zWVhBb2RHaHBjeXdnYVN3Z2FTQXJJRGNwWEc0Z0lDQWdjM2RoY0NoMGFHbHpMQ0JwSUNzZ01Td2dhU0FySURZcFhHNGdJQ0FnYzNkaGNDaDBhR2x6TENCcElDc2dNaXdnYVNBcklEVXBYRzRnSUNBZ2MzZGhjQ2gwYUdsekxDQnBJQ3NnTXl3Z2FTQXJJRFFwWEc0Z0lIMWNiaUFnY21WMGRYSnVJSFJvYVhOY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaeUE5SUdaMWJtTjBhVzl1SUhSdlUzUnlhVzVuSUNncElIdGNiaUFnZG1GeUlHeGxibWQwYUNBOUlIUm9hWE11YkdWdVozUm9JSHdnTUZ4dUlDQnBaaUFvYkdWdVozUm9JRDA5UFNBd0tTQnlaWFIxY200Z0p5ZGNiaUFnYVdZZ0tHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BUMDlJREFwSUhKbGRIVnliaUIxZEdZNFUyeHBZMlVvZEdocGN5d2dNQ3dnYkdWdVozUm9LVnh1SUNCeVpYUjFjbTRnYzJ4dmQxUnZVM1J5YVc1bkxtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWxjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNWxjWFZoYkhNZ1BTQm1kVzVqZEdsdmJpQmxjWFZoYkhNZ0tHSXBJSHRjYmlBZ2FXWWdLQ0ZDZFdabVpYSXVhWE5DZFdabVpYSW9ZaWtwSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0owRnlaM1Z0Wlc1MElHMTFjM1FnWW1VZ1lTQkNkV1ptWlhJbktWeHVJQ0JwWmlBb2RHaHBjeUE5UFQwZ1lpa2djbVYwZFhKdUlIUnlkV1ZjYmlBZ2NtVjBkWEp1SUVKMVptWmxjaTVqYjIxd1lYSmxLSFJvYVhNc0lHSXBJRDA5UFNBd1hHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1YVc1emNHVmpkQ0E5SUdaMWJtTjBhVzl1SUdsdWMzQmxZM1FnS0NrZ2UxeHVJQ0IyWVhJZ2MzUnlJRDBnSnlkY2JpQWdkbUZ5SUcxaGVDQTlJR1Y0Y0c5eWRITXVTVTVUVUVWRFZGOU5RVmhmUWxsVVJWTmNiaUFnYVdZZ0tIUm9hWE11YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhOMGNpQTlJSFJvYVhNdWRHOVRkSEpwYm1jb0oyaGxlQ2NzSURBc0lHMWhlQ2t1YldGMFkyZ29MeTU3TW4wdlp5a3VhbTlwYmlnbklDY3BYRzRnSUNBZ2FXWWdLSFJvYVhNdWJHVnVaM1JvSUQ0Z2JXRjRLU0J6ZEhJZ0t6MGdKeUF1TGk0Z0oxeHVJQ0I5WEc0Z0lISmxkSFZ5YmlBblBFSjFabVpsY2lBbklDc2djM1J5SUNzZ0p6NG5YRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdVkyOXRjR0Z5WlNBOUlHWjFibU4wYVc5dUlHTnZiWEJoY21VZ0tIUmhjbWRsZEN3Z2MzUmhjblFzSUdWdVpDd2dkR2hwYzFOMFlYSjBMQ0IwYUdselJXNWtLU0I3WEc0Z0lHbG1JQ2doUW5WbVptVnlMbWx6UW5WbVptVnlLSFJoY21kbGRDa3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RCY21kMWJXVnVkQ0J0ZFhOMElHSmxJR0VnUW5WbVptVnlKeWxjYmlBZ2ZWeHVYRzRnSUdsbUlDaHpkR0Z5ZENBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdjM1JoY25RZ1BTQXdYRzRnSUgxY2JpQWdhV1lnS0dWdVpDQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnWlc1a0lEMGdkR0Z5WjJWMElEOGdkR0Z5WjJWMExteGxibWQwYUNBNklEQmNiaUFnZlZ4dUlDQnBaaUFvZEdocGMxTjBZWEowSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQjBhR2x6VTNSaGNuUWdQU0F3WEc0Z0lIMWNiaUFnYVdZZ0tIUm9hWE5GYm1RZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJSFJvYVhORmJtUWdQU0IwYUdsekxteGxibWQwYUZ4dUlDQjlYRzVjYmlBZ2FXWWdLSE4wWVhKMElEd2dNQ0I4ZkNCbGJtUWdQaUIwWVhKblpYUXViR1Z1WjNSb0lIeDhJSFJvYVhOVGRHRnlkQ0E4SURBZ2ZId2dkR2hwYzBWdVpDQStJSFJvYVhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb0oyOTFkQ0J2WmlCeVlXNW5aU0JwYm1SbGVDY3BYRzRnSUgxY2JseHVJQ0JwWmlBb2RHaHBjMU4wWVhKMElENDlJSFJvYVhORmJtUWdKaVlnYzNSaGNuUWdQajBnWlc1a0tTQjdYRzRnSUNBZ2NtVjBkWEp1SURCY2JpQWdmVnh1SUNCcFppQW9kR2hwYzFOMFlYSjBJRDQ5SUhSb2FYTkZibVFwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdMVEZjYmlBZ2ZWeHVJQ0JwWmlBb2MzUmhjblFnUGowZ1pXNWtLU0I3WEc0Z0lDQWdjbVYwZFhKdUlERmNiaUFnZlZ4dVhHNGdJSE4wWVhKMElENCtQajBnTUZ4dUlDQmxibVFnUGo0K1BTQXdYRzRnSUhSb2FYTlRkR0Z5ZENBK1BqNDlJREJjYmlBZ2RHaHBjMFZ1WkNBK1BqNDlJREJjYmx4dUlDQnBaaUFvZEdocGN5QTlQVDBnZEdGeVoyVjBLU0J5WlhSMWNtNGdNRnh1WEc0Z0lIWmhjaUI0SUQwZ2RHaHBjMFZ1WkNBdElIUm9hWE5UZEdGeWRGeHVJQ0IyWVhJZ2VTQTlJR1Z1WkNBdElITjBZWEowWEc0Z0lIWmhjaUJzWlc0Z1BTQk5ZWFJvTG0xcGJpaDRMQ0I1S1Z4dVhHNGdJSFpoY2lCMGFHbHpRMjl3ZVNBOUlIUm9hWE11YzJ4cFkyVW9kR2hwYzFOMFlYSjBMQ0IwYUdselJXNWtLVnh1SUNCMllYSWdkR0Z5WjJWMFEyOXdlU0E5SUhSaGNtZGxkQzV6YkdsalpTaHpkR0Z5ZEN3Z1pXNWtLVnh1WEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2diR1Z1T3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvZEdocGMwTnZjSGxiYVYwZ0lUMDlJSFJoY21kbGRFTnZjSGxiYVYwcElIdGNiaUFnSUNBZ0lIZ2dQU0IwYUdselEyOXdlVnRwWFZ4dUlDQWdJQ0FnZVNBOUlIUmhjbWRsZEVOdmNIbGJhVjFjYmlBZ0lDQWdJR0p5WldGclhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLSGdnUENCNUtTQnlaWFIxY200Z0xURmNiaUFnYVdZZ0tIa2dQQ0I0S1NCeVpYUjFjbTRnTVZ4dUlDQnlaWFIxY200Z01GeHVmVnh1WEc0dkx5QkdhVzVrY3lCbGFYUm9aWElnZEdobElHWnBjbk4wSUdsdVpHVjRJRzltSUdCMllXeGdJR2x1SUdCaWRXWm1aWEpnSUdGMElHOW1abk5sZENBK1BTQmdZbmwwWlU5bVpuTmxkR0FzWEc0dkx5QlBVaUIwYUdVZ2JHRnpkQ0JwYm1SbGVDQnZaaUJnZG1Gc1lDQnBiaUJnWW5WbVptVnlZQ0JoZENCdlptWnpaWFFnUEQwZ1lHSjVkR1ZQWm1aelpYUmdMbHh1THk5Y2JpOHZJRUZ5WjNWdFpXNTBjenBjYmk4dklDMGdZblZtWm1WeUlDMGdZU0JDZFdabVpYSWdkRzhnYzJWaGNtTm9YRzR2THlBdElIWmhiQ0F0SUdFZ2MzUnlhVzVuTENCQ2RXWm1aWElzSUc5eUlHNTFiV0psY2x4dUx5OGdMU0JpZVhSbFQyWm1jMlYwSUMwZ1lXNGdhVzVrWlhnZ2FXNTBieUJnWW5WbVptVnlZRHNnZDJsc2JDQmlaU0JqYkdGdGNHVmtJSFJ2SUdGdUlHbHVkRE15WEc0dkx5QXRJR1Z1WTI5a2FXNW5JQzBnWVc0Z2IzQjBhVzl1WVd3Z1pXNWpiMlJwYm1jc0lISmxiR1YyWVc1MElHbHpJSFpoYkNCcGN5QmhJSE4wY21sdVoxeHVMeThnTFNCa2FYSWdMU0IwY25WbElHWnZjaUJwYm1SbGVFOW1MQ0JtWVd4elpTQm1iM0lnYkdGemRFbHVaR1Y0VDJaY2JtWjFibU4wYVc5dUlHSnBaR2x5WldOMGFXOXVZV3hKYm1SbGVFOW1JQ2hpZFdabVpYSXNJSFpoYkN3Z1lubDBaVTltWm5ObGRDd2daVzVqYjJScGJtY3NJR1JwY2lrZ2UxeHVJQ0F2THlCRmJYQjBlU0JpZFdabVpYSWdiV1ZoYm5NZ2JtOGdiV0YwWTJoY2JpQWdhV1lnS0dKMVptWmxjaTVzWlc1bmRHZ2dQVDA5SURBcElISmxkSFZ5YmlBdE1WeHVYRzRnSUM4dklFNXZjbTFoYkdsNlpTQmllWFJsVDJabWMyVjBYRzRnSUdsbUlDaDBlWEJsYjJZZ1lubDBaVTltWm5ObGRDQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0JsYm1OdlpHbHVaeUE5SUdKNWRHVlBabVp6WlhSY2JpQWdJQ0JpZVhSbFQyWm1jMlYwSUQwZ01GeHVJQ0I5SUdWc2MyVWdhV1lnS0dKNWRHVlBabVp6WlhRZ1BpQXdlRGRtWm1abVptWm1LU0I3WEc0Z0lDQWdZbmwwWlU5bVpuTmxkQ0E5SURCNE4yWm1abVptWm1aY2JpQWdmU0JsYkhObElHbG1JQ2hpZVhSbFQyWm1jMlYwSUR3Z0xUQjRPREF3TURBd01EQXBJSHRjYmlBZ0lDQmllWFJsVDJabWMyVjBJRDBnTFRCNE9EQXdNREF3TURCY2JpQWdmVnh1SUNCaWVYUmxUMlptYzJWMElEMGdLMko1ZEdWUFptWnpaWFFnSUM4dklFTnZaWEpqWlNCMGJ5Qk9kVzFpWlhJdVhHNGdJR2xtSUNocGMwNWhUaWhpZVhSbFQyWm1jMlYwS1NrZ2UxeHVJQ0FnSUM4dklHSjVkR1ZQWm1aelpYUTZJR2wwSUdsMEozTWdkVzVrWldacGJtVmtMQ0J1ZFd4c0xDQk9ZVTRzSUZ3aVptOXZYQ0lzSUdWMFl5d2djMlZoY21Ob0lIZG9iMnhsSUdKMVptWmxjbHh1SUNBZ0lHSjVkR1ZQWm1aelpYUWdQU0JrYVhJZ1B5QXdJRG9nS0dKMVptWmxjaTVzWlc1bmRHZ2dMU0F4S1Z4dUlDQjlYRzVjYmlBZ0x5OGdUbTl5YldGc2FYcGxJR0o1ZEdWUFptWnpaWFE2SUc1bFoyRjBhWFpsSUc5bVpuTmxkSE1nYzNSaGNuUWdabkp2YlNCMGFHVWdaVzVrSUc5bUlIUm9aU0JpZFdabVpYSmNiaUFnYVdZZ0tHSjVkR1ZQWm1aelpYUWdQQ0F3S1NCaWVYUmxUMlptYzJWMElEMGdZblZtWm1WeUxteGxibWQwYUNBcklHSjVkR1ZQWm1aelpYUmNiaUFnYVdZZ0tHSjVkR1ZQWm1aelpYUWdQajBnWW5WbVptVnlMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHbG1JQ2hrYVhJcElISmxkSFZ5YmlBdE1WeHVJQ0FnSUdWc2MyVWdZbmwwWlU5bVpuTmxkQ0E5SUdKMVptWmxjaTVzWlc1bmRHZ2dMU0F4WEc0Z0lIMGdaV3h6WlNCcFppQW9ZbmwwWlU5bVpuTmxkQ0E4SURBcElIdGNiaUFnSUNCcFppQW9aR2x5S1NCaWVYUmxUMlptYzJWMElEMGdNRnh1SUNBZ0lHVnNjMlVnY21WMGRYSnVJQzB4WEc0Z0lIMWNibHh1SUNBdkx5Qk9iM0p0WVd4cGVtVWdkbUZzWEc0Z0lHbG1JQ2gwZVhCbGIyWWdkbUZzSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lIWmhiQ0E5SUVKMVptWmxjaTVtY205dEtIWmhiQ3dnWlc1amIyUnBibWNwWEc0Z0lIMWNibHh1SUNBdkx5QkdhVzVoYkd4NUxDQnpaV0Z5WTJnZ1pXbDBhR1Z5SUdsdVpHVjRUMllnS0dsbUlHUnBjaUJwY3lCMGNuVmxLU0J2Y2lCc1lYTjBTVzVrWlhoUFpseHVJQ0JwWmlBb1FuVm1abVZ5TG1selFuVm1abVZ5S0haaGJDa3BJSHRjYmlBZ0lDQXZMeUJUY0dWamFXRnNJR05oYzJVNklHeHZiMnRwYm1jZ1ptOXlJR1Z0Y0hSNUlITjBjbWx1Wnk5aWRXWm1aWElnWVd4M1lYbHpJR1poYVd4elhHNGdJQ0FnYVdZZ0tIWmhiQzVzWlc1bmRHZ2dQVDA5SURBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlBdE1WeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZWEp5WVhsSmJtUmxlRTltS0dKMVptWmxjaXdnZG1Gc0xDQmllWFJsVDJabWMyVjBMQ0JsYm1OdlpHbHVaeXdnWkdseUtWeHVJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUIyWVd3Z1BUMDlJQ2R1ZFcxaVpYSW5LU0I3WEc0Z0lDQWdkbUZzSUQwZ2RtRnNJQ1lnTUhoR1JpQXZMeUJUWldGeVkyZ2dabTl5SUdFZ1lubDBaU0IyWVd4MVpTQmJNQzB5TlRWZFhHNGdJQ0FnYVdZZ0tFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVUlDWW1YRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQlZhVzUwT0VGeWNtRjVMbkJ5YjNSdmRIbHdaUzVwYm1SbGVFOW1JRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQnBaaUFvWkdseUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlZhVzUwT0VGeWNtRjVMbkJ5YjNSdmRIbHdaUzVwYm1SbGVFOW1MbU5oYkd3b1luVm1abVZ5TENCMllXd3NJR0o1ZEdWUFptWnpaWFFwWEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdWV2x1ZERoQmNuSmhlUzV3Y205MGIzUjVjR1V1YkdGemRFbHVaR1Y0VDJZdVkyRnNiQ2hpZFdabVpYSXNJSFpoYkN3Z1lubDBaVTltWm5ObGRDbGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR0Z5Y21GNVNXNWtaWGhQWmloaWRXWm1aWElzSUZzZ2RtRnNJRjBzSUdKNWRHVlBabVp6WlhRc0lHVnVZMjlrYVc1bkxDQmthWElwWEc0Z0lIMWNibHh1SUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZDJZV3dnYlhWemRDQmlaU0J6ZEhKcGJtY3NJRzUxYldKbGNpQnZjaUJDZFdabVpYSW5LVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjbkpoZVVsdVpHVjRUMllnS0dGeWNpd2dkbUZzTENCaWVYUmxUMlptYzJWMExDQmxibU52WkdsdVp5d2daR2x5S1NCN1hHNGdJSFpoY2lCcGJtUmxlRk5wZW1VZ1BTQXhYRzRnSUhaaGNpQmhjbkpNWlc1bmRHZ2dQU0JoY25JdWJHVnVaM1JvWEc0Z0lIWmhjaUIyWVd4TVpXNW5kR2dnUFNCMllXd3ViR1Z1WjNSb1hHNWNiaUFnYVdZZ0tHVnVZMjlrYVc1bklDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0JsYm1OdlpHbHVaeUE5SUZOMGNtbHVaeWhsYm1OdlpHbHVaeWt1ZEc5TWIzZGxja05oYzJVb0tWeHVJQ0FnSUdsbUlDaGxibU52WkdsdVp5QTlQVDBnSjNWamN6SW5JSHg4SUdWdVkyOWthVzVuSUQwOVBTQW5kV056TFRJbklIeDhYRzRnSUNBZ0lDQWdJR1Z1WTI5a2FXNW5JRDA5UFNBbmRYUm1NVFpzWlNjZ2ZId2daVzVqYjJScGJtY2dQVDA5SUNkMWRHWXRNVFpzWlNjcElIdGNiaUFnSUNBZ0lHbG1JQ2hoY25JdWJHVnVaM1JvSUR3Z01pQjhmQ0IyWVd3dWJHVnVaM1JvSUR3Z01pa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdMVEZjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2x1WkdWNFUybDZaU0E5SURKY2JpQWdJQ0FnSUdGeWNreGxibWQwYUNBdlBTQXlYRzRnSUNBZ0lDQjJZV3hNWlc1bmRHZ2dMejBnTWx4dUlDQWdJQ0FnWW5sMFpVOW1abk5sZENBdlBTQXlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdablZ1WTNScGIyNGdjbVZoWkNBb1luVm1MQ0JwS1NCN1hHNGdJQ0FnYVdZZ0tHbHVaR1Y0VTJsNlpTQTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdKMVpsdHBYVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWW5WbUxuSmxZV1JWU1c1ME1UWkNSU2hwSUNvZ2FXNWtaWGhUYVhwbEtWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIWmhjaUJwWEc0Z0lHbG1JQ2hrYVhJcElIdGNiaUFnSUNCMllYSWdabTkxYm1SSmJtUmxlQ0E5SUMweFhHNGdJQ0FnWm05eUlDaHBJRDBnWW5sMFpVOW1abk5sZERzZ2FTQThJR0Z5Y2t4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQnBaaUFvY21WaFpDaGhjbklzSUdrcElEMDlQU0J5WldGa0tIWmhiQ3dnWm05MWJtUkpibVJsZUNBOVBUMGdMVEVnUHlBd0lEb2dhU0F0SUdadmRXNWtTVzVrWlhncEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNobWIzVnVaRWx1WkdWNElEMDlQU0F0TVNrZ1ptOTFibVJKYm1SbGVDQTlJR2xjYmlBZ0lDQWdJQ0FnYVdZZ0tHa2dMU0JtYjNWdVpFbHVaR1Y0SUNzZ01TQTlQVDBnZG1Gc1RHVnVaM1JvS1NCeVpYUjFjbTRnWm05MWJtUkpibVJsZUNBcUlHbHVaR1Y0VTJsNlpWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1p2ZFc1a1NXNWtaWGdnSVQwOUlDMHhLU0JwSUMwOUlHa2dMU0JtYjNWdVpFbHVaR1Y0WEc0Z0lDQWdJQ0FnSUdadmRXNWtTVzVrWlhnZ1BTQXRNVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnBaaUFvWW5sMFpVOW1abk5sZENBcklIWmhiRXhsYm1kMGFDQStJR0Z5Y2t4bGJtZDBhQ2tnWW5sMFpVOW1abk5sZENBOUlHRnlja3hsYm1kMGFDQXRJSFpoYkV4bGJtZDBhRnh1SUNBZ0lHWnZjaUFvYVNBOUlHSjVkR1ZQWm1aelpYUTdJR2tnUGowZ01Ec2dhUzB0S1NCN1hHNGdJQ0FnSUNCMllYSWdabTkxYm1RZ1BTQjBjblZsWEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJxSUQwZ01Ec2dhaUE4SUhaaGJFeGxibWQwYURzZ2Fpc3JLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaV0ZrS0dGeWNpd2dhU0FySUdvcElDRTlQU0J5WldGa0tIWmhiQ3dnYWlrcElIdGNiaUFnSUNBZ0lDQWdJQ0JtYjNWdVpDQTlJR1poYkhObFhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVd0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR1p2ZFc1a0tTQnlaWFIxY200Z2FWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlBdE1WeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG1sdVkyeDFaR1Z6SUQwZ1puVnVZM1JwYjI0Z2FXNWpiSFZrWlhNZ0tIWmhiQ3dnWW5sMFpVOW1abk5sZEN3Z1pXNWpiMlJwYm1jcElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWFXNWtaWGhQWmloMllXd3NJR0o1ZEdWUFptWnpaWFFzSUdWdVkyOWthVzVuS1NBaFBUMGdMVEZjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXBibVJsZUU5bUlEMGdablZ1WTNScGIyNGdhVzVrWlhoUFppQW9kbUZzTENCaWVYUmxUMlptYzJWMExDQmxibU52WkdsdVp5a2dlMXh1SUNCeVpYUjFjbTRnWW1sa2FYSmxZM1JwYjI1aGJFbHVaR1Y0VDJZb2RHaHBjeXdnZG1Gc0xDQmllWFJsVDJabWMyVjBMQ0JsYm1OdlpHbHVaeXdnZEhKMVpTbGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1c1lYTjBTVzVrWlhoUFppQTlJR1oxYm1OMGFXOXVJR3hoYzNSSmJtUmxlRTltSUNoMllXd3NJR0o1ZEdWUFptWnpaWFFzSUdWdVkyOWthVzVuS1NCN1hHNGdJSEpsZEhWeWJpQmlhV1JwY21WamRHbHZibUZzU1c1a1pYaFBaaWgwYUdsekxDQjJZV3dzSUdKNWRHVlBabVp6WlhRc0lHVnVZMjlrYVc1bkxDQm1ZV3h6WlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdWNFYzSnBkR1VnS0dKMVppd2djM1J5YVc1bkxDQnZabVp6WlhRc0lHeGxibWQwYUNrZ2UxeHVJQ0J2Wm1aelpYUWdQU0JPZFcxaVpYSW9iMlptYzJWMEtTQjhmQ0F3WEc0Z0lIWmhjaUJ5WlcxaGFXNXBibWNnUFNCaWRXWXViR1Z1WjNSb0lDMGdiMlptYzJWMFhHNGdJR2xtSUNnaGJHVnVaM1JvS1NCN1hHNGdJQ0FnYkdWdVozUm9JRDBnY21WdFlXbHVhVzVuWEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnYkdWdVozUm9JRDBnVG5WdFltVnlLR3hsYm1kMGFDbGNiaUFnSUNCcFppQW9iR1Z1WjNSb0lENGdjbVZ0WVdsdWFXNW5LU0I3WEc0Z0lDQWdJQ0JzWlc1bmRHZ2dQU0J5WlcxaGFXNXBibWRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2THlCdGRYTjBJR0psSUdGdUlHVjJaVzRnYm5WdFltVnlJRzltSUdScFoybDBjMXh1SUNCMllYSWdjM1J5VEdWdUlEMGdjM1J5YVc1bkxteGxibWQwYUZ4dUlDQnBaaUFvYzNSeVRHVnVJQ1VnTWlBaFBUMGdNQ2tnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblNXNTJZV3hwWkNCb1pYZ2djM1J5YVc1bkp5bGNibHh1SUNCcFppQW9iR1Z1WjNSb0lENGdjM1J5VEdWdUlDOGdNaWtnZTF4dUlDQWdJR3hsYm1kMGFDQTlJSE4wY2t4bGJpQXZJREpjYmlBZ2ZWeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ2RtRnlJSEJoY25ObFpDQTlJSEJoY25ObFNXNTBLSE4wY21sdVp5NXpkV0p6ZEhJb2FTQXFJRElzSURJcExDQXhOaWxjYmlBZ0lDQnBaaUFvYVhOT1lVNG9jR0Z5YzJWa0tTa2djbVYwZFhKdUlHbGNiaUFnSUNCaWRXWmJiMlptYzJWMElDc2dhVjBnUFNCd1lYSnpaV1JjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdhVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjFkR1k0VjNKcGRHVWdLR0oxWml3Z2MzUnlhVzVuTENCdlptWnpaWFFzSUd4bGJtZDBhQ2tnZTF4dUlDQnlaWFIxY200Z1lteHBkRUoxWm1abGNpaDFkR1k0Vkc5Q2VYUmxjeWh6ZEhKcGJtY3NJR0oxWmk1c1pXNW5kR2dnTFNCdlptWnpaWFFwTENCaWRXWXNJRzltWm5ObGRDd2diR1Z1WjNSb0tWeHVmVnh1WEc1bWRXNWpkR2x2YmlCaGMyTnBhVmR5YVhSbElDaGlkV1lzSUhOMGNtbHVaeXdnYjJabWMyVjBMQ0JzWlc1bmRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUdKc2FYUkNkV1ptWlhJb1lYTmphV2xVYjBKNWRHVnpLSE4wY21sdVp5a3NJR0oxWml3Z2IyWm1jMlYwTENCc1pXNW5kR2dwWEc1OVhHNWNibVoxYm1OMGFXOXVJR3hoZEdsdU1WZHlhWFJsSUNoaWRXWXNJSE4wY21sdVp5d2diMlptYzJWMExDQnNaVzVuZEdncElIdGNiaUFnY21WMGRYSnVJR0Z6WTJscFYzSnBkR1VvWW5WbUxDQnpkSEpwYm1jc0lHOW1abk5sZEN3Z2JHVnVaM1JvS1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJpWVhObE5qUlhjbWwwWlNBb1luVm1MQ0J6ZEhKcGJtY3NJRzltWm5ObGRDd2diR1Z1WjNSb0tTQjdYRzRnSUhKbGRIVnliaUJpYkdsMFFuVm1abVZ5S0dKaGMyVTJORlJ2UW5sMFpYTW9jM1J5YVc1bktTd2dZblZtTENCdlptWnpaWFFzSUd4bGJtZDBhQ2xjYm4xY2JseHVablZ1WTNScGIyNGdkV056TWxkeWFYUmxJQ2hpZFdZc0lITjBjbWx1Wnl3Z2IyWm1jMlYwTENCc1pXNW5kR2dwSUh0Y2JpQWdjbVYwZFhKdUlHSnNhWFJDZFdabVpYSW9kWFJtTVRac1pWUnZRbmwwWlhNb2MzUnlhVzVuTENCaWRXWXViR1Z1WjNSb0lDMGdiMlptYzJWMEtTd2dZblZtTENCdlptWnpaWFFzSUd4bGJtZDBhQ2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlNBOUlHWjFibU4wYVc5dUlIZHlhWFJsSUNoemRISnBibWNzSUc5bVpuTmxkQ3dnYkdWdVozUm9MQ0JsYm1OdlpHbHVaeWtnZTF4dUlDQXZMeUJDZFdabVpYSWpkM0pwZEdVb2MzUnlhVzVuS1Z4dUlDQnBaaUFvYjJabWMyVjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNCbGJtTnZaR2x1WnlBOUlDZDFkR1k0SjF4dUlDQWdJR3hsYm1kMGFDQTlJSFJvYVhNdWJHVnVaM1JvWEc0Z0lDQWdiMlptYzJWMElEMGdNRnh1SUNBdkx5QkNkV1ptWlhJamQzSnBkR1VvYzNSeWFXNW5MQ0JsYm1OdlpHbHVaeWxjYmlBZ2ZTQmxiSE5sSUdsbUlDaHNaVzVuZEdnZ1BUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCMGVYQmxiMllnYjJabWMyVjBJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUdWdVkyOWthVzVuSUQwZ2IyWm1jMlYwWEc0Z0lDQWdiR1Z1WjNSb0lEMGdkR2hwY3k1c1pXNW5kR2hjYmlBZ0lDQnZabVp6WlhRZ1BTQXdYRzRnSUM4dklFSjFabVpsY2lOM2NtbDBaU2h6ZEhKcGJtY3NJRzltWm5ObGRGc3NJR3hsYm1kMGFGMWJMQ0JsYm1OdlpHbHVaMTBwWEc0Z0lIMGdaV3h6WlNCcFppQW9hWE5HYVc1cGRHVW9iMlptYzJWMEtTa2dlMXh1SUNBZ0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnSUNCcFppQW9hWE5HYVc1cGRHVW9iR1Z1WjNSb0tTa2dlMXh1SUNBZ0lDQWdiR1Z1WjNSb0lEMGdiR1Z1WjNSb0lId2dNRnh1SUNBZ0lDQWdhV1lnS0dWdVkyOWthVzVuSUQwOVBTQjFibVJsWm1sdVpXUXBJR1Z1WTI5a2FXNW5JRDBnSjNWMFpqZ25YRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdWdVkyOWthVzVuSUQwZ2JHVnVaM1JvWEc0Z0lDQWdJQ0JzWlc1bmRHZ2dQU0IxYm1SbFptbHVaV1JjYmlBZ0lDQjlYRzRnSUM4dklHeGxaMkZqZVNCM2NtbDBaU2h6ZEhKcGJtY3NJR1Z1WTI5a2FXNW5MQ0J2Wm1aelpYUXNJR3hsYm1kMGFDa2dMU0J5WlcxdmRtVWdhVzRnZGpBdU1UTmNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBblFuVm1abVZ5TG5keWFYUmxLSE4wY21sdVp5d2daVzVqYjJScGJtY3NJRzltWm5ObGRGc3NJR3hsYm1kMGFGMHBJR2x6SUc1dklHeHZibWRsY2lCemRYQndiM0owWldRblhHNGdJQ0FnS1Z4dUlDQjlYRzVjYmlBZ2RtRnlJSEpsYldGcGJtbHVaeUE5SUhSb2FYTXViR1Z1WjNSb0lDMGdiMlptYzJWMFhHNGdJR2xtSUNoc1pXNW5kR2dnUFQwOUlIVnVaR1ZtYVc1bFpDQjhmQ0JzWlc1bmRHZ2dQaUJ5WlcxaGFXNXBibWNwSUd4bGJtZDBhQ0E5SUhKbGJXRnBibWx1WjF4dVhHNGdJR2xtSUNnb2MzUnlhVzVuTG14bGJtZDBhQ0ErSURBZ0ppWWdLR3hsYm1kMGFDQThJREFnZkh3Z2IyWm1jMlYwSUR3Z01Da3BJSHg4SUc5bVpuTmxkQ0ErSUhSb2FYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lGSmhibWRsUlhKeWIzSW9KMEYwZEdWdGNIUWdkRzhnZDNKcGRHVWdiM1YwYzJsa1pTQmlkV1ptWlhJZ1ltOTFibVJ6SnlsY2JpQWdmVnh1WEc0Z0lHbG1JQ2doWlc1amIyUnBibWNwSUdWdVkyOWthVzVuSUQwZ0ozVjBaamduWEc1Y2JpQWdkbUZ5SUd4dmQyVnlaV1JEWVhObElEMGdabUZzYzJWY2JpQWdabTl5SUNnN095a2dlMXh1SUNBZ0lITjNhWFJqYUNBb1pXNWpiMlJwYm1jcElIdGNiaUFnSUNBZ0lHTmhjMlVnSjJobGVDYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm9aWGhYY21sMFpTaDBhR2x6TENCemRISnBibWNzSUc5bVpuTmxkQ3dnYkdWdVozUm9LVnh1WEc0Z0lDQWdJQ0JqWVhObElDZDFkR1k0SnpwY2JpQWdJQ0FnSUdOaGMyVWdKM1YwWmkwNEp6cGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVjBaamhYY21sMFpTaDBhR2x6TENCemRISnBibWNzSUc5bVpuTmxkQ3dnYkdWdVozUm9LVnh1WEc0Z0lDQWdJQ0JqWVhObElDZGhjMk5wYVNjNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGMyTnBhVmR5YVhSbEtIUm9hWE1zSUhOMGNtbHVaeXdnYjJabWMyVjBMQ0JzWlc1bmRHZ3BYRzVjYmlBZ0lDQWdJR05oYzJVZ0oyeGhkR2x1TVNjNlhHNGdJQ0FnSUNCallYTmxJQ2RpYVc1aGNua25PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiR0YwYVc0eFYzSnBkR1VvZEdocGN5d2djM1J5YVc1bkxDQnZabVp6WlhRc0lHeGxibWQwYUNsY2JseHVJQ0FnSUNBZ1kyRnpaU0FuWW1GelpUWTBKenBjYmlBZ0lDQWdJQ0FnTHk4Z1YyRnlibWx1WnpvZ2JXRjRUR1Z1WjNSb0lHNXZkQ0IwWVd0bGJpQnBiblJ2SUdGalkyOTFiblFnYVc0Z1ltRnpaVFkwVjNKcGRHVmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHSmhjMlUyTkZkeWFYUmxLSFJvYVhNc0lITjBjbWx1Wnl3Z2IyWm1jMlYwTENCc1pXNW5kR2dwWEc1Y2JpQWdJQ0FnSUdOaGMyVWdKM1ZqY3pJbk9seHVJQ0FnSUNBZ1kyRnpaU0FuZFdOekxUSW5PbHh1SUNBZ0lDQWdZMkZ6WlNBbmRYUm1NVFpzWlNjNlhHNGdJQ0FnSUNCallYTmxJQ2QxZEdZdE1UWnNaU2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxWTNNeVYzSnBkR1VvZEdocGN5d2djM1J5YVc1bkxDQnZabVp6WlhRc0lHeGxibWQwYUNsY2JseHVJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ2FXWWdLR3h2ZDJWeVpXUkRZWE5sS1NCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZFZibXR1YjNkdUlHVnVZMjlrYVc1bk9pQW5JQ3NnWlc1amIyUnBibWNwWEc0Z0lDQWdJQ0FnSUdWdVkyOWthVzVuSUQwZ0tDY25JQ3NnWlc1amIyUnBibWNwTG5SdlRHOTNaWEpEWVhObEtDbGNiaUFnSUNBZ0lDQWdiRzkzWlhKbFpFTmhjMlVnUFNCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkRzlLVTA5T0lEMGdablZ1WTNScGIyNGdkRzlLVTA5T0lDZ3BJSHRjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0IwZVhCbE9pQW5RblZtWm1WeUp5eGNiaUFnSUNCa1lYUmhPaUJCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2gwYUdsekxsOWhjbklnZkh3Z2RHaHBjeXdnTUNsY2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmlZWE5sTmpSVGJHbGpaU0FvWW5WbUxDQnpkR0Z5ZEN3Z1pXNWtLU0I3WEc0Z0lHbG1JQ2h6ZEdGeWRDQTlQVDBnTUNBbUppQmxibVFnUFQwOUlHSjFaaTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1ltRnpaVFkwTG1aeWIyMUNlWFJsUVhKeVlYa29ZblZtS1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJpWVhObE5qUXVabkp2YlVKNWRHVkJjbkpoZVNoaWRXWXVjMnhwWTJVb2MzUmhjblFzSUdWdVpDa3BYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnZFhSbU9GTnNhV05sSUNoaWRXWXNJSE4wWVhKMExDQmxibVFwSUh0Y2JpQWdaVzVrSUQwZ1RXRjBhQzV0YVc0b1luVm1MbXhsYm1kMGFDd2daVzVrS1Z4dUlDQjJZWElnY21WeklEMGdXMTFjYmx4dUlDQjJZWElnYVNBOUlITjBZWEowWEc0Z0lIZG9hV3hsSUNocElEd2daVzVrS1NCN1hHNGdJQ0FnZG1GeUlHWnBjbk4wUW5sMFpTQTlJR0oxWmx0cFhWeHVJQ0FnSUhaaGNpQmpiMlJsVUc5cGJuUWdQU0J1ZFd4c1hHNGdJQ0FnZG1GeUlHSjVkR1Z6VUdWeVUyVnhkV1Z1WTJVZ1BTQW9abWx5YzNSQ2VYUmxJRDRnTUhoRlJpa2dQeUEwWEc0Z0lDQWdJQ0E2SUNobWFYSnpkRUo1ZEdVZ1BpQXdlRVJHS1NBL0lETmNiaUFnSUNBZ0lEb2dLR1pwY25OMFFubDBaU0ErSURCNFFrWXBJRDhnTWx4dUlDQWdJQ0FnT2lBeFhHNWNiaUFnSUNCcFppQW9hU0FySUdKNWRHVnpVR1Z5VTJWeGRXVnVZMlVnUEQwZ1pXNWtLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2MyVmpiMjVrUW5sMFpTd2dkR2hwY21SQ2VYUmxMQ0JtYjNWeWRHaENlWFJsTENCMFpXMXdRMjlrWlZCdmFXNTBYRzVjYmlBZ0lDQWdJSE4zYVhSamFDQW9ZbmwwWlhOUVpYSlRaWEYxWlc1alpTa2dlMXh1SUNBZ0lDQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHWnBjbk4wUW5sMFpTQThJREI0T0RBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdlpHVlFiMmx1ZENBOUlHWnBjbk4wUW5sMFpWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQWdJQ0FnYzJWamIyNWtRbmwwWlNBOUlHSjFabHRwSUNzZ01WMWNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0tITmxZMjl1WkVKNWRHVWdKaUF3ZUVNd0tTQTlQVDBnTUhnNE1Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHVnRjRU52WkdWUWIybHVkQ0E5SUNobWFYSnpkRUo1ZEdVZ0ppQXdlREZHS1NBOFBDQXdlRFlnZkNBb2MyVmpiMjVrUW5sMFpTQW1JREI0TTBZcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHVnRjRU52WkdWUWIybHVkQ0ErSURCNE4wWXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDBnZEdWdGNFTnZaR1ZRYjJsdWRGeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNBZ0lDQWdjMlZqYjI1a1FubDBaU0E5SUdKMVpsdHBJQ3NnTVYxY2JpQWdJQ0FnSUNBZ0lDQjBhR2x5WkVKNWRHVWdQU0JpZFdaYmFTQXJJREpkWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ2h6WldOdmJtUkNlWFJsSUNZZ01IaERNQ2tnUFQwOUlEQjRPREFnSmlZZ0tIUm9hWEprUW5sMFpTQW1JREI0UXpBcElEMDlQU0F3ZURnd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMFpXMXdRMjlrWlZCdmFXNTBJRDBnS0dacGNuTjBRbmwwWlNBbUlEQjRSaWtnUER3Z01IaERJSHdnS0hObFkyOXVaRUo1ZEdVZ0ppQXdlRE5HS1NBOFBDQXdlRFlnZkNBb2RHaHBjbVJDZVhSbElDWWdNSGd6UmlsY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMFpXMXdRMjlrWlZCdmFXNTBJRDRnTUhnM1JrWWdKaVlnS0hSbGJYQkRiMlJsVUc5cGJuUWdQQ0F3ZUVRNE1EQWdmSHdnZEdWdGNFTnZaR1ZRYjJsdWRDQStJREI0UkVaR1Jpa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDBnZEdWdGNFTnZaR1ZRYjJsdWRGeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmpZWE5sSURRNlhHNGdJQ0FnSUNBZ0lDQWdjMlZqYjI1a1FubDBaU0E5SUdKMVpsdHBJQ3NnTVYxY2JpQWdJQ0FnSUNBZ0lDQjBhR2x5WkVKNWRHVWdQU0JpZFdaYmFTQXJJREpkWEc0Z0lDQWdJQ0FnSUNBZ1ptOTFjblJvUW5sMFpTQTlJR0oxWmx0cElDc2dNMTFjYmlBZ0lDQWdJQ0FnSUNCcFppQW9LSE5sWTI5dVpFSjVkR1VnSmlBd2VFTXdLU0E5UFQwZ01IZzRNQ0FtSmlBb2RHaHBjbVJDZVhSbElDWWdNSGhETUNrZ1BUMDlJREI0T0RBZ0ppWWdLR1p2ZFhKMGFFSjVkR1VnSmlBd2VFTXdLU0E5UFQwZ01IZzRNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR1Z0Y0VOdlpHVlFiMmx1ZENBOUlDaG1hWEp6ZEVKNWRHVWdKaUF3ZUVZcElEdzhJREI0TVRJZ2ZDQW9jMlZqYjI1a1FubDBaU0FtSURCNE0wWXBJRHc4SURCNFF5QjhJQ2gwYUdseVpFSjVkR1VnSmlBd2VETkdLU0E4UENBd2VEWWdmQ0FvWm05MWNuUm9RbmwwWlNBbUlEQjRNMFlwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdWdGNFTnZaR1ZRYjJsdWRDQStJREI0UmtaR1JpQW1KaUIwWlcxd1EyOWtaVkJ2YVc1MElEd2dNSGd4TVRBd01EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDBnZEdWdGNFTnZaR1ZRYjJsdWRGeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9ZMjlrWlZCdmFXNTBJRDA5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0F2THlCM1pTQmthV1FnYm05MElHZGxibVZ5WVhSbElHRWdkbUZzYVdRZ1kyOWtaVkJ2YVc1MElITnZJR2x1YzJWeWRDQmhYRzRnSUNBZ0lDQXZMeUJ5WlhCc1lXTmxiV1Z1ZENCamFHRnlJQ2hWSzBaR1JrUXBJR0Z1WkNCaFpIWmhibU5sSUc5dWJIa2dNU0JpZVhSbFhHNGdJQ0FnSUNCamIyUmxVRzlwYm5RZ1BTQXdlRVpHUmtSY2JpQWdJQ0FnSUdKNWRHVnpVR1Z5VTJWeGRXVnVZMlVnUFNBeFhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoamIyUmxVRzlwYm5RZ1BpQXdlRVpHUmtZcElIdGNiaUFnSUNBZ0lDOHZJR1Z1WTI5a1pTQjBieUIxZEdZeE5pQW9jM1Z5Y205bllYUmxJSEJoYVhJZ1pHRnVZMlVwWEc0Z0lDQWdJQ0JqYjJSbFVHOXBiblFnTFQwZ01IZ3hNREF3TUZ4dUlDQWdJQ0FnY21WekxuQjFjMmdvWTI5a1pWQnZhVzUwSUQ0K1BpQXhNQ0FtSURCNE0wWkdJSHdnTUhoRU9EQXdLVnh1SUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDBnTUhoRVF6QXdJSHdnWTI5a1pWQnZhVzUwSUNZZ01IZ3pSa1pjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWE11Y0hWemFDaGpiMlJsVUc5cGJuUXBYRzRnSUNBZ2FTQXJQU0JpZVhSbGMxQmxjbE5sY1hWbGJtTmxYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdaR1ZqYjJSbFEyOWtaVkJ2YVc1MGMwRnljbUY1S0hKbGN5bGNibjFjYmx4dUx5OGdRbUZ6WldRZ2IyNGdhSFIwY0RvdkwzTjBZV05yYjNabGNtWnNiM2N1WTI5dEwyRXZNakkzTkRjeU56SXZOamd3TnpReUxDQjBhR1VnWW5KdmQzTmxjaUIzYVhSb1hHNHZMeUIwYUdVZ2JHOTNaWE4wSUd4cGJXbDBJR2x6SUVOb2NtOXRaU3dnZDJsMGFDQXdlREV3TURBd0lHRnlaM011WEc0dkx5QlhaU0JuYnlBeElHMWhaMjVwZEhWa1pTQnNaWE56TENCbWIzSWdjMkZtWlhSNVhHNTJZWElnVFVGWVgwRlNSMVZOUlU1VVUxOU1SVTVIVkVnZ1BTQXdlREV3TURCY2JseHVablZ1WTNScGIyNGdaR1ZqYjJSbFEyOWtaVkJ2YVc1MGMwRnljbUY1SUNoamIyUmxVRzlwYm5SektTQjdYRzRnSUhaaGNpQnNaVzRnUFNCamIyUmxVRzlwYm5SekxteGxibWQwYUZ4dUlDQnBaaUFvYkdWdUlEdzlJRTFCV0Y5QlVrZFZUVVZPVkZOZlRFVk9SMVJJS1NCN1hHNGdJQ0FnY21WMGRYSnVJRk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1V1WVhCd2JIa29VM1J5YVc1bkxDQmpiMlJsVUc5cGJuUnpLU0F2THlCaGRtOXBaQ0JsZUhSeVlTQnpiR2xqWlNncFhHNGdJSDFjYmx4dUlDQXZMeUJFWldOdlpHVWdhVzRnWTJoMWJtdHpJSFJ2SUdGMmIybGtJRndpWTJGc2JDQnpkR0ZqYXlCemFYcGxJR1Y0WTJWbFpHVmtYQ0l1WEc0Z0lIWmhjaUJ5WlhNZ1BTQW5KMXh1SUNCMllYSWdhU0E5SURCY2JpQWdkMmhwYkdVZ0tHa2dQQ0JzWlc0cElIdGNiaUFnSUNCeVpYTWdLejBnVTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlM1aGNIQnNlU2hjYmlBZ0lDQWdJRk4wY21sdVp5eGNiaUFnSUNBZ0lHTnZaR1ZRYjJsdWRITXVjMnhwWTJVb2FTd2dhU0FyUFNCTlFWaGZRVkpIVlUxRlRsUlRYMHhGVGtkVVNDbGNiaUFnSUNBcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhKbGMxeHVmVnh1WEc1bWRXNWpkR2x2YmlCaGMyTnBhVk5zYVdObElDaGlkV1lzSUhOMFlYSjBMQ0JsYm1RcElIdGNiaUFnZG1GeUlISmxkQ0E5SUNjblhHNGdJR1Z1WkNBOUlFMWhkR2d1YldsdUtHSjFaaTVzWlc1bmRHZ3NJR1Z1WkNsY2JseHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2MzUmhjblE3SUdrZ1BDQmxibVE3SUNzcmFTa2dlMXh1SUNBZ0lISmxkQ0FyUFNCVGRISnBibWN1Wm5KdmJVTm9ZWEpEYjJSbEtHSjFabHRwWFNBbUlEQjROMFlwWEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsZEZ4dWZWeHVYRzVtZFc1amRHbHZiaUJzWVhScGJqRlRiR2xqWlNBb1luVm1MQ0J6ZEdGeWRDd2daVzVrS1NCN1hHNGdJSFpoY2lCeVpYUWdQU0FuSjF4dUlDQmxibVFnUFNCTllYUm9MbTFwYmloaWRXWXViR1Z1WjNSb0xDQmxibVFwWEc1Y2JpQWdabTl5SUNoMllYSWdhU0E5SUhOMFlYSjBPeUJwSUR3Z1pXNWtPeUFySzJrcElIdGNiaUFnSUNCeVpYUWdLejBnVTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNoaWRXWmJhVjBwWEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsZEZ4dWZWeHVYRzVtZFc1amRHbHZiaUJvWlhoVGJHbGpaU0FvWW5WbUxDQnpkR0Z5ZEN3Z1pXNWtLU0I3WEc0Z0lIWmhjaUJzWlc0Z1BTQmlkV1l1YkdWdVozUm9YRzVjYmlBZ2FXWWdLQ0Z6ZEdGeWRDQjhmQ0J6ZEdGeWRDQThJREFwSUhOMFlYSjBJRDBnTUZ4dUlDQnBaaUFvSVdWdVpDQjhmQ0JsYm1RZ1BDQXdJSHg4SUdWdVpDQStJR3hsYmlrZ1pXNWtJRDBnYkdWdVhHNWNiaUFnZG1GeUlHOTFkQ0E5SUNjblhHNGdJR1p2Y2lBb2RtRnlJR2tnUFNCemRHRnlkRHNnYVNBOElHVnVaRHNnS3l0cEtTQjdYRzRnSUNBZ2IzVjBJQ3M5SUhSdlNHVjRLR0oxWmx0cFhTbGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IzVjBYRzU5WEc1Y2JtWjFibU4wYVc5dUlIVjBaakUyYkdWVGJHbGpaU0FvWW5WbUxDQnpkR0Z5ZEN3Z1pXNWtLU0I3WEc0Z0lIWmhjaUJpZVhSbGN5QTlJR0oxWmk1emJHbGpaU2h6ZEdGeWRDd2daVzVrS1Z4dUlDQjJZWElnY21WeklEMGdKeWRjYmlBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQmllWFJsY3k1c1pXNW5kR2c3SUdrZ0t6MGdNaWtnZTF4dUlDQWdJSEpsY3lBclBTQlRkSEpwYm1jdVpuSnZiVU5vWVhKRGIyUmxLR0o1ZEdWelcybGRJQ3NnWW5sMFpYTmJhU0FySURGZElDb2dNalUyS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzV6YkdsalpTQTlJR1oxYm1OMGFXOXVJSE5zYVdObElDaHpkR0Z5ZEN3Z1pXNWtLU0I3WEc0Z0lIWmhjaUJzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRnh1SUNCemRHRnlkQ0E5SUg1K2MzUmhjblJjYmlBZ1pXNWtJRDBnWlc1a0lEMDlQU0IxYm1SbFptbHVaV1FnUHlCc1pXNGdPaUIrZm1WdVpGeHVYRzRnSUdsbUlDaHpkR0Z5ZENBOElEQXBJSHRjYmlBZ0lDQnpkR0Z5ZENBclBTQnNaVzVjYmlBZ0lDQnBaaUFvYzNSaGNuUWdQQ0F3S1NCemRHRnlkQ0E5SURCY2JpQWdmU0JsYkhObElHbG1JQ2h6ZEdGeWRDQStJR3hsYmlrZ2UxeHVJQ0FnSUhOMFlYSjBJRDBnYkdWdVhHNGdJSDFjYmx4dUlDQnBaaUFvWlc1a0lEd2dNQ2tnZTF4dUlDQWdJR1Z1WkNBclBTQnNaVzVjYmlBZ0lDQnBaaUFvWlc1a0lEd2dNQ2tnWlc1a0lEMGdNRnh1SUNCOUlHVnNjMlVnYVdZZ0tHVnVaQ0ErSUd4bGJpa2dlMXh1SUNBZ0lHVnVaQ0E5SUd4bGJseHVJQ0I5WEc1Y2JpQWdhV1lnS0dWdVpDQThJSE4wWVhKMEtTQmxibVFnUFNCemRHRnlkRnh1WEc0Z0lIWmhjaUJ1WlhkQ2RXWmNiaUFnYVdZZ0tFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVUtTQjdYRzRnSUNBZ2JtVjNRblZtSUQwZ2RHaHBjeTV6ZFdKaGNuSmhlU2h6ZEdGeWRDd2daVzVrS1Z4dUlDQWdJRzVsZDBKMVppNWZYM0J5YjNSdlgxOGdQU0JDZFdabVpYSXVjSEp2ZEc5MGVYQmxYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdkbUZ5SUhOc2FXTmxUR1Z1SUQwZ1pXNWtJQzBnYzNSaGNuUmNiaUFnSUNCdVpYZENkV1lnUFNCdVpYY2dRblZtWm1WeUtITnNhV05sVEdWdUxDQjFibVJsWm1sdVpXUXBYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQnpiR2xqWlV4bGJqc2dLeXRwS1NCN1hHNGdJQ0FnSUNCdVpYZENkV1piYVYwZ1BTQjBhR2x6VzJrZ0t5QnpkR0Z5ZEYxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYm1WM1FuVm1YRzU5WEc1Y2JpOHFYRzRnS2lCT1pXVmtJSFJ2SUcxaGEyVWdjM1Z5WlNCMGFHRjBJR0oxWm1abGNpQnBjMjRuZENCMGNubHBibWNnZEc4Z2QzSnBkR1VnYjNWMElHOW1JR0p2ZFc1a2N5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1kyaGxZMnRQWm1aelpYUWdLRzltWm5ObGRDd2daWGgwTENCc1pXNW5kR2dwSUh0Y2JpQWdhV1lnS0NodlptWnpaWFFnSlNBeEtTQWhQVDBnTUNCOGZDQnZabVp6WlhRZ1BDQXdLU0IwYUhKdmR5QnVaWGNnVW1GdVoyVkZjbkp2Y2lnbmIyWm1jMlYwSUdseklHNXZkQ0IxYVc1MEp5bGNiaUFnYVdZZ0tHOW1abk5sZENBcklHVjRkQ0ErSUd4bGJtZDBhQ2tnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb0oxUnllV2x1WnlCMGJ5QmhZMk5sYzNNZ1ltVjViMjVrSUdKMVptWmxjaUJzWlc1bmRHZ25LVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JWU1c1MFRFVWdQU0JtZFc1amRHbHZiaUJ5WldGa1ZVbHVkRXhGSUNodlptWnpaWFFzSUdKNWRHVk1aVzVuZEdnc0lHNXZRWE56WlhKMEtTQjdYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdZbmwwWlV4bGJtZDBhQ0E5SUdKNWRHVk1aVzVuZEdnZ2ZDQXdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJR05vWldOclQyWm1jMlYwS0c5bVpuTmxkQ3dnWW5sMFpVeGxibWQwYUN3Z2RHaHBjeTVzWlc1bmRHZ3BYRzVjYmlBZ2RtRnlJSFpoYkNBOUlIUm9hWE5iYjJabWMyVjBYVnh1SUNCMllYSWdiWFZzSUQwZ01WeHVJQ0IyWVhJZ2FTQTlJREJjYmlBZ2QyaHBiR1VnS0NzcmFTQThJR0o1ZEdWTVpXNW5kR2dnSmlZZ0tHMTFiQ0FxUFNBd2VERXdNQ2twSUh0Y2JpQWdJQ0IyWVd3Z0t6MGdkR2hwYzF0dlptWnpaWFFnS3lCcFhTQXFJRzExYkZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhaaGJGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZTVzUwUWtVZ1BTQm1kVzVqZEdsdmJpQnlaV0ZrVlVsdWRFSkZJQ2h2Wm1aelpYUXNJR0o1ZEdWTVpXNW5kR2dzSUc1dlFYTnpaWEowS1NCN1hHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ1lubDBaVXhsYm1kMGFDQTlJR0o1ZEdWTVpXNW5kR2dnZkNBd1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElIdGNiaUFnSUNCamFHVmphMDltWm5ObGRDaHZabVp6WlhRc0lHSjVkR1ZNWlc1bmRHZ3NJSFJvYVhNdWJHVnVaM1JvS1Z4dUlDQjlYRzVjYmlBZ2RtRnlJSFpoYkNBOUlIUm9hWE5iYjJabWMyVjBJQ3NnTFMxaWVYUmxUR1Z1WjNSb1hWeHVJQ0IyWVhJZ2JYVnNJRDBnTVZ4dUlDQjNhR2xzWlNBb1lubDBaVXhsYm1kMGFDQStJREFnSmlZZ0tHMTFiQ0FxUFNBd2VERXdNQ2twSUh0Y2JpQWdJQ0IyWVd3Z0t6MGdkR2hwYzF0dlptWnpaWFFnS3lBdExXSjVkR1ZNWlc1bmRHaGRJQ29nYlhWc1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2RtRnNYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRlZKYm5RNElEMGdablZ1WTNScGIyNGdjbVZoWkZWSmJuUTRJQ2h2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUdOb1pXTnJUMlptYzJWMEtHOW1abk5sZEN3Z01Td2dkR2hwY3k1c1pXNW5kR2dwWEc0Z0lISmxkSFZ5YmlCMGFHbHpXMjltWm5ObGRGMWNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1eVpXRmtWVWx1ZERFMlRFVWdQU0JtZFc1amRHbHZiaUJ5WldGa1ZVbHVkREUyVEVVZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0F5TENCMGFHbHpMbXhsYm1kMGFDbGNiaUFnY21WMGRYSnVJSFJvYVhOYmIyWm1jMlYwWFNCOElDaDBhR2x6VzI5bVpuTmxkQ0FySURGZElEdzhJRGdwWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZWSmJuUXhOa0pGSUQwZ1puVnVZM1JwYjI0Z2NtVmhaRlZKYm5ReE5rSkZJQ2h2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUdOb1pXTnJUMlptYzJWMEtHOW1abk5sZEN3Z01pd2dkR2hwY3k1c1pXNW5kR2dwWEc0Z0lISmxkSFZ5YmlBb2RHaHBjMXR2Wm1aelpYUmRJRHc4SURncElId2dkR2hwYzF0dlptWnpaWFFnS3lBeFhWeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZTVzUwTXpKTVJTQTlJR1oxYm1OMGFXOXVJSEpsWVdSVlNXNTBNekpNUlNBb2IyWm1jMlYwTENCdWIwRnpjMlZ5ZENrZ2UxeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQmphR1ZqYTA5bVpuTmxkQ2h2Wm1aelpYUXNJRFFzSUhSb2FYTXViR1Z1WjNSb0tWeHVYRzRnSUhKbGRIVnliaUFvS0hSb2FYTmJiMlptYzJWMFhTa2dmRnh1SUNBZ0lDQWdLSFJvYVhOYmIyWm1jMlYwSUNzZ01WMGdQRHdnT0NrZ2ZGeHVJQ0FnSUNBZ0tIUm9hWE5iYjJabWMyVjBJQ3NnTWwwZ1BEd2dNVFlwS1NBclhHNGdJQ0FnSUNBb2RHaHBjMXR2Wm1aelpYUWdLeUF6WFNBcUlEQjRNVEF3TURBd01DbGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1eVpXRmtWVWx1ZERNeVFrVWdQU0JtZFc1amRHbHZiaUJ5WldGa1ZVbHVkRE15UWtVZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0EwTENCMGFHbHpMbXhsYm1kMGFDbGNibHh1SUNCeVpYUjFjbTRnS0hSb2FYTmJiMlptYzJWMFhTQXFJREI0TVRBd01EQXdNQ2tnSzF4dUlDQWdJQ2dvZEdocGMxdHZabVp6WlhRZ0t5QXhYU0E4UENBeE5pa2dmRnh1SUNBZ0lDaDBhR2x6VzI5bVpuTmxkQ0FySURKZElEdzhJRGdwSUh4Y2JpQWdJQ0IwYUdselcyOW1abk5sZENBcklETmRLVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JKYm5STVJTQTlJR1oxYm1OMGFXOXVJSEpsWVdSSmJuUk1SU0FvYjJabWMyVjBMQ0JpZVhSbFRHVnVaM1JvTENCdWIwRnpjMlZ5ZENrZ2UxeHVJQ0J2Wm1aelpYUWdQU0J2Wm1aelpYUWdmQ0F3WEc0Z0lHSjVkR1ZNWlc1bmRHZ2dQU0JpZVhSbFRHVnVaM1JvSUh3Z01GeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQmphR1ZqYTA5bVpuTmxkQ2h2Wm1aelpYUXNJR0o1ZEdWTVpXNW5kR2dzSUhSb2FYTXViR1Z1WjNSb0tWeHVYRzRnSUhaaGNpQjJZV3dnUFNCMGFHbHpXMjltWm5ObGRGMWNiaUFnZG1GeUlHMTFiQ0E5SURGY2JpQWdkbUZ5SUdrZ1BTQXdYRzRnSUhkb2FXeGxJQ2dySzJrZ1BDQmllWFJsVEdWdVozUm9JQ1ltSUNodGRXd2dLajBnTUhneE1EQXBLU0I3WEc0Z0lDQWdkbUZzSUNzOUlIUm9hWE5iYjJabWMyVjBJQ3NnYVYwZ0tpQnRkV3hjYmlBZ2ZWeHVJQ0J0ZFd3Z0tqMGdNSGc0TUZ4dVhHNGdJR2xtSUNoMllXd2dQajBnYlhWc0tTQjJZV3dnTFQwZ1RXRjBhQzV3YjNjb01pd2dPQ0FxSUdKNWRHVk1aVzVuZEdncFhHNWNiaUFnY21WMGRYSnVJSFpoYkZ4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSSmJuUkNSU0E5SUdaMWJtTjBhVzl1SUhKbFlXUkpiblJDUlNBb2IyWm1jMlYwTENCaWVYUmxUR1Z1WjNSb0xDQnViMEZ6YzJWeWRDa2dlMXh1SUNCdlptWnpaWFFnUFNCdlptWnpaWFFnZkNBd1hHNGdJR0o1ZEdWTVpXNW5kR2dnUFNCaWVYUmxUR1Z1WjNSb0lId2dNRnh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0JqYUdWamEwOW1abk5sZENodlptWnpaWFFzSUdKNWRHVk1aVzVuZEdnc0lIUm9hWE11YkdWdVozUm9LVnh1WEc0Z0lIWmhjaUJwSUQwZ1lubDBaVXhsYm1kMGFGeHVJQ0IyWVhJZ2JYVnNJRDBnTVZ4dUlDQjJZWElnZG1Gc0lEMGdkR2hwYzF0dlptWnpaWFFnS3lBdExXbGRYRzRnSUhkb2FXeGxJQ2hwSUQ0Z01DQW1KaUFvYlhWc0lDbzlJREI0TVRBd0tTa2dlMXh1SUNBZ0lIWmhiQ0FyUFNCMGFHbHpXMjltWm5ObGRDQXJJQzB0YVYwZ0tpQnRkV3hjYmlBZ2ZWeHVJQ0J0ZFd3Z0tqMGdNSGc0TUZ4dVhHNGdJR2xtSUNoMllXd2dQajBnYlhWc0tTQjJZV3dnTFQwZ1RXRjBhQzV3YjNjb01pd2dPQ0FxSUdKNWRHVk1aVzVuZEdncFhHNWNiaUFnY21WMGRYSnVJSFpoYkZ4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSSmJuUTRJRDBnWm5WdVkzUnBiMjRnY21WaFpFbHVkRGdnS0c5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRQWm1aelpYUW9iMlptYzJWMExDQXhMQ0IwYUdsekxteGxibWQwYUNsY2JpQWdhV1lnS0NFb2RHaHBjMXR2Wm1aelpYUmRJQ1lnTUhnNE1Da3BJSEpsZEhWeWJpQW9kR2hwYzF0dlptWnpaWFJkS1Z4dUlDQnlaWFIxY200Z0tDZ3dlR1ptSUMwZ2RHaHBjMXR2Wm1aelpYUmRJQ3NnTVNrZ0tpQXRNU2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXlaV0ZrU1c1ME1UWk1SU0E5SUdaMWJtTjBhVzl1SUhKbFlXUkpiblF4Tmt4RklDaHZabVp6WlhRc0lHNXZRWE56WlhKMEtTQjdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJR05vWldOclQyWm1jMlYwS0c5bVpuTmxkQ3dnTWl3Z2RHaHBjeTVzWlc1bmRHZ3BYRzRnSUhaaGNpQjJZV3dnUFNCMGFHbHpXMjltWm5ObGRGMGdmQ0FvZEdocGMxdHZabVp6WlhRZ0t5QXhYU0E4UENBNEtWeHVJQ0J5WlhSMWNtNGdLSFpoYkNBbUlEQjRPREF3TUNrZ1B5QjJZV3dnZkNBd2VFWkdSa1l3TURBd0lEb2dkbUZzWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVsdWRERTJRa1VnUFNCbWRXNWpkR2x2YmlCeVpXRmtTVzUwTVRaQ1JTQW9iMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0JqYUdWamEwOW1abk5sZENodlptWnpaWFFzSURJc0lIUm9hWE11YkdWdVozUm9LVnh1SUNCMllYSWdkbUZzSUQwZ2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNCOElDaDBhR2x6VzI5bVpuTmxkRjBnUER3Z09DbGNiaUFnY21WMGRYSnVJQ2gyWVd3Z0ppQXdlRGd3TURBcElEOGdkbUZzSUh3Z01IaEdSa1pHTURBd01DQTZJSFpoYkZ4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSSmJuUXpNa3hGSUQwZ1puVnVZM1JwYjI0Z2NtVmhaRWx1ZERNeVRFVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBMExDQjBhR2x6TG14bGJtZDBhQ2xjYmx4dUlDQnlaWFIxY200Z0tIUm9hWE5iYjJabWMyVjBYU2tnZkZ4dUlDQWdJQ2gwYUdselcyOW1abk5sZENBcklERmRJRHc4SURncElIeGNiaUFnSUNBb2RHaHBjMXR2Wm1aelpYUWdLeUF5WFNBOFBDQXhOaWtnZkZ4dUlDQWdJQ2gwYUdselcyOW1abk5sZENBcklETmRJRHc4SURJMEtWeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkpiblF6TWtKRklEMGdablZ1WTNScGIyNGdjbVZoWkVsdWRETXlRa1VnS0c5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRQWm1aelpYUW9iMlptYzJWMExDQTBMQ0IwYUdsekxteGxibWQwYUNsY2JseHVJQ0J5WlhSMWNtNGdLSFJvYVhOYmIyWm1jMlYwWFNBOFBDQXlOQ2tnZkZ4dUlDQWdJQ2gwYUdselcyOW1abk5sZENBcklERmRJRHc4SURFMktTQjhYRzRnSUNBZ0tIUm9hWE5iYjJabWMyVjBJQ3NnTWwwZ1BEd2dPQ2tnZkZ4dUlDQWdJQ2gwYUdselcyOW1abk5sZENBcklETmRLVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JHYkc5aGRFeEZJRDBnWm5WdVkzUnBiMjRnY21WaFpFWnNiMkYwVEVVZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0EwTENCMGFHbHpMbXhsYm1kMGFDbGNiaUFnY21WMGRYSnVJR2xsWldVM05UUXVjbVZoWkNoMGFHbHpMQ0J2Wm1aelpYUXNJSFJ5ZFdVc0lESXpMQ0EwS1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSR2JHOWhkRUpGSUQwZ1puVnVZM1JwYjI0Z2NtVmhaRVpzYjJGMFFrVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBMExDQjBhR2x6TG14bGJtZDBhQ2xjYmlBZ2NtVjBkWEp1SUdsbFpXVTNOVFF1Y21WaFpDaDBhR2x6TENCdlptWnpaWFFzSUdaaGJITmxMQ0F5TXl3Z05DbGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1eVpXRmtSRzkxWW14bFRFVWdQU0JtZFc1amRHbHZiaUJ5WldGa1JHOTFZbXhsVEVVZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0E0TENCMGFHbHpMbXhsYm1kMGFDbGNiaUFnY21WMGRYSnVJR2xsWldVM05UUXVjbVZoWkNoMGFHbHpMQ0J2Wm1aelpYUXNJSFJ5ZFdVc0lEVXlMQ0E0S1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSRWIzVmliR1ZDUlNBOUlHWjFibU4wYVc5dUlISmxZV1JFYjNWaWJHVkNSU0FvYjJabWMyVjBMQ0J1YjBGemMyVnlkQ2tnZTF4dUlDQnBaaUFvSVc1dlFYTnpaWEowS1NCamFHVmphMDltWm5ObGRDaHZabVp6WlhRc0lEZ3NJSFJvYVhNdWJHVnVaM1JvS1Z4dUlDQnlaWFIxY200Z2FXVmxaVGMxTkM1eVpXRmtLSFJvYVhNc0lHOW1abk5sZEN3Z1ptRnNjMlVzSURVeUxDQTRLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmphR1ZqYTBsdWRDQW9ZblZtTENCMllXeDFaU3dnYjJabWMyVjBMQ0JsZUhRc0lHMWhlQ3dnYldsdUtTQjdYRzRnSUdsbUlDZ2hRblZtWm1WeUxtbHpRblZtWm1WeUtHSjFaaWtwSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0oxd2lZblZtWm1WeVhDSWdZWEpuZFcxbGJuUWdiWFZ6ZENCaVpTQmhJRUoxWm1abGNpQnBibk4wWVc1alpTY3BYRzRnSUdsbUlDaDJZV3gxWlNBK0lHMWhlQ0I4ZkNCMllXeDFaU0E4SUcxcGJpa2dkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvSjF3aWRtRnNkV1ZjSWlCaGNtZDFiV1Z1ZENCcGN5QnZkWFFnYjJZZ1ltOTFibVJ6SnlsY2JpQWdhV1lnS0c5bVpuTmxkQ0FySUdWNGRDQStJR0oxWmk1c1pXNW5kR2dwSUhSb2NtOTNJRzVsZHlCU1lXNW5aVVZ5Y205eUtDZEpibVJsZUNCdmRYUWdiMllnY21GdVoyVW5LVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVlVsdWRFeEZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVlZTVzUwVEVVZ0tIWmhiSFZsTENCdlptWnpaWFFzSUdKNWRHVk1aVzVuZEdnc0lHNXZRWE56WlhKMEtTQjdYRzRnSUhaaGJIVmxJRDBnSzNaaGJIVmxYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdZbmwwWlV4bGJtZDBhQ0E5SUdKNWRHVk1aVzVuZEdnZ2ZDQXdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJSHRjYmlBZ0lDQjJZWElnYldGNFFubDBaWE1nUFNCTllYUm9MbkJ2ZHlneUxDQTRJQ29nWW5sMFpVeGxibWQwYUNrZ0xTQXhYRzRnSUNBZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dZbmwwWlV4bGJtZDBhQ3dnYldGNFFubDBaWE1zSURBcFhHNGdJSDFjYmx4dUlDQjJZWElnYlhWc0lEMGdNVnh1SUNCMllYSWdhU0E5SURCY2JpQWdkR2hwYzF0dlptWnpaWFJkSUQwZ2RtRnNkV1VnSmlBd2VFWkdYRzRnSUhkb2FXeGxJQ2dySzJrZ1BDQmllWFJsVEdWdVozUm9JQ1ltSUNodGRXd2dLajBnTUhneE1EQXBLU0I3WEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lCcFhTQTlJQ2gyWVd4MVpTQXZJRzExYkNrZ0ppQXdlRVpHWEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYjJabWMyVjBJQ3NnWW5sMFpVeGxibWQwYUZ4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZVbHVkRUpGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZWU1c1MFFrVWdLSFpoYkhWbExDQnZabVp6WlhRc0lHSjVkR1ZNWlc1bmRHZ3NJRzV2UVhOelpYSjBLU0I3WEc0Z0lIWmhiSFZsSUQwZ0szWmhiSFZsWEc0Z0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnWW5sMFpVeGxibWQwYUNBOUlHSjVkR1ZNWlc1bmRHZ2dmQ0F3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUh0Y2JpQWdJQ0IyWVhJZ2JXRjRRbmwwWlhNZ1BTQk5ZWFJvTG5CdmR5Z3lMQ0E0SUNvZ1lubDBaVXhsYm1kMGFDa2dMU0F4WEc0Z0lDQWdZMmhsWTJ0SmJuUW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnWW5sMFpVeGxibWQwYUN3Z2JXRjRRbmwwWlhNc0lEQXBYRzRnSUgxY2JseHVJQ0IyWVhJZ2FTQTlJR0o1ZEdWTVpXNW5kR2dnTFNBeFhHNGdJSFpoY2lCdGRXd2dQU0F4WEc0Z0lIUm9hWE5iYjJabWMyVjBJQ3NnYVYwZ1BTQjJZV3gxWlNBbUlEQjRSa1pjYmlBZ2QyaHBiR1VnS0MwdGFTQStQU0F3SUNZbUlDaHRkV3dnS2owZ01IZ3hNREFwS1NCN1hHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QnBYU0E5SUNoMllXeDFaU0F2SUcxMWJDa2dKaUF3ZUVaR1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2IyWm1jMlYwSUNzZ1lubDBaVXhsYm1kMGFGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxWVWx1ZERnZ1BTQm1kVzVqZEdsdmJpQjNjbWwwWlZWSmJuUTRJQ2gyWVd4MVpTd2diMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCMllXeDFaU0E5SUN0MllXeDFaVnh1SUNCdlptWnpaWFFnUFNCdlptWnpaWFFnZkNBd1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElHTm9aV05yU1c1MEtIUm9hWE1zSUhaaGJIVmxMQ0J2Wm1aelpYUXNJREVzSURCNFptWXNJREFwWEc0Z0lHbG1JQ2doUW5WbVptVnlMbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFFwSUhaaGJIVmxJRDBnVFdGMGFDNW1iRzl2Y2loMllXeDFaU2xjYmlBZ2RHaHBjMXR2Wm1aelpYUmRJRDBnS0haaGJIVmxJQ1lnTUhobVppbGNiaUFnY21WMGRYSnVJRzltWm5ObGRDQXJJREZjYm4xY2JseHVablZ1WTNScGIyNGdiMkpxWldOMFYzSnBkR1ZWU1c1ME1UWWdLR0oxWml3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnYkdsMGRHeGxSVzVrYVdGdUtTQjdYRzRnSUdsbUlDaDJZV3gxWlNBOElEQXBJSFpoYkhWbElEMGdNSGhtWm1abUlDc2dkbUZzZFdVZ0t5QXhYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdMQ0JxSUQwZ1RXRjBhQzV0YVc0b1luVm1MbXhsYm1kMGFDQXRJRzltWm5ObGRDd2dNaWs3SUdrZ1BDQnFPeUFySzJrcElIdGNiaUFnSUNCaWRXWmJiMlptYzJWMElDc2dhVjBnUFNBb2RtRnNkV1VnSmlBb01IaG1aaUE4UENBb09DQXFJQ2hzYVhSMGJHVkZibVJwWVc0Z1B5QnBJRG9nTVNBdElHa3BLU2twSUQ0K1BseHVJQ0FnSUNBZ0tHeHBkSFJzWlVWdVpHbGhiaUEvSUdrZ09pQXhJQzBnYVNrZ0tpQTRYRzRnSUgxY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWVkpiblF4Tmt4RklEMGdablZ1WTNScGIyNGdkM0pwZEdWVlNXNTBNVFpNUlNBb2RtRnNkV1VzSUc5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdkbUZzZFdVZ1BTQXJkbUZzZFdWY2JpQWdiMlptYzJWMElEMGdiMlptYzJWMElId2dNRnh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0JqYUdWamEwbHVkQ2gwYUdsekxDQjJZV3gxWlN3Z2IyWm1jMlYwTENBeUxDQXdlR1ptWm1Zc0lEQXBYRzRnSUdsbUlDaENkV1ptWlhJdVZGbFFSVVJmUVZKU1FWbGZVMVZRVUU5U1ZDa2dlMXh1SUNBZ0lIUm9hWE5iYjJabWMyVjBYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOUlDaDJZV3gxWlNBK1BqNGdPQ2xjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J2WW1wbFkzUlhjbWwwWlZWSmJuUXhOaWgwYUdsekxDQjJZV3gxWlN3Z2IyWm1jMlYwTENCMGNuVmxLVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnZabVp6WlhRZ0t5QXlYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZWU1c1ME1UWkNSU0E5SUdaMWJtTjBhVzl1SUhkeWFYUmxWVWx1ZERFMlFrVWdLSFpoYkhWbExDQnZabVp6WlhRc0lHNXZRWE56WlhKMEtTQjdYRzRnSUhaaGJIVmxJRDBnSzNaaGJIVmxYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dNaXdnTUhobVptWm1MQ0F3S1Z4dUlDQnBaaUFvUW5WbVptVnlMbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFFwSUh0Y2JpQWdJQ0IwYUdselcyOW1abk5sZEYwZ1BTQW9kbUZzZFdVZ1BqNCtJRGdwWEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lBeFhTQTlJQ2gyWVd4MVpTQW1JREI0Wm1ZcFhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2IySnFaV04wVjNKcGRHVlZTVzUwTVRZb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dabUZzYzJVcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5bVpuTmxkQ0FySURKY2JuMWNibHh1Wm5WdVkzUnBiMjRnYjJKcVpXTjBWM0pwZEdWVlNXNTBNeklnS0dKMVppd2dkbUZzZFdVc0lHOW1abk5sZEN3Z2JHbDBkR3hsUlc1a2FXRnVLU0I3WEc0Z0lHbG1JQ2gyWVd4MVpTQThJREFwSUhaaGJIVmxJRDBnTUhobVptWm1abVptWmlBcklIWmhiSFZsSUNzZ01WeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2dhaUE5SUUxaGRHZ3ViV2x1S0dKMVppNXNaVzVuZEdnZ0xTQnZabVp6WlhRc0lEUXBPeUJwSUR3Z2Fqc2dLeXRwS1NCN1hHNGdJQ0FnWW5WbVcyOW1abk5sZENBcklHbGRJRDBnS0haaGJIVmxJRDQrUGlBb2JHbDBkR3hsUlc1a2FXRnVJRDhnYVNBNklETWdMU0JwS1NBcUlEZ3BJQ1lnTUhobVpseHVJQ0I5WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVlNXNTBNekpNUlNBOUlHWjFibU4wYVc5dUlIZHlhWFJsVlVsdWRETXlURVVnS0haaGJIVmxMQ0J2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lIWmhiSFZsSUQwZ0szWmhiSFZsWEc0Z0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0SmJuUW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnTkN3Z01IaG1abVptWm1abVppd2dNQ2xjYmlBZ2FXWWdLRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVLU0I3WEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lBelhTQTlJQ2gyWVd4MVpTQStQajRnTWpRcFhHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXlYU0E5SUNoMllXeDFaU0ErUGo0Z01UWXBYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOUlDaDJZV3gxWlNBK1BqNGdPQ2xjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkRjBnUFNBb2RtRnNkV1VnSmlBd2VHWm1LVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzlpYW1WamRGZHlhWFJsVlVsdWRETXlLSFJvYVhNc0lIWmhiSFZsTENCdlptWnpaWFFzSUhSeWRXVXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklEUmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVlZKYm5Rek1rSkZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVlZTVzUwTXpKQ1JTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnZG1Gc2RXVWdQU0FyZG1Gc2RXVmNiaUFnYjJabWMyVjBJRDBnYjJabWMyVjBJSHdnTUZ4dUlDQnBaaUFvSVc1dlFYTnpaWEowS1NCamFHVmphMGx1ZENoMGFHbHpMQ0IyWVd4MVpTd2diMlptYzJWMExDQTBMQ0F3ZUdabVptWm1abVptTENBd0tWeHVJQ0JwWmlBb1FuVm1abVZ5TGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRcElIdGNiaUFnSUNCMGFHbHpXMjltWm5ObGRGMGdQU0FvZG1Gc2RXVWdQajQrSURJMEtWeHVJQ0FnSUhSb2FYTmJiMlptYzJWMElDc2dNVjBnUFNBb2RtRnNkV1VnUGo0K0lERTJLVnh1SUNBZ0lIUm9hWE5iYjJabWMyVjBJQ3NnTWwwZ1BTQW9kbUZzZFdVZ1BqNCtJRGdwWEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lBelhTQTlJQ2gyWVd4MVpTQW1JREI0Wm1ZcFhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2IySnFaV04wVjNKcGRHVlZTVzUwTXpJb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dabUZzYzJVcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5bVpuTmxkQ0FySURSY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVbHVkRXhGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZKYm5STVJTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2RtRnNkV1VnUFNBcmRtRnNkV1ZjYmlBZ2IyWm1jMlYwSUQwZ2IyWm1jMlYwSUh3Z01GeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQjdYRzRnSUNBZ2RtRnlJR3hwYldsMElEMGdUV0YwYUM1d2IzY29NaXdnT0NBcUlHSjVkR1ZNWlc1bmRHZ2dMU0F4S1Z4dVhHNGdJQ0FnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2diR2x0YVhRZ0xTQXhMQ0F0YkdsdGFYUXBYRzRnSUgxY2JseHVJQ0IyWVhJZ2FTQTlJREJjYmlBZ2RtRnlJRzExYkNBOUlERmNiaUFnZG1GeUlITjFZaUE5SURCY2JpQWdkR2hwYzF0dlptWnpaWFJkSUQwZ2RtRnNkV1VnSmlBd2VFWkdYRzRnSUhkb2FXeGxJQ2dySzJrZ1BDQmllWFJsVEdWdVozUm9JQ1ltSUNodGRXd2dLajBnTUhneE1EQXBLU0I3WEc0Z0lDQWdhV1lnS0haaGJIVmxJRHdnTUNBbUppQnpkV0lnUFQwOUlEQWdKaVlnZEdocGMxdHZabVp6WlhRZ0t5QnBJQzBnTVYwZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUhOMVlpQTlJREZjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUJwWFNBOUlDZ29kbUZzZFdVZ0x5QnRkV3dwSUQ0K0lEQXBJQzBnYzNWaUlDWWdNSGhHUmx4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUc5bVpuTmxkQ0FySUdKNWRHVk1aVzVuZEdoY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVbHVkRUpGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZKYm5SQ1JTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2RtRnNkV1VnUFNBcmRtRnNkV1ZjYmlBZ2IyWm1jMlYwSUQwZ2IyWm1jMlYwSUh3Z01GeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQjdYRzRnSUNBZ2RtRnlJR3hwYldsMElEMGdUV0YwYUM1d2IzY29NaXdnT0NBcUlHSjVkR1ZNWlc1bmRHZ2dMU0F4S1Z4dVhHNGdJQ0FnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2diR2x0YVhRZ0xTQXhMQ0F0YkdsdGFYUXBYRzRnSUgxY2JseHVJQ0IyWVhJZ2FTQTlJR0o1ZEdWTVpXNW5kR2dnTFNBeFhHNGdJSFpoY2lCdGRXd2dQU0F4WEc0Z0lIWmhjaUJ6ZFdJZ1BTQXdYRzRnSUhSb2FYTmJiMlptYzJWMElDc2dhVjBnUFNCMllXeDFaU0FtSURCNFJrWmNiaUFnZDJocGJHVWdLQzB0YVNBK1BTQXdJQ1ltSUNodGRXd2dLajBnTUhneE1EQXBLU0I3WEc0Z0lDQWdhV1lnS0haaGJIVmxJRHdnTUNBbUppQnpkV0lnUFQwOUlEQWdKaVlnZEdocGMxdHZabVp6WlhRZ0t5QnBJQ3NnTVYwZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUhOMVlpQTlJREZjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUJwWFNBOUlDZ29kbUZzZFdVZ0x5QnRkV3dwSUQ0K0lEQXBJQzBnYzNWaUlDWWdNSGhHUmx4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUc5bVpuTmxkQ0FySUdKNWRHVk1aVzVuZEdoY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVbHVkRGdnUFNCbWRXNWpkR2x2YmlCM2NtbDBaVWx1ZERnZ0tIWmhiSFZsTENCdlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJSFpoYkhWbElEMGdLM1poYkhWbFhHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z01Td2dNSGczWml3Z0xUQjRPREFwWEc0Z0lHbG1JQ2doUW5WbVptVnlMbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFFwSUhaaGJIVmxJRDBnVFdGMGFDNW1iRzl2Y2loMllXeDFaU2xjYmlBZ2FXWWdLSFpoYkhWbElEd2dNQ2tnZG1Gc2RXVWdQU0F3ZUdabUlDc2dkbUZzZFdVZ0t5QXhYRzRnSUhSb2FYTmJiMlptYzJWMFhTQTlJQ2gyWVd4MVpTQW1JREI0Wm1ZcFhHNGdJSEpsZEhWeWJpQnZabVp6WlhRZ0t5QXhYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZKYm5ReE5reEZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVkpiblF4Tmt4RklDaDJZV3gxWlN3Z2IyWm1jMlYwTENCdWIwRnpjMlZ5ZENrZ2UxeHVJQ0IyWVd4MVpTQTlJQ3QyWVd4MVpWeHVJQ0J2Wm1aelpYUWdQU0J2Wm1aelpYUWdmQ0F3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUdOb1pXTnJTVzUwS0hSb2FYTXNJSFpoYkhWbExDQnZabVp6WlhRc0lESXNJREI0TjJabVppd2dMVEI0T0RBd01DbGNiaUFnYVdZZ0tFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVUtTQjdYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUmRJRDBnS0haaGJIVmxJQ1lnTUhobVppbGNiaUFnSUNCMGFHbHpXMjltWm5ObGRDQXJJREZkSUQwZ0tIWmhiSFZsSUQ0K1BpQTRLVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzlpYW1WamRGZHlhWFJsVlVsdWRERTJLSFJvYVhNc0lIWmhiSFZsTENCdlptWnpaWFFzSUhSeWRXVXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklESmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERFMlFrVWdQU0JtZFc1amRHbHZiaUIzY21sMFpVbHVkREUyUWtVZ0tIWmhiSFZsTENCdlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJSFpoYkhWbElEMGdLM1poYkhWbFhHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z01pd2dNSGczWm1abUxDQXRNSGc0TURBd0tWeHVJQ0JwWmlBb1FuVm1abVZ5TGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRcElIdGNiaUFnSUNCMGFHbHpXMjltWm5ObGRGMGdQU0FvZG1Gc2RXVWdQajQrSURncFhHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXhYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdiMkpxWldOMFYzSnBkR1ZWU1c1ME1UWW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnWm1Gc2MyVXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklESmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERNeVRFVWdQU0JtZFc1amRHbHZiaUIzY21sMFpVbHVkRE15VEVVZ0tIWmhiSFZsTENCdlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJSFpoYkhWbElEMGdLM1poYkhWbFhHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z05Dd2dNSGczWm1abVptWm1aaXdnTFRCNE9EQXdNREF3TURBcFhHNGdJR2xtSUNoQ2RXWm1aWEl1VkZsUVJVUmZRVkpTUVZsZlUxVlFVRTlTVkNrZ2UxeHVJQ0FnSUhSb2FYTmJiMlptYzJWMFhTQTlJQ2gyWVd4MVpTQW1JREI0Wm1ZcFhHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXhYU0E5SUNoMllXeDFaU0ErUGo0Z09DbGNiaUFnSUNCMGFHbHpXMjltWm5ObGRDQXJJREpkSUQwZ0tIWmhiSFZsSUQ0K1BpQXhOaWxjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkQ0FySUROZElEMGdLSFpoYkhWbElENCtQaUF5TkNsY2JpQWdmU0JsYkhObElIdGNiaUFnSUNCdlltcGxZM1JYY21sMFpWVkpiblF6TWloMGFHbHpMQ0IyWVd4MVpTd2diMlptYzJWMExDQjBjblZsS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJ2Wm1aelpYUWdLeUEwWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWSmJuUXpNa0pGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZKYm5Rek1rSkZJQ2gyWVd4MVpTd2diMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCMllXeDFaU0E5SUN0MllXeDFaVnh1SUNCdlptWnpaWFFnUFNCdlptWnpaWFFnZkNBd1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElHTm9aV05yU1c1MEtIUm9hWE1zSUhaaGJIVmxMQ0J2Wm1aelpYUXNJRFFzSURCNE4yWm1abVptWm1Zc0lDMHdlRGd3TURBd01EQXdLVnh1SUNCcFppQW9kbUZzZFdVZ1BDQXdLU0IyWVd4MVpTQTlJREI0Wm1abVptWm1abVlnS3lCMllXeDFaU0FySURGY2JpQWdhV1lnS0VKMVptWmxjaTVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVS1NCN1hHNGdJQ0FnZEdocGMxdHZabVp6WlhSZElEMGdLSFpoYkhWbElENCtQaUF5TkNsY2JpQWdJQ0IwYUdselcyOW1abk5sZENBcklERmRJRDBnS0haaGJIVmxJRDQrUGlBeE5pbGNiaUFnSUNCMGFHbHpXMjltWm5ObGRDQXJJREpkSUQwZ0tIWmhiSFZsSUQ0K1BpQTRLVnh1SUNBZ0lIUm9hWE5iYjJabWMyVjBJQ3NnTTEwZ1BTQW9kbUZzZFdVZ0ppQXdlR1ptS1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUc5aWFtVmpkRmR5YVhSbFZVbHVkRE15S0hSb2FYTXNJSFpoYkhWbExDQnZabVp6WlhRc0lHWmhiSE5sS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJ2Wm1aelpYUWdLeUEwWEc1OVhHNWNibVoxYm1OMGFXOXVJR05vWldOclNVVkZSVGMxTkNBb1luVm1MQ0IyWVd4MVpTd2diMlptYzJWMExDQmxlSFFzSUcxaGVDd2diV2x1S1NCN1hHNGdJR2xtSUNodlptWnpaWFFnS3lCbGVIUWdQaUJpZFdZdWJHVnVaM1JvS1NCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25TVzVrWlhnZ2IzVjBJRzltSUhKaGJtZGxKeWxjYmlBZ2FXWWdLRzltWm5ObGRDQThJREFwSUhSb2NtOTNJRzVsZHlCU1lXNW5aVVZ5Y205eUtDZEpibVJsZUNCdmRYUWdiMllnY21GdVoyVW5LVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjNjbWwwWlVac2IyRjBJQ2hpZFdZc0lIWmhiSFZsTENCdlptWnpaWFFzSUd4cGRIUnNaVVZ1WkdsaGJpd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnZTF4dUlDQWdJR05vWldOclNVVkZSVGMxTkNoaWRXWXNJSFpoYkhWbExDQnZabVp6WlhRc0lEUXNJRE11TkRBeU9ESXpORFkyTXpnMU1qZzRObVVyTXpnc0lDMHpMalF3TWpneU16UTJOak00TlRJNE9EWmxLek00S1Z4dUlDQjlYRzRnSUdsbFpXVTNOVFF1ZDNKcGRHVW9ZblZtTENCMllXeDFaU3dnYjJabWMyVjBMQ0JzYVhSMGJHVkZibVJwWVc0c0lESXpMQ0EwS1Z4dUlDQnlaWFIxY200Z2IyWm1jMlYwSUNzZ05GeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxSbXh2WVhSTVJTQTlJR1oxYm1OMGFXOXVJSGR5YVhSbFJteHZZWFJNUlNBb2RtRnNkV1VzSUc5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsUm14dllYUW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnZEhKMVpTd2dibTlCYzNObGNuUXBYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZHYkc5aGRFSkZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVkdiRzloZEVKRklDaDJZV3gxWlN3Z2IyWm1jMlYwTENCdWIwRnpjMlZ5ZENrZ2UxeHVJQ0J5WlhSMWNtNGdkM0pwZEdWR2JHOWhkQ2gwYUdsekxDQjJZV3gxWlN3Z2IyWm1jMlYwTENCbVlXeHpaU3dnYm05QmMzTmxjblFwWEc1OVhHNWNibVoxYm1OMGFXOXVJSGR5YVhSbFJHOTFZbXhsSUNoaWRXWXNJSFpoYkhWbExDQnZabVp6WlhRc0lHeHBkSFJzWlVWdVpHbGhiaXdnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ2UxeHVJQ0FnSUdOb1pXTnJTVVZGUlRjMU5DaGlkV1lzSUhaaGJIVmxMQ0J2Wm1aelpYUXNJRGdzSURFdU56azNOamt6TVRNME9EWXlNekUxTjBVck16QTRMQ0F0TVM0M09UYzJPVE14TXpRNE5qSXpNVFUzUlNzek1EZ3BYRzRnSUgxY2JpQWdhV1ZsWlRjMU5DNTNjbWwwWlNoaWRXWXNJSFpoYkhWbExDQnZabVp6WlhRc0lHeHBkSFJzWlVWdVpHbGhiaXdnTlRJc0lEZ3BYRzRnSUhKbGRIVnliaUJ2Wm1aelpYUWdLeUE0WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWRWIzVmliR1ZNUlNBOUlHWjFibU4wYVc5dUlIZHlhWFJsUkc5MVlteGxURVVnS0haaGJIVmxMQ0J2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaVVJ2ZFdKc1pTaDBhR2x6TENCMllXeDFaU3dnYjJabWMyVjBMQ0IwY25WbExDQnViMEZ6YzJWeWRDbGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVVJ2ZFdKc1pVSkZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVkViM1ZpYkdWQ1JTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnY21WMGRYSnVJSGR5YVhSbFJHOTFZbXhsS0hSb2FYTXNJSFpoYkhWbExDQnZabVp6WlhRc0lHWmhiSE5sTENCdWIwRnpjMlZ5ZENsY2JuMWNibHh1THk4Z1kyOXdlU2gwWVhKblpYUkNkV1ptWlhJc0lIUmhjbWRsZEZOMFlYSjBQVEFzSUhOdmRYSmpaVk4wWVhKMFBUQXNJSE52ZFhKalpVVnVaRDFpZFdabVpYSXViR1Z1WjNSb0tWeHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNWpiM0I1SUQwZ1puVnVZM1JwYjI0Z1kyOXdlU0FvZEdGeVoyVjBMQ0IwWVhKblpYUlRkR0Z5ZEN3Z2MzUmhjblFzSUdWdVpDa2dlMXh1SUNCcFppQW9JWE4wWVhKMEtTQnpkR0Z5ZENBOUlEQmNiaUFnYVdZZ0tDRmxibVFnSmlZZ1pXNWtJQ0U5UFNBd0tTQmxibVFnUFNCMGFHbHpMbXhsYm1kMGFGeHVJQ0JwWmlBb2RHRnlaMlYwVTNSaGNuUWdQajBnZEdGeVoyVjBMbXhsYm1kMGFDa2dkR0Z5WjJWMFUzUmhjblFnUFNCMFlYSm5aWFF1YkdWdVozUm9YRzRnSUdsbUlDZ2hkR0Z5WjJWMFUzUmhjblFwSUhSaGNtZGxkRk4wWVhKMElEMGdNRnh1SUNCcFppQW9aVzVrSUQ0Z01DQW1KaUJsYm1RZ1BDQnpkR0Z5ZENrZ1pXNWtJRDBnYzNSaGNuUmNibHh1SUNBdkx5QkRiM0I1SURBZ1lubDBaWE03SUhkbEozSmxJR1J2Ym1WY2JpQWdhV1lnS0dWdVpDQTlQVDBnYzNSaGNuUXBJSEpsZEhWeWJpQXdYRzRnSUdsbUlDaDBZWEpuWlhRdWJHVnVaM1JvSUQwOVBTQXdJSHg4SUhSb2FYTXViR1Z1WjNSb0lEMDlQU0F3S1NCeVpYUjFjbTRnTUZ4dVhHNGdJQzh2SUVaaGRHRnNJR1Z5Y205eUlHTnZibVJwZEdsdmJuTmNiaUFnYVdZZ0tIUmhjbWRsZEZOMFlYSjBJRHdnTUNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCU1lXNW5aVVZ5Y205eUtDZDBZWEpuWlhSVGRHRnlkQ0J2ZFhRZ2IyWWdZbTkxYm1Sekp5bGNiaUFnZlZ4dUlDQnBaaUFvYzNSaGNuUWdQQ0F3SUh4OElITjBZWEowSUQ0OUlIUm9hWE11YkdWdVozUm9LU0IwYUhKdmR5QnVaWGNnVW1GdVoyVkZjbkp2Y2lnbmMyOTFjbU5sVTNSaGNuUWdiM1YwSUc5bUlHSnZkVzVrY3ljcFhHNGdJR2xtSUNobGJtUWdQQ0F3S1NCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25jMjkxY21ObFJXNWtJRzkxZENCdlppQmliM1Z1WkhNbktWeHVYRzRnSUM4dklFRnlaU0IzWlNCdmIySS9YRzRnSUdsbUlDaGxibVFnUGlCMGFHbHpMbXhsYm1kMGFDa2daVzVrSUQwZ2RHaHBjeTVzWlc1bmRHaGNiaUFnYVdZZ0tIUmhjbWRsZEM1c1pXNW5kR2dnTFNCMFlYSm5aWFJUZEdGeWRDQThJR1Z1WkNBdElITjBZWEowS1NCN1hHNGdJQ0FnWlc1a0lEMGdkR0Z5WjJWMExteGxibWQwYUNBdElIUmhjbWRsZEZOMFlYSjBJQ3NnYzNSaGNuUmNiaUFnZlZ4dVhHNGdJSFpoY2lCc1pXNGdQU0JsYm1RZ0xTQnpkR0Z5ZEZ4dUlDQjJZWElnYVZ4dVhHNGdJR2xtSUNoMGFHbHpJRDA5UFNCMFlYSm5aWFFnSmlZZ2MzUmhjblFnUENCMFlYSm5aWFJUZEdGeWRDQW1KaUIwWVhKblpYUlRkR0Z5ZENBOElHVnVaQ2tnZTF4dUlDQWdJQzh2SUdSbGMyTmxibVJwYm1jZ1kyOXdlU0JtY205dElHVnVaRnh1SUNBZ0lHWnZjaUFvYVNBOUlHeGxiaUF0SURFN0lHa2dQajBnTURzZ0xTMXBLU0I3WEc0Z0lDQWdJQ0IwWVhKblpYUmJhU0FySUhSaGNtZGxkRk4wWVhKMFhTQTlJSFJvYVhOYmFTQXJJSE4wWVhKMFhWeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2hzWlc0Z1BDQXhNREF3SUh4OElDRkNkV1ptWlhJdVZGbFFSVVJmUVZKU1FWbGZVMVZRVUU5U1ZDa2dlMXh1SUNBZ0lDOHZJR0Z6WTJWdVpHbHVaeUJqYjNCNUlHWnliMjBnYzNSaGNuUmNiaUFnSUNCbWIzSWdLR2tnUFNBd095QnBJRHdnYkdWdU95QXJLMmtwSUh0Y2JpQWdJQ0FnSUhSaGNtZGxkRnRwSUNzZ2RHRnlaMlYwVTNSaGNuUmRJRDBnZEdocGMxdHBJQ3NnYzNSaGNuUmRYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lGVnBiblE0UVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk5sZEM1allXeHNLRnh1SUNBZ0lDQWdkR0Z5WjJWMExGeHVJQ0FnSUNBZ2RHaHBjeTV6ZFdKaGNuSmhlU2h6ZEdGeWRDd2djM1JoY25RZ0t5QnNaVzRwTEZ4dUlDQWdJQ0FnZEdGeVoyVjBVM1JoY25SY2JpQWdJQ0FwWEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYkdWdVhHNTlYRzVjYmk4dklGVnpZV2RsT2x4dUx5OGdJQ0FnWW5WbVptVnlMbVpwYkd3b2JuVnRZbVZ5V3l3Z2IyWm1jMlYwV3l3Z1pXNWtYVjBwWEc0dkx5QWdJQ0JpZFdabVpYSXVabWxzYkNoaWRXWm1aWEpiTENCdlptWnpaWFJiTENCbGJtUmRYU2xjYmk4dklDQWdJR0oxWm1abGNpNW1hV3hzS0hOMGNtbHVaMXNzSUc5bVpuTmxkRnNzSUdWdVpGMWRXeXdnWlc1amIyUnBibWRkS1Z4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1bWFXeHNJRDBnWm5WdVkzUnBiMjRnWm1sc2JDQW9kbUZzTENCemRHRnlkQ3dnWlc1a0xDQmxibU52WkdsdVp5a2dlMXh1SUNBdkx5QklZVzVrYkdVZ2MzUnlhVzVuSUdOaGMyVnpPbHh1SUNCcFppQW9kSGx3Wlc5bUlIWmhiQ0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlITjBZWEowSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdaVzVqYjJScGJtY2dQU0J6ZEdGeWRGeHVJQ0FnSUNBZ2MzUmhjblFnUFNBd1hHNGdJQ0FnSUNCbGJtUWdQU0IwYUdsekxteGxibWQwYUZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR1Z1WkNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJR1Z1WTI5a2FXNW5JRDBnWlc1a1hHNGdJQ0FnSUNCbGJtUWdQU0IwYUdsekxteGxibWQwYUZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZG1Gc0xteGxibWQwYUNBOVBUMGdNU2tnZTF4dUlDQWdJQ0FnZG1GeUlHTnZaR1VnUFNCMllXd3VZMmhoY2tOdlpHVkJkQ2d3S1Z4dUlDQWdJQ0FnYVdZZ0tHTnZaR1VnUENBeU5UWXBJSHRjYmlBZ0lDQWdJQ0FnZG1Gc0lEMGdZMjlrWlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWlc1amIyUnBibWNnSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUIwZVhCbGIyWWdaVzVqYjJScGJtY2dJVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZGxibU52WkdsdVp5QnRkWE4wSUdKbElHRWdjM1J5YVc1bkp5bGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCbGJtTnZaR2x1WnlBOVBUMGdKM04wY21sdVp5Y2dKaVlnSVVKMVptWmxjaTVwYzBWdVkyOWthVzVuS0dWdVkyOWthVzVuS1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25WVzVyYm05M2JpQmxibU52WkdsdVp6b2dKeUFySUdWdVkyOWthVzVuS1Z4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ2RtRnNJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUhaaGJDQTlJSFpoYkNBbUlESTFOVnh1SUNCOVhHNWNiaUFnTHk4Z1NXNTJZV3hwWkNCeVlXNW5aWE1nWVhKbElHNXZkQ0J6WlhRZ2RHOGdZU0JrWldaaGRXeDBMQ0J6YnlCallXNGdjbUZ1WjJVZ1kyaGxZMnNnWldGeWJIa3VYRzRnSUdsbUlDaHpkR0Z5ZENBOElEQWdmSHdnZEdocGN5NXNaVzVuZEdnZ1BDQnpkR0Z5ZENCOGZDQjBhR2x6TG14bGJtZDBhQ0E4SUdWdVpDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2RQZFhRZ2IyWWdjbUZ1WjJVZ2FXNWtaWGduS1Z4dUlDQjlYRzVjYmlBZ2FXWWdLR1Z1WkNBOFBTQnpkR0Z5ZENrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdselhHNGdJSDFjYmx4dUlDQnpkR0Z5ZENBOUlITjBZWEowSUQ0K1BpQXdYRzRnSUdWdVpDQTlJR1Z1WkNBOVBUMGdkVzVrWldacGJtVmtJRDhnZEdocGN5NXNaVzVuZEdnZ09pQmxibVFnUGo0K0lEQmNibHh1SUNCcFppQW9JWFpoYkNrZ2RtRnNJRDBnTUZ4dVhHNGdJSFpoY2lCcFhHNGdJR2xtSUNoMGVYQmxiMllnZG1Gc0lEMDlQU0FuYm5WdFltVnlKeWtnZTF4dUlDQWdJR1p2Y2lBb2FTQTlJSE4wWVhKME95QnBJRHdnWlc1a095QXJLMmtwSUh0Y2JpQWdJQ0FnSUhSb2FYTmJhVjBnUFNCMllXeGNiaUFnSUNCOVhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2RtRnlJR0o1ZEdWeklEMGdRblZtWm1WeUxtbHpRblZtWm1WeUtIWmhiQ2xjYmlBZ0lDQWdJRDhnZG1Gc1hHNGdJQ0FnSUNBNklIVjBaamhVYjBKNWRHVnpLRzVsZHlCQ2RXWm1aWElvZG1Gc0xDQmxibU52WkdsdVp5a3VkRzlUZEhKcGJtY29LU2xjYmlBZ0lDQjJZWElnYkdWdUlEMGdZbmwwWlhNdWJHVnVaM1JvWEc0Z0lDQWdabTl5SUNocElEMGdNRHNnYVNBOElHVnVaQ0F0SUhOMFlYSjBPeUFySzJrcElIdGNiaUFnSUNBZ0lIUm9hWE5iYVNBcklITjBZWEowWFNBOUlHSjVkR1Z6VzJrZ0pTQnNaVzVkWEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSFJvYVhOY2JuMWNibHh1THk4Z1NFVk1VRVZTSUVaVlRrTlVTVTlPVTF4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzUyWVhJZ1NVNVdRVXhKUkY5Q1FWTkZOalJmVWtVZ1BTQXZXMTRyWEZ3dk1DMDVRUzFhWVMxNkxWOWRMMmRjYmx4dVpuVnVZM1JwYjI0Z1ltRnpaVFkwWTJ4bFlXNGdLSE4wY2lrZ2UxeHVJQ0F2THlCT2IyUmxJSE4wY21sd2N5QnZkWFFnYVc1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUd4cGEyVWdYRnh1SUdGdVpDQmNYSFFnWm5KdmJTQjBhR1VnYzNSeWFXNW5MQ0JpWVhObE5qUXRhbk1nWkc5bGN5QnViM1JjYmlBZ2MzUnlJRDBnYzNSeWFXNW5kSEpwYlNoemRISXBMbkpsY0d4aFkyVW9TVTVXUVV4SlJGOUNRVk5GTmpSZlVrVXNJQ2NuS1Z4dUlDQXZMeUJPYjJSbElHTnZiblpsY25SeklITjBjbWx1WjNNZ2QybDBhQ0JzWlc1bmRHZ2dQQ0F5SUhSdklDY25YRzRnSUdsbUlDaHpkSEl1YkdWdVozUm9JRHdnTWlrZ2NtVjBkWEp1SUNjblhHNGdJQzh2SUU1dlpHVWdZV3hzYjNkeklHWnZjaUJ1YjI0dGNHRmtaR1ZrSUdKaGMyVTJOQ0J6ZEhKcGJtZHpJQ2h0YVhOemFXNW5JSFJ5WVdsc2FXNW5JRDA5UFNrc0lHSmhjMlUyTkMxcWN5QmtiMlZ6SUc1dmRGeHVJQ0IzYUdsc1pTQW9jM1J5TG14bGJtZDBhQ0FsSURRZ0lUMDlJREFwSUh0Y2JpQWdJQ0J6ZEhJZ1BTQnpkSElnS3lBblBTZGNiaUFnZlZ4dUlDQnlaWFIxY200Z2MzUnlYRzU5WEc1Y2JtWjFibU4wYVc5dUlITjBjbWx1WjNSeWFXMGdLSE4wY2lrZ2UxeHVJQ0JwWmlBb2MzUnlMblJ5YVcwcElISmxkSFZ5YmlCemRISXVkSEpwYlNncFhHNGdJSEpsZEhWeWJpQnpkSEl1Y21Wd2JHRmpaU2d2WGx4Y2N5dDhYRnh6S3lRdlp5d2dKeWNwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFJ2U0dWNElDaHVLU0I3WEc0Z0lHbG1JQ2h1SUR3Z01UWXBJSEpsZEhWeWJpQW5NQ2NnS3lCdUxuUnZVM1J5YVc1bktERTJLVnh1SUNCeVpYUjFjbTRnYmk1MGIxTjBjbWx1WnlneE5pbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2RYUm1PRlJ2UW5sMFpYTWdLSE4wY21sdVp5d2dkVzVwZEhNcElIdGNiaUFnZFc1cGRITWdQU0IxYm1sMGN5QjhmQ0JKYm1acGJtbDBlVnh1SUNCMllYSWdZMjlrWlZCdmFXNTBYRzRnSUhaaGNpQnNaVzVuZEdnZ1BTQnpkSEpwYm1jdWJHVnVaM1JvWEc0Z0lIWmhjaUJzWldGa1UzVnljbTluWVhSbElEMGdiblZzYkZ4dUlDQjJZWElnWW5sMFpYTWdQU0JiWFZ4dVhHNGdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnYkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNCamIyUmxVRzlwYm5RZ1BTQnpkSEpwYm1jdVkyaGhja052WkdWQmRDaHBLVnh1WEc0Z0lDQWdMeThnYVhNZ2MzVnljbTluWVhSbElHTnZiWEJ2Ym1WdWRGeHVJQ0FnSUdsbUlDaGpiMlJsVUc5cGJuUWdQaUF3ZUVRM1JrWWdKaVlnWTI5a1pWQnZhVzUwSUR3Z01IaEZNREF3S1NCN1hHNGdJQ0FnSUNBdkx5QnNZWE4wSUdOb1lYSWdkMkZ6SUdFZ2JHVmhaRnh1SUNBZ0lDQWdhV1lnS0NGc1pXRmtVM1Z5Y205bllYUmxLU0I3WEc0Z0lDQWdJQ0FnSUM4dklHNXZJR3hsWVdRZ2VXVjBYRzRnSUNBZ0lDQWdJR2xtSUNoamIyUmxVRzlwYm5RZ1BpQXdlRVJDUmtZcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCMWJtVjRjR1ZqZEdWa0lIUnlZV2xzWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ2gxYm1sMGN5QXRQU0F6S1NBK0lDMHhLU0JpZVhSbGN5NXdkWE5vS0RCNFJVWXNJREI0UWtZc0lEQjRRa1FwWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdWY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHBJQ3NnTVNBOVBUMGdiR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2RXNXdZV2x5WldRZ2JHVmhaRnh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ29kVzVwZEhNZ0xUMGdNeWtnUGlBdE1Ta2dZbmwwWlhNdWNIVnphQ2d3ZUVWR0xDQXdlRUpHTENBd2VFSkVLVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsWEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQXZMeUIyWVd4cFpDQnNaV0ZrWEc0Z0lDQWdJQ0FnSUd4bFlXUlRkWEp5YjJkaGRHVWdQU0JqYjJSbFVHOXBiblJjYmx4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QXlJR3hsWVdSeklHbHVJR0VnY205M1hHNGdJQ0FnSUNCcFppQW9ZMjlrWlZCdmFXNTBJRHdnTUhoRVF6QXdLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ29kVzVwZEhNZ0xUMGdNeWtnUGlBdE1Ta2dZbmwwWlhNdWNIVnphQ2d3ZUVWR0xDQXdlRUpHTENBd2VFSkVLVnh1SUNBZ0lDQWdJQ0JzWldGa1UzVnljbTluWVhSbElEMGdZMjlrWlZCdmFXNTBYRzRnSUNBZ0lDQWdJR052Ym5ScGJuVmxYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUhaaGJHbGtJSE4xY25KdloyRjBaU0J3WVdseVhHNGdJQ0FnSUNCamIyUmxVRzlwYm5RZ1BTQW9iR1ZoWkZOMWNuSnZaMkYwWlNBdElEQjRSRGd3TUNBOFBDQXhNQ0I4SUdOdlpHVlFiMmx1ZENBdElEQjRSRU13TUNrZ0t5QXdlREV3TURBd1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoc1pXRmtVM1Z5Y205bllYUmxLU0I3WEc0Z0lDQWdJQ0F2THlCMllXeHBaQ0JpYlhBZ1kyaGhjaXdnWW5WMElHeGhjM1FnWTJoaGNpQjNZWE1nWVNCc1pXRmtYRzRnSUNBZ0lDQnBaaUFvS0hWdWFYUnpJQzA5SURNcElENGdMVEVwSUdKNWRHVnpMbkIxYzJnb01IaEZSaXdnTUhoQ1Jpd2dNSGhDUkNsY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWldGa1UzVnljbTluWVhSbElEMGdiblZzYkZ4dVhHNGdJQ0FnTHk4Z1pXNWpiMlJsSUhWMFpqaGNiaUFnSUNCcFppQW9ZMjlrWlZCdmFXNTBJRHdnTUhnNE1Da2dlMXh1SUNBZ0lDQWdhV1lnS0NoMWJtbDBjeUF0UFNBeEtTQThJREFwSUdKeVpXRnJYRzRnSUNBZ0lDQmllWFJsY3k1d2RYTm9LR052WkdWUWIybHVkQ2xjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR052WkdWUWIybHVkQ0E4SURCNE9EQXdLU0I3WEc0Z0lDQWdJQ0JwWmlBb0tIVnVhWFJ6SUMwOUlESXBJRHdnTUNrZ1luSmxZV3RjYmlBZ0lDQWdJR0o1ZEdWekxuQjFjMmdvWEc0Z0lDQWdJQ0FnSUdOdlpHVlFiMmx1ZENBK1BpQXdlRFlnZkNBd2VFTXdMRnh1SUNBZ0lDQWdJQ0JqYjJSbFVHOXBiblFnSmlBd2VETkdJSHdnTUhnNE1GeHVJQ0FnSUNBZ0tWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyOWtaVkJ2YVc1MElEd2dNSGd4TURBd01Da2dlMXh1SUNBZ0lDQWdhV1lnS0NoMWJtbDBjeUF0UFNBektTQThJREFwSUdKeVpXRnJYRzRnSUNBZ0lDQmllWFJsY3k1d2RYTm9LRnh1SUNBZ0lDQWdJQ0JqYjJSbFVHOXBiblFnUGo0Z01IaERJSHdnTUhoRk1DeGNiaUFnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDQrSURCNE5pQW1JREI0TTBZZ2ZDQXdlRGd3TEZ4dUlDQWdJQ0FnSUNCamIyUmxVRzlwYm5RZ0ppQXdlRE5HSUh3Z01IZzRNRnh1SUNBZ0lDQWdLVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjlrWlZCdmFXNTBJRHdnTUhneE1UQXdNREFwSUh0Y2JpQWdJQ0FnSUdsbUlDZ29kVzVwZEhNZ0xUMGdOQ2tnUENBd0tTQmljbVZoYTF4dUlDQWdJQ0FnWW5sMFpYTXVjSFZ6YUNoY2JpQWdJQ0FnSUNBZ1kyOWtaVkJ2YVc1MElENCtJREI0TVRJZ2ZDQXdlRVl3TEZ4dUlDQWdJQ0FnSUNCamIyUmxVRzlwYm5RZ1BqNGdNSGhESUNZZ01IZ3pSaUI4SURCNE9EQXNYRzRnSUNBZ0lDQWdJR052WkdWUWIybHVkQ0ErUGlBd2VEWWdKaUF3ZUROR0lId2dNSGc0TUN4Y2JpQWdJQ0FnSUNBZ1kyOWtaVkJ2YVc1MElDWWdNSGd6UmlCOElEQjRPREJjYmlBZ0lDQWdJQ2xjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkSmJuWmhiR2xrSUdOdlpHVWdjRzlwYm5RbktWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCaWVYUmxjMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjMk5wYVZSdlFubDBaWE1nS0hOMGNpa2dlMXh1SUNCMllYSWdZbmwwWlVGeWNtRjVJRDBnVzExY2JpQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J6ZEhJdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQXZMeUJPYjJSbEozTWdZMjlrWlNCelpXVnRjeUIwYnlCaVpTQmtiMmx1WnlCMGFHbHpJR0Z1WkNCdWIzUWdKaUF3ZURkR0xpNWNiaUFnSUNCaWVYUmxRWEp5WVhrdWNIVnphQ2h6ZEhJdVkyaGhja052WkdWQmRDaHBLU0FtSURCNFJrWXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHSjVkR1ZCY25KaGVWeHVmVnh1WEc1bWRXNWpkR2x2YmlCMWRHWXhObXhsVkc5Q2VYUmxjeUFvYzNSeUxDQjFibWwwY3lrZ2UxeHVJQ0IyWVhJZ1l5d2dhR2tzSUd4dlhHNGdJSFpoY2lCaWVYUmxRWEp5WVhrZ1BTQmJYVnh1SUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElITjBjaTVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUdsbUlDZ29kVzVwZEhNZ0xUMGdNaWtnUENBd0tTQmljbVZoYTF4dVhHNGdJQ0FnWXlBOUlITjBjaTVqYUdGeVEyOWtaVUYwS0drcFhHNGdJQ0FnYUdrZ1BTQmpJRDQrSURoY2JpQWdJQ0JzYnlBOUlHTWdKU0F5TlRaY2JpQWdJQ0JpZVhSbFFYSnlZWGt1Y0hWemFDaHNieWxjYmlBZ0lDQmllWFJsUVhKeVlYa3VjSFZ6YUNob2FTbGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmllWFJsUVhKeVlYbGNibjFjYmx4dVpuVnVZM1JwYjI0Z1ltRnpaVFkwVkc5Q2VYUmxjeUFvYzNSeUtTQjdYRzRnSUhKbGRIVnliaUJpWVhObE5qUXVkRzlDZVhSbFFYSnlZWGtvWW1GelpUWTBZMnhsWVc0b2MzUnlLU2xjYm4xY2JseHVablZ1WTNScGIyNGdZbXhwZEVKMVptWmxjaUFvYzNKakxDQmtjM1FzSUc5bVpuTmxkQ3dnYkdWdVozUm9LU0I3WEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2diR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb0tHa2dLeUJ2Wm1aelpYUWdQajBnWkhOMExteGxibWQwYUNrZ2ZId2dLR2tnUGowZ2MzSmpMbXhsYm1kMGFDa3BJR0p5WldGclhHNGdJQ0FnWkhOMFcya2dLeUJ2Wm1aelpYUmRJRDBnYzNKalcybGRYRzRnSUgxY2JpQWdjbVYwZFhKdUlHbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FYTnVZVzRnS0haaGJDa2dlMXh1SUNCeVpYUjFjbTRnZG1Gc0lDRTlQU0IyWVd3Z0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJHbHVaU0J1YnkxelpXeG1MV052YlhCaGNtVmNibjFjYmlJc0lpZDFjMlVnYzNSeWFXTjBKMXh1WEc1bGVIQnZjblJ6TG1KNWRHVk1aVzVuZEdnZ1BTQmllWFJsVEdWdVozUm9YRzVsZUhCdmNuUnpMblJ2UW5sMFpVRnljbUY1SUQwZ2RHOUNlWFJsUVhKeVlYbGNibVY0Y0c5eWRITXVabkp2YlVKNWRHVkJjbkpoZVNBOUlHWnliMjFDZVhSbFFYSnlZWGxjYmx4dWRtRnlJR3h2YjJ0MWNDQTlJRnRkWEc1MllYSWdjbVYyVEc5dmEzVndJRDBnVzExY2JuWmhjaUJCY25JZ1BTQjBlWEJsYjJZZ1ZXbHVkRGhCY25KaGVTQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5QlZhVzUwT0VGeWNtRjVJRG9nUVhKeVlYbGNibHh1ZG1GeUlHTnZaR1VnUFNBblFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZwaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZWpBeE1qTTBOVFkzT0Rrckx5ZGNibVp2Y2lBb2RtRnlJR2tnUFNBd0xDQnNaVzRnUFNCamIyUmxMbXhsYm1kMGFEc2dhU0E4SUd4bGJqc2dLeXRwS1NCN1hHNGdJR3h2YjJ0MWNGdHBYU0E5SUdOdlpHVmJhVjFjYmlBZ2NtVjJURzl2YTNWd1cyTnZaR1V1WTJoaGNrTnZaR1ZCZENocEtWMGdQU0JwWEc1OVhHNWNiaTh2SUZOMWNIQnZjblFnWkdWamIyUnBibWNnVlZKTUxYTmhabVVnWW1GelpUWTBJSE4wY21sdVozTXNJR0Z6SUU1dlpHVXVhbk1nWkc5bGN5NWNiaTh2SUZObFpUb2dhSFIwY0hNNkx5OWxiaTUzYVd0cGNHVmthV0V1YjNKbkwzZHBhMmt2UW1GelpUWTBJMVZTVEY5aGNIQnNhV05oZEdsdmJuTmNibkpsZGt4dmIydDFjRnNuTFNjdVkyaGhja052WkdWQmRDZ3dLVjBnUFNBMk1seHVjbVYyVEc5dmEzVndXeWRmSnk1amFHRnlRMjlrWlVGMEtEQXBYU0E5SURZelhHNWNibVoxYm1OMGFXOXVJR2RsZEV4bGJuTWdLR0kyTkNrZ2UxeHVJQ0IyWVhJZ2JHVnVJRDBnWWpZMExteGxibWQwYUZ4dVhHNGdJR2xtSUNoc1pXNGdKU0EwSUQ0Z01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNTJZV3hwWkNCemRISnBibWN1SUV4bGJtZDBhQ0J0ZFhOMElHSmxJR0VnYlhWc2RHbHdiR1VnYjJZZ05DY3BYRzRnSUgxY2JseHVJQ0F2THlCVWNtbHRJRzltWmlCbGVIUnlZU0JpZVhSbGN5QmhablJsY2lCd2JHRmpaV2h2YkdSbGNpQmllWFJsY3lCaGNtVWdabTkxYm1SY2JpQWdMeThnVTJWbE9pQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZZbVZoZEdkaGJXMXBkQzlpWVhObE5qUXRhbk12YVhOemRXVnpMelF5WEc0Z0lIWmhjaUIyWVd4cFpFeGxiaUE5SUdJMk5DNXBibVJsZUU5bUtDYzlKeWxjYmlBZ2FXWWdLSFpoYkdsa1RHVnVJRDA5UFNBdE1Ta2dkbUZzYVdSTVpXNGdQU0JzWlc1Y2JseHVJQ0IyWVhJZ2NHeGhZMlZJYjJ4a1pYSnpUR1Z1SUQwZ2RtRnNhV1JNWlc0Z1BUMDlJR3hsYmx4dUlDQWdJRDhnTUZ4dUlDQWdJRG9nTkNBdElDaDJZV3hwWkV4bGJpQWxJRFFwWEc1Y2JpQWdjbVYwZFhKdUlGdDJZV3hwWkV4bGJpd2djR3hoWTJWSWIyeGtaWEp6VEdWdVhWeHVmVnh1WEc0dkx5QmlZWE5sTmpRZ2FYTWdOQzh6SUNzZ2RYQWdkRzhnZEhkdklHTm9ZWEpoWTNSbGNuTWdiMllnZEdobElHOXlhV2RwYm1Gc0lHUmhkR0ZjYm1aMWJtTjBhVzl1SUdKNWRHVk1aVzVuZEdnZ0tHSTJOQ2tnZTF4dUlDQjJZWElnYkdWdWN5QTlJR2RsZEV4bGJuTW9ZalkwS1Z4dUlDQjJZWElnZG1Gc2FXUk1aVzRnUFNCc1pXNXpXekJkWEc0Z0lIWmhjaUJ3YkdGalpVaHZiR1JsY25OTVpXNGdQU0JzWlc1eld6RmRYRzRnSUhKbGRIVnliaUFvS0haaGJHbGtUR1Z1SUNzZ2NHeGhZMlZJYjJ4a1pYSnpUR1Z1S1NBcUlETWdMeUEwS1NBdElIQnNZV05sU0c5c1pHVnljMHhsYmx4dWZWeHVYRzVtZFc1amRHbHZiaUJmWW5sMFpVeGxibWQwYUNBb1lqWTBMQ0IyWVd4cFpFeGxiaXdnY0d4aFkyVkliMnhrWlhKelRHVnVLU0I3WEc0Z0lISmxkSFZ5YmlBb0tIWmhiR2xrVEdWdUlDc2djR3hoWTJWSWIyeGtaWEp6VEdWdUtTQXFJRE1nTHlBMEtTQXRJSEJzWVdObFNHOXNaR1Z5YzB4bGJseHVmVnh1WEc1bWRXNWpkR2x2YmlCMGIwSjVkR1ZCY25KaGVTQW9ZalkwS1NCN1hHNGdJSFpoY2lCMGJYQmNiaUFnZG1GeUlHeGxibk1nUFNCblpYUk1aVzV6S0dJMk5DbGNiaUFnZG1GeUlIWmhiR2xrVEdWdUlEMGdiR1Z1YzFzd1hWeHVJQ0IyWVhJZ2NHeGhZMlZJYjJ4a1pYSnpUR1Z1SUQwZ2JHVnVjMXN4WFZ4dVhHNGdJSFpoY2lCaGNuSWdQU0J1WlhjZ1FYSnlLRjlpZVhSbFRHVnVaM1JvS0dJMk5Dd2dkbUZzYVdSTVpXNHNJSEJzWVdObFNHOXNaR1Z5YzB4bGJpa3BYRzVjYmlBZ2RtRnlJR04xY2tKNWRHVWdQU0F3WEc1Y2JpQWdMeThnYVdZZ2RHaGxjbVVnWVhKbElIQnNZV05sYUc5c1pHVnljeXdnYjI1c2VTQm5aWFFnZFhBZ2RHOGdkR2hsSUd4aGMzUWdZMjl0Y0d4bGRHVWdOQ0JqYUdGeWMxeHVJQ0IyWVhJZ2JHVnVJRDBnY0d4aFkyVkliMnhrWlhKelRHVnVJRDRnTUZ4dUlDQWdJRDhnZG1Gc2FXUk1aVzRnTFNBMFhHNGdJQ0FnT2lCMllXeHBaRXhsYmx4dVhHNGdJSFpoY2lCcFhHNGdJR1p2Y2lBb2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrZ0t6MGdOQ2tnZTF4dUlDQWdJSFJ0Y0NBOVhHNGdJQ0FnSUNBb2NtVjJURzl2YTNWd1cySTJOQzVqYUdGeVEyOWtaVUYwS0drcFhTQThQQ0F4T0NrZ2ZGeHVJQ0FnSUNBZ0tISmxka3h2YjJ0MWNGdGlOalF1WTJoaGNrTnZaR1ZCZENocElDc2dNU2xkSUR3OElERXlLU0I4WEc0Z0lDQWdJQ0FvY21WMlRHOXZhM1Z3VzJJMk5DNWphR0Z5UTI5a1pVRjBLR2tnS3lBeUtWMGdQRHdnTmlrZ2ZGeHVJQ0FnSUNBZ2NtVjJURzl2YTNWd1cySTJOQzVqYUdGeVEyOWtaVUYwS0drZ0t5QXpLVjFjYmlBZ0lDQmhjbkpiWTNWeVFubDBaU3NyWFNBOUlDaDBiWEFnUGo0Z01UWXBJQ1lnTUhoR1JseHVJQ0FnSUdGeWNsdGpkWEpDZVhSbEt5dGRJRDBnS0hSdGNDQStQaUE0S1NBbUlEQjRSa1pjYmlBZ0lDQmhjbkpiWTNWeVFubDBaU3NyWFNBOUlIUnRjQ0FtSURCNFJrWmNiaUFnZlZ4dVhHNGdJR2xtSUNod2JHRmpaVWh2YkdSbGNuTk1aVzRnUFQwOUlESXBJSHRjYmlBZ0lDQjBiWEFnUFZ4dUlDQWdJQ0FnS0hKbGRreHZiMnQxY0Z0aU5qUXVZMmhoY2tOdlpHVkJkQ2hwS1YwZ1BEd2dNaWtnZkZ4dUlDQWdJQ0FnS0hKbGRreHZiMnQxY0Z0aU5qUXVZMmhoY2tOdlpHVkJkQ2hwSUNzZ01TbGRJRDQrSURRcFhHNGdJQ0FnWVhKeVcyTjFja0o1ZEdVcksxMGdQU0IwYlhBZ0ppQXdlRVpHWEc0Z0lIMWNibHh1SUNCcFppQW9jR3hoWTJWSWIyeGtaWEp6VEdWdUlEMDlQU0F4S1NCN1hHNGdJQ0FnZEcxd0lEMWNiaUFnSUNBZ0lDaHlaWFpNYjI5cmRYQmJZalkwTG1Ob1lYSkRiMlJsUVhRb2FTbGRJRHc4SURFd0tTQjhYRzRnSUNBZ0lDQW9jbVYyVEc5dmEzVndXMkkyTkM1amFHRnlRMjlrWlVGMEtHa2dLeUF4S1YwZ1BEd2dOQ2tnZkZ4dUlDQWdJQ0FnS0hKbGRreHZiMnQxY0Z0aU5qUXVZMmhoY2tOdlpHVkJkQ2hwSUNzZ01pbGRJRDQrSURJcFhHNGdJQ0FnWVhKeVcyTjFja0o1ZEdVcksxMGdQU0FvZEcxd0lENCtJRGdwSUNZZ01IaEdSbHh1SUNBZ0lHRnljbHRqZFhKQ2VYUmxLeXRkSUQwZ2RHMXdJQ1lnTUhoR1JseHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHRnljbHh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjBjbWx3YkdWMFZHOUNZWE5sTmpRZ0tHNTFiU2tnZTF4dUlDQnlaWFIxY200Z2JHOXZhM1Z3VzI1MWJTQStQaUF4T0NBbUlEQjRNMFpkSUN0Y2JpQWdJQ0JzYjI5cmRYQmJiblZ0SUQ0K0lERXlJQ1lnTUhnelJsMGdLMXh1SUNBZ0lHeHZiMnQxY0Z0dWRXMGdQajRnTmlBbUlEQjRNMFpkSUN0Y2JpQWdJQ0JzYjI5cmRYQmJiblZ0SUNZZ01IZ3pSbDFjYm4xY2JseHVablZ1WTNScGIyNGdaVzVqYjJSbFEyaDFibXNnS0hWcGJuUTRMQ0J6ZEdGeWRDd2daVzVrS1NCN1hHNGdJSFpoY2lCMGJYQmNiaUFnZG1GeUlHOTFkSEIxZENBOUlGdGRYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQnpkR0Z5ZERzZ2FTQThJR1Z1WkRzZ2FTQXJQU0F6S1NCN1hHNGdJQ0FnZEcxd0lEMWNiaUFnSUNBZ0lDZ29kV2x1ZERoYmFWMGdQRHdnTVRZcElDWWdNSGhHUmpBd01EQXBJQ3RjYmlBZ0lDQWdJQ2dvZFdsdWREaGJhU0FySURGZElEdzhJRGdwSUNZZ01IaEdSakF3S1NBclhHNGdJQ0FnSUNBb2RXbHVkRGhiYVNBcklESmRJQ1lnTUhoR1JpbGNiaUFnSUNCdmRYUndkWFF1Y0hWemFDaDBjbWx3YkdWMFZHOUNZWE5sTmpRb2RHMXdLU2xjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiM1YwY0hWMExtcHZhVzRvSnljcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdaeWIyMUNlWFJsUVhKeVlYa2dLSFZwYm5RNEtTQjdYRzRnSUhaaGNpQjBiWEJjYmlBZ2RtRnlJR3hsYmlBOUlIVnBiblE0TG14bGJtZDBhRnh1SUNCMllYSWdaWGgwY21GQ2VYUmxjeUE5SUd4bGJpQWxJRE1nTHk4Z2FXWWdkMlVnYUdGMlpTQXhJR0o1ZEdVZ2JHVm1kQ3dnY0dGa0lESWdZbmwwWlhOY2JpQWdkbUZ5SUhCaGNuUnpJRDBnVzExY2JpQWdkbUZ5SUcxaGVFTm9kVzVyVEdWdVozUm9JRDBnTVRZek9ETWdMeThnYlhWemRDQmlaU0J0ZFd4MGFYQnNaU0J2WmlBelhHNWNiaUFnTHk4Z1oyOGdkR2h5YjNWbmFDQjBhR1VnWVhKeVlYa2daWFpsY25rZ2RHaHlaV1VnWW5sMFpYTXNJSGRsSjJ4c0lHUmxZV3dnZDJsMGFDQjBjbUZwYkdsdVp5QnpkSFZtWmlCc1lYUmxjbHh1SUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYkdWdU1pQTlJR3hsYmlBdElHVjRkSEpoUW5sMFpYTTdJR2tnUENCc1pXNHlPeUJwSUNzOUlHMWhlRU5vZFc1clRHVnVaM1JvS1NCN1hHNGdJQ0FnY0dGeWRITXVjSFZ6YUNobGJtTnZaR1ZEYUhWdWF5aDFhVzUwT0N3Z2FTd2dLR2tnS3lCdFlYaERhSFZ1YTB4bGJtZDBhQ2tnUGlCc1pXNHlJRDhnYkdWdU1pQTZJQ2hwSUNzZ2JXRjRRMmgxYm10TVpXNW5kR2dwS1NsY2JpQWdmVnh1WEc0Z0lDOHZJSEJoWkNCMGFHVWdaVzVrSUhkcGRHZ2dlbVZ5YjNNc0lHSjFkQ0J0WVd0bElITjFjbVVnZEc4Z2JtOTBJR1p2Y21kbGRDQjBhR1VnWlhoMGNtRWdZbmwwWlhOY2JpQWdhV1lnS0dWNGRISmhRbmwwWlhNZ1BUMDlJREVwSUh0Y2JpQWdJQ0IwYlhBZ1BTQjFhVzUwT0Z0c1pXNGdMU0F4WFZ4dUlDQWdJSEJoY25SekxuQjFjMmdvWEc0Z0lDQWdJQ0JzYjI5cmRYQmJkRzF3SUQ0K0lESmRJQ3RjYmlBZ0lDQWdJR3h2YjJ0MWNGc29kRzF3SUR3OElEUXBJQ1lnTUhnelJsMGdLMXh1SUNBZ0lDQWdKejA5SjF4dUlDQWdJQ2xjYmlBZ2ZTQmxiSE5sSUdsbUlDaGxlSFJ5WVVKNWRHVnpJRDA5UFNBeUtTQjdYRzRnSUNBZ2RHMXdJRDBnS0hWcGJuUTRXMnhsYmlBdElESmRJRHc4SURncElDc2dkV2x1ZERoYmJHVnVJQzBnTVYxY2JpQWdJQ0J3WVhKMGN5NXdkWE5vS0Z4dUlDQWdJQ0FnYkc5dmEzVndXM1J0Y0NBK1BpQXhNRjBnSzF4dUlDQWdJQ0FnYkc5dmEzVndXeWgwYlhBZ1BqNGdOQ2tnSmlBd2VETkdYU0FyWEc0Z0lDQWdJQ0JzYjI5cmRYQmJLSFJ0Y0NBOFBDQXlLU0FtSURCNE0wWmRJQ3RjYmlBZ0lDQWdJQ2M5SjF4dUlDQWdJQ2xjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ3WVhKMGN5NXFiMmx1S0NjbktWeHVmVnh1SWl3aUx5b2hJR2xsWldVM05UUXVJRUpUUkMwekxVTnNZWFZ6WlNCTWFXTmxibk5sTGlCR1pYSnZjM01nUVdKdmRXdG9ZV1JwYW1Wb0lEeG9kSFJ3Y3pvdkwyWmxjbTl6Y3k1dmNtY3ZiM0JsYm5OdmRYSmpaVDRnS2k5Y2JtVjRjRzl5ZEhNdWNtVmhaQ0E5SUdaMWJtTjBhVzl1SUNoaWRXWm1aWElzSUc5bVpuTmxkQ3dnYVhOTVJTd2diVXhsYml3Z2JrSjVkR1Z6S1NCN1hHNGdJSFpoY2lCbExDQnRYRzRnSUhaaGNpQmxUR1Z1SUQwZ0tHNUNlWFJsY3lBcUlEZ3BJQzBnYlV4bGJpQXRJREZjYmlBZ2RtRnlJR1ZOWVhnZ1BTQW9NU0E4UENCbFRHVnVLU0F0SURGY2JpQWdkbUZ5SUdWQ2FXRnpJRDBnWlUxaGVDQStQaUF4WEc0Z0lIWmhjaUJ1UW1sMGN5QTlJQzAzWEc0Z0lIWmhjaUJwSUQwZ2FYTk1SU0EvSUNodVFubDBaWE1nTFNBeEtTQTZJREJjYmlBZ2RtRnlJR1FnUFNCcGMweEZJRDhnTFRFZ09pQXhYRzRnSUhaaGNpQnpJRDBnWW5WbVptVnlXMjltWm5ObGRDQXJJR2xkWEc1Y2JpQWdhU0FyUFNCa1hHNWNiaUFnWlNBOUlITWdKaUFvS0RFZ1BEd2dLQzF1UW1sMGN5a3BJQzBnTVNsY2JpQWdjeUErUGowZ0tDMXVRbWwwY3lsY2JpQWdia0pwZEhNZ0t6MGdaVXhsYmx4dUlDQm1iM0lnS0RzZ2JrSnBkSE1nUGlBd095QmxJRDBnS0dVZ0tpQXlOVFlwSUNzZ1luVm1abVZ5VzI5bVpuTmxkQ0FySUdsZExDQnBJQ3M5SUdRc0lHNUNhWFJ6SUMwOUlEZ3BJSHQ5WEc1Y2JpQWdiU0E5SUdVZ0ppQW9LREVnUER3Z0tDMXVRbWwwY3lrcElDMGdNU2xjYmlBZ1pTQStQajBnS0MxdVFtbDBjeWxjYmlBZ2JrSnBkSE1nS3owZ2JVeGxibHh1SUNCbWIzSWdLRHNnYmtKcGRITWdQaUF3T3lCdElEMGdLRzBnS2lBeU5UWXBJQ3NnWW5WbVptVnlXMjltWm5ObGRDQXJJR2xkTENCcElDczlJR1FzSUc1Q2FYUnpJQzA5SURncElIdDlYRzVjYmlBZ2FXWWdLR1VnUFQwOUlEQXBJSHRjYmlBZ0lDQmxJRDBnTVNBdElHVkNhV0Z6WEc0Z0lIMGdaV3h6WlNCcFppQW9aU0E5UFQwZ1pVMWhlQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnRJRDhnVG1GT0lEb2dLQ2h6SUQ4Z0xURWdPaUF4S1NBcUlFbHVabWx1YVhSNUtWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHMGdQU0J0SUNzZ1RXRjBhQzV3YjNjb01pd2diVXhsYmlsY2JpQWdJQ0JsSUQwZ1pTQXRJR1ZDYVdGelhHNGdJSDFjYmlBZ2NtVjBkWEp1SUNoeklEOGdMVEVnT2lBeEtTQXFJRzBnS2lCTllYUm9MbkJ2ZHlneUxDQmxJQzBnYlV4bGJpbGNibjFjYmx4dVpYaHdiM0owY3k1M2NtbDBaU0E5SUdaMWJtTjBhVzl1SUNoaWRXWm1aWElzSUhaaGJIVmxMQ0J2Wm1aelpYUXNJR2x6VEVVc0lHMU1aVzRzSUc1Q2VYUmxjeWtnZTF4dUlDQjJZWElnWlN3Z2JTd2dZMXh1SUNCMllYSWdaVXhsYmlBOUlDaHVRbmwwWlhNZ0tpQTRLU0F0SUcxTVpXNGdMU0F4WEc0Z0lIWmhjaUJsVFdGNElEMGdLREVnUER3Z1pVeGxiaWtnTFNBeFhHNGdJSFpoY2lCbFFtbGhjeUE5SUdWTllYZ2dQajRnTVZ4dUlDQjJZWElnY25RZ1BTQW9iVXhsYmlBOVBUMGdNak1nUHlCTllYUm9MbkJ2ZHlneUxDQXRNalFwSUMwZ1RXRjBhQzV3YjNjb01pd2dMVGMzS1NBNklEQXBYRzRnSUhaaGNpQnBJRDBnYVhOTVJTQS9JREFnT2lBb2JrSjVkR1Z6SUMwZ01TbGNiaUFnZG1GeUlHUWdQU0JwYzB4RklEOGdNU0E2SUMweFhHNGdJSFpoY2lCeklEMGdkbUZzZFdVZ1BDQXdJSHg4SUNoMllXeDFaU0E5UFQwZ01DQW1KaUF4SUM4Z2RtRnNkV1VnUENBd0tTQS9JREVnT2lBd1hHNWNiaUFnZG1Gc2RXVWdQU0JOWVhSb0xtRmljeWgyWVd4MVpTbGNibHh1SUNCcFppQW9hWE5PWVU0b2RtRnNkV1VwSUh4OElIWmhiSFZsSUQwOVBTQkpibVpwYm1sMGVTa2dlMXh1SUNBZ0lHMGdQU0JwYzA1aFRpaDJZV3gxWlNrZ1B5QXhJRG9nTUZ4dUlDQWdJR1VnUFNCbFRXRjRYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdaU0E5SUUxaGRHZ3VabXh2YjNJb1RXRjBhQzVzYjJjb2RtRnNkV1VwSUM4Z1RXRjBhQzVNVGpJcFhHNGdJQ0FnYVdZZ0tIWmhiSFZsSUNvZ0tHTWdQU0JOWVhSb0xuQnZkeWd5TENBdFpTa3BJRHdnTVNrZ2UxeHVJQ0FnSUNBZ1pTMHRYRzRnSUNBZ0lDQmpJQ285SURKY2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0dVZ0t5QmxRbWxoY3lBK1BTQXhLU0I3WEc0Z0lDQWdJQ0IyWVd4MVpTQXJQU0J5ZENBdklHTmNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZG1Gc2RXVWdLejBnY25RZ0tpQk5ZWFJvTG5CdmR5Z3lMQ0F4SUMwZ1pVSnBZWE1wWEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gyWVd4MVpTQXFJR01nUGowZ01pa2dlMXh1SUNBZ0lDQWdaU3NyWEc0Z0lDQWdJQ0JqSUM4OUlESmNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9aU0FySUdWQ2FXRnpJRDQ5SUdWTllYZ3BJSHRjYmlBZ0lDQWdJRzBnUFNBd1hHNGdJQ0FnSUNCbElEMGdaVTFoZUZ4dUlDQWdJSDBnWld4elpTQnBaaUFvWlNBcklHVkNhV0Z6SUQ0OUlERXBJSHRjYmlBZ0lDQWdJRzBnUFNBb0tIWmhiSFZsSUNvZ1l5a2dMU0F4S1NBcUlFMWhkR2d1Y0c5M0tESXNJRzFNWlc0cFhHNGdJQ0FnSUNCbElEMGdaU0FySUdWQ2FXRnpYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUcwZ1BTQjJZV3gxWlNBcUlFMWhkR2d1Y0c5M0tESXNJR1ZDYVdGeklDMGdNU2tnS2lCTllYUm9MbkJ2ZHlneUxDQnRUR1Z1S1Z4dUlDQWdJQ0FnWlNBOUlEQmNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQm1iM0lnS0RzZ2JVeGxiaUErUFNBNE95QmlkV1ptWlhKYmIyWm1jMlYwSUNzZ2FWMGdQU0J0SUNZZ01IaG1aaXdnYVNBclBTQmtMQ0J0SUM4OUlESTFOaXdnYlV4bGJpQXRQU0E0S1NCN2ZWeHVYRzRnSUdVZ1BTQW9aU0E4UENCdFRHVnVLU0I4SUcxY2JpQWdaVXhsYmlBclBTQnRUR1Z1WEc0Z0lHWnZjaUFvT3lCbFRHVnVJRDRnTURzZ1luVm1abVZ5VzI5bVpuTmxkQ0FySUdsZElEMGdaU0FtSURCNFptWXNJR2tnS3owZ1pDd2daU0F2UFNBeU5UWXNJR1ZNWlc0Z0xUMGdPQ2tnZTMxY2JseHVJQ0JpZFdabVpYSmJiMlptYzJWMElDc2dhU0F0SUdSZElIdzlJSE1nS2lBeE1qaGNibjFjYmlJc0luWmhjaUIwYjFOMGNtbHVaeUE5SUh0OUxuUnZVM1J5YVc1bk8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRUZ5Y21GNUxtbHpRWEp5WVhrZ2ZId2dablZ1WTNScGIyNGdLR0Z5Y2lrZ2UxeHVJQ0J5WlhSMWNtNGdkRzlUZEhKcGJtY3VZMkZzYkNoaGNuSXBJRDA5SUNkYmIySnFaV04wSUVGeWNtRjVYU2M3WEc1OU8xeHVJaXdpTHk4Z2MyOTFjbU5sT2lCbmIyOW5iR1V2Y0hKdmRHOWlkV1l2WkhWeVlYUnBiMjR1Y0hKdmRHOWNiaThxS2x4dUlDb2dRR1pwYkdWdmRtVnlkbWxsZDF4dUlDb2dRR1Z1YUdGdVkyVmhZbXhsWEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlMjFwYzNOcGJtZFNaWEYxYVhKbGZTQnlaWEJ2Y25SeklHVnljbTl5SUc5dUlHbHRjR3hwWTJsMElIUjVjR1VnZFhOaFoyVnpMbHh1SUNvZ1FITjFjSEJ5WlhOeklIdHRaWE56WVdkbFEyOXVkbVZ1ZEdsdmJuTjlJRXBUSUVOdmJYQnBiR1Z5SUhKbGNHOXlkSE1nWVc0Z1pYSnliM0lnYVdZZ1lTQjJZWEpwWVdKc1pTQnZjbHh1SUNvZ0lDQWdJR1pwWld4a0lITjBZWEowY3lCM2FYUm9JQ2ROVTBkZkp5QmhibVFnYVhOdUozUWdZU0IwY21GdWMyeGhkR0ZpYkdVZ2JXVnpjMkZuWlM1Y2JpQXFJRUJ3ZFdKc2FXTmNiaUFxTDF4dUx5OGdSMFZPUlZKQlZFVkVJRU5QUkVVZ0xTMGdSRThnVGs5VUlFVkVTVlFoWEc0dktpQmxjMnhwYm5RdFpHbHpZV0pzWlNBcUwxeHVMeThnUUhSekxXNXZZMmhsWTJ0Y2JseHVkbUZ5SUdwemNHSWdQU0J5WlhGMWFYSmxLQ2RuYjI5bmJHVXRjSEp2ZEc5aWRXWW5LVHRjYm5aaGNpQm5iMjluSUQwZ2FuTndZanRjYm5aaGNpQm5iRzlpWVd3Z1BTQkdkVzVqZEdsdmJpZ25jbVYwZFhKdUlIUm9hWE1uS1NncE8xeHVYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dUp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjRnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RWRYSmhkR2x2YmljN1hHNTlYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RWRYSmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNHVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNTlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RWRYSmhkR2x2Ymk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjMlZqYjI1a2N6b2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F4TENBd0tTeGNiaUFnSUNCdVlXNXZjem9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeUxDQXdLVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjR1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNDdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFZFhKaGRHbHZibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrU1c1ME5qUW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVMlZqYjI1a2N5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0hKbFlXUmxjaTV5WldGa1NXNTBNeklvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdWIzTW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RWRYSmhkR2x2Ymk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJuMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGTmxZMjl1WkhNb0tUdGNiaUFnYVdZZ0tHWWdJVDA5SURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkpiblEyTkNoY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJPWVc1dmN5Z3BPMXh1SUNCcFppQW9aaUFoUFQwZ01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVWx1ZERNeUtGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYVc1ME5qUWdjMlZqYjI1a2N5QTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJpNXdjbTkwYjNSNWNHVXVaMlYwVTJWamIyNWtjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0F3S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dUxuQnliM1J2ZEhsd1pTNXpaWFJUWldOdmJtUnpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkpiblJHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2FXNTBNeklnYm1GdWIzTWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEU1aGJtOXpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJREFwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRTVoYm05eklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOSmJuUkdhV1ZzWkNoMGFHbHpMQ0F5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYm1kdmIyY3ViMkpxWldOMExtVjRkR1Z1WkNobGVIQnZjblJ6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXBPMXh1SWl3aUx5OGdjMjkxY21ObE9pQm5iMjluYkdVdmNISnZkRzlpZFdZdllXNTVMbkJ5YjNSdlhHNHZLaXBjYmlBcUlFQm1hV3hsYjNabGNuWnBaWGRjYmlBcUlFQmxibWhoYm1ObFlXSnNaVnh1SUNvZ1FITjFjSEJ5WlhOeklIdHRhWE56YVc1blVtVnhkV2x5WlgwZ2NtVndiM0owY3lCbGNuSnZjaUJ2YmlCcGJYQnNhV05wZENCMGVYQmxJSFZ6WVdkbGN5NWNiaUFxSUVCemRYQndjbVZ6Y3lCN2JXVnpjMkZuWlVOdmJuWmxiblJwYjI1emZTQktVeUJEYjIxd2FXeGxjaUJ5WlhCdmNuUnpJR0Z1SUdWeWNtOXlJR2xtSUdFZ2RtRnlhV0ZpYkdVZ2IzSmNiaUFxSUNBZ0lDQm1hV1ZzWkNCemRHRnlkSE1nZDJsMGFDQW5UVk5IWHljZ1lXNWtJR2x6YmlkMElHRWdkSEpoYm5Oc1lYUmhZbXhsSUcxbGMzTmhaMlV1WEc0Z0tpQkFjSFZpYkdsalhHNGdLaTljYmk4dklFZEZUa1ZTUVZSRlJDQkRUMFJGSUMwdElFUlBJRTVQVkNCRlJFbFVJVnh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnS2k5Y2JpOHZJRUIwY3kxdWIyTm9aV05yWEc1Y2JuWmhjaUJxYzNCaUlEMGdjbVZ4ZFdseVpTZ25aMjl2WjJ4bExYQnliM1J2WW5WbUp5azdYRzUyWVhJZ1oyOXZaeUE5SUdwemNHSTdYRzUyWVhJZ1oyeHZZbUZzSUQwZ1JuVnVZM1JwYjI0b0ozSmxkSFZ5YmlCMGFHbHpKeWtvS1R0Y2JseHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua25MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua2dQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVNjN1hHNTlYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVTNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmw5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmt1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lIUjVjR1ZWY213NklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpa3NYRzRnSUNBZ2RtRnNkV1U2SUcxelp5NW5aWFJXWVd4MVpWOWhjMEkyTkNncFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGUjVjR1ZWY213b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F5T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIc2hWV2x1ZERoQmNuSmhlWDBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbmwwWlhNb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFZtRnNkV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlVlWEJsVlhKc0tDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWbUZzZFdWZllYTlZPQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxRbmwwWlhNb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2dkSGx3WlY5MWNtd2dQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG5CeWIzUnZkSGx3WlM1blpYUlVlWEJsVlhKc0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVM1d2NtOTBiM1I1Y0dVdWMyVjBWSGx3WlZWeWJDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSjVkR1Z6SUhaaGJIVmxJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdleUVvYzNSeWFXNW5mRlZwYm5RNFFYSnlZWGtwZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbkJ5YjNSdmRIbHdaUzVuWlhSV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoS0hOMGNtbHVaM3hWYVc1ME9FRnljbUY1S1gwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWVYUmxjeUIyWVd4MVpTQTlJREk3WEc0Z0tpQlVhR2x6SUdseklHRWdkSGx3WlMxamIyNTJaWEp6YVc5dUlIZHlZWEJ3WlhJZ1lYSnZkVzVrSUdCblpYUldZV3gxWlNncFlGeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxuQnliM1J2ZEhsd1pTNW5aWFJXWVd4MVpWOWhjMEkyTkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WW5sMFpYTkJjMEkyTkNoY2JpQWdJQ0FnSUhSb2FYTXVaMlYwVm1Gc2RXVW9LU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKNWRHVnpJSFpoYkhWbElEMGdNanRjYmlBcUlFNXZkR1VnZEdoaGRDQlZhVzUwT0VGeWNtRjVJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUWdiMjRnWVd4c0lHSnliM2R6WlhKekxseHVJQ29nUUhObFpTQm9kSFJ3T2k4dlkyRnVhWFZ6WlM1amIyMHZWV2x1ZERoQmNuSmhlVnh1SUNvZ1ZHaHBjeUJwY3lCaElIUjVjR1V0WTI5dWRtVnljMmx2YmlCM2NtRndjR1Z5SUdGeWIzVnVaQ0JnWjJWMFZtRnNkV1VvS1dCY2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbkJ5YjNSdmRIbHdaUzVuWlhSV1lXeDFaVjloYzFVNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RlZhVzUwT0VGeWNtRjVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbUo1ZEdWelFYTlZPQ2hjYmlBZ0lDQWdJSFJvYVhNdVoyVjBWbUZzZFdVb0tTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJU2h6ZEhKcGJtZDhWV2x1ZERoQmNuSmhlU2w5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVCYm5rdWNISnZkRzkwZVhCbExuTmxkRlpoYkhWbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOQ2VYUmxjMFpwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dVoyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a0tHVjRjRzl5ZEhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaWs3WEc0dktpQlVhR2x6SUdOdlpHVWdkMmxzYkNCaVpTQnBibk5sY25SbFpDQnBiblJ2SUdkbGJtVnlZWFJsWkNCamIyUmxJR1p2Y2x4dUlDb2daMjl2WjJ4bEwzQnliM1J2WW5WbUwyRnVlUzV3Y205MGJ5NGdLaTljYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhSb1pTQjBlWEJsSUc1aGJXVWdZMjl1ZEdGcGJtVmtJR2x1SUhSb2FYTWdhVzV6ZEdGdVkyVXNJR2xtSUdGdWVTNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaM3gxYm1SbFptbHVaV1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VjSEp2ZEc5MGVYQmxMbWRsZEZSNWNHVk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxtZGxkRlI1Y0dWVmNtd29LUzV6Y0d4cGRDZ25MeWNwTG5CdmNDZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkJoWTJ0eklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHbHVjM1JoYm1ObElHbHVkRzhnZEdocGN5QkJibmt1WEc0Z0tpQkdiM0lnWW1sdVlYSjVJR1p2Y20xaGRDQjFjMkZuWlNCdmJteDVMbHh1SUNvZ1FIQmhjbUZ0SUhzaFZXbHVkRGhCY25KaGVYMGdjMlZ5YVdGc2FYcGxaQ0JVYUdVZ2MyVnlhV0ZzYVhwbFpDQmtZWFJoSUhSdklIQmhZMnN1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JtRnRaU0JVYUdVZ2RIbHdaU0J1WVcxbElHOW1JSFJvYVhNZ2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WnoxOUlHOXdkRjkwZVhCbFZYSnNVSEpsWm1sNElIUm9aU0IwZVhCbElGVlNUQ0J3Y21WbWFYZ3VYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVCYm5rdWNISnZkRzkwZVhCbExuQmhZMnNnUFNCbWRXNWpkR2x2YmloelpYSnBZV3hwZW1Wa0xDQnVZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5d2RGOTBlWEJsVlhKc1VISmxabWw0S1NCN1hHNGdJR2xtSUNnaGIzQjBYM1I1Y0dWVmNteFFjbVZtYVhncElIdGNiaUFnSUNCdmNIUmZkSGx3WlZWeWJGQnlaV1pwZUNBOUlDZDBlWEJsTG1kdmIyZHNaV0Z3YVhNdVkyOXRMeWM3WEc0Z0lIMWNibHh1SUNCcFppQW9iM0IwWDNSNWNHVlZjbXhRY21WbWFYZ3VjM1ZpYzNSeUtDMHhLU0FoUFNBbkx5Y3BJSHRjYmlBZ0lDQjBhR2x6TG5ObGRGUjVjR1ZWY213b2IzQjBYM1I1Y0dWVmNteFFjbVZtYVhnZ0t5QW5MeWNnS3lCdVlXMWxLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0IwYUdsekxuTmxkRlI1Y0dWVmNtd29iM0IwWDNSNWNHVlZjbXhRY21WbWFYZ2dLeUJ1WVcxbEtUdGNiaUFnZlZ4dVhHNGdJSFJvYVhNdWMyVjBWbUZzZFdVb2MyVnlhV0ZzYVhwbFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSFJsYlhCc1lYUmxJRlJjYmlBcUlGVnVjR0ZqYTNNZ2RHaHBjeUJCYm5rZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1S0ZWcGJuUTRRWEp5WVhrcE9sUjlJR1JsYzJWeWFXRnNhWHBsSUVaMWJtTjBhVzl1SUhSb1lYUWdkMmxzYkNCa1pYTmxjbWxoYkdsNlpWeHVJQ29nSUNBZ0lIUm9aU0JpYVc1aGNua2daR0YwWVNCd2NtOXdaWEpzZVM1Y2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsSUZSb1pTQmxlSEJsWTNSbFpDQjBlWEJsSUc1aGJXVWdiMllnZEdocGN5QnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlejlVZlNCSlppQjBhR1VnYm1GdFpTQnRZWFJqYUdWa0lIUm9aU0JsZUhCbFkzUmxaQ0J1WVcxbExDQnlaWFIxY201eklIUm9aU0JrWlhObGNtbGhiR2w2WldSY2JpQXFJQ0FnSUNCdlltcGxZM1FzSUc5MGFHVnlkMmx6WlNCeVpYUjFjbTV6SUc1MWJHd3VYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVCYm5rdWNISnZkRzkwZVhCbExuVnVjR0ZqYXlBOUlHWjFibU4wYVc5dUtHUmxjMlZ5YVdGc2FYcGxMQ0J1WVcxbEtTQjdYRzRnSUdsbUlDaDBhR2x6TG1kbGRGUjVjR1ZPWVcxbEtDa2dQVDBnYm1GdFpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCa1pYTmxjbWxoYkdsNlpTaDBhR2x6TG1kbGRGWmhiSFZsWDJGelZUZ29LU2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYm4wN1hHNGlMQ0pwYlhCdmNuUWdleUJRY205MGIySjFaazFsYzNOaFoyVWdmU0JtY205dElGd2lRR2x0Y0hKdlltRmliR1V0Wlc1bkwyZHljR010ZDJWaUwyUnBjM1F2ZEhsd2FXNW5jeTl0WlhOellXZGxYQ0k3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJDWVhObFEyaGhibTVsYkNCN1hHNWNkSEIxWW14cFl5QnlaV0ZrYjI1c2VTQnlaV0ZrZVRvZ1VISnZiV2x6WlR4aGJuaytPMXh1WEc1Y2RIQnlhWFpoZEdVZ2NtVmhaRzl1YkhrZ2NHVmxja052Ym00NklGSlVRMUJsWlhKRGIyNXVaV04wYVc5dU8xeHVYSFJ3Y21sMllYUmxJSEpsWVdSdmJteDVJR1JoZEdGRGFHRnVibVZzT2lCU1ZFTkVZWFJoUTJoaGJtNWxiRHRjYmx4MGNISnBkbUYwWlNCd1VtVnpiMngyWlRvZ0tIWmhiSFZsT2lCaGJua3BJRDArSUhadmFXUTdYRzVjYmx4MGNISnBkbUYwWlNCamJHOXpaV1E2SUdKdmIyeGxZVzQ3WEc1Y2RIQnlhWFpoZEdVZ1kyeHZjMlZrVW1WaGMyOXVQem9nUlhKeWIzSTdYRzVjYmx4MGNISnZkR1ZqZEdWa0lHMWhlRVJoZEdGRGFHRnVibVZzVTJsNlpTQTlJREUyTXpnME8xeHVYRzVjZEdOdmJuTjBjblZqZEc5eUtIQmxaWEpEYjI1dU9pQlNWRU5RWldWeVEyOXVibVZqZEdsdmJpd2daR0YwWVVOb1lXNXVaV3c2SUZKVVEwUmhkR0ZEYUdGdWJtVnNLU0I3WEc1Y2RGeDBkR2hwY3k1d1pXVnlRMjl1YmlBOUlIQmxaWEpEYjI1dU8xeHVYSFJjZEhSb2FYTXVaR0YwWVVOb1lXNXVaV3dnUFNCa1lYUmhRMmhoYm01bGJEdGNibHh1WEhSY2RIUm9hWE11Y21WaFpIa2dQU0J1WlhjZ1VISnZiV2x6WlR4aGJuaytLSEpsYzI5c2RtVWdQVDRnZTF4dVhIUmNkRngwZEdocGN5NXdVbVZ6YjJ4MlpTQTlJSEpsYzI5c2RtVTdYRzVjZEZ4MGZTbGNibHh1WEhSY2RHUmhkR0ZEYUdGdWJtVnNMbTl1YjNCbGJpQTlJQ2dwSUQwK0lIUm9hWE11YjI1RGFHRnVibVZzVDNCbGJpZ3BPMXh1WEhSY2RHUmhkR0ZEYUdGdWJtVnNMbTl1WTJ4dmMyVWdQU0FvS1NBOVBpQjBhR2x6TG05dVEyaGhibTVsYkVOc2IzTmxLQ2s3WEc1Y2RGeDBaR0YwWVVOb1lXNXVaV3d1YjI1bGNuSnZjaUE5SUNobGRqb2dVbFJEUlhKeWIzSkZkbVZ1ZENrZ1BUNGdkR2hwY3k1dmJrTm9ZVzV1Wld4RmNuSnZjaWhsZGlrN1hHNWNibHgwWEhSd1pXVnlRMjl1Ymk1dmJtbGpaV052Ym01bFkzUnBiMjV6ZEdGMFpXTm9ZVzVuWlNBOUlDZ3BJRDArSUdOdmJuTnZiR1V1Ykc5bktIQmxaWEpEYjI1dUxtbGpaVU52Ym01bFkzUnBiMjVUZEdGMFpTazdYRzVjZEgxY2JseHVYSFJ3ZFdKc2FXTWdZMnh2YzJVb0tTQjdYRzVjZEZ4MGRHaHBjeTVqYkc5elpWZHBkR2hTWldGemIyNG9kVzVrWldacGJtVmtLVHRjYmx4MGZWeHVYRzVjZEhCMVlteHBZeUJwYzBOc2IzTmxaQ2dwSUh0Y2JseDBYSFJ5WlhSMWNtNGdkR2hwY3k1amJHOXpaV1JjYmx4MGZWeHVYRzVjZEhCMVlteHBZeUJwYzBOc2IzTmxaRkpsWVhOdmJpZ3BJSHRjYmx4MFhIUnlaWFIxY200Z2RHaHBjeTVqYkc5elpXUlNaV0Z6YjI1Y2JseDBmVnh1WEc1Y2RIQnlhWFpoZEdVZ1kyeHZjMlZYYVhSb1VtVmhjMjl1S0dWeWNqODZJRVZ5Y205eUtTQjdYRzVjZEZ4MGFXWWdLSFJvYVhNdVkyeHZjMlZrS1NCN1hHNWNkRngwWEhSeVpYUjFjbTQ3WEc1Y2RGeDBmVnh1WEhSY2RIUm9hWE11WTJ4dmMyVmtJRDBnZEhKMVpUdGNibHgwWEhSMGFHbHpMbU5zYjNObFpGSmxZWE52YmlBOUlHVnljanRjYmx4MFhIUjBhR2x6TG5CbFpYSkRiMjV1TG1Oc2IzTmxLQ2s3WEc1Y2RIMWNibHh1WEhSd2NtbDJZWFJsSUc5dVEyaGhibTVsYkU5d1pXNG9LU0I3WEc1Y2RGeDBkR2hwY3k1d1VtVnpiMngyWlNoMWJtUmxabWx1WldRcE8xeHVYSFI5WEc1Y2JseDBjSEpwZG1GMFpTQnZia05vWVc1dVpXeERiRzl6WlNncElIdGNibHgwWEhSMGFHbHpMbU5zYjNObFYybDBhRkpsWVhOdmJpaHVaWGNnUlhKeWIzSW9YQ0prWVhSaElHTm9ZVzV1Wld3Z1kyeHZjMlZrWENJcEtUdGNibHgwZlZ4dVhHNWNkSEJ5YVhaaGRHVWdiMjVEYUdGdWJtVnNSWEp5YjNJb1pYWTZJRkpVUTBWeWNtOXlSWFpsYm5RcElIdGNibHgwWEhSamIyNXpiMnhsTG1WeWNtOXlLRndpWTJoaGJtNWxiQ0JsY25KdmNsd2lMQ0JsZGlrN1hHNWNkRngwZEdocGN5NWpiRzl6WlZkcGRHaFNaV0Z6YjI0b1pYWXVaWEp5YjNJcE8xeHVYSFI5WEc1Y2JseDBjSEp2ZEdWamRHVmtJSGR5YVhSbEtHMXpaem9nVUhKdmRHOWlkV1pOWlhOellXZGxLU0I3WEc1Y2RGeDBkR2hwY3k1a1lYUmhRMmhoYm01bGJDNXpaVzVrS0cxelp5NXpaWEpwWVd4cGVtVkNhVzVoY25rb0tTazdYRzVjZEgxY2JuMWNiaUlzSW1sdGNHOXlkQ0I3SUdkeWNHTWdmU0JtY205dElGd2lRR2x0Y0hKdlltRmliR1V0Wlc1bkwyZHljR010ZDJWaVhDSTdYRzVwYlhCdmNuUWdleUJOWlhSaFpHRjBZU3dnVUdGamEyVjBUV1Z6YzJGblpTd2dVbVZ4ZFdWemRFaGxZV1JsY25Nc0lGSmxjWFZsYzNSTlpYTnpZV2RsTENCU1pYTndiMjV6WlN3Z1VtVnpjRzl1YzJWSVpXRmtaWEp6TENCU1pYTndiMjV6WlUxbGMzTmhaMlVzSUZKbGMzQnZibk5sVkhKaGFXeGxjbk1zSUZOMGNtVmhiU3dnVTNSeWFXNW5jeUI5SUdaeWIyMGdYQ0l1TDJkbGJpOXdjbTkwYnk5eWNHTXZkMlZpY25SakwzWXhMMmR5Y0dOZmNHSmNJanRjYm1sdGNHOXlkQ0I3SUVKaGMyVlRkSEpsWVcwZ2ZTQm1jbTl0SUZ3aUxpOUNZWE5sVTNSeVpXRnRYQ0k3WEc1cGJYQnZjblFnZXlCRGJHbGxiblJEYUdGdWJtVnNJSDBnWm5KdmJTQmNJaTR2UTJ4cFpXNTBRMmhoYm01bGJGd2lPMXh1WEc0dkx5QnpaV1VnWjI5c1lXNW5MMk5zYVdWdWRGOXpkSEpsWVcwdVoyOWNibU52Ym5OMElHMWhlRkpsY1hWbGMzUk5aWE56WVdkbFVHRmphMlYwUkdGMFlWTnBlbVVnUFNBeE5qTTNNenRjYmx4dVpYaHdiM0owSUdOc1lYTnpJRU5zYVdWdWRGTjBjbVZoYlNCbGVIUmxibVJ6SUVKaGMyVlRkSEpsWVcwZ2FXMXdiR1Z0Wlc1MGN5Qm5jbkJqTGxSeVlXNXpjRzl5ZENCN1hHNWNkSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2dZMmhoYm01bGJEb2dRMnhwWlc1MFEyaGhibTVsYkR0Y2JseDBjSEpwZG1GMFpTQm9aV0ZrWlhKelVtVmpaV2wyWldRNklHSnZiMnhsWVc0Z1BTQm1ZV3h6WlR0Y2JseDBjSEpwZG1GMFpTQjBjbUZwYkdWeWMxSmxZMlZwZG1Wa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNWNibHgwWTI5dWMzUnlkV04wYjNJb1kyaGhibTVsYkRvZ1EyeHBaVzUwUTJoaGJtNWxiQ3dnYzNSeVpXRnRPaUJUZEhKbFlXMHNJRzl1Ukc5dVpUb2dLR2xrT2lCdWRXMWlaWElwSUQwK0lIWnZhV1FzSUc5d2RITTZJR2R5Y0dNdVZISmhibk53YjNKMFQzQjBhVzl1Y3lrZ2UxeHVYSFJjZEhOMWNHVnlLSE4wY21WaGJTd2diMjVFYjI1bExDQnZjSFJ6S1R0Y2JseDBYSFIwYUdsekxtTm9ZVzV1Wld3Z1BTQmphR0Z1Ym1Wc08xeHVYSFI5WEc1Y2JseDBjSFZpYkdsaklITjBZWEowS0cxbGRHRmtZWFJoT2lCbmNuQmpMazFsZEdGa1lYUmhLU0I3WEc1Y2RGeDBZMjl1YzNRZ2JXVjBhRzlrSUQwZ1lDOGtlM1JvYVhNdWIzQjBjeTV0WlhSb2IyUkVaV1pwYm1sMGFXOXVMbk5sY25acFkyVXVjMlZ5ZG1salpVNWhiV1Y5THlSN2RHaHBjeTV2Y0hSekxtMWxkR2h2WkVSbFptbHVhWFJwYjI0dWJXVjBhRzlrVG1GdFpYMWdPMXh1WEhSY2RHTnZibk4wSUhKbGNYVmxjM1JJWldGa1pYSnpJRDBnYm1WM0lGSmxjWFZsYzNSSVpXRmtaWEp6S0NrN1hHNWNkRngwY21WeGRXVnpkRWhsWVdSbGNuTXVjMlYwVFdWMGFHOWtLRzFsZEdodlpDazdYRzVjZEZ4MGNtVnhkV1Z6ZEVobFlXUmxjbk11YzJWMFRXVjBZV1JoZEdFb1puSnZiVWRTVUVOTlpYUmhaR0YwWVNodFpYUmhaR0YwWVNrcE8xeHVYRzVjZEZ4MGRISjVJSHRjYmx4MFhIUmNkSFJvYVhNdVkyaGhibTVsYkM1M2NtbDBaVWhsWVdSbGNuTW9kR2hwY3k1emRISmxZVzBzSUhKbGNYVmxjM1JJWldGa1pYSnpLVHRjYmx4MFhIUjlJR05oZEdOb0lDaGxLU0I3WEc1Y2RGeDBYSFJqYjI1emIyeGxMbVZ5Y205eUtGd2laWEp5YjNJZ2QzSnBkR2x1WnlCb1pXRmtaWEp6WENJc0lHVXBPMXh1WEhSY2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb1pTazdYRzVjZEZ4MGZWeHVYSFI5WEc1Y2JseDBjSFZpYkdsaklITmxibVJOWlhOellXZGxLRzF6WjBKNWRHVnpQem9nVldsdWREaEJjbkpoZVNrZ2UxeHVYSFJjZEM4dklITnJhWEFnWm5KaGJXVWdhR1ZoWkdWeUlHSjVkR1Z6WEc1Y2RGeDBhV1lnS0cxelowSjVkR1Z6S1NCN1hHNWNkRngwWEhSMGFHbHpMbmR5YVhSbFRXVnpjMkZuWlNobVlXeHpaU3dnYlhOblFubDBaWE11YzJ4cFkyVW9OU2twTzF4dVhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RIMWNibHgwWEhSMGFHbHpMbmR5YVhSbFRXVnpjMkZuWlNobVlXeHpaU3dnZFc1a1pXWnBibVZrS1R0Y2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCbWFXNXBjMmhUWlc1a0tDa2dlMXh1WEhSY2RHbG1JQ2doZEdocGN5NXZjSFJ6TG0xbGRHaHZaRVJsWm1sdWFYUnBiMjR1Y21WeGRXVnpkRk4wY21WaGJTa2dlMXh1WEhSY2RGeDBjbVYwZFhKdVhHNWNkRngwZlZ4dVhIUmNkSFJvYVhNdWQzSnBkR1ZOWlhOellXZGxLSFJ5ZFdVc0lIVnVaR1ZtYVc1bFpDazdYRzVjZEgxY2JseHVYSFJ3Y21sMllYUmxJSGR5YVhSbFRXVnpjMkZuWlNobGIzTTZJR0p2YjJ4bFlXNHNJRzF6WjBKNWRHVnpQem9nVldsdWREaEJjbkpoZVNrZ2UxeHVYSFJjZEhSeWVTQjdYRzVjZEZ4MFhIUnBaaUFvSVcxelowSjVkR1Z6SUh4OElHMXpaMEo1ZEdWekxteGxibWQwYUNBOVBTQXdLU0I3WEc1Y2RGeDBYSFJjZEdOdmJuTjBJSEJoWTJ0bGRDQTlJRzVsZHlCUVlXTnJaWFJOWlhOellXZGxLQ2s3WEc1Y2RGeDBYSFJjZEhCaFkydGxkQzV6WlhSRmIyMG9kSEoxWlNrN1hHNWNkRngwWEhSY2RHTnZibk4wSUhKbGNYVmxjM1JOWlhOellXZGxJRDBnYm1WM0lGSmxjWFZsYzNSTlpYTnpZV2RsS0NrN1hHNWNkRngwWEhSY2RISmxjWFZsYzNSTlpYTnpZV2RsTG5ObGRFaGhjMDFsYzNOaFoyVW9JU0Z0YzJkQ2VYUmxjeWs3WEc1Y2RGeDBYSFJjZEhKbGNYVmxjM1JOWlhOellXZGxMbk5sZEZCaFkydGxkRTFsYzNOaFoyVW9jR0ZqYTJWMEtUdGNibHgwWEhSY2RGeDBjbVZ4ZFdWemRFMWxjM05oWjJVdWMyVjBSVzl6S0dWdmN5azdYRzVjZEZ4MFhIUmNkSFJvYVhNdVkyaGhibTVsYkM1M2NtbDBaVTFsYzNOaFoyVW9kR2hwY3k1emRISmxZVzBzSUhKbGNYVmxjM1JOWlhOellXZGxLVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFIzYUdsc1pTQW9iWE5uUW5sMFpYTXViR1Z1WjNSb0lDRTlQU0F3S1NCN1hHNWNkRngwWEhSY2RHTnZibk4wSUdGdGIzVnVkRlJ2VTJWdVpDQTlJRTFoZEdndWJXbHVLRzF6WjBKNWRHVnpMbXhsYm1kMGFDd2diV0Y0VW1WeGRXVnpkRTFsYzNOaFoyVlFZV05yWlhSRVlYUmhVMmw2WlNrN1hHNWNkRngwWEhSY2RHTnZibk4wSUhCaFkydGxkQ0E5SUc1bGR5QlFZV05yWlhSTlpYTnpZV2RsS0NrN1hHNWNkRngwWEhSY2RIQmhZMnRsZEM1elpYUkVZWFJoS0cxelowSjVkR1Z6TG5Oc2FXTmxLREFzSUdGdGIzVnVkRlJ2VTJWdVpDa3BPMXh1WEhSY2RGeDBYSFJ0YzJkQ2VYUmxjeUE5SUcxelowSjVkR1Z6TG5Oc2FXTmxLR0Z0YjNWdWRGUnZVMlZ1WkNrN1hHNWNkRngwWEhSY2RHbG1JQ2h0YzJkQ2VYUmxjeTVzWlc1bmRHZ2dQVDA5SURBcElIdGNibHgwWEhSY2RGeDBYSFJ3WVdOclpYUXVjMlYwUlc5dEtIUnlkV1VwTzF4dVhIUmNkRngwWEhSOVhHNWNkRngwWEhSY2RHTnZibk4wSUhKbGNYVmxjM1JOWlhOellXZGxJRDBnYm1WM0lGSmxjWFZsYzNSTlpYTnpZV2RsS0NrN1hHNWNkRngwWEhSY2RISmxjWFZsYzNSTlpYTnpZV2RsTG5ObGRFaGhjMDFsYzNOaFoyVW9JU0Z0YzJkQ2VYUmxjeWs3WEc1Y2RGeDBYSFJjZEhKbGNYVmxjM1JOWlhOellXZGxMbk5sZEZCaFkydGxkRTFsYzNOaFoyVW9jR0ZqYTJWMEtUdGNibHgwWEhSY2RGeDBjbVZ4ZFdWemRFMWxjM05oWjJVdWMyVjBSVzl6S0dWdmN5azdYRzVjZEZ4MFhIUmNkSFJvYVhNdVkyaGhibTVsYkM1M2NtbDBaVTFsYzNOaFoyVW9kR2hwY3k1emRISmxZVzBzSUhKbGNYVmxjM1JOWlhOellXZGxLVHRjYmx4MFhIUmNkSDFjYmx4MFhIUjlJR05oZEdOb0lDaGxLU0I3WEc1Y2RGeDBYSFJqYjI1emIyeGxMbVZ5Y205eUtGd2laWEp5YjNJZ2QzSnBkR2x1WnlCdFpYTnpZV2RsWENJc0lHVXBPMXh1WEhSY2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb1pTazdYRzVjZEZ4MGZWeHVYSFI5WEc1Y2JseDBjSFZpYkdsaklHOXVVbVZ6Y0c5dWMyVW9jbVZ6Y0RvZ1VtVnpjRzl1YzJVcElIdGNibHgwWEhSemQybDBZMmdnS0hKbGMzQXVaMlYwVkhsd1pVTmhjMlVvS1NrZ2UxeHVYSFJjZEZ4MFkyRnpaU0JTWlhOd2IyNXpaUzVVZVhCbFEyRnpaUzVJUlVGRVJWSlRPbHh1WEhSY2RGeDBYSFJwWmlBb2RHaHBjeTVvWldGa1pYSnpVbVZqWldsMlpXUXBJSHRjYmx4MFhIUmNkRngwWEhSMGFHbHpMbU5zYjNObFYybDBhRkpsWTNaRmNuSnZjaWh1WlhjZ1JYSnliM0lvWENKb1pXRmtaWEp6SUdGc2NtVmhaSGtnY21WalpXbDJaV1JjSWlrcE8xeHVYSFJjZEZ4MFhIUmNkSEpsZEhWeWJseHVYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUmNkR2xtSUNoMGFHbHpMblJ5WVdsc1pYSnpVbVZqWldsMlpXUXBJSHRjYmx4MFhIUmNkRngwWEhSMGFHbHpMbU5zYjNObFYybDBhRkpsWTNaRmNuSnZjaWh1WlhjZ1JYSnliM0lvWENKb1pXRmtaWEp6SUhKbFkyVnBkbVZrSUdGbWRHVnlJSFJ5WVdsc1pYSnpYQ0lwS1R0Y2JseDBYSFJjZEZ4MFhIUnlaWFIxY201Y2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUjBhR2x6TG5CeWIyTmxjM05JWldGa1pYSnpLSEpsYzNBdVoyVjBTR1ZoWkdWeWN5Z3BJU2s3WEc1Y2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBZMkZ6WlNCU1pYTndiMjV6WlM1VWVYQmxRMkZ6WlM1TlJWTlRRVWRGT2x4dVhIUmNkRngwWEhScFppQW9JWFJvYVhNdWFHVmhaR1Z5YzFKbFkyVnBkbVZrS1NCN1hHNWNkRngwWEhSY2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb2JtVjNJRVZ5Y205eUtGd2lhR1ZoWkdWeWN5QnViM1FnZVdWMElISmxZMlZwZG1Wa1hDSXBLVHRjYmx4MFhIUmNkRngwWEhSeVpYUjFjbTVjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhScFppQW9kR2hwY3k1MGNtRnBiR1Z5YzFKbFkyVnBkbVZrS1NCN1hHNWNkRngwWEhSY2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb2JtVjNJRVZ5Y205eUtGd2lhR1ZoWkdWeWN5QnlaV05sYVhabFpDQmhablJsY2lCMGNtRnBiR1Z5YzF3aUtTazdYRzVjZEZ4MFhIUmNkRngwY21WMGRYSnVYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkRngwZEdocGN5NXdjbTlqWlhOelRXVnpjMkZuWlNoeVpYTndMbWRsZEUxbGMzTmhaMlVvS1NFcE8xeHVYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEdOaGMyVWdVbVZ6Y0c5dWMyVXVWSGx3WlVOaGMyVXVWRkpCU1V4RlVsTTZYRzVjZEZ4MFhIUmNkSFJvYVhNdWNISnZZMlZ6YzFSeVlXbHNaWEp6S0hKbGMzQXVaMlYwVkhKaGFXeGxjbk1vS1NFcE8xeHVYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEdSbFptRjFiSFE2WEc1Y2RGeDBYSFJjZEdOdmJuTnZiR1V1WlhKeWIzSW9YQ0oxYm10dWIzZHVJSEpsYzNCdmJuTmxJSFI1Y0dWY0lpd2djbVZ6Y0M1blpYUlVlWEJsUTJGelpTZ3BLVHRjYmx4MFhIUmNkRngwWW5KbFlXczdYRzVjZEZ4MGZWeHVYSFI5WEc1Y2JseDBjSEpwZG1GMFpTQndjbTlqWlhOelNHVmhaR1Z5Y3lob1pXRmtaWEp6T2lCU1pYTndiMjV6WlVobFlXUmxjbk1wSUh0Y2JseDBYSFIwYUdsekxtaGxZV1JsY25OU1pXTmxhWFpsWkNBOUlIUnlkV1U3WEc1Y2RGeDBkR2hwY3k1dmNIUnpMbTl1U0dWaFpHVnljeWgwYjBkU1VFTk5aWFJoWkdGMFlTaG9aV0ZrWlhKekxtZGxkRTFsZEdGa1lYUmhLQ2twTENBeU1EQXBPMXh1WEhSOVhHNWNibHgwY0hKcGRtRjBaU0J3Y205alpYTnpUV1Z6YzJGblpTaHRjMmM2SUZKbGMzQnZibk5sVFdWemMyRm5aU2tnZTF4dVhIUmNkR052Ym5OMElISmxjM1ZzZENBOUlITjFjR1Z5TG5CeWIyTmxjM05RWVdOclpYUk5aWE56WVdkbEtHMXpaeTVuWlhSUVlXTnJaWFJOWlhOellXZGxLQ2toS1R0Y2JseDBYSFJwWmlBb0lYSmxjM1ZzZENrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkSDFjYmx4MFhIUmpiMjV6ZENCamFIVnVheUE5SUc1bGR5QkJjbkpoZVVKMVptWmxjaWh5WlhOMWJIUXViR1Z1WjNSb0lDc2dOU2s3WEc1Y2RGeDBibVYzSUVSaGRHRldhV1YzS0dOb2RXNXJMQ0F4TENBMEtTNXpaWFJWYVc1ME16SW9NQ3dnY21WemRXeDBMbXhsYm1kMGFDd2dabUZzYzJVcE8xeHVYSFJjZEc1bGR5QlZhVzUwT0VGeWNtRjVLR05vZFc1ckxDQTFLUzV6WlhRb2NtVnpkV3gwS1R0Y2JseDBYSFIwYUdsekxtOXdkSE11YjI1RGFIVnVheWh1WlhjZ1ZXbHVkRGhCY25KaGVTaGphSFZ1YXlrcE8xeHVYSFI5WEc1Y2JseDBjSEpwZG1GMFpTQndjbTlqWlhOelZISmhhV3hsY25Nb2RISmhhV3hsY25NNklGSmxjM0J2Ym5ObFZISmhhV3hsY25NcElIdGNibHgwWEhSMGFHbHpMblJ5WVdsc1pYSnpVbVZqWldsMlpXUWdQU0IwY25WbE8xeHVYSFJjZEdOdmJuTjBJR2hsWVdSbGNuTWdQU0IwYjBkU1VFTk5aWFJoWkdGMFlTaDBjbUZwYkdWeWN5NW5aWFJOWlhSaFpHRjBZU2dwS1R0Y2JseDBYSFJzWlhRZ2MzUmhkSFZ6UTI5a1pTd2djM1JoZEhWelRXVnpjMkZuWlR0Y2JseDBYSFJqYjI1emRDQnpkR0YwZFhNZ1BTQjBjbUZwYkdWeWN5NW5aWFJUZEdGMGRYTW9LVHRjYmx4MFhIUnBaaUFvYzNSaGRIVnpLU0I3WEc1Y2RGeDBYSFJ6ZEdGMGRYTkRiMlJsSUQwZ2MzUmhkSFZ6TG1kbGRFTnZaR1VvS1R0Y2JseDBYSFJjZEhOMFlYUjFjMDFsYzNOaFoyVWdQU0J6ZEdGMGRYTXVaMlYwVFdWemMyRm5aU2dwTzF4dVhIUmNkRngwYUdWaFpHVnljeTV6WlhRb1hDSm5jbkJqTFhOMFlYUjFjMXdpTENCZ0pIdHpkR0YwZFhNdVoyVjBRMjlrWlNncGZXQXBPMXh1WEhSY2RGeDBhV1lnS0hOMFlYUjFjMDFsYzNOaFoyVWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVYSFJjZEZ4MFhIUm9aV0ZrWlhKekxuTmxkQ2hjSW1keWNHTXRiV1Z6YzJGblpWd2lMQ0J6ZEdGMGRYTXVaMlYwVFdWemMyRm5aU2dwS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBjM1JoZEhWelEyOWtaU0E5SURBN1hHNWNkRngwWEhSb1pXRmtaWEp6TG5ObGRDaGNJbWR5Y0dNdGMzUmhkSFZ6WENJc0lGd2lNRndpS1R0Y2JseDBYSFJjZEhOMFlYUjFjMDFsYzNOaFoyVWdQU0JjSWx3aU8xeHVYSFJjZEgxY2JseHVYSFJjZEdOdmJuTjBJR2hsWVdSbGNrSjVkR1Z6SUQwZ2FHVmhaR1Z5YzFSdlFubDBaWE1vYUdWaFpHVnljeWs3WEc1Y2RGeDBZMjl1YzNRZ1kyaDFibXNnUFNCdVpYY2dRWEp5WVhsQ2RXWm1aWElvYUdWaFpHVnlRbmwwWlhNdWJHVnVaM1JvSUNzZ05TazdYRzVjZEZ4MGJtVjNJRVJoZEdGV2FXVjNLR05vZFc1ckxDQXdMQ0F4S1M1elpYUlZhVzUwT0Nnd0xDQXhJRHc4SURjcE8xeHVYSFJjZEc1bGR5QkVZWFJoVm1sbGR5aGphSFZ1YXl3Z01Td2dOQ2t1YzJWMFZXbHVkRE15S0RBc0lHaGxZV1JsY2tKNWRHVnpMbXhsYm1kMGFDd2dabUZzYzJVcE8xeHVYSFJjZEc1bGR5QlZhVzUwT0VGeWNtRjVLR05vZFc1ckxDQTFLUzV6WlhRb2FHVmhaR1Z5UW5sMFpYTXBPMXh1WEhSY2RIUm9hWE11YjNCMGN5NXZia05vZFc1cktHNWxkeUJWYVc1ME9FRnljbUY1S0dOb2RXNXJLU2s3WEc1Y2RGeDBhV1lnS0hOMFlYUjFjME52WkdVZ1BUMDlJREFwSUh0Y2JseDBYSFJjZEhSb2FYTXVZMnh2YzJWWGFYUm9VbVZqZGtWeWNtOXlLQ2s3WEc1Y2RGeDBYSFJ5WlhSMWNtNDdYSFJjYmx4MFhIUjlYRzVjZEZ4MGRHaHBjeTVqYkc5elpWZHBkR2hTWldOMlJYSnliM0lvYm1WM0lFVnljbTl5S0dCRGIyUmxQU1I3YzNSaGRIVnpRMjlrWlgwZ1RXVnpjMkZuWlQwa2UzTjBZWFIxYzAxbGMzTmhaMlY5WUNrcE8xeHVYSFI5WEc1OVhHNWNiaTh2SUdaeWIyMGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMmx0Y0hKdlltRmliR1V0Wlc1bkwyZHljR010ZDJWaUwySnNiMkl2Tm1aaU5qZ3paakEyTjJKa05UWTROakpqTTJFMU1UQmlZelUxT1RCaU9UVTFZMlUwTm1ReVlTOTBjeTl6Y21NdlEyaDFibXRRWVhKelpYSXVkSE1qVERJeVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pXNWpiMlJsUVZORFNVa29hVzV3ZFhRNklITjBjbWx1WnlrNklGVnBiblE0UVhKeVlYa2dlMXh1WEhSamIyNXpkQ0JsYm1OdlpHVmtJRDBnYm1WM0lGVnBiblE0UVhKeVlYa29hVzV3ZFhRdWJHVnVaM1JvS1R0Y2JseDBabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dJVDA5SUdsdWNIVjBMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNWNkRngwWTI5dWMzUWdZMmhoY2tOdlpHVWdQU0JwYm5CMWRDNWphR0Z5UTI5a1pVRjBLR2twTzF4dVhIUmNkR2xtSUNnaGFYTldZV3hwWkVobFlXUmxja0Z6WTJscEtHTm9ZWEpEYjJSbEtTa2dlMXh1WEhSY2RGeDBkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2lUV1YwWVdSaGRHRWdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQkJVME5KU1Z3aUtUdGNibHgwWEhSOVhHNWNkRngwWlc1amIyUmxaRnRwWFNBOUlHTm9ZWEpEYjJSbE8xeHVYSFI5WEc1Y2RISmxkSFZ5YmlCbGJtTnZaR1ZrTzF4dWZWeHVYRzVqYjI1emRDQnBjMEZzYkc5M1pXUkRiMjUwY205c1EyaGhjbk1nUFNBb1kyaGhjam9nYm5WdFltVnlLU0E5UGlCamFHRnlJRDA5UFNBd2VEa2dmSHdnWTJoaGNpQTlQVDBnTUhoaElIeDhJR05vWVhJZ1BUMDlJREI0WkR0Y2JseHVablZ1WTNScGIyNGdhWE5XWVd4cFpFaGxZV1JsY2tGelkybHBLSFpoYkRvZ2JuVnRZbVZ5S1RvZ1ltOXZiR1ZoYmlCN1hHNWNkSEpsZEhWeWJpQnBjMEZzYkc5M1pXUkRiMjUwY205c1EyaGhjbk1vZG1Gc0tTQjhmQ0FvZG1Gc0lENDlJREI0TWpBZ0ppWWdkbUZzSUR3OUlEQjROMlVwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJvWldGa1pYSnpWRzlDZVhSbGN5aG9aV0ZrWlhKek9pQm5jbkJqTGsxbGRHRmtZWFJoS1RvZ1ZXbHVkRGhCY25KaGVTQjdYRzVjZEd4bGRDQmhjMU4wY21sdVp5QTlJRndpWENJN1hHNWNkR2hsWVdSbGNuTXVabTl5UldGamFDZ29hMlY1TENCMllXeDFaWE1wSUQwK0lIdGNibHgwWEhSaGMxTjBjbWx1WnlBclBTQmdKSHRyWlhsOU9pQWtlM1poYkhWbGN5NXFiMmx1S0Z3aUxDQmNJaWw5WEZ4eVhGeHVZRHRjYmx4MGZTazdYRzVjZEhKbGRIVnliaUJsYm1OdlpHVkJVME5KU1NoaGMxTjBjbWx1WnlrN1hHNTlYRzVjYmk4dklHWnliMjBnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJwemJXOTFjbVYwTDJkeWNHTXRiM1psY2kxM1pXSnlkR012WW14dllpODBOV05rTm1RMlkyWTFNVFpsTnpoaU1XVXlOakpsWVRkaFlUYzBNV0pqTjJFM1lUa3paR0pqTDJOc2FXVnVkQzFwYlhCeWIySmhZbXhsTDNOeVl5OW5jblJqTDNkbFluSjBZMk5zYVdWdWRDNTBjeU5NTjF4dVkyOXVjM1FnWm5KdmJVZFNVRU5OWlhSaFpHRjBZU0E5SUNodFpYUmhaR0YwWVQ4NklHZHljR011VFdWMFlXUmhkR0VwT2lCTlpYUmhaR0YwWVNCOElIVnVaR1ZtYVc1bFpDQTlQaUI3WEc1Y2RHbG1JQ2doYldWMFlXUmhkR0VwSUh0Y2JseDBYSFJ5WlhSMWNtNGdkVzVrWldacGJtVmtYRzVjZEgxY2JseDBZMjl1YzNRZ2NtVnpkV3gwSUQwZ2JtVjNJRTFsZEdGa1lYUmhLQ2xjYmx4MFkyOXVjM1FnYldRZ1BTQnlaWE4xYkhRdVoyVjBUV1JOWVhBb0tWeHVYSFJ0WlhSaFpHRjBZUzVtYjNKRllXTm9LQ2hyWlhrc0lIWmhiSFZsY3lrZ1BUNGdlMXh1WEhSY2RHTnZibk4wSUhOMGNtbHVaM01nUFNCdVpYY2dVM1J5YVc1bmN5Z3BYRzVjZEZ4MGMzUnlhVzVuY3k1elpYUldZV3gxWlhOTWFYTjBLSFpoYkhWbGN5bGNibHgwWEhSdFpDNXpaWFFvYTJWNUxDQnpkSEpwYm1kektWeHVYSFI5S1Z4dVhIUnBaaUFvY21WemRXeDBMbWRsZEUxa1RXRndLQ2t1WjJWMFRHVnVaM1JvS0NrZ1BUMDlJREFwSUh0Y2JseDBYSFJ5WlhSMWNtNGdkVzVrWldacGJtVmtYRzVjZEgxY2JseDBjbVYwZFhKdUlISmxjM1ZzZEZ4dWZWeHVYRzVqYjI1emRDQjBiMGRTVUVOTlpYUmhaR0YwWVNBOUlDaHRaWFJoWkdGMFlUODZJRTFsZEdGa1lYUmhLVG9nWjNKd1l5NU5aWFJoWkdGMFlTQTlQaUI3WEc1Y2RHTnZibk4wSUhKbGMzVnNkQ0E5SUc1bGR5Qm5jbkJqTGsxbGRHRmtZWFJoS0NsY2JseDBhV1lnS0cxbGRHRmtZWFJoS1NCN1hHNWNkRngwYldWMFlXUmhkR0V1WjJWMFRXUk5ZWEFvS1M1bWIzSkZZV05vS0NobGJuUnllVG9nWVc1NUxDQnJaWGs2SUdGdWVTa2dQVDVjYmx4MFhIUmNkSEpsYzNWc2RDNWhjSEJsYm1Rb2EyVjVMQ0JsYm5SeWVTNW5aWFJXWVd4MVpYTk1hWE4wS0NrcFhHNWNkRngwS1Z4dVhIUjlYRzVjZEhKbGRIVnliaUJ5WlhOMWJIUmNibjFjYmx4dUlpd2lhVzF3YjNKMElIc2daM0p3WXlCOUlHWnliMjBnWENKQWFXMXdjbTlpWVdKc1pTMWxibWN2WjNKd1l5MTNaV0pjSWp0Y2JtbHRjRzl5ZENCN0lGQmhZMnRsZEUxbGMzTmhaMlVzSUZOMGNtVmhiU0I5SUdaeWIyMGdYQ0l1TDJkbGJpOXdjbTkwYnk5eWNHTXZkMlZpY25SakwzWXhMMmR5Y0dOZmNHSmNJanRjYmx4dUx5OGdUV0Y0VFdWemMyRm5aVk5wZW1VZ2FYTWdkR2hsSUcxaGVHbHRkVzBnYzJsNlpTQmhJR2RTVUVNZ2JXVnpjMkZuWlNCallXNGdZbVV1WEc1c1pYUWdUV0Y0VFdWemMyRm5aVk5wZW1VZ1BTQXhJRHc4SURJMU8xeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1FtRnpaVk4wY21WaGJTQjdYRzVjZEhCeWIzUmxZM1JsWkNCeVpXRmtiMjVzZVNCemRISmxZVzA2SUZOMGNtVmhiVHRjYmx4MGNISnBkbUYwWlNCeVpXRmtiMjVzZVNCdmJrUnZibVU2SUNocFpEb2diblZ0WW1WeUtTQTlQaUIyYjJsa08xeHVYSFJ3Y205MFpXTjBaV1FnY21WaFpHOXViSGtnYjNCMGN6b2daM0p3WXk1VWNtRnVjM0J2Y25SUGNIUnBiMjV6TzF4dVhIUndjbWwyWVhSbElHTnNiM05sWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhIUndjbWwyWVhSbElISmxZV1J2Ym14NUlIQmhZMnRsZEVKMVpqb2dRWEp5WVhrOFZXbHVkRGhCY25KaGVUNGdQU0JiWFR0Y2JseDBjSEpwZG1GMFpTQndZV05yWlhSQ2RXWlRhWHBsSUQwZ01EdGNibHgwY0hKcGRtRjBaU0JsY25JL09pQkZjbkp2Y2p0Y2JseHVYSFJqYjI1emRISjFZM1J2Y2loemRISmxZVzA2SUZOMGNtVmhiU3dnYjI1RWIyNWxPaUFvYVdRNklHNTFiV0psY2lrZ1BUNGdkbTlwWkN3Z2IzQjBjem9nWjNKd1l5NVVjbUZ1YzNCdmNuUlBjSFJwYjI1ektTQjdYRzVjZEZ4MGRHaHBjeTV6ZEhKbFlXMGdQU0J6ZEhKbFlXMDdYRzVjZEZ4MGRHaHBjeTV2YmtSdmJtVWdQU0J2YmtSdmJtVTdYRzVjZEZ4MGRHaHBjeTV2Y0hSeklEMGdiM0IwY3p0Y2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCallXNWpaV3dvS1NCN1hHNWNkRngwYVdZZ0tIUm9hWE11YjNCMGN5NWtaV0oxWnlrZ2UxeHVYSFJjZEZ4MFkyOXVjMjlzWlM1a1pXSjFaeWhjSW1OaGJtTmxiRndpS1Z4dVhIUmNkSDFjYmx4MGZWeHVYRzVjZEhCeWIzUmxZM1JsWkNCamJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb1pYSnlQem9nUlhKeWIzSXBJSHRjYmx4MFhIUnBaaUFvZEdocGN5NWpiRzl6WldRcElIdGNibHgwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFI5WEc1Y2RGeDBkR2hwY3k1amJHOXpaV1FnUFNCMGNuVmxPMXh1WEhSY2RIUm9hWE11WlhKeUlEMGdaWEp5TzF4dVhIUmNkSFJvYVhNdVkyRnVZMlZzS0NrN1hHNWNkRngwZEdocGN5NXZia1J2Ym1Vb2RHaHBjeTV6ZEhKbFlXMHVaMlYwU1dRb0tTazdYRzVjZEZ4MEx5OGdjSEpsZEhSNUlITjFjbVVnY0dGemMybHVaeUIwYUdVZ1pYSnliM0lnWkc5bGN5QnViM1JvYVc1bkxseHVYSFJjZEhSb2FYTXViM0IwY3k1dmJrVnVaQ2gwYUdsekxtVnljaWs3WEc1Y2RIMWNibHh1WEhSd2NtOTBaV04wWldRZ2NISnZZMlZ6YzFCaFkydGxkRTFsYzNOaFoyVW9iWE5uT2lCUVlXTnJaWFJOWlhOellXZGxLVG9nVldsdWREaEJjbkpoZVNCOElIVnVaR1ZtYVc1bFpDQjdYRzVjZEZ4MFkyOXVjM1FnWkdGMFlTQTlJRzF6Wnk1blpYUkVZWFJoWDJGelZUZ29LVHRjYmx4MFhIUnBaaUFvWkdGMFlTNXNaVzVuZEdnZ0t5QjBhR2x6TG5CaFkydGxkRUoxWmxOcGVtVWdQaUJOWVhoTlpYTnpZV2RsVTJsNlpTa2dlMXh1WEhSY2RGeDBkR2hwY3k1d1lXTnJaWFJDZFdZdWJHVnVaM1JvSUQwZ01EdGNibHgwWEhSY2RIUm9hWE11Y0dGamEyVjBRblZtVTJsNlpTQTlJREE3WEc1Y2RGeDBYSFJqYjI1emIyeGxMbVZ5Y205eUtHQnRaWE56WVdkbElITnBlbVVnYkdGeVoyVnlJSFJvWVc0Z2JXRjRJQ1I3VFdGNFRXVnpjMkZuWlZOcGVtVjlPeUJrYVhOallYSmthVzVuWUNsY2JseDBYSFJjZEhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc1Y2RGeDBmVnh1WEhSY2RIUm9hWE11Y0dGamEyVjBRblZtTG5CMWMyZ29aR0YwWVNrN1hHNWNkRngwZEdocGN5NXdZV05yWlhSQ2RXWlRhWHBsSUNzOUlHUmhkR0V1YkdWdVozUm9PMXh1WEhSY2RHbG1JQ2h0YzJjdVoyVjBSVzl0S0NrcElIdGNibHgwWEhSY2RHTnZibk4wSUdSaGRHRWdQU0J1WlhjZ1ZXbHVkRGhCY25KaGVTaDBhR2x6TG5CaFkydGxkRUoxWmxOcGVtVXBPMXh1WEhSY2RGeDBiR1YwSUhCdmMybDBhVzl1SUQwZ01EdGNibHgwWEhSY2RHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1d1lXTnJaWFJDZFdZdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdjR0Z5ZEdsaGJFUmhkR0VnUFNCMGFHbHpMbkJoWTJ0bGRFSjFabHRwWFR0Y2JseDBYSFJjZEZ4MFpHRjBZUzV6WlhRb2NHRnlkR2xoYkVSaGRHRXNJSEJ2YzJsMGFXOXVLVHRjYmx4MFhIUmNkRngwY0c5emFYUnBiMjRnS3owZ2NHRnlkR2xoYkVSaGRHRXViR1Z1WjNSb08xeHVYSFJjZEZ4MGZWeHVYSFJjZEZ4MGRHaHBjeTV3WVdOclpYUkNkV1l1YkdWdVozUm9JRDBnTUR0Y2JseDBYSFJjZEhSb2FYTXVjR0ZqYTJWMFFuVm1VMmw2WlNBOUlEQTdYRzVjZEZ4MFhIUnlaWFIxY200Z1pHRjBZVHRjYmx4MFhIUjlYRzVjZEZ4MGNtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JseDBmVnh1ZlNJc0lpOHZJSE52ZFhKalpUb2daMjl2WjJ4bEwzSndZeTlqYjJSbExuQnliM1J2WEc0dktpcGNiaUFxSUVCbWFXeGxiM1psY25acFpYZGNiaUFxSUVCbGJtaGhibU5sWVdKc1pWeHVJQ29nUUhOMWNIQnlaWE56SUh0dGFYTnphVzVuVW1WeGRXbHlaWDBnY21Wd2IzSjBjeUJsY25KdmNpQnZiaUJwYlhCc2FXTnBkQ0IwZVhCbElIVnpZV2RsY3k1Y2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldWemMyRm5aVU52Ym5abGJuUnBiMjV6ZlNCS1V5QkRiMjF3YVd4bGNpQnlaWEJ2Y25SeklHRnVJR1Z5Y205eUlHbG1JR0VnZG1GeWFXRmliR1VnYjNKY2JpQXFJQ0FnSUNCbWFXVnNaQ0J6ZEdGeWRITWdkMmwwYUNBblRWTkhYeWNnWVc1a0lHbHpiaWQwSUdFZ2RISmhibk5zWVhSaFlteGxJRzFsYzNOaFoyVXVYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNiaTh2SUVkRlRrVlNRVlJGUkNCRFQwUkZJQzB0SUVSUElFNVBWQ0JGUkVsVUlWeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdLaTljYmk4dklFQjBjeTF1YjJOb1pXTnJYRzVjYm5aaGNpQnFjM0JpSUQwZ2NtVnhkV2x5WlNnbloyOXZaMnhsTFhCeWIzUnZZblZtSnlrN1hHNTJZWElnWjI5dlp5QTlJR3B6Y0dJN1hHNTJZWElnWjJ4dlltRnNJRDBnS0daMWJtTjBhVzl1S0NrZ2UxeHVJQ0JwWmlBb2RHaHBjeWtnZXlCeVpYUjFjbTRnZEdocGN6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUhkcGJtUnZkenNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc2djbVYwZFhKdUlHZHNiMkpoYkRzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhObGJHWWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQnpaV3htT3lCOVhHNGdJSEpsZEhWeWJpQkdkVzVqZEdsdmJpZ25jbVYwZFhKdUlIUm9hWE1uS1NncE8xeHVmUzVqWVd4c0tHNTFiR3dwS1R0Y2JseHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1eWNHTXVRMjlrWlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVEyOWtaU0E5SUh0Y2JpQWdUMHM2SURBc1hHNGdJRU5CVGtORlRFeEZSRG9nTVN4Y2JpQWdWVTVMVGs5WFRqb2dNaXhjYmlBZ1NVNVdRVXhKUkY5QlVrZFZUVVZPVkRvZ015eGNiaUFnUkVWQlJFeEpUa1ZmUlZoRFJVVkVSVVE2SURRc1hHNGdJRTVQVkY5R1QxVk9SRG9nTlN4Y2JpQWdRVXhTUlVGRVdWOUZXRWxUVkZNNklEWXNYRzRnSUZCRlVrMUpVMU5KVDA1ZlJFVk9TVVZFT2lBM0xGeHVJQ0JWVGtGVlZFaEZUbFJKUTBGVVJVUTZJREUyTEZ4dUlDQlNSVk5QVlZKRFJWOUZXRWhCVlZOVVJVUTZJRGdzWEc0Z0lFWkJTVXhGUkY5UVVrVkRUMDVFU1ZSSlQwNDZJRGtzWEc0Z0lFRkNUMUpVUlVRNklERXdMRnh1SUNCUFZWUmZUMFpmVWtGT1IwVTZJREV4TEZ4dUlDQlZUa2xOVUV4RlRVVk9WRVZFT2lBeE1peGNiaUFnU1U1VVJWSk9RVXc2SURFekxGeHVJQ0JWVGtGV1FVbE1RVUpNUlRvZ01UUXNYRzRnSUVSQlZFRmZURTlUVXpvZ01UVmNibjA3WEc1Y2JtZHZiMmN1YjJKcVpXTjBMbVY0ZEdWdVpDaGxlSEJ2Y25SekxDQndjbTkwYnk1bmIyOW5iR1V1Y25CaktUdGNiaUlzSWk4dklITnZkWEpqWlRvZ1oyOXZaMnhsTDJGd2FTOW9kSFJ3TG5CeWIzUnZYRzR2S2lwY2JpQXFJRUJtYVd4bGIzWmxjblpwWlhkY2JpQXFJRUJsYm1oaGJtTmxZV0pzWlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHR0YVhOemFXNW5VbVZ4ZFdseVpYMGdjbVZ3YjNKMGN5Qmxjbkp2Y2lCdmJpQnBiWEJzYVdOcGRDQjBlWEJsSUhWellXZGxjeTVjYmlBcUlFQnpkWEJ3Y21WemN5QjdiV1Z6YzJGblpVTnZiblpsYm5ScGIyNXpmU0JLVXlCRGIyMXdhV3hsY2lCeVpYQnZjblJ6SUdGdUlHVnljbTl5SUdsbUlHRWdkbUZ5YVdGaWJHVWdiM0pjYmlBcUlDQWdJQ0JtYVdWc1pDQnpkR0Z5ZEhNZ2QybDBhQ0FuVFZOSFh5Y2dZVzVrSUdsemJpZDBJR0VnZEhKaGJuTnNZWFJoWW14bElHMWxjM05oWjJVdVhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JpOHZJRWRGVGtWU1FWUkZSQ0JEVDBSRklDMHRJRVJQSUU1UFZDQkZSRWxVSVZ4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ0tpOWNiaTh2SUVCMGN5MXViMk5vWldOclhHNWNiblpoY2lCcWMzQmlJRDBnY21WeGRXbHlaU2duWjI5dloyeGxMWEJ5YjNSdlluVm1KeWs3WEc1MllYSWdaMjl2WnlBOUlHcHpjR0k3WEc1MllYSWdaMnh2WW1Gc0lEMGdLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnBaaUFvZEdocGN5a2dleUJ5WlhSMWNtNGdkR2hwY3pzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHNnY21WMGRYSnVJSGRwYm1SdmR6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlHZHNiMkpoYkNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUdkc2IySmhiRHNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JSE5sYkdZZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCelpXeG1PeUI5WEc0Z0lISmxkSFZ5YmlCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dWZTNWpZV3hzS0c1MWJHd3BLVHRjYmx4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQ2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzVRWVhSMFpYSnVRMkZ6WlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWNtVndaV0YwWldSR2FXVnNaSE5mTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNDd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNDNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQW5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNtVndaV0YwWldSR2FXVnNaSE5mTENCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG05dVpXOW1SM0p2ZFhCelh5azdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdUlEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTRzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdUxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTRuTzF4dWZWeHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3pGZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd0xuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd2ZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lISjFiR1Z6VEdsemREb2dhbk53WWk1TlpYTnpZV2RsTG5SdlQySnFaV04wVEdsemRDaHRjMmN1WjJWMFVuVnNaWE5NYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1MGIwOWlhbVZqZEN3Z2FXNWpiSFZrWlVsdWMzUmhibU5sS1N4Y2JpQWdJQ0JtZFd4c2VVUmxZMjlrWlZKbGMyVnlkbVZrUlhod1lXNXphVzl1T2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeUxDQm1ZV3h6WlNsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0gxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd0xtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0gwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1U3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pGSjFiR1Z6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkdkV3hzZVVSbFkyOWtaVkpsYzJWeWRtVmtSWGh3WVc1emFXOXVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd0xuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlNkV3hsYzB4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFJuVnNiSGxFWldOdlpHVlNaWE5sY25abFpFVjRjR0Z1YzJsdmJpZ3BPMXh1SUNCcFppQW9aaWtnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCSWRIUndVblZzWlNCeWRXeGxjeUE5SURFN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVStmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1Y0hKdmRHOTBlWEJsTG1kbGRGSjFiR1Z6VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlQ1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlN3Z01Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bFBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQzV3Y205MGIzUjVjR1V1YzJWMFVuVnNaWE5NYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pUMTlJRzl3ZEY5MllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEk5ZlNCdmNIUmZhVzVrWlhoY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1Y0hKdmRHOTBlWEJsTG1Ga1pGSjFiR1Z6SUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURFc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEI5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQXVjSEp2ZEc5MGVYQmxMbU5zWldGeVVuVnNaWE5NYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZKMWJHVnpUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCbWRXeHNlVjlrWldOdlpHVmZjbVZ6WlhKMlpXUmZaWGh3WVc1emFXOXVJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQzV3Y205MGIzUjVjR1V1WjJWMFJuVnNiSGxFWldOdlpHVlNaWE5sY25abFpFVjRjR0Z1YzJsdmJpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjSDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNDNXdjbTkwYjNSNWNHVXVjMlYwUm5Wc2JIbEVaV052WkdWU1pYTmxjblpsWkVWNGNHRnVjMmx2YmlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6UW05dmJHVmhia1pwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFeHBjM1FnYjJZZ2NtVndaV0YwWldRZ1ptbGxiR1J6SUhkcGRHaHBiaUIwYUdseklHMWxjM05oWjJVZ2RIbHdaUzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFJRUJqYjI1emRGeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5KbGNHVmhkR1ZrUm1sbGJHUnpYeUE5SUZzeE1WMDdYRzVjYmk4cUtseHVJQ29nVDI1bGIyWWdaM0p2ZFhBZ1pHVm1hVzVwZEdsdmJuTWdabTl5SUhSb2FYTWdiV1Z6YzJGblpTNGdSV0ZqYUNCbmNtOTFjQ0JrWldacGJtVnpJSFJvWlNCbWFXVnNaRnh1SUNvZ2JuVnRZbVZ5Y3lCaVpXeHZibWRwYm1jZ2RHOGdkR2hoZENCbmNtOTFjQzRnVjJobGJpQnZaaUIwYUdWelpTQm1hV1ZzWkhNbklIWmhiSFZsSUdseklITmxkQ3dnWVd4c1hHNGdLaUJ2ZEdobGNpQm1hV1ZzWkhNZ2FXNGdkR2hsSUdkeWIzVndJR0Z5WlNCamJHVmhjbVZrTGlCRWRYSnBibWNnWkdWelpYSnBZV3hwZW1GMGFXOXVMQ0JwWmlCdGRXeDBhWEJzWlZ4dUlDb2dabWxsYkdSeklHRnlaU0JsYm1OdmRXNTBaWEpsWkNCbWIzSWdZU0JuY205MWNDd2diMjVzZVNCMGFHVWdiR0Z6ZENCMllXeDFaU0J6WldWdUlIZHBiR3dnWW1VZ2EyVndkQzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOElVRnljbUY1UEc1MWJXSmxjajQrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZklEMGdXMXN5TERNc05DdzFMRFlzT0YxZE8xeHVYRzR2S2lwY2JpQXFJRUJsYm5WdElIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1VUdGMGRHVnlia05oYzJVZ1BTQjdYRzRnSUZCQlZGUkZVazVmVGs5VVgxTkZWRG9nTUN4Y2JpQWdSMFZVT2lBeUxGeHVJQ0JRVlZRNklETXNYRzRnSUZCUFUxUTZJRFFzWEc0Z0lFUkZURVZVUlRvZ05TeGNiaUFnVUVGVVEwZzZJRFlzWEc0Z0lFTlZVMVJQVFRvZ09GeHVmVHRjYmx4dUx5b3FYRzRnS2lCQWNtVjBkWEp1SUh0d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTGxCaGRIUmxjbTVEWVhObGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1blpYUlFZWFIwWlhKdVEyRnpaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbEJoZEhSbGNtNURZWE5sZlNBcUx5aHFjM0JpTGsxbGMzTmhaMlV1WTI5dGNIVjBaVTl1Wlc5bVEyRnpaU2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExtOXVaVzltUjNKdmRYQnpYMXN3WFNrcE8xeHVmVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjMlZzWldOMGIzSTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWtzWEc0Z0lDQWdaMlYwT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lESXNJRndpWENJcExGeHVJQ0FnSUhCMWREb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F6TENCY0lsd2lLU3hjYmlBZ0lDQndiM04wT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lEUXNJRndpWENJcExGeHVJQ0FnSUhCaVgyUmxiR1YwWlRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQTFMQ0JjSWx3aUtTeGNiaUFnSUNCd1lYUmphRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBMkxDQmNJbHdpS1N4Y2JpQWdJQ0JqZFhOMGIyMDZJQ2htSUQwZ2JYTm5MbWRsZEVOMWMzUnZiU2dwS1NBbUppQndjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdUxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppa3NYRzRnSUNBZ1ltOWtlVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBM0xDQmNJbHdpS1N4Y2JpQWdJQ0J5WlhOd2IyNXpaVUp2WkhrNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNVElzSUZ3aVhDSXBMRnh1SUNBZ0lHRmtaR2wwYVc5dVlXeENhVzVrYVc1bmMweHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRUZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRb0tTeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZObGJHVmpkRzl5S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBSMlYwS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVSFYwS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdORHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVRzl6ZENoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVJsYkdWMFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURZNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZCaGRHTm9LSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ09EcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkRkWE4wYjIwb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EzT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJDYjJSNUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTVRJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZKbGMzQnZibk5sUW05a2VTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURFeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1U3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pFRmtaR2wwYVc5dVlXeENhVzVrYVc1bmN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZObGJHVmpkRzl5S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURJcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ015eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0EwS1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBMExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRFVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURVc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTml4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRU4xYzNSdmJTZ3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJRGdzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVEZFhOMGIyMUlkSFJ3VUdGMGRHVnliaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUW05a2VTZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTnl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRkpsYzNCdmJuTmxRbTlrZVNncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNVElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkJaR1JwZEdsdmJtRnNRbWx1WkdsdVozTk1hWE4wS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZTWlhCbFlYUmxaRTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXhNU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnpaV3hsWTNSdmNpQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1kbGRGTmxiR1ZqZEc5eUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWMyVjBVMlZzWldOMGIzSWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkJ5YjNSdk0xTjBjbWx1WjBacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1oyVjBJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdVoyVjBSMlYwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1YzJWMFIyVjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0hSb2FYTXNJRElzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNWpiR1ZoY2tkbGRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1SbWxsYkdRb2RHaHBjeXdnTWl3Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWFHRnpSMlYwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnY0hWMElEMGdNenRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1WjJWMFVIVjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lETXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVjMlYwVUhWMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmtacFpXeGtLSFJvYVhNc0lETXNJSEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1amJHVmhjbEIxZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVJtbGxiR1FvZEdocGN5d2dNeXdnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1YUdGelVIVjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2djRzl6ZENBOUlEUTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbWRsZEZCdmMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z05Dd2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNXpaWFJRYjNOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmtacFpXeGtLSFJvYVhNc0lEUXNJSEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1amJHVmhjbEJ2YzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0hSb2FYTXNJRFFzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1oaGMxQnZjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0EwS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJrWld4bGRHVWdQU0ExTzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1blpYUkVaV3hsZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTlN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1elpYUkVaV3hsZEdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltUm1sbGJHUW9kR2hwY3l3Z05Td2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSR1ZzWlhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWkdhV1ZzWkNoMGFHbHpMQ0ExTENCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG05dVpXOW1SM0p2ZFhCelgxc3dYU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1b1lYTkVaV3hsZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBMUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCd1lYUmphQ0E5SURZN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtZGxkRkJoZEdOb0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURZc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWMyVjBVR0YwWTJnZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltUm1sbGJHUW9kR2hwY3l3Z05pd2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVR0YwWTJnZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0hSb2FYTXNJRFlzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1oaGMxQmhkR05vSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTmlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCRGRYTjBiMjFJZEhSd1VHRjBkR1Z5YmlCamRYTjBiMjBnUFNBNE8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbWRsZEVOMWMzUnZiU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVMQ0E0S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1RGRYTjBiMjFJZEhSd1VHRjBkR1Z5Ym54MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pYMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVjMlYwUTNWemRHOXRJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlpsZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTRMQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1amJHVmhja04xYzNSdmJTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSRGRYTjBiMjBvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1b1lYTkRkWE4wYjIwZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBNEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCaWIyUjVJRDBnTnp0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdVoyVjBRbTlrZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0EzTENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG5ObGRFSnZaSGtnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZCeWIzUnZNMU4wY21sdVowWnBaV3hrS0hSb2FYTXNJRGNzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2djbVZ6Y0c5dWMyVmZZbTlrZVNBOUlERXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbkJ5YjNSdmRIbHdaUzVuWlhSU1pYTndiMjV6WlVKdlpIa2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01USXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVjMlYwVW1WemNHOXVjMlZDYjJSNUlEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeE1pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lFaDBkSEJTZFd4bElHRmtaR2wwYVc5dVlXeGZZbWx1WkdsdVozTWdQU0F4TVR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pUNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtZGxkRUZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1UrZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1VzSURFeEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVK2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbk5sZEVGa1pHbDBhVzl1WVd4Q2FXNWthVzVuYzB4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJREV4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaVDE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbkJ5YjNSdmRIbHdaUzVoWkdSQlpHUnBkR2x2Ym1Gc1FtbHVaR2x1WjNNZ1BTQm1kVzVqZEdsdmJpaHZjSFJmZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbUZrWkZSdlVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01URXNJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1WTJ4bFlYSkJaR1JwZEdsdmJtRnNRbWx1WkdsdVozTk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRUZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNHVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJpNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTU5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHdHBibVE2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlrc1hHNGdJQ0FnY0dGMGFEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F5TENCY0lsd2lLVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1RGRYTjBiMjFJZEhSd1VHRjBkR1Z5Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVEZFhOMGIyMUlkSFJ3VUdGMGRHVnliaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTQ3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTU5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1RGRYTjBiMjFJZEhSd1VHRjBkR1Z5Ymk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJMYVc1a0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUdGMGFDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNHVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEV0cGJtUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJRWVhSb0tDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2EybHVaQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200dWNISnZkRzkwZVhCbExtZGxkRXRwYm1RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1TG5CeWIzUnZkSGx3WlM1elpYUkxhVzVrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSEJoZEdnZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVMbkJ5YjNSdmRIbHdaUzVuWlhSUVlYUm9JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJpNXdjbTkwYjNSNWNHVXVjMlYwVUdGMGFDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9aWGh3YjNKMGN5d2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTazdYRzRpTENJdkx5QnpiM1Z5WTJVNklHZHZiMmRzWlM5d2NtOTBiMkoxWmk5a1pYTmpjbWx3ZEc5eUxuQnliM1J2WEc0dktpcGNiaUFxSUVCbWFXeGxiM1psY25acFpYZGNiaUFxSUVCbGJtaGhibU5sWVdKc1pWeHVJQ29nUUhOMWNIQnlaWE56SUh0dGFYTnphVzVuVW1WeGRXbHlaWDBnY21Wd2IzSjBjeUJsY25KdmNpQnZiaUJwYlhCc2FXTnBkQ0IwZVhCbElIVnpZV2RsY3k1Y2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldWemMyRm5aVU52Ym5abGJuUnBiMjV6ZlNCS1V5QkRiMjF3YVd4bGNpQnlaWEJ2Y25SeklHRnVJR1Z5Y205eUlHbG1JR0VnZG1GeWFXRmliR1VnYjNKY2JpQXFJQ0FnSUNCbWFXVnNaQ0J6ZEdGeWRITWdkMmwwYUNBblRWTkhYeWNnWVc1a0lHbHpiaWQwSUdFZ2RISmhibk5zWVhSaFlteGxJRzFsYzNOaFoyVXVYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNiaTh2SUVkRlRrVlNRVlJGUkNCRFQwUkZJQzB0SUVSUElFNVBWQ0JGUkVsVUlWeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdLaTljYmk4dklFQjBjeTF1YjJOb1pXTnJYRzVjYm5aaGNpQnFjM0JpSUQwZ2NtVnhkV2x5WlNnbloyOXZaMnhsTFhCeWIzUnZZblZtSnlrN1hHNTJZWElnWjI5dlp5QTlJR3B6Y0dJN1hHNTJZWElnWjJ4dlltRnNJRDBnUm5WdVkzUnBiMjRvSjNKbGRIVnliaUIwYUdsekp5a29LVHRjYmx4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk1uTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NU1ZV0psYkNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TGxSNWNHVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVRMVI1Y0dVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdVNsTlVlWEJsSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieWNzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1UGNIUnBiV2w2WlUxdlpHVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjRuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3ljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxrbGtaVzF3YjNSbGJtTjVUR1YyWld3bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3ljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjRuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKVFpYUXVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkQ3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkQzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFFuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1eVpYQmxZWFJsWkVacFpXeGtjMThzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnljN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnlBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5d2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnljN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVTWlhObGNuWmxaRkpoYm1kbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlNjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQTFNREFzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSSmJtWnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpJRDBnZTMwN1hHNWNibHh1THlvcVhHNGdLaUJVYUdVZ1pYaDBaVzV6YVc5dWN5QnlaV2RwYzNSbGNtVmtJSGRwZEdnZ2RHaHBjeUJ0WlhOellXZGxJR05zWVhOekxpQlVhR2x6SUdseklHRWdiV0Z3SUc5bVhHNGdLaUJsZUhSbGJuTnBiMjRnWm1sbGJHUWdiblZ0WW1WeUlIUnZJR1pwWld4a1NXNW1ieUJ2WW1wbFkzUXVYRzRnS2x4dUlDb2dSbTl5SUdWNFlXMXdiR1U2WEc0Z0tpQWdJQ0FnZXlBeE1qTTZJSHRtYVdWc1pFbHVaR1Y0T2lBeE1qTXNJR1pwWld4a1RtRnRaVG9nZTIxNVgyWnBaV3hrWDI1aGJXVTZJREI5TENCamRHOXlPaUJ3Y205MGJ5NWxlR0Z0Y0d4bExrMTVUV1Z6YzJGblpYMGdmVnh1SUNwY2JpQXFJR1pwWld4a1RtRnRaU0JqYjI1MFlXbHVjeUIwYUdVZ1NuTkRiMjF3YVd4bGNpQnlaVzVoYldWa0lHWnBaV3hrSUc1aGJXVWdjSEp2Y0dWeWRIa2djMjhnZEdoaGRDQnBkRnh1SUNvZ2QyOXlhM01nYVc0Z1QxQlVTVTFKV2tWRUlHMXZaR1V1WEc0Z0tseHVJQ29nUUhSNWNHVWdleUZQWW1wbFkzUThiblZ0WW1WeUxDQnFjM0JpTGtWNGRHVnVjMmx2YmtacFpXeGtRbWx1WVhKNVNXNW1iejU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTQTlJSHQ5TzF4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOG5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnlBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOHNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdkp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOG5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlVuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzhnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5YzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4Z1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuSmxjR1ZoZEdWa1JtbGxiR1J6WHl3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOG5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0ExTURBc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1eVpYQmxZWFJsWkVacFpXeGtjMThzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxJR1Y0ZEdWdWMybHZibk1nY21WbmFYTjBaWEpsWkNCM2FYUm9JSFJvYVhNZ2JXVnpjMkZuWlNCamJHRnpjeTRnVkdocGN5QnBjeUJoSUcxaGNDQnZabHh1SUNvZ1pYaDBaVzV6YVc5dUlHWnBaV3hrSUc1MWJXSmxjaUIwYnlCbWFXVnNaRWx1Wm04Z2IySnFaV04wTGx4dUlDcGNiaUFxSUVadmNpQmxlR0Z0Y0d4bE9seHVJQ29nSUNBZ0lIc2dNVEl6T2lCN1ptbGxiR1JKYm1SbGVEb2dNVEl6TENCbWFXVnNaRTVoYldVNklIdHRlVjltYVdWc1pGOXVZVzFsT2lBd2ZTd2dZM1J2Y2pvZ2NISnZkRzh1WlhoaGJYQnNaUzVOZVUxbGMzTmhaMlY5SUgxY2JpQXFYRzRnS2lCbWFXVnNaRTVoYldVZ1kyOXVkR0ZwYm5NZ2RHaGxJRXB6UTI5dGNHbHNaWElnY21WdVlXMWxaQ0JtYVdWc1pDQnVZVzFsSUhCeWIzQmxjblI1SUhOdklIUm9ZWFFnYVhSY2JpQXFJSGR2Y210eklHbHVJRTlRVkVsTlNWcEZSQ0J0YjJSbExseHVJQ3BjYmlBcUlFQjBlWEJsSUhzaFQySnFaV04wUEc1MWJXSmxjaXdnYW5Od1lpNUZlSFJsYm5OcGIyNUdhV1ZzWkVsdVptOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWN5QTlJSHQ5TzF4dVhHNWNiaThxS2x4dUlDb2dWR2hsSUdWNGRHVnVjMmx2Ym5NZ2NtVm5hWE4wWlhKbFpDQjNhWFJvSUhSb2FYTWdiV1Z6YzJGblpTQmpiR0Z6Y3k0Z1ZHaHBjeUJwY3lCaElHMWhjQ0J2Wmx4dUlDb2daWGgwWlc1emFXOXVJR1pwWld4a0lHNTFiV0psY2lCMGJ5Qm1hV1ZzWkVsdVptOGdiMkpxWldOMExseHVJQ3BjYmlBcUlFWnZjaUJsZUdGdGNHeGxPbHh1SUNvZ0lDQWdJSHNnTVRJek9pQjdabWxsYkdSSmJtUmxlRG9nTVRJekxDQm1hV1ZzWkU1aGJXVTZJSHR0ZVY5bWFXVnNaRjl1WVcxbE9pQXdmU3dnWTNSdmNqb2djSEp2ZEc4dVpYaGhiWEJzWlM1TmVVMWxjM05oWjJWOUlIMWNiaUFxWEc0Z0tpQm1hV1ZzWkU1aGJXVWdZMjl1ZEdGcGJuTWdkR2hsSUVwelEyOXRjR2xzWlhJZ2NtVnVZVzFsWkNCbWFXVnNaQ0J1WVcxbElIQnliM0JsY25SNUlITnZJSFJvWVhRZ2FYUmNiaUFxSUhkdmNtdHpJR2x1SUU5UVZFbE5TVnBGUkNCdGIyUmxMbHh1SUNwY2JpQXFJRUIwZVhCbElIc2hUMkpxWldOMFBHNTFiV0psY2l3Z2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFSnBibUZ5ZVVsdVptOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWMwSnBibUZ5ZVNBOUlIdDlPMXh1WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSURVd01Dd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkpsY0dWaGRHVmtSbWxsYkdSelh5d2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6Snp0Y2JuMWNibHh1THlvcVhHNGdLaUJVYUdVZ1pYaDBaVzV6YVc5dWN5QnlaV2RwYzNSbGNtVmtJSGRwZEdnZ2RHaHBjeUJ0WlhOellXZGxJR05zWVhOekxpQlVhR2x6SUdseklHRWdiV0Z3SUc5bVhHNGdLaUJsZUhSbGJuTnBiMjRnWm1sbGJHUWdiblZ0WW1WeUlIUnZJR1pwWld4a1NXNW1ieUJ2WW1wbFkzUXVYRzRnS2x4dUlDb2dSbTl5SUdWNFlXMXdiR1U2WEc0Z0tpQWdJQ0FnZXlBeE1qTTZJSHRtYVdWc1pFbHVaR1Y0T2lBeE1qTXNJR1pwWld4a1RtRnRaVG9nZTIxNVgyWnBaV3hrWDI1aGJXVTZJREI5TENCamRHOXlPaUJ3Y205MGJ5NWxlR0Z0Y0d4bExrMTVUV1Z6YzJGblpYMGdmVnh1SUNwY2JpQXFJR1pwWld4a1RtRnRaU0JqYjI1MFlXbHVjeUIwYUdVZ1NuTkRiMjF3YVd4bGNpQnlaVzVoYldWa0lHWnBaV3hrSUc1aGJXVWdjSEp2Y0dWeWRIa2djMjhnZEdoaGRDQnBkRnh1SUNvZ2QyOXlhM01nYVc0Z1QxQlVTVTFKV2tWRUlHMXZaR1V1WEc0Z0tseHVJQ29nUUhSNWNHVWdleUZQWW1wbFkzUThiblZ0WW1WeUxDQnFjM0JpTGtWNGRHVnVjMmx2YmtacFpXeGtTVzVtYno1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1bGVIUmxibk5wYjI1eklEMGdlMzA3WEc1Y2JseHVMeW9xWEc0Z0tpQlVhR1VnWlhoMFpXNXphVzl1Y3lCeVpXZHBjM1JsY21Wa0lIZHBkR2dnZEdocGN5QnRaWE56WVdkbElHTnNZWE56TGlCVWFHbHpJR2x6SUdFZ2JXRndJRzltWEc0Z0tpQmxlSFJsYm5OcGIyNGdabWxsYkdRZ2JuVnRZbVZ5SUhSdklHWnBaV3hrU1c1bWJ5QnZZbXBsWTNRdVhHNGdLbHh1SUNvZ1JtOXlJR1Y0WVcxd2JHVTZYRzRnS2lBZ0lDQWdleUF4TWpNNklIdG1hV1ZzWkVsdVpHVjRPaUF4TWpNc0lHWnBaV3hrVG1GdFpUb2dlMjE1WDJacFpXeGtYMjVoYldVNklEQjlMQ0JqZEc5eU9pQndjbTkwYnk1bGVHRnRjR3hsTGsxNVRXVnpjMkZuWlgwZ2ZWeHVJQ3BjYmlBcUlHWnBaV3hrVG1GdFpTQmpiMjUwWVdsdWN5QjBhR1VnU25ORGIyMXdhV3hsY2lCeVpXNWhiV1ZrSUdacFpXeGtJRzVoYldVZ2NISnZjR1Z5ZEhrZ2MyOGdkR2hoZENCcGRGeHVJQ29nZDI5eWEzTWdhVzRnVDFCVVNVMUpXa1ZFSUcxdlpHVXVYRzRnS2x4dUlDb2dRSFI1Y0dVZ2V5RlBZbXBsWTNROGJuVnRZbVZ5TENCcWMzQmlMa1Y0ZEdWdWMybHZia1pwWld4a1FtbHVZWEo1U1c1bWJ6NTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUlEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSURVd01Dd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3ljN1hHNTlYRzVjYmk4cUtseHVJQ29nVkdobElHVjRkR1Z1YzJsdmJuTWdjbVZuYVhOMFpYSmxaQ0IzYVhSb0lIUm9hWE1nYldWemMyRm5aU0JqYkdGemN5NGdWR2hwY3lCcGN5QmhJRzFoY0NCdlpseHVJQ29nWlhoMFpXNXphVzl1SUdacFpXeGtJRzUxYldKbGNpQjBieUJtYVdWc1pFbHVabThnYjJKcVpXTjBMbHh1SUNwY2JpQXFJRVp2Y2lCbGVHRnRjR3hsT2x4dUlDb2dJQ0FnSUhzZ01USXpPaUI3Wm1sbGJHUkpibVJsZURvZ01USXpMQ0JtYVdWc1pFNWhiV1U2SUh0dGVWOW1hV1ZzWkY5dVlXMWxPaUF3ZlN3Z1kzUnZjam9nY0hKdmRHOHVaWGhoYlhCc1pTNU5lVTFsYzNOaFoyVjlJSDFjYmlBcVhHNGdLaUJtYVdWc1pFNWhiV1VnWTI5dWRHRnBibk1nZEdobElFcHpRMjl0Y0dsc1pYSWdjbVZ1WVcxbFpDQm1hV1ZzWkNCdVlXMWxJSEJ5YjNCbGNuUjVJSE52SUhSb1lYUWdhWFJjYmlBcUlIZHZjbXR6SUdsdUlFOVFWRWxOU1ZwRlJDQnRiMlJsTGx4dUlDcGNiaUFxSUVCMGVYQmxJSHNoVDJKcVpXTjBQRzUxYldKbGNpd2dhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRWx1Wm04K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5NZ1BTQjdmVHRjYmx4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSQ2FXNWhjbmxKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1bGVIUmxibk5wYjI1elFtbHVZWEo1SUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJRFV3TUN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1eVpYQmxZWFJsWkVacFpXeGtjMThzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeWM3WEc1OVhHNWNiaThxS2x4dUlDb2dWR2hsSUdWNGRHVnVjMmx2Ym5NZ2NtVm5hWE4wWlhKbFpDQjNhWFJvSUhSb2FYTWdiV1Z6YzJGblpTQmpiR0Z6Y3k0Z1ZHaHBjeUJwY3lCaElHMWhjQ0J2Wmx4dUlDb2daWGgwWlc1emFXOXVJR1pwWld4a0lHNTFiV0psY2lCMGJ5Qm1hV1ZzWkVsdVptOGdiMkpxWldOMExseHVJQ3BjYmlBcUlFWnZjaUJsZUdGdGNHeGxPbHh1SUNvZ0lDQWdJSHNnTVRJek9pQjdabWxsYkdSSmJtUmxlRG9nTVRJekxDQm1hV1ZzWkU1aGJXVTZJSHR0ZVY5bWFXVnNaRjl1WVcxbE9pQXdmU3dnWTNSdmNqb2djSEp2ZEc4dVpYaGhiWEJzWlM1TmVVMWxjM05oWjJWOUlIMWNiaUFxWEc0Z0tpQm1hV1ZzWkU1aGJXVWdZMjl1ZEdGcGJuTWdkR2hsSUVwelEyOXRjR2xzWlhJZ2NtVnVZVzFsWkNCbWFXVnNaQ0J1WVcxbElIQnliM0JsY25SNUlITnZJSFJvWVhRZ2FYUmNiaUFxSUhkdmNtdHpJR2x1SUU5UVZFbE5TVnBGUkNCdGIyUmxMbHh1SUNwY2JpQXFJRUIwZVhCbElIc2hUMkpxWldOMFBHNTFiV0psY2l3Z2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpMbVY0ZEdWdWMybHZibk1nUFNCN2ZUdGNibHh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JDYVc1aGNubEpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z05UQXdMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk1uTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbVY0ZEdWdWMybHZibk1nUFNCN2ZUdGNibHh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JDYVc1aGNubEpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua2dQU0I3ZlR0Y2JseHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJRFV3TUN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSSmJtWnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11WlhoMFpXNXphVzl1Y3lBOUlIdDlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxJR1Y0ZEdWdWMybHZibk1nY21WbmFYTjBaWEpsWkNCM2FYUm9JSFJvYVhNZ2JXVnpjMkZuWlNCamJHRnpjeTRnVkdocGN5QnBjeUJoSUcxaGNDQnZabHh1SUNvZ1pYaDBaVzV6YVc5dUlHWnBaV3hrSUc1MWJXSmxjaUIwYnlCbWFXVnNaRWx1Wm04Z2IySnFaV04wTGx4dUlDcGNiaUFxSUVadmNpQmxlR0Z0Y0d4bE9seHVJQ29nSUNBZ0lIc2dNVEl6T2lCN1ptbGxiR1JKYm1SbGVEb2dNVEl6TENCbWFXVnNaRTVoYldVNklIdHRlVjltYVdWc1pGOXVZVzFsT2lBd2ZTd2dZM1J2Y2pvZ2NISnZkRzh1WlhoaGJYQnNaUzVOZVUxbGMzTmhaMlY5SUgxY2JpQXFYRzRnS2lCbWFXVnNaRTVoYldVZ1kyOXVkR0ZwYm5NZ2RHaGxJRXB6UTI5dGNHbHNaWElnY21WdVlXMWxaQ0JtYVdWc1pDQnVZVzFsSUhCeWIzQmxjblI1SUhOdklIUm9ZWFFnYVhSY2JpQXFJSGR2Y210eklHbHVJRTlRVkVsTlNWcEZSQ0J0YjJSbExseHVJQ3BjYmlBcUlFQjBlWEJsSUhzaFQySnFaV04wUEc1MWJXSmxjaXdnYW5Od1lpNUZlSFJsYm5OcGIyNUdhV1ZzWkVKcGJtRnllVWx1Wm04K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUlEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z05UQXdMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5Nbk8xeHVmVnh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTWdQU0I3ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkNhVzVoY25sSmJtWnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua2dQU0I3ZlR0Y2JseHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lEVXdNQ3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk1uTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11WlhoMFpXNXphVzl1Y3lBOUlIdDlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxJR1Y0ZEdWdWMybHZibk1nY21WbmFYTjBaWEpsWkNCM2FYUm9JSFJvYVhNZ2JXVnpjMkZuWlNCamJHRnpjeTRnVkdocGN5QnBjeUJoSUcxaGNDQnZabHh1SUNvZ1pYaDBaVzV6YVc5dUlHWnBaV3hrSUc1MWJXSmxjaUIwYnlCbWFXVnNaRWx1Wm04Z2IySnFaV04wTGx4dUlDcGNiaUFxSUVadmNpQmxlR0Z0Y0d4bE9seHVJQ29nSUNBZ0lIc2dNVEl6T2lCN1ptbGxiR1JKYm1SbGVEb2dNVEl6TENCbWFXVnNaRTVoYldVNklIdHRlVjltYVdWc1pGOXVZVzFsT2lBd2ZTd2dZM1J2Y2pvZ2NISnZkRzh1WlhoaGJYQnNaUzVOZVUxbGMzTmhaMlY5SUgxY2JpQXFYRzRnS2lCbWFXVnNaRTVoYldVZ1kyOXVkR0ZwYm5NZ2RHaGxJRXB6UTI5dGNHbHNaWElnY21WdVlXMWxaQ0JtYVdWc1pDQnVZVzFsSUhCeWIzQmxjblI1SUhOdklIUm9ZWFFnYVhSY2JpQXFJSGR2Y210eklHbHVJRTlRVkVsTlNWcEZSQ0J0YjJSbExseHVJQ3BjYmlBcUlFQjBlWEJsSUhzaFQySnFaV04wUEc1MWJXSmxjaXdnYW5Od1lpNUZlSFJsYm5OcGIyNUdhV1ZzWkVKcGJtRnllVWx1Wm04K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1bGVIUmxibk5wYjI1elFtbHVZWEo1SUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNG5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVUbUZ0WlZCaGNuUXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblFuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeXdnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabThzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0Z1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaWM3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabThuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dUlEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1eVpYQmxZWFJsWkVacFpXeGtjMThzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2YmljN1hHNTlYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1eVpYQmxZWFJsWkVacFpXeGtjMThnUFNCYk1WMDdYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKVFpYUXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKVFpYUjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdabWxzWlV4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRFWnBiR1ZNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2xjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVUyVjBPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkSDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFI5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdk8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtSbWxzWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkQzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVUyVjBMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRDNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUm1sc1pVeHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ1JtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5Qm1hV3hsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFF1Y0hKdmRHOTBlWEJsTG1kbGRFWnBiR1ZNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHNJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwTG5CeWIzUnZkSGx3WlM1elpYUkdhV3hsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKVFpYUXVjSEp2ZEc5MGVYQmxMbUZrWkVacGJHVWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieXdnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pUWlhSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFF1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSbWxzWlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFJtbHNaVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuSmxjR1ZoZEdWa1JtbGxiR1J6WHlBOUlGc3pMREV3TERFeExEUXNOU3cyTERkZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2NHSmZjR0ZqYTJGblpUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBeUtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnWkdWd1pXNWtaVzVqZVV4cGMzUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9iWE5uTENBektTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnY0hWaWJHbGpSR1Z3Wlc1a1pXNWplVXhwYzNRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2JYTm5MQ0F4TUNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJSGRsWVd0RVpYQmxibVJsYm1ONVRHbHpkRG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2h0YzJjc0lERXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2JXVnpjMkZuWlZSNWNHVk1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJOWlhOellXZGxWSGx3WlV4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBMRnh1SUNBZ0lHVnVkVzFVZVhCbFRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBSVzUxYlZSNWNHVk1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ2MyVnlkbWxqWlV4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRGTmxjblpwWTJWTWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ1pYaDBaVzV6YVc5dVRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBSWGgwWlc1emFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ3dnYVc1amJIVmtaVWx1YzNSaGJtTmxLU3hjYmlBZ0lDQnZjSFJwYjI1ek9pQW9aaUE5SUcxelp5NW5aWFJQY0hScGIyNXpLQ2twSUNZbUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcExGeHVJQ0FnSUhOdmRYSmpaVU52WkdWSmJtWnZPaUFvWmlBOUlHMXpaeTVuWlhSVGIzVnlZMlZEYjJSbFNXNW1ieWdwS1NBbUppQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQnplVzUwWVhnNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVRJcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWmx4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHODdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUbUZ0WlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRkJoWTJ0aFoyVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTVoWkdSRVpYQmxibVJsYm1ONUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTVRBNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdWeklEMGdMeW9xSUVCMGVYQmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMGdLaThnS0hKbFlXUmxjaTVwYzBSbGJHbHRhWFJsWkNncElEOGdjbVZoWkdWeUxuSmxZV1JRWVdOclpXUkpiblF6TWlncElEb2dXM0psWVdSbGNpNXlaV0ZrU1c1ME16SW9LVjBwTzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMllXeDFaWE11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdiWE5uTG1Ga1pGQjFZbXhwWTBSbGNHVnVaR1Z1WTNrb2RtRnNkV1Z6VzJsZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01URTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVnpJRDBnTHlvcUlFQjBlWEJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjBnS2k4Z0tISmxZV1JsY2k1cGMwUmxiR2x0YVhSbFpDZ3BJRDhnY21WaFpHVnlMbkpsWVdSUVlXTnJaV1JKYm5Rek1pZ3BJRG9nVzNKbFlXUmxjaTV5WldGa1NXNTBNeklvS1YwcE8xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYlhObkxtRmtaRmRsWVd0RVpYQmxibVJsYm1ONUtIWmhiSFZsYzF0cFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1RXVnpjMkZuWlZSNWNHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBMU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrUlc1MWJWUjVjR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTJPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdk8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVTJWeWRtbGpaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEYzZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pFVjRkR1Z1YzJsdmJpUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBNE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjenRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUGNIUnBiMjV6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptODdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUyOTFjbU5sUTI5a1pVbHVabThvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXhNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVM2x1ZEdGNEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F4S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRElwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJFWlhCbGJtUmxibU41VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSVGRISnBibWNvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVSFZpYkdsalJHVndaVzVrWlc1amVVeHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtTVzUwTXpJb1hHNGdJQ0FnSUNBeE1DeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZkbFlXdEVaWEJsYm1SbGJtTjVUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JKYm5Rek1paGNiaUFnSUNBZ0lERXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFRXVnpjMkZuWlZSNWNHVk1hWE4wS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZTWlhCbFlYUmxaRTFsYzNOaFoyVW9YRzRnSUNBZ0lDQTBMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVWdWRXMVVlWEJsVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTlN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVTJWeWRtbGpaVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRFlzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVWNGRHVnVjMmx2Ymt4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURjc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUGNIUnBiMjV6S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ09DeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGTnZkWEpqWlVOdlpHVkpibVp2S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ09TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXhNaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVRJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnVZVzFsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRTVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKT1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSEJoWTJ0aFoyVWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFVHRmphMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F5TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVUdGamEyRm5aU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsQmhZMnRoWjJVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5RWVdOcllXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0J6ZEhKcGJtY2daR1Z3Wlc1a1pXNWplU0E5SURNN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhjM1J5YVc1blBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFUmxjR1Z1WkdWdVkzbE1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGQmNuSmhlVHh6ZEhKcGJtYytmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z015a3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBITjBjbWx1Wno1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBSR1Z3Wlc1a1pXNWplVXhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE1zSUhaaGJIVmxJSHg4SUZ0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrUkdWd1pXNWtaVzVqZVNBOUlHWjFibU4wYVc5dUtIWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRVpYQmxibVJsYm1ONVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkVaWEJsYm1SbGJtTjVUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdhVzUwTXpJZ2NIVmliR2xqWDJSbGNHVnVaR1Z1WTNrZ1BTQXhNRHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVUhWaWJHbGpSR1Z3Wlc1a1pXNWplVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN0lVRnljbUY1UEc1MWJXSmxjajU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2gwYUdsekxDQXhNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVUhWaWJHbGpSR1Z3Wlc1a1pXNWplVXhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREV3TENCMllXeDFaU0I4ZkNCYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZCMVlteHBZMFJsY0dWdVpHVnVZM2tnUFNCbWRXNWpkR2x2YmloMllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpFWnBaV3hrS0hSb2FYTXNJREV3TENCMllXeDFaU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xCMVlteHBZMFJsY0dWdVpHVnVZM2xNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZCMVlteHBZMFJsY0dWdVpHVnVZM2xNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0JwYm5Rek1pQjNaV0ZyWDJSbGNHVnVaR1Z1WTNrZ1BTQXhNVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVjJWaGEwUmxjR1Z1WkdWdVkzbE1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z01URXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUeHVkVzFpWlhJK2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRmRsWVd0RVpYQmxibVJsYm1ONVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01URXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtWMlZoYTBSbGNHVnVaR1Z1WTNrZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRVpwWld4a0tIUm9hWE1zSURFeExDQjJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsZGxZV3RFWlhCbGJtUmxibU41VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSWFpXRnJSR1Z3Wlc1a1pXNWplVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRVJsYzJOeWFYQjBiM0pRY205MGJ5QnRaWE56WVdkbFgzUjVjR1VnUFNBME8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEUxbGMzTmhaMlZVZVhCbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnl3Z05Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEUxbGMzTmhaMlZVZVhCbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTkN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBiMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRTFsYzNOaFoyVlVlWEJsSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURRc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieXdnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2sxbGMzTmhaMlZVZVhCbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUk5aWE56WVdkbFZIbHdaVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRVZ1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzhnWlc1MWJWOTBlWEJsSUQwZ05UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBSVzUxYlZSNWNHVk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ6NTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4c0lEVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBSVzUxYlZSNWNHVk1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzg5ZlNCdmNIUmZkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWhaR1JGYm5WdFZIbHdaU0E5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0ExTENCdmNIUmZkbUZzZFdVc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVJXNTFiVlI1Y0dWTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFVnVkVzFVZVhCbFRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ1UyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieUJ6WlhKMmFXTmxJRDBnTmp0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBVMlZ5ZG1salpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieXdnTmlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYno1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlRaWEoyYVdObFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTml3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2UFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WVdSa1UyVnlkbWxqWlNBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMkxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMQ0J2Y0hSZmFXNWtaWGdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JHbHpkQ0J0WVd0cGJtY2dhWFFnWlcxd2RIa2dZblYwSUc1dmJpMXVkV3hzTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VTJWeWRtbGpaVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVTJWeWRtbGpaVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRVpwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2SUdWNGRHVnVjMmx2YmlBOUlEYzdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiejU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJGZUhSbGJuTnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieXdnTnlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFJYaDBaVzV6YVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTnl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiejE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWhaR1JGZUhSbGJuTnBiMjRrSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURjc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSWGgwWlc1emFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJGZUhSbGJuTnBiMjVNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JHYVd4bFQzQjBhVzl1Y3lCdmNIUnBiMjV6SUQwZ09EdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxDQTRLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRTl3ZEdsdmJuTW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VDNCMGFXOXVjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRGdwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVTI5MWNtTmxRMjlrWlVsdVptOGdjMjkxY21ObFgyTnZaR1ZmYVc1bWJ5QTlJRGs3WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBVMjkxY21ObFEyOWtaVWx1Wm04Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1admZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHNJRGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm05OGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBVMjkxY21ObFEyOWtaVWx1Wm04Z1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSlRiM1Z5WTJWRGIyUmxTVzVtYnlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJUYjNWeVkyVkRiMlJsU1c1bWJ5aDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5UYjNWeVkyVkRiMlJsU1c1bWJ5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEa3BJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklITjViblJoZUNBOUlERXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVTNsdWRHRjRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXlMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBVM2x1ZEdGNElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xONWJuUmhlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREV5TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTlRlVzUwWVhnZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeE1pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkpsY0dWaGRHVmtSbWxsYkdSelh5QTlJRnN5TERZc015dzBMRFVzT0N3NUxERXdYVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYm1GdFpUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBeEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnWm1sbGJHUk1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJHYVdWc1pFeHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ1pYaDBaVzV6YVc5dVRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBSWGgwWlc1emFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ3dnYVc1amJIVmtaVWx1YzNSaGJtTmxLU3hjYmlBZ0lDQnVaWE4wWldSVWVYQmxUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwVG1WemRHVmtWSGx3WlV4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBMRnh1SUNBZ0lHVnVkVzFVZVhCbFRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBSVzUxYlZSNWNHVk1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ1pYaDBaVzV6YVc5dVVtRnVaMlZNYVhOME9pQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JNYVhOMEtHMXpaeTVuWlhSRmVIUmxibk5wYjI1U1lXNW5aVXhwYzNRb0tTeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwTEZ4dUlDQWdJRzl1Wlc5bVJHVmpiRXhwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEU5dVpXOW1SR1ZqYkV4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrc1hHNGdJQ0FnYjNCMGFXOXVjem9nS0dZZ1BTQnRjMmN1WjJWMFQzQjBhVzl1Y3lncEtTQW1KaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0J5WlhObGNuWmxaRkpoYm1kbFRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBVbVZ6WlhKMlpXUlNZVzVuWlV4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVdWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrc1hHNGdJQ0FnY21WelpYSjJaV1JPWVcxbFRHbHpkRG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2h0YzJjc0lERXdLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWmNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkVacFpXeGtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzg3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1JYaDBaVzV6YVc5dUpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVG1WemRHVmtWSGx3WlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUkZiblZ0Vkhsd1pTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURVNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1JYaDBaVzV6YVc5dVVtRnVaMlVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTRPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlBibVZ2WmtSbFkyd29kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBM09seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3p0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJQY0hScGIyNXpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ09UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlU3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVTWlhObGNuWmxaRkpoYm1kbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1VtVnpaWEoyWldSU1lXNW5aU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElERXdPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlNaWE5sY25abFpFNWhiV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNU2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRVpwWld4a1RHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFVjRkR1Z1YzJsdmJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEWXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUk9aWE4wWldSVWVYQmxUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRmJuVnRWSGx3WlV4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURRc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVWNGRHVnVjMmx2YmxKaGJtZGxUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdOU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJQYm1WdlprUmxZMnhNYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0E0TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVDNCMGFXOXVjeWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURjc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlNaWE5sY25abFpGSmhibWRsVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnT1N4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZKbGMyVnlkbVZrVG1GdFpVeHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtVM1J5YVc1bktGeHVJQ0FnSUNBZ01UQXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJSE4wWVhKME9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURFcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JsYm1RNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTWlrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJRzl3ZEdsdmJuTTZJQ2htSUQwZ2JYTm5MbWRsZEU5d2RHbHZibk1vS1NrZ0ppWWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrU1c1ME16SW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVM1JoY25Rb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F5T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVsdWRETXlLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVZ1WkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVDNCMGFXOXVjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBeEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZKYm5Rek1paGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTWlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxTVzUwTXpJb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVDNCMGFXOXVjeWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURNc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJ6ZEdGeWRDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG1kbGRGTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSURBcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVGZUhSbGJuTnBiMjVTWVc1blpTNXdjbTkwYjNSNWNHVXVjMlYwVTNSaGNuUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVM1JoY25RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVXVjSEp2ZEc5MGVYQmxMbWhoYzFOMFlYSjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JwYm5Rek1pQmxibVFnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExuQnliM1J2ZEhsd1pTNW5aWFJGYm1RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTWl3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzV6WlhSRmJtUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSVzVrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTWl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExuQnliM1J2ZEhsd1pTNW9ZWE5GYm1RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeUJ2Y0hScGIyNXpJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExuQnliM1J2ZEhsd1pTNW5aWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXNJRE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbGZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExuQnliM1J2ZEhsd1pTNXpaWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVDNCMGFXOXVjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG1oaGMwOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBektTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjM1JoY25RNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJR1Z1WkRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F5S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlY5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZOMFlYSjBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkpiblF6TWlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRmJtUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXhLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWSmJuUXpNaWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsU1c1ME16SW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJ6ZEdGeWRDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aUzV3Y205MGIzUjVjR1V1WjJWMFUzUmhjblFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlM1d2NtOTBiM1I1Y0dVdWMyVjBVM1JoY25RZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVTWlhObGNuWmxaRkpoYm1kbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVTWlhObGNuWmxaRkpoYm1kbExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xOMFlYSjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG1oaGMxTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJsYm1RZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXVjSEp2ZEc5MGVYQmxMbWRsZEVWdVpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeUxDQXdLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbkJ5YjNSdmRIbHdaUzV6WlhSRmJtUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrVnVaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1b1lYTkZibVFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ1WVcxbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhnWm1sbGJHUWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJHYVdWc1pFeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ6NTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQXlLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwUm1sbGJHUk1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2UFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtSbWxsYkdRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbUZrWkZSdlVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01pd2diM0IwWDNaaGJIVmxMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5Um1sbGJHUk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVpwWld4a1RHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ1JtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOGdaWGgwWlc1emFXOXVJRDBnTmp0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhzSURZcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUkZlSFJsYm5OcGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMkxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2UFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtSWGgwWlc1emFXOXVKQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0EyTENCdmNIUmZkbUZzZFdVc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSkZlSFJsYm5OcGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVY0ZEdWdWMybHZia3hwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRVJsYzJOeWFYQjBiM0pRY205MGJ5QnVaWE4wWldSZmRIbHdaU0E5SURNN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUk9aWE4wWldSVWVYQmxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYno1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5d2dNeWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUk9aWE4wWldSVWVYQmxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHODlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtUbVZ6ZEdWa1ZIbHdaU0E5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F6TENCdmNIUmZkbUZzZFdVc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VG1WemRHVmtWSGx3WlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtVnpkR1ZrVkhsd1pVeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lFVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOGdaVzUxYlY5MGVYQmxJRDBnTkR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJGYm5WdFZIbHdaVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5d2dOQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwUlc1MWJWUjVjR1ZNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTBMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRVZ1ZFcxVWVYQmxJRDBnWm5WdVkzUnBiMjRvYjNCMFgzWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRFFzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzhzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVJXNTFiVlI1Y0dWTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFVnVkVzFVZVhCbFRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ1JYaDBaVzV6YVc5dVVtRnVaMlVnWlhoMFpXNXphVzl1WDNKaGJtZGxJRDBnTlR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVGZUhSbGJuTnBiMjVTWVc1blpUNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2YmxKaGJtZGxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aVDU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aU3dnTlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsUG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUkZlSFJsYm5OcGIyNVNZVzVuWlV4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRFVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlY5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Ga1pFVjRkR1Z1YzJsdmJsSmhibWRsSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURVc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVGZUhSbGJuTnBiMjVTWVc1blpTd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpGZUhSbGJuTnBiMjVTWVc1blpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBSWGgwWlc1emFXOXVVbUZ1WjJWTWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCUGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5QnZibVZ2Wmw5a1pXTnNJRDBnT0R0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVDI1bGIyWkVaV05zVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzhzSURncEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlBibVZ2WmtSbFkyeE1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2UFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtUMjVsYjJaRVpXTnNJRDBnWm5WdVkzUnBiMjRvYjNCMFgzWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRGdzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXVaVzltUkdWamJFeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBUMjVsYjJaRVpXTnNUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dUV1Z6YzJGblpVOXdkR2x2Ym5NZ2IzQjBhVzl1Y3lBOUlEYzdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TENBM0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z055d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVDNCMGFXOXVjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtaGhjMDl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTNLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRkpsYzJWeWRtVmtVbUZ1WjJVZ2NtVnpaWEoyWldSZmNtRnVaMlVnUFNBNU8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVStmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSU1pYTmxjblpsWkZKaGJtZGxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxQbjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXNJRGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSU1pYTmxjblpsWkZKaGJtZGxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlQxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJWOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRkpsYzJWeWRtVmtVbUZ1WjJVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbUZrWkZSdlVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09Td2diM0IwWDNaaGJIVmxMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VW1WelpYSjJaV1JTWVc1blpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBVbVZ6WlhKMlpXUlNZVzVuWlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUhOMGNtbHVaeUJ5WlhObGNuWmxaRjl1WVcxbElEMGdNVEE3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOGMzUnlhVzVuUG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBVbVZ6WlhKMlpXUk9ZVzFsVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hRWEp5WVhrOGMzUnlhVzVuUG4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpFWnBaV3hrS0hSb2FYTXNJREV3S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4YzNSeWFXNW5QbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFVtVnpaWEoyWldST1lXMWxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEFzSUhaaGJIVmxJSHg4SUZ0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZKbGMyVnlkbVZrVG1GdFpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z01UQXNJSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbEpsYzJWeWRtVmtUbUZ0WlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFVtVnpaWEoyWldST1lXMWxUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJPVGs1WFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnZFc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTbGNiaUFnZlR0Y2JseHVJQ0JxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSRmVIUmxibk5wYjI0b0x5b3FJRUIwZVhCbElIc2hhbk53WWk1TlpYTnpZV2RsZlNBcUx5QW9iWE5uS1N3Z2IySnFMRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI0c1hHNGdJQ0FnSUNCcGJtTnNkV1JsU1c1emRHRnVZMlVwTzF4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ek8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1emZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ09UazVPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2FuTndZaTVOWlhOellXZGxMbkpsWVdSQ2FXNWhjbmxGZUhSbGJuTnBiMjRvYlhObkxDQnlaV0ZrWlhJc1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWMwSnBibUZ5ZVN4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRmVIUmxibk5wYjI0cE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBNU9Ua3NYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxGZUhSbGJuTnBiMjV6S0cxbGMzTmhaMlVzSUhkeWFYUmxjaXhjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlCMWJtbHVkR1Z5Y0hKbGRHVmtYMjl3ZEdsdmJpQTlJRGs1T1R0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQTVPVGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmoxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2JuVnRZbVZ5T2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRE1wS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnNZV0psYkRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0EwS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdkSGx3WlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0ExS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdkSGx3WlU1aGJXVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z05pa3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdWNGRHVnVaR1ZsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRElwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQmtaV1poZFd4MFZtRnNkV1U2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dOeWtwSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHOXVaVzltU1c1a1pYZzZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z09Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdwemIyNU9ZVzFsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJREV3S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiM0IwYVc5dWN6b2dLR1lnUFNCdGMyY3VaMlYwVDNCMGFXOXVjeWdwS1NBbUppQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppa3NYRzRnSUNBZ2NISnZkRzh6VDNCMGFXOXVZV3c2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaQ2h0YzJjc0lERTNLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWmNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdk8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJPWVcxbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSSmJuUXpNaWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJPZFcxaVpYSW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMa3hoWW1Wc2ZTQXFMeUFvY21WaFpHVnlMbkpsWVdSRmJuVnRLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRXhoWW1Wc0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTlRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NVVlWEJsZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JGYm5WdEtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGUjVjR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTJPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlVlWEJsVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWNGRHVnVaR1ZsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBSR1ZtWVhWc2RGWmhiSFZsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JKYm5Rek1pZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlBibVZ2WmtsdVpHVjRLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01UQTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFcHpiMjVPWVcxbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnT0RwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUGNIUnBiMjV6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNVGM2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVSEp2ZEc4elQzQjBhVzl1WVd3b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBeEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVWx1ZERNeUtGeHVJQ0FnSUNBZ015eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1VEdGaVpXeDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOQ2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFJXNTFiU2hjYmlBZ0lDQWdJRFFzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsUjVjR1Y5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTlNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxSVzUxYlNoY2JpQWdJQ0FnSURVc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTml4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXlLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEY3BLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJRGNzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z09Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsU1c1ME16SW9YRzRnSUNBZ0lDQTVMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURFd0tTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhNQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFOXdkR2x2Ym5Nb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQTRMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVGNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4Tnl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRR1Z1ZFcwZ2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbFI1Y0dVZ1BTQjdYRzRnSUZSWlVFVmZSRTlWUWt4Rk9pQXhMRnh1SUNCVVdWQkZYMFpNVDBGVU9pQXlMRnh1SUNCVVdWQkZYMGxPVkRZME9pQXpMRnh1SUNCVVdWQkZYMVZKVGxRMk5Eb2dOQ3hjYmlBZ1ZGbFFSVjlKVGxRek1qb2dOU3hjYmlBZ1ZGbFFSVjlHU1ZoRlJEWTBPaUEyTEZ4dUlDQlVXVkJGWDBaSldFVkVNekk2SURjc1hHNGdJRlJaVUVWZlFrOVBURG9nT0N4Y2JpQWdWRmxRUlY5VFZGSkpUa2M2SURrc1hHNGdJRlJaVUVWZlIxSlBWVkE2SURFd0xGeHVJQ0JVV1ZCRlgwMUZVMU5CUjBVNklERXhMRnh1SUNCVVdWQkZYMEpaVkVWVE9pQXhNaXhjYmlBZ1ZGbFFSVjlWU1U1VU16STZJREV6TEZ4dUlDQlVXVkJGWDBWT1ZVMDZJREUwTEZ4dUlDQlVXVkJGWDFOR1NWaEZSRE15T2lBeE5TeGNiaUFnVkZsUVJWOVRSa2xZUlVRMk5Eb2dNVFlzWEc0Z0lGUlpVRVZmVTBsT1ZETXlPaUF4Tnl4Y2JpQWdWRmxRUlY5VFNVNVVOalE2SURFNFhHNTlPMXh1WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1TVlXSmxiQ0E5SUh0Y2JpQWdURUZDUlV4ZlQxQlVTVTlPUVV3NklERXNYRzRnSUV4QlFrVk1YMUpGVVZWSlVrVkVPaUF5TEZ4dUlDQk1RVUpGVEY5U1JWQkZRVlJGUkRvZ00xeHVmVHRjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYm1GdFpTQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJPWVcxbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKT1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1oaGMwNWhiV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F4S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdsdWRETXlJRzUxYldKbGNpQTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFRuVnRZbVZ5SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE1zSURBcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRTUxYldKbGNpQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRuVnRZbVZ5SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtaGhjMDUxYldKbGNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dUR0ZpWld3Z2JHRmlaV3dnUFNBME8xeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTVNWVdKbGJIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUk1ZV0psYkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TGt4aFltVnNmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOQ3dnTVNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1TVlXSmxiSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFeGhZbVZzSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpNWVdKbGJDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEUXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVvWVhOTVlXSmxiQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVkhsd1pTQjBlWEJsSUQwZ05UdGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Vkhsd1pYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUlVlWEJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Vkhsd1pYMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEVXNJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Vkhsd1pYMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEZSNWNHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURVc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0ExTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpWSGx3WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURVcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhSNWNHVmZibUZ0WlNBOUlEWTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVkhsd1pVNWhiV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOaXdnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVkhsd1pVNWhiV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEWXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbFI1Y0dWT1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOaXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1oaGMxUjVjR1ZPWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1pYaDBaVzVrWldVZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVaR1ZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEVWNGRHVnVaR1ZsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpGZUhSbGJtUmxaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTkZlSFJsYm1SbFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHUmxabUYxYkhSZmRtRnNkV1VnUFNBM08xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRVJsWm1GMWJIUldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0EzTENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSRVpXWmhkV3gwVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURjc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrUmxabUYxYkhSV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRGNzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTkVaV1poZFd4MFZtRnNkV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0EzS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdsdWRETXlJRzl1Wlc5bVgybHVaR1Y0SUQwZ09UdGNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJQYm1WdlprbHVaR1Y0SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRGtzSURBcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRTl1Wlc5bVNXNWtaWGdnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEa3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazl1Wlc5bVNXNWtaWGdnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0E1TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUMjVsYjJaSmJtUmxlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRGtwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JR3B6YjI1ZmJtRnRaU0E5SURFd08xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRXB6YjI1T1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXdMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJLYzI5dVRtRnRaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01UQXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhja3B6YjI1T1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEFzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTktjMjl1VG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXdLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRVpwWld4a1QzQjBhVzl1Y3lCdmNIUnBiMjV6SUQwZ09EdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeXdnT0NrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5OOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnT0N3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRTl3ZEdsdmJuTW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWhoYzA5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0E0S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2djSEp2ZEc4elgyOXdkR2x2Ym1Gc0lEMGdNVGM3WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRGQnliM1J2TTA5d2RHbHZibUZzSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNVGNzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFVISnZkRzh6VDNCMGFXOXVZV3dnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERTNMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRY205MGJ6TlBjSFJwYjI1aGJDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERTNMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelVISnZkRzh6VDNCMGFXOXVZV3dnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F4TnlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHNWhiV1U2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dNU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHOXdkR2x2Ym5NNklDaG1JRDBnYlhObkxtZGxkRTl3ZEdsdmJuTW9LU2tnSmlZZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnp0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUbUZ0WlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVDNCMGFXOXVjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJQY0hScGIyNXpLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ1WVcxbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhST1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRTVoYldVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2s1aGJXVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVDI1bGIyWlBjSFJwYjI1eklHOXdkR2x2Ym5NZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6ZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TENBeUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWMzeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVDNCMGFXOXVjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3pJc05DdzFYVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJRzVoYldVNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJSFpoYkhWbFRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBWbUZzZFdWTWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ3dnYVc1amJIVmtaVWx1YzNSaGJtTmxLU3hjYmlBZ0lDQnZjSFJwYjI1ek9pQW9aaUE5SUcxelp5NW5aWFJQY0hScGIyNXpLQ2twSUNZbUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcExGeHVJQ0FnSUhKbGMyVnlkbVZrVW1GdVoyVk1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJTWlhObGNuWmxaRkpoYm1kbFRHbHpkQ2dwTEZ4dUlDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbExuUnZUMkpxWldOMExDQnBibU5zZFdSbFNXNXpkR0Z1WTJVcExGeHVJQ0FnSUhKbGMyVnlkbVZrVG1GdFpVeHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQTFLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWmNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOTlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU1aGJXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkZaaGJIVmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk03WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFQzQjBhVzl1Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlNaWE5sY25abFpGSmhibWRsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtVbVZ6WlhKMlpXUk9ZVzFsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOTlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXhLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWbUZzZFdWTWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRTl3ZEdsdmJuTW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEUXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGSmxjMlZ5ZG1Wa1RtRnRaVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVTNSeWFXNW5LRnh1SUNBZ0lDQWdOU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aWDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUhOMFlYSjBPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lERXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCbGJtUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01pa3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbVhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVsdWRETXlLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRk4wWVhKMEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSSmJuUXpNaWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJGYm1Rb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVbHVkRE15S0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXlLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWSmJuUXpNaWhjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHbHVkRE15SUhOMFlYSjBJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG1kbGRGTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSURBcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1elpYUlRkR0Z5ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1amJHVmhjbE4wWVhKMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpTNXdjbTkwYjNSNWNHVXVhR0Z6VTNSaGNuUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXhLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR2x1ZERNeUlHVnVaQ0E5SURJN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1blpYUkZibVFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG5ObGRFVnVaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrVnVaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG1oaGMwVnVaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRElwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JRzVoYldVZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFRtRnRaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrNWhiV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCRmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzhnZG1Gc2RXVWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRlpoYkhWbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnl3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEZaaGJIVmxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHODlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZaaGJIVmxJRDBnWm5WdVkzUnBiMjRvYjNCMFgzWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRElzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5d2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbFpoYkhWbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUldZV3gxWlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUVWdWRXMVBjSFJwYjI1eklHOXdkR2x2Ym5NZ1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXNJRE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk44ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lETXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVDNCMGFXOXVjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVvWVhOUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCRmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlNCeVpYTmxjblpsWkY5eVlXNW5aU0E5SURRN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbFBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRGSmxjMlZ5ZG1Wa1VtRnVaMlZNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aVDU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXNJRFFwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVStmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURRc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aVDE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRkpsYzJWeWRtVmtVbUZ1WjJVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbUZrWkZSdlVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z05Dd2diM0IwWDNaaGJIVmxMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpTd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbEpsYzJWeWRtVmtVbUZ1WjJWTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGSmxjMlZ5ZG1Wa1VtRnVaMlZNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0J6ZEhKcGJtY2djbVZ6WlhKMlpXUmZibUZ0WlNBOUlEVTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4YzNSeWFXNW5QbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRkpsYzJWeWRtVmtUbUZ0WlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdJVUZ5Y21GNVBITjBjbWx1Wno1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNoMGFHbHpMQ0ExS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4YzNSeWFXNW5QbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSU1pYTmxjblpsWkU1aGJXVk1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTFMQ0IyWVd4MVpTQjhmQ0JiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRkpsYzJWeWRtVmtUbUZ0WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTlN3Z2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKU1pYTmxjblpsWkU1aGJXVk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRkpsYzJWeWRtVmtUbUZ0WlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUc1aGJXVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUc1MWJXSmxjam9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXlLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2IzQjBhVzl1Y3pvZ0tHWWdQU0J0YzJjdVoyVjBUM0IwYVc5dWN5Z3BLU0FtSmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBienRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU1aGJXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU1MWJXSmxjaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlBjSFJwYjI1ektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTWlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxTVzUwTXpJb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVDNCMGFXOXVjeWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURNc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHNWhiV1VnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhST1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBUbUZ0WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpPWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJ1ZFcxaVpYSWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJPZFcxaVpYSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01pd2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhST2RXMWlaWElnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUblZ0WW1WeUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTk9kVzFpWlhJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFVnVkVzFXWVd4MVpVOXdkR2x2Ym5NZ2IzQjBhVzl1Y3lBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5OOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMQ0F6S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBekxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJQY0hScGIyNXpLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXekpkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2JXVjBhRzlrVEdsemREb2dhbk53WWk1TlpYTnpZV2RsTG5SdlQySnFaV04wVEdsemRDaHRjMmN1WjJWMFRXVjBhRzlrVEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrc1hHNGdJQ0FnYjNCMGFXOXVjem9nS0dZZ1BTQnRjMmN1WjJWMFQzQjBhVzl1Y3lncEtTQW1KaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHODdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBienRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1RXVjBhRzlrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFQzQjBhVzl1Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEUxbGRHaHZaRXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVDNCMGFXOXVjeWdwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURNc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCdVlXMWxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRTVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRTVoYldVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2SUcxbGRHaHZaQ0E5SURJN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVFdWMGFHOWtUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieXdnTWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEUxbGRHaHZaRXhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWhaR1JOWlhSb2IyUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNaXdnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VFdWMGFHOWtUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJOWlhSb2IyUk1hWE4wS0Z0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQlRaWEoyYVdObFQzQjBhVzl1Y3lCdmNIUnBiMjV6SUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWMzMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMQ0F6S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1emZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXpMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRTl3ZEdsdmJuTW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYm1GdFpUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBeEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnYVc1d2RYUlVlWEJsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRElwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnZkWFJ3ZFhSVWVYQmxPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lETXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCdmNIUnBiMjV6T2lBb1ppQTlJRzF6Wnk1blpYUlBjSFJwYjI1ektDa3BJQ1ltSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlrc1hHNGdJQ0FnWTJ4cFpXNTBVM1J5WldGdGFXNW5PaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0ExTENCbVlXeHpaU2tzWEc0Z0lDQWdjMlZ5ZG1WeVUzUnlaV0Z0YVc1bk9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQTJMQ0JtWVd4elpTbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUbUZ0WlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRWx1Y0hWMFZIbHdaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFOTFkSEIxZEZSNWNHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUM0IwYVc5dWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURVNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUTJ4cFpXNTBVM1J5WldGdGFXNW5LSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbTl2YkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVFpYSjJaWEpUZEhKbFlXMXBibWNvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBeUtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUGNIUnBiMjV6S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ05DeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQTFLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWQ2IyOXNLRnh1SUNBZ0lDQWdOU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z05pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUW05dmJDaGNiaUFnSUNBZ0lEWXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ1WVcxbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHbHVjSFYwWDNSNWNHVWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUkpibkIxZEZSNWNHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01pd2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJKYm5CMWRGUjVjR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5U1c1d2RYUlVlWEJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTWl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5KYm5CMWRGUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ2ZFhSd2RYUmZkSGx3WlNBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU5MWRIQjFkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTXl3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlBkWFJ3ZFhSVWVYQmxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBekxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazkxZEhCMWRGUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtaGhjMDkxZEhCMWRGUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F6S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUUxbGRHaHZaRTl3ZEdsdmJuTWdiM0IwYVc5dWN5QTlJRFE3WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRTl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMQ0EwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5OOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSUGNIUnBiMjV6S0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEUXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCamJHbGxiblJmYzNSeVpXRnRhVzVuSUQwZ05UdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEVOc2FXVnVkRk4wY21WaGJXbHVaeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEVXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSRGJHbGxiblJUZEhKbFlXMXBibWNnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEVXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5UTJ4cFpXNTBVM1J5WldGdGFXNW5JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTkRiR2xsYm5SVGRISmxZVzFwYm1jZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBMUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnYzJWeWRtVnlYM04wY21WaGJXbHVaeUE5SURZN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJUWlhKMlpYSlRkSEpsWVcxcGJtY2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBMkxDQm1ZV3h6WlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVTJWeWRtVnlVM1J5WldGdGFXNW5JRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBMkxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbE5sY25abGNsTjBjbVZoYldsdVp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEWXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelUyVnlkbVZ5VTNSeVpXRnRhVzVuSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTmlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFeHBjM1FnYjJZZ2NtVndaV0YwWldRZ1ptbGxiR1J6SUhkcGRHaHBiaUIwYUdseklHMWxjM05oWjJVZ2RIbHdaUzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFJRUJqYjI1emRGeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3prNU9WMDdYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYW1GMllWQmhZMnRoWjJVNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJR3BoZG1GUGRYUmxja05zWVhOemJtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQTRLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2FtRjJZVTExYkhScGNHeGxSbWxzWlhNNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXdMQ0JtWVd4elpTa3NYRzRnSUNBZ2FtRjJZVWRsYm1WeVlYUmxSWEYxWVd4elFXNWtTR0Z6YURvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrS0cxelp5d2dNakFwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnFZWFpoVTNSeWFXNW5RMmhsWTJ0VmRHWTRPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F5Tnl3Z1ptRnNjMlVwTEZ4dUlDQWdJRzl3ZEdsdGFYcGxSbTl5T2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lEa3NJREVwTEZ4dUlDQWdJR2R2VUdGamEyRm5aVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhNU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHTmpSMlZ1WlhKcFkxTmxjblpwWTJWek9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhOaXdnWm1Gc2MyVXBMRnh1SUNBZ0lHcGhkbUZIWlc1bGNtbGpVMlZ5ZG1salpYTTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREUzTENCbVlXeHpaU2tzWEc0Z0lDQWdjSGxIWlc1bGNtbGpVMlZ5ZG1salpYTTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREU0TENCbVlXeHpaU2tzWEc0Z0lDQWdjR2h3UjJWdVpYSnBZMU5sY25acFkyVnpPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0EwTWl3Z1ptRnNjMlVwTEZ4dUlDQWdJR1JsY0hKbFkyRjBaV1E2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURJekxDQm1ZV3h6WlNrc1hHNGdJQ0FnWTJORmJtRmliR1ZCY21WdVlYTTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRE14TENCMGNuVmxLU3hjYmlBZ0lDQnZZbXBqUTJ4aGMzTlFjbVZtYVhnNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTXpZcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JqYzJoaGNuQk9ZVzFsYzNCaFkyVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z016Y3BLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCemQybG1kRkJ5WldacGVEb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBek9Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUhCb2NFTnNZWE56VUhKbFptbDRPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lEUXdLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2NHaHdUbUZ0WlhOd1lXTmxPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lEUXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2NHaHdUV1YwWVdSaGRHRk9ZVzFsYzNCaFkyVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z05EUXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCeWRXSjVVR0ZqYTJGblpUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBME5Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUhWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBYRzRnSUgwN1hHNWNiaUFnYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFJYaDBaVzV6YVc5dUtDOHFLaUJBZEhsd1pTQjdJV3B6Y0dJdVRXVnpjMkZuWlgwZ0tpOGdLRzF6Wnlrc0lHOWlhaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2s3WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk03WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFcGhkbUZRWVdOcllXZGxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ09EcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNtRjJZVTkxZEdWeVEyeGhjM051WVcxbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTVRBNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwU21GMllVMTFiSFJwY0d4bFJtbHNaWE1vZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlNRHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUktZWFpoUjJWdVpYSmhkR1ZGY1hWaGJITkJibVJJWVhOb0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpjNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwU21GMllWTjBjbWx1WjBOb1pXTnJWWFJtT0NoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRGs2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVQzQjBhVzFwZW1WTmIyUmxmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkZiblZ0S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU5d2RHbHRhWHBsUm05eUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTVRFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVkdlVHRmphMkZuWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREUyT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSQ2IyOXNLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRU5qUjJWdVpYSnBZMU5sY25acFkyVnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01UYzZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNtRjJZVWRsYm1WeWFXTlRaWEoyYVdObGN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURFNE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkNiMjlzS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZCNVIyVnVaWEpwWTFObGNuWnBZMlZ6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVR2h3UjJWdVpYSnBZMU5sY25acFkyVnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qTTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFJHVndjbVZqWVhSbFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkNiMjlzS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVOalJXNWhZbXhsUVhKbGJtRnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016WTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFOWlhbU5EYkdGemMxQnlaV1pwZUNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE0zT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJEYzJoaGNuQk9ZVzFsYzNCaFkyVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBek9UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUzZHBablJRY21WbWFYZ29kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME1EcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFVHaHdRMnhoYzNOUWNtVm1hWGdvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVR2h3VG1GdFpYTndZV05sS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdORFE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRkJvY0UxbGRHRmtZWFJoVG1GdFpYTndZV05sS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdORFU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRkoxWW5sUVlXTnJZV2RsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPVGs1T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dU8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdhbk53WWk1TlpYTnpZV2RsTG5KbFlXUkNhVzVoY25sRmVIUmxibk5wYjI0b2JYTm5MQ0J5WldGa1pYSXNYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUxGeHVJQ0FnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaXhjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRmVIUmxibk5wYjI0cE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lERXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z09Da3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdPQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01UQXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXhNQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01qQXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXlNQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01qY3BLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXlOeXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVQzQjBhVzFwZW1WTmIyUmxmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRGtwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVVnVkVzBvWEc0Z0lDQWdJQ0E1TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lERXhLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVFlwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4Tml4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVGNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4Tnl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVGdwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4T0N4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dORElwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0EwTWl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNak1wS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F5TXl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNekVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F6TVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXpOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTXpZc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNemNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURNM0xGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRE01S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBek9TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0EwTUNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ05EQXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTkRFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lEUXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURRMEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQTBOQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBME5Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdORFVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdPVGs1TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCcWMzQmlMazFsYzNOaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVJYaDBaVzV6YVc5dWN5aHRaWE56WVdkbExDQjNjbWwwWlhJc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua3NJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQVpXNTFiU0I3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVQzQjBhVzFwZW1WTmIyUmxJRDBnZTF4dUlDQlRVRVZGUkRvZ01TeGNiaUFnUTA5RVJWOVRTVnBGT2lBeUxGeHVJQ0JNU1ZSRlgxSlZUbFJKVFVVNklETmNibjA3WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUdwaGRtRmZjR0ZqYTJGblpTQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFNtRjJZVkJoWTJ0aFoyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBTbUYyWVZCaFkydGhaMlVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja3BoZG1GUVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMHBoZG1GUVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYW1GMllWOXZkWFJsY2w5amJHRnpjMjVoYldVZ1BTQTRPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVwaGRtRlBkWFJsY2tOc1lYTnpibUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0E0TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSS1lYWmhUM1YwWlhKRGJHRnpjMjVoYldVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRGdzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2twaGRtRlBkWFJsY2tOc1lYTnpibUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURnc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5LWVhaaFQzVjBaWEpEYkdGemMyNWhiV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0E0S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2dhbUYyWVY5dGRXeDBhWEJzWlY5bWFXeGxjeUE5SURFd08xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJLWVhaaFRYVnNkR2x3YkdWR2FXeGxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXdMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVwaGRtRk5kV3gwYVhCc1pVWnBiR1Z6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhNQ3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5U21GMllVMTFiSFJwY0d4bFJtbHNaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TUN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMHBoZG1GTmRXeDBhWEJzWlVacGJHVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNVEFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQnFZWFpoWDJkbGJtVnlZWFJsWDJWeGRXRnNjMTloYm1SZmFHRnphQ0E5SURJd08xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJLWVhaaFIyVnVaWEpoZEdWRmNYVmhiSE5CYm1SSVlYTm9JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01qQXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwU21GMllVZGxibVZ5WVhSbFJYRjFZV3h6UVc1a1NHRnphQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01qQXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja3BoZG1GSFpXNWxjbUYwWlVWeGRXRnNjMEZ1WkVoaGMyZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlNQ3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwcGhkbUZIWlc1bGNtRjBaVVZ4ZFdGc2MwRnVaRWhoYzJnZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeU1Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmliMjlzSUdwaGRtRmZjM1J5YVc1blgyTm9aV05yWDNWMFpqZ2dQU0F5Tnp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBTbUYyWVZOMGNtbHVaME5vWldOclZYUm1PQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESTNMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVwaGRtRlRkSEpwYm1kRGFHVmphMVYwWmpnZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREkzTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKS1lYWmhVM1J5YVc1blEyaGxZMnRWZEdZNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01qY3NJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhOS1lYWmhVM1J5YVc1blEyaGxZMnRWZEdZNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01qY3BJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dUM0IwYVcxcGVtVk5iMlJsSUc5d2RHbHRhWHBsWDJadmNpQTlJRGs3WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxrOXdkR2x0YVhwbFRXOWtaWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJQY0hScGJXbDZaVVp2Y2lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TGs5d2RHbHRhWHBsVFc5a1pYMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEa3NJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11VDNCMGFXMXBlbVZOYjJSbGZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVDNCMGFXMXBlbVZHYjNJZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRGtzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2s5d2RHbHRhWHBsUm05eUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z09Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzA5d2RHbHRhWHBsUm05eUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z09Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1oyOWZjR0ZqYTJGblpTQTlJREV4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFZHZVR0ZqYTJGblpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeE1Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBSMjlRWVdOcllXZGxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeE1Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSMjlRWVdOcllXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEVzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTkhiMUJoWTJ0aFoyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXhNU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpYjI5c0lHTmpYMmRsYm1WeWFXTmZjMlZ5ZG1salpYTWdQU0F4Tmp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBRMk5IWlc1bGNtbGpVMlZ5ZG1salpYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeE5pd2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJEWTBkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01UWXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja05qUjJWdVpYSnBZMU5sY25acFkyVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVFlzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTkRZMGRsYm1WeWFXTlRaWEoyYVdObGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERTJLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z2FtRjJZVjluWlc1bGNtbGpYM05sY25acFkyVnpJRDBnTVRjN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRXBoZG1GSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhOeXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSS1lYWmhSMlZ1WlhKcFkxTmxjblpwWTJWeklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4Tnl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVNtRjJZVWRsYm1WeWFXTlRaWEoyYVdObGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERTNMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelNtRjJZVWRsYm1WeWFXTlRaWEoyYVdObGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERTNLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z2NIbGZaMlZ1WlhKcFkxOXpaWEoyYVdObGN5QTlJREU0TzF4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlFlVWRsYm1WeWFXTlRaWEoyYVdObGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFNExDQm1ZV3h6WlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRkI1UjJWdVpYSnBZMU5sY25acFkyVnpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeE9Dd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVSGxIWlc1bGNtbGpVMlZ5ZG1salpYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhPQ3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMxQjVSMlZ1WlhKcFkxTmxjblpwWTJWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01UZ3BJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCd2FIQmZaMlZ1WlhKcFkxOXpaWEoyYVdObGN5QTlJRFF5TzF4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlFhSEJIWlc1bGNtbGpVMlZ5ZG1salpYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBME1pd2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJRYUhCSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEUXlMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRYUhCSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTWl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMUJvY0VkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFF5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2daR1Z3Y21WallYUmxaQ0E5SURJek8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJFWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNak1zSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTWpNc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrUmxjSEpsWTJGMFpXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlNeXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwUmxjSEpsWTJGMFpXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpYjI5c0lHTmpYMlZ1WVdKc1pWOWhjbVZ1WVhNZ1BTQXpNVHRjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFEyTkZibUZpYkdWQmNtVnVZWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXpNU3dnZEhKMVpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVOalJXNWhZbXhsUVhKbGJtRnpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBek1Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlRMk5GYm1GaWJHVkJjbVZ1WVhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBek1Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBOalJXNWhZbXhsUVhKbGJtRnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNekVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JRzlpYW1OZlkyeGhjM05mY0hKbFptbDRJRDBnTXpZN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBUMkpxWTBOc1lYTnpVSEpsWm1sNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNMkxDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUlBZbXBqUTJ4aGMzTlFjbVZtYVhnZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE0yTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUFltcGpRMnhoYzNOUWNtVm1hWGdnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6Tml3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMDlpYW1ORGJHRnpjMUJ5WldacGVDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETTJLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QmpjMmhoY25CZmJtRnRaWE53WVdObElEMGdNemM3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFEzTm9ZWEp3VG1GdFpYTndZV05sSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE0zTENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRGMyaGhjbkJPWVcxbGMzQmhZMlVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lETTNMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpEYzJoaGNuQk9ZVzFsYzNCaFkyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpOeXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwTnphR0Z5Y0U1aGJXVnpjR0ZqWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNM0tTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCemQybG1kRjl3Y21WbWFYZ2dQU0F6T1R0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlRkMmxtZEZCeVpXWnBlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXpPU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVTNkcFpuUlFjbVZtYVhnZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE01TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKVGQybG1kRkJ5WldacGVDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lETTVMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelUzZHBablJRY21WbWFYZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXpPU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2djR2h3WDJOc1lYTnpYM0J5WldacGVDQTlJRFF3TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRGQm9jRU5zWVhOelVISmxabWw0SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFF3TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSUWFIQkRiR0Z6YzFCeVpXWnBlQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05EQXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhjbEJvY0VOc1lYTnpVSEpsWm1sNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05EQXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhOUWFIQkRiR0Z6YzFCeVpXWnBlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFF3S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ3YUhCZmJtRnRaWE53WVdObElEMGdOREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFVHaHdUbUZ0WlhOd1lXTmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEUXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJRYUhCT1lXMWxjM0JoWTJVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFF4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUWFIQk9ZVzFsYzNCaFkyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMxQm9jRTVoYldWemNHRmpaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFF4S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ3YUhCZmJXVjBZV1JoZEdGZmJtRnRaWE53WVdObElEMGdORFE3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFVHaHdUV1YwWVdSaGRHRk9ZVzFsYzNCaFkyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z05EUXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRkJvY0UxbGRHRmtZWFJoVG1GdFpYTndZV05sSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBOQ3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5VUdod1RXVjBZV1JoZEdGT1lXMWxjM0JoWTJVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBME5Dd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzFCb2NFMWxkR0ZrWVhSaFRtRnRaWE53WVdObElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05EUXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklISjFZbmxmY0dGamEyRm5aU0E5SURRMU8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRkoxWW5sUVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFExTENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSU2RXSjVVR0ZqYTJGblpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTkRVc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsSjFZbmxRWVdOcllXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dORFVzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTlNkV0o1VUdGamEyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFExS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0Z2RXNXBiblJsY25CeVpYUmxaRjl2Y0hScGIyNGdQU0E1T1RrN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQTVPVGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnT1RrNUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQ5ZlNCdmNIUmZkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0Z0ZEtUdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXems1T1YwN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5OOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYldWemMyRm5aVk5sZEZkcGNtVkdiM0p0WVhRNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXNJR1poYkhObEtTeGNiaUFnSUNCdWIxTjBZVzVrWVhKa1JHVnpZM0pwY0hSdmNrRmpZMlZ6YzI5eU9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXlMQ0JtWVd4elpTa3NYRzRnSUNBZ1pHVndjbVZqWVhSbFpEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNeXdnWm1Gc2MyVXBMRnh1SUNBZ0lHMWhjRVZ1ZEhKNU9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdRb2JYTm5MQ0EzS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdkVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNsY2JpQWdmVHRjYmx4dUlDQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JGZUhSbGJuTnBiMjRvTHlvcUlFQjBlWEJsSUhzaGFuTndZaTVOWlhOellXZGxmU0FxTHlBb2JYTm5LU3dnYjJKcUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ2FXNWpiSFZrWlVsdWMzUmhibU5sS1R0Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3p0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJOWlhOellXZGxVMlYwVjJseVpVWnZjbTFoZENoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUbTlUZEdGdVpHRnlaRVJsYzJOeWFYQjBiM0pCWTJObGMzTnZjaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFJHVndjbVZqWVhSbFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURjNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVFdGd1JXNTBjbmtvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTVPVGs2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1Y21WaFpFSnBibUZ5ZVVWNGRHVnVjMmx2YmlodGMyY3NJSEpsWVdSbGNpeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua3NYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVWNGRHVnVjMmx2YmlrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5OOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXlLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWQ2IyOXNLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z015a3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUW05dmJDaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURjcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBM0xGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURrNU9TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdhbk53WWk1TlpYTnpZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVVY0ZEdWdWMybHZibk1vYldWemMyRm5aU3dnZDNKcGRHVnlMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2YmlrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ltOXZiQ0J0WlhOellXZGxYM05sZEY5M2FYSmxYMlp2Y20xaGRDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRTFsYzNOaFoyVlRaWFJYYVhKbFJtOXliV0YwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJOWlhOellXZGxVMlYwVjJseVpVWnZjbTFoZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUV1Z6YzJGblpWTmxkRmRwY21WR2IzSnRZWFFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVhR0Z6VFdWemMyRm5aVk5sZEZkcGNtVkdiM0p0WVhRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnYm05ZmMzUmhibVJoY21SZlpHVnpZM0pwY0hSdmNsOWhZMk5sYzNOdmNpQTlJREk3WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRTV2VTNSaGJtUmhjbVJFWlhOamNtbHdkRzl5UVdOalpYTnpiM0lnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXlMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRTV2VTNSaGJtUmhjbVJFWlhOamNtbHdkRzl5UVdOalpYTnpiM0lnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrNXZVM1JoYm1SaGNtUkVaWE5qY21sd2RHOXlRV05qWlhOemIzSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWFHRnpUbTlUZEdGdVpHRnlaRVJsYzJOeWFYQjBiM0pCWTJObGMzTnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRElwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQmtaWEJ5WldOaGRHVmtJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE1zSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE1zSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5FWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJRzFoY0Y5bGJuUnllU0E5SURjN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEUxaGNFVnVkSEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOeXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJOWVhCRmJuUnllU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z055d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVRXRndSVzUwY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBM0xDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelRXRndSVzUwY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBM0tTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNGdkVzVwYm5SbGNuQnlaWFJsWkY5dmNIUnBiMjRnUFNBNU9UazdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TENBNU9Ua3BLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09UazVMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVlXUmtWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUE5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E1T1Rrc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0c0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1WEc0dktpcGNiaUFxSUV4cGMzUWdiMllnY21Wd1pXRjBaV1FnWm1sbGJHUnpJSGRwZEdocGJpQjBhR2x6SUcxbGMzTmhaMlVnZEhsd1pTNWNiaUFxSUVCd2NtbDJZWFJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjFjYmlBcUlFQmpiMjV6ZEZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbkpsY0dWaGRHVmtSbWxsYkdSelh5QTlJRnM1T1RsZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCamRIbHdaVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQXdLU3hjYmlBZ0lDQndZV05yWldRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkNodGMyY3NJRElwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnFjM1I1Y0dVNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dOaXdnTUNrc1hHNGdJQ0FnYkdGNmVUb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dOU3dnWm1Gc2MyVXBMRnh1SUNBZ0lHUmxjSEpsWTJGMFpXUTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRE1zSUdaaGJITmxLU3hjYmlBZ0lDQjNaV0ZyT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeE1Dd2dabUZzYzJVcExGeHVJQ0FnSUhWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBYRzRnSUgwN1hHNWNiaUFnYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFJYaDBaVzV6YVc5dUtDOHFLaUJBZEhsd1pTQjdJV3B6Y0dJdVRXVnpjMkZuWlgwZ0tpOGdLRzF6Wnlrc0lHOWlhaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ2FXNWpiSFZrWlVsdWMzUmhibU5sS1R0Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TGtOVWVYQmxmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkZiblZ0S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVOMGVYQmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbTl2YkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUVlXTnJaV1FvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTJPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1S1UxUjVjR1Y5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRVZ1ZFcwb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNuTjBlWEJsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUk1ZWHA1S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkVaWEJ5WldOaGRHVmtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01UQTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFYyVmhheWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEazVPVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNG9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lHcHpjR0l1VFdWemMyRm5aUzV5WldGa1FtbHVZWEo1UlhoMFpXNXphVzl1S0cxelp5d2djbVZoWkdWeUxGeHVJQ0FnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaXhjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJYaDBaVzV6YVc5dUtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjMzBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1RFZIbHdaWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F4S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkZiblZ0S0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NUtVMVI1Y0dWOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z05pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUlc1MWJTaGNiaUFnSUNBZ0lEWXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURVcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBMUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F6S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTXl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVEFwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4TUN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0E1T1Rrc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubEZlSFJsYm5OcGIyNXpLRzFsYzNOaFoyVXNJSGR5YVhSbGNpeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRR1Z1ZFcwZ2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVEVkhsd1pTQTlJSHRjYmlBZ1UxUlNTVTVIT2lBd0xGeHVJQ0JEVDFKRU9pQXhMRnh1SUNCVFZGSkpUa2RmVUVsRlEwVTZJREpjYm4wN1hHNWNiaThxS2x4dUlDb2dRR1Z1ZFcwZ2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVLVTFSNWNHVWdQU0I3WEc0Z0lFcFRYMDVQVWsxQlREb2dNQ3hjYmlBZ1NsTmZVMVJTU1U1SE9pQXhMRnh1SUNCS1UxOU9WVTFDUlZJNklESmNibjA3WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ExUjVjR1VnWTNSNWNHVWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVRMVI1Y0dWOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFTjBlWEJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TGtOVWVYQmxmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdVExUjVjR1Y5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRU4wZVhCbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrTjBlWEJsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5EZEhsd1pTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCd1lXTnJaV1FnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwVUdGamEyVmtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01pd2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEZCaFkydGxaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRWVdOclpXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMxQmhZMnRsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1NsTlVlWEJsSUdwemRIbHdaU0E5SURZN1hHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVLVTFSNWNHVjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRXB6ZEhsd1pTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NUtVMVI1Y0dWOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBMkxDQXdLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVLVTFSNWNHVjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFcHpkSGx3WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKS2MzUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EyTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMHB6ZEhsd1pTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEWXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCc1lYcDVJRDBnTlR0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRXhoZW5rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0ExTENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBUR0Y2ZVNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKTVlYcDVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTk1ZWHA1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTlNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR1JsY0hKbFkyRjBaV1FnUFNBek8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE1zSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUkVaWEJ5WldOaGRHVmtJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBekxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja1JsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMFJsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F6S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2dkMlZoYXlBOUlERXdPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFYyVmhheUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXdMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFYyVmhheUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01UQXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5VjJWaGF5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXdMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMxZGxZV3NnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F4TUNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUlIVnVhVzUwWlhKd2NtVjBaV1JmYjNCMGFXOXVJRDBnT1RrNU8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRGs1T1NrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEazVPU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1aFpHUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVJRDBnWm5WdVkzUnBiMjRvYjNCMFgzWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRGs1T1N3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Yml3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1eVpYQmxZWFJsWkVacFpXeGtjMThnUFNCYk9UazVYVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1YzMwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdkVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNsY2JpQWdmVHRjYmx4dUlDQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JGZUhSbGJuTnBiMjRvTHlvcUlFQjBlWEJsSUhzaGFuTndZaTVOWlhOellXZGxmU0FxTHlBb2JYTm5LU3dnYjJKcUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1bGVIUmxibk5wYjI1ekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJGZUhSbGJuTnBiMjRzWEc0Z0lDQWdJQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBPMXh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnT1RrNU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnYW5Od1lpNU5aWE56WVdkbExuSmxZV1JDYVc1aGNubEZlSFJsYm5OcGIyNG9iWE5uTENCeVpXRmtaWElzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11WlhoMFpXNXphVzl1YzBKcGJtRnllU3hjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJGZUhSbGJuTnBiMjRwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1emZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0E1T1Rrc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubEZlSFJsYm5OcGIyNXpLRzFsYzNOaFoyVXNJSGR5YVhSbGNpeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUIxYm1sdWRHVnljSEpsZEdWa1gyOXdkR2x2YmlBOUlEazVPVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TENBNU9Ua3BLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E1T1Rrc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJPVGs1WFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1YzMwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmhiR3h2ZDBGc2FXRnpPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUW9iWE5uTENBeUtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnWkdWd2NtVmpZWFJsWkRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z015d2dabUZzYzJVcExGeHVJQ0FnSUhWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBYRzRnSUgwN1hHNWNiaUFnYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFJYaDBaVzV6YVc5dUtDOHFLaUJBZEhsd1pTQjdJV3B6Y0dJdVRXVnpjMkZuWlgwZ0tpOGdLRzF6Wnlrc0lHOWlhaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2s3WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk03WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFFXeHNiM2RCYkdsaGN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUkdWd2NtVmpZWFJsWkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRGs1T1RwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1eVpXRmtRbWx1WVhKNVJYaDBaVzV6YVc5dUtHMXpaeXdnY21WaFpHVnlMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJGZUhSbGJuTnBiMjRzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJYaDBaVzV6YVc5dUtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWMzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXpMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEazVPU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnYW5Od1lpNU5aWE56WVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVVWNGRHVnVjMmx2Ym5Nb2JXVnpjMkZuWlN3Z2QzSnBkR1Z5TEZ4dUlDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQmhiR3h2ZDE5aGJHbGhjeUE5SURJN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRUZzYkc5M1FXeHBZWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXlMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVGc2JHOTNRV3hwWVhNZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2tGc2JHOTNRV3hwWVhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVhR0Z6UVd4c2IzZEJiR2xoY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ltOXZiQ0JrWlhCeVpXTmhkR1ZrSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE1zSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lETXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhORVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVJSFZ1YVc1MFpYSndjbVYwWldSZmIzQjBhVzl1SUQwZ09UazVPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaXdnT1RrNUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEazVPU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Ga1pGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNGdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dPVGs1TENCdmNIUmZkbUZzZFdVc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6azVPVjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmtaWEJ5WldOaGRHVmtPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F4TENCbVlXeHpaU2tzWEc0Z0lDQWdkVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNsY2JpQWdmVHRjYmx4dUlDQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JGZUhSbGJuTnBiMjRvTHlvcUlFQjBlWEJsSUhzaGFuTndZaTVOWlhOellXZGxmU0FxTHlBb2JYTm5LU3dnYjJKcUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaXhjYmlBZ0lDQWdJR2x1WTJ4MVpHVkpibk4wWVc1alpTazdYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1YzMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJFWlhCeVpXTmhkR1ZrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPVGs1T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dU8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdhbk53WWk1TlpYTnpZV2RsTG5KbFlXUkNhVzVoY25sRmVIUmxibk5wYjI0b2JYTm5MQ0J5WldGa1pYSXNYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJGZUhSbGJuTnBiMjRzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJGZUhSbGJuTnBiMjRwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lERXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEazVPU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnYW5Od1lpNU5aWE56WVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVVWNGRHVnVjMmx2Ym5Nb2JXVnpjMkZuWlN3Z2QzSnBkR1Z5TEZ4dUlDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJGZUhSbGJuTnBiMjRwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2daR1Z3Y21WallYUmxaQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRVJsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUIxYm1sdWRHVnljSEpsZEdWa1gyOXdkR2x2YmlBOUlEazVPVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQbjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpd2dPVGs1S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmoxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtRmtaRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRnUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnT1RrNUxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNiaThxS2x4dUlDb2dUR2x6ZENCdlppQnlaWEJsWVhSbFpDQm1hV1ZzWkhNZ2QybDBhR2x1SUhSb2FYTWdiV1Z6YzJGblpTQjBlWEJsTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ29nUUdOdmJuTjBYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJPVGs1WFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1YzMwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JrWlhCeVpXTmhkR1ZrT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBek15d2dabUZzYzJVcExGeHVJQ0FnSUhWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBYRzRnSUgwN1hHNWNiaUFnYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFJYaDBaVzV6YVc5dUtDOHFLaUJBZEhsd1pTQjdJV3B6Y0dJdVRXVnpjMkZuWlgwZ0tpOGdLRzF6Wnlrc0lHOWlhaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaXhjYmlBZ0lDQWdJR2x1WTJ4MVpHVkpibk4wWVc1alpTazdYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElETXpPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFUmxjSEpsWTJGMFpXUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBNU9UazZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQ3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTVoWkdSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCcWMzQmlMazFsYzNOaFoyVXVjbVZoWkVKcGJtRnllVVY0ZEdWdWMybHZiaWh0YzJjc0lISmxZV1JsY2l4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1TEZ4dUlDQWdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRVY0ZEdWdWMybHZiaWs3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk45SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETXpLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWQ2IyOXNLRnh1SUNBZ0lDQWdNek1zWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdPVGs1TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCcWMzQmlMazFsYzNOaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVJYaDBaVzV6YVc5dWN5aHRaWE56WVdkbExDQjNjbWwwWlhJc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpYjI5c0lHUmxjSEpsWTJGMFpXUWdQU0F6TXp0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE16TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE16TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXpNc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhORVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z016TXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUIxYm1sdWRHVnljSEpsZEdWa1gyOXdkR2x2YmlBOUlEazVPVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqNTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0c0lEazVPU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqMTlJRzl3ZEY5MllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEk5ZlNCdmNIUmZhVzVrWlhoY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWhaR1JWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1SUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURrNU9Td2diM0IwWDNaaGJIVmxMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JpOHFLbHh1SUNvZ1RHbHpkQ0J2WmlCeVpYQmxZWFJsWkNCbWFXVnNaSE1nZDJsMGFHbHVJSFJvYVhNZ2JXVnpjMkZuWlNCMGVYQmxMbHh1SUNvZ1FIQnlhWFpoZEdVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeUE5SUZzNU9UbGRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1emZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnWkdWd2NtVmpZWFJsWkRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z016TXNJR1poYkhObEtTeGNiaUFnSUNCcFpHVnRjRzkwWlc1amVVeGxkbVZzT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lETTBMQ0F3S1N4Y2JpQWdJQ0IxYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemREb2dhbk53WWk1TlpYTnpZV2RsTG5SdlQySnFaV04wVEdsemRDaHRjMmN1WjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNTBiMDlpYW1WamRDd2dhVzVqYkhWa1pVbHVjM1JoYm1ObEtWeHVJQ0I5TzF4dVhHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEVWNGRHVnVjMmx2Ymlndktpb2dRSFI1Y0dVZ2V5RnFjM0JpTGsxbGMzTmhaMlY5SUNvdklDaHRjMmNwTENCdlltb3NYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ2FXNWpiSFZrWlVsdWMzUmhibU5sS1R0Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjenRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBek16cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbTl2YkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRVpYQnlaV05oZEdWa0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpRNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTVKWkdWdGNHOTBaVzVqZVV4bGRtVnNmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkZiblZ0S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVsa1pXMXdiM1JsYm1ONVRHVjJaV3dvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTVPVGs2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1Y21WaFpFSnBibUZ5ZVVWNGRHVnVjMmx2YmlodGMyY3NJSEpsWVdSbGNpeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRVY0ZEdWdWMybHZiaWs3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXpNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBek15eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1SlpHVnRjRzkwWlc1amVVeGxkbVZzZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNMEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZGYm5WdEtGeHVJQ0FnSUNBZ016UXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUk5aWE56WVdkbEtGeHVJQ0FnSUNBZ09UazVMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1UlhoMFpXNXphVzl1Y3lodFpYTnpZV2RsTENCM2NtbDBaWElzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2YmlrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FHVnVkVzBnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVTV1JsYlhCdmRHVnVZM2xNWlhabGJDQTlJSHRjYmlBZ1NVUkZUVkJQVkVWT1ExbGZWVTVMVGs5WFRqb2dNQ3hjYmlBZ1RrOWZVMGxFUlY5RlJrWkZRMVJUT2lBeExGeHVJQ0JKUkVWTlVFOVVSVTVVT2lBeVhHNTlPMXh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2daR1Z3Y21WallYUmxaQ0E5SURNek8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F6TXl3Z1ptRnNjMlVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwUkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNek1zSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSkVaWEJ5WldOaGRHVmtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNek1zSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMFJsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F6TXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCSlpHVnRjRzkwWlc1amVVeGxkbVZzSUdsa1pXMXdiM1JsYm1ONVgyeGxkbVZzSUQwZ016UTdYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdVNXUmxiWEJ2ZEdWdVkzbE1aWFpsYkgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFbGtaVzF3YjNSbGJtTjVUR1YyWld3Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxrbGtaVzF3YjNSbGJtTjVUR1YyWld4OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBek5Dd2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TGtsa1pXMXdiM1JsYm1ONVRHVjJaV3g5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwU1dSbGJYQnZkR1Z1WTNsTVpYWmxiQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z016UXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKSlpHVnRjRzkwWlc1amVVeGxkbVZzSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXpRc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBsa1pXMXdiM1JsYm1ONVRHVjJaV3dnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F6TkNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUlIVnVhVzUwWlhKd2NtVjBaV1JmYjNCMGFXOXVJRDBnT1RrNU8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMQ0E1T1RrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRGs1T1N3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXekpkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYm1GdFpVeHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRTVoYldWTWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrc1hHNGdJQ0FnYVdSbGJuUnBabWxsY2xaaGJIVmxPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lETXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCd2IzTnBkR2wyWlVsdWRGWmhiSFZsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRFFwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnVaV2RoZEdsMlpVbHVkRlpoYkhWbE9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURVcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JrYjNWaWJHVldZV3gxWlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBUM0IwYVc5dVlXeEdiRzloZEdsdVoxQnZhVzUwUm1sbGJHUW9iWE5uTENBMktTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnYzNSeWFXNW5WbUZzZFdVNklHMXpaeTVuWlhSVGRISnBibWRXWVd4MVpWOWhjMEkyTkNncExGeHVJQ0FnSUdGblozSmxaMkYwWlZaaGJIVmxPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lEZ3BLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1pseHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQ3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJuMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWREdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRTVoYldVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F6T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJKWkdWdWRHbG1hV1Z5Vm1Gc2RXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpGVnBiblEyTkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUWIzTnBkR2wyWlVsdWRGWmhiSFZsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JKYm5RMk5DZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUk9aV2RoZEdsMlpVbHVkRlpoYkhWbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTmpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSRWIzVmliR1VvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUkc5MVlteGxWbUZzZFdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EzT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIc2hWV2x1ZERoQmNuSmhlWDBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbmwwWlhNb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUzUnlhVzVuVm1Gc2RXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBNE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSQloyZHlaV2RoZEdWV1lXeDFaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUk9ZVzFsVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRE1wS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURNc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOQ2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFZXbHVkRFkwS0Z4dUlDQWdJQ0FnTkN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQTFLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWSmJuUTJOQ2hjYmlBZ0lDQWdJRFVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z05pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUkc5MVlteGxLRnh1SUNBZ0lDQWdOaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2V5RW9jM1J5YVc1bmZGVnBiblE0UVhKeVlYa3BmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRGNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSjVkR1Z6S0Z4dUlDQWdJQ0FnTnl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQTRLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0E0TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVkJoY25RNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJR2x6UlhoMFpXNXphVzl1T2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1FvYlhObkxDQXlLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWmNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblF1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVUbUZ0WlZCaGNuUjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblI5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEU1aGJXVlFZWEowS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkpjMFY0ZEdWdWMybHZiaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUW05dmJDaGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNYVnBjbVZrSUhOMGNtbHVaeUJ1WVcxbFgzQmhjblFnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1d2NtOTBiM1I1Y0dVdVoyVjBUbUZ0WlZCaGNuUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblF1Y0hKdmRHOTBlWEJsTG5ObGRFNWhiV1ZRWVhKMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdWNISnZkRzkwZVhCbExtTnNaV0Z5VG1GdFpWQmhjblFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowTG5CeWIzUnZkSGx3WlM1b1lYTk9ZVzFsVUdGeWRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ4ZFdseVpXUWdZbTl2YkNCcGMxOWxlSFJsYm5OcGIyNGdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblF1Y0hKdmRHOTBlWEJsTG1kbGRFbHpSWGgwWlc1emFXOXVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01pd2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25SOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1d2NtOTBiM1I1Y0dVdWMyVjBTWE5GZUhSbGJuTnBiMjRnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblI5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQzV3Y205MGIzUjVjR1V1WTJ4bFlYSkpjMFY0ZEdWdWMybHZiaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblF1Y0hKdmRHOTBlWEJsTG1oaGMwbHpSWGgwWlc1emFXOXVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0JPWVcxbFVHRnlkQ0J1WVcxbElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblErZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVaMlYwVG1GdFpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMFBuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEN3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEQ1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5CeWIzUnZkSGx3WlM1elpYUk9ZVzFsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMFBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1WVdSa1RtRnRaU0E5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F5TENCdmNIUmZkbUZzZFdVc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowTENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRtRnRaVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVG1GdFpVeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCcFpHVnVkR2xtYVdWeVgzWmhiSFZsSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtZGxkRWxrWlc1MGFXWnBaWEpXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBekxDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1YzJWMFNXUmxiblJwWm1sbGNsWmhiSFZsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlTV1JsYm5ScFptbGxjbFpoYkhWbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVhR0Z6U1dSbGJuUnBabWxsY2xaaGJIVmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0IxYVc1ME5qUWdjRzl6YVhScGRtVmZhVzUwWDNaaGJIVmxJRDBnTkR0Y2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1kbGRGQnZjMmwwYVhabFNXNTBWbUZzZFdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTkN3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRkJ2YzJsMGFYWmxTVzUwVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURRc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVZMnhsWVhKUWIzTnBkR2wyWlVsdWRGWmhiSFZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTkN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdWFHRnpVRzl6YVhScGRtVkpiblJXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEUXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dhVzUwTmpRZ2JtVm5ZWFJwZG1WZmFXNTBYM1poYkhWbElEMGdOVHRjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEU1bFoyRjBhWFpsU1c1MFZtRnNkV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOU3dnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG5ObGRFNWxaMkYwYVhabFNXNTBWbUZzZFdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpPWldkaGRHbDJaVWx1ZEZaaGJIVmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1YUdGelRtVm5ZWFJwZG1WSmJuUldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURVcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1pHOTFZbXhsSUdSdmRXSnNaVjkyWVd4MVpTQTlJRFk3WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbkJ5YjNSdmRIbHdaUzVuWlhSRWIzVmliR1ZXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbXh2WVhScGJtZFFiMmx1ZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOaXdnTUM0d0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdWMyVjBSRzkxWW14bFZtRnNkV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEWXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1WTJ4bFlYSkViM1ZpYkdWV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFlzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1oaGMwUnZkV0pzWlZaaGJIVmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpZVhSbGN5QnpkSEpwYm1kZmRtRnNkV1VnUFNBM08xeHVJQ29nUUhKbGRIVnliaUI3SVNoemRISnBibWQ4VldsdWREaEJjbkpoZVNsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbkJ5YjNSdmRIbHdaUzVuWlhSVGRISnBibWRXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hLSE4wY21sdVozeFZhVzUwT0VGeWNtRjVLWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRGNzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpZVhSbGN5QnpkSEpwYm1kZmRtRnNkV1VnUFNBM08xeHVJQ29nVkdocGN5QnBjeUJoSUhSNWNHVXRZMjl1ZG1WeWMybHZiaUIzY21Gd2NHVnlJR0Z5YjNWdVpDQmdaMlYwVTNSeWFXNW5WbUZzZFdVb0tXQmNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtZGxkRk4wY21sdVoxWmhiSFZsWDJGelFqWTBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNWllWFJsYzBGelFqWTBLRnh1SUNBZ0lDQWdkR2hwY3k1blpYUlRkSEpwYm1kV1lXeDFaU2dwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1lubDBaWE1nYzNSeWFXNW5YM1poYkhWbElEMGdOenRjYmlBcUlFNXZkR1VnZEdoaGRDQlZhVzUwT0VGeWNtRjVJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUWdiMjRnWVd4c0lHSnliM2R6WlhKekxseHVJQ29nUUhObFpTQm9kSFJ3T2k4dlkyRnVhWFZ6WlM1amIyMHZWV2x1ZERoQmNuSmhlVnh1SUNvZ1ZHaHBjeUJwY3lCaElIUjVjR1V0WTI5dWRtVnljMmx2YmlCM2NtRndjR1Z5SUdGeWIzVnVaQ0JnWjJWMFUzUnlhVzVuVm1Gc2RXVW9LV0JjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdVoyVjBVM1J5YVc1blZtRnNkV1ZmWVhOVk9DQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hWV2x1ZERoQmNuSmhlWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVpZVhSbGMwRnpWVGdvWEc0Z0lDQWdJQ0IwYUdsekxtZGxkRk4wY21sdVoxWmhiSFZsS0NrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RW9jM1J5YVc1bmZGVnBiblE0UVhKeVlYa3BmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEZOMGNtbHVaMVpoYkhWbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EzTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtTnNaV0Z5VTNSeWFXNW5WbUZzZFdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBM0xDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxuQnliM1J2ZEhsd1pTNW9ZWE5UZEhKcGJtZFdZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURjcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUdGblozSmxaMkYwWlY5MllXeDFaU0E5SURnN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5CeWIzUnZkSGx3WlM1blpYUkJaMmR5WldkaGRHVldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0E0TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVjMlYwUVdkbmNtVm5ZWFJsVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURnc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVZMnhsWVhKQloyZHlaV2RoZEdWV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRGdzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1oaGMwRm5aM0psWjJGMFpWWmhiSFZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnT0NrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFeHBjM1FnYjJZZ2NtVndaV0YwWldRZ1ptbGxiR1J6SUhkcGRHaHBiaUIwYUdseklHMWxjM05oWjJVZ2RIbHdaUzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFJRUJqYjI1emRGeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6RmRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHeHZZMkYwYVc5dVRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBURzlqWVhScGIyNU1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ienRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm05OUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNDdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1RHOWpZWFJwYjI0b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYjMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRXh2WTJGMGFXOXVUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeUE5SUZzeExESXNObDA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjU5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjR0YwYUV4cGMzUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9iWE5uTENBeEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnYzNCaGJreHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQXlLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2JHVmhaR2x1WjBOdmJXMWxiblJ6T2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRE1wS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQjBjbUZwYkdsdVowTnZiVzFsYm5Sek9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURRcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JzWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQTJLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWmNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dU8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZibjBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbGN5QTlJQzhxS2lCQWRIbHdaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlJQ292SUNoeVpXRmtaWEl1YVhORVpXeHBiV2wwWldRb0tTQS9JSEpsWVdSbGNpNXlaV0ZrVUdGamEyVmtTVzUwTXpJb0tTQTZJRnR5WldGa1pYSXVjbVZoWkVsdWRETXlLQ2xkS1R0Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2RtRnNkV1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJRzF6Wnk1aFpHUlFZWFJvS0haaGJIVmxjMXRwWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdWeklEMGdMeW9xSUVCMGVYQmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMGdLaThnS0hKbFlXUmxjaTVwYzBSbGJHbHRhWFJsWkNncElEOGdjbVZoWkdWeUxuSmxZV1JRWVdOclpXUkpiblF6TWlncElEb2dXM0psWVdSbGNpNXlaV0ZrU1c1ME16SW9LVjBwTzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMllXeDFaWE11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdiWE5uTG1Ga1pGTndZVzRvZG1Gc2RXVnpXMmxkS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVEdWaFpHbHVaME52YlcxbGJuUnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05EcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFZISmhhV3hwYm1kRGIyMXRaVzUwY3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxtRmtaRXhsWVdScGJtZEVaWFJoWTJobFpFTnZiVzFsYm5SektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJRWVhSb1RHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVR0ZqYTJWa1NXNTBNeklvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVM0JoYmt4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWQmhZMnRsWkVsdWRETXlLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBektTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXpMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURRcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lEUXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSTVpXRmthVzVuUkdWMFlXTm9aV1JEYjIxdFpXNTBjMHhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVTNSeWFXNW5LRnh1SUNBZ0lDQWdOaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ2FXNTBNeklnY0dGMGFDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1blpYUlFZWFJvVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpFWnBaV3hrS0hSb2FYTXNJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHh1ZFcxaVpYSStmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ym4wZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNXdjbTkwYjNSNWNHVXVjMlYwVUdGMGFFeHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1aFpHUlFZWFJvSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWNISnZkRzkwZVhCbExtTnNaV0Z5VUdGMGFFeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBVR0YwYUV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUdsdWRETXlJSE53WVc0Z1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTV3Y205MGIzUjVjR1V1WjJWMFUzQmhia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN0lVRnljbUY1UEc1MWJXSmxjajU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2gwYUdsekxDQXlLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhiblZ0WW1WeVBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRk53WVc1TWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNCOGZDQmJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJuMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTV3Y205MGIzUjVjR1V1WVdSa1UzQmhiaUE5SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1amJHVmhjbE53WVc1TWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGTndZVzVNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2diR1ZoWkdsdVoxOWpiMjF0Wlc1MGN5QTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVoyVjBUR1ZoWkdsdVowTnZiVzFsYm5SeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEV4bFlXUnBibWREYjIxdFpXNTBjeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRHVmhaR2x1WjBOdmJXMWxiblJ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjSEp2ZEc5MGVYQmxMbWhoYzB4bFlXUnBibWREYjIxdFpXNTBjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSFJ5WVdsc2FXNW5YMk52YlcxbGJuUnpJRDBnTkR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNW5aWFJVY21GcGJHbHVaME52YlcxbGJuUnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEUXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjR1Y0hKdmRHOTBlWEJsTG5ObGRGUnlZV2xzYVc1blEyOXRiV1Z1ZEhNZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1amJHVmhjbFJ5WVdsc2FXNW5RMjl0YldWdWRITWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWFHRnpWSEpoYVd4cGJtZERiMjF0Wlc1MGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEUXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdjM1J5YVc1bklHeGxZV1JwYm1kZlpHVjBZV05vWldSZlkyOXRiV1Z1ZEhNZ1BTQTJPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UEhOMGNtbHVaejU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTV3Y205MGIzUjVjR1V1WjJWMFRHVmhaR2x1WjBSbGRHRmphR1ZrUTI5dGJXVnVkSE5NYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RkJjbkpoZVR4emRISnBibWMrZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dOaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQSE4wY21sdVp6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNXpaWFJNWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEWXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1aFpHUk1aV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwY3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTml3Z2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNWpiR1ZoY2t4bFlXUnBibWRFWlhSaFkyaGxaRU52YlcxbGJuUnpUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJNWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lFeHZZMkYwYVc5dUlHeHZZMkYwYVc5dUlEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dVBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxuQnliM1J2ZEhsd1pTNW5aWFJNYjJOaGRHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymo1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxDQXhLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiajU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1admZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVjSEp2ZEc5MGVYQmxMbk5sZEV4dlkyRjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiajE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1d2NtOTBiM1I1Y0dVdVlXUmtURzlqWVhScGIyNGdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0c0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1admZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNreHZZMkYwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUk1iMk5oZEdsdmJreHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNiaThxS2x4dUlDb2dUR2x6ZENCdlppQnlaWEJsWVhSbFpDQm1hV1ZzWkhNZ2QybDBhR2x1SUhSb2FYTWdiV1Z6YzJGblpTQjBlWEJsTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ29nUUdOdmJuTjBYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV5WlhCbFlYUmxaRVpwWld4a2MxOGdQU0JiTVYwN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm05OUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ1lXNXViM1JoZEdsdmJreHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRUZ1Ym05MFlYUnBiMjVNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjR1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2xjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1iMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1iMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dU8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtRVzV1YjNSaGRHbHZiaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRVzV1YjNSaGRHbHZia3hwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6RmRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdjR0YwYUV4cGMzUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9iWE5uTENBeEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnYzI5MWNtTmxSbWxzWlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F5S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdZbVZuYVc0NklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTXlrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJR1Z1WkRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0EwS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dU8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjU5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVnpJRDBnTHlvcUlFQjBlWEJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjBnS2k4Z0tISmxZV1JsY2k1cGMwUmxiR2x0YVhSbFpDZ3BJRDhnY21WaFpHVnlMbkpsWVdSUVlXTnJaV1JKYm5Rek1pZ3BJRG9nVzNKbFlXUmxjaTV5WldGa1NXNTBNeklvS1YwcE8xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYlhObkxtRmtaRkJoZEdnb2RtRnNkV1Z6VzJsZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUyOTFjbU5sUm1sc1pTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0hKbFlXUmxjaTV5WldGa1NXNTBNeklvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUW1WbmFXNG9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWdVpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dUxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUVlYUm9UR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVUdGamEyVmtTVzUwTXpJb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRElwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNeWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFNXNTBNeklvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEUXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVsdWRETXlLRnh1SUNBZ0lDQWdOQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ2FXNTBNeklnY0dGMGFDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEZCaGRHaE1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z01Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWMyVjBVR0YwYUV4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsSUh4OElGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTV3Y205MGIzUjVjR1V1WVdSa1VHRjBhQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRWVhSb1RHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlFZWFJvVEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSE52ZFhKalpWOW1hV3hsSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExtZGxkRk52ZFhKalpVWnBiR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRk52ZFhKalpVWnBiR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTV3Y205MGIzUjVjR1V1WTJ4bFlYSlRiM1Z5WTJWR2FXeGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNaXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTV3Y205MGIzUjVjR1V1YUdGelUyOTFjbU5sUm1sc1pTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dhVzUwTXpJZ1ltVm5hVzRnUFNBek8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVoyVjBRbVZuYVc0Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTXl3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRUpsWjJsdUlEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExtTnNaV0Z5UW1WbmFXNGdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMbkJ5YjNSdmRIbHdaUzVvWVhOQ1pXZHBiaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYVc1ME16SWdaVzVrSUQwZ05EdGNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExtZGxkRVZ1WkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0EwTENBd0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWMyVjBSVzVrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjR1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSVzVrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTkN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWFHRnpSVzVrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTkNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCQmJtNXZkR0YwYVc5dUlHRnVibTkwWVhScGIyNGdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymo1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NXdjbTkwYjNSNWNHVXVaMlYwUVc1dWIzUmhkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaXdnTVNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiajU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dWNISnZkRzkwZVhCbExuTmxkRUZ1Ym05MFlYUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NXdjbTkwYjNSNWNHVXVZV1JrUVc1dWIzUmhkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeExDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dUxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1iMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKQmJtNXZkR0YwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkJibTV2ZEdGMGFXOXVUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaQ2hsZUhCdmNuUnpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZcE8xeHVJaXdpTHk4Z2NHRmphMkZuWlRvZ2NISnZkRzh1Y25CakxuWXhYRzR2THlCbWFXeGxPaUJ3Y205MGJ5OXljR012ZGpFdllYVjBhQzV3Y205MGIxeHVYRzUyWVhJZ2NISnZkRzlmY25CalgzWXhYMkYxZEdoZmNHSWdQU0J5WlhGMWFYSmxLRndpTGk0dkxpNHZMaTR2Y0hKdmRHOHZjbkJqTDNZeEwyRjFkR2hmY0dKY0lpazdYRzUyWVhJZ1ozSndZeUE5SUhKbGNYVnBjbVVvWENKQWFXMXdjbTlpWVdKc1pTMWxibWN2WjNKd1l5MTNaV0pjSWlrdVozSndZenRjYmx4dWRtRnlJRUYxZEdoVFpYSjJhV05sSUQwZ0tHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ1puVnVZM1JwYjI0Z1FYVjBhRk5sY25acFkyVW9LU0I3ZlZ4dUlDQkJkWFJvVTJWeWRtbGpaUzV6WlhKMmFXTmxUbUZ0WlNBOUlGd2ljSEp2ZEc4dWNuQmpMbll4TGtGMWRHaFRaWEoyYVdObFhDSTdYRzRnSUhKbGRIVnliaUJCZFhSb1UyVnlkbWxqWlR0Y2JuMG9LU2s3WEc1Y2JrRjFkR2hUWlhKMmFXTmxMa0YxZEdobGJuUnBZMkYwWlNBOUlIdGNiaUFnYldWMGFHOWtUbUZ0WlRvZ1hDSkJkWFJvWlc1MGFXTmhkR1ZjSWl4Y2JpQWdjMlZ5ZG1salpUb2dRWFYwYUZObGNuWnBZMlVzWEc0Z0lISmxjWFZsYzNSVGRISmxZVzA2SUdaaGJITmxMRnh1SUNCeVpYTndiMjV6WlZOMGNtVmhiVG9nWm1Gc2MyVXNYRzRnSUhKbGNYVmxjM1JVZVhCbE9pQndjbTkwYjE5eWNHTmZkakZmWVhWMGFGOXdZaTVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTEZ4dUlDQnlaWE53YjI1elpWUjVjR1U2SUhCeWIzUnZYM0p3WTE5Mk1WOWhkWFJvWDNCaUxrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxYRzU5TzF4dVhHNWxlSEJ2Y25SekxrRjFkR2hUWlhKMmFXTmxJRDBnUVhWMGFGTmxjblpwWTJVN1hHNWNibVoxYm1OMGFXOXVJRUYxZEdoVFpYSjJhV05sUTJ4cFpXNTBLSE5sY25acFkyVkliM04wTENCdmNIUnBiMjV6S1NCN1hHNGdJSFJvYVhNdWMyVnlkbWxqWlVodmMzUWdQU0J6WlhKMmFXTmxTRzl6ZER0Y2JpQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3lCOGZDQjdmVHRjYm4xY2JseHVRWFYwYUZObGNuWnBZMlZEYkdsbGJuUXVjSEp2ZEc5MGVYQmxMbUYxZEdobGJuUnBZMkYwWlNBOUlHWjFibU4wYVc5dUlHRjFkR2hsYm5ScFkyRjBaU2h5WlhGMVpYTjBUV1Z6YzJGblpTd2diV1YwWVdSaGRHRXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lHbG1JQ2hoY21kMWJXVnVkSE11YkdWdVozUm9JRDA5UFNBeUtTQjdYRzRnSUNBZ1kyRnNiR0poWTJzZ1BTQmhjbWQxYldWdWRITmJNVjA3WEc0Z0lIMWNiaUFnZG1GeUlHTnNhV1Z1ZENBOUlHZHljR011ZFc1aGNua29RWFYwYUZObGNuWnBZMlV1UVhWMGFHVnVkR2xqWVhSbExDQjdYRzRnSUNBZ2NtVnhkV1Z6ZERvZ2NtVnhkV1Z6ZEUxbGMzTmhaMlVzWEc0Z0lDQWdhRzl6ZERvZ2RHaHBjeTV6WlhKMmFXTmxTRzl6ZEN4Y2JpQWdJQ0J0WlhSaFpHRjBZVG9nYldWMFlXUmhkR0VzWEc0Z0lDQWdkSEpoYm5Od2IzSjBPaUIwYUdsekxtOXdkR2x2Ym5NdWRISmhibk53YjNKMExGeHVJQ0FnSUdSbFluVm5PaUIwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NzWEc0Z0lDQWdiMjVGYm1RNklHWjFibU4wYVc5dUlDaHlaWE53YjI1elpTa2dlMXh1SUNBZ0lDQWdhV1lnS0dOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhOd2IyNXpaUzV6ZEdGMGRYTWdJVDA5SUdkeWNHTXVRMjlrWlM1UFN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmxjbklnUFNCdVpYY2dSWEp5YjNJb2NtVnpjRzl1YzJVdWMzUmhkSFZ6VFdWemMyRm5aU2s3WEc0Z0lDQWdJQ0FnSUNBZ1pYSnlMbU52WkdVZ1BTQnlaWE53YjI1elpTNXpkR0YwZFhNN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5TG0xbGRHRmtZWFJoSUQwZ2NtVnpjRzl1YzJVdWRISmhhV3hsY25NN1hHNGdJQ0FnSUNBZ0lDQWdZMkZzYkdKaFkyc29aWEp5TENCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCallXeHNZbUZqYXlodWRXeHNMQ0J5WlhOd2IyNXpaUzV0WlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTazdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdZMkZ1WTJWc09pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0JqWVd4c1ltRmpheUE5SUc1MWJHdzdYRzRnSUNBZ0lDQmpiR2xsYm5RdVkyeHZjMlVvS1R0Y2JpQWdJQ0I5WEc0Z0lIMDdYRzU5TzF4dVhHNWxlSEJ2Y25SekxrRjFkR2hUWlhKMmFXTmxRMnhwWlc1MElEMGdRWFYwYUZObGNuWnBZMlZEYkdsbGJuUTdYRzVjYm5aaGNpQkZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxJRDBnS0daMWJtTjBhVzl1SUNncElIdGNiaUFnWm5WdVkzUnBiMjRnUlhoMFpYSnVZV3hCZFhSb1UyVnlkbWxqWlNncElIdDlYRzRnSUVWNGRHVnlibUZzUVhWMGFGTmxjblpwWTJVdWMyVnlkbWxqWlU1aGJXVWdQU0JjSW5CeWIzUnZMbkp3WXk1Mk1TNUZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxYQ0k3WEc0Z0lISmxkSFZ5YmlCRmVIUmxjbTVoYkVGMWRHaFRaWEoyYVdObE8xeHVmU2dwS1R0Y2JseHVSWGgwWlhKdVlXeEJkWFJvVTJWeWRtbGpaUzVCZFhSb1pXNTBhV05oZEdWVWJ5QTlJSHRjYmlBZ2JXVjBhRzlrVG1GdFpUb2dYQ0pCZFhSb1pXNTBhV05oZEdWVWIxd2lMRnh1SUNCelpYSjJhV05sT2lCRmVIUmxjbTVoYkVGMWRHaFRaWEoyYVdObExGeHVJQ0J5WlhGMVpYTjBVM1J5WldGdE9pQm1ZV3h6WlN4Y2JpQWdjbVZ6Y0c5dWMyVlRkSEpsWVcwNklHWmhiSE5sTEZ4dUlDQnlaWEYxWlhOMFZIbHdaVG9nY0hKdmRHOWZjbkJqWDNZeFgyRjFkR2hmY0dJdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMRnh1SUNCeVpYTndiMjV6WlZSNWNHVTZJSEJ5YjNSdlgzSndZMTkyTVY5aGRYUm9YM0JpTGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVmNibjA3WEc1Y2JtVjRjRzl5ZEhNdVJYaDBaWEp1WVd4QmRYUm9VMlZ5ZG1salpTQTlJRVY0ZEdWeWJtRnNRWFYwYUZObGNuWnBZMlU3WEc1Y2JtWjFibU4wYVc5dUlFVjRkR1Z5Ym1Gc1FYVjBhRk5sY25acFkyVkRiR2xsYm5Rb2MyVnlkbWxqWlVodmMzUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2RHaHBjeTV6WlhKMmFXTmxTRzl6ZENBOUlITmxjblpwWTJWSWIzTjBPMXh1SUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpJSHg4SUh0OU8xeHVmVnh1WEc1RmVIUmxjbTVoYkVGMWRHaFRaWEoyYVdObFEyeHBaVzUwTG5CeWIzUnZkSGx3WlM1aGRYUm9aVzUwYVdOaGRHVlVieUE5SUdaMWJtTjBhVzl1SUdGMWRHaGxiblJwWTJGMFpWUnZLSEpsY1hWbGMzUk5aWE56WVdkbExDQnRaWFJoWkdGMFlTd2dZMkZzYkdKaFkyc3BJSHRjYmlBZ2FXWWdLR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ2dQVDA5SURJcElIdGNiaUFnSUNCallXeHNZbUZqYXlBOUlHRnlaM1Z0Wlc1MGMxc3hYVHRjYmlBZ2ZWeHVJQ0IyWVhJZ1kyeHBaVzUwSUQwZ1ozSndZeTUxYm1GeWVTaEZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxMa0YxZEdobGJuUnBZMkYwWlZSdkxDQjdYRzRnSUNBZ2NtVnhkV1Z6ZERvZ2NtVnhkV1Z6ZEUxbGMzTmhaMlVzWEc0Z0lDQWdhRzl6ZERvZ2RHaHBjeTV6WlhKMmFXTmxTRzl6ZEN4Y2JpQWdJQ0J0WlhSaFpHRjBZVG9nYldWMFlXUmhkR0VzWEc0Z0lDQWdkSEpoYm5Od2IzSjBPaUIwYUdsekxtOXdkR2x2Ym5NdWRISmhibk53YjNKMExGeHVJQ0FnSUdSbFluVm5PaUIwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NzWEc0Z0lDQWdiMjVGYm1RNklHWjFibU4wYVc5dUlDaHlaWE53YjI1elpTa2dlMXh1SUNBZ0lDQWdhV1lnS0dOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhOd2IyNXpaUzV6ZEdGMGRYTWdJVDA5SUdkeWNHTXVRMjlrWlM1UFN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmxjbklnUFNCdVpYY2dSWEp5YjNJb2NtVnpjRzl1YzJVdWMzUmhkSFZ6VFdWemMyRm5aU2s3WEc0Z0lDQWdJQ0FnSUNBZ1pYSnlMbU52WkdVZ1BTQnlaWE53YjI1elpTNXpkR0YwZFhNN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5TG0xbGRHRmtZWFJoSUQwZ2NtVnpjRzl1YzJVdWRISmhhV3hsY25NN1hHNGdJQ0FnSUNBZ0lDQWdZMkZzYkdKaFkyc29aWEp5TENCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCallXeHNZbUZqYXlodWRXeHNMQ0J5WlhOd2IyNXpaUzV0WlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTazdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdZMkZ1WTJWc09pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0JqWVd4c1ltRmpheUE5SUc1MWJHdzdYRzRnSUNBZ0lDQmpiR2xsYm5RdVkyeHZjMlVvS1R0Y2JpQWdJQ0I5WEc0Z0lIMDdYRzU5TzF4dVhHNWxlSEJ2Y25SekxrVjRkR1Z5Ym1Gc1FYVjBhRk5sY25acFkyVkRiR2xsYm5RZ1BTQkZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxRMnhwWlc1ME8xeHVYRzRpTENJdkx5QndZV05yWVdkbE9pQndjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhYRzR2THlCbWFXeGxPaUJ3Y205MGJ5OXljR012ZDJWaWNuUmpMM1l4TDNOcFoyNWhiR2x1Wnk1d2NtOTBiMXh1WEc1MllYSWdjSEp2ZEc5ZmNuQmpYM2RsWW5KMFkxOTJNVjl6YVdkdVlXeHBibWRmY0dJZ1BTQnlaWEYxYVhKbEtGd2lMaTR2TGk0dkxpNHZMaTR2Y0hKdmRHOHZjbkJqTDNkbFluSjBZeTkyTVM5emFXZHVZV3hwYm1kZmNHSmNJaWs3WEc1MllYSWdaM0p3WXlBOUlISmxjWFZwY21Vb1hDSkFhVzF3Y205aVlXSnNaUzFsYm1jdlozSndZeTEzWldKY0lpa3VaM0p3WXp0Y2JseHVkbUZ5SUZOcFoyNWhiR2x1WjFObGNuWnBZMlVnUFNBb1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNCbWRXNWpkR2x2YmlCVGFXZHVZV3hwYm1kVFpYSjJhV05sS0NrZ2UzMWNiaUFnVTJsbmJtRnNhVzVuVTJWeWRtbGpaUzV6WlhKMmFXTmxUbUZ0WlNBOUlGd2ljSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUYVdkdVlXeHBibWRUWlhKMmFXTmxYQ0k3WEc0Z0lISmxkSFZ5YmlCVGFXZHVZV3hwYm1kVFpYSjJhV05sTzF4dWZTZ3BLVHRjYmx4dVUybG5ibUZzYVc1blUyVnlkbWxqWlM1RFlXeHNJRDBnZTF4dUlDQnRaWFJvYjJST1lXMWxPaUJjSWtOaGJHeGNJaXhjYmlBZ2MyVnlkbWxqWlRvZ1UybG5ibUZzYVc1blUyVnlkbWxqWlN4Y2JpQWdjbVZ4ZFdWemRGTjBjbVZoYlRvZ1ptRnNjMlVzWEc0Z0lISmxjM0J2Ym5ObFUzUnlaV0Z0T2lCMGNuVmxMRnh1SUNCeVpYRjFaWE4wVkhsd1pUb2djSEp2ZEc5ZmNuQmpYM2RsWW5KMFkxOTJNVjl6YVdkdVlXeHBibWRmY0dJdVEyRnNiRkpsY1hWbGMzUXNYRzRnSUhKbGMzQnZibk5sVkhsd1pUb2djSEp2ZEc5ZmNuQmpYM2RsWW5KMFkxOTJNVjl6YVdkdVlXeHBibWRmY0dJdVEyRnNiRkpsYzNCdmJuTmxYRzU5TzF4dVhHNVRhV2R1WVd4cGJtZFRaWEoyYVdObExrTmhiR3hWY0dSaGRHVWdQU0I3WEc0Z0lHMWxkR2h2WkU1aGJXVTZJRndpUTJGc2JGVndaR0YwWlZ3aUxGeHVJQ0J6WlhKMmFXTmxPaUJUYVdkdVlXeHBibWRUWlhKMmFXTmxMRnh1SUNCeVpYRjFaWE4wVTNSeVpXRnRPaUJtWVd4elpTeGNiaUFnY21WemNHOXVjMlZUZEhKbFlXMDZJR1poYkhObExGeHVJQ0J5WlhGMVpYTjBWSGx3WlRvZ2NISnZkRzlmY25CalgzZGxZbkowWTE5Mk1WOXphV2R1WVd4cGJtZGZjR0l1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1FzWEc0Z0lISmxjM0J2Ym5ObFZIbHdaVG9nY0hKdmRHOWZjbkJqWDNkbFluSjBZMTkyTVY5emFXZHVZV3hwYm1kZmNHSXVRMkZzYkZWd1pHRjBaVkpsYzNCdmJuTmxYRzU5TzF4dVhHNVRhV2R1WVd4cGJtZFRaWEoyYVdObExrRnVjM2RsY2lBOUlIdGNiaUFnYldWMGFHOWtUbUZ0WlRvZ1hDSkJibk4zWlhKY0lpeGNiaUFnYzJWeWRtbGpaVG9nVTJsbmJtRnNhVzVuVTJWeWRtbGpaU3hjYmlBZ2NtVnhkV1Z6ZEZOMGNtVmhiVG9nZEhKMVpTeGNiaUFnY21WemNHOXVjMlZUZEhKbFlXMDZJSFJ5ZFdVc1hHNGdJSEpsY1hWbGMzUlVlWEJsT2lCd2NtOTBiMTl5Y0dOZmQyVmljblJqWDNZeFgzTnBaMjVoYkdsdVoxOXdZaTVCYm5OM1pYSlNaWE53YjI1elpTeGNiaUFnY21WemNHOXVjMlZVZVhCbE9pQndjbTkwYjE5eWNHTmZkMlZpY25SalgzWXhYM05wWjI1aGJHbHVaMTl3WWk1QmJuTjNaWEpTWlhGMVpYTjBYRzU5TzF4dVhHNVRhV2R1WVd4cGJtZFRaWEoyYVdObExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5JRDBnZTF4dUlDQnRaWFJvYjJST1lXMWxPaUJjSWs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblhDSXNYRzRnSUhObGNuWnBZMlU2SUZOcFoyNWhiR2x1WjFObGNuWnBZMlVzWEc0Z0lISmxjWFZsYzNSVGRISmxZVzA2SUdaaGJITmxMRnh1SUNCeVpYTndiMjV6WlZOMGNtVmhiVG9nWm1Gc2MyVXNYRzRnSUhKbGNYVmxjM1JVZVhCbE9pQndjbTkwYjE5eWNHTmZkMlZpY25SalgzWXhYM05wWjI1aGJHbHVaMTl3WWk1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjWFZsYzNRc1hHNGdJSEpsYzNCdmJuTmxWSGx3WlRvZ2NISnZkRzlmY25CalgzZGxZbkowWTE5Mk1WOXphV2R1WVd4cGJtZGZjR0l1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlZ4dWZUdGNibHh1Wlhod2IzSjBjeTVUYVdkdVlXeHBibWRUWlhKMmFXTmxJRDBnVTJsbmJtRnNhVzVuVTJWeWRtbGpaVHRjYmx4dVpuVnVZM1JwYjI0Z1UybG5ibUZzYVc1blUyVnlkbWxqWlVOc2FXVnVkQ2h6WlhKMmFXTmxTRzl6ZEN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0IwYUdsekxuTmxjblpwWTJWSWIzTjBJRDBnYzJWeWRtbGpaVWh2YzNRN1hHNGdJSFJvYVhNdWIzQjBhVzl1Y3lBOUlHOXdkR2x2Ym5NZ2ZId2dlMzA3WEc1OVhHNWNibE5wWjI1aGJHbHVaMU5sY25acFkyVkRiR2xsYm5RdWNISnZkRzkwZVhCbExtTmhiR3dnUFNCbWRXNWpkR2x2YmlCallXeHNLSEpsY1hWbGMzUk5aWE56WVdkbExDQnRaWFJoWkdGMFlTa2dlMXh1SUNCMllYSWdiR2x6ZEdWdVpYSnpJRDBnZTF4dUlDQWdJR1JoZEdFNklGdGRMRnh1SUNBZ0lHVnVaRG9nVzEwc1hHNGdJQ0FnYzNSaGRIVnpPaUJiWFZ4dUlDQjlPMXh1SUNCMllYSWdZMnhwWlc1MElEMGdaM0p3WXk1cGJuWnZhMlVvVTJsbmJtRnNhVzVuVTJWeWRtbGpaUzVEWVd4c0xDQjdYRzRnSUNBZ2NtVnhkV1Z6ZERvZ2NtVnhkV1Z6ZEUxbGMzTmhaMlVzWEc0Z0lDQWdhRzl6ZERvZ2RHaHBjeTV6WlhKMmFXTmxTRzl6ZEN4Y2JpQWdJQ0J0WlhSaFpHRjBZVG9nYldWMFlXUmhkR0VzWEc0Z0lDQWdkSEpoYm5Od2IzSjBPaUIwYUdsekxtOXdkR2x2Ym5NdWRISmhibk53YjNKMExGeHVJQ0FnSUdSbFluVm5PaUIwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NzWEc0Z0lDQWdiMjVOWlhOellXZGxPaUJtZFc1amRHbHZiaUFvY21WemNHOXVjMlZOWlhOellXZGxLU0I3WEc0Z0lDQWdJQ0JzYVhOMFpXNWxjbk11WkdGMFlTNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaG9ZVzVrYkdWeUtTQjdYRzRnSUNBZ0lDQWdJR2hoYm1Sc1pYSW9jbVZ6Y0c5dWMyVk5aWE56WVdkbEtUdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMHNYRzRnSUNBZ2IyNUZibVE2SUdaMWJtTjBhVzl1SUNoemRHRjBkWE1zSUhOMFlYUjFjMDFsYzNOaFoyVXNJSFJ5WVdsc1pYSnpLU0I3WEc0Z0lDQWdJQ0JzYVhOMFpXNWxjbk11YzNSaGRIVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLR2hoYm1Sc1pYSXBJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWg3SUdOdlpHVTZJSE4wWVhSMWN5d2daR1YwWVdsc2N6b2djM1JoZEhWelRXVnpjMkZuWlN3Z2JXVjBZV1JoZEdFNklIUnlZV2xzWlhKeklIMHBPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0JzYVhOMFpXNWxjbk11Wlc1a0xtWnZja1ZoWTJnb1puVnVZM1JwYjI0Z0tHaGhibVJzWlhJcElIdGNiaUFnSUNBZ0lDQWdhR0Z1Wkd4bGNpaDdJR052WkdVNklITjBZWFIxY3l3Z1pHVjBZV2xzY3pvZ2MzUmhkSFZ6VFdWemMyRm5aU3dnYldWMFlXUmhkR0U2SUhSeVlXbHNaWEp6SUgwcE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQnNhWE4wWlc1bGNuTWdQU0J1ZFd4c08xeHVJQ0FnSUgxY2JpQWdmU2s3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjI0NklHWjFibU4wYVc5dUlDaDBlWEJsTENCb1lXNWtiR1Z5S1NCN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY25OYmRIbHdaVjB1Y0hWemFDaG9ZVzVrYkdWeUtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNBZ0lIMHNYRzRnSUNBZ1kyRnVZMlZzT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQnNhWE4wWlc1bGNuTWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ1kyeHBaVzUwTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdmVnh1SUNCOU8xeHVmVHRjYmx4dVUybG5ibUZzYVc1blUyVnlkbWxqWlVOc2FXVnVkQzV3Y205MGIzUjVjR1V1WTJGc2JGVndaR0YwWlNBOUlHWjFibU4wYVc5dUlHTmhiR3hWY0dSaGRHVW9jbVZ4ZFdWemRFMWxjM05oWjJVc0lHMWxkR0ZrWVhSaExDQmpZV3hzWW1GamF5a2dlMXh1SUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQTlQVDBnTWlrZ2UxeHVJQ0FnSUdOaGJHeGlZV05ySUQwZ1lYSm5kVzFsYm5Seld6RmRPMXh1SUNCOVhHNGdJSFpoY2lCamJHbGxiblFnUFNCbmNuQmpMblZ1WVhKNUtGTnBaMjVoYkdsdVoxTmxjblpwWTJVdVEyRnNiRlZ3WkdGMFpTd2dlMXh1SUNBZ0lISmxjWFZsYzNRNklISmxjWFZsYzNSTlpYTnpZV2RsTEZ4dUlDQWdJR2h2YzNRNklIUm9hWE11YzJWeWRtbGpaVWh2YzNRc1hHNGdJQ0FnYldWMFlXUmhkR0U2SUcxbGRHRmtZWFJoTEZ4dUlDQWdJSFJ5WVc1emNHOXlkRG9nZEdocGN5NXZjSFJwYjI1ekxuUnlZVzV6Y0c5eWRDeGNiaUFnSUNCa1pXSjFaem9nZEdocGN5NXZjSFJwYjI1ekxtUmxZblZuTEZ4dUlDQWdJRzl1Ulc1a09pQm1kVzVqZEdsdmJpQW9jbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvY21WemNHOXVjMlV1YzNSaGRIVnpJQ0U5UFNCbmNuQmpMa052WkdVdVQwc3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdaWEp5SUQwZ2JtVjNJRVZ5Y205eUtISmxjM0J2Ym5ObExuTjBZWFIxYzAxbGMzTmhaMlVwTzF4dUlDQWdJQ0FnSUNBZ0lHVnljaTVqYjJSbElEMGdjbVZ6Y0c5dWMyVXVjM1JoZEhWek8xeHVJQ0FnSUNBZ0lDQWdJR1Z5Y2k1dFpYUmhaR0YwWVNBOUlISmxjM0J2Ym5ObExuUnlZV2xzWlhKek8xeHVJQ0FnSUNBZ0lDQWdJR05oYkd4aVlXTnJLR1Z5Y2l3Z2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb2JuVnNiQ3dnY21WemNHOXVjMlV1YldWemMyRm5aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMHBPMXh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJR05oYm1ObGJEb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnWTJGc2JHSmhZMnNnUFNCdWRXeHNPMXh1SUNBZ0lDQWdZMnhwWlc1MExtTnNiM05sS0NrN1hHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlR0Y2JseHVVMmxuYm1Gc2FXNW5VMlZ5ZG1salpVTnNhV1Z1ZEM1d2NtOTBiM1I1Y0dVdVlXNXpkMlZ5SUQwZ1puVnVZM1JwYjI0Z1lXNXpkMlZ5S0cxbGRHRmtZWFJoS1NCN1hHNGdJSFpoY2lCc2FYTjBaVzVsY25NZ1BTQjdYRzRnSUNBZ1pHRjBZVG9nVzEwc1hHNGdJQ0FnWlc1a09pQmJYU3hjYmlBZ0lDQnpkR0YwZFhNNklGdGRYRzRnSUgwN1hHNGdJSFpoY2lCamJHbGxiblFnUFNCbmNuQmpMbU5zYVdWdWRDaFRhV2R1WVd4cGJtZFRaWEoyYVdObExrRnVjM2RsY2l3Z2UxeHVJQ0FnSUdodmMzUTZJSFJvYVhNdWMyVnlkbWxqWlVodmMzUXNYRzRnSUNBZ2JXVjBZV1JoZEdFNklHMWxkR0ZrWVhSaExGeHVJQ0FnSUhSeVlXNXpjRzl5ZERvZ2RHaHBjeTV2Y0hScGIyNXpMblJ5WVc1emNHOXlkRnh1SUNCOUtUdGNiaUFnWTJ4cFpXNTBMbTl1Ulc1a0tHWjFibU4wYVc5dUlDaHpkR0YwZFhNc0lITjBZWFIxYzAxbGMzTmhaMlVzSUhSeVlXbHNaWEp6S1NCN1hHNGdJQ0FnYkdsemRHVnVaWEp6TG5OMFlYUjFjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hvWVc1a2JHVnlLU0I3WEc0Z0lDQWdJQ0JvWVc1a2JHVnlLSHNnWTI5a1pUb2djM1JoZEhWekxDQmtaWFJoYVd4ek9pQnpkR0YwZFhOTlpYTnpZV2RsTENCdFpYUmhaR0YwWVRvZ2RISmhhV3hsY25NZ2ZTazdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2JHbHpkR1Z1WlhKekxtVnVaQzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hvWVc1a2JHVnlLU0I3WEc0Z0lDQWdJQ0JvWVc1a2JHVnlLSHNnWTI5a1pUb2djM1JoZEhWekxDQmtaWFJoYVd4ek9pQnpkR0YwZFhOTlpYTnpZV2RsTENCdFpYUmhaR0YwWVRvZ2RISmhhV3hsY25NZ2ZTazdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2JHbHpkR1Z1WlhKeklEMGdiblZzYkR0Y2JpQWdmU2s3WEc0Z0lHTnNhV1Z1ZEM1dmJrMWxjM05oWjJVb1puVnVZM1JwYjI0Z0tHMWxjM05oWjJVcElIdGNiaUFnSUNCc2FYTjBaVzVsY25NdVpHRjBZUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hvWVc1a2JHVnlLU0I3WEc0Z0lDQWdJQ0JvWVc1a2JHVnlLRzFsYzNOaFoyVXBPMXh1SUNBZ0lIMHBYRzRnSUgwcE8xeHVJQ0JqYkdsbGJuUXVjM1JoY25Rb2JXVjBZV1JoZEdFcE8xeHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHOXVPaUJtZFc1amRHbHZiaUFvZEhsd1pTd2dhR0Z1Wkd4bGNpa2dlMXh1SUNBZ0lDQWdiR2x6ZEdWdVpYSnpXM1I1Y0dWZExuQjFjMmdvYUdGdVpHeGxjaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdJQ0I5TEZ4dUlDQWdJSGR5YVhSbE9pQm1kVzVqZEdsdmJpQW9jbVZ4ZFdWemRFMWxjM05oWjJVcElIdGNiaUFnSUNBZ0lHTnNhV1Z1ZEM1elpXNWtLSEpsY1hWbGMzUk5aWE56WVdkbEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNBZ0lIMHNYRzRnSUNBZ1pXNWtPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCamJHbGxiblF1Wm1sdWFYTm9VMlZ1WkNncE8xeHVJQ0FnSUgwc1hHNGdJQ0FnWTJGdVkyVnNPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY25NZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnWTJ4cFpXNTBMbU5zYjNObEtDazdYRzRnSUNBZ2ZWeHVJQ0I5TzF4dWZUdGNibHh1VTJsbmJtRnNhVzVuVTJWeWRtbGpaVU5zYVdWdWRDNXdjbTkwYjNSNWNHVXViM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2NnUFNCbWRXNWpkR2x2YmlCdmNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFp5aHlaWEYxWlhOMFRXVnpjMkZuWlN3Z2JXVjBZV1JoZEdFc0lHTmhiR3hpWVdOcktTQjdYRzRnSUdsbUlDaGhjbWQxYldWdWRITXViR1Z1WjNSb0lEMDlQU0F5S1NCN1hHNGdJQ0FnWTJGc2JHSmhZMnNnUFNCaGNtZDFiV1Z1ZEhOYk1WMDdYRzRnSUgxY2JpQWdkbUZ5SUdOc2FXVnVkQ0E5SUdkeWNHTXVkVzVoY25rb1UybG5ibUZzYVc1blUyVnlkbWxqWlM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFp5d2dlMXh1SUNBZ0lISmxjWFZsYzNRNklISmxjWFZsYzNSTlpYTnpZV2RsTEZ4dUlDQWdJR2h2YzNRNklIUm9hWE11YzJWeWRtbGpaVWh2YzNRc1hHNGdJQ0FnYldWMFlXUmhkR0U2SUcxbGRHRmtZWFJoTEZ4dUlDQWdJSFJ5WVc1emNHOXlkRG9nZEdocGN5NXZjSFJwYjI1ekxuUnlZVzV6Y0c5eWRDeGNiaUFnSUNCa1pXSjFaem9nZEdocGN5NXZjSFJwYjI1ekxtUmxZblZuTEZ4dUlDQWdJRzl1Ulc1a09pQm1kVzVqZEdsdmJpQW9jbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvY21WemNHOXVjMlV1YzNSaGRIVnpJQ0U5UFNCbmNuQmpMa052WkdVdVQwc3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdaWEp5SUQwZ2JtVjNJRVZ5Y205eUtISmxjM0J2Ym5ObExuTjBZWFIxYzAxbGMzTmhaMlVwTzF4dUlDQWdJQ0FnSUNBZ0lHVnljaTVqYjJSbElEMGdjbVZ6Y0c5dWMyVXVjM1JoZEhWek8xeHVJQ0FnSUNBZ0lDQWdJR1Z5Y2k1dFpYUmhaR0YwWVNBOUlISmxjM0J2Ym5ObExuUnlZV2xzWlhKek8xeHVJQ0FnSUNBZ0lDQWdJR05oYkd4aVlXTnJLR1Z5Y2l3Z2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb2JuVnNiQ3dnY21WemNHOXVjMlV1YldWemMyRm5aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMHBPMXh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJR05oYm1ObGJEb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnWTJGc2JHSmhZMnNnUFNCdWRXeHNPMXh1SUNBZ0lDQWdZMnhwWlc1MExtTnNiM05sS0NrN1hHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlR0Y2JseHVaWGh3YjNKMGN5NVRhV2R1WVd4cGJtZFRaWEoyYVdObFEyeHBaVzUwSUQwZ1UybG5ibUZzYVc1blUyVnlkbWxqWlVOc2FXVnVkRHRjYmx4dUlpd2lhVzUwWlhKbVlXTmxJRkpsWVdSNVVHVmxjaUI3WEc1Y2RIQmpPaUJTVkVOUVpXVnlRMjl1Ym1WamRHbHZianRjYmx4MFpHTTZJRkpVUTBSaGRHRkRhR0Z1Ym1Wc095QmNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJRzVsZDFCbFpYSkRiMjV1WldOMGFXOXVSbTl5UTJ4cFpXNTBLR1JwYzJGaWJHVlVjbWxqYTJ4bE9pQmliMjlzWldGdUxDQnlkR05EYjI1bWFXYy9PaUJTVkVORGIyNW1hV2QxY21GMGFXOXVLVG9nVUhKdmJXbHpaVHhTWldGa2VWQmxaWEkrSUh0Y2JseDBhV1lnS0NGeWRHTkRiMjVtYVdjcElIdGNibHgwWEhSeWRHTkRiMjVtYVdjZ1BTQjdYRzVjZEZ4MFhIUnBZMlZUWlhKMlpYSnpPaUJiWEc1Y2RGeDBYSFJjZEh0Y2JseDBYSFJjZEZ4MFhIUjFjbXh6T2lCY0luTjBkVzQ2WjJ4dlltRnNMbk4wZFc0dWRIZHBiR2x2TG1OdmJUb3pORGM0UDNSeVlXNXpjRzl5ZEQxMVpIQmNJbHh1WEhSY2RGeDBYSFI5TEZ4dVhIUmNkRngwWFZ4dVhIUmNkSDA3WEc1Y2RIMWNibHgwWTI5dWMzUWdjR1ZsY2tOdmJtNWxZM1JwYjI0Z1BTQnVaWGNnVWxSRFVHVmxja052Ym01bFkzUnBiMjRvY25SalEyOXVabWxuS1R0Y2JseHVYSFJzWlhRZ2NGSmxjMjlzZG1VNklDaDJZV3gxWlRvZ1VtVmhaSGxRWldWeUtTQTlQaUIyYjJsa08xeHVYSFJqYjI1emRDQnlaWE4xYkhRZ1BTQnVaWGNnVUhKdmJXbHpaVHhTWldGa2VWQmxaWEkrS0hKbGMyOXNkbVVnUFQ0Z2UxeHVYSFJjZEhCU1pYTnZiSFpsSUQwZ2NtVnpiMngyWlR0Y2JseDBmU2xjYmx4MFkyOXVjM1FnWkdGMFlVTm9ZVzV1Wld3Z1BTQndaV1Z5UTI5dWJtVmpkR2x2Ymk1amNtVmhkR1ZFWVhSaFEyaGhibTVsYkNoY0ltUmhkR0ZjSWl3Z2UxeHVYSFJjZEdsa09pQXdMRnh1WEhSY2RHNWxaMjkwYVdGMFpXUTZJSFJ5ZFdVc1hHNWNkRngwYjNKa1pYSmxaRG9nZEhKMVpWeHVYSFI5S1R0Y2JseDBaR0YwWVVOb1lXNXVaV3d1WW1sdVlYSjVWSGx3WlNBOUlGd2lZWEp5WVhsaWRXWm1aWEpjSWp0Y2JseHVYSFJqYjI1emRDQnVaV2R2ZEdsaGRHbHZia05vWVc1dVpXd2dQU0J3WldWeVEyOXVibVZqZEdsdmJpNWpjbVZoZEdWRVlYUmhRMmhoYm01bGJDaGNJbTVsWjI5MGFXRjBhVzl1WENJc0lIdGNibHgwWEhScFpEb2dNU3hjYmx4MFhIUnVaV2R2ZEdsaGRHVmtPaUIwY25WbExGeHVYSFJjZEc5eVpHVnlaV1E2SUhSeWRXVmNibHgwZlNrN1hHNWNkRzVsWjI5MGFXRjBhVzl1UTJoaGJtNWxiQzVpYVc1aGNubFVlWEJsSUQwZ1hDSmhjbkpoZVdKMVptWmxjbHdpTzF4dVhIUnVaV2R2ZEdsaGRHbHZia05vWVc1dVpXd3ViMjV0WlhOellXZGxJRDBnWVhONWJtTWdLR1YyWlc1ME9pQk5aWE56WVdkbFJYWmxiblE4WVc1NVBpa2dQVDRnZTF4dVhIUmNkSFJ5ZVNCN1hHNWNkRngwWEhSamIyNXpkQ0J5WlcxdmRHVlRSRkFnUFNCdVpYY2dVbFJEVTJWemMybHZia1JsYzJOeWFYQjBhVzl1S0VwVFQwNHVjR0Z5YzJVb1lYUnZZaWhsZG1WdWRDNWtZWFJoS1NrcE8xeHVYSFJjZEZ4MFlYZGhhWFFnY0dWbGNrTnZibTVsWTNScGIyNHVjMlYwVW1WdGIzUmxSR1Z6WTNKcGNIUnBiMjRvY21WdGIzUmxVMFJRS1R0Y2JseDBYSFJjZEdOdmJuTjBJR0Z1YzNkbGNrUmxjMk1nUFNCaGQyRnBkQ0J3WldWeVEyOXVibVZqZEdsdmJpNWpjbVZoZEdWQmJuTjNaWElvS1R0Y2JseDBYSFJjZEdGM1lXbDBJSEJsWlhKRGIyNXVaV04wYVc5dUxuTmxkRXh2WTJGc1JHVnpZM0pwY0hScGIyNG9ZVzV6ZDJWeVJHVnpZeWs3WEc1Y2RGeDBYSFJ1WldkdmRHbGhkR2x2YmtOb1lXNXVaV3d1YzJWdVpDaGlkRzloS0VwVFQwNHVjM1J5YVc1bmFXWjVLSEJsWlhKRGIyNXVaV04wYVc5dUxteHZZMkZzUkdWelkzSnBjSFJwYjI0cEtTazdYRzVjZEZ4MGZTQmpZWFJqYUNBb1pTa2dlMXh1WEhSY2RGeDBZMjl1YzI5c1pTNWxjbkp2Y2lobEtUdGNibHgwWEhSOVhHNWNkSDFjYmx4dVhIUnBaaUFvSVdScGMyRmliR1ZVY21samEyeGxLU0I3WEc1Y2RGeDBjbVYwZFhKdUlGQnliMjFwYzJVdWNtVnpiMngyWlNoN0lIQmpPaUJ3WldWeVEyOXVibVZqZEdsdmJpd2daR002SUdSaGRHRkRhR0Z1Ym1Wc0lIMHBYRzVjZEgxY2JseDBMeThnYzJWMElIVndJRzltWm1WeVhHNWNkR052Ym5OMElHOW1abVZ5UkdWell5QTlJR0YzWVdsMElIQmxaWEpEYjI1dVpXTjBhVzl1TG1OeVpXRjBaVTltWm1WeUtDazdYRzVjZEhSeWVTQjdYRzVjZEZ4MFlYZGhhWFFnY0dWbGNrTnZibTVsWTNScGIyNHVjMlYwVEc5allXeEVaWE5qY21sd2RHbHZiaWh2Wm1abGNrUmxjMk1wWEc1Y2RIMGdZMkYwWTJnZ0tHVXBJSHRjYmx4MFhIUnlaWFIxY200Z1VISnZiV2x6WlM1eVpXcGxZM1FvWlNrN1hHNWNkSDFjYmx4dVhIUndaV1Z5UTI5dWJtVmpkR2x2Ymk1dmJtbGpaV05oYm1ScFpHRjBaU0E5SUdGemVXNWpJR1YyWlc1MElEMCtJSHRjYmx4MFhIUnBaaUFvWlhabGJuUXVZMkZ1Wkdsa1lYUmxJQ0U5UFNCdWRXeHNLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNDdYRzVjZEZ4MGZWeHVYSFJjZEhCU1pYTnZiSFpsS0hzZ2NHTTZJSEJsWlhKRGIyNXVaV04wYVc5dUxDQmtZem9nWkdGMFlVTm9ZVzV1Wld3Z2ZTazdYRzVjZEgxY2JseHVYSFJ5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1SWwwc0luTnZkWEpqWlZKdmIzUWlPaUlpZlE9PSIsInZhciAkanNjb21wPSRqc2NvbXB8fHt9OyRqc2NvbXAuc2NvcGU9e307JGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oYSxiLGMpe2EgaW5zdGFuY2VvZiBTdHJpbmcmJihhPVN0cmluZyhhKSk7Zm9yKHZhciBkPWEubGVuZ3RoLGU9MDtlPGQ7ZSsrKXt2YXIgZj1hW2VdO2lmKGIuY2FsbChjLGYsZSxhKSlyZXR1cm57aTplLHY6Zn19cmV0dXJue2k6LTEsdjp2b2lkIDB9fTskanNjb21wLkFTU1VNRV9FUzU9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExOyRqc2NvbXAuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMTtcbiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxiLGMpe2EhPUFycmF5LnByb3RvdHlwZSYmYSE9T2JqZWN0LnByb3RvdHlwZSYmKGFbYl09Yy52YWx1ZSl9OyRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWE/YTpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmF9OyRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpO1xuJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihhLGIsYyxkKXtpZihiKXtjPSRqc2NvbXAuZ2xvYmFsO2E9YS5zcGxpdChcIi5cIik7Zm9yKGQ9MDtkPGEubGVuZ3RoLTE7ZCsrKXt2YXIgZT1hW2RdO2UgaW4gY3x8KGNbZV09e30pO2M9Y1tlXX1hPWFbYS5sZW5ndGgtMV07ZD1jW2FdO2I9YihkKTtiIT1kJiZudWxsIT1iJiYkanNjb21wLmRlZmluZVByb3BlcnR5KGMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmJ9KX19OyRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhLGMpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGEsYykuaX19LFwiZXM2XCIsXCJlczNcIik7XG4kanNjb21wLmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09YSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlICd0aGlzJyB2YWx1ZSBmb3IgU3RyaW5nLnByb3RvdHlwZS5cIitjK1wiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKGIgaW5zdGFuY2VvZiBSZWdFeHApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuXCIrYytcIiBtdXN0IG5vdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTtyZXR1cm4gYStcIlwifTtcbiRqc2NvbXAucG9seWZpbGwoXCJTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhLGMpe3ZhciBiPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsYSxcImVuZHNXaXRoXCIpO2ErPVwiXCI7dm9pZCAwPT09YyYmKGM9Yi5sZW5ndGgpO2M9TWF0aC5tYXgoMCxNYXRoLm1pbihjfDAsYi5sZW5ndGgpKTtmb3IodmFyIGU9YS5sZW5ndGg7MDxlJiYwPGM7KWlmKGJbLS1jXSE9YVstLWVdKXJldHVybiExO3JldHVybiAwPj1lfX0sXCJlczZcIixcImVzM1wiKTskanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGEsYyl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsYSxjKS52fX0sXCJlczZcIixcImVzM1wiKTtcbiRqc2NvbXAucG9seWZpbGwoXCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGhcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGEsYyl7dmFyIGI9JGpzY29tcC5jaGVja1N0cmluZ0FyZ3ModGhpcyxhLFwic3RhcnRzV2l0aFwiKTthKz1cIlwiO3ZhciBlPWIubGVuZ3RoLGY9YS5sZW5ndGg7Yz1NYXRoLm1heCgwLE1hdGgubWluKGN8MCxiLmxlbmd0aCkpO2Zvcih2YXIgZz0wO2c8ZiYmYzxlOylpZihiW2MrK10hPWFbZysrXSlyZXR1cm4hMTtyZXR1cm4gZz49Zn19LFwiZXM2XCIsXCJlczNcIik7XG4kanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGEpe3ZhciBiPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsbnVsbCxcInJlcGVhdFwiKTtpZigwPmF8fDEzNDIxNzcyNzk8YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgY291bnQgdmFsdWVcIik7YXw9MDtmb3IodmFyIGQ9XCJcIjthOylpZihhJjEmJihkKz1iKSxhPj4+PTEpYis9YjtyZXR1cm4gZH19LFwiZXM2XCIsXCJlczNcIik7dmFyIENPTVBJTEVEPSEwLGdvb2c9Z29vZ3x8e307Z29vZy5nbG9iYWw9dGhpc3x8c2VsZjtnb29nLmlzRGVmPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT1hfTtnb29nLmlzU3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhfTtnb29nLmlzQm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGF9O1xuZ29vZy5pc051bWJlcj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYX07Z29vZy5leHBvcnRQYXRoXz1mdW5jdGlvbihhLGIsYyl7YT1hLnNwbGl0KFwiLlwiKTtjPWN8fGdvb2cuZ2xvYmFsO2FbMF1pbiBjfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgYy5leGVjU2NyaXB0fHxjLmV4ZWNTY3JpcHQoXCJ2YXIgXCIrYVswXSk7Zm9yKHZhciBkO2EubGVuZ3RoJiYoZD1hLnNoaWZ0KCkpOykhYS5sZW5ndGgmJmdvb2cuaXNEZWYoYik/Y1tkXT1iOmM9Y1tkXSYmY1tkXSE9PU9iamVjdC5wcm90b3R5cGVbZF0/Y1tkXTpjW2RdPXt9fTtcbmdvb2cuZGVmaW5lPWZ1bmN0aW9uKGEsYil7aWYoIUNPTVBJTEVEKXt2YXIgYz1nb29nLmdsb2JhbC5DTE9TVVJFX1VOQ09NUElMRURfREVGSU5FUyxkPWdvb2cuZ2xvYmFsLkNMT1NVUkVfREVGSU5FUztjJiZ2b2lkIDA9PT1jLm5vZGVUeXBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKT9iPWNbYV06ZCYmdm9pZCAwPT09ZC5ub2RlVHlwZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsYSkmJihiPWRbYV0pfXJldHVybiBifTtnb29nLkZFQVRVUkVTRVRfWUVBUj0yMDEyO2dvb2cuREVCVUc9ITA7Z29vZy5MT0NBTEU9XCJlblwiO2dvb2cuVFJVU1RFRF9TSVRFPSEwO2dvb2cuU1RSSUNUX01PREVfQ09NUEFUSUJMRT0hMTtnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFPUNPTVBJTEVEJiYhZ29vZy5ERUJVRztnb29nLkVOQUJMRV9DSFJPTUVfQVBQX1NBRkVfU0NSSVBUX0xPQURJTkc9ITE7XG5nb29nLnByb3ZpZGU9ZnVuY3Rpb24oYSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5wcm92aWRlIGNhbm5vdCBiZSB1c2VkIHdpdGhpbiBhIG1vZHVsZS5cIik7aWYoIUNPTVBJTEVEJiZnb29nLmlzUHJvdmlkZWRfKGEpKXRocm93IEVycm9yKCdOYW1lc3BhY2UgXCInK2ErJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7Z29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfKGEpfTtnb29nLmNvbnN0cnVjdE5hbWVzcGFjZV89ZnVuY3Rpb24oYSxiKXtpZighQ09NUElMRUQpe2RlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bYV07Zm9yKHZhciBjPWE7KGM9Yy5zdWJzdHJpbmcoMCxjLmxhc3RJbmRleE9mKFwiLlwiKSkpJiYhZ29vZy5nZXRPYmplY3RCeU5hbWUoYyk7KWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tjXT0hMH1nb29nLmV4cG9ydFBhdGhfKGEsYil9O1xuZ29vZy5nZXRTY3JpcHROb25jZT1mdW5jdGlvbihhKXtpZihhJiZhIT1nb29nLmdsb2JhbClyZXR1cm4gZ29vZy5nZXRTY3JpcHROb25jZV8oYS5kb2N1bWVudCk7bnVsbD09PWdvb2cuY3NwTm9uY2VfJiYoZ29vZy5jc3BOb25jZV89Z29vZy5nZXRTY3JpcHROb25jZV8oZ29vZy5nbG9iYWwuZG9jdW1lbnQpKTtyZXR1cm4gZ29vZy5jc3BOb25jZV99O2dvb2cuTk9OQ0VfUEFUVEVSTl89L15bXFx3Ky9fLV0rWz1dezAsMn0kLztnb29nLmNzcE5vbmNlXz1udWxsO2dvb2cuZ2V0U2NyaXB0Tm9uY2VfPWZ1bmN0aW9uKGEpe3JldHVybihhPWEucXVlcnlTZWxlY3RvciYmYS5xdWVyeVNlbGVjdG9yKFwic2NyaXB0W25vbmNlXVwiKSkmJihhPWEubm9uY2V8fGEuZ2V0QXR0cmlidXRlKFwibm9uY2VcIikpJiZnb29nLk5PTkNFX1BBVFRFUk5fLnRlc3QoYSk/YTpcIlwifTtnb29nLlZBTElEX01PRFVMRV9SRV89L15bYS16QS1aXyRdW2EtekEtWjAtOS5fJF0qJC87XG5nb29nLm1vZHVsZT1mdW5jdGlvbihhKXtpZighZ29vZy5pc1N0cmluZyhhKXx8IWF8fC0xPT1hLnNlYXJjaChnb29nLlZBTElEX01PRFVMRV9SRV8pKXRocm93IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgaWRlbnRpZmllclwiKTtpZighZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcIk1vZHVsZSBcIithK1wiIGhhcyBiZWVuIGxvYWRlZCBpbmNvcnJlY3RseS4gTm90ZSwgbW9kdWxlcyBjYW5ub3QgYmUgbG9hZGVkIGFzIG5vcm1hbCBzY3JpcHRzLiBUaGV5IHJlcXVpcmUgc29tZSBraW5kIG9mIHByZS1wcm9jZXNzaW5nIHN0ZXAuIFlvdSdyZSBsaWtlbHkgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgdmlhIGEgc2NyaXB0IHRhZyBvciBhcyBhIHBhcnQgb2YgYSBjb25jYXRlbmF0ZWQgYnVuZGxlIHdpdGhvdXQgcmV3cml0aW5nIHRoZSBtb2R1bGUuIEZvciBtb3JlIGluZm8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtbGlicmFyeS93aWtpL2dvb2cubW9kdWxlOi1hbi1FUzYtbW9kdWxlLWxpa2UtYWx0ZXJuYXRpdmUtdG8tZ29vZy5wcm92aWRlLlwiKTtcbmlmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZSBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlLlwiKTtnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lPWE7aWYoIUNPTVBJTEVEKXtpZihnb29nLmlzUHJvdmlkZWRfKGEpKXRocm93IEVycm9yKCdOYW1lc3BhY2UgXCInK2ErJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7ZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1thXX19O2dvb2cubW9kdWxlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5tb2R1bGUuZ2V0SW50ZXJuYWxfKGEpfTtcbmdvb2cubW9kdWxlLmdldEludGVybmFsXz1mdW5jdGlvbihhKXtpZighQ09NUElMRUQpe2lmKGEgaW4gZ29vZy5sb2FkZWRNb2R1bGVzXylyZXR1cm4gZ29vZy5sb2FkZWRNb2R1bGVzX1thXS5leHBvcnRzO2lmKCFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bYV0pcmV0dXJuIGE9Z29vZy5nZXRPYmplY3RCeU5hbWUoYSksbnVsbCE9YT9hOm51bGx9cmV0dXJuIG51bGx9O2dvb2cuTW9kdWxlVHlwZT17RVM2OlwiZXM2XCIsR09PRzpcImdvb2dcIn07Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbDtnb29nLmlzSW5Nb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfKCl8fGdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl8oKX07Z29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl89ZnVuY3Rpb24oKXtyZXR1cm4hIWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy50eXBlPT1nb29nLk1vZHVsZVR5cGUuR09PR307XG5nb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8mJmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLnR5cGU9PWdvb2cuTW9kdWxlVHlwZS5FUzYpcmV0dXJuITA7dmFyIGE9Z29vZy5nbG9iYWwuJGpzY29tcDtyZXR1cm4gYT9cImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmdldEN1cnJlbnRNb2R1bGVQYXRoPyExOiEhYS5nZXRDdXJyZW50TW9kdWxlUGF0aCgpOiExfTtcbmdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2U9ZnVuY3Rpb24oKXtpZighQ09NUElMRUQmJiFnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZSBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGdvb2cubW9kdWxlXCIpO2lmKCFDT01QSUxFRCYmIWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBnb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlLlwiKTtnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlPSEwfTtcbmdvb2cuZGVjbGFyZU1vZHVsZUlkPWZ1bmN0aW9uKGEpe2lmKCFDT01QSUxFRCl7aWYoIWdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cuZGVjbGFyZU1vZHVsZUlkIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBFUzYgbW9kdWxlXCIpO2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5kZWNsYXJlTW9kdWxlSWQgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIG1vZHVsZS5cIik7aWYoYSBpbiBnb29nLmxvYWRlZE1vZHVsZXNfKXRocm93IEVycm9yKCdNb2R1bGUgd2l0aCBuYW1lc3BhY2UgXCInK2ErJ1wiIGFscmVhZHkgZXhpc3RzLicpO31pZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXylnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lPWE7ZWxzZXt2YXIgYj1nb29nLmdsb2JhbC4kanNjb21wO2lmKCFifHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBiLmdldEN1cnJlbnRNb2R1bGVQYXRoKXRocm93IEVycm9yKCdNb2R1bGUgd2l0aCBuYW1lc3BhY2UgXCInK1xuYSsnXCIgaGFzIGJlZW4gbG9hZGVkIGluY29ycmVjdGx5LicpO2I9Yi5yZXF1aXJlKGIuZ2V0Q3VycmVudE1vZHVsZVBhdGgoKSk7Z29vZy5sb2FkZWRNb2R1bGVzX1thXT17ZXhwb3J0czpiLHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkVTNixtb2R1bGVJZDphfX19O2dvb2cuc2V0VGVzdE9ubHk9ZnVuY3Rpb24oYSl7aWYoZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERSl0aHJvdyBhPWF8fFwiXCIsRXJyb3IoXCJJbXBvcnRpbmcgdGVzdC1vbmx5IGNvZGUgaW50byBub24tZGVidWcgZW52aXJvbm1lbnRcIisoYT9cIjogXCIrYTpcIi5cIikpO307Z29vZy5mb3J3YXJkRGVjbGFyZT1mdW5jdGlvbihhKXt9O1xuQ09NUElMRUR8fChnb29nLmlzUHJvdmlkZWRfPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluIGdvb2cubG9hZGVkTW9kdWxlc198fCFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bYV0mJmdvb2cuaXNEZWZBbmROb3ROdWxsKGdvb2cuZ2V0T2JqZWN0QnlOYW1lKGEpKX0sZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfPXtcImdvb2cubW9kdWxlXCI6ITB9KTtnb29nLmdldE9iamVjdEJ5TmFtZT1mdW5jdGlvbihhLGIpe2E9YS5zcGxpdChcIi5cIik7Yj1ifHxnb29nLmdsb2JhbDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPWJbYVtjXV0sIWdvb2cuaXNEZWZBbmROb3ROdWxsKGIpKXJldHVybiBudWxsO3JldHVybiBifTtnb29nLmdsb2JhbGl6ZT1mdW5jdGlvbihhLGIpe2I9Ynx8Z29vZy5nbG9iYWw7Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdfTtcbmdvb2cuYWRkRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkKXshQ09NUElMRUQmJmdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQmJmdvb2cuZGVidWdMb2FkZXJfLmFkZERlcGVuZGVuY3koYSxiLGMsZCl9O2dvb2cuRU5BQkxFX0RFQlVHX0xPQURFUj0hMDtnb29nLmxvZ1RvQ29uc29sZV89ZnVuY3Rpb24oYSl7Z29vZy5nbG9iYWwuY29uc29sZSYmZ29vZy5nbG9iYWwuY29uc29sZS5lcnJvcihhKX07XG5nb29nLnJlcXVpcmU9ZnVuY3Rpb24oYSl7aWYoIUNPTVBJTEVEKXtnb29nLkVOQUJMRV9ERUJVR19MT0FERVImJmdvb2cuZGVidWdMb2FkZXJfLnJlcXVlc3RlZChhKTtpZihnb29nLmlzUHJvdmlkZWRfKGEpKXtpZihnb29nLmlzSW5Nb2R1bGVMb2FkZXJfKCkpcmV0dXJuIGdvb2cubW9kdWxlLmdldEludGVybmFsXyhhKX1lbHNlIGlmKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUil7dmFyIGI9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV87Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbDt0cnl7Z29vZy5kZWJ1Z0xvYWRlcl8ubG9hZF8oYSl9ZmluYWxseXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz1ifX1yZXR1cm4gbnVsbH19O2dvb2cucmVxdWlyZVR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJue319O2dvb2cuYmFzZVBhdGg9XCJcIjtnb29nLm51bGxGdW5jdGlvbj1mdW5jdGlvbigpe307XG5nb29nLmFic3RyYWN0TWV0aG9kPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoXCJ1bmltcGxlbWVudGVkIGFic3RyYWN0IG1ldGhvZFwiKTt9O2dvb2cuYWRkU2luZ2xldG9uR2V0dGVyPWZ1bmN0aW9uKGEpe2EuaW5zdGFuY2VfPXZvaWQgMDthLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7aWYoYS5pbnN0YW5jZV8pcmV0dXJuIGEuaW5zdGFuY2VfO2dvb2cuREVCVUcmJihnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfW2dvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc18ubGVuZ3RoXT1hKTtyZXR1cm4gYS5pbnN0YW5jZV89bmV3IGF9fTtnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfPVtdO2dvb2cuTE9BRF9NT0RVTEVfVVNJTkdfRVZBTD0hMDtnb29nLlNFQUxfTU9EVUxFX0VYUE9SVFM9Z29vZy5ERUJVRztnb29nLmxvYWRlZE1vZHVsZXNfPXt9O2dvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQ9IUNPTVBJTEVEJiZnb29nLkVOQUJMRV9ERUJVR19MT0FERVI7Z29vZy5UUkFOU1BJTEU9XCJkZXRlY3RcIjtcbmdvb2cuQVNTVU1FX0VTX01PRFVMRVNfVFJBTlNQSUxFRD0hMTtnb29nLlRSQU5TUElMRV9UT19MQU5HVUFHRT1cIlwiO2dvb2cuVFJBTlNQSUxFUj1cInRyYW5zcGlsZS5qc1wiO2dvb2cuaGFzQmFkTGV0U2NvcGluZz1udWxsO2dvb2cudXNlU2FmYXJpMTBXb3JrYXJvdW5kPWZ1bmN0aW9uKCl7aWYobnVsbD09Z29vZy5oYXNCYWRMZXRTY29waW5nKXt0cnl7dmFyIGE9IWV2YWwoJ1widXNlIHN0cmljdFwiO2xldCB4ID0gMTsgZnVuY3Rpb24gZigpIHsgcmV0dXJuIHR5cGVvZiB4OyB9O2YoKSA9PSBcIm51bWJlclwiOycpfWNhdGNoKGIpe2E9ITF9Z29vZy5oYXNCYWRMZXRTY29waW5nPWF9cmV0dXJuIGdvb2cuaGFzQmFkTGV0U2NvcGluZ307Z29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnPWZ1bmN0aW9uKGEpe3JldHVyblwiKGZ1bmN0aW9uKCl7XCIrYStcIlxcbjt9KSgpO1xcblwifTtcbmdvb2cubG9hZE1vZHVsZT1mdW5jdGlvbihhKXt2YXIgYj1nb29nLm1vZHVsZUxvYWRlclN0YXRlXzt0cnl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89e21vZHVsZU5hbWU6XCJcIixkZWNsYXJlTGVnYWN5TmFtZXNwYWNlOiExLHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0d9O2lmKGdvb2cuaXNGdW5jdGlvbihhKSl2YXIgYz1hLmNhbGwodm9pZCAwLHt9KTtlbHNlIGlmKGdvb2cuaXNTdHJpbmcoYSkpZ29vZy51c2VTYWZhcmkxMFdvcmthcm91bmQoKSYmKGE9Z29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnKGEpKSxjPWdvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfLmNhbGwodm9pZCAwLGEpO2Vsc2UgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uXCIpO3ZhciBkPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWU7aWYoZ29vZy5pc1N0cmluZyhkKSYmZClnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlP2dvb2cuY29uc3RydWN0TmFtZXNwYWNlXyhkLFxuYyk6Z29vZy5TRUFMX01PRFVMRV9FWFBPUlRTJiZPYmplY3Quc2VhbCYmXCJvYmplY3RcIj09dHlwZW9mIGMmJm51bGwhPWMmJk9iamVjdC5zZWFsKGMpLGdvb2cubG9hZGVkTW9kdWxlc19bZF09e2V4cG9ydHM6Yyx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9O2Vsc2UgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbW9kdWxlIG5hbWUgXCInK2QrJ1wiJyk7fWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89Yn19O2dvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfPWZ1bmN0aW9uKGEpe2V2YWwoYSk7cmV0dXJue319O2dvb2cubm9ybWFsaXplUGF0aF89ZnVuY3Rpb24oYSl7YT1hLnNwbGl0KFwiL1wiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOylcIi5cIj09YVtiXT9hLnNwbGljZShiLDEpOmImJlwiLi5cIj09YVtiXSYmYVtiLTFdJiZcIi4uXCIhPWFbYi0xXT9hLnNwbGljZSgtLWIsMik6YisrO3JldHVybiBhLmpvaW4oXCIvXCIpfTtcbmdvb2cubG9hZEZpbGVTeW5jXz1mdW5jdGlvbihhKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0xPQURfRklMRV9TWU5DKXJldHVybiBnb29nLmdsb2JhbC5DTE9TVVJFX0xPQURfRklMRV9TWU5DKGEpO3RyeXt2YXIgYj1uZXcgZ29vZy5nbG9iYWwuWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiZ2V0XCIsYSwhMSk7Yi5zZW5kKCk7cmV0dXJuIDA9PWIuc3RhdHVzfHwyMDA9PWIuc3RhdHVzP2IucmVzcG9uc2VUZXh0Om51bGx9Y2F0Y2goYyl7cmV0dXJuIG51bGx9fTtcbmdvb2cudHJhbnNwaWxlXz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Z29vZy5nbG9iYWwuJGpzY29tcDtkfHwoZ29vZy5nbG9iYWwuJGpzY29tcD1kPXt9KTt2YXIgZT1kLnRyYW5zcGlsZTtpZighZSl7dmFyIGY9Z29vZy5iYXNlUGF0aCtnb29nLlRSQU5TUElMRVIsZz1nb29nLmxvYWRGaWxlU3luY18oZik7aWYoZyl7KGZ1bmN0aW9uKCl7KDAsZXZhbCkoZytcIlxcbi8vIyBzb3VyY2VVUkw9XCIrZil9KS5jYWxsKGdvb2cuZ2xvYmFsKTtpZihnb29nLmdsb2JhbC4kZ3d0RXhwb3J0JiZnb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAmJiFnb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAudHJhbnNwaWxlKXRocm93IEVycm9yKCdUaGUgdHJhbnNwaWxlciBkaWQgbm90IHByb3Blcmx5IGV4cG9ydCB0aGUgXCJ0cmFuc3BpbGVcIiBtZXRob2QuICRnd3RFeHBvcnQ6ICcrSlNPTi5zdHJpbmdpZnkoZ29vZy5nbG9iYWwuJGd3dEV4cG9ydCkpO2dvb2cuZ2xvYmFsLiRqc2NvbXAudHJhbnNwaWxlPVxuZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wLnRyYW5zcGlsZTtkPWdvb2cuZ2xvYmFsLiRqc2NvbXA7ZT1kLnRyYW5zcGlsZX19ZXx8KGU9ZC50cmFuc3BpbGU9ZnVuY3Rpb24oYSxiKXtnb29nLmxvZ1RvQ29uc29sZV8oYitcIiByZXF1aXJlcyB0cmFuc3BpbGF0aW9uIGJ1dCBubyB0cmFuc3BpbGVyIHdhcyBmb3VuZC5cIik7cmV0dXJuIGF9KTtyZXR1cm4gZShhLGIsYyl9O1xuZ29vZy50eXBlT2Y9ZnVuY3Rpb24oYSl7dmFyIGI9dHlwZW9mIGE7aWYoXCJvYmplY3RcIj09YilpZihhKXtpZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuXCJhcnJheVwiO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGI7dmFyIGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKFwiW29iamVjdCBXaW5kb3ddXCI9PWMpcmV0dXJuXCJvYmplY3RcIjtpZihcIltvYmplY3QgQXJyYXldXCI9PWN8fFwibnVtYmVyXCI9PXR5cGVvZiBhLmxlbmd0aCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEuc3BsaWNlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoXCJzcGxpY2VcIikpcmV0dXJuXCJhcnJheVwiO2lmKFwiW29iamVjdCBGdW5jdGlvbl1cIj09Y3x8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEuY2FsbCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKFwiY2FsbFwiKSlyZXR1cm5cImZ1bmN0aW9uXCJ9ZWxzZSByZXR1cm5cIm51bGxcIjtcbmVsc2UgaWYoXCJmdW5jdGlvblwiPT1iJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgYS5jYWxsKXJldHVyblwib2JqZWN0XCI7cmV0dXJuIGJ9O2dvb2cuaXNOdWxsPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YX07Z29vZy5pc0RlZkFuZE5vdE51bGw9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWF9O2dvb2cuaXNBcnJheT1mdW5jdGlvbihhKXtyZXR1cm5cImFycmF5XCI9PWdvb2cudHlwZU9mKGEpfTtnb29nLmlzQXJyYXlMaWtlPWZ1bmN0aW9uKGEpe3ZhciBiPWdvb2cudHlwZU9mKGEpO3JldHVyblwiYXJyYXlcIj09Ynx8XCJvYmplY3RcIj09YiYmXCJudW1iZXJcIj09dHlwZW9mIGEubGVuZ3RofTtnb29nLmlzRGF0ZUxpa2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaXNPYmplY3QoYSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0RnVsbFllYXJ9O2dvb2cuaXNGdW5jdGlvbj1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PWdvb2cudHlwZU9mKGEpfTtcbmdvb2cuaXNPYmplY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dHlwZW9mIGE7cmV0dXJuXCJvYmplY3RcIj09YiYmbnVsbCE9YXx8XCJmdW5jdGlvblwiPT1ifTtnb29nLmdldFVpZD1mdW5jdGlvbihhKXtyZXR1cm4gYVtnb29nLlVJRF9QUk9QRVJUWV9dfHwoYVtnb29nLlVJRF9QUk9QRVJUWV9dPSsrZ29vZy51aWRDb3VudGVyXyl9O2dvb2cuaGFzVWlkPWZ1bmN0aW9uKGEpe3JldHVybiEhYVtnb29nLlVJRF9QUk9QRVJUWV9dfTtnb29nLnJlbW92ZVVpZD1mdW5jdGlvbihhKXtudWxsIT09YSYmXCJyZW1vdmVBdHRyaWJ1dGVcImluIGEmJmEucmVtb3ZlQXR0cmlidXRlKGdvb2cuVUlEX1BST1BFUlRZXyk7dHJ5e2RlbGV0ZSBhW2dvb2cuVUlEX1BST1BFUlRZX119Y2F0Y2goYil7fX07Z29vZy5VSURfUFJPUEVSVFlfPVwiY2xvc3VyZV91aWRfXCIrKDFFOSpNYXRoLnJhbmRvbSgpPj4+MCk7Z29vZy51aWRDb3VudGVyXz0wO2dvb2cuZ2V0SGFzaENvZGU9Z29vZy5nZXRVaWQ7XG5nb29nLnJlbW92ZUhhc2hDb2RlPWdvb2cucmVtb3ZlVWlkO2dvb2cuY2xvbmVPYmplY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9Z29vZy50eXBlT2YoYSk7aWYoXCJvYmplY3RcIj09Ynx8XCJhcnJheVwiPT1iKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5jbG9uZSlyZXR1cm4gYS5jbG9uZSgpO2I9XCJhcnJheVwiPT1iP1tdOnt9O2Zvcih2YXIgYyBpbiBhKWJbY109Z29vZy5jbG9uZU9iamVjdChhW2NdKTtyZXR1cm4gYn1yZXR1cm4gYX07Z29vZy5iaW5kTmF0aXZlXz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY2FsbC5hcHBseShhLmJpbmQsYXJndW1lbnRzKX07XG5nb29nLmJpbmRKc189ZnVuY3Rpb24oYSxiLGMpe2lmKCFhKXRocm93IEVycm9yKCk7aWYoMjxhcmd1bWVudHMubGVuZ3RoKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjLGQpO3JldHVybiBhLmFwcGx5KGIsYyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGIsYXJndW1lbnRzKX19O2dvb2cuYmluZD1mdW5jdGlvbihhLGIsYyl7RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQmJi0xIT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoXCJuYXRpdmUgY29kZVwiKT9nb29nLmJpbmQ9Z29vZy5iaW5kTmF0aXZlXzpnb29nLmJpbmQ9Z29vZy5iaW5kSnNfO3JldHVybiBnb29nLmJpbmQuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtcbmdvb2cucGFydGlhbD1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1jLnNsaWNlKCk7Yi5wdXNoLmFwcGx5KGIsYXJndW1lbnRzKTtyZXR1cm4gYS5hcHBseSh0aGlzLGIpfX07Z29vZy5taXhpbj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWFbY109YltjXX07Z29vZy5ub3c9Z29vZy5UUlVTVEVEX1NJVEUmJkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX07XG5nb29nLmdsb2JhbEV2YWw9ZnVuY3Rpb24oYSl7aWYoZ29vZy5nbG9iYWwuZXhlY1NjcmlwdClnb29nLmdsb2JhbC5leGVjU2NyaXB0KGEsXCJKYXZhU2NyaXB0XCIpO2Vsc2UgaWYoZ29vZy5nbG9iYWwuZXZhbCl7aWYobnVsbD09Z29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXyl7dHJ5e2dvb2cuZ2xvYmFsLmV2YWwoXCJ2YXIgX2V2YWxUZXN0XyA9IDE7XCIpfWNhdGNoKGQpe31pZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZ29vZy5nbG9iYWwuX2V2YWxUZXN0Xyl7dHJ5e2RlbGV0ZSBnb29nLmdsb2JhbC5fZXZhbFRlc3RffWNhdGNoKGQpe31nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPSEwfWVsc2UgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz0hMX1pZihnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfKWdvb2cuZ2xvYmFsLmV2YWwoYSk7ZWxzZXt2YXIgYj1nb29nLmdsb2JhbC5kb2N1bWVudCxjPWIuY3JlYXRlRWxlbWVudChcIlNDUklQVFwiKTtjLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIjtjLmRlZmVyPVxuITE7Yy5hcHBlbmRDaGlsZChiLmNyZWF0ZVRleHROb2RlKGEpKTtiLmhlYWQuYXBwZW5kQ2hpbGQoYyk7Yi5oZWFkLnJlbW92ZUNoaWxkKGMpfX1lbHNlIHRocm93IEVycm9yKFwiZ29vZy5nbG9iYWxFdmFsIG5vdCBhdmFpbGFibGVcIik7fTtnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPW51bGw7XG5nb29nLmdldENzc05hbWU9ZnVuY3Rpb24oYSxiKXtpZihcIi5cIj09U3RyaW5nKGEpLmNoYXJBdCgwKSl0aHJvdyBFcnJvcignY2xhc3NOYW1lIHBhc3NlZCBpbiBnb29nLmdldENzc05hbWUgbXVzdCBub3Qgc3RhcnQgd2l0aCBcIi5cIi4gWW91IHBhc3NlZDogJythKTt2YXIgYz1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5jc3NOYW1lTWFwcGluZ19bYV18fGF9LGQ9ZnVuY3Rpb24oYSl7YT1hLnNwbGl0KFwiLVwiKTtmb3IodmFyIGI9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKWIucHVzaChjKGFbZF0pKTtyZXR1cm4gYi5qb2luKFwiLVwiKX07ZD1nb29nLmNzc05hbWVNYXBwaW5nXz9cIkJZX1dIT0xFXCI9PWdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV8/YzpkOmZ1bmN0aW9uKGEpe3JldHVybiBhfTthPWI/YStcIi1cIitkKGIpOmQoYSk7cmV0dXJuIGdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQX0ZOP2dvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQX0ZOKGEpOmF9O1xuZ29vZy5zZXRDc3NOYW1lTWFwcGluZz1mdW5jdGlvbihhLGIpe2dvb2cuY3NzTmFtZU1hcHBpbmdfPWE7Z29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXz1ifTshQ09NUElMRUQmJmdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORyYmKGdvb2cuY3NzTmFtZU1hcHBpbmdfPWdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORyk7Z29vZy5nZXRNc2c9ZnVuY3Rpb24oYSxiLGMpe2MmJmMuaHRtbCYmKGE9YS5yZXBsYWNlKC88L2csXCImbHQ7XCIpKTtiJiYoYT1hLnJlcGxhY2UoL1xce1xcJChbXn1dKyl9L2csZnVuY3Rpb24oYSxjKXtyZXR1cm4gbnVsbCE9YiYmYyBpbiBiP2JbY106YX0pKTtyZXR1cm4gYX07Z29vZy5nZXRNc2dXaXRoRmFsbGJhY2s9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYX07Z29vZy5leHBvcnRTeW1ib2w9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuZXhwb3J0UGF0aF8oYSxiLGMpfTtcbmdvb2cuZXhwb3J0UHJvcGVydHk9ZnVuY3Rpb24oYSxiLGMpe2FbYl09Y307Z29vZy5pbmhlcml0cz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoKXt9Yy5wcm90b3R5cGU9Yi5wcm90b3R5cGU7YS5zdXBlckNsYXNzXz1iLnByb3RvdHlwZTthLnByb3RvdHlwZT1uZXcgYzthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO2EuYmFzZT1mdW5jdGlvbihhLGMsZil7Zm9yKHZhciBkPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMiksZT0yO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZFtlLTJdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYi5wcm90b3R5cGVbY10uYXBwbHkoYSxkKX19O1xuZ29vZy5iYXNlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtpZihnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEV8fGdvb2cuREVCVUcmJiFkKXRocm93IEVycm9yKFwiYXJndW1lbnRzLmNhbGxlciBub3QgZGVmaW5lZC4gIGdvb2cuYmFzZSgpIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RyaWN0IG1vZGUgY29kZS4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy1DXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZC5zdXBlckNsYXNzXyl7Zm9yKHZhciBlPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspZVtmLTFdPWFyZ3VtZW50c1tmXTtyZXR1cm4gZC5zdXBlckNsYXNzXy5jb25zdHJ1Y3Rvci5hcHBseShhLGUpfWlmKFwic3RyaW5nXCIhPXR5cGVvZiBiJiZcInN5bWJvbFwiIT10eXBlb2YgYil0aHJvdyBFcnJvcihcIm1ldGhvZCBuYW1lcyBwcm92aWRlZCB0byBnb29nLmJhc2UgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbFwiKTtcbmU9QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0yKTtmb3IoZj0yO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspZVtmLTJdPWFyZ3VtZW50c1tmXTtmPSExO2Zvcih2YXIgZz1hLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtnO2c9T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpKWlmKGdbYl09PT1kKWY9ITA7ZWxzZSBpZihmKXJldHVybiBnW2JdLmFwcGx5KGEsZSk7aWYoYVtiXT09PWQpcmV0dXJuIGEuY29uc3RydWN0b3IucHJvdG90eXBlW2JdLmFwcGx5KGEsZSk7dGhyb3cgRXJyb3IoXCJnb29nLmJhc2UgY2FsbGVkIGZyb20gYSBtZXRob2Qgb2Ygb25lIG5hbWUgdG8gYSBtZXRob2Qgb2YgYSBkaWZmZXJlbnQgbmFtZVwiKTt9O2dvb2cuc2NvcGU9ZnVuY3Rpb24oYSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5zY29wZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGhpbiBhIG1vZHVsZS5cIik7YS5jYWxsKGdvb2cuZ2xvYmFsKX07XG5DT01QSUxFRHx8KGdvb2cuZ2xvYmFsLkNPTVBJTEVEPUNPTVBJTEVEKTtnb29nLmRlZmluZUNsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5jb25zdHJ1Y3RvcixkPWIuc3RhdGljcztjJiZjIT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yfHwoYz1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwiY2Fubm90IGluc3RhbnRpYXRlIGFuIGludGVyZmFjZSAobm8gY29uc3RydWN0b3IgZGVmaW5lZCkuXCIpO30pO2M9Z29vZy5kZWZpbmVDbGFzcy5jcmVhdGVTZWFsaW5nQ29uc3RydWN0b3JfKGMsYSk7YSYmZ29vZy5pbmhlcml0cyhjLGEpO2RlbGV0ZSBiLmNvbnN0cnVjdG9yO2RlbGV0ZSBiLnN0YXRpY3M7Z29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfKGMucHJvdG90eXBlLGIpO251bGwhPWQmJihkIGluc3RhbmNlb2YgRnVuY3Rpb24/ZChjKTpnb29nLmRlZmluZUNsYXNzLmFwcGx5UHJvcGVydGllc18oYyxkKSk7cmV0dXJuIGN9O1xuZ29vZy5kZWZpbmVDbGFzcy5TRUFMX0NMQVNTX0lOU1RBTkNFUz1nb29nLkRFQlVHO2dvb2cuZGVmaW5lQ2xhc3MuY3JlYXRlU2VhbGluZ0NvbnN0cnVjdG9yXz1mdW5jdGlvbihhLGIpe2lmKCFnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTKXJldHVybiBhO3ZhciBjPSFnb29nLmRlZmluZUNsYXNzLmlzVW5zZWFsYWJsZV8oYiksZD1mdW5jdGlvbigpe3ZhciBiPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO2JbZ29vZy5VSURfUFJPUEVSVFlfXT1iW2dvb2cuVUlEX1BST1BFUlRZX107dGhpcy5jb25zdHJ1Y3Rvcj09PWQmJmMmJk9iamVjdC5zZWFsIGluc3RhbmNlb2YgRnVuY3Rpb24mJk9iamVjdC5zZWFsKGIpO3JldHVybiBifTtyZXR1cm4gZH07Z29vZy5kZWZpbmVDbGFzcy5pc1Vuc2VhbGFibGVfPWZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLnByb3RvdHlwZSYmYS5wcm90b3R5cGVbZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZX119O1xuZ29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU189XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIik7Z29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIGIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsYykmJihhW2NdPWJbY10pO2Zvcih2YXIgZD0wO2Q8Z29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU18ubGVuZ3RoO2QrKyljPWdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfW2RdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGMpJiYoYVtjXT1iW2NdKX07XG5nb29nLnRhZ1Vuc2VhbGFibGVDbGFzcz1mdW5jdGlvbihhKXshQ09NUElMRUQmJmdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVMmJihhLnByb3RvdHlwZVtnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfXT0hMCl9O2dvb2cuVU5TRUFMQUJMRV9DT05TVFJVQ1RPUl9QUk9QRVJUWV89XCJnb29nX2RlZmluZUNsYXNzX2xlZ2FjeV91bnNlYWxhYmxlXCI7XG4hQ09NUElMRUQmJmdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQmJihnb29nLmluSHRtbERvY3VtZW50Xz1mdW5jdGlvbigpe3ZhciBhPWdvb2cuZ2xvYmFsLmRvY3VtZW50O3JldHVybiBudWxsIT1hJiZcIndyaXRlXCJpbiBhfSxnb29nLmlzRG9jdW1lbnRMb2FkaW5nXz1mdW5jdGlvbigpe3ZhciBhPWdvb2cuZ2xvYmFsLmRvY3VtZW50O3JldHVybiBhLmF0dGFjaEV2ZW50P1wiY29tcGxldGVcIiE9YS5yZWFkeVN0YXRlOlwibG9hZGluZ1wiPT1hLnJlYWR5U3RhdGV9LGdvb2cuZmluZEJhc2VQYXRoXz1mdW5jdGlvbigpe2lmKGdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpJiZnb29nLmlzU3RyaW5nKGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIKSlnb29nLmJhc2VQYXRoPWdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIGE9Z29vZy5nbG9iYWwuZG9jdW1lbnQsYj1hLmN1cnJlbnRTY3JpcHQ7XG5hPWI/W2JdOmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJTQ1JJUFRcIik7Zm9yKGI9YS5sZW5ndGgtMTswPD1iOy0tYil7dmFyIGM9YVtiXS5zcmMsZD1jLmxhc3RJbmRleE9mKFwiP1wiKTtkPS0xPT1kP2MubGVuZ3RoOmQ7aWYoXCJiYXNlLmpzXCI9PWMuc3Vic3RyKGQtNyw3KSl7Z29vZy5iYXNlUGF0aD1jLnN1YnN0cigwLGQtNyk7YnJlYWt9fX19LGdvb2cuZmluZEJhc2VQYXRoXygpLGdvb2cuVHJhbnNwaWxlcj1mdW5jdGlvbigpe3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1udWxsO3RoaXMudHJhbnNwaWxhdGlvblRhcmdldF89Z29vZy5UUkFOU1BJTEVfVE9fTEFOR1VBR0V9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtlP2RbYV09ITA6YigpPyhjPWEsZFthXT0hMSk6ZT1kW2FdPSEwfWZ1bmN0aW9uIGIoYSl7dHJ5e3JldHVybiEhZXZhbChhKX1jYXRjaChoKXtyZXR1cm4hMX19XG52YXIgYz1cImVzM1wiLGQ9e2VzMzohMX0sZT0hMSxmPWdvb2cuZ2xvYmFsLm5hdmlnYXRvciYmZ29vZy5nbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudD9nb29nLmdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50OlwiXCI7YShcImVzNVwiLGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJbMSxdLmxlbmd0aD09MVwiKX0pO2EoXCJlczZcIixmdW5jdGlvbigpe3JldHVybiBmLm1hdGNoKC9FZGdlXFwvKFxcZCspKFxcLlxcZCkqL2kpPyExOmIoJygoKT0+e1widXNlIHN0cmljdFwiO2NsYXNzIFh7Y29uc3RydWN0b3IoKXtpZihuZXcudGFyZ2V0IT1TdHJpbmcpdGhyb3cgMTt0aGlzLng9NDJ9fWxldCBxPVJlZmxlY3QuY29uc3RydWN0KFgsW10sU3RyaW5nKTtpZihxLnghPTQyfHwhKHEgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IDE7Zm9yKGNvbnN0IGEgb2ZbMiwzXSl7aWYoYT09Miljb250aW51ZTtmdW5jdGlvbiBmKHo9e2F9KXtsZXQgYT0wO3JldHVybiB6LmF9e2Z1bmN0aW9uIGYoKXtyZXR1cm4gMDt9fXJldHVybiBmKCk9PTN9fSkoKScpfSk7XG5hKFwiZXM3XCIsZnVuY3Rpb24oKXtyZXR1cm4gYihcIjIgKiogMiA9PSA0XCIpfSk7YShcImVzOFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJhc3luYyAoKSA9PiAxLCB0cnVlXCIpfSk7YShcImVzOVwiLGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCIoey4uLnJlc3R9ID0ge30pLCB0cnVlXCIpfSk7YShcImVzX25leHRcIixmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJue3RhcmdldDpjLG1hcDpkfX0sZ29vZy5UcmFuc3BpbGVyLnByb3RvdHlwZS5uZWVkc1RyYW5zcGlsZT1mdW5jdGlvbihhLGIpe2lmKFwiYWx3YXlzXCI9PWdvb2cuVFJBTlNQSUxFKXJldHVybiEwO2lmKFwibmV2ZXJcIj09Z29vZy5UUkFOU1BJTEUpcmV0dXJuITE7aWYoIXRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXyl7dmFyIGM9dGhpcy5jcmVhdGVSZXF1aXJlc1RyYW5zcGlsYXRpb25fKCk7dGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fPWMubWFwO3RoaXMudHJhbnNwaWxhdGlvblRhcmdldF89dGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0X3x8XG5jLnRhcmdldH1pZihhIGluIHRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXylyZXR1cm4gdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fW2FdPyEwOiFnb29nLmluSHRtbERvY3VtZW50XygpfHxcImVzNlwiIT1ifHxcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpPyExOiEwO3Rocm93IEVycm9yKFwiVW5rbm93biBsYW5ndWFnZSBtb2RlOiBcIithKTt9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUudHJhbnNwaWxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cudHJhbnNwaWxlXyhhLGIsdGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0Xyl9LGdvb2cudHJhbnNwaWxlcl89bmV3IGdvb2cuVHJhbnNwaWxlcixnb29nLnByb3RlY3RTY3JpcHRUYWdfPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLzxcXC8oU0NSSVBUKS9pZyxcIlxcXFx4M2MvJDFcIil9LGdvb2cuRGVidWdMb2FkZXJfPWZ1bmN0aW9uKCl7dGhpcy5kZXBlbmRlbmNpZXNfPXt9O1xudGhpcy5pZFRvUGF0aF89e307dGhpcy53cml0dGVuXz17fTt0aGlzLmxvYWRpbmdEZXBzXz1bXTt0aGlzLmRlcHNUb0xvYWRfPVtdO3RoaXMucGF1c2VkXz0hMTt0aGlzLmZhY3RvcnlfPW5ldyBnb29nLkRlcGVuZGVuY3lGYWN0b3J5KGdvb2cudHJhbnNwaWxlcl8pO3RoaXMuZGVmZXJyZWRDYWxsYmFja3NfPXt9O3RoaXMuZGVmZXJyZWRRdWV1ZV89W119LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7ZCYmKGdvb2cuZ2xvYmFsLnNldFRpbWVvdXQoZCwwKSxkPW51bGwpfXZhciBkPWI7aWYoYS5sZW5ndGgpe2I9W107Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhhW2VdKTtpZighZil0aHJvdyBFcnJvcihcIlVucmVnb25pemVkIG5hbWVzcGFjZTogXCIrYVtlXSk7Yi5wdXNoKHRoaXMuZGVwZW5kZW5jaWVzX1tmXSl9Zj1nb29nLnJlcXVpcmU7dmFyIGc9MDtmb3IoZT1cbjA7ZTxhLmxlbmd0aDtlKyspZihhW2VdKSxiW2VdLm9uTG9hZChmdW5jdGlvbigpeysrZz09YS5sZW5ndGgmJmMoKX0pfWVsc2UgYygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZENsb3N1cmVEZXBzPWZ1bmN0aW9uKCl7dGhpcy5kZXBzVG9Mb2FkXy5wdXNoKHRoaXMuZmFjdG9yeV8uY3JlYXRlRGVwZW5kZW5jeShnb29nLm5vcm1hbGl6ZVBhdGhfKGdvb2cuYmFzZVBhdGgrXCJkZXBzLmpzXCIpLFwiZGVwcy5qc1wiLFtdLFtdLHt9LCExKSk7dGhpcy5sb2FkRGVwc18oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnJlcXVlc3RlZD1mdW5jdGlvbihhLGIpeyhhPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhhKSkmJihifHx0aGlzLmFyZURlcHNMb2FkZWRfKHRoaXMuZGVwZW5kZW5jaWVzX1thXS5yZXF1aXJlcykpJiYoYj10aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1thXSkmJihkZWxldGUgdGhpcy5kZWZlcnJlZENhbGxiYWNrc19bYV0sYigpKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnNldERlcGVuZGVuY3lGYWN0b3J5PVxuZnVuY3Rpb24oYSl7dGhpcy5mYWN0b3J5Xz1hfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZF89ZnVuY3Rpb24oYSl7aWYodGhpcy5nZXRQYXRoRnJvbURlcHNfKGEpKXt2YXIgYj10aGlzLGM9W10sZD1mdW5jdGlvbihhKXt2YXIgZT1iLmdldFBhdGhGcm9tRGVwc18oYSk7aWYoIWUpdGhyb3cgRXJyb3IoXCJCYWQgZGVwZW5kZW5jeSBwYXRoIG9yIHN5bWJvbDogXCIrYSk7aWYoIWIud3JpdHRlbl9bZV0pe2Iud3JpdHRlbl9bZV09ITA7YT1iLmRlcGVuZGVuY2llc19bZV07Zm9yKGU9MDtlPGEucmVxdWlyZXMubGVuZ3RoO2UrKylnb29nLmlzUHJvdmlkZWRfKGEucmVxdWlyZXNbZV0pfHxkKGEucmVxdWlyZXNbZV0pO2MucHVzaChhKX19O2QoYSk7YT0hIXRoaXMuZGVwc1RvTG9hZF8ubGVuZ3RoO3RoaXMuZGVwc1RvTG9hZF89dGhpcy5kZXBzVG9Mb2FkXy5jb25jYXQoYyk7dGhpcy5wYXVzZWRffHxhfHx0aGlzLmxvYWREZXBzXygpfWVsc2UgdGhyb3cgYT1cImdvb2cucmVxdWlyZSBjb3VsZCBub3QgZmluZDogXCIrXG5hLGdvb2cubG9nVG9Db25zb2xlXyhhKSxFcnJvcihhKTt9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkRGVwc189ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPXRoaXMucGF1c2VkXzt0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aCYmIWI7KShmdW5jdGlvbigpe3ZhciBjPSExLGQ9YS5kZXBzVG9Mb2FkXy5zaGlmdCgpLGU9ITE7YS5sb2FkaW5nXyhkKTt2YXIgZj17cGF1c2U6ZnVuY3Rpb24oKXtpZihjKXRocm93IEVycm9yKFwiQ2Fubm90IGNhbGwgcGF1c2UgYWZ0ZXIgdGhlIGNhbGwgdG8gbG9hZC5cIik7Yj0hMH0scmVzdW1lOmZ1bmN0aW9uKCl7Yz9hLnJlc3VtZV8oKTpiPSExfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZihlKXRocm93IEVycm9yKFwiRG91YmxlIGNhbGwgdG8gbG9hZGVkLlwiKTtlPSEwO2EubG9hZGVkXyhkKX0scGVuZGluZzpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxvYWRpbmdEZXBzXy5sZW5ndGg7YysrKWIucHVzaChhLmxvYWRpbmdEZXBzX1tjXSk7XG5yZXR1cm4gYn0sc2V0TW9kdWxlU3RhdGU6ZnVuY3Rpb24oYSl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89e3R5cGU6YSxtb2R1bGVOYW1lOlwiXCIsZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZTohMX19LHJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0czpmdW5jdGlvbihhLGIsYyl7YyYmKGdvb2cubG9hZGVkTW9kdWxlc19bY109e2V4cG9ydHM6Yix0eXBlOmdvb2cuTW9kdWxlVHlwZS5FUzYsbW9kdWxlSWQ6Y3x8XCJcIn0pfSxyZWdpc3Rlckdvb2dNb2R1bGVFeHBvcnRzOmZ1bmN0aW9uKGEsYil7Z29vZy5sb2FkZWRNb2R1bGVzX1thXT17ZXhwb3J0czpiLHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0csbW9kdWxlSWQ6YX19LGNsZWFyTW9kdWxlU3RhdGU6ZnVuY3Rpb24oKXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz1udWxsfSxkZWZlcjpmdW5jdGlvbihiKXtpZihjKXRocm93IEVycm9yKFwiQ2Fubm90IHJlZ2lzdGVyIHdpdGggZGVmZXIgYWZ0ZXIgdGhlIGNhbGwgdG8gbG9hZC5cIik7YS5kZWZlcl8oZCxcbmIpfSxhcmVEZXBzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGEuYXJlRGVwc0xvYWRlZF8oZC5yZXF1aXJlcyl9fTt0cnl7ZC5sb2FkKGYpfWZpbmFsbHl7Yz0hMH19KSgpO2ImJnRoaXMucGF1c2VfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5wYXVzZV89ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZF89ITB9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5yZXN1bWVfPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWRfJiYodGhpcy5wYXVzZWRfPSExLHRoaXMubG9hZERlcHNfKCkpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZGluZ189ZnVuY3Rpb24oYSl7dGhpcy5sb2FkaW5nRGVwc18ucHVzaChhKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRlZF89ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7Yjx0aGlzLmxvYWRpbmdEZXBzXy5sZW5ndGg7YisrKWlmKHRoaXMubG9hZGluZ0RlcHNfW2JdPT1hKXt0aGlzLmxvYWRpbmdEZXBzXy5zcGxpY2UoYiwxKTtcbmJyZWFrfWZvcihiPTA7Yjx0aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aDtiKyspaWYodGhpcy5kZWZlcnJlZFF1ZXVlX1tiXT09YS5wYXRoKXt0aGlzLmRlZmVycmVkUXVldWVfLnNwbGljZShiLDEpO2JyZWFrfWlmKHRoaXMubG9hZGluZ0RlcHNfLmxlbmd0aD09dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGgmJiF0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aClmb3IoO3RoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoOyl0aGlzLnJlcXVlc3RlZCh0aGlzLmRlZmVycmVkUXVldWVfLnNoaWZ0KCksITApO2EubG9hZGVkKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5hcmVEZXBzTG9hZGVkXz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5nZXRQYXRoRnJvbURlcHNfKGFbYl0pO2lmKCFjfHwhKGMgaW4gdGhpcy5kZWZlcnJlZENhbGxiYWNrc198fGdvb2cuaXNQcm92aWRlZF8oYVtiXSkpKXJldHVybiExfXJldHVybiEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuZ2V0UGF0aEZyb21EZXBzXz1cbmZ1bmN0aW9uKGEpe3JldHVybiBhIGluIHRoaXMuaWRUb1BhdGhfP3RoaXMuaWRUb1BhdGhfW2FdOmEgaW4gdGhpcy5kZXBlbmRlbmNpZXNfP2E6bnVsbH0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmRlZmVyXz1mdW5jdGlvbihhLGIpe3RoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2EucGF0aF09Yjt0aGlzLmRlZmVycmVkUXVldWVfLnB1c2goYS5wYXRoKX0sZ29vZy5Mb2FkQ29udHJvbGxlcj1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5wZW5kaW5nPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5yZWdpc3RlckVzNk1vZHVsZUV4cG9ydHM9ZnVuY3Rpb24oYSxcbmIsYyl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5zZXRNb2R1bGVTdGF0ZT1mdW5jdGlvbihhKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyTW9kdWxlU3RhdGU9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmRlZmVyPWZ1bmN0aW9uKGEpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuYXJlRGVwc0xvYWRlZD1mdW5jdGlvbigpe30sZ29vZy5EZXBlbmRlbmN5PWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5wYXRoPWE7dGhpcy5yZWxhdGl2ZVBhdGg9Yjt0aGlzLnByb3ZpZGVzPWM7dGhpcy5yZXF1aXJlcz1kO3RoaXMubG9hZEZsYWdzPWU7dGhpcy5sb2FkZWRfPSExO3RoaXMubG9hZENhbGxiYWNrc189W119LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUuZ2V0UGF0aE5hbWU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhdGgsYj1hLmluZGV4T2YoXCI6Ly9cIik7MDw9YiYmKGE9YS5zdWJzdHJpbmcoYiszKSxiPVxuYS5pbmRleE9mKFwiL1wiKSwwPD1iJiYoYT1hLnN1YnN0cmluZyhiKzEpKSk7cmV0dXJuIGF9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUub25Mb2FkPWZ1bmN0aW9uKGEpe3RoaXMubG9hZGVkXz9hKCk6dGhpcy5sb2FkQ2FsbGJhY2tzXy5wdXNoKGEpfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3RoaXMubG9hZGVkXz0hMDt2YXIgYT10aGlzLmxvYWRDYWxsYmFja3NfO3RoaXMubG9hZENhbGxiYWNrc189W107Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspYVtiXSgpfSxnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSExLGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF89e30sZ29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfPWZ1bmN0aW9uKGEpe3ZhciBiPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzIpO2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF9bYl09YTtyZXR1cm4gYn0sZ29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja189XG5mdW5jdGlvbihhKXtkZWxldGUgZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwX1thXX0sZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXz1mdW5jdGlvbihhLGIpe2lmKGEgaW4gZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwXyl7Zm9yKHZhciBjPWdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF9bYV0sZD1bXSxlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylkLnB1c2goYXJndW1lbnRzW2VdKTtjLmFwcGx5KHZvaWQgMCxkKX1lbHNlIHRocm93IEVycm9yKFwiQ2FsbGJhY2sga2V5IFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgKHdhcyBiYXNlLmpzIGxvYWRlZCBtb3JlIHRoYW4gb25jZT8pLlwiKTt9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/YS5sb2FkZWQoKTphLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgYj1cbmdvb2cuZ2xvYmFsLmRvY3VtZW50O2lmKFwiY29tcGxldGVcIj09Yi5yZWFkeVN0YXRlJiYhZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HKXtpZigvXFxiZGVwcy5qcyQvLnRlc3QodGhpcy5wYXRoKSl7YS5sb2FkZWQoKTtyZXR1cm59dGhyb3cgRXJyb3IoJ0Nhbm5vdCB3cml0ZSBcIicrdGhpcy5wYXRoKydcIiBhZnRlciBkb2N1bWVudCBsb2FkJyk7fWlmKCFnb29nLkVOQUJMRV9DSFJPTUVfQVBQX1NBRkVfU0NSSVBUX0xPQURJTkcmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpe3ZhciBjPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXyhmdW5jdGlvbihiKXtnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfJiZcImNvbXBsZXRlXCIhPWIucmVhZHlTdGF0ZXx8KGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKGMpLGEubG9hZGVkKCkpfSksZD0hZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5nZXRTY3JpcHROb25jZSgpP1xuJyBub25jZT1cIicrZ29vZy5nZXRTY3JpcHROb25jZSgpKydcIic6XCJcIjtkPSc8c2NyaXB0IHNyYz1cIicrdGhpcy5wYXRoKydcIiAnKyhnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfP1wib25yZWFkeXN0YXRlY2hhbmdlXCI6XCJvbmxvYWRcIikrXCI9XFxcImdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oJ1wiK2MrJ1xcJywgdGhpcylcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgJysoZ29vZy5EZXBlbmRlbmN5LmRlZmVyXz9cImRlZmVyXCI6XCJcIikrZCtcIj5cXHgzYy9zY3JpcHQ+XCI7Yi53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKGQpOmQpfWVsc2V7dmFyIGU9Yi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2UuZGVmZXI9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXztlLmFzeW5jPSExO2UudHlwZT1cInRleHQvamF2YXNjcmlwdFwiOyhkPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJmUuc2V0QXR0cmlidXRlKFwibm9uY2VcIixkKTtnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfP1xuKGEucGF1c2UoKSxlLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKFwibG9hZGVkXCI9PWUucmVhZHlTdGF0ZXx8XCJjb21wbGV0ZVwiPT1lLnJlYWR5U3RhdGUpYS5sb2FkZWQoKSxhLnJlc3VtZSgpfSk6ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtlLm9ubG9hZD1udWxsO2EubG9hZGVkKCl9O2Uuc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTCh0aGlzLnBhdGgpOnRoaXMucGF0aDtiLmhlYWQuYXBwZW5kQ2hpbGQoZSl9fWVsc2UgZ29vZy5sb2dUb0NvbnNvbGVfKFwiQ2Fubm90IHVzZSBkZWZhdWx0IGRlYnVnIGxvYWRlciBvdXRzaWRlIG9mIEhUTUwgZG9jdW1lbnRzLlwiKSxcImRlcHMuanNcIj09dGhpcy5yZWxhdGl2ZVBhdGg/KGdvb2cubG9nVG9Db25zb2xlXyhcIkNvbnNpZGVyIHNldHRpbmcgQ0xPU1VSRV9JTVBPUlRfU0NSSVBUIGJlZm9yZSBsb2FkaW5nIGJhc2UuanMsIG9yIHNldHRpbmcgQ0xPU1VSRV9OT19ERVBTIHRvIHRydWUuXCIpLFxuYS5sb2FkZWQoKSk6YS5wYXVzZSgpfSxnb29nLkVzNk1vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlKXtnb29nLkRlcGVuZGVuY3kuY2FsbCh0aGlzLGEsYixjLGQsZSl9LGdvb2cuaW5oZXJpdHMoZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5LGdvb2cuRGVwZW5kZW5jeSksZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXthPWI/JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luPicrYitcIlxceDNjL3NjcmlwdD5cIjonPHNjcmlwdCB0eXBlPVwibW9kdWxlXCIgY3Jvc3NvcmlnaW4gc3JjPVwiJythKydcIj5cXHgzYy9zY3JpcHQ+JztkLndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwoYSk6YSl9ZnVuY3Rpb24gYyhhLGIpe3ZhciBjPWQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtjLmRlZmVyPSEwO2MuYXN5bmM9ITE7Yy50eXBlPVxuXCJtb2R1bGVcIjtjLnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsITApO3ZhciBlPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKTtlJiZjLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsZSk7Yj9jLnRleHRDb250ZW50PWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdChiKTpiOmMuc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTChhKTphO2QuaGVhZC5hcHBlbmRDaGlsZChjKX1pZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/YS5sb2FkZWQoKTphLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgZD1nb29nLmdsb2JhbC5kb2N1bWVudCxlPXRoaXM7aWYoZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSl7dmFyIGY9Yjtnb29nLkRlcGVuZGVuY3kuZGVmZXJfPVxuITB9ZWxzZSBmPWM7dmFyIGc9Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKGZ1bmN0aW9uKCl7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18oZyk7YS5zZXRNb2R1bGVTdGF0ZShnb29nLk1vZHVsZVR5cGUuRVM2KX0pO2Yodm9pZCAwLCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytnKydcIiknKTtmKHRoaXMucGF0aCx2b2lkIDApO3ZhciBoPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXyhmdW5jdGlvbihiKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhoKTthLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhlLnBhdGgsYixnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKX0pO2Yodm9pZCAwLCdpbXBvcnQgKiBhcyBtIGZyb20gXCInK3RoaXMucGF0aCsnXCI7IGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK2grJ1wiLCBtKScpO3ZhciBrPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXyhmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKGspO1xuYS5jbGVhck1vZHVsZVN0YXRlKCk7YS5sb2FkZWQoKX0pO2Yodm9pZCAwLCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytrKydcIiknKX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksYS5wYXVzZSgpfSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkLGUpe2dvb2cuRGVwZW5kZW5jeS5jYWxsKHRoaXMsYSxiLGMsZCxlKTt0aGlzLmNvbnRlbnRzXz1udWxsO3RoaXMubGF6eUZldGNoXz0hZ29vZy5pbkh0bWxEb2N1bWVudF8oKXx8IShcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKX0sZ29vZy5pbmhlcml0cyhnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXtlLmNvbnRlbnRzXz1cbmdvb2cubG9hZEZpbGVTeW5jXyhlLnBhdGgpO2UuY29udGVudHNfJiYoZS5jb250ZW50c189ZS50cmFuc2Zvcm0oZS5jb250ZW50c18pLGUuY29udGVudHNfJiYoZS5jb250ZW50c18rPVwiXFxuLy8jIHNvdXJjZVVSTD1cIitlLnBhdGgpKX1mdW5jdGlvbiBjKCl7ZS5sYXp5RmV0Y2hfJiZiKCk7aWYoZS5jb250ZW50c18pe2YmJmEuc2V0TW9kdWxlU3RhdGUoZ29vZy5Nb2R1bGVUeXBlLkVTNik7dHJ5e3ZhciBjPWUuY29udGVudHNfO2UuY29udGVudHNfPW51bGw7Z29vZy5nbG9iYWxFdmFsKGMpO2lmKGYpdmFyIGQ9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZX1maW5hbGx5e2YmJmEuY2xlYXJNb2R1bGVTdGF0ZSgpfWYmJmdvb2cuZ2xvYmFsLiRqc2NvbXAucmVxdWlyZS5lbnN1cmUoW2UuZ2V0UGF0aE5hbWUoKV0sZnVuY3Rpb24oKXthLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhlLnBhdGgsZ29vZy5nbG9iYWwuJGpzY29tcC5yZXF1aXJlKGUuZ2V0UGF0aE5hbWUoKSksXG5kKX0pO2EubG9hZGVkKCl9fWZ1bmN0aW9uIGQoKXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudCxiPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXyhmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKGIpO2MoKX0pLGQ9JzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPicrZ29vZy5wcm90ZWN0U2NyaXB0VGFnXygnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicrYisnXCIpOycpK1wiXFx4M2Mvc2NyaXB0PlwiO2Eud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChkKTpkKX12YXIgZT10aGlzO2lmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCliKCksdGhpcy5jb250ZW50c18mJmdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVChcIlwiLHRoaXMuY29udGVudHNfKT8odGhpcy5jb250ZW50c189bnVsbCxhLmxvYWRlZCgpKTphLnBhdXNlKCk7XG5lbHNle3ZhciBmPXRoaXMubG9hZEZsYWdzLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkVTNjt0aGlzLmxhenlGZXRjaF98fGIoKTt2YXIgZz0xPGEucGVuZGluZygpLmxlbmd0aCxoPWcmJmdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV87Zz1nb29nLkRlcGVuZGVuY3kuZGVmZXJfJiYoZ3x8Z29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSk7aWYoaHx8ZylhLmRlZmVyKGZ1bmN0aW9uKCl7YygpfSk7ZWxzZXt2YXIgaz1nb29nLmdsb2JhbC5kb2N1bWVudDtoPWdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJlwiQWN0aXZlWE9iamVjdFwiaW4gZ29vZy5nbG9iYWw7aWYoZiYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSYmIWgpe2dvb2cuRGVwZW5kZW5jeS5kZWZlcl89ITA7YS5wYXVzZSgpO3ZhciBsPWsub25yZWFkeXN0YXRlY2hhbmdlO2sub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XCJpbnRlcmFjdGl2ZVwiPT1rLnJlYWR5U3RhdGUmJihrLm9ucmVhZHlzdGF0ZWNoYW5nZT1cbmwsYygpLGEucmVzdW1lKCkpO2dvb2cuaXNGdW5jdGlvbihsKSYmbC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19ZWxzZSFnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfJiZnb29nLmluSHRtbERvY3VtZW50XygpJiZnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpP2QoKTpjKCl9fX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhKXt9LGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxhLGIsYyxkLGUpO3RoaXMudHJhbnNwaWxlcj1mfSxnb29nLmluaGVyaXRzKGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50cmFuc3BpbGVyLnRyYW5zcGlsZShhLHRoaXMuZ2V0UGF0aE5hbWUoKSl9LFxuZ29vZy5QcmVUcmFuc3BpbGVkRXM2TW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkLGUpe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxhLGIsYyxkLGUpfSxnb29nLmluaGVyaXRzKGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhKXtyZXR1cm4gYX0sZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsYSxiLGMsZCxlKTt0aGlzLm5lZWRzVHJhbnNwaWxlXz1mO3RoaXMudHJhbnNwaWxlcl89Z30sZ29vZy5pbmhlcml0cyhnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09XG5mdW5jdGlvbihhKXt0aGlzLm5lZWRzVHJhbnNwaWxlXyYmKGE9dGhpcy50cmFuc3BpbGVyXy50cmFuc3BpbGUoYSx0aGlzLmdldFBhdGhOYW1lKCkpKTtyZXR1cm4gZ29vZy5MT0FEX01PRFVMRV9VU0lOR19FVkFMJiZnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLkpTT04pP1wiZ29vZy5sb2FkTW9kdWxlKFwiK2dvb2cuZ2xvYmFsLkpTT04uc3RyaW5naWZ5KGErXCJcXG4vLyMgc291cmNlVVJMPVwiK3RoaXMucGF0aCtcIlxcblwiKStcIik7XCI6J2dvb2cubG9hZE1vZHVsZShmdW5jdGlvbihleHBvcnRzKSB7XCJ1c2Ugc3RyaWN0XCI7JythK1wiXFxuO3JldHVybiBleHBvcnRzfSk7XFxuLy8jIHNvdXJjZVVSTD1cIit0aGlzLnBhdGgrXCJcXG5cIn0sZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXz0hKGdvb2cuZ2xvYmFsLmF0b2J8fCFnb29nLmdsb2JhbC5kb2N1bWVudHx8IWdvb2cuZ2xvYmFsLmRvY3VtZW50LmFsbCksZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmFkZERlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLFxuYyxkKXtiPWJ8fFtdO2E9YS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpO3ZhciBlPWdvb2cubm9ybWFsaXplUGF0aF8oZ29vZy5iYXNlUGF0aCthKTtkJiZcImJvb2xlYW5cIiE9PXR5cGVvZiBkfHwoZD1kP3ttb2R1bGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0d9Ont9KTtjPXRoaXMuZmFjdG9yeV8uY3JlYXRlRGVwZW5kZW5jeShlLGEsYixjLGQsZ29vZy50cmFuc3BpbGVyXy5uZWVkc1RyYW5zcGlsZShkLmxhbmd8fFwiZXMzXCIsZC5tb2R1bGUpKTt0aGlzLmRlcGVuZGVuY2llc19bZV09Yztmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuaWRUb1BhdGhfW2JbY11dPWU7dGhpcy5pZFRvUGF0aF9bYV09ZX0sZ29vZy5EZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihhKXt0aGlzLnRyYW5zcGlsZXI9YX0sZ29vZy5EZXBlbmRlbmN5RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkLGUsZil7cmV0dXJuIGUubW9kdWxlPT1nb29nLk1vZHVsZVR5cGUuR09PRz9uZXcgZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeShhLFxuYixjLGQsZSxmLHRoaXMudHJhbnNwaWxlcik6Zj9uZXcgZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeShhLGIsYyxkLGUsdGhpcy50cmFuc3BpbGVyKTplLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkVTNj9cIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFJiZnb29nLkFTU1VNRV9FU19NT0RVTEVTX1RSQU5TUElMRUQ/bmV3IGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3koYSxiLGMsZCxlKTpuZXcgZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5KGEsYixjLGQsZSk6bmV3IGdvb2cuRGVwZW5kZW5jeShhLGIsYyxkLGUpfSxnb29nLmRlYnVnTG9hZGVyXz1uZXcgZ29vZy5EZWJ1Z0xvYWRlcl8sZ29vZy5sb2FkQ2xvc3VyZURlcHM9ZnVuY3Rpb24oKXtnb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKX0sZ29vZy5zZXREZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihhKXtnb29nLmRlYnVnTG9hZGVyXy5zZXREZXBlbmRlbmN5RmFjdG9yeShhKX0sZ29vZy5nbG9iYWwuQ0xPU1VSRV9OT19ERVBTfHxcbmdvb2cuZGVidWdMb2FkZXJfLmxvYWRDbG9zdXJlRGVwcygpLGdvb2cuYm9vdHN0cmFwPWZ1bmN0aW9uKGEsYil7Z29vZy5kZWJ1Z0xvYWRlcl8uYm9vdHN0cmFwKGEsYil9KTtnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUU9XCJcIjtnb29nLmlkZW50aXR5Xz1mdW5jdGlvbihhKXtyZXR1cm4gYX07Z29vZy5jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3k9ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIFRydXN0ZWRUeXBlc3x8IVRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kpcmV0dXJuIGI7dHJ5e2I9VHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShhLHtjcmVhdGVIVE1MOmdvb2cuaWRlbnRpdHlfLGNyZWF0ZVNjcmlwdDpnb29nLmlkZW50aXR5XyxjcmVhdGVTY3JpcHRVUkw6Z29vZy5pZGVudGl0eV8sY3JlYXRlVVJMOmdvb2cuaWRlbnRpdHlffSl9Y2F0Y2goYyl7Z29vZy5sb2dUb0NvbnNvbGVfKGMubWVzc2FnZSl9cmV0dXJuIGJ9O1xuZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV89Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNiYXNlXCIpOm51bGw7Z29vZy5vYmplY3Q9e307Z29vZy5vYmplY3QuaXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWI/MCE9PWF8fDEvYT09PTEvYjphIT09YSYmYiE9PWJ9O2dvb2cub2JqZWN0LmZvckVhY2g9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBhKWIuY2FsbChjLGFbZF0sZCxhKX07Z29vZy5vYmplY3QuZmlsdGVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlO2ZvcihlIGluIGEpYi5jYWxsKGMsYVtlXSxlLGEpJiYoZFtlXT1hW2VdKTtyZXR1cm4gZH07Z29vZy5vYmplY3QubWFwPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlO2ZvcihlIGluIGEpZFtlXT1iLmNhbGwoYyxhW2VdLGUsYSk7cmV0dXJuIGR9O2dvb2cub2JqZWN0LnNvbWU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBhKWlmKGIuY2FsbChjLGFbZF0sZCxhKSlyZXR1cm4hMDtyZXR1cm4hMX07XG5nb29nLm9iamVjdC5ldmVyeT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkIGluIGEpaWYoIWIuY2FsbChjLGFbZF0sZCxhKSlyZXR1cm4hMTtyZXR1cm4hMH07Z29vZy5vYmplY3QuZ2V0Q291bnQ9ZnVuY3Rpb24oYSl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYisrO3JldHVybiBifTtnb29nLm9iamVjdC5nZXRBbnlLZXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuIGJ9O2dvb2cub2JqZWN0LmdldEFueVZhbHVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiBhW2JdfTtnb29nLm9iamVjdC5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLm9iamVjdC5jb250YWluc1ZhbHVlKGEsYil9O2dvb2cub2JqZWN0LmdldFZhbHVlcz1mdW5jdGlvbihhKXt2YXIgYj1bXSxjPTAsZDtmb3IoZCBpbiBhKWJbYysrXT1hW2RdO3JldHVybiBifTtcbmdvb2cub2JqZWN0LmdldEtleXM9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz0wLGQ7Zm9yKGQgaW4gYSliW2MrK109ZDtyZXR1cm4gYn07Z29vZy5vYmplY3QuZ2V0VmFsdWVCeUtleXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1nb29nLmlzQXJyYXlMaWtlKGIpLGQ9Yz9iOmFyZ3VtZW50cztmb3IoYz1jPzA6MTtjPGQubGVuZ3RoO2MrKyl7aWYobnVsbD09YSlyZXR1cm47YT1hW2RbY11dfXJldHVybiBhfTtnb29nLm9iamVjdC5jb250YWluc0tleT1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT09YSYmYiBpbiBhfTtnb29nLm9iamVjdC5jb250YWluc1ZhbHVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIGEpaWYoYVtjXT09YilyZXR1cm4hMDtyZXR1cm4hMX07Z29vZy5vYmplY3QuZmluZEtleT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkIGluIGEpaWYoYi5jYWxsKGMsYVtkXSxkLGEpKXJldHVybiBkfTtcbmdvb2cub2JqZWN0LmZpbmRWYWx1ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuKGI9Z29vZy5vYmplY3QuZmluZEtleShhLGIsYykpJiZhW2JdfTtnb29nLm9iamVjdC5pc0VtcHR5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiExO3JldHVybiEwfTtnb29nLm9iamVjdC5jbGVhcj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlkZWxldGUgYVtiXX07Z29vZy5vYmplY3QucmVtb3ZlPWZ1bmN0aW9uKGEsYil7dmFyIGM7KGM9YiBpbiBhKSYmZGVsZXRlIGFbYl07cmV0dXJuIGN9O2dvb2cub2JqZWN0LmFkZD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbCE9PWEmJmIgaW4gYSl0aHJvdyBFcnJvcignVGhlIG9iamVjdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBrZXkgXCInK2IrJ1wiJyk7Z29vZy5vYmplY3Quc2V0KGEsYixjKX07Z29vZy5vYmplY3QuZ2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbCE9PWEmJmIgaW4gYT9hW2JdOmN9O1xuZ29vZy5vYmplY3Quc2V0PWZ1bmN0aW9uKGEsYixjKXthW2JdPWN9O2dvb2cub2JqZWN0LnNldElmVW5kZWZpbmVkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYiBpbiBhP2FbYl06YVtiXT1jfTtnb29nLm9iamVjdC5zZXRXaXRoUmV0dXJuVmFsdWVJZk5vdFNldD1mdW5jdGlvbihhLGIsYyl7aWYoYiBpbiBhKXJldHVybiBhW2JdO2M9YygpO3JldHVybiBhW2JdPWN9O2dvb2cub2JqZWN0LmVxdWFscz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBhKWlmKCEoYyBpbiBiKXx8YVtjXSE9PWJbY10pcmV0dXJuITE7Zm9yKHZhciBkIGluIGIpaWYoIShkIGluIGEpKXJldHVybiExO3JldHVybiEwfTtnb29nLm9iamVjdC5jbG9uZT1mdW5jdGlvbihhKXt2YXIgYj17fSxjO2ZvcihjIGluIGEpYltjXT1hW2NdO3JldHVybiBifTtcbmdvb2cub2JqZWN0LnVuc2FmZUNsb25lPWZ1bmN0aW9uKGEpe3ZhciBiPWdvb2cudHlwZU9mKGEpO2lmKFwib2JqZWN0XCI9PWJ8fFwiYXJyYXlcIj09Yil7aWYoZ29vZy5pc0Z1bmN0aW9uKGEuY2xvbmUpKXJldHVybiBhLmNsb25lKCk7Yj1cImFycmF5XCI9PWI/W106e307Zm9yKHZhciBjIGluIGEpYltjXT1nb29nLm9iamVjdC51bnNhZmVDbG9uZShhW2NdKTtyZXR1cm4gYn1yZXR1cm4gYX07Z29vZy5vYmplY3QudHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSliW2FbY11dPWM7cmV0dXJuIGJ9O2dvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpO1xuZ29vZy5vYmplY3QuZXh0ZW5kPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQsZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe2Q9YXJndW1lbnRzW2VdO2ZvcihjIGluIGQpYVtjXT1kW2NdO2Zvcih2YXIgZj0wO2Y8Z29vZy5vYmplY3QuUFJPVE9UWVBFX0ZJRUxEU18ubGVuZ3RoO2YrKyljPWdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfW2ZdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGMpJiYoYVtjXT1kW2NdKX19O1xuZ29vZy5vYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg7aWYoMT09YiYmZ29vZy5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIGdvb2cub2JqZWN0LmNyZWF0ZS5hcHBseShudWxsLGFyZ3VtZW50c1swXSk7aWYoYiUyKXRocm93IEVycm9yKFwiVW5ldmVuIG51bWJlciBvZiBhcmd1bWVudHNcIik7Zm9yKHZhciBjPXt9LGQ9MDtkPGI7ZCs9MiljW2FyZ3VtZW50c1tkXV09YXJndW1lbnRzW2QrMV07cmV0dXJuIGN9O2dvb2cub2JqZWN0LmNyZWF0ZVNldD1mdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoO2lmKDE9PWImJmdvb2cuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiBnb29nLm9iamVjdC5jcmVhdGVTZXQuYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pO2Zvcih2YXIgYz17fSxkPTA7ZDxiO2QrKyljW2FyZ3VtZW50c1tkXV09ITA7cmV0dXJuIGN9O1xuZ29vZy5vYmplY3QuY3JlYXRlSW1tdXRhYmxlVmlldz1mdW5jdGlvbihhKXt2YXIgYj1hO09iamVjdC5pc0Zyb3plbiYmIU9iamVjdC5pc0Zyb3plbihhKSYmKGI9T2JqZWN0LmNyZWF0ZShhKSxPYmplY3QuZnJlZXplKGIpKTtyZXR1cm4gYn07Z29vZy5vYmplY3QuaXNJbW11dGFibGVWaWV3PWZ1bmN0aW9uKGEpe3JldHVybiEhT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oYSl9O1xuZ29vZy5vYmplY3QuZ2V0QWxsUHJvcGVydHlOYW1lcz1mdW5jdGlvbihhLGIsYyl7aWYoIWEpcmV0dXJuW107aWYoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHwhT2JqZWN0LmdldFByb3RvdHlwZU9mKXJldHVybiBnb29nLm9iamVjdC5nZXRLZXlzKGEpO2Zvcih2YXIgZD17fTthJiYoYSE9PU9iamVjdC5wcm90b3R5cGV8fGIpJiYoYSE9PUZ1bmN0aW9uLnByb3RvdHlwZXx8Yyk7KXtmb3IodmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksZj0wO2Y8ZS5sZW5ndGg7ZisrKWRbZVtmXV09ITA7YT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9cmV0dXJuIGdvb2cub2JqZWN0LmdldEtleXMoZCl9O2dvb2cub2JqZWN0LmdldFN1cGVyQ2xhc3M9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEucHJvdG90eXBlKSkmJmEuY29uc3RydWN0b3J9O2dvb2cuZGVidWc9e307Z29vZy5kZWJ1Zy5FcnJvcj1mdW5jdGlvbihhKXtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGdvb2cuZGVidWcuRXJyb3IpO2Vsc2V7dmFyIGI9RXJyb3IoKS5zdGFjaztiJiYodGhpcy5zdGFjaz1iKX1hJiYodGhpcy5tZXNzYWdlPVN0cmluZyhhKSk7dGhpcy5yZXBvcnRFcnJvclRvU2VydmVyPSEwfTtnb29nLmluaGVyaXRzKGdvb2cuZGVidWcuRXJyb3IsRXJyb3IpO2dvb2cuZGVidWcuRXJyb3IucHJvdG90eXBlLm5hbWU9XCJDdXN0b21FcnJvclwiO2dvb2cuZG9tPXt9O2dvb2cuZG9tLk5vZGVUeXBlPXtFTEVNRU5UOjEsQVRUUklCVVRFOjIsVEVYVDozLENEQVRBX1NFQ1RJT046NCxFTlRJVFlfUkVGRVJFTkNFOjUsRU5USVRZOjYsUFJPQ0VTU0lOR19JTlNUUlVDVElPTjo3LENPTU1FTlQ6OCxET0NVTUVOVDo5LERPQ1VNRU5UX1RZUEU6MTAsRE9DVU1FTlRfRlJBR01FTlQ6MTEsTk9UQVRJT046MTJ9O2dvb2cuYXNzZXJ0cz17fTtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFM9Z29vZy5ERUJVRztnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3I9ZnVuY3Rpb24oYSxiKXtnb29nLmRlYnVnLkVycm9yLmNhbGwodGhpcyxnb29nLmFzc2VydHMuc3Vic18oYSxiKSk7dGhpcy5tZXNzYWdlUGF0dGVybj1hfTtnb29nLmluaGVyaXRzKGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcixnb29nLmRlYnVnLkVycm9yKTtnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiO2dvb2cuYXNzZXJ0cy5ERUZBVUxUX0VSUk9SX0hBTkRMRVI9ZnVuY3Rpb24oYSl7dGhyb3cgYTt9O2dvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfPWdvb2cuYXNzZXJ0cy5ERUZBVUxUX0VSUk9SX0hBTkRMRVI7XG5nb29nLmFzc2VydHMuc3Vic189ZnVuY3Rpb24oYSxiKXthPWEuc3BsaXQoXCIlc1wiKTtmb3IodmFyIGM9XCJcIixkPWEubGVuZ3RoLTEsZT0wO2U8ZDtlKyspYys9YVtlXSsoZTxiLmxlbmd0aD9iW2VdOlwiJXNcIik7cmV0dXJuIGMrYVtkXX07Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV89ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9XCJBc3NlcnRpb24gZmFpbGVkXCI7aWYoYyl7ZSs9XCI6IFwiK2M7dmFyIGY9ZH1lbHNlIGEmJihlKz1cIjogXCIrYSxmPWIpO2E9bmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIlwiK2UsZnx8W10pO2dvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfKGEpfTtnb29nLmFzc2VydHMuc2V0RXJyb3JIYW5kbGVyPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmKGdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfPWEpfTtcbmdvb2cuYXNzZXJ0cy5hc3NlcnQ9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWEmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiXCIsbnVsbCxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O2dvb2cuYXNzZXJ0cy5hc3NlcnRFeGlzdHM9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmbnVsbD09YSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCB0byBleGlzdDogJXMuXCIsW2FdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07XG5nb29nLmFzc2VydHMuZmFpbD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl8obmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIkZhaWx1cmVcIisoYT9cIjogXCIrYTpcIlwiKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpKX07Z29vZy5hc3NlcnRzLmFzc2VydE51bWJlcj1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc051bWJlcihhKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBudW1iZXIgYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGEpLGFdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07XG5nb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzU3RyaW5nKGEpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIHN0cmluZyBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoYSksYV0sYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtnb29nLmFzc2VydHMuYXNzZXJ0RnVuY3Rpb249ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNGdW5jdGlvbihhKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoYSksYV0sYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtcbmdvb2cuYXNzZXJ0cy5hc3NlcnRPYmplY3Q9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNPYmplY3QoYSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihhKSxhXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O2dvb2cuYXNzZXJ0cy5hc3NlcnRBcnJheT1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0FycmF5KGEpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGFycmF5IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihhKSxhXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O1xuZ29vZy5hc3NlcnRzLmFzc2VydEJvb2xlYW49ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNCb29sZWFuKGEpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGJvb2xlYW4gYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGEpLGFdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07Z29vZy5hc3NlcnRzLmFzc2VydEVsZW1lbnQ9ZnVuY3Rpb24oYSxiLGMpeyFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGdvb2cuaXNPYmplY3QoYSkmJmEubm9kZVR5cGU9PWdvb2cuZG9tLk5vZGVUeXBlLkVMRU1FTlR8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgRWxlbWVudCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoYSksYV0sYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtcbmdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mPWZ1bmN0aW9uKGEsYixjLGQpeyFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGEgaW5zdGFuY2VvZiBifHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGluc3RhbmNlb2YgJXMgYnV0IGdvdCAlcy5cIixbZ29vZy5hc3NlcnRzLmdldFR5cGVfKGIpLGdvb2cuYXNzZXJ0cy5nZXRUeXBlXyhhKV0sYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMykpO3JldHVybiBhfTtnb29nLmFzc2VydHMuYXNzZXJ0RmluaXRlPWZ1bmN0aW9uKGEsYixjKXshZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxcIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSl8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgJXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyIGJ1dCBpdCBpcyBub3QuXCIsW2FdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07XG5nb29nLmFzc2VydHMuYXNzZXJ0T2JqZWN0UHJvdG90eXBlSXNJbnRhY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gT2JqZWN0LnByb3RvdHlwZSlnb29nLmFzc2VydHMuZmFpbChhK1wiIHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSBpbiBPYmplY3QucHJvdG90eXBlLlwiKX07Z29vZy5hc3NlcnRzLmdldFR5cGVfPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgRnVuY3Rpb24/YS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxcInVua25vd24gdHlwZSBuYW1lXCI6YSBpbnN0YW5jZW9mIE9iamVjdD9hLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxhLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTpudWxsPT09YT9cIm51bGxcIjp0eXBlb2YgYX07dmFyIGpzcGI9e0JpbmFyeUNvbnN0YW50czp7fSxDb25zdEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9LEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9fTtqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU9e0lOVkFMSUQ6LTEsRE9VQkxFOjEsRkxPQVQ6MixJTlQ2NDozLFVJTlQ2NDo0LElOVDMyOjUsRklYRUQ2NDo2LEZJWEVEMzI6NyxCT09MOjgsU1RSSU5HOjksR1JPVVA6MTAsTUVTU0FHRToxMSxCWVRFUzoxMixVSU5UMzI6MTMsRU5VTToxNCxTRklYRUQzMjoxNSxTRklYRUQ2NDoxNixTSU5UMzI6MTcsU0lOVDY0OjE4LEZIQVNINjQ6MzAsVkhBU0g2NDozMX07anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU9e0lOVkFMSUQ6LTEsVkFSSU5UOjAsRklYRUQ2NDoxLERFTElNSVRFRDoyLFNUQVJUX0dST1VQOjMsRU5EX0dST1VQOjQsRklYRUQzMjo1fTtcbmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRvV2lyZVR5cGU9ZnVuY3Rpb24oYSl7dmFyIGI9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlLGM9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU7c3dpdGNoKGEpe2Nhc2UgYi5JTlQzMjpjYXNlIGIuSU5UNjQ6Y2FzZSBiLlVJTlQzMjpjYXNlIGIuVUlOVDY0OmNhc2UgYi5TSU5UMzI6Y2FzZSBiLlNJTlQ2NDpjYXNlIGIuQk9PTDpjYXNlIGIuRU5VTTpjYXNlIGIuVkhBU0g2NDpyZXR1cm4gYy5WQVJJTlQ7Y2FzZSBiLkRPVUJMRTpjYXNlIGIuRklYRUQ2NDpjYXNlIGIuU0ZJWEVENjQ6Y2FzZSBiLkZIQVNINjQ6cmV0dXJuIGMuRklYRUQ2NDtjYXNlIGIuU1RSSU5HOmNhc2UgYi5NRVNTQUdFOmNhc2UgYi5CWVRFUzpyZXR1cm4gYy5ERUxJTUlURUQ7Y2FzZSBiLkZMT0FUOmNhc2UgYi5GSVhFRDMyOmNhc2UgYi5TRklYRUQzMjpyZXR1cm4gYy5GSVhFRDMyO2RlZmF1bHQ6cmV0dXJuIGMuSU5WQUxJRH19O1xuanNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI9LTE7anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9FUFM9MS40MDEyOTg0NjQzMjQ4MTdFLTQ1O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOPTEuMTc1NDk0MzUwODIyMjg3NUUtMzg7anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVg9My40MDI4MjM0NjYzODUyODg2RTM4O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfRVBTPTQuOUUtMzI0O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUlOPTIuMjI1MDczODU4NTA3MjAxNEUtMzA4O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYPTEuNzk3NjkzMTM0ODYyMzE1N0UzMDg7anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwPTEwNDg1NzY7anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIzPTgzODg2MDg7anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxPTIxNDc0ODM2NDg7XG5qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzI9NDI5NDk2NzI5Njtqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNTI9NDUwMzU5OTYyNzM3MDQ5Njtqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjM9MHg3ZmZmZmZmZmZmZmZmZmZmO2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182ND0xLjg0NDY3NDQwNzM3MDk1NTJFMTk7anNwYi5CaW5hcnlDb25zdGFudHMuWkVST19IQVNIPVwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiO2dvb2cuYXJyYXk9e307Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUz1nb29nLlRSVVNURURfU0lURTtnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TPTIwMTI8Z29vZy5GRUFUVVJFU0VUX1lFQVI7Z29vZy5hcnJheS5wZWVrPWZ1bmN0aW9uKGEpe3JldHVybiBhW2EubGVuZ3RoLTFdfTtnb29nLmFycmF5Lmxhc3Q9Z29vZy5hcnJheS5wZWVrO1xuZ29vZy5hcnJheS5pbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuaW5kZXhPZik/ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO3JldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbD09Yz8wOjA+Yz9NYXRoLm1heCgwLGEubGVuZ3RoK2MpOmM7aWYoZ29vZy5pc1N0cmluZyhhKSlyZXR1cm4gZ29vZy5pc1N0cmluZyhiKSYmMT09Yi5sZW5ndGg/YS5pbmRleE9mKGIsYyk6LTE7Zm9yKDtjPGEubGVuZ3RoO2MrKylpZihjIGluIGEmJmFbY109PT1iKXJldHVybiBjO3JldHVybi0xfTtcbmdvb2cuYXJyYXkubGFzdEluZGV4T2Y9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZik/ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO3JldHVybiBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChhLGIsbnVsbD09Yz9hLmxlbmd0aC0xOmMpfTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsPT1jP2EubGVuZ3RoLTE6YzswPmMmJihjPU1hdGgubWF4KDAsYS5sZW5ndGgrYykpO2lmKGdvb2cuaXNTdHJpbmcoYSkpcmV0dXJuIGdvb2cuaXNTdHJpbmcoYikmJjE9PWIubGVuZ3RoP2EubGFzdEluZGV4T2YoYixjKTotMTtmb3IoOzA8PWM7Yy0tKWlmKGMgaW4gYSYmYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9O1xuZ29vZy5hcnJheS5mb3JFYWNoPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk/ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9Z29vZy5pc1N0cmluZyhhKT9hLnNwbGl0KFwiXCIpOmEsZj0wO2Y8ZDtmKyspZiBpbiBlJiZiLmNhbGwoYyxlW2ZdLGYsYSl9O2dvb2cuYXJyYXkuZm9yRWFjaFJpZ2h0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmxlbmd0aCxlPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphO2ZvcigtLWQ7MDw9ZDstLWQpZCBpbiBlJiZiLmNhbGwoYyxlW2RdLGQsYSl9O1xuZ29vZy5hcnJheS5maWx0ZXI9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5maWx0ZXIpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPVtdLGY9MCxnPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphLGg9MDtoPGQ7aCsrKWlmKGggaW4gZyl7dmFyIGs9Z1toXTtiLmNhbGwoYyxrLGgsYSkmJihlW2YrK109ayl9cmV0dXJuIGV9O1xuZ29vZy5hcnJheS5tYXA9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5tYXApP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPUFycmF5KGQpLGY9Z29vZy5pc1N0cmluZyhhKT9hLnNwbGl0KFwiXCIpOmEsZz0wO2c8ZDtnKyspZyBpbiBmJiYoZVtnXT1iLmNhbGwoYyxmW2ddLGcsYSkpO3JldHVybiBlfTtcbmdvb2cuYXJyYXkucmVkdWNlPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUucmVkdWNlKT9mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtkJiYoYj1nb29nLmJpbmQoYixkKSk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWM7Z29vZy5hcnJheS5mb3JFYWNoKGEsZnVuY3Rpb24oYyxnKXtlPWIuY2FsbChkLGUsYyxnLGEpfSk7cmV0dXJuIGV9O1xuZ29vZy5hcnJheS5yZWR1Y2VSaWdodD1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KT9mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWIpO2QmJihiPWdvb2cuYmluZChiLGQpKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0LmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1jO2dvb2cuYXJyYXkuZm9yRWFjaFJpZ2h0KGEsZnVuY3Rpb24oYyxnKXtlPWIuY2FsbChkLGUsYyxnLGEpfSk7cmV0dXJuIGV9O1xuZ29vZy5hcnJheS5zb21lPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuc29tZSk/ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO3JldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphLGY9MDtmPGQ7ZisrKWlmKGYgaW4gZSYmYi5jYWxsKGMsZVtmXSxmLGEpKXJldHVybiEwO3JldHVybiExfTtcbmdvb2cuYXJyYXkuZXZlcnk9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5ldmVyeSk/ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO3JldHVybiBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YSxmPTA7ZjxkO2YrKylpZihmIGluIGUmJiFiLmNhbGwoYyxlW2ZdLGYsYSkpcmV0dXJuITE7cmV0dXJuITB9O2dvb2cuYXJyYXkuY291bnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTA7Z29vZy5hcnJheS5mb3JFYWNoKGEsZnVuY3Rpb24oYSxmLGcpe2IuY2FsbChjLGEsZixnKSYmKytkfSxjKTtyZXR1cm4gZH07XG5nb29nLmFycmF5LmZpbmQ9ZnVuY3Rpb24oYSxiLGMpe2I9Z29vZy5hcnJheS5maW5kSW5kZXgoYSxiLGMpO3JldHVybiAwPmI/bnVsbDpnb29nLmlzU3RyaW5nKGEpP2EuY2hhckF0KGIpOmFbYl19O2dvb2cuYXJyYXkuZmluZEluZGV4PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YSxmPTA7ZjxkO2YrKylpZihmIGluIGUmJmIuY2FsbChjLGVbZl0sZixhKSlyZXR1cm4gZjtyZXR1cm4tMX07Z29vZy5hcnJheS5maW5kUmlnaHQ9ZnVuY3Rpb24oYSxiLGMpe2I9Z29vZy5hcnJheS5maW5kSW5kZXhSaWdodChhLGIsYyk7cmV0dXJuIDA+Yj9udWxsOmdvb2cuaXNTdHJpbmcoYSk/YS5jaGFyQXQoYik6YVtiXX07XG5nb29nLmFycmF5LmZpbmRJbmRleFJpZ2h0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmxlbmd0aCxlPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphO2ZvcigtLWQ7MDw9ZDtkLS0paWYoZCBpbiBlJiZiLmNhbGwoYyxlW2RdLGQsYSkpcmV0dXJuIGQ7cmV0dXJuLTF9O2dvb2cuYXJyYXkuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMDw9Z29vZy5hcnJheS5pbmRleE9mKGEsYil9O2dvb2cuYXJyYXkuaXNFbXB0eT1mdW5jdGlvbihhKXtyZXR1cm4gMD09YS5sZW5ndGh9O2dvb2cuYXJyYXkuY2xlYXI9ZnVuY3Rpb24oYSl7aWYoIWdvb2cuaXNBcnJheShhKSlmb3IodmFyIGI9YS5sZW5ndGgtMTswPD1iO2ItLSlkZWxldGUgYVtiXTthLmxlbmd0aD0wfTtnb29nLmFycmF5Lmluc2VydD1mdW5jdGlvbihhLGIpe2dvb2cuYXJyYXkuY29udGFpbnMoYSxiKXx8YS5wdXNoKGIpfTtcbmdvb2cuYXJyYXkuaW5zZXJ0QXQ9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXJyYXkuc3BsaWNlKGEsYywwLGIpfTtnb29nLmFycmF5Lmluc2VydEFycmF5QXQ9ZnVuY3Rpb24oYSxiLGMpe2dvb2cucGFydGlhbChnb29nLmFycmF5LnNwbGljZSxhLGMsMCkuYXBwbHkobnVsbCxiKX07Z29vZy5hcnJheS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkOzI9PWFyZ3VtZW50cy5sZW5ndGh8fDA+KGQ9Z29vZy5hcnJheS5pbmRleE9mKGEsYykpP2EucHVzaChiKTpnb29nLmFycmF5Lmluc2VydEF0KGEsYixkKX07Z29vZy5hcnJheS5yZW1vdmU9ZnVuY3Rpb24oYSxiKXtiPWdvb2cuYXJyYXkuaW5kZXhPZihhLGIpO3ZhciBjOyhjPTA8PWIpJiZnb29nLmFycmF5LnJlbW92ZUF0KGEsYik7cmV0dXJuIGN9O1xuZ29vZy5hcnJheS5yZW1vdmVMYXN0PWZ1bmN0aW9uKGEsYil7Yj1nb29nLmFycmF5Lmxhc3RJbmRleE9mKGEsYik7cmV0dXJuIDA8PWI/KGdvb2cuYXJyYXkucmVtb3ZlQXQoYSxiKSwhMCk6ITF9O2dvb2cuYXJyYXkucmVtb3ZlQXQ9ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gMT09QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGEsYiwxKS5sZW5ndGh9O2dvb2cuYXJyYXkucmVtb3ZlSWY9ZnVuY3Rpb24oYSxiLGMpe2I9Z29vZy5hcnJheS5maW5kSW5kZXgoYSxiLGMpO3JldHVybiAwPD1iPyhnb29nLmFycmF5LnJlbW92ZUF0KGEsYiksITApOiExfTtnb29nLmFycmF5LnJlbW92ZUFsbElmPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wO2dvb2cuYXJyYXkuZm9yRWFjaFJpZ2h0KGEsZnVuY3Rpb24oZSxmKXtiLmNhbGwoYyxlLGYsYSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoYSxmKSYmZCsrfSk7cmV0dXJuIGR9O1xuZ29vZy5hcnJheS5jb25jYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sYXJndW1lbnRzKX07Z29vZy5hcnJheS5qb2luPWZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9O2dvb2cuYXJyYXkudG9BcnJheT1mdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtpZigwPGIpe2Zvcih2YXIgYz1BcnJheShiKSxkPTA7ZDxiO2QrKyljW2RdPWFbZF07cmV0dXJuIGN9cmV0dXJuW119O2dvb2cuYXJyYXkuY2xvbmU9Z29vZy5hcnJheS50b0FycmF5O2dvb2cuYXJyYXkuZXh0ZW5kPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGdvb2cuaXNBcnJheUxpa2UoZCkpe3ZhciBlPWEubGVuZ3RofHwwLGY9ZC5sZW5ndGh8fDA7YS5sZW5ndGg9ZStmO2Zvcih2YXIgZz0wO2c8ZjtnKyspYVtlK2ddPWRbZ119ZWxzZSBhLnB1c2goZCl9fTtcbmdvb2cuYXJyYXkuc3BsaWNlPWZ1bmN0aW9uKGEsYixjLGQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO3JldHVybiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGEsZ29vZy5hcnJheS5zbGljZShhcmd1bWVudHMsMSkpfTtnb29nLmFycmF5LnNsaWNlPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gMj49YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLGIpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsYixjKX07XG5nb29nLmFycmF5LnJlbW92ZUR1cGxpY2F0ZXM9ZnVuY3Rpb24oYSxiLGMpe2I9Ynx8YTt2YXIgZD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5pc09iamVjdChhKT9cIm9cIitnb29nLmdldFVpZChhKToodHlwZW9mIGEpLmNoYXJBdCgwKSthfTtjPWN8fGQ7ZD17fTtmb3IodmFyIGU9MCxmPTA7ZjxhLmxlbmd0aDspe3ZhciBnPWFbZisrXSxoPWMoZyk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsaCl8fChkW2hdPSEwLGJbZSsrXT1nKX1iLmxlbmd0aD1lfTtnb29nLmFycmF5LmJpbmFyeVNlYXJjaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXyhhLGN8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUsITEsYil9O2dvb2cuYXJyYXkuYmluYXJ5U2VsZWN0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfKGEsYiwhMCx2b2lkIDAsYyl9O1xuZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfPWZ1bmN0aW9uKGEsYixjLGQsZSl7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aCxoO2Y8Zzspe3ZhciBrPWYrZz4+MTt2YXIgbD1jP2IuY2FsbChlLGFba10sayxhKTpiKGQsYVtrXSk7MDxsP2Y9aysxOihnPWssaD0hbCl9cmV0dXJuIGg/Zjp+Zn07Z29vZy5hcnJheS5zb3J0PWZ1bmN0aW9uKGEsYil7YS5zb3J0KGJ8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUpfTtnb29nLmFycmF5LnN0YWJsZVNvcnQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9QXJyYXkoYS5sZW5ndGgpLGQ9MDtkPGEubGVuZ3RoO2QrKyljW2RdPXtpbmRleDpkLHZhbHVlOmFbZF19O3ZhciBlPWJ8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Z29vZy5hcnJheS5zb3J0KGMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gZShhLnZhbHVlLGIudmFsdWUpfHxhLmluZGV4LWIuaW5kZXh9KTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF09Y1tkXS52YWx1ZX07XG5nb29nLmFycmF5LnNvcnRCeUtleT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Y3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtnb29nLmFycmF5LnNvcnQoYSxmdW5jdGlvbihhLGMpe3JldHVybiBkKGIoYSksYihjKSl9KX07Z29vZy5hcnJheS5zb3J0T2JqZWN0c0J5S2V5PWZ1bmN0aW9uKGEsYixjKXtnb29nLmFycmF5LnNvcnRCeUtleShhLGZ1bmN0aW9uKGEpe3JldHVybiBhW2JdfSxjKX07Z29vZy5hcnJheS5pc1NvcnRlZD1mdW5jdGlvbihhLGIsYyl7Yj1ifHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2Zvcih2YXIgZD0xO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1iKGFbZC0xXSxhW2RdKTtpZigwPGV8fDA9PWUmJmMpcmV0dXJuITF9cmV0dXJuITB9O1xuZ29vZy5hcnJheS5lcXVhbHM9ZnVuY3Rpb24oYSxiLGMpe2lmKCFnb29nLmlzQXJyYXlMaWtlKGEpfHwhZ29vZy5pc0FycmF5TGlrZShiKXx8YS5sZW5ndGghPWIubGVuZ3RoKXJldHVybiExO3ZhciBkPWEubGVuZ3RoO2M9Y3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZUVxdWFsaXR5O2Zvcih2YXIgZT0wO2U8ZDtlKyspaWYoIWMoYVtlXSxiW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH07Z29vZy5hcnJheS5jb21wYXJlMz1mdW5jdGlvbihhLGIsYyl7Yz1jfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2Zvcih2YXIgZD1NYXRoLm1pbihhLmxlbmd0aCxiLmxlbmd0aCksZT0wO2U8ZDtlKyspe3ZhciBmPWMoYVtlXSxiW2VdKTtpZigwIT1mKXJldHVybiBmfXJldHVybiBnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlKGEubGVuZ3RoLGIubGVuZ3RoKX07Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBhPmI/MTphPGI/LTE6MH07XG5nb29nLmFycmF5LmludmVyc2VEZWZhdWx0Q29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybi1nb29nLmFycmF5LmRlZmF1bHRDb21wYXJlKGEsYil9O2dvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eT1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yn07Z29vZy5hcnJheS5iaW5hcnlJbnNlcnQ9ZnVuY3Rpb24oYSxiLGMpe2M9Z29vZy5hcnJheS5iaW5hcnlTZWFyY2goYSxiLGMpO3JldHVybiAwPmM/KGdvb2cuYXJyYXkuaW5zZXJ0QXQoYSxiLC0oYysxKSksITApOiExfTtnb29nLmFycmF5LmJpbmFyeVJlbW92ZT1mdW5jdGlvbihhLGIsYyl7Yj1nb29nLmFycmF5LmJpbmFyeVNlYXJjaChhLGIsYyk7cmV0dXJuIDA8PWI/Z29vZy5hcnJheS5yZW1vdmVBdChhLGIpOiExfTtcbmdvb2cuYXJyYXkuYnVja2V0PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdLGc9Yi5jYWxsKGMsZixlLGEpO2dvb2cuaXNEZWYoZykmJihkW2ddfHwoZFtnXT1bXSkpLnB1c2goZil9cmV0dXJuIGR9O2dvb2cuYXJyYXkudG9PYmplY3Q9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2dvb2cuYXJyYXkuZm9yRWFjaChhLGZ1bmN0aW9uKGUsZil7ZFtiLmNhbGwoYyxlLGYsYSldPWV9KTtyZXR1cm4gZH07Z29vZy5hcnJheS5yYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT0wLGY9YTtjPWN8fDE7dm9pZCAwIT09YiYmKGU9YSxmPWIpO2lmKDA+YyooZi1lKSlyZXR1cm5bXTtpZigwPGMpZm9yKGE9ZTthPGY7YSs9YylkLnB1c2goYSk7ZWxzZSBmb3IoYT1lO2E+ZjthKz1jKWQucHVzaChhKTtyZXR1cm4gZH07XG5nb29nLmFycmF5LnJlcGVhdD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxiO2QrKyljW2RdPWE7cmV0dXJuIGN9O2dvb2cuYXJyYXkuZmxhdHRlbj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPWFyZ3VtZW50c1tjXTtpZihnb29nLmlzQXJyYXkoZCkpZm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKz04MTkyKXt2YXIgZj1nb29nLmFycmF5LnNsaWNlKGQsZSxlKzgxOTIpO2Y9Z29vZy5hcnJheS5mbGF0dGVuLmFwcGx5KG51bGwsZik7Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspYi5wdXNoKGZbZ10pfWVsc2UgYi5wdXNoKGQpfXJldHVybiBifTtcbmdvb2cuYXJyYXkucm90YXRlPWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7YS5sZW5ndGgmJihiJT1hLmxlbmd0aCwwPGI/QXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxhLnNwbGljZSgtYixiKSk6MD5iJiZBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhLGEuc3BsaWNlKDAsLWIpKSk7cmV0dXJuIGF9O2dvb2cuYXJyYXkubW92ZUl0ZW09ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YiYmYjxhLmxlbmd0aCk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1jJiZjPGEubGVuZ3RoKTtiPUFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChhLGIsMSk7QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGEsYywwLGJbMF0pfTtcbmdvb2cuYXJyYXkuemlwPWZ1bmN0aW9uKGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgYj1bXSxjPWFyZ3VtZW50c1swXS5sZW5ndGgsZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspYXJndW1lbnRzW2RdLmxlbmd0aDxjJiYoYz1hcmd1bWVudHNbZF0ubGVuZ3RoKTtmb3IoZD0wO2Q8YztkKyspe2Zvcih2YXIgZT1bXSxmPTA7Zjxhcmd1bWVudHMubGVuZ3RoO2YrKyllLnB1c2goYXJndW1lbnRzW2ZdW2RdKTtiLnB1c2goZSl9cmV0dXJuIGJ9O2dvb2cuYXJyYXkuc2h1ZmZsZT1mdW5jdGlvbihhLGIpe2I9Ynx8TWF0aC5yYW5kb207Zm9yKHZhciBjPWEubGVuZ3RoLTE7MDxjO2MtLSl7dmFyIGQ9TWF0aC5mbG9vcihiKCkqKGMrMSkpLGU9YVtjXTthW2NdPWFbZF07YVtkXT1lfX07Z29vZy5hcnJheS5jb3B5QnlJbmRleD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2dvb2cuYXJyYXkuZm9yRWFjaChiLGZ1bmN0aW9uKGIpe2MucHVzaChhW2JdKX0pO3JldHVybiBjfTtcbmdvb2cuYXJyYXkuY29uY2F0TWFwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZ29vZy5hcnJheS5jb25jYXQuYXBwbHkoW10sZ29vZy5hcnJheS5tYXAoYSxiLGMpKX07Z29vZy5jcnlwdD17fTtnb29nLmNyeXB0LnN0cmluZ1RvQnl0ZUFycmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJDb2RlQXQoZCk7MjU1PGUmJihiW2MrK109ZSYyNTUsZT4+PTgpO2JbYysrXT1lfXJldHVybiBifTtnb29nLmNyeXB0LmJ5dGVBcnJheVRvU3RyaW5nPWZ1bmN0aW9uKGEpe2lmKDgxOTI+PWEubGVuZ3RoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYSk7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7Yys9ODE5Mil7dmFyIGQ9Z29vZy5hcnJheS5zbGljZShhLGMsYys4MTkyKTtiKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9cmV0dXJuIGJ9O1xuZ29vZy5jcnlwdC5ieXRlQXJyYXlUb0hleD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmFycmF5Lm1hcChhLGZ1bmN0aW9uKGEpe2E9YS50b1N0cmluZygxNik7cmV0dXJuIDE8YS5sZW5ndGg/YTpcIjBcIithfSkuam9pbihifHxcIlwiKX07Z29vZy5jcnlwdC5oZXhUb0J5dGVBcnJheT1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA9PWEubGVuZ3RoJTIsXCJLZXkgc3RyaW5nIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIik7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTIpYi5wdXNoKHBhcnNlSW50KGEuc3Vic3RyaW5nKGMsYysyKSwxNikpO3JldHVybiBifTtcbmdvb2cuY3J5cHQuc3RyaW5nVG9VdGY4Qnl0ZUFycmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJDb2RlQXQoZCk7MTI4PmU/YltjKytdPWU6KDIwNDg+ZT9iW2MrK109ZT4+NnwxOTI6KDU1Mjk2PT0oZSY2NDUxMikmJmQrMTxhLmxlbmd0aCYmNTYzMjA9PShhLmNoYXJDb2RlQXQoZCsxKSY2NDUxMik/KGU9NjU1MzYrKChlJjEwMjMpPDwxMCkrKGEuY2hhckNvZGVBdCgrK2QpJjEwMjMpLGJbYysrXT1lPj4xOHwyNDAsYltjKytdPWU+PjEyJjYzfDEyOCk6YltjKytdPWU+PjEyfDIyNCxiW2MrK109ZT4+NiY2M3wxMjgpLGJbYysrXT1lJjYzfDEyOCl9cmV0dXJuIGJ9O1xuZ29vZy5jcnlwdC51dGY4Qnl0ZUFycmF5VG9TdHJpbmc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPTA7YzxhLmxlbmd0aDspe3ZhciBlPWFbYysrXTtpZigxMjg+ZSliW2QrK109U3RyaW5nLmZyb21DaGFyQ29kZShlKTtlbHNlIGlmKDE5MTxlJiYyMjQ+ZSl7dmFyIGY9YVtjKytdO2JbZCsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChlJjMxKTw8NnxmJjYzKX1lbHNlIGlmKDIzOTxlJiYzNjU+ZSl7Zj1hW2MrK107dmFyIGc9YVtjKytdLGg9YVtjKytdO2U9KChlJjcpPDwxOHwoZiY2Myk8PDEyfChnJjYzKTw8NnxoJjYzKS02NTUzNjtiW2QrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZT4+MTApKTtiW2QrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoZSYxMDIzKSl9ZWxzZSBmPWFbYysrXSxnPWFbYysrXSxiW2QrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoZSYxNSk8PDEyfChmJjYzKTw8NnxnJjYzKX1yZXR1cm4gYi5qb2luKFwiXCIpfTtcbmdvb2cuY3J5cHQueG9yQnl0ZUFycmF5PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydChhLmxlbmd0aD09Yi5sZW5ndGgsXCJYT1IgYXJyYXkgbGVuZ3RocyBtdXN0IG1hdGNoXCIpO2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspYy5wdXNoKGFbZF1eYltkXSk7cmV0dXJuIGN9O2dvb2cuZG9tLmFzc2VydHM9e307Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uPWZ1bmN0aW9uKGEpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIGI9Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGEpO2ImJighYXx8IShhIGluc3RhbmNlb2YgYi5Mb2NhdGlvbikmJmEgaW5zdGFuY2VvZiBiLkVsZW1lbnQpJiZnb29nLmFzc2VydHMuZmFpbChcIkFyZ3VtZW50IGlzIG5vdCBhIExvY2F0aW9uIChvciBhIG5vbi1FbGVtZW50IG1vY2spOyBnb3Q6ICVzXCIsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGEpKX1yZXR1cm4gYX07XG5nb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfPWZ1bmN0aW9uKGEsYil7aWYoZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTKXt2YXIgYz1nb29nLmRvbS5hc3NlcnRzLmdldFdpbmRvd18oYSk7YyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNbYl0mJihhJiYoYSBpbnN0YW5jZW9mIGNbYl18fCEoYSBpbnN0YW5jZW9mIGMuTG9jYXRpb258fGEgaW5zdGFuY2VvZiBjLkVsZW1lbnQpKXx8Z29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSAlcyAob3IgYSBub24tRWxlbWVudCwgbm9uLUxvY2F0aW9uIG1vY2spOyBnb3Q6ICVzXCIsYixnb29nLmRvbS5hc3NlcnRzLmRlYnVnU3RyaW5nRm9yVHlwZV8oYSkpKX1yZXR1cm4gYX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBbmNob3JFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MQW5jaG9yRWxlbWVudFwiKX07XG5nb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEJ1dHRvbkVsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxCdXR0b25FbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTExpbmtFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MTGlua0VsZW1lbnRcIil9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW1hZ2VFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MSW1hZ2VFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEF1ZGlvRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEF1ZGlvRWxlbWVudFwiKX07XG5nb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFZpZGVvRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTFZpZGVvRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbnB1dEVsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxJbnB1dEVsZW1lbnRcIil9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVGV4dEFyZWFFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MVGV4dEFyZWFFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxDYW52YXNFbGVtZW50XCIpfTtcbmdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MRW1iZWRFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZvcm1FbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MRm9ybUVsZW1lbnRcIil9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MRnJhbWVFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxJRnJhbWVFbGVtZW50XCIpfTtcbmdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MT2JqZWN0RWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTE9iamVjdEVsZW1lbnRcIil9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTFNjcmlwdEVsZW1lbnRcIil9O1xuZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfPWZ1bmN0aW9uKGEpe2lmKGdvb2cuaXNPYmplY3QoYSkpdHJ5e3JldHVybiBhLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxhLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX1jYXRjaChiKXtyZXR1cm5cIjxvYmplY3QgY291bGQgbm90IGJlIHN0cmluZ2lmaWVkPlwifWVsc2UgcmV0dXJuIHZvaWQgMD09PWE/XCJ1bmRlZmluZWRcIjpudWxsPT09YT9cIm51bGxcIjp0eXBlb2YgYX07Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfPWZ1bmN0aW9uKGEpe3RyeXt2YXIgYj1hJiZhLm93bmVyRG9jdW1lbnQsYz1iJiYoYi5kZWZhdWx0Vmlld3x8Yi5wYXJlbnRXaW5kb3cpO2M9Y3x8Z29vZy5nbG9iYWw7aWYoYy5FbGVtZW50JiZjLkxvY2F0aW9uKXJldHVybiBjfWNhdGNoKGQpe31yZXR1cm4gbnVsbH07Z29vZy5mdW5jdGlvbnM9e307Z29vZy5mdW5jdGlvbnMuY29uc3RhbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGF9fTtnb29nLmZ1bmN0aW9ucy5GQUxTRT1mdW5jdGlvbigpe3JldHVybiExfTtnb29nLmZ1bmN0aW9ucy5UUlVFPWZ1bmN0aW9uKCl7cmV0dXJuITB9O2dvb2cuZnVuY3Rpb25zLk5VTEw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07Z29vZy5mdW5jdGlvbnMuaWRlbnRpdHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYX07Z29vZy5mdW5jdGlvbnMuZXJyb3I9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoYSk7fX07Z29vZy5mdW5jdGlvbnMuZmFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBhO319O1xuZ29vZy5mdW5jdGlvbnMubG9jaz1mdW5jdGlvbihhLGIpe2I9Ynx8MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwLGIpKX19O2dvb2cuZnVuY3Rpb25zLm50aD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzW2FdfX07Z29vZy5mdW5jdGlvbnMucGFydGlhbFJpZ2h0PWZ1bmN0aW9uKGEsYil7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Yi5wdXNoLmFwcGx5KGIsYyk7cmV0dXJuIGEuYXBwbHkodGhpcyxiKX19O2dvb2cuZnVuY3Rpb25zLndpdGhSZXR1cm5WYWx1ZT1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmZ1bmN0aW9ucy5zZXF1ZW5jZShhLGdvb2cuZnVuY3Rpb25zLmNvbnN0YW50KGIpKX07XG5nb29nLmZ1bmN0aW9ucy5lcXVhbFRvPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBiP2E9PWM6YT09PWN9fTtnb29nLmZ1bmN0aW9ucy5jb21wb3NlPWZ1bmN0aW9uKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE7ZCYmKGE9Y1tkLTFdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7Zm9yKHZhciBiPWQtMjswPD1iO2ItLSlhPWNbYl0uY2FsbCh0aGlzLGEpO3JldHVybiBhfX07Z29vZy5mdW5jdGlvbnMuc2VxdWVuY2U9ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9Yi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhLGU9MDtlPGM7ZSsrKWE9YltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGF9fTtcbmdvb2cuZnVuY3Rpb25zLmFuZD1mdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMsYz1iLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPGM7YSsrKWlmKCFiW2FdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm4hMTtyZXR1cm4hMH19O2dvb2cuZnVuY3Rpb25zLm9yPWZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWIubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8YzthKyspaWYoYlthXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITA7cmV0dXJuITF9fTtnb29nLmZ1bmN0aW9ucy5ub3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07XG5nb29nLmZ1bmN0aW9ucy5jcmVhdGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe307Yy5wcm90b3R5cGU9YS5wcm90b3R5cGU7Yz1uZXcgYzthLmFwcGx5KGMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTtyZXR1cm4gY307Z29vZy5mdW5jdGlvbnMuQ0FDSEVfUkVUVVJOX1ZBTFVFPSEwO2dvb2cuZnVuY3Rpb25zLmNhY2hlUmV0dXJuVmFsdWU9ZnVuY3Rpb24oYSl7dmFyIGI9ITEsYztyZXR1cm4gZnVuY3Rpb24oKXtpZighZ29vZy5mdW5jdGlvbnMuQ0FDSEVfUkVUVVJOX1ZBTFVFKXJldHVybiBhKCk7Ynx8KGM9YSgpLGI9ITApO3JldHVybiBjfX07Z29vZy5mdW5jdGlvbnMub25jZT1mdW5jdGlvbihhKXt2YXIgYj1hO3JldHVybiBmdW5jdGlvbigpe2lmKGIpe3ZhciBhPWI7Yj1udWxsO2EoKX19fTtcbmdvb2cuZnVuY3Rpb25zLmRlYm91bmNlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wO3JldHVybiBmdW5jdGlvbihlKXtnb29nLmdsb2JhbC5jbGVhclRpbWVvdXQoZCk7dmFyIGY9YXJndW1lbnRzO2Q9Z29vZy5nbG9iYWwuc2V0VGltZW91dChmdW5jdGlvbigpe2EuYXBwbHkoYyxmKX0sYil9fTtnb29nLmZ1bmN0aW9ucy50aHJvdHRsZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPSExLGY9W10sZz1mdW5jdGlvbigpe2Q9MDtlJiYoZT0hMSxoKCkpfSxoPWZ1bmN0aW9uKCl7ZD1nb29nLmdsb2JhbC5zZXRUaW1lb3V0KGcsYik7YS5hcHBseShjLGYpfTtyZXR1cm4gZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHM7ZD9lPSEwOmgoKX19O2dvb2cuZnVuY3Rpb25zLnJhdGVMaW1pdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPWZ1bmN0aW9uKCl7ZD0wfTtyZXR1cm4gZnVuY3Rpb24oZil7ZHx8KGQ9Z29vZy5nbG9iYWwuc2V0VGltZW91dChlLGIpLGEuYXBwbHkoYyxhcmd1bWVudHMpKX19O2dvb2cuZG9tLkh0bWxFbGVtZW50PWZ1bmN0aW9uKCl7fTtnb29nLmRvbS5UYWdOYW1lPWZ1bmN0aW9uKGEpe3RoaXMudGFnTmFtZV89YX07Z29vZy5kb20uVGFnTmFtZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdOYW1lX307Z29vZy5kb20uVGFnTmFtZS5BPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVwiKTtnb29nLmRvbS5UYWdOYW1lLkFCQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBQkJSXCIpO2dvb2cuZG9tLlRhZ05hbWUuQUNST05ZTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFDUk9OWU1cIik7Z29vZy5kb20uVGFnTmFtZS5BRERSRVNTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUREUkVTU1wiKTtnb29nLmRvbS5UYWdOYW1lLkFQUExFVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFQUExFVFwiKTtnb29nLmRvbS5UYWdOYW1lLkFSRUE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUkVBXCIpO2dvb2cuZG9tLlRhZ05hbWUuQVJUSUNMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFSVElDTEVcIik7XG5nb29nLmRvbS5UYWdOYW1lLkFTSURFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVNJREVcIik7Z29vZy5kb20uVGFnTmFtZS5BVURJTz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFVRElPXCIpO2dvb2cuZG9tLlRhZ05hbWUuQj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJcIik7Z29vZy5kb20uVGFnTmFtZS5CQVNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRVwiKTtnb29nLmRvbS5UYWdOYW1lLkJBU0VGT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRUZPTlRcIik7Z29vZy5kb20uVGFnTmFtZS5CREk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRElcIik7Z29vZy5kb20uVGFnTmFtZS5CRE89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRE9cIik7Z29vZy5kb20uVGFnTmFtZS5CSUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCSUdcIik7Z29vZy5kb20uVGFnTmFtZS5CTE9DS1FVT1RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkxPQ0tRVU9URVwiKTtnb29nLmRvbS5UYWdOYW1lLkJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCT0RZXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5CUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJSXCIpO2dvb2cuZG9tLlRhZ05hbWUuQlVUVE9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQlVUVE9OXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ0FOVkFTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0FOVkFTXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBUFRJT05cIik7Z29vZy5kb20uVGFnTmFtZS5DRU5URVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDRU5URVJcIik7Z29vZy5kb20uVGFnTmFtZS5DSVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0lURVwiKTtnb29nLmRvbS5UYWdOYW1lLkNPREU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0RFXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ09MPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ09MR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0xHUk9VUFwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuQ09NTUFORD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNPTU1BTkRcIik7Z29vZy5kb20uVGFnTmFtZS5EQVRBPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREFUQVwiKTtnb29nLmRvbS5UYWdOYW1lLkRBVEFMSVNUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREFUQUxJU1RcIik7Z29vZy5kb20uVGFnTmFtZS5ERD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkREXCIpO2dvb2cuZG9tLlRhZ05hbWUuREVMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREVMXCIpO2dvb2cuZG9tLlRhZ05hbWUuREVUQUlMUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRFVEFJTFNcIik7Z29vZy5kb20uVGFnTmFtZS5ERk49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERk5cIik7Z29vZy5kb20uVGFnTmFtZS5ESUFMT0c9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJESUFMT0dcIik7Z29vZy5kb20uVGFnTmFtZS5ESVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJESVJcIik7Z29vZy5kb20uVGFnTmFtZS5ESVY9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJESVZcIik7XG5nb29nLmRvbS5UYWdOYW1lLkRMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRExcIik7Z29vZy5kb20uVGFnTmFtZS5EVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRUXCIpO2dvb2cuZG9tLlRhZ05hbWUuRU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJFTVwiKTtnb29nLmRvbS5UYWdOYW1lLkVNQkVEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRU1CRURcIik7Z29vZy5kb20uVGFnTmFtZS5GSUVMRFNFVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJRUxEU0VUXCIpO2dvb2cuZG9tLlRhZ05hbWUuRklHQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJR0NBUFRJT05cIik7Z29vZy5kb20uVGFnTmFtZS5GSUdVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGSUdVUkVcIik7Z29vZy5kb20uVGFnTmFtZS5GT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9OVFwiKTtnb29nLmRvbS5UYWdOYW1lLkZPT1RFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPT1RFUlwiKTtnb29nLmRvbS5UYWdOYW1lLkZPUk09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT1JNXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5GUkFNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZSQU1FXCIpO2dvb2cuZG9tLlRhZ05hbWUuRlJBTUVTRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVNFVFwiKTtnb29nLmRvbS5UYWdOYW1lLkgxPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDFcIik7Z29vZy5kb20uVGFnTmFtZS5IMj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgyXCIpO2dvb2cuZG9tLlRhZ05hbWUuSDM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIM1wiKTtnb29nLmRvbS5UYWdOYW1lLkg0PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDRcIik7Z29vZy5kb20uVGFnTmFtZS5INT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg1XCIpO2dvb2cuZG9tLlRhZ05hbWUuSDY9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINlwiKTtnb29nLmRvbS5UYWdOYW1lLkhFQUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIRUFEXCIpO2dvb2cuZG9tLlRhZ05hbWUuSEVBREVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBREVSXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5IR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIR1JPVVBcIik7Z29vZy5kb20uVGFnTmFtZS5IUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhSXCIpO2dvb2cuZG9tLlRhZ05hbWUuSFRNTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhUTUxcIik7Z29vZy5kb20uVGFnTmFtZS5JPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSVwiKTtnb29nLmRvbS5UYWdOYW1lLklGUkFNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklGUkFNRVwiKTtnb29nLmRvbS5UYWdOYW1lLklNRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklNR1wiKTtnb29nLmRvbS5UYWdOYW1lLklOUFVUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU5QVVRcIik7Z29vZy5kb20uVGFnTmFtZS5JTlM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTlNcIik7Z29vZy5kb20uVGFnTmFtZS5JU0lOREVYPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSVNJTkRFWFwiKTtnb29nLmRvbS5UYWdOYW1lLktCRD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIktCRFwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuS0VZR0VOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiS0VZR0VOXCIpO2dvb2cuZG9tLlRhZ05hbWUuTEFCRUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMQUJFTFwiKTtnb29nLmRvbS5UYWdOYW1lLkxFR0VORD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxFR0VORFwiKTtnb29nLmRvbS5UYWdOYW1lLkxJPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElcIik7Z29vZy5kb20uVGFnTmFtZS5MSU5LPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElOS1wiKTtnb29nLmRvbS5UYWdOYW1lLk1BSU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQUlOXCIpO2dvb2cuZG9tLlRhZ05hbWUuTUFQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFQXCIpO2dvb2cuZG9tLlRhZ05hbWUuTUFSSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BUktcIik7Z29vZy5kb20uVGFnTmFtZS5NQVRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFUSFwiKTtnb29nLmRvbS5UYWdOYW1lLk1FTlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5NRU5VSVRFTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FTlVJVEVNXCIpO2dvb2cuZG9tLlRhZ05hbWUuTUVUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEFcIik7Z29vZy5kb20uVGFnTmFtZS5NRVRFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEVSXCIpO2dvb2cuZG9tLlRhZ05hbWUuTkFWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTkFWXCIpO2dvb2cuZG9tLlRhZ05hbWUuTk9GUkFNRVM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJOT0ZSQU1FU1wiKTtnb29nLmRvbS5UYWdOYW1lLk5PU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9TQ1JJUFRcIik7Z29vZy5kb20uVGFnTmFtZS5PQkpFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPQkpFQ1RcIik7Z29vZy5kb20uVGFnTmFtZS5PTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9MXCIpO2dvb2cuZG9tLlRhZ05hbWUuT1BUR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPUFRHUk9VUFwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuT1BUSU9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT1BUSU9OXCIpO2dvb2cuZG9tLlRhZ05hbWUuT1VUUFVUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT1VUUFVUXCIpO2dvb2cuZG9tLlRhZ05hbWUuUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBcIik7Z29vZy5kb20uVGFnTmFtZS5QQVJBTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBBUkFNXCIpO2dvb2cuZG9tLlRhZ05hbWUuUElDVFVSRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBJQ1RVUkVcIik7Z29vZy5kb20uVGFnTmFtZS5QUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQUkVcIik7Z29vZy5kb20uVGFnTmFtZS5QUk9HUkVTUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBST0dSRVNTXCIpO2dvb2cuZG9tLlRhZ05hbWUuUT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlFcIik7Z29vZy5kb20uVGFnTmFtZS5SUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJQXCIpO2dvb2cuZG9tLlRhZ05hbWUuUlQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSVFwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuUlRDPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRDXCIpO2dvb2cuZG9tLlRhZ05hbWUuUlVCWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJVQllcIik7Z29vZy5kb20uVGFnTmFtZS5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1wiKTtnb29nLmRvbS5UYWdOYW1lLlNBTVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTQU1QXCIpO2dvb2cuZG9tLlRhZ05hbWUuU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0NSSVBUXCIpO2dvb2cuZG9tLlRhZ05hbWUuU0VDVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNFQ1RJT05cIik7Z29vZy5kb20uVGFnTmFtZS5TRUxFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTRUxFQ1RcIik7Z29vZy5kb20uVGFnTmFtZS5TTUFMTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNNQUxMXCIpO2dvb2cuZG9tLlRhZ05hbWUuU09VUkNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU09VUkNFXCIpO2dvb2cuZG9tLlRhZ05hbWUuU1BBTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNQQU5cIik7XG5nb29nLmRvbS5UYWdOYW1lLlNUUklLRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUklLRVwiKTtnb29nLmRvbS5UYWdOYW1lLlNUUk9ORz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUk9OR1wiKTtnb29nLmRvbS5UYWdOYW1lLlNUWUxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1RZTEVcIik7Z29vZy5kb20uVGFnTmFtZS5TVUI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVUJcIik7Z29vZy5kb20uVGFnTmFtZS5TVU1NQVJZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VNTUFSWVwiKTtnb29nLmRvbS5UYWdOYW1lLlNVUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVUFwiKTtnb29nLmRvbS5UYWdOYW1lLlNWRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNWR1wiKTtnb29nLmRvbS5UYWdOYW1lLlRBQkxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEFCTEVcIik7Z29vZy5kb20uVGFnTmFtZS5UQk9EWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRCT0RZXCIpO2dvb2cuZG9tLlRhZ05hbWUuVEQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURFwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuVEVNUExBVEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURU1QTEFURVwiKTtnb29nLmRvbS5UYWdOYW1lLlRFWFRBUkVBPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEVYVEFSRUFcIik7Z29vZy5kb20uVGFnTmFtZS5URk9PVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRGT09UXCIpO2dvb2cuZG9tLlRhZ05hbWUuVEg9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSFwiKTtnb29nLmRvbS5UYWdOYW1lLlRIRUFEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEhFQURcIik7Z29vZy5kb20uVGFnTmFtZS5USU1FPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVElNRVwiKTtnb29nLmRvbS5UYWdOYW1lLlRJVExFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVElUTEVcIik7Z29vZy5kb20uVGFnTmFtZS5UUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRSXCIpO2dvb2cuZG9tLlRhZ05hbWUuVFJBQ0s9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUUkFDS1wiKTtnb29nLmRvbS5UYWdOYW1lLlRUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFRcIik7XG5nb29nLmRvbS5UYWdOYW1lLlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVXCIpO2dvb2cuZG9tLlRhZ05hbWUuVUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVTFwiKTtnb29nLmRvbS5UYWdOYW1lLlZBUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlZBUlwiKTtnb29nLmRvbS5UYWdOYW1lLlZJREVPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVklERU9cIik7Z29vZy5kb20uVGFnTmFtZS5XQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJXQlJcIik7Z29vZy5kb20udGFncz17fTtnb29nLmRvbS50YWdzLlZPSURfVEFHU189e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfTtnb29nLmRvbS50YWdzLmlzVm9pZFRhZz1mdW5jdGlvbihhKXtyZXR1cm4hMD09PWdvb2cuZG9tLnRhZ3MuVk9JRF9UQUdTX1thXX07Z29vZy5odG1sPXt9O2dvb2cuaHRtbC50cnVzdGVkdHlwZXM9e307Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNodG1sXCIpOm51bGw7Z29vZy5zdHJpbmc9e307Z29vZy5zdHJpbmcuVHlwZWRTdHJpbmc9ZnVuY3Rpb24oKXt9O2dvb2cuc3RyaW5nLkNvbnN0PWZ1bmN0aW9uKGEsYil7dGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfPWE9PT1nb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXyYmYnx8XCJcIjt0aGlzLlNUUklOR19DT05TVF9UWVBFX01BUktFUl9fR09PR19TVFJJTkdfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5zdHJpbmcuQ29uc3QuVFlQRV9NQVJLRVJffTtnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMDtnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV99O1xuZ29vZy5zdHJpbmcuQ29uc3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDb25zdHtcIit0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV8rXCJ9XCJ9O2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3QmJmEuY29uc3RydWN0b3I9PT1nb29nLnN0cmluZy5Db25zdCYmYS5TVFJJTkdfQ09OU1RfVFlQRV9NQVJLRVJfX0dPT0dfU1RSSU5HX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5zdHJpbmcuQ29uc3QuVFlQRV9NQVJLRVJfKXJldHVybiBhLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV87Z29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBDb25zdCwgZ290ICdcIithK1wiJ1wiKTtyZXR1cm5cInR5cGVfZXJyb3I6Q29uc3RcIn07XG5nb29nLnN0cmluZy5Db25zdC5mcm9tPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZ29vZy5zdHJpbmcuQ29uc3QoZ29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV8sYSl9O2dvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXz17fTtnb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXz17fTtnb29nLnN0cmluZy5Db25zdC5FTVBUWT1nb29nLnN0cmluZy5Db25zdC5mcm9tKFwiXCIpO2dvb2cuaHRtbC5TYWZlU2NyaXB0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1cIlwiO3RoaXMuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX307Z29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9O2dvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Db25zdGFudD1mdW5jdGlvbihhKXthPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTtyZXR1cm4gMD09PWEubGVuZ3RoP2dvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZOmdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVNjcmlwdC5mcm9tQ29uc3RhbnRBbmRBcmdzPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKWMucHVzaChnb29nLmh0bWwuU2FmZVNjcmlwdC5zdHJpbmdpZnlfKGFyZ3VtZW50c1tkXSkpO3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCIoXCIrZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpK1wiKShcIitjLmpvaW4oXCIsIFwiKStcIik7XCIpfTtnb29nLmh0bWwuU2FmZVNjcmlwdC5mcm9tSnNvbj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV8oYSkpfTtnb29nLmh0bWwuU2FmZVNjcmlwdC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O1xuZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVNjcmlwdHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfK1wifVwifSk7Z29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXBUcnVzdGVkU2NyaXB0KGEpLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTY3JpcHQmJmEuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVNjcmlwdCYmYS5TQUZFX1NDUklQVF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVNjcmlwdC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8pcmV0dXJuIGEucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV87Z29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlU2NyaXB0LCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpTYWZlU2NyaXB0XCJ9O1xuZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xz1mdW5jdGlvbihhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkucmVwbGFjZSgvPC9nLFwiXFxcXHgzY1wiKX07Z29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVTY3JpcHQpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSl9O1xuZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oYSl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVTY3JpcHQoYSk6YTtyZXR1cm4gdGhpc307Z29vZy5odG1sLlNhZmVTY3JpcHQuRU1QVFk9Z29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiXCIpO2dvb2cuZnM9e307Z29vZy5mcy51cmw9e307Z29vZy5mcy51cmwuY3JlYXRlT2JqZWN0VXJsPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmZzLnVybC5nZXRVcmxPYmplY3RfKCkuY3JlYXRlT2JqZWN0VVJMKGEpfTtnb29nLmZzLnVybC5yZXZva2VPYmplY3RVcmw9ZnVuY3Rpb24oYSl7Z29vZy5mcy51cmwuZ2V0VXJsT2JqZWN0XygpLnJldm9rZU9iamVjdFVSTChhKX07Z29vZy5mcy51cmwuZ2V0VXJsT2JqZWN0Xz1mdW5jdGlvbigpe3ZhciBhPWdvb2cuZnMudXJsLmZpbmRVcmxPYmplY3RfKCk7aWYobnVsbCE9YSlyZXR1cm4gYTt0aHJvdyBFcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCBibG9iIFVSTHNcIik7fTtcbmdvb2cuZnMudXJsLmZpbmRVcmxPYmplY3RfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuVVJMKSYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC5VUkwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbC5VUkw6Z29vZy5pc0RlZihnb29nLmdsb2JhbC53ZWJraXRVUkwpJiZnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsLndlYmtpdFVSTDpnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWw6bnVsbH07Z29vZy5mcy51cmwuYnJvd3NlclN1cHBvcnRzT2JqZWN0VXJscz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1nb29nLmZzLnVybC5maW5kVXJsT2JqZWN0XygpfTtnb29nLmkxOG49e307Z29vZy5pMThuLmJpZGk9e307Z29vZy5pMThuLmJpZGkuRk9SQ0VfUlRMPSExO1xuZ29vZy5pMThuLmJpZGkuSVNfUlRMPWdvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTHx8KFwiYXJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJmYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcImhlXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiaXdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJwc1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInNkXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwidWdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ1clwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInlpXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCkpJiYoMj09Z29vZy5MT0NBTEUubGVuZ3RofHxcblwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKXx8Mzw9Z29vZy5MT0NBTEUubGVuZ3RoJiZcImNrYlwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwzKS50b0xvd2VyQ2FzZSgpJiYoMz09Z29vZy5MT0NBTEUubGVuZ3RofHxcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSl8fDc8PWdvb2cuTE9DQUxFLmxlbmd0aCYmKFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKSYmKFwiYWRsbVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcImFyYWJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJoZWJyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwibmtvb1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyxcbjcpLnRvTG93ZXJDYXNlKCl8fFwicm9oZ1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcInRoYWFcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKSl8fDg8PWdvb2cuTE9DQUxFLmxlbmd0aCYmKFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpKSYmKFwiYWRsbVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcImFyYWJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJoZWJyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwibmtvb1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcInJvaGdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJ0aGFhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCkpO1xuZ29vZy5pMThuLmJpZGkuRm9ybWF0PXtMUkU6XCJcXHUyMDJhXCIsUkxFOlwiXFx1MjAyYlwiLFBERjpcIlxcdTIwMmNcIixMUk06XCJcXHUyMDBlXCIsUkxNOlwiXFx1MjAwZlwifTtnb29nLmkxOG4uYmlkaS5EaXI9e0xUUjoxLFJUTDotMSxORVVUUkFMOjB9O2dvb2cuaTE4bi5iaWRpLlJJR0hUPVwicmlnaHRcIjtnb29nLmkxOG4uYmlkaS5MRUZUPVwibGVmdFwiO2dvb2cuaTE4bi5iaWRpLkkxOE5fUklHSFQ9Z29vZy5pMThuLmJpZGkuSVNfUlRMP2dvb2cuaTE4bi5iaWRpLkxFRlQ6Z29vZy5pMThuLmJpZGkuUklHSFQ7Z29vZy5pMThuLmJpZGkuSTE4Tl9MRUZUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5SSUdIVDpnb29nLmkxOG4uYmlkaS5MRUZUO1xuZ29vZy5pMThuLmJpZGkudG9EaXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8wPGE/Z29vZy5pMThuLmJpZGkuRGlyLkxUUjowPmE/Z29vZy5pMThuLmJpZGkuRGlyLlJUTDpiP251bGw6Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6bnVsbD09YT9udWxsOmE/Z29vZy5pMThuLmJpZGkuRGlyLlJUTDpnb29nLmkxOG4uYmlkaS5EaXIuTFRSfTtnb29nLmkxOG4uYmlkaS5sdHJDaGFyc189XCJBLVphLXpcXHUwMGMwLVxcdTAwZDZcXHUwMGQ4LVxcdTAwZjZcXHUwMGY4LVxcdTAyYjhcXHUwMzAwLVxcdTA1OTBcXHUwOTAwLVxcdTFmZmZcXHUyMDBlXFx1MmMwMC1cXHVkODAxXFx1ZDgwNC1cXHVkODM5XFx1ZDgzYy1cXHVkYmZmXFx1ZjkwMC1cXHVmYjFjXFx1ZmUwMC1cXHVmZTZmXFx1ZmVmZC1cXHVmZmZmXCI7Z29vZy5pMThuLmJpZGkucnRsQ2hhcnNfPVwiXFx1MDU5MS1cXHUwNmVmXFx1MDZmYS1cXHUwOGZmXFx1MjAwZlxcdWQ4MDItXFx1ZDgwM1xcdWQ4M2EtXFx1ZDgzYlxcdWZiMWQtXFx1ZmRmZlxcdWZlNzAtXFx1ZmVmY1wiO1xuZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfPS88W14+XSo+fCZbXjtdKzsvZztnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9hLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfLFwiXCIpOmF9O2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKTtnb29nLmkxOG4uYmlkaS5sdHJDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIik7Z29vZy5pMThuLmJpZGkuaGFzQW55UnRsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGEsYikpfTtnb29nLmkxOG4uYmlkaS5oYXNSdGxDaGFyPWdvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bDtcbmdvb2cuaTE4bi5iaWRpLmhhc0FueUx0cj1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJDaGFyUmVnXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhhLGIpKX07Z29vZy5pMThuLmJpZGkubHRyUmVfPW5ldyBSZWdFeHAoXCJeW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIik7Z29vZy5pMThuLmJpZGkucnRsUmVfPW5ldyBSZWdFeHAoXCJeW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIik7Z29vZy5pMThuLmJpZGkuaXNSdGxDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxSZV8udGVzdChhKX07Z29vZy5pMThuLmJpZGkuaXNMdHJDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJSZV8udGVzdChhKX07Z29vZy5pMThuLmJpZGkuaXNOZXV0cmFsQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4hZ29vZy5pMThuLmJpZGkuaXNMdHJDaGFyKGEpJiYhZ29vZy5pMThuLmJpZGkuaXNSdGxDaGFyKGEpfTtcbmdvb2cuaTE4bi5iaWRpLmx0ckRpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpO2dvb2cuaTE4bi5iaWRpLnJ0bERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpO2dvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhSdGw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKSl9O2dvb2cuaTE4bi5iaWRpLmlzUnRsVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsO1xuZ29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aEx0cj1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJEaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhhLGIpKX07Z29vZy5pMThuLmJpZGkuaXNMdHJUZXh0PWdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHI7Z29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXz0vXmh0dHA6XFwvXFwvLiovO2dvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbFRleHQ9ZnVuY3Rpb24oYSxiKXthPWdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhhLGIpO3JldHVybiBnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3QoYSl8fCFnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIoYSkmJiFnb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoYSl9O1xuZ29vZy5pMThuLmJpZGkubHRyRXhpdERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXVteXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXSokXCIpO2dvb2cuaTE4bi5iaWRpLnJ0bEV4aXREaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1bXlwiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl0qJFwiKTtnb29nLmkxOG4uYmlkaS5lbmRzV2l0aEx0cj1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJFeGl0RGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKSl9O2dvb2cuaTE4bi5iaWRpLmlzTHRyRXhpdFRleHQ9Z29vZy5pMThuLmJpZGkuZW5kc1dpdGhMdHI7XG5nb29nLmkxOG4uYmlkaS5lbmRzV2l0aFJ0bD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKSl9O2dvb2cuaTE4bi5iaWRpLmlzUnRsRXhpdFRleHQ9Z29vZy5pMThuLmJpZGkuZW5kc1dpdGhSdGw7Z29vZy5pMThuLmJpZGkucnRsTG9jYWxlc1JlXz0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtnb29nLmkxOG4uYmlkaS5pc1J0bExhbmd1YWdlPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxMb2NhbGVzUmVfLnRlc3QoYSl9O2dvb2cuaTE4bi5iaWRpLmJyYWNrZXRHdWFyZFRleHRSZV89LyhcXCguKj9cXCkrKXwoXFxbLio/XFxdKyl8KFxcey4qP1xcfSspfCg8Lio/PispL2c7XG5nb29nLmkxOG4uYmlkaS5ndWFyZEJyYWNrZXRJblRleHQ9ZnVuY3Rpb24oYSxiKXtiPSh2b2lkIDA9PT1iP2dvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bChhKTpiKT9nb29nLmkxOG4uYmlkaS5Gb3JtYXQuUkxNOmdvb2cuaTE4bi5iaWRpLkZvcm1hdC5MUk07cmV0dXJuIGEucmVwbGFjZShnb29nLmkxOG4uYmlkaS5icmFja2V0R3VhcmRUZXh0UmVfLGIrXCIkJlwiK2IpfTtnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5IdG1sPWZ1bmN0aW9uKGEpe3JldHVyblwiPFwiPT1hLmNoYXJBdCgwKT9hLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1ydGxcIik6XCJcXG48c3BhbiBkaXI9cnRsPlwiK2ErXCI8L3NwYW4+XCJ9O2dvb2cuaTE4bi5iaWRpLmVuZm9yY2VSdGxJblRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5STEUrYStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfTtcbmdvb2cuaTE4bi5iaWRpLmVuZm9yY2VMdHJJbkh0bWw9ZnVuY3Rpb24oYSl7cmV0dXJuXCI8XCI9PWEuY2hhckF0KDApP2EucmVwbGFjZSgvPFxcdysvLFwiJCYgZGlyPWx0clwiKTpcIlxcbjxzcGFuIGRpcj1sdHI+XCIrYStcIjwvc3Bhbj5cIn07Z29vZy5pMThuLmJpZGkuZW5mb3JjZUx0ckluVGV4dD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkuRm9ybWF0LkxSRSthK2dvb2cuaTE4bi5iaWRpLkZvcm1hdC5QREZ9O2dvb2cuaTE4bi5iaWRpLmRpbWVuc2lvbnNSZV89LzpcXHMqKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopL2c7Z29vZy5pMThuLmJpZGkubGVmdFJlXz0vbGVmdC9naTtnb29nLmkxOG4uYmlkaS5yaWdodFJlXz0vcmlnaHQvZ2k7Z29vZy5pMThuLmJpZGkudGVtcFJlXz0vJSUlJS9nO1xuZ29vZy5pMThuLmJpZGkubWlycm9yQ1NTPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuZGltZW5zaW9uc1JlXyxcIjokMSAkNCAkMyAkMlwiKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmxlZnRSZV8sXCIlJSUlXCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkucmlnaHRSZV8sZ29vZy5pMThuLmJpZGkuTEVGVCkucmVwbGFjZShnb29nLmkxOG4uYmlkaS50ZW1wUmVfLGdvb2cuaTE4bi5iaWRpLlJJR0hUKX07Z29vZy5pMThuLmJpZGkuZG91YmxlUXVvdGVTdWJzdGl0dXRlUmVfPS8oW1xcdTA1OTEtXFx1MDVmMl0pXCIvZztnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV89LyhbXFx1MDU5MS1cXHUwNWYyXSknL2c7XG5nb29nLmkxOG4uYmlkaS5ub3JtYWxpemVIZWJyZXdRdW90ZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmRvdWJsZVF1b3RlU3Vic3RpdHV0ZVJlXyxcIiQxXFx1MDVmNFwiKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLnNpbmdsZVF1b3RlU3Vic3RpdHV0ZVJlXyxcIiQxXFx1MDVmM1wiKX07Z29vZy5pMThuLmJpZGkud29yZFNlcGFyYXRvclJlXz0vXFxzKy87Z29vZy5pMThuLmJpZGkuaGFzTnVtZXJhbHNSZV89L1tcXGRcXHUwNmYwLVxcdTA2ZjldLztnb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfPS40O1xuZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb249ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9MCxlPSExO2E9Z29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGEsYikuc3BsaXQoZ29vZy5pMThuLmJpZGkud29yZFNlcGFyYXRvclJlXyk7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGY9YVtiXTtnb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsKGYpPyhjKyssZCsrKTpnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3QoZik/ZT0hMDpnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIoZik/ZCsrOmdvb2cuaTE4bi5iaWRpLmhhc051bWVyYWxzUmVfLnRlc3QoZikmJihlPSEwKX1yZXR1cm4gMD09ZD9lP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6Yy9kPmdvb2cuaTE4bi5iaWRpLnJ0bERldGVjdGlvblRocmVzaG9sZF8/Z29vZy5pMThuLmJpZGkuRGlyLlJUTDpnb29nLmkxOG4uYmlkaS5EaXIuTFRSfTtcbmdvb2cuaTE4bi5iaWRpLmRldGVjdFJ0bERpcmVjdGlvbmFsaXR5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uKGEsYik9PWdvb2cuaTE4bi5iaWRpLkRpci5SVEx9O2dvb2cuaTE4bi5iaWRpLnNldEVsZW1lbnREaXJBbmRBbGlnbj1mdW5jdGlvbihhLGIpe2EmJihiPWdvb2cuaTE4bi5iaWRpLnRvRGlyKGIpKSYmKGEuc3R5bGUudGV4dEFsaWduPWI9PWdvb2cuaTE4bi5iaWRpLkRpci5SVEw/Z29vZy5pMThuLmJpZGkuUklHSFQ6Z29vZy5pMThuLmJpZGkuTEVGVCxhLmRpcj1iPT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMP1wicnRsXCI6XCJsdHJcIil9O1xuZ29vZy5pMThuLmJpZGkuc2V0RWxlbWVudERpckJ5VGV4dERpcmVjdGlvbmFsaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uKGIpKXtjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5MVFI6YS5kaXI9XCJsdHJcIjticmVhaztjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5SVEw6YS5kaXI9XCJydGxcIjticmVhaztkZWZhdWx0OmEucmVtb3ZlQXR0cmlidXRlKFwiZGlyXCIpfX07Z29vZy5pMThuLmJpZGkuRGlyZWN0aW9uYWxTdHJpbmc9ZnVuY3Rpb24oKXt9O2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89XCJcIjt0aGlzLnRydXN0ZWRVUkxfPW51bGw7dGhpcy5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99O2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX07XG5nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITA7Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuY2xvbmVXaXRoUGFyYW1zPWZ1bmN0aW9uKGEsYil7dmFyIGM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAodGhpcyk7Yz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlVSTF9QQVJBTV9QQVJTRVJfLmV4ZWMoYyk7dmFyIGQ9Y1szXXx8XCJcIjtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShjWzFdK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIj9cIixjWzJdfHxcIlwiLGEpK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIiNcIixkLGIpKX07XG5nb29nLkRFQlVHJiYoZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlRydXN0ZWRSZXNvdXJjZVVybHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKGEpLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsJiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmYS5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXylyZXR1cm4gYS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgVHJ1c3RlZFJlc291cmNlVXJsLCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpUcnVzdGVkUmVzb3VyY2VVcmxcIn07XG5nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJ1c3RlZFVSTF8/YS50cnVzdGVkVVJMXzpnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChhKX07XG5nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdD1mdW5jdGlvbihhLGIpe3ZhciBjPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTtpZighZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5CQVNFX1VSTF8udGVzdChjKSl0aHJvdyBFcnJvcihcIkludmFsaWQgVHJ1c3RlZFJlc291cmNlVXJsIGZvcm1hdDogXCIrYyk7YT1jLnJlcGxhY2UoZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5GT1JNQVRfTUFSS0VSXyxmdW5jdGlvbihhLGUpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixlKSl0aHJvdyBFcnJvcignRm91bmQgbWFya2VyLCBcIicrZSsnXCIsIGluIGZvcm1hdCBzdHJpbmcsIFwiJytjKydcIiwgYnV0IG5vIHZhbGlkIGxhYmVsIG1hcHBpbmcgZm91bmQgaW4gYXJnczogJytKU09OLnN0cmluZ2lmeShiKSk7YT1iW2VdO3JldHVybiBhIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpOlxuZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhhKSl9KTtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5GT1JNQVRfTUFSS0VSXz0vJXsoXFx3Kyl9L2c7Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5CQVNFX1VSTF89L14oKGh0dHBzOik/XFwvXFwvWzAtOWEtei46W1xcXS1dK1xcL3xcXC9bXi9cXFxcXXxbXjovXFxcXCVdK1xcL3xbXjovXFxcXCVdKls/I118YWJvdXQ6YmxhbmsjKS9pO2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVVJMX1BBUkFNX1BBUlNFUl89L14oW14/I10qKShcXD9bXiNdKik/KCNbXFxzXFxTXSopPy87XG5nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdFdpdGhQYXJhbXM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZm9ybWF0KGEsYikuY2xvbmVXaXRoUGFyYW1zKGMsZCl9O2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSl9O2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50cz1mdW5jdGlvbihhKXtmb3IodmFyIGI9XCJcIixjPTA7YzxhLmxlbmd0aDtjKyspYis9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGFbY10pO3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtcbmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybDtiLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKGEpOmE7Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kmJihiLnRydXN0ZWRVUkxfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChhKSk7cmV0dXJuIGJ9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5zdHJpbmdpZnlQYXJhbXNfPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT1jKXJldHVybiBiO2lmKGdvb2cuaXNTdHJpbmcoYykpcmV0dXJuIGM/YStlbmNvZGVVUklDb21wb25lbnQoYyk6XCJcIjtmb3IodmFyIGQgaW4gYyl7dmFyIGU9Y1tkXTtlPWdvb2cuaXNBcnJheShlKT9lOltlXTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtudWxsIT1nJiYoYnx8KGI9YSksYis9KGIubGVuZ3RoPmEubGVuZ3RoP1wiJlwiOlwiXCIpK2VuY29kZVVSSUNvbXBvbmVudChkKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGcpKSl9fXJldHVybiBifTtnb29nLnN0cmluZy5pbnRlcm5hbD17fTtnb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PWEubGFzdEluZGV4T2YoYiwwKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuZW5kc1dpdGg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aC1iLmxlbmd0aDtyZXR1cm4gMDw9YyYmYS5pbmRleE9mKGIsYyk9PWN9O2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShiLGEuc3Vic3RyKDAsYi5sZW5ndGgpKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShiLGEuc3Vic3RyKGEubGVuZ3RoLWIubGVuZ3RoLGIubGVuZ3RoKSl9O1xuZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudG9Mb3dlckNhc2UoKT09Yi50b0xvd2VyQ2FzZSgpfTtnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlPWZ1bmN0aW9uKGEpe3JldHVybi9eW1xcc1xceGEwXSokLy50ZXN0KGEpfTtnb29nLnN0cmluZy5pbnRlcm5hbC50cmltPWdvb2cuVFJVU1RFRF9TSVRFJiZTdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJpbSgpfTpmdW5jdGlvbihhKXtyZXR1cm4vXltcXHNcXHhhMF0qKFtcXHNcXFNdKj8pW1xcc1xceGEwXSokLy5leGVjKGEpWzFdfTtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWZ1bmN0aW9uKGEsYil7YT1TdHJpbmcoYSkudG9Mb3dlckNhc2UoKTtiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBhPGI/LTE6YT09Yj8wOjF9O1xuZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csYj9cIjxiciAvPlwiOlwiPGJyPlwiKX07XG5nb29nLnN0cmluZy5pbnRlcm5hbC5odG1sRXNjYXBlPWZ1bmN0aW9uKGEsYil7aWYoYilhPWEucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5BTVBfUkVfLFwiJmFtcDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5MVF9SRV8sXCImbHQ7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuR1RfUkVfLFwiJmd0O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfLFwiJnF1b3Q7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuU0lOR0xFX1FVT1RFX1JFXyxcIiYjMzk7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV8sXCImIzA7XCIpO2Vsc2V7aWYoIWdvb2cuc3RyaW5nLmludGVybmFsLkFMTF9SRV8udGVzdChhKSlyZXR1cm4gYTstMSE9YS5pbmRleE9mKFwiJlwiKSYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV8sXCImYW1wO1wiKSk7LTEhPWEuaW5kZXhPZihcIjxcIikmJihhPWEucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5MVF9SRV8sXG5cIiZsdDtcIikpOy0xIT1hLmluZGV4T2YoXCI+XCIpJiYoYT1hLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuR1RfUkVfLFwiJmd0O1wiKSk7LTEhPWEuaW5kZXhPZignXCInKSYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfLFwiJnF1b3Q7XCIpKTstMSE9YS5pbmRleE9mKFwiJ1wiKSYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKSk7LTEhPWEuaW5kZXhPZihcIlxceDAwXCIpJiYoYT1hLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV8sXCImIzA7XCIpKX1yZXR1cm4gYX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXz0vJi9nO2dvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXz0vPC9nO2dvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXz0vPi9nO2dvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfPS9cIi9nO2dvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV89LycvZztcbmdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfPS9cXHgwMC9nO2dvb2cuc3RyaW5nLmludGVybmFsLkFMTF9SRV89L1tcXHgwMCY8PlwiJ10vO2dvb2cuc3RyaW5nLmludGVybmFsLndoaXRlc3BhY2VFc2NhcGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnIoYS5yZXBsYWNlKC8gIC9nLFwiICYjMTYwO1wiKSxiKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4tMSE9YS5pbmRleE9mKGIpfTtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhhLnRvTG93ZXJDYXNlKCksYi50b0xvd2VyQ2FzZSgpKX07XG5nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wO2E9Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbShTdHJpbmcoYSkpLnNwbGl0KFwiLlwiKTtiPWdvb2cuc3RyaW5nLmludGVybmFsLnRyaW0oU3RyaW5nKGIpKS5zcGxpdChcIi5cIik7Zm9yKHZhciBkPU1hdGgubWF4KGEubGVuZ3RoLGIubGVuZ3RoKSxlPTA7MD09YyYmZTxkO2UrKyl7dmFyIGY9YVtlXXx8XCJcIixnPWJbZV18fFwiXCI7ZG97Zj0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhmKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdO2c9LyhcXGQqKShcXEQqKSguKikvLmV4ZWMoZyl8fFtcIlwiLFwiXCIsXCJcIixcIlwiXTtpZigwPT1mWzBdLmxlbmd0aCYmMD09Z1swXS5sZW5ndGgpYnJlYWs7Yz0wPT1mWzFdLmxlbmd0aD8wOnBhcnNlSW50KGZbMV0sMTApO3ZhciBoPTA9PWdbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoZ1sxXSwxMCk7Yz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKGMsaCl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oMD09XG5mWzJdLmxlbmd0aCwwPT1nWzJdLmxlbmd0aCl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oZlsyXSxnWzJdKTtmPWZbM107Zz1nWzNdfXdoaWxlKDA9PWMpfXJldHVybiBjfTtnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8tMTphPmI/MTowfTtnb29nLmh0bWwuU2FmZVVybD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89XCJcIjt0aGlzLlNBRkVfVVJMX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99O2dvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkc9XCJhYm91dDppbnZhbGlkI3pDbG9zdXJlelwiO2dvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO2dvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX07XG5nb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwO2dvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5nZXREaXJlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkuRGlyLkxUUn07Z29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVVybHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfK1wifVwifSk7Z29vZy5odG1sLlNhZmVVcmwudW53cmFwPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGEpLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwmJmEuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVVybCYmYS5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8pcmV0dXJuIGEucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV87Z29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlVXJsLCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpTYWZlVXJsXCJ9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21Db25zdGFudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSl9O1xuZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fPS9eKD86YXVkaW9cXC8oPzozZ3BwMnwzZ3BwfGFhY3xMMTZ8bWlkaXxtcDN8bXA0fG1wZWd8b2dhfG9nZ3xvcHVzfHgtbTRhfHgtd2F2fHdhdnx3ZWJtKXxpbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicHx4LWljb24pfHRleHRcXC9jc3Z8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibXxxdWlja3RpbWUpKSg/OjtcXHcrPSg/Olxcdyt8XCJbXFx3Oz1dK1wiKSkqJC9pO2dvb2cuaHRtbC5TYWZlVXJsLmlzU2FmZU1pbWVUeXBlPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChhKX07Z29vZy5odG1sLlNhZmVVcmwuZnJvbUJsb2I9ZnVuY3Rpb24oYSl7YT1nb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChhLnR5cGUpP2dvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybChhKTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O1xuZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fPS9eZGF0YTooW14sXSopO2Jhc2U2NCxbYS16MC05K1xcL10rPSokL2k7Z29vZy5odG1sLlNhZmVVcmwuZnJvbURhdGFVcmw9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoLyglMEF8JTBEKS9nLFwiXCIpO3ZhciBiPWEubWF0Y2goZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fKTtiPWImJmdvb2cuaHRtbC5TQUZFX01JTUVfVFlQRV9QQVRURVJOXy50ZXN0KGJbMV0pO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYj9hOmdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpfTtnb29nLmh0bWwuU2FmZVVybC5mcm9tVGVsVXJsPWZ1bmN0aW9uKGEpe2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoYSxcInRlbDpcIil8fChhPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O1xuZ29vZy5odG1sLlNJUF9VUkxfUEFUVEVSTl89L15zaXBbc10/OlsrYS16MC05Xy4hJCUmJypcXC89XmB7fH1+LV0rQChbYS16MC05LV0rXFwuKStbYS16MC05XXsyLDYzfSQvaTtnb29nLmh0bWwuU2FmZVVybC5mcm9tU2lwVXJsPWZ1bmN0aW9uKGEpe2dvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fLnRlc3QoZGVjb2RlVVJJQ29tcG9uZW50KGEpKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07Z29vZy5odG1sLlNhZmVVcmwuZnJvbUZhY2Vib29rTWVzc2VuZ2VyVXJsPWZ1bmN0aW9uKGEpe2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoYSxcImZiLW1lc3NlbmdlcjovL3NoYXJlXCIpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLmZyb21XaGF0c0FwcFVybD1mdW5jdGlvbihhKXtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGEsXCJ3aGF0c2FwcDovL3NlbmRcIil8fChhPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21TbXNVcmw9ZnVuY3Rpb24oYSl7Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChhLFwic21zOlwiKSYmZ29vZy5odG1sLlNhZmVVcmwuaXNTbXNVcmxCb2R5VmFsaWRfKGEpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXz1mdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4T2YoXCIjXCIpOzA8YiYmKGE9YS5zdWJzdHJpbmcoMCxiKSk7Yj1hLm1hdGNoKC9bPyZdYm9keT0vZ2kpO2lmKCFiKXJldHVybiEwO2lmKDE8Yi5sZW5ndGgpcmV0dXJuITE7YT1hLm1hdGNoKC9bPyZdYm9keT0oW14mXSopLylbMV07aWYoIWEpcmV0dXJuITA7dHJ5e2RlY29kZVVSSUNvbXBvbmVudChhKX1jYXRjaChjKXtyZXR1cm4hMX1yZXR1cm4vXig/OlthLXowLTlcXC1fLn5dfCVbMC05YS1mXXsyfSkrJC9pLnRlc3QoYSl9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21Tc2hVcmw9ZnVuY3Rpb24oYSl7Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChhLFwic3NoOi8vXCIpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQ2hyb21lRXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXmNocm9tZS1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxhLGIpfTtnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUZpcmVmb3hFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9ebW96LWV4dGVuc2lvbjpcXC9cXC8oW15cXC9dKylcXC8vLGEsYil9O2dvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRWRnZUV4dGVuc2lvblVybD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15tcy1icm93c2VyLWV4dGVuc2lvbjpcXC9cXC8oW15cXC9dKylcXC8vLGEsYil9O1xuZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfPWZ1bmN0aW9uKGEsYixjKXsoYT1hLmV4ZWMoYikpPyhhPWFbMV0sLTE9PShjIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/W2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChjKV06Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKX0pKS5pbmRleE9mKGEpJiYoYj1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSk6Yj1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChhKSl9O1xuZ29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fPS9eKD86KD86aHR0cHM/fG1haWx0b3xmdHApOnxbXjovPyNdKig/OlsvPyNdfCQpKS9pO2dvb2cuaHRtbC5TYWZlVXJsLlNBRkVfVVJMX1BBVFRFUk49Z29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fO2dvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybClyZXR1cm4gYTthPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/YS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGEpO2dvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGEpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkPWZ1bmN0aW9uKGEsYil7aWYoYSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKXJldHVybiBhO2E9XCJvYmplY3RcIj09dHlwZW9mIGEmJmEuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9hLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoYSk7aWYoYiYmL15kYXRhOi9pLnRlc3QoYSkmJihiPWdvb2cuaHRtbC5TYWZlVXJsLmZyb21EYXRhVXJsKGEpLGIuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpPT1hKSlyZXR1cm4gYjtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGEpLFwiJXMgZG9lcyBub3QgbWF0Y2ggdGhlIHNhZmUgVVJMIHBhdHRlcm5cIixhKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e307Z29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBnb29nLmh0bWwuU2FmZVVybDtiLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChhKTphO3JldHVybiBifTtnb29nLmh0bWwuU2FmZVVybC5BQk9VVF9CTEFOSz1nb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJhYm91dDpibGFua1wiKTtnb29nLmh0bWwuU2FmZVN0eWxlPWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfPVwiXCI7dGhpcy5TQUZFX1NUWUxFX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVN0eWxlLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX307Z29vZy5odG1sLlNhZmVTdHlsZS5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMDtnb29nLmh0bWwuU2FmZVN0eWxlLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fTtcbmdvb2cuaHRtbC5TYWZlU3R5bGUuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGEpe2E9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWTtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoKGEsXCI7XCIpLFwiTGFzdCBjaGFyYWN0ZXIgb2Ygc3R5bGUgc3RyaW5nIGlzIG5vdCAnOyc6IFwiK2EpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYSxcIjpcIiksXCJTdHlsZSBzdHJpbmcgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSAnOicsIHRvIHNwZWNpZnkgYSBcXFwibmFtZTogdmFsdWVcXFwiIHBhaXI6IFwiK2EpO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVffTtnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVTdHlsZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVTdHlsZXtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KTtcbmdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlJiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTdHlsZSYmYS5TQUZFX1NUWUxFX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfKXJldHVybiBhLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV87Z29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlU3R5bGUsIGdvdCAnXCIrYStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihhKSk7cmV0dXJuXCJ0eXBlX2Vycm9yOlNhZmVTdHlsZVwifTtnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVTdHlsZSkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhhKX07XG5nb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGEpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1hO3JldHVybiB0aGlzfTtnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIik7Z29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HPVwiekNsb3N1cmV6XCI7XG5nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZT1mdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM7Zm9yKGMgaW4gYSl7aWYoIS9eWy1fYS16QS1aMC05XSskLy50ZXN0KGMpKXRocm93IEVycm9yKFwiTmFtZSBhbGxvd3Mgb25seSBbLV9hLXpBLVowLTldLCBnb3Q6IFwiK2MpO3ZhciBkPWFbY107bnVsbCE9ZCYmKGQ9Z29vZy5pc0FycmF5KGQpP2dvb2cuYXJyYXkubWFwKGQsZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKS5qb2luKFwiIFwiKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZV8oZCksYis9YytcIjpcIitkK1wiO1wiKX1yZXR1cm4gYj9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9O1xuZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybClyZXR1cm4ndXJsKFwiJytnb29nLmh0bWwuU2FmZVVybC51bndyYXAoYSkucmVwbGFjZSgvPC9nLFwiJTNjXCIpLnJlcGxhY2UoL1tcXFxcXCJdL2csXCJcXFxcJCZcIikrJ1wiKSc7YT1hIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpOmdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlU3RyaW5nXyhTdHJpbmcoYSkpO2lmKC9bezt9XS8udGVzdChhKSl0aHJvdyBuZXcgZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yKFwiVmFsdWUgZG9lcyBub3QgYWxsb3cgW3s7fV0sIGdvdDogJXMuXCIsW2FdKTtyZXR1cm4gYX07XG5nb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ189ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXyxcIiQxXCIpLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfLFwiJDFcIikucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV8sXCJ1cmxcIik7aWYoZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9SRV8udGVzdChiKSl7aWYoZ29vZy5odG1sLlNhZmVTdHlsZS5DT01NRU5UX1JFXy50ZXN0KGEpKXJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBkaXNhbGxvd3MgY29tbWVudHMsIGdvdDogXCIrYSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HO2lmKCFnb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkUXVvdGVzXyhhKSlyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgcmVxdWlyZXMgYmFsYW5jZWQgcXVvdGVzLCBnb3Q6IFwiK1xuYSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HO2lmKCFnb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkU3F1YXJlQnJhY2tldHNfKGEpKXJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSByZXF1aXJlcyBiYWxhbmNlZCBzcXVhcmUgYnJhY2tldHMgYW5kIG9uZSBpZGVudGlmaWVyIHBlciBwYWlyIG9mIGJyYWNrZXRzLCBnb3Q6IFwiK2EpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklOR31lbHNlIHJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBhbGxvd3Mgb25seSBcIitnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfK1wiIGFuZCBzaW1wbGUgZnVuY3Rpb25zLCBnb3Q6IFwiK2EpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORztyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVVybF8oYSl9O1xuZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFF1b3Rlc189ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSEwLGM9ITAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJBdChkKTtcIidcIj09ZSYmYz9iPSFiOidcIic9PWUmJmImJihjPSFjKX1yZXR1cm4gYiYmY307Z29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFNxdWFyZUJyYWNrZXRzXz1mdW5jdGlvbihhKXtmb3IodmFyIGI9ITAsYz0vXlstX2EtekEtWjAtOV0kLyxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWEuY2hhckF0KGQpO2lmKFwiXVwiPT1lKXtpZihiKXJldHVybiExO2I9ITB9ZWxzZSBpZihcIltcIj09ZSl7aWYoIWIpcmV0dXJuITE7Yj0hMX1lbHNlIGlmKCFiJiYhYy50ZXN0KGUpKXJldHVybiExfXJldHVybiBifTtnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfPVwiWy0sLlxcXCInJV8hIyBhLXpBLVowLTlcXFxcW1xcXFxdXVwiO1xuZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9SRV89bmV3IFJlZ0V4cChcIl5cIitnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfK1wiKyRcIik7Z29vZy5odG1sLlNhZmVTdHlsZS5VUkxfUkVfPS9cXGIodXJsXFwoWyBcXHRcXG5dKikoJ1sgLSYoLVxcW1xcXS1+XSonfFwiWyAhIy1cXFtcXF0tfl0qXCJ8WyEjLSYqLVxcW1xcXS1+XSopKFsgXFx0XFxuXSpcXCkpL2c7Z29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfPS9cXGIoaHNsfGhzbGF8cmdifHJnYmF8bWF0cml4fGNhbGN8bWlubWF4fGZpdC1jb250ZW50fHJlcGVhdHwocm90YXRlfHNjYWxlfHRyYW5zbGF0ZSkoWHxZfFp8M2QpPylcXChbLSsqLzAtOWEtei4lXFxbXFxdLCBdK1xcKS9nO2dvb2cuaHRtbC5TYWZlU3R5bGUuQ09NTUVOVF9SRV89L1xcL1xcKi87XG5nb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplVXJsXz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXyxmdW5jdGlvbihhLGMsZCxlKXt2YXIgYj1cIlwiO2Q9ZC5yZXBsYWNlKC9eKFsnXCJdKSguKilcXDEkLyxmdW5jdGlvbihhLGMsZCl7Yj1jO3JldHVybiBkfSk7YT1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShkKS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk7cmV0dXJuIGMrYithK2IrZX0pfTtnb29nLmh0bWwuU2FmZVN0eWxlLmNvbmNhdD1mdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM9ZnVuY3Rpb24oYSl7Z29vZy5pc0FycmF5KGEpP2dvb2cuYXJyYXkuZm9yRWFjaChhLGMpOmIrPWdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKGEpfTtnb29nLmFycmF5LmZvckVhY2goYXJndW1lbnRzLGMpO3JldHVybiBiP2dvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYik6Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWX07Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89XCJcIjt0aGlzLlNBRkVfU1RZTEVfU0hFRVRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99O2dvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMDtnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9O1xuZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVJ1bGU9ZnVuY3Rpb24oYSxiKXtpZihnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhhLFwiPFwiKSl0aHJvdyBFcnJvcihcIlNlbGVjdG9yIGRvZXMgbm90IGFsbG93ICc8JywgZ290OiBcIithKTt2YXIgYz1hLnJlcGxhY2UoLygnfFwiKSgoPyFcXDEpW15cXHJcXG5cXGZcXFxcXXxcXFxcW1xcc1xcU10pKlxcMS9nLFwiXCIpO2lmKCEvXlstX2EtekEtWjAtOSMuOiogLD4rfltcXF0oKT1eJHxdKyQvLnRlc3QoYykpdGhyb3cgRXJyb3IoXCJTZWxlY3RvciBhbGxvd3Mgb25seSBbLV9hLXpBLVowLTkjLjoqICw+K35bXFxcXF0oKT1eJHxdIGFuZCBzdHJpbmdzLCBnb3Q6IFwiK2EpO2lmKCFnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuaGFzQmFsYW5jZWRCcmFja2V0c18oYykpdGhyb3cgRXJyb3IoXCIoKSBhbmQgW10gaW4gc2VsZWN0b3IgbXVzdCBiZSBiYWxhbmNlZCwgZ290OiBcIithKTtiIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZXx8KGI9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGUoYikpO1xuYT1hK1wie1wiK2dvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKGIpLnJlcGxhY2UoLzwvZyxcIlxcXFwzQyBcIikrXCJ9XCI7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuaGFzQmFsYW5jZWRCcmFja2V0c189ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXtcIihcIjpcIilcIixcIltcIjpcIl1cIn0sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWFbZF07aWYoYltlXSljLnB1c2goYltlXSk7ZWxzZSBpZihnb29nLm9iamVjdC5jb250YWlucyhiLGUpJiZjLnBvcCgpIT1lKXJldHVybiExfXJldHVybiAwPT1jLmxlbmd0aH07XG5nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY29uY2F0PWZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYz1mdW5jdGlvbihhKXtnb29nLmlzQXJyYXkoYSk/Z29vZy5hcnJheS5mb3JFYWNoKGEsYyk6Yis9Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcChhKX07Z29vZy5hcnJheS5mb3JFYWNoKGFyZ3VtZW50cyxjKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O1xuZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmZyb21Db25zdGFudD1mdW5jdGlvbihhKXthPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5FTVBUWTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhhLFwiPFwiKSxcIkZvcmJpZGRlbiAnPCcgY2hhcmFjdGVyIGluIHN0eWxlIHNoZWV0IHN0cmluZzogXCIrYSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV99O1xuZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVTdHlsZVNoZWV0e1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfK1wifVwifSk7XG5nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQudW53cmFwPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmEuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmEuU0FGRV9TVFlMRV9TSEVFVF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfKXJldHVybiBhLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXztnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVTdHlsZVNoZWV0LCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpTYWZlU3R5bGVTaGVldFwifTtcbmdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0KS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGEpfTtnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oYSl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89YTtyZXR1cm4gdGhpc307Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LkVNUFRZPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiXCIpO2dvb2cubGFicz17fTtnb29nLmxhYnMudXNlckFnZW50PXt9O2dvb2cubGFicy51c2VyQWdlbnQudXRpbD17fTtnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXz1mdW5jdGlvbigpe3ZhciBhPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXZpZ2F0b3JfKCk7cmV0dXJuIGEmJihhPWEudXNlckFnZW50KT9hOlwiXCJ9O2dvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXZpZ2F0b3JfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZ2xvYmFsLm5hdmlnYXRvcn07Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnVzZXJBZ2VudF89Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ18oKTtnb29nLmxhYnMudXNlckFnZW50LnV0aWwuc2V0VXNlckFnZW50PWZ1bmN0aW9uKGEpe2dvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRfPWF8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfKCl9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50X307Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYixhKX07Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZT1mdW5jdGlvbihhKXt2YXIgYj1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zKGIsYSl9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0vKFxcd1tcXHcgXSspXFwvKFteXFxzXSspXFxzKig/OlxcKCguKj8pXFwpKT8vZyxjPVtdLGQ7ZD1iLmV4ZWMoYSk7KWMucHVzaChbZFsxXSxkWzJdLGRbM118fHZvaWQgMF0pO3JldHVybiBjfTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXI9e307Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk9wZXJhXCIpfTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiVHJpZGVudFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTVNJRVwiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZ2VcIil9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRWRnL1wiKX07XG5nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJPUFJcIil9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkZpcmVmb3hcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkZ4aU9TXCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2FmYXJpXCIpJiYhKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94XygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrKCl8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDb2FzdFwiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld189ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBhZFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBob25lXCIpKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0XygpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8oKSYmZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQXBwbGVXZWJLaXRcIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ2hyb21lXz1mdW5jdGlvbigpe3JldHVybihnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDaHJvbWVcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyaU9TXCIpKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXygpfTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hBbmRyb2lkQnJvd3Nlcl89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQW5kcm9pZFwiKSYmIShnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRmlyZWZveCgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrKCkpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXztnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZUNocm9taXVtPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmFDaHJvbWl1bT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXztnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNGaXJlZm94PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfO1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ29hc3Q9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lvc1dlYnZpZXc9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld187Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQW5kcm9pZEJyb3dzZXI9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGs9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2lsa1wiKX07XG5nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7YT1nb29nLmFycmF5LmZpbmQoYSxkKTtyZXR1cm4gY1thXXx8XCJcIn12YXIgYj1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7aWYoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzSUUoKSlyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldElFVmVyc2lvbl8oYik7Yj1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZXh0cmFjdFZlcnNpb25UdXBsZXMoYik7dmFyIGM9e307Z29vZy5hcnJheS5mb3JFYWNoKGIsZnVuY3Rpb24oYSl7Y1thWzBdXT1hWzFdfSk7dmFyIGQ9Z29vZy5wYXJ0aWFsKGdvb2cub2JqZWN0LmNvbnRhaW5zS2V5LGMpO3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpP2EoW1wiVmVyc2lvblwiLFwiT3BlcmFcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2UoKT9hKFtcIkVkZ2VcIl0pOlxuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZUNocm9taXVtKCk/YShbXCJFZGdcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpP2EoW1wiQ2hyb21lXCIsXCJDcmlPU1wiXSk6KGI9YlsyXSkmJmJbMV18fFwiXCJ9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihhKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZVZlcnNpb25zKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRWZXJzaW9uKCksYSl9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldElFVmVyc2lvbl89ZnVuY3Rpb24oYSl7dmFyIGI9L3J2OiAqKFtcXGRcXC5dKikvLmV4ZWMoYSk7aWYoYiYmYlsxXSlyZXR1cm4gYlsxXTtiPVwiXCI7dmFyIGM9L01TSUUgKyhbXFxkXFwuXSspLy5leGVjKGEpO2lmKGMmJmNbMV0paWYoYT0vVHJpZGVudFxcLyhcXGQuXFxkKS8uZXhlYyhhKSxcIjcuMFwiPT1jWzFdKWlmKGEmJmFbMV0pc3dpdGNoKGFbMV0pe2Nhc2UgXCI0LjBcIjpiPVwiOC4wXCI7YnJlYWs7Y2FzZSBcIjUuMFwiOmI9XCI5LjBcIjticmVhaztjYXNlIFwiNi4wXCI6Yj1cIjEwLjBcIjticmVhaztjYXNlIFwiNy4wXCI6Yj1cIjExLjBcIn1lbHNlIGI9XCI3LjBcIjtlbHNlIGI9Y1sxXTtyZXR1cm4gYn07Z29vZy5odG1sLlNhZmVIdG1sPWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV89XCJcIjt0aGlzLlNBRkVfSFRNTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXzt0aGlzLmRpcl89bnVsbH07Z29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITA7Z29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5nZXREaXJlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXJffTtnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O1xuZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVIdG1se1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfK1wifVwifSk7Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGEpLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWwmJmEuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZUh0bWwmJmEuU0FGRV9IVE1MX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8pcmV0dXJuIGEucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZUh0bWwsIGdvdCAnXCIrYStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihhKSk7cmV0dXJuXCJ0eXBlX2Vycm9yOlNhZmVIdG1sXCJ9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGU9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbClyZXR1cm4gYTt2YXIgYj1cIm9iamVjdFwiPT10eXBlb2YgYSxjPW51bGw7YiYmYS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmcmJihjPWEuZ2V0RGlyZWN0aW9uKCkpO2E9YiYmYS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nP2EuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpOlN0cmluZyhhKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShhKSxjKX07XG5nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZVByZXNlcnZpbmdOZXdsaW5lcz1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sKXJldHVybiBhO2E9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoYSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoYSkpLGEuZ2V0RGlyZWN0aW9uKCkpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlUHJlc2VydmluZ05ld2xpbmVzQW5kU3BhY2VzPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWwpcmV0dXJuIGE7YT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShhKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwud2hpdGVzcGFjZUVzY2FwZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGEpKSxhLmdldERpcmVjdGlvbigpKX07Z29vZy5odG1sLlNhZmVIdG1sLmZyb209Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGU7Z29vZy5odG1sLlNhZmVIdG1sLlZBTElEX05BTUVTX0lOX1RBR189L15bYS16QS1aMC05LV0rJC87XG5nb29nLmh0bWwuU2FmZUh0bWwuVVJMX0FUVFJJQlVURVNfPXthY3Rpb246ITAsY2l0ZTohMCxkYXRhOiEwLGZvcm1hY3Rpb246ITAsaHJlZjohMCxtYW5pZmVzdDohMCxwb3N0ZXI6ITAsc3JjOiEwfTtnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXz17QVBQTEVUOiEwLEJBU0U6ITAsRU1CRUQ6ITAsSUZSQU1FOiEwLExJTks6ITAsTUFUSDohMCxNRVRBOiEwLE9CSkVDVDohMCxTQ1JJUFQ6ITAsU1RZTEU6ITAsU1ZHOiEwLFRFTVBMQVRFOiEwfTtnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlPWZ1bmN0aW9uKGEsYixjKXtnb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZShTdHJpbmcoYSkpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShTdHJpbmcoYSksYixjKX07XG5nb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZT1mdW5jdGlvbihhKXtpZighZ29vZy5odG1sLlNhZmVIdG1sLlZBTElEX05BTUVTX0lOX1RBR18udGVzdChhKSl0aHJvdyBFcnJvcihcIkludmFsaWQgdGFnIG5hbWUgPFwiK2ErXCI+LlwiKTtpZihhLnRvVXBwZXJDYXNlKClpbiBnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXyl0aHJvdyBFcnJvcihcIlRhZyBuYW1lIDxcIithK1wiPiBpcyBub3QgYWxsb3dlZCBmb3IgU2FmZUh0bWwuXCIpO307XG5nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlSWZyYW1lPWZ1bmN0aW9uKGEsYixjLGQpe2EmJmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGEpO3ZhciBlPXt9O2Uuc3JjPWF8fG51bGw7ZS5zcmNkb2M9YiYmZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChiKTthPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyhlLHtzYW5kYm94OlwiXCJ9LGMpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGEsZCl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhbmRib3hJZnJhbWU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5jYW5Vc2VTYW5kYm94SWZyYW1lKCkpdGhyb3cgRXJyb3IoXCJUaGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHNhbmRib3hlZCBpZnJhbWVzLlwiKTt2YXIgZT17fTtlLnNyYz1hP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShhKSk6bnVsbDtlLnNyY2RvYz1ifHxudWxsO2Uuc2FuZGJveD1cIlwiO2E9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKGUse30sYyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiaWZyYW1lXCIsYSxkKX07XG5nb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudCYmXCJzYW5kYm94XCJpbiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGV9O2dvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHRTcmM9ZnVuY3Rpb24oYSxiKXtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChhKTthPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7c3JjOmF9LHt9LGIpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcInNjcmlwdFwiLGEpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYil7dmFyIGQ9Yy50b0xvd2VyQ2FzZSgpO2lmKFwibGFuZ3VhZ2VcIj09ZHx8XCJzcmNcIj09ZHx8XCJ0ZXh0XCI9PWR8fFwidHlwZVwiPT1kKXRocm93IEVycm9yKCdDYW5ub3Qgc2V0IFwiJytkKydcIiBhdHRyaWJ1dGUnKTt9Yz1cIlwiO2E9Z29vZy5hcnJheS5jb25jYXQoYSk7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyljKz1nb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXAoYVtkXSk7YT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShjLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzY3JpcHRcIixiLGEpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTdHlsZT1mdW5jdGlvbihhLGIpe2I9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKHt0eXBlOlwidGV4dC9jc3NcIn0se30sYik7dmFyIGM9XCJcIjthPWdvb2cuYXJyYXkuY29uY2F0KGEpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWMrPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoYVtkXSk7YT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShjLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzdHlsZVwiLGIsYSl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZU1ldGFSZWZyZXNoPWZ1bmN0aW9uKGEsYil7YT1nb29nLmh0bWwuU2FmZVVybC51bndyYXAoZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoYSkpOyhnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCkpJiZnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhhLFwiO1wiKSYmKGE9XCInXCIrYS5yZXBsYWNlKC8nL2csXCIlMjdcIikrXCInXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIm1ldGFcIix7XCJodHRwLWVxdWl2XCI6XCJyZWZyZXNoXCIsY29udGVudDooYnx8MCkrXCI7IHVybD1cIithfSl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfPWZ1bmN0aW9uKGEsYixjKXtpZihjIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3QpYz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoYyk7ZWxzZSBpZihcInN0eWxlXCI9PWIudG9Mb3dlckNhc2UoKSljPWdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXyhjKTtlbHNle2lmKC9eb24vaS50ZXN0KGIpKXRocm93IEVycm9yKCdBdHRyaWJ1dGUgXCInK2IrJ1wiIHJlcXVpcmVzIGdvb2cuc3RyaW5nLkNvbnN0IHZhbHVlLCBcIicrYysnXCIgZ2l2ZW4uJyk7aWYoYi50b0xvd2VyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLlVSTF9BVFRSSUJVVEVTXylpZihjIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCljPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGMpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKWM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKGMpO1xuZWxzZSBpZihnb29nLmlzU3RyaW5nKGMpKWM9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoYykuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpO2Vsc2UgdGhyb3cgRXJyb3IoJ0F0dHJpYnV0ZSBcIicrYisnXCIgb24gdGFnIFwiJythKydcIiByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVVybCwgZ29vZy5zdHJpbmcuQ29uc3QsIG9yIHN0cmluZywgdmFsdWUgXCInK2MrJ1wiIGdpdmVuLicpO31jLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmcmJihjPWMuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNTdHJpbmcoYyl8fGdvb2cuaXNOdW1iZXIoYyksXCJTdHJpbmcgb3IgbnVtYmVyIHZhbHVlIGV4cGVjdGVkLCBnb3QgXCIrdHlwZW9mIGMrXCIgd2l0aCB2YWx1ZTogXCIrYyk7cmV0dXJuIGIrJz1cIicrZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShTdHJpbmcoYykpKydcIid9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmdldFN0eWxlVmFsdWVfPWZ1bmN0aW9uKGEpe2lmKCFnb29nLmlzT2JqZWN0KGEpKXRocm93IEVycm9yKCdUaGUgXCJzdHlsZVwiIGF0dHJpYnV0ZSByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVN0eWxlIG9yIG1hcCBvZiBzdHlsZSBwcm9wZXJ0aWVzLCAnK3R5cGVvZiBhK1wiIGdpdmVuOiBcIithKTthIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZXx8KGE9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGUoYSkpO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChhKX07Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVdpdGhEaXI9ZnVuY3Rpb24oYSxiLGMsZCl7Yj1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlKGIsYyxkKTtiLmRpcl89YTtyZXR1cm4gYn07XG5nb29nLmh0bWwuU2FmZUh0bWwuam9pbj1mdW5jdGlvbihhLGIpe2E9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoYSk7dmFyIGM9YS5nZXREaXJlY3Rpb24oKSxkPVtdLGU9ZnVuY3Rpb24oYSl7Z29vZy5pc0FycmF5KGEpP2dvb2cuYXJyYXkuZm9yRWFjaChhLGUpOihhPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGEpLGQucHVzaChnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGEpKSxhPWEuZ2V0RGlyZWN0aW9uKCksYz09Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw/Yz1hOmEhPWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMJiZjIT1hJiYoYz1udWxsKSl9O2dvb2cuYXJyYXkuZm9yRWFjaChiLGUpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShkLmpvaW4oZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChhKSksYyl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmpvaW4oZ29vZy5odG1sLlNhZmVIdG1sLkVNUFRZLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfTtnb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0V2l0aERpcj1mdW5jdGlvbihhLGIpe3ZhciBjPWdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXQoZ29vZy5hcnJheS5zbGljZShhcmd1bWVudHMsMSkpO2MuZGlyXz1hO3JldHVybiBjfTtnb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9O2dvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEsYil7cmV0dXJuKG5ldyBnb29nLmh0bWwuU2FmZUh0bWwpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSxiKX07XG5nb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oYSxiKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVIVE1MKGEpOmE7dGhpcy5kaXJfPWI7cmV0dXJuIHRoaXN9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW51bGw7dmFyIGU9XCI8XCIrYStnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcyhhLGIpO2dvb2cuaXNEZWZBbmROb3ROdWxsKGMpP2dvb2cuaXNBcnJheShjKXx8KGM9W2NdKTpjPVtdO2dvb2cuZG9tLnRhZ3MuaXNWb2lkVGFnKGEudG9Mb3dlckNhc2UoKSk/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWMubGVuZ3RoLFwiVm9pZCB0YWcgPFwiK2ErXCI+IGRvZXMgbm90IGFsbG93IGNvbnRlbnQuXCIpLGUrPVwiPlwiKTooZD1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KGMpLGUrPVwiPlwiK2dvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoZCkrXCI8L1wiK2ErXCI+XCIsZD1kLmdldERpcmVjdGlvbigpKTsoYT1iJiZiLmRpcikmJihkPS9eKGx0cnxydGx8YXV0bykkL2kudGVzdChhKT9nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTDpcbm51bGwpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlLGQpfTtnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcz1mdW5jdGlvbihhLGIpe3ZhciBjPVwiXCI7aWYoYilmb3IodmFyIGQgaW4gYil7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QoZCkpdGhyb3cgRXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUgXCInK2QrJ1wiLicpO3ZhciBlPWJbZF07Z29vZy5pc0RlZkFuZE5vdE51bGwoZSkmJihjKz1cIiBcIitnb29nLmh0bWwuU2FmZUh0bWwuZ2V0QXR0ck5hbWVBbmRWYWx1ZV8oYSxkLGUpKX1yZXR1cm4gY307XG5nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU7Zm9yKGUgaW4gYSlnb29nLmFzc2VydHMuYXNzZXJ0KGUudG9Mb3dlckNhc2UoKT09ZSxcIk11c3QgYmUgbG93ZXIgY2FzZVwiKSxkW2VdPWFbZV07Zm9yKGUgaW4gYilnb29nLmFzc2VydHMuYXNzZXJ0KGUudG9Mb3dlckNhc2UoKT09ZSxcIk11c3QgYmUgbG93ZXIgY2FzZVwiKSxkW2VdPWJbZV07Zm9yKGUgaW4gYyl7dmFyIGY9ZS50b0xvd2VyQ2FzZSgpO2lmKGYgaW4gYSl0aHJvdyBFcnJvcignQ2Fubm90IG92ZXJyaWRlIFwiJytmKydcIiBhdHRyaWJ1dGUsIGdvdCBcIicrZSsnXCIgd2l0aCB2YWx1ZSBcIicrY1tlXSsnXCInKTtmIGluIGImJmRlbGV0ZSBkW2ZdO2RbZV09Y1tlXX1yZXR1cm4gZH07XG5nb29nLmh0bWwuU2FmZUh0bWwuRE9DVFlQRV9IVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiPCFET0NUWVBFIGh0bWw+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpO2dvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKTtnb29nLmh0bWwuU2FmZUh0bWwuQlI9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCI8YnI+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpO2dvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucz17fTtnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZUh0bWxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiLGN8fG51bGwpfTtcbmdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU2NyaXB0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiKX07XG5nb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVN0eWxlRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O1xuZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZVNoZWV0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtcbmdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiKX07XG5nb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMudHJ1c3RlZFJlc291cmNlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKTtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIik7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O2dvb2cuZG9tLnNhZmU9e307Z29vZy5kb20uc2FmZS5JbnNlcnRBZGphY2VudEh0bWxQb3NpdGlvbj17QUZURVJCRUdJTjpcImFmdGVyYmVnaW5cIixBRlRFUkVORDpcImFmdGVyZW5kXCIsQkVGT1JFQkVHSU46XCJiZWZvcmViZWdpblwiLEJFRk9SRUVORDpcImJlZm9yZWVuZFwifTtnb29nLmRvbS5zYWZlLmluc2VydEFkamFjZW50SHRtbD1mdW5jdGlvbihhLGIsYyl7YS5pbnNlcnRBZGphY2VudEhUTUwoYixnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoYykpfTtnb29nLmRvbS5zYWZlLlNFVF9JTk5FUl9IVE1MX0RJU0FMTE9XRURfVEFHU189e01BVEg6ITAsU0NSSVBUOiEwLFNUWUxFOiEwLFNWRzohMCxURU1QTEFURTohMH07XG5nb29nLmRvbS5zYWZlLmlzSW5uZXJIdG1sQ2xlYW51cFJlY3Vyc2l2ZV89Z29vZy5mdW5jdGlvbnMuY2FjaGVSZXR1cm5WYWx1ZShmdW5jdGlvbigpe2lmKGdvb2cuREVCVUcmJlwidW5kZWZpbmVkXCI9PT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuITE7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTthLmFwcGVuZENoaWxkKGIpO2lmKGdvb2cuREVCVUcmJiFhLmZpcnN0Q2hpbGQpcmV0dXJuITE7Yj1hLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDthLmlubmVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoZ29vZy5odG1sLlNhZmVIdG1sLkVNUFRZKTtyZXR1cm4hYi5wYXJlbnRFbGVtZW50fSk7XG5nb29nLmRvbS5zYWZlLnVuc2FmZVNldElubmVySHRtbERvTm90VXNlT3JFbHNlPWZ1bmN0aW9uKGEsYil7aWYoZ29vZy5kb20uc2FmZS5pc0lubmVySHRtbENsZWFudXBSZWN1cnNpdmVfKCkpZm9yKDthLmxhc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmxhc3RDaGlsZCk7YS5pbm5lckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0SW5uZXJIdG1sPWZ1bmN0aW9uKGEsYil7aWYoZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTKXt2YXIgYz1hLnRhZ05hbWUudG9VcHBlckNhc2UoKTtpZihnb29nLmRvbS5zYWZlLlNFVF9JTk5FUl9IVE1MX0RJU0FMTE9XRURfVEFHU19bY10pdGhyb3cgRXJyb3IoXCJnb29nLmRvbS5zYWZlLnNldElubmVySHRtbCBjYW5ub3QgYmUgdXNlZCB0byBzZXQgY29udGVudCBvZiBcIithLnRhZ05hbWUrXCIuXCIpO31nb29nLmRvbS5zYWZlLnVuc2FmZVNldElubmVySHRtbERvTm90VXNlT3JFbHNlKGEsYil9O2dvb2cuZG9tLnNhZmUuc2V0T3V0ZXJIdG1sPWZ1bmN0aW9uKGEsYil7YS5vdXRlckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0Rm9ybUVsZW1lbnRBY3Rpb249ZnVuY3Rpb24oYSxiKXtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRm9ybUVsZW1lbnQoYSkuYWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O2dvb2cuZG9tLnNhZmUuc2V0QnV0dG9uRm9ybUFjdGlvbj1mdW5jdGlvbihhLGIpe2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50KGEpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07XG5nb29nLmRvbS5zYWZlLnNldElucHV0Rm9ybUFjdGlvbj1mdW5jdGlvbihhLGIpe2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbnB1dEVsZW1lbnQoYSkuZm9ybUFjdGlvbj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldFN0eWxlPWZ1bmN0aW9uKGEsYil7YS5zdHlsZS5jc3NUZXh0PWdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKGIpfTtnb29nLmRvbS5zYWZlLmRvY3VtZW50V3JpdGU9ZnVuY3Rpb24oYSxiKXthLndyaXRlKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChiKSl9O1xuZ29vZy5kb20uc2FmZS5zZXRBbmNob3JIcmVmPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBbmNob3JFbGVtZW50KGEpO2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7YS5ocmVmPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O2dvb2cuZG9tLnNhZmUuc2V0SW1hZ2VTcmM9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEltYWdlRWxlbWVudChhKTtpZighKGIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBjPS9eZGF0YTppbWFnZVxcLy9pLnRlc3QoYik7Yj1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiLGMpfWEuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O1xuZ29vZy5kb20uc2FmZS5zZXRBdWRpb1NyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQXVkaW9FbGVtZW50KGEpO2lmKCEoYiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIGM9L15kYXRhOmF1ZGlvXFwvL2kudGVzdChiKTtiPWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIsYyl9YS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07Z29vZy5kb20uc2FmZS5zZXRWaWRlb1NyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVmlkZW9FbGVtZW50KGEpO2lmKCEoYiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIGM9L15kYXRhOnZpZGVvXFwvL2kudGVzdChiKTtiPWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIsYyl9YS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07XG5nb29nLmRvbS5zYWZlLnNldEVtYmVkU3JjPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxFbWJlZEVsZW1lbnQoYSk7YS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldEZyYW1lU3JjPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGcmFtZUVsZW1lbnQoYSk7YS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldElmcmFtZVNyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSUZyYW1lRWxlbWVudChhKTthLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O1xuZ29vZy5kb20uc2FmZS5zZXRJZnJhbWVTcmNkb2M9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQoYSk7YS5zcmNkb2M9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0TGlua0hyZWZBbmRSZWw9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MTGlua0VsZW1lbnQoYSk7YS5yZWw9Yztnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucyhjLFwic3R5bGVzaGVldFwiKT8oZ29vZy5hc3NlcnRzLmFzc2VydChiIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCwnVVJMIG11c3QgYmUgVHJ1c3RlZFJlc291cmNlVXJsIGJlY2F1c2UgXCJyZWxcIiBjb250YWlucyBcInN0eWxlc2hlZXRcIicpLGEuaHJlZj1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwoYikpOmEuaHJlZj1iIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybD9nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwoYik6YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYik6XG5nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpKX07Z29vZy5kb20uc2FmZS5zZXRPYmplY3REYXRhPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxPYmplY3RFbGVtZW50KGEpO2EuZGF0YT1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwoYil9O2dvb2cuZG9tLnNhZmUuc2V0U2NyaXB0U3JjPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50KGEpO2Euc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTChiKTsoYj1nb29nLmdldFNjcmlwdE5vbmNlKCkpJiZhLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsYil9O1xuZ29vZy5kb20uc2FmZS5zZXRTY3JpcHRDb250ZW50PWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50KGEpO2EudGV4dD1nb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXBUcnVzdGVkU2NyaXB0KGIpOyhiPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJmEuc2V0QXR0cmlidXRlKFwibm9uY2VcIixiKX07Z29vZy5kb20uc2FmZS5zZXRMb2NhdGlvbkhyZWY9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzTG9jYXRpb24oYSk7Yj1iIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/Yjpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiKTthLmhyZWY9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07XG5nb29nLmRvbS5zYWZlLmFzc2lnbkxvY2F0aW9uPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGEpO2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7YS5hc3NpZ24oZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKSl9O2dvb2cuZG9tLnNhZmUucmVwbGFjZUxvY2F0aW9uPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGEpO2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7YS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYikpfTtcbmdvb2cuZG9tLnNhZmUub3BlbkluV2luZG93PWZ1bmN0aW9uKGEsYixjLGQsZSl7YT1hIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/YTpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChhKTtyZXR1cm4oYnx8Z29vZy5nbG9iYWwpLm9wZW4oZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChhKSxjP2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChjKTpcIlwiLGQsZSl9O2dvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nSHRtbD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZyhhLGIsXCJ0ZXh0L2h0bWxcIil9O2dvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYS5wYXJzZUZyb21TdHJpbmcoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGIpLGMpfTtcbmdvb2cuZG9tLnNhZmUuY3JlYXRlSW1hZ2VGcm9tQmxvYj1mdW5jdGlvbihhKXtpZighL15pbWFnZVxcLy4qL2cudGVzdChhLnR5cGUpKXRocm93IEVycm9yKFwiZ29vZy5kb20uc2FmZS5jcmVhdGVJbWFnZUZyb21CbG9iIG9ubHkgYWNjZXB0cyBNSU1FIHR5cGUgaW1hZ2UvLiouXCIpO3ZhciBiPWdvb2cuZ2xvYmFsLlVSTC5jcmVhdGVPYmplY3RVUkwoYSk7YT1uZXcgZ29vZy5nbG9iYWwuSW1hZ2U7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtnb29nLmdsb2JhbC5VUkwucmV2b2tlT2JqZWN0VVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldEltYWdlU3JjKGEsZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVVcmxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3QoZ29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIkltYWdlIGJsb2IgVVJMLlwiKSxiKSk7cmV0dXJuIGF9O2dvb2cuc3RyaW5nLkRFVEVDVF9ET1VCTEVfRVNDQVBJTkc9ITE7Z29vZy5zdHJpbmcuRk9SQ0VfTk9OX0RPTV9IVE1MX1VORVNDQVBJTkc9ITE7Z29vZy5zdHJpbmcuVW5pY29kZT17TkJTUDpcIlxcdTAwYTBcIn07Z29vZy5zdHJpbmcuc3RhcnRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoO2dvb2cuc3RyaW5nLmVuZHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoO2dvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aDtnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aDtnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFcXVhbHM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzO1xuZ29vZy5zdHJpbmcuc3Vicz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hLnNwbGl0KFwiJXNcIiksZD1cIlwiLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2UubGVuZ3RoJiYxPGMubGVuZ3RoOylkKz1jLnNoaWZ0KCkrZS5zaGlmdCgpO3JldHVybiBkK2Muam9pbihcIiVzXCIpfTtnb29nLnN0cmluZy5jb2xsYXBzZVdoaXRlc3BhY2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvW1xcc1xceGEwXSsvZyxcIiBcIikucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX07Z29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZT1nb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlO2dvb2cuc3RyaW5nLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWEubGVuZ3RofTtnb29nLnN0cmluZy5pc0VtcHR5PWdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2U7Z29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZVNhZmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcubWFrZVNhZmUoYSkpfTtcbmdvb2cuc3RyaW5nLmlzRW1wdHlTYWZlPWdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2VTYWZlO2dvb2cuc3RyaW5nLmlzQnJlYWtpbmdXaGl0ZXNwYWNlPWZ1bmN0aW9uKGEpe3JldHVybiEvW15cXHRcXG5cXHIgXS8udGVzdChhKX07Z29vZy5zdHJpbmcuaXNBbHBoYT1mdW5jdGlvbihhKXtyZXR1cm4hL1teYS16QS1aXS8udGVzdChhKX07Z29vZy5zdHJpbmcuaXNOdW1lcmljPWZ1bmN0aW9uKGEpe3JldHVybiEvW14wLTldLy50ZXN0KGEpfTtnb29nLnN0cmluZy5pc0FscGhhTnVtZXJpYz1mdW5jdGlvbihhKXtyZXR1cm4hL1teYS16QS1aMC05XS8udGVzdChhKX07Z29vZy5zdHJpbmcuaXNTcGFjZT1mdW5jdGlvbihhKXtyZXR1cm5cIiBcIj09YX07Z29vZy5zdHJpbmcuaXNVbmljb2RlQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gMT09YS5sZW5ndGgmJlwiIFwiPD1hJiZcIn5cIj49YXx8XCJcXHUwMDgwXCI8PWEmJlwiXFx1ZmZmZFwiPj1hfTtcbmdvb2cuc3RyaW5nLnN0cmlwTmV3bGluZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKSsvZyxcIiBcIil9O2dvb2cuc3RyaW5nLmNhbm9uaWNhbGl6ZU5ld2xpbmVzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikvZyxcIlxcblwiKX07Z29vZy5zdHJpbmcubm9ybWFsaXplV2hpdGVzcGFjZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXHhhMHxcXHMvZyxcIiBcIil9O2dvb2cuc3RyaW5nLm5vcm1hbGl6ZVNwYWNlcz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXHhhMHxbIFxcdF0rL2csXCIgXCIpfTtnb29nLnN0cmluZy5jb2xsYXBzZUJyZWFraW5nU3BhY2VzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1tcXHRcXHJcXG4gXSsvZyxcIiBcIikucmVwbGFjZSgvXltcXHRcXHJcXG4gXSt8W1xcdFxcclxcbiBdKyQvZyxcIlwiKX07Z29vZy5zdHJpbmcudHJpbT1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltO1xuZ29vZy5zdHJpbmcudHJpbUxlZnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXltcXHNcXHhhMF0rLyxcIlwiKX07Z29vZy5zdHJpbmcudHJpbVJpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1tcXHNcXHhhMF0rJC8sXCJcIil9O2dvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTtcbmdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV89ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PWIpcmV0dXJuIDA7aWYoIWEpcmV0dXJuLTE7aWYoIWIpcmV0dXJuIDE7Zm9yKHZhciBkPWEudG9Mb3dlckNhc2UoKS5tYXRjaChjKSxlPWIudG9Mb3dlckNhc2UoKS5tYXRjaChjKSxmPU1hdGgubWluKGQubGVuZ3RoLGUubGVuZ3RoKSxnPTA7ZzxmO2crKyl7Yz1kW2ddO3ZhciBoPWVbZ107aWYoYyE9aClyZXR1cm4gYT1wYXJzZUludChjLDEwKSwhaXNOYU4oYSkmJihiPXBhcnNlSW50KGgsMTApLCFpc05hTihiKSYmYS1iKT9hLWI6YzxoPy0xOjF9cmV0dXJuIGQubGVuZ3RoIT1lLmxlbmd0aD9kLmxlbmd0aC1lLmxlbmd0aDphPGI/LTE6MX07Z29vZy5zdHJpbmcuaW50QXdhcmVDb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV8oYSxiLC9cXGQrfFxcRCsvZyl9O1xuZ29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXyhhLGIsL1xcZCt8XFwuXFxkK3xcXEQrL2cpfTtnb29nLnN0cmluZy5udW1lcmF0ZUNvbXBhcmU9Z29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmU7Z29vZy5zdHJpbmcudXJsRW5jb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGEpKX07Z29vZy5zdHJpbmcudXJsRGVjb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpfTtnb29nLnN0cmluZy5uZXdMaW5lVG9Ccj1nb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccjtcbmdvb2cuc3RyaW5nLmh0bWxFc2NhcGU9ZnVuY3Rpb24oYSxiKXthPWdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoYSxiKTtnb29nLnN0cmluZy5ERVRFQ1RfRE9VQkxFX0VTQ0FQSU5HJiYoYT1hLnJlcGxhY2UoZ29vZy5zdHJpbmcuRV9SRV8sXCImIzEwMTtcIikpO3JldHVybiBhfTtnb29nLnN0cmluZy5FX1JFXz0vZS9nO2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGEsXCImXCIpPyFnb29nLnN0cmluZy5GT1JDRV9OT05fRE9NX0hUTUxfVU5FU0NBUElORyYmXCJkb2N1bWVudFwiaW4gZ29vZy5nbG9iYWw/Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tXyhhKTpnb29nLnN0cmluZy51bmVzY2FwZVB1cmVYbWxFbnRpdGllc18oYSk6YX07XG5nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzV2l0aERvY3VtZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGEsXCImXCIpP2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV8oYSxiKTphfTtcbmdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV89ZnVuY3Rpb24oYSxiKXt2YXIgYz17XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJ307dmFyIGQ9Yj9iLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik6Z29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gYS5yZXBsYWNlKGdvb2cuc3RyaW5nLkhUTUxfRU5USVRZX1BBVFRFUk5fLGZ1bmN0aW9uKGEsYil7dmFyIGU9Y1thXTtpZihlKXJldHVybiBlO1wiI1wiPT1iLmNoYXJBdCgwKSYmKGI9TnVtYmVyKFwiMFwiK2Iuc3Vic3RyKDEpKSxpc05hTihiKXx8KGU9U3RyaW5nLmZyb21DaGFyQ29kZShiKSkpO2V8fChnb29nLmRvbS5zYWZlLnNldElubmVySHRtbChkLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlSHRtbEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdChnb29nLnN0cmluZy5Db25zdC5mcm9tKFwiU2luZ2xlIEhUTUwgZW50aXR5LlwiKSxcbmErXCIgXCIpKSxlPWQuZmlyc3RDaGlsZC5ub2RlVmFsdWUuc2xpY2UoMCwtMSkpO3JldHVybiBjW2FdPWV9KX07Z29vZy5zdHJpbmcudW5lc2NhcGVQdXJlWG1sRW50aXRpZXNfPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLyYoW147XSspOy9nLGZ1bmN0aW9uKGEsYyl7c3dpdGNoKGMpe2Nhc2UgXCJhbXBcIjpyZXR1cm5cIiZcIjtjYXNlIFwibHRcIjpyZXR1cm5cIjxcIjtjYXNlIFwiZ3RcIjpyZXR1cm5cIj5cIjtjYXNlIFwicXVvdFwiOnJldHVybidcIic7ZGVmYXVsdDpyZXR1cm5cIiNcIiE9Yy5jaGFyQXQoMCl8fChjPU51bWJlcihcIjBcIitjLnN1YnN0cigxKSksaXNOYU4oYykpP2E6U3RyaW5nLmZyb21DaGFyQ29kZShjKX19KX07Z29vZy5zdHJpbmcuSFRNTF9FTlRJVFlfUEFUVEVSTl89LyYoW147XFxzPCZdKyk7Py9nO2dvb2cuc3RyaW5nLndoaXRlc3BhY2VFc2NhcGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5zdHJpbmcubmV3TGluZVRvQnIoYS5yZXBsYWNlKC8gIC9nLFwiICYjMTYwO1wiKSxiKX07XG5nb29nLnN0cmluZy5wcmVzZXJ2ZVNwYWNlcz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC8oXnxbXFxuIF0pIC9nLFwiJDFcIitnb29nLnN0cmluZy5Vbmljb2RlLk5CU1ApfTtnb29nLnN0cmluZy5zdHJpcFF1b3Rlcz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyl7dmFyIGU9MT09Yz9iOmIuY2hhckF0KGQpO2lmKGEuY2hhckF0KDApPT1lJiZhLmNoYXJBdChhLmxlbmd0aC0xKT09ZSlyZXR1cm4gYS5zdWJzdHJpbmcoMSxhLmxlbmd0aC0xKX1yZXR1cm4gYX07Z29vZy5zdHJpbmcudHJ1bmNhdGU9ZnVuY3Rpb24oYSxiLGMpe2MmJihhPWdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXMoYSkpO2EubGVuZ3RoPmImJihhPWEuc3Vic3RyaW5nKDAsYi0zKStcIi4uLlwiKTtjJiYoYT1nb29nLnN0cmluZy5odG1sRXNjYXBlKGEpKTtyZXR1cm4gYX07XG5nb29nLnN0cmluZy50cnVuY2F0ZU1pZGRsZT1mdW5jdGlvbihhLGIsYyxkKXtjJiYoYT1nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzKGEpKTtpZihkJiZhLmxlbmd0aD5iKXtkPmImJihkPWIpO3ZhciBlPWEubGVuZ3RoLWQ7YT1hLnN1YnN0cmluZygwLGItZCkrXCIuLi5cIithLnN1YnN0cmluZyhlKX1lbHNlIGEubGVuZ3RoPmImJihkPU1hdGguZmxvb3IoYi8yKSxlPWEubGVuZ3RoLWQsYT1hLnN1YnN0cmluZygwLGQrYiUyKStcIi4uLlwiK2Euc3Vic3RyaW5nKGUpKTtjJiYoYT1nb29nLnN0cmluZy5odG1sRXNjYXBlKGEpKTtyZXR1cm4gYX07Z29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzXz17XCJcXHgwMFwiOlwiXFxcXDBcIixcIlxcYlwiOlwiXFxcXGJcIixcIlxcZlwiOlwiXFxcXGZcIixcIlxcblwiOlwiXFxcXG5cIixcIlxcclwiOlwiXFxcXHJcIixcIlxcdFwiOlwiXFxcXHRcIixcIlxceDBCXCI6XCJcXFxceDBCXCIsJ1wiJzonXFxcXFwiJyxcIlxcXFxcIjpcIlxcXFxcXFxcXCIsXCI8XCI6XCJcXFxcdTAwM0NcIn07Z29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV89e1wiJ1wiOlwiXFxcXCdcIn07XG5nb29nLnN0cmluZy5xdW90ZT1mdW5jdGlvbihhKXthPVN0cmluZyhhKTtmb3IodmFyIGI9WydcIiddLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YS5jaGFyQXQoYyksZT1kLmNoYXJDb2RlQXQoMCk7YltjKzFdPWdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc19bZF18fCgzMTxlJiYxMjc+ZT9kOmdvb2cuc3RyaW5nLmVzY2FwZUNoYXIoZCkpfWIucHVzaCgnXCInKTtyZXR1cm4gYi5qb2luKFwiXCIpfTtnb29nLnN0cmluZy5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliW2NdPWdvb2cuc3RyaW5nLmVzY2FwZUNoYXIoYS5jaGFyQXQoYykpO3JldHVybiBiLmpvaW4oXCJcIil9O1xuZ29vZy5zdHJpbmcuZXNjYXBlQ2hhcj1mdW5jdGlvbihhKXtpZihhIGluIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfKXJldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1thXTtpZihhIGluIGdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc18pcmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2FdPWdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc19bYV07dmFyIGI9YS5jaGFyQ29kZUF0KDApO2lmKDMxPGImJjEyNz5iKXZhciBjPWE7ZWxzZXtpZigyNTY+Yil7aWYoYz1cIlxcXFx4XCIsMTY+Ynx8MjU2PGIpYys9XCIwXCJ9ZWxzZSBjPVwiXFxcXHVcIiw0MDk2PmImJihjKz1cIjBcIik7Yys9Yi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1yZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bYV09Y307Z29vZy5zdHJpbmcuY29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnM7Z29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM7XG5nb29nLnN0cmluZy5jb3VudE9mPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJmI/YS5zcGxpdChiKS5sZW5ndGgtMTowfTtnb29nLnN0cmluZy5yZW1vdmVBdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YTswPD1iJiZiPGEubGVuZ3RoJiYwPGMmJihkPWEuc3Vic3RyKDAsYikrYS5zdWJzdHIoYitjLGEubGVuZ3RoLWItYykpO3JldHVybiBkfTtnb29nLnN0cmluZy5yZW1vdmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5yZXBsYWNlKGIsXCJcIil9O2dvb2cuc3RyaW5nLnJlbW92ZUFsbD1mdW5jdGlvbihhLGIpe2I9bmV3IFJlZ0V4cChnb29nLnN0cmluZy5yZWdFeHBFc2NhcGUoYiksXCJnXCIpO3JldHVybiBhLnJlcGxhY2UoYixcIlwiKX07Z29vZy5zdHJpbmcucmVwbGFjZUFsbD1mdW5jdGlvbihhLGIsYyl7Yj1uZXcgUmVnRXhwKGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZShiKSxcImdcIik7cmV0dXJuIGEucmVwbGFjZShiLGMucmVwbGFjZSgvXFwkL2csXCIkJCQkXCIpKX07XG5nb29nLnN0cmluZy5yZWdFeHBFc2NhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKS5yZXBsYWNlKC8oWy0oKVxcW1xcXXt9Kz8qLiRcXF58LDojPCFcXFxcXSkvZyxcIlxcXFwkMVwiKS5yZXBsYWNlKC9cXHgwOC9nLFwiXFxcXHgwOFwiKX07Z29vZy5zdHJpbmcucmVwZWF0PVN0cmluZy5wcm90b3R5cGUucmVwZWF0P2Z1bmN0aW9uKGEsYil7cmV0dXJuIGEucmVwZWF0KGIpfTpmdW5jdGlvbihhLGIpe3JldHVybiBBcnJheShiKzEpLmpvaW4oYSl9O2dvb2cuc3RyaW5nLnBhZE51bWJlcj1mdW5jdGlvbihhLGIsYyl7YT1nb29nLmlzRGVmKGMpP2EudG9GaXhlZChjKTpTdHJpbmcoYSk7Yz1hLmluZGV4T2YoXCIuXCIpOy0xPT1jJiYoYz1hLmxlbmd0aCk7cmV0dXJuIGdvb2cuc3RyaW5nLnJlcGVhdChcIjBcIixNYXRoLm1heCgwLGItYykpK2F9O2dvb2cuc3RyaW5nLm1ha2VTYWZlPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP1wiXCI6U3RyaW5nKGEpfTtcbmdvb2cuc3RyaW5nLmJ1aWxkU3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cyxcIlwiKX07Z29vZy5zdHJpbmcuZ2V0UmFuZG9tU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNikrTWF0aC5hYnMoTWF0aC5mbG9vcigyMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCkpXmdvb2cubm93KCkpLnRvU3RyaW5nKDM2KX07Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucztnb29nLnN0cmluZy5oYXNoQ29kZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDsrK2MpYj0zMSpiK2EuY2hhckNvZGVBdChjKT4+PjA7cmV0dXJuIGJ9O2dvb2cuc3RyaW5nLnVuaXF1ZVN0cmluZ0NvdW50ZXJfPTIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKXwwO1xuZ29vZy5zdHJpbmcuY3JlYXRlVW5pcXVlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJnb29nX1wiK2dvb2cuc3RyaW5nLnVuaXF1ZVN0cmluZ0NvdW50ZXJfKyt9O2dvb2cuc3RyaW5nLnRvTnVtYmVyPWZ1bmN0aW9uKGEpe3ZhciBiPU51bWJlcihhKTtyZXR1cm4gMD09YiYmZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShhKT9OYU46Yn07Z29vZy5zdHJpbmcuaXNMb3dlckNhbWVsQ2FzZT1mdW5jdGlvbihhKXtyZXR1cm4vXlthLXpdKyhbQS1aXVthLXpdKikqJC8udGVzdChhKX07Z29vZy5zdHJpbmcuaXNVcHBlckNhbWVsQ2FzZT1mdW5jdGlvbihhKXtyZXR1cm4vXihbQS1aXVthLXpdKikrJC8udGVzdChhKX07Z29vZy5zdHJpbmcudG9DYW1lbENhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKS5yZXBsYWNlKC9cXC0oW2Etel0pL2csZnVuY3Rpb24oYSxjKXtyZXR1cm4gYy50b1VwcGVyQ2FzZSgpfSl9O1xuZ29vZy5zdHJpbmcudG9TZWxlY3RvckNhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKS5yZXBsYWNlKC8oW0EtWl0pL2csXCItJDFcIikudG9Mb3dlckNhc2UoKX07Z29vZy5zdHJpbmcudG9UaXRsZUNhc2U9ZnVuY3Rpb24oYSxiKXtiPWdvb2cuaXNTdHJpbmcoYik/Z29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKGIpOlwiXFxcXHNcIjtyZXR1cm4gYS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXlwiKyhiP1wifFtcIitiK1wiXStcIjpcIlwiKStcIikoW2Etel0pXCIsXCJnXCIpLGZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gYitlLnRvVXBwZXJDYXNlKCl9KX07Z29vZy5zdHJpbmcuY2FwaXRhbGl6ZT1mdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEuY2hhckF0KDApKS50b1VwcGVyQ2FzZSgpK1N0cmluZyhhLnN1YnN0cigxKSkudG9Mb3dlckNhc2UoKX07XG5nb29nLnN0cmluZy5wYXJzZUludD1mdW5jdGlvbihhKXtpc0Zpbml0ZShhKSYmKGE9U3RyaW5nKGEpKTtyZXR1cm4gZ29vZy5pc1N0cmluZyhhKT8vXlxccyotPzB4L2kudGVzdChhKT9wYXJzZUludChhLDE2KTpwYXJzZUludChhLDEwKTpOYU59O2dvb2cuc3RyaW5nLnNwbGl0TGltaXQ9ZnVuY3Rpb24oYSxiLGMpe2E9YS5zcGxpdChiKTtmb3IodmFyIGQ9W107MDxjJiZhLmxlbmd0aDspZC5wdXNoKGEuc2hpZnQoKSksYy0tO2EubGVuZ3RoJiZkLnB1c2goYS5qb2luKGIpKTtyZXR1cm4gZH07Z29vZy5zdHJpbmcubGFzdENvbXBvbmVudD1mdW5jdGlvbihhLGIpe2lmKGIpXCJzdHJpbmdcIj09dHlwZW9mIGImJihiPVtiXSk7ZWxzZSByZXR1cm4gYTtmb3IodmFyIGM9LTEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWlmKFwiXCIhPWJbZF0pe3ZhciBlPWEubGFzdEluZGV4T2YoYltkXSk7ZT5jJiYoYz1lKX1yZXR1cm4tMT09Yz9hOmEuc2xpY2UoYysxKX07XG5nb29nLnN0cmluZy5lZGl0RGlzdGFuY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPVtdO2lmKGE9PWIpcmV0dXJuIDA7aWYoIWEubGVuZ3RofHwhYi5sZW5ndGgpcmV0dXJuIE1hdGgubWF4KGEubGVuZ3RoLGIubGVuZ3RoKTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoKzE7ZSsrKWNbZV09ZTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtkWzBdPWUrMTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKylkW2YrMV09TWF0aC5taW4oZFtmXSsxLGNbZisxXSsxLGNbZl0rTnVtYmVyKGFbZV0hPWJbZl0pKTtmb3IoZj0wO2Y8Yy5sZW5ndGg7ZisrKWNbZl09ZFtmXX1yZXR1cm4gZFtiLmxlbmd0aF19O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lPXt9O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzUHJlc3RvPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlByZXN0b1wiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJXZWJLaXRcIikmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNHZWNrbz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJHZWNrb1wiKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0KCkmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1RyaWRlbnQoKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7aWYoYSl7YT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZXh0cmFjdFZlcnNpb25UdXBsZXMoYSk7dmFyIGI9Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0RW5naW5lVHVwbGVfKGEpO2lmKGIpcmV0dXJuXCJHZWNrb1wiPT1iWzBdP2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb25Gb3JLZXlfKGEsXCJGaXJlZm94XCIpOmJbMV07YT1hWzBdO3ZhciBjO2lmKGEmJihjPWFbMl0pJiYoYz0vVHJpZGVudFxcLyhbXlxccztdKykvLmV4ZWMoYykpKXJldHVybiBjWzFdfXJldHVyblwiXCJ9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0RW5naW5lVHVwbGVfPWZ1bmN0aW9uKGEpe2lmKCFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKSlyZXR1cm4gYVsxXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXTtpZihcIkVkZ2VcIj09Y1swXSlyZXR1cm4gY319O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGEpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbigpLGEpfTtnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uRm9yS2V5Xz1mdW5jdGlvbihhLGIpe3JldHVybihhPWdvb2cuYXJyYXkuZmluZChhLGZ1bmN0aW9uKGEpe3JldHVybiBiPT1hWzBdfSkpJiZhWzFdfHxcIlwifTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtPXt9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIil9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQb2RcIil9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBob25lXCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBvZFwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCl9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTWFjaW50b3NoXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTGludXg9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTGludXhcIil9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIldpbmRvd3NcIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyT1NcIil9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVjYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyS2V5XCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkthaU9TXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzR28yUGhvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkdBRlBcIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7dmFyIGE9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpLGI9XCJcIjtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cygpPyhiPS9XaW5kb3dzICg/Ok5UfFBob25lKSAoWzAtOS5dKykvLGI9KGE9Yi5leGVjKGEpKT9hWzFdOlwiMC4wXCIpOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKT8oYj0vKD86aVBob25lfGlQb2R8aVBhZHxDUFUpXFxzK09TXFxzKyhcXFMrKS8sYj0oYT1iLmV4ZWMoYSkpJiZhWzFdLnJlcGxhY2UoL18vZyxcIi5cIikpOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2goKT8oYj0vTWFjIE9TIFggKFswLTlfLl0rKS8sYj0oYT1iLmV4ZWMoYSkpP2FbMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIjEwXCIpOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNLYWlPUygpPyhiPS8oPzpLYWlPUylcXC8oXFxTKykvaSxcbmI9KGE9Yi5leGVjKGEpKSYmYVsxXSk6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0FuZHJvaWQoKT8oYj0vQW5kcm9pZFxccysoW15cXCk7XSspKFxcKXw7KS8sYj0oYT1iLmV4ZWMoYSkpJiZhWzFdKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lT1MoKSYmKGI9Lyg/OkNyT1NcXHMrKD86aTY4Nnx4ODZfNjQpXFxzKyhbMC05Ll0rKSkvLGI9KGE9Yi5leGVjKGEpKSYmYVsxXSk7cmV0dXJuIGJ8fFwiXCJ9O2dvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmdldFZlcnNpb24oKSxhKX07Z29vZy5yZWZsZWN0PXt9O2dvb2cucmVmbGVjdC5vYmplY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYn07Z29vZy5yZWZsZWN0Lm9iamVjdFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGF9O2dvb2cucmVmbGVjdC5zaW5rVmFsdWU9ZnVuY3Rpb24oYSl7Z29vZy5yZWZsZWN0LnNpbmtWYWx1ZVtcIiBcIl0oYSk7cmV0dXJuIGF9O2dvb2cucmVmbGVjdC5zaW5rVmFsdWVbXCIgXCJdPWdvb2cubnVsbEZ1bmN0aW9uO2dvb2cucmVmbGVjdC5jYW5BY2Nlc3NQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RyeXtyZXR1cm4gZ29vZy5yZWZsZWN0LnNpbmtWYWx1ZShhW2JdKSwhMH1jYXRjaChjKXt9cmV0dXJuITF9O2dvb2cucmVmbGVjdC5jYWNoZT1mdW5jdGlvbihhLGIsYyxkKXtkPWQ/ZChiKTpiO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxkKT9hW2RdOmFbZF09YyhiKX07Z29vZy51c2VyQWdlbnQ9e307Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9FREdFPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLTz0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0VCS0lUPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQT0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5ZX1ZFUlNJT049ITE7Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBO2dvb2cudXNlckFnZW50LmdldFVzZXJBZ2VudFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCl9O1xuZ29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5nbG9iYWwubmF2aWdhdG9yfHxudWxsfTtnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKX07Z29vZy51c2VyQWdlbnQuT1BFUkE9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhKCk7Z29vZy51c2VyQWdlbnQuSUU9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCk7Z29vZy51c2VyQWdlbnQuRURHRT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRTpnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKTtcbmdvb2cudXNlckFnZW50LkVER0VfT1JfSUU9Z29vZy51c2VyQWdlbnQuRURHRXx8Z29vZy51c2VyQWdlbnQuSUU7Z29vZy51c2VyQWdlbnQuR0VDS089Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja28oKTtnb29nLnVzZXJBZ2VudC5XRUJLSVQ9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNXZWJLaXQoKTtnb29nLnVzZXJBZ2VudC5pc01vYmlsZV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuV0VCS0lUJiZnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNb2JpbGVcIil9O1xuZ29vZy51c2VyQWdlbnQuTU9CSUxFPWdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUfHxnb29nLnVzZXJBZ2VudC5pc01vYmlsZV8oKTtnb29nLnVzZXJBZ2VudC5TQUZBUkk9Z29vZy51c2VyQWdlbnQuV0VCS0lUO2dvb2cudXNlckFnZW50LmRldGVybWluZVBsYXRmb3JtXz1mdW5jdGlvbigpe3ZhciBhPWdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCk7cmV0dXJuIGEmJmEucGxhdGZvcm18fFwiXCJ9O2dvb2cudXNlckFnZW50LlBMQVRGT1JNPWdvb2cudXNlckFnZW50LmRldGVybWluZVBsYXRmb3JtXygpO2dvb2cudXNlckFnZW50LkFTU1VNRV9NQUM9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dJTkRPV1M9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9YMTE9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUQ9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORT0hMTtcbmdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9LQUlPUz0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfR08yUEhPTkU9ITE7Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9NQUN8fGdvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTElOVVh8fGdvb2cudXNlckFnZW50LkFTU1VNRV9YMTF8fGdvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q7Z29vZy51c2VyQWdlbnQuTUFDPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2goKTtcbmdvb2cudXNlckFnZW50LldJTkRPV1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzKCk7Z29vZy51c2VyQWdlbnQuaXNMZWdhY3lMaW51eF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0xpbnV4KCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUygpfTtnb29nLnVzZXJBZ2VudC5MSU5VWD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYOmdvb2cudXNlckFnZW50LmlzTGVnYWN5TGludXhfKCk7Z29vZy51c2VyQWdlbnQuaXNYMTFfPWZ1bmN0aW9uKCl7dmFyIGE9Z29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKTtyZXR1cm4hIWEmJmdvb2cuc3RyaW5nLmNvbnRhaW5zKGEuYXBwVmVyc2lvbnx8XCJcIixcIlgxMVwiKX07XG5nb29nLnVzZXJBZ2VudC5YMTE9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9YMTE6Z29vZy51c2VyQWdlbnQuaXNYMTFfKCk7Z29vZy51c2VyQWdlbnQuQU5EUk9JRD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0FuZHJvaWQoKTtnb29nLnVzZXJBZ2VudC5JUEhPTkU9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkU6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwaG9uZSgpO2dvb2cudXNlckFnZW50LklQQUQ9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCk7XG5nb29nLnVzZXJBZ2VudC5JUE9EPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZCgpO2dvb2cudXNlckFnZW50LklPUz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKTtnb29nLnVzZXJBZ2VudC5LQUlPUz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0tBSU9TOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNLYWlPUygpO2dvb2cudXNlckFnZW50LkdPMlBIT05FPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfR08yUEhPTkU6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0dvMlBob25lKCk7XG5nb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVWZXJzaW9uXz1mdW5jdGlvbigpe3ZhciBhPVwiXCIsYj1nb29nLnVzZXJBZ2VudC5nZXRWZXJzaW9uUmVnZXhSZXN1bHRfKCk7YiYmKGE9Yj9iWzFdOlwiXCIpO3JldHVybiBnb29nLnVzZXJBZ2VudC5JRSYmKGI9Z29vZy51c2VyQWdlbnQuZ2V0RG9jdW1lbnRNb2RlXygpLG51bGwhPWImJmI+cGFyc2VGbG9hdChhKSk/U3RyaW5nKGIpOmF9O1xuZ29vZy51c2VyQWdlbnQuZ2V0VmVyc2lvblJlZ2V4UmVzdWx0Xz1mdW5jdGlvbigpe3ZhciBhPWdvb2cudXNlckFnZW50LmdldFVzZXJBZ2VudFN0cmluZygpO2lmKGdvb2cudXNlckFnZW50LkdFQ0tPKXJldHVybi9ydjooW15cXCk7XSspKFxcKXw7KS8uZXhlYyhhKTtpZihnb29nLnVzZXJBZ2VudC5FREdFKXJldHVybi9FZGdlXFwvKFtcXGRcXC5dKykvLmV4ZWMoYSk7aWYoZ29vZy51c2VyQWdlbnQuSUUpcmV0dXJuL1xcYig/Ok1TSUV8cnYpWzogXShbXlxcKTtdKykoXFwpfDspLy5leGVjKGEpO2lmKGdvb2cudXNlckFnZW50LldFQktJVClyZXR1cm4vV2ViS2l0XFwvKFxcUyspLy5leGVjKGEpO2lmKGdvb2cudXNlckFnZW50Lk9QRVJBKXJldHVybi8oPzpWZXJzaW9uKVsgXFwvXT8oXFxTKykvLmV4ZWMoYSl9O2dvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV89ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gYT9hLmRvY3VtZW50TW9kZTp2b2lkIDB9O1xuZ29vZy51c2VyQWdlbnQuVkVSU0lPTj1nb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVWZXJzaW9uXygpO2dvb2cudXNlckFnZW50LmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGEsYil9O2dvb2cudXNlckFnZW50LmlzVmVyc2lvbk9ySGlnaGVyQ2FjaGVfPXt9O2dvb2cudXNlckFnZW50LmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5ZX1ZFUlNJT058fGdvb2cucmVmbGVjdC5jYWNoZShnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlckNhY2hlXyxhLGZ1bmN0aW9uKCl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLnVzZXJBZ2VudC5WRVJTSU9OLGEpfSl9O2dvb2cudXNlckFnZW50LmlzVmVyc2lvbj1nb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcjtcbmdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlT3JIaWdoZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIE51bWJlcihnb29nLnVzZXJBZ2VudC5ET0NVTUVOVF9NT0RFKT49YX07Z29vZy51c2VyQWdlbnQuaXNEb2N1bWVudE1vZGU9Z29vZy51c2VyQWdlbnQuaXNEb2N1bWVudE1vZGVPckhpZ2hlcjtnb29nLnVzZXJBZ2VudC5ET0NVTUVOVF9NT0RFPWZ1bmN0aW9uKCl7aWYoZ29vZy5nbG9iYWwuZG9jdW1lbnQmJmdvb2cudXNlckFnZW50LklFKXJldHVybiBnb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfKCl9KCk7Z29vZy51c2VyQWdlbnQucHJvZHVjdD17fTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YPSExO2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQSE9ORT0hMTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEFEPSExO2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUQ9ITE7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FPSExO2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX1NBRkFSST0hMTtcbmdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJO2dvb2cudXNlckFnZW50LnByb2R1Y3QuT1BFUkE9Z29vZy51c2VyQWdlbnQuT1BFUkE7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5JRT1nb29nLnVzZXJBZ2VudC5JRTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkVER0U9Z29vZy51c2VyQWdlbnQuRURHRTtcbmdvb2cudXNlckFnZW50LnByb2R1Y3QuRklSRUZPWD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1g6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRmlyZWZveCgpO2dvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKX07Z29vZy51c2VyQWdlbnQucHJvZHVjdC5JUEhPTkU9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU6Z29vZy51c2VyQWdlbnQucHJvZHVjdC5pc0lwaG9uZU9ySXBvZF8oKTtcbmdvb2cudXNlckFnZW50LnByb2R1Y3QuSVBBRD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwYWQoKTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFORFJPSUQ9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9BTkRST0lEOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0FuZHJvaWRCcm93c2VyKCk7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5DSFJPTUU9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9DSFJPTUU6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCk7XG5nb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzU2FmYXJpRGVza3RvcF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpKCkmJiFnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCl9O2dvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNTYWZhcmlEZXNrdG9wXygpO2dvb2cuY3J5cHQuYmFzZTY0PXt9O2dvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7Z29vZy5jcnlwdC5iYXNlNjQuRU5DT0RFRF9WQUxTPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIisvPVwiO2dvb2cuY3J5cHQuYmFzZTY0LkVOQ09ERURfVkFMU19XRUJTQUZFPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIi1fLlwiO2dvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0PXtERUZBVUxUOjAsTk9fUEFERElORzoxLFdFQlNBRkU6MixXRUJTQUZFX0RPVF9QQURESU5HOjMsV0VCU0FGRV9OT19QQURESU5HOjR9O2dvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc189XCI9LlwiO1xuZ29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXz1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZ29vZy5jcnlwdC5iYXNlNjQucGFkZGluZ0NoYXJzXyxhKX07Z29vZy5jcnlwdC5iYXNlNjQuYnl0ZVRvQ2hhck1hcHNfPXt9O2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPW51bGw7Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUXz1nb29nLnVzZXJBZ2VudC5HRUNLT3x8Z29vZy51c2VyQWdlbnQuV0VCS0lUJiYhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkl8fGdvb2cudXNlckFnZW50Lk9QRVJBO2dvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBnb29nLmdsb2JhbC5idG9hO1xuZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9ERUNPREVfPWdvb2cuY3J5cHQuYmFzZTY0LkFTU1VNRV9OQVRJVkVfU1VQUE9SVF98fCFnb29nLnVzZXJBZ2VudC5wcm9kdWN0LlNBRkFSSSYmIWdvb2cudXNlckFnZW50LklFJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBnb29nLmdsb2JhbC5hdG9iO1xuZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzQXJyYXlMaWtlKGEpLFwiZW5jb2RlQnl0ZUFycmF5IHRha2VzIGFuIGFycmF5IGFzIGEgcGFyYW1ldGVyXCIpO3ZvaWQgMD09PWImJihiPWdvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0LkRFRkFVTFQpO2dvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCk7Yj1nb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bYl07Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTMpe3ZhciBlPWFbZF0sZj1kKzE8YS5sZW5ndGgsZz1mP2FbZCsxXTowLGg9ZCsyPGEubGVuZ3RoLGs9aD9hW2QrMl06MCxsPWU+PjI7ZT0oZSYzKTw8NHxnPj40O2c9KGcmMTUpPDwyfGs+PjY7ayY9NjM7aHx8KGs9NjQsZnx8KGc9NjQpKTtjLnB1c2goYltsXSxiW2VdLGJbZ118fFwiXCIsYltrXXx8XCJcIil9cmV0dXJuIGMuam9pbihcIlwiKX07XG5nb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9FTkNPREVfJiYhYj9nb29nLmdsb2JhbC5idG9hKGEpOmdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShnb29nLmNyeXB0LnN0cmluZ1RvQnl0ZUFycmF5KGEpLGIpfTtnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0RFQ09ERV8mJiFiKXJldHVybiBnb29nLmdsb2JhbC5hdG9iKGEpO3ZhciBjPVwiXCI7Z29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfKGEsZnVuY3Rpb24oYSl7Yys9U3RyaW5nLmZyb21DaGFyQ29kZShhKX0pO3JldHVybiBjfTtcbmdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvQnl0ZUFycmF5PWZ1bmN0aW9uKGEsYil7dmFyIGM9W107Z29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfKGEsZnVuY3Rpb24oYSl7Yy5wdXNoKGEpfSk7cmV0dXJuIGN9O1xuZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cudXNlckFnZW50LklFfHxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcihcIjEwXCIpLFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5c1wiKTt2YXIgYj1hLmxlbmd0aCxjPTMqYi80O2MlMz9jPU1hdGguZmxvb3IoYyk6Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhhW2ItMV0pJiYoYz1nb29nLmNyeXB0LmJhc2U2NC5pc1BhZGRpbmdfKGFbYi0yXSk/Yy0yOmMtMSk7dmFyIGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhhLGZ1bmN0aW9uKGEpe2RbZSsrXT1hfSk7cmV0dXJuIGQuc3ViYXJyYXkoMCxlKX07XG5nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF89ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe2Zvcig7ZDxhLmxlbmd0aDspe3ZhciBjPWEuY2hhckF0KGQrKyksZT1nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tjXTtpZihudWxsIT1lKXJldHVybiBlO2lmKCFnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKGMpKXRocm93IEVycm9yKFwiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogXCIrYyk7fXJldHVybiBifWdvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCk7Zm9yKHZhciBkPTA7Oyl7dmFyIGU9YygtMSksZj1jKDApLGc9Yyg2NCksaD1jKDY0KTtpZig2ND09PWgmJi0xPT09ZSlicmVhaztiKGU8PDJ8Zj4+NCk7NjQhPWcmJihiKGY8PDQmMjQwfGc+PjIpLDY0IT1oJiZiKGc8PDYmMTkyfGgpKX19O1xuZ29vZy5jcnlwdC5iYXNlNjQuaW5pdF89ZnVuY3Rpb24oKXtpZighZ29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF8pe2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPXt9O2Zvcih2YXIgYT1nb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl8uc3BsaXQoXCJcIiksYj1bXCIrLz1cIixcIisvXCIsXCItXz1cIixcIi1fLlwiLFwiLV9cIl0sYz0wOzU+YztjKyspe3ZhciBkPWEuY29uY2F0KGJbY10uc3BsaXQoXCJcIikpO2dvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzX1tjXT1kO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdLGc9Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bZl07dm9pZCAwPT09Zz9nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tmXT1lOmdvb2cuYXNzZXJ0cy5hc3NlcnQoZz09PWUpfX19fTtqc3BiLnV0aWxzPXt9O2pzcGIudXRpbHMuc3BsaXQ2NExvdz0wO2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MDtqc3BiLnV0aWxzLnNwbGl0VWludDY0PWZ1bmN0aW9uKGEpe3ZhciBiPWE+Pj4wO2E9TWF0aC5mbG9vcigoYS1iKS9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpPj4+MDtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9Yjtqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWF9O2pzcGIudXRpbHMuc3BsaXRJbnQ2ND1mdW5jdGlvbihhKXt2YXIgYj0wPmE7YT1NYXRoLmFicyhhKTt2YXIgYz1hPj4+MDthPU1hdGguZmxvb3IoKGEtYykvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTthPj4+PTA7YiYmKGE9fmE+Pj4wLGM9KH5jPj4+MCkrMSw0Mjk0OTY3Mjk1PGMmJihjPTAsYSsrLDQyOTQ5NjcyOTU8YSYmKGE9MCkpKTtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9Yztqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWF9O1xuanNwYi51dGlscy5zcGxpdFppZ3phZzY0PWZ1bmN0aW9uKGEpe3ZhciBiPTA+YTthPTIqTWF0aC5hYnMoYSk7anNwYi51dGlscy5zcGxpdFVpbnQ2NChhKTthPWpzcGIudXRpbHMuc3BsaXQ2NExvdzt2YXIgYz1qc3BiLnV0aWxzLnNwbGl0NjRIaWdoO2ImJigwPT1hPzA9PWM/Yz1hPTQyOTQ5NjcyOTU6KGMtLSxhPTQyOTQ5NjcyOTUpOmEtLSk7anNwYi51dGlscy5zcGxpdDY0TG93PWE7anNwYi51dGlscy5zcGxpdDY0SGlnaD1jfTtcbmpzcGIudXRpbHMuc3BsaXRGbG9hdDMyPWZ1bmN0aW9uKGEpe3ZhciBiPTA+YT8xOjA7YT1iPy1hOmE7aWYoMD09PWEpMDwxL2E/KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MCk6KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MjE0NzQ4MzY0OCk7ZWxzZSBpZihpc05hTihhKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PTIxNDc0ODM2NDc7ZWxzZSBpZihhPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KGI8PDMxfDIxMzkwOTUwNDApPj4+MDtlbHNlIGlmKGE8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NSU4pYT1NYXRoLnJvdW5kKGEvTWF0aC5wb3coMiwtMTQ5KSksanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0oYjw8MzF8XG5hKT4+PjA7ZWxzZXt2YXIgYz1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4yKTthKj1NYXRoLnBvdygyLC1jKTthPU1hdGgucm91bmQoYSpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMjMpJjgzODg2MDc7anNwYi51dGlscy5zcGxpdDY0SGlnaD0wO2pzcGIudXRpbHMuc3BsaXQ2NExvdz0oYjw8MzF8YysxMjc8PDIzfGEpPj4+MH19O1xuanNwYi51dGlscy5zcGxpdEZsb2F0NjQ9ZnVuY3Rpb24oYSl7dmFyIGI9MD5hPzE6MDthPWI/LWE6YTtpZigwPT09YSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTA8MS9hPzA6MjE0NzQ4MzY0OCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtlbHNlIGlmKGlzTmFOKGEpKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MjE0NzQ4MzY0Nyxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9NDI5NDk2NzI5NTtlbHNlIGlmKGE+anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgpanNwYi51dGlscy5zcGxpdDY0SGlnaD0oYjw8MzF8MjE0NjQzNTA3Mik+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wO2Vsc2UgaWYoYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01JTil7dmFyIGM9YS9NYXRoLnBvdygyLC0xMDc0KTthPWMvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyO2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KGI8PDMxfGEpPj4+MDtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9Yz4+PjB9ZWxzZXtjPVxuYTt2YXIgZD0wO2lmKDI8PWMpZm9yKDsyPD1jJiYxMDIzPmQ7KWQrKyxjLz0yO2Vsc2UgZm9yKDsxPmMmJi0xMDIyPGQ7KWMqPTIsZC0tO2M9YSpNYXRoLnBvdygyLC1kKTthPWMqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwJjEwNDg1NzU7Yz1jKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mj4+PjA7anNwYi51dGlscy5zcGxpdDY0SGlnaD0oYjw8MzF8ZCsxMDIzPDwyMHxhKT4+PjA7anNwYi51dGlscy5zcGxpdDY0TG93PWN9fTtcbmpzcGIudXRpbHMuc3BsaXRIYXNoNjQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jaGFyQ29kZUF0KDApLGM9YS5jaGFyQ29kZUF0KDEpLGQ9YS5jaGFyQ29kZUF0KDIpLGU9YS5jaGFyQ29kZUF0KDMpLGY9YS5jaGFyQ29kZUF0KDQpLGc9YS5jaGFyQ29kZUF0KDUpLGg9YS5jaGFyQ29kZUF0KDYpO2E9YS5jaGFyQ29kZUF0KDcpO2pzcGIudXRpbHMuc3BsaXQ2NExvdz1iKyhjPDw4KSsoZDw8MTYpKyhlPDwyNCk+Pj4wO2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9ZisoZzw8OCkrKGg8PDE2KSsoYTw8MjQpPj4+MH07anNwYi51dGlscy5qb2luVWludDY0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKyhhPj4+MCl9O1xuanNwYi51dGlscy5qb2luSW50NjQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iJjIxNDc0ODM2NDg7YyYmKGE9fmErMT4+PjAsYj1+Yj4+PjAsMD09YSYmKGI9YisxPj4+MCkpO2E9anNwYi51dGlscy5qb2luVWludDY0KGEsYik7cmV0dXJuIGM/LWE6YX07anNwYi51dGlscy50b1ppZ3phZzY0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iPj4zMTtyZXR1cm4gYyhhPDwxXmQsKGI8PDF8YT4+PjMxKV5kKX07anNwYi51dGlscy5qb2luWmlnemFnNjQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQoYSxiLGpzcGIudXRpbHMuam9pbkludDY0KX07anNwYi51dGlscy5mcm9tWmlnemFnNjQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPS0oYSYxKTtyZXR1cm4gYygoYT4+PjF8Yjw8MzEpXmQsYj4+PjFeZCl9O1xuanNwYi51dGlscy5qb2luRmxvYXQzMj1mdW5jdGlvbihhLGIpe2I9MiooYT4+MzEpKzE7dmFyIGM9YT4+PjIzJjI1NTthJj04Mzg4NjA3O3JldHVybiAyNTU9PWM/YT9OYU46SW5maW5pdHkqYjowPT1jP2IqTWF0aC5wb3coMiwtMTQ5KSphOmIqTWF0aC5wb3coMixjLTE1MCkqKGErTWF0aC5wb3coMiwyMykpfTtqc3BiLnV0aWxzLmpvaW5GbG9hdDY0PWZ1bmN0aW9uKGEsYil7dmFyIGM9MiooYj4+MzEpKzEsZD1iPj4+MjAmMjA0NzthPWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiooYiYxMDQ4NTc1KSthO3JldHVybiAyMDQ3PT1kP2E/TmFOOkluZmluaXR5KmM6MD09ZD9jKk1hdGgucG93KDIsLTEwNzQpKmE6YypNYXRoLnBvdygyLGQtMTA3NSkqKGEranNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyKX07XG5qc3BiLnV0aWxzLmpvaW5IYXNoNjQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhPj4+MCYyNTUsYT4+PjgmMjU1LGE+Pj4xNiYyNTUsYT4+PjI0JjI1NSxiPj4+MCYyNTUsYj4+PjgmMjU1LGI+Pj4xNiYyNTUsYj4+PjI0JjI1NSl9O2pzcGIudXRpbHMuRElHSVRTPVwiMDEyMzQ1Njc4OWFiY2RlZlwiLnNwbGl0KFwiXCIpO2pzcGIudXRpbHMuWkVST19DSEFSX0NPREVfPTQ4O2pzcGIudXRpbHMuQV9DSEFSX0NPREVfPTk3O1xuanNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2E9YT9TdHJpbmcoYSk6XCJcIjtyZXR1cm4gYj9cIjAwMDAwMDBcIi5zbGljZShhLmxlbmd0aCkrYTphfWlmKDIwOTcxNTE+PWIpcmV0dXJuXCJcIitqc3BiLnV0aWxzLmpvaW5VaW50NjQoYSxiKTt2YXIgZD0oYT4+PjI0fGI8PDgpPj4+MCYxNjc3NzIxNTtiPWI+PjE2JjY1NTM1O2E9KGEmMTY3NzcyMTUpKzY3NzcyMTYqZCs2NzEwNjU2KmI7ZCs9ODE0NzQ5NypiO2IqPTI7MUU3PD1hJiYoZCs9TWF0aC5mbG9vcihhLzFFNyksYSU9MUU3KTsxRTc8PWQmJihiKz1NYXRoLmZsb29yKGQvMUU3KSxkJT0xRTcpO3JldHVybiBjKGIsMCkrYyhkLGIpK2MoYSwxKX07XG5qc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9YiYyMTQ3NDgzNjQ4O2MmJihhPX5hKzE+Pj4wLGI9fmIrKDA9PWE/MTowKT4+PjApO2E9anNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGEsYik7cmV0dXJuIGM/XCItXCIrYTphfTtqc3BiLnV0aWxzLmhhc2g2NFRvRGVjaW1hbFN0cmluZz1mdW5jdGlvbihhLGIpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoYSk7YT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIGM9anNwYi51dGlscy5zcGxpdDY0SGlnaDtyZXR1cm4gYj9qc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKGEsYyk6anNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGEsYyl9O1xuanNwYi51dGlscy5oYXNoNjRBcnJheVRvRGVjaW1hbFN0cmluZ3M9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9QXJyYXkoYS5sZW5ndGgpLGQ9MDtkPGEubGVuZ3RoO2QrKyljW2RdPWpzcGIudXRpbHMuaGFzaDY0VG9EZWNpbWFsU3RyaW5nKGFbZF0sYik7cmV0dXJuIGN9O1xuanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe2Zvcih2YXIgYz0wOzg+YyYmKDEhPT1hfHwwPGIpO2MrKyliPWEqZVtjXStiLGVbY109YiYyNTUsYj4+Pj04fWZ1bmN0aW9uIGMoKXtmb3IodmFyIGE9MDs4PmE7YSsrKWVbYV09fmVbYV0mMjU1fWdvb2cuYXNzZXJ0cy5hc3NlcnQoMDxhLmxlbmd0aCk7dmFyIGQ9ITE7XCItXCI9PT1hWzBdJiYoZD0hMCxhPWEuc2xpY2UoMSkpO2Zvcih2YXIgZT1bMCwwLDAsMCwwLDAsMCwwXSxmPTA7ZjxhLmxlbmd0aDtmKyspYigxMCxhLmNoYXJDb2RlQXQoZiktanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV8pO2QmJihjKCksYigxLDEpKTtyZXR1cm4gZ29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZyhlKX07anNwYi51dGlscy5zcGxpdERlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oYSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChhKSl9O1xuanNwYi51dGlscy50b0hleERpZ2l0Xz1mdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgxMD5hP2pzcGIudXRpbHMuWkVST19DSEFSX0NPREVfK2E6anNwYi51dGlscy5BX0NIQVJfQ09ERV8tMTArYSl9O2pzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXz1mdW5jdGlvbihhKXtyZXR1cm4gYT49anNwYi51dGlscy5BX0NIQVJfQ09ERV8/YS1qc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXysxMDphLWpzcGIudXRpbHMuWkVST19DSEFSX0NPREVffTtqc3BiLnV0aWxzLmhhc2g2NFRvSGV4U3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5KDE4KTtiWzBdPVwiMFwiO2JbMV09XCJ4XCI7Zm9yKHZhciBjPTA7OD5jO2MrKyl7dmFyIGQ9YS5jaGFyQ29kZUF0KDctYyk7YlsyKmMrMl09anNwYi51dGlscy50b0hleERpZ2l0XyhkPj40KTtiWzIqYyszXT1qc3BiLnV0aWxzLnRvSGV4RGlnaXRfKGQmMTUpfXJldHVybiBiLmpvaW4oXCJcIil9O1xuanNwYi51dGlscy5oZXhTdHJpbmdUb0hhc2g2ND1mdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTtnb29nLmFzc2VydHMuYXNzZXJ0KDE4PT1hLmxlbmd0aCk7Z29vZy5hc3NlcnRzLmFzc2VydChcIjBcIj09YVswXSk7Z29vZy5hc3NlcnRzLmFzc2VydChcInhcIj09YVsxXSk7Zm9yKHZhciBiPVwiXCIsYz0wOzg+YztjKyspe3ZhciBkPWpzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXyhhLmNoYXJDb2RlQXQoMipjKzIpKSxlPWpzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXyhhLmNoYXJDb2RlQXQoMipjKzMpKTtiPVN0cmluZy5mcm9tQ2hhckNvZGUoMTYqZCtlKStifXJldHVybiBifTtcbmpzcGIudXRpbHMuaGFzaDY0VG9OdW1iZXI9ZnVuY3Rpb24oYSxiKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGEpO2E9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBjPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIGI/anNwYi51dGlscy5qb2luSW50NjQoYSxjKTpqc3BiLnV0aWxzLmpvaW5VaW50NjQoYSxjKX07anNwYi51dGlscy5udW1iZXJUb0hhc2g2ND1mdW5jdGlvbihhKXtqc3BiLnV0aWxzLnNwbGl0SW50NjQoYSk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkhhc2g2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O2pzcGIudXRpbHMuY291bnRWYXJpbnRzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MCxlPWI7ZTxjO2UrKylkKz1hW2VdPj43O3JldHVybiBjLWItZH07XG5qc3BiLnV0aWxzLmNvdW50VmFyaW50RmllbGRzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTA7ZD04KmQranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UO2lmKDEyOD5kKWZvcig7YjxjJiZhW2IrK109PWQ7KWZvcihlKys7Oyl7dmFyIGY9YVtiKytdO2lmKDA9PShmJjEyOCkpYnJlYWt9ZWxzZSBmb3IoO2I8Yzspe2ZvcihmPWQ7MTI4PGY7KXtpZihhW2JdIT0oZiYxMjd8MTI4KSlyZXR1cm4gZTtiKys7Zj4+PTd9aWYoYVtiKytdIT1mKWJyZWFrO2ZvcihlKys7Zj1hW2IrK10sMCE9KGYmMTI4KTspO31yZXR1cm4gZX07anNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPTA7aWYoMTI4PmQpZm9yKDtiPGMmJmFbYisrXT09ZDspZisrLGIrPWU7ZWxzZSBmb3IoO2I8Yzspe2Zvcih2YXIgZz1kOzEyODxnOyl7aWYoYVtiKytdIT0oZyYxMjd8MTI4KSlyZXR1cm4gZjtnPj49N31pZihhW2IrK10hPWcpYnJlYWs7ZisrO2IrPWV9cmV0dXJuIGZ9O1xuanNwYi51dGlscy5jb3VudEZpeGVkMzJGaWVsZHM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc18oYSxiLGMsOCpkK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIsNCl9O2pzcGIudXRpbHMuY291bnRGaXhlZDY0RmllbGRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGEsYixjLDgqZCtqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0LDgpfTtcbmpzcGIudXRpbHMuY291bnREZWxpbWl0ZWRGaWVsZHM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MDtmb3IoZD04KmQranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEO2I8Yzspe2Zvcih2YXIgZj1kOzEyODxmOyl7aWYoYVtiKytdIT0oZiYxMjd8MTI4KSlyZXR1cm4gZTtmPj49N31pZihhW2IrK10hPWYpYnJlYWs7ZSsrO2Zvcih2YXIgZz0wLGg9MTtmPWFbYisrXSxnKz0oZiYxMjcpKmgsaCo9MTI4LDAhPShmJjEyOCk7KTtiKz1nfXJldHVybiBlfTtqc3BiLnV0aWxzLmRlYnVnQnl0ZXNUb1RleHRGb3JtYXQ9ZnVuY3Rpb24oYSl7dmFyIGI9J1wiJztpZihhKXthPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShhKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliKz1cIlxcXFx4XCIsMTY+YVtjXSYmKGIrPVwiMFwiKSxiKz1hW2NdLnRvU3RyaW5nKDE2KX1yZXR1cm4gYisnXCInfTtcbmpzcGIudXRpbHMuZGVidWdTY2FsYXJUb1RleHRGb3JtYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhP2dvb2cuc3RyaW5nLnF1b3RlKGEpOmEudG9TdHJpbmcoKX07anNwYi51dGlscy5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2lmKDI1NTxkKXRocm93IEVycm9yKFwiQ29udmVyc2lvbiBlcnJvcjogc3RyaW5nIGNvbnRhaW5zIGNvZGVwb2ludCBvdXRzaWRlIG9mIGJ5dGUgcmFuZ2VcIik7YltjXT1kfXJldHVybiBifTtcbmpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheT1mdW5jdGlvbihhKXtpZihhLmNvbnN0cnVjdG9yPT09VWludDhBcnJheSlyZXR1cm4gYTtpZihhLmNvbnN0cnVjdG9yPT09QXJyYXlCdWZmZXJ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXImJmEuY29uc3RydWN0b3I9PT1CdWZmZXJ8fGEuY29uc3RydWN0b3I9PT1BcnJheSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoYS5jb25zdHJ1Y3Rvcj09PVN0cmluZylyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5KGEpO2dvb2cuYXNzZXJ0cy5mYWlsKFwiVHlwZSBub3QgY29udmVydGlibGUgdG8gVWludDhBcnJheS5cIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfTtqc3BiLkJpbmFyeURlY29kZXI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYnl0ZXNfPW51bGw7dGhpcy5jdXJzb3JfPXRoaXMuZW5kXz10aGlzLnN0YXJ0Xz0wO3RoaXMuZXJyb3JfPSExO2EmJnRoaXMuc2V0QmxvY2soYSxiLGMpfTtqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV89W107anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jPWZ1bmN0aW9uKGEsYixjKXtpZihqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgZD1qc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ucG9wKCk7YSYmZC5zZXRCbG9jayhhLGIsYyk7cmV0dXJuIGR9cmV0dXJuIG5ldyBqc3BiLkJpbmFyeURlY29kZXIoYSxiLGMpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCk7MTAwPmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgmJmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKHRoaXMuYnl0ZXNfLHRoaXMuc3RhcnRfLHRoaXMuZW5kXy10aGlzLnN0YXJ0Xyl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmJ5dGVzXz1udWxsO3RoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MDt0aGlzLmVycm9yXz0hMX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ieXRlc199O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRCbG9jaz1mdW5jdGlvbihhLGIsYyl7dGhpcy5ieXRlc189anNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5KGEpO3RoaXMuc3RhcnRfPXZvaWQgMCE9PWI/YjowO3RoaXMuZW5kXz12b2lkIDAhPT1jP3RoaXMuc3RhcnRfK2M6dGhpcy5ieXRlc18ubGVuZ3RoO3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRffTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihhKXt0aGlzLmVuZF89YX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JffTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0Q3Vyc29yPWZ1bmN0aW9uKGEpe3RoaXMuY3Vyc29yXz1hfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmFkdmFuY2U9ZnVuY3Rpb24oYSl7dGhpcy5jdXJzb3JfKz1hO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmF0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yXz09dGhpcy5lbmRffTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnBhc3RFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPnRoaXMuZW5kX307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8MD50aGlzLmN1cnNvcl98fHRoaXMuY3Vyc29yXz50aGlzLmVuZF99O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihhKXtmb3IodmFyIGI9MTI4LGM9MCxkPTAsZT0wOzQ+ZSYmMTI4PD1iO2UrKyliPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSxjfD0oYiYxMjcpPDw3KmU7MTI4PD1iJiYoYj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10sY3w9KGImMTI3KTw8MjgsZHw9KGImMTI3KT4+NCk7aWYoMTI4PD1iKWZvcihlPTA7NT5lJiYxMjg8PWI7ZSsrKWI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGR8PShiJjEyNyk8PDcqZSszO2lmKDEyOD5iKXJldHVybiBhKGM+Pj4wLGQ+Pj4wKTtnb29nLmFzc2VydHMuZmFpbChcIkZhaWxlZCB0byByZWFkIHZhcmludCwgZW5jb2RpbmcgaXMgaW52YWxpZC5cIik7dGhpcy5lcnJvcl89ITB9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChmdW5jdGlvbihiLGMpe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NChiLGMsYSl9KX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYnl0ZXNfLGM9dGhpcy5jdXJzb3JfO3RoaXMuY3Vyc29yXys9ODtmb3IodmFyIGQ9MCxlPTAsZj1jKzc7Zj49YztmLS0pZD1kPDw4fGJbZl0sZT1lPDw4fGJbZis0XTtyZXR1cm4gYShkLGUpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNraXBWYXJpbnQ9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yX10mMTI4Oyl0aGlzLmN1cnNvcl8rKzt0aGlzLmN1cnNvcl8rK307XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnVuc2tpcFZhcmludD1mdW5jdGlvbihhKXtmb3IoOzEyODxhOyl0aGlzLmN1cnNvcl8tLSxhPj4+PTc7dGhpcy5jdXJzb3JfLS19O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfO3ZhciBiPWFbdGhpcy5jdXJzb3JfKzBdO3ZhciBjPWImMTI3O2lmKDEyOD5iKXJldHVybiB0aGlzLmN1cnNvcl8rPTEsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksYztiPWFbdGhpcy5jdXJzb3JfKzFdO2N8PShiJjEyNyk8PDc7aWYoMTI4PmIpcmV0dXJuIHRoaXMuY3Vyc29yXys9Mixnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxjO2I9YVt0aGlzLmN1cnNvcl8rMl07Y3w9KGImMTI3KTw8MTQ7aWYoMTI4PmIpcmV0dXJuIHRoaXMuY3Vyc29yXys9Myxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxjO2I9YVt0aGlzLmN1cnNvcl8rM107Y3w9KGImMTI3KTw8MjE7aWYoMTI4PmIpcmV0dXJuIHRoaXMuY3Vyc29yXys9NCxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9XG50aGlzLmVuZF8pLGM7Yj1hW3RoaXMuY3Vyc29yXys0XTtjfD0oYiYxNSk8PDI4O2lmKDEyOD5iKXJldHVybiB0aGlzLmN1cnNvcl8rPTUsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksYz4+PjA7dGhpcy5jdXJzb3JfKz01OzEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJmdvb2cuYXNzZXJ0cy5hc3NlcnQoITEpO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybiBjfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQzMj1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyO2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gYT4+PjFeLShhJjEpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luVWludDY0KX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyl9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luWmlnemFnNjQpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5IYXNoNjQpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0WmlnemFnVmFyaW50NjQoanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ4PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdO3RoaXMuY3Vyc29yXys9MTtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKTtyZXR1cm4gYX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDE2PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLGI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdO3RoaXMuY3Vyc29yXys9Mjtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKTtyZXR1cm4gYTw8MHxiPDw4fTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxiPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysyXSxkPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyszXTt0aGlzLmN1cnNvcl8rPTQ7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyk7cmV0dXJuKGE8PDB8Yjw8OHxjPDwxNnxkPDwyNCk+Pj4wfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxiPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5VaW50NjQoYSxiKX07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxiPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoYSxiKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTt0aGlzLmN1cnNvcl8rPTE7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyk7cmV0dXJuIGE8PDI0Pj4yNH07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxiPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyk7cmV0dXJuKGE8PDB8Yjw8OCk8PDE2Pj4xNn07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0sZD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107dGhpcy5jdXJzb3JfKz00O2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybiBhPDwwfGI8PDh8Yzw8MTZ8ZDw8MjR9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxiPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5JbnQ2NChhLGIpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGI9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcoYSxiKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luRmxvYXQzMihhLDApfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZERvdWJsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGI9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0NjQoYSxiKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCl9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYnl0ZXNfLGM9dGhpcy5jdXJzb3JfO2E9YythO2Zvcih2YXIgZD1bXSxlPVwiXCI7YzxhOyl7dmFyIGY9YltjKytdO2lmKDEyOD5mKWQucHVzaChmKTtlbHNlIGlmKDE5Mj5mKWNvbnRpbnVlO2Vsc2UgaWYoMjI0PmYpe3ZhciBnPWJbYysrXTtkLnB1c2goKGYmMzEpPDw2fGcmNjMpfWVsc2UgaWYoMjQwPmYpe2c9YltjKytdO3ZhciBoPWJbYysrXTtkLnB1c2goKGYmMTUpPDwxMnwoZyY2Myk8PDZ8aCY2Myl9ZWxzZSBpZigyNDg+Zil7Zz1iW2MrK107aD1iW2MrK107dmFyIGs9YltjKytdO2Y9KGYmNyk8PDE4fChnJjYzKTw8MTJ8KGgmNjMpPDw2fGsmNjM7Zi09NjU1MzY7ZC5wdXNoKChmPj4xMCYxMDIzKSs1NTI5NiwoZiYxMDIzKSs1NjMyMCl9ODE5Mjw9ZC5sZW5ndGgmJihlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCksZC5sZW5ndGg9MCl9ZSs9Z29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZyhkKTtcbnRoaXMuY3Vyc29yXz1jO3JldHVybiBlfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTdHJpbmdXaXRoTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLnJlYWRTdHJpbmcoYSl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEJ5dGVzPWZ1bmN0aW9uKGEpe2lmKDA+YXx8dGhpcy5jdXJzb3JfK2E+dGhpcy5ieXRlc18ubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yXz0hMCxnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgYnl0ZSBsZW5ndGghXCIpLG5ldyBVaW50OEFycmF5KDApO3ZhciBiPXRoaXMuYnl0ZXNfLnN1YmFycmF5KHRoaXMuY3Vyc29yXyx0aGlzLmN1cnNvcl8rYSk7dGhpcy5jdXJzb3JfKz1hO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybiBifTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5IYXNoNjQpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc18sYj10aGlzLmN1cnNvcl8sYz1hW2IrMF0sZD1hW2IrMV0sZT1hW2IrMl0sZj1hW2IrM10sZz1hW2IrNF0saD1hW2IrNV0saz1hW2IrNl07YT1hW2IrN107dGhpcy5jdXJzb3JfKz04O3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMsZCxlLGYsZyxoLGssYSl9O2pzcGIuQmluYXJ5UmVhZGVyPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmRlY29kZXJfPWpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyhhLGIsYyk7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7dGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQ7dGhpcy5lcnJvcl89ITE7dGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsfTtqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXz1bXTtcbmpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jPWZ1bmN0aW9uKGEsYixjKXtpZihqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpe3ZhciBkPWpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLnBvcCgpO2EmJmQuZGVjb2Rlcl8uc2V0QmxvY2soYSxiLGMpO3JldHVybiBkfXJldHVybiBuZXcganNwYi5CaW5hcnlSZWFkZXIoYSxiLGMpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuYWxsb2M9anNwYi5CaW5hcnlSZWFkZXIuYWxsb2M7XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8uY2xlYXIoKTt0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7dGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQ7dGhpcy5lcnJvcl89ITE7dGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsOzEwMD5qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgmJmpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLnB1c2godGhpcyl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpZWxkQ3Vyc29yX307anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dEZpZWxkX307anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldFdpcmVUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlX307anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmlzRGVsaW1pdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuaXNFbmRHcm91cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUH07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcl98fHRoaXMuZGVjb2Rlcl8uZ2V0RXJyb3IoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNldEJsb2NrPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmRlY29kZXJfLnNldEJsb2NrKGEsYixjKTt0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7dGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUR9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8ucmVzZXQoKTt0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7dGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUR9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmFkdmFuY2U9ZnVuY3Rpb24oYSl7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGEpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5uZXh0RmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRlY29kZXJfLmF0RW5kKCkpcmV0dXJuITE7aWYodGhpcy5nZXRFcnJvcigpKXJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIkRlY29kZXIgaGl0IGFuIGVycm9yXCIpLCExO3RoaXMuZmllbGRDdXJzb3JfPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLGI9YT4+PjM7YSY9NztpZihhIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQmJmEhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzImJmEhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQmJmEhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCYmYSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVAmJmEhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUClyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZTogJXMgKGF0IHBvc2l0aW9uICVzKVwiLFxuYSx0aGlzLmZpZWxkQ3Vyc29yXyksdGhpcy5lcnJvcl89ITAsITE7dGhpcy5uZXh0RmllbGRfPWI7dGhpcy5uZXh0V2lyZVR5cGVfPWE7cmV0dXJuITB9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS51bnNraXBIZWFkZXI9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnVuc2tpcFZhcmludCh0aGlzLm5leHRGaWVsZF88PDN8dGhpcy5uZXh0V2lyZVR5cGVfKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBNYXRjaGluZ0ZpZWxkcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztmb3IodGhpcy51bnNraXBIZWFkZXIoKTt0aGlzLm5leHRGaWVsZCgpJiZ0aGlzLmdldEZpZWxkTnVtYmVyKCk9PWE7KXRoaXMuc2tpcEZpZWxkKCk7dGhpcy5kZWNvZGVyXy5hdEVuZCgpfHx0aGlzLnVuc2tpcEhlYWRlcigpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwVmFyaW50RmllbGQ9ZnVuY3Rpb24oKXt0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVD8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcFZhcmludEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uc2tpcFZhcmludCgpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcERlbGltaXRlZEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcERlbGltaXRlZEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCk7ZWxzZXt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGEpfX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkMzJGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMj8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoNCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRml4ZWQ2NEZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0Pyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRml4ZWQ2NEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg4KX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEdyb3VwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZXh0RmllbGRfO2Rve2lmKCF0aGlzLm5leHRGaWVsZCgpKXtnb29nLmFzc2VydHMuZmFpbChcIlVubWF0Y2hlZCBzdGFydC1ncm91cCB0YWc6IHN0cmVhbSBFT0ZcIik7dGhpcy5lcnJvcl89ITA7YnJlYWt9aWYodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApe3RoaXMubmV4dEZpZWxkXyE9YSYmKGdvb2cuYXNzZXJ0cy5mYWlsKFwiVW5tYXRjaGVkIGVuZC1ncm91cCB0YWdcIiksdGhpcy5lcnJvcl89ITApO2JyZWFrfXRoaXMuc2tpcEZpZWxkKCl9d2hpbGUoMSl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBGaWVsZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5leHRXaXJlVHlwZV8pe2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UOnRoaXMuc2tpcFZhcmludEZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0OnRoaXMuc2tpcEZpeGVkNjRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEOnRoaXMuc2tpcERlbGltaXRlZEZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyOnRoaXMuc2tpcEZpeGVkMzJGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVA6dGhpcy5za2lwR3JvdXAoKTticmVhaztkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIGVuY29kaW5nIGZvciBmaWVsZC5cIil9fTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWdpc3RlclJlYWRDYWxsYmFjaz1mdW5jdGlvbihhLGIpe251bGw9PT10aGlzLnJlYWRDYWxsYmFja3NfJiYodGhpcy5yZWFkQ2FsbGJhY2tzXz17fSk7Z29vZy5hc3NlcnRzLmFzc2VydCghdGhpcy5yZWFkQ2FsbGJhY2tzX1thXSk7dGhpcy5yZWFkQ2FsbGJhY2tzX1thXT1ifTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucnVuUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9PXRoaXMucmVhZENhbGxiYWNrc18pO2E9dGhpcy5yZWFkQ2FsbGJhY2tzX1thXTtnb29nLmFzc2VydHMuYXNzZXJ0KGEpO3JldHVybiBhKHRoaXMpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQW55PWZ1bmN0aW9uKGEpe3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlKGEpO3ZhciBiPWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZTtzd2l0Y2goYSl7Y2FzZSBiLkRPVUJMRTpyZXR1cm4gdGhpcy5yZWFkRG91YmxlKCk7Y2FzZSBiLkZMT0FUOnJldHVybiB0aGlzLnJlYWRGbG9hdCgpO2Nhc2UgYi5JTlQ2NDpyZXR1cm4gdGhpcy5yZWFkSW50NjQoKTtjYXNlIGIuVUlOVDY0OnJldHVybiB0aGlzLnJlYWRVaW50NjQoKTtjYXNlIGIuSU5UMzI6cmV0dXJuIHRoaXMucmVhZEludDMyKCk7Y2FzZSBiLkZJWEVENjQ6cmV0dXJuIHRoaXMucmVhZEZpeGVkNjQoKTtjYXNlIGIuRklYRUQzMjpyZXR1cm4gdGhpcy5yZWFkRml4ZWQzMigpO2Nhc2UgYi5CT09MOnJldHVybiB0aGlzLnJlYWRCb29sKCk7Y2FzZSBiLlNUUklORzpyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKCk7XG5jYXNlIGIuR1JPVVA6Z29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpXCIpO2Nhc2UgYi5NRVNTQUdFOmdvb2cuYXNzZXJ0cy5mYWlsKFwiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpXCIpO2Nhc2UgYi5CWVRFUzpyZXR1cm4gdGhpcy5yZWFkQnl0ZXMoKTtjYXNlIGIuVUlOVDMyOnJldHVybiB0aGlzLnJlYWRVaW50MzIoKTtjYXNlIGIuRU5VTTpyZXR1cm4gdGhpcy5yZWFkRW51bSgpO2Nhc2UgYi5TRklYRUQzMjpyZXR1cm4gdGhpcy5yZWFkU2ZpeGVkMzIoKTtjYXNlIGIuU0ZJWEVENjQ6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDY0KCk7Y2FzZSBiLlNJTlQzMjpyZXR1cm4gdGhpcy5yZWFkU2ludDMyKCk7Y2FzZSBiLlNJTlQ2NDpyZXR1cm4gdGhpcy5yZWFkU2ludDY0KCk7Y2FzZSBiLkZIQVNINjQ6cmV0dXJuIHRoaXMucmVhZEZpeGVkSGFzaDY0KCk7Y2FzZSBiLlZIQVNINjQ6cmV0dXJuIHRoaXMucmVhZFZhcmludEhhc2g2NCgpO1xuZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgZmllbGQgdHlwZSBpbiByZWFkQW55KClcIil9cmV0dXJuIDB9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkTWVzc2FnZT1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBjPXRoaXMuZGVjb2Rlcl8uZ2V0RW5kKCksZD10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7ZD10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK2Q7dGhpcy5kZWNvZGVyXy5zZXRFbmQoZCk7YihhLHRoaXMpO3RoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKGQpO3RoaXMuZGVjb2Rlcl8uc2V0RW5kKGMpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkR3JvdXA9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCk7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRGaWVsZF89PWEpO2MoYix0aGlzKTt0aGlzLmVycm9yX3x8dGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVB8fChnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIHN1Ym1lc3NhZ2UgZGlkIG5vdCBlbmQgd2l0aCBhbiBFTkRfR1JPVVAgdGFnXCIpLHRoaXMuZXJyb3JfPSEwKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RmllbGREZWNvZGVyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLGI9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSxjPWIrYTthPWpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpLGIsYSk7dGhpcy5kZWNvZGVyXy5zZXRDdXJzb3IoYyk7cmV0dXJuIGF9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50MzI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzIoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZygpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZygpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQ2ND1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZygpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQzMj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMigpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQ2ND1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCgpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQzMj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQ2ND1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMlN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKS50b1N0cmluZygpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0KCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0U3RyaW5nKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWREb3VibGU9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZERvdWJsZSgpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEJvb2w9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4hIXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFN0cmluZyhhKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRCeXRlcz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkQnl0ZXMoYSl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVmFyaW50SGFzaDY0KCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludEhhc2g2ND1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnRIYXNoNjQoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTcGxpdFZhcmludDY0KGEpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRWYXJpbnQ2NChmdW5jdGlvbihiLGMpe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NChiLGMsYSl9KX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0Rml4ZWQ2NChhKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaWVsZF89ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGI9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO2I9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKStiO2Zvcih2YXIgYz1bXTt0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpPGI7KWMucHVzaChhLmNhbGwodGhpcy5kZWNvZGVyXykpO3JldHVybiBjfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmcpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMil9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZyl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0KX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQzMil9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0KX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZyl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRmxvYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZERvdWJsZSl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkQm9vbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkQm9vbCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRW51bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRW51bSl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KX07anNwYi5CaW5hcnlFbmNvZGVyPWZ1bmN0aW9uKCl7dGhpcy5idWZmZXJfPVtdfTtqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RofTtqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnVmZmVyXzt0aGlzLmJ1ZmZlcl89W107cmV0dXJuIGF9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYj09TWF0aC5mbG9vcihiKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YiYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpOzA8Ynx8MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT0oYT4+Pjd8Yjw8MjUpPj4+MCxiPj4+PTc7dGhpcy5idWZmZXJfLnB1c2goYSl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydChiPT1NYXRoLmZsb29yKGIpKTtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTt0aGlzLndyaXRlVWludDMyKGEpO3RoaXMud3JpdGVVaW50MzIoYil9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtmb3IoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGEpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMj1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpO2lmKDA8PWEpdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYSk7ZWxzZXtmb3IodmFyIGI9MDs5PmI7YisrKXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+PTc7dGhpcy5idWZmZXJfLnB1c2goMSl9fTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCk7anNwYi51dGlscy5zcGxpdEludDY0KGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKTtqc3BiLnV0aWxzLnNwbGl0SW50NjQoYSk7dGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpO3RoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKChhPDwxXmE+PjMxKT4+PjApfTtqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKTtqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQoYSk7dGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KGEpKX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludEhhc2g2ND1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoYSk7anNwYi51dGlscy50b1ppZ3phZzY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoLGZ1bmN0aW9uKGEsZCl7Yi53cml0ZVNwbGl0VmFyaW50NjQoYT4+PjAsZD4+PjApfSl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiYyNTY+YSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQxNj1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YSYmNjU1MzY+YSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjE2JjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjI0JjI1NSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50NjQ9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KTtqc3BiLnV0aWxzLnNwbGl0VWludDY0KGEpO3RoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KTt0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgtMTI4PD1hJiYxMjg+YSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgtMzI3Njg8PWEmJjMyNzY4PmEpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50MzI9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjE2JjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjI0JjI1NSl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydChhPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Myk7anNwYi51dGlscy5zcGxpdEludDY0KGEpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoK2E+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJithPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Myk7anNwYi51dGlscy5zcGxpdEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChhKSk7dGhpcy53cml0ZVNwbGl0Rml4ZWQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoSW5maW5pdHk9PT1hfHwtSW5maW5pdHk9PT1hfHxpc05hTihhKXx8YT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYJiZhPD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCk7anNwYi51dGlscy5zcGxpdEZsb2F0MzIoYSk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGU9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChJbmZpbml0eT09PWF8fC1JbmZpbml0eT09PWF8fGlzTmFOKGEpfHxhPj0tanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgmJmE8PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYKTtqc3BiLnV0aWxzLnNwbGl0RmxvYXQ2NChhKTt0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJvb2w9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChcImJvb2xlYW5cIj09PXR5cGVvZiBhfHxcIm51bWJlclwiPT09dHlwZW9mIGEpO3RoaXMuYnVmZmVyXy5wdXNoKGE/MTowKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRW51bT1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpO3RoaXMud3JpdGVTaWduZWRWYXJpbnQzMihhKX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxhKX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihhKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oYSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChhKTt0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmJ1ZmZlcl8ubGVuZ3RoLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2lmKDEyOD5kKXRoaXMuYnVmZmVyXy5wdXNoKGQpO2Vsc2UgaWYoMjA0OD5kKXRoaXMuYnVmZmVyXy5wdXNoKGQ+PjZ8MTkyKSx0aGlzLmJ1ZmZlcl8ucHVzaChkJjYzfDEyOCk7ZWxzZSBpZig2NTUzNj5kKWlmKDU1Mjk2PD1kJiY1NjMxOT49ZCYmYysxPGEubGVuZ3RoKXt2YXIgZT1hLmNoYXJDb2RlQXQoYysxKTs1NjMyMDw9ZSYmNTczNDM+PWUmJihkPTEwMjQqKGQtNTUyOTYpK2UtNTYzMjArNjU1MzYsdGhpcy5idWZmZXJfLnB1c2goZD4+MTh8MjQwKSx0aGlzLmJ1ZmZlcl8ucHVzaChkPj4xMiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGQ+PjYmNjN8MTI4KSx0aGlzLmJ1ZmZlcl8ucHVzaChkJjYzfDEyOCksYysrKX1lbHNlIHRoaXMuYnVmZmVyXy5wdXNoKGQ+PlxuMTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChkPj42JjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goZCY2M3wxMjgpfXJldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RoLWJ9O2pzcGIuYXJpdGg9e307anNwYi5hcml0aC5VSW50NjQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmxvPWE7dGhpcy5oaT1ifTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhpPGEuaGl8fHRoaXMuaGk9PWEuaGkmJnRoaXMubG88YS5sbz8tMTp0aGlzLmhpPT1hLmhpJiZ0aGlzLmxvPT1hLmxvPzA6MX07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvPj4+MXwodGhpcy5oaSYxKTw8MzEpPj4+MCx0aGlzLmhpPj4+MT4+PjApfTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubGVmdFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvPDwxPj4+MCwodGhpcy5oaTw8MXx0aGlzLmxvPj4+MzEpPj4+MCl9O1xuanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLm1zYj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuaGkmMjE0NzQ4MzY0OCl9O2pzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5sc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmxvJjEpfTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuemVybz1mdW5jdGlvbigpe3JldHVybiAwPT10aGlzLmxvJiYwPT10aGlzLmhpfTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoKHRoaXMubG8rYS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaSthLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rYS5sbz8xOjApPj4+MCl9O1xuanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvLWEubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktYS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tYS5sbz8xOjApPj4+MCl9O2pzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyPWZ1bmN0aW9uKGEsYil7dmFyIGM9YSY2NTUzNTthPj4+PTE2O3ZhciBkPWImNjU1MzUsZT1iPj4+MTY7Yj1jKmQrNjU1MzYqKGMqZSY2NTUzNSkrNjU1MzYqKGEqZCY2NTUzNSk7Zm9yKGM9YSplKyhjKmU+Pj4xNikrKGEqZD4+PjE2KTs0Mjk0OTY3Mjk2PD1iOyliLT00Mjk0OTY3Mjk2LGMrPTE7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NChiPj4+MCxjPj4+MCl9O1xuanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLm11bD1mdW5jdGlvbihhKXt2YXIgYj1qc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMih0aGlzLmxvLGEpO2E9anNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzIodGhpcy5oaSxhKTthLmhpPWEubG87YS5sbz0wO3JldHVybiBiLmFkZChhKX07XG5qc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEpe2lmKDA9PWEpcmV0dXJuW107dmFyIGI9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCksYz1uZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbyx0aGlzLmhpKTthPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NChhLDApO2Zvcih2YXIgZD1uZXcganNwYi5hcml0aC5VSW50NjQoMSwwKTshYS5tc2IoKTspYT1hLmxlZnRTaGlmdCgpLGQ9ZC5sZWZ0U2hpZnQoKTtmb3IoOyFkLnplcm8oKTspMD49YS5jbXAoYykmJihiPWIuYWRkKGQpLGM9Yy5zdWIoYSkpLGE9YS5yaWdodFNoaWZ0KCksZD1kLnJpZ2h0U2hpZnQoKTtyZXR1cm5bYixjXX07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVwiXCIsYj10aGlzOyFiLnplcm8oKTspe2I9Yi5kaXYoMTApO3ZhciBjPWJbMF07YT1iWzFdLmxvK2E7Yj1jfVwiXCI9PWEmJihhPVwiMFwiKTtyZXR1cm4gYX07XG5qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxjPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLGQ9MDtkPGEubGVuZ3RoO2QrKyl7aWYoXCIwXCI+YVtkXXx8XCI5XCI8YVtkXSlyZXR1cm4gbnVsbDt2YXIgZT1wYXJzZUludChhW2RdLDEwKTtjLmxvPWU7Yj1iLm11bCgxMCkuYWRkKGMpfXJldHVybiBifTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSl9O2pzcGIuYXJpdGguSW50NjQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmxvPWE7dGhpcy5oaT1ifTtcbmpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8rYS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaSthLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rYS5sbz8xOjApPj4+MCl9O2pzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8tYS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1hLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1hLmxvPzE6MCk+Pj4wKX07anNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQodGhpcy5sbyx0aGlzLmhpKX07XG5qc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTAhPSh0aGlzLmhpJjIxNDc0ODM2NDgpLGI9bmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSk7YSYmKGI9KG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApKS5zdWIoYikpO3JldHVybihhP1wiLVwiOlwiXCIpK2IudG9TdHJpbmcoKX07anNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPTA8YS5sZW5ndGgmJlwiLVwiPT1hWzBdO2ImJihhPWEuc3Vic3RyaW5nKDEpKTthPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoYSk7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YiYmKGE9KG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApKS5zdWIoYSkpO3JldHVybiBuZXcganNwYi5hcml0aC5JbnQ2NChhLmxvLGEuaGkpfTtqc3BiLkJpbmFyeVdyaXRlcj1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXTt0aGlzLnRvdGFsTGVuZ3RoXz0wO3RoaXMuZW5jb2Rlcl89bmV3IGpzcGIuQmluYXJ5RW5jb2Rlcjt0aGlzLmJvb2ttYXJrc189W119O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5hcHBlbmRVaW50OEFycmF5Xz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMuYmxvY2tzXy5wdXNoKGIpO3RoaXMuYmxvY2tzXy5wdXNoKGEpO3RoaXMudG90YWxMZW5ndGhfKz1iLmxlbmd0aCthLmxlbmd0aH07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYmVnaW5EZWxpbWl0ZWRfPWZ1bmN0aW9uKGEpe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO2E9dGhpcy5lbmNvZGVyXy5lbmQoKTt0aGlzLmJsb2Nrc18ucHVzaChhKTt0aGlzLnRvdGFsTGVuZ3RoXys9YS5sZW5ndGg7YS5wdXNoKHRoaXMudG90YWxMZW5ndGhfKTtyZXR1cm4gYX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmVuZERlbGltaXRlZF89ZnVuY3Rpb24oYSl7dmFyIGI9YS5wb3AoKTtiPXRoaXMudG90YWxMZW5ndGhfK3RoaXMuZW5jb2Rlcl8ubGVuZ3RoKCktYjtmb3IoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1iKTsxMjc8YjspYS5wdXNoKGImMTI3fDEyOCksYj4+Pj03LHRoaXMudG90YWxMZW5ndGhfKys7YS5wdXNoKGIpO3RoaXMudG90YWxMZW5ndGhfKyt9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2VyaWFsaXplZE1lc3NhZ2U9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYXBwZW5kVWludDhBcnJheV8oYS5zdWJhcnJheShiLGMpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLm1heWJlV3JpdGVTZXJpYWxpemVkTWVzc2FnZT1mdW5jdGlvbihhLGIsYyl7bnVsbCE9YSYmbnVsbCE9YiYmbnVsbCE9YyYmdGhpcy53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlKGEsYixjKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdO3RoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy50b3RhbExlbmd0aF89MDt0aGlzLmJvb2ttYXJrc189W119O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmdldFJlc3VsdEJ1ZmZlcj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMD09dGhpcy5ib29rbWFya3NfLmxlbmd0aCk7Zm9yKHZhciBhPW5ldyBVaW50OEFycmF5KHRoaXMudG90YWxMZW5ndGhfK3RoaXMuZW5jb2Rlcl8ubGVuZ3RoKCkpLGI9dGhpcy5ibG9ja3NfLGM9Yi5sZW5ndGgsZD0wLGU9MDtlPGM7ZSsrKXt2YXIgZj1iW2VdO2Euc2V0KGYsZCk7ZCs9Zi5sZW5ndGh9Yj10aGlzLmVuY29kZXJfLmVuZCgpO2Euc2V0KGIsZCk7ZCs9Yi5sZW5ndGg7Z29vZy5hc3NlcnRzLmFzc2VydChkPT1hLmxlbmd0aCk7dGhpcy5ibG9ja3NfPVthXTtyZXR1cm4gYX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmdldFJlc3VsdEJhc2U2NFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHRoaXMuZ2V0UmVzdWx0QnVmZmVyKCksYSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmJlZ2luU3ViTWVzc2FnZT1mdW5jdGlvbihhKXt0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVkXyhhKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmRTdWJNZXNzYWdlPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD10aGlzLmJvb2ttYXJrc18ubGVuZ3RoKTt0aGlzLmVuZERlbGltaXRlZF8odGhpcy5ib29rbWFya3NfLnBvcCgpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmllbGRIZWFkZXJfPWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydCgxPD1hJiZhPT1NYXRoLmZsb29yKGEpKTt0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmErYil9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQW55PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU7c3dpdGNoKGEpe2Nhc2UgZC5ET1VCTEU6dGhpcy53cml0ZURvdWJsZShiLGMpO2JyZWFrO2Nhc2UgZC5GTE9BVDp0aGlzLndyaXRlRmxvYXQoYixjKTticmVhaztjYXNlIGQuSU5UNjQ6dGhpcy53cml0ZUludDY0KGIsYyk7YnJlYWs7Y2FzZSBkLlVJTlQ2NDp0aGlzLndyaXRlVWludDY0KGIsYyk7YnJlYWs7Y2FzZSBkLklOVDMyOnRoaXMud3JpdGVJbnQzMihiLGMpO2JyZWFrO2Nhc2UgZC5GSVhFRDY0OnRoaXMud3JpdGVGaXhlZDY0KGIsYyk7YnJlYWs7Y2FzZSBkLkZJWEVEMzI6dGhpcy53cml0ZUZpeGVkMzIoYixjKTticmVhaztjYXNlIGQuQk9PTDp0aGlzLndyaXRlQm9vbChiLGMpO2JyZWFrO2Nhc2UgZC5TVFJJTkc6dGhpcy53cml0ZVN0cmluZyhiLGMpO2JyZWFrO2Nhc2UgZC5HUk9VUDpnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpXCIpO1xuYnJlYWs7Y2FzZSBkLk1FU1NBR0U6Z29vZy5hc3NlcnRzLmZhaWwoXCJNZXNzYWdlIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpXCIpO2JyZWFrO2Nhc2UgZC5CWVRFUzp0aGlzLndyaXRlQnl0ZXMoYixjKTticmVhaztjYXNlIGQuVUlOVDMyOnRoaXMud3JpdGVVaW50MzIoYixjKTticmVhaztjYXNlIGQuRU5VTTp0aGlzLndyaXRlRW51bShiLGMpO2JyZWFrO2Nhc2UgZC5TRklYRUQzMjp0aGlzLndyaXRlU2ZpeGVkMzIoYixjKTticmVhaztjYXNlIGQuU0ZJWEVENjQ6dGhpcy53cml0ZVNmaXhlZDY0KGIsYyk7YnJlYWs7Y2FzZSBkLlNJTlQzMjp0aGlzLndyaXRlU2ludDMyKGIsYyk7YnJlYWs7Y2FzZSBkLlNJTlQ2NDp0aGlzLndyaXRlU2ludDY0KGIsYyk7YnJlYWs7Y2FzZSBkLkZIQVNINjQ6dGhpcy53cml0ZUZpeGVkSGFzaDY0KGIsYyk7YnJlYWs7Y2FzZSBkLlZIQVNINjQ6dGhpcy53cml0ZVZhcmludEhhc2g2NChiLGMpO2JyZWFrO2RlZmF1bHQ6Z29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gd3JpdGVBbnkoKVwiKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDY0Xz1mdW5jdGlvbihhLGIpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQoYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQzMl89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDMyKGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NChiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZyhiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludEhhc2g2NF89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzI9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydChiPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhhLGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYj1wYXJzZUludChiLDEwKSxnb29nLmFzc2VydHMuYXNzZXJ0KGI+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGEsYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0PWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oYSxiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGI9anNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nKGIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGIubG8sYi5oaSkpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMj1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oYSxiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGIpe251bGwhPWImJihiPXBhcnNlSW50KGIsMTApLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YiYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDY0PWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YiYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDY0XyhhLGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYj1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGIubG8sYi5oaSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50MzI9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydChiPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhhLGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50NjQ9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydChiPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhhLGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludEhhc2g2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJnRoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfKGEsYil9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe251bGwhPWImJnRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oYSxiKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZDMyPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YiYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlVWludDMyKGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQ2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQ2NChiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe251bGwhPWImJihiPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoYiksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYi5sbyxiLmhpKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDMyPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlSW50MzIoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDY0PWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlSW50NjQoYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe251bGwhPWImJihiPWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyhiKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChiLmxvLGIuaGkpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGbG9hdD1mdW5jdGlvbihhLGIpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRG91YmxlPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJudW1iZXJcIj09PXR5cGVvZiBiKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlQm9vbChiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUVudW09ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydChiPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKSx0aGlzLmVuY29kZXJfLndyaXRlU3RyaW5nKGIpLHRoaXMuZW5kRGVsaW1pdGVkXyhhKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGI9anNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5KGIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGIubGVuZ3RoKSx0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZT1mdW5jdGlvbihhLGIsYyl7bnVsbCE9YiYmKGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSksYyhiLHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhhKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZVNldD1mdW5jdGlvbihhLGIsYyl7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygyLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGEpLGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oMyksYyhiLHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhhKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlR3JvdXA9ZnVuY3Rpb24oYSxiLGMpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLGMoYix0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoOD09Yi5sZW5ndGgpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNoNjQoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDg9PWIubGVuZ3RoKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChiLGMpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGIsYyl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3ZhciBkPXRoaXMuZW5jb2Rlcl87anNwYi51dGlscy50b1ppZ3phZzY0KGIsYyxmdW5jdGlvbihhLGIpe2Qud3JpdGVTcGxpdFZhcmludDY0KGE+Pj4wLGI+Pj4wKX0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQzMlN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUludDMyU3RyaW5nKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhLGIsYyxkKXtpZihudWxsIT1iKWZvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXRoaXMud3JpdGVTcGxpdEZpeGVkNjQoYSxjKGJbZV0pLGQoYltlXSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbCE9Yilmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChhLGMoYltlXSksZChiW2VdKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihhLGIsYyxkKXtpZihudWxsIT1iKWZvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXRoaXMud3JpdGVTcGxpdFppZ3phZ1ZhcmludDY0KGEsYyhiW2VdKSxkKGJbZV0pKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlSW50NjRTdHJpbmcoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVVpbnQzMlN0cmluZyhhLGJbY10pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVVaW50NjRTdHJpbmcoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50MzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfKGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlRml4ZWQzMihhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVGaXhlZDY0KGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUZpeGVkNjRTdHJpbmcoYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlU2ZpeGVkMzIoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVNmaXhlZDY0KGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVTZml4ZWQ2NFN0cmluZyhhLGJbY10pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRmxvYXQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVGbG9hdChhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZERvdWJsZT1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZURvdWJsZShhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEJvb2w9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVCb29sKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRW51bT1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUVudW0oYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVN0cmluZyhhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEJ5dGVzPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlQnl0ZXMoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsIT1iKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtjKGJbZF0sdGhpcyk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEdyb3VwPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsIT1iKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksYyhiW2RdLHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlRml4ZWRIYXNoNjQoYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFZhcmludEhhc2g2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVZhcmludEhhc2g2NChhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHBhcnNlSW50KGJbY10sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NChiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhLGIsYyxkKXtpZihudWxsIT1iKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYyhiW2VdKSxkKGJbZV0pKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGEsYixjLGQpe2lmKG51bGwhPWIpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoYyhiW2VdKSxkKGJbZV0pKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbCE9Yil7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGU9dGhpcy5lbmNvZGVyXyxmPTA7ZjxiLmxlbmd0aDtmKyspanNwYi51dGlscy50b1ppZ3phZzY0KGMoYltmXSksZChiW2ZdKSxmdW5jdGlvbihhLGIpe2Uud3JpdGVTcGxpdFZhcmludDY0KGE+Pj4wLGI+Pj4wKX0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyhiW2NdKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChkLmxvLGQuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhhKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIocGFyc2VJbnQoYltjXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoYltjXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoZC5sbyxkLmhpKX10aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KGJbY10pKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50SGFzaDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkMzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCpiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIoYlthXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQoYlthXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBjPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoYlthXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChjLmxvLGMuaGkpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKGJbYV0pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KGJbYV0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlSW50NjRTdHJpbmcoYlthXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZsb2F0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlRmxvYXQoYlthXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRG91YmxlPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKGJbYV0pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRCb29sPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUJvb2woYlthXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRW51bT1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVFbnVtKGJbY10pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNoNjQoYlthXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVZhcmludEhhc2g2NChiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLk1hcD1mdW5jdGlvbihhLGIpe3RoaXMuYXJyXz1hO3RoaXMudmFsdWVDdG9yXz1iO3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSEwOzA8dGhpcy5hcnJfLmxlbmd0aCYmdGhpcy5sb2FkRnJvbUFycmF5XygpfTtqc3BiLk1hcC5wcm90b3R5cGUubG9hZEZyb21BcnJheV89ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuYXJyXy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLmFycl9bYV0sYz1iWzBdO3RoaXMubWFwX1tjLnRvU3RyaW5nKCldPW5ldyBqc3BiLk1hcC5FbnRyeV8oYyxiWzFdKX10aGlzLmFyckNsZWFuPSEwfTtcbmpzcGIuTWFwLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgYT10aGlzLm1hcF8sYjtmb3IoYiBpbiBhKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGIpKXt2YXIgYz1hW2JdLnZhbHVlV3JhcHBlcjtjJiZjLnRvQXJyYXkoKX19fWVsc2V7dGhpcy5hcnJfLmxlbmd0aD0wO2E9dGhpcy5zdHJpbmdLZXlzXygpO2Euc29ydCgpO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBkPXRoaXMubWFwX1thW2JdXTsoYz1kLnZhbHVlV3JhcHBlcikmJmMudG9BcnJheSgpO3RoaXMuYXJyXy5wdXNoKFtkLmtleSxkLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffTtcbmpzcGIuTWFwLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLnRvQXJyYXkoKSxkPVtdLGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5tYXBfW2NbZV1bMF0udG9TdHJpbmcoKV07dGhpcy53cmFwRW50cnlfKGYpO3ZhciBnPWYudmFsdWVXcmFwcGVyO2c/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoYiksZC5wdXNoKFtmLmtleSxiKGEsZyldKSk6ZC5wdXNoKFtmLmtleSxmLnZhbHVlXSl9cmV0dXJuIGR9O2pzcGIuTWFwLmZyb21PYmplY3Q9ZnVuY3Rpb24oYSxiLGMpe2I9bmV3IGpzcGIuTWFwKFtdLGIpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdWzBdLGY9YyhhW2RdWzFdKTtiLnNldChlLGYpfXJldHVybiBifTtqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfPWZ1bmN0aW9uKGEpe3RoaXMuaWR4Xz0wO3RoaXMuYXJyXz1hfTtcbmpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pZHhfPHRoaXMuYXJyXy5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dGhpcy5hcnJfW3RoaXMuaWR4XysrXX06e2RvbmU6ITAsdmFsdWU6dm9pZCAwfX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmKGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO2pzcGIuTWFwLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdLZXlzXygpLmxlbmd0aH07anNwYi5NYXAucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXBfPXt9O3RoaXMuYXJyQ2xlYW49ITF9O1xuanNwYi5NYXAucHJvdG90eXBlLmRlbD1mdW5jdGlvbihhKXthPWEudG9TdHJpbmcoKTt2YXIgYj10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoYSk7ZGVsZXRlIHRoaXMubWFwX1thXTt0aGlzLmFyckNsZWFuPSExO3JldHVybiBifTtqc3BiLk1hcC5wcm90b3R5cGUuZ2V0RW50cnlMaXN0PWZ1bmN0aW9uKCl7dmFyIGE9W10sYj10aGlzLnN0cmluZ0tleXNfKCk7Yi5zb3J0KCk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMubWFwX1tiW2NdXTthLnB1c2goW2Qua2V5LGQudmFsdWVdKX1yZXR1cm4gYX07anNwYi5NYXAucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXRoaXMuc3RyaW5nS2V5c18oKTtiLnNvcnQoKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5tYXBfW2JbY11dO2EucHVzaChbZC5rZXksdGhpcy53cmFwRW50cnlfKGQpXSl9cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGEpfTtcbmpzcGIuTWFwLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYj10aGlzLnN0cmluZ0tleXNfKCk7Yi5zb3J0KCk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYS5wdXNoKHRoaXMubWFwX1tiW2NdXS5rZXkpO3JldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhhKX07anNwYi5NYXAucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdLGI9dGhpcy5zdHJpbmdLZXlzXygpO2Iuc29ydCgpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWEucHVzaCh0aGlzLndyYXBFbnRyeV8odGhpcy5tYXBfW2JbY11dKSk7cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGEpfTtcbmpzcGIuTWFwLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLm1hcF9bY1tkXV07YS5jYWxsKGIsdGhpcy53cmFwRW50cnlfKGUpLGUua2V5LHRoaXMpfX07anNwYi5NYXAucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBqc3BiLk1hcC5FbnRyeV8oYSk7dGhpcy52YWx1ZUN0b3JfPyhjLnZhbHVlV3JhcHBlcj1iLGMudmFsdWU9Yi50b0FycmF5KCkpOmMudmFsdWU9Yjt0aGlzLm1hcF9bYS50b1N0cmluZygpXT1jO3RoaXMuYXJyQ2xlYW49ITE7cmV0dXJuIHRoaXN9O2pzcGIuTWFwLnByb3RvdHlwZS53cmFwRW50cnlfPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnZhbHVlQ3Rvcl8/KGEudmFsdWVXcmFwcGVyfHwoYS52YWx1ZVdyYXBwZXI9bmV3IHRoaXMudmFsdWVDdG9yXyhhLnZhbHVlKSksYS52YWx1ZVdyYXBwZXIpOmEudmFsdWV9O1xuanNwYi5NYXAucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtpZihhPXRoaXMubWFwX1thLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oYSl9O2pzcGIuTWFwLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9TdHJpbmcoKWluIHRoaXMubWFwX307anNwYi5NYXAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuc3RyaW5nS2V5c18oKTtmLnNvcnQoKTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9dGhpcy5tYXBfW2ZbZ11dO2IuYmVnaW5TdWJNZXNzYWdlKGEpO2MuY2FsbChiLDEsaC5rZXkpO3RoaXMudmFsdWVDdG9yXz9kLmNhbGwoYiwyLHRoaXMud3JhcEVudHJ5XyhoKSxlKTpkLmNhbGwoYiwyLGgudmFsdWUpO2IuZW5kU3ViTWVzc2FnZSgpfX07XG5qc3BiLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtmb3IoO2IubmV4dEZpZWxkKCkmJiFiLmlzRW5kR3JvdXAoKTspe3ZhciBoPWIuZ2V0RmllbGROdW1iZXIoKTsxPT1oP2Y9Yy5jYWxsKGIpOjI9PWgmJihhLnZhbHVlQ3Rvcl8/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoZSksZ3x8KGc9bmV3IGEudmFsdWVDdG9yXyksZC5jYWxsKGIsZyxlKSk6Zz1kLmNhbGwoYikpfWdvb2cuYXNzZXJ0cy5hc3NlcnQodm9pZCAwIT1mKTtnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMCE9Zyk7YS5zZXQoZixnKX07anNwYi5NYXAucHJvdG90eXBlLnN0cmluZ0tleXNfPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXBfLGI9W10sYztmb3IoYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9O1xuanNwYi5NYXAuRW50cnlfPWZ1bmN0aW9uKGEsYil7dGhpcy5rZXk9YTt0aGlzLnZhbHVlPWI7dGhpcy52YWx1ZVdyYXBwZXI9dm9pZCAwfTtqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZmllbGRJbmRleD1hO3RoaXMuZmllbGROYW1lPWI7dGhpcy5jdG9yPWM7dGhpcy50b09iamVjdEZuPWQ7dGhpcy5pc1JlcGVhdGVkPWV9O2pzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZpZWxkSW5mbz1hO3RoaXMuYmluYXJ5UmVhZGVyRm49Yjt0aGlzLmJpbmFyeVdyaXRlckZuPWM7dGhpcy5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm49ZDt0aGlzLmJpbmFyeU1lc3NhZ2VEZXNlcmlhbGl6ZUZuPWU7dGhpcy5pc1BhY2tlZD1mfTtqc3BiLkV4dGVuc2lvbkZpZWxkSW5mby5wcm90b3R5cGUuaXNNZXNzYWdlVHlwZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jdG9yfTtqc3BiLk1lc3NhZ2U9ZnVuY3Rpb24oKXt9O2pzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1Q9ITA7anNwYi5NZXNzYWdlLkdFTkVSQVRFX0ZST01fT0JKRUNUPSFnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFO1xuanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX1NUUklORz0hMDtqc3BiLk1lc3NhZ2UuQVNTVU1FX0xPQ0FMX0FSUkFZUz0hMTtqc3BiLk1lc3NhZ2UuU0VSSUFMSVpFX0VNUFRZX1RSQUlMSU5HX0ZJRUxEUz0hMDtqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV89XCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheTtqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmdldEpzUGJNZXNzYWdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSWRffTtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIrYS5hcnJheUluZGV4T2Zmc2V0X307anNwYi5NZXNzYWdlLmhpZGRlbkVTNlByb3BlcnR5Xz1mdW5jdGlvbigpe307anNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXz1mdW5jdGlvbihhLGIpe3JldHVybiBiLWEuYXJyYXlJbmRleE9mZnNldF99O1xuanNwYi5NZXNzYWdlLmluaXRpYWxpemU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2Eud3JhcHBlcnNfPW51bGw7Ynx8KGI9Yz9bY106W10pO2EubWVzc2FnZUlkXz1jP1N0cmluZyhjKTp2b2lkIDA7YS5hcnJheUluZGV4T2Zmc2V0Xz0wPT09Yz8tMTowO2EuYXJyYXk9Yjtqc3BiLk1lc3NhZ2UuaW5pdFBpdm90QW5kRXh0ZW5zaW9uT2JqZWN0XyhhLGQpO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fTtqc3BiLk1lc3NhZ2UuU0VSSUFMSVpFX0VNUFRZX1RSQUlMSU5HX0ZJRUxEU3x8KGEucmVwZWF0ZWRGaWVsZHM9ZSk7aWYoZSlmb3IoYj0wO2I8ZS5sZW5ndGg7YisrKWM9ZVtiXSxjPGEucGl2b3RfPyhjPWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oYSxjKSxhLmFycmF5W2NdPWEuYXJyYXlbY118fGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXyk6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oYSksYS5leHRlbnNpb25PYmplY3RfW2NdPVxuYS5leHRlbnNpb25PYmplY3RfW2NdfHxqc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8pO2lmKGYmJmYubGVuZ3RoKWZvcihiPTA7YjxmLmxlbmd0aDtiKyspanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UoYSxmW2JdKX07anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfPWdvb2cuREVCVUcmJk9iamVjdC5mcmVlemU/T2JqZWN0LmZyZWV6ZShbXSk6W107anNwYi5NZXNzYWdlLmlzQXJyYXlfPWZ1bmN0aW9uKGEpe3JldHVybiBqc3BiLk1lc3NhZ2UuQVNTVU1FX0xPQ0FMX0FSUkFZUz9hIGluc3RhbmNlb2YgQXJyYXk6QXJyYXkuaXNBcnJheShhKX07anNwYi5NZXNzYWdlLmlzRXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiYhanNwYi5NZXNzYWdlLmlzQXJyYXlfKGEpJiYhKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfTtcbmpzcGIuTWVzc2FnZS5pbml0UGl2b3RBbmRFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5hcnJheS5sZW5ndGgsZD0tMTtpZihjJiYoZD1jLTEsYz1hLmFycmF5W2RdLGpzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF8oYykpKXthLnBpdm90Xz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfKGEsZCk7YS5leHRlbnNpb25PYmplY3RfPWM7cmV0dXJufS0xPGI/KGEucGl2b3RfPU1hdGgubWF4KGIsanNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXyhhLGQrMSkpLGEuZXh0ZW5zaW9uT2JqZWN0Xz1udWxsKTphLnBpdm90Xz1OdW1iZXIuTUFYX1ZBTFVFfTtqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGEpe3ZhciBiPWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oYSxhLnBpdm90Xyk7YS5hcnJheVtiXXx8KGEuZXh0ZW5zaW9uT2JqZWN0Xz1hLmFycmF5W2JdPXt9KX07XG5qc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKWRbZV09Yi5jYWxsKGFbZV0sYyxhW2VdKTtyZXR1cm4gZH07anNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYixjLGQsZSl7Zm9yKHZhciBmIGluIGMpe3ZhciBnPWNbZl0saD1kLmNhbGwoYSxnKTtpZihudWxsIT1oKXtmb3IodmFyIGsgaW4gZy5maWVsZE5hbWUpaWYoZy5maWVsZE5hbWUuaGFzT3duUHJvcGVydHkoaykpYnJlYWs7YltrXT1nLnRvT2JqZWN0Rm4/Zy5pc1JlcGVhdGVkP2pzcGIuTWVzc2FnZS50b09iamVjdExpc3QoaCxnLnRvT2JqZWN0Rm4sZSk6Zy50b09iamVjdEZuKGUsaCk6aH19fTtcbmpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zPWZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSBpbiBjKXt2YXIgZj1jW2VdLGc9Zi5maWVsZEluZm87aWYoIWYuYmluYXJ5V3JpdGVyRm4pdGhyb3cgRXJyb3IoXCJNZXNzYWdlIGV4dGVuc2lvbiBwcmVzZW50IHRoYXQgd2FzIGdlbmVyYXRlZCB3aXRob3V0IGJpbmFyeSBzZXJpYWxpemF0aW9uIHN1cHBvcnRcIik7dmFyIGg9ZC5jYWxsKGEsZyk7aWYobnVsbCE9aClpZihnLmlzTWVzc2FnZVR5cGUoKSlpZihmLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbilmLmJpbmFyeVdyaXRlckZuLmNhbGwoYixnLmZpZWxkSW5kZXgsaCxmLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbik7ZWxzZSB0aHJvdyBFcnJvcihcIk1lc3NhZ2UgZXh0ZW5zaW9uIHByZXNlbnQgaG9sZGluZyBzdWJtZXNzYWdlIHdpdGhvdXQgYmluYXJ5IHN1cHBvcnQgZW5hYmxlZCwgYW5kIG1lc3NhZ2UgaXMgYmVpbmcgc2VyaWFsaXplZCB0byBiaW5hcnkgZm9ybWF0XCIpO1xuZWxzZSBmLmJpbmFyeVdyaXRlckZuLmNhbGwoYixnLmZpZWxkSW5kZXgsaCl9fTtqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWNbYi5nZXRGaWVsZE51bWJlcigpXTtpZihmKXtjPWYuZmllbGRJbmZvO2lmKCFmLmJpbmFyeVJlYWRlckZuKXRocm93IEVycm9yKFwiRGVzZXJpYWxpemluZyBleHRlbnNpb24gd2hvc2UgZ2VuZXJhdGVkIGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBiaW5hcnkgZm9ybWF0XCIpO2lmKGMuaXNNZXNzYWdlVHlwZSgpKXt2YXIgZz1uZXcgYy5jdG9yO2YuYmluYXJ5UmVhZGVyRm4uY2FsbChiLGcsZi5iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbil9ZWxzZSBnPWYuYmluYXJ5UmVhZGVyRm4uY2FsbChiKTtjLmlzUmVwZWF0ZWQmJiFmLmlzUGFja2VkPyhiPWQuY2FsbChhLGMpKT9iLnB1c2goZyk6ZS5jYWxsKGEsYyxbZ10pOmUuY2FsbChhLGMsZyl9ZWxzZSBiLnNraXBGaWVsZCgpfTtcbmpzcGIuTWVzc2FnZS5nZXRGaWVsZD1mdW5jdGlvbihhLGIpe2lmKGI8YS5waXZvdF8pe2I9anNwYi5NZXNzYWdlLmdldEluZGV4XyhhLGIpO3ZhciBjPWEuYXJyYXlbYl07cmV0dXJuIGM9PT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8/YS5hcnJheVtiXT1bXTpjfWlmKGEuZXh0ZW5zaW9uT2JqZWN0XylyZXR1cm4gYz1hLmV4dGVuc2lvbk9iamVjdF9bYl0sYz09PWpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz9hLmV4dGVuc2lvbk9iamVjdF9bYl09W106Y307anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKGEsYil9O2pzcGIuTWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0aW5nUG9pbnRGaWVsZD1mdW5jdGlvbihhLGIpe2E9anNwYi5NZXNzYWdlLmdldEZpZWxkKGEsYik7cmV0dXJuIG51bGw9PWE/YTorYX07XG5qc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGEsYil7YT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoYSxiKTtyZXR1cm4gbnVsbD09YT9hOiEhYX07anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKGEsYil7dmFyIGM9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoYSxiKTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc198fChhLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30pO2lmKCFhLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bYl0pe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF09K2NbZF07YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW2JdPSEwfXJldHVybiBjfTtcbmpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEJvb2xlYW5GaWVsZD1mdW5jdGlvbihhLGIpe3ZhciBjPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGEsYik7YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KTtpZighYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW2JdKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdPSEhY1tkXTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bYl09ITB9cmV0dXJuIGN9O1xuanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQ9ZnVuY3Rpb24oYSl7aWYobnVsbD09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBhKXJldHVybiBhO2lmKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShhKTtnb29nLmFzc2VydHMuZmFpbChcIkNhbm5vdCBjb2VyY2UgdG8gYjY0IHN0cmluZzogXCIrZ29vZy50eXBlT2YoYSkpO3JldHVybiBudWxsfTtqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4PWZ1bmN0aW9uKGEpe2lmKG51bGw9PWF8fGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBhO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5KGEpO2dvb2cuYXNzZXJ0cy5mYWlsKFwiQ2Fubm90IGNvZXJjZSB0byBVaW50OEFycmF5OiBcIitnb29nLnR5cGVPZihhKSk7cmV0dXJuIG51bGx9O1xuanNwYi5NZXNzYWdlLmJ5dGVzTGlzdEFzQjY0PWZ1bmN0aW9uKGEpe2pzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfKGEpO3JldHVybiBhLmxlbmd0aCYmXCJzdHJpbmdcIiE9PXR5cGVvZiBhWzBdP2dvb2cuYXJyYXkubWFwKGEsanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQpOmF9O2pzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc1U4PWZ1bmN0aW9uKGEpe2pzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfKGEpO3JldHVybiFhLmxlbmd0aHx8YVswXWluc3RhbmNlb2YgVWludDhBcnJheT9hOmdvb2cuYXJyYXkubWFwKGEsanNwYi5NZXNzYWdlLmJ5dGVzQXNVOCl9O1xuanNwYi5NZXNzYWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc189ZnVuY3Rpb24oYSl7aWYoZ29vZy5ERUJVRyYmYSYmMTxhLmxlbmd0aCl7dmFyIGI9Z29vZy50eXBlT2YoYVswXSk7Z29vZy5hcnJheS5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7Z29vZy50eXBlT2YoYSkhPWImJmdvb2cuYXNzZXJ0cy5mYWlsKFwiSW5jb25zaXN0ZW50IHR5cGUgaW4gSlNQQiByZXBlYXRlZCBmaWVsZCBhcnJheS4gR290IFwiK2dvb2cudHlwZU9mKGEpK1wiIGV4cGVjdGVkIFwiK2IpfSl9fTtqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihhLGIsYyl7YT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoYSxiKTtyZXR1cm4gbnVsbD09YT9jOmF9O2pzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihhLGIsYyl7YT1qc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKGEsYik7cmV0dXJuIG51bGw9PWE/YzphfTtcbmpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihhLGIsYyl7YT1qc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQoYSxiKTtyZXR1cm4gbnVsbD09YT9jOmF9O2pzcGIuTWVzc2FnZS5nZXRGaWVsZFByb3RvMz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdDtqc3BiLk1lc3NhZ2UuZ2V0TWFwRmllbGQ9ZnVuY3Rpb24oYSxiLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoYiBpbiBhLndyYXBwZXJzXylyZXR1cm4gYS53cmFwcGVyc19bYl07dmFyIGU9anNwYi5NZXNzYWdlLmdldEZpZWxkKGEsYik7aWYoIWUpe2lmKGMpcmV0dXJuO2U9W107anNwYi5NZXNzYWdlLnNldEZpZWxkKGEsYixlKX1yZXR1cm4gYS53cmFwcGVyc19bYl09bmV3IGpzcGIuTWFwKGUsZCl9O1xuanNwYi5NZXNzYWdlLnNldEZpZWxkPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7YjxhLnBpdm90Xz9hLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8oYSxiKV09YzooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhhKSxhLmV4dGVuc2lvbk9iamVjdF9bYl09Yyk7cmV0dXJuIGF9O2pzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsMCl9O2pzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhhLGIsYywwKX07XG5qc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhhLGIsYywhMSl9O2pzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsXCJcIil9O2pzcGIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhhLGIsYyxcIlwiKX07anNwYi5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsMCl9O1xuanNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ludEZpZWxkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhhLGIsYyxcIjBcIil9O2pzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF89ZnVuY3Rpb24oYSxiLGMsZCl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoYSxqc3BiLk1lc3NhZ2UpO2MhPT1kP2pzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGIsYyk6YjxhLnBpdm90Xz9hLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8oYSxiKV09bnVsbDooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhhKSxkZWxldGUgYS5leHRlbnNpb25PYmplY3RfW2JdKTtyZXR1cm4gYX07XG5qc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKGEsYixjLGQpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGEsanNwYi5NZXNzYWdlKTtiPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGEsYik7dm9pZCAwIT1kP2Iuc3BsaWNlKGQsMCxjKTpiLnB1c2goYyk7cmV0dXJuIGF9O2pzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkPWZ1bmN0aW9uKGEsYixjLGQpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGEsanNwYi5NZXNzYWdlKTsoYz1qc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZShhLGMpKSYmYyE9PWImJnZvaWQgMCE9PWQmJihhLndyYXBwZXJzXyYmYyBpbiBhLndyYXBwZXJzXyYmKGEud3JhcHBlcnNfW2NdPXZvaWQgMCksanNwYi5NZXNzYWdlLnNldEZpZWxkKGEsYyx2b2lkIDApKTtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKGEsYixkKX07XG5qc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkLGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXSxnPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChhLGYpO251bGwhPWcmJihjPWYsZD1nLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGYsdm9pZCAwKSl9cmV0dXJuIGM/KGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGMsZCksYyk6MH07anNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZD1mdW5jdGlvbihhLGIsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtpZighYS53cmFwcGVyc19bY10pe3ZhciBlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChhLGMpO2lmKGR8fGUpYS53cmFwcGVyc19bY109bmV3IGIoZSl9cmV0dXJuIGEud3JhcHBlcnNfW2NdfTtcbmpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihhLGIsYyl7anNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXyhhLGIsYyk7Yj1hLndyYXBwZXJzX1tjXTtiPT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8mJihiPWEud3JhcHBlcnNfW2NdPVtdKTtyZXR1cm4gYn07anNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXz1mdW5jdGlvbihhLGIsYyl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2NdKXtmb3IodmFyIGQ9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoYSxjKSxlPVtdLGY9MDtmPGQubGVuZ3RoO2YrKyllW2ZdPW5ldyBiKGRbZl0pO2Eud3JhcHBlcnNfW2NdPWV9fTtcbmpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGEsanNwYi5NZXNzYWdlKTthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTt2YXIgZD1jP2MudG9BcnJheSgpOmM7YS53cmFwcGVyc19bYl09YztyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKGEsYixkKX07anNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGEsYixjLGQpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGEsanNwYi5NZXNzYWdlKTthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTt2YXIgZT1kP2QudG9BcnJheSgpOmQ7YS53cmFwcGVyc19bYl09ZDtyZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQoYSxiLGMsZSl9O1xuanNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7Yz1jfHxbXTtmb3IodmFyIGQ9W10sZT0wO2U8Yy5sZW5ndGg7ZSsrKWRbZV09Y1tlXS50b0FycmF5KCk7YS53cmFwcGVyc19bYl09YztyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKGEsYixkKX07XG5qc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihhLGIsYyxkLGUpe2pzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF8oYSxkLGIpO3ZhciBmPWEud3JhcHBlcnNfW2JdO2Z8fChmPWEud3JhcHBlcnNfW2JdPVtdKTtjPWM/YzpuZXcgZDthPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGEsYik7dm9pZCAwIT1lPyhmLnNwbGljZShlLDAsYyksYS5zcGxpY2UoZSwwLGMudG9BcnJheSgpKSk6KGYucHVzaChjKSxhLnB1c2goYy50b0FycmF5KCkpKTtyZXR1cm4gY307anNwYi5NZXNzYWdlLnRvTWFwPWZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT17fSxmPTA7ZjxhLmxlbmd0aDtmKyspZVtiLmNhbGwoYVtmXSldPWM/Yy5jYWxsKGFbZl0sZCxhW2ZdKTphW2ZdO3JldHVybiBlfTtcbmpzcGIuTWVzc2FnZS5wcm90b3R5cGUuc3luY01hcEZpZWxkc189ZnVuY3Rpb24oKXtpZih0aGlzLndyYXBwZXJzXylmb3IodmFyIGEgaW4gdGhpcy53cmFwcGVyc18pe3ZhciBiPXRoaXMud3JhcHBlcnNfW2FdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYltjXSYmYltjXS50b0FycmF5KCk7ZWxzZSBiJiZiLnRvQXJyYXkoKX19O2pzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3RoaXMuc3luY01hcEZpZWxkc18oKTtyZXR1cm4gdGhpcy5hcnJheX07anNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX1NUUklORyYmKGpzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXkudG9TdHJpbmcoKX0pO1xuanNwYi5NZXNzYWdlLnByb3RvdHlwZS5nZXRFeHRlbnNpb249ZnVuY3Rpb24oYSl7aWYodGhpcy5leHRlbnNpb25PYmplY3RfKXt0aGlzLndyYXBwZXJzX3x8KHRoaXMud3JhcHBlcnNfPXt9KTt2YXIgYj1hLmZpZWxkSW5kZXg7aWYoYS5pc1JlcGVhdGVkKXtpZihhLmlzTWVzc2FnZVR5cGUoKSlyZXR1cm4gdGhpcy53cmFwcGVyc19bYl18fCh0aGlzLndyYXBwZXJzX1tiXT1nb29nLmFycmF5Lm1hcCh0aGlzLmV4dGVuc2lvbk9iamVjdF9bYl18fFtdLGZ1bmN0aW9uKGIpe3JldHVybiBuZXcgYS5jdG9yKGIpfSkpLHRoaXMud3JhcHBlcnNfW2JdfWVsc2UgaWYoYS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIXRoaXMud3JhcHBlcnNfW2JdJiZ0aGlzLmV4dGVuc2lvbk9iamVjdF9bYl0mJih0aGlzLndyYXBwZXJzX1tiXT1uZXcgYS5jdG9yKHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tiXSkpLHRoaXMud3JhcHBlcnNfW2JdO3JldHVybiB0aGlzLmV4dGVuc2lvbk9iamVjdF9bYl19fTtcbmpzcGIuTWVzc2FnZS5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYil7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7anNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0Xyh0aGlzKTt2YXIgYz1hLmZpZWxkSW5kZXg7YS5pc1JlcGVhdGVkPyhiPWJ8fFtdLGEuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tjXT1iLHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tjXT1nb29nLmFycmF5Lm1hcChiLGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvQXJyYXkoKX0pKTp0aGlzLmV4dGVuc2lvbk9iamVjdF9bY109Yik6YS5pc01lc3NhZ2VUeXBlKCk/KHRoaXMud3JhcHBlcnNfW2NdPWIsdGhpcy5leHRlbnNpb25PYmplY3RfW2NdPWI/Yi50b0FycmF5KCk6Yik6dGhpcy5leHRlbnNpb25PYmplY3RfW2NdPWI7cmV0dXJuIHRoaXN9O1xuanNwYi5NZXNzYWdlLmRpZmZlcmVuY2U9ZnVuY3Rpb24oYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiLmNvbnN0cnVjdG9yKSl0aHJvdyBFcnJvcihcIk1lc3NhZ2VzIGhhdmUgZGlmZmVyZW50IHR5cGVzLlwiKTt2YXIgYz1hLnRvQXJyYXkoKTtiPWIudG9BcnJheSgpO3ZhciBkPVtdLGU9MCxmPWMubGVuZ3RoPmIubGVuZ3RoP2MubGVuZ3RoOmIubGVuZ3RoO2EuZ2V0SnNQYk1lc3NhZ2VJZCgpJiYoZFswXT1hLmdldEpzUGJNZXNzYWdlSWQoKSxlPTEpO2Zvcig7ZTxmO2UrKylqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhjW2VdLGJbZV0pfHwoZFtlXT1iW2VdKTtyZXR1cm4gbmV3IGEuY29uc3RydWN0b3IoZCl9O2pzcGIuTWVzc2FnZS5lcXVhbHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09Ynx8ISghYXx8IWIpJiZhIGluc3RhbmNlb2YgYi5jb25zdHJ1Y3RvciYmanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoYS50b0FycmF5KCksYi50b0FycmF5KCkpfTtcbmpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucz1mdW5jdGlvbihhLGIpe2E9YXx8e307Yj1ifHx7fTt2YXIgYz17fSxkO2ZvcihkIGluIGEpY1tkXT0wO2ZvcihkIGluIGIpY1tkXT0wO2ZvcihkIGluIGMpaWYoIWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGFbZF0sYltkXSkpcmV0dXJuITE7cmV0dXJuITB9O1xuanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHM9ZnVuY3Rpb24oYSxiKXtpZihhPT1iKXJldHVybiEwO2lmKCFnb29nLmlzT2JqZWN0KGEpfHwhZ29vZy5pc09iamVjdChiKSlyZXR1cm5cIm51bWJlclwiPT09dHlwZW9mIGEmJmlzTmFOKGEpfHxcIm51bWJlclwiPT09dHlwZW9mIGImJmlzTmFOKGIpP1N0cmluZyhhKT09U3RyaW5nKGIpOiExO2lmKGEuY29uc3RydWN0b3IhPWIuY29uc3RydWN0b3IpcmV0dXJuITE7aWYoanNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZhLmNvbnN0cnVjdG9yPT09VWludDhBcnJheSl7aWYoYS5sZW5ndGghPWIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10hPWJbY10pcmV0dXJuITE7cmV0dXJuITB9aWYoYS5jb25zdHJ1Y3Rvcj09PUFycmF5KXt2YXIgZD12b2lkIDAsZT12b2lkIDAsZj1NYXRoLm1heChhLmxlbmd0aCxiLmxlbmd0aCk7Zm9yKGM9MDtjPGY7YysrKXt2YXIgZz1hW2NdLGg9YltjXTtnJiZcbmcuY29uc3RydWN0b3I9PU9iamVjdCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodm9pZCAwPT09ZCksZ29vZy5hc3NlcnRzLmFzc2VydChjPT09YS5sZW5ndGgtMSksZD1nLGc9dm9pZCAwKTtoJiZoLmNvbnN0cnVjdG9yPT1PYmplY3QmJihnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMD09PWUpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoYz09PWIubGVuZ3RoLTEpLGU9aCxoPXZvaWQgMCk7aWYoIWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGcsaCkpcmV0dXJuITF9cmV0dXJuIGR8fGU/KGQ9ZHx8e30sZT1lfHx7fSxqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMoZCxlKSk6ITB9aWYoYS5jb25zdHJ1Y3Rvcj09PU9iamVjdClyZXR1cm4ganNwYi5NZXNzYWdlLmNvbXBhcmVFeHRlbnNpb25zKGEsYik7dGhyb3cgRXJyb3IoXCJJbnZhbGlkIHR5cGUgaW4gSlNQQiBhcnJheVwiKTt9O2pzcGIuTWVzc2FnZS5wcm90b3R5cGUuY2xvbmVNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UodGhpcyl9O1xuanNwYi5NZXNzYWdlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKHRoaXMpfTtqc3BiLk1lc3NhZ2UuY2xvbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UoYSl9O2pzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBhLmNvbnN0cnVjdG9yKGpzcGIuTWVzc2FnZS5jbG9uZV8oYS50b0FycmF5KCkpKX07XG5qc3BiLk1lc3NhZ2UuY29weUludG89ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoYixqc3BiLk1lc3NhZ2UpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYS5jb25zdHJ1Y3Rvcj09Yi5jb25zdHJ1Y3RvcixcIkNvcHkgc291cmNlIGFuZCB0YXJnZXQgbWVzc2FnZSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlLlwiKTthPWpzcGIuTWVzc2FnZS5jbG9uZShhKTtmb3IodmFyIGM9Yi50b0FycmF5KCksZD1hLnRvQXJyYXkoKSxlPWMubGVuZ3RoPTA7ZTxkLmxlbmd0aDtlKyspY1tlXT1kW2VdO2Iud3JhcHBlcnNfPWEud3JhcHBlcnNfO2IuZXh0ZW5zaW9uT2JqZWN0Xz1hLmV4dGVuc2lvbk9iamVjdF99O1xuanNwYi5NZXNzYWdlLmNsb25lXz1mdW5jdGlvbihhKXtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IodmFyIGI9QXJyYXkoYS5sZW5ndGgpLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtudWxsIT1kJiYoYltjXT1cIm9iamVjdFwiPT10eXBlb2YgZD9qc3BiLk1lc3NhZ2UuY2xvbmVfKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZCkpOmQpfXJldHVybiBifWlmKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO2I9e307Zm9yKGMgaW4gYSlkPWFbY10sbnVsbCE9ZCYmKGJbY109XCJvYmplY3RcIj09dHlwZW9mIGQ/anNwYi5NZXNzYWdlLmNsb25lXyhnb29nLmFzc2VydHMuYXNzZXJ0KGQpKTpkKTtyZXR1cm4gYn07anNwYi5NZXNzYWdlLnJlZ2lzdGVyTWVzc2FnZVR5cGU9ZnVuY3Rpb24oYSxiKXtiLm1lc3NhZ2VJZD1hfTtqc3BiLk1lc3NhZ2UubWVzc2FnZVNldEV4dGVuc2lvbnM9e307XG5qc3BiLk1lc3NhZ2UubWVzc2FnZVNldEV4dGVuc2lvbnNCaW5hcnk9e307anNwYi5FeHBvcnQ9e307ZXhwb3J0cy5NYXA9anNwYi5NYXA7ZXhwb3J0cy5NZXNzYWdlPWpzcGIuTWVzc2FnZTtleHBvcnRzLkJpbmFyeVJlYWRlcj1qc3BiLkJpbmFyeVJlYWRlcjtleHBvcnRzLkJpbmFyeVdyaXRlcj1qc3BiLkJpbmFyeVdyaXRlcjtleHBvcnRzLkV4dGVuc2lvbkZpZWxkSW5mbz1qc3BiLkV4dGVuc2lvbkZpZWxkSW5mbztleHBvcnRzLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz1qc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbztleHBvcnRzLmV4cG9ydFN5bWJvbD1nb29nLmV4cG9ydFN5bWJvbDtleHBvcnRzLmluaGVyaXRzPWdvb2cuaW5oZXJpdHM7ZXhwb3J0cy5vYmplY3Q9e2V4dGVuZDpnb29nLm9iamVjdC5leHRlbmR9O2V4cG9ydHMudHlwZU9mPWdvb2cudHlwZU9mO1xuIiwiLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvYW55LnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnknLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnl9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHR5cGVVcmw6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgdmFsdWU6IG1zZy5nZXRWYWx1ZV9hc0I2NCgpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuQW55fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuQW55fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFR5cGVVcmwodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8gKHJlYWRlci5yZWFkQnl0ZXMoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuQW55LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRUeXBlVXJsKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VmFsdWVfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgdHlwZV91cmwgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuQW55fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2V0VHlwZVVybCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHZhbHVlID0gMjtcbiAqIEByZXR1cm4geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshKHN0cmluZ3xVaW50OEFycmF5KX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDI7XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRWYWx1ZSgpYFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRWYWx1ZV9hc0I2NCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NChcbiAgICAgIHRoaXMuZ2V0VmFsdWUoKSkpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHZhbHVlID0gMjtcbiAqIE5vdGUgdGhhdCBVaW50OEFycmF5IGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGJyb3dzZXJzLlxuICogQHNlZSBodHRwOi8vY2FuaXVzZS5jb20vVWludDhBcnJheVxuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0VmFsdWUoKWBcbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRWYWx1ZV9hc1U4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNVOChcbiAgICAgIHRoaXMuZ2V0VmFsdWUoKSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IShzdHJpbmd8VWludDhBcnJheSl9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zik7XG4vKiBUaGlzIGNvZGUgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCBjb2RlIGZvclxuICogZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90by4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2UsIGlmIGFueS5cbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLmdldFR5cGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldFR5cGVVcmwoKS5zcGxpdCgnLycpLnBvcCgpO1xufTtcblxuXG4vKipcbiAqIFBhY2tzIHRoZSBnaXZlbiBtZXNzYWdlIGluc3RhbmNlIGludG8gdGhpcyBBbnkuXG4gKiBGb3IgYmluYXJ5IGZvcm1hdCB1c2FnZSBvbmx5LlxuICogQHBhcmFtIHshVWludDhBcnJheX0gc2VyaWFsaXplZCBUaGUgc2VyaWFsaXplZCBkYXRhIHRvIHBhY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgdHlwZSBuYW1lIG9mIHRoaXMgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF90eXBlVXJsUHJlZml4IHRoZSB0eXBlIFVSTCBwcmVmaXguXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnBhY2sgPSBmdW5jdGlvbihzZXJpYWxpemVkLCBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90eXBlVXJsUHJlZml4KSB7XG4gIGlmICghb3B0X3R5cGVVcmxQcmVmaXgpIHtcbiAgICBvcHRfdHlwZVVybFByZWZpeCA9ICd0eXBlLmdvb2dsZWFwaXMuY29tLyc7XG4gIH1cblxuICBpZiAob3B0X3R5cGVVcmxQcmVmaXguc3Vic3RyKC0xKSAhPSAnLycpIHtcbiAgICB0aGlzLnNldFR5cGVVcmwob3B0X3R5cGVVcmxQcmVmaXggKyAnLycgKyBuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnNldFR5cGVVcmwob3B0X3R5cGVVcmxQcmVmaXggKyBuYW1lKTtcbiAgfVxuXG4gIHRoaXMuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG59O1xuXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIFVucGFja3MgdGhpcyBBbnkgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKFVpbnQ4QXJyYXkpOlR9IGRlc2VyaWFsaXplIEZ1bmN0aW9uIHRoYXQgd2lsbCBkZXNlcmlhbGl6ZVxuICogICAgIHRoZSBiaW5hcnkgZGF0YSBwcm9wZXJseS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBleHBlY3RlZCB0eXBlIG5hbWUgb2YgdGhpcyBtZXNzYWdlIG9iamVjdC5cbiAqIEByZXR1cm4gez9UfSBJZiB0aGUgbmFtZSBtYXRjaGVkIHRoZSBleHBlY3RlZCBuYW1lLCByZXR1cm5zIHRoZSBkZXNlcmlhbGl6ZWRcbiAqICAgICBvYmplY3QsIG90aGVyd2lzZSByZXR1cm5zIG51bGwuXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnVucGFjayA9IGZ1bmN0aW9uKGRlc2VyaWFsaXplLCBuYW1lKSB7XG4gIGlmICh0aGlzLmdldFR5cGVOYW1lKCkgPT0gbmFtZSkge1xuICAgIHJldHVybiBkZXNlcmlhbGl6ZSh0aGlzLmdldFZhbHVlX2FzVTgoKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG4iLCIvLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWwnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCcsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyc7XG59XG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyc7XG59XG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucyc7XG59XG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgNTAwLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkgPSB7fTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgNTAwLCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkgPSB7fTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbic7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbic7XG59XG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZmlsZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEZpbGVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0O1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRmlsZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0RmlsZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLmdldEZpbGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8sIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5zZXRGaWxlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLmFkZEZpbGUgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLmNsZWFyRmlsZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RmlsZUxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyA9IFszLDEwLDExLDQsNSw2LDddO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcGJfcGFja2FnZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZGVwZW5kZW5jeUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcHVibGljRGVwZW5kZW5jeUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxMCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHdlYWtEZXBlbmRlbmN5TGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDExKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbWVzc2FnZVR5cGVMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRNZXNzYWdlVHlwZUxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGVudW1UeXBlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RW51bVR5cGVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgc2VydmljZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFNlcnZpY2VMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgZXh0ZW5zaW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXh0ZW5zaW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBvcHRpb25zOiAoZiA9IG1zZy5nZXRPcHRpb25zKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHNvdXJjZUNvZGVJbmZvOiAoZiA9IG1zZy5nZXRTb3VyY2VDb2RlSW5mbygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8udG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBzeW50YXg6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMTIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG87XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBhY2thZ2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5hZGREZXBlbmRlbmN5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWRJbnQzMigpIDogW3JlYWRlci5yZWFkSW50MzIoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFB1YmxpY0RlcGVuZGVuY3kodmFsdWVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWRJbnQzMigpIDogW3JlYWRlci5yZWFkSW50MzIoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFdlYWtEZXBlbmRlbmN5KHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkTWVzc2FnZVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRW51bVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU2VydmljZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV4dGVuc2lvbiQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRPcHRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0U291cmNlQ29kZUluZm8odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U3ludGF4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXREZXBlbmRlbmN5TGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UHVibGljRGVwZW5kZW5jeUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkSW50MzIoXG4gICAgICAxMCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdlYWtEZXBlbmRlbmN5TGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRJbnQzMihcbiAgICAgIDExLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TWVzc2FnZVR5cGVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA0LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEVudW1UeXBlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgNSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U2VydmljZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDYsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV4dGVuc2lvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDcsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPcHRpb25zKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgOCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFNvdXJjZUNvZGVJbmZvKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgOSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMTIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBhY2thZ2UgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UGFja2FnZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclBhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBzdHJpbmcgZGVwZW5kZW5jeSA9IDM7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldERlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxzdHJpbmc+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMywgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJEZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXREZXBlbmRlbmN5TGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgaW50MzIgcHVibGljX2RlcGVuZGVuY3kgPSAxMDtcbiAqIEByZXR1cm4geyFBcnJheTxudW1iZXI+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UHVibGljRGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAxMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PG51bWJlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UHVibGljRGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFB1YmxpY0RlcGVuZGVuY3kgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclB1YmxpY0RlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFB1YmxpY0RlcGVuZGVuY3lMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBpbnQzMiB3ZWFrX2RlcGVuZGVuY3kgPSAxMTtcbiAqIEByZXR1cm4geyFBcnJheTxudW1iZXI+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0V2Vha0RlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMTEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFdlYWtEZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkV2Vha0RlcGVuZGVuY3kgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDExLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhcldlYWtEZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRXZWFrRGVwZW5kZW5jeUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIERlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE1lc3NhZ2VUeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bywgNCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE1lc3NhZ2VUeXBlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZE1lc3NhZ2VUeXBlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDQsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VUeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRNZXNzYWdlVHlwZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEVudW1EZXNjcmlwdG9yUHJvdG8gZW51bV90eXBlID0gNTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RW51bVR5cGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sIDUpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RW51bVR5cGVMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFbnVtVHlwZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA1LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRW51bVR5cGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEVudW1UeXBlTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgU2VydmljZURlc2NyaXB0b3JQcm90byBzZXJ2aWNlID0gNjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U2VydmljZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bywgNikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRTZXJ2aWNlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkU2VydmljZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA2LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU2VydmljZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U2VydmljZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDc7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbnNpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bywgNykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFeHRlbnNpb24kID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDcsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFeHRlbnNpb25MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBGaWxlT3B0aW9ucyBvcHRpb25zID0gODtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLCA4KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCA4LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDgpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgU291cmNlQ29kZUluZm8gc291cmNlX2NvZGVfaW5mbyA9IDk7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U291cmNlQ29kZUluZm8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8sIDkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm98dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U291cmNlQ29kZUluZm8gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCA5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJTb3VyY2VDb2RlSW5mbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTb3VyY2VDb2RlSW5mbyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNTb3VyY2VDb2RlSW5mbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDkpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHN5bnRheCA9IDEyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U3ludGF4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U3ludGF4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclN5bnRheCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNTeW50YXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxMikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyA9IFsyLDYsMyw0LDUsOCw5LDEwXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZmllbGRMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRGaWVsZExpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgZXh0ZW5zaW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXh0ZW5zaW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBuZXN0ZWRUeXBlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0TmVzdGVkVHlwZUxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGVudW1UeXBlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RW51bVR5cGVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgZXh0ZW5zaW9uUmFuZ2VMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRFeHRlbnNpb25SYW5nZUxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIG9uZW9mRGVjbExpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE9uZW9mRGVjbExpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICByZXNlcnZlZFJhbmdlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgcmVzZXJ2ZWROYW1lTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDEwKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEZpZWxkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRXh0ZW5zaW9uJCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkTmVzdGVkVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRFbnVtVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRXh0ZW5zaW9uUmFuZ2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRPbmVvZkRlY2wodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRPcHRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUmVzZXJ2ZWRSYW5nZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5hZGRSZXNlcnZlZE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEZpZWxkTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV4dGVuc2lvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDYsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXROZXN0ZWRUeXBlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFbnVtVHlwZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDQsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV4dGVuc2lvblJhbmdlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgNSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPbmVvZkRlY2xMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA4LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDcsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRSZXNlcnZlZFJhbmdlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJlc2VydmVkTmFtZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMTAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN0YXJ0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBlbmQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0U3RhcnQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldEVuZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBzdGFydCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmdldFN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmNsZWFyU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBlbmQgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5nZXRFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXRFbmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmNsZWFyRW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5oYXNFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEV4dGVuc2lvblJhbmdlT3B0aW9ucyBvcHRpb25zID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgc3RhcnQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGVuZDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldFN0YXJ0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRFbmQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBzdGFydCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0U3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhclN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBlbmQgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldEVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXRFbmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhckVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRGaWVsZExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RmllbGRMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRmllbGQgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRmllbGRMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEZpZWxkTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sIDYpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFeHRlbnNpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRXh0ZW5zaW9uJCA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA2LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV4dGVuc2lvbkxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIERlc2NyaXB0b3JQcm90byBuZXN0ZWRfdHlwZSA9IDM7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROZXN0ZWRUeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bywgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROZXN0ZWRUeXBlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkTmVzdGVkVHlwZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmVzdGVkVHlwZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TmVzdGVkVHlwZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEVudW1EZXNjcmlwdG9yUHJvdG8gZW51bV90eXBlID0gNDtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFbnVtVHlwZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bywgNCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RW51bVR5cGVMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEVudW1UeXBlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDQsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRW51bVR5cGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEVudW1UeXBlTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRXh0ZW5zaW9uUmFuZ2UgZXh0ZW5zaW9uX3JhbmdlID0gNTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZT59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuc2lvblJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSwgNSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFeHRlbnNpb25SYW5nZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEV4dGVuc2lvblJhbmdlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDUsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25SYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXh0ZW5zaW9uUmFuZ2VMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBPbmVvZkRlc2NyaXB0b3JQcm90byBvbmVvZl9kZWNsID0gODtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T25lb2ZEZWNsTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8sIDgpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPbmVvZkRlY2xMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA4LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkT25lb2ZEZWNsID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDgsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9uZW9mRGVjbExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T25lb2ZEZWNsTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgTWVzc2FnZU9wdGlvbnMgb3B0aW9ucyA9IDc7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLCA3KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFJlc2VydmVkUmFuZ2UgcmVzZXJ2ZWRfcmFuZ2UgPSA5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2U+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRSZXNlcnZlZFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UsIDkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRSZXNlcnZlZFJhbmdlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFJlc2VydmVkUmFuZ2UgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUmVzZXJ2ZWRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzZXJ2ZWRSYW5nZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyByZXNlcnZlZF9uYW1lID0gMTA7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWROYW1lTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDEwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWROYW1lTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFJlc2VydmVkTmFtZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMTAsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkTmFtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzZXJ2ZWROYW1lTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24oLyoqIEB0eXBlIHshanNwYi5NZXNzYWdlfSAqLyAobXNnKSwgb2JqLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbnVtYmVyOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBsYWJlbDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgdHlwZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA1KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgdHlwZU5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGV4dGVuZGVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBkZWZhdWx0VmFsdWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNykpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG9uZW9mSW5kZXg6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgOSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGpzb25OYW1lOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEwKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgcHJvdG8zT3B0aW9uYWw6IChmID0ganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZChtc2csIDE3KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXROdW1iZXIodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldExhYmVsKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRUeXBlTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEV4dGVuZGVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RGVmYXVsdFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRPbmVvZkluZGV4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEpzb25OYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRPcHRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0UHJvdG8zT3B0aW9uYWwodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWx9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgOSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICA5LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEwKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxMCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICA4LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgPSB7XG4gIFRZUEVfRE9VQkxFOiAxLFxuICBUWVBFX0ZMT0FUOiAyLFxuICBUWVBFX0lOVDY0OiAzLFxuICBUWVBFX1VJTlQ2NDogNCxcbiAgVFlQRV9JTlQzMjogNSxcbiAgVFlQRV9GSVhFRDY0OiA2LFxuICBUWVBFX0ZJWEVEMzI6IDcsXG4gIFRZUEVfQk9PTDogOCxcbiAgVFlQRV9TVFJJTkc6IDksXG4gIFRZUEVfR1JPVVA6IDEwLFxuICBUWVBFX01FU1NBR0U6IDExLFxuICBUWVBFX0JZVEVTOiAxMixcbiAgVFlQRV9VSU5UMzI6IDEzLFxuICBUWVBFX0VOVU06IDE0LFxuICBUWVBFX1NGSVhFRDMyOiAxNSxcbiAgVFlQRV9TRklYRUQ2NDogMTYsXG4gIFRZUEVfU0lOVDMyOiAxNyxcbiAgVFlQRV9TSU5UNjQ6IDE4XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCA9IHtcbiAgTEFCRUxfT1BUSU9OQUw6IDEsXG4gIExBQkVMX1JFUVVJUkVEOiAyLFxuICBMQUJFTF9SRVBFQVRFRDogM1xufTtcblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE51bWJlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc051bWJlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgTGFiZWwgbGFiZWwgPSA0O1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldExhYmVsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgVHlwZSB0eXBlID0gNTtcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA1LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDUpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHR5cGVfbmFtZSA9IDY7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0VHlwZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0VHlwZU5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclR5cGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1R5cGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgZXh0ZW5kZWUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuZGVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEV4dGVuZGVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbmRlZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNFeHRlbmRlZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUgPSA3O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA3LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDcsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIG9uZW9mX2luZGV4ID0gOTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPbmVvZkluZGV4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDksIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9uZW9mSW5kZXggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9uZW9mSW5kZXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA5LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT25lb2ZJbmRleCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDkpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGpzb25fbmFtZSA9IDEwO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEpzb25OYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEwLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRKc29uTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckpzb25OYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNKc29uTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEwKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEZpZWxkT3B0aW9ucyBvcHRpb25zID0gODtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucywgOCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgOCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA4KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgcHJvdG8zX29wdGlvbmFsID0gMTc7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFByb3RvM09wdGlvbmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMTcsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UHJvdG8zT3B0aW9uYWwgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDE3LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJQcm90bzNPcHRpb25hbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDE3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzUHJvdG8zT3B0aW9uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxNykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPcHRpb25zKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgT25lb2ZPcHRpb25zIG9wdGlvbnMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfID0gWzIsNCw1XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHZhbHVlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VmFsdWVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBvcHRpb25zOiAoZiA9IG1zZy5nZXRPcHRpb25zKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHJlc2VydmVkUmFuZ2VMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZXNlcnZlZFJhbmdlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIHJlc2VydmVkTmFtZUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCA1KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRSZXNlcnZlZFJhbmdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkUmVzZXJ2ZWROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VmFsdWVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDQsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJlc2VydmVkTmFtZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgNSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN0YXJ0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBlbmQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldFN0YXJ0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRFbmQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIHN0YXJ0ID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldFN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXRTdGFydCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhclN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuaGFzU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5nZXRFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNldEVuZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhckVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc0VuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gdmFsdWUgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFZhbHVlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFZhbHVlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFZhbHVlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclZhbHVlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRWYWx1ZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEVudW1PcHRpb25zIG9wdGlvbnMgPSAzO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBFbnVtUmVzZXJ2ZWRSYW5nZSByZXNlcnZlZF9yYW5nZSA9IDQ7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UsIDQpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWRSYW5nZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFJlc2VydmVkUmFuZ2UgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNCwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc2VydmVkUmFuZ2VMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBzdHJpbmcgcmVzZXJ2ZWRfbmFtZSA9IDU7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkTmFtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCA1KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRSZXNlcnZlZE5hbWVMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA1LCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFJlc2VydmVkTmFtZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgNSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJSZXNlcnZlZE5hbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc2VydmVkTmFtZUxpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG51bWJlcjogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldE51bWJlcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRPcHRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROdW1iZXIgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEVudW1WYWx1ZU9wdGlvbnMgb3B0aW9ucyA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbWV0aG9kTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0TWV0aG9kTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG87XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkTWV0aG9kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1ldGhvZExpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgTWV0aG9kRGVzY3JpcHRvclByb3RvIG1ldGhvZCA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TWV0aG9kTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE1ldGhvZExpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRNZXRob2QgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTWV0aG9kTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRNZXRob2RMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBTZXJ2aWNlT3B0aW9ucyBvcHRpb25zID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgaW5wdXRUeXBlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBvdXRwdXRUeXBlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBvcHRpb25zOiAoZiA9IG1zZy5nZXRPcHRpb25zKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgY2xpZW50U3RyZWFtaW5nOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCA1LCBmYWxzZSksXG4gICAgc2VydmVyU3RyZWFtaW5nOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCA2LCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElucHV0VHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE91dHB1dFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0Q2xpZW50U3RyZWFtaW5nKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRTZXJ2ZXJTdHJlYW1pbmcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPcHRpb25zKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgNCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA1KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGlucHV0X3R5cGUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRJbnB1dFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRJbnB1dFR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFySW5wdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNJbnB1dFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBvdXRwdXRfdHlwZSA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE91dHB1dFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPdXRwdXRUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck91dHB1dFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc091dHB1dFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE1ldGhvZE9wdGlvbnMgb3B0aW9ucyA9IDQ7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLCA0KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBjbGllbnRfc3RyZWFtaW5nID0gNTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldENsaWVudFN0cmVhbWluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRDbGllbnRTdHJlYW1pbmcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyQ2xpZW50U3RyZWFtaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNDbGllbnRTdHJlYW1pbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgc2VydmVyX3N0cmVhbWluZyA9IDY7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRTZXJ2ZXJTdHJlYW1pbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCA2LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U2VydmVyU3RyZWFtaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclNlcnZlclN0cmVhbWluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU2VydmVyU3RyZWFtaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgamF2YVBhY2thZ2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGphdmFPdXRlckNsYXNzbmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA4KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgamF2YU11bHRpcGxlRmlsZXM6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEwLCBmYWxzZSksXG4gICAgamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKG1zZywgMjApKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBqYXZhU3RyaW5nQ2hlY2tVdGY4OiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAyNywgZmFsc2UpLFxuICAgIG9wdGltaXplRm9yOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDksIDEpLFxuICAgIGdvUGFja2FnZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGNjR2VuZXJpY1NlcnZpY2VzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxNiwgZmFsc2UpLFxuICAgIGphdmFHZW5lcmljU2VydmljZXM6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDE3LCBmYWxzZSksXG4gICAgcHlHZW5lcmljU2VydmljZXM6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDE4LCBmYWxzZSksXG4gICAgcGhwR2VuZXJpY1NlcnZpY2VzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCA0MiwgZmFsc2UpLFxuICAgIGRlcHJlY2F0ZWQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDIzLCBmYWxzZSksXG4gICAgY2NFbmFibGVBcmVuYXM6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDMxLCB0cnVlKSxcbiAgICBvYmpjQ2xhc3NQcmVmaXg6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMzYpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBjc2hhcnBOYW1lc3BhY2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMzcpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBzd2lmdFByZWZpeDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAzOSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHBocENsYXNzUHJlZml4OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDQwKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcGhwTmFtZXNwYWNlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDQxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcGhwTWV0YWRhdGFOYW1lc3BhY2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNDQpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBydWJ5UGFja2FnZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0NSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEphdmFQYWNrYWdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0SmF2YU91dGVyQ2xhc3NuYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0SmF2YU11bHRpcGxlRmlsZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyMDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0SmF2YVN0cmluZ0NoZWNrVXRmOCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldE9wdGltaXplRm9yKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEdvUGFja2FnZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE2OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldENjR2VuZXJpY1NlcnZpY2VzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0SmF2YUdlbmVyaWNTZXJ2aWNlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE4OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFB5R2VuZXJpY1NlcnZpY2VzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0UGhwR2VuZXJpY1NlcnZpY2VzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDMxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldENjRW5hYmxlQXJlbmFzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE9iamNDbGFzc1ByZWZpeCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDc2hhcnBOYW1lc3BhY2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U3dpZnRQcmVmaXgodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0MDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGhwQ2xhc3NQcmVmaXgodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0MTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGhwTmFtZXNwYWNlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBocE1ldGFkYXRhTmFtZXNwYWNlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJ1YnlQYWNrYWdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgOCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgOCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTApKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxMCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMjApKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyMCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMjcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDkpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICA5LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDExKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxNixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTgpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxOCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA0MixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMjMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMzEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMzYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMzcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDM3LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDM5KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzOSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0MCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNDAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQ0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA0NCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0NSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKTtcbn07XG5cblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlID0ge1xuICBTUEVFRDogMSxcbiAgQ09ERV9TSVpFOiAyLFxuICBMSVRFX1JVTlRJTUU6IDNcbn07XG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGphdmFfcGFja2FnZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YVBhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YVBhY2thZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgamF2YV9vdXRlcl9jbGFzc25hbWUgPSA4O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFPdXRlckNsYXNzbmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA4LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhT3V0ZXJDbGFzc25hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDgsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFPdXRlckNsYXNzbmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDgsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhT3V0ZXJDbGFzc25hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA4KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgamF2YV9tdWx0aXBsZV9maWxlcyA9IDEwO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhTXVsdGlwbGVGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEwLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFNdWx0aXBsZUZpbGVzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YU11bHRpcGxlRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFNdWx0aXBsZUZpbGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTApICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCA9IDIwO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMjAsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMjAsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyMCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyMCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGphdmFfc3RyaW5nX2NoZWNrX3V0ZjggPSAyNztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YVN0cmluZ0NoZWNrVXRmOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDI3LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFTdHJpbmdDaGVja1V0ZjggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDI3LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhU3RyaW5nQ2hlY2tVdGY4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMjcsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhU3RyaW5nQ2hlY2tVdGY4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMjcpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgT3B0aW1pemVNb2RlIG9wdGltaXplX2ZvciA9IDk7XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRPcHRpbWl6ZUZvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDksIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0T3B0aW1pemVGb3IgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhck9wdGltaXplRm9yID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgOSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc09wdGltaXplRm9yID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgOSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgZ29fcGFja2FnZSA9IDExO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEdvUGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0R29QYWNrYWdlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyR29QYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNHb1BhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGNjX2dlbmVyaWNfc2VydmljZXMgPSAxNjtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q2NHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxNiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRDY0dlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckNjR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTYsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNDY0dlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDE2KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmljX3NlcnZpY2VzID0gMTc7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxNywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDE3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDE3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgcHlfZ2VuZXJpY19zZXJ2aWNlcyA9IDE4O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQeUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDE4LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFB5R2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxOCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUHlHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxOCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1B5R2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTgpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBwaHBfZ2VuZXJpY19zZXJ2aWNlcyA9IDQyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQaHBHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0MiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0MiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocEdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDIzO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXREZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMjMsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMjMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGNjX2VuYWJsZV9hcmVuYXMgPSAzMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q2NFbmFibGVBcmVuYXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzMSwgdHJ1ZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldENjRW5hYmxlQXJlbmFzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyQ2NFbmFibGVBcmVuYXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0NjRW5hYmxlQXJlbmFzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMzEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG9iamNfY2xhc3NfcHJlZml4ID0gMzY7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0T2JqY0NsYXNzUHJlZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDM2LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRPYmpjQ2xhc3NQcmVmaXggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJPYmpjQ2xhc3NQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzNiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc09iamNDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDM2KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBjc2hhcnBfbmFtZXNwYWNlID0gMzc7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q3NoYXJwTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDM3LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRDc2hhcnBOYW1lc3BhY2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM3LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDc2hhcnBOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzNywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0NzaGFycE5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDM3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBzd2lmdF9wcmVmaXggPSAzOTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRTd2lmdFByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzOSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0U3dpZnRQcmVmaXggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJTd2lmdFByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM5LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzU3dpZnRQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzOSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcGhwX2NsYXNzX3ByZWZpeCA9IDQwO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFBocENsYXNzUHJlZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQwLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDAsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclBocENsYXNzUHJlZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDAsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQwKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaHBfbmFtZXNwYWNlID0gNDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBOYW1lc3BhY2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0MSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocE5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaHBfbWV0YWRhdGFfbmFtZXNwYWNlID0gNDQ7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwTWV0YWRhdGFOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNDQsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFBocE1ldGFkYXRhTmFtZXNwYWNlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0NCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGhwTWV0YWRhdGFOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0NCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocE1ldGFkYXRhTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHJ1YnlfcGFja2FnZSA9IDQ1O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFJ1YnlQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQ1LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRSdWJ5UGFja2FnZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclJ1YnlQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDUsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNSdWJ5UGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQ1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbWVzc2FnZVNldFdpcmVGb3JtYXQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEsIGZhbHNlKSxcbiAgICBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBmYWxzZSksXG4gICAgZGVwcmVjYXRlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgZmFsc2UpLFxuICAgIG1hcEVudHJ5OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQobXNnLCA3KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24oLyoqIEB0eXBlIHshanNwYi5NZXNzYWdlfSAqLyAobXNnKSwgb2JqLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgaW5jbHVkZUluc3RhbmNlKTtcbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0Tm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0TWFwRW50cnkodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OTk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRVbmludGVycHJldGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihtc2csIHJlYWRlcixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA3LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IDE7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldE1lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyTWVzc2FnZVNldFdpcmVGb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzTWVzc2FnZVNldFdpcmVGb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvciA9IDI7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIG1hcF9lbnRyeSA9IDc7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldE1hcEVudHJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRNYXBFbnRyeSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyTWFwRW50cnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzTWFwRW50cnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnJlcGVhdGVkRmllbGRzXyA9IFs5OTldO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjdHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKSxcbiAgICBwYWNrZWQ6IChmID0ganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBqc3R5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgNiwgMCksXG4gICAgbGF6eToganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNSwgZmFsc2UpLFxuICAgIGRlcHJlY2F0ZWQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDMsIGZhbHNlKSxcbiAgICB3ZWFrOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxMCwgZmFsc2UpLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgaW5jbHVkZUluc3RhbmNlKTtcbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldEN0eXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRQYWNrZWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGV9ICovIChyZWFkZXIucmVhZEVudW0oKSk7XG4gICAgICBtc2cuc2V0SnN0eXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRMYXp5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXREZXByZWNhdGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0V2Vhayh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVFbnVtKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDUpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTApKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxMCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZSA9IHtcbiAgU1RSSU5HOiAwLFxuICBDT1JEOiAxLFxuICBTVFJJTkdfUElFQ0U6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGUgPSB7XG4gIEpTX05PUk1BTDogMCxcbiAgSlNfU1RSSU5HOiAxLFxuICBKU19OVU1CRVI6IDJcbn07XG5cbi8qKlxuICogb3B0aW9uYWwgQ1R5cGUgY3R5cGUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEN0eXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldEN0eXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhckN0eXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNDdHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBwYWNrZWQgPSAyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGFja2VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldFBhY2tlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQYWNrZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc1BhY2tlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgSlNUeXBlIGpzdHlwZSA9IDY7XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEpzdHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA2LCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldEpzdHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKc3R5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc0pzdHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDYpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBsYXp5ID0gNTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldExhenkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCA1LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0TGF6eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJMYXp5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNMYXp5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgd2VhayA9IDEwO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0V2VhayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEwLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0V2VhayA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyV2VhayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmhhc1dlYWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxMCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIDk5OSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24oLyoqIEB0eXBlIHshanNwYi5NZXNzYWdlfSAqLyAobXNnKSwgb2JqLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBhbGxvd0FsaWFzOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZGVwcmVjYXRlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgZmFsc2UpLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0QWxsb3dBbGlhcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBhbGxvd19hbGlhcyA9IDI7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldEFsbG93QWxpYXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldEFsbG93QWxpYXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5jbGVhckFsbG93QWxpYXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuaGFzQWxsb3dBbGlhcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBkZXByZWNhdGVkOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSksXG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24oLyoqIEB0eXBlIHshanNwYi5NZXNzYWdlfSAqLyAobXNnKSwgb2JqLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXREZXByZWNhdGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDE7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBkZXByZWNhdGVkOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAzMywgZmFsc2UpLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDMzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldERlcHJlY2F0ZWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OTk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRVbmludGVycHJldGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihtc2csIHJlYWRlcixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMzMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMzLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMzMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIDk5OSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnJlcGVhdGVkRmllbGRzXyA9IFs5OTldO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZGVwcmVjYXRlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMzMsIGZhbHNlKSxcbiAgICBpZGVtcG90ZW5jeUxldmVsOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDM0LCAwKSxcbiAgICB1bmludGVycHJldGVkT3B0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbigvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChtc2cpLCBvYmosXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgaW5jbHVkZUluc3RhbmNlKTtcbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAzMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXREZXByZWNhdGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldElkZW1wb3RlbmN5TGV2ZWwodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OTk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRVbmludGVycHJldGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihtc2csIHJlYWRlcixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMzMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDM0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVFbnVtKFxuICAgICAgMzQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbCA9IHtcbiAgSURFTVBPVEVOQ1lfVU5LTk9XTjogMCxcbiAgTk9fU0lERV9FRkZFQ1RTOiAxLFxuICBJREVNUE9URU5UOiAyXG59O1xuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMzO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzMywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBJZGVtcG90ZW5jeUxldmVsIGlkZW1wb3RlbmN5X2xldmVsID0gMzQ7XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldElkZW1wb3RlbmN5TGV2ZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWx9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzNCwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWx9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0SWRlbXBvdGVuY3lMZXZlbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJJZGVtcG90ZW5jeUxldmVsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzQsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmhhc0lkZW1wb3RlbmN5TGV2ZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzNCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE5hbWVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgaWRlbnRpZmllclZhbHVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBwb3NpdGl2ZUludFZhbHVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDQpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBuZWdhdGl2ZUludFZhbHVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDUpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBkb3VibGVWYWx1ZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQobXNnLCA2KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgc3RyaW5nVmFsdWU6IG1zZy5nZXRTdHJpbmdWYWx1ZV9hc0I2NCgpLFxuICAgIGFnZ3JlZ2F0ZVZhbHVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDgpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRJZGVudGlmaWVyVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZFVpbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGl2ZUludFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXROZWdhdGl2ZUludFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0RG91YmxlVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8gKHJlYWRlci5yZWFkQnl0ZXMoKSk7XG4gICAgICBtc2cuc2V0U3RyaW5nVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRBZ2dyZWdhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDY0KFxuICAgICAgNCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA1KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQ2NChcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgNixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUgeyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDcpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJ5dGVzKFxuICAgICAgNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA4KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA4LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZVBhcnQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGlzRXh0ZW5zaW9uOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0O1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnR9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnR9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWVQYXJ0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRJc0V4dGVuc2lvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcXVpcmVkIHN0cmluZyBuYW1lX3BhcnQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuZ2V0TmFtZVBhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLnNldE5hbWVQYXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmNsZWFyTmFtZVBhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5oYXNOYW1lUGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVxdWlyZWQgYm9vbCBpc19leHRlbnNpb24gPSAyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmdldElzRXh0ZW5zaW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuc2V0SXNFeHRlbnNpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuY2xlYXJJc0V4dGVuc2lvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmhhc0lzRXh0ZW5zaW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBOYW1lUGFydCBuYW1lID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQ+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0TmFtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydD59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXROYW1lTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0PX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuYWRkTmFtZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyTmFtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TmFtZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBpZGVudGlmaWVyX3ZhbHVlID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldElkZW50aWZpZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0SWRlbnRpZmllclZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFySWRlbnRpZmllclZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzSWRlbnRpZmllclZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCB1aW50NjQgcG9zaXRpdmVfaW50X3ZhbHVlID0gNDtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldFBvc2l0aXZlSW50VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldFBvc2l0aXZlSW50VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJQb3NpdGl2ZUludFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzUG9zaXRpdmVJbnRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgbmVnYXRpdmVfaW50X3ZhbHVlID0gNTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldE5lZ2F0aXZlSW50VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldE5lZ2F0aXZlSW50VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJOZWdhdGl2ZUludFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzTmVnYXRpdmVJbnRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDUpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGRvdWJsZV92YWx1ZSA9IDY7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXREb3VibGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgNiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0RG91YmxlVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJEb3VibGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0RvdWJsZVZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBzdHJpbmdfdmFsdWUgPSA3O1xuICogQHJldHVybiB7IShzdHJpbmd8VWludDhBcnJheSl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshKHN0cmluZ3xVaW50OEFycmF5KX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDcsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBzdHJpbmdfdmFsdWUgPSA3O1xuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0U3RyaW5nVmFsdWUoKWBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldFN0cmluZ1ZhbHVlX2FzQjY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KFxuICAgICAgdGhpcy5nZXRTdHJpbmdWYWx1ZSgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVlID0gNztcbiAqIE5vdGUgdGhhdCBVaW50OEFycmF5IGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGJyb3dzZXJzLlxuICogQHNlZSBodHRwOi8vY2FuaXVzZS5jb20vVWludDhBcnJheVxuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0U3RyaW5nVmFsdWUoKWBcbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWVfYXNVOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgoXG4gICAgICB0aGlzLmdldFN0cmluZ1ZhbHVlKCkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldFN0cmluZ1ZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA3LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyU3RyaW5nVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5oYXNTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDcpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGFnZ3JlZ2F0ZV92YWx1ZSA9IDg7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRBZ2dyZWdhdGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA4LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0QWdncmVnYXRlVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDgsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJBZ2dyZWdhdGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDgsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0FnZ3JlZ2F0ZVZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgOCkgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxvY2F0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0TG9jYXRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkTG9jYXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldExvY2F0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnJlcGVhdGVkRmllbGRzXyA9IFsxLDIsNl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcGF0aExpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgc3Bhbkxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbGVhZGluZ0NvbW1lbnRzOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB0cmFpbGluZ0NvbW1lbnRzOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDQpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBsZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCA2KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkSW50MzIoKSA6IFtyZWFkZXIucmVhZEludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQYXRoKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWRJbnQzMigpIDogW3JlYWRlci5yZWFkSW50MzIoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFNwYW4odmFsdWVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TGVhZGluZ0NvbW1lbnRzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0VHJhaWxpbmdDb21tZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZExlYWRpbmdEZXRhY2hlZENvbW1lbnRzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQYXRoTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkSW50MzIoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3Bhbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZEludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgNixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgaW50MzIgcGF0aCA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5nZXRQYXRoTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0UGF0aExpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5hZGRQYXRoID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmNsZWFyUGF0aExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UGF0aExpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGludDMyIHNwYW4gPSAyO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0U3Bhbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8bnVtYmVyPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFNwYW5MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuYWRkU3BhbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclNwYW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFNwYW5MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbGVhZGluZ19jb21tZW50cyA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0TGVhZGluZ0NvbW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldExlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmNsZWFyTGVhZGluZ0NvbW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmhhc0xlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHRyYWlsaW5nX2NvbW1lbnRzID0gNDtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5nZXRUcmFpbGluZ0NvbW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFRyYWlsaW5nQ29tbWVudHMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclRyYWlsaW5nQ29tbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuaGFzVHJhaWxpbmdDb21tZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMgPSA2O1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxzdHJpbmc+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgNikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5zZXRMZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5hZGRMZWFkaW5nRGV0YWNoZWRDb21tZW50cyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgNiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhckxlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRMZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIExvY2F0aW9uIGxvY2F0aW9uID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5nZXRMb2NhdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnNldExvY2F0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuYWRkTG9jYXRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5jbGVhckxvY2F0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRMb2NhdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgYW5ub3RhdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEFubm90YXRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkQW5ub3RhdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0QW5ub3RhdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcGF0aExpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgc291cmNlRmlsZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgYmVnaW46IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMykpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGVuZDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWRJbnQzMigpIDogW3JlYWRlci5yZWFkSW50MzIoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFBhdGgodmFsdWVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U291cmNlRmlsZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0QmVnaW4odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldEVuZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQYXRoTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkSW50MzIoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgNCxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgaW50MzIgcGF0aCA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldFBhdGhMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PG51bWJlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2V0UGF0aExpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuYWRkUGF0aCA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuY2xlYXJQYXRoTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQYXRoTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHNvdXJjZV9maWxlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldFNvdXJjZUZpbGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldFNvdXJjZUZpbGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuY2xlYXJTb3VyY2VGaWxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuaGFzU291cmNlRmlsZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgYmVnaW4gPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuZ2V0QmVnaW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldEJlZ2luID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyQmVnaW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5oYXNCZWdpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgZW5kID0gNDtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldEVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2V0RW5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyRW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuaGFzRW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBBbm5vdGF0aW9uIGFubm90YXRpb24gPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuZ2V0QW5ub3RhdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbiwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLnNldEFubm90YXRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuYWRkQW5ub3RhdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuY2xlYXJBbm5vdGF0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRBbm5vdGF0aW9uTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUucHJvdG9idWYpO1xuIiwiLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbic7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb259IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgc2Vjb25kczoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKSxcbiAgICBuYW5vczoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb247XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0U2Vjb25kcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0TmFub3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFNlY29uZHMoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQ2NChcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXROYW5vcygpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5wcm90b3R5cGUuZ2V0U2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5zZXRTZWNvbmRzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgbmFub3MgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLmdldE5hbm9zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnNldE5hbm9zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUucHJvdG9idWYpO1xuIiwiLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLktpbmRDYXNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzXyk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZmllbGRzTWFwOiAoZiA9IG1zZy5nZXRGaWVsZHNNYXAoKSkgPyBmLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnRvT2JqZWN0KSA6IFtdXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdDtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBtc2cuZ2V0RmllbGRzTWFwKCk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlYWRlcikge1xuICAgICAgICBqc3BiLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShtZXNzYWdlLCByZWFkZXIsIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLCBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2UsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsIFwiXCIsIG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUoKSk7XG4gICAgICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0RmllbGRzTWFwKHRydWUpO1xuICBpZiAoZiAmJiBmLmdldExlbmd0aCgpID4gMCkge1xuICAgIGYuc2VyaWFsaXplQmluYXJ5KDEsIHdyaXRlciwganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLCBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpO1xuICB9XG59O1xuXG5cbi8qKlxuICogbWFwPHN0cmluZywgVmFsdWU+IGZpZWxkcyA9IDE7XG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfbm9MYXp5Q3JlYXRlIERvIG5vdCBjcmVhdGUgdGhlIG1hcCBpZlxuICogZW1wdHksIGluc3RlYWQgcmV0dXJuaW5nIGB1bmRlZmluZWRgXG4gKiBAcmV0dXJuIHshanNwYi5NYXA8c3RyaW5nLCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LnByb3RvdHlwZS5nZXRGaWVsZHNNYXAgPSBmdW5jdGlvbihvcHRfbm9MYXp5Q3JlYXRlKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFqc3BiLk1hcDxzdHJpbmcsIXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT59ICovIChcbiAgICAgIGpzcGIuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLCAxLCBvcHRfbm9MYXp5Q3JlYXRlLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlKSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHZhbHVlcyBmcm9tIHRoZSBtYXAuIFRoZSBtYXAgd2lsbCBiZSBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5wcm90b3R5cGUuY2xlYXJGaWVsZHNNYXAgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXRGaWVsZHNNYXAoKS5jbGVhcigpO1xuICByZXR1cm4gdGhpczt9O1xuXG5cblxuLyoqXG4gKiBPbmVvZiBncm91cCBkZWZpbml0aW9ucyBmb3IgdGhpcyBtZXNzYWdlLiBFYWNoIGdyb3VwIGRlZmluZXMgdGhlIGZpZWxkXG4gKiBudW1iZXJzIGJlbG9uZ2luZyB0byB0aGF0IGdyb3VwLiBXaGVuIG9mIHRoZXNlIGZpZWxkcycgdmFsdWUgaXMgc2V0LCBhbGxcbiAqIG90aGVyIGZpZWxkcyBpbiB0aGUgZ3JvdXAgYXJlIGNsZWFyZWQuIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIGlmIG11bHRpcGxlXG4gKiBmaWVsZHMgYXJlIGVuY291bnRlcmVkIGZvciBhIGdyb3VwLCBvbmx5IHRoZSBsYXN0IHZhbHVlIHNlZW4gd2lsbCBiZSBrZXB0LlxuICogQHByaXZhdGUgeyFBcnJheTwhQXJyYXk8bnVtYmVyPj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzXyA9IFtbMSwyLDMsNCw1LDZdXTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuS2luZENhc2UgPSB7XG4gIEtJTkRfTk9UX1NFVDogMCxcbiAgTlVMTF9WQUxVRTogMSxcbiAgTlVNQkVSX1ZBTFVFOiAyLFxuICBTVFJJTkdfVkFMVUU6IDMsXG4gIEJPT0xfVkFMVUU6IDQsXG4gIFNUUlVDVF9WQUxVRTogNSxcbiAgTElTVF9WQUxVRTogNlxufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuS2luZENhc2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0S2luZENhc2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLktpbmRDYXNlfSAqLyhqc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdKSk7XG59O1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG51bGxWYWx1ZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKSxcbiAgICBudW1iZXJWYWx1ZToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKSxcbiAgICBzdHJpbmdWYWx1ZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBcIlwiKSxcbiAgICBib29sVmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDQsIGZhbHNlKSxcbiAgICBzdHJ1Y3RWYWx1ZTogKGYgPSBtc2cuZ2V0U3RydWN0VmFsdWUoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIGxpc3RWYWx1ZTogKGYgPSBtc2cuZ2V0TGlzdFZhbHVlKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldE51bGxWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE51bWJlclZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U3RyaW5nVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEJvb2xWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0U3RydWN0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldExpc3RWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNCxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFN0cnVjdFZhbHVlKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgNSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMaXN0VmFsdWUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICA2LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgTnVsbFZhbHVlIG51bGxfdmFsdWUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0TnVsbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXROdWxsVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyTnVsbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCAxLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuaGFzTnVsbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbnVtYmVyX3ZhbHVlID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5nZXROdW1iZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXROdW1iZXJWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCAyLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuY2xlYXJOdW1iZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMiwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmhhc051bWJlclZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgc3RyaW5nX3ZhbHVlID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXRTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCAzLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuY2xlYXJTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmhhc1N0cmluZ1ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGJvb2xfdmFsdWUgPSA0O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5nZXRCb29sVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLnNldEJvb2xWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCA0LCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuY2xlYXJCb29sVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDQsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5oYXNCb29sVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIFN0cnVjdCBzdHJ1Y3RfdmFsdWUgPSA1O1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0U3RydWN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCwgNSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXRTdHJ1Y3RWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywgNSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuY2xlYXJTdHJ1Y3RWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTdHJ1Y3RWYWx1ZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuaGFzU3RydWN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIExpc3RWYWx1ZSBsaXN0X3ZhbHVlID0gNjtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmdldExpc3RWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLCA2KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLnNldExpc3RWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywgNiwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuY2xlYXJMaXN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TGlzdFZhbHVlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5oYXNMaXN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA2KSAhPSBudWxsO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB2YWx1ZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRWYWx1ZXNMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFZhbHVlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFZhbHVlIHZhbHVlcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLmdldFZhbHVlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5wcm90b3R5cGUuc2V0VmFsdWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLmFkZFZhbHVlcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5wcm90b3R5cGUuY2xlYXJWYWx1ZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFZhbHVlc0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgPSB7XG4gIE5VTExfVkFMVUU6IDBcbn07XG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUucHJvdG9idWYpO1xuLyogVGhpcyBjb2RlIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgY29kZSBmb3JcbiAqIGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8uICovXG5cbi8qKlxuICogVHlwZWRlZiByZXByZXNlbnRpbmcgcGxhaW4gSmF2YVNjcmlwdCB2YWx1ZXMgdGhhdCBjYW4gZ28gaW50byBhXG4gKiAgICAgU3RydWN0LlxuICogQHR5cGVkZWYge251bGx8bnVtYmVyfHN0cmluZ3xib29sZWFufEFycmF5fE9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkphdmFTY3JpcHRWYWx1ZTtcblxuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgVmFsdWUgb2JqZWN0IHRvIGEgcGxhaW4gSmF2YVNjcmlwdCB2YWx1ZS5cbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuSmF2YVNjcmlwdFZhbHVlfSBhIHBsYWluIEphdmFTY3JpcHRcbiAqICAgICB2YWx1ZSByZXByZXNlbnRpbmcgdGhpcyBTdHJ1Y3QuXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUudG9KYXZhU2NyaXB0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBraW5kQ2FzZSA9IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5LaW5kQ2FzZTtcbiAgc3dpdGNoICh0aGlzLmdldEtpbmRDYXNlKCkpIHtcbiAgICBjYXNlIGtpbmRDYXNlLk5VTExfVkFMVUU6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIGtpbmRDYXNlLk5VTUJFUl9WQUxVRTpcbiAgICAgIHJldHVybiB0aGlzLmdldE51bWJlclZhbHVlKCk7XG4gICAgY2FzZSBraW5kQ2FzZS5TVFJJTkdfVkFMVUU6XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWx1ZSgpO1xuICAgIGNhc2Uga2luZENhc2UuQk9PTF9WQUxVRTpcbiAgICAgIHJldHVybiB0aGlzLmdldEJvb2xWYWx1ZSgpO1xuICAgIGNhc2Uga2luZENhc2UuU1RSVUNUX1ZBTFVFOlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RydWN0VmFsdWUoKS50b0phdmFTY3JpcHQoKTtcbiAgICBjYXNlIGtpbmRDYXNlLkxJU1RfVkFMVUU6XG4gICAgICByZXR1cm4gdGhpcy5nZXRMaXN0VmFsdWUoKS50b0phdmFTY3JpcHQoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHN0cnVjdCB0eXBlJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBuZXcgVmFsdWUgcHJvdG8uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuSmF2YVNjcmlwdFZhbHVlfSB2YWx1ZSBUaGUgdmFsdWUgdG9cbiAqICAgICBjb252ZXJ0LlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gVGhlIG5ld2x5IGNvbnN0cnVjdGVkIHZhbHVlLlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZnJvbUphdmFTY3JpcHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgcmV0ID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSgpO1xuICBzd2l0Y2ggKGdvb2cudHlwZU9mKHZhbHVlKSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXQuc2V0U3RyaW5nVmFsdWUoLyoqIEB0eXBlIHtzdHJpbmd9ICovICh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldC5zZXROdW1iZXJWYWx1ZSgvKiogQHR5cGUge251bWJlcn0gKi8gKHZhbHVlKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldC5zZXRCb29sVmFsdWUoLyoqIEB0eXBlIHtib29sZWFufSAqLyAodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ251bGwnOlxuICAgICAgcmV0LnNldE51bGxWYWx1ZShwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlLk5VTExfVkFMVUUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0LnNldExpc3RWYWx1ZShwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLmZyb21KYXZhU2NyaXB0KFxuICAgICAgICAgIC8qKiBAdHlwZXshQXJyYXl9ICovICh2YWx1ZSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXQuc2V0U3RydWN0VmFsdWUocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5mcm9tSmF2YVNjcmlwdChcbiAgICAgICAgICAvKiogQHR5cGV7IU9iamVjdH0gKi8gKHZhbHVlKSkpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJ1Y3QgdHlwZS4nKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBMaXN0VmFsdWUgb2JqZWN0IHRvIGEgcGxhaW4gSmF2YVNjcmlwdCBhcnJheS5cbiAqIEByZXR1cm4geyFBcnJheX0gYSBwbGFpbiBKYXZhU2NyaXB0IGFycmF5IHJlcHJlc2VudGluZyB0aGlzIExpc3QuXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLnRvSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmV0ID0gW107XG4gIHZhciB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlc0xpc3QoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJldFtpXSA9IHZhbHVlc1tpXS50b0phdmFTY3JpcHQoKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIExpc3RWYWx1ZSBwcm90b2J1ZiBmcm9tIHRoaXMgcGxhaW4gSmF2YVNjcmlwdCBhcnJheS5cbiAqIEBwYXJhbSB7IUFycmF5fSBhcnJheSBhIHBsYWluIEphdmFTY3JpcHQgYXJyYXlcbiAqIEByZXR1cm4ge3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWV9IGEgbmV3IExpc3RWYWx1ZSBvYmplY3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5mcm9tSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gIHZhciByZXQgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICByZXQuYWRkVmFsdWVzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5mcm9tSmF2YVNjcmlwdChhcnJheVtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIFN0cnVjdCBvYmplY3QgdG8gYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEByZXR1cm4geyFPYmplY3Q8c3RyaW5nLCAhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkphdmFTY3JpcHRWYWx1ZT59IGEgcGxhaW5cbiAqICAgICBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBTdHJ1Y3QuXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QucHJvdG90eXBlLnRvSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmV0ID0ge307XG5cbiAgdGhpcy5nZXRGaWVsZHNNYXAoKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXRba2V5XSA9IHZhbHVlLnRvSmF2YVNjcmlwdCgpO1xuICB9KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBTdHJ1Y3QgcHJvdG9idWYgZnJvbSB0aGlzIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHshT2JqZWN0fSBvYmogYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogQHJldHVybiB7cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gYSBuZXcgU3RydWN0IG9iamVjdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmZyb21KYXZhU2NyaXB0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciByZXQgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCgpO1xuICB2YXIgbWFwID0gcmV0LmdldEZpZWxkc01hcCgpO1xuXG4gIGZvciAodmFyIHByb3BlcnR5IGluIG9iaikge1xuICAgIHZhciB2YWwgPSBvYmpbcHJvcGVydHldO1xuICAgIG1hcC5zZXQocHJvcGVydHksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5mcm9tSmF2YVNjcmlwdCh2YWwpKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuIiwiLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlY29uZHM6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMCksXG4gICAgbmFub3M6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRTZWNvbmRzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXROYW5vcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFNlY29uZHMoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQ2NChcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXROYW5vcygpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLmdldFNlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS5zZXRTZWNvbmRzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgbmFub3MgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS5nZXROYW5vcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLnNldE5hbm9zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUucHJvdG9idWYpO1xuLyogVGhpcyBjb2RlIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgY29kZSBmb3JcbiAqIGdvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8uICovXG5cbi8qKlxuICogUmV0dXJucyBhIEphdmFTY3JpcHQgJ0RhdGUnIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgVGltZXN0YW1wLlxuICogQHJldHVybiB7IURhdGV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLnRvRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2Vjb25kcyA9IHRoaXMuZ2V0U2Vjb25kcygpO1xuICB2YXIgbmFub3MgPSB0aGlzLmdldE5hbm9zKCk7XG5cbiAgcmV0dXJuIG5ldyBEYXRlKChzZWNvbmRzICogMTAwMCkgKyAobmFub3MgLyAxMDAwMDAwKSk7XG59O1xuXG5cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBUaW1lc3RhbXAgb2JqZWN0IHRvIGJlIHRoZSBnaXZlbiBEYXRlLlxuICogQHBhcmFtIHshRGF0ZX0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5wcm90b3R5cGUuZnJvbURhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB0aGlzLnNldFNlY29uZHMoTWF0aC5mbG9vcih2YWx1ZS5nZXRUaW1lKCkgLyAxMDAwKSk7XG4gIHRoaXMuc2V0TmFub3ModmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkgKiAxMDAwMDAwKTtcbn07XG5cblxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgYSBUaW1lc3RhbXAgb2JqZWN0IHdpdGggdmFsdWUgZXF1YWwgdG9cbiAqIHRoZSBnaXZlbiBEYXRlLlxuICogQHBhcmFtIHshRGF0ZX0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLmZyb21EYXRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIHRpbWVzdGFtcCA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKCk7XG4gIHRpbWVzdGFtcC5mcm9tRGF0ZSh2YWx1ZSk7XG4gIHJldHVybiB0aW1lc3RhbXA7XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgUkVWSVNJT04gPSAnMTM3JztcbmNvbnN0IE1PVVNFID0ge1xuXHRMRUZUOiAwLFxuXHRNSURETEU6IDEsXG5cdFJJR0hUOiAyLFxuXHRST1RBVEU6IDAsXG5cdERPTExZOiAxLFxuXHRQQU46IDJcbn07XG5jb25zdCBUT1VDSCA9IHtcblx0Uk9UQVRFOiAwLFxuXHRQQU46IDEsXG5cdERPTExZX1BBTjogMixcblx0RE9MTFlfUk9UQVRFOiAzXG59O1xuY29uc3QgQ3VsbEZhY2VOb25lID0gMDtcbmNvbnN0IEN1bGxGYWNlQmFjayA9IDE7XG5jb25zdCBDdWxsRmFjZUZyb250ID0gMjtcbmNvbnN0IEN1bGxGYWNlRnJvbnRCYWNrID0gMztcbmNvbnN0IEJhc2ljU2hhZG93TWFwID0gMDtcbmNvbnN0IFBDRlNoYWRvd01hcCA9IDE7XG5jb25zdCBQQ0ZTb2Z0U2hhZG93TWFwID0gMjtcbmNvbnN0IFZTTVNoYWRvd01hcCA9IDM7XG5jb25zdCBGcm9udFNpZGUgPSAwO1xuY29uc3QgQmFja1NpZGUgPSAxO1xuY29uc3QgRG91YmxlU2lkZSA9IDI7XG5jb25zdCBGbGF0U2hhZGluZyA9IDE7XG5jb25zdCBTbW9vdGhTaGFkaW5nID0gMjtcbmNvbnN0IE5vQmxlbmRpbmcgPSAwO1xuY29uc3QgTm9ybWFsQmxlbmRpbmcgPSAxO1xuY29uc3QgQWRkaXRpdmVCbGVuZGluZyA9IDI7XG5jb25zdCBTdWJ0cmFjdGl2ZUJsZW5kaW5nID0gMztcbmNvbnN0IE11bHRpcGx5QmxlbmRpbmcgPSA0O1xuY29uc3QgQ3VzdG9tQmxlbmRpbmcgPSA1O1xuY29uc3QgQWRkRXF1YXRpb24gPSAxMDA7XG5jb25zdCBTdWJ0cmFjdEVxdWF0aW9uID0gMTAxO1xuY29uc3QgUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24gPSAxMDI7XG5jb25zdCBNaW5FcXVhdGlvbiA9IDEwMztcbmNvbnN0IE1heEVxdWF0aW9uID0gMTA0O1xuY29uc3QgWmVyb0ZhY3RvciA9IDIwMDtcbmNvbnN0IE9uZUZhY3RvciA9IDIwMTtcbmNvbnN0IFNyY0NvbG9yRmFjdG9yID0gMjAyO1xuY29uc3QgT25lTWludXNTcmNDb2xvckZhY3RvciA9IDIwMztcbmNvbnN0IFNyY0FscGhhRmFjdG9yID0gMjA0O1xuY29uc3QgT25lTWludXNTcmNBbHBoYUZhY3RvciA9IDIwNTtcbmNvbnN0IERzdEFscGhhRmFjdG9yID0gMjA2O1xuY29uc3QgT25lTWludXNEc3RBbHBoYUZhY3RvciA9IDIwNztcbmNvbnN0IERzdENvbG9yRmFjdG9yID0gMjA4O1xuY29uc3QgT25lTWludXNEc3RDb2xvckZhY3RvciA9IDIwOTtcbmNvbnN0IFNyY0FscGhhU2F0dXJhdGVGYWN0b3IgPSAyMTA7XG5jb25zdCBOZXZlckRlcHRoID0gMDtcbmNvbnN0IEFsd2F5c0RlcHRoID0gMTtcbmNvbnN0IExlc3NEZXB0aCA9IDI7XG5jb25zdCBMZXNzRXF1YWxEZXB0aCA9IDM7XG5jb25zdCBFcXVhbERlcHRoID0gNDtcbmNvbnN0IEdyZWF0ZXJFcXVhbERlcHRoID0gNTtcbmNvbnN0IEdyZWF0ZXJEZXB0aCA9IDY7XG5jb25zdCBOb3RFcXVhbERlcHRoID0gNztcbmNvbnN0IE11bHRpcGx5T3BlcmF0aW9uID0gMDtcbmNvbnN0IE1peE9wZXJhdGlvbiA9IDE7XG5jb25zdCBBZGRPcGVyYXRpb24gPSAyO1xuY29uc3QgTm9Ub25lTWFwcGluZyA9IDA7XG5jb25zdCBMaW5lYXJUb25lTWFwcGluZyA9IDE7XG5jb25zdCBSZWluaGFyZFRvbmVNYXBwaW5nID0gMjtcbmNvbnN0IENpbmVvblRvbmVNYXBwaW5nID0gMztcbmNvbnN0IEFDRVNGaWxtaWNUb25lTWFwcGluZyA9IDQ7XG5jb25zdCBDdXN0b21Ub25lTWFwcGluZyA9IDU7XG5jb25zdCBVVk1hcHBpbmcgPSAzMDA7XG5jb25zdCBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDE7XG5jb25zdCBDdWJlUmVmcmFjdGlvbk1hcHBpbmcgPSAzMDI7XG5jb25zdCBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyA9IDMwMztcbmNvbnN0IEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nID0gMzA0O1xuY29uc3QgQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDY7XG5jb25zdCBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZyA9IDMwNztcbmNvbnN0IFJlcGVhdFdyYXBwaW5nID0gMTAwMDtcbmNvbnN0IENsYW1wVG9FZGdlV3JhcHBpbmcgPSAxMDAxO1xuY29uc3QgTWlycm9yZWRSZXBlYXRXcmFwcGluZyA9IDEwMDI7XG5jb25zdCBOZWFyZXN0RmlsdGVyID0gMTAwMztcbmNvbnN0IE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyID0gMTAwNDtcbmNvbnN0IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyID0gMTAwNDtcbmNvbnN0IE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXIgPSAxMDA1O1xuY29uc3QgTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlciA9IDEwMDU7XG5jb25zdCBMaW5lYXJGaWx0ZXIgPSAxMDA2O1xuY29uc3QgTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlciA9IDEwMDc7XG5jb25zdCBMaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyID0gMTAwNztcbmNvbnN0IExpbmVhck1pcG1hcExpbmVhckZpbHRlciA9IDEwMDg7XG5jb25zdCBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXIgPSAxMDA4O1xuY29uc3QgVW5zaWduZWRCeXRlVHlwZSA9IDEwMDk7XG5jb25zdCBCeXRlVHlwZSA9IDEwMTA7XG5jb25zdCBTaG9ydFR5cGUgPSAxMDExO1xuY29uc3QgVW5zaWduZWRTaG9ydFR5cGUgPSAxMDEyO1xuY29uc3QgSW50VHlwZSA9IDEwMTM7XG5jb25zdCBVbnNpZ25lZEludFR5cGUgPSAxMDE0O1xuY29uc3QgRmxvYXRUeXBlID0gMTAxNTtcbmNvbnN0IEhhbGZGbG9hdFR5cGUgPSAxMDE2O1xuY29uc3QgVW5zaWduZWRTaG9ydDQ0NDRUeXBlID0gMTAxNztcbmNvbnN0IFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSA9IDEwMTg7XG5jb25zdCBVbnNpZ25lZEludDI0OFR5cGUgPSAxMDIwO1xuY29uc3QgQWxwaGFGb3JtYXQgPSAxMDIxO1xuY29uc3QgUkdCQUZvcm1hdCA9IDEwMjM7XG5jb25zdCBMdW1pbmFuY2VGb3JtYXQgPSAxMDI0O1xuY29uc3QgTHVtaW5hbmNlQWxwaGFGb3JtYXQgPSAxMDI1O1xuY29uc3QgRGVwdGhGb3JtYXQgPSAxMDI2O1xuY29uc3QgRGVwdGhTdGVuY2lsRm9ybWF0ID0gMTAyNztcbmNvbnN0IFJlZEZvcm1hdCA9IDEwMjg7XG5jb25zdCBSZWRJbnRlZ2VyRm9ybWF0ID0gMTAyOTtcbmNvbnN0IFJHRm9ybWF0ID0gMTAzMDtcbmNvbnN0IFJHSW50ZWdlckZvcm1hdCA9IDEwMzE7XG5jb25zdCBSR0JBSW50ZWdlckZvcm1hdCA9IDEwMzM7XG5jb25zdCBSR0JfUzNUQ19EWFQxX0Zvcm1hdCA9IDMzNzc2O1xuY29uc3QgUkdCQV9TM1RDX0RYVDFfRm9ybWF0ID0gMzM3Nzc7XG5jb25zdCBSR0JBX1MzVENfRFhUM19Gb3JtYXQgPSAzMzc3ODtcbmNvbnN0IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCA9IDMzNzc5O1xuY29uc3QgUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAzNTg0MDtcbmNvbnN0IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gMzU4NDE7XG5jb25zdCBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAzNTg0MjtcbmNvbnN0IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IDM1ODQzO1xuY29uc3QgUkdCX0VUQzFfRm9ybWF0ID0gMzYxOTY7XG5jb25zdCBSR0JfRVRDMl9Gb3JtYXQgPSAzNzQ5MjtcbmNvbnN0IFJHQkFfRVRDMl9FQUNfRm9ybWF0ID0gMzc0OTY7XG5jb25zdCBSR0JBX0FTVENfNHg0X0Zvcm1hdCA9IDM3ODA4O1xuY29uc3QgUkdCQV9BU1RDXzV4NF9Gb3JtYXQgPSAzNzgwOTtcbmNvbnN0IFJHQkFfQVNUQ181eDVfRm9ybWF0ID0gMzc4MTA7XG5jb25zdCBSR0JBX0FTVENfNng1X0Zvcm1hdCA9IDM3ODExO1xuY29uc3QgUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQgPSAzNzgxMjtcbmNvbnN0IFJHQkFfQVNUQ184eDVfRm9ybWF0ID0gMzc4MTM7XG5jb25zdCBSR0JBX0FTVENfOHg2X0Zvcm1hdCA9IDM3ODE0O1xuY29uc3QgUkdCQV9BU1RDXzh4OF9Gb3JtYXQgPSAzNzgxNTtcbmNvbnN0IFJHQkFfQVNUQ18xMHg1X0Zvcm1hdCA9IDM3ODE2O1xuY29uc3QgUkdCQV9BU1RDXzEweDZfRm9ybWF0ID0gMzc4MTc7XG5jb25zdCBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgPSAzNzgxODtcbmNvbnN0IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQgPSAzNzgxOTtcbmNvbnN0IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgPSAzNzgyMDtcbmNvbnN0IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQgPSAzNzgyMTtcbmNvbnN0IFJHQkFfQlBUQ19Gb3JtYXQgPSAzNjQ5MjtcbmNvbnN0IExvb3BPbmNlID0gMjIwMDtcbmNvbnN0IExvb3BSZXBlYXQgPSAyMjAxO1xuY29uc3QgTG9vcFBpbmdQb25nID0gMjIwMjtcbmNvbnN0IEludGVycG9sYXRlRGlzY3JldGUgPSAyMzAwO1xuY29uc3QgSW50ZXJwb2xhdGVMaW5lYXIgPSAyMzAxO1xuY29uc3QgSW50ZXJwb2xhdGVTbW9vdGggPSAyMzAyO1xuY29uc3QgWmVyb0N1cnZhdHVyZUVuZGluZyA9IDI0MDA7XG5jb25zdCBaZXJvU2xvcGVFbmRpbmcgPSAyNDAxO1xuY29uc3QgV3JhcEFyb3VuZEVuZGluZyA9IDI0MDI7XG5jb25zdCBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGUgPSAyNTAwO1xuY29uc3QgQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUgPSAyNTAxO1xuY29uc3QgVHJpYW5nbGVzRHJhd01vZGUgPSAwO1xuY29uc3QgVHJpYW5nbGVTdHJpcERyYXdNb2RlID0gMTtcbmNvbnN0IFRyaWFuZ2xlRmFuRHJhd01vZGUgPSAyO1xuY29uc3QgTGluZWFyRW5jb2RpbmcgPSAzMDAwO1xuY29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcbmNvbnN0IEJhc2ljRGVwdGhQYWNraW5nID0gMzIwMDtcbmNvbnN0IFJHQkFEZXB0aFBhY2tpbmcgPSAzMjAxO1xuY29uc3QgVGFuZ2VudFNwYWNlTm9ybWFsTWFwID0gMDtcbmNvbnN0IE9iamVjdFNwYWNlTm9ybWFsTWFwID0gMTtcbmNvbnN0IFplcm9TdGVuY2lsT3AgPSAwO1xuY29uc3QgS2VlcFN0ZW5jaWxPcCA9IDc2ODA7XG5jb25zdCBSZXBsYWNlU3RlbmNpbE9wID0gNzY4MTtcbmNvbnN0IEluY3JlbWVudFN0ZW5jaWxPcCA9IDc2ODI7XG5jb25zdCBEZWNyZW1lbnRTdGVuY2lsT3AgPSA3NjgzO1xuY29uc3QgSW5jcmVtZW50V3JhcFN0ZW5jaWxPcCA9IDM0MDU1O1xuY29uc3QgRGVjcmVtZW50V3JhcFN0ZW5jaWxPcCA9IDM0MDU2O1xuY29uc3QgSW52ZXJ0U3RlbmNpbE9wID0gNTM4NjtcbmNvbnN0IE5ldmVyU3RlbmNpbEZ1bmMgPSA1MTI7XG5jb25zdCBMZXNzU3RlbmNpbEZ1bmMgPSA1MTM7XG5jb25zdCBFcXVhbFN0ZW5jaWxGdW5jID0gNTE0O1xuY29uc3QgTGVzc0VxdWFsU3RlbmNpbEZ1bmMgPSA1MTU7XG5jb25zdCBHcmVhdGVyU3RlbmNpbEZ1bmMgPSA1MTY7XG5jb25zdCBOb3RFcXVhbFN0ZW5jaWxGdW5jID0gNTE3O1xuY29uc3QgR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmMgPSA1MTg7XG5jb25zdCBBbHdheXNTdGVuY2lsRnVuYyA9IDUxOTtcbmNvbnN0IFN0YXRpY0RyYXdVc2FnZSA9IDM1MDQ0O1xuY29uc3QgRHluYW1pY0RyYXdVc2FnZSA9IDM1MDQ4O1xuY29uc3QgU3RyZWFtRHJhd1VzYWdlID0gMzUwNDA7XG5jb25zdCBTdGF0aWNSZWFkVXNhZ2UgPSAzNTA0NTtcbmNvbnN0IER5bmFtaWNSZWFkVXNhZ2UgPSAzNTA0OTtcbmNvbnN0IFN0cmVhbVJlYWRVc2FnZSA9IDM1MDQxO1xuY29uc3QgU3RhdGljQ29weVVzYWdlID0gMzUwNDY7XG5jb25zdCBEeW5hbWljQ29weVVzYWdlID0gMzUwNTA7XG5jb25zdCBTdHJlYW1Db3B5VXNhZ2UgPSAzNTA0MjtcbmNvbnN0IEdMU0wxID0gJzEwMCc7XG5jb25zdCBHTFNMMyA9ICczMDAgZXMnO1xuY29uc3QgX1NSR0JBRm9ybWF0ID0gMTAzNTsgLy8gZmFsbGJhY2sgZm9yIFdlYkdMIDFcblxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL2V2ZW50ZGlzcGF0Y2hlci5qcy9cbiAqL1xuY2xhc3MgRXZlbnREaXNwYXRjaGVyIHtcblx0YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgdGhpcy5fbGlzdGVuZXJzID0ge307XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXG5cdFx0aWYgKGxpc3RlbmVyc1t0eXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsaXN0ZW5lcnNbdHlwZV0gPSBbXTtcblx0XHR9XG5cblx0XHRpZiAobGlzdGVuZXJzW3R5cGVdLmluZGV4T2YobGlzdGVuZXIpID09PSAtMSkge1xuXHRcdFx0bGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuXHRcdH1cblx0fVxuXG5cdGhhc0V2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XG5cdFx0cmV0dXJuIGxpc3RlbmVyc1t0eXBlXSAhPT0gdW5kZWZpbmVkICYmIGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSAhPT0gLTE7XG5cdH1cblxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXHRcdGNvbnN0IGxpc3RlbmVyQXJyYXkgPSBsaXN0ZW5lcnNbdHlwZV07XG5cblx0XHRpZiAobGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGxpc3RlbmVyQXJyYXkuaW5kZXhPZihsaXN0ZW5lcik7XG5cblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0bGlzdGVuZXJBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XG5cdFx0Y29uc3QgbGlzdGVuZXJBcnJheSA9IGxpc3RlbmVyc1tldmVudC50eXBlXTtcblxuXHRcdGlmIChsaXN0ZW5lckFycmF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IHRoaXM7IC8vIE1ha2UgYSBjb3B5LCBpbiBjYXNlIGxpc3RlbmVycyBhcmUgcmVtb3ZlZCB3aGlsZSBpdGVyYXRpbmcuXG5cblx0XHRcdGNvbnN0IGFycmF5ID0gbGlzdGVuZXJBcnJheS5zbGljZSgwKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0YXJyYXlbaV0uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LnRhcmdldCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cbn1cblxuY29uc3QgX2x1dCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdF9sdXRbaV0gPSAoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNik7XG59XG5cbmxldCBfc2VlZCA9IDEyMzQ1Njc7XG5jb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbmNvbnN0IFJBRDJERUcgPSAxODAgLyBNYXRoLlBJOyAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjE5NjMxMzYjMjE5NjMxMzZcblxuZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCkge1xuXHRjb25zdCBkMCA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgZDEgPSBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmZmZiB8IDA7XG5cdGNvbnN0IGQyID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRjb25zdCBkMyA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgdXVpZCA9IF9sdXRbZDAgJiAweGZmXSArIF9sdXRbZDAgPj4gOCAmIDB4ZmZdICsgX2x1dFtkMCA+PiAxNiAmIDB4ZmZdICsgX2x1dFtkMCA+PiAyNCAmIDB4ZmZdICsgJy0nICsgX2x1dFtkMSAmIDB4ZmZdICsgX2x1dFtkMSA+PiA4ICYgMHhmZl0gKyAnLScgKyBfbHV0W2QxID4+IDE2ICYgMHgwZiB8IDB4NDBdICsgX2x1dFtkMSA+PiAyNCAmIDB4ZmZdICsgJy0nICsgX2x1dFtkMiAmIDB4M2YgfCAweDgwXSArIF9sdXRbZDIgPj4gOCAmIDB4ZmZdICsgJy0nICsgX2x1dFtkMiA+PiAxNiAmIDB4ZmZdICsgX2x1dFtkMiA+PiAyNCAmIDB4ZmZdICsgX2x1dFtkMyAmIDB4ZmZdICsgX2x1dFtkMyA+PiA4ICYgMHhmZl0gKyBfbHV0W2QzID4+IDE2ICYgMHhmZl0gKyBfbHV0W2QzID4+IDI0ICYgMHhmZl07IC8vIC50b1VwcGVyQ2FzZSgpIGhlcmUgZmxhdHRlbnMgY29uY2F0ZW5hdGVkIHN0cmluZ3MgdG8gc2F2ZSBoZWFwIG1lbW9yeSBzcGFjZS5cblxuXHRyZXR1cm4gdXVpZC50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpIHtcblx0cmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xufSAvLyBjb21wdXRlIGV1Y2xpZGlhbiBtb2R1bG8gb2YgbSAlIG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vZHVsb19vcGVyYXRpb25cblxuXG5mdW5jdGlvbiBldWNsaWRlYW5Nb2R1bG8obiwgbSkge1xuXHRyZXR1cm4gKG4gJSBtICsgbSkgJSBtO1xufSAvLyBMaW5lYXIgbWFwcGluZyBmcm9tIHJhbmdlIDxhMSwgYTI+IHRvIHJhbmdlIDxiMSwgYjI+XG5cblxuZnVuY3Rpb24gbWFwTGluZWFyKHgsIGExLCBhMiwgYjEsIGIyKSB7XG5cdHJldHVybiBiMSArICh4IC0gYTEpICogKGIyIC0gYjEpIC8gKGEyIC0gYTEpO1xufSAvLyBodHRwczovL3d3dy5nYW1lZGV2Lm5ldC90dXRvcmlhbHMvcHJvZ3JhbW1pbmcvZ2VuZXJhbC1hbmQtZ2FtZXBsYXktcHJvZ3JhbW1pbmcvaW52ZXJzZS1sZXJwLWEtc3VwZXItdXNlZnVsLXlldC1vZnRlbi1vdmVybG9va2VkLWZ1bmN0aW9uLXI1MjMwL1xuXG5cbmZ1bmN0aW9uIGludmVyc2VMZXJwKHgsIHksIHZhbHVlKSB7XG5cdGlmICh4ICE9PSB5KSB7XG5cdFx0cmV0dXJuICh2YWx1ZSAtIHgpIC8gKHkgLSB4KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMDtcblx0fVxufSAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lYXJfaW50ZXJwb2xhdGlvblxuXG5cbmZ1bmN0aW9uIGxlcnAoeCwgeSwgdCkge1xuXHRyZXR1cm4gKDEgLSB0KSAqIHggKyB0ICogeTtcbn0gLy8gaHR0cDovL3d3dy5yb3J5ZHJpc2NvbGwuY29tLzIwMTYvMDMvMDcvZnJhbWUtcmF0ZS1pbmRlcGVuZGVudC1kYW1waW5nLXVzaW5nLWxlcnAvXG5cblxuZnVuY3Rpb24gZGFtcCh4LCB5LCBsYW1iZGEsIGR0KSB7XG5cdHJldHVybiBsZXJwKHgsIHksIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZHQpKTtcbn0gLy8gaHR0cHM6Ly93d3cuZGVzbW9zLmNvbS9jYWxjdWxhdG9yL3Zjc2pueXo3eDRcblxuXG5mdW5jdGlvbiBwaW5ncG9uZyh4LCBsZW5ndGggPSAxKSB7XG5cdHJldHVybiBsZW5ndGggLSBNYXRoLmFicyhldWNsaWRlYW5Nb2R1bG8oeCwgbGVuZ3RoICogMikgLSBsZW5ndGgpO1xufSAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ntb290aHN0ZXBcblxuXG5mdW5jdGlvbiBzbW9vdGhzdGVwKHgsIG1pbiwgbWF4KSB7XG5cdGlmICh4IDw9IG1pbikgcmV0dXJuIDA7XG5cdGlmICh4ID49IG1heCkgcmV0dXJuIDE7XG5cdHggPSAoeCAtIG1pbikgLyAobWF4IC0gbWluKTtcblx0cmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XG59XG5cbmZ1bmN0aW9uIHNtb290aGVyc3RlcCh4LCBtaW4sIG1heCkge1xuXHRpZiAoeCA8PSBtaW4pIHJldHVybiAwO1xuXHRpZiAoeCA+PSBtYXgpIHJldHVybiAxO1xuXHR4ID0gKHggLSBtaW4pIC8gKG1heCAtIG1pbik7XG5cdHJldHVybiB4ICogeCAqIHggKiAoeCAqICh4ICogNiAtIDE1KSArIDEwKTtcbn0gLy8gUmFuZG9tIGludGVnZXIgZnJvbSA8bG93LCBoaWdoPiBpbnRlcnZhbFxuXG5cbmZ1bmN0aW9uIHJhbmRJbnQobG93LCBoaWdoKSB7XG5cdHJldHVybiBsb3cgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdyArIDEpKTtcbn0gLy8gUmFuZG9tIGZsb2F0IGZyb20gPGxvdywgaGlnaD4gaW50ZXJ2YWxcblxuXG5mdW5jdGlvbiByYW5kRmxvYXQobG93LCBoaWdoKSB7XG5cdHJldHVybiBsb3cgKyBNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpO1xufSAvLyBSYW5kb20gZmxvYXQgZnJvbSA8LXJhbmdlLzIsIHJhbmdlLzI+IGludGVydmFsXG5cblxuZnVuY3Rpb24gcmFuZEZsb2F0U3ByZWFkKHJhbmdlKSB7XG5cdHJldHVybiByYW5nZSAqICgwLjUgLSBNYXRoLnJhbmRvbSgpKTtcbn0gLy8gRGV0ZXJtaW5pc3RpYyBwc2V1ZG8tcmFuZG9tIGZsb2F0IGluIHRoZSBpbnRlcnZhbCBbIDAsIDEgXVxuXG5cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbShzKSB7XG5cdGlmIChzICE9PSB1bmRlZmluZWQpIF9zZWVkID0gcyAlIDIxNDc0ODM2NDc7IC8vIFBhcmstTWlsbGVyIGFsZ29yaXRobVxuXG5cdF9zZWVkID0gX3NlZWQgKiAxNjgwNyAlIDIxNDc0ODM2NDc7XG5cdHJldHVybiAoX3NlZWQgLSAxKSAvIDIxNDc0ODM2NDY7XG59XG5cbmZ1bmN0aW9uIGRlZ1RvUmFkKGRlZ3JlZXMpIHtcblx0cmV0dXJuIGRlZ3JlZXMgKiBERUcyUkFEO1xufVxuXG5mdW5jdGlvbiByYWRUb0RlZyhyYWRpYW5zKSB7XG5cdHJldHVybiByYWRpYW5zICogUkFEMkRFRztcbn1cblxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHZhbHVlKSB7XG5cdHJldHVybiAodmFsdWUgJiB2YWx1ZSAtIDEpID09PSAwICYmIHZhbHVlICE9PSAwO1xufVxuXG5mdW5jdGlvbiBjZWlsUG93ZXJPZlR3byh2YWx1ZSkge1xuXHRyZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKSk7XG59XG5cbmZ1bmN0aW9uIGZsb29yUG93ZXJPZlR3byh2YWx1ZSkge1xuXHRyZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMikpO1xufVxuXG5mdW5jdGlvbiBzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKHEsIGEsIGIsIGMsIG9yZGVyKSB7XG5cdC8vIEludHJpbnNpYyBQcm9wZXIgRXVsZXIgQW5nbGVzIC0gc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1bGVyX2FuZ2xlc1xuXHQvLyByb3RhdGlvbnMgYXJlIGFwcGxpZWQgdG8gdGhlIGF4ZXMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieSAnb3JkZXInXG5cdC8vIHJvdGF0aW9uIGJ5IGFuZ2xlICdhJyBpcyBhcHBsaWVkIGZpcnN0LCB0aGVuIGJ5IGFuZ2xlICdiJywgdGhlbiBieSBhbmdsZSAnYydcblx0Ly8gYW5nbGVzIGFyZSBpbiByYWRpYW5zXG5cdGNvbnN0IGNvcyA9IE1hdGguY29zO1xuXHRjb25zdCBzaW4gPSBNYXRoLnNpbjtcblx0Y29uc3QgYzIgPSBjb3MoYiAvIDIpO1xuXHRjb25zdCBzMiA9IHNpbihiIC8gMik7XG5cdGNvbnN0IGMxMyA9IGNvcygoYSArIGMpIC8gMik7XG5cdGNvbnN0IHMxMyA9IHNpbigoYSArIGMpIC8gMik7XG5cdGNvbnN0IGMxXzMgPSBjb3MoKGEgLSBjKSAvIDIpO1xuXHRjb25zdCBzMV8zID0gc2luKChhIC0gYykgLyAyKTtcblx0Y29uc3QgYzNfMSA9IGNvcygoYyAtIGEpIC8gMik7XG5cdGNvbnN0IHMzXzEgPSBzaW4oKGMgLSBhKSAvIDIpO1xuXG5cdHN3aXRjaCAob3JkZXIpIHtcblx0XHRjYXNlICdYWVgnOlxuXHRcdFx0cS5zZXQoYzIgKiBzMTMsIHMyICogYzFfMywgczIgKiBzMV8zLCBjMiAqIGMxMyk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1laWSc6XG5cdFx0XHRxLnNldChzMiAqIHMxXzMsIGMyICogczEzLCBzMiAqIGMxXzMsIGMyICogYzEzKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWlhaJzpcblx0XHRcdHEuc2V0KHMyICogYzFfMywgczIgKiBzMV8zLCBjMiAqIHMxMywgYzIgKiBjMTMpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdYWlgnOlxuXHRcdFx0cS5zZXQoYzIgKiBzMTMsIHMyICogczNfMSwgczIgKiBjM18xLCBjMiAqIGMxMyk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1lYWSc6XG5cdFx0XHRxLnNldChzMiAqIGMzXzEsIGMyICogczEzLCBzMiAqIHMzXzEsIGMyICogYzEzKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWllaJzpcblx0XHRcdHEuc2V0KHMyICogczNfMSwgczIgKiBjM18xLCBjMiAqIHMxMywgYzIgKiBjMTMpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyKTtcblx0fVxufVxuXG52YXIgTWF0aFV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuXHRfX3Byb3RvX186IG51bGwsXG5cdERFRzJSQUQ6IERFRzJSQUQsXG5cdFJBRDJERUc6IFJBRDJERUcsXG5cdGdlbmVyYXRlVVVJRDogZ2VuZXJhdGVVVUlELFxuXHRjbGFtcDogY2xhbXAsXG5cdGV1Y2xpZGVhbk1vZHVsbzogZXVjbGlkZWFuTW9kdWxvLFxuXHRtYXBMaW5lYXI6IG1hcExpbmVhcixcblx0aW52ZXJzZUxlcnA6IGludmVyc2VMZXJwLFxuXHRsZXJwOiBsZXJwLFxuXHRkYW1wOiBkYW1wLFxuXHRwaW5ncG9uZzogcGluZ3BvbmcsXG5cdHNtb290aHN0ZXA6IHNtb290aHN0ZXAsXG5cdHNtb290aGVyc3RlcDogc21vb3RoZXJzdGVwLFxuXHRyYW5kSW50OiByYW5kSW50LFxuXHRyYW5kRmxvYXQ6IHJhbmRGbG9hdCxcblx0cmFuZEZsb2F0U3ByZWFkOiByYW5kRmxvYXRTcHJlYWQsXG5cdHNlZWRlZFJhbmRvbTogc2VlZGVkUmFuZG9tLFxuXHRkZWdUb1JhZDogZGVnVG9SYWQsXG5cdHJhZFRvRGVnOiByYWRUb0RlZyxcblx0aXNQb3dlck9mVHdvOiBpc1Bvd2VyT2ZUd28sXG5cdGNlaWxQb3dlck9mVHdvOiBjZWlsUG93ZXJPZlR3byxcblx0Zmxvb3JQb3dlck9mVHdvOiBmbG9vclBvd2VyT2ZUd28sXG5cdHNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXI6IHNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXJcbn0pO1xuXG5jbGFzcyBWZWN0b3IyIHtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwKSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0Z2V0IHdpZHRoKCkge1xuXHRcdHJldHVybiB0aGlzLng7XG5cdH1cblxuXHRzZXQgd2lkdGgodmFsdWUpIHtcblx0XHR0aGlzLnggPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBoZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMueTtcblx0fVxuXG5cdHNldCBoZWlnaHQodmFsdWUpIHtcblx0XHR0aGlzLnkgPSB2YWx1ZTtcblx0fVxuXG5cdHNldCh4LCB5KSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYKHgpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WSh5KSB7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldENvbXBvbmVudChpbmRleCwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRjYXNlIDA6XG5cdFx0XHRcdHRoaXMueCA9IHZhbHVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHR0aGlzLnkgPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29tcG9uZW50KGluZGV4KSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy54O1xuXG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiB0aGlzLnk7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXgpO1xuXHRcdH1cblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsIHRoaXMueSk7XG5cdH1cblxuXHRjb3B5KHYpIHtcblx0XHR0aGlzLnggPSB2Lng7XG5cdFx0dGhpcy55ID0gdi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkKHYsIHcpIHtcblx0XHRpZiAodyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLmFkZFZlY3RvcnModiwgdyk7XG5cdFx0fVxuXG5cdFx0dGhpcy54ICs9IHYueDtcblx0XHR0aGlzLnkgKz0gdi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRTY2FsZWRWZWN0b3Iodiwgcykge1xuXHRcdHRoaXMueCArPSB2LnggKiBzO1xuXHRcdHRoaXMueSArPSB2LnkgKiBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViKHYsIHcpIHtcblx0XHRpZiAodyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnModiwgdyk7XG5cdFx0fVxuXG5cdFx0dGhpcy54IC09IHYueDtcblx0XHR0aGlzLnkgLT0gdi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1YlZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseSh2KSB7XG5cdFx0dGhpcy54ICo9IHYueDtcblx0XHR0aGlzLnkgKj0gdi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIoc2NhbGFyKSB7XG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGl2aWRlKHYpIHtcblx0XHR0aGlzLnggLz0gdi54O1xuXHRcdHRoaXMueSAvPSB2Lnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkaXZpZGVTY2FsYXIoc2NhbGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMSAvIHNjYWxhcik7XG5cdH1cblxuXHRhcHBseU1hdHJpeDMobSkge1xuXHRcdGNvbnN0IHggPSB0aGlzLngsXG5cdFx0XHRcdFx0eSA9IHRoaXMueTtcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnggPSBlWzBdICogeCArIGVbM10gKiB5ICsgZVs2XTtcblx0XHR0aGlzLnkgPSBlWzFdICogeCArIGVbNF0gKiB5ICsgZVs3XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1pbih2KSB7XG5cdFx0dGhpcy54ID0gTWF0aC5taW4odGhpcy54LCB2LngpO1xuXHRcdHRoaXMueSA9IE1hdGgubWluKHRoaXMueSwgdi55KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1heCh2KSB7XG5cdFx0dGhpcy54ID0gTWF0aC5tYXgodGhpcy54LCB2LngpO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KHRoaXMueSwgdi55KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsYW1wKG1pbiwgbWF4KSB7XG5cdFx0Ly8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVudHdpc2Vcblx0XHR0aGlzLnggPSBNYXRoLm1heChtaW4ueCwgTWF0aC5taW4obWF4LngsIHRoaXMueCkpO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KG1pbi55LCBNYXRoLm1pbihtYXgueSwgdGhpcy55KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcFNjYWxhcihtaW5WYWwsIG1heFZhbCkge1xuXHRcdHRoaXMueCA9IE1hdGgubWF4KG1pblZhbCwgTWF0aC5taW4obWF4VmFsLCB0aGlzLngpKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy55KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcExlbmd0aChtaW4sIG1heCkge1xuXHRcdGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGxlbmd0aCB8fCAxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgbGVuZ3RoKSkpO1xuXHR9XG5cblx0Zmxvb3IoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5mbG9vcih0aGlzLngpO1xuXHRcdHRoaXMueSA9IE1hdGguZmxvb3IodGhpcy55KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNlaWwoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3VuZCgpIHtcblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm91bmRUb1plcm8oKSB7XG5cdFx0dGhpcy54ID0gdGhpcy54IDwgMCA/IE1hdGguY2VpbCh0aGlzLngpIDogTWF0aC5mbG9vcih0aGlzLngpO1xuXHRcdHRoaXMueSA9IHRoaXMueSA8IDAgPyBNYXRoLmNlaWwodGhpcy55KSA6IE1hdGguZmxvb3IodGhpcy55KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG5lZ2F0ZSgpIHtcblx0XHR0aGlzLnggPSAtdGhpcy54O1xuXHRcdHRoaXMueSA9IC10aGlzLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkb3Qodikge1xuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2Lnk7XG5cdH1cblxuXHRjcm9zcyh2KSB7XG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueSAtIHRoaXMueSAqIHYueDtcblx0fVxuXG5cdGxlbmd0aFNxKCkge1xuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnk7XG5cdH1cblxuXHRsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkpO1xuXHR9XG5cblx0bWFuaGF0dGFuTGVuZ3RoKCkge1xuXHRcdHJldHVybiBNYXRoLmFicyh0aGlzLngpICsgTWF0aC5hYnModGhpcy55KTtcblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKSB8fCAxKTtcblx0fVxuXG5cdGFuZ2xlKCkge1xuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXG5cdFx0Y29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKC10aGlzLnksIC10aGlzLngpICsgTWF0aC5QSTtcblx0XHRyZXR1cm4gYW5nbGU7XG5cdH1cblxuXHRkaXN0YW5jZVRvKHYpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodikpO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1NxdWFyZWQodikge1xuXHRcdGNvbnN0IGR4ID0gdGhpcy54IC0gdi54LFxuXHRcdFx0XHRcdGR5ID0gdGhpcy55IC0gdi55O1xuXHRcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcblx0fVxuXG5cdG1hbmhhdHRhbkRpc3RhbmNlVG8odikge1xuXHRcdHJldHVybiBNYXRoLmFicyh0aGlzLnggLSB2LngpICsgTWF0aC5hYnModGhpcy55IC0gdi55KTtcblx0fVxuXG5cdHNldExlbmd0aChsZW5ndGgpIHtcblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihsZW5ndGgpO1xuXHR9XG5cblx0bGVycCh2LCBhbHBoYSkge1xuXHRcdHRoaXMueCArPSAodi54IC0gdGhpcy54KSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAodi55IC0gdGhpcy55KSAqIGFscGhhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bGVycFZlY3RvcnModjEsIHYyLCBhbHBoYSkge1xuXHRcdHRoaXMueCA9IHYxLnggKyAodjIueCAtIHYxLngpICogYWxwaGE7XG5cdFx0dGhpcy55ID0gdjEueSArICh2Mi55IC0gdjEueSkgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyh2KSB7XG5cdFx0cmV0dXJuIHYueCA9PT0gdGhpcy54ICYmIHYueSA9PT0gdGhpcy55O1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5LCBvZmZzZXQgPSAwKSB7XG5cdFx0dGhpcy54ID0gYXJyYXlbb2Zmc2V0XTtcblx0XHR0aGlzLnkgPSBhcnJheVtvZmZzZXQgKyAxXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGFycmF5W29mZnNldF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0aGlzLnk7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0XHRpZiAob2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicpO1xuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3RhdGVBcm91bmQoY2VudGVyLCBhbmdsZSkge1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSksXG5cdFx0XHRcdFx0cyA9IE1hdGguc2luKGFuZ2xlKTtcblx0XHRjb25zdCB4ID0gdGhpcy54IC0gY2VudGVyLng7XG5cdFx0Y29uc3QgeSA9IHRoaXMueSAtIGNlbnRlci55O1xuXHRcdHRoaXMueCA9IHggKiBjIC0geSAqIHMgKyBjZW50ZXIueDtcblx0XHR0aGlzLnkgPSB4ICogcyArIHkgKiBjICsgY2VudGVyLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyYW5kb20oKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnkgPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0KltTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdHlpZWxkIHRoaXMueDtcblx0XHR5aWVsZCB0aGlzLnk7XG5cdH1cblxufVxuXG5WZWN0b3IyLnByb3RvdHlwZS5pc1ZlY3RvcjIgPSB0cnVlO1xuXG5jbGFzcyBNYXRyaXgzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbGVtZW50cyA9IFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXTtcblxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH1cblxuXHRzZXQobjExLCBuMTIsIG4xMywgbjIxLCBuMjIsIG4yMywgbjMxLCBuMzIsIG4zMykge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR0ZVswXSA9IG4xMTtcblx0XHR0ZVsxXSA9IG4yMTtcblx0XHR0ZVsyXSA9IG4zMTtcblx0XHR0ZVszXSA9IG4xMjtcblx0XHR0ZVs0XSA9IG4yMjtcblx0XHR0ZVs1XSA9IG4zMjtcblx0XHR0ZVs2XSA9IG4xMztcblx0XHR0ZVs3XSA9IG4yMztcblx0XHR0ZVs4XSA9IG4zMztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlkZW50aXR5KCkge1xuXHRcdHRoaXMuc2V0KDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShtKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHR0ZVswXSA9IG1lWzBdO1xuXHRcdHRlWzFdID0gbWVbMV07XG5cdFx0dGVbMl0gPSBtZVsyXTtcblx0XHR0ZVszXSA9IG1lWzNdO1xuXHRcdHRlWzRdID0gbWVbNF07XG5cdFx0dGVbNV0gPSBtZVs1XTtcblx0XHR0ZVs2XSA9IG1lWzZdO1xuXHRcdHRlWzddID0gbWVbN107XG5cdFx0dGVbOF0gPSBtZVs4XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4dHJhY3RCYXNpcyh4QXhpcywgeUF4aXMsIHpBeGlzKSB7XG5cdFx0eEF4aXMuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywgMCk7XG5cdFx0eUF4aXMuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywgMSk7XG5cdFx0ekF4aXMuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywgMik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tTWF0cml4NChtKSB7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXHRcdHRoaXMuc2V0KG1lWzBdLCBtZVs0XSwgbWVbOF0sIG1lWzFdLCBtZVs1XSwgbWVbOV0sIG1lWzJdLCBtZVs2XSwgbWVbMTBdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5KG0pIHtcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsIG0pO1xuXHR9XG5cblx0cHJlbXVsdGlwbHkobSkge1xuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMobSwgdGhpcyk7XG5cdH1cblxuXHRtdWx0aXBseU1hdHJpY2VzKGEsIGIpIHtcblx0XHRjb25zdCBhZSA9IGEuZWxlbWVudHM7XG5cdFx0Y29uc3QgYmUgPSBiLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBhMTEgPSBhZVswXSxcblx0XHRcdFx0XHRhMTIgPSBhZVszXSxcblx0XHRcdFx0XHRhMTMgPSBhZVs2XTtcblx0XHRjb25zdCBhMjEgPSBhZVsxXSxcblx0XHRcdFx0XHRhMjIgPSBhZVs0XSxcblx0XHRcdFx0XHRhMjMgPSBhZVs3XTtcblx0XHRjb25zdCBhMzEgPSBhZVsyXSxcblx0XHRcdFx0XHRhMzIgPSBhZVs1XSxcblx0XHRcdFx0XHRhMzMgPSBhZVs4XTtcblx0XHRjb25zdCBiMTEgPSBiZVswXSxcblx0XHRcdFx0XHRiMTIgPSBiZVszXSxcblx0XHRcdFx0XHRiMTMgPSBiZVs2XTtcblx0XHRjb25zdCBiMjEgPSBiZVsxXSxcblx0XHRcdFx0XHRiMjIgPSBiZVs0XSxcblx0XHRcdFx0XHRiMjMgPSBiZVs3XTtcblx0XHRjb25zdCBiMzEgPSBiZVsyXSxcblx0XHRcdFx0XHRiMzIgPSBiZVs1XSxcblx0XHRcdFx0XHRiMzMgPSBiZVs4XTtcblx0XHR0ZVswXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMTtcblx0XHR0ZVszXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGExMyAqIGIzMjtcblx0XHR0ZVs2XSA9IGExMSAqIGIxMyArIGExMiAqIGIyMyArIGExMyAqIGIzMztcblx0XHR0ZVsxXSA9IGEyMSAqIGIxMSArIGEyMiAqIGIyMSArIGEyMyAqIGIzMTtcblx0XHR0ZVs0XSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMjtcblx0XHR0ZVs3XSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMztcblx0XHR0ZVsyXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEzMyAqIGIzMTtcblx0XHR0ZVs1XSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMjtcblx0XHR0ZVs4XSA9IGEzMSAqIGIxMyArIGEzMiAqIGIyMyArIGEzMyAqIGIzMztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKHMpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dGVbMF0gKj0gcztcblx0XHR0ZVszXSAqPSBzO1xuXHRcdHRlWzZdICo9IHM7XG5cdFx0dGVbMV0gKj0gcztcblx0XHR0ZVs0XSAqPSBzO1xuXHRcdHRlWzddICo9IHM7XG5cdFx0dGVbMl0gKj0gcztcblx0XHR0ZVs1XSAqPSBzO1xuXHRcdHRlWzhdICo9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZXRlcm1pbmFudCgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgYSA9IHRlWzBdLFxuXHRcdFx0XHRcdGIgPSB0ZVsxXSxcblx0XHRcdFx0XHRjID0gdGVbMl0sXG5cdFx0XHRcdFx0ZCA9IHRlWzNdLFxuXHRcdFx0XHRcdGUgPSB0ZVs0XSxcblx0XHRcdFx0XHRmID0gdGVbNV0sXG5cdFx0XHRcdFx0ZyA9IHRlWzZdLFxuXHRcdFx0XHRcdGggPSB0ZVs3XSxcblx0XHRcdFx0XHRpID0gdGVbOF07XG5cdFx0cmV0dXJuIGEgKiBlICogaSAtIGEgKiBmICogaCAtIGIgKiBkICogaSArIGIgKiBmICogZyArIGMgKiBkICogaCAtIGMgKiBlICogZztcblx0fVxuXG5cdGludmVydCgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHMsXG5cdFx0XHRcdFx0bjExID0gdGVbMF0sXG5cdFx0XHRcdFx0bjIxID0gdGVbMV0sXG5cdFx0XHRcdFx0bjMxID0gdGVbMl0sXG5cdFx0XHRcdFx0bjEyID0gdGVbM10sXG5cdFx0XHRcdFx0bjIyID0gdGVbNF0sXG5cdFx0XHRcdFx0bjMyID0gdGVbNV0sXG5cdFx0XHRcdFx0bjEzID0gdGVbNl0sXG5cdFx0XHRcdFx0bjIzID0gdGVbN10sXG5cdFx0XHRcdFx0bjMzID0gdGVbOF0sXG5cdFx0XHRcdFx0dDExID0gbjMzICogbjIyIC0gbjMyICogbjIzLFxuXHRcdFx0XHRcdHQxMiA9IG4zMiAqIG4xMyAtIG4zMyAqIG4xMixcblx0XHRcdFx0XHR0MTMgPSBuMjMgKiBuMTIgLSBuMjIgKiBuMTMsXG5cdFx0XHRcdFx0ZGV0ID0gbjExICogdDExICsgbjIxICogdDEyICsgbjMxICogdDEzO1xuXHRcdGlmIChkZXQgPT09IDApIHJldHVybiB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTtcblx0XHRjb25zdCBkZXRJbnYgPSAxIC8gZGV0O1xuXHRcdHRlWzBdID0gdDExICogZGV0SW52O1xuXHRcdHRlWzFdID0gKG4zMSAqIG4yMyAtIG4zMyAqIG4yMSkgKiBkZXRJbnY7XG5cdFx0dGVbMl0gPSAobjMyICogbjIxIC0gbjMxICogbjIyKSAqIGRldEludjtcblx0XHR0ZVszXSA9IHQxMiAqIGRldEludjtcblx0XHR0ZVs0XSA9IChuMzMgKiBuMTEgLSBuMzEgKiBuMTMpICogZGV0SW52O1xuXHRcdHRlWzVdID0gKG4zMSAqIG4xMiAtIG4zMiAqIG4xMSkgKiBkZXRJbnY7XG5cdFx0dGVbNl0gPSB0MTMgKiBkZXRJbnY7XG5cdFx0dGVbN10gPSAobjIxICogbjEzIC0gbjIzICogbjExKSAqIGRldEludjtcblx0XHR0ZVs4XSA9IChuMjIgKiBuMTEgLSBuMjEgKiBuMTIpICogZGV0SW52O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNwb3NlKCkge1xuXHRcdGxldCB0bXA7XG5cdFx0Y29uc3QgbSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dG1wID0gbVsxXTtcblx0XHRtWzFdID0gbVszXTtcblx0XHRtWzNdID0gdG1wO1xuXHRcdHRtcCA9IG1bMl07XG5cdFx0bVsyXSA9IG1bNl07XG5cdFx0bVs2XSA9IHRtcDtcblx0XHR0bXAgPSBtWzVdO1xuXHRcdG1bNV0gPSBtWzddO1xuXHRcdG1bN10gPSB0bXA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXROb3JtYWxNYXRyaXgobWF0cml4NCkge1xuXHRcdHJldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KG1hdHJpeDQpLmludmVydCgpLnRyYW5zcG9zZSgpO1xuXHR9XG5cblx0dHJhbnNwb3NlSW50b0FycmF5KHIpIHtcblx0XHRjb25zdCBtID0gdGhpcy5lbGVtZW50cztcblx0XHRyWzBdID0gbVswXTtcblx0XHRyWzFdID0gbVszXTtcblx0XHRyWzJdID0gbVs2XTtcblx0XHRyWzNdID0gbVsxXTtcblx0XHRyWzRdID0gbVs0XTtcblx0XHRyWzVdID0gbVs3XTtcblx0XHRyWzZdID0gbVsyXTtcblx0XHRyWzddID0gbVs1XTtcblx0XHRyWzhdID0gbVs4XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFV2VHJhbnNmb3JtKHR4LCB0eSwgc3gsIHN5LCByb3RhdGlvbiwgY3gsIGN5KSB7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKHJvdGF0aW9uKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXHRcdHRoaXMuc2V0KHN4ICogYywgc3ggKiBzLCAtc3ggKiAoYyAqIGN4ICsgcyAqIGN5KSArIGN4ICsgdHgsIC1zeSAqIHMsIHN5ICogYywgLXN5ICogKC1zICogY3ggKyBjICogY3kpICsgY3kgKyB0eSwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzY2FsZShzeCwgc3kpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dGVbMF0gKj0gc3g7XG5cdFx0dGVbM10gKj0gc3g7XG5cdFx0dGVbNl0gKj0gc3g7XG5cdFx0dGVbMV0gKj0gc3k7XG5cdFx0dGVbNF0gKj0gc3k7XG5cdFx0dGVbN10gKj0gc3k7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3RhdGUodGhldGEpIHtcblx0XHRjb25zdCBjID0gTWF0aC5jb3ModGhldGEpO1xuXHRcdGNvbnN0IHMgPSBNYXRoLnNpbih0aGV0YSk7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGExMSA9IHRlWzBdLFxuXHRcdFx0XHRcdGExMiA9IHRlWzNdLFxuXHRcdFx0XHRcdGExMyA9IHRlWzZdO1xuXHRcdGNvbnN0IGEyMSA9IHRlWzFdLFxuXHRcdFx0XHRcdGEyMiA9IHRlWzRdLFxuXHRcdFx0XHRcdGEyMyA9IHRlWzddO1xuXHRcdHRlWzBdID0gYyAqIGExMSArIHMgKiBhMjE7XG5cdFx0dGVbM10gPSBjICogYTEyICsgcyAqIGEyMjtcblx0XHR0ZVs2XSA9IGMgKiBhMTMgKyBzICogYTIzO1xuXHRcdHRlWzFdID0gLXMgKiBhMTEgKyBjICogYTIxO1xuXHRcdHRlWzRdID0gLXMgKiBhMTIgKyBjICogYTIyO1xuXHRcdHRlWzddID0gLXMgKiBhMTMgKyBjICogYTIzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNsYXRlKHR4LCB0eSkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR0ZVswXSArPSB0eCAqIHRlWzJdO1xuXHRcdHRlWzNdICs9IHR4ICogdGVbNV07XG5cdFx0dGVbNl0gKz0gdHggKiB0ZVs4XTtcblx0XHR0ZVsxXSArPSB0eSAqIHRlWzJdO1xuXHRcdHRlWzRdICs9IHR5ICogdGVbNV07XG5cdFx0dGVbN10gKz0gdHkgKiB0ZVs4XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhtYXRyaXgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtYXRyaXguZWxlbWVudHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0aWYgKHRlW2ldICE9PSBtZVtpXSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5LCBvZmZzZXQgPSAwKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdHRoaXMuZWxlbWVudHNbaV0gPSBhcnJheVtpICsgb2Zmc2V0XTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRhcnJheVtvZmZzZXRdID0gdGVbMF07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZVsxXTtcblx0XHRhcnJheVtvZmZzZXQgKyAyXSA9IHRlWzJdO1xuXHRcdGFycmF5W29mZnNldCArIDNdID0gdGVbM107XG5cdFx0YXJyYXlbb2Zmc2V0ICsgNF0gPSB0ZVs0XTtcblx0XHRhcnJheVtvZmZzZXQgKyA1XSA9IHRlWzVdO1xuXHRcdGFycmF5W29mZnNldCArIDZdID0gdGVbNl07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgN10gPSB0ZVs3XTtcblx0XHRhcnJheVtvZmZzZXQgKyA4XSA9IHRlWzhdO1xuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKTtcblx0fVxuXG59XG5cbk1hdHJpeDMucHJvdG90eXBlLmlzTWF0cml4MyA9IHRydWU7XG5cbmZ1bmN0aW9uIGFycmF5TmVlZHNVaW50MzIoYXJyYXkpIHtcblx0Ly8gYXNzdW1lcyBsYXJnZXIgdmFsdWVzIHVzdWFsbHkgb24gbGFzdFxuXHRmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0XHRpZiAoYXJyYXlbaV0gPiA2NTUzNSkgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IFRZUEVEX0FSUkFZUyA9IHtcblx0SW50OEFycmF5OiBJbnQ4QXJyYXksXG5cdFVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXksXG5cdFVpbnQ4Q2xhbXBlZEFycmF5OiBVaW50OENsYW1wZWRBcnJheSxcblx0SW50MTZBcnJheTogSW50MTZBcnJheSxcblx0VWludDE2QXJyYXk6IFVpbnQxNkFycmF5LFxuXHRJbnQzMkFycmF5OiBJbnQzMkFycmF5LFxuXHRVaW50MzJBcnJheTogVWludDMyQXJyYXksXG5cdEZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXk6IEZsb2F0NjRBcnJheVxufTtcblxuZnVuY3Rpb24gZ2V0VHlwZWRBcnJheSh0eXBlLCBidWZmZXIpIHtcblx0cmV0dXJuIG5ldyBUWVBFRF9BUlJBWVNbdHlwZV0oYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWUpIHtcblx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsIG5hbWUpO1xufVxuXG5jb25zdCBfY29sb3JLZXl3b3JkcyA9IHtcblx0J2FsaWNlYmx1ZSc6IDB4RjBGOEZGLFxuXHQnYW50aXF1ZXdoaXRlJzogMHhGQUVCRDcsXG5cdCdhcXVhJzogMHgwMEZGRkYsXG5cdCdhcXVhbWFyaW5lJzogMHg3RkZGRDQsXG5cdCdhenVyZSc6IDB4RjBGRkZGLFxuXHQnYmVpZ2UnOiAweEY1RjVEQyxcblx0J2Jpc3F1ZSc6IDB4RkZFNEM0LFxuXHQnYmxhY2snOiAweDAwMDAwMCxcblx0J2JsYW5jaGVkYWxtb25kJzogMHhGRkVCQ0QsXG5cdCdibHVlJzogMHgwMDAwRkYsXG5cdCdibHVldmlvbGV0JzogMHg4QTJCRTIsXG5cdCdicm93bic6IDB4QTUyQTJBLFxuXHQnYnVybHl3b29kJzogMHhERUI4ODcsXG5cdCdjYWRldGJsdWUnOiAweDVGOUVBMCxcblx0J2NoYXJ0cmV1c2UnOiAweDdGRkYwMCxcblx0J2Nob2NvbGF0ZSc6IDB4RDI2OTFFLFxuXHQnY29yYWwnOiAweEZGN0Y1MCxcblx0J2Nvcm5mbG93ZXJibHVlJzogMHg2NDk1RUQsXG5cdCdjb3Juc2lsayc6IDB4RkZGOERDLFxuXHQnY3JpbXNvbic6IDB4REMxNDNDLFxuXHQnY3lhbic6IDB4MDBGRkZGLFxuXHQnZGFya2JsdWUnOiAweDAwMDA4Qixcblx0J2RhcmtjeWFuJzogMHgwMDhCOEIsXG5cdCdkYXJrZ29sZGVucm9kJzogMHhCODg2MEIsXG5cdCdkYXJrZ3JheSc6IDB4QTlBOUE5LFxuXHQnZGFya2dyZWVuJzogMHgwMDY0MDAsXG5cdCdkYXJrZ3JleSc6IDB4QTlBOUE5LFxuXHQnZGFya2toYWtpJzogMHhCREI3NkIsXG5cdCdkYXJrbWFnZW50YSc6IDB4OEIwMDhCLFxuXHQnZGFya29saXZlZ3JlZW4nOiAweDU1NkIyRixcblx0J2RhcmtvcmFuZ2UnOiAweEZGOEMwMCxcblx0J2RhcmtvcmNoaWQnOiAweDk5MzJDQyxcblx0J2RhcmtyZWQnOiAweDhCMDAwMCxcblx0J2RhcmtzYWxtb24nOiAweEU5OTY3QSxcblx0J2RhcmtzZWFncmVlbic6IDB4OEZCQzhGLFxuXHQnZGFya3NsYXRlYmx1ZSc6IDB4NDgzRDhCLFxuXHQnZGFya3NsYXRlZ3JheSc6IDB4MkY0RjRGLFxuXHQnZGFya3NsYXRlZ3JleSc6IDB4MkY0RjRGLFxuXHQnZGFya3R1cnF1b2lzZSc6IDB4MDBDRUQxLFxuXHQnZGFya3Zpb2xldCc6IDB4OTQwMEQzLFxuXHQnZGVlcHBpbmsnOiAweEZGMTQ5Myxcblx0J2RlZXBza3libHVlJzogMHgwMEJGRkYsXG5cdCdkaW1ncmF5JzogMHg2OTY5NjksXG5cdCdkaW1ncmV5JzogMHg2OTY5NjksXG5cdCdkb2RnZXJibHVlJzogMHgxRTkwRkYsXG5cdCdmaXJlYnJpY2snOiAweEIyMjIyMixcblx0J2Zsb3JhbHdoaXRlJzogMHhGRkZBRjAsXG5cdCdmb3Jlc3RncmVlbic6IDB4MjI4QjIyLFxuXHQnZnVjaHNpYSc6IDB4RkYwMEZGLFxuXHQnZ2FpbnNib3JvJzogMHhEQ0RDREMsXG5cdCdnaG9zdHdoaXRlJzogMHhGOEY4RkYsXG5cdCdnb2xkJzogMHhGRkQ3MDAsXG5cdCdnb2xkZW5yb2QnOiAweERBQTUyMCxcblx0J2dyYXknOiAweDgwODA4MCxcblx0J2dyZWVuJzogMHgwMDgwMDAsXG5cdCdncmVlbnllbGxvdyc6IDB4QURGRjJGLFxuXHQnZ3JleSc6IDB4ODA4MDgwLFxuXHQnaG9uZXlkZXcnOiAweEYwRkZGMCxcblx0J2hvdHBpbmsnOiAweEZGNjlCNCxcblx0J2luZGlhbnJlZCc6IDB4Q0Q1QzVDLFxuXHQnaW5kaWdvJzogMHg0QjAwODIsXG5cdCdpdm9yeSc6IDB4RkZGRkYwLFxuXHQna2hha2knOiAweEYwRTY4Qyxcblx0J2xhdmVuZGVyJzogMHhFNkU2RkEsXG5cdCdsYXZlbmRlcmJsdXNoJzogMHhGRkYwRjUsXG5cdCdsYXduZ3JlZW4nOiAweDdDRkMwMCxcblx0J2xlbW9uY2hpZmZvbic6IDB4RkZGQUNELFxuXHQnbGlnaHRibHVlJzogMHhBREQ4RTYsXG5cdCdsaWdodGNvcmFsJzogMHhGMDgwODAsXG5cdCdsaWdodGN5YW4nOiAweEUwRkZGRixcblx0J2xpZ2h0Z29sZGVucm9keWVsbG93JzogMHhGQUZBRDIsXG5cdCdsaWdodGdyYXknOiAweEQzRDNEMyxcblx0J2xpZ2h0Z3JlZW4nOiAweDkwRUU5MCxcblx0J2xpZ2h0Z3JleSc6IDB4RDNEM0QzLFxuXHQnbGlnaHRwaW5rJzogMHhGRkI2QzEsXG5cdCdsaWdodHNhbG1vbic6IDB4RkZBMDdBLFxuXHQnbGlnaHRzZWFncmVlbic6IDB4MjBCMkFBLFxuXHQnbGlnaHRza3libHVlJzogMHg4N0NFRkEsXG5cdCdsaWdodHNsYXRlZ3JheSc6IDB4Nzc4ODk5LFxuXHQnbGlnaHRzbGF0ZWdyZXknOiAweDc3ODg5OSxcblx0J2xpZ2h0c3RlZWxibHVlJzogMHhCMEM0REUsXG5cdCdsaWdodHllbGxvdyc6IDB4RkZGRkUwLFxuXHQnbGltZSc6IDB4MDBGRjAwLFxuXHQnbGltZWdyZWVuJzogMHgzMkNEMzIsXG5cdCdsaW5lbic6IDB4RkFGMEU2LFxuXHQnbWFnZW50YSc6IDB4RkYwMEZGLFxuXHQnbWFyb29uJzogMHg4MDAwMDAsXG5cdCdtZWRpdW1hcXVhbWFyaW5lJzogMHg2NkNEQUEsXG5cdCdtZWRpdW1ibHVlJzogMHgwMDAwQ0QsXG5cdCdtZWRpdW1vcmNoaWQnOiAweEJBNTVEMyxcblx0J21lZGl1bXB1cnBsZSc6IDB4OTM3MERCLFxuXHQnbWVkaXVtc2VhZ3JlZW4nOiAweDNDQjM3MSxcblx0J21lZGl1bXNsYXRlYmx1ZSc6IDB4N0I2OEVFLFxuXHQnbWVkaXVtc3ByaW5nZ3JlZW4nOiAweDAwRkE5QSxcblx0J21lZGl1bXR1cnF1b2lzZSc6IDB4NDhEMUNDLFxuXHQnbWVkaXVtdmlvbGV0cmVkJzogMHhDNzE1ODUsXG5cdCdtaWRuaWdodGJsdWUnOiAweDE5MTk3MCxcblx0J21pbnRjcmVhbSc6IDB4RjVGRkZBLFxuXHQnbWlzdHlyb3NlJzogMHhGRkU0RTEsXG5cdCdtb2NjYXNpbic6IDB4RkZFNEI1LFxuXHQnbmF2YWpvd2hpdGUnOiAweEZGREVBRCxcblx0J25hdnknOiAweDAwMDA4MCxcblx0J29sZGxhY2UnOiAweEZERjVFNixcblx0J29saXZlJzogMHg4MDgwMDAsXG5cdCdvbGl2ZWRyYWInOiAweDZCOEUyMyxcblx0J29yYW5nZSc6IDB4RkZBNTAwLFxuXHQnb3JhbmdlcmVkJzogMHhGRjQ1MDAsXG5cdCdvcmNoaWQnOiAweERBNzBENixcblx0J3BhbGVnb2xkZW5yb2QnOiAweEVFRThBQSxcblx0J3BhbGVncmVlbic6IDB4OThGQjk4LFxuXHQncGFsZXR1cnF1b2lzZSc6IDB4QUZFRUVFLFxuXHQncGFsZXZpb2xldHJlZCc6IDB4REI3MDkzLFxuXHQncGFwYXlhd2hpcCc6IDB4RkZFRkQ1LFxuXHQncGVhY2hwdWZmJzogMHhGRkRBQjksXG5cdCdwZXJ1JzogMHhDRDg1M0YsXG5cdCdwaW5rJzogMHhGRkMwQ0IsXG5cdCdwbHVtJzogMHhEREEwREQsXG5cdCdwb3dkZXJibHVlJzogMHhCMEUwRTYsXG5cdCdwdXJwbGUnOiAweDgwMDA4MCxcblx0J3JlYmVjY2FwdXJwbGUnOiAweDY2MzM5OSxcblx0J3JlZCc6IDB4RkYwMDAwLFxuXHQncm9zeWJyb3duJzogMHhCQzhGOEYsXG5cdCdyb3lhbGJsdWUnOiAweDQxNjlFMSxcblx0J3NhZGRsZWJyb3duJzogMHg4QjQ1MTMsXG5cdCdzYWxtb24nOiAweEZBODA3Mixcblx0J3NhbmR5YnJvd24nOiAweEY0QTQ2MCxcblx0J3NlYWdyZWVuJzogMHgyRThCNTcsXG5cdCdzZWFzaGVsbCc6IDB4RkZGNUVFLFxuXHQnc2llbm5hJzogMHhBMDUyMkQsXG5cdCdzaWx2ZXInOiAweEMwQzBDMCxcblx0J3NreWJsdWUnOiAweDg3Q0VFQixcblx0J3NsYXRlYmx1ZSc6IDB4NkE1QUNELFxuXHQnc2xhdGVncmF5JzogMHg3MDgwOTAsXG5cdCdzbGF0ZWdyZXknOiAweDcwODA5MCxcblx0J3Nub3cnOiAweEZGRkFGQSxcblx0J3NwcmluZ2dyZWVuJzogMHgwMEZGN0YsXG5cdCdzdGVlbGJsdWUnOiAweDQ2ODJCNCxcblx0J3Rhbic6IDB4RDJCNDhDLFxuXHQndGVhbCc6IDB4MDA4MDgwLFxuXHQndGhpc3RsZSc6IDB4RDhCRkQ4LFxuXHQndG9tYXRvJzogMHhGRjYzNDcsXG5cdCd0dXJxdW9pc2UnOiAweDQwRTBEMCxcblx0J3Zpb2xldCc6IDB4RUU4MkVFLFxuXHQnd2hlYXQnOiAweEY1REVCMyxcblx0J3doaXRlJzogMHhGRkZGRkYsXG5cdCd3aGl0ZXNtb2tlJzogMHhGNUY1RjUsXG5cdCd5ZWxsb3cnOiAweEZGRkYwMCxcblx0J3llbGxvd2dyZWVuJzogMHg5QUNEMzJcbn07XG5jb25zdCBfaHNsQSA9IHtcblx0aDogMCxcblx0czogMCxcblx0bDogMFxufTtcbmNvbnN0IF9oc2xCID0ge1xuXHRoOiAwLFxuXHRzOiAwLFxuXHRsOiAwXG59O1xuXG5mdW5jdGlvbiBodWUycmdiKHAsIHEsIHQpIHtcblx0aWYgKHQgPCAwKSB0ICs9IDE7XG5cdGlmICh0ID4gMSkgdCAtPSAxO1xuXHRpZiAodCA8IDEgLyA2KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcblx0aWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG5cdGlmICh0IDwgMiAvIDMpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiAoMiAvIDMgLSB0KTtcblx0cmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIFNSR0JUb0xpbmVhcihjKSB7XG5cdHJldHVybiBjIDwgMC4wNDA0NSA/IGMgKiAwLjA3NzM5OTM4MDggOiBNYXRoLnBvdyhjICogMC45NDc4NjcyOTg2ICsgMC4wNTIxMzI3MDE0LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBMaW5lYXJUb1NSR0IoYykge1xuXHRyZXR1cm4gYyA8IDAuMDAzMTMwOCA/IGMgKiAxMi45MiA6IDEuMDU1ICogTWF0aC5wb3coYywgMC40MTY2NikgLSAwLjA1NTtcbn1cblxuY2xhc3MgQ29sb3Ige1xuXHRjb25zdHJ1Y3RvcihyLCBnLCBiKSB7XG5cdFx0aWYgKGcgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIHIgaXMgVEhSRUUuQ29sb3IsIGhleCBvciBzdHJpbmdcblx0XHRcdHJldHVybiB0aGlzLnNldChyKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRSR0IociwgZywgYik7XG5cdH1cblxuXHRzZXQodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgJiYgdmFsdWUuaXNDb2xvcikge1xuXHRcdFx0dGhpcy5jb3B5KHZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdHRoaXMuc2V0SGV4KHZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHRoaXMuc2V0U3R5bGUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMuciA9IHNjYWxhcjtcblx0XHR0aGlzLmcgPSBzY2FsYXI7XG5cdFx0dGhpcy5iID0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0SGV4KGhleCkge1xuXHRcdGhleCA9IE1hdGguZmxvb3IoaGV4KTtcblx0XHR0aGlzLnIgPSAoaGV4ID4+IDE2ICYgMjU1KSAvIDI1NTtcblx0XHR0aGlzLmcgPSAoaGV4ID4+IDggJiAyNTUpIC8gMjU1O1xuXHRcdHRoaXMuYiA9IChoZXggJiAyNTUpIC8gMjU1O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UkdCKHIsIGcsIGIpIHtcblx0XHR0aGlzLnIgPSByO1xuXHRcdHRoaXMuZyA9IGc7XG5cdFx0dGhpcy5iID0gYjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEhTTChoLCBzLCBsKSB7XG5cdFx0Ly8gaCxzLGwgcmFuZ2VzIGFyZSBpbiAwLjAgLSAxLjBcblx0XHRoID0gZXVjbGlkZWFuTW9kdWxvKGgsIDEpO1xuXHRcdHMgPSBjbGFtcChzLCAwLCAxKTtcblx0XHRsID0gY2xhbXAobCwgMCwgMSk7XG5cblx0XHRpZiAocyA9PT0gMCkge1xuXHRcdFx0dGhpcy5yID0gdGhpcy5nID0gdGhpcy5iID0gbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcCA9IGwgPD0gMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuXHRcdFx0Y29uc3QgcSA9IDIgKiBsIC0gcDtcblx0XHRcdHRoaXMuciA9IGh1ZTJyZ2IocSwgcCwgaCArIDEgLyAzKTtcblx0XHRcdHRoaXMuZyA9IGh1ZTJyZ2IocSwgcCwgaCk7XG5cdFx0XHR0aGlzLmIgPSBodWUycmdiKHEsIHAsIGggLSAxIC8gMyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRTdHlsZShzdHlsZSkge1xuXHRcdGZ1bmN0aW9uIGhhbmRsZUFscGhhKHN0cmluZykge1xuXHRcdFx0aWYgKHN0cmluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRcdGlmIChwYXJzZUZsb2F0KHN0cmluZykgPCAxKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAnICsgc3R5bGUgKyAnIHdpbGwgYmUgaWdub3JlZC4nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgbTtcblxuXHRcdGlmIChtID0gL14oKD86cmdifGhzbClhPylcXCgoW15cXCldKilcXCkvLmV4ZWMoc3R5bGUpKSB7XG5cdFx0XHQvLyByZ2IgLyBoc2xcblx0XHRcdGxldCBjb2xvcjtcblx0XHRcdGNvbnN0IG5hbWUgPSBtWzFdO1xuXHRcdFx0Y29uc3QgY29tcG9uZW50cyA9IG1bMl07XG5cblx0XHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0XHRjYXNlICdyZ2InOlxuXHRcdFx0XHRjYXNlICdyZ2JhJzpcblx0XHRcdFx0XHRpZiAoY29sb3IgPSAvXlxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqKD86LFxccyooXFxkKlxcLj9cXGQrKVxccyopPyQvLmV4ZWMoY29tcG9uZW50cykpIHtcblx0XHRcdFx0XHRcdC8vIHJnYigyNTUsMCwwKSByZ2JhKDI1NSwwLDAsMC41KVxuXHRcdFx0XHRcdFx0dGhpcy5yID0gTWF0aC5taW4oMjU1LCBwYXJzZUludChjb2xvclsxXSwgMTApKSAvIDI1NTtcblx0XHRcdFx0XHRcdHRoaXMuZyA9IE1hdGgubWluKDI1NSwgcGFyc2VJbnQoY29sb3JbMl0sIDEwKSkgLyAyNTU7XG5cdFx0XHRcdFx0XHR0aGlzLmIgPSBNYXRoLm1pbigyNTUsIHBhcnNlSW50KGNvbG9yWzNdLCAxMCkpIC8gMjU1O1xuXHRcdFx0XHRcdFx0aGFuZGxlQWxwaGEoY29sb3JbNF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGNvbG9yID0gL15cXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKGNvbXBvbmVudHMpKSB7XG5cdFx0XHRcdFx0XHQvLyByZ2IoMTAwJSwwJSwwJSkgcmdiYSgxMDAlLDAlLDAlLDAuNSlcblx0XHRcdFx0XHRcdHRoaXMuciA9IE1hdGgubWluKDEwMCwgcGFyc2VJbnQoY29sb3JbMV0sIDEwKSkgLyAxMDA7XG5cdFx0XHRcdFx0XHR0aGlzLmcgPSBNYXRoLm1pbigxMDAsIHBhcnNlSW50KGNvbG9yWzJdLCAxMCkpIC8gMTAwO1xuXHRcdFx0XHRcdFx0dGhpcy5iID0gTWF0aC5taW4oMTAwLCBwYXJzZUludChjb2xvclszXSwgMTApKSAvIDEwMDtcblx0XHRcdFx0XHRcdGhhbmRsZUFscGhhKGNvbG9yWzRdKTtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ2hzbCc6XG5cdFx0XHRcdGNhc2UgJ2hzbGEnOlxuXHRcdFx0XHRcdGlmIChjb2xvciA9IC9eXFxzKihcXGQqXFwuP1xcZCspXFxzKixcXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKGNvbXBvbmVudHMpKSB7XG5cdFx0XHRcdFx0XHQvLyBoc2woMTIwLDUwJSw1MCUpIGhzbGEoMTIwLDUwJSw1MCUsMC41KVxuXHRcdFx0XHRcdFx0Y29uc3QgaCA9IHBhcnNlRmxvYXQoY29sb3JbMV0pIC8gMzYwO1xuXHRcdFx0XHRcdFx0Y29uc3QgcyA9IHBhcnNlSW50KGNvbG9yWzJdLCAxMCkgLyAxMDA7XG5cdFx0XHRcdFx0XHRjb25zdCBsID0gcGFyc2VJbnQoY29sb3JbM10sIDEwKSAvIDEwMDtcblx0XHRcdFx0XHRcdGhhbmRsZUFscGhhKGNvbG9yWzRdKTtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEhTTChoLCBzLCBsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG0gPSAvXlxcIyhbQS1GYS1mXFxkXSspJC8uZXhlYyhzdHlsZSkpIHtcblx0XHRcdC8vIGhleCBjb2xvclxuXHRcdFx0Y29uc3QgaGV4ID0gbVsxXTtcblx0XHRcdGNvbnN0IHNpemUgPSBoZXgubGVuZ3RoO1xuXG5cdFx0XHRpZiAoc2l6ZSA9PT0gMykge1xuXHRcdFx0XHQvLyAjZmYwXG5cdFx0XHRcdHRoaXMuciA9IHBhcnNlSW50KGhleC5jaGFyQXQoMCkgKyBoZXguY2hhckF0KDApLCAxNikgLyAyNTU7XG5cdFx0XHRcdHRoaXMuZyA9IHBhcnNlSW50KGhleC5jaGFyQXQoMSkgKyBoZXguY2hhckF0KDEpLCAxNikgLyAyNTU7XG5cdFx0XHRcdHRoaXMuYiA9IHBhcnNlSW50KGhleC5jaGFyQXQoMikgKyBoZXguY2hhckF0KDIpLCAxNikgLyAyNTU7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSBlbHNlIGlmIChzaXplID09PSA2KSB7XG5cdFx0XHRcdC8vICNmZjAwMDBcblx0XHRcdFx0dGhpcy5yID0gcGFyc2VJbnQoaGV4LmNoYXJBdCgwKSArIGhleC5jaGFyQXQoMSksIDE2KSAvIDI1NTtcblx0XHRcdFx0dGhpcy5nID0gcGFyc2VJbnQoaGV4LmNoYXJBdCgyKSArIGhleC5jaGFyQXQoMyksIDE2KSAvIDI1NTtcblx0XHRcdFx0dGhpcy5iID0gcGFyc2VJbnQoaGV4LmNoYXJBdCg0KSArIGhleC5jaGFyQXQoNSksIDE2KSAvIDI1NTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHN0eWxlICYmIHN0eWxlLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLnNldENvbG9yTmFtZShzdHlsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb2xvck5hbWUoc3R5bGUpIHtcblx0XHQvLyBjb2xvciBrZXl3b3Jkc1xuXHRcdGNvbnN0IGhleCA9IF9jb2xvcktleXdvcmRzW3N0eWxlLnRvTG93ZXJDYXNlKCldO1xuXG5cdFx0aWYgKGhleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyByZWRcblx0XHRcdHRoaXMuc2V0SGV4KGhleCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHVua25vd24gY29sb3Jcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgJyArIHN0eWxlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsIHRoaXMuZywgdGhpcy5iKTtcblx0fVxuXG5cdGNvcHkoY29sb3IpIHtcblx0XHR0aGlzLnIgPSBjb2xvci5yO1xuXHRcdHRoaXMuZyA9IGNvbG9yLmc7XG5cdFx0dGhpcy5iID0gY29sb3IuYjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlTUkdCVG9MaW5lYXIoY29sb3IpIHtcblx0XHR0aGlzLnIgPSBTUkdCVG9MaW5lYXIoY29sb3Iucik7XG5cdFx0dGhpcy5nID0gU1JHQlRvTGluZWFyKGNvbG9yLmcpO1xuXHRcdHRoaXMuYiA9IFNSR0JUb0xpbmVhcihjb2xvci5iKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlMaW5lYXJUb1NSR0IoY29sb3IpIHtcblx0XHR0aGlzLnIgPSBMaW5lYXJUb1NSR0IoY29sb3Iucik7XG5cdFx0dGhpcy5nID0gTGluZWFyVG9TUkdCKGNvbG9yLmcpO1xuXHRcdHRoaXMuYiA9IExpbmVhclRvU1JHQihjb2xvci5iKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnZlcnRTUkdCVG9MaW5lYXIoKSB7XG5cdFx0dGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29udmVydExpbmVhclRvU1JHQigpIHtcblx0XHR0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRIZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuciAqIDI1NSA8PCAxNiBeIHRoaXMuZyAqIDI1NSA8PCA4IF4gdGhpcy5iICogMjU1IDw8IDA7XG5cdH1cblxuXHRnZXRIZXhTdHJpbmcoKSB7XG5cdFx0cmV0dXJuICgnMDAwMDAwJyArIHRoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNik7XG5cdH1cblxuXHRnZXRIU0wodGFyZ2V0KSB7XG5cdFx0Ly8gaCxzLGwgcmFuZ2VzIGFyZSBpbiAwLjAgLSAxLjBcblx0XHRjb25zdCByID0gdGhpcy5yLFxuXHRcdFx0XHRcdGcgPSB0aGlzLmcsXG5cdFx0XHRcdFx0YiA9IHRoaXMuYjtcblx0XHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcblx0XHRsZXQgaHVlLCBzYXR1cmF0aW9uO1xuXHRcdGNvbnN0IGxpZ2h0bmVzcyA9IChtaW4gKyBtYXgpIC8gMi4wO1xuXG5cdFx0aWYgKG1pbiA9PT0gbWF4KSB7XG5cdFx0XHRodWUgPSAwO1xuXHRcdFx0c2F0dXJhdGlvbiA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXHRcdFx0c2F0dXJhdGlvbiA9IGxpZ2h0bmVzcyA8PSAwLjUgPyBkZWx0YSAvIChtYXggKyBtaW4pIDogZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cblx0XHRcdHN3aXRjaCAobWF4KSB7XG5cdFx0XHRcdGNhc2Ugcjpcblx0XHRcdFx0XHRodWUgPSAoZyAtIGIpIC8gZGVsdGEgKyAoZyA8IGIgPyA2IDogMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBnOlxuXHRcdFx0XHRcdGh1ZSA9IChiIC0gcikgLyBkZWx0YSArIDI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBiOlxuXHRcdFx0XHRcdGh1ZSA9IChyIC0gZykgLyBkZWx0YSArIDQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGh1ZSAvPSA2O1xuXHRcdH1cblxuXHRcdHRhcmdldC5oID0gaHVlO1xuXHRcdHRhcmdldC5zID0gc2F0dXJhdGlvbjtcblx0XHR0YXJnZXQubCA9IGxpZ2h0bmVzcztcblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9XG5cblx0Z2V0U3R5bGUoKSB7XG5cdFx0cmV0dXJuICdyZ2IoJyArICh0aGlzLnIgKiAyNTUgfCAwKSArICcsJyArICh0aGlzLmcgKiAyNTUgfCAwKSArICcsJyArICh0aGlzLmIgKiAyNTUgfCAwKSArICcpJztcblx0fVxuXG5cdG9mZnNldEhTTChoLCBzLCBsKSB7XG5cdFx0dGhpcy5nZXRIU0woX2hzbEEpO1xuXHRcdF9oc2xBLmggKz0gaDtcblx0XHRfaHNsQS5zICs9IHM7XG5cdFx0X2hzbEEubCArPSBsO1xuXHRcdHRoaXMuc2V0SFNMKF9oc2xBLmgsIF9oc2xBLnMsIF9oc2xBLmwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkKGNvbG9yKSB7XG5cdFx0dGhpcy5yICs9IGNvbG9yLnI7XG5cdFx0dGhpcy5nICs9IGNvbG9yLmc7XG5cdFx0dGhpcy5iICs9IGNvbG9yLmI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRDb2xvcnMoY29sb3IxLCBjb2xvcjIpIHtcblx0XHR0aGlzLnIgPSBjb2xvcjEuciArIGNvbG9yMi5yO1xuXHRcdHRoaXMuZyA9IGNvbG9yMS5nICsgY29sb3IyLmc7XG5cdFx0dGhpcy5iID0gY29sb3IxLmIgKyBjb2xvcjIuYjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxhcihzKSB7XG5cdFx0dGhpcy5yICs9IHM7XG5cdFx0dGhpcy5nICs9IHM7XG5cdFx0dGhpcy5iICs9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWIoY29sb3IpIHtcblx0XHR0aGlzLnIgPSBNYXRoLm1heCgwLCB0aGlzLnIgLSBjb2xvci5yKTtcblx0XHR0aGlzLmcgPSBNYXRoLm1heCgwLCB0aGlzLmcgLSBjb2xvci5nKTtcblx0XHR0aGlzLmIgPSBNYXRoLm1heCgwLCB0aGlzLmIgLSBjb2xvci5iKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5KGNvbG9yKSB7XG5cdFx0dGhpcy5yICo9IGNvbG9yLnI7XG5cdFx0dGhpcy5nICo9IGNvbG9yLmc7XG5cdFx0dGhpcy5iICo9IGNvbG9yLmI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseVNjYWxhcihzKSB7XG5cdFx0dGhpcy5yICo9IHM7XG5cdFx0dGhpcy5nICo9IHM7XG5cdFx0dGhpcy5iICo9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsZXJwKGNvbG9yLCBhbHBoYSkge1xuXHRcdHRoaXMuciArPSAoY29sb3IuciAtIHRoaXMucikgKiBhbHBoYTtcblx0XHR0aGlzLmcgKz0gKGNvbG9yLmcgLSB0aGlzLmcpICogYWxwaGE7XG5cdFx0dGhpcy5iICs9IChjb2xvci5iIC0gdGhpcy5iKSAqIGFscGhhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bGVycENvbG9ycyhjb2xvcjEsIGNvbG9yMiwgYWxwaGEpIHtcblx0XHR0aGlzLnIgPSBjb2xvcjEuciArIChjb2xvcjIuciAtIGNvbG9yMS5yKSAqIGFscGhhO1xuXHRcdHRoaXMuZyA9IGNvbG9yMS5nICsgKGNvbG9yMi5nIC0gY29sb3IxLmcpICogYWxwaGE7XG5cdFx0dGhpcy5iID0gY29sb3IxLmIgKyAoY29sb3IyLmIgLSBjb2xvcjEuYikgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnBIU0woY29sb3IsIGFscGhhKSB7XG5cdFx0dGhpcy5nZXRIU0woX2hzbEEpO1xuXHRcdGNvbG9yLmdldEhTTChfaHNsQik7XG5cdFx0Y29uc3QgaCA9IGxlcnAoX2hzbEEuaCwgX2hzbEIuaCwgYWxwaGEpO1xuXHRcdGNvbnN0IHMgPSBsZXJwKF9oc2xBLnMsIF9oc2xCLnMsIGFscGhhKTtcblx0XHRjb25zdCBsID0gbGVycChfaHNsQS5sLCBfaHNsQi5sLCBhbHBoYSk7XG5cdFx0dGhpcy5zZXRIU0woaCwgcywgbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMoYykge1xuXHRcdHJldHVybiBjLnIgPT09IHRoaXMuciAmJiBjLmcgPT09IHRoaXMuZyAmJiBjLmIgPT09IHRoaXMuYjtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdHRoaXMuciA9IGFycmF5W29mZnNldF07XG5cdFx0dGhpcy5nID0gYXJyYXlbb2Zmc2V0ICsgMV07XG5cdFx0dGhpcy5iID0gYXJyYXlbb2Zmc2V0ICsgMl07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRhcnJheVtvZmZzZXRdID0gdGhpcy5yO1xuXHRcdGFycmF5W29mZnNldCArIDFdID0gdGhpcy5nO1xuXHRcdGFycmF5W29mZnNldCArIDJdID0gdGhpcy5iO1xuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCkge1xuXHRcdHRoaXMuciA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcblx0XHR0aGlzLmcgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XG5cdFx0dGhpcy5iID0gYXR0cmlidXRlLmdldFooaW5kZXgpO1xuXG5cdFx0aWYgKGF0dHJpYnV0ZS5ub3JtYWxpemVkID09PSB0cnVlKSB7XG5cdFx0XHQvLyBhc3N1bWluZyBVaW50OEFycmF5XG5cdFx0XHR0aGlzLnIgLz0gMjU1O1xuXHRcdFx0dGhpcy5nIC89IDI1NTtcblx0XHRcdHRoaXMuYiAvPSAyNTU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SGV4KCk7XG5cdH1cblxufVxuXG5Db2xvci5OQU1FUyA9IF9jb2xvcktleXdvcmRzO1xuQ29sb3IucHJvdG90eXBlLmlzQ29sb3IgPSB0cnVlO1xuQ29sb3IucHJvdG90eXBlLnIgPSAxO1xuQ29sb3IucHJvdG90eXBlLmcgPSAxO1xuQ29sb3IucHJvdG90eXBlLmIgPSAxO1xuXG5sZXQgX2NhbnZhcztcblxuY2xhc3MgSW1hZ2VVdGlscyB7XG5cdHN0YXRpYyBnZXREYXRhVVJMKGltYWdlKSB7XG5cdFx0aWYgKC9eZGF0YTovaS50ZXN0KGltYWdlLnNyYykpIHtcblx0XHRcdHJldHVybiBpbWFnZS5zcmM7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCA9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIGltYWdlLnNyYztcblx0XHR9XG5cblx0XHRsZXQgY2FudmFzO1xuXG5cdFx0aWYgKGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcblx0XHRcdGNhbnZhcyA9IGltYWdlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoX2NhbnZhcyA9PT0gdW5kZWZpbmVkKSBfY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCdjYW52YXMnKTtcblx0XHRcdF9jYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcblx0XHRcdF9jYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gX2NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0XHRpZiAoaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcblx0XHRcdFx0Y29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2UsIDAsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjYW52YXMgPSBfY2FudmFzO1xuXHRcdH1cblxuXHRcdGlmIChjYW52YXMud2lkdGggPiAyMDQ4IHx8IGNhbnZhcy5oZWlnaHQgPiAyMDQ4KSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucycsIGltYWdlKTtcblx0XHRcdHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC42KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBzUkdCVG9MaW5lYXIoaW1hZ2UpIHtcblx0XHRpZiAodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCB0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgdHlwZW9mIEltYWdlQml0bWFwICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSB7XG5cdFx0XHRjb25zdCBjYW52YXMgPSBjcmVhdGVFbGVtZW50TlMoJ2NhbnZhcycpO1xuXHRcdFx0Y2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG5cdFx0XHRjYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0Y29uc3QgaW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG5cdFx0XHRjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRkYXRhW2ldID0gU1JHQlRvTGluZWFyKGRhdGFbaV0gLyAyNTUpICogMjU1O1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuXHRcdFx0cmV0dXJuIGNhbnZhcztcblx0XHR9IGVsc2UgaWYgKGltYWdlLmRhdGEpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBpbWFnZS5kYXRhLnNsaWNlKDApO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuXHRcdFx0XHRcdGRhdGFbaV0gPSBNYXRoLmZsb29yKFNSR0JUb0xpbmVhcihkYXRhW2ldIC8gMjU1KSAqIDI1NSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYXNzdW1pbmcgZmxvYXRcblx0XHRcdFx0XHRkYXRhW2ldID0gU1JHQlRvTGluZWFyKGRhdGFbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLicpO1xuXHRcdFx0cmV0dXJuIGltYWdlO1xuXHRcdH1cblx0fVxuXG59XG5cbmxldCB0ZXh0dXJlSWQgPSAwO1xuXG5jbGFzcyBUZXh0dXJlIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblx0Y29uc3RydWN0b3IoaW1hZ2UgPSBUZXh0dXJlLkRFRkFVTFRfSU1BR0UsIG1hcHBpbmcgPSBUZXh0dXJlLkRFRkFVTFRfTUFQUElORywgd3JhcFMgPSBDbGFtcFRvRWRnZVdyYXBwaW5nLCB3cmFwVCA9IENsYW1wVG9FZGdlV3JhcHBpbmcsIG1hZ0ZpbHRlciA9IExpbmVhckZpbHRlciwgbWluRmlsdGVyID0gTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyLCBmb3JtYXQgPSBSR0JBRm9ybWF0LCB0eXBlID0gVW5zaWduZWRCeXRlVHlwZSwgYW5pc290cm9weSA9IDEsIGVuY29kaW5nID0gTGluZWFyRW5jb2RpbmcpIHtcblx0XHRzdXBlcigpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaWQnLCB7XG5cdFx0XHR2YWx1ZTogdGV4dHVyZUlkKytcblx0XHR9KTtcblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLmltYWdlID0gaW1hZ2U7XG5cdFx0dGhpcy5taXBtYXBzID0gW107XG5cdFx0dGhpcy5tYXBwaW5nID0gbWFwcGluZztcblx0XHR0aGlzLndyYXBTID0gd3JhcFM7XG5cdFx0dGhpcy53cmFwVCA9IHdyYXBUO1xuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyO1xuXHRcdHRoaXMuYW5pc290cm9weSA9IGFuaXNvdHJvcHk7XG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdFx0dGhpcy5pbnRlcm5hbEZvcm1hdCA9IG51bGw7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLm9mZnNldCA9IG5ldyBWZWN0b3IyKDAsIDApO1xuXHRcdHRoaXMucmVwZWF0ID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLCAwKTtcblx0XHR0aGlzLnJvdGF0aW9uID0gMDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IHRydWU7XG5cdFx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IHRydWU7XG5cdFx0dGhpcy51bnBhY2tBbGlnbm1lbnQgPSA0OyAvLyB2YWxpZCB2YWx1ZXM6IDEsIDIsIDQsIDggKHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL29wZW5nbGVzL3Nkay9kb2NzL21hbi94aHRtbC9nbFBpeGVsU3RvcmVpLnhtbClcblx0XHQvLyBWYWx1ZXMgb2YgZW5jb2RpbmcgIT09IFRIUkVFLkxpbmVhckVuY29kaW5nIG9ubHkgc3VwcG9ydGVkIG9uIG1hcCwgZW52TWFwIGFuZCBlbWlzc2l2ZU1hcC5cblx0XHQvL1xuXHRcdC8vIEFsc28gY2hhbmdpbmcgdGhlIGVuY29kaW5nIGFmdGVyIGFscmVhZHkgdXNlZCBieSBhIE1hdGVyaWFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgbWFrZSB0aGUgTWF0ZXJpYWxcblx0XHQvLyB1cGRhdGUuIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCBNYXRlcmlhbC5uZWVkc1VwZGF0ZSB0byB0cmlnZ2VyIGl0IHRvIHJlY29tcGlsZS5cblxuXHRcdHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblx0XHR0aGlzLm9uVXBkYXRlID0gbnVsbDtcblx0XHR0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZhbHNlOyAvLyBpbmRpY2F0ZXMgd2hldGhlciBhIHRleHR1cmUgYmVsb25ncyB0byBhIHJlbmRlciB0YXJnZXQgb3Igbm90XG5cblx0XHR0aGlzLm5lZWRzUE1SRU1VcGRhdGUgPSBmYWxzZTsgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0ZXh0dXJlIHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgUE1SRU1HZW5lcmF0b3Igb3Igbm90IChvbmx5IHJlbGV2YW50IGZvciByZW5kZXIgdGFyZ2V0IHRleHR1cmVzKVxuXHR9XG5cblx0dXBkYXRlTWF0cml4KCkge1xuXHRcdHRoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsIHRoaXMub2Zmc2V0LnksIHRoaXMucmVwZWF0LngsIHRoaXMucmVwZWF0LnksIHRoaXMucm90YXRpb24sIHRoaXMuY2VudGVyLngsIHRoaXMuY2VudGVyLnkpO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cdFx0dGhpcy5pbWFnZSA9IHNvdXJjZS5pbWFnZTtcblx0XHR0aGlzLm1pcG1hcHMgPSBzb3VyY2UubWlwbWFwcy5zbGljZSgwKTtcblx0XHR0aGlzLm1hcHBpbmcgPSBzb3VyY2UubWFwcGluZztcblx0XHR0aGlzLndyYXBTID0gc291cmNlLndyYXBTO1xuXHRcdHRoaXMud3JhcFQgPSBzb3VyY2Uud3JhcFQ7XG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBzb3VyY2UubWFnRmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gc291cmNlLm1pbkZpbHRlcjtcblx0XHR0aGlzLmFuaXNvdHJvcHkgPSBzb3VyY2UuYW5pc290cm9weTtcblx0XHR0aGlzLmZvcm1hdCA9IHNvdXJjZS5mb3JtYXQ7XG5cdFx0dGhpcy5pbnRlcm5hbEZvcm1hdCA9IHNvdXJjZS5pbnRlcm5hbEZvcm1hdDtcblx0XHR0aGlzLnR5cGUgPSBzb3VyY2UudHlwZTtcblx0XHR0aGlzLm9mZnNldC5jb3B5KHNvdXJjZS5vZmZzZXQpO1xuXHRcdHRoaXMucmVwZWF0LmNvcHkoc291cmNlLnJlcGVhdCk7XG5cdFx0dGhpcy5jZW50ZXIuY29weShzb3VyY2UuY2VudGVyKTtcblx0XHR0aGlzLnJvdGF0aW9uID0gc291cmNlLnJvdGF0aW9uO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlO1xuXHRcdHRoaXMubWF0cml4LmNvcHkoc291cmNlLm1hdHJpeCk7XG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBzb3VyY2UuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IHNvdXJjZS5wcmVtdWx0aXBseUFscGhhO1xuXHRcdHRoaXMuZmxpcFkgPSBzb3VyY2UuZmxpcFk7XG5cdFx0dGhpcy51bnBhY2tBbGlnbm1lbnQgPSBzb3VyY2UudW5wYWNrQWxpZ25tZW50O1xuXHRcdHRoaXMuZW5jb2RpbmcgPSBzb3VyY2UuZW5jb2Rpbmc7XG5cdFx0dGhpcy51c2VyRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc291cmNlLnVzZXJEYXRhKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGlzUm9vdE9iamVjdCA9IG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZyc7XG5cblx0XHRpZiAoIWlzUm9vdE9iamVjdCAmJiBtZXRhLnRleHR1cmVzW3RoaXMudXVpZF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG1ldGEudGV4dHVyZXNbdGhpcy51dWlkXTtcblx0XHR9XG5cblx0XHRjb25zdCBvdXRwdXQgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdUZXh0dXJlJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnVGV4dHVyZS50b0pTT04nXG5cdFx0XHR9LFxuXHRcdFx0dXVpZDogdGhpcy51dWlkLFxuXHRcdFx0bmFtZTogdGhpcy5uYW1lLFxuXHRcdFx0bWFwcGluZzogdGhpcy5tYXBwaW5nLFxuXHRcdFx0cmVwZWF0OiBbdGhpcy5yZXBlYXQueCwgdGhpcy5yZXBlYXQueV0sXG5cdFx0XHRvZmZzZXQ6IFt0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55XSxcblx0XHRcdGNlbnRlcjogW3RoaXMuY2VudGVyLngsIHRoaXMuY2VudGVyLnldLFxuXHRcdFx0cm90YXRpb246IHRoaXMucm90YXRpb24sXG5cdFx0XHR3cmFwOiBbdGhpcy53cmFwUywgdGhpcy53cmFwVF0sXG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxuXHRcdFx0ZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmcsXG5cdFx0XHRtaW5GaWx0ZXI6IHRoaXMubWluRmlsdGVyLFxuXHRcdFx0bWFnRmlsdGVyOiB0aGlzLm1hZ0ZpbHRlcixcblx0XHRcdGFuaXNvdHJvcHk6IHRoaXMuYW5pc290cm9weSxcblx0XHRcdGZsaXBZOiB0aGlzLmZsaXBZLFxuXHRcdFx0cHJlbXVsdGlwbHlBbHBoYTogdGhpcy5wcmVtdWx0aXBseUFscGhhLFxuXHRcdFx0dW5wYWNrQWxpZ25tZW50OiB0aGlzLnVucGFja0FsaWdubWVudFxuXHRcdH07XG5cblx0XHRpZiAodGhpcy5pbWFnZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBUT0RPOiBNb3ZlIHRvIFRIUkVFLkltYWdlXG5cdFx0XHRjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2U7XG5cblx0XHRcdGlmIChpbWFnZS51dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aW1hZ2UudXVpZCA9IGdlbmVyYXRlVVVJRCgpOyAvLyBVR0hcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc1Jvb3RPYmplY3QgJiYgbWV0YS5pbWFnZXNbaW1hZ2UudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsZXQgdXJsO1xuXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGltYWdlKSkge1xuXHRcdFx0XHRcdC8vIHByb2Nlc3MgYXJyYXkgb2YgaW1hZ2VzIGUuZy4gQ3ViZVRleHR1cmVcblx0XHRcdFx0XHR1cmwgPSBbXTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gaW1hZ2UubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQvLyBjaGVjayBjdWJlIHRleHR1cmUgd2l0aCBkYXRhIHRleHR1cmVzXG5cdFx0XHRcdFx0XHRpZiAoaW1hZ2VbaV0uaXNEYXRhVGV4dHVyZSkge1xuXHRcdFx0XHRcdFx0XHR1cmwucHVzaChzZXJpYWxpemVJbWFnZShpbWFnZVtpXS5pbWFnZSkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dXJsLnB1c2goc2VyaWFsaXplSW1hZ2UoaW1hZ2VbaV0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcHJvY2VzcyBzaW5nbGUgaW1hZ2Vcblx0XHRcdFx0XHR1cmwgPSBzZXJpYWxpemVJbWFnZShpbWFnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtZXRhLmltYWdlc1tpbWFnZS51dWlkXSA9IHtcblx0XHRcdFx0XHR1dWlkOiBpbWFnZS51dWlkLFxuXHRcdFx0XHRcdHVybDogdXJsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdG91dHB1dC5pbWFnZSA9IGltYWdlLnV1aWQ7XG5cdFx0fVxuXG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpICE9PSAne30nKSBvdXRwdXQudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhO1xuXG5cdFx0aWYgKCFpc1Jvb3RPYmplY3QpIHtcblx0XHRcdG1ldGEudGV4dHVyZXNbdGhpcy51dWlkXSA9IG91dHB1dDtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0dHlwZTogJ2Rpc3Bvc2UnXG5cdFx0fSk7XG5cdH1cblxuXHR0cmFuc2Zvcm1Vdih1dikge1xuXHRcdGlmICh0aGlzLm1hcHBpbmcgIT09IFVWTWFwcGluZykgcmV0dXJuIHV2O1xuXHRcdHV2LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCk7XG5cblx0XHRpZiAodXYueCA8IDAgfHwgdXYueCA+IDEpIHtcblx0XHRcdHN3aXRjaCAodGhpcy53cmFwUykge1xuXHRcdFx0XHRjYXNlIFJlcGVhdFdyYXBwaW5nOlxuXHRcdFx0XHRcdHV2LnggPSB1di54IC0gTWF0aC5mbG9vcih1di54KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENsYW1wVG9FZGdlV3JhcHBpbmc6XG5cdFx0XHRcdFx0dXYueCA9IHV2LnggPCAwID8gMCA6IDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOlxuXHRcdFx0XHRcdGlmIChNYXRoLmFicyhNYXRoLmZsb29yKHV2LngpICUgMikgPT09IDEpIHtcblx0XHRcdFx0XHRcdHV2LnggPSBNYXRoLmNlaWwodXYueCkgLSB1di54O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR1di54ID0gdXYueCAtIE1hdGguZmxvb3IodXYueCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHV2LnkgPCAwIHx8IHV2LnkgPiAxKSB7XG5cdFx0XHRzd2l0Y2ggKHRoaXMud3JhcFQpIHtcblx0XHRcdFx0Y2FzZSBSZXBlYXRXcmFwcGluZzpcblx0XHRcdFx0XHR1di55ID0gdXYueSAtIE1hdGguZmxvb3IodXYueSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOlxuXHRcdFx0XHRcdHV2LnkgPSB1di55IDwgMCA/IDAgOiAxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgTWlycm9yZWRSZXBlYXRXcmFwcGluZzpcblx0XHRcdFx0XHRpZiAoTWF0aC5hYnMoTWF0aC5mbG9vcih1di55KSAlIDIpID09PSAxKSB7XG5cdFx0XHRcdFx0XHR1di55ID0gTWF0aC5jZWlsKHV2LnkpIC0gdXYueTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dXYueSA9IHV2LnkgLSBNYXRoLmZsb29yKHV2LnkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZsaXBZKSB7XG5cdFx0XHR1di55ID0gMSAtIHV2Lnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHV2O1xuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSB0cnVlKSB0aGlzLnZlcnNpb24rKztcblx0fVxuXG59XG5cblRleHR1cmUuREVGQVVMVF9JTUFHRSA9IHVuZGVmaW5lZDtcblRleHR1cmUuREVGQVVMVF9NQVBQSU5HID0gVVZNYXBwaW5nO1xuVGV4dHVyZS5wcm90b3R5cGUuaXNUZXh0dXJlID0gdHJ1ZTtcblxuZnVuY3Rpb24gc2VyaWFsaXplSW1hZ2UoaW1hZ2UpIHtcblx0aWYgKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgdHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkge1xuXHRcdC8vIGRlZmF1bHQgaW1hZ2VzXG5cdFx0cmV0dXJuIEltYWdlVXRpbHMuZ2V0RGF0YVVSTChpbWFnZSk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGltYWdlLmRhdGEpIHtcblx0XHRcdC8vIGltYWdlcyBvZiBEYXRhVGV4dHVyZVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW1hZ2UuZGF0YSksXG5cdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHQsXG5cdFx0XHRcdHR5cGU6IGltYWdlLmRhdGEuY29uc3RydWN0b3IubmFtZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuJyk7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHR9XG59XG5cbmNsYXNzIFZlY3RvcjQge1xuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMSkge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXHRcdHRoaXMudyA9IHc7XG5cdH1cblxuXHRnZXQgd2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuejtcblx0fVxuXG5cdHNldCB3aWR0aCh2YWx1ZSkge1xuXHRcdHRoaXMueiA9IHZhbHVlO1xuXHR9XG5cblx0Z2V0IGhlaWdodCgpIHtcblx0XHRyZXR1cm4gdGhpcy53O1xuXHR9XG5cblx0c2V0IGhlaWdodCh2YWx1ZSkge1xuXHRcdHRoaXMudyA9IHZhbHVlO1xuXHR9XG5cblx0c2V0KHgsIHksIHosIHcpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblx0XHR0aGlzLncgPSB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0dGhpcy56ID0gc2NhbGFyO1xuXHRcdHRoaXMudyA9IHNjYWxhcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFgoeCkge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRZKHkpIHtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Wih6KSB7XG5cdFx0dGhpcy56ID0gejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFcodykge1xuXHRcdHRoaXMudyA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb21wb25lbnQoaW5kZXgsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHR0aGlzLnggPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGhpcy55ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHRoaXMueiA9IHZhbHVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHR0aGlzLncgPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29tcG9uZW50KGluZGV4KSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy54O1xuXG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiB0aGlzLnk7XG5cblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuejtcblxuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy53O1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4KTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTtcblx0fVxuXG5cdGNvcHkodikge1xuXHRcdHRoaXMueCA9IHYueDtcblx0XHR0aGlzLnkgPSB2Lnk7XG5cdFx0dGhpcy56ID0gdi56O1xuXHRcdHRoaXMudyA9IHYudyAhPT0gdW5kZWZpbmVkID8gdi53IDogMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZCh2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblx0XHR0aGlzLnogKz0gdi56O1xuXHRcdHRoaXMudyArPSB2Lnc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRTY2FsYXIocykge1xuXHRcdHRoaXMueCArPSBzO1xuXHRcdHRoaXMueSArPSBzO1xuXHRcdHRoaXMueiArPSBzO1xuXHRcdHRoaXMudyArPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkVmVjdG9ycyhhLCBiKSB7XG5cdFx0dGhpcy54ID0gYS54ICsgYi54O1xuXHRcdHRoaXMueSA9IGEueSArIGIueTtcblx0XHR0aGlzLnogPSBhLnogKyBiLno7XG5cdFx0dGhpcy53ID0gYS53ICsgYi53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKHYsIHMpIHtcblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblx0XHR0aGlzLnogKz0gdi56ICogcztcblx0XHR0aGlzLncgKz0gdi53ICogcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1Yih2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblx0XHR0aGlzLnogLT0gdi56O1xuXHRcdHRoaXMudyAtPSB2Lnc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWJTY2FsYXIocykge1xuXHRcdHRoaXMueCAtPSBzO1xuXHRcdHRoaXMueSAtPSBzO1xuXHRcdHRoaXMueiAtPSBzO1xuXHRcdHRoaXMudyAtPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViVmVjdG9ycyhhLCBiKSB7XG5cdFx0dGhpcy54ID0gYS54IC0gYi54O1xuXHRcdHRoaXMueSA9IGEueSAtIGIueTtcblx0XHR0aGlzLnogPSBhLnogLSBiLno7XG5cdFx0dGhpcy53ID0gYS53IC0gYi53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHkodikge1xuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHR0aGlzLnogKj0gdi56O1xuXHRcdHRoaXMudyAqPSB2Lnc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseVNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblx0XHR0aGlzLncgKj0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG0pIHtcblx0XHRjb25zdCB4ID0gdGhpcy54LFxuXHRcdFx0XHRcdHkgPSB0aGlzLnksXG5cdFx0XHRcdFx0eiA9IHRoaXMueixcblx0XHRcdFx0XHR3ID0gdGhpcy53O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXHRcdHRoaXMueCA9IGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogeiArIGVbMTJdICogdztcblx0XHR0aGlzLnkgPSBlWzFdICogeCArIGVbNV0gKiB5ICsgZVs5XSAqIHogKyBlWzEzXSAqIHc7XG5cdFx0dGhpcy56ID0gZVsyXSAqIHggKyBlWzZdICogeSArIGVbMTBdICogeiArIGVbMTRdICogdztcblx0XHR0aGlzLncgPSBlWzNdICogeCArIGVbN10gKiB5ICsgZVsxMV0gKiB6ICsgZVsxNV0gKiB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKHNjYWxhcikge1xuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEgLyBzY2FsYXIpO1xuXHR9XG5cblx0c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24ocSkge1xuXHRcdC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9xdWF0ZXJuaW9uVG9BbmdsZS9pbmRleC5odG1cblx0XHQvLyBxIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXHRcdHRoaXMudyA9IDIgKiBNYXRoLmFjb3MocS53KTtcblx0XHRjb25zdCBzID0gTWF0aC5zcXJ0KDEgLSBxLncgKiBxLncpO1xuXG5cdFx0aWYgKHMgPCAwLjAwMDEpIHtcblx0XHRcdHRoaXMueCA9IDE7XG5cdFx0XHR0aGlzLnkgPSAwO1xuXHRcdFx0dGhpcy56ID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy54ID0gcS54IC8gcztcblx0XHRcdHRoaXMueSA9IHEueSAvIHM7XG5cdFx0XHR0aGlzLnogPSBxLnogLyBzO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KG0pIHtcblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9BbmdsZS9pbmRleC5odG1cblx0XHQvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxuXHRcdGxldCBhbmdsZSwgeCwgeSwgejsgLy8gdmFyaWFibGVzIGZvciByZXN1bHRcblxuXHRcdGNvbnN0IGVwc2lsb24gPSAwLjAxLFxuXHRcdFx0XHRcdC8vIG1hcmdpbiB0byBhbGxvdyBmb3Igcm91bmRpbmcgZXJyb3JzXG5cdFx0ZXBzaWxvbjIgPSAwLjEsXG5cdFx0XHRcdFx0Ly8gbWFyZ2luIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gMCBhbmQgMTgwIGRlZ3JlZXNcblx0XHR0ZSA9IG0uZWxlbWVudHMsXG5cdFx0XHRcdFx0bTExID0gdGVbMF0sXG5cdFx0XHRcdFx0bTEyID0gdGVbNF0sXG5cdFx0XHRcdFx0bTEzID0gdGVbOF0sXG5cdFx0XHRcdFx0bTIxID0gdGVbMV0sXG5cdFx0XHRcdFx0bTIyID0gdGVbNV0sXG5cdFx0XHRcdFx0bTIzID0gdGVbOV0sXG5cdFx0XHRcdFx0bTMxID0gdGVbMl0sXG5cdFx0XHRcdFx0bTMyID0gdGVbNl0sXG5cdFx0XHRcdFx0bTMzID0gdGVbMTBdO1xuXG5cdFx0aWYgKE1hdGguYWJzKG0xMiAtIG0yMSkgPCBlcHNpbG9uICYmIE1hdGguYWJzKG0xMyAtIG0zMSkgPCBlcHNpbG9uICYmIE1hdGguYWJzKG0yMyAtIG0zMikgPCBlcHNpbG9uKSB7XG5cdFx0XHQvLyBzaW5ndWxhcml0eSBmb3VuZFxuXHRcdFx0Ly8gZmlyc3QgY2hlY2sgZm9yIGlkZW50aXR5IG1hdHJpeCB3aGljaCBtdXN0IGhhdmUgKzEgZm9yIGFsbCB0ZXJtc1xuXHRcdFx0Ly8gaW4gbGVhZGluZyBkaWFnb25hbCBhbmQgemVybyBpbiBvdGhlciB0ZXJtc1xuXHRcdFx0aWYgKE1hdGguYWJzKG0xMiArIG0yMSkgPCBlcHNpbG9uMiAmJiBNYXRoLmFicyhtMTMgKyBtMzEpIDwgZXBzaWxvbjIgJiYgTWF0aC5hYnMobTIzICsgbTMyKSA8IGVwc2lsb24yICYmIE1hdGguYWJzKG0xMSArIG0yMiArIG0zMyAtIDMpIDwgZXBzaWxvbjIpIHtcblx0XHRcdFx0Ly8gdGhpcyBzaW5ndWxhcml0eSBpcyBpZGVudGl0eSBtYXRyaXggc28gYW5nbGUgPSAwXG5cdFx0XHRcdHRoaXMuc2V0KDEsIDAsIDAsIDApO1xuXHRcdFx0XHRyZXR1cm4gdGhpczsgLy8gemVybyBhbmdsZSwgYXJiaXRyYXJ5IGF4aXNcblx0XHRcdH0gLy8gb3RoZXJ3aXNlIHRoaXMgc2luZ3VsYXJpdHkgaXMgYW5nbGUgPSAxODBcblxuXG5cdFx0XHRhbmdsZSA9IE1hdGguUEk7XG5cdFx0XHRjb25zdCB4eCA9IChtMTEgKyAxKSAvIDI7XG5cdFx0XHRjb25zdCB5eSA9IChtMjIgKyAxKSAvIDI7XG5cdFx0XHRjb25zdCB6eiA9IChtMzMgKyAxKSAvIDI7XG5cdFx0XHRjb25zdCB4eSA9IChtMTIgKyBtMjEpIC8gNDtcblx0XHRcdGNvbnN0IHh6ID0gKG0xMyArIG0zMSkgLyA0O1xuXHRcdFx0Y29uc3QgeXogPSAobTIzICsgbTMyKSAvIDQ7XG5cblx0XHRcdGlmICh4eCA+IHl5ICYmIHh4ID4genopIHtcblx0XHRcdFx0Ly8gbTExIGlzIHRoZSBsYXJnZXN0IGRpYWdvbmFsIHRlcm1cblx0XHRcdFx0aWYgKHh4IDwgZXBzaWxvbikge1xuXHRcdFx0XHRcdHggPSAwO1xuXHRcdFx0XHRcdHkgPSAwLjcwNzEwNjc4MTtcblx0XHRcdFx0XHR6ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eCA9IE1hdGguc3FydCh4eCk7XG5cdFx0XHRcdFx0eSA9IHh5IC8geDtcblx0XHRcdFx0XHR6ID0geHogLyB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHl5ID4genopIHtcblx0XHRcdFx0Ly8gbTIyIGlzIHRoZSBsYXJnZXN0IGRpYWdvbmFsIHRlcm1cblx0XHRcdFx0aWYgKHl5IDwgZXBzaWxvbikge1xuXHRcdFx0XHRcdHggPSAwLjcwNzEwNjc4MTtcblx0XHRcdFx0XHR5ID0gMDtcblx0XHRcdFx0XHR6ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eSA9IE1hdGguc3FydCh5eSk7XG5cdFx0XHRcdFx0eCA9IHh5IC8geTtcblx0XHRcdFx0XHR6ID0geXogLyB5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBtMzMgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybSBzbyBiYXNlIHJlc3VsdCBvbiB0aGlzXG5cdFx0XHRcdGlmICh6eiA8IGVwc2lsb24pIHtcblx0XHRcdFx0XHR4ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eSA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHRcdHogPSAwO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHogPSBNYXRoLnNxcnQoenopO1xuXHRcdFx0XHRcdHggPSB4eiAvIHo7XG5cdFx0XHRcdFx0eSA9IHl6IC8gejtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldCh4LCB5LCB6LCBhbmdsZSk7XG5cdFx0XHRyZXR1cm4gdGhpczsgLy8gcmV0dXJuIDE4MCBkZWcgcm90YXRpb25cblx0XHR9IC8vIGFzIHdlIGhhdmUgcmVhY2hlZCBoZXJlIHRoZXJlIGFyZSBubyBzaW5ndWxhcml0aWVzIHNvIHdlIGNhbiBoYW5kbGUgbm9ybWFsbHlcblxuXG5cdFx0bGV0IHMgPSBNYXRoLnNxcnQoKG0zMiAtIG0yMykgKiAobTMyIC0gbTIzKSArIChtMTMgLSBtMzEpICogKG0xMyAtIG0zMSkgKyAobTIxIC0gbTEyKSAqIChtMjEgLSBtMTIpKTsgLy8gdXNlZCB0byBub3JtYWxpemVcblxuXHRcdGlmIChNYXRoLmFicyhzKSA8IDAuMDAxKSBzID0gMTsgLy8gcHJldmVudCBkaXZpZGUgYnkgemVybywgc2hvdWxkIG5vdCBoYXBwZW4gaWYgbWF0cml4IGlzIG9ydGhvZ29uYWwgYW5kIHNob3VsZCBiZVxuXHRcdC8vIGNhdWdodCBieSBzaW5ndWxhcml0eSB0ZXN0IGFib3ZlLCBidXQgSSd2ZSBsZWZ0IGl0IGluIGp1c3QgaW4gY2FzZVxuXG5cdFx0dGhpcy54ID0gKG0zMiAtIG0yMykgLyBzO1xuXHRcdHRoaXMueSA9IChtMTMgLSBtMzEpIC8gcztcblx0XHR0aGlzLnogPSAobTIxIC0gbTEyKSAvIHM7XG5cdFx0dGhpcy53ID0gTWF0aC5hY29zKChtMTEgKyBtMjIgKyBtMzMgLSAxKSAvIDIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWluKHYpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1pbih0aGlzLngsIHYueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5taW4odGhpcy55LCB2LnkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWluKHRoaXMueiwgdi56KTtcblx0XHR0aGlzLncgPSBNYXRoLm1pbih0aGlzLncsIHYudyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYXgodikge1xuXHRcdHRoaXMueCA9IE1hdGgubWF4KHRoaXMueCwgdi54KTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCh0aGlzLnksIHYueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgodGhpcy56LCB2LnopO1xuXHRcdHRoaXMudyA9IE1hdGgubWF4KHRoaXMudywgdi53KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsYW1wKG1pbiwgbWF4KSB7XG5cdFx0Ly8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVudHdpc2Vcblx0XHR0aGlzLnggPSBNYXRoLm1heChtaW4ueCwgTWF0aC5taW4obWF4LngsIHRoaXMueCkpO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KG1pbi55LCBNYXRoLm1pbihtYXgueSwgdGhpcy55KSk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgobWluLnosIE1hdGgubWluKG1heC56LCB0aGlzLnopKTtcblx0XHR0aGlzLncgPSBNYXRoLm1heChtaW4udywgTWF0aC5taW4obWF4LncsIHRoaXMudykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBTY2FsYXIobWluVmFsLCBtYXhWYWwpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy54KSk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMueSkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KG1pblZhbCwgTWF0aC5taW4obWF4VmFsLCB0aGlzLnopKTtcblx0XHR0aGlzLncgPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy53KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcExlbmd0aChtaW4sIG1heCkge1xuXHRcdGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGxlbmd0aCB8fCAxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgbGVuZ3RoKSkpO1xuXHR9XG5cblx0Zmxvb3IoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5mbG9vcih0aGlzLngpO1xuXHRcdHRoaXMueSA9IE1hdGguZmxvb3IodGhpcy55KTtcblx0XHR0aGlzLnogPSBNYXRoLmZsb29yKHRoaXMueik7XG5cdFx0dGhpcy53ID0gTWF0aC5mbG9vcih0aGlzLncpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2VpbCgpIHtcblx0XHR0aGlzLnggPSBNYXRoLmNlaWwodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLmNlaWwodGhpcy55KTtcblx0XHR0aGlzLnogPSBNYXRoLmNlaWwodGhpcy56KTtcblx0XHR0aGlzLncgPSBNYXRoLmNlaWwodGhpcy53KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdW5kKCkge1xuXHRcdHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5yb3VuZCh0aGlzLnopO1xuXHRcdHRoaXMudyA9IE1hdGgucm91bmQodGhpcy53KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdW5kVG9aZXJvKCkge1xuXHRcdHRoaXMueCA9IHRoaXMueCA8IDAgPyBNYXRoLmNlaWwodGhpcy54KSA6IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSB0aGlzLnkgPCAwID8gTWF0aC5jZWlsKHRoaXMueSkgOiBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gdGhpcy56IDwgMCA/IE1hdGguY2VpbCh0aGlzLnopIDogTWF0aC5mbG9vcih0aGlzLnopO1xuXHRcdHRoaXMudyA9IHRoaXMudyA8IDAgPyBNYXRoLmNlaWwodGhpcy53KSA6IE1hdGguZmxvb3IodGhpcy53KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG5lZ2F0ZSgpIHtcblx0XHR0aGlzLnggPSAtdGhpcy54O1xuXHRcdHRoaXMueSA9IC10aGlzLnk7XG5cdFx0dGhpcy56ID0gLXRoaXMuejtcblx0XHR0aGlzLncgPSAtdGhpcy53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZG90KHYpIHtcblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56ICsgdGhpcy53ICogdi53O1xuXHR9XG5cblx0bGVuZ3RoU3EoKSB7XG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRoaXMudztcblx0fVxuXG5cdGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRoaXMudyk7XG5cdH1cblxuXHRtYW5oYXR0YW5MZW5ndGgoKSB7XG5cdFx0cmV0dXJuIE1hdGguYWJzKHRoaXMueCkgKyBNYXRoLmFicyh0aGlzLnkpICsgTWF0aC5hYnModGhpcy56KSArIE1hdGguYWJzKHRoaXMudyk7XG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkgfHwgMSk7XG5cdH1cblxuXHRzZXRMZW5ndGgobGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuZ3RoKTtcblx0fVxuXG5cdGxlcnAodiwgYWxwaGEpIHtcblx0XHR0aGlzLnggKz0gKHYueCAtIHRoaXMueCkgKiBhbHBoYTtcblx0XHR0aGlzLnkgKz0gKHYueSAtIHRoaXMueSkgKiBhbHBoYTtcblx0XHR0aGlzLnogKz0gKHYueiAtIHRoaXMueikgKiBhbHBoYTtcblx0XHR0aGlzLncgKz0gKHYudyAtIHRoaXMudykgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnBWZWN0b3JzKHYxLCB2MiwgYWxwaGEpIHtcblx0XHR0aGlzLnggPSB2MS54ICsgKHYyLnggLSB2MS54KSAqIGFscGhhO1xuXHRcdHRoaXMueSA9IHYxLnkgKyAodjIueSAtIHYxLnkpICogYWxwaGE7XG5cdFx0dGhpcy56ID0gdjEueiArICh2Mi56IC0gdjEueikgKiBhbHBoYTtcblx0XHR0aGlzLncgPSB2MS53ICsgKHYyLncgLSB2MS53KSAqIGFscGhhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKHYpIHtcblx0XHRyZXR1cm4gdi54ID09PSB0aGlzLnggJiYgdi55ID09PSB0aGlzLnkgJiYgdi56ID09PSB0aGlzLnogJiYgdi53ID09PSB0aGlzLnc7XG5cdH1cblxuXHRmcm9tQXJyYXkoYXJyYXksIG9mZnNldCA9IDApIHtcblx0XHR0aGlzLnggPSBhcnJheVtvZmZzZXRdO1xuXHRcdHRoaXMueSA9IGFycmF5W29mZnNldCArIDFdO1xuXHRcdHRoaXMueiA9IGFycmF5W29mZnNldCArIDJdO1xuXHRcdHRoaXMudyA9IGFycmF5W29mZnNldCArIDNdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9BcnJheShhcnJheSA9IFtdLCBvZmZzZXQgPSAwKSB7XG5cdFx0YXJyYXlbb2Zmc2V0XSA9IHRoaXMueDtcblx0XHRhcnJheVtvZmZzZXQgKyAxXSA9IHRoaXMueTtcblx0XHRhcnJheVtvZmZzZXQgKyAyXSA9IHRoaXMuejtcblx0XHRhcnJheVtvZmZzZXQgKyAzXSA9IHRoaXMudztcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCkge1xuXHRcdGlmIChvZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoaW5kZXgpO1xuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WihpbmRleCk7XG5cdFx0dGhpcy53ID0gYXR0cmlidXRlLmdldFcoaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmFuZG9tKCkge1xuXHRcdHRoaXMueCA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnogPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMudyA9IE1hdGgucmFuZG9tKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0eWllbGQgdGhpcy54O1xuXHRcdHlpZWxkIHRoaXMueTtcblx0XHR5aWVsZCB0aGlzLno7XG5cdFx0eWllbGQgdGhpcy53O1xuXHR9XG5cbn1cblxuVmVjdG9yNC5wcm90b3R5cGUuaXNWZWN0b3I0ID0gdHJ1ZTtcblxuLypcbiBJbiBvcHRpb25zLCB3ZSBjYW4gc3BlY2lmeTpcbiAqIFRleHR1cmUgcGFyYW1ldGVycyBmb3IgYW4gYXV0by1nZW5lcmF0ZWQgdGFyZ2V0IHRleHR1cmVcbiAqIGRlcHRoQnVmZmVyL3N0ZW5jaWxCdWZmZXI6IEJvb2xlYW5zIHRvIGluZGljYXRlIGlmIHdlIHNob3VsZCBnZW5lcmF0ZSB0aGVzZSBidWZmZXJzXG4qL1xuXG5jbGFzcyBXZWJHTFJlbmRlclRhcmdldCBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdHRoaXMuZGVwdGggPSAxO1xuXHRcdHRoaXMuc2Npc3NvciA9IG5ldyBWZWN0b3I0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMuc2Npc3NvclRlc3QgPSBmYWxzZTtcblx0XHR0aGlzLnZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcy50ZXh0dXJlID0gbmV3IFRleHR1cmUodW5kZWZpbmVkLCBvcHRpb25zLm1hcHBpbmcsIG9wdGlvbnMud3JhcFMsIG9wdGlvbnMud3JhcFQsIG9wdGlvbnMubWFnRmlsdGVyLCBvcHRpb25zLm1pbkZpbHRlciwgb3B0aW9ucy5mb3JtYXQsIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5hbmlzb3Ryb3B5LCBvcHRpb25zLmVuY29kaW5nKTtcblx0XHR0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID0gdHJ1ZTtcblx0XHR0aGlzLnRleHR1cmUuaW1hZ2UgPSB7XG5cdFx0XHR3aWR0aDogd2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdGRlcHRoOiAxXG5cdFx0fTtcblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzIDogZmFsc2U7XG5cdFx0dGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0ID0gb3B0aW9ucy5pbnRlcm5hbEZvcm1hdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcm5hbEZvcm1hdCA6IG51bGw7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IG9wdGlvbnMubWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHR0aGlzLmRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aEJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aEJ1ZmZlciA6IHRydWU7XG5cdFx0dGhpcy5zdGVuY2lsQnVmZmVyID0gb3B0aW9ucy5zdGVuY2lsQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgOiBmYWxzZTtcblx0XHR0aGlzLmRlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoVGV4dHVyZSA6IG51bGw7XG5cdH1cblxuXHRzZXRUZXh0dXJlKHRleHR1cmUpIHtcblx0XHR0ZXh0dXJlLmltYWdlID0ge1xuXHRcdFx0d2lkdGg6IHRoaXMud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuXHRcdFx0ZGVwdGg6IHRoaXMuZGVwdGhcblx0XHR9O1xuXHRcdHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cdH1cblxuXHRzZXRTaXplKHdpZHRoLCBoZWlnaHQsIGRlcHRoID0gMSkge1xuXHRcdGlmICh0aGlzLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuZGVwdGggIT09IGRlcHRoKSB7XG5cdFx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdHRoaXMuZGVwdGggPSBkZXB0aDtcblx0XHRcdHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0dGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aCA9IGRlcHRoO1xuXHRcdFx0dGhpcy5kaXNwb3NlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3cG9ydC5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcy5zY2lzc29yLnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXHRcdHRoaXMuZGVwdGggPSBzb3VyY2UuZGVwdGg7XG5cdFx0dGhpcy52aWV3cG9ydC5jb3B5KHNvdXJjZS52aWV3cG9ydCk7XG5cdFx0dGhpcy50ZXh0dXJlID0gc291cmNlLnRleHR1cmUuY2xvbmUoKTsgLy8gZW5zdXJlIGltYWdlIG9iamVjdCBpcyBub3Qgc2hhcmVkLCBzZWUgIzIwMzI4XG5cblx0XHR0aGlzLnRleHR1cmUuaW1hZ2UgPSBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UudGV4dHVyZS5pbWFnZSk7XG5cdFx0dGhpcy5kZXB0aEJ1ZmZlciA9IHNvdXJjZS5kZXB0aEJ1ZmZlcjtcblx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIgPSBzb3VyY2Uuc3RlbmNpbEJ1ZmZlcjtcblx0XHR0aGlzLmRlcHRoVGV4dHVyZSA9IHNvdXJjZS5kZXB0aFRleHR1cmU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHR0eXBlOiAnZGlzcG9zZSdcblx0XHR9KTtcblx0fVxuXG59XG5cbldlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0ID0gdHJ1ZTtcblxuY2xhc3MgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgZXh0ZW5kcyBXZWJHTFJlbmRlclRhcmdldCB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIGNvdW50KSB7XG5cdFx0c3VwZXIod2lkdGgsIGhlaWdodCk7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblx0XHR0aGlzLnRleHR1cmUgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dGhpcy50ZXh0dXJlW2ldID0gdGV4dHVyZS5jbG9uZSgpO1xuXHRcdH1cblx0fVxuXG5cdHNldFNpemUod2lkdGgsIGhlaWdodCwgZGVwdGggPSAxKSB7XG5cdFx0aWYgKHRoaXMud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuaGVpZ2h0ICE9PSBoZWlnaHQgfHwgdGhpcy5kZXB0aCAhPT0gZGVwdGgpIHtcblx0XHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdFx0dGhpcy5kZXB0aCA9IGRlcHRoO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0aGlzLnRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHR0aGlzLnRleHR1cmVbaV0uaW1hZ2Uud2lkdGggPSB3aWR0aDtcblx0XHRcdFx0dGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdFx0dGhpcy50ZXh0dXJlW2ldLmltYWdlLmRlcHRoID0gZGVwdGg7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGlzcG9zZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMudmlld3BvcnQuc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMuc2Npc3Nvci5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHRoaXMuZGlzcG9zZSgpO1xuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXHRcdHRoaXMuZGVwdGggPSBzb3VyY2UuZGVwdGg7XG5cdFx0dGhpcy52aWV3cG9ydC5zZXQoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcdHRoaXMuc2Npc3Nvci5zZXQoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcdHRoaXMuZGVwdGhCdWZmZXIgPSBzb3VyY2UuZGVwdGhCdWZmZXI7XG5cdFx0dGhpcy5zdGVuY2lsQnVmZmVyID0gc291cmNlLnN0ZW5jaWxCdWZmZXI7XG5cdFx0dGhpcy5kZXB0aFRleHR1cmUgPSBzb3VyY2UuZGVwdGhUZXh0dXJlO1xuXHRcdHRoaXMudGV4dHVyZS5sZW5ndGggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gc291cmNlLnRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0dGhpcy50ZXh0dXJlW2ldID0gc291cmNlLnRleHR1cmVbaV0uY2xvbmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbldlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID0gdHJ1ZTtcblxuY2xhc3MgV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBleHRlbmRzIFdlYkdMUmVuZGVyVGFyZ2V0IHtcblx0Y29uc3RydWN0b3Iod2lkdGgsIGhlaWdodCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cdFx0dGhpcy5zYW1wbGVzID0gNDtcblx0XHR0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5ID0gb3B0aW9ucy5pZ25vcmVEZXB0aCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pZ25vcmVEZXB0aCA6IHRydWU7XG5cdFx0dGhpcy51c2VSZW5kZXJUb1RleHR1cmUgPSBvcHRpb25zLnVzZVJlbmRlclRvVGV4dHVyZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51c2VSZW5kZXJUb1RleHR1cmUgOiBmYWxzZTtcblx0XHR0aGlzLnVzZVJlbmRlcmJ1ZmZlciA9IHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlID09PSBmYWxzZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weS5jYWxsKHRoaXMsIHNvdXJjZSk7XG5cdFx0dGhpcy5zYW1wbGVzID0gc291cmNlLnNhbXBsZXM7XG5cdFx0dGhpcy51c2VSZW5kZXJUb1RleHR1cmUgPSBzb3VyY2UudXNlUmVuZGVyVG9UZXh0dXJlO1xuXHRcdHRoaXMudXNlUmVuZGVyYnVmZmVyID0gc291cmNlLnVzZVJlbmRlcmJ1ZmZlcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA9IHRydWU7XG5cbmNsYXNzIFF1YXRlcm5pb24ge1xuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMSkge1xuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX3cgPSB3O1xuXHR9XG5cblx0c3RhdGljIHNsZXJwKHFhLCBxYiwgcW0sIHQpIHtcblx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4nKTtcblx0XHRyZXR1cm4gcW0uc2xlcnBRdWF0ZXJuaW9ucyhxYSwgcWIsIHQpO1xuXHR9XG5cblx0c3RhdGljIHNsZXJwRmxhdChkc3QsIGRzdE9mZnNldCwgc3JjMCwgc3JjT2Zmc2V0MCwgc3JjMSwgc3JjT2Zmc2V0MSwgdCkge1xuXHRcdC8vIGZ1enotZnJlZSwgYXJyYXktYmFzZWQgUXVhdGVybmlvbiBTTEVSUCBvcGVyYXRpb25cblx0XHRsZXQgeDAgPSBzcmMwW3NyY09mZnNldDAgKyAwXSxcblx0XHRcdFx0eTAgPSBzcmMwW3NyY09mZnNldDAgKyAxXSxcblx0XHRcdFx0ejAgPSBzcmMwW3NyY09mZnNldDAgKyAyXSxcblx0XHRcdFx0dzAgPSBzcmMwW3NyY09mZnNldDAgKyAzXTtcblx0XHRjb25zdCB4MSA9IHNyYzFbc3JjT2Zmc2V0MSArIDBdLFxuXHRcdFx0XHRcdHkxID0gc3JjMVtzcmNPZmZzZXQxICsgMV0sXG5cdFx0XHRcdFx0ejEgPSBzcmMxW3NyY09mZnNldDEgKyAyXSxcblx0XHRcdFx0XHR3MSA9IHNyYzFbc3JjT2Zmc2V0MSArIDNdO1xuXG5cdFx0aWYgKHQgPT09IDApIHtcblx0XHRcdGRzdFtkc3RPZmZzZXQgKyAwXSA9IHgwO1xuXHRcdFx0ZHN0W2RzdE9mZnNldCArIDFdID0geTA7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgMl0gPSB6MDtcblx0XHRcdGRzdFtkc3RPZmZzZXQgKyAzXSA9IHcwO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0ID09PSAxKSB7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgMF0gPSB4MTtcblx0XHRcdGRzdFtkc3RPZmZzZXQgKyAxXSA9IHkxO1xuXHRcdFx0ZHN0W2RzdE9mZnNldCArIDJdID0gejE7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgM10gPSB3MTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodzAgIT09IHcxIHx8IHgwICE9PSB4MSB8fCB5MCAhPT0geTEgfHwgejAgIT09IHoxKSB7XG5cdFx0XHRsZXQgcyA9IDEgLSB0O1xuXHRcdFx0Y29uc3QgY29zID0geDAgKiB4MSArIHkwICogeTEgKyB6MCAqIHoxICsgdzAgKiB3MSxcblx0XHRcdFx0XHRcdGRpciA9IGNvcyA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0c3FyU2luID0gMSAtIGNvcyAqIGNvczsgLy8gU2tpcCB0aGUgU2xlcnAgZm9yIHRpbnkgc3RlcHMgdG8gYXZvaWQgbnVtZXJpYyBwcm9ibGVtczpcblxuXHRcdFx0aWYgKHNxclNpbiA+IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdGNvbnN0IHNpbiA9IE1hdGguc3FydChzcXJTaW4pLFxuXHRcdFx0XHRcdFx0XHRsZW4gPSBNYXRoLmF0YW4yKHNpbiwgY29zICogZGlyKTtcblx0XHRcdFx0cyA9IE1hdGguc2luKHMgKiBsZW4pIC8gc2luO1xuXHRcdFx0XHR0ID0gTWF0aC5zaW4odCAqIGxlbikgLyBzaW47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHREaXIgPSB0ICogZGlyO1xuXHRcdFx0eDAgPSB4MCAqIHMgKyB4MSAqIHREaXI7XG5cdFx0XHR5MCA9IHkwICogcyArIHkxICogdERpcjtcblx0XHRcdHowID0gejAgKiBzICsgejEgKiB0RGlyO1xuXHRcdFx0dzAgPSB3MCAqIHMgKyB3MSAqIHREaXI7IC8vIE5vcm1hbGl6ZSBpbiBjYXNlIHdlIGp1c3QgZGlkIGEgbGVycDpcblxuXHRcdFx0aWYgKHMgPT09IDEgLSB0KSB7XG5cdFx0XHRcdGNvbnN0IGYgPSAxIC8gTWF0aC5zcXJ0KHgwICogeDAgKyB5MCAqIHkwICsgejAgKiB6MCArIHcwICogdzApO1xuXHRcdFx0XHR4MCAqPSBmO1xuXHRcdFx0XHR5MCAqPSBmO1xuXHRcdFx0XHR6MCAqPSBmO1xuXHRcdFx0XHR3MCAqPSBmO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRzdFtkc3RPZmZzZXRdID0geDA7XG5cdFx0ZHN0W2RzdE9mZnNldCArIDFdID0geTA7XG5cdFx0ZHN0W2RzdE9mZnNldCArIDJdID0gejA7XG5cdFx0ZHN0W2RzdE9mZnNldCArIDNdID0gdzA7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoZHN0LCBkc3RPZmZzZXQsIHNyYzAsIHNyY09mZnNldDAsIHNyYzEsIHNyY09mZnNldDEpIHtcblx0XHRjb25zdCB4MCA9IHNyYzBbc3JjT2Zmc2V0MF07XG5cdFx0Y29uc3QgeTAgPSBzcmMwW3NyY09mZnNldDAgKyAxXTtcblx0XHRjb25zdCB6MCA9IHNyYzBbc3JjT2Zmc2V0MCArIDJdO1xuXHRcdGNvbnN0IHcwID0gc3JjMFtzcmNPZmZzZXQwICsgM107XG5cdFx0Y29uc3QgeDEgPSBzcmMxW3NyY09mZnNldDFdO1xuXHRcdGNvbnN0IHkxID0gc3JjMVtzcmNPZmZzZXQxICsgMV07XG5cdFx0Y29uc3QgejEgPSBzcmMxW3NyY09mZnNldDEgKyAyXTtcblx0XHRjb25zdCB3MSA9IHNyYzFbc3JjT2Zmc2V0MSArIDNdO1xuXHRcdGRzdFtkc3RPZmZzZXRdID0geDAgKiB3MSArIHcwICogeDEgKyB5MCAqIHoxIC0gejAgKiB5MTtcblx0XHRkc3RbZHN0T2Zmc2V0ICsgMV0gPSB5MCAqIHcxICsgdzAgKiB5MSArIHowICogeDEgLSB4MCAqIHoxO1xuXHRcdGRzdFtkc3RPZmZzZXQgKyAyXSA9IHowICogdzEgKyB3MCAqIHoxICsgeDAgKiB5MSAtIHkwICogeDE7XG5cdFx0ZHN0W2RzdE9mZnNldCArIDNdID0gdzAgKiB3MSAtIHgwICogeDEgLSB5MCAqIHkxIC0gejAgKiB6MTtcblx0XHRyZXR1cm4gZHN0O1xuXHR9XG5cblx0Z2V0IHgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3g7XG5cdH1cblxuXHRzZXQgeCh2YWx1ZSkge1xuXHRcdHRoaXMuX3ggPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdGdldCB5KCkge1xuXHRcdHJldHVybiB0aGlzLl95O1xuXHR9XG5cblx0c2V0IHkodmFsdWUpIHtcblx0XHR0aGlzLl95ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRnZXQgeigpIHtcblx0XHRyZXR1cm4gdGhpcy5fejtcblx0fVxuXG5cdHNldCB6KHZhbHVlKSB7XG5cdFx0dGhpcy5feiA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXHR9XG5cblx0Z2V0IHcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3c7XG5cdH1cblxuXHRzZXQgdyh2YWx1ZSkge1xuXHRcdHRoaXMuX3cgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdHNldCh4LCB5LCB6LCB3KSB7XG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fdyA9IHc7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl93KTtcblx0fVxuXG5cdGNvcHkocXVhdGVybmlvbikge1xuXHRcdHRoaXMuX3ggPSBxdWF0ZXJuaW9uLng7XG5cdFx0dGhpcy5feSA9IHF1YXRlcm5pb24ueTtcblx0XHR0aGlzLl96ID0gcXVhdGVybmlvbi56O1xuXHRcdHRoaXMuX3cgPSBxdWF0ZXJuaW9uLnc7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21FdWxlcihldWxlciwgdXBkYXRlKSB7XG5cdFx0aWYgKCEoZXVsZXIgJiYgZXVsZXIuaXNFdWxlcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeCA9IGV1bGVyLl94LFxuXHRcdFx0XHRcdHkgPSBldWxlci5feSxcblx0XHRcdFx0XHR6ID0gZXVsZXIuX3osXG5cdFx0XHRcdFx0b3JkZXIgPSBldWxlci5fb3JkZXI7IC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cblx0XHQvLyBcdDIwNjk2LWZ1bmN0aW9uLXRvLWNvbnZlcnQtYmV0d2Vlbi1kY20tZXVsZXItYW5nbGVzLXF1YXRlcm5pb25zLWFuZC1ldWxlci12ZWN0b3JzL1xuXHRcdC8vXHRjb250ZW50L1NwaW5DYWxjLm1cblxuXHRcdGNvbnN0IGNvcyA9IE1hdGguY29zO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luO1xuXHRcdGNvbnN0IGMxID0gY29zKHggLyAyKTtcblx0XHRjb25zdCBjMiA9IGNvcyh5IC8gMik7XG5cdFx0Y29uc3QgYzMgPSBjb3MoeiAvIDIpO1xuXHRcdGNvbnN0IHMxID0gc2luKHggLyAyKTtcblx0XHRjb25zdCBzMiA9IHNpbih5IC8gMik7XG5cdFx0Y29uc3QgczMgPSBzaW4oeiAvIDIpO1xuXG5cdFx0c3dpdGNoIChvcmRlcikge1xuXHRcdFx0Y2FzZSAnWFlaJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1lYWic6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWFknOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWllYJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1laWCc6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdYWlknOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyKTtcblx0XHR9XG5cblx0XHRpZiAodXBkYXRlICE9PSBmYWxzZSkgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSkge1xuXHRcdC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9hbmdsZVRvUXVhdGVybmlvbi9pbmRleC5odG1cblx0XHQvLyBhc3N1bWVzIGF4aXMgaXMgbm9ybWFsaXplZFxuXHRcdGNvbnN0IGhhbGZBbmdsZSA9IGFuZ2xlIC8gMixcblx0XHRcdFx0XHRzID0gTWF0aC5zaW4oaGFsZkFuZ2xlKTtcblx0XHR0aGlzLl94ID0gYXhpcy54ICogcztcblx0XHR0aGlzLl95ID0gYXhpcy55ICogcztcblx0XHR0aGlzLl96ID0gYXhpcy56ICogcztcblx0XHR0aGlzLl93ID0gTWF0aC5jb3MoaGFsZkFuZ2xlKTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVJvdGF0aW9uTWF0cml4KG0pIHtcblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9RdWF0ZXJuaW9uL2luZGV4Lmh0bVxuXHRcdC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG5cdFx0Y29uc3QgdGUgPSBtLmVsZW1lbnRzLFxuXHRcdFx0XHRcdG0xMSA9IHRlWzBdLFxuXHRcdFx0XHRcdG0xMiA9IHRlWzRdLFxuXHRcdFx0XHRcdG0xMyA9IHRlWzhdLFxuXHRcdFx0XHRcdG0yMSA9IHRlWzFdLFxuXHRcdFx0XHRcdG0yMiA9IHRlWzVdLFxuXHRcdFx0XHRcdG0yMyA9IHRlWzldLFxuXHRcdFx0XHRcdG0zMSA9IHRlWzJdLFxuXHRcdFx0XHRcdG0zMiA9IHRlWzZdLFxuXHRcdFx0XHRcdG0zMyA9IHRlWzEwXSxcblx0XHRcdFx0XHR0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcblxuXHRcdGlmICh0cmFjZSA+IDApIHtcblx0XHRcdGNvbnN0IHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuXHRcdFx0dGhpcy5fdyA9IDAuMjUgLyBzO1xuXHRcdFx0dGhpcy5feCA9IChtMzIgLSBtMjMpICogcztcblx0XHRcdHRoaXMuX3kgPSAobTEzIC0gbTMxKSAqIHM7XG5cdFx0XHR0aGlzLl96ID0gKG0yMSAtIG0xMikgKiBzO1xuXHRcdH0gZWxzZSBpZiAobTExID4gbTIyICYmIG0xMSA+IG0zMykge1xuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMTEgLSBtMjIgLSBtMzMpO1xuXHRcdFx0dGhpcy5fdyA9IChtMzIgLSBtMjMpIC8gcztcblx0XHRcdHRoaXMuX3ggPSAwLjI1ICogcztcblx0XHRcdHRoaXMuX3kgPSAobTEyICsgbTIxKSAvIHM7XG5cdFx0XHR0aGlzLl96ID0gKG0xMyArIG0zMSkgLyBzO1xuXHRcdH0gZWxzZSBpZiAobTIyID4gbTMzKSB7XG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7XG5cdFx0XHR0aGlzLl93ID0gKG0xMyAtIG0zMSkgLyBzO1xuXHRcdFx0dGhpcy5feCA9IChtMTIgKyBtMjEpIC8gcztcblx0XHRcdHRoaXMuX3kgPSAwLjI1ICogcztcblx0XHRcdHRoaXMuX3ogPSAobTIzICsgbTMyKSAvIHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcblx0XHRcdHRoaXMuX3cgPSAobTIxIC0gbTEyKSAvIHM7XG5cdFx0XHR0aGlzLl94ID0gKG0xMyArIG0zMSkgLyBzO1xuXHRcdFx0dGhpcy5feSA9IChtMjMgKyBtMzIpIC8gcztcblx0XHRcdHRoaXMuX3ogPSAwLjI1ICogcztcblx0XHR9XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Vbml0VmVjdG9ycyh2RnJvbSwgdlRvKSB7XG5cdFx0Ly8gYXNzdW1lcyBkaXJlY3Rpb24gdmVjdG9ycyB2RnJvbSBhbmQgdlRvIGFyZSBub3JtYWxpemVkXG5cdFx0bGV0IHIgPSB2RnJvbS5kb3QodlRvKSArIDE7XG5cblx0XHRpZiAociA8IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHQvLyB2RnJvbSBhbmQgdlRvIHBvaW50IGluIG9wcG9zaXRlIGRpcmVjdGlvbnNcblx0XHRcdHIgPSAwO1xuXG5cdFx0XHRpZiAoTWF0aC5hYnModkZyb20ueCkgPiBNYXRoLmFicyh2RnJvbS56KSkge1xuXHRcdFx0XHR0aGlzLl94ID0gLXZGcm9tLnk7XG5cdFx0XHRcdHRoaXMuX3kgPSB2RnJvbS54O1xuXHRcdFx0XHR0aGlzLl96ID0gMDtcblx0XHRcdFx0dGhpcy5fdyA9IHI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdFx0dGhpcy5feSA9IC12RnJvbS56O1xuXHRcdFx0XHR0aGlzLl96ID0gdkZyb20ueTtcblx0XHRcdFx0dGhpcy5fdyA9IHI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGNyb3NzVmVjdG9ycyggdkZyb20sIHZUbyApOyAvLyBpbmxpbmVkIHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmN5IG9uIFZlY3RvcjNcblx0XHRcdHRoaXMuX3ggPSB2RnJvbS55ICogdlRvLnogLSB2RnJvbS56ICogdlRvLnk7XG5cdFx0XHR0aGlzLl95ID0gdkZyb20ueiAqIHZUby54IC0gdkZyb20ueCAqIHZUby56O1xuXHRcdFx0dGhpcy5feiA9IHZGcm9tLnggKiB2VG8ueSAtIHZGcm9tLnkgKiB2VG8ueDtcblx0XHRcdHRoaXMuX3cgPSByO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xuXHR9XG5cblx0YW5nbGVUbyhxKSB7XG5cdFx0cmV0dXJuIDIgKiBNYXRoLmFjb3MoTWF0aC5hYnMoY2xhbXAodGhpcy5kb3QocSksIC0xLCAxKSkpO1xuXHR9XG5cblx0cm90YXRlVG93YXJkcyhxLCBzdGVwKSB7XG5cdFx0Y29uc3QgYW5nbGUgPSB0aGlzLmFuZ2xlVG8ocSk7XG5cdFx0aWYgKGFuZ2xlID09PSAwKSByZXR1cm4gdGhpcztcblx0XHRjb25zdCB0ID0gTWF0aC5taW4oMSwgc3RlcCAvIGFuZ2xlKTtcblx0XHR0aGlzLnNsZXJwKHEsIHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWRlbnRpdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0KDAsIDAsIDAsIDEpO1xuXHR9XG5cblx0aW52ZXJ0KCkge1xuXHRcdC8vIHF1YXRlcm5pb24gaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cdFx0cmV0dXJuIHRoaXMuY29uanVnYXRlKCk7XG5cdH1cblxuXHRjb25qdWdhdGUoKSB7XG5cdFx0dGhpcy5feCAqPSAtMTtcblx0XHR0aGlzLl95ICo9IC0xO1xuXHRcdHRoaXMuX3ogKj0gLTE7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRvdCh2KSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ggKiB2Ll94ICsgdGhpcy5feSAqIHYuX3kgKyB0aGlzLl96ICogdi5feiArIHRoaXMuX3cgKiB2Ll93O1xuXHR9XG5cblx0bGVuZ3RoU3EoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ggKiB0aGlzLl94ICsgdGhpcy5feSAqIHRoaXMuX3kgKyB0aGlzLl96ICogdGhpcy5feiArIHRoaXMuX3cgKiB0aGlzLl93O1xuXHR9XG5cblx0bGVuZ3RoKCkge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy5feCAqIHRoaXMuX3ggKyB0aGlzLl95ICogdGhpcy5feSArIHRoaXMuX3ogKiB0aGlzLl96ICsgdGhpcy5fdyAqIHRoaXMuX3cpO1xuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXHRcdGxldCBsID0gdGhpcy5sZW5ndGgoKTtcblxuXHRcdGlmIChsID09PSAwKSB7XG5cdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdHRoaXMuX3kgPSAwO1xuXHRcdFx0dGhpcy5feiA9IDA7XG5cdFx0XHR0aGlzLl93ID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bCA9IDEgLyBsO1xuXHRcdFx0dGhpcy5feCA9IHRoaXMuX3ggKiBsO1xuXHRcdFx0dGhpcy5feSA9IHRoaXMuX3kgKiBsO1xuXHRcdFx0dGhpcy5feiA9IHRoaXMuX3ogKiBsO1xuXHRcdFx0dGhpcy5fdyA9IHRoaXMuX3cgKiBsO1xuXHRcdH1cblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHkocSwgcCkge1xuXHRcdGlmIChwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHEsIHApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcywgcSk7XG5cdH1cblxuXHRwcmVtdWx0aXBseShxKSB7XG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhxLCB0aGlzKTtcblx0fVxuXG5cdG11bHRpcGx5UXVhdGVybmlvbnMoYSwgYikge1xuXHRcdC8vIGZyb20gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9yZWFsTm9ybWVkQWxnZWJyYS9xdWF0ZXJuaW9ucy9jb2RlL2luZGV4Lmh0bVxuXHRcdGNvbnN0IHFheCA9IGEuX3gsXG5cdFx0XHRcdFx0cWF5ID0gYS5feSxcblx0XHRcdFx0XHRxYXogPSBhLl96LFxuXHRcdFx0XHRcdHFhdyA9IGEuX3c7XG5cdFx0Y29uc3QgcWJ4ID0gYi5feCxcblx0XHRcdFx0XHRxYnkgPSBiLl95LFxuXHRcdFx0XHRcdHFieiA9IGIuX3osXG5cdFx0XHRcdFx0cWJ3ID0gYi5fdztcblx0XHR0aGlzLl94ID0gcWF4ICogcWJ3ICsgcWF3ICogcWJ4ICsgcWF5ICogcWJ6IC0gcWF6ICogcWJ5O1xuXHRcdHRoaXMuX3kgPSBxYXkgKiBxYncgKyBxYXcgKiBxYnkgKyBxYXogKiBxYnggLSBxYXggKiBxYno7XG5cdFx0dGhpcy5feiA9IHFheiAqIHFidyArIHFhdyAqIHFieiArIHFheCAqIHFieSAtIHFheSAqIHFieDtcblx0XHR0aGlzLl93ID0gcWF3ICogcWJ3IC0gcWF4ICogcWJ4IC0gcWF5ICogcWJ5IC0gcWF6ICogcWJ6O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzbGVycChxYiwgdCkge1xuXHRcdGlmICh0ID09PSAwKSByZXR1cm4gdGhpcztcblx0XHRpZiAodCA9PT0gMSkgcmV0dXJuIHRoaXMuY29weShxYik7XG5cdFx0Y29uc3QgeCA9IHRoaXMuX3gsXG5cdFx0XHRcdFx0eSA9IHRoaXMuX3ksXG5cdFx0XHRcdFx0eiA9IHRoaXMuX3osXG5cdFx0XHRcdFx0dyA9IHRoaXMuX3c7IC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvcmVhbE5vcm1lZEFsZ2VicmEvcXVhdGVybmlvbnMvc2xlcnAvXG5cblx0XHRsZXQgY29zSGFsZlRoZXRhID0gdyAqIHFiLl93ICsgeCAqIHFiLl94ICsgeSAqIHFiLl95ICsgeiAqIHFiLl96O1xuXG5cdFx0aWYgKGNvc0hhbGZUaGV0YSA8IDApIHtcblx0XHRcdHRoaXMuX3cgPSAtcWIuX3c7XG5cdFx0XHR0aGlzLl94ID0gLXFiLl94O1xuXHRcdFx0dGhpcy5feSA9IC1xYi5feTtcblx0XHRcdHRoaXMuX3ogPSAtcWIuX3o7XG5cdFx0XHRjb3NIYWxmVGhldGEgPSAtY29zSGFsZlRoZXRhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvcHkocWIpO1xuXHRcdH1cblxuXHRcdGlmIChjb3NIYWxmVGhldGEgPj0gMS4wKSB7XG5cdFx0XHR0aGlzLl93ID0gdztcblx0XHRcdHRoaXMuX3ggPSB4O1xuXHRcdFx0dGhpcy5feSA9IHk7XG5cdFx0XHR0aGlzLl96ID0gejtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNxclNpbkhhbGZUaGV0YSA9IDEuMCAtIGNvc0hhbGZUaGV0YSAqIGNvc0hhbGZUaGV0YTtcblxuXHRcdGlmIChzcXJTaW5IYWxmVGhldGEgPD0gTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdGNvbnN0IHMgPSAxIC0gdDtcblx0XHRcdHRoaXMuX3cgPSBzICogdyArIHQgKiB0aGlzLl93O1xuXHRcdFx0dGhpcy5feCA9IHMgKiB4ICsgdCAqIHRoaXMuX3g7XG5cdFx0XHR0aGlzLl95ID0gcyAqIHkgKyB0ICogdGhpcy5feTtcblx0XHRcdHRoaXMuX3ogPSBzICogeiArIHQgKiB0aGlzLl96O1xuXHRcdFx0dGhpcy5ub3JtYWxpemUoKTtcblxuXHRcdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoc3FyU2luSGFsZlRoZXRhKTtcblx0XHRjb25zdCBoYWxmVGhldGEgPSBNYXRoLmF0YW4yKHNpbkhhbGZUaGV0YSwgY29zSGFsZlRoZXRhKTtcblx0XHRjb25zdCByYXRpb0EgPSBNYXRoLnNpbigoMSAtIHQpICogaGFsZlRoZXRhKSAvIHNpbkhhbGZUaGV0YSxcblx0XHRcdFx0XHRyYXRpb0IgPSBNYXRoLnNpbih0ICogaGFsZlRoZXRhKSAvIHNpbkhhbGZUaGV0YTtcblx0XHR0aGlzLl93ID0gdyAqIHJhdGlvQSArIHRoaXMuX3cgKiByYXRpb0I7XG5cdFx0dGhpcy5feCA9IHggKiByYXRpb0EgKyB0aGlzLl94ICogcmF0aW9CO1xuXHRcdHRoaXMuX3kgPSB5ICogcmF0aW9BICsgdGhpcy5feSAqIHJhdGlvQjtcblx0XHR0aGlzLl96ID0geiAqIHJhdGlvQSArIHRoaXMuX3ogKiByYXRpb0I7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNsZXJwUXVhdGVybmlvbnMocWEsIHFiLCB0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29weShxYSkuc2xlcnAocWIsIHQpO1xuXHR9XG5cblx0cmFuZG9tKCkge1xuXHRcdC8vIERlcml2ZWQgZnJvbSBodHRwOi8vcGxhbm5pbmcuY3MudWl1Yy5lZHUvbm9kZTE5OC5odG1sXG5cdFx0Ly8gTm90ZSwgdGhpcyBzb3VyY2UgdXNlcyB3LCB4LCB5LCB6IG9yZGVyaW5nLFxuXHRcdC8vIHNvIHdlIHN3YXAgdGhlIG9yZGVyIGJlbG93LlxuXHRcdGNvbnN0IHUxID0gTWF0aC5yYW5kb20oKTtcblx0XHRjb25zdCBzcXJ0MXUxID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG5cdFx0Y29uc3Qgc3FydHUxID0gTWF0aC5zcXJ0KHUxKTtcblx0XHRjb25zdCB1MiA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcblx0XHRjb25zdCB1MyA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcblx0XHRyZXR1cm4gdGhpcy5zZXQoc3FydDF1MSAqIE1hdGguY29zKHUyKSwgc3FydHUxICogTWF0aC5zaW4odTMpLCBzcXJ0dTEgKiBNYXRoLmNvcyh1MyksIHNxcnQxdTEgKiBNYXRoLnNpbih1MikpO1xuXHR9XG5cblx0ZXF1YWxzKHF1YXRlcm5pb24pIHtcblx0XHRyZXR1cm4gcXVhdGVybmlvbi5feCA9PT0gdGhpcy5feCAmJiBxdWF0ZXJuaW9uLl95ID09PSB0aGlzLl95ICYmIHF1YXRlcm5pb24uX3ogPT09IHRoaXMuX3ogJiYgcXVhdGVybmlvbi5fdyA9PT0gdGhpcy5fdztcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdHRoaXMuX3ggPSBhcnJheVtvZmZzZXRdO1xuXHRcdHRoaXMuX3kgPSBhcnJheVtvZmZzZXQgKyAxXTtcblx0XHR0aGlzLl96ID0gYXJyYXlbb2Zmc2V0ICsgMl07XG5cdFx0dGhpcy5fdyA9IGFycmF5W29mZnNldCArIDNdO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRhcnJheVtvZmZzZXRdID0gdGhpcy5feDtcblx0XHRhcnJheVtvZmZzZXQgKyAxXSA9IHRoaXMuX3k7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMl0gPSB0aGlzLl96O1xuXHRcdGFycmF5W29mZnNldCArIDNdID0gdGhpcy5fdztcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kZXgpIHtcblx0XHR0aGlzLl94ID0gYXR0cmlidXRlLmdldFgoaW5kZXgpO1xuXHRcdHRoaXMuX3kgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XG5cdFx0dGhpcy5feiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcblx0XHR0aGlzLl93ID0gYXR0cmlidXRlLmdldFcoaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0X29uQ2hhbmdlKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0X29uQ2hhbmdlQ2FsbGJhY2soKSB7fVxuXG59XG5cblF1YXRlcm5pb24ucHJvdG90eXBlLmlzUXVhdGVybmlvbiA9IHRydWU7XG5cbmNsYXNzIFZlY3RvcjMge1xuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwKSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHo7XG5cdH1cblxuXHRzZXQoeCwgeSwgeikge1xuXHRcdGlmICh6ID09PSB1bmRlZmluZWQpIHogPSB0aGlzLno7IC8vIHNwcml0ZS5zY2FsZS5zZXQoeCx5KVxuXG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRTY2FsYXIoc2NhbGFyKSB7XG5cdFx0dGhpcy54ID0gc2NhbGFyO1xuXHRcdHRoaXMueSA9IHNjYWxhcjtcblx0XHR0aGlzLnogPSBzY2FsYXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYKHgpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WSh5KSB7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFooeikge1xuXHRcdHRoaXMueiA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb21wb25lbnQoaW5kZXgsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHR0aGlzLnggPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGhpcy55ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHRoaXMueiA9IHZhbHVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRDb21wb25lbnQoaW5kZXgpIHtcblx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRjYXNlIDA6XG5cdFx0XHRcdHJldHVybiB0aGlzLng7XG5cblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuIHRoaXMueTtcblxuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy56O1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4KTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LCB0aGlzLnksIHRoaXMueik7XG5cdH1cblxuXHRjb3B5KHYpIHtcblx0XHR0aGlzLnggPSB2Lng7XG5cdFx0dGhpcy55ID0gdi55O1xuXHRcdHRoaXMueiA9IHYuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZCh2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblx0XHR0aGlzLnogKz0gdi56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHR0aGlzLnogKz0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cdFx0dGhpcy56ID0gYS56ICsgYi56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKHYsIHMpIHtcblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblx0XHR0aGlzLnogKz0gdi56ICogcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1Yih2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblx0XHR0aGlzLnogLT0gdi56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHR0aGlzLnogLT0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1YlZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cdFx0dGhpcy56ID0gYS56IC0gYi56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHkodiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLm11bHRpcGx5VmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHR0aGlzLnggKj0gdi54O1xuXHRcdHRoaXMueSAqPSB2Lnk7XG5cdFx0dGhpcy56ICo9IHYuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMueCAqPSBzY2FsYXI7XG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcblx0XHR0aGlzLnogKj0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHlWZWN0b3JzKGEsIGIpIHtcblx0XHR0aGlzLnggPSBhLnggKiBiLng7XG5cdFx0dGhpcy55ID0gYS55ICogYi55O1xuXHRcdHRoaXMueiA9IGEueiAqIGIuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5RXVsZXIoZXVsZXIpIHtcblx0XHRpZiAoIShldWxlciAmJiBldWxlci5pc0V1bGVyKSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLicpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihfcXVhdGVybmlvbiQ0LnNldEZyb21FdWxlcihldWxlcikpO1xuXHR9XG5cblx0YXBwbHlBeGlzQW5nbGUoYXhpcywgYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oX3F1YXRlcm5pb24kNC5zZXRGcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKSk7XG5cdH1cblxuXHRhcHBseU1hdHJpeDMobSkge1xuXHRcdGNvbnN0IHggPSB0aGlzLngsXG5cdFx0XHRcdFx0eSA9IHRoaXMueSxcblx0XHRcdFx0XHR6ID0gdGhpcy56O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXHRcdHRoaXMueCA9IGVbMF0gKiB4ICsgZVszXSAqIHkgKyBlWzZdICogejtcblx0XHR0aGlzLnkgPSBlWzFdICogeCArIGVbNF0gKiB5ICsgZVs3XSAqIHo7XG5cdFx0dGhpcy56ID0gZVsyXSAqIHggKyBlWzVdICogeSArIGVbOF0gKiB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlOb3JtYWxNYXRyaXgobSkge1xuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4MyhtKS5ub3JtYWxpemUoKTtcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtKSB7XG5cdFx0Y29uc3QgeCA9IHRoaXMueCxcblx0XHRcdFx0XHR5ID0gdGhpcy55LFxuXHRcdFx0XHRcdHogPSB0aGlzLno7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cdFx0Y29uc3QgdyA9IDEgLyAoZVszXSAqIHggKyBlWzddICogeSArIGVbMTFdICogeiArIGVbMTVdKTtcblx0XHR0aGlzLnggPSAoZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6ICsgZVsxMl0pICogdztcblx0XHR0aGlzLnkgPSAoZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6ICsgZVsxM10pICogdztcblx0XHR0aGlzLnogPSAoZVsyXSAqIHggKyBlWzZdICogeSArIGVbMTBdICogeiArIGVbMTRdKSAqIHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseVF1YXRlcm5pb24ocSkge1xuXHRcdGNvbnN0IHggPSB0aGlzLngsXG5cdFx0XHRcdFx0eSA9IHRoaXMueSxcblx0XHRcdFx0XHR6ID0gdGhpcy56O1xuXHRcdGNvbnN0IHF4ID0gcS54LFxuXHRcdFx0XHRcdHF5ID0gcS55LFxuXHRcdFx0XHRcdHF6ID0gcS56LFxuXHRcdFx0XHRcdHF3ID0gcS53OyAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuXG5cdFx0Y29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG5cdFx0Y29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG5cdFx0Y29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG5cdFx0Y29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6OyAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cblx0XHR0aGlzLnggPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xuXHRcdHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XG5cdFx0dGhpcy56ID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHByb2plY3QoY2FtZXJhKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NChjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdH1cblxuXHR1bnByb2plY3QoY2FtZXJhKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdH1cblxuXHR0cmFuc2Zvcm1EaXJlY3Rpb24obSkge1xuXHRcdC8vIGlucHV0OiBUSFJFRS5NYXRyaXg0IGFmZmluZSBtYXRyaXhcblx0XHQvLyB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3Rpb25cblx0XHRjb25zdCB4ID0gdGhpcy54LFxuXHRcdFx0XHRcdHkgPSB0aGlzLnksXG5cdFx0XHRcdFx0eiA9IHRoaXMuejtcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnggPSBlWzBdICogeCArIGVbNF0gKiB5ICsgZVs4XSAqIHo7XG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6O1xuXHRcdHRoaXMueiA9IGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHo7XG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCk7XG5cdH1cblxuXHRkaXZpZGUodikge1xuXHRcdHRoaXMueCAvPSB2Lng7XG5cdFx0dGhpcy55IC89IHYueTtcblx0XHR0aGlzLnogLz0gdi56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKHNjYWxhcikge1xuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEgLyBzY2FsYXIpO1xuXHR9XG5cblx0bWluKHYpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1pbih0aGlzLngsIHYueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5taW4odGhpcy55LCB2LnkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWluKHRoaXMueiwgdi56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1heCh2KSB7XG5cdFx0dGhpcy54ID0gTWF0aC5tYXgodGhpcy54LCB2LngpO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KHRoaXMueSwgdi55KTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCh0aGlzLnosIHYueik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcChtaW4sIG1heCkge1xuXHRcdC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgobWluLngsIE1hdGgubWluKG1heC54LCB0aGlzLngpKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heChtaW4ueSwgTWF0aC5taW4obWF4LnksIHRoaXMueSkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KG1pbi56LCBNYXRoLm1pbihtYXgueiwgdGhpcy56KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcFNjYWxhcihtaW5WYWwsIG1heFZhbCkge1xuXHRcdHRoaXMueCA9IE1hdGgubWF4KG1pblZhbCwgTWF0aC5taW4obWF4VmFsLCB0aGlzLngpKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy55KSk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMueikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBMZW5ndGgobWluLCBtYXgpIHtcblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihsZW5ndGggfHwgMSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIGxlbmd0aCkpKTtcblx0fVxuXG5cdGZsb29yKCkge1xuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5mbG9vcih0aGlzLnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2VpbCgpIHtcblx0XHR0aGlzLnggPSBNYXRoLmNlaWwodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLmNlaWwodGhpcy55KTtcblx0XHR0aGlzLnogPSBNYXRoLmNlaWwodGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdW5kKCkge1xuXHRcdHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5yb3VuZCh0aGlzLnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm91bmRUb1plcm8oKSB7XG5cdFx0dGhpcy54ID0gdGhpcy54IDwgMCA/IE1hdGguY2VpbCh0aGlzLngpIDogTWF0aC5mbG9vcih0aGlzLngpO1xuXHRcdHRoaXMueSA9IHRoaXMueSA8IDAgPyBNYXRoLmNlaWwodGhpcy55KSA6IE1hdGguZmxvb3IodGhpcy55KTtcblx0XHR0aGlzLnogPSB0aGlzLnogPCAwID8gTWF0aC5jZWlsKHRoaXMueikgOiBNYXRoLmZsb29yKHRoaXMueik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cdFx0dGhpcy54ID0gLXRoaXMueDtcblx0XHR0aGlzLnkgPSAtdGhpcy55O1xuXHRcdHRoaXMueiA9IC10aGlzLno7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkb3Qodikge1xuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2Lno7XG5cdH0gLy8gVE9ETyBsZW5ndGhTcXVhcmVkP1xuXG5cblx0bGVuZ3RoU3EoKSB7XG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMuejtcblx0fVxuXG5cdGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueik7XG5cdH1cblxuXHRtYW5oYXR0YW5MZW5ndGgoKSB7XG5cdFx0cmV0dXJuIE1hdGguYWJzKHRoaXMueCkgKyBNYXRoLmFicyh0aGlzLnkpICsgTWF0aC5hYnModGhpcy56KTtcblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKSB8fCAxKTtcblx0fVxuXG5cdHNldExlbmd0aChsZW5ndGgpIHtcblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihsZW5ndGgpO1xuXHR9XG5cblx0bGVycCh2LCBhbHBoYSkge1xuXHRcdHRoaXMueCArPSAodi54IC0gdGhpcy54KSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAodi55IC0gdGhpcy55KSAqIGFscGhhO1xuXHRcdHRoaXMueiArPSAodi56IC0gdGhpcy56KSAqIGFscGhhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bGVycFZlY3RvcnModjEsIHYyLCBhbHBoYSkge1xuXHRcdHRoaXMueCA9IHYxLnggKyAodjIueCAtIHYxLngpICogYWxwaGE7XG5cdFx0dGhpcy55ID0gdjEueSArICh2Mi55IC0gdjEueSkgKiBhbHBoYTtcblx0XHR0aGlzLnogPSB2MS56ICsgKHYyLnogLSB2MS56KSAqIGFscGhhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y3Jvc3Modiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnModGhpcywgdik7XG5cdH1cblxuXHRjcm9zc1ZlY3RvcnMoYSwgYikge1xuXHRcdGNvbnN0IGF4ID0gYS54LFxuXHRcdFx0XHRcdGF5ID0gYS55LFxuXHRcdFx0XHRcdGF6ID0gYS56O1xuXHRcdGNvbnN0IGJ4ID0gYi54LFxuXHRcdFx0XHRcdGJ5ID0gYi55LFxuXHRcdFx0XHRcdGJ6ID0gYi56O1xuXHRcdHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5O1xuXHRcdHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xuXHRcdHRoaXMueiA9IGF4ICogYnkgLSBheSAqIGJ4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJvamVjdE9uVmVjdG9yKHYpIHtcblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHYubGVuZ3RoU3EoKTtcblx0XHRpZiAoZGVub21pbmF0b3IgPT09IDApIHJldHVybiB0aGlzLnNldCgwLCAwLCAwKTtcblx0XHRjb25zdCBzY2FsYXIgPSB2LmRvdCh0aGlzKSAvIGRlbm9taW5hdG9yO1xuXHRcdHJldHVybiB0aGlzLmNvcHkodikubXVsdGlwbHlTY2FsYXIoc2NhbGFyKTtcblx0fVxuXG5cdHByb2plY3RPblBsYW5lKHBsYW5lTm9ybWFsKSB7XG5cdFx0X3ZlY3RvciRjLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHBsYW5lTm9ybWFsKTtcblxuXHRcdHJldHVybiB0aGlzLnN1YihfdmVjdG9yJGMpO1xuXHR9XG5cblx0cmVmbGVjdChub3JtYWwpIHtcblx0XHQvLyByZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWxcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cdFx0cmV0dXJuIHRoaXMuc3ViKF92ZWN0b3IkYy5jb3B5KG5vcm1hbCkubXVsdGlwbHlTY2FsYXIoMiAqIHRoaXMuZG90KG5vcm1hbCkpKTtcblx0fVxuXG5cdGFuZ2xlVG8odikge1xuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gTWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSAqIHYubGVuZ3RoU3EoKSk7XG5cdFx0aWYgKGRlbm9taW5hdG9yID09PSAwKSByZXR1cm4gTWF0aC5QSSAvIDI7XG5cdFx0Y29uc3QgdGhldGEgPSB0aGlzLmRvdCh2KSAvIGRlbm9taW5hdG9yOyAvLyBjbGFtcCwgdG8gaGFuZGxlIG51bWVyaWNhbCBwcm9ibGVtc1xuXG5cdFx0cmV0dXJuIE1hdGguYWNvcyhjbGFtcCh0aGV0YSwgLTEsIDEpKTtcblx0fVxuXG5cdGRpc3RhbmNlVG8odikge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh2KSk7XG5cdH1cblxuXHRkaXN0YW5jZVRvU3F1YXJlZCh2KSB7XG5cdFx0Y29uc3QgZHggPSB0aGlzLnggLSB2LngsXG5cdFx0XHRcdFx0ZHkgPSB0aGlzLnkgLSB2LnksXG5cdFx0XHRcdFx0ZHogPSB0aGlzLnogLSB2Lno7XG5cdFx0cmV0dXJuIGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkejtcblx0fVxuXG5cdG1hbmhhdHRhbkRpc3RhbmNlVG8odikge1xuXHRcdHJldHVybiBNYXRoLmFicyh0aGlzLnggLSB2LngpICsgTWF0aC5hYnModGhpcy55IC0gdi55KSArIE1hdGguYWJzKHRoaXMueiAtIHYueik7XG5cdH1cblxuXHRzZXRGcm9tU3BoZXJpY2FsKHMpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHMucmFkaXVzLCBzLnBoaSwgcy50aGV0YSk7XG5cdH1cblxuXHRzZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHJhZGl1cywgcGhpLCB0aGV0YSkge1xuXHRcdGNvbnN0IHNpblBoaVJhZGl1cyA9IE1hdGguc2luKHBoaSkgKiByYWRpdXM7XG5cdFx0dGhpcy54ID0gc2luUGhpUmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuXHRcdHRoaXMueSA9IE1hdGguY29zKHBoaSkgKiByYWRpdXM7XG5cdFx0dGhpcy56ID0gc2luUGhpUmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUN5bGluZHJpY2FsKGMpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMoYy5yYWRpdXMsIGMudGhldGEsIGMueSk7XG5cdH1cblxuXHRzZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMocmFkaXVzLCB0aGV0YSwgeSkge1xuXHRcdHRoaXMueCA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21NYXRyaXhQb3NpdGlvbihtKSB7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cdFx0dGhpcy54ID0gZVsxMl07XG5cdFx0dGhpcy55ID0gZVsxM107XG5cdFx0dGhpcy56ID0gZVsxNF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tTWF0cml4U2NhbGUobSkge1xuXHRcdGNvbnN0IHN4ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKG0sIDApLmxlbmd0aCgpO1xuXHRcdGNvbnN0IHN5ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKG0sIDEpLmxlbmd0aCgpO1xuXHRcdGNvbnN0IHN6ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKG0sIDIpLmxlbmd0aCgpO1xuXHRcdHRoaXMueCA9IHN4O1xuXHRcdHRoaXMueSA9IHN5O1xuXHRcdHRoaXMueiA9IHN6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbU1hdHJpeENvbHVtbihtLCBpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmZyb21BcnJheShtLmVsZW1lbnRzLCBpbmRleCAqIDQpO1xuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDNDb2x1bW4obSwgaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkobS5lbGVtZW50cywgaW5kZXggKiAzKTtcblx0fVxuXG5cdGVxdWFscyh2KSB7XG5cdFx0cmV0dXJuIHYueCA9PT0gdGhpcy54ICYmIHYueSA9PT0gdGhpcy55ICYmIHYueiA9PT0gdGhpcy56O1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5LCBvZmZzZXQgPSAwKSB7XG5cdFx0dGhpcy54ID0gYXJyYXlbb2Zmc2V0XTtcblx0XHR0aGlzLnkgPSBhcnJheVtvZmZzZXQgKyAxXTtcblx0XHR0aGlzLnogPSBhcnJheVtvZmZzZXQgKyAyXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGFycmF5W29mZnNldF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0aGlzLnk7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMl0gPSB0aGlzLno7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0XHRpZiAob2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicpO1xuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XG5cdFx0dGhpcy56ID0gYXR0cmlidXRlLmdldFooaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmFuZG9tKCkge1xuXHRcdHRoaXMueCA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnogPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmFuZG9tRGlyZWN0aW9uKCkge1xuXHRcdC8vIERlcml2ZWQgZnJvbSBodHRwczovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9TcGhlcmVQb2ludFBpY2tpbmcuaHRtbFxuXHRcdGNvbnN0IHUgPSAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAyO1xuXHRcdGNvbnN0IHQgPSBNYXRoLnJhbmRvbSgpICogTWF0aC5QSSAqIDI7XG5cdFx0Y29uc3QgZiA9IE1hdGguc3FydCgxIC0gdSAqKiAyKTtcblx0XHR0aGlzLnggPSBmICogTWF0aC5jb3ModCk7XG5cdFx0dGhpcy55ID0gZiAqIE1hdGguc2luKHQpO1xuXHRcdHRoaXMueiA9IHU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0eWllbGQgdGhpcy54O1xuXHRcdHlpZWxkIHRoaXMueTtcblx0XHR5aWVsZCB0aGlzLno7XG5cdH1cblxufVxuXG5WZWN0b3IzLnByb3RvdHlwZS5pc1ZlY3RvcjMgPSB0cnVlO1xuXG5jb25zdCBfdmVjdG9yJGMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3F1YXRlcm5pb24kNCA9IC8qQF9fUFVSRV9fKi9uZXcgUXVhdGVybmlvbigpO1xuXG5jbGFzcyBCb3gzIHtcblx0Y29uc3RydWN0b3IobWluID0gbmV3IFZlY3RvcjMoK0luZmluaXR5LCArSW5maW5pdHksICtJbmZpbml0eSksIG1heCA9IG5ldyBWZWN0b3IzKC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpKSB7XG5cdFx0dGhpcy5taW4gPSBtaW47XG5cdFx0dGhpcy5tYXggPSBtYXg7XG5cdH1cblxuXHRzZXQobWluLCBtYXgpIHtcblx0XHR0aGlzLm1pbi5jb3B5KG1pbik7XG5cdFx0dGhpcy5tYXguY29weShtYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUFycmF5KGFycmF5KSB7XG5cdFx0bGV0IG1pblggPSArSW5maW5pdHk7XG5cdFx0bGV0IG1pblkgPSArSW5maW5pdHk7XG5cdFx0bGV0IG1pblogPSArSW5maW5pdHk7XG5cdFx0bGV0IG1heFggPSAtSW5maW5pdHk7XG5cdFx0bGV0IG1heFkgPSAtSW5maW5pdHk7XG5cdFx0bGV0IG1heFogPSAtSW5maW5pdHk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMykge1xuXHRcdFx0Y29uc3QgeCA9IGFycmF5W2ldO1xuXHRcdFx0Y29uc3QgeSA9IGFycmF5W2kgKyAxXTtcblx0XHRcdGNvbnN0IHogPSBhcnJheVtpICsgMl07XG5cdFx0XHRpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuXHRcdFx0aWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcblx0XHRcdGlmICh6IDwgbWluWikgbWluWiA9IHo7XG5cdFx0XHRpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuXHRcdFx0aWYgKHkgPiBtYXhZKSBtYXhZID0geTtcblx0XHRcdGlmICh6ID4gbWF4WikgbWF4WiA9IHo7XG5cdFx0fVxuXG5cdFx0dGhpcy5taW4uc2V0KG1pblgsIG1pblksIG1pblopO1xuXHRcdHRoaXMubWF4LnNldChtYXhYLCBtYXhZLCBtYXhaKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG5cdFx0bGV0IG1pblggPSArSW5maW5pdHk7XG5cdFx0bGV0IG1pblkgPSArSW5maW5pdHk7XG5cdFx0bGV0IG1pblogPSArSW5maW5pdHk7XG5cdFx0bGV0IG1heFggPSAtSW5maW5pdHk7XG5cdFx0bGV0IG1heFkgPSAtSW5maW5pdHk7XG5cdFx0bGV0IG1heFogPSAtSW5maW5pdHk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgeCA9IGF0dHJpYnV0ZS5nZXRYKGkpO1xuXHRcdFx0Y29uc3QgeSA9IGF0dHJpYnV0ZS5nZXRZKGkpO1xuXHRcdFx0Y29uc3QgeiA9IGF0dHJpYnV0ZS5nZXRaKGkpO1xuXHRcdFx0aWYgKHggPCBtaW5YKSBtaW5YID0geDtcblx0XHRcdGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG5cdFx0XHRpZiAoeiA8IG1pblopIG1pblogPSB6O1xuXHRcdFx0aWYgKHggPiBtYXhYKSBtYXhYID0geDtcblx0XHRcdGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XG5cdFx0XHRpZiAoeiA+IG1heFopIG1heFogPSB6O1xuXHRcdH1cblxuXHRcdHRoaXMubWluLnNldChtaW5YLCBtaW5ZLCBtaW5aKTtcblx0XHR0aGlzLm1heC5zZXQobWF4WCwgbWF4WSwgbWF4Wik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKHBvaW50cykge1xuXHRcdHRoaXMubWFrZUVtcHR5KCk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0dGhpcy5leHBhbmRCeVBvaW50KHBvaW50c1tpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tQ2VudGVyQW5kU2l6ZShjZW50ZXIsIHNpemUpIHtcblx0XHRjb25zdCBoYWxmU2l6ZSA9IF92ZWN0b3IkYi5jb3B5KHNpemUpLm11bHRpcGx5U2NhbGFyKDAuNSk7XG5cblx0XHR0aGlzLm1pbi5jb3B5KGNlbnRlcikuc3ViKGhhbGZTaXplKTtcblx0XHR0aGlzLm1heC5jb3B5KGNlbnRlcikuYWRkKGhhbGZTaXplKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21PYmplY3Qob2JqZWN0LCBwcmVjaXNlID0gZmFsc2UpIHtcblx0XHR0aGlzLm1ha2VFbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KG9iamVjdCwgcHJlY2lzZSk7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0Y29weShib3gpIHtcblx0XHR0aGlzLm1pbi5jb3B5KGJveC5taW4pO1xuXHRcdHRoaXMubWF4LmNvcHkoYm94Lm1heCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlRW1wdHkoKSB7XG5cdFx0dGhpcy5taW4ueCA9IHRoaXMubWluLnkgPSB0aGlzLm1pbi56ID0gK0luZmluaXR5O1xuXHRcdHRoaXMubWF4LnggPSB0aGlzLm1heC55ID0gdGhpcy5tYXgueiA9IC1JbmZpbml0eTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRW1wdHkoKSB7XG5cdFx0Ly8gdGhpcyBpcyBhIG1vcmUgcm9idXN0IGNoZWNrIGZvciBlbXB0eSB0aGFuICggdm9sdW1lIDw9IDAgKSBiZWNhdXNlIHZvbHVtZSBjYW4gZ2V0IHBvc2l0aXZlIHdpdGggdHdvIG5lZ2F0aXZlIGF4ZXNcblx0XHRyZXR1cm4gdGhpcy5tYXgueCA8IHRoaXMubWluLnggfHwgdGhpcy5tYXgueSA8IHRoaXMubWluLnkgfHwgdGhpcy5tYXgueiA8IHRoaXMubWluLno7XG5cdH1cblxuXHRnZXRDZW50ZXIodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gdGFyZ2V0LnNldCgwLCAwLCAwKSA6IHRhcmdldC5hZGRWZWN0b3JzKHRoaXMubWluLCB0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoMC41KTtcblx0fVxuXG5cdGdldFNpemUodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gdGFyZ2V0LnNldCgwLCAwLCAwKSA6IHRhcmdldC5zdWJWZWN0b3JzKHRoaXMubWF4LCB0aGlzLm1pbik7XG5cdH1cblxuXHRleHBhbmRCeVBvaW50KHBvaW50KSB7XG5cdFx0dGhpcy5taW4ubWluKHBvaW50KTtcblx0XHR0aGlzLm1heC5tYXgocG9pbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kQnlWZWN0b3IodmVjdG9yKSB7XG5cdFx0dGhpcy5taW4uc3ViKHZlY3Rvcik7XG5cdFx0dGhpcy5tYXguYWRkKHZlY3Rvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHBhbmRCeVNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLm1pbi5hZGRTY2FsYXIoLXNjYWxhcik7XG5cdFx0dGhpcy5tYXguYWRkU2NhbGFyKHNjYWxhcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHBhbmRCeU9iamVjdChvYmplY3QsIHByZWNpc2UgPSBmYWxzZSkge1xuXHRcdC8vIENvbXB1dGVzIHRoZSB3b3JsZC1heGlzLWFsaWduZWQgYm91bmRpbmcgYm94IG9mIGFuIG9iamVjdCAoaW5jbHVkaW5nIGl0cyBjaGlsZHJlbiksXG5cdFx0Ly8gYWNjb3VudGluZyBmb3IgYm90aCB0aGUgb2JqZWN0J3MsIGFuZCBjaGlsZHJlbidzLCB3b3JsZCB0cmFuc2Zvcm1zXG5cdFx0b2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KGZhbHNlLCBmYWxzZSk7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cblx0XHRpZiAoZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHByZWNpc2UgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcyAhPSB1bmRlZmluZWQgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHBvc2l0aW9uLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0X3ZlY3RvciRiLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGkpLmFwcGx5TWF0cml4NChvYmplY3QubWF0cml4V29ybGQpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHBhbmRCeVBvaW50KF92ZWN0b3IkYik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChnZW9tZXRyeS5ib3VuZGluZ0JveCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2JveCQzLmNvcHkoZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xuXG5cdFx0XHRcdF9ib3gkMy5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0XHR0aGlzLnVuaW9uKF9ib3gkMyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dGhpcy5leHBhbmRCeU9iamVjdChjaGlsZHJlbltpXSwgcHJlY2lzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb250YWluc1BvaW50KHBvaW50KSB7XG5cdFx0cmV0dXJuIHBvaW50LnggPCB0aGlzLm1pbi54IHx8IHBvaW50LnggPiB0aGlzLm1heC54IHx8IHBvaW50LnkgPCB0aGlzLm1pbi55IHx8IHBvaW50LnkgPiB0aGlzLm1heC55IHx8IHBvaW50LnogPCB0aGlzLm1pbi56IHx8IHBvaW50LnogPiB0aGlzLm1heC56ID8gZmFsc2UgOiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNCb3goYm94KSB7XG5cdFx0cmV0dXJuIHRoaXMubWluLnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICYmIHRoaXMubWluLnkgPD0gYm94Lm1pbi55ICYmIGJveC5tYXgueSA8PSB0aGlzLm1heC55ICYmIHRoaXMubWluLnogPD0gYm94Lm1pbi56ICYmIGJveC5tYXgueiA8PSB0aGlzLm1heC56O1xuXHR9XG5cblx0Z2V0UGFyYW1ldGVyKHBvaW50LCB0YXJnZXQpIHtcblx0XHQvLyBUaGlzIGNhbiBwb3RlbnRpYWxseSBoYXZlIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIGJveFxuXHRcdC8vIGhhcyBhIHNpemUgZGltZW5zaW9uIG9mIDAuXG5cdFx0cmV0dXJuIHRhcmdldC5zZXQoKHBvaW50LnggLSB0aGlzLm1pbi54KSAvICh0aGlzLm1heC54IC0gdGhpcy5taW4ueCksIChwb2ludC55IC0gdGhpcy5taW4ueSkgLyAodGhpcy5tYXgueSAtIHRoaXMubWluLnkpLCAocG9pbnQueiAtIHRoaXMubWluLnopIC8gKHRoaXMubWF4LnogLSB0aGlzLm1pbi56KSk7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdC8vIHVzaW5nIDYgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zLlxuXHRcdHJldHVybiBib3gubWF4LnggPCB0aGlzLm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHwgYm94Lm1heC55IDwgdGhpcy5taW4ueSB8fCBib3gubWluLnkgPiB0aGlzLm1heC55IHx8IGJveC5tYXgueiA8IHRoaXMubWluLnogfHwgYm94Lm1pbi56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTtcblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoc3BoZXJlKSB7XG5cdFx0Ly8gRmluZCB0aGUgcG9pbnQgb24gdGhlIEFBQkIgY2xvc2VzdCB0byB0aGUgc3BoZXJlIGNlbnRlci5cblx0XHR0aGlzLmNsYW1wUG9pbnQoc3BoZXJlLmNlbnRlciwgX3ZlY3RvciRiKTsgLy8gSWYgdGhhdCBwb2ludCBpcyBpbnNpZGUgdGhlIHNwaGVyZSwgdGhlIEFBQkIgYW5kIHNwaGVyZSBpbnRlcnNlY3QuXG5cblx0XHRyZXR1cm4gX3ZlY3RvciRiLmRpc3RhbmNlVG9TcXVhcmVkKHNwaGVyZS5jZW50ZXIpIDw9IHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzO1xuXHR9XG5cblx0aW50ZXJzZWN0c1BsYW5lKHBsYW5lKSB7XG5cdFx0Ly8gV2UgY29tcHV0ZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBkb3QgcHJvZHVjdCB2YWx1ZXMuIElmIHRob3NlIHZhbHVlc1xuXHRcdC8vIGFyZSBvbiB0aGUgc2FtZSBzaWRlIChiYWNrIG9yIGZyb250KSBvZiB0aGUgcGxhbmUsIHRoZW4gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLlxuXHRcdGxldCBtaW4sIG1heDtcblxuXHRcdGlmIChwbGFuZS5ub3JtYWwueCA+IDApIHtcblx0XHRcdG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDtcblx0XHRcdG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWluID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1heC54O1xuXHRcdFx0bWF4ID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54O1xuXHRcdH1cblxuXHRcdGlmIChwbGFuZS5ub3JtYWwueSA+IDApIHtcblx0XHRcdG1pbiArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7XG5cdFx0XHRtYXggKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1heC55O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaW4gKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1heC55O1xuXHRcdFx0bWF4ICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5taW4ueTtcblx0XHR9XG5cblx0XHRpZiAocGxhbmUubm9ybWFsLnogPiAwKSB7XG5cdFx0XHRtaW4gKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1pbi56O1xuXHRcdFx0bWF4ICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWluLno7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbiA8PSAtcGxhbmUuY29uc3RhbnQgJiYgbWF4ID49IC1wbGFuZS5jb25zdGFudDtcblx0fVxuXG5cdGludGVyc2VjdHNUcmlhbmdsZSh0cmlhbmdsZSkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gLy8gY29tcHV0ZSBib3ggY2VudGVyIGFuZCBleHRlbnRzXG5cblxuXHRcdHRoaXMuZ2V0Q2VudGVyKF9jZW50ZXIpO1xuXG5cdFx0X2V4dGVudHMuc3ViVmVjdG9ycyh0aGlzLm1heCwgX2NlbnRlcik7IC8vIHRyYW5zbGF0ZSB0cmlhbmdsZSB0byBhYWJiIG9yaWdpblxuXG5cblx0XHRfdjAkMi5zdWJWZWN0b3JzKHRyaWFuZ2xlLmEsIF9jZW50ZXIpO1xuXG5cdFx0X3YxJDcuc3ViVmVjdG9ycyh0cmlhbmdsZS5iLCBfY2VudGVyKTtcblxuXHRcdF92MiQzLnN1YlZlY3RvcnModHJpYW5nbGUuYywgX2NlbnRlcik7IC8vIGNvbXB1dGUgZWRnZSB2ZWN0b3JzIGZvciB0cmlhbmdsZVxuXG5cblx0XHRfZjAuc3ViVmVjdG9ycyhfdjEkNywgX3YwJDIpO1xuXG5cdFx0X2YxLnN1YlZlY3RvcnMoX3YyJDMsIF92MSQ3KTtcblxuXHRcdF9mMi5zdWJWZWN0b3JzKF92MCQyLCBfdjIkMyk7IC8vIHRlc3QgYWdhaW5zdCBheGVzIHRoYXQgYXJlIGdpdmVuIGJ5IGNyb3NzIHByb2R1Y3QgY29tYmluYXRpb25zIG9mIHRoZSBlZGdlcyBvZiB0aGUgdHJpYW5nbGUgYW5kIHRoZSBlZGdlcyBvZiB0aGUgYWFiYlxuXHRcdC8vIG1ha2UgYW4gYXhpcyB0ZXN0aW5nIG9mIGVhY2ggb2YgdGhlIDMgc2lkZXMgb2YgdGhlIGFhYmIgYWdhaW5zdCBlYWNoIG9mIHRoZSAzIHNpZGVzIG9mIHRoZSB0cmlhbmdsZSA9IDkgYXhpcyBvZiBzZXBhcmF0aW9uXG5cdFx0Ly8gYXhpc19paiA9IHVfaSB4IGZfaiAodTAsIHUxLCB1MiA9IGZhY2Ugbm9ybWFscyBvZiBhYWJiID0geCx5LHogYXhlcyB2ZWN0b3JzIHNpbmNlIGFhYmIgaXMgYXhpcyBhbGlnbmVkKVxuXG5cblx0XHRsZXQgYXhlcyA9IFswLCAtX2YwLnosIF9mMC55LCAwLCAtX2YxLnosIF9mMS55LCAwLCAtX2YyLnosIF9mMi55LCBfZjAueiwgMCwgLV9mMC54LCBfZjEueiwgMCwgLV9mMS54LCBfZjIueiwgMCwgLV9mMi54LCAtX2YwLnksIF9mMC54LCAwLCAtX2YxLnksIF9mMS54LCAwLCAtX2YyLnksIF9mMi54LCAwXTtcblxuXHRcdGlmICghc2F0Rm9yQXhlcyhheGVzLCBfdjAkMiwgX3YxJDcsIF92MiQzLCBfZXh0ZW50cykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IC8vIHRlc3QgMyBmYWNlIG5vcm1hbHMgZnJvbSB0aGUgYWFiYlxuXG5cblx0XHRheGVzID0gWzEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDFdO1xuXG5cdFx0aWYgKCFzYXRGb3JBeGVzKGF4ZXMsIF92MCQyLCBfdjEkNywgX3YyJDMsIF9leHRlbnRzKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gLy8gZmluYWxseSB0ZXN0aW5nIHRoZSBmYWNlIG5vcm1hbCBvZiB0aGUgdHJpYW5nbGVcblx0XHQvLyB1c2UgYWxyZWFkeSBleGlzdGluZyB0cmlhbmdsZSBlZGdlIHZlY3RvcnMgaGVyZVxuXG5cblx0XHRfdHJpYW5nbGVOb3JtYWwuY3Jvc3NWZWN0b3JzKF9mMCwgX2YxKTtcblxuXHRcdGF4ZXMgPSBbX3RyaWFuZ2xlTm9ybWFsLngsIF90cmlhbmdsZU5vcm1hbC55LCBfdHJpYW5nbGVOb3JtYWwuel07XG5cdFx0cmV0dXJuIHNhdEZvckF4ZXMoYXhlcywgX3YwJDIsIF92MSQ3LCBfdjIkMywgX2V4dGVudHMpO1xuXHR9XG5cblx0Y2xhbXBQb2ludChwb2ludCwgdGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KHBvaW50KS5jbGFtcCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KHBvaW50KSB7XG5cdFx0Y29uc3QgY2xhbXBlZFBvaW50ID0gX3ZlY3RvciRiLmNvcHkocG9pbnQpLmNsYW1wKHRoaXMubWluLCB0aGlzLm1heCk7XG5cblx0XHRyZXR1cm4gY2xhbXBlZFBvaW50LnN1Yihwb2ludCkubGVuZ3RoKCk7XG5cdH1cblxuXHRnZXRCb3VuZGluZ1NwaGVyZSh0YXJnZXQpIHtcblx0XHR0aGlzLmdldENlbnRlcih0YXJnZXQuY2VudGVyKTtcblx0XHR0YXJnZXQucmFkaXVzID0gdGhpcy5nZXRTaXplKF92ZWN0b3IkYikubGVuZ3RoKCkgKiAwLjU7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGludGVyc2VjdChib3gpIHtcblx0XHR0aGlzLm1pbi5tYXgoYm94Lm1pbik7XG5cdFx0dGhpcy5tYXgubWluKGJveC5tYXgpOyAvLyBlbnN1cmUgdGhhdCBpZiB0aGVyZSBpcyBubyBvdmVybGFwLCB0aGUgcmVzdWx0IGlzIGZ1bGx5IGVtcHR5LCBub3Qgc2xpZ2h0bHkgZW1wdHkgd2l0aCBub24taW5mLytpbmYgdmFsdWVzIHRoYXQgd2lsbCBjYXVzZSBzdWJzZXF1ZW5jZSBpbnRlcnNlY3RzIHRvIGVycm9uZW91c2x5IHJldHVybiB2YWxpZCB2YWx1ZXMuXG5cblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHRoaXMubWFrZUVtcHR5KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1bmlvbihib3gpIHtcblx0XHR0aGlzLm1pbi5taW4oYm94Lm1pbik7XG5cdFx0dGhpcy5tYXgubWF4KGJveC5tYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG1hdHJpeCkge1xuXHRcdC8vIHRyYW5zZm9ybSBvZiBlbXB0eSBib3ggaXMgYW4gZW1wdHkgYm94LlxuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIHRoaXM7IC8vIE5PVEU6IEkgYW0gdXNpbmcgYSBiaW5hcnkgcGF0dGVybiB0byBzcGVjaWZ5IGFsbCAyXjMgY29tYmluYXRpb25zIGJlbG93XG5cblx0XHRfcG9pbnRzWzBdLnNldCh0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMDAwXG5cblxuXHRcdF9wb2ludHNbMV0uc2V0KHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChtYXRyaXgpOyAvLyAwMDFcblxuXG5cdFx0X3BvaW50c1syXS5zZXQodGhpcy5taW4ueCwgdGhpcy5tYXgueSwgdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KG1hdHJpeCk7IC8vIDAxMFxuXG5cblx0XHRfcG9pbnRzWzNdLnNldCh0aGlzLm1pbi54LCB0aGlzLm1heC55LCB0aGlzLm1heC56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMDExXG5cblxuXHRcdF9wb2ludHNbNF0uc2V0KHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWluLnopLmFwcGx5TWF0cml4NChtYXRyaXgpOyAvLyAxMDBcblxuXG5cdFx0X3BvaW50c1s1XS5zZXQodGhpcy5tYXgueCwgdGhpcy5taW4ueSwgdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KG1hdHJpeCk7IC8vIDEwMVxuXG5cblx0XHRfcG9pbnRzWzZdLnNldCh0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMTEwXG5cblxuXHRcdF9wb2ludHNbN10uc2V0KHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChtYXRyaXgpOyAvLyAxMTFcblxuXG5cdFx0dGhpcy5zZXRGcm9tUG9pbnRzKF9wb2ludHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNsYXRlKG9mZnNldCkge1xuXHRcdHRoaXMubWluLmFkZChvZmZzZXQpO1xuXHRcdHRoaXMubWF4LmFkZChvZmZzZXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKGJveCkge1xuXHRcdHJldHVybiBib3gubWluLmVxdWFscyh0aGlzLm1pbikgJiYgYm94Lm1heC5lcXVhbHModGhpcy5tYXgpO1xuXHR9XG5cbn1cblxuQm94My5wcm90b3R5cGUuaXNCb3gzID0gdHJ1ZTtcbmNvbnN0IF9wb2ludHMgPSBbLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpXTtcblxuY29uc3QgX3ZlY3RvciRiID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ib3gkMyA9IC8qQF9fUFVSRV9fKi9uZXcgQm94MygpOyAvLyB0cmlhbmdsZSBjZW50ZXJlZCB2ZXJ0aWNlc1xuXG5cbmNvbnN0IF92MCQyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MSQ3ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MiQzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7IC8vIHRyaWFuZ2xlIGVkZ2UgdmVjdG9yc1xuXG5cbmNvbnN0IF9mMCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfZjEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2YyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9jZW50ZXIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2V4dGVudHMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RyaWFuZ2xlTm9ybWFsID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90ZXN0QXhpcyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5mdW5jdGlvbiBzYXRGb3JBeGVzKGF4ZXMsIHYwLCB2MSwgdjIsIGV4dGVudHMpIHtcblx0Zm9yIChsZXQgaSA9IDAsIGogPSBheGVzLmxlbmd0aCAtIDM7IGkgPD0gajsgaSArPSAzKSB7XG5cdFx0X3Rlc3RBeGlzLmZyb21BcnJheShheGVzLCBpKTsgLy8gcHJvamVjdCB0aGUgYWFiYiBvbnRvIHRoZSBzZXBlcmF0aW5nIGF4aXNcblxuXG5cdFx0Y29uc3QgciA9IGV4dGVudHMueCAqIE1hdGguYWJzKF90ZXN0QXhpcy54KSArIGV4dGVudHMueSAqIE1hdGguYWJzKF90ZXN0QXhpcy55KSArIGV4dGVudHMueiAqIE1hdGguYWJzKF90ZXN0QXhpcy56KTsgLy8gcHJvamVjdCBhbGwgMyB2ZXJ0aWNlcyBvZiB0aGUgdHJpYW5nbGUgb250byB0aGUgc2VwZXJhdGluZyBheGlzXG5cblx0XHRjb25zdCBwMCA9IHYwLmRvdChfdGVzdEF4aXMpO1xuXHRcdGNvbnN0IHAxID0gdjEuZG90KF90ZXN0QXhpcyk7XG5cdFx0Y29uc3QgcDIgPSB2Mi5kb3QoX3Rlc3RBeGlzKTsgLy8gYWN0dWFsIHRlc3QsIGJhc2ljYWxseSBzZWUgaWYgZWl0aGVyIG9mIHRoZSBtb3N0IGV4dHJlbWUgb2YgdGhlIHRyaWFuZ2xlIHBvaW50cyBpbnRlcnNlY3RzIHJcblxuXHRcdGlmIChNYXRoLm1heCgtTWF0aC5tYXgocDAsIHAxLCBwMiksIE1hdGgubWluKHAwLCBwMSwgcDIpKSA+IHIpIHtcblx0XHRcdC8vIHBvaW50cyBvZiB0aGUgcHJvamVjdGVkIHRyaWFuZ2xlIGFyZSBvdXRzaWRlIHRoZSBwcm9qZWN0ZWQgaGFsZi1sZW5ndGggb2YgdGhlIGFhYmJcblx0XHRcdC8vIHRoZSBheGlzIGlzIHNlcGVyYXRpbmcgYW5kIHdlIGNhbiBleGl0XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmNvbnN0IF9ib3gkMiA9IC8qQF9fUFVSRV9fKi9uZXcgQm94MygpO1xuXG5jb25zdCBfdjEkNiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdG9GYXJ0aGVzdFBvaW50ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90b1BvaW50ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFNwaGVyZSB7XG5cdGNvbnN0cnVjdG9yKGNlbnRlciA9IG5ldyBWZWN0b3IzKCksIHJhZGl1cyA9IC0xKSB7XG5cdFx0dGhpcy5jZW50ZXIgPSBjZW50ZXI7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdH1cblxuXHRzZXQoY2VudGVyLCByYWRpdXMpIHtcblx0XHR0aGlzLmNlbnRlci5jb3B5KGNlbnRlcik7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKHBvaW50cywgb3B0aW9uYWxDZW50ZXIpIHtcblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcblxuXHRcdGlmIChvcHRpb25hbENlbnRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjZW50ZXIuY29weShvcHRpb25hbENlbnRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9ib3gkMi5zZXRGcm9tUG9pbnRzKHBvaW50cykuZ2V0Q2VudGVyKGNlbnRlcik7XG5cdFx0fVxuXG5cdFx0bGV0IG1heFJhZGl1c1NxID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQocG9pbnRzW2ldKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQobWF4UmFkaXVzU3EpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShzcGhlcmUpIHtcblx0XHR0aGlzLmNlbnRlci5jb3B5KHNwaGVyZS5jZW50ZXIpO1xuXHRcdHRoaXMucmFkaXVzID0gc3BoZXJlLnJhZGl1cztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmFkaXVzIDwgMDtcblx0fVxuXG5cdG1ha2VFbXB0eSgpIHtcblx0XHR0aGlzLmNlbnRlci5zZXQoMCwgMCwgMCk7XG5cdFx0dGhpcy5yYWRpdXMgPSAtMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnRhaW5zUG9pbnQocG9pbnQpIHtcblx0XHRyZXR1cm4gcG9pbnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpIDw9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQocG9pbnQpIHtcblx0XHRyZXR1cm4gcG9pbnQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlcikgLSB0aGlzLnJhZGl1cztcblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoc3BoZXJlKSB7XG5cdFx0Y29uc3QgcmFkaXVzU3VtID0gdGhpcy5yYWRpdXMgKyBzcGhlcmUucmFkaXVzO1xuXHRcdHJldHVybiBzcGhlcmUuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKSA8PSByYWRpdXNTdW0gKiByYWRpdXNTdW07XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdHJldHVybiBib3guaW50ZXJzZWN0c1NwaGVyZSh0aGlzKTtcblx0fVxuXG5cdGludGVyc2VjdHNQbGFuZShwbGFuZSkge1xuXHRcdHJldHVybiBNYXRoLmFicyhwbGFuZS5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKSA8PSB0aGlzLnJhZGl1cztcblx0fVxuXG5cdGNsYW1wUG9pbnQocG9pbnQsIHRhcmdldCkge1xuXHRcdGNvbnN0IGRlbHRhTGVuZ3RoU3EgPSB0aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZChwb2ludCk7XG5cdFx0dGFyZ2V0LmNvcHkocG9pbnQpO1xuXG5cdFx0aWYgKGRlbHRhTGVuZ3RoU3EgPiB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzKSB7XG5cdFx0XHR0YXJnZXQuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKTtcblx0XHRcdHRhcmdldC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9XG5cblx0Z2V0Qm91bmRpbmdCb3godGFyZ2V0KSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHQvLyBFbXB0eSBzcGhlcmUgcHJvZHVjZXMgZW1wdHkgYm91bmRpbmcgYm94XG5cdFx0XHR0YXJnZXQubWFrZUVtcHR5KCk7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblxuXHRcdHRhcmdldC5zZXQodGhpcy5jZW50ZXIsIHRoaXMuY2VudGVyKTtcblx0XHR0YXJnZXQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpO1xuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobWF0cml4KSB7XG5cdFx0dGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG5cdFx0dGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1cyAqIG1hdHJpeC5nZXRNYXhTY2FsZU9uQXhpcygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNsYXRlKG9mZnNldCkge1xuXHRcdHRoaXMuY2VudGVyLmFkZChvZmZzZXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kQnlQb2ludChwb2ludCkge1xuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p1ai9NYXRoR2VvTGliL2Jsb2IvMjk0MGI5OWI5OWNmZTU3NWRkNDUxMDNlZjIwZjQwMTlkZWUxNWI1NC9zcmMvR2VvbWV0cnkvU3BoZXJlLmNwcCNMNjQ5LUw2NzFcblx0XHRfdG9Qb2ludC5zdWJWZWN0b3JzKHBvaW50LCB0aGlzLmNlbnRlcik7XG5cblx0XHRjb25zdCBsZW5ndGhTcSA9IF90b1BvaW50Lmxlbmd0aFNxKCk7XG5cblx0XHRpZiAobGVuZ3RoU3EgPiB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzKSB7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBNYXRoLnNxcnQobGVuZ3RoU3EpO1xuXHRcdFx0Y29uc3QgbWlzc2luZ1JhZGl1c0hhbGYgPSAobGVuZ3RoIC0gdGhpcy5yYWRpdXMpICogMC41OyAvLyBOdWRnZSB0aGlzIHNwaGVyZSB0b3dhcmRzIHRoZSB0YXJnZXQgcG9pbnQuIEFkZCBoYWxmIHRoZSBtaXNzaW5nIGRpc3RhbmNlIHRvIHJhZGl1cyxcblx0XHRcdC8vIGFuZCB0aGUgb3RoZXIgaGFsZiB0byBwb3NpdGlvbi4gVGhpcyBnaXZlcyBhIHRpZ2h0ZXIgZW5jbG9zdXJlLCBpbnN0ZWFkIG9mIGlmXG5cdFx0XHQvLyB0aGUgd2hvbGUgbWlzc2luZyBkaXN0YW5jZSB3ZXJlIGp1c3QgYWRkZWQgdG8gcmFkaXVzLlxuXG5cdFx0XHR0aGlzLmNlbnRlci5hZGQoX3RvUG9pbnQubXVsdGlwbHlTY2FsYXIobWlzc2luZ1JhZGl1c0hhbGYgLyBsZW5ndGgpKTtcblx0XHRcdHRoaXMucmFkaXVzICs9IG1pc3NpbmdSYWRpdXNIYWxmO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dW5pb24oc3BoZXJlKSB7XG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanVqL01hdGhHZW9MaWIvYmxvYi8yOTQwYjk5Yjk5Y2ZlNTc1ZGQ0NTEwM2VmMjBmNDAxOWRlZTE1YjU0L3NyYy9HZW9tZXRyeS9TcGhlcmUuY3BwI0w3NTktTDc2OVxuXHRcdC8vIFRvIGVuY2xvc2UgYW5vdGhlciBzcGhlcmUgaW50byB0aGlzIHNwaGVyZSwgd2Ugb25seSBuZWVkIHRvIGVuY2xvc2UgdHdvIHBvaW50czpcblx0XHQvLyAxKSBFbmNsb3NlIHRoZSBmYXJ0aGVzdCBwb2ludCBvbiB0aGUgb3RoZXIgc3BoZXJlIGludG8gdGhpcyBzcGhlcmUuXG5cdFx0Ly8gMikgRW5jbG9zZSB0aGUgb3Bwb3NpdGUgcG9pbnQgb2YgdGhlIGZhcnRoZXN0IHBvaW50IGludG8gdGhpcyBzcGhlcmUuXG5cdFx0aWYgKHRoaXMuY2VudGVyLmVxdWFscyhzcGhlcmUuY2VudGVyKSA9PT0gdHJ1ZSkge1xuXHRcdFx0X3RvRmFydGhlc3RQb2ludC5zZXQoMCwgMCwgMSkubXVsdGlwbHlTY2FsYXIoc3BoZXJlLnJhZGl1cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF90b0ZhcnRoZXN0UG9pbnQuc3ViVmVjdG9ycyhzcGhlcmUuY2VudGVyLCB0aGlzLmNlbnRlcikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoc3BoZXJlLnJhZGl1cyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5leHBhbmRCeVBvaW50KF92MSQ2LmNvcHkoc3BoZXJlLmNlbnRlcikuYWRkKF90b0ZhcnRoZXN0UG9pbnQpKTtcblx0XHR0aGlzLmV4cGFuZEJ5UG9pbnQoX3YxJDYuY29weShzcGhlcmUuY2VudGVyKS5zdWIoX3RvRmFydGhlc3RQb2ludCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKHNwaGVyZSkge1xuXHRcdHJldHVybiBzcGhlcmUuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikgJiYgc3BoZXJlLnJhZGl1cyA9PT0gdGhpcy5yYWRpdXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciRhID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9zZWdDZW50ZXIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3NlZ0RpciA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfZGlmZiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfZWRnZTEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2VkZ2UyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ub3JtYWwkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBSYXkge1xuXHRjb25zdHJ1Y3RvcihvcmlnaW4gPSBuZXcgVmVjdG9yMygpLCBkaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygwLCAwLCAtMSkpIHtcblx0XHR0aGlzLm9yaWdpbiA9IG9yaWdpbjtcblx0XHR0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcblx0fVxuXG5cdHNldChvcmlnaW4sIGRpcmVjdGlvbikge1xuXHRcdHRoaXMub3JpZ2luLmNvcHkob3JpZ2luKTtcblx0XHR0aGlzLmRpcmVjdGlvbi5jb3B5KGRpcmVjdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KHJheSkge1xuXHRcdHRoaXMub3JpZ2luLmNvcHkocmF5Lm9yaWdpbik7XG5cdFx0dGhpcy5kaXJlY3Rpb24uY29weShyYXkuZGlyZWN0aW9uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGF0KHQsIHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKTtcblx0fVxuXG5cdGxvb2tBdCh2KSB7XG5cdFx0dGhpcy5kaXJlY3Rpb24uY29weSh2KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVjYXN0KHQpIHtcblx0XHR0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCwgX3ZlY3RvciRhKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9zZXN0UG9pbnRUb1BvaW50KHBvaW50LCB0YXJnZXQpIHtcblx0XHR0YXJnZXQuc3ViVmVjdG9ycyhwb2ludCwgdGhpcy5vcmlnaW4pO1xuXHRcdGNvbnN0IGRpcmVjdGlvbkRpc3RhbmNlID0gdGFyZ2V0LmRvdCh0aGlzLmRpcmVjdGlvbik7XG5cblx0XHRpZiAoZGlyZWN0aW9uRGlzdGFuY2UgPCAwKSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkodGhpcy5vcmlnaW4pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZGlyZWN0aW9uRGlzdGFuY2UpLmFkZCh0aGlzLm9yaWdpbik7XG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQocG9pbnQpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQocG9pbnQpKTtcblx0fVxuXG5cdGRpc3RhbmNlU3FUb1BvaW50KHBvaW50KSB7XG5cdFx0Y29uc3QgZGlyZWN0aW9uRGlzdGFuY2UgPSBfdmVjdG9yJGEuc3ViVmVjdG9ycyhwb2ludCwgdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7IC8vIHBvaW50IGJlaGluZCB0aGUgcmF5XG5cblxuXHRcdGlmIChkaXJlY3Rpb25EaXN0YW5jZSA8IDApIHtcblx0XHRcdHJldHVybiB0aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZChwb2ludCk7XG5cdFx0fVxuXG5cdFx0X3ZlY3RvciRhLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGRpcmVjdGlvbkRpc3RhbmNlKS5hZGQodGhpcy5vcmlnaW4pO1xuXG5cdFx0cmV0dXJuIF92ZWN0b3IkYS5kaXN0YW5jZVRvU3F1YXJlZChwb2ludCk7XG5cdH1cblxuXHRkaXN0YW5jZVNxVG9TZWdtZW50KHYwLCB2MSwgb3B0aW9uYWxQb2ludE9uUmF5LCBvcHRpb25hbFBvaW50T25TZWdtZW50KSB7XG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcG1qb25pYWsvR2VvbWV0cmljVG9vbHMvYmxvYi9tYXN0ZXIvR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9HdGVEaXN0UmF5U2VnbWVudC5oXG5cdFx0Ly8gSXQgcmV0dXJucyB0aGUgbWluIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJheSBhbmQgdGhlIHNlZ21lbnRcblx0XHQvLyBkZWZpbmVkIGJ5IHYwIGFuZCB2MVxuXHRcdC8vIEl0IGNhbiBhbHNvIHNldCB0d28gb3B0aW9uYWwgdGFyZ2V0cyA6XG5cdFx0Ly8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgcmF5XG5cdFx0Ly8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgc2VnbWVudFxuXHRcdF9zZWdDZW50ZXIuY29weSh2MCkuYWRkKHYxKS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXG5cdFx0X3NlZ0Rpci5jb3B5KHYxKS5zdWIodjApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0X2RpZmYuY29weSh0aGlzLm9yaWdpbikuc3ViKF9zZWdDZW50ZXIpO1xuXG5cdFx0Y29uc3Qgc2VnRXh0ZW50ID0gdjAuZGlzdGFuY2VUbyh2MSkgKiAwLjU7XG5cdFx0Y29uc3QgYTAxID0gLXRoaXMuZGlyZWN0aW9uLmRvdChfc2VnRGlyKTtcblxuXHRcdGNvbnN0IGIwID0gX2RpZmYuZG90KHRoaXMuZGlyZWN0aW9uKTtcblxuXHRcdGNvbnN0IGIxID0gLV9kaWZmLmRvdChfc2VnRGlyKTtcblxuXHRcdGNvbnN0IGMgPSBfZGlmZi5sZW5ndGhTcSgpO1xuXG5cdFx0Y29uc3QgZGV0ID0gTWF0aC5hYnMoMSAtIGEwMSAqIGEwMSk7XG5cdFx0bGV0IHMwLCBzMSwgc3FyRGlzdCwgZXh0RGV0O1xuXG5cdFx0aWYgKGRldCA+IDApIHtcblx0XHRcdC8vIFRoZSByYXkgYW5kIHNlZ21lbnQgYXJlIG5vdCBwYXJhbGxlbC5cblx0XHRcdHMwID0gYTAxICogYjEgLSBiMDtcblx0XHRcdHMxID0gYTAxICogYjAgLSBiMTtcblx0XHRcdGV4dERldCA9IHNlZ0V4dGVudCAqIGRldDtcblxuXHRcdFx0aWYgKHMwID49IDApIHtcblx0XHRcdFx0aWYgKHMxID49IC1leHREZXQpIHtcblx0XHRcdFx0XHRpZiAoczEgPD0gZXh0RGV0KSB7XG5cdFx0XHRcdFx0XHQvLyByZWdpb24gMFxuXHRcdFx0XHRcdFx0Ly8gTWluaW11bSBhdCBpbnRlcmlvciBwb2ludHMgb2YgcmF5IGFuZCBzZWdtZW50LlxuXHRcdFx0XHRcdFx0Y29uc3QgaW52RGV0ID0gMSAvIGRldDtcblx0XHRcdFx0XHRcdHMwICo9IGludkRldDtcblx0XHRcdFx0XHRcdHMxICo9IGludkRldDtcblx0XHRcdFx0XHRcdHNxckRpc3QgPSBzMCAqIChzMCArIGEwMSAqIHMxICsgMiAqIGIwKSArIHMxICogKGEwMSAqIHMwICsgczEgKyAyICogYjEpICsgYztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gcmVnaW9uIDFcblx0XHRcdFx0XHRcdHMxID0gc2VnRXh0ZW50O1xuXHRcdFx0XHRcdFx0czAgPSBNYXRoLm1heCgwLCAtKGEwMSAqIHMxICsgYjApKTtcblx0XHRcdFx0XHRcdHNxckRpc3QgPSAtczAgKiBzMCArIHMxICogKHMxICsgMiAqIGIxKSArIGM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlZ2lvbiA1XG5cdFx0XHRcdFx0czEgPSAtc2VnRXh0ZW50O1xuXHRcdFx0XHRcdHMwID0gTWF0aC5tYXgoMCwgLShhMDEgKiBzMSArIGIwKSk7XG5cdFx0XHRcdFx0c3FyRGlzdCA9IC1zMCAqIHMwICsgczEgKiAoczEgKyAyICogYjEpICsgYztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHMxIDw9IC1leHREZXQpIHtcblx0XHRcdFx0XHQvLyByZWdpb24gNFxuXHRcdFx0XHRcdHMwID0gTWF0aC5tYXgoMCwgLSgtYTAxICogc2VnRXh0ZW50ICsgYjApKTtcblx0XHRcdFx0XHRzMSA9IHMwID4gMCA/IC1zZWdFeHRlbnQgOiBNYXRoLm1pbihNYXRoLm1heCgtc2VnRXh0ZW50LCAtYjEpLCBzZWdFeHRlbnQpO1xuXHRcdFx0XHRcdHNxckRpc3QgPSAtczAgKiBzMCArIHMxICogKHMxICsgMiAqIGIxKSArIGM7XG5cdFx0XHRcdH0gZWxzZSBpZiAoczEgPD0gZXh0RGV0KSB7XG5cdFx0XHRcdFx0Ly8gcmVnaW9uIDNcblx0XHRcdFx0XHRzMCA9IDA7XG5cdFx0XHRcdFx0czEgPSBNYXRoLm1pbihNYXRoLm1heCgtc2VnRXh0ZW50LCAtYjEpLCBzZWdFeHRlbnQpO1xuXHRcdFx0XHRcdHNxckRpc3QgPSBzMSAqIChzMSArIDIgKiBiMSkgKyBjO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlZ2lvbiAyXG5cdFx0XHRcdFx0czAgPSBNYXRoLm1heCgwLCAtKGEwMSAqIHNlZ0V4dGVudCArIGIwKSk7XG5cdFx0XHRcdFx0czEgPSBzMCA+IDAgPyBzZWdFeHRlbnQgOiBNYXRoLm1pbihNYXRoLm1heCgtc2VnRXh0ZW50LCAtYjEpLCBzZWdFeHRlbnQpO1xuXHRcdFx0XHRcdHNxckRpc3QgPSAtczAgKiBzMCArIHMxICogKHMxICsgMiAqIGIxKSArIGM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUmF5IGFuZCBzZWdtZW50IGFyZSBwYXJhbGxlbC5cblx0XHRcdHMxID0gYTAxID4gMCA/IC1zZWdFeHRlbnQgOiBzZWdFeHRlbnQ7XG5cdFx0XHRzMCA9IE1hdGgubWF4KDAsIC0oYTAxICogczEgKyBiMCkpO1xuXHRcdFx0c3FyRGlzdCA9IC1zMCAqIHMwICsgczEgKiAoczEgKyAyICogYjEpICsgYztcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uYWxQb2ludE9uUmF5KSB7XG5cdFx0XHRvcHRpb25hbFBvaW50T25SYXkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoczApLmFkZCh0aGlzLm9yaWdpbik7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbmFsUG9pbnRPblNlZ21lbnQpIHtcblx0XHRcdG9wdGlvbmFsUG9pbnRPblNlZ21lbnQuY29weShfc2VnRGlyKS5tdWx0aXBseVNjYWxhcihzMSkuYWRkKF9zZWdDZW50ZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzcXJEaXN0O1xuXHR9XG5cblx0aW50ZXJzZWN0U3BoZXJlKHNwaGVyZSwgdGFyZ2V0KSB7XG5cdFx0X3ZlY3RvciRhLnN1YlZlY3RvcnMoc3BoZXJlLmNlbnRlciwgdGhpcy5vcmlnaW4pO1xuXG5cdFx0Y29uc3QgdGNhID0gX3ZlY3RvciRhLmRvdCh0aGlzLmRpcmVjdGlvbik7XG5cblx0XHRjb25zdCBkMiA9IF92ZWN0b3IkYS5kb3QoX3ZlY3RvciRhKSAtIHRjYSAqIHRjYTtcblx0XHRjb25zdCByYWRpdXMyID0gc3BoZXJlLnJhZGl1cyAqIHNwaGVyZS5yYWRpdXM7XG5cdFx0aWYgKGQyID4gcmFkaXVzMikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgdGhjID0gTWF0aC5zcXJ0KHJhZGl1czIgLSBkMik7IC8vIHQwID0gZmlyc3QgaW50ZXJzZWN0IHBvaW50IC0gZW50cmFuY2Ugb24gZnJvbnQgb2Ygc3BoZXJlXG5cblx0XHRjb25zdCB0MCA9IHRjYSAtIHRoYzsgLy8gdDEgPSBzZWNvbmQgaW50ZXJzZWN0IHBvaW50IC0gZXhpdCBwb2ludCBvbiBiYWNrIG9mIHNwaGVyZVxuXG5cdFx0Y29uc3QgdDEgPSB0Y2EgKyB0aGM7IC8vIHRlc3QgdG8gc2VlIGlmIGJvdGggdDAgYW5kIHQxIGFyZSBiZWhpbmQgdGhlIHJheSAtIGlmIHNvLCByZXR1cm4gbnVsbFxuXG5cdFx0aWYgKHQwIDwgMCAmJiB0MSA8IDApIHJldHVybiBudWxsOyAvLyB0ZXN0IHRvIHNlZSBpZiB0MCBpcyBiZWhpbmQgdGhlIHJheTpcblx0XHQvLyBpZiBpdCBpcywgdGhlIHJheSBpcyBpbnNpZGUgdGhlIHNwaGVyZSwgc28gcmV0dXJuIHRoZSBzZWNvbmQgZXhpdCBwb2ludCBzY2FsZWQgYnkgdDEsXG5cdFx0Ly8gaW4gb3JkZXIgdG8gYWx3YXlzIHJldHVybiBhbiBpbnRlcnNlY3QgcG9pbnQgdGhhdCBpcyBpbiBmcm9udCBvZiB0aGUgcmF5LlxuXG5cdFx0aWYgKHQwIDwgMCkgcmV0dXJuIHRoaXMuYXQodDEsIHRhcmdldCk7IC8vIGVsc2UgdDAgaXMgaW4gZnJvbnQgb2YgdGhlIHJheSwgc28gcmV0dXJuIHRoZSBmaXJzdCBjb2xsaXNpb24gcG9pbnQgc2NhbGVkIGJ5IHQwXG5cblx0XHRyZXR1cm4gdGhpcy5hdCh0MCwgdGFyZ2V0KTtcblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoc3BoZXJlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoc3BoZXJlLmNlbnRlcikgPD0gc3BoZXJlLnJhZGl1cyAqIHNwaGVyZS5yYWRpdXM7XG5cdH1cblxuXHRkaXN0YW5jZVRvUGxhbmUocGxhbmUpIHtcblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHBsYW5lLm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO1xuXG5cdFx0aWYgKGRlbm9taW5hdG9yID09PSAwKSB7XG5cdFx0XHQvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luXG5cdFx0XHRpZiAocGxhbmUuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKSA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdH0gLy8gTnVsbCBpcyBwcmVmZXJhYmxlIHRvIHVuZGVmaW5lZCBzaW5jZSB1bmRlZmluZWQgbWVhbnMuLi4uIGl0IGlzIHVuZGVmaW5lZFxuXG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSAtKHRoaXMub3JpZ2luLmRvdChwbGFuZS5ub3JtYWwpICsgcGxhbmUuY29uc3RhbnQpIC8gZGVub21pbmF0b3I7IC8vIFJldHVybiBpZiB0aGUgcmF5IG5ldmVyIGludGVyc2VjdHMgdGhlIHBsYW5lXG5cblx0XHRyZXR1cm4gdCA+PSAwID8gdCA6IG51bGw7XG5cdH1cblxuXHRpbnRlcnNlY3RQbGFuZShwbGFuZSwgdGFyZ2V0KSB7XG5cdFx0Y29uc3QgdCA9IHRoaXMuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKTtcblxuXHRcdGlmICh0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hdCh0LCB0YXJnZXQpO1xuXHR9XG5cblx0aW50ZXJzZWN0c1BsYW5lKHBsYW5lKSB7XG5cdFx0Ly8gY2hlY2sgaWYgdGhlIHJheSBsaWVzIG9uIHRoZSBwbGFuZSBmaXJzdFxuXHRcdGNvbnN0IGRpc3RUb1BvaW50ID0gcGxhbmUuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtcblxuXHRcdGlmIChkaXN0VG9Qb2ludCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVub21pbmF0b3IgPSBwbGFuZS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtcblxuXHRcdGlmIChkZW5vbWluYXRvciAqIGRpc3RUb1BvaW50IDwgMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSAvLyByYXkgb3JpZ2luIGlzIGJlaGluZCB0aGUgcGxhbmUgKGFuZCBpcyBwb2ludGluZyBiZWhpbmQgaXQpXG5cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGludGVyc2VjdEJveChib3gsIHRhcmdldCkge1xuXHRcdGxldCB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcblx0XHRjb25zdCBpbnZkaXJ4ID0gMSAvIHRoaXMuZGlyZWN0aW9uLngsXG5cdFx0XHRcdFx0aW52ZGlyeSA9IDEgLyB0aGlzLmRpcmVjdGlvbi55LFxuXHRcdFx0XHRcdGludmRpcnogPSAxIC8gdGhpcy5kaXJlY3Rpb24uejtcblx0XHRjb25zdCBvcmlnaW4gPSB0aGlzLm9yaWdpbjtcblxuXHRcdGlmIChpbnZkaXJ4ID49IDApIHtcblx0XHRcdHRtaW4gPSAoYm94Lm1pbi54IC0gb3JpZ2luLngpICogaW52ZGlyeDtcblx0XHRcdHRtYXggPSAoYm94Lm1heC54IC0gb3JpZ2luLngpICogaW52ZGlyeDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG1pbiA9IChib3gubWF4LnggLSBvcmlnaW4ueCkgKiBpbnZkaXJ4O1xuXHRcdFx0dG1heCA9IChib3gubWluLnggLSBvcmlnaW4ueCkgKiBpbnZkaXJ4O1xuXHRcdH1cblxuXHRcdGlmIChpbnZkaXJ5ID49IDApIHtcblx0XHRcdHR5bWluID0gKGJveC5taW4ueSAtIG9yaWdpbi55KSAqIGludmRpcnk7XG5cdFx0XHR0eW1heCA9IChib3gubWF4LnkgLSBvcmlnaW4ueSkgKiBpbnZkaXJ5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eW1pbiA9IChib3gubWF4LnkgLSBvcmlnaW4ueSkgKiBpbnZkaXJ5O1xuXHRcdFx0dHltYXggPSAoYm94Lm1pbi55IC0gb3JpZ2luLnkpICogaW52ZGlyeTtcblx0XHR9XG5cblx0XHRpZiAodG1pbiA+IHR5bWF4IHx8IHR5bWluID4gdG1heCkgcmV0dXJuIG51bGw7IC8vIFRoZXNlIGxpbmVzIGFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRtaW4gb3IgdG1heCBpcyBOYU5cblx0XHQvLyAocmVzdWx0IG9mIDAgKiBJbmZpbml0eSkuIHggIT09IHggcmV0dXJucyB0cnVlIGlmIHggaXMgTmFOXG5cblx0XHRpZiAodHltaW4gPiB0bWluIHx8IHRtaW4gIT09IHRtaW4pIHRtaW4gPSB0eW1pbjtcblx0XHRpZiAodHltYXggPCB0bWF4IHx8IHRtYXggIT09IHRtYXgpIHRtYXggPSB0eW1heDtcblxuXHRcdGlmIChpbnZkaXJ6ID49IDApIHtcblx0XHRcdHR6bWluID0gKGJveC5taW4ueiAtIG9yaWdpbi56KSAqIGludmRpcno7XG5cdFx0XHR0em1heCA9IChib3gubWF4LnogLSBvcmlnaW4ueikgKiBpbnZkaXJ6O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0em1pbiA9IChib3gubWF4LnogLSBvcmlnaW4ueikgKiBpbnZkaXJ6O1xuXHRcdFx0dHptYXggPSAoYm94Lm1pbi56IC0gb3JpZ2luLnopICogaW52ZGlyejtcblx0XHR9XG5cblx0XHRpZiAodG1pbiA+IHR6bWF4IHx8IHR6bWluID4gdG1heCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB0bWluID0gdHptaW47XG5cdFx0aWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB0bWF4ID0gdHptYXg7IC8vcmV0dXJuIHBvaW50IGNsb3Nlc3QgdG8gdGhlIHJheSAocG9zaXRpdmUgc2lkZSlcblxuXHRcdGlmICh0bWF4IDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIHRoaXMuYXQodG1pbiA+PSAwID8gdG1pbiA6IHRtYXgsIHRhcmdldCk7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdHJldHVybiB0aGlzLmludGVyc2VjdEJveChib3gsIF92ZWN0b3IkYSkgIT09IG51bGw7XG5cdH1cblxuXHRpbnRlcnNlY3RUcmlhbmdsZShhLCBiLCBjLCBiYWNrZmFjZUN1bGxpbmcsIHRhcmdldCkge1xuXHRcdC8vIENvbXB1dGUgdGhlIG9mZnNldCBvcmlnaW4sIGVkZ2VzLCBhbmQgbm9ybWFsLlxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Btam9uaWFrL0dlb21ldHJpY1Rvb2xzL2Jsb2IvbWFzdGVyL0dURW5naW5lL0luY2x1ZGUvTWF0aGVtYXRpY3MvR3RlSW50clJheTNUcmlhbmdsZTMuaFxuXHRcdF9lZGdlMS5zdWJWZWN0b3JzKGIsIGEpO1xuXG5cdFx0X2VkZ2UyLnN1YlZlY3RvcnMoYywgYSk7XG5cblx0XHRfbm9ybWFsJDEuY3Jvc3NWZWN0b3JzKF9lZGdlMSwgX2VkZ2UyKTsgLy8gU29sdmUgUSArIHQqRCA9IGIxKkUxICsgYjIqRTIgKFEgPSBrRGlmZiwgRCA9IHJheSBkaXJlY3Rpb24sXG5cdFx0Ly8gRTEgPSBrRWRnZTEsIEUyID0ga0VkZ2UyLCBOID0gQ3Jvc3MoRTEsRTIpKSBieVxuXHRcdC8vXHQgfERvdChELE4pfCpiMSA9IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKFEsRTIpKVxuXHRcdC8vXHQgfERvdChELE4pfCpiMiA9IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKEUxLFEpKVxuXHRcdC8vXHQgfERvdChELE4pfCp0ID0gLXNpZ24oRG90KEQsTikpKkRvdChRLE4pXG5cblxuXHRcdGxldCBEZE4gPSB0aGlzLmRpcmVjdGlvbi5kb3QoX25vcm1hbCQxKTtcblx0XHRsZXQgc2lnbjtcblxuXHRcdGlmIChEZE4gPiAwKSB7XG5cdFx0XHRpZiAoYmFja2ZhY2VDdWxsaW5nKSByZXR1cm4gbnVsbDtcblx0XHRcdHNpZ24gPSAxO1xuXHRcdH0gZWxzZSBpZiAoRGROIDwgMCkge1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdFx0RGROID0gLURkTjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0X2RpZmYuc3ViVmVjdG9ycyh0aGlzLm9yaWdpbiwgYSk7XG5cblx0XHRjb25zdCBEZFF4RTIgPSBzaWduICogdGhpcy5kaXJlY3Rpb24uZG90KF9lZGdlMi5jcm9zc1ZlY3RvcnMoX2RpZmYsIF9lZGdlMikpOyAvLyBiMSA8IDAsIG5vIGludGVyc2VjdGlvblxuXG5cdFx0aWYgKERkUXhFMiA8IDApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IERkRTF4USA9IHNpZ24gKiB0aGlzLmRpcmVjdGlvbi5kb3QoX2VkZ2UxLmNyb3NzKF9kaWZmKSk7IC8vIGIyIDwgMCwgbm8gaW50ZXJzZWN0aW9uXG5cblx0XHRpZiAoRGRFMXhRIDwgMCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSAvLyBiMStiMiA+IDEsIG5vIGludGVyc2VjdGlvblxuXG5cblx0XHRpZiAoRGRReEUyICsgRGRFMXhRID4gRGROKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IC8vIExpbmUgaW50ZXJzZWN0cyB0cmlhbmdsZSwgY2hlY2sgaWYgcmF5IGRvZXMuXG5cblxuXHRcdGNvbnN0IFFkTiA9IC1zaWduICogX2RpZmYuZG90KF9ub3JtYWwkMSk7IC8vIHQgPCAwLCBubyBpbnRlcnNlY3Rpb25cblxuXG5cdFx0aWYgKFFkTiA8IDApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gLy8gUmF5IGludGVyc2VjdHMgdHJpYW5nbGUuXG5cblxuXHRcdHJldHVybiB0aGlzLmF0KFFkTiAvIERkTiwgdGFyZ2V0KTtcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtYXRyaXg0KSB7XG5cdFx0dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KG1hdHJpeDQpO1xuXHRcdHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtYXRyaXg0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhyYXkpIHtcblx0XHRyZXR1cm4gcmF5Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pICYmIHJheS5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxufVxuXG5jbGFzcyBNYXRyaXg0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbGVtZW50cyA9IFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcblxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH1cblxuXHRzZXQobjExLCBuMTIsIG4xMywgbjE0LCBuMjEsIG4yMiwgbjIzLCBuMjQsIG4zMSwgbjMyLCBuMzMsIG4zNCwgbjQxLCBuNDIsIG40MywgbjQ0KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHRlWzBdID0gbjExO1xuXHRcdHRlWzRdID0gbjEyO1xuXHRcdHRlWzhdID0gbjEzO1xuXHRcdHRlWzEyXSA9IG4xNDtcblx0XHR0ZVsxXSA9IG4yMTtcblx0XHR0ZVs1XSA9IG4yMjtcblx0XHR0ZVs5XSA9IG4yMztcblx0XHR0ZVsxM10gPSBuMjQ7XG5cdFx0dGVbMl0gPSBuMzE7XG5cdFx0dGVbNl0gPSBuMzI7XG5cdFx0dGVbMTBdID0gbjMzO1xuXHRcdHRlWzE0XSA9IG4zNDtcblx0XHR0ZVszXSA9IG40MTtcblx0XHR0ZVs3XSA9IG40Mjtcblx0XHR0ZVsxMV0gPSBuNDM7XG5cdFx0dGVbMTVdID0gbjQ0O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWRlbnRpdHkoKSB7XG5cdFx0dGhpcy5zZXQoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyk7XG5cdH1cblxuXHRjb3B5KG0pIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXHRcdHRlWzBdID0gbWVbMF07XG5cdFx0dGVbMV0gPSBtZVsxXTtcblx0XHR0ZVsyXSA9IG1lWzJdO1xuXHRcdHRlWzNdID0gbWVbM107XG5cdFx0dGVbNF0gPSBtZVs0XTtcblx0XHR0ZVs1XSA9IG1lWzVdO1xuXHRcdHRlWzZdID0gbWVbNl07XG5cdFx0dGVbN10gPSBtZVs3XTtcblx0XHR0ZVs4XSA9IG1lWzhdO1xuXHRcdHRlWzldID0gbWVbOV07XG5cdFx0dGVbMTBdID0gbWVbMTBdO1xuXHRcdHRlWzExXSA9IG1lWzExXTtcblx0XHR0ZVsxMl0gPSBtZVsxMl07XG5cdFx0dGVbMTNdID0gbWVbMTNdO1xuXHRcdHRlWzE0XSA9IG1lWzE0XTtcblx0XHR0ZVsxNV0gPSBtZVsxNV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5UG9zaXRpb24obSkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cyxcblx0XHRcdFx0XHRtZSA9IG0uZWxlbWVudHM7XG5cdFx0dGVbMTJdID0gbWVbMTJdO1xuXHRcdHRlWzEzXSA9IG1lWzEzXTtcblx0XHR0ZVsxNF0gPSBtZVsxNF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tTWF0cml4MyhtKSB7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXHRcdHRoaXMuc2V0KG1lWzBdLCBtZVszXSwgbWVbNl0sIDAsIG1lWzFdLCBtZVs0XSwgbWVbN10sIDAsIG1lWzJdLCBtZVs1XSwgbWVbOF0sIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXh0cmFjdEJhc2lzKHhBeGlzLCB5QXhpcywgekF4aXMpIHtcblx0XHR4QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsIDApO1xuXHRcdHlBeGlzLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywgMSk7XG5cdFx0ekF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLCAyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VCYXNpcyh4QXhpcywgeUF4aXMsIHpBeGlzKSB7XG5cdFx0dGhpcy5zZXQoeEF4aXMueCwgeUF4aXMueCwgekF4aXMueCwgMCwgeEF4aXMueSwgeUF4aXMueSwgekF4aXMueSwgMCwgeEF4aXMueiwgeUF4aXMueiwgekF4aXMueiwgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHRyYWN0Um90YXRpb24obSkge1xuXHRcdC8vIHRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgcmVmbGVjdGlvbiBtYXRyaWNlc1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHRjb25zdCBzY2FsZVggPSAxIC8gX3YxJDUuc2V0RnJvbU1hdHJpeENvbHVtbihtLCAwKS5sZW5ndGgoKTtcblxuXHRcdGNvbnN0IHNjYWxlWSA9IDEgLyBfdjEkNS5zZXRGcm9tTWF0cml4Q29sdW1uKG0sIDEpLmxlbmd0aCgpO1xuXG5cdFx0Y29uc3Qgc2NhbGVaID0gMSAvIF92MSQ1LnNldEZyb21NYXRyaXhDb2x1bW4obSwgMikubGVuZ3RoKCk7XG5cblx0XHR0ZVswXSA9IG1lWzBdICogc2NhbGVYO1xuXHRcdHRlWzFdID0gbWVbMV0gKiBzY2FsZVg7XG5cdFx0dGVbMl0gPSBtZVsyXSAqIHNjYWxlWDtcblx0XHR0ZVszXSA9IDA7XG5cdFx0dGVbNF0gPSBtZVs0XSAqIHNjYWxlWTtcblx0XHR0ZVs1XSA9IG1lWzVdICogc2NhbGVZO1xuXHRcdHRlWzZdID0gbWVbNl0gKiBzY2FsZVk7XG5cdFx0dGVbN10gPSAwO1xuXHRcdHRlWzhdID0gbWVbOF0gKiBzY2FsZVo7XG5cdFx0dGVbOV0gPSBtZVs5XSAqIHNjYWxlWjtcblx0XHR0ZVsxMF0gPSBtZVsxMF0gKiBzY2FsZVo7XG5cdFx0dGVbMTFdID0gMDtcblx0XHR0ZVsxMl0gPSAwO1xuXHRcdHRlWzEzXSA9IDA7XG5cdFx0dGVbMTRdID0gMDtcblx0XHR0ZVsxNV0gPSAxO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZVJvdGF0aW9uRnJvbUV1bGVyKGV1bGVyKSB7XG5cdFx0aWYgKCEoZXVsZXIgJiYgZXVsZXIuaXNFdWxlcikpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHggPSBldWxlci54LFxuXHRcdFx0XHRcdHkgPSBldWxlci55LFxuXHRcdFx0XHRcdHogPSBldWxlci56O1xuXHRcdGNvbnN0IGEgPSBNYXRoLmNvcyh4KSxcblx0XHRcdFx0XHRiID0gTWF0aC5zaW4oeCk7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKHkpLFxuXHRcdFx0XHRcdGQgPSBNYXRoLnNpbih5KTtcblx0XHRjb25zdCBlID0gTWF0aC5jb3MoeiksXG5cdFx0XHRcdFx0ZiA9IE1hdGguc2luKHopO1xuXG5cdFx0aWYgKGV1bGVyLm9yZGVyID09PSAnWFlaJykge1xuXHRcdFx0Y29uc3QgYWUgPSBhICogZSxcblx0XHRcdFx0XHRcdGFmID0gYSAqIGYsXG5cdFx0XHRcdFx0XHRiZSA9IGIgKiBlLFxuXHRcdFx0XHRcdFx0YmYgPSBiICogZjtcblx0XHRcdHRlWzBdID0gYyAqIGU7XG5cdFx0XHR0ZVs0XSA9IC1jICogZjtcblx0XHRcdHRlWzhdID0gZDtcblx0XHRcdHRlWzFdID0gYWYgKyBiZSAqIGQ7XG5cdFx0XHR0ZVs1XSA9IGFlIC0gYmYgKiBkO1xuXHRcdFx0dGVbOV0gPSAtYiAqIGM7XG5cdFx0XHR0ZVsyXSA9IGJmIC0gYWUgKiBkO1xuXHRcdFx0dGVbNl0gPSBiZSArIGFmICogZDtcblx0XHRcdHRlWzEwXSA9IGEgKiBjO1xuXHRcdH0gZWxzZSBpZiAoZXVsZXIub3JkZXIgPT09ICdZWFonKSB7XG5cdFx0XHRjb25zdCBjZSA9IGMgKiBlLFxuXHRcdFx0XHRcdFx0Y2YgPSBjICogZixcblx0XHRcdFx0XHRcdGRlID0gZCAqIGUsXG5cdFx0XHRcdFx0XHRkZiA9IGQgKiBmO1xuXHRcdFx0dGVbMF0gPSBjZSArIGRmICogYjtcblx0XHRcdHRlWzRdID0gZGUgKiBiIC0gY2Y7XG5cdFx0XHR0ZVs4XSA9IGEgKiBkO1xuXHRcdFx0dGVbMV0gPSBhICogZjtcblx0XHRcdHRlWzVdID0gYSAqIGU7XG5cdFx0XHR0ZVs5XSA9IC1iO1xuXHRcdFx0dGVbMl0gPSBjZiAqIGIgLSBkZTtcblx0XHRcdHRlWzZdID0gZGYgKyBjZSAqIGI7XG5cdFx0XHR0ZVsxMF0gPSBhICogYztcblx0XHR9IGVsc2UgaWYgKGV1bGVyLm9yZGVyID09PSAnWlhZJykge1xuXHRcdFx0Y29uc3QgY2UgPSBjICogZSxcblx0XHRcdFx0XHRcdGNmID0gYyAqIGYsXG5cdFx0XHRcdFx0XHRkZSA9IGQgKiBlLFxuXHRcdFx0XHRcdFx0ZGYgPSBkICogZjtcblx0XHRcdHRlWzBdID0gY2UgLSBkZiAqIGI7XG5cdFx0XHR0ZVs0XSA9IC1hICogZjtcblx0XHRcdHRlWzhdID0gZGUgKyBjZiAqIGI7XG5cdFx0XHR0ZVsxXSA9IGNmICsgZGUgKiBiO1xuXHRcdFx0dGVbNV0gPSBhICogZTtcblx0XHRcdHRlWzldID0gZGYgLSBjZSAqIGI7XG5cdFx0XHR0ZVsyXSA9IC1hICogZDtcblx0XHRcdHRlWzZdID0gYjtcblx0XHRcdHRlWzEwXSA9IGEgKiBjO1xuXHRcdH0gZWxzZSBpZiAoZXVsZXIub3JkZXIgPT09ICdaWVgnKSB7XG5cdFx0XHRjb25zdCBhZSA9IGEgKiBlLFxuXHRcdFx0XHRcdFx0YWYgPSBhICogZixcblx0XHRcdFx0XHRcdGJlID0gYiAqIGUsXG5cdFx0XHRcdFx0XHRiZiA9IGIgKiBmO1xuXHRcdFx0dGVbMF0gPSBjICogZTtcblx0XHRcdHRlWzRdID0gYmUgKiBkIC0gYWY7XG5cdFx0XHR0ZVs4XSA9IGFlICogZCArIGJmO1xuXHRcdFx0dGVbMV0gPSBjICogZjtcblx0XHRcdHRlWzVdID0gYmYgKiBkICsgYWU7XG5cdFx0XHR0ZVs5XSA9IGFmICogZCAtIGJlO1xuXHRcdFx0dGVbMl0gPSAtZDtcblx0XHRcdHRlWzZdID0gYiAqIGM7XG5cdFx0XHR0ZVsxMF0gPSBhICogYztcblx0XHR9IGVsc2UgaWYgKGV1bGVyLm9yZGVyID09PSAnWVpYJykge1xuXHRcdFx0Y29uc3QgYWMgPSBhICogYyxcblx0XHRcdFx0XHRcdGFkID0gYSAqIGQsXG5cdFx0XHRcdFx0XHRiYyA9IGIgKiBjLFxuXHRcdFx0XHRcdFx0YmQgPSBiICogZDtcblx0XHRcdHRlWzBdID0gYyAqIGU7XG5cdFx0XHR0ZVs0XSA9IGJkIC0gYWMgKiBmO1xuXHRcdFx0dGVbOF0gPSBiYyAqIGYgKyBhZDtcblx0XHRcdHRlWzFdID0gZjtcblx0XHRcdHRlWzVdID0gYSAqIGU7XG5cdFx0XHR0ZVs5XSA9IC1iICogZTtcblx0XHRcdHRlWzJdID0gLWQgKiBlO1xuXHRcdFx0dGVbNl0gPSBhZCAqIGYgKyBiYztcblx0XHRcdHRlWzEwXSA9IGFjIC0gYmQgKiBmO1xuXHRcdH0gZWxzZSBpZiAoZXVsZXIub3JkZXIgPT09ICdYWlknKSB7XG5cdFx0XHRjb25zdCBhYyA9IGEgKiBjLFxuXHRcdFx0XHRcdFx0YWQgPSBhICogZCxcblx0XHRcdFx0XHRcdGJjID0gYiAqIGMsXG5cdFx0XHRcdFx0XHRiZCA9IGIgKiBkO1xuXHRcdFx0dGVbMF0gPSBjICogZTtcblx0XHRcdHRlWzRdID0gLWY7XG5cdFx0XHR0ZVs4XSA9IGQgKiBlO1xuXHRcdFx0dGVbMV0gPSBhYyAqIGYgKyBiZDtcblx0XHRcdHRlWzVdID0gYSAqIGU7XG5cdFx0XHR0ZVs5XSA9IGFkICogZiAtIGJjO1xuXHRcdFx0dGVbMl0gPSBiYyAqIGYgLSBhZDtcblx0XHRcdHRlWzZdID0gYiAqIGU7XG5cdFx0XHR0ZVsxMF0gPSBiZCAqIGYgKyBhYztcblx0XHR9IC8vIGJvdHRvbSByb3dcblxuXG5cdFx0dGVbM10gPSAwO1xuXHRcdHRlWzddID0gMDtcblx0XHR0ZVsxMV0gPSAwOyAvLyBsYXN0IGNvbHVtblxuXG5cdFx0dGVbMTJdID0gMDtcblx0XHR0ZVsxM10gPSAwO1xuXHRcdHRlWzE0XSA9IDA7XG5cdFx0dGVbMTVdID0gMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHEpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wb3NlKF96ZXJvLCBxLCBfb25lKTtcblx0fVxuXG5cdGxvb2tBdChleWUsIHRhcmdldCwgdXApIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRfei5zdWJWZWN0b3JzKGV5ZSwgdGFyZ2V0KTtcblxuXHRcdGlmIChfei5sZW5ndGhTcSgpID09PSAwKSB7XG5cdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cblx0XHRcdF96LnogPSAxO1xuXHRcdH1cblxuXHRcdF96Lm5vcm1hbGl6ZSgpO1xuXG5cdFx0X3guY3Jvc3NWZWN0b3JzKHVwLCBfeik7XG5cblx0XHRpZiAoX3gubGVuZ3RoU3EoKSA9PT0gMCkge1xuXHRcdFx0Ly8gdXAgYW5kIHogYXJlIHBhcmFsbGVsXG5cdFx0XHRpZiAoTWF0aC5hYnModXAueikgPT09IDEpIHtcblx0XHRcdFx0X3oueCArPSAwLjAwMDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfei56ICs9IDAuMDAwMTtcblx0XHRcdH1cblxuXHRcdFx0X3oubm9ybWFsaXplKCk7XG5cblx0XHRcdF94LmNyb3NzVmVjdG9ycyh1cCwgX3opO1xuXHRcdH1cblxuXHRcdF94Lm5vcm1hbGl6ZSgpO1xuXG5cdFx0X3kuY3Jvc3NWZWN0b3JzKF96LCBfeCk7XG5cblx0XHR0ZVswXSA9IF94Lng7XG5cdFx0dGVbNF0gPSBfeS54O1xuXHRcdHRlWzhdID0gX3oueDtcblx0XHR0ZVsxXSA9IF94Lnk7XG5cdFx0dGVbNV0gPSBfeS55O1xuXHRcdHRlWzldID0gX3oueTtcblx0XHR0ZVsyXSA9IF94Lno7XG5cdFx0dGVbNl0gPSBfeS56O1xuXHRcdHRlWzEwXSA9IF96Lno7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseShtLCBuKSB7XG5cdFx0aWYgKG4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMobSwgbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLCBtKTtcblx0fVxuXG5cdHByZW11bHRpcGx5KG0pIHtcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKG0sIHRoaXMpO1xuXHR9XG5cblx0bXVsdGlwbHlNYXRyaWNlcyhhLCBiKSB7XG5cdFx0Y29uc3QgYWUgPSBhLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGJlID0gYi5lbGVtZW50cztcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgYTExID0gYWVbMF0sXG5cdFx0XHRcdFx0YTEyID0gYWVbNF0sXG5cdFx0XHRcdFx0YTEzID0gYWVbOF0sXG5cdFx0XHRcdFx0YTE0ID0gYWVbMTJdO1xuXHRcdGNvbnN0IGEyMSA9IGFlWzFdLFxuXHRcdFx0XHRcdGEyMiA9IGFlWzVdLFxuXHRcdFx0XHRcdGEyMyA9IGFlWzldLFxuXHRcdFx0XHRcdGEyNCA9IGFlWzEzXTtcblx0XHRjb25zdCBhMzEgPSBhZVsyXSxcblx0XHRcdFx0XHRhMzIgPSBhZVs2XSxcblx0XHRcdFx0XHRhMzMgPSBhZVsxMF0sXG5cdFx0XHRcdFx0YTM0ID0gYWVbMTRdO1xuXHRcdGNvbnN0IGE0MSA9IGFlWzNdLFxuXHRcdFx0XHRcdGE0MiA9IGFlWzddLFxuXHRcdFx0XHRcdGE0MyA9IGFlWzExXSxcblx0XHRcdFx0XHRhNDQgPSBhZVsxNV07XG5cdFx0Y29uc3QgYjExID0gYmVbMF0sXG5cdFx0XHRcdFx0YjEyID0gYmVbNF0sXG5cdFx0XHRcdFx0YjEzID0gYmVbOF0sXG5cdFx0XHRcdFx0YjE0ID0gYmVbMTJdO1xuXHRcdGNvbnN0IGIyMSA9IGJlWzFdLFxuXHRcdFx0XHRcdGIyMiA9IGJlWzVdLFxuXHRcdFx0XHRcdGIyMyA9IGJlWzldLFxuXHRcdFx0XHRcdGIyNCA9IGJlWzEzXTtcblx0XHRjb25zdCBiMzEgPSBiZVsyXSxcblx0XHRcdFx0XHRiMzIgPSBiZVs2XSxcblx0XHRcdFx0XHRiMzMgPSBiZVsxMF0sXG5cdFx0XHRcdFx0YjM0ID0gYmVbMTRdO1xuXHRcdGNvbnN0IGI0MSA9IGJlWzNdLFxuXHRcdFx0XHRcdGI0MiA9IGJlWzddLFxuXHRcdFx0XHRcdGI0MyA9IGJlWzExXSxcblx0XHRcdFx0XHRiNDQgPSBiZVsxNV07XG5cdFx0dGVbMF0gPSBhMTEgKiBiMTEgKyBhMTIgKiBiMjEgKyBhMTMgKiBiMzEgKyBhMTQgKiBiNDE7XG5cdFx0dGVbNF0gPSBhMTEgKiBiMTIgKyBhMTIgKiBiMjIgKyBhMTMgKiBiMzIgKyBhMTQgKiBiNDI7XG5cdFx0dGVbOF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzMgKyBhMTQgKiBiNDM7XG5cdFx0dGVbMTJdID0gYTExICogYjE0ICsgYTEyICogYjI0ICsgYTEzICogYjM0ICsgYTE0ICogYjQ0O1xuXHRcdHRlWzFdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxICsgYTI0ICogYjQxO1xuXHRcdHRlWzVdID0gYTIxICogYjEyICsgYTIyICogYjIyICsgYTIzICogYjMyICsgYTI0ICogYjQyO1xuXHRcdHRlWzldID0gYTIxICogYjEzICsgYTIyICogYjIzICsgYTIzICogYjMzICsgYTI0ICogYjQzO1xuXHRcdHRlWzEzXSA9IGEyMSAqIGIxNCArIGEyMiAqIGIyNCArIGEyMyAqIGIzNCArIGEyNCAqIGI0NDtcblx0XHR0ZVsyXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEzMyAqIGIzMSArIGEzNCAqIGI0MTtcblx0XHR0ZVs2XSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0Mjtcblx0XHR0ZVsxMF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBhMzMgKiBiMzMgKyBhMzQgKiBiNDM7XG5cdFx0dGVbMTRdID0gYTMxICogYjE0ICsgYTMyICogYjI0ICsgYTMzICogYjM0ICsgYTM0ICogYjQ0O1xuXHRcdHRlWzNdID0gYTQxICogYjExICsgYTQyICogYjIxICsgYTQzICogYjMxICsgYTQ0ICogYjQxO1xuXHRcdHRlWzddID0gYTQxICogYjEyICsgYTQyICogYjIyICsgYTQzICogYjMyICsgYTQ0ICogYjQyO1xuXHRcdHRlWzExXSA9IGE0MSAqIGIxMyArIGE0MiAqIGIyMyArIGE0MyAqIGIzMyArIGE0NCAqIGI0Mztcblx0XHR0ZVsxNV0gPSBhNDEgKiBiMTQgKyBhNDIgKiBiMjQgKyBhNDMgKiBiMzQgKyBhNDQgKiBiNDQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseVNjYWxhcihzKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHRlWzBdICo9IHM7XG5cdFx0dGVbNF0gKj0gcztcblx0XHR0ZVs4XSAqPSBzO1xuXHRcdHRlWzEyXSAqPSBzO1xuXHRcdHRlWzFdICo9IHM7XG5cdFx0dGVbNV0gKj0gcztcblx0XHR0ZVs5XSAqPSBzO1xuXHRcdHRlWzEzXSAqPSBzO1xuXHRcdHRlWzJdICo9IHM7XG5cdFx0dGVbNl0gKj0gcztcblx0XHR0ZVsxMF0gKj0gcztcblx0XHR0ZVsxNF0gKj0gcztcblx0XHR0ZVszXSAqPSBzO1xuXHRcdHRlWzddICo9IHM7XG5cdFx0dGVbMTFdICo9IHM7XG5cdFx0dGVbMTVdICo9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZXRlcm1pbmFudCgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbjExID0gdGVbMF0sXG5cdFx0XHRcdFx0bjEyID0gdGVbNF0sXG5cdFx0XHRcdFx0bjEzID0gdGVbOF0sXG5cdFx0XHRcdFx0bjE0ID0gdGVbMTJdO1xuXHRcdGNvbnN0IG4yMSA9IHRlWzFdLFxuXHRcdFx0XHRcdG4yMiA9IHRlWzVdLFxuXHRcdFx0XHRcdG4yMyA9IHRlWzldLFxuXHRcdFx0XHRcdG4yNCA9IHRlWzEzXTtcblx0XHRjb25zdCBuMzEgPSB0ZVsyXSxcblx0XHRcdFx0XHRuMzIgPSB0ZVs2XSxcblx0XHRcdFx0XHRuMzMgPSB0ZVsxMF0sXG5cdFx0XHRcdFx0bjM0ID0gdGVbMTRdO1xuXHRcdGNvbnN0IG40MSA9IHRlWzNdLFxuXHRcdFx0XHRcdG40MiA9IHRlWzddLFxuXHRcdFx0XHRcdG40MyA9IHRlWzExXSxcblx0XHRcdFx0XHRuNDQgPSB0ZVsxNV07IC8vVE9ETzogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50XG5cdFx0Ly8oIGJhc2VkIG9uIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvbWF0cml4L2Z1bmN0aW9ucy9pbnZlcnNlL2ZvdXJEL2luZGV4Lmh0bSApXG5cblx0XHRyZXR1cm4gbjQxICogKCtuMTQgKiBuMjMgKiBuMzIgLSBuMTMgKiBuMjQgKiBuMzIgLSBuMTQgKiBuMjIgKiBuMzMgKyBuMTIgKiBuMjQgKiBuMzMgKyBuMTMgKiBuMjIgKiBuMzQgLSBuMTIgKiBuMjMgKiBuMzQpICsgbjQyICogKCtuMTEgKiBuMjMgKiBuMzQgLSBuMTEgKiBuMjQgKiBuMzMgKyBuMTQgKiBuMjEgKiBuMzMgLSBuMTMgKiBuMjEgKiBuMzQgKyBuMTMgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjMgKiBuMzEpICsgbjQzICogKCtuMTEgKiBuMjQgKiBuMzIgLSBuMTEgKiBuMjIgKiBuMzQgLSBuMTQgKiBuMjEgKiBuMzIgKyBuMTIgKiBuMjEgKiBuMzQgKyBuMTQgKiBuMjIgKiBuMzEgLSBuMTIgKiBuMjQgKiBuMzEpICsgbjQ0ICogKC1uMTMgKiBuMjIgKiBuMzEgLSBuMTEgKiBuMjMgKiBuMzIgKyBuMTEgKiBuMjIgKiBuMzMgKyBuMTMgKiBuMjEgKiBuMzIgLSBuMTIgKiBuMjEgKiBuMzMgKyBuMTIgKiBuMjMgKiBuMzEpO1xuXHR9XG5cblx0dHJhbnNwb3NlKCkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRsZXQgdG1wO1xuXHRcdHRtcCA9IHRlWzFdO1xuXHRcdHRlWzFdID0gdGVbNF07XG5cdFx0dGVbNF0gPSB0bXA7XG5cdFx0dG1wID0gdGVbMl07XG5cdFx0dGVbMl0gPSB0ZVs4XTtcblx0XHR0ZVs4XSA9IHRtcDtcblx0XHR0bXAgPSB0ZVs2XTtcblx0XHR0ZVs2XSA9IHRlWzldO1xuXHRcdHRlWzldID0gdG1wO1xuXHRcdHRtcCA9IHRlWzNdO1xuXHRcdHRlWzNdID0gdGVbMTJdO1xuXHRcdHRlWzEyXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVs3XTtcblx0XHR0ZVs3XSA9IHRlWzEzXTtcblx0XHR0ZVsxM10gPSB0bXA7XG5cdFx0dG1wID0gdGVbMTFdO1xuXHRcdHRlWzExXSA9IHRlWzE0XTtcblx0XHR0ZVsxNF0gPSB0bXA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRQb3NpdGlvbih4LCB5LCB6KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0aWYgKHguaXNWZWN0b3IzKSB7XG5cdFx0XHR0ZVsxMl0gPSB4Lng7XG5cdFx0XHR0ZVsxM10gPSB4Lnk7XG5cdFx0XHR0ZVsxNF0gPSB4Lno7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRlWzEyXSA9IHg7XG5cdFx0XHR0ZVsxM10gPSB5O1xuXHRcdFx0dGVbMTRdID0gejtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGludmVydCgpIHtcblx0XHQvLyBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG1cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHMsXG5cdFx0XHRcdFx0bjExID0gdGVbMF0sXG5cdFx0XHRcdFx0bjIxID0gdGVbMV0sXG5cdFx0XHRcdFx0bjMxID0gdGVbMl0sXG5cdFx0XHRcdFx0bjQxID0gdGVbM10sXG5cdFx0XHRcdFx0bjEyID0gdGVbNF0sXG5cdFx0XHRcdFx0bjIyID0gdGVbNV0sXG5cdFx0XHRcdFx0bjMyID0gdGVbNl0sXG5cdFx0XHRcdFx0bjQyID0gdGVbN10sXG5cdFx0XHRcdFx0bjEzID0gdGVbOF0sXG5cdFx0XHRcdFx0bjIzID0gdGVbOV0sXG5cdFx0XHRcdFx0bjMzID0gdGVbMTBdLFxuXHRcdFx0XHRcdG40MyA9IHRlWzExXSxcblx0XHRcdFx0XHRuMTQgPSB0ZVsxMl0sXG5cdFx0XHRcdFx0bjI0ID0gdGVbMTNdLFxuXHRcdFx0XHRcdG4zNCA9IHRlWzE0XSxcblx0XHRcdFx0XHRuNDQgPSB0ZVsxNV0sXG5cdFx0XHRcdFx0dDExID0gbjIzICogbjM0ICogbjQyIC0gbjI0ICogbjMzICogbjQyICsgbjI0ICogbjMyICogbjQzIC0gbjIyICogbjM0ICogbjQzIC0gbjIzICogbjMyICogbjQ0ICsgbjIyICogbjMzICogbjQ0LFxuXHRcdFx0XHRcdHQxMiA9IG4xNCAqIG4zMyAqIG40MiAtIG4xMyAqIG4zNCAqIG40MiAtIG4xNCAqIG4zMiAqIG40MyArIG4xMiAqIG4zNCAqIG40MyArIG4xMyAqIG4zMiAqIG40NCAtIG4xMiAqIG4zMyAqIG40NCxcblx0XHRcdFx0XHR0MTMgPSBuMTMgKiBuMjQgKiBuNDIgLSBuMTQgKiBuMjMgKiBuNDIgKyBuMTQgKiBuMjIgKiBuNDMgLSBuMTIgKiBuMjQgKiBuNDMgLSBuMTMgKiBuMjIgKiBuNDQgKyBuMTIgKiBuMjMgKiBuNDQsXG5cdFx0XHRcdFx0dDE0ID0gbjE0ICogbjIzICogbjMyIC0gbjEzICogbjI0ICogbjMyIC0gbjE0ICogbjIyICogbjMzICsgbjEyICogbjI0ICogbjMzICsgbjEzICogbjIyICogbjM0IC0gbjEyICogbjIzICogbjM0O1xuXHRcdGNvbnN0IGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiArIG4zMSAqIHQxMyArIG40MSAqIHQxNDtcblx0XHRpZiAoZGV0ID09PSAwKSByZXR1cm4gdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5cdFx0Y29uc3QgZGV0SW52ID0gMSAvIGRldDtcblx0XHR0ZVswXSA9IHQxMSAqIGRldEludjtcblx0XHR0ZVsxXSA9IChuMjQgKiBuMzMgKiBuNDEgLSBuMjMgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzEgKiBuNDMgKyBuMjEgKiBuMzQgKiBuNDMgKyBuMjMgKiBuMzEgKiBuNDQgLSBuMjEgKiBuMzMgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzJdID0gKG4yMiAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMiAqIG40MSArIG4yNCAqIG4zMSAqIG40MiAtIG4yMSAqIG4zNCAqIG40MiAtIG4yMiAqIG4zMSAqIG40NCArIG4yMSAqIG4zMiAqIG40NCkgKiBkZXRJbnY7XG5cdFx0dGVbM10gPSAobjIzICogbjMyICogbjQxIC0gbjIyICogbjMzICogbjQxIC0gbjIzICogbjMxICogbjQyICsgbjIxICogbjMzICogbjQyICsgbjIyICogbjMxICogbjQzIC0gbjIxICogbjMyICogbjQzKSAqIGRldEludjtcblx0XHR0ZVs0XSA9IHQxMiAqIGRldEludjtcblx0XHR0ZVs1XSA9IChuMTMgKiBuMzQgKiBuNDEgLSBuMTQgKiBuMzMgKiBuNDEgKyBuMTQgKiBuMzEgKiBuNDMgLSBuMTEgKiBuMzQgKiBuNDMgLSBuMTMgKiBuMzEgKiBuNDQgKyBuMTEgKiBuMzMgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzZdID0gKG4xNCAqIG4zMiAqIG40MSAtIG4xMiAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMSAqIG40MiArIG4xMSAqIG4zNCAqIG40MiArIG4xMiAqIG4zMSAqIG40NCAtIG4xMSAqIG4zMiAqIG40NCkgKiBkZXRJbnY7XG5cdFx0dGVbN10gPSAobjEyICogbjMzICogbjQxIC0gbjEzICogbjMyICogbjQxICsgbjEzICogbjMxICogbjQyIC0gbjExICogbjMzICogbjQyIC0gbjEyICogbjMxICogbjQzICsgbjExICogbjMyICogbjQzKSAqIGRldEludjtcblx0XHR0ZVs4XSA9IHQxMyAqIGRldEludjtcblx0XHR0ZVs5XSA9IChuMTQgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjEgKiBuNDMgKyBuMTEgKiBuMjQgKiBuNDMgKyBuMTMgKiBuMjEgKiBuNDQgLSBuMTEgKiBuMjMgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzEwXSA9IChuMTIgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjIgKiBuNDEgKyBuMTQgKiBuMjEgKiBuNDIgLSBuMTEgKiBuMjQgKiBuNDIgLSBuMTIgKiBuMjEgKiBuNDQgKyBuMTEgKiBuMjIgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzExXSA9IChuMTMgKiBuMjIgKiBuNDEgLSBuMTIgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjEgKiBuNDIgKyBuMTEgKiBuMjMgKiBuNDIgKyBuMTIgKiBuMjEgKiBuNDMgLSBuMTEgKiBuMjIgKiBuNDMpICogZGV0SW52O1xuXHRcdHRlWzEyXSA9IHQxNCAqIGRldEludjtcblx0XHR0ZVsxM10gPSAobjEzICogbjI0ICogbjMxIC0gbjE0ICogbjIzICogbjMxICsgbjE0ICogbjIxICogbjMzIC0gbjExICogbjI0ICogbjMzIC0gbjEzICogbjIxICogbjM0ICsgbjExICogbjIzICogbjM0KSAqIGRldEludjtcblx0XHR0ZVsxNF0gPSAobjE0ICogbjIyICogbjMxIC0gbjEyICogbjI0ICogbjMxIC0gbjE0ICogbjIxICogbjMyICsgbjExICogbjI0ICogbjMyICsgbjEyICogbjIxICogbjM0IC0gbjExICogbjIyICogbjM0KSAqIGRldEludjtcblx0XHR0ZVsxNV0gPSAobjEyICogbjIzICogbjMxIC0gbjEzICogbjIyICogbjMxICsgbjEzICogbjIxICogbjMyIC0gbjExICogbjIzICogbjMyIC0gbjEyICogbjIxICogbjMzICsgbjExICogbjIyICogbjMzKSAqIGRldEludjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNjYWxlKHYpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgeCA9IHYueCxcblx0XHRcdFx0XHR5ID0gdi55LFxuXHRcdFx0XHRcdHogPSB2Lno7XG5cdFx0dGVbMF0gKj0geDtcblx0XHR0ZVs0XSAqPSB5O1xuXHRcdHRlWzhdICo9IHo7XG5cdFx0dGVbMV0gKj0geDtcblx0XHR0ZVs1XSAqPSB5O1xuXHRcdHRlWzldICo9IHo7XG5cdFx0dGVbMl0gKj0geDtcblx0XHR0ZVs2XSAqPSB5O1xuXHRcdHRlWzEwXSAqPSB6O1xuXHRcdHRlWzNdICo9IHg7XG5cdFx0dGVbN10gKj0geTtcblx0XHR0ZVsxMV0gKj0gejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldE1heFNjYWxlT25BeGlzKCkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBzY2FsZVhTcSA9IHRlWzBdICogdGVbMF0gKyB0ZVsxXSAqIHRlWzFdICsgdGVbMl0gKiB0ZVsyXTtcblx0XHRjb25zdCBzY2FsZVlTcSA9IHRlWzRdICogdGVbNF0gKyB0ZVs1XSAqIHRlWzVdICsgdGVbNl0gKiB0ZVs2XTtcblx0XHRjb25zdCBzY2FsZVpTcSA9IHRlWzhdICogdGVbOF0gKyB0ZVs5XSAqIHRlWzldICsgdGVbMTBdICogdGVbMTBdO1xuXHRcdHJldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoc2NhbGVYU3EsIHNjYWxlWVNxLCBzY2FsZVpTcSkpO1xuXHR9XG5cblx0bWFrZVRyYW5zbGF0aW9uKHgsIHksIHopIHtcblx0XHR0aGlzLnNldCgxLCAwLCAwLCB4LCAwLCAxLCAwLCB5LCAwLCAwLCAxLCB6LCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VSb3RhdGlvblgodGhldGEpIHtcblx0XHRjb25zdCBjID0gTWF0aC5jb3ModGhldGEpLFxuXHRcdFx0XHRcdHMgPSBNYXRoLnNpbih0aGV0YSk7XG5cdFx0dGhpcy5zZXQoMSwgMCwgMCwgMCwgMCwgYywgLXMsIDAsIDAsIHMsIGMsIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZVJvdGF0aW9uWSh0aGV0YSkge1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyh0aGV0YSksXG5cdFx0XHRcdFx0cyA9IE1hdGguc2luKHRoZXRhKTtcblx0XHR0aGlzLnNldChjLCAwLCBzLCAwLCAwLCAxLCAwLCAwLCAtcywgMCwgYywgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlUm90YXRpb25aKHRoZXRhKSB7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKHRoZXRhKSxcblx0XHRcdFx0XHRzID0gTWF0aC5zaW4odGhldGEpO1xuXHRcdHRoaXMuc2V0KGMsIC1zLCAwLCAwLCBzLCBjLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VSb3RhdGlvbkF4aXMoYXhpcywgYW5nbGUpIHtcblx0XHQvLyBCYXNlZCBvbiBodHRwOi8vd3d3LmdhbWVkZXYubmV0L3JlZmVyZW5jZS9hcnRpY2xlcy9hcnRpY2xlMTE5OS5hc3Bcblx0XHRjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xuXHRcdGNvbnN0IHMgPSBNYXRoLnNpbihhbmdsZSk7XG5cdFx0Y29uc3QgdCA9IDEgLSBjO1xuXHRcdGNvbnN0IHggPSBheGlzLngsXG5cdFx0XHRcdFx0eSA9IGF4aXMueSxcblx0XHRcdFx0XHR6ID0gYXhpcy56O1xuXHRcdGNvbnN0IHR4ID0gdCAqIHgsXG5cdFx0XHRcdFx0dHkgPSB0ICogeTtcblx0XHR0aGlzLnNldCh0eCAqIHggKyBjLCB0eCAqIHkgLSBzICogeiwgdHggKiB6ICsgcyAqIHksIDAsIHR4ICogeSArIHMgKiB6LCB0eSAqIHkgKyBjLCB0eSAqIHogLSBzICogeCwgMCwgdHggKiB6IC0gcyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICogeiAqIHogKyBjLCAwLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VTY2FsZSh4LCB5LCB6KSB7XG5cdFx0dGhpcy5zZXQoeCwgMCwgMCwgMCwgMCwgeSwgMCwgMCwgMCwgMCwgeiwgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlU2hlYXIoeHksIHh6LCB5eCwgeXosIHp4LCB6eSkge1xuXHRcdHRoaXMuc2V0KDEsIHl4LCB6eCwgMCwgeHksIDEsIHp5LCAwLCB4eiwgeXosIDEsIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29tcG9zZShwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgeCA9IHF1YXRlcm5pb24uX3gsXG5cdFx0XHRcdFx0eSA9IHF1YXRlcm5pb24uX3ksXG5cdFx0XHRcdFx0eiA9IHF1YXRlcm5pb24uX3osXG5cdFx0XHRcdFx0dyA9IHF1YXRlcm5pb24uX3c7XG5cdFx0Y29uc3QgeDIgPSB4ICsgeCxcblx0XHRcdFx0XHR5MiA9IHkgKyB5LFxuXHRcdFx0XHRcdHoyID0geiArIHo7XG5cdFx0Y29uc3QgeHggPSB4ICogeDIsXG5cdFx0XHRcdFx0eHkgPSB4ICogeTIsXG5cdFx0XHRcdFx0eHogPSB4ICogejI7XG5cdFx0Y29uc3QgeXkgPSB5ICogeTIsXG5cdFx0XHRcdFx0eXogPSB5ICogejIsXG5cdFx0XHRcdFx0enogPSB6ICogejI7XG5cdFx0Y29uc3Qgd3ggPSB3ICogeDIsXG5cdFx0XHRcdFx0d3kgPSB3ICogeTIsXG5cdFx0XHRcdFx0d3ogPSB3ICogejI7XG5cdFx0Y29uc3Qgc3ggPSBzY2FsZS54LFxuXHRcdFx0XHRcdHN5ID0gc2NhbGUueSxcblx0XHRcdFx0XHRzeiA9IHNjYWxlLno7XG5cdFx0dGVbMF0gPSAoMSAtICh5eSArIHp6KSkgKiBzeDtcblx0XHR0ZVsxXSA9ICh4eSArIHd6KSAqIHN4O1xuXHRcdHRlWzJdID0gKHh6IC0gd3kpICogc3g7XG5cdFx0dGVbM10gPSAwO1xuXHRcdHRlWzRdID0gKHh5IC0gd3opICogc3k7XG5cdFx0dGVbNV0gPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcblx0XHR0ZVs2XSA9ICh5eiArIHd4KSAqIHN5O1xuXHRcdHRlWzddID0gMDtcblx0XHR0ZVs4XSA9ICh4eiArIHd5KSAqIHN6O1xuXHRcdHRlWzldID0gKHl6IC0gd3gpICogc3o7XG5cdFx0dGVbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG5cdFx0dGVbMTFdID0gMDtcblx0XHR0ZVsxMl0gPSBwb3NpdGlvbi54O1xuXHRcdHRlWzEzXSA9IHBvc2l0aW9uLnk7XG5cdFx0dGVbMTRdID0gcG9zaXRpb24uejtcblx0XHR0ZVsxNV0gPSAxO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVjb21wb3NlKHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGxldCBzeCA9IF92MSQ1LnNldCh0ZVswXSwgdGVbMV0sIHRlWzJdKS5sZW5ndGgoKTtcblxuXHRcdGNvbnN0IHN5ID0gX3YxJDUuc2V0KHRlWzRdLCB0ZVs1XSwgdGVbNl0pLmxlbmd0aCgpO1xuXG5cdFx0Y29uc3Qgc3ogPSBfdjEkNS5zZXQodGVbOF0sIHRlWzldLCB0ZVsxMF0pLmxlbmd0aCgpOyAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxuXG5cblx0XHRjb25zdCBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XG5cdFx0aWYgKGRldCA8IDApIHN4ID0gLXN4O1xuXHRcdHBvc2l0aW9uLnggPSB0ZVsxMl07XG5cdFx0cG9zaXRpb24ueSA9IHRlWzEzXTtcblx0XHRwb3NpdGlvbi56ID0gdGVbMTRdOyAvLyBzY2FsZSB0aGUgcm90YXRpb24gcGFydFxuXG5cdFx0X20xJDIuY29weSh0aGlzKTtcblxuXHRcdGNvbnN0IGludlNYID0gMSAvIHN4O1xuXHRcdGNvbnN0IGludlNZID0gMSAvIHN5O1xuXHRcdGNvbnN0IGludlNaID0gMSAvIHN6O1xuXHRcdF9tMSQyLmVsZW1lbnRzWzBdICo9IGludlNYO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzFdICo9IGludlNYO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzJdICo9IGludlNYO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzRdICo9IGludlNZO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzVdICo9IGludlNZO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzZdICo9IGludlNZO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzhdICo9IGludlNaO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzldICo9IGludlNaO1xuXHRcdF9tMSQyLmVsZW1lbnRzWzEwXSAqPSBpbnZTWjtcblx0XHRxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChfbTEkMik7XG5cdFx0c2NhbGUueCA9IHN4O1xuXHRcdHNjYWxlLnkgPSBzeTtcblx0XHRzY2FsZS56ID0gc3o7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlUGVyc3BlY3RpdmUobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIpIHtcblx0XHRpZiAoZmFyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB4ID0gMiAqIG5lYXIgLyAocmlnaHQgLSBsZWZ0KTtcblx0XHRjb25zdCB5ID0gMiAqIG5lYXIgLyAodG9wIC0gYm90dG9tKTtcblx0XHRjb25zdCBhID0gKHJpZ2h0ICsgbGVmdCkgLyAocmlnaHQgLSBsZWZ0KTtcblx0XHRjb25zdCBiID0gKHRvcCArIGJvdHRvbSkgLyAodG9wIC0gYm90dG9tKTtcblx0XHRjb25zdCBjID0gLShmYXIgKyBuZWFyKSAvIChmYXIgLSBuZWFyKTtcblx0XHRjb25zdCBkID0gLTIgKiBmYXIgKiBuZWFyIC8gKGZhciAtIG5lYXIpO1xuXHRcdHRlWzBdID0geDtcblx0XHR0ZVs0XSA9IDA7XG5cdFx0dGVbOF0gPSBhO1xuXHRcdHRlWzEyXSA9IDA7XG5cdFx0dGVbMV0gPSAwO1xuXHRcdHRlWzVdID0geTtcblx0XHR0ZVs5XSA9IGI7XG5cdFx0dGVbMTNdID0gMDtcblx0XHR0ZVsyXSA9IDA7XG5cdFx0dGVbNl0gPSAwO1xuXHRcdHRlWzEwXSA9IGM7XG5cdFx0dGVbMTRdID0gZDtcblx0XHR0ZVszXSA9IDA7XG5cdFx0dGVbN10gPSAwO1xuXHRcdHRlWzExXSA9IC0xO1xuXHRcdHRlWzE1XSA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlT3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHcgPSAxLjAgLyAocmlnaHQgLSBsZWZ0KTtcblx0XHRjb25zdCBoID0gMS4wIC8gKHRvcCAtIGJvdHRvbSk7XG5cdFx0Y29uc3QgcCA9IDEuMCAvIChmYXIgLSBuZWFyKTtcblx0XHRjb25zdCB4ID0gKHJpZ2h0ICsgbGVmdCkgKiB3O1xuXHRcdGNvbnN0IHkgPSAodG9wICsgYm90dG9tKSAqIGg7XG5cdFx0Y29uc3QgeiA9IChmYXIgKyBuZWFyKSAqIHA7XG5cdFx0dGVbMF0gPSAyICogdztcblx0XHR0ZVs0XSA9IDA7XG5cdFx0dGVbOF0gPSAwO1xuXHRcdHRlWzEyXSA9IC14O1xuXHRcdHRlWzFdID0gMDtcblx0XHR0ZVs1XSA9IDIgKiBoO1xuXHRcdHRlWzldID0gMDtcblx0XHR0ZVsxM10gPSAteTtcblx0XHR0ZVsyXSA9IDA7XG5cdFx0dGVbNl0gPSAwO1xuXHRcdHRlWzEwXSA9IC0yICogcDtcblx0XHR0ZVsxNF0gPSAtejtcblx0XHR0ZVszXSA9IDA7XG5cdFx0dGVbN10gPSAwO1xuXHRcdHRlWzExXSA9IDA7XG5cdFx0dGVbMTVdID0gMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhtYXRyaXgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtYXRyaXguZWxlbWVudHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0XHRcdGlmICh0ZVtpXSAhPT0gbWVbaV0pIHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHRcdFx0dGhpcy5lbGVtZW50c1tpXSA9IGFycmF5W2kgKyBvZmZzZXRdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9BcnJheShhcnJheSA9IFtdLCBvZmZzZXQgPSAwKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGFycmF5W29mZnNldF0gPSB0ZVswXTtcblx0XHRhcnJheVtvZmZzZXQgKyAxXSA9IHRlWzFdO1xuXHRcdGFycmF5W29mZnNldCArIDJdID0gdGVbMl07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgM10gPSB0ZVszXTtcblx0XHRhcnJheVtvZmZzZXQgKyA0XSA9IHRlWzRdO1xuXHRcdGFycmF5W29mZnNldCArIDVdID0gdGVbNV07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgNl0gPSB0ZVs2XTtcblx0XHRhcnJheVtvZmZzZXQgKyA3XSA9IHRlWzddO1xuXHRcdGFycmF5W29mZnNldCArIDhdID0gdGVbOF07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgOV0gPSB0ZVs5XTtcblx0XHRhcnJheVtvZmZzZXQgKyAxMF0gPSB0ZVsxMF07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMTFdID0gdGVbMTFdO1xuXHRcdGFycmF5W29mZnNldCArIDEyXSA9IHRlWzEyXTtcblx0XHRhcnJheVtvZmZzZXQgKyAxM10gPSB0ZVsxM107XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMTRdID0gdGVbMTRdO1xuXHRcdGFycmF5W29mZnNldCArIDE1XSA9IHRlWzE1XTtcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxufVxuXG5NYXRyaXg0LnByb3RvdHlwZS5pc01hdHJpeDQgPSB0cnVlO1xuXG5jb25zdCBfdjEkNSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbTEkMiA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfemVybyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygwLCAwLCAwKTtcblxuY29uc3QgX29uZSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygxLCAxLCAxKTtcblxuY29uc3QgX3ggPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3kgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ogPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX21hdHJpeCQxID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9xdWF0ZXJuaW9uJDMgPSAvKkBfX1BVUkVfXyovbmV3IFF1YXRlcm5pb24oKTtcblxuY2xhc3MgRXVsZXIge1xuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCBvcmRlciA9IEV1bGVyLkRlZmF1bHRPcmRlcikge1xuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX29yZGVyID0gb3JkZXI7XG5cdH1cblxuXHRnZXQgeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5feDtcblx0fVxuXG5cdHNldCB4KHZhbHVlKSB7XG5cdFx0dGhpcy5feCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXHR9XG5cblx0Z2V0IHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3k7XG5cdH1cblxuXHRzZXQgeSh2YWx1ZSkge1xuXHRcdHRoaXMuX3kgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdGdldCB6KCkge1xuXHRcdHJldHVybiB0aGlzLl96O1xuXHR9XG5cblx0c2V0IHoodmFsdWUpIHtcblx0XHR0aGlzLl96ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRnZXQgb3JkZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29yZGVyO1xuXHR9XG5cblx0c2V0IG9yZGVyKHZhbHVlKSB7XG5cdFx0dGhpcy5fb3JkZXIgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdHNldCh4LCB5LCB6LCBvcmRlciA9IHRoaXMuX29yZGVyKSB7XG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fb3JkZXIgPSBvcmRlcjtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3osIHRoaXMuX29yZGVyKTtcblx0fVxuXG5cdGNvcHkoZXVsZXIpIHtcblx0XHR0aGlzLl94ID0gZXVsZXIuX3g7XG5cdFx0dGhpcy5feSA9IGV1bGVyLl95O1xuXHRcdHRoaXMuX3ogPSBldWxlci5fejtcblx0XHR0aGlzLl9vcmRlciA9IGV1bGVyLl9vcmRlcjtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVJvdGF0aW9uTWF0cml4KG0sIG9yZGVyID0gdGhpcy5fb3JkZXIsIHVwZGF0ZSA9IHRydWUpIHtcblx0XHQvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxuXHRcdGNvbnN0IHRlID0gbS5lbGVtZW50cztcblx0XHRjb25zdCBtMTEgPSB0ZVswXSxcblx0XHRcdFx0XHRtMTIgPSB0ZVs0XSxcblx0XHRcdFx0XHRtMTMgPSB0ZVs4XTtcblx0XHRjb25zdCBtMjEgPSB0ZVsxXSxcblx0XHRcdFx0XHRtMjIgPSB0ZVs1XSxcblx0XHRcdFx0XHRtMjMgPSB0ZVs5XTtcblx0XHRjb25zdCBtMzEgPSB0ZVsyXSxcblx0XHRcdFx0XHRtMzIgPSB0ZVs2XSxcblx0XHRcdFx0XHRtMzMgPSB0ZVsxMF07XG5cblx0XHRzd2l0Y2ggKG9yZGVyKSB7XG5cdFx0XHRjYXNlICdYWVonOlxuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKGNsYW1wKG0xMywgLTEsIDEpKTtcblxuXHRcdFx0XHRpZiAoTWF0aC5hYnMobTEzKSA8IDAuOTk5OTk5OSkge1xuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKC1tMjMsIG0zMyk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoLW0xMiwgbTExKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMihtMzIsIG0yMik7XG5cdFx0XHRcdFx0dGhpcy5feiA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVhaJzpcblx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXNpbigtY2xhbXAobTIzLCAtMSwgMSkpO1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhtMjMpIDwgMC45OTk5OTk5KSB7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIobTEzLCBtMzMpO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKG0yMSwgbTIyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMigtbTMxLCBtMTEpO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1pYWSc6XG5cdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmFzaW4oY2xhbXAobTMyLCAtMSwgMSkpO1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhtMzIpIDwgMC45OTk5OTk5KSB7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoLW0zMSwgbTMzKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMigtbTEyLCBtMjIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3kgPSAwO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKG0yMSwgbTExKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWVgnOlxuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKC1jbGFtcChtMzEsIC0xLCAxKSk7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKG0zMSkgPCAwLjk5OTk5OTkpIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMihtMzIsIG0zMyk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIobTIxLCBtMTEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3ggPSAwO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKC1tMTIsIG0yMik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVpYJzpcblx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXNpbihjbGFtcChtMjEsIC0xLCAxKSk7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKG0yMSkgPCAwLjk5OTk5OTkpIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMigtbTIzLCBtMjIpO1xuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKC1tMzEsIG0xMSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIobTEzLCBtMzMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1haWSc6XG5cdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmFzaW4oLWNsYW1wKG0xMiwgLTEsIDEpKTtcblxuXHRcdFx0XHRpZiAoTWF0aC5hYnMobTEyKSA8IDAuOTk5OTk5OSkge1xuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKG0zMiwgbTIyKTtcblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMihtMTMsIG0xMSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoLW0yMywgbTMzKTtcblx0XHRcdFx0XHR0aGlzLl95ID0gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHRcdGlmICh1cGRhdGUgPT09IHRydWUpIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21RdWF0ZXJuaW9uKHEsIG9yZGVyLCB1cGRhdGUpIHtcblx0XHRfbWF0cml4JDEubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24ocSk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoX21hdHJpeCQxLCBvcmRlciwgdXBkYXRlKTtcblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKHYsIG9yZGVyID0gdGhpcy5fb3JkZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXQodi54LCB2LnksIHYueiwgb3JkZXIpO1xuXHR9XG5cblx0cmVvcmRlcihuZXdPcmRlcikge1xuXHRcdC8vIFdBUk5JTkc6IHRoaXMgZGlzY2FyZHMgcmV2b2x1dGlvbiBpbmZvcm1hdGlvbiAtYmhvdXN0b25cblx0XHRfcXVhdGVybmlvbiQzLnNldEZyb21FdWxlcih0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21RdWF0ZXJuaW9uKF9xdWF0ZXJuaW9uJDMsIG5ld09yZGVyKTtcblx0fVxuXG5cdGVxdWFscyhldWxlcikge1xuXHRcdHJldHVybiBldWxlci5feCA9PT0gdGhpcy5feCAmJiBldWxlci5feSA9PT0gdGhpcy5feSAmJiBldWxlci5feiA9PT0gdGhpcy5feiAmJiBldWxlci5fb3JkZXIgPT09IHRoaXMuX29yZGVyO1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5KSB7XG5cdFx0dGhpcy5feCA9IGFycmF5WzBdO1xuXHRcdHRoaXMuX3kgPSBhcnJheVsxXTtcblx0XHR0aGlzLl96ID0gYXJyYXlbMl07XG5cdFx0aWYgKGFycmF5WzNdICE9PSB1bmRlZmluZWQpIHRoaXMuX29yZGVyID0gYXJyYXlbM107XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGFycmF5W29mZnNldF0gPSB0aGlzLl94O1xuXHRcdGFycmF5W29mZnNldCArIDFdID0gdGhpcy5feTtcblx0XHRhcnJheVtvZmZzZXQgKyAyXSA9IHRoaXMuX3o7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgM10gPSB0aGlzLl9vcmRlcjtcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHR0b1ZlY3RvcjMob3B0aW9uYWxSZXN1bHQpIHtcblx0XHRpZiAob3B0aW9uYWxSZXN1bHQpIHtcblx0XHRcdHJldHVybiBvcHRpb25hbFJlc3VsdC5zZXQodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96KTtcblx0XHR9XG5cdH1cblxuXHRfb25DaGFuZ2UoY2FsbGJhY2spIHtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRfb25DaGFuZ2VDYWxsYmFjaygpIHt9XG5cbn1cblxuRXVsZXIucHJvdG90eXBlLmlzRXVsZXIgPSB0cnVlO1xuRXVsZXIuRGVmYXVsdE9yZGVyID0gJ1hZWic7XG5FdWxlci5Sb3RhdGlvbk9yZGVycyA9IFsnWFlaJywgJ1laWCcsICdaWFknLCAnWFpZJywgJ1lYWicsICdaWVgnXTtcblxuY2xhc3MgTGF5ZXJzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5tYXNrID0gMSB8IDA7XG5cdH1cblxuXHRzZXQoY2hhbm5lbCkge1xuXHRcdHRoaXMubWFzayA9ICgxIDw8IGNoYW5uZWwgfCAwKSA+Pj4gMDtcblx0fVxuXG5cdGVuYWJsZShjaGFubmVsKSB7XG5cdFx0dGhpcy5tYXNrIHw9IDEgPDwgY2hhbm5lbCB8IDA7XG5cdH1cblxuXHRlbmFibGVBbGwoKSB7XG5cdFx0dGhpcy5tYXNrID0gMHhmZmZmZmZmZiB8IDA7XG5cdH1cblxuXHR0b2dnbGUoY2hhbm5lbCkge1xuXHRcdHRoaXMubWFzayBePSAxIDw8IGNoYW5uZWwgfCAwO1xuXHR9XG5cblx0ZGlzYWJsZShjaGFubmVsKSB7XG5cdFx0dGhpcy5tYXNrICY9IH4oMSA8PCBjaGFubmVsIHwgMCk7XG5cdH1cblxuXHRkaXNhYmxlQWxsKCkge1xuXHRcdHRoaXMubWFzayA9IDA7XG5cdH1cblxuXHR0ZXN0KGxheWVycykge1xuXHRcdHJldHVybiAodGhpcy5tYXNrICYgbGF5ZXJzLm1hc2spICE9PSAwO1xuXHR9XG5cblx0aXNFbmFibGVkKGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gKHRoaXMubWFzayAmICgxIDw8IGNoYW5uZWwgfCAwKSkgIT09IDA7XG5cdH1cblxufVxuXG5sZXQgX29iamVjdDNESWQgPSAwO1xuXG5jb25zdCBfdjEkNCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcTEgPSAvKkBfX1BVUkVfXyovbmV3IFF1YXRlcm5pb24oKTtcblxuY29uc3QgX20xJDEgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3RhcmdldCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcG9zaXRpb24kMyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfc2NhbGUkMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcXVhdGVybmlvbiQyID0gLypAX19QVVJFX18qL25ldyBRdWF0ZXJuaW9uKCk7XG5cbmNvbnN0IF94QXhpcyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygxLCAwLCAwKTtcblxuY29uc3QgX3lBeGlzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKDAsIDEsIDApO1xuXG5jb25zdCBfekF4aXMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMCwgMCwgMSk7XG5cbmNvbnN0IF9hZGRlZEV2ZW50ID0ge1xuXHR0eXBlOiAnYWRkZWQnXG59O1xuY29uc3QgX3JlbW92ZWRFdmVudCA9IHtcblx0dHlwZTogJ3JlbW92ZWQnXG59O1xuXG5jbGFzcyBPYmplY3QzRCBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdpZCcsIHtcblx0XHRcdHZhbHVlOiBfb2JqZWN0M0RJZCsrXG5cdFx0fSk7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy50eXBlID0gJ09iamVjdDNEJztcblx0XHR0aGlzLnBhcmVudCA9IG51bGw7XG5cdFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuXHRcdHRoaXMudXAgPSBPYmplY3QzRC5EZWZhdWx0VXAuY2xvbmUoKTtcblx0XHRjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgcm90YXRpb24gPSBuZXcgRXVsZXIoKTtcblx0XHRjb25zdCBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblx0XHRjb25zdCBzY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuXG5cdFx0ZnVuY3Rpb24gb25Sb3RhdGlvbkNoYW5nZSgpIHtcblx0XHRcdHF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHJvdGF0aW9uLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25RdWF0ZXJuaW9uQ2hhbmdlKCkge1xuXHRcdFx0cm90YXRpb24uc2V0RnJvbVF1YXRlcm5pb24ocXVhdGVybmlvbiwgdW5kZWZpbmVkLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cm90YXRpb24uX29uQ2hhbmdlKG9uUm90YXRpb25DaGFuZ2UpO1xuXG5cdFx0cXVhdGVybmlvbi5fb25DaGFuZ2Uob25RdWF0ZXJuaW9uQ2hhbmdlKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHBvc2l0aW9uXG5cdFx0XHR9LFxuXHRcdFx0cm90YXRpb246IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogcm90YXRpb25cblx0XHRcdH0sXG5cdFx0XHRxdWF0ZXJuaW9uOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHF1YXRlcm5pb25cblx0XHRcdH0sXG5cdFx0XHRzY2FsZToge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBzY2FsZVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsVmlld01hdHJpeDoge1xuXHRcdFx0XHR2YWx1ZTogbmV3IE1hdHJpeDQoKVxuXHRcdFx0fSxcblx0XHRcdG5vcm1hbE1hdHJpeDoge1xuXHRcdFx0XHR2YWx1ZTogbmV3IE1hdHJpeDMoKVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBPYmplY3QzRC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmxheWVycyA9IG5ldyBMYXllcnMoKTtcblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHRcdHRoaXMuY2FzdFNoYWRvdyA9IGZhbHNlO1xuXHRcdHRoaXMucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuXHRcdHRoaXMuZnJ1c3R1bUN1bGxlZCA9IHRydWU7XG5cdFx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cdFx0dGhpcy5hbmltYXRpb25zID0gW107XG5cdFx0dGhpcy51c2VyRGF0YSA9IHt9O1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXIoKSB7fVxuXG5cdG9uQWZ0ZXJSZW5kZXIoKSB7fVxuXG5cdGFwcGx5TWF0cml4NChtYXRyaXgpIHtcblx0XHRpZiAodGhpcy5tYXRyaXhBdXRvVXBkYXRlKSB0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMubWF0cml4LnByZW11bHRpcGx5KG1hdHJpeCk7XG5cdFx0dGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSk7XG5cdH1cblxuXHRhcHBseVF1YXRlcm5pb24ocSkge1xuXHRcdHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSkge1xuXHRcdC8vIGFzc3VtZXMgYXhpcyBpcyBub3JtYWxpemVkXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUpO1xuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tRXVsZXIoZXVsZXIpIHtcblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGV1bGVyLCB0cnVlKTtcblx0fVxuXG5cdHNldFJvdGF0aW9uRnJvbU1hdHJpeChtKSB7XG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KG0pO1xuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbihxKSB7XG5cdFx0Ly8gYXNzdW1lcyBxIGlzIG5vcm1hbGl6ZWRcblx0XHR0aGlzLnF1YXRlcm5pb24uY29weShxKTtcblx0fVxuXG5cdHJvdGF0ZU9uQXhpcyhheGlzLCBhbmdsZSkge1xuXHRcdC8vIHJvdGF0ZSBvYmplY3Qgb24gYXhpcyBpbiBvYmplY3Qgc3BhY2Vcblx0XHQvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXHRcdF9xMS5zZXRGcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKTtcblxuXHRcdHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShfcTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlT25Xb3JsZEF4aXMoYXhpcywgYW5nbGUpIHtcblx0XHQvLyByb3RhdGUgb2JqZWN0IG9uIGF4aXMgaW4gd29ybGQgc3BhY2Vcblx0XHQvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXHRcdC8vIG1ldGhvZCBhc3N1bWVzIG5vIHJvdGF0ZWQgcGFyZW50XG5cdFx0X3ExLnNldEZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUpO1xuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KF9xMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3RhdGVYKGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF94QXhpcywgYW5nbGUpO1xuXHR9XG5cblx0cm90YXRlWShhbmdsZSkge1xuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeUF4aXMsIGFuZ2xlKTtcblx0fVxuXG5cdHJvdGF0ZVooYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3pBeGlzLCBhbmdsZSk7XG5cdH1cblxuXHR0cmFuc2xhdGVPbkF4aXMoYXhpcywgZGlzdGFuY2UpIHtcblx0XHQvLyB0cmFuc2xhdGUgb2JqZWN0IGJ5IGRpc3RhbmNlIGFsb25nIGF4aXMgaW4gb2JqZWN0IHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHRfdjEkNC5jb3B5KGF4aXMpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pO1xuXG5cdFx0dGhpcy5wb3NpdGlvbi5hZGQoX3YxJDQubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZVgoZGlzdGFuY2UpIHtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoX3hBeGlzLCBkaXN0YW5jZSk7XG5cdH1cblxuXHR0cmFuc2xhdGVZKGRpc3RhbmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKF95QXhpcywgZGlzdGFuY2UpO1xuXHR9XG5cblx0dHJhbnNsYXRlWihkaXN0YW5jZSkge1xuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhfekF4aXMsIGRpc3RhbmNlKTtcblx0fVxuXG5cdGxvY2FsVG9Xb3JsZCh2ZWN0b3IpIHtcblx0XHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtcblx0fVxuXG5cdHdvcmxkVG9Mb2NhbCh2ZWN0b3IpIHtcblx0XHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NChfbTEkMS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKTtcblx0fVxuXG5cdGxvb2tBdCh4LCB5LCB6KSB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBvYmplY3RzIGhhdmluZyBub24tdW5pZm9ybWx5LXNjYWxlZCBwYXJlbnQocylcblx0XHRpZiAoeC5pc1ZlY3RvcjMpIHtcblx0XHRcdF90YXJnZXQuY29weSh4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X3RhcmdldC5zZXQoeCwgeSwgeik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cblx0XHRfcG9zaXRpb24kMy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7XG5cblx0XHRpZiAodGhpcy5pc0NhbWVyYSB8fCB0aGlzLmlzTGlnaHQpIHtcblx0XHRcdF9tMSQxLmxvb2tBdChfcG9zaXRpb24kMywgX3RhcmdldCwgdGhpcy51cCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9tMSQxLmxvb2tBdChfdGFyZ2V0LCBfcG9zaXRpb24kMywgdGhpcy51cCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChfbTEkMSk7XG5cblx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRfbTEkMS5leHRyYWN0Um90YXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0X3ExLnNldEZyb21Sb3RhdGlvbk1hdHJpeChfbTEkMSk7XG5cblx0XHRcdHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShfcTEuaW52ZXJ0KCkpO1xuXHRcdH1cblx0fVxuXG5cdGFkZChvYmplY3QpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuYWRkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChvYmplY3QgPT09IHRoaXMpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhblxcJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuJywgb2JqZWN0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChvYmplY3QgJiYgb2JqZWN0LmlzT2JqZWN0M0QpIHtcblx0XHRcdGlmIChvYmplY3QucGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdG9iamVjdC5wYXJlbnQucmVtb3ZlKG9iamVjdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdC5wYXJlbnQgPSB0aGlzO1xuXHRcdFx0dGhpcy5jaGlsZHJlbi5wdXNoKG9iamVjdCk7XG5cdFx0XHRvYmplY3QuZGlzcGF0Y2hFdmVudChfYWRkZWRFdmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4nLCBvYmplY3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVtb3ZlKG9iamVjdCkge1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2Yob2JqZWN0KTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdG9iamVjdC5wYXJlbnQgPSBudWxsO1xuXHRcdFx0dGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0b2JqZWN0LmRpc3BhdGNoRXZlbnQoX3JlbW92ZWRFdmVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZW1vdmVGcm9tUGFyZW50KCkge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0cGFyZW50LnJlbW92ZSh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gdGhpcy5jaGlsZHJlbltpXTtcblx0XHRcdG9iamVjdC5wYXJlbnQgPSBudWxsO1xuXHRcdFx0b2JqZWN0LmRpc3BhdGNoRXZlbnQoX3JlbW92ZWRFdmVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGlsZHJlbi5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXR0YWNoKG9iamVjdCkge1xuXHRcdC8vIGFkZHMgb2JqZWN0IGFzIGEgY2hpbGQgb2YgdGhpcywgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIG9iamVjdCdzIHdvcmxkIHRyYW5zZm9ybVxuXHRcdC8vIE5vdGU6IFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgc2NlbmUgZ3JhcGhzIGhhdmluZyBub24tdW5pZm9ybWx5LXNjYWxlZCBub2RlcyhzKVxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXG5cdFx0X20xJDEuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblxuXHRcdGlmIChvYmplY3QucGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRvYmplY3QucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblxuXHRcdFx0X20xJDEubXVsdGlwbHkob2JqZWN0LnBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0fVxuXG5cdFx0b2JqZWN0LmFwcGx5TWF0cml4NChfbTEkMSk7XG5cdFx0dGhpcy5hZGQob2JqZWN0KTtcblx0XHRvYmplY3QudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIHRydWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0T2JqZWN0QnlJZChpZCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoJ2lkJywgaWQpO1xuXHR9XG5cblx0Z2V0T2JqZWN0QnlOYW1lKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCduYW1lJywgbmFtZSk7XG5cdH1cblxuXHRnZXRPYmplY3RCeVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG5cdFx0aWYgKHRoaXNbbmFtZV0gPT09IHZhbHVlKSByZXR1cm4gdGhpcztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblx0XHRcdGNvbnN0IG9iamVjdCA9IGNoaWxkLmdldE9iamVjdEJ5UHJvcGVydHkobmFtZSwgdmFsdWUpO1xuXG5cdFx0XHRpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIG9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0V29ybGRQb3NpdGlvbih0YXJnZXQpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblx0XHRyZXR1cm4gdGFyZ2V0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtcblx0fVxuXG5cdGdldFdvcmxkUXVhdGVybmlvbih0YXJnZXQpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShfcG9zaXRpb24kMywgdGFyZ2V0LCBfc2NhbGUkMik7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGdldFdvcmxkU2NhbGUodGFyZ2V0KSB7XG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoX3Bvc2l0aW9uJDMsIF9xdWF0ZXJuaW9uJDIsIHRhcmdldCk7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGdldFdvcmxkRGlyZWN0aW9uKHRhcmdldCkge1xuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdGNvbnN0IGUgPSB0aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO1xuXHRcdHJldHVybiB0YXJnZXQuc2V0KGVbOF0sIGVbOV0sIGVbMTBdKS5ub3JtYWxpemUoKTtcblx0fVxuXG5cdHJheWNhc3QoKSB7fVxuXG5cdHRyYXZlcnNlKGNhbGxiYWNrKSB7XG5cdFx0Y2FsbGJhY2sodGhpcyk7XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNoaWxkcmVuW2ldLnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0XHR9XG5cdH1cblxuXHR0cmF2ZXJzZVZpc2libGUoY2FsbGJhY2spIHtcblx0XHRpZiAodGhpcy52aXNpYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuXHRcdGNhbGxiYWNrKHRoaXMpO1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjaGlsZHJlbltpXS50cmF2ZXJzZVZpc2libGUoY2FsbGJhY2spO1xuXHRcdH1cblx0fVxuXG5cdHRyYXZlcnNlQW5jZXN0b3JzKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRjYWxsYmFjayhwYXJlbnQpO1xuXHRcdFx0cGFyZW50LnRyYXZlcnNlQW5jZXN0b3JzKGNhbGxiYWNrKTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVNYXRyaXgoKSB7XG5cdFx0dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUpO1xuXHRcdHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZChmb3JjZSkge1xuXHRcdGlmICh0aGlzLm1hdHJpeEF1dG9VcGRhdGUpIHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHRpZiAodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIHx8IGZvcmNlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCwgdGhpcy5tYXRyaXgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSBmYWxzZTtcblx0XHRcdGZvcmNlID0gdHJ1ZTtcblx0XHR9IC8vIHVwZGF0ZSBjaGlsZHJlblxuXG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y2hpbGRyZW5baV0udXBkYXRlTWF0cml4V29ybGQoZm9yY2UpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZVdvcmxkTWF0cml4KHVwZGF0ZVBhcmVudHMsIHVwZGF0ZUNoaWxkcmVuKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAodXBkYXRlUGFyZW50cyA9PT0gdHJ1ZSAmJiBwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubWF0cml4QXV0b1VwZGF0ZSkgdGhpcy51cGRhdGVNYXRyaXgoKTtcblxuXHRcdGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLCB0aGlzLm1hdHJpeCk7XG5cdFx0fSAvLyB1cGRhdGUgY2hpbGRyZW5cblxuXG5cdFx0aWYgKHVwZGF0ZUNoaWxkcmVuID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNoaWxkcmVuW2ldLnVwZGF0ZVdvcmxkTWF0cml4KGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdC8vIG1ldGEgaXMgYSBzdHJpbmcgd2hlbiBjYWxsZWQgZnJvbSBKU09OLnN0cmluZ2lmeVxuXHRcdGNvbnN0IGlzUm9vdE9iamVjdCA9IG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZyc7XG5cdFx0Y29uc3Qgb3V0cHV0ID0ge307IC8vIG1ldGEgaXMgYSBoYXNoIHVzZWQgdG8gY29sbGVjdCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMuXG5cdFx0Ly8gbm90IHByb3ZpZGluZyBpdCBpbXBsaWVzIHRoYXQgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3Rcblx0XHQvLyBiZWluZyBzZXJpYWxpemVkLlxuXG5cdFx0aWYgKGlzUm9vdE9iamVjdCkge1xuXHRcdFx0Ly8gaW5pdGlhbGl6ZSBtZXRhIG9ialxuXHRcdFx0bWV0YSA9IHtcblx0XHRcdFx0Z2VvbWV0cmllczoge30sXG5cdFx0XHRcdG1hdGVyaWFsczoge30sXG5cdFx0XHRcdHRleHR1cmVzOiB7fSxcblx0XHRcdFx0aW1hZ2VzOiB7fSxcblx0XHRcdFx0c2hhcGVzOiB7fSxcblx0XHRcdFx0c2tlbGV0b25zOiB7fSxcblx0XHRcdFx0YW5pbWF0aW9uczoge31cblx0XHRcdH07XG5cdFx0XHRvdXRwdXQubWV0YWRhdGEgPSB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ09iamVjdCcsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ09iamVjdDNELnRvSlNPTidcblx0XHRcdH07XG5cdFx0fSAvLyBzdGFuZGFyZCBPYmplY3QzRCBzZXJpYWxpemF0aW9uXG5cblxuXHRcdGNvbnN0IG9iamVjdCA9IHt9O1xuXHRcdG9iamVjdC51dWlkID0gdGhpcy51dWlkO1xuXHRcdG9iamVjdC50eXBlID0gdGhpcy50eXBlO1xuXHRcdGlmICh0aGlzLm5hbWUgIT09ICcnKSBvYmplY3QubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAodGhpcy5jYXN0U2hhZG93ID09PSB0cnVlKSBvYmplY3QuY2FzdFNoYWRvdyA9IHRydWU7XG5cdFx0aWYgKHRoaXMucmVjZWl2ZVNoYWRvdyA9PT0gdHJ1ZSkgb2JqZWN0LnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xuXHRcdGlmICh0aGlzLnZpc2libGUgPT09IGZhbHNlKSBvYmplY3QudmlzaWJsZSA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmZydXN0dW1DdWxsZWQgPT09IGZhbHNlKSBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLnJlbmRlck9yZGVyICE9PSAwKSBvYmplY3QucmVuZGVyT3JkZXIgPSB0aGlzLnJlbmRlck9yZGVyO1xuXHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSAhPT0gJ3t9Jykgb2JqZWN0LnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblx0XHRvYmplY3QubGF5ZXJzID0gdGhpcy5sYXllcnMubWFzaztcblx0XHRvYmplY3QubWF0cml4ID0gdGhpcy5tYXRyaXgudG9BcnJheSgpO1xuXHRcdGlmICh0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPT09IGZhbHNlKSBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOyAvLyBvYmplY3Qgc3BlY2lmaWMgcHJvcGVydGllc1xuXG5cdFx0aWYgKHRoaXMuaXNJbnN0YW5jZWRNZXNoKSB7XG5cdFx0XHRvYmplY3QudHlwZSA9ICdJbnN0YW5jZWRNZXNoJztcblx0XHRcdG9iamVjdC5jb3VudCA9IHRoaXMuY291bnQ7XG5cdFx0XHRvYmplY3QuaW5zdGFuY2VNYXRyaXggPSB0aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpO1xuXHRcdFx0aWYgKHRoaXMuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCkgb2JqZWN0Lmluc3RhbmNlQ29sb3IgPSB0aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCk7XG5cdFx0fSAvL1xuXG5cblx0XHRmdW5jdGlvbiBzZXJpYWxpemUobGlicmFyeSwgZWxlbWVudCkge1xuXHRcdFx0aWYgKGxpYnJhcnlbZWxlbWVudC51dWlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxpYnJhcnlbZWxlbWVudC51dWlkXSA9IGVsZW1lbnQudG9KU09OKG1ldGEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbWVudC51dWlkO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzU2NlbmUpIHtcblx0XHRcdGlmICh0aGlzLmJhY2tncm91bmQpIHtcblx0XHRcdFx0aWYgKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yKSB7XG5cdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmQudG9KU09OKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSkge1xuXHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlKSB7XG5cdFx0XHRcdG9iamVjdC5lbnZpcm9ubWVudCA9IHRoaXMuZW52aXJvbm1lbnQudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlzTWVzaCB8fCB0aGlzLmlzTGluZSB8fCB0aGlzLmlzUG9pbnRzKSB7XG5cdFx0XHRvYmplY3QuZ2VvbWV0cnkgPSBzZXJpYWxpemUobWV0YS5nZW9tZXRyaWVzLCB0aGlzLmdlb21ldHJ5KTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5zaGFwZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBzaGFwZXMgPSBwYXJhbWV0ZXJzLnNoYXBlcztcblxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShzaGFwZXMpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1tpXTtcblx0XHRcdFx0XHRcdHNlcmlhbGl6ZShtZXRhLnNoYXBlcywgc2hhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXJpYWxpemUobWV0YS5zaGFwZXMsIHNoYXBlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NraW5uZWRNZXNoKSB7XG5cdFx0XHRvYmplY3QuYmluZE1vZGUgPSB0aGlzLmJpbmRNb2RlO1xuXHRcdFx0b2JqZWN0LmJpbmRNYXRyaXggPSB0aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpO1xuXG5cdFx0XHRpZiAodGhpcy5za2VsZXRvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHNlcmlhbGl6ZShtZXRhLnNrZWxldG9ucywgdGhpcy5za2VsZXRvbik7XG5cdFx0XHRcdG9iamVjdC5za2VsZXRvbiA9IHRoaXMuc2tlbGV0b24udXVpZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5tYXRlcmlhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSkge1xuXHRcdFx0XHRjb25zdCB1dWlkcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5tYXRlcmlhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHR1dWlkcy5wdXNoKHNlcmlhbGl6ZShtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlhbFtpXSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b2JqZWN0Lm1hdGVyaWFsID0gdXVpZHM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYmplY3QubWF0ZXJpYWwgPSBzZXJpYWxpemUobWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWwpO1xuXHRcdFx0fVxuXHRcdH0gLy9cblxuXG5cdFx0aWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0b2JqZWN0LmNoaWxkcmVuID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRvYmplY3QuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldLnRvSlNPTihtZXRhKS5vYmplY3QpO1xuXHRcdFx0fVxuXHRcdH0gLy9cblxuXG5cdFx0aWYgKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvYmplY3QuYW5pbWF0aW9ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbnNbaV07XG5cdFx0XHRcdG9iamVjdC5hbmltYXRpb25zLnB1c2goc2VyaWFsaXplKG1ldGEuYW5pbWF0aW9ucywgYW5pbWF0aW9uKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzUm9vdE9iamVjdCkge1xuXHRcdFx0Y29uc3QgZ2VvbWV0cmllcyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS5nZW9tZXRyaWVzKTtcblx0XHRcdGNvbnN0IG1hdGVyaWFscyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS5tYXRlcmlhbHMpO1xuXHRcdFx0Y29uc3QgdGV4dHVyZXMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEudGV4dHVyZXMpO1xuXHRcdFx0Y29uc3QgaW1hZ2VzID0gZXh0cmFjdEZyb21DYWNoZShtZXRhLmltYWdlcyk7XG5cdFx0XHRjb25zdCBzaGFwZXMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEuc2hhcGVzKTtcblx0XHRcdGNvbnN0IHNrZWxldG9ucyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS5za2VsZXRvbnMpO1xuXHRcdFx0Y29uc3QgYW5pbWF0aW9ucyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS5hbmltYXRpb25zKTtcblx0XHRcdGlmIChnZW9tZXRyaWVzLmxlbmd0aCA+IDApIG91dHB1dC5nZW9tZXRyaWVzID0gZ2VvbWV0cmllcztcblx0XHRcdGlmIChtYXRlcmlhbHMubGVuZ3RoID4gMCkgb3V0cHV0Lm1hdGVyaWFscyA9IG1hdGVyaWFscztcblx0XHRcdGlmICh0ZXh0dXJlcy5sZW5ndGggPiAwKSBvdXRwdXQudGV4dHVyZXMgPSB0ZXh0dXJlcztcblx0XHRcdGlmIChpbWFnZXMubGVuZ3RoID4gMCkgb3V0cHV0LmltYWdlcyA9IGltYWdlcztcblx0XHRcdGlmIChzaGFwZXMubGVuZ3RoID4gMCkgb3V0cHV0LnNoYXBlcyA9IHNoYXBlcztcblx0XHRcdGlmIChza2VsZXRvbnMubGVuZ3RoID4gMCkgb3V0cHV0LnNrZWxldG9ucyA9IHNrZWxldG9ucztcblx0XHRcdGlmIChhbmltYXRpb25zLmxlbmd0aCA+IDApIG91dHB1dC5hbmltYXRpb25zID0gYW5pbWF0aW9ucztcblx0XHR9XG5cblx0XHRvdXRwdXQub2JqZWN0ID0gb2JqZWN0O1xuXHRcdHJldHVybiBvdXRwdXQ7IC8vIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBjYWNoZSBoYXNoXG5cdFx0Ly8gcmVtb3ZlIG1ldGFkYXRhIG9uIGVhY2ggaXRlbVxuXHRcdC8vIGFuZCByZXR1cm4gYXMgYXJyYXlcblxuXHRcdGZ1bmN0aW9uIGV4dHJhY3RGcm9tQ2FjaGUoY2FjaGUpIHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWNoZSkge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gY2FjaGVba2V5XTtcblx0XHRcdFx0ZGVsZXRlIGRhdGEubWV0YWRhdGE7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdH1cblx0fVxuXG5cdGNsb25lKHJlY3Vyc2l2ZSkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcywgcmVjdXJzaXZlKTtcblx0fVxuXG5cdGNvcHkoc291cmNlLCByZWN1cnNpdmUgPSB0cnVlKSB7XG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cdFx0dGhpcy51cC5jb3B5KHNvdXJjZS51cCk7XG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KHNvdXJjZS5wb3NpdGlvbik7XG5cdFx0dGhpcy5yb3RhdGlvbi5vcmRlciA9IHNvdXJjZS5yb3RhdGlvbi5vcmRlcjtcblx0XHR0aGlzLnF1YXRlcm5pb24uY29weShzb3VyY2UucXVhdGVybmlvbik7XG5cdFx0dGhpcy5zY2FsZS5jb3B5KHNvdXJjZS5zY2FsZSk7XG5cdFx0dGhpcy5tYXRyaXguY29weShzb3VyY2UubWF0cml4KTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkLmNvcHkoc291cmNlLm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSBzb3VyY2UubWF0cml4V29ybGROZWVkc1VwZGF0ZTtcblx0XHR0aGlzLmxheWVycy5tYXNrID0gc291cmNlLmxheWVycy5tYXNrO1xuXHRcdHRoaXMudmlzaWJsZSA9IHNvdXJjZS52aXNpYmxlO1xuXHRcdHRoaXMuY2FzdFNoYWRvdyA9IHNvdXJjZS5jYXN0U2hhZG93O1xuXHRcdHRoaXMucmVjZWl2ZVNoYWRvdyA9IHNvdXJjZS5yZWNlaXZlU2hhZG93O1xuXHRcdHRoaXMuZnJ1c3R1bUN1bGxlZCA9IHNvdXJjZS5mcnVzdHVtQ3VsbGVkO1xuXHRcdHRoaXMucmVuZGVyT3JkZXIgPSBzb3VyY2UucmVuZGVyT3JkZXI7XG5cdFx0dGhpcy51c2VyRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc291cmNlLnVzZXJEYXRhKSk7XG5cblx0XHRpZiAocmVjdXJzaXZlID09PSB0cnVlKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjaGlsZCA9IHNvdXJjZS5jaGlsZHJlbltpXTtcblx0XHRcdFx0dGhpcy5hZGQoY2hpbGQuY2xvbmUoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5PYmplY3QzRC5EZWZhdWx0VXAgPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcbk9iamVjdDNELkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlID0gdHJ1ZTtcbk9iamVjdDNELnByb3RvdHlwZS5pc09iamVjdDNEID0gdHJ1ZTtcblxuY29uc3QgX3YwJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YxJDMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YyJDIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YzJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZhYiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmFjID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92YmMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZhcCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmJwID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92Y3AgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgVHJpYW5nbGUge1xuXHRjb25zdHJ1Y3RvcihhID0gbmV3IFZlY3RvcjMoKSwgYiA9IG5ldyBWZWN0b3IzKCksIGMgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0dGhpcy5hID0gYTtcblx0XHR0aGlzLmIgPSBiO1xuXHRcdHRoaXMuYyA9IGM7XG5cdH1cblxuXHRzdGF0aWMgZ2V0Tm9ybWFsKGEsIGIsIGMsIHRhcmdldCkge1xuXHRcdHRhcmdldC5zdWJWZWN0b3JzKGMsIGIpO1xuXG5cdFx0X3YwJDEuc3ViVmVjdG9ycyhhLCBiKTtcblxuXHRcdHRhcmdldC5jcm9zcyhfdjAkMSk7XG5cdFx0Y29uc3QgdGFyZ2V0TGVuZ3RoU3EgPSB0YXJnZXQubGVuZ3RoU3EoKTtcblxuXHRcdGlmICh0YXJnZXRMZW5ndGhTcSA+IDApIHtcblx0XHRcdHJldHVybiB0YXJnZXQubXVsdGlwbHlTY2FsYXIoMSAvIE1hdGguc3FydCh0YXJnZXRMZW5ndGhTcSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KDAsIDAsIDApO1xuXHR9IC8vIHN0YXRpYy9pbnN0YW5jZSBtZXRob2QgdG8gY2FsY3VsYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzXG5cdC8vIGJhc2VkIG9uOiBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5odG1sXG5cblxuXHRzdGF0aWMgZ2V0QmFyeWNvb3JkKHBvaW50LCBhLCBiLCBjLCB0YXJnZXQpIHtcblx0XHRfdjAkMS5zdWJWZWN0b3JzKGMsIGEpO1xuXG5cdFx0X3YxJDMuc3ViVmVjdG9ycyhiLCBhKTtcblxuXHRcdF92MiQyLnN1YlZlY3RvcnMocG9pbnQsIGEpO1xuXG5cdFx0Y29uc3QgZG90MDAgPSBfdjAkMS5kb3QoX3YwJDEpO1xuXG5cdFx0Y29uc3QgZG90MDEgPSBfdjAkMS5kb3QoX3YxJDMpO1xuXG5cdFx0Y29uc3QgZG90MDIgPSBfdjAkMS5kb3QoX3YyJDIpO1xuXG5cdFx0Y29uc3QgZG90MTEgPSBfdjEkMy5kb3QoX3YxJDMpO1xuXG5cdFx0Y29uc3QgZG90MTIgPSBfdjEkMy5kb3QoX3YyJDIpO1xuXG5cdFx0Y29uc3QgZGVub20gPSBkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3QwMTsgLy8gY29sbGluZWFyIG9yIHNpbmd1bGFyIHRyaWFuZ2xlXG5cblx0XHRpZiAoZGVub20gPT09IDApIHtcblx0XHRcdC8vIGFyYml0cmFyeSBsb2NhdGlvbiBvdXRzaWRlIG9mIHRyaWFuZ2xlP1xuXHRcdFx0Ly8gbm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgYmVzdCBpZGVhLCBtYXliZSBzaG91bGQgYmUgcmV0dXJuaW5nIHVuZGVmaW5lZFxuXHRcdFx0cmV0dXJuIHRhcmdldC5zZXQoLTIsIC0xLCAtMSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW52RGVub20gPSAxIC8gZGVub207XG5cdFx0Y29uc3QgdSA9IChkb3QxMSAqIGRvdDAyIC0gZG90MDEgKiBkb3QxMikgKiBpbnZEZW5vbTtcblx0XHRjb25zdCB2ID0gKGRvdDAwICogZG90MTIgLSBkb3QwMSAqIGRvdDAyKSAqIGludkRlbm9tOyAvLyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBtdXN0IGFsd2F5cyBzdW0gdG8gMVxuXG5cdFx0cmV0dXJuIHRhcmdldC5zZXQoMSAtIHUgLSB2LCB2LCB1KTtcblx0fVxuXG5cdHN0YXRpYyBjb250YWluc1BvaW50KHBvaW50LCBhLCBiLCBjKSB7XG5cdFx0dGhpcy5nZXRCYXJ5Y29vcmQocG9pbnQsIGEsIGIsIGMsIF92MyQxKTtcblx0XHRyZXR1cm4gX3YzJDEueCA+PSAwICYmIF92MyQxLnkgPj0gMCAmJiBfdjMkMS54ICsgX3YzJDEueSA8PSAxO1xuXHR9XG5cblx0c3RhdGljIGdldFVWKHBvaW50LCBwMSwgcDIsIHAzLCB1djEsIHV2MiwgdXYzLCB0YXJnZXQpIHtcblx0XHR0aGlzLmdldEJhcnljb29yZChwb2ludCwgcDEsIHAyLCBwMywgX3YzJDEpO1xuXHRcdHRhcmdldC5zZXQoMCwgMCk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcih1djEsIF92MyQxLngpO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IodXYyLCBfdjMkMS55KTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHV2MywgX3YzJDEueik7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdHN0YXRpYyBpc0Zyb250RmFjaW5nKGEsIGIsIGMsIGRpcmVjdGlvbikge1xuXHRcdF92MCQxLnN1YlZlY3RvcnMoYywgYik7XG5cblx0XHRfdjEkMy5zdWJWZWN0b3JzKGEsIGIpOyAvLyBzdHJpY3RseSBmcm9udCBmYWNpbmdcblxuXG5cdFx0cmV0dXJuIF92MCQxLmNyb3NzKF92MSQzKS5kb3QoZGlyZWN0aW9uKSA8IDAgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRzZXQoYSwgYiwgYykge1xuXHRcdHRoaXMuYS5jb3B5KGEpO1xuXHRcdHRoaXMuYi5jb3B5KGIpO1xuXHRcdHRoaXMuYy5jb3B5KGMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVBvaW50c0FuZEluZGljZXMocG9pbnRzLCBpMCwgaTEsIGkyKSB7XG5cdFx0dGhpcy5hLmNvcHkocG9pbnRzW2kwXSk7XG5cdFx0dGhpcy5iLmNvcHkocG9pbnRzW2kxXSk7XG5cdFx0dGhpcy5jLmNvcHkocG9pbnRzW2kyXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tQXR0cmlidXRlQW5kSW5kaWNlcyhhdHRyaWJ1dGUsIGkwLCBpMSwgaTIpIHtcblx0XHR0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGkwKTtcblx0XHR0aGlzLmIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGkxKTtcblx0XHR0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGkyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHRjb3B5KHRyaWFuZ2xlKSB7XG5cdFx0dGhpcy5hLmNvcHkodHJpYW5nbGUuYSk7XG5cdFx0dGhpcy5iLmNvcHkodHJpYW5nbGUuYik7XG5cdFx0dGhpcy5jLmNvcHkodHJpYW5nbGUuYyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRBcmVhKCkge1xuXHRcdF92MCQxLnN1YlZlY3RvcnModGhpcy5jLCB0aGlzLmIpO1xuXG5cdFx0X3YxJDMuc3ViVmVjdG9ycyh0aGlzLmEsIHRoaXMuYik7XG5cblx0XHRyZXR1cm4gX3YwJDEuY3Jvc3MoX3YxJDMpLmxlbmd0aCgpICogMC41O1xuXHR9XG5cblx0Z2V0TWlkcG9pbnQodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5hZGRWZWN0b3JzKHRoaXMuYSwgdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxIC8gMyk7XG5cdH1cblxuXHRnZXROb3JtYWwodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmdldE5vcm1hbCh0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0YXJnZXQpO1xuXHR9XG5cblx0Z2V0UGxhbmUodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLCB0aGlzLmIsIHRoaXMuYyk7XG5cdH1cblxuXHRnZXRCYXJ5Y29vcmQocG9pbnQsIHRhcmdldCkge1xuXHRcdHJldHVybiBUcmlhbmdsZS5nZXRCYXJ5Y29vcmQocG9pbnQsIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIHRhcmdldCk7XG5cdH1cblxuXHRnZXRVVihwb2ludCwgdXYxLCB1djIsIHV2MywgdGFyZ2V0KSB7XG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmdldFVWKHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB1djEsIHV2MiwgdXYzLCB0YXJnZXQpO1xuXHR9XG5cblx0Y29udGFpbnNQb2ludChwb2ludCkge1xuXHRcdHJldHVybiBUcmlhbmdsZS5jb250YWluc1BvaW50KHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jKTtcblx0fVxuXG5cdGlzRnJvbnRGYWNpbmcoZGlyZWN0aW9uKSB7XG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmlzRnJvbnRGYWNpbmcodGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgZGlyZWN0aW9uKTtcblx0fVxuXG5cdGludGVyc2VjdHNCb3goYm94KSB7XG5cdFx0cmV0dXJuIGJveC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyk7XG5cdH1cblxuXHRjbG9zZXN0UG9pbnRUb1BvaW50KHAsIHRhcmdldCkge1xuXHRcdGNvbnN0IGEgPSB0aGlzLmEsXG5cdFx0XHRcdFx0YiA9IHRoaXMuYixcblx0XHRcdFx0XHRjID0gdGhpcy5jO1xuXHRcdGxldCB2LCB3OyAvLyBhbGdvcml0aG0gdGhhbmtzIHRvIFJlYWwtVGltZSBDb2xsaXNpb24gRGV0ZWN0aW9uIGJ5IENocmlzdGVyIEVyaWNzb24sXG5cdFx0Ly8gcHVibGlzaGVkIGJ5IE1vcmdhbiBLYXVmbWFubiBQdWJsaXNoZXJzLCAoYykgMjAwNSBFbHNldmllciBJbmMuLFxuXHRcdC8vIHVuZGVyIHRoZSBhY2NvbXBhbnlpbmcgbGljZW5zZTsgc2VlIGNoYXB0ZXIgNS4xLjUgZm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uLlxuXHRcdC8vIGJhc2ljYWxseSwgd2UncmUgZGlzdGluZ3Vpc2hpbmcgd2hpY2ggb2YgdGhlIHZvcm9ub2kgcmVnaW9ucyBvZiB0aGUgdHJpYW5nbGVcblx0XHQvLyB0aGUgcG9pbnQgbGllcyBpbiB3aXRoIHRoZSBtaW5pbXVtIGFtb3VudCBvZiByZWR1bmRhbnQgY29tcHV0YXRpb24uXG5cblx0XHRfdmFiLnN1YlZlY3RvcnMoYiwgYSk7XG5cblx0XHRfdmFjLnN1YlZlY3RvcnMoYywgYSk7XG5cblx0XHRfdmFwLnN1YlZlY3RvcnMocCwgYSk7XG5cblx0XHRjb25zdCBkMSA9IF92YWIuZG90KF92YXApO1xuXG5cdFx0Y29uc3QgZDIgPSBfdmFjLmRvdChfdmFwKTtcblxuXHRcdGlmIChkMSA8PSAwICYmIGQyIDw9IDApIHtcblx0XHRcdC8vIHZlcnRleCByZWdpb24gb2YgQTsgYmFyeWNlbnRyaWMgY29vcmRzICgxLCAwLCAwKVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGEpO1xuXHRcdH1cblxuXHRcdF92YnAuc3ViVmVjdG9ycyhwLCBiKTtcblxuXHRcdGNvbnN0IGQzID0gX3ZhYi5kb3QoX3ZicCk7XG5cblx0XHRjb25zdCBkNCA9IF92YWMuZG90KF92YnApO1xuXG5cdFx0aWYgKGQzID49IDAgJiYgZDQgPD0gZDMpIHtcblx0XHRcdC8vIHZlcnRleCByZWdpb24gb2YgQjsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAxLCAwKVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZjID0gZDEgKiBkNCAtIGQzICogZDI7XG5cblx0XHRpZiAodmMgPD0gMCAmJiBkMSA+PSAwICYmIGQzIDw9IDApIHtcblx0XHRcdHYgPSBkMSAvIChkMSAtIGQzKTsgLy8gZWRnZSByZWdpb24gb2YgQUI7IGJhcnljZW50cmljIGNvb3JkcyAoMS12LCB2LCAwKVxuXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoYSkuYWRkU2NhbGVkVmVjdG9yKF92YWIsIHYpO1xuXHRcdH1cblxuXHRcdF92Y3Auc3ViVmVjdG9ycyhwLCBjKTtcblxuXHRcdGNvbnN0IGQ1ID0gX3ZhYi5kb3QoX3ZjcCk7XG5cblx0XHRjb25zdCBkNiA9IF92YWMuZG90KF92Y3ApO1xuXG5cdFx0aWYgKGQ2ID49IDAgJiYgZDUgPD0gZDYpIHtcblx0XHRcdC8vIHZlcnRleCByZWdpb24gb2YgQzsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAwLCAxKVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZiID0gZDUgKiBkMiAtIGQxICogZDY7XG5cblx0XHRpZiAodmIgPD0gMCAmJiBkMiA+PSAwICYmIGQ2IDw9IDApIHtcblx0XHRcdHcgPSBkMiAvIChkMiAtIGQ2KTsgLy8gZWRnZSByZWdpb24gb2YgQUM7IGJhcnljZW50cmljIGNvb3JkcyAoMS13LCAwLCB3KVxuXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoYSkuYWRkU2NhbGVkVmVjdG9yKF92YWMsIHcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhID0gZDMgKiBkNiAtIGQ1ICogZDQ7XG5cblx0XHRpZiAodmEgPD0gMCAmJiBkNCAtIGQzID49IDAgJiYgZDUgLSBkNiA+PSAwKSB7XG5cdFx0XHRfdmJjLnN1YlZlY3RvcnMoYywgYik7XG5cblx0XHRcdHcgPSAoZDQgLSBkMykgLyAoZDQgLSBkMyArIChkNSAtIGQ2KSk7IC8vIGVkZ2UgcmVnaW9uIG9mIEJDOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDAsIDEtdywgdylcblxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGIpLmFkZFNjYWxlZFZlY3RvcihfdmJjLCB3KTsgLy8gZWRnZSByZWdpb24gb2YgQkNcblx0XHR9IC8vIGZhY2UgcmVnaW9uXG5cblxuXHRcdGNvbnN0IGRlbm9tID0gMSAvICh2YSArIHZiICsgdmMpOyAvLyB1ID0gdmEgKiBkZW5vbVxuXG5cdFx0diA9IHZiICogZGVub207XG5cdFx0dyA9IHZjICogZGVub207XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KGEpLmFkZFNjYWxlZFZlY3RvcihfdmFiLCB2KS5hZGRTY2FsZWRWZWN0b3IoX3ZhYywgdyk7XG5cdH1cblxuXHRlcXVhbHModHJpYW5nbGUpIHtcblx0XHRyZXR1cm4gdHJpYW5nbGUuYS5lcXVhbHModGhpcy5hKSAmJiB0cmlhbmdsZS5iLmVxdWFscyh0aGlzLmIpICYmIHRyaWFuZ2xlLmMuZXF1YWxzKHRoaXMuYyk7XG5cdH1cblxufVxuXG5sZXQgbWF0ZXJpYWxJZCA9IDA7XG5cbmNsYXNzIE1hdGVyaWFsIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lkJywge1xuXHRcdFx0dmFsdWU6IG1hdGVyaWFsSWQrK1xuXHRcdH0pO1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdHRoaXMudHlwZSA9ICdNYXRlcmlhbCc7XG5cdFx0dGhpcy5mb2cgPSB0cnVlO1xuXHRcdHRoaXMuYmxlbmRpbmcgPSBOb3JtYWxCbGVuZGluZztcblx0XHR0aGlzLnNpZGUgPSBGcm9udFNpZGU7XG5cdFx0dGhpcy52ZXJ0ZXhDb2xvcnMgPSBmYWxzZTtcblx0XHR0aGlzLm9wYWNpdHkgPSAxO1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblx0XHR0aGlzLmJsZW5kU3JjID0gU3JjQWxwaGFGYWN0b3I7XG5cdFx0dGhpcy5ibGVuZERzdCA9IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I7XG5cdFx0dGhpcy5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb247XG5cdFx0dGhpcy5ibGVuZFNyY0FscGhhID0gbnVsbDtcblx0XHR0aGlzLmJsZW5kRHN0QWxwaGEgPSBudWxsO1xuXHRcdHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblx0XHR0aGlzLmRlcHRoRnVuYyA9IExlc3NFcXVhbERlcHRoO1xuXHRcdHRoaXMuZGVwdGhUZXN0ID0gdHJ1ZTtcblx0XHR0aGlzLmRlcHRoV3JpdGUgPSB0cnVlO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IDB4ZmY7XG5cdFx0dGhpcy5zdGVuY2lsRnVuYyA9IEFsd2F5c1N0ZW5jaWxGdW5jO1xuXHRcdHRoaXMuc3RlbmNpbFJlZiA9IDA7XG5cdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSAweGZmO1xuXHRcdHRoaXMuc3RlbmNpbEZhaWwgPSBLZWVwU3RlbmNpbE9wO1xuXHRcdHRoaXMuc3RlbmNpbFpGYWlsID0gS2VlcFN0ZW5jaWxPcDtcblx0XHR0aGlzLnN0ZW5jaWxaUGFzcyA9IEtlZXBTdGVuY2lsT3A7XG5cdFx0dGhpcy5zdGVuY2lsV3JpdGUgPSBmYWxzZTtcblx0XHR0aGlzLmNsaXBwaW5nUGxhbmVzID0gbnVsbDtcblx0XHR0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblx0XHR0aGlzLmNsaXBTaGFkb3dzID0gZmFsc2U7XG5cdFx0dGhpcy5zaGFkb3dTaWRlID0gbnVsbDtcblx0XHR0aGlzLmNvbG9yV3JpdGUgPSB0cnVlO1xuXHRcdHRoaXMuYWxwaGFXcml0ZSA9IHRydWU7XG5cdFx0dGhpcy5wcmVjaXNpb24gPSBudWxsOyAvLyBvdmVycmlkZSB0aGUgcmVuZGVyZXIncyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgdGhpcyBtYXRlcmlhbFxuXG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0ID0gZmFsc2U7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMDtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXRVbml0cyA9IDA7XG5cdFx0dGhpcy5kaXRoZXJpbmcgPSBmYWxzZTtcblx0XHR0aGlzLmFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlO1xuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cdFx0dGhpcy52aXNpYmxlID0gdHJ1ZTtcblx0XHR0aGlzLnRvbmVNYXBwZWQgPSB0cnVlO1xuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXHRcdHRoaXMuX2FscGhhVGVzdCA9IDA7XG5cdH1cblxuXHRnZXQgYWxwaGFUZXN0KCkge1xuXHRcdHJldHVybiB0aGlzLl9hbHBoYVRlc3Q7XG5cdH1cblxuXHRzZXQgYWxwaGFUZXN0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX2FscGhhVGVzdCA+IDAgIT09IHZhbHVlID4gMCkge1xuXHRcdFx0dGhpcy52ZXJzaW9uKys7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYWxwaGFUZXN0ID0gdmFsdWU7XG5cdH1cblxuXHRvbkJ1aWxkKCkge31cblxuXHRvbkJlZm9yZVJlbmRlcigpIHt9XG5cblx0b25CZWZvcmVDb21waWxlKCkge31cblxuXHRjdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRzZXRWYWx1ZXModmFsdWVzKSB7XG5cdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gdmFsdWVzW2tleV07XG5cblx0XHRcdGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0ZXJpYWw6IFxcJycgKyBrZXkgKyAnXFwnIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuJyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSAvLyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBpZiBzaGFkaW5nIGlzIHNldCBpbiB0aGUgY29uc3RydWN0b3JcblxuXG5cdFx0XHRpZiAoa2V5ID09PSAnc2hhZGluZycpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLicpO1xuXHRcdFx0XHR0aGlzLmZsYXRTaGFkaW5nID0gbmV3VmFsdWUgPT09IEZsYXRTaGFkaW5nID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpc1trZXldO1xuXG5cdFx0XHRpZiAoY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogXFwnJyArIGtleSArICdcXCcgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4nKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLmlzQ29sb3IpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlLnNldChuZXdWYWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNWZWN0b3IzICYmIG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmlzVmVjdG9yMykge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUuY29weShuZXdWYWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzW2tleV0gPSBuZXdWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGlzUm9vdCA9IG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZyc7XG5cblx0XHRpZiAoaXNSb290KSB7XG5cdFx0XHRtZXRhID0ge1xuXHRcdFx0XHR0ZXh0dXJlczoge30sXG5cdFx0XHRcdGltYWdlczoge31cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ01hdGVyaWFsJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnTWF0ZXJpYWwudG9KU09OJ1xuXHRcdFx0fVxuXHRcdH07IC8vIHN0YW5kYXJkIE1hdGVyaWFsIHNlcmlhbGl6YXRpb25cblxuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRkYXRhLnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0aWYgKHRoaXMubmFtZSAhPT0gJycpIGRhdGEubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAodGhpcy5jb2xvciAmJiB0aGlzLmNvbG9yLmlzQ29sb3IpIGRhdGEuY29sb3IgPSB0aGlzLmNvbG9yLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSBkYXRhLnJvdWdobmVzcyA9IHRoaXMucm91Z2huZXNzO1xuXHRcdGlmICh0aGlzLm1ldGFsbmVzcyAhPT0gdW5kZWZpbmVkKSBkYXRhLm1ldGFsbmVzcyA9IHRoaXMubWV0YWxuZXNzO1xuXHRcdGlmICh0aGlzLnNoZWVuICE9PSB1bmRlZmluZWQpIGRhdGEuc2hlZW4gPSB0aGlzLnNoZWVuO1xuXHRcdGlmICh0aGlzLnNoZWVuQ29sb3IgJiYgdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3IpIGRhdGEuc2hlZW5Db2xvciA9IHRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5zaGVlblJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSBkYXRhLnNoZWVuUm91Z2huZXNzID0gdGhpcy5zaGVlblJvdWdobmVzcztcblx0XHRpZiAodGhpcy5lbWlzc2l2ZSAmJiB0aGlzLmVtaXNzaXZlLmlzQ29sb3IpIGRhdGEuZW1pc3NpdmUgPSB0aGlzLmVtaXNzaXZlLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ICYmIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgIT09IDEpIGRhdGEuZW1pc3NpdmVJbnRlbnNpdHkgPSB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5O1xuXHRcdGlmICh0aGlzLnNwZWN1bGFyICYmIHRoaXMuc3BlY3VsYXIuaXNDb2xvcikgZGF0YS5zcGVjdWxhciA9IHRoaXMuc3BlY3VsYXIuZ2V0SGV4KCk7XG5cdFx0aWYgKHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgZGF0YS5zcGVjdWxhckludGVuc2l0eSA9IHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk7XG5cdFx0aWYgKHRoaXMuc3BlY3VsYXJDb2xvciAmJiB0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvcikgZGF0YS5zcGVjdWxhckNvbG9yID0gdGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkKSBkYXRhLnNoaW5pbmVzcyA9IHRoaXMuc2hpbmluZXNzO1xuXHRcdGlmICh0aGlzLmNsZWFyY29hdCAhPT0gdW5kZWZpbmVkKSBkYXRhLmNsZWFyY29hdCA9IHRoaXMuY2xlYXJjb2F0O1xuXHRcdGlmICh0aGlzLmNsZWFyY29hdFJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSBkYXRhLmNsZWFyY29hdFJvdWdobmVzcyA9IHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzO1xuXG5cdFx0aWYgKHRoaXMuY2xlYXJjb2F0TWFwICYmIHRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5jbGVhcmNvYXRNYXAgPSB0aGlzLmNsZWFyY29hdE1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgJiYgdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCAmJiB0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUpIHtcblx0XHRcdGRhdGEuY2xlYXJjb2F0Tm9ybWFsTWFwID0gdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0XHRkYXRhLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSkgZGF0YS5tYXAgPSB0aGlzLm1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5tYXRjYXAgJiYgdGhpcy5tYXRjYXAuaXNUZXh0dXJlKSBkYXRhLm1hdGNhcCA9IHRoaXMubWF0Y2FwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLmFscGhhTWFwICYmIHRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlKSBkYXRhLmFscGhhTWFwID0gdGhpcy5hbHBoYU1hcC50b0pTT04obWV0YSkudXVpZDtcblxuXHRcdGlmICh0aGlzLmxpZ2h0TWFwICYmIHRoaXMubGlnaHRNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmxpZ2h0TWFwID0gdGhpcy5saWdodE1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdGRhdGEubGlnaHRNYXBJbnRlbnNpdHkgPSB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmFvTWFwICYmIHRoaXMuYW9NYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmFvTWFwID0gdGhpcy5hb01hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdGRhdGEuYW9NYXBJbnRlbnNpdHkgPSB0aGlzLmFvTWFwSW50ZW5zaXR5O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmJ1bXBNYXAgJiYgdGhpcy5idW1wTWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5idW1wTWFwID0gdGhpcy5idW1wTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0ZGF0YS5idW1wU2NhbGUgPSB0aGlzLmJ1bXBTY2FsZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ub3JtYWxNYXAgJiYgdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLm5vcm1hbE1hcCA9IHRoaXMubm9ybWFsTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0ZGF0YS5ub3JtYWxNYXBUeXBlID0gdGhpcy5ub3JtYWxNYXBUeXBlO1xuXHRcdFx0ZGF0YS5ub3JtYWxTY2FsZSA9IHRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmRpc3BsYWNlbWVudE1hcCAmJiB0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUpIHtcblx0XHRcdGRhdGEuZGlzcGxhY2VtZW50TWFwID0gdGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudFNjYWxlID0gdGhpcy5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdGRhdGEuZGlzcGxhY2VtZW50QmlhcyA9IHRoaXMuZGlzcGxhY2VtZW50Qmlhcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yb3VnaG5lc3NNYXAgJiYgdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlKSBkYXRhLnJvdWdobmVzc01hcCA9IHRoaXMucm91Z2huZXNzTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLm1ldGFsbmVzc01hcCAmJiB0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUpIGRhdGEubWV0YWxuZXNzTWFwID0gdGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0aWYgKHRoaXMuZW1pc3NpdmVNYXAgJiYgdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUpIGRhdGEuZW1pc3NpdmVNYXAgPSB0aGlzLmVtaXNzaXZlTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLnNwZWN1bGFyTWFwICYmIHRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlKSBkYXRhLnNwZWN1bGFyTWFwID0gdGhpcy5zcGVjdWxhck1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCAmJiB0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSkgZGF0YS5zcGVjdWxhckludGVuc2l0eU1hcCA9IHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0aWYgKHRoaXMuc3BlY3VsYXJDb2xvck1hcCAmJiB0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlKSBkYXRhLnNwZWN1bGFyQ29sb3JNYXAgPSB0aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cblx0XHRpZiAodGhpcy5lbnZNYXAgJiYgdGhpcy5lbnZNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmVudk1hcCA9IHRoaXMuZW52TWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0aWYgKHRoaXMuY29tYmluZSAhPT0gdW5kZWZpbmVkKSBkYXRhLmNvbWJpbmUgPSB0aGlzLmNvbWJpbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW52TWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIGRhdGEuZW52TWFwSW50ZW5zaXR5ID0gdGhpcy5lbnZNYXBJbnRlbnNpdHk7XG5cdFx0aWYgKHRoaXMucmVmbGVjdGl2aXR5ICE9PSB1bmRlZmluZWQpIGRhdGEucmVmbGVjdGl2aXR5ID0gdGhpcy5yZWZsZWN0aXZpdHk7XG5cdFx0aWYgKHRoaXMucmVmcmFjdGlvblJhdGlvICE9PSB1bmRlZmluZWQpIGRhdGEucmVmcmFjdGlvblJhdGlvID0gdGhpcy5yZWZyYWN0aW9uUmF0aW87XG5cblx0XHRpZiAodGhpcy5ncmFkaWVudE1hcCAmJiB0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5ncmFkaWVudE1hcCA9IHRoaXMuZ3JhZGllbnRNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHJhbnNtaXNzaW9uICE9PSB1bmRlZmluZWQpIGRhdGEudHJhbnNtaXNzaW9uID0gdGhpcy50cmFuc21pc3Npb247XG5cdFx0aWYgKHRoaXMudHJhbnNtaXNzaW9uTWFwICYmIHRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSkgZGF0YS50cmFuc21pc3Npb25NYXAgPSB0aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy50aGlja25lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS50aGlja25lc3MgPSB0aGlzLnRoaWNrbmVzcztcblx0XHRpZiAodGhpcy50aGlja25lc3NNYXAgJiYgdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlKSBkYXRhLnRoaWNrbmVzc01hcCA9IHRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UgIT09IHVuZGVmaW5lZCkgZGF0YS5hdHRlbnVhdGlvbkRpc3RhbmNlID0gdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdGlmICh0aGlzLmF0dGVudWF0aW9uQ29sb3IgIT09IHVuZGVmaW5lZCkgZGF0YS5hdHRlbnVhdGlvbkNvbG9yID0gdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLnNpemUgIT09IHVuZGVmaW5lZCkgZGF0YS5zaXplID0gdGhpcy5zaXplO1xuXHRcdGlmICh0aGlzLnNoYWRvd1NpZGUgIT09IG51bGwpIGRhdGEuc2hhZG93U2lkZSA9IHRoaXMuc2hhZG93U2lkZTtcblx0XHRpZiAodGhpcy5zaXplQXR0ZW51YXRpb24gIT09IHVuZGVmaW5lZCkgZGF0YS5zaXplQXR0ZW51YXRpb24gPSB0aGlzLnNpemVBdHRlbnVhdGlvbjtcblx0XHRpZiAodGhpcy5ibGVuZGluZyAhPT0gTm9ybWFsQmxlbmRpbmcpIGRhdGEuYmxlbmRpbmcgPSB0aGlzLmJsZW5kaW5nO1xuXHRcdGlmICh0aGlzLnNpZGUgIT09IEZyb250U2lkZSkgZGF0YS5zaWRlID0gdGhpcy5zaWRlO1xuXHRcdGlmICh0aGlzLnZlcnRleENvbG9ycykgZGF0YS52ZXJ0ZXhDb2xvcnMgPSB0cnVlO1xuXHRcdGlmICh0aGlzLm9wYWNpdHkgPCAxKSBkYXRhLm9wYWNpdHkgPSB0aGlzLm9wYWNpdHk7XG5cdFx0aWYgKHRoaXMudHJhbnNwYXJlbnQgPT09IHRydWUpIGRhdGEudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xuXHRcdGRhdGEuZGVwdGhGdW5jID0gdGhpcy5kZXB0aEZ1bmM7XG5cdFx0ZGF0YS5kZXB0aFRlc3QgPSB0aGlzLmRlcHRoVGVzdDtcblx0XHRkYXRhLmRlcHRoV3JpdGUgPSB0aGlzLmRlcHRoV3JpdGU7XG5cdFx0ZGF0YS5jb2xvcldyaXRlID0gdGhpcy5jb2xvcldyaXRlO1xuXHRcdGRhdGEuYWxwaGFXcml0ZSA9IHRoaXMuYWxwaGFXcml0ZTtcblx0XHRkYXRhLnN0ZW5jaWxXcml0ZSA9IHRoaXMuc3RlbmNpbFdyaXRlO1xuXHRcdGRhdGEuc3RlbmNpbFdyaXRlTWFzayA9IHRoaXMuc3RlbmNpbFdyaXRlTWFzaztcblx0XHRkYXRhLnN0ZW5jaWxGdW5jID0gdGhpcy5zdGVuY2lsRnVuYztcblx0XHRkYXRhLnN0ZW5jaWxSZWYgPSB0aGlzLnN0ZW5jaWxSZWY7XG5cdFx0ZGF0YS5zdGVuY2lsRnVuY01hc2sgPSB0aGlzLnN0ZW5jaWxGdW5jTWFzaztcblx0XHRkYXRhLnN0ZW5jaWxGYWlsID0gdGhpcy5zdGVuY2lsRmFpbDtcblx0XHRkYXRhLnN0ZW5jaWxaRmFpbCA9IHRoaXMuc3RlbmNpbFpGYWlsO1xuXHRcdGRhdGEuc3RlbmNpbFpQYXNzID0gdGhpcy5zdGVuY2lsWlBhc3M7IC8vIHJvdGF0aW9uIChTcHJpdGVNYXRlcmlhbClcblxuXHRcdGlmICh0aGlzLnJvdGF0aW9uICYmIHRoaXMucm90YXRpb24gIT09IDApIGRhdGEucm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xuXHRcdGlmICh0aGlzLnBvbHlnb25PZmZzZXQgPT09IHRydWUpIGRhdGEucG9seWdvbk9mZnNldCA9IHRydWU7XG5cdFx0aWYgKHRoaXMucG9seWdvbk9mZnNldEZhY3RvciAhPT0gMCkgZGF0YS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yO1xuXHRcdGlmICh0aGlzLnBvbHlnb25PZmZzZXRVbml0cyAhPT0gMCkgZGF0YS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB0aGlzLnBvbHlnb25PZmZzZXRVbml0cztcblx0XHRpZiAodGhpcy5saW5ld2lkdGggJiYgdGhpcy5saW5ld2lkdGggIT09IDEpIGRhdGEubGluZXdpZHRoID0gdGhpcy5saW5ld2lkdGg7XG5cdFx0aWYgKHRoaXMuZGFzaFNpemUgIT09IHVuZGVmaW5lZCkgZGF0YS5kYXNoU2l6ZSA9IHRoaXMuZGFzaFNpemU7XG5cdFx0aWYgKHRoaXMuZ2FwU2l6ZSAhPT0gdW5kZWZpbmVkKSBkYXRhLmdhcFNpemUgPSB0aGlzLmdhcFNpemU7XG5cdFx0aWYgKHRoaXMuc2NhbGUgIT09IHVuZGVmaW5lZCkgZGF0YS5zY2FsZSA9IHRoaXMuc2NhbGU7XG5cdFx0aWYgKHRoaXMuZGl0aGVyaW5nID09PSB0cnVlKSBkYXRhLmRpdGhlcmluZyA9IHRydWU7XG5cdFx0aWYgKHRoaXMuYWxwaGFUZXN0ID4gMCkgZGF0YS5hbHBoYVRlc3QgPSB0aGlzLmFscGhhVGVzdDtcblx0XHRpZiAodGhpcy5hbHBoYVRvQ292ZXJhZ2UgPT09IHRydWUpIGRhdGEuYWxwaGFUb0NvdmVyYWdlID0gdGhpcy5hbHBoYVRvQ292ZXJhZ2U7XG5cdFx0aWYgKHRoaXMucHJlbXVsdGlwbGllZEFscGhhID09PSB0cnVlKSBkYXRhLnByZW11bHRpcGxpZWRBbHBoYSA9IHRoaXMucHJlbXVsdGlwbGllZEFscGhhO1xuXHRcdGlmICh0aGlzLndpcmVmcmFtZSA9PT0gdHJ1ZSkgZGF0YS53aXJlZnJhbWUgPSB0aGlzLndpcmVmcmFtZTtcblx0XHRpZiAodGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPiAxKSBkYXRhLndpcmVmcmFtZUxpbmV3aWR0aCA9IHRoaXMud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdGlmICh0aGlzLndpcmVmcmFtZUxpbmVjYXAgIT09ICdyb3VuZCcpIGRhdGEud2lyZWZyYW1lTGluZWNhcCA9IHRoaXMud2lyZWZyYW1lTGluZWNhcDtcblx0XHRpZiAodGhpcy53aXJlZnJhbWVMaW5lam9pbiAhPT0gJ3JvdW5kJykgZGF0YS53aXJlZnJhbWVMaW5lam9pbiA9IHRoaXMud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0aWYgKHRoaXMuZmxhdFNoYWRpbmcgPT09IHRydWUpIGRhdGEuZmxhdFNoYWRpbmcgPSB0aGlzLmZsYXRTaGFkaW5nO1xuXHRcdGlmICh0aGlzLnZpc2libGUgPT09IGZhbHNlKSBkYXRhLnZpc2libGUgPSBmYWxzZTtcblx0XHRpZiAodGhpcy50b25lTWFwcGVkID09PSBmYWxzZSkgZGF0YS50b25lTWFwcGVkID0gZmFsc2U7XG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpICE9PSAne30nKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTsgLy8gVE9ETzogQ29waWVkIGZyb20gT2JqZWN0M0QudG9KU09OXG5cblx0XHRmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hlKGNhY2hlKSB7XG5cdFx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FjaGUpIHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGNhY2hlW2tleV07XG5cdFx0XHRcdGRlbGV0ZSBkYXRhLm1ldGFkYXRhO1xuXHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHR9XG5cblx0XHRpZiAoaXNSb290KSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS50ZXh0dXJlcyk7XG5cdFx0XHRjb25zdCBpbWFnZXMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEuaW1hZ2VzKTtcblx0XHRcdGlmICh0ZXh0dXJlcy5sZW5ndGggPiAwKSBkYXRhLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cdFx0XHRpZiAoaW1hZ2VzLmxlbmd0aCA+IDApIGRhdGEuaW1hZ2VzID0gaW1hZ2VzO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cdFx0dGhpcy5mb2cgPSBzb3VyY2UuZm9nO1xuXHRcdHRoaXMuYmxlbmRpbmcgPSBzb3VyY2UuYmxlbmRpbmc7XG5cdFx0dGhpcy5zaWRlID0gc291cmNlLnNpZGU7XG5cdFx0dGhpcy52ZXJ0ZXhDb2xvcnMgPSBzb3VyY2UudmVydGV4Q29sb3JzO1xuXHRcdHRoaXMub3BhY2l0eSA9IHNvdXJjZS5vcGFjaXR5O1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBzb3VyY2UudHJhbnNwYXJlbnQ7XG5cdFx0dGhpcy5ibGVuZFNyYyA9IHNvdXJjZS5ibGVuZFNyYztcblx0XHR0aGlzLmJsZW5kRHN0ID0gc291cmNlLmJsZW5kRHN0O1xuXHRcdHRoaXMuYmxlbmRFcXVhdGlvbiA9IHNvdXJjZS5ibGVuZEVxdWF0aW9uO1xuXHRcdHRoaXMuYmxlbmRTcmNBbHBoYSA9IHNvdXJjZS5ibGVuZFNyY0FscGhhO1xuXHRcdHRoaXMuYmxlbmREc3RBbHBoYSA9IHNvdXJjZS5ibGVuZERzdEFscGhhO1xuXHRcdHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gc291cmNlLmJsZW5kRXF1YXRpb25BbHBoYTtcblx0XHR0aGlzLmRlcHRoRnVuYyA9IHNvdXJjZS5kZXB0aEZ1bmM7XG5cdFx0dGhpcy5kZXB0aFRlc3QgPSBzb3VyY2UuZGVwdGhUZXN0O1xuXHRcdHRoaXMuZGVwdGhXcml0ZSA9IHNvdXJjZS5kZXB0aFdyaXRlO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IHNvdXJjZS5zdGVuY2lsV3JpdGVNYXNrO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmMgPSBzb3VyY2Uuc3RlbmNpbEZ1bmM7XG5cdFx0dGhpcy5zdGVuY2lsUmVmID0gc291cmNlLnN0ZW5jaWxSZWY7XG5cdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSBzb3VyY2Uuc3RlbmNpbEZ1bmNNYXNrO1xuXHRcdHRoaXMuc3RlbmNpbEZhaWwgPSBzb3VyY2Uuc3RlbmNpbEZhaWw7XG5cdFx0dGhpcy5zdGVuY2lsWkZhaWwgPSBzb3VyY2Uuc3RlbmNpbFpGYWlsO1xuXHRcdHRoaXMuc3RlbmNpbFpQYXNzID0gc291cmNlLnN0ZW5jaWxaUGFzcztcblx0XHR0aGlzLnN0ZW5jaWxXcml0ZSA9IHNvdXJjZS5zdGVuY2lsV3JpdGU7XG5cdFx0Y29uc3Qgc3JjUGxhbmVzID0gc291cmNlLmNsaXBwaW5nUGxhbmVzO1xuXHRcdGxldCBkc3RQbGFuZXMgPSBudWxsO1xuXG5cdFx0aWYgKHNyY1BsYW5lcyAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgbiA9IHNyY1BsYW5lcy5sZW5ndGg7XG5cdFx0XHRkc3RQbGFuZXMgPSBuZXcgQXJyYXkobik7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0ZHN0UGxhbmVzW2ldID0gc3JjUGxhbmVzW2ldLmNsb25lKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGlwcGluZ1BsYW5lcyA9IGRzdFBsYW5lcztcblx0XHR0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBzb3VyY2UuY2xpcEludGVyc2VjdGlvbjtcblx0XHR0aGlzLmNsaXBTaGFkb3dzID0gc291cmNlLmNsaXBTaGFkb3dzO1xuXHRcdHRoaXMuc2hhZG93U2lkZSA9IHNvdXJjZS5zaGFkb3dTaWRlO1xuXHRcdHRoaXMuY29sb3JXcml0ZSA9IHNvdXJjZS5jb2xvcldyaXRlO1xuXHRcdHRoaXMuYWxwaGFXcml0ZSA9IHNvdXJjZS5hbHBoYVdyaXRlO1xuXHRcdHRoaXMucHJlY2lzaW9uID0gc291cmNlLnByZWNpc2lvbjtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXQgPSBzb3VyY2UucG9seWdvbk9mZnNldDtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBzb3VyY2UucG9seWdvbk9mZnNldEZhY3Rvcjtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXRVbml0cyA9IHNvdXJjZS5wb2x5Z29uT2Zmc2V0VW5pdHM7XG5cdFx0dGhpcy5kaXRoZXJpbmcgPSBzb3VyY2UuZGl0aGVyaW5nO1xuXHRcdHRoaXMuYWxwaGFUZXN0ID0gc291cmNlLmFscGhhVGVzdDtcblx0XHR0aGlzLmFscGhhVG9Db3ZlcmFnZSA9IHNvdXJjZS5hbHBoYVRvQ292ZXJhZ2U7XG5cdFx0dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbGllZEFscGhhO1xuXHRcdHRoaXMudmlzaWJsZSA9IHNvdXJjZS52aXNpYmxlO1xuXHRcdHRoaXMudG9uZU1hcHBlZCA9IHNvdXJjZS50b25lTWFwcGVkO1xuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNvdXJjZS51c2VyRGF0YSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0dHlwZTogJ2Rpc3Bvc2UnXG5cdFx0fSk7XG5cdH1cblxuXHRzZXQgbmVlZHNVcGRhdGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IHRydWUpIHRoaXMudmVyc2lvbisrO1xuXHR9XG5cbn1cblxuTWF0ZXJpYWwucHJvdG90eXBlLmlzTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRzcGVjdWxhck1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGVudk1hcDogbmV3IFRIUkVFLkN1YmVUZXh0dXJlKCBbcG9zeCwgbmVneCwgcG9zeSwgbmVneSwgcG9zeiwgbmVnel0gKSxcbiAqXHRjb21iaW5lOiBUSFJFRS5NdWx0aXBseSxcbiAqXHRyZWZsZWN0aXZpdHk6IDxmbG9hdD4sXG4gKlx0cmVmcmFjdGlvblJhdGlvOiA8ZmxvYXQ+LFxuICpcbiAqXHRkZXB0aFRlc3Q6IDxib29sPixcbiAqXHRkZXB0aFdyaXRlOiA8Ym9vbD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoQmFzaWNNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ01lc2hCYXNpY01hdGVyaWFsJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDB4ZmZmZmZmKTsgLy8gZW1pc3NpdmVcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IG51bGw7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0aW9uO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gMTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJztcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBzb3VyY2Uuc3BlY3VsYXJNYXA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IkOSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmVjdG9yMiQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNsYXNzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4nKTtcblx0XHR9XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLmFycmF5ID0gYXJyYXk7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8gaXRlbVNpemUgOiAwO1xuXHRcdHRoaXMubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQgPT09IHRydWU7XG5cdFx0dGhpcy51c2FnZSA9IFN0YXRpY0RyYXdVc2FnZTtcblx0XHR0aGlzLnVwZGF0ZVJhbmdlID0ge1xuXHRcdFx0b2Zmc2V0OiAwLFxuXHRcdFx0Y291bnQ6IC0xXG5cdFx0fTtcblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXHR9XG5cblx0b25VcGxvYWRDYWxsYmFjaygpIHt9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSB0cnVlKSB0aGlzLnZlcnNpb24rKztcblx0fVxuXG5cdHNldFVzYWdlKHZhbHVlKSB7XG5cdFx0dGhpcy51c2FnZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcblx0XHR0aGlzLmFycmF5ID0gbmV3IHNvdXJjZS5hcnJheS5jb25zdHJ1Y3Rvcihzb3VyY2UuYXJyYXkpO1xuXHRcdHRoaXMuaXRlbVNpemUgPSBzb3VyY2UuaXRlbVNpemU7XG5cdFx0dGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDtcblx0XHR0aGlzLm5vcm1hbGl6ZWQgPSBzb3VyY2Uubm9ybWFsaXplZDtcblx0XHR0aGlzLnVzYWdlID0gc291cmNlLnVzYWdlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weUF0KGluZGV4MSwgYXR0cmlidXRlLCBpbmRleDIpIHtcblx0XHRpbmRleDEgKj0gdGhpcy5pdGVtU2l6ZTtcblx0XHRpbmRleDIgKj0gYXR0cmlidXRlLml0ZW1TaXplO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHR0aGlzLmFycmF5W2luZGV4MSArIGldID0gYXR0cmlidXRlLmFycmF5W2luZGV4MiArIGldO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weUFycmF5KGFycmF5KSB7XG5cdFx0dGhpcy5hcnJheS5zZXQoYXJyYXkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weUNvbG9yc0FycmF5KGNvbG9ycykge1xuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheTtcblx0XHRsZXQgb2Zmc2V0ID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0bGV0IGNvbG9yID0gY29sb3JzW2ldO1xuXG5cdFx0XHRpZiAoY29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkJywgaSk7XG5cdFx0XHRcdGNvbG9yID0gbmV3IENvbG9yKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFycmF5W29mZnNldCsrXSA9IGNvbG9yLnI7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSBjb2xvci5nO1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gY29sb3IuYjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlWZWN0b3Iyc0FycmF5KHZlY3RvcnMpIHtcblx0XHRjb25zdCBhcnJheSA9IHRoaXMuYXJyYXk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1tpXTtcblxuXHRcdFx0aWYgKHZlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBpKTtcblx0XHRcdFx0dmVjdG9yID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdH1cblxuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLng7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3IueTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlWZWN0b3Izc0FycmF5KHZlY3RvcnMpIHtcblx0XHRjb25zdCBhcnJheSA9IHRoaXMuYXJyYXk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1tpXTtcblxuXHRcdFx0aWYgKHZlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBpKTtcblx0XHRcdFx0dmVjdG9yID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdH1cblxuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLng7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3IueTtcblx0XHRcdGFycmF5W29mZnNldCsrXSA9IHZlY3Rvci56O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weVZlY3RvcjRzQXJyYXkodmVjdG9ycykge1xuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheTtcblx0XHRsZXQgb2Zmc2V0ID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGxldCB2ZWN0b3IgPSB2ZWN0b3JzW2ldO1xuXG5cdFx0XHRpZiAodmVjdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCcsIGkpO1xuXHRcdFx0XHR2ZWN0b3IgPSBuZXcgVmVjdG9yNCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3IueDtcblx0XHRcdGFycmF5W29mZnNldCsrXSA9IHZlY3Rvci55O1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLno7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3Iudztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5TWF0cml4MyhtKSB7XG5cdFx0aWYgKHRoaXMuaXRlbVNpemUgPT09IDIpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRfdmVjdG9yMiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cblx0XHRcdFx0X3ZlY3RvcjIkMS5hcHBseU1hdHJpeDMobSk7XG5cblx0XHRcdFx0dGhpcy5zZXRYWShpLCBfdmVjdG9yMiQxLngsIF92ZWN0b3IyJDEueSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLml0ZW1TaXplID09PSAzKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0X3ZlY3RvciQ5LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cblx0XHRcdFx0X3ZlY3RvciQ5LmFwcGx5TWF0cml4MyhtKTtcblxuXHRcdFx0XHR0aGlzLnNldFhZWihpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRfdmVjdG9yJDkueCA9IHRoaXMuZ2V0WChpKTtcblx0XHRcdF92ZWN0b3IkOS55ID0gdGhpcy5nZXRZKGkpO1xuXHRcdFx0X3ZlY3RvciQ5LnogPSB0aGlzLmdldFooaSk7XG5cblx0XHRcdF92ZWN0b3IkOS5hcHBseU1hdHJpeDQobSk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKGksIF92ZWN0b3IkOS54LCBfdmVjdG9yJDkueSwgX3ZlY3RvciQ5LnopO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlOb3JtYWxNYXRyaXgobSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0X3ZlY3RvciQ5LnggPSB0aGlzLmdldFgoaSk7XG5cdFx0XHRfdmVjdG9yJDkueSA9IHRoaXMuZ2V0WShpKTtcblx0XHRcdF92ZWN0b3IkOS56ID0gdGhpcy5nZXRaKGkpO1xuXG5cdFx0XHRfdmVjdG9yJDkuYXBwbHlOb3JtYWxNYXRyaXgobSk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKGksIF92ZWN0b3IkOS54LCBfdmVjdG9yJDkueSwgX3ZlY3RvciQ5LnopO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKG0pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdF92ZWN0b3IkOS54ID0gdGhpcy5nZXRYKGkpO1xuXHRcdFx0X3ZlY3RvciQ5LnkgPSB0aGlzLmdldFkoaSk7XG5cdFx0XHRfdmVjdG9yJDkueiA9IHRoaXMuZ2V0WihpKTtcblxuXHRcdFx0X3ZlY3RvciQ5LnRyYW5zZm9ybURpcmVjdGlvbihtKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooaSwgX3ZlY3RvciQ5LngsIF92ZWN0b3IkOS55LCBfdmVjdG9yJDkueik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXQodmFsdWUsIG9mZnNldCA9IDApIHtcblx0XHR0aGlzLmFycmF5LnNldCh2YWx1ZSwgb2Zmc2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFgoaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5hcnJheVtpbmRleCAqIHRoaXMuaXRlbVNpemVdO1xuXHR9XG5cblx0c2V0WChpbmRleCwgeCkge1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplXSA9IHg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRZKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMV07XG5cdH1cblxuXHRzZXRZKGluZGV4LCB5KSB7XG5cdFx0dGhpcy5hcnJheVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAxXSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRaKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMl07XG5cdH1cblxuXHRzZXRaKGluZGV4LCB6KSB7XG5cdFx0dGhpcy5hcnJheVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyXSA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRXKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgM107XG5cdH1cblxuXHRzZXRXKGluZGV4LCB3KSB7XG5cdFx0dGhpcy5hcnJheVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYWShpbmRleCwgeCwgeSkge1xuXHRcdGluZGV4ICo9IHRoaXMuaXRlbVNpemU7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDBdID0geDtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgMV0gPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WFlaKGluZGV4LCB4LCB5LCB6KSB7XG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgMF0gPSB4O1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAxXSA9IHk7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDJdID0gejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFhZWlcoaW5kZXgsIHgsIHksIHosIHcpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgMl0gPSB6O1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRvblVwbG9hZChjYWxsYmFjaykge1xuXHRcdHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksIHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyk7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdGl0ZW1TaXplOiB0aGlzLml0ZW1TaXplLFxuXHRcdFx0dHlwZTogdGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0YXJyYXk6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLFxuXHRcdFx0bm9ybWFsaXplZDogdGhpcy5ub3JtYWxpemVkXG5cdFx0fTtcblx0XHRpZiAodGhpcy5uYW1lICE9PSAnJykgZGF0YS5uYW1lID0gdGhpcy5uYW1lO1xuXHRcdGlmICh0aGlzLnVzYWdlICE9PSBTdGF0aWNEcmF3VXNhZ2UpIGRhdGEudXNhZ2UgPSB0aGlzLnVzYWdlO1xuXHRcdGlmICh0aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCAhPT0gMCB8fCB0aGlzLnVwZGF0ZVJhbmdlLmNvdW50ICE9PSAtMSkgZGF0YS51cGRhdGVSYW5nZSA9IHRoaXMudXBkYXRlUmFuZ2U7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTsgLy9cblxuY2xhc3MgSW50OEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBJbnQ4QXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBVaW50OEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBVaW50OEFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgSW50MTZCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgSW50MTZBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59XG5cbmNsYXNzIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBVaW50MTZBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59XG5cbmNsYXNzIEludDMyQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IEludDMyQXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgVWludDMyQXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IFVpbnQxNkFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuY2xhc3MgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBGbG9hdDMyQXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBGbG9hdDY0QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IEZsb2F0NjRBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59IC8vXG5cbmxldCBfaWQkMSA9IDA7XG5cbmNvbnN0IF9tMSA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfb2JqID0gLypAX19QVVJFX18qL25ldyBPYmplY3QzRCgpO1xuXG5jb25zdCBfb2Zmc2V0ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ib3gkMSA9IC8qQF9fUFVSRV9fKi9uZXcgQm94MygpO1xuXG5jb25zdCBfYm94TW9ycGhUYXJnZXRzID0gLypAX19QVVJFX18qL25ldyBCb3gzKCk7XG5cbmNvbnN0IF92ZWN0b3IkOCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBCdWZmZXJHZW9tZXRyeSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdpZCcsIHtcblx0XHRcdHZhbHVlOiBfaWQkMSsrXG5cdFx0fSk7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy50eXBlID0gJ0J1ZmZlckdlb21ldHJ5Jztcblx0XHR0aGlzLmluZGV4ID0gbnVsbDtcblx0XHR0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBmYWxzZTtcblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXHRcdHRoaXMuYm91bmRpbmdCb3ggPSBudWxsO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBudWxsO1xuXHRcdHRoaXMuZHJhd1JhbmdlID0ge1xuXHRcdFx0c3RhcnQ6IDAsXG5cdFx0XHRjb3VudDogSW5maW5pdHlcblx0XHR9O1xuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblx0fVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cblx0c2V0SW5kZXgoaW5kZXgpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShpbmRleCkpIHtcblx0XHRcdHRoaXMuaW5kZXggPSBuZXcgKGFycmF5TmVlZHNVaW50MzIoaW5kZXgpID8gVWludDMyQnVmZmVyQXR0cmlidXRlIDogVWludDE2QnVmZmVyQXR0cmlidXRlKShpbmRleCwgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEF0dHJpYnV0ZShuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcblx0fVxuXG5cdHNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUpIHtcblx0XHR0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyaWJ1dGU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZWxldGVBdHRyaWJ1dGUobmFtZSkge1xuXHRcdGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRoYXNBdHRyaWJ1dGUobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFkZEdyb3VwKHN0YXJ0LCBjb3VudCwgbWF0ZXJpYWxJbmRleCA9IDApIHtcblx0XHR0aGlzLmdyb3Vwcy5wdXNoKHtcblx0XHRcdHN0YXJ0OiBzdGFydCxcblx0XHRcdGNvdW50OiBjb3VudCxcblx0XHRcdG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXhcblx0XHR9KTtcblx0fVxuXG5cdGNsZWFyR3JvdXBzKCkge1xuXHRcdHRoaXMuZ3JvdXBzID0gW107XG5cdH1cblxuXHRzZXREcmF3UmFuZ2Uoc3RhcnQsIGNvdW50KSB7XG5cdFx0dGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzdGFydDtcblx0XHR0aGlzLmRyYXdSYW5nZS5jb3VudCA9IGNvdW50O1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG1hdHJpeCkge1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBvc2l0aW9uLmFwcGx5TWF0cml4NChtYXRyaXgpO1xuXHRcdFx0cG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vcm1hbCA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XG5cblx0XHRpZiAobm9ybWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG5vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4KG1hdHJpeCk7XG5cdFx0XHRub3JtYWwuYXBwbHlOb3JtYWxNYXRyaXgobm9ybWFsTWF0cml4KTtcblx0XHRcdG5vcm1hbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFuZ2VudCA9IHRoaXMuYXR0cmlidXRlcy50YW5nZW50O1xuXG5cdFx0aWYgKHRhbmdlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFuZ2VudC50cmFuc2Zvcm1EaXJlY3Rpb24obWF0cml4KTtcblx0XHRcdHRhbmdlbnQubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmJvdW5kaW5nQm94ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmJvdW5kaW5nU3BoZXJlICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKHEpIHtcblx0XHRfbTEubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24ocSk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NChfbTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlWChhbmdsZSkge1xuXHRcdC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgeC1heGlzXG5cdFx0X20xLm1ha2VSb3RhdGlvblgoYW5nbGUpO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX20xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdGF0ZVkoYW5nbGUpIHtcblx0XHQvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHktYXhpc1xuXHRcdF9tMS5tYWtlUm90YXRpb25ZKGFuZ2xlKTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KF9tMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3RhdGVaKGFuZ2xlKSB7XG5cdFx0Ly8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB6LWF4aXNcblx0XHRfbTEubWFrZVJvdGF0aW9uWihhbmdsZSk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NChfbTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNsYXRlKHgsIHksIHopIHtcblx0XHQvLyB0cmFuc2xhdGUgZ2VvbWV0cnlcblx0XHRfbTEubWFrZVRyYW5zbGF0aW9uKHgsIHksIHopO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX20xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNjYWxlKHgsIHksIHopIHtcblx0XHQvLyBzY2FsZSBnZW9tZXRyeVxuXHRcdF9tMS5tYWtlU2NhbGUoeCwgeSwgeik7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NChfbTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bG9va0F0KHZlY3Rvcikge1xuXHRcdF9vYmoubG9va0F0KHZlY3Rvcik7XG5cblx0XHRfb2JqLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX29iai5tYXRyaXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2VudGVyKCkge1xuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG5cdFx0dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoX29mZnNldCkubmVnYXRlKCk7XG5cdFx0dGhpcy50cmFuc2xhdGUoX29mZnNldC54LCBfb2Zmc2V0LnksIF9vZmZzZXQueik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKHBvaW50cykge1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuXHRcdFx0cG9zaXRpb24ucHVzaChwb2ludC54LCBwb2ludC55LCBwb2ludC56IHx8IDApO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCAzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21wdXRlQm91bmRpbmdCb3goKSB7XG5cdFx0aWYgKHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwpIHtcblx0XHRcdHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm94MygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRpZiAocG9zaXRpb24gJiYgcG9zaXRpb24uaXNHTEJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgXCJtZXNoLmZydXN0dW1DdWxsZWRcIiB0byBcImZhbHNlXCIuJywgdGhpcyk7XG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgVmVjdG9yMygtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5KSwgbmV3IFZlY3RvcjMoK0luZmluaXR5LCArSW5maW5pdHksICtJbmZpbml0eSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24pOyAvLyBwcm9jZXNzIG1vcnBoIGF0dHJpYnV0ZXMgaWYgcHJlc2VudFxuXG5cdFx0XHRpZiAobW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24pIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25baV07XG5cblx0XHRcdFx0XHRfYm94JDEuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSkge1xuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sIF9ib3gkMS5taW4pO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoX3ZlY3RvciQ4KTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsIF9ib3gkMS5tYXgpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoX3ZlY3RvciQ4KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KF9ib3gkMS5taW4pO1xuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KF9ib3gkMS5tYXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpO1xuXHRcdH1cblxuXHRcdGlmIChpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KSB8fCBpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KSB8fCBpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgXCJwb3NpdGlvblwiIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsIHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdGNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpIHtcblx0XHRpZiAodGhpcy5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG5ldyBTcGhlcmUoKTtcblx0XHR9XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uICYmIHBvc2l0aW9uLmlzR0xCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0IFwibWVzaC5mcnVzdHVtQ3VsbGVkXCIgdG8gXCJmYWxzZVwiLicsIHRoaXMpO1xuXHRcdFx0dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IFZlY3RvcjMoKSwgSW5maW5pdHkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwb3NpdGlvbikge1xuXHRcdFx0Ly8gZmlyc3QsIGZpbmQgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgc3BoZXJlXG5cdFx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtcblxuXHRcdFx0X2JveCQxLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24pOyAvLyBwcm9jZXNzIG1vcnBoIGF0dHJpYnV0ZXMgaWYgcHJlc2VudFxuXG5cblx0XHRcdGlmIChtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbikge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbi5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbltpXTtcblxuXHRcdFx0XHRcdF9ib3hNb3JwaFRhcmdldHMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSkge1xuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnMoX2JveCQxLm1pbiwgX2JveE1vcnBoVGFyZ2V0cy5taW4pO1xuXG5cdFx0XHRcdFx0XHRfYm94JDEuZXhwYW5kQnlQb2ludChfdmVjdG9yJDgpO1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkVmVjdG9ycyhfYm94JDEubWF4LCBfYm94TW9ycGhUYXJnZXRzLm1heCk7XG5cblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KF92ZWN0b3IkOCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KF9ib3hNb3JwaFRhcmdldHMubWluKTtcblxuXHRcdFx0XHRcdFx0X2JveCQxLmV4cGFuZEJ5UG9pbnQoX2JveE1vcnBoVGFyZ2V0cy5tYXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRfYm94JDEuZ2V0Q2VudGVyKGNlbnRlcik7IC8vIHNlY29uZCwgdHJ5IHRvIGZpbmQgYSBib3VuZGluZ1NwaGVyZSB3aXRoIGEgcmFkaXVzIHNtYWxsZXIgdGhhbiB0aGVcblx0XHRcdC8vIGJvdW5kaW5nU3BoZXJlIG9mIHRoZSBib3VuZGluZ0JveDogc3FydCgzKSBzbWFsbGVyIGluIHRoZSBiZXN0IGNhc2VcblxuXG5cdFx0XHRsZXQgbWF4UmFkaXVzU3EgPSAwO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0X3ZlY3RvciQ4LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGkpO1xuXG5cdFx0XHRcdG1heFJhZGl1c1NxID0gTWF0aC5tYXgobWF4UmFkaXVzU3EsIGNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZChfdmVjdG9yJDgpKTtcblx0XHRcdH0gLy8gcHJvY2VzcyBtb3JwaCBhdHRyaWJ1dGVzIGlmIHByZXNlbnRcblxuXG5cdFx0XHRpZiAobW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24pIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25baV07XG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIGpsID0gbW9ycGhBdHRyaWJ1dGUuY291bnQ7IGogPCBqbDsgaisrKSB7XG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSwgaik7XG5cblx0XHRcdFx0XHRcdGlmIChtb3JwaFRhcmdldHNSZWxhdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRfb2Zmc2V0LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGopO1xuXG5cdFx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGQoX29mZnNldCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1heFJhZGl1c1NxID0gTWF0aC5tYXgobWF4UmFkaXVzU3EsIGNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZChfdmVjdG9yJDgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMgPSBNYXRoLnNxcnQobWF4UmFkaXVzU3EpO1xuXG5cdFx0XHRpZiAoaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgXCJwb3NpdGlvblwiIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbXB1dGVUYW5nZW50cygpIHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsgLy8gYmFzZWQgb24gaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vY29kZS90YW5nZW50Lmh0bWxcblx0XHQvLyAocGVyIHZlcnRleCB0YW5nZW50cylcblxuXHRcdGlmIChpbmRleCA9PT0gbnVsbCB8fCBhdHRyaWJ1dGVzLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgYXR0cmlidXRlcy5ub3JtYWwgPT09IHVuZGVmaW5lZCB8fCBhdHRyaWJ1dGVzLnV2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KScpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGljZXMgPSBpbmRleC5hcnJheTtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTtcblx0XHRjb25zdCB1dnMgPSBhdHRyaWJ1dGVzLnV2LmFycmF5O1xuXHRcdGNvbnN0IG5WZXJ0aWNlcyA9IHBvc2l0aW9ucy5sZW5ndGggLyAzO1xuXG5cdFx0aWYgKGF0dHJpYnV0ZXMudGFuZ2VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSgndGFuZ2VudCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheSg0ICogblZlcnRpY2VzKSwgNCkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LmFycmF5O1xuXHRcdGNvbnN0IHRhbjEgPSBbXSxcblx0XHRcdFx0XHR0YW4yID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG5cdFx0XHR0YW4xW2ldID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdHRhbjJbaV0gPSBuZXcgVmVjdG9yMygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZBID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHR2QiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0dkMgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdHV2QSA9IG5ldyBWZWN0b3IyKCksXG5cdFx0XHRcdFx0dXZCID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0XHR1dkMgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRcdHNkaXIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdHRkaXIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVHJpYW5nbGUoYSwgYiwgYykge1xuXHRcdFx0dkEuZnJvbUFycmF5KHBvc2l0aW9ucywgYSAqIDMpO1xuXHRcdFx0dkIuZnJvbUFycmF5KHBvc2l0aW9ucywgYiAqIDMpO1xuXHRcdFx0dkMuZnJvbUFycmF5KHBvc2l0aW9ucywgYyAqIDMpO1xuXHRcdFx0dXZBLmZyb21BcnJheSh1dnMsIGEgKiAyKTtcblx0XHRcdHV2Qi5mcm9tQXJyYXkodXZzLCBiICogMik7XG5cdFx0XHR1dkMuZnJvbUFycmF5KHV2cywgYyAqIDIpO1xuXHRcdFx0dkIuc3ViKHZBKTtcblx0XHRcdHZDLnN1Yih2QSk7XG5cdFx0XHR1dkIuc3ViKHV2QSk7XG5cdFx0XHR1dkMuc3ViKHV2QSk7XG5cdFx0XHRjb25zdCByID0gMS4wIC8gKHV2Qi54ICogdXZDLnkgLSB1dkMueCAqIHV2Qi55KTsgLy8gc2lsZW50bHkgaWdub3JlIGRlZ2VuZXJhdGUgdXYgdHJpYW5nbGVzIGhhdmluZyBjb2luY2lkZW50IG9yIGNvbGluZWFyIHZlcnRpY2VzXG5cblx0XHRcdGlmICghaXNGaW5pdGUocikpIHJldHVybjtcblx0XHRcdHNkaXIuY29weSh2QikubXVsdGlwbHlTY2FsYXIodXZDLnkpLmFkZFNjYWxlZFZlY3Rvcih2QywgLXV2Qi55KS5tdWx0aXBseVNjYWxhcihyKTtcblx0XHRcdHRkaXIuY29weSh2QykubXVsdGlwbHlTY2FsYXIodXZCLngpLmFkZFNjYWxlZFZlY3Rvcih2QiwgLXV2Qy54KS5tdWx0aXBseVNjYWxhcihyKTtcblx0XHRcdHRhbjFbYV0uYWRkKHNkaXIpO1xuXHRcdFx0dGFuMVtiXS5hZGQoc2Rpcik7XG5cdFx0XHR0YW4xW2NdLmFkZChzZGlyKTtcblx0XHRcdHRhbjJbYV0uYWRkKHRkaXIpO1xuXHRcdFx0dGFuMltiXS5hZGQodGRpcik7XG5cdFx0XHR0YW4yW2NdLmFkZCh0ZGlyKTtcblx0XHR9XG5cblx0XHRsZXQgZ3JvdXBzID0gdGhpcy5ncm91cHM7XG5cblx0XHRpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Z3JvdXBzID0gW3tcblx0XHRcdFx0c3RhcnQ6IDAsXG5cdFx0XHRcdGNvdW50OiBpbmRpY2VzLmxlbmd0aFxuXHRcdFx0fV07XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0Y29uc3Qgc3RhcnQgPSBncm91cC5zdGFydDtcblx0XHRcdGNvbnN0IGNvdW50ID0gZ3JvdXAuY291bnQ7XG5cblx0XHRcdGZvciAobGV0IGogPSBzdGFydCwgamwgPSBzdGFydCArIGNvdW50OyBqIDwgamw7IGogKz0gMykge1xuXHRcdFx0XHRoYW5kbGVUcmlhbmdsZShpbmRpY2VzW2ogKyAwXSwgaW5kaWNlc1tqICsgMV0sIGluZGljZXNbaiArIDJdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB0bXAgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdHRtcDIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG4gPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdG4yID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVZlcnRleCh2KSB7XG5cdFx0XHRuLmZyb21BcnJheShub3JtYWxzLCB2ICogMyk7XG5cdFx0XHRuMi5jb3B5KG4pO1xuXHRcdFx0Y29uc3QgdCA9IHRhbjFbdl07IC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXG5cblx0XHRcdHRtcC5jb3B5KHQpO1xuXHRcdFx0dG1wLnN1YihuLm11bHRpcGx5U2NhbGFyKG4uZG90KHQpKSkubm9ybWFsaXplKCk7IC8vIENhbGN1bGF0ZSBoYW5kZWRuZXNzXG5cblx0XHRcdHRtcDIuY3Jvc3NWZWN0b3JzKG4yLCB0KTtcblx0XHRcdGNvbnN0IHRlc3QgPSB0bXAyLmRvdCh0YW4yW3ZdKTtcblx0XHRcdGNvbnN0IHcgPSB0ZXN0IDwgMC4wID8gLTEuMCA6IDEuMDtcblx0XHRcdHRhbmdlbnRzW3YgKiA0XSA9IHRtcC54O1xuXHRcdFx0dGFuZ2VudHNbdiAqIDQgKyAxXSA9IHRtcC55O1xuXHRcdFx0dGFuZ2VudHNbdiAqIDQgKyAyXSA9IHRtcC56O1xuXHRcdFx0dGFuZ2VudHNbdiAqIDQgKyAzXSA9IHc7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0Y29uc3Qgc3RhcnQgPSBncm91cC5zdGFydDtcblx0XHRcdGNvbnN0IGNvdW50ID0gZ3JvdXAuY291bnQ7XG5cblx0XHRcdGZvciAobGV0IGogPSBzdGFydCwgamwgPSBzdGFydCArIGNvdW50OyBqIDwgamw7IGogKz0gMykge1xuXHRcdFx0XHRoYW5kbGVWZXJ0ZXgoaW5kaWNlc1tqICsgMF0pO1xuXHRcdFx0XHRoYW5kbGVWZXJ0ZXgoaW5kaWNlc1tqICsgMV0pO1xuXHRcdFx0XHRoYW5kbGVWZXJ0ZXgoaW5kaWNlc1tqICsgMl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcblx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xuXG5cdFx0aWYgKHBvc2l0aW9uQXR0cmlidXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBub3JtYWxBdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSgnbm9ybWFsJyk7XG5cblx0XHRcdGlmIChub3JtYWxBdHRyaWJ1dGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUgPSBuZXcgQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25BdHRyaWJ1dGUuY291bnQgKiAzKSwgMyk7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBub3JtYWxBdHRyaWJ1dGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzZXQgZXhpc3Rpbmcgbm9ybWFscyB0byB6ZXJvXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG5vcm1hbEF0dHJpYnV0ZS5jb3VudDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKGksIDAsIDAsIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBBID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdHBCID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdHBDID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IG5BID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdG5CID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdG5DID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGNiID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGFiID0gbmV3IFZlY3RvcjMoKTsgLy8gaW5kZXhlZCBlbGVtZW50c1xuXG5cdFx0XHRpZiAoaW5kZXgpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gaW5kZXguY291bnQ7IGkgPCBpbDsgaSArPSAzKSB7XG5cdFx0XHRcdFx0Y29uc3QgdkEgPSBpbmRleC5nZXRYKGkgKyAwKTtcblx0XHRcdFx0XHRjb25zdCB2QiA9IGluZGV4LmdldFgoaSArIDEpO1xuXHRcdFx0XHRcdGNvbnN0IHZDID0gaW5kZXguZ2V0WChpICsgMik7XG5cdFx0XHRcdFx0cEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgdkEpO1xuXHRcdFx0XHRcdHBCLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIHZCKTtcblx0XHRcdFx0XHRwQy5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCB2Qyk7XG5cdFx0XHRcdFx0Y2Iuc3ViVmVjdG9ycyhwQywgcEIpO1xuXHRcdFx0XHRcdGFiLnN1YlZlY3RvcnMocEEsIHBCKTtcblx0XHRcdFx0XHRjYi5jcm9zcyhhYik7XG5cdFx0XHRcdFx0bkEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShub3JtYWxBdHRyaWJ1dGUsIHZBKTtcblx0XHRcdFx0XHRuQi5mcm9tQnVmZmVyQXR0cmlidXRlKG5vcm1hbEF0dHJpYnV0ZSwgdkIpO1xuXHRcdFx0XHRcdG5DLmZyb21CdWZmZXJBdHRyaWJ1dGUobm9ybWFsQXR0cmlidXRlLCB2Qyk7XG5cdFx0XHRcdFx0bkEuYWRkKGNiKTtcblx0XHRcdFx0XHRuQi5hZGQoY2IpO1xuXHRcdFx0XHRcdG5DLmFkZChjYik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWih2QSwgbkEueCwgbkEueSwgbkEueik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWih2QiwgbkIueCwgbkIueSwgbkIueik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWih2QywgbkMueCwgbkMueSwgbkMueik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vbi1pbmRleGVkIGVsZW1lbnRzICh1bmNvbm5lY3RlZCB0cmlhbmdsZSBzb3VwKVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudDsgaSA8IGlsOyBpICs9IDMpIHtcblx0XHRcdFx0XHRwQS5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMCk7XG5cdFx0XHRcdFx0cEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSArIDEpO1xuXHRcdFx0XHRcdHBDLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAyKTtcblx0XHRcdFx0XHRjYi5zdWJWZWN0b3JzKHBDLCBwQik7XG5cdFx0XHRcdFx0YWIuc3ViVmVjdG9ycyhwQSwgcEIpO1xuXHRcdFx0XHRcdGNiLmNyb3NzKGFiKTtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKGkgKyAwLCBjYi54LCBjYi55LCBjYi56KTtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKGkgKyAxLCBjYi54LCBjYi55LCBjYi56KTtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKGkgKyAyLCBjYi54LCBjYi55LCBjYi56KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtcblx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0bWVyZ2UoZ2VvbWV0cnksIG9mZnNldCkge1xuXHRcdGlmICghKGdlb21ldHJ5ICYmIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuJywgZ2VvbWV0cnkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b2Zmc2V0ID0gMDtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogT3ZlcndyaXRpbmcgb3JpZ2luYWwgZ2VvbWV0cnksIHN0YXJ0aW5nIGF0IG9mZnNldD0wLiAnICsgJ1VzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4nKTtcblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0aWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXNba2V5XSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZTEgPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheTEgPSBhdHRyaWJ1dGUxLmFycmF5O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlMiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZUFycmF5MiA9IGF0dHJpYnV0ZTIuYXJyYXk7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVPZmZzZXQgPSBhdHRyaWJ1dGUyLml0ZW1TaXplICogb2Zmc2V0O1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYXR0cmlidXRlQXJyYXkyLmxlbmd0aCwgYXR0cmlidXRlQXJyYXkxLmxlbmd0aCAtIGF0dHJpYnV0ZU9mZnNldCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBqID0gYXR0cmlidXRlT2Zmc2V0OyBpIDwgbGVuZ3RoOyBpKyssIGorKykge1xuXHRcdFx0XHRhdHRyaWJ1dGVBcnJheTFbal0gPSBhdHRyaWJ1dGVBcnJheTJbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRub3JtYWxpemVOb3JtYWxzKCkge1xuXHRcdGNvbnN0IG5vcm1hbHMgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbm9ybWFscy5jb3VudDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdF92ZWN0b3IkOC5mcm9tQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIGkpO1xuXG5cdFx0XHRfdmVjdG9yJDgubm9ybWFsaXplKCk7XG5cblx0XHRcdG5vcm1hbHMuc2V0WFlaKGksIF92ZWN0b3IkOC54LCBfdmVjdG9yJDgueSwgX3ZlY3RvciQ4LnopO1xuXHRcdH1cblx0fVxuXG5cdHRvTm9uSW5kZXhlZCgpIHtcblx0XHRmdW5jdGlvbiBjb252ZXJ0QnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kaWNlcykge1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7XG5cdFx0XHRjb25zdCBpdGVtU2l6ZSA9IGF0dHJpYnV0ZS5pdGVtU2l6ZTtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBhdHRyaWJ1dGUubm9ybWFsaXplZDtcblx0XHRcdGNvbnN0IGFycmF5MiA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihpbmRpY2VzLmxlbmd0aCAqIGl0ZW1TaXplKTtcblx0XHRcdGxldCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0aW5kZXgyID0gMDtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBpbmRpY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNbaV0gKiBhdHRyaWJ1dGUuZGF0YS5zdHJpZGUgKyBhdHRyaWJ1dGUub2Zmc2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGluZGV4ID0gaW5kaWNlc1tpXSAqIGl0ZW1TaXplO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBpdGVtU2l6ZTsgaisrKSB7XG5cdFx0XHRcdFx0YXJyYXkyW2luZGV4MisrXSA9IGFycmF5W2luZGV4KytdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQnVmZmVyQXR0cmlidXRlKGFycmF5MiwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHRcdH0gLy9cblxuXG5cdFx0aWYgKHRoaXMuaW5kZXggPT09IG51bGwpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBnZW9tZXRyeTIgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCBpbmRpY2VzID0gdGhpcy5pbmRleC5hcnJheTtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzOyAvLyBhdHRyaWJ1dGVzXG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1tuYW1lXTtcblx0XHRcdGNvbnN0IG5ld0F0dHJpYnV0ZSA9IGNvbnZlcnRCdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRpY2VzKTtcblx0XHRcdGdlb21ldHJ5Mi5zZXRBdHRyaWJ1dGUobmFtZSwgbmV3QXR0cmlidXRlKTtcblx0XHR9IC8vIG1vcnBoIGF0dHJpYnV0ZXNcblxuXG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gbW9ycGhBdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBtb3JwaEFycmF5ID0gW107XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1tuYW1lXTsgLy8gbW9ycGhBdHRyaWJ1dGU6IGFycmF5IG9mIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGVzXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVbaV07XG5cdFx0XHRcdGNvbnN0IG5ld0F0dHJpYnV0ZSA9IGNvbnZlcnRCdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRpY2VzKTtcblx0XHRcdFx0bW9ycGhBcnJheS5wdXNoKG5ld0F0dHJpYnV0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5Mi5tb3JwaEF0dHJpYnV0ZXNbbmFtZV0gPSBtb3JwaEFycmF5O1xuXHRcdH1cblxuXHRcdGdlb21ldHJ5Mi5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7IC8vIGdyb3Vwc1xuXG5cdFx0Y29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0Z2VvbWV0cnkyLmFkZEdyb3VwKGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdlb21ldHJ5Mjtcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0dmVyc2lvbjogNC41LFxuXHRcdFx0XHR0eXBlOiAnQnVmZmVyR2VvbWV0cnknLFxuXHRcdFx0XHRnZW5lcmF0b3I6ICdCdWZmZXJHZW9tZXRyeS50b0pTT04nXG5cdFx0XHR9XG5cdFx0fTsgLy8gc3RhbmRhcmQgQnVmZmVyR2VvbWV0cnkgc2VyaWFsaXphdGlvblxuXG5cdFx0ZGF0YS51dWlkID0gdGhpcy51dWlkO1xuXHRcdGRhdGEudHlwZSA9IHRoaXMudHlwZTtcblx0XHRpZiAodGhpcy5uYW1lICE9PSAnJykgZGF0YS5uYW1lID0gdGhpcy5uYW1lO1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGggPiAwKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IHRoaXMucGFyYW1ldGVycztcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyc1trZXldICE9PSB1bmRlZmluZWQpIGRhdGFba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSAvLyBmb3Igc2ltcGxpY2l0eSB0aGUgY29kZSBhc3N1bWVzIGF0dHJpYnV0ZXMgYXJlIG5vdCBzaGFyZWQgYWNyb3NzIGdlb21ldHJpZXMsIHNlZSAjMTU4MTFcblxuXG5cdFx0ZGF0YS5kYXRhID0ge1xuXHRcdFx0YXR0cmlidXRlczoge31cblx0XHR9O1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcblxuXHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0ZGF0YS5kYXRhLmluZGV4ID0ge1xuXHRcdFx0XHR0eXBlOiBpbmRleC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHRhcnJheTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW5kZXguYXJyYXkpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRkYXRhLmRhdGEuYXR0cmlidXRlc1trZXldID0gYXR0cmlidXRlLnRvSlNPTihkYXRhLmRhdGEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdGxldCBoYXNNb3JwaEF0dHJpYnV0ZXMgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheSA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBhdHRyaWJ1dGVBcnJheS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUFycmF5W2ldO1xuXHRcdFx0XHRhcnJheS5wdXNoKGF0dHJpYnV0ZS50b0pTT04oZGF0YS5kYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcnJheS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG1vcnBoQXR0cmlidXRlc1trZXldID0gYXJyYXk7XG5cdFx0XHRcdGhhc01vcnBoQXR0cmlidXRlcyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGhhc01vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0ZGF0YS5kYXRhLm1vcnBoQXR0cmlidXRlcyA9IG1vcnBoQXR0cmlidXRlcztcblx0XHRcdGRhdGEuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHM7XG5cblx0XHRpZiAoZ3JvdXBzLmxlbmd0aCA+IDApIHtcblx0XHRcdGRhdGEuZGF0YS5ncm91cHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwcykpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJvdW5kaW5nU3BoZXJlID0gdGhpcy5ib3VuZGluZ1NwaGVyZTtcblxuXHRcdGlmIChib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCkge1xuXHRcdFx0ZGF0YS5kYXRhLmJvdW5kaW5nU3BoZXJlID0ge1xuXHRcdFx0XHRjZW50ZXI6IGJvdW5kaW5nU3BoZXJlLmNlbnRlci50b0FycmF5KCksXG5cdFx0XHRcdHJhZGl1czogYm91bmRpbmdTcGhlcmUucmFkaXVzXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0Ly8gcmVzZXRcblx0XHR0aGlzLmluZGV4ID0gbnVsbDtcblx0XHR0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdHRoaXMuZ3JvdXBzID0gW107XG5cdFx0dGhpcy5ib3VuZGluZ0JveCA9IG51bGw7XG5cdFx0dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7IC8vIHVzZWQgZm9yIHN0b3JpbmcgY2xvbmVkLCBzaGFyZWQgZGF0YVxuXG5cdFx0Y29uc3QgZGF0YSA9IHt9OyAvLyBuYW1lXG5cblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTsgLy8gaW5kZXhcblxuXHRcdGNvbnN0IGluZGV4ID0gc291cmNlLmluZGV4O1xuXG5cdFx0aWYgKGluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLnNldEluZGV4KGluZGV4LmNsb25lKGRhdGEpKTtcblx0XHR9IC8vIGF0dHJpYnV0ZXNcblxuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHNvdXJjZS5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUuY2xvbmUoZGF0YSkpO1xuXHRcdH0gLy8gbW9ycGggYXR0cmlidXRlc1xuXG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBzb3VyY2UubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIG1vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzW25hbWVdOyAvLyBtb3JwaEF0dHJpYnV0ZTogYXJyYXkgb2YgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZXNcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0YXJyYXkucHVzaChtb3JwaEF0dHJpYnV0ZVtpXS5jbG9uZShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubW9ycGhBdHRyaWJ1dGVzW25hbWVdID0gYXJyYXk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHNvdXJjZS5tb3JwaFRhcmdldHNSZWxhdGl2ZTsgLy8gZ3JvdXBzXG5cblx0XHRjb25zdCBncm91cHMgPSBzb3VyY2UuZ3JvdXBzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdHRoaXMuYWRkR3JvdXAoZ3JvdXAuc3RhcnQsIGdyb3VwLmNvdW50LCBncm91cC5tYXRlcmlhbEluZGV4KTtcblx0XHR9IC8vIGJvdW5kaW5nIGJveFxuXG5cblx0XHRjb25zdCBib3VuZGluZ0JveCA9IHNvdXJjZS5ib3VuZGluZ0JveDtcblxuXHRcdGlmIChib3VuZGluZ0JveCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5ib3VuZGluZ0JveCA9IGJvdW5kaW5nQm94LmNsb25lKCk7XG5cdFx0fSAvLyBib3VuZGluZyBzcGhlcmVcblxuXG5cdFx0Y29uc3QgYm91bmRpbmdTcGhlcmUgPSBzb3VyY2UuYm91bmRpbmdTcGhlcmU7XG5cblx0XHRpZiAoYm91bmRpbmdTcGhlcmUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBib3VuZGluZ1NwaGVyZS5jbG9uZSgpO1xuXHRcdH0gLy8gZHJhdyByYW5nZVxuXG5cblx0XHR0aGlzLmRyYXdSYW5nZS5zdGFydCA9IHNvdXJjZS5kcmF3UmFuZ2Uuc3RhcnQ7XG5cdFx0dGhpcy5kcmF3UmFuZ2UuY291bnQgPSBzb3VyY2UuZHJhd1JhbmdlLmNvdW50OyAvLyB1c2VyIGRhdGFcblxuXHRcdHRoaXMudXNlckRhdGEgPSBzb3VyY2UudXNlckRhdGE7IC8vIGdlb21ldHJ5IGdlbmVyYXRvciBwYXJhbWV0ZXJzXG5cblx0XHRpZiAoc291cmNlLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkgdGhpcy5wYXJhbWV0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlLnBhcmFtZXRlcnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0dHlwZTogJ2Rpc3Bvc2UnXG5cdFx0fSk7XG5cdH1cblxufVxuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeSA9IHRydWU7XG5cbmNvbnN0IF9pbnZlcnNlTWF0cml4JDIgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3JheSQyID0gLypAX19QVVJFX18qL25ldyBSYXkoKTtcblxuY29uc3QgX3NwaGVyZSQzID0gLypAX19QVVJFX18qL25ldyBTcGhlcmUoKTtcblxuY29uc3QgX3ZBJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZCJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZDJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RlbXBBID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90ZW1wQiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdGVtcEMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX21vcnBoQSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbW9ycGhCID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9tb3JwaEMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3V2QSQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF91dkIkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jb25zdCBfdXZDJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY29uc3QgX2ludGVyc2VjdGlvblBvaW50ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIE1lc2ggZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCksIG1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKCkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoJztcblx0XHR0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblxuXHRcdGlmIChzb3VyY2UubW9ycGhUYXJnZXRJbmZsdWVuY2VzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpO1xuXHRcdH1cblxuXHRcdGlmIChzb3VyY2UubW9ycGhUYXJnZXREaWN0aW9uYXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYXRlcmlhbCA9IHNvdXJjZS5tYXRlcmlhbDtcblx0XHR0aGlzLmdlb21ldHJ5ID0gc291cmNlLmdlb21ldHJ5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobW9ycGhBdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKGtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1trZXlzWzBdXTtcblxuXHRcdFx0XHRpZiAobW9ycGhBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gW107XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IG0gPSAwLCBtbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVttXS5uYW1lIHx8IFN0cmluZyhtKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuYW1lXSA9IG07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cztcblxuXHRcdFx0aWYgKG1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG1vcnBoVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cykge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGlmIChtYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheVxuXG5cdFx0aWYgKGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdF9zcGhlcmUkMy5jb3B5KGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlKTtcblxuXHRcdF9zcGhlcmUkMy5hcHBseU1hdHJpeDQobWF0cml4V29ybGQpO1xuXG5cdFx0aWYgKHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0c1NwaGVyZShfc3BoZXJlJDMpID09PSBmYWxzZSkgcmV0dXJuOyAvL1xuXG5cdFx0X2ludmVyc2VNYXRyaXgkMi5jb3B5KG1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblxuXHRcdF9yYXkkMi5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCQyKTsgLy8gQ2hlY2sgYm91bmRpbmdCb3ggYmVmb3JlIGNvbnRpbnVpbmdcblxuXG5cdFx0aWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoX3JheSQyLmludGVyc2VjdHNCb3goZ2VvbWV0cnkuYm91bmRpbmdCb3gpID09PSBmYWxzZSkgcmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBpbnRlcnNlY3Rpb247XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdGNvbnN0IG1vcnBoUG9zaXRpb24gPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHNSZWxhdGl2ZSA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXHRcdFx0Y29uc3QgdXYgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2O1xuXHRcdFx0Y29uc3QgdXYyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djI7XG5cdFx0XHRjb25zdCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cdFx0XHRjb25zdCBkcmF3UmFuZ2UgPSBnZW9tZXRyeS5kcmF3UmFuZ2U7XG5cblx0XHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHQvLyBpbmRleGVkIGJ1ZmZlciBnZW9tZXRyeVxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF07XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KGdyb3VwLnN0YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXguY291bnQsIE1hdGgubWluKGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCkpO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WChqKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYiA9IGluZGV4LmdldFgoaiArIDEpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjID0gaW5kZXguZ2V0WChqICsgMik7XG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24odGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGludGVyc2VjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGogLyAzKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2UubWF0ZXJpYWxJbmRleCA9IGdyb3VwLm1hdGVyaWFsSW5kZXg7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4LmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpICs9IDMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleC5nZXRYKGkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYiA9IGluZGV4LmdldFgoaSArIDEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4LmdldFgoaSArIDIpO1xuXHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbih0aGlzLCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyk7XG5cblx0XHRcdFx0XHRcdGlmIChpbnRlcnNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoaSAvIDMpOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gaW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXG5cblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gbm9uLWluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG1hdGVyaWFsKSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFtncm91cC5tYXRlcmlhbEluZGV4XTtcblx0XHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydCk7XG5cdFx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbihwb3NpdGlvbi5jb3VudCwgTWF0aC5taW4oZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KSk7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGogPSBzdGFydCwgamwgPSBlbmQ7IGogPCBqbDsgaiArPSAzKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGEgPSBqO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiID0gaiArIDE7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGMgPSBqICsgMjtcblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbih0aGlzLCBncm91cE1hdGVyaWFsLCByYXljYXN0ZXIsIF9yYXkkMiwgcG9zaXRpb24sIG1vcnBoUG9zaXRpb24sIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLCB1diwgdXYyLCBhLCBiLCBjKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaW50ZXJzZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoaiAvIDMpOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2UubWF0ZXJpYWxJbmRleCA9IGdyb3VwLm1hdGVyaWFsSW5kZXg7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKHBvc2l0aW9uLmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpICs9IDMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGEgPSBpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYiA9IGkgKyAxO1xuXHRcdFx0XHRcdFx0Y29uc3QgYyA9IGkgKyAyO1xuXHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbih0aGlzLCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyk7XG5cblx0XHRcdFx0XHRcdGlmIChpbnRlcnNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoaSAvIDMpOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZ2VvbWV0cnkuaXNHZW9tZXRyeSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH1cblxufVxuXG5NZXNoLnByb3RvdHlwZS5pc01lc2ggPSB0cnVlO1xuXG5mdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbihvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcEEsIHBCLCBwQywgcG9pbnQpIHtcblx0bGV0IGludGVyc2VjdDtcblxuXHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHtcblx0XHRpbnRlcnNlY3QgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUocEMsIHBCLCBwQSwgdHJ1ZSwgcG9pbnQpO1xuXHR9IGVsc2Uge1xuXHRcdGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZShwQSwgcEIsIHBDLCBtYXRlcmlhbC5zaWRlICE9PSBEb3VibGVTaWRlLCBwb2ludCk7XG5cdH1cblxuXHRpZiAoaW50ZXJzZWN0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5jb3B5KHBvaW50KTtcblxuXHRfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oX2ludGVyc2VjdGlvblBvaW50V29ybGQpO1xuXHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybiBudWxsO1xuXHRyZXR1cm4ge1xuXHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRwb2ludDogX2ludGVyc2VjdGlvblBvaW50V29ybGQuY2xvbmUoKSxcblx0XHRvYmplY3Q6IG9iamVjdFxuXHR9O1xufVxuXG5mdW5jdGlvbiBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMpIHtcblx0X3ZBJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgYSk7XG5cblx0X3ZCJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgYik7XG5cblx0X3ZDJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgYyk7XG5cblx0Y29uc3QgbW9ycGhJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztcblxuXHRpZiAobW9ycGhQb3NpdGlvbiAmJiBtb3JwaEluZmx1ZW5jZXMpIHtcblx0XHRfbW9ycGhBLnNldCgwLCAwLCAwKTtcblxuXHRcdF9tb3JwaEIuc2V0KDAsIDAsIDApO1xuXG5cdFx0X21vcnBoQy5zZXQoMCwgMCwgMCk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBtb3JwaFBvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IGluZmx1ZW5jZSA9IG1vcnBoSW5mbHVlbmNlc1tpXTtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhQb3NpdGlvbltpXTtcblx0XHRcdGlmIChpbmZsdWVuY2UgPT09IDApIGNvbnRpbnVlO1xuXG5cdFx0XHRfdGVtcEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSwgYSk7XG5cblx0XHRcdF90ZW1wQi5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoQXR0cmlidXRlLCBiKTtcblxuXHRcdFx0X3RlbXBDLmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUsIGMpO1xuXG5cdFx0XHRpZiAobW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcblx0XHRcdFx0X21vcnBoQS5hZGRTY2FsZWRWZWN0b3IoX3RlbXBBLCBpbmZsdWVuY2UpO1xuXG5cdFx0XHRcdF9tb3JwaEIuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQiwgaW5mbHVlbmNlKTtcblxuXHRcdFx0XHRfbW9ycGhDLmFkZFNjYWxlZFZlY3RvcihfdGVtcEMsIGluZmx1ZW5jZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfbW9ycGhBLmFkZFNjYWxlZFZlY3RvcihfdGVtcEEuc3ViKF92QSQxKSwgaW5mbHVlbmNlKTtcblxuXHRcdFx0XHRfbW9ycGhCLmFkZFNjYWxlZFZlY3RvcihfdGVtcEIuc3ViKF92QiQxKSwgaW5mbHVlbmNlKTtcblxuXHRcdFx0XHRfbW9ycGhDLmFkZFNjYWxlZFZlY3RvcihfdGVtcEMuc3ViKF92QyQxKSwgaW5mbHVlbmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRfdkEkMS5hZGQoX21vcnBoQSk7XG5cblx0XHRfdkIkMS5hZGQoX21vcnBoQik7XG5cblx0XHRfdkMkMS5hZGQoX21vcnBoQyk7XG5cdH1cblxuXHRpZiAob2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcblx0XHRvYmplY3QuYm9uZVRyYW5zZm9ybShhLCBfdkEkMSk7XG5cdFx0b2JqZWN0LmJvbmVUcmFuc2Zvcm0oYiwgX3ZCJDEpO1xuXHRcdG9iamVjdC5ib25lVHJhbnNmb3JtKGMsIF92QyQxKTtcblx0fVxuXG5cdGNvbnN0IGludGVyc2VjdGlvbiA9IGNoZWNrSW50ZXJzZWN0aW9uKG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBfdkEkMSwgX3ZCJDEsIF92QyQxLCBfaW50ZXJzZWN0aW9uUG9pbnQpO1xuXG5cdGlmIChpbnRlcnNlY3Rpb24pIHtcblx0XHRpZiAodXYpIHtcblx0XHRcdF91dkEkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2LCBhKTtcblxuXHRcdFx0X3V2QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYsIGIpO1xuXG5cdFx0XHRfdXZDJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1diwgYyk7XG5cblx0XHRcdGludGVyc2VjdGlvbi51diA9IFRyaWFuZ2xlLmdldFVWKF9pbnRlcnNlY3Rpb25Qb2ludCwgX3ZBJDEsIF92QiQxLCBfdkMkMSwgX3V2QSQxLCBfdXZCJDEsIF91dkMkMSwgbmV3IFZlY3RvcjIoKSk7XG5cdFx0fVxuXG5cdFx0aWYgKHV2Mikge1xuXHRcdFx0X3V2QSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYyLCBhKTtcblxuXHRcdFx0X3V2QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYyLCBiKTtcblxuXHRcdFx0X3V2QyQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYyLCBjKTtcblxuXHRcdFx0aW50ZXJzZWN0aW9uLnV2MiA9IFRyaWFuZ2xlLmdldFVWKF9pbnRlcnNlY3Rpb25Qb2ludCwgX3ZBJDEsIF92QiQxLCBfdkMkMSwgX3V2QSQxLCBfdXZCJDEsIF91dkMkMSwgbmV3IFZlY3RvcjIoKSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmFjZSA9IHtcblx0XHRcdGE6IGEsXG5cdFx0XHRiOiBiLFxuXHRcdFx0YzogYyxcblx0XHRcdG5vcm1hbDogbmV3IFZlY3RvcjMoKSxcblx0XHRcdG1hdGVyaWFsSW5kZXg6IDBcblx0XHR9O1xuXHRcdFRyaWFuZ2xlLmdldE5vcm1hbChfdkEkMSwgX3ZCJDEsIF92QyQxLCBmYWNlLm5vcm1hbCk7XG5cdFx0aW50ZXJzZWN0aW9uLmZhY2UgPSBmYWNlO1xuXHR9XG5cblx0cmV0dXJuIGludGVyc2VjdGlvbjtcbn1cblxuY2xhc3MgQm94R2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgZGVwdGggPSAxLCB3aWR0aFNlZ21lbnRzID0gMSwgaGVpZ2h0U2VnbWVudHMgPSAxLCBkZXB0aFNlZ21lbnRzID0gMSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0JveEdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHR3aWR0aDogd2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdGRlcHRoOiBkZXB0aCxcblx0XHRcdHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRkZXB0aFNlZ21lbnRzOiBkZXB0aFNlZ21lbnRzXG5cdFx0fTtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7IC8vIHNlZ21lbnRzXG5cblx0XHR3aWR0aFNlZ21lbnRzID0gTWF0aC5mbG9vcih3aWR0aFNlZ21lbnRzKTtcblx0XHRoZWlnaHRTZWdtZW50cyA9IE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpO1xuXHRcdGRlcHRoU2VnbWVudHMgPSBNYXRoLmZsb29yKGRlcHRoU2VnbWVudHMpOyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGxldCBudW1iZXJPZlZlcnRpY2VzID0gMDtcblx0XHRsZXQgZ3JvdXBTdGFydCA9IDA7IC8vIGJ1aWxkIGVhY2ggc2lkZSBvZiB0aGUgYm94IGdlb21ldHJ5XG5cblx0XHRidWlsZFBsYW5lKCd6JywgJ3knLCAneCcsIC0xLCAtMSwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGRlcHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCAwKTsgLy8gcHhcblxuXHRcdGJ1aWxkUGxhbmUoJ3onLCAneScsICd4JywgMSwgLTEsIGRlcHRoLCBoZWlnaHQsIC13aWR0aCwgZGVwdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIDEpOyAvLyBueFxuXG5cdFx0YnVpbGRQbGFuZSgneCcsICd6JywgJ3knLCAxLCAxLCB3aWR0aCwgZGVwdGgsIGhlaWdodCwgd2lkdGhTZWdtZW50cywgZGVwdGhTZWdtZW50cywgMik7IC8vIHB5XG5cblx0XHRidWlsZFBsYW5lKCd4JywgJ3onLCAneScsIDEsIC0xLCB3aWR0aCwgZGVwdGgsIC1oZWlnaHQsIHdpZHRoU2VnbWVudHMsIGRlcHRoU2VnbWVudHMsIDMpOyAvLyBueVxuXG5cdFx0YnVpbGRQbGFuZSgneCcsICd5JywgJ3onLCAxLCAtMSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCA0KTsgLy8gcHpcblxuXHRcdGJ1aWxkUGxhbmUoJ3gnLCAneScsICd6JywgLTEsIC0xLCB3aWR0aCwgaGVpZ2h0LCAtZGVwdGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCA1KTsgLy8gbnpcblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7XG5cblx0XHRmdW5jdGlvbiBidWlsZFBsYW5lKHUsIHYsIHcsIHVkaXIsIHZkaXIsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBncmlkWCwgZ3JpZFksIG1hdGVyaWFsSW5kZXgpIHtcblx0XHRcdGNvbnN0IHNlZ21lbnRXaWR0aCA9IHdpZHRoIC8gZ3JpZFg7XG5cdFx0XHRjb25zdCBzZWdtZW50SGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7XG5cdFx0XHRjb25zdCB3aWR0aEhhbGYgPSB3aWR0aCAvIDI7XG5cdFx0XHRjb25zdCBoZWlnaHRIYWxmID0gaGVpZ2h0IC8gMjtcblx0XHRcdGNvbnN0IGRlcHRoSGFsZiA9IGRlcHRoIC8gMjtcblx0XHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcblx0XHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcblx0XHRcdGxldCB2ZXJ0ZXhDb3VudGVyID0gMDtcblx0XHRcdGxldCBncm91cENvdW50ID0gMDtcblx0XHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7IC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkrKykge1xuXHRcdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50SGVpZ2h0IC0gaGVpZ2h0SGFsZjtcblxuXHRcdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgeCA9IGl4ICogc2VnbWVudFdpZHRoIC0gd2lkdGhIYWxmOyAvLyBzZXQgdmFsdWVzIHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudFxuXG5cdFx0XHRcdFx0dmVjdG9yW3VdID0geCAqIHVkaXI7XG5cdFx0XHRcdFx0dmVjdG9yW3ZdID0geSAqIHZkaXI7XG5cdFx0XHRcdFx0dmVjdG9yW3ddID0gZGVwdGhIYWxmOyAvLyBub3cgYXBwbHkgdmVjdG9yIHRvIHZlcnRleCBidWZmZXJcblxuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2godmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3Iueik7IC8vIHNldCB2YWx1ZXMgdG8gY29ycmVjdCB2ZWN0b3IgY29tcG9uZW50XG5cblx0XHRcdFx0XHR2ZWN0b3JbdV0gPSAwO1xuXHRcdFx0XHRcdHZlY3Rvclt2XSA9IDA7XG5cdFx0XHRcdFx0dmVjdG9yW3ddID0gZGVwdGggPiAwID8gMSA6IC0xOyAvLyBub3cgYXBwbHkgdmVjdG9yIHRvIG5vcm1hbCBidWZmZXJcblxuXHRcdFx0XHRcdG5vcm1hbHMucHVzaCh2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56KTsgLy8gdXZzXG5cblx0XHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcblx0XHRcdFx0XHR1dnMucHVzaCgxIC0gaXkgLyBncmlkWSk7IC8vIGNvdW50ZXJzXG5cblx0XHRcdFx0XHR2ZXJ0ZXhDb3VudGVyICs9IDE7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gaW5kaWNlc1xuXHRcdFx0Ly8gMS4geW91IG5lZWQgdGhyZWUgaW5kaWNlcyB0byBkcmF3IGEgc2luZ2xlIGZhY2Vcblx0XHRcdC8vIDIuIGEgc2luZ2xlIHNlZ21lbnQgY29uc2lzdHMgb2YgdHdvIGZhY2VzXG5cdFx0XHQvLyAzLiBzbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHNpeCAoMiozKSBpbmRpY2VzIHBlciBzZWdtZW50XG5cblxuXHRcdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZOyBpeSsrKSB7XG5cdFx0XHRcdGZvciAobGV0IGl4ID0gMDsgaXggPCBncmlkWDsgaXgrKykge1xuXHRcdFx0XHRcdGNvbnN0IGEgPSBudW1iZXJPZlZlcnRpY2VzICsgaXggKyBncmlkWDEgKiBpeTtcblx0XHRcdFx0XHRjb25zdCBiID0gbnVtYmVyT2ZWZXJ0aWNlcyArIGl4ICsgZ3JpZFgxICogKGl5ICsgMSk7XG5cdFx0XHRcdFx0Y29uc3QgYyA9IG51bWJlck9mVmVydGljZXMgKyAoaXggKyAxKSArIGdyaWRYMSAqIChpeSArIDEpO1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBudW1iZXJPZlZlcnRpY2VzICsgKGl4ICsgMSkgKyBncmlkWDEgKiBpeTsgLy8gZmFjZXNcblxuXHRcdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7IC8vIGluY3JlYXNlIGNvdW50ZXJcblxuXHRcdFx0XHRcdGdyb3VwQ291bnQgKz0gNjtcblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBhZGQgYSBncm91cCB0byB0aGUgZ2VvbWV0cnkuIHRoaXMgd2lsbCBlbnN1cmUgbXVsdGkgbWF0ZXJpYWwgc3VwcG9ydFxuXG5cblx0XHRcdHNjb3BlLmFkZEdyb3VwKGdyb3VwU3RhcnQsIGdyb3VwQ291bnQsIG1hdGVyaWFsSW5kZXgpOyAvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHNcblxuXHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50OyAvLyB1cGRhdGUgdG90YWwgbnVtYmVyIG9mIHZlcnRpY2VzXG5cblx0XHRcdG51bWJlck9mVmVydGljZXMgKz0gdmVydGV4Q291bnRlcjtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgQm94R2VvbWV0cnkoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQsIGRhdGEuZGVwdGgsIGRhdGEud2lkdGhTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cywgZGF0YS5kZXB0aFNlZ21lbnRzKTtcblx0fVxuXG59XG5cbi8qKlxuICogVW5pZm9ybSBVdGlsaXRpZXNcbiAqL1xuZnVuY3Rpb24gY2xvbmVVbmlmb3JtcyhzcmMpIHtcblx0Y29uc3QgZHN0ID0ge307XG5cblx0Zm9yIChjb25zdCB1IGluIHNyYykge1xuXHRcdGRzdFt1XSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwIGluIHNyY1t1XSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBzcmNbdV1bcF07XG5cblx0XHRcdGlmIChwcm9wZXJ0eSAmJiAocHJvcGVydHkuaXNDb2xvciB8fCBwcm9wZXJ0eS5pc01hdHJpeDMgfHwgcHJvcGVydHkuaXNNYXRyaXg0IHx8IHByb3BlcnR5LmlzVmVjdG9yMiB8fCBwcm9wZXJ0eS5pc1ZlY3RvcjMgfHwgcHJvcGVydHkuaXNWZWN0b3I0IHx8IHByb3BlcnR5LmlzVGV4dHVyZSB8fCBwcm9wZXJ0eS5pc1F1YXRlcm5pb24pKSB7XG5cdFx0XHRcdGRzdFt1XVtwXSA9IHByb3BlcnR5LmNsb25lKCk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdFx0XHRcdGRzdFt1XVtwXSA9IHByb3BlcnR5LnNsaWNlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3RbdV1bcF0gPSBwcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuZnVuY3Rpb24gbWVyZ2VVbmlmb3Jtcyh1bmlmb3Jtcykge1xuXHRjb25zdCBtZXJnZWQgPSB7fTtcblxuXHRmb3IgKGxldCB1ID0gMDsgdSA8IHVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XG5cdFx0Y29uc3QgdG1wID0gY2xvbmVVbmlmb3Jtcyh1bmlmb3Jtc1t1XSk7XG5cblx0XHRmb3IgKGNvbnN0IHAgaW4gdG1wKSB7XG5cdFx0XHRtZXJnZWRbcF0gPSB0bXBbcF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lcmdlZDtcbn0gLy8gTGVnYWN5XG5cbmNvbnN0IFVuaWZvcm1zVXRpbHMgPSB7XG5cdGNsb25lOiBjbG9uZVVuaWZvcm1zLFxuXHRtZXJnZTogbWVyZ2VVbmlmb3Jtc1xufTtcblxudmFyIGRlZmF1bHRfdmVydGV4ID0gXCJ2b2lkIG1haW4oKSB7XFxuXFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xcbn1cIjtcblxudmFyIGRlZmF1bHRfZnJhZ21lbnQgPSBcInZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcXG59XCI7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRkZWZpbmVzOiB7IFwibGFiZWxcIiA6IFwidmFsdWVcIiB9LFxuICpcdHVuaWZvcm1zOiB7IFwicGFyYW1ldGVyMVwiOiB7IHZhbHVlOiAxLjAgfSwgXCJwYXJhbWV0ZXIyXCI6IHsgdmFsdWUyOiAyIH0gfSxcbiAqXG4gKlx0ZnJhZ21lbnRTaGFkZXI6IDxzdHJpbmc+LFxuICpcdHZlcnRleFNoYWRlcjogPHN0cmluZz4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKlx0bGlnaHRzOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBTaGFkZXJNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NoYWRlck1hdGVyaWFsJztcblx0XHR0aGlzLmRlZmluZXMgPSB7fTtcblx0XHR0aGlzLnVuaWZvcm1zID0ge307XG5cdFx0dGhpcy52ZXJ0ZXhTaGFkZXIgPSBkZWZhdWx0X3ZlcnRleDtcblx0XHR0aGlzLmZyYWdtZW50U2hhZGVyID0gZGVmYXVsdF9mcmFnbWVudDtcblx0XHR0aGlzLmxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy5mb2cgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSBzY2VuZSBmb2dcblxuXHRcdHRoaXMubGlnaHRzID0gZmFsc2U7IC8vIHNldCB0byB1c2Ugc2NlbmUgbGlnaHRzXG5cblx0XHR0aGlzLmNsaXBwaW5nID0gZmFsc2U7IC8vIHNldCB0byB1c2UgdXNlci1kZWZpbmVkIGNsaXBwaW5nIHBsYW5lc1xuXG5cdFx0dGhpcy5leHRlbnNpb25zID0ge1xuXHRcdFx0ZGVyaXZhdGl2ZXM6IGZhbHNlLFxuXHRcdFx0Ly8gc2V0IHRvIHVzZSBkZXJpdmF0aXZlc1xuXHRcdFx0ZnJhZ0RlcHRoOiBmYWxzZSxcblx0XHRcdC8vIHNldCB0byB1c2UgZnJhZ21lbnQgZGVwdGggdmFsdWVzXG5cdFx0XHRkcmF3QnVmZmVyczogZmFsc2UsXG5cdFx0XHQvLyBzZXQgdG8gdXNlIGRyYXcgYnVmZmVyc1xuXHRcdFx0c2hhZGVyVGV4dHVyZUxPRDogZmFsc2UgLy8gc2V0IHRvIHVzZSBzaGFkZXIgdGV4dHVyZSBMT0RcblxuXHRcdH07IC8vIFdoZW4gcmVuZGVyZWQgZ2VvbWV0cnkgZG9lc24ndCBpbmNsdWRlIHRoZXNlIGF0dHJpYnV0ZXMgYnV0IHRoZSBtYXRlcmlhbCBkb2VzLFxuXHRcdC8vIHVzZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpbiBXZWJHTC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gYnVmZmVyIGRhdGEgaXMgbWlzc2luZy5cblxuXHRcdHRoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyA9IHtcblx0XHRcdCdjb2xvcic6IFsxLCAxLCAxXSxcblx0XHRcdCd1dic6IFswLCAwXSxcblx0XHRcdCd1djInOiBbMCwgMF1cblx0XHR9O1xuXHRcdHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuZ2xzbFZlcnNpb24gPSBudWxsO1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHBhcmFtZXRlcnMuYXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmZyYWdtZW50U2hhZGVyID0gc291cmNlLmZyYWdtZW50U2hhZGVyO1xuXHRcdHRoaXMudmVydGV4U2hhZGVyID0gc291cmNlLnZlcnRleFNoYWRlcjtcblx0XHR0aGlzLnVuaWZvcm1zID0gY2xvbmVVbmlmb3Jtcyhzb3VyY2UudW5pZm9ybXMpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS5kZWZpbmVzKTtcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMubGlnaHRzID0gc291cmNlLmxpZ2h0cztcblx0XHR0aGlzLmNsaXBwaW5nID0gc291cmNlLmNsaXBwaW5nO1xuXHRcdHRoaXMuZXh0ZW5zaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS5leHRlbnNpb25zKTtcblx0XHR0aGlzLmdsc2xWZXJzaW9uID0gc291cmNlLmdsc2xWZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGRhdGEuZ2xzbFZlcnNpb24gPSB0aGlzLmdsc2xWZXJzaW9uO1xuXHRcdGRhdGEudW5pZm9ybXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLnVuaWZvcm1zKSB7XG5cdFx0XHRjb25zdCB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tuYW1lXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdW5pZm9ybS52YWx1ZTtcblxuXHRcdFx0aWYgKHZhbHVlICYmIHZhbHVlLmlzVGV4dHVyZSkge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd0Jyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUudG9KU09OKG1ldGEpLnV1aWRcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuaXNDb2xvcikge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdjJyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUuZ2V0SGV4KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuaXNWZWN0b3IyKSB7XG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbbmFtZV0gPSB7XG5cdFx0XHRcdFx0dHlwZTogJ3YyJyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUudG9BcnJheSgpXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmVjdG9yMykge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd2MycsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZlY3RvcjQpIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndjQnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuaXNNYXRyaXgzKSB7XG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbbmFtZV0gPSB7XG5cdFx0XHRcdFx0dHlwZTogJ20zJyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUudG9BcnJheSgpXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmlzTWF0cml4NCkge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdtNCcsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fTsgLy8gbm90ZTogdGhlIGFycmF5IHZhcmlhbnRzIHYydiwgdjN2LCB2NHYsIG00diBhbmQgdHYgYXJlIG5vdCBzdXBwb3J0ZWQgc28gZmFyXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKE9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoID4gMCkgZGF0YS5kZWZpbmVzID0gdGhpcy5kZWZpbmVzO1xuXHRcdGRhdGEudmVydGV4U2hhZGVyID0gdGhpcy52ZXJ0ZXhTaGFkZXI7XG5cdFx0ZGF0YS5mcmFnbWVudFNoYWRlciA9IHRoaXMuZnJhZ21lbnRTaGFkZXI7XG5cdFx0Y29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5leHRlbnNpb25zKSB7XG5cdFx0XHRpZiAodGhpcy5leHRlbnNpb25zW2tleV0gPT09IHRydWUpIGV4dGVuc2lvbnNba2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLmxlbmd0aCA+IDApIGRhdGEuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5TaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbCA9IHRydWU7XG5cbmNsYXNzIENhbWVyYSBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ2FtZXJhJztcblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlLCByZWN1cnNpdmUpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSwgcmVjdXJzaXZlKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHNvdXJjZS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4KTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkoc291cmNlLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFdvcmxkRGlyZWN0aW9uKHRhcmdldCkge1xuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdGNvbnN0IGUgPSB0aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO1xuXHRcdHJldHVybiB0YXJnZXQuc2V0KC1lWzhdLCAtZVs5XSwgLWVbMTBdKS5ub3JtYWxpemUoKTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpO1xuXHRcdHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdH1cblxuXHR1cGRhdGVXb3JsZE1hdHJpeCh1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbikge1xuXHRcdHN1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KHVwZGF0ZVBhcmVudHMsIHVwZGF0ZUNoaWxkcmVuKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cbkNhbWVyYS5wcm90b3R5cGUuaXNDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBQZXJzcGVjdGl2ZUNhbWVyYSBleHRlbmRzIENhbWVyYSB7XG5cdGNvbnN0cnVjdG9yKGZvdiA9IDUwLCBhc3BlY3QgPSAxLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUGVyc3BlY3RpdmVDYW1lcmEnO1xuXHRcdHRoaXMuZm92ID0gZm92O1xuXHRcdHRoaXMuem9vbSA9IDE7XG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblx0XHR0aGlzLmZvY3VzID0gMTA7XG5cdFx0dGhpcy5hc3BlY3QgPSBhc3BlY3Q7XG5cdFx0dGhpcy52aWV3ID0gbnVsbDtcblx0XHR0aGlzLmZpbG1HYXVnZSA9IDM1OyAvLyB3aWR0aCBvZiB0aGUgZmlsbSAoZGVmYXVsdCBpbiBtaWxsaW1ldGVycylcblxuXHRcdHRoaXMuZmlsbU9mZnNldCA9IDA7IC8vIGhvcml6b250YWwgZmlsbSBvZmZzZXQgKHNhbWUgdW5pdCBhcyBnYXVnZSlcblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHR9XG5cblx0Y29weShzb3VyY2UsIHJlY3Vyc2l2ZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlLCByZWN1cnNpdmUpO1xuXHRcdHRoaXMuZm92ID0gc291cmNlLmZvdjtcblx0XHR0aGlzLnpvb20gPSBzb3VyY2Uuem9vbTtcblx0XHR0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjtcblx0XHR0aGlzLmZhciA9IHNvdXJjZS5mYXI7XG5cdFx0dGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1cztcblx0XHR0aGlzLmFzcGVjdCA9IHNvdXJjZS5hc3BlY3Q7XG5cdFx0dGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDogT2JqZWN0LmFzc2lnbih7fSwgc291cmNlLnZpZXcpO1xuXHRcdHRoaXMuZmlsbUdhdWdlID0gc291cmNlLmZpbG1HYXVnZTtcblx0XHR0aGlzLmZpbG1PZmZzZXQgPSBzb3VyY2UuZmlsbU9mZnNldDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0ICogU2V0cyB0aGUgRk9WIGJ5IGZvY2FsIGxlbmd0aCBpbiByZXNwZWN0IHRvIHRoZSBjdXJyZW50IC5maWxtR2F1Z2UuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IGZpbG0gZ2F1Z2UgaXMgMzUsIHNvIHRoYXQgdGhlIGZvY2FsIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGZvclxuXHQgKiBhIDM1bW0gKGZ1bGwgZnJhbWUpIGNhbWVyYS5cblx0ICpcblx0ICogVmFsdWVzIGZvciBmb2NhbCBsZW5ndGggYW5kIGZpbG0gZ2F1Z2UgbXVzdCBoYXZlIHRoZSBzYW1lIHVuaXQuXG5cdCAqL1xuXG5cblx0c2V0Rm9jYWxMZW5ndGgoZm9jYWxMZW5ndGgpIHtcblx0XHQvKiogc2VlIHtAbGluayBodHRwOi8vd3d3LmJvYmF0a2lucy5jb20vcGhvdG9ncmFwaHkvdGVjaG5pY2FsL2ZpZWxkX29mX3ZpZXcuaHRtbH0gKi9cblx0XHRjb25zdCB2RXh0ZW50U2xvcGUgPSAwLjUgKiB0aGlzLmdldEZpbG1IZWlnaHQoKSAvIGZvY2FsTGVuZ3RoO1xuXHRcdHRoaXMuZm92ID0gUkFEMkRFRyAqIDIgKiBNYXRoLmF0YW4odkV4dGVudFNsb3BlKTtcblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgZm9jYWwgbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgLmZvdiBhbmQgLmZpbG1HYXVnZS5cblx0ICovXG5cblxuXHRnZXRGb2NhbExlbmd0aCgpIHtcblx0XHRjb25zdCB2RXh0ZW50U2xvcGUgPSBNYXRoLnRhbihERUcyUkFEICogMC41ICogdGhpcy5mb3YpO1xuXHRcdHJldHVybiAwLjUgKiB0aGlzLmdldEZpbG1IZWlnaHQoKSAvIHZFeHRlbnRTbG9wZTtcblx0fVxuXG5cdGdldEVmZmVjdGl2ZUZPVigpIHtcblx0XHRyZXR1cm4gUkFEMkRFRyAqIDIgKiBNYXRoLmF0YW4oTWF0aC50YW4oREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92KSAvIHRoaXMuem9vbSk7XG5cdH1cblxuXHRnZXRGaWxtV2lkdGgoKSB7XG5cdFx0Ly8gZmlsbSBub3QgY29tcGxldGVseSBjb3ZlcmVkIGluIHBvcnRyYWl0IGZvcm1hdCAoYXNwZWN0IDwgMSlcblx0XHRyZXR1cm4gdGhpcy5maWxtR2F1Z2UgKiBNYXRoLm1pbih0aGlzLmFzcGVjdCwgMSk7XG5cdH1cblxuXHRnZXRGaWxtSGVpZ2h0KCkge1xuXHRcdC8vIGZpbG0gbm90IGNvbXBsZXRlbHkgY292ZXJlZCBpbiBsYW5kc2NhcGUgZm9ybWF0IChhc3BlY3QgPiAxKVxuXHRcdHJldHVybiB0aGlzLmZpbG1HYXVnZSAvIE1hdGgubWF4KHRoaXMuYXNwZWN0LCAxKTtcblx0fVxuXHQvKipcblx0ICogU2V0cyBhbiBvZmZzZXQgaW4gYSBsYXJnZXIgZnJ1c3R1bS4gVGhpcyBpcyB1c2VmdWwgZm9yIG11bHRpLXdpbmRvdyBvclxuXHQgKiBtdWx0aS1tb25pdG9yL211bHRpLW1hY2hpbmUgc2V0dXBzLlxuXHQgKlxuXHQgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgM3gyIG1vbml0b3JzIGFuZCBlYWNoIG1vbml0b3IgaXMgMTkyMHgxMDgwIGFuZFxuXHQgKiB0aGUgbW9uaXRvcnMgYXJlIGluIGdyaWQgbGlrZSB0aGlzXG5cdCAqXG5cdCAqXHQgKy0tLSstLS0rLS0tK1xuXHQgKlx0IHwgQSB8IEIgfCBDIHxcblx0ICpcdCArLS0tKy0tLSstLS0rXG5cdCAqXHQgfCBEIHwgRSB8IEYgfFxuXHQgKlx0ICstLS0rLS0tKy0tLStcblx0ICpcblx0ICogdGhlbiBmb3IgZWFjaCBtb25pdG9yIHlvdSB3b3VsZCBjYWxsIGl0IGxpa2UgdGhpc1xuXHQgKlxuXHQgKlx0IGNvbnN0IHcgPSAxOTIwO1xuXHQgKlx0IGNvbnN0IGggPSAxMDgwO1xuXHQgKlx0IGNvbnN0IGZ1bGxXaWR0aCA9IHcgKiAzO1xuXHQgKlx0IGNvbnN0IGZ1bGxIZWlnaHQgPSBoICogMjtcblx0ICpcblx0ICpcdCAtLUEtLVxuXHQgKlx0IGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAwLCBoICogMCwgdywgaCApO1xuXHQgKlx0IC0tQi0tXG5cdCAqXHQgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDEsIGggKiAwLCB3LCBoICk7XG5cdCAqXHQgLS1DLS1cblx0ICpcdCBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDAsIHcsIGggKTtcblx0ICpcdCAtLUQtLVxuXHQgKlx0IGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAwLCBoICogMSwgdywgaCApO1xuXHQgKlx0IC0tRS0tXG5cdCAqXHQgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDEsIGggKiAxLCB3LCBoICk7XG5cdCAqXHQgLS1GLS1cblx0ICpcdCBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDEsIHcsIGggKTtcblx0ICpcblx0ICpcdCBOb3RlIHRoZXJlIGlzIG5vIHJlYXNvbiBtb25pdG9ycyBoYXZlIHRvIGJlIHRoZSBzYW1lIHNpemUgb3IgaW4gYSBncmlkLlxuXHQgKi9cblxuXG5cdHNldFZpZXdPZmZzZXQoZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0dGhpcy5hc3BlY3QgPSBmdWxsV2lkdGggLyBmdWxsSGVpZ2h0O1xuXG5cdFx0aWYgKHRoaXMudmlldyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy52aWV3ID0ge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRmdWxsV2lkdGg6IDEsXG5cdFx0XHRcdGZ1bGxIZWlnaHQ6IDEsXG5cdFx0XHRcdG9mZnNldFg6IDAsXG5cdFx0XHRcdG9mZnNldFk6IDAsXG5cdFx0XHRcdHdpZHRoOiAxLFxuXHRcdFx0XHRoZWlnaHQ6IDFcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7XG5cdFx0dGhpcy52aWV3LmZ1bGxIZWlnaHQgPSBmdWxsSGVpZ2h0O1xuXHRcdHRoaXMudmlldy5vZmZzZXRYID0geDtcblx0XHR0aGlzLnZpZXcub2Zmc2V0WSA9IHk7XG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXG5cdGNsZWFyVmlld09mZnNldCgpIHtcblx0XHRpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHR9XG5cblx0dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcblx0XHRjb25zdCBuZWFyID0gdGhpcy5uZWFyO1xuXHRcdGxldCB0b3AgPSBuZWFyICogTWF0aC50YW4oREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92KSAvIHRoaXMuem9vbTtcblx0XHRsZXQgaGVpZ2h0ID0gMiAqIHRvcDtcblx0XHRsZXQgd2lkdGggPSB0aGlzLmFzcGVjdCAqIGhlaWdodDtcblx0XHRsZXQgbGVmdCA9IC0wLjUgKiB3aWR0aDtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy52aWV3O1xuXG5cdFx0aWYgKHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlzLnZpZXcuZW5hYmxlZCkge1xuXHRcdFx0Y29uc3QgZnVsbFdpZHRoID0gdmlldy5mdWxsV2lkdGgsXG5cdFx0XHRcdFx0XHRmdWxsSGVpZ2h0ID0gdmlldy5mdWxsSGVpZ2h0O1xuXHRcdFx0bGVmdCArPSB2aWV3Lm9mZnNldFggKiB3aWR0aCAvIGZ1bGxXaWR0aDtcblx0XHRcdHRvcCAtPSB2aWV3Lm9mZnNldFkgKiBoZWlnaHQgLyBmdWxsSGVpZ2h0O1xuXHRcdFx0d2lkdGggKj0gdmlldy53aWR0aCAvIGZ1bGxXaWR0aDtcblx0XHRcdGhlaWdodCAqPSB2aWV3LmhlaWdodCAvIGZ1bGxIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2tldyA9IHRoaXMuZmlsbU9mZnNldDtcblx0XHRpZiAoc2tldyAhPT0gMCkgbGVmdCArPSBuZWFyICogc2tldyAvIHRoaXMuZ2V0RmlsbVdpZHRoKCk7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShsZWZ0LCBsZWZ0ICsgd2lkdGgsIHRvcCwgdG9wIC0gaGVpZ2h0LCBuZWFyLCB0aGlzLmZhcik7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCk7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04obWV0YSk7XG5cdFx0ZGF0YS5vYmplY3QuZm92ID0gdGhpcy5mb3Y7XG5cdFx0ZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTtcblx0XHRkYXRhLm9iamVjdC5uZWFyID0gdGhpcy5uZWFyO1xuXHRcdGRhdGEub2JqZWN0LmZhciA9IHRoaXMuZmFyO1xuXHRcdGRhdGEub2JqZWN0LmZvY3VzID0gdGhpcy5mb2N1cztcblx0XHRkYXRhLm9iamVjdC5hc3BlY3QgPSB0aGlzLmFzcGVjdDtcblx0XHRpZiAodGhpcy52aWV3ICE9PSBudWxsKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52aWV3KTtcblx0XHRkYXRhLm9iamVjdC5maWxtR2F1Z2UgPSB0aGlzLmZpbG1HYXVnZTtcblx0XHRkYXRhLm9iamVjdC5maWxtT2Zmc2V0ID0gdGhpcy5maWxtT2Zmc2V0O1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuUGVyc3BlY3RpdmVDYW1lcmEucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmEgPSB0cnVlO1xuXG5jb25zdCBmb3YgPSA5MCxcblx0XHRcdGFzcGVjdCA9IDE7XG5cbmNsYXNzIEN1YmVDYW1lcmEgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKG5lYXIsIGZhciwgcmVuZGVyVGFyZ2V0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ3ViZUNhbWVyYSc7XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblx0XHRjb25zdCBjYW1lcmFQWCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFQWC5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFQWC51cC5zZXQoMCwgLTEsIDApO1xuXHRcdGNhbWVyYVBYLmxvb2tBdChuZXcgVmVjdG9yMygxLCAwLCAwKSk7XG5cdFx0dGhpcy5hZGQoY2FtZXJhUFgpO1xuXHRcdGNvbnN0IGNhbWVyYU5YID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuXHRcdGNhbWVyYU5YLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYU5YLnVwLnNldCgwLCAtMSwgMCk7XG5cdFx0Y2FtZXJhTlgubG9va0F0KG5ldyBWZWN0b3IzKC0xLCAwLCAwKSk7XG5cdFx0dGhpcy5hZGQoY2FtZXJhTlgpO1xuXHRcdGNvbnN0IGNhbWVyYVBZID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuXHRcdGNhbWVyYVBZLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYVBZLnVwLnNldCgwLCAwLCAxKTtcblx0XHRjYW1lcmFQWS5sb29rQXQobmV3IFZlY3RvcjMoMCwgMSwgMCkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYVBZKTtcblx0XHRjb25zdCBjYW1lcmFOWSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFOWS5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFOWS51cC5zZXQoMCwgMCwgLTEpO1xuXHRcdGNhbWVyYU5ZLmxvb2tBdChuZXcgVmVjdG9yMygwLCAtMSwgMCkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYU5ZKTtcblx0XHRjb25zdCBjYW1lcmFQWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFQWi5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFQWi51cC5zZXQoMCwgLTEsIDApO1xuXHRcdGNhbWVyYVBaLmxvb2tBdChuZXcgVmVjdG9yMygwLCAwLCAxKSk7XG5cdFx0dGhpcy5hZGQoY2FtZXJhUFopO1xuXHRcdGNvbnN0IGNhbWVyYU5aID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuXHRcdGNhbWVyYU5aLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYU5aLnVwLnNldCgwLCAtMSwgMCk7XG5cdFx0Y2FtZXJhTloubG9va0F0KG5ldyBWZWN0b3IzKDAsIDAsIC0xKSk7XG5cdFx0dGhpcy5hZGQoY2FtZXJhTlopO1xuXHR9XG5cblx0dXBkYXRlKHJlbmRlcmVyLCBzY2VuZSkge1xuXHRcdGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0O1xuXHRcdGNvbnN0IFtjYW1lcmFQWCwgY2FtZXJhTlgsIGNhbWVyYVBZLCBjYW1lcmFOWSwgY2FtZXJhUFosIGNhbWVyYU5aXSA9IHRoaXMuY2hpbGRyZW47XG5cdFx0Y29uc3QgY3VycmVudFhyRW5hYmxlZCA9IHJlbmRlcmVyLnhyLmVuYWJsZWQ7XG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdHJlbmRlcmVyLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBnZW5lcmF0ZU1pcG1hcHMgPSByZW5kZXJUYXJnZXQudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7XG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCwgMCk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmFQWCk7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCwgMSk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmFOWCk7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCwgMik7XG5cdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmFQWSk7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCwgMyk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmFOWSk7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCwgNCk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmFQWik7XG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDUpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhTlopO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjdXJyZW50UmVuZGVyVGFyZ2V0KTtcblx0XHRyZW5kZXJlci54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblx0XHRyZW5kZXJUYXJnZXQudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID0gdHJ1ZTtcblx0fVxuXG59XG5cbmNsYXNzIEN1YmVUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKGltYWdlcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZykge1xuXHRcdGltYWdlcyA9IGltYWdlcyAhPT0gdW5kZWZpbmVkID8gaW1hZ2VzIDogW107XG5cdFx0bWFwcGluZyA9IG1hcHBpbmcgIT09IHVuZGVmaW5lZCA/IG1hcHBpbmcgOiBDdWJlUmVmbGVjdGlvbk1hcHBpbmc7XG5cdFx0c3VwZXIoaW1hZ2VzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nKTtcblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7XG5cdH1cblxuXHRnZXQgaW1hZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLmltYWdlO1xuXHR9XG5cblx0c2V0IGltYWdlcyh2YWx1ZSkge1xuXHRcdHRoaXMuaW1hZ2UgPSB2YWx1ZTtcblx0fVxuXG59XG5cbkN1YmVUZXh0dXJlLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGV4dGVuZHMgV2ViR0xSZW5kZXJUYXJnZXQge1xuXHRjb25zdHJ1Y3RvcihzaXplLCBvcHRpb25zLCBkdW1teSkge1xuXHRcdGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKScpO1xuXHRcdFx0b3B0aW9ucyA9IGR1bW15O1xuXHRcdH1cblxuXHRcdHN1cGVyKHNpemUsIHNpemUsIG9wdGlvbnMpO1xuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBCeSBjb252ZW50aW9uIC0tIGxpa2VseSBiYXNlZCBvbiB0aGUgUmVuZGVyTWFuIHNwZWMgZnJvbSB0aGUgMTk5MCdzIC0tIGN1YmUgbWFwcyBhcmUgc3BlY2lmaWVkIGJ5IFdlYkdMIChhbmQgdGhyZWUuanMpXG5cdFx0Ly8gaW4gYSBjb29yZGluYXRlIHN5c3RlbSBpbiB3aGljaCBwb3NpdGl2ZS14IGlzIHRvIHRoZSByaWdodCB3aGVuIGxvb2tpbmcgdXAgdGhlIHBvc2l0aXZlLXogYXhpcyAtLSBpbiBvdGhlciB3b3Jkcyxcblx0XHQvLyBpbiBhIGxlZnQtaGFuZGVkIGNvb3JkaW5hdGUgc3lzdGVtLiBCeSBjb250aW51aW5nIHRoaXMgY29udmVudGlvbiwgcHJlZXhpc3RpbmcgY3ViZSBtYXBzIGNvbnRpbnVlZCB0byByZW5kZXIgY29ycmVjdGx5LlxuXHRcdC8vIHRocmVlLmpzIHVzZXMgYSByaWdodC1oYW5kZWQgY29vcmRpbmF0ZSBzeXN0ZW0uIFNvIGVudmlyb25tZW50IG1hcHMgdXNlZCBpbiB0aHJlZS5qcyBhcHBlYXIgdG8gaGF2ZSBweCBhbmQgbnggc3dhcHBlZFxuXHRcdC8vIGFuZCB0aGUgZmxhZyBpc1JlbmRlclRhcmdldFRleHR1cmUgY29udHJvbHMgdGhpcyBjb252ZXJzaW9uLiBUaGUgZmxpcCBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQudGV4dHVyZVxuXHRcdC8vIGFzIGEgY3ViZSB0ZXh0dXJlICh0aGlzIGlzIGRldGVjdGVkIHdoZW4gaXNSZW5kZXJUYXJnZXRUZXh0dXJlIGlzIHNldCB0byB0cnVlIGZvciBjdWJlIHRleHR1cmVzKS5cblxuXHRcdHRoaXMudGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSh1bmRlZmluZWQsIG9wdGlvbnMubWFwcGluZywgb3B0aW9ucy53cmFwUywgb3B0aW9ucy53cmFwVCwgb3B0aW9ucy5tYWdGaWx0ZXIsIG9wdGlvbnMubWluRmlsdGVyLCBvcHRpb25zLmZvcm1hdCwgb3B0aW9ucy50eXBlLCBvcHRpb25zLmFuaXNvdHJvcHksIG9wdGlvbnMuZW5jb2RpbmcpO1xuXHRcdHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPSB0cnVlO1xuXHRcdHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBvcHRpb25zLmdlbmVyYXRlTWlwbWFwcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgOiBmYWxzZTtcblx0XHR0aGlzLnRleHR1cmUubWluRmlsdGVyID0gb3B0aW9ucy5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubWluRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXHR9XG5cblx0ZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUocmVuZGVyZXIsIHRleHR1cmUpIHtcblx0XHR0aGlzLnRleHR1cmUudHlwZSA9IHRleHR1cmUudHlwZTtcblx0XHR0aGlzLnRleHR1cmUuZm9ybWF0ID0gUkdCQUZvcm1hdDsgLy8gc2VlICMxODg1OVxuXG5cdFx0dGhpcy50ZXh0dXJlLmVuY29kaW5nID0gdGV4dHVyZS5lbmNvZGluZztcblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IHRleHR1cmUubWluRmlsdGVyO1xuXHRcdHRoaXMudGV4dHVyZS5tYWdGaWx0ZXIgPSB0ZXh0dXJlLm1hZ0ZpbHRlcjtcblx0XHRjb25zdCBzaGFkZXIgPSB7XG5cdFx0XHR1bmlmb3Jtczoge1xuXHRcdFx0XHR0RXF1aXJlY3Q6IHtcblx0XHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dmVydGV4U2hhZGVyOlxuXHRcdFx0LyogZ2xzbCAqL1xuXHRcdFx0YFxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0YCxcblx0XHRcdGZyYWdtZW50U2hhZGVyOlxuXHRcdFx0LyogZ2xzbCAqL1xuXHRcdFx0YFxuXG5cdFx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0YFxuXHRcdH07XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94R2VvbWV0cnkoNSwgNSwgNSk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0bmFtZTogJ0N1YmVtYXBGcm9tRXF1aXJlY3QnLFxuXHRcdFx0dW5pZm9ybXM6IGNsb25lVW5pZm9ybXMoc2hhZGVyLnVuaWZvcm1zKSxcblx0XHRcdHZlcnRleFNoYWRlcjogc2hhZGVyLnZlcnRleFNoYWRlcixcblx0XHRcdGZyYWdtZW50U2hhZGVyOiBzaGFkZXIuZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHRzaWRlOiBCYWNrU2lkZSxcblx0XHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nXG5cdFx0fSk7XG5cdFx0bWF0ZXJpYWwudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlID0gdGV4dHVyZTtcblx0XHRjb25zdCBtZXNoID0gbmV3IE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHRjb25zdCBjdXJyZW50TWluRmlsdGVyID0gdGV4dHVyZS5taW5GaWx0ZXI7IC8vIEF2b2lkIGJsdXJyZWQgcG9sZXNcblxuXHRcdGlmICh0ZXh0dXJlLm1pbkZpbHRlciA9PT0gTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyKSB0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgQ3ViZUNhbWVyYSgxLCAxMCwgdGhpcyk7XG5cdFx0Y2FtZXJhLnVwZGF0ZShyZW5kZXJlciwgbWVzaCk7XG5cdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBjdXJyZW50TWluRmlsdGVyO1xuXHRcdG1lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdG1lc2gubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xlYXIocmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcywgaSk7XG5cdFx0XHRyZW5kZXJlci5jbGVhcihjb2xvciwgZGVwdGgsIHN0ZW5jaWwpO1xuXHRcdH1cblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjdXJyZW50UmVuZGVyVGFyZ2V0KTtcblx0fVxuXG59XG5cbldlYkdMQ3ViZVJlbmRlclRhcmdldC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgPSB0cnVlO1xuXG5jb25zdCBfdmVjdG9yMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmVjdG9yMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbm9ybWFsTWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXgzKCk7XG5cbmNsYXNzIFBsYW5lIHtcblx0Y29uc3RydWN0b3Iobm9ybWFsID0gbmV3IFZlY3RvcjMoMSwgMCwgMCksIGNvbnN0YW50ID0gMCkge1xuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHR0aGlzLm5vcm1hbCA9IG5vcm1hbDtcblx0XHR0aGlzLmNvbnN0YW50ID0gY29uc3RhbnQ7XG5cdH1cblxuXHRzZXQobm9ybWFsLCBjb25zdGFudCkge1xuXHRcdHRoaXMubm9ybWFsLmNvcHkobm9ybWFsKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gY29uc3RhbnQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb21wb25lbnRzKHgsIHksIHosIHcpIHtcblx0XHR0aGlzLm5vcm1hbC5zZXQoeCwgeSwgeik7XG5cdFx0dGhpcy5jb25zdGFudCA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChub3JtYWwsIHBvaW50KSB7XG5cdFx0dGhpcy5ub3JtYWwuY29weShub3JtYWwpO1xuXHRcdHRoaXMuY29uc3RhbnQgPSAtcG9pbnQuZG90KHRoaXMubm9ybWFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Db3BsYW5hclBvaW50cyhhLCBiLCBjKSB7XG5cdFx0Y29uc3Qgbm9ybWFsID0gX3ZlY3RvcjEuc3ViVmVjdG9ycyhjLCBiKS5jcm9zcyhfdmVjdG9yMi5zdWJWZWN0b3JzKGEsIGIpKS5ub3JtYWxpemUoKTsgLy8gUTogc2hvdWxkIGFuIGVycm9yIGJlIHRocm93biBpZiBub3JtYWwgaXMgemVybyAoZS5nLiBkZWdlbmVyYXRlIHBsYW5lKT9cblxuXG5cdFx0dGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChub3JtYWwsIGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShwbGFuZSkge1xuXHRcdHRoaXMubm9ybWFsLmNvcHkocGxhbmUubm9ybWFsKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gcGxhbmUuY29uc3RhbnQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cdFx0Ly8gTm90ZTogd2lsbCBsZWFkIHRvIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIHBsYW5lIGlzIGludmFsaWQuXG5cdFx0Y29uc3QgaW52ZXJzZU5vcm1hbExlbmd0aCA9IDEuMCAvIHRoaXMubm9ybWFsLmxlbmd0aCgpO1xuXHRcdHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKGludmVyc2VOb3JtYWxMZW5ndGgpO1xuXHRcdHRoaXMuY29uc3RhbnQgKj0gaW52ZXJzZU5vcm1hbExlbmd0aDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG5lZ2F0ZSgpIHtcblx0XHR0aGlzLmNvbnN0YW50ICo9IC0xO1xuXHRcdHRoaXMubm9ybWFsLm5lZ2F0ZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KHBvaW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsLmRvdChwb2ludCkgKyB0aGlzLmNvbnN0YW50O1xuXHR9XG5cblx0ZGlzdGFuY2VUb1NwaGVyZShzcGhlcmUpIHtcblx0XHRyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoc3BoZXJlLmNlbnRlcikgLSBzcGhlcmUucmFkaXVzO1xuXHR9XG5cblx0cHJvamVjdFBvaW50KHBvaW50LCB0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludChwb2ludCkpLmFkZChwb2ludCk7XG5cdH1cblxuXHRpbnRlcnNlY3RMaW5lKGxpbmUsIHRhcmdldCkge1xuXHRcdGNvbnN0IGRpcmVjdGlvbiA9IGxpbmUuZGVsdGEoX3ZlY3RvcjEpO1xuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gdGhpcy5ub3JtYWwuZG90KGRpcmVjdGlvbik7XG5cblx0XHRpZiAoZGVub21pbmF0b3IgPT09IDApIHtcblx0XHRcdC8vIGxpbmUgaXMgY29wbGFuYXIsIHJldHVybiBvcmlnaW5cblx0XHRcdGlmICh0aGlzLmRpc3RhbmNlVG9Qb2ludChsaW5lLnN0YXJ0KSA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkobGluZS5zdGFydCk7XG5cdFx0XHR9IC8vIFVuc3VyZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG1ldGhvZCB0byBoYW5kbGUgdGhpcyBjYXNlLlxuXG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSAtKGxpbmUuc3RhcnQuZG90KHRoaXMubm9ybWFsKSArIHRoaXMuY29uc3RhbnQpIC8gZGVub21pbmF0b3I7XG5cblx0XHRpZiAodCA8IDAgfHwgdCA+IDEpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuY29weShkaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZChsaW5lLnN0YXJ0KTtcblx0fVxuXG5cdGludGVyc2VjdHNMaW5lKGxpbmUpIHtcblx0XHQvLyBOb3RlOiB0aGlzIHRlc3RzIGlmIGEgbGluZSBpbnRlcnNlY3RzIHRoZSBwbGFuZSwgbm90IHdoZXRoZXIgaXQgKG9yIGl0cyBlbmQtcG9pbnRzKSBhcmUgY29wbGFuYXIgd2l0aCBpdC5cblx0XHRjb25zdCBzdGFydFNpZ24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChsaW5lLnN0YXJ0KTtcblx0XHRjb25zdCBlbmRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQobGluZS5lbmQpO1xuXHRcdHJldHVybiBzdGFydFNpZ24gPCAwICYmIGVuZFNpZ24gPiAwIHx8IGVuZFNpZ24gPCAwICYmIHN0YXJ0U2lnbiA+IDA7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdHJldHVybiBib3guaW50ZXJzZWN0c1BsYW5lKHRoaXMpO1xuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZShzcGhlcmUpIHtcblx0XHRyZXR1cm4gc3BoZXJlLmludGVyc2VjdHNQbGFuZSh0aGlzKTtcblx0fVxuXG5cdGNvcGxhbmFyUG9pbnQodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCk7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobWF0cml4LCBvcHRpb25hbE5vcm1hbE1hdHJpeCkge1xuXHRcdGNvbnN0IG5vcm1hbE1hdHJpeCA9IG9wdGlvbmFsTm9ybWFsTWF0cml4IHx8IF9ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KG1hdHJpeCk7XG5cblx0XHRjb25zdCByZWZlcmVuY2VQb2ludCA9IHRoaXMuY29wbGFuYXJQb2ludChfdmVjdG9yMSkuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG5vcm1hbE1hdHJpeCkubm9ybWFsaXplKCk7XG5cdFx0dGhpcy5jb25zdGFudCA9IC1yZWZlcmVuY2VQb2ludC5kb3Qobm9ybWFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZShvZmZzZXQpIHtcblx0XHR0aGlzLmNvbnN0YW50IC09IG9mZnNldC5kb3QodGhpcy5ub3JtYWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKHBsYW5lKSB7XG5cdFx0cmV0dXJuIHBsYW5lLm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpICYmIHBsYW5lLmNvbnN0YW50ID09PSB0aGlzLmNvbnN0YW50O1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cblBsYW5lLnByb3RvdHlwZS5pc1BsYW5lID0gdHJ1ZTtcblxuY29uc3QgX3NwaGVyZSQyID0gLypAX19QVVJFX18qL25ldyBTcGhlcmUoKTtcblxuY29uc3QgX3ZlY3RvciQ3ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIEZydXN0dW0ge1xuXHRjb25zdHJ1Y3RvcihwMCA9IG5ldyBQbGFuZSgpLCBwMSA9IG5ldyBQbGFuZSgpLCBwMiA9IG5ldyBQbGFuZSgpLCBwMyA9IG5ldyBQbGFuZSgpLCBwNCA9IG5ldyBQbGFuZSgpLCBwNSA9IG5ldyBQbGFuZSgpKSB7XG5cdFx0dGhpcy5wbGFuZXMgPSBbcDAsIHAxLCBwMiwgcDMsIHA0LCBwNV07XG5cdH1cblxuXHRzZXQocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXHRcdHBsYW5lc1swXS5jb3B5KHAwKTtcblx0XHRwbGFuZXNbMV0uY29weShwMSk7XG5cdFx0cGxhbmVzWzJdLmNvcHkocDIpO1xuXHRcdHBsYW5lc1szXS5jb3B5KHAzKTtcblx0XHRwbGFuZXNbNF0uY29weShwNCk7XG5cdFx0cGxhbmVzWzVdLmNvcHkocDUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShmcnVzdHVtKSB7XG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5wbGFuZXM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0cGxhbmVzW2ldLmNvcHkoZnJ1c3R1bS5wbGFuZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVByb2plY3Rpb25NYXRyaXgobSkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHRjb25zdCBtZTAgPSBtZVswXSxcblx0XHRcdFx0XHRtZTEgPSBtZVsxXSxcblx0XHRcdFx0XHRtZTIgPSBtZVsyXSxcblx0XHRcdFx0XHRtZTMgPSBtZVszXTtcblx0XHRjb25zdCBtZTQgPSBtZVs0XSxcblx0XHRcdFx0XHRtZTUgPSBtZVs1XSxcblx0XHRcdFx0XHRtZTYgPSBtZVs2XSxcblx0XHRcdFx0XHRtZTcgPSBtZVs3XTtcblx0XHRjb25zdCBtZTggPSBtZVs4XSxcblx0XHRcdFx0XHRtZTkgPSBtZVs5XSxcblx0XHRcdFx0XHRtZTEwID0gbWVbMTBdLFxuXHRcdFx0XHRcdG1lMTEgPSBtZVsxMV07XG5cdFx0Y29uc3QgbWUxMiA9IG1lWzEyXSxcblx0XHRcdFx0XHRtZTEzID0gbWVbMTNdLFxuXHRcdFx0XHRcdG1lMTQgPSBtZVsxNF0sXG5cdFx0XHRcdFx0bWUxNSA9IG1lWzE1XTtcblx0XHRwbGFuZXNbMF0uc2V0Q29tcG9uZW50cyhtZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCwgbWUxNSAtIG1lMTIpLm5vcm1hbGl6ZSgpO1xuXHRcdHBsYW5lc1sxXS5zZXRDb21wb25lbnRzKG1lMyArIG1lMCwgbWU3ICsgbWU0LCBtZTExICsgbWU4LCBtZTE1ICsgbWUxMikubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWzJdLnNldENvbXBvbmVudHMobWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEgKyBtZTksIG1lMTUgKyBtZTEzKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbM10uc2V0Q29tcG9uZW50cyhtZTMgLSBtZTEsIG1lNyAtIG1lNSwgbWUxMSAtIG1lOSwgbWUxNSAtIG1lMTMpLm5vcm1hbGl6ZSgpO1xuXHRcdHBsYW5lc1s0XS5zZXRDb21wb25lbnRzKG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCwgbWUxNSAtIG1lMTQpLm5vcm1hbGl6ZSgpO1xuXHRcdHBsYW5lc1s1XS5zZXRDb21wb25lbnRzKG1lMyArIG1lMiwgbWU3ICsgbWU2LCBtZTExICsgbWUxMCwgbWUxNSArIG1lMTQpLm5vcm1hbGl6ZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aW50ZXJzZWN0c09iamVjdChvYmplY3QpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTtcblx0XHRpZiAoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwpIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZSQyLmNvcHkoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NChvYmplY3QubWF0cml4V29ybGQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShfc3BoZXJlJDIpO1xuXHR9XG5cblx0aW50ZXJzZWN0c1Nwcml0ZShzcHJpdGUpIHtcblx0XHRfc3BoZXJlJDIuY2VudGVyLnNldCgwLCAwLCAwKTtcblxuXHRcdF9zcGhlcmUkMi5yYWRpdXMgPSAwLjcwNzEwNjc4MTE4NjU0NzY7XG5cblx0XHRfc3BoZXJlJDIuYXBwbHlNYXRyaXg0KHNwcml0ZS5tYXRyaXhXb3JsZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKF9zcGhlcmUkMik7XG5cdH1cblxuXHRpbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXHRcdGNvbnN0IGNlbnRlciA9IHNwaGVyZS5jZW50ZXI7XG5cdFx0Y29uc3QgbmVnUmFkaXVzID0gLXNwaGVyZS5yYWRpdXM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBwbGFuZXNbaV0uZGlzdGFuY2VUb1BvaW50KGNlbnRlcik7XG5cblx0XHRcdGlmIChkaXN0YW5jZSA8IG5lZ1JhZGl1cykge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdGNvbnN0IHBsYW5lID0gcGxhbmVzW2ldOyAvLyBjb3JuZXIgYXQgbWF4IGRpc3RhbmNlXG5cblx0XHRcdF92ZWN0b3IkNy54ID0gcGxhbmUubm9ybWFsLnggPiAwID8gYm94Lm1heC54IDogYm94Lm1pbi54O1xuXHRcdFx0X3ZlY3RvciQ3LnkgPSBwbGFuZS5ub3JtYWwueSA+IDAgPyBib3gubWF4LnkgOiBib3gubWluLnk7XG5cdFx0XHRfdmVjdG9yJDcueiA9IHBsYW5lLm5vcm1hbC56ID4gMCA/IGJveC5tYXgueiA6IGJveC5taW4uejtcblxuXHRcdFx0aWYgKHBsYW5lLmRpc3RhbmNlVG9Qb2ludChfdmVjdG9yJDcpIDwgMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb250YWluc1BvaW50KHBvaW50KSB7XG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5wbGFuZXM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0aWYgKHBsYW5lc1tpXS5kaXN0YW5jZVRvUG9pbnQocG9pbnQpIDwgMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xBbmltYXRpb24oKSB7XG5cdGxldCBjb250ZXh0ID0gbnVsbDtcblx0bGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cdGxldCBhbmltYXRpb25Mb29wID0gbnVsbDtcblx0bGV0IHJlcXVlc3RJZCA9IG51bGw7XG5cblx0ZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSh0aW1lLCBmcmFtZSkge1xuXHRcdGFuaW1hdGlvbkxvb3AodGltZSwgZnJhbWUpO1xuXHRcdHJlcXVlc3RJZCA9IGNvbnRleHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uQW5pbWF0aW9uRnJhbWUpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzdGFydDogZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGlzQW5pbWF0aW5nID09PSB0cnVlKSByZXR1cm47XG5cdFx0XHRpZiAoYW5pbWF0aW9uTG9vcCA9PT0gbnVsbCkgcmV0dXJuO1xuXHRcdFx0cmVxdWVzdElkID0gY29udGV4dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25BbmltYXRpb25GcmFtZSk7XG5cdFx0XHRpc0FuaW1hdGluZyA9IHRydWU7XG5cdFx0fSxcblx0XHRzdG9wOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb250ZXh0LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlcXVlc3RJZCk7XG5cdFx0XHRpc0FuaW1hdGluZyA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0QW5pbWF0aW9uTG9vcDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRhbmltYXRpb25Mb29wID0gY2FsbGJhY2s7XG5cdFx0fSxcblx0XHRzZXRDb250ZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnRleHQgPSB2YWx1ZTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMQXR0cmlidXRlcyhnbCwgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRjb25zdCBidWZmZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBjcmVhdGVCdWZmZXIoYXR0cmlidXRlLCBidWZmZXJUeXBlKSB7XG5cdFx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7XG5cdFx0Y29uc3QgdXNhZ2UgPSBhdHRyaWJ1dGUudXNhZ2U7XG5cdFx0Y29uc3QgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdFx0Z2wuYmluZEJ1ZmZlcihidWZmZXJUeXBlLCBidWZmZXIpO1xuXHRcdGdsLmJ1ZmZlckRhdGEoYnVmZmVyVHlwZSwgYXJyYXksIHVzYWdlKTtcblx0XHRhdHRyaWJ1dGUub25VcGxvYWRDYWxsYmFjaygpO1xuXHRcdGxldCB0eXBlID0gZ2wuRkxPQVQ7XG5cblx0XHRpZiAoYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHtcblx0XHRcdHR5cGUgPSBnbC5GTE9BVDtcblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuJyk7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7XG5cdFx0XHRpZiAoYXR0cmlidXRlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0XHRpZiAoaXNXZWJHTDIpIHtcblx0XHRcdFx0XHR0eXBlID0gZ2wuSEFMRl9GTE9BVDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR5cGUgPSBnbC5VTlNJR05FRF9TSE9SVDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLlNIT1JUO1xuXHRcdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLlVOU0lHTkVEX0lOVDtcblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLklOVDtcblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5KSB7XG5cdFx0XHR0eXBlID0gZ2wuQllURTtcblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG5cdFx0XHR0eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YnVmZmVyOiBidWZmZXIsXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0Ynl0ZXNQZXJFbGVtZW50OiBhcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcblx0XHRcdHZlcnNpb246IGF0dHJpYnV0ZS52ZXJzaW9uXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZUJ1ZmZlcihidWZmZXIsIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSkge1xuXHRcdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmFycmF5O1xuXHRcdGNvbnN0IHVwZGF0ZVJhbmdlID0gYXR0cmlidXRlLnVwZGF0ZVJhbmdlO1xuXHRcdGdsLmJpbmRCdWZmZXIoYnVmZmVyVHlwZSwgYnVmZmVyKTtcblxuXHRcdGlmICh1cGRhdGVSYW5nZS5jb3VudCA9PT0gLTEpIHtcblx0XHRcdC8vIE5vdCB1c2luZyB1cGRhdGUgcmFuZ2VzXG5cdFx0XHRnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlclR5cGUsIDAsIGFycmF5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdGdsLmJ1ZmZlclN1YkRhdGEoYnVmZmVyVHlwZSwgdXBkYXRlUmFuZ2Uub2Zmc2V0ICogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIGFycmF5LCB1cGRhdGVSYW5nZS5vZmZzZXQsIHVwZGF0ZVJhbmdlLmNvdW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdsLmJ1ZmZlclN1YkRhdGEoYnVmZmVyVHlwZSwgdXBkYXRlUmFuZ2Uub2Zmc2V0ICogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIGFycmF5LnN1YmFycmF5KHVwZGF0ZVJhbmdlLm9mZnNldCwgdXBkYXRlUmFuZ2Uub2Zmc2V0ICsgdXBkYXRlUmFuZ2UuY291bnQpKTtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlUmFuZ2UuY291bnQgPSAtMTsgLy8gcmVzZXQgcmFuZ2Vcblx0XHR9XG5cdH0gLy9cblxuXG5cdGZ1bmN0aW9uIGdldChhdHRyaWJ1dGUpIHtcblx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhO1xuXHRcdHJldHVybiBidWZmZXJzLmdldChhdHRyaWJ1dGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVtb3ZlKGF0dHJpYnV0ZSkge1xuXHRcdGlmIChhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkgYXR0cmlidXRlID0gYXR0cmlidXRlLmRhdGE7XG5cdFx0Y29uc3QgZGF0YSA9IGJ1ZmZlcnMuZ2V0KGF0dHJpYnV0ZSk7XG5cblx0XHRpZiAoZGF0YSkge1xuXHRcdFx0Z2wuZGVsZXRlQnVmZmVyKGRhdGEuYnVmZmVyKTtcblx0XHRcdGJ1ZmZlcnMuZGVsZXRlKGF0dHJpYnV0ZSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlKGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSkge1xuXHRcdGlmIChhdHRyaWJ1dGUuaXNHTEJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0Y29uc3QgY2FjaGVkID0gYnVmZmVycy5nZXQoYXR0cmlidXRlKTtcblxuXHRcdFx0aWYgKCFjYWNoZWQgfHwgY2FjaGVkLnZlcnNpb24gPCBhdHRyaWJ1dGUudmVyc2lvbikge1xuXHRcdFx0XHRidWZmZXJzLnNldChhdHRyaWJ1dGUsIHtcblx0XHRcdFx0XHRidWZmZXI6IGF0dHJpYnV0ZS5idWZmZXIsXG5cdFx0XHRcdFx0dHlwZTogYXR0cmlidXRlLnR5cGUsXG5cdFx0XHRcdFx0Ynl0ZXNQZXJFbGVtZW50OiBhdHRyaWJ1dGUuZWxlbWVudFNpemUsXG5cdFx0XHRcdFx0dmVyc2lvbjogYXR0cmlidXRlLnZlcnNpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhO1xuXHRcdGNvbnN0IGRhdGEgPSBidWZmZXJzLmdldChhdHRyaWJ1dGUpO1xuXG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YnVmZmVycy5zZXQoYXR0cmlidXRlLCBjcmVhdGVCdWZmZXIoYXR0cmlidXRlLCBidWZmZXJUeXBlKSk7XG5cdFx0fSBlbHNlIGlmIChkYXRhLnZlcnNpb24gPCBhdHRyaWJ1dGUudmVyc2lvbikge1xuXHRcdFx0dXBkYXRlQnVmZmVyKGRhdGEuYnVmZmVyLCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUpO1xuXHRcdFx0ZGF0YS52ZXJzaW9uID0gYXR0cmlidXRlLnZlcnNpb247XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRyZW1vdmU6IHJlbW92ZSxcblx0XHR1cGRhdGU6IHVwZGF0ZVxuXHR9O1xufVxuXG5jbGFzcyBQbGFuZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCA9IDEsIGhlaWdodCA9IDEsIHdpZHRoU2VnbWVudHMgPSAxLCBoZWlnaHRTZWdtZW50cyA9IDEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdQbGFuZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHR3aWR0aDogd2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHNcblx0XHR9O1xuXHRcdGNvbnN0IHdpZHRoX2hhbGYgPSB3aWR0aCAvIDI7XG5cdFx0Y29uc3QgaGVpZ2h0X2hhbGYgPSBoZWlnaHQgLyAyO1xuXHRcdGNvbnN0IGdyaWRYID0gTWF0aC5mbG9vcih3aWR0aFNlZ21lbnRzKTtcblx0XHRjb25zdCBncmlkWSA9IE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpO1xuXHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcblx0XHRjb25zdCBncmlkWTEgPSBncmlkWSArIDE7XG5cdFx0Y29uc3Qgc2VnbWVudF93aWR0aCA9IHdpZHRoIC8gZ3JpZFg7XG5cdFx0Y29uc3Qgc2VnbWVudF9oZWlnaHQgPSBoZWlnaHQgLyBncmlkWTsgLy9cblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBncmlkWTE7IGl5KyspIHtcblx0XHRcdGNvbnN0IHkgPSBpeSAqIHNlZ21lbnRfaGVpZ2h0IC0gaGVpZ2h0X2hhbGY7XG5cblx0XHRcdGZvciAobGV0IGl4ID0gMDsgaXggPCBncmlkWDE7IGl4KyspIHtcblx0XHRcdFx0Y29uc3QgeCA9IGl4ICogc2VnbWVudF93aWR0aCAtIHdpZHRoX2hhbGY7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goeCwgLXksIDApO1xuXHRcdFx0XHRub3JtYWxzLnB1c2goMCwgMCwgMSk7XG5cdFx0XHRcdHV2cy5wdXNoKGl4IC8gZ3JpZFgpO1xuXHRcdFx0XHR1dnMucHVzaCgxIC0gaXkgLyBncmlkWSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZOyBpeSsrKSB7XG5cdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgZ3JpZFg7IGl4KyspIHtcblx0XHRcdFx0Y29uc3QgYSA9IGl4ICsgZ3JpZFgxICogaXk7XG5cdFx0XHRcdGNvbnN0IGIgPSBpeCArIGdyaWRYMSAqIChpeSArIDEpO1xuXHRcdFx0XHRjb25zdCBjID0gaXggKyAxICsgZ3JpZFgxICogKGl5ICsgMSk7XG5cdFx0XHRcdGNvbnN0IGQgPSBpeCArIDEgKyBncmlkWDEgKiBpeTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgUGxhbmVHZW9tZXRyeShkYXRhLndpZHRoLCBkYXRhLmhlaWdodCwgZGF0YS53aWR0aFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzKTtcblx0fVxuXG59XG5cbnZhciBhbHBoYW1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BTFBIQU1BUFxcblxcdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7XFxuI2VuZGlmXCI7XG5cbnZhciBhbHBoYW1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FMUEhBTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBhbHBoYXRlc3RfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFURVNUXFxuXFx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7XFxuI2VuZGlmXCI7XG5cbnZhciBhbHBoYXRlc3RfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BTFBIQVRFU1RcXG5cXHR1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDtcXG4jZW5kaWZcIjtcblxudmFyIGFvbWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FPTUFQXFxuXFx0ZmxvYXQgYW1iaWVudE9jY2x1c2lvbiA9ICggdGV4dHVyZTJEKCBhb01hcCwgdlV2MiApLnIgLSAxLjAgKSAqIGFvTWFwSW50ZW5zaXR5ICsgMS4wO1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xcblxcdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxcblxcdFxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgYW9tYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BT01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xcblxcdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XFxuI2VuZGlmXCI7XG5cbnZhciBiZWdpbl92ZXJ0ZXggPSBcInZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApO1wiO1xuXG52YXIgYmVnaW5ub3JtYWxfdmVydGV4ID0gXCJ2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xcbiNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdHZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7XFxuI2VuZGlmXCI7XG5cbnZhciBic2RmcyA9IFwidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xcblxcdHJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yO1xcbn1cXG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHtcXG5cXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XFxuXFx0cmV0dXJuIGYwICogKCAxLjAgLSBmcmVzbmVsICkgKyAoIGY5MCAqIGZyZXNuZWwgKTtcXG59XFxuZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xcblxcdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcXG5cXHRmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XFxuXFx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xcblxcdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcXG59XFxuZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcXG5cXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XFxuXFx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xcblxcdHJldHVybiBSRUNJUFJPQ0FMX1BJICogYTIgLyBwb3cyKCBkZW5vbSApO1xcbn1cXG52ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xcblxcdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XFxuXFx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xcblxcdGZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7XFxuXFx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xcblxcdGZsb2F0IFYgPSBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcXG5cXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xcblxcdHJldHVybiBGICogKCBWICogRCApO1xcbn1cXG52ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRjb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7XFxuXFx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XFxuXFx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xcblxcdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcXG5cXHR1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XFxuXFx0cmV0dXJuIHV2O1xcbn1cXG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcXG5cXHRmbG9hdCBsID0gbGVuZ3RoKCBmICk7XFxuXFx0cmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xcbn1cXG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcXG5cXHRmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTtcXG5cXHRmbG9hdCB5ID0gYWJzKCB4ICk7XFxuXFx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcXG5cXHRmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xcblxcdGZsb2F0IHYgPSBhIC8gYjtcXG5cXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XFxuXFx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xcbn1cXG52ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcXG5cXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xcblxcdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XFxuXFx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTtcXG5cXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xcblxcdHZlYzMgVDEsIFQyO1xcblxcdFQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XFxuXFx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xcblxcdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XFxuXFx0dmVjMyBjb29yZHNbIDQgXTtcXG5cXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xcblxcdGNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XFxuXFx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xcblxcdGNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xcblxcdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xcblxcdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xcblxcdGNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xcblxcdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xcblxcdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XFxuXFx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xcblxcdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcXG5cXHRmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcXG5cXHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XFxufVxcbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XFxuXFx0cmV0dXJuIDAuMjU7XFxufVxcbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcXG5cXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcXG59XFxudmVjMyBCUkRGX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzICkge1xcblxcdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XFxuXFx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xcblxcdGZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7XFxuXFx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7XFxuXFx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcXG5cXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XFxuXFx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XFxufVxcbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxcbmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHtcXG5cXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xcblxcdGZsb2F0IGludkFscGhhID0gMS4wIC8gYWxwaGE7XFxuXFx0ZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IO1xcblxcdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XFxuXFx0cmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7XFxufVxcbmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkge1xcblxcdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xcbn1cXG52ZWMzIEJSREZfU2hlZW4oIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIHZlYzMgc2hlZW5Db2xvciwgY29uc3QgaW4gZmxvYXQgc2hlZW5Sb3VnaG5lc3MgKSB7XFxuXFx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcXG5cXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XFxuXFx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XFxuXFx0ZmxvYXQgViA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XFxuXFx0cmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XFxufVxcbiNlbmRpZlwiO1xuXG52YXIgYnVtcG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0JVTVBNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwO1xcblxcdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xcblxcdHZlYzIgZEhkeHlfZndkKCkge1xcblxcdFxcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcXG5cXHRcXHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XFxuXFx0XFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xcblxcdFxcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xcblxcdFxcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xcblxcdFxcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xcblxcdH1cXG5cXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkge1xcblxcdFxcdHZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcXG5cXHRcXHR2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XFxuXFx0XFx0dmVjMyB2TiA9IHN1cmZfbm9ybTtcXG5cXHRcXHR2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XFxuXFx0XFx0dmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApO1xcblxcdFxcdGZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uO1xcblxcdFxcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xcblxcdFxcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQgPSBcIiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxcblxcdHZlYzQgcGxhbmU7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcXG5cXHRcXHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XFxuXFx0XFx0aWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcXG5cXHRcXHRib29sIGNsaXBwZWQgPSB0cnVlO1xcblxcdFxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRcXHRmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XFxuXFx0XFx0XFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xcblxcdFxcdFxcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcXG5cXHRcXHR9XFxuXFx0XFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHRcXHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxcblxcdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xcblxcdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xcbiNlbmRpZlwiO1xuXG52YXIgY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXggPSBcIiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxcblxcdHZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcbiNlbmRpZlwiO1xuXG52YXIgY29sb3JfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxcblxcdGRpZmZ1c2VDb2xvciAqPSB2Q29sb3I7XFxuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SIClcXG5cXHRkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxcblxcdHZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SIClcXG5cXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xcbiNlbmRpZlwiO1xuXG52YXIgY29sb3JfcGFyc192ZXJ0ZXggPSBcIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxcblxcdHZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxcblxcdHZhcnlpbmcgdmVjMyB2Q29sb3I7XFxuI2VuZGlmXCI7XG5cbnZhciBjb2xvcl92ZXJ0ZXggPSBcIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxcblxcdHZDb2xvciA9IHZlYzQoIDEuMCApO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcXG5cXHR2Q29sb3IgPSB2ZWMzKCAxLjAgKTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NPTE9SXFxuXFx0dkNvbG9yICo9IGNvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxcblxcdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XFxuI2VuZGlmXCI7XG5cbnZhciBjb21tb24gPSBcIiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcXG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NlxcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcXG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3XFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1XFxuI2RlZmluZSBFUFNJTE9OIDFlLTZcXG4jaWZuZGVmIHNhdHVyYXRlXFxuI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApXFxuI2VuZGlmXFxuI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxcbmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH1cXG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cXG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XFxuZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9XFxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cXG5oaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkge1xcblxcdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG5cXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcXG5cXHRyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTtcXG59XFxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXFxuXFx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH1cXG4jZWxzZVxcblxcdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHtcXG5cXHRcXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApO1xcblxcdFxcdHJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDtcXG5cXHR9XFxuI2VuZGlmXFxuc3RydWN0IEluY2lkZW50TGlnaHQge1xcblxcdHZlYzMgY29sb3I7XFxuXFx0dmVjMyBkaXJlY3Rpb247XFxuXFx0Ym9vbCB2aXNpYmxlO1xcbn07XFxuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcXG5cXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XFxuXFx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcXG5cXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcXG5cXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XFxufTtcXG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XFxuXFx0dmVjMyBwb3NpdGlvbjtcXG5cXHR2ZWMzIG5vcm1hbDtcXG5cXHR2ZWMzIHZpZXdEaXI7XFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcXG4jZW5kaWZcXG59O1xcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XFxuXFx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XFxufVxcbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xcblxcdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xcbn1cXG5tYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHtcXG5cXHRtYXQzIHRtcDtcXG5cXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcXG5cXHR0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTtcXG5cXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcXG5cXHRyZXR1cm4gdG1wO1xcbn1cXG5mbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkge1xcblxcdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcXG5cXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcXG59XFxuYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7XFxuXFx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xcbn1cXG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xcblxcdGZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xcblxcdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcXG5cXHRyZXR1cm4gdmVjMiggdSwgdiApO1xcbn1cIjtcblxudmFyIGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudCA9IFwiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcXG5cXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcXG5cXHQjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjBcXG5cXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxcblxcdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcXG5cXHRmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHtcXG5cXHRcXHR2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7XFxuXFx0XFx0ZmxvYXQgZmFjZSA9IC0gMS4wO1xcblxcdFxcdGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHtcXG5cXHRcXHRcXHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxcblxcdFxcdFxcdFxcdGZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDtcXG5cXHRcXHRcXHRlbHNlXFxuXFx0XFx0XFx0XFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7XFxuXFx0XFx0XFx0ZWxzZVxcblxcdFxcdFxcdFxcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIGZhY2U7XFxuXFx0fVxcblxcdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xcblxcdFxcdHZlYzIgdXY7XFxuXFx0XFx0aWYgKCBmYWNlID09IDAuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xcblxcdFxcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApO1xcblxcdFxcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XFxuXFx0XFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcXG5cXHR9XFxuXFx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcXG5cXHRcXHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XFxuXFx0XFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xcblxcdFxcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcXG5cXHRcXHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xcblxcdFxcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XFxuXFx0XFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKSArIDAuNTtcXG5cXHRcXHRpZiAoIGZhY2UgPiAyLjAgKSB7XFxuXFx0XFx0XFx0dXYueSArPSBmYWNlU2l6ZTtcXG5cXHRcXHRcXHRmYWNlIC09IDMuMDtcXG5cXHRcXHR9XFxuXFx0XFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XFxuXFx0XFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XFxuXFx0XFx0XFx0dXYueSArPSAyLjAgKiBjdWJlVVZfbWF4VGlsZVNpemU7XFxuXFx0XFx0fVxcblxcdFxcdHV2LnkgKz0gZmlsdGVySW50ICogMi4wICogY3ViZVVWX21pblRpbGVTaXplO1xcblxcdFxcdHV2LnggKz0gMy4wICogbWF4KCAwLjAsIGN1YmVVVl9tYXhUaWxlU2l6ZSAtIDIuMCAqIGZhY2VTaXplICk7XFxuXFx0XFx0dXYgKj0gdGV4ZWxTaXplO1xcblxcdFxcdHJldHVybiB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKS5yZ2I7XFxuXFx0fVxcblxcdCNkZWZpbmUgcjAgMS4wXFxuXFx0I2RlZmluZSB2MCAwLjMzOVxcblxcdCNkZWZpbmUgbTAgLSAyLjBcXG5cXHQjZGVmaW5lIHIxIDAuOFxcblxcdCNkZWZpbmUgdjEgMC4yNzZcXG5cXHQjZGVmaW5lIG0xIC0gMS4wXFxuXFx0I2RlZmluZSByNCAwLjRcXG5cXHQjZGVmaW5lIHY0IDAuMDQ2XFxuXFx0I2RlZmluZSBtNCAyLjBcXG5cXHQjZGVmaW5lIHI1IDAuMzA1XFxuXFx0I2RlZmluZSB2NSAwLjAxNlxcblxcdCNkZWZpbmUgbTUgMy4wXFxuXFx0I2RlZmluZSByNiAwLjIxXFxuXFx0I2RlZmluZSB2NiAwLjAwMzhcXG5cXHQjZGVmaW5lIG02IDQuMFxcblxcdGZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0XFx0ZmxvYXQgbWlwID0gMC4wO1xcblxcdFxcdGlmICggcm91Z2huZXNzID49IHIxICkge1xcblxcdFxcdFxcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcXG5cXHRcXHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XFxuXFx0XFx0XFx0bWlwID0gKCByMSAtIHJvdWdobmVzcyApICogKCBtNCAtIG0xICkgLyAoIHIxIC0gcjQgKSArIG0xO1xcblxcdFxcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNSApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7XFxuXFx0XFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkge1xcblxcdFxcdFxcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1xcdFxcdH1cXG5cXHRcXHRyZXR1cm4gbWlwO1xcblxcdH1cXG5cXHR2ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgc2FtcGxlRGlyLCBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0XFx0ZmxvYXQgbWlwID0gY2xhbXAoIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3MgKSwgbTAsIGN1YmVVVl9tYXhNaXBMZXZlbCApO1xcblxcdFxcdGZsb2F0IG1pcEYgPSBmcmFjdCggbWlwICk7XFxuXFx0XFx0ZmxvYXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xcblxcdFxcdHZlYzMgY29sb3IwID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKTtcXG5cXHRcXHRpZiAoIG1pcEYgPT0gMC4wICkge1xcblxcdFxcdFxcdHJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xcblxcdFxcdFxcdHJldHVybiB2ZWM0KCBtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xcblxcdFxcdH1cXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBkZWZhdWx0bm9ybWFsX3ZlcnRleCA9IFwidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcXG5cXHRtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xcblxcdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcXG5cXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcXG4jZW5kaWZcXG50cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xcbiNpZmRlZiBGTElQX1NJREVEXFxuXFx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcXG5cXHQjaWZkZWYgRkxJUF9TSURFRFxcblxcdFxcdHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xcblxcdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcXG4jZW5kaWZcIjtcblxudmFyIGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXFxuXFx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1lbnRNYXAsIHZVdiApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcXG4jZW5kaWZcIjtcblxudmFyIGVtaXNzaXZlbWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXFxuXFx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XFxuXFx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xcbiNlbmRpZlwiO1xuXG52YXIgZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgZW5jb2RpbmdzX2ZyYWdtZW50ID0gXCJnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTtcIjtcblxudmFyIGVuY29kaW5nc19wYXJzX2ZyYWdtZW50ID0gXCJ2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xcblxcdHJldHVybiB2YWx1ZTtcXG59XFxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XFxuXFx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xcbn1cIjtcblxudmFyIGVudm1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTlZNQVBcXG5cXHQjaWZkZWYgRU5WX1dPUkxEUE9TXFxuXFx0XFx0dmVjMyBjYW1lcmFUb0ZyYWc7XFxuXFx0XFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcXG5cXHRcXHRcXHRjYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XFxuXFx0XFx0fVxcblxcdFxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxcblxcdFxcdFxcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbHNlXFxuXFx0XFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcXG5cXHRcXHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7XFxuXFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXFxuXFx0XFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxcblxcdFxcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcXG5cXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcXG5cXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XFxuXFx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xcblxcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XFxuXFx0I2Vsc2VcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XFxuXFx0I2VuZGlmXFxuXFx0XFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTlZNQVBcXG5cXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxcblxcdFxcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcXG5cXHQjZWxzZVxcblxcdFxcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9FTlZNQVBcXG5cXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXFxuXFx0XFx0I2RlZmluZSBFTlZfV09STERQT1NcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgRU5WX1dPUkxEUE9TXFxuXFx0XFx0XFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcblxcdCNlbHNlXFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xcblxcdFxcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9FTlZNQVBcXG5cXHQjaWZkZWYgRU5WX1dPUkxEUE9TXFxuXFx0XFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcXG5cXHQjZWxzZVxcblxcdFxcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XFxuXFx0XFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcXG5cXHRcXHRcXHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xcblxcdFxcdH1cXG5cXHRcXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxcblxcdFxcdFxcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHR2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBmb2dfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0ZPR1xcblxcdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xcbiNlbmRpZlwiO1xuXG52YXIgZm9nX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0ZPR1xcblxcdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xcbiNlbmRpZlwiO1xuXG52YXIgZm9nX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0ZPR1xcblxcdCNpZmRlZiBGT0dfRVhQMlxcblxcdFxcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xcblxcdCNlbHNlXFxuXFx0XFx0ZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTtcXG5cXHQjZW5kaWZcXG5cXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XFxuI2VuZGlmXCI7XG5cbnZhciBmb2dfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XFxuXFx0dmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7XFxuXFx0I2lmZGVmIEZPR19FWFAyXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xcblxcdFxcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwO1xcbiNlbmRpZlxcbnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcXG5cXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xcblxcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XFxuXFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxcblxcdFxcdHJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTtcXG5cXHQjZWxzZVxcblxcdFxcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XFxuXFx0I2VuZGlmXFxufVwiO1xuXG52YXIgbGlnaHRtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTElHSFRNQVBcXG5cXHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XFxuXFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xcblxcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xcblxcdFxcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcXG5cXHQjZW5kaWZcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9MSUdIVE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xcblxcdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfbGFtYmVydF92ZXJ0ZXggPSBcInZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XFxuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcXG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XFxuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XFxuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XFxuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XFxuYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7XFxuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XFxudkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0dkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApO1xcblxcdHZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTtcXG4jZW5kaWZcXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xcbmZsb2F0IGRvdE5MO1xcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XFxudkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG5cXHR2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XFxuXFx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xcbiNlbmRpZlxcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xcblxcdFxcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRcXHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdFxcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19wYXJzX2JlZ2luID0gXCJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcXG51bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbIDkgXTtcXG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xcblxcdGZsb2F0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XFxuXFx0dmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAyIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHo7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcXG5cXHRyZXR1cm4gcmVzdWx0O1xcbn1cXG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XFxuXFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xcblxcdHJldHVybiBpcnJhZGlhbmNlO1xcbn1cXG52ZWMzIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgYW1iaWVudExpZ2h0Q29sb3IgKSB7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XFxuXFx0cmV0dXJuIGlycmFkaWFuY2U7XFxufVxcbmZsb2F0IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGxpZ2h0RGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGN1dG9mZkRpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBkZWNheUV4cG9uZW50ICkge1xcblxcdCNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXFxuXFx0XFx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xcblxcdFxcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XFxuXFx0XFx0XFx0ZGlzdGFuY2VGYWxsb2ZmICo9IHBvdzIoIHNhdHVyYXRlKCAxLjAgLSBwb3c0KCBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKSApICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBkaXN0YW5jZUZhbGxvZmY7XFxuXFx0I2Vsc2VcXG5cXHRcXHRpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC0gbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICsgMS4wICksIGRlY2F5RXhwb25lbnQgKTtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIDEuMDtcXG5cXHQjZW5kaWZcXG59XFxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XFxuXFx0cmV0dXJuIHNtb290aHN0ZXAoIGNvbmVDb3NpbmUsIHBlbnVtYnJhQ29zaW5lLCBhbmdsZUNvc2luZSApO1xcbn1cXG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xcblxcdFxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07XFxuXFx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcXG5cXHRcXHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XFxuXFx0XFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XFxuXFx0XFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XFxuXFx0fVxcbiNlbmRpZlxcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxcblxcdHN0cnVjdCBQb2ludExpZ2h0IHtcXG5cXHRcXHR2ZWMzIHBvc2l0aW9uO1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0XFx0ZmxvYXQgZGlzdGFuY2U7XFxuXFx0XFx0ZmxvYXQgZGVjYXk7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTtcXG5cXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xcblxcdFxcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcXG5cXHRcXHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcXG5cXHRcXHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XFxuXFx0XFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xcblxcdFxcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcXG5cXHRcXHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xcblxcdH1cXG4jZW5kaWZcXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxcblxcdHN0cnVjdCBTcG90TGlnaHQge1xcblxcdFxcdHZlYzMgcG9zaXRpb247XFxuXFx0XFx0dmVjMyBkaXJlY3Rpb247XFxuXFx0XFx0dmVjMyBjb2xvcjtcXG5cXHRcXHRmbG9hdCBkaXN0YW5jZTtcXG5cXHRcXHRmbG9hdCBkZWNheTtcXG5cXHRcXHRmbG9hdCBjb25lQ29zO1xcblxcdFxcdGZsb2F0IHBlbnVtYnJhQ29zO1xcblxcdH07XFxuXFx0dW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07XFxuXFx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcXG5cXHRcXHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcXG5cXHRcXHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcXG5cXHRcXHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xcblxcdFxcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xcblxcdFxcdFxcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcXG5cXHRcXHRcXHRsaWdodC5jb2xvciA9IHNwb3RMaWdodC5jb2xvciAqIHNwb3RBdHRlbnVhdGlvbjtcXG5cXHRcXHRcXHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xcblxcdFxcdFxcdGxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRsaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xcblxcdFxcdFxcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcXG5cXHRcXHR9XFxuXFx0fVxcbiNlbmRpZlxcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XFxuXFx0XFx0dmVjMyBjb2xvcjtcXG5cXHRcXHR2ZWMzIHBvc2l0aW9uO1xcblxcdFxcdHZlYzMgaGFsZldpZHRoO1xcblxcdFxcdHZlYzMgaGFsZkhlaWdodDtcXG5cXHR9O1xcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1xcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xcblxcdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTtcXG4jZW5kaWZcXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxcblxcdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xcblxcdFxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdFxcdHZlYzMgc2t5Q29sb3I7XFxuXFx0XFx0dmVjMyBncm91bmRDb2xvcjtcXG5cXHR9O1xcblxcdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xcblxcdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XFxuXFx0XFx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgaGVtaUxpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IGhlbWlEaWZmdXNlV2VpZ2h0ID0gMC41ICogZG90TkwgKyAwLjU7XFxuXFx0XFx0dmVjMyBpcnJhZGlhbmNlID0gbWl4KCBoZW1pTGlnaHQuZ3JvdW5kQ29sb3IsIGhlbWlMaWdodC5za3lDb2xvciwgaGVtaURpZmZ1c2VXZWlnaHQgKTtcXG5cXHRcXHRyZXR1cm4gaXJyYWRpYW5jZTtcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKVxcblxcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XFxuXFx0I2VuZGlmXFxuXFx0dmVjMyBnZXRJQkxJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcXG5cXHRcXHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXFxuXFx0XFx0XFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdFxcdFxcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTtcXG5cXHRcXHRcXHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRyZXR1cm4gdmVjMyggMC4wICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdHZlYzMgZ2V0SUJMUmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRcXHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXFxuXFx0XFx0XFx0dmVjMyByZWZsZWN0VmVjO1xcblxcdFxcdFxcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXFxuXFx0XFx0XFx0XFx0cmVmbGVjdFZlYyA9IHJlZmxlY3QoIC0gdmlld0Rpciwgbm9ybWFsICk7XFxuXFx0XFx0XFx0XFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcXG5cXHRcXHRcXHQjZWxzZVxcblxcdFxcdFxcdFxcdHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtIHZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XFxuXFx0XFx0XFx0I2VuZGlmXFxuXFx0XFx0XFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHRcXHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTtcXG5cXHRcXHRcXHRyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0cmV0dXJuIHZlYzMoIDAuMCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c190b29uX2ZyYWdtZW50ID0gXCJUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7XFxubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcIjtcblxudmFyIGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQgPSBcInZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xcblxcdHZlYzMgZGlmZnVzZUNvbG9yO1xcbn07XFxudm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG4jZGVmaW5lIFJFX0RpcmVjdFxcdFxcdFxcdFxcdFJFX0RpcmVjdF9Ub29uXFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcXHRcXHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVxcdCgwKVwiO1xuXG52YXIgbGlnaHRzX3Bob25nX2ZyYWdtZW50ID0gXCJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XFxubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcXG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XFxubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XFxubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7XCI7XG5cbnZhciBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCA9IFwidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XFxuXFx0dmVjMyBkaWZmdXNlQ29sb3I7XFxuXFx0dmVjMyBzcGVjdWxhckNvbG9yO1xcblxcdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xcblxcdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XFxufTtcXG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XFxufVxcbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbiNkZWZpbmUgUkVfRGlyZWN0XFx0XFx0XFx0XFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVxcdFxcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXFxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXFx0KDApXCI7XG5cbnZhciBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQgPSBcIlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XFxubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XFxudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xcbm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XFxubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xcbiNpZmRlZiBJT1JcXG5cXHQjaWZkZWYgU1BFQ1VMQVJcXG5cXHRcXHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xcblxcdFxcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XFxuXFx0XFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxcblxcdFxcdFxcdHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJJbnRlbnNpdHlNYXAsIHZVdiApLmE7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0I2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQXFxuXFx0XFx0XFx0c3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IDEuMDtcXG5cXHRcXHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSB2ZWMzKCAxLjAgKTtcXG5cXHRcXHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcXG5cXHQjZW5kaWZcXG5cXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xcbiNlbHNlXFxuXFx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcXG5cXHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdG1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDtcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wO1xcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXFxuXFx0XFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxcblxcdFxcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTtcXG5cXHQjZW5kaWZcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9TSEVFTlxcblxcdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xcblxcdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxcblxcdFxcdG1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7XFxuXFx0I2VuZGlmXFxuXFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xcblxcdCNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVBcXG5cXHRcXHRtYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQgPSBcInN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHtcXG5cXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcXG5cXHRmbG9hdCByb3VnaG5lc3M7XFxuXFx0dmVjMyBzcGVjdWxhckNvbG9yO1xcblxcdGZsb2F0IHNwZWN1bGFyRjkwO1xcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0XFx0ZmxvYXQgY2xlYXJjb2F0O1xcblxcdFxcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcXG5cXHRcXHR2ZWMzIGNsZWFyY29hdEYwO1xcblxcdFxcdGZsb2F0IGNsZWFyY29hdEY5MDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0dmVjMyBzaGVlbkNvbG9yO1xcblxcdFxcdGZsb2F0IHNoZWVuUm91Z2huZXNzO1xcblxcdCNlbmRpZlxcbn07XFxudmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApO1xcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xcbmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xcblxcdGZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcblxcdGZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7XFxuXFx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xcblxcdGZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApO1xcblxcdHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XFxufVxcbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xcblxcdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xcblxcdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xcblxcdHZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7XFxuXFx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XFxuXFx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xcblxcdHJldHVybiBmYWI7XFxufVxcbnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XFxuXFx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XFxufVxcbnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkge1xcblxcdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xcblxcdHZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcXG5cXHRmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55O1xcblxcdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcXG5cXHR2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTtcXHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcXG5cXHRzaW5nbGVTY2F0dGVyICs9IEZzc0VzcztcXG5cXHRtdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zO1xcbn1cXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXFxuXFx0dm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0XFx0dmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7XFxuXFx0XFx0dmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcXG5cXHRcXHR2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XFxuXFx0XFx0dmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247XFxuXFx0XFx0dmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDtcXG5cXHRcXHR2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7XFxuXFx0XFx0dmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjtcXG5cXHRcXHRmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XFxuXFx0XFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XFxuXFx0XFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xcdFxcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcXG5cXHRcXHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XFxuXFx0XFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xcblxcdFxcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XFxuXFx0XFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XFxuXFx0XFx0dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XFxuXFx0XFx0bWF0MyBtSW52ID0gbWF0MyhcXG5cXHRcXHRcXHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXFxuXFx0XFx0XFx0dmVjMyhcdFx0MCwgMSxcdFx0MCApLFxcblxcdFxcdFxcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxcblxcdFxcdCk7XFxuXFx0XFx0dmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7XFxuXFx0fVxcbiNlbmRpZlxcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0XFx0ZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcXG5cXHRcXHR2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRcXHRjbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfU0hFRU5cXG5cXHRcXHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfU0hFRU5cXG5cXHRcXHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuXFx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xcblxcdGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7XFxuXFx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xcbn1cXG4jZGVmaW5lIFJFX0RpcmVjdFxcdFxcdFxcdFxcdFJFX0RpcmVjdF9QaHlzaWNhbFxcbiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhXFx0XFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcXHRcXHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcXG4jZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXJcXHRcXHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXFxuZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XFxufVwiO1xuXG52YXIgbGlnaHRzX2ZyYWdtZW50X2JlZ2luID0gXCJcXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcXG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7XFxuI2VuZGlmXFxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcXG4jaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXFxuXFx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xcblxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93O1xcblxcdCNlbmRpZlxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xcblxcdFxcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xcblxcdFxcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIClcXG5cXHRcXHRwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXFxuXFx0U3BvdExpZ2h0IHNwb3RMaWdodDtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdztcXG5cXHQjZW5kaWZcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xcblxcdFxcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcXG5cXHRcXHRnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApXFxuXFx0XFx0c3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXFxuXFx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xcblxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdztcXG5cXHQjZW5kaWZcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XFxuXFx0XFx0Z2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTIClcXG5cXHRcXHRkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXFxuXFx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTtcXG5cXHRcXHRSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcXG5cXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xcblxcdGlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApO1xcblxcdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxcblxcdFxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRcXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0XFx0aXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApO1xcblxcdFxcdH1cXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcXG5cXHR2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX2ZyYWdtZW50X21hcHMgPSBcIiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxcblxcdCNpZmRlZiBVU0VfTElHSFRNQVBcXG5cXHRcXHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XFxuXFx0XFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xcblxcdFxcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xcblxcdFxcdFxcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHRpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXFxuXFx0XFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxcblxcdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0XFx0Y2xlYXJjb2F0UmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfZnJhZ21lbnRfZW5kID0gXCIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcXG5cXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXFxuXFx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuI2VuZGlmXCI7XG5cbnZhciBsb2dkZXB0aGJ1Zl9mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxcblxcdGdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcXG4jZW5kaWZcIjtcblxudmFyIGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcXG5cXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XFxuXFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xcblxcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XFxuI2VuZGlmXCI7XG5cbnZhciBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxcblxcdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXFxuXFx0XFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xcblxcdFxcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XFxuXFx0I2Vsc2VcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBsb2dkZXB0aGJ1Zl92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcXG5cXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxcblxcdFxcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xcblxcdFxcdHZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApO1xcblxcdCNlbHNlXFxuXFx0XFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XFxuXFx0XFx0XFx0Z2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wO1xcblxcdFxcdFxcdGdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udztcXG5cXHRcXHR9XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTUFQXFxuXFx0dmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApO1xcblxcdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxcblxcdFxcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xcblxcdCNlbmRpZlxcblxcdGRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yO1xcbiNlbmRpZlwiO1xuXG52YXIgbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgbWFwX3BhcnRpY2xlX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXFxuXFx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NQVBcXG5cXHRkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9BTFBIQU1BUFxcblxcdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXFxuXFx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG4jZW5kaWZcIjtcblxudmFyIG1ldGFsbmVzc21hcF9mcmFnbWVudCA9IFwiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXFxuXFx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcXG5cXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcXG4jZW5kaWZcIjtcblxudmFyIG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcIjtcblxudmFyIG1vcnBobm9ybWFsX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcXG5cXHRvYmplY3ROb3JtYWwgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xcblxcdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxcblxcdFxcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcXG5cXHRcXHRcXHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIG9iamVjdE5vcm1hbCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDEsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xcblxcdFxcdH1cXG5cXHQjZWxzZVxcblxcdFxcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XFxuXFx0XFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xcblxcdFxcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xcblxcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xcblxcdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxcblxcdFxcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBNT1JQSFRBUkdFVFNfQ09VTlQgXTtcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyREFycmF5IG1vcnBoVGFyZ2V0c1RleHR1cmU7XFxuXFx0XFx0dW5pZm9ybSB2ZWMyIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplO1xcblxcdFxcdHZlYzMgZ2V0TW9ycGgoIGNvbnN0IGluIGludCB2ZXJ0ZXhJbmRleCwgY29uc3QgaW4gaW50IG1vcnBoVGFyZ2V0SW5kZXgsIGNvbnN0IGluIGludCBvZmZzZXQsIGNvbnN0IGluIGludCBzdHJpZGUgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xcblxcdFxcdFxcdGZsb2F0IHkgPSBmbG9vciggdGV4ZWxJbmRleCAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnggKTtcXG5cXHRcXHRcXHRmbG9hdCB4ID0gdGV4ZWxJbmRleCAtIHkgKiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54O1xcblxcdFxcdFxcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcXG5cXHRcXHRcXHRyZXR1cm4gdGV4dHVyZSggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViApLnh5ejtcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG1vcnBodGFyZ2V0X3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcXG5cXHR0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XFxuXFx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXFxuXFx0XFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xcblxcdFxcdFxcdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xcblxcdFxcdFxcdFxcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcXG5cXHRcXHRcXHQjZWxzZVxcblxcdFxcdFxcdFxcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcXG5cXHRcXHRcXHQjZW5kaWZcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcXG5cXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcXG5cXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcXG5cXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcXG5cXHRcXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcXG5cXHRcXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcXG5cXHRcXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTtcXG5cXHRcXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcXG5cXHRcXHRcXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbF9mcmFnbWVudF9iZWdpbiA9IFwiZmxvYXQgZmFjZURpcmVjdGlvbiA9IGdsX0Zyb250RmFjaW5nID8gMS4wIDogLSAxLjA7XFxuI2lmZGVmIEZMQVRfU0hBREVEXFxuXFx0dmVjMyBmZHggPSB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XFxuXFx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XFxuXFx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XFxuI2Vsc2VcXG5cXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApO1xcblxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdHZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTtcXG5cXHRcXHR2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0XFx0XFx0Yml0YW5nZW50ID0gYml0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHQjaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIClcXG5cXHRcXHRcXHRtYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbmRpZlxcbiNlbmRpZlxcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7XCI7XG5cbnZhciBub3JtYWxfZnJhZ21lbnRfbWFwcyA9IFwiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxcblxcdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XFxuXFx0I2lmZGVmIEZMSVBfU0lERURcXG5cXHRcXHRub3JtYWwgPSAtIG5vcm1hbDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0bm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xcbiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxcblxcdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XFxuXFx0bWFwTi54eSAqPSBub3JtYWxTY2FsZTtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHRub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcXG5cXHQjZW5kaWZcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXFxuXFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7XFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfcGFyc19mcmFnbWVudCA9IFwiI2lmbmRlZiBGTEFUX1NIQURFRFxcblxcdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbF9wYXJzX3ZlcnRleCA9IFwiI2lmbmRlZiBGTEFUX1NIQURFRFxcblxcdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbF92ZXJ0ZXggPSBcIiNpZm5kZWYgRkxBVF9TSEFERURcXG5cXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcXG5cXHRcXHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTk9STUFMTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcblxcdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcXG4jZW5kaWZcXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXFxuXFx0dW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDtcXG4jZW5kaWZcXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxcblxcdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcXG5cXHRcXHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xcblxcdFxcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XFxuXFx0XFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcXG5cXHRcXHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xcblxcdFxcdHZlYzMgTiA9IHN1cmZfbm9ybTtcXG5cXHRcXHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xcblxcdFxcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XFxuXFx0XFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcXG5cXHRcXHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xcblxcdFxcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XFxuXFx0XFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XFxuXFx0XFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbiA9IFwiI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHR2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsO1xcbiNlbmRpZlwiO1xuXG52YXIgY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzID0gXCIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcXG5cXHR2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xcblxcdGNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xcblxcdCNlbHNlXFxuXFx0XFx0Y2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBjbGVhcmNvYXRfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcXG5cXHR1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XFxuI2VuZGlmXCI7XG5cbnZhciBvdXRwdXRfZnJhZ21lbnQgPSBcIiNpZmRlZiBPUEFRVUVcXG5kaWZmdXNlQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcbmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xO1xcbiNlbmRpZlxcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XCI7XG5cbnZhciBwYWNraW5nID0gXCJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XFxuXFx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XFxufVxcbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xcblxcdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xcbn1cXG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XFxuY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7XFxuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XFxudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XFxuXFx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XFxuXFx0ci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODtcXHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xcbn1cXG5mbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkge1xcblxcdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcXG59XFxudmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHtcXG5cXHR2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7XFxuXFx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcXG59XFxudmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkge1xcblxcdHJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApO1xcbn1cXG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XFxuXFx0cmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcXG59XFxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcXG59XFxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XFxuXFx0cmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XFxufVxcbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xcbn1cIjtcblxudmFyIHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQgPSBcIiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXFxuXFx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcIjtcblxudmFyIHByb2plY3RfdmVydGV4ID0gXCJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XFxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXFxuXFx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcXG4jZW5kaWZcXG5tdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcXG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1wiO1xuXG52YXIgZGl0aGVyaW5nX2ZyYWdtZW50ID0gXCIjaWZkZWYgRElUSEVSSU5HXFxuXFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xcbiNlbmRpZlwiO1xuXG52YXIgZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBESVRIRVJJTkdcXG5cXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcXG5cXHRcXHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XFxuXFx0XFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcXG5cXHRcXHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xcblxcdFxcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgcm91Z2huZXNzbWFwX2ZyYWdtZW50ID0gXCJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XFxuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcXG5cXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xcblxcdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xcbiNlbmRpZlwiO1xuXG52YXIgcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfU0hBRE9XTUFQXFxuXFx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XFxuXFx0XFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XFxuXFx0fVxcblxcdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xcblxcdFxcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcXG5cXHR9XFxuXFx0ZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7XFxuXFx0XFx0ZmxvYXQgb2NjbHVzaW9uID0gMS4wO1xcblxcdFxcdHZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7XFxuXFx0XFx0ZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTtcXG5cXHRcXHRpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkge1xcblxcdFxcdFxcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcXG5cXHRcXHRcXHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xcblxcdFxcdFxcdGZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7XFx0XFx0XFx0c29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7XFx0XFx0XFx0b2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBvY2NsdXNpb247XFxuXFx0fVxcblxcdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XFxuXFx0XFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xcblxcdFxcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xcblxcdFxcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhcztcXG5cXHRcXHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XFxuXFx0XFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xcblxcdFxcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcXG5cXHRcXHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xcblxcdFxcdGlmICggZnJ1c3R1bVRlc3QgKSB7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXFxuXFx0XFx0XFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0XFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XFxuXFx0XFx0XFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xcblxcdFxcdFxcdGZsb2F0IGR4MyA9IGR4MSAvIDIuMDtcXG5cXHRcXHRcXHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XFxuXFx0XFx0XFx0c2hhZG93ID0gKFxcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxcblxcdFxcdFxcdCkgKiAoIDEuMCAvIDE3LjAgKTtcXG5cXHRcXHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXFxuXFx0XFx0XFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0XFx0ZmxvYXQgZHggPSB0ZXhlbFNpemUueDtcXG5cXHRcXHRcXHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xcblxcdFxcdFxcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcXG5cXHRcXHRcXHR2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7XFxuXFx0XFx0XFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcXG5cXHRcXHRcXHRzaGFkb3cgPSAoXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueCApICtcXG5cXHRcXHRcXHRcXHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnggKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnkgKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi55ICkgK1xcblxcdFxcdFxcdFxcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHRcXHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcdGYueCApLFxcblxcdFxcdFxcdFxcdFxcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0XFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcdGYueCApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnkgKVxcblxcdFxcdFxcdCkgKiAoIDEuMCAvIDkuMCApO1xcblxcdFxcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXFxuXFx0XFx0XFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBzaGFkb3c7XFxuXFx0fVxcblxcdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcXG5cXHRcXHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcXG5cXHRcXHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcXG5cXHRcXHRhYnNWICo9IHNjYWxlVG9DdWJlO1xcblxcdFxcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcXG5cXHRcXHR2ZWMyIHBsYW5hciA9IHYueHk7XFxuXFx0XFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcXG5cXHRcXHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XFxuXFx0XFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xcblxcdFxcdFxcdGlmICggdi56ID4gMC4wIClcXG5cXHRcXHRcXHRcXHRwbGFuYXIueCA9IDQuMCAtIHYueDtcXG5cXHRcXHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xcblxcdFxcdFxcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XFxuXFx0XFx0XFx0cGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YO1xcblxcdFxcdH0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcXG5cXHRcXHRcXHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xcblxcdFxcdFxcdHBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTtcXG5cXHR9XFxuXFx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XFxuXFx0XFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcXG5cXHRcXHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcXG5cXHRcXHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1xcdFxcdGRwICs9IHNoYWRvd0JpYXM7XFxuXFx0XFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxcblxcdFxcdFxcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcXG5cXHRcXHRcXHRyZXR1cm4gKFxcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxcblxcdFxcdFxcdCkgKiAoIDEuMCAvIDkuMCApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgc2hhZG93bWFwX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hcF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0hBRE9XTUFQXFxuXFx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0dmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XFxuXFx0XFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xcblxcdFxcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XFxuXFx0XFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgc2hhZG93bWFza19wYXJzX2ZyYWdtZW50ID0gXCJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xcblxcdGZsb2F0IHNoYWRvdyA9IDEuMDtcXG5cXHQjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuXFx0cmV0dXJuIHNoYWRvdztcXG59XCI7XG5cbnZhciBza2luYmFzZV92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0tJTk5JTkdcXG5cXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcXG5cXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcXG5cXHRtYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTtcXG5cXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcXG4jZW5kaWZcIjtcblxudmFyIHNraW5uaW5nX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NLSU5OSU5HXFxuXFx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XFxuXFx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xcblxcdCNpZmRlZiBCT05FX1RFWFRVUkVcXG5cXHRcXHR1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTtcXG5cXHRcXHR1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7XFxuXFx0XFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xcblxcdFxcdFxcdGZsb2F0IGogPSBpICogNC4wO1xcblxcdFxcdFxcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xcblxcdFxcdFxcdGZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xcblxcdFxcdFxcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xcblxcdFxcdFxcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xcblxcdFxcdFxcdHkgPSBkeSAqICggeSArIDAuNSApO1xcblxcdFxcdFxcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcXG5cXHRcXHRcXHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0dmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApO1xcblxcdFxcdFxcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcXG5cXHRcXHRcXHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xcblxcdFxcdFxcdHJldHVybiBib25lO1xcblxcdFxcdH1cXG5cXHQjZWxzZVxcblxcdFxcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xcblxcdFxcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcXG5cXHRcXHRcXHRtYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdO1xcblxcdFxcdFxcdHJldHVybiBib25lO1xcblxcdFxcdH1cXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNraW5uaW5nX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdHZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XFxuXFx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XFxuXFx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XFxuXFx0c2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7XFxuXFx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XFxuXFx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XFxuXFx0dHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcXG4jZW5kaWZcIjtcblxudmFyIHNraW5ub3JtYWxfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NLSU5OSU5HXFxuXFx0bWF0NCBza2luTWF0cml4ID0gbWF0NCggMC4wICk7XFxuXFx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcXG5cXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC56ICogYm9uZU1hdFo7XFxuXFx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VztcXG5cXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcXG5cXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgc3BlY3VsYXJtYXBfZnJhZ21lbnQgPSBcImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XFxuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxcblxcdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xcblxcdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XFxuI2Vsc2VcXG5cXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xcbiNlbmRpZlwiO1xuXG52YXIgc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgdG9uZW1hcHBpbmdfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxcblxcdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xcbiNlbmRpZlwiO1xuXG52YXIgdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCA9IFwiI2lmbmRlZiBzYXR1cmF0ZVxcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTtcXG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XFxufVxcbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xcblxcdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xcbn1cXG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XFxuXFx0Y29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7XFxuXFx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcXG59XFxudmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHtcXG5cXHR2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNztcXG5cXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xcblxcdHJldHVybiBhIC8gYjtcXG59XFxudmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxcblxcdFxcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcXHRcXHR2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksXFxuXFx0XFx0dmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApXFxuXFx0KTtcXG5cXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxcblxcdFxcdHZlYzMoXHQxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcXHRcXHR2ZWMzKCAtMC41MzEwOCxcdDEuMTA4MTMsIC0wLjA3Mjc2ICksXFxuXFx0XFx0dmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LFx0MS4wNzYwMiApXFxuXFx0KTtcXG5cXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xcblxcdGNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7XFxuXFx0Y29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7XFxuXFx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XFxuXFx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciApO1xcbn1cXG52ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1cIjtcblxudmFyIHRyYW5zbWlzc2lvbl9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5cXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcXG5cXHRmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247XFxuXFx0ZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzO1xcblxcdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXFxuXFx0XFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXFxuXFx0XFx0dGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247XFxuXFx0dmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xcblxcdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdHZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbihcXG5cXHRcXHRuLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsXFxuXFx0XFx0cG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsXFxuXFx0XFx0YXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApO1xcblxcdHRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcXG5cXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcXG4jZW5kaWZcIjtcblxudmFyIHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcblxcdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xcblxcdHVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzO1xcblxcdHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZTtcXG5cXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcXG5cXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcXG5cXHQjZW5kaWZcXG5cXHR1bmlmb3JtIHZlYzIgdHJhbnNtaXNzaW9uU2FtcGxlclNpemU7XFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcXG5cXHR1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7XFxuXFx0dW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XFxuXFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcblxcdHZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7XFxuXFx0XFx0dmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7XFxuXFx0XFx0dmVjMyBtb2RlbFNjYWxlO1xcblxcdFxcdG1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApO1xcblxcdFxcdG1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApO1xcblxcdFxcdG1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApO1xcblxcdFxcdHJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7XFxuXFx0fVxcblxcdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xcblxcdFxcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xcblxcdH1cXG5cXHR2ZWM0IGdldFRyYW5zbWlzc2lvblNhbXBsZSggY29uc3QgaW4gdmVjMiBmcmFnQ29vcmQsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xcblxcdFxcdGZsb2F0IGZyYW1lYnVmZmVyTG9kID0gbG9nMiggdHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcXG5cXHRcXHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXFxuXFx0XFx0XFx0cmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHR2ZWMzIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIGZsb2F0IHRyYW5zbWlzc2lvbkRpc3RhbmNlLCBjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XFxuXFx0XFx0aWYgKCBhdHRlbnVhdGlvbkRpc3RhbmNlID09IDAuMCApIHtcXG5cXHRcXHRcXHRyZXR1cm4gcmFkaWFuY2U7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xcblxcdFxcdFxcdHZlYzMgdHJhbnNtaXR0YW5jZSA9IGV4cCggLSBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ICogdHJhbnNtaXNzaW9uRGlzdGFuY2UgKTtcXHRcXHRcXHRyZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xcblxcdFxcdH1cXG5cXHR9XFxuXFx0dmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvcixcXG5cXHRcXHRjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LFxcblxcdFxcdGNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcyxcXG5cXHRcXHRjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XFxuXFx0XFx0dmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApO1xcblxcdFxcdHZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5O1xcblxcdFxcdHZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTtcXG5cXHRcXHR2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudztcXG5cXHRcXHRyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDtcXG5cXHRcXHRyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDtcXG5cXHRcXHR2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7XFxuXFx0XFx0dmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApO1xcblxcdFxcdHZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApO1xcblxcdFxcdHJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgdXZfcGFyc19mcmFnbWVudCA9IFwiI2lmICggZGVmaW5lZCggVVNFX1VWICkgJiYgISBkZWZpbmVkKCBVVlNfVkVSVEVYX09OTFkgKSApXFxuXFx0dmFyeWluZyB2ZWMyIHZVdjtcXG4jZW5kaWZcIjtcblxudmFyIHV2X3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1VWXFxuXFx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxcblxcdFxcdHZlYzIgdlV2O1xcblxcdCNlbHNlXFxuXFx0XFx0dmFyeWluZyB2ZWMyIHZVdjtcXG5cXHQjZW5kaWZcXG5cXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XFxuI2VuZGlmXCI7XG5cbnZhciB1dl92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfVVZcXG5cXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xcbiNlbmRpZlwiO1xuXG52YXIgdXYyX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxcblxcdHZhcnlpbmcgdmVjMiB2VXYyO1xcbiNlbmRpZlwiO1xuXG52YXIgdXYyX3BhcnNfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcXG5cXHRhdHRyaWJ1dGUgdmVjMiB1djI7XFxuXFx0dmFyeWluZyB2ZWMyIHZVdjI7XFxuXFx0dW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTtcXG4jZW5kaWZcIjtcblxudmFyIHV2Ml92ZXJ0ZXggPSBcIiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxcblxcdHZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7XFxuI2VuZGlmXCI7XG5cbnZhciB3b3JsZHBvc192ZXJ0ZXggPSBcIiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcXG5cXHR2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XFxuXFx0I2lmZGVmIFVTRV9JTlNUQU5DSU5HXFxuXFx0XFx0d29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHR3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xcbiNlbmRpZlwiO1xuXG5jb25zdCB2ZXJ0ZXgkZyA9IFwidmFyeWluZyB2ZWMyIHZVdjtcXG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XFxudm9pZCBtYWluKCkge1xcblxcdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcXG59XCI7XG5jb25zdCBmcmFnbWVudCRnID0gXCJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XFxudmFyeWluZyB2ZWMyIHZVdjtcXG52b2lkIG1haW4oKSB7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGYgPSBcInZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG52b2lkIG1haW4oKSB7XFxuXFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHRnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udztcXG59XCI7XG5jb25zdCBmcmFnbWVudCRmID0gXCIjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdHZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHRnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjtcXG5cXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGUgPSBcIiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXFxuXFx0XFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkZSA9IFwiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxcblxcdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XFxuXFx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxcblxcdFxcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHRmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7XFxuXFx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxcblxcdFxcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xcblxcdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxcblxcdFxcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xcblxcdCNlbmRpZlxcbn1cIjtcblxuY29uc3QgdmVydGV4JGQgPSBcIiNkZWZpbmUgRElTVEFOQ0VcXG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxcblxcdFxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcXG59XCI7XG5jb25zdCBmcmFnbWVudCRkID0gXCIjZGVmaW5lIERJU1RBTkNFXFxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XFxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluICgpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XFxuXFx0ZGlzdCA9ICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xcblxcdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xcbn1cIjtcblxuY29uc3QgdmVydGV4JGMgPSBcInZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG52b2lkIG1haW4oKSB7XFxuXFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCRjID0gXCJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XFxudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XFxuXFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGIgPSBcInVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcXG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCRiID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcXG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcXG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xcblxcdFxcdGRpc2NhcmQ7XFxuXFx0fVxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGEgPSBcIiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx1djJfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApXFxuXFx0XFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JGEgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHQjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0XFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDkgPSBcIiNkZWZpbmUgTEFNQkVSVFxcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcXG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xcblxcdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDkgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XFxuXFx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrO1xcblxcdCNlbHNlXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTtcXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDggPSBcIiNkZWZpbmUgTUFUQ0FQXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDggPSBcIiNkZWZpbmUgTUFUQ0FQXFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDtcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcXG5cXHR2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7XFxuXFx0dmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTtcXG5cXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XFxuXFx0I2lmZGVmIFVTRV9NQVRDQVBcXG5cXHRcXHR2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNyA9IFwiI2RlZmluZSBOT1JNQUxcXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxcblxcdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG4jZW5kaWZcXG59XCI7XG5jb25zdCBmcmFnbWVudCQ3ID0gXCIjZGVmaW5lIE5PUk1BTFxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxcblxcdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTtcXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ2ID0gXCIjZGVmaW5lIFBIT05HXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkNiA9IFwiI2RlZmluZSBQSE9OR1xcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XFxudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNSA9IFwiI2RlZmluZSBTVEFOREFSRFxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcblxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxuI2VuZGlmXFxufVwiO1xuY29uc3QgZnJhZ21lbnQkNSA9IFwiI2RlZmluZSBTVEFOREFSRFxcbiNpZmRlZiBQSFlTSUNBTFxcblxcdCNkZWZpbmUgSU9SXFxuXFx0I2RlZmluZSBTUEVDVUxBUlxcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2lmZGVmIElPUlxcblxcdHVuaWZvcm0gZmxvYXQgaW9yO1xcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUlxcblxcdHVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7XFxuXFx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XFxuXFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcXG5cXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1NIRUVOXFxuXFx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XFxuXFx0dW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzcztcXG5cXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xcblxcdHZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcXG5cXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XFxuXFx0I2lmZGVmIFVTRV9TSEVFTlxcblxcdFxcdGZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApO1xcblxcdFxcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xcblxcdFxcdHZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7XFxuXFx0XFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNCA9IFwiI2RlZmluZSBUT09OXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx1djJfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDQgPSBcIiNkZWZpbmUgVE9PTlxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c190b29uX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDMgPSBcInVuaWZvcm0gZmxvYXQgc2l6ZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcXG5cXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxcblxcdFxcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcXG5cXHRcXHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKj0gKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDMgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkMiA9IFwiI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCQyID0gXCJ1bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkMSA9IFwidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XFxuXFx0dmVjMiBzY2FsZTtcXG5cXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcXG5cXHRzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcXG5cXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cXG5cXHRcXHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XFxuXFx0XFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XFxuXFx0I2VuZGlmXFxuXFx0dmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcXG5cXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcXG5cXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XFxuXFx0cm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xcblxcdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xcblxcdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCQxID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgU2hhZGVyQ2h1bmsgPSB7XG5cdGFscGhhbWFwX2ZyYWdtZW50OiBhbHBoYW1hcF9mcmFnbWVudCxcblx0YWxwaGFtYXBfcGFyc19mcmFnbWVudDogYWxwaGFtYXBfcGFyc19mcmFnbWVudCxcblx0YWxwaGF0ZXN0X2ZyYWdtZW50OiBhbHBoYXRlc3RfZnJhZ21lbnQsXG5cdGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OiBhbHBoYXRlc3RfcGFyc19mcmFnbWVudCxcblx0YW9tYXBfZnJhZ21lbnQ6IGFvbWFwX2ZyYWdtZW50LFxuXHRhb21hcF9wYXJzX2ZyYWdtZW50OiBhb21hcF9wYXJzX2ZyYWdtZW50LFxuXHRiZWdpbl92ZXJ0ZXg6IGJlZ2luX3ZlcnRleCxcblx0YmVnaW5ub3JtYWxfdmVydGV4OiBiZWdpbm5vcm1hbF92ZXJ0ZXgsXG5cdGJzZGZzOiBic2Rmcyxcblx0YnVtcG1hcF9wYXJzX2ZyYWdtZW50OiBidW1wbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQsXG5cdGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4LFxuXHRjbGlwcGluZ19wbGFuZXNfdmVydGV4OiBjbGlwcGluZ19wbGFuZXNfdmVydGV4LFxuXHRjb2xvcl9mcmFnbWVudDogY29sb3JfZnJhZ21lbnQsXG5cdGNvbG9yX3BhcnNfZnJhZ21lbnQ6IGNvbG9yX3BhcnNfZnJhZ21lbnQsXG5cdGNvbG9yX3BhcnNfdmVydGV4OiBjb2xvcl9wYXJzX3ZlcnRleCxcblx0Y29sb3JfdmVydGV4OiBjb2xvcl92ZXJ0ZXgsXG5cdGNvbW1vbjogY29tbW9uLFxuXHRjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudCxcblx0ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IGRlZmF1bHRub3JtYWxfdmVydGV4LFxuXHRkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleCxcblx0ZGlzcGxhY2VtZW50bWFwX3ZlcnRleDogZGlzcGxhY2VtZW50bWFwX3ZlcnRleCxcblx0ZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IGVtaXNzaXZlbWFwX2ZyYWdtZW50LFxuXHRlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50LFxuXHRlbmNvZGluZ3NfZnJhZ21lbnQ6IGVuY29kaW5nc19mcmFnbWVudCxcblx0ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IGVuY29kaW5nc19wYXJzX2ZyYWdtZW50LFxuXHRlbnZtYXBfZnJhZ21lbnQ6IGVudm1hcF9mcmFnbWVudCxcblx0ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX3BhcnNfdmVydGV4OiBlbnZtYXBfcGFyc192ZXJ0ZXgsXG5cdGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX3ZlcnRleDogZW52bWFwX3ZlcnRleCxcblx0Zm9nX3ZlcnRleDogZm9nX3ZlcnRleCxcblx0Zm9nX3BhcnNfdmVydGV4OiBmb2dfcGFyc192ZXJ0ZXgsXG5cdGZvZ19mcmFnbWVudDogZm9nX2ZyYWdtZW50LFxuXHRmb2dfcGFyc19mcmFnbWVudDogZm9nX3BhcnNfZnJhZ21lbnQsXG5cdGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGxpZ2h0bWFwX2ZyYWdtZW50OiBsaWdodG1hcF9mcmFnbWVudCxcblx0bGlnaHRtYXBfcGFyc19mcmFnbWVudDogbGlnaHRtYXBfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX2xhbWJlcnRfdmVydGV4OiBsaWdodHNfbGFtYmVydF92ZXJ0ZXgsXG5cdGxpZ2h0c19wYXJzX2JlZ2luOiBsaWdodHNfcGFyc19iZWdpbixcblx0bGlnaHRzX3Rvb25fZnJhZ21lbnQ6IGxpZ2h0c190b29uX2ZyYWdtZW50LFxuXHRsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiBsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IGxpZ2h0c19waG9uZ19mcmFnbWVudCxcblx0bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudCxcblx0bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfZnJhZ21lbnRfYmVnaW46IGxpZ2h0c19mcmFnbWVudF9iZWdpbixcblx0bGlnaHRzX2ZyYWdtZW50X21hcHM6IGxpZ2h0c19mcmFnbWVudF9tYXBzLFxuXHRsaWdodHNfZnJhZ21lbnRfZW5kOiBsaWdodHNfZnJhZ21lbnRfZW5kLFxuXHRsb2dkZXB0aGJ1Zl9mcmFnbWVudDogbG9nZGVwdGhidWZfZnJhZ21lbnQsXG5cdGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQsXG5cdGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleCxcblx0bG9nZGVwdGhidWZfdmVydGV4OiBsb2dkZXB0aGJ1Zl92ZXJ0ZXgsXG5cdG1hcF9mcmFnbWVudDogbWFwX2ZyYWdtZW50LFxuXHRtYXBfcGFyc19mcmFnbWVudDogbWFwX3BhcnNfZnJhZ21lbnQsXG5cdG1hcF9wYXJ0aWNsZV9mcmFnbWVudDogbWFwX3BhcnRpY2xlX2ZyYWdtZW50LFxuXHRtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDogbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQsXG5cdG1ldGFsbmVzc21hcF9mcmFnbWVudDogbWV0YWxuZXNzbWFwX2ZyYWdtZW50LFxuXHRtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDogbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQsXG5cdG1vcnBobm9ybWFsX3ZlcnRleDogbW9ycGhub3JtYWxfdmVydGV4LFxuXHRtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDogbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXgsXG5cdG1vcnBodGFyZ2V0X3ZlcnRleDogbW9ycGh0YXJnZXRfdmVydGV4LFxuXHRub3JtYWxfZnJhZ21lbnRfYmVnaW46IG5vcm1hbF9mcmFnbWVudF9iZWdpbixcblx0bm9ybWFsX2ZyYWdtZW50X21hcHM6IG5vcm1hbF9mcmFnbWVudF9tYXBzLFxuXHRub3JtYWxfcGFyc19mcmFnbWVudDogbm9ybWFsX3BhcnNfZnJhZ21lbnQsXG5cdG5vcm1hbF9wYXJzX3ZlcnRleDogbm9ybWFsX3BhcnNfdmVydGV4LFxuXHRub3JtYWxfdmVydGV4OiBub3JtYWxfdmVydGV4LFxuXHRub3JtYWxtYXBfcGFyc19mcmFnbWVudDogbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4sXG5cdGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczogY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzLFxuXHRjbGVhcmNvYXRfcGFyc19mcmFnbWVudDogY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQsXG5cdG91dHB1dF9mcmFnbWVudDogb3V0cHV0X2ZyYWdtZW50LFxuXHRwYWNraW5nOiBwYWNraW5nLFxuXHRwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50LFxuXHRwcm9qZWN0X3ZlcnRleDogcHJvamVjdF92ZXJ0ZXgsXG5cdGRpdGhlcmluZ19mcmFnbWVudDogZGl0aGVyaW5nX2ZyYWdtZW50LFxuXHRkaXRoZXJpbmdfcGFyc19mcmFnbWVudDogZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQsXG5cdHJvdWdobmVzc21hcF9mcmFnbWVudDogcm91Z2huZXNzbWFwX2ZyYWdtZW50LFxuXHRyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDogcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQsXG5cdHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCxcblx0c2hhZG93bWFwX3BhcnNfdmVydGV4OiBzaGFkb3dtYXBfcGFyc192ZXJ0ZXgsXG5cdHNoYWRvd21hcF92ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0ZXgsXG5cdHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDogc2hhZG93bWFza19wYXJzX2ZyYWdtZW50LFxuXHRza2luYmFzZV92ZXJ0ZXg6IHNraW5iYXNlX3ZlcnRleCxcblx0c2tpbm5pbmdfcGFyc192ZXJ0ZXg6IHNraW5uaW5nX3BhcnNfdmVydGV4LFxuXHRza2lubmluZ192ZXJ0ZXg6IHNraW5uaW5nX3ZlcnRleCxcblx0c2tpbm5vcm1hbF92ZXJ0ZXg6IHNraW5ub3JtYWxfdmVydGV4LFxuXHRzcGVjdWxhcm1hcF9mcmFnbWVudDogc3BlY3VsYXJtYXBfZnJhZ21lbnQsXG5cdHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQsXG5cdHRvbmVtYXBwaW5nX2ZyYWdtZW50OiB0b25lbWFwcGluZ19mcmFnbWVudCxcblx0dG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDogdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCxcblx0dHJhbnNtaXNzaW9uX2ZyYWdtZW50OiB0cmFuc21pc3Npb25fZnJhZ21lbnQsXG5cdHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50OiB0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudCxcblx0dXZfcGFyc19mcmFnbWVudDogdXZfcGFyc19mcmFnbWVudCxcblx0dXZfcGFyc192ZXJ0ZXg6IHV2X3BhcnNfdmVydGV4LFxuXHR1dl92ZXJ0ZXg6IHV2X3ZlcnRleCxcblx0dXYyX3BhcnNfZnJhZ21lbnQ6IHV2Ml9wYXJzX2ZyYWdtZW50LFxuXHR1djJfcGFyc192ZXJ0ZXg6IHV2Ml9wYXJzX3ZlcnRleCxcblx0dXYyX3ZlcnRleDogdXYyX3ZlcnRleCxcblx0d29ybGRwb3NfdmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgsXG5cdGJhY2tncm91bmRfdmVydDogdmVydGV4JGcsXG5cdGJhY2tncm91bmRfZnJhZzogZnJhZ21lbnQkZyxcblx0Y3ViZV92ZXJ0OiB2ZXJ0ZXgkZixcblx0Y3ViZV9mcmFnOiBmcmFnbWVudCRmLFxuXHRkZXB0aF92ZXJ0OiB2ZXJ0ZXgkZSxcblx0ZGVwdGhfZnJhZzogZnJhZ21lbnQkZSxcblx0ZGlzdGFuY2VSR0JBX3ZlcnQ6IHZlcnRleCRkLFxuXHRkaXN0YW5jZVJHQkFfZnJhZzogZnJhZ21lbnQkZCxcblx0ZXF1aXJlY3RfdmVydDogdmVydGV4JGMsXG5cdGVxdWlyZWN0X2ZyYWc6IGZyYWdtZW50JGMsXG5cdGxpbmVkYXNoZWRfdmVydDogdmVydGV4JGIsXG5cdGxpbmVkYXNoZWRfZnJhZzogZnJhZ21lbnQkYixcblx0bWVzaGJhc2ljX3ZlcnQ6IHZlcnRleCRhLFxuXHRtZXNoYmFzaWNfZnJhZzogZnJhZ21lbnQkYSxcblx0bWVzaGxhbWJlcnRfdmVydDogdmVydGV4JDksXG5cdG1lc2hsYW1iZXJ0X2ZyYWc6IGZyYWdtZW50JDksXG5cdG1lc2htYXRjYXBfdmVydDogdmVydGV4JDgsXG5cdG1lc2htYXRjYXBfZnJhZzogZnJhZ21lbnQkOCxcblx0bWVzaG5vcm1hbF92ZXJ0OiB2ZXJ0ZXgkNyxcblx0bWVzaG5vcm1hbF9mcmFnOiBmcmFnbWVudCQ3LFxuXHRtZXNocGhvbmdfdmVydDogdmVydGV4JDYsXG5cdG1lc2hwaG9uZ19mcmFnOiBmcmFnbWVudCQ2LFxuXHRtZXNocGh5c2ljYWxfdmVydDogdmVydGV4JDUsXG5cdG1lc2hwaHlzaWNhbF9mcmFnOiBmcmFnbWVudCQ1LFxuXHRtZXNodG9vbl92ZXJ0OiB2ZXJ0ZXgkNCxcblx0bWVzaHRvb25fZnJhZzogZnJhZ21lbnQkNCxcblx0cG9pbnRzX3ZlcnQ6IHZlcnRleCQzLFxuXHRwb2ludHNfZnJhZzogZnJhZ21lbnQkMyxcblx0c2hhZG93X3ZlcnQ6IHZlcnRleCQyLFxuXHRzaGFkb3dfZnJhZzogZnJhZ21lbnQkMixcblx0c3ByaXRlX3ZlcnQ6IHZlcnRleCQxLFxuXHRzcHJpdGVfZnJhZzogZnJhZ21lbnQkMVxufTtcblxuLyoqXG4gKiBVbmlmb3JtcyBsaWJyYXJ5IGZvciBzaGFyZWQgd2ViZ2wgc2hhZGVyc1xuICovXG5cbmNvbnN0IFVuaWZvcm1zTGliID0ge1xuXHRjb21tb246IHtcblx0XHRkaWZmdXNlOiB7XG5cdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4ZmZmZmZmKVxuXHRcdH0sXG5cdFx0b3BhY2l0eToge1xuXHRcdFx0dmFsdWU6IDEuMFxuXHRcdH0sXG5cdFx0bWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0dXZUcmFuc2Zvcm06IHtcblx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0fSxcblx0XHR1djJUcmFuc2Zvcm06IHtcblx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0fSxcblx0XHRhbHBoYU1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGFscGhhVGVzdDoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9XG5cdH0sXG5cdHNwZWN1bGFybWFwOiB7XG5cdFx0c3BlY3VsYXJNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fVxuXHR9LFxuXHRlbnZtYXA6IHtcblx0XHRlbnZNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRmbGlwRW52TWFwOiB7XG5cdFx0XHR2YWx1ZTogLTFcblx0XHR9LFxuXHRcdHJlZmxlY3Rpdml0eToge1xuXHRcdFx0dmFsdWU6IDEuMFxuXHRcdH0sXG5cdFx0Ly8gYmFzaWMsIGxhbWJlcnQsIHBob25nXG5cdFx0aW9yOiB7XG5cdFx0XHR2YWx1ZTogMS41XG5cdFx0fSxcblx0XHQvLyBzdGFuZGFyZCwgcGh5c2ljYWxcblx0XHRyZWZyYWN0aW9uUmF0aW86IHtcblx0XHRcdHZhbHVlOiAwLjk4XG5cdFx0fVxuXHR9LFxuXHRhb21hcDoge1xuXHRcdGFvTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YW9NYXBJbnRlbnNpdHk6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fVxuXHR9LFxuXHRsaWdodG1hcDoge1xuXHRcdGxpZ2h0TWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0bGlnaHRNYXBJbnRlbnNpdHk6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fVxuXHR9LFxuXHRlbWlzc2l2ZW1hcDoge1xuXHRcdGVtaXNzaXZlTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0YnVtcG1hcDoge1xuXHRcdGJ1bXBNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRidW1wU2NhbGU6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fVxuXHR9LFxuXHRub3JtYWxtYXA6IHtcblx0XHRub3JtYWxNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRub3JtYWxTY2FsZToge1xuXHRcdFx0dmFsdWU6IG5ldyBWZWN0b3IyKDEsIDEpXG5cdFx0fVxuXHR9LFxuXHRkaXNwbGFjZW1lbnRtYXA6IHtcblx0XHRkaXNwbGFjZW1lbnRNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRkaXNwbGFjZW1lbnRTY2FsZToge1xuXHRcdFx0dmFsdWU6IDFcblx0XHR9LFxuXHRcdGRpc3BsYWNlbWVudEJpYXM6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fVxuXHR9LFxuXHRyb3VnaG5lc3NtYXA6IHtcblx0XHRyb3VnaG5lc3NNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fVxuXHR9LFxuXHRtZXRhbG5lc3NtYXA6IHtcblx0XHRtZXRhbG5lc3NNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fVxuXHR9LFxuXHRncmFkaWVudG1hcDoge1xuXHRcdGdyYWRpZW50TWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0Zm9nOiB7XG5cdFx0Zm9nRGVuc2l0eToge1xuXHRcdFx0dmFsdWU6IDAuMDAwMjVcblx0XHR9LFxuXHRcdGZvZ05lYXI6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fSxcblx0XHRmb2dGYXI6IHtcblx0XHRcdHZhbHVlOiAyMDAwXG5cdFx0fSxcblx0XHRmb2dDb2xvcjoge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweGZmZmZmZilcblx0XHR9XG5cdH0sXG5cdGxpZ2h0czoge1xuXHRcdGFtYmllbnRMaWdodENvbG9yOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdGxpZ2h0UHJvYmU6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0ZGlyZWN0aW9uYWxMaWdodHM6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0ZGlyZWN0aW9uOiB7fSxcblx0XHRcdFx0Y29sb3I6IHt9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkaXJlY3Rpb25hbExpZ2h0U2hhZG93czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRzaGFkb3dCaWFzOiB7fSxcblx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczoge30sXG5cdFx0XHRcdHNoYWRvd1JhZGl1czoge30sXG5cdFx0XHRcdHNoYWRvd01hcFNpemU6IHt9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvd01hcDoge1xuXHRcdFx0dmFsdWU6IFtdXG5cdFx0fSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDoge1xuXHRcdFx0dmFsdWU6IFtdXG5cdFx0fSxcblx0XHRzcG90TGlnaHRzOiB7XG5cdFx0XHR2YWx1ZTogW10sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdGNvbG9yOiB7fSxcblx0XHRcdFx0cG9zaXRpb246IHt9LFxuXHRcdFx0XHRkaXJlY3Rpb246IHt9LFxuXHRcdFx0XHRkaXN0YW5jZToge30sXG5cdFx0XHRcdGNvbmVDb3M6IHt9LFxuXHRcdFx0XHRwZW51bWJyYUNvczoge30sXG5cdFx0XHRcdGRlY2F5OiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c3BvdExpZ2h0U2hhZG93czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRzaGFkb3dCaWFzOiB7fSxcblx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczoge30sXG5cdFx0XHRcdHNoYWRvd1JhZGl1czoge30sXG5cdFx0XHRcdHNoYWRvd01hcFNpemU6IHt9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzcG90U2hhZG93TWFwOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdHNwb3RTaGFkb3dNYXRyaXg6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0cG9pbnRMaWdodHM6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0Y29sb3I6IHt9LFxuXHRcdFx0XHRwb3NpdGlvbjoge30sXG5cdFx0XHRcdGRlY2F5OiB7fSxcblx0XHRcdFx0ZGlzdGFuY2U6IHt9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRwb2ludExpZ2h0U2hhZG93czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRzaGFkb3dCaWFzOiB7fSxcblx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczoge30sXG5cdFx0XHRcdHNoYWRvd1JhZGl1czoge30sXG5cdFx0XHRcdHNoYWRvd01hcFNpemU6IHt9LFxuXHRcdFx0XHRzaGFkb3dDYW1lcmFOZWFyOiB7fSxcblx0XHRcdFx0c2hhZG93Q2FtZXJhRmFyOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cG9pbnRTaGFkb3dNYXA6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0cG9pbnRTaGFkb3dNYXRyaXg6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0aGVtaXNwaGVyZUxpZ2h0czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRkaXJlY3Rpb246IHt9LFxuXHRcdFx0XHRza3lDb2xvcjoge30sXG5cdFx0XHRcdGdyb3VuZENvbG9yOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gVE9ETyAoYWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgQlJERiBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gZXhhbXBsZSB0byBtYWluIHNyY1xuXHRcdHJlY3RBcmVhTGlnaHRzOiB7XG5cdFx0XHR2YWx1ZTogW10sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdGNvbG9yOiB7fSxcblx0XHRcdFx0cG9zaXRpb246IHt9LFxuXHRcdFx0XHR3aWR0aDoge30sXG5cdFx0XHRcdGhlaWdodDoge31cblx0XHRcdH1cblx0XHR9LFxuXHRcdGx0Y18xOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0bHRjXzI6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fVxuXHR9LFxuXHRwb2ludHM6IHtcblx0XHRkaWZmdXNlOiB7XG5cdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4ZmZmZmZmKVxuXHRcdH0sXG5cdFx0b3BhY2l0eToge1xuXHRcdFx0dmFsdWU6IDEuMFxuXHRcdH0sXG5cdFx0c2l6ZToge1xuXHRcdFx0dmFsdWU6IDEuMFxuXHRcdH0sXG5cdFx0c2NhbGU6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdG1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGFscGhhTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YWxwaGFUZXN0OiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cdFx0dXZUcmFuc2Zvcm06IHtcblx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0fVxuXHR9LFxuXHRzcHJpdGU6IHtcblx0XHRkaWZmdXNlOiB7XG5cdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4ZmZmZmZmKVxuXHRcdH0sXG5cdFx0b3BhY2l0eToge1xuXHRcdFx0dmFsdWU6IDEuMFxuXHRcdH0sXG5cdFx0Y2VudGVyOiB7XG5cdFx0XHR2YWx1ZTogbmV3IFZlY3RvcjIoMC41LCAwLjUpXG5cdFx0fSxcblx0XHRyb3RhdGlvbjoge1xuXHRcdFx0dmFsdWU6IDAuMFxuXHRcdH0sXG5cdFx0bWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YWxwaGFNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRhbHBoYVRlc3Q6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fSxcblx0XHR1dlRyYW5zZm9ybToge1xuXHRcdFx0dmFsdWU6IG5ldyBNYXRyaXgzKClcblx0XHR9XG5cdH1cbn07XG5cbmNvbnN0IFNoYWRlckxpYiA9IHtcblx0YmFzaWM6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCwgVW5pZm9ybXNMaWIuZW52bWFwLCBVbmlmb3Jtc0xpYi5hb21hcCwgVW5pZm9ybXNMaWIubGlnaHRtYXAsIFVuaWZvcm1zTGliLmZvZ10pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGJhc2ljX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY19mcmFnXG5cdH0sXG5cdGxhbWJlcnQ6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCwgVW5pZm9ybXNMaWIuZW52bWFwLCBVbmlmb3Jtc0xpYi5hb21hcCwgVW5pZm9ybXNMaWIubGlnaHRtYXAsIFVuaWZvcm1zTGliLmVtaXNzaXZlbWFwLCBVbmlmb3Jtc0xpYi5mb2csIFVuaWZvcm1zTGliLmxpZ2h0cywge1xuXHRcdFx0ZW1pc3NpdmU6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweDAwMDAwMClcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobGFtYmVydF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobGFtYmVydF9mcmFnXG5cdH0sXG5cdHBob25nOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsIFVuaWZvcm1zTGliLmVudm1hcCwgVW5pZm9ybXNMaWIuYW9tYXAsIFVuaWZvcm1zTGliLmxpZ2h0bWFwLCBVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCwgVW5pZm9ybXNMaWIuYnVtcG1hcCwgVW5pZm9ybXNMaWIubm9ybWFsbWFwLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIFVuaWZvcm1zTGliLmZvZywgVW5pZm9ybXNMaWIubGlnaHRzLCB7XG5cdFx0XHRlbWlzc2l2ZToge1xuXHRcdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4MDAwMDAwKVxuXHRcdFx0fSxcblx0XHRcdHNwZWN1bGFyOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgxMTExMTEpXG5cdFx0XHR9LFxuXHRcdFx0c2hpbmluZXNzOiB7XG5cdFx0XHRcdHZhbHVlOiAzMFxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaG9uZ192ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfZnJhZ1xuXHR9LFxuXHRzdGFuZGFyZDoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLmVudm1hcCwgVW5pZm9ybXNMaWIuYW9tYXAsIFVuaWZvcm1zTGliLmxpZ2h0bWFwLCBVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCwgVW5pZm9ybXNMaWIuYnVtcG1hcCwgVW5pZm9ybXNMaWIubm9ybWFsbWFwLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIFVuaWZvcm1zTGliLnJvdWdobmVzc21hcCwgVW5pZm9ybXNMaWIubWV0YWxuZXNzbWFwLCBVbmlmb3Jtc0xpYi5mb2csIFVuaWZvcm1zTGliLmxpZ2h0cywge1xuXHRcdFx0ZW1pc3NpdmU6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweDAwMDAwMClcblx0XHRcdH0sXG5cdFx0XHRyb3VnaG5lc3M6IHtcblx0XHRcdFx0dmFsdWU6IDEuMFxuXHRcdFx0fSxcblx0XHRcdG1ldGFsbmVzczoge1xuXHRcdFx0XHR2YWx1ZTogMC4wXG5cdFx0XHR9LFxuXHRcdFx0ZW52TWFwSW50ZW5zaXR5OiB7XG5cdFx0XHRcdHZhbHVlOiAxXG5cdFx0XHR9IC8vIHRlbXBvcmFyeVxuXG5cdFx0fV0pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF9mcmFnXG5cdH0sXG5cdHRvb246IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5hb21hcCwgVW5pZm9ybXNMaWIubGlnaHRtYXAsIFVuaWZvcm1zTGliLmVtaXNzaXZlbWFwLCBVbmlmb3Jtc0xpYi5idW1wbWFwLCBVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsIFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCwgVW5pZm9ybXNMaWIuZ3JhZGllbnRtYXAsIFVuaWZvcm1zTGliLmZvZywgVW5pZm9ybXNMaWIubGlnaHRzLCB7XG5cdFx0XHRlbWlzc2l2ZToge1xuXHRcdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4MDAwMDAwKVxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2h0b29uX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2h0b29uX2ZyYWdcblx0fSxcblx0bWF0Y2FwOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuYnVtcG1hcCwgVW5pZm9ybXNMaWIubm9ybWFsbWFwLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIFVuaWZvcm1zTGliLmZvZywge1xuXHRcdFx0bWF0Y2FwOiB7XG5cdFx0XHRcdHZhbHVlOiBudWxsXG5cdFx0XHR9XG5cdFx0fV0pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaG1hdGNhcF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobWF0Y2FwX2ZyYWdcblx0fSxcblx0cG9pbnRzOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLnBvaW50cywgVW5pZm9ybXNMaWIuZm9nXSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5wb2ludHNfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRzX2ZyYWdcblx0fSxcblx0ZGFzaGVkOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuZm9nLCB7XG5cdFx0XHRzY2FsZToge1xuXHRcdFx0XHR2YWx1ZTogMVxuXHRcdFx0fSxcblx0XHRcdGRhc2hTaXplOiB7XG5cdFx0XHRcdHZhbHVlOiAxXG5cdFx0XHR9LFxuXHRcdFx0dG90YWxTaXplOiB7XG5cdFx0XHRcdHZhbHVlOiAyXG5cdFx0XHR9XG5cdFx0fV0pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hlZF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5saW5lZGFzaGVkX2ZyYWdcblx0fSxcblx0ZGVwdGg6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXBdKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmRlcHRoX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmRlcHRoX2ZyYWdcblx0fSxcblx0bm9ybWFsOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuYnVtcG1hcCwgVW5pZm9ybXNMaWIubm9ybWFsbWFwLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIHtcblx0XHRcdG9wYWNpdHk6IHtcblx0XHRcdFx0dmFsdWU6IDEuMFxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hub3JtYWxfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaG5vcm1hbF9mcmFnXG5cdH0sXG5cdHNwcml0ZToge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5zcHJpdGUsIFVuaWZvcm1zTGliLmZvZ10pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuc3ByaXRlX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnNwcml0ZV9mcmFnXG5cdH0sXG5cdGJhY2tncm91bmQ6IHtcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0dXZUcmFuc2Zvcm06IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBNYXRyaXgzKClcblx0XHRcdH0sXG5cdFx0XHR0MkQ6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH1cblx0XHR9LFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuYmFja2dyb3VuZF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5iYWNrZ3JvdW5kX2ZyYWdcblx0fSxcblxuXHQvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXHRDdWJlIG1hcCBzaGFkZXJcblx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0Y3ViZToge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5lbnZtYXAsIHtcblx0XHRcdG9wYWNpdHk6IHtcblx0XHRcdFx0dmFsdWU6IDEuMFxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmN1YmVfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuY3ViZV9mcmFnXG5cdH0sXG5cdGVxdWlyZWN0OiB7XG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdHRFcXVpcmVjdDoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF9mcmFnXG5cdH0sXG5cdGRpc3RhbmNlUkdCQToge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCwge1xuXHRcdFx0cmVmZXJlbmNlUG9zaXRpb246IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBWZWN0b3IzKClcblx0XHRcdH0sXG5cdFx0XHRuZWFyRGlzdGFuY2U6IHtcblx0XHRcdFx0dmFsdWU6IDFcblx0XHRcdH0sXG5cdFx0XHRmYXJEaXN0YW5jZToge1xuXHRcdFx0XHR2YWx1ZTogMTAwMFxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmRpc3RhbmNlUkdCQV92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5kaXN0YW5jZVJHQkFfZnJhZ1xuXHR9LFxuXHRzaGFkb3c6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIubGlnaHRzLCBVbmlmb3Jtc0xpYi5mb2csIHtcblx0XHRcdGNvbG9yOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgwMDAwMClcblx0XHRcdH0sXG5cdFx0XHRvcGFjaXR5OiB7XG5cdFx0XHRcdHZhbHVlOiAxLjBcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuc2hhZG93X2ZyYWdcblx0fVxufTtcblNoYWRlckxpYi5waHlzaWNhbCA9IHtcblx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1NoYWRlckxpYi5zdGFuZGFyZC51bmlmb3Jtcywge1xuXHRcdGNsZWFyY29hdDoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdGNsZWFyY29hdE1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGNsZWFyY29hdFJvdWdobmVzczoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdGNsZWFyY29hdFJvdWdobmVzc01hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGNsZWFyY29hdE5vcm1hbFNjYWxlOiB7XG5cdFx0XHR2YWx1ZTogbmV3IFZlY3RvcjIoMSwgMSlcblx0XHR9LFxuXHRcdGNsZWFyY29hdE5vcm1hbE1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHNoZWVuOiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cdFx0c2hlZW5Db2xvcjoge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweDAwMDAwMClcblx0XHR9LFxuXHRcdHNoZWVuQ29sb3JNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRzaGVlblJvdWdobmVzczoge1xuXHRcdFx0dmFsdWU6IDFcblx0XHR9LFxuXHRcdHNoZWVuUm91Z2huZXNzTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0dHJhbnNtaXNzaW9uOiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cdFx0dHJhbnNtaXNzaW9uTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0dHJhbnNtaXNzaW9uU2FtcGxlclNpemU6IHtcblx0XHRcdHZhbHVlOiBuZXcgVmVjdG9yMigpXG5cdFx0fSxcblx0XHR0cmFuc21pc3Npb25TYW1wbGVyTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0dGhpY2tuZXNzOiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cdFx0dGhpY2tuZXNzTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YXR0ZW51YXRpb25EaXN0YW5jZToge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdGF0dGVudWF0aW9uQ29sb3I6IHtcblx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgwMDAwMDApXG5cdFx0fSxcblx0XHRzcGVjdWxhckludGVuc2l0eToge1xuXHRcdFx0dmFsdWU6IDFcblx0XHR9LFxuXHRcdHNwZWN1bGFySW50ZW5zaXR5TWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0c3BlY3VsYXJDb2xvcjoge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigxLCAxLCAxKVxuXHRcdH0sXG5cdFx0c3BlY3VsYXJDb2xvck1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9XG5cdH1dKSxcblx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfdmVydCxcblx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF9mcmFnXG59O1xuXG5mdW5jdGlvbiBXZWJHTEJhY2tncm91bmQocmVuZGVyZXIsIGN1YmVtYXBzLCBzdGF0ZSwgb2JqZWN0cywgYWxwaGEsIHByZW11bHRpcGxpZWRBbHBoYSkge1xuXHRjb25zdCBjbGVhckNvbG9yID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0bGV0IGNsZWFyQWxwaGEgPSBhbHBoYSA9PT0gdHJ1ZSA/IDAgOiAxO1xuXHRsZXQgcGxhbmVNZXNoO1xuXHRsZXQgYm94TWVzaDtcblx0bGV0IGN1cnJlbnRCYWNrZ3JvdW5kID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiA9IDA7XG5cdGxldCBjdXJyZW50VG9uZW1hcHBpbmcgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIHJlbmRlcihyZW5kZXJMaXN0LCBzY2VuZSkge1xuXHRcdGxldCBmb3JjZUNsZWFyID0gZmFsc2U7XG5cdFx0bGV0IGJhY2tncm91bmQgPSBzY2VuZS5pc1NjZW5lID09PSB0cnVlID8gc2NlbmUuYmFja2dyb3VuZCA6IG51bGw7XG5cblx0XHRpZiAoYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzVGV4dHVyZSkge1xuXHRcdFx0YmFja2dyb3VuZCA9IGN1YmVtYXBzLmdldChiYWNrZ3JvdW5kKTtcblx0XHR9IC8vIElnbm9yZSBiYWNrZ3JvdW5kIGluIEFSXG5cdFx0Ly8gVE9ETzogUmVjb25zaWRlciB0aGlzLlxuXG5cblx0XHRjb25zdCB4ciA9IHJlbmRlcmVyLnhyO1xuXHRcdGNvbnN0IHNlc3Npb24gPSB4ci5nZXRTZXNzaW9uICYmIHhyLmdldFNlc3Npb24oKTtcblxuXHRcdGlmIChzZXNzaW9uICYmIHNlc3Npb24uZW52aXJvbm1lbnRCbGVuZE1vZGUgPT09ICdhZGRpdGl2ZScpIHtcblx0XHRcdGJhY2tncm91bmQgPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChiYWNrZ3JvdW5kID09PSBudWxsKSB7XG5cdFx0XHRzZXRDbGVhcihjbGVhckNvbG9yLCBjbGVhckFscGhhKTtcblx0XHR9IGVsc2UgaWYgKGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc0NvbG9yKSB7XG5cdFx0XHRzZXRDbGVhcihiYWNrZ3JvdW5kLCAxKTtcblx0XHRcdGZvcmNlQ2xlYXIgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJlci5hdXRvQ2xlYXIgfHwgZm9yY2VDbGVhcikge1xuXHRcdFx0cmVuZGVyZXIuY2xlYXIocmVuZGVyZXIuYXV0b0NsZWFyQ29sb3IsIHJlbmRlcmVyLmF1dG9DbGVhckRlcHRoLCByZW5kZXJlci5hdXRvQ2xlYXJTdGVuY2lsKTtcblx0XHR9XG5cblx0XHRpZiAoYmFja2dyb3VuZCAmJiAoYmFja2dyb3VuZC5pc0N1YmVUZXh0dXJlIHx8IGJhY2tncm91bmQubWFwcGluZyA9PT0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcpKSB7XG5cdFx0XHRpZiAoYm94TWVzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGJveE1lc2ggPSBuZXcgTWVzaChuZXcgQm94R2VvbWV0cnkoMSwgMSwgMSksIG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHRcdFx0bmFtZTogJ0JhY2tncm91bmRDdWJlTWF0ZXJpYWwnLFxuXHRcdFx0XHRcdHVuaWZvcm1zOiBjbG9uZVVuaWZvcm1zKFNoYWRlckxpYi5jdWJlLnVuaWZvcm1zKSxcblx0XHRcdFx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckxpYi5jdWJlLnZlcnRleFNoYWRlcixcblx0XHRcdFx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyTGliLmN1YmUuZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHRcdFx0c2lkZTogQmFja1NpZGUsXG5cdFx0XHRcdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRcdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdFx0XHRmb2c6IGZhbHNlXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0Ym94TWVzaC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoJ25vcm1hbCcpO1xuXHRcdFx0XHRib3hNZXNoLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgndXYnKTtcblxuXHRcdFx0XHRib3hNZXNoLm9uQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG5cdFx0XHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0fTsgLy8gZW5hYmxlIGNvZGUgaW5qZWN0aW9uIGZvciBub24tYnVpbHQtaW4gbWF0ZXJpYWxcblxuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3hNZXNoLm1hdGVyaWFsLCAnZW52TWFwJywge1xuXHRcdFx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9iamVjdHMudXBkYXRlKGJveE1lc2gpO1xuXHRcdFx0fVxuXG5cdFx0XHRib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZSA9IGJhY2tncm91bmQ7XG5cdFx0XHRib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSBiYWNrZ3JvdW5kLmlzQ3ViZVRleHR1cmUgJiYgYmFja2dyb3VuZC5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlID8gLTEgOiAxO1xuXG5cdFx0XHRpZiAoY3VycmVudEJhY2tncm91bmQgIT09IGJhY2tncm91bmQgfHwgY3VycmVudEJhY2tncm91bmRWZXJzaW9uICE9PSBiYWNrZ3JvdW5kLnZlcnNpb24gfHwgY3VycmVudFRvbmVtYXBwaW5nICE9PSByZW5kZXJlci50b25lTWFwcGluZykge1xuXHRcdFx0XHRib3hNZXNoLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gPSBiYWNrZ3JvdW5kLnZlcnNpb247XG5cdFx0XHRcdGN1cnJlbnRUb25lbWFwcGluZyA9IHJlbmRlcmVyLnRvbmVNYXBwaW5nO1xuXHRcdFx0fSAvLyBwdXNoIHRvIHRoZSBwcmUtc29ydGVkIG9wYXF1ZSByZW5kZXIgbGlzdFxuXG5cblx0XHRcdHJlbmRlckxpc3QudW5zaGlmdChib3hNZXNoLCBib3hNZXNoLmdlb21ldHJ5LCBib3hNZXNoLm1hdGVyaWFsLCAwLCAwLCBudWxsKTtcblx0XHR9IGVsc2UgaWYgKGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1RleHR1cmUpIHtcblx0XHRcdGlmIChwbGFuZU1lc2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwbGFuZU1lc2ggPSBuZXcgTWVzaChuZXcgUGxhbmVHZW9tZXRyeSgyLCAyKSwgbmV3IFNoYWRlck1hdGVyaWFsKHtcblx0XHRcdFx0XHRuYW1lOiAnQmFja2dyb3VuZE1hdGVyaWFsJyxcblx0XHRcdFx0XHR1bmlmb3JtczogY2xvbmVVbmlmb3JtcyhTaGFkZXJMaWIuYmFja2dyb3VuZC51bmlmb3JtcyksXG5cdFx0XHRcdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJMaWIuYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsXG5cdFx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckxpYi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLFxuXHRcdFx0XHRcdHNpZGU6IEZyb250U2lkZSxcblx0XHRcdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGRlcHRoV3JpdGU6IGZhbHNlLFxuXHRcdFx0XHRcdGZvZzogZmFsc2Vcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRwbGFuZU1lc2guZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCdub3JtYWwnKTsgLy8gZW5hYmxlIGNvZGUgaW5qZWN0aW9uIGZvciBub24tYnVpbHQtaW4gbWF0ZXJpYWxcblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocGxhbmVNZXNoLm1hdGVyaWFsLCAnbWFwJywge1xuXHRcdFx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9iamVjdHMudXBkYXRlKHBsYW5lTWVzaCk7XG5cdFx0XHR9XG5cblx0XHRcdHBsYW5lTWVzaC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWUgPSBiYWNrZ3JvdW5kO1xuXG5cdFx0XHRpZiAoYmFja2dyb3VuZC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdGJhY2tncm91bmQudXBkYXRlTWF0cml4KCk7XG5cdFx0XHR9XG5cblx0XHRcdHBsYW5lTWVzaC5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGJhY2tncm91bmQubWF0cml4KTtcblxuXHRcdFx0aWYgKGN1cnJlbnRCYWNrZ3JvdW5kICE9PSBiYWNrZ3JvdW5kIHx8IGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiAhPT0gYmFja2dyb3VuZC52ZXJzaW9uIHx8IGN1cnJlbnRUb25lbWFwcGluZyAhPT0gcmVuZGVyZXIudG9uZU1hcHBpbmcpIHtcblx0XHRcdFx0cGxhbmVNZXNoLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gPSBiYWNrZ3JvdW5kLnZlcnNpb247XG5cdFx0XHRcdGN1cnJlbnRUb25lbWFwcGluZyA9IHJlbmRlcmVyLnRvbmVNYXBwaW5nO1xuXHRcdFx0fSAvLyBwdXNoIHRvIHRoZSBwcmUtc29ydGVkIG9wYXF1ZSByZW5kZXIgbGlzdFxuXG5cblx0XHRcdHJlbmRlckxpc3QudW5zaGlmdChwbGFuZU1lc2gsIHBsYW5lTWVzaC5nZW9tZXRyeSwgcGxhbmVNZXNoLm1hdGVyaWFsLCAwLCAwLCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRDbGVhcihjb2xvciwgYWxwaGEpIHtcblx0XHRzdGF0ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXRDbGVhckNvbG9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xlYXJDb2xvcjtcblx0XHR9LFxuXHRcdHNldENsZWFyQ29sb3I6IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEgPSAxKSB7XG5cdFx0XHRjbGVhckNvbG9yLnNldChjb2xvcik7XG5cdFx0XHRjbGVhckFscGhhID0gYWxwaGE7XG5cdFx0XHRzZXRDbGVhcihjbGVhckNvbG9yLCBjbGVhckFscGhhKTtcblx0XHR9LFxuXHRcdGdldENsZWFyQWxwaGE6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGVhckFscGhhO1xuXHRcdH0sXG5cdFx0c2V0Q2xlYXJBbHBoYTogZnVuY3Rpb24gKGFscGhhKSB7XG5cdFx0XHRjbGVhckFscGhhID0gYWxwaGE7XG5cdFx0XHRzZXRDbGVhcihjbGVhckNvbG9yLCBjbGVhckFscGhhKTtcblx0XHR9LFxuXHRcdHJlbmRlcjogcmVuZGVyXG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMQmluZGluZ1N0YXRlcyhnbCwgZXh0ZW5zaW9ucywgYXR0cmlidXRlcywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IG1heFZlcnRleEF0dHJpYnV0ZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0Y29uc3QgZXh0ZW5zaW9uID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8gbnVsbCA6IGV4dGVuc2lvbnMuZ2V0KCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuXHRjb25zdCB2YW9BdmFpbGFibGUgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHwgZXh0ZW5zaW9uICE9PSBudWxsO1xuXHRjb25zdCBiaW5kaW5nU3RhdGVzID0ge307XG5cdGNvbnN0IGRlZmF1bHRTdGF0ZSA9IGNyZWF0ZUJpbmRpbmdTdGF0ZShudWxsKTtcblx0bGV0IGN1cnJlbnRTdGF0ZSA9IGRlZmF1bHRTdGF0ZTtcblxuXHRmdW5jdGlvbiBzZXR1cChvYmplY3QsIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSwgaW5kZXgpIHtcblx0XHRsZXQgdXBkYXRlQnVmZmVycyA9IGZhbHNlO1xuXG5cdFx0aWYgKHZhb0F2YWlsYWJsZSkge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRCaW5kaW5nU3RhdGUoZ2VvbWV0cnksIHByb2dyYW0sIG1hdGVyaWFsKTtcblxuXHRcdFx0aWYgKGN1cnJlbnRTdGF0ZSAhPT0gc3RhdGUpIHtcblx0XHRcdFx0Y3VycmVudFN0YXRlID0gc3RhdGU7XG5cdFx0XHRcdGJpbmRWZXJ0ZXhBcnJheU9iamVjdChjdXJyZW50U3RhdGUub2JqZWN0KTtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlQnVmZmVycyA9IG5lZWRzVXBkYXRlKGdlb21ldHJ5LCBpbmRleCk7XG5cdFx0XHRpZiAodXBkYXRlQnVmZmVycykgc2F2ZUNhY2hlKGdlb21ldHJ5LCBpbmRleCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHdpcmVmcmFtZSA9IG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZTtcblxuXHRcdFx0aWYgKGN1cnJlbnRTdGF0ZS5nZW9tZXRyeSAhPT0gZ2VvbWV0cnkuaWQgfHwgY3VycmVudFN0YXRlLnByb2dyYW0gIT09IHByb2dyYW0uaWQgfHwgY3VycmVudFN0YXRlLndpcmVmcmFtZSAhPT0gd2lyZWZyYW1lKSB7XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS5nZW9tZXRyeSA9IGdlb21ldHJ5LmlkO1xuXHRcdFx0XHRjdXJyZW50U3RhdGUucHJvZ3JhbSA9IHByb2dyYW0uaWQ7XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS53aXJlZnJhbWUgPSB3aXJlZnJhbWU7XG5cdFx0XHRcdHVwZGF0ZUJ1ZmZlcnMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvYmplY3QuaXNJbnN0YW5jZWRNZXNoID09PSB0cnVlKSB7XG5cdFx0XHR1cGRhdGVCdWZmZXJzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKGluZGV4LCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUik7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUJ1ZmZlcnMpIHtcblx0XHRcdHNldHVwVmVydGV4QXR0cmlidXRlcyhvYmplY3QsIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSk7XG5cblx0XHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHRnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGVzLmdldChpbmRleCkuYnVmZmVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhBcnJheU9iamVjdCgpIHtcblx0XHRpZiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyKSByZXR1cm4gZ2wuY3JlYXRlVmVydGV4QXJyYXkoKTtcblx0XHRyZXR1cm4gZXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kVmVydGV4QXJyYXlPYmplY3QodmFvKSB7XG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMikgcmV0dXJuIGdsLmJpbmRWZXJ0ZXhBcnJheSh2YW8pO1xuXHRcdHJldHVybiBleHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHZhbyk7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWxldGVWZXJ0ZXhBcnJheU9iamVjdCh2YW8pIHtcblx0XHRpZiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyKSByZXR1cm4gZ2wuZGVsZXRlVmVydGV4QXJyYXkodmFvKTtcblx0XHRyZXR1cm4gZXh0ZW5zaW9uLmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRCaW5kaW5nU3RhdGUoZ2VvbWV0cnksIHByb2dyYW0sIG1hdGVyaWFsKSB7XG5cdFx0Y29uc3Qgd2lyZWZyYW1lID0gbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlO1xuXHRcdGxldCBwcm9ncmFtTWFwID0gYmluZGluZ1N0YXRlc1tnZW9tZXRyeS5pZF07XG5cblx0XHRpZiAocHJvZ3JhbU1hcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwcm9ncmFtTWFwID0ge307XG5cdFx0XHRiaW5kaW5nU3RhdGVzW2dlb21ldHJ5LmlkXSA9IHByb2dyYW1NYXA7XG5cdFx0fVxuXG5cdFx0bGV0IHN0YXRlTWFwID0gcHJvZ3JhbU1hcFtwcm9ncmFtLmlkXTtcblxuXHRcdGlmIChzdGF0ZU1hcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzdGF0ZU1hcCA9IHt9O1xuXHRcdFx0cHJvZ3JhbU1hcFtwcm9ncmFtLmlkXSA9IHN0YXRlTWFwO1xuXHRcdH1cblxuXHRcdGxldCBzdGF0ZSA9IHN0YXRlTWFwW3dpcmVmcmFtZV07XG5cblx0XHRpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3RhdGUgPSBjcmVhdGVCaW5kaW5nU3RhdGUoY3JlYXRlVmVydGV4QXJyYXlPYmplY3QoKSk7XG5cdFx0XHRzdGF0ZU1hcFt3aXJlZnJhbWVdID0gc3RhdGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlQmluZGluZ1N0YXRlKHZhbykge1xuXHRcdGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBbXTtcblx0XHRjb25zdCBlbmFibGVkQXR0cmlidXRlcyA9IFtdO1xuXHRcdGNvbnN0IGF0dHJpYnV0ZURpdmlzb3JzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnV0ZXM7IGkrKykge1xuXHRcdFx0bmV3QXR0cmlidXRlc1tpXSA9IDA7XG5cdFx0XHRlbmFibGVkQXR0cmlidXRlc1tpXSA9IDA7XG5cdFx0XHRhdHRyaWJ1dGVEaXZpc29yc1tpXSA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9uIG5vbi1WQU8gc3VwcG9ydCBicm93c2VyXG5cdFx0XHRnZW9tZXRyeTogbnVsbCxcblx0XHRcdHByb2dyYW06IG51bGwsXG5cdFx0XHR3aXJlZnJhbWU6IGZhbHNlLFxuXHRcdFx0bmV3QXR0cmlidXRlczogbmV3QXR0cmlidXRlcyxcblx0XHRcdGVuYWJsZWRBdHRyaWJ1dGVzOiBlbmFibGVkQXR0cmlidXRlcyxcblx0XHRcdGF0dHJpYnV0ZURpdmlzb3JzOiBhdHRyaWJ1dGVEaXZpc29ycyxcblx0XHRcdG9iamVjdDogdmFvLFxuXHRcdFx0YXR0cmlidXRlczoge30sXG5cdFx0XHRpbmRleDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBuZWVkc1VwZGF0ZShnZW9tZXRyeSwgaW5kZXgpIHtcblx0XHRjb25zdCBjYWNoZWRBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLmF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRsZXQgYXR0cmlidXRlc051bSA9IDA7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBnZW9tZXRyeUF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGNhY2hlZEF0dHJpYnV0ZSA9IGNhY2hlZEF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdGNvbnN0IGdlb21ldHJ5QXR0cmlidXRlID0gZ2VvbWV0cnlBdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRpZiAoY2FjaGVkQXR0cmlidXRlID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXHRcdFx0aWYgKGNhY2hlZEF0dHJpYnV0ZS5hdHRyaWJ1dGUgIT09IGdlb21ldHJ5QXR0cmlidXRlKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmIChjYWNoZWRBdHRyaWJ1dGUuZGF0YSAhPT0gZ2VvbWV0cnlBdHRyaWJ1dGUuZGF0YSkgcmV0dXJuIHRydWU7XG5cdFx0XHRhdHRyaWJ1dGVzTnVtKys7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzTnVtICE9PSBhdHRyaWJ1dGVzTnVtKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoY3VycmVudFN0YXRlLmluZGV4ICE9PSBpbmRleCkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2F2ZUNhY2hlKGdlb21ldHJ5LCBpbmRleCkge1xuXHRcdGNvbnN0IGNhY2hlID0ge307XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0bGV0IGF0dHJpYnV0ZXNOdW0gPSAwO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0ZGF0YS5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7XG5cblx0XHRcdGlmIChhdHRyaWJ1dGUuZGF0YSkge1xuXHRcdFx0XHRkYXRhLmRhdGEgPSBhdHRyaWJ1dGUuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Y2FjaGVba2V5XSA9IGRhdGE7XG5cdFx0XHRhdHRyaWJ1dGVzTnVtKys7XG5cdFx0fVxuXG5cdFx0Y3VycmVudFN0YXRlLmF0dHJpYnV0ZXMgPSBjYWNoZTtcblx0XHRjdXJyZW50U3RhdGUuYXR0cmlidXRlc051bSA9IGF0dHJpYnV0ZXNOdW07XG5cdFx0Y3VycmVudFN0YXRlLmluZGV4ID0gaW5kZXg7XG5cdH1cblxuXHRmdW5jdGlvbiBpbml0QXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLm5ld0F0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBuZXdBdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdG5ld0F0dHJpYnV0ZXNbaV0gPSAwO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGVuYWJsZUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcblx0XHRlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKGF0dHJpYnV0ZSwgMCk7XG5cdH1cblxuXHRmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKGF0dHJpYnV0ZSwgbWVzaFBlckF0dHJpYnV0ZSkge1xuXHRcdGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUubmV3QXR0cmlidXRlcztcblx0XHRjb25zdCBlbmFibGVkQXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5lbmFibGVkQXR0cmlidXRlcztcblx0XHRjb25zdCBhdHRyaWJ1dGVEaXZpc29ycyA9IGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVEaXZpc29ycztcblx0XHRuZXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSAxO1xuXG5cdFx0aWYgKGVuYWJsZWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPT09IDApIHtcblx0XHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYnV0ZSk7XG5cdFx0XHRlbmFibGVkQXR0cmlidXRlc1thdHRyaWJ1dGVdID0gMTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlRGl2aXNvcnNbYXR0cmlidXRlXSAhPT0gbWVzaFBlckF0dHJpYnV0ZSkge1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8gZ2wgOiBleHRlbnNpb25zLmdldCgnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycpO1xuXHRcdFx0ZXh0ZW5zaW9uW2NhcGFiaWxpdGllcy5pc1dlYkdMMiA/ICd2ZXJ0ZXhBdHRyaWJEaXZpc29yJyA6ICd2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUnXShhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUpO1xuXHRcdFx0YXR0cmlidXRlRGl2aXNvcnNbYXR0cmlidXRlXSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbmV3QXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5uZXdBdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IGVuYWJsZWRBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLmVuYWJsZWRBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0aWYgKGVuYWJsZWRBdHRyaWJ1dGVzW2ldICE9PSBuZXdBdHRyaWJ1dGVzW2ldKSB7XG5cdFx0XHRcdGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcblx0XHRcdFx0ZW5hYmxlZEF0dHJpYnV0ZXNbaV0gPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KSB7XG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZSAmJiAodHlwZSA9PT0gZ2wuSU5UIHx8IHR5cGUgPT09IGdsLlVOU0lHTkVEX0lOVCkpIHtcblx0XHRcdGdsLnZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIG9mZnNldCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cFZlcnRleEF0dHJpYnV0ZXMob2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnkpIHtcblx0XHRpZiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSBmYWxzZSAmJiAob2JqZWN0LmlzSW5zdGFuY2VkTWVzaCB8fCBnZW9tZXRyeS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSkge1xuXHRcdFx0aWYgKGV4dGVuc2lvbnMuZ2V0KCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJykgPT09IG51bGwpIHJldHVybjtcblx0XHR9XG5cblx0XHRpbml0QXR0cmlidXRlcygpO1xuXHRcdGNvbnN0IGdlb21ldHJ5QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgcHJvZ3JhbUF0dHJpYnV0ZXMgPSBwcm9ncmFtLmdldEF0dHJpYnV0ZXMoKTtcblx0XHRjb25zdCBtYXRlcmlhbERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgPSBtYXRlcmlhbC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO1xuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIHByb2dyYW1BdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBwcm9ncmFtQXR0cmlidXRlID0gcHJvZ3JhbUF0dHJpYnV0ZXNbbmFtZV07XG5cblx0XHRcdGlmIChwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uID49IDApIHtcblx0XHRcdFx0bGV0IGdlb21ldHJ5QXR0cmlidXRlID0gZ2VvbWV0cnlBdHRyaWJ1dGVzW25hbWVdO1xuXG5cdFx0XHRcdGlmIChnZW9tZXRyeUF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09ICdpbnN0YW5jZU1hdHJpeCcgJiYgb2JqZWN0Lmluc3RhbmNlTWF0cml4KSBnZW9tZXRyeUF0dHJpYnV0ZSA9IG9iamVjdC5pbnN0YW5jZU1hdHJpeDtcblx0XHRcdFx0XHRpZiAobmFtZSA9PT0gJ2luc3RhbmNlQ29sb3InICYmIG9iamVjdC5pbnN0YW5jZUNvbG9yKSBnZW9tZXRyeUF0dHJpYnV0ZSA9IG9iamVjdC5pbnN0YW5jZUNvbG9yO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGdlb21ldHJ5QXR0cmlidXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBub3JtYWxpemVkID0gZ2VvbWV0cnlBdHRyaWJ1dGUubm9ybWFsaXplZDtcblx0XHRcdFx0XHRjb25zdCBzaXplID0gZ2VvbWV0cnlBdHRyaWJ1dGUuaXRlbVNpemU7XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoZ2VvbWV0cnlBdHRyaWJ1dGUpOyAvLyBUT0RPIEF0dHJpYnV0ZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBjb250ZXh0IHJlc3RvcmVcblxuXHRcdFx0XHRcdGlmIChhdHRyaWJ1dGUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cdFx0XHRcdFx0Y29uc3QgYnVmZmVyID0gYXR0cmlidXRlLmJ1ZmZlcjtcblx0XHRcdFx0XHRjb25zdCB0eXBlID0gYXR0cmlidXRlLnR5cGU7XG5cdFx0XHRcdFx0Y29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gYXR0cmlidXRlLmJ5dGVzUGVyRWxlbWVudDtcblxuXHRcdFx0XHRcdGlmIChnZW9tZXRyeUF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhID0gZ2VvbWV0cnlBdHRyaWJ1dGUuZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmlkZSA9IGRhdGEuc3RyaWRlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gZ2VvbWV0cnlBdHRyaWJ1dGUub2Zmc2V0O1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvcihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSwgZGF0YS5tZXNoUGVyQXR0cmlidXRlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChvYmplY3QuaXNJbnN0YW5jZWRNZXNoICE9PSB0cnVlICYmIGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9IGRhdGEubWVzaFBlckF0dHJpYnV0ZSAqIGRhdGEuY291bnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZUF0dHJpYnV0ZShwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Z2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpLCBzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSAqIGJ5dGVzUGVyRWxlbWVudCwgKG9mZnNldCArIHNpemUgLyBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZSAqIGkpICogYnl0ZXNQZXJFbGVtZW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGdlb21ldHJ5QXR0cmlidXRlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksIGdlb21ldHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG9iamVjdC5pc0luc3RhbmNlZE1lc2ggIT09IHRydWUgJiYgZ2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50ID0gZ2VvbWV0cnlBdHRyaWJ1dGUubWVzaFBlckF0dHJpYnV0ZSAqIGdlb21ldHJ5QXR0cmlidXRlLmNvdW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGUocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSwgc2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplLCB0eXBlLCBub3JtYWxpemVkLCBzaXplICogYnl0ZXNQZXJFbGVtZW50LCBzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUgKiBpICogYnl0ZXNQZXJFbGVtZW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxEZWZhdWx0QXR0cmlidXRlVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlc1tuYW1lXTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliMmZ2KHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24sIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliM2Z2KHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24sIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliNGZ2KHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24sIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjFmdihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0cmVzZXQoKTtcblxuXHRcdGZvciAoY29uc3QgZ2VvbWV0cnlJZCBpbiBiaW5kaW5nU3RhdGVzKSB7XG5cdFx0XHRjb25zdCBwcm9ncmFtTWFwID0gYmluZGluZ1N0YXRlc1tnZW9tZXRyeUlkXTtcblxuXHRcdFx0Zm9yIChjb25zdCBwcm9ncmFtSWQgaW4gcHJvZ3JhbU1hcCkge1xuXHRcdFx0XHRjb25zdCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbcHJvZ3JhbUlkXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHdpcmVmcmFtZSBpbiBzdGF0ZU1hcCkge1xuXHRcdFx0XHRcdGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KHN0YXRlTWFwW3dpcmVmcmFtZV0ub2JqZWN0KTtcblx0XHRcdFx0XHRkZWxldGUgc3RhdGVNYXBbd2lyZWZyYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBwcm9ncmFtTWFwW3Byb2dyYW1JZF07XG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBiaW5kaW5nU3RhdGVzW2dlb21ldHJ5SWRdO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGdlb21ldHJ5KSB7XG5cdFx0aWYgKGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnkuaWRdID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRjb25zdCBwcm9ncmFtTWFwID0gYmluZGluZ1N0YXRlc1tnZW9tZXRyeS5pZF07XG5cblx0XHRmb3IgKGNvbnN0IHByb2dyYW1JZCBpbiBwcm9ncmFtTWFwKSB7XG5cdFx0XHRjb25zdCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbcHJvZ3JhbUlkXTtcblxuXHRcdFx0Zm9yIChjb25zdCB3aXJlZnJhbWUgaW4gc3RhdGVNYXApIHtcblx0XHRcdFx0ZGVsZXRlVmVydGV4QXJyYXlPYmplY3Qoc3RhdGVNYXBbd2lyZWZyYW1lXS5vYmplY3QpO1xuXHRcdFx0XHRkZWxldGUgc3RhdGVNYXBbd2lyZWZyYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIHByb2dyYW1NYXBbcHJvZ3JhbUlkXTtcblx0XHR9XG5cblx0XHRkZWxldGUgYmluZGluZ1N0YXRlc1tnZW9tZXRyeS5pZF07XG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHByb2dyYW0pIHtcblx0XHRmb3IgKGNvbnN0IGdlb21ldHJ5SWQgaW4gYmluZGluZ1N0YXRlcykge1xuXHRcdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnlJZF07XG5cdFx0XHRpZiAocHJvZ3JhbU1hcFtwcm9ncmFtLmlkXSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHN0YXRlTWFwID0gcHJvZ3JhbU1hcFtwcm9ncmFtLmlkXTtcblxuXHRcdFx0Zm9yIChjb25zdCB3aXJlZnJhbWUgaW4gc3RhdGVNYXApIHtcblx0XHRcdFx0ZGVsZXRlVmVydGV4QXJyYXlPYmplY3Qoc3RhdGVNYXBbd2lyZWZyYW1lXS5vYmplY3QpO1xuXHRcdFx0XHRkZWxldGUgc3RhdGVNYXBbd2lyZWZyYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIHByb2dyYW1NYXBbcHJvZ3JhbS5pZF07XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXQoKSB7XG5cdFx0cmVzZXREZWZhdWx0U3RhdGUoKTtcblx0XHRpZiAoY3VycmVudFN0YXRlID09PSBkZWZhdWx0U3RhdGUpIHJldHVybjtcblx0XHRjdXJyZW50U3RhdGUgPSBkZWZhdWx0U3RhdGU7XG5cdFx0YmluZFZlcnRleEFycmF5T2JqZWN0KGN1cnJlbnRTdGF0ZS5vYmplY3QpO1xuXHR9IC8vIGZvciBiYWNrd2FyZC1jb21wYXRpbGliaXR5XG5cblxuXHRmdW5jdGlvbiByZXNldERlZmF1bHRTdGF0ZSgpIHtcblx0XHRkZWZhdWx0U3RhdGUuZ2VvbWV0cnkgPSBudWxsO1xuXHRcdGRlZmF1bHRTdGF0ZS5wcm9ncmFtID0gbnVsbDtcblx0XHRkZWZhdWx0U3RhdGUud2lyZWZyYW1lID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHNldHVwOiBzZXR1cCxcblx0XHRyZXNldDogcmVzZXQsXG5cdFx0cmVzZXREZWZhdWx0U3RhdGU6IHJlc2V0RGVmYXVsdFN0YXRlLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2UsXG5cdFx0cmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6IHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5LFxuXHRcdHJlbGVhc2VTdGF0ZXNPZlByb2dyYW06IHJlbGVhc2VTdGF0ZXNPZlByb2dyYW0sXG5cdFx0aW5pdEF0dHJpYnV0ZXM6IGluaXRBdHRyaWJ1dGVzLFxuXHRcdGVuYWJsZUF0dHJpYnV0ZTogZW5hYmxlQXR0cmlidXRlLFxuXHRcdGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOiBkaXNhYmxlVW51c2VkQXR0cmlidXRlc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTEJ1ZmZlclJlbmRlcmVyKGdsLCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMpIHtcblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cdGxldCBtb2RlO1xuXG5cdGZ1bmN0aW9uIHNldE1vZGUodmFsdWUpIHtcblx0XHRtb2RlID0gdmFsdWU7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXIoc3RhcnQsIGNvdW50KSB7XG5cdFx0Z2wuZHJhd0FycmF5cyhtb2RlLCBzdGFydCwgY291bnQpO1xuXHRcdGluZm8udXBkYXRlKGNvdW50LCBtb2RlLCAxKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlckluc3RhbmNlcyhzdGFydCwgY291bnQsIHByaW1jb3VudCkge1xuXHRcdGlmIChwcmltY291bnQgPT09IDApIHJldHVybjtcblx0XHRsZXQgZXh0ZW5zaW9uLCBtZXRob2ROYW1lO1xuXG5cdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRleHRlbnNpb24gPSBnbDtcblx0XHRcdG1ldGhvZE5hbWUgPSAnZHJhd0FycmF5c0luc3RhbmNlZCc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyk7XG5cdFx0XHRtZXRob2ROYW1lID0gJ2RyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSc7XG5cblx0XHRcdGlmIChleHRlbnNpb24gPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRleHRlbnNpb25bbWV0aG9kTmFtZV0obW9kZSwgc3RhcnQsIGNvdW50LCBwcmltY291bnQpO1xuXHRcdGluZm8udXBkYXRlKGNvdW50LCBtb2RlLCBwcmltY291bnQpO1xuXHR9IC8vXG5cblxuXHR0aGlzLnNldE1vZGUgPSBzZXRNb2RlO1xuXHR0aGlzLnJlbmRlciA9IHJlbmRlcjtcblx0dGhpcy5yZW5kZXJJbnN0YW5jZXMgPSByZW5kZXJJbnN0YW5jZXM7XG59XG5cbmZ1bmN0aW9uIFdlYkdMQ2FwYWJpbGl0aWVzKGdsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzKSB7XG5cdGxldCBtYXhBbmlzb3Ryb3B5O1xuXG5cdGZ1bmN0aW9uIGdldE1heEFuaXNvdHJvcHkoKSB7XG5cdFx0aWYgKG1heEFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG1heEFuaXNvdHJvcHk7XG5cblx0XHRpZiAoZXh0ZW5zaW9ucy5oYXMoJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XG5cdFx0XHRtYXhBbmlzb3Ryb3B5ID0gZ2wuZ2V0UGFyYW1ldGVyKGV4dGVuc2lvbi5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhBbmlzb3Ryb3B5ID0gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWF4QW5pc290cm9weTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE1heFByZWNpc2lvbihwcmVjaXNpb24pIHtcblx0XHRpZiAocHJlY2lzaW9uID09PSAnaGlnaHAnKSB7XG5cdFx0XHRpZiAoZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGdsLlZFUlRFWF9TSEFERVIsIGdsLkhJR0hfRkxPQVQpLnByZWNpc2lvbiA+IDAgJiYgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGdsLkZSQUdNRU5UX1NIQURFUiwgZ2wuSElHSF9GTE9BVCkucHJlY2lzaW9uID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gJ2hpZ2hwJztcblx0XHRcdH1cblxuXHRcdFx0cHJlY2lzaW9uID0gJ21lZGl1bXAnO1xuXHRcdH1cblxuXHRcdGlmIChwcmVjaXNpb24gPT09ICdtZWRpdW1wJykge1xuXHRcdFx0aWYgKGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChnbC5WRVJURVhfU0hBREVSLCBnbC5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiA+IDAgJiYgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGdsLkZSQUdNRU5UX1NIQURFUiwgZ2wuTUVESVVNX0ZMT0FUKS5wcmVjaXNpb24gPiAwKSB7XG5cdFx0XHRcdHJldHVybiAnbWVkaXVtcCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdsb3dwJztcblx0fVxuXG5cdGNvbnN0IGlzV2ViR0wyID0gdHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQgIT09ICd1bmRlZmluZWQnICYmIGdsIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCB8fCB0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQgIT09ICd1bmRlZmluZWQnICYmIGdsIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQ7XG5cdGxldCBwcmVjaXNpb24gPSBwYXJhbWV0ZXJzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVjaXNpb24gOiAnaGlnaHAnO1xuXHRjb25zdCBtYXhQcmVjaXNpb24gPSBnZXRNYXhQcmVjaXNpb24ocHJlY2lzaW9uKTtcblxuXHRpZiAobWF4UHJlY2lzaW9uICE9PSBwcmVjaXNpb24pIHtcblx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6JywgcHJlY2lzaW9uLCAnbm90IHN1cHBvcnRlZCwgdXNpbmcnLCBtYXhQcmVjaXNpb24sICdpbnN0ZWFkLicpO1xuXHRcdHByZWNpc2lvbiA9IG1heFByZWNpc2lvbjtcblx0fVxuXG5cdGNvbnN0IGRyYXdCdWZmZXJzID0gaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ1dFQkdMX2RyYXdfYnVmZmVycycpO1xuXHRjb25zdCBsb2dhcml0aG1pY0RlcHRoQnVmZmVyID0gcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyID09PSB0cnVlO1xuXHRjb25zdCBtYXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cdGNvbnN0IG1heFZlcnRleFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cdGNvbnN0IG1heFRleHR1cmVTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX1NJWkUpO1xuXHRjb25zdCBtYXhDdWJlbWFwU2l6ZSA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTtcblx0Y29uc3QgbWF4QXR0cmlidXRlcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXHRjb25zdCBtYXhWZXJ0ZXhVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7XG5cdGNvbnN0IG1heFZhcnlpbmdzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WQVJZSU5HX1ZFQ1RPUlMpO1xuXHRjb25zdCBtYXhGcmFnbWVudFVuaWZvcm1zID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpO1xuXHRjb25zdCB2ZXJ0ZXhUZXh0dXJlcyA9IG1heFZlcnRleFRleHR1cmVzID4gMDtcblx0Y29uc3QgZmxvYXRGcmFnbWVudFRleHR1cmVzID0gaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ09FU190ZXh0dXJlX2Zsb2F0Jyk7XG5cdGNvbnN0IGZsb2F0VmVydGV4VGV4dHVyZXMgPSB2ZXJ0ZXhUZXh0dXJlcyAmJiBmbG9hdEZyYWdtZW50VGV4dHVyZXM7XG5cdGNvbnN0IG1heFNhbXBsZXMgPSBpc1dlYkdMMiA/IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfU0FNUExFUykgOiAwO1xuXHRyZXR1cm4ge1xuXHRcdGlzV2ViR0wyOiBpc1dlYkdMMixcblx0XHRkcmF3QnVmZmVyczogZHJhd0J1ZmZlcnMsXG5cdFx0Z2V0TWF4QW5pc290cm9weTogZ2V0TWF4QW5pc290cm9weSxcblx0XHRnZXRNYXhQcmVjaXNpb246IGdldE1heFByZWNpc2lvbixcblx0XHRwcmVjaXNpb246IHByZWNpc2lvbixcblx0XHRsb2dhcml0aG1pY0RlcHRoQnVmZmVyOiBsb2dhcml0aG1pY0RlcHRoQnVmZmVyLFxuXHRcdG1heFRleHR1cmVzOiBtYXhUZXh0dXJlcyxcblx0XHRtYXhWZXJ0ZXhUZXh0dXJlczogbWF4VmVydGV4VGV4dHVyZXMsXG5cdFx0bWF4VGV4dHVyZVNpemU6IG1heFRleHR1cmVTaXplLFxuXHRcdG1heEN1YmVtYXBTaXplOiBtYXhDdWJlbWFwU2l6ZSxcblx0XHRtYXhBdHRyaWJ1dGVzOiBtYXhBdHRyaWJ1dGVzLFxuXHRcdG1heFZlcnRleFVuaWZvcm1zOiBtYXhWZXJ0ZXhVbmlmb3Jtcyxcblx0XHRtYXhWYXJ5aW5nczogbWF4VmFyeWluZ3MsXG5cdFx0bWF4RnJhZ21lbnRVbmlmb3JtczogbWF4RnJhZ21lbnRVbmlmb3Jtcyxcblx0XHR2ZXJ0ZXhUZXh0dXJlczogdmVydGV4VGV4dHVyZXMsXG5cdFx0ZmxvYXRGcmFnbWVudFRleHR1cmVzOiBmbG9hdEZyYWdtZW50VGV4dHVyZXMsXG5cdFx0ZmxvYXRWZXJ0ZXhUZXh0dXJlczogZmxvYXRWZXJ0ZXhUZXh0dXJlcyxcblx0XHRtYXhTYW1wbGVzOiBtYXhTYW1wbGVzXG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMQ2xpcHBpbmcocHJvcGVydGllcykge1xuXHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdGxldCBnbG9iYWxTdGF0ZSA9IG51bGwsXG5cdFx0XHRudW1HbG9iYWxQbGFuZXMgPSAwLFxuXHRcdFx0bG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBmYWxzZSxcblx0XHRcdHJlbmRlcmluZ1NoYWRvd3MgPSBmYWxzZTtcblx0Y29uc3QgcGxhbmUgPSBuZXcgUGxhbmUoKSxcblx0XHRcdFx0dmlld05vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCksXG5cdFx0XHRcdHVuaWZvcm0gPSB7XG5cdFx0dmFsdWU6IG51bGwsXG5cdFx0bmVlZHNVcGRhdGU6IGZhbHNlXG5cdH07XG5cdHRoaXMudW5pZm9ybSA9IHVuaWZvcm07XG5cdHRoaXMubnVtUGxhbmVzID0gMDtcblx0dGhpcy5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXG5cdHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChwbGFuZXMsIGVuYWJsZUxvY2FsQ2xpcHBpbmcsIGNhbWVyYSkge1xuXHRcdGNvbnN0IGVuYWJsZWQgPSBwbGFuZXMubGVuZ3RoICE9PSAwIHx8IGVuYWJsZUxvY2FsQ2xpcHBpbmcgfHwgLy8gZW5hYmxlIHN0YXRlIG9mIHByZXZpb3VzIGZyYW1lIC0gdGhlIGNsaXBwaW5nIGNvZGUgaGFzIHRvXG5cdFx0Ly8gcnVuIGFub3RoZXIgZnJhbWUgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIHN0YXRlOlxuXHRcdG51bUdsb2JhbFBsYW5lcyAhPT0gMCB8fCBsb2NhbENsaXBwaW5nRW5hYmxlZDtcblx0XHRsb2NhbENsaXBwaW5nRW5hYmxlZCA9IGVuYWJsZUxvY2FsQ2xpcHBpbmc7XG5cdFx0Z2xvYmFsU3RhdGUgPSBwcm9qZWN0UGxhbmVzKHBsYW5lcywgY2FtZXJhLCAwKTtcblx0XHRudW1HbG9iYWxQbGFuZXMgPSBwbGFuZXMubGVuZ3RoO1xuXHRcdHJldHVybiBlbmFibGVkO1xuXHR9O1xuXG5cdHRoaXMuYmVnaW5TaGFkb3dzID0gZnVuY3Rpb24gKCkge1xuXHRcdHJlbmRlcmluZ1NoYWRvd3MgPSB0cnVlO1xuXHRcdHByb2plY3RQbGFuZXMobnVsbCk7XG5cdH07XG5cblx0dGhpcy5lbmRTaGFkb3dzID0gZnVuY3Rpb24gKCkge1xuXHRcdHJlbmRlcmluZ1NoYWRvd3MgPSBmYWxzZTtcblx0XHRyZXNldEdsb2JhbFN0YXRlKCk7XG5cdH07XG5cblx0dGhpcy5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgY2FtZXJhLCB1c2VDYWNoZSkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzLFxuXHRcdFx0XHRcdGNsaXBJbnRlcnNlY3Rpb24gPSBtYXRlcmlhbC5jbGlwSW50ZXJzZWN0aW9uLFxuXHRcdFx0XHRcdGNsaXBTaGFkb3dzID0gbWF0ZXJpYWwuY2xpcFNoYWRvd3M7XG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpO1xuXG5cdFx0aWYgKCFsb2NhbENsaXBwaW5nRW5hYmxlZCB8fCBwbGFuZXMgPT09IG51bGwgfHwgcGxhbmVzLmxlbmd0aCA9PT0gMCB8fCByZW5kZXJpbmdTaGFkb3dzICYmICFjbGlwU2hhZG93cykge1xuXHRcdFx0Ly8gdGhlcmUncyBubyBsb2NhbCBjbGlwcGluZ1xuXHRcdFx0aWYgKHJlbmRlcmluZ1NoYWRvd3MpIHtcblx0XHRcdFx0Ly8gdGhlcmUncyBubyBnbG9iYWwgY2xpcHBpbmdcblx0XHRcdFx0cHJvamVjdFBsYW5lcyhudWxsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc2V0R2xvYmFsU3RhdGUoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgbkdsb2JhbCA9IHJlbmRlcmluZ1NoYWRvd3MgPyAwIDogbnVtR2xvYmFsUGxhbmVzLFxuXHRcdFx0XHRcdFx0bEdsb2JhbCA9IG5HbG9iYWwgKiA0O1xuXHRcdFx0bGV0IGRzdEFycmF5ID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLmNsaXBwaW5nU3RhdGUgfHwgbnVsbDtcblx0XHRcdHVuaWZvcm0udmFsdWUgPSBkc3RBcnJheTsgLy8gZW5zdXJlIHVuaXF1ZSBzdGF0ZVxuXG5cdFx0XHRkc3RBcnJheSA9IHByb2plY3RQbGFuZXMocGxhbmVzLCBjYW1lcmEsIGxHbG9iYWwsIHVzZUNhY2hlKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IGxHbG9iYWw7ICsraSkge1xuXHRcdFx0XHRkc3RBcnJheVtpXSA9IGdsb2JhbFN0YXRlW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMuY2xpcHBpbmdTdGF0ZSA9IGRzdEFycmF5O1xuXHRcdFx0dGhpcy5udW1JbnRlcnNlY3Rpb24gPSBjbGlwSW50ZXJzZWN0aW9uID8gdGhpcy5udW1QbGFuZXMgOiAwO1xuXHRcdFx0dGhpcy5udW1QbGFuZXMgKz0gbkdsb2JhbDtcblx0XHR9XG5cdH07XG5cblx0ZnVuY3Rpb24gcmVzZXRHbG9iYWxTdGF0ZSgpIHtcblx0XHRpZiAodW5pZm9ybS52YWx1ZSAhPT0gZ2xvYmFsU3RhdGUpIHtcblx0XHRcdHVuaWZvcm0udmFsdWUgPSBnbG9iYWxTdGF0ZTtcblx0XHRcdHVuaWZvcm0ubmVlZHNVcGRhdGUgPSBudW1HbG9iYWxQbGFuZXMgPiAwO1xuXHRcdH1cblxuXHRcdHNjb3BlLm51bVBsYW5lcyA9IG51bUdsb2JhbFBsYW5lcztcblx0XHRzY29wZS5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHJvamVjdFBsYW5lcyhwbGFuZXMsIGNhbWVyYSwgZHN0T2Zmc2V0LCBza2lwVHJhbnNmb3JtKSB7XG5cdFx0Y29uc3QgblBsYW5lcyA9IHBsYW5lcyAhPT0gbnVsbCA/IHBsYW5lcy5sZW5ndGggOiAwO1xuXHRcdGxldCBkc3RBcnJheSA9IG51bGw7XG5cblx0XHRpZiAoblBsYW5lcyAhPT0gMCkge1xuXHRcdFx0ZHN0QXJyYXkgPSB1bmlmb3JtLnZhbHVlO1xuXG5cdFx0XHRpZiAoc2tpcFRyYW5zZm9ybSAhPT0gdHJ1ZSB8fCBkc3RBcnJheSA9PT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBmbGF0U2l6ZSA9IGRzdE9mZnNldCArIG5QbGFuZXMgKiA0LFxuXHRcdFx0XHRcdFx0XHR2aWV3TWF0cml4ID0gY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZTtcblx0XHRcdFx0dmlld05vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgodmlld01hdHJpeCk7XG5cblx0XHRcdFx0aWYgKGRzdEFycmF5ID09PSBudWxsIHx8IGRzdEFycmF5Lmxlbmd0aCA8IGZsYXRTaXplKSB7XG5cdFx0XHRcdFx0ZHN0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGZsYXRTaXplKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpNCA9IGRzdE9mZnNldDsgaSAhPT0gblBsYW5lczsgKytpLCBpNCArPSA0KSB7XG5cdFx0XHRcdFx0cGxhbmUuY29weShwbGFuZXNbaV0pLmFwcGx5TWF0cml4NCh2aWV3TWF0cml4LCB2aWV3Tm9ybWFsTWF0cml4KTtcblx0XHRcdFx0XHRwbGFuZS5ub3JtYWwudG9BcnJheShkc3RBcnJheSwgaTQpO1xuXHRcdFx0XHRcdGRzdEFycmF5W2k0ICsgM10gPSBwbGFuZS5jb25zdGFudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3JtLnZhbHVlID0gZHN0QXJyYXk7XG5cdFx0XHR1bmlmb3JtLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRzY29wZS5udW1QbGFuZXMgPSBuUGxhbmVzO1xuXHRcdHNjb3BlLm51bUludGVyc2VjdGlvbiA9IDA7XG5cdFx0cmV0dXJuIGRzdEFycmF5O1xuXHR9XG59XG5cbmZ1bmN0aW9uIFdlYkdMQ3ViZU1hcHMocmVuZGVyZXIpIHtcblx0bGV0IGN1YmVtYXBzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBtYXBUZXh0dXJlTWFwcGluZyh0ZXh0dXJlLCBtYXBwaW5nKSB7XG5cdFx0aWYgKG1hcHBpbmcgPT09IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nKSB7XG5cdFx0XHR0ZXh0dXJlLm1hcHBpbmcgPSBDdWJlUmVmbGVjdGlvbk1hcHBpbmc7XG5cdFx0fSBlbHNlIGlmIChtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZykge1xuXHRcdFx0dGV4dHVyZS5tYXBwaW5nID0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0KHRleHR1cmUpIHtcblx0XHRpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLmlzVGV4dHVyZSAmJiB0ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0ZXh0dXJlLm1hcHBpbmc7XG5cblx0XHRcdGlmIChtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyB8fCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZykge1xuXHRcdFx0XHRpZiAoY3ViZW1hcHMuaGFzKHRleHR1cmUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY3ViZW1hcCA9IGN1YmVtYXBzLmdldCh0ZXh0dXJlKS50ZXh0dXJlO1xuXHRcdFx0XHRcdHJldHVybiBtYXBUZXh0dXJlTWFwcGluZyhjdWJlbWFwLCB0ZXh0dXJlLm1hcHBpbmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdGlmIChpbWFnZSAmJiBpbWFnZS5oZWlnaHQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KGltYWdlLmhlaWdodCAvIDIpO1xuXHRcdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHJlbmRlcmVyLCB0ZXh0dXJlKTtcblx0XHRcdFx0XHRcdGN1YmVtYXBzLnNldCh0ZXh0dXJlLCByZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWFwVGV4dHVyZU1hcHBpbmcocmVuZGVyVGFyZ2V0LnRleHR1cmUsIHRleHR1cmUubWFwcGluZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGltYWdlIG5vdCB5ZXQgcmVhZHkuIHRyeSB0aGUgY29udmVyc2lvbiBuZXh0IGZyYW1lXG5cdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG9uVGV4dHVyZURpc3Bvc2UoZXZlbnQpIHtcblx0XHRjb25zdCB0ZXh0dXJlID0gZXZlbnQudGFyZ2V0O1xuXHRcdHRleHR1cmUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UpO1xuXHRcdGNvbnN0IGN1YmVtYXAgPSBjdWJlbWFwcy5nZXQodGV4dHVyZSk7XG5cblx0XHRpZiAoY3ViZW1hcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjdWJlbWFwcy5kZWxldGUodGV4dHVyZSk7XG5cdFx0XHRjdWJlbWFwLmRpc3Bvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdGN1YmVtYXBzID0gbmV3IFdlYWtNYXAoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xufVxuXG5jbGFzcyBPcnRob2dyYXBoaWNDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xuXHRjb25zdHJ1Y3RvcihsZWZ0ID0gLTEsIHJpZ2h0ID0gMSwgdG9wID0gMSwgYm90dG9tID0gLTEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdPcnRob2dyYXBoaWNDYW1lcmEnO1xuXHRcdHRoaXMuem9vbSA9IDE7XG5cdFx0dGhpcy52aWV3ID0gbnVsbDtcblx0XHR0aGlzLmxlZnQgPSBsZWZ0O1xuXHRcdHRoaXMucmlnaHQgPSByaWdodDtcblx0XHR0aGlzLnRvcCA9IHRvcDtcblx0XHR0aGlzLmJvdHRvbSA9IGJvdHRvbTtcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xuXHRcdHRoaXMuZmFyID0gZmFyO1xuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHR9XG5cblx0Y29weShzb3VyY2UsIHJlY3Vyc2l2ZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlLCByZWN1cnNpdmUpO1xuXHRcdHRoaXMubGVmdCA9IHNvdXJjZS5sZWZ0O1xuXHRcdHRoaXMucmlnaHQgPSBzb3VyY2UucmlnaHQ7XG5cdFx0dGhpcy50b3AgPSBzb3VyY2UudG9wO1xuXHRcdHRoaXMuYm90dG9tID0gc291cmNlLmJvdHRvbTtcblx0XHR0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjtcblx0XHR0aGlzLmZhciA9IHNvdXJjZS5mYXI7XG5cdFx0dGhpcy56b29tID0gc291cmNlLnpvb207XG5cdFx0dGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDogT2JqZWN0LmFzc2lnbih7fSwgc291cmNlLnZpZXcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Vmlld09mZnNldChmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblx0XHRpZiAodGhpcy52aWV3ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLnZpZXcgPSB7XG5cdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGZ1bGxXaWR0aDogMSxcblx0XHRcdFx0ZnVsbEhlaWdodDogMSxcblx0XHRcdFx0b2Zmc2V0WDogMCxcblx0XHRcdFx0b2Zmc2V0WTogMCxcblx0XHRcdFx0d2lkdGg6IDEsXG5cdFx0XHRcdGhlaWdodDogMVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1bGxXaWR0aDtcblx0XHR0aGlzLnZpZXcuZnVsbEhlaWdodCA9IGZ1bGxIZWlnaHQ7XG5cdFx0dGhpcy52aWV3Lm9mZnNldFggPSB4O1xuXHRcdHRoaXMudmlldy5vZmZzZXRZID0geTtcblx0XHR0aGlzLnZpZXcud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLnZpZXcuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHR9XG5cblx0Y2xlYXJWaWV3T2Zmc2V0KCkge1xuXHRcdGlmICh0aGlzLnZpZXcgIT09IG51bGwpIHtcblx0XHRcdHRoaXMudmlldy5lbmFibGVkID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdH1cblxuXHR1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge1xuXHRcdGNvbnN0IGR4ID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpIC8gKDIgKiB0aGlzLnpvb20pO1xuXHRcdGNvbnN0IGR5ID0gKHRoaXMudG9wIC0gdGhpcy5ib3R0b20pIC8gKDIgKiB0aGlzLnpvb20pO1xuXHRcdGNvbnN0IGN4ID0gKHRoaXMucmlnaHQgKyB0aGlzLmxlZnQpIC8gMjtcblx0XHRjb25zdCBjeSA9ICh0aGlzLnRvcCArIHRoaXMuYm90dG9tKSAvIDI7XG5cdFx0bGV0IGxlZnQgPSBjeCAtIGR4O1xuXHRcdGxldCByaWdodCA9IGN4ICsgZHg7XG5cdFx0bGV0IHRvcCA9IGN5ICsgZHk7XG5cdFx0bGV0IGJvdHRvbSA9IGN5IC0gZHk7XG5cblx0XHRpZiAodGhpcy52aWV3ICE9PSBudWxsICYmIHRoaXMudmlldy5lbmFibGVkKSB7XG5cdFx0XHRjb25zdCBzY2FsZVcgPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCkgLyB0aGlzLnZpZXcuZnVsbFdpZHRoIC8gdGhpcy56b29tO1xuXHRcdFx0Y29uc3Qgc2NhbGVIID0gKHRoaXMudG9wIC0gdGhpcy5ib3R0b20pIC8gdGhpcy52aWV3LmZ1bGxIZWlnaHQgLyB0aGlzLnpvb207XG5cdFx0XHRsZWZ0ICs9IHNjYWxlVyAqIHRoaXMudmlldy5vZmZzZXRYO1xuXHRcdFx0cmlnaHQgPSBsZWZ0ICsgc2NhbGVXICogdGhpcy52aWV3LndpZHRoO1xuXHRcdFx0dG9wIC09IHNjYWxlSCAqIHRoaXMudmlldy5vZmZzZXRZO1xuXHRcdFx0Ym90dG9tID0gdG9wIC0gc2NhbGVIICogdGhpcy52aWV3LmhlaWdodDtcblx0XHR9XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIHRoaXMubmVhciwgdGhpcy5mYXIpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGRhdGEub2JqZWN0Lnpvb20gPSB0aGlzLnpvb207XG5cdFx0ZGF0YS5vYmplY3QubGVmdCA9IHRoaXMubGVmdDtcblx0XHRkYXRhLm9iamVjdC5yaWdodCA9IHRoaXMucmlnaHQ7XG5cdFx0ZGF0YS5vYmplY3QudG9wID0gdGhpcy50b3A7XG5cdFx0ZGF0YS5vYmplY3QuYm90dG9tID0gdGhpcy5ib3R0b207XG5cdFx0ZGF0YS5vYmplY3QubmVhciA9IHRoaXMubmVhcjtcblx0XHRkYXRhLm9iamVjdC5mYXIgPSB0aGlzLmZhcjtcblx0XHRpZiAodGhpcy52aWV3ICE9PSBudWxsKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52aWV3KTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cbk9ydGhvZ3JhcGhpY0NhbWVyYS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBSYXdTaGFkZXJNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKHBhcmFtZXRlcnMpO1xuXHRcdHRoaXMudHlwZSA9ICdSYXdTaGFkZXJNYXRlcmlhbCc7XG5cdH1cblxufVxuXG5SYXdTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IExPRF9NSU4gPSA0O1xuY29uc3QgTE9EX01BWCA9IDg7XG5jb25zdCBTSVpFX01BWCA9IE1hdGgucG93KDIsIExPRF9NQVgpOyAvLyBUaGUgc3RhbmRhcmQgZGV2aWF0aW9ucyAocmFkaWFucykgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHRyYSBtaXBzLiBUaGVzZSBhcmVcbi8vIGNob3NlbiB0byBhcHByb3hpbWF0ZSBhIFRyb3dicmlkZ2UtUmVpdHogZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIHRpbWVzIHRoZVxuLy8gZ2VvbWV0cmljIHNoYWRvd2luZyBmdW5jdGlvbi4gVGhlc2Ugc2lnbWEgdmFsdWVzIHNxdWFyZWQgbXVzdCBtYXRjaCB0aGVcbi8vIHZhcmlhbmNlICNkZWZpbmVzIGluIGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudC5nbHNsLmpzLlxuXG5jb25zdCBFWFRSQV9MT0RfU0lHTUEgPSBbMC4xMjUsIDAuMjE1LCAwLjM1LCAwLjQ0NiwgMC41MjYsIDAuNTgyXTtcbmNvbnN0IFRPVEFMX0xPRFMgPSBMT0RfTUFYIC0gTE9EX01JTiArIDEgKyBFWFRSQV9MT0RfU0lHTUEubGVuZ3RoOyAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGJsdXIgZm9yIGxvb3AuIFNtYWxsZXIgc2lnbWFzIHdpbGwgdXNlIGZld2VyXG4vLyBzYW1wbGVzIGFuZCBleGl0IGVhcmx5LCBidXQgbm90IHJlY29tcGlsZSB0aGUgc2hhZGVyLlxuXG5jb25zdCBNQVhfU0FNUExFUyA9IDIwO1xuXG5jb25zdCBfZmxhdENhbWVyYSA9IC8qQF9fUFVSRV9fKi9uZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCk7XG5cbmNvbnN0IHtcblx0X2xvZFBsYW5lcyxcblx0X3NpemVMb2RzLFxuXHRfc2lnbWFzXG59ID0gLypAX19QVVJFX18qL19jcmVhdGVQbGFuZXMoKTtcblxuY29uc3QgX2NsZWFyQ29sb3IgPSAvKkBfX1BVUkVfXyovbmV3IENvbG9yKCk7XG5cbmxldCBfb2xkVGFyZ2V0ID0gbnVsbDsgLy8gR29sZGVuIFJhdGlvXG5cbmNvbnN0IFBISSA9ICgxICsgTWF0aC5zcXJ0KDUpKSAvIDI7XG5jb25zdCBJTlZfUEhJID0gMSAvIFBISTsgLy8gVmVydGljZXMgb2YgYSBkb2RlY2FoZWRyb24gKGV4Y2VwdCB0aGUgb3Bwb3NpdGVzLCB3aGljaCByZXByZXNlbnQgdGhlXG4vLyBzYW1lIGF4aXMpLCB1c2VkIGFzIGF4aXMgZGlyZWN0aW9ucyBldmVubHkgc3ByZWFkIG9uIGEgc3BoZXJlLlxuXG5jb25zdCBfYXhpc0RpcmVjdGlvbnMgPSBbLypAX19QVVJFX18qL25ldyBWZWN0b3IzKDEsIDEsIDEpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoLTEsIDEsIDEpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMSwgMSwgLTEpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoLTEsIDEsIC0xKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKDAsIFBISSwgSU5WX1BISSksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygwLCBQSEksIC1JTlZfUEhJKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKElOVl9QSEksIDAsIFBISSksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygtSU5WX1BISSwgMCwgUEhJKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKFBISSwgSU5WX1BISSwgMCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygtUEhJLCBJTlZfUEhJLCAwKV07XG4vKipcbiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgUHJlZmlsdGVyZWQsIE1pcG1hcHBlZCBSYWRpYW5jZSBFbnZpcm9ubWVudCBNYXBcbiAqIChQTVJFTSkgZnJvbSBhIGN1YmVNYXAgZW52aXJvbm1lbnQgdGV4dHVyZS4gVGhpcyBhbGxvd3MgZGlmZmVyZW50IGxldmVscyBvZlxuICogYmx1ciB0byBiZSBxdWlja2x5IGFjY2Vzc2VkIGJhc2VkIG9uIG1hdGVyaWFsIHJvdWdobmVzcy4gSXQgaXMgcGFja2VkIGludG8gYVxuICogc3BlY2lhbCBDdWJlVVYgZm9ybWF0IHRoYXQgYWxsb3dzIHVzIHRvIHBlcmZvcm0gY3VzdG9tIGludGVycG9sYXRpb24gc28gdGhhdFxuICogd2UgY2FuIHN1cHBvcnQgbm9ubGluZWFyIGZvcm1hdHMgc3VjaCBhcyBSR0JFLiBVbmxpa2UgYSB0cmFkaXRpb25hbCBtaXBtYXBcbiAqIGNoYWluLCBpdCBvbmx5IGdvZXMgZG93biB0byB0aGUgTE9EX01JTiBsZXZlbCAoYWJvdmUpLCBhbmQgdGhlbiBjcmVhdGVzIGV4dHJhXG4gKiBldmVuIG1vcmUgZmlsdGVyZWQgJ21pcHMnIGF0IHRoZSBzYW1lIExPRF9NSU4gcmVzb2x1dGlvbiwgYXNzb2NpYXRlZCB3aXRoXG4gKiBoaWdoZXIgcm91Z2huZXNzIGxldmVscy4gSW4gdGhpcyB3YXkgd2UgbWFpbnRhaW4gcmVzb2x1dGlvbiB0byBzbW9vdGhseVxuICogaW50ZXJwb2xhdGUgZGlmZnVzZSBsaWdodGluZyB3aGlsZSBsaW1pdGluZyBzYW1wbGluZyBjb21wdXRhdGlvbi5cbiAqXG4gKiBQYXBlcjogRmFzdCwgQWNjdXJhdGUgSW1hZ2UtQmFzZWQgTGlnaHRpbmdcbiAqIGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMTV5OHJfVXBLbFU5U3ZWNElMYjBDM3FDUGVjUzhwdkx6L3ZpZXdcbiovXG5cbmNsYXNzIFBNUkVNR2VuZXJhdG9yIHtcblx0Y29uc3RydWN0b3IocmVuZGVyZXIpIHtcblx0XHR0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xuXHRcdHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID0gbnVsbDtcblx0XHR0aGlzLl9ibHVyTWF0ZXJpYWwgPSBfZ2V0Qmx1clNoYWRlcihNQVhfU0FNUExFUyk7XG5cdFx0dGhpcy5fZXF1aXJlY3RTaGFkZXIgPSBudWxsO1xuXHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIgPSBudWxsO1xuXG5cdFx0dGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCk7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYSBzdXBwbGllZCBTY2VuZSwgd2hpY2ggY2FuIGJlIGZhc3RlciB0aGFuIHVzaW5nIGFuXG5cdCAqIGltYWdlIGlmIG5ldHdvcmtpbmcgYmFuZHdpZHRoIGlzIGxvdy4gT3B0aW9uYWwgc2lnbWEgc3BlY2lmaWVzIGEgYmx1ciByYWRpdXNcblx0ICogaW4gcmFkaWFucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzY2VuZSBiZWZvcmUgUE1SRU0gZ2VuZXJhdGlvbi4gT3B0aW9uYWwgbmVhclxuXHQgKiBhbmQgZmFyIHBsYW5lcyBlbnN1cmUgdGhlIHNjZW5lIGlzIHJlbmRlcmVkIGluIGl0cyBlbnRpcmV0eSAodGhlIGN1YmVDYW1lcmFcblx0ICogaXMgcGxhY2VkIGF0IHRoZSBvcmlnaW4pLlxuXHQgKi9cblxuXG5cdGZyb21TY2VuZShzY2VuZSwgc2lnbWEgPSAwLCBuZWFyID0gMC4xLCBmYXIgPSAxMDApIHtcblx0XHRfb2xkVGFyZ2V0ID0gdGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRjb25zdCBjdWJlVVZSZW5kZXJUYXJnZXQgPSB0aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtcblxuXHRcdHRoaXMuX3NjZW5lVG9DdWJlVVYoc2NlbmUsIG5lYXIsIGZhciwgY3ViZVVWUmVuZGVyVGFyZ2V0KTtcblxuXHRcdGlmIChzaWdtYSA+IDApIHtcblx0XHRcdHRoaXMuX2JsdXIoY3ViZVVWUmVuZGVyVGFyZ2V0LCAwLCAwLCBzaWdtYSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYXBwbHlQTVJFTShjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0dGhpcy5fY2xlYW51cChjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblx0fVxuXHQvKipcblx0ICogR2VuZXJhdGVzIGEgUE1SRU0gZnJvbSBhbiBlcXVpcmVjdGFuZ3VsYXIgdGV4dHVyZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBMRFJcblx0ICogb3IgSERSLiBUaGUgaWRlYWwgaW5wdXQgaW1hZ2Ugc2l6ZSBpcyAxayAoMTAyNCB4IDUxMiksXG5cdCAqIGFzIHRoaXMgbWF0Y2hlcyBiZXN0IHdpdGggdGhlIDI1NiB4IDI1NiBjdWJlbWFwIG91dHB1dC5cblx0ICovXG5cblxuXHRmcm9tRXF1aXJlY3Rhbmd1bGFyKGVxdWlyZWN0YW5ndWxhciwgcmVuZGVyVGFyZ2V0ID0gbnVsbCkge1xuXHRcdHJldHVybiB0aGlzLl9mcm9tVGV4dHVyZShlcXVpcmVjdGFuZ3VsYXIsIHJlbmRlclRhcmdldCk7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYW4gY3ViZW1hcCB0ZXh0dXJlLCB3aGljaCBjYW4gYmUgZWl0aGVyIExEUlxuXHQgKiBvciBIRFIuIFRoZSBpZGVhbCBpbnB1dCBjdWJlIHNpemUgaXMgMjU2IHggMjU2LFxuXHQgKiBhcyB0aGlzIG1hdGNoZXMgYmVzdCB3aXRoIHRoZSAyNTYgeCAyNTYgY3ViZW1hcCBvdXRwdXQuXG5cdCAqL1xuXG5cblx0ZnJvbUN1YmVtYXAoY3ViZW1hcCwgcmVuZGVyVGFyZ2V0ID0gbnVsbCkge1xuXHRcdHJldHVybiB0aGlzLl9mcm9tVGV4dHVyZShjdWJlbWFwLCByZW5kZXJUYXJnZXQpO1xuXHR9XG5cdC8qKlxuXHQgKiBQcmUtY29tcGlsZXMgdGhlIGN1YmVtYXAgc2hhZGVyLiBZb3UgY2FuIGdldCBmYXN0ZXIgc3RhcnQtdXAgYnkgaW52b2tpbmcgdGhpcyBtZXRob2QgZHVyaW5nXG5cdCAqIHlvdXIgdGV4dHVyZSdzIG5ldHdvcmsgZmV0Y2ggZm9yIGluY3JlYXNlZCBjb25jdXJyZW5jeS5cblx0ICovXG5cblxuXHRjb21waWxlQ3ViZW1hcFNoYWRlcigpIHtcblx0XHRpZiAodGhpcy5fY3ViZW1hcFNoYWRlciA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3ViZW1hcFNoYWRlciA9IF9nZXRDdWJlbWFwU2hhZGVyKCk7XG5cblx0XHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFByZS1jb21waWxlcyB0aGUgZXF1aXJlY3Rhbmd1bGFyIHNoYWRlci4gWW91IGNhbiBnZXQgZmFzdGVyIHN0YXJ0LXVwIGJ5IGludm9raW5nIHRoaXMgbWV0aG9kIGR1cmluZ1xuXHQgKiB5b3VyIHRleHR1cmUncyBuZXR3b3JrIGZldGNoIGZvciBpbmNyZWFzZWQgY29uY3VycmVuY3kuXG5cdCAqL1xuXG5cblx0Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpIHtcblx0XHRpZiAodGhpcy5fZXF1aXJlY3RTaGFkZXIgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2VxdWlyZWN0U2hhZGVyID0gX2dldEVxdWlyZWN0U2hhZGVyKCk7XG5cblx0XHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcik7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEaXNwb3NlcyBvZiB0aGUgUE1SRU1HZW5lcmF0b3IncyBpbnRlcm5hbCBtZW1vcnkuIE5vdGUgdGhhdCBQTVJFTUdlbmVyYXRvciBpcyBhIHN0YXRpYyBjbGFzcyxcblx0ICogc28geW91IHNob3VsZCBub3QgbmVlZCBtb3JlIHRoYW4gb25lIFBNUkVNR2VuZXJhdG9yIG9iamVjdC4gSWYgeW91IGRvLCBjYWxsaW5nIGRpc3Bvc2UoKSBvblxuXHQgKiBvbmUgb2YgdGhlbSB3aWxsIGNhdXNlIGFueSBvdGhlcnMgdG8gYWxzbyBiZWNvbWUgdW51c2FibGUuXG5cdCAqL1xuXG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdFx0aWYgKHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ICE9PSBudWxsKSB0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCk7XG5cdFx0aWYgKHRoaXMuX2N1YmVtYXBTaGFkZXIgIT09IG51bGwpIHRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpO1xuXHRcdGlmICh0aGlzLl9lcXVpcmVjdFNoYWRlciAhPT0gbnVsbCkgdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfbG9kUGxhbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRfbG9kUGxhbmVzW2ldLmRpc3Bvc2UoKTtcblx0XHR9XG5cdH0gLy8gcHJpdmF0ZSBpbnRlcmZhY2VcblxuXG5cdF9jbGVhbnVwKG91dHB1dFRhcmdldCkge1xuXHRcdHRoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChfb2xkVGFyZ2V0KTtcblxuXHRcdG91dHB1dFRhcmdldC5zY2lzc29yVGVzdCA9IGZhbHNlO1xuXG5cdFx0X3NldFZpZXdwb3J0KG91dHB1dFRhcmdldCwgMCwgMCwgb3V0cHV0VGFyZ2V0LndpZHRoLCBvdXRwdXRUYXJnZXQuaGVpZ2h0KTtcblx0fVxuXG5cdF9mcm9tVGV4dHVyZSh0ZXh0dXJlLCByZW5kZXJUYXJnZXQpIHtcblx0XHRfb2xkVGFyZ2V0ID0gdGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRjb25zdCBjdWJlVVZSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQgfHwgdGhpcy5fYWxsb2NhdGVUYXJnZXRzKHRleHR1cmUpO1xuXG5cdFx0dGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHRleHR1cmUsIGN1YmVVVlJlbmRlclRhcmdldCk7XG5cblx0XHR0aGlzLl9hcHBseVBNUkVNKGN1YmVVVlJlbmRlclRhcmdldCk7XG5cblx0XHR0aGlzLl9jbGVhbnVwKGN1YmVVVlJlbmRlclRhcmdldCk7XG5cblx0XHRyZXR1cm4gY3ViZVVWUmVuZGVyVGFyZ2V0O1xuXHR9XG5cblx0X2FsbG9jYXRlVGFyZ2V0cyh0ZXh0dXJlKSB7XG5cdFx0Ly8gd2FybmluZzogbnVsbCB0ZXh0dXJlIGlzIHZhbGlkXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0bWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRtaW5GaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdGdlbmVyYXRlTWlwbWFwczogZmFsc2UsXG5cdFx0XHR0eXBlOiBIYWxmRmxvYXRUeXBlLFxuXHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0LFxuXHRcdFx0ZW5jb2Rpbmc6IExpbmVhckVuY29kaW5nLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IGZhbHNlXG5cdFx0fTtcblxuXHRcdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IF9jcmVhdGVSZW5kZXJUYXJnZXQocGFyYW1zKTtcblxuXHRcdGN1YmVVVlJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciA9IHRleHR1cmUgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRpZiAodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID0gX2NyZWF0ZVJlbmRlclRhcmdldChwYXJhbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjdWJlVVZSZW5kZXJUYXJnZXQ7XG5cdH1cblxuXHRfY29tcGlsZU1hdGVyaWFsKG1hdGVyaWFsKSB7XG5cdFx0Y29uc3QgdG1wTWVzaCA9IG5ldyBNZXNoKF9sb2RQbGFuZXNbMF0sIG1hdGVyaWFsKTtcblxuXHRcdHRoaXMuX3JlbmRlcmVyLmNvbXBpbGUodG1wTWVzaCwgX2ZsYXRDYW1lcmEpO1xuXHR9XG5cblx0X3NjZW5lVG9DdWJlVVYoc2NlbmUsIG5lYXIsIGZhciwgY3ViZVVWUmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgZm92ID0gOTA7XG5cdFx0Y29uc3QgYXNwZWN0ID0gMTtcblx0XHRjb25zdCBjdWJlQ2FtZXJhID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuXHRcdGNvbnN0IHVwU2lnbiA9IFsxLCAtMSwgMSwgMSwgMSwgMV07XG5cdFx0Y29uc3QgZm9yd2FyZFNpZ24gPSBbMSwgMSwgMSwgLTEsIC0xLCAtMV07XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblx0XHRjb25zdCBvcmlnaW5hbEF1dG9DbGVhciA9IHJlbmRlcmVyLmF1dG9DbGVhcjtcblx0XHRjb25zdCB0b25lTWFwcGluZyA9IHJlbmRlcmVyLnRvbmVNYXBwaW5nO1xuXHRcdHJlbmRlcmVyLmdldENsZWFyQ29sb3IoX2NsZWFyQ29sb3IpO1xuXHRcdHJlbmRlcmVyLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZztcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcblx0XHRjb25zdCBiYWNrZ3JvdW5kTWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0bmFtZTogJ1BNUkVNLkJhY2tncm91bmQnLFxuXHRcdFx0c2lkZTogQmFja1NpZGUsXG5cdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdGRlcHRoVGVzdDogZmFsc2Vcblx0XHR9KTtcblx0XHRjb25zdCBiYWNrZ3JvdW5kQm94ID0gbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KCksIGJhY2tncm91bmRNYXRlcmlhbCk7XG5cdFx0bGV0IHVzZVNvbGlkQ29sb3IgPSBmYWxzZTtcblx0XHRjb25zdCBiYWNrZ3JvdW5kID0gc2NlbmUuYmFja2dyb3VuZDtcblxuXHRcdGlmIChiYWNrZ3JvdW5kKSB7XG5cdFx0XHRpZiAoYmFja2dyb3VuZC5pc0NvbG9yKSB7XG5cdFx0XHRcdGJhY2tncm91bmRNYXRlcmlhbC5jb2xvci5jb3B5KGJhY2tncm91bmQpO1xuXHRcdFx0XHRzY2VuZS5iYWNrZ3JvdW5kID0gbnVsbDtcblx0XHRcdFx0dXNlU29saWRDb2xvciA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJhY2tncm91bmRNYXRlcmlhbC5jb2xvci5jb3B5KF9jbGVhckNvbG9yKTtcblx0XHRcdHVzZVNvbGlkQ29sb3IgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb2wgPSBpICUgMztcblxuXHRcdFx0aWYgKGNvbCA9PT0gMCkge1xuXHRcdFx0XHRjdWJlQ2FtZXJhLnVwLnNldCgwLCB1cFNpZ25baV0sIDApO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdChmb3J3YXJkU2lnbltpXSwgMCwgMCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbCA9PT0gMSkge1xuXHRcdFx0XHRjdWJlQ2FtZXJhLnVwLnNldCgwLCAwLCB1cFNpZ25baV0pO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdCgwLCBmb3J3YXJkU2lnbltpXSwgMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdWJlQ2FtZXJhLnVwLnNldCgwLCB1cFNpZ25baV0sIDApO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdCgwLCAwLCBmb3J3YXJkU2lnbltpXSk7XG5cdFx0XHR9XG5cblx0XHRcdF9zZXRWaWV3cG9ydChjdWJlVVZSZW5kZXJUYXJnZXQsIGNvbCAqIFNJWkVfTUFYLCBpID4gMiA/IFNJWkVfTUFYIDogMCwgU0laRV9NQVgsIFNJWkVfTUFYKTtcblxuXHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGN1YmVVVlJlbmRlclRhcmdldCk7XG5cblx0XHRcdGlmICh1c2VTb2xpZENvbG9yKSB7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbmRlcihiYWNrZ3JvdW5kQm94LCBjdWJlQ2FtZXJhKTtcblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjdWJlQ2FtZXJhKTtcblx0XHR9XG5cblx0XHRiYWNrZ3JvdW5kQm94Lmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHRiYWNrZ3JvdW5kQm94Lm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRyZW5kZXJlci50b25lTWFwcGluZyA9IHRvbmVNYXBwaW5nO1xuXHRcdHJlbmRlcmVyLmF1dG9DbGVhciA9IG9yaWdpbmFsQXV0b0NsZWFyO1xuXHRcdHNjZW5lLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xuXHR9XG5cblx0X3RleHR1cmVUb0N1YmVVVih0ZXh0dXJlLCBjdWJlVVZSZW5kZXJUYXJnZXQpIHtcblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXHRcdGNvbnN0IGlzQ3ViZVRleHR1cmUgPSB0ZXh0dXJlLm1hcHBpbmcgPT09IEN1YmVSZWZsZWN0aW9uTWFwcGluZyB8fCB0ZXh0dXJlLm1hcHBpbmcgPT09IEN1YmVSZWZyYWN0aW9uTWFwcGluZztcblxuXHRcdGlmIChpc0N1YmVUZXh0dXJlKSB7XG5cdFx0XHRpZiAodGhpcy5fY3ViZW1hcFNoYWRlciA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyID0gX2dldEN1YmVtYXBTaGFkZXIoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlID0gdGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlID8gLTEgOiAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5fZXF1aXJlY3RTaGFkZXIgPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5fZXF1aXJlY3RTaGFkZXIgPSBfZ2V0RXF1aXJlY3RTaGFkZXIoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IGlzQ3ViZVRleHR1cmUgPyB0aGlzLl9jdWJlbWFwU2hhZGVyIDogdGhpcy5fZXF1aXJlY3RTaGFkZXI7XG5cdFx0Y29uc3QgbWVzaCA9IG5ldyBNZXNoKF9sb2RQbGFuZXNbMF0sIG1hdGVyaWFsKTtcblx0XHRjb25zdCB1bmlmb3JtcyA9IG1hdGVyaWFsLnVuaWZvcm1zO1xuXHRcdHVuaWZvcm1zWydlbnZNYXAnXS52YWx1ZSA9IHRleHR1cmU7XG5cblx0XHRpZiAoIWlzQ3ViZVRleHR1cmUpIHtcblx0XHRcdHVuaWZvcm1zWyd0ZXhlbFNpemUnXS52YWx1ZS5zZXQoMS4wIC8gdGV4dHVyZS5pbWFnZS53aWR0aCwgMS4wIC8gdGV4dHVyZS5pbWFnZS5oZWlnaHQpO1xuXHRcdH1cblxuXHRcdF9zZXRWaWV3cG9ydChjdWJlVVZSZW5kZXJUYXJnZXQsIDAsIDAsIDMgKiBTSVpFX01BWCwgMiAqIFNJWkVfTUFYKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihtZXNoLCBfZmxhdENhbWVyYSk7XG5cdH1cblxuXHRfYXBwbHlQTVJFTShjdWJlVVZSZW5kZXJUYXJnZXQpIHtcblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXHRcdGNvbnN0IGF1dG9DbGVhciA9IHJlbmRlcmVyLmF1dG9DbGVhcjtcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgVE9UQUxfTE9EUzsgaSsrKSB7XG5cdFx0XHRjb25zdCBzaWdtYSA9IE1hdGguc3FydChfc2lnbWFzW2ldICogX3NpZ21hc1tpXSAtIF9zaWdtYXNbaSAtIDFdICogX3NpZ21hc1tpIC0gMV0pO1xuXHRcdFx0Y29uc3QgcG9sZUF4aXMgPSBfYXhpc0RpcmVjdGlvbnNbKGkgLSAxKSAlIF9heGlzRGlyZWN0aW9ucy5sZW5ndGhdO1xuXG5cdFx0XHR0aGlzLl9ibHVyKGN1YmVVVlJlbmRlclRhcmdldCwgaSAtIDEsIGksIHNpZ21hLCBwb2xlQXhpcyk7XG5cdFx0fVxuXG5cdFx0cmVuZGVyZXIuYXV0b0NsZWFyID0gYXV0b0NsZWFyO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgdHdvLXBhc3MgR2F1c3NpYW4gYmx1ciBmb3IgYSBjdWJlbWFwLiBOb3JtYWxseSB0aGlzIGlzIGRvbmVcblx0ICogdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LCBidXQgdGhpcyBicmVha3MgZG93biBvbiBhIGN1YmUuIEhlcmUgd2UgYXBwbHlcblx0ICogdGhlIGJsdXIgbGF0aXR1ZGluYWxseSAoYXJvdW5kIHRoZSBwb2xlcyksIGFuZCB0aGVuIGxvbmdpdHVkaW5hbGx5ICh0b3dhcmRzXG5cdCAqIHRoZSBwb2xlcykgdG8gYXBwcm94aW1hdGUgdGhlIG9ydGhvZ29uYWxseS1zZXBhcmFibGUgYmx1ci4gSXQgaXMgbGVhc3Rcblx0ICogYWNjdXJhdGUgYXQgdGhlIHBvbGVzLCBidXQgc3RpbGwgZG9lcyBhIGRlY2VudCBqb2IuXG5cdCAqL1xuXG5cblx0X2JsdXIoY3ViZVVWUmVuZGVyVGFyZ2V0LCBsb2RJbiwgbG9kT3V0LCBzaWdtYSwgcG9sZUF4aXMpIHtcblx0XHRjb25zdCBwaW5nUG9uZ1JlbmRlclRhcmdldCA9IHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O1xuXG5cdFx0dGhpcy5faGFsZkJsdXIoY3ViZVVWUmVuZGVyVGFyZ2V0LCBwaW5nUG9uZ1JlbmRlclRhcmdldCwgbG9kSW4sIGxvZE91dCwgc2lnbWEsICdsYXRpdHVkaW5hbCcsIHBvbGVBeGlzKTtcblxuXHRcdHRoaXMuX2hhbGZCbHVyKHBpbmdQb25nUmVuZGVyVGFyZ2V0LCBjdWJlVVZSZW5kZXJUYXJnZXQsIGxvZE91dCwgbG9kT3V0LCBzaWdtYSwgJ2xvbmdpdHVkaW5hbCcsIHBvbGVBeGlzKTtcblx0fVxuXG5cdF9oYWxmQmx1cih0YXJnZXRJbiwgdGFyZ2V0T3V0LCBsb2RJbiwgbG9kT3V0LCBzaWdtYVJhZGlhbnMsIGRpcmVjdGlvbiwgcG9sZUF4aXMpIHtcblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXHRcdGNvbnN0IGJsdXJNYXRlcmlhbCA9IHRoaXMuX2JsdXJNYXRlcmlhbDtcblxuXHRcdGlmIChkaXJlY3Rpb24gIT09ICdsYXRpdHVkaW5hbCcgJiYgZGlyZWN0aW9uICE9PSAnbG9uZ2l0dWRpbmFsJykge1xuXHRcdFx0Y29uc29sZS5lcnJvcignYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsIScpO1xuXHRcdH0gLy8gTnVtYmVyIG9mIHN0YW5kYXJkIGRldmlhdGlvbnMgYXQgd2hpY2ggdG8gY3V0IG9mZiB0aGUgZGlzY3JldGUgYXBwcm94aW1hdGlvbi5cblxuXG5cdFx0Y29uc3QgU1RBTkRBUkRfREVWSUFUSU9OUyA9IDM7XG5cdFx0Y29uc3QgYmx1ck1lc2ggPSBuZXcgTWVzaChfbG9kUGxhbmVzW2xvZE91dF0sIGJsdXJNYXRlcmlhbCk7XG5cdFx0Y29uc3QgYmx1clVuaWZvcm1zID0gYmx1ck1hdGVyaWFsLnVuaWZvcm1zO1xuXHRcdGNvbnN0IHBpeGVscyA9IF9zaXplTG9kc1tsb2RJbl0gLSAxO1xuXHRcdGNvbnN0IHJhZGlhbnNQZXJQaXhlbCA9IGlzRmluaXRlKHNpZ21hUmFkaWFucykgPyBNYXRoLlBJIC8gKDIgKiBwaXhlbHMpIDogMiAqIE1hdGguUEkgLyAoMiAqIE1BWF9TQU1QTEVTIC0gMSk7XG5cdFx0Y29uc3Qgc2lnbWFQaXhlbHMgPSBzaWdtYVJhZGlhbnMgLyByYWRpYW5zUGVyUGl4ZWw7XG5cdFx0Y29uc3Qgc2FtcGxlcyA9IGlzRmluaXRlKHNpZ21hUmFkaWFucykgPyAxICsgTWF0aC5mbG9vcihTVEFOREFSRF9ERVZJQVRJT05TICogc2lnbWFQaXhlbHMpIDogTUFYX1NBTVBMRVM7XG5cblx0XHRpZiAoc2FtcGxlcyA+IE1BWF9TQU1QTEVTKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtzaWdtYVJhZGlhbnN9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7c2FtcGxlc30gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke01BWF9TQU1QTEVTfWApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHdlaWdodHMgPSBbXTtcblx0XHRsZXQgc3VtID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX1NBTVBMRVM7ICsraSkge1xuXHRcdFx0Y29uc3QgeCA9IGkgLyBzaWdtYVBpeGVscztcblx0XHRcdGNvbnN0IHdlaWdodCA9IE1hdGguZXhwKC14ICogeCAvIDIpO1xuXHRcdFx0d2VpZ2h0cy5wdXNoKHdlaWdodCk7XG5cblx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdHN1bSArPSB3ZWlnaHQ7XG5cdFx0XHR9IGVsc2UgaWYgKGkgPCBzYW1wbGVzKSB7XG5cdFx0XHRcdHN1bSArPSAyICogd2VpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2VpZ2h0c1tpXSA9IHdlaWdodHNbaV0gLyBzdW07XG5cdFx0fVxuXG5cdFx0Ymx1clVuaWZvcm1zWydlbnZNYXAnXS52YWx1ZSA9IHRhcmdldEluLnRleHR1cmU7XG5cdFx0Ymx1clVuaWZvcm1zWydzYW1wbGVzJ10udmFsdWUgPSBzYW1wbGVzO1xuXHRcdGJsdXJVbmlmb3Jtc1snd2VpZ2h0cyddLnZhbHVlID0gd2VpZ2h0cztcblx0XHRibHVyVW5pZm9ybXNbJ2xhdGl0dWRpbmFsJ10udmFsdWUgPSBkaXJlY3Rpb24gPT09ICdsYXRpdHVkaW5hbCc7XG5cblx0XHRpZiAocG9sZUF4aXMpIHtcblx0XHRcdGJsdXJVbmlmb3Jtc1sncG9sZUF4aXMnXS52YWx1ZSA9IHBvbGVBeGlzO1xuXHRcdH1cblxuXHRcdGJsdXJVbmlmb3Jtc1snZFRoZXRhJ10udmFsdWUgPSByYWRpYW5zUGVyUGl4ZWw7XG5cdFx0Ymx1clVuaWZvcm1zWydtaXBJbnQnXS52YWx1ZSA9IExPRF9NQVggLSBsb2RJbjtcblx0XHRjb25zdCBvdXRwdXRTaXplID0gX3NpemVMb2RzW2xvZE91dF07XG5cdFx0Y29uc3QgeCA9IDMgKiBNYXRoLm1heCgwLCBTSVpFX01BWCAtIDIgKiBvdXRwdXRTaXplKTtcblx0XHRjb25zdCB5ID0gKGxvZE91dCA9PT0gMCA/IDAgOiAyICogU0laRV9NQVgpICsgMiAqIG91dHB1dFNpemUgKiAobG9kT3V0ID4gTE9EX01BWCAtIExPRF9NSU4gPyBsb2RPdXQgLSBMT0RfTUFYICsgTE9EX01JTiA6IDApO1xuXG5cdFx0X3NldFZpZXdwb3J0KHRhcmdldE91dCwgeCwgeSwgMyAqIG91dHB1dFNpemUsIDIgKiBvdXRwdXRTaXplKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0YXJnZXRPdXQpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihibHVyTWVzaCwgX2ZsYXRDYW1lcmEpO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVBsYW5lcygpIHtcblx0Y29uc3QgX2xvZFBsYW5lcyA9IFtdO1xuXHRjb25zdCBfc2l6ZUxvZHMgPSBbXTtcblx0Y29uc3QgX3NpZ21hcyA9IFtdO1xuXHRsZXQgbG9kID0gTE9EX01BWDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IFRPVEFMX0xPRFM7IGkrKykge1xuXHRcdGNvbnN0IHNpemVMb2QgPSBNYXRoLnBvdygyLCBsb2QpO1xuXG5cdFx0X3NpemVMb2RzLnB1c2goc2l6ZUxvZCk7XG5cblx0XHRsZXQgc2lnbWEgPSAxLjAgLyBzaXplTG9kO1xuXG5cdFx0aWYgKGkgPiBMT0RfTUFYIC0gTE9EX01JTikge1xuXHRcdFx0c2lnbWEgPSBFWFRSQV9MT0RfU0lHTUFbaSAtIExPRF9NQVggKyBMT0RfTUlOIC0gMV07XG5cdFx0fSBlbHNlIGlmIChpID09PSAwKSB7XG5cdFx0XHRzaWdtYSA9IDA7XG5cdFx0fVxuXG5cdFx0X3NpZ21hcy5wdXNoKHNpZ21hKTtcblxuXHRcdGNvbnN0IHRleGVsU2l6ZSA9IDEuMCAvIChzaXplTG9kIC0gMSk7XG5cdFx0Y29uc3QgbWluID0gLXRleGVsU2l6ZSAvIDI7XG5cdFx0Y29uc3QgbWF4ID0gMSArIHRleGVsU2l6ZSAvIDI7XG5cdFx0Y29uc3QgdXYxID0gW21pbiwgbWluLCBtYXgsIG1pbiwgbWF4LCBtYXgsIG1pbiwgbWluLCBtYXgsIG1heCwgbWluLCBtYXhdO1xuXHRcdGNvbnN0IGN1YmVGYWNlcyA9IDY7XG5cdFx0Y29uc3QgdmVydGljZXMgPSA2O1xuXHRcdGNvbnN0IHBvc2l0aW9uU2l6ZSA9IDM7XG5cdFx0Y29uc3QgdXZTaXplID0gMjtcblx0XHRjb25zdCBmYWNlSW5kZXhTaXplID0gMTtcblx0XHRjb25zdCBwb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25TaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IEZsb2F0MzJBcnJheSh1dlNpemUgKiB2ZXJ0aWNlcyAqIGN1YmVGYWNlcyk7XG5cdFx0Y29uc3QgZmFjZUluZGV4ID0gbmV3IEZsb2F0MzJBcnJheShmYWNlSW5kZXhTaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMpO1xuXG5cdFx0Zm9yIChsZXQgZmFjZSA9IDA7IGZhY2UgPCBjdWJlRmFjZXM7IGZhY2UrKykge1xuXHRcdFx0Y29uc3QgeCA9IGZhY2UgJSAzICogMiAvIDMgLSAxO1xuXHRcdFx0Y29uc3QgeSA9IGZhY2UgPiAyID8gMCA6IC0xO1xuXHRcdFx0Y29uc3QgY29vcmRpbmF0ZXMgPSBbeCwgeSwgMCwgeCArIDIgLyAzLCB5LCAwLCB4ICsgMiAvIDMsIHkgKyAxLCAwLCB4LCB5LCAwLCB4ICsgMiAvIDMsIHkgKyAxLCAwLCB4LCB5ICsgMSwgMF07XG5cdFx0XHRwb3NpdGlvbi5zZXQoY29vcmRpbmF0ZXMsIHBvc2l0aW9uU2l6ZSAqIHZlcnRpY2VzICogZmFjZSk7XG5cdFx0XHR1di5zZXQodXYxLCB1dlNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UpO1xuXHRcdFx0Y29uc3QgZmlsbCA9IFtmYWNlLCBmYWNlLCBmYWNlLCBmYWNlLCBmYWNlLCBmYWNlXTtcblx0XHRcdGZhY2VJbmRleC5zZXQoZmlsbCwgZmFjZUluZGV4U2l6ZSAqIHZlcnRpY2VzICogZmFjZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGxhbmVzID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0cGxhbmVzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBwb3NpdGlvblNpemUpKTtcblx0XHRwbGFuZXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUodXYsIHV2U2l6ZSkpO1xuXHRcdHBsYW5lcy5zZXRBdHRyaWJ1dGUoJ2ZhY2VJbmRleCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoZmFjZUluZGV4LCBmYWNlSW5kZXhTaXplKSk7XG5cblx0XHRfbG9kUGxhbmVzLnB1c2gocGxhbmVzKTtcblxuXHRcdGlmIChsb2QgPiBMT0RfTUlOKSB7XG5cdFx0XHRsb2QtLTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF9sb2RQbGFuZXMsXG5cdFx0X3NpemVMb2RzLFxuXHRcdF9zaWdtYXNcblx0fTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVJlbmRlclRhcmdldChwYXJhbXMpIHtcblx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KDMgKiBTSVpFX01BWCwgMyAqIFNJWkVfTUFYLCBwYXJhbXMpO1xuXHRjdWJlVVZSZW5kZXJUYXJnZXQudGV4dHVyZS5tYXBwaW5nID0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc7XG5cdGN1YmVVVlJlbmRlclRhcmdldC50ZXh0dXJlLm5hbWUgPSAnUE1SRU0uY3ViZVV2Jztcblx0Y3ViZVVWUmVuZGVyVGFyZ2V0LnNjaXNzb3JUZXN0ID0gdHJ1ZTtcblx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcbn1cblxuZnVuY3Rpb24gX3NldFZpZXdwb3J0KHRhcmdldCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuXHR0YXJnZXQudmlld3BvcnQuc2V0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHR0YXJnZXQuc2Npc3Nvci5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRCbHVyU2hhZGVyKG1heFNhbXBsZXMpIHtcblx0Y29uc3Qgd2VpZ2h0cyA9IG5ldyBGbG9hdDMyQXJyYXkobWF4U2FtcGxlcyk7XG5cdGNvbnN0IHBvbGVBeGlzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5cdGNvbnN0IHNoYWRlck1hdGVyaWFsID0gbmV3IFJhd1NoYWRlck1hdGVyaWFsKHtcblx0XHRuYW1lOiAnU3BoZXJpY2FsR2F1c3NpYW5CbHVyJyxcblx0XHRkZWZpbmVzOiB7XG5cdFx0XHQnbic6IG1heFNhbXBsZXNcblx0XHR9LFxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHQnZW52TWFwJzoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fSxcblx0XHRcdCdzYW1wbGVzJzoge1xuXHRcdFx0XHR2YWx1ZTogMVxuXHRcdFx0fSxcblx0XHRcdCd3ZWlnaHRzJzoge1xuXHRcdFx0XHR2YWx1ZTogd2VpZ2h0c1xuXHRcdFx0fSxcblx0XHRcdCdsYXRpdHVkaW5hbCc6IHtcblx0XHRcdFx0dmFsdWU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0J2RUaGV0YSc6IHtcblx0XHRcdFx0dmFsdWU6IDBcblx0XHRcdH0sXG5cdFx0XHQnbWlwSW50Jzoge1xuXHRcdFx0XHR2YWx1ZTogMFxuXHRcdFx0fSxcblx0XHRcdCdwb2xlQXhpcyc6IHtcblx0XHRcdFx0dmFsdWU6IHBvbGVBeGlzXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSxcblx0XHRmcmFnbWVudFNoYWRlcjpcblx0XHQvKiBnbHNsICovXG5cdFx0YFxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0YCxcblx0XHRibGVuZGluZzogTm9CbGVuZGluZyxcblx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gc2hhZGVyTWF0ZXJpYWw7XG59XG5cbmZ1bmN0aW9uIF9nZXRFcXVpcmVjdFNoYWRlcigpIHtcblx0Y29uc3QgdGV4ZWxTaXplID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdGNvbnN0IHNoYWRlck1hdGVyaWFsID0gbmV3IFJhd1NoYWRlck1hdGVyaWFsKHtcblx0XHRuYW1lOiAnRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYnLFxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHQnZW52TWFwJzoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fSxcblx0XHRcdCd0ZXhlbFNpemUnOiB7XG5cdFx0XHRcdHZhbHVlOiB0ZXhlbFNpemVcblx0XHRcdH1cblx0XHR9LFxuXHRcdHZlcnRleFNoYWRlcjogX2dldENvbW1vblZlcnRleFNoYWRlcigpLFxuXHRcdGZyYWdtZW50U2hhZGVyOlxuXHRcdC8qIGdsc2wgKi9cblx0XHRgXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcblxuXHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXG5cdFx0XHRcdHZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cdFx0XHRcdHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTtcblx0XHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdFx0dmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di55ICs9IHRleGVsU2l6ZS55O1xuXHRcdFx0XHR2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCAtPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0fVxuXHRcdGAsXG5cdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmcsXG5cdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRkZXB0aFdyaXRlOiBmYWxzZVxuXHR9KTtcblx0cmV0dXJuIHNoYWRlck1hdGVyaWFsO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q3ViZW1hcFNoYWRlcigpIHtcblx0Y29uc3Qgc2hhZGVyTWF0ZXJpYWwgPSBuZXcgUmF3U2hhZGVyTWF0ZXJpYWwoe1xuXHRcdG5hbWU6ICdDdWJlbWFwVG9DdWJlVVYnLFxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHQnZW52TWFwJzoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fSxcblx0XHRcdCdmbGlwRW52TWFwJzoge1xuXHRcdFx0XHR2YWx1ZTogLTFcblx0XHRcdH1cblx0XHR9LFxuXHRcdHZlcnRleFNoYWRlcjogX2dldENvbW1vblZlcnRleFNoYWRlcigpLFxuXHRcdGZyYWdtZW50U2hhZGVyOlxuXHRcdC8qIGdsc2wgKi9cblx0XHRgXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0YCxcblx0XHRibGVuZGluZzogTm9CbGVuZGluZyxcblx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gc2hhZGVyTWF0ZXJpYWw7XG59XG5cbmZ1bmN0aW9uIF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSB7XG5cdHJldHVybiAoXG5cdFx0LyogZ2xzbCAqL1xuXHRcdGBcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHRgXG5cdCk7XG59XG5cbmZ1bmN0aW9uIFdlYkdMQ3ViZVVWTWFwcyhyZW5kZXJlcikge1xuXHRsZXQgY3ViZVVWbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cdGxldCBwbXJlbUdlbmVyYXRvciA9IG51bGw7XG5cblx0ZnVuY3Rpb24gZ2V0KHRleHR1cmUpIHtcblx0XHRpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLmlzVGV4dHVyZSkge1xuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRleHR1cmUubWFwcGluZztcblx0XHRcdGNvbnN0IGlzRXF1aXJlY3RNYXAgPSBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyB8fCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZztcblx0XHRcdGNvbnN0IGlzQ3ViZU1hcCA9IG1hcHBpbmcgPT09IEN1YmVSZWZsZWN0aW9uTWFwcGluZyB8fCBtYXBwaW5nID09PSBDdWJlUmVmcmFjdGlvbk1hcHBpbmc7IC8vIGVxdWlyZWN0L2N1YmUgbWFwIHRvIGN1YmVVViBjb252ZXJzaW9uXG5cblx0XHRcdGlmIChpc0VxdWlyZWN0TWFwIHx8IGlzQ3ViZU1hcCkge1xuXHRcdFx0XHRpZiAodGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgJiYgdGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IHJlbmRlclRhcmdldCA9IGN1YmVVVm1hcHMuZ2V0KHRleHR1cmUpO1xuXHRcdFx0XHRcdGlmIChwbXJlbUdlbmVyYXRvciA9PT0gbnVsbCkgcG1yZW1HZW5lcmF0b3IgPSBuZXcgUE1SRU1HZW5lcmF0b3IocmVuZGVyZXIpO1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldCA9IGlzRXF1aXJlY3RNYXAgPyBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHRleHR1cmUsIHJlbmRlclRhcmdldCkgOiBwbXJlbUdlbmVyYXRvci5mcm9tQ3ViZW1hcCh0ZXh0dXJlLCByZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRcdGN1YmVVVm1hcHMuc2V0KHRleHR1cmUsIHJlbmRlclRhcmdldCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChjdWJlVVZtYXBzLmhhcyh0ZXh0dXJlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN1YmVVVm1hcHMuZ2V0KHRleHR1cmUpLnRleHR1cmU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzRXF1aXJlY3RNYXAgJiYgaW1hZ2UgJiYgaW1hZ2UuaGVpZ2h0ID4gMCB8fCBpc0N1YmVNYXAgJiYgaW1hZ2UgJiYgaXNDdWJlVGV4dHVyZUNvbXBsZXRlKGltYWdlKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAocG1yZW1HZW5lcmF0b3IgPT09IG51bGwpIHBtcmVtR2VuZXJhdG9yID0gbmV3IFBNUkVNR2VuZXJhdG9yKHJlbmRlcmVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gaXNFcXVpcmVjdE1hcCA/IHBtcmVtR2VuZXJhdG9yLmZyb21FcXVpcmVjdGFuZ3VsYXIodGV4dHVyZSkgOiBwbXJlbUdlbmVyYXRvci5mcm9tQ3ViZW1hcCh0ZXh0dXJlKTtcblx0XHRcdFx0XHRcdFx0Y3ViZVVWbWFwcy5zZXQodGV4dHVyZSwgcmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIGltYWdlIG5vdCB5ZXQgcmVhZHkuIHRyeSB0aGUgY29udmVyc2lvbiBuZXh0IGZyYW1lXG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNDdWJlVGV4dHVyZUNvbXBsZXRlKGltYWdlKSB7XG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRjb25zdCBsZW5ndGggPSA2O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGltYWdlW2ldICE9PSB1bmRlZmluZWQpIGNvdW50Kys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvdW50ID09PSBsZW5ndGg7XG5cdH1cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKGV2ZW50KSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IGV2ZW50LnRhcmdldDtcblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlKTtcblx0XHRjb25zdCBjdWJlbWFwVVYgPSBjdWJlVVZtYXBzLmdldCh0ZXh0dXJlKTtcblxuXHRcdGlmIChjdWJlbWFwVVYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3ViZVVWbWFwcy5kZWxldGUodGV4dHVyZSk7XG5cdFx0XHRjdWJlbWFwVVYuZGlzcG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0Y3ViZVVWbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0XHRpZiAocG1yZW1HZW5lcmF0b3IgIT09IG51bGwpIHtcblx0XHRcdHBtcmVtR2VuZXJhdG9yLmRpc3Bvc2UoKTtcblx0XHRcdHBtcmVtR2VuZXJhdG9yID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xFeHRlbnNpb25zKGdsKSB7XG5cdGNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuXHRmdW5jdGlvbiBnZXRFeHRlbnNpb24obmFtZSkge1xuXHRcdGlmIChleHRlbnNpb25zW25hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBleHRlbnNpb25zW25hbWVdO1xuXHRcdH1cblxuXHRcdGxldCBleHRlbnNpb247XG5cblx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdGNhc2UgJ1dFQkdMX2RlcHRoX3RleHR1cmUnOlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKSB8fCBnbC5nZXRFeHRlbnNpb24oJ01PWl9XRUJHTF9kZXB0aF90ZXh0dXJlJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZScpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fCBnbC5nZXRFeHRlbnNpb24oJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fCBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycpIHx8IGdsLmdldEV4dGVuc2lvbignTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0Yyc6XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24obmFtZSk7XG5cdFx0fVxuXG5cdFx0ZXh0ZW5zaW9uc1tuYW1lXSA9IGV4dGVuc2lvbjtcblx0XHRyZXR1cm4gZXh0ZW5zaW9uO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRoYXM6IGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gZ2V0RXh0ZW5zaW9uKG5hbWUpICE9PSBudWxsO1xuXHRcdH0sXG5cdFx0aW5pdDogZnVuY3Rpb24gKGNhcGFiaWxpdGllcykge1xuXHRcdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMikge1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdldEV4dGVuc2lvbignV0VCR0xfZGVwdGhfdGV4dHVyZScpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2Zsb2F0Jyk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbignT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbignT0VTX2VsZW1lbnRfaW5kZXhfdWludCcpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbignQU5HTEVfaW5zdGFuY2VkX2FycmF5cycpO1xuXHRcdFx0fVxuXG5cdFx0XHRnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicpO1xuXHRcdFx0Z2V0RXh0ZW5zaW9uKCdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnKTtcblx0XHRcdGdldEV4dGVuc2lvbignV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyk7XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBnZXRFeHRlbnNpb24obmFtZSk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAnICsgbmFtZSArICcgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHRlbnNpb247XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTEdlb21ldHJpZXMoZ2wsIGF0dHJpYnV0ZXMsIGluZm8sIGJpbmRpbmdTdGF0ZXMpIHtcblx0Y29uc3QgZ2VvbWV0cmllcyA9IHt9O1xuXHRjb25zdCB3aXJlZnJhbWVBdHRyaWJ1dGVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBvbkdlb21ldHJ5RGlzcG9zZShldmVudCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0aWYgKGdlb21ldHJ5LmluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnJlbW92ZShnZW9tZXRyeS5pbmRleCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcblx0XHRcdGF0dHJpYnV0ZXMucmVtb3ZlKGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pO1xuXHRcdH1cblxuXHRcdGdlb21ldHJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvbkdlb21ldHJ5RGlzcG9zZSk7XG5cdFx0ZGVsZXRlIGdlb21ldHJpZXNbZ2VvbWV0cnkuaWRdO1xuXHRcdGNvbnN0IGF0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KGdlb21ldHJ5KTtcblxuXHRcdGlmIChhdHRyaWJ1dGUpIHtcblx0XHRcdGF0dHJpYnV0ZXMucmVtb3ZlKGF0dHJpYnV0ZSk7XG5cdFx0XHR3aXJlZnJhbWVBdHRyaWJ1dGVzLmRlbGV0ZShnZW9tZXRyeSk7XG5cdFx0fVxuXG5cdFx0YmluZGluZ1N0YXRlcy5yZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeShnZW9tZXRyeSk7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGVsZXRlIGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50O1xuXHRcdH0gLy9cblxuXG5cdFx0aW5mby5tZW1vcnkuZ2VvbWV0cmllcy0tO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0KG9iamVjdCwgZ2VvbWV0cnkpIHtcblx0XHRpZiAoZ2VvbWV0cmllc1tnZW9tZXRyeS5pZF0gPT09IHRydWUpIHJldHVybiBnZW9tZXRyeTtcblx0XHRnZW9tZXRyeS5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2UpO1xuXHRcdGdlb21ldHJpZXNbZ2VvbWV0cnkuaWRdID0gdHJ1ZTtcblx0XHRpbmZvLm1lbW9yeS5nZW9tZXRyaWVzKys7XG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlKGdlb21ldHJ5KSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlczsgLy8gVXBkYXRpbmcgaW5kZXggYnVmZmVyIGluIFZBTyBub3cuIFNlZSBXZWJHTEJpbmRpbmdTdGF0ZXMuXG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gZ2VvbWV0cnlBdHRyaWJ1dGVzKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZShnZW9tZXRyeUF0dHJpYnV0ZXNbbmFtZV0sIGdsLkFSUkFZX0JVRkZFUik7XG5cdFx0fSAvLyBtb3JwaCB0YXJnZXRzXG5cblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGFycmF5ID0gbW9ycGhBdHRyaWJ1dGVzW25hbWVdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZShhcnJheVtpXSwgZ2wuQVJSQVlfQlVGRkVSKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVXaXJlZnJhbWVBdHRyaWJ1dGUoZ2VvbWV0cnkpIHtcblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgZ2VvbWV0cnlJbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdGNvbnN0IGdlb21ldHJ5UG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGxldCB2ZXJzaW9uID0gMDtcblxuXHRcdGlmIChnZW9tZXRyeUluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBhcnJheSA9IGdlb21ldHJ5SW5kZXguYXJyYXk7XG5cdFx0XHR2ZXJzaW9uID0gZ2VvbWV0cnlJbmRleC52ZXJzaW9uO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMykge1xuXHRcdFx0XHRjb25zdCBhID0gYXJyYXlbaSArIDBdO1xuXHRcdFx0XHRjb25zdCBiID0gYXJyYXlbaSArIDFdO1xuXHRcdFx0XHRjb25zdCBjID0gYXJyYXlbaSArIDJdO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgYiwgYywgYywgYSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFycmF5ID0gZ2VvbWV0cnlQb3NpdGlvbi5hcnJheTtcblx0XHRcdHZlcnNpb24gPSBnZW9tZXRyeVBvc2l0aW9uLnZlcnNpb247XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoIC8gMyAtIDE7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRcdFx0Y29uc3QgYSA9IGkgKyAwO1xuXHRcdFx0XHRjb25zdCBiID0gaSArIDE7XG5cdFx0XHRcdGNvbnN0IGMgPSBpICsgMjtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGIsIGMsIGMsIGEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZSA9IG5ldyAoYXJyYXlOZWVkc1VpbnQzMihpbmRpY2VzKSA/IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA6IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSkoaW5kaWNlcywgMSk7XG5cdFx0YXR0cmlidXRlLnZlcnNpb24gPSB2ZXJzaW9uOyAvLyBVcGRhdGluZyBpbmRleCBidWZmZXIgaW4gVkFPIG5vdy4gU2VlIFdlYkdMQmluZGluZ1N0YXRlc1xuXHRcdC8vXG5cblx0XHRjb25zdCBwcmV2aW91c0F0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KGdlb21ldHJ5KTtcblx0XHRpZiAocHJldmlvdXNBdHRyaWJ1dGUpIGF0dHJpYnV0ZXMucmVtb3ZlKHByZXZpb3VzQXR0cmlidXRlKTsgLy9cblxuXHRcdHdpcmVmcmFtZUF0dHJpYnV0ZXMuc2V0KGdlb21ldHJ5LCBhdHRyaWJ1dGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0V2lyZWZyYW1lQXR0cmlidXRlKGdlb21ldHJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudEF0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KGdlb21ldHJ5KTtcblxuXHRcdGlmIChjdXJyZW50QXR0cmlidXRlKSB7XG5cdFx0XHRjb25zdCBnZW9tZXRyeUluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cblx0XHRcdGlmIChnZW9tZXRyeUluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBhdHRyaWJ1dGUgaXMgb2Jzb2xldGUsIGNyZWF0ZSBhIG5ldyBvbmVcblx0XHRcdFx0aWYgKGN1cnJlbnRBdHRyaWJ1dGUudmVyc2lvbiA8IGdlb21ldHJ5SW5kZXgudmVyc2lvbikge1xuXHRcdFx0XHRcdHVwZGF0ZVdpcmVmcmFtZUF0dHJpYnV0ZShnZW9tZXRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dXBkYXRlV2lyZWZyYW1lQXR0cmlidXRlKGdlb21ldHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gd2lyZWZyYW1lQXR0cmlidXRlcy5nZXQoZ2VvbWV0cnkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHR1cGRhdGU6IHVwZGF0ZSxcblx0XHRnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6IGdldFdpcmVmcmFtZUF0dHJpYnV0ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcihnbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRsZXQgbW9kZTtcblxuXHRmdW5jdGlvbiBzZXRNb2RlKHZhbHVlKSB7XG5cdFx0bW9kZSA9IHZhbHVlO1xuXHR9XG5cblx0bGV0IHR5cGUsIGJ5dGVzUGVyRWxlbWVudDtcblxuXHRmdW5jdGlvbiBzZXRJbmRleCh2YWx1ZSkge1xuXHRcdHR5cGUgPSB2YWx1ZS50eXBlO1xuXHRcdGJ5dGVzUGVyRWxlbWVudCA9IHZhbHVlLmJ5dGVzUGVyRWxlbWVudDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlcihzdGFydCwgY291bnQpIHtcblx0XHRnbC5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50KTtcblx0XHRpbmZvLnVwZGF0ZShjb3VudCwgbW9kZSwgMSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJJbnN0YW5jZXMoc3RhcnQsIGNvdW50LCBwcmltY291bnQpIHtcblx0XHRpZiAocHJpbWNvdW50ID09PSAwKSByZXR1cm47XG5cdFx0bGV0IGV4dGVuc2lvbiwgbWV0aG9kTmFtZTtcblxuXHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZ2w7XG5cdFx0XHRtZXRob2ROYW1lID0gJ2RyYXdFbGVtZW50c0luc3RhbmNlZCc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyk7XG5cdFx0XHRtZXRob2ROYW1lID0gJ2RyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFJztcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiA9PT0gbnVsbCkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRleHRlbnNpb25bbWV0aG9kTmFtZV0obW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50LCBwcmltY291bnQpO1xuXHRcdGluZm8udXBkYXRlKGNvdW50LCBtb2RlLCBwcmltY291bnQpO1xuXHR9IC8vXG5cblxuXHR0aGlzLnNldE1vZGUgPSBzZXRNb2RlO1xuXHR0aGlzLnNldEluZGV4ID0gc2V0SW5kZXg7XG5cdHRoaXMucmVuZGVyID0gcmVuZGVyO1xuXHR0aGlzLnJlbmRlckluc3RhbmNlcyA9IHJlbmRlckluc3RhbmNlcztcbn1cblxuZnVuY3Rpb24gV2ViR0xJbmZvKGdsKSB7XG5cdGNvbnN0IG1lbW9yeSA9IHtcblx0XHRnZW9tZXRyaWVzOiAwLFxuXHRcdHRleHR1cmVzOiAwXG5cdH07XG5cdGNvbnN0IHJlbmRlciA9IHtcblx0XHRmcmFtZTogMCxcblx0XHRjYWxsczogMCxcblx0XHR0cmlhbmdsZXM6IDAsXG5cdFx0cG9pbnRzOiAwLFxuXHRcdGxpbmVzOiAwXG5cdH07XG5cblx0ZnVuY3Rpb24gdXBkYXRlKGNvdW50LCBtb2RlLCBpbnN0YW5jZUNvdW50KSB7XG5cdFx0cmVuZGVyLmNhbGxzKys7XG5cblx0XHRzd2l0Y2ggKG1vZGUpIHtcblx0XHRcdGNhc2UgZ2wuVFJJQU5HTEVTOlxuXHRcdFx0XHRyZW5kZXIudHJpYW5nbGVzICs9IGluc3RhbmNlQ291bnQgKiAoY291bnQgLyAzKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgZ2wuTElORVM6XG5cdFx0XHRcdHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogKGNvdW50IC8gMik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIGdsLkxJTkVfU1RSSVA6XG5cdFx0XHRcdHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogKGNvdW50IC0gMSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIGdsLkxJTkVfTE9PUDpcblx0XHRcdFx0cmVuZGVyLmxpbmVzICs9IGluc3RhbmNlQ291bnQgKiBjb3VudDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgZ2wuUE9JTlRTOlxuXHRcdFx0XHRyZW5kZXIucG9pbnRzICs9IGluc3RhbmNlQ291bnQgKiBjb3VudDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6JywgbW9kZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0KCkge1xuXHRcdHJlbmRlci5mcmFtZSsrO1xuXHRcdHJlbmRlci5jYWxscyA9IDA7XG5cdFx0cmVuZGVyLnRyaWFuZ2xlcyA9IDA7XG5cdFx0cmVuZGVyLnBvaW50cyA9IDA7XG5cdFx0cmVuZGVyLmxpbmVzID0gMDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVtb3J5OiBtZW1vcnksXG5cdFx0cmVuZGVyOiByZW5kZXIsXG5cdFx0cHJvZ3JhbXM6IG51bGwsXG5cdFx0YXV0b1Jlc2V0OiB0cnVlLFxuXHRcdHJlc2V0OiByZXNldCxcblx0XHR1cGRhdGU6IHVwZGF0ZVxuXHR9O1xufVxuXG5jbGFzcyBEYXRhVGV4dHVyZTJEQXJyYXkgZXh0ZW5kcyBUZXh0dXJlIHtcblx0Y29uc3RydWN0b3IoZGF0YSA9IG51bGwsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgZGVwdGggPSAxKSB7XG5cdFx0c3VwZXIobnVsbCk7XG5cdFx0dGhpcy5pbWFnZSA9IHtcblx0XHRcdGRhdGEsXG5cdFx0XHR3aWR0aCxcblx0XHRcdGhlaWdodCxcblx0XHRcdGRlcHRoXG5cdFx0fTtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMud3JhcFIgPSBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblx0fVxuXG59XG5cbkRhdGFUZXh0dXJlMkRBcnJheS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXkgPSB0cnVlO1xuXG5mdW5jdGlvbiBudW1lcmljYWxTb3J0KGEsIGIpIHtcblx0cmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuXG5mdW5jdGlvbiBhYnNOdW1lcmljYWxTb3J0KGEsIGIpIHtcblx0cmV0dXJuIE1hdGguYWJzKGJbMV0pIC0gTWF0aC5hYnMoYVsxXSk7XG59XG5cbmZ1bmN0aW9uIGRlbm9ybWFsaXplKG1vcnBoLCBhdHRyaWJ1dGUpIHtcblx0bGV0IGRlbm9taW5hdG9yID0gMTtcblx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS5kYXRhLmFycmF5IDogYXR0cmlidXRlLmFycmF5O1xuXHRpZiAoYXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGRlbm9taW5hdG9yID0gMTI3O2Vsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSkgZGVub21pbmF0b3IgPSAzMjc2NztlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIGRlbm9taW5hdG9yID0gMjE0NzQ4MzY0NztlbHNlIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAnLCBhcnJheSk7XG5cdG1vcnBoLmRpdmlkZVNjYWxhcihkZW5vbWluYXRvcik7XG59XG5cbmZ1bmN0aW9uIFdlYkdMTW9ycGh0YXJnZXRzKGdsLCBjYXBhYmlsaXRpZXMsIHRleHR1cmVzKSB7XG5cdGNvbnN0IGluZmx1ZW5jZXNMaXN0ID0ge307XG5cdGNvbnN0IG1vcnBoSW5mbHVlbmNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG5cdGNvbnN0IG1vcnBoVGV4dHVyZXMgPSBuZXcgV2Vha01hcCgpO1xuXHRjb25zdCBtb3JwaCA9IG5ldyBWZWN0b3IzKCk7XG5cdGNvbnN0IHdvcmtJbmZsdWVuY2VzID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0XHR3b3JrSW5mbHVlbmNlc1tpXSA9IFtpLCAwXTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcHJvZ3JhbSkge1xuXHRcdGNvbnN0IG9iamVjdEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVuY2VzO1xuXG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gaW5zdGVhZCBvZiB1c2luZyBhdHRyaWJ1dGVzLCB0aGUgV2ViR0wgMiBjb2RlIHBhdGggZW5jb2RlcyBtb3JwaCB0YXJnZXRzXG5cdFx0XHQvLyBpbnRvIGFuIGFycmF5IG9mIGRhdGEgdGV4dHVyZXMuIEVhY2ggbGF5ZXIgcmVwcmVzZW50cyBhIHNpbmdsZSBtb3JwaCB0YXJnZXQuXG5cdFx0XHRjb25zdCBudW1iZXJPZk1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg7XG5cdFx0XHRsZXQgZW50cnkgPSBtb3JwaFRleHR1cmVzLmdldChnZW9tZXRyeSk7XG5cblx0XHRcdGlmIChlbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LmNvdW50ICE9PSBudW1iZXJPZk1vcnBoVGFyZ2V0cykge1xuXHRcdFx0XHRpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkgZW50cnkudGV4dHVyZS5kaXNwb3NlKCk7XG5cdFx0XHRcdGNvbnN0IGhhc01vcnBoTm9ybWFscyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBtb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBudW1iZXJPZlZlcnRpY2VzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudDtcblx0XHRcdFx0Y29uc3QgbnVtYmVyT2ZWZXJ0ZXhEYXRhID0gaGFzTW9ycGhOb3JtYWxzID09PSB0cnVlID8gMiA6IDE7IC8vICh2LG4pIHZzLiAodilcblxuXHRcdFx0XHRsZXQgd2lkdGggPSBudW1iZXJPZlZlcnRpY2VzICogbnVtYmVyT2ZWZXJ0ZXhEYXRhO1xuXHRcdFx0XHRsZXQgaGVpZ2h0ID0gMTtcblxuXHRcdFx0XHRpZiAod2lkdGggPiBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpIHtcblx0XHRcdFx0XHRoZWlnaHQgPSBNYXRoLmNlaWwod2lkdGggLyBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpO1xuXHRcdFx0XHRcdHdpZHRoID0gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQgKiBudW1iZXJPZk1vcnBoVGFyZ2V0cyk7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUyREFycmF5KGJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgbnVtYmVyT2ZNb3JwaFRhcmdldHMpO1xuXHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IFJHQkFGb3JtYXQ7IC8vIHVzaW5nIFJHQkEgc2luY2UgUkdCIG1pZ2h0IGJlIGVtdWxhdGVkIChhbmQgaXMgdGh1cyBzbG93ZXIpXG5cblx0XHRcdFx0dGV4dHVyZS50eXBlID0gRmxvYXRUeXBlO1xuXHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsgLy8gZmlsbCBidWZmZXJcblxuXHRcdFx0XHRjb25zdCB2ZXJ0ZXhEYXRhU3RyaWRlID0gbnVtYmVyT2ZWZXJ0ZXhEYXRhICogNDtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mTW9ycGhUYXJnZXRzOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1tpXTtcblx0XHRcdFx0XHRjb25zdCBtb3JwaE5vcm1hbCA9IG1vcnBoTm9ybWFsc1tpXTtcblx0XHRcdFx0XHRjb25zdCBvZmZzZXQgPSB3aWR0aCAqIGhlaWdodCAqIDQgKiBpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBtb3JwaFRhcmdldC5jb3VudDsgaisrKSB7XG5cdFx0XHRcdFx0XHRtb3JwaC5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoVGFyZ2V0LCBqKTtcblx0XHRcdFx0XHRcdGlmIChtb3JwaFRhcmdldC5ub3JtYWxpemVkID09PSB0cnVlKSBkZW5vcm1hbGl6ZShtb3JwaCwgbW9ycGhUYXJnZXQpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWRlID0gaiAqIHZlcnRleERhdGFTdHJpZGU7XG5cdFx0XHRcdFx0XHRidWZmZXJbb2Zmc2V0ICsgc3RyaWRlICsgMF0gPSBtb3JwaC54O1xuXHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDFdID0gbW9ycGgueTtcblx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyAyXSA9IG1vcnBoLno7XG5cdFx0XHRcdFx0XHRidWZmZXJbb2Zmc2V0ICsgc3RyaWRlICsgM10gPSAwO1xuXG5cdFx0XHRcdFx0XHRpZiAoaGFzTW9ycGhOb3JtYWxzID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdG1vcnBoLmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhOb3JtYWwsIGopO1xuXHRcdFx0XHRcdFx0XHRpZiAobW9ycGhOb3JtYWwubm9ybWFsaXplZCA9PT0gdHJ1ZSkgZGVub3JtYWxpemUobW9ycGgsIG1vcnBoTm9ybWFsKTtcblx0XHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDRdID0gbW9ycGgueDtcblx0XHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDVdID0gbW9ycGgueTtcblx0XHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDZdID0gbW9ycGguejtcblx0XHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDddID0gMDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbnRyeSA9IHtcblx0XHRcdFx0XHRjb3VudDogbnVtYmVyT2ZNb3JwaFRhcmdldHMsXG5cdFx0XHRcdFx0dGV4dHVyZTogdGV4dHVyZSxcblx0XHRcdFx0XHRzaXplOiBuZXcgVmVjdG9yMih3aWR0aCwgaGVpZ2h0KVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRtb3JwaFRleHR1cmVzLnNldChnZW9tZXRyeSwgZW50cnkpO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGRpc3Bvc2VUZXh0dXJlKCkge1xuXHRcdFx0XHRcdHRleHR1cmUuZGlzcG9zZSgpO1xuXHRcdFx0XHRcdG1vcnBoVGV4dHVyZXMuZGVsZXRlKGdlb21ldHJ5KTtcblx0XHRcdFx0XHRnZW9tZXRyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgZGlzcG9zZVRleHR1cmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIGRpc3Bvc2VUZXh0dXJlKTtcblx0XHRcdH0gLy9cblxuXG5cdFx0XHRsZXQgbW9ycGhJbmZsdWVuY2VzU3VtID0gMDtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RJbmZsdWVuY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1N1bSArPSBvYmplY3RJbmZsdWVuY2VzW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtb3JwaEJhc2VJbmZsdWVuY2UgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHNSZWxhdGl2ZSA/IDEgOiAxIC0gbW9ycGhJbmZsdWVuY2VzU3VtO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGdsLCAnbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlJywgbW9ycGhCYXNlSW5mbHVlbmNlKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShnbCwgJ21vcnBoVGFyZ2V0SW5mbHVlbmNlcycsIG9iamVjdEluZmx1ZW5jZXMpO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGdsLCAnbW9ycGhUYXJnZXRzVGV4dHVyZScsIGVudHJ5LnRleHR1cmUsIHRleHR1cmVzKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShnbCwgJ21vcnBoVGFyZ2V0c1RleHR1cmVTaXplJywgZW50cnkuc2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdoZW4gb2JqZWN0IGRvZXNuJ3QgaGF2ZSBtb3JwaCB0YXJnZXQgaW5mbHVlbmNlcyBkZWZpbmVkLCB3ZSB0cmVhdCBpdCBhcyBhIDAtbGVuZ3RoIGFycmF5XG5cdFx0XHQvLyBUaGlzIGlzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2Ugc2V0IHVwIG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSAvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gb2JqZWN0SW5mbHVlbmNlcyA9PT0gdW5kZWZpbmVkID8gMCA6IG9iamVjdEluZmx1ZW5jZXMubGVuZ3RoO1xuXHRcdFx0bGV0IGluZmx1ZW5jZXMgPSBpbmZsdWVuY2VzTGlzdFtnZW9tZXRyeS5pZF07XG5cblx0XHRcdGlmIChpbmZsdWVuY2VzID09PSB1bmRlZmluZWQgfHwgaW5mbHVlbmNlcy5sZW5ndGggIT09IGxlbmd0aCkge1xuXHRcdFx0XHQvLyBpbml0aWFsaXNlIGxpc3Rcblx0XHRcdFx0aW5mbHVlbmNlcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpbmZsdWVuY2VzW2ldID0gW2ksIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5mbHVlbmNlc0xpc3RbZ2VvbWV0cnkuaWRdID0gaW5mbHVlbmNlcztcblx0XHRcdH0gLy8gQ29sbGVjdCBpbmZsdWVuY2VzXG5cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbmZsdWVuY2UgPSBpbmZsdWVuY2VzW2ldO1xuXHRcdFx0XHRpbmZsdWVuY2VbMF0gPSBpO1xuXHRcdFx0XHRpbmZsdWVuY2VbMV0gPSBvYmplY3RJbmZsdWVuY2VzW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRpbmZsdWVuY2VzLnNvcnQoYWJzTnVtZXJpY2FsU29ydCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFx0XHRcdGlmIChpIDwgbGVuZ3RoICYmIGluZmx1ZW5jZXNbaV1bMV0pIHtcblx0XHRcdFx0XHR3b3JrSW5mbHVlbmNlc1tpXVswXSA9IGluZmx1ZW5jZXNbaV1bMF07XG5cdFx0XHRcdFx0d29ya0luZmx1ZW5jZXNbaV1bMV0gPSBpbmZsdWVuY2VzW2ldWzFdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzW2ldWzBdID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdFx0XHRcdFx0d29ya0luZmx1ZW5jZXNbaV1bMV0gPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHdvcmtJbmZsdWVuY2VzLnNvcnQobnVtZXJpY2FsU29ydCk7XG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRjb25zdCBtb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsO1xuXHRcdFx0bGV0IG1vcnBoSW5mbHVlbmNlc1N1bSA9IDA7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGluZmx1ZW5jZSA9IHdvcmtJbmZsdWVuY2VzW2ldO1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGluZmx1ZW5jZVswXTtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpbmZsdWVuY2VbMV07XG5cblx0XHRcdFx0aWYgKGluZGV4ICE9PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmIChtb3JwaFRhcmdldHMgJiYgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdtb3JwaFRhcmdldCcgKyBpKSAhPT0gbW9ycGhUYXJnZXRzW2luZGV4XSkge1xuXHRcdFx0XHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdtb3JwaFRhcmdldCcgKyBpLCBtb3JwaFRhcmdldHNbaW5kZXhdKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobW9ycGhOb3JtYWxzICYmIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgnbW9ycGhOb3JtYWwnICsgaSkgIT09IG1vcnBoTm9ybWFsc1tpbmRleF0pIHtcblx0XHRcdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbW9ycGhOb3JtYWwnICsgaSwgbW9ycGhOb3JtYWxzW2luZGV4XSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bW9ycGhJbmZsdWVuY2VzW2ldID0gdmFsdWU7XG5cdFx0XHRcdFx0bW9ycGhJbmZsdWVuY2VzU3VtICs9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChtb3JwaFRhcmdldHMgJiYgZ2VvbWV0cnkuaGFzQXR0cmlidXRlKCdtb3JwaFRhcmdldCcgKyBpKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Z2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCdtb3JwaFRhcmdldCcgKyBpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobW9ycGhOb3JtYWxzICYmIGdlb21ldHJ5Lmhhc0F0dHJpYnV0ZSgnbW9ycGhOb3JtYWwnICsgaSkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgnbW9ycGhOb3JtYWwnICsgaSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bW9ycGhJbmZsdWVuY2VzW2ldID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBHTFNMIHNoYWRlciB1c2VzIGZvcm11bGEgYmFzZWluZmx1ZW5jZSAqIGJhc2UgKyBzdW0odGFyZ2V0ICogaW5mbHVlbmNlKVxuXHRcdFx0Ly8gVGhpcyBhbGxvd3MgdXMgdG8gc3dpdGNoIGJldHdlZW4gYWJzb2x1dGUgbW9ycGhzIGFuZCByZWxhdGl2ZSBtb3JwaHMgd2l0aG91dCBjaGFuZ2luZyBzaGFkZXIgY29kZVxuXHRcdFx0Ly8gV2hlbiBiYXNlaW5mbHVlbmNlID0gMSAtIHN1bShpbmZsdWVuY2UpLCB0aGUgYWJvdmUgaXMgZXF1aXZhbGVudCB0byBzdW0oKHRhcmdldCAtIGJhc2UpICogaW5mbHVlbmNlKVxuXG5cblx0XHRcdGNvbnN0IG1vcnBoQmFzZUluZmx1ZW5jZSA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlID8gMSA6IDEgLSBtb3JwaEluZmx1ZW5jZXNTdW07XG5cdFx0XHRwcm9ncmFtLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZ2wsICdtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UnLCBtb3JwaEJhc2VJbmZsdWVuY2UpO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGdsLCAnbW9ycGhUYXJnZXRJbmZsdWVuY2VzJywgbW9ycGhJbmZsdWVuY2VzKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVwZGF0ZTogdXBkYXRlXG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMT2JqZWN0cyhnbCwgZ2VvbWV0cmllcywgYXR0cmlidXRlcywgaW5mbykge1xuXHRsZXQgdXBkYXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiB1cGRhdGUob2JqZWN0KSB7XG5cdFx0Y29uc3QgZnJhbWUgPSBpbmZvLnJlbmRlci5mcmFtZTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTtcblx0XHRjb25zdCBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJpZXMuZ2V0KG9iamVjdCwgZ2VvbWV0cnkpOyAvLyBVcGRhdGUgb25jZSBwZXIgZnJhbWVcblxuXHRcdGlmICh1cGRhdGVNYXAuZ2V0KGJ1ZmZlcmdlb21ldHJ5KSAhPT0gZnJhbWUpIHtcblx0XHRcdGdlb21ldHJpZXMudXBkYXRlKGJ1ZmZlcmdlb21ldHJ5KTtcblx0XHRcdHVwZGF0ZU1hcC5zZXQoYnVmZmVyZ2VvbWV0cnksIGZyYW1lKTtcblx0XHR9XG5cblx0XHRpZiAob2JqZWN0LmlzSW5zdGFuY2VkTWVzaCkge1xuXHRcdFx0aWYgKG9iamVjdC5oYXNFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25JbnN0YW5jZWRNZXNoRGlzcG9zZSkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdG9iamVjdC5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25JbnN0YW5jZWRNZXNoRGlzcG9zZSk7XG5cdFx0XHR9XG5cblx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKG9iamVjdC5pbnN0YW5jZU1hdHJpeCwgZ2wuQVJSQVlfQlVGRkVSKTtcblxuXHRcdFx0aWYgKG9iamVjdC5pbnN0YW5jZUNvbG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKG9iamVjdC5pbnN0YW5jZUNvbG9yLCBnbC5BUlJBWV9CVUZGRVIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBidWZmZXJnZW9tZXRyeTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0dXBkYXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UoZXZlbnQpIHtcblx0XHRjb25zdCBpbnN0YW5jZWRNZXNoID0gZXZlbnQudGFyZ2V0O1xuXHRcdGluc3RhbmNlZE1lc2gucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UpO1xuXHRcdGF0dHJpYnV0ZXMucmVtb3ZlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VNYXRyaXgpO1xuXHRcdGlmIChpbnN0YW5jZWRNZXNoLmluc3RhbmNlQ29sb3IgIT09IG51bGwpIGF0dHJpYnV0ZXMucmVtb3ZlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VDb2xvcik7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVwZGF0ZTogdXBkYXRlLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuY2xhc3MgRGF0YVRleHR1cmUzRCBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3RvcihkYXRhID0gbnVsbCwgd2lkdGggPSAxLCBoZWlnaHQgPSAxLCBkZXB0aCA9IDEpIHtcblx0XHQvLyBXZSdyZSBnb2luZyB0byBhZGQgLnNldFhYWCgpIG1ldGhvZHMgZm9yIHNldHRpbmcgcHJvcGVydGllcyBsYXRlci5cblx0XHQvLyBVc2VycyBjYW4gc3RpbGwgc2V0IGluIERhdGFUZXh0dXJlM0QgZGlyZWN0bHkuXG5cdFx0Ly9cblx0XHQvL1x0Y29uc3QgdGV4dHVyZSA9IG5ldyBUSFJFRS5EYXRhVGV4dHVyZTNEKCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xuXHRcdC8vIFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gMTY7XG5cdFx0Ly9cblx0XHQvLyBTZWUgIzE0ODM5XG5cdFx0c3VwZXIobnVsbCk7XG5cdFx0dGhpcy5pbWFnZSA9IHtcblx0XHRcdGRhdGEsXG5cdFx0XHR3aWR0aCxcblx0XHRcdGhlaWdodCxcblx0XHRcdGRlcHRoXG5cdFx0fTtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMud3JhcFIgPSBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblx0fVxuXG59XG5cbkRhdGFUZXh0dXJlM0QucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRCA9IHRydWU7XG5cbi8qKlxuICogVW5pZm9ybXMgb2YgYSBwcm9ncmFtLlxuICogVGhvc2UgZm9ybSBhIHRyZWUgc3RydWN0dXJlIHdpdGggYSBzcGVjaWFsIHRvcC1sZXZlbCBjb250YWluZXIgZm9yIHRoZSByb290LFxuICogd2hpY2ggeW91IGdldCBieSBjYWxsaW5nICduZXcgV2ViR0xVbmlmb3JtcyggZ2wsIHByb2dyYW0gKScuXG4gKlxuICpcbiAqIFByb3BlcnRpZXMgb2YgaW5uZXIgbm9kZXMgaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyOlxuICpcbiAqIC5zZXEgLSBhcnJheSBvZiBuZXN0ZWQgdW5pZm9ybXNcbiAqIC5tYXAgLSBuZXN0ZWQgdW5pZm9ybXMgYnkgbmFtZVxuICpcbiAqXG4gKiBNZXRob2RzIG9mIGFsbCBub2RlcyBleGNlcHQgdGhlIHRvcC1sZXZlbCBjb250YWluZXI6XG4gKlxuICogLnNldFZhbHVlKCBnbCwgdmFsdWUsIFt0ZXh0dXJlc10gKVxuICpcbiAqIFx0XHR1cGxvYWRzIGEgdW5pZm9ybSB2YWx1ZShzKVxuICpcdFx0dGhlICd0ZXh0dXJlcycgcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3Igc2FtcGxlciB1bmlmb3Jtc1xuICpcbiAqXG4gKiBTdGF0aWMgbWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAodGV4dHVyZXMgZmFjdG9yaXphdGlvbnMpOlxuICpcbiAqIC51cGxvYWQoIGdsLCBzZXEsIHZhbHVlcywgdGV4dHVyZXMgKVxuICpcbiAqIFx0XHRzZXRzIHVuaWZvcm1zIGluICdzZXEnIHRvICd2YWx1ZXNbaWRdLnZhbHVlJ1xuICpcbiAqIC5zZXFXaXRoVmFsdWUoIHNlcSwgdmFsdWVzICkgOiBmaWx0ZXJlZFNlcVxuICpcbiAqIFx0XHRmaWx0ZXJzICdzZXEnIGVudHJpZXMgd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZhbHVlc1xuICpcbiAqXG4gKiBNZXRob2RzIG9mIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyICh0ZXh0dXJlcyBmYWN0b3JpemF0aW9ucyk6XG4gKlxuICogLnNldFZhbHVlKCBnbCwgbmFtZSwgdmFsdWUsIHRleHR1cmVzIClcbiAqXG4gKiBcdFx0c2V0cyB1bmlmb3JtIHdpdGhcdG5hbWUgJ25hbWUnIHRvICd2YWx1ZSdcbiAqXG4gKiAuc2V0T3B0aW9uYWwoIGdsLCBvYmosIHByb3AgKVxuICpcbiAqIFx0XHRsaWtlIC5zZXQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbmNvbnN0IGVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7XG5jb25zdCBlbXB0eVRleHR1cmUyZEFycmF5ID0gbmV3IERhdGFUZXh0dXJlMkRBcnJheSgpO1xuY29uc3QgZW1wdHlUZXh0dXJlM2QgPSBuZXcgRGF0YVRleHR1cmUzRCgpO1xuY29uc3QgZW1wdHlDdWJlVGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpOyAvLyAtLS0gVXRpbGl0aWVzIC0tLVxuLy8gQXJyYXkgQ2FjaGVzIChwcm92aWRlIHR5cGVkIGFycmF5cyBmb3IgdGVtcG9yYXJ5IGJ5IHNpemUpXG5cbmNvbnN0IGFycmF5Q2FjaGVGMzIgPSBbXTtcbmNvbnN0IGFycmF5Q2FjaGVJMzIgPSBbXTsgLy8gRmxvYXQzMkFycmF5IGNhY2hlcyB1c2VkIGZvciB1cGxvYWRpbmcgTWF0cml4IHVuaWZvcm1zXG5cbmNvbnN0IG1hdDRhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xuY29uc3QgbWF0M2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbmNvbnN0IG1hdDJhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7IC8vIEZsYXR0ZW5pbmcgZm9yIGFycmF5cyBvZiB2ZWN0b3JzIGFuZCBtYXRyaWNlc1xuXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5LCBuQmxvY2tzLCBibG9ja1NpemUpIHtcblx0Y29uc3QgZmlyc3RFbGVtID0gYXJyYXlbMF07XG5cdGlmIChmaXJzdEVsZW0gPD0gMCB8fCBmaXJzdEVsZW0gPiAwKSByZXR1cm4gYXJyYXk7IC8vIHVub3B0aW1pemVkOiAhIGlzTmFOKCBmaXJzdEVsZW0gKVxuXHQvLyBzZWUgaHR0cDovL2phY2tzb25kdW5zdGFuLmNvbS9hcnRpY2xlcy85ODNcblxuXHRjb25zdCBuID0gbkJsb2NrcyAqIGJsb2NrU2l6ZTtcblx0bGV0IHIgPSBhcnJheUNhY2hlRjMyW25dO1xuXG5cdGlmIChyID09PSB1bmRlZmluZWQpIHtcblx0XHRyID0gbmV3IEZsb2F0MzJBcnJheShuKTtcblx0XHRhcnJheUNhY2hlRjMyW25dID0gcjtcblx0fVxuXG5cdGlmIChuQmxvY2tzICE9PSAwKSB7XG5cdFx0Zmlyc3RFbGVtLnRvQXJyYXkociwgMCk7XG5cblx0XHRmb3IgKGxldCBpID0gMSwgb2Zmc2V0ID0gMDsgaSAhPT0gbkJsb2NrczsgKytpKSB7XG5cdFx0XHRvZmZzZXQgKz0gYmxvY2tTaXplO1xuXHRcdFx0YXJyYXlbaV0udG9BcnJheShyLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhLCBiKSB7XG5cdGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHRmb3IgKGxldCBpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0aWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb3B5QXJyYXkoYSwgYikge1xuXHRmb3IgKGxldCBpID0gMCwgbCA9IGIubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0YVtpXSA9IGJbaV07XG5cdH1cbn0gLy8gVGV4dHVyZSB1bml0IGFsbG9jYXRpb25cblxuXG5mdW5jdGlvbiBhbGxvY1RleFVuaXRzKHRleHR1cmVzLCBuKSB7XG5cdGxldCByID0gYXJyYXlDYWNoZUkzMltuXTtcblxuXHRpZiAociA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ciA9IG5ldyBJbnQzMkFycmF5KG4pO1xuXHRcdGFycmF5Q2FjaGVJMzJbbl0gPSByO1xuXHR9XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG47ICsraSkge1xuXHRcdHJbaV0gPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn0gLy8gLS0tIFNldHRlcnMgLS0tXG4vLyBOb3RlOiBEZWZpbmluZyB0aGVzZSBtZXRob2RzIGV4dGVybmFsbHksIGJlY2F1c2UgdGhleSBjb21lIGluIGEgYnVuY2hcbi8vIGFuZCB0aGlzIHdheSB0aGVpciBuYW1lcyBtaW5pZnkuXG4vLyBTaW5nbGUgc2NhbGFyXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMWYoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoY2FjaGVbMF0gPT09IHYpIHJldHVybjtcblx0Z2wudW5pZm9ybTFmKHRoaXMuYWRkciwgdik7XG5cdGNhY2hlWzBdID0gdjtcbn0gLy8gU2luZ2xlIGZsb2F0IHZlY3RvciAoZnJvbSBmbGF0IGFycmF5IG9yIFRIUkVFLlZlY3Rvck4pXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMmYoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICh2LnggIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChjYWNoZVswXSAhPT0gdi54IHx8IGNhY2hlWzFdICE9PSB2LnkpIHtcblx0XHRcdGdsLnVuaWZvcm0yZih0aGlzLmFkZHIsIHYueCwgdi55KTtcblx0XHRcdGNhY2hlWzBdID0gdi54O1xuXHRcdFx0Y2FjaGVbMV0gPSB2Lnk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0XHRnbC51bmlmb3JtMmZ2KHRoaXMuYWRkciwgdik7XG5cdFx0Y29weUFycmF5KGNhY2hlLCB2KTtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzZihnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKHYueCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGNhY2hlWzBdICE9PSB2LnggfHwgY2FjaGVbMV0gIT09IHYueSB8fCBjYWNoZVsyXSAhPT0gdi56KSB7XG5cdFx0XHRnbC51bmlmb3JtM2YodGhpcy5hZGRyLCB2LngsIHYueSwgdi56KTtcblx0XHRcdGNhY2hlWzBdID0gdi54O1xuXHRcdFx0Y2FjaGVbMV0gPSB2Lnk7XG5cdFx0XHRjYWNoZVsyXSA9IHYuejtcblx0XHR9XG5cdH0gZWxzZSBpZiAodi5yICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoY2FjaGVbMF0gIT09IHYuciB8fCBjYWNoZVsxXSAhPT0gdi5nIHx8IGNhY2hlWzJdICE9PSB2LmIpIHtcblx0XHRcdGdsLnVuaWZvcm0zZih0aGlzLmFkZHIsIHYuciwgdi5nLCB2LmIpO1xuXHRcdFx0Y2FjaGVbMF0gPSB2LnI7XG5cdFx0XHRjYWNoZVsxXSA9IHYuZztcblx0XHRcdGNhY2hlWzJdID0gdi5iO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdFx0Z2wudW5pZm9ybTNmdih0aGlzLmFkZHIsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGYoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICh2LnggIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChjYWNoZVswXSAhPT0gdi54IHx8IGNhY2hlWzFdICE9PSB2LnkgfHwgY2FjaGVbMl0gIT09IHYueiB8fCBjYWNoZVszXSAhPT0gdi53KSB7XG5cdFx0XHRnbC51bmlmb3JtNGYodGhpcy5hZGRyLCB2LngsIHYueSwgdi56LCB2LncpO1xuXHRcdFx0Y2FjaGVbMF0gPSB2Lng7XG5cdFx0XHRjYWNoZVsxXSA9IHYueTtcblx0XHRcdGNhY2hlWzJdID0gdi56O1xuXHRcdFx0Y2FjaGVbM10gPSB2Lnc7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0XHRnbC51bmlmb3JtNGZ2KHRoaXMuYWRkciwgdik7XG5cdFx0Y29weUFycmF5KGNhY2hlLCB2KTtcblx0fVxufSAvLyBTaW5nbGUgbWF0cml4IChmcm9tIGZsYXQgYXJyYXkgb3IgVEhSRUUuTWF0cml4TilcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZU0yKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgZWxlbWVudHMgPSB2LmVsZW1lbnRzO1xuXG5cdGlmIChlbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCBmYWxzZSwgdik7XG5cdFx0Y29weUFycmF5KGNhY2hlLCB2KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIGVsZW1lbnRzKSkgcmV0dXJuO1xuXHRcdG1hdDJhcnJheS5zZXQoZWxlbWVudHMpO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCBmYWxzZSwgbWF0MmFycmF5KTtcblx0XHRjb3B5QXJyYXkoY2FjaGUsIGVsZW1lbnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU0zKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgZWxlbWVudHMgPSB2LmVsZW1lbnRzO1xuXG5cdGlmIChlbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCBmYWxzZSwgdik7XG5cdFx0Y29weUFycmF5KGNhY2hlLCB2KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIGVsZW1lbnRzKSkgcmV0dXJuO1xuXHRcdG1hdDNhcnJheS5zZXQoZWxlbWVudHMpO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCBmYWxzZSwgbWF0M2FycmF5KTtcblx0XHRjb3B5QXJyYXkoY2FjaGUsIGVsZW1lbnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU00KGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgZWxlbWVudHMgPSB2LmVsZW1lbnRzO1xuXG5cdGlmIChlbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCBmYWxzZSwgdik7XG5cdFx0Y29weUFycmF5KGNhY2hlLCB2KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIGVsZW1lbnRzKSkgcmV0dXJuO1xuXHRcdG1hdDRhcnJheS5zZXQoZWxlbWVudHMpO1xuXHRcdGdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCBmYWxzZSwgbWF0NGFycmF5KTtcblx0XHRjb3B5QXJyYXkoY2FjaGUsIGVsZW1lbnRzKTtcblx0fVxufSAvLyBTaW5nbGUgaW50ZWdlciAvIGJvb2xlYW5cblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxaShnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGlmIChjYWNoZVswXSA9PT0gdikgcmV0dXJuO1xuXHRnbC51bmlmb3JtMWkodGhpcy5hZGRyLCB2KTtcblx0Y2FjaGVbMF0gPSB2O1xufSAvLyBTaW5nbGUgaW50ZWdlciAvIGJvb2xlYW4gdmVjdG9yIChmcm9tIGZsYXQgYXJyYXkpXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMmkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdGdsLnVuaWZvcm0yaXYodGhpcy5hZGRyLCB2KTtcblx0Y29weUFycmF5KGNhY2hlLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2koZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdGdsLnVuaWZvcm0zaXYodGhpcy5hZGRyLCB2KTtcblx0Y29weUFycmF5KGNhY2hlLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdGdsLnVuaWZvcm00aXYodGhpcy5hZGRyLCB2KTtcblx0Y29weUFycmF5KGNhY2hlLCB2KTtcbn0gLy8gU2luZ2xlIHVuc2lnbmVkIGludGVnZXJcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxdWkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoY2FjaGVbMF0gPT09IHYpIHJldHVybjtcblx0Z2wudW5pZm9ybTF1aSh0aGlzLmFkZHIsIHYpO1xuXHRjYWNoZVswXSA9IHY7XG59IC8vIFNpbmdsZSB1bnNpZ25lZCBpbnRlZ2VyIHZlY3RvciAoZnJvbSBmbGF0IGFycmF5KVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJ1aShnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0Z2wudW5pZm9ybTJ1aXYodGhpcy5hZGRyLCB2KTtcblx0Y29weUFycmF5KGNhY2hlLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM3VpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRnbC51bmlmb3JtM3Vpdih0aGlzLmFkZHIsIHYpO1xuXHRjb3B5QXJyYXkoY2FjaGUsIHYpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVY0dWkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdGdsLnVuaWZvcm00dWl2KHRoaXMuYWRkciwgdik7XG5cdGNvcHlBcnJheShjYWNoZSwgdik7XG59IC8vIFNpbmdsZSB0ZXh0dXJlICgyRCAvIEN1YmUpXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVUMShnbCwgdiwgdGV4dHVyZXMpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRjb25zdCB1bml0ID0gdGV4dHVyZXMuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO1xuXG5cdGlmIChjYWNoZVswXSAhPT0gdW5pdCkge1xuXHRcdGdsLnVuaWZvcm0xaSh0aGlzLmFkZHIsIHVuaXQpO1xuXHRcdGNhY2hlWzBdID0gdW5pdDtcblx0fVxuXG5cdHRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQodiB8fCBlbXB0eVRleHR1cmUsIHVuaXQpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQzRDEoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoY2FjaGVbMF0gIT09IHVuaXQpIHtcblx0XHRnbC51bmlmb3JtMWkodGhpcy5hZGRyLCB1bml0KTtcblx0XHRjYWNoZVswXSA9IHVuaXQ7XG5cdH1cblxuXHR0ZXh0dXJlcy5zZXRUZXh0dXJlM0QodiB8fCBlbXB0eVRleHR1cmUzZCwgdW5pdCk7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDYoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoY2FjaGVbMF0gIT09IHVuaXQpIHtcblx0XHRnbC51bmlmb3JtMWkodGhpcy5hZGRyLCB1bml0KTtcblx0XHRjYWNoZVswXSA9IHVuaXQ7XG5cdH1cblxuXHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmUodiB8fCBlbXB0eUN1YmVUZXh0dXJlLCB1bml0KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUMkRBcnJheTEoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoY2FjaGVbMF0gIT09IHVuaXQpIHtcblx0XHRnbC51bmlmb3JtMWkodGhpcy5hZGRyLCB1bml0KTtcblx0XHRjYWNoZVswXSA9IHVuaXQ7XG5cdH1cblxuXHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkRBcnJheSh2IHx8IGVtcHR5VGV4dHVyZTJkQXJyYXksIHVuaXQpO1xufSAvLyBIZWxwZXIgdG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciB0aGUgc2luZ3VsYXIgY2FzZVxuXG5cbmZ1bmN0aW9uIGdldFNpbmd1bGFyU2V0dGVyKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Y2FzZSAweDE0MDY6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMWY7XG5cdFx0Ly8gRkxPQVRcblxuXHRcdGNhc2UgMHg4YjUwOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjJmO1xuXHRcdC8vIF9WRUMyXG5cblx0XHRjYXNlIDB4OGI1MTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYzZjtcblx0XHQvLyBfVkVDM1xuXG5cdFx0Y2FzZSAweDhiNTI6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWNGY7XG5cdFx0Ly8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVhOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlTTI7XG5cdFx0Ly8gX01BVDJcblxuXHRcdGNhc2UgMHg4YjViOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlTTM7XG5cdFx0Ly8gX01BVDNcblxuXHRcdGNhc2UgMHg4YjVjOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlTTQ7XG5cdFx0Ly8gX01BVDRcblxuXHRcdGNhc2UgMHgxNDA0OlxuXHRcdGNhc2UgMHg4YjU2OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjFpO1xuXHRcdC8vIElOVCwgQk9PTFxuXG5cdFx0Y2FzZSAweDhiNTM6XG5cdFx0Y2FzZSAweDhiNTc6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMmk7XG5cdFx0Ly8gX1ZFQzJcblxuXHRcdGNhc2UgMHg4YjU0OlxuXHRcdGNhc2UgMHg4YjU4OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjNpO1xuXHRcdC8vIF9WRUMzXG5cblx0XHRjYXNlIDB4OGI1NTpcblx0XHRjYXNlIDB4OGI1OTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVY0aTtcblx0XHQvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDE0MDU6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMXVpO1xuXHRcdC8vIFVJTlRcblxuXHRcdGNhc2UgMHg4ZGM2OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjJ1aTtcblx0XHQvLyBfVkVDMlxuXG5cdFx0Y2FzZSAweDhkYzc6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWM3VpO1xuXHRcdC8vIF9WRUMzXG5cblx0XHRjYXNlIDB4OGRjODpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVY0dWk7XG5cdFx0Ly8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVlOiAvLyBTQU1QTEVSXzJEXG5cblx0XHRjYXNlIDB4OGQ2NjogLy8gU0FNUExFUl9FWFRFUk5BTF9PRVNcblxuXHRcdGNhc2UgMHg4ZGNhOiAvLyBJTlRfU0FNUExFUl8yRFxuXG5cdFx0Y2FzZSAweDhkZDI6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEXG5cblx0XHRjYXNlIDB4OGI2Mjpcblx0XHRcdC8vIFNBTVBMRVJfMkRfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMTtcblxuXHRcdGNhc2UgMHg4YjVmOiAvLyBTQU1QTEVSXzNEXG5cblx0XHRjYXNlIDB4OGRjYjogLy8gSU5UX1NBTVBMRVJfM0RcblxuXHRcdGNhc2UgMHg4ZGQzOlxuXHRcdFx0Ly8gVU5TSUdORURfSU5UX1NBTVBMRVJfM0Rcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQzRDE7XG5cblx0XHRjYXNlIDB4OGI2MDogLy8gU0FNUExFUl9DVUJFXG5cblx0XHRjYXNlIDB4OGRjYzogLy8gSU5UX1NBTVBMRVJfQ1VCRVxuXG5cdFx0Y2FzZSAweDhkZDQ6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVcblxuXHRcdGNhc2UgMHg4ZGM1OlxuXHRcdFx0Ly8gU0FNUExFUl9DVUJFX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDY7XG5cblx0XHRjYXNlIDB4OGRjMTogLy8gU0FNUExFUl8yRF9BUlJBWVxuXG5cdFx0Y2FzZSAweDhkY2Y6IC8vIElOVF9TQU1QTEVSXzJEX0FSUkFZXG5cblx0XHRjYXNlIDB4OGRkNzogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVlcblxuXHRcdGNhc2UgMHg4ZGM0OlxuXHRcdFx0Ly8gU0FNUExFUl8yRF9BUlJBWV9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQyREFycmF5MTtcblx0fVxufSAvLyBBcnJheSBvZiBzY2FsYXJzXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMWZBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtMWZ2KHRoaXMuYWRkciwgdik7XG59IC8vIEFycmF5IG9mIHZlY3RvcnMgKGZyb20gZmxhdCBhcnJheSBvciBhcnJheSBvZiBUSFJFRS5WZWN0b3JOKVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJmQXJyYXkoZ2wsIHYpIHtcblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4odiwgdGhpcy5zaXplLCAyKTtcblx0Z2wudW5pZm9ybTJmdih0aGlzLmFkZHIsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzZkFycmF5KGdsLCB2KSB7XG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKHYsIHRoaXMuc2l6ZSwgMyk7XG5cdGdsLnVuaWZvcm0zZnYodGhpcy5hZGRyLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGZBcnJheShnbCwgdikge1xuXHRjb25zdCBkYXRhID0gZmxhdHRlbih2LCB0aGlzLnNpemUsIDQpO1xuXHRnbC51bmlmb3JtNGZ2KHRoaXMuYWRkciwgZGF0YSk7XG59IC8vIEFycmF5IG9mIG1hdHJpY2VzIChmcm9tIGZsYXQgYXJyYXkgb3IgYXJyYXkgb2YgVEhSRUUuTWF0cml4TilcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZU0yQXJyYXkoZ2wsIHYpIHtcblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4odiwgdGhpcy5zaXplLCA0KTtcblx0Z2wudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsIGZhbHNlLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVNM0FycmF5KGdsLCB2KSB7XG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKHYsIHRoaXMuc2l6ZSwgOSk7XG5cdGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCBmYWxzZSwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlTTRBcnJheShnbCwgdikge1xuXHRjb25zdCBkYXRhID0gZmxhdHRlbih2LCB0aGlzLnNpemUsIDE2KTtcblx0Z2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsIGZhbHNlLCBkYXRhKTtcbn0gLy8gQXJyYXkgb2YgaW50ZWdlciAvIGJvb2xlYW5cblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxaUFycmF5KGdsLCB2KSB7XG5cdGdsLnVuaWZvcm0xaXYodGhpcy5hZGRyLCB2KTtcbn0gLy8gQXJyYXkgb2YgaW50ZWdlciAvIGJvb2xlYW4gdmVjdG9ycyAoZnJvbSBmbGF0IGFycmF5KVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTJpdih0aGlzLmFkZHIsIHYpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzaUFycmF5KGdsLCB2KSB7XG5cdGdsLnVuaWZvcm0zaXYodGhpcy5hZGRyLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtNGl2KHRoaXMuYWRkciwgdik7XG59IC8vIEFycmF5IG9mIHVuc2lnbmVkIGludGVnZXJcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxdWlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtMXVpdih0aGlzLmFkZHIsIHYpO1xufSAvLyBBcnJheSBvZiB1bnNpZ25lZCBpbnRlZ2VyIHZlY3RvcnMgKGZyb20gZmxhdCBhcnJheSlcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYydWlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtMnVpdih0aGlzLmFkZHIsIHYpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzdWlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtM3Vpdih0aGlzLmFkZHIsIHYpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVY0dWlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtNHVpdih0aGlzLmFkZHIsIHYpO1xufSAvLyBBcnJheSBvZiB0ZXh0dXJlcyAoMkQgLyAzRCAvIEN1YmUgLyAyREFycmF5KVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVDFBcnJheShnbCwgdiwgdGV4dHVyZXMpIHtcblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHModGV4dHVyZXMsIG4pO1xuXHRnbC51bmlmb3JtMWl2KHRoaXMuYWRkciwgdW5pdHMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEKHZbaV0gfHwgZW1wdHlUZXh0dXJlLCB1bml0c1tpXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUM0RBcnJheShnbCwgdiwgdGV4dHVyZXMpIHtcblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHModGV4dHVyZXMsIG4pO1xuXHRnbC51bmlmb3JtMWl2KHRoaXMuYWRkciwgdW5pdHMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlM0QodltpXSB8fCBlbXB0eVRleHR1cmUzZCwgdW5pdHNbaV0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDZBcnJheShnbCwgdiwgdGV4dHVyZXMpIHtcblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHModGV4dHVyZXMsIG4pO1xuXHRnbC51bmlmb3JtMWl2KHRoaXMuYWRkciwgdW5pdHMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmUodltpXSB8fCBlbXB0eUN1YmVUZXh0dXJlLCB1bml0c1tpXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUMkRBcnJheUFycmF5KGdsLCB2LCB0ZXh0dXJlcykge1xuXHRjb25zdCBuID0gdi5sZW5ndGg7XG5cdGNvbnN0IHVuaXRzID0gYWxsb2NUZXhVbml0cyh0ZXh0dXJlcywgbik7XG5cdGdsLnVuaWZvcm0xaXYodGhpcy5hZGRyLCB1bml0cyk7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG47ICsraSkge1xuXHRcdHRleHR1cmVzLnNldFRleHR1cmUyREFycmF5KHZbaV0gfHwgZW1wdHlUZXh0dXJlMmRBcnJheSwgdW5pdHNbaV0pO1xuXHR9XG59IC8vIEhlbHBlciB0byBwaWNrIHRoZSByaWdodCBzZXR0ZXIgZm9yIGEgcHVyZSAoYm90dG9tLWxldmVsKSBhcnJheVxuXG5cbmZ1bmN0aW9uIGdldFB1cmVBcnJheVNldHRlcih0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgMHgxNDA2OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjFmQXJyYXk7XG5cdFx0Ly8gRkxPQVRcblxuXHRcdGNhc2UgMHg4YjUwOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjJmQXJyYXk7XG5cdFx0Ly8gX1ZFQzJcblxuXHRcdGNhc2UgMHg4YjUxOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjNmQXJyYXk7XG5cdFx0Ly8gX1ZFQzNcblxuXHRcdGNhc2UgMHg4YjUyOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjRmQXJyYXk7XG5cdFx0Ly8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVhOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlTTJBcnJheTtcblx0XHQvLyBfTUFUMlxuXG5cdFx0Y2FzZSAweDhiNWI6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVNM0FycmF5O1xuXHRcdC8vIF9NQVQzXG5cblx0XHRjYXNlIDB4OGI1Yzpcblx0XHRcdHJldHVybiBzZXRWYWx1ZU00QXJyYXk7XG5cdFx0Ly8gX01BVDRcblxuXHRcdGNhc2UgMHgxNDA0OlxuXHRcdGNhc2UgMHg4YjU2OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjFpQXJyYXk7XG5cdFx0Ly8gSU5ULCBCT09MXG5cblx0XHRjYXNlIDB4OGI1Mzpcblx0XHRjYXNlIDB4OGI1Nzpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYyaUFycmF5O1xuXHRcdC8vIF9WRUMyXG5cblx0XHRjYXNlIDB4OGI1NDpcblx0XHRjYXNlIDB4OGI1ODpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYzaUFycmF5O1xuXHRcdC8vIF9WRUMzXG5cblx0XHRjYXNlIDB4OGI1NTpcblx0XHRjYXNlIDB4OGI1OTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVY0aUFycmF5O1xuXHRcdC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4MTQwNTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYxdWlBcnJheTtcblx0XHQvLyBVSU5UXG5cblx0XHRjYXNlIDB4OGRjNjpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYydWlBcnJheTtcblx0XHQvLyBfVkVDMlxuXG5cdFx0Y2FzZSAweDhkYzc6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWM3VpQXJyYXk7XG5cdFx0Ly8gX1ZFQzNcblxuXHRcdGNhc2UgMHg4ZGM4OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjR1aUFycmF5O1xuXHRcdC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4OGI1ZTogLy8gU0FNUExFUl8yRFxuXG5cdFx0Y2FzZSAweDhkNjY6IC8vIFNBTVBMRVJfRVhURVJOQUxfT0VTXG5cblx0XHRjYXNlIDB4OGRjYTogLy8gSU5UX1NBTVBMRVJfMkRcblxuXHRcdGNhc2UgMHg4ZGQyOiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl8yRFxuXG5cdFx0Y2FzZSAweDhiNjI6XG5cdFx0XHQvLyBTQU1QTEVSXzJEX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDFBcnJheTtcblxuXHRcdGNhc2UgMHg4YjVmOiAvLyBTQU1QTEVSXzNEXG5cblx0XHRjYXNlIDB4OGRjYjogLy8gSU5UX1NBTVBMRVJfM0RcblxuXHRcdGNhc2UgMHg4ZGQzOlxuXHRcdFx0Ly8gVU5TSUdORURfSU5UX1NBTVBMRVJfM0Rcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQzREFycmF5O1xuXG5cdFx0Y2FzZSAweDhiNjA6IC8vIFNBTVBMRVJfQ1VCRVxuXG5cdFx0Y2FzZSAweDhkY2M6IC8vIElOVF9TQU1QTEVSX0NVQkVcblxuXHRcdGNhc2UgMHg4ZGQ0OiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFXG5cblx0XHRjYXNlIDB4OGRjNTpcblx0XHRcdC8vIFNBTVBMRVJfQ1VCRV9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQ2QXJyYXk7XG5cblx0XHRjYXNlIDB4OGRjMTogLy8gU0FNUExFUl8yRF9BUlJBWVxuXG5cdFx0Y2FzZSAweDhkY2Y6IC8vIElOVF9TQU1QTEVSXzJEX0FSUkFZXG5cblx0XHRjYXNlIDB4OGRkNzogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVlcblxuXHRcdGNhc2UgMHg4ZGM0OlxuXHRcdFx0Ly8gU0FNUExFUl8yRF9BUlJBWV9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQyREFycmF5QXJyYXk7XG5cdH1cbn0gLy8gLS0tIFVuaWZvcm0gQ2xhc3NlcyAtLS1cblxuXG5mdW5jdGlvbiBTaW5nbGVVbmlmb3JtKGlkLCBhY3RpdmVJbmZvLCBhZGRyKSB7XG5cdHRoaXMuaWQgPSBpZDtcblx0dGhpcy5hZGRyID0gYWRkcjtcblx0dGhpcy5jYWNoZSA9IFtdO1xuXHR0aGlzLnNldFZhbHVlID0gZ2V0U2luZ3VsYXJTZXR0ZXIoYWN0aXZlSW5mby50eXBlKTsgLy8gdGhpcy5wYXRoID0gYWN0aXZlSW5mby5uYW1lOyAvLyBERUJVR1xufVxuXG5mdW5jdGlvbiBQdXJlQXJyYXlVbmlmb3JtKGlkLCBhY3RpdmVJbmZvLCBhZGRyKSB7XG5cdHRoaXMuaWQgPSBpZDtcblx0dGhpcy5hZGRyID0gYWRkcjtcblx0dGhpcy5jYWNoZSA9IFtdO1xuXHR0aGlzLnNpemUgPSBhY3RpdmVJbmZvLnNpemU7XG5cdHRoaXMuc2V0VmFsdWUgPSBnZXRQdXJlQXJyYXlTZXR0ZXIoYWN0aXZlSW5mby50eXBlKTsgLy8gdGhpcy5wYXRoID0gYWN0aXZlSW5mby5uYW1lOyAvLyBERUJVR1xufVxuXG5QdXJlQXJyYXlVbmlmb3JtLnByb3RvdHlwZS51cGRhdGVDYWNoZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSAmJiBjYWNoZS5sZW5ndGggIT09IGRhdGEubGVuZ3RoKSB7XG5cdFx0dGhpcy5jYWNoZSA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5sZW5ndGgpO1xuXHR9XG5cblx0Y29weUFycmF5KGNhY2hlLCBkYXRhKTtcbn07XG5cbmZ1bmN0aW9uIFN0cnVjdHVyZWRVbmlmb3JtKGlkKSB7XG5cdHRoaXMuaWQgPSBpZDtcblx0dGhpcy5zZXEgPSBbXTtcblx0dGhpcy5tYXAgPSB7fTtcbn1cblxuU3RydWN0dXJlZFVuaWZvcm0ucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKGdsLCB2YWx1ZSwgdGV4dHVyZXMpIHtcblx0Y29uc3Qgc2VxID0gdGhpcy5zZXE7XG5cblx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzZXEubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRjb25zdCB1ID0gc2VxW2ldO1xuXHRcdHUuc2V0VmFsdWUoZ2wsIHZhbHVlW3UuaWRdLCB0ZXh0dXJlcyk7XG5cdH1cbn07IC8vIC0tLSBUb3AtbGV2ZWwgLS0tXG4vLyBQYXJzZXIgLSBidWlsZHMgdXAgdGhlIHByb3BlcnR5IHRyZWUgZnJvbSB0aGUgcGF0aCBzdHJpbmdzXG5cblxuY29uc3QgUmVQYXRoUGFydCA9IC8oXFx3KykoXFxdKT8oXFxbfFxcLik/L2c7IC8vIGV4dHJhY3RzXG4vLyBcdC0gdGhlIGlkZW50aWZpZXIgKG1lbWJlciBuYW1lIG9yIGFycmF5IGluZGV4KVxuLy9cdC0gZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgcmlnaHQgYnJhY2tldCAoZm91bmQgd2hlbiBhcnJheSBpbmRleClcbi8vXHQtIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGxlZnQgYnJhY2tldCBvciBkb3QgKHR5cGUgb2Ygc3Vic2NyaXB0KVxuLy9cbi8vIE5vdGU6IFRoZXNlIHBvcnRpb25zIGNhbiBiZSByZWFkIGluIGEgbm9uLW92ZXJsYXBwaW5nIGZhc2hpb24gYW5kXG4vLyBhbGxvdyBzdHJhaWdodGZvcndhcmQgcGFyc2luZyBvZiB0aGUgaGllcmFyY2h5IHRoYXQgV2ViR0wgZW5jb2Rlc1xuLy8gaW4gdGhlIHVuaWZvcm0gbmFtZXMuXG5cbmZ1bmN0aW9uIGFkZFVuaWZvcm0oY29udGFpbmVyLCB1bmlmb3JtT2JqZWN0KSB7XG5cdGNvbnRhaW5lci5zZXEucHVzaCh1bmlmb3JtT2JqZWN0KTtcblx0Y29udGFpbmVyLm1hcFt1bmlmb3JtT2JqZWN0LmlkXSA9IHVuaWZvcm1PYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5pZm9ybShhY3RpdmVJbmZvLCBhZGRyLCBjb250YWluZXIpIHtcblx0Y29uc3QgcGF0aCA9IGFjdGl2ZUluZm8ubmFtZSxcblx0XHRcdFx0cGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoOyAvLyByZXNldCBSZWdFeHAgb2JqZWN0LCBiZWNhdXNlIG9mIHRoZSBlYXJseSBleGl0IG9mIGEgcHJldmlvdXMgcnVuXG5cblx0UmVQYXRoUGFydC5sYXN0SW5kZXggPSAwO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBSZVBhdGhQYXJ0LmV4ZWMocGF0aCksXG5cdFx0XHRcdFx0bWF0Y2hFbmQgPSBSZVBhdGhQYXJ0Lmxhc3RJbmRleDtcblx0XHRsZXQgaWQgPSBtYXRjaFsxXTtcblx0XHRjb25zdCBpZElzSW5kZXggPSBtYXRjaFsyXSA9PT0gJ10nLFxuXHRcdFx0XHRcdHN1YnNjcmlwdCA9IG1hdGNoWzNdO1xuXHRcdGlmIChpZElzSW5kZXgpIGlkID0gaWQgfCAwOyAvLyBjb252ZXJ0IHRvIGludGVnZXJcblxuXHRcdGlmIChzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCB8fCBzdWJzY3JpcHQgPT09ICdbJyAmJiBtYXRjaEVuZCArIDIgPT09IHBhdGhMZW5ndGgpIHtcblx0XHRcdC8vIGJhcmUgbmFtZSBvciBcInB1cmVcIiBib3R0b20tbGV2ZWwgYXJyYXkgXCJbMF1cIiBzdWZmaXhcblx0XHRcdGFkZFVuaWZvcm0oY29udGFpbmVyLCBzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCA/IG5ldyBTaW5nbGVVbmlmb3JtKGlkLCBhY3RpdmVJbmZvLCBhZGRyKSA6IG5ldyBQdXJlQXJyYXlVbmlmb3JtKGlkLCBhY3RpdmVJbmZvLCBhZGRyKSk7XG5cdFx0XHRicmVhaztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc3RlcCBpbnRvIGlubmVyIG5vZGUgLyBjcmVhdGUgaXQgaW4gY2FzZSBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0XHRjb25zdCBtYXAgPSBjb250YWluZXIubWFwO1xuXHRcdFx0bGV0IG5leHQgPSBtYXBbaWRdO1xuXG5cdFx0XHRpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG5leHQgPSBuZXcgU3RydWN0dXJlZFVuaWZvcm0oaWQpO1xuXHRcdFx0XHRhZGRVbmlmb3JtKGNvbnRhaW5lciwgbmV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRhaW5lciA9IG5leHQ7XG5cdFx0fVxuXHR9XG59IC8vIFJvb3QgQ29udGFpbmVyXG5cblxuZnVuY3Rpb24gV2ViR0xVbmlmb3JtcyhnbCwgcHJvZ3JhbSkge1xuXHR0aGlzLnNlcSA9IFtdO1xuXHR0aGlzLm1hcCA9IHt9O1xuXHRjb25zdCBuID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG5cdFx0Y29uc3QgaW5mbyA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSksXG5cdFx0XHRcdFx0YWRkciA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBpbmZvLm5hbWUpO1xuXHRcdHBhcnNlVW5pZm9ybShpbmZvLCBhZGRyLCB0aGlzKTtcblx0fVxufVxuXG5XZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChnbCwgbmFtZSwgdmFsdWUsIHRleHR1cmVzKSB7XG5cdGNvbnN0IHUgPSB0aGlzLm1hcFtuYW1lXTtcblx0aWYgKHUgIT09IHVuZGVmaW5lZCkgdS5zZXRWYWx1ZShnbCwgdmFsdWUsIHRleHR1cmVzKTtcbn07XG5cbldlYkdMVW5pZm9ybXMucHJvdG90eXBlLnNldE9wdGlvbmFsID0gZnVuY3Rpb24gKGdsLCBvYmplY3QsIG5hbWUpIHtcblx0Y29uc3QgdiA9IG9iamVjdFtuYW1lXTtcblx0aWYgKHYgIT09IHVuZGVmaW5lZCkgdGhpcy5zZXRWYWx1ZShnbCwgbmFtZSwgdik7XG59OyAvLyBTdGF0aWMgaW50ZXJmYWNlXG5cblxuV2ViR0xVbmlmb3Jtcy51cGxvYWQgPSBmdW5jdGlvbiAoZ2wsIHNlcSwgdmFsdWVzLCB0ZXh0dXJlcykge1xuXHRmb3IgKGxldCBpID0gMCwgbiA9IHNlcS5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdGNvbnN0IHUgPSBzZXFbaV0sXG5cdFx0XHRcdFx0diA9IHZhbHVlc1t1LmlkXTtcblxuXHRcdGlmICh2Lm5lZWRzVXBkYXRlICE9PSBmYWxzZSkge1xuXHRcdFx0Ly8gbm90ZTogYWx3YXlzIHVwZGF0aW5nIHdoZW4gLm5lZWRzVXBkYXRlIGlzIHVuZGVmaW5lZFxuXHRcdFx0dS5zZXRWYWx1ZShnbCwgdi52YWx1ZSwgdGV4dHVyZXMpO1xuXHRcdH1cblx0fVxufTtcblxuV2ViR0xVbmlmb3Jtcy5zZXFXaXRoVmFsdWUgPSBmdW5jdGlvbiAoc2VxLCB2YWx1ZXMpIHtcblx0Y29uc3QgciA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwLCBuID0gc2VxLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0Y29uc3QgdSA9IHNlcVtpXTtcblx0XHRpZiAodS5pZCBpbiB2YWx1ZXMpIHIucHVzaCh1KTtcblx0fVxuXG5cdHJldHVybiByO1xufTtcblxuZnVuY3Rpb24gV2ViR0xTaGFkZXIoZ2wsIHR5cGUsIHN0cmluZykge1xuXHRjb25zdCBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cdGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHN0cmluZyk7XG5cdGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblx0cmV0dXJuIHNoYWRlcjtcbn1cblxubGV0IHByb2dyYW1JZENvdW50ID0gMDtcblxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoc3RyaW5nKSB7XG5cdGNvbnN0IGxpbmVzID0gc3RyaW5nLnNwbGl0KCdcXG4nKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGluZXNbaV0gPSBpICsgMSArICc6ICcgKyBsaW5lc1tpXTtcblx0fVxuXG5cdHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0RW5jb2RpbmdDb21wb25lbnRzKGVuY29kaW5nKSB7XG5cdHN3aXRjaCAoZW5jb2RpbmcpIHtcblx0XHRjYXNlIExpbmVhckVuY29kaW5nOlxuXHRcdFx0cmV0dXJuIFsnTGluZWFyJywgJyggdmFsdWUgKSddO1xuXG5cdFx0Y2FzZSBzUkdCRW5jb2Rpbmc6XG5cdFx0XHRyZXR1cm4gWydzUkdCJywgJyggdmFsdWUgKSddO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzonLCBlbmNvZGluZyk7XG5cdFx0XHRyZXR1cm4gWydMaW5lYXInLCAnKCB2YWx1ZSApJ107XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2hhZGVyRXJyb3JzKGdsLCBzaGFkZXIsIHR5cGUpIHtcblx0Y29uc3Qgc3RhdHVzID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpO1xuXHRjb25zdCBlcnJvcnMgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikudHJpbSgpO1xuXHRpZiAoc3RhdHVzICYmIGVycm9ycyA9PT0gJycpIHJldHVybiAnJzsgLy8gLS1lbmFibGUtcHJpdmlsZWdlZC13ZWJnbC1leHRlbnNpb25cblx0Ly8gY29uc29sZS5sb2coICcqKicgKyB0eXBlICsgJyoqJywgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCR0xfZGVidWdfc2hhZGVycycgKS5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKCBzaGFkZXIgKSApO1xuXG5cdHJldHVybiB0eXBlLnRvVXBwZXJDYXNlKCkgKyAnXFxuXFxuJyArIGVycm9ycyArICdcXG5cXG4nICsgYWRkTGluZU51bWJlcnMoZ2wuZ2V0U2hhZGVyU291cmNlKHNoYWRlcikpO1xufVxuXG5mdW5jdGlvbiBnZXRUZXhlbEVuY29kaW5nRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBlbmNvZGluZykge1xuXHRjb25zdCBjb21wb25lbnRzID0gZ2V0RW5jb2RpbmdDb21wb25lbnRzKGVuY29kaW5nKTtcblx0cmV0dXJuICd2ZWM0ICcgKyBmdW5jdGlvbk5hbWUgKyAnKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8nICsgY29tcG9uZW50c1swXSArIGNvbXBvbmVudHNbMV0gKyAnOyB9Jztcbn1cblxuZnVuY3Rpb24gZ2V0VG9uZU1hcHBpbmdGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHRvbmVNYXBwaW5nKSB7XG5cdGxldCB0b25lTWFwcGluZ05hbWU7XG5cblx0c3dpdGNoICh0b25lTWFwcGluZykge1xuXHRcdGNhc2UgTGluZWFyVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnTGluZWFyJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBSZWluaGFyZFRvbmVNYXBwaW5nOlxuXHRcdFx0dG9uZU1hcHBpbmdOYW1lID0gJ1JlaW5oYXJkJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBDaW5lb25Ub25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdPcHRpbWl6ZWRDaW5lb24nO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIEFDRVNGaWxtaWNUb25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdBQ0VTRmlsbWljJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBDdXN0b21Ub25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdDdXN0b20nO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOicsIHRvbmVNYXBwaW5nKTtcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdMaW5lYXInO1xuXHR9XG5cblx0cmV0dXJuICd2ZWMzICcgKyBmdW5jdGlvbk5hbWUgKyAnKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gJyArIHRvbmVNYXBwaW5nTmFtZSArICdUb25lTWFwcGluZyggY29sb3IgKTsgfSc7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXh0ZW5zaW9ucyhwYXJhbWV0ZXJzKSB7XG5cdGNvbnN0IGNodW5rcyA9IFtwYXJhbWV0ZXJzLmV4dGVuc2lvbkRlcml2YXRpdmVzIHx8IHBhcmFtZXRlcnMuZW52TWFwQ3ViZVVWIHx8IHBhcmFtZXRlcnMuYnVtcE1hcCB8fCBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCB8fCBwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCB8fCBwYXJhbWV0ZXJzLmZsYXRTaGFkaW5nIHx8IHBhcmFtZXRlcnMuc2hhZGVySUQgPT09ICdwaHlzaWNhbCcgPyAnI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUnIDogJycsIChwYXJhbWV0ZXJzLmV4dGVuc2lvbkZyYWdEZXB0aCB8fCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGggPyAnI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZScgOiAnJywgcGFyYW1ldGVycy5leHRlbnNpb25EcmF3QnVmZmVycyAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnMgPyAnI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZScgOiAnJywgKHBhcmFtZXRlcnMuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRCB8fCBwYXJhbWV0ZXJzLmVudk1hcCB8fCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbikgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2QgPyAnI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlJyA6ICcnXTtcblx0cmV0dXJuIGNodW5rcy5maWx0ZXIoZmlsdGVyRW1wdHlMaW5lKS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVEZWZpbmVzKGRlZmluZXMpIHtcblx0Y29uc3QgY2h1bmtzID0gW107XG5cblx0Zm9yIChjb25zdCBuYW1lIGluIGRlZmluZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGRlZmluZXNbbmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBmYWxzZSkgY29udGludWU7XG5cdFx0Y2h1bmtzLnB1c2goJyNkZWZpbmUgJyArIG5hbWUgKyAnICcgKyB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBmZXRjaEF0dHJpYnV0ZUxvY2F0aW9ucyhnbCwgcHJvZ3JhbSkge1xuXHRjb25zdCBhdHRyaWJ1dGVzID0ge307XG5cdGNvbnN0IG4gPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdGNvbnN0IGluZm8gPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG5cdFx0Y29uc3QgbmFtZSA9IGluZm8ubmFtZTtcblx0XHRsZXQgbG9jYXRpb25TaXplID0gMTtcblx0XHRpZiAoaW5mby50eXBlID09PSBnbC5GTE9BVF9NQVQyKSBsb2NhdGlvblNpemUgPSAyO1xuXHRcdGlmIChpbmZvLnR5cGUgPT09IGdsLkZMT0FUX01BVDMpIGxvY2F0aW9uU2l6ZSA9IDM7XG5cdFx0aWYgKGluZm8udHlwZSA9PT0gZ2wuRkxPQVRfTUFUNCkgbG9jYXRpb25TaXplID0gNDsgLy8gY29uc29sZS5sb2coICdUSFJFRS5XZWJHTFByb2dyYW06IEFDVElWRSBWRVJURVggQVRUUklCVVRFOicsIG5hbWUsIGkgKTtcblxuXHRcdGF0dHJpYnV0ZXNbbmFtZV0gPSB7XG5cdFx0XHR0eXBlOiBpbmZvLnR5cGUsXG5cdFx0XHRsb2NhdGlvbjogZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG5cdFx0XHRsb2NhdGlvblNpemU6IGxvY2F0aW9uU2l6ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gYXR0cmlidXRlcztcbn1cblxuZnVuY3Rpb24gZmlsdGVyRW1wdHlMaW5lKHN0cmluZykge1xuXHRyZXR1cm4gc3RyaW5nICE9PSAnJztcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUxpZ2h0TnVtcyhzdHJpbmcsIHBhcmFtZXRlcnMpIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLCBwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRTaGFkb3dzKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNsaXBwaW5nUGxhbmVOdW1zKHN0cmluZywgcGFyYW1ldGVycykge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZywgcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMgLSBwYXJhbWV0ZXJzLm51bUNsaXBJbnRlcnNlY3Rpb24pO1xufSAvLyBSZXNvbHZlIEluY2x1ZGVzXG5cblxuY29uc3QgaW5jbHVkZVBhdHRlcm4gPSAvXlsgXFx0XSojaW5jbHVkZSArPChbXFx3XFxkLi9dKyk+L2dtO1xuXG5mdW5jdGlvbiByZXNvbHZlSW5jbHVkZXMoc3RyaW5nKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShpbmNsdWRlUGF0dGVybiwgaW5jbHVkZVJlcGxhY2VyKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZVJlcGxhY2VyKG1hdGNoLCBpbmNsdWRlKSB7XG5cdGNvbnN0IHN0cmluZyA9IFNoYWRlckNodW5rW2luY2x1ZGVdO1xuXG5cdGlmIChzdHJpbmcgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwnICsgaW5jbHVkZSArICc+Jyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzb2x2ZUluY2x1ZGVzKHN0cmluZyk7XG59IC8vIFVucm9sbCBMb29wc1xuXG5cbmNvbnN0IGRlcHJlY2F0ZWRVbnJvbGxMb29wUGF0dGVybiA9IC8jcHJhZ21hIHVucm9sbF9sb29wW1xcc10rP2ZvciBcXCggaW50IGkgXFw9IChcXGQrKVxcOyBpIDwgKFxcZCspXFw7IGkgXFwrXFwrIFxcKSBcXHsoW1xcc1xcU10rPykoPz1cXH0pXFx9L2c7XG5jb25zdCB1bnJvbGxMb29wUGF0dGVybiA9IC8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxzK2ZvclxccypcXChcXHMqaW50XFxzK2lcXHMqPVxccyooXFxkKylcXHMqO1xccyppXFxzKjxcXHMqKFxcZCspXFxzKjtcXHMqaVxccypcXCtcXCtcXHMqXFwpXFxzKnsoW1xcc1xcU10rPyl9XFxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7XG5cbmZ1bmN0aW9uIHVucm9sbExvb3BzKHN0cmluZykge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UodW5yb2xsTG9vcFBhdHRlcm4sIGxvb3BSZXBsYWNlcikucmVwbGFjZShkZXByZWNhdGVkVW5yb2xsTG9vcFBhdHRlcm4sIGRlcHJlY2F0ZWRMb29wUmVwbGFjZXIpO1xufVxuXG5mdW5jdGlvbiBkZXByZWNhdGVkTG9vcFJlcGxhY2VyKG1hdGNoLCBzdGFydCwgZW5kLCBzbmlwcGV0KSB7XG5cdGNvbnNvbGUud2FybignV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbG9vcFJlcGxhY2VyKG1hdGNoLCBzdGFydCwgZW5kLCBzbmlwcGV0KTtcbn1cblxuZnVuY3Rpb24gbG9vcFJlcGxhY2VyKG1hdGNoLCBzdGFydCwgZW5kLCBzbmlwcGV0KSB7XG5cdGxldCBzdHJpbmcgPSAnJztcblxuXHRmb3IgKGxldCBpID0gcGFyc2VJbnQoc3RhcnQpOyBpIDwgcGFyc2VJbnQoZW5kKTsgaSsrKSB7XG5cdFx0c3RyaW5nICs9IHNuaXBwZXQucmVwbGFjZSgvXFxbXFxzKmlcXHMqXFxdL2csICdbICcgKyBpICsgJyBdJykucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLCBpKTtcblx0fVxuXG5cdHJldHVybiBzdHJpbmc7XG59IC8vXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVQcmVjaXNpb24ocGFyYW1ldGVycykge1xuXHRsZXQgcHJlY2lzaW9uc3RyaW5nID0gJ3ByZWNpc2lvbiAnICsgcGFyYW1ldGVycy5wcmVjaXNpb24gKyAnIGZsb2F0O1xcbnByZWNpc2lvbiAnICsgcGFyYW1ldGVycy5wcmVjaXNpb24gKyAnIGludDsnO1xuXG5cdGlmIChwYXJhbWV0ZXJzLnByZWNpc2lvbiA9PT0gJ2hpZ2hwJykge1xuXHRcdHByZWNpc2lvbnN0cmluZyArPSAnXFxuI2RlZmluZSBISUdIX1BSRUNJU0lPTic7XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVycy5wcmVjaXNpb24gPT09ICdtZWRpdW1wJykge1xuXHRcdHByZWNpc2lvbnN0cmluZyArPSAnXFxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OJztcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLnByZWNpc2lvbiA9PT0gJ2xvd3AnKSB7XG5cdFx0cHJlY2lzaW9uc3RyaW5nICs9ICdcXG4jZGVmaW5lIExPV19QUkVDSVNJT04nO1xuXHR9XG5cblx0cmV0dXJuIHByZWNpc2lvbnN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTaGFkb3dNYXBUeXBlRGVmaW5lKHBhcmFtZXRlcnMpIHtcblx0bGV0IHNoYWRvd01hcFR5cGVEZWZpbmUgPSAnU0hBRE9XTUFQX1RZUEVfQkFTSUMnO1xuXG5cdGlmIChwYXJhbWV0ZXJzLnNoYWRvd01hcFR5cGUgPT09IFBDRlNoYWRvd01hcCkge1xuXHRcdHNoYWRvd01hcFR5cGVEZWZpbmUgPSAnU0hBRE9XTUFQX1RZUEVfUENGJztcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLnNoYWRvd01hcFR5cGUgPT09IFBDRlNvZnRTaGFkb3dNYXApIHtcblx0XHRzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX1BDRl9TT0ZUJztcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLnNoYWRvd01hcFR5cGUgPT09IFZTTVNoYWRvd01hcCkge1xuXHRcdHNoYWRvd01hcFR5cGVEZWZpbmUgPSAnU0hBRE9XTUFQX1RZUEVfVlNNJztcblx0fVxuXG5cdHJldHVybiBzaGFkb3dNYXBUeXBlRGVmaW5lO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVudk1hcFR5cGVEZWZpbmUocGFyYW1ldGVycykge1xuXHRsZXQgZW52TWFwVHlwZURlZmluZSA9ICdFTlZNQVBfVFlQRV9DVUJFJztcblxuXHRpZiAocGFyYW1ldGVycy5lbnZNYXApIHtcblx0XHRzd2l0Y2ggKHBhcmFtZXRlcnMuZW52TWFwTW9kZSkge1xuXHRcdFx0Y2FzZSBDdWJlUmVmbGVjdGlvbk1hcHBpbmc6XG5cdFx0XHRjYXNlIEN1YmVSZWZyYWN0aW9uTWFwcGluZzpcblx0XHRcdFx0ZW52TWFwVHlwZURlZmluZSA9ICdFTlZNQVBfVFlQRV9DVUJFJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6XG5cdFx0XHRjYXNlIEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOlxuXHRcdFx0XHRlbnZNYXBUeXBlRGVmaW5lID0gJ0VOVk1BUF9UWVBFX0NVQkVfVVYnO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZW52TWFwVHlwZURlZmluZTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFbnZNYXBNb2RlRGVmaW5lKHBhcmFtZXRlcnMpIHtcblx0bGV0IGVudk1hcE1vZGVEZWZpbmUgPSAnRU5WTUFQX01PREVfUkVGTEVDVElPTic7XG5cblx0aWYgKHBhcmFtZXRlcnMuZW52TWFwKSB7XG5cdFx0c3dpdGNoIChwYXJhbWV0ZXJzLmVudk1hcE1vZGUpIHtcblx0XHRcdGNhc2UgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOlxuXHRcdFx0Y2FzZSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpcblx0XHRcdFx0ZW52TWFwTW9kZURlZmluZSA9ICdFTlZNQVBfTU9ERV9SRUZSQUNUSU9OJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVudk1hcE1vZGVEZWZpbmU7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW52TWFwQmxlbmRpbmdEZWZpbmUocGFyYW1ldGVycykge1xuXHRsZXQgZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX05PTkUnO1xuXG5cdGlmIChwYXJhbWV0ZXJzLmVudk1hcCkge1xuXHRcdHN3aXRjaCAocGFyYW1ldGVycy5jb21iaW5lKSB7XG5cdFx0XHRjYXNlIE11bHRpcGx5T3BlcmF0aW9uOlxuXHRcdFx0XHRlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFknO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBNaXhPcGVyYXRpb246XG5cdFx0XHRcdGVudk1hcEJsZW5kaW5nRGVmaW5lID0gJ0VOVk1BUF9CTEVORElOR19NSVgnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBZGRPcGVyYXRpb246XG5cdFx0XHRcdGVudk1hcEJsZW5kaW5nRGVmaW5lID0gJ0VOVk1BUF9CTEVORElOR19BREQnO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZW52TWFwQmxlbmRpbmdEZWZpbmU7XG59XG5cbmZ1bmN0aW9uIFdlYkdMUHJvZ3JhbShyZW5kZXJlciwgY2FjaGVLZXksIHBhcmFtZXRlcnMsIGJpbmRpbmdTdGF0ZXMpIHtcblx0Ly8gVE9ETyBTZW5kIHRoaXMgZXZlbnQgdG8gVGhyZWUuanMgRGV2VG9vbHNcblx0Ly8gY29uc29sZS5sb2coICdXZWJHTFByb2dyYW0nLCBjYWNoZUtleSApO1xuXHRjb25zdCBnbCA9IHJlbmRlcmVyLmdldENvbnRleHQoKTtcblx0Y29uc3QgZGVmaW5lcyA9IHBhcmFtZXRlcnMuZGVmaW5lcztcblx0bGV0IHZlcnRleFNoYWRlciA9IHBhcmFtZXRlcnMudmVydGV4U2hhZGVyO1xuXHRsZXQgZnJhZ21lbnRTaGFkZXIgPSBwYXJhbWV0ZXJzLmZyYWdtZW50U2hhZGVyO1xuXHRjb25zdCBzaGFkb3dNYXBUeXBlRGVmaW5lID0gZ2VuZXJhdGVTaGFkb3dNYXBUeXBlRGVmaW5lKHBhcmFtZXRlcnMpO1xuXHRjb25zdCBlbnZNYXBUeXBlRGVmaW5lID0gZ2VuZXJhdGVFbnZNYXBUeXBlRGVmaW5lKHBhcmFtZXRlcnMpO1xuXHRjb25zdCBlbnZNYXBNb2RlRGVmaW5lID0gZ2VuZXJhdGVFbnZNYXBNb2RlRGVmaW5lKHBhcmFtZXRlcnMpO1xuXHRjb25zdCBlbnZNYXBCbGVuZGluZ0RlZmluZSA9IGdlbmVyYXRlRW52TWFwQmxlbmRpbmdEZWZpbmUocGFyYW1ldGVycyk7XG5cdGNvbnN0IGN1c3RvbUV4dGVuc2lvbnMgPSBwYXJhbWV0ZXJzLmlzV2ViR0wyID8gJycgOiBnZW5lcmF0ZUV4dGVuc2lvbnMocGFyYW1ldGVycyk7XG5cdGNvbnN0IGN1c3RvbURlZmluZXMgPSBnZW5lcmF0ZURlZmluZXMoZGVmaW5lcyk7XG5cdGNvbnN0IHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cdGxldCBwcmVmaXhWZXJ0ZXgsIHByZWZpeEZyYWdtZW50O1xuXHRsZXQgdmVyc2lvblN0cmluZyA9IHBhcmFtZXRlcnMuZ2xzbFZlcnNpb24gPyAnI3ZlcnNpb24gJyArIHBhcmFtZXRlcnMuZ2xzbFZlcnNpb24gKyAnXFxuJyA6ICcnO1xuXG5cdGlmIChwYXJhbWV0ZXJzLmlzUmF3U2hhZGVyTWF0ZXJpYWwpIHtcblx0XHRwcmVmaXhWZXJ0ZXggPSBbY3VzdG9tRGVmaW5lc10uZmlsdGVyKGZpbHRlckVtcHR5TGluZSkuam9pbignXFxuJyk7XG5cblx0XHRpZiAocHJlZml4VmVydGV4Lmxlbmd0aCA+IDApIHtcblx0XHRcdHByZWZpeFZlcnRleCArPSAnXFxuJztcblx0XHR9XG5cblx0XHRwcmVmaXhGcmFnbWVudCA9IFtjdXN0b21FeHRlbnNpb25zLCBjdXN0b21EZWZpbmVzXS5maWx0ZXIoZmlsdGVyRW1wdHlMaW5lKS5qb2luKCdcXG4nKTtcblxuXHRcdGlmIChwcmVmaXhGcmFnbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcmVmaXhGcmFnbWVudCArPSAnXFxuJztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cHJlZml4VmVydGV4ID0gW2dlbmVyYXRlUHJlY2lzaW9uKHBhcmFtZXRlcnMpLCAnI2RlZmluZSBTSEFERVJfTkFNRSAnICsgcGFyYW1ldGVycy5zaGFkZXJOYW1lLCBjdXN0b21EZWZpbmVzLCBwYXJhbWV0ZXJzLmluc3RhbmNpbmcgPyAnI2RlZmluZSBVU0VfSU5TVEFOQ0lORycgOiAnJywgcGFyYW1ldGVycy5pbnN0YW5jaW5nQ29sb3IgPyAnI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUicgOiAnJywgcGFyYW1ldGVycy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzID8gJyNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTJyA6ICcnLCAnI2RlZmluZSBNQVhfQk9ORVMgJyArIHBhcmFtZXRlcnMubWF4Qm9uZXMsIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nID8gJyNkZWZpbmUgVVNFX0ZPRycgOiAnJywgcGFyYW1ldGVycy51c2VGb2cgJiYgcGFyYW1ldGVycy5mb2dFeHAyID8gJyNkZWZpbmUgRk9HX0VYUDInIDogJycsIHBhcmFtZXRlcnMubWFwID8gJyNkZWZpbmUgVVNFX01BUCcgOiAnJywgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSBVU0VfRU5WTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBNb2RlRGVmaW5lIDogJycsIHBhcmFtZXRlcnMubGlnaHRNYXAgPyAnI2RlZmluZSBVU0VfTElHSFRNQVAnIDogJycsIHBhcmFtZXRlcnMuYW9NYXAgPyAnI2RlZmluZSBVU0VfQU9NQVAnIDogJycsIHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAnIDogJycsIHBhcmFtZXRlcnMuYnVtcE1hcCA/ICcjZGVmaW5lIFVTRV9CVU1QTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMub2JqZWN0U3BhY2VOb3JtYWxNYXAgPyAnI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMudGFuZ2VudFNwYWNlTm9ybWFsTWFwID8gJyNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXRNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmNsZWFyY29hdFJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmRpc3BsYWNlbWVudE1hcCAmJiBwYXJhbWV0ZXJzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMgPyAnI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNwZWN1bGFyTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNwZWN1bGFySW50ZW5zaXR5TWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNwZWN1bGFyQ29sb3JNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCcgOiAnJywgcGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm1ldGFsbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAnIDogJycsIHBhcmFtZXRlcnMuYWxwaGFNYXAgPyAnI2RlZmluZSBVU0VfQUxQSEFNQVAnIDogJycsIHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTicgOiAnJywgcGFyYW1ldGVycy50cmFuc21pc3Npb25NYXAgPyAnI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnRoaWNrbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9USElDS05FU1NNQVAnIDogJycsIHBhcmFtZXRlcnMuc2hlZW5Db2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzID8gJyNkZWZpbmUgVVNFX1RBTkdFTlQnIDogJycsIHBhcmFtZXRlcnMudmVydGV4Q29sb3JzID8gJyNkZWZpbmUgVVNFX0NPTE9SJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleEFscGhhcyA/ICcjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQScgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhVdnMgPyAnI2RlZmluZSBVU0VfVVYnIDogJycsIHBhcmFtZXRlcnMudXZzVmVydGV4T25seSA/ICcjZGVmaW5lIFVWU19WRVJURVhfT05MWScgOiAnJywgcGFyYW1ldGVycy5mbGF0U2hhZGluZyA/ICcjZGVmaW5lIEZMQVRfU0hBREVEJyA6ICcnLCBwYXJhbWV0ZXJzLnNraW5uaW5nID8gJyNkZWZpbmUgVVNFX1NLSU5OSU5HJyA6ICcnLCBwYXJhbWV0ZXJzLnVzZVZlcnRleFRleHR1cmUgPyAnI2RlZmluZSBCT05FX1RFWFRVUkUnIDogJycsIHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzID8gJyNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUycgOiAnJywgcGFyYW1ldGVycy5tb3JwaE5vcm1hbHMgJiYgcGFyYW1ldGVycy5mbGF0U2hhZGluZyA9PT0gZmFsc2UgPyAnI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTJyA6ICcnLCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyAmJiBwYXJhbWV0ZXJzLmlzV2ViR0wyID8gJyNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUnIDogJycsIHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzICYmIHBhcmFtZXRlcnMuaXNXZWJHTDIgPyAnI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgJyArIHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzQ291bnQgOiAnJywgcGFyYW1ldGVycy5kb3VibGVTaWRlZCA/ICcjZGVmaW5lIERPVUJMRV9TSURFRCcgOiAnJywgcGFyYW1ldGVycy5mbGlwU2lkZWQgPyAnI2RlZmluZSBGTElQX1NJREVEJyA6ICcnLCBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSBVU0VfU0hBRE9XTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSAnICsgc2hhZG93TWFwVHlwZURlZmluZSA6ICcnLCBwYXJhbWV0ZXJzLnNpemVBdHRlbnVhdGlvbiA/ICcjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04nIDogJycsIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRicgOiAnJywgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGggPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6ICcnLCAndW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OycsICd1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OycsICd1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsnLCAndW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7JywgJ3VuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7JywgJ3VuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsnLCAndW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOycsICcjaWZkZWYgVVNFX0lOU1RBTkNJTkcnLCAnXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsnLCAnI2VuZGlmJywgJyNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUicsICdcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7JywgJyNlbmRpZicsICdhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsnLCAnYXR0cmlidXRlIHZlYzMgbm9ybWFsOycsICdhdHRyaWJ1dGUgdmVjMiB1djsnLCAnI2lmZGVmIFVTRV9UQU5HRU5UJywgJ1x0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsnLCAnI2VuZGlmJywgJyNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKScsICdcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yOycsICcjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKScsICdcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOycsICcjZW5kaWYnLCAnI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApJywgJ1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOycsICdcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsnLCAnXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7JywgJ1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOycsICdcdCNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTJywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7JywgJ1x0I2Vsc2UnLCAnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsnLCAnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsnLCAnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsnLCAnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsnLCAnXHQjZW5kaWYnLCAnI2VuZGlmJywgJyNpZmRlZiBVU0VfU0tJTk5JTkcnLCAnXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7JywgJ1x0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsnLCAnI2VuZGlmJywgJ1xcbiddLmZpbHRlcihmaWx0ZXJFbXB0eUxpbmUpLmpvaW4oJ1xcbicpO1xuXHRcdHByZWZpeEZyYWdtZW50ID0gW2N1c3RvbUV4dGVuc2lvbnMsIGdlbmVyYXRlUHJlY2lzaW9uKHBhcmFtZXRlcnMpLCAnI2RlZmluZSBTSEFERVJfTkFNRSAnICsgcGFyYW1ldGVycy5zaGFkZXJOYW1lLCBjdXN0b21EZWZpbmVzLCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZyA/ICcjZGVmaW5lIFVTRV9GT0cnIDogJycsIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nRXhwMiA/ICcjZGVmaW5lIEZPR19FWFAyJyA6ICcnLCBwYXJhbWV0ZXJzLm1hcCA/ICcjZGVmaW5lIFVTRV9NQVAnIDogJycsIHBhcmFtZXRlcnMubWF0Y2FwID8gJyNkZWZpbmUgVVNFX01BVENBUCcgOiAnJywgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSBVU0VfRU5WTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBUeXBlRGVmaW5lIDogJycsIHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgJyArIGVudk1hcE1vZGVEZWZpbmUgOiAnJywgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSAnICsgZW52TWFwQmxlbmRpbmdEZWZpbmUgOiAnJywgcGFyYW1ldGVycy5saWdodE1hcCA/ICcjZGVmaW5lIFVTRV9MSUdIVE1BUCcgOiAnJywgcGFyYW1ldGVycy5hb01hcCA/ICcjZGVmaW5lIFVTRV9BT01BUCcgOiAnJywgcGFyYW1ldGVycy5lbWlzc2l2ZU1hcCA/ICcjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCcgOiAnJywgcGFyYW1ldGVycy5idW1wTWFwID8gJyNkZWZpbmUgVVNFX0JVTVBNQVAnIDogJycsIHBhcmFtZXRlcnMubm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCA/ICcjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXAgPyAnI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmNsZWFyY29hdCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVQnIDogJycsIHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXROb3JtYWxNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhckNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAnIDogJycsIHBhcmFtZXRlcnMucm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5tZXRhbG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmFscGhhTWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmFscGhhVGVzdCA/ICcjZGVmaW5lIFVTRV9BTFBIQVRFU1QnIDogJycsIHBhcmFtZXRlcnMuc2hlZW4gPyAnI2RlZmluZSBVU0VfU0hFRU4nIDogJycsIHBhcmFtZXRlcnMuc2hlZW5Db2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04nIDogJycsIHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uTWFwID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCcgOiAnJywgcGFyYW1ldGVycy50aGlja25lc3NNYXAgPyAnI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmRlY29kZVZpZGVvVGV4dHVyZSA/ICcjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzID8gJyNkZWZpbmUgVVNFX1RBTkdFTlQnIDogJycsIHBhcmFtZXRlcnMudmVydGV4Q29sb3JzIHx8IHBhcmFtZXRlcnMuaW5zdGFuY2luZ0NvbG9yID8gJyNkZWZpbmUgVVNFX0NPTE9SJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleEFscGhhcyA/ICcjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQScgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhVdnMgPyAnI2RlZmluZSBVU0VfVVYnIDogJycsIHBhcmFtZXRlcnMudXZzVmVydGV4T25seSA/ICcjZGVmaW5lIFVWU19WRVJURVhfT05MWScgOiAnJywgcGFyYW1ldGVycy5ncmFkaWVudE1hcCA/ICcjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCcgOiAnJywgcGFyYW1ldGVycy5mbGF0U2hhZGluZyA/ICcjZGVmaW5lIEZMQVRfU0hBREVEJyA6ICcnLCBwYXJhbWV0ZXJzLmRvdWJsZVNpZGVkID8gJyNkZWZpbmUgRE9VQkxFX1NJREVEJyA6ICcnLCBwYXJhbWV0ZXJzLmZsaXBTaWRlZCA/ICcjZGVmaW5lIEZMSVBfU0lERUQnIDogJycsIHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/ICcjZGVmaW5lIFVTRV9TSEFET1dNQVAnIDogJycsIHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/ICcjZGVmaW5lICcgKyBzaGFkb3dNYXBUeXBlRGVmaW5lIDogJycsIHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhID8gJyNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQScgOiAnJywgcGFyYW1ldGVycy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA/ICcjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMnIDogJycsIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRicgOiAnJywgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGggPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6ICcnLCAocGFyYW1ldGVycy5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EIHx8IHBhcmFtZXRlcnMuZW52TWFwKSAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZCA/ICcjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCcgOiAnJywgJ3VuaWZvcm0gbWF0NCB2aWV3TWF0cml4OycsICd1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247JywgJ3VuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsnLCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVNYXBwaW5nID8gJyNkZWZpbmUgVE9ORV9NQVBQSU5HJyA6ICcnLCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVNYXBwaW5nID8gU2hhZGVyQ2h1bmtbJ3RvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQnXSA6ICcnLCAvLyB0aGlzIGNvZGUgaXMgcmVxdWlyZWQgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgdGhlIHRvbmVNYXBwaW5nKCkgZnVuY3Rpb24gZGVmaW5lZCBiZWxvd1xuXHRcdHBhcmFtZXRlcnMudG9uZU1hcHBpbmcgIT09IE5vVG9uZU1hcHBpbmcgPyBnZXRUb25lTWFwcGluZ0Z1bmN0aW9uKCd0b25lTWFwcGluZycsIHBhcmFtZXRlcnMudG9uZU1hcHBpbmcpIDogJycsIHBhcmFtZXRlcnMuZGl0aGVyaW5nID8gJyNkZWZpbmUgRElUSEVSSU5HJyA6ICcnLCBwYXJhbWV0ZXJzLmFscGhhV3JpdGUgPyAnJyA6ICcjZGVmaW5lIE9QQVFVRScsIFNoYWRlckNodW5rWydlbmNvZGluZ3NfcGFyc19mcmFnbWVudCddLCAvLyB0aGlzIGNvZGUgaXMgcmVxdWlyZWQgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgZW5jb2RpbmcvZGVjb2RpbmcgZnVuY3Rpb24gZGVmaW5lZCBiZWxvd1xuXHRcdGdldFRleGVsRW5jb2RpbmdGdW5jdGlvbignbGluZWFyVG9PdXRwdXRUZXhlbCcsIHBhcmFtZXRlcnMub3V0cHV0RW5jb2RpbmcpLCBwYXJhbWV0ZXJzLmRlcHRoUGFja2luZyA/ICcjZGVmaW5lIERFUFRIX1BBQ0tJTkcgJyArIHBhcmFtZXRlcnMuZGVwdGhQYWNraW5nIDogJycsICdcXG4nXS5maWx0ZXIoZmlsdGVyRW1wdHlMaW5lKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHZlcnRleFNoYWRlciA9IHJlc29sdmVJbmNsdWRlcyh2ZXJ0ZXhTaGFkZXIpO1xuXHR2ZXJ0ZXhTaGFkZXIgPSByZXBsYWNlTGlnaHROdW1zKHZlcnRleFNoYWRlciwgcGFyYW1ldGVycyk7XG5cdHZlcnRleFNoYWRlciA9IHJlcGxhY2VDbGlwcGluZ1BsYW5lTnVtcyh2ZXJ0ZXhTaGFkZXIsIHBhcmFtZXRlcnMpO1xuXHRmcmFnbWVudFNoYWRlciA9IHJlc29sdmVJbmNsdWRlcyhmcmFnbWVudFNoYWRlcik7XG5cdGZyYWdtZW50U2hhZGVyID0gcmVwbGFjZUxpZ2h0TnVtcyhmcmFnbWVudFNoYWRlciwgcGFyYW1ldGVycyk7XG5cdGZyYWdtZW50U2hhZGVyID0gcmVwbGFjZUNsaXBwaW5nUGxhbmVOdW1zKGZyYWdtZW50U2hhZGVyLCBwYXJhbWV0ZXJzKTtcblx0dmVydGV4U2hhZGVyID0gdW5yb2xsTG9vcHModmVydGV4U2hhZGVyKTtcblx0ZnJhZ21lbnRTaGFkZXIgPSB1bnJvbGxMb29wcyhmcmFnbWVudFNoYWRlcik7XG5cblx0aWYgKHBhcmFtZXRlcnMuaXNXZWJHTDIgJiYgcGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsICE9PSB0cnVlKSB7XG5cdFx0Ly8gR0xTTCAzLjAgY29udmVyc2lvbiBmb3IgYnVpbHQtaW4gbWF0ZXJpYWxzIGFuZCBTaGFkZXJNYXRlcmlhbFxuXHRcdHZlcnNpb25TdHJpbmcgPSAnI3ZlcnNpb24gMzAwIGVzXFxuJztcblx0XHRwcmVmaXhWZXJ0ZXggPSBbJ3ByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OycsICcjZGVmaW5lIGF0dHJpYnV0ZSBpbicsICcjZGVmaW5lIHZhcnlpbmcgb3V0JywgJyNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUnXS5qb2luKCdcXG4nKSArICdcXG4nICsgcHJlZml4VmVydGV4O1xuXHRcdHByZWZpeEZyYWdtZW50ID0gWycjZGVmaW5lIHZhcnlpbmcgaW4nLCBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID09PSBHTFNMMyA/ICcnIDogJ2xheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsnLCBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID09PSBHTFNMMyA/ICcnIDogJyNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvcicsICcjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgnLCAnI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZScsICcjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUnLCAnI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qJywgJyNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QnLCAnI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kJywgJyNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCcsICcjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQnLCAnI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQnLCAnI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQnXS5qb2luKCdcXG4nKSArICdcXG4nICsgcHJlZml4RnJhZ21lbnQ7XG5cdH1cblxuXHRjb25zdCB2ZXJ0ZXhHbHNsID0gdmVyc2lvblN0cmluZyArIHByZWZpeFZlcnRleCArIHZlcnRleFNoYWRlcjtcblx0Y29uc3QgZnJhZ21lbnRHbHNsID0gdmVyc2lvblN0cmluZyArIHByZWZpeEZyYWdtZW50ICsgZnJhZ21lbnRTaGFkZXI7IC8vIGNvbnNvbGUubG9nKCAnKlZFUlRFWConLCB2ZXJ0ZXhHbHNsICk7XG5cdC8vIGNvbnNvbGUubG9nKCAnKkZSQUdNRU5UKicsIGZyYWdtZW50R2xzbCApO1xuXG5cdGNvbnN0IGdsVmVydGV4U2hhZGVyID0gV2ViR0xTaGFkZXIoZ2wsIGdsLlZFUlRFWF9TSEFERVIsIHZlcnRleEdsc2wpO1xuXHRjb25zdCBnbEZyYWdtZW50U2hhZGVyID0gV2ViR0xTaGFkZXIoZ2wsIGdsLkZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRHbHNsKTtcblx0Z2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydGV4U2hhZGVyKTtcblx0Z2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ21lbnRTaGFkZXIpOyAvLyBGb3JjZSBhIHBhcnRpY3VsYXIgYXR0cmlidXRlIHRvIGluZGV4IDAuXG5cblx0aWYgKHBhcmFtZXRlcnMuaW5kZXgwQXR0cmlidXRlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Z2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsIHBhcmFtZXRlcnMuaW5kZXgwQXR0cmlidXRlTmFtZSk7XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVycy5tb3JwaFRhcmdldHMgPT09IHRydWUpIHtcblx0XHQvLyBwcm9ncmFtcyB3aXRoIG1vcnBoVGFyZ2V0cyBkaXNwbGFjZSBwb3NpdGlvbiBvdXQgb2YgYXR0cmlidXRlIDBcblx0XHRnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgJ3Bvc2l0aW9uJyk7XG5cdH1cblxuXHRnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsgLy8gY2hlY2sgZm9yIGxpbmsgZXJyb3JzXG5cblx0aWYgKHJlbmRlcmVyLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKSB7XG5cdFx0Y29uc3QgcHJvZ3JhbUxvZyA9IGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pLnRyaW0oKTtcblx0XHRjb25zdCB2ZXJ0ZXhMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKGdsVmVydGV4U2hhZGVyKS50cmltKCk7XG5cdFx0Y29uc3QgZnJhZ21lbnRMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKGdsRnJhZ21lbnRTaGFkZXIpLnRyaW0oKTtcblx0XHRsZXQgcnVubmFibGUgPSB0cnVlO1xuXHRcdGxldCBoYXZlRGlhZ25vc3RpY3MgPSB0cnVlO1xuXG5cdFx0aWYgKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpID09PSBmYWxzZSkge1xuXHRcdFx0cnVubmFibGUgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHZlcnRleEVycm9ycyA9IGdldFNoYWRlckVycm9ycyhnbCwgZ2xWZXJ0ZXhTaGFkZXIsICd2ZXJ0ZXgnKTtcblx0XHRcdGNvbnN0IGZyYWdtZW50RXJyb3JzID0gZ2V0U2hhZGVyRXJyb3JzKGdsLCBnbEZyYWdtZW50U2hhZGVyLCAnZnJhZ21lbnQnKTtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICcgKyBnbC5nZXRFcnJvcigpICsgJyAtICcgKyAnVkFMSURBVEVfU1RBVFVTICcgKyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykgKyAnXFxuXFxuJyArICdQcm9ncmFtIEluZm8gTG9nOiAnICsgcHJvZ3JhbUxvZyArICdcXG4nICsgdmVydGV4RXJyb3JzICsgJ1xcbicgKyBmcmFnbWVudEVycm9ycyk7XG5cdFx0fSBlbHNlIGlmIChwcm9ncmFtTG9nICE9PSAnJykge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6JywgcHJvZ3JhbUxvZyk7XG5cdFx0fSBlbHNlIGlmICh2ZXJ0ZXhMb2cgPT09ICcnIHx8IGZyYWdtZW50TG9nID09PSAnJykge1xuXHRcdFx0aGF2ZURpYWdub3N0aWNzID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGhhdmVEaWFnbm9zdGljcykge1xuXHRcdFx0dGhpcy5kaWFnbm9zdGljcyA9IHtcblx0XHRcdFx0cnVubmFibGU6IHJ1bm5hYmxlLFxuXHRcdFx0XHRwcm9ncmFtTG9nOiBwcm9ncmFtTG9nLFxuXHRcdFx0XHR2ZXJ0ZXhTaGFkZXI6IHtcblx0XHRcdFx0XHRsb2c6IHZlcnRleExvZyxcblx0XHRcdFx0XHRwcmVmaXg6IHByZWZpeFZlcnRleFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmcmFnbWVudFNoYWRlcjoge1xuXHRcdFx0XHRcdGxvZzogZnJhZ21lbnRMb2csXG5cdFx0XHRcdFx0cHJlZml4OiBwcmVmaXhGcmFnbWVudFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0fSAvLyBDbGVhbiB1cFxuXHQvLyBDcmFzaGVzIGluIGlPUzkgYW5kIGlPUzEwLiAjMTg0MDJcblx0Ly8gZ2wuZGV0YWNoU2hhZGVyKCBwcm9ncmFtLCBnbFZlcnRleFNoYWRlciApO1xuXHQvLyBnbC5kZXRhY2hTaGFkZXIoIHByb2dyYW0sIGdsRnJhZ21lbnRTaGFkZXIgKTtcblxuXG5cdGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRleFNoYWRlcik7XG5cdGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdtZW50U2hhZGVyKTsgLy8gc2V0IHVwIGNhY2hpbmcgZm9yIHVuaWZvcm0gbG9jYXRpb25zXG5cblx0bGV0IGNhY2hlZFVuaWZvcm1zO1xuXG5cdHRoaXMuZ2V0VW5pZm9ybXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGNhY2hlZFVuaWZvcm1zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNhY2hlZFVuaWZvcm1zID0gbmV3IFdlYkdMVW5pZm9ybXMoZ2wsIHByb2dyYW0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZWRVbmlmb3Jtcztcblx0fTsgLy8gc2V0IHVwIGNhY2hpbmcgZm9yIGF0dHJpYnV0ZSBsb2NhdGlvbnNcblxuXG5cdGxldCBjYWNoZWRBdHRyaWJ1dGVzO1xuXG5cdHRoaXMuZ2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoY2FjaGVkQXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjYWNoZWRBdHRyaWJ1dGVzID0gZmV0Y2hBdHRyaWJ1dGVMb2NhdGlvbnMoZ2wsIHByb2dyYW0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZWRBdHRyaWJ1dGVzO1xuXHR9OyAvLyBmcmVlIHJlc291cmNlXG5cblxuXHR0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0YmluZGluZ1N0YXRlcy5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpO1xuXHRcdGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG5cdFx0dGhpcy5wcm9ncmFtID0gdW5kZWZpbmVkO1xuXHR9OyAvL1xuXG5cblx0dGhpcy5uYW1lID0gcGFyYW1ldGVycy5zaGFkZXJOYW1lO1xuXHR0aGlzLmlkID0gcHJvZ3JhbUlkQ291bnQrKztcblx0dGhpcy5jYWNoZUtleSA9IGNhY2hlS2V5O1xuXHR0aGlzLnVzZWRUaW1lcyA9IDE7XG5cdHRoaXMucHJvZ3JhbSA9IHByb2dyYW07XG5cdHRoaXMudmVydGV4U2hhZGVyID0gZ2xWZXJ0ZXhTaGFkZXI7XG5cdHRoaXMuZnJhZ21lbnRTaGFkZXIgPSBnbEZyYWdtZW50U2hhZGVyO1xuXHRyZXR1cm4gdGhpcztcbn1cblxubGV0IF9pZCA9IDA7XG5cbmNsYXNzIFdlYkdMU2hhZGVyQ2FjaGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnNoYWRlckNhY2hlID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMubWF0ZXJpYWxDYWNoZSA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdHVwZGF0ZShtYXRlcmlhbCkge1xuXHRcdGNvbnN0IHZlcnRleFNoYWRlciA9IG1hdGVyaWFsLnZlcnRleFNoYWRlcjtcblx0XHRjb25zdCBmcmFnbWVudFNoYWRlciA9IG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0Y29uc3QgdmVydGV4U2hhZGVyU3RhZ2UgPSB0aGlzLl9nZXRTaGFkZXJTdGFnZSh2ZXJ0ZXhTaGFkZXIpO1xuXG5cdFx0Y29uc3QgZnJhZ21lbnRTaGFkZXJTdGFnZSA9IHRoaXMuX2dldFNoYWRlclN0YWdlKGZyYWdtZW50U2hhZGVyKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsU2hhZGVycyA9IHRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwobWF0ZXJpYWwpO1xuXG5cdFx0aWYgKG1hdGVyaWFsU2hhZGVycy5oYXModmVydGV4U2hhZGVyU3RhZ2UpID09PSBmYWxzZSkge1xuXHRcdFx0bWF0ZXJpYWxTaGFkZXJzLmFkZCh2ZXJ0ZXhTaGFkZXJTdGFnZSk7XG5cdFx0XHR2ZXJ0ZXhTaGFkZXJTdGFnZS51c2VkVGltZXMrKztcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWxTaGFkZXJzLmhhcyhmcmFnbWVudFNoYWRlclN0YWdlKSA9PT0gZmFsc2UpIHtcblx0XHRcdG1hdGVyaWFsU2hhZGVycy5hZGQoZnJhZ21lbnRTaGFkZXJTdGFnZSk7XG5cdFx0XHRmcmFnbWVudFNoYWRlclN0YWdlLnVzZWRUaW1lcysrO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVtb3ZlKG1hdGVyaWFsKSB7XG5cdFx0Y29uc3QgbWF0ZXJpYWxTaGFkZXJzID0gdGhpcy5tYXRlcmlhbENhY2hlLmdldChtYXRlcmlhbCk7XG5cblx0XHRmb3IgKGNvbnN0IHNoYWRlclN0YWdlIG9mIG1hdGVyaWFsU2hhZGVycykge1xuXHRcdFx0c2hhZGVyU3RhZ2UudXNlZFRpbWVzLS07XG5cdFx0XHRpZiAoc2hhZGVyU3RhZ2UudXNlZFRpbWVzID09PSAwKSB0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShzaGFkZXJTdGFnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZShtYXRlcmlhbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRWZXJ0ZXhTaGFkZXJJRChtYXRlcmlhbCkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZShtYXRlcmlhbC52ZXJ0ZXhTaGFkZXIpLmlkO1xuXHR9XG5cblx0Z2V0RnJhZ21lbnRTaGFkZXJJRChtYXRlcmlhbCkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZShtYXRlcmlhbC5mcmFnbWVudFNoYWRlcikuaWQ7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKTtcblx0fVxuXG5cdF9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKG1hdGVyaWFsKSB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLm1hdGVyaWFsQ2FjaGU7XG5cblx0XHRpZiAoY2FjaGUuaGFzKG1hdGVyaWFsKSA9PT0gZmFsc2UpIHtcblx0XHRcdGNhY2hlLnNldChtYXRlcmlhbCwgbmV3IFNldCgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGUuZ2V0KG1hdGVyaWFsKTtcblx0fVxuXG5cdF9nZXRTaGFkZXJTdGFnZShjb2RlKSB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLnNoYWRlckNhY2hlO1xuXG5cdFx0aWYgKGNhY2hlLmhhcyhjb2RlKSA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnN0IHN0YWdlID0gbmV3IFdlYkdMU2hhZGVyU3RhZ2UoKTtcblx0XHRcdGNhY2hlLnNldChjb2RlLCBzdGFnZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlLmdldChjb2RlKTtcblx0fVxuXG59XG5cbmNsYXNzIFdlYkdMU2hhZGVyU3RhZ2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmlkID0gX2lkKys7XG5cdFx0dGhpcy51c2VkVGltZXMgPSAwO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xQcm9ncmFtcyhyZW5kZXJlciwgY3ViZW1hcHMsIGN1YmV1dm1hcHMsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcywgYmluZGluZ1N0YXRlcywgY2xpcHBpbmcpIHtcblx0Y29uc3QgX3Byb2dyYW1MYXllcnMgPSBuZXcgTGF5ZXJzKCk7XG5cblx0Y29uc3QgX2N1c3RvbVNoYWRlcnMgPSBuZXcgV2ViR0xTaGFkZXJDYWNoZSgpO1xuXG5cdGNvbnN0IHByb2dyYW1zID0gW107XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRjb25zdCBsb2dhcml0aG1pY0RlcHRoQnVmZmVyID0gY2FwYWJpbGl0aWVzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI7XG5cdGNvbnN0IGZsb2F0VmVydGV4VGV4dHVyZXMgPSBjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0ZXhUZXh0dXJlcztcblx0Y29uc3QgbWF4VmVydGV4VW5pZm9ybXMgPSBjYXBhYmlsaXRpZXMubWF4VmVydGV4VW5pZm9ybXM7XG5cdGNvbnN0IHZlcnRleFRleHR1cmVzID0gY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzO1xuXHRsZXQgcHJlY2lzaW9uID0gY2FwYWJpbGl0aWVzLnByZWNpc2lvbjtcblx0Y29uc3Qgc2hhZGVySURzID0ge1xuXHRcdE1lc2hEZXB0aE1hdGVyaWFsOiAnZGVwdGgnLFxuXHRcdE1lc2hEaXN0YW5jZU1hdGVyaWFsOiAnZGlzdGFuY2VSR0JBJyxcblx0XHRNZXNoTm9ybWFsTWF0ZXJpYWw6ICdub3JtYWwnLFxuXHRcdE1lc2hCYXNpY01hdGVyaWFsOiAnYmFzaWMnLFxuXHRcdE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ICdsYW1iZXJ0Jyxcblx0XHRNZXNoUGhvbmdNYXRlcmlhbDogJ3Bob25nJyxcblx0XHRNZXNoVG9vbk1hdGVyaWFsOiAndG9vbicsXG5cdFx0TWVzaFN0YW5kYXJkTWF0ZXJpYWw6ICdwaHlzaWNhbCcsXG5cdFx0TWVzaFBoeXNpY2FsTWF0ZXJpYWw6ICdwaHlzaWNhbCcsXG5cdFx0TWVzaE1hdGNhcE1hdGVyaWFsOiAnbWF0Y2FwJyxcblx0XHRMaW5lQmFzaWNNYXRlcmlhbDogJ2Jhc2ljJyxcblx0XHRMaW5lRGFzaGVkTWF0ZXJpYWw6ICdkYXNoZWQnLFxuXHRcdFBvaW50c01hdGVyaWFsOiAncG9pbnRzJyxcblx0XHRTaGFkb3dNYXRlcmlhbDogJ3NoYWRvdycsXG5cdFx0U3ByaXRlTWF0ZXJpYWw6ICdzcHJpdGUnXG5cdH07XG5cblx0ZnVuY3Rpb24gZ2V0TWF4Qm9uZXMob2JqZWN0KSB7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XG5cdFx0Y29uc3QgYm9uZXMgPSBza2VsZXRvbi5ib25lcztcblxuXHRcdGlmIChmbG9hdFZlcnRleFRleHR1cmVzKSB7XG5cdFx0XHRyZXR1cm4gMTAyNDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBmb3Igd2hlbiBvYmplY3QgaXMgbm90IHNwZWNpZmllZFxuXHRcdFx0Ly8gKCBmb3IgZXhhbXBsZSB3aGVuIHByZWJ1aWxkaW5nIHNoYWRlciB0byBiZSB1c2VkIHdpdGggbXVsdGlwbGUgb2JqZWN0cyApXG5cdFx0XHQvL1xuXHRcdFx0Ly9cdC0gbGVhdmUgc29tZSBleHRyYSBzcGFjZSBmb3Igb3RoZXIgdW5pZm9ybXNcblx0XHRcdC8vXHQtIGxpbWl0IGhlcmUgaXMgQU5HTEUncyAyNTQgbWF4IHVuaWZvcm0gdmVjdG9yc1xuXHRcdFx0Ly9cdFx0KHVwIHRvIDU0IHNob3VsZCBiZSBzYWZlKVxuXHRcdFx0Y29uc3QgblZlcnRleFVuaWZvcm1zID0gbWF4VmVydGV4VW5pZm9ybXM7XG5cdFx0XHRjb25zdCBuVmVydGV4TWF0cmljZXMgPSBNYXRoLmZsb29yKChuVmVydGV4VW5pZm9ybXMgLSAyMCkgLyA0KTtcblx0XHRcdGNvbnN0IG1heEJvbmVzID0gTWF0aC5taW4oblZlcnRleE1hdHJpY2VzLCBib25lcy5sZW5ndGgpO1xuXG5cdFx0XHRpZiAobWF4Qm9uZXMgPCBib25lcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgJyArIGJvbmVzLmxlbmd0aCArICcgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICcgKyBtYXhCb25lcyArICcuJyk7XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF4Qm9uZXM7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhtYXRlcmlhbCwgbGlnaHRzLCBzaGFkb3dzLCBzY2VuZSwgb2JqZWN0KSB7XG5cdFx0Y29uc3QgZm9nID0gc2NlbmUuZm9nO1xuXHRcdGNvbnN0IGVudmlyb25tZW50ID0gbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IHNjZW5lLmVudmlyb25tZW50IDogbnVsbDtcblx0XHRjb25zdCBlbnZNYXAgPSAobWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IGN1YmV1dm1hcHMgOiBjdWJlbWFwcykuZ2V0KG1hdGVyaWFsLmVudk1hcCB8fCBlbnZpcm9ubWVudCk7XG5cdFx0Y29uc3Qgc2hhZGVySUQgPSBzaGFkZXJJRHNbbWF0ZXJpYWwudHlwZV07IC8vIGhldXJpc3RpY3MgdG8gY3JlYXRlIHNoYWRlciBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byBsaWdodHMgaW4gdGhlIHNjZW5lXG5cdFx0Ly8gKG5vdCB0byBibG93IG92ZXIgbWF4TGlnaHRzIGJ1ZGdldClcblxuXHRcdGNvbnN0IG1heEJvbmVzID0gb2JqZWN0LmlzU2tpbm5lZE1lc2ggPyBnZXRNYXhCb25lcyhvYmplY3QpIDogMDtcblxuXHRcdGlmIChtYXRlcmlhbC5wcmVjaXNpb24gIT09IG51bGwpIHtcblx0XHRcdHByZWNpc2lvbiA9IGNhcGFiaWxpdGllcy5nZXRNYXhQcmVjaXNpb24obWF0ZXJpYWwucHJlY2lzaW9uKTtcblxuXHRcdFx0aWYgKHByZWNpc2lvbiAhPT0gbWF0ZXJpYWwucHJlY2lzaW9uKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6JywgbWF0ZXJpYWwucHJlY2lzaW9uLCAnbm90IHN1cHBvcnRlZCwgdXNpbmcnLCBwcmVjaXNpb24sICdpbnN0ZWFkLicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyO1xuXHRcdGxldCBjdXN0b21WZXJ0ZXhTaGFkZXJJRCwgY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDtcblxuXHRcdGlmIChzaGFkZXJJRCkge1xuXHRcdFx0Y29uc3Qgc2hhZGVyID0gU2hhZGVyTGliW3NoYWRlcklEXTtcblx0XHRcdHZlcnRleFNoYWRlciA9IHNoYWRlci52ZXJ0ZXhTaGFkZXI7XG5cdFx0XHRmcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVydGV4U2hhZGVyID0gbWF0ZXJpYWwudmVydGV4U2hhZGVyO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXIgPSBtYXRlcmlhbC5mcmFnbWVudFNoYWRlcjtcblxuXHRcdFx0X2N1c3RvbVNoYWRlcnMudXBkYXRlKG1hdGVyaWFsKTtcblxuXHRcdFx0Y3VzdG9tVmVydGV4U2hhZGVySUQgPSBfY3VzdG9tU2hhZGVycy5nZXRWZXJ0ZXhTaGFkZXJJRChtYXRlcmlhbCk7XG5cdFx0XHRjdXN0b21GcmFnbWVudFNoYWRlcklEID0gX2N1c3RvbVNoYWRlcnMuZ2V0RnJhZ21lbnRTaGFkZXJJRChtYXRlcmlhbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdGNvbnN0IHVzZUFscGhhVGVzdCA9IG1hdGVyaWFsLmFscGhhVGVzdCA+IDA7XG5cdFx0Y29uc3QgdXNlQ2xlYXJjb2F0ID0gbWF0ZXJpYWwuY2xlYXJjb2F0ID4gMDtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge1xuXHRcdFx0aXNXZWJHTDI6IGlzV2ViR0wyLFxuXHRcdFx0c2hhZGVySUQ6IHNoYWRlcklELFxuXHRcdFx0c2hhZGVyTmFtZTogbWF0ZXJpYWwudHlwZSxcblx0XHRcdHZlcnRleFNoYWRlcjogdmVydGV4U2hhZGVyLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyLFxuXHRcdFx0ZGVmaW5lczogbWF0ZXJpYWwuZGVmaW5lcyxcblx0XHRcdGN1c3RvbVZlcnRleFNoYWRlcklEOiBjdXN0b21WZXJ0ZXhTaGFkZXJJRCxcblx0XHRcdGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6IGN1c3RvbUZyYWdtZW50U2hhZGVySUQsXG5cdFx0XHRpc1Jhd1NoYWRlck1hdGVyaWFsOiBtYXRlcmlhbC5pc1Jhd1NoYWRlck1hdGVyaWFsID09PSB0cnVlLFxuXHRcdFx0Z2xzbFZlcnNpb246IG1hdGVyaWFsLmdsc2xWZXJzaW9uLFxuXHRcdFx0cHJlY2lzaW9uOiBwcmVjaXNpb24sXG5cdFx0XHRpbnN0YW5jaW5nOiBvYmplY3QuaXNJbnN0YW5jZWRNZXNoID09PSB0cnVlLFxuXHRcdFx0aW5zdGFuY2luZ0NvbG9yOiBvYmplY3QuaXNJbnN0YW5jZWRNZXNoID09PSB0cnVlICYmIG9iamVjdC5pbnN0YW5jZUNvbG9yICE9PSBudWxsLFxuXHRcdFx0c3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczogdmVydGV4VGV4dHVyZXMsXG5cdFx0XHRvdXRwdXRFbmNvZGluZzogY3VycmVudFJlbmRlclRhcmdldCA9PT0gbnVsbCA/IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nIDogY3VycmVudFJlbmRlclRhcmdldC5pc1hSUmVuZGVyVGFyZ2V0ID09PSB0cnVlID8gY3VycmVudFJlbmRlclRhcmdldC50ZXh0dXJlLmVuY29kaW5nIDogTGluZWFyRW5jb2RpbmcsXG5cdFx0XHRtYXA6ICEhbWF0ZXJpYWwubWFwLFxuXHRcdFx0bWF0Y2FwOiAhIW1hdGVyaWFsLm1hdGNhcCxcblx0XHRcdGVudk1hcDogISFlbnZNYXAsXG5cdFx0XHRlbnZNYXBNb2RlOiBlbnZNYXAgJiYgZW52TWFwLm1hcHBpbmcsXG5cdFx0XHRlbnZNYXBDdWJlVVY6ICEhZW52TWFwICYmIChlbnZNYXAubWFwcGluZyA9PT0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcgfHwgZW52TWFwLm1hcHBpbmcgPT09IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nKSxcblx0XHRcdGxpZ2h0TWFwOiAhIW1hdGVyaWFsLmxpZ2h0TWFwLFxuXHRcdFx0YW9NYXA6ICEhbWF0ZXJpYWwuYW9NYXAsXG5cdFx0XHRlbWlzc2l2ZU1hcDogISFtYXRlcmlhbC5lbWlzc2l2ZU1hcCxcblx0XHRcdGJ1bXBNYXA6ICEhbWF0ZXJpYWwuYnVtcE1hcCxcblx0XHRcdG5vcm1hbE1hcDogISFtYXRlcmlhbC5ub3JtYWxNYXAsXG5cdFx0XHRvYmplY3RTcGFjZU5vcm1hbE1hcDogbWF0ZXJpYWwubm9ybWFsTWFwVHlwZSA9PT0gT2JqZWN0U3BhY2VOb3JtYWxNYXAsXG5cdFx0XHR0YW5nZW50U3BhY2VOb3JtYWxNYXA6IG1hdGVyaWFsLm5vcm1hbE1hcFR5cGUgPT09IFRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcblx0XHRcdGRlY29kZVZpZGVvVGV4dHVyZTogISFtYXRlcmlhbC5tYXAgJiYgbWF0ZXJpYWwubWFwLmlzVmlkZW9UZXh0dXJlID09PSB0cnVlICYmIG1hdGVyaWFsLm1hcC5lbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nLFxuXHRcdFx0Y2xlYXJjb2F0OiB1c2VDbGVhcmNvYXQsXG5cdFx0XHRjbGVhcmNvYXRNYXA6IHVzZUNsZWFyY29hdCAmJiAhIW1hdGVyaWFsLmNsZWFyY29hdE1hcCxcblx0XHRcdGNsZWFyY29hdFJvdWdobmVzc01hcDogdXNlQ2xlYXJjb2F0ICYmICEhbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwLFxuXHRcdFx0Y2xlYXJjb2F0Tm9ybWFsTWFwOiB1c2VDbGVhcmNvYXQgJiYgISFtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAsXG5cdFx0XHRkaXNwbGFjZW1lbnRNYXA6ICEhbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwLFxuXHRcdFx0cm91Z2huZXNzTWFwOiAhIW1hdGVyaWFsLnJvdWdobmVzc01hcCxcblx0XHRcdG1ldGFsbmVzc01hcDogISFtYXRlcmlhbC5tZXRhbG5lc3NNYXAsXG5cdFx0XHRzcGVjdWxhck1hcDogISFtYXRlcmlhbC5zcGVjdWxhck1hcCxcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5TWFwOiAhIW1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwLFxuXHRcdFx0c3BlY3VsYXJDb2xvck1hcDogISFtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwLFxuXHRcdFx0YWxwaGFNYXA6ICEhbWF0ZXJpYWwuYWxwaGFNYXAsXG5cdFx0XHRhbHBoYVRlc3Q6IHVzZUFscGhhVGVzdCxcblx0XHRcdGFscGhhV3JpdGU6IG1hdGVyaWFsLmFscGhhV3JpdGUgfHwgbWF0ZXJpYWwudHJhbnNwYXJlbnQsXG5cdFx0XHRncmFkaWVudE1hcDogISFtYXRlcmlhbC5ncmFkaWVudE1hcCxcblx0XHRcdHNoZWVuOiBtYXRlcmlhbC5zaGVlbiA+IDAsXG5cdFx0XHRzaGVlbkNvbG9yTWFwOiAhIW1hdGVyaWFsLnNoZWVuQ29sb3JNYXAsXG5cdFx0XHRzaGVlblJvdWdobmVzc01hcDogISFtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCxcblx0XHRcdHRyYW5zbWlzc2lvbjogbWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMCxcblx0XHRcdHRyYW5zbWlzc2lvbk1hcDogISFtYXRlcmlhbC50cmFuc21pc3Npb25NYXAsXG5cdFx0XHR0aGlja25lc3NNYXA6ICEhbWF0ZXJpYWwudGhpY2tuZXNzTWFwLFxuXHRcdFx0Y29tYmluZTogbWF0ZXJpYWwuY29tYmluZSxcblx0XHRcdHZlcnRleFRhbmdlbnRzOiAhIW1hdGVyaWFsLm5vcm1hbE1hcCAmJiAhIW9iamVjdC5nZW9tZXRyeSAmJiAhIW9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsXG5cdFx0XHR2ZXJ0ZXhDb2xvcnM6IG1hdGVyaWFsLnZlcnRleENvbG9ycyxcblx0XHRcdHZlcnRleEFscGhhczogbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSB0cnVlICYmICEhb2JqZWN0Lmdlb21ldHJ5ICYmICEhb2JqZWN0Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IgJiYgb2JqZWN0Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUgPT09IDQsXG5cdFx0XHR2ZXJ0ZXhVdnM6ICEhbWF0ZXJpYWwubWFwIHx8ICEhbWF0ZXJpYWwuYnVtcE1hcCB8fCAhIW1hdGVyaWFsLm5vcm1hbE1hcCB8fCAhIW1hdGVyaWFsLnNwZWN1bGFyTWFwIHx8ICEhbWF0ZXJpYWwuYWxwaGFNYXAgfHwgISFtYXRlcmlhbC5lbWlzc2l2ZU1hcCB8fCAhIW1hdGVyaWFsLnJvdWdobmVzc01hcCB8fCAhIW1hdGVyaWFsLm1ldGFsbmVzc01hcCB8fCAhIW1hdGVyaWFsLmNsZWFyY29hdE1hcCB8fCAhIW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCB8fCAhIW1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCB8fCAhIW1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCB8fCAhIW1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCB8fCAhIW1hdGVyaWFsLnRoaWNrbmVzc01hcCB8fCAhIW1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwIHx8ICEhbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCB8fCAhIW1hdGVyaWFsLnNoZWVuQ29sb3JNYXAgfHwgISFtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCxcblx0XHRcdHV2c1ZlcnRleE9ubHk6ICEoISFtYXRlcmlhbC5tYXAgfHwgISFtYXRlcmlhbC5idW1wTWFwIHx8ICEhbWF0ZXJpYWwubm9ybWFsTWFwIHx8ICEhbWF0ZXJpYWwuc3BlY3VsYXJNYXAgfHwgISFtYXRlcmlhbC5hbHBoYU1hcCB8fCAhIW1hdGVyaWFsLmVtaXNzaXZlTWFwIHx8ICEhbWF0ZXJpYWwucm91Z2huZXNzTWFwIHx8ICEhbWF0ZXJpYWwubWV0YWxuZXNzTWFwIHx8ICEhbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwIHx8IG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAgfHwgISFtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgfHwgISFtYXRlcmlhbC50aGlja25lc3NNYXAgfHwgISFtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCB8fCAhIW1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXAgfHwgbWF0ZXJpYWwuc2hlZW4gPiAwIHx8ICEhbWF0ZXJpYWwuc2hlZW5Db2xvck1hcCB8fCAhIW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwKSAmJiAhIW1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCxcblx0XHRcdGZvZzogISFmb2csXG5cdFx0XHR1c2VGb2c6IG1hdGVyaWFsLmZvZyxcblx0XHRcdGZvZ0V4cDI6IGZvZyAmJiBmb2cuaXNGb2dFeHAyLFxuXHRcdFx0ZmxhdFNoYWRpbmc6ICEhbWF0ZXJpYWwuZmxhdFNoYWRpbmcsXG5cdFx0XHRzaXplQXR0ZW51YXRpb246IG1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbixcblx0XHRcdGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIsXG5cdFx0XHRza2lubmluZzogb2JqZWN0LmlzU2tpbm5lZE1lc2ggPT09IHRydWUgJiYgbWF4Qm9uZXMgPiAwLFxuXHRcdFx0bWF4Qm9uZXM6IG1heEJvbmVzLFxuXHRcdFx0dXNlVmVydGV4VGV4dHVyZTogZmxvYXRWZXJ0ZXhUZXh0dXJlcyxcblx0XHRcdG1vcnBoVGFyZ2V0czogISFvYmplY3QuZ2VvbWV0cnkgJiYgISFvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFxuXHRcdFx0bW9ycGhOb3JtYWxzOiAhIW9iamVjdC5nZW9tZXRyeSAmJiAhIW9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLFxuXHRcdFx0bW9ycGhUYXJnZXRzQ291bnQ6ICEhb2JqZWN0Lmdlb21ldHJ5ICYmICEhb2JqZWN0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiA/IG9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoIDogMCxcblx0XHRcdG51bURpckxpZ2h0czogbGlnaHRzLmRpcmVjdGlvbmFsLmxlbmd0aCxcblx0XHRcdG51bVBvaW50TGlnaHRzOiBsaWdodHMucG9pbnQubGVuZ3RoLFxuXHRcdFx0bnVtU3BvdExpZ2h0czogbGlnaHRzLnNwb3QubGVuZ3RoLFxuXHRcdFx0bnVtUmVjdEFyZWFMaWdodHM6IGxpZ2h0cy5yZWN0QXJlYS5sZW5ndGgsXG5cdFx0XHRudW1IZW1pTGlnaHRzOiBsaWdodHMuaGVtaS5sZW5ndGgsXG5cdFx0XHRudW1EaXJMaWdodFNoYWRvd3M6IGxpZ2h0cy5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsXG5cdFx0XHRudW1Qb2ludExpZ2h0U2hhZG93czogbGlnaHRzLnBvaW50U2hhZG93TWFwLmxlbmd0aCxcblx0XHRcdG51bVNwb3RMaWdodFNoYWRvd3M6IGxpZ2h0cy5zcG90U2hhZG93TWFwLmxlbmd0aCxcblx0XHRcdG51bUNsaXBwaW5nUGxhbmVzOiBjbGlwcGluZy5udW1QbGFuZXMsXG5cdFx0XHRudW1DbGlwSW50ZXJzZWN0aW9uOiBjbGlwcGluZy5udW1JbnRlcnNlY3Rpb24sXG5cdFx0XHRkaXRoZXJpbmc6IG1hdGVyaWFsLmRpdGhlcmluZyxcblx0XHRcdHNoYWRvd01hcEVuYWJsZWQ6IHJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkICYmIHNoYWRvd3MubGVuZ3RoID4gMCxcblx0XHRcdHNoYWRvd01hcFR5cGU6IHJlbmRlcmVyLnNoYWRvd01hcC50eXBlLFxuXHRcdFx0dG9uZU1hcHBpbmc6IG1hdGVyaWFsLnRvbmVNYXBwZWQgPyByZW5kZXJlci50b25lTWFwcGluZyA6IE5vVG9uZU1hcHBpbmcsXG5cdFx0XHRwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czogcmVuZGVyZXIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdGRvdWJsZVNpZGVkOiBtYXRlcmlhbC5zaWRlID09PSBEb3VibGVTaWRlLFxuXHRcdFx0ZmxpcFNpZGVkOiBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSxcblx0XHRcdGRlcHRoUGFja2luZzogbWF0ZXJpYWwuZGVwdGhQYWNraW5nICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbC5kZXB0aFBhY2tpbmcgOiBmYWxzZSxcblx0XHRcdGluZGV4MEF0dHJpYnV0ZU5hbWU6IG1hdGVyaWFsLmluZGV4MEF0dHJpYnV0ZU5hbWUsXG5cdFx0XHRleHRlbnNpb25EZXJpdmF0aXZlczogbWF0ZXJpYWwuZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbC5leHRlbnNpb25zLmRlcml2YXRpdmVzLFxuXHRcdFx0ZXh0ZW5zaW9uRnJhZ0RlcHRoOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLFxuXHRcdFx0ZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxcblx0XHRcdGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELFxuXHRcdFx0cmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdFWFRfZnJhZ19kZXB0aCcpLFxuXHRcdFx0cmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczogaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ1dFQkdMX2RyYXdfYnVmZmVycycpLFxuXHRcdFx0cmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOiBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcygnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcpLFxuXHRcdFx0Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5OiBtYXRlcmlhbC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKVxuXHRcdH07XG5cdFx0cmV0dXJuIHBhcmFtZXRlcnM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtQ2FjaGVLZXkocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRpZiAocGFyYW1ldGVycy5zaGFkZXJJRCkge1xuXHRcdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLnNoYWRlcklEKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLmN1c3RvbVZlcnRleFNoYWRlcklEKTtcblx0XHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5jdXN0b21GcmFnbWVudFNoYWRlcklEKTtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycy5kZWZpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgbmFtZSBpbiBwYXJhbWV0ZXJzLmRlZmluZXMpIHtcblx0XHRcdFx0YXJyYXkucHVzaChuYW1lKTtcblx0XHRcdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLmRlZmluZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLmlzUmF3U2hhZGVyTWF0ZXJpYWwgPT09IGZhbHNlKSB7XG5cdFx0XHRnZXRQcm9ncmFtQ2FjaGVLZXlQYXJhbWV0ZXJzKGFycmF5LCBwYXJhbWV0ZXJzKTtcblx0XHRcdGdldFByb2dyYW1DYWNoZUtleUJvb2xlYW5zKGFycmF5LCBwYXJhbWV0ZXJzKTtcblx0XHRcdGFycmF5LnB1c2gocmVuZGVyZXIub3V0cHV0RW5jb2RpbmcpO1xuXHRcdH1cblxuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpO1xuXHRcdHJldHVybiBhcnJheS5qb2luKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtQ2FjaGVLZXlQYXJhbWV0ZXJzKGFycmF5LCBwYXJhbWV0ZXJzKSB7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLnByZWNpc2lvbik7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm91dHB1dEVuY29kaW5nKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMuZW52TWFwTW9kZSk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLmNvbWJpbmUpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy52ZXJ0ZXhVdnMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5mb2dFeHAyKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMuc2l6ZUF0dGVudWF0aW9uKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubWF4Qm9uZXMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5tb3JwaFRhcmdldHNDb3VudCk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bURpckxpZ2h0cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubnVtU3BvdExpZ2h0cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bUhlbWlMaWdodHMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1SZWN0QXJlYUxpZ2h0cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bURpckxpZ2h0U2hhZG93cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRTaGFkb3dzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubnVtU3BvdExpZ2h0U2hhZG93cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLnNoYWRvd01hcFR5cGUpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy50b25lTWFwcGluZyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubnVtQ2xpcEludGVyc2VjdGlvbik7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLmFscGhhV3JpdGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5Qm9vbGVhbnMoYXJyYXksIHBhcmFtZXRlcnMpIHtcblx0XHRfcHJvZ3JhbUxheWVycy5kaXNhYmxlQWxsKCk7XG5cblx0XHRpZiAocGFyYW1ldGVycy5pc1dlYkdMMikgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDApO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxKTtcblx0XHRpZiAocGFyYW1ldGVycy5pbnN0YW5jaW5nKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMik7XG5cdFx0aWYgKHBhcmFtZXRlcnMuaW5zdGFuY2luZ0NvbG9yKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubWF0Y2FwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZW52TWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNik7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZW52TWFwQ3ViZVVWKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubGlnaHRNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg4KTtcblx0XHRpZiAocGFyYW1ldGVycy5hb01hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDkpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTApO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmJ1bXBNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxMSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubm9ybWFsTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLm9iamVjdFNwYWNlTm9ybWFsTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTMpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE0KTtcblx0XHRpZiAocGFyYW1ldGVycy5jbGVhcmNvYXQpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTYpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmNsZWFyY29hdFJvdWdobmVzc01hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE3KTtcblx0XHRpZiAocGFyYW1ldGVycy5jbGVhcmNvYXROb3JtYWxNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxOCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZGlzcGxhY2VtZW50TWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTkpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnNwZWN1bGFyTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjApO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnJvdWdobmVzc01hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDIxKTtcblx0XHRpZiAocGFyYW1ldGVycy5tZXRhbG5lc3NNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyMik7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZ3JhZGllbnRNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyMyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuYWxwaGFNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyNCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuYWxwaGFUZXN0KSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjUpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnZlcnRleENvbG9ycykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDI2KTtcblx0XHRpZiAocGFyYW1ldGVycy52ZXJ0ZXhBbHBoYXMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyNyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMudmVydGV4VXZzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjgpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjkpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnV2c1ZlcnRleE9ubHkpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgzMCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZm9nKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMzEpO1xuXHRcdGFycmF5LnB1c2goX3Byb2dyYW1MYXllcnMubWFzayk7XG5cblx0XHRfcHJvZ3JhbUxheWVycy5kaXNhYmxlQWxsKCk7XG5cblx0XHRpZiAocGFyYW1ldGVycy51c2VGb2cpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgwKTtcblx0XHRpZiAocGFyYW1ldGVycy5mbGF0U2hhZGluZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyKTtcblx0XHRpZiAocGFyYW1ldGVycy5za2lubmluZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDMpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVzZVZlcnRleFRleHR1cmUpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg0KTtcblx0XHRpZiAocGFyYW1ldGVycy5tb3JwaFRhcmdldHMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg1KTtcblx0XHRpZiAocGFyYW1ldGVycy5tb3JwaE5vcm1hbHMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg2KTtcblx0XHRpZiAocGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg3KTtcblx0XHRpZiAocGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoOCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg5KTtcblx0XHRpZiAocGFyYW1ldGVycy5kb3VibGVTaWRlZCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEwKTtcblx0XHRpZiAocGFyYW1ldGVycy5mbGlwU2lkZWQpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxMSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZGVwdGhQYWNraW5nKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmRpdGhlcmluZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEzKTtcblx0XHRpZiAocGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE0KTtcblx0XHRpZiAocGFyYW1ldGVycy5zcGVjdWxhckNvbG9yTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTUpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbikgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE2KTtcblx0XHRpZiAocGFyYW1ldGVycy50cmFuc21pc3Npb25NYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMudGhpY2tuZXNzTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTgpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnNoZWVuKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTkpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnNoZWVuQ29sb3JNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyMCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuc2hlZW5Sb3VnaG5lc3NNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyMSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZGVjb2RlVmlkZW9UZXh0dXJlKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjIpO1xuXHRcdGFycmF5LnB1c2goX3Byb2dyYW1MYXllcnMubWFzayk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRVbmlmb3JtcyhtYXRlcmlhbCkge1xuXHRcdGNvbnN0IHNoYWRlcklEID0gc2hhZGVySURzW21hdGVyaWFsLnR5cGVdO1xuXHRcdGxldCB1bmlmb3JtcztcblxuXHRcdGlmIChzaGFkZXJJRCkge1xuXHRcdFx0Y29uc3Qgc2hhZGVyID0gU2hhZGVyTGliW3NoYWRlcklEXTtcblx0XHRcdHVuaWZvcm1zID0gVW5pZm9ybXNVdGlscy5jbG9uZShzaGFkZXIudW5pZm9ybXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR1bmlmb3JtcyA9IG1hdGVyaWFsLnVuaWZvcm1zO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmlmb3Jtcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFjcXVpcmVQcm9ncmFtKHBhcmFtZXRlcnMsIGNhY2hlS2V5KSB7XG5cdFx0bGV0IHByb2dyYW07IC8vIENoZWNrIGlmIGNvZGUgaGFzIGJlZW4gYWxyZWFkeSBjb21waWxlZFxuXG5cdFx0Zm9yIChsZXQgcCA9IDAsIHBsID0gcHJvZ3JhbXMubGVuZ3RoOyBwIDwgcGw7IHArKykge1xuXHRcdFx0Y29uc3QgcHJlZXhpc3RpbmdQcm9ncmFtID0gcHJvZ3JhbXNbcF07XG5cblx0XHRcdGlmIChwcmVleGlzdGluZ1Byb2dyYW0uY2FjaGVLZXkgPT09IGNhY2hlS2V5KSB7XG5cdFx0XHRcdHByb2dyYW0gPSBwcmVleGlzdGluZ1Byb2dyYW07XG5cdFx0XHRcdCsrcHJvZ3JhbS51c2VkVGltZXM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwcm9ncmFtID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHByb2dyYW0gPSBuZXcgV2ViR0xQcm9ncmFtKHJlbmRlcmVyLCBjYWNoZUtleSwgcGFyYW1ldGVycywgYmluZGluZ1N0YXRlcyk7XG5cdFx0XHRwcm9ncmFtcy5wdXNoKHByb2dyYW0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9ncmFtO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVsZWFzZVByb2dyYW0ocHJvZ3JhbSkge1xuXHRcdGlmICgtLXByb2dyYW0udXNlZFRpbWVzID09PSAwKSB7XG5cdFx0XHQvLyBSZW1vdmUgZnJvbSB1bm9yZGVyZWQgc2V0XG5cdFx0XHRjb25zdCBpID0gcHJvZ3JhbXMuaW5kZXhPZihwcm9ncmFtKTtcblx0XHRcdHByb2dyYW1zW2ldID0gcHJvZ3JhbXNbcHJvZ3JhbXMubGVuZ3RoIC0gMV07XG5cdFx0XHRwcm9ncmFtcy5wb3AoKTsgLy8gRnJlZSBXZWJHTCByZXNvdXJjZXNcblxuXHRcdFx0cHJvZ3JhbS5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVsZWFzZVNoYWRlckNhY2hlKG1hdGVyaWFsKSB7XG5cdFx0X2N1c3RvbVNoYWRlcnMucmVtb3ZlKG1hdGVyaWFsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0X2N1c3RvbVNoYWRlcnMuZGlzcG9zZSgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXRQYXJhbWV0ZXJzOiBnZXRQYXJhbWV0ZXJzLFxuXHRcdGdldFByb2dyYW1DYWNoZUtleTogZ2V0UHJvZ3JhbUNhY2hlS2V5LFxuXHRcdGdldFVuaWZvcm1zOiBnZXRVbmlmb3Jtcyxcblx0XHRhY3F1aXJlUHJvZ3JhbTogYWNxdWlyZVByb2dyYW0sXG5cdFx0cmVsZWFzZVByb2dyYW06IHJlbGVhc2VQcm9ncmFtLFxuXHRcdHJlbGVhc2VTaGFkZXJDYWNoZTogcmVsZWFzZVNoYWRlckNhY2hlLFxuXHRcdC8vIEV4cG9zZWQgZm9yIHJlc291cmNlIG1vbml0b3JpbmcgJiBlcnJvciBmZWVkYmFjayB2aWEgcmVuZGVyZXIuaW5mbzpcblx0XHRwcm9ncmFtczogcHJvZ3JhbXMsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTFByb3BlcnRpZXMoKSB7XG5cdGxldCBwcm9wZXJ0aWVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBnZXQob2JqZWN0KSB7XG5cdFx0bGV0IG1hcCA9IHByb3BlcnRpZXMuZ2V0KG9iamVjdCk7XG5cblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1hcCA9IHt9O1xuXHRcdFx0cHJvcGVydGllcy5zZXQob2JqZWN0LCBtYXApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXA7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmUob2JqZWN0KSB7XG5cdFx0cHJvcGVydGllcy5kZWxldGUob2JqZWN0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0XHRwcm9wZXJ0aWVzLmdldChvYmplY3QpW2tleV0gPSB2YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0cHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdHJlbW92ZTogcmVtb3ZlLFxuXHRcdHVwZGF0ZTogdXBkYXRlLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gcGFpbnRlclNvcnRTdGFibGUoYSwgYikge1xuXHRpZiAoYS5ncm91cE9yZGVyICE9PSBiLmdyb3VwT3JkZXIpIHtcblx0XHRyZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5ncm91cE9yZGVyO1xuXHR9IGVsc2UgaWYgKGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3JkZXIpIHtcblx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cdH0gZWxzZSBpZiAoYS5tYXRlcmlhbC5pZCAhPT0gYi5tYXRlcmlhbC5pZCkge1xuXHRcdHJldHVybiBhLm1hdGVyaWFsLmlkIC0gYi5tYXRlcmlhbC5pZDtcblx0fSBlbHNlIGlmIChhLnogIT09IGIueikge1xuXHRcdHJldHVybiBhLnogLSBiLno7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGEuaWQgLSBiLmlkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJldmVyc2VQYWludGVyU29ydFN0YWJsZShhLCBiKSB7XG5cdGlmIChhLmdyb3VwT3JkZXIgIT09IGIuZ3JvdXBPcmRlcikge1xuXHRcdHJldHVybiBhLmdyb3VwT3JkZXIgLSBiLmdyb3VwT3JkZXI7XG5cdH0gZWxzZSBpZiAoYS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlcikge1xuXHRcdHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRlcjtcblx0fSBlbHNlIGlmIChhLnogIT09IGIueikge1xuXHRcdHJldHVybiBiLnogLSBhLno7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGEuaWQgLSBiLmlkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdCgpIHtcblx0Y29uc3QgcmVuZGVySXRlbXMgPSBbXTtcblx0bGV0IHJlbmRlckl0ZW1zSW5kZXggPSAwO1xuXHRjb25zdCBvcGFxdWUgPSBbXTtcblx0Y29uc3QgdHJhbnNtaXNzaXZlID0gW107XG5cdGNvbnN0IHRyYW5zcGFyZW50ID0gW107XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblx0XHRyZW5kZXJJdGVtc0luZGV4ID0gMDtcblx0XHRvcGFxdWUubGVuZ3RoID0gMDtcblx0XHR0cmFuc21pc3NpdmUubGVuZ3RoID0gMDtcblx0XHR0cmFuc3BhcmVudC5sZW5ndGggPSAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dFJlbmRlckl0ZW0ob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwKSB7XG5cdFx0bGV0IHJlbmRlckl0ZW0gPSByZW5kZXJJdGVtc1tyZW5kZXJJdGVtc0luZGV4XTtcblxuXHRcdGlmIChyZW5kZXJJdGVtID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbmRlckl0ZW0gPSB7XG5cdFx0XHRcdGlkOiBvYmplY3QuaWQsXG5cdFx0XHRcdG9iamVjdDogb2JqZWN0LFxuXHRcdFx0XHRnZW9tZXRyeTogZ2VvbWV0cnksXG5cdFx0XHRcdG1hdGVyaWFsOiBtYXRlcmlhbCxcblx0XHRcdFx0Z3JvdXBPcmRlcjogZ3JvdXBPcmRlcixcblx0XHRcdFx0cmVuZGVyT3JkZXI6IG9iamVjdC5yZW5kZXJPcmRlcixcblx0XHRcdFx0ejogeixcblx0XHRcdFx0Z3JvdXA6IGdyb3VwXG5cdFx0XHR9O1xuXHRcdFx0cmVuZGVySXRlbXNbcmVuZGVySXRlbXNJbmRleF0gPSByZW5kZXJJdGVtO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW5kZXJJdGVtLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0cmVuZGVySXRlbS5vYmplY3QgPSBvYmplY3Q7XG5cdFx0XHRyZW5kZXJJdGVtLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0XHRyZW5kZXJJdGVtLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwT3JkZXIgPSBncm91cE9yZGVyO1xuXHRcdFx0cmVuZGVySXRlbS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblx0XHRcdHJlbmRlckl0ZW0ueiA9IHo7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwID0gZ3JvdXA7XG5cdFx0fVxuXG5cdFx0cmVuZGVySXRlbXNJbmRleCsrO1xuXHRcdHJldHVybiByZW5kZXJJdGVtO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaChvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgeiwgZ3JvdXApIHtcblx0XHRjb25zdCByZW5kZXJJdGVtID0gZ2V0TmV4dFJlbmRlckl0ZW0ob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwKTtcblxuXHRcdGlmIChtYXRlcmlhbC50cmFuc21pc3Npb24gPiAwLjApIHtcblx0XHRcdHRyYW5zbWlzc2l2ZS5wdXNoKHJlbmRlckl0ZW0pO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUpIHtcblx0XHRcdHRyYW5zcGFyZW50LnB1c2gocmVuZGVySXRlbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wYXF1ZS5wdXNoKHJlbmRlckl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVuc2hpZnQob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwKSB7XG5cdFx0Y29uc3QgcmVuZGVySXRlbSA9IGdldE5leHRSZW5kZXJJdGVtKG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCk7XG5cblx0XHRpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMC4wKSB7XG5cdFx0XHR0cmFuc21pc3NpdmUudW5zaGlmdChyZW5kZXJJdGVtKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlKSB7XG5cdFx0XHR0cmFuc3BhcmVudC51bnNoaWZ0KHJlbmRlckl0ZW0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcGFxdWUudW5zaGlmdChyZW5kZXJJdGVtKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0KGN1c3RvbU9wYXF1ZVNvcnQsIGN1c3RvbVRyYW5zcGFyZW50U29ydCkge1xuXHRcdGlmIChvcGFxdWUubGVuZ3RoID4gMSkgb3BhcXVlLnNvcnQoY3VzdG9tT3BhcXVlU29ydCB8fCBwYWludGVyU29ydFN0YWJsZSk7XG5cdFx0aWYgKHRyYW5zbWlzc2l2ZS5sZW5ndGggPiAxKSB0cmFuc21pc3NpdmUuc29ydChjdXN0b21UcmFuc3BhcmVudFNvcnQgfHwgcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlKTtcblx0XHRpZiAodHJhbnNwYXJlbnQubGVuZ3RoID4gMSkgdHJhbnNwYXJlbnQuc29ydChjdXN0b21UcmFuc3BhcmVudFNvcnQgfHwgcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmlzaCgpIHtcblx0XHQvLyBDbGVhciByZWZlcmVuY2VzIGZyb20gaW5hY3RpdmUgcmVuZGVySXRlbXMgaW4gdGhlIGxpc3Rcblx0XHRmb3IgKGxldCBpID0gcmVuZGVySXRlbXNJbmRleCwgaWwgPSByZW5kZXJJdGVtcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCByZW5kZXJJdGVtID0gcmVuZGVySXRlbXNbaV07XG5cdFx0XHRpZiAocmVuZGVySXRlbS5pZCA9PT0gbnVsbCkgYnJlYWs7XG5cdFx0XHRyZW5kZXJJdGVtLmlkID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0ub2JqZWN0ID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0uZ2VvbWV0cnkgPSBudWxsO1xuXHRcdFx0cmVuZGVySXRlbS5tYXRlcmlhbCA9IG51bGw7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wYXF1ZTogb3BhcXVlLFxuXHRcdHRyYW5zbWlzc2l2ZTogdHJhbnNtaXNzaXZlLFxuXHRcdHRyYW5zcGFyZW50OiB0cmFuc3BhcmVudCxcblx0XHRpbml0OiBpbml0LFxuXHRcdHB1c2g6IHB1c2gsXG5cdFx0dW5zaGlmdDogdW5zaGlmdCxcblx0XHRmaW5pc2g6IGZpbmlzaCxcblx0XHRzb3J0OiBzb3J0XG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdHMoKSB7XG5cdGxldCBsaXN0cyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gZ2V0KHNjZW5lLCByZW5kZXJDYWxsRGVwdGgpIHtcblx0XHRsZXQgbGlzdDtcblxuXHRcdGlmIChsaXN0cy5oYXMoc2NlbmUpID09PSBmYWxzZSkge1xuXHRcdFx0bGlzdCA9IG5ldyBXZWJHTFJlbmRlckxpc3QoKTtcblx0XHRcdGxpc3RzLnNldChzY2VuZSwgW2xpc3RdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHJlbmRlckNhbGxEZXB0aCA+PSBsaXN0cy5nZXQoc2NlbmUpLmxlbmd0aCkge1xuXHRcdFx0XHRsaXN0ID0gbmV3IFdlYkdMUmVuZGVyTGlzdCgpO1xuXHRcdFx0XHRsaXN0cy5nZXQoc2NlbmUpLnB1c2gobGlzdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsaXN0ID0gbGlzdHMuZ2V0KHNjZW5lKVtyZW5kZXJDYWxsRGVwdGhdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblx0XHRsaXN0cyA9IG5ldyBXZWFrTWFwKCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gVW5pZm9ybXNDYWNoZSgpIHtcblx0Y29uc3QgbGlnaHRzID0ge307XG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAobGlnaHQpIHtcblx0XHRcdGlmIChsaWdodHNbbGlnaHQuaWRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGxpZ2h0c1tsaWdodC5pZF07XG5cdFx0XHR9XG5cblx0XHRcdGxldCB1bmlmb3JtcztcblxuXHRcdFx0c3dpdGNoIChsaWdodC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ0RpcmVjdGlvbmFsTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdTcG90TGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKCksXG5cdFx0XHRcdFx0XHRkaXN0YW5jZTogMCxcblx0XHRcdFx0XHRcdGNvbmVDb3M6IDAsXG5cdFx0XHRcdFx0XHRwZW51bWJyYUNvczogMCxcblx0XHRcdFx0XHRcdGRlY2F5OiAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdQb2ludExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0ZGlzdGFuY2U6IDAsXG5cdFx0XHRcdFx0XHRkZWNheTogMFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnSGVtaXNwaGVyZUxpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdHNreUNvbG9yOiBuZXcgQ29sb3IoKSxcblx0XHRcdFx0XHRcdGdyb3VuZENvbG9yOiBuZXcgQ29sb3IoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnUmVjdEFyZWFMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKCksXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGhhbGZXaWR0aDogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGhhbGZIZWlnaHQ6IG5ldyBWZWN0b3IzKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRsaWdodHNbbGlnaHQuaWRdID0gdW5pZm9ybXM7XG5cdFx0XHRyZXR1cm4gdW5pZm9ybXM7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaGFkb3dVbmlmb3Jtc0NhY2hlKCkge1xuXHRjb25zdCBsaWdodHMgPSB7fTtcblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uIChsaWdodCkge1xuXHRcdFx0aWYgKGxpZ2h0c1tsaWdodC5pZF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gbGlnaHRzW2xpZ2h0LmlkXTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHVuaWZvcm1zO1xuXG5cdFx0XHRzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRzaGFkb3dCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd1JhZGl1czogMSxcblx0XHRcdFx0XHRcdHNoYWRvd01hcFNpemU6IG5ldyBWZWN0b3IyKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1Nwb3RMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRzaGFkb3dCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd1JhZGl1czogMSxcblx0XHRcdFx0XHRcdHNoYWRvd01hcFNpemU6IG5ldyBWZWN0b3IyKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1BvaW50TGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0c2hhZG93QmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dSYWRpdXM6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRcdFx0c2hhZG93Q2FtZXJhTmVhcjogMSxcblx0XHRcdFx0XHRcdHNoYWRvd0NhbWVyYUZhcjogMTAwMFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIFRPRE8gKGFiZWxuYXRpb24pOiBzZXQgUmVjdEFyZWFMaWdodCBzaGFkb3cgdW5pZm9ybXNcblx0XHRcdH1cblxuXHRcdFx0bGlnaHRzW2xpZ2h0LmlkXSA9IHVuaWZvcm1zO1xuXHRcdFx0cmV0dXJuIHVuaWZvcm1zO1xuXHRcdH1cblx0fTtcbn1cblxubGV0IG5leHRWZXJzaW9uID0gMDtcblxuZnVuY3Rpb24gc2hhZG93Q2FzdGluZ0xpZ2h0c0ZpcnN0KGxpZ2h0QSwgbGlnaHRCKSB7XG5cdHJldHVybiAobGlnaHRCLmNhc3RTaGFkb3cgPyAxIDogMCkgLSAobGlnaHRBLmNhc3RTaGFkb3cgPyAxIDogMCk7XG59XG5cbmZ1bmN0aW9uIFdlYkdMTGlnaHRzKGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBjYWNoZSA9IG5ldyBVbmlmb3Jtc0NhY2hlKCk7XG5cdGNvbnN0IHNoYWRvd0NhY2hlID0gU2hhZG93VW5pZm9ybXNDYWNoZSgpO1xuXHRjb25zdCBzdGF0ZSA9IHtcblx0XHR2ZXJzaW9uOiAwLFxuXHRcdGhhc2g6IHtcblx0XHRcdGRpcmVjdGlvbmFsTGVuZ3RoOiAtMSxcblx0XHRcdHBvaW50TGVuZ3RoOiAtMSxcblx0XHRcdHNwb3RMZW5ndGg6IC0xLFxuXHRcdFx0cmVjdEFyZWFMZW5ndGg6IC0xLFxuXHRcdFx0aGVtaUxlbmd0aDogLTEsXG5cdFx0XHRudW1EaXJlY3Rpb25hbFNoYWRvd3M6IC0xLFxuXHRcdFx0bnVtUG9pbnRTaGFkb3dzOiAtMSxcblx0XHRcdG51bVNwb3RTaGFkb3dzOiAtMVxuXHRcdH0sXG5cdFx0YW1iaWVudDogWzAsIDAsIDBdLFxuXHRcdHByb2JlOiBbXSxcblx0XHRkaXJlY3Rpb25hbDogW10sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3c6IFtdLFxuXHRcdGRpcmVjdGlvbmFsU2hhZG93TWFwOiBbXSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDogW10sXG5cdFx0c3BvdDogW10sXG5cdFx0c3BvdFNoYWRvdzogW10sXG5cdFx0c3BvdFNoYWRvd01hcDogW10sXG5cdFx0c3BvdFNoYWRvd01hdHJpeDogW10sXG5cdFx0cmVjdEFyZWE6IFtdLFxuXHRcdHJlY3RBcmVhTFRDMTogbnVsbCxcblx0XHRyZWN0QXJlYUxUQzI6IG51bGwsXG5cdFx0cG9pbnQ6IFtdLFxuXHRcdHBvaW50U2hhZG93OiBbXSxcblx0XHRwb2ludFNoYWRvd01hcDogW10sXG5cdFx0cG9pbnRTaGFkb3dNYXRyaXg6IFtdLFxuXHRcdGhlbWk6IFtdXG5cdH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHN0YXRlLnByb2JlLnB1c2gobmV3IFZlY3RvcjMoKSk7XG5cblx0Y29uc3QgdmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG5cdGNvbnN0IG1hdHJpeDQgPSBuZXcgTWF0cml4NCgpO1xuXHRjb25zdCBtYXRyaXg0MiA9IG5ldyBNYXRyaXg0KCk7XG5cblx0ZnVuY3Rpb24gc2V0dXAobGlnaHRzLCBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cykge1xuXHRcdGxldCByID0gMCxcblx0XHRcdFx0ZyA9IDAsXG5cdFx0XHRcdGIgPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHN0YXRlLnByb2JlW2ldLnNldCgwLCAwLCAwKTtcblxuXHRcdGxldCBkaXJlY3Rpb25hbExlbmd0aCA9IDA7XG5cdFx0bGV0IHBvaW50TGVuZ3RoID0gMDtcblx0XHRsZXQgc3BvdExlbmd0aCA9IDA7XG5cdFx0bGV0IHJlY3RBcmVhTGVuZ3RoID0gMDtcblx0XHRsZXQgaGVtaUxlbmd0aCA9IDA7XG5cdFx0bGV0IG51bURpcmVjdGlvbmFsU2hhZG93cyA9IDA7XG5cdFx0bGV0IG51bVBvaW50U2hhZG93cyA9IDA7XG5cdFx0bGV0IG51bVNwb3RTaGFkb3dzID0gMDtcblx0XHRsaWdodHMuc29ydChzaGFkb3dDYXN0aW5nTGlnaHRzRmlyc3QpOyAvLyBhcnRpc3QtZnJpZW5kbHkgbGlnaHQgaW50ZW5zaXR5IHNjYWxpbmcgZmFjdG9yXG5cblx0XHRjb25zdCBzY2FsZUZhY3RvciA9IHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzICE9PSB0cnVlID8gTWF0aC5QSSA6IDE7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xuXHRcdFx0Y29uc3QgY29sb3IgPSBsaWdodC5jb2xvcjtcblx0XHRcdGNvbnN0IGludGVuc2l0eSA9IGxpZ2h0LmludGVuc2l0eTtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gbGlnaHQuZGlzdGFuY2U7XG5cdFx0XHRjb25zdCBzaGFkb3dNYXAgPSBsaWdodC5zaGFkb3cgJiYgbGlnaHQuc2hhZG93Lm1hcCA/IGxpZ2h0LnNoYWRvdy5tYXAudGV4dHVyZSA6IG51bGw7XG5cblx0XHRcdGlmIChsaWdodC5pc0FtYmllbnRMaWdodCkge1xuXHRcdFx0XHRyICs9IGNvbG9yLnIgKiBpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcjtcblx0XHRcdFx0ZyArPSBjb2xvci5nICogaW50ZW5zaXR5ICogc2NhbGVGYWN0b3I7XG5cdFx0XHRcdGIgKz0gY29sb3IuYiAqIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yO1xuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc0xpZ2h0UHJvYmUpIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCA5OyBqKyspIHtcblx0XHRcdFx0XHRzdGF0ZS5wcm9iZVtqXS5hZGRTY2FsZWRWZWN0b3IobGlnaHQuc2guY29lZmZpY2llbnRzW2pdLCBpbnRlbnNpdHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkobGlnaHQuY29sb3IpLm11bHRpcGx5U2NhbGFyKGxpZ2h0LmludGVuc2l0eSAqIHNjYWxlRmFjdG9yKTtcblxuXHRcdFx0XHRpZiAobGlnaHQuY2FzdFNoYWRvdykge1xuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblx0XHRcdFx0XHRjb25zdCBzaGFkb3dVbmlmb3JtcyA9IHNoYWRvd0NhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRcdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd1tkaXJlY3Rpb25hbExlbmd0aF0gPSBzaGFkb3dVbmlmb3Jtcztcblx0XHRcdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcFtkaXJlY3Rpb25hbExlbmd0aF0gPSBzaGFkb3dNYXA7XG5cdFx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZGlyZWN0aW9uYWxMZW5ndGhdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDtcblx0XHRcdFx0XHRudW1EaXJlY3Rpb25hbFNoYWRvd3MrKztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsW2RpcmVjdGlvbmFsTGVuZ3RoXSA9IHVuaWZvcm1zO1xuXHRcdFx0XHRkaXJlY3Rpb25hbExlbmd0aCsrO1xuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc1Nwb3RMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkoY29sb3IpLm11bHRpcGx5U2NhbGFyKGludGVuc2l0eSAqIHNjYWxlRmFjdG9yKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdFx0dW5pZm9ybXMuY29uZUNvcyA9IE1hdGguY29zKGxpZ2h0LmFuZ2xlKTtcblx0XHRcdFx0dW5pZm9ybXMucGVudW1icmFDb3MgPSBNYXRoLmNvcyhsaWdodC5hbmdsZSAqICgxIC0gbGlnaHQucGVudW1icmEpKTtcblx0XHRcdFx0dW5pZm9ybXMuZGVjYXkgPSBsaWdodC5kZWNheTtcblxuXHRcdFx0XHRpZiAobGlnaHQuY2FzdFNoYWRvdykge1xuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblx0XHRcdFx0XHRjb25zdCBzaGFkb3dVbmlmb3JtcyA9IHNoYWRvd0NhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRcdFx0XHRzdGF0ZS5zcG90U2hhZG93W3Nwb3RMZW5ndGhdID0gc2hhZG93VW5pZm9ybXM7XG5cdFx0XHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hcFtzcG90TGVuZ3RoXSA9IHNoYWRvd01hcDtcblx0XHRcdFx0XHRzdGF0ZS5zcG90U2hhZG93TWF0cml4W3Nwb3RMZW5ndGhdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDtcblx0XHRcdFx0XHRudW1TcG90U2hhZG93cysrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUuc3BvdFtzcG90TGVuZ3RoXSA9IHVuaWZvcm1zO1xuXHRcdFx0XHRzcG90TGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzUmVjdEFyZWFMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldChsaWdodCk7IC8vIChhKSBpbnRlbnNpdHkgaXMgdGhlIHRvdGFsIHZpc2libGUgbGlnaHQgZW1pdHRlZFxuXHRcdFx0XHQvL3VuaWZvcm1zLmNvbG9yLmNvcHkoIGNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSAvICggbGlnaHQud2lkdGggKiBsaWdodC5oZWlnaHQgKiBNYXRoLlBJICkgKTtcblx0XHRcdFx0Ly8gKGIpIGludGVuc2l0eSBpcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgbGlnaHRcblxuXHRcdFx0XHR1bmlmb3Jtcy5jb2xvci5jb3B5KGNvbG9yKS5tdWx0aXBseVNjYWxhcihpbnRlbnNpdHkpO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmV2lkdGguc2V0KGxpZ2h0LndpZHRoICogMC41LCAwLjAsIDAuMCk7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuc2V0KDAuMCwgbGlnaHQuaGVpZ2h0ICogMC41LCAwLjApO1xuXHRcdFx0XHRzdGF0ZS5yZWN0QXJlYVtyZWN0QXJlYUxlbmd0aF0gPSB1bmlmb3Jtcztcblx0XHRcdFx0cmVjdEFyZWFMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNQb2ludExpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gY2FjaGUuZ2V0KGxpZ2h0KTtcblx0XHRcdFx0dW5pZm9ybXMuY29sb3IuY29weShsaWdodC5jb2xvcikubXVsdGlwbHlTY2FsYXIobGlnaHQuaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IpO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNlO1xuXHRcdFx0XHR1bmlmb3Jtcy5kZWNheSA9IGxpZ2h0LmRlY2F5O1xuXG5cdFx0XHRcdGlmIChsaWdodC5jYXN0U2hhZG93KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xuXHRcdFx0XHRcdGNvbnN0IHNoYWRvd1VuaWZvcm1zID0gc2hhZG93Q2FjaGUuZ2V0KGxpZ2h0KTtcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dCaWFzID0gc2hhZG93LmJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93Tm9ybWFsQmlhcyA9IHNoYWRvdy5ub3JtYWxCaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd1JhZGl1cyA9IHNoYWRvdy5yYWRpdXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93TWFwU2l6ZSA9IHNoYWRvdy5tYXBTaXplO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0NhbWVyYU5lYXIgPSBzaGFkb3cuY2FtZXJhLm5lYXI7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93Q2FtZXJhRmFyID0gc2hhZG93LmNhbWVyYS5mYXI7XG5cdFx0XHRcdFx0c3RhdGUucG9pbnRTaGFkb3dbcG9pbnRMZW5ndGhdID0gc2hhZG93VW5pZm9ybXM7XG5cdFx0XHRcdFx0c3RhdGUucG9pbnRTaGFkb3dNYXBbcG9pbnRMZW5ndGhdID0gc2hhZG93TWFwO1xuXHRcdFx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWF0cml4W3BvaW50TGVuZ3RoXSA9IGxpZ2h0LnNoYWRvdy5tYXRyaXg7XG5cdFx0XHRcdFx0bnVtUG9pbnRTaGFkb3dzKys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS5wb2ludFtwb2ludExlbmd0aF0gPSB1bmlmb3Jtcztcblx0XHRcdFx0cG9pbnRMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNIZW1pc3BoZXJlTGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQobGlnaHQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5za3lDb2xvci5jb3B5KGxpZ2h0LmNvbG9yKS5tdWx0aXBseVNjYWxhcihpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcik7XG5cdFx0XHRcdHVuaWZvcm1zLmdyb3VuZENvbG9yLmNvcHkobGlnaHQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGludGVuc2l0eSAqIHNjYWxlRmFjdG9yKTtcblx0XHRcdFx0c3RhdGUuaGVtaVtoZW1pTGVuZ3RoXSA9IHVuaWZvcm1zO1xuXHRcdFx0XHRoZW1pTGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlY3RBcmVhTGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMikge1xuXHRcdFx0XHQvLyBXZWJHTCAyXG5cdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMSA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8xO1xuXHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlYkdMIDFcblx0XHRcdFx0aWYgKGV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMSA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8xO1xuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMiA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8yO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0c3RhdGUucmVjdEFyZWFMVEMxID0gVW5pZm9ybXNMaWIuTFRDX0hBTEZfMTtcblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfSEFMRl8yO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3RhdGUuYW1iaWVudFswXSA9IHI7XG5cdFx0c3RhdGUuYW1iaWVudFsxXSA9IGc7XG5cdFx0c3RhdGUuYW1iaWVudFsyXSA9IGI7XG5cdFx0Y29uc3QgaGFzaCA9IHN0YXRlLmhhc2g7XG5cblx0XHRpZiAoaGFzaC5kaXJlY3Rpb25hbExlbmd0aCAhPT0gZGlyZWN0aW9uYWxMZW5ndGggfHwgaGFzaC5wb2ludExlbmd0aCAhPT0gcG9pbnRMZW5ndGggfHwgaGFzaC5zcG90TGVuZ3RoICE9PSBzcG90TGVuZ3RoIHx8IGhhc2gucmVjdEFyZWFMZW5ndGggIT09IHJlY3RBcmVhTGVuZ3RoIHx8IGhhc2guaGVtaUxlbmd0aCAhPT0gaGVtaUxlbmd0aCB8fCBoYXNoLm51bURpcmVjdGlvbmFsU2hhZG93cyAhPT0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzIHx8IGhhc2gubnVtUG9pbnRTaGFkb3dzICE9PSBudW1Qb2ludFNoYWRvd3MgfHwgaGFzaC5udW1TcG90U2hhZG93cyAhPT0gbnVtU3BvdFNoYWRvd3MpIHtcblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsLmxlbmd0aCA9IGRpcmVjdGlvbmFsTGVuZ3RoO1xuXHRcdFx0c3RhdGUuc3BvdC5sZW5ndGggPSBzcG90TGVuZ3RoO1xuXHRcdFx0c3RhdGUucmVjdEFyZWEubGVuZ3RoID0gcmVjdEFyZWFMZW5ndGg7XG5cdFx0XHRzdGF0ZS5wb2ludC5sZW5ndGggPSBwb2ludExlbmd0aDtcblx0XHRcdHN0YXRlLmhlbWkubGVuZ3RoID0gaGVtaUxlbmd0aDtcblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aCA9IG51bURpcmVjdGlvbmFsU2hhZG93cztcblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCA9IG51bURpcmVjdGlvbmFsU2hhZG93cztcblx0XHRcdHN0YXRlLnBvaW50U2hhZG93Lmxlbmd0aCA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWFwLmxlbmd0aCA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdHN0YXRlLnNwb3RTaGFkb3cubGVuZ3RoID0gbnVtU3BvdFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5zcG90U2hhZG93TWFwLmxlbmd0aCA9IG51bVNwb3RTaGFkb3dzO1xuXHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0c3RhdGUucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoID0gbnVtUG9pbnRTaGFkb3dzO1xuXHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGggPSBudW1TcG90U2hhZG93cztcblx0XHRcdGhhc2guZGlyZWN0aW9uYWxMZW5ndGggPSBkaXJlY3Rpb25hbExlbmd0aDtcblx0XHRcdGhhc2gucG9pbnRMZW5ndGggPSBwb2ludExlbmd0aDtcblx0XHRcdGhhc2guc3BvdExlbmd0aCA9IHNwb3RMZW5ndGg7XG5cdFx0XHRoYXNoLnJlY3RBcmVhTGVuZ3RoID0gcmVjdEFyZWFMZW5ndGg7XG5cdFx0XHRoYXNoLmhlbWlMZW5ndGggPSBoZW1pTGVuZ3RoO1xuXHRcdFx0aGFzaC5udW1EaXJlY3Rpb25hbFNoYWRvd3MgPSBudW1EaXJlY3Rpb25hbFNoYWRvd3M7XG5cdFx0XHRoYXNoLm51bVBvaW50U2hhZG93cyA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdGhhc2gubnVtU3BvdFNoYWRvd3MgPSBudW1TcG90U2hhZG93cztcblx0XHRcdHN0YXRlLnZlcnNpb24gPSBuZXh0VmVyc2lvbisrO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNldHVwVmlldyhsaWdodHMsIGNhbWVyYSkge1xuXHRcdGxldCBkaXJlY3Rpb25hbExlbmd0aCA9IDA7XG5cdFx0bGV0IHBvaW50TGVuZ3RoID0gMDtcblx0XHRsZXQgc3BvdExlbmd0aCA9IDA7XG5cdFx0bGV0IHJlY3RBcmVhTGVuZ3RoID0gMDtcblx0XHRsZXQgaGVtaUxlbmd0aCA9IDA7XG5cdFx0Y29uc3Qgdmlld01hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2U7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xuXG5cdFx0XHRpZiAobGlnaHQuaXNEaXJlY3Rpb25hbExpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuZGlyZWN0aW9uYWxbZGlyZWN0aW9uYWxMZW5ndGhdO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnN1Yih2ZWN0b3IzKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih2aWV3TWF0cml4KTtcblx0XHRcdFx0ZGlyZWN0aW9uYWxMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNTcG90TGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5zcG90W3Nwb3RMZW5ndGhdO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQodmlld01hdHJpeCk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXHRcdFx0XHR2ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC50YXJnZXQubWF0cml4V29ybGQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc3ViKHZlY3RvcjMpO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHZpZXdNYXRyaXgpO1xuXHRcdFx0XHRzcG90TGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzUmVjdEFyZWFMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLnJlY3RBcmVhW3JlY3RBcmVhTGVuZ3RoXTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHZpZXdNYXRyaXgpOyAvLyBleHRyYWN0IGxvY2FsIHJvdGF0aW9uIG9mIGxpZ2h0IHRvIGRlcml2ZSB3aWR0aC9oZWlnaHQgaGFsZiB2ZWN0b3JzXG5cblx0XHRcdFx0bWF0cml4NDIuaWRlbnRpdHkoKTtcblx0XHRcdFx0bWF0cml4NC5jb3B5KGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0bWF0cml4NC5wcmVtdWx0aXBseSh2aWV3TWF0cml4KTtcblx0XHRcdFx0bWF0cml4NDIuZXh0cmFjdFJvdGF0aW9uKG1hdHJpeDQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmV2lkdGguc2V0KGxpZ2h0LndpZHRoICogMC41LCAwLjAsIDAuMCk7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuc2V0KDAuMCwgbGlnaHQuaGVpZ2h0ICogMC41LCAwLjApO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmV2lkdGguYXBwbHlNYXRyaXg0KG1hdHJpeDQyKTtcblx0XHRcdFx0dW5pZm9ybXMuaGFsZkhlaWdodC5hcHBseU1hdHJpeDQobWF0cml4NDIpO1xuXHRcdFx0XHRyZWN0QXJlYUxlbmd0aCsrO1xuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc1BvaW50TGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5wb2ludFtwb2ludExlbmd0aF07XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh2aWV3TWF0cml4KTtcblx0XHRcdFx0cG9pbnRMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNIZW1pc3BoZXJlTGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5oZW1pW2hlbWlMZW5ndGhdO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih2aWV3TWF0cml4KTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRoZW1pTGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZXR1cDogc2V0dXAsXG5cdFx0c2V0dXBWaWV3OiBzZXR1cFZpZXcsXG5cdFx0c3RhdGU6IHN0YXRlXG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyU3RhdGUoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGxpZ2h0cyA9IG5ldyBXZWJHTExpZ2h0cyhleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpO1xuXHRjb25zdCBsaWdodHNBcnJheSA9IFtdO1xuXHRjb25zdCBzaGFkb3dzQXJyYXkgPSBbXTtcblxuXHRmdW5jdGlvbiBpbml0KCkge1xuXHRcdGxpZ2h0c0FycmF5Lmxlbmd0aCA9IDA7XG5cdFx0c2hhZG93c0FycmF5Lmxlbmd0aCA9IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBwdXNoTGlnaHQobGlnaHQpIHtcblx0XHRsaWdodHNBcnJheS5wdXNoKGxpZ2h0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2hTaGFkb3coc2hhZG93TGlnaHQpIHtcblx0XHRzaGFkb3dzQXJyYXkucHVzaChzaGFkb3dMaWdodCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cExpZ2h0cyhwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cykge1xuXHRcdGxpZ2h0cy5zZXR1cChsaWdodHNBcnJheSwgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBMaWdodHNWaWV3KGNhbWVyYSkge1xuXHRcdGxpZ2h0cy5zZXR1cFZpZXcobGlnaHRzQXJyYXksIGNhbWVyYSk7XG5cdH1cblxuXHRjb25zdCBzdGF0ZSA9IHtcblx0XHRsaWdodHNBcnJheTogbGlnaHRzQXJyYXksXG5cdFx0c2hhZG93c0FycmF5OiBzaGFkb3dzQXJyYXksXG5cdFx0bGlnaHRzOiBsaWdodHNcblx0fTtcblx0cmV0dXJuIHtcblx0XHRpbml0OiBpbml0LFxuXHRcdHN0YXRlOiBzdGF0ZSxcblx0XHRzZXR1cExpZ2h0czogc2V0dXBMaWdodHMsXG5cdFx0c2V0dXBMaWdodHNWaWV3OiBzZXR1cExpZ2h0c1ZpZXcsXG5cdFx0cHVzaExpZ2h0OiBwdXNoTGlnaHQsXG5cdFx0cHVzaFNoYWRvdzogcHVzaFNoYWRvd1xuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlclN0YXRlcyhleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpIHtcblx0bGV0IHJlbmRlclN0YXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gZ2V0KHNjZW5lLCByZW5kZXJDYWxsRGVwdGggPSAwKSB7XG5cdFx0bGV0IHJlbmRlclN0YXRlO1xuXG5cdFx0aWYgKHJlbmRlclN0YXRlcy5oYXMoc2NlbmUpID09PSBmYWxzZSkge1xuXHRcdFx0cmVuZGVyU3RhdGUgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZShleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpO1xuXHRcdFx0cmVuZGVyU3RhdGVzLnNldChzY2VuZSwgW3JlbmRlclN0YXRlXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChyZW5kZXJDYWxsRGVwdGggPj0gcmVuZGVyU3RhdGVzLmdldChzY2VuZSkubGVuZ3RoKSB7XG5cdFx0XHRcdHJlbmRlclN0YXRlID0gbmV3IFdlYkdMUmVuZGVyU3RhdGUoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0XHRcdFx0cmVuZGVyU3RhdGVzLmdldChzY2VuZSkucHVzaChyZW5kZXJTdGF0ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoc2NlbmUpW3JlbmRlckNhbGxEZXB0aF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlbmRlclN0YXRlO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblx0XHRyZW5kZXJTdGF0ZXMgPSBuZXcgV2Vha01hcCgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG59XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hEZXB0aE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaERlcHRoTWF0ZXJpYWwnO1xuXHRcdHRoaXMuZGVwdGhQYWNraW5nID0gQmFzaWNEZXB0aFBhY2tpbmc7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMuZm9nID0gZmFsc2U7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmRlcHRoUGFja2luZyA9IHNvdXJjZS5kZXB0aFBhY2tpbmc7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hEZXB0aE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcbiAqXHRyZWZlcmVuY2VQb3NpdGlvbjogPGZsb2F0PixcbiAqXHRuZWFyRGlzdGFuY2U6IDxmbG9hdD4sXG4gKlx0ZmFyRGlzdGFuY2U6IDxmbG9hdD4sXG4gKlxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqXHRkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+XG4gKlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hEaXN0YW5jZU1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaERpc3RhbmNlTWF0ZXJpYWwnO1xuXHRcdHRoaXMucmVmZXJlbmNlUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRcdHRoaXMubmVhckRpc3RhbmNlID0gMTtcblx0XHR0aGlzLmZhckRpc3RhbmNlID0gMTAwMDtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cdFx0dGhpcy5mb2cgPSBmYWxzZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weShzb3VyY2UucmVmZXJlbmNlUG9zaXRpb24pO1xuXHRcdHRoaXMubmVhckRpc3RhbmNlID0gc291cmNlLm5lYXJEaXN0YW5jZTtcblx0XHR0aGlzLmZhckRpc3RhbmNlID0gc291cmNlLmZhckRpc3RhbmNlO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaERpc3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCB2ZXJ0ZXggPSBcInZvaWQgbWFpbigpIHtcXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcXG59XCI7XG5jb25zdCBmcmFnbWVudCA9IFwidW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxudm9pZCBtYWluKCkge1xcblxcdGNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTtcXG5cXHRmbG9hdCBtZWFuID0gMC4wO1xcblxcdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcXG5cXHRmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7XFxuXFx0ZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7XFxuXFx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XFxuXFx0XFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xcblxcdFxcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1NcXG5cXHRcXHRcXHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XFxuXFx0XFx0XFx0bWVhbiArPSBkaXN0cmlidXRpb24ueDtcXG5cXHRcXHRcXHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XFxuXFx0XFx0XFx0bWVhbiArPSBkZXB0aDtcXG5cXHRcXHRcXHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0bWVhbiA9IG1lYW4gLyBzYW1wbGVzO1xcblxcdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XFxuXFx0ZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcXG59XCI7XG5cbmZ1bmN0aW9uIFdlYkdMU2hhZG93TWFwKF9yZW5kZXJlciwgX29iamVjdHMsIF9jYXBhYmlsaXRpZXMpIHtcblx0bGV0IF9mcnVzdHVtID0gbmV3IEZydXN0dW0oKTtcblxuXHRjb25zdCBfc2hhZG93TWFwU2l6ZSA9IG5ldyBWZWN0b3IyKCksXG5cdFx0XHRcdF92aWV3cG9ydFNpemUgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRfdmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpLFxuXHRcdFx0XHRfZGVwdGhNYXRlcmlhbCA9IG5ldyBNZXNoRGVwdGhNYXRlcmlhbCh7XG5cdFx0ZGVwdGhQYWNraW5nOiBSR0JBRGVwdGhQYWNraW5nXG5cdH0pLFxuXHRcdFx0XHRfZGlzdGFuY2VNYXRlcmlhbCA9IG5ldyBNZXNoRGlzdGFuY2VNYXRlcmlhbCgpLFxuXHRcdFx0XHRfbWF0ZXJpYWxDYWNoZSA9IHt9LFxuXHRcdFx0XHRfbWF4VGV4dHVyZVNpemUgPSBfY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplO1xuXG5cdGNvbnN0IHNoYWRvd1NpZGUgPSB7XG5cdFx0MDogQmFja1NpZGUsXG5cdFx0MTogRnJvbnRTaWRlLFxuXHRcdDI6IERvdWJsZVNpZGVcblx0fTtcblx0Y29uc3Qgc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0ZGVmaW5lczoge1xuXHRcdFx0VlNNX1NBTVBMRVM6IDhcblx0XHR9LFxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHRzaGFkb3dfcGFzczoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHJlc29sdXRpb246IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBWZWN0b3IyKClcblx0XHRcdH0sXG5cdFx0XHRyYWRpdXM6IHtcblx0XHRcdFx0dmFsdWU6IDQuMFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dmVydGV4U2hhZGVyOiB2ZXJ0ZXgsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50XG5cdH0pO1xuXHRjb25zdCBzaGFkb3dNYXRlcmlhbEhvcml6b250YWwgPSBzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLmNsb25lKCk7XG5cdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC5kZWZpbmVzLkhPUklaT05UQUxfUEFTUyA9IDE7XG5cdGNvbnN0IGZ1bGxTY3JlZW5UcmkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0ZnVsbFNjcmVlblRyaS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KFstMSwgLTEsIDAuNSwgMywgLTEsIDAuNSwgLTEsIDMsIDAuNV0pLCAzKSk7XG5cdGNvbnN0IGZ1bGxTY3JlZW5NZXNoID0gbmV3IE1lc2goZnVsbFNjcmVlblRyaSwgc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbCk7XG5cdGNvbnN0IHNjb3BlID0gdGhpcztcblx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG5cdHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTtcblx0dGhpcy50eXBlID0gUENGU2hhZG93TWFwO1xuXG5cdHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKGxpZ2h0cywgc2NlbmUsIGNhbWVyYSkge1xuXHRcdGlmIChzY29wZS5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuXHRcdGlmIChzY29wZS5hdXRvVXBkYXRlID09PSBmYWxzZSAmJiBzY29wZS5uZWVkc1VwZGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcblx0XHRpZiAobGlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclRhcmdldCA9IF9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdGNvbnN0IGFjdGl2ZUN1YmVGYWNlID0gX3JlbmRlcmVyLmdldEFjdGl2ZUN1YmVGYWNlKCk7XG5cblx0XHRjb25zdCBhY3RpdmVNaXBtYXBMZXZlbCA9IF9yZW5kZXJlci5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpO1xuXG5cdFx0Y29uc3QgX3N0YXRlID0gX3JlbmRlcmVyLnN0YXRlOyAvLyBTZXQgR0wgc3RhdGUgZm9yIGRlcHRoIG1hcC5cblxuXHRcdF9zdGF0ZS5zZXRCbGVuZGluZyhOb0JsZW5kaW5nKTtcblxuXHRcdF9zdGF0ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsIDEsIDEsIDEpO1xuXG5cdFx0X3N0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCh0cnVlKTtcblxuXHRcdF9zdGF0ZS5zZXRTY2lzc29yVGVzdChmYWxzZSk7IC8vIHJlbmRlciBkZXB0aCBtYXBcblxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbGlnaHRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xuXHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xuXG5cdFx0XHRpZiAoc2hhZG93ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFNoYWRvd01hcDonLCBsaWdodCwgJ2hhcyBubyBzaGFkb3cuJyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2hhZG93LmF1dG9VcGRhdGUgPT09IGZhbHNlICYmIHNoYWRvdy5uZWVkc1VwZGF0ZSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuXG5cdFx0XHRfc2hhZG93TWFwU2l6ZS5jb3B5KHNoYWRvdy5tYXBTaXplKTtcblxuXHRcdFx0Y29uc3Qgc2hhZG93RnJhbWVFeHRlbnRzID0gc2hhZG93LmdldEZyYW1lRXh0ZW50cygpO1xuXG5cdFx0XHRfc2hhZG93TWFwU2l6ZS5tdWx0aXBseShzaGFkb3dGcmFtZUV4dGVudHMpO1xuXG5cdFx0XHRfdmlld3BvcnRTaXplLmNvcHkoc2hhZG93Lm1hcFNpemUpO1xuXG5cdFx0XHRpZiAoX3NoYWRvd01hcFNpemUueCA+IF9tYXhUZXh0dXJlU2l6ZSB8fCBfc2hhZG93TWFwU2l6ZS55ID4gX21heFRleHR1cmVTaXplKSB7XG5cdFx0XHRcdGlmIChfc2hhZG93TWFwU2l6ZS54ID4gX21heFRleHR1cmVTaXplKSB7XG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS54ID0gTWF0aC5mbG9vcihfbWF4VGV4dHVyZVNpemUgLyBzaGFkb3dGcmFtZUV4dGVudHMueCk7XG5cdFx0XHRcdFx0X3NoYWRvd01hcFNpemUueCA9IF92aWV3cG9ydFNpemUueCAqIHNoYWRvd0ZyYW1lRXh0ZW50cy54O1xuXHRcdFx0XHRcdHNoYWRvdy5tYXBTaXplLnggPSBfdmlld3BvcnRTaXplLng7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoX3NoYWRvd01hcFNpemUueSA+IF9tYXhUZXh0dXJlU2l6ZSkge1xuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueSA9IE1hdGguZmxvb3IoX21heFRleHR1cmVTaXplIC8gc2hhZG93RnJhbWVFeHRlbnRzLnkpO1xuXHRcdFx0XHRcdF9zaGFkb3dNYXBTaXplLnkgPSBfdmlld3BvcnRTaXplLnkgKiBzaGFkb3dGcmFtZUV4dGVudHMueTtcblx0XHRcdFx0XHRzaGFkb3cubWFwU2l6ZS55ID0gX3ZpZXdwb3J0U2l6ZS55O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzaGFkb3cubWFwID09PSBudWxsICYmICFzaGFkb3cuaXNQb2ludExpZ2h0U2hhZG93ICYmIHRoaXMudHlwZSA9PT0gVlNNU2hhZG93TWFwKSB7XG5cdFx0XHRcdGNvbnN0IHBhcnMgPSB7XG5cdFx0XHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRcdFx0bWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHNoYWRvdy5tYXAgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoX3NoYWRvd01hcFNpemUueCwgX3NoYWRvd01hcFNpemUueSwgcGFycyk7XG5cdFx0XHRcdHNoYWRvdy5tYXAudGV4dHVyZS5uYW1lID0gbGlnaHQubmFtZSArICcuc2hhZG93TWFwJztcblx0XHRcdFx0c2hhZG93Lm1hcFBhc3MgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoX3NoYWRvd01hcFNpemUueCwgX3NoYWRvd01hcFNpemUueSwgcGFycyk7XG5cdFx0XHRcdHNoYWRvdy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2hhZG93Lm1hcCA9PT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwYXJzID0ge1xuXHRcdFx0XHRcdG1pbkZpbHRlcjogTmVhcmVzdEZpbHRlcixcblx0XHRcdFx0XHRtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXG5cdFx0XHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHNoYWRvdy5tYXAgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoX3NoYWRvd01hcFNpemUueCwgX3NoYWRvd01hcFNpemUueSwgcGFycyk7XG5cdFx0XHRcdHNoYWRvdy5tYXAudGV4dHVyZS5uYW1lID0gbGlnaHQubmFtZSArICcuc2hhZG93TWFwJztcblx0XHRcdFx0c2hhZG93LmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHR9XG5cblx0XHRcdF9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoc2hhZG93Lm1hcCk7XG5cblx0XHRcdF9yZW5kZXJlci5jbGVhcigpO1xuXG5cdFx0XHRjb25zdCB2aWV3cG9ydENvdW50ID0gc2hhZG93LmdldFZpZXdwb3J0Q291bnQoKTtcblxuXHRcdFx0Zm9yIChsZXQgdnAgPSAwOyB2cCA8IHZpZXdwb3J0Q291bnQ7IHZwKyspIHtcblx0XHRcdFx0Y29uc3Qgdmlld3BvcnQgPSBzaGFkb3cuZ2V0Vmlld3BvcnQodnApO1xuXG5cdFx0XHRcdF92aWV3cG9ydC5zZXQoX3ZpZXdwb3J0U2l6ZS54ICogdmlld3BvcnQueCwgX3ZpZXdwb3J0U2l6ZS55ICogdmlld3BvcnQueSwgX3ZpZXdwb3J0U2l6ZS54ICogdmlld3BvcnQueiwgX3ZpZXdwb3J0U2l6ZS55ICogdmlld3BvcnQudyk7XG5cblx0XHRcdFx0X3N0YXRlLnZpZXdwb3J0KF92aWV3cG9ydCk7XG5cblx0XHRcdFx0c2hhZG93LnVwZGF0ZU1hdHJpY2VzKGxpZ2h0LCB2cCk7XG5cdFx0XHRcdF9mcnVzdHVtID0gc2hhZG93LmdldEZydXN0dW0oKTtcblx0XHRcdFx0cmVuZGVyT2JqZWN0KHNjZW5lLCBjYW1lcmEsIHNoYWRvdy5jYW1lcmEsIGxpZ2h0LCB0aGlzLnR5cGUpO1xuXHRcdFx0fSAvLyBkbyBibHVyIHBhc3MgZm9yIFZTTVxuXG5cblx0XHRcdGlmICghc2hhZG93LmlzUG9pbnRMaWdodFNoYWRvdyAmJiB0aGlzLnR5cGUgPT09IFZTTVNoYWRvd01hcCkge1xuXHRcdFx0XHRWU01QYXNzKHNoYWRvdywgY2FtZXJhKTtcblx0XHRcdH1cblxuXHRcdFx0c2hhZG93Lm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0c2NvcGUubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdF9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY3VycmVudFJlbmRlclRhcmdldCwgYWN0aXZlQ3ViZUZhY2UsIGFjdGl2ZU1pcG1hcExldmVsKTtcblx0fTtcblxuXHRmdW5jdGlvbiBWU01QYXNzKHNoYWRvdywgY2FtZXJhKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBfb2JqZWN0cy51cGRhdGUoZnVsbFNjcmVlbk1lc2gpO1xuXG5cdFx0aWYgKHNoYWRvd01hdGVyaWFsVmVydGljYWwuZGVmaW5lcy5WU01fU0FNUExFUyAhPT0gc2hhZG93LmJsdXJTYW1wbGVzKSB7XG5cdFx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLmRlZmluZXMuVlNNX1NBTVBMRVMgPSBzaGFkb3cuYmx1clNhbXBsZXM7XG5cdFx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwuZGVmaW5lcy5WU01fU0FNUExFUyA9IHNoYWRvdy5ibHVyU2FtcGxlcztcblx0XHRcdHNoYWRvd01hdGVyaWFsVmVydGljYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9IC8vIHZlcnRpY2FsIHBhc3NcblxuXG5cdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZSA9IHNoYWRvdy5tYXAudGV4dHVyZTtcblx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHNoYWRvdy5yYWRpdXM7XG5cblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHNoYWRvdy5tYXBQYXNzKTtcblxuXHRcdF9yZW5kZXJlci5jbGVhcigpO1xuXG5cdFx0X3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRpcmVjdChjYW1lcmEsIG51bGwsIGdlb21ldHJ5LCBzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLCBmdWxsU2NyZWVuTWVzaCwgbnVsbCk7IC8vIGhvcml6b250YWwgcGFzc1xuXG5cblx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWUgPSBzaGFkb3cubWFwUGFzcy50ZXh0dXJlO1xuXHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlID0gc2hhZG93Lm1hcFNpemU7XG5cdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHNoYWRvdy5yYWRpdXM7XG5cblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHNoYWRvdy5tYXApO1xuXG5cdFx0X3JlbmRlcmVyLmNsZWFyKCk7XG5cblx0XHRfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KGNhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbCwgZnVsbFNjcmVlbk1lc2gsIG51bGwpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbChvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgbGlnaHQsIHNoYWRvd0NhbWVyYU5lYXIsIHNoYWRvd0NhbWVyYUZhciwgdHlwZSkge1xuXHRcdGxldCByZXN1bHQgPSBudWxsO1xuXHRcdGNvbnN0IGN1c3RvbU1hdGVyaWFsID0gbGlnaHQuaXNQb2ludExpZ2h0ID09PSB0cnVlID8gb2JqZWN0LmN1c3RvbURpc3RhbmNlTWF0ZXJpYWwgOiBvYmplY3QuY3VzdG9tRGVwdGhNYXRlcmlhbDtcblxuXHRcdGlmIChjdXN0b21NYXRlcmlhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXN1bHQgPSBjdXN0b21NYXRlcmlhbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gbGlnaHQuaXNQb2ludExpZ2h0ID09PSB0cnVlID8gX2Rpc3RhbmNlTWF0ZXJpYWwgOiBfZGVwdGhNYXRlcmlhbDtcblx0XHR9XG5cblx0XHRpZiAoX3JlbmRlcmVyLmxvY2FsQ2xpcHBpbmdFbmFibGVkICYmIG1hdGVyaWFsLmNsaXBTaGFkb3dzID09PSB0cnVlICYmIG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCAhPT0gMCB8fCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgJiYgbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGUgIT09IDAgfHwgbWF0ZXJpYWwuYWxwaGFNYXAgJiYgbWF0ZXJpYWwuYWxwaGFUZXN0ID4gMCkge1xuXHRcdFx0Ly8gaW4gdGhpcyBjYXNlIHdlIG5lZWQgYSB1bmlxdWUgbWF0ZXJpYWwgaW5zdGFuY2UgcmVmbGVjdGluZyB0aGVcblx0XHRcdC8vIGFwcHJvcHJpYXRlIHN0YXRlXG5cdFx0XHRjb25zdCBrZXlBID0gcmVzdWx0LnV1aWQsXG5cdFx0XHRcdFx0XHRrZXlCID0gbWF0ZXJpYWwudXVpZDtcblx0XHRcdGxldCBtYXRlcmlhbHNGb3JWYXJpYW50ID0gX21hdGVyaWFsQ2FjaGVba2V5QV07XG5cblx0XHRcdGlmIChtYXRlcmlhbHNGb3JWYXJpYW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWF0ZXJpYWxzRm9yVmFyaWFudCA9IHt9O1xuXHRcdFx0XHRfbWF0ZXJpYWxDYWNoZVtrZXlBXSA9IG1hdGVyaWFsc0ZvclZhcmlhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBjYWNoZWRNYXRlcmlhbCA9IG1hdGVyaWFsc0ZvclZhcmlhbnRba2V5Ql07XG5cblx0XHRcdGlmIChjYWNoZWRNYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNhY2hlZE1hdGVyaWFsID0gcmVzdWx0LmNsb25lKCk7XG5cdFx0XHRcdG1hdGVyaWFsc0ZvclZhcmlhbnRba2V5Ql0gPSBjYWNoZWRNYXRlcmlhbDtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0ID0gY2FjaGVkTWF0ZXJpYWw7XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnZpc2libGUgPSBtYXRlcmlhbC52aXNpYmxlO1xuXHRcdHJlc3VsdC53aXJlZnJhbWUgPSBtYXRlcmlhbC53aXJlZnJhbWU7XG5cblx0XHRpZiAodHlwZSA9PT0gVlNNU2hhZG93TWFwKSB7XG5cdFx0XHRyZXN1bHQuc2lkZSA9IG1hdGVyaWFsLnNoYWRvd1NpZGUgIT09IG51bGwgPyBtYXRlcmlhbC5zaGFkb3dTaWRlIDogbWF0ZXJpYWwuc2lkZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0LnNpZGUgPSBtYXRlcmlhbC5zaGFkb3dTaWRlICE9PSBudWxsID8gbWF0ZXJpYWwuc2hhZG93U2lkZSA6IHNoYWRvd1NpZGVbbWF0ZXJpYWwuc2lkZV07XG5cdFx0fVxuXG5cdFx0cmVzdWx0LmFscGhhTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0cmVzdWx0LmFscGhhVGVzdCA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblx0XHRyZXN1bHQuY2xpcFNoYWRvd3MgPSBtYXRlcmlhbC5jbGlwU2hhZG93cztcblx0XHRyZXN1bHQuY2xpcHBpbmdQbGFuZXMgPSBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcztcblx0XHRyZXN1bHQuY2xpcEludGVyc2VjdGlvbiA9IG1hdGVyaWFsLmNsaXBJbnRlcnNlY3Rpb247XG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRyZXN1bHQuZGlzcGxhY2VtZW50U2NhbGUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRyZXN1bHQuZGlzcGxhY2VtZW50QmlhcyA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0cmVzdWx0LndpcmVmcmFtZUxpbmV3aWR0aCA9IG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRyZXN1bHQubGluZXdpZHRoID0gbWF0ZXJpYWwubGluZXdpZHRoO1xuXG5cdFx0aWYgKGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSAmJiByZXN1bHQuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCA9PT0gdHJ1ZSkge1xuXHRcdFx0cmVzdWx0LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRyZXN1bHQubmVhckRpc3RhbmNlID0gc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdHJlc3VsdC5mYXJEaXN0YW5jZSA9IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0KG9iamVjdCwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGxpZ2h0LCB0eXBlKSB7XG5cdFx0aWYgKG9iamVjdC52aXNpYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoY2FtZXJhLmxheWVycyk7XG5cblx0XHRpZiAodmlzaWJsZSAmJiAob2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cykpIHtcblx0XHRcdGlmICgob2JqZWN0LmNhc3RTaGFkb3cgfHwgb2JqZWN0LnJlY2VpdmVTaGFkb3cgJiYgdHlwZSA9PT0gVlNNU2hhZG93TWFwKSAmJiAoIW9iamVjdC5mcnVzdHVtQ3VsbGVkIHx8IF9mcnVzdHVtLmludGVyc2VjdHNPYmplY3Qob2JqZWN0KSkpIHtcblx0XHRcdFx0b2JqZWN0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHNoYWRvd0NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9iamVjdC5tYXRyaXhXb3JsZCk7XG5cblx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBfb2JqZWN0cy51cGRhdGUob2JqZWN0KTtcblxuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcblx0XHRcdFx0XHRjb25zdCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBrID0gMCwga2wgPSBncm91cHMubGVuZ3RoOyBrIDwga2w7IGsrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNba107XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF07XG5cblx0XHRcdFx0XHRcdGlmIChncm91cE1hdGVyaWFsICYmIGdyb3VwTWF0ZXJpYWwudmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkZXB0aE1hdGVyaWFsID0gZ2V0RGVwdGhNYXRlcmlhbChvYmplY3QsIGdlb21ldHJ5LCBncm91cE1hdGVyaWFsLCBsaWdodCwgc2hhZG93Q2FtZXJhLm5lYXIsIHNoYWRvd0NhbWVyYS5mYXIsIHR5cGUpO1xuXG5cdFx0XHRcdFx0XHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3Qoc2hhZG93Q2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgZGVwdGhNYXRlcmlhbCwgb2JqZWN0LCBncm91cCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnZpc2libGUpIHtcblx0XHRcdFx0XHRjb25zdCBkZXB0aE1hdGVyaWFsID0gZ2V0RGVwdGhNYXRlcmlhbChvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgbGlnaHQsIHNoYWRvd0NhbWVyYS5uZWFyLCBzaGFkb3dDYW1lcmEuZmFyLCB0eXBlKTtcblxuXHRcdFx0XHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3Qoc2hhZG93Q2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgZGVwdGhNYXRlcmlhbCwgb2JqZWN0LCBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNoaWxkcmVuID0gb2JqZWN0LmNoaWxkcmVuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHJlbmRlck9iamVjdChjaGlsZHJlbltpXSwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGxpZ2h0LCB0eXBlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gV2ViR0xTdGF0ZShnbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGZ1bmN0aW9uIENvbG9yQnVmZmVyKCkge1xuXHRcdGxldCBsb2NrZWQgPSBmYWxzZTtcblx0XHRjb25zdCBjb2xvciA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0bGV0IGN1cnJlbnRDb2xvck1hc2sgPSBudWxsO1xuXHRcdGNvbnN0IGN1cnJlbnRDb2xvckNsZWFyID0gbmV3IFZlY3RvcjQoMCwgMCwgMCwgMCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNldE1hc2s6IGZ1bmN0aW9uIChjb2xvck1hc2spIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRDb2xvck1hc2sgIT09IGNvbG9yTWFzayAmJiAhbG9ja2VkKSB7XG5cdFx0XHRcdFx0Z2wuY29sb3JNYXNrKGNvbG9yTWFzaywgY29sb3JNYXNrLCBjb2xvck1hc2ssIGNvbG9yTWFzayk7XG5cdFx0XHRcdFx0Y3VycmVudENvbG9yTWFzayA9IGNvbG9yTWFzaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNldExvY2tlZDogZnVuY3Rpb24gKGxvY2spIHtcblx0XHRcdFx0bG9ja2VkID0gbG9jaztcblx0XHRcdH0sXG5cdFx0XHRzZXRDbGVhcjogZnVuY3Rpb24gKHIsIGcsIGIsIGEsIHByZW11bHRpcGxpZWRBbHBoYSkge1xuXHRcdFx0XHRpZiAocHJlbXVsdGlwbGllZEFscGhhID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ciAqPSBhO1xuXHRcdFx0XHRcdGcgKj0gYTtcblx0XHRcdFx0XHRiICo9IGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb2xvci5zZXQociwgZywgYiwgYSk7XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRDb2xvckNsZWFyLmVxdWFscyhjb2xvcikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0Z2wuY2xlYXJDb2xvcihyLCBnLCBiLCBhKTtcblx0XHRcdFx0XHRjdXJyZW50Q29sb3JDbGVhci5jb3B5KGNvbG9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRjdXJyZW50Q29sb3JNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudENvbG9yQ2xlYXIuc2V0KC0xLCAwLCAwLCAwKTsgLy8gc2V0IHRvIGludmFsaWQgc3RhdGVcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gRGVwdGhCdWZmZXIoKSB7XG5cdFx0bGV0IGxvY2tlZCA9IGZhbHNlO1xuXHRcdGxldCBjdXJyZW50RGVwdGhNYXNrID0gbnVsbDtcblx0XHRsZXQgY3VycmVudERlcHRoRnVuYyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2V0VGVzdDogZnVuY3Rpb24gKGRlcHRoVGVzdCkge1xuXHRcdFx0XHRpZiAoZGVwdGhUZXN0KSB7XG5cdFx0XHRcdFx0ZW5hYmxlKGdsLkRFUFRIX1RFU1QpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoZGVwdGhNYXNrKSB7XG5cdFx0XHRcdGlmIChjdXJyZW50RGVwdGhNYXNrICE9PSBkZXB0aE1hc2sgJiYgIWxvY2tlZCkge1xuXHRcdFx0XHRcdGdsLmRlcHRoTWFzayhkZXB0aE1hc2spO1xuXHRcdFx0XHRcdGN1cnJlbnREZXB0aE1hc2sgPSBkZXB0aE1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRGdW5jOiBmdW5jdGlvbiAoZGVwdGhGdW5jKSB7XG5cdFx0XHRcdGlmIChjdXJyZW50RGVwdGhGdW5jICE9PSBkZXB0aEZ1bmMpIHtcblx0XHRcdFx0XHRpZiAoZGVwdGhGdW5jKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGRlcHRoRnVuYykge1xuXHRcdFx0XHRcdFx0XHRjYXNlIE5ldmVyRGVwdGg6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLk5FVkVSKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIEFsd2F5c0RlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5BTFdBWVMpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTGVzc0RlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIExlc3NFcXVhbERlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5MRVFVQUwpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgRXF1YWxEZXB0aDpcblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuRVFVQUwpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgR3JlYXRlckVxdWFsRGVwdGg6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLkdFUVVBTCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBHcmVhdGVyRGVwdGg6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLkdSRUFURVIpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTm90RXF1YWxEZXB0aDpcblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuTk9URVFVQUwpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLkxFUVVBTCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5MRVFVQUwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN1cnJlbnREZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRMb2NrZWQ6IGZ1bmN0aW9uIChsb2NrKSB7XG5cdFx0XHRcdGxvY2tlZCA9IGxvY2s7XG5cdFx0XHR9LFxuXHRcdFx0c2V0Q2xlYXI6IGZ1bmN0aW9uIChkZXB0aCkge1xuXHRcdFx0XHRpZiAoY3VycmVudERlcHRoQ2xlYXIgIT09IGRlcHRoKSB7XG5cdFx0XHRcdFx0Z2wuY2xlYXJEZXB0aChkZXB0aCk7XG5cdFx0XHRcdFx0Y3VycmVudERlcHRoQ2xlYXIgPSBkZXB0aDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRjdXJyZW50RGVwdGhNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudERlcHRoRnVuYyA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gU3RlbmNpbEJ1ZmZlcigpIHtcblx0XHRsZXQgbG9ja2VkID0gZmFsc2U7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRnVuYyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsUmVmID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxGdW5jTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRmFpbCA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsWkZhaWwgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFpQYXNzID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxDbGVhciA9IG51bGw7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNldFRlc3Q6IGZ1bmN0aW9uIChzdGVuY2lsVGVzdCkge1xuXHRcdFx0XHRpZiAoIWxvY2tlZCkge1xuXHRcdFx0XHRcdGlmIChzdGVuY2lsVGVzdCkge1xuXHRcdFx0XHRcdFx0ZW5hYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoc3RlbmNpbE1hc2spIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRTdGVuY2lsTWFzayAhPT0gc3RlbmNpbE1hc2sgJiYgIWxvY2tlZCkge1xuXHRcdFx0XHRcdGdsLnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbE1hc2sgPSBzdGVuY2lsTWFzaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNldEZ1bmM6IGZ1bmN0aW9uIChzdGVuY2lsRnVuYywgc3RlbmNpbFJlZiwgc3RlbmNpbE1hc2spIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRTdGVuY2lsRnVuYyAhPT0gc3RlbmNpbEZ1bmMgfHwgY3VycmVudFN0ZW5jaWxSZWYgIT09IHN0ZW5jaWxSZWYgfHwgY3VycmVudFN0ZW5jaWxGdW5jTWFzayAhPT0gc3RlbmNpbE1hc2spIHtcblx0XHRcdFx0XHRnbC5zdGVuY2lsRnVuYyhzdGVuY2lsRnVuYywgc3RlbmNpbFJlZiwgc3RlbmNpbE1hc2spO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmNNYXNrID0gc3RlbmNpbE1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRPcDogZnVuY3Rpb24gKHN0ZW5jaWxGYWlsLCBzdGVuY2lsWkZhaWwsIHN0ZW5jaWxaUGFzcykge1xuXHRcdFx0XHRpZiAoY3VycmVudFN0ZW5jaWxGYWlsICE9PSBzdGVuY2lsRmFpbCB8fCBjdXJyZW50U3RlbmNpbFpGYWlsICE9PSBzdGVuY2lsWkZhaWwgfHwgY3VycmVudFN0ZW5jaWxaUGFzcyAhPT0gc3RlbmNpbFpQYXNzKSB7XG5cdFx0XHRcdFx0Z2wuc3RlbmNpbE9wKHN0ZW5jaWxGYWlsLCBzdGVuY2lsWkZhaWwsIHN0ZW5jaWxaUGFzcyk7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaRmFpbCA9IHN0ZW5jaWxaRmFpbDtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbFpQYXNzID0gc3RlbmNpbFpQYXNzO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0TG9ja2VkOiBmdW5jdGlvbiAobG9jaykge1xuXHRcdFx0XHRsb2NrZWQgPSBsb2NrO1xuXHRcdFx0fSxcblx0XHRcdHNldENsZWFyOiBmdW5jdGlvbiAoc3RlbmNpbCkge1xuXHRcdFx0XHRpZiAoY3VycmVudFN0ZW5jaWxDbGVhciAhPT0gc3RlbmNpbCkge1xuXHRcdFx0XHRcdGdsLmNsZWFyU3RlbmNpbChzdGVuY2lsKTtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbENsZWFyID0gc3RlbmNpbDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbE1hc2sgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmMgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbFJlZiA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbEZhaWwgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbFpGYWlsID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaUGFzcyA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsQ2xlYXIgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gLy9cblxuXG5cdGNvbnN0IGNvbG9yQnVmZmVyID0gbmV3IENvbG9yQnVmZmVyKCk7XG5cdGNvbnN0IGRlcHRoQnVmZmVyID0gbmV3IERlcHRoQnVmZmVyKCk7XG5cdGNvbnN0IHN0ZW5jaWxCdWZmZXIgPSBuZXcgU3RlbmNpbEJ1ZmZlcigpO1xuXHRsZXQgZW5hYmxlZENhcGFiaWxpdGllcyA9IHt9O1xuXHRsZXQgY3VycmVudEJvdW5kRnJhbWVidWZmZXJzID0ge307XG5cdGxldCBjdXJyZW50RHJhd2J1ZmZlcnMgPSBuZXcgV2Vha01hcCgpO1xuXHRsZXQgZGVmYXVsdERyYXdidWZmZXJzID0gW107XG5cdGxldCBjdXJyZW50UHJvZ3JhbSA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gZmFsc2U7XG5cdGxldCBjdXJyZW50QmxlbmRpbmcgPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kRXF1YXRpb24gPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kU3JjID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZERzdCA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZFNyY0FscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IGZhbHNlO1xuXHRsZXQgY3VycmVudEZsaXBTaWRlZCA9IG51bGw7XG5cdGxldCBjdXJyZW50Q3VsbEZhY2UgPSBudWxsO1xuXHRsZXQgY3VycmVudExpbmVXaWR0aCA9IG51bGw7XG5cdGxldCBjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciA9IG51bGw7XG5cdGxldCBjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gbnVsbDtcblx0Y29uc3QgbWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXHRsZXQgbGluZVdpZHRoQXZhaWxhYmxlID0gZmFsc2U7XG5cdGxldCB2ZXJzaW9uID0gMDtcblx0Y29uc3QgZ2xWZXJzaW9uID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlZFUlNJT04pO1xuXG5cdGlmIChnbFZlcnNpb24uaW5kZXhPZignV2ViR0wnKSAhPT0gLTEpIHtcblx0XHR2ZXJzaW9uID0gcGFyc2VGbG9hdCgvXldlYkdMIChcXGQpLy5leGVjKGdsVmVyc2lvbilbMV0pO1xuXHRcdGxpbmVXaWR0aEF2YWlsYWJsZSA9IHZlcnNpb24gPj0gMS4wO1xuXHR9IGVsc2UgaWYgKGdsVmVyc2lvbi5pbmRleE9mKCdPcGVuR0wgRVMnKSAhPT0gLTEpIHtcblx0XHR2ZXJzaW9uID0gcGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXFxkKS8uZXhlYyhnbFZlcnNpb24pWzFdKTtcblx0XHRsaW5lV2lkdGhBdmFpbGFibGUgPSB2ZXJzaW9uID49IDIuMDtcblx0fVxuXG5cdGxldCBjdXJyZW50VGV4dHVyZVNsb3QgPSBudWxsO1xuXHRsZXQgY3VycmVudEJvdW5kVGV4dHVyZXMgPSB7fTtcblx0Y29uc3Qgc2Npc3NvclBhcmFtID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlNDSVNTT1JfQk9YKTtcblx0Y29uc3Qgdmlld3BvcnRQYXJhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5WSUVXUE9SVCk7XG5cdGNvbnN0IGN1cnJlbnRTY2lzc29yID0gbmV3IFZlY3RvcjQoKS5mcm9tQXJyYXkoc2Npc3NvclBhcmFtKTtcblx0Y29uc3QgY3VycmVudFZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKS5mcm9tQXJyYXkodmlld3BvcnRQYXJhbSk7XG5cblx0ZnVuY3Rpb24gY3JlYXRlVGV4dHVyZSh0eXBlLCB0YXJnZXQsIGNvdW50KSB7XG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KDQpOyAvLyA0IGlzIHJlcXVpcmVkIHRvIG1hdGNoIGRlZmF1bHQgdW5wYWNrIGFsaWdubWVudCBvZiA0LlxuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblx0XHRnbC5iaW5kVGV4dHVyZSh0eXBlLCB0ZXh0dXJlKTtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKHR5cGUsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaSh0eXBlLCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdFx0XHRnbC50ZXhJbWFnZTJEKHRhcmdldCArIGksIDAsIGdsLlJHQkEsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cblx0Y29uc3QgZW1wdHlUZXh0dXJlcyA9IHt9O1xuXHRlbXB0eVRleHR1cmVzW2dsLlRFWFRVUkVfMkRdID0gY3JlYXRlVGV4dHVyZShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFXzJELCAxKTtcblx0ZW1wdHlUZXh0dXJlc1tnbC5URVhUVVJFX0NVQkVfTUFQXSA9IGNyZWF0ZVRleHR1cmUoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCA2KTsgLy8gaW5pdFxuXG5cdGNvbG9yQnVmZmVyLnNldENsZWFyKDAsIDAsIDAsIDEpO1xuXHRkZXB0aEJ1ZmZlci5zZXRDbGVhcigxKTtcblx0c3RlbmNpbEJ1ZmZlci5zZXRDbGVhcigwKTtcblx0ZW5hYmxlKGdsLkRFUFRIX1RFU1QpO1xuXHRkZXB0aEJ1ZmZlci5zZXRGdW5jKExlc3NFcXVhbERlcHRoKTtcblx0c2V0RmxpcFNpZGVkKGZhbHNlKTtcblx0c2V0Q3VsbEZhY2UoQ3VsbEZhY2VCYWNrKTtcblx0ZW5hYmxlKGdsLkNVTExfRkFDRSk7XG5cdHNldEJsZW5kaW5nKE5vQmxlbmRpbmcpOyAvL1xuXG5cdGZ1bmN0aW9uIGVuYWJsZShpZCkge1xuXHRcdGlmIChlbmFibGVkQ2FwYWJpbGl0aWVzW2lkXSAhPT0gdHJ1ZSkge1xuXHRcdFx0Z2wuZW5hYmxlKGlkKTtcblx0XHRcdGVuYWJsZWRDYXBhYmlsaXRpZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNhYmxlKGlkKSB7XG5cdFx0aWYgKGVuYWJsZWRDYXBhYmlsaXRpZXNbaWRdICE9PSBmYWxzZSkge1xuXHRcdFx0Z2wuZGlzYWJsZShpZCk7XG5cdFx0XHRlbmFibGVkQ2FwYWJpbGl0aWVzW2lkXSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKSB7XG5cdFx0aWYgKGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1t0YXJnZXRdICE9PSBmcmFtZWJ1ZmZlcikge1xuXHRcdFx0Z2wuYmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZnJhbWVidWZmZXIpO1xuXHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzW3RhcmdldF0gPSBmcmFtZWJ1ZmZlcjtcblxuXHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdC8vIGdsLkRSQVdfRlJBTUVCVUZGRVIgaXMgZXF1aXZhbGVudCB0byBnbC5GUkFNRUJVRkZFUlxuXHRcdFx0XHRpZiAodGFyZ2V0ID09PSBnbC5EUkFXX0ZSQU1FQlVGRkVSKSB7XG5cdFx0XHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzW2dsLkZSQU1FQlVGRkVSXSA9IGZyYW1lYnVmZmVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldCA9PT0gZ2wuRlJBTUVCVUZGRVIpIHtcblx0XHRcdFx0XHRjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnNbZ2wuRFJBV19GUkFNRUJVRkZFUl0gPSBmcmFtZWJ1ZmZlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3QnVmZmVycyhyZW5kZXJUYXJnZXQsIGZyYW1lYnVmZmVyKSB7XG5cdFx0bGV0IGRyYXdCdWZmZXJzID0gZGVmYXVsdERyYXdidWZmZXJzO1xuXHRcdGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldCkge1xuXHRcdFx0ZHJhd0J1ZmZlcnMgPSBjdXJyZW50RHJhd2J1ZmZlcnMuZ2V0KGZyYW1lYnVmZmVyKTtcblxuXHRcdFx0aWYgKGRyYXdCdWZmZXJzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZHJhd0J1ZmZlcnMgPSBbXTtcblx0XHRcdFx0Y3VycmVudERyYXdidWZmZXJzLnNldChmcmFtZWJ1ZmZlciwgZHJhd0J1ZmZlcnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpIHtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0XHRpZiAoZHJhd0J1ZmZlcnMubGVuZ3RoICE9PSB0ZXh0dXJlcy5sZW5ndGggfHwgZHJhd0J1ZmZlcnNbMF0gIT09IGdsLkNPTE9SX0FUVEFDSE1FTlQwKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gdGV4dHVyZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdFx0ZHJhd0J1ZmZlcnNbaV0gPSBnbC5DT0xPUl9BVFRBQ0hNRU5UMCArIGk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZHJhd0J1ZmZlcnMubGVuZ3RoID0gdGV4dHVyZXMubGVuZ3RoO1xuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGRyYXdCdWZmZXJzWzBdICE9PSBnbC5DT0xPUl9BVFRBQ0hNRU5UMCkge1xuXHRcdFx0XHRcdGRyYXdCdWZmZXJzWzBdID0gZ2wuQ09MT1JfQVRUQUNITUVOVDA7XG5cdFx0XHRcdFx0bmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChkcmF3QnVmZmVyc1swXSAhPT0gZ2wuQkFDSykge1xuXHRcdFx0XHRkcmF3QnVmZmVyc1swXSA9IGdsLkJBQ0s7XG5cdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobmVlZHNVcGRhdGUpIHtcblx0XHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHtcblx0XHRcdFx0Z2wuZHJhd0J1ZmZlcnMoZHJhd0J1ZmZlcnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2RyYXdfYnVmZmVycycpLmRyYXdCdWZmZXJzV0VCR0woZHJhd0J1ZmZlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVzZVByb2dyYW0ocHJvZ3JhbSkge1xuXHRcdGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3JhbSkge1xuXHRcdFx0Z2wudXNlUHJvZ3JhbShwcm9ncmFtKTtcblx0XHRcdGN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IGVxdWF0aW9uVG9HTCA9IHtcblx0XHRbQWRkRXF1YXRpb25dOiBnbC5GVU5DX0FERCxcblx0XHRbU3VidHJhY3RFcXVhdGlvbl06IGdsLkZVTkNfU1VCVFJBQ1QsXG5cdFx0W1JldmVyc2VTdWJ0cmFjdEVxdWF0aW9uXTogZ2wuRlVOQ19SRVZFUlNFX1NVQlRSQUNUXG5cdH07XG5cblx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0ZXF1YXRpb25Ub0dMW01pbkVxdWF0aW9uXSA9IGdsLk1JTjtcblx0XHRlcXVhdGlvblRvR0xbTWF4RXF1YXRpb25dID0gZ2wuTUFYO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdFWFRfYmxlbmRfbWlubWF4Jyk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRlcXVhdGlvblRvR0xbTWluRXF1YXRpb25dID0gZXh0ZW5zaW9uLk1JTl9FWFQ7XG5cdFx0XHRlcXVhdGlvblRvR0xbTWF4RXF1YXRpb25dID0gZXh0ZW5zaW9uLk1BWF9FWFQ7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZmFjdG9yVG9HTCA9IHtcblx0XHRbWmVyb0ZhY3Rvcl06IGdsLlpFUk8sXG5cdFx0W09uZUZhY3Rvcl06IGdsLk9ORSxcblx0XHRbU3JjQ29sb3JGYWN0b3JdOiBnbC5TUkNfQ09MT1IsXG5cdFx0W1NyY0FscGhhRmFjdG9yXTogZ2wuU1JDX0FMUEhBLFxuXHRcdFtTcmNBbHBoYVNhdHVyYXRlRmFjdG9yXTogZ2wuU1JDX0FMUEhBX1NBVFVSQVRFLFxuXHRcdFtEc3RDb2xvckZhY3Rvcl06IGdsLkRTVF9DT0xPUixcblx0XHRbRHN0QWxwaGFGYWN0b3JdOiBnbC5EU1RfQUxQSEEsXG5cdFx0W09uZU1pbnVzU3JjQ29sb3JGYWN0b3JdOiBnbC5PTkVfTUlOVVNfU1JDX0NPTE9SLFxuXHRcdFtPbmVNaW51c1NyY0FscGhhRmFjdG9yXTogZ2wuT05FX01JTlVTX1NSQ19BTFBIQSxcblx0XHRbT25lTWludXNEc3RDb2xvckZhY3Rvcl06IGdsLk9ORV9NSU5VU19EU1RfQ09MT1IsXG5cdFx0W09uZU1pbnVzRHN0QWxwaGFGYWN0b3JdOiBnbC5PTkVfTUlOVVNfRFNUX0FMUEhBXG5cdH07XG5cblx0ZnVuY3Rpb24gc2V0QmxlbmRpbmcoYmxlbmRpbmcsIGJsZW5kRXF1YXRpb24sIGJsZW5kU3JjLCBibGVuZERzdCwgYmxlbmRFcXVhdGlvbkFscGhhLCBibGVuZFNyY0FscGhhLCBibGVuZERzdEFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEpIHtcblx0XHRpZiAoYmxlbmRpbmcgPT09IE5vQmxlbmRpbmcpIHtcblx0XHRcdGlmIChjdXJyZW50QmxlbmRpbmdFbmFibGVkID09PSB0cnVlKSB7XG5cdFx0XHRcdGRpc2FibGUoZ2wuQkxFTkQpO1xuXHRcdFx0XHRjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9PT0gZmFsc2UpIHtcblx0XHRcdGVuYWJsZShnbC5CTEVORCk7XG5cdFx0XHRjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmxlbmRpbmcgIT09IEN1c3RvbUJsZW5kaW5nKSB7XG5cdFx0XHRpZiAoYmxlbmRpbmcgIT09IGN1cnJlbnRCbGVuZGluZyB8fCBwcmVtdWx0aXBsaWVkQWxwaGEgIT09IGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSkge1xuXHRcdFx0XHRpZiAoY3VycmVudEJsZW5kRXF1YXRpb24gIT09IEFkZEVxdWF0aW9uIHx8IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgIT09IEFkZEVxdWF0aW9uKSB7XG5cdFx0XHRcdFx0Z2wuYmxlbmRFcXVhdGlvbihnbC5GVU5DX0FERCk7XG5cdFx0XHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBBZGRFcXVhdGlvbjtcblx0XHRcdFx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gQWRkRXF1YXRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJlbXVsdGlwbGllZEFscGhhKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChibGVuZGluZykge1xuXHRcdFx0XHRcdFx0Y2FzZSBOb3JtYWxCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBBZGRpdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmMoZ2wuT05FLCBnbC5PTkUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBTdWJ0cmFjdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5aRVJPLCBnbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCBnbC5aRVJPLCBnbC5PTkUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBNdWx0aXBseUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5aRVJPLCBnbC5TUkNfQ09MT1IsIGdsLlpFUk8sIGdsLlNSQ19BTFBIQSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAnLCBibGVuZGluZyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGJsZW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRjYXNlIE5vcm1hbEJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIEFkZGl0aXZlQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuYyhnbC5TUkNfQUxQSEEsIGdsLk9ORSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFN1YnRyYWN0aXZlQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNfQ09MT1IsIGdsLlpFUk8sIGdsLk9ORSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIE11bHRpcGx5QmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuYyhnbC5aRVJPLCBnbC5TUkNfQ09MT1IpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogJywgYmxlbmRpbmcpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50QmxlbmRTcmMgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmREc3QgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudEJsZW5kaW5nID0gYmxlbmRpbmc7XG5cdFx0XHRcdGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH0gLy8gY3VzdG9tIGJsZW5kaW5nXG5cblxuXHRcdGJsZW5kRXF1YXRpb25BbHBoYSA9IGJsZW5kRXF1YXRpb25BbHBoYSB8fCBibGVuZEVxdWF0aW9uO1xuXHRcdGJsZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhIHx8IGJsZW5kU3JjO1xuXHRcdGJsZW5kRHN0QWxwaGEgPSBibGVuZERzdEFscGhhIHx8IGJsZW5kRHN0O1xuXG5cdFx0aWYgKGJsZW5kRXF1YXRpb24gIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uIHx8IGJsZW5kRXF1YXRpb25BbHBoYSAhPT0gY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSkge1xuXHRcdFx0Z2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGVxdWF0aW9uVG9HTFtibGVuZEVxdWF0aW9uXSwgZXF1YXRpb25Ub0dMW2JsZW5kRXF1YXRpb25BbHBoYV0pO1xuXHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBibGVuZEVxdWF0aW9uO1xuXHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IGJsZW5kRXF1YXRpb25BbHBoYTtcblx0XHR9XG5cblx0XHRpZiAoYmxlbmRTcmMgIT09IGN1cnJlbnRCbGVuZFNyYyB8fCBibGVuZERzdCAhPT0gY3VycmVudEJsZW5kRHN0IHx8IGJsZW5kU3JjQWxwaGEgIT09IGN1cnJlbnRCbGVuZFNyY0FscGhhIHx8IGJsZW5kRHN0QWxwaGEgIT09IGN1cnJlbnRCbGVuZERzdEFscGhhKSB7XG5cdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZShmYWN0b3JUb0dMW2JsZW5kU3JjXSwgZmFjdG9yVG9HTFtibGVuZERzdF0sIGZhY3RvclRvR0xbYmxlbmRTcmNBbHBoYV0sIGZhY3RvclRvR0xbYmxlbmREc3RBbHBoYV0pO1xuXHRcdFx0Y3VycmVudEJsZW5kU3JjID0gYmxlbmRTcmM7XG5cdFx0XHRjdXJyZW50QmxlbmREc3QgPSBibGVuZERzdDtcblx0XHRcdGN1cnJlbnRCbGVuZFNyY0FscGhhID0gYmxlbmRTcmNBbHBoYTtcblx0XHRcdGN1cnJlbnRCbGVuZERzdEFscGhhID0gYmxlbmREc3RBbHBoYTtcblx0XHR9XG5cblx0XHRjdXJyZW50QmxlbmRpbmcgPSBibGVuZGluZztcblx0XHRjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0TWF0ZXJpYWwobWF0ZXJpYWwsIGZyb250RmFjZUNXKSB7XG5cdFx0bWF0ZXJpYWwuc2lkZSA9PT0gRG91YmxlU2lkZSA/IGRpc2FibGUoZ2wuQ1VMTF9GQUNFKSA6IGVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuXHRcdGxldCBmbGlwU2lkZWQgPSBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZTtcblx0XHRpZiAoZnJvbnRGYWNlQ1cpIGZsaXBTaWRlZCA9ICFmbGlwU2lkZWQ7XG5cdFx0c2V0RmxpcFNpZGVkKGZsaXBTaWRlZCk7XG5cdFx0bWF0ZXJpYWwuYmxlbmRpbmcgPT09IE5vcm1hbEJsZW5kaW5nICYmIG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSBmYWxzZSA/IHNldEJsZW5kaW5nKE5vQmxlbmRpbmcpIDogc2V0QmxlbmRpbmcobWF0ZXJpYWwuYmxlbmRpbmcsIG1hdGVyaWFsLmJsZW5kRXF1YXRpb24sIG1hdGVyaWFsLmJsZW5kU3JjLCBtYXRlcmlhbC5ibGVuZERzdCwgbWF0ZXJpYWwuYmxlbmRFcXVhdGlvbkFscGhhLCBtYXRlcmlhbC5ibGVuZFNyY0FscGhhLCBtYXRlcmlhbC5ibGVuZERzdEFscGhhLCBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuXHRcdGRlcHRoQnVmZmVyLnNldEZ1bmMobWF0ZXJpYWwuZGVwdGhGdW5jKTtcblx0XHRkZXB0aEJ1ZmZlci5zZXRUZXN0KG1hdGVyaWFsLmRlcHRoVGVzdCk7XG5cdFx0ZGVwdGhCdWZmZXIuc2V0TWFzayhtYXRlcmlhbC5kZXB0aFdyaXRlKTtcblx0XHRjb2xvckJ1ZmZlci5zZXRNYXNrKG1hdGVyaWFsLmNvbG9yV3JpdGUpO1xuXHRcdGNvbnN0IHN0ZW5jaWxXcml0ZSA9IG1hdGVyaWFsLnN0ZW5jaWxXcml0ZTtcblx0XHRzdGVuY2lsQnVmZmVyLnNldFRlc3Qoc3RlbmNpbFdyaXRlKTtcblxuXHRcdGlmIChzdGVuY2lsV3JpdGUpIHtcblx0XHRcdHN0ZW5jaWxCdWZmZXIuc2V0TWFzayhtYXRlcmlhbC5zdGVuY2lsV3JpdGVNYXNrKTtcblx0XHRcdHN0ZW5jaWxCdWZmZXIuc2V0RnVuYyhtYXRlcmlhbC5zdGVuY2lsRnVuYywgbWF0ZXJpYWwuc3RlbmNpbFJlZiwgbWF0ZXJpYWwuc3RlbmNpbEZ1bmNNYXNrKTtcblx0XHRcdHN0ZW5jaWxCdWZmZXIuc2V0T3AobWF0ZXJpYWwuc3RlbmNpbEZhaWwsIG1hdGVyaWFsLnN0ZW5jaWxaRmFpbCwgbWF0ZXJpYWwuc3RlbmNpbFpQYXNzKTtcblx0XHR9XG5cblx0XHRzZXRQb2x5Z29uT2Zmc2V0KG1hdGVyaWFsLnBvbHlnb25PZmZzZXQsIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRGYWN0b3IsIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRVbml0cyk7XG5cdFx0bWF0ZXJpYWwuYWxwaGFUb0NvdmVyYWdlID09PSB0cnVlID8gZW5hYmxlKGdsLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSkgOiBkaXNhYmxlKGdsLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSk7XG5cdH0gLy9cblxuXG5cdGZ1bmN0aW9uIHNldEZsaXBTaWRlZChmbGlwU2lkZWQpIHtcblx0XHRpZiAoY3VycmVudEZsaXBTaWRlZCAhPT0gZmxpcFNpZGVkKSB7XG5cdFx0XHRpZiAoZmxpcFNpZGVkKSB7XG5cdFx0XHRcdGdsLmZyb250RmFjZShnbC5DVyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnbC5mcm9udEZhY2UoZ2wuQ0NXKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudEZsaXBTaWRlZCA9IGZsaXBTaWRlZDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRDdWxsRmFjZShjdWxsRmFjZSkge1xuXHRcdGlmIChjdWxsRmFjZSAhPT0gQ3VsbEZhY2VOb25lKSB7XG5cdFx0XHRlbmFibGUoZ2wuQ1VMTF9GQUNFKTtcblxuXHRcdFx0aWYgKGN1bGxGYWNlICE9PSBjdXJyZW50Q3VsbEZhY2UpIHtcblx0XHRcdFx0aWYgKGN1bGxGYWNlID09PSBDdWxsRmFjZUJhY2spIHtcblx0XHRcdFx0XHRnbC5jdWxsRmFjZShnbC5CQUNLKTtcblx0XHRcdFx0fSBlbHNlIGlmIChjdWxsRmFjZSA9PT0gQ3VsbEZhY2VGcm9udCkge1xuXHRcdFx0XHRcdGdsLmN1bGxGYWNlKGdsLkZST05UKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRnbC5jdWxsRmFjZShnbC5GUk9OVF9BTkRfQkFDSyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRDdWxsRmFjZSA9IGN1bGxGYWNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0TGluZVdpZHRoKHdpZHRoKSB7XG5cdFx0aWYgKHdpZHRoICE9PSBjdXJyZW50TGluZVdpZHRoKSB7XG5cdFx0XHRpZiAobGluZVdpZHRoQXZhaWxhYmxlKSBnbC5saW5lV2lkdGgod2lkdGgpO1xuXHRcdFx0Y3VycmVudExpbmVXaWR0aCA9IHdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFBvbHlnb25PZmZzZXQocG9seWdvbk9mZnNldCwgZmFjdG9yLCB1bml0cykge1xuXHRcdGlmIChwb2x5Z29uT2Zmc2V0KSB7XG5cdFx0XHRlbmFibGUoZ2wuUE9MWUdPTl9PRkZTRVRfRklMTCk7XG5cblx0XHRcdGlmIChjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciAhPT0gZmFjdG9yIHx8IGN1cnJlbnRQb2x5Z29uT2Zmc2V0VW5pdHMgIT09IHVuaXRzKSB7XG5cdFx0XHRcdGdsLnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7XG5cdFx0XHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yO1xuXHRcdFx0XHRjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGUoZ2wuUE9MWUdPTl9PRkZTRVRfRklMTCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0U2Npc3NvclRlc3Qoc2Npc3NvclRlc3QpIHtcblx0XHRpZiAoc2Npc3NvclRlc3QpIHtcblx0XHRcdGVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG5cdFx0fVxuXHR9IC8vIHRleHR1cmVcblxuXG5cdGZ1bmN0aW9uIGFjdGl2ZVRleHR1cmUod2ViZ2xTbG90KSB7XG5cdFx0aWYgKHdlYmdsU2xvdCA9PT0gdW5kZWZpbmVkKSB3ZWJnbFNsb3QgPSBnbC5URVhUVVJFMCArIG1heFRleHR1cmVzIC0gMTtcblxuXHRcdGlmIChjdXJyZW50VGV4dHVyZVNsb3QgIT09IHdlYmdsU2xvdCkge1xuXHRcdFx0Z2wuYWN0aXZlVGV4dHVyZSh3ZWJnbFNsb3QpO1xuXHRcdFx0Y3VycmVudFRleHR1cmVTbG90ID0gd2ViZ2xTbG90O1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmRUZXh0dXJlKHdlYmdsVHlwZSwgd2ViZ2xUZXh0dXJlKSB7XG5cdFx0aWYgKGN1cnJlbnRUZXh0dXJlU2xvdCA9PT0gbnVsbCkge1xuXHRcdFx0YWN0aXZlVGV4dHVyZSgpO1xuXHRcdH1cblxuXHRcdGxldCBib3VuZFRleHR1cmUgPSBjdXJyZW50Qm91bmRUZXh0dXJlc1tjdXJyZW50VGV4dHVyZVNsb3RdO1xuXG5cdFx0aWYgKGJvdW5kVGV4dHVyZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRib3VuZFRleHR1cmUgPSB7XG5cdFx0XHRcdHR5cGU6IHVuZGVmaW5lZCxcblx0XHRcdFx0dGV4dHVyZTogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0Y3VycmVudEJvdW5kVGV4dHVyZXNbY3VycmVudFRleHR1cmVTbG90XSA9IGJvdW5kVGV4dHVyZTtcblx0XHR9XG5cblx0XHRpZiAoYm91bmRUZXh0dXJlLnR5cGUgIT09IHdlYmdsVHlwZSB8fCBib3VuZFRleHR1cmUudGV4dHVyZSAhPT0gd2ViZ2xUZXh0dXJlKSB7XG5cdFx0XHRnbC5iaW5kVGV4dHVyZSh3ZWJnbFR5cGUsIHdlYmdsVGV4dHVyZSB8fCBlbXB0eVRleHR1cmVzW3dlYmdsVHlwZV0pO1xuXHRcdFx0Ym91bmRUZXh0dXJlLnR5cGUgPSB3ZWJnbFR5cGU7XG5cdFx0XHRib3VuZFRleHR1cmUudGV4dHVyZSA9IHdlYmdsVGV4dHVyZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1bmJpbmRUZXh0dXJlKCkge1xuXHRcdGNvbnN0IGJvdW5kVGV4dHVyZSA9IGN1cnJlbnRCb3VuZFRleHR1cmVzW2N1cnJlbnRUZXh0dXJlU2xvdF07XG5cblx0XHRpZiAoYm91bmRUZXh0dXJlICE9PSB1bmRlZmluZWQgJiYgYm91bmRUZXh0dXJlLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Z2wuYmluZFRleHR1cmUoYm91bmRUZXh0dXJlLnR5cGUsIG51bGwpO1xuXHRcdFx0Ym91bmRUZXh0dXJlLnR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRib3VuZFRleHR1cmUudGV4dHVyZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjb21wcmVzc2VkVGV4SW1hZ2UyRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZ2wsIGFyZ3VtZW50cyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN1YkltYWdlMkQoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdsLnRleFN1YkltYWdlMkQuYXBwbHkoZ2wsIGFyZ3VtZW50cyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN1YkltYWdlM0QoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdsLnRleFN1YkltYWdlM0QuYXBwbHkoZ2wsIGFyZ3VtZW50cyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShnbCwgYXJndW1lbnRzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4U3RvcmFnZTJEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC50ZXhTdG9yYWdlMkQuYXBwbHkoZ2wsIGFyZ3VtZW50cyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN0b3JhZ2UzRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wudGV4U3RvcmFnZTNELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhJbWFnZTJEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC50ZXhJbWFnZTJELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhJbWFnZTNEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC50ZXhJbWFnZTNELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH0gLy9cblxuXG5cdGZ1bmN0aW9uIHNjaXNzb3Ioc2Npc3Nvcikge1xuXHRcdGlmIChjdXJyZW50U2Npc3Nvci5lcXVhbHMoc2Npc3NvcikgPT09IGZhbHNlKSB7XG5cdFx0XHRnbC5zY2lzc29yKHNjaXNzb3IueCwgc2Npc3Nvci55LCBzY2lzc29yLnosIHNjaXNzb3Iudyk7XG5cdFx0XHRjdXJyZW50U2Npc3Nvci5jb3B5KHNjaXNzb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHZpZXdwb3J0KHZpZXdwb3J0KSB7XG5cdFx0aWYgKGN1cnJlbnRWaWV3cG9ydC5lcXVhbHModmlld3BvcnQpID09PSBmYWxzZSkge1xuXHRcdFx0Z2wudmlld3BvcnQodmlld3BvcnQueCwgdmlld3BvcnQueSwgdmlld3BvcnQueiwgdmlld3BvcnQudyk7XG5cdFx0XHRjdXJyZW50Vmlld3BvcnQuY29weSh2aWV3cG9ydCk7XG5cdFx0fVxuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiByZXNldCgpIHtcblx0XHQvLyByZXNldCBzdGF0ZVxuXHRcdGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xuXHRcdGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcblx0XHRnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xuXHRcdGdsLmRpc2FibGUoZ2wuUE9MWUdPTl9PRkZTRVRfRklMTCk7XG5cdFx0Z2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuXHRcdGdsLmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTtcblx0XHRnbC5kaXNhYmxlKGdsLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSk7XG5cdFx0Z2wuYmxlbmRFcXVhdGlvbihnbC5GVU5DX0FERCk7XG5cdFx0Z2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuWkVSTyk7XG5cdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuT05FLCBnbC5aRVJPLCBnbC5PTkUsIGdsLlpFUk8pO1xuXHRcdGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcblx0XHRnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xuXHRcdGdsLmRlcHRoTWFzayh0cnVlKTtcblx0XHRnbC5kZXB0aEZ1bmMoZ2wuTEVTUyk7XG5cdFx0Z2wuY2xlYXJEZXB0aCgxKTtcblx0XHRnbC5zdGVuY2lsTWFzaygweGZmZmZmZmZmKTtcblx0XHRnbC5zdGVuY2lsRnVuYyhnbC5BTFdBWVMsIDAsIDB4ZmZmZmZmZmYpO1xuXHRcdGdsLnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQKTtcblx0XHRnbC5jbGVhclN0ZW5jaWwoMCk7XG5cdFx0Z2wuY3VsbEZhY2UoZ2wuQkFDSyk7XG5cdFx0Z2wuZnJvbnRGYWNlKGdsLkNDVyk7XG5cdFx0Z2wucG9seWdvbk9mZnNldCgwLCAwKTtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblx0XHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG5cdFx0aWYgKGlzV2ViR0wyID09PSB0cnVlKSB7XG5cdFx0XHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRFJBV19GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdFx0XHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuUkVBRF9GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdFx0fVxuXG5cdFx0Z2wudXNlUHJvZ3JhbShudWxsKTtcblx0XHRnbC5saW5lV2lkdGgoMSk7XG5cdFx0Z2wuc2Npc3NvcigwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpO1xuXHRcdGdsLnZpZXdwb3J0KDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7IC8vIHJlc2V0IGludGVybmFsc1xuXG5cdFx0ZW5hYmxlZENhcGFiaWxpdGllcyA9IHt9O1xuXHRcdGN1cnJlbnRUZXh0dXJlU2xvdCA9IG51bGw7XG5cdFx0Y3VycmVudEJvdW5kVGV4dHVyZXMgPSB7fTtcblx0XHRjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnMgPSB7fTtcblx0XHRjdXJyZW50RHJhd2J1ZmZlcnMgPSBuZXcgV2Vha01hcCgpO1xuXHRcdGRlZmF1bHREcmF3YnVmZmVycyA9IFtdO1xuXHRcdGN1cnJlbnRQcm9ncmFtID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gZmFsc2U7XG5cdFx0Y3VycmVudEJsZW5kaW5nID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbiA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kU3JjID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmREc3QgPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZFNyY0FscGhhID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7XG5cdFx0Y3VycmVudFByZW11bHRpcGxlZEFscGhhID0gZmFsc2U7XG5cdFx0Y3VycmVudEZsaXBTaWRlZCA9IG51bGw7XG5cdFx0Y3VycmVudEN1bGxGYWNlID0gbnVsbDtcblx0XHRjdXJyZW50TGluZVdpZHRoID0gbnVsbDtcblx0XHRjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciA9IG51bGw7XG5cdFx0Y3VycmVudFBvbHlnb25PZmZzZXRVbml0cyA9IG51bGw7XG5cdFx0Y3VycmVudFNjaXNzb3Iuc2V0KDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7XG5cdFx0Y3VycmVudFZpZXdwb3J0LnNldCgwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpO1xuXHRcdGNvbG9yQnVmZmVyLnJlc2V0KCk7XG5cdFx0ZGVwdGhCdWZmZXIucmVzZXQoKTtcblx0XHRzdGVuY2lsQnVmZmVyLnJlc2V0KCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGJ1ZmZlcnM6IHtcblx0XHRcdGNvbG9yOiBjb2xvckJ1ZmZlcixcblx0XHRcdGRlcHRoOiBkZXB0aEJ1ZmZlcixcblx0XHRcdHN0ZW5jaWw6IHN0ZW5jaWxCdWZmZXJcblx0XHR9LFxuXHRcdGVuYWJsZTogZW5hYmxlLFxuXHRcdGRpc2FibGU6IGRpc2FibGUsXG5cdFx0YmluZEZyYW1lYnVmZmVyOiBiaW5kRnJhbWVidWZmZXIsXG5cdFx0ZHJhd0J1ZmZlcnM6IGRyYXdCdWZmZXJzLFxuXHRcdHVzZVByb2dyYW06IHVzZVByb2dyYW0sXG5cdFx0c2V0QmxlbmRpbmc6IHNldEJsZW5kaW5nLFxuXHRcdHNldE1hdGVyaWFsOiBzZXRNYXRlcmlhbCxcblx0XHRzZXRGbGlwU2lkZWQ6IHNldEZsaXBTaWRlZCxcblx0XHRzZXRDdWxsRmFjZTogc2V0Q3VsbEZhY2UsXG5cdFx0c2V0TGluZVdpZHRoOiBzZXRMaW5lV2lkdGgsXG5cdFx0c2V0UG9seWdvbk9mZnNldDogc2V0UG9seWdvbk9mZnNldCxcblx0XHRzZXRTY2lzc29yVGVzdDogc2V0U2Npc3NvclRlc3QsXG5cdFx0YWN0aXZlVGV4dHVyZTogYWN0aXZlVGV4dHVyZSxcblx0XHRiaW5kVGV4dHVyZTogYmluZFRleHR1cmUsXG5cdFx0dW5iaW5kVGV4dHVyZTogdW5iaW5kVGV4dHVyZSxcblx0XHRjb21wcmVzc2VkVGV4SW1hZ2UyRDogY29tcHJlc3NlZFRleEltYWdlMkQsXG5cdFx0dGV4SW1hZ2UyRDogdGV4SW1hZ2UyRCxcblx0XHR0ZXhJbWFnZTNEOiB0ZXhJbWFnZTNELFxuXHRcdHRleFN0b3JhZ2UyRDogdGV4U3RvcmFnZTJELFxuXHRcdHRleFN0b3JhZ2UzRDogdGV4U3RvcmFnZTNELFxuXHRcdHRleFN1YkltYWdlMkQ6IHRleFN1YkltYWdlMkQsXG5cdFx0dGV4U3ViSW1hZ2UzRDogdGV4U3ViSW1hZ2UzRCxcblx0XHRjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDogY29tcHJlc3NlZFRleFN1YkltYWdlMkQsXG5cdFx0c2Npc3Nvcjogc2Npc3Nvcixcblx0XHR2aWV3cG9ydDogdmlld3BvcnQsXG5cdFx0cmVzZXQ6IHJlc2V0XG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMVGV4dHVyZXMoX2dsLCBleHRlbnNpb25zLCBzdGF0ZSwgcHJvcGVydGllcywgY2FwYWJpbGl0aWVzLCB1dGlscywgaW5mbykge1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblx0Y29uc3QgbWF4VGV4dHVyZXMgPSBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZXM7XG5cdGNvbnN0IG1heEN1YmVtYXBTaXplID0gY2FwYWJpbGl0aWVzLm1heEN1YmVtYXBTaXplO1xuXHRjb25zdCBtYXhUZXh0dXJlU2l6ZSA9IGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZTtcblx0Y29uc3QgbWF4U2FtcGxlcyA9IGNhcGFiaWxpdGllcy5tYXhTYW1wbGVzO1xuXHRjb25zdCBoYXNNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSBleHRlbnNpb25zLmhhcygnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyk7XG5cdGNvbnN0IE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbiA9IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA/IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUnKSA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBfdmlkZW9UZXh0dXJlcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0bGV0IF9jYW52YXM7IC8vIGNvcmRvdmEgaU9TIChhcyBvZiA1LjApIHN0aWxsIHVzZXMgVUlXZWJWaWV3LCB3aGljaCBwcm92aWRlcyBPZmZzY3JlZW5DYW52YXMsXG5cdC8vIGFsc28gT2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiKSwgYnV0IG5vdCBPZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpIVxuXHQvLyBTb21lIGltcGxlbWVudGF0aW9ucyBtYXkgb25seSBpbXBsZW1lbnQgT2Zmc2NyZWVuQ2FudmFzIHBhcnRpYWxseSAoZS5nLiBsYWNraW5nIDJkKS5cblxuXG5cdGxldCB1c2VPZmZzY3JlZW5DYW52YXMgPSBmYWxzZTtcblxuXHR0cnkge1xuXHRcdHVzZU9mZnNjcmVlbkNhbnZhcyA9IHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnICYmIG5ldyBPZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSAhPT0gbnVsbDtcblx0fSBjYXRjaCAoZXJyKSB7Ly8gSWdub3JlIGFueSBlcnJvcnNcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0Ly8gVXNlIE9mZnNjcmVlbkNhbnZhcyB3aGVuIGF2YWlsYWJsZS4gU3BlY2lhbGx5IG5lZWRlZCBpbiB3ZWIgd29ya2Vyc1xuXHRcdHJldHVybiB1c2VPZmZzY3JlZW5DYW52YXMgPyBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpIDogY3JlYXRlRWxlbWVudE5TKCdjYW52YXMnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2l6ZUltYWdlKGltYWdlLCBuZWVkc1Bvd2VyT2ZUd28sIG5lZWRzTmV3Q2FudmFzLCBtYXhTaXplKSB7XG5cdFx0bGV0IHNjYWxlID0gMTsgLy8gaGFuZGxlIGNhc2UgaWYgdGV4dHVyZSBleGNlZWRzIG1heCBzaXplXG5cblx0XHRpZiAoaW1hZ2Uud2lkdGggPiBtYXhTaXplIHx8IGltYWdlLmhlaWdodCA+IG1heFNpemUpIHtcblx0XHRcdHNjYWxlID0gbWF4U2l6ZSAvIE1hdGgubWF4KGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdH0gLy8gb25seSBwZXJmb3JtIHJlc2l6ZSBpZiBuZWNlc3NhcnlcblxuXG5cdFx0aWYgKHNjYWxlIDwgMSB8fCBuZWVkc1Bvd2VyT2ZUd28gPT09IHRydWUpIHtcblx0XHRcdC8vIG9ubHkgcGVyZm9ybSByZXNpemUgZm9yIGNlcnRhaW4gaW1hZ2UgdHlwZXNcblx0XHRcdGlmICh0eXBlb2YgSFRNTEltYWdlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCB0eXBlb2YgSW1hZ2VCaXRtYXAgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApIHtcblx0XHRcdFx0Y29uc3QgZmxvb3IgPSBuZWVkc1Bvd2VyT2ZUd28gPyBmbG9vclBvd2VyT2ZUd28gOiBNYXRoLmZsb29yO1xuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGZsb29yKHNjYWxlICogaW1hZ2Uud2lkdGgpO1xuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSBmbG9vcihzY2FsZSAqIGltYWdlLmhlaWdodCk7XG5cdFx0XHRcdGlmIChfY2FudmFzID09PSB1bmRlZmluZWQpIF9jYW52YXMgPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7IC8vIGN1YmUgdGV4dHVyZXMgY2FuJ3QgcmV1c2UgdGhlIHNhbWUgY2FudmFzXG5cblx0XHRcdFx0Y29uc3QgY2FudmFzID0gbmVlZHNOZXdDYW52YXMgPyBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkgOiBfY2FudmFzO1xuXHRcdFx0XHRjYW52YXMud2lkdGggPSB3aWR0aDtcblx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdFx0XHRjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCArICcpIHRvICgnICsgd2lkdGggKyAneCcgKyBoZWlnaHQgKyAnKS4nKTtcblx0XHRcdFx0cmV0dXJuIGNhbnZhcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgnZGF0YScgaW4gaW1hZ2UpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCArICcpLicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGltYWdlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbWFnZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzUG93ZXJPZlR3byQxKGltYWdlKSB7XG5cdFx0cmV0dXJuIGlzUG93ZXJPZlR3byhpbWFnZS53aWR0aCkgJiYgaXNQb3dlck9mVHdvKGltYWdlLmhlaWdodCk7XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXh0dXJlTmVlZHNQb3dlck9mVHdvKHRleHR1cmUpIHtcblx0XHRpZiAoaXNXZWJHTDIpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdGV4dHVyZS53cmFwUyAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8fCB0ZXh0dXJlLndyYXBUICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFyZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXI7XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHModGV4dHVyZSwgc3VwcG9ydHNNaXBzKSB7XG5cdFx0cmV0dXJuIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzICYmIHN1cHBvcnRzTWlwcyAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KSB7XG5cdFx0X2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdE5hbWUsIGdsRm9ybWF0LCBnbFR5cGUsIGVuY29kaW5nLCBpc1ZpZGVvVGV4dHVyZSA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzV2ViR0wyID09PSBmYWxzZSkgcmV0dXJuIGdsRm9ybWF0O1xuXG5cdFx0aWYgKGludGVybmFsRm9ybWF0TmFtZSAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKF9nbFtpbnRlcm5hbEZvcm1hdE5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiBfZ2xbaW50ZXJuYWxGb3JtYXROYW1lXTtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCBcXCcnICsgaW50ZXJuYWxGb3JtYXROYW1lICsgJ1xcJycpO1xuXHRcdH1cblxuXHRcdGxldCBpbnRlcm5hbEZvcm1hdCA9IGdsRm9ybWF0O1xuXG5cdFx0aWYgKGdsRm9ybWF0ID09PSBfZ2wuUkVEKSB7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuRkxPQVQpIGludGVybmFsRm9ybWF0ID0gX2dsLlIzMkY7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuSEFMRl9GTE9BVCkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUjE2Rjtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5VTlNJR05FRF9CWVRFKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SODtcblx0XHR9XG5cblx0XHRpZiAoZ2xGb3JtYXQgPT09IF9nbC5SRykge1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLkZMT0FUKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SRzMyRjtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5IQUxGX0ZMT0FUKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SRzE2Rjtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5VTlNJR05FRF9CWVRFKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SRzg7XG5cdFx0fVxuXG5cdFx0aWYgKGdsRm9ybWF0ID09PSBfZ2wuUkdCQSkge1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLkZMT0FUKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SR0JBMzJGO1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLkhBTEZfRkxPQVQpIGludGVybmFsRm9ybWF0ID0gX2dsLlJHQkExNkY7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuVU5TSUdORURfQllURSkgaW50ZXJuYWxGb3JtYXQgPSBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICYmIGlzVmlkZW9UZXh0dXJlID09PSBmYWxzZSA/IF9nbC5TUkdCOF9BTFBIQTggOiBfZ2wuUkdCQTg7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNCkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkdCQTQ7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMSkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkdCNV9BMTtcblx0XHR9XG5cblx0XHRpZiAoaW50ZXJuYWxGb3JtYXQgPT09IF9nbC5SMTZGIHx8IGludGVybmFsRm9ybWF0ID09PSBfZ2wuUjMyRiB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gX2dsLlJHMTZGIHx8IGludGVybmFsRm9ybWF0ID09PSBfZ2wuUkczMkYgfHwgaW50ZXJuYWxGb3JtYXQgPT09IF9nbC5SR0JBMTZGIHx8IGludGVybmFsRm9ybWF0ID09PSBfZ2wuUkdCQTMyRikge1xuXHRcdFx0ZXh0ZW5zaW9ucy5nZXQoJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaW50ZXJuYWxGb3JtYXQ7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRNaXBMZXZlbHModGV4dHVyZSwgaW1hZ2UsIHN1cHBvcnRzTWlwcykge1xuXHRcdGlmICh0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHModGV4dHVyZSwgc3VwcG9ydHNNaXBzKSA9PT0gdHJ1ZSB8fCB0ZXh0dXJlLmlzRnJhbWVidWZmZXJUZXh0dXJlICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFyZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXIpIHtcblx0XHRcdHJldHVybiBNYXRoLmxvZzIoTWF0aC5tYXgoaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCkpICsgMTtcblx0XHR9IGVsc2UgaWYgKHRleHR1cmUubWlwbWFwcyAhPT0gdW5kZWZpbmVkICYmIHRleHR1cmUubWlwbWFwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyB1c2VyLWRlZmluZWQgbWlwbWFwc1xuXHRcdFx0cmV0dXJuIHRleHR1cmUubWlwbWFwcy5sZW5ndGg7XG5cdFx0fSBlbHNlIGlmICh0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgJiYgQXJyYXkuaXNBcnJheSh0ZXh0dXJlLmltYWdlKSkge1xuXHRcdFx0cmV0dXJuIGltYWdlLm1pcG1hcHMubGVuZ3RoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB0ZXh0dXJlIHdpdGhvdXQgbWlwbWFwcyAob25seSBiYXNlIGxldmVsKVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9IC8vIEZhbGxiYWNrIGZpbHRlcnMgZm9yIG5vbi1wb3dlci1vZi0yIHRleHR1cmVzXG5cblxuXHRmdW5jdGlvbiBmaWx0ZXJGYWxsYmFjayhmKSB7XG5cdFx0aWYgKGYgPT09IE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcikge1xuXHRcdFx0cmV0dXJuIF9nbC5ORUFSRVNUO1xuXHRcdH1cblxuXHRcdHJldHVybiBfZ2wuTElORUFSO1xuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKGV2ZW50KSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IGV2ZW50LnRhcmdldDtcblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlKTtcblx0XHRkZWFsbG9jYXRlVGV4dHVyZSh0ZXh0dXJlKTtcblxuXHRcdGlmICh0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlKSB7XG5cdFx0XHRfdmlkZW9UZXh0dXJlcy5kZWxldGUodGV4dHVyZSk7XG5cdFx0fVxuXG5cdFx0aW5mby5tZW1vcnkudGV4dHVyZXMtLTtcblx0fVxuXG5cdGZ1bmN0aW9uIG9uUmVuZGVyVGFyZ2V0RGlzcG9zZShldmVudCkge1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRyZW5kZXJUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uUmVuZGVyVGFyZ2V0RGlzcG9zZSk7XG5cdFx0ZGVhbGxvY2F0ZVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBkZWFsbG9jYXRlVGV4dHVyZSh0ZXh0dXJlKSB7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKTtcblx0XHRpZiAodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0X2dsLmRlbGV0ZVRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXG5cdFx0cHJvcGVydGllcy5yZW1vdmUodGV4dHVyZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWFsbG9jYXRlUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KTtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXHRcdGlmICghcmVuZGVyVGFyZ2V0KSByZXR1cm47XG5cblx0XHRpZiAodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2dsLmRlbGV0ZVRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXG5cdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcy0tO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlKSB7XG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKTtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0XHRfZ2wuZGVsZXRlRnJhbWVidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbaV0pO1xuXG5cdFx0XHRcdGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcikgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9nbC5kZWxldGVGcmFtZWJ1ZmZlcihyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7XG5cblx0XHRcdGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcikgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7XG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpIF9nbC5kZWxldGVGcmFtZWJ1ZmZlcihyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcik7XG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO1xuXHRcdFx0aWYgKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyKTtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmVbaV0pO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSkge1xuXHRcdFx0XHRcdF9nbC5kZWxldGVUZXh0dXJlKGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblxuXHRcdFx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzLS07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwcm9wZXJ0aWVzLnJlbW92ZSh0ZXh0dXJlW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwcm9wZXJ0aWVzLnJlbW92ZSh0ZXh0dXJlKTtcblx0XHRwcm9wZXJ0aWVzLnJlbW92ZShyZW5kZXJUYXJnZXQpO1xuXHR9IC8vXG5cblxuXHRsZXQgdGV4dHVyZVVuaXRzID0gMDtcblxuXHRmdW5jdGlvbiByZXNldFRleHR1cmVVbml0cygpIHtcblx0XHR0ZXh0dXJlVW5pdHMgPSAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWxsb2NhdGVUZXh0dXJlVW5pdCgpIHtcblx0XHRjb25zdCB0ZXh0dXJlVW5pdCA9IHRleHR1cmVVbml0cztcblxuXHRcdGlmICh0ZXh0dXJlVW5pdCA+PSBtYXhUZXh0dXJlcykge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICcgKyB0ZXh0dXJlVW5pdCArICcgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICcgKyBtYXhUZXh0dXJlcyk7XG5cdFx0fVxuXG5cdFx0dGV4dHVyZVVuaXRzICs9IDE7XG5cdFx0cmV0dXJuIHRleHR1cmVVbml0O1xuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlMkQodGV4dHVyZSwgc2xvdCkge1xuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQodGV4dHVyZSk7XG5cdFx0aWYgKHRleHR1cmUuaXNWaWRlb1RleHR1cmUpIHVwZGF0ZVZpZGVvVGV4dHVyZSh0ZXh0dXJlKTtcblxuXHRcdGlmICh0ZXh0dXJlLnZlcnNpb24gPiAwICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uKSB7XG5cdFx0XHRjb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRcdGlmIChpbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkJyk7XG5cdFx0XHR9IGVsc2UgaWYgKGltYWdlLmNvbXBsZXRlID09PSBmYWxzZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVwbG9hZFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZShfZ2wuVEVYVFVSRTAgKyBzbG90KTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTJEQXJyYXkodGV4dHVyZSwgc2xvdCkge1xuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQodGV4dHVyZSk7XG5cblx0XHRpZiAodGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbikge1xuXHRcdFx0dXBsb2FkVGV4dHVyZSh0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZShfZ2wuVEVYVFVSRTAgKyBzbG90KTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRF9BUlJBWSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTNEKHRleHR1cmUsIHNsb3QpIHtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXG5cdFx0aWYgKHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24pIHtcblx0XHRcdHVwbG9hZFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoX2dsLlRFWFRVUkUwICsgc2xvdCk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfM0QsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmVDdWJlKHRleHR1cmUsIHNsb3QpIHtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXG5cdFx0aWYgKHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24pIHtcblx0XHRcdHVwbG9hZEN1YmVUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKF9nbC5URVhUVVJFMCArIHNsb3QpO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cdH1cblxuXHRjb25zdCB3cmFwcGluZ1RvR0wgPSB7XG5cdFx0W1JlcGVhdFdyYXBwaW5nXTogX2dsLlJFUEVBVCxcblx0XHRbQ2xhbXBUb0VkZ2VXcmFwcGluZ106IF9nbC5DTEFNUF9UT19FREdFLFxuXHRcdFtNaXJyb3JlZFJlcGVhdFdyYXBwaW5nXTogX2dsLk1JUlJPUkVEX1JFUEVBVFxuXHR9O1xuXHRjb25zdCBmaWx0ZXJUb0dMID0ge1xuXHRcdFtOZWFyZXN0RmlsdGVyXTogX2dsLk5FQVJFU1QsXG5cdFx0W05lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyXTogX2dsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsXG5cdFx0W05lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXJdOiBfZ2wuTkVBUkVTVF9NSVBNQVBfTElORUFSLFxuXHRcdFtMaW5lYXJGaWx0ZXJdOiBfZ2wuTElORUFSLFxuXHRcdFtMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyXTogX2dsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCxcblx0XHRbTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyXTogX2dsLkxJTkVBUl9NSVBNQVBfTElORUFSXG5cdH07XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZVBhcmFtZXRlcnModGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcykge1xuXHRcdGlmIChzdXBwb3J0c01pcHMpIHtcblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1MsIHdyYXBwaW5nVG9HTFt0ZXh0dXJlLndyYXBTXSk7XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXBwaW5nVG9HTFt0ZXh0dXJlLndyYXBUXSk7XG5cblx0XHRcdGlmICh0ZXh0dXJlVHlwZSA9PT0gX2dsLlRFWFRVUkVfM0QgfHwgdGV4dHVyZVR5cGUgPT09IF9nbC5URVhUVVJFXzJEX0FSUkFZKSB7XG5cdFx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1IsIHdyYXBwaW5nVG9HTFt0ZXh0dXJlLndyYXBSXSk7XG5cdFx0XHR9XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJUb0dMW3RleHR1cmUubWFnRmlsdGVyXSk7XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXJUb0dMW3RleHR1cmUubWluRmlsdGVyXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1MsIF9nbC5DTEFNUF9UT19FREdFKTtcblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX1dSQVBfVCwgX2dsLkNMQU1QX1RPX0VER0UpO1xuXG5cdFx0XHRpZiAodGV4dHVyZVR5cGUgPT09IF9nbC5URVhUVVJFXzNEIHx8IHRleHR1cmVUeXBlID09PSBfZ2wuVEVYVFVSRV8yRF9BUlJBWSkge1xuXHRcdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9SLCBfZ2wuQ0xBTVBfVE9fRURHRSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0dXJlLndyYXBTICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLicpO1xuXHRcdFx0fVxuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyRmFsbGJhY2sodGV4dHVyZS5tYWdGaWx0ZXIpKTtcblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIGZpbHRlckZhbGxiYWNrKHRleHR1cmUubWluRmlsdGVyKSk7XG5cblx0XHRcdGlmICh0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChleHRlbnNpb25zLmhhcygnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcblx0XHRcdGlmICh0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSAmJiBleHRlbnNpb25zLmhhcygnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJykgPT09IGZhbHNlKSByZXR1cm47IC8vIHZlcmlmeSBleHRlbnNpb24gZm9yIFdlYkdMIDEgYW5kIFdlYkdMIDJcblxuXHRcdFx0aWYgKGlzV2ViR0wyID09PSBmYWxzZSAmJiB0ZXh0dXJlLnR5cGUgPT09IEhhbGZGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5oYXMoJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJykgPT09IGZhbHNlKSByZXR1cm47IC8vIHZlcmlmeSBleHRlbnNpb24gZm9yIFdlYkdMIDEgb25seVxuXG5cdFx0XHRpZiAodGV4dHVyZS5hbmlzb3Ryb3B5ID4gMSB8fCBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSB7XG5cdFx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJmKHRleHR1cmVUeXBlLCBleHRlbnNpb24uVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIE1hdGgubWluKHRleHR1cmUuYW5pc290cm9weSwgY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKSkpO1xuXG5cdFx0XHRcdHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpLl9fY3VycmVudEFuaXNvdHJvcHkgPSB0ZXh0dXJlLmFuaXNvdHJvcHk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaW5pdFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUpIHtcblx0XHRpZiAodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPSB0cnVlO1xuXHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSk7XG5cdFx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcysrO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwbG9hZFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QpIHtcblx0XHRsZXQgdGV4dHVyZVR5cGUgPSBfZ2wuVEVYVFVSRV8yRDtcblx0XHRpZiAodGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSkgdGV4dHVyZVR5cGUgPSBfZ2wuVEVYVFVSRV8yRF9BUlJBWTtcblx0XHRpZiAodGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QpIHRleHR1cmVUeXBlID0gX2dsLlRFWFRVUkVfM0Q7XG5cdFx0aW5pdFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUpO1xuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoX2dsLlRFWFRVUkUwICsgc2xvdCk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUodGV4dHVyZVR5cGUsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgdGV4dHVyZS5mbGlwWSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMLCBfZ2wuTk9ORSk7XG5cblx0XHRjb25zdCBuZWVkc1Bvd2VyT2ZUd28gPSB0ZXh0dXJlTmVlZHNQb3dlck9mVHdvKHRleHR1cmUpICYmIGlzUG93ZXJPZlR3byQxKHRleHR1cmUuaW1hZ2UpID09PSBmYWxzZTtcblx0XHRsZXQgaW1hZ2UgPSByZXNpemVJbWFnZSh0ZXh0dXJlLmltYWdlLCBuZWVkc1Bvd2VyT2ZUd28sIGZhbHNlLCBtYXhUZXh0dXJlU2l6ZSk7XG5cdFx0aW1hZ2UgPSB2ZXJpZnlDb2xvclNwYWNlKHRleHR1cmUsIGltYWdlKTtcblx0XHRjb25zdCBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMShpbWFnZSkgfHwgaXNXZWJHTDIsXG5cdFx0XHRcdFx0Z2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRsZXQgZ2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpLFxuXHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQodGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZywgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSk7XG5cdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnModGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyk7XG5cdFx0bGV0IG1pcG1hcDtcblx0XHRjb25zdCBtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzO1xuXHRcdGNvbnN0IHVzZVRleFN0b3JhZ2UgPSBpc1dlYkdMMiAmJiB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlICE9PSB0cnVlO1xuXHRcdGNvbnN0IGFsbG9jYXRlTWVtb3J5ID0gdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID09PSB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbGV2ZWxzID0gZ2V0TWlwTGV2ZWxzKHRleHR1cmUsIGltYWdlLCBzdXBwb3J0c01pcHMpO1xuXG5cdFx0aWYgKHRleHR1cmUuaXNEZXB0aFRleHR1cmUpIHtcblx0XHRcdC8vIHBvcHVsYXRlIGRlcHRoIHRleHR1cmUgd2l0aCBkdW1teSBkYXRhXG5cdFx0XHRnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBPTkVOVDtcblxuXHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdGlmICh0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSkge1xuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfQ09NUE9ORU5UMzJGO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRleHR1cmUudHlwZSA9PT0gVW5zaWduZWRJbnRUeXBlKSB7XG5cdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQyNDtcblx0XHRcdFx0fSBlbHNlIGlmICh0ZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSkge1xuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEgyNF9TVEVOQ0lMODtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBPTkVOVDE2OyAvLyBXZWJHTDIgcmVxdWlyZXMgc2l6ZWQgaW50ZXJuYWxmb3JtYXQgZm9yIGdsVGV4SW1hZ2UyRFxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSAvLyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgV2ViR0wgMVxuXG5cblx0XHRcdGlmICh0ZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgJiYgZ2xJbnRlcm5hbEZvcm1hdCA9PT0gX2dsLkRFUFRIX0NPTVBPTkVOVCkge1xuXHRcdFx0XHQvLyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBhcmVcblx0XHRcdFx0Ly8gREVQVEhfQ09NUE9ORU5UIGFuZCB0eXBlIGlzIG5vdCBVTlNJR05FRF9TSE9SVCBvciBVTlNJR05FRF9JTlRcblx0XHRcdFx0Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pXG5cdFx0XHRcdGlmICh0ZXh0dXJlLnR5cGUgIT09IFVuc2lnbmVkU2hvcnRUeXBlICYmIHRleHR1cmUudHlwZSAhPT0gVW5zaWduZWRJbnRUeXBlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuJyk7XG5cdFx0XHRcdFx0dGV4dHVyZS50eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7XG5cdFx0XHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICYmIGdsSW50ZXJuYWxGb3JtYXQgPT09IF9nbC5ERVBUSF9DT01QT05FTlQpIHtcblx0XHRcdFx0Ly8gRGVwdGggc3RlbmNpbCB0ZXh0dXJlcyBuZWVkIHRoZSBERVBUSF9TVEVOQ0lMIGludGVybmFsIGZvcm1hdFxuXHRcdFx0XHQvLyAoaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9kZXB0aF90ZXh0dXJlLylcblx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9TVEVOQ0lMOyAvLyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBhcmVcblx0XHRcdFx0Ly8gREVQVEhfU1RFTkNJTCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfSU5UXzI0XzhfV0VCR0wuXG5cdFx0XHRcdC8vIChodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL1dFQkdMX2RlcHRoX3RleHR1cmUvKVxuXG5cdFx0XHRcdGlmICh0ZXh0dXJlLnR5cGUgIT09IFVuc2lnbmVkSW50MjQ4VHlwZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4nKTtcblx0XHRcdFx0XHR0ZXh0dXJlLnR5cGUgPSBVbnNpZ25lZEludDI0OFR5cGU7XG5cdFx0XHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vXG5cblxuXHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCAxLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG51bGwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0RhdGFUZXh0dXJlKSB7XG5cdFx0XHQvLyB1c2UgbWFudWFsbHkgY3JlYXRlZCBtaXBtYXBzIGlmIGF2YWlsYWJsZVxuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzXG5cdFx0XHQvLyBzZXQgMCBsZXZlbCBtaXBtYXAgYW5kIHRoZW4gdXNlIEdMIHRvIGdlbmVyYXRlIG90aGVyIG1pcG1hcCBsZXZlbHNcblx0XHRcdGlmIChtaXBtYXBzLmxlbmd0aCA+IDAgJiYgc3VwcG9ydHNNaXBzKSB7XG5cdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcHNbMF0ud2lkdGgsIG1pcG1hcHNbMF0uaGVpZ2h0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdG1pcG1hcCA9IG1pcG1hcHNbaV07XG5cblx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGksIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdGlmIChhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUpIHtcblx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXBzWzBdLndpZHRoLCBtaXBtYXBzWzBdLmhlaWdodCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRtaXBtYXAgPSBtaXBtYXBzW2ldO1xuXG5cdFx0XHRcdGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gUkdCQUZvcm1hdCkge1xuXHRcdFx0XHRcdGlmIChnbEZvcm1hdCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGksIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgaSwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5KSB7XG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRpZiAoYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlM0QoX2dsLlRFWFRVUkVfMkRfQVJSQVksIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UzRChfZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMCwgMCwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UzRChfZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QpIHtcblx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdGlmIChhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UzRChfZ2wuVEVYVFVSRV8zRCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTNEKF9nbC5URVhUVVJFXzNELCAwLCAwLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTNEKF9nbC5URVhUVVJFXzNELCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0ZXh0dXJlLmlzRnJhbWVidWZmZXJUZXh0dXJlKSB7XG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcmVndWxhciBUZXh0dXJlIChpbWFnZSwgdmlkZW8sIGNhbnZhcylcblx0XHRcdC8vIHVzZSBtYW51YWxseSBjcmVhdGVkIG1pcG1hcHMgaWYgYXZhaWxhYmxlXG5cdFx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gbWFudWFsIG1pcG1hcHNcblx0XHRcdC8vIHNldCAwIGxldmVsIG1pcG1hcCBhbmQgdGhlbiB1c2UgR0wgdG8gZ2VuZXJhdGUgb3RoZXIgbWlwbWFwIGxldmVsc1xuXHRcdFx0aWYgKG1pcG1hcHMubGVuZ3RoID4gMCAmJiBzdXBwb3J0c01pcHMpIHtcblx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwc1swXS53aWR0aCwgbWlwbWFwc1swXS5oZWlnaHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0bWlwbWFwID0gbWlwbWFwc1tpXTtcblxuXHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdGlmIChhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKHRleHR1cmUsIHN1cHBvcnRzTWlwcykpIHtcblx0XHRcdGdlbmVyYXRlTWlwbWFwKHRleHR1cmVUeXBlKTtcblx0XHR9XG5cblx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPSB0ZXh0dXJlLnZlcnNpb247XG5cdFx0aWYgKHRleHR1cmUub25VcGRhdGUpIHRleHR1cmUub25VcGRhdGUodGV4dHVyZSk7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGxvYWRDdWJlVGV4dHVyZSh0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCkge1xuXHRcdGlmICh0ZXh0dXJlLmltYWdlLmxlbmd0aCAhPT0gNikgcmV0dXJuO1xuXHRcdGluaXRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlKTtcblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKF9nbC5URVhUVVJFMCArIHNsb3QpO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRleHR1cmUuZmxpcFkpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRleHR1cmUudW5wYWNrQWxpZ25tZW50KTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCwgX2dsLk5PTkUpO1xuXG5cdFx0Y29uc3QgaXNDb21wcmVzc2VkID0gdGV4dHVyZSAmJiAodGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlIHx8IHRleHR1cmUuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSk7XG5cdFx0Y29uc3QgaXNEYXRhVGV4dHVyZSA9IHRleHR1cmUuaW1hZ2VbMF0gJiYgdGV4dHVyZS5pbWFnZVswXS5pc0RhdGFUZXh0dXJlO1xuXHRcdGNvbnN0IGN1YmVJbWFnZSA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdGlmICghaXNDb21wcmVzc2VkICYmICFpc0RhdGFUZXh0dXJlKSB7XG5cdFx0XHRcdGN1YmVJbWFnZVtpXSA9IHJlc2l6ZUltYWdlKHRleHR1cmUuaW1hZ2VbaV0sIGZhbHNlLCB0cnVlLCBtYXhDdWJlbWFwU2l6ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdWJlSW1hZ2VbaV0gPSBpc0RhdGFUZXh0dXJlID8gdGV4dHVyZS5pbWFnZVtpXS5pbWFnZSA6IHRleHR1cmUuaW1hZ2VbaV07XG5cdFx0XHR9XG5cblx0XHRcdGN1YmVJbWFnZVtpXSA9IHZlcmlmeUNvbG9yU3BhY2UodGV4dHVyZSwgY3ViZUltYWdlW2ldKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbWFnZSA9IGN1YmVJbWFnZVswXSxcblx0XHRcdFx0XHRzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMShpbWFnZSkgfHwgaXNXZWJHTDIsXG5cdFx0XHRcdFx0Z2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nKSxcblx0XHRcdFx0XHRnbFR5cGUgPSB1dGlscy5jb252ZXJ0KHRleHR1cmUudHlwZSksXG5cdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KHRleHR1cmUuaW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIHRleHR1cmUuZW5jb2RpbmcpO1xuXHRcdGNvbnN0IHVzZVRleFN0b3JhZ2UgPSBpc1dlYkdMMiAmJiB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlICE9PSB0cnVlO1xuXHRcdGNvbnN0IGFsbG9jYXRlTWVtb3J5ID0gdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID09PSB1bmRlZmluZWQ7XG5cdFx0bGV0IGxldmVscyA9IGdldE1pcExldmVscyh0ZXh0dXJlLCBpbWFnZSwgc3VwcG9ydHNNaXBzKTtcblx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyhfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZSwgc3VwcG9ydHNNaXBzKTtcblx0XHRsZXQgbWlwbWFwcztcblxuXHRcdGlmIChpc0NvbXByZXNzZWQpIHtcblx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdFx0bWlwbWFwcyA9IGN1YmVJbWFnZVtpXS5taXBtYXBzO1xuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbWlwbWFwcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGNvbnN0IG1pcG1hcCA9IG1pcG1hcHNbal07XG5cblx0XHRcdFx0XHRpZiAodGV4dHVyZS5mb3JtYXQgIT09IFJHQkFGb3JtYXQpIHtcblx0XHRcdFx0XHRcdGlmIChnbEZvcm1hdCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGosIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGosIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pcG1hcHMgPSB0ZXh0dXJlLm1pcG1hcHM7XG5cblx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdC8vIFRPRE86IFVuaWZvcm1seSBoYW5kbGUgbWlwbWFwIGRlZmluaXRpb25zXG5cdFx0XHRcdC8vIE5vcm1hbCB0ZXh0dXJlcyBhbmQgY29tcHJlc3NlZCBjdWJlIHRleHR1cmVzIGRlZmluZSBiYXNlIGxldmVsICsgbWlwcyB3aXRoIHRoZWlyIG1pcG1hcCBhcnJheVxuXHRcdFx0XHQvLyBVbmNvbXByZXNzZWQgY3ViZSB0ZXh0dXJlcyB1c2UgdGhlaXIgbWlwbWFwIGFycmF5IG9ubHkgZm9yIG1pcHMgKG5vIGJhc2UgbGV2ZWwpXG5cdFx0XHRcdGlmIChtaXBtYXBzLmxlbmd0aCA+IDApIGxldmVscysrO1xuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgY3ViZUltYWdlWzBdLndpZHRoLCBjdWJlSW1hZ2VbMF0uaGVpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdFx0aWYgKGlzRGF0YVRleHR1cmUpIHtcblx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgMCwgMCwgMCwgY3ViZUltYWdlW2ldLndpZHRoLCBjdWJlSW1hZ2VbaV0uaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbaV0uZGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGN1YmVJbWFnZVtpXS53aWR0aCwgY3ViZUltYWdlW2ldLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlW2ldLmRhdGEpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbWlwbWFwcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbWlwbWFwID0gbWlwbWFwc1tqXTtcblx0XHRcdFx0XHRcdGNvbnN0IG1pcG1hcEltYWdlID0gbWlwbWFwLmltYWdlW2ldLmltYWdlO1xuXG5cdFx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqICsgMSwgMCwgMCwgbWlwbWFwSW1hZ2Uud2lkdGgsIG1pcG1hcEltYWdlLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwSW1hZ2UuZGF0YSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqICsgMSwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwSW1hZ2Uud2lkdGgsIG1pcG1hcEltYWdlLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwSW1hZ2UuZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbaV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbaV0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbWlwbWFwcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbWlwbWFwID0gbWlwbWFwc1tqXTtcblxuXHRcdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiArIDEsIDAsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5pbWFnZVtpXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqICsgMSwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmltYWdlW2ldKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKHRleHR1cmUsIHN1cHBvcnRzTWlwcykpIHtcblx0XHRcdC8vIFdlIGFzc3VtZSBpbWFnZXMgZm9yIGN1YmUgbWFwIGhhdmUgdGhlIHNhbWUgc2l6ZS5cblx0XHRcdGdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcblx0XHR9XG5cblx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPSB0ZXh0dXJlLnZlcnNpb247XG5cdFx0aWYgKHRleHR1cmUub25VcGRhdGUpIHRleHR1cmUub25VcGRhdGUodGV4dHVyZSk7XG5cdH0gLy8gUmVuZGVyIHRhcmdldHNcblx0Ly8gU2V0dXAgc3RvcmFnZSBmb3IgdGFyZ2V0IHRleHR1cmUgYW5kIGJpbmQgaXQgdG8gY29ycmVjdCBmcmFtZWJ1ZmZlclxuXG5cblx0ZnVuY3Rpb24gc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGV4dHVyZVRhcmdldCkge1xuXHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpO1xuXHRcdGNvbnN0IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KTtcblxuXHRcdGlmICghcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2hhc0V4dGVybmFsVGV4dHVyZXMpIHtcblx0XHRcdGlmICh0ZXh0dXJlVGFyZ2V0ID09PSBfZ2wuVEVYVFVSRV8zRCB8fCB0ZXh0dXJlVGFyZ2V0ID09PSBfZ2wuVEVYVFVSRV8yRF9BUlJBWSkge1xuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTNEKHRleHR1cmVUYXJnZXQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgcmVuZGVyVGFyZ2V0LmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXRlLnRleEltYWdlMkQodGV4dHVyZVRhcmdldCwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSkge1xuXHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoX2dsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0ZXh0dXJlVGFyZ2V0LCBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSwgMCwgZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKF9nbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGV4dHVyZVRhcmdldCwgcHJvcGVydGllcy5nZXQodGV4dHVyZSkuX193ZWJnbFRleHR1cmUsIDApO1xuXHRcdH1cblxuXHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXHR9IC8vIFNldHVwIHN0b3JhZ2UgZm9yIGludGVybmFsIGRlcHRoL3N0ZW5jaWwgYnVmZmVycyBhbmQgYmluZCB0byBjb3JyZWN0IGZyYW1lYnVmZmVyXG5cblxuXHRmdW5jdGlvbiBzZXR1cFJlbmRlckJ1ZmZlclN0b3JhZ2UocmVuZGVyYnVmZmVyLCByZW5kZXJUYXJnZXQsIGlzTXVsdGlzYW1wbGUpIHtcblx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlcihfZ2wuUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciAmJiAhcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIpIHtcblx0XHRcdGxldCBnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBPTkVOVDE2O1xuXG5cdFx0XHRpZiAoaXNNdWx0aXNhbXBsZSB8fCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdGNvbnN0IGRlcHRoVGV4dHVyZSA9IHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmU7XG5cblx0XHRcdFx0aWYgKGRlcHRoVGV4dHVyZSAmJiBkZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpIHtcblx0XHRcdFx0XHRpZiAoZGVwdGhUZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSkge1xuXHRcdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQzMkY7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkZXB0aFRleHR1cmUudHlwZSA9PT0gVW5zaWduZWRJbnRUeXBlKSB7XG5cdFx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBPTkVOVDI0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKHJlbmRlclRhcmdldCk7XG5cblx0XHRcdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUpIHtcblx0XHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKF9nbC5SRU5ERVJCVUZGRVIsIHNhbXBsZXMsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShfZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShfZ2wuUkVOREVSQlVGRkVSLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuREVQVEhfQVRUQUNITUVOVCwgX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcblx0XHR9IGVsc2UgaWYgKHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciAmJiByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlcikge1xuXHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMocmVuZGVyVGFyZ2V0KTtcblxuXHRcdFx0aWYgKGlzTXVsdGlzYW1wbGUgJiYgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlcikge1xuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKF9nbC5SRU5ERVJCVUZGRVIsIHNhbXBsZXMsIF9nbC5ERVBUSDI0X1NURU5DSUw4LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoX2dsLlJFTkRFUkJVRkZFUiwgc2FtcGxlcywgX2dsLkRFUFRIMjRfU1RFTkNJTDgsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShfZ2wuUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfU1RFTkNJTCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVXNlIHRoZSBmaXJzdCB0ZXh0dXJlIGZvciBNUlQgc28gZmFyXG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPT09IHRydWUgPyByZW5kZXJUYXJnZXQudGV4dHVyZVswXSA6IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdFx0Y29uc3QgZ2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKTtcblx0XHRcdGNvbnN0IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKHJlbmRlclRhcmdldCk7XG5cblx0XHRcdGlmIChpc011bHRpc2FtcGxlICYmIHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIpIHtcblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShfZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoX2dsLlJFTkRFUkJVRkZFUiwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKF9nbC5SRU5ERVJCVUZGRVIsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0X2dsLmJpbmRSZW5kZXJidWZmZXIoX2dsLlJFTkRFUkJVRkZFUiwgbnVsbCk7XG5cdH0gLy8gU2V0dXAgcmVzb3VyY2VzIGZvciBhIERlcHRoIFRleHR1cmUgZm9yIGEgRkJPIChuZWVkcyBhbiBleHRlbnNpb24pXG5cblxuXHRmdW5jdGlvbiBzZXR1cERlcHRoVGV4dHVyZShmcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgaXNDdWJlID0gcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtcblx0XHRpZiAoaXNDdWJlKSB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7XG5cblx0XHRpZiAoIShyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICYmIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUnKTtcblx0XHR9IC8vIHVwbG9hZCBhbiBlbXB0eSBkZXB0aCB0ZXh0dXJlIHdpdGggZnJhbWVidWZmZXIgc2l6ZVxuXG5cblx0XHRpZiAoIXByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlIHx8IHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGggIT09IHJlbmRlclRhcmdldC53aWR0aCB8fCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCAhPT0gcmVuZGVyVGFyZ2V0LmhlaWdodCkge1xuXHRcdFx0cmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDtcblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0LmhlaWdodDtcblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHNldFRleHR1cmUyRChyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLCAwKTtcblxuXHRcdGNvbnN0IHdlYmdsRGVwdGhUZXh0dXJlID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7XG5cblx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZm9ybWF0ID09PSBEZXB0aEZvcm1hdCkge1xuXHRcdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUpIHtcblx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuREVQVEhfQVRUQUNITUVOVCwgX2dsLlRFWFRVUkVfMkQsIHdlYmdsRGVwdGhUZXh0dXJlLCAwLCBzYW1wbGVzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9BVFRBQ0hNRU5ULCBfZ2wuVEVYVFVSRV8yRCwgd2ViZ2xEZXB0aFRleHR1cmUsIDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPT09IERlcHRoU3RlbmNpbEZvcm1hdCkge1xuXHRcdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUpIHtcblx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBfZ2wuVEVYVFVSRV8yRCwgd2ViZ2xEZXB0aFRleHR1cmUsIDAsIHNhbXBsZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgX2dsLlRFWFRVUkVfMkQsIHdlYmdsRGVwdGhUZXh0dXJlLCAwKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQnKTtcblx0XHR9XG5cdH0gLy8gU2V0dXAgR0wgcmVzb3VyY2VzIGZvciBhIG5vbi10ZXh0dXJlIGRlcHRoIGJ1ZmZlclxuXG5cblx0ZnVuY3Rpb24gc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXQpIHtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KTtcblx0XHRjb25zdCBpc0N1YmUgPSByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgPT09IHRydWU7XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAmJiAhcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKSB7XG5cdFx0XHRpZiAoaXNDdWJlKSB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzJyk7XG5cdFx0XHRzZXR1cERlcHRoVGV4dHVyZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzQ3ViZSkge1xuXHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbaV0pO1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyW2ldID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSwgcmVuZGVyVGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyKTtcblx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgPSBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG5cdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdH0gLy8gcmViaW5kIGZyYW1lYnVmZmVyIHdpdGggZXh0ZXJuYWwgdGV4dHVyZXNcblxuXG5cdGZ1bmN0aW9uIHJlYmluZFRleHR1cmVzKHJlbmRlclRhcmdldCwgY29sb3JUZXh0dXJlLCBkZXB0aFRleHR1cmUpIHtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KTtcblxuXHRcdGlmIChjb2xvclRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfMkQpO1xuXHRcdH1cblxuXHRcdGlmIChkZXB0aFRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXQpO1xuXHRcdH1cblx0fSAvLyBTZXQgdXAgR0wgcmVzb3VyY2VzIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuXG5cblx0ZnVuY3Rpb24gc2V0dXBSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQodGV4dHVyZSk7XG5cdFx0cmVuZGVyVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvblJlbmRlclRhcmdldERpc3Bvc2UpO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAodGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9IHRleHR1cmUudmVyc2lvbjtcblx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzKys7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNDdWJlID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID09PSB0cnVlO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVSZW5kZXJUYXJnZXRzID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPT09IHRydWU7XG5cdFx0Y29uc3QgaXNSZW5kZXJUYXJnZXQzRCA9IHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEIHx8IHRleHR1cmUuaXNEYXRhVGV4dHVyZTJEQXJyYXk7XG5cdFx0Y29uc3Qgc3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEocmVuZGVyVGFyZ2V0KSB8fCBpc1dlYkdMMjsgLy8gU2V0dXAgZnJhbWVidWZmZXJcblxuXHRcdGlmIChpc0N1YmUpIHtcblx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyW2ldID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cblx0XHRcdGlmIChpc011bHRpcGxlUmVuZGVyVGFyZ2V0cykge1xuXHRcdFx0XHRpZiAoY2FwYWJpbGl0aWVzLmRyYXdCdWZmZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQodGV4dHVyZXNbaV0pO1xuXG5cdFx0XHRcdFx0XHRpZiAoYXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cdFx0XHRcdFx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIpIHtcblx0XHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIgPSBfZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblxuXHRcdFx0XHRcdF9nbC5iaW5kUmVuZGVyYnVmZmVyKF9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtcblxuXHRcdFx0XHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0XHRcdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpO1xuXHRcdFx0XHRcdGNvbnN0IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRcdFx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpO1xuXG5cdFx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShfZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXG5cdFx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO1xuXG5cdFx0XHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuUkVOREVSQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7XG5cblx0XHRcdFx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlcihfZ2wuUkVOREVSQlVGRkVSLCBudWxsKTtcblxuXHRcdFx0XHRcdGlmIChyZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIpIHtcblx0XHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0XHRcdFx0c2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRydWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSAvLyBTZXR1cCBjb2xvciBidWZmZXJcblxuXG5cdFx0aWYgKGlzQ3ViZSkge1xuXHRcdFx0c3RhdGUuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0XHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0XHRzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcltpXSwgcmVuZGVyVGFyZ2V0LCB0ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyh0ZXh0dXJlLCBzdXBwb3J0c01pcHMpKSB7XG5cdFx0XHRcdGdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVJlbmRlclRhcmdldHMpIHtcblx0XHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHRleHR1cmVzW2ldO1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRzdGF0ZS5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgYXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXHRcdFx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyhfZ2wuVEVYVFVSRV8yRCwgYXR0YWNobWVudCwgc3VwcG9ydHNNaXBzKTtcblx0XHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgYXR0YWNobWVudCwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwICsgaSwgX2dsLlRFWFRVUkVfMkQpO1xuXG5cdFx0XHRcdGlmICh0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoYXR0YWNobWVudCwgc3VwcG9ydHNNaXBzKSkge1xuXHRcdFx0XHRcdGdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBnbFRleHR1cmVUeXBlID0gX2dsLlRFWFRVUkVfMkQ7XG5cblx0XHRcdGlmIChpc1JlbmRlclRhcmdldDNEKSB7XG5cdFx0XHRcdC8vIFJlbmRlciB0YXJnZXRzIGNvbnRhaW5pbmcgbGF5ZXJzLCBpLmU6IFRleHR1cmUgM0QgYW5kIDJkIGFycmF5c1xuXHRcdFx0XHRpZiAoaXNXZWJHTDIpIHtcblx0XHRcdFx0XHRjb25zdCBpc1RleHR1cmUzRCA9IHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEO1xuXHRcdFx0XHRcdGdsVGV4dHVyZVR5cGUgPSBpc1RleHR1cmUzRCA/IF9nbC5URVhUVVJFXzNEIDogX2dsLlRFWFRVUkVfMkRfQVJSQVk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c3RhdGUuYmluZFRleHR1cmUoZ2xUZXh0dXJlVHlwZSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXHRcdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnMoZ2xUZXh0dXJlVHlwZSwgdGV4dHVyZSwgc3VwcG9ydHNNaXBzKTtcblx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2xUZXh0dXJlVHlwZSk7XG5cblx0XHRcdGlmICh0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHModGV4dHVyZSwgc3VwcG9ydHNNaXBzKSkge1xuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcChnbFRleHR1cmVUeXBlKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHRcdH0gLy8gU2V0dXAgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyc1xuXG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyKSB7XG5cdFx0XHRzZXR1cERlcHRoUmVuZGVyYnVmZmVyKHJlbmRlclRhcmdldCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKHJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IHN1cHBvcnRzTWlwcyA9IGlzUG93ZXJPZlR3byQxKHJlbmRlclRhcmdldCkgfHwgaXNXZWJHTDI7XG5cdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyA9PT0gdHJ1ZSA/IHJlbmRlclRhcmdldC50ZXh0dXJlIDogW3JlbmRlclRhcmdldC50ZXh0dXJlXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IHRleHR1cmUgPSB0ZXh0dXJlc1tpXTtcblxuXHRcdFx0aWYgKHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyh0ZXh0dXJlLCBzdXBwb3J0c01pcHMpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldCA9IHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCA/IF9nbC5URVhUVVJFX0NVQkVfTUFQIDogX2dsLlRFWFRVUkVfMkQ7XG5cblx0XHRcdFx0Y29uc3Qgd2ViZ2xUZXh0dXJlID0gcHJvcGVydGllcy5nZXQodGV4dHVyZSkuX193ZWJnbFRleHR1cmU7XG5cblx0XHRcdFx0c3RhdGUuYmluZFRleHR1cmUodGFyZ2V0LCB3ZWJnbFRleHR1cmUpO1xuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcCh0YXJnZXQpO1xuXHRcdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSB7XG5cdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIpIHtcblx0XHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0XHRjb25zdCB3aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0LmhlaWdodDtcblx0XHRcdFx0bGV0IG1hc2sgPSBfZ2wuQ09MT1JfQlVGRkVSX0JJVDtcblx0XHRcdFx0Y29uc3QgaW52YWxpZGF0aW9uQXJyYXkgPSBbX2dsLkNPTE9SX0FUVEFDSE1FTlQwXTtcblx0XHRcdFx0Y29uc3QgZGVwdGhTdHlsZSA9IHJlbmRlclRhcmdldC5zdGVuY2lsQnVmZmVyID8gX2dsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA6IF9nbC5ERVBUSF9BVFRBQ0hNRU5UO1xuXG5cdFx0XHRcdGlmIChyZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIpIHtcblx0XHRcdFx0XHRpbnZhbGlkYXRpb25BcnJheS5wdXNoKGRlcHRoU3R5bGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZW5kZXJUYXJnZXQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkpIHtcblx0XHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyKSBtYXNrIHw9IF9nbC5ERVBUSF9CVUZGRVJfQklUO1xuXHRcdFx0XHRcdGlmIChyZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlcikgbWFzayB8PSBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuUkVBRF9GUkFNRUJVRkZFUiwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO1xuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkRSQVdfRlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyKTtcblxuXHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5KSB7XG5cdFx0XHRcdFx0X2dsLmludmFsaWRhdGVGcmFtZWJ1ZmZlcihfZ2wuUkVBRF9GUkFNRUJVRkZFUiwgW2RlcHRoU3R5bGVdKTtcblxuXHRcdFx0XHRcdF9nbC5pbnZhbGlkYXRlRnJhbWVidWZmZXIoX2dsLkRSQVdfRlJBTUVCVUZGRVIsIFtkZXB0aFN0eWxlXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZ2wuYmxpdEZyYW1lYnVmZmVyKDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIG1hc2ssIF9nbC5ORUFSRVNUKTtcblxuXHRcdFx0XHRfZ2wuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKF9nbC5SRUFEX0ZSQU1FQlVGRkVSLCBpbnZhbGlkYXRpb25BcnJheSk7XG5cblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5SRUFEX0ZSQU1FQlVGRkVSLCBudWxsKTtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5EUkFXX0ZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKHJlbmRlclRhcmdldCkge1xuXHRcdHJldHVybiBpc1dlYkdMMiAmJiAocmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciB8fCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSA/IE1hdGgubWluKG1heFNhbXBsZXMsIHJlbmRlclRhcmdldC5zYW1wbGVzKSA6IDA7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVWaWRlb1RleHR1cmUodGV4dHVyZSkge1xuXHRcdGNvbnN0IGZyYW1lID0gaW5mby5yZW5kZXIuZnJhbWU7IC8vIENoZWNrIHRoZSBsYXN0IGZyYW1lIHdlIHVwZGF0ZWQgdGhlIFZpZGVvVGV4dHVyZVxuXG5cdFx0aWYgKF92aWRlb1RleHR1cmVzLmdldCh0ZXh0dXJlKSAhPT0gZnJhbWUpIHtcblx0XHRcdF92aWRlb1RleHR1cmVzLnNldCh0ZXh0dXJlLCBmcmFtZSk7XG5cblx0XHRcdHRleHR1cmUudXBkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdmVyaWZ5Q29sb3JTcGFjZSh0ZXh0dXJlLCBpbWFnZSkge1xuXHRcdGNvbnN0IGVuY29kaW5nID0gdGV4dHVyZS5lbmNvZGluZztcblx0XHRjb25zdCBmb3JtYXQgPSB0ZXh0dXJlLmZvcm1hdDtcblx0XHRjb25zdCB0eXBlID0gdGV4dHVyZS50eXBlO1xuXHRcdGlmICh0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgPT09IHRydWUgfHwgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSA9PT0gdHJ1ZSB8fCB0ZXh0dXJlLmZvcm1hdCA9PT0gX1NSR0JBRm9ybWF0KSByZXR1cm4gaW1hZ2U7XG5cblx0XHRpZiAoZW5jb2RpbmcgIT09IExpbmVhckVuY29kaW5nKSB7XG5cdFx0XHQvLyBzUkdCXG5cdFx0XHRpZiAoZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZykge1xuXHRcdFx0XHRpZiAoaXNXZWJHTDIgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0Ly8gaW4gV2ViR0wgMSwgdHJ5IHRvIHVzZSBFWFRfc1JHQiBleHRlbnNpb24gYW5kIHVuc2l6ZWQgZm9ybWF0c1xuXHRcdFx0XHRcdGlmIChleHRlbnNpb25zLmhhcygnRVhUX3NSR0InKSA9PT0gdHJ1ZSAmJiBmb3JtYXQgPT09IFJHQkFGb3JtYXQpIHtcblx0XHRcdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gX1NSR0JBRm9ybWF0OyAvLyBpdCdzIG5vdCBwb3NzaWJsZSB0byBnZW5lcmF0ZSBtaXBzIGluIFdlYkdMIDEgd2l0aCB0aGlzIGV4dGVuc2lvblxuXG5cdFx0XHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblx0XHRcdFx0XHRcdHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHNsb3cgZmFsbGJhY2sgKENQVSBkZWNvZGUpXG5cdFx0XHRcdFx0XHRpbWFnZSA9IEltYWdlVXRpbHMuc1JHQlRvTGluZWFyKGltYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaW4gV2ViR0wgMiB1bmNvbXByZXNzZWQgdGV4dHVyZXMgY2FuIG9ubHkgYmUgc1JHQiBlbmNvZGVkIGlmIHRoZXkgaGF2ZSB0aGUgUkdCQTggZm9ybWF0XG5cdFx0XHRcdFx0aWYgKGZvcm1hdCAhPT0gUkdCQUZvcm1hdCB8fCB0eXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzonLCBlbmNvZGluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlO1xuXHR9IC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cblxuXHRsZXQgd2FybmVkVGV4dHVyZTJEID0gZmFsc2U7XG5cdGxldCB3YXJuZWRUZXh0dXJlQ3ViZSA9IGZhbHNlO1xuXG5cdGZ1bmN0aW9uIHNhZmVTZXRUZXh0dXJlMkQodGV4dHVyZSwgc2xvdCkge1xuXHRcdGlmICh0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTFJlbmRlclRhcmdldCkge1xuXHRcdFx0aWYgKHdhcm5lZFRleHR1cmUyRCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvblxcJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4nKTtcblx0XHRcdFx0d2FybmVkVGV4dHVyZTJEID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTtcblx0XHR9XG5cblx0XHRzZXRUZXh0dXJlMkQodGV4dHVyZSwgc2xvdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzYWZlU2V0VGV4dHVyZUN1YmUodGV4dHVyZSwgc2xvdCkge1xuXHRcdGlmICh0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpIHtcblx0XHRcdGlmICh3YXJuZWRUZXh0dXJlQ3ViZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uXFwndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuJyk7XG5cdFx0XHRcdHdhcm5lZFRleHR1cmVDdWJlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTtcblx0XHR9XG5cblx0XHRzZXRUZXh0dXJlQ3ViZSh0ZXh0dXJlLCBzbG90KTtcblx0fSAvL1xuXG5cblx0dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0ID0gYWxsb2NhdGVUZXh0dXJlVW5pdDtcblx0dGhpcy5yZXNldFRleHR1cmVVbml0cyA9IHJlc2V0VGV4dHVyZVVuaXRzO1xuXHR0aGlzLnNldFRleHR1cmUyRCA9IHNldFRleHR1cmUyRDtcblx0dGhpcy5zZXRUZXh0dXJlMkRBcnJheSA9IHNldFRleHR1cmUyREFycmF5O1xuXHR0aGlzLnNldFRleHR1cmUzRCA9IHNldFRleHR1cmUzRDtcblx0dGhpcy5zZXRUZXh0dXJlQ3ViZSA9IHNldFRleHR1cmVDdWJlO1xuXHR0aGlzLnJlYmluZFRleHR1cmVzID0gcmViaW5kVGV4dHVyZXM7XG5cdHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQgPSBzZXR1cFJlbmRlclRhcmdldDtcblx0dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAgPSB1cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA7XG5cdHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgPSB1cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldDtcblx0dGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyID0gc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcjtcblx0dGhpcy5zZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSA9IHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlO1xuXHR0aGlzLnNhZmVTZXRUZXh0dXJlMkQgPSBzYWZlU2V0VGV4dHVyZTJEO1xuXHR0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZSA9IHNhZmVTZXRUZXh0dXJlQ3ViZTtcbn1cblxuZnVuY3Rpb24gV2ViR0xVdGlscyhnbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGZ1bmN0aW9uIGNvbnZlcnQocCwgZW5jb2RpbmcgPSBudWxsKSB7XG5cdFx0bGV0IGV4dGVuc2lvbjtcblx0XHRpZiAocCA9PT0gVW5zaWduZWRCeXRlVHlwZSkgcmV0dXJuIGdsLlVOU0lHTkVEX0JZVEU7XG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSkgcmV0dXJuIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7XG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSkgcmV0dXJuIGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzE7XG5cdFx0aWYgKHAgPT09IEJ5dGVUeXBlKSByZXR1cm4gZ2wuQllURTtcblx0XHRpZiAocCA9PT0gU2hvcnRUeXBlKSByZXR1cm4gZ2wuU0hPUlQ7XG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkU2hvcnRUeXBlKSByZXR1cm4gZ2wuVU5TSUdORURfU0hPUlQ7XG5cdFx0aWYgKHAgPT09IEludFR5cGUpIHJldHVybiBnbC5JTlQ7XG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkSW50VHlwZSkgcmV0dXJuIGdsLlVOU0lHTkVEX0lOVDtcblx0XHRpZiAocCA9PT0gRmxvYXRUeXBlKSByZXR1cm4gZ2wuRkxPQVQ7XG5cblx0XHRpZiAocCA9PT0gSGFsZkZsb2F0VHlwZSkge1xuXHRcdFx0aWYgKGlzV2ViR0wyKSByZXR1cm4gZ2wuSEFMRl9GTE9BVDtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGV4dGVuc2lvbi5IQUxGX0ZMT0FUX09FUztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwID09PSBBbHBoYUZvcm1hdCkgcmV0dXJuIGdsLkFMUEhBO1xuXHRcdGlmIChwID09PSBSR0JBRm9ybWF0KSByZXR1cm4gZ2wuUkdCQTtcblx0XHRpZiAocCA9PT0gTHVtaW5hbmNlRm9ybWF0KSByZXR1cm4gZ2wuTFVNSU5BTkNFO1xuXHRcdGlmIChwID09PSBMdW1pbmFuY2VBbHBoYUZvcm1hdCkgcmV0dXJuIGdsLkxVTUlOQU5DRV9BTFBIQTtcblx0XHRpZiAocCA9PT0gRGVwdGhGb3JtYXQpIHJldHVybiBnbC5ERVBUSF9DT01QT05FTlQ7XG5cdFx0aWYgKHAgPT09IERlcHRoU3RlbmNpbEZvcm1hdCkgcmV0dXJuIGdsLkRFUFRIX1NURU5DSUw7XG5cdFx0aWYgKHAgPT09IFJlZEZvcm1hdCkgcmV0dXJuIGdsLlJFRDsgLy8gV2ViR0wgMSBzUkdCIGZhbGxiYWNrXG5cblx0XHRpZiAocCA9PT0gX1NSR0JBRm9ybWF0KSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnRVhUX3NSR0InKTtcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLlNSR0JfQUxQSEFfRVhUO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fSAvLyBXZWJHTDIgZm9ybWF0cy5cblxuXG5cdFx0aWYgKHAgPT09IFJlZEludGVnZXJGb3JtYXQpIHJldHVybiBnbC5SRURfSU5URUdFUjtcblx0XHRpZiAocCA9PT0gUkdGb3JtYXQpIHJldHVybiBnbC5SRztcblx0XHRpZiAocCA9PT0gUkdJbnRlZ2VyRm9ybWF0KSByZXR1cm4gZ2wuUkdfSU5URUdFUjtcblx0XHRpZiAocCA9PT0gUkdCQUludGVnZXJGb3JtYXQpIHJldHVybiBnbC5SR0JBX0lOVEVHRVI7IC8vIFMzVENcblxuXHRcdGlmIChwID09PSBSR0JfUzNUQ19EWFQxX0Zvcm1hdCB8fCBwID09PSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCkge1xuXHRcdFx0aWYgKGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcpIHtcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2InKTtcblxuXHRcdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQl9TM1RDX0RYVDFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtcblx0XHRcdFx0XHRpZiAocCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKTtcblxuXHRcdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQl9TM1RDX0RYVDFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtcblx0XHRcdFx0XHRpZiAocCA9PT0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IC8vIFBWUlRDXG5cblxuXHRcdGlmIChwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCB8fCBwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCB8fCBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0KSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcblx0XHRcdFx0aWYgKHAgPT09IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7XG5cdFx0XHRcdGlmIChwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAocCA9PT0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAocCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fSAvLyBFVEMxXG5cblxuXHRcdGlmIChwID09PSBSR0JfRVRDMV9Gb3JtYXQpIHtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMScpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy8gRVRDMlxuXG5cblx0XHRpZiAocCA9PT0gUkdCX0VUQzJfRm9ybWF0IHx8IHAgPT09IFJHQkFfRVRDMl9FQUNfRm9ybWF0KSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YycpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmIChwID09PSBSR0JfRVRDMl9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfRVRDMiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQjhfRVRDMjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfRVRDMl9FQUNfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fSAvLyBBU1RDXG5cblxuXHRcdGlmIChwID09PSBSR0JBX0FTVENfNHg0X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNXg0X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNXg1X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNng1X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNng2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfOHg1X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfOHg2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfOHg4X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTB4NV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDZfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTB4MTBfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdCkge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjJyk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ180eDRfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ181eDRfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ181eDVfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ182eDVfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ182eDZfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ184eDVfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ184eDZfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ184eDhfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMHg1X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy8gQlBUQ1xuXG5cblx0XHRpZiAocCA9PT0gUkdCQV9CUFRDX0Zvcm1hdCkge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMnKTtcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRpZiAocCA9PT0gUkdCQV9CUFRDX0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX0JQVENfVU5PUk1fRVhUIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy9cblxuXG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSkge1xuXHRcdFx0aWYgKGlzV2ViR0wyKSByZXR1cm4gZ2wuVU5TSUdORURfSU5UXzI0Xzg7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfZGVwdGhfdGV4dHVyZScpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uVU5TSUdORURfSU5UXzI0XzhfV0VCR0w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGNvbnZlcnQ6IGNvbnZlcnRcblx0fTtcbn1cblxuY2xhc3MgQXJyYXlDYW1lcmEgZXh0ZW5kcyBQZXJzcGVjdGl2ZUNhbWVyYSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5ID0gW10pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuY2FtZXJhcyA9IGFycmF5O1xuXHR9XG5cbn1cblxuQXJyYXlDYW1lcmEucHJvdG90eXBlLmlzQXJyYXlDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBHcm91cCBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnR3JvdXAnO1xuXHR9XG5cbn1cblxuR3JvdXAucHJvdG90eXBlLmlzR3JvdXAgPSB0cnVlO1xuXG5jb25zdCBfbW92ZUV2ZW50ID0ge1xuXHR0eXBlOiAnbW92ZSdcbn07XG5cbmNsYXNzIFdlYlhSQ29udHJvbGxlciB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3RhcmdldFJheSA9IG51bGw7XG5cdFx0dGhpcy5fZ3JpcCA9IG51bGw7XG5cdFx0dGhpcy5faGFuZCA9IG51bGw7XG5cdH1cblxuXHRnZXRIYW5kU3BhY2UoKSB7XG5cdFx0aWYgKHRoaXMuX2hhbmQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2hhbmQgPSBuZXcgR3JvdXAoKTtcblx0XHRcdHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5faGFuZC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9oYW5kLmpvaW50cyA9IHt9O1xuXHRcdFx0dGhpcy5faGFuZC5pbnB1dFN0YXRlID0ge1xuXHRcdFx0XHRwaW5jaGluZzogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2hhbmQ7XG5cdH1cblxuXHRnZXRUYXJnZXRSYXlTcGFjZSgpIHtcblx0XHRpZiAodGhpcy5fdGFyZ2V0UmF5ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkgPSBuZXcgR3JvdXAoKTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3RhcmdldFJheTtcblx0fVxuXG5cdGdldEdyaXBTcGFjZSgpIHtcblx0XHRpZiAodGhpcy5fZ3JpcCA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fZ3JpcCA9IG5ldyBHcm91cCgpO1xuXHRcdFx0dGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLnZpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2dyaXAubGluZWFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0dGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ3JpcDtcblx0fVxuXG5cdGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcblx0XHRpZiAodGhpcy5fdGFyZ2V0UmF5ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2dyaXAgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2hhbmQgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkaXNjb25uZWN0KGlucHV0U291cmNlKSB7XG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdHR5cGU6ICdkaXNjb25uZWN0ZWQnLFxuXHRcdFx0ZGF0YTogaW5wdXRTb3VyY2Vcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLl90YXJnZXRSYXkgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX3RhcmdldFJheS52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2dyaXAgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2dyaXAudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9oYW5kICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9oYW5kLnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZShpbnB1dFNvdXJjZSwgZnJhbWUsIHJlZmVyZW5jZVNwYWNlKSB7XG5cdFx0bGV0IGlucHV0UG9zZSA9IG51bGw7XG5cdFx0bGV0IGdyaXBQb3NlID0gbnVsbDtcblx0XHRsZXQgaGFuZFBvc2UgPSBudWxsO1xuXHRcdGNvbnN0IHRhcmdldFJheSA9IHRoaXMuX3RhcmdldFJheTtcblx0XHRjb25zdCBncmlwID0gdGhpcy5fZ3JpcDtcblx0XHRjb25zdCBoYW5kID0gdGhpcy5faGFuZDtcblxuXHRcdGlmIChpbnB1dFNvdXJjZSAmJiBmcmFtZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSAhPT0gJ3Zpc2libGUtYmx1cnJlZCcpIHtcblx0XHRcdGlmICh0YXJnZXRSYXkgIT09IG51bGwpIHtcblx0XHRcdFx0aW5wdXRQb3NlID0gZnJhbWUuZ2V0UG9zZShpbnB1dFNvdXJjZS50YXJnZXRSYXlTcGFjZSwgcmVmZXJlbmNlU3BhY2UpO1xuXG5cdFx0XHRcdGlmIChpbnB1dFBvc2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHR0YXJnZXRSYXkubWF0cml4LmZyb21BcnJheShpbnB1dFBvc2UudHJhbnNmb3JtLm1hdHJpeCk7XG5cdFx0XHRcdFx0dGFyZ2V0UmF5Lm1hdHJpeC5kZWNvbXBvc2UodGFyZ2V0UmF5LnBvc2l0aW9uLCB0YXJnZXRSYXkucm90YXRpb24sIHRhcmdldFJheS5zY2FsZSk7XG5cblx0XHRcdFx0XHRpZiAoaW5wdXRQb3NlLmxpbmVhclZlbG9jaXR5KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5LmNvcHkoaW5wdXRQb3NlLmxpbmVhclZlbG9jaXR5KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlucHV0UG9zZS5hbmd1bGFyVmVsb2NpdHkpIHtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGlucHV0UG9zZS5hbmd1bGFyVmVsb2NpdHkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KF9tb3ZlRXZlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYW5kICYmIGlucHV0U291cmNlLmhhbmQpIHtcblx0XHRcdFx0aGFuZFBvc2UgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaW5wdXRqb2ludCBvZiBpbnB1dFNvdXJjZS5oYW5kLnZhbHVlcygpKSB7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBqb2ludHMgZ3JvdXBzIHdpdGggdGhlIFhSSm9pbnQgcG9zZXNcblx0XHRcdFx0XHRjb25zdCBqb2ludFBvc2UgPSBmcmFtZS5nZXRKb2ludFBvc2UoaW5wdXRqb2ludCwgcmVmZXJlbmNlU3BhY2UpO1xuXG5cdFx0XHRcdFx0aWYgKGhhbmQuam9pbnRzW2lucHV0am9pbnQuam9pbnROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgdHJhbnNmb3JtIG9mIHRoaXMgam9pbnQgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGpvaW50IHBvc2Ugb24gZWFjaCBmcmFtZVxuXHRcdFx0XHRcdFx0Y29uc3Qgam9pbnQgPSBuZXcgR3JvdXAoKTtcblx0XHRcdFx0XHRcdGpvaW50Lm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGpvaW50LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGhhbmQuam9pbnRzW2lucHV0am9pbnQuam9pbnROYW1lXSA9IGpvaW50OyAvLyA/P1xuXG5cdFx0XHRcdFx0XHRoYW5kLmFkZChqb2ludCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3Qgam9pbnQgPSBoYW5kLmpvaW50c1tpbnB1dGpvaW50LmpvaW50TmFtZV07XG5cblx0XHRcdFx0XHRpZiAoam9pbnRQb3NlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRqb2ludC5tYXRyaXguZnJvbUFycmF5KGpvaW50UG9zZS50cmFuc2Zvcm0ubWF0cml4KTtcblx0XHRcdFx0XHRcdGpvaW50Lm1hdHJpeC5kZWNvbXBvc2Uoam9pbnQucG9zaXRpb24sIGpvaW50LnJvdGF0aW9uLCBqb2ludC5zY2FsZSk7XG5cdFx0XHRcdFx0XHRqb2ludC5qb2ludFJhZGl1cyA9IGpvaW50UG9zZS5yYWRpdXM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0am9pbnQudmlzaWJsZSA9IGpvaW50UG9zZSAhPT0gbnVsbDtcblx0XHRcdFx0fSAvLyBDdXN0b20gZXZlbnRzXG5cdFx0XHRcdC8vIENoZWNrIHBpbmNoelxuXG5cblx0XHRcdFx0Y29uc3QgaW5kZXhUaXAgPSBoYW5kLmpvaW50c1snaW5kZXgtZmluZ2VyLXRpcCddO1xuXHRcdFx0XHRjb25zdCB0aHVtYlRpcCA9IGhhbmQuam9pbnRzWyd0aHVtYi10aXAnXTtcblx0XHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBpbmRleFRpcC5wb3NpdGlvbi5kaXN0YW5jZVRvKHRodW1iVGlwLnBvc2l0aW9uKTtcblx0XHRcdFx0Y29uc3QgZGlzdGFuY2VUb1BpbmNoID0gMC4wMjtcblx0XHRcdFx0Y29uc3QgdGhyZXNob2xkID0gMC4wMDU7XG5cblx0XHRcdFx0aWYgKGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyAmJiBkaXN0YW5jZSA+IGRpc3RhbmNlVG9QaW5jaCArIHRocmVzaG9sZCkge1xuXHRcdFx0XHRcdGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAncGluY2hlbmQnLFxuXHRcdFx0XHRcdFx0aGFuZGVkbmVzczogaW5wdXRTb3VyY2UuaGFuZGVkbmVzcyxcblx0XHRcdFx0XHRcdHRhcmdldDogdGhpc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFoYW5kLmlucHV0U3RhdGUucGluY2hpbmcgJiYgZGlzdGFuY2UgPD0gZGlzdGFuY2VUb1BpbmNoIC0gdGhyZXNob2xkKSB7XG5cdFx0XHRcdFx0aGFuZC5pbnB1dFN0YXRlLnBpbmNoaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3BpbmNoc3RhcnQnLFxuXHRcdFx0XHRcdFx0aGFuZGVkbmVzczogaW5wdXRTb3VyY2UuaGFuZGVkbmVzcyxcblx0XHRcdFx0XHRcdHRhcmdldDogdGhpc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoZ3JpcCAhPT0gbnVsbCAmJiBpbnB1dFNvdXJjZS5ncmlwU3BhY2UpIHtcblx0XHRcdFx0XHRncmlwUG9zZSA9IGZyYW1lLmdldFBvc2UoaW5wdXRTb3VyY2UuZ3JpcFNwYWNlLCByZWZlcmVuY2VTcGFjZSk7XG5cblx0XHRcdFx0XHRpZiAoZ3JpcFBvc2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGdyaXAubWF0cml4LmZyb21BcnJheShncmlwUG9zZS50cmFuc2Zvcm0ubWF0cml4KTtcblx0XHRcdFx0XHRcdGdyaXAubWF0cml4LmRlY29tcG9zZShncmlwLnBvc2l0aW9uLCBncmlwLnJvdGF0aW9uLCBncmlwLnNjYWxlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGdyaXBQb3NlLmxpbmVhclZlbG9jaXR5KSB7XG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzTGluZWFyVmVsb2NpdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRncmlwLmxpbmVhclZlbG9jaXR5LmNvcHkoZ3JpcFBvc2UubGluZWFyVmVsb2NpdHkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z3JpcC5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoZ3JpcFBvc2UuYW5ndWxhclZlbG9jaXR5KSB7XG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzQW5ndWxhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Z3JpcC5hbmd1bGFyVmVsb2NpdHkuY29weShncmlwUG9zZS5hbmd1bGFyVmVsb2NpdHkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z3JpcC5oYXNBbmd1bGFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0UmF5ICE9PSBudWxsKSB7XG5cdFx0XHR0YXJnZXRSYXkudmlzaWJsZSA9IGlucHV0UG9zZSAhPT0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoZ3JpcCAhPT0gbnVsbCkge1xuXHRcdFx0Z3JpcC52aXNpYmxlID0gZ3JpcFBvc2UgIT09IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGhhbmQgIT09IG51bGwpIHtcblx0XHRcdGhhbmQudmlzaWJsZSA9IGhhbmRQb3NlICE9PSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuY2xhc3MgRGVwdGhUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHR5cGUsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGZvcm1hdCkge1xuXHRcdGZvcm1hdCA9IGZvcm1hdCAhPT0gdW5kZWZpbmVkID8gZm9ybWF0IDogRGVwdGhGb3JtYXQ7XG5cblx0XHRpZiAoZm9ybWF0ICE9PSBEZXB0aEZvcm1hdCAmJiBmb3JtYXQgIT09IERlcHRoU3RlbmNpbEZvcm1hdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCcpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgZm9ybWF0ID09PSBEZXB0aEZvcm1hdCkgdHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgZm9ybWF0ID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQpIHR5cGUgPSBVbnNpZ25lZEludDI0OFR5cGU7XG5cdFx0c3VwZXIobnVsbCwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5KTtcblx0XHR0aGlzLmltYWdlID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHRcblx0XHR9O1xuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtYWdGaWx0ZXIgOiBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtaW5GaWx0ZXIgOiBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHR9XG5cbn1cblxuRGVwdGhUZXh0dXJlLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIFdlYlhSTWFuYWdlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKHJlbmRlcmVyLCBnbCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGxldCBzZXNzaW9uID0gbnVsbDtcblx0XHRsZXQgZnJhbWVidWZmZXJTY2FsZUZhY3RvciA9IDEuMDtcblx0XHRsZXQgcmVmZXJlbmNlU3BhY2UgPSBudWxsO1xuXHRcdGxldCByZWZlcmVuY2VTcGFjZVR5cGUgPSAnbG9jYWwtZmxvb3InO1xuXHRcdGNvbnN0IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHJlbmRlcmVyLmV4dGVuc2lvbnMuaGFzKCdXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUnKTtcblx0XHRsZXQgcG9zZSA9IG51bGw7XG5cdFx0bGV0IGdsQmluZGluZyA9IG51bGw7XG5cdFx0bGV0IGdsUHJvakxheWVyID0gbnVsbDtcblx0XHRsZXQgZ2xCYXNlTGF5ZXIgPSBudWxsO1xuXHRcdGxldCBpc011bHRpc2FtcGxlID0gZmFsc2U7XG5cdFx0bGV0IHhyRnJhbWUgPSBudWxsO1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpO1xuXHRcdGxldCBpbml0aWFsUmVuZGVyVGFyZ2V0ID0gbnVsbDtcblx0XHRsZXQgbmV3UmVuZGVyVGFyZ2V0ID0gbnVsbDtcblx0XHRjb25zdCBjb250cm9sbGVycyA9IFtdO1xuXHRcdGNvbnN0IGlucHV0U291cmNlc01hcCA9IG5ldyBNYXAoKTsgLy9cblxuXHRcdGNvbnN0IGNhbWVyYUwgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHRjYW1lcmFMLmxheWVycy5lbmFibGUoMSk7XG5cdFx0Y2FtZXJhTC52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0Y29uc3QgY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdGNhbWVyYVIubGF5ZXJzLmVuYWJsZSgyKTtcblx0XHRjYW1lcmFSLnZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKTtcblx0XHRjb25zdCBjYW1lcmFzID0gW2NhbWVyYUwsIGNhbWVyYVJdO1xuXHRcdGNvbnN0IGNhbWVyYVZSID0gbmV3IEFycmF5Q2FtZXJhKCk7XG5cdFx0Y2FtZXJhVlIubGF5ZXJzLmVuYWJsZSgxKTtcblx0XHRjYW1lcmFWUi5sYXllcnMuZW5hYmxlKDIpO1xuXHRcdGxldCBfY3VycmVudERlcHRoTmVhciA9IG51bGw7XG5cdFx0bGV0IF9jdXJyZW50RGVwdGhGYXIgPSBudWxsOyAvL1xuXG5cdFx0dGhpcy5jYW1lcmFBdXRvVXBkYXRlID0gdHJ1ZTtcblx0XHR0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHR0aGlzLmlzUHJlc2VudGluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5nZXRDb250cm9sbGVyID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRsZXQgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzW2luZGV4XTtcblxuXHRcdFx0aWYgKGNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250cm9sbGVyID0gbmV3IFdlYlhSQ29udHJvbGxlcigpO1xuXHRcdFx0XHRjb250cm9sbGVyc1tpbmRleF0gPSBjb250cm9sbGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbGxlci5nZXRUYXJnZXRSYXlTcGFjZSgpO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldENvbnRyb2xsZXJHcmlwID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRsZXQgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzW2luZGV4XTtcblxuXHRcdFx0aWYgKGNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250cm9sbGVyID0gbmV3IFdlYlhSQ29udHJvbGxlcigpO1xuXHRcdFx0XHRjb250cm9sbGVyc1tpbmRleF0gPSBjb250cm9sbGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbGxlci5nZXRHcmlwU3BhY2UoKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRIYW5kID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRsZXQgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzW2luZGV4XTtcblxuXHRcdFx0aWYgKGNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250cm9sbGVyID0gbmV3IFdlYlhSQ29udHJvbGxlcigpO1xuXHRcdFx0XHRjb250cm9sbGVyc1tpbmRleF0gPSBjb250cm9sbGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbGxlci5nZXRIYW5kU3BhY2UoKTtcblx0XHR9OyAvL1xuXG5cblx0XHRmdW5jdGlvbiBvblNlc3Npb25FdmVudChldmVudCkge1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGlucHV0U291cmNlc01hcC5nZXQoZXZlbnQuaW5wdXRTb3VyY2UpO1xuXG5cdFx0XHRpZiAoY29udHJvbGxlcikge1xuXHRcdFx0XHRjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdHR5cGU6IGV2ZW50LnR5cGUsXG5cdFx0XHRcdFx0ZGF0YTogZXZlbnQuaW5wdXRTb3VyY2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25TZXNzaW9uRW5kKCkge1xuXHRcdFx0aW5wdXRTb3VyY2VzTWFwLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIsIGlucHV0U291cmNlKSB7XG5cdFx0XHRcdGNvbnRyb2xsZXIuZGlzY29ubmVjdChpbnB1dFNvdXJjZSk7XG5cdFx0XHR9KTtcblx0XHRcdGlucHV0U291cmNlc01hcC5jbGVhcigpO1xuXHRcdFx0X2N1cnJlbnREZXB0aE5lYXIgPSBudWxsO1xuXHRcdFx0X2N1cnJlbnREZXB0aEZhciA9IG51bGw7IC8vIHJlc3RvcmUgZnJhbWVidWZmZXIvcmVuZGVyaW5nIHN0YXRlXG5cblx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChpbml0aWFsUmVuZGVyVGFyZ2V0KTtcblx0XHRcdGdsQmFzZUxheWVyID0gbnVsbDtcblx0XHRcdGdsUHJvakxheWVyID0gbnVsbDtcblx0XHRcdGdsQmluZGluZyA9IG51bGw7XG5cdFx0XHRzZXNzaW9uID0gbnVsbDtcblx0XHRcdG5ld1JlbmRlclRhcmdldCA9IG51bGw7IC8vXG5cblx0XHRcdGFuaW1hdGlvbi5zdG9wKCk7XG5cdFx0XHRzY29wZS5pc1ByZXNlbnRpbmcgPSBmYWxzZTtcblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHR0eXBlOiAnc2Vzc2lvbmVuZCdcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RnJhbWVidWZmZXJTY2FsZUZhY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0ZnJhbWVidWZmZXJTY2FsZUZhY3RvciA9IHZhbHVlO1xuXG5cdFx0XHRpZiAoc2NvcGUuaXNQcmVzZW50aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuJyk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRyZWZlcmVuY2VTcGFjZVR5cGUgPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHNjb3BlLmlzUHJlc2VudGluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLicpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmdldFJlZmVyZW5jZVNwYWNlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHJlZmVyZW5jZVNwYWNlO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldEJhc2VMYXllciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBnbFByb2pMYXllciAhPT0gbnVsbCA/IGdsUHJvakxheWVyIDogZ2xCYXNlTGF5ZXI7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0QmluZGluZyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBnbEJpbmRpbmc7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4geHJGcmFtZTtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHNlc3Npb247XG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0U2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0c2Vzc2lvbiA9IHZhbHVlO1xuXG5cdFx0XHRpZiAoc2Vzc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRpbml0aWFsUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0Jywgb25TZXNzaW9uRXZlbnQpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdHN0YXJ0Jywgb25TZXNzaW9uRXZlbnQpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGVuZCcsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzcXVlZXplJywgb25TZXNzaW9uRXZlbnQpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NxdWVlemVzdGFydCcsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzcXVlZXplZW5kJywgb25TZXNzaW9uRXZlbnQpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsIG9uU2Vzc2lvbkVuZCk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXRzb3VyY2VzY2hhbmdlJywgb25JbnB1dFNvdXJjZXNDaGFuZ2UpO1xuXG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzLnhyQ29tcGF0aWJsZSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGF3YWl0IGdsLm1ha2VYUkNvbXBhdGlibGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZXNzaW9uLnJlbmRlclN0YXRlLmxheWVycyA9PT0gdW5kZWZpbmVkIHx8IHJlbmRlcmVyLmNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRjb25zdCBsYXllckluaXQgPSB7XG5cdFx0XHRcdFx0XHRhbnRpYWxpYXM6IHNlc3Npb24ucmVuZGVyU3RhdGUubGF5ZXJzID09PSB1bmRlZmluZWQgPyBhdHRyaWJ1dGVzLmFudGlhbGlhcyA6IHRydWUsXG5cdFx0XHRcdFx0XHRhbHBoYTogYXR0cmlidXRlcy5hbHBoYSxcblx0XHRcdFx0XHRcdGRlcHRoOiBhdHRyaWJ1dGVzLmRlcHRoLFxuXHRcdFx0XHRcdFx0c3RlbmNpbDogYXR0cmlidXRlcy5zdGVuY2lsLFxuXHRcdFx0XHRcdFx0ZnJhbWVidWZmZXJTY2FsZUZhY3RvcjogZnJhbWVidWZmZXJTY2FsZUZhY3RvclxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Z2xCYXNlTGF5ZXIgPSBuZXcgWFJXZWJHTExheWVyKHNlc3Npb24sIGdsLCBsYXllckluaXQpO1xuXHRcdFx0XHRcdHNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoe1xuXHRcdFx0XHRcdFx0YmFzZUxheWVyOiBnbEJhc2VMYXllclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG5ld1JlbmRlclRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldChnbEJhc2VMYXllci5mcmFtZWJ1ZmZlcldpZHRoLCBnbEJhc2VMYXllci5mcmFtZWJ1ZmZlckhlaWdodCwge1xuXHRcdFx0XHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0LFxuXHRcdFx0XHRcdFx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0XHRcdGVuY29kaW5nOiByZW5kZXJlci5vdXRwdXRFbmNvZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlzTXVsdGlzYW1wbGUgPSBhdHRyaWJ1dGVzLmFudGlhbGlhcztcblx0XHRcdFx0XHRsZXQgZGVwdGhGb3JtYXQgPSBudWxsO1xuXHRcdFx0XHRcdGxldCBkZXB0aFR5cGUgPSBudWxsO1xuXHRcdFx0XHRcdGxldCBnbERlcHRoRm9ybWF0ID0gbnVsbDtcblxuXHRcdFx0XHRcdGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7XG5cdFx0XHRcdFx0XHRnbERlcHRoRm9ybWF0ID0gYXR0cmlidXRlcy5zdGVuY2lsID8gZ2wuREVQVEgyNF9TVEVOQ0lMOCA6IGdsLkRFUFRIX0NPTVBPTkVOVDI0O1xuXHRcdFx0XHRcdFx0ZGVwdGhGb3JtYXQgPSBhdHRyaWJ1dGVzLnN0ZW5jaWwgPyBEZXB0aFN0ZW5jaWxGb3JtYXQgOiBEZXB0aEZvcm1hdDtcblx0XHRcdFx0XHRcdGRlcHRoVHlwZSA9IGF0dHJpYnV0ZXMuc3RlbmNpbCA/IFVuc2lnbmVkSW50MjQ4VHlwZSA6IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByb2plY3Rpb25sYXllckluaXQgPSB7XG5cdFx0XHRcdFx0XHRjb2xvckZvcm1hdDogcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGdsLlNSR0I4X0FMUEhBOCA6IGdsLlJHQkE4LFxuXHRcdFx0XHRcdFx0ZGVwdGhGb3JtYXQ6IGdsRGVwdGhGb3JtYXQsXG5cdFx0XHRcdFx0XHRzY2FsZUZhY3RvcjogZnJhbWVidWZmZXJTY2FsZUZhY3RvclxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Z2xCaW5kaW5nID0gbmV3IFhSV2ViR0xCaW5kaW5nKHNlc3Npb24sIGdsKTtcblx0XHRcdFx0XHRnbFByb2pMYXllciA9IGdsQmluZGluZy5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIocHJvamVjdGlvbmxheWVySW5pdCk7XG5cdFx0XHRcdFx0c2Vzc2lvbi51cGRhdGVSZW5kZXJTdGF0ZSh7XG5cdFx0XHRcdFx0XHRsYXllcnM6IFtnbFByb2pMYXllcl1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChpc011bHRpc2FtcGxlKSB7XG5cdFx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldChnbFByb2pMYXllci50ZXh0dXJlV2lkdGgsIGdsUHJvakxheWVyLnRleHR1cmVIZWlnaHQsIHtcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0LFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBVbnNpZ25lZEJ5dGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRkZXB0aFRleHR1cmU6IG5ldyBEZXB0aFRleHR1cmUoZ2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLCBnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LCBkZXB0aFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGRlcHRoRm9ybWF0KSxcblx0XHRcdFx0XHRcdFx0c3RlbmNpbEJ1ZmZlcjogYXR0cmlidXRlcy5zdGVuY2lsLFxuXHRcdFx0XHRcdFx0XHRpZ25vcmVEZXB0aDogZ2xQcm9qTGF5ZXIuaWdub3JlRGVwdGhWYWx1ZXMsXG5cdFx0XHRcdFx0XHRcdHVzZVJlbmRlclRvVGV4dHVyZTogaGFzTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlLFxuXHRcdFx0XHRcdFx0XHRlbmNvZGluZzogcmVuZGVyZXIub3V0cHV0RW5jb2Rpbmdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoZ2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLCBnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LCB7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdFx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0XHRcdFx0ZGVwdGhUZXh0dXJlOiBuZXcgRGVwdGhUZXh0dXJlKGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCwgZ2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCwgZGVwdGhUeXBlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBkZXB0aEZvcm1hdCksXG5cdFx0XHRcdFx0XHRcdHN0ZW5jaWxCdWZmZXI6IGF0dHJpYnV0ZXMuc3RlbmNpbCxcblx0XHRcdFx0XHRcdFx0aWdub3JlRGVwdGg6IGdsUHJvakxheWVyLmlnbm9yZURlcHRoVmFsdWVzLFxuXHRcdFx0XHRcdFx0XHRlbmNvZGluZzogcmVuZGVyZXIub3V0cHV0RW5jb2Rpbmdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5ld1JlbmRlclRhcmdldC5pc1hSUmVuZGVyVGFyZ2V0ID0gdHJ1ZTsgLy8gVE9ETyBSZW1vdmUgdGhpcyB3aGVuIHBvc3NpYmxlLCBzZWUgIzIzMjc4XG5cdFx0XHRcdC8vIFNldCBmb3ZlYXRpb24gdG8gbWF4aW11bS5cblxuXHRcdFx0XHR0aGlzLnNldEZvdmVhdGlvbigxLjApO1xuXHRcdFx0XHRyZWZlcmVuY2VTcGFjZSA9IGF3YWl0IHNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKHJlZmVyZW5jZVNwYWNlVHlwZSk7XG5cdFx0XHRcdGFuaW1hdGlvbi5zZXRDb250ZXh0KHNlc3Npb24pO1xuXHRcdFx0XHRhbmltYXRpb24uc3RhcnQoKTtcblx0XHRcdFx0c2NvcGUuaXNQcmVzZW50aW5nID0gdHJ1ZTtcblx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ3Nlc3Npb25zdGFydCdcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGZ1bmN0aW9uIG9uSW5wdXRTb3VyY2VzQ2hhbmdlKGV2ZW50KSB7XG5cdFx0XHRjb25zdCBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0U291cmNlczsgLy8gQXNzaWduIGlucHV0U291cmNlcyB0byBhdmFpbGFibGUgY29udHJvbGxlcnNcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sbGVycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpbnB1dFNvdXJjZXNNYXAuc2V0KGlucHV0U291cmNlc1tpXSwgY29udHJvbGxlcnNbaV0pO1xuXHRcdFx0fSAvLyBOb3RpZnkgZGlzY29ubmVjdGVkXG5cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5yZW1vdmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGlucHV0U291cmNlID0gZXZlbnQucmVtb3ZlZFtpXTtcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGlucHV0U291cmNlc01hcC5nZXQoaW5wdXRTb3VyY2UpO1xuXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXNjb25uZWN0ZWQnLFxuXHRcdFx0XHRcdFx0ZGF0YTogaW5wdXRTb3VyY2Vcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpbnB1dFNvdXJjZXNNYXAuZGVsZXRlKGlucHV0U291cmNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBOb3RpZnkgY29ubmVjdGVkXG5cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5hZGRlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGV2ZW50LmFkZGVkW2ldO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gaW5wdXRTb3VyY2VzTWFwLmdldChpbnB1dFNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2Nvbm5lY3RlZCcsXG5cdFx0XHRcdFx0XHRkYXRhOiBpbnB1dFNvdXJjZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSAvL1xuXG5cblx0XHRjb25zdCBjYW1lcmFMUG9zID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBjYW1lcmFSUG9zID0gbmV3IFZlY3RvcjMoKTtcblx0XHQvKipcblx0XHQgKiBBc3N1bWVzIDIgY2FtZXJhcyB0aGF0IGFyZSBwYXJhbGxlbCBhbmQgc2hhcmUgYW4gWC1heGlzLCBhbmQgdGhhdFxuXHRcdCAqIHRoZSBjYW1lcmFzJyBwcm9qZWN0aW9uIGFuZCB3b3JsZCBtYXRyaWNlcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuXG5cdFx0ICogQW5kIHRoYXQgbmVhciBhbmQgZmFyIHBsYW5lcyBhcmUgaWRlbnRpY2FsIGZvciBib3RoIGNhbWVyYXMuXG5cdFx0ICogVmlzdWFsaXphdGlvbiBvZiB0aGlzIHRlY2huaXF1ZTogaHR0cHM6Ly9jb21wdXRlcmdyYXBoaWNzLnN0YWNrZXhjaGFuZ2UuY29tL2EvNDc2NVxuXHRcdCAqL1xuXG5cdFx0ZnVuY3Rpb24gc2V0UHJvamVjdGlvbkZyb21VbmlvbihjYW1lcmEsIGNhbWVyYUwsIGNhbWVyYVIpIHtcblx0XHRcdGNhbWVyYUxQb3Muc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYUwubWF0cml4V29ybGQpO1xuXHRcdFx0Y2FtZXJhUlBvcy5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhUi5tYXRyaXhXb3JsZCk7XG5cdFx0XHRjb25zdCBpcGQgPSBjYW1lcmFMUG9zLmRpc3RhbmNlVG8oY2FtZXJhUlBvcyk7XG5cdFx0XHRjb25zdCBwcm9qTCA9IGNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cztcblx0XHRcdGNvbnN0IHByb2pSID0gY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzOyAvLyBWUiBzeXN0ZW1zIHdpbGwgaGF2ZSBpZGVudGljYWwgZmFyIGFuZCBuZWFyIHBsYW5lcywgYW5kXG5cdFx0XHQvLyBtb3N0IGxpa2VseSBpZGVudGljYWwgdG9wIGFuZCBib3R0b20gZnJ1c3R1bSBleHRlbnRzLlxuXHRcdFx0Ly8gVXNlIHRoZSBsZWZ0IGNhbWVyYSBmb3IgdGhlc2UgdmFsdWVzLlxuXG5cdFx0XHRjb25zdCBuZWFyID0gcHJvakxbMTRdIC8gKHByb2pMWzEwXSAtIDEpO1xuXHRcdFx0Y29uc3QgZmFyID0gcHJvakxbMTRdIC8gKHByb2pMWzEwXSArIDEpO1xuXHRcdFx0Y29uc3QgdG9wRm92ID0gKHByb2pMWzldICsgMSkgLyBwcm9qTFs1XTtcblx0XHRcdGNvbnN0IGJvdHRvbUZvdiA9IChwcm9qTFs5XSAtIDEpIC8gcHJvakxbNV07XG5cdFx0XHRjb25zdCBsZWZ0Rm92ID0gKHByb2pMWzhdIC0gMSkgLyBwcm9qTFswXTtcblx0XHRcdGNvbnN0IHJpZ2h0Rm92ID0gKHByb2pSWzhdICsgMSkgLyBwcm9qUlswXTtcblx0XHRcdGNvbnN0IGxlZnQgPSBuZWFyICogbGVmdEZvdjtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gbmVhciAqIHJpZ2h0Rm92OyAvLyBDYWxjdWxhdGUgdGhlIG5ldyBjYW1lcmEncyBwb3NpdGlvbiBvZmZzZXQgZnJvbSB0aGVcblx0XHRcdC8vIGxlZnQgY2FtZXJhLiB4T2Zmc2V0IHNob3VsZCBiZSByb3VnaGx5IGhhbGYgYGlwZGAuXG5cblx0XHRcdGNvbnN0IHpPZmZzZXQgPSBpcGQgLyAoLWxlZnRGb3YgKyByaWdodEZvdik7XG5cdFx0XHRjb25zdCB4T2Zmc2V0ID0gek9mZnNldCAqIC1sZWZ0Rm92OyAvLyBUT0RPOiBCZXR0ZXIgd2F5IHRvIGFwcGx5IHRoaXMgb2Zmc2V0P1xuXG5cdFx0XHRjYW1lcmFMLm1hdHJpeFdvcmxkLmRlY29tcG9zZShjYW1lcmEucG9zaXRpb24sIGNhbWVyYS5xdWF0ZXJuaW9uLCBjYW1lcmEuc2NhbGUpO1xuXHRcdFx0Y2FtZXJhLnRyYW5zbGF0ZVgoeE9mZnNldCk7XG5cdFx0XHRjYW1lcmEudHJhbnNsYXRlWih6T2Zmc2V0KTtcblx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5jb21wb3NlKGNhbWVyYS5wb3NpdGlvbiwgY2FtZXJhLnF1YXRlcm5pb24sIGNhbWVyYS5zY2FsZSk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoY2FtZXJhLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTsgLy8gRmluZCB0aGUgdW5pb24gb2YgdGhlIGZydXN0dW0gdmFsdWVzIG9mIHRoZSBjYW1lcmFzIGFuZCBzY2FsZVxuXHRcdFx0Ly8gdGhlIHZhbHVlcyBzbyB0aGF0IHRoZSBuZWFyIHBsYW5lJ3MgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlIGluIHdvcmxkIHNwYWNlLFxuXHRcdFx0Ly8gYWx0aG91Z2ggbXVzdCBub3cgYmUgcmVsYXRpdmUgdG8gdGhlIG5ldyB1bmlvbiBjYW1lcmEuXG5cblx0XHRcdGNvbnN0IG5lYXIyID0gbmVhciArIHpPZmZzZXQ7XG5cdFx0XHRjb25zdCBmYXIyID0gZmFyICsgek9mZnNldDtcblx0XHRcdGNvbnN0IGxlZnQyID0gbGVmdCAtIHhPZmZzZXQ7XG5cdFx0XHRjb25zdCByaWdodDIgPSByaWdodCArIChpcGQgLSB4T2Zmc2V0KTtcblx0XHRcdGNvbnN0IHRvcDIgPSB0b3BGb3YgKiBmYXIgLyBmYXIyICogbmVhcjI7XG5cdFx0XHRjb25zdCBib3R0b20yID0gYm90dG9tRm92ICogZmFyIC8gZmFyMiAqIG5lYXIyO1xuXHRcdFx0Y2FtZXJhLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGxlZnQyLCByaWdodDIsIHRvcDIsIGJvdHRvbTIsIG5lYXIyLCBmYXIyKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB1cGRhdGVDYW1lcmEoY2FtZXJhLCBwYXJlbnQpIHtcblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkLmNvcHkoY2FtZXJhLm1hdHJpeCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYW1lcmEubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhwYXJlbnQubWF0cml4V29ybGQsIGNhbWVyYS5tYXRyaXgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoY2FtZXJhLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0XHR9XG5cblx0XHR0aGlzLnVwZGF0ZUNhbWVyYSA9IGZ1bmN0aW9uIChjYW1lcmEpIHtcblx0XHRcdGlmIChzZXNzaW9uID09PSBudWxsKSByZXR1cm47XG5cdFx0XHRjYW1lcmFWUi5uZWFyID0gY2FtZXJhUi5uZWFyID0gY2FtZXJhTC5uZWFyID0gY2FtZXJhLm5lYXI7XG5cdFx0XHRjYW1lcmFWUi5mYXIgPSBjYW1lcmFSLmZhciA9IGNhbWVyYUwuZmFyID0gY2FtZXJhLmZhcjtcblxuXHRcdFx0aWYgKF9jdXJyZW50RGVwdGhOZWFyICE9PSBjYW1lcmFWUi5uZWFyIHx8IF9jdXJyZW50RGVwdGhGYXIgIT09IGNhbWVyYVZSLmZhcikge1xuXHRcdFx0XHQvLyBOb3RlIHRoYXQgdGhlIG5ldyByZW5kZXJTdGF0ZSB3b24ndCBhcHBseSB1bnRpbCB0aGUgbmV4dCBmcmFtZS4gU2VlICMxODMyMFxuXHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKHtcblx0XHRcdFx0XHRkZXB0aE5lYXI6IGNhbWVyYVZSLm5lYXIsXG5cdFx0XHRcdFx0ZGVwdGhGYXI6IGNhbWVyYVZSLmZhclxuXHRcdFx0XHR9KTtcblx0XHRcdFx0X2N1cnJlbnREZXB0aE5lYXIgPSBjYW1lcmFWUi5uZWFyO1xuXHRcdFx0XHRfY3VycmVudERlcHRoRmFyID0gY2FtZXJhVlIuZmFyO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjYW1lcmEucGFyZW50O1xuXHRcdFx0Y29uc3QgY2FtZXJhcyA9IGNhbWVyYVZSLmNhbWVyYXM7XG5cdFx0XHR1cGRhdGVDYW1lcmEoY2FtZXJhVlIsIHBhcmVudCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2FtZXJhcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR1cGRhdGVDYW1lcmEoY2FtZXJhc1tpXSwgcGFyZW50KTtcblx0XHRcdH1cblxuXHRcdFx0Y2FtZXJhVlIubWF0cml4V29ybGQuZGVjb21wb3NlKGNhbWVyYVZSLnBvc2l0aW9uLCBjYW1lcmFWUi5xdWF0ZXJuaW9uLCBjYW1lcmFWUi5zY2FsZSk7IC8vIHVwZGF0ZSB1c2VyIGNhbWVyYSBhbmQgaXRzIGNoaWxkcmVuXG5cblx0XHRcdGNhbWVyYS5wb3NpdGlvbi5jb3B5KGNhbWVyYVZSLnBvc2l0aW9uKTtcblx0XHRcdGNhbWVyYS5xdWF0ZXJuaW9uLmNvcHkoY2FtZXJhVlIucXVhdGVybmlvbik7XG5cdFx0XHRjYW1lcmEuc2NhbGUuY29weShjYW1lcmFWUi5zY2FsZSk7XG5cdFx0XHRjYW1lcmEubWF0cml4LmNvcHkoY2FtZXJhVlIubWF0cml4KTtcblx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5jb3B5KGNhbWVyYVZSLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gY2FtZXJhLmNoaWxkcmVuO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjaGlsZHJlbltpXS51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcblx0XHRcdH0gLy8gdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IGZvciBwcm9wZXIgdmlldyBmcnVzdHVtIGN1bGxpbmdcblxuXG5cdFx0XHRpZiAoY2FtZXJhcy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0c2V0UHJvamVjdGlvbkZyb21VbmlvbihjYW1lcmFWUiwgY2FtZXJhTCwgY2FtZXJhUik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBhc3N1bWUgc2luZ2xlIGNhbWVyYSBzZXR1cCAoQVIpXG5cdFx0XHRcdGNhbWVyYVZSLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmFMLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmdldENhbWVyYSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjYW1lcmFWUjtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRGb3ZlYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoZ2xQcm9qTGF5ZXIgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGdsUHJvakxheWVyLmZpeGVkRm92ZWF0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZ2xCYXNlTGF5ZXIgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGdsQmFzZUxheWVyLmZpeGVkRm92ZWF0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH07XG5cblx0XHR0aGlzLnNldEZvdmVhdGlvbiA9IGZ1bmN0aW9uIChmb3ZlYXRpb24pIHtcblx0XHRcdC8vIDAgPSBubyBmb3ZlYXRpb24gPSBmdWxsIHJlc29sdXRpb25cblx0XHRcdC8vIDEgPSBtYXhpbXVtIGZvdmVhdGlvbiA9IHRoZSBlZGdlcyByZW5kZXIgYXQgbG93ZXIgcmVzb2x1dGlvblxuXHRcdFx0aWYgKGdsUHJvakxheWVyICE9PSBudWxsKSB7XG5cdFx0XHRcdGdsUHJvakxheWVyLmZpeGVkRm92ZWF0aW9uID0gZm92ZWF0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZ2xCYXNlTGF5ZXIgIT09IG51bGwgJiYgZ2xCYXNlTGF5ZXIuZml4ZWRGb3ZlYXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRnbEJhc2VMYXllci5maXhlZEZvdmVhdGlvbiA9IGZvdmVhdGlvbjtcblx0XHRcdH1cblx0XHR9OyAvLyBBbmltYXRpb24gTG9vcFxuXG5cblx0XHRsZXQgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrID0gbnVsbDtcblxuXHRcdGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUodGltZSwgZnJhbWUpIHtcblx0XHRcdHBvc2UgPSBmcmFtZS5nZXRWaWV3ZXJQb3NlKHJlZmVyZW5jZVNwYWNlKTtcblx0XHRcdHhyRnJhbWUgPSBmcmFtZTtcblxuXHRcdFx0aWYgKHBvc2UgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3Qgdmlld3MgPSBwb3NlLnZpZXdzO1xuXG5cdFx0XHRcdGlmIChnbEJhc2VMYXllciAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG5ld1JlbmRlclRhcmdldCwgZ2xCYXNlTGF5ZXIuZnJhbWVidWZmZXIpO1xuXHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGNhbWVyYVZSTmVlZHNVcGRhdGUgPSBmYWxzZTsgLy8gY2hlY2sgaWYgaXQncyBuZWNlc3NhcnkgdG8gcmVidWlsZCBjYW1lcmFWUidzIGNhbWVyYSBsaXN0XG5cblx0XHRcdFx0aWYgKHZpZXdzLmxlbmd0aCAhPT0gY2FtZXJhVlIuY2FtZXJhcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjYW1lcmFWUi5jYW1lcmFzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0Y2FtZXJhVlJOZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZpZXdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmlldyA9IHZpZXdzW2ldO1xuXHRcdFx0XHRcdGxldCB2aWV3cG9ydCA9IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoZ2xCYXNlTGF5ZXIgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHZpZXdwb3J0ID0gZ2xCYXNlTGF5ZXIuZ2V0Vmlld3BvcnQodmlldyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdsU3ViSW1hZ2UgPSBnbEJpbmRpbmcuZ2V0Vmlld1N1YkltYWdlKGdsUHJvakxheWVyLCB2aWV3KTtcblx0XHRcdFx0XHRcdHZpZXdwb3J0ID0gZ2xTdWJJbWFnZS52aWV3cG9ydDsgLy8gRm9yIHNpZGUtYnktc2lkZSBwcm9qZWN0aW9uLCB3ZSBvbmx5IHByb2R1Y2UgYSBzaW5nbGUgdGV4dHVyZSBmb3IgYm90aCBleWVzLlxuXG5cdFx0XHRcdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyhuZXdSZW5kZXJUYXJnZXQsIGdsU3ViSW1hZ2UuY29sb3JUZXh0dXJlLCBnbFByb2pMYXllci5pZ25vcmVEZXB0aFZhbHVlcyA/IHVuZGVmaW5lZCA6IGdsU3ViSW1hZ2UuZGVwdGhTdGVuY2lsVGV4dHVyZSk7XG5cdFx0XHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGNhbWVyYSA9IGNhbWVyYXNbaV07XG5cdFx0XHRcdFx0Y2FtZXJhLm1hdHJpeC5mcm9tQXJyYXkodmlldy50cmFuc2Zvcm0ubWF0cml4KTtcblx0XHRcdFx0XHRjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkodmlldy5wcm9qZWN0aW9uTWF0cml4KTtcblx0XHRcdFx0XHRjYW1lcmEudmlld3BvcnQuc2V0KHZpZXdwb3J0LngsIHZpZXdwb3J0LnksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpO1xuXG5cdFx0XHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0XHRcdGNhbWVyYVZSLm1hdHJpeC5jb3B5KGNhbWVyYS5tYXRyaXgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChjYW1lcmFWUk5lZWRzVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjYW1lcmFWUi5jYW1lcmFzLnB1c2goY2FtZXJhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gLy9cblxuXG5cdFx0XHRjb25zdCBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0U291cmNlcztcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sbGVycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gY29udHJvbGxlcnNbaV07XG5cdFx0XHRcdGNvbnN0IGlucHV0U291cmNlID0gaW5wdXRTb3VyY2VzW2ldO1xuXHRcdFx0XHRjb250cm9sbGVyLnVwZGF0ZShpbnB1dFNvdXJjZSwgZnJhbWUsIHJlZmVyZW5jZVNwYWNlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjaykgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrKHRpbWUsIGZyYW1lKTtcblx0XHRcdHhyRnJhbWUgPSBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBXZWJHTEFuaW1hdGlvbigpO1xuXHRcdGFuaW1hdGlvbi5zZXRBbmltYXRpb25Mb29wKG9uQW5pbWF0aW9uRnJhbWUpO1xuXG5cdFx0dGhpcy5zZXRBbmltYXRpb25Mb29wID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR9O1xuXG5cdFx0dGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge307XG5cdH1cblxufVxuXG5mdW5jdGlvbiBXZWJHTE1hdGVyaWFscyhwcm9wZXJ0aWVzKSB7XG5cdGZ1bmN0aW9uIHJlZnJlc2hGb2dVbmlmb3Jtcyh1bmlmb3JtcywgZm9nKSB7XG5cdFx0dW5pZm9ybXMuZm9nQ29sb3IudmFsdWUuY29weShmb2cuY29sb3IpO1xuXG5cdFx0aWYgKGZvZy5pc0ZvZykge1xuXHRcdFx0dW5pZm9ybXMuZm9nTmVhci52YWx1ZSA9IGZvZy5uZWFyO1xuXHRcdFx0dW5pZm9ybXMuZm9nRmFyLnZhbHVlID0gZm9nLmZhcjtcblx0XHR9IGVsc2UgaWYgKGZvZy5pc0ZvZ0V4cDIpIHtcblx0XHRcdHVuaWZvcm1zLmZvZ0RlbnNpdHkudmFsdWUgPSBmb2cuZGVuc2l0eTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoTWF0ZXJpYWxVbmlmb3Jtcyh1bmlmb3JtcywgbWF0ZXJpYWwsIHBpeGVsUmF0aW8sIGhlaWdodCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KSB7XG5cdFx0aWYgKG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0xhbWJlcnQodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaFRvb25NYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNUb29uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc1Bob25nKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblxuXHRcdFx0aWYgKG1hdGVyaWFsLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWwpIHtcblx0XHRcdFx0cmVmcmVzaFVuaWZvcm1zUGh5c2ljYWwodW5pZm9ybXMsIG1hdGVyaWFsLCB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaE1hdGNhcE1hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc01hdGNhcCh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoRGVwdGhNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNEZXB0aCh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNEaXN0YW5jZSh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoTm9ybWFsTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zTm9ybWFsKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc0xpbmVCYXNpY01hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNMaW5lKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc0xpbmVEYXNoZWRNYXRlcmlhbCkge1xuXHRcdFx0XHRyZWZyZXNoVW5pZm9ybXNEYXNoKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc1BvaW50c01hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNQb2ludHModW5pZm9ybXMsIG1hdGVyaWFsLCBwaXhlbFJhdGlvLCBoZWlnaHQpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNTcHJpdGVNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zU3ByaXRlcyh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCkge1xuXHRcdFx0dW5pZm9ybXMuY29sb3IudmFsdWUuY29weShtYXRlcmlhbC5jb2xvcik7XG5cdFx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwpIHtcblx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IGZhbHNlOyAvLyAjMTU1ODFcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cblx0XHRpZiAobWF0ZXJpYWwuY29sb3IpIHtcblx0XHRcdHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUuY29weShtYXRlcmlhbC5jb2xvcik7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlKSB7XG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZS52YWx1ZS5jb3B5KG1hdGVyaWFsLmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcihtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwubWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hbHBoYU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuc3BlY3VsYXJNYXApIHtcblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFyTWFwLnZhbHVlID0gbWF0ZXJpYWwuc3BlY3VsYXJNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmFscGhhVGVzdCA+IDApIHtcblx0XHRcdHVuaWZvcm1zLmFscGhhVGVzdC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZNYXAgPSBwcm9wZXJ0aWVzLmdldChtYXRlcmlhbCkuZW52TWFwO1xuXG5cdFx0aWYgKGVudk1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZW52TWFwLnZhbHVlID0gZW52TWFwO1xuXHRcdFx0dW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZSA9IGVudk1hcC5pc0N1YmVUZXh0dXJlICYmIGVudk1hcC5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlID8gLTEgOiAxO1xuXHRcdFx0dW5pZm9ybXMucmVmbGVjdGl2aXR5LnZhbHVlID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5O1xuXHRcdFx0dW5pZm9ybXMuaW9yLnZhbHVlID0gbWF0ZXJpYWwuaW9yO1xuXHRcdFx0dW5pZm9ybXMucmVmcmFjdGlvblJhdGlvLnZhbHVlID0gbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5saWdodE1hcCkge1xuXHRcdFx0dW5pZm9ybXMubGlnaHRNYXAudmFsdWUgPSBtYXRlcmlhbC5saWdodE1hcDtcblx0XHRcdHVuaWZvcm1zLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmFvTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5hb01hcC52YWx1ZSA9IG1hdGVyaWFsLmFvTWFwO1xuXHRcdFx0dW5pZm9ybXMuYW9NYXBJbnRlbnNpdHkudmFsdWUgPSBtYXRlcmlhbC5hb01hcEludGVuc2l0eTtcblx0XHR9IC8vIHV2IHJlcGVhdCBhbmQgb2Zmc2V0IHNldHRpbmcgcHJpb3JpdGllc1xuXHRcdC8vIDEuIGNvbG9yIG1hcFxuXHRcdC8vIDIuIHNwZWN1bGFyIG1hcFxuXHRcdC8vIDMuIGRpc3BsYWNlbWVudE1hcCBtYXBcblx0XHQvLyA0LiBub3JtYWwgbWFwXG5cdFx0Ly8gNS4gYnVtcCBtYXBcblx0XHQvLyA2LiByb3VnaG5lc3NNYXAgbWFwXG5cdFx0Ly8gNy4gbWV0YWxuZXNzTWFwIG1hcFxuXHRcdC8vIDguIGFscGhhTWFwIG1hcFxuXHRcdC8vIDkuIGVtaXNzaXZlTWFwIG1hcFxuXHRcdC8vIDEwLiBjbGVhcmNvYXQgbWFwXG5cdFx0Ly8gMTEuIGNsZWFyY29hdCBub3JtYWwgbWFwXG5cdFx0Ly8gMTIuIGNsZWFyY29hdCByb3VnaG5lc3NNYXAgbWFwXG5cdFx0Ly8gMTMuIHNwZWN1bGFyIGludGVuc2l0eSBtYXBcblx0XHQvLyAxNC4gc3BlY3VsYXIgdGludCBtYXBcblx0XHQvLyAxNS4gdHJhbnNtaXNzaW9uIG1hcFxuXHRcdC8vIDE2LiB0aGlja25lc3MgbWFwXG5cblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnNwZWN1bGFyTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5ub3JtYWxNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5idW1wTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnJvdWdobmVzc01hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnJvdWdobmVzc01hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLm1ldGFsbmVzc01hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm1ldGFsbmVzc01hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmFscGhhTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5lbWlzc2l2ZU1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuY2xlYXJjb2F0TWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuY2xlYXJjb2F0TWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwudGhpY2tuZXNzTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwudGhpY2tuZXNzTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuc2hlZW5Db2xvck1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNoZWVuQ29sb3JNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwO1xuXHRcdH1cblxuXHRcdGlmICh1dlNjYWxlTWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0XHRpZiAodXZTY2FsZU1hcC5pc1dlYkdMUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRcdHV2U2NhbGVNYXAgPSB1dlNjYWxlTWFwLnRleHR1cmU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1dlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dXZTY2FsZU1hcC51cGRhdGVNYXRyaXgoKTtcblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh1dlNjYWxlTWFwLm1hdHJpeCk7XG5cdFx0fSAvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXMgZm9yIHV2MlxuXHRcdC8vIDEuIGFvIG1hcFxuXHRcdC8vIDIuIGxpZ2h0IG1hcFxuXG5cblx0XHRsZXQgdXYyU2NhbGVNYXA7XG5cblx0XHRpZiAobWF0ZXJpYWwuYW9NYXApIHtcblx0XHRcdHV2MlNjYWxlTWFwID0gbWF0ZXJpYWwuYW9NYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5saWdodE1hcCkge1xuXHRcdFx0dXYyU2NhbGVNYXAgPSBtYXRlcmlhbC5saWdodE1hcDtcblx0XHR9XG5cblx0XHRpZiAodXYyU2NhbGVNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdGlmICh1djJTY2FsZU1hcC5pc1dlYkdMUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRcdHV2MlNjYWxlTWFwID0gdXYyU2NhbGVNYXAudGV4dHVyZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHV2MlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dXYyU2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KHV2MlNjYWxlTWFwLm1hdHJpeCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGluZSh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkobWF0ZXJpYWwuY29sb3IpO1xuXHRcdHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zRGFzaCh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHR1bmlmb3Jtcy5kYXNoU2l6ZS52YWx1ZSA9IG1hdGVyaWFsLmRhc2hTaXplO1xuXHRcdHVuaWZvcm1zLnRvdGFsU2l6ZS52YWx1ZSA9IG1hdGVyaWFsLmRhc2hTaXplICsgbWF0ZXJpYWwuZ2FwU2l6ZTtcblx0XHR1bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IG1hdGVyaWFsLnNjYWxlO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zUG9pbnRzKHVuaWZvcm1zLCBtYXRlcmlhbCwgcGl4ZWxSYXRpbywgaGVpZ2h0KSB7XG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KG1hdGVyaWFsLmNvbG9yKTtcblx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblx0XHR1bmlmb3Jtcy5zaXplLnZhbHVlID0gbWF0ZXJpYWwuc2l6ZSAqIHBpeGVsUmF0aW87XG5cdFx0dW5pZm9ybXMuc2NhbGUudmFsdWUgPSBoZWlnaHQgKiAwLjU7XG5cblx0XHRpZiAobWF0ZXJpYWwubWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5tYXAudmFsdWUgPSBtYXRlcmlhbC5tYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmFscGhhTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5hbHBoYU1hcC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hbHBoYVRlc3QgPiAwKSB7XG5cdFx0XHR1bmlmb3Jtcy5hbHBoYVRlc3QudmFsdWUgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cdFx0fSAvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXNcblx0XHQvLyAxLiBjb2xvciBtYXBcblx0XHQvLyAyLiBhbHBoYSBtYXBcblxuXG5cdFx0bGV0IHV2U2NhbGVNYXA7XG5cblx0XHRpZiAobWF0ZXJpYWwubWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuYWxwaGFNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblx0XHR9XG5cblx0XHRpZiAodXZTY2FsZU1hcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodXZTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHV2U2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkodXZTY2FsZU1hcC5tYXRyaXgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Nwcml0ZXModW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KG1hdGVyaWFsLmNvbG9yKTtcblx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblx0XHR1bmlmb3Jtcy5yb3RhdGlvbi52YWx1ZSA9IG1hdGVyaWFsLnJvdGF0aW9uO1xuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwubWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hbHBoYU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYWxwaGFUZXN0ID4gMCkge1xuXHRcdFx0dW5pZm9ybXMuYWxwaGFUZXN0LnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFUZXN0O1xuXHRcdH0gLy8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzXG5cdFx0Ly8gMS4gY29sb3IgbWFwXG5cdFx0Ly8gMi4gYWxwaGEgbWFwXG5cblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmFscGhhTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKHV2U2NhbGVNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHV2U2NhbGVNYXAubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR1dlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHV2U2NhbGVNYXAubWF0cml4KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNMYW1iZXJ0KHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdGlmIChtYXRlcmlhbC5lbWlzc2l2ZU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQaG9uZyh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHR1bmlmb3Jtcy5zcGVjdWxhci52YWx1ZS5jb3B5KG1hdGVyaWFsLnNwZWN1bGFyKTtcblx0XHR1bmlmb3Jtcy5zaGluaW5lc3MudmFsdWUgPSBNYXRoLm1heChtYXRlcmlhbC5zaGluaW5lc3MsIDFlLTQpOyAvLyB0byBwcmV2ZW50IHBvdyggMC4wLCAwLjAgKVxuXG5cdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5idW1wTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0xO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5ub3JtYWxNYXApIHtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobWF0ZXJpYWwubm9ybWFsU2NhbGUpO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zVG9vbih1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHRpZiAobWF0ZXJpYWwuZ3JhZGllbnRNYXApIHtcblx0XHRcdHVuaWZvcm1zLmdyYWRpZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZ3JhZGllbnRNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5idW1wTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0xO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5ub3JtYWxNYXApIHtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobWF0ZXJpYWwubm9ybWFsU2NhbGUpO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQodW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMucm91Z2huZXNzLnZhbHVlID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHVuaWZvcm1zLm1ldGFsbmVzcy52YWx1ZSA9IG1hdGVyaWFsLm1ldGFsbmVzcztcblxuXHRcdGlmIChtYXRlcmlhbC5yb3VnaG5lc3NNYXApIHtcblx0XHRcdHVuaWZvcm1zLnJvdWdobmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLnJvdWdobmVzc01hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubWV0YWxuZXNzTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5tZXRhbG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5idW1wTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0xO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5ub3JtYWxNYXApIHtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobWF0ZXJpYWwubm9ybWFsU2NhbGUpO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW52TWFwID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpLmVudk1hcDtcblxuXHRcdGlmIChlbnZNYXApIHtcblx0XHRcdC8vdW5pZm9ybXMuZW52TWFwLnZhbHVlID0gbWF0ZXJpYWwuZW52TWFwOyAvLyBwYXJ0IG9mIHVuaWZvcm1zIGNvbW1vblxuXHRcdFx0dW5pZm9ybXMuZW52TWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5O1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1BoeXNpY2FsKHVuaWZvcm1zLCBtYXRlcmlhbCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KSB7XG5cdFx0cmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR1bmlmb3Jtcy5pb3IudmFsdWUgPSBtYXRlcmlhbC5pb3I7IC8vIGFsc28gcGFydCBvZiB1bmlmb3JtcyBjb21tb25cblxuXHRcdGlmIChtYXRlcmlhbC5zaGVlbiA+IDApIHtcblx0XHRcdHVuaWZvcm1zLnNoZWVuQ29sb3IudmFsdWUuY29weShtYXRlcmlhbC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcihtYXRlcmlhbC5zaGVlbik7XG5cdFx0XHR1bmlmb3Jtcy5zaGVlblJvdWdobmVzcy52YWx1ZSA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWwuc2hlZW5Db2xvck1hcCkge1xuXHRcdFx0XHR1bmlmb3Jtcy5zaGVlbkNvbG9yTWFwLnZhbHVlID0gbWF0ZXJpYWwuc2hlZW5Db2xvck1hcDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwKSB7XG5cdFx0XHRcdHVuaWZvcm1zLnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmNsZWFyY29hdCA+IDApIHtcblx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdC52YWx1ZSA9IG1hdGVyaWFsLmNsZWFyY29hdDtcblx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZSA9IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcztcblxuXHRcdFx0aWYgKG1hdGVyaWFsLmNsZWFyY29hdE1hcCkge1xuXHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXRNYXAudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXRNYXA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApIHtcblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwKSB7XG5cdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpO1xuXHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXA7XG5cblx0XHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB7XG5cdFx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMCkge1xuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uLnZhbHVlID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uO1xuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZSA9IHRyYW5zbWlzc2lvblJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KHRyYW5zbWlzc2lvblJlbmRlclRhcmdldC53aWR0aCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cblx0XHRcdGlmIChtYXRlcmlhbC50cmFuc21pc3Npb25NYXApIHtcblx0XHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uTWFwLnZhbHVlID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy50aGlja25lc3MudmFsdWUgPSBtYXRlcmlhbC50aGlja25lc3M7XG5cblx0XHRcdGlmIChtYXRlcmlhbC50aGlja25lc3NNYXApIHtcblx0XHRcdFx0dW5pZm9ybXMudGhpY2tuZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwudGhpY2tuZXNzTWFwO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRcdHVuaWZvcm1zLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yKTtcblx0XHR9XG5cblx0XHR1bmlmb3Jtcy5zcGVjdWxhckludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHVuaWZvcm1zLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weShtYXRlcmlhbC5zcGVjdWxhckNvbG9yKTtcblxuXHRcdGlmIChtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCkge1xuXHRcdFx0dW5pZm9ybXMuc3BlY3VsYXJDb2xvck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXA7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTWF0Y2FwKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdGlmIChtYXRlcmlhbC5tYXRjYXApIHtcblx0XHRcdHVuaWZvcm1zLm1hdGNhcC52YWx1ZSA9IG1hdGVyaWFsLm1hdGNhcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYnVtcE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtMTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubm9ybWFsTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KG1hdGVyaWFsLm5vcm1hbFNjYWxlKTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0RlcHRoKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXApIHtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50Qmlhcztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNEaXN0YW5jZSh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXG5cdFx0dW5pZm9ybXMucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShtYXRlcmlhbC5yZWZlcmVuY2VQb3NpdGlvbik7XG5cdFx0dW5pZm9ybXMubmVhckRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwubmVhckRpc3RhbmNlO1xuXHRcdHVuaWZvcm1zLmZhckRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwuZmFyRGlzdGFuY2U7XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNOb3JtYWwodW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0aWYgKG1hdGVyaWFsLmJ1bXBNYXApIHtcblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgKj0gLTE7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLm5vcm1hbE1hcCkge1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weShtYXRlcmlhbC5ub3JtYWxTY2FsZSk7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXApIHtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50Qmlhcztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHJlZnJlc2hGb2dVbmlmb3JtczogcmVmcmVzaEZvZ1VuaWZvcm1zLFxuXHRcdHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOiByZWZyZXNoTWF0ZXJpYWxVbmlmb3Jtc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXNFbGVtZW50KCkge1xuXHRjb25zdCBjYW52YXMgPSBjcmVhdGVFbGVtZW50TlMoJ2NhbnZhcycpO1xuXHRjYW52YXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdHJldHVybiBjYW52YXM7XG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIocGFyYW1ldGVycyA9IHt9KSB7XG5cdGNvbnN0IF9jYW52YXMgPSBwYXJhbWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5jYW52YXMgOiBjcmVhdGVDYW52YXNFbGVtZW50KCksXG5cdFx0XHRcdF9jb250ZXh0ID0gcGFyYW1ldGVycy5jb250ZXh0ICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmNvbnRleHQgOiBudWxsLFxuXHRcdFx0XHRfYWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFscGhhIDogZmFsc2UsXG5cdFx0XHRcdF9kZXB0aCA9IHBhcmFtZXRlcnMuZGVwdGggIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuZGVwdGggOiB0cnVlLFxuXHRcdFx0XHRfc3RlbmNpbCA9IHBhcmFtZXRlcnMuc3RlbmNpbCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5zdGVuY2lsIDogdHJ1ZSxcblx0XHRcdFx0X2FudGlhbGlhcyA9IHBhcmFtZXRlcnMuYW50aWFsaWFzICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFudGlhbGlhcyA6IGZhbHNlLFxuXHRcdFx0XHRfcHJlbXVsdGlwbGllZEFscGhhID0gcGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhIDogdHJ1ZSxcblx0XHRcdFx0X3ByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IHBhcmFtZXRlcnMucHJlc2VydmVEcmF3aW5nQnVmZmVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA6IGZhbHNlLFxuXHRcdFx0XHRfcG93ZXJQcmVmZXJlbmNlID0gcGFyYW1ldGVycy5wb3dlclByZWZlcmVuY2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucG93ZXJQcmVmZXJlbmNlIDogJ2RlZmF1bHQnLFxuXHRcdFx0XHRfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA9IHBhcmFtZXRlcnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IDogZmFsc2U7XG5cblx0bGV0IGN1cnJlbnRSZW5kZXJMaXN0ID0gbnVsbDtcblx0bGV0IGN1cnJlbnRSZW5kZXJTdGF0ZSA9IG51bGw7IC8vIHJlbmRlcigpIGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBjYWxsYmFjayB0cmlnZ2VyZWQgYnkgYW5vdGhlciByZW5kZXIuXG5cdC8vIFdlIHRyYWNrIHRoaXMgc28gdGhhdCB0aGUgbmVzdGVkIHJlbmRlciBjYWxsIGdldHMgaXRzIGxpc3QgYW5kIHN0YXRlIGlzb2xhdGVkIGZyb20gdGhlIHBhcmVudCByZW5kZXIgY2FsbC5cblxuXHRjb25zdCByZW5kZXJMaXN0U3RhY2sgPSBbXTtcblx0Y29uc3QgcmVuZGVyU3RhdGVTdGFjayA9IFtdOyAvLyBwdWJsaWMgcHJvcGVydGllc1xuXG5cdHRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7IC8vIERlYnVnIGNvbmZpZ3VyYXRpb24gY29udGFpbmVyXG5cblx0dGhpcy5kZWJ1ZyA9IHtcblx0XHQvKipcblx0XHQgKiBFbmFibGVzIGVycm9yIGNoZWNraW5nIGFuZCByZXBvcnRpbmcgd2hlbiBzaGFkZXIgcHJvZ3JhbXMgYXJlIGJlaW5nIGNvbXBpbGVkXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0Y2hlY2tTaGFkZXJFcnJvcnM6IHRydWVcblx0fTsgLy8gY2xlYXJpbmdcblxuXHR0aGlzLmF1dG9DbGVhciA9IHRydWU7XG5cdHRoaXMuYXV0b0NsZWFyQ29sb3IgPSB0cnVlO1xuXHR0aGlzLmF1dG9DbGVhckRlcHRoID0gdHJ1ZTtcblx0dGhpcy5hdXRvQ2xlYXJTdGVuY2lsID0gdHJ1ZTsgLy8gc2NlbmUgZ3JhcGhcblxuXHR0aGlzLnNvcnRPYmplY3RzID0gdHJ1ZTsgLy8gdXNlci1kZWZpbmVkIGNsaXBwaW5nXG5cblx0dGhpcy5jbGlwcGluZ1BsYW5lcyA9IFtdO1xuXHR0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkID0gZmFsc2U7IC8vIHBoeXNpY2FsbHkgYmFzZWQgc2hhZGluZ1xuXG5cdHRoaXMub3V0cHV0RW5jb2RpbmcgPSBMaW5lYXJFbmNvZGluZzsgLy8gcGh5c2ljYWwgbGlnaHRzXG5cblx0dGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IGZhbHNlOyAvLyB0b25lIG1hcHBpbmdcblxuXHR0aGlzLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZztcblx0dGhpcy50b25lTWFwcGluZ0V4cG9zdXJlID0gMS4wOyAvLyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG5cblx0Y29uc3QgX3RoaXMgPSB0aGlzO1xuXG5cdGxldCBfaXNDb250ZXh0TG9zdCA9IGZhbHNlOyAvLyBpbnRlcm5hbCBzdGF0ZSBjYWNoZVxuXG5cdGxldCBfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gMDtcblx0bGV0IF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWwgPSAwO1xuXHRsZXQgX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSBudWxsO1xuXG5cdGxldCBfY3VycmVudE1hdGVyaWFsSWQgPSAtMTtcblxuXHRsZXQgX2N1cnJlbnRDYW1lcmEgPSBudWxsO1xuXG5cdGNvbnN0IF9jdXJyZW50Vmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpO1xuXG5cdGNvbnN0IF9jdXJyZW50U2Npc3NvciA9IG5ldyBWZWN0b3I0KCk7XG5cblx0bGV0IF9jdXJyZW50U2Npc3NvclRlc3QgPSBudWxsOyAvL1xuXG5cdGxldCBfd2lkdGggPSBfY2FudmFzLndpZHRoO1xuXHRsZXQgX2hlaWdodCA9IF9jYW52YXMuaGVpZ2h0O1xuXHRsZXQgX3BpeGVsUmF0aW8gPSAxO1xuXHRsZXQgX29wYXF1ZVNvcnQgPSBudWxsO1xuXHRsZXQgX3RyYW5zcGFyZW50U29ydCA9IG51bGw7XG5cblx0Y29uc3QgX3ZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoMCwgMCwgX3dpZHRoLCBfaGVpZ2h0KTtcblxuXHRjb25zdCBfc2Npc3NvciA9IG5ldyBWZWN0b3I0KDAsIDAsIF93aWR0aCwgX2hlaWdodCk7XG5cblx0bGV0IF9zY2lzc29yVGVzdCA9IGZhbHNlOyAvLyBmcnVzdHVtXG5cblx0Y29uc3QgX2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpOyAvLyBjbGlwcGluZ1xuXG5cblx0bGV0IF9jbGlwcGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0bGV0IF9sb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNlOyAvLyB0cmFuc21pc3Npb25cblxuXHRsZXQgX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9IG51bGw7IC8vIGNhbWVyYSBtYXRyaWNlcyBjYWNoZVxuXG5cdGNvbnN0IF9wcm9qU2NyZWVuTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuXHRjb25zdCBfdmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG5cblx0Y29uc3QgX2VtcHR5U2NlbmUgPSB7XG5cdFx0YmFja2dyb3VuZDogbnVsbCxcblx0XHRmb2c6IG51bGwsXG5cdFx0ZW52aXJvbm1lbnQ6IG51bGwsXG5cdFx0b3ZlcnJpZGVNYXRlcmlhbDogbnVsbCxcblx0XHRpc1NjZW5lOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpIHtcblx0XHRyZXR1cm4gX2N1cnJlbnRSZW5kZXJUYXJnZXQgPT09IG51bGwgPyBfcGl4ZWxSYXRpbyA6IDE7XG5cdH0gLy8gaW5pdGlhbGl6ZVxuXG5cblx0bGV0IF9nbCA9IF9jb250ZXh0O1xuXG5cdGZ1bmN0aW9uIGdldENvbnRleHQoY29udGV4dE5hbWVzLCBjb250ZXh0QXR0cmlidXRlcykge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29udGV4dE5hbWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0TmFtZSA9IGNvbnRleHROYW1lc1tpXTtcblxuXHRcdFx0Y29uc3QgY29udGV4dCA9IF9jYW52YXMuZ2V0Q29udGV4dChjb250ZXh0TmFtZSwgY29udGV4dEF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRpZiAoY29udGV4dCAhPT0gbnVsbCkgcmV0dXJuIGNvbnRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR0cnkge1xuXHRcdGNvbnN0IGNvbnRleHRBdHRyaWJ1dGVzID0ge1xuXHRcdFx0YWxwaGE6IHRydWUsXG5cdFx0XHRkZXB0aDogX2RlcHRoLFxuXHRcdFx0c3RlbmNpbDogX3N0ZW5jaWwsXG5cdFx0XHRhbnRpYWxpYXM6IF9hbnRpYWxpYXMsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IF9wcmVtdWx0aXBsaWVkQWxwaGEsXG5cdFx0XHRwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IF9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG5cdFx0XHRwb3dlclByZWZlcmVuY2U6IF9wb3dlclByZWZlcmVuY2UsXG5cdFx0XHRmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdFxuXHRcdH07IC8vIE9mZnNjcmVlbkNhbnZhcyBkb2VzIG5vdCBoYXZlIHNldEF0dHJpYnV0ZSwgc2VlICMyMjgxMVxuXG5cdFx0aWYgKCdzZXRBdHRyaWJ1dGUnIGluIF9jYW52YXMpIF9jYW52YXMuc2V0QXR0cmlidXRlKCdkYXRhLWVuZ2luZScsIGB0aHJlZS5qcyByJHtSRVZJU0lPTn1gKTsgLy8gZXZlbnQgbGlzdGVuZXJzIG11c3QgYmUgcmVnaXN0ZXJlZCBiZWZvcmUgV2ViR0wgY29udGV4dCBpcyBjcmVhdGVkLCBzZWUgIzEyNzUzXG5cblx0XHRfY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRMb3N0LCBmYWxzZSk7XG5cblx0XHRfY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgb25Db250ZXh0UmVzdG9yZSwgZmFsc2UpO1xuXG5cdFx0aWYgKF9nbCA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgY29udGV4dE5hbWVzID0gWyd3ZWJnbDInLCAnd2ViZ2wnLCAnZXhwZXJpbWVudGFsLXdlYmdsJ107XG5cblx0XHRcdGlmIChfdGhpcy5pc1dlYkdMMVJlbmRlcmVyID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnRleHROYW1lcy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRfZ2wgPSBnZXRDb250ZXh0KGNvbnRleHROYW1lcywgY29udGV4dEF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRpZiAoX2dsID09PSBudWxsKSB7XG5cdFx0XHRcdGlmIChnZXRDb250ZXh0KGNvbnRleHROYW1lcykpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSAvLyBTb21lIGV4cGVyaW1lbnRhbC13ZWJnbCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IGhhdmUgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0XG5cblxuXHRcdGlmIChfZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF9nbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0J3JhbmdlTWluJzogMSxcblx0XHRcdFx0XHQncmFuZ2VNYXgnOiAxLFxuXHRcdFx0XHRcdCdwcmVjaXNpb24nOiAxXG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAnICsgZXJyb3IubWVzc2FnZSk7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH1cblxuXHRsZXQgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzLCBzdGF0ZSwgaW5mbztcblx0bGV0IHByb3BlcnRpZXMsIHRleHR1cmVzLCBjdWJlbWFwcywgY3ViZXV2bWFwcywgYXR0cmlidXRlcywgZ2VvbWV0cmllcywgb2JqZWN0cztcblx0bGV0IHByb2dyYW1DYWNoZSwgbWF0ZXJpYWxzLCByZW5kZXJMaXN0cywgcmVuZGVyU3RhdGVzLCBjbGlwcGluZywgc2hhZG93TWFwO1xuXHRsZXQgYmFja2dyb3VuZCwgbW9ycGh0YXJnZXRzLCBidWZmZXJSZW5kZXJlciwgaW5kZXhlZEJ1ZmZlclJlbmRlcmVyO1xuXHRsZXQgdXRpbHMsIGJpbmRpbmdTdGF0ZXM7XG5cblx0ZnVuY3Rpb24gaW5pdEdMQ29udGV4dCgpIHtcblx0XHRleHRlbnNpb25zID0gbmV3IFdlYkdMRXh0ZW5zaW9ucyhfZ2wpO1xuXHRcdGNhcGFiaWxpdGllcyA9IG5ldyBXZWJHTENhcGFiaWxpdGllcyhfZ2wsIGV4dGVuc2lvbnMsIHBhcmFtZXRlcnMpO1xuXHRcdGV4dGVuc2lvbnMuaW5pdChjYXBhYmlsaXRpZXMpO1xuXHRcdHV0aWxzID0gbmV3IFdlYkdMVXRpbHMoX2dsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpO1xuXHRcdHN0YXRlID0gbmV3IFdlYkdMU3RhdGUoX2dsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpO1xuXHRcdGluZm8gPSBuZXcgV2ViR0xJbmZvKF9nbCk7XG5cdFx0cHJvcGVydGllcyA9IG5ldyBXZWJHTFByb3BlcnRpZXMoKTtcblx0XHR0ZXh0dXJlcyA9IG5ldyBXZWJHTFRleHR1cmVzKF9nbCwgZXh0ZW5zaW9ucywgc3RhdGUsIHByb3BlcnRpZXMsIGNhcGFiaWxpdGllcywgdXRpbHMsIGluZm8pO1xuXHRcdGN1YmVtYXBzID0gbmV3IFdlYkdMQ3ViZU1hcHMoX3RoaXMpO1xuXHRcdGN1YmV1dm1hcHMgPSBuZXcgV2ViR0xDdWJlVVZNYXBzKF90aGlzKTtcblx0XHRhdHRyaWJ1dGVzID0gbmV3IFdlYkdMQXR0cmlidXRlcyhfZ2wsIGNhcGFiaWxpdGllcyk7XG5cdFx0YmluZGluZ1N0YXRlcyA9IG5ldyBXZWJHTEJpbmRpbmdTdGF0ZXMoX2dsLCBleHRlbnNpb25zLCBhdHRyaWJ1dGVzLCBjYXBhYmlsaXRpZXMpO1xuXHRcdGdlb21ldHJpZXMgPSBuZXcgV2ViR0xHZW9tZXRyaWVzKF9nbCwgYXR0cmlidXRlcywgaW5mbywgYmluZGluZ1N0YXRlcyk7XG5cdFx0b2JqZWN0cyA9IG5ldyBXZWJHTE9iamVjdHMoX2dsLCBnZW9tZXRyaWVzLCBhdHRyaWJ1dGVzLCBpbmZvKTtcblx0XHRtb3JwaHRhcmdldHMgPSBuZXcgV2ViR0xNb3JwaHRhcmdldHMoX2dsLCBjYXBhYmlsaXRpZXMsIHRleHR1cmVzKTtcblx0XHRjbGlwcGluZyA9IG5ldyBXZWJHTENsaXBwaW5nKHByb3BlcnRpZXMpO1xuXHRcdHByb2dyYW1DYWNoZSA9IG5ldyBXZWJHTFByb2dyYW1zKF90aGlzLCBjdWJlbWFwcywgY3ViZXV2bWFwcywgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzLCBiaW5kaW5nU3RhdGVzLCBjbGlwcGluZyk7XG5cdFx0bWF0ZXJpYWxzID0gbmV3IFdlYkdMTWF0ZXJpYWxzKHByb3BlcnRpZXMpO1xuXHRcdHJlbmRlckxpc3RzID0gbmV3IFdlYkdMUmVuZGVyTGlzdHMoKTtcblx0XHRyZW5kZXJTdGF0ZXMgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZXMoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0XHRiYWNrZ3JvdW5kID0gbmV3IFdlYkdMQmFja2dyb3VuZChfdGhpcywgY3ViZW1hcHMsIHN0YXRlLCBvYmplY3RzLCBfYWxwaGEsIF9wcmVtdWx0aXBsaWVkQWxwaGEpO1xuXHRcdHNoYWRvd01hcCA9IG5ldyBXZWJHTFNoYWRvd01hcChfdGhpcywgb2JqZWN0cywgY2FwYWJpbGl0aWVzKTtcblx0XHRidWZmZXJSZW5kZXJlciA9IG5ldyBXZWJHTEJ1ZmZlclJlbmRlcmVyKF9nbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzKTtcblx0XHRpbmRleGVkQnVmZmVyUmVuZGVyZXIgPSBuZXcgV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoX2dsLCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMpO1xuXHRcdGluZm8ucHJvZ3JhbXMgPSBwcm9ncmFtQ2FjaGUucHJvZ3JhbXM7XG5cdFx0X3RoaXMuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzO1xuXHRcdF90aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zO1xuXHRcdF90aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuXHRcdF90aGlzLnJlbmRlckxpc3RzID0gcmVuZGVyTGlzdHM7XG5cdFx0X3RoaXMuc2hhZG93TWFwID0gc2hhZG93TWFwO1xuXHRcdF90aGlzLnN0YXRlID0gc3RhdGU7XG5cdFx0X3RoaXMuaW5mbyA9IGluZm87XG5cdH1cblxuXHRpbml0R0xDb250ZXh0KCk7IC8vIHhyXG5cblx0Y29uc3QgeHIgPSBuZXcgV2ViWFJNYW5hZ2VyKF90aGlzLCBfZ2wpO1xuXHR0aGlzLnhyID0geHI7IC8vIEFQSVxuXG5cdHRoaXMuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gX2dsO1xuXHR9O1xuXG5cdHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIF9nbC5nZXRDb250ZXh0QXR0cmlidXRlcygpO1xuXHR9O1xuXG5cdHRoaXMuZm9yY2VDb250ZXh0TG9zcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfbG9zZV9jb250ZXh0Jyk7XG5cdFx0aWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7XG5cdH07XG5cblx0dGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9sb3NlX2NvbnRleHQnKTtcblx0XHRpZiAoZXh0ZW5zaW9uKSBleHRlbnNpb24ucmVzdG9yZUNvbnRleHQoKTtcblx0fTtcblxuXHR0aGlzLmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIF9waXhlbFJhdGlvO1xuXHR9O1xuXG5cdHRoaXMuc2V0UGl4ZWxSYXRpbyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0X3BpeGVsUmF0aW8gPSB2YWx1ZTtcblx0XHR0aGlzLnNldFNpemUoX3dpZHRoLCBfaGVpZ2h0LCBmYWxzZSk7XG5cdH07XG5cblx0dGhpcy5nZXRTaXplID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuc2V0KF93aWR0aCwgX2hlaWdodCk7XG5cdH07XG5cblx0dGhpcy5zZXRTaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZVN0eWxlKSB7XG5cdFx0aWYgKHhyLmlzUHJlc2VudGluZykge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW5cXCd0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdF93aWR0aCA9IHdpZHRoO1xuXHRcdF9oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0X2NhbnZhcy53aWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBfcGl4ZWxSYXRpbyk7XG5cdFx0X2NhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIF9waXhlbFJhdGlvKTtcblxuXHRcdGlmICh1cGRhdGVTdHlsZSAhPT0gZmFsc2UpIHtcblx0XHRcdF9jYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG5cdFx0XHRfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0fTtcblxuXHR0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuc2V0KF93aWR0aCAqIF9waXhlbFJhdGlvLCBfaGVpZ2h0ICogX3BpeGVsUmF0aW8pLmZsb29yKCk7XG5cdH07XG5cblx0dGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBwaXhlbFJhdGlvKSB7XG5cdFx0X3dpZHRoID0gd2lkdGg7XG5cdFx0X2hlaWdodCA9IGhlaWdodDtcblx0XHRfcGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG5cdFx0X2NhbnZhcy53aWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBwaXhlbFJhdGlvKTtcblx0XHRfY2FudmFzLmhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogcGl4ZWxSYXRpbyk7XG5cdFx0dGhpcy5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0fTtcblxuXHR0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoX2N1cnJlbnRWaWV3cG9ydCk7XG5cdH07XG5cblx0dGhpcy5nZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoX3ZpZXdwb3J0KTtcblx0fTtcblxuXHR0aGlzLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblx0XHRpZiAoeC5pc1ZlY3RvcjQpIHtcblx0XHRcdF92aWV3cG9ydC5zZXQoeC54LCB4LnksIHgueiwgeC53KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X3ZpZXdwb3J0LnNldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0XHR9XG5cblx0XHRzdGF0ZS52aWV3cG9ydChfY3VycmVudFZpZXdwb3J0LmNvcHkoX3ZpZXdwb3J0KS5tdWx0aXBseVNjYWxhcihfcGl4ZWxSYXRpbykuZmxvb3IoKSk7XG5cdH07XG5cblx0dGhpcy5nZXRTY2lzc29yID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuY29weShfc2Npc3Nvcik7XG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblx0XHRpZiAoeC5pc1ZlY3RvcjQpIHtcblx0XHRcdF9zY2lzc29yLnNldCh4LngsIHgueSwgeC56LCB4LncpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfc2Npc3Nvci5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdFx0fVxuXG5cdFx0c3RhdGUuc2Npc3NvcihfY3VycmVudFNjaXNzb3IuY29weShfc2Npc3NvcikubXVsdGlwbHlTY2FsYXIoX3BpeGVsUmF0aW8pLmZsb29yKCkpO1xuXHR9O1xuXG5cdHRoaXMuZ2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIF9zY2lzc29yVGVzdDtcblx0fTtcblxuXHR0aGlzLnNldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKGJvb2xlYW4pIHtcblx0XHRzdGF0ZS5zZXRTY2lzc29yVGVzdChfc2Npc3NvclRlc3QgPSBib29sZWFuKTtcblx0fTtcblxuXHR0aGlzLnNldE9wYXF1ZVNvcnQgPSBmdW5jdGlvbiAobWV0aG9kKSB7XG5cdFx0X29wYXF1ZVNvcnQgPSBtZXRob2Q7XG5cdH07XG5cblx0dGhpcy5zZXRUcmFuc3BhcmVudFNvcnQgPSBmdW5jdGlvbiAobWV0aG9kKSB7XG5cdFx0X3RyYW5zcGFyZW50U29ydCA9IG1ldGhvZDtcblx0fTsgLy8gQ2xlYXJpbmdcblxuXG5cdHRoaXMuZ2V0Q2xlYXJDb2xvciA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoYmFja2dyb3VuZC5nZXRDbGVhckNvbG9yKCkpO1xuXHR9O1xuXG5cdHRoaXMuc2V0Q2xlYXJDb2xvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRiYWNrZ3JvdW5kLnNldENsZWFyQ29sb3IuYXBwbHkoYmFja2dyb3VuZCwgYXJndW1lbnRzKTtcblx0fTtcblxuXHR0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGJhY2tncm91bmQuZ2V0Q2xlYXJBbHBoYSgpO1xuXHR9O1xuXG5cdHRoaXMuc2V0Q2xlYXJBbHBoYSA9IGZ1bmN0aW9uICgpIHtcblx0XHRiYWNrZ3JvdW5kLnNldENsZWFyQWxwaGEuYXBwbHkoYmFja2dyb3VuZCwgYXJndW1lbnRzKTtcblx0fTtcblxuXHR0aGlzLmNsZWFyID0gZnVuY3Rpb24gKGNvbG9yLCBkZXB0aCwgc3RlbmNpbCkge1xuXHRcdGxldCBiaXRzID0gMDtcblx0XHRpZiAoY29sb3IgPT09IHVuZGVmaW5lZCB8fCBjb2xvcikgYml0cyB8PSBfZ2wuQ09MT1JfQlVGRkVSX0JJVDtcblx0XHRpZiAoZGVwdGggPT09IHVuZGVmaW5lZCB8fCBkZXB0aCkgYml0cyB8PSBfZ2wuREVQVEhfQlVGRkVSX0JJVDtcblx0XHRpZiAoc3RlbmNpbCA9PT0gdW5kZWZpbmVkIHx8IHN0ZW5jaWwpIGJpdHMgfD0gX2dsLlNURU5DSUxfQlVGRkVSX0JJVDtcblxuXHRcdF9nbC5jbGVhcihiaXRzKTtcblx0fTtcblxuXHR0aGlzLmNsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5jbGVhcih0cnVlLCBmYWxzZSwgZmFsc2UpO1xuXHR9O1xuXG5cdHRoaXMuY2xlYXJEZXB0aCA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aGlzLmNsZWFyKGZhbHNlLCB0cnVlLCBmYWxzZSk7XG5cdH07XG5cblx0dGhpcy5jbGVhclN0ZW5jaWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5jbGVhcihmYWxzZSwgZmFsc2UsIHRydWUpO1xuXHR9OyAvL1xuXG5cblx0dGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHRcdF9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIG9uQ29udGV4dExvc3QsIGZhbHNlKTtcblxuXHRcdF9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCBvbkNvbnRleHRSZXN0b3JlLCBmYWxzZSk7XG5cblx0XHRyZW5kZXJMaXN0cy5kaXNwb3NlKCk7XG5cdFx0cmVuZGVyU3RhdGVzLmRpc3Bvc2UoKTtcblx0XHRwcm9wZXJ0aWVzLmRpc3Bvc2UoKTtcblx0XHRjdWJlbWFwcy5kaXNwb3NlKCk7XG5cdFx0Y3ViZXV2bWFwcy5kaXNwb3NlKCk7XG5cdFx0b2JqZWN0cy5kaXNwb3NlKCk7XG5cdFx0YmluZGluZ1N0YXRlcy5kaXNwb3NlKCk7XG5cdFx0cHJvZ3JhbUNhY2hlLmRpc3Bvc2UoKTtcblx0XHR4ci5kaXNwb3NlKCk7XG5cdFx0eHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0Jywgb25YUlNlc3Npb25TdGFydCk7XG5cdFx0eHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIG9uWFJTZXNzaW9uRW5kKTtcblxuXHRcdGlmIChfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKTtcblxuXHRcdFx0X3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0YW5pbWF0aW9uLnN0b3AoKTtcblx0fTsgLy8gRXZlbnRzXG5cblxuXHRmdW5jdGlvbiBvbkNvbnRleHRMb3N0KGV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zb2xlLmxvZygnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LicpO1xuXHRcdF9pc0NvbnRleHRMb3N0ID0gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uXG5cdFx0LyogZXZlbnQgKi9cblx0b25Db250ZXh0UmVzdG9yZSgpIHtcblx0XHRjb25zb2xlLmxvZygnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4nKTtcblx0XHRfaXNDb250ZXh0TG9zdCA9IGZhbHNlO1xuXHRcdGNvbnN0IGluZm9BdXRvUmVzZXQgPSBpbmZvLmF1dG9SZXNldDtcblx0XHRjb25zdCBzaGFkb3dNYXBFbmFibGVkID0gc2hhZG93TWFwLmVuYWJsZWQ7XG5cdFx0Y29uc3Qgc2hhZG93TWFwQXV0b1VwZGF0ZSA9IHNoYWRvd01hcC5hdXRvVXBkYXRlO1xuXHRcdGNvbnN0IHNoYWRvd01hcE5lZWRzVXBkYXRlID0gc2hhZG93TWFwLm5lZWRzVXBkYXRlO1xuXHRcdGNvbnN0IHNoYWRvd01hcFR5cGUgPSBzaGFkb3dNYXAudHlwZTtcblx0XHRpbml0R0xDb250ZXh0KCk7XG5cdFx0aW5mby5hdXRvUmVzZXQgPSBpbmZvQXV0b1Jlc2V0O1xuXHRcdHNoYWRvd01hcC5lbmFibGVkID0gc2hhZG93TWFwRW5hYmxlZDtcblx0XHRzaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IHNoYWRvd01hcEF1dG9VcGRhdGU7XG5cdFx0c2hhZG93TWFwLm5lZWRzVXBkYXRlID0gc2hhZG93TWFwTmVlZHNVcGRhdGU7XG5cdFx0c2hhZG93TWFwLnR5cGUgPSBzaGFkb3dNYXBUeXBlO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25NYXRlcmlhbERpc3Bvc2UoZXZlbnQpIHtcblx0XHRjb25zdCBtYXRlcmlhbCA9IGV2ZW50LnRhcmdldDtcblx0XHRtYXRlcmlhbC5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25NYXRlcmlhbERpc3Bvc2UpO1xuXHRcdGRlYWxsb2NhdGVNYXRlcmlhbChtYXRlcmlhbCk7XG5cdH0gLy8gQnVmZmVyIGRlYWxsb2NhdGlvblxuXG5cblx0ZnVuY3Rpb24gZGVhbGxvY2F0ZU1hdGVyaWFsKG1hdGVyaWFsKSB7XG5cdFx0cmVsZWFzZU1hdGVyaWFsUHJvZ3JhbVJlZmVyZW5jZXMobWF0ZXJpYWwpO1xuXHRcdHByb3BlcnRpZXMucmVtb3ZlKG1hdGVyaWFsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVuY2VzKG1hdGVyaWFsKSB7XG5cdFx0Y29uc3QgcHJvZ3JhbXMgPSBwcm9wZXJ0aWVzLmdldChtYXRlcmlhbCkucHJvZ3JhbXM7XG5cblx0XHRpZiAocHJvZ3JhbXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJvZ3JhbXMuZm9yRWFjaChmdW5jdGlvbiAocHJvZ3JhbSkge1xuXHRcdFx0XHRwcm9ncmFtQ2FjaGUucmVsZWFzZVByb2dyYW0ocHJvZ3JhbSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwpIHtcblx0XHRcdFx0cHJvZ3JhbUNhY2hlLnJlbGVhc2VTaGFkZXJDYWNoZShtYXRlcmlhbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IC8vIEJ1ZmZlciByZW5kZXJpbmdcblxuXG5cdHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0ID0gZnVuY3Rpb24gKGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0LCBncm91cCkge1xuXHRcdGlmIChzY2VuZSA9PT0gbnVsbCkgc2NlbmUgPSBfZW1wdHlTY2VuZTsgLy8gcmVuZGVyQnVmZmVyRGlyZWN0IHNlY29uZCBwYXJhbWV0ZXIgdXNlZCB0byBiZSBmb2cgKGNvdWxkIGJlIG51bGwpXG5cblx0XHRjb25zdCBmcm9udEZhY2VDVyA9IG9iamVjdC5pc01lc2ggJiYgb2JqZWN0Lm1hdHJpeFdvcmxkLmRldGVybWluYW50KCkgPCAwO1xuXHRcdGNvbnN0IHByb2dyYW0gPSBzZXRQcm9ncmFtKGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0KTtcblx0XHRzdGF0ZS5zZXRNYXRlcmlhbChtYXRlcmlhbCwgZnJvbnRGYWNlQ1cpOyAvL1xuXG5cdFx0bGV0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOyAvL1xuXG5cdFx0aWYgKGluZGV4ID09PSBudWxsKSB7XG5cdFx0XHRpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbi5jb3VudCA9PT0gMCkgcmV0dXJuO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXguY291bnQgPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9IC8vXG5cblxuXHRcdGxldCByYW5nZUZhY3RvciA9IDE7XG5cblx0XHRpZiAobWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlKSB7XG5cdFx0XHRpbmRleCA9IGdlb21ldHJpZXMuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKGdlb21ldHJ5KTtcblx0XHRcdHJhbmdlRmFjdG9yID0gMjtcblx0XHR9XG5cblx0XHRiaW5kaW5nU3RhdGVzLnNldHVwKG9iamVjdCwgbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5LCBpbmRleCk7XG5cdFx0bGV0IGF0dHJpYnV0ZTtcblx0XHRsZXQgcmVuZGVyZXIgPSBidWZmZXJSZW5kZXJlcjtcblxuXHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0YXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoaW5kZXgpO1xuXHRcdFx0cmVuZGVyZXIgPSBpbmRleGVkQnVmZmVyUmVuZGVyZXI7XG5cdFx0XHRyZW5kZXJlci5zZXRJbmRleChhdHRyaWJ1dGUpO1xuXHRcdH0gLy9cblxuXG5cdFx0Y29uc3QgZGF0YUNvdW50ID0gaW5kZXggIT09IG51bGwgPyBpbmRleC5jb3VudCA6IHBvc2l0aW9uLmNvdW50O1xuXHRcdGNvbnN0IHJhbmdlU3RhcnQgPSBnZW9tZXRyeS5kcmF3UmFuZ2Uuc3RhcnQgKiByYW5nZUZhY3Rvcjtcblx0XHRjb25zdCByYW5nZUNvdW50ID0gZ2VvbWV0cnkuZHJhd1JhbmdlLmNvdW50ICogcmFuZ2VGYWN0b3I7XG5cdFx0Y29uc3QgZ3JvdXBTdGFydCA9IGdyb3VwICE9PSBudWxsID8gZ3JvdXAuc3RhcnQgKiByYW5nZUZhY3RvciA6IDA7XG5cdFx0Y29uc3QgZ3JvdXBDb3VudCA9IGdyb3VwICE9PSBudWxsID8gZ3JvdXAuY291bnQgKiByYW5nZUZhY3RvciA6IEluZmluaXR5O1xuXHRcdGNvbnN0IGRyYXdTdGFydCA9IE1hdGgubWF4KHJhbmdlU3RhcnQsIGdyb3VwU3RhcnQpO1xuXHRcdGNvbnN0IGRyYXdFbmQgPSBNYXRoLm1pbihkYXRhQ291bnQsIHJhbmdlU3RhcnQgKyByYW5nZUNvdW50LCBncm91cFN0YXJ0ICsgZ3JvdXBDb3VudCkgLSAxO1xuXHRcdGNvbnN0IGRyYXdDb3VudCA9IE1hdGgubWF4KDAsIGRyYXdFbmQgLSBkcmF3U3RhcnQgKyAxKTtcblx0XHRpZiAoZHJhd0NvdW50ID09PSAwKSByZXR1cm47IC8vXG5cblx0XHRpZiAob2JqZWN0LmlzTWVzaCkge1xuXHRcdFx0aWYgKG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzdGF0ZS5zZXRMaW5lV2lkdGgobWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoICogZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpKTtcblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZShfZ2wuTElORVMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZShfZ2wuVFJJQU5HTEVTKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc0xpbmUpIHtcblx0XHRcdGxldCBsaW5lV2lkdGggPSBtYXRlcmlhbC5saW5ld2lkdGg7XG5cdFx0XHRpZiAobGluZVdpZHRoID09PSB1bmRlZmluZWQpIGxpbmVXaWR0aCA9IDE7IC8vIE5vdCB1c2luZyBMaW5lKk1hdGVyaWFsXG5cblx0XHRcdHN0YXRlLnNldExpbmVXaWR0aChsaW5lV2lkdGggKiBnZXRUYXJnZXRQaXhlbFJhdGlvKCkpO1xuXG5cdFx0XHRpZiAob2JqZWN0LmlzTGluZVNlZ21lbnRzKSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoX2dsLkxJTkVTKTtcblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzTGluZUxvb3ApIHtcblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZShfZ2wuTElORV9MT09QKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoX2dsLkxJTkVfU1RSSVApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzUG9pbnRzKSB7XG5cdFx0XHRyZW5kZXJlci5zZXRNb2RlKF9nbC5QT0lOVFMpO1xuXHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzU3ByaXRlKSB7XG5cdFx0XHRyZW5kZXJlci5zZXRNb2RlKF9nbC5UUklBTkdMRVMpO1xuXHRcdH1cblxuXHRcdGlmIChvYmplY3QuaXNJbnN0YW5jZWRNZXNoKSB7XG5cdFx0XHRyZW5kZXJlci5yZW5kZXJJbnN0YW5jZXMoZHJhd1N0YXJ0LCBkcmF3Q291bnQsIG9iamVjdC5jb3VudCk7XG5cdFx0fSBlbHNlIGlmIChnZW9tZXRyeS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZUNvdW50ID0gTWF0aC5taW4oZ2VvbWV0cnkuaW5zdGFuY2VDb3VudCwgZ2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQpO1xuXHRcdFx0cmVuZGVyZXIucmVuZGVySW5zdGFuY2VzKGRyYXdTdGFydCwgZHJhd0NvdW50LCBpbnN0YW5jZUNvdW50KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVyZXIucmVuZGVyKGRyYXdTdGFydCwgZHJhd0NvdW50KTtcblx0XHR9XG5cdH07IC8vIENvbXBpbGVcblxuXG5cdHRoaXMuY29tcGlsZSA9IGZ1bmN0aW9uIChzY2VuZSwgY2FtZXJhKSB7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVzLmdldChzY2VuZSk7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLmluaXQoKTtcblx0XHRyZW5kZXJTdGF0ZVN0YWNrLnB1c2goY3VycmVudFJlbmRlclN0YXRlKTtcblx0XHRzY2VuZS50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24gKG9iamVjdCkge1xuXHRcdFx0aWYgKG9iamVjdC5pc0xpZ2h0ICYmIG9iamVjdC5sYXllcnMudGVzdChjYW1lcmEubGF5ZXJzKSkge1xuXHRcdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUucHVzaExpZ2h0KG9iamVjdCk7XG5cblx0XHRcdFx0aWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XG5cdFx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hTaGFkb3cob2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0cyhfdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyk7XG5cdFx0c2NlbmUudHJhdmVyc2UoZnVuY3Rpb24gKG9iamVjdCkge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdGlmIChtYXRlcmlhbCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1hdGVyaWFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbDIgPSBtYXRlcmlhbFtpXTtcblx0XHRcdFx0XHRcdGdldFByb2dyYW0obWF0ZXJpYWwyLCBzY2VuZSwgb2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2V0UHJvZ3JhbShtYXRlcmlhbCwgc2NlbmUsIG9iamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZW5kZXJTdGF0ZVN0YWNrLnBvcCgpO1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IG51bGw7XG5cdH07IC8vIEFuaW1hdGlvbiBMb29wXG5cblxuXHRsZXQgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrID0gbnVsbDtcblxuXHRmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKHRpbWUpIHtcblx0XHRpZiAob25BbmltYXRpb25GcmFtZUNhbGxiYWNrKSBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sodGltZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBvblhSU2Vzc2lvblN0YXJ0KCkge1xuXHRcdGFuaW1hdGlvbi5zdG9wKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBvblhSU2Vzc2lvbkVuZCgpIHtcblx0XHRhbmltYXRpb24uc3RhcnQoKTtcblx0fVxuXG5cdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBXZWJHTEFuaW1hdGlvbigpO1xuXHRhbmltYXRpb24uc2V0QW5pbWF0aW9uTG9vcChvbkFuaW1hdGlvbkZyYW1lKTtcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBhbmltYXRpb24uc2V0Q29udGV4dCh3aW5kb3cpO1xuXG5cdHRoaXMuc2V0QW5pbWF0aW9uTG9vcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHhyLnNldEFuaW1hdGlvbkxvb3AoY2FsbGJhY2spO1xuXHRcdGNhbGxiYWNrID09PSBudWxsID8gYW5pbWF0aW9uLnN0b3AoKSA6IGFuaW1hdGlvbi5zdGFydCgpO1xuXHR9O1xuXG5cdHhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIG9uWFJTZXNzaW9uU3RhcnQpO1xuXHR4ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgb25YUlNlc3Npb25FbmQpOyAvLyBSZW5kZXJpbmdcblxuXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uIChzY2VuZSwgY2FtZXJhKSB7XG5cdFx0aWYgKGNhbWVyYSAhPT0gdW5kZWZpbmVkICYmIGNhbWVyYS5pc0NhbWVyYSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChfaXNDb250ZXh0TG9zdCA9PT0gdHJ1ZSkgcmV0dXJuOyAvLyB1cGRhdGUgc2NlbmUgZ3JhcGhcblxuXHRcdGlmIChzY2VuZS5hdXRvVXBkYXRlID09PSB0cnVlKSBzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCgpOyAvLyB1cGRhdGUgY2FtZXJhIG1hdHJpY2VzIGFuZCBmcnVzdHVtXG5cblx0XHRpZiAoY2FtZXJhLnBhcmVudCA9PT0gbnVsbCkgY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRpZiAoeHIuZW5hYmxlZCA9PT0gdHJ1ZSAmJiB4ci5pc1ByZXNlbnRpbmcgPT09IHRydWUpIHtcblx0XHRcdGlmICh4ci5jYW1lcmFBdXRvVXBkYXRlID09PSB0cnVlKSB4ci51cGRhdGVDYW1lcmEoY2FtZXJhKTtcblx0XHRcdGNhbWVyYSA9IHhyLmdldENhbWVyYSgpOyAvLyB1c2UgWFIgY2FtZXJhIGZvciByZW5kZXJpbmdcblx0XHR9IC8vXG5cblxuXHRcdGlmIChzY2VuZS5pc1NjZW5lID09PSB0cnVlKSBzY2VuZS5vbkJlZm9yZVJlbmRlcihfdGhpcywgc2NlbmUsIGNhbWVyYSwgX2N1cnJlbnRSZW5kZXJUYXJnZXQpO1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoc2NlbmUsIHJlbmRlclN0YXRlU3RhY2subGVuZ3RoKTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuaW5pdCgpO1xuXHRcdHJlbmRlclN0YXRlU3RhY2sucHVzaChjdXJyZW50UmVuZGVyU3RhdGUpO1xuXG5cdFx0X3Byb2pTY3JlZW5NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cblx0XHRfZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChfcHJvalNjcmVlbk1hdHJpeCk7XG5cblx0XHRfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPSB0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO1xuXHRcdF9jbGlwcGluZ0VuYWJsZWQgPSBjbGlwcGluZy5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsIF9sb2NhbENsaXBwaW5nRW5hYmxlZCwgY2FtZXJhKTtcblx0XHRjdXJyZW50UmVuZGVyTGlzdCA9IHJlbmRlckxpc3RzLmdldChzY2VuZSwgcmVuZGVyTGlzdFN0YWNrLmxlbmd0aCk7XG5cdFx0Y3VycmVudFJlbmRlckxpc3QuaW5pdCgpO1xuXHRcdHJlbmRlckxpc3RTdGFjay5wdXNoKGN1cnJlbnRSZW5kZXJMaXN0KTtcblx0XHRwcm9qZWN0T2JqZWN0KHNjZW5lLCBjYW1lcmEsIDAsIF90aGlzLnNvcnRPYmplY3RzKTtcblx0XHRjdXJyZW50UmVuZGVyTGlzdC5maW5pc2goKTtcblxuXHRcdGlmIChfdGhpcy5zb3J0T2JqZWN0cyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y3VycmVudFJlbmRlckxpc3Quc29ydChfb3BhcXVlU29ydCwgX3RyYW5zcGFyZW50U29ydCk7XG5cdFx0fSAvL1xuXG5cblx0XHRpZiAoX2NsaXBwaW5nRW5hYmxlZCA9PT0gdHJ1ZSkgY2xpcHBpbmcuYmVnaW5TaGFkb3dzKCk7XG5cdFx0Y29uc3Qgc2hhZG93c0FycmF5ID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLnNoYWRvd3NBcnJheTtcblx0XHRzaGFkb3dNYXAucmVuZGVyKHNoYWRvd3NBcnJheSwgc2NlbmUsIGNhbWVyYSk7XG5cdFx0aWYgKF9jbGlwcGluZ0VuYWJsZWQgPT09IHRydWUpIGNsaXBwaW5nLmVuZFNoYWRvd3MoKTsgLy9cblxuXHRcdGlmICh0aGlzLmluZm8uYXV0b1Jlc2V0ID09PSB0cnVlKSB0aGlzLmluZm8ucmVzZXQoKTsgLy9cblxuXHRcdGJhY2tncm91bmQucmVuZGVyKGN1cnJlbnRSZW5kZXJMaXN0LCBzY2VuZSk7IC8vIHJlbmRlciBzY2VuZVxuXG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLnNldHVwTGlnaHRzKF90aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKTtcblxuXHRcdGlmIChjYW1lcmEuaXNBcnJheUNhbWVyYSkge1xuXHRcdFx0Y29uc3QgY2FtZXJhcyA9IGNhbWVyYS5jYW1lcmFzO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNhbWVyYXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGNhbWVyYTIgPSBjYW1lcmFzW2ldO1xuXHRcdFx0XHRyZW5kZXJTY2VuZShjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYTIsIGNhbWVyYTIudmlld3BvcnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW5kZXJTY2VuZShjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYSk7XG5cdFx0fSAvL1xuXG5cblx0XHRpZiAoX2N1cnJlbnRSZW5kZXJUYXJnZXQgIT09IG51bGwpIHtcblx0XHRcdC8vIHJlc29sdmUgbXVsdGlzYW1wbGUgcmVuZGVyYnVmZmVycyB0byBhIHNpbmdsZS1zYW1wbGUgdGV4dHVyZSBpZiBuZWNlc3Nhcnlcblx0XHRcdHRleHR1cmVzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KF9jdXJyZW50UmVuZGVyVGFyZ2V0KTsgLy8gR2VuZXJhdGUgbWlwbWFwIGlmIHdlJ3JlIHVzaW5nIGFueSBraW5kIG9mIG1pcG1hcCBmaWx0ZXJpbmdcblxuXHRcdFx0dGV4dHVyZXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKF9jdXJyZW50UmVuZGVyVGFyZ2V0KTtcblx0XHR9IC8vXG5cblxuXHRcdGlmIChzY2VuZS5pc1NjZW5lID09PSB0cnVlKSBzY2VuZS5vbkFmdGVyUmVuZGVyKF90aGlzLCBzY2VuZSwgY2FtZXJhKTsgLy8gRW5zdXJlIGRlcHRoIGJ1ZmZlciB3cml0aW5nIGlzIGVuYWJsZWQgc28gaXQgY2FuIGJlIGNsZWFyZWQgb24gbmV4dCByZW5kZXJcblxuXHRcdHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCh0cnVlKTtcblx0XHRzdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2sodHJ1ZSk7XG5cdFx0c3RhdGUuYnVmZmVycy5jb2xvci5zZXRNYXNrKHRydWUpO1xuXHRcdHN0YXRlLnNldFBvbHlnb25PZmZzZXQoZmFsc2UpOyAvLyBfZ2wuZmluaXNoKCk7XG5cblx0XHRiaW5kaW5nU3RhdGVzLnJlc2V0RGVmYXVsdFN0YXRlKCk7XG5cdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gLTE7XG5cdFx0X2N1cnJlbnRDYW1lcmEgPSBudWxsO1xuXHRcdHJlbmRlclN0YXRlU3RhY2sucG9wKCk7XG5cblx0XHRpZiAocmVuZGVyU3RhdGVTdGFjay5sZW5ndGggPiAwKSB7XG5cdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZVN0YWNrW3JlbmRlclN0YXRlU3RhY2subGVuZ3RoIC0gMV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmVuZGVyTGlzdFN0YWNrLnBvcCgpO1xuXG5cdFx0aWYgKHJlbmRlckxpc3RTdGFjay5sZW5ndGggPiAwKSB7XG5cdFx0XHRjdXJyZW50UmVuZGVyTGlzdCA9IHJlbmRlckxpc3RTdGFja1tyZW5kZXJMaXN0U3RhY2subGVuZ3RoIC0gMV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0ID0gbnVsbDtcblx0XHR9XG5cdH07XG5cblx0ZnVuY3Rpb24gcHJvamVjdE9iamVjdChvYmplY3QsIGNhbWVyYSwgZ3JvdXBPcmRlciwgc29ydE9iamVjdHMpIHtcblx0XHRpZiAob2JqZWN0LnZpc2libGUgPT09IGZhbHNlKSByZXR1cm47XG5cdFx0Y29uc3QgdmlzaWJsZSA9IG9iamVjdC5sYXllcnMudGVzdChjYW1lcmEubGF5ZXJzKTtcblxuXHRcdGlmICh2aXNpYmxlKSB7XG5cdFx0XHRpZiAob2JqZWN0LmlzR3JvdXApIHtcblx0XHRcdFx0Z3JvdXBPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzTE9EKSB7XG5cdFx0XHRcdGlmIChvYmplY3QuYXV0b1VwZGF0ZSA9PT0gdHJ1ZSkgb2JqZWN0LnVwZGF0ZShjYW1lcmEpO1xuXHRcdFx0fSBlbHNlIGlmIChvYmplY3QuaXNMaWdodCkge1xuXHRcdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUucHVzaExpZ2h0KG9iamVjdCk7XG5cblx0XHRcdFx0aWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XG5cdFx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hTaGFkb3cob2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvYmplY3QuaXNTcHJpdGUpIHtcblx0XHRcdFx0aWYgKCFvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzU3ByaXRlKG9iamVjdCkpIHtcblx0XHRcdFx0XHRpZiAoc29ydE9iamVjdHMpIHtcblx0XHRcdFx0XHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbihvYmplY3QubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChfcHJvalNjcmVlbk1hdHJpeCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3RzLnVwZGF0ZShvYmplY3QpO1xuXHRcdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnB1c2gob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIF92ZWN0b3IzLnosIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvYmplY3QuaXNNZXNoIHx8IG9iamVjdC5pc0xpbmUgfHwgb2JqZWN0LmlzUG9pbnRzKSB7XG5cdFx0XHRcdGlmIChvYmplY3QuaXNTa2lubmVkTWVzaCkge1xuXHRcdFx0XHRcdC8vIHVwZGF0ZSBza2VsZXRvbiBvbmx5IG9uY2UgaW4gYSBmcmFtZVxuXHRcdFx0XHRcdGlmIChvYmplY3Quc2tlbGV0b24uZnJhbWUgIT09IGluZm8ucmVuZGVyLmZyYW1lKSB7XG5cdFx0XHRcdFx0XHRvYmplY3Quc2tlbGV0b24udXBkYXRlKCk7XG5cdFx0XHRcdFx0XHRvYmplY3Quc2tlbGV0b24uZnJhbWUgPSBpbmZvLnJlbmRlci5mcmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW9iamVjdC5mcnVzdHVtQ3VsbGVkIHx8IF9mcnVzdHVtLmludGVyc2VjdHNPYmplY3Qob2JqZWN0KSkge1xuXHRcdFx0XHRcdGlmIChzb3J0T2JqZWN0cykge1xuXHRcdFx0XHRcdFx0X3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG9iamVjdC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KF9wcm9qU2NyZWVuTWF0cml4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBnZW9tZXRyeSA9IG9iamVjdHMudXBkYXRlKG9iamVjdCk7XG5cdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwcztcblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwTWF0ZXJpYWwgJiYgZ3JvdXBNYXRlcmlhbC52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFJlbmRlckxpc3QucHVzaChvYmplY3QsIGdlb21ldHJ5LCBncm91cE1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBncm91cCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnB1c2gob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIF92ZWN0b3IzLnosIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNoaWxkcmVuID0gb2JqZWN0LmNoaWxkcmVuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHByb2plY3RPYmplY3QoY2hpbGRyZW5baV0sIGNhbWVyYSwgZ3JvdXBPcmRlciwgc29ydE9iamVjdHMpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlclNjZW5lKGN1cnJlbnRSZW5kZXJMaXN0LCBzY2VuZSwgY2FtZXJhLCB2aWV3cG9ydCkge1xuXHRcdGNvbnN0IG9wYXF1ZU9iamVjdHMgPSBjdXJyZW50UmVuZGVyTGlzdC5vcGFxdWU7XG5cdFx0Y29uc3QgdHJhbnNtaXNzaXZlT2JqZWN0cyA9IGN1cnJlbnRSZW5kZXJMaXN0LnRyYW5zbWlzc2l2ZTtcblx0XHRjb25zdCB0cmFuc3BhcmVudE9iamVjdHMgPSBjdXJyZW50UmVuZGVyTGlzdC50cmFuc3BhcmVudDtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuc2V0dXBMaWdodHNWaWV3KGNhbWVyYSk7XG5cdFx0aWYgKHRyYW5zbWlzc2l2ZU9iamVjdHMubGVuZ3RoID4gMCkgcmVuZGVyVHJhbnNtaXNzaW9uUGFzcyhvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhKTtcblx0XHRpZiAodmlld3BvcnQpIHN0YXRlLnZpZXdwb3J0KF9jdXJyZW50Vmlld3BvcnQuY29weSh2aWV3cG9ydCkpO1xuXHRcdGlmIChvcGFxdWVPYmplY3RzLmxlbmd0aCA+IDApIHJlbmRlck9iamVjdHMob3BhcXVlT2JqZWN0cywgc2NlbmUsIGNhbWVyYSk7XG5cdFx0aWYgKHRyYW5zbWlzc2l2ZU9iamVjdHMubGVuZ3RoID4gMCkgcmVuZGVyT2JqZWN0cyh0cmFuc21pc3NpdmVPYmplY3RzLCBzY2VuZSwgY2FtZXJhKTtcblx0XHRpZiAodHJhbnNwYXJlbnRPYmplY3RzLmxlbmd0aCA+IDApIHJlbmRlck9iamVjdHModHJhbnNwYXJlbnRPYmplY3RzLCBzY2VuZSwgY2FtZXJhKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlclRyYW5zbWlzc2lvblBhc3Mob3BhcXVlT2JqZWN0cywgc2NlbmUsIGNhbWVyYSkge1xuXHRcdGlmIChfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHRjb25zdCBuZWVkc0FudGlhbGlhcyA9IF9hbnRpYWxpYXMgPT09IHRydWUgJiYgY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSB0cnVlO1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0VHlwZSA9IG5lZWRzQW50aWFsaWFzID8gV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA6IFdlYkdMUmVuZGVyVGFyZ2V0O1xuXHRcdFx0X3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9IG5ldyByZW5kZXJUYXJnZXRUeXBlKDEwMjQsIDEwMjQsIHtcblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiB1dGlscy5jb252ZXJ0KEhhbGZGbG9hdFR5cGUpICE9PSBudWxsID8gSGFsZkZsb2F0VHlwZSA6IFVuc2lnbmVkQnl0ZVR5cGUsXG5cdFx0XHRcdG1pbkZpbHRlcjogTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyLFxuXHRcdFx0XHRtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXG5cdFx0XHRcdHdyYXBTOiBDbGFtcFRvRWRnZVdyYXBwaW5nLFxuXHRcdFx0XHR3cmFwVDogQ2xhbXBUb0VkZ2VXcmFwcGluZyxcblx0XHRcdFx0dXNlUmVuZGVyVG9UZXh0dXJlOiBleHRlbnNpb25zLmhhcygnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJylcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSBfdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdF90aGlzLnNldFJlbmRlclRhcmdldChfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KTtcblxuXHRcdF90aGlzLmNsZWFyKCk7IC8vIFR1cm4gb2ZmIHRoZSBmZWF0dXJlcyB3aGljaCBjYW4gYWZmZWN0IHRoZSBmcmFnIGNvbG9yIGZvciBvcGFxdWUgb2JqZWN0cyBwYXNzLlxuXHRcdC8vIE90aGVyd2lzZSB0aGV5IGFyZSBhcHBsaWVkIHR3aWNlIGluIG9wYXF1ZSBvYmplY3RzIHBhc3MgYW5kIHRyYW5zbWlzc2lvbiBvYmplY3RzIHBhc3MuXG5cblxuXHRcdGNvbnN0IGN1cnJlbnRUb25lTWFwcGluZyA9IF90aGlzLnRvbmVNYXBwaW5nO1xuXHRcdF90aGlzLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZztcblx0XHRyZW5kZXJPYmplY3RzKG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEpO1xuXHRcdF90aGlzLnRvbmVNYXBwaW5nID0gY3VycmVudFRvbmVNYXBwaW5nO1xuXHRcdHRleHR1cmVzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQpO1xuXHRcdHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KTtcblxuXHRcdF90aGlzLnNldFJlbmRlclRhcmdldChjdXJyZW50UmVuZGVyVGFyZ2V0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlck9iamVjdHMocmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYSkge1xuXHRcdGNvbnN0IG92ZXJyaWRlTWF0ZXJpYWwgPSBzY2VuZS5pc1NjZW5lID09PSB0cnVlID8gc2NlbmUub3ZlcnJpZGVNYXRlcmlhbCA6IG51bGw7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHJlbmRlckxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCByZW5kZXJJdGVtID0gcmVuZGVyTGlzdFtpXTtcblx0XHRcdGNvbnN0IG9iamVjdCA9IHJlbmRlckl0ZW0ub2JqZWN0O1xuXHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSByZW5kZXJJdGVtLmdlb21ldHJ5O1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvdmVycmlkZU1hdGVyaWFsID09PSBudWxsID8gcmVuZGVySXRlbS5tYXRlcmlhbCA6IG92ZXJyaWRlTWF0ZXJpYWw7XG5cdFx0XHRjb25zdCBncm91cCA9IHJlbmRlckl0ZW0uZ3JvdXA7XG5cblx0XHRcdGlmIChvYmplY3QubGF5ZXJzLnRlc3QoY2FtZXJhLmxheWVycykpIHtcblx0XHRcdFx0cmVuZGVyT2JqZWN0KG9iamVjdCwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0KG9iamVjdCwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCkge1xuXHRcdG9iamVjdC5vbkJlZm9yZVJlbmRlcihfdGhpcywgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCk7XG5cdFx0b2JqZWN0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9iamVjdC5tYXRyaXhXb3JsZCk7XG5cdFx0b2JqZWN0Lm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgob2JqZWN0Lm1vZGVsVmlld01hdHJpeCk7XG5cdFx0bWF0ZXJpYWwub25CZWZvcmVSZW5kZXIoX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBvYmplY3QsIGdyb3VwKTtcblxuXHRcdGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCA9PT0gdHJ1ZSAmJiBtYXRlcmlhbC5zaWRlID09PSBEb3VibGVTaWRlKSB7XG5cdFx0XHRtYXRlcmlhbC5zaWRlID0gQmFja1NpZGU7XG5cdFx0XHRtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdF90aGlzLnJlbmRlckJ1ZmZlckRpcmVjdChjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXApO1xuXG5cdFx0XHRtYXRlcmlhbC5zaWRlID0gRnJvbnRTaWRlO1xuXHRcdFx0bWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRfdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QoY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwKTtcblxuXHRcdFx0bWF0ZXJpYWwuc2lkZSA9IERvdWJsZVNpZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF90aGlzLnJlbmRlckJ1ZmZlckRpcmVjdChjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXApO1xuXHRcdH1cblxuXHRcdG9iamVjdC5vbkFmdGVyUmVuZGVyKF90aGlzLCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFByb2dyYW0obWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QpIHtcblx0XHRpZiAoc2NlbmUuaXNTY2VuZSAhPT0gdHJ1ZSkgc2NlbmUgPSBfZW1wdHlTY2VuZTsgLy8gc2NlbmUgY291bGQgYmUgYSBNZXNoLCBMaW5lLCBQb2ludHMsIC4uLlxuXG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpO1xuXHRcdGNvbnN0IGxpZ2h0cyA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5saWdodHM7XG5cdFx0Y29uc3Qgc2hhZG93c0FycmF5ID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLnNoYWRvd3NBcnJheTtcblx0XHRjb25zdCBsaWdodHNTdGF0ZVZlcnNpb24gPSBsaWdodHMuc3RhdGUudmVyc2lvbjtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gcHJvZ3JhbUNhY2hlLmdldFBhcmFtZXRlcnMobWF0ZXJpYWwsIGxpZ2h0cy5zdGF0ZSwgc2hhZG93c0FycmF5LCBzY2VuZSwgb2JqZWN0KTtcblx0XHRjb25zdCBwcm9ncmFtQ2FjaGVLZXkgPSBwcm9ncmFtQ2FjaGUuZ2V0UHJvZ3JhbUNhY2hlS2V5KHBhcmFtZXRlcnMpO1xuXHRcdGxldCBwcm9ncmFtcyA9IG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtczsgLy8gYWx3YXlzIHVwZGF0ZSBlbnZpcm9ubWVudCBhbmQgZm9nIC0gY2hhbmdpbmcgdGhlc2UgdHJpZ2dlciBhbiBnZXRQcm9ncmFtIGNhbGwsIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHByb2dyYW0gZG9lc24ndCBjaGFuZ2VcblxuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5lbnZpcm9ubWVudCA9IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBzY2VuZS5lbnZpcm9ubWVudCA6IG51bGw7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmZvZyA9IHNjZW5lLmZvZztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuZW52TWFwID0gKG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMpLmdldChtYXRlcmlhbC5lbnZNYXAgfHwgbWF0ZXJpYWxQcm9wZXJ0aWVzLmVudmlyb25tZW50KTtcblxuXHRcdGlmIChwcm9ncmFtcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBuZXcgbWF0ZXJpYWxcblx0XHRcdG1hdGVyaWFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvbk1hdGVyaWFsRGlzcG9zZSk7XG5cdFx0XHRwcm9ncmFtcyA9IG5ldyBNYXAoKTtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtcyA9IHByb2dyYW1zO1xuXHRcdH1cblxuXHRcdGxldCBwcm9ncmFtID0gcHJvZ3JhbXMuZ2V0KHByb2dyYW1DYWNoZUtleSk7XG5cblx0XHRpZiAocHJvZ3JhbSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBlYXJseSBvdXQgaWYgcHJvZ3JhbSBhbmQgbGlnaHQgc3RhdGUgaXMgaWRlbnRpY2FsXG5cdFx0XHRpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtID09PSBwcm9ncmFtICYmIG1hdGVyaWFsUHJvcGVydGllcy5saWdodHNTdGF0ZVZlcnNpb24gPT09IGxpZ2h0c1N0YXRlVmVyc2lvbikge1xuXHRcdFx0XHR1cGRhdGVDb21tb25NYXRlcmlhbFByb3BlcnRpZXMobWF0ZXJpYWwsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRyZXR1cm4gcHJvZ3JhbTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyYW1ldGVycy51bmlmb3JtcyA9IHByb2dyYW1DYWNoZS5nZXRVbmlmb3JtcyhtYXRlcmlhbCk7XG5cdFx0XHRtYXRlcmlhbC5vbkJ1aWxkKG9iamVjdCwgcGFyYW1ldGVycywgX3RoaXMpO1xuXHRcdFx0bWF0ZXJpYWwub25CZWZvcmVDb21waWxlKHBhcmFtZXRlcnMsIF90aGlzKTtcblx0XHRcdHByb2dyYW0gPSBwcm9ncmFtQ2FjaGUuYWNxdWlyZVByb2dyYW0ocGFyYW1ldGVycywgcHJvZ3JhbUNhY2hlS2V5KTtcblx0XHRcdHByb2dyYW1zLnNldChwcm9ncmFtQ2FjaGVLZXksIHByb2dyYW0pO1xuXHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zID0gcGFyYW1ldGVycy51bmlmb3Jtcztcblx0XHR9XG5cblx0XHRjb25zdCB1bmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcztcblxuXHRcdGlmICghbWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCAmJiAhbWF0ZXJpYWwuaXNSYXdTaGFkZXJNYXRlcmlhbCB8fCBtYXRlcmlhbC5jbGlwcGluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dW5pZm9ybXMuY2xpcHBpbmdQbGFuZXMgPSBjbGlwcGluZy51bmlmb3JtO1xuXHRcdH1cblxuXHRcdHVwZGF0ZUNvbW1vbk1hdGVyaWFsUHJvcGVydGllcyhtYXRlcmlhbCwgcGFyYW1ldGVycyk7IC8vIHN0b3JlIHRoZSBsaWdodCBzZXR1cCBpdCB3YXMgY3JlYXRlZCBmb3JcblxuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5uZWVkc0xpZ2h0cyA9IG1hdGVyaWFsTmVlZHNMaWdodHMobWF0ZXJpYWwpO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5saWdodHNTdGF0ZVZlcnNpb24gPSBsaWdodHNTdGF0ZVZlcnNpb247XG5cblx0XHRpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzKSB7XG5cdFx0XHQvLyB3aXJlIHVwIHRoZSBtYXRlcmlhbCB0byB0aGlzIHJlbmRlcmVyJ3MgbGlnaHRpbmcgc3RhdGVcblx0XHRcdHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLnZhbHVlID0gbGlnaHRzLnN0YXRlLmFtYmllbnQ7XG5cdFx0XHR1bmlmb3Jtcy5saWdodFByb2JlLnZhbHVlID0gbGlnaHRzLnN0YXRlLnByb2JlO1xuXHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUuZGlyZWN0aW9uYWw7XG5cdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdztcblx0XHRcdHVuaWZvcm1zLnNwb3RMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUuc3BvdDtcblx0XHRcdHVuaWZvcm1zLnNwb3RMaWdodFNoYWRvd3MudmFsdWUgPSBsaWdodHMuc3RhdGUuc3BvdFNoYWRvdztcblx0XHRcdHVuaWZvcm1zLnJlY3RBcmVhTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnJlY3RBcmVhO1xuXHRcdFx0dW5pZm9ybXMubHRjXzEudmFsdWUgPSBsaWdodHMuc3RhdGUucmVjdEFyZWFMVEMxO1xuXHRcdFx0dW5pZm9ybXMubHRjXzIudmFsdWUgPSBsaWdodHMuc3RhdGUucmVjdEFyZWFMVEMyO1xuXHRcdFx0dW5pZm9ybXMucG9pbnRMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUucG9pbnQ7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludExpZ2h0U2hhZG93cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludFNoYWRvdztcblx0XHRcdHVuaWZvcm1zLmhlbWlzcGhlcmVMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUuaGVtaTtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWUgPSBsaWdodHMuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg7XG5cdFx0XHR1bmlmb3Jtcy5zcG90U2hhZG93TWFwLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3dNYXA7XG5cdFx0XHR1bmlmb3Jtcy5zcG90U2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXg7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludFNoYWRvd01hcDtcblx0XHRcdHVuaWZvcm1zLnBvaW50U2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50U2hhZG93TWF0cml4OyAvLyBUT0RPIChhYmVsbmF0aW9uKTogYWRkIGFyZWEgbGlnaHRzIHNoYWRvdyBpbmZvIHRvIHVuaWZvcm1zXG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvZ1VuaWZvcm1zID0gcHJvZ3JhbS5nZXRVbmlmb3JtcygpO1xuXHRcdGNvbnN0IHVuaWZvcm1zTGlzdCA9IFdlYkdMVW5pZm9ybXMuc2VxV2l0aFZhbHVlKHByb2dVbmlmb3Jtcy5zZXEsIHVuaWZvcm1zKTtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3Jtc0xpc3QgPSB1bmlmb3Jtc0xpc3Q7XG5cdFx0cmV0dXJuIHByb2dyYW07XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVDb21tb25NYXRlcmlhbFByb3BlcnRpZXMobWF0ZXJpYWwsIHBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChtYXRlcmlhbCk7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm91dHB1dEVuY29kaW5nID0gcGFyYW1ldGVycy5vdXRwdXRFbmNvZGluZztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuaW5zdGFuY2luZyA9IHBhcmFtZXRlcnMuaW5zdGFuY2luZztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuc2tpbm5pbmcgPSBwYXJhbWV0ZXJzLnNraW5uaW5nO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaFRhcmdldHMgPSBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhOb3JtYWxzID0gcGFyYW1ldGVycy5tb3JwaE5vcm1hbHM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoVGFyZ2V0c0NvdW50ID0gcGFyYW1ldGVycy5tb3JwaFRhcmdldHNDb3VudDtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubnVtQ2xpcHBpbmdQbGFuZXMgPSBwYXJhbWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5udW1JbnRlcnNlY3Rpb24gPSBwYXJhbWV0ZXJzLm51bUNsaXBJbnRlcnNlY3Rpb247XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleEFscGhhcyA9IHBhcmFtZXRlcnMudmVydGV4QWxwaGFzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy52ZXJ0ZXhUYW5nZW50cyA9IHBhcmFtZXRlcnMudmVydGV4VGFuZ2VudHM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnRvbmVNYXBwaW5nID0gcGFyYW1ldGVycy50b25lTWFwcGluZztcblx0fVxuXG5cdGZ1bmN0aW9uIHNldFByb2dyYW0oY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QpIHtcblx0XHRpZiAoc2NlbmUuaXNTY2VuZSAhPT0gdHJ1ZSkgc2NlbmUgPSBfZW1wdHlTY2VuZTsgLy8gc2NlbmUgY291bGQgYmUgYSBNZXNoLCBMaW5lLCBQb2ludHMsIC4uLlxuXG5cdFx0dGV4dHVyZXMucmVzZXRUZXh0dXJlVW5pdHMoKTtcblx0XHRjb25zdCBmb2cgPSBzY2VuZS5mb2c7XG5cdFx0Y29uc3QgZW52aXJvbm1lbnQgPSBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gc2NlbmUuZW52aXJvbm1lbnQgOiBudWxsO1xuXHRcdGNvbnN0IGVuY29kaW5nID0gX2N1cnJlbnRSZW5kZXJUYXJnZXQgPT09IG51bGwgPyBfdGhpcy5vdXRwdXRFbmNvZGluZyA6IF9jdXJyZW50UmVuZGVyVGFyZ2V0LmlzWFJSZW5kZXJUYXJnZXQgPT09IHRydWUgPyBfY3VycmVudFJlbmRlclRhcmdldC50ZXh0dXJlLmVuY29kaW5nIDogTGluZWFyRW5jb2Rpbmc7XG5cdFx0Y29uc3QgZW52TWFwID0gKG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMpLmdldChtYXRlcmlhbC5lbnZNYXAgfHwgZW52aXJvbm1lbnQpO1xuXHRcdGNvbnN0IHZlcnRleEFscGhhcyA9IG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gdHJ1ZSAmJiAhIWdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSA9PT0gNDtcblx0XHRjb25zdCB2ZXJ0ZXhUYW5nZW50cyA9ICEhbWF0ZXJpYWwubm9ybWFsTWFwICYmICEhZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50O1xuXHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9ICEhZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IG1vcnBoTm9ybWFscyA9ICEhZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtcblx0XHRjb25zdCBtb3JwaFRhcmdldHNDb3VudCA9ICEhZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uID8gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCA6IDA7XG5cdFx0Y29uc3QgdG9uZU1hcHBpbmcgPSBtYXRlcmlhbC50b25lTWFwcGVkID8gX3RoaXMudG9uZU1hcHBpbmcgOiBOb1RvbmVNYXBwaW5nO1xuXHRcdGNvbnN0IG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KG1hdGVyaWFsKTtcblx0XHRjb25zdCBsaWdodHMgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUubGlnaHRzO1xuXG5cdFx0aWYgKF9jbGlwcGluZ0VuYWJsZWQgPT09IHRydWUpIHtcblx0XHRcdGlmIChfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPT09IHRydWUgfHwgY2FtZXJhICE9PSBfY3VycmVudENhbWVyYSkge1xuXHRcdFx0XHRjb25zdCB1c2VDYWNoZSA9IGNhbWVyYSA9PT0gX2N1cnJlbnRDYW1lcmEgJiYgbWF0ZXJpYWwuaWQgPT09IF9jdXJyZW50TWF0ZXJpYWxJZDsgLy8gd2UgbWlnaHQgd2FudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBzb21lIENsaXBwaW5nR3JvdXBcblx0XHRcdFx0Ly8gb2JqZWN0IGluc3RlYWQgb2YgdGhlIG1hdGVyaWFsLCBvbmNlIGl0IGJlY29tZXMgZmVhc2libGVcblx0XHRcdFx0Ly8gKCM4NDY1LCAjODM3OSlcblxuXHRcdFx0XHRjbGlwcGluZy5zZXRTdGF0ZShtYXRlcmlhbCwgY2FtZXJhLCB1c2VDYWNoZSk7XG5cdFx0XHR9XG5cdFx0fSAvL1xuXG5cblx0XHRsZXQgbmVlZHNQcm9ncmFtQ2hhbmdlID0gZmFsc2U7XG5cblx0XHRpZiAobWF0ZXJpYWwudmVyc2lvbiA9PT0gbWF0ZXJpYWxQcm9wZXJ0aWVzLl9fdmVyc2lvbikge1xuXHRcdFx0aWYgKG1hdGVyaWFsUHJvcGVydGllcy5uZWVkc0xpZ2h0cyAmJiBtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzU3RhdGVWZXJzaW9uICE9PSBsaWdodHMuc3RhdGUudmVyc2lvbikge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMub3V0cHV0RW5jb2RpbmcgIT09IGVuY29kaW5nKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc0luc3RhbmNlZE1lc2ggJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmluc3RhbmNpbmcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKCFvYmplY3QuaXNJbnN0YW5jZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5pbnN0YW5jaW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5za2lubmluZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoIW9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5za2lubmluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMuZW52TWFwICE9PSBlbnZNYXApIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuZm9nICYmIG1hdGVyaWFsUHJvcGVydGllcy5mb2cgIT09IGZvZykge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMubnVtQ2xpcHBpbmdQbGFuZXMgIT09IHVuZGVmaW5lZCAmJiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzICE9PSBjbGlwcGluZy5udW1QbGFuZXMgfHwgbWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUludGVyc2VjdGlvbiAhPT0gY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uKSkge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMudmVydGV4QWxwaGFzICE9PSB2ZXJ0ZXhBbHBoYXMpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleFRhbmdlbnRzICE9PSB2ZXJ0ZXhUYW5nZW50cykge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzICE9PSBtb3JwaFRhcmdldHMpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoTm9ybWFscyAhPT0gbW9ycGhOb3JtYWxzKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsUHJvcGVydGllcy50b25lTWFwcGluZyAhPT0gdG9uZU1hcHBpbmcpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSB0cnVlICYmIG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaFRhcmdldHNDb3VudCAhPT0gbW9ycGhUYXJnZXRzQ291bnQpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5fX3ZlcnNpb24gPSBtYXRlcmlhbC52ZXJzaW9uO1xuXHRcdH0gLy9cblxuXG5cdFx0bGV0IHByb2dyYW0gPSBtYXRlcmlhbFByb3BlcnRpZXMuY3VycmVudFByb2dyYW07XG5cblx0XHRpZiAobmVlZHNQcm9ncmFtQ2hhbmdlID09PSB0cnVlKSB7XG5cdFx0XHRwcm9ncmFtID0gZ2V0UHJvZ3JhbShtYXRlcmlhbCwgc2NlbmUsIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlZnJlc2hQcm9ncmFtID0gZmFsc2U7XG5cdFx0bGV0IHJlZnJlc2hNYXRlcmlhbCA9IGZhbHNlO1xuXHRcdGxldCByZWZyZXNoTGlnaHRzID0gZmFsc2U7XG5cdFx0Y29uc3QgcF91bmlmb3JtcyA9IHByb2dyYW0uZ2V0VW5pZm9ybXMoKSxcblx0XHRcdFx0XHRtX3VuaWZvcm1zID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zO1xuXG5cdFx0aWYgKHN0YXRlLnVzZVByb2dyYW0ocHJvZ3JhbS5wcm9ncmFtKSkge1xuXHRcdFx0cmVmcmVzaFByb2dyYW0gPSB0cnVlO1xuXHRcdFx0cmVmcmVzaE1hdGVyaWFsID0gdHJ1ZTtcblx0XHRcdHJlZnJlc2hMaWdodHMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5pZCAhPT0gX2N1cnJlbnRNYXRlcmlhbElkKSB7XG5cdFx0XHRfY3VycmVudE1hdGVyaWFsSWQgPSBtYXRlcmlhbC5pZDtcblx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZnJlc2hQcm9ncmFtIHx8IF9jdXJyZW50Q2FtZXJhICE9PSBjYW1lcmEpIHtcblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAncHJvamVjdGlvbk1hdHJpeCcsIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcblxuXHRcdFx0aWYgKGNhcGFiaWxpdGllcy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSB7XG5cdFx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAnbG9nRGVwdGhCdWZGQycsIDIuMCAvIChNYXRoLmxvZyhjYW1lcmEuZmFyICsgMS4wKSAvIE1hdGguTE4yKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChfY3VycmVudENhbWVyYSAhPT0gY2FtZXJhKSB7XG5cdFx0XHRcdF9jdXJyZW50Q2FtZXJhID0gY2FtZXJhOyAvLyBsaWdodGluZyB1bmlmb3JtcyBkZXBlbmQgb24gdGhlIGNhbWVyYSBzbyBlbmZvcmNlIGFuIHVwZGF0ZVxuXHRcdFx0XHQvLyBub3csIGluIGNhc2UgdGhpcyBtYXRlcmlhbCBzdXBwb3J0cyBsaWdodHMgLSBvciBsYXRlciwgd2hlblxuXHRcdFx0XHQvLyB0aGUgbmV4dCBtYXRlcmlhbCB0aGF0IGRvZXMgZ2V0cyBhY3RpdmF0ZWQ6XG5cblx0XHRcdFx0cmVmcmVzaE1hdGVyaWFsID0gdHJ1ZTsgLy8gc2V0IHRvIHRydWUgb24gbWF0ZXJpYWwgY2hhbmdlXG5cblx0XHRcdFx0cmVmcmVzaExpZ2h0cyA9IHRydWU7IC8vIHJlbWFpbnMgc2V0IHVudGlsIHVwZGF0ZSBkb25lXG5cdFx0XHR9IC8vIGxvYWQgbWF0ZXJpYWwgc3BlY2lmaWMgdW5pZm9ybXNcblx0XHRcdC8vIChzaGFkZXIgbWF0ZXJpYWwgYWxzbyBnZXRzIHRoZW0gZm9yIHRoZSBzYWtlIG9mIGdlbmVyaWNpdHkpXG5cblxuXHRcdFx0aWYgKG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fCBtYXRlcmlhbC5lbnZNYXApIHtcblx0XHRcdFx0Y29uc3QgdUNhbVBvcyA9IHBfdW5pZm9ybXMubWFwLmNhbWVyYVBvc2l0aW9uO1xuXG5cdFx0XHRcdGlmICh1Q2FtUG9zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR1Q2FtUG9zLnNldFZhbHVlKF9nbCwgX3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFRvb25NYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoQmFzaWNNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwpIHtcblx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdpc09ydGhvZ3JhcGhpYycsIGNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSA9PT0gdHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFRvb25NYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoQmFzaWNNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCB8fCBvYmplY3QuaXNTa2lubmVkTWVzaCkge1xuXHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ3ZpZXdNYXRyaXgnLCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHRcdH1cblx0XHR9IC8vIHNraW5uaW5nIGFuZCBtb3JwaCB0YXJnZXQgdW5pZm9ybXMgbXVzdCBiZSBzZXQgZXZlbiBpZiBtYXRlcmlhbCBkaWRuJ3QgY2hhbmdlXG5cdFx0Ly8gYXV0by1zZXR0aW5nIG9mIHRleHR1cmUgdW5pdCBmb3IgYm9uZSBhbmQgbW9ycGggdGV4dHVyZSBtdXN0IGdvIGJlZm9yZSBvdGhlciB0ZXh0dXJlc1xuXHRcdC8vIG90aGVyd2lzZSB0ZXh0dXJlcyB1c2VkIGZvciBza2lubmluZyBhbmQgbW9ycGhpbmcgY2FuIHRha2Ugb3ZlciB0ZXh0dXJlIHVuaXRzIHJlc2VydmVkIGZvciBvdGhlciBtYXRlcmlhbCB0ZXh0dXJlc1xuXG5cblx0XHRpZiAob2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcblx0XHRcdHBfdW5pZm9ybXMuc2V0T3B0aW9uYWwoX2dsLCBvYmplY3QsICdiaW5kTWF0cml4Jyk7XG5cdFx0XHRwX3VuaWZvcm1zLnNldE9wdGlvbmFsKF9nbCwgb2JqZWN0LCAnYmluZE1hdHJpeEludmVyc2UnKTtcblx0XHRcdGNvbnN0IHNrZWxldG9uID0gb2JqZWN0LnNrZWxldG9uO1xuXG5cdFx0XHRpZiAoc2tlbGV0b24pIHtcblx0XHRcdFx0aWYgKGNhcGFiaWxpdGllcy5mbG9hdFZlcnRleFRleHR1cmVzKSB7XG5cdFx0XHRcdFx0aWYgKHNrZWxldG9uLmJvbmVUZXh0dXJlID09PSBudWxsKSBza2VsZXRvbi5jb21wdXRlQm9uZVRleHR1cmUoKTtcblx0XHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ2JvbmVUZXh0dXJlJywgc2tlbGV0b24uYm9uZVRleHR1cmUsIHRleHR1cmVzKTtcblx0XHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ2JvbmVUZXh0dXJlU2l6ZScsIHNrZWxldG9uLmJvbmVUZXh0dXJlU2l6ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRPcHRpb25hbChfZ2wsIHNrZWxldG9uLCAnYm9uZU1hdHJpY2VzJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoISFnZW9tZXRyeSAmJiAoZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgfHwgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCAhPT0gdW5kZWZpbmVkKSkge1xuXHRcdFx0bW9ycGh0YXJnZXRzLnVwZGF0ZShvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcHJvZ3JhbSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZnJlc2hNYXRlcmlhbCB8fCBtYXRlcmlhbFByb3BlcnRpZXMucmVjZWl2ZVNoYWRvdyAhPT0gb2JqZWN0LnJlY2VpdmVTaGFkb3cpIHtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5yZWNlaXZlU2hhZG93ID0gb2JqZWN0LnJlY2VpdmVTaGFkb3c7XG5cdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ3JlY2VpdmVTaGFkb3cnLCBvYmplY3QucmVjZWl2ZVNoYWRvdyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZnJlc2hNYXRlcmlhbCkge1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICd0b25lTWFwcGluZ0V4cG9zdXJlJywgX3RoaXMudG9uZU1hcHBpbmdFeHBvc3VyZSk7XG5cblx0XHRcdGlmIChtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMpIHtcblx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbWF0ZXJpYWwgcmVxdWlyZXMgbGlnaHRpbmcgaW5mb1xuXHRcdFx0XHQvLyBub3RlOiBhbGwgbGlnaHRpbmcgdW5pZm9ybXMgYXJlIGFsd2F5cyBzZXQgY29ycmVjdGx5XG5cdFx0XHRcdC8vIHRoZXkgc2ltcGx5IHJlZmVyZW5jZSB0aGUgcmVuZGVyZXIncyBzdGF0ZSBmb3IgdGhlaXJcblx0XHRcdFx0Ly8gdmFsdWVzXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIHVzZSB0aGUgY3VycmVudCBtYXRlcmlhbCdzIC5uZWVkc1VwZGF0ZSBmbGFncyB0byBzZXRcblx0XHRcdFx0Ly8gdGhlIEdMIHN0YXRlIHdoZW4gcmVxdWlyZWRcblx0XHRcdFx0bWFya1VuaWZvcm1zTGlnaHRzTmVlZHNVcGRhdGUobV91bmlmb3JtcywgcmVmcmVzaExpZ2h0cyk7XG5cdFx0XHR9IC8vIHJlZnJlc2ggdW5pZm9ybXMgY29tbW9uIHRvIHNldmVyYWwgbWF0ZXJpYWxzXG5cblxuXHRcdFx0aWYgKGZvZyAmJiBtYXRlcmlhbC5mb2cpIHtcblx0XHRcdFx0bWF0ZXJpYWxzLnJlZnJlc2hGb2dVbmlmb3JtcyhtX3VuaWZvcm1zLCBmb2cpO1xuXHRcdFx0fVxuXG5cdFx0XHRtYXRlcmlhbHMucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMobV91bmlmb3JtcywgbWF0ZXJpYWwsIF9waXhlbFJhdGlvLCBfaGVpZ2h0LCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KTtcblx0XHRcdFdlYkdMVW5pZm9ybXMudXBsb2FkKF9nbCwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCwgbV91bmlmb3JtcywgdGV4dHVyZXMpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmIG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0V2ViR0xVbmlmb3Jtcy51cGxvYWQoX2dsLCBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0LCBtX3VuaWZvcm1zLCB0ZXh0dXJlcyk7XG5cdFx0XHRtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuaXNTcHJpdGVNYXRlcmlhbCkge1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdjZW50ZXInLCBvYmplY3QuY2VudGVyKTtcblx0XHR9IC8vIGNvbW1vbiBtYXRyaWNlc1xuXG5cblx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ21vZGVsVmlld01hdHJpeCcsIG9iamVjdC5tb2RlbFZpZXdNYXRyaXgpO1xuXHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAnbm9ybWFsTWF0cml4Jywgb2JqZWN0Lm5vcm1hbE1hdHJpeCk7XG5cdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdtb2RlbE1hdHJpeCcsIG9iamVjdC5tYXRyaXhXb3JsZCk7XG5cdFx0cmV0dXJuIHByb2dyYW07XG5cdH0gLy8gSWYgdW5pZm9ybXMgYXJlIG1hcmtlZCBhcyBjbGVhbiwgdGhleSBkb24ndCBuZWVkIHRvIGJlIGxvYWRlZCB0byB0aGUgR1BVLlxuXG5cblx0ZnVuY3Rpb24gbWFya1VuaWZvcm1zTGlnaHRzTmVlZHNVcGRhdGUodW5pZm9ybXMsIHZhbHVlKSB7XG5cdFx0dW5pZm9ybXMuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5saWdodFByb2JlLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF0ZXJpYWxOZWVkc0xpZ2h0cyhtYXRlcmlhbCkge1xuXHRcdHJldHVybiBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc1NoYWRvd01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYgbWF0ZXJpYWwubGlnaHRzID09PSB0cnVlO1xuXHR9XG5cblx0dGhpcy5nZXRBY3RpdmVDdWJlRmFjZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gX2N1cnJlbnRBY3RpdmVDdWJlRmFjZTtcblx0fTtcblxuXHR0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBfY3VycmVudEFjdGl2ZU1pcG1hcExldmVsO1xuXHR9O1xuXG5cdHRoaXMuZ2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBfY3VycmVudFJlbmRlclRhcmdldDtcblx0fTtcblxuXHR0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCwgY29sb3JUZXh0dXJlLCBkZXB0aFRleHR1cmUpIHtcblx0XHRwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQudGV4dHVyZSkuX193ZWJnbFRleHR1cmUgPSBjb2xvclRleHR1cmU7XG5cdFx0cHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUgPSBkZXB0aFRleHR1cmU7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2hhc0V4dGVybmFsVGV4dHVyZXMgPSB0cnVlO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzKSB7XG5cdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIgPSBkZXB0aFRleHR1cmUgPT09IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCFyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpIHtcblx0XHRcdFx0Ly8gVGhlIG11bHRpc2FtcGxlX3JlbmRlcl90b190ZXh0dXJlIGV4dGVuc2lvbiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgaWYgdGhlcmVcblx0XHRcdFx0Ly8gYXJlIG1pZGZyYW1lIGZsdXNoZXMgYW5kIGFuIGV4dGVybmFsIGRlcHRoIGJ1ZmZlci4gRGlzYWJsZSB1c2Ugb2YgdGhlIGV4dGVuc2lvbi5cblx0XHRcdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ3JlbmRlci10by10ZXh0dXJlIGV4dGVuc2lvbiB3YXMgZGlzYWJsZWQgYmVjYXVzZSBhbiBleHRlcm5hbCB0ZXh0dXJlIHdhcyBwcm92aWRlZCcpO1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgPSBmYWxzZTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCwgZGVmYXVsdEZyYW1lYnVmZmVyKSB7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgPSBkZWZhdWx0RnJhbWVidWZmZXI7XG5cdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciA9IGRlZmF1bHRGcmFtZWJ1ZmZlciA9PT0gdW5kZWZpbmVkO1xuXHR9O1xuXG5cdHRoaXMuc2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCwgYWN0aXZlQ3ViZUZhY2UgPSAwLCBhY3RpdmVNaXBtYXBMZXZlbCA9IDApIHtcblx0XHRfY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblx0XHRfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gYWN0aXZlQ3ViZUZhY2U7XG5cdFx0X2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbCA9IGFjdGl2ZU1pcG1hcExldmVsO1xuXHRcdGxldCB1c2VEZWZhdWx0RnJhbWVidWZmZXIgPSB0cnVlO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldCkge1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cblx0XHRcdGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gcmViaW5kIHRoZSBmcmFtZWJ1ZmZlci5cblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdFx0XHRcdHVzZURlZmF1bHRGcmFtZWJ1ZmZlciA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmVzLnNldHVwUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzKSB7XG5cdFx0XHRcdC8vIENvbG9yIGFuZCBkZXB0aCB0ZXh0dXJlIG11c3QgYmUgcmVib3VuZCBpbiBvcmRlciBmb3IgdGhlIHN3YXBjaGFpbiB0byB1cGRhdGUuXG5cdFx0XHRcdHRleHR1cmVzLnJlYmluZFRleHR1cmVzKHJlbmRlclRhcmdldCwgcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLCBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGZyYW1lYnVmZmVyID0gbnVsbDtcblx0XHRsZXQgaXNDdWJlID0gZmFsc2U7XG5cdFx0bGV0IGlzUmVuZGVyVGFyZ2V0M0QgPSBmYWxzZTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQpIHtcblx0XHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0aWYgKHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEIHx8IHRleHR1cmUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpIHtcblx0XHRcdFx0aXNSZW5kZXJUYXJnZXQzRCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IF9fd2ViZ2xGcmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCkuX193ZWJnbEZyYW1lYnVmZmVyO1xuXG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRcdGZyYW1lYnVmZmVyID0gX193ZWJnbEZyYW1lYnVmZmVyW2FjdGl2ZUN1YmVGYWNlXTtcblx0XHRcdFx0aXNDdWJlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlcikge1xuXHRcdFx0XHRmcmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnJhbWVidWZmZXIgPSBfX3dlYmdsRnJhbWVidWZmZXI7XG5cdFx0XHR9XG5cblx0XHRcdF9jdXJyZW50Vmlld3BvcnQuY29weShyZW5kZXJUYXJnZXQudmlld3BvcnQpO1xuXG5cdFx0XHRfY3VycmVudFNjaXNzb3IuY29weShyZW5kZXJUYXJnZXQuc2Npc3Nvcik7XG5cblx0XHRcdF9jdXJyZW50U2Npc3NvclRlc3QgPSByZW5kZXJUYXJnZXQuc2Npc3NvclRlc3Q7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9jdXJyZW50Vmlld3BvcnQuY29weShfdmlld3BvcnQpLm11bHRpcGx5U2NhbGFyKF9waXhlbFJhdGlvKS5mbG9vcigpO1xuXG5cdFx0XHRfY3VycmVudFNjaXNzb3IuY29weShfc2Npc3NvcikubXVsdGlwbHlTY2FsYXIoX3BpeGVsUmF0aW8pLmZsb29yKCk7XG5cblx0XHRcdF9jdXJyZW50U2Npc3NvclRlc3QgPSBfc2Npc3NvclRlc3Q7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZnJhbWVidWZmZXJCb3VuZCA9IHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTtcblxuXHRcdGlmIChmcmFtZWJ1ZmZlckJvdW5kICYmIGNhcGFiaWxpdGllcy5kcmF3QnVmZmVycyAmJiB1c2VEZWZhdWx0RnJhbWVidWZmZXIpIHtcblx0XHRcdHN0YXRlLmRyYXdCdWZmZXJzKHJlbmRlclRhcmdldCwgZnJhbWVidWZmZXIpO1xuXHRcdH1cblxuXHRcdHN0YXRlLnZpZXdwb3J0KF9jdXJyZW50Vmlld3BvcnQpO1xuXHRcdHN0YXRlLnNjaXNzb3IoX2N1cnJlbnRTY2lzc29yKTtcblx0XHRzdGF0ZS5zZXRTY2lzc29yVGVzdChfY3VycmVudFNjaXNzb3JUZXN0KTtcblxuXHRcdGlmIChpc0N1YmUpIHtcblx0XHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LnRleHR1cmUpO1xuXG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBhY3RpdmVDdWJlRmFjZSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUsIGFjdGl2ZU1pcG1hcExldmVsKTtcblx0XHR9IGVsc2UgaWYgKGlzUmVuZGVyVGFyZ2V0M0QpIHtcblx0XHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LnRleHR1cmUpO1xuXHRcdFx0Y29uc3QgbGF5ZXIgPSBhY3RpdmVDdWJlRmFjZSB8fCAwO1xuXG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlLCBhY3RpdmVNaXBtYXBMZXZlbCB8fCAwLCBsYXllcik7XG5cdFx0fVxuXG5cdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gLTE7IC8vIHJlc2V0IGN1cnJlbnQgbWF0ZXJpYWwgdG8gZW5zdXJlIGNvcnJlY3QgdW5pZm9ybSBiaW5kaW5nc1xuXHR9O1xuXG5cdHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlciwgYWN0aXZlQ3ViZUZhY2VJbmRleCkge1xuXHRcdGlmICghKHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQuaXNXZWJHTFJlbmRlclRhcmdldCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgZnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgJiYgYWN0aXZlQ3ViZUZhY2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyW2FjdGl2ZUN1YmVGYWNlSW5kZXhdO1xuXHRcdH1cblxuXHRcdGlmIChmcmFtZWJ1ZmZlcikge1xuXHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlLmZvcm1hdDtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlLnR5cGU7XG5cblx0XHRcdFx0aWYgKHRleHR1cmVGb3JtYXQgIT09IFJHQkFGb3JtYXQgJiYgdXRpbHMuY29udmVydCh0ZXh0dXJlRm9ybWF0KSAhPT0gX2dsLmdldFBhcmFtZXRlcihfZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaGFsZkZsb2F0U3VwcG9ydGVkQnlFeHQgPSB0ZXh0dXJlVHlwZSA9PT0gSGFsZkZsb2F0VHlwZSAmJiAoZXh0ZW5zaW9ucy5oYXMoJ0VYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCcpIHx8IGNhcGFiaWxpdGllcy5pc1dlYkdMMiAmJiBleHRlbnNpb25zLmhhcygnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcpKTtcblxuXHRcdFx0XHRpZiAodGV4dHVyZVR5cGUgIT09IFVuc2lnbmVkQnl0ZVR5cGUgJiYgdXRpbHMuY29udmVydCh0ZXh0dXJlVHlwZSkgIT09IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSkgJiYgLy8gRWRnZSBhbmQgQ2hyb21lIE1hYyA8IDUyICgjOTUxMylcblx0XHRcdFx0ISh0ZXh0dXJlVHlwZSA9PT0gRmxvYXRUeXBlICYmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ09FU190ZXh0dXJlX2Zsb2F0JykgfHwgZXh0ZW5zaW9ucy5oYXMoJ1dFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCcpKSkgJiYgLy8gQ2hyb21lIE1hYyA+PSA1MiBhbmQgRmlyZWZveFxuXHRcdFx0XHQhaGFsZkZsb2F0U3VwcG9ydGVkQnlFeHQpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKF9nbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKF9nbC5GUkFNRUJVRkZFUikgPT09IF9nbC5GUkFNRUJVRkZFUl9DT01QTEVURSkge1xuXHRcdFx0XHRcdC8vIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50IGVuc3VyZXMgdmFsaWQgcmVhZCByZXF1ZXN0cyAobm8gb3V0LW9mLWJvdW5kcyBwaXhlbHMsIHNlZSAjODYwNClcblx0XHRcdFx0XHRpZiAoeCA+PSAwICYmIHggPD0gcmVuZGVyVGFyZ2V0LndpZHRoIC0gd2lkdGggJiYgeSA+PSAwICYmIHkgPD0gcmVuZGVyVGFyZ2V0LmhlaWdodCAtIGhlaWdodCkge1xuXHRcdFx0XHRcdFx0X2dsLnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgdXRpbHMuY29udmVydCh0ZXh0dXJlRm9ybWF0KSwgdXRpbHMuY29udmVydCh0ZXh0dXJlVHlwZSksIGJ1ZmZlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0Ly8gcmVzdG9yZSBmcmFtZWJ1ZmZlciBvZiBjdXJyZW50IHJlbmRlciB0YXJnZXQgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdGNvbnN0IGZyYW1lYnVmZmVyID0gX2N1cnJlbnRSZW5kZXJUYXJnZXQgIT09IG51bGwgPyBwcm9wZXJ0aWVzLmdldChfY3VycmVudFJlbmRlclRhcmdldCkuX193ZWJnbEZyYW1lYnVmZmVyIDogbnVsbDtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGV4dHVyZSwgbGV2ZWwgPSAwKSB7XG5cdFx0aWYgKHRleHR1cmUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgIT09IHRydWUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGV2ZWxTY2FsZSA9IE1hdGgucG93KDIsIC1sZXZlbCk7XG5cdFx0Y29uc3Qgd2lkdGggPSBNYXRoLmZsb29yKHRleHR1cmUuaW1hZ2Uud2lkdGggKiBsZXZlbFNjYWxlKTtcblx0XHRjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKHRleHR1cmUuaW1hZ2UuaGVpZ2h0ICogbGV2ZWxTY2FsZSk7XG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xuXG5cdFx0X2dsLmNvcHlUZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgMCwgMCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCk7XG5cblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cdH07XG5cblx0dGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgc3JjVGV4dHVyZSwgZHN0VGV4dHVyZSwgbGV2ZWwgPSAwKSB7XG5cdFx0Y29uc3Qgd2lkdGggPSBzcmNUZXh0dXJlLmltYWdlLndpZHRoO1xuXHRcdGNvbnN0IGhlaWdodCA9IHNyY1RleHR1cmUuaW1hZ2UuaGVpZ2h0O1xuXHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydChkc3RUZXh0dXJlLmZvcm1hdCk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydChkc3RUZXh0dXJlLnR5cGUpO1xuXHRcdHRleHR1cmVzLnNldFRleHR1cmUyRChkc3RUZXh0dXJlLCAwKTsgLy8gQXMgYW5vdGhlciB0ZXh0dXJlIHVwbG9hZCBtYXkgaGF2ZSBjaGFuZ2VkIHBpeGVsU3RvcmVpXG5cdFx0Ly8gcGFyYW1ldGVycywgbWFrZSBzdXJlIHRoZXkgYXJlIGNvcnJlY3QgZm9yIHRoZSBkc3RUZXh0dXJlXG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIGRzdFRleHR1cmUuZmxpcFkpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIGRzdFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIGRzdFRleHR1cmUudW5wYWNrQWxpZ25tZW50KTtcblxuXHRcdGlmIChzcmNUZXh0dXJlLmlzRGF0YVRleHR1cmUpIHtcblx0XHRcdF9nbC50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgc3JjVGV4dHVyZS5pbWFnZS5kYXRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHNyY1RleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSkge1xuXHRcdFx0XHRfZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBzcmNUZXh0dXJlLm1pcG1hcHNbMF0ud2lkdGgsIHNyY1RleHR1cmUubWlwbWFwc1swXS5oZWlnaHQsIGdsRm9ybWF0LCBzcmNUZXh0dXJlLm1pcG1hcHNbMF0uZGF0YSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZ2wudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIGdsRm9ybWF0LCBnbFR5cGUsIHNyY1RleHR1cmUuaW1hZ2UpO1xuXHRcdFx0fVxuXHRcdH0gLy8gR2VuZXJhdGUgbWlwbWFwcyBvbmx5IHdoZW4gY29weWluZyBsZXZlbCAwXG5cblxuXHRcdGlmIChsZXZlbCA9PT0gMCAmJiBkc3RUZXh0dXJlLmdlbmVyYXRlTWlwbWFwcykgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cdH07XG5cblx0dGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEID0gZnVuY3Rpb24gKHNvdXJjZUJveCwgcG9zaXRpb24sIHNyY1RleHR1cmUsIGRzdFRleHR1cmUsIGxldmVsID0gMCkge1xuXHRcdGlmIChfdGhpcy5pc1dlYkdMMVJlbmRlcmVyKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB3aWR0aCA9IHNvdXJjZUJveC5tYXgueCAtIHNvdXJjZUJveC5taW4ueCArIDE7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gc291cmNlQm94Lm1heC55IC0gc291cmNlQm94Lm1pbi55ICsgMTtcblx0XHRjb25zdCBkZXB0aCA9IHNvdXJjZUJveC5tYXgueiAtIHNvdXJjZUJveC5taW4ueiArIDE7XG5cdFx0Y29uc3QgZ2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KGRzdFRleHR1cmUuZm9ybWF0KTtcblx0XHRjb25zdCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KGRzdFRleHR1cmUudHlwZSk7XG5cdFx0bGV0IGdsVGFyZ2V0O1xuXG5cdFx0aWYgKGRzdFRleHR1cmUuaXNEYXRhVGV4dHVyZTNEKSB7XG5cdFx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlM0QoZHN0VGV4dHVyZSwgMCk7XG5cdFx0XHRnbFRhcmdldCA9IF9nbC5URVhUVVJFXzNEO1xuXHRcdH0gZWxzZSBpZiAoZHN0VGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSkge1xuXHRcdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEQXJyYXkoZHN0VGV4dHVyZSwgMCk7XG5cdFx0XHRnbFRhcmdldCA9IF9nbC5URVhUVVJFXzJEX0FSUkFZO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCBkc3RUZXh0dXJlLmZsaXBZKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBkc3RUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQUxJR05NRU5ULCBkc3RUZXh0dXJlLnVucGFja0FsaWdubWVudCk7XG5cblx0XHRjb25zdCB1bnBhY2tSb3dMZW4gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5VTlBBQ0tfUk9XX0xFTkdUSCk7XG5cblx0XHRjb25zdCB1bnBhY2tJbWFnZUhlaWdodCA9IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLlVOUEFDS19JTUFHRV9IRUlHSFQpO1xuXG5cdFx0Y29uc3QgdW5wYWNrU2tpcFBpeGVscyA9IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLlVOUEFDS19TS0lQX1BJWEVMUyk7XG5cblx0XHRjb25zdCB1bnBhY2tTa2lwUm93cyA9IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLlVOUEFDS19TS0lQX1JPV1MpO1xuXG5cdFx0Y29uc3QgdW5wYWNrU2tpcEltYWdlcyA9IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLlVOUEFDS19TS0lQX0lNQUdFUyk7XG5cblx0XHRjb25zdCBpbWFnZSA9IHNyY1RleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSA/IHNyY1RleHR1cmUubWlwbWFwc1swXSA6IHNyY1RleHR1cmUuaW1hZ2U7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19ST1dfTEVOR1RILCBpbWFnZS53aWR0aCk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19JTUFHRV9IRUlHSFQsIGltYWdlLmhlaWdodCk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19TS0lQX1BJWEVMUywgc291cmNlQm94Lm1pbi54KTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1NLSVBfUk9XUywgc291cmNlQm94Lm1pbi55KTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1NLSVBfSU1BR0VTLCBzb3VyY2VCb3gubWluLnopO1xuXG5cdFx0aWYgKHNyY1RleHR1cmUuaXNEYXRhVGV4dHVyZSB8fCBzcmNUZXh0dXJlLmlzRGF0YVRleHR1cmUzRCkge1xuXHRcdFx0X2dsLnRleFN1YkltYWdlM0QoZ2xUYXJnZXQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChzcmNUZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4nKTtcblxuXHRcdFx0XHRfZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoZ2xUYXJnZXQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ2xGb3JtYXQsIGltYWdlLmRhdGEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2dsLnRleFN1YkltYWdlM0QoZ2xUYXJnZXQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1JPV19MRU5HVEgsIHVucGFja1Jvd0xlbik7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19JTUFHRV9IRUlHSFQsIHVucGFja0ltYWdlSGVpZ2h0KTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1NLSVBfUElYRUxTLCB1bnBhY2tTa2lwUGl4ZWxzKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1NLSVBfUk9XUywgdW5wYWNrU2tpcFJvd3MpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfU0tJUF9JTUFHRVMsIHVucGFja1NraXBJbWFnZXMpOyAvLyBHZW5lcmF0ZSBtaXBtYXBzIG9ubHkgd2hlbiBjb3B5aW5nIGxldmVsIDBcblxuXG5cdFx0aWYgKGxldmVsID09PSAwICYmIGRzdFRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzKSBfZ2wuZ2VuZXJhdGVNaXBtYXAoZ2xUYXJnZXQpO1xuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblx0fTtcblxuXHR0aGlzLmluaXRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHtcblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XG5cdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHR9O1xuXG5cdHRoaXMucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gMDtcblx0XHRfY3VycmVudEFjdGl2ZU1pcG1hcExldmVsID0gMDtcblx0XHRfY3VycmVudFJlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0c3RhdGUucmVzZXQoKTtcblx0XHRiaW5kaW5nU3RhdGVzLnJlc2V0KCk7XG5cdH07XG5cblx0aWYgKHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0X19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdvYnNlcnZlJywge1xuXHRcdFx0ZGV0YWlsOiB0aGlzXG5cdFx0fSkpO1xuXHR9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlciA9IHRydWU7XG5cbmNsYXNzIFdlYkdMMVJlbmRlcmVyIGV4dGVuZHMgV2ViR0xSZW5kZXJlciB7fVxuXG5XZWJHTDFSZW5kZXJlci5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlciA9IHRydWU7XG5cbmNsYXNzIEZvZ0V4cDIge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgZGVuc2l0eSA9IDAuMDAwMjUpIHtcblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKGNvbG9yKTtcblx0XHR0aGlzLmRlbnNpdHkgPSBkZW5zaXR5O1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBGb2dFeHAyKHRoaXMuY29sb3IsIHRoaXMuZGVuc2l0eSk7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6ICdGb2dFeHAyJyxcblx0XHRcdGNvbG9yOiB0aGlzLmNvbG9yLmdldEhleCgpLFxuXHRcdFx0ZGVuc2l0eTogdGhpcy5kZW5zaXR5XG5cdFx0fTtcblx0fVxuXG59XG5cbkZvZ0V4cDIucHJvdG90eXBlLmlzRm9nRXhwMiA9IHRydWU7XG5cbmNsYXNzIEZvZyB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBuZWFyID0gMSwgZmFyID0gMTAwMCkge1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoY29sb3IpO1xuXHRcdHRoaXMubmVhciA9IG5lYXI7XG5cdFx0dGhpcy5mYXIgPSBmYXI7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IEZvZyh0aGlzLmNvbG9yLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogJ0ZvZycsXG5cdFx0XHRjb2xvcjogdGhpcy5jb2xvci5nZXRIZXgoKSxcblx0XHRcdG5lYXI6IHRoaXMubmVhcixcblx0XHRcdGZhcjogdGhpcy5mYXJcblx0XHR9O1xuXHR9XG5cbn1cblxuRm9nLnByb3RvdHlwZS5pc0ZvZyA9IHRydWU7XG5cbmNsYXNzIFNjZW5lIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTY2VuZSc7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0gbnVsbDtcblx0XHR0aGlzLmVudmlyb25tZW50ID0gbnVsbDtcblx0XHR0aGlzLmZvZyA9IG51bGw7XG5cdFx0dGhpcy5vdmVycmlkZU1hdGVyaWFsID0gbnVsbDtcblx0XHR0aGlzLmF1dG9VcGRhdGUgPSB0cnVlOyAvLyBjaGVja2VkIGJ5IHRoZSByZW5kZXJlclxuXG5cdFx0aWYgKHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ29ic2VydmUnLCB7XG5cdFx0XHRcdGRldGFpbDogdGhpc1xuXHRcdFx0fSkpO1xuXHRcdH1cblx0fVxuXG5cdGNvcHkoc291cmNlLCByZWN1cnNpdmUpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSwgcmVjdXJzaXZlKTtcblx0XHRpZiAoc291cmNlLmJhY2tncm91bmQgIT09IG51bGwpIHRoaXMuYmFja2dyb3VuZCA9IHNvdXJjZS5iYWNrZ3JvdW5kLmNsb25lKCk7XG5cdFx0aWYgKHNvdXJjZS5lbnZpcm9ubWVudCAhPT0gbnVsbCkgdGhpcy5lbnZpcm9ubWVudCA9IHNvdXJjZS5lbnZpcm9ubWVudC5jbG9uZSgpO1xuXHRcdGlmIChzb3VyY2UuZm9nICE9PSBudWxsKSB0aGlzLmZvZyA9IHNvdXJjZS5mb2cuY2xvbmUoKTtcblx0XHRpZiAoc291cmNlLm92ZXJyaWRlTWF0ZXJpYWwgIT09IG51bGwpIHRoaXMub3ZlcnJpZGVNYXRlcmlhbCA9IHNvdXJjZS5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCk7XG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gc291cmNlLmF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04obWV0YSk7XG5cdFx0aWYgKHRoaXMuZm9nICE9PSBudWxsKSBkYXRhLm9iamVjdC5mb2cgPSB0aGlzLmZvZy50b0pTT04oKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cblNjZW5lLnByb3RvdHlwZS5pc1NjZW5lID0gdHJ1ZTtcblxuY2xhc3MgSW50ZXJsZWF2ZWRCdWZmZXIge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgc3RyaWRlKSB7XG5cdFx0dGhpcy5hcnJheSA9IGFycmF5O1xuXHRcdHRoaXMuc3RyaWRlID0gc3RyaWRlO1xuXHRcdHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8gc3RyaWRlIDogMDtcblx0XHR0aGlzLnVzYWdlID0gU3RhdGljRHJhd1VzYWdlO1xuXHRcdHRoaXMudXBkYXRlUmFuZ2UgPSB7XG5cdFx0XHRvZmZzZXQ6IDAsXG5cdFx0XHRjb3VudDogLTFcblx0XHR9O1xuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdH1cblxuXHRvblVwbG9hZENhbGxiYWNrKCkge31cblxuXHRzZXQgbmVlZHNVcGRhdGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IHRydWUpIHRoaXMudmVyc2lvbisrO1xuXHR9XG5cblx0c2V0VXNhZ2UodmFsdWUpIHtcblx0XHR0aGlzLnVzYWdlID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHRoaXMuYXJyYXkgPSBuZXcgc291cmNlLmFycmF5LmNvbnN0cnVjdG9yKHNvdXJjZS5hcnJheSk7XG5cdFx0dGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDtcblx0XHR0aGlzLnN0cmlkZSA9IHNvdXJjZS5zdHJpZGU7XG5cdFx0dGhpcy51c2FnZSA9IHNvdXJjZS51c2FnZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlBdChpbmRleDEsIGF0dHJpYnV0ZSwgaW5kZXgyKSB7XG5cdFx0aW5kZXgxICo9IHRoaXMuc3RyaWRlO1xuXHRcdGluZGV4MiAqPSBhdHRyaWJ1dGUuc3RyaWRlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnN0cmlkZTsgaSA8IGw7IGkrKykge1xuXHRcdFx0dGhpcy5hcnJheVtpbmRleDEgKyBpXSA9IGF0dHJpYnV0ZS5hcnJheVtpbmRleDIgKyBpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldCh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuXHRcdHRoaXMuYXJyYXkuc2V0KHZhbHVlLCBvZmZzZXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoZGF0YSkge1xuXHRcdGlmIChkYXRhLmFycmF5QnVmZmVycyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkYXRhLmFycmF5QnVmZmVycyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdH1cblxuXHRcdGlmIChkYXRhLmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdID0gdGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXJyYXkgPSBuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihkYXRhLmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pO1xuXHRcdGNvbnN0IGliID0gbmV3IHRoaXMuY29uc3RydWN0b3IoYXJyYXksIHRoaXMuc3RyaWRlKTtcblx0XHRpYi5zZXRVc2FnZSh0aGlzLnVzYWdlKTtcblx0XHRyZXR1cm4gaWI7XG5cdH1cblxuXHRvblVwbG9hZChjYWxsYmFjaykge1xuXHRcdHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKGRhdGEpIHtcblx0XHRpZiAoZGF0YS5hcnJheUJ1ZmZlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnMgPSB7fTtcblx0XHR9IC8vIGdlbmVyYXRlIFVVSUQgZm9yIGFycmF5IGJ1ZmZlciBpZiBuZWNlc3NhcnlcblxuXG5cdFx0aWYgKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkYXRhLmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKTtcblx0XHR9IC8vXG5cblxuXHRcdHJldHVybiB7XG5cdFx0XHR1dWlkOiB0aGlzLnV1aWQsXG5cdFx0XHRidWZmZXI6IHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLFxuXHRcdFx0dHlwZTogdGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0c3RyaWRlOiB0aGlzLnN0cmlkZVxuXHRcdH07XG5cdH1cblxufVxuXG5JbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IkNiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGludGVybGVhdmVkQnVmZmVyLCBpdGVtU2l6ZSwgb2Zmc2V0LCBub3JtYWxpemVkID0gZmFsc2UpIHtcblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLmRhdGEgPSBpbnRlcmxlYXZlZEJ1ZmZlcjtcblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cdFx0dGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG5cdFx0dGhpcy5ub3JtYWxpemVkID0gbm9ybWFsaXplZCA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldCBjb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmNvdW50O1xuXHR9XG5cblx0Z2V0IGFycmF5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXk7XG5cdH1cblxuXHRzZXQgbmVlZHNVcGRhdGUodmFsdWUpIHtcblx0XHR0aGlzLmRhdGEubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmRhdGEuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdF92ZWN0b3IkNi54ID0gdGhpcy5nZXRYKGkpO1xuXHRcdFx0X3ZlY3RvciQ2LnkgPSB0aGlzLmdldFkoaSk7XG5cdFx0XHRfdmVjdG9yJDYueiA9IHRoaXMuZ2V0WihpKTtcblxuXHRcdFx0X3ZlY3RvciQ2LmFwcGx5TWF0cml4NChtKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseU5vcm1hbE1hdHJpeChtKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRfdmVjdG9yJDYueCA9IHRoaXMuZ2V0WChpKTtcblx0XHRcdF92ZWN0b3IkNi55ID0gdGhpcy5nZXRZKGkpO1xuXHRcdFx0X3ZlY3RvciQ2LnogPSB0aGlzLmdldFooaSk7XG5cblx0XHRcdF92ZWN0b3IkNi5hcHBseU5vcm1hbE1hdHJpeChtKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0cmFuc2Zvcm1EaXJlY3Rpb24obSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0X3ZlY3RvciQ2LnggPSB0aGlzLmdldFgoaSk7XG5cdFx0XHRfdmVjdG9yJDYueSA9IHRoaXMuZ2V0WShpKTtcblx0XHRcdF92ZWN0b3IkNi56ID0gdGhpcy5nZXRaKGkpO1xuXG5cdFx0XHRfdmVjdG9yJDYudHJhbnNmb3JtRGlyZWN0aW9uKG0pO1xuXG5cdFx0XHR0aGlzLnNldFhZWihpLCBfdmVjdG9yJDYueCwgX3ZlY3RvciQ2LnksIF92ZWN0b3IkNi56KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFgoaW5kZXgsIHgpIHtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXRdID0geDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFkoaW5kZXgsIHkpIHtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAxXSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRaKGluZGV4LCB6KSB7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0VyhpbmRleCwgdykge1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDNdID0gdztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFgoaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0XTtcblx0fVxuXG5cdGdldFkoaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMV07XG5cdH1cblxuXHRnZXRaKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVtpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDJdO1xuXHR9XG5cblx0Z2V0VyhpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAzXTtcblx0fVxuXG5cdHNldFhZKGluZGV4LCB4LCB5KSB7XG5cdFx0aW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMV0gPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WFlaKGluZGV4LCB4LCB5LCB6KSB7XG5cdFx0aW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMV0gPSB5O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDJdID0gejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFhZWlcoaW5kZXgsIHgsIHksIHosIHcpIHtcblx0XHRpbmRleCA9IGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDBdID0geDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAxXSA9IHk7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMl0gPSB6O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDNdID0gdztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKGRhdGEpIHtcblx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuJyk7XG5cdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnQ7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGkgKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLml0ZW1TaXplOyBqKyspIHtcblx0XHRcdFx0XHRhcnJheS5wdXNoKHRoaXMuZGF0YS5hcnJheVtpbmRleCArIGpdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihhcnJheSksIHRoaXMuaXRlbVNpemUsIHRoaXMubm9ybWFsaXplZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChkYXRhLmludGVybGVhdmVkQnVmZmVycyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhLmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkYXRhLmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0gPSB0aGlzLmRhdGEuY2xvbmUoZGF0YSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLCB0aGlzLml0ZW1TaXplLCB0aGlzLm9mZnNldCwgdGhpcy5ub3JtYWxpemVkKTtcblx0XHR9XG5cdH1cblxuXHR0b0pTT04oZGF0YSkge1xuXHRcdGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUubG9nKCdUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLicpO1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBpICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0O1xuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5pdGVtU2l6ZTsgaisrKSB7XG5cdFx0XHRcdFx0YXJyYXkucHVzaCh0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyBqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gZGVpbnRlcmxlYXZlIGRhdGEgYW5kIHNhdmUgaXQgYXMgYW4gb3JkaW5hcnkgYnVmZmVyIGF0dHJpYnV0ZSBmb3Igbm93XG5cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXRlbVNpemU6IHRoaXMuaXRlbVNpemUsXG5cdFx0XHRcdHR5cGU6IHRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdFx0YXJyYXk6IGFycmF5LFxuXHRcdFx0XHRub3JtYWxpemVkOiB0aGlzLm5vcm1hbGl6ZWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHNhdmUgYXMgdHJ1ZSBpbnRlcmxhdmVkIGF0dHJpYnR1ZVxuXHRcdFx0aWYgKGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnMgPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSA9IHRoaXMuZGF0YS50b0pTT04oZGF0YSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6IHRydWUsXG5cdFx0XHRcdGl0ZW1TaXplOiB0aGlzLml0ZW1TaXplLFxuXHRcdFx0XHRkYXRhOiB0aGlzLmRhdGEudXVpZCxcblx0XHRcdFx0b2Zmc2V0OiB0aGlzLm9mZnNldCxcblx0XHRcdFx0bm9ybWFsaXplZDogdGhpcy5ub3JtYWxpemVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG59XG5cbkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdGNvbG9yOiA8aGV4PixcbiAqXHRtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0cm90YXRpb246IDxmbG9hdD4sXG4gKlx0c2l6ZUF0dGVudWF0aW9uOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBTcHJpdGVNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1Nwcml0ZU1hdGVyaWFsJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDB4ZmZmZmZmKTtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IDA7XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSB0cnVlO1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSB0cnVlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IHNvdXJjZS5yb3RhdGlvbjtcblx0XHR0aGlzLnNpemVBdHRlbnVhdGlvbiA9IHNvdXJjZS5zaXplQXR0ZW51YXRpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5TcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbCA9IHRydWU7XG5cbmxldCBfZ2VvbWV0cnk7XG5cbmNvbnN0IF9pbnRlcnNlY3RQb2ludCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfd29ybGRTY2FsZSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbXZQb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfYWxpZ25lZFBvc2l0aW9uID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF9yb3RhdGVkUG9zaXRpb24gPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY29uc3QgX3ZpZXdXb3JsZE1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfdkEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZCID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92QyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdXZBID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF91dkIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY29uc3QgX3V2QyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jbGFzcyBTcHJpdGUgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKG1hdGVyaWFsKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnU3ByaXRlJztcblxuXHRcdGlmIChfZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2dlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0XHRjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFstMC41LCAtMC41LCAwLCAwLCAwLCAwLjUsIC0wLjUsIDAsIDEsIDAsIDAuNSwgMC41LCAwLCAxLCAxLCAtMC41LCAwLjUsIDAsIDAsIDFdKTtcblx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyID0gbmV3IEludGVybGVhdmVkQnVmZmVyKGZsb2F0MzJBcnJheSwgNSk7XG5cblx0XHRcdF9nZW9tZXRyeS5zZXRJbmRleChbMCwgMSwgMiwgMCwgMiwgM10pO1xuXG5cdFx0XHRfZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZShpbnRlcmxlYXZlZEJ1ZmZlciwgMywgMCwgZmFsc2UpKTtcblxuXHRcdFx0X2dlb21ldHJ5LnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW50ZXJsZWF2ZWRCdWZmZXIsIDIsIDMsIGZhbHNlKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5nZW9tZXRyeSA9IF9nZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWwgIT09IHVuZGVmaW5lZCA/IG1hdGVyaWFsIDogbmV3IFNwcml0ZU1hdGVyaWFsKCk7XG5cdFx0dGhpcy5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLjUsIDAuNSk7XG5cdH1cblxuXHRyYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cykge1xuXHRcdGlmIChyYXljYXN0ZXIuY2FtZXJhID09PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6IFwiUmF5Y2FzdGVyLmNhbWVyYVwiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKTtcblx0XHR9XG5cblx0XHRfd29ybGRTY2FsZS5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCk7XG5cblx0XHRfdmlld1dvcmxkTWF0cml4LmNvcHkocmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cblx0XHR0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHJheWNhc3Rlci5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLCB0aGlzLm1hdHJpeFdvcmxkKTtcblxuXHRcdF9tdlBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCk7XG5cblx0XHRpZiAocmF5Y2FzdGVyLmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhICYmIHRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uID09PSBmYWxzZSkge1xuXHRcdFx0X3dvcmxkU2NhbGUubXVsdGlwbHlTY2FsYXIoLV9tdlBvc2l0aW9uLnopO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5tYXRlcmlhbC5yb3RhdGlvbjtcblx0XHRsZXQgc2luLCBjb3M7XG5cblx0XHRpZiAocm90YXRpb24gIT09IDApIHtcblx0XHRcdGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKTtcblx0XHRcdHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblx0XHR9XG5cblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcblx0XHR0cmFuc2Zvcm1WZXJ0ZXgoX3ZBLnNldCgtMC41LCAtMC41LCAwKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zKTtcblx0XHR0cmFuc2Zvcm1WZXJ0ZXgoX3ZCLnNldCgwLjUsIC0wLjUsIDApLCBfbXZQb3NpdGlvbiwgY2VudGVyLCBfd29ybGRTY2FsZSwgc2luLCBjb3MpO1xuXHRcdHRyYW5zZm9ybVZlcnRleChfdkMuc2V0KDAuNSwgMC41LCAwKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zKTtcblxuXHRcdF91dkEuc2V0KDAsIDApO1xuXG5cdFx0X3V2Qi5zZXQoMSwgMCk7XG5cblx0XHRfdXZDLnNldCgxLCAxKTsgLy8gY2hlY2sgZmlyc3QgdHJpYW5nbGVcblxuXG5cdFx0bGV0IGludGVyc2VjdCA9IHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoX3ZBLCBfdkIsIF92QywgZmFsc2UsIF9pbnRlcnNlY3RQb2ludCk7XG5cblx0XHRpZiAoaW50ZXJzZWN0ID09PSBudWxsKSB7XG5cdFx0XHQvLyBjaGVjayBzZWNvbmQgdHJpYW5nbGVcblx0XHRcdHRyYW5zZm9ybVZlcnRleChfdkIuc2V0KC0wLjUsIDAuNSwgMCksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyk7XG5cblx0XHRcdF91dkIuc2V0KDAsIDEpO1xuXG5cdFx0XHRpbnRlcnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVyc2VjdFRyaWFuZ2xlKF92QSwgX3ZDLCBfdkIsIGZhbHNlLCBfaW50ZXJzZWN0UG9pbnQpO1xuXG5cdFx0XHRpZiAoaW50ZXJzZWN0ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oX2ludGVyc2VjdFBvaW50KTtcblx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRpbnRlcnNlY3RzLnB1c2goe1xuXHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0cG9pbnQ6IF9pbnRlcnNlY3RQb2ludC5jbG9uZSgpLFxuXHRcdFx0dXY6IFRyaWFuZ2xlLmdldFVWKF9pbnRlcnNlY3RQb2ludCwgX3ZBLCBfdkIsIF92QywgX3V2QSwgX3V2QiwgX3V2QywgbmV3IFZlY3RvcjIoKSksXG5cdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0b2JqZWN0OiB0aGlzXG5cdFx0fSk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHRpZiAoc291cmNlLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB0aGlzLmNlbnRlci5jb3B5KHNvdXJjZS5jZW50ZXIpO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5TcHJpdGUucHJvdG90eXBlLmlzU3ByaXRlID0gdHJ1ZTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtVmVydGV4KHZlcnRleFBvc2l0aW9uLCBtdlBvc2l0aW9uLCBjZW50ZXIsIHNjYWxlLCBzaW4sIGNvcykge1xuXHQvLyBjb21wdXRlIHBvc2l0aW9uIGluIGNhbWVyYSBzcGFjZVxuXHRfYWxpZ25lZFBvc2l0aW9uLnN1YlZlY3RvcnModmVydGV4UG9zaXRpb24sIGNlbnRlcikuYWRkU2NhbGFyKDAuNSkubXVsdGlwbHkoc2NhbGUpOyAvLyB0byBjaGVjayBpZiByb3RhdGlvbiBpcyBub3QgemVyb1xuXG5cblx0aWYgKHNpbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0X3JvdGF0ZWRQb3NpdGlvbi54ID0gY29zICogX2FsaWduZWRQb3NpdGlvbi54IC0gc2luICogX2FsaWduZWRQb3NpdGlvbi55O1xuXHRcdF9yb3RhdGVkUG9zaXRpb24ueSA9IHNpbiAqIF9hbGlnbmVkUG9zaXRpb24ueCArIGNvcyAqIF9hbGlnbmVkUG9zaXRpb24ueTtcblx0fSBlbHNlIHtcblx0XHRfcm90YXRlZFBvc2l0aW9uLmNvcHkoX2FsaWduZWRQb3NpdGlvbik7XG5cdH1cblxuXHR2ZXJ0ZXhQb3NpdGlvbi5jb3B5KG12UG9zaXRpb24pO1xuXHR2ZXJ0ZXhQb3NpdGlvbi54ICs9IF9yb3RhdGVkUG9zaXRpb24ueDtcblx0dmVydGV4UG9zaXRpb24ueSArPSBfcm90YXRlZFBvc2l0aW9uLnk7IC8vIHRyYW5zZm9ybSB0byB3b3JsZCBzcGFjZVxuXG5cdHZlcnRleFBvc2l0aW9uLmFwcGx5TWF0cml4NChfdmlld1dvcmxkTWF0cml4KTtcbn1cblxuY29uc3QgX3YxJDIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YyJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTE9EIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2N1cnJlbnRMZXZlbCA9IDA7XG5cdFx0dGhpcy50eXBlID0gJ0xPRCc7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0bGV2ZWxzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBbXVxuXHRcdFx0fSxcblx0XHRcdGlzTE9EOiB7XG5cdFx0XHRcdHZhbHVlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UsIGZhbHNlKTtcblx0XHRjb25zdCBsZXZlbHMgPSBzb3VyY2UubGV2ZWxzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsZXZlbCA9IGxldmVsc1tpXTtcblx0XHRcdHRoaXMuYWRkTGV2ZWwobGV2ZWwub2JqZWN0LmNsb25lKCksIGxldmVsLmRpc3RhbmNlKTtcblx0XHR9XG5cblx0XHR0aGlzLmF1dG9VcGRhdGUgPSBzb3VyY2UuYXV0b1VwZGF0ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZExldmVsKG9iamVjdCwgZGlzdGFuY2UgPSAwKSB7XG5cdFx0ZGlzdGFuY2UgPSBNYXRoLmFicyhkaXN0YW5jZSk7XG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cdFx0bGV0IGw7XG5cblx0XHRmb3IgKGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCBsZXZlbHNbbF0uZGlzdGFuY2UpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV2ZWxzLnNwbGljZShsLCAwLCB7XG5cdFx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0XHRvYmplY3Q6IG9iamVjdFxuXHRcdH0pO1xuXHRcdHRoaXMuYWRkKG9iamVjdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRDdXJyZW50TGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2N1cnJlbnRMZXZlbDtcblx0fVxuXG5cdGdldE9iamVjdEZvckRpc3RhbmNlKGRpc3RhbmNlKSB7XG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cblx0XHRpZiAobGV2ZWxzLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCBpLCBsO1xuXG5cdFx0XHRmb3IgKGkgPSAxLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoZGlzdGFuY2UgPCBsZXZlbHNbaV0uZGlzdGFuY2UpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbGV2ZWxzW2kgLSAxXS5vYmplY3Q7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cykge1xuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKGxldmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRfdjEkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7XG5cblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhfdjEkMik7XG5cdFx0XHR0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKGRpc3RhbmNlKS5yYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cyk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlKGNhbWVyYSkge1xuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKGxldmVscy5sZW5ndGggPiAxKSB7XG5cdFx0XHRfdjEkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0X3YyJDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO1xuXG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IF92MSQyLmRpc3RhbmNlVG8oX3YyJDEpIC8gY2FtZXJhLnpvb207XG5cdFx0XHRsZXZlbHNbMF0ub2JqZWN0LnZpc2libGUgPSB0cnVlO1xuXHRcdFx0bGV0IGksIGw7XG5cblx0XHRcdGZvciAoaSA9IDEsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGlmIChkaXN0YW5jZSA+PSBsZXZlbHNbaV0uZGlzdGFuY2UpIHtcblx0XHRcdFx0XHRsZXZlbHNbaSAtIDFdLm9iamVjdC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV2ZWxzW2ldLm9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9jdXJyZW50TGV2ZWwgPSBpIC0gMTtcblxuXHRcdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bGV2ZWxzW2ldLm9iamVjdC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGlmICh0aGlzLmF1dG9VcGRhdGUgPT09IGZhbHNlKSBkYXRhLm9iamVjdC5hdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0ZGF0YS5vYmplY3QubGV2ZWxzID0gW107XG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGxldmVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuXHRcdFx0ZGF0YS5vYmplY3QubGV2ZWxzLnB1c2goe1xuXHRcdFx0XHRvYmplY3Q6IGxldmVsLm9iamVjdC51dWlkLFxuXHRcdFx0XHRkaXN0YW5jZTogbGV2ZWwuZGlzdGFuY2Vcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuY29uc3QgX2Jhc2VQb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfc2tpbkluZGV4ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3I0KCk7XG5cbmNvbnN0IF9za2luV2VpZ2h0ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3I0KCk7XG5cbmNvbnN0IF92ZWN0b3IkNSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNsYXNzIFNraW5uZWRNZXNoIGV4dGVuZHMgTWVzaCB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5LCBtYXRlcmlhbCkge1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy50eXBlID0gJ1NraW5uZWRNZXNoJztcblx0XHR0aGlzLmJpbmRNb2RlID0gJ2F0dGFjaGVkJztcblx0XHR0aGlzLmJpbmRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5iaW5kTW9kZSA9IHNvdXJjZS5iaW5kTW9kZTtcblx0XHR0aGlzLmJpbmRNYXRyaXguY29weShzb3VyY2UuYmluZE1hdHJpeCk7XG5cdFx0dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHNvdXJjZS5iaW5kTWF0cml4SW52ZXJzZSk7XG5cdFx0dGhpcy5za2VsZXRvbiA9IHNvdXJjZS5za2VsZXRvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGJpbmQoc2tlbGV0b24sIGJpbmRNYXRyaXgpIHtcblx0XHR0aGlzLnNrZWxldG9uID0gc2tlbGV0b247XG5cblx0XHRpZiAoYmluZE1hdHJpeCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKHRydWUpO1xuXHRcdFx0dGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpO1xuXHRcdFx0YmluZE1hdHJpeCA9IHRoaXMubWF0cml4V29ybGQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5iaW5kTWF0cml4LmNvcHkoYmluZE1hdHJpeCk7XG5cdFx0dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGJpbmRNYXRyaXgpLmludmVydCgpO1xuXHR9XG5cblx0cG9zZSgpIHtcblx0XHR0aGlzLnNrZWxldG9uLnBvc2UoKTtcblx0fVxuXG5cdG5vcm1hbGl6ZVNraW5XZWlnaHRzKCkge1xuXHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0Y29uc3Qgc2tpbldlaWdodCA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBza2luV2VpZ2h0LmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHR2ZWN0b3IueCA9IHNraW5XZWlnaHQuZ2V0WChpKTtcblx0XHRcdHZlY3Rvci55ID0gc2tpbldlaWdodC5nZXRZKGkpO1xuXHRcdFx0dmVjdG9yLnogPSBza2luV2VpZ2h0LmdldFooaSk7XG5cdFx0XHR2ZWN0b3IudyA9IHNraW5XZWlnaHQuZ2V0VyhpKTtcblx0XHRcdGNvbnN0IHNjYWxlID0gMS4wIC8gdmVjdG9yLm1hbmhhdHRhbkxlbmd0aCgpO1xuXG5cdFx0XHRpZiAoc2NhbGUgIT09IEluZmluaXR5KSB7XG5cdFx0XHRcdHZlY3Rvci5tdWx0aXBseVNjYWxhcihzY2FsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2ZWN0b3Iuc2V0KDEsIDAsIDAsIDApOyAvLyBkbyBzb21ldGhpbmcgcmVhc29uYWJsZVxuXHRcdFx0fVxuXG5cdFx0XHRza2luV2VpZ2h0LnNldFhZWlcoaSwgdmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3IueiwgdmVjdG9yLncpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpO1xuXG5cdFx0aWYgKHRoaXMuYmluZE1vZGUgPT09ICdhdHRhY2hlZCcpIHtcblx0XHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuYmluZE1vZGUgPT09ICdkZXRhY2hlZCcpIHtcblx0XHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICcgKyB0aGlzLmJpbmRNb2RlKTtcblx0XHR9XG5cdH1cblxuXHRib25lVHJhbnNmb3JtKGluZGV4LCB0YXJnZXQpIHtcblx0XHRjb25zdCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXG5cdFx0X3NraW5JbmRleC5mcm9tQnVmZmVyQXR0cmlidXRlKGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbkluZGV4LCBpbmRleCk7XG5cblx0XHRfc2tpbldlaWdodC5mcm9tQnVmZmVyQXR0cmlidXRlKGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodCwgaW5kZXgpO1xuXG5cdFx0X2Jhc2VQb3NpdGlvbi5jb3B5KHRhcmdldCkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCk7XG5cblx0XHR0YXJnZXQuc2V0KDAsIDAsIDApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdGNvbnN0IHdlaWdodCA9IF9za2luV2VpZ2h0LmdldENvbXBvbmVudChpKTtcblxuXHRcdFx0aWYgKHdlaWdodCAhPT0gMCkge1xuXHRcdFx0XHRjb25zdCBib25lSW5kZXggPSBfc2tpbkluZGV4LmdldENvbXBvbmVudChpKTtcblxuXHRcdFx0XHRfbWF0cml4Lm11bHRpcGx5TWF0cmljZXMoc2tlbGV0b24uYm9uZXNbYm9uZUluZGV4XS5tYXRyaXhXb3JsZCwgc2tlbGV0b24uYm9uZUludmVyc2VzW2JvbmVJbmRleF0pO1xuXG5cdFx0XHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoX3ZlY3RvciQ1LmNvcHkoX2Jhc2VQb3NpdGlvbikuYXBwbHlNYXRyaXg0KF9tYXRyaXgpLCB3ZWlnaHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpO1xuXHR9XG5cbn1cblxuU2tpbm5lZE1lc2gucHJvdG90eXBlLmlzU2tpbm5lZE1lc2ggPSB0cnVlO1xuXG5jbGFzcyBCb25lIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdCb25lJztcblx0fVxuXG59XG5cbkJvbmUucHJvdG90eXBlLmlzQm9uZSA9IHRydWU7XG5cbmNsYXNzIERhdGFUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKGRhdGEgPSBudWxsLCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGZvcm1hdCwgdHlwZSwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyLCBtaW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZykge1xuXHRcdHN1cGVyKG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcpO1xuXHRcdHRoaXMuaW1hZ2UgPSB7XG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHRcblx0XHR9O1xuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblx0fVxuXG59XG5cbkRhdGFUZXh0dXJlLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlID0gdHJ1ZTtcblxuY29uc3QgX29mZnNldE1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfaWRlbnRpdHlNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY2xhc3MgU2tlbGV0b24ge1xuXHRjb25zdHJ1Y3Rvcihib25lcyA9IFtdLCBib25lSW52ZXJzZXMgPSBbXSkge1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdHRoaXMuYm9uZXMgPSBib25lcy5zbGljZSgwKTtcblx0XHR0aGlzLmJvbmVJbnZlcnNlcyA9IGJvbmVJbnZlcnNlcztcblx0XHR0aGlzLmJvbmVNYXRyaWNlcyA9IG51bGw7XG5cdFx0dGhpcy5ib25lVGV4dHVyZSA9IG51bGw7XG5cdFx0dGhpcy5ib25lVGV4dHVyZVNpemUgPSAwO1xuXHRcdHRoaXMuZnJhbWUgPSAtMTtcblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGNvbnN0IGJvbmVJbnZlcnNlcyA9IHRoaXMuYm9uZUludmVyc2VzO1xuXHRcdHRoaXMuYm9uZU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheShib25lcy5sZW5ndGggKiAxNik7IC8vIGNhbGN1bGF0ZSBpbnZlcnNlIGJvbmUgbWF0cmljZXMgaWYgbmVjZXNzYXJ5XG5cblx0XHRpZiAoYm9uZUludmVyc2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBoYW5kbGUgc3BlY2lhbCBjYXNlXG5cdFx0XHRpZiAoYm9uZXMubGVuZ3RoICE9PSBib25lSW52ZXJzZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLicpO1xuXHRcdFx0XHR0aGlzLmJvbmVJbnZlcnNlcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1hdHJpeDQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjYWxjdWxhdGVJbnZlcnNlcygpIHtcblx0XHR0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcblxuXHRcdFx0aWYgKHRoaXMuYm9uZXNbaV0pIHtcblx0XHRcdFx0aW52ZXJzZS5jb3B5KHRoaXMuYm9uZXNbaV0ubWF0cml4V29ybGQpLmludmVydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGludmVyc2UpO1xuXHRcdH1cblx0fVxuXG5cdHBvc2UoKSB7XG5cdFx0Ly8gcmVjb3ZlciB0aGUgYmluZC10aW1lIHdvcmxkIG1hdHJpY2VzXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gdGhpcy5ib25lc1tpXTtcblxuXHRcdFx0aWYgKGJvbmUpIHtcblx0XHRcdFx0Ym9uZS5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW2ldKS5pbnZlcnQoKTtcblx0XHRcdH1cblx0XHR9IC8vIGNvbXB1dGUgdGhlIGxvY2FsIG1hdHJpY2VzLCBwb3NpdGlvbnMsIHJvdGF0aW9ucyBhbmQgc2NhbGVzXG5cblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZXNbaV07XG5cblx0XHRcdGlmIChib25lKSB7XG5cdFx0XHRcdGlmIChib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUpIHtcblx0XHRcdFx0XHRib25lLm1hdHJpeC5jb3B5KGJvbmUucGFyZW50Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0XHRcdFx0XHRib25lLm1hdHJpeC5tdWx0aXBseShib25lLm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRib25lLm1hdHJpeC5jb3B5KGJvbmUubWF0cml4V29ybGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ym9uZS5tYXRyaXguZGVjb21wb3NlKGJvbmUucG9zaXRpb24sIGJvbmUucXVhdGVybmlvbiwgYm9uZS5zY2FsZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdGNvbnN0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRjb25zdCBib25lSW52ZXJzZXMgPSB0aGlzLmJvbmVJbnZlcnNlcztcblx0XHRjb25zdCBib25lTWF0cmljZXMgPSB0aGlzLmJvbmVNYXRyaWNlcztcblx0XHRjb25zdCBib25lVGV4dHVyZSA9IHRoaXMuYm9uZVRleHR1cmU7IC8vIGZsYXR0ZW4gYm9uZSBtYXRyaWNlcyB0byBhcnJheVxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Ly8gY29tcHV0ZSB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIHRoZSBvcmlnaW5hbCB0cmFuc2Zvcm1cblx0XHRcdGNvbnN0IG1hdHJpeCA9IGJvbmVzW2ldID8gYm9uZXNbaV0ubWF0cml4V29ybGQgOiBfaWRlbnRpdHlNYXRyaXg7XG5cblx0XHRcdF9vZmZzZXRNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhtYXRyaXgsIGJvbmVJbnZlcnNlc1tpXSk7XG5cblx0XHRcdF9vZmZzZXRNYXRyaXgudG9BcnJheShib25lTWF0cmljZXMsIGkgKiAxNik7XG5cdFx0fVxuXG5cdFx0aWYgKGJvbmVUZXh0dXJlICE9PSBudWxsKSB7XG5cdFx0XHRib25lVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTa2VsZXRvbih0aGlzLmJvbmVzLCB0aGlzLmJvbmVJbnZlcnNlcyk7XG5cdH1cblxuXHRjb21wdXRlQm9uZVRleHR1cmUoKSB7XG5cdFx0Ly8gbGF5b3V0ICgxIG1hdHJpeCA9IDQgcGl4ZWxzKVxuXHRcdC8vXHRcdFx0UkdCQSBSR0JBIFJHQkEgUkdCQSAoPT4gY29sdW1uMSwgY29sdW1uMiwgY29sdW1uMywgY29sdW1uNClcblx0XHQvL1x0d2l0aFx0OHg4XHRwaXhlbCB0ZXh0dXJlIG1heFx0IDE2IGJvbmVzICogNCBwaXhlbHMgPVx0KDggKiA4KVxuXHRcdC8vXHRcdFx0IDE2eDE2IHBpeGVsIHRleHR1cmUgbWF4XHQgNjQgYm9uZXMgKiA0IHBpeGVscyA9ICgxNiAqIDE2KVxuXHRcdC8vXHRcdFx0IDMyeDMyIHBpeGVsIHRleHR1cmUgbWF4XHQyNTYgYm9uZXMgKiA0IHBpeGVscyA9ICgzMiAqIDMyKVxuXHRcdC8vXHRcdFx0IDY0eDY0IHBpeGVsIHRleHR1cmUgbWF4IDEwMjQgYm9uZXMgKiA0IHBpeGVscyA9ICg2NCAqIDY0KVxuXHRcdGxldCBzaXplID0gTWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoICogNCk7IC8vIDQgcGl4ZWxzIG5lZWRlZCBmb3IgMSBtYXRyaXhcblxuXHRcdHNpemUgPSBjZWlsUG93ZXJPZlR3byhzaXplKTtcblx0XHRzaXplID0gTWF0aC5tYXgoc2l6ZSwgNCk7XG5cdFx0Y29uc3QgYm9uZU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpOyAvLyA0IGZsb2F0cyBwZXIgUkdCQSBwaXhlbFxuXG5cdFx0Ym9uZU1hdHJpY2VzLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7IC8vIGNvcHkgY3VycmVudCB2YWx1ZXNcblxuXHRcdGNvbnN0IGJvbmVUZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKGJvbmVNYXRyaWNlcywgc2l6ZSwgc2l6ZSwgUkdCQUZvcm1hdCwgRmxvYXRUeXBlKTtcblx0XHRib25lVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5ib25lTWF0cmljZXMgPSBib25lTWF0cmljZXM7XG5cdFx0dGhpcy5ib25lVGV4dHVyZSA9IGJvbmVUZXh0dXJlO1xuXHRcdHRoaXMuYm9uZVRleHR1cmVTaXplID0gc2l6ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEJvbmVCeU5hbWUobmFtZSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZXNbaV07XG5cblx0XHRcdGlmIChib25lLm5hbWUgPT09IG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0aWYgKHRoaXMuYm9uZVRleHR1cmUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuYm9uZVRleHR1cmUuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5ib25lVGV4dHVyZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0ZnJvbUpTT04oanNvbiwgYm9uZXMpIHtcblx0XHR0aGlzLnV1aWQgPSBqc29uLnV1aWQ7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24uYm9uZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCB1dWlkID0ganNvbi5ib25lc1tpXTtcblx0XHRcdGxldCBib25lID0gYm9uZXNbdXVpZF07XG5cblx0XHRcdGlmIChib25lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6JywgdXVpZCk7XG5cdFx0XHRcdGJvbmUgPSBuZXcgQm9uZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJvbmVzLnB1c2goYm9uZSk7XG5cdFx0XHR0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KGpzb24uYm9uZUludmVyc2VzW2ldKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ1NrZWxldG9uJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnU2tlbGV0b24udG9KU09OJ1xuXHRcdFx0fSxcblx0XHRcdGJvbmVzOiBbXSxcblx0XHRcdGJvbmVJbnZlcnNlczogW11cblx0XHR9O1xuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUludmVyc2VzID0gdGhpcy5ib25lSW52ZXJzZXM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGJvbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzW2ldO1xuXHRcdFx0ZGF0YS5ib25lcy5wdXNoKGJvbmUudXVpZCk7XG5cdFx0XHRjb25zdCBib25lSW52ZXJzZSA9IGJvbmVJbnZlcnNlc1tpXTtcblx0XHRcdGRhdGEuYm9uZUludmVyc2VzLnB1c2goYm9uZUludmVyc2UudG9BcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cbmNsYXNzIEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCwgbWVzaFBlckF0dHJpYnV0ZSA9IDEpIHtcblx0XHRpZiAodHlwZW9mIG5vcm1hbGl6ZWQgPT09ICdudW1iZXInKSB7XG5cdFx0XHRtZXNoUGVyQXR0cmlidXRlID0gbm9ybWFsaXplZDtcblx0XHRcdG5vcm1hbGl6ZWQgPSBmYWxzZTtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LicpO1xuXHRcdH1cblxuXHRcdHN1cGVyKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gbWVzaFBlckF0dHJpYnV0ZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IHNvdXJjZS5tZXNoUGVyQXR0cmlidXRlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7XG5cdFx0ZGF0YS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuY29uc3QgX2luc3RhbmNlTG9jYWxNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2luc3RhbmNlV29ybGRNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2luc3RhbmNlSW50ZXJzZWN0cyA9IFtdO1xuXG5jb25zdCBfbWVzaCA9IC8qQF9fUFVSRV9fKi9uZXcgTWVzaCgpO1xuXG5jbGFzcyBJbnN0YW5jZWRNZXNoIGV4dGVuZHMgTWVzaCB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5LCBtYXRlcmlhbCwgY291bnQpIHtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMuaW5zdGFuY2VNYXRyaXggPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAxNiksIDE2KTtcblx0XHR0aGlzLmluc3RhbmNlQ29sb3IgPSBudWxsO1xuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcblx0XHR0aGlzLmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuaW5zdGFuY2VNYXRyaXguY29weShzb3VyY2UuaW5zdGFuY2VNYXRyaXgpO1xuXHRcdGlmIChzb3VyY2UuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCkgdGhpcy5pbnN0YW5jZUNvbG9yID0gc291cmNlLmluc3RhbmNlQ29sb3IuY2xvbmUoKTtcblx0XHR0aGlzLmNvdW50ID0gc291cmNlLmNvdW50O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29sb3JBdChpbmRleCwgY29sb3IpIHtcblx0XHRjb2xvci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LCBpbmRleCAqIDMpO1xuXHR9XG5cblx0Z2V0TWF0cml4QXQoaW5kZXgsIG1hdHJpeCkge1xuXHRcdG1hdHJpeC5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwgaW5kZXggKiAxNik7XG5cdH1cblxuXHRyYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cykge1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCByYXljYXN0VGltZXMgPSB0aGlzLmNvdW50O1xuXHRcdF9tZXNoLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRfbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cdFx0aWYgKF9tZXNoLm1hdGVyaWFsID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGZvciAobGV0IGluc3RhbmNlSWQgPSAwOyBpbnN0YW5jZUlkIDwgcmF5Y2FzdFRpbWVzOyBpbnN0YW5jZUlkKyspIHtcblx0XHRcdC8vIGNhbGN1bGF0ZSB0aGUgd29ybGQgbWF0cml4IGZvciBlYWNoIGluc3RhbmNlXG5cdFx0XHR0aGlzLmdldE1hdHJpeEF0KGluc3RhbmNlSWQsIF9pbnN0YW5jZUxvY2FsTWF0cml4KTtcblxuXHRcdFx0X2luc3RhbmNlV29ybGRNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhtYXRyaXhXb3JsZCwgX2luc3RhbmNlTG9jYWxNYXRyaXgpOyAvLyB0aGUgbWVzaCByZXByZXNlbnRzIHRoaXMgc2luZ2xlIGluc3RhbmNlXG5cblxuXHRcdFx0X21lc2gubWF0cml4V29ybGQgPSBfaW5zdGFuY2VXb3JsZE1hdHJpeDtcblxuXHRcdFx0X21lc2gucmF5Y2FzdChyYXljYXN0ZXIsIF9pbnN0YW5jZUludGVyc2VjdHMpOyAvLyBwcm9jZXNzIHRoZSByZXN1bHQgb2YgcmF5Y2FzdFxuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gX2luc3RhbmNlSW50ZXJzZWN0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW50ZXJzZWN0ID0gX2luc3RhbmNlSW50ZXJzZWN0c1tpXTtcblx0XHRcdFx0aW50ZXJzZWN0Lmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuXHRcdFx0XHRpbnRlcnNlY3Qub2JqZWN0ID0gdGhpcztcblx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdCk7XG5cdFx0XHR9XG5cblx0XHRcdF9pbnN0YW5jZUludGVyc2VjdHMubGVuZ3RoID0gMDtcblx0XHR9XG5cdH1cblxuXHRzZXRDb2xvckF0KGluZGV4LCBjb2xvcikge1xuXHRcdGlmICh0aGlzLmluc3RhbmNlQ29sb3IgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuaW5zdGFuY2VDb2xvciA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50ICogMyksIDMpO1xuXHRcdH1cblxuXHRcdGNvbG9yLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LCBpbmRleCAqIDMpO1xuXHR9XG5cblx0c2V0TWF0cml4QXQoaW5kZXgsIG1hdHJpeCkge1xuXHRcdG1hdHJpeC50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksIGluZGV4ICogMTYpO1xuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge31cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHR0eXBlOiAnZGlzcG9zZSdcblx0XHR9KTtcblx0fVxuXG59XG5cbkluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcdGxpbmVjYXA6IFwicm91bmRcIixcbiAqXHRsaW5lam9pbjogXCJyb3VuZFwiXG4gKiB9XG4gKi9cblxuY2xhc3MgTGluZUJhc2ljTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdMaW5lQmFzaWNNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7XG5cdFx0dGhpcy5saW5ld2lkdGggPSAxO1xuXHRcdHRoaXMubGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy5saW5lam9pbiA9ICdyb3VuZCc7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLmxpbmV3aWR0aCA9IHNvdXJjZS5saW5ld2lkdGg7XG5cdFx0dGhpcy5saW5lY2FwID0gc291cmNlLmxpbmVjYXA7XG5cdFx0dGhpcy5saW5lam9pbiA9IHNvdXJjZS5saW5lam9pbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbkxpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgX3N0YXJ0JDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2VuZCQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9pbnZlcnNlTWF0cml4JDEgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3JheSQxID0gLypAX19QVVJFX18qL25ldyBSYXkoKTtcblxuY29uc3QgX3NwaGVyZSQxID0gLypAX19QVVJFX18qL25ldyBTcGhlcmUoKTtcblxuY2xhc3MgTGluZSBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKSwgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0xpbmUnO1xuXHRcdHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cdFx0dGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbXB1dGVMaW5lRGlzdGFuY2VzKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHQvLyB3ZSBhc3N1bWUgbm9uLWluZGV4ZWQgZ2VvbWV0cnlcblx0XHRcdGlmIChnZW9tZXRyeS5pbmRleCA9PT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRcdGNvbnN0IGxpbmVEaXN0YW5jZXMgPSBbMF07XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDEsIGwgPSBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdF9zdGFydCQxLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGkgLSAxKTtcblxuXHRcdFx0XHRcdF9lbmQkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpKTtcblxuXHRcdFx0XHRcdGxpbmVEaXN0YW5jZXNbaV0gPSBsaW5lRGlzdGFuY2VzW2kgLSAxXTtcblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzW2ldICs9IF9zdGFydCQxLmRpc3RhbmNlVG8oX2VuZCQxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbGluZURpc3RhbmNlJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobGluZURpc3RhbmNlcywgMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdlb21ldHJ5LmlzR2VvbWV0cnkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHJheWNhc3Rlci5wYXJhbXMuTGluZS50aHJlc2hvbGQ7XG5cdFx0Y29uc3QgZHJhd1JhbmdlID0gZ2VvbWV0cnkuZHJhd1JhbmdlOyAvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXlcblxuXHRcdGlmIChnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRfc3BoZXJlJDEuY29weShnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cblx0XHRfc3BoZXJlJDEuYXBwbHlNYXRyaXg0KG1hdHJpeFdvcmxkKTtcblxuXHRcdF9zcGhlcmUkMS5yYWRpdXMgKz0gdGhyZXNob2xkO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSQxKSA9PT0gZmFsc2UpIHJldHVybjsgLy9cblxuXHRcdF9pbnZlcnNlTWF0cml4JDEuY29weShtYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRfcmF5JDEuY29weShyYXljYXN0ZXIucmF5KS5hcHBseU1hdHJpeDQoX2ludmVyc2VNYXRyaXgkMSk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXHRcdGNvbnN0IHZTdGFydCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdkVuZCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgaW50ZXJTZWdtZW50ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBpbnRlclJheSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgc3RlcCA9IHRoaXMuaXNMaW5lU2VnbWVudHMgPyAyIDogMTtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGRyYXdSYW5nZS5zdGFydCk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4LmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSBzdGFydCwgbCA9IGVuZCAtIDE7IGkgPCBsOyBpICs9IHN0ZXApIHtcblx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WChpKTtcblx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXguZ2V0WChpICsgMSk7XG5cdFx0XHRcdFx0dlN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGEpO1xuXHRcdFx0XHRcdHZFbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgYik7XG5cblx0XHRcdFx0XHRjb25zdCBkaXN0U3EgPSBfcmF5JDEuZGlzdGFuY2VTcVRvU2VnbWVudCh2U3RhcnQsIHZFbmQsIGludGVyUmF5LCBpbnRlclNlZ21lbnQpO1xuXG5cdFx0XHRcdFx0aWYgKGRpc3RTcSA+IGxvY2FsVGhyZXNob2xkU3EpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdGludGVyUmF5LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTsgLy9Nb3ZlIGJhY2sgdG8gd29ybGQgc3BhY2UgZm9yIGRpc3RhbmNlIGNhbGN1bGF0aW9uXG5cblx0XHRcdFx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oaW50ZXJSYXkpO1xuXHRcdFx0XHRcdGlmIChkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhcikgY29udGludWU7XG5cdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0XHRcdC8vIFdoYXQgZG8gd2Ugd2FudD8gaW50ZXJzZWN0aW9uIHBvaW50IG9uIHRoZSByYXkgb3Igb24gdGhlIHNlZ21lbnQ/P1xuXHRcdFx0XHRcdFx0Ly8gcG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksXG5cdFx0XHRcdFx0XHRwb2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLFxuXHRcdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0XHRcdFx0ZmFjZUluZGV4OiBudWxsLFxuXHRcdFx0XHRcdFx0b2JqZWN0OiB0aGlzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4ocG9zaXRpb25BdHRyaWJ1dGUuY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCk7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBsID0gZW5kIC0gMTsgaSA8IGw7IGkgKz0gc3RlcCkge1xuXHRcdFx0XHRcdHZTdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpKTtcblx0XHRcdFx0XHR2RW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAxKTtcblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RTcSA9IF9yYXkkMS5kaXN0YW5jZVNxVG9TZWdtZW50KHZTdGFydCwgdkVuZCwgaW50ZXJSYXksIGludGVyU2VnbWVudCk7XG5cblx0XHRcdFx0XHRpZiAoZGlzdFNxID4gbG9jYWxUaHJlc2hvbGRTcSkgY29udGludWU7XG5cdFx0XHRcdFx0aW50ZXJSYXkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpOyAvL01vdmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb25cblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhpbnRlclJheSk7XG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSBjb250aW51ZTtcblx0XHRcdFx0XHRpbnRlcnNlY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0XHRcdFx0Ly8gV2hhdCBkbyB3ZSB3YW50PyBpbnRlcnNlY3Rpb24gcG9pbnQgb24gdGhlIHJheSBvciBvbiB0aGUgc2VnbWVudD8/XG5cdFx0XHRcdFx0XHQvLyBwb2ludDogcmF5Y2FzdGVyLnJheS5hdCggZGlzdGFuY2UgKSxcblx0XHRcdFx0XHRcdHBvaW50OiBpbnRlclNlZ21lbnQuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksXG5cdFx0XHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdFx0XHRmYWNlSW5kZXg6IG51bGwsXG5cdFx0XHRcdFx0XHRvYmplY3Q6IHRoaXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZ2VvbWV0cnkuaXNHZW9tZXRyeSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVNb3JwaFRhcmdldHMoKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXG5cdFx0aWYgKGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtb3JwaEF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzW2tleXNbMF1dO1xuXG5cdFx0XHRcdGlmIChtb3JwaEF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBbXTtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgbSA9IDAsIG1sID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBtIDwgbWw7IG0rKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IG1vcnBoQXR0cmlidXRlW21dLm5hbWUgfHwgU3RyaW5nKG0pO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25hbWVdID0gbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzO1xuXG5cdFx0XHRpZiAobW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxufVxuXG5MaW5lLnByb3RvdHlwZS5pc0xpbmUgPSB0cnVlO1xuXG5jb25zdCBfc3RhcnQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2VuZCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBMaW5lU2VnbWVudHMgZXh0ZW5kcyBMaW5lIHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnksIG1hdGVyaWFsKSB7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZVNlZ21lbnRzJztcblx0fVxuXG5cdGNvbXB1dGVMaW5lRGlzdGFuY2VzKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHQvLyB3ZSBhc3N1bWUgbm9uLWluZGV4ZWQgZ2VvbWV0cnlcblx0XHRcdGlmIChnZW9tZXRyeS5pbmRleCA9PT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRcdGNvbnN0IGxpbmVEaXN0YW5jZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHBvc2l0aW9uQXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArPSAyKSB7XG5cdFx0XHRcdFx0X3N0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGkpO1xuXG5cdFx0XHRcdFx0X2VuZC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMSk7XG5cblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzW2ldID0gaSA9PT0gMCA/IDAgOiBsaW5lRGlzdGFuY2VzW2kgLSAxXTtcblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzW2kgKyAxXSA9IGxpbmVEaXN0YW5jZXNbaV0gKyBfc3RhcnQuZGlzdGFuY2VUbyhfZW5kKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbGluZURpc3RhbmNlJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobGluZURpc3RhbmNlcywgMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LicpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZ2VvbWV0cnkuaXNHZW9tZXRyeSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbkxpbmVTZWdtZW50cy5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHMgPSB0cnVlO1xuXG5jbGFzcyBMaW5lTG9vcCBleHRlbmRzIExpbmUge1xuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeSwgbWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdMaW5lTG9vcCc7XG5cdH1cblxufVxuXG5MaW5lTG9vcC5wcm90b3R5cGUuaXNMaW5lTG9vcCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXHRtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdHNpemU6IDxmbG9hdD4sXG4gKlx0c2l6ZUF0dGVudWF0aW9uOiA8Ym9vbD5cbiAqXG4gKiB9XG4gKi9cblxuY2xhc3MgUG9pbnRzTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdQb2ludHNNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuc2l6ZSA9IDE7XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSB0cnVlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5zaXplID0gc291cmNlLnNpemU7XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6ZUF0dGVudWF0aW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuUG9pbnRzTWF0ZXJpYWwucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfcmF5ID0gLypAX19QVVJFX18qL25ldyBSYXkoKTtcblxuY29uc3QgX3NwaGVyZSA9IC8qQF9fUFVSRV9fKi9uZXcgU3BoZXJlKCk7XG5cbmNvbnN0IF9wb3NpdGlvbiQyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFBvaW50cyBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKSwgbWF0ZXJpYWwgPSBuZXcgUG9pbnRzTWF0ZXJpYWwoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BvaW50cyc7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHR0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IHNvdXJjZS5tYXRlcmlhbDtcblx0XHR0aGlzLmdlb21ldHJ5ID0gc291cmNlLmdlb21ldHJ5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHJheWNhc3Rlci5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZDtcblx0XHRjb25zdCBkcmF3UmFuZ2UgPSBnZW9tZXRyeS5kcmF3UmFuZ2U7IC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheVxuXG5cdFx0aWYgKGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdF9zcGhlcmUuY29weShnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cblx0XHRfc3BoZXJlLmFwcGx5TWF0cml4NChtYXRyaXhXb3JsZCk7XG5cblx0XHRfc3BoZXJlLnJhZGl1cyArPSB0aHJlc2hvbGQ7XG5cdFx0aWYgKHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0c1NwaGVyZShfc3BoZXJlKSA9PT0gZmFsc2UpIHJldHVybjsgLy9cblxuXHRcdF9pbnZlcnNlTWF0cml4LmNvcHkobWF0cml4V29ybGQpLmludmVydCgpO1xuXG5cdFx0X3JheS5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXG5cdFx0aWYgKGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlID0gYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdFx0aWYgKGluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXguY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCk7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WChpKTtcblxuXHRcdFx0XHRcdF9wb3NpdGlvbiQyLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGEpO1xuXG5cdFx0XHRcdFx0dGVzdFBvaW50KF9wb3NpdGlvbiQyLCBhLCBsb2NhbFRocmVzaG9sZFNxLCBtYXRyaXhXb3JsZCwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbihwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gc3RhcnQsIGwgPSBlbmQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRfcG9zaXRpb24kMi5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpKTtcblxuXHRcdFx0XHRcdHRlc3RQb2ludChfcG9zaXRpb24kMiwgaSwgbG9jYWxUaHJlc2hvbGRTcSwgbWF0cml4V29ybGQsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1vcnBoQXR0cmlidXRlcyk7XG5cblx0XHRcdGlmIChrZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNba2V5c1swXV07XG5cblx0XHRcdFx0aWYgKG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IFtdO1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGxldCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lID0gbW9ycGhBdHRyaWJ1dGVbbV0ubmFtZSB8fCBTdHJpbmcobSk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbmFtZV0gPSBtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cblx0XHRcdGlmIChtb3JwaFRhcmdldHMgIT09IHVuZGVmaW5lZCAmJiBtb3JwaFRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cbn1cblxuUG9pbnRzLnByb3RvdHlwZS5pc1BvaW50cyA9IHRydWU7XG5cbmZ1bmN0aW9uIHRlc3RQb2ludChwb2ludCwgaW5kZXgsIGxvY2FsVGhyZXNob2xkU3EsIG1hdHJpeFdvcmxkLCByYXljYXN0ZXIsIGludGVyc2VjdHMsIG9iamVjdCkge1xuXHRjb25zdCByYXlQb2ludERpc3RhbmNlU3EgPSBfcmF5LmRpc3RhbmNlU3FUb1BvaW50KHBvaW50KTtcblxuXHRpZiAocmF5UG9pbnREaXN0YW5jZVNxIDwgbG9jYWxUaHJlc2hvbGRTcSkge1xuXHRcdGNvbnN0IGludGVyc2VjdFBvaW50ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdF9yYXkuY2xvc2VzdFBvaW50VG9Qb2ludChwb2ludCwgaW50ZXJzZWN0UG9pbnQpO1xuXG5cdFx0aW50ZXJzZWN0UG9pbnQuYXBwbHlNYXRyaXg0KG1hdHJpeFdvcmxkKTtcblx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oaW50ZXJzZWN0UG9pbnQpO1xuXHRcdGlmIChkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhcikgcmV0dXJuO1xuXHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0XHRkaXN0YW5jZVRvUmF5OiBNYXRoLnNxcnQocmF5UG9pbnREaXN0YW5jZVNxKSxcblx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRvYmplY3Q6IG9iamVjdFxuXHRcdH0pO1xuXHR9XG59XG5cbmNsYXNzIFZpZGVvVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3Rvcih2aWRlbywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5KSB7XG5cdFx0c3VwZXIodmlkZW8sIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSk7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gdXBkYXRlVmlkZW8oKSB7XG5cdFx0XHRzY29wZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHR2aWRlby5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHVwZGF0ZVZpZGVvKTtcblx0XHR9XG5cblx0XHRpZiAoJ3JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2snIGluIHZpZGVvKSB7XG5cdFx0XHR2aWRlby5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHVwZGF0ZVZpZGVvKTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRjb25zdCB2aWRlbyA9IHRoaXMuaW1hZ2U7XG5cdFx0Y29uc3QgaGFzVmlkZW9GcmFtZUNhbGxiYWNrID0gKCdyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrJyBpbiB2aWRlbyk7XG5cblx0XHRpZiAoaGFzVmlkZW9GcmFtZUNhbGxiYWNrID09PSBmYWxzZSAmJiB2aWRlby5yZWFkeVN0YXRlID49IHZpZGVvLkhBVkVfQ1VSUkVOVF9EQVRBKSB7XG5cdFx0XHR0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxufVxuXG5WaWRlb1RleHR1cmUucHJvdG90eXBlLmlzVmlkZW9UZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCkge1xuXHRcdHN1cGVyKHtcblx0XHRcdHdpZHRoLFxuXHRcdFx0aGVpZ2h0XG5cdFx0fSk7XG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cbn1cblxuRnJhbWVidWZmZXJUZXh0dXJlLnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIENvbXByZXNzZWRUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKG1pcG1hcHMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgYW5pc290cm9weSwgZW5jb2RpbmcpIHtcblx0XHRzdXBlcihudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nKTtcblx0XHR0aGlzLmltYWdlID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHRcblx0XHR9O1xuXHRcdHRoaXMubWlwbWFwcyA9IG1pcG1hcHM7IC8vIG5vIGZsaXBwaW5nIGZvciBjdWJlIHRleHR1cmVzXG5cdFx0Ly8gKGFsc28gZmxpcHBpbmcgZG9lc24ndCB3b3JrIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIClcblxuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTsgLy8gY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlc1xuXHRcdC8vIG1pcHMgbXVzdCBiZSBlbWJlZGRlZCBpbiBERFMgZmlsZXNcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdH1cblxufVxuXG5Db21wcmVzc2VkVGV4dHVyZS5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIENhbnZhc1RleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblx0Y29uc3RydWN0b3IoY2FudmFzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkpIHtcblx0XHRzdXBlcihjYW52YXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSk7XG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxufVxuXG5DYW52YXNUZXh0dXJlLnByb3RvdHlwZS5pc0NhbnZhc1RleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBDaXJjbGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgc2VnbWVudHMgPSA4LCB0aGV0YVN0YXJ0ID0gMCwgdGhldGFMZW5ndGggPSBNYXRoLlBJICogMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0NpcmNsZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHNlZ21lbnRzOiBzZWdtZW50cyxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXHRcdHNlZ21lbnRzID0gTWF0aC5tYXgoMywgc2VnbWVudHMpOyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpOyAvLyBjZW50ZXIgcG9pbnRcblxuXHRcdHZlcnRpY2VzLnB1c2goMCwgMCwgMCk7XG5cdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xuXHRcdHV2cy5wdXNoKDAuNSwgMC41KTtcblxuXHRcdGZvciAobGV0IHMgPSAwLCBpID0gMzsgcyA8PSBzZWdtZW50czsgcysrLCBpICs9IDMpIHtcblx0XHRcdGNvbnN0IHNlZ21lbnQgPSB0aGV0YVN0YXJ0ICsgcyAvIHNlZ21lbnRzICogdGhldGFMZW5ndGg7IC8vIHZlcnRleFxuXG5cdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIE1hdGguY29zKHNlZ21lbnQpO1xuXHRcdFx0dmVydGV4LnkgPSByYWRpdXMgKiBNYXRoLnNpbihzZWdtZW50KTtcblx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbFxuXG5cdFx0XHRub3JtYWxzLnB1c2goMCwgMCwgMSk7IC8vIHV2c1xuXG5cdFx0XHR1di54ID0gKHZlcnRpY2VzW2ldIC8gcmFkaXVzICsgMSkgLyAyO1xuXHRcdFx0dXYueSA9ICh2ZXJ0aWNlc1tpICsgMV0gLyByYWRpdXMgKyAxKSAvIDI7XG5cdFx0XHR1dnMucHVzaCh1di54LCB1di55KTtcblx0XHR9IC8vIGluZGljZXNcblxuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHRcdFx0aW5kaWNlcy5wdXNoKGksIGkgKyAxLCAwKTtcblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IENpcmNsZUdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLnNlZ21lbnRzLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGgpO1xuXHR9XG5cbn1cblxuY2xhc3MgQ3lsaW5kZXJHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzVG9wID0gMSwgcmFkaXVzQm90dG9tID0gMSwgaGVpZ2h0ID0gMSwgcmFkaWFsU2VnbWVudHMgPSA4LCBoZWlnaHRTZWdtZW50cyA9IDEsIG9wZW5FbmRlZCA9IGZhbHNlLCB0aGV0YVN0YXJ0ID0gMCwgdGhldGFMZW5ndGggPSBNYXRoLlBJICogMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0N5bGluZGVyR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1c1RvcDogcmFkaXVzVG9wLFxuXHRcdFx0cmFkaXVzQm90dG9tOiByYWRpdXNCb3R0b20sXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdG9wZW5FbmRlZDogb3BlbkVuZGVkLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9vcihyYWRpYWxTZWdtZW50cyk7XG5cdFx0aGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKGhlaWdodFNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGluZGV4QXJyYXkgPSBbXTtcblx0XHRjb25zdCBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblx0XHRsZXQgZ3JvdXBTdGFydCA9IDA7IC8vIGdlbmVyYXRlIGdlb21ldHJ5XG5cblx0XHRnZW5lcmF0ZVRvcnNvKCk7XG5cblx0XHRpZiAob3BlbkVuZGVkID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKHJhZGl1c1RvcCA+IDApIGdlbmVyYXRlQ2FwKHRydWUpO1xuXHRcdFx0aWYgKHJhZGl1c0JvdHRvbSA+IDApIGdlbmVyYXRlQ2FwKGZhbHNlKTtcblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVUb3JzbygpIHtcblx0XHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0bGV0IGdyb3VwQ291bnQgPSAwOyAvLyB0aGlzIHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbFxuXG5cdFx0XHRjb25zdCBzbG9wZSA9IChyYWRpdXNCb3R0b20gLSByYWRpdXNUb3ApIC8gaGVpZ2h0OyAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAobGV0IHkgPSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5KyspIHtcblx0XHRcdFx0Y29uc3QgaW5kZXhSb3cgPSBbXTtcblx0XHRcdFx0Y29uc3QgdiA9IHkgLyBoZWlnaHRTZWdtZW50czsgLy8gY2FsY3VsYXRlIHRoZSByYWRpdXMgb2YgdGhlIGN1cnJlbnQgcm93XG5cblx0XHRcdFx0Y29uc3QgcmFkaXVzID0gdiAqIChyYWRpdXNCb3R0b20gLSByYWRpdXNUb3ApICsgcmFkaXVzVG9wO1xuXG5cdFx0XHRcdGZvciAobGV0IHggPSAwOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4KyspIHtcblx0XHRcdFx0XHRjb25zdCB1ID0geCAvIHJhZGlhbFNlZ21lbnRzO1xuXHRcdFx0XHRcdGNvbnN0IHRoZXRhID0gdSAqIHRoZXRhTGVuZ3RoICsgdGhldGFTdGFydDtcblx0XHRcdFx0XHRjb25zdCBzaW5UaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblx0XHRcdFx0XHRjb25zdCBjb3NUaGV0YSA9IE1hdGguY29zKHRoZXRhKTsgLy8gdmVydGV4XG5cblx0XHRcdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIHNpblRoZXRhO1xuXHRcdFx0XHRcdHZlcnRleC55ID0gLXYgKiBoZWlnaHQgKyBoYWxmSGVpZ2h0O1xuXHRcdFx0XHRcdHZlcnRleC56ID0gcmFkaXVzICogY29zVGhldGE7XG5cdFx0XHRcdFx0dmVydGljZXMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56KTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0XHRub3JtYWwuc2V0KHNpblRoZXRhLCBzbG9wZSwgY29zVGhldGEpLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRcdG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsgLy8gdXZcblxuXHRcdFx0XHRcdHV2cy5wdXNoKHUsIDEgLSB2KTsgLy8gc2F2ZSBpbmRleCBvZiB2ZXJ0ZXggaW4gcmVzcGVjdGl2ZSByb3dcblxuXHRcdFx0XHRcdGluZGV4Um93LnB1c2goaW5kZXgrKyk7XG5cdFx0XHRcdH0gLy8gbm93IHNhdmUgdmVydGljZXMgb2YgdGhlIHJvdyBpbiBvdXIgaW5kZXggYXJyYXlcblxuXG5cdFx0XHRcdGluZGV4QXJyYXkucHVzaChpbmRleFJvdyk7XG5cdFx0XHR9IC8vIGdlbmVyYXRlIGluZGljZXNcblxuXG5cdFx0XHRmb3IgKGxldCB4ID0gMDsgeCA8IHJhZGlhbFNlZ21lbnRzOyB4KyspIHtcblx0XHRcdFx0Zm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHRTZWdtZW50czsgeSsrKSB7XG5cdFx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBpbmRleCBhcnJheSB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgaW5kaWNlc1xuXHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleEFycmF5W3ldW3hdO1xuXHRcdFx0XHRcdGNvbnN0IGIgPSBpbmRleEFycmF5W3kgKyAxXVt4XTtcblx0XHRcdFx0XHRjb25zdCBjID0gaW5kZXhBcnJheVt5ICsgMV1beCArIDFdO1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBpbmRleEFycmF5W3ldW3ggKyAxXTsgLy8gZmFjZXNcblxuXHRcdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7IC8vIHVwZGF0ZSBncm91cCBjb3VudGVyXG5cblx0XHRcdFx0XHRncm91cENvdW50ICs9IDY7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gYWRkIGEgZ3JvdXAgdG8gdGhlIGdlb21ldHJ5LiB0aGlzIHdpbGwgZW5zdXJlIG11bHRpIG1hdGVyaWFsIHN1cHBvcnRcblxuXG5cdFx0XHRzY29wZS5hZGRHcm91cChncm91cFN0YXJ0LCBncm91cENvdW50LCAwKTsgLy8gY2FsY3VsYXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzXG5cblx0XHRcdGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUNhcCh0b3ApIHtcblx0XHRcdC8vIHNhdmUgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjZW50ZXIgdmVydGV4XG5cdFx0XHRjb25zdCBjZW50ZXJJbmRleFN0YXJ0ID0gaW5kZXg7XG5cdFx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0bGV0IGdyb3VwQ291bnQgPSAwO1xuXHRcdFx0Y29uc3QgcmFkaXVzID0gdG9wID09PSB0cnVlID8gcmFkaXVzVG9wIDogcmFkaXVzQm90dG9tO1xuXHRcdFx0Y29uc3Qgc2lnbiA9IHRvcCA9PT0gdHJ1ZSA/IDEgOiAtMTsgLy8gZmlyc3Qgd2UgZ2VuZXJhdGUgdGhlIGNlbnRlciB2ZXJ0ZXggZGF0YSBvZiB0aGUgY2FwLlxuXHRcdFx0Ly8gYmVjYXVzZSB0aGUgZ2VvbWV0cnkgbmVlZHMgb25lIHNldCBvZiB1dnMgcGVyIGZhY2UsXG5cdFx0XHQvLyB3ZSBtdXN0IGdlbmVyYXRlIGEgY2VudGVyIHZlcnRleCBwZXIgZmFjZS9zZWdtZW50XG5cblx0XHRcdGZvciAobGV0IHggPSAxOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4KyspIHtcblx0XHRcdFx0Ly8gdmVydGV4XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goMCwgaGFsZkhlaWdodCAqIHNpZ24sIDApOyAvLyBub3JtYWxcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goMCwgc2lnbiwgMCk7IC8vIHV2XG5cblx0XHRcdFx0dXZzLnB1c2goMC41LCAwLjUpOyAvLyBpbmNyZWFzZSBpbmRleFxuXG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9IC8vIHNhdmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNlbnRlciB2ZXJ0ZXhcblxuXG5cdFx0XHRjb25zdCBjZW50ZXJJbmRleEVuZCA9IGluZGV4OyAvLyBub3cgd2UgZ2VuZXJhdGUgdGhlIHN1cnJvdW5kaW5nIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdFx0Zm9yIChsZXQgeCA9IDA7IHggPD0gcmFkaWFsU2VnbWVudHM7IHgrKykge1xuXHRcdFx0XHRjb25zdCB1ID0geCAvIHJhZGlhbFNlZ21lbnRzO1xuXHRcdFx0XHRjb25zdCB0aGV0YSA9IHUgKiB0aGV0YUxlbmd0aCArIHRoZXRhU3RhcnQ7XG5cdFx0XHRcdGNvbnN0IGNvc1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuXHRcdFx0XHRjb25zdCBzaW5UaGV0YSA9IE1hdGguc2luKHRoZXRhKTsgLy8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBzaW5UaGV0YTtcblx0XHRcdFx0dmVydGV4LnkgPSBoYWxmSGVpZ2h0ICogc2lnbjtcblx0XHRcdFx0dmVydGV4LnogPSByYWRpdXMgKiBjb3NUaGV0YTtcblx0XHRcdFx0dmVydGljZXMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56KTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIHNpZ24sIDApOyAvLyB1dlxuXG5cdFx0XHRcdHV2LnggPSBjb3NUaGV0YSAqIDAuNSArIDAuNTtcblx0XHRcdFx0dXYueSA9IHNpblRoZXRhICogMC41ICogc2lnbiArIDAuNTtcblx0XHRcdFx0dXZzLnB1c2godXYueCwgdXYueSk7IC8vIGluY3JlYXNlIGluZGV4XG5cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdH0gLy8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cblx0XHRcdGZvciAobGV0IHggPSAwOyB4IDwgcmFkaWFsU2VnbWVudHM7IHgrKykge1xuXHRcdFx0XHRjb25zdCBjID0gY2VudGVySW5kZXhTdGFydCArIHg7XG5cdFx0XHRcdGNvbnN0IGkgPSBjZW50ZXJJbmRleEVuZCArIHg7XG5cblx0XHRcdFx0aWYgKHRvcCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdC8vIGZhY2UgdG9wXG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKGksIGkgKyAxLCBjKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBmYWNlIGJvdHRvbVxuXHRcdFx0XHRcdGluZGljZXMucHVzaChpICsgMSwgaSwgYyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRncm91cENvdW50ICs9IDM7XG5cdFx0XHR9IC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0XG5cblxuXHRcdFx0c2NvcGUuYWRkR3JvdXAoZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgdG9wID09PSB0cnVlID8gMSA6IDIpOyAvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHNcblxuXHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50O1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBDeWxpbmRlckdlb21ldHJ5KGRhdGEucmFkaXVzVG9wLCBkYXRhLnJhZGl1c0JvdHRvbSwgZGF0YS5oZWlnaHQsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEub3BlbkVuZGVkLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGgpO1xuXHR9XG5cbn1cblxuY2xhc3MgQ29uZUdlb21ldHJ5IGV4dGVuZHMgQ3lsaW5kZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIGhlaWdodCA9IDEsIHJhZGlhbFNlZ21lbnRzID0gOCwgaGVpZ2h0U2VnbWVudHMgPSAxLCBvcGVuRW5kZWQgPSBmYWxzZSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIpIHtcblx0XHRzdXBlcigwLCByYWRpdXMsIGhlaWdodCwgcmFkaWFsU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBvcGVuRW5kZWQsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ29uZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0cmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLFxuXHRcdFx0aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLFxuXHRcdFx0b3BlbkVuZGVkOiBvcGVuRW5kZWQsXG5cdFx0XHR0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LFxuXHRcdFx0dGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoXG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBDb25lR2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEuaGVpZ2h0LCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzLCBkYXRhLm9wZW5FbmRlZCwgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoKTtcblx0fVxuXG59XG5cbmNsYXNzIFBvbHloZWRyb25HZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IodmVydGljZXMgPSBbXSwgaW5kaWNlcyA9IFtdLCByYWRpdXMgPSAxLCBkZXRhaWwgPSAwKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUG9seWhlZHJvbkdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHR2ZXJ0aWNlczogdmVydGljZXMsXG5cdFx0XHRpbmRpY2VzOiBpbmRpY2VzLFxuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07IC8vIGRlZmF1bHQgYnVmZmVyIGRhdGFcblxuXHRcdGNvbnN0IHZlcnRleEJ1ZmZlciA9IFtdO1xuXHRcdGNvbnN0IHV2QnVmZmVyID0gW107IC8vIHRoZSBzdWJkaXZpc2lvbiBjcmVhdGVzIHRoZSB2ZXJ0ZXggYnVmZmVyIGRhdGFcblxuXHRcdHN1YmRpdmlkZShkZXRhaWwpOyAvLyBhbGwgdmVydGljZXMgc2hvdWxkIGxpZSBvbiBhIGNvbmNlcHR1YWwgc3BoZXJlIHdpdGggYSBnaXZlbiByYWRpdXNcblxuXHRcdGFwcGx5UmFkaXVzKHJhZGl1cyk7IC8vIGZpbmFsbHksIGNyZWF0ZSB0aGUgdXYgZGF0YVxuXG5cdFx0Z2VuZXJhdGVVVnMoKTsgLy8gYnVpbGQgbm9uLWluZGV4ZWQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRleEJ1ZmZlciwgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0ZXhCdWZmZXIuc2xpY2UoKSwgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2QnVmZmVyLCAyKSk7XG5cblx0XHRpZiAoZGV0YWlsID09PSAwKSB7XG5cdFx0XHR0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7IC8vIGZsYXQgbm9ybWFsc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTsgLy8gc21vb3RoIG5vcm1hbHNcblx0XHR9IC8vIGhlbHBlciBmdW5jdGlvbnNcblxuXG5cdFx0ZnVuY3Rpb24gc3ViZGl2aWRlKGRldGFpbCkge1xuXHRcdFx0Y29uc3QgYSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBiID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGMgPSBuZXcgVmVjdG9yMygpOyAvLyBpdGVyYXRlIG92ZXIgYWxsIGZhY2VzIGFuZCBhcHBseSBhIHN1YmRpdmlzb24gd2l0aCB0aGUgZ2l2ZW4gZGV0YWlsIHZhbHVlXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xuXHRcdFx0XHQvLyBnZXQgdGhlIHZlcnRpY2VzIG9mIHRoZSBmYWNlXG5cdFx0XHRcdGdldFZlcnRleEJ5SW5kZXgoaW5kaWNlc1tpICsgMF0sIGEpO1xuXHRcdFx0XHRnZXRWZXJ0ZXhCeUluZGV4KGluZGljZXNbaSArIDFdLCBiKTtcblx0XHRcdFx0Z2V0VmVydGV4QnlJbmRleChpbmRpY2VzW2kgKyAyXSwgYyk7IC8vIHBlcmZvcm0gc3ViZGl2aXNpb25cblxuXHRcdFx0XHRzdWJkaXZpZGVGYWNlKGEsIGIsIGMsIGRldGFpbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc3ViZGl2aWRlRmFjZShhLCBiLCBjLCBkZXRhaWwpIHtcblx0XHRcdGNvbnN0IGNvbHMgPSBkZXRhaWwgKyAxOyAvLyB3ZSB1c2UgdGhpcyBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IGFzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIHRoZSBzdWJkaXZpc2lvblxuXG5cdFx0XHRjb25zdCB2ID0gW107IC8vIGNvbnN0cnVjdCBhbGwgb2YgdGhlIHZlcnRpY2VzIGZvciB0aGlzIHN1YmRpdmlzaW9uXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGNvbHM7IGkrKykge1xuXHRcdFx0XHR2W2ldID0gW107XG5cdFx0XHRcdGNvbnN0IGFqID0gYS5jbG9uZSgpLmxlcnAoYywgaSAvIGNvbHMpO1xuXHRcdFx0XHRjb25zdCBiaiA9IGIuY2xvbmUoKS5sZXJwKGMsIGkgLyBjb2xzKTtcblx0XHRcdFx0Y29uc3Qgcm93cyA9IGNvbHMgLSBpO1xuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHJvd3M7IGorKykge1xuXHRcdFx0XHRcdGlmIChqID09PSAwICYmIGkgPT09IGNvbHMpIHtcblx0XHRcdFx0XHRcdHZbaV1bal0gPSBhajtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dltpXVtqXSA9IGFqLmNsb25lKCkubGVycChiaiwgaiAvIHJvd3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBjb25zdHJ1Y3QgYWxsIG9mIHRoZSBmYWNlc1xuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgMiAqIChjb2xzIC0gaSkgLSAxOyBqKyspIHtcblx0XHRcdFx0XHRjb25zdCBrID0gTWF0aC5mbG9vcihqIC8gMik7XG5cblx0XHRcdFx0XHRpZiAoaiAlIDIgPT09IDApIHtcblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgodltpXVtrICsgMV0pO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCh2W2kgKyAxXVtrXSk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KHZbaV1ba10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KHZbaV1bayArIDFdKTtcblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgodltpICsgMV1bayArIDFdKTtcblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgodltpICsgMV1ba10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFwcGx5UmFkaXVzKHJhZGl1cykge1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsgLy8gaXRlcmF0ZSBvdmVyIHRoZSBlbnRpcmUgYnVmZmVyIGFuZCBhcHBseSB0aGUgcmFkaXVzIHRvIGVhY2ggdmVydGV4XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHRcdHZlcnRleC54ID0gdmVydGV4QnVmZmVyW2kgKyAwXTtcblx0XHRcdFx0dmVydGV4LnkgPSB2ZXJ0ZXhCdWZmZXJbaSArIDFdO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHZlcnRleEJ1ZmZlcltpICsgMl07XG5cdFx0XHRcdHZlcnRleC5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihyYWRpdXMpO1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJbaSArIDBdID0gdmVydGV4Lng7XG5cdFx0XHRcdHZlcnRleEJ1ZmZlcltpICsgMV0gPSB2ZXJ0ZXgueTtcblx0XHRcdFx0dmVydGV4QnVmZmVyW2kgKyAyXSA9IHZlcnRleC56O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlVVZzKCkge1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDMpIHtcblx0XHRcdFx0dmVydGV4LnggPSB2ZXJ0ZXhCdWZmZXJbaSArIDBdO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHZlcnRleEJ1ZmZlcltpICsgMV07XG5cdFx0XHRcdHZlcnRleC56ID0gdmVydGV4QnVmZmVyW2kgKyAyXTtcblx0XHRcdFx0Y29uc3QgdSA9IGF6aW11dGgodmVydGV4KSAvIDIgLyBNYXRoLlBJICsgMC41O1xuXHRcdFx0XHRjb25zdCB2ID0gaW5jbGluYXRpb24odmVydGV4KSAvIE1hdGguUEkgKyAwLjU7XG5cdFx0XHRcdHV2QnVmZmVyLnB1c2godSwgMSAtIHYpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb3JyZWN0VVZzKCk7XG5cdFx0XHRjb3JyZWN0U2VhbSgpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3RTZWFtKCkge1xuXHRcdFx0Ly8gaGFuZGxlIGNhc2Ugd2hlbiBmYWNlIHN0cmFkZGxlcyB0aGUgc2VhbSwgc2VlICMzMjY5XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHV2QnVmZmVyLmxlbmd0aDsgaSArPSA2KSB7XG5cdFx0XHRcdC8vIHV2IGRhdGEgb2YgYSBzaW5nbGUgZmFjZVxuXHRcdFx0XHRjb25zdCB4MCA9IHV2QnVmZmVyW2kgKyAwXTtcblx0XHRcdFx0Y29uc3QgeDEgPSB1dkJ1ZmZlcltpICsgMl07XG5cdFx0XHRcdGNvbnN0IHgyID0gdXZCdWZmZXJbaSArIDRdO1xuXHRcdFx0XHRjb25zdCBtYXggPSBNYXRoLm1heCh4MCwgeDEsIHgyKTtcblx0XHRcdFx0Y29uc3QgbWluID0gTWF0aC5taW4oeDAsIHgxLCB4Mik7IC8vIDAuOSBpcyBzb21ld2hhdCBhcmJpdHJhcnlcblxuXHRcdFx0XHRpZiAobWF4ID4gMC45ICYmIG1pbiA8IDAuMSkge1xuXHRcdFx0XHRcdGlmICh4MCA8IDAuMikgdXZCdWZmZXJbaSArIDBdICs9IDE7XG5cdFx0XHRcdFx0aWYgKHgxIDwgMC4yKSB1dkJ1ZmZlcltpICsgMl0gKz0gMTtcblx0XHRcdFx0XHRpZiAoeDIgPCAwLjIpIHV2QnVmZmVyW2kgKyA0XSArPSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHVzaFZlcnRleCh2ZXJ0ZXgpIHtcblx0XHRcdHZlcnRleEJ1ZmZlci5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFZlcnRleEJ5SW5kZXgoaW5kZXgsIHZlcnRleCkge1xuXHRcdFx0Y29uc3Qgc3RyaWRlID0gaW5kZXggKiAzO1xuXHRcdFx0dmVydGV4LnggPSB2ZXJ0aWNlc1tzdHJpZGUgKyAwXTtcblx0XHRcdHZlcnRleC55ID0gdmVydGljZXNbc3RyaWRlICsgMV07XG5cdFx0XHR2ZXJ0ZXgueiA9IHZlcnRpY2VzW3N0cmlkZSArIDJdO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3RVVnMoKSB7XG5cdFx0XHRjb25zdCBhID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgYyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCB1dkEgPSBuZXcgVmVjdG9yMigpO1xuXHRcdFx0Y29uc3QgdXZCID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdGNvbnN0IHV2QyA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IHZlcnRleEJ1ZmZlci5sZW5ndGg7IGkgKz0gOSwgaiArPSA2KSB7XG5cdFx0XHRcdGEuc2V0KHZlcnRleEJ1ZmZlcltpICsgMF0sIHZlcnRleEJ1ZmZlcltpICsgMV0sIHZlcnRleEJ1ZmZlcltpICsgMl0pO1xuXHRcdFx0XHRiLnNldCh2ZXJ0ZXhCdWZmZXJbaSArIDNdLCB2ZXJ0ZXhCdWZmZXJbaSArIDRdLCB2ZXJ0ZXhCdWZmZXJbaSArIDVdKTtcblx0XHRcdFx0Yy5zZXQodmVydGV4QnVmZmVyW2kgKyA2XSwgdmVydGV4QnVmZmVyW2kgKyA3XSwgdmVydGV4QnVmZmVyW2kgKyA4XSk7XG5cdFx0XHRcdHV2QS5zZXQodXZCdWZmZXJbaiArIDBdLCB1dkJ1ZmZlcltqICsgMV0pO1xuXHRcdFx0XHR1dkIuc2V0KHV2QnVmZmVyW2ogKyAyXSwgdXZCdWZmZXJbaiArIDNdKTtcblx0XHRcdFx0dXZDLnNldCh1dkJ1ZmZlcltqICsgNF0sIHV2QnVmZmVyW2ogKyA1XSk7XG5cdFx0XHRcdGNlbnRyb2lkLmNvcHkoYSkuYWRkKGIpLmFkZChjKS5kaXZpZGVTY2FsYXIoMyk7XG5cdFx0XHRcdGNvbnN0IGF6aSA9IGF6aW11dGgoY2VudHJvaWQpO1xuXHRcdFx0XHRjb3JyZWN0VVYodXZBLCBqICsgMCwgYSwgYXppKTtcblx0XHRcdFx0Y29ycmVjdFVWKHV2QiwgaiArIDIsIGIsIGF6aSk7XG5cdFx0XHRcdGNvcnJlY3RVVih1dkMsIGogKyA0LCBjLCBhemkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3RVVih1diwgc3RyaWRlLCB2ZWN0b3IsIGF6aW11dGgpIHtcblx0XHRcdGlmIChhemltdXRoIDwgMCAmJiB1di54ID09PSAxKSB7XG5cdFx0XHRcdHV2QnVmZmVyW3N0cmlkZV0gPSB1di54IC0gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZlY3Rvci54ID09PSAwICYmIHZlY3Rvci56ID09PSAwKSB7XG5cdFx0XHRcdHV2QnVmZmVyW3N0cmlkZV0gPSBhemltdXRoIC8gMiAvIE1hdGguUEkgKyAwLjU7XG5cdFx0XHR9XG5cdFx0fSAvLyBBbmdsZSBhcm91bmQgdGhlIFkgYXhpcywgY291bnRlci1jbG9ja3dpc2Ugd2hlbiBsb29raW5nIGZyb20gYWJvdmUuXG5cblxuXHRcdGZ1bmN0aW9uIGF6aW11dGgodmVjdG9yKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5hdGFuMih2ZWN0b3IueiwgLXZlY3Rvci54KTtcblx0XHR9IC8vIEFuZ2xlIGFib3ZlIHRoZSBYWiBwbGFuZS5cblxuXG5cdFx0ZnVuY3Rpb24gaW5jbGluYXRpb24odmVjdG9yKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5hdGFuMigtdmVjdG9yLnksIE1hdGguc3FydCh2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnogKiB2ZWN0b3IueikpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBQb2x5aGVkcm9uR2VvbWV0cnkoZGF0YS52ZXJ0aWNlcywgZGF0YS5pbmRpY2VzLCBkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWxzKTtcblx0fVxuXG59XG5cbmNsYXNzIERvZGVjYWhlZHJvbkdlb21ldHJ5IGV4dGVuZHMgUG9seWhlZHJvbkdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgZGV0YWlsID0gMCkge1xuXHRcdGNvbnN0IHQgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyO1xuXHRcdGNvbnN0IHIgPSAxIC8gdDtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFsvLyAowrExLCDCsTEsIMKxMSlcblx0XHQtMSwgLTEsIC0xLCAtMSwgLTEsIDEsIC0xLCAxLCAtMSwgLTEsIDEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxLCAxLCAvLyAoMCwgwrExL8+GLCDCsc+GKVxuXHRcdDAsIC1yLCAtdCwgMCwgLXIsIHQsIDAsIHIsIC10LCAwLCByLCB0LCAvLyAowrExL8+GLCDCsc+GLCAwKVxuXHRcdC1yLCAtdCwgMCwgLXIsIHQsIDAsIHIsIC10LCAwLCByLCB0LCAwLCAvLyAowrHPhiwgMCwgwrExL8+GKVxuXHRcdC10LCAwLCAtciwgdCwgMCwgLXIsIC10LCAwLCByLCB0LCAwLCByXTtcblx0XHRjb25zdCBpbmRpY2VzID0gWzMsIDExLCA3LCAzLCA3LCAxNSwgMywgMTUsIDEzLCA3LCAxOSwgMTcsIDcsIDE3LCA2LCA3LCA2LCAxNSwgMTcsIDQsIDgsIDE3LCA4LCAxMCwgMTcsIDEwLCA2LCA4LCAwLCAxNiwgOCwgMTYsIDIsIDgsIDIsIDEwLCAwLCAxMiwgMSwgMCwgMSwgMTgsIDAsIDE4LCAxNiwgNiwgMTAsIDIsIDYsIDIsIDEzLCA2LCAxMywgMTUsIDIsIDE2LCAxOCwgMiwgMTgsIDMsIDIsIDMsIDEzLCAxOCwgMSwgOSwgMTgsIDksIDExLCAxOCwgMTEsIDMsIDQsIDE0LCAxMiwgNCwgMTIsIDAsIDQsIDAsIDgsIDExLCA5LCA1LCAxMSwgNSwgMTksIDExLCAxOSwgNywgMTksIDUsIDE0LCAxOSwgMTQsIDQsIDE5LCA0LCAxNywgMSwgMTIsIDE0LCAxLCAxNCwgNSwgMSwgNSwgOV07XG5cdFx0c3VwZXIodmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsKTtcblx0XHR0aGlzLnR5cGUgPSAnRG9kZWNhaGVkcm9uR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IERvZGVjYWhlZHJvbkdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbCk7XG5cdH1cblxufVxuXG5jb25zdCBfdjAgPSBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdjEkMSA9IG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoKTtcblxuY2xhc3MgRWRnZXNHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnkgPSBudWxsLCB0aHJlc2hvbGRBbmdsZSA9IDEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdFZGdlc0dlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRnZW9tZXRyeTogZ2VvbWV0cnksXG5cdFx0XHR0aHJlc2hvbGRBbmdsZTogdGhyZXNob2xkQW5nbGVcblx0XHR9O1xuXG5cdFx0aWYgKGdlb21ldHJ5ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBwcmVjaXNpb25Qb2ludHMgPSA0O1xuXHRcdFx0Y29uc3QgcHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvblBvaW50cyk7XG5cdFx0XHRjb25zdCB0aHJlc2hvbGREb3QgPSBNYXRoLmNvcyhERUcyUkFEICogdGhyZXNob2xkQW5nbGUpO1xuXHRcdFx0Y29uc3QgaW5kZXhBdHRyID0gZ2VvbWV0cnkuZ2V0SW5kZXgoKTtcblx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKTtcblx0XHRcdGNvbnN0IGluZGV4Q291bnQgPSBpbmRleEF0dHIgPyBpbmRleEF0dHIuY291bnQgOiBwb3NpdGlvbkF0dHIuY291bnQ7XG5cdFx0XHRjb25zdCBpbmRleEFyciA9IFswLCAwLCAwXTtcblx0XHRcdGNvbnN0IHZlcnRLZXlzID0gWydhJywgJ2InLCAnYyddO1xuXHRcdFx0Y29uc3QgaGFzaGVzID0gbmV3IEFycmF5KDMpO1xuXHRcdFx0Y29uc3QgZWRnZURhdGEgPSB7fTtcblx0XHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSArPSAzKSB7XG5cdFx0XHRcdGlmIChpbmRleEF0dHIpIHtcblx0XHRcdFx0XHRpbmRleEFyclswXSA9IGluZGV4QXR0ci5nZXRYKGkpO1xuXHRcdFx0XHRcdGluZGV4QXJyWzFdID0gaW5kZXhBdHRyLmdldFgoaSArIDEpO1xuXHRcdFx0XHRcdGluZGV4QXJyWzJdID0gaW5kZXhBdHRyLmdldFgoaSArIDIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGluZGV4QXJyWzBdID0gaTtcblx0XHRcdFx0XHRpbmRleEFyclsxXSA9IGkgKyAxO1xuXHRcdFx0XHRcdGluZGV4QXJyWzJdID0gaSArIDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0YSxcblx0XHRcdFx0XHRiLFxuXHRcdFx0XHRcdGNcblx0XHRcdFx0fSA9IF90cmlhbmdsZTtcblx0XHRcdFx0YS5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0ciwgaW5kZXhBcnJbMF0pO1xuXHRcdFx0XHRiLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyLCBpbmRleEFyclsxXSk7XG5cdFx0XHRcdGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHIsIGluZGV4QXJyWzJdKTtcblxuXHRcdFx0XHRfdHJpYW5nbGUuZ2V0Tm9ybWFsKF9ub3JtYWwpOyAvLyBjcmVhdGUgaGFzaGVzIGZvciB0aGUgZWRnZSBmcm9tIHRoZSB2ZXJ0aWNlc1xuXG5cblx0XHRcdFx0aGFzaGVzWzBdID0gYCR7TWF0aC5yb3VuZChhLnggKiBwcmVjaXNpb24pfSwke01hdGgucm91bmQoYS55ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGEueiAqIHByZWNpc2lvbil9YDtcblx0XHRcdFx0aGFzaGVzWzFdID0gYCR7TWF0aC5yb3VuZChiLnggKiBwcmVjaXNpb24pfSwke01hdGgucm91bmQoYi55ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGIueiAqIHByZWNpc2lvbil9YDtcblx0XHRcdFx0aGFzaGVzWzJdID0gYCR7TWF0aC5yb3VuZChjLnggKiBwcmVjaXNpb24pfSwke01hdGgucm91bmQoYy55ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGMueiAqIHByZWNpc2lvbil9YDsgLy8gc2tpcCBkZWdlbmVyYXRlIHRyaWFuZ2xlc1xuXG5cdFx0XHRcdGlmIChoYXNoZXNbMF0gPT09IGhhc2hlc1sxXSB8fCBoYXNoZXNbMV0gPT09IGhhc2hlc1syXSB8fCBoYXNoZXNbMl0gPT09IGhhc2hlc1swXSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9IC8vIGl0ZXJhdGUgb3ZlciBldmVyeSBlZGdlXG5cblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xuXHRcdFx0XHRcdC8vIGdldCB0aGUgZmlyc3QgYW5kIG5leHQgdmVydGV4IG1ha2luZyB1cCB0aGUgZWRnZVxuXHRcdFx0XHRcdGNvbnN0IGpOZXh0ID0gKGogKyAxKSAlIDM7XG5cdFx0XHRcdFx0Y29uc3QgdmVjSGFzaDAgPSBoYXNoZXNbal07XG5cdFx0XHRcdFx0Y29uc3QgdmVjSGFzaDEgPSBoYXNoZXNbak5leHRdO1xuXHRcdFx0XHRcdGNvbnN0IHYwID0gX3RyaWFuZ2xlW3ZlcnRLZXlzW2pdXTtcblx0XHRcdFx0XHRjb25zdCB2MSA9IF90cmlhbmdsZVt2ZXJ0S2V5c1tqTmV4dF1dO1xuXHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBgJHt2ZWNIYXNoMH1fJHt2ZWNIYXNoMX1gO1xuXHRcdFx0XHRcdGNvbnN0IHJldmVyc2VIYXNoID0gYCR7dmVjSGFzaDF9XyR7dmVjSGFzaDB9YDtcblxuXHRcdFx0XHRcdGlmIChyZXZlcnNlSGFzaCBpbiBlZGdlRGF0YSAmJiBlZGdlRGF0YVtyZXZlcnNlSGFzaF0pIHtcblx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIGEgc2libGluZyBlZGdlIGFkZCBpdCBpbnRvIHRoZSB2ZXJ0ZXggYXJyYXkgaWZcblx0XHRcdFx0XHRcdC8vIGl0IG1lZXRzIHRoZSBhbmdsZSB0aHJlc2hvbGQgYW5kIGRlbGV0ZSB0aGUgZWRnZSBmcm9tIHRoZSBtYXAuXG5cdFx0XHRcdFx0XHRpZiAoX25vcm1hbC5kb3QoZWRnZURhdGFbcmV2ZXJzZUhhc2hdLm5vcm1hbCkgPD0gdGhyZXNob2xkRG90KSB7XG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2godjAueCwgdjAueSwgdjAueik7XG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2godjEueCwgdjEueSwgdjEueik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGVkZ2VEYXRhW3JldmVyc2VIYXNoXSA9IG51bGw7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKGhhc2ggaW4gZWRnZURhdGEpKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBlZGdlIGhlcmUgdGhlbiBza2lwIGFkZGluZyBhIG5ldyBvbmVcblx0XHRcdFx0XHRcdGVkZ2VEYXRhW2hhc2hdID0ge1xuXHRcdFx0XHRcdFx0XHRpbmRleDA6IGluZGV4QXJyW2pdLFxuXHRcdFx0XHRcdFx0XHRpbmRleDE6IGluZGV4QXJyW2pOZXh0XSxcblx0XHRcdFx0XHRcdFx0bm9ybWFsOiBfbm9ybWFsLmNsb25lKClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGl0ZXJhdGUgb3ZlciBhbGwgcmVtYWluaW5nLCB1bm1hdGNoZWQgZWRnZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSB2ZXJ0ZXggYXJyYXlcblxuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBlZGdlRGF0YSkge1xuXHRcdFx0XHRpZiAoZWRnZURhdGFba2V5XSkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGluZGV4MCxcblx0XHRcdFx0XHRcdGluZGV4MVxuXHRcdFx0XHRcdH0gPSBlZGdlRGF0YVtrZXldO1xuXG5cdFx0XHRcdFx0X3YwLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyLCBpbmRleDApO1xuXG5cdFx0XHRcdFx0X3YxJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHIsIGluZGV4MSk7XG5cblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKF92MC54LCBfdjAueSwgX3YwLnopO1xuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goX3YxJDEueCwgX3YxJDEueSwgX3YxJDEueik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR9XG5cdH1cblxufVxuXG4vKipcbiAqIEV4dGVuc2libGUgY3VydmUgb2JqZWN0LlxuICpcbiAqIFNvbWUgY29tbW9uIG9mIGN1cnZlIG1ldGhvZHM6XG4gKiAuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICksIC5nZXRUYW5nZW50KCB0LCBvcHRpb25hbFRhcmdldCApXG4gKiAuZ2V0UG9pbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKSwgLmdldFRhbmdlbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKVxuICogLmdldFBvaW50cygpLCAuZ2V0U3BhY2VkUG9pbnRzKClcbiAqIC5nZXRMZW5ndGgoKVxuICogLnVwZGF0ZUFyY0xlbmd0aHMoKVxuICpcbiAqIFRoaXMgZm9sbG93aW5nIGN1cnZlcyBpbmhlcml0IGZyb20gVEhSRUUuQ3VydmU6XG4gKlxuICogLS0gMkQgY3VydmVzIC0tXG4gKiBUSFJFRS5BcmNDdXJ2ZVxuICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZVxuICogVEhSRUUuRWxsaXBzZUN1cnZlXG4gKiBUSFJFRS5MaW5lQ3VydmVcbiAqIFRIUkVFLlF1YWRyYXRpY0JlemllckN1cnZlXG4gKiBUSFJFRS5TcGxpbmVDdXJ2ZVxuICpcbiAqIC0tIDNEIGN1cnZlcyAtLVxuICogVEhSRUUuQ2F0bXVsbFJvbUN1cnZlM1xuICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZTNcbiAqIFRIUkVFLkxpbmVDdXJ2ZTNcbiAqIFRIUkVFLlF1YWRyYXRpY0JlemllckN1cnZlM1xuICpcbiAqIEEgc2VyaWVzIG9mIGN1cnZlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBUSFJFRS5DdXJ2ZVBhdGguXG4gKlxuICoqL1xuXG5jbGFzcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudHlwZSA9ICdDdXJ2ZSc7XG5cdFx0dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSAyMDA7XG5cdH0gLy8gVmlydHVhbCBiYXNlIGNsYXNzIG1ldGhvZCB0byBvdmVyd3JpdGUgYW5kIGltcGxlbWVudCBpbiBzdWJjbGFzc2VzXG5cdC8vXHQtIHQgWzAgLi4gMV1cblxuXG5cdGdldFBvaW50KCkge1xuXHRcdGNvbnNvbGUud2FybignVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4nKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSAvLyBHZXQgcG9pbnQgYXQgcmVsYXRpdmUgcG9zaXRpb24gaW4gY3VydmUgYWNjb3JkaW5nIHRvIGFyYyBsZW5ndGhcblx0Ly8gLSB1IFswIC4uIDFdXG5cblxuXHRnZXRQb2ludEF0KHUsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0Y29uc3QgdCA9IHRoaXMuZ2V0VXRvVG1hcHBpbmcodSk7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQpO1xuXHR9IC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnQoIHQgKVxuXG5cblx0Z2V0UG9pbnRzKGRpdmlzaW9ucyA9IDUpIHtcblx0XHRjb25zdCBwb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGQgPSAwOyBkIDw9IGRpdmlzaW9uczsgZCsrKSB7XG5cdFx0XHRwb2ludHMucHVzaCh0aGlzLmdldFBvaW50KGQgLyBkaXZpc2lvbnMpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXHR9IC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnRBdCggdSApXG5cblxuXHRnZXRTcGFjZWRQb2ludHMoZGl2aXNpb25zID0gNSkge1xuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkKyspIHtcblx0XHRcdHBvaW50cy5wdXNoKHRoaXMuZ2V0UG9pbnRBdChkIC8gZGl2aXNpb25zKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblx0fSAvLyBHZXQgdG90YWwgY3VydmUgYXJjIGxlbmd0aFxuXG5cblx0Z2V0TGVuZ3RoKCkge1xuXHRcdGNvbnN0IGxlbmd0aHMgPSB0aGlzLmdldExlbmd0aHMoKTtcblx0XHRyZXR1cm4gbGVuZ3Roc1tsZW5ndGhzLmxlbmd0aCAtIDFdO1xuXHR9IC8vIEdldCBsaXN0IG9mIGN1bXVsYXRpdmUgc2VnbWVudCBsZW5ndGhzXG5cblxuXHRnZXRMZW5ndGhzKGRpdmlzaW9ucyA9IHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKSB7XG5cdFx0aWYgKHRoaXMuY2FjaGVBcmNMZW5ndGhzICYmIHRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aCA9PT0gZGl2aXNpb25zICsgMSAmJiAhdGhpcy5uZWVkc1VwZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO1xuXHRcdH1cblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTtcblx0XHRjb25zdCBjYWNoZSA9IFtdO1xuXHRcdGxldCBjdXJyZW50LFxuXHRcdFx0XHRsYXN0ID0gdGhpcy5nZXRQb2ludCgwKTtcblx0XHRsZXQgc3VtID0gMDtcblx0XHRjYWNoZS5wdXNoKDApO1xuXG5cdFx0Zm9yIChsZXQgcCA9IDE7IHAgPD0gZGl2aXNpb25zOyBwKyspIHtcblx0XHRcdGN1cnJlbnQgPSB0aGlzLmdldFBvaW50KHAgLyBkaXZpc2lvbnMpO1xuXHRcdFx0c3VtICs9IGN1cnJlbnQuZGlzdGFuY2VUbyhsYXN0KTtcblx0XHRcdGNhY2hlLnB1c2goc3VtKTtcblx0XHRcdGxhc3QgPSBjdXJyZW50O1xuXHRcdH1cblxuXHRcdHRoaXMuY2FjaGVBcmNMZW5ndGhzID0gY2FjaGU7XG5cdFx0cmV0dXJuIGNhY2hlOyAvLyB7IHN1bXM6IGNhY2hlLCBzdW06IHN1bSB9OyBTdW0gaXMgaW4gdGhlIGxhc3QgZWxlbWVudC5cblx0fVxuXG5cdHVwZGF0ZUFyY0xlbmd0aHMoKSB7XG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5nZXRMZW5ndGhzKCk7XG5cdH0gLy8gR2l2ZW4gdSAoIDAgLi4gMSApLCBnZXQgYSB0IHRvIGZpbmQgcC4gVGhpcyBnaXZlcyB5b3UgcG9pbnRzIHdoaWNoIGFyZSBlcXVpZGlzdGFudFxuXG5cblx0Z2V0VXRvVG1hcHBpbmcodSwgZGlzdGFuY2UpIHtcblx0XHRjb25zdCBhcmNMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGlsID0gYXJjTGVuZ3Rocy5sZW5ndGg7XG5cdFx0bGV0IHRhcmdldEFyY0xlbmd0aDsgLy8gVGhlIHRhcmdldGVkIHUgZGlzdGFuY2UgdmFsdWUgdG8gZ2V0XG5cblx0XHRpZiAoZGlzdGFuY2UpIHtcblx0XHRcdHRhcmdldEFyY0xlbmd0aCA9IGRpc3RhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRBcmNMZW5ndGggPSB1ICogYXJjTGVuZ3Roc1tpbCAtIDFdO1xuXHRcdH0gLy8gYmluYXJ5IHNlYXJjaCBmb3IgdGhlIGluZGV4IHdpdGggbGFyZ2VzdCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGFyZ2V0IHUgZGlzdGFuY2VcblxuXG5cdFx0bGV0IGxvdyA9IDAsXG5cdFx0XHRcdGhpZ2ggPSBpbCAtIDEsXG5cdFx0XHRcdGNvbXBhcmlzb247XG5cblx0XHR3aGlsZSAobG93IDw9IGhpZ2gpIHtcblx0XHRcdGkgPSBNYXRoLmZsb29yKGxvdyArIChoaWdoIC0gbG93KSAvIDIpOyAvLyBsZXNzIGxpa2VseSB0byBvdmVyZmxvdywgdGhvdWdoIHByb2JhYmx5IG5vdCBpc3N1ZSBoZXJlLCBKUyBkb2Vzbid0IHJlYWxseSBoYXZlIGludGVnZXJzLCBhbGwgbnVtYmVycyBhcmUgZmxvYXRzXG5cblx0XHRcdGNvbXBhcmlzb24gPSBhcmNMZW5ndGhzW2ldIC0gdGFyZ2V0QXJjTGVuZ3RoO1xuXG5cdFx0XHRpZiAoY29tcGFyaXNvbiA8IDApIHtcblx0XHRcdFx0bG93ID0gaSArIDE7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7XG5cdFx0XHRcdGhpZ2ggPSBpIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhpZ2ggPSBpO1xuXHRcdFx0XHRicmVhazsgLy8gRE9ORVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGkgPSBoaWdoO1xuXG5cdFx0aWYgKGFyY0xlbmd0aHNbaV0gPT09IHRhcmdldEFyY0xlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGkgLyAoaWwgLSAxKTtcblx0XHR9IC8vIHdlIGNvdWxkIGdldCBmaW5lciBncmFpbiBhdCBsZW5ndGhzLCBvciB1c2Ugc2ltcGxlIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcG9pbnRzXG5cblxuXHRcdGNvbnN0IGxlbmd0aEJlZm9yZSA9IGFyY0xlbmd0aHNbaV07XG5cdFx0Y29uc3QgbGVuZ3RoQWZ0ZXIgPSBhcmNMZW5ndGhzW2kgKyAxXTtcblx0XHRjb25zdCBzZWdtZW50TGVuZ3RoID0gbGVuZ3RoQWZ0ZXIgLSBsZW5ndGhCZWZvcmU7IC8vIGRldGVybWluZSB3aGVyZSB3ZSBhcmUgYmV0d2VlbiB0aGUgJ2JlZm9yZScgYW5kICdhZnRlcicgcG9pbnRzXG5cblx0XHRjb25zdCBzZWdtZW50RnJhY3Rpb24gPSAodGFyZ2V0QXJjTGVuZ3RoIC0gbGVuZ3RoQmVmb3JlKSAvIHNlZ21lbnRMZW5ndGg7IC8vIGFkZCB0aGF0IGZyYWN0aW9uYWwgYW1vdW50IHRvIHRcblxuXHRcdGNvbnN0IHQgPSAoaSArIHNlZ21lbnRGcmFjdGlvbikgLyAoaWwgLSAxKTtcblx0XHRyZXR1cm4gdDtcblx0fSAvLyBSZXR1cm5zIGEgdW5pdCB2ZWN0b3IgdGFuZ2VudCBhdCB0XG5cdC8vIEluIGNhc2UgYW55IHN1YiBjdXJ2ZSBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIHRhbmdlbnQgZGVyaXZhdGlvbixcblx0Ly8gMiBwb2ludHMgYSBzbWFsbCBkZWx0YSBhcGFydCB3aWxsIGJlIHVzZWQgdG8gZmluZCBpdHMgZ3JhZGllbnRcblx0Ly8gd2hpY2ggc2VlbXMgdG8gZ2l2ZSBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvblxuXG5cblx0Z2V0VGFuZ2VudCh0LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IGRlbHRhID0gMC4wMDAxO1xuXHRcdGxldCB0MSA9IHQgLSBkZWx0YTtcblx0XHRsZXQgdDIgPSB0ICsgZGVsdGE7IC8vIENhcHBpbmcgaW4gY2FzZSBvZiBkYW5nZXJcblxuXHRcdGlmICh0MSA8IDApIHQxID0gMDtcblx0XHRpZiAodDIgPiAxKSB0MiA9IDE7XG5cdFx0Y29uc3QgcHQxID0gdGhpcy5nZXRQb2ludCh0MSk7XG5cdFx0Y29uc3QgcHQyID0gdGhpcy5nZXRQb2ludCh0Mik7XG5cdFx0Y29uc3QgdGFuZ2VudCA9IG9wdGlvbmFsVGFyZ2V0IHx8IChwdDEuaXNWZWN0b3IyID8gbmV3IFZlY3RvcjIoKSA6IG5ldyBWZWN0b3IzKCkpO1xuXHRcdHRhbmdlbnQuY29weShwdDIpLnN1YihwdDEpLm5vcm1hbGl6ZSgpO1xuXHRcdHJldHVybiB0YW5nZW50O1xuXHR9XG5cblx0Z2V0VGFuZ2VudEF0KHUsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0Y29uc3QgdCA9IHRoaXMuZ2V0VXRvVG1hcHBpbmcodSk7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudCh0LCBvcHRpb25hbFRhcmdldCk7XG5cdH1cblxuXHRjb21wdXRlRnJlbmV0RnJhbWVzKHNlZ21lbnRzLCBjbG9zZWQpIHtcblx0XHQvLyBzZWUgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9wdWIvdGVjaHJlcG9ydHMvVFI0MjUucGRmXG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB0YW5nZW50cyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCBiaW5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG1hdCA9IG5ldyBNYXRyaXg0KCk7IC8vIGNvbXB1dGUgdGhlIHRhbmdlbnQgdmVjdG9ycyBmb3IgZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHRcdFx0Y29uc3QgdSA9IGkgLyBzZWdtZW50cztcblx0XHRcdHRhbmdlbnRzW2ldID0gdGhpcy5nZXRUYW5nZW50QXQodSwgbmV3IFZlY3RvcjMoKSk7XG5cdFx0fSAvLyBzZWxlY3QgYW4gaW5pdGlhbCBub3JtYWwgdmVjdG9yIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGZpcnN0IHRhbmdlbnQgdmVjdG9yLFxuXHRcdC8vIGFuZCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtaW5pbXVtIHRhbmdlbnQgeHl6IGNvbXBvbmVudFxuXG5cblx0XHRub3JtYWxzWzBdID0gbmV3IFZlY3RvcjMoKTtcblx0XHRiaW5vcm1hbHNbMF0gPSBuZXcgVmVjdG9yMygpO1xuXHRcdGxldCBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXHRcdGNvbnN0IHR4ID0gTWF0aC5hYnModGFuZ2VudHNbMF0ueCk7XG5cdFx0Y29uc3QgdHkgPSBNYXRoLmFicyh0YW5nZW50c1swXS55KTtcblx0XHRjb25zdCB0eiA9IE1hdGguYWJzKHRhbmdlbnRzWzBdLnopO1xuXG5cdFx0aWYgKHR4IDw9IG1pbikge1xuXHRcdFx0bWluID0gdHg7XG5cdFx0XHRub3JtYWwuc2V0KDEsIDAsIDApO1xuXHRcdH1cblxuXHRcdGlmICh0eSA8PSBtaW4pIHtcblx0XHRcdG1pbiA9IHR5O1xuXHRcdFx0bm9ybWFsLnNldCgwLCAxLCAwKTtcblx0XHR9XG5cblx0XHRpZiAodHogPD0gbWluKSB7XG5cdFx0XHRub3JtYWwuc2V0KDAsIDAsIDEpO1xuXHRcdH1cblxuXHRcdHZlYy5jcm9zc1ZlY3RvcnModGFuZ2VudHNbMF0sIG5vcm1hbCkubm9ybWFsaXplKCk7XG5cdFx0bm9ybWFsc1swXS5jcm9zc1ZlY3RvcnModGFuZ2VudHNbMF0sIHZlYyk7XG5cdFx0Ymlub3JtYWxzWzBdLmNyb3NzVmVjdG9ycyh0YW5nZW50c1swXSwgbm9ybWFsc1swXSk7IC8vIGNvbXB1dGUgdGhlIHNsb3dseS12YXJ5aW5nIG5vcm1hbCBhbmQgYmlub3JtYWwgdmVjdG9ycyBmb3IgZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZVxuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHRcdFx0bm9ybWFsc1tpXSA9IG5vcm1hbHNbaSAtIDFdLmNsb25lKCk7XG5cdFx0XHRiaW5vcm1hbHNbaV0gPSBiaW5vcm1hbHNbaSAtIDFdLmNsb25lKCk7XG5cdFx0XHR2ZWMuY3Jvc3NWZWN0b3JzKHRhbmdlbnRzW2kgLSAxXSwgdGFuZ2VudHNbaV0pO1xuXG5cdFx0XHRpZiAodmVjLmxlbmd0aCgpID4gTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdFx0dmVjLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRjb25zdCB0aGV0YSA9IE1hdGguYWNvcyhjbGFtcCh0YW5nZW50c1tpIC0gMV0uZG90KHRhbmdlbnRzW2ldKSwgLTEsIDEpKTsgLy8gY2xhbXAgZm9yIGZsb2F0aW5nIHB0IGVycm9yc1xuXG5cdFx0XHRcdG5vcm1hbHNbaV0uYXBwbHlNYXRyaXg0KG1hdC5tYWtlUm90YXRpb25BeGlzKHZlYywgdGhldGEpKTtcblx0XHRcdH1cblxuXHRcdFx0Ymlub3JtYWxzW2ldLmNyb3NzVmVjdG9ycyh0YW5nZW50c1tpXSwgbm9ybWFsc1tpXSk7XG5cdFx0fSAvLyBpZiB0aGUgY3VydmUgaXMgY2xvc2VkLCBwb3N0cHJvY2VzcyB0aGUgdmVjdG9ycyBzbyB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9ybWFsIHZlY3RvcnMgYXJlIHRoZSBzYW1lXG5cblxuXHRcdGlmIChjbG9zZWQgPT09IHRydWUpIHtcblx0XHRcdGxldCB0aGV0YSA9IE1hdGguYWNvcyhjbGFtcChub3JtYWxzWzBdLmRvdChub3JtYWxzW3NlZ21lbnRzXSksIC0xLCAxKSk7XG5cdFx0XHR0aGV0YSAvPSBzZWdtZW50cztcblxuXHRcdFx0aWYgKHRhbmdlbnRzWzBdLmRvdCh2ZWMuY3Jvc3NWZWN0b3JzKG5vcm1hbHNbMF0sIG5vcm1hbHNbc2VnbWVudHNdKSkgPiAwKSB7XG5cdFx0XHRcdHRoZXRhID0gLXRoZXRhO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdFx0XHRcdC8vIHR3aXN0IGEgbGl0dGxlLi4uXG5cdFx0XHRcdG5vcm1hbHNbaV0uYXBwbHlNYXRyaXg0KG1hdC5tYWtlUm90YXRpb25BeGlzKHRhbmdlbnRzW2ldLCB0aGV0YSAqIGkpKTtcblx0XHRcdFx0Ymlub3JtYWxzW2ldLmNyb3NzVmVjdG9ycyh0YW5nZW50c1tpXSwgbm9ybWFsc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhbmdlbnRzOiB0YW5nZW50cyxcblx0XHRcdG5vcm1hbHM6IG5vcm1hbHMsXG5cdFx0XHRiaW5vcm1hbHM6IGJpbm9ybWFsc1xuXHRcdH07XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IHNvdXJjZS5hcmNMZW5ndGhEaXZpc2lvbnM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ0N1cnZlJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnQ3VydmUudG9KU09OJ1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0ZGF0YS5hcmNMZW5ndGhEaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucztcblx0XHRkYXRhLnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSBqc29uLmFyY0xlbmd0aERpdmlzaW9ucztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIEVsbGlwc2VDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IoYVggPSAwLCBhWSA9IDAsIHhSYWRpdXMgPSAxLCB5UmFkaXVzID0gMSwgYVN0YXJ0QW5nbGUgPSAwLCBhRW5kQW5nbGUgPSBNYXRoLlBJICogMiwgYUNsb2Nrd2lzZSA9IGZhbHNlLCBhUm90YXRpb24gPSAwKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnRWxsaXBzZUN1cnZlJztcblx0XHR0aGlzLmFYID0gYVg7XG5cdFx0dGhpcy5hWSA9IGFZO1xuXHRcdHRoaXMueFJhZGl1cyA9IHhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0geVJhZGl1cztcblx0XHR0aGlzLmFTdGFydEFuZ2xlID0gYVN0YXJ0QW5nbGU7XG5cdFx0dGhpcy5hRW5kQW5nbGUgPSBhRW5kQW5nbGU7XG5cdFx0dGhpcy5hQ2xvY2t3aXNlID0gYUNsb2Nrd2lzZTtcblx0XHR0aGlzLmFSb3RhdGlvbiA9IGFSb3RhdGlvbjtcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IHR3b1BpID0gTWF0aC5QSSAqIDI7XG5cdFx0bGV0IGRlbHRhQW5nbGUgPSB0aGlzLmFFbmRBbmdsZSAtIHRoaXMuYVN0YXJ0QW5nbGU7XG5cdFx0Y29uc3Qgc2FtZVBvaW50cyA9IE1hdGguYWJzKGRlbHRhQW5nbGUpIDwgTnVtYmVyLkVQU0lMT047IC8vIGVuc3VyZXMgdGhhdCBkZWx0YUFuZ2xlIGlzIDAgLi4gMiBQSVxuXG5cdFx0d2hpbGUgKGRlbHRhQW5nbGUgPCAwKSBkZWx0YUFuZ2xlICs9IHR3b1BpO1xuXG5cdFx0d2hpbGUgKGRlbHRhQW5nbGUgPiB0d29QaSkgZGVsdGFBbmdsZSAtPSB0d29QaTtcblxuXHRcdGlmIChkZWx0YUFuZ2xlIDwgTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdGlmIChzYW1lUG9pbnRzKSB7XG5cdFx0XHRcdGRlbHRhQW5nbGUgPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsdGFBbmdsZSA9IHR3b1BpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLmFDbG9ja3dpc2UgPT09IHRydWUgJiYgIXNhbWVQb2ludHMpIHtcblx0XHRcdGlmIChkZWx0YUFuZ2xlID09PSB0d29QaSkge1xuXHRcdFx0XHRkZWx0YUFuZ2xlID0gLXR3b1BpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsdGFBbmdsZSA9IGRlbHRhQW5nbGUgLSB0d29QaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBhbmdsZSA9IHRoaXMuYVN0YXJ0QW5nbGUgKyB0ICogZGVsdGFBbmdsZTtcblx0XHRsZXQgeCA9IHRoaXMuYVggKyB0aGlzLnhSYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG5cdFx0bGV0IHkgPSB0aGlzLmFZICsgdGhpcy55UmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuXG5cdFx0aWYgKHRoaXMuYVJvdGF0aW9uICE9PSAwKSB7XG5cdFx0XHRjb25zdCBjb3MgPSBNYXRoLmNvcyh0aGlzLmFSb3RhdGlvbik7XG5cdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbih0aGlzLmFSb3RhdGlvbik7XG5cdFx0XHRjb25zdCB0eCA9IHggLSB0aGlzLmFYO1xuXHRcdFx0Y29uc3QgdHkgPSB5IC0gdGhpcy5hWTsgLy8gUm90YXRlIHRoZSBwb2ludCBhYm91dCB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxuXG5cdFx0XHR4ID0gdHggKiBjb3MgLSB0eSAqIHNpbiArIHRoaXMuYVg7XG5cdFx0XHR5ID0gdHggKiBzaW4gKyB0eSAqIGNvcyArIHRoaXMuYVk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50LnNldCh4LCB5KTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuYVggPSBzb3VyY2UuYVg7XG5cdFx0dGhpcy5hWSA9IHNvdXJjZS5hWTtcblx0XHR0aGlzLnhSYWRpdXMgPSBzb3VyY2UueFJhZGl1cztcblx0XHR0aGlzLnlSYWRpdXMgPSBzb3VyY2UueVJhZGl1cztcblx0XHR0aGlzLmFTdGFydEFuZ2xlID0gc291cmNlLmFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0gc291cmNlLmFFbmRBbmdsZTtcblx0XHR0aGlzLmFDbG9ja3dpc2UgPSBzb3VyY2UuYUNsb2Nrd2lzZTtcblx0XHR0aGlzLmFSb3RhdGlvbiA9IHNvdXJjZS5hUm90YXRpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEuYVggPSB0aGlzLmFYO1xuXHRcdGRhdGEuYVkgPSB0aGlzLmFZO1xuXHRcdGRhdGEueFJhZGl1cyA9IHRoaXMueFJhZGl1cztcblx0XHRkYXRhLnlSYWRpdXMgPSB0aGlzLnlSYWRpdXM7XG5cdFx0ZGF0YS5hU3RhcnRBbmdsZSA9IHRoaXMuYVN0YXJ0QW5nbGU7XG5cdFx0ZGF0YS5hRW5kQW5nbGUgPSB0aGlzLmFFbmRBbmdsZTtcblx0XHRkYXRhLmFDbG9ja3dpc2UgPSB0aGlzLmFDbG9ja3dpc2U7XG5cdFx0ZGF0YS5hUm90YXRpb24gPSB0aGlzLmFSb3RhdGlvbjtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLmFYID0ganNvbi5hWDtcblx0XHR0aGlzLmFZID0ganNvbi5hWTtcblx0XHR0aGlzLnhSYWRpdXMgPSBqc29uLnhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0ganNvbi55UmFkaXVzO1xuXHRcdHRoaXMuYVN0YXJ0QW5nbGUgPSBqc29uLmFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0ganNvbi5hRW5kQW5nbGU7XG5cdFx0dGhpcy5hQ2xvY2t3aXNlID0ganNvbi5hQ2xvY2t3aXNlO1xuXHRcdHRoaXMuYVJvdGF0aW9uID0ganNvbi5hUm90YXRpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5FbGxpcHNlQ3VydmUucHJvdG90eXBlLmlzRWxsaXBzZUN1cnZlID0gdHJ1ZTtcblxuY2xhc3MgQXJjQ3VydmUgZXh0ZW5kcyBFbGxpcHNlQ3VydmUge1xuXHRjb25zdHJ1Y3RvcihhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpIHtcblx0XHRzdXBlcihhWCwgYVksIGFSYWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpO1xuXHRcdHRoaXMudHlwZSA9ICdBcmNDdXJ2ZSc7XG5cdH1cblxufVxuXG5BcmNDdXJ2ZS5wcm90b3R5cGUuaXNBcmNDdXJ2ZSA9IHRydWU7XG5cbi8qKlxuICogQ2VudHJpcGV0YWwgQ2F0bXVsbFJvbSBDdXJ2ZSAtIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYXZvaWRpbmdcbiAqIGN1c3BzIGFuZCBzZWxmLWludGVyc2VjdGlvbnMgaW4gbm9uLXVuaWZvcm0gY2F0bXVsbCByb20gY3VydmVzLlxuICogaHR0cDovL3d3dy5jZW15dWtzZWwuY29tL3Jlc2VhcmNoL2NhdG11bGxyb21fcGFyYW0vY2F0bXVsbHJvbS5wZGZcbiAqXG4gKiBjdXJ2ZS50eXBlIGFjY2VwdHMgY2VudHJpcGV0YWwoZGVmYXVsdCksIGNob3JkYWwgYW5kIGNhdG11bGxyb21cbiAqIGN1cnZlLnRlbnNpb24gaXMgdXNlZCBmb3IgY2F0bXVsbHJvbSB3aGljaCBkZWZhdWx0cyB0byAwLjVcbiAqL1xuXG4vKlxuQmFzZWQgb24gYW4gb3B0aW1pemVkIGMrKyBzb2x1dGlvbiBpblxuIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NDg5NzM2L2NhdG11bGwtcm9tLWN1cnZlLXdpdGgtbm8tY3VzcHMtYW5kLW5vLXNlbGYtaW50ZXJzZWN0aW9ucy9cbiAtIGh0dHA6Ly9pZGVvbmUuY29tL05vRWJWTVxuXG5UaGlzIEN1YmljUG9seSBjbGFzcyBjb3VsZCBiZSB1c2VkIGZvciByZXVzaW5nIHNvbWUgdmFyaWFibGVzIGFuZCBjYWxjdWxhdGlvbnMsXG5idXQgZm9yIHRocmVlLmpzIGN1cnZlIHVzZSwgaXQgY291bGQgYmUgcG9zc2libGUgaW5saW5lZCBhbmQgZmxhdHRlbiBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGxcbndoaWNoIGNhbiBiZSBwbGFjZWQgaW4gQ3VydmVVdGlscy5cbiovXG5cbmZ1bmN0aW9uIEN1YmljUG9seSgpIHtcblx0bGV0IGMwID0gMCxcblx0XHRcdGMxID0gMCxcblx0XHRcdGMyID0gMCxcblx0XHRcdGMzID0gMDtcblx0Lypcblx0ICogQ29tcHV0ZSBjb2VmZmljaWVudHMgZm9yIGEgY3ViaWMgcG9seW5vbWlhbFxuXHQgKlx0IHAocykgPSBjMCArIGMxKnMgKyBjMipzXjIgKyBjMypzXjNcblx0ICogc3VjaCB0aGF0XG5cdCAqXHQgcCgwKSA9IHgwLCBwKDEpID0geDFcblx0ICpcdGFuZFxuXHQgKlx0IHAnKDApID0gdDAsIHAnKDEpID0gdDEuXG5cdCAqL1xuXG5cdGZ1bmN0aW9uIGluaXQoeDAsIHgxLCB0MCwgdDEpIHtcblx0XHRjMCA9IHgwO1xuXHRcdGMxID0gdDA7XG5cdFx0YzIgPSAtMyAqIHgwICsgMyAqIHgxIC0gMiAqIHQwIC0gdDE7XG5cdFx0YzMgPSAyICogeDAgLSAyICogeDEgKyB0MCArIHQxO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpbml0Q2F0bXVsbFJvbTogZnVuY3Rpb24gKHgwLCB4MSwgeDIsIHgzLCB0ZW5zaW9uKSB7XG5cdFx0XHRpbml0KHgxLCB4MiwgdGVuc2lvbiAqICh4MiAtIHgwKSwgdGVuc2lvbiAqICh4MyAtIHgxKSk7XG5cdFx0fSxcblx0XHRpbml0Tm9udW5pZm9ybUNhdG11bGxSb206IGZ1bmN0aW9uICh4MCwgeDEsIHgyLCB4MywgZHQwLCBkdDEsIGR0Mikge1xuXHRcdFx0Ly8gY29tcHV0ZSB0YW5nZW50cyB3aGVuIHBhcmFtZXRlcml6ZWQgaW4gW3QxLHQyXVxuXHRcdFx0bGV0IHQxID0gKHgxIC0geDApIC8gZHQwIC0gKHgyIC0geDApIC8gKGR0MCArIGR0MSkgKyAoeDIgLSB4MSkgLyBkdDE7XG5cdFx0XHRsZXQgdDIgPSAoeDIgLSB4MSkgLyBkdDEgLSAoeDMgLSB4MSkgLyAoZHQxICsgZHQyKSArICh4MyAtIHgyKSAvIGR0MjsgLy8gcmVzY2FsZSB0YW5nZW50cyBmb3IgcGFyYW1ldHJpemF0aW9uIGluIFswLDFdXG5cblx0XHRcdHQxICo9IGR0MTtcblx0XHRcdHQyICo9IGR0MTtcblx0XHRcdGluaXQoeDEsIHgyLCB0MSwgdDIpO1xuXHRcdH0sXG5cdFx0Y2FsYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdGNvbnN0IHQyID0gdCAqIHQ7XG5cdFx0XHRjb25zdCB0MyA9IHQyICogdDtcblx0XHRcdHJldHVybiBjMCArIGMxICogdCArIGMyICogdDIgKyBjMyAqIHQzO1xuXHRcdH1cblx0fTtcbn0gLy9cblxuXG5jb25zdCB0bXAgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgcHggPSBuZXcgQ3ViaWNQb2x5KCksXG5cdFx0XHRweSA9IG5ldyBDdWJpY1BvbHkoKSxcblx0XHRcdHB6ID0gbmV3IEN1YmljUG9seSgpO1xuXG5jbGFzcyBDYXRtdWxsUm9tQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3Rvcihwb2ludHMgPSBbXSwgY2xvc2VkID0gZmFsc2UsIGN1cnZlVHlwZSA9ICdjZW50cmlwZXRhbCcsIHRlbnNpb24gPSAwLjUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDYXRtdWxsUm9tQ3VydmUzJztcblx0XHR0aGlzLnBvaW50cyA9IHBvaW50cztcblx0XHR0aGlzLmNsb3NlZCA9IGNsb3NlZDtcblx0XHR0aGlzLmN1cnZlVHlwZSA9IGN1cnZlVHlwZTtcblx0XHR0aGlzLnRlbnNpb24gPSB0ZW5zaW9uO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcblx0XHRjb25zdCBsID0gcG9pbnRzLmxlbmd0aDtcblx0XHRjb25zdCBwID0gKGwgLSAodGhpcy5jbG9zZWQgPyAwIDogMSkpICogdDtcblx0XHRsZXQgaW50UG9pbnQgPSBNYXRoLmZsb29yKHApO1xuXHRcdGxldCB3ZWlnaHQgPSBwIC0gaW50UG9pbnQ7XG5cblx0XHRpZiAodGhpcy5jbG9zZWQpIHtcblx0XHRcdGludFBvaW50ICs9IGludFBvaW50ID4gMCA/IDAgOiAoTWF0aC5mbG9vcihNYXRoLmFicyhpbnRQb2ludCkgLyBsKSArIDEpICogbDtcblx0XHR9IGVsc2UgaWYgKHdlaWdodCA9PT0gMCAmJiBpbnRQb2ludCA9PT0gbCAtIDEpIHtcblx0XHRcdGludFBvaW50ID0gbCAtIDI7XG5cdFx0XHR3ZWlnaHQgPSAxO1xuXHRcdH1cblxuXHRcdGxldCBwMCwgcDM7IC8vIDQgcG9pbnRzIChwMSAmIHAyIGRlZmluZWQgYmVsb3cpXG5cblx0XHRpZiAodGhpcy5jbG9zZWQgfHwgaW50UG9pbnQgPiAwKSB7XG5cdFx0XHRwMCA9IHBvaW50c1soaW50UG9pbnQgLSAxKSAlIGxdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBleHRyYXBvbGF0ZSBmaXJzdCBwb2ludFxuXHRcdFx0dG1wLnN1YlZlY3RvcnMocG9pbnRzWzBdLCBwb2ludHNbMV0pLmFkZChwb2ludHNbMF0pO1xuXHRcdFx0cDAgPSB0bXA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcDEgPSBwb2ludHNbaW50UG9pbnQgJSBsXTtcblx0XHRjb25zdCBwMiA9IHBvaW50c1soaW50UG9pbnQgKyAxKSAlIGxdO1xuXG5cdFx0aWYgKHRoaXMuY2xvc2VkIHx8IGludFBvaW50ICsgMiA8IGwpIHtcblx0XHRcdHAzID0gcG9pbnRzWyhpbnRQb2ludCArIDIpICUgbF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGV4dHJhcG9sYXRlIGxhc3QgcG9pbnRcblx0XHRcdHRtcC5zdWJWZWN0b3JzKHBvaW50c1tsIC0gMV0sIHBvaW50c1tsIC0gMl0pLmFkZChwb2ludHNbbCAtIDFdKTtcblx0XHRcdHAzID0gdG1wO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmN1cnZlVHlwZSA9PT0gJ2NlbnRyaXBldGFsJyB8fCB0aGlzLmN1cnZlVHlwZSA9PT0gJ2Nob3JkYWwnKSB7XG5cdFx0XHQvLyBpbml0IENlbnRyaXBldGFsIC8gQ2hvcmRhbCBDYXRtdWxsLVJvbVxuXHRcdFx0Y29uc3QgcG93ID0gdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyA/IDAuNSA6IDAuMjU7XG5cdFx0XHRsZXQgZHQwID0gTWF0aC5wb3cocDAuZGlzdGFuY2VUb1NxdWFyZWQocDEpLCBwb3cpO1xuXHRcdFx0bGV0IGR0MSA9IE1hdGgucG93KHAxLmRpc3RhbmNlVG9TcXVhcmVkKHAyKSwgcG93KTtcblx0XHRcdGxldCBkdDIgPSBNYXRoLnBvdyhwMi5kaXN0YW5jZVRvU3F1YXJlZChwMyksIHBvdyk7IC8vIHNhZmV0eSBjaGVjayBmb3IgcmVwZWF0ZWQgcG9pbnRzXG5cblx0XHRcdGlmIChkdDEgPCAxZS00KSBkdDEgPSAxLjA7XG5cdFx0XHRpZiAoZHQwIDwgMWUtNCkgZHQwID0gZHQxO1xuXHRcdFx0aWYgKGR0MiA8IDFlLTQpIGR0MiA9IGR0MTtcblx0XHRcdHB4LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShwMC54LCBwMS54LCBwMi54LCBwMy54LCBkdDAsIGR0MSwgZHQyKTtcblx0XHRcdHB5LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShwMC55LCBwMS55LCBwMi55LCBwMy55LCBkdDAsIGR0MSwgZHQyKTtcblx0XHRcdHB6LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShwMC56LCBwMS56LCBwMi56LCBwMy56LCBkdDAsIGR0MSwgZHQyKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY3VydmVUeXBlID09PSAnY2F0bXVsbHJvbScpIHtcblx0XHRcdHB4LmluaXRDYXRtdWxsUm9tKHAwLngsIHAxLngsIHAyLngsIHAzLngsIHRoaXMudGVuc2lvbik7XG5cdFx0XHRweS5pbml0Q2F0bXVsbFJvbShwMC55LCBwMS55LCBwMi55LCBwMy55LCB0aGlzLnRlbnNpb24pO1xuXHRcdFx0cHouaW5pdENhdG11bGxSb20ocDAueiwgcDEueiwgcDIueiwgcDMueiwgdGhpcy50ZW5zaW9uKTtcblx0XHR9XG5cblx0XHRwb2ludC5zZXQocHguY2FsYyh3ZWlnaHQpLCBweS5jYWxjKHdlaWdodCksIHB6LmNhbGMod2VpZ2h0KSk7XG5cdFx0cmV0dXJuIHBvaW50O1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc291cmNlLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHBvaW50ID0gc291cmNlLnBvaW50c1tpXTtcblx0XHRcdHRoaXMucG9pbnRzLnB1c2gocG9pbnQuY2xvbmUoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jbG9zZWQgPSBzb3VyY2UuY2xvc2VkO1xuXHRcdHRoaXMuY3VydmVUeXBlID0gc291cmNlLmN1cnZlVHlwZTtcblx0XHR0aGlzLnRlbnNpb24gPSBzb3VyY2UudGVuc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwb2ludCA9IHRoaXMucG9pbnRzW2ldO1xuXHRcdFx0ZGF0YS5wb2ludHMucHVzaChwb2ludC50b0FycmF5KCkpO1xuXHRcdH1cblxuXHRcdGRhdGEuY2xvc2VkID0gdGhpcy5jbG9zZWQ7XG5cdFx0ZGF0YS5jdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlVHlwZTtcblx0XHRkYXRhLnRlbnNpb24gPSB0aGlzLnRlbnNpb247XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0ganNvbi5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwb2ludCA9IGpzb24ucG9pbnRzW2ldO1xuXHRcdFx0dGhpcy5wb2ludHMucHVzaChuZXcgVmVjdG9yMygpLmZyb21BcnJheShwb2ludCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xvc2VkID0ganNvbi5jbG9zZWQ7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSBqc29uLmN1cnZlVHlwZTtcblx0XHR0aGlzLnRlbnNpb24gPSBqc29uLnRlbnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5DYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTMgPSB0cnVlO1xuXG4vKipcbiAqIEJlemllciBDdXJ2ZXMgZm9ybXVsYXMgb2J0YWluZWQgZnJvbVxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQiVDMyVBOXppZXJfY3VydmVcbiAqL1xuZnVuY3Rpb24gQ2F0bXVsbFJvbSh0LCBwMCwgcDEsIHAyLCBwMykge1xuXHRjb25zdCB2MCA9IChwMiAtIHAwKSAqIDAuNTtcblx0Y29uc3QgdjEgPSAocDMgLSBwMSkgKiAwLjU7XG5cdGNvbnN0IHQyID0gdCAqIHQ7XG5cdGNvbnN0IHQzID0gdCAqIHQyO1xuXHRyZXR1cm4gKDIgKiBwMSAtIDIgKiBwMiArIHYwICsgdjEpICogdDMgKyAoLTMgKiBwMSArIDMgKiBwMiAtIDIgKiB2MCAtIHYxKSAqIHQyICsgdjAgKiB0ICsgcDE7XG59IC8vXG5cblxuZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyUDAodCwgcCkge1xuXHRjb25zdCBrID0gMSAtIHQ7XG5cdHJldHVybiBrICogayAqIHA7XG59XG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAxKHQsIHApIHtcblx0cmV0dXJuIDIgKiAoMSAtIHQpICogdCAqIHA7XG59XG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAyKHQsIHApIHtcblx0cmV0dXJuIHQgKiB0ICogcDtcbn1cblxuZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyKHQsIHAwLCBwMSwgcDIpIHtcblx0cmV0dXJuIFF1YWRyYXRpY0JlemllclAwKHQsIHAwKSArIFF1YWRyYXRpY0JlemllclAxKHQsIHAxKSArIFF1YWRyYXRpY0JlemllclAyKHQsIHAyKTtcbn0gLy9cblxuXG5mdW5jdGlvbiBDdWJpY0JlemllclAwKHQsIHApIHtcblx0Y29uc3QgayA9IDEgLSB0O1xuXHRyZXR1cm4gayAqIGsgKiBrICogcDtcbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMSh0LCBwKSB7XG5cdGNvbnN0IGsgPSAxIC0gdDtcblx0cmV0dXJuIDMgKiBrICogayAqIHQgKiBwO1xufVxuXG5mdW5jdGlvbiBDdWJpY0JlemllclAyKHQsIHApIHtcblx0cmV0dXJuIDMgKiAoMSAtIHQpICogdCAqIHQgKiBwO1xufVxuXG5mdW5jdGlvbiBDdWJpY0JlemllclAzKHQsIHApIHtcblx0cmV0dXJuIHQgKiB0ICogdCAqIHA7XG59XG5cbmZ1bmN0aW9uIEN1YmljQmV6aWVyKHQsIHAwLCBwMSwgcDIsIHAzKSB7XG5cdHJldHVybiBDdWJpY0JlemllclAwKHQsIHAwKSArIEN1YmljQmV6aWVyUDEodCwgcDEpICsgQ3ViaWNCZXppZXJQMih0LCBwMikgKyBDdWJpY0JlemllclAzKHQsIHAzKTtcbn1cblxuY2xhc3MgQ3ViaWNCZXppZXJDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IodjAgPSBuZXcgVmVjdG9yMigpLCB2MSA9IG5ldyBWZWN0b3IyKCksIHYyID0gbmV3IFZlY3RvcjIoKSwgdjMgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2ZSc7XG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdFx0dGhpcy52MyA9IHYzO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblx0XHRjb25zdCB2MCA9IHRoaXMudjAsXG5cdFx0XHRcdFx0djEgPSB0aGlzLnYxLFxuXHRcdFx0XHRcdHYyID0gdGhpcy52Mixcblx0XHRcdFx0XHR2MyA9IHRoaXMudjM7XG5cdFx0cG9pbnQuc2V0KEN1YmljQmV6aWVyKHQsIHYwLngsIHYxLngsIHYyLngsIHYzLngpLCBDdWJpY0Jlemllcih0LCB2MC55LCB2MS55LCB2Mi55LCB2My55KSk7XG5cdFx0cmV0dXJuIHBvaW50O1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy52MC5jb3B5KHNvdXJjZS52MCk7XG5cdFx0dGhpcy52MS5jb3B5KHNvdXJjZS52MSk7XG5cdFx0dGhpcy52Mi5jb3B5KHNvdXJjZS52Mik7XG5cdFx0dGhpcy52My5jb3B5KHNvdXJjZS52Myk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEudjAgPSB0aGlzLnYwLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7XG5cdFx0ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpO1xuXHRcdGRhdGEudjMgPSB0aGlzLnYzLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnYwLmZyb21BcnJheShqc29uLnYwKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheShqc29uLnYxKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheShqc29uLnYyKTtcblx0XHR0aGlzLnYzLmZyb21BcnJheShqc29uLnYzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbkN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZSA9IHRydWU7XG5cbmNsYXNzIEN1YmljQmV6aWVyQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3Rvcih2MCA9IG5ldyBWZWN0b3IzKCksIHYxID0gbmV3IFZlY3RvcjMoKSwgdjIgPSBuZXcgVmVjdG9yMygpLCB2MyA9IG5ldyBWZWN0b3IzKCkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDdWJpY0JlemllckN1cnZlMyc7XG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdFx0dGhpcy52MyA9IHYzO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblx0XHRjb25zdCB2MCA9IHRoaXMudjAsXG5cdFx0XHRcdFx0djEgPSB0aGlzLnYxLFxuXHRcdFx0XHRcdHYyID0gdGhpcy52Mixcblx0XHRcdFx0XHR2MyA9IHRoaXMudjM7XG5cdFx0cG9pbnQuc2V0KEN1YmljQmV6aWVyKHQsIHYwLngsIHYxLngsIHYyLngsIHYzLngpLCBDdWJpY0Jlemllcih0LCB2MC55LCB2MS55LCB2Mi55LCB2My55KSwgQ3ViaWNCZXppZXIodCwgdjAueiwgdjEueiwgdjIueiwgdjMueikpO1xuXHRcdHJldHVybiBwb2ludDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudjAuY29weShzb3VyY2UudjApO1xuXHRcdHRoaXMudjEuY29weShzb3VyY2UudjEpO1xuXHRcdHRoaXMudjIuY29weShzb3VyY2UudjIpO1xuXHRcdHRoaXMudjMuY29weShzb3VyY2UudjMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYzID0gdGhpcy52My50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoanNvbi52MCk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoanNvbi52MSk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoanNvbi52Mik7XG5cdFx0dGhpcy52My5mcm9tQXJyYXkoanNvbi52Myk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5DdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMyA9IHRydWU7XG5cbmNsYXNzIExpbmVDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IodjEgPSBuZXcgVmVjdG9yMigpLCB2MiA9IG5ldyBWZWN0b3IyKCkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdMaW5lQ3VydmUnO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdH1cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkpIHtcblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0aWYgKHQgPT09IDEpIHtcblx0XHRcdHBvaW50LmNvcHkodGhpcy52Mik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvaW50LmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpO1xuXHRcdFx0cG9pbnQubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludDtcblx0fSAvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXRcblxuXG5cdGdldFBvaW50QXQodSwgb3B0aW9uYWxUYXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb2ludCh1LCBvcHRpb25hbFRhcmdldCk7XG5cdH1cblxuXHRnZXRUYW5nZW50KHQsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0Y29uc3QgdGFuZ2VudCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7XG5cdFx0dGFuZ2VudC5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKTtcblx0XHRyZXR1cm4gdGFuZ2VudDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudjEuY29weShzb3VyY2UudjEpO1xuXHRcdHRoaXMudjIuY29weShzb3VyY2UudjIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7XG5cdFx0ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMudjEuZnJvbUFycmF5KGpzb24udjEpO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KGpzb24udjIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTGluZUN1cnZlLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZSA9IHRydWU7XG5cbmNsYXNzIExpbmVDdXJ2ZTMgZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKHYxID0gbmV3IFZlY3RvcjMoKSwgdjIgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZUN1cnZlMyc7XG5cdFx0dGhpcy5pc0xpbmVDdXJ2ZTMgPSB0cnVlO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdH1cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkpIHtcblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0aWYgKHQgPT09IDEpIHtcblx0XHRcdHBvaW50LmNvcHkodGhpcy52Mik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvaW50LmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpO1xuXHRcdFx0cG9pbnQubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludDtcblx0fSAvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXRcblxuXG5cdGdldFBvaW50QXQodSwgb3B0aW9uYWxUYXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb2ludCh1LCBvcHRpb25hbFRhcmdldCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnYxLmNvcHkoc291cmNlLnYxKTtcblx0XHR0aGlzLnYyLmNvcHkoc291cmNlLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheShqc29uLnYxKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheShqc29uLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIFF1YWRyYXRpY0JlemllckN1cnZlIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3Rvcih2MCA9IG5ldyBWZWN0b3IyKCksIHYxID0gbmV3IFZlY3RvcjIoKSwgdjIgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUXVhZHJhdGljQmV6aWVyQ3VydmUnO1xuXHRcdHRoaXMudjAgPSB2MDtcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblx0XHRjb25zdCB2MCA9IHRoaXMudjAsXG5cdFx0XHRcdFx0djEgPSB0aGlzLnYxLFxuXHRcdFx0XHRcdHYyID0gdGhpcy52Mjtcblx0XHRwb2ludC5zZXQoUXVhZHJhdGljQmV6aWVyKHQsIHYwLngsIHYxLngsIHYyLngpLCBRdWFkcmF0aWNCZXppZXIodCwgdjAueSwgdjEueSwgdjIueSkpO1xuXHRcdHJldHVybiBwb2ludDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudjAuY29weShzb3VyY2UudjApO1xuXHRcdHRoaXMudjEuY29weShzb3VyY2UudjEpO1xuXHRcdHRoaXMudjIuY29weShzb3VyY2UudjIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnYwLmZyb21BcnJheShqc29uLnYwKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheShqc29uLnYxKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheShqc29uLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cblF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlID0gdHJ1ZTtcblxuY2xhc3MgUXVhZHJhdGljQmV6aWVyQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3Rvcih2MCA9IG5ldyBWZWN0b3IzKCksIHYxID0gbmV3IFZlY3RvcjMoKSwgdjIgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUXVhZHJhdGljQmV6aWVyQ3VydmUzJztcblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2Mjtcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLFxuXHRcdFx0XHRcdHYxID0gdGhpcy52MSxcblx0XHRcdFx0XHR2MiA9IHRoaXMudjI7XG5cdFx0cG9pbnQuc2V0KFF1YWRyYXRpY0Jlemllcih0LCB2MC54LCB2MS54LCB2Mi54KSwgUXVhZHJhdGljQmV6aWVyKHQsIHYwLnksIHYxLnksIHYyLnkpLCBRdWFkcmF0aWNCZXppZXIodCwgdjAueiwgdjEueiwgdjIueikpO1xuXHRcdHJldHVybiBwb2ludDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudjAuY29weShzb3VyY2UudjApO1xuXHRcdHRoaXMudjEuY29weShzb3VyY2UudjEpO1xuXHRcdHRoaXMudjIuY29weShzb3VyY2UudjIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnYwLmZyb21BcnJheShqc29uLnYwKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheShqc29uLnYxKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheShqc29uLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cblF1YWRyYXRpY0JlemllckN1cnZlMy5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTMgPSB0cnVlO1xuXG5jbGFzcyBTcGxpbmVDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IocG9pbnRzID0gW10pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTcGxpbmVDdXJ2ZSc7XG5cdFx0dGhpcy5wb2ludHMgPSBwb2ludHM7XG5cdH1cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkpIHtcblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXHRcdGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXHRcdGNvbnN0IHAgPSAocG9pbnRzLmxlbmd0aCAtIDEpICogdDtcblx0XHRjb25zdCBpbnRQb2ludCA9IE1hdGguZmxvb3IocCk7XG5cdFx0Y29uc3Qgd2VpZ2h0ID0gcCAtIGludFBvaW50O1xuXHRcdGNvbnN0IHAwID0gcG9pbnRzW2ludFBvaW50ID09PSAwID8gaW50UG9pbnQgOiBpbnRQb2ludCAtIDFdO1xuXHRcdGNvbnN0IHAxID0gcG9pbnRzW2ludFBvaW50XTtcblx0XHRjb25zdCBwMiA9IHBvaW50c1tpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAyID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDFdO1xuXHRcdGNvbnN0IHAzID0gcG9pbnRzW2ludFBvaW50ID4gcG9pbnRzLmxlbmd0aCAtIDMgPyBwb2ludHMubGVuZ3RoIC0gMSA6IGludFBvaW50ICsgMl07XG5cdFx0cG9pbnQuc2V0KENhdG11bGxSb20od2VpZ2h0LCBwMC54LCBwMS54LCBwMi54LCBwMy54KSwgQ2F0bXVsbFJvbSh3ZWlnaHQsIHAwLnksIHAxLnksIHAyLnksIHAzLnkpKTtcblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzb3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcG9pbnQgPSBzb3VyY2UucG9pbnRzW2ldO1xuXHRcdFx0dGhpcy5wb2ludHMucHVzaChwb2ludC5jbG9uZSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwb2ludCA9IHRoaXMucG9pbnRzW2ldO1xuXHRcdFx0ZGF0YS5wb2ludHMucHVzaChwb2ludC50b0FycmF5KCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcG9pbnQgPSBqc29uLnBvaW50c1tpXTtcblx0XHRcdHRoaXMucG9pbnRzLnB1c2gobmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkocG9pbnQpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cblNwbGluZUN1cnZlLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlID0gdHJ1ZTtcblxudmFyIEN1cnZlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRBcmNDdXJ2ZTogQXJjQ3VydmUsXG5cdENhdG11bGxSb21DdXJ2ZTM6IENhdG11bGxSb21DdXJ2ZTMsXG5cdEN1YmljQmV6aWVyQ3VydmU6IEN1YmljQmV6aWVyQ3VydmUsXG5cdEN1YmljQmV6aWVyQ3VydmUzOiBDdWJpY0JlemllckN1cnZlMyxcblx0RWxsaXBzZUN1cnZlOiBFbGxpcHNlQ3VydmUsXG5cdExpbmVDdXJ2ZTogTGluZUN1cnZlLFxuXHRMaW5lQ3VydmUzOiBMaW5lQ3VydmUzLFxuXHRRdWFkcmF0aWNCZXppZXJDdXJ2ZTogUXVhZHJhdGljQmV6aWVyQ3VydmUsXG5cdFF1YWRyYXRpY0JlemllckN1cnZlMzogUXVhZHJhdGljQmV6aWVyQ3VydmUzLFxuXHRTcGxpbmVDdXJ2ZTogU3BsaW5lQ3VydmVcbn0pO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXHRDdXJ2ZWQgUGF0aCAtIGEgY3VydmUgcGF0aCBpcyBzaW1wbHkgYSBhcnJheSBvZiBjb25uZWN0ZWRcbiAqXHRjdXJ2ZXMsIGJ1dCByZXRhaW5zIHRoZSBhcGkgb2YgYSBjdXJ2ZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5jbGFzcyBDdXJ2ZVBhdGggZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0N1cnZlUGF0aCc7XG5cdFx0dGhpcy5jdXJ2ZXMgPSBbXTtcblx0XHR0aGlzLmF1dG9DbG9zZSA9IGZhbHNlOyAvLyBBdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgcGF0aFxuXHR9XG5cblx0YWRkKGN1cnZlKSB7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdH1cblxuXHRjbG9zZVBhdGgoKSB7XG5cdFx0Ly8gQWRkIGEgbGluZSBjdXJ2ZSBpZiBzdGFydCBhbmQgZW5kIG9mIGxpbmVzIGFyZSBub3QgY29ubmVjdGVkXG5cdFx0Y29uc3Qgc3RhcnRQb2ludCA9IHRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApO1xuXHRcdGNvbnN0IGVuZFBvaW50ID0gdGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoIC0gMV0uZ2V0UG9pbnQoMSk7XG5cblx0XHRpZiAoIXN0YXJ0UG9pbnQuZXF1YWxzKGVuZFBvaW50KSkge1xuXHRcdFx0dGhpcy5jdXJ2ZXMucHVzaChuZXcgTGluZUN1cnZlKGVuZFBvaW50LCBzdGFydFBvaW50KSk7XG5cdFx0fVxuXHR9IC8vIFRvIGdldCBhY2N1cmF0ZSBwb2ludCB3aXRoIHJlZmVyZW5jZSB0b1xuXHQvLyBlbnRpcmUgcGF0aCBkaXN0YW5jZSBhdCB0aW1lIHQsXG5cdC8vIGZvbGxvd2luZyBoYXMgdG8gYmUgZG9uZTpcblx0Ly8gMS4gTGVuZ3RoIG9mIGVhY2ggc3ViIHBhdGggaGF2ZSB0byBiZSBrbm93blxuXHQvLyAyLiBMb2NhdGUgYW5kIGlkZW50aWZ5IHR5cGUgb2YgY3VydmVcblx0Ly8gMy4gR2V0IHQgZm9yIHRoZSBjdXJ2ZVxuXHQvLyA0LiBSZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCh0JylcblxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0Y29uc3QgZCA9IHQgKiB0aGlzLmdldExlbmd0aCgpO1xuXHRcdGNvbnN0IGN1cnZlTGVuZ3RocyA9IHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XG5cdFx0bGV0IGkgPSAwOyAvLyBUbyB0aGluayBhYm91dCBib3VuZGFyaWVzIHBvaW50cy5cblxuXHRcdHdoaWxlIChpIDwgY3VydmVMZW5ndGhzLmxlbmd0aCkge1xuXHRcdFx0aWYgKGN1cnZlTGVuZ3Roc1tpXSA+PSBkKSB7XG5cdFx0XHRcdGNvbnN0IGRpZmYgPSBjdXJ2ZUxlbmd0aHNbaV0gLSBkO1xuXHRcdFx0XHRjb25zdCBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xuXHRcdFx0XHRjb25zdCBzZWdtZW50TGVuZ3RoID0gY3VydmUuZ2V0TGVuZ3RoKCk7XG5cdFx0XHRcdGNvbnN0IHUgPSBzZWdtZW50TGVuZ3RoID09PSAwID8gMCA6IDEgLSBkaWZmIC8gc2VnbWVudExlbmd0aDtcblx0XHRcdFx0cmV0dXJuIGN1cnZlLmdldFBvaW50QXQodSwgb3B0aW9uYWxUYXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7IC8vIGxvb3Agd2hlcmUgc3VtICE9IDAsIHN1bSA+IGQgLCBzdW0rMSA8ZFxuXHR9IC8vIFdlIGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgVEhSRUUuQ3VydmUgZ2V0UG9pbnQoKSB3aXRoIGdldExlbmd0aCgpIGJlY2F1c2UgaW5cblx0Ly8gVEhSRUUuQ3VydmUsIGdldExlbmd0aCgpIGRlcGVuZHMgb24gZ2V0UG9pbnQoKSBidXQgaW4gVEhSRUUuQ3VydmVQYXRoXG5cdC8vIGdldFBvaW50KCkgZGVwZW5kcyBvbiBnZXRMZW5ndGhcblxuXG5cdGdldExlbmd0aCgpIHtcblx0XHRjb25zdCBsZW5zID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcblx0XHRyZXR1cm4gbGVuc1tsZW5zLmxlbmd0aCAtIDFdO1xuXHR9IC8vIGNhY2hlTGVuZ3RocyBtdXN0IGJlIHJlY2FsY3VsYXRlZC5cblxuXG5cdHVwZGF0ZUFyY0xlbmd0aHMoKSB7XG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5jYWNoZUxlbmd0aHMgPSBudWxsO1xuXHRcdHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XG5cdH0gLy8gQ29tcHV0ZSBsZW5ndGhzIGFuZCBjYWNoZSB0aGVtXG5cdC8vIFdlIGNhbm5vdCBvdmVyd3JpdGUgZ2V0TGVuZ3RocygpIGJlY2F1c2UgVXRvVCBtYXBwaW5nIHVzZXMgaXQuXG5cblxuXHRnZXRDdXJ2ZUxlbmd0aHMoKSB7XG5cdFx0Ly8gV2UgdXNlIGNhY2hlIHZhbHVlcyBpZiBjdXJ2ZXMgYW5kIGNhY2hlIGFycmF5IGFyZSBzYW1lIGxlbmd0aFxuXHRcdGlmICh0aGlzLmNhY2hlTGVuZ3RocyAmJiB0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGggPT09IHRoaXMuY3VydmVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO1xuXHRcdH0gLy8gR2V0IGxlbmd0aCBvZiBzdWItY3VydmVcblx0XHQvLyBQdXNoIHN1bXMgaW50byBjYWNoZWQgYXJyYXlcblxuXG5cdFx0Y29uc3QgbGVuZ3RocyA9IFtdO1xuXHRcdGxldCBzdW1zID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRzdW1zICs9IHRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpO1xuXHRcdFx0bGVuZ3Rocy5wdXNoKHN1bXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FjaGVMZW5ndGhzID0gbGVuZ3Rocztcblx0XHRyZXR1cm4gbGVuZ3Rocztcblx0fVxuXG5cdGdldFNwYWNlZFBvaW50cyhkaXZpc2lvbnMgPSA0MCkge1xuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gZGl2aXNpb25zOyBpKyspIHtcblx0XHRcdHBvaW50cy5wdXNoKHRoaXMuZ2V0UG9pbnQoaSAvIGRpdmlzaW9ucykpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmF1dG9DbG9zZSkge1xuXHRcdFx0cG9pbnRzLnB1c2gocG9pbnRzWzBdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXHR9XG5cblx0Z2V0UG9pbnRzKGRpdmlzaW9ucyA9IDEyKSB7XG5cdFx0Y29uc3QgcG9pbnRzID0gW107XG5cdFx0bGV0IGxhc3Q7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgY3VydmVzID0gdGhpcy5jdXJ2ZXM7IGkgPCBjdXJ2ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGN1cnZlID0gY3VydmVzW2ldO1xuXHRcdFx0Y29uc3QgcmVzb2x1dGlvbiA9IGN1cnZlICYmIGN1cnZlLmlzRWxsaXBzZUN1cnZlID8gZGl2aXNpb25zICogMiA6IGN1cnZlICYmIChjdXJ2ZS5pc0xpbmVDdXJ2ZSB8fCBjdXJ2ZS5pc0xpbmVDdXJ2ZTMpID8gMSA6IGN1cnZlICYmIGN1cnZlLmlzU3BsaW5lQ3VydmUgPyBkaXZpc2lvbnMgKiBjdXJ2ZS5wb2ludHMubGVuZ3RoIDogZGl2aXNpb25zO1xuXHRcdFx0Y29uc3QgcHRzID0gY3VydmUuZ2V0UG9pbnRzKHJlc29sdXRpb24pO1xuXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRjb25zdCBwb2ludCA9IHB0c1tqXTtcblx0XHRcdFx0aWYgKGxhc3QgJiYgbGFzdC5lcXVhbHMocG9pbnQpKSBjb250aW51ZTsgLy8gZW5zdXJlcyBubyBjb25zZWN1dGl2ZSBwb2ludHMgYXJlIGR1cGxpY2F0ZXNcblxuXHRcdFx0XHRwb2ludHMucHVzaChwb2ludCk7XG5cdFx0XHRcdGxhc3QgPSBwb2ludDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5hdXRvQ2xvc2UgJiYgcG9pbnRzLmxlbmd0aCA+IDEgJiYgIXBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0uZXF1YWxzKHBvaW50c1swXSkpIHtcblx0XHRcdHBvaW50cy5wdXNoKHBvaW50c1swXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY3VydmVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNvdXJjZS5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjdXJ2ZSA9IHNvdXJjZS5jdXJ2ZXNbaV07XG5cdFx0XHR0aGlzLmN1cnZlcy5wdXNoKGN1cnZlLmNsb25lKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuYXV0b0Nsb3NlID0gc291cmNlLmF1dG9DbG9zZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5hdXRvQ2xvc2UgPSB0aGlzLmF1dG9DbG9zZTtcblx0XHRkYXRhLmN1cnZlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGN1cnZlID0gdGhpcy5jdXJ2ZXNbaV07XG5cdFx0XHRkYXRhLmN1cnZlcy5wdXNoKGN1cnZlLnRvSlNPTigpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLmF1dG9DbG9zZSA9IGpzb24uYXV0b0Nsb3NlO1xuXHRcdHRoaXMuY3VydmVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24uY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgY3VydmUgPSBqc29uLmN1cnZlc1tpXTtcblx0XHRcdHRoaXMuY3VydmVzLnB1c2gobmV3IEN1cnZlc1tjdXJ2ZS50eXBlXSgpLmZyb21KU09OKGN1cnZlKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBQYXRoIGV4dGVuZHMgQ3VydmVQYXRoIHtcblx0Y29uc3RydWN0b3IocG9pbnRzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUGF0aCc7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0aWYgKHBvaW50cykge1xuXHRcdFx0dGhpcy5zZXRGcm9tUG9pbnRzKHBvaW50cyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RnJvbVBvaW50cyhwb2ludHMpIHtcblx0XHR0aGlzLm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDEsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHR0aGlzLmxpbmVUbyhwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bW92ZVRvKHgsIHkpIHtcblx0XHR0aGlzLmN1cnJlbnRQb2ludC5zZXQoeCwgeSk7IC8vIFRPRE8gY29uc2lkZXIgcmVmZXJlbmNpbmcgdmVjdG9ycyBpbnN0ZWFkIG9mIGNvcHlpbmc/XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxpbmVUbyh4LCB5KSB7XG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgTGluZUN1cnZlKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksIG5ldyBWZWN0b3IyKHgsIHkpKTtcblx0XHR0aGlzLmN1cnZlcy5wdXNoKGN1cnZlKTtcblx0XHR0aGlzLmN1cnJlbnRQb2ludC5zZXQoeCwgeSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRxdWFkcmF0aWNDdXJ2ZVRvKGFDUHgsIGFDUHksIGFYLCBhWSkge1xuXHRcdGNvbnN0IGN1cnZlID0gbmV3IFF1YWRyYXRpY0JlemllckN1cnZlKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksIG5ldyBWZWN0b3IyKGFDUHgsIGFDUHkpLCBuZXcgVmVjdG9yMihhWCwgYVkpKTtcblx0XHR0aGlzLmN1cnZlcy5wdXNoKGN1cnZlKTtcblx0XHR0aGlzLmN1cnJlbnRQb2ludC5zZXQoYVgsIGFZKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGJlemllckN1cnZlVG8oYUNQMXgsIGFDUDF5LCBhQ1AyeCwgYUNQMnksIGFYLCBhWSkge1xuXHRcdGNvbnN0IGN1cnZlID0gbmV3IEN1YmljQmV6aWVyQ3VydmUodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSwgbmV3IFZlY3RvcjIoYUNQMXgsIGFDUDF5KSwgbmV3IFZlY3RvcjIoYUNQMngsIGFDUDJ5KSwgbmV3IFZlY3RvcjIoYVgsIGFZKSk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KGFYLCBhWSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzcGxpbmVUaHJ1KHB0c1xuXHQvKkFycmF5IG9mIFZlY3RvciovXG5cdCkge1xuXHRcdGNvbnN0IG5wdHMgPSBbdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KHB0cyk7XG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgU3BsaW5lQ3VydmUobnB0cyk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuY29weShwdHNbcHRzLmxlbmd0aCAtIDFdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFyYyhhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpIHtcblx0XHRjb25zdCB4MCA9IHRoaXMuY3VycmVudFBvaW50Lng7XG5cdFx0Y29uc3QgeTAgPSB0aGlzLmN1cnJlbnRQb2ludC55O1xuXHRcdHRoaXMuYWJzYXJjKGFYICsgeDAsIGFZICsgeTAsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWJzYXJjKGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSkge1xuXHRcdHRoaXMuYWJzZWxsaXBzZShhWCwgYVksIGFSYWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZWxsaXBzZShhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbikge1xuXHRcdGNvbnN0IHgwID0gdGhpcy5jdXJyZW50UG9pbnQueDtcblx0XHRjb25zdCB5MCA9IHRoaXMuY3VycmVudFBvaW50Lnk7XG5cdFx0dGhpcy5hYnNlbGxpcHNlKGFYICsgeDAsIGFZICsgeTAsIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhYnNlbGxpcHNlKGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uKSB7XG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgRWxsaXBzZUN1cnZlKGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uKTtcblxuXHRcdGlmICh0aGlzLmN1cnZlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBpZiBhIHByZXZpb3VzIGN1cnZlIGlzIHByZXNlbnQsIGF0dGVtcHQgdG8gam9pblxuXHRcdFx0Y29uc3QgZmlyc3RQb2ludCA9IGN1cnZlLmdldFBvaW50KDApO1xuXG5cdFx0XHRpZiAoIWZpcnN0UG9pbnQuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KSkge1xuXHRcdFx0XHR0aGlzLmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdFx0Y29uc3QgbGFzdFBvaW50ID0gY3VydmUuZ2V0UG9pbnQoMSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuY29weShsYXN0UG9pbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuY29weShzb3VyY2UuY3VycmVudFBvaW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5jdXJyZW50UG9pbnQgPSB0aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KGpzb24uY3VycmVudFBvaW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIFNoYXBlIGV4dGVuZHMgUGF0aCB7XG5cdGNvbnN0cnVjdG9yKHBvaW50cykge1xuXHRcdHN1cGVyKHBvaW50cyk7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlJztcblx0XHR0aGlzLmhvbGVzID0gW107XG5cdH1cblxuXHRnZXRQb2ludHNIb2xlcyhkaXZpc2lvbnMpIHtcblx0XHRjb25zdCBob2xlc1B0cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aG9sZXNQdHNbaV0gPSB0aGlzLmhvbGVzW2ldLmdldFBvaW50cyhkaXZpc2lvbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBob2xlc1B0cztcblx0fSAvLyBnZXQgcG9pbnRzIG9mIHNoYXBlIGFuZCBob2xlcyAoa2V5cG9pbnRzIGJhc2VkIG9uIHNlZ21lbnRzIHBhcmFtZXRlcilcblxuXG5cdGV4dHJhY3RQb2ludHMoZGl2aXNpb25zKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoYXBlOiB0aGlzLmdldFBvaW50cyhkaXZpc2lvbnMpLFxuXHRcdFx0aG9sZXM6IHRoaXMuZ2V0UG9pbnRzSG9sZXMoZGl2aXNpb25zKVxuXHRcdH07XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmhvbGVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNvdXJjZS5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvbGUgPSBzb3VyY2UuaG9sZXNbaV07XG5cdFx0XHR0aGlzLmhvbGVzLnB1c2goaG9sZS5jbG9uZSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS51dWlkID0gdGhpcy51dWlkO1xuXHRcdGRhdGEuaG9sZXMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvbGUgPSB0aGlzLmhvbGVzW2ldO1xuXHRcdFx0ZGF0YS5ob2xlcy5wdXNoKGhvbGUudG9KU09OKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMudXVpZCA9IGpzb24udXVpZDtcblx0XHR0aGlzLmhvbGVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24uaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBob2xlID0ganNvbi5ob2xlc1tpXTtcblx0XHRcdHRoaXMuaG9sZXMucHVzaChuZXcgUGF0aCgpLmZyb21KU09OKGhvbGUpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbi8qKlxuICogUG9ydCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvZWFyY3V0ICh2Mi4yLjIpXG4gKi9cbmNvbnN0IEVhcmN1dCA9IHtcblx0dHJpYW5ndWxhdGU6IGZ1bmN0aW9uIChkYXRhLCBob2xlSW5kaWNlcywgZGltID0gMikge1xuXHRcdGNvbnN0IGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoO1xuXHRcdGNvbnN0IG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1swXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuXHRcdGxldCBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KGRhdGEsIDAsIG91dGVyTGVuLCBkaW0sIHRydWUpO1xuXHRcdGNvbnN0IHRyaWFuZ2xlcyA9IFtdO1xuXHRcdGlmICghb3V0ZXJOb2RlIHx8IG91dGVyTm9kZS5uZXh0ID09PSBvdXRlck5vZGUucHJldikgcmV0dXJuIHRyaWFuZ2xlcztcblx0XHRsZXQgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgaW52U2l6ZTtcblx0XHRpZiAoaGFzSG9sZXMpIG91dGVyTm9kZSA9IGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSk7IC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuXG5cdFx0aWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcblx0XHRcdG1pblggPSBtYXhYID0gZGF0YVswXTtcblx0XHRcdG1pblkgPSBtYXhZID0gZGF0YVsxXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuXHRcdFx0XHR4ID0gZGF0YVtpXTtcblx0XHRcdFx0eSA9IGRhdGFbaSArIDFdO1xuXHRcdFx0XHRpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuXHRcdFx0XHRpZiAoeSA8IG1pblkpIG1pblkgPSB5O1xuXHRcdFx0XHRpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuXHRcdFx0XHRpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuXHRcdFx0fSAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxuXG5cblx0XHRcdGludlNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuXHRcdFx0aW52U2l6ZSA9IGludlNpemUgIT09IDAgPyAxIC8gaW52U2l6ZSA6IDA7XG5cdFx0fVxuXG5cdFx0ZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXHRcdHJldHVybiB0cmlhbmdsZXM7XG5cdH1cbn07IC8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG5cdGxldCBpLCBsYXN0O1xuXG5cdGlmIChjbG9ja3dpc2UgPT09IHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApIHtcblx0XHRmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG5cdH1cblxuXHRpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xuXHRcdHJlbW92ZU5vZGUobGFzdCk7XG5cdFx0bGFzdCA9IGxhc3QubmV4dDtcblx0fVxuXG5cdHJldHVybiBsYXN0O1xufSAvLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuXG5cbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG5cdGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcblx0aWYgKCFlbmQpIGVuZCA9IHN0YXJ0O1xuXHRsZXQgcCA9IHN0YXJ0LFxuXHRcdFx0YWdhaW47XG5cblx0ZG8ge1xuXHRcdGFnYWluID0gZmFsc2U7XG5cblx0XHRpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG5cdFx0XHRyZW1vdmVOb2RlKHApO1xuXHRcdFx0cCA9IGVuZCA9IHAucHJldjtcblx0XHRcdGlmIChwID09PSBwLm5leHQpIGJyZWFrO1xuXHRcdFx0YWdhaW4gPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwID0gcC5uZXh0O1xuXHRcdH1cblx0fSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuXHRyZXR1cm4gZW5kO1xufSAvLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcblxuXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcykge1xuXHRpZiAoIWVhcikgcmV0dXJuOyAvLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5cblx0aWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0bGV0IHN0b3AgPSBlYXIsXG5cdFx0XHRwcmV2LFxuXHRcdFx0bmV4dDsgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG5cblx0d2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xuXHRcdHByZXYgPSBlYXIucHJldjtcblx0XHRuZXh0ID0gZWFyLm5leHQ7XG5cblx0XHRpZiAoaW52U2l6ZSA/IGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkgOiBpc0VhcihlYXIpKSB7XG5cdFx0XHQvLyBjdXQgb2ZmIHRoZSB0cmlhbmdsZVxuXHRcdFx0dHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKGVhci5pIC8gZGltKTtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKG5leHQuaSAvIGRpbSk7XG5cdFx0XHRyZW1vdmVOb2RlKGVhcik7IC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRleCBsZWFkcyB0byBsZXNzIHNsaXZlciB0cmlhbmdsZXNcblxuXHRcdFx0ZWFyID0gbmV4dC5uZXh0O1xuXHRcdFx0c3RvcCA9IG5leHQubmV4dDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGVhciA9IG5leHQ7IC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG5cblx0XHRpZiAoZWFyID09PSBzdG9wKSB7XG5cdFx0XHQvLyB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgc2xpY2luZyBhZ2FpblxuXHRcdFx0aWYgKCFwYXNzKSB7XG5cdFx0XHRcdGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEpOyAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuXHRcdFx0fSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG5cdFx0XHRcdGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltKTtcblx0XHRcdFx0ZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDIpOyAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuXHRcdFx0fSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG5cdFx0XHRcdHNwbGl0RWFyY3V0KGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn0gLy8gY2hlY2sgd2hldGhlciBhIHBvbHlnb24gbm9kZSBmb3JtcyBhIHZhbGlkIGVhciB3aXRoIGFkamFjZW50IG5vZGVzXG5cblxuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG5cdGNvbnN0IGEgPSBlYXIucHJldixcblx0XHRcdFx0YiA9IGVhcixcblx0XHRcdFx0YyA9IGVhci5uZXh0O1xuXHRpZiAoYXJlYShhLCBiLCBjKSA+PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cdC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG5cblx0bGV0IHAgPSBlYXIubmV4dC5uZXh0O1xuXG5cdHdoaWxlIChwICE9PSBlYXIucHJldikge1xuXHRcdGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcblx0XHRwID0gcC5uZXh0O1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuXHRjb25zdCBhID0gZWFyLnByZXYsXG5cdFx0XHRcdGIgPSBlYXIsXG5cdFx0XHRcdGMgPSBlYXIubmV4dDtcblx0aWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXHQvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZFxuXG5cdGNvbnN0IG1pblRYID0gYS54IDwgYi54ID8gYS54IDwgYy54ID8gYS54IDogYy54IDogYi54IDwgYy54ID8gYi54IDogYy54LFxuXHRcdFx0XHRtaW5UWSA9IGEueSA8IGIueSA/IGEueSA8IGMueSA/IGEueSA6IGMueSA6IGIueSA8IGMueSA/IGIueSA6IGMueSxcblx0XHRcdFx0bWF4VFggPSBhLnggPiBiLnggPyBhLnggPiBjLnggPyBhLnggOiBjLnggOiBiLnggPiBjLnggPyBiLnggOiBjLngsXG5cdFx0XHRcdG1heFRZID0gYS55ID4gYi55ID8gYS55ID4gYy55ID8gYS55IDogYy55IDogYi55ID4gYy55ID8gYi55IDogYy55OyAvLyB6LW9yZGVyIHJhbmdlIGZvciB0aGUgY3VycmVudCB0cmlhbmdsZSBiYm94O1xuXG5cdGNvbnN0IG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSxcblx0XHRcdFx0bWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIGludlNpemUpO1xuXHRsZXQgcCA9IGVhci5wcmV2Wixcblx0XHRcdG4gPSBlYXIubmV4dFo7IC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xuXG5cdHdoaWxlIChwICYmIHAueiA+PSBtaW5aICYmIG4gJiYgbi56IDw9IG1heFopIHtcblx0XHRpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiYgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJiBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAucHJldlo7XG5cdFx0aWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiYgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuXHRcdG4gPSBuLm5leHRaO1xuXHR9IC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG5cblxuXHR3aGlsZSAocCAmJiBwLnogPj0gbWluWikge1xuXHRcdGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJiBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcblx0XHRwID0gcC5wcmV2Wjtcblx0fSAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxuXG5cblx0d2hpbGUgKG4gJiYgbi56IDw9IG1heFopIHtcblx0XHRpZiAobiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiYgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJiBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0biA9IG4ubmV4dFo7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn0gLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcblxuXG5mdW5jdGlvbiBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSkge1xuXHRsZXQgcCA9IHN0YXJ0O1xuXG5cdGRvIHtcblx0XHRjb25zdCBhID0gcC5wcmV2LFxuXHRcdFx0XHRcdGIgPSBwLm5leHQubmV4dDtcblxuXHRcdGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuXHRcdFx0dHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTsgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuXG5cdFx0XHRyZW1vdmVOb2RlKHApO1xuXHRcdFx0cmVtb3ZlTm9kZShwLm5leHQpO1xuXHRcdFx0cCA9IHN0YXJ0ID0gYjtcblx0XHR9XG5cblx0XHRwID0gcC5uZXh0O1xuXHR9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cblx0cmV0dXJuIGZpbHRlclBvaW50cyhwKTtcbn0gLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1bGF0ZSB0aGVtIGluZGVwZW5kZW50bHlcblxuXG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpIHtcblx0Ly8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cblx0bGV0IGEgPSBzdGFydDtcblxuXHRkbyB7XG5cdFx0bGV0IGIgPSBhLm5leHQubmV4dDtcblxuXHRcdHdoaWxlIChiICE9PSBhLnByZXYpIHtcblx0XHRcdGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcblx0XHRcdFx0Ly8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuXHRcdFx0XHRsZXQgYyA9IHNwbGl0UG9seWdvbihhLCBiKTsgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcblxuXHRcdFx0XHRhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG5cdFx0XHRcdGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTsgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcblxuXHRcdFx0XHRlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXHRcdFx0XHRlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGIgPSBiLm5leHQ7XG5cdFx0fVxuXG5cdFx0YSA9IGEubmV4dDtcblx0fSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xufSAvLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXG5cblxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG5cdGNvbnN0IHF1ZXVlID0gW107XG5cdGxldCBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cblx0Zm9yIChpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuXHRcdGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG5cdFx0bGlzdCA9IGxpbmtlZExpc3QoZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSk7XG5cdFx0aWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcblx0XHRxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcblx0fVxuXG5cdHF1ZXVlLnNvcnQoY29tcGFyZVgpOyAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuXG5cdGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuXHRcdGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG5cdFx0b3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuXHR9XG5cblx0cmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuXHRyZXR1cm4gYS54IC0gYi54O1xufSAvLyBmaW5kIGEgYnJpZGdlIGJldHdlZW4gdmVydGljZXMgdGhhdCBjb25uZWN0cyBob2xlIHdpdGggYW4gb3V0ZXIgcmluZyBhbmQgYW5kIGxpbmsgaXRcblxuXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuXHRvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuXG5cdGlmIChvdXRlck5vZGUpIHtcblx0XHRjb25zdCBiID0gc3BsaXRQb2x5Z29uKG91dGVyTm9kZSwgaG9sZSk7IC8vIGZpbHRlciBjb2xsaW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuXG5cdFx0ZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuXHRcdGZpbHRlclBvaW50cyhiLCBiLm5leHQpO1xuXHR9XG59IC8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cblxuXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcblx0bGV0IHAgPSBvdXRlck5vZGU7XG5cdGNvbnN0IGh4ID0gaG9sZS54O1xuXHRjb25zdCBoeSA9IGhvbGUueTtcblx0bGV0IHF4ID0gLUluZmluaXR5LFxuXHRcdFx0bTsgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuXHQvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG5cblx0ZG8ge1xuXHRcdGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkgJiYgcC5uZXh0LnkgIT09IHAueSkge1xuXHRcdFx0Y29uc3QgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcblxuXHRcdFx0aWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG5cdFx0XHRcdHF4ID0geDtcblxuXHRcdFx0XHRpZiAoeCA9PT0gaHgpIHtcblx0XHRcdFx0XHRpZiAoaHkgPT09IHAueSkgcmV0dXJuIHA7XG5cdFx0XHRcdFx0aWYgKGh5ID09PSBwLm5leHQueSkgcmV0dXJuIHAubmV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuXHRpZiAoIW0pIHJldHVybiBudWxsO1xuXHRpZiAoaHggPT09IHF4KSByZXR1cm4gbTsgLy8gaG9sZSB0b3VjaGVzIG91dGVyIHNlZ21lbnQ7IHBpY2sgbGVmdG1vc3QgZW5kcG9pbnRcblx0Ly8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xuXHQvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcblx0Ly8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuXHRjb25zdCBzdG9wID0gbSxcblx0XHRcdFx0bXggPSBtLngsXG5cdFx0XHRcdG15ID0gbS55O1xuXHRsZXQgdGFuTWluID0gSW5maW5pdHksXG5cdFx0XHR0YW47XG5cdHAgPSBtO1xuXG5cdGRvIHtcblx0XHRpZiAoaHggPj0gcC54ICYmIHAueCA+PSBteCAmJiBoeCAhPT0gcC54ICYmIHBvaW50SW5UcmlhbmdsZShoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSkpIHtcblx0XHRcdHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuXHRcdFx0aWYgKGxvY2FsbHlJbnNpZGUocCwgaG9sZSkgJiYgKHRhbiA8IHRhbk1pbiB8fCB0YW4gPT09IHRhbk1pbiAmJiAocC54ID4gbS54IHx8IHAueCA9PT0gbS54ICYmIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApKSkpIHtcblx0XHRcdFx0bSA9IHA7XG5cdFx0XHRcdHRhbk1pbiA9IHRhbjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwID0gcC5uZXh0O1xuXHR9IHdoaWxlIChwICE9PSBzdG9wKTtcblxuXHRyZXR1cm4gbTtcbn0gLy8gd2hldGhlciBzZWN0b3IgaW4gdmVydGV4IG0gY29udGFpbnMgc2VjdG9yIGluIHZlcnRleCBwIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzXG5cblxuZnVuY3Rpb24gc2VjdG9yQ29udGFpbnNTZWN0b3IobSwgcCkge1xuXHRyZXR1cm4gYXJlYShtLnByZXYsIG0sIHAucHJldikgPCAwICYmIGFyZWEocC5uZXh0LCBtLCBtLm5leHQpIDwgMDtcbn0gLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuXG5cbmZ1bmN0aW9uIGluZGV4Q3VydmUoc3RhcnQsIG1pblgsIG1pblksIGludlNpemUpIHtcblx0bGV0IHAgPSBzdGFydDtcblxuXHRkbyB7XG5cdFx0aWYgKHAueiA9PT0gbnVsbCkgcC56ID0gek9yZGVyKHAueCwgcC55LCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0XHRwLnByZXZaID0gcC5wcmV2O1xuXHRcdHAubmV4dFogPSBwLm5leHQ7XG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG5cdHAucHJldloubmV4dFogPSBudWxsO1xuXHRwLnByZXZaID0gbnVsbDtcblx0c29ydExpbmtlZChwKTtcbn0gLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5cblxuZnVuY3Rpb24gc29ydExpbmtlZChsaXN0KSB7XG5cdGxldCBpLFxuXHRcdFx0cCxcblx0XHRcdHEsXG5cdFx0XHRlLFxuXHRcdFx0dGFpbCxcblx0XHRcdG51bU1lcmdlcyxcblx0XHRcdHBTaXplLFxuXHRcdFx0cVNpemUsXG5cdFx0XHRpblNpemUgPSAxO1xuXG5cdGRvIHtcblx0XHRwID0gbGlzdDtcblx0XHRsaXN0ID0gbnVsbDtcblx0XHR0YWlsID0gbnVsbDtcblx0XHRudW1NZXJnZXMgPSAwO1xuXG5cdFx0d2hpbGUgKHApIHtcblx0XHRcdG51bU1lcmdlcysrO1xuXHRcdFx0cSA9IHA7XG5cdFx0XHRwU2l6ZSA9IDA7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuXHRcdFx0XHRwU2l6ZSsrO1xuXHRcdFx0XHRxID0gcS5uZXh0Wjtcblx0XHRcdFx0aWYgKCFxKSBicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cVNpemUgPSBpblNpemU7XG5cblx0XHRcdHdoaWxlIChwU2l6ZSA+IDAgfHwgcVNpemUgPiAwICYmIHEpIHtcblx0XHRcdFx0aWYgKHBTaXplICE9PSAwICYmIChxU2l6ZSA9PT0gMCB8fCAhcSB8fCBwLnogPD0gcS56KSkge1xuXHRcdFx0XHRcdGUgPSBwO1xuXHRcdFx0XHRcdHAgPSBwLm5leHRaO1xuXHRcdFx0XHRcdHBTaXplLS07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZSA9IHE7XG5cdFx0XHRcdFx0cSA9IHEubmV4dFo7XG5cdFx0XHRcdFx0cVNpemUtLTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YWlsKSB0YWlsLm5leHRaID0gZTtlbHNlIGxpc3QgPSBlO1xuXHRcdFx0XHRlLnByZXZaID0gdGFpbDtcblx0XHRcdFx0dGFpbCA9IGU7XG5cdFx0XHR9XG5cblx0XHRcdHAgPSBxO1xuXHRcdH1cblxuXHRcdHRhaWwubmV4dFogPSBudWxsO1xuXHRcdGluU2l6ZSAqPSAyO1xuXHR9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuXHRyZXR1cm4gbGlzdDtcbn0gLy8gei1vcmRlciBvZiBhIHBvaW50IGdpdmVuIGNvb3JkcyBhbmQgaW52ZXJzZSBvZiB0aGUgbG9uZ2VyIHNpZGUgb2YgZGF0YSBiYm94XG5cblxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIGludlNpemUpIHtcblx0Ly8gY29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciByYW5nZVxuXHR4ID0gMzI3NjcgKiAoeCAtIG1pblgpICogaW52U2l6ZTtcblx0eSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAqIGludlNpemU7XG5cdHggPSAoeCB8IHggPDwgOCkgJiAweDAwRkYwMEZGO1xuXHR4ID0gKHggfCB4IDw8IDQpICYgMHgwRjBGMEYwRjtcblx0eCA9ICh4IHwgeCA8PCAyKSAmIDB4MzMzMzMzMzM7XG5cdHggPSAoeCB8IHggPDwgMSkgJiAweDU1NTU1NTU1O1xuXHR5ID0gKHkgfCB5IDw8IDgpICYgMHgwMEZGMDBGRjtcblx0eSA9ICh5IHwgeSA8PCA0KSAmIDB4MEYwRjBGMEY7XG5cdHkgPSAoeSB8IHkgPDwgMikgJiAweDMzMzMzMzMzO1xuXHR5ID0gKHkgfCB5IDw8IDEpICYgMHg1NTU1NTU1NTtcblx0cmV0dXJuIHggfCB5IDw8IDE7XG59IC8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcblxuXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdChzdGFydCkge1xuXHRsZXQgcCA9IHN0YXJ0LFxuXHRcdFx0bGVmdG1vc3QgPSBzdGFydDtcblxuXHRkbyB7XG5cdFx0aWYgKHAueCA8IGxlZnRtb3N0LnggfHwgcC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkpIGxlZnRtb3N0ID0gcDtcblx0XHRwID0gcC5uZXh0O1xuXHR9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cblx0cmV0dXJuIGxlZnRtb3N0O1xufSAvLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5cblxuZnVuY3Rpb24gcG9pbnRJblRyaWFuZ2xlKGF4LCBheSwgYngsIGJ5LCBjeCwgY3ksIHB4LCBweSkge1xuXHRyZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiYgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiYgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59IC8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuXG5cbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG5cdHJldHVybiBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmICggLy8gZG9uZXMndCBpbnRlcnNlY3Qgb3RoZXIgZWRnZXNcblx0bG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKSAmJiAoIC8vIGxvY2FsbHkgdmlzaWJsZVxuXHRhcmVhKGEucHJldiwgYSwgYi5wcmV2KSB8fCBhcmVhKGEsIGIucHJldiwgYikpIHx8IC8vIGRvZXMgbm90IGNyZWF0ZSBvcHBvc2l0ZS1mYWNpbmcgc2VjdG9yc1xuXHRlcXVhbHMoYSwgYikgJiYgYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPiAwICYmIGFyZWEoYi5wcmV2LCBiLCBiLm5leHQpID4gMCk7IC8vIHNwZWNpYWwgemVyby1sZW5ndGggY2FzZVxufSAvLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXG5cblxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG5cdHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn0gLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcblxuXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG5cdHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59IC8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcblxuXG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG5cdGNvbnN0IG8xID0gc2lnbihhcmVhKHAxLCBxMSwgcDIpKTtcblx0Y29uc3QgbzIgPSBzaWduKGFyZWEocDEsIHExLCBxMikpO1xuXHRjb25zdCBvMyA9IHNpZ24oYXJlYShwMiwgcTIsIHAxKSk7XG5cdGNvbnN0IG80ID0gc2lnbihhcmVhKHAyLCBxMiwgcTEpKTtcblx0aWYgKG8xICE9PSBvMiAmJiBvMyAhPT0gbzQpIHJldHVybiB0cnVlOyAvLyBnZW5lcmFsIGNhc2VcblxuXHRpZiAobzEgPT09IDAgJiYgb25TZWdtZW50KHAxLCBwMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBwMiBhcmUgY29sbGluZWFyIGFuZCBwMiBsaWVzIG9uIHAxcTFcblxuXHRpZiAobzIgPT09IDAgJiYgb25TZWdtZW50KHAxLCBxMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBxMiBhcmUgY29sbGluZWFyIGFuZCBxMiBsaWVzIG9uIHAxcTFcblxuXHRpZiAobzMgPT09IDAgJiYgb25TZWdtZW50KHAyLCBwMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29sbGluZWFyIGFuZCBwMSBsaWVzIG9uIHAycTJcblxuXHRpZiAobzQgPT09IDAgJiYgb25TZWdtZW50KHAyLCBxMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBxMSBhcmUgY29sbGluZWFyIGFuZCBxMSBsaWVzIG9uIHAycTJcblxuXHRyZXR1cm4gZmFsc2U7XG59IC8vIGZvciBjb2xsaW5lYXIgcG9pbnRzIHAsIHEsIHIsIGNoZWNrIGlmIHBvaW50IHEgbGllcyBvbiBzZWdtZW50IHByXG5cblxuZnVuY3Rpb24gb25TZWdtZW50KHAsIHEsIHIpIHtcblx0cmV0dXJuIHEueCA8PSBNYXRoLm1heChwLngsIHIueCkgJiYgcS54ID49IE1hdGgubWluKHAueCwgci54KSAmJiBxLnkgPD0gTWF0aC5tYXgocC55LCByLnkpICYmIHEueSA+PSBNYXRoLm1pbihwLnksIHIueSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtKSB7XG5cdHJldHVybiBudW0gPiAwID8gMSA6IG51bSA8IDAgPyAtMSA6IDA7XG59IC8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5cblxuZnVuY3Rpb24gaW50ZXJzZWN0c1BvbHlnb24oYSwgYikge1xuXHRsZXQgcCA9IGE7XG5cblx0ZG8ge1xuXHRcdGlmIChwLmkgIT09IGEuaSAmJiBwLm5leHQuaSAhPT0gYS5pICYmIHAuaSAhPT0gYi5pICYmIHAubmV4dC5pICE9PSBiLmkgJiYgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcblx0XHRwID0gcC5uZXh0O1xuXHR9IHdoaWxlIChwICE9PSBhKTtcblxuXHRyZXR1cm4gZmFsc2U7XG59IC8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuXG5cbmZ1bmN0aW9uIGxvY2FsbHlJbnNpZGUoYSwgYikge1xuXHRyZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID8gYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOiBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59IC8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuXG5cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG5cdGxldCBwID0gYSxcblx0XHRcdGluc2lkZSA9IGZhbHNlO1xuXHRjb25zdCBweCA9IChhLnggKyBiLngpIC8gMixcblx0XHRcdFx0cHkgPSAoYS55ICsgYi55KSAvIDI7XG5cblx0ZG8ge1xuXHRcdGlmIChwLnkgPiBweSAhPT0gcC5uZXh0LnkgPiBweSAmJiBwLm5leHQueSAhPT0gcC55ICYmIHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSBpbnNpZGUgPSAhaW5zaWRlO1xuXHRcdHAgPSBwLm5leHQ7XG5cdH0gd2hpbGUgKHAgIT09IGEpO1xuXG5cdHJldHVybiBpbnNpZGU7XG59IC8vIGxpbmsgdHdvIHBvbHlnb24gdmVydGljZXMgd2l0aCBhIGJyaWRnZTsgaWYgdGhlIHZlcnRpY2VzIGJlbG9uZyB0byB0aGUgc2FtZSByaW5nLCBpdCBzcGxpdHMgcG9seWdvbiBpbnRvIHR3bztcbi8vIGlmIG9uZSBiZWxvbmdzIHRvIHRoZSBvdXRlciByaW5nIGFuZCBhbm90aGVyIHRvIGEgaG9sZSwgaXQgbWVyZ2VzIGl0IGludG8gYSBzaW5nbGUgcmluZ1xuXG5cbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG5cdGNvbnN0IGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG5cdFx0XHRcdGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG5cdFx0XHRcdGFuID0gYS5uZXh0LFxuXHRcdFx0XHRicCA9IGIucHJldjtcblx0YS5uZXh0ID0gYjtcblx0Yi5wcmV2ID0gYTtcblx0YTIubmV4dCA9IGFuO1xuXHRhbi5wcmV2ID0gYTI7XG5cdGIyLm5leHQgPSBhMjtcblx0YTIucHJldiA9IGIyO1xuXHRicC5uZXh0ID0gYjI7XG5cdGIyLnByZXYgPSBicDtcblx0cmV0dXJuIGIyO1xufSAvLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxuXG5cbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuXHRjb25zdCBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cblx0aWYgKCFsYXN0KSB7XG5cdFx0cC5wcmV2ID0gcDtcblx0XHRwLm5leHQgPSBwO1xuXHR9IGVsc2Uge1xuXHRcdHAubmV4dCA9IGxhc3QubmV4dDtcblx0XHRwLnByZXYgPSBsYXN0O1xuXHRcdGxhc3QubmV4dC5wcmV2ID0gcDtcblx0XHRsYXN0Lm5leHQgPSBwO1xuXHR9XG5cblx0cmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuXHRwLm5leHQucHJldiA9IHAucHJldjtcblx0cC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cdGlmIChwLnByZXZaKSBwLnByZXZaLm5leHRaID0gcC5uZXh0Wjtcblx0aWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcblx0Ly8gdmVydGV4IGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG5cdHRoaXMuaSA9IGk7IC8vIHZlcnRleCBjb29yZGluYXRlc1xuXG5cdHRoaXMueCA9IHg7XG5cdHRoaXMueSA9IHk7IC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZ1xuXG5cdHRoaXMucHJldiA9IG51bGw7XG5cdHRoaXMubmV4dCA9IG51bGw7IC8vIHotb3JkZXIgY3VydmUgdmFsdWVcblxuXHR0aGlzLnogPSBudWxsOyAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG5cblx0dGhpcy5wcmV2WiA9IG51bGw7XG5cdHRoaXMubmV4dFogPSBudWxsOyAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuXG5cdHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkge1xuXHRsZXQgc3VtID0gMDtcblxuXHRmb3IgKGxldCBpID0gc3RhcnQsIGogPSBlbmQgLSBkaW07IGkgPCBlbmQ7IGkgKz0gZGltKSB7XG5cdFx0c3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG5cdFx0aiA9IGk7XG5cdH1cblxuXHRyZXR1cm4gc3VtO1xufVxuXG5jbGFzcyBTaGFwZVV0aWxzIHtcblx0Ly8gY2FsY3VsYXRlIGFyZWEgb2YgdGhlIGNvbnRvdXIgcG9seWdvblxuXHRzdGF0aWMgYXJlYShjb250b3VyKSB7XG5cdFx0Y29uc3QgbiA9IGNvbnRvdXIubGVuZ3RoO1xuXHRcdGxldCBhID0gMC4wO1xuXG5cdFx0Zm9yIChsZXQgcCA9IG4gLSAxLCBxID0gMDsgcSA8IG47IHAgPSBxKyspIHtcblx0XHRcdGEgKz0gY29udG91cltwXS54ICogY29udG91cltxXS55IC0gY29udG91cltxXS54ICogY29udG91cltwXS55O1xuXHRcdH1cblxuXHRcdHJldHVybiBhICogMC41O1xuXHR9XG5cblx0c3RhdGljIGlzQ2xvY2tXaXNlKHB0cykge1xuXHRcdHJldHVybiBTaGFwZVV0aWxzLmFyZWEocHRzKSA8IDA7XG5cdH1cblxuXHRzdGF0aWMgdHJpYW5ndWxhdGVTaGFwZShjb250b3VyLCBob2xlcykge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107IC8vIGZsYXQgYXJyYXkgb2YgdmVydGljZXMgbGlrZSBbIHgwLHkwLCB4MSx5MSwgeDIseTIsIC4uLiBdXG5cblx0XHRjb25zdCBob2xlSW5kaWNlcyA9IFtdOyAvLyBhcnJheSBvZiBob2xlIGluZGljZXNcblxuXHRcdGNvbnN0IGZhY2VzID0gW107IC8vIGZpbmFsIGFycmF5IG9mIHZlcnRleCBpbmRpY2VzIGxpa2UgWyBbIGEsYixkIF0sIFsgYixjLGQgXSBdXG5cblx0XHRyZW1vdmVEdXBFbmRQdHMoY29udG91cik7XG5cdFx0YWRkQ29udG91cih2ZXJ0aWNlcywgY29udG91cik7IC8vXG5cblx0XHRsZXQgaG9sZUluZGV4ID0gY29udG91ci5sZW5ndGg7XG5cdFx0aG9sZXMuZm9yRWFjaChyZW1vdmVEdXBFbmRQdHMpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBob2xlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aG9sZUluZGljZXMucHVzaChob2xlSW5kZXgpO1xuXHRcdFx0aG9sZUluZGV4ICs9IGhvbGVzW2ldLmxlbmd0aDtcblx0XHRcdGFkZENvbnRvdXIodmVydGljZXMsIGhvbGVzW2ldKTtcblx0XHR9IC8vXG5cblxuXHRcdGNvbnN0IHRyaWFuZ2xlcyA9IEVhcmN1dC50cmlhbmd1bGF0ZSh2ZXJ0aWNlcywgaG9sZUluZGljZXMpOyAvL1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcblx0XHRcdGZhY2VzLnB1c2godHJpYW5nbGVzLnNsaWNlKGksIGkgKyAzKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhY2VzO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRHVwRW5kUHRzKHBvaW50cykge1xuXHRjb25zdCBsID0gcG9pbnRzLmxlbmd0aDtcblxuXHRpZiAobCA+IDIgJiYgcG9pbnRzW2wgLSAxXS5lcXVhbHMocG9pbnRzWzBdKSkge1xuXHRcdHBvaW50cy5wb3AoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhZGRDb250b3VyKHZlcnRpY2VzLCBjb250b3VyKSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29udG91ci5sZW5ndGg7IGkrKykge1xuXHRcdHZlcnRpY2VzLnB1c2goY29udG91cltpXS54KTtcblx0XHR2ZXJ0aWNlcy5wdXNoKGNvbnRvdXJbaV0ueSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGV4dHJ1ZGVkIGdlb21ldHJ5IGZyb20gYSBwYXRoIHNoYXBlLlxuICpcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlxuICpcdGN1cnZlU2VnbWVudHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgcG9pbnRzIG9uIHRoZSBjdXJ2ZXNcbiAqXHRzdGVwczogPGludD4sIC8vIG51bWJlciBvZiBwb2ludHMgZm9yIHotc2lkZSBleHRydXNpb25zIC8gdXNlZCBmb3Igc3ViZGl2aWRpbmcgc2VnbWVudHMgb2YgZXh0cnVkZSBzcGxpbmUgdG9vXG4gKlx0ZGVwdGg6IDxmbG9hdD4sIC8vIERlcHRoIHRvIGV4dHJ1ZGUgdGhlIHNoYXBlXG4gKlxuICpcdGJldmVsRW5hYmxlZDogPGJvb2w+LCAvLyB0dXJuIG9uIGJldmVsXG4gKlx0YmV2ZWxUaGlja25lc3M6IDxmbG9hdD4sIC8vIGhvdyBkZWVwIGludG8gdGhlIG9yaWdpbmFsIHNoYXBlIGJldmVsIGdvZXNcbiAqXHRiZXZlbFNpemU6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIChpbmNsdWRpbmcgYmV2ZWxPZmZzZXQpIGlzIGJldmVsXG4gKlx0YmV2ZWxPZmZzZXQ6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIGRvZXMgYmV2ZWwgc3RhcnRcbiAqXHRiZXZlbFNlZ21lbnRzOiA8aW50PiwgLy8gbnVtYmVyIG9mIGJldmVsIGxheWVyc1xuICpcbiAqXHRleHRydWRlUGF0aDogPFRIUkVFLkN1cnZlPiAvLyBjdXJ2ZSB0byBleHRydWRlIHNoYXBlIGFsb25nXG4gKlxuICpcdFVWR2VuZXJhdG9yOiA8T2JqZWN0PiAvLyBvYmplY3QgdGhhdCBwcm92aWRlcyBVViBnZW5lcmF0b3IgZnVuY3Rpb25zXG4gKlxuICogfVxuICovXG5cbmNsYXNzIEV4dHJ1ZGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3Ioc2hhcGVzID0gbmV3IFNoYXBlKFtuZXcgVmVjdG9yMigwLjUsIDAuNSksIG5ldyBWZWN0b3IyKC0wLjUsIDAuNSksIG5ldyBWZWN0b3IyKC0wLjUsIC0wLjUpLCBuZXcgVmVjdG9yMigwLjUsIC0wLjUpXSksIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0V4dHJ1ZGVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2hhcGVzOiBzaGFwZXMsXG5cdFx0XHRvcHRpb25zOiBvcHRpb25zXG5cdFx0fTtcblx0XHRzaGFwZXMgPSBBcnJheS5pc0FycmF5KHNoYXBlcykgPyBzaGFwZXMgOiBbc2hhcGVzXTtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgdmVydGljZXNBcnJheSA9IFtdO1xuXHRcdGNvbnN0IHV2QXJyYXkgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbaV07XG5cdFx0XHRhZGRTaGFwZShzaGFwZSk7XG5cdFx0fSAvLyBidWlsZCBnZW9tZXRyeVxuXG5cblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlc0FycmF5LCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZBcnJheSwgMikpO1xuXHRcdHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsgLy8gZnVuY3Rpb25zXG5cblx0XHRmdW5jdGlvbiBhZGRTaGFwZShzaGFwZSkge1xuXHRcdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBbXTsgLy8gb3B0aW9uc1xuXG5cdFx0XHRjb25zdCBjdXJ2ZVNlZ21lbnRzID0gb3B0aW9ucy5jdXJ2ZVNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmN1cnZlU2VnbWVudHMgOiAxMjtcblx0XHRcdGNvbnN0IHN0ZXBzID0gb3B0aW9ucy5zdGVwcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zdGVwcyA6IDE7XG5cdFx0XHRsZXQgZGVwdGggPSBvcHRpb25zLmRlcHRoICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoIDogMTtcblx0XHRcdGxldCBiZXZlbEVuYWJsZWQgPSBvcHRpb25zLmJldmVsRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbEVuYWJsZWQgOiB0cnVlO1xuXHRcdFx0bGV0IGJldmVsVGhpY2tuZXNzID0gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyA6IDAuMjtcblx0XHRcdGxldCBiZXZlbFNpemUgPSBvcHRpb25zLmJldmVsU2l6ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbFNpemUgOiBiZXZlbFRoaWNrbmVzcyAtIDAuMTtcblx0XHRcdGxldCBiZXZlbE9mZnNldCA9IG9wdGlvbnMuYmV2ZWxPZmZzZXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxPZmZzZXQgOiAwO1xuXHRcdFx0bGV0IGJldmVsU2VnbWVudHMgPSBvcHRpb25zLmJldmVsU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxTZWdtZW50cyA6IDM7XG5cdFx0XHRjb25zdCBleHRydWRlUGF0aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGg7XG5cdFx0XHRjb25zdCB1dmdlbiA9IG9wdGlvbnMuVVZHZW5lcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuVVZHZW5lcmF0b3IgOiBXb3JsZFVWR2VuZXJhdG9yOyAvLyBkZXByZWNhdGVkIG9wdGlvbnNcblxuXHRcdFx0aWYgKG9wdGlvbnMuYW1vdW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLicpO1xuXHRcdFx0XHRkZXB0aCA9IG9wdGlvbnMuYW1vdW50O1xuXHRcdFx0fSAvL1xuXG5cblx0XHRcdGxldCBleHRydWRlUHRzLFxuXHRcdFx0XHRcdGV4dHJ1ZGVCeVBhdGggPSBmYWxzZTtcblx0XHRcdGxldCBzcGxpbmVUdWJlLCBiaW5vcm1hbCwgbm9ybWFsLCBwb3NpdGlvbjI7XG5cblx0XHRcdGlmIChleHRydWRlUGF0aCkge1xuXHRcdFx0XHRleHRydWRlUHRzID0gZXh0cnVkZVBhdGguZ2V0U3BhY2VkUG9pbnRzKHN0ZXBzKTtcblx0XHRcdFx0ZXh0cnVkZUJ5UGF0aCA9IHRydWU7XG5cdFx0XHRcdGJldmVsRW5hYmxlZCA9IGZhbHNlOyAvLyBiZXZlbHMgbm90IHN1cHBvcnRlZCBmb3IgcGF0aCBleHRydXNpb25cblx0XHRcdFx0Ly8gU0VUVVAgVE5CIHZhcmlhYmxlc1xuXHRcdFx0XHQvLyBUT0RPMSAtIGhhdmUgYSAuaXNDbG9zZWQgaW4gc3BsaW5lP1xuXG5cdFx0XHRcdHNwbGluZVR1YmUgPSBleHRydWRlUGF0aC5jb21wdXRlRnJlbmV0RnJhbWVzKHN0ZXBzLCBmYWxzZSk7IC8vIGNvbnNvbGUubG9nKHNwbGluZVR1YmUsICdzcGxpbmVUdWJlJywgc3BsaW5lVHViZS5ub3JtYWxzLmxlbmd0aCwgJ3N0ZXBzJywgc3RlcHMsICdleHRydWRlUHRzJywgZXh0cnVkZVB0cy5sZW5ndGgpO1xuXG5cdFx0XHRcdGJpbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdFx0bm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdFx0cG9zaXRpb24yID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdH0gLy8gU2FmZWd1YXJkcyBpZiBiZXZlbHMgYXJlIG5vdCBlbmFibGVkXG5cblxuXHRcdFx0aWYgKCFiZXZlbEVuYWJsZWQpIHtcblx0XHRcdFx0YmV2ZWxTZWdtZW50cyA9IDA7XG5cdFx0XHRcdGJldmVsVGhpY2tuZXNzID0gMDtcblx0XHRcdFx0YmV2ZWxTaXplID0gMDtcblx0XHRcdFx0YmV2ZWxPZmZzZXQgPSAwO1xuXHRcdFx0fSAvLyBWYXJpYWJsZXMgaW5pdGlhbGl6YXRpb25cblxuXG5cdFx0XHRjb25zdCBzaGFwZVBvaW50cyA9IHNoYXBlLmV4dHJhY3RQb2ludHMoY3VydmVTZWdtZW50cyk7XG5cdFx0XHRsZXQgdmVydGljZXMgPSBzaGFwZVBvaW50cy5zaGFwZTtcblx0XHRcdGNvbnN0IGhvbGVzID0gc2hhcGVQb2ludHMuaG9sZXM7XG5cdFx0XHRjb25zdCByZXZlcnNlID0gIVNoYXBlVXRpbHMuaXNDbG9ja1dpc2UodmVydGljZXMpO1xuXG5cdFx0XHRpZiAocmV2ZXJzZSkge1xuXHRcdFx0XHR2ZXJ0aWNlcyA9IHZlcnRpY2VzLnJldmVyc2UoKTsgLy8gTWF5YmUgd2Ugc2hvdWxkIGFsc28gY2hlY2sgaWYgaG9sZXMgYXJlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24sIGp1c3QgdG8gYmUgc2FmZSAuLi5cblxuXHRcdFx0XHRmb3IgKGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1toXTtcblxuXHRcdFx0XHRcdGlmIChTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKGFob2xlKSkge1xuXHRcdFx0XHRcdFx0aG9sZXNbaF0gPSBhaG9sZS5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZhY2VzID0gU2hhcGVVdGlscy50cmlhbmd1bGF0ZVNoYXBlKHZlcnRpY2VzLCBob2xlcyk7XG5cdFx0XHQvKiBWZXJ0aWNlcyAqL1xuXG5cdFx0XHRjb25zdCBjb250b3VyID0gdmVydGljZXM7IC8vIHZlcnRpY2VzIGhhcyBhbGwgcG9pbnRzIGJ1dCBjb250b3VyIGhhcyBvbmx5IHBvaW50cyBvZiBjaXJjdW1mZXJlbmNlXG5cblx0XHRcdGZvciAobGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoKyspIHtcblx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1toXTtcblx0XHRcdFx0dmVydGljZXMgPSB2ZXJ0aWNlcy5jb25jYXQoYWhvbGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBzY2FsZVB0MihwdCwgdmVjLCBzaXplKSB7XG5cdFx0XHRcdGlmICghdmVjKSBjb25zb2xlLmVycm9yKCdUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCcpO1xuXHRcdFx0XHRyZXR1cm4gdmVjLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoc2l6ZSkuYWRkKHB0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdmxlbiA9IHZlcnRpY2VzLmxlbmd0aCxcblx0XHRcdFx0XHRcdGZsZW4gPSBmYWNlcy5sZW5ndGg7IC8vIEZpbmQgZGlyZWN0aW9ucyBmb3IgcG9pbnQgbW92ZW1lbnRcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0QmV2ZWxWZWMoaW5QdCwgaW5QcmV2LCBpbk5leHQpIHtcblx0XHRcdFx0Ly8gY29tcHV0ZXMgZm9yIGluUHQgdGhlIGNvcnJlc3BvbmRpbmcgcG9pbnQgaW5QdCcgb24gYSBuZXcgY29udG91clxuXHRcdFx0XHQvL1x0IHNoaWZ0ZWQgYnkgMSB1bml0IChsZW5ndGggb2Ygbm9ybWFsaXplZCB2ZWN0b3IpIHRvIHRoZSBsZWZ0XG5cdFx0XHRcdC8vIGlmIHdlIHdhbGsgYWxvbmcgY29udG91ciBjbG9ja3dpc2UsIHRoaXMgbmV3IGNvbnRvdXIgaXMgb3V0c2lkZSB0aGUgb2xkIG9uZVxuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBpblB0JyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgcGFyYWxsZWwgdG8gdGhlIHR3b1xuXHRcdFx0XHQvL1x0YWRqYWNlbnQgZWRnZXMgb2YgaW5QdCBhdCBhIGRpc3RhbmNlIG9mIDEgdW5pdCBvbiB0aGUgbGVmdCBzaWRlLlxuXHRcdFx0XHRsZXQgdl90cmFuc194LCB2X3RyYW5zX3ksIHNocmlua19ieTsgLy8gcmVzdWx0aW5nIHRyYW5zbGF0aW9uIHZlY3RvciBmb3IgaW5QdFxuXHRcdFx0XHQvLyBnb29kIHJlYWRpbmcgZm9yIGdlb21ldHJ5IGFsZ29yaXRobXMgKGhlcmU6IGxpbmUtbGluZSBpbnRlcnNlY3Rpb24pXG5cdFx0XHRcdC8vIGh0dHA6Ly9nZW9tYWxnb3JpdGhtcy5jb20vYTA1LV9pbnRlcnNlY3QtMS5odG1sXG5cblx0XHRcdFx0Y29uc3Qgdl9wcmV2X3ggPSBpblB0LnggLSBpblByZXYueCxcblx0XHRcdFx0XHRcdFx0dl9wcmV2X3kgPSBpblB0LnkgLSBpblByZXYueTtcblx0XHRcdFx0Y29uc3Qgdl9uZXh0X3ggPSBpbk5leHQueCAtIGluUHQueCxcblx0XHRcdFx0XHRcdFx0dl9uZXh0X3kgPSBpbk5leHQueSAtIGluUHQueTtcblx0XHRcdFx0Y29uc3Qgdl9wcmV2X2xlbnNxID0gdl9wcmV2X3ggKiB2X3ByZXZfeCArIHZfcHJldl95ICogdl9wcmV2X3k7IC8vIGNoZWNrIGZvciBjb2xsaW5lYXIgZWRnZXNcblxuXHRcdFx0XHRjb25zdCBjb2xsaW5lYXIwID0gdl9wcmV2X3ggKiB2X25leHRfeSAtIHZfcHJldl95ICogdl9uZXh0X3g7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKGNvbGxpbmVhcjApID4gTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdFx0XHQvLyBub3QgY29sbGluZWFyXG5cdFx0XHRcdFx0Ly8gbGVuZ3RoIG9mIHZlY3RvcnMgZm9yIG5vcm1hbGl6aW5nXG5cdFx0XHRcdFx0Y29uc3Qgdl9wcmV2X2xlbiA9IE1hdGguc3FydCh2X3ByZXZfbGVuc3EpO1xuXHRcdFx0XHRcdGNvbnN0IHZfbmV4dF9sZW4gPSBNYXRoLnNxcnQodl9uZXh0X3ggKiB2X25leHRfeCArIHZfbmV4dF95ICogdl9uZXh0X3kpOyAvLyBzaGlmdCBhZGphY2VudCBwb2ludHMgYnkgdW5pdCB2ZWN0b3JzIHRvIHRoZSBsZWZ0XG5cblx0XHRcdFx0XHRjb25zdCBwdFByZXZTaGlmdF94ID0gaW5QcmV2LnggLSB2X3ByZXZfeSAvIHZfcHJldl9sZW47XG5cdFx0XHRcdFx0Y29uc3QgcHRQcmV2U2hpZnRfeSA9IGluUHJldi55ICsgdl9wcmV2X3ggLyB2X3ByZXZfbGVuO1xuXHRcdFx0XHRcdGNvbnN0IHB0TmV4dFNoaWZ0X3ggPSBpbk5leHQueCAtIHZfbmV4dF95IC8gdl9uZXh0X2xlbjtcblx0XHRcdFx0XHRjb25zdCBwdE5leHRTaGlmdF95ID0gaW5OZXh0LnkgKyB2X25leHRfeCAvIHZfbmV4dF9sZW47IC8vIHNjYWxpbmcgZmFjdG9yIGZvciB2X3ByZXYgdG8gaW50ZXJzZWN0aW9uIHBvaW50XG5cblx0XHRcdFx0XHRjb25zdCBzZiA9ICgocHROZXh0U2hpZnRfeCAtIHB0UHJldlNoaWZ0X3gpICogdl9uZXh0X3kgLSAocHROZXh0U2hpZnRfeSAtIHB0UHJldlNoaWZ0X3kpICogdl9uZXh0X3gpIC8gKHZfcHJldl94ICogdl9uZXh0X3kgLSB2X3ByZXZfeSAqIHZfbmV4dF94KTsgLy8gdmVjdG9yIGZyb20gaW5QdCB0byBpbnRlcnNlY3Rpb24gcG9pbnRcblxuXHRcdFx0XHRcdHZfdHJhbnNfeCA9IHB0UHJldlNoaWZ0X3ggKyB2X3ByZXZfeCAqIHNmIC0gaW5QdC54O1xuXHRcdFx0XHRcdHZfdHJhbnNfeSA9IHB0UHJldlNoaWZ0X3kgKyB2X3ByZXZfeSAqIHNmIC0gaW5QdC55OyAvLyBEb24ndCBub3JtYWxpemUhLCBvdGhlcndpc2Ugc2hhcnAgY29ybmVycyBiZWNvbWUgdWdseVxuXHRcdFx0XHRcdC8vXHRidXQgcHJldmVudCBjcmF6eSBzcGlrZXNcblxuXHRcdFx0XHRcdGNvbnN0IHZfdHJhbnNfbGVuc3EgPSB2X3RyYW5zX3ggKiB2X3RyYW5zX3ggKyB2X3RyYW5zX3kgKiB2X3RyYW5zX3k7XG5cblx0XHRcdFx0XHRpZiAodl90cmFuc19sZW5zcSA8PSAyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIodl90cmFuc194LCB2X3RyYW5zX3kpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzaHJpbmtfYnkgPSBNYXRoLnNxcnQodl90cmFuc19sZW5zcSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBoYW5kbGUgc3BlY2lhbCBjYXNlIG9mIGNvbGxpbmVhciBlZGdlc1xuXHRcdFx0XHRcdGxldCBkaXJlY3Rpb25fZXEgPSBmYWxzZTsgLy8gYXNzdW1lczogb3Bwb3NpdGVcblxuXHRcdFx0XHRcdGlmICh2X3ByZXZfeCA+IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdFx0XHRpZiAodl9uZXh0X3ggPiBOdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0XHRcdFx0XHRkaXJlY3Rpb25fZXEgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodl9wcmV2X3ggPCAtTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdFx0XHRcdFx0aWYgKHZfbmV4dF94IDwgLU51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uX2VxID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKE1hdGguc2lnbih2X3ByZXZfeSkgPT09IE1hdGguc2lnbih2X25leHRfeSkpIHtcblx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb25fZXEgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRpcmVjdGlvbl9lcSkge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJXYXJuaW5nOiBsaW5lcyBhcmUgYSBzdHJhaWdodCBzZXF1ZW5jZVwiKTtcblx0XHRcdFx0XHRcdHZfdHJhbnNfeCA9IC12X3ByZXZfeTtcblx0XHRcdFx0XHRcdHZfdHJhbnNfeSA9IHZfcHJldl94O1xuXHRcdFx0XHRcdFx0c2hyaW5rX2J5ID0gTWF0aC5zcXJ0KHZfcHJldl9sZW5zcSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiV2FybmluZzogbGluZXMgYXJlIGEgc3RyYWlnaHQgc3Bpa2VcIik7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3ggPSB2X3ByZXZfeDtcblx0XHRcdFx0XHRcdHZfdHJhbnNfeSA9IHZfcHJldl95O1xuXHRcdFx0XHRcdFx0c2hyaW5rX2J5ID0gTWF0aC5zcXJ0KHZfcHJldl9sZW5zcSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXcgVmVjdG9yMih2X3RyYW5zX3ggLyBzaHJpbmtfYnksIHZfdHJhbnNfeSAvIHNocmlua19ieSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRvdXJNb3ZlbWVudHMgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gY29udG91ci5sZW5ndGgsIGogPSBpbCAtIDEsIGsgPSBpICsgMTsgaSA8IGlsOyBpKyssIGorKywgaysrKSB7XG5cdFx0XHRcdGlmIChqID09PSBpbCkgaiA9IDA7XG5cdFx0XHRcdGlmIChrID09PSBpbCkgayA9IDA7IC8vXHQoaiktLS0oaSktLS0oaylcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ksaixrJywgaSwgaiAsIGspXG5cblx0XHRcdFx0Y29udG91ck1vdmVtZW50c1tpXSA9IGdldEJldmVsVmVjKGNvbnRvdXJbaV0sIGNvbnRvdXJbal0sIGNvbnRvdXJba10pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBob2xlc01vdmVtZW50cyA9IFtdO1xuXHRcdFx0bGV0IG9uZUhvbGVNb3ZlbWVudHMsXG5cdFx0XHRcdFx0dmVydGljZXNNb3ZlbWVudHMgPSBjb250b3VyTW92ZW1lbnRzLmNvbmNhdCgpO1xuXG5cdFx0XHRmb3IgKGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCsrKSB7XG5cdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbaF07XG5cdFx0XHRcdG9uZUhvbGVNb3ZlbWVudHMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGgsIGogPSBpbCAtIDEsIGsgPSBpICsgMTsgaSA8IGlsOyBpKyssIGorKywgaysrKSB7XG5cdFx0XHRcdFx0aWYgKGogPT09IGlsKSBqID0gMDtcblx0XHRcdFx0XHRpZiAoayA9PT0gaWwpIGsgPSAwOyAvL1x0KGopLS0tKGkpLS0tKGspXG5cblx0XHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzW2ldID0gZ2V0QmV2ZWxWZWMoYWhvbGVbaV0sIGFob2xlW2pdLCBhaG9sZVtrXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRob2xlc01vdmVtZW50cy5wdXNoKG9uZUhvbGVNb3ZlbWVudHMpO1xuXHRcdFx0XHR2ZXJ0aWNlc01vdmVtZW50cyA9IHZlcnRpY2VzTW92ZW1lbnRzLmNvbmNhdChvbmVIb2xlTW92ZW1lbnRzKTtcblx0XHRcdH0gLy8gTG9vcCBiZXZlbFNlZ21lbnRzLCAxIGZvciB0aGUgZnJvbnQsIDEgZm9yIHRoZSBiYWNrXG5cblxuXHRcdFx0Zm9yIChsZXQgYiA9IDA7IGIgPCBiZXZlbFNlZ21lbnRzOyBiKyspIHtcblx0XHRcdFx0Ly9mb3IgKCBiID0gYmV2ZWxTZWdtZW50czsgYiA+IDA7IGIgLS0gKSB7XG5cdFx0XHRcdGNvbnN0IHQgPSBiIC8gYmV2ZWxTZWdtZW50cztcblx0XHRcdFx0Y29uc3QgeiA9IGJldmVsVGhpY2tuZXNzICogTWF0aC5jb3ModCAqIE1hdGguUEkgLyAyKTtcblx0XHRcdFx0Y29uc3QgYnMgPSBiZXZlbFNpemUgKiBNYXRoLnNpbih0ICogTWF0aC5QSSAvIDIpICsgYmV2ZWxPZmZzZXQ7IC8vIGNvbnRyYWN0IHNoYXBlXG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gY29udG91ci5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmVydCA9IHNjYWxlUHQyKGNvbnRvdXJbaV0sIGNvbnRvdXJNb3ZlbWVudHNbaV0sIGJzKTtcblx0XHRcdFx0XHR2KHZlcnQueCwgdmVydC55LCAteik7XG5cdFx0XHRcdH0gLy8gZXhwYW5kIGhvbGVzXG5cblxuXHRcdFx0XHRmb3IgKGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1toXTtcblx0XHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gaG9sZXNNb3ZlbWVudHNbaF07XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoYWhvbGVbaV0sIG9uZUhvbGVNb3ZlbWVudHNbaV0sIGJzKTtcblx0XHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnksIC16KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYnMgPSBiZXZlbFNpemUgKyBiZXZlbE9mZnNldDsgLy8gQmFjayBmYWNpbmcgdmVydGljZXNcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bGVuOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdmVydCA9IGJldmVsRW5hYmxlZCA/IHNjYWxlUHQyKHZlcnRpY2VzW2ldLCB2ZXJ0aWNlc01vdmVtZW50c1tpXSwgYnMpIDogdmVydGljZXNbaV07XG5cblx0XHRcdFx0aWYgKCFleHRydWRlQnlQYXRoKSB7XG5cdFx0XHRcdFx0dih2ZXJ0LngsIHZlcnQueSwgMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdiggdmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzWyAwIF0ueSwgZXh0cnVkZVB0c1sgMCBdLnggKTtcblx0XHRcdFx0XHRub3JtYWwuY29weShzcGxpbmVUdWJlLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHZlcnQueCk7XG5cdFx0XHRcdFx0Ymlub3JtYWwuY29weShzcGxpbmVUdWJlLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIodmVydC55KTtcblx0XHRcdFx0XHRwb3NpdGlvbjIuY29weShleHRydWRlUHRzWzBdKS5hZGQobm9ybWFsKS5hZGQoYmlub3JtYWwpO1xuXHRcdFx0XHRcdHYocG9zaXRpb24yLngsIHBvc2l0aW9uMi55LCBwb3NpdGlvbjIueik7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gQWRkIHN0ZXBwZWQgdmVydGljZXMuLi5cblx0XHRcdC8vIEluY2x1ZGluZyBmcm9udCBmYWNpbmcgdmVydGljZXNcblxuXG5cdFx0XHRmb3IgKGxldCBzID0gMTsgcyA8PSBzdGVwczsgcysrKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmVydCA9IGJldmVsRW5hYmxlZCA/IHNjYWxlUHQyKHZlcnRpY2VzW2ldLCB2ZXJ0aWNlc01vdmVtZW50c1tpXSwgYnMpIDogdmVydGljZXNbaV07XG5cblx0XHRcdFx0XHRpZiAoIWV4dHJ1ZGVCeVBhdGgpIHtcblx0XHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnksIGRlcHRoIC8gc3RlcHMgKiBzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gdiggdmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzWyBzIC0gMSBdLnksIGV4dHJ1ZGVQdHNbIHMgLSAxIF0ueCApO1xuXHRcdFx0XHRcdFx0bm9ybWFsLmNvcHkoc3BsaW5lVHViZS5ub3JtYWxzW3NdKS5tdWx0aXBseVNjYWxhcih2ZXJ0LngpO1xuXHRcdFx0XHRcdFx0Ymlub3JtYWwuY29weShzcGxpbmVUdWJlLmJpbm9ybWFsc1tzXSkubXVsdGlwbHlTY2FsYXIodmVydC55KTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uMi5jb3B5KGV4dHJ1ZGVQdHNbc10pLmFkZChub3JtYWwpLmFkZChiaW5vcm1hbCk7XG5cdFx0XHRcdFx0XHR2KHBvc2l0aW9uMi54LCBwb3NpdGlvbjIueSwgcG9zaXRpb24yLnopO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBBZGQgYmV2ZWwgc2VnbWVudHMgcGxhbmVzXG5cdFx0XHQvL2ZvciAoIGIgPSAxOyBiIDw9IGJldmVsU2VnbWVudHM7IGIgKysgKSB7XG5cblxuXHRcdFx0Zm9yIChsZXQgYiA9IGJldmVsU2VnbWVudHMgLSAxOyBiID49IDA7IGItLSkge1xuXHRcdFx0XHRjb25zdCB0ID0gYiAvIGJldmVsU2VnbWVudHM7XG5cdFx0XHRcdGNvbnN0IHogPSBiZXZlbFRoaWNrbmVzcyAqIE1hdGguY29zKHQgKiBNYXRoLlBJIC8gMik7XG5cdFx0XHRcdGNvbnN0IGJzID0gYmV2ZWxTaXplICogTWF0aC5zaW4odCAqIE1hdGguUEkgLyAyKSArIGJldmVsT2Zmc2V0OyAvLyBjb250cmFjdCBzaGFwZVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBzY2FsZVB0Mihjb250b3VyW2ldLCBjb250b3VyTW92ZW1lbnRzW2ldLCBicyk7XG5cdFx0XHRcdFx0dih2ZXJ0LngsIHZlcnQueSwgZGVwdGggKyB6KTtcblx0XHRcdFx0fSAvLyBleHBhbmQgaG9sZXNcblxuXG5cdFx0XHRcdGZvciAobGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoKyspIHtcblx0XHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzW2hdO1xuXHRcdFx0XHRcdG9uZUhvbGVNb3ZlbWVudHMgPSBob2xlc01vdmVtZW50c1toXTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGFob2xlLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBzY2FsZVB0MihhaG9sZVtpXSwgb25lSG9sZU1vdmVtZW50c1tpXSwgYnMpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWV4dHJ1ZGVCeVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0dih2ZXJ0LngsIHZlcnQueSwgZGVwdGggKyB6KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzW3N0ZXBzIC0gMV0ueSwgZXh0cnVkZVB0c1tzdGVwcyAtIDFdLnggKyB6KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qIEZhY2VzICovXG5cdFx0XHQvLyBUb3AgYW5kIGJvdHRvbSBmYWNlc1xuXG5cblx0XHRcdGJ1aWxkTGlkRmFjZXMoKTsgLy8gU2lkZXMgZmFjZXNcblxuXHRcdFx0YnVpbGRTaWRlRmFjZXMoKTsgLy8vLy9cdEludGVybmFsIGZ1bmN0aW9uc1xuXG5cdFx0XHRmdW5jdGlvbiBidWlsZExpZEZhY2VzKCkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblxuXHRcdFx0XHRpZiAoYmV2ZWxFbmFibGVkKSB7XG5cdFx0XHRcdFx0bGV0IGxheWVyID0gMDsgLy8gc3RlcHMgKyAxXG5cblx0XHRcdFx0XHRsZXQgb2Zmc2V0ID0gdmxlbiAqIGxheWVyOyAvLyBCb3R0b20gZmFjZXNcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbaV07XG5cdFx0XHRcdFx0XHRmMyhmYWNlWzJdICsgb2Zmc2V0LCBmYWNlWzFdICsgb2Zmc2V0LCBmYWNlWzBdICsgb2Zmc2V0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsYXllciA9IHN0ZXBzICsgYmV2ZWxTZWdtZW50cyAqIDI7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gdmxlbiAqIGxheWVyOyAvLyBUb3AgZmFjZXNcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbaV07XG5cdFx0XHRcdFx0XHRmMyhmYWNlWzBdICsgb2Zmc2V0LCBmYWNlWzFdICsgb2Zmc2V0LCBmYWNlWzJdICsgb2Zmc2V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gQm90dG9tIGZhY2VzXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmbGVuOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1tpXTtcblx0XHRcdFx0XHRcdGYzKGZhY2VbMl0sIGZhY2VbMV0sIGZhY2VbMF0pO1xuXHRcdFx0XHRcdH0gLy8gVG9wIGZhY2VzXG5cblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbaV07XG5cdFx0XHRcdFx0XHRmMyhmYWNlWzBdICsgdmxlbiAqIHN0ZXBzLCBmYWNlWzFdICsgdmxlbiAqIHN0ZXBzLCBmYWNlWzJdICsgdmxlbiAqIHN0ZXBzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5hZGRHcm91cChzdGFydCwgdmVydGljZXNBcnJheS5sZW5ndGggLyAzIC0gc3RhcnQsIDApO1xuXHRcdFx0fSAvLyBDcmVhdGUgZmFjZXMgZm9yIHRoZSB6LXNpZGVzIG9mIHRoZSBzaGFwZVxuXG5cblx0XHRcdGZ1bmN0aW9uIGJ1aWxkU2lkZUZhY2VzKCkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblx0XHRcdFx0bGV0IGxheWVyb2Zmc2V0ID0gMDtcblx0XHRcdFx0c2lkZXdhbGxzKGNvbnRvdXIsIGxheWVyb2Zmc2V0KTtcblx0XHRcdFx0bGF5ZXJvZmZzZXQgKz0gY29udG91ci5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yIChsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGgrKykge1xuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbaF07XG5cdFx0XHRcdFx0c2lkZXdhbGxzKGFob2xlLCBsYXllcm9mZnNldCk7IC8vLCB0cnVlXG5cblx0XHRcdFx0XHRsYXllcm9mZnNldCArPSBhaG9sZS5sZW5ndGg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5hZGRHcm91cChzdGFydCwgdmVydGljZXNBcnJheS5sZW5ndGggLyAzIC0gc3RhcnQsIDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBzaWRld2FsbHMoY29udG91ciwgbGF5ZXJvZmZzZXQpIHtcblx0XHRcdFx0bGV0IGkgPSBjb250b3VyLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoLS1pID49IDApIHtcblx0XHRcdFx0XHRjb25zdCBqID0gaTtcblx0XHRcdFx0XHRsZXQgayA9IGkgLSAxO1xuXHRcdFx0XHRcdGlmIChrIDwgMCkgayA9IGNvbnRvdXIubGVuZ3RoIC0gMTsgLy9jb25zb2xlLmxvZygnYicsIGksaiwgaS0xLCBrLHZlcnRpY2VzLmxlbmd0aCk7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBzID0gMCwgc2wgPSBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyOyBzIDwgc2w7IHMrKykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2xlbjEgPSB2bGVuICogcztcblx0XHRcdFx0XHRcdGNvbnN0IHNsZW4yID0gdmxlbiAqIChzICsgMSk7XG5cdFx0XHRcdFx0XHRjb25zdCBhID0gbGF5ZXJvZmZzZXQgKyBqICsgc2xlbjEsXG5cdFx0XHRcdFx0XHRcdFx0XHRiID0gbGF5ZXJvZmZzZXQgKyBrICsgc2xlbjEsXG5cdFx0XHRcdFx0XHRcdFx0XHRjID0gbGF5ZXJvZmZzZXQgKyBrICsgc2xlbjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkID0gbGF5ZXJvZmZzZXQgKyBqICsgc2xlbjI7XG5cdFx0XHRcdFx0XHRmNChhLCBiLCBjLCBkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gdih4LCB5LCB6KSB7XG5cdFx0XHRcdHBsYWNlaG9sZGVyLnB1c2goeCk7XG5cdFx0XHRcdHBsYWNlaG9sZGVyLnB1c2goeSk7XG5cdFx0XHRcdHBsYWNlaG9sZGVyLnB1c2goeik7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGYzKGEsIGIsIGMpIHtcblx0XHRcdFx0YWRkVmVydGV4KGEpO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYik7XG5cdFx0XHRcdGFkZFZlcnRleChjKTtcblx0XHRcdFx0Y29uc3QgbmV4dEluZGV4ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzO1xuXHRcdFx0XHRjb25zdCB1dnMgPSB1dmdlbi5nZW5lcmF0ZVRvcFVWKHNjb3BlLCB2ZXJ0aWNlc0FycmF5LCBuZXh0SW5kZXggLSAzLCBuZXh0SW5kZXggLSAyLCBuZXh0SW5kZXggLSAxKTtcblx0XHRcdFx0YWRkVVYodXZzWzBdKTtcblx0XHRcdFx0YWRkVVYodXZzWzFdKTtcblx0XHRcdFx0YWRkVVYodXZzWzJdKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZjQoYSwgYiwgYywgZCkge1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYSk7XG5cdFx0XHRcdGFkZFZlcnRleChiKTtcblx0XHRcdFx0YWRkVmVydGV4KGQpO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYik7XG5cdFx0XHRcdGFkZFZlcnRleChjKTtcblx0XHRcdFx0YWRkVmVydGV4KGQpO1xuXHRcdFx0XHRjb25zdCBuZXh0SW5kZXggPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cdFx0XHRcdGNvbnN0IHV2cyA9IHV2Z2VuLmdlbmVyYXRlU2lkZVdhbGxVVihzY29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gNiwgbmV4dEluZGV4IC0gMywgbmV4dEluZGV4IC0gMiwgbmV4dEluZGV4IC0gMSk7XG5cdFx0XHRcdGFkZFVWKHV2c1swXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1sxXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1szXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1sxXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1syXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1szXSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGFkZFZlcnRleChpbmRleCkge1xuXHRcdFx0XHR2ZXJ0aWNlc0FycmF5LnB1c2gocGxhY2Vob2xkZXJbaW5kZXggKiAzICsgMF0pO1xuXHRcdFx0XHR2ZXJ0aWNlc0FycmF5LnB1c2gocGxhY2Vob2xkZXJbaW5kZXggKiAzICsgMV0pO1xuXHRcdFx0XHR2ZXJ0aWNlc0FycmF5LnB1c2gocGxhY2Vob2xkZXJbaW5kZXggKiAzICsgMl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBhZGRVVih2ZWN0b3IyKSB7XG5cdFx0XHRcdHV2QXJyYXkucHVzaCh2ZWN0b3IyLngpO1xuXHRcdFx0XHR1dkFycmF5LnB1c2godmVjdG9yMi55KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyYW1ldGVycy5zaGFwZXM7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMucGFyYW1ldGVycy5vcHRpb25zO1xuXHRcdHJldHVybiB0b0pTT04kMShzaGFwZXMsIG9wdGlvbnMsIGRhdGEpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEsIHNoYXBlcykge1xuXHRcdGNvbnN0IGdlb21ldHJ5U2hhcGVzID0gW107XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamwgPSBkYXRhLnNoYXBlcy5sZW5ndGg7IGogPCBqbDsgaisrKSB7XG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1tkYXRhLnNoYXBlc1tqXV07XG5cdFx0XHRnZW9tZXRyeVNoYXBlcy5wdXNoKHNoYXBlKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRydWRlUGF0aCA9IGRhdGEub3B0aW9ucy5leHRydWRlUGF0aDtcblxuXHRcdGlmIChleHRydWRlUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGggPSBuZXcgQ3VydmVzW2V4dHJ1ZGVQYXRoLnR5cGVdKCkuZnJvbUpTT04oZXh0cnVkZVBhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRXh0cnVkZUdlb21ldHJ5KGdlb21ldHJ5U2hhcGVzLCBkYXRhLm9wdGlvbnMpO1xuXHR9XG5cbn1cblxuY29uc3QgV29ybGRVVkdlbmVyYXRvciA9IHtcblx0Z2VuZXJhdGVUb3BVVjogZnVuY3Rpb24gKGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBpbmRleEIsIGluZGV4Qykge1xuXHRcdGNvbnN0IGFfeCA9IHZlcnRpY2VzW2luZGV4QSAqIDNdO1xuXHRcdGNvbnN0IGFfeSA9IHZlcnRpY2VzW2luZGV4QSAqIDMgKyAxXTtcblx0XHRjb25zdCBiX3ggPSB2ZXJ0aWNlc1tpbmRleEIgKiAzXTtcblx0XHRjb25zdCBiX3kgPSB2ZXJ0aWNlc1tpbmRleEIgKiAzICsgMV07XG5cdFx0Y29uc3QgY194ID0gdmVydGljZXNbaW5kZXhDICogM107XG5cdFx0Y29uc3QgY195ID0gdmVydGljZXNbaW5kZXhDICogMyArIDFdO1xuXHRcdHJldHVybiBbbmV3IFZlY3RvcjIoYV94LCBhX3kpLCBuZXcgVmVjdG9yMihiX3gsIGJfeSksIG5ldyBWZWN0b3IyKGNfeCwgY195KV07XG5cdH0sXG5cdGdlbmVyYXRlU2lkZVdhbGxVVjogZnVuY3Rpb24gKGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBpbmRleEIsIGluZGV4QywgaW5kZXhEKSB7XG5cdFx0Y29uc3QgYV94ID0gdmVydGljZXNbaW5kZXhBICogM107XG5cdFx0Y29uc3QgYV95ID0gdmVydGljZXNbaW5kZXhBICogMyArIDFdO1xuXHRcdGNvbnN0IGFfeiA9IHZlcnRpY2VzW2luZGV4QSAqIDMgKyAyXTtcblx0XHRjb25zdCBiX3ggPSB2ZXJ0aWNlc1tpbmRleEIgKiAzXTtcblx0XHRjb25zdCBiX3kgPSB2ZXJ0aWNlc1tpbmRleEIgKiAzICsgMV07XG5cdFx0Y29uc3QgYl96ID0gdmVydGljZXNbaW5kZXhCICogMyArIDJdO1xuXHRcdGNvbnN0IGNfeCA9IHZlcnRpY2VzW2luZGV4QyAqIDNdO1xuXHRcdGNvbnN0IGNfeSA9IHZlcnRpY2VzW2luZGV4QyAqIDMgKyAxXTtcblx0XHRjb25zdCBjX3ogPSB2ZXJ0aWNlc1tpbmRleEMgKiAzICsgMl07XG5cdFx0Y29uc3QgZF94ID0gdmVydGljZXNbaW5kZXhEICogM107XG5cdFx0Y29uc3QgZF95ID0gdmVydGljZXNbaW5kZXhEICogMyArIDFdO1xuXHRcdGNvbnN0IGRfeiA9IHZlcnRpY2VzW2luZGV4RCAqIDMgKyAyXTtcblxuXHRcdGlmIChNYXRoLmFicyhhX3kgLSBiX3kpIDwgTWF0aC5hYnMoYV94IC0gYl94KSkge1xuXHRcdFx0cmV0dXJuIFtuZXcgVmVjdG9yMihhX3gsIDEgLSBhX3opLCBuZXcgVmVjdG9yMihiX3gsIDEgLSBiX3opLCBuZXcgVmVjdG9yMihjX3gsIDEgLSBjX3opLCBuZXcgVmVjdG9yMihkX3gsIDEgLSBkX3opXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFtuZXcgVmVjdG9yMihhX3ksIDEgLSBhX3opLCBuZXcgVmVjdG9yMihiX3ksIDEgLSBiX3opLCBuZXcgVmVjdG9yMihjX3ksIDEgLSBjX3opLCBuZXcgVmVjdG9yMihkX3ksIDEgLSBkX3opXTtcblx0XHR9XG5cdH1cbn07XG5cbmZ1bmN0aW9uIHRvSlNPTiQxKHNoYXBlcywgb3B0aW9ucywgZGF0YSkge1xuXHRkYXRhLnNoYXBlcyA9IFtdO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KHNoYXBlcykpIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuXHRcdFx0ZGF0YS5zaGFwZXMucHVzaChzaGFwZS51dWlkKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZGF0YS5zaGFwZXMucHVzaChzaGFwZXMudXVpZCk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5leHRydWRlUGF0aCAhPT0gdW5kZWZpbmVkKSBkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGggPSBvcHRpb25zLmV4dHJ1ZGVQYXRoLnRvSlNPTigpO1xuXHRyZXR1cm4gZGF0YTtcbn1cblxuY2xhc3MgSWNvc2FoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIGRldGFpbCA9IDApIHtcblx0XHRjb25zdCB0ID0gKDEgKyBNYXRoLnNxcnQoNSkpIC8gMjtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFstMSwgdCwgMCwgMSwgdCwgMCwgLTEsIC10LCAwLCAxLCAtdCwgMCwgMCwgLTEsIHQsIDAsIDEsIHQsIDAsIC0xLCAtdCwgMCwgMSwgLXQsIHQsIDAsIC0xLCB0LCAwLCAxLCAtdCwgMCwgLTEsIC10LCAwLCAxXTtcblx0XHRjb25zdCBpbmRpY2VzID0gWzAsIDExLCA1LCAwLCA1LCAxLCAwLCAxLCA3LCAwLCA3LCAxMCwgMCwgMTAsIDExLCAxLCA1LCA5LCA1LCAxMSwgNCwgMTEsIDEwLCAyLCAxMCwgNywgNiwgNywgMSwgOCwgMywgOSwgNCwgMywgNCwgMiwgMywgMiwgNiwgMywgNiwgOCwgMywgOCwgOSwgNCwgOSwgNSwgMiwgNCwgMTEsIDYsIDIsIDEwLCA4LCA2LCA3LCA5LCA4LCAxXTtcblx0XHRzdXBlcih2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwpO1xuXHRcdHRoaXMudHlwZSA9ICdJY29zYWhlZHJvbkdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBJY29zYWhlZHJvbkdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbCk7XG5cdH1cblxufVxuXG5jbGFzcyBMYXRoZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3Rvcihwb2ludHMgPSBbbmV3IFZlY3RvcjIoMCwgMC41KSwgbmV3IFZlY3RvcjIoMC41LCAwKSwgbmV3IFZlY3RvcjIoMCwgLTAuNSldLCBzZWdtZW50cyA9IDEyLCBwaGlTdGFydCA9IDAsIHBoaUxlbmd0aCA9IE1hdGguUEkgKiAyKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGF0aGVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cG9pbnRzOiBwb2ludHMsXG5cdFx0XHRzZWdtZW50czogc2VnbWVudHMsXG5cdFx0XHRwaGlTdGFydDogcGhpU3RhcnQsXG5cdFx0XHRwaGlMZW5ndGg6IHBoaUxlbmd0aFxuXHRcdH07XG5cdFx0c2VnbWVudHMgPSBNYXRoLmZsb29yKHNlZ21lbnRzKTsgLy8gY2xhbXAgcGhpTGVuZ3RoIHNvIGl0J3MgaW4gcmFuZ2Ugb2YgWyAwLCAyUEkgXVxuXG5cdFx0cGhpTGVuZ3RoID0gY2xhbXAocGhpTGVuZ3RoLCAwLCBNYXRoLlBJICogMik7IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXHRcdGNvbnN0IGluaXROb3JtYWxzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCBpbnZlcnNlU2VnbWVudHMgPSAxLjAgLyBzZWdtZW50cztcblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IGN1ck5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgcHJldk5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0bGV0IGR4ID0gMDtcblx0XHRsZXQgZHkgPSAwOyAvLyBwcmUtY29tcHV0ZSBub3JtYWxzIGZvciBpbml0aWFsIFwibWVyaWRpYW5cIlxuXG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPD0gcG9pbnRzLmxlbmd0aCAtIDE7IGorKykge1xuXHRcdFx0c3dpdGNoIChqKSB7XG5cdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAxc3QgdmVydGV4IG9uIHBhdGhcblx0XHRcdFx0XHRkeCA9IHBvaW50c1tqICsgMV0ueCAtIHBvaW50c1tqXS54O1xuXHRcdFx0XHRcdGR5ID0gcG9pbnRzW2ogKyAxXS55IC0gcG9pbnRzW2pdLnk7XG5cdFx0XHRcdFx0bm9ybWFsLnggPSBkeSAqIDEuMDtcblx0XHRcdFx0XHRub3JtYWwueSA9IC1keDtcblx0XHRcdFx0XHRub3JtYWwueiA9IGR5ICogMC4wO1xuXHRcdFx0XHRcdHByZXZOb3JtYWwuY29weShub3JtYWwpO1xuXHRcdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRpbml0Tm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgcG9pbnRzLmxlbmd0aCAtIDE6XG5cdFx0XHRcdFx0Ly8gc3BlY2lhbCBoYW5kbGluZyBmb3IgbGFzdCBWZXJ0ZXggb24gcGF0aFxuXHRcdFx0XHRcdGluaXROb3JtYWxzLnB1c2gocHJldk5vcm1hbC54LCBwcmV2Tm9ybWFsLnksIHByZXZOb3JtYWwueik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBkZWZhdWx0IGhhbmRsaW5nIGZvciBhbGwgdmVydGljZXMgaW4gYmV0d2VlblxuXHRcdFx0XHRcdGR4ID0gcG9pbnRzW2ogKyAxXS54IC0gcG9pbnRzW2pdLng7XG5cdFx0XHRcdFx0ZHkgPSBwb2ludHNbaiArIDFdLnkgLSBwb2ludHNbal0ueTtcblx0XHRcdFx0XHRub3JtYWwueCA9IGR5ICogMS4wO1xuXHRcdFx0XHRcdG5vcm1hbC55ID0gLWR4O1xuXHRcdFx0XHRcdG5vcm1hbC56ID0gZHkgKiAwLjA7XG5cdFx0XHRcdFx0Y3VyTm9ybWFsLmNvcHkobm9ybWFsKTtcblx0XHRcdFx0XHRub3JtYWwueCArPSBwcmV2Tm9ybWFsLng7XG5cdFx0XHRcdFx0bm9ybWFsLnkgKz0gcHJldk5vcm1hbC55O1xuXHRcdFx0XHRcdG5vcm1hbC56ICs9IHByZXZOb3JtYWwuejtcblx0XHRcdFx0XHRub3JtYWwubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0aW5pdE5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTtcblx0XHRcdFx0XHRwcmV2Tm9ybWFsLmNvcHkoY3VyTm9ybWFsKTtcblx0XHRcdH1cblx0XHR9IC8vIGdlbmVyYXRlIHZlcnRpY2VzLCB1dnMgYW5kIG5vcm1hbHNcblxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHRcdFx0Y29uc3QgcGhpID0gcGhpU3RhcnQgKyBpICogaW52ZXJzZVNlZ21lbnRzICogcGhpTGVuZ3RoO1xuXHRcdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4ocGhpKTtcblx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKHBoaSk7XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHBvaW50cy5sZW5ndGggLSAxOyBqKyspIHtcblx0XHRcdFx0Ly8gdmVydGV4XG5cdFx0XHRcdHZlcnRleC54ID0gcG9pbnRzW2pdLnggKiBzaW47XG5cdFx0XHRcdHZlcnRleC55ID0gcG9pbnRzW2pdLnk7XG5cdFx0XHRcdHZlcnRleC56ID0gcG9pbnRzW2pdLnggKiBjb3M7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIHV2XG5cblx0XHRcdFx0dXYueCA9IGkgLyBzZWdtZW50cztcblx0XHRcdFx0dXYueSA9IGogLyAocG9pbnRzLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHR1dnMucHVzaCh1di54LCB1di55KTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0Y29uc3QgeCA9IGluaXROb3JtYWxzWzMgKiBqICsgMF0gKiBzaW47XG5cdFx0XHRcdGNvbnN0IHkgPSBpbml0Tm9ybWFsc1szICogaiArIDFdO1xuXHRcdFx0XHRjb25zdCB6ID0gaW5pdE5vcm1hbHNbMyAqIGogKyAwXSAqIGNvcztcblx0XHRcdFx0bm9ybWFscy5wdXNoKHgsIHksIHopO1xuXHRcdFx0fVxuXHRcdH0gLy8gaW5kaWNlc1xuXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGorKykge1xuXHRcdFx0XHRjb25zdCBiYXNlID0gaiArIGkgKiBwb2ludHMubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCBhID0gYmFzZTtcblx0XHRcdFx0Y29uc3QgYiA9IGJhc2UgKyBwb2ludHMubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCBjID0gYmFzZSArIHBvaW50cy5sZW5ndGggKyAxO1xuXHRcdFx0XHRjb25zdCBkID0gYmFzZSArIDE7IC8vIGZhY2VzXG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYywgZCwgYik7XG5cdFx0XHR9XG5cdFx0fSAvLyBidWlsZCBnZW9tZXRyeVxuXG5cblx0XHR0aGlzLnNldEluZGV4KGluZGljZXMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIDMpKTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBMYXRoZUdlb21ldHJ5KGRhdGEucG9pbnRzLCBkYXRhLnNlZ21lbnRzLCBkYXRhLnBoaVN0YXJ0LCBkYXRhLnBoaUxlbmd0aCk7XG5cdH1cblxufVxuXG5jbGFzcyBPY3RhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCBkZXRhaWwgPSAwKSB7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbMSwgMCwgMCwgLTEsIDAsIDAsIDAsIDEsIDAsIDAsIC0xLCAwLCAwLCAwLCAxLCAwLCAwLCAtMV07XG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAyLCA0LCAwLCA0LCAzLCAwLCAzLCA1LCAwLCA1LCAyLCAxLCAyLCA1LCAxLCA1LCAzLCAxLCAzLCA0LCAxLCA0LCAyXTtcblx0XHRzdXBlcih2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwpO1xuXHRcdHRoaXMudHlwZSA9ICdPY3RhaGVkcm9uR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IE9jdGFoZWRyb25HZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwpO1xuXHR9XG5cbn1cblxuY2xhc3MgUmluZ0dlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3Rvcihpbm5lclJhZGl1cyA9IDAuNSwgb3V0ZXJSYWRpdXMgPSAxLCB0aGV0YVNlZ21lbnRzID0gOCwgcGhpU2VnbWVudHMgPSAxLCB0aGV0YVN0YXJ0ID0gMCwgdGhldGFMZW5ndGggPSBNYXRoLlBJICogMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1JpbmdHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0aW5uZXJSYWRpdXM6IGlubmVyUmFkaXVzLFxuXHRcdFx0b3V0ZXJSYWRpdXM6IG91dGVyUmFkaXVzLFxuXHRcdFx0dGhldGFTZWdtZW50czogdGhldGFTZWdtZW50cyxcblx0XHRcdHBoaVNlZ21lbnRzOiBwaGlTZWdtZW50cyxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXHRcdHRoZXRhU2VnbWVudHMgPSBNYXRoLm1heCgzLCB0aGV0YVNlZ21lbnRzKTtcblx0XHRwaGlTZWdtZW50cyA9IE1hdGgubWF4KDEsIHBoaVNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBzb21lIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGxldCByYWRpdXMgPSBpbm5lclJhZGl1cztcblx0XHRjb25zdCByYWRpdXNTdGVwID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gcGhpU2VnbWVudHM7XG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7IC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHBoaVNlZ21lbnRzOyBqKyspIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHRoZXRhU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHQvLyB2YWx1ZXMgYXJlIGdlbmVyYXRlIGZyb20gdGhlIGluc2lkZSBvZiB0aGUgcmluZyB0byB0aGUgb3V0c2lkZVxuXHRcdFx0XHRjb25zdCBzZWdtZW50ID0gdGhldGFTdGFydCArIGkgLyB0aGV0YVNlZ21lbnRzICogdGhldGFMZW5ndGg7IC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gcmFkaXVzICogTWF0aC5jb3Moc2VnbWVudCk7XG5cdFx0XHRcdHZlcnRleC55ID0gcmFkaXVzICogTWF0aC5zaW4oc2VnbWVudCk7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCgwLCAwLCAxKTsgLy8gdXZcblxuXHRcdFx0XHR1di54ID0gKHZlcnRleC54IC8gb3V0ZXJSYWRpdXMgKyAxKSAvIDI7XG5cdFx0XHRcdHV2LnkgPSAodmVydGV4LnkgLyBvdXRlclJhZGl1cyArIDEpIC8gMjtcblx0XHRcdFx0dXZzLnB1c2godXYueCwgdXYueSk7XG5cdFx0XHR9IC8vIGluY3JlYXNlIHRoZSByYWRpdXMgZm9yIG5leHQgcm93IG9mIHZlcnRpY2VzXG5cblxuXHRcdFx0cmFkaXVzICs9IHJhZGl1c1N0ZXA7XG5cdFx0fSAvLyBpbmRpY2VzXG5cblxuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgcGhpU2VnbWVudHM7IGorKykge1xuXHRcdFx0Y29uc3QgdGhldGFTZWdtZW50TGV2ZWwgPSBqICogKHRoZXRhU2VnbWVudHMgKyAxKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGV0YVNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2VnbWVudCA9IGkgKyB0aGV0YVNlZ21lbnRMZXZlbDtcblx0XHRcdFx0Y29uc3QgYSA9IHNlZ21lbnQ7XG5cdFx0XHRcdGNvbnN0IGIgPSBzZWdtZW50ICsgdGhldGFTZWdtZW50cyArIDE7XG5cdFx0XHRcdGNvbnN0IGMgPSBzZWdtZW50ICsgdGhldGFTZWdtZW50cyArIDI7XG5cdFx0XHRcdGNvbnN0IGQgPSBzZWdtZW50ICsgMTsgLy8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdH1cblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFJpbmdHZW9tZXRyeShkYXRhLmlubmVyUmFkaXVzLCBkYXRhLm91dGVyUmFkaXVzLCBkYXRhLnRoZXRhU2VnbWVudHMsIGRhdGEucGhpU2VnbWVudHMsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCk7XG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihzaGFwZXMgPSBuZXcgU2hhcGUoW25ldyBWZWN0b3IyKDAsIDAuNSksIG5ldyBWZWN0b3IyKC0wLjUsIC0wLjUpLCBuZXcgVmVjdG9yMigwLjUsIC0wLjUpXSksIGN1cnZlU2VnbWVudHMgPSAxMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHNoYXBlczogc2hhcGVzLFxuXHRcdFx0Y3VydmVTZWdtZW50czogY3VydmVTZWdtZW50c1xuXHRcdH07IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTsgLy8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0bGV0IGdyb3VwU3RhcnQgPSAwO1xuXHRcdGxldCBncm91cENvdW50ID0gMDsgLy8gYWxsb3cgc2luZ2xlIGFuZCBhcnJheSB2YWx1ZXMgZm9yIFwic2hhcGVzXCIgcGFyYW1ldGVyXG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShzaGFwZXMpID09PSBmYWxzZSkge1xuXHRcdFx0YWRkU2hhcGUoc2hhcGVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0YWRkU2hhcGUoc2hhcGVzW2ldKTtcblx0XHRcdFx0dGhpcy5hZGRHcm91cChncm91cFN0YXJ0LCBncm91cENvdW50LCBpKTsgLy8gZW5hYmxlcyBNdWx0aU1hdGVyaWFsIHN1cHBvcnRcblxuXHRcdFx0XHRncm91cFN0YXJ0ICs9IGdyb3VwQ291bnQ7XG5cdFx0XHRcdGdyb3VwQ291bnQgPSAwO1xuXHRcdFx0fVxuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7IC8vIGhlbHBlciBmdW5jdGlvbnNcblxuXHRcdGZ1bmN0aW9uIGFkZFNoYXBlKHNoYXBlKSB7XG5cdFx0XHRjb25zdCBpbmRleE9mZnNldCA9IHZlcnRpY2VzLmxlbmd0aCAvIDM7XG5cdFx0XHRjb25zdCBwb2ludHMgPSBzaGFwZS5leHRyYWN0UG9pbnRzKGN1cnZlU2VnbWVudHMpO1xuXHRcdFx0bGV0IHNoYXBlVmVydGljZXMgPSBwb2ludHMuc2hhcGU7XG5cdFx0XHRjb25zdCBzaGFwZUhvbGVzID0gcG9pbnRzLmhvbGVzOyAvLyBjaGVjayBkaXJlY3Rpb24gb2YgdmVydGljZXNcblxuXHRcdFx0aWYgKFNoYXBlVXRpbHMuaXNDbG9ja1dpc2Uoc2hhcGVWZXJ0aWNlcykgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHNoYXBlVmVydGljZXMgPSBzaGFwZVZlcnRpY2VzLnJldmVyc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzaGFwZUhvbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzW2ldO1xuXG5cdFx0XHRcdGlmIChTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKHNoYXBlSG9sZSkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRzaGFwZUhvbGVzW2ldID0gc2hhcGVIb2xlLnJldmVyc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmYWNlcyA9IFNoYXBlVXRpbHMudHJpYW5ndWxhdGVTaGFwZShzaGFwZVZlcnRpY2VzLCBzaGFwZUhvbGVzKTsgLy8gam9pbiB2ZXJ0aWNlcyBvZiBpbm5lciBhbmQgb3V0ZXIgcGF0aHMgdG8gYSBzaW5nbGUgYXJyYXlcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzaGFwZUhvbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzW2ldO1xuXHRcdFx0XHRzaGFwZVZlcnRpY2VzID0gc2hhcGVWZXJ0aWNlcy5jb25jYXQoc2hhcGVIb2xlKTtcblx0XHRcdH0gLy8gdmVydGljZXMsIG5vcm1hbHMsIHV2c1xuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVWZXJ0aWNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdmVydGV4ID0gc2hhcGVWZXJ0aWNlc1tpXTtcblx0XHRcdFx0dmVydGljZXMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIDApO1xuXHRcdFx0XHRub3JtYWxzLnB1c2goMCwgMCwgMSk7XG5cdFx0XHRcdHV2cy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSk7IC8vIHdvcmxkIHV2c1xuXHRcdFx0fSAvLyBpbmNpZGVzXG5cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBmYWNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzW2ldO1xuXHRcdFx0XHRjb25zdCBhID0gZmFjZVswXSArIGluZGV4T2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBiID0gZmFjZVsxXSArIGluZGV4T2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBjID0gZmFjZVsyXSArIGluZGV4T2Zmc2V0O1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgYyk7XG5cdFx0XHRcdGdyb3VwQ291bnQgKz0gMztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyYW1ldGVycy5zaGFwZXM7XG5cdFx0cmV0dXJuIHRvSlNPTihzaGFwZXMsIGRhdGEpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEsIHNoYXBlcykge1xuXHRcdGNvbnN0IGdlb21ldHJ5U2hhcGVzID0gW107XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamwgPSBkYXRhLnNoYXBlcy5sZW5ndGg7IGogPCBqbDsgaisrKSB7XG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1tkYXRhLnNoYXBlc1tqXV07XG5cdFx0XHRnZW9tZXRyeVNoYXBlcy5wdXNoKHNoYXBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFNoYXBlR2VvbWV0cnkoZ2VvbWV0cnlTaGFwZXMsIGRhdGEuY3VydmVTZWdtZW50cyk7XG5cdH1cblxufVxuXG5mdW5jdGlvbiB0b0pTT04oc2hhcGVzLCBkYXRhKSB7XG5cdGRhdGEuc2hhcGVzID0gW107XG5cblx0aWYgKEFycmF5LmlzQXJyYXkoc2hhcGVzKSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbaV07XG5cdFx0XHRkYXRhLnNoYXBlcy5wdXNoKHNoYXBlLnV1aWQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRkYXRhLnNoYXBlcy5wdXNoKHNoYXBlcy51dWlkKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5jbGFzcyBTcGhlcmVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgd2lkdGhTZWdtZW50cyA9IDMyLCBoZWlnaHRTZWdtZW50cyA9IDE2LCBwaGlTdGFydCA9IDAsIHBoaUxlbmd0aCA9IE1hdGguUEkgKiAyLCB0aGV0YVN0YXJ0ID0gMCwgdGhldGFMZW5ndGggPSBNYXRoLlBJKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnU3BoZXJlR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0d2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdHBoaVN0YXJ0OiBwaGlTdGFydCxcblx0XHRcdHBoaUxlbmd0aDogcGhpTGVuZ3RoLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cdFx0d2lkdGhTZWdtZW50cyA9IE1hdGgubWF4KDMsIE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cykpO1xuXHRcdGhlaWdodFNlZ21lbnRzID0gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihoZWlnaHRTZWdtZW50cykpO1xuXHRcdGNvbnN0IHRoZXRhRW5kID0gTWF0aC5taW4odGhldGFTdGFydCArIHRoZXRhTGVuZ3RoLCBNYXRoLlBJKTtcblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGdyaWQgPSBbXTtcblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTsgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8PSBoZWlnaHRTZWdtZW50czsgaXkrKykge1xuXHRcdFx0Y29uc3QgdmVydGljZXNSb3cgPSBbXTtcblx0XHRcdGNvbnN0IHYgPSBpeSAvIGhlaWdodFNlZ21lbnRzOyAvLyBzcGVjaWFsIGNhc2UgZm9yIHRoZSBwb2xlc1xuXG5cdFx0XHRsZXQgdU9mZnNldCA9IDA7XG5cblx0XHRcdGlmIChpeSA9PSAwICYmIHRoZXRhU3RhcnQgPT0gMCkge1xuXHRcdFx0XHR1T2Zmc2V0ID0gMC41IC8gd2lkdGhTZWdtZW50cztcblx0XHRcdH0gZWxzZSBpZiAoaXkgPT0gaGVpZ2h0U2VnbWVudHMgJiYgdGhldGFFbmQgPT0gTWF0aC5QSSkge1xuXHRcdFx0XHR1T2Zmc2V0ID0gLTAuNSAvIHdpZHRoU2VnbWVudHM7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGl4ID0gMDsgaXggPD0gd2lkdGhTZWdtZW50czsgaXgrKykge1xuXHRcdFx0XHRjb25zdCB1ID0gaXggLyB3aWR0aFNlZ21lbnRzOyAvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IC1yYWRpdXMgKiBNYXRoLmNvcyhwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XG5cdFx0XHRcdHZlcnRleC55ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XG5cdFx0XHRcdHZlcnRleC56ID0gcmFkaXVzICogTWF0aC5zaW4ocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyBub3JtYWxcblxuXHRcdFx0XHRub3JtYWwuY29weSh2ZXJ0ZXgpLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7IC8vIHV2XG5cblx0XHRcdFx0dXZzLnB1c2godSArIHVPZmZzZXQsIDEgLSB2KTtcblx0XHRcdFx0dmVydGljZXNSb3cucHVzaChpbmRleCsrKTtcblx0XHRcdH1cblxuXHRcdFx0Z3JpZC5wdXNoKHZlcnRpY2VzUm93KTtcblx0XHR9IC8vIGluZGljZXNcblxuXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGhlaWdodFNlZ21lbnRzOyBpeSsrKSB7XG5cdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgd2lkdGhTZWdtZW50czsgaXgrKykge1xuXHRcdFx0XHRjb25zdCBhID0gZ3JpZFtpeV1baXggKyAxXTtcblx0XHRcdFx0Y29uc3QgYiA9IGdyaWRbaXldW2l4XTtcblx0XHRcdFx0Y29uc3QgYyA9IGdyaWRbaXkgKyAxXVtpeF07XG5cdFx0XHRcdGNvbnN0IGQgPSBncmlkW2l5ICsgMV1baXggKyAxXTtcblx0XHRcdFx0aWYgKGl5ICE9PSAwIHx8IHRoZXRhU3RhcnQgPiAwKSBpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdGlmIChpeSAhPT0gaGVpZ2h0U2VnbWVudHMgLSAxIHx8IHRoZXRhRW5kIDwgTWF0aC5QSSkgaW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xuXHRcdFx0fVxuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgU3BoZXJlR2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEud2lkdGhTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cywgZGF0YS5waGlTdGFydCwgZGF0YS5waGlMZW5ndGgsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCk7XG5cdH1cblxufVxuXG5jbGFzcyBUZXRyYWhlZHJvbkdlb21ldHJ5IGV4dGVuZHMgUG9seWhlZHJvbkdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgZGV0YWlsID0gMCkge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gWzEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIDEsIC0xLCAxLCAtMSwgLTFdO1xuXHRcdGNvbnN0IGluZGljZXMgPSBbMiwgMSwgMCwgMCwgMywgMiwgMSwgMywgMCwgMiwgMywgMV07XG5cdFx0c3VwZXIodmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsKTtcblx0XHR0aGlzLnR5cGUgPSAnVGV0cmFoZWRyb25HZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgVGV0cmFoZWRyb25HZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwpO1xuXHR9XG5cbn1cblxuY2xhc3MgVG9ydXNHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgdHViZSA9IDAuNCwgcmFkaWFsU2VnbWVudHMgPSA4LCB0dWJ1bGFyU2VnbWVudHMgPSA2LCBhcmMgPSBNYXRoLlBJICogMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1RvcnVzR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0dHViZTogdHViZSxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdHR1YnVsYXJTZWdtZW50czogdHVidWxhclNlZ21lbnRzLFxuXHRcdFx0YXJjOiBhcmNcblx0XHR9O1xuXHRcdHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9vcihyYWRpYWxTZWdtZW50cyk7XG5cdFx0dHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vcih0dWJ1bGFyU2VnbWVudHMpOyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IGNlbnRlciA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpOyAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaisrKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHRjb25zdCB1ID0gaSAvIHR1YnVsYXJTZWdtZW50cyAqIGFyYztcblx0XHRcdFx0Y29uc3QgdiA9IGogLyByYWRpYWxTZWdtZW50cyAqIE1hdGguUEkgKiAyOyAvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IChyYWRpdXMgKyB0dWJlICogTWF0aC5jb3ModikpICogTWF0aC5jb3ModSk7XG5cdFx0XHRcdHZlcnRleC55ID0gKHJhZGl1cyArIHR1YmUgKiBNYXRoLmNvcyh2KSkgKiBNYXRoLnNpbih1KTtcblx0XHRcdFx0dmVydGV4LnogPSB0dWJlICogTWF0aC5zaW4odik7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbFxuXG5cdFx0XHRcdGNlbnRlci54ID0gcmFkaXVzICogTWF0aC5jb3ModSk7XG5cdFx0XHRcdGNlbnRlci55ID0gcmFkaXVzICogTWF0aC5zaW4odSk7XG5cdFx0XHRcdG5vcm1hbC5zdWJWZWN0b3JzKHZlcnRleCwgY2VudGVyKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopOyAvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKGkgLyB0dWJ1bGFyU2VnbWVudHMpO1xuXHRcdFx0XHR1dnMucHVzaChqIC8gcmFkaWFsU2VnbWVudHMpO1xuXHRcdFx0fVxuXHRcdH0gLy8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cblx0XHRmb3IgKGxldCBqID0gMTsgaiA8PSByYWRpYWxTZWdtZW50czsgaisrKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHQvLyBpbmRpY2VzXG5cdFx0XHRcdGNvbnN0IGEgPSAodHVidWxhclNlZ21lbnRzICsgMSkgKiBqICsgaSAtIDE7XG5cdFx0XHRcdGNvbnN0IGIgPSAodHVidWxhclNlZ21lbnRzICsgMSkgKiAoaiAtIDEpICsgaSAtIDE7XG5cdFx0XHRcdGNvbnN0IGMgPSAodHVidWxhclNlZ21lbnRzICsgMSkgKiAoaiAtIDEpICsgaTtcblx0XHRcdFx0Y29uc3QgZCA9ICh0dWJ1bGFyU2VnbWVudHMgKyAxKSAqIGogKyBpOyAvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xuXHRcdFx0fVxuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgVG9ydXNHZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS50dWJlLCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLnR1YnVsYXJTZWdtZW50cywgZGF0YS5hcmMpO1xuXHR9XG5cbn1cblxuY2xhc3MgVG9ydXNLbm90R2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHR1YmUgPSAwLjQsIHR1YnVsYXJTZWdtZW50cyA9IDY0LCByYWRpYWxTZWdtZW50cyA9IDgsIHAgPSAyLCBxID0gMykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1RvcnVzS25vdEdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHR1YmU6IHR1YmUsXG5cdFx0XHR0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cyxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdHA6IHAsXG5cdFx0XHRxOiBxXG5cdFx0fTtcblx0XHR0dWJ1bGFyU2VnbWVudHMgPSBNYXRoLmZsb29yKHR1YnVsYXJTZWdtZW50cyk7XG5cdFx0cmFkaWFsU2VnbWVudHMgPSBNYXRoLmZsb29yKHJhZGlhbFNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgUDEgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IFAyID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBCID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBUID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBOID0gbmV3IFZlY3RvcjMoKTsgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyArK2kpIHtcblx0XHRcdC8vIHRoZSByYWRpYW4gXCJ1XCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ2VtZW50XG5cdFx0XHRjb25zdCB1ID0gaSAvIHR1YnVsYXJTZWdtZW50cyAqIHAgKiBNYXRoLlBJICogMjsgLy8gbm93IHdlIGNhbGN1bGF0ZSB0d28gcG9pbnRzLiBQMSBpcyBvdXIgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmUsIFAyIGlzIGEgbGl0dGxlIGZhcnRoZXIgYWhlYWQuXG5cdFx0XHQvLyB0aGVzZSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGEgc3BlY2lhbCBcImNvb3JkaW5hdGUgc3BhY2VcIiwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2ZXJ0ZXggcG9zaXRpb25zXG5cblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1LCBwLCBxLCByYWRpdXMsIFAxKTtcblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1ICsgMC4wMSwgcCwgcSwgcmFkaXVzLCBQMik7IC8vIGNhbGN1bGF0ZSBvcnRob25vcm1hbCBiYXNpc1xuXG5cdFx0XHRULnN1YlZlY3RvcnMoUDIsIFAxKTtcblx0XHRcdE4uYWRkVmVjdG9ycyhQMiwgUDEpO1xuXHRcdFx0Qi5jcm9zc1ZlY3RvcnMoVCwgTik7XG5cdFx0XHROLmNyb3NzVmVjdG9ycyhCLCBUKTsgLy8gbm9ybWFsaXplIEIsIE4uIFQgY2FuIGJlIGlnbm9yZWQsIHdlIGRvbid0IHVzZSBpdFxuXG5cdFx0XHRCLm5vcm1hbGl6ZSgpO1xuXHRcdFx0Ti5ub3JtYWxpemUoKTtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7ICsraikge1xuXHRcdFx0XHQvLyBub3cgY2FsY3VsYXRlIHRoZSB2ZXJ0aWNlcy4gdGhleSBhcmUgbm90aGluZyBtb3JlIHRoYW4gYW4gZXh0cnVzaW9uIG9mIHRoZSB0b3J1cyBjdXJ2ZS5cblx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBleHRydWRlIGEgc2hhcGUgaW4gdGhlIHh5LXBsYW5lLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIHotdmFsdWUuXG5cdFx0XHRcdGNvbnN0IHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjtcblx0XHRcdFx0Y29uc3QgY3ggPSAtdHViZSAqIE1hdGguY29zKHYpO1xuXHRcdFx0XHRjb25zdCBjeSA9IHR1YmUgKiBNYXRoLnNpbih2KTsgLy8gbm93IGNhbGN1bGF0ZSB0aGUgZmluYWwgdmVydGV4IHBvc2l0aW9uLlxuXHRcdFx0XHQvLyBmaXJzdCB3ZSBvcmllbnQgdGhlIGV4dHJ1c2lvbiB3aXRoIG91ciBiYXNpcyB2ZWN0b3MsIHRoZW4gd2UgYWRkIGl0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZVxuXG5cdFx0XHRcdHZlcnRleC54ID0gUDEueCArIChjeCAqIE4ueCArIGN5ICogQi54KTtcblx0XHRcdFx0dmVydGV4LnkgPSBQMS55ICsgKGN4ICogTi55ICsgY3kgKiBCLnkpO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAxLnogKyAoY3ggKiBOLnogKyBjeSAqIEIueik7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbCAoUDEgaXMgYWx3YXlzIHRoZSBjZW50ZXIvb3JpZ2luIG9mIHRoZSBleHRydXNpb24sIHRodXMgd2UgY2FuIHVzZSBpdCB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbClcblxuXHRcdFx0XHRub3JtYWwuc3ViVmVjdG9ycyh2ZXJ0ZXgsIFAxKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopOyAvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKGkgLyB0dWJ1bGFyU2VnbWVudHMpO1xuXHRcdFx0XHR1dnMucHVzaChqIC8gcmFkaWFsU2VnbWVudHMpO1xuXHRcdFx0fVxuXHRcdH0gLy8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cblx0XHRmb3IgKGxldCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGorKykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gcmFkaWFsU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHQvLyBpbmRpY2VzXG5cdFx0XHRcdGNvbnN0IGEgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyAoaSAtIDEpO1xuXHRcdFx0XHRjb25zdCBiID0gKHJhZGlhbFNlZ21lbnRzICsgMSkgKiBqICsgKGkgLSAxKTtcblx0XHRcdFx0Y29uc3QgYyA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIGk7XG5cdFx0XHRcdGNvbnN0IGQgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyBpOyAvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xuXHRcdFx0fVxuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7IC8vIHRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgdG9ydXMgY3VydmVcblxuXHRcdGZ1bmN0aW9uIGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1LCBwLCBxLCByYWRpdXMsIHBvc2l0aW9uKSB7XG5cdFx0XHRjb25zdCBjdSA9IE1hdGguY29zKHUpO1xuXHRcdFx0Y29uc3Qgc3UgPSBNYXRoLnNpbih1KTtcblx0XHRcdGNvbnN0IHF1T3ZlclAgPSBxIC8gcCAqIHU7XG5cdFx0XHRjb25zdCBjcyA9IE1hdGguY29zKHF1T3ZlclApO1xuXHRcdFx0cG9zaXRpb24ueCA9IHJhZGl1cyAqICgyICsgY3MpICogMC41ICogY3U7XG5cdFx0XHRwb3NpdGlvbi55ID0gcmFkaXVzICogKDIgKyBjcykgKiBzdSAqIDAuNTtcblx0XHRcdHBvc2l0aW9uLnogPSByYWRpdXMgKiBNYXRoLnNpbihxdU92ZXJQKSAqIDAuNTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgVG9ydXNLbm90R2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEudHViZSwgZGF0YS50dWJ1bGFyU2VnbWVudHMsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEucCwgZGF0YS5xKTtcblx0fVxuXG59XG5cbmNsYXNzIFR1YmVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocGF0aCA9IG5ldyBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMobmV3IFZlY3RvcjMoLTEsIC0xLCAwKSwgbmV3IFZlY3RvcjMoLTEsIDEsIDApLCBuZXcgVmVjdG9yMygxLCAxLCAwKSksIHR1YnVsYXJTZWdtZW50cyA9IDY0LCByYWRpdXMgPSAxLCByYWRpYWxTZWdtZW50cyA9IDgsIGNsb3NlZCA9IGZhbHNlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnVHViZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRwYXRoOiBwYXRoLFxuXHRcdFx0dHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGNsb3NlZDogY2xvc2VkXG5cdFx0fTtcblx0XHRjb25zdCBmcmFtZXMgPSBwYXRoLmNvbXB1dGVGcmVuZXRGcmFtZXModHVidWxhclNlZ21lbnRzLCBjbG9zZWQpOyAvLyBleHBvc2UgaW50ZXJuYWxzXG5cblx0XHR0aGlzLnRhbmdlbnRzID0gZnJhbWVzLnRhbmdlbnRzO1xuXHRcdHRoaXMubm9ybWFscyA9IGZyYW1lcy5ub3JtYWxzO1xuXHRcdHRoaXMuYmlub3JtYWxzID0gZnJhbWVzLmJpbm9ybWFsczsgLy8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRsZXQgUCA9IG5ldyBWZWN0b3IzKCk7IC8vIGJ1ZmZlclxuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdOyAvLyBjcmVhdGUgYnVmZmVyIGRhdGFcblxuXHRcdGdlbmVyYXRlQnVmZmVyRGF0YSgpOyAvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodXZzLCAyKSk7IC8vIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVCdWZmZXJEYXRhKCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0dWJ1bGFyU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHRnZW5lcmF0ZVNlZ21lbnQoaSk7XG5cdFx0XHR9IC8vIGlmIHRoZSBnZW9tZXRyeSBpcyBub3QgY2xvc2VkLCBnZW5lcmF0ZSB0aGUgbGFzdCByb3cgb2YgdmVydGljZXMgYW5kIG5vcm1hbHNcblx0XHRcdC8vIGF0IHRoZSByZWd1bGFyIHBvc2l0aW9uIG9uIHRoZSBnaXZlbiBwYXRoXG5cdFx0XHQvL1xuXHRcdFx0Ly8gaWYgdGhlIGdlb21ldHJ5IGlzIGNsb3NlZCwgZHVwbGljYXRlIHRoZSBmaXJzdCByb3cgb2YgdmVydGljZXMgYW5kIG5vcm1hbHMgKHV2cyB3aWxsIGRpZmZlcilcblxuXG5cdFx0XHRnZW5lcmF0ZVNlZ21lbnQoY2xvc2VkID09PSBmYWxzZSA/IHR1YnVsYXJTZWdtZW50cyA6IDApOyAvLyB1dnMgYXJlIGdlbmVyYXRlZCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLlxuXHRcdFx0Ly8gdGhpcyBtYWtlcyBpdCBlYXN5IGNvbXB1dGUgY29ycmVjdCB2YWx1ZXMgZm9yIGNsb3NlZCBnZW9tZXRyaWVzXG5cblx0XHRcdGdlbmVyYXRlVVZzKCk7IC8vIGZpbmFsbHkgY3JlYXRlIGZhY2VzXG5cblx0XHRcdGdlbmVyYXRlSW5kaWNlcygpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlU2VnbWVudChpKSB7XG5cdFx0XHQvLyB3ZSB1c2UgZ2V0UG9pbnRBdCB0byBzYW1wbGUgZXZlbmx5IGRpc3RyaWJ1dGVkIHBvaW50cyBmcm9tIHRoZSBnaXZlbiBwYXRoXG5cdFx0XHRQID0gcGF0aC5nZXRQb2ludEF0KGkgLyB0dWJ1bGFyU2VnbWVudHMsIFApOyAvLyByZXRyaWV2ZSBjb3JyZXNwb25kaW5nIG5vcm1hbCBhbmQgYmlub3JtYWxcblxuXHRcdFx0Y29uc3QgTiA9IGZyYW1lcy5ub3JtYWxzW2ldO1xuXHRcdFx0Y29uc3QgQiA9IGZyYW1lcy5iaW5vcm1hbHNbaV07IC8vIGdlbmVyYXRlIG5vcm1hbHMgYW5kIHZlcnRpY2VzIGZvciB0aGUgY3VycmVudCBzZWdtZW50XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqKyspIHtcblx0XHRcdFx0Y29uc3QgdiA9IGogLyByYWRpYWxTZWdtZW50cyAqIE1hdGguUEkgKiAyO1xuXHRcdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbih2KTtcblx0XHRcdFx0Y29uc3QgY29zID0gLU1hdGguY29zKHYpOyAvLyBub3JtYWxcblxuXHRcdFx0XHRub3JtYWwueCA9IGNvcyAqIE4ueCArIHNpbiAqIEIueDtcblx0XHRcdFx0bm9ybWFsLnkgPSBjb3MgKiBOLnkgKyBzaW4gKiBCLnk7XG5cdFx0XHRcdG5vcm1hbC56ID0gY29zICogTi56ICsgc2luICogQi56O1xuXHRcdFx0XHRub3JtYWwubm9ybWFsaXplKCk7XG5cdFx0XHRcdG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsgLy8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSBQLnggKyByYWRpdXMgKiBub3JtYWwueDtcblx0XHRcdFx0dmVydGV4LnkgPSBQLnkgKyByYWRpdXMgKiBub3JtYWwueTtcblx0XHRcdFx0dmVydGV4LnogPSBQLnogKyByYWRpdXMgKiBub3JtYWwuejtcblx0XHRcdFx0dmVydGljZXMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUluZGljZXMoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGorKykge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSByYWRpYWxTZWdtZW50czsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYSA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIChpIC0gMSk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIChpIC0gMSk7XG5cdFx0XHRcdFx0Y29uc3QgYyA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIGk7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIGk7IC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVVVnMoKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaisrKSB7XG5cdFx0XHRcdFx0dXYueCA9IGkgLyB0dWJ1bGFyU2VnbWVudHM7XG5cdFx0XHRcdFx0dXYueSA9IGogLyByYWRpYWxTZWdtZW50cztcblx0XHRcdFx0XHR1dnMucHVzaCh1di54LCB1di55KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5wYXRoID0gdGhpcy5wYXJhbWV0ZXJzLnBhdGgudG9KU09OKCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdC8vIFRoaXMgb25seSB3b3JrcyBmb3IgYnVpbHQtaW4gY3VydmVzIChlLmcuIENhdG11bGxSb21DdXJ2ZTMpLlxuXHRcdC8vIFVzZXIgZGVmaW5lZCBjdXJ2ZXMgb3IgaW5zdGFuY2VzIG9mIEN1cnZlUGF0aCB3aWxsIG5vdCBiZSBkZXNlcmlhbGl6ZWQuXG5cdFx0cmV0dXJuIG5ldyBUdWJlR2VvbWV0cnkobmV3IEN1cnZlc1tkYXRhLnBhdGgudHlwZV0oKS5mcm9tSlNPTihkYXRhLnBhdGgpLCBkYXRhLnR1YnVsYXJTZWdtZW50cywgZGF0YS5yYWRpdXMsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEuY2xvc2VkKTtcblx0fVxuXG59XG5cbmNsYXNzIFdpcmVmcmFtZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeSA9IG51bGwpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdXaXJlZnJhbWVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5XG5cdFx0fTtcblxuXHRcdGlmIChnZW9tZXRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Ly8gYnVmZmVyXG5cdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdFx0Y29uc3QgZWRnZXMgPSBuZXcgU2V0KCk7IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgZW5kID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0aWYgKGdlb21ldHJ5LmluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIGluZGV4ZWQgQnVmZmVyR2VvbWV0cnlcblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRcdGxldCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0aWYgKGdyb3Vwcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRncm91cHMgPSBbe1xuXHRcdFx0XHRcdFx0c3RhcnQ6IDAsXG5cdFx0XHRcdFx0XHRjb3VudDogaW5kaWNlcy5jb3VudCxcblx0XHRcdFx0XHRcdG1hdGVyaWFsSW5kZXg6IDBcblx0XHRcdFx0XHR9XTtcblx0XHRcdFx0fSAvLyBjcmVhdGUgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCBlZ2VzIHdpdGhvdXQgZHVwbGljYXRlc1xuXG5cblx0XHRcdFx0Zm9yIChsZXQgbyA9IDAsIG9sID0gZ3JvdXBzLmxlbmd0aDsgbyA8IG9sOyArK28pIHtcblx0XHRcdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tvXTtcblx0XHRcdFx0XHRjb25zdCBncm91cFN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBDb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGdyb3VwU3RhcnQsIGwgPSBncm91cFN0YXJ0ICsgZ3JvdXBDb3VudDsgaSA8IGw7IGkgKz0gMykge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgxID0gaW5kaWNlcy5nZXRYKGkgKyBqKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgyID0gaW5kaWNlcy5nZXRYKGkgKyAoaiArIDEpICUgMyk7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGluZGV4MSk7XG5cdFx0XHRcdFx0XHRcdGVuZC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBpbmRleDIpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpc1VuaXF1ZUVkZ2Uoc3RhcnQsIGVuZCwgZWRnZXMpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaChzdGFydC54LCBzdGFydC55LCBzdGFydC56KTtcblx0XHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKGVuZC54LCBlbmQueSwgZW5kLnopO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeVxuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBwb3NpdGlvbi5jb3VudCAvIDM7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xuXHRcdFx0XHRcdFx0Ly8gdGhyZWUgZWRnZXMgcGVyIHRyaWFuZ2xlLCBhbiBlZGdlIGlzIHJlcHJlc2VudGVkIGFzIChpbmRleDEsIGluZGV4Milcblx0XHRcdFx0XHRcdC8vIGUuZy4gdGhlIGZpcnN0IHRyaWFuZ2xlIGhhcyB0aGUgZm9sbG93aW5nIGVkZ2VzOiAoMCwxKSwoMSwyKSwoMiwwKVxuXHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgxID0gMyAqIGkgKyBqO1xuXHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgyID0gMyAqIGkgKyAoaiArIDEpICUgMztcblx0XHRcdFx0XHRcdHN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGluZGV4MSk7XG5cdFx0XHRcdFx0XHRlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgaW5kZXgyKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzVW5pcXVlRWRnZShzdGFydCwgZW5kLCBlZGdlcykgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaChzdGFydC54LCBzdGFydC55LCBzdGFydC56KTtcblx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaChlbmQueCwgZW5kLnksIGVuZC56KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdH1cblx0fVxuXG59XG5cbmZ1bmN0aW9uIGlzVW5pcXVlRWRnZShzdGFydCwgZW5kLCBlZGdlcykge1xuXHRjb25zdCBoYXNoMSA9IGAke3N0YXJ0Lnh9LCR7c3RhcnQueX0sJHtzdGFydC56fS0ke2VuZC54fSwke2VuZC55fSwke2VuZC56fWA7XG5cdGNvbnN0IGhhc2gyID0gYCR7ZW5kLnh9LCR7ZW5kLnl9LCR7ZW5kLnp9LSR7c3RhcnQueH0sJHtzdGFydC55fSwke3N0YXJ0Lnp9YDsgLy8gY29pbmNpZGVudCBlZGdlXG5cblx0aWYgKGVkZ2VzLmhhcyhoYXNoMSkgPT09IHRydWUgfHwgZWRnZXMuaGFzKGhhc2gyKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRlZGdlcy5hZGQoaGFzaDEsIGhhc2gyKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG52YXIgR2VvbWV0cmllcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRCb3hHZW9tZXRyeTogQm94R2VvbWV0cnksXG5cdEJveEJ1ZmZlckdlb21ldHJ5OiBCb3hHZW9tZXRyeSxcblx0Q2lyY2xlR2VvbWV0cnk6IENpcmNsZUdlb21ldHJ5LFxuXHRDaXJjbGVCdWZmZXJHZW9tZXRyeTogQ2lyY2xlR2VvbWV0cnksXG5cdENvbmVHZW9tZXRyeTogQ29uZUdlb21ldHJ5LFxuXHRDb25lQnVmZmVyR2VvbWV0cnk6IENvbmVHZW9tZXRyeSxcblx0Q3lsaW5kZXJHZW9tZXRyeTogQ3lsaW5kZXJHZW9tZXRyeSxcblx0Q3lsaW5kZXJCdWZmZXJHZW9tZXRyeTogQ3lsaW5kZXJHZW9tZXRyeSxcblx0RG9kZWNhaGVkcm9uR2VvbWV0cnk6IERvZGVjYWhlZHJvbkdlb21ldHJ5LFxuXHREb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTogRG9kZWNhaGVkcm9uR2VvbWV0cnksXG5cdEVkZ2VzR2VvbWV0cnk6IEVkZ2VzR2VvbWV0cnksXG5cdEV4dHJ1ZGVHZW9tZXRyeTogRXh0cnVkZUdlb21ldHJ5LFxuXHRFeHRydWRlQnVmZmVyR2VvbWV0cnk6IEV4dHJ1ZGVHZW9tZXRyeSxcblx0SWNvc2FoZWRyb25HZW9tZXRyeTogSWNvc2FoZWRyb25HZW9tZXRyeSxcblx0SWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTogSWNvc2FoZWRyb25HZW9tZXRyeSxcblx0TGF0aGVHZW9tZXRyeTogTGF0aGVHZW9tZXRyeSxcblx0TGF0aGVCdWZmZXJHZW9tZXRyeTogTGF0aGVHZW9tZXRyeSxcblx0T2N0YWhlZHJvbkdlb21ldHJ5OiBPY3RhaGVkcm9uR2VvbWV0cnksXG5cdE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTogT2N0YWhlZHJvbkdlb21ldHJ5LFxuXHRQbGFuZUdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LFxuXHRQbGFuZUJ1ZmZlckdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LFxuXHRQb2x5aGVkcm9uR2VvbWV0cnk6IFBvbHloZWRyb25HZW9tZXRyeSxcblx0UG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBQb2x5aGVkcm9uR2VvbWV0cnksXG5cdFJpbmdHZW9tZXRyeTogUmluZ0dlb21ldHJ5LFxuXHRSaW5nQnVmZmVyR2VvbWV0cnk6IFJpbmdHZW9tZXRyeSxcblx0U2hhcGVHZW9tZXRyeTogU2hhcGVHZW9tZXRyeSxcblx0U2hhcGVCdWZmZXJHZW9tZXRyeTogU2hhcGVHZW9tZXRyeSxcblx0U3BoZXJlR2VvbWV0cnk6IFNwaGVyZUdlb21ldHJ5LFxuXHRTcGhlcmVCdWZmZXJHZW9tZXRyeTogU3BoZXJlR2VvbWV0cnksXG5cdFRldHJhaGVkcm9uR2VvbWV0cnk6IFRldHJhaGVkcm9uR2VvbWV0cnksXG5cdFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IFRldHJhaGVkcm9uR2VvbWV0cnksXG5cdFRvcnVzR2VvbWV0cnk6IFRvcnVzR2VvbWV0cnksXG5cdFRvcnVzQnVmZmVyR2VvbWV0cnk6IFRvcnVzR2VvbWV0cnksXG5cdFRvcnVzS25vdEdlb21ldHJ5OiBUb3J1c0tub3RHZW9tZXRyeSxcblx0VG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6IFRvcnVzS25vdEdlb21ldHJ5LFxuXHRUdWJlR2VvbWV0cnk6IFR1YmVHZW9tZXRyeSxcblx0VHViZUJ1ZmZlckdlb21ldHJ5OiBUdWJlR2VvbWV0cnksXG5cdFdpcmVmcmFtZUdlb21ldHJ5OiBXaXJlZnJhbWVHZW9tZXRyeVxufSk7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPFRIUkVFLkNvbG9yPlxuICogfVxuICovXG5cbmNsYXNzIFNoYWRvd01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnU2hhZG93TWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHgwMDAwMDApO1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSB0cnVlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5TaGFkb3dNYXRlcmlhbC5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0cm91Z2huZXNzOiA8ZmxvYXQ+LFxuICpcdG1ldGFsbmVzczogPGZsb2F0PixcbiAqXHRvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqXHRtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGxpZ2h0TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICpcdGFvTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICpcdGVtaXNzaXZlOiA8aGV4PixcbiAqXHRlbWlzc2l2ZUludGVuc2l0eTogPGZsb2F0PlxuICpcdGVtaXNzaXZlTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKlx0bm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqXHRub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqXHRkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0ZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKlx0ZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKlx0cm91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRtZXRhbG5lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKlx0ZW52TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICpcdHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKlx0d2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKlx0d2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqXHRmbGF0U2hhZGluZzogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaFN0YW5kYXJkTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdTVEFOREFSRCc6ICcnXG5cdFx0fTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaFN0YW5kYXJkTWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpOyAvLyBkaWZmdXNlXG5cblx0XHR0aGlzLnJvdWdobmVzcyA9IDEuMDtcblx0XHR0aGlzLm1ldGFsbmVzcyA9IDAuMDtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoMHgwMDAwMDApO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cdFx0dGhpcy5yb3VnaG5lc3NNYXAgPSBudWxsO1xuXHRcdHRoaXMubWV0YWxuZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5lbnZNYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4O1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXHRcdFx0J1NUQU5EQVJEJzogJydcblx0XHR9O1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMucm91Z2huZXNzID0gc291cmNlLnJvdWdobmVzcztcblx0XHR0aGlzLm1ldGFsbmVzcyA9IHNvdXJjZS5tZXRhbG5lc3M7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTtcblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5lbWlzc2l2ZS5jb3B5KHNvdXJjZS5lbWlzc2l2ZSk7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5zaXR5O1xuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KHNvdXJjZS5ub3JtYWxTY2FsZSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0dGhpcy5yb3VnaG5lc3NNYXAgPSBzb3VyY2Uucm91Z2huZXNzTWFwO1xuXHRcdHRoaXMubWV0YWxuZXNzTWFwID0gc291cmNlLm1ldGFsbmVzc01hcDtcblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXHRcdHRoaXMuZW52TWFwID0gc291cmNlLmVudk1hcDtcblx0XHR0aGlzLmVudk1hcEludGVuc2l0eSA9IHNvdXJjZS5lbnZNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSBzb3VyY2UucmVmcmFjdGlvblJhdGlvO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjtcblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gc291cmNlLmZsYXRTaGFkaW5nO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y2xlYXJjb2F0OiA8ZmxvYXQ+LFxuICpcdGNsZWFyY29hdE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRjbGVhcmNvYXRSb3VnaG5lc3M6IDxmbG9hdD4sXG4gKlx0Y2xlYXJjb2F0Um91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGNsZWFyY29hdE5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlx0Y2xlYXJjb2F0Tm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRpb3I6IDxmbG9hdD4sXG4gKlx0cmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICpcbiAqXHRzaGVlbjogPGZsb2F0PixcbiAqXHRzaGVlbkNvbG9yOiA8Q29sb3I+LFxuICpcdHNoZWVuQ29sb3JNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0c2hlZW5Sb3VnaG5lc3M6IDxmbG9hdD4sXG4gKlx0c2hlZW5Sb3VnaG5lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdHRyYW5zbWlzc2lvbjogPGZsb2F0PixcbiAqXHR0cmFuc21pc3Npb25NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdHRoaWNrbmVzczogPGZsb2F0PixcbiAqXHR0aGlja25lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YXR0ZW51YXRpb25EaXN0YW5jZTogPGZsb2F0PixcbiAqXHRhdHRlbnVhdGlvbkNvbG9yOiA8Q29sb3I+LFxuICpcbiAqXHRzcGVjdWxhckludGVuc2l0eTogPGZsb2F0PixcbiAqXHRzcGVjdWxhckludGVuc2l0eU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRzcGVjdWxhckNvbG9yOiA8Q29sb3I+LFxuICpcdHNwZWN1bGFyQ29sb3JNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+IClcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoUGh5c2ljYWxNYXRlcmlhbCBleHRlbmRzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXHRcdFx0J1NUQU5EQVJEJzogJycsXG5cdFx0XHQnUEhZU0lDQUwnOiAnJ1xuXHRcdH07XG5cdFx0dGhpcy50eXBlID0gJ01lc2hQaHlzaWNhbE1hdGVyaWFsJztcblx0XHR0aGlzLmNsZWFyY29hdE1hcCA9IG51bGw7XG5cdFx0dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MgPSAwLjA7XG5cdFx0dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPSBudWxsO1xuXHRcdHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5pb3IgPSAxLjU7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdyZWZsZWN0aXZpdHknLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGNsYW1wKDIuNSAqICh0aGlzLmlvciAtIDEpIC8gKHRoaXMuaW9yICsgMSksIDAsIDEpO1xuXHRcdFx0fSxcblx0XHRcdHNldDogZnVuY3Rpb24gKHJlZmxlY3Rpdml0eSkge1xuXHRcdFx0XHR0aGlzLmlvciA9ICgxICsgMC40ICogcmVmbGVjdGl2aXR5KSAvICgxIC0gMC40ICogcmVmbGVjdGl2aXR5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNoZWVuQ29sb3IgPSBuZXcgQ29sb3IoMHgwMDAwMDApO1xuXHRcdHRoaXMuc2hlZW5Db2xvck1hcCA9IG51bGw7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzcyA9IDEuMDtcblx0XHR0aGlzLnNoZWVuUm91Z2huZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zbWlzc2lvbk1hcCA9IG51bGw7XG5cdFx0dGhpcy50aGlja25lc3MgPSAwO1xuXHRcdHRoaXMudGhpY2tuZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UgPSAwLjA7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEpO1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCA9IG51bGw7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEpO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvck1hcCA9IG51bGw7XG5cdFx0dGhpcy5fc2hlZW4gPSAwLjA7XG5cdFx0dGhpcy5fY2xlYXJjb2F0ID0gMDtcblx0XHR0aGlzLl90cmFuc21pc3Npb24gPSAwO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Z2V0IHNoZWVuKCkge1xuXHRcdHJldHVybiB0aGlzLl9zaGVlbjtcblx0fVxuXG5cdHNldCBzaGVlbih2YWx1ZSkge1xuXHRcdGlmICh0aGlzLl9zaGVlbiA+IDAgIT09IHZhbHVlID4gMCkge1xuXHRcdFx0dGhpcy52ZXJzaW9uKys7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2hlZW4gPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBjbGVhcmNvYXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyY29hdDtcblx0fVxuXG5cdHNldCBjbGVhcmNvYXQodmFsdWUpIHtcblx0XHRpZiAodGhpcy5fY2xlYXJjb2F0ID4gMCAhPT0gdmFsdWUgPiAwKSB7XG5cdFx0XHR0aGlzLnZlcnNpb24rKztcblx0XHR9XG5cblx0XHR0aGlzLl9jbGVhcmNvYXQgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCB0cmFuc21pc3Npb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbjtcblx0fVxuXG5cdHNldCB0cmFuc21pc3Npb24odmFsdWUpIHtcblx0XHRpZiAodGhpcy5fdHJhbnNtaXNzaW9uID4gMCAhPT0gdmFsdWUgPiAwKSB7XG5cdFx0XHR0aGlzLnZlcnNpb24rKztcblx0XHR9XG5cblx0XHR0aGlzLl90cmFuc21pc3Npb24gPSB2YWx1ZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdTVEFOREFSRCc6ICcnLFxuXHRcdFx0J1BIWVNJQ0FMJzogJydcblx0XHR9O1xuXHRcdHRoaXMuY2xlYXJjb2F0ID0gc291cmNlLmNsZWFyY29hdDtcblx0XHR0aGlzLmNsZWFyY29hdE1hcCA9IHNvdXJjZS5jbGVhcmNvYXRNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MgPSBzb3VyY2UuY2xlYXJjb2F0Um91Z2huZXNzO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gc291cmNlLmNsZWFyY29hdFJvdWdobmVzc01hcDtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCA9IHNvdXJjZS5jbGVhcmNvYXROb3JtYWxNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHNvdXJjZS5jbGVhcmNvYXROb3JtYWxTY2FsZSk7XG5cdFx0dGhpcy5pb3IgPSBzb3VyY2UuaW9yO1xuXHRcdHRoaXMuc2hlZW4gPSBzb3VyY2Uuc2hlZW47XG5cdFx0dGhpcy5zaGVlbkNvbG9yLmNvcHkoc291cmNlLnNoZWVuQ29sb3IpO1xuXHRcdHRoaXMuc2hlZW5Db2xvck1hcCA9IHNvdXJjZS5zaGVlbkNvbG9yTWFwO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3MgPSBzb3VyY2Uuc2hlZW5Sb3VnaG5lc3M7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzc01hcCA9IHNvdXJjZS5zaGVlblJvdWdobmVzc01hcDtcblx0XHR0aGlzLnRyYW5zbWlzc2lvbiA9IHNvdXJjZS50cmFuc21pc3Npb247XG5cdFx0dGhpcy50cmFuc21pc3Npb25NYXAgPSBzb3VyY2UudHJhbnNtaXNzaW9uTWFwO1xuXHRcdHRoaXMudGhpY2tuZXNzID0gc291cmNlLnRoaWNrbmVzcztcblx0XHR0aGlzLnRoaWNrbmVzc01hcCA9IHNvdXJjZS50aGlja25lc3NNYXA7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlID0gc291cmNlLmF0dGVudWF0aW9uRGlzdGFuY2U7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkoc291cmNlLmF0dGVudWF0aW9uQ29sb3IpO1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkgPSBzb3VyY2Uuc3BlY3VsYXJJbnRlbnNpdHk7XG5cdFx0dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCA9IHNvdXJjZS5zcGVjdWxhckludGVuc2l0eU1hcDtcblx0XHR0aGlzLnNwZWN1bGFyQ29sb3IuY29weShzb3VyY2Uuc3BlY3VsYXJDb2xvcik7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yTWFwID0gc291cmNlLnNwZWN1bGFyQ29sb3JNYXA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoUGh5c2ljYWxNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0c3BlY3VsYXI6IDxoZXg+LFxuICpcdHNoaW5pbmVzczogPGZsb2F0PixcbiAqXHRvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqXHRtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGxpZ2h0TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICpcdGFvTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICpcdGVtaXNzaXZlOiA8aGV4PixcbiAqXHRlbWlzc2l2ZUludGVuc2l0eTogPGZsb2F0PlxuICpcdGVtaXNzaXZlTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKlx0bm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqXHRub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqXHRkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0ZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKlx0ZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKlx0c3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKlx0Y29tYmluZTogVEhSRUUuTXVsdGlwbHlPcGVyYXRpb24sXG4gKlx0cmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICpcdHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKlx0d2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKlx0d2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqXHRmbGF0U2hhZGluZzogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaFBob25nTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoUGhvbmdNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7IC8vIGRpZmZ1c2VcblxuXHRcdHRoaXMuc3BlY3VsYXIgPSBuZXcgQ29sb3IoMHgxMTExMTEpO1xuXHRcdHRoaXMuc2hpbmluZXNzID0gMzA7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuZW52TWFwID0gbnVsbDtcblx0XHR0aGlzLmNvbWJpbmUgPSBNdWx0aXBseU9wZXJhdGlvbjtcblx0XHR0aGlzLnJlZmxlY3Rpdml0eSA9IDE7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4O1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5zcGVjdWxhci5jb3B5KHNvdXJjZS5zcGVjdWxhcik7XG5cdFx0dGhpcy5zaGluaW5lc3MgPSBzb3VyY2Uuc2hpbmluZXNzO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuZW1pc3NpdmUuY29weShzb3VyY2UuZW1pc3NpdmUpO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weShzb3VyY2Uubm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBzb3VyY2Uuc3BlY3VsYXJNYXA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdGNvbG9yOiA8aGV4PixcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGdyYWRpZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRlbWlzc2l2ZTogPGhleD4sXG4gKlx0ZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXHRlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICpcdG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKlx0bm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHR3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqXHR3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hUb29uTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdUT09OJzogJydcblx0XHR9O1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoVG9vbk1hdGVyaWFsJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDB4ZmZmZmZmKTtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5ncmFkaWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoMHgwMDAwMDApO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJztcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmdyYWRpZW50TWFwID0gc291cmNlLmdyYWRpZW50TWFwO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTtcblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5lbWlzc2l2ZS5jb3B5KHNvdXJjZS5lbWlzc2l2ZSk7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5zaXR5O1xuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KHNvdXJjZS5ub3JtYWxTY2FsZSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoVG9vbk1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0YnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICpcdG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKlx0bm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PlxuICpcbiAqXHRmbGF0U2hhZGluZzogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaE5vcm1hbE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaE5vcm1hbE1hdGVyaWFsJztcblx0XHR0aGlzLmJ1bXBNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gMTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLmZvZyA9IGZhbHNlO1xuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KHNvdXJjZS5ub3JtYWxTY2FsZSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gc291cmNlLmZsYXRTaGFkaW5nO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaE5vcm1hbE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRlbWlzc2l2ZTogPGhleD4sXG4gKlx0ZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXHRlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0c3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKlx0Y29tYmluZTogVEhSRUUuTXVsdGlwbHksXG4gKlx0cmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICpcdHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKlx0d2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKlx0d2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoTGFtYmVydE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaExhbWJlcnRNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7IC8vIGRpZmZ1c2VcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvcigweDAwMDAwMCk7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gbnVsbDtcblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gbnVsbDtcblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSAxO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTtcblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5lbWlzc2l2ZS5jb3B5KHNvdXJjZS5lbWlzc2l2ZSk7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5zaXR5O1xuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBzb3VyY2Uuc3BlY3VsYXJNYXA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoTGFtYmVydE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdG1hdGNhcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKlx0bm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqXHRub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqXHRkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0ZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKlx0ZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGZsYXRTaGFkaW5nOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoTWF0Y2FwTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdNQVRDQVAnOiAnJ1xuXHRcdH07XG5cdFx0dGhpcy50eXBlID0gJ01lc2hNYXRjYXBNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7IC8vIGRpZmZ1c2VcblxuXHRcdHRoaXMubWF0Y2FwID0gbnVsbDtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXHRcdFx0J01BVENBUCc6ICcnXG5cdFx0fTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLm1hdGNhcCA9IHNvdXJjZS5tYXRjYXA7XG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KHNvdXJjZS5ub3JtYWxTY2FsZSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gc291cmNlLmZsYXRTaGFkaW5nO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaE1hdGNhcE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqXHRzY2FsZTogPGZsb2F0PixcbiAqXHRkYXNoU2l6ZTogPGZsb2F0PixcbiAqXHRnYXBTaXplOiA8ZmxvYXQ+XG4gKiB9XG4gKi9cblxuY2xhc3MgTGluZURhc2hlZE1hdGVyaWFsIGV4dGVuZHMgTGluZUJhc2ljTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZURhc2hlZE1hdGVyaWFsJztcblx0XHR0aGlzLnNjYWxlID0gMTtcblx0XHR0aGlzLmRhc2hTaXplID0gMztcblx0XHR0aGlzLmdhcFNpemUgPSAxO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5zY2FsZSA9IHNvdXJjZS5zY2FsZTtcblx0XHR0aGlzLmRhc2hTaXplID0gc291cmNlLmRhc2hTaXplO1xuXHRcdHRoaXMuZ2FwU2l6ZSA9IHNvdXJjZS5nYXBTaXplO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTGluZURhc2hlZE1hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbCA9IHRydWU7XG5cbnZhciBNYXRlcmlhbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0U2hhZG93TWF0ZXJpYWw6IFNoYWRvd01hdGVyaWFsLFxuXHRTcHJpdGVNYXRlcmlhbDogU3ByaXRlTWF0ZXJpYWwsXG5cdFJhd1NoYWRlck1hdGVyaWFsOiBSYXdTaGFkZXJNYXRlcmlhbCxcblx0U2hhZGVyTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsLFxuXHRQb2ludHNNYXRlcmlhbDogUG9pbnRzTWF0ZXJpYWwsXG5cdE1lc2hQaHlzaWNhbE1hdGVyaWFsOiBNZXNoUGh5c2ljYWxNYXRlcmlhbCxcblx0TWVzaFN0YW5kYXJkTWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHRNZXNoUGhvbmdNYXRlcmlhbDogTWVzaFBob25nTWF0ZXJpYWwsXG5cdE1lc2hUb29uTWF0ZXJpYWw6IE1lc2hUb29uTWF0ZXJpYWwsXG5cdE1lc2hOb3JtYWxNYXRlcmlhbDogTWVzaE5vcm1hbE1hdGVyaWFsLFxuXHRNZXNoTGFtYmVydE1hdGVyaWFsOiBNZXNoTGFtYmVydE1hdGVyaWFsLFxuXHRNZXNoRGVwdGhNYXRlcmlhbDogTWVzaERlcHRoTWF0ZXJpYWwsXG5cdE1lc2hEaXN0YW5jZU1hdGVyaWFsOiBNZXNoRGlzdGFuY2VNYXRlcmlhbCxcblx0TWVzaEJhc2ljTWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsLFxuXHRNZXNoTWF0Y2FwTWF0ZXJpYWw6IE1lc2hNYXRjYXBNYXRlcmlhbCxcblx0TGluZURhc2hlZE1hdGVyaWFsOiBMaW5lRGFzaGVkTWF0ZXJpYWwsXG5cdExpbmVCYXNpY01hdGVyaWFsOiBMaW5lQmFzaWNNYXRlcmlhbCxcblx0TWF0ZXJpYWw6IE1hdGVyaWFsXG59KTtcblxuY29uc3QgQW5pbWF0aW9uVXRpbHMgPSB7XG5cdC8vIHNhbWUgYXMgQXJyYXkucHJvdG90eXBlLnNsaWNlLCBidXQgYWxzbyB3b3JrcyBvbiB0eXBlZCBhcnJheXNcblx0YXJyYXlTbGljZTogZnVuY3Rpb24gKGFycmF5LCBmcm9tLCB0bykge1xuXHRcdGlmIChBbmltYXRpb25VdGlscy5pc1R5cGVkQXJyYXkoYXJyYXkpKSB7XG5cdFx0XHQvLyBpbiBpb3M5IGFycmF5LnN1YmFycmF5KGZyb20sIHVuZGVmaW5lZCkgd2lsbCByZXR1cm4gZW1wdHkgYXJyYXlcblx0XHRcdC8vIGJ1dCBhcnJheS5zdWJhcnJheShmcm9tKSBvciBhcnJheS5zdWJhcnJheShmcm9tLCBsZW4pIGlzIGNvcnJlY3Rcblx0XHRcdHJldHVybiBuZXcgYXJyYXkuY29uc3RydWN0b3IoYXJyYXkuc3ViYXJyYXkoZnJvbSwgdG8gIT09IHVuZGVmaW5lZCA/IHRvIDogYXJyYXkubGVuZ3RoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFycmF5LnNsaWNlKGZyb20sIHRvKTtcblx0fSxcblx0Ly8gY29udmVydHMgYW4gYXJyYXkgdG8gYSBzcGVjaWZpYyB0eXBlXG5cdGNvbnZlcnRBcnJheTogZnVuY3Rpb24gKGFycmF5LCB0eXBlLCBmb3JjZUNsb25lKSB7XG5cdFx0aWYgKCFhcnJheSB8fCAvLyBsZXQgJ3VuZGVmaW5lZCcgYW5kICdudWxsJyBwYXNzXG5cdFx0IWZvcmNlQ2xvbmUgJiYgYXJyYXkuY29uc3RydWN0b3IgPT09IHR5cGUpIHJldHVybiBhcnJheTtcblxuXHRcdGlmICh0eXBlb2YgdHlwZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBuZXcgdHlwZShhcnJheSk7IC8vIGNyZWF0ZSB0eXBlZCBhcnJheVxuXHRcdH1cblxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJheSk7IC8vIGNyZWF0ZSBBcnJheVxuXHR9LFxuXHRpc1R5cGVkQXJyYXk6IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0XHRyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkgJiYgIShvYmplY3QgaW5zdGFuY2VvZiBEYXRhVmlldyk7XG5cdH0sXG5cdC8vIHJldHVybnMgYW4gYXJyYXkgYnkgd2hpY2ggdGltZXMgYW5kIHZhbHVlcyBjYW4gYmUgc29ydGVkXG5cdGdldEtleWZyYW1lT3JkZXI6IGZ1bmN0aW9uICh0aW1lcykge1xuXHRcdGZ1bmN0aW9uIGNvbXBhcmVUaW1lKGksIGopIHtcblx0XHRcdHJldHVybiB0aW1lc1tpXSAtIHRpbWVzW2pdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG4gPSB0aW1lcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KG4pO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG47ICsraSkgcmVzdWx0W2ldID0gaTtcblxuXHRcdHJlc3VsdC5zb3J0KGNvbXBhcmVUaW1lKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXHQvLyB1c2VzIHRoZSBhcnJheSBwcmV2aW91c2x5IHJldHVybmVkIGJ5ICdnZXRLZXlmcmFtZU9yZGVyJyB0byBzb3J0IGRhdGFcblx0c29ydGVkQXJyYXk6IGZ1bmN0aW9uICh2YWx1ZXMsIHN0cmlkZSwgb3JkZXIpIHtcblx0XHRjb25zdCBuVmFsdWVzID0gdmFsdWVzLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgdmFsdWVzLmNvbnN0cnVjdG9yKG5WYWx1ZXMpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGRzdE9mZnNldCA9IDA7IGRzdE9mZnNldCAhPT0gblZhbHVlczsgKytpKSB7XG5cdFx0XHRjb25zdCBzcmNPZmZzZXQgPSBvcmRlcltpXSAqIHN0cmlkZTtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogIT09IHN0cmlkZTsgKytqKSB7XG5cdFx0XHRcdHJlc3VsdFtkc3RPZmZzZXQrK10gPSB2YWx1ZXNbc3JjT2Zmc2V0ICsgal07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0Ly8gZnVuY3Rpb24gZm9yIHBhcnNpbmcgQU9TIGtleWZyYW1lIGZvcm1hdHNcblx0ZmxhdHRlbkpTT046IGZ1bmN0aW9uIChqc29uS2V5cywgdGltZXMsIHZhbHVlcywgdmFsdWVQcm9wZXJ0eU5hbWUpIHtcblx0XHRsZXQgaSA9IDEsXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzWzBdO1xuXG5cdFx0d2hpbGUgKGtleSAhPT0gdW5kZWZpbmVkICYmIGtleVt2YWx1ZVByb3BlcnR5TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0a2V5ID0ganNvbktleXNbaSsrXTtcblx0XHR9XG5cblx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbm8gZGF0YVxuXG5cdFx0bGV0IHZhbHVlID0ga2V5W3ZhbHVlUHJvcGVydHlOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBubyBkYXRhXG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGRvIHtcblx0XHRcdFx0dmFsdWUgPSBrZXlbdmFsdWVQcm9wZXJ0eU5hbWVdO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGltZXMucHVzaChrZXkudGltZSk7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2guYXBwbHkodmFsdWVzLCB2YWx1ZSk7IC8vIHB1c2ggYWxsIGVsZW1lbnRzXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXkgPSBqc29uS2V5c1tpKytdO1xuXHRcdFx0fSB3aGlsZSAoa2V5ICE9PSB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUudG9BcnJheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyAuLi5hc3N1bWUgVEhSRUUuTWF0aC1pc2hcblx0XHRcdGRvIHtcblx0XHRcdFx0dmFsdWUgPSBrZXlbdmFsdWVQcm9wZXJ0eU5hbWVdO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGltZXMucHVzaChrZXkudGltZSk7XG5cdFx0XHRcdFx0dmFsdWUudG9BcnJheSh2YWx1ZXMsIHZhbHVlcy5sZW5ndGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbaSsrXTtcblx0XHRcdH0gd2hpbGUgKGtleSAhPT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHB1c2ggYXMtaXNcblx0XHRcdGRvIHtcblx0XHRcdFx0dmFsdWUgPSBrZXlbdmFsdWVQcm9wZXJ0eU5hbWVdO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGltZXMucHVzaChrZXkudGltZSk7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbaSsrXTtcblx0XHRcdH0gd2hpbGUgKGtleSAhPT0gdW5kZWZpbmVkKTtcblx0XHR9XG5cdH0sXG5cdHN1YmNsaXA6IGZ1bmN0aW9uIChzb3VyY2VDbGlwLCBuYW1lLCBzdGFydEZyYW1lLCBlbmRGcmFtZSwgZnBzID0gMzApIHtcblx0XHRjb25zdCBjbGlwID0gc291cmNlQ2xpcC5jbG9uZSgpO1xuXHRcdGNsaXAubmFtZSA9IG5hbWU7XG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRjb25zdCB0cmFjayA9IGNsaXAudHJhY2tzW2ldO1xuXHRcdFx0Y29uc3QgdmFsdWVTaXplID0gdHJhY2suZ2V0VmFsdWVTaXplKCk7XG5cdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgdHJhY2sudGltZXMubGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y29uc3QgZnJhbWUgPSB0cmFjay50aW1lc1tqXSAqIGZwcztcblx0XHRcdFx0aWYgKGZyYW1lIDwgc3RhcnRGcmFtZSB8fCBmcmFtZSA+PSBlbmRGcmFtZSkgY29udGludWU7XG5cdFx0XHRcdHRpbWVzLnB1c2godHJhY2sudGltZXNbal0pO1xuXG5cdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgdmFsdWVTaXplOyArK2spIHtcblx0XHRcdFx0XHR2YWx1ZXMucHVzaCh0cmFjay52YWx1ZXNbaiAqIHZhbHVlU2l6ZSArIGtdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGltZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblx0XHRcdHRyYWNrLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KHRpbWVzLCB0cmFjay50aW1lcy5jb25zdHJ1Y3Rvcik7XG5cdFx0XHR0cmFjay52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkodmFsdWVzLCB0cmFjay52YWx1ZXMuY29uc3RydWN0b3IpO1xuXHRcdFx0dHJhY2tzLnB1c2godHJhY2spO1xuXHRcdH1cblxuXHRcdGNsaXAudHJhY2tzID0gdHJhY2tzOyAvLyBmaW5kIG1pbmltdW0gLnRpbWVzIHZhbHVlIGFjcm9zcyBhbGwgdHJhY2tzIGluIHRoZSB0cmltbWVkIGNsaXBcblxuXHRcdGxldCBtaW5TdGFydFRpbWUgPSBJbmZpbml0eTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xpcC50cmFja3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChtaW5TdGFydFRpbWUgPiBjbGlwLnRyYWNrc1tpXS50aW1lc1swXSkge1xuXHRcdFx0XHRtaW5TdGFydFRpbWUgPSBjbGlwLnRyYWNrc1tpXS50aW1lc1swXTtcblx0XHRcdH1cblx0XHR9IC8vIHNoaWZ0IGFsbCB0cmFja3Mgc3VjaCB0aGF0IGNsaXAgYmVnaW5zIGF0IHQ9MFxuXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRjbGlwLnRyYWNrc1tpXS5zaGlmdCgtMSAqIG1pblN0YXJ0VGltZSk7XG5cdFx0fVxuXG5cdFx0Y2xpcC5yZXNldER1cmF0aW9uKCk7XG5cdFx0cmV0dXJuIGNsaXA7XG5cdH0sXG5cdG1ha2VDbGlwQWRkaXRpdmU6IGZ1bmN0aW9uICh0YXJnZXRDbGlwLCByZWZlcmVuY2VGcmFtZSA9IDAsIHJlZmVyZW5jZUNsaXAgPSB0YXJnZXRDbGlwLCBmcHMgPSAzMCkge1xuXHRcdGlmIChmcHMgPD0gMCkgZnBzID0gMzA7XG5cdFx0Y29uc3QgbnVtVHJhY2tzID0gcmVmZXJlbmNlQ2xpcC50cmFja3MubGVuZ3RoO1xuXHRcdGNvbnN0IHJlZmVyZW5jZVRpbWUgPSByZWZlcmVuY2VGcmFtZSAvIGZwczsgLy8gTWFrZSBlYWNoIHRyYWNrJ3MgdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSB2YWx1ZXMgYXQgdGhlIHJlZmVyZW5jZSBmcmFtZVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkge1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlVHJhY2sgPSByZWZlcmVuY2VDbGlwLnRyYWNrc1tpXTtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVRyYWNrVHlwZSA9IHJlZmVyZW5jZVRyYWNrLlZhbHVlVHlwZU5hbWU7IC8vIFNraXAgdGhpcyB0cmFjayBpZiBpdCdzIG5vbi1udW1lcmljXG5cblx0XHRcdGlmIChyZWZlcmVuY2VUcmFja1R5cGUgPT09ICdib29sJyB8fCByZWZlcmVuY2VUcmFja1R5cGUgPT09ICdzdHJpbmcnKSBjb250aW51ZTsgLy8gRmluZCB0aGUgdHJhY2sgaW4gdGhlIHRhcmdldCBjbGlwIHdob3NlIG5hbWUgYW5kIHR5cGUgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHRyYWNrXG5cblx0XHRcdGNvbnN0IHRhcmdldFRyYWNrID0gdGFyZ2V0Q2xpcC50cmFja3MuZmluZChmdW5jdGlvbiAodHJhY2spIHtcblx0XHRcdFx0cmV0dXJuIHRyYWNrLm5hbWUgPT09IHJlZmVyZW5jZVRyYWNrLm5hbWUgJiYgdHJhY2suVmFsdWVUeXBlTmFtZSA9PT0gcmVmZXJlbmNlVHJhY2tUeXBlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAodGFyZ2V0VHJhY2sgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cdFx0XHRsZXQgcmVmZXJlbmNlT2Zmc2V0ID0gMDtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVZhbHVlU2l6ZSA9IHJlZmVyZW5jZVRyYWNrLmdldFZhbHVlU2l6ZSgpO1xuXG5cdFx0XHRpZiAocmVmZXJlbmNlVHJhY2suY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUpIHtcblx0XHRcdFx0cmVmZXJlbmNlT2Zmc2V0ID0gcmVmZXJlbmNlVmFsdWVTaXplIC8gMztcblx0XHRcdH1cblxuXHRcdFx0bGV0IHRhcmdldE9mZnNldCA9IDA7XG5cdFx0XHRjb25zdCB0YXJnZXRWYWx1ZVNpemUgPSB0YXJnZXRUcmFjay5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdFx0aWYgKHRhcmdldFRyYWNrLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lKSB7XG5cdFx0XHRcdHRhcmdldE9mZnNldCA9IHRhcmdldFZhbHVlU2l6ZSAvIDM7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IHJlZmVyZW5jZVRyYWNrLnRpbWVzLmxlbmd0aCAtIDE7XG5cdFx0XHRsZXQgcmVmZXJlbmNlVmFsdWU7IC8vIEZpbmQgdGhlIHZhbHVlIHRvIHN1YnRyYWN0IG91dCBvZiB0aGUgdHJhY2tcblxuXHRcdFx0aWYgKHJlZmVyZW5jZVRpbWUgPD0gcmVmZXJlbmNlVHJhY2sudGltZXNbMF0pIHtcblx0XHRcdFx0Ly8gUmVmZXJlbmNlIGZyYW1lIGlzIGVhcmxpZXIgdGhhbiB0aGUgZmlyc3Qga2V5ZnJhbWUsIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBrZXlmcmFtZVxuXHRcdFx0XHRjb25zdCBzdGFydEluZGV4ID0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBlbmRJbmRleCA9IHJlZmVyZW5jZVZhbHVlU2l6ZSAtIHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0cmVmZXJlbmNlVmFsdWUgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKHJlZmVyZW5jZVRyYWNrLnZhbHVlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdFx0fSBlbHNlIGlmIChyZWZlcmVuY2VUaW1lID49IHJlZmVyZW5jZVRyYWNrLnRpbWVzW2xhc3RJbmRleF0pIHtcblx0XHRcdFx0Ly8gUmVmZXJlbmNlIGZyYW1lIGlzIGFmdGVyIHRoZSBsYXN0IGtleWZyYW1lLCBzbyBqdXN0IHVzZSB0aGUgbGFzdCBrZXlmcmFtZVxuXHRcdFx0XHRjb25zdCBzdGFydEluZGV4ID0gbGFzdEluZGV4ICogcmVmZXJlbmNlVmFsdWVTaXplICsgcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyByZWZlcmVuY2VWYWx1ZVNpemUgLSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdHJlZmVyZW5jZVZhbHVlID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZShyZWZlcmVuY2VUcmFjay52YWx1ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEludGVycG9sYXRlIHRvIHRoZSByZWZlcmVuY2UgdmFsdWVcblx0XHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSByZWZlcmVuY2VUcmFjay5jcmVhdGVJbnRlcnBvbGFudCgpO1xuXHRcdFx0XHRjb25zdCBzdGFydEluZGV4ID0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBlbmRJbmRleCA9IHJlZmVyZW5jZVZhbHVlU2l6ZSAtIHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0aW50ZXJwb2xhbnQuZXZhbHVhdGUocmVmZXJlbmNlVGltZSk7XG5cdFx0XHRcdHJlZmVyZW5jZVZhbHVlID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZShpbnRlcnBvbGFudC5yZXN1bHRCdWZmZXIsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblx0XHRcdH0gLy8gQ29uanVnYXRlIHRoZSBxdWF0ZXJuaW9uXG5cblxuXHRcdFx0aWYgKHJlZmVyZW5jZVRyYWNrVHlwZSA9PT0gJ3F1YXRlcm5pb24nKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZVF1YXQgPSBuZXcgUXVhdGVybmlvbigpLmZyb21BcnJheShyZWZlcmVuY2VWYWx1ZSkubm9ybWFsaXplKCkuY29uanVnYXRlKCk7XG5cdFx0XHRcdHJlZmVyZW5jZVF1YXQudG9BcnJheShyZWZlcmVuY2VWYWx1ZSk7XG5cdFx0XHR9IC8vIFN1YnRyYWN0IHRoZSByZWZlcmVuY2UgdmFsdWUgZnJvbSBhbGwgb2YgdGhlIHRyYWNrIHZhbHVlc1xuXG5cblx0XHRcdGNvbnN0IG51bVRpbWVzID0gdGFyZ2V0VHJhY2sudGltZXMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG51bVRpbWVzOyArK2opIHtcblx0XHRcdFx0Y29uc3QgdmFsdWVTdGFydCA9IGogKiB0YXJnZXRWYWx1ZVNpemUgKyB0YXJnZXRPZmZzZXQ7XG5cblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRyYWNrVHlwZSA9PT0gJ3F1YXRlcm5pb24nKSB7XG5cdFx0XHRcdFx0Ly8gTXVsdGlwbHkgdGhlIGNvbmp1Z2F0ZSBmb3IgcXVhdGVybmlvbiB0cmFjayB0eXBlc1xuXHRcdFx0XHRcdFF1YXRlcm5pb24ubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodGFyZ2V0VHJhY2sudmFsdWVzLCB2YWx1ZVN0YXJ0LCByZWZlcmVuY2VWYWx1ZSwgMCwgdGFyZ2V0VHJhY2sudmFsdWVzLCB2YWx1ZVN0YXJ0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUVuZCA9IHRhcmdldFZhbHVlU2l6ZSAtIHRhcmdldE9mZnNldCAqIDI7IC8vIFN1YnRyYWN0IGVhY2ggdmFsdWUgZm9yIGFsbCBvdGhlciBudW1lcmljIHRyYWNrIHR5cGVzXG5cblx0XHRcdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IHZhbHVlRW5kOyArK2spIHtcblx0XHRcdFx0XHRcdHRhcmdldFRyYWNrLnZhbHVlc1t2YWx1ZVN0YXJ0ICsga10gLT0gcmVmZXJlbmNlVmFsdWVba107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGFyZ2V0Q2xpcC5ibGVuZE1vZGUgPSBBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTtcblx0XHRyZXR1cm4gdGFyZ2V0Q2xpcDtcblx0fVxufTtcblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIG9mIGludGVycG9sYW50cyBvdmVyIHBhcmFtZXRyaWMgc2FtcGxlcy5cbiAqXG4gKiBUaGUgcGFyYW1ldGVyIGRvbWFpbiBpcyBvbmUgZGltZW5zaW9uYWwsIHR5cGljYWxseSB0aGUgdGltZSBvciBhIHBhdGhcbiAqIGFsb25nIGEgY3VydmUgZGVmaW5lZCBieSB0aGUgZGF0YS5cbiAqXG4gKiBUaGUgc2FtcGxlIHZhbHVlcyBjYW4gaGF2ZSBhbnkgZGltZW5zaW9uYWxpdHkgYW5kIGRlcml2ZWQgY2xhc3NlcyBtYXlcbiAqIGFwcGx5IHNwZWNpYWwgaW50ZXJwcmV0YXRpb25zIHRvIHRoZSBkYXRhLlxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIGludGVydmFsIHNlZWsgaW4gYSBUZW1wbGF0ZSBNZXRob2QsIGRlZmVycmluZ1xuICogdGhlIGFjdHVhbCBpbnRlcnBvbGF0aW9uIHRvIGRlcml2ZWQgY2xhc3Nlcy5cbiAqXG4gKiBUaW1lIGNvbXBsZXhpdHkgaXMgTygxKSBmb3IgbGluZWFyIGFjY2VzcyBjcm9zc2luZyBhdCBtb3N0IHR3byBwb2ludHNcbiAqIGFuZCBPKGxvZyBOKSBmb3IgcmFuZG9tIGFjY2Vzcywgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9ucy5cbiAqXG4gKiBSZWZlcmVuY2VzOlxuICpcbiAqIFx0XHRodHRwOi8vd3d3Lm9vZGVzaWduLmNvbS90ZW1wbGF0ZS1tZXRob2QtcGF0dGVybi5odG1sXG4gKlxuICovXG5jbGFzcyBJbnRlcnBvbGFudCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpIHtcblx0XHR0aGlzLnBhcmFtZXRlclBvc2l0aW9ucyA9IHBhcmFtZXRlclBvc2l0aW9ucztcblx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IDA7XG5cdFx0dGhpcy5yZXN1bHRCdWZmZXIgPSByZXN1bHRCdWZmZXIgIT09IHVuZGVmaW5lZCA/IHJlc3VsdEJ1ZmZlciA6IG5ldyBzYW1wbGVWYWx1ZXMuY29uc3RydWN0b3Ioc2FtcGxlU2l6ZSk7XG5cdFx0dGhpcy5zYW1wbGVWYWx1ZXMgPSBzYW1wbGVWYWx1ZXM7XG5cdFx0dGhpcy52YWx1ZVNpemUgPSBzYW1wbGVTaXplO1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBudWxsO1xuXHRcdHRoaXMuRGVmYXVsdFNldHRpbmdzXyA9IHt9O1xuXHR9XG5cblx0ZXZhbHVhdGUodCkge1xuXHRcdGNvbnN0IHBwID0gdGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7XG5cdFx0bGV0IGkxID0gdGhpcy5fY2FjaGVkSW5kZXgsXG5cdFx0XHRcdHQxID0gcHBbaTFdLFxuXHRcdFx0XHR0MCA9IHBwW2kxIC0gMV07XG5cblx0XHR2YWxpZGF0ZV9pbnRlcnZhbDoge1xuXHRcdFx0c2Vlazoge1xuXHRcdFx0XHRsZXQgcmlnaHQ7XG5cblx0XHRcdFx0bGluZWFyX3NjYW46IHtcblx0XHRcdFx0XHQvLy0gU2VlIGh0dHA6Ly9qc3BlcmYuY29tL2NvbXBhcmlzb24tdG8tdW5kZWZpbmVkLzNcblx0XHRcdFx0XHQvLy0gc2xvd2VyIGNvZGU6XG5cdFx0XHRcdFx0Ly8tXG5cdFx0XHRcdFx0Ly8tIFx0XHRcdFx0aWYgKCB0ID49IHQxIHx8IHQxID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0Zm9yd2FyZF9zY2FuOiBpZiAoISh0IDwgdDEpKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBnaXZlVXBBdCA9IGkxICsgMjs7KSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0MSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHQgPCB0MCkgYnJlYWsgZm9yd2FyZF9zY2FuOyAvLyBhZnRlciBlbmRcblxuXHRcdFx0XHRcdFx0XHRcdGkxID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKGkxIC0gMSwgdCwgdDApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGkxID09PSBnaXZlVXBBdCkgYnJlYWs7IC8vIHRoaXMgbG9vcFxuXG5cdFx0XHRcdFx0XHRcdHQwID0gdDE7XG5cdFx0XHRcdFx0XHRcdHQxID0gcHBbKytpMV07XG5cblx0XHRcdFx0XHRcdFx0aWYgKHQgPCB0MSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWsgc2Vlaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSAvLyBwcmVwYXJlIGJpbmFyeSBzZWFyY2ggb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGluZGV4XG5cblxuXHRcdFx0XHRcdFx0cmlnaHQgPSBwcC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRicmVhayBsaW5lYXJfc2Nhbjtcblx0XHRcdFx0XHR9IC8vLSBzbG93ZXIgY29kZTpcblx0XHRcdFx0XHQvLy1cdFx0XHRcdFx0aWYgKCB0IDwgdDAgfHwgdDAgPT09IHVuZGVmaW5lZCApIHtcblxuXG5cdFx0XHRcdFx0aWYgKCEodCA+PSB0MCkpIHtcblx0XHRcdFx0XHRcdC8vIGxvb3Bpbmc/XG5cdFx0XHRcdFx0XHRjb25zdCB0MWdsb2JhbCA9IHBwWzFdO1xuXG5cdFx0XHRcdFx0XHRpZiAodCA8IHQxZ2xvYmFsKSB7XG5cdFx0XHRcdFx0XHRcdGkxID0gMjsgLy8gKyAxLCB1c2luZyB0aGUgc2NhbiBmb3IgdGhlIGRldGFpbHNcblxuXHRcdFx0XHRcdFx0XHR0MCA9IHQxZ2xvYmFsO1xuXHRcdFx0XHRcdFx0fSAvLyBsaW5lYXIgcmV2ZXJzZSBzY2FuXG5cblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l2ZVVwQXQgPSBpMSAtIDI7Oykge1xuXHRcdFx0XHRcdFx0XHRpZiAodDAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJlZm9yZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oMCwgdCwgdDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGkxID09PSBnaXZlVXBBdCkgYnJlYWs7IC8vIHRoaXMgbG9vcFxuXG5cdFx0XHRcdFx0XHRcdHQxID0gdDA7XG5cdFx0XHRcdFx0XHRcdHQwID0gcHBbLS1pMSAtIDFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0ID49IHQwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhcnJpdmVkIGF0IHRoZSBzb3VnaHQgaW50ZXJ2YWxcblx0XHRcdFx0XHRcdFx0XHRicmVhayBzZWVrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IC8vIHByZXBhcmUgYmluYXJ5IHNlYXJjaCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbmRleFxuXG5cblx0XHRcdFx0XHRcdHJpZ2h0ID0gaTE7XG5cdFx0XHRcdFx0XHRpMSA9IDA7XG5cdFx0XHRcdFx0XHRicmVhayBsaW5lYXJfc2Nhbjtcblx0XHRcdFx0XHR9IC8vIHRoZSBpbnRlcnZhbCBpcyB2YWxpZFxuXG5cblx0XHRcdFx0XHRicmVhayB2YWxpZGF0ZV9pbnRlcnZhbDtcblx0XHRcdFx0fSAvLyBsaW5lYXIgc2NhblxuXHRcdFx0XHQvLyBiaW5hcnkgc2VhcmNoXG5cblxuXHRcdFx0XHR3aGlsZSAoaTEgPCByaWdodCkge1xuXHRcdFx0XHRcdGNvbnN0IG1pZCA9IGkxICsgcmlnaHQgPj4+IDE7XG5cblx0XHRcdFx0XHRpZiAodCA8IHBwW21pZF0pIHtcblx0XHRcdFx0XHRcdHJpZ2h0ID0gbWlkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpMSA9IG1pZCArIDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dDEgPSBwcFtpMV07XG5cdFx0XHRcdHQwID0gcHBbaTEgLSAxXTsgLy8gY2hlY2sgYm91bmRhcnkgY2FzZXMsIGFnYWluXG5cblx0XHRcdFx0aWYgKHQwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IDA7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYmVmb3JlU3RhcnRfKDAsIHQsIHQxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0MSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aTEgPSBwcC5sZW5ndGg7XG5cdFx0XHRcdFx0dGhpcy5fY2FjaGVkSW5kZXggPSBpMTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hZnRlckVuZF8oaTEgLSAxLCB0MCwgdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gc2Vla1xuXG5cblx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cdFx0XHR0aGlzLmludGVydmFsQ2hhbmdlZF8oaTEsIHQwLCB0MSk7XG5cdFx0fSAvLyB2YWxpZGF0ZV9pbnRlcnZhbFxuXG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaTEsIHQwLCB0LCB0MSk7XG5cdH1cblxuXHRnZXRTZXR0aW5nc18oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3MgfHwgdGhpcy5EZWZhdWx0U2V0dGluZ3NfO1xuXHR9XG5cblx0Y29weVNhbXBsZVZhbHVlXyhpbmRleCkge1xuXHRcdC8vIGNvcGllcyBhIHNhbXBsZSB2YWx1ZSB0byB0aGUgcmVzdWx0IGJ1ZmZlclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG9mZnNldCA9IGluZGV4ICogc3RyaWRlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKytpKSB7XG5cdFx0XHRyZXN1bHRbaV0gPSB2YWx1ZXNbb2Zmc2V0ICsgaV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSAvLyBUZW1wbGF0ZSBtZXRob2RzIGZvciBkZXJpdmVkIGNsYXNzZXM6XG5cblxuXHRpbnRlcnBvbGF0ZV8oKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCcpOyAvLyBpbXBsZW1lbnRhdGlvbnMgc2hhbGwgcmV0dXJuIHRoaXMucmVzdWx0QnVmZmVyXG5cdH1cblxuXHRpbnRlcnZhbENoYW5nZWRfKCkgey8vIGVtcHR5XG5cdH1cblxufSAvLyBBTElBUyBERUZJTklUSU9OU1xuXG5cbkludGVycG9sYW50LnByb3RvdHlwZS5iZWZvcmVTdGFydF8gPSBJbnRlcnBvbGFudC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXztcbkludGVycG9sYW50LnByb3RvdHlwZS5hZnRlckVuZF8gPSBJbnRlcnBvbGFudC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXztcblxuLyoqXG4gKiBGYXN0IGFuZCBzaW1wbGUgY3ViaWMgc3BsaW5lIGludGVycG9sYW50LlxuICpcbiAqIEl0IHdhcyBkZXJpdmVkIGZyb20gYSBIZXJtaXRpYW4gY29uc3RydWN0aW9uIHNldHRpbmcgdGhlIGZpcnN0IGRlcml2YXRpdmVcbiAqIGF0IGVhY2ggc2FtcGxlIHBvc2l0aW9uIHRvIHRoZSBsaW5lYXIgc2xvcGUgYmV0d2VlbiBuZWlnaGJvcmluZyBwb3NpdGlvbnNcbiAqIG92ZXIgdGhlaXIgcGFyYW1ldGVyIGludGVydmFsLlxuICovXG5cbmNsYXNzIEN1YmljSW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKTtcblx0XHR0aGlzLl93ZWlnaHRQcmV2ID0gLTA7XG5cdFx0dGhpcy5fb2Zmc2V0UHJldiA9IC0wO1xuXHRcdHRoaXMuX3dlaWdodE5leHQgPSAtMDtcblx0XHR0aGlzLl9vZmZzZXROZXh0ID0gLTA7XG5cdFx0dGhpcy5EZWZhdWx0U2V0dGluZ3NfID0ge1xuXHRcdFx0ZW5kaW5nU3RhcnQ6IFplcm9DdXJ2YXR1cmVFbmRpbmcsXG5cdFx0XHRlbmRpbmdFbmQ6IFplcm9DdXJ2YXR1cmVFbmRpbmdcblx0XHR9O1xuXHR9XG5cblx0aW50ZXJ2YWxDaGFuZ2VkXyhpMSwgdDAsIHQxKSB7XG5cdFx0Y29uc3QgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucztcblx0XHRsZXQgaVByZXYgPSBpMSAtIDIsXG5cdFx0XHRcdGlOZXh0ID0gaTEgKyAxLFxuXHRcdFx0XHR0UHJldiA9IHBwW2lQcmV2XSxcblx0XHRcdFx0dE5leHQgPSBwcFtpTmV4dF07XG5cblx0XHRpZiAodFByZXYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3dpdGNoICh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KSB7XG5cdFx0XHRcdGNhc2UgWmVyb1Nsb3BlRW5kaW5nOlxuXHRcdFx0XHRcdC8vIGYnKHQwKSA9IDBcblx0XHRcdFx0XHRpUHJldiA9IGkxO1xuXHRcdFx0XHRcdHRQcmV2ID0gMiAqIHQwIC0gdDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBXcmFwQXJvdW5kRW5kaW5nOlxuXHRcdFx0XHRcdC8vIHVzZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjdXJ2ZVxuXHRcdFx0XHRcdGlQcmV2ID0gcHAubGVuZ3RoIC0gMjtcblx0XHRcdFx0XHR0UHJldiA9IHQwICsgcHBbaVByZXZdIC0gcHBbaVByZXYgKyAxXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIFplcm9DdXJ2YXR1cmVFbmRpbmdcblx0XHRcdFx0XHQvLyBmJycodDApID0gMCBhLmsuYS4gTmF0dXJhbCBTcGxpbmVcblx0XHRcdFx0XHRpUHJldiA9IGkxO1xuXHRcdFx0XHRcdHRQcmV2ID0gdDE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHROZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHN3aXRjaCAodGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpIHtcblx0XHRcdFx0Y2FzZSBaZXJvU2xvcGVFbmRpbmc6XG5cdFx0XHRcdFx0Ly8gZicodE4pID0gMFxuXHRcdFx0XHRcdGlOZXh0ID0gaTE7XG5cdFx0XHRcdFx0dE5leHQgPSAyICogdDEgLSB0MDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFdyYXBBcm91bmRFbmRpbmc6XG5cdFx0XHRcdFx0Ly8gdXNlIHRoZSBvdGhlciBlbmQgb2YgdGhlIGN1cnZlXG5cdFx0XHRcdFx0aU5leHQgPSAxO1xuXHRcdFx0XHRcdHROZXh0ID0gdDEgKyBwcFsxXSAtIHBwWzBdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gWmVyb0N1cnZhdHVyZUVuZGluZ1xuXHRcdFx0XHRcdC8vIGYnJyh0TikgPSAwLCBhLmsuYS4gTmF0dXJhbCBTcGxpbmVcblx0XHRcdFx0XHRpTmV4dCA9IGkxIC0gMTtcblx0XHRcdFx0XHR0TmV4dCA9IHQwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhbGZEdCA9ICh0MSAtIHQwKSAqIDAuNSxcblx0XHRcdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZTtcblx0XHR0aGlzLl93ZWlnaHRQcmV2ID0gaGFsZkR0IC8gKHQwIC0gdFByZXYpO1xuXHRcdHRoaXMuX3dlaWdodE5leHQgPSBoYWxmRHQgLyAodE5leHQgLSB0MSk7XG5cdFx0dGhpcy5fb2Zmc2V0UHJldiA9IGlQcmV2ICogc3RyaWRlO1xuXHRcdHRoaXMuX29mZnNldE5leHQgPSBpTmV4dCAqIHN0cmlkZTtcblx0fVxuXG5cdGludGVycG9sYXRlXyhpMSwgdDAsIHQsIHQxKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsXG5cdFx0XHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0bzEgPSBpMSAqIHN0cmlkZSxcblx0XHRcdFx0XHRvMCA9IG8xIC0gc3RyaWRlLFxuXHRcdFx0XHRcdG9QID0gdGhpcy5fb2Zmc2V0UHJldixcblx0XHRcdFx0XHRvTiA9IHRoaXMuX29mZnNldE5leHQsXG5cdFx0XHRcdFx0d1AgPSB0aGlzLl93ZWlnaHRQcmV2LFxuXHRcdFx0XHRcdHdOID0gdGhpcy5fd2VpZ2h0TmV4dCxcblx0XHRcdFx0XHRwID0gKHQgLSB0MCkgLyAodDEgLSB0MCksXG5cdFx0XHRcdFx0cHAgPSBwICogcCxcblx0XHRcdFx0XHRwcHAgPSBwcCAqIHA7IC8vIGV2YWx1YXRlIHBvbHlub21pYWxzXG5cblx0XHRjb25zdCBzUCA9IC13UCAqIHBwcCArIDIgKiB3UCAqIHBwIC0gd1AgKiBwO1xuXHRcdGNvbnN0IHMwID0gKDEgKyB3UCkgKiBwcHAgKyAoLTEuNSAtIDIgKiB3UCkgKiBwcCArICgtMC41ICsgd1ApICogcCArIDE7XG5cdFx0Y29uc3QgczEgPSAoLTEgLSB3TikgKiBwcHAgKyAoMS41ICsgd04pICogcHAgKyAwLjUgKiBwO1xuXHRcdGNvbnN0IHNOID0gd04gKiBwcHAgLSB3TiAqIHBwOyAvLyBjb21iaW5lIGRhdGEgbGluZWFybHlcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsraSkge1xuXHRcdFx0cmVzdWx0W2ldID0gc1AgKiB2YWx1ZXNbb1AgKyBpXSArIHMwICogdmFsdWVzW28wICsgaV0gKyBzMSAqIHZhbHVlc1tvMSArIGldICsgc04gKiB2YWx1ZXNbb04gKyBpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn1cblxuY2xhc3MgTGluZWFySW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKTtcblx0fVxuXG5cdGludGVycG9sYXRlXyhpMSwgdDAsIHQsIHQxKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsXG5cdFx0XHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0b2Zmc2V0MSA9IGkxICogc3RyaWRlLFxuXHRcdFx0XHRcdG9mZnNldDAgPSBvZmZzZXQxIC0gc3RyaWRlLFxuXHRcdFx0XHRcdHdlaWdodDEgPSAodCAtIHQwKSAvICh0MSAtIHQwKSxcblx0XHRcdFx0XHR3ZWlnaHQwID0gMSAtIHdlaWdodDE7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArK2kpIHtcblx0XHRcdHJlc3VsdFtpXSA9IHZhbHVlc1tvZmZzZXQwICsgaV0gKiB3ZWlnaHQwICsgdmFsdWVzW29mZnNldDEgKyBpXSAqIHdlaWdodDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59XG5cbi8qKlxuICpcbiAqIEludGVycG9sYW50IHRoYXQgZXZhbHVhdGVzIHRvIHRoZSBzYW1wbGUgdmFsdWUgYXQgdGhlIHBvc2l0aW9uIHByZWNlZWRpbmdcbiAqIHRoZSBwYXJhbWV0ZXIuXG4gKi9cblxuY2xhc3MgRGlzY3JldGVJbnRlcnBvbGFudCBleHRlbmRzIEludGVycG9sYW50IHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlcikge1xuXHRcdHN1cGVyKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpO1xuXHR9XG5cblx0aW50ZXJwb2xhdGVfKGkxXG5cdC8qLCB0MCwgdCwgdDEgKi9cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyhpMSAtIDEpO1xuXHR9XG5cbn1cblxuY2xhc3MgS2V5ZnJhbWVUcmFjayB7XG5cdGNvbnN0cnVjdG9yKG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24pIHtcblx0XHRpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkJyk7XG5cdFx0aWYgKHRpbWVzID09PSB1bmRlZmluZWQgfHwgdGltZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAnICsgbmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KHRpbWVzLCB0aGlzLlRpbWVCdWZmZXJUeXBlKTtcblx0XHR0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSh2YWx1ZXMsIHRoaXMuVmFsdWVCdWZmZXJUeXBlKTtcblx0XHR0aGlzLnNldEludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbiB8fCB0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTtcblx0fSAvLyBTZXJpYWxpemF0aW9uIChpbiBzdGF0aWMgY29udGV4dCwgYmVjYXVzZSBvZiBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uXG5cdC8vIGFuZCBhdXRvbWF0aWMgaW52b2NhdGlvbiBvZiAudG9KU09OKTpcblxuXG5cdHN0YXRpYyB0b0pTT04odHJhY2spIHtcblx0XHRjb25zdCB0cmFja1R5cGUgPSB0cmFjay5jb25zdHJ1Y3Rvcjtcblx0XHRsZXQganNvbjsgLy8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgdG9KU09OIG1ldGhvZFxuXG5cdFx0aWYgKHRyYWNrVHlwZS50b0pTT04gIT09IHRoaXMudG9KU09OKSB7XG5cdFx0XHRqc29uID0gdHJhY2tUeXBlLnRvSlNPTih0cmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB0aGUgZGF0YSBjYW4gYmUgc2VyaWFsaXplZCBhcy1pc1xuXHRcdFx0anNvbiA9IHtcblx0XHRcdFx0J25hbWUnOiB0cmFjay5uYW1lLFxuXHRcdFx0XHQndGltZXMnOiBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkodHJhY2sudGltZXMsIEFycmF5KSxcblx0XHRcdFx0J3ZhbHVlcyc6IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSh0cmFjay52YWx1ZXMsIEFycmF5KVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGludGVycG9sYXRpb24gPSB0cmFjay5nZXRJbnRlcnBvbGF0aW9uKCk7XG5cblx0XHRcdGlmIChpbnRlcnBvbGF0aW9uICE9PSB0cmFjay5EZWZhdWx0SW50ZXJwb2xhdGlvbikge1xuXHRcdFx0XHRqc29uLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGpzb24udHlwZSA9IHRyYWNrLlZhbHVlVHlwZU5hbWU7IC8vIG1hbmRhdG9yeVxuXG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZShyZXN1bHQpIHtcblx0XHRyZXR1cm4gbmV3IERpc2NyZXRlSW50ZXJwb2xhbnQodGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCk7XG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIocmVzdWx0KSB7XG5cdFx0cmV0dXJuIG5ldyBMaW5lYXJJbnRlcnBvbGFudCh0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0KTtcblx0fVxuXG5cdEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aChyZXN1bHQpIHtcblx0XHRyZXR1cm4gbmV3IEN1YmljSW50ZXJwb2xhbnQodGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCk7XG5cdH1cblxuXHRzZXRJbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb24pIHtcblx0XHRsZXQgZmFjdG9yeU1ldGhvZDtcblxuXHRcdHN3aXRjaCAoaW50ZXJwb2xhdGlvbikge1xuXHRcdFx0Y2FzZSBJbnRlcnBvbGF0ZURpc2NyZXRlOlxuXHRcdFx0XHRmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgSW50ZXJwb2xhdGVMaW5lYXI6XG5cdFx0XHRcdGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgSW50ZXJwb2xhdGVTbW9vdGg6XG5cdFx0XHRcdGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKGZhY3RvcnlNZXRob2QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9ICd1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAnICsgdGhpcy5WYWx1ZVR5cGVOYW1lICsgJyBrZXlmcmFtZSB0cmFjayBuYW1lZCAnICsgdGhpcy5uYW1lO1xuXG5cdFx0XHRpZiAodGhpcy5jcmVhdGVJbnRlcnBvbGFudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIGZhbGwgYmFjayB0byBkZWZhdWx0LCB1bmxlc3MgdGhlIGRlZmF1bHQgaXRzZWxmIGlzIG1lc3NlZCB1cFxuXHRcdFx0XHRpZiAoaW50ZXJwb2xhdGlvbiAhPT0gdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7IC8vIGZhdGFsLCBpbiB0aGlzIGNhc2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLktleWZyYW1lVHJhY2s6JywgbWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLmNyZWF0ZUludGVycG9sYW50ID0gZmFjdG9yeU1ldGhvZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEludGVycG9sYXRpb24oKSB7XG5cdFx0c3dpdGNoICh0aGlzLmNyZWF0ZUludGVycG9sYW50KSB7XG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6XG5cdFx0XHRcdHJldHVybiBJbnRlcnBvbGF0ZURpc2NyZXRlO1xuXG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOlxuXHRcdFx0XHRyZXR1cm4gSW50ZXJwb2xhdGVMaW5lYXI7XG5cblx0XHRcdGNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6XG5cdFx0XHRcdHJldHVybiBJbnRlcnBvbGF0ZVNtb290aDtcblx0XHR9XG5cdH1cblxuXHRnZXRWYWx1ZVNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCAvIHRoaXMudGltZXMubGVuZ3RoO1xuXHR9IC8vIG1vdmUgYWxsIGtleWZyYW1lcyBlaXRoZXIgZm9yd2FyZHMgb3IgYmFja3dhcmRzIGluIHRpbWVcblxuXG5cdHNoaWZ0KHRpbWVPZmZzZXQpIHtcblx0XHRpZiAodGltZU9mZnNldCAhPT0gMC4wKSB7XG5cdFx0XHRjb25zdCB0aW1lcyA9IHRoaXMudGltZXM7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0dGltZXNbaV0gKz0gdGltZU9mZnNldDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyBzY2FsZSBhbGwga2V5ZnJhbWUgdGltZXMgYnkgYSBmYWN0b3IgKHVzZWZ1bCBmb3IgZnJhbWUgPC0+IHNlY29uZHMgY29udmVyc2lvbnMpXG5cblxuXHRzY2FsZSh0aW1lU2NhbGUpIHtcblx0XHRpZiAodGltZVNjYWxlICE9PSAxLjApIHtcblx0XHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcztcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aW1lcy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0XHR0aW1lc1tpXSAqPSB0aW1lU2NhbGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gcmVtb3ZlcyBrZXlmcmFtZXMgYmVmb3JlIGFuZCBhZnRlciBhbmltYXRpb24gd2l0aG91dCBjaGFuZ2luZyBhbnkgdmFsdWVzIHdpdGhpbiB0aGUgcmFuZ2UgW3N0YXJ0VGltZSwgZW5kVGltZV0uXG5cdC8vIElNUE9SVEFOVDogV2UgZG8gbm90IHNoaWZ0IGFyb3VuZCBrZXlzIHRvIHRoZSBzdGFydCBvZiB0aGUgdHJhY2sgdGltZSwgYmVjYXVzZSBmb3IgaW50ZXJwb2xhdGVkIGtleXMgdGhpcyB3aWxsIGNoYW5nZSB0aGVpciB2YWx1ZXNcblxuXG5cdHRyaW0oc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG5cdFx0Y29uc3QgdGltZXMgPSB0aGlzLnRpbWVzLFxuXHRcdFx0XHRcdG5LZXlzID0gdGltZXMubGVuZ3RoO1xuXHRcdGxldCBmcm9tID0gMCxcblx0XHRcdFx0dG8gPSBuS2V5cyAtIDE7XG5cblx0XHR3aGlsZSAoZnJvbSAhPT0gbktleXMgJiYgdGltZXNbZnJvbV0gPCBzdGFydFRpbWUpIHtcblx0XHRcdCsrZnJvbTtcblx0XHR9XG5cblx0XHR3aGlsZSAodG8gIT09IC0xICYmIHRpbWVzW3RvXSA+IGVuZFRpbWUpIHtcblx0XHRcdC0tdG87XG5cdFx0fVxuXG5cdFx0Kyt0bzsgLy8gaW5jbHVzaXZlIC0+IGV4Y2x1c2l2ZSBib3VuZFxuXG5cdFx0aWYgKGZyb20gIT09IDAgfHwgdG8gIT09IG5LZXlzKSB7XG5cdFx0XHQvLyBlbXB0eSB0cmFja3MgYXJlIGZvcmJpZGRlbiwgc28ga2VlcCBhdCBsZWFzdCBvbmUga2V5ZnJhbWVcblx0XHRcdGlmIChmcm9tID49IHRvKSB7XG5cdFx0XHRcdHRvID0gTWF0aC5tYXgodG8sIDEpO1xuXHRcdFx0XHRmcm9tID0gdG8gLSAxO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdHJpZGUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpO1xuXHRcdFx0dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGltZXMsIGZyb20sIHRvKTtcblx0XHRcdHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywgZnJvbSAqIHN0cmlkZSwgdG8gKiBzdHJpZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIGVuc3VyZSB3ZSBkbyBub3QgZ2V0IGEgR2FyYmFnZUluR2FyYmFnZU91dCBzaXR1YXRpb24sIG1ha2Ugc3VyZSB0cmFja3MgYXJlIGF0IGxlYXN0IG1pbmltYWxseSB2aWFibGVcblxuXG5cdHZhbGlkYXRlKCkge1xuXHRcdGxldCB2YWxpZCA9IHRydWU7XG5cdFx0Y29uc3QgdmFsdWVTaXplID0gdGhpcy5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdGlmICh2YWx1ZVNpemUgLSBNYXRoLmZsb29yKHZhbHVlU2l6ZSkgIT09IDApIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4nLCB0aGlzKTtcblx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGltZXMgPSB0aGlzLnRpbWVzLFxuXHRcdFx0XHRcdHZhbHVlcyA9IHRoaXMudmFsdWVzLFxuXHRcdFx0XHRcdG5LZXlzID0gdGltZXMubGVuZ3RoO1xuXG5cdFx0aWYgKG5LZXlzID09PSAwKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4nLCB0aGlzKTtcblx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IHByZXZUaW1lID0gbnVsbDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBuS2V5czsgaSsrKSB7XG5cdFx0XHRjb25zdCBjdXJyVGltZSA9IHRpbWVzW2ldO1xuXG5cdFx0XHRpZiAodHlwZW9mIGN1cnJUaW1lID09PSAnbnVtYmVyJyAmJiBpc05hTihjdXJyVGltZSkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgY3VyclRpbWUpO1xuXHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByZXZUaW1lICE9PSBudWxsICYmIHByZXZUaW1lID4gY3VyclRpbWUpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuJywgdGhpcywgaSwgY3VyclRpbWUsIHByZXZUaW1lKTtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHByZXZUaW1lID0gY3VyclRpbWU7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlcykpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcblxuXHRcdFx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4nLCB0aGlzLCBpLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9IC8vIHJlbW92ZXMgZXF1aXZhbGVudCBzZXF1ZW50aWFsIGtleXMgYXMgY29tbW9uIGluIG1vcnBoIHRhcmdldCBzZXF1ZW5jZXNcblx0Ly8gKDAsMCwwLDAsMSwxLDEsMCwwLDAsMCwwLDAsMCkgLS0+ICgwLDAsMSwxLDAsMClcblxuXG5cdG9wdGltaXplKCkge1xuXHRcdC8vIHRpbWVzIG9yIHZhbHVlcyBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIgdHJhY2tzLCBzbyBvdmVyd3JpdGluZyBpcyB1bnNhZmVcblx0XHRjb25zdCB0aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGhpcy50aW1lcyksXG5cdFx0XHRcdFx0dmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy5nZXRWYWx1ZVNpemUoKSxcblx0XHRcdFx0XHRzbW9vdGhJbnRlcnBvbGF0aW9uID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uKCkgPT09IEludGVycG9sYXRlU21vb3RoLFxuXHRcdFx0XHRcdGxhc3RJbmRleCA9IHRpbWVzLmxlbmd0aCAtIDE7XG5cdFx0bGV0IHdyaXRlSW5kZXggPSAxO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBsYXN0SW5kZXg7ICsraSkge1xuXHRcdFx0bGV0IGtlZXAgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHRpbWUgPSB0aW1lc1tpXTtcblx0XHRcdGNvbnN0IHRpbWVOZXh0ID0gdGltZXNbaSArIDFdOyAvLyByZW1vdmUgYWRqYWNlbnQga2V5ZnJhbWVzIHNjaGVkdWxlZCBhdCB0aGUgc2FtZSB0aW1lXG5cblx0XHRcdGlmICh0aW1lICE9PSB0aW1lTmV4dCAmJiAoaSAhPT0gMSB8fCB0aW1lICE9PSB0aW1lc1swXSkpIHtcblx0XHRcdFx0aWYgKCFzbW9vdGhJbnRlcnBvbGF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIHVubmVjZXNzYXJ5IGtleWZyYW1lcyBzYW1lIGFzIHRoZWlyIG5laWdoYm9yc1xuXHRcdFx0XHRcdGNvbnN0IG9mZnNldCA9IGkgKiBzdHJpZGUsXG5cdFx0XHRcdFx0XHRcdFx0b2Zmc2V0UCA9IG9mZnNldCAtIHN0cmlkZSxcblx0XHRcdFx0XHRcdFx0XHRvZmZzZXROID0gb2Zmc2V0ICsgc3RyaWRlO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogIT09IHN0cmlkZTsgKytqKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tvZmZzZXQgKyBqXTtcblxuXHRcdFx0XHRcdFx0aWYgKHZhbHVlICE9PSB2YWx1ZXNbb2Zmc2V0UCArIGpdIHx8IHZhbHVlICE9PSB2YWx1ZXNbb2Zmc2V0TiArIGpdKSB7XG5cdFx0XHRcdFx0XHRcdGtlZXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0a2VlcCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gaW4tcGxhY2UgY29tcGFjdGlvblxuXG5cblx0XHRcdGlmIChrZWVwKSB7XG5cdFx0XHRcdGlmIChpICE9PSB3cml0ZUluZGV4KSB7XG5cdFx0XHRcdFx0dGltZXNbd3JpdGVJbmRleF0gPSB0aW1lc1tpXTtcblx0XHRcdFx0XHRjb25zdCByZWFkT2Zmc2V0ID0gaSAqIHN0cmlkZSxcblx0XHRcdFx0XHRcdFx0XHR3cml0ZU9mZnNldCA9IHdyaXRlSW5kZXggKiBzdHJpZGU7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiAhPT0gc3RyaWRlOyArK2opIHtcblx0XHRcdFx0XHRcdHZhbHVlc1t3cml0ZU9mZnNldCArIGpdID0gdmFsdWVzW3JlYWRPZmZzZXQgKyBqXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQrK3dyaXRlSW5kZXg7XG5cdFx0XHR9XG5cdFx0fSAvLyBmbHVzaCBsYXN0IGtleWZyYW1lIChjb21wYWN0aW9uIGxvb2tzIGFoZWFkKVxuXG5cblx0XHRpZiAobGFzdEluZGV4ID4gMCkge1xuXHRcdFx0dGltZXNbd3JpdGVJbmRleF0gPSB0aW1lc1tsYXN0SW5kZXhdO1xuXG5cdFx0XHRmb3IgKGxldCByZWFkT2Zmc2V0ID0gbGFzdEluZGV4ICogc3RyaWRlLCB3cml0ZU9mZnNldCA9IHdyaXRlSW5kZXggKiBzdHJpZGUsIGogPSAwOyBqICE9PSBzdHJpZGU7ICsraikge1xuXHRcdFx0XHR2YWx1ZXNbd3JpdGVPZmZzZXQgKyBqXSA9IHZhbHVlc1tyZWFkT2Zmc2V0ICsgal07XG5cdFx0XHR9XG5cblx0XHRcdCsrd3JpdGVJbmRleDtcblx0XHR9XG5cblx0XHRpZiAod3JpdGVJbmRleCAhPT0gdGltZXMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSh0aW1lcywgMCwgd3JpdGVJbmRleCk7XG5cdFx0XHR0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodmFsdWVzLCAwLCB3cml0ZUluZGV4ICogc3RyaWRlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50aW1lcyA9IHRpbWVzO1xuXHRcdFx0dGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRjb25zdCB0aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGhpcy50aW1lcywgMCk7XG5cdFx0Y29uc3QgdmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywgMCk7XG5cdFx0Y29uc3QgVHlwZWRLZXlmcmFtZVRyYWNrID0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0XHRjb25zdCB0cmFjayA9IG5ldyBUeXBlZEtleWZyYW1lVHJhY2sodGhpcy5uYW1lLCB0aW1lcywgdmFsdWVzKTsgLy8gSW50ZXJwb2xhbnQgYXJndW1lbnQgdG8gY29uc3RydWN0b3IgaXMgbm90IHNhdmVkLCBzbyBjb3B5IHRoZSBmYWN0b3J5IG1ldGhvZCBkaXJlY3RseS5cblxuXHRcdHRyYWNrLmNyZWF0ZUludGVycG9sYW50ID0gdGhpcy5jcmVhdGVJbnRlcnBvbGFudDtcblx0XHRyZXR1cm4gdHJhY2s7XG5cdH1cblxufVxuXG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZSA9IEZsb2F0MzJBcnJheTtcbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZSA9IEZsb2F0MzJBcnJheTtcbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVMaW5lYXI7XG5cbi8qKlxuICogQSBUcmFjayBvZiBCb29sZWFuIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuXG5jbGFzcyBCb29sZWFuS2V5ZnJhbWVUcmFjayBleHRlbmRzIEtleWZyYW1lVHJhY2sge31cblxuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnYm9vbCc7XG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlID0gQXJyYXk7XG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb24gPSBJbnRlcnBvbGF0ZURpc2NyZXRlO1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhciA9IHVuZGVmaW5lZDtcbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGggPSB1bmRlZmluZWQ7IC8vIE5vdGU6IEFjdHVhbGx5IHRoaXMgdHJhY2sgY291bGQgaGF2ZSBhIG9wdGltaXplZCAvIGNvbXByZXNzZWRcblxuLyoqXG4gKiBBIFRyYWNrIG9mIGtleWZyYW1lIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBjb2xvci5cbiAqL1xuXG5jbGFzcyBDb2xvcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbkNvbG9yS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdjb2xvcic7IC8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWRcblxuLyoqXG4gKiBBIFRyYWNrIG9mIG51bWVyaWMga2V5ZnJhbWUgdmFsdWVzLlxuICovXG5cbmNsYXNzIE51bWJlcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbk51bWJlcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnbnVtYmVyJzsgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVyaXRlZFxuXG4vKipcbiAqIFNwaGVyaWNhbCBsaW5lYXIgdW5pdCBxdWF0ZXJuaW9uIGludGVycG9sYW50LlxuICovXG5cbmNsYXNzIFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCBleHRlbmRzIEludGVycG9sYW50IHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlcikge1xuXHRcdHN1cGVyKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpO1xuXHR9XG5cblx0aW50ZXJwb2xhdGVfKGkxLCB0MCwgdCwgdDEpIHtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlcixcblx0XHRcdFx0XHR2YWx1ZXMgPSB0aGlzLnNhbXBsZVZhbHVlcyxcblx0XHRcdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdFx0XHRhbHBoYSA9ICh0IC0gdDApIC8gKHQxIC0gdDApO1xuXHRcdGxldCBvZmZzZXQgPSBpMSAqIHN0cmlkZTtcblxuXHRcdGZvciAobGV0IGVuZCA9IG9mZnNldCArIHN0cmlkZTsgb2Zmc2V0ICE9PSBlbmQ7IG9mZnNldCArPSA0KSB7XG5cdFx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdChyZXN1bHQsIDAsIHZhbHVlcywgb2Zmc2V0IC0gc3RyaWRlLCB2YWx1ZXMsIG9mZnNldCwgYWxwaGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufVxuXG4vKipcbiAqIEEgVHJhY2sgb2YgcXVhdGVybmlvbiBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cblxuY2xhc3MgUXVhdGVybmlvbktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHtcblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHJlc3VsdCkge1xuXHRcdHJldHVybiBuZXcgUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50KHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQpO1xuXHR9XG5cbn1cblxuUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAncXVhdGVybmlvbic7IC8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWRcblxuUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVMaW5lYXI7XG5RdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgVHJhY2sgdGhhdCBpbnRlcnBvbGF0ZXMgU3RyaW5nc1xuICovXG5cbmNsYXNzIFN0cmluZ0tleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnc3RyaW5nJztcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZSA9IEFycmF5O1xuU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb24gPSBJbnRlcnBvbGF0ZURpc2NyZXRlO1xuU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyID0gdW5kZWZpbmVkO1xuU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgVHJhY2sgb2YgdmVjdG9yZWQga2V5ZnJhbWUgdmFsdWVzLlxuICovXG5cbmNsYXNzIFZlY3RvcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cblZlY3RvcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAndmVjdG9yJzsgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVyaXRlZFxuXG5jbGFzcyBBbmltYXRpb25DbGlwIHtcblx0Y29uc3RydWN0b3IobmFtZSwgZHVyYXRpb24gPSAtMSwgdHJhY2tzLCBibGVuZE1vZGUgPSBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGUpIHtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMudHJhY2tzID0gdHJhY2tzO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0XHR0aGlzLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTsgLy8gdGhpcyBtZWFucyBpdCBzaG91bGQgZmlndXJlIG91dCBpdHMgZHVyYXRpb24gYnkgc2Nhbm5pbmcgdGhlIHRyYWNrc1xuXG5cdFx0aWYgKHRoaXMuZHVyYXRpb24gPCAwKSB7XG5cdFx0XHR0aGlzLnJlc2V0RHVyYXRpb24oKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgcGFyc2UoanNvbikge1xuXHRcdGNvbnN0IHRyYWNrcyA9IFtdLFxuXHRcdFx0XHRcdGpzb25UcmFja3MgPSBqc29uLnRyYWNrcyxcblx0XHRcdFx0XHRmcmFtZVRpbWUgPSAxLjAgLyAoanNvbi5mcHMgfHwgMS4wKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0ganNvblRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0dHJhY2tzLnB1c2gocGFyc2VLZXlmcmFtZVRyYWNrKGpzb25UcmFja3NbaV0pLnNjYWxlKGZyYW1lVGltZSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsaXAgPSBuZXcgdGhpcyhqc29uLm5hbWUsIGpzb24uZHVyYXRpb24sIHRyYWNrcywganNvbi5ibGVuZE1vZGUpO1xuXHRcdGNsaXAudXVpZCA9IGpzb24udXVpZDtcblx0XHRyZXR1cm4gY2xpcDtcblx0fVxuXG5cdHN0YXRpYyB0b0pTT04oY2xpcCkge1xuXHRcdGNvbnN0IHRyYWNrcyA9IFtdLFxuXHRcdFx0XHRcdGNsaXBUcmFja3MgPSBjbGlwLnRyYWNrcztcblx0XHRjb25zdCBqc29uID0ge1xuXHRcdFx0J25hbWUnOiBjbGlwLm5hbWUsXG5cdFx0XHQnZHVyYXRpb24nOiBjbGlwLmR1cmF0aW9uLFxuXHRcdFx0J3RyYWNrcyc6IHRyYWNrcyxcblx0XHRcdCd1dWlkJzogY2xpcC51dWlkLFxuXHRcdFx0J2JsZW5kTW9kZSc6IGNsaXAuYmxlbmRNb2RlXG5cdFx0fTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY2xpcFRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0dHJhY2tzLnB1c2goS2V5ZnJhbWVUcmFjay50b0pTT04oY2xpcFRyYWNrc1tpXSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cblx0c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG5hbWUsIG1vcnBoVGFyZ2V0U2VxdWVuY2UsIGZwcywgbm9Mb29wKSB7XG5cdFx0Y29uc3QgbnVtTW9ycGhUYXJnZXRzID0gbW9ycGhUYXJnZXRTZXF1ZW5jZS5sZW5ndGg7XG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG51bU1vcnBoVGFyZ2V0czsgaSsrKSB7XG5cdFx0XHRsZXQgdGltZXMgPSBbXTtcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcblx0XHRcdHRpbWVzLnB1c2goKGkgKyBudW1Nb3JwaFRhcmdldHMgLSAxKSAlIG51bU1vcnBoVGFyZ2V0cywgaSwgKGkgKyAxKSAlIG51bU1vcnBoVGFyZ2V0cyk7XG5cdFx0XHR2YWx1ZXMucHVzaCgwLCAxLCAwKTtcblx0XHRcdGNvbnN0IG9yZGVyID0gQW5pbWF0aW9uVXRpbHMuZ2V0S2V5ZnJhbWVPcmRlcih0aW1lcyk7XG5cdFx0XHR0aW1lcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KHRpbWVzLCAxLCBvcmRlcik7XG5cdFx0XHR2YWx1ZXMgPSBBbmltYXRpb25VdGlscy5zb3J0ZWRBcnJheSh2YWx1ZXMsIDEsIG9yZGVyKTsgLy8gaWYgdGhlcmUgaXMgYSBrZXkgYXQgdGhlIGZpcnN0IGZyYW1lLCBkdXBsaWNhdGUgaXQgYXMgdGhlXG5cdFx0XHQvLyBsYXN0IGZyYW1lIGFzIHdlbGwgZm9yIHBlcmZlY3QgbG9vcC5cblxuXHRcdFx0aWYgKCFub0xvb3AgJiYgdGltZXNbMF0gPT09IDApIHtcblx0XHRcdFx0dGltZXMucHVzaChudW1Nb3JwaFRhcmdldHMpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh2YWx1ZXNbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0cmFja3MucHVzaChuZXcgTnVtYmVyS2V5ZnJhbWVUcmFjaygnLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1snICsgbW9ycGhUYXJnZXRTZXF1ZW5jZVtpXS5uYW1lICsgJ10nLCB0aW1lcywgdmFsdWVzKS5zY2FsZSgxLjAgLyBmcHMpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMobmFtZSwgLTEsIHRyYWNrcyk7XG5cdH1cblxuXHRzdGF0aWMgZmluZEJ5TmFtZShvYmplY3RPckNsaXBBcnJheSwgbmFtZSkge1xuXHRcdGxldCBjbGlwQXJyYXkgPSBvYmplY3RPckNsaXBBcnJheTtcblxuXHRcdGlmICghQXJyYXkuaXNBcnJheShvYmplY3RPckNsaXBBcnJheSkpIHtcblx0XHRcdGNvbnN0IG8gPSBvYmplY3RPckNsaXBBcnJheTtcblx0XHRcdGNsaXBBcnJheSA9IG8uZ2VvbWV0cnkgJiYgby5nZW9tZXRyeS5hbmltYXRpb25zIHx8IG8uYW5pbWF0aW9ucztcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsaXBBcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGNsaXBBcnJheVtpXS5uYW1lID09PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBjbGlwQXJyYXlbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXMobW9ycGhUYXJnZXRzLCBmcHMsIG5vTG9vcCkge1xuXHRcdGNvbnN0IGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzID0ge307IC8vIHRlc3RlZCB3aXRoIGh0dHBzOi8vcmVnZXgxMDEuY29tLyBvbiB0cmljayBzZXF1ZW5jZXNcblx0XHQvLyBzdWNoIGZsYW1pbmdvX2ZseUFfMDAzLCBmbGFtaW5nb19ydW4xXzAwMywgY3JkZWF0aDAwNTlcblxuXHRcdGNvbnN0IHBhdHRlcm4gPSAvXihbXFx3LV0qPykoW1xcZF0rKSQvOyAvLyBzb3J0IG1vcnBoIHRhcmdldCBuYW1lcyBpbnRvIGFuaW1hdGlvbiBncm91cHMgYmFzZWRcblx0XHQvLyBwYXR0ZXJucyBsaWtlIFdhbGtfMDAxLCBXYWxrXzAwMiwgUnVuXzAwMSwgUnVuXzAwMlxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0ID0gbW9ycGhUYXJnZXRzW2ldO1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtb3JwaFRhcmdldC5uYW1lLm1hdGNoKHBhdHRlcm4pO1xuXG5cdFx0XHRpZiAocGFydHMgJiYgcGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRjb25zdCBuYW1lID0gcGFydHNbMV07XG5cdFx0XHRcdGxldCBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1tuYW1lXTtcblxuXHRcdFx0XHRpZiAoIWFuaW1hdGlvbk1vcnBoVGFyZ2V0cykge1xuXHRcdFx0XHRcdGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzW25hbWVdID0gYW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbmltYXRpb25Nb3JwaFRhcmdldHMucHVzaChtb3JwaFRhcmdldCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xpcHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBhbmltYXRpb25Ub01vcnBoVGFyZ2V0cykge1xuXHRcdFx0Y2xpcHMucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG5hbWUsIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzW25hbWVdLCBmcHMsIG5vTG9vcCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjbGlwcztcblx0fSAvLyBwYXJzZSB0aGUgYW5pbWF0aW9uLmhpZXJhcmNoeSBmb3JtYXRcblxuXG5cdHN0YXRpYyBwYXJzZUFuaW1hdGlvbihhbmltYXRpb24sIGJvbmVzKSB7XG5cdFx0aWYgKCFhbmltYXRpb24pIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuJyk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBhZGROb25lbXB0eVRyYWNrID0gZnVuY3Rpb24gKHRyYWNrVHlwZSwgdHJhY2tOYW1lLCBhbmltYXRpb25LZXlzLCBwcm9wZXJ0eU5hbWUsIGRlc3RUcmFja3MpIHtcblx0XHRcdC8vIG9ubHkgcmV0dXJuIHRyYWNrIGlmIHRoZXJlIGFyZSBhY3R1YWxseSBrZXlzLlxuXHRcdFx0aWYgKGFuaW1hdGlvbktleXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzID0gW107XG5cdFx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdFx0XHRBbmltYXRpb25VdGlscy5mbGF0dGVuSlNPTihhbmltYXRpb25LZXlzLCB0aW1lcywgdmFsdWVzLCBwcm9wZXJ0eU5hbWUpOyAvLyBlbXB0eSBrZXlzIGFyZSBmaWx0ZXJlZCBvdXQsIHNvIGNoZWNrIGFnYWluXG5cblx0XHRcdFx0aWYgKHRpbWVzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdGRlc3RUcmFja3MucHVzaChuZXcgdHJhY2tUeXBlKHRyYWNrTmFtZSwgdGltZXMsIHZhbHVlcykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IFtdO1xuXHRcdGNvbnN0IGNsaXBOYW1lID0gYW5pbWF0aW9uLm5hbWUgfHwgJ2RlZmF1bHQnO1xuXHRcdGNvbnN0IGZwcyA9IGFuaW1hdGlvbi5mcHMgfHwgMzA7XG5cdFx0Y29uc3QgYmxlbmRNb2RlID0gYW5pbWF0aW9uLmJsZW5kTW9kZTsgLy8gYXV0b21hdGljIGxlbmd0aCBkZXRlcm1pbmF0aW9uIGluIEFuaW1hdGlvbkNsaXAuXG5cblx0XHRsZXQgZHVyYXRpb24gPSBhbmltYXRpb24ubGVuZ3RoIHx8IC0xO1xuXHRcdGNvbnN0IGhpZXJhcmNoeVRyYWNrcyA9IGFuaW1hdGlvbi5oaWVyYXJjaHkgfHwgW107XG5cblx0XHRmb3IgKGxldCBoID0gMDsgaCA8IGhpZXJhcmNoeVRyYWNrcy5sZW5ndGg7IGgrKykge1xuXHRcdFx0Y29uc3QgYW5pbWF0aW9uS2V5cyA9IGhpZXJhcmNoeVRyYWNrc1toXS5rZXlzOyAvLyBza2lwIGVtcHR5IHRyYWNrc1xuXG5cdFx0XHRpZiAoIWFuaW1hdGlvbktleXMgfHwgYW5pbWF0aW9uS2V5cy5sZW5ndGggPT09IDApIGNvbnRpbnVlOyAvLyBwcm9jZXNzIG1vcnBoIHRhcmdldHNcblxuXHRcdFx0aWYgKGFuaW1hdGlvbktleXNbMF0ubW9ycGhUYXJnZXRzKSB7XG5cdFx0XHRcdC8vIGZpZ3VyZSBvdXQgYWxsIG1vcnBoIHRhcmdldHMgdXNlZCBpbiB0aGlzIHRyYWNrXG5cdFx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0TmFtZXMgPSB7fTtcblx0XHRcdFx0bGV0IGs7XG5cblx0XHRcdFx0Zm9yIChrID0gMDsgayA8IGFuaW1hdGlvbktleXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRpZiAoYW5pbWF0aW9uS2V5c1trXS5tb3JwaFRhcmdldHMpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IG0gPSAwOyBtIDwgYW5pbWF0aW9uS2V5c1trXS5tb3JwaFRhcmdldHMubGVuZ3RoOyBtKyspIHtcblx0XHRcdFx0XHRcdFx0bW9ycGhUYXJnZXROYW1lc1thbmltYXRpb25LZXlzW2tdLm1vcnBoVGFyZ2V0c1ttXV0gPSAtMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gLy8gY3JlYXRlIGEgdHJhY2sgZm9yIGVhY2ggbW9ycGggdGFyZ2V0IHdpdGggYWxsIHplcm9cblx0XHRcdFx0Ly8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGV4Y2VwdCBmb3IgdGhlIGtleXMgaW4gd2hpY2hcblx0XHRcdFx0Ly8gdGhlIG1vcnBoVGFyZ2V0IGlzIG5hbWVkLlxuXG5cblx0XHRcdFx0Zm9yIChjb25zdCBtb3JwaFRhcmdldE5hbWUgaW4gbW9ycGhUYXJnZXROYW1lcykge1xuXHRcdFx0XHRcdGNvbnN0IHRpbWVzID0gW107XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGxldCBtID0gMDsgbSAhPT0gYW5pbWF0aW9uS2V5c1trXS5tb3JwaFRhcmdldHMubGVuZ3RoOyArK20pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbktleSA9IGFuaW1hdGlvbktleXNba107XG5cdFx0XHRcdFx0XHR0aW1lcy5wdXNoKGFuaW1hdGlvbktleS50aW1lKTtcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFuaW1hdGlvbktleS5tb3JwaFRhcmdldCA9PT0gbW9ycGhUYXJnZXROYW1lID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRyYWNrcy5wdXNoKG5ldyBOdW1iZXJLZXlmcmFtZVRyYWNrKCcubW9ycGhUYXJnZXRJbmZsdWVuY2VbJyArIG1vcnBoVGFyZ2V0TmFtZSArICddJywgdGltZXMsIHZhbHVlcykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZHVyYXRpb24gPSBtb3JwaFRhcmdldE5hbWVzLmxlbmd0aCAqIChmcHMgfHwgMS4wKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIC4uLmFzc3VtZSBza2VsZXRhbCBhbmltYXRpb25cblx0XHRcdFx0Y29uc3QgYm9uZU5hbWUgPSAnLmJvbmVzWycgKyBib25lc1toXS5uYW1lICsgJ10nO1xuXHRcdFx0XHRhZGROb25lbXB0eVRyYWNrKFZlY3RvcktleWZyYW1lVHJhY2ssIGJvbmVOYW1lICsgJy5wb3NpdGlvbicsIGFuaW1hdGlvbktleXMsICdwb3MnLCB0cmFja3MpO1xuXHRcdFx0XHRhZGROb25lbXB0eVRyYWNrKFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucXVhdGVybmlvbicsIGFuaW1hdGlvbktleXMsICdyb3QnLCB0cmFja3MpO1xuXHRcdFx0XHRhZGROb25lbXB0eVRyYWNrKFZlY3RvcktleWZyYW1lVHJhY2ssIGJvbmVOYW1lICsgJy5zY2FsZScsIGFuaW1hdGlvbktleXMsICdzY2wnLCB0cmFja3MpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0cmFja3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBjbGlwID0gbmV3IHRoaXMoY2xpcE5hbWUsIGR1cmF0aW9uLCB0cmFja3MsIGJsZW5kTW9kZSk7XG5cdFx0cmV0dXJuIGNsaXA7XG5cdH1cblxuXHRyZXNldER1cmF0aW9uKCkge1xuXHRcdGNvbnN0IHRyYWNrcyA9IHRoaXMudHJhY2tzO1xuXHRcdGxldCBkdXJhdGlvbiA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0Y29uc3QgdHJhY2sgPSB0aGlzLnRyYWNrc1tpXTtcblx0XHRcdGR1cmF0aW9uID0gTWF0aC5tYXgoZHVyYXRpb24sIHRyYWNrLnRpbWVzW3RyYWNrLnRpbWVzLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0cmltKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMudHJhY2tzW2ldLnRyaW0oMCwgdGhpcy5kdXJhdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR2YWxpZGF0ZSgpIHtcblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsaWQgPSB2YWxpZCAmJiB0aGlzLnRyYWNrc1tpXS52YWxpZGF0ZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZDtcblx0fVxuXG5cdG9wdGltaXplKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMudHJhY2tzW2ldLm9wdGltaXplKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRjb25zdCB0cmFja3MgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRyYWNrcy5wdXNoKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsIHRoaXMuZHVyYXRpb24sIHRyYWNrcywgdGhpcy5ibGVuZE1vZGUpO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKTtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWUodHlwZU5hbWUpIHtcblx0c3dpdGNoICh0eXBlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAnc2NhbGFyJzpcblx0XHRjYXNlICdkb3VibGUnOlxuXHRcdGNhc2UgJ2Zsb2F0Jzpcblx0XHRjYXNlICdudW1iZXInOlxuXHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0cmV0dXJuIE51bWJlcktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICd2ZWN0b3InOlxuXHRcdGNhc2UgJ3ZlY3RvcjInOlxuXHRcdGNhc2UgJ3ZlY3RvcjMnOlxuXHRcdGNhc2UgJ3ZlY3RvcjQnOlxuXHRcdFx0cmV0dXJuIFZlY3RvcktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRyZXR1cm4gQ29sb3JLZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAncXVhdGVybmlvbic6XG5cdFx0XHRyZXR1cm4gUXVhdGVybmlvbktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICdib29sJzpcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdHJldHVybiBCb29sZWFuS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gU3RyaW5nS2V5ZnJhbWVUcmFjaztcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcignVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICcgKyB0eXBlTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5ZnJhbWVUcmFjayhqc29uKSB7XG5cdGlmIChqc29uLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UnKTtcblx0fVxuXG5cdGNvbnN0IHRyYWNrVHlwZSA9IGdldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWUoanNvbi50eXBlKTtcblxuXHRpZiAoanNvbi50aW1lcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgdGltZXMgPSBbXSxcblx0XHRcdFx0XHR2YWx1ZXMgPSBbXTtcblx0XHRBbmltYXRpb25VdGlscy5mbGF0dGVuSlNPTihqc29uLmtleXMsIHRpbWVzLCB2YWx1ZXMsICd2YWx1ZScpO1xuXHRcdGpzb24udGltZXMgPSB0aW1lcztcblx0XHRqc29uLnZhbHVlcyA9IHZhbHVlcztcblx0fSAvLyBkZXJpdmVkIGNsYXNzZXMgY2FuIGRlZmluZSBhIHN0YXRpYyBwYXJzZSBtZXRob2RcblxuXG5cdGlmICh0cmFja1R5cGUucGFyc2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB0cmFja1R5cGUucGFyc2UoanNvbik7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYnkgZGVmYXVsdCwgd2UgYXNzdW1lIGEgY29uc3RydWN0b3IgY29tcGF0aWJsZSB3aXRoIHRoZSBiYXNlXG5cdFx0cmV0dXJuIG5ldyB0cmFja1R5cGUoanNvbi5uYW1lLCBqc29uLnRpbWVzLCBqc29uLnZhbHVlcywganNvbi5pbnRlcnBvbGF0aW9uKTtcblx0fVxufVxuXG5jb25zdCBDYWNoZSA9IHtcblx0ZW5hYmxlZDogZmFsc2UsXG5cdGZpbGVzOiB7fSxcblx0YWRkOiBmdW5jdGlvbiAoa2V5LCBmaWxlKSB7XG5cdFx0aWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjsgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdBZGRpbmcga2V5OicsIGtleSApO1xuXG5cdFx0dGhpcy5maWxlc1trZXldID0gZmlsZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0aWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjsgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdDaGVja2luZyBrZXk6Jywga2V5ICk7XG5cblx0XHRyZXR1cm4gdGhpcy5maWxlc1trZXldO1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRkZWxldGUgdGhpcy5maWxlc1trZXldO1xuXHR9LFxuXHRjbGVhcjogZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMuZmlsZXMgPSB7fTtcblx0fVxufTtcblxuY2xhc3MgTG9hZGluZ01hbmFnZXIge1xuXHRjb25zdHJ1Y3RvcihvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0bGV0IGlzTG9hZGluZyA9IGZhbHNlO1xuXHRcdGxldCBpdGVtc0xvYWRlZCA9IDA7XG5cdFx0bGV0IGl0ZW1zVG90YWwgPSAwO1xuXHRcdGxldCB1cmxNb2RpZmllciA9IHVuZGVmaW5lZDtcblx0XHRjb25zdCBoYW5kbGVycyA9IFtdOyAvLyBSZWZlciB0byAjNTY4OSBmb3IgdGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3Qgc2V0IC5vblN0YXJ0XG5cdFx0Ly8gaW4gdGhlIGNvbnN0cnVjdG9yXG5cblx0XHR0aGlzLm9uU3RhcnQgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5vbkxvYWQgPSBvbkxvYWQ7XG5cdFx0dGhpcy5vblByb2dyZXNzID0gb25Qcm9ncmVzcztcblx0XHR0aGlzLm9uRXJyb3IgPSBvbkVycm9yO1xuXG5cdFx0dGhpcy5pdGVtU3RhcnQgPSBmdW5jdGlvbiAodXJsKSB7XG5cdFx0XHRpdGVtc1RvdGFsKys7XG5cblx0XHRcdGlmIChpc0xvYWRpbmcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGlmIChzY29wZS5vblN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzY29wZS5vblN0YXJ0KHVybCwgaXRlbXNMb2FkZWQsIGl0ZW1zVG90YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlzTG9hZGluZyA9IHRydWU7XG5cdFx0fTtcblxuXHRcdHRoaXMuaXRlbUVuZCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0XHRcdGl0ZW1zTG9hZGVkKys7XG5cblx0XHRcdGlmIChzY29wZS5vblByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0c2NvcGUub25Qcm9ncmVzcyh1cmwsIGl0ZW1zTG9hZGVkLCBpdGVtc1RvdGFsKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGl0ZW1zTG9hZGVkID09PSBpdGVtc1RvdGFsKSB7XG5cdFx0XHRcdGlzTG9hZGluZyA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChzY29wZS5vbkxvYWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHNjb3BlLm9uTG9hZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuaXRlbUVycm9yID0gZnVuY3Rpb24gKHVybCkge1xuXHRcdFx0aWYgKHNjb3BlLm9uRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzY29wZS5vbkVycm9yKHVybCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMucmVzb2x2ZVVSTCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0XHRcdGlmICh1cmxNb2RpZmllcikge1xuXHRcdFx0XHRyZXR1cm4gdXJsTW9kaWZpZXIodXJsKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVybDtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRVUkxNb2RpZmllciA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0pIHtcblx0XHRcdHVybE1vZGlmaWVyID0gdHJhbnNmb3JtO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fTtcblxuXHRcdHRoaXMuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIChyZWdleCwgbG9hZGVyKSB7XG5cdFx0XHRoYW5kbGVycy5wdXNoKHJlZ2V4LCBsb2FkZXIpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fTtcblxuXHRcdHRoaXMucmVtb3ZlSGFuZGxlciA9IGZ1bmN0aW9uIChyZWdleCkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBoYW5kbGVycy5pbmRleE9mKHJlZ2V4KTtcblxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoaW5kZXgsIDIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRIYW5kbGVyID0gZnVuY3Rpb24gKGZpbGUpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyKSB7XG5cdFx0XHRcdGNvbnN0IHJlZ2V4ID0gaGFuZGxlcnNbaV07XG5cdFx0XHRcdGNvbnN0IGxvYWRlciA9IGhhbmRsZXJzW2kgKyAxXTtcblx0XHRcdFx0aWYgKHJlZ2V4Lmdsb2JhbCkgcmVnZXgubGFzdEluZGV4ID0gMDsgLy8gc2VlICMxNzkyMFxuXG5cdFx0XHRcdGlmIChyZWdleC50ZXN0KGZpbGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGxvYWRlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9O1xuXHR9XG5cbn1cblxuY29uc3QgRGVmYXVsdExvYWRpbmdNYW5hZ2VyID0gbmV3IExvYWRpbmdNYW5hZ2VyKCk7XG5cbmNsYXNzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHR0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyICE9PSB1bmRlZmluZWQgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyO1xuXHRcdHRoaXMuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcblx0XHR0aGlzLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuXHRcdHRoaXMucGF0aCA9ICcnO1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gJyc7XG5cdFx0dGhpcy5yZXF1ZXN0SGVhZGVyID0ge307XG5cdH1cblxuXHRsb2FkKCkge31cblxuXHRsb2FkQXN5bmModXJsLCBvblByb2dyZXNzKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRzY29wZS5sb2FkKHVybCwgcmVzb2x2ZSwgb25Qcm9ncmVzcywgcmVqZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdHBhcnNlKCkge31cblxuXHRzZXRDcm9zc09yaWdpbihjcm9zc09yaWdpbikge1xuXHRcdHRoaXMuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFdpdGhDcmVkZW50aWFscyh2YWx1ZSkge1xuXHRcdHRoaXMud2l0aENyZWRlbnRpYWxzID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRQYXRoKHBhdGgpIHtcblx0XHR0aGlzLnBhdGggPSBwYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UmVzb3VyY2VQYXRoKHJlc291cmNlUGF0aCkge1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gcmVzb3VyY2VQYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UmVxdWVzdEhlYWRlcihyZXF1ZXN0SGVhZGVyKSB7XG5cdFx0dGhpcy5yZXF1ZXN0SGVhZGVyID0gcmVxdWVzdEhlYWRlcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNvbnN0IGxvYWRpbmcgPSB7fTtcblxuY2xhc3MgRmlsZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRpZiAodXJsID09PSB1bmRlZmluZWQpIHVybCA9ICcnO1xuXHRcdGlmICh0aGlzLnBhdGggIT09IHVuZGVmaW5lZCkgdXJsID0gdGhpcy5wYXRoICsgdXJsO1xuXHRcdHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHVybCk7XG5cdFx0Y29uc3QgY2FjaGVkID0gQ2FjaGUuZ2V0KHVybCk7XG5cblx0XHRpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubWFuYWdlci5pdGVtU3RhcnQodXJsKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAob25Mb2FkKSBvbkxvYWQoY2FjaGVkKTtcblx0XHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0cmV0dXJuIGNhY2hlZDtcblx0XHR9IC8vIENoZWNrIGlmIHJlcXVlc3QgaXMgZHVwbGljYXRlXG5cblxuXHRcdGlmIChsb2FkaW5nW3VybF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9hZGluZ1t1cmxdLnB1c2goe1xuXHRcdFx0XHRvbkxvYWQ6IG9uTG9hZCxcblx0XHRcdFx0b25Qcm9ncmVzczogb25Qcm9ncmVzcyxcblx0XHRcdFx0b25FcnJvcjogb25FcnJvclxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSAvLyBJbml0aWFsaXNlIGFycmF5IGZvciBkdXBsaWNhdGUgcmVxdWVzdHNcblxuXG5cdFx0bG9hZGluZ1t1cmxdID0gW107XG5cdFx0bG9hZGluZ1t1cmxdLnB1c2goe1xuXHRcdFx0b25Mb2FkOiBvbkxvYWQsXG5cdFx0XHRvblByb2dyZXNzOiBvblByb2dyZXNzLFxuXHRcdFx0b25FcnJvcjogb25FcnJvclxuXHRcdH0pOyAvLyBjcmVhdGUgcmVxdWVzdFxuXG5cdFx0Y29uc3QgcmVxID0gbmV3IFJlcXVlc3QodXJsLCB7XG5cdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyAvLyBBbiBhYm9ydCBjb250cm9sbGVyIGNvdWxkIGJlIGFkZGVkIHdpdGhpbiBhIGZ1dHVyZSBQUlxuXG5cdFx0fSk7IC8vIHJlY29yZCBzdGF0ZXMgKCBhdm9pZCBkYXRhIHJhY2UgKVxuXG5cdFx0Y29uc3QgbWltZVR5cGUgPSB0aGlzLm1pbWVUeXBlO1xuXHRcdGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMucmVzcG9uc2VUeXBlOyAvLyBzdGFydCB0aGUgZmV0Y2hcblxuXHRcdGZldGNoKHJlcSkudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAwKSB7XG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgcmV0dXJuIEhUVFAgU3RhdHVzIDAgd2hlbiB1c2luZyBub24taHR0cCBwcm90b2NvbFxuXHRcdFx0XHQvLyBlLmcuICdmaWxlOi8vJyBvciAnZGF0YTovLycuIEhhbmRsZSBhcyBzdWNjZXNzLlxuXHRcdFx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAwKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcgfHwgcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrcyA9IGxvYWRpbmdbdXJsXTtcblx0XHRcdFx0Y29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblx0XHRcdFx0Y29uc3QgY29udGVudExlbmd0aCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuXHRcdFx0XHRjb25zdCB0b3RhbCA9IGNvbnRlbnRMZW5ndGggPyBwYXJzZUludChjb250ZW50TGVuZ3RoKSA6IDA7XG5cdFx0XHRcdGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPT0gMDtcblx0XHRcdFx0bGV0IGxvYWRlZCA9IDA7IC8vIHBlcmlvZGljYWxseSByZWFkIGRhdGEgaW50byB0aGUgbmV3IHN0cmVhbSB0cmFja2luZyB3aGlsZSBkb3dubG9hZCBwcm9ncmVzc1xuXG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG5cdFx0XHRcdFx0c3RhcnQoY29udHJvbGxlcikge1xuXHRcdFx0XHRcdFx0cmVhZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gcmVhZERhdGEoKSB7XG5cdFx0XHRcdFx0XHRcdHJlYWRlci5yZWFkKCkudGhlbigoe1xuXHRcdFx0XHRcdFx0XHRcdGRvbmUsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0XHRcdFx0fSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChkb25lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aENvbXB1dGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxvYWRlZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG90YWxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrLm9uUHJvZ3Jlc3MpIGNhbGxiYWNrLm9uUHJvZ3Jlc3MoZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVhZERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBSZXNwb25zZShzdHJlYW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoYGZldGNoIGZvciBcIiR7cmVzcG9uc2UudXJsfVwiIHJlc3BvbmRlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuXHRcdFx0fVxuXHRcdH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0c3dpdGNoIChyZXNwb25zZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYXJyYXlidWZmZXInOlxuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuXG5cdFx0XHRcdGNhc2UgJ2Jsb2InOlxuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5ibG9iKCk7XG5cblx0XHRcdFx0Y2FzZSAnZG9jdW1lbnQnOlxuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCkudGhlbih0ZXh0ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRleHQsIG1pbWVUeXBlKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKG1pbWVUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHNuaWZmIGVuY29kaW5nXG5cdFx0XHRcdFx0XHRjb25zdCByZSA9IC9jaGFyc2V0PVwiPyhbXjtcIlxcc10qKVwiPy9pO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXhlYyA9IHJlLmV4ZWMobWltZVR5cGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBleGVjICYmIGV4ZWNbMV0gPyBleGVjWzFdLnRvTG93ZXJDYXNlKCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGxhYmVsKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpLnRoZW4oYWIgPT4gZGVjb2Rlci5kZWNvZGUoYWIpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9KS50aGVuKGRhdGEgPT4ge1xuXHRcdFx0Ly8gQWRkIHRvIGNhY2hlIG9ubHkgb24gSFRUUCBzdWNjZXNzLCBzbyB0aGF0IHdlIGRvIG5vdCBjYWNoZVxuXHRcdFx0Ly8gZXJyb3IgcmVzcG9uc2UgYm9kaWVzIGFzIHByb3BlciByZXNwb25zZXMgdG8gcmVxdWVzdHMuXG5cdFx0XHRDYWNoZS5hZGQodXJsLCBkYXRhKTtcblx0XHRcdGNvbnN0IGNhbGxiYWNrcyA9IGxvYWRpbmdbdXJsXTtcblx0XHRcdGRlbGV0ZSBsb2FkaW5nW3VybF07XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldO1xuXHRcdFx0XHRpZiAoY2FsbGJhY2sub25Mb2FkKSBjYWxsYmFjay5vbkxvYWQoZGF0YSk7XG5cdFx0XHR9XG5cdFx0fSkuY2F0Y2goZXJyID0+IHtcblx0XHRcdC8vIEFib3J0IGVycm9ycyBhbmQgb3RoZXIgZXJyb3JzIGFyZSBoYW5kbGVkIHRoZSBzYW1lXG5cdFx0XHRjb25zdCBjYWxsYmFja3MgPSBsb2FkaW5nW3VybF07XG5cblx0XHRcdGlmIChjYWxsYmFja3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBXaGVuIG9uTG9hZCB3YXMgY2FsbGVkIGFuZCB1cmwgd2FzIGRlbGV0ZWQgaW4gYGxvYWRpbmdgXG5cdFx0XHRcdHRoaXMubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgbG9hZGluZ1t1cmxdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcblx0XHRcdFx0aWYgKGNhbGxiYWNrLm9uRXJyb3IpIGNhbGxiYWNrLm9uRXJyb3IoZXJyKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih1cmwpO1xuXHRcdH0pLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHR9KTtcblx0XHR0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHVybCk7XG5cdH1cblxuXHRzZXRSZXNwb25zZVR5cGUodmFsdWUpIHtcblx0XHR0aGlzLnJlc3BvbnNlVHlwZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0TWltZVR5cGUodmFsdWUpIHtcblx0XHR0aGlzLm1pbWVUeXBlID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBBbmltYXRpb25Mb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9uTG9hZChzY29wZS5wYXJzZShKU09OLnBhcnNlKHRleHQpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChvbkVycm9yKSB7XG5cdFx0XHRcdFx0b25FcnJvcihlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdH1cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0fVxuXG5cdHBhcnNlKGpzb24pIHtcblx0XHRjb25zdCBhbmltYXRpb25zID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNsaXAgPSBBbmltYXRpb25DbGlwLnBhcnNlKGpzb25baV0pO1xuXHRcdFx0YW5pbWF0aW9ucy5wdXNoKGNsaXApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhbmltYXRpb25zO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRvIGJsb2NrIGJhc2VkIHRleHR1cmVzIGxvYWRlciAoZGRzLCBwdnIsIC4uLilcbiAqXG4gKiBTdWIgY2xhc3NlcyBoYXZlIHRvIGltcGxlbWVudCB0aGUgcGFyc2UoKSBtZXRob2Qgd2hpY2ggd2lsbCBiZSB1c2VkIGluIGxvYWQoKS5cbiAqL1xuXG5jbGFzcyBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgaW1hZ2VzID0gW107XG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBDb21wcmVzc2VkVGV4dHVyZSgpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCdhcnJheWJ1ZmZlcicpO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcik7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyhzY29wZS53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxldCBsb2FkZWQgPSAwO1xuXG5cdFx0ZnVuY3Rpb24gbG9hZFRleHR1cmUoaSkge1xuXHRcdFx0bG9hZGVyLmxvYWQodXJsW2ldLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRcdGNvbnN0IHRleERhdGFzID0gc2NvcGUucGFyc2UoYnVmZmVyLCB0cnVlKTtcblx0XHRcdFx0aW1hZ2VzW2ldID0ge1xuXHRcdFx0XHRcdHdpZHRoOiB0ZXhEYXRhcy53aWR0aCxcblx0XHRcdFx0XHRoZWlnaHQ6IHRleERhdGFzLmhlaWdodCxcblx0XHRcdFx0XHRmb3JtYXQ6IHRleERhdGFzLmZvcm1hdCxcblx0XHRcdFx0XHRtaXBtYXBzOiB0ZXhEYXRhcy5taXBtYXBzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGxvYWRlZCArPSAxO1xuXG5cdFx0XHRcdGlmIChsb2FkZWQgPT09IDYpIHtcblx0XHRcdFx0XHRpZiAodGV4RGF0YXMubWlwbWFwQ291bnQgPT09IDEpIHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXHRcdFx0XHRcdHRleHR1cmUuaW1hZ2UgPSBpbWFnZXM7XG5cdFx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7XG5cdFx0XHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKHRleHR1cmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB1cmwubGVuZ3RoOyBpIDwgaWw7ICsraSkge1xuXHRcdFx0XHRsb2FkVGV4dHVyZShpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY29tcHJlc3NlZCBjdWJlbWFwIHRleHR1cmUgc3RvcmVkIGluIGEgc2luZ2xlIEREUyBmaWxlXG5cdFx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdFx0Y29uc3QgdGV4RGF0YXMgPSBzY29wZS5wYXJzZShidWZmZXIsIHRydWUpO1xuXG5cdFx0XHRcdGlmICh0ZXhEYXRhcy5pc0N1YmVtYXApIHtcblx0XHRcdFx0XHRjb25zdCBmYWNlcyA9IHRleERhdGFzLm1pcG1hcHMubGVuZ3RoIC8gdGV4RGF0YXMubWlwbWFwQ291bnQ7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBmID0gMDsgZiA8IGZhY2VzOyBmKyspIHtcblx0XHRcdFx0XHRcdGltYWdlc1tmXSA9IHtcblx0XHRcdFx0XHRcdFx0bWlwbWFwczogW11cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGV4RGF0YXMubWlwbWFwQ291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbZl0ubWlwbWFwcy5wdXNoKHRleERhdGFzLm1pcG1hcHNbZiAqIHRleERhdGFzLm1pcG1hcENvdW50ICsgaV0pO1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbZl0uZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0O1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbZl0ud2lkdGggPSB0ZXhEYXRhcy53aWR0aDtcblx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ZdLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlID0gaW1hZ2VzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRleHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhcy53aWR0aDtcblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDtcblx0XHRcdFx0XHR0ZXh0dXJlLm1pcG1hcHMgPSB0ZXhEYXRhcy5taXBtYXBzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRleERhdGFzLm1pcG1hcENvdW50ID09PSAxKSB7XG5cdFx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDtcblx0XHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZCh0ZXh0dXJlKTtcblx0XHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cbn1cblxuY2xhc3MgSW1hZ2VMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0aWYgKHRoaXMucGF0aCAhPT0gdW5kZWZpbmVkKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7XG5cdFx0dXJsID0gdGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodXJsKTtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgY2FjaGVkID0gQ2FjaGUuZ2V0KHVybCk7XG5cblx0XHRpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KHVybCk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKGNhY2hlZCk7XG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCh1cmwpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRyZXR1cm4gY2FjaGVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGltYWdlID0gY3JlYXRlRWxlbWVudE5TKCdpbWcnKTtcblxuXHRcdGZ1bmN0aW9uIG9uSW1hZ2VMb2FkKCkge1xuXHRcdFx0cmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblx0XHRcdENhY2hlLmFkZCh1cmwsIHRoaXMpO1xuXHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKHRoaXMpO1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25JbWFnZUVycm9yKGV2ZW50KSB7XG5cdFx0XHRyZW1vdmVFdmVudExpc3RlbmVycygpO1xuXHRcdFx0aWYgKG9uRXJyb3IpIG9uRXJyb3IoZXZlbnQpO1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCh1cmwpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuXHRcdFx0aW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uSW1hZ2VMb2FkLCBmYWxzZSk7XG5cdFx0XHRpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uSW1hZ2VFcnJvciwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkltYWdlTG9hZCwgZmFsc2UpO1xuXHRcdGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25JbWFnZUVycm9yLCBmYWxzZSk7XG5cblx0XHRpZiAodXJsLnN1YnN0cigwLCA1KSAhPT0gJ2RhdGE6Jykge1xuXHRcdFx0aWYgKHRoaXMuY3Jvc3NPcmlnaW4gIT09IHVuZGVmaW5lZCkgaW1hZ2UuY3Jvc3NPcmlnaW4gPSB0aGlzLmNyb3NzT3JpZ2luO1xuXHRcdH1cblxuXHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KHVybCk7XG5cdFx0aW1hZ2Uuc3JjID0gdXJsO1xuXHRcdHJldHVybiBpbWFnZTtcblx0fVxuXG59XG5cbmNsYXNzIEN1YmVUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmxzLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCB0ZXh0dXJlID0gbmV3IEN1YmVUZXh0dXJlKCk7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bGV0IGxvYWRlZCA9IDA7XG5cblx0XHRmdW5jdGlvbiBsb2FkVGV4dHVyZShpKSB7XG5cdFx0XHRsb2FkZXIubG9hZCh1cmxzW2ldLCBmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZXNbaV0gPSBpbWFnZTtcblx0XHRcdFx0bG9hZGVkKys7XG5cblx0XHRcdFx0aWYgKGxvYWRlZCA9PT0gNikge1xuXHRcdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZCh0ZXh0dXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdW5kZWZpbmVkLCBvbkVycm9yKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdGxvYWRUZXh0dXJlKGkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRvIGxvYWQgZ2VuZXJpYyBiaW5hcnkgdGV4dHVyZXMgZm9ybWF0cyAocmdiZSwgaGRyLCAuLi4pXG4gKlxuICogU3ViIGNsYXNzZXMgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHBhcnNlKCkgbWV0aG9kIHdoaWNoIHdpbGwgYmUgdXNlZCBpbiBsb2FkKCkuXG4gKi9cblxuY2xhc3MgRGF0YVRleHR1cmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUoKTtcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRSZXNwb25zZVR5cGUoJ2FycmF5YnVmZmVyJyk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKTtcblx0XHRsb2FkZXIuc2V0UGF0aCh0aGlzLnBhdGgpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoc2NvcGUud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdGNvbnN0IHRleERhdGEgPSBzY29wZS5wYXJzZShidWZmZXIpO1xuXHRcdFx0aWYgKCF0ZXhEYXRhKSByZXR1cm47XG5cblx0XHRcdGlmICh0ZXhEYXRhLmltYWdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZSA9IHRleERhdGEuaW1hZ2U7XG5cdFx0XHR9IGVsc2UgaWYgKHRleERhdGEuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhLndpZHRoO1xuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGEuaGVpZ2h0O1xuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLmRhdGEgPSB0ZXhEYXRhLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmUud3JhcFMgPSB0ZXhEYXRhLndyYXBTICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLndyYXBTIDogQ2xhbXBUb0VkZ2VXcmFwcGluZztcblx0XHRcdHRleHR1cmUud3JhcFQgPSB0ZXhEYXRhLndyYXBUICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLndyYXBUIDogQ2xhbXBUb0VkZ2VXcmFwcGluZztcblx0XHRcdHRleHR1cmUubWFnRmlsdGVyID0gdGV4RGF0YS5tYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IHRleERhdGEubWFnRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSB0ZXhEYXRhLm1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gdGV4RGF0YS5taW5GaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cdFx0XHR0ZXh0dXJlLmFuaXNvdHJvcHkgPSB0ZXhEYXRhLmFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCA/IHRleERhdGEuYW5pc290cm9weSA6IDE7XG5cblx0XHRcdGlmICh0ZXhEYXRhLmVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS5lbmNvZGluZyA9IHRleERhdGEuZW5jb2Rpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXhEYXRhLmZsaXBZICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS5mbGlwWSA9IHRleERhdGEuZmxpcFk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXhEYXRhLmZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YS5mb3JtYXQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXhEYXRhLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlLnR5cGUgPSB0ZXhEYXRhLnR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXhEYXRhLm1pcG1hcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlLm1pcG1hcHMgPSB0ZXhEYXRhLm1pcG1hcHM7XG5cdFx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOyAvLyBwcmVzdW1hYmx5Li4uXG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXhEYXRhLm1pcG1hcENvdW50ID09PSAxKSB7XG5cdFx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS5nZW5lcmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IHRleERhdGEuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZCh0ZXh0dXJlLCB0ZXhEYXRhKTtcblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG59XG5cbmNsYXNzIFRleHR1cmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bG9hZGVyLmxvYWQodXJsLCBmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdHRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcblx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAob25Mb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b25Mb2FkKHRleHR1cmUpO1xuXHRcdFx0fVxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpO1xuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cbn1cblxuY2xhc3MgTGlnaHQgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHkgPSAxKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGlnaHQnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoY29sb3IpO1xuXHRcdHRoaXMuaW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xuXHR9XG5cblx0ZGlzcG9zZSgpIHsvLyBFbXB0eSBoZXJlIGluIGJhc2UgY2xhc3M7IHNvbWUgc3ViY2xhc3NlcyBvdmVycmlkZS5cblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMuaW50ZW5zaXR5ID0gc291cmNlLmludGVuc2l0eTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTihtZXRhKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTihtZXRhKTtcblx0XHRkYXRhLm9iamVjdC5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7XG5cdFx0ZGF0YS5vYmplY3QuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XG5cdFx0aWYgKHRoaXMuZ3JvdW5kQ29sb3IgIT09IHVuZGVmaW5lZCkgZGF0YS5vYmplY3QuZ3JvdW5kQ29sb3IgPSB0aGlzLmdyb3VuZENvbG9yLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLmRpc3RhbmNlICE9PSB1bmRlZmluZWQpIGRhdGEub2JqZWN0LmRpc3RhbmNlID0gdGhpcy5kaXN0YW5jZTtcblx0XHRpZiAodGhpcy5hbmdsZSAhPT0gdW5kZWZpbmVkKSBkYXRhLm9iamVjdC5hbmdsZSA9IHRoaXMuYW5nbGU7XG5cdFx0aWYgKHRoaXMuZGVjYXkgIT09IHVuZGVmaW5lZCkgZGF0YS5vYmplY3QuZGVjYXkgPSB0aGlzLmRlY2F5O1xuXHRcdGlmICh0aGlzLnBlbnVtYnJhICE9PSB1bmRlZmluZWQpIGRhdGEub2JqZWN0LnBlbnVtYnJhID0gdGhpcy5wZW51bWJyYTtcblx0XHRpZiAodGhpcy5zaGFkb3cgIT09IHVuZGVmaW5lZCkgZGF0YS5vYmplY3Quc2hhZG93ID0gdGhpcy5zaGFkb3cudG9KU09OKCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5MaWdodC5wcm90b3R5cGUuaXNMaWdodCA9IHRydWU7XG5cbmNsYXNzIEhlbWlzcGhlcmVMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3Ioc2t5Q29sb3IsIGdyb3VuZENvbG9yLCBpbnRlbnNpdHkpIHtcblx0XHRzdXBlcihza3lDb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnSGVtaXNwaGVyZUxpZ2h0Jztcblx0XHR0aGlzLnBvc2l0aW9uLmNvcHkoT2JqZWN0M0QuRGVmYXVsdFVwKTtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IoZ3JvdW5kQ29sb3IpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRMaWdodC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsIHNvdXJjZSk7XG5cdFx0dGhpcy5ncm91bmRDb2xvci5jb3B5KHNvdXJjZS5ncm91bmRDb2xvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5IZW1pc3BoZXJlTGlnaHQucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0ID0gdHJ1ZTtcblxuY29uc3QgX3Byb2pTY3JlZW5NYXRyaXgkMSA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfbGlnaHRQb3NpdGlvbldvcmxkJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2xvb2tUYXJnZXQkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBMaWdodFNoYWRvdyB7XG5cdGNvbnN0cnVjdG9yKGNhbWVyYSkge1xuXHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXHRcdHRoaXMuYmlhcyA9IDA7XG5cdFx0dGhpcy5ub3JtYWxCaWFzID0gMDtcblx0XHR0aGlzLnJhZGl1cyA9IDE7XG5cdFx0dGhpcy5ibHVyU2FtcGxlcyA9IDg7XG5cdFx0dGhpcy5tYXBTaXplID0gbmV3IFZlY3RvcjIoNTEyLCA1MTIpO1xuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLm1hcFBhc3MgPSBudWxsO1xuXHRcdHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLl9mcnVzdHVtID0gbmV3IEZydXN0dW0oKTtcblx0XHR0aGlzLl9mcmFtZUV4dGVudHMgPSBuZXcgVmVjdG9yMigxLCAxKTtcblx0XHR0aGlzLl92aWV3cG9ydENvdW50ID0gMTtcblx0XHR0aGlzLl92aWV3cG9ydHMgPSBbbmV3IFZlY3RvcjQoMCwgMCwgMSwgMSldO1xuXHR9XG5cblx0Z2V0Vmlld3BvcnRDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudDtcblx0fVxuXG5cdGdldEZydXN0dW0oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ZydXN0dW07XG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodCkge1xuXHRcdGNvbnN0IHNoYWRvd0NhbWVyYSA9IHRoaXMuY2FtZXJhO1xuXHRcdGNvbnN0IHNoYWRvd01hdHJpeCA9IHRoaXMubWF0cml4O1xuXG5cdFx0X2xpZ2h0UG9zaXRpb25Xb3JsZCQxLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cblx0XHRzaGFkb3dDYW1lcmEucG9zaXRpb24uY29weShfbGlnaHRQb3NpdGlvbldvcmxkJDEpO1xuXG5cdFx0X2xvb2tUYXJnZXQkMS5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdHNoYWRvd0NhbWVyYS5sb29rQXQoX2xvb2tUYXJnZXQkMSk7XG5cdFx0c2hhZG93Q2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRfcHJvalNjcmVlbk1hdHJpeCQxLm11bHRpcGx5TWF0cmljZXMoc2hhZG93Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgsIHNoYWRvd0NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXG5cdFx0dGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChfcHJvalNjcmVlbk1hdHJpeCQxKTtcblxuXHRcdHNoYWRvd01hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcblx0XHRzaGFkb3dNYXRyaXgubXVsdGlwbHkoc2hhZG93Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdHNoYWRvd01hdHJpeC5tdWx0aXBseShzaGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0fVxuXG5cdGdldFZpZXdwb3J0KHZpZXdwb3J0SW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3ZpZXdwb3J0SW5kZXhdO1xuXHR9XG5cblx0Z2V0RnJhbWVFeHRlbnRzKCkge1xuXHRcdHJldHVybiB0aGlzLl9mcmFtZUV4dGVudHM7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdGlmICh0aGlzLm1hcCkge1xuXHRcdFx0dGhpcy5tYXAuZGlzcG9zZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1hcFBhc3MpIHtcblx0XHRcdHRoaXMubWFwUGFzcy5kaXNwb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLmNhbWVyYSA9IHNvdXJjZS5jYW1lcmEuY2xvbmUoKTtcblx0XHR0aGlzLmJpYXMgPSBzb3VyY2UuYmlhcztcblx0XHR0aGlzLnJhZGl1cyA9IHNvdXJjZS5yYWRpdXM7XG5cdFx0dGhpcy5tYXBTaXplLmNvcHkoc291cmNlLm1hcFNpemUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBvYmplY3QgPSB7fTtcblx0XHRpZiAodGhpcy5iaWFzICE9PSAwKSBvYmplY3QuYmlhcyA9IHRoaXMuYmlhcztcblx0XHRpZiAodGhpcy5ub3JtYWxCaWFzICE9PSAwKSBvYmplY3Qubm9ybWFsQmlhcyA9IHRoaXMubm9ybWFsQmlhcztcblx0XHRpZiAodGhpcy5yYWRpdXMgIT09IDEpIG9iamVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1cztcblx0XHRpZiAodGhpcy5tYXBTaXplLnggIT09IDUxMiB8fCB0aGlzLm1hcFNpemUueSAhPT0gNTEyKSBvYmplY3QubWFwU2l6ZSA9IHRoaXMubWFwU2l6ZS50b0FycmF5KCk7XG5cdFx0b2JqZWN0LmNhbWVyYSA9IHRoaXMuY2FtZXJhLnRvSlNPTihmYWxzZSkub2JqZWN0O1xuXHRcdGRlbGV0ZSBvYmplY3QuY2FtZXJhLm1hdHJpeDtcblx0XHRyZXR1cm4gb2JqZWN0O1xuXHR9XG5cbn1cblxuY2xhc3MgU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgTGlnaHRTaGFkb3cge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihuZXcgUGVyc3BlY3RpdmVDYW1lcmEoNTAsIDEsIDAuNSwgNTAwKSk7XG5cdFx0dGhpcy5mb2N1cyA9IDE7XG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhO1xuXHRcdGNvbnN0IGZvdiA9IFJBRDJERUcgKiAyICogbGlnaHQuYW5nbGUgKiB0aGlzLmZvY3VzO1xuXHRcdGNvbnN0IGFzcGVjdCA9IHRoaXMubWFwU2l6ZS53aWR0aCAvIHRoaXMubWFwU2l6ZS5oZWlnaHQ7XG5cdFx0Y29uc3QgZmFyID0gbGlnaHQuZGlzdGFuY2UgfHwgY2FtZXJhLmZhcjtcblxuXHRcdGlmIChmb3YgIT09IGNhbWVyYS5mb3YgfHwgYXNwZWN0ICE9PSBjYW1lcmEuYXNwZWN0IHx8IGZhciAhPT0gY2FtZXJhLmZhcikge1xuXHRcdFx0Y2FtZXJhLmZvdiA9IGZvdjtcblx0XHRcdGNhbWVyYS5hc3BlY3QgPSBhc3BlY3Q7XG5cdFx0XHRjYW1lcmEuZmFyID0gZmFyO1xuXHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHR9XG5cblx0XHRzdXBlci51cGRhdGVNYXRyaWNlcyhsaWdodCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmZvY3VzID0gc291cmNlLmZvY3VzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuU3BvdExpZ2h0U2hhZG93LnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIFNwb3RMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3IoY29sb3IsIGludGVuc2l0eSwgZGlzdGFuY2UgPSAwLCBhbmdsZSA9IE1hdGguUEkgLyAzLCBwZW51bWJyYSA9IDAsIGRlY2F5ID0gMSkge1xuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xuXHRcdHRoaXMudHlwZSA9ICdTcG90TGlnaHQnO1xuXHRcdHRoaXMucG9zaXRpb24uY29weShPYmplY3QzRC5EZWZhdWx0VXApO1xuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XG5cdFx0dGhpcy50YXJnZXQgPSBuZXcgT2JqZWN0M0QoKTtcblx0XHR0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0dGhpcy5hbmdsZSA9IGFuZ2xlO1xuXHRcdHRoaXMucGVudW1icmEgPSBwZW51bWJyYTtcblx0XHR0aGlzLmRlY2F5ID0gZGVjYXk7IC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi5cblxuXHRcdHRoaXMuc2hhZG93ID0gbmV3IFNwb3RMaWdodFNoYWRvdygpO1xuXHR9XG5cblx0Z2V0IHBvd2VyKCkge1xuXHRcdC8vIGNvbXB1dGUgdGhlIGxpZ2h0J3MgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucykgZnJvbSBpdHMgaW50ZW5zaXR5IChpbiBjYW5kZWxhKVxuXHRcdC8vIGJ5IGNvbnZlbnRpb24gZm9yIGEgc3BvdGxpZ2h0LCBsdW1pbm91cyBwb3dlciAobG0pID0gz4AgKiBsdW1pbm91cyBpbnRlbnNpdHkgKGNkKVxuXHRcdHJldHVybiB0aGlzLmludGVuc2l0eSAqIE1hdGguUEk7XG5cdH1cblxuXHRzZXQgcG93ZXIocG93ZXIpIHtcblx0XHQvLyBzZXQgdGhlIGxpZ2h0J3MgaW50ZW5zaXR5IChpbiBjYW5kZWxhKSBmcm9tIHRoZSBkZXNpcmVkIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpXG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBwb3dlciAvIE1hdGguUEk7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuc2hhZG93LmRpc3Bvc2UoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuZGlzdGFuY2UgPSBzb3VyY2UuZGlzdGFuY2U7XG5cdFx0dGhpcy5hbmdsZSA9IHNvdXJjZS5hbmdsZTtcblx0XHR0aGlzLnBlbnVtYnJhID0gc291cmNlLnBlbnVtYnJhO1xuXHRcdHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7XG5cdFx0dGhpcy50YXJnZXQgPSBzb3VyY2UudGFyZ2V0LmNsb25lKCk7XG5cdFx0dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5TcG90TGlnaHQucHJvdG90eXBlLmlzU3BvdExpZ2h0ID0gdHJ1ZTtcblxuY29uc3QgX3Byb2pTY3JlZW5NYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2xpZ2h0UG9zaXRpb25Xb3JsZCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbG9va1RhcmdldCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBQb2ludExpZ2h0U2hhZG93IGV4dGVuZHMgTGlnaHRTaGFkb3cge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihuZXcgUGVyc3BlY3RpdmVDYW1lcmEoOTAsIDEsIDAuNSwgNTAwKSk7XG5cdFx0dGhpcy5fZnJhbWVFeHRlbnRzID0gbmV3IFZlY3RvcjIoNCwgMik7XG5cdFx0dGhpcy5fdmlld3BvcnRDb3VudCA9IDY7XG5cdFx0dGhpcy5fdmlld3BvcnRzID0gWy8vIFRoZXNlIHZpZXdwb3J0cyBtYXAgYSBjdWJlLW1hcCBvbnRvIGEgMkQgdGV4dHVyZSB3aXRoIHRoZVxuXHRcdC8vIGZvbGxvd2luZyBvcmllbnRhdGlvbjpcblx0XHQvL1xuXHRcdC8vXHR4elhaXG5cdFx0Ly9cdCB5IFlcblx0XHQvL1xuXHRcdC8vIFggLSBQb3NpdGl2ZSB4IGRpcmVjdGlvblxuXHRcdC8vIHggLSBOZWdhdGl2ZSB4IGRpcmVjdGlvblxuXHRcdC8vIFkgLSBQb3NpdGl2ZSB5IGRpcmVjdGlvblxuXHRcdC8vIHkgLSBOZWdhdGl2ZSB5IGRpcmVjdGlvblxuXHRcdC8vIFogLSBQb3NpdGl2ZSB6IGRpcmVjdGlvblxuXHRcdC8vIHogLSBOZWdhdGl2ZSB6IGRpcmVjdGlvblxuXHRcdC8vIHBvc2l0aXZlIFhcblx0XHRuZXcgVmVjdG9yNCgyLCAxLCAxLCAxKSwgLy8gbmVnYXRpdmUgWFxuXHRcdG5ldyBWZWN0b3I0KDAsIDEsIDEsIDEpLCAvLyBwb3NpdGl2ZSBaXG5cdFx0bmV3IFZlY3RvcjQoMywgMSwgMSwgMSksIC8vIG5lZ2F0aXZlIFpcblx0XHRuZXcgVmVjdG9yNCgxLCAxLCAxLCAxKSwgLy8gcG9zaXRpdmUgWVxuXHRcdG5ldyBWZWN0b3I0KDMsIDAsIDEsIDEpLCAvLyBuZWdhdGl2ZSBZXG5cdFx0bmV3IFZlY3RvcjQoMSwgMCwgMSwgMSldO1xuXHRcdHRoaXMuX2N1YmVEaXJlY3Rpb25zID0gW25ldyBWZWN0b3IzKDEsIDAsIDApLCBuZXcgVmVjdG9yMygtMSwgMCwgMCksIG5ldyBWZWN0b3IzKDAsIDAsIDEpLCBuZXcgVmVjdG9yMygwLCAwLCAtMSksIG5ldyBWZWN0b3IzKDAsIDEsIDApLCBuZXcgVmVjdG9yMygwLCAtMSwgMCldO1xuXHRcdHRoaXMuX2N1YmVVcHMgPSBbbmV3IFZlY3RvcjMoMCwgMSwgMCksIG5ldyBWZWN0b3IzKDAsIDEsIDApLCBuZXcgVmVjdG9yMygwLCAxLCAwKSwgbmV3IFZlY3RvcjMoMCwgMSwgMCksIG5ldyBWZWN0b3IzKDAsIDAsIDEpLCBuZXcgVmVjdG9yMygwLCAwLCAtMSldO1xuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMobGlnaHQsIHZpZXdwb3J0SW5kZXggPSAwKSB7XG5cdFx0Y29uc3QgY2FtZXJhID0gdGhpcy5jYW1lcmE7XG5cdFx0Y29uc3Qgc2hhZG93TWF0cml4ID0gdGhpcy5tYXRyaXg7XG5cdFx0Y29uc3QgZmFyID0gbGlnaHQuZGlzdGFuY2UgfHwgY2FtZXJhLmZhcjtcblxuXHRcdGlmIChmYXIgIT09IGNhbWVyYS5mYXIpIHtcblx0XHRcdGNhbWVyYS5mYXIgPSBmYXI7XG5cdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdH1cblxuXHRcdF9saWdodFBvc2l0aW9uV29ybGQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdGNhbWVyYS5wb3NpdGlvbi5jb3B5KF9saWdodFBvc2l0aW9uV29ybGQpO1xuXG5cdFx0X2xvb2tUYXJnZXQuY29weShjYW1lcmEucG9zaXRpb24pO1xuXG5cdFx0X2xvb2tUYXJnZXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW3ZpZXdwb3J0SW5kZXhdKTtcblxuXHRcdGNhbWVyYS51cC5jb3B5KHRoaXMuX2N1YmVVcHNbdmlld3BvcnRJbmRleF0pO1xuXHRcdGNhbWVyYS5sb29rQXQoX2xvb2tUYXJnZXQpO1xuXHRcdGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHNoYWRvd01hdHJpeC5tYWtlVHJhbnNsYXRpb24oLV9saWdodFBvc2l0aW9uV29ybGQueCwgLV9saWdodFBvc2l0aW9uV29ybGQueSwgLV9saWdodFBvc2l0aW9uV29ybGQueik7XG5cblx0XHRfcHJvalNjcmVlbk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblxuXHRcdHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoX3Byb2pTY3JlZW5NYXRyaXgpO1xuXHR9XG5cbn1cblxuUG9pbnRMaWdodFNoYWRvdy5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93ID0gdHJ1ZTtcblxuY2xhc3MgUG9pbnRMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3IoY29sb3IsIGludGVuc2l0eSwgZGlzdGFuY2UgPSAwLCBkZWNheSA9IDEpIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRMaWdodCc7XG5cdFx0dGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdHRoaXMuZGVjYXkgPSBkZWNheTsgLy8gZm9yIHBoeXNpY2FsbHkgY29ycmVjdCBsaWdodHMsIHNob3VsZCBiZSAyLlxuXG5cdFx0dGhpcy5zaGFkb3cgPSBuZXcgUG9pbnRMaWdodFNoYWRvdygpO1xuXHR9XG5cblx0Z2V0IHBvd2VyKCkge1xuXHRcdC8vIGNvbXB1dGUgdGhlIGxpZ2h0J3MgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucykgZnJvbSBpdHMgaW50ZW5zaXR5IChpbiBjYW5kZWxhKVxuXHRcdC8vIGZvciBhbiBpc290cm9waWMgbGlnaHQgc291cmNlLCBsdW1pbm91cyBwb3dlciAobG0pID0gNCDPgCBsdW1pbm91cyBpbnRlbnNpdHkgKGNkKVxuXHRcdHJldHVybiB0aGlzLmludGVuc2l0eSAqIDQgKiBNYXRoLlBJO1xuXHR9XG5cblx0c2V0IHBvd2VyKHBvd2VyKSB7XG5cdFx0Ly8gc2V0IHRoZSBsaWdodCdzIGludGVuc2l0eSAoaW4gY2FuZGVsYSkgZnJvbSB0aGUgZGVzaXJlZCBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKVxuXHRcdHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyAoNCAqIE1hdGguUEkpO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLnNoYWRvdy5kaXNwb3NlKCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmRpc3RhbmNlID0gc291cmNlLmRpc3RhbmNlO1xuXHRcdHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7XG5cdFx0dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5Qb2ludExpZ2h0LnByb3RvdHlwZS5pc1BvaW50TGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGV4dGVuZHMgTGlnaHRTaGFkb3cge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKC01LCA1LCA1LCAtNSwgMC41LCA1MDApKTtcblx0fVxuXG59XG5cbkRpcmVjdGlvbmFsTGlnaHRTaGFkb3cucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIERpcmVjdGlvbmFsTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHkpIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnRGlyZWN0aW9uYWxMaWdodCc7XG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KE9iamVjdDNELkRlZmF1bHRVcCk7XG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLnRhcmdldCA9IG5ldyBPYmplY3QzRCgpO1xuXHRcdHRoaXMuc2hhZG93ID0gbmV3IERpcmVjdGlvbmFsTGlnaHRTaGFkb3coKTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5zaGFkb3cuZGlzcG9zZSgpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy50YXJnZXQgPSBzb3VyY2UudGFyZ2V0LmNsb25lKCk7XG5cdFx0dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5EaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBBbWJpZW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHkpIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnQW1iaWVudExpZ2h0Jztcblx0fVxuXG59XG5cbkFtYmllbnRMaWdodC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBSZWN0QXJlYUxpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5LCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxMCkge1xuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xuXHRcdHRoaXMudHlwZSA9ICdSZWN0QXJlYUxpZ2h0Jztcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdH1cblxuXHRnZXQgcG93ZXIoKSB7XG5cdFx0Ly8gY29tcHV0ZSB0aGUgbGlnaHQncyBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKSBmcm9tIGl0cyBpbnRlbnNpdHkgKGluIG5pdHMpXG5cdFx0cmV0dXJuIHRoaXMuaW50ZW5zaXR5ICogdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0ICogTWF0aC5QSTtcblx0fVxuXG5cdHNldCBwb3dlcihwb3dlcikge1xuXHRcdC8vIHNldCB0aGUgbGlnaHQncyBpbnRlbnNpdHkgKGluIG5pdHMpIGZyb20gdGhlIGRlc2lyZWQgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucylcblx0XHR0aGlzLmludGVuc2l0eSA9IHBvd2VyIC8gKHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIE1hdGguUEkpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04obWV0YSk7XG5cdFx0ZGF0YS5vYmplY3Qud2lkdGggPSB0aGlzLndpZHRoO1xuXHRcdGRhdGEub2JqZWN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuUmVjdEFyZWFMaWdodC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0ID0gdHJ1ZTtcblxuLyoqXG4gKiBQcmltYXJ5IHJlZmVyZW5jZTpcbiAqXHQgaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmXG4gKlxuICogU2Vjb25kYXJ5IHJlZmVyZW5jZTpcbiAqXHQgaHR0cHM6Ly93d3cucHBzbG9hbi5vcmcvcHVibGljYXRpb25zL1N0dXBpZFNIMzYucGRmXG4gKi9cbi8vIDMtYmFuZCBTSCBkZWZpbmVkIGJ5IDkgY29lZmZpY2llbnRzXG5cbmNsYXNzIFNwaGVyaWNhbEhhcm1vbmljczMge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvZWZmaWNpZW50cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdHRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IFZlY3RvcjMoKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0KGNvZWZmaWNpZW50cykge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5jb3B5KGNvZWZmaWNpZW50c1tpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR6ZXJvKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5zZXQoMCwgMCwgMCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gZ2V0IHRoZSByYWRpYW5jZSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBub3JtYWxcblx0Ly8gdGFyZ2V0IGlzIGEgVmVjdG9yM1xuXG5cblx0Z2V0QXQobm9ybWFsLCB0YXJnZXQpIHtcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aFxuXHRcdGNvbnN0IHggPSBub3JtYWwueCxcblx0XHRcdFx0XHR5ID0gbm9ybWFsLnksXG5cdFx0XHRcdFx0eiA9IG5vcm1hbC56O1xuXHRcdGNvbnN0IGNvZWZmID0gdGhpcy5jb2VmZmljaWVudHM7IC8vIGJhbmQgMFxuXG5cdFx0dGFyZ2V0LmNvcHkoY29lZmZbMF0pLm11bHRpcGx5U2NhbGFyKDAuMjgyMDk1KTsgLy8gYmFuZCAxXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzFdLCAwLjQ4ODYwMyAqIHkpO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbMl0sIDAuNDg4NjAzICogeik7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZlszXSwgMC40ODg2MDMgKiB4KTsgLy8gYmFuZCAyXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzRdLCAxLjA5MjU0OCAqICh4ICogeSkpO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbNV0sIDEuMDkyNTQ4ICogKHkgKiB6KSk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls2XSwgMC4zMTUzOTIgKiAoMy4wICogeiAqIHogLSAxLjApKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzddLCAxLjA5MjU0OCAqICh4ICogeikpO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbOF0sIDAuNTQ2Mjc0ICogKHggKiB4IC0geSAqIHkpKTtcblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9IC8vIGdldCB0aGUgaXJyYWRpYW5jZSAocmFkaWFuY2UgY29udm9sdmVkIHdpdGggY29zaW5lIGxvYmUpIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5vcm1hbFxuXHQvLyB0YXJnZXQgaXMgYSBWZWN0b3IzXG5cdC8vIGh0dHBzOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L3BhcGVycy9lbnZtYXAvZW52bWFwLnBkZlxuXG5cblx0Z2V0SXJyYWRpYW5jZUF0KG5vcm1hbCwgdGFyZ2V0KSB7XG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGhcblx0XHRjb25zdCB4ID0gbm9ybWFsLngsXG5cdFx0XHRcdFx0eSA9IG5vcm1hbC55LFxuXHRcdFx0XHRcdHogPSBub3JtYWwuejtcblx0XHRjb25zdCBjb2VmZiA9IHRoaXMuY29lZmZpY2llbnRzOyAvLyBiYW5kIDBcblxuXHRcdHRhcmdldC5jb3B5KGNvZWZmWzBdKS5tdWx0aXBseVNjYWxhcigwLjg4NjIyNyk7IC8vIM+AICogMC4yODIwOTVcblx0XHQvLyBiYW5kIDFcblxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbMV0sIDIuMCAqIDAuNTExNjY0ICogeSk7IC8vICggMiAqIM+AIC8gMyApICogMC40ODg2MDNcblxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbMl0sIDIuMCAqIDAuNTExNjY0ICogeik7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZlszXSwgMi4wICogMC41MTE2NjQgKiB4KTsgLy8gYmFuZCAyXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzRdLCAyLjAgKiAwLjQyOTA0MyAqIHggKiB5KTsgLy8gKCDPgCAvIDQgKSAqIDEuMDkyNTQ4XG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzVdLCAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6KTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzZdLCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDgpOyAvLyAoIM+AIC8gNCApICogMC4zMTUzOTIgKiAzXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzddLCAyLjAgKiAwLjQyOTA0MyAqIHggKiB6KTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzhdLCAwLjQyOTA0MyAqICh4ICogeCAtIHkgKiB5KSk7IC8vICggz4AgLyA0ICkgKiAwLjU0NjI3NFxuXG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGFkZChzaCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGQoc2guY29lZmZpY2llbnRzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxlZFNIKHNoLCBzKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdHRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3RvcihzaC5jb2VmZmljaWVudHNbaV0sIHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2NhbGUocykge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5tdWx0aXBseVNjYWxhcihzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnAoc2gsIGFscGhhKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdHRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAoc2guY29lZmZpY2llbnRzW2ldLCBhbHBoYSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMoc2gpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0aWYgKCF0aGlzLmNvZWZmaWNpZW50c1tpXS5lcXVhbHMoc2guY29lZmZpY2llbnRzW2ldKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb3B5KHNoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0KHNoLmNvZWZmaWNpZW50cyk7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5LCBvZmZzZXQgPSAwKSB7XG5cdFx0Y29uc3QgY29lZmZpY2llbnRzID0gdGhpcy5jb2VmZmljaWVudHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0Y29lZmZpY2llbnRzW2ldLmZyb21BcnJheShhcnJheSwgb2Zmc2V0ICsgaSAqIDMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9BcnJheShhcnJheSA9IFtdLCBvZmZzZXQgPSAwKSB7XG5cdFx0Y29uc3QgY29lZmZpY2llbnRzID0gdGhpcy5jb2VmZmljaWVudHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0Y29lZmZpY2llbnRzW2ldLnRvQXJyYXkoYXJyYXksIG9mZnNldCArIGkgKiAzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH0gLy8gZXZhbHVhdGUgdGhlIGJhc2lzIGZ1bmN0aW9uc1xuXHQvLyBzaEJhc2lzIGlzIGFuIEFycmF5WyA5IF1cblxuXG5cdHN0YXRpYyBnZXRCYXNpc0F0KG5vcm1hbCwgc2hCYXNpcykge1xuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoXG5cdFx0Y29uc3QgeCA9IG5vcm1hbC54LFxuXHRcdFx0XHRcdHkgPSBub3JtYWwueSxcblx0XHRcdFx0XHR6ID0gbm9ybWFsLno7IC8vIGJhbmQgMFxuXG5cdFx0c2hCYXNpc1swXSA9IDAuMjgyMDk1OyAvLyBiYW5kIDFcblxuXHRcdHNoQmFzaXNbMV0gPSAwLjQ4ODYwMyAqIHk7XG5cdFx0c2hCYXNpc1syXSA9IDAuNDg4NjAzICogejtcblx0XHRzaEJhc2lzWzNdID0gMC40ODg2MDMgKiB4OyAvLyBiYW5kIDJcblxuXHRcdHNoQmFzaXNbNF0gPSAxLjA5MjU0OCAqIHggKiB5O1xuXHRcdHNoQmFzaXNbNV0gPSAxLjA5MjU0OCAqIHkgKiB6O1xuXHRcdHNoQmFzaXNbNl0gPSAwLjMxNTM5MiAqICgzICogeiAqIHogLSAxKTtcblx0XHRzaEJhc2lzWzddID0gMS4wOTI1NDggKiB4ICogejtcblx0XHRzaEJhc2lzWzhdID0gMC41NDYyNzQgKiAoeCAqIHggLSB5ICogeSk7XG5cdH1cblxufVxuXG5TcGhlcmljYWxIYXJtb25pY3MzLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczMgPSB0cnVlO1xuXG5jbGFzcyBMaWdodFByb2JlIGV4dGVuZHMgTGlnaHQge1xuXHRjb25zdHJ1Y3RvcihzaCA9IG5ldyBTcGhlcmljYWxIYXJtb25pY3MzKCksIGludGVuc2l0eSA9IDEpIHtcblx0XHRzdXBlcih1bmRlZmluZWQsIGludGVuc2l0eSk7XG5cdFx0dGhpcy5zaCA9IHNoO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5zaC5jb3B5KHNvdXJjZS5zaCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBqc29uLmludGVuc2l0eTsgLy8gVE9ETzogTW92ZSB0aGlzIGJpdCB0byBMaWdodC5mcm9tSlNPTigpO1xuXG5cdFx0dGhpcy5zaC5mcm9tQXJyYXkoanNvbi5zaCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04obWV0YSk7XG5cdFx0ZGF0YS5vYmplY3Quc2ggPSB0aGlzLnNoLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cbkxpZ2h0UHJvYmUucHJvdG90eXBlLmlzTGlnaHRQcm9iZSA9IHRydWU7XG5cbmNsYXNzIE1hdGVyaWFsTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHRcdHRoaXMudGV4dHVyZXMgPSB7fTtcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoc2NvcGUubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgoc2NvcGUucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoc2NvcGUucmVxdWVzdEhlYWRlcik7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyhzY29wZS53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9uTG9hZChzY29wZS5wYXJzZShKU09OLnBhcnNlKHRleHQpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChvbkVycm9yKSB7XG5cdFx0XHRcdFx0b25FcnJvcihlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdH1cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0fVxuXG5cdHBhcnNlKGpzb24pIHtcblx0XHRjb25zdCB0ZXh0dXJlcyA9IHRoaXMudGV4dHVyZXM7XG5cblx0XHRmdW5jdGlvbiBnZXRUZXh0dXJlKG5hbWUpIHtcblx0XHRcdGlmICh0ZXh0dXJlc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0ZXJpYWxMb2FkZXI6IFVuZGVmaW5lZCB0ZXh0dXJlJywgbmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0ZXh0dXJlc1tuYW1lXTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbHNbanNvbi50eXBlXSgpO1xuXHRcdGlmIChqc29uLnV1aWQgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudXVpZCA9IGpzb24udXVpZDtcblx0XHRpZiAoanNvbi5uYW1lICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLm5hbWUgPSBqc29uLm5hbWU7XG5cdFx0aWYgKGpzb24uY29sb3IgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5jb2xvciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jb2xvci5zZXRIZXgoanNvbi5jb2xvcik7XG5cdFx0aWYgKGpzb24ucm91Z2huZXNzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnJvdWdobmVzcyA9IGpzb24ucm91Z2huZXNzO1xuXHRcdGlmIChqc29uLm1ldGFsbmVzcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5tZXRhbG5lc3MgPSBqc29uLm1ldGFsbmVzcztcblx0XHRpZiAoanNvbi5zaGVlbiAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaGVlbiA9IGpzb24uc2hlZW47XG5cdFx0aWYgKGpzb24uc2hlZW5Db2xvciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaGVlbkNvbG9yID0gbmV3IENvbG9yKCkuc2V0SGV4KGpzb24uc2hlZW5Db2xvcik7XG5cdFx0aWYgKGpzb24uc2hlZW5Sb3VnaG5lc3MgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBqc29uLnNoZWVuUm91Z2huZXNzO1xuXHRcdGlmIChqc29uLmVtaXNzaXZlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuZW1pc3NpdmUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZW1pc3NpdmUuc2V0SGV4KGpzb24uZW1pc3NpdmUpO1xuXHRcdGlmIChqc29uLnNwZWN1bGFyICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuc3BlY3VsYXIgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3BlY3VsYXIuc2V0SGV4KGpzb24uc3BlY3VsYXIpO1xuXHRcdGlmIChqc29uLnNwZWN1bGFySW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5ID0ganNvbi5zcGVjdWxhckludGVuc2l0eTtcblx0XHRpZiAoanNvbi5zcGVjdWxhckNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLnNldEhleChqc29uLnNwZWN1bGFyQ29sb3IpO1xuXHRcdGlmIChqc29uLnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaGluaW5lc3MgPSBqc29uLnNoaW5pbmVzcztcblx0XHRpZiAoanNvbi5jbGVhcmNvYXQgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuY2xlYXJjb2F0ID0ganNvbi5jbGVhcmNvYXQ7XG5cdFx0aWYgKGpzb24uY2xlYXJjb2F0Um91Z2huZXNzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGpzb24uY2xlYXJjb2F0Um91Z2huZXNzO1xuXHRcdGlmIChqc29uLnRyYW5zbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC50cmFuc21pc3Npb24gPSBqc29uLnRyYW5zbWlzc2lvbjtcblx0XHRpZiAoanNvbi50aGlja25lc3MgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudGhpY2tuZXNzID0ganNvbi50aGlja25lc3M7XG5cdFx0aWYgKGpzb24uYXR0ZW51YXRpb25EaXN0YW5jZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlID0ganNvbi5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdGlmIChqc29uLmF0dGVudWF0aW9uQ29sb3IgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KGpzb24uYXR0ZW51YXRpb25Db2xvcik7XG5cdFx0aWYgKGpzb24uZm9nICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmZvZyA9IGpzb24uZm9nO1xuXHRcdGlmIChqc29uLmZsYXRTaGFkaW5nICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmZsYXRTaGFkaW5nID0ganNvbi5mbGF0U2hhZGluZztcblx0XHRpZiAoanNvbi5ibGVuZGluZyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5ibGVuZGluZyA9IGpzb24uYmxlbmRpbmc7XG5cdFx0aWYgKGpzb24uY29tYmluZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jb21iaW5lID0ganNvbi5jb21iaW5lO1xuXHRcdGlmIChqc29uLnNpZGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2lkZSA9IGpzb24uc2lkZTtcblx0XHRpZiAoanNvbi5zaGFkb3dTaWRlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNoYWRvd1NpZGUgPSBqc29uLnNoYWRvd1NpZGU7XG5cdFx0aWYgKGpzb24ub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5vcGFjaXR5ID0ganNvbi5vcGFjaXR5O1xuXHRcdGlmIChqc29uLnRyYW5zcGFyZW50ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0ganNvbi50cmFuc3BhcmVudDtcblx0XHRpZiAoanNvbi5hbHBoYVRlc3QgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYWxwaGFUZXN0ID0ganNvbi5hbHBoYVRlc3Q7XG5cdFx0aWYgKGpzb24uZGVwdGhUZXN0ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRlcHRoVGVzdCA9IGpzb24uZGVwdGhUZXN0O1xuXHRcdGlmIChqc29uLmRlcHRoV3JpdGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZGVwdGhXcml0ZSA9IGpzb24uZGVwdGhXcml0ZTtcblx0XHRpZiAoanNvbi5jb2xvcldyaXRlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNvbG9yV3JpdGUgPSBqc29uLmNvbG9yV3JpdGU7XG5cdFx0aWYgKGpzb24uYWxwaGFXcml0ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hbHBoYVdyaXRlID0ganNvbi5hbHBoYVdyaXRlO1xuXHRcdGlmIChqc29uLnN0ZW5jaWxXcml0ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zdGVuY2lsV3JpdGUgPSBqc29uLnN0ZW5jaWxXcml0ZTtcblx0XHRpZiAoanNvbi5zdGVuY2lsV3JpdGVNYXNrICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxXcml0ZU1hc2sgPSBqc29uLnN0ZW5jaWxXcml0ZU1hc2s7XG5cdFx0aWYgKGpzb24uc3RlbmNpbEZ1bmMgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbEZ1bmMgPSBqc29uLnN0ZW5jaWxGdW5jO1xuXHRcdGlmIChqc29uLnN0ZW5jaWxSZWYgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbFJlZiA9IGpzb24uc3RlbmNpbFJlZjtcblx0XHRpZiAoanNvbi5zdGVuY2lsRnVuY01hc2sgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbEZ1bmNNYXNrID0ganNvbi5zdGVuY2lsRnVuY01hc2s7XG5cdFx0aWYgKGpzb24uc3RlbmNpbEZhaWwgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbEZhaWwgPSBqc29uLnN0ZW5jaWxGYWlsO1xuXHRcdGlmIChqc29uLnN0ZW5jaWxaRmFpbCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zdGVuY2lsWkZhaWwgPSBqc29uLnN0ZW5jaWxaRmFpbDtcblx0XHRpZiAoanNvbi5zdGVuY2lsWlBhc3MgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbFpQYXNzID0ganNvbi5zdGVuY2lsWlBhc3M7XG5cdFx0aWYgKGpzb24ud2lyZWZyYW1lICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLndpcmVmcmFtZSA9IGpzb24ud2lyZWZyYW1lO1xuXHRcdGlmIChqc29uLndpcmVmcmFtZUxpbmV3aWR0aCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGggPSBqc29uLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRpZiAoanNvbi53aXJlZnJhbWVMaW5lY2FwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAgPSBqc29uLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0aWYgKGpzb24ud2lyZWZyYW1lTGluZWpvaW4gIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gPSBqc29uLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdGlmIChqc29uLnJvdGF0aW9uICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnJvdGF0aW9uID0ganNvbi5yb3RhdGlvbjtcblx0XHRpZiAoanNvbi5saW5ld2lkdGggIT09IDEpIG1hdGVyaWFsLmxpbmV3aWR0aCA9IGpzb24ubGluZXdpZHRoO1xuXHRcdGlmIChqc29uLmRhc2hTaXplICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRhc2hTaXplID0ganNvbi5kYXNoU2l6ZTtcblx0XHRpZiAoanNvbi5nYXBTaXplICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmdhcFNpemUgPSBqc29uLmdhcFNpemU7XG5cdFx0aWYgKGpzb24uc2NhbGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2NhbGUgPSBqc29uLnNjYWxlO1xuXHRcdGlmIChqc29uLnBvbHlnb25PZmZzZXQgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwucG9seWdvbk9mZnNldCA9IGpzb24ucG9seWdvbk9mZnNldDtcblx0XHRpZiAoanNvbi5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBqc29uLnBvbHlnb25PZmZzZXRGYWN0b3I7XG5cdFx0aWYgKGpzb24ucG9seWdvbk9mZnNldFVuaXRzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRVbml0cyA9IGpzb24ucG9seWdvbk9mZnNldFVuaXRzO1xuXHRcdGlmIChqc29uLmRpdGhlcmluZyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kaXRoZXJpbmcgPSBqc29uLmRpdGhlcmluZztcblx0XHRpZiAoanNvbi5hbHBoYVRvQ292ZXJhZ2UgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYWxwaGFUb0NvdmVyYWdlID0ganNvbi5hbHBoYVRvQ292ZXJhZ2U7XG5cdFx0aWYgKGpzb24ucHJlbXVsdGlwbGllZEFscGhhICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSA9IGpzb24ucHJlbXVsdGlwbGllZEFscGhhO1xuXHRcdGlmIChqc29uLnZpc2libGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudmlzaWJsZSA9IGpzb24udmlzaWJsZTtcblx0XHRpZiAoanNvbi50b25lTWFwcGVkICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnRvbmVNYXBwZWQgPSBqc29uLnRvbmVNYXBwZWQ7XG5cdFx0aWYgKGpzb24udXNlckRhdGEgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudXNlckRhdGEgPSBqc29uLnVzZXJEYXRhO1xuXG5cdFx0aWYgKGpzb24udmVydGV4Q29sb3JzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0eXBlb2YganNvbi52ZXJ0ZXhDb2xvcnMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdG1hdGVyaWFsLnZlcnRleENvbG9ycyA9IGpzb24udmVydGV4Q29sb3JzID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGVyaWFsLnZlcnRleENvbG9ycyA9IGpzb24udmVydGV4Q29sb3JzO1xuXHRcdFx0fVxuXHRcdH0gLy8gU2hhZGVyIE1hdGVyaWFsXG5cblxuXHRcdGlmIChqc29uLnVuaWZvcm1zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgbmFtZSBpbiBqc29uLnVuaWZvcm1zKSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm0gPSBqc29uLnVuaWZvcm1zW25hbWVdO1xuXHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXSA9IHt9O1xuXG5cdFx0XHRcdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSAndCc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IGdldFRleHR1cmUodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbbmFtZV0udmFsdWUgPSBuZXcgQ29sb3IoKS5zZXRIZXgodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ3YyJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ3YzJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ3Y0Jzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IFZlY3RvcjQoKS5mcm9tQXJyYXkodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ20zJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IE1hdHJpeDMoKS5mcm9tQXJyYXkodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ200Jzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IE1hdHJpeDQoKS5mcm9tQXJyYXkodW5pZm9ybS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoanNvbi5kZWZpbmVzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRlZmluZXMgPSBqc29uLmRlZmluZXM7XG5cdFx0aWYgKGpzb24udmVydGV4U2hhZGVyICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnZlcnRleFNoYWRlciA9IGpzb24udmVydGV4U2hhZGVyO1xuXHRcdGlmIChqc29uLmZyYWdtZW50U2hhZGVyICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyID0ganNvbi5mcmFnbWVudFNoYWRlcjtcblxuXHRcdGlmIChqc29uLmV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4ganNvbi5leHRlbnNpb25zKSB7XG5cdFx0XHRcdG1hdGVyaWFsLmV4dGVuc2lvbnNba2V5XSA9IGpzb24uZXh0ZW5zaW9uc1trZXldO1xuXHRcdFx0fVxuXHRcdH0gLy8gRGVwcmVjYXRlZFxuXG5cblx0XHRpZiAoanNvbi5zaGFkaW5nICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmZsYXRTaGFkaW5nID0ganNvbi5zaGFkaW5nID09PSAxOyAvLyBUSFJFRS5GbGF0U2hhZGluZ1xuXHRcdC8vIGZvciBQb2ludHNNYXRlcmlhbFxuXG5cdFx0aWYgKGpzb24uc2l6ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaXplID0ganNvbi5zaXplO1xuXHRcdGlmIChqc29uLnNpemVBdHRlbnVhdGlvbiAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaXplQXR0ZW51YXRpb24gPSBqc29uLnNpemVBdHRlbnVhdGlvbjsgLy8gbWFwc1xuXG5cdFx0aWYgKGpzb24ubWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLm1hcCA9IGdldFRleHR1cmUoanNvbi5tYXApO1xuXHRcdGlmIChqc29uLm1hdGNhcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5tYXRjYXAgPSBnZXRUZXh0dXJlKGpzb24ubWF0Y2FwKTtcblx0XHRpZiAoanNvbi5hbHBoYU1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hbHBoYU1hcCA9IGdldFRleHR1cmUoanNvbi5hbHBoYU1hcCk7XG5cdFx0aWYgKGpzb24uYnVtcE1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5idW1wTWFwID0gZ2V0VGV4dHVyZShqc29uLmJ1bXBNYXApO1xuXHRcdGlmIChqc29uLmJ1bXBTY2FsZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5idW1wU2NhbGUgPSBqc29uLmJ1bXBTY2FsZTtcblx0XHRpZiAoanNvbi5ub3JtYWxNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubm9ybWFsTWFwID0gZ2V0VGV4dHVyZShqc29uLm5vcm1hbE1hcCk7XG5cdFx0aWYgKGpzb24ubm9ybWFsTWFwVHlwZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5ub3JtYWxNYXBUeXBlID0ganNvbi5ub3JtYWxNYXBUeXBlO1xuXG5cdFx0aWYgKGpzb24ubm9ybWFsU2NhbGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IG5vcm1hbFNjYWxlID0ganNvbi5ub3JtYWxTY2FsZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobm9ybWFsU2NhbGUpID09PSBmYWxzZSkge1xuXHRcdFx0XHQvLyBCbGVuZGVyIGV4cG9ydGVyIHVzZWQgdG8gZXhwb3J0IGEgc2NhbGFyLiBTZWUgIzc0NTlcblx0XHRcdFx0bm9ybWFsU2NhbGUgPSBbbm9ybWFsU2NhbGUsIG5vcm1hbFNjYWxlXTtcblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWwubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigpLmZyb21BcnJheShub3JtYWxTY2FsZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGpzb24uZGlzcGxhY2VtZW50TWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCA9IGdldFRleHR1cmUoanNvbi5kaXNwbGFjZW1lbnRNYXApO1xuXHRcdGlmIChqc29uLmRpc3BsYWNlbWVudFNjYWxlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlID0ganNvbi5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRpZiAoanNvbi5kaXNwbGFjZW1lbnRCaWFzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXMgPSBqc29uLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0aWYgKGpzb24ucm91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnJvdWdobmVzc01hcCA9IGdldFRleHR1cmUoanNvbi5yb3VnaG5lc3NNYXApO1xuXHRcdGlmIChqc29uLm1ldGFsbmVzc01hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgPSBnZXRUZXh0dXJlKGpzb24ubWV0YWxuZXNzTWFwKTtcblx0XHRpZiAoanNvbi5lbWlzc2l2ZU1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGdldFRleHR1cmUoanNvbi5lbWlzc2l2ZU1hcCk7XG5cdFx0aWYgKGpzb24uZW1pc3NpdmVJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHkgPSBqc29uLmVtaXNzaXZlSW50ZW5zaXR5O1xuXHRcdGlmIChqc29uLnNwZWN1bGFyTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNwZWN1bGFyTWFwID0gZ2V0VGV4dHVyZShqc29uLnNwZWN1bGFyTWFwKTtcblx0XHRpZiAoanNvbi5zcGVjdWxhckludGVuc2l0eU1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCA9IGdldFRleHR1cmUoanNvbi5zcGVjdWxhckludGVuc2l0eU1hcCk7XG5cdFx0aWYgKGpzb24uc3BlY3VsYXJDb2xvck1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwID0gZ2V0VGV4dHVyZShqc29uLnNwZWN1bGFyQ29sb3JNYXApO1xuXHRcdGlmIChqc29uLmVudk1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5lbnZNYXAgPSBnZXRUZXh0dXJlKGpzb24uZW52TWFwKTtcblx0XHRpZiAoanNvbi5lbnZNYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID0ganNvbi5lbnZNYXBJbnRlbnNpdHk7XG5cdFx0aWYgKGpzb24ucmVmbGVjdGl2aXR5ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnJlZmxlY3Rpdml0eSA9IGpzb24ucmVmbGVjdGl2aXR5O1xuXHRcdGlmIChqc29uLnJlZnJhY3Rpb25SYXRpbyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5yZWZyYWN0aW9uUmF0aW8gPSBqc29uLnJlZnJhY3Rpb25SYXRpbztcblx0XHRpZiAoanNvbi5saWdodE1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5saWdodE1hcCA9IGdldFRleHR1cmUoanNvbi5saWdodE1hcCk7XG5cdFx0aWYgKGpzb24ubGlnaHRNYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNpdHkgPSBqc29uLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdGlmIChqc29uLmFvTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmFvTWFwID0gZ2V0VGV4dHVyZShqc29uLmFvTWFwKTtcblx0XHRpZiAoanNvbi5hb01hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hb01hcEludGVuc2l0eSA9IGpzb24uYW9NYXBJbnRlbnNpdHk7XG5cdFx0aWYgKGpzb24uZ3JhZGllbnRNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZ3JhZGllbnRNYXAgPSBnZXRUZXh0dXJlKGpzb24uZ3JhZGllbnRNYXApO1xuXHRcdGlmIChqc29uLmNsZWFyY29hdE1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgPSBnZXRUZXh0dXJlKGpzb24uY2xlYXJjb2F0TWFwKTtcblx0XHRpZiAoanNvbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gZ2V0VGV4dHVyZShqc29uLmNsZWFyY29hdFJvdWdobmVzc01hcCk7XG5cdFx0aWYgKGpzb24uY2xlYXJjb2F0Tm9ybWFsTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCA9IGdldFRleHR1cmUoanNvbi5jbGVhcmNvYXROb3JtYWxNYXApO1xuXHRcdGlmIChqc29uLmNsZWFyY29hdE5vcm1hbFNjYWxlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoanNvbi5jbGVhcmNvYXROb3JtYWxTY2FsZSk7XG5cdFx0aWYgKGpzb24udHJhbnNtaXNzaW9uTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCA9IGdldFRleHR1cmUoanNvbi50cmFuc21pc3Npb25NYXApO1xuXHRcdGlmIChqc29uLnRoaWNrbmVzc01hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC50aGlja25lc3NNYXAgPSBnZXRUZXh0dXJlKGpzb24udGhpY2tuZXNzTWFwKTtcblx0XHRpZiAoanNvbi5zaGVlbkNvbG9yTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNoZWVuQ29sb3JNYXAgPSBnZXRUZXh0dXJlKGpzb24uc2hlZW5Db2xvck1hcCk7XG5cdFx0aWYgKGpzb24uc2hlZW5Sb3VnaG5lc3NNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAgPSBnZXRUZXh0dXJlKGpzb24uc2hlZW5Sb3VnaG5lc3NNYXApO1xuXHRcdHJldHVybiBtYXRlcmlhbDtcblx0fVxuXG5cdHNldFRleHR1cmVzKHZhbHVlKSB7XG5cdFx0dGhpcy50ZXh0dXJlcyA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuY2xhc3MgTG9hZGVyVXRpbHMge1xuXHRzdGF0aWMgZGVjb2RlVGV4dChhcnJheSkge1xuXHRcdGlmICh0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGFycmF5KTtcblx0XHR9IC8vIEF2b2lkIHRoZSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGFycmF5KSBzaG9ydGN1dCwgd2hpY2hcblx0XHQvLyB0aHJvd3MgYSBcIm1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIgZXJyb3IgZm9yIGxhcmdlIGFycmF5cy5cblxuXG5cdFx0bGV0IHMgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdC8vIEltcGxpY2l0bHkgYXNzdW1lcyBsaXR0bGUtZW5kaWFuLlxuXHRcdFx0cyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFycmF5W2ldKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gbWVyZ2VzIG11bHRpLWJ5dGUgdXRmLTggY2hhcmFjdGVycy5cblx0XHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHMpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBzZWUgIzE2MzU4XG5cdFx0XHRyZXR1cm4gcztcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZXh0cmFjdFVybEJhc2UodXJsKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gJy4vJztcblx0XHRyZXR1cm4gdXJsLnN1YnN0cigwLCBpbmRleCArIDEpO1xuXHR9XG5cblx0c3RhdGljIHJlc29sdmVVUkwodXJsLCBwYXRoKSB7XG5cdFx0Ly8gSW52YWxpZCBVUkxcblx0XHRpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgfHwgdXJsID09PSAnJykgcmV0dXJuICcnOyAvLyBIb3N0IFJlbGF0aXZlIFVSTFxuXG5cdFx0aWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocGF0aCkgJiYgL15cXC8vLnRlc3QodXJsKSkge1xuXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZSgvKF5odHRwcz86XFwvXFwvW15cXC9dKykuKi9pLCAnJDEnKTtcblx0XHR9IC8vIEFic29sdXRlIFVSTCBodHRwOi8vLGh0dHBzOi8vLC8vXG5cblxuXHRcdGlmICgvXihodHRwcz86KT9cXC9cXC8vaS50ZXN0KHVybCkpIHJldHVybiB1cmw7IC8vIERhdGEgVVJJXG5cblx0XHRpZiAoL15kYXRhOi4qLC4qJC9pLnRlc3QodXJsKSkgcmV0dXJuIHVybDsgLy8gQmxvYiBVUkxcblxuXHRcdGlmICgvXmJsb2I6LiokL2kudGVzdCh1cmwpKSByZXR1cm4gdXJsOyAvLyBSZWxhdGl2ZSBVUkxcblxuXHRcdHJldHVybiBwYXRoICsgdXJsO1xuXHR9XG5cbn1cblxuY2xhc3MgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Jztcblx0XHR0aGlzLmluc3RhbmNlQ291bnQgPSBJbmZpbml0eTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuaW5zdGFuY2VDb3VudCA9IHNvdXJjZS5pbnN0YW5jZUNvdW50O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKHRoaXMpO1xuXHRcdGRhdGEuaW5zdGFuY2VDb3VudCA9IHRoaXMuaW5zdGFuY2VDb3VudDtcblx0XHRkYXRhLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSB0cnVlO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSB0cnVlO1xuXG5jbGFzcyBCdWZmZXJHZW9tZXRyeUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoc2NvcGUubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgoc2NvcGUucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoc2NvcGUucmVxdWVzdEhlYWRlcik7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyhzY29wZS53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9uTG9hZChzY29wZS5wYXJzZShKU09OLnBhcnNlKHRleHQpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChvbkVycm9yKSB7XG5cdFx0XHRcdFx0b25FcnJvcihlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdH1cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0fVxuXG5cdHBhcnNlKGpzb24pIHtcblx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlck1hcCA9IHt9O1xuXHRcdGNvbnN0IGFycmF5QnVmZmVyTWFwID0ge307XG5cblx0XHRmdW5jdGlvbiBnZXRJbnRlcmxlYXZlZEJ1ZmZlcihqc29uLCB1dWlkKSB7XG5cdFx0XHRpZiAoaW50ZXJsZWF2ZWRCdWZmZXJNYXBbdXVpZF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGludGVybGVhdmVkQnVmZmVyTWFwW3V1aWRdO1xuXHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXJzID0ganNvbi5pbnRlcmxlYXZlZEJ1ZmZlcnM7XG5cdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IGludGVybGVhdmVkQnVmZmVyc1t1dWlkXTtcblx0XHRcdGNvbnN0IGJ1ZmZlciA9IGdldEFycmF5QnVmZmVyKGpzb24sIGludGVybGVhdmVkQnVmZmVyLmJ1ZmZlcik7XG5cdFx0XHRjb25zdCBhcnJheSA9IGdldFR5cGVkQXJyYXkoaW50ZXJsZWF2ZWRCdWZmZXIudHlwZSwgYnVmZmVyKTtcblx0XHRcdGNvbnN0IGliID0gbmV3IEludGVybGVhdmVkQnVmZmVyKGFycmF5LCBpbnRlcmxlYXZlZEJ1ZmZlci5zdHJpZGUpO1xuXHRcdFx0aWIudXVpZCA9IGludGVybGVhdmVkQnVmZmVyLnV1aWQ7XG5cdFx0XHRpbnRlcmxlYXZlZEJ1ZmZlck1hcFt1dWlkXSA9IGliO1xuXHRcdFx0cmV0dXJuIGliO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKGpzb24sIHV1aWQpIHtcblx0XHRcdGlmIChhcnJheUJ1ZmZlck1hcFt1dWlkXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJyYXlCdWZmZXJNYXBbdXVpZF07XG5cdFx0XHRjb25zdCBhcnJheUJ1ZmZlcnMgPSBqc29uLmFycmF5QnVmZmVycztcblx0XHRcdGNvbnN0IGFycmF5QnVmZmVyID0gYXJyYXlCdWZmZXJzW3V1aWRdO1xuXHRcdFx0Y29uc3QgYWIgPSBuZXcgVWludDMyQXJyYXkoYXJyYXlCdWZmZXIpLmJ1ZmZlcjtcblx0XHRcdGFycmF5QnVmZmVyTWFwW3V1aWRdID0gYWI7XG5cdFx0XHRyZXR1cm4gYWI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBqc29uLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPyBuZXcgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkoKSA6IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IGluZGV4ID0ganNvbi5kYXRhLmluZGV4O1xuXG5cdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHR5cGVkQXJyYXkgPSBnZXRUeXBlZEFycmF5KGluZGV4LnR5cGUsIGluZGV4LmFycmF5KTtcblx0XHRcdGdlb21ldHJ5LnNldEluZGV4KG5ldyBCdWZmZXJBdHRyaWJ1dGUodHlwZWRBcnJheSwgMSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBqc29uLmRhdGEuYXR0cmlidXRlcztcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdGxldCBidWZmZXJBdHRyaWJ1dGU7XG5cblx0XHRcdGlmIChhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IGdldEludGVybGVhdmVkQnVmZmVyKGpzb24uZGF0YSwgYXR0cmlidXRlLmRhdGEpO1xuXHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUgPSBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW50ZXJsZWF2ZWRCdWZmZXIsIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm9mZnNldCwgYXR0cmlidXRlLm5vcm1hbGl6ZWQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdHlwZWRBcnJheSA9IGdldFR5cGVkQXJyYXkoYXR0cmlidXRlLnR5cGUsIGF0dHJpYnV0ZS5hcnJheSk7XG5cdFx0XHRcdGNvbnN0IGJ1ZmZlckF0dHJpYnV0ZUNvbnN0ciA9IGF0dHJpYnV0ZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA/IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA6IEJ1ZmZlckF0dHJpYnV0ZTtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IGJ1ZmZlckF0dHJpYnV0ZUNvbnN0cih0eXBlZEFycmF5LCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5ub3JtYWxpemVkKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGF0dHJpYnV0ZS5uYW1lICE9PSB1bmRlZmluZWQpIGJ1ZmZlckF0dHJpYnV0ZS5uYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRpZiAoYXR0cmlidXRlLnVzYWdlICE9PSB1bmRlZmluZWQpIGJ1ZmZlckF0dHJpYnV0ZS5zZXRVc2FnZShhdHRyaWJ1dGUudXNhZ2UpO1xuXG5cdFx0XHRpZiAoYXR0cmlidXRlLnVwZGF0ZVJhbmdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlLnVwZGF0ZVJhbmdlLm9mZnNldCA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZS5vZmZzZXQ7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZS51cGRhdGVSYW5nZS5jb3VudCA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZS5jb3VudDtcblx0XHRcdH1cblxuXHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKGtleSwgYnVmZmVyQXR0cmlidXRlKTtcblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBqc29uLmRhdGEubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0aWYgKG1vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gbW9ycGhBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZUFycmF5ID0gbW9ycGhBdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUFycmF5W2ldO1xuXHRcdFx0XHRcdGxldCBidWZmZXJBdHRyaWJ1dGU7XG5cblx0XHRcdFx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyID0gZ2V0SW50ZXJsZWF2ZWRCdWZmZXIoanNvbi5kYXRhLCBhdHRyaWJ1dGUuZGF0YSk7XG5cdFx0XHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUgPSBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW50ZXJsZWF2ZWRCdWZmZXIsIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm9mZnNldCwgYXR0cmlidXRlLm5vcm1hbGl6ZWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0eXBlZEFycmF5ID0gZ2V0VHlwZWRBcnJheShhdHRyaWJ1dGUudHlwZSwgYXR0cmlidXRlLmFycmF5KTtcblx0XHRcdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBCdWZmZXJBdHRyaWJ1dGUodHlwZWRBcnJheSwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUubm9ybWFsaXplZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGF0dHJpYnV0ZS5uYW1lICE9PSB1bmRlZmluZWQpIGJ1ZmZlckF0dHJpYnV0ZS5uYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRcdFx0YXJyYXkucHVzaChidWZmZXJBdHRyaWJ1dGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzW2tleV0gPSBhcnJheTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaFRhcmdldHNSZWxhdGl2ZSA9IGpzb24uZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblxuXHRcdGlmIChtb3JwaFRhcmdldHNSZWxhdGl2ZSkge1xuXHRcdFx0Z2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGdyb3VwcyA9IGpzb24uZGF0YS5ncm91cHMgfHwganNvbi5kYXRhLmRyYXdjYWxscyB8fCBqc29uLmRhdGEub2Zmc2V0cztcblxuXHRcdGlmIChncm91cHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBncm91cHMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cdFx0XHRcdGdlb21ldHJ5LmFkZEdyb3VwKGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgYm91bmRpbmdTcGhlcmUgPSBqc29uLmRhdGEuYm91bmRpbmdTcGhlcmU7XG5cblx0XHRpZiAoYm91bmRpbmdTcGhlcmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgY2VudGVyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0aWYgKGJvdW5kaW5nU3BoZXJlLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNlbnRlci5mcm9tQXJyYXkoYm91bmRpbmdTcGhlcmUuY2VudGVyKTtcblx0XHRcdH1cblxuXHRcdFx0Z2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPSBuZXcgU3BoZXJlKGNlbnRlciwgYm91bmRpbmdTcGhlcmUucmFkaXVzKTtcblx0XHR9XG5cblx0XHRpZiAoanNvbi5uYW1lKSBnZW9tZXRyeS5uYW1lID0ganNvbi5uYW1lO1xuXHRcdGlmIChqc29uLnVzZXJEYXRhKSBnZW9tZXRyeS51c2VyRGF0YSA9IGpzb24udXNlckRhdGE7XG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9XG5cbn1cblxuY2xhc3MgT2JqZWN0TG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBwYXRoID0gdGhpcy5wYXRoID09PSAnJyA/IExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKHVybCkgOiB0aGlzLnBhdGg7XG5cdFx0dGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnJlc291cmNlUGF0aCB8fCBwYXRoO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdGxldCBqc29uID0gbnVsbDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0anNvbiA9IEpTT04ucGFyc2UodGV4dCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRpZiAob25FcnJvciAhPT0gdW5kZWZpbmVkKSBvbkVycm9yKGVycm9yKTtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUU6T2JqZWN0TG9hZGVyOiBDYW5cXCd0IHBhcnNlICcgKyB1cmwgKyAnLicsIGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1ldGFkYXRhID0ganNvbi5tZXRhZGF0YTtcblxuXHRcdFx0aWYgKG1ldGFkYXRhID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2dlb21ldHJ5Jykge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IENhblxcJ3QgbG9hZCAnICsgdXJsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5wYXJzZShqc29uLCBvbkxvYWQpO1xuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpO1xuXHR9XG5cblx0YXN5bmMgbG9hZEFzeW5jKHVybCwgb25Qcm9ncmVzcykge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBwYXRoID0gdGhpcy5wYXRoID09PSAnJyA/IExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKHVybCkgOiB0aGlzLnBhdGg7XG5cdFx0dGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnJlc291cmNlUGF0aCB8fCBwYXRoO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGNvbnN0IHRleHQgPSBhd2FpdCBsb2FkZXIubG9hZEFzeW5jKHVybCwgb25Qcm9ncmVzcyk7XG5cdFx0Y29uc3QganNvbiA9IEpTT04ucGFyc2UodGV4dCk7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBqc29uLm1ldGFkYXRhO1xuXG5cdFx0aWYgKG1ldGFkYXRhID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2dlb21ldHJ5Jykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IENhblxcJ3QgbG9hZCAnICsgdXJsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXdhaXQgc2NvcGUucGFyc2VBc3luYyhqc29uKTtcblx0fVxuXG5cdHBhcnNlKGpzb24sIG9uTG9hZCkge1xuXHRcdGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLnBhcnNlQW5pbWF0aW9ucyhqc29uLmFuaW1hdGlvbnMpO1xuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyc2VTaGFwZXMoanNvbi5zaGFwZXMpO1xuXHRcdGNvbnN0IGdlb21ldHJpZXMgPSB0aGlzLnBhcnNlR2VvbWV0cmllcyhqc29uLmdlb21ldHJpZXMsIHNoYXBlcyk7XG5cdFx0Y29uc3QgaW1hZ2VzID0gdGhpcy5wYXJzZUltYWdlcyhqc29uLmltYWdlcywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKG9uTG9hZCAhPT0gdW5kZWZpbmVkKSBvbkxvYWQob2JqZWN0KTtcblx0XHR9KTtcblx0XHRjb25zdCB0ZXh0dXJlcyA9IHRoaXMucGFyc2VUZXh0dXJlcyhqc29uLnRleHR1cmVzLCBpbWFnZXMpO1xuXHRcdGNvbnN0IG1hdGVyaWFscyA9IHRoaXMucGFyc2VNYXRlcmlhbHMoanNvbi5tYXRlcmlhbHMsIHRleHR1cmVzKTtcblx0XHRjb25zdCBvYmplY3QgPSB0aGlzLnBhcnNlT2JqZWN0KGpzb24ub2JqZWN0LCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMsIHRleHR1cmVzLCBhbmltYXRpb25zKTtcblx0XHRjb25zdCBza2VsZXRvbnMgPSB0aGlzLnBhcnNlU2tlbGV0b25zKGpzb24uc2tlbGV0b25zLCBvYmplY3QpO1xuXHRcdHRoaXMuYmluZFNrZWxldG9ucyhvYmplY3QsIHNrZWxldG9ucyk7IC8vXG5cblx0XHRpZiAob25Mb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBoYXNJbWFnZXMgPSBmYWxzZTtcblxuXHRcdFx0Zm9yIChjb25zdCB1dWlkIGluIGltYWdlcykge1xuXHRcdFx0XHRpZiAoaW1hZ2VzW3V1aWRdIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuXHRcdFx0XHRcdGhhc0ltYWdlcyA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc0ltYWdlcyA9PT0gZmFsc2UpIG9uTG9hZChvYmplY3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvYmplY3Q7XG5cdH1cblxuXHRhc3luYyBwYXJzZUFzeW5jKGpzb24pIHtcblx0XHRjb25zdCBhbmltYXRpb25zID0gdGhpcy5wYXJzZUFuaW1hdGlvbnMoanNvbi5hbmltYXRpb25zKTtcblx0XHRjb25zdCBzaGFwZXMgPSB0aGlzLnBhcnNlU2hhcGVzKGpzb24uc2hhcGVzKTtcblx0XHRjb25zdCBnZW9tZXRyaWVzID0gdGhpcy5wYXJzZUdlb21ldHJpZXMoanNvbi5nZW9tZXRyaWVzLCBzaGFwZXMpO1xuXHRcdGNvbnN0IGltYWdlcyA9IGF3YWl0IHRoaXMucGFyc2VJbWFnZXNBc3luYyhqc29uLmltYWdlcyk7XG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB0aGlzLnBhcnNlVGV4dHVyZXMoanNvbi50ZXh0dXJlcywgaW1hZ2VzKTtcblx0XHRjb25zdCBtYXRlcmlhbHMgPSB0aGlzLnBhcnNlTWF0ZXJpYWxzKGpzb24ubWF0ZXJpYWxzLCB0ZXh0dXJlcyk7XG5cdFx0Y29uc3Qgb2JqZWN0ID0gdGhpcy5wYXJzZU9iamVjdChqc29uLm9iamVjdCwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucyk7XG5cdFx0Y29uc3Qgc2tlbGV0b25zID0gdGhpcy5wYXJzZVNrZWxldG9ucyhqc29uLnNrZWxldG9ucywgb2JqZWN0KTtcblx0XHR0aGlzLmJpbmRTa2VsZXRvbnMob2JqZWN0LCBza2VsZXRvbnMpO1xuXHRcdHJldHVybiBvYmplY3Q7XG5cdH1cblxuXHRwYXJzZVNoYXBlcyhqc29uKSB7XG5cdFx0Y29uc3Qgc2hhcGVzID0ge307XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNoYXBlID0gbmV3IFNoYXBlKCkuZnJvbUpTT04oanNvbltpXSk7XG5cdFx0XHRcdHNoYXBlc1tzaGFwZS51dWlkXSA9IHNoYXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzaGFwZXM7XG5cdH1cblxuXHRwYXJzZVNrZWxldG9ucyhqc29uLCBvYmplY3QpIHtcblx0XHRjb25zdCBza2VsZXRvbnMgPSB7fTtcblx0XHRjb25zdCBib25lcyA9IHt9OyAvLyBnZW5lcmF0ZSBib25lIGxvb2t1cCB0YWJsZVxuXG5cdFx0b2JqZWN0LnRyYXZlcnNlKGZ1bmN0aW9uIChjaGlsZCkge1xuXHRcdFx0aWYgKGNoaWxkLmlzQm9uZSkgYm9uZXNbY2hpbGQudXVpZF0gPSBjaGlsZDtcblx0XHR9KTsgLy8gY3JlYXRlIHNrZWxldG9uc1xuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpLmZyb21KU09OKGpzb25baV0sIGJvbmVzKTtcblx0XHRcdFx0c2tlbGV0b25zW3NrZWxldG9uLnV1aWRdID0gc2tlbGV0b247XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNrZWxldG9ucztcblx0fVxuXG5cdHBhcnNlR2VvbWV0cmllcyhqc29uLCBzaGFwZXMpIHtcblx0XHRjb25zdCBnZW9tZXRyaWVzID0ge307XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBidWZmZXJHZW9tZXRyeUxvYWRlciA9IG5ldyBCdWZmZXJHZW9tZXRyeUxvYWRlcigpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGxldCBnZW9tZXRyeTtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25baV07XG5cblx0XHRcdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdCdWZmZXJHZW9tZXRyeSc6XG5cdFx0XHRcdFx0Y2FzZSAnSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnknOlxuXHRcdFx0XHRcdFx0Z2VvbWV0cnkgPSBidWZmZXJHZW9tZXRyeUxvYWRlci5wYXJzZShkYXRhKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAnR2VvbWV0cnknOlxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuT2JqZWN0TG9hZGVyOiBUaGUgbGVnYWN5IEdlb21ldHJ5IHR5cGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGlmIChkYXRhLnR5cGUgaW4gR2VvbWV0cmllcykge1xuXHRcdFx0XHRcdFx0XHRnZW9tZXRyeSA9IEdlb21ldHJpZXNbZGF0YS50eXBlXS5mcm9tSlNPTihkYXRhLCBzaGFwZXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKGBUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgXCIke2RhdGEudHlwZX1cImApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZW9tZXRyeS51dWlkID0gZGF0YS51dWlkO1xuXHRcdFx0XHRpZiAoZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIGdlb21ldHJ5Lm5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ID09PSB0cnVlICYmIGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCkgZ2VvbWV0cnkudXNlckRhdGEgPSBkYXRhLnVzZXJEYXRhO1xuXHRcdFx0XHRnZW9tZXRyaWVzW2RhdGEudXVpZF0gPSBnZW9tZXRyeTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZ2VvbWV0cmllcztcblx0fVxuXG5cdHBhcnNlTWF0ZXJpYWxzKGpzb24sIHRleHR1cmVzKSB7XG5cdFx0Y29uc3QgY2FjaGUgPSB7fTsgLy8gTXVsdGlNYXRlcmlhbFxuXG5cdFx0Y29uc3QgbWF0ZXJpYWxzID0ge307XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBsb2FkZXIgPSBuZXcgTWF0ZXJpYWxMb2FkZXIoKTtcblx0XHRcdGxvYWRlci5zZXRUZXh0dXJlcyh0ZXh0dXJlcyk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25baV07XG5cblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gJ011bHRpTWF0ZXJpYWwnKSB7XG5cdFx0XHRcdFx0Ly8gRGVwcmVjYXRlZFxuXHRcdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGRhdGEubWF0ZXJpYWxzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IGRhdGEubWF0ZXJpYWxzW2pdO1xuXG5cdFx0XHRcdFx0XHRpZiAoY2FjaGVbbWF0ZXJpYWwudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjYWNoZVttYXRlcmlhbC51dWlkXSA9IGxvYWRlci5wYXJzZShtYXRlcmlhbCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFycmF5LnB1c2goY2FjaGVbbWF0ZXJpYWwudXVpZF0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1hdGVyaWFsc1tkYXRhLnV1aWRdID0gYXJyYXk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKGNhY2hlW2RhdGEudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y2FjaGVbZGF0YS51dWlkXSA9IGxvYWRlci5wYXJzZShkYXRhKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtYXRlcmlhbHNbZGF0YS51dWlkXSA9IGNhY2hlW2RhdGEudXVpZF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWxzO1xuXHR9XG5cblx0cGFyc2VBbmltYXRpb25zKGpzb24pIHtcblx0XHRjb25zdCBhbmltYXRpb25zID0ge307XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25baV07XG5cdFx0XHRcdGNvbnN0IGNsaXAgPSBBbmltYXRpb25DbGlwLnBhcnNlKGRhdGEpO1xuXHRcdFx0XHRhbmltYXRpb25zW2NsaXAudXVpZF0gPSBjbGlwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBhbmltYXRpb25zO1xuXHR9XG5cblx0cGFyc2VJbWFnZXMoanNvbiwgb25Mb2FkKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGltYWdlcyA9IHt9O1xuXHRcdGxldCBsb2FkZXI7XG5cblx0XHRmdW5jdGlvbiBsb2FkSW1hZ2UodXJsKSB7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHRcdFx0cmV0dXJuIGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHRcdH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvcih1cmwpO1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlc2VyaWFsaXplSW1hZ2UoaW1hZ2UpIHtcblx0XHRcdGlmICh0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlO1xuXHRcdFx0XHRjb25zdCBwYXRoID0gL14oXFwvXFwvKXwoW2Etel0rOihcXC9cXC8pPykvaS50ZXN0KHVybCkgPyB1cmwgOiBzY29wZS5yZXNvdXJjZVBhdGggKyB1cmw7XG5cdFx0XHRcdHJldHVybiBsb2FkSW1hZ2UocGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaW1hZ2UuZGF0YSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRkYXRhOiBnZXRUeXBlZEFycmF5KGltYWdlLnR5cGUsIGltYWdlLmRhdGEpLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCAmJiBqc29uLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG1hbmFnZXIgPSBuZXcgTG9hZGluZ01hbmFnZXIob25Mb2FkKTtcblx0XHRcdGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcihtYW5hZ2VyKTtcblx0XHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0ganNvbi5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGltYWdlID0ganNvbltpXTtcblx0XHRcdFx0Y29uc3QgdXJsID0gaW1hZ2UudXJsO1xuXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcblx0XHRcdFx0XHQvLyBsb2FkIGFycmF5IG9mIGltYWdlcyBlLmcgQ3ViZVRleHR1cmVcblx0XHRcdFx0XHRpbWFnZXNbaW1hZ2UudXVpZF0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwLCBqbCA9IHVybC5sZW5ndGg7IGogPCBqbDsgaisrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VXJsID0gdXJsW2pdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVzZXJpYWxpemVkSW1hZ2UgPSBkZXNlcmlhbGl6ZUltYWdlKGN1cnJlbnRVcmwpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZGVzZXJpYWxpemVkSW1hZ2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGRlc2VyaWFsaXplZEltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGltYWdlc1tpbWFnZS51dWlkXS5wdXNoKGRlc2VyaWFsaXplZEltYWdlKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzcGVjaWFsIGNhc2U6IGhhbmRsZSBhcnJheSBvZiBkYXRhIHRleHR1cmVzIGZvciBjdWJlIHRleHR1cmVzXG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdLnB1c2gobmV3IERhdGFUZXh0dXJlKGRlc2VyaWFsaXplZEltYWdlLmRhdGEsIGRlc2VyaWFsaXplZEltYWdlLndpZHRoLCBkZXNlcmlhbGl6ZWRJbWFnZS5oZWlnaHQpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBsb2FkIHNpbmdsZSBpbWFnZVxuXHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gZGVzZXJpYWxpemVJbWFnZShpbWFnZS51cmwpO1xuXG5cdFx0XHRcdFx0aWYgKGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRpbWFnZXNbaW1hZ2UudXVpZF0gPSBkZXNlcmlhbGl6ZWRJbWFnZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW1hZ2VzO1xuXHR9XG5cblx0YXN5bmMgcGFyc2VJbWFnZXNBc3luYyhqc29uKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGltYWdlcyA9IHt9O1xuXHRcdGxldCBsb2FkZXI7XG5cblx0XHRhc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZUltYWdlKGltYWdlKSB7XG5cdFx0XHRpZiAodHlwZW9mIGltYWdlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBpbWFnZTtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IC9eKFxcL1xcLyl8KFthLXpdKzooXFwvXFwvKT8pL2kudGVzdCh1cmwpID8gdXJsIDogc2NvcGUucmVzb3VyY2VQYXRoICsgdXJsO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgbG9hZGVyLmxvYWRBc3luYyhwYXRoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpbWFnZS5kYXRhKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRhdGE6IGdldFR5cGVkQXJyYXkoaW1hZ2UudHlwZSwgaW1hZ2UuZGF0YSksXG5cdFx0XHRcdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubGVuZ3RoID4gMCkge1xuXHRcdFx0bG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0XHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGpzb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbWFnZSA9IGpzb25baV07XG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlLnVybDtcblxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG5cdFx0XHRcdFx0Ly8gbG9hZCBhcnJheSBvZiBpbWFnZXMgZS5nIEN1YmVUZXh0dXJlXG5cdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMCwgamwgPSB1cmwubGVuZ3RoOyBqIDwgamw7IGorKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFVybCA9IHVybFtqXTtcblx0XHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gYXdhaXQgZGVzZXJpYWxpemVJbWFnZShjdXJyZW50VXJsKTtcblxuXHRcdFx0XHRcdFx0aWYgKGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkZXNlcmlhbGl6ZWRJbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpbWFnZXNbaW1hZ2UudXVpZF0ucHVzaChkZXNlcmlhbGl6ZWRJbWFnZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgYXJyYXkgb2YgZGF0YSB0ZXh0dXJlcyBmb3IgY3ViZSB0ZXh0dXJlc1xuXHRcdFx0XHRcdFx0XHRcdGltYWdlc1tpbWFnZS51dWlkXS5wdXNoKG5ldyBEYXRhVGV4dHVyZShkZXNlcmlhbGl6ZWRJbWFnZS5kYXRhLCBkZXNlcmlhbGl6ZWRJbWFnZS53aWR0aCwgZGVzZXJpYWxpemVkSW1hZ2UuaGVpZ2h0KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gbG9hZCBzaW5nbGUgaW1hZ2Vcblx0XHRcdFx0XHRjb25zdCBkZXNlcmlhbGl6ZWRJbWFnZSA9IGF3YWl0IGRlc2VyaWFsaXplSW1hZ2UoaW1hZ2UudXJsKTtcblxuXHRcdFx0XHRcdGlmIChkZXNlcmlhbGl6ZWRJbWFnZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdID0gZGVzZXJpYWxpemVkSW1hZ2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlcztcblx0fVxuXG5cdHBhcnNlVGV4dHVyZXMoanNvbiwgaW1hZ2VzKSB7XG5cdFx0ZnVuY3Rpb24gcGFyc2VDb25zdGFudCh2YWx1ZSwgdHlwZSkge1xuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB2YWx1ZTtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4nLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdHlwZVt2YWx1ZV07XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB7fTtcblxuXHRcdGlmIChqc29uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25baV07XG5cblx0XHRcdFx0aWYgKGRhdGEuaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBcImltYWdlXCIgc3BlY2lmaWVkIGZvcicsIGRhdGEudXVpZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaW1hZ2VzW2RhdGEuaW1hZ2VdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGltYWdlJywgZGF0YS5pbWFnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgdGV4dHVyZTtcblx0XHRcdFx0Y29uc3QgaW1hZ2UgPSBpbWFnZXNbZGF0YS5pbWFnZV07XG5cblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoaW1hZ2UpKSB7XG5cdFx0XHRcdFx0dGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZShpbWFnZSk7XG5cdFx0XHRcdFx0aWYgKGltYWdlLmxlbmd0aCA9PT0gNikgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKGltYWdlICYmIGltYWdlLmRhdGEpIHtcblx0XHRcdFx0XHRcdHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUoaW1hZ2UuZGF0YSwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRleHR1cmUgPSBuZXcgVGV4dHVyZShpbWFnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGltYWdlKSB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsgLy8gdGV4dHVyZXMgY2FuIGhhdmUgdW5kZWZpbmVkIGltYWdlIGRhdGFcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUudXVpZCA9IGRhdGEudXVpZDtcblx0XHRcdFx0aWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLm5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRcdGlmIChkYXRhLm1hcHBpbmcgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5tYXBwaW5nID0gcGFyc2VDb25zdGFudChkYXRhLm1hcHBpbmcsIFRFWFRVUkVfTUFQUElORyk7XG5cdFx0XHRcdGlmIChkYXRhLm9mZnNldCAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLm9mZnNldC5mcm9tQXJyYXkoZGF0YS5vZmZzZXQpO1xuXHRcdFx0XHRpZiAoZGF0YS5yZXBlYXQgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5yZXBlYXQuZnJvbUFycmF5KGRhdGEucmVwZWF0KTtcblx0XHRcdFx0aWYgKGRhdGEuY2VudGVyICE9PSB1bmRlZmluZWQpIHRleHR1cmUuY2VudGVyLmZyb21BcnJheShkYXRhLmNlbnRlcik7XG5cdFx0XHRcdGlmIChkYXRhLnJvdGF0aW9uICE9PSB1bmRlZmluZWQpIHRleHR1cmUucm90YXRpb24gPSBkYXRhLnJvdGF0aW9uO1xuXG5cdFx0XHRcdGlmIChkYXRhLndyYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRleHR1cmUud3JhcFMgPSBwYXJzZUNvbnN0YW50KGRhdGEud3JhcFswXSwgVEVYVFVSRV9XUkFQUElORyk7XG5cdFx0XHRcdFx0dGV4dHVyZS53cmFwVCA9IHBhcnNlQ29uc3RhbnQoZGF0YS53cmFwWzFdLCBURVhUVVJFX1dSQVBQSU5HKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhLmZvcm1hdCAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLmZvcm1hdCA9IGRhdGEuZm9ybWF0O1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlICE9PSB1bmRlZmluZWQpIHRleHR1cmUudHlwZSA9IGRhdGEudHlwZTtcblx0XHRcdFx0aWYgKGRhdGEuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5lbmNvZGluZyA9IGRhdGEuZW5jb2Rpbmc7XG5cdFx0XHRcdGlmIChkYXRhLm1pbkZpbHRlciAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLm1pbkZpbHRlciA9IHBhcnNlQ29uc3RhbnQoZGF0YS5taW5GaWx0ZXIsIFRFWFRVUkVfRklMVEVSKTtcblx0XHRcdFx0aWYgKGRhdGEubWFnRmlsdGVyICE9PSB1bmRlZmluZWQpIHRleHR1cmUubWFnRmlsdGVyID0gcGFyc2VDb25zdGFudChkYXRhLm1hZ0ZpbHRlciwgVEVYVFVSRV9GSUxURVIpO1xuXHRcdFx0XHRpZiAoZGF0YS5hbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQpIHRleHR1cmUuYW5pc290cm9weSA9IGRhdGEuYW5pc290cm9weTtcblx0XHRcdFx0aWYgKGRhdGEuZmxpcFkgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5mbGlwWSA9IGRhdGEuZmxpcFk7XG5cdFx0XHRcdGlmIChkYXRhLnByZW11bHRpcGx5QWxwaGEgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gZGF0YS5wcmVtdWx0aXBseUFscGhhO1xuXHRcdFx0XHRpZiAoZGF0YS51bnBhY2tBbGlnbm1lbnQgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgPSBkYXRhLnVucGFja0FsaWdubWVudDtcblx0XHRcdFx0aWYgKGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS51c2VyRGF0YSA9IGRhdGEudXNlckRhdGE7XG5cdFx0XHRcdHRleHR1cmVzW2RhdGEudXVpZF0gPSB0ZXh0dXJlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlcztcblx0fVxuXG5cdHBhcnNlT2JqZWN0KGRhdGEsIGdlb21ldHJpZXMsIG1hdGVyaWFscywgdGV4dHVyZXMsIGFuaW1hdGlvbnMpIHtcblx0XHRsZXQgb2JqZWN0O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0R2VvbWV0cnkobmFtZSkge1xuXHRcdFx0aWYgKGdlb21ldHJpZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5JywgbmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBnZW9tZXRyaWVzW25hbWVdO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldE1hdGVyaWFsKG5hbWUpIHtcblx0XHRcdGlmIChuYW1lID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBuYW1lW2ldO1xuXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsc1t1dWlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsJywgdXVpZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXJyYXkucHVzaChtYXRlcmlhbHNbdXVpZF0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWF0ZXJpYWxzW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCcsIG5hbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0ZXJpYWxzW25hbWVdO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFRleHR1cmUodXVpZCkge1xuXHRcdFx0aWYgKHRleHR1cmVzW3V1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCB0ZXh0dXJlJywgdXVpZCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0ZXh0dXJlc1t1dWlkXTtcblx0XHR9XG5cblx0XHRsZXQgZ2VvbWV0cnksIG1hdGVyaWFsO1xuXG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgJ1NjZW5lJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNjZW5lKCk7XG5cblx0XHRcdFx0aWYgKGRhdGEuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKE51bWJlci5pc0ludGVnZXIoZGF0YS5iYWNrZ3JvdW5kKSkge1xuXHRcdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSBuZXcgQ29sb3IoZGF0YS5iYWNrZ3JvdW5kKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSBnZXRUZXh0dXJlKGRhdGEuYmFja2dyb3VuZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGEuZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9iamVjdC5lbnZpcm9ubWVudCA9IGdldFRleHR1cmUoZGF0YS5lbnZpcm9ubWVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YS5mb2cgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChkYXRhLmZvZy50eXBlID09PSAnRm9nJykge1xuXHRcdFx0XHRcdFx0b2JqZWN0LmZvZyA9IG5ldyBGb2coZGF0YS5mb2cuY29sb3IsIGRhdGEuZm9nLm5lYXIsIGRhdGEuZm9nLmZhcik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLmZvZy50eXBlID09PSAnRm9nRXhwMicpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5mb2cgPSBuZXcgRm9nRXhwMihkYXRhLmZvZy5jb2xvciwgZGF0YS5mb2cuZGVuc2l0eSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1BlcnNwZWN0aXZlQ2FtZXJhJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKGRhdGEuZm92LCBkYXRhLmFzcGVjdCwgZGF0YS5uZWFyLCBkYXRhLmZhcik7XG5cdFx0XHRcdGlmIChkYXRhLmZvY3VzICE9PSB1bmRlZmluZWQpIG9iamVjdC5mb2N1cyA9IGRhdGEuZm9jdXM7XG5cdFx0XHRcdGlmIChkYXRhLnpvb20gIT09IHVuZGVmaW5lZCkgb2JqZWN0Lnpvb20gPSBkYXRhLnpvb207XG5cdFx0XHRcdGlmIChkYXRhLmZpbG1HYXVnZSAhPT0gdW5kZWZpbmVkKSBvYmplY3QuZmlsbUdhdWdlID0gZGF0YS5maWxtR2F1Z2U7XG5cdFx0XHRcdGlmIChkYXRhLmZpbG1PZmZzZXQgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmZpbG1PZmZzZXQgPSBkYXRhLmZpbG1PZmZzZXQ7XG5cdFx0XHRcdGlmIChkYXRhLnZpZXcgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLnZpZXcpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnT3J0aG9ncmFwaGljQ2FtZXJhJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYShkYXRhLmxlZnQsIGRhdGEucmlnaHQsIGRhdGEudG9wLCBkYXRhLmJvdHRvbSwgZGF0YS5uZWFyLCBkYXRhLmZhcik7XG5cdFx0XHRcdGlmIChkYXRhLnpvb20gIT09IHVuZGVmaW5lZCkgb2JqZWN0Lnpvb20gPSBkYXRhLnpvb207XG5cdFx0XHRcdGlmIChkYXRhLnZpZXcgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLnZpZXcpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnQW1iaWVudExpZ2h0Jzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IEFtYmllbnRMaWdodChkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdEaXJlY3Rpb25hbExpZ2h0Jzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUG9pbnRMaWdodCc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBQb2ludExpZ2h0KGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5LCBkYXRhLmRpc3RhbmNlLCBkYXRhLmRlY2F5KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1JlY3RBcmVhTGlnaHQnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUmVjdEFyZWFMaWdodChkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnU3BvdExpZ2h0Jzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNwb3RMaWdodChkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS5kaXN0YW5jZSwgZGF0YS5hbmdsZSwgZGF0YS5wZW51bWJyYSwgZGF0YS5kZWNheSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdIZW1pc3BoZXJlTGlnaHQnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgSGVtaXNwaGVyZUxpZ2h0KGRhdGEuY29sb3IsIGRhdGEuZ3JvdW5kQ29sb3IsIGRhdGEuaW50ZW5zaXR5KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xpZ2h0UHJvYmUnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGlnaHRQcm9iZSgpLmZyb21KU09OKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnU2tpbm5lZE1lc2gnOlxuXHRcdFx0XHRnZW9tZXRyeSA9IGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpO1xuXHRcdFx0XHRtYXRlcmlhbCA9IGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpO1xuXHRcdFx0XHRvYmplY3QgPSBuZXcgU2tpbm5lZE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHRcdFx0aWYgKGRhdGEuYmluZE1vZGUgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmJpbmRNb2RlID0gZGF0YS5iaW5kTW9kZTtcblx0XHRcdFx0aWYgKGRhdGEuYmluZE1hdHJpeCAhPT0gdW5kZWZpbmVkKSBvYmplY3QuYmluZE1hdHJpeC5mcm9tQXJyYXkoZGF0YS5iaW5kTWF0cml4KTtcblx0XHRcdFx0aWYgKGRhdGEuc2tlbGV0b24gIT09IHVuZGVmaW5lZCkgb2JqZWN0LnNrZWxldG9uID0gZGF0YS5za2VsZXRvbjtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ01lc2gnOlxuXHRcdFx0XHRnZW9tZXRyeSA9IGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpO1xuXHRcdFx0XHRtYXRlcmlhbCA9IGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpO1xuXHRcdFx0XHRvYmplY3QgPSBuZXcgTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnSW5zdGFuY2VkTWVzaCc6XG5cdFx0XHRcdGdlb21ldHJ5ID0gZ2V0R2VvbWV0cnkoZGF0YS5nZW9tZXRyeSk7XG5cdFx0XHRcdG1hdGVyaWFsID0gZ2V0TWF0ZXJpYWwoZGF0YS5tYXRlcmlhbCk7XG5cdFx0XHRcdGNvbnN0IGNvdW50ID0gZGF0YS5jb3VudDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VNYXRyaXggPSBkYXRhLmluc3RhbmNlTWF0cml4O1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZUNvbG9yID0gZGF0YS5pbnN0YW5jZUNvbG9yO1xuXHRcdFx0XHRvYmplY3QgPSBuZXcgSW5zdGFuY2VkTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwsIGNvdW50KTtcblx0XHRcdFx0b2JqZWN0Lmluc3RhbmNlTWF0cml4ID0gbmV3IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KGluc3RhbmNlTWF0cml4LmFycmF5KSwgMTYpO1xuXHRcdFx0XHRpZiAoaW5zdGFuY2VDb2xvciAhPT0gdW5kZWZpbmVkKSBvYmplY3QuaW5zdGFuY2VDb2xvciA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheShpbnN0YW5jZUNvbG9yLmFycmF5KSwgaW5zdGFuY2VDb2xvci5pdGVtU2l6ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMT0QnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTE9EKCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaW5lJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpbmUoZ2V0R2VvbWV0cnkoZGF0YS5nZW9tZXRyeSksIGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xpbmVMb29wJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpbmVMb29wKGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpLCBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaW5lU2VnbWVudHMnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGluZVNlZ21lbnRzKGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpLCBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQb2ludENsb3VkJzpcblx0XHRcdGNhc2UgJ1BvaW50cyc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBQb2ludHMoZ2V0R2VvbWV0cnkoZGF0YS5nZW9tZXRyeSksIGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1Nwcml0ZSc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTcHJpdGUoZ2V0TWF0ZXJpYWwoZGF0YS5tYXRlcmlhbCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnR3JvdXAnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgR3JvdXAoKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0JvbmUnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgQm9uZSgpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0fVxuXG5cdFx0b2JqZWN0LnV1aWQgPSBkYXRhLnV1aWQ7XG5cdFx0aWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSBvYmplY3QubmFtZSA9IGRhdGEubmFtZTtcblxuXHRcdGlmIChkYXRhLm1hdHJpeCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvYmplY3QubWF0cml4LmZyb21BcnJheShkYXRhLm1hdHJpeCk7XG5cdFx0XHRpZiAoZGF0YS5tYXRyaXhBdXRvVXBkYXRlICE9PSB1bmRlZmluZWQpIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZGF0YS5tYXRyaXhBdXRvVXBkYXRlO1xuXHRcdFx0aWYgKG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlKSBvYmplY3QubWF0cml4LmRlY29tcG9zZShvYmplY3QucG9zaXRpb24sIG9iamVjdC5xdWF0ZXJuaW9uLCBvYmplY3Quc2NhbGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZGF0YS5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSBvYmplY3QucG9zaXRpb24uZnJvbUFycmF5KGRhdGEucG9zaXRpb24pO1xuXHRcdFx0aWYgKGRhdGEucm90YXRpb24gIT09IHVuZGVmaW5lZCkgb2JqZWN0LnJvdGF0aW9uLmZyb21BcnJheShkYXRhLnJvdGF0aW9uKTtcblx0XHRcdGlmIChkYXRhLnF1YXRlcm5pb24gIT09IHVuZGVmaW5lZCkgb2JqZWN0LnF1YXRlcm5pb24uZnJvbUFycmF5KGRhdGEucXVhdGVybmlvbik7XG5cdFx0XHRpZiAoZGF0YS5zY2FsZSAhPT0gdW5kZWZpbmVkKSBvYmplY3Quc2NhbGUuZnJvbUFycmF5KGRhdGEuc2NhbGUpO1xuXHRcdH1cblxuXHRcdGlmIChkYXRhLmNhc3RTaGFkb3cgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmNhc3RTaGFkb3cgPSBkYXRhLmNhc3RTaGFkb3c7XG5cdFx0aWYgKGRhdGEucmVjZWl2ZVNoYWRvdyAhPT0gdW5kZWZpbmVkKSBvYmplY3QucmVjZWl2ZVNoYWRvdyA9IGRhdGEucmVjZWl2ZVNoYWRvdztcblxuXHRcdGlmIChkYXRhLnNoYWRvdykge1xuXHRcdFx0aWYgKGRhdGEuc2hhZG93LmJpYXMgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnNoYWRvdy5iaWFzID0gZGF0YS5zaGFkb3cuYmlhcztcblx0XHRcdGlmIChkYXRhLnNoYWRvdy5ub3JtYWxCaWFzICE9PSB1bmRlZmluZWQpIG9iamVjdC5zaGFkb3cubm9ybWFsQmlhcyA9IGRhdGEuc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRpZiAoZGF0YS5zaGFkb3cucmFkaXVzICE9PSB1bmRlZmluZWQpIG9iamVjdC5zaGFkb3cucmFkaXVzID0gZGF0YS5zaGFkb3cucmFkaXVzO1xuXHRcdFx0aWYgKGRhdGEuc2hhZG93Lm1hcFNpemUgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnNoYWRvdy5tYXBTaXplLmZyb21BcnJheShkYXRhLnNoYWRvdy5tYXBTaXplKTtcblx0XHRcdGlmIChkYXRhLnNoYWRvdy5jYW1lcmEgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnNoYWRvdy5jYW1lcmEgPSB0aGlzLnBhcnNlT2JqZWN0KGRhdGEuc2hhZG93LmNhbWVyYSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSBvYmplY3QudmlzaWJsZSA9IGRhdGEudmlzaWJsZTtcblx0XHRpZiAoZGF0YS5mcnVzdHVtQ3VsbGVkICE9PSB1bmRlZmluZWQpIG9iamVjdC5mcnVzdHVtQ3VsbGVkID0gZGF0YS5mcnVzdHVtQ3VsbGVkO1xuXHRcdGlmIChkYXRhLnJlbmRlck9yZGVyICE9PSB1bmRlZmluZWQpIG9iamVjdC5yZW5kZXJPcmRlciA9IGRhdGEucmVuZGVyT3JkZXI7XG5cdFx0aWYgKGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnVzZXJEYXRhID0gZGF0YS51c2VyRGF0YTtcblx0XHRpZiAoZGF0YS5sYXllcnMgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmxheWVycy5tYXNrID0gZGF0YS5sYXllcnM7XG5cblx0XHRpZiAoZGF0YS5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0b2JqZWN0LmFkZCh0aGlzLnBhcnNlT2JqZWN0KGNoaWxkcmVuW2ldLCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMsIHRleHR1cmVzLCBhbmltYXRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEuYW5pbWF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBvYmplY3RBbmltYXRpb25zID0gZGF0YS5hbmltYXRpb25zO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdEFuaW1hdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IG9iamVjdEFuaW1hdGlvbnNbaV07XG5cdFx0XHRcdG9iamVjdC5hbmltYXRpb25zLnB1c2goYW5pbWF0aW9uc1t1dWlkXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEudHlwZSA9PT0gJ0xPRCcpIHtcblx0XHRcdGlmIChkYXRhLmF1dG9VcGRhdGUgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmF1dG9VcGRhdGUgPSBkYXRhLmF1dG9VcGRhdGU7XG5cdFx0XHRjb25zdCBsZXZlbHMgPSBkYXRhLmxldmVscztcblxuXHRcdFx0Zm9yIChsZXQgbCA9IDA7IGwgPCBsZXZlbHMubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0Y29uc3QgbGV2ZWwgPSBsZXZlbHNbbF07XG5cdFx0XHRcdGNvbnN0IGNoaWxkID0gb2JqZWN0LmdldE9iamVjdEJ5UHJvcGVydHkoJ3V1aWQnLCBsZXZlbC5vYmplY3QpO1xuXG5cdFx0XHRcdGlmIChjaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b2JqZWN0LmFkZExldmVsKGNoaWxkLCBsZXZlbC5kaXN0YW5jZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqZWN0O1xuXHR9XG5cblx0YmluZFNrZWxldG9ucyhvYmplY3QsIHNrZWxldG9ucykge1xuXHRcdGlmIChPYmplY3Qua2V5cyhza2VsZXRvbnMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXHRcdG9iamVjdC50cmF2ZXJzZShmdW5jdGlvbiAoY2hpbGQpIHtcblx0XHRcdGlmIChjaGlsZC5pc1NraW5uZWRNZXNoID09PSB0cnVlICYmIGNoaWxkLnNrZWxldG9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgc2tlbGV0b24gPSBza2VsZXRvbnNbY2hpbGQuc2tlbGV0b25dO1xuXG5cdFx0XHRcdGlmIChza2VsZXRvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IE5vIHNrZWxldG9uIGZvdW5kIHdpdGggVVVJRDonLCBjaGlsZC5za2VsZXRvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2hpbGQuYmluZChza2VsZXRvbiwgY2hpbGQuYmluZE1hdHJpeCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKiBERVBSRUNBVEVEICovXG5cblxuXHRzZXRUZXh0dXJlUGF0aCh2YWx1ZSkge1xuXHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRSZXNvdXJjZVBhdGgoKS4nKTtcblx0XHRyZXR1cm4gdGhpcy5zZXRSZXNvdXJjZVBhdGgodmFsdWUpO1xuXHR9XG5cbn1cblxuY29uc3QgVEVYVFVSRV9NQVBQSU5HID0ge1xuXHRVVk1hcHBpbmc6IFVWTWFwcGluZyxcblx0Q3ViZVJlZmxlY3Rpb25NYXBwaW5nOiBDdWJlUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEN1YmVSZWZyYWN0aW9uTWFwcGluZzogQ3ViZVJlZnJhY3Rpb25NYXBwaW5nLFxuXHRFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzogRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOiBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZyxcblx0Q3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nLFxuXHRDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzogQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmdcbn07XG5jb25zdCBURVhUVVJFX1dSQVBQSU5HID0ge1xuXHRSZXBlYXRXcmFwcGluZzogUmVwZWF0V3JhcHBpbmcsXG5cdENsYW1wVG9FZGdlV3JhcHBpbmc6IENsYW1wVG9FZGdlV3JhcHBpbmcsXG5cdE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmdcbn07XG5jb25zdCBURVhUVVJFX0ZJTFRFUiA9IHtcblx0TmVhcmVzdEZpbHRlcjogTmVhcmVzdEZpbHRlcixcblx0TmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXI6IE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyLFxuXHROZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOiBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyLFxuXHRMaW5lYXJGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0TGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjogTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcixcblx0TGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOiBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXJcbn07XG5cbmNsYXNzIEltYWdlQml0bWFwTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGZldGNoID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLicpO1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucyA9IHtcblx0XHRcdHByZW11bHRpcGx5QWxwaGE6ICdub25lJ1xuXHRcdH07XG5cdH1cblxuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGlmICh1cmwgPT09IHVuZGVmaW5lZCkgdXJsID0gJyc7XG5cdFx0aWYgKHRoaXMucGF0aCAhPT0gdW5kZWZpbmVkKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7XG5cdFx0dXJsID0gdGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodXJsKTtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgY2FjaGVkID0gQ2FjaGUuZ2V0KHVybCk7XG5cblx0XHRpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KHVybCk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKGNhY2hlZCk7XG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCh1cmwpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRyZXR1cm4gY2FjaGVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZldGNoT3B0aW9ucyA9IHt9O1xuXHRcdGZldGNoT3B0aW9ucy5jcmVkZW50aWFscyA9IHRoaXMuY3Jvc3NPcmlnaW4gPT09ICdhbm9ueW1vdXMnID8gJ3NhbWUtb3JpZ2luJyA6ICdpbmNsdWRlJztcblx0XHRmZXRjaE9wdGlvbnMuaGVhZGVycyA9IHRoaXMucmVxdWVzdEhlYWRlcjtcblx0XHRmZXRjaCh1cmwsIGZldGNoT3B0aW9ucykudGhlbihmdW5jdGlvbiAocmVzKSB7XG5cdFx0XHRyZXR1cm4gcmVzLmJsb2IoKTtcblx0XHR9KS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYiwgT2JqZWN0LmFzc2lnbihzY29wZS5vcHRpb25zLCB7XG5cdFx0XHRcdGNvbG9yU3BhY2VDb252ZXJzaW9uOiAnbm9uZSdcblx0XHRcdH0pKTtcblx0XHR9KS50aGVuKGZ1bmN0aW9uIChpbWFnZUJpdG1hcCkge1xuXHRcdFx0Q2FjaGUuYWRkKHVybCwgaW1hZ2VCaXRtYXApO1xuXHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKGltYWdlQml0bWFwKTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCh1cmwpO1xuXHRcdH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAob25FcnJvcikgb25FcnJvcihlKTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHR9KTtcblx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHR9XG5cbn1cblxuSW1hZ2VCaXRtYXBMb2FkZXIucHJvdG90eXBlLmlzSW1hZ2VCaXRtYXBMb2FkZXIgPSB0cnVlO1xuXG5sZXQgX2NvbnRleHQ7XG5cbmNvbnN0IEF1ZGlvQ29udGV4dCA9IHtcblx0Z2V0Q29udGV4dDogZnVuY3Rpb24gKCkge1xuXHRcdGlmIChfY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfY29udGV4dCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBfY29udGV4dDtcblx0fSxcblx0c2V0Q29udGV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0X2NvbnRleHQgPSB2YWx1ZTtcblx0fVxufTtcblxuY2xhc3MgQXVkaW9Mb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHRoaXMubWFuYWdlcik7XG5cdFx0bG9hZGVyLnNldFJlc3BvbnNlVHlwZSgnYXJyYXlidWZmZXInKTtcblx0XHRsb2FkZXIuc2V0UGF0aCh0aGlzLnBhdGgpO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcik7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7XG5cdFx0bG9hZGVyLmxvYWQodXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBidWZmZXIuIFRoZSBgZGVjb2RlQXVkaW9EYXRhYCBtZXRob2Rcblx0XHRcdFx0Ly8gZGV0YWNoZXMgdGhlIGJ1ZmZlciB3aGVuIGNvbXBsZXRlLCBwcmV2ZW50aW5nIHJldXNlLlxuXHRcdFx0XHRjb25zdCBidWZmZXJDb3B5ID0gYnVmZmVyLnNsaWNlKDApO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gQXVkaW9Db250ZXh0LmdldENvbnRleHQoKTtcblx0XHRcdFx0Y29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYnVmZmVyQ29weSwgZnVuY3Rpb24gKGF1ZGlvQnVmZmVyKSB7XG5cdFx0XHRcdFx0b25Mb2FkKGF1ZGlvQnVmZmVyKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChvbkVycm9yKSB7XG5cdFx0XHRcdFx0b25FcnJvcihlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdH1cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0fVxuXG59XG5cbmNsYXNzIEhlbWlzcGhlcmVMaWdodFByb2JlIGV4dGVuZHMgTGlnaHRQcm9iZSB7XG5cdGNvbnN0cnVjdG9yKHNreUNvbG9yLCBncm91bmRDb2xvciwgaW50ZW5zaXR5ID0gMSkge1xuXHRcdHN1cGVyKHVuZGVmaW5lZCwgaW50ZW5zaXR5KTtcblx0XHRjb25zdCBjb2xvcjEgPSBuZXcgQ29sb3IoKS5zZXQoc2t5Q29sb3IpO1xuXHRcdGNvbnN0IGNvbG9yMiA9IG5ldyBDb2xvcigpLnNldChncm91bmRDb2xvcik7XG5cdFx0Y29uc3Qgc2t5ID0gbmV3IFZlY3RvcjMoY29sb3IxLnIsIGNvbG9yMS5nLCBjb2xvcjEuYik7XG5cdFx0Y29uc3QgZ3JvdW5kID0gbmV3IFZlY3RvcjMoY29sb3IyLnIsIGNvbG9yMi5nLCBjb2xvcjIuYik7IC8vIHdpdGhvdXQgZXh0cmEgZmFjdG9yIG9mIFBJIGluIHRoZSBzaGFkZXIsIHNob3VsZCA9IDEgLyBNYXRoLnNxcnQoIE1hdGguUEkgKTtcblxuXHRcdGNvbnN0IGMwID0gTWF0aC5zcXJ0KE1hdGguUEkpO1xuXHRcdGNvbnN0IGMxID0gYzAgKiBNYXRoLnNxcnQoMC43NSk7XG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShza3kpLmFkZChncm91bmQpLm11bHRpcGx5U2NhbGFyKGMwKTtcblx0XHR0aGlzLnNoLmNvZWZmaWNpZW50c1sxXS5jb3B5KHNreSkuc3ViKGdyb3VuZCkubXVsdGlwbHlTY2FsYXIoYzEpO1xuXHR9XG5cbn1cblxuSGVtaXNwaGVyZUxpZ2h0UHJvYmUucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmUgPSB0cnVlO1xuXG5jbGFzcyBBbWJpZW50TGlnaHRQcm9iZSBleHRlbmRzIExpZ2h0UHJvYmUge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5ID0gMSkge1xuXHRcdHN1cGVyKHVuZGVmaW5lZCwgaW50ZW5zaXR5KTtcblx0XHRjb25zdCBjb2xvcjEgPSBuZXcgQ29sb3IoKS5zZXQoY29sb3IpOyAvLyB3aXRob3V0IGV4dHJhIGZhY3RvciBvZiBQSSBpbiB0aGUgc2hhZGVyLCB3b3VsZCBiZSAyIC8gTWF0aC5zcXJ0KCBNYXRoLlBJICk7XG5cblx0XHR0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoY29sb3IxLnIsIGNvbG9yMS5nLCBjb2xvcjEuYikubXVsdGlwbHlTY2FsYXIoMiAqIE1hdGguc3FydChNYXRoLlBJKSk7XG5cdH1cblxufVxuXG5BbWJpZW50TGlnaHRQcm9iZS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZSA9IHRydWU7XG5cbmNvbnN0IF9leWVSaWdodCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfZXllTGVmdCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfcHJvamVjdGlvbk1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jbGFzcyBTdGVyZW9DYW1lcmEge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnR5cGUgPSAnU3RlcmVvQ2FtZXJhJztcblx0XHR0aGlzLmFzcGVjdCA9IDE7XG5cdFx0dGhpcy5leWVTZXAgPSAwLjA2NDtcblx0XHR0aGlzLmNhbWVyYUwgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHR0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKTtcblx0XHR0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpO1xuXHRcdHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5fY2FjaGUgPSB7XG5cdFx0XHRmb2N1czogbnVsbCxcblx0XHRcdGZvdjogbnVsbCxcblx0XHRcdGFzcGVjdDogbnVsbCxcblx0XHRcdG5lYXI6IG51bGwsXG5cdFx0XHRmYXI6IG51bGwsXG5cdFx0XHR6b29tOiBudWxsLFxuXHRcdFx0ZXllU2VwOiBudWxsXG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShjYW1lcmEpIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXHRcdGNvbnN0IG5lZWRzVXBkYXRlID0gY2FjaGUuZm9jdXMgIT09IGNhbWVyYS5mb2N1cyB8fCBjYWNoZS5mb3YgIT09IGNhbWVyYS5mb3YgfHwgY2FjaGUuYXNwZWN0ICE9PSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3QgfHwgY2FjaGUubmVhciAhPT0gY2FtZXJhLm5lYXIgfHwgY2FjaGUuZmFyICE9PSBjYW1lcmEuZmFyIHx8IGNhY2hlLnpvb20gIT09IGNhbWVyYS56b29tIHx8IGNhY2hlLmV5ZVNlcCAhPT0gdGhpcy5leWVTZXA7XG5cblx0XHRpZiAobmVlZHNVcGRhdGUpIHtcblx0XHRcdGNhY2hlLmZvY3VzID0gY2FtZXJhLmZvY3VzO1xuXHRcdFx0Y2FjaGUuZm92ID0gY2FtZXJhLmZvdjtcblx0XHRcdGNhY2hlLmFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcblx0XHRcdGNhY2hlLm5lYXIgPSBjYW1lcmEubmVhcjtcblx0XHRcdGNhY2hlLmZhciA9IGNhbWVyYS5mYXI7XG5cdFx0XHRjYWNoZS56b29tID0gY2FtZXJhLnpvb207XG5cdFx0XHRjYWNoZS5leWVTZXAgPSB0aGlzLmV5ZVNlcDsgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxuXHRcdFx0Ly8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cblxuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cblx0XHRcdGNvbnN0IGV5ZVNlcEhhbGYgPSBjYWNoZS5leWVTZXAgLyAyO1xuXHRcdFx0Y29uc3QgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwSGFsZiAqIGNhY2hlLm5lYXIgLyBjYWNoZS5mb2N1cztcblx0XHRcdGNvbnN0IHltYXggPSBjYWNoZS5uZWFyICogTWF0aC50YW4oREVHMlJBRCAqIGNhY2hlLmZvdiAqIDAuNSkgLyBjYWNoZS56b29tO1xuXHRcdFx0bGV0IHhtaW4sIHhtYXg7IC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XG5cblx0XHRcdF9leWVMZWZ0LmVsZW1lbnRzWzEyXSA9IC1leWVTZXBIYWxmO1xuXHRcdFx0X2V5ZVJpZ2h0LmVsZW1lbnRzWzEyXSA9IGV5ZVNlcEhhbGY7IC8vIGZvciBsZWZ0IGV5ZVxuXG5cdFx0XHR4bWluID0gLXltYXggKiBjYWNoZS5hc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XG5cdFx0XHR4bWF4ID0geW1heCAqIGNhY2hlLmFzcGVjdCArIGV5ZVNlcE9uUHJvamVjdGlvbjtcblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzBdID0gMiAqIGNhY2hlLm5lYXIgLyAoeG1heCAtIHhtaW4pO1xuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0gPSAoeG1heCArIHhtaW4pIC8gKHhtYXggLSB4bWluKTtcblx0XHRcdHRoaXMuY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmNvcHkoX3Byb2plY3Rpb25NYXRyaXgpOyAvLyBmb3IgcmlnaHQgZXllXG5cblx0XHRcdHhtaW4gPSAteW1heCAqIGNhY2hlLmFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcblx0XHRcdHhtYXggPSB5bWF4ICogY2FjaGUuYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF0gPSAyICogY2FjaGUubmVhciAvICh4bWF4IC0geG1pbik7XG5cdFx0XHRfcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s4XSA9ICh4bWF4ICsgeG1pbikgLyAoeG1heCAtIHhtaW4pO1xuXHRcdFx0dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShfcHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkoY2FtZXJhLm1hdHJpeFdvcmxkKS5tdWx0aXBseShfZXllTGVmdCk7XG5cdFx0dGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkoY2FtZXJhLm1hdHJpeFdvcmxkKS5tdWx0aXBseShfZXllUmlnaHQpO1xuXHR9XG5cbn1cblxuY2xhc3MgQ2xvY2sge1xuXHRjb25zdHJ1Y3RvcihhdXRvU3RhcnQgPSB0cnVlKSB7XG5cdFx0dGhpcy5hdXRvU3RhcnQgPSBhdXRvU3RhcnQ7XG5cdFx0dGhpcy5zdGFydFRpbWUgPSAwO1xuXHRcdHRoaXMub2xkVGltZSA9IDA7XG5cdFx0dGhpcy5lbGFwc2VkVGltZSA9IDA7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdH1cblxuXHRzdGFydCgpIHtcblx0XHR0aGlzLnN0YXJ0VGltZSA9IG5vdygpO1xuXHRcdHRoaXMub2xkVGltZSA9IHRoaXMuc3RhcnRUaW1lO1xuXHRcdHRoaXMuZWxhcHNlZFRpbWUgPSAwO1xuXHRcdHRoaXMucnVubmluZyA9IHRydWU7XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXHR9XG5cblx0Z2V0RWxhcHNlZFRpbWUoKSB7XG5cdFx0dGhpcy5nZXREZWx0YSgpO1xuXHRcdHJldHVybiB0aGlzLmVsYXBzZWRUaW1lO1xuXHR9XG5cblx0Z2V0RGVsdGEoKSB7XG5cdFx0bGV0IGRpZmYgPSAwO1xuXG5cdFx0aWYgKHRoaXMuYXV0b1N0YXJ0ICYmICF0aGlzLnJ1bm5pbmcpIHtcblx0XHRcdHRoaXMuc3RhcnQoKTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJ1bm5pbmcpIHtcblx0XHRcdGNvbnN0IG5ld1RpbWUgPSBub3coKTtcblx0XHRcdGRpZmYgPSAobmV3VGltZSAtIHRoaXMub2xkVGltZSkgLyAxMDAwO1xuXHRcdFx0dGhpcy5vbGRUaW1lID0gbmV3VGltZTtcblx0XHRcdHRoaXMuZWxhcHNlZFRpbWUgKz0gZGlmZjtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIG5vdygpIHtcblx0cmV0dXJuICh0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICd1bmRlZmluZWQnID8gRGF0ZSA6IHBlcmZvcm1hbmNlKS5ub3coKTsgLy8gc2VlICMxMDczMlxufVxuXG5jb25zdCBfcG9zaXRpb24kMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcXVhdGVybmlvbiQxID0gLypAX19QVVJFX18qL25ldyBRdWF0ZXJuaW9uKCk7XG5cbmNvbnN0IF9zY2FsZSQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9vcmllbnRhdGlvbiQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIEF1ZGlvTGlzdGVuZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0F1ZGlvTGlzdGVuZXInO1xuXHRcdHRoaXMuY29udGV4dCA9IEF1ZGlvQ29udGV4dC5nZXRDb250ZXh0KCk7XG5cdFx0dGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHR0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHRcdHRoaXMuZmlsdGVyID0gbnVsbDtcblx0XHR0aGlzLnRpbWVEZWx0YSA9IDA7IC8vIHByaXZhdGVcblxuXHRcdHRoaXMuX2Nsb2NrID0gbmV3IENsb2NrKCk7XG5cdH1cblxuXHRnZXRJbnB1dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nYWluO1xuXHR9XG5cblx0cmVtb3ZlRmlsdGVyKCkge1xuXHRcdGlmICh0aGlzLmZpbHRlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpO1xuXHRcdFx0dGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHRcdFx0dGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0XHRcdHRoaXMuZmlsdGVyID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEZpbHRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXI7XG5cdH1cblxuXHRzZXRGaWx0ZXIodmFsdWUpIHtcblx0XHRpZiAodGhpcy5maWx0ZXIgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKTtcblx0XHRcdHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0XHR9XG5cblx0XHR0aGlzLmZpbHRlciA9IHZhbHVlO1xuXHRcdHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKTtcblx0XHR0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRNYXN0ZXJWb2x1bWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlO1xuXHR9XG5cblx0c2V0TWFzdGVyVm9sdW1lKHZhbHVlKSB7XG5cdFx0dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoZm9yY2UpIHtcblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZChmb3JjZSk7XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSB0aGlzLmNvbnRleHQubGlzdGVuZXI7XG5cdFx0Y29uc3QgdXAgPSB0aGlzLnVwO1xuXHRcdHRoaXMudGltZURlbHRhID0gdGhpcy5fY2xvY2suZ2V0RGVsdGEoKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShfcG9zaXRpb24kMSwgX3F1YXRlcm5pb24kMSwgX3NjYWxlJDEpO1xuXG5cdFx0X29yaWVudGF0aW9uJDEuc2V0KDAsIDAsIC0xKS5hcHBseVF1YXRlcm5pb24oX3F1YXRlcm5pb24kMSk7XG5cblx0XHRpZiAobGlzdGVuZXIucG9zaXRpb25YKSB7XG5cdFx0XHQvLyBjb2RlIHBhdGggZm9yIENocm9tZSAoc2VlICMxNDM5Mylcblx0XHRcdGNvbnN0IGVuZFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLnRpbWVEZWx0YTtcblx0XHRcdGxpc3RlbmVyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfcG9zaXRpb24kMS54LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfcG9zaXRpb24kMS55LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfcG9zaXRpb24kMS56LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9vcmllbnRhdGlvbiQxLngsIGVuZFRpbWUpO1xuXHRcdFx0bGlzdGVuZXIuZm9yd2FyZFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX29yaWVudGF0aW9uJDEueSwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfb3JpZW50YXRpb24kMS56LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh1cC54LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh1cC55LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLnVwWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh1cC56LCBlbmRUaW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlzdGVuZXIuc2V0UG9zaXRpb24oX3Bvc2l0aW9uJDEueCwgX3Bvc2l0aW9uJDEueSwgX3Bvc2l0aW9uJDEueik7XG5cdFx0XHRsaXN0ZW5lci5zZXRPcmllbnRhdGlvbihfb3JpZW50YXRpb24kMS54LCBfb3JpZW50YXRpb24kMS55LCBfb3JpZW50YXRpb24kMS56LCB1cC54LCB1cC55LCB1cC56KTtcblx0XHR9XG5cdH1cblxufVxuXG5jbGFzcyBBdWRpbyBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IobGlzdGVuZXIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdBdWRpbyc7XG5cdFx0dGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuXHRcdHRoaXMuY29udGV4dCA9IGxpc3RlbmVyLmNvbnRleHQ7XG5cdFx0dGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHR0aGlzLmdhaW4uY29ubmVjdChsaXN0ZW5lci5nZXRJbnB1dCgpKTtcblx0XHR0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG5cdFx0dGhpcy5idWZmZXIgPSBudWxsO1xuXHRcdHRoaXMuZGV0dW5lID0gMDtcblx0XHR0aGlzLmxvb3AgPSBmYWxzZTtcblx0XHR0aGlzLmxvb3BTdGFydCA9IDA7XG5cdFx0dGhpcy5sb29wRW5kID0gMDtcblx0XHR0aGlzLm9mZnNldCA9IDA7XG5cdFx0dGhpcy5kdXJhdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnBsYXliYWNrUmF0ZSA9IDE7XG5cdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IHRydWU7XG5cdFx0dGhpcy5zb3VyY2UgPSBudWxsO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdlbXB0eSc7XG5cdFx0dGhpcy5fc3RhcnRlZEF0ID0gMDtcblx0XHR0aGlzLl9wcm9ncmVzcyA9IDA7XG5cdFx0dGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XG5cdFx0dGhpcy5maWx0ZXJzID0gW107XG5cdH1cblxuXHRnZXRPdXRwdXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2Fpbjtcblx0fVxuXG5cdHNldE5vZGVTb3VyY2UoYXVkaW9Ob2RlKSB7XG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnYXVkaW9Ob2RlJztcblx0XHR0aGlzLnNvdXJjZSA9IGF1ZGlvTm9kZTtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldE1lZGlhRWxlbWVudFNvdXJjZShtZWRpYUVsZW1lbnQpIHtcblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IGZhbHNlO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdtZWRpYU5vZGUnO1xuXHRcdHRoaXMuc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShtZWRpYUVsZW1lbnQpO1xuXHRcdHRoaXMuY29ubmVjdCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0TWVkaWFTdHJlYW1Tb3VyY2UobWVkaWFTdHJlYW0pIHtcblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IGZhbHNlO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdtZWRpYVN0cmVhbU5vZGUnO1xuXHRcdHRoaXMuc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKG1lZGlhU3RyZWFtKTtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEJ1ZmZlcihhdWRpb0J1ZmZlcikge1xuXHRcdHRoaXMuYnVmZmVyID0gYXVkaW9CdWZmZXI7XG5cdFx0dGhpcy5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG5cdFx0aWYgKHRoaXMuYXV0b3BsYXkpIHRoaXMucGxheSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cGxheShkZWxheSA9IDApIHtcblx0XHRpZiAodGhpcy5pc1BsYXlpbmcgPT09IHRydWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IGZhbHNlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N0YXJ0ZWRBdCA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSArIGRlbGF5O1xuXHRcdGNvbnN0IHNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0XHRzb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXI7XG5cdFx0c291cmNlLmxvb3AgPSB0aGlzLmxvb3A7XG5cdFx0c291cmNlLmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHRcdHNvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kO1xuXHRcdHNvdXJjZS5vbmVuZGVkID0gdGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7XG5cdFx0c291cmNlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCwgdGhpcy5fcHJvZ3Jlc3MgKyB0aGlzLm9mZnNldCwgdGhpcy5kdXJhdGlvbik7XG5cdFx0dGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuXHRcdHRoaXMuc291cmNlID0gc291cmNlO1xuXHRcdHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKTtcblx0XHR0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSk7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cblx0cGF1c2UoKSB7XG5cdFx0aWYgKHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1BsYXlpbmcgPT09IHRydWUpIHtcblx0XHRcdC8vIHVwZGF0ZSBjdXJyZW50IHByb2dyZXNzXG5cdFx0XHR0aGlzLl9wcm9ncmVzcyArPSBNYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSB0aGlzLl9zdGFydGVkQXQsIDApICogdGhpcy5wbGF5YmFja1JhdGU7XG5cblx0XHRcdGlmICh0aGlzLmxvb3AgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gZW5zdXJlIF9wcm9ncmVzcyBkb2VzIG5vdCBleGNlZWQgZHVyYXRpb24gd2l0aCBsb29wZWQgYXVkaW9zXG5cdFx0XHRcdHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fcHJvZ3Jlc3MgJSAodGhpcy5kdXJhdGlvbiB8fCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc291cmNlLnN0b3AoKTtcblx0XHRcdHRoaXMuc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHRcdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9wcm9ncmVzcyA9IDA7XG5cdFx0dGhpcy5zb3VyY2Uuc3RvcCgpO1xuXHRcdHRoaXMuc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMSwgbCA9IHRoaXMuZmlsdGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0dGhpcy5maWx0ZXJzW2kgLSAxXS5jb25uZWN0KHRoaXMuZmlsdGVyc1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZmlsdGVyc1t0aGlzLmZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtcblx0XHR9XG5cblx0XHR0aGlzLl9jb25uZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzY29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDEsIGwgPSB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyc1tpIC0gMV0uZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aCAtIDFdLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRGaWx0ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzLmZpbHRlcnM7XG5cdH1cblxuXHRzZXRGaWx0ZXJzKHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSkgdmFsdWUgPSBbXTtcblxuXHRcdGlmICh0aGlzLl9jb25uZWN0ZWQgPT09IHRydWUpIHtcblx0XHRcdHRoaXMuZGlzY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5maWx0ZXJzID0gdmFsdWUuc2xpY2UoKTtcblx0XHRcdHRoaXMuY29ubmVjdCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZpbHRlcnMgPSB2YWx1ZS5zbGljZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RGV0dW5lKHZhbHVlKSB7XG5cdFx0dGhpcy5kZXR1bmUgPSB2YWx1ZTtcblx0XHRpZiAodGhpcy5zb3VyY2UuZGV0dW5lID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gb25seSBzZXQgZGV0dW5lIHdoZW4gYXZhaWxhYmxlXG5cblx0XHRpZiAodGhpcy5pc1BsYXlpbmcgPT09IHRydWUpIHtcblx0XHRcdHRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXREZXR1bmUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGV0dW5lO1xuXHR9XG5cblx0Z2V0RmlsdGVyKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXTtcblx0fVxuXG5cdHNldEZpbHRlcihmaWx0ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pO1xuXHR9XG5cblx0c2V0UGxheWJhY2tSYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBsYXliYWNrUmF0ZSA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0UGxheWJhY2tSYXRlKCkge1xuXHRcdHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZTtcblx0fVxuXG5cdG9uRW5kZWQoKSB7XG5cdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblx0fVxuXG5cdGdldExvb3AoKSB7XG5cdFx0aWYgKHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5sb29wO1xuXHR9XG5cblx0c2V0TG9vcCh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5sb29wID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy5pc1BsYXlpbmcgPT09IHRydWUpIHtcblx0XHRcdHRoaXMuc291cmNlLmxvb3AgPSB0aGlzLmxvb3A7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRMb29wU3RhcnQodmFsdWUpIHtcblx0XHR0aGlzLmxvb3BTdGFydCA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0TG9vcEVuZCh2YWx1ZSkge1xuXHRcdHRoaXMubG9vcEVuZCA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Vm9sdW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZTtcblx0fVxuXG5cdHNldFZvbHVtZSh2YWx1ZSkge1xuXHRcdHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNvbnN0IF9wb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcXVhdGVybmlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgUXVhdGVybmlvbigpO1xuXG5jb25zdCBfc2NhbGUgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX29yaWVudGF0aW9uID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFBvc2l0aW9uYWxBdWRpbyBleHRlbmRzIEF1ZGlvIHtcblx0Y29uc3RydWN0b3IobGlzdGVuZXIpIHtcblx0XHRzdXBlcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5wYW5uZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7XG5cdFx0dGhpcy5wYW5uZXIucGFubmluZ01vZGVsID0gJ0hSVEYnO1xuXHRcdHRoaXMucGFubmVyLmNvbm5lY3QodGhpcy5nYWluKTtcblx0fVxuXG5cdGdldE91dHB1dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wYW5uZXI7XG5cdH1cblxuXHRnZXRSZWZEaXN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2U7XG5cdH1cblxuXHRzZXRSZWZEaXN0YW5jZSh2YWx1ZSkge1xuXHRcdHRoaXMucGFubmVyLnJlZkRpc3RhbmNlID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRSb2xsb2ZmRmFjdG9yKCkge1xuXHRcdHJldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yO1xuXHR9XG5cblx0c2V0Um9sbG9mZkZhY3Rvcih2YWx1ZSkge1xuXHRcdHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3IgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldERpc3RhbmNlTW9kZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWw7XG5cdH1cblxuXHRzZXREaXN0YW5jZU1vZGVsKHZhbHVlKSB7XG5cdFx0dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbCA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0TWF4RGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlO1xuXHR9XG5cblx0c2V0TWF4RGlzdGFuY2UodmFsdWUpIHtcblx0XHR0aGlzLnBhbm5lci5tYXhEaXN0YW5jZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RGlyZWN0aW9uYWxDb25lKGNvbmVJbm5lckFuZ2xlLCBjb25lT3V0ZXJBbmdsZSwgY29uZU91dGVyR2Fpbikge1xuXHRcdHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlID0gY29uZUlubmVyQW5nbGU7XG5cdFx0dGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGUgPSBjb25lT3V0ZXJBbmdsZTtcblx0XHR0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluID0gY29uZU91dGVyR2Fpbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpO1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gdHJ1ZSAmJiB0aGlzLmlzUGxheWluZyA9PT0gZmFsc2UpIHJldHVybjtcblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShfcG9zaXRpb24sIF9xdWF0ZXJuaW9uLCBfc2NhbGUpO1xuXG5cdFx0X29yaWVudGF0aW9uLnNldCgwLCAwLCAxKS5hcHBseVF1YXRlcm5pb24oX3F1YXRlcm5pb24pO1xuXG5cdFx0Y29uc3QgcGFubmVyID0gdGhpcy5wYW5uZXI7XG5cblx0XHRpZiAocGFubmVyLnBvc2l0aW9uWCkge1xuXHRcdFx0Ly8gY29kZSBwYXRoIGZvciBDaHJvbWUgYW5kIEZpcmVmb3ggKHNlZSAjMTQzOTMpXG5cdFx0XHRjb25zdCBlbmRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7XG5cdFx0XHRwYW5uZXIucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9wb3NpdGlvbi54LCBlbmRUaW1lKTtcblx0XHRcdHBhbm5lci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX3Bvc2l0aW9uLnksIGVuZFRpbWUpO1xuXHRcdFx0cGFubmVyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfcG9zaXRpb24ueiwgZW5kVGltZSk7XG5cdFx0XHRwYW5uZXIub3JpZW50YXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9vcmllbnRhdGlvbi54LCBlbmRUaW1lKTtcblx0XHRcdHBhbm5lci5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX29yaWVudGF0aW9uLnksIGVuZFRpbWUpO1xuXHRcdFx0cGFubmVyLm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfb3JpZW50YXRpb24ueiwgZW5kVGltZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhbm5lci5zZXRQb3NpdGlvbihfcG9zaXRpb24ueCwgX3Bvc2l0aW9uLnksIF9wb3NpdGlvbi56KTtcblx0XHRcdHBhbm5lci5zZXRPcmllbnRhdGlvbihfb3JpZW50YXRpb24ueCwgX29yaWVudGF0aW9uLnksIF9vcmllbnRhdGlvbi56KTtcblx0XHR9XG5cdH1cblxufVxuXG5jbGFzcyBBdWRpb0FuYWx5c2VyIHtcblx0Y29uc3RydWN0b3IoYXVkaW8sIGZmdFNpemUgPSAyMDQ4KSB7XG5cdFx0dGhpcy5hbmFseXNlciA9IGF1ZGlvLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcblx0XHR0aGlzLmFuYWx5c2VyLmZmdFNpemUgPSBmZnRTaXplO1xuXHRcdHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO1xuXHRcdGF1ZGlvLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcik7XG5cdH1cblxuXHRnZXRGcmVxdWVuY3lEYXRhKCkge1xuXHRcdHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhKTtcblx0XHRyZXR1cm4gdGhpcy5kYXRhO1xuXHR9XG5cblx0Z2V0QXZlcmFnZUZyZXF1ZW5jeSgpIHtcblx0XHRsZXQgdmFsdWUgPSAwO1xuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWUgKz0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWUgLyBkYXRhLmxlbmd0aDtcblx0fVxuXG59XG5cbmNsYXNzIFByb3BlcnR5TWl4ZXIge1xuXHRjb25zdHJ1Y3RvcihiaW5kaW5nLCB0eXBlTmFtZSwgdmFsdWVTaXplKSB7XG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcblx0XHR0aGlzLnZhbHVlU2l6ZSA9IHZhbHVlU2l6ZTtcblx0XHRsZXQgbWl4RnVuY3Rpb24sIG1peEZ1bmN0aW9uQWRkaXRpdmUsIHNldElkZW50aXR5OyAvLyBidWZmZXIgbGF5b3V0OiBbIGluY29taW5nIHwgYWNjdTAgfCBhY2N1MSB8IG9yaWcgfCBhZGRBY2N1IHwgKG9wdGlvbmFsIHdvcmspIF1cblx0XHQvL1xuXHRcdC8vIGludGVycG9sYXRvcnMgY2FuIHVzZSAuYnVmZmVyIGFzIHRoZWlyIC5yZXN1bHRcblx0XHQvLyB0aGUgZGF0YSB0aGVuIGdvZXMgdG8gJ2luY29taW5nJ1xuXHRcdC8vXG5cdFx0Ly8gJ2FjY3UwJyBhbmQgJ2FjY3UxJyBhcmUgdXNlZCBmcmFtZS1pbnRlcmxlYXZlZCBmb3Jcblx0XHQvLyB0aGUgY3VtdWxhdGl2ZSByZXN1bHQgYW5kIGFyZSBjb21wYXJlZCB0byBkZXRlY3Rcblx0XHQvLyBjaGFuZ2VzXG5cdFx0Ly9cblx0XHQvLyAnb3JpZycgc3RvcmVzIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgcHJvcGVydHlcblx0XHQvL1xuXHRcdC8vICdhZGQnIGlzIHVzZWQgZm9yIGFkZGl0aXZlIGN1bXVsYXRpdmUgcmVzdWx0c1xuXHRcdC8vXG5cdFx0Ly8gJ3dvcmsnIGlzIG9wdGlvbmFsIGFuZCBpcyBvbmx5IHByZXNlbnQgZm9yIHF1YXRlcm5pb24gdHlwZXMuIEl0IGlzIHVzZWRcblx0XHQvLyB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcXVhdGVybmlvbiBtdWx0aXBsaWNhdGlvbiByZXN1bHRzXG5cblx0XHRzd2l0Y2ggKHR5cGVOYW1lKSB7XG5cdFx0XHRjYXNlICdxdWF0ZXJuaW9uJzpcblx0XHRcdFx0bWl4RnVuY3Rpb24gPSB0aGlzLl9zbGVycDtcblx0XHRcdFx0bWl4RnVuY3Rpb25BZGRpdGl2ZSA9IHRoaXMuX3NsZXJwQWRkaXRpdmU7XG5cdFx0XHRcdHNldElkZW50aXR5ID0gdGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb247XG5cdFx0XHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSh2YWx1ZVNpemUgKiA2KTtcblx0XHRcdFx0dGhpcy5fd29ya0luZGV4ID0gNTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0bWl4RnVuY3Rpb24gPSB0aGlzLl9zZWxlY3Q7IC8vIFVzZSB0aGUgcmVndWxhciBtaXggZnVuY3Rpb24gYW5kIGZvciBhZGRpdGl2ZSBvbiB0aGVzZSB0eXBlcyxcblx0XHRcdFx0Ly8gYWRkaXRpdmUgaXMgbm90IHJlbGV2YW50IGZvciBub24tbnVtZXJpYyB0eXBlc1xuXG5cdFx0XHRcdG1peEZ1bmN0aW9uQWRkaXRpdmUgPSB0aGlzLl9zZWxlY3Q7XG5cdFx0XHRcdHNldElkZW50aXR5ID0gdGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyO1xuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheSh2YWx1ZVNpemUgKiA1KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG1peEZ1bmN0aW9uID0gdGhpcy5fbGVycDtcblx0XHRcdFx0bWl4RnVuY3Rpb25BZGRpdGl2ZSA9IHRoaXMuX2xlcnBBZGRpdGl2ZTtcblx0XHRcdFx0c2V0SWRlbnRpdHkgPSB0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYztcblx0XHRcdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQ2NEFycmF5KHZhbHVlU2l6ZSAqIDUpO1xuXHRcdH1cblxuXHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbiA9IG1peEZ1bmN0aW9uO1xuXHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlID0gbWl4RnVuY3Rpb25BZGRpdGl2ZTtcblx0XHR0aGlzLl9zZXRJZGVudGl0eSA9IHNldElkZW50aXR5O1xuXHRcdHRoaXMuX29yaWdJbmRleCA9IDM7XG5cdFx0dGhpcy5fYWRkSW5kZXggPSA0O1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodCA9IDA7XG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgPSAwO1xuXHRcdHRoaXMudXNlQ291bnQgPSAwO1xuXHRcdHRoaXMucmVmZXJlbmNlQ291bnQgPSAwO1xuXHR9IC8vIGFjY3VtdWxhdGUgZGF0YSBpbiB0aGUgJ2luY29taW5nJyByZWdpb24gaW50byAnYWNjdTxpPidcblxuXG5cdGFjY3VtdWxhdGUoYWNjdUluZGV4LCB3ZWlnaHQpIHtcblx0XHQvLyBub3RlOiBoYXBwaWx5IGFjY3VtdWxhdGluZyBub3RoaW5nIHdoZW4gd2VpZ2h0ID0gMCwgdGhlIGNhbGxlciBrbm93c1xuXHRcdC8vIHRoZSB3ZWlnaHQgYW5kIHNob3VsZG4ndCBoYXZlIG1hZGUgdGhlIGNhbGwgaW4gdGhlIGZpcnN0IHBsYWNlXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0b2Zmc2V0ID0gYWNjdUluZGV4ICogc3RyaWRlICsgc3RyaWRlO1xuXHRcdGxldCBjdXJyZW50V2VpZ2h0ID0gdGhpcy5jdW11bGF0aXZlV2VpZ2h0O1xuXG5cdFx0aWYgKGN1cnJlbnRXZWlnaHQgPT09IDApIHtcblx0XHRcdC8vIGFjY3VOIDo9IGluY29taW5nICogd2VpZ2h0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArK2kpIHtcblx0XHRcdFx0YnVmZmVyW29mZnNldCArIGldID0gYnVmZmVyW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50V2VpZ2h0ID0gd2VpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBhY2N1TiA6PSBhY2N1TiArIGluY29taW5nICogd2VpZ2h0XG5cdFx0XHRjdXJyZW50V2VpZ2h0ICs9IHdlaWdodDtcblx0XHRcdGNvbnN0IG1peCA9IHdlaWdodCAvIGN1cnJlbnRXZWlnaHQ7XG5cblx0XHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbihidWZmZXIsIG9mZnNldCwgMCwgbWl4LCBzdHJpZGUpO1xuXHRcdH1cblxuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodCA9IGN1cnJlbnRXZWlnaHQ7XG5cdH0gLy8gYWNjdW11bGF0ZSBkYXRhIGluIHRoZSAnaW5jb21pbmcnIHJlZ2lvbiBpbnRvICdhZGQnXG5cblxuXHRhY2N1bXVsYXRlQWRkaXRpdmUod2VpZ2h0KSB7XG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0b2Zmc2V0ID0gc3RyaWRlICogdGhpcy5fYWRkSW5kZXg7XG5cblx0XHRpZiAodGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgPT09IDApIHtcblx0XHRcdC8vIGFkZCA9IGlkZW50aXR5XG5cdFx0XHR0aGlzLl9zZXRJZGVudGl0eSgpO1xuXHRcdH0gLy8gYWRkIDo9IGFkZCArIGluY29taW5nICogd2VpZ2h0XG5cblxuXHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGJ1ZmZlciwgb2Zmc2V0LCAwLCB3ZWlnaHQsIHN0cmlkZSk7XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSArPSB3ZWlnaHQ7XG5cdH0gLy8gYXBwbHkgdGhlIHN0YXRlIG9mICdhY2N1PGk+JyB0byB0aGUgYmluZGluZyB3aGVuIGFjY3VzIGRpZmZlclxuXG5cblx0YXBwbHkoYWNjdUluZGV4KSB7XG5cdFx0Y29uc3Qgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0YnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRcdFx0b2Zmc2V0ID0gYWNjdUluZGV4ICogc3RyaWRlICsgc3RyaWRlLFxuXHRcdFx0XHRcdHdlaWdodCA9IHRoaXMuY3VtdWxhdGl2ZVdlaWdodCxcblx0XHRcdFx0XHR3ZWlnaHRBZGRpdGl2ZSA9IHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLFxuXHRcdFx0XHRcdGJpbmRpbmcgPSB0aGlzLmJpbmRpbmc7XG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gMDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9IDA7XG5cblx0XHRpZiAod2VpZ2h0IDwgMSkge1xuXHRcdFx0Ly8gYWNjdU4gOj0gYWNjdU4gKyBvcmlnaW5hbCAqICggMSAtIGN1bXVsYXRpdmVXZWlnaHQgKVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZU9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX29yaWdJbmRleDtcblxuXHRcdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGJ1ZmZlciwgb2Zmc2V0LCBvcmlnaW5hbFZhbHVlT2Zmc2V0LCAxIC0gd2VpZ2h0LCBzdHJpZGUpO1xuXHRcdH1cblxuXHRcdGlmICh3ZWlnaHRBZGRpdGl2ZSA+IDApIHtcblx0XHRcdC8vIGFjY3VOIDo9IGFjY3VOICsgYWRkaXRpdmUgYWNjdU5cblx0XHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGJ1ZmZlciwgb2Zmc2V0LCB0aGlzLl9hZGRJbmRleCAqIHN0cmlkZSwgMSwgc3RyaWRlKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gc3RyaWRlLCBlID0gc3RyaWRlICsgc3RyaWRlOyBpICE9PSBlOyArK2kpIHtcblx0XHRcdGlmIChidWZmZXJbaV0gIT09IGJ1ZmZlcltpICsgc3RyaWRlXSkge1xuXHRcdFx0XHQvLyB2YWx1ZSBoYXMgY2hhbmdlZCAtPiB1cGRhdGUgc2NlbmUgZ3JhcGhcblx0XHRcdFx0YmluZGluZy5zZXRWYWx1ZShidWZmZXIsIG9mZnNldCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSAvLyByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGJvdW5kIHByb3BlcnR5IGFuZCBjb3B5IGl0IHRvIGJvdGggYWNjdXNcblxuXG5cdHNhdmVPcmlnaW5hbFN0YXRlKCkge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLmJpbmRpbmc7XG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0b3JpZ2luYWxWYWx1ZU9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX29yaWdJbmRleDtcblx0XHRiaW5kaW5nLmdldFZhbHVlKGJ1ZmZlciwgb3JpZ2luYWxWYWx1ZU9mZnNldCk7IC8vIGFjY3VbMC4uMV0gOj0gb3JpZyAtLSBpbml0aWFsbHkgZGV0ZWN0IGNoYW5nZXMgYWdhaW5zdCB0aGUgb3JpZ2luYWxcblxuXHRcdGZvciAobGV0IGkgPSBzdHJpZGUsIGUgPSBvcmlnaW5hbFZhbHVlT2Zmc2V0OyBpICE9PSBlOyArK2kpIHtcblx0XHRcdGJ1ZmZlcltpXSA9IGJ1ZmZlcltvcmlnaW5hbFZhbHVlT2Zmc2V0ICsgaSAlIHN0cmlkZV07XG5cdFx0fSAvLyBBZGQgdG8gaWRlbnRpdHkgZm9yIGFkZGl0aXZlXG5cblxuXHRcdHRoaXMuX3NldElkZW50aXR5KCk7XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSAwO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID0gMDtcblx0fSAvLyBhcHBseSB0aGUgc3RhdGUgcHJldmlvdXNseSB0YWtlbiB2aWEgJ3NhdmVPcmlnaW5hbFN0YXRlJyB0byB0aGUgYmluZGluZ1xuXG5cblx0cmVzdG9yZU9yaWdpbmFsU3RhdGUoKSB7XG5cdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZU9mZnNldCA9IHRoaXMudmFsdWVTaXplICogMztcblx0XHR0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsIG9yaWdpbmFsVmFsdWVPZmZzZXQpO1xuXHR9XG5cblx0X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCkge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLl9hZGRJbmRleCAqIHRoaXMudmFsdWVTaXplO1xuXHRcdGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHRoaXMudmFsdWVTaXplO1xuXG5cdFx0Zm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG5cdFx0XHR0aGlzLmJ1ZmZlcltpXSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCkge1xuXHRcdHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCk7XG5cblx0XHR0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCAqIHRoaXMudmFsdWVTaXplICsgM10gPSAxO1xuXHR9XG5cblx0X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpIHtcblx0XHRjb25zdCBzdGFydEluZGV4ID0gdGhpcy5fb3JpZ0luZGV4ICogdGhpcy52YWx1ZVNpemU7XG5cdFx0Y29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9hZGRJbmRleCAqIHRoaXMudmFsdWVTaXplO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlU2l6ZTsgaSsrKSB7XG5cdFx0XHR0aGlzLmJ1ZmZlclt0YXJnZXRJbmRleCArIGldID0gdGhpcy5idWZmZXJbc3RhcnRJbmRleCArIGldO1xuXHRcdH1cblx0fSAvLyBtaXggZnVuY3Rpb25zXG5cblxuXHRfc2VsZWN0KGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSkge1xuXHRcdGlmICh0ID49IDAuNSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKytpKSB7XG5cdFx0XHRcdGJ1ZmZlcltkc3RPZmZzZXQgKyBpXSA9IGJ1ZmZlcltzcmNPZmZzZXQgKyBpXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfc2xlcnAoYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCkge1xuXHRcdFF1YXRlcm5pb24uc2xlcnBGbGF0KGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCBzcmNPZmZzZXQsIHQpO1xuXHR9XG5cblx0X3NsZXJwQWRkaXRpdmUoYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCwgc3RyaWRlKSB7XG5cdFx0Y29uc3Qgd29ya09mZnNldCA9IHRoaXMuX3dvcmtJbmRleCAqIHN0cmlkZTsgLy8gU3RvcmUgcmVzdWx0IGluIGludGVybWVkaWF0ZSBidWZmZXIgb2Zmc2V0XG5cblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGJ1ZmZlciwgd29ya09mZnNldCwgYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgc3JjT2Zmc2V0KTsgLy8gU2xlcnAgdG8gdGhlIGludGVybWVkaWF0ZSByZXN1bHRcblxuXHRcdFF1YXRlcm5pb24uc2xlcnBGbGF0KGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCB3b3JrT2Zmc2V0LCB0KTtcblx0fVxuXG5cdF9sZXJwKGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSkge1xuXHRcdGNvbnN0IHMgPSAxIC0gdDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsraSkge1xuXHRcdFx0Y29uc3QgaiA9IGRzdE9mZnNldCArIGk7XG5cdFx0XHRidWZmZXJbal0gPSBidWZmZXJbal0gKiBzICsgYnVmZmVyW3NyY09mZnNldCArIGldICogdDtcblx0XHR9XG5cdH1cblxuXHRfbGVycEFkZGl0aXZlKGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsraSkge1xuXHRcdFx0Y29uc3QgaiA9IGRzdE9mZnNldCArIGk7XG5cdFx0XHRidWZmZXJbal0gPSBidWZmZXJbal0gKyBidWZmZXJbc3JjT2Zmc2V0ICsgaV0gKiB0O1xuXHRcdH1cblx0fVxuXG59XG5cbi8vIENoYXJhY3RlcnMgW10uOi8gYXJlIHJlc2VydmVkIGZvciB0cmFjayBiaW5kaW5nIHN5bnRheC5cbmNvbnN0IF9SRVNFUlZFRF9DSEFSU19SRSA9ICdcXFxcW1xcXFxdXFxcXC46XFxcXC8nO1xuXG5jb25zdCBfcmVzZXJ2ZWRSZSA9IG5ldyBSZWdFeHAoJ1snICsgX1JFU0VSVkVEX0NIQVJTX1JFICsgJ10nLCAnZycpOyAvLyBBdHRlbXB0cyB0byBhbGxvdyBub2RlIG5hbWVzIGZyb20gYW55IGxhbmd1YWdlLiBFUzUncyBgXFx3YCByZWdleHAgbWF0Y2hlc1xuLy8gb25seSBsYXRpbiBjaGFyYWN0ZXJzLCBhbmQgdGhlIHVuaWNvZGUgXFxwe0x9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBTb1xuLy8gaW5zdGVhZCwgd2UgZXhjbHVkZSByZXNlcnZlZCBjaGFyYWN0ZXJzIGFuZCBtYXRjaCBldmVyeXRoaW5nIGVsc2UuXG5cblxuY29uc3QgX3dvcmRDaGFyID0gJ1teJyArIF9SRVNFUlZFRF9DSEFSU19SRSArICddJztcblxuY29uc3QgX3dvcmRDaGFyT3JEb3QgPSAnW14nICsgX1JFU0VSVkVEX0NIQVJTX1JFLnJlcGxhY2UoJ1xcXFwuJywgJycpICsgJ10nOyAvLyBQYXJlbnQgZGlyZWN0b3JpZXMsIGRlbGltaXRlZCBieSAnLycgb3IgJzonLiBDdXJyZW50bHkgdW51c2VkLCBidXQgbXVzdFxuLy8gYmUgbWF0Y2hlZCB0byBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgdHJhY2sgbmFtZS5cblxuXG5jb25zdCBfZGlyZWN0b3J5UmUgPSAvKCg/OldDK1tcXC86XSkqKS8uc291cmNlLnJlcGxhY2UoJ1dDJywgX3dvcmRDaGFyKTsgLy8gVGFyZ2V0IG5vZGUuIE1heSBjb250YWluIHdvcmQgY2hhcmFjdGVycyAoYS16QS1aMC05XykgYW5kICcuJyBvciAnLScuXG5cblxuY29uc3QgX25vZGVSZSA9IC8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoJ1dDT0QnLCBfd29yZENoYXJPckRvdCk7IC8vIE9iamVjdCBvbiB0YXJnZXQgbm9kZSwgYW5kIGFjY2Vzc29yLiBNYXkgbm90IGNvbnRhaW4gcmVzZXJ2ZWRcbi8vIGNoYXJhY3RlcnMuIEFjY2Vzc29yIG1heSBjb250YWluIGFueSBjaGFyYWN0ZXIgZXhjZXB0IGNsb3NpbmcgYnJhY2tldC5cblxuXG5jb25zdCBfb2JqZWN0UmUgPSAvKD86XFwuKFdDKykoPzpcXFsoLispXFxdKT8pPy8uc291cmNlLnJlcGxhY2UoJ1dDJywgX3dvcmRDaGFyKTsgLy8gUHJvcGVydHkgYW5kIGFjY2Vzc29yLiBNYXkgbm90IGNvbnRhaW4gcmVzZXJ2ZWQgY2hhcmFjdGVycy4gQWNjZXNzb3IgbWF5XG4vLyBjb250YWluIGFueSBub24tYnJhY2tldCBjaGFyYWN0ZXJzLlxuXG5cbmNvbnN0IF9wcm9wZXJ0eVJlID0gL1xcLihXQyspKD86XFxbKC4rKVxcXSk/Ly5zb3VyY2UucmVwbGFjZSgnV0MnLCBfd29yZENoYXIpO1xuXG5jb25zdCBfdHJhY2tSZSA9IG5ldyBSZWdFeHAoJycgKyAnXicgKyBfZGlyZWN0b3J5UmUgKyBfbm9kZVJlICsgX29iamVjdFJlICsgX3Byb3BlcnR5UmUgKyAnJCcpO1xuXG5jb25zdCBfc3VwcG9ydGVkT2JqZWN0TmFtZXMgPSBbJ21hdGVyaWFsJywgJ21hdGVyaWFscycsICdib25lcyddO1xuXG5jbGFzcyBDb21wb3NpdGUge1xuXHRjb25zdHJ1Y3Rvcih0YXJnZXRHcm91cCwgcGF0aCwgb3B0aW9uYWxQYXJzZWRQYXRoKSB7XG5cdFx0Y29uc3QgcGFyc2VkUGF0aCA9IG9wdGlvbmFsUGFyc2VkUGF0aCB8fCBQcm9wZXJ0eUJpbmRpbmcucGFyc2VUcmFja05hbWUocGF0aCk7XG5cdFx0dGhpcy5fdGFyZ2V0R3JvdXAgPSB0YXJnZXRHcm91cDtcblx0XHR0aGlzLl9iaW5kaW5ncyA9IHRhcmdldEdyb3VwLnN1YnNjcmliZV8ocGF0aCwgcGFyc2VkUGF0aCk7XG5cdH1cblxuXHRnZXRWYWx1ZShhcnJheSwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5iaW5kKCk7IC8vIGJpbmQgYWxsIGJpbmRpbmdcblxuXHRcdGNvbnN0IGZpcnN0VmFsaWRJbmRleCA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxcblx0XHRcdFx0XHRiaW5kaW5nID0gdGhpcy5fYmluZGluZ3NbZmlyc3RWYWxpZEluZGV4XTsgLy8gYW5kIG9ubHkgY2FsbCAuZ2V0VmFsdWUgb24gdGhlIGZpcnN0XG5cblx0XHRpZiAoYmluZGluZyAhPT0gdW5kZWZpbmVkKSBiaW5kaW5nLmdldFZhbHVlKGFycmF5LCBvZmZzZXQpO1xuXHR9XG5cblx0c2V0VmFsdWUoYXJyYXksIG9mZnNldCkge1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRmb3IgKGxldCBpID0gdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGJpbmRpbmdzW2ldLnNldFZhbHVlKGFycmF5LCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdGJpbmQoKSB7XG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncztcblxuXHRcdGZvciAobGV0IGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0YmluZGluZ3NbaV0uYmluZCgpO1xuXHRcdH1cblx0fVxuXG5cdHVuYmluZCgpIHtcblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRiaW5kaW5nc1tpXS51bmJpbmQoKTtcblx0XHR9XG5cdH1cblxufSAvLyBOb3RlOiBUaGlzIGNsYXNzIHVzZXMgYSBTdGF0ZSBwYXR0ZXJuIG9uIGEgcGVyLW1ldGhvZCBiYXNpczpcbi8vICdiaW5kJyBzZXRzICd0aGlzLmdldFZhbHVlJyAvICdzZXRWYWx1ZScgYW5kIHNoYWRvd3MgdGhlXG4vLyBwcm90b3R5cGUgdmVyc2lvbiBvZiB0aGVzZSBtZXRob2RzIHdpdGggb25lIHRoYXQgcmVwcmVzZW50c1xuLy8gdGhlIGJvdW5kIHN0YXRlLiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHRoZSBtZXRob2RzXG4vLyBiZWNvbWUgbm8tb3BzLlxuXG5cbmNsYXNzIFByb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0cnVjdG9yKHJvb3ROb2RlLCBwYXRoLCBwYXJzZWRQYXRoKSB7XG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblx0XHR0aGlzLnBhcnNlZFBhdGggPSBwYXJzZWRQYXRoIHx8IFByb3BlcnR5QmluZGluZy5wYXJzZVRyYWNrTmFtZShwYXRoKTtcblx0XHR0aGlzLm5vZGUgPSBQcm9wZXJ0eUJpbmRpbmcuZmluZE5vZGUocm9vdE5vZGUsIHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSkgfHwgcm9vdE5vZGU7XG5cdFx0dGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlOyAvLyBpbml0aWFsIHN0YXRlIG9mIHRoZXNlIG1ldGhvZHMgdGhhdCBjYWxscyAnYmluZCdcblxuXHRcdHRoaXMuZ2V0VmFsdWUgPSB0aGlzLl9nZXRWYWx1ZV91bmJvdW5kO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLl9zZXRWYWx1ZV91bmJvdW5kO1xuXHR9XG5cblx0c3RhdGljIGNyZWF0ZShyb290LCBwYXRoLCBwYXJzZWRQYXRoKSB7XG5cdFx0aWYgKCEocm9vdCAmJiByb290LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXApKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb3BlcnR5QmluZGluZyhyb290LCBwYXRoLCBwYXJzZWRQYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9wZXJ0eUJpbmRpbmcuQ29tcG9zaXRlKHJvb3QsIHBhdGgsIHBhcnNlZFBhdGgpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogUmVwbGFjZXMgc3BhY2VzIHdpdGggdW5kZXJzY29yZXMgYW5kIHJlbW92ZXMgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyBmcm9tXG5cdCAqIG5vZGUgbmFtZXMsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggcGFyc2VUcmFja05hbWUoKS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9kZSBuYW1lIHRvIGJlIHNhbml0aXplZC5cblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblxuXG5cdHN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKG5hbWUpIHtcblx0XHRyZXR1cm4gbmFtZS5yZXBsYWNlKC9cXHMvZywgJ18nKS5yZXBsYWNlKF9yZXNlcnZlZFJlLCAnJyk7XG5cdH1cblxuXHRzdGF0aWMgcGFyc2VUcmFja05hbWUodHJhY2tOYW1lKSB7XG5cdFx0Y29uc3QgbWF0Y2hlcyA9IF90cmFja1JlLmV4ZWModHJhY2tOYW1lKTtcblxuXHRcdGlmICghbWF0Y2hlcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICcgKyB0cmFja05hbWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSB7XG5cdFx0XHQvLyBkaXJlY3RvcnlOYW1lOiBtYXRjaGVzWyAxIF0sIC8vICh0c2NodykgY3VycmVudGx5IHVudXNlZFxuXHRcdFx0bm9kZU5hbWU6IG1hdGNoZXNbMl0sXG5cdFx0XHRvYmplY3ROYW1lOiBtYXRjaGVzWzNdLFxuXHRcdFx0b2JqZWN0SW5kZXg6IG1hdGNoZXNbNF0sXG5cdFx0XHRwcm9wZXJ0eU5hbWU6IG1hdGNoZXNbNV0sXG5cdFx0XHQvLyByZXF1aXJlZFxuXHRcdFx0cHJvcGVydHlJbmRleDogbWF0Y2hlc1s2XVxuXHRcdH07XG5cdFx0Y29uc3QgbGFzdERvdCA9IHJlc3VsdHMubm9kZU5hbWUgJiYgcmVzdWx0cy5ub2RlTmFtZS5sYXN0SW5kZXhPZignLicpO1xuXG5cdFx0aWYgKGxhc3REb3QgIT09IHVuZGVmaW5lZCAmJiBsYXN0RG90ICE9PSAtMSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0TmFtZSA9IHJlc3VsdHMubm9kZU5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTsgLy8gT2JqZWN0IG5hbWVzIG11c3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFsbG93bGlzdC4gT3RoZXJ3aXNlLCB0aGVyZVxuXHRcdFx0Ly8gaXMgbm8gd2F5IHRvIHBhcnNlICdmb28uYmFyLmJheic6ICdiYXonIG11c3QgYmUgYSBwcm9wZXJ0eSwgYnV0XG5cdFx0XHQvLyAnYmFyJyBjb3VsZCBiZSB0aGUgb2JqZWN0TmFtZSwgb3IgcGFydCBvZiBhIG5vZGVOYW1lICh3aGljaCBjYW5cblx0XHRcdC8vIGluY2x1ZGUgJy4nIGNoYXJhY3RlcnMpLlxuXG5cdFx0XHRpZiAoX3N1cHBvcnRlZE9iamVjdE5hbWVzLmluZGV4T2Yob2JqZWN0TmFtZSkgIT09IC0xKSB7XG5cdFx0XHRcdHJlc3VsdHMubm9kZU5hbWUgPSByZXN1bHRzLm5vZGVOYW1lLnN1YnN0cmluZygwLCBsYXN0RG90KTtcblx0XHRcdFx0cmVzdWx0cy5vYmplY3ROYW1lID0gb2JqZWN0TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVzdWx0cy5wcm9wZXJ0eU5hbWUgPT09IG51bGwgfHwgcmVzdWx0cy5wcm9wZXJ0eU5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICcgKyB0cmFja05hbWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0c3RhdGljIGZpbmROb2RlKHJvb3QsIG5vZGVOYW1lKSB7XG5cdFx0aWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJycgfHwgbm9kZU5hbWUgPT09ICcuJyB8fCBub2RlTmFtZSA9PT0gLTEgfHwgbm9kZU5hbWUgPT09IHJvb3QubmFtZSB8fCBub2RlTmFtZSA9PT0gcm9vdC51dWlkKSB7XG5cdFx0XHRyZXR1cm4gcm9vdDtcblx0XHR9IC8vIHNlYXJjaCBpbnRvIHNrZWxldG9uIGJvbmVzLlxuXG5cblx0XHRpZiAocm9vdC5za2VsZXRvbikge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHJvb3Quc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShub2RlTmFtZSk7XG5cblx0XHRcdGlmIChib25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0XHR9XG5cdFx0fSAvLyBzZWFyY2ggaW50byBub2RlIHN1YnRyZWUuXG5cblxuXHRcdGlmIChyb290LmNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBzZWFyY2hOb2RlU3VidHJlZSA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2hpbGROb2RlID0gY2hpbGRyZW5baV07XG5cblx0XHRcdFx0XHRpZiAoY2hpbGROb2RlLm5hbWUgPT09IG5vZGVOYW1lIHx8IGNoaWxkTm9kZS51dWlkID09PSBub2RlTmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNoaWxkTm9kZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWFyY2hOb2RlU3VidHJlZShjaGlsZE5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHN1YlRyZWVOb2RlID0gc2VhcmNoTm9kZVN1YnRyZWUocm9vdC5jaGlsZHJlbik7XG5cblx0XHRcdGlmIChzdWJUcmVlTm9kZSkge1xuXHRcdFx0XHRyZXR1cm4gc3ViVHJlZU5vZGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gLy8gdGhlc2UgYXJlIHVzZWQgdG8gXCJiaW5kXCIgYSBub25leGlzdGVudCBwcm9wZXJ0eVxuXG5cblx0X2dldFZhbHVlX3VuYXZhaWxhYmxlKCkge31cblxuXHRfc2V0VmFsdWVfdW5hdmFpbGFibGUoKSB7fSAvLyBHZXR0ZXJzXG5cblxuXHRfZ2V0VmFsdWVfZGlyZWN0KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0YnVmZmVyW29mZnNldF0gPSB0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV07XG5cdH1cblxuXHRfZ2V0VmFsdWVfYXJyYXkoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHRjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVkUHJvcGVydHk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNvdXJjZS5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0YnVmZmVyW29mZnNldCsrXSA9IHNvdXJjZVtpXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VmFsdWVfYXJyYXlFbGVtZW50KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0YnVmZmVyW29mZnNldF0gPSB0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XTtcblx0fVxuXG5cdF9nZXRWYWx1ZV90b0FycmF5KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoYnVmZmVyLCBvZmZzZXQpO1xuXHR9IC8vIERpcmVjdFxuXG5cblx0X3NldFZhbHVlX2RpcmVjdChidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXSA9IGJ1ZmZlcltvZmZzZXRdO1xuXHR9XG5cblx0X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXSA9IGJ1ZmZlcltvZmZzZXRdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fVxuXG5cdF9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXSA9IGJ1ZmZlcltvZmZzZXRdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9IC8vIEVudGlyZUFycmF5XG5cblxuXHRfc2V0VmFsdWVfYXJyYXkoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkZXN0Lmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRkZXN0W2ldID0gYnVmZmVyW29mZnNldCsrXTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkZXN0Lmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRkZXN0W2ldID0gYnVmZmVyW29mZnNldCsrXTtcblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdGNvbnN0IGRlc3QgPSB0aGlzLnJlc29sdmVkUHJvcGVydHk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRlc3QubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGRlc3RbaV0gPSBidWZmZXJbb2Zmc2V0KytdO1xuXHRcdH1cblxuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9IC8vIEFycmF5RWxlbWVudFxuXG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudChidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdID0gYnVmZmVyW29mZnNldF07XG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF0gPSBidWZmZXJbb2Zmc2V0XTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XSA9IGJ1ZmZlcltvZmZzZXRdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9IC8vIEhhc1RvRnJvbUFycmF5XG5cblxuXHRfc2V0VmFsdWVfZnJvbUFycmF5KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShidWZmZXIsIG9mZnNldCk7XG5cdH1cblxuXHRfc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShidWZmZXIsIG9mZnNldCk7XG5cdFx0dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShidWZmZXIsIG9mZnNldCk7XG5cdFx0dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRfZ2V0VmFsdWVfdW5ib3VuZCh0YXJnZXRBcnJheSwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5iaW5kKCk7XG5cdFx0dGhpcy5nZXRWYWx1ZSh0YXJnZXRBcnJheSwgb2Zmc2V0KTtcblx0fVxuXG5cdF9zZXRWYWx1ZV91bmJvdW5kKHNvdXJjZUFycmF5LCBvZmZzZXQpIHtcblx0XHR0aGlzLmJpbmQoKTtcblx0XHR0aGlzLnNldFZhbHVlKHNvdXJjZUFycmF5LCBvZmZzZXQpO1xuXHR9IC8vIGNyZWF0ZSBnZXR0ZXIgLyBzZXR0ZXIgcGFpciBmb3IgYSBwcm9wZXJ0eSBpbiB0aGUgc2NlbmUgZ3JhcGhcblxuXG5cdGJpbmQoKSB7XG5cdFx0bGV0IHRhcmdldE9iamVjdCA9IHRoaXMubm9kZTtcblx0XHRjb25zdCBwYXJzZWRQYXRoID0gdGhpcy5wYXJzZWRQYXRoO1xuXHRcdGNvbnN0IG9iamVjdE5hbWUgPSBwYXJzZWRQYXRoLm9iamVjdE5hbWU7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcGFyc2VkUGF0aC5wcm9wZXJ0eU5hbWU7XG5cdFx0bGV0IHByb3BlcnR5SW5kZXggPSBwYXJzZWRQYXRoLnByb3BlcnR5SW5kZXg7XG5cblx0XHRpZiAoIXRhcmdldE9iamVjdCkge1xuXHRcdFx0dGFyZ2V0T2JqZWN0ID0gUHJvcGVydHlCaW5kaW5nLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsIHBhcnNlZFBhdGgubm9kZU5hbWUpIHx8IHRoaXMucm9vdE5vZGU7XG5cdFx0XHR0aGlzLm5vZGUgPSB0YXJnZXRPYmplY3Q7XG5cdFx0fSAvLyBzZXQgZmFpbCBzdGF0ZSBzbyB3ZSBjYW4ganVzdCAncmV0dXJuJyBvbiBlcnJvclxuXG5cblx0XHR0aGlzLmdldFZhbHVlID0gdGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7XG5cdFx0dGhpcy5zZXRWYWx1ZSA9IHRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlOyAvLyBlbnN1cmUgdGhlcmUgaXMgYSB2YWx1ZSBub2RlXG5cblx0XHRpZiAoIXRhcmdldE9iamVjdCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAnICsgdGhpcy5wYXRoICsgJyBidXQgaXQgd2FzblxcJ3QgZm91bmQuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKG9iamVjdE5hbWUpIHtcblx0XHRcdGxldCBvYmplY3RJbmRleCA9IHBhcnNlZFBhdGgub2JqZWN0SW5kZXg7IC8vIHNwZWNpYWwgY2FzZXMgd2VyZSB3ZSBuZWVkIHRvIHJlYWNoIGRlZXBlciBpbnRvIHRoZSBoaWVyYXJjaHkgdG8gZ2V0IHRoZSBmYWNlIG1hdGVyaWFscy4uLi5cblxuXHRcdFx0c3dpdGNoIChvYmplY3ROYW1lKSB7XG5cdFx0XHRcdGNhc2UgJ21hdGVyaWFscyc6XG5cdFx0XHRcdFx0aWYgKCF0YXJnZXRPYmplY3QubWF0ZXJpYWwpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLicsIHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghdGFyZ2V0T2JqZWN0Lm1hdGVyaWFsLm1hdGVyaWFscykge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4nLCB0aGlzKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3QubWF0ZXJpYWwubWF0ZXJpYWxzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ2JvbmVzJzpcblx0XHRcdFx0XHRpZiAoIXRhcmdldE9iamVjdC5za2VsZXRvbikge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uJywgdGhpcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSAvLyBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbjogc2tpcCB0aGlzIGlmIHByb3BlcnR5SW5kZXggaXMgYWxyZWFkeSBhbiBpbnRlZ2VyXG5cdFx0XHRcdFx0Ly8gYW5kIGNvbnZlcnQgdGhlIGludGVnZXIgc3RyaW5nIHRvIGEgdHJ1ZSBpbnRlZ2VyLlxuXG5cblx0XHRcdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3Quc2tlbGV0b24uYm9uZXM7IC8vIHN1cHBvcnQgcmVzb2x2aW5nIG1vcnBoVGFyZ2V0IG5hbWVzIGludG8gaW5kaWNlcy5cblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0T2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0W2ldLm5hbWUgPT09IG9iamVjdEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdG9iamVjdEluZGV4ID0gaTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0W29iamVjdE5hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuJywgdGhpcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0W29iamVjdE5hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2JqZWN0SW5kZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0W29iamVjdEluZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLicsIHRoaXMsIHRhcmdldE9iamVjdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0W29iamVjdEluZGV4XTtcblx0XHRcdH1cblx0XHR9IC8vIHJlc29sdmUgcHJvcGVydHlcblxuXG5cdFx0Y29uc3Qgbm9kZVByb3BlcnR5ID0gdGFyZ2V0T2JqZWN0W3Byb3BlcnR5TmFtZV07XG5cblx0XHRpZiAobm9kZVByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG5vZGVOYW1lID0gcGFyc2VkUGF0aC5ub2RlTmFtZTtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICcgKyBub2RlTmFtZSArICcuJyArIHByb3BlcnR5TmFtZSArICcgYnV0IGl0IHdhc25cXCd0IGZvdW5kLicsIHRhcmdldE9iamVjdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSAvLyBkZXRlcm1pbmUgdmVyc2lvbmluZyBzY2hlbWVcblxuXG5cdFx0bGV0IHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTm9uZTtcblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdDtcblxuXHRcdGlmICh0YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbWF0ZXJpYWxcblx0XHRcdHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBub2RlIHRyYW5zZm9ybVxuXHRcdFx0dmVyc2lvbmluZyA9IHRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlO1xuXHRcdH0gLy8gZGV0ZXJtaW5lIGhvdyB0aGUgcHJvcGVydHkgZ2V0cyBib3VuZFxuXG5cblx0XHRsZXQgYmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtcblxuXHRcdGlmIChwcm9wZXJ0eUluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIGFjY2VzcyBhIHN1YiBlbGVtZW50IG9mIHRoZSBwcm9wZXJ0eSBhcnJheSAob25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQgcmlnaHQgbm93KVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gJ21vcnBoVGFyZ2V0SW5mbHVlbmNlcycpIHtcblx0XHRcdFx0Ly8gcG90ZW50aWFsIG9wdGltaXphdGlvbiwgc2tpcCB0aGlzIGlmIHByb3BlcnR5SW5kZXggaXMgYWxyZWFkeSBhbiBpbnRlZ2VyLCBhbmQgY29udmVydCB0aGUgaW50ZWdlciBzdHJpbmcgdG8gYSB0cnVlIGludGVnZXIuXG5cdFx0XHRcdC8vIHN1cHBvcnQgcmVzb2x2aW5nIG1vcnBoVGFyZ2V0IG5hbWVzIGludG8gaW5kaWNlcy5cblx0XHRcdFx0aWYgKCF0YXJnZXRPYmplY3QuZ2VvbWV0cnkpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4nLCB0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdFx0XHRpZiAoIXRhcmdldE9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4nLCB0aGlzKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtwcm9wZXJ0eUluZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZGV4ID0gdGFyZ2V0T2JqZWN0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtwcm9wZXJ0eUluZGV4XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nLCB0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudDtcblx0XHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eSA9IG5vZGVQcm9wZXJ0eTtcblx0XHRcdHRoaXMucHJvcGVydHlJbmRleCA9IHByb3BlcnR5SW5kZXg7XG5cdFx0fSBlbHNlIGlmIChub2RlUHJvcGVydHkuZnJvbUFycmF5ICE9PSB1bmRlZmluZWQgJiYgbm9kZVByb3BlcnR5LnRvQXJyYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbXVzdCB1c2UgY29weSBmb3IgT2JqZWN0M0QuRXVsZXIvUXVhdGVybmlvblxuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5O1xuXHRcdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5ID0gbm9kZVByb3BlcnR5O1xuXHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlUHJvcGVydHkpKSB7XG5cdFx0XHRiaW5kaW5nVHlwZSA9IHRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXk7XG5cdFx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkgPSBub2RlUHJvcGVydHk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuXHRcdH0gLy8gc2VsZWN0IGdldHRlciAvIHNldHRlclxuXG5cblx0XHR0aGlzLmdldFZhbHVlID0gdGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2JpbmRpbmdUeXBlXTtcblx0XHR0aGlzLnNldFZhbHVlID0gdGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tiaW5kaW5nVHlwZV1bdmVyc2lvbmluZ107XG5cdH1cblxuXHR1bmJpbmQoKSB7XG5cdFx0dGhpcy5ub2RlID0gbnVsbDsgLy8gYmFjayB0byB0aGUgcHJvdG90eXBlIHZlcnNpb24gb2YgZ2V0VmFsdWUgLyBzZXRWYWx1ZVxuXHRcdC8vIG5vdGU6IGF2b2lkaW5nIHRvIG11dGF0ZSB0aGUgc2hhcGUgb2YgJ3RoaXMnIHZpYSAnZGVsZXRlJ1xuXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlX3VuYm91bmQ7XG5cdFx0dGhpcy5zZXRWYWx1ZSA9IHRoaXMuX3NldFZhbHVlX3VuYm91bmQ7XG5cdH1cblxufVxuXG5Qcm9wZXJ0eUJpbmRpbmcuQ29tcG9zaXRlID0gQ29tcG9zaXRlO1xuUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5CaW5kaW5nVHlwZSA9IHtcblx0RGlyZWN0OiAwLFxuXHRFbnRpcmVBcnJheTogMSxcblx0QXJyYXlFbGVtZW50OiAyLFxuXHRIYXNGcm9tVG9BcnJheTogM1xufTtcblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuVmVyc2lvbmluZyA9IHtcblx0Tm9uZTogMCxcblx0TmVlZHNVcGRhdGU6IDEsXG5cdE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6IDJcbn07XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGUgPSBbUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXlFbGVtZW50LCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtcblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmcgPSBbWy8vIERpcmVjdFxuUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUsIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSwgWy8vIEVudGlyZUFycmF5XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLCBbLy8gQXJyYXlFbGVtZW50XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLCBbLy8gSGFzVG9Gcm9tQXJyYXlcblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV1dO1xuXG4vKipcbiAqXG4gKiBBIGdyb3VwIG9mIG9iamVjdHMgdGhhdCByZWNlaXZlcyBhIHNoYXJlZCBhbmltYXRpb24gc3RhdGUuXG4gKlxuICogVXNhZ2U6XG4gKlxuICpcdC0gQWRkIG9iamVjdHMgeW91IHdvdWxkIG90aGVyd2lzZSBwYXNzIGFzICdyb290JyB0byB0aGVcbiAqXHRcdGNvbnN0cnVjdG9yIG9yIHRoZSAuY2xpcEFjdGlvbiBtZXRob2Qgb2YgQW5pbWF0aW9uTWl4ZXIuXG4gKlxuICpcdC0gSW5zdGVhZCBwYXNzIHRoaXMgb2JqZWN0IGFzICdyb290Jy5cbiAqXG4gKlx0LSBZb3UgY2FuIGFsc28gYWRkIGFuZCByZW1vdmUgb2JqZWN0cyBsYXRlciB3aGVuIHRoZSBtaXhlclxuICpcdFx0aXMgcnVubmluZy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqXHRcdE9iamVjdHMgb2YgdGhpcyBjbGFzcyBhcHBlYXIgYXMgb25lIG9iamVjdCB0byB0aGUgbWl4ZXIsXG4gKlx0XHRzbyBjYWNoZSBjb250cm9sIG9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdHMgbXVzdCBiZSBkb25lXG4gKlx0XHRvbiB0aGUgZ3JvdXAuXG4gKlxuICogTGltaXRhdGlvbjpcbiAqXG4gKlx0LSBUaGUgYW5pbWF0ZWQgcHJvcGVydGllcyBtdXN0IGJlIGNvbXBhdGlibGUgYW1vbmcgdGhlXG4gKlx0XHRhbGwgb2JqZWN0cyBpbiB0aGUgZ3JvdXAuXG4gKlxuICpcdC0gQSBzaW5nbGUgcHJvcGVydHkgY2FuIGVpdGhlciBiZSBjb250cm9sbGVkIHRocm91Z2ggYVxuICpcdFx0dGFyZ2V0IGdyb3VwIG9yIGRpcmVjdGx5LCBidXQgbm90IGJvdGguXG4gKi9cblxuY2xhc3MgQW5pbWF0aW9uT2JqZWN0R3JvdXAge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTsgLy8gY2FjaGVkIG9iamVjdHMgZm9sbG93ZWQgYnkgdGhlIGFjdGl2ZSBvbmVzXG5cblx0XHR0aGlzLl9vYmplY3RzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0XHR0aGlzLm5DYWNoZWRPYmplY3RzXyA9IDA7IC8vIHRocmVzaG9sZFxuXHRcdC8vIG5vdGU6IHJlYWQgYnkgUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZVxuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IHt9O1xuXHRcdHRoaXMuX2luZGljZXNCeVVVSUQgPSBpbmRpY2VzOyAvLyBmb3IgYm9va2tlZXBpbmdcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRpbmRpY2VzW2FyZ3VtZW50c1tpXS51dWlkXSA9IGk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcGF0aHMgPSBbXTsgLy8gaW5zaWRlOiBzdHJpbmdcblxuXHRcdHRoaXMuX3BhcnNlZFBhdGhzID0gW107IC8vIGluc2lkZTogeyB3ZSBkb24ndCBjYXJlLCBoZXJlIH1cblxuXHRcdHRoaXMuX2JpbmRpbmdzID0gW107IC8vIGluc2lkZTogQXJyYXk8IFByb3BlcnR5QmluZGluZyA+XG5cblx0XHR0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGggPSB7fTsgLy8gaW5zaWRlOiBpbmRpY2VzIGluIHRoZXNlIGFycmF5c1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdHRoaXMuc3RhdHMgPSB7XG5cdFx0XHRvYmplY3RzOiB7XG5cdFx0XHRcdGdldCB0b3RhbCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX29iamVjdHMubGVuZ3RoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy50b3RhbCAtIHNjb3BlLm5DYWNoZWRPYmplY3RzXztcblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRnZXQgYmluZGluZ3NQZXJPYmplY3QoKSB7XG5cdFx0XHRcdHJldHVybiBzY29wZS5fYmluZGluZ3MubGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0fTtcblx0fVxuXG5cdGFkZCgpIHtcblx0XHRjb25zdCBvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEID0gdGhpcy5faW5kaWNlc0J5VVVJRCxcblx0XHRcdFx0XHRwYXRocyA9IHRoaXMuX3BhdGhzLFxuXHRcdFx0XHRcdHBhcnNlZFBhdGhzID0gdGhpcy5fcGFyc2VkUGF0aHMsXG5cdFx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRuQmluZGluZ3MgPSBiaW5kaW5ncy5sZW5ndGg7XG5cdFx0bGV0IGtub3duT2JqZWN0ID0gdW5kZWZpbmVkLFxuXHRcdFx0XHRuT2JqZWN0cyA9IG9iamVjdHMubGVuZ3RoLFxuXHRcdFx0XHRuQ2FjaGVkT2JqZWN0cyA9IHRoaXMubkNhY2hlZE9iamVjdHNfO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGNvbnN0IG9iamVjdCA9IGFyZ3VtZW50c1tpXSxcblx0XHRcdFx0XHRcdHV1aWQgPSBvYmplY3QudXVpZDtcblx0XHRcdGxldCBpbmRleCA9IGluZGljZXNCeVVVSURbdXVpZF07XG5cblx0XHRcdGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIHVua25vd24gb2JqZWN0IC0+IGFkZCBpdCB0byB0aGUgQUNUSVZFIHJlZ2lvblxuXHRcdFx0XHRpbmRleCA9IG5PYmplY3RzKys7XG5cdFx0XHRcdGluZGljZXNCeVVVSURbdXVpZF0gPSBpbmRleDtcblx0XHRcdFx0b2JqZWN0cy5wdXNoKG9iamVjdCk7IC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKytqKSB7XG5cdFx0XHRcdFx0YmluZGluZ3Nbal0ucHVzaChuZXcgUHJvcGVydHlCaW5kaW5nKG9iamVjdCwgcGF0aHNbal0sIHBhcnNlZFBhdGhzW2pdKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaW5kZXggPCBuQ2FjaGVkT2JqZWN0cykge1xuXHRcdFx0XHRrbm93bk9iamVjdCA9IG9iamVjdHNbaW5kZXhdOyAvLyBtb3ZlIGV4aXN0aW5nIG9iamVjdCB0byB0aGUgQUNUSVZFIHJlZ2lvblxuXG5cdFx0XHRcdGNvbnN0IGZpcnN0QWN0aXZlSW5kZXggPSAtLW5DYWNoZWRPYmplY3RzLFxuXHRcdFx0XHRcdFx0XHRsYXN0Q2FjaGVkT2JqZWN0ID0gb2JqZWN0c1tmaXJzdEFjdGl2ZUluZGV4XTtcblx0XHRcdFx0aW5kaWNlc0J5VVVJRFtsYXN0Q2FjaGVkT2JqZWN0LnV1aWRdID0gaW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbaW5kZXhdID0gbGFzdENhY2hlZE9iamVjdDtcblx0XHRcdFx0aW5kaWNlc0J5VVVJRFt1dWlkXSA9IGZpcnN0QWN0aXZlSW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbZmlyc3RBY3RpdmVJbmRleF0gPSBvYmplY3Q7IC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKytqKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ3NGb3JQYXRoID0gYmluZGluZ3Nbal0sXG5cdFx0XHRcdFx0XHRcdFx0bGFzdENhY2hlZCA9IGJpbmRpbmdzRm9yUGF0aFtmaXJzdEFjdGl2ZUluZGV4XTtcblx0XHRcdFx0XHRsZXQgYmluZGluZyA9IGJpbmRpbmdzRm9yUGF0aFtpbmRleF07XG5cdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoW2luZGV4XSA9IGxhc3RDYWNoZWQ7XG5cblx0XHRcdFx0XHRpZiAoYmluZGluZyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyBzaW5jZSB3ZSBkbyBub3QgYm90aGVyIHRvIGNyZWF0ZSBuZXcgYmluZGluZ3Ncblx0XHRcdFx0XHRcdC8vIGZvciBvYmplY3RzIHRoYXQgYXJlIGNhY2hlZCwgdGhlIGJpbmRpbmcgbWF5XG5cdFx0XHRcdFx0XHQvLyBvciBtYXkgbm90IGV4aXN0XG5cdFx0XHRcdFx0XHRiaW5kaW5nID0gbmV3IFByb3BlcnR5QmluZGluZyhvYmplY3QsIHBhdGhzW2pdLCBwYXJzZWRQYXRoc1tqXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoW2ZpcnN0QWN0aXZlSW5kZXhdID0gYmluZGluZztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvYmplY3RzW2luZGV4XSAhPT0ga25vd25PYmplY3QpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCAnICsgJ2RldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLicpO1xuXHRcdFx0fSAvLyBlbHNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlXG5cblx0XHR9IC8vIGZvciBhcmd1bWVudHNcblxuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblx0fVxuXG5cdHJlbW92ZSgpIHtcblx0XHRjb25zdCBvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEID0gdGhpcy5faW5kaWNlc0J5VVVJRCxcblx0XHRcdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRcdG5CaW5kaW5ncyA9IGJpbmRpbmdzLmxlbmd0aDtcblx0XHRsZXQgbkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBhcmd1bWVudHNbaV0sXG5cdFx0XHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQsXG5cdFx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNCeVVVSURbdXVpZF07XG5cblx0XHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IG5DYWNoZWRPYmplY3RzKSB7XG5cdFx0XHRcdC8vIG1vdmUgZXhpc3Rpbmcgb2JqZWN0IGludG8gdGhlIENBQ0hFRCByZWdpb25cblx0XHRcdFx0Y29uc3QgbGFzdENhY2hlZEluZGV4ID0gbkNhY2hlZE9iamVjdHMrKyxcblx0XHRcdFx0XHRcdFx0Zmlyc3RBY3RpdmVPYmplY3QgPSBvYmplY3RzW2xhc3RDYWNoZWRJbmRleF07XG5cdFx0XHRcdGluZGljZXNCeVVVSURbZmlyc3RBY3RpdmVPYmplY3QudXVpZF0gPSBpbmRleDtcblx0XHRcdFx0b2JqZWN0c1tpbmRleF0gPSBmaXJzdEFjdGl2ZU9iamVjdDtcblx0XHRcdFx0aW5kaWNlc0J5VVVJRFt1dWlkXSA9IGxhc3RDYWNoZWRJbmRleDtcblx0XHRcdFx0b2JqZWN0c1tsYXN0Q2FjaGVkSW5kZXhdID0gb2JqZWN0OyAvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsraikge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzW2pdLFxuXHRcdFx0XHRcdFx0XHRcdGZpcnN0QWN0aXZlID0gYmluZGluZ3NGb3JQYXRoW2xhc3RDYWNoZWRJbmRleF0sXG5cdFx0XHRcdFx0XHRcdFx0YmluZGluZyA9IGJpbmRpbmdzRm9yUGF0aFtpbmRleF07XG5cdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoW2luZGV4XSA9IGZpcnN0QWN0aXZlO1xuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtsYXN0Q2FjaGVkSW5kZXhdID0gYmluZGluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gLy8gZm9yIGFyZ3VtZW50c1xuXG5cblx0XHR0aGlzLm5DYWNoZWRPYmplY3RzXyA9IG5DYWNoZWRPYmplY3RzO1xuXHR9IC8vIHJlbW92ZSAmIGZvcmdldFxuXG5cblx0dW5jYWNoZSgpIHtcblx0XHRjb25zdCBvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEID0gdGhpcy5faW5kaWNlc0J5VVVJRCxcblx0XHRcdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRcdG5CaW5kaW5ncyA9IGJpbmRpbmdzLmxlbmd0aDtcblx0XHRsZXQgbkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXyxcblx0XHRcdFx0bk9iamVjdHMgPSBvYmplY3RzLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBhcmd1bWVudHNbaV0sXG5cdFx0XHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQsXG5cdFx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNCeVVVSURbdXVpZF07XG5cblx0XHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlbGV0ZSBpbmRpY2VzQnlVVUlEW3V1aWRdO1xuXG5cdFx0XHRcdGlmIChpbmRleCA8IG5DYWNoZWRPYmplY3RzKSB7XG5cdFx0XHRcdFx0Ly8gb2JqZWN0IGlzIGNhY2hlZCwgc2hyaW5rIHRoZSBDQUNIRUQgcmVnaW9uXG5cdFx0XHRcdFx0Y29uc3QgZmlyc3RBY3RpdmVJbmRleCA9IC0tbkNhY2hlZE9iamVjdHMsXG5cdFx0XHRcdFx0XHRcdFx0bGFzdENhY2hlZE9iamVjdCA9IG9iamVjdHNbZmlyc3RBY3RpdmVJbmRleF0sXG5cdFx0XHRcdFx0XHRcdFx0bGFzdEluZGV4ID0gLS1uT2JqZWN0cyxcblx0XHRcdFx0XHRcdFx0XHRsYXN0T2JqZWN0ID0gb2JqZWN0c1tsYXN0SW5kZXhdOyAvLyBsYXN0IGNhY2hlZCBvYmplY3QgdGFrZXMgdGhpcyBvYmplY3QncyBwbGFjZVxuXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRFtsYXN0Q2FjaGVkT2JqZWN0LnV1aWRdID0gaW5kZXg7XG5cdFx0XHRcdFx0b2JqZWN0c1tpbmRleF0gPSBsYXN0Q2FjaGVkT2JqZWN0OyAvLyBsYXN0IG9iamVjdCBnb2VzIHRvIHRoZSBhY3RpdmF0ZWQgc2xvdCBhbmQgcG9wXG5cblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEW2xhc3RPYmplY3QudXVpZF0gPSBmaXJzdEFjdGl2ZUluZGV4O1xuXHRcdFx0XHRcdG9iamVjdHNbZmlyc3RBY3RpdmVJbmRleF0gPSBsYXN0T2JqZWN0O1xuXHRcdFx0XHRcdG9iamVjdHMucG9wKCk7IC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArK2opIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzW2pdLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFzdENhY2hlZCA9IGJpbmRpbmdzRm9yUGF0aFtmaXJzdEFjdGl2ZUluZGV4XSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhc3QgPSBiaW5kaW5nc0ZvclBhdGhbbGFzdEluZGV4XTtcblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtpbmRleF0gPSBsYXN0Q2FjaGVkO1xuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoW2ZpcnN0QWN0aXZlSW5kZXhdID0gbGFzdDtcblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aC5wb3AoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gb2JqZWN0IGlzIGFjdGl2ZSwganVzdCBzd2FwIHdpdGggdGhlIGxhc3QgYW5kIHBvcFxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IC0tbk9iamVjdHMsXG5cdFx0XHRcdFx0XHRcdFx0bGFzdE9iamVjdCA9IG9iamVjdHNbbGFzdEluZGV4XTtcblxuXHRcdFx0XHRcdGlmIChsYXN0SW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEW2xhc3RPYmplY3QudXVpZF0gPSBpbmRleDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvYmplY3RzW2luZGV4XSA9IGxhc3RPYmplY3Q7XG5cdFx0XHRcdFx0b2JqZWN0cy5wb3AoKTsgLy8gYWNjb3VudGluZyBpcyBkb25lLCBub3cgZG8gdGhlIHNhbWUgZm9yIGFsbCBiaW5kaW5nc1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsraikge1xuXHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ3NGb3JQYXRoID0gYmluZGluZ3Nbal07XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbaW5kZXhdID0gYmluZGluZ3NGb3JQYXRoW2xhc3RJbmRleF07XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGgucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IC8vIGNhY2hlZCBvciBhY3RpdmVcblxuXHRcdFx0fSAvLyBpZiBvYmplY3QgaXMga25vd25cblxuXHRcdH0gLy8gZm9yIGFyZ3VtZW50c1xuXG5cblx0XHR0aGlzLm5DYWNoZWRPYmplY3RzXyA9IG5DYWNoZWRPYmplY3RzO1xuXHR9IC8vIEludGVybmFsIGludGVyZmFjZSB1c2VkIGJ5IGJlZnJpZW5kZWQgUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZTpcblxuXG5cdHN1YnNjcmliZV8ocGF0aCwgcGFyc2VkUGF0aCkge1xuXHRcdC8vIHJldHVybnMgYW4gYXJyYXkgb2YgYmluZGluZ3MgZm9yIHRoZSBnaXZlbiBwYXRoIHRoYXQgaXMgY2hhbmdlZFxuXHRcdC8vIGFjY29yZGluZyB0byB0aGUgY29udGFpbmVkIG9iamVjdHMgaW4gdGhlIGdyb3VwXG5cdFx0Y29uc3QgaW5kaWNlc0J5UGF0aCA9IHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aDtcblx0XHRsZXQgaW5kZXggPSBpbmRpY2VzQnlQYXRoW3BhdGhdO1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHJldHVybiBiaW5kaW5nc1tpbmRleF07XG5cdFx0Y29uc3QgcGF0aHMgPSB0aGlzLl9wYXRocyxcblx0XHRcdFx0XHRwYXJzZWRQYXRocyA9IHRoaXMuX3BhcnNlZFBhdGhzLFxuXHRcdFx0XHRcdG9iamVjdHMgPSB0aGlzLl9vYmplY3RzLFxuXHRcdFx0XHRcdG5PYmplY3RzID0gb2JqZWN0cy5sZW5ndGgsXG5cdFx0XHRcdFx0bkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXyxcblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGggPSBuZXcgQXJyYXkobk9iamVjdHMpO1xuXHRcdGluZGV4ID0gYmluZGluZ3MubGVuZ3RoO1xuXHRcdGluZGljZXNCeVBhdGhbcGF0aF0gPSBpbmRleDtcblx0XHRwYXRocy5wdXNoKHBhdGgpO1xuXHRcdHBhcnNlZFBhdGhzLnB1c2gocGFyc2VkUGF0aCk7XG5cdFx0YmluZGluZ3MucHVzaChiaW5kaW5nc0ZvclBhdGgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IG5DYWNoZWRPYmplY3RzLCBuID0gb2JqZWN0cy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gb2JqZWN0c1tpXTtcblx0XHRcdGJpbmRpbmdzRm9yUGF0aFtpXSA9IG5ldyBQcm9wZXJ0eUJpbmRpbmcob2JqZWN0LCBwYXRoLCBwYXJzZWRQYXRoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZ3NGb3JQYXRoO1xuXHR9XG5cblx0dW5zdWJzY3JpYmVfKHBhdGgpIHtcblx0XHQvLyB0ZWxscyB0aGUgZ3JvdXAgdG8gZm9yZ2V0IGFib3V0IGEgcHJvcGVydHkgcGF0aCBhbmQgbm8gbG9uZ2VyXG5cdFx0Ly8gdXBkYXRlIHRoZSBhcnJheSBwcmV2aW91c2x5IG9idGFpbmVkIHdpdGggJ3N1YnNjcmliZV8nXG5cdFx0Y29uc3QgaW5kaWNlc0J5UGF0aCA9IHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxcblx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNCeVBhdGhbcGF0aF07XG5cblx0XHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcGF0aHMgPSB0aGlzLl9wYXRocyxcblx0XHRcdFx0XHRcdHBhcnNlZFBhdGhzID0gdGhpcy5fcGFyc2VkUGF0aHMsXG5cdFx0XHRcdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRcdFx0bGFzdEJpbmRpbmdzSW5kZXggPSBiaW5kaW5ncy5sZW5ndGggLSAxLFxuXHRcdFx0XHRcdFx0bGFzdEJpbmRpbmdzID0gYmluZGluZ3NbbGFzdEJpbmRpbmdzSW5kZXhdLFxuXHRcdFx0XHRcdFx0bGFzdEJpbmRpbmdzUGF0aCA9IHBhdGhbbGFzdEJpbmRpbmdzSW5kZXhdO1xuXHRcdFx0aW5kaWNlc0J5UGF0aFtsYXN0QmluZGluZ3NQYXRoXSA9IGluZGV4O1xuXHRcdFx0YmluZGluZ3NbaW5kZXhdID0gbGFzdEJpbmRpbmdzO1xuXHRcdFx0YmluZGluZ3MucG9wKCk7XG5cdFx0XHRwYXJzZWRQYXRoc1tpbmRleF0gPSBwYXJzZWRQYXRoc1tsYXN0QmluZGluZ3NJbmRleF07XG5cdFx0XHRwYXJzZWRQYXRocy5wb3AoKTtcblx0XHRcdHBhdGhzW2luZGV4XSA9IHBhdGhzW2xhc3RCaW5kaW5nc0luZGV4XTtcblx0XHRcdHBhdGhzLnBvcCgpO1xuXHRcdH1cblx0fVxuXG59XG5cbkFuaW1hdGlvbk9iamVjdEdyb3VwLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwID0gdHJ1ZTtcblxuY2xhc3MgQW5pbWF0aW9uQWN0aW9uIHtcblx0Y29uc3RydWN0b3IobWl4ZXIsIGNsaXAsIGxvY2FsUm9vdCA9IG51bGwsIGJsZW5kTW9kZSA9IGNsaXAuYmxlbmRNb2RlKSB7XG5cdFx0dGhpcy5fbWl4ZXIgPSBtaXhlcjtcblx0XHR0aGlzLl9jbGlwID0gY2xpcDtcblx0XHR0aGlzLl9sb2NhbFJvb3QgPSBsb2NhbFJvb3Q7XG5cdFx0dGhpcy5ibGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cdFx0Y29uc3QgdHJhY2tzID0gY2xpcC50cmFja3MsXG5cdFx0XHRcdFx0blRyYWNrcyA9IHRyYWNrcy5sZW5ndGgsXG5cdFx0XHRcdFx0aW50ZXJwb2xhbnRzID0gbmV3IEFycmF5KG5UcmFja3MpO1xuXHRcdGNvbnN0IGludGVycG9sYW50U2V0dGluZ3MgPSB7XG5cdFx0XHRlbmRpbmdTdGFydDogWmVyb0N1cnZhdHVyZUVuZGluZyxcblx0XHRcdGVuZGluZ0VuZDogWmVyb0N1cnZhdHVyZUVuZGluZ1xuXHRcdH07XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gblRyYWNrczsgKytpKSB7XG5cdFx0XHRjb25zdCBpbnRlcnBvbGFudCA9IHRyYWNrc1tpXS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTtcblx0XHRcdGludGVycG9sYW50c1tpXSA9IGludGVycG9sYW50O1xuXHRcdFx0aW50ZXJwb2xhbnQuc2V0dGluZ3MgPSBpbnRlcnBvbGFudFNldHRpbmdzO1xuXHRcdH1cblxuXHRcdHRoaXMuX2ludGVycG9sYW50U2V0dGluZ3MgPSBpbnRlcnBvbGFudFNldHRpbmdzO1xuXHRcdHRoaXMuX2ludGVycG9sYW50cyA9IGludGVycG9sYW50czsgLy8gYm91bmQgYnkgdGhlIG1peGVyXG5cdFx0Ly8gaW5zaWRlOiBQcm9wZXJ0eU1peGVyIChtYW5hZ2VkIGJ5IHRoZSBtaXhlcilcblxuXHRcdHRoaXMuX3Byb3BlcnR5QmluZGluZ3MgPSBuZXcgQXJyYXkoblRyYWNrcyk7XG5cdFx0dGhpcy5fY2FjaGVJbmRleCA9IG51bGw7IC8vIGZvciB0aGUgbWVtb3J5IG1hbmFnZXJcblxuXHRcdHRoaXMuX2J5Q2xpcENhY2hlSW5kZXggPSBudWxsOyAvLyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VyXG5cblx0XHR0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCA9IG51bGw7XG5cdFx0dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBudWxsO1xuXHRcdHRoaXMubG9vcCA9IExvb3BSZXBlYXQ7XG5cdFx0dGhpcy5fbG9vcENvdW50ID0gLTE7IC8vIGdsb2JhbCBtaXhlciB0aW1lIHdoZW4gdGhlIGFjdGlvbiBpcyB0byBiZSBzdGFydGVkXG5cdFx0Ly8gaXQncyBzZXQgYmFjayB0byAnbnVsbCcgdXBvbiBzdGFydCBvZiB0aGUgYWN0aW9uXG5cblx0XHR0aGlzLl9zdGFydFRpbWUgPSBudWxsOyAvLyBzY2FsZWQgbG9jYWwgdGltZSBvZiB0aGUgYWN0aW9uXG5cdFx0Ly8gZ2V0cyBjbGFtcGVkIG9yIHdyYXBwZWQgdG8gMC4uY2xpcC5kdXJhdGlvbiBhY2NvcmRpbmcgdG8gbG9vcFxuXG5cdFx0dGhpcy50aW1lID0gMDtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IDE7XG5cdFx0dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlID0gMTtcblx0XHR0aGlzLndlaWdodCA9IDE7XG5cdFx0dGhpcy5fZWZmZWN0aXZlV2VpZ2h0ID0gMTtcblx0XHR0aGlzLnJlcGV0aXRpb25zID0gSW5maW5pdHk7IC8vIG5vLiBvZiByZXBldGl0aW9ucyB3aGVuIGxvb3BpbmdcblxuXHRcdHRoaXMucGF1c2VkID0gZmFsc2U7IC8vIHRydWUgLT4gemVybyBlZmZlY3RpdmUgdGltZSBzY2FsZVxuXG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTsgLy8gZmFsc2UgLT4gemVybyBlZmZlY3RpdmUgd2VpZ2h0XG5cblx0XHR0aGlzLmNsYW1wV2hlbkZpbmlzaGVkID0gZmFsc2U7IC8vIGtlZXAgZmVlZGluZyB0aGUgbGFzdCBmcmFtZT9cblxuXHRcdHRoaXMuemVyb1Nsb3BlQXRTdGFydCA9IHRydWU7IC8vIGZvciBzbW9vdGggaW50ZXJwb2xhdGlvbiB3L28gc2VwYXJhdGVcblxuXHRcdHRoaXMuemVyb1Nsb3BlQXRFbmQgPSB0cnVlOyAvLyBjbGlwcyBmb3Igc3RhcnQsIGxvb3AgYW5kIGVuZFxuXHR9IC8vIFN0YXRlICYgU2NoZWR1bGluZ1xuXG5cblx0cGxheSgpIHtcblx0XHR0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0dGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNldCgpO1xuXHR9XG5cblx0cmVzZXQoKSB7XG5cdFx0dGhpcy5wYXVzZWQgPSBmYWxzZTtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMudGltZSA9IDA7IC8vIHJlc3RhcnQgY2xpcFxuXG5cdFx0dGhpcy5fbG9vcENvdW50ID0gLTE7IC8vIGZvcmdldCBwcmV2aW91cyBsb29wc1xuXG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDsgLy8gZm9yZ2V0IHNjaGVkdWxpbmdcblxuXHRcdHJldHVybiB0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpO1xuXHR9XG5cblx0aXNSdW5uaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVuYWJsZWQgJiYgIXRoaXMucGF1c2VkICYmIHRoaXMudGltZVNjYWxlICE9PSAwICYmIHRoaXMuX3N0YXJ0VGltZSA9PT0gbnVsbCAmJiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyk7XG5cdH0gLy8gcmV0dXJuIHRydWUgd2hlbiBwbGF5IGhhcyBiZWVuIGNhbGxlZFxuXG5cblx0aXNTY2hlZHVsZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKTtcblx0fVxuXG5cdHN0YXJ0QXQodGltZSkge1xuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IHRpbWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRMb29wKG1vZGUsIHJlcGV0aXRpb25zKSB7XG5cdFx0dGhpcy5sb29wID0gbW9kZTtcblx0XHR0aGlzLnJlcGV0aXRpb25zID0gcmVwZXRpdGlvbnM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gV2VpZ2h0XG5cdC8vIHNldCB0aGUgd2VpZ2h0IHN0b3BwaW5nIGFueSBzY2hlZHVsZWQgZmFkaW5nXG5cdC8vIGFsdGhvdWdoIC5lbmFibGVkID0gZmFsc2UgeWllbGRzIGFuIGVmZmVjdGl2ZSB3ZWlnaHQgb2YgemVybywgdGhpc1xuXHQvLyBtZXRob2QgZG9lcyAqbm90KiBjaGFuZ2UgLmVuYWJsZWQsIGJlY2F1c2UgaXQgd291bGQgYmUgY29uZnVzaW5nXG5cblxuXHRzZXRFZmZlY3RpdmVXZWlnaHQod2VpZ2h0KSB7XG5cdFx0dGhpcy53ZWlnaHQgPSB3ZWlnaHQ7IC8vIG5vdGU6IHNhbWUgbG9naWMgYXMgd2hlbiB1cGRhdGVkIGF0IHJ1bnRpbWVcblxuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IHRoaXMuZW5hYmxlZCA/IHdlaWdodCA6IDA7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpO1xuXHR9IC8vIHJldHVybiB0aGUgd2VpZ2h0IGNvbnNpZGVyaW5nIGZhZGluZyBhbmQgLmVuYWJsZWRcblxuXG5cdGdldEVmZmVjdGl2ZVdlaWdodCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0O1xuXHR9XG5cblx0ZmFkZUluKGR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGR1cmF0aW9uLCAwLCAxKTtcblx0fVxuXG5cdGZhZGVPdXQoZHVyYXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcoZHVyYXRpb24sIDEsIDApO1xuXHR9XG5cblx0Y3Jvc3NGYWRlRnJvbShmYWRlT3V0QWN0aW9uLCBkdXJhdGlvbiwgd2FycCkge1xuXHRcdGZhZGVPdXRBY3Rpb24uZmFkZU91dChkdXJhdGlvbik7XG5cdFx0dGhpcy5mYWRlSW4oZHVyYXRpb24pO1xuXG5cdFx0aWYgKHdhcnApIHtcblx0XHRcdGNvbnN0IGZhZGVJbkR1cmF0aW9uID0gdGhpcy5fY2xpcC5kdXJhdGlvbixcblx0XHRcdFx0XHRcdGZhZGVPdXREdXJhdGlvbiA9IGZhZGVPdXRBY3Rpb24uX2NsaXAuZHVyYXRpb24sXG5cdFx0XHRcdFx0XHRzdGFydEVuZFJhdGlvID0gZmFkZU91dER1cmF0aW9uIC8gZmFkZUluRHVyYXRpb24sXG5cdFx0XHRcdFx0XHRlbmRTdGFydFJhdGlvID0gZmFkZUluRHVyYXRpb24gLyBmYWRlT3V0RHVyYXRpb247XG5cdFx0XHRmYWRlT3V0QWN0aW9uLndhcnAoMS4wLCBzdGFydEVuZFJhdGlvLCBkdXJhdGlvbik7XG5cdFx0XHR0aGlzLndhcnAoZW5kU3RhcnRSYXRpbywgMS4wLCBkdXJhdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjcm9zc0ZhZGVUbyhmYWRlSW5BY3Rpb24sIGR1cmF0aW9uLCB3YXJwKSB7XG5cdFx0cmV0dXJuIGZhZGVJbkFjdGlvbi5jcm9zc0ZhZGVGcm9tKHRoaXMsIGR1cmF0aW9uLCB3YXJwKTtcblx0fVxuXG5cdHN0b3BGYWRpbmcoKSB7XG5cdFx0Y29uc3Qgd2VpZ2h0SW50ZXJwb2xhbnQgPSB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtcblxuXHRcdGlmICh3ZWlnaHRJbnRlcnBvbGFudCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBudWxsO1xuXG5cdFx0XHR0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQod2VpZ2h0SW50ZXJwb2xhbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIFRpbWUgU2NhbGUgQ29udHJvbFxuXHQvLyBzZXQgdGhlIHRpbWUgc2NhbGUgc3RvcHBpbmcgYW55IHNjaGVkdWxlZCB3YXJwaW5nXG5cdC8vIGFsdGhvdWdoIC5wYXVzZWQgPSB0cnVlIHlpZWxkcyBhbiBlZmZlY3RpdmUgdGltZSBzY2FsZSBvZiB6ZXJvLCB0aGlzXG5cdC8vIG1ldGhvZCBkb2VzICpub3QqIGNoYW5nZSAucGF1c2VkLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGNvbmZ1c2luZ1xuXG5cblx0c2V0RWZmZWN0aXZlVGltZVNjYWxlKHRpbWVTY2FsZSkge1xuXHRcdHRoaXMudGltZVNjYWxlID0gdGltZVNjYWxlO1xuXHRcdHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSA9IHRoaXMucGF1c2VkID8gMCA6IHRpbWVTY2FsZTtcblx0XHRyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpO1xuXHR9IC8vIHJldHVybiB0aGUgdGltZSBzY2FsZSBjb25zaWRlcmluZyB3YXJwaW5nIGFuZCAucGF1c2VkXG5cblxuXHRnZXRFZmZlY3RpdmVUaW1lU2NhbGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZTtcblx0fVxuXG5cdHNldER1cmF0aW9uKGR1cmF0aW9uKSB7XG5cdFx0dGhpcy50aW1lU2NhbGUgPSB0aGlzLl9jbGlwLmR1cmF0aW9uIC8gZHVyYXRpb247XG5cdFx0cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKTtcblx0fVxuXG5cdHN5bmNXaXRoKGFjdGlvbikge1xuXHRcdHRoaXMudGltZSA9IGFjdGlvbi50aW1lO1xuXHRcdHRoaXMudGltZVNjYWxlID0gYWN0aW9uLnRpbWVTY2FsZTtcblx0XHRyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpO1xuXHR9XG5cblx0aGFsdChkdXJhdGlvbikge1xuXHRcdHJldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLCAwLCBkdXJhdGlvbik7XG5cdH1cblxuXHR3YXJwKHN0YXJ0VGltZVNjYWxlLCBlbmRUaW1lU2NhbGUsIGR1cmF0aW9uKSB7XG5cdFx0Y29uc3QgbWl4ZXIgPSB0aGlzLl9taXhlcixcblx0XHRcdFx0XHRub3cgPSBtaXhlci50aW1lLFxuXHRcdFx0XHRcdHRpbWVTY2FsZSA9IHRoaXMudGltZVNjYWxlO1xuXHRcdGxldCBpbnRlcnBvbGFudCA9IHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O1xuXG5cdFx0aWYgKGludGVycG9sYW50ID09PSBudWxsKSB7XG5cdFx0XHRpbnRlcnBvbGFudCA9IG1peGVyLl9sZW5kQ29udHJvbEludGVycG9sYW50KCk7XG5cdFx0XHR0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCA9IGludGVycG9sYW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IHRpbWVzID0gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGludGVycG9sYW50LnNhbXBsZVZhbHVlcztcblx0XHR0aW1lc1swXSA9IG5vdztcblx0XHR0aW1lc1sxXSA9IG5vdyArIGR1cmF0aW9uO1xuXHRcdHZhbHVlc1swXSA9IHN0YXJ0VGltZVNjYWxlIC8gdGltZVNjYWxlO1xuXHRcdHZhbHVlc1sxXSA9IGVuZFRpbWVTY2FsZSAvIHRpbWVTY2FsZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3BXYXJwaW5nKCkge1xuXHRcdGNvbnN0IHRpbWVTY2FsZUludGVycG9sYW50ID0gdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7XG5cblx0XHRpZiAodGltZVNjYWxlSW50ZXJwb2xhbnQgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50ID0gbnVsbDtcblxuXHRcdFx0dGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHRpbWVTY2FsZUludGVycG9sYW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyBPYmplY3QgQWNjZXNzb3JzXG5cblxuXHRnZXRNaXhlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fbWl4ZXI7XG5cdH1cblxuXHRnZXRDbGlwKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGlwO1xuXHR9XG5cblx0Z2V0Um9vdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxSb290IHx8IHRoaXMuX21peGVyLl9yb290O1xuXHR9IC8vIEludGVybmFcblxuXG5cdF91cGRhdGUodGltZSwgZGVsdGFUaW1lLCB0aW1lRGlyZWN0aW9uLCBhY2N1SW5kZXgpIHtcblx0XHQvLyBjYWxsZWQgYnkgdGhlIG1peGVyXG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdC8vIGNhbGwgLl91cGRhdGVXZWlnaHQoKSB0byB1cGRhdGUgLl9lZmZlY3RpdmVXZWlnaHRcblx0XHRcdHRoaXMuX3VwZGF0ZVdlaWdodCh0aW1lKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTtcblxuXHRcdGlmIChzdGFydFRpbWUgIT09IG51bGwpIHtcblx0XHRcdC8vIGNoZWNrIGZvciBzY2hlZHVsZWQgc3RhcnQgb2YgYWN0aW9uXG5cdFx0XHRjb25zdCB0aW1lUnVubmluZyA9ICh0aW1lIC0gc3RhcnRUaW1lKSAqIHRpbWVEaXJlY3Rpb247XG5cblx0XHRcdGlmICh0aW1lUnVubmluZyA8IDAgfHwgdGltZURpcmVjdGlvbiA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm47IC8vIHlldCB0byBjb21lIC8gZG9uJ3QgZGVjaWRlIHdoZW4gZGVsdGEgPSAwXG5cdFx0XHR9IC8vIHN0YXJ0XG5cblxuXHRcdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDsgLy8gdW5zY2hlZHVsZVxuXG5cdFx0XHRkZWx0YVRpbWUgPSB0aW1lRGlyZWN0aW9uICogdGltZVJ1bm5pbmc7XG5cdFx0fSAvLyBhcHBseSB0aW1lIHNjYWxlIGFuZCBhZHZhbmNlIHRpbWVcblxuXG5cdFx0ZGVsdGFUaW1lICo9IHRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0aW1lKTtcblxuXHRcdGNvbnN0IGNsaXBUaW1lID0gdGhpcy5fdXBkYXRlVGltZShkZWx0YVRpbWUpOyAvLyBub3RlOiBfdXBkYXRlVGltZSBtYXkgZGlzYWJsZSB0aGUgYWN0aW9uIHJlc3VsdGluZyBpblxuXHRcdC8vIGFuIGVmZmVjdGl2ZSB3ZWlnaHQgb2YgMFxuXG5cblx0XHRjb25zdCB3ZWlnaHQgPSB0aGlzLl91cGRhdGVXZWlnaHQodGltZSk7XG5cblx0XHRpZiAod2VpZ2h0ID4gMCkge1xuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnRzID0gdGhpcy5faW50ZXJwb2xhbnRzO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlNaXhlcnMgPSB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuYmxlbmRNb2RlKSB7XG5cdFx0XHRcdGNhc2UgQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBpbnRlcnBvbGFudHMubGVuZ3RoOyBqICE9PSBtOyArK2opIHtcblx0XHRcdFx0XHRcdGludGVycG9sYW50c1tqXS5ldmFsdWF0ZShjbGlwVGltZSk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU1peGVyc1tqXS5hY2N1bXVsYXRlQWRkaXRpdmUod2VpZ2h0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMCwgbSA9IGludGVycG9sYW50cy5sZW5ndGg7IGogIT09IG07ICsraikge1xuXHRcdFx0XHRcdFx0aW50ZXJwb2xhbnRzW2pdLmV2YWx1YXRlKGNsaXBUaW1lKTtcblx0XHRcdFx0XHRcdHByb3BlcnR5TWl4ZXJzW2pdLmFjY3VtdWxhdGUoYWNjdUluZGV4LCB3ZWlnaHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVXZWlnaHQodGltZSkge1xuXHRcdGxldCB3ZWlnaHQgPSAwO1xuXG5cdFx0aWYgKHRoaXMuZW5hYmxlZCkge1xuXHRcdFx0d2VpZ2h0ID0gdGhpcy53ZWlnaHQ7XG5cdFx0XHRjb25zdCBpbnRlcnBvbGFudCA9IHRoaXMuX3dlaWdodEludGVycG9sYW50O1xuXG5cdFx0XHRpZiAoaW50ZXJwb2xhbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgaW50ZXJwb2xhbnRWYWx1ZSA9IGludGVycG9sYW50LmV2YWx1YXRlKHRpbWUpWzBdO1xuXHRcdFx0XHR3ZWlnaHQgKj0gaW50ZXJwb2xhbnRWYWx1ZTtcblxuXHRcdFx0XHRpZiAodGltZSA+IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9uc1sxXSkge1xuXHRcdFx0XHRcdHRoaXMuc3RvcEZhZGluZygpO1xuXG5cdFx0XHRcdFx0aWYgKGludGVycG9sYW50VmFsdWUgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIGZhZGVkIG91dCwgZGlzYWJsZVxuXHRcdFx0XHRcdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fZWZmZWN0aXZlV2VpZ2h0ID0gd2VpZ2h0O1xuXHRcdHJldHVybiB3ZWlnaHQ7XG5cdH1cblxuXHRfdXBkYXRlVGltZVNjYWxlKHRpbWUpIHtcblx0XHRsZXQgdGltZVNjYWxlID0gMDtcblxuXHRcdGlmICghdGhpcy5wYXVzZWQpIHtcblx0XHRcdHRpbWVTY2FsZSA9IHRoaXMudGltZVNjYWxlO1xuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtcblxuXHRcdFx0aWYgKGludGVycG9sYW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IGludGVycG9sYW50VmFsdWUgPSBpbnRlcnBvbGFudC5ldmFsdWF0ZSh0aW1lKVswXTtcblx0XHRcdFx0dGltZVNjYWxlICo9IGludGVycG9sYW50VmFsdWU7XG5cblx0XHRcdFx0aWYgKHRpbWUgPiBpbnRlcnBvbGFudC5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0pIHtcblx0XHRcdFx0XHR0aGlzLnN0b3BXYXJwaW5nKCk7XG5cblx0XHRcdFx0XHRpZiAodGltZVNjYWxlID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBtb3Rpb24gaGFzIGhhbHRlZCwgcGF1c2Vcblx0XHRcdFx0XHRcdHRoaXMucGF1c2VkID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gd2FycCBkb25lIC0gYXBwbHkgZmluYWwgdGltZSBzY2FsZVxuXHRcdFx0XHRcdFx0dGhpcy50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlID0gdGltZVNjYWxlO1xuXHRcdHJldHVybiB0aW1lU2NhbGU7XG5cdH1cblxuXHRfdXBkYXRlVGltZShkZWx0YVRpbWUpIHtcblx0XHRjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2NsaXAuZHVyYXRpb247XG5cdFx0Y29uc3QgbG9vcCA9IHRoaXMubG9vcDtcblx0XHRsZXQgdGltZSA9IHRoaXMudGltZSArIGRlbHRhVGltZTtcblx0XHRsZXQgbG9vcENvdW50ID0gdGhpcy5fbG9vcENvdW50O1xuXHRcdGNvbnN0IHBpbmdQb25nID0gbG9vcCA9PT0gTG9vcFBpbmdQb25nO1xuXG5cdFx0aWYgKGRlbHRhVGltZSA9PT0gMCkge1xuXHRcdFx0aWYgKGxvb3BDb3VudCA9PT0gLTEpIHJldHVybiB0aW1lO1xuXHRcdFx0cmV0dXJuIHBpbmdQb25nICYmIChsb29wQ291bnQgJiAxKSA9PT0gMSA/IGR1cmF0aW9uIC0gdGltZSA6IHRpbWU7XG5cdFx0fVxuXG5cdFx0aWYgKGxvb3AgPT09IExvb3BPbmNlKSB7XG5cdFx0XHRpZiAobG9vcENvdW50ID09PSAtMSkge1xuXHRcdFx0XHQvLyBqdXN0IHN0YXJ0ZWRcblx0XHRcdFx0dGhpcy5fbG9vcENvdW50ID0gMDtcblxuXHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKHRydWUsIHRydWUsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlX3N0b3A6IHtcblx0XHRcdFx0aWYgKHRpbWUgPj0gZHVyYXRpb24pIHtcblx0XHRcdFx0XHR0aW1lID0gZHVyYXRpb247XG5cdFx0XHRcdH0gZWxzZSBpZiAodGltZSA8IDApIHtcblx0XHRcdFx0XHR0aW1lID0gMDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXHRcdFx0XHRcdGJyZWFrIGhhbmRsZV9zdG9wO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuY2xhbXBXaGVuRmluaXNoZWQpIHRoaXMucGF1c2VkID0gdHJ1ZTtlbHNlIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHRcdHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaW5pc2hlZCcsXG5cdFx0XHRcdFx0YWN0aW9uOiB0aGlzLFxuXHRcdFx0XHRcdGRpcmVjdGlvbjogZGVsdGFUaW1lIDwgMCA/IC0xIDogMVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcmVwZXRpdGl2ZSBSZXBlYXQgb3IgUGluZ1Bvbmdcblx0XHRcdGlmIChsb29wQ291bnQgPT09IC0xKSB7XG5cdFx0XHRcdC8vIGp1c3Qgc3RhcnRlZFxuXHRcdFx0XHRpZiAoZGVsdGFUaW1lID49IDApIHtcblx0XHRcdFx0XHRsb29wQ291bnQgPSAwO1xuXG5cdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyh0cnVlLCB0aGlzLnJlcGV0aXRpb25zID09PSAwLCBwaW5nUG9uZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBsb29waW5nIGluIHJldmVyc2UgZGlyZWN0aW9uLCB0aGUgaW5pdGlhbFxuXHRcdFx0XHRcdC8vIHRyYW5zaXRpb24gdGhyb3VnaCB6ZXJvIGNvdW50cyBhcyBhIHJlcGV0aXRpb24sXG5cdFx0XHRcdFx0Ly8gc28gbGVhdmUgbG9vcENvdW50IGF0IC0xXG5cdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zID09PSAwLCB0cnVlLCBwaW5nUG9uZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRpbWUgPj0gZHVyYXRpb24gfHwgdGltZSA8IDApIHtcblx0XHRcdFx0Ly8gd3JhcCBhcm91bmRcblx0XHRcdFx0Y29uc3QgbG9vcERlbHRhID0gTWF0aC5mbG9vcih0aW1lIC8gZHVyYXRpb24pOyAvLyBzaWduZWRcblxuXHRcdFx0XHR0aW1lIC09IGR1cmF0aW9uICogbG9vcERlbHRhO1xuXHRcdFx0XHRsb29wQ291bnQgKz0gTWF0aC5hYnMobG9vcERlbHRhKTtcblx0XHRcdFx0Y29uc3QgcGVuZGluZyA9IHRoaXMucmVwZXRpdGlvbnMgLSBsb29wQ291bnQ7XG5cblx0XHRcdFx0aWYgKHBlbmRpbmcgPD0gMCkge1xuXHRcdFx0XHRcdC8vIGhhdmUgdG8gc3RvcCAoc3dpdGNoIHN0YXRlLCBjbGFtcCB0aW1lLCBmaXJlIGV2ZW50KVxuXHRcdFx0XHRcdGlmICh0aGlzLmNsYW1wV2hlbkZpbmlzaGVkKSB0aGlzLnBhdXNlZCA9IHRydWU7ZWxzZSB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lID0gZGVsdGFUaW1lID4gMCA/IGR1cmF0aW9uIDogMDtcblx0XHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHRcdFx0dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnZmluaXNoZWQnLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiB0aGlzLFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkZWx0YVRpbWUgPiAwID8gMSA6IC0xXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8ga2VlcCBydW5uaW5nXG5cdFx0XHRcdFx0aWYgKHBlbmRpbmcgPT09IDEpIHtcblx0XHRcdFx0XHRcdC8vIGVudGVyaW5nIHRoZSBsYXN0IHJvdW5kXG5cdFx0XHRcdFx0XHRjb25zdCBhdFN0YXJ0ID0gZGVsdGFUaW1lIDwgMDtcblxuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyhhdFN0YXJ0LCAhYXRTdGFydCwgcGluZ1BvbmcpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKGZhbHNlLCBmYWxzZSwgcGluZ1BvbmcpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuX2xvb3BDb3VudCA9IGxvb3BDb3VudDtcblx0XHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHRcdFx0dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnbG9vcCcsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHRoaXMsXG5cdFx0XHRcdFx0XHRsb29wRGVsdGE6IGxvb3BEZWx0YVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGluZ1BvbmcgJiYgKGxvb3BDb3VudCAmIDEpID09PSAxKSB7XG5cdFx0XHRcdC8vIGludmVydCB0aW1lIGZvciB0aGUgXCJwb25nIHJvdW5kXCJcblx0XHRcdFx0cmV0dXJuIGR1cmF0aW9uIC0gdGltZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZTtcblx0fVxuXG5cdF9zZXRFbmRpbmdzKGF0U3RhcnQsIGF0RW5kLCBwaW5nUG9uZykge1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztcblxuXHRcdGlmIChwaW5nUG9uZykge1xuXHRcdFx0c2V0dGluZ3MuZW5kaW5nU3RhcnQgPSBaZXJvU2xvcGVFbmRpbmc7XG5cdFx0XHRzZXR0aW5ncy5lbmRpbmdFbmQgPSBaZXJvU2xvcGVFbmRpbmc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGFzc3VtaW5nIGZvciBMb29wT25jZSBhdFN0YXJ0ID09IGF0RW5kID09IHRydWVcblx0XHRcdGlmIChhdFN0YXJ0KSB7XG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gdGhpcy56ZXJvU2xvcGVBdFN0YXJ0ID8gWmVyb1Nsb3BlRW5kaW5nIDogWmVyb0N1cnZhdHVyZUVuZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gV3JhcEFyb3VuZEVuZGluZztcblx0XHRcdH1cblxuXHRcdFx0aWYgKGF0RW5kKSB7XG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ0VuZCA9IHRoaXMuemVyb1Nsb3BlQXRFbmQgPyBaZXJvU2xvcGVFbmRpbmcgOiBaZXJvQ3VydmF0dXJlRW5kaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0dGluZ3MuZW5kaW5nRW5kID0gV3JhcEFyb3VuZEVuZGluZztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfc2NoZWR1bGVGYWRpbmcoZHVyYXRpb24sIHdlaWdodE5vdywgd2VpZ2h0VGhlbikge1xuXHRcdGNvbnN0IG1peGVyID0gdGhpcy5fbWl4ZXIsXG5cdFx0XHRcdFx0bm93ID0gbWl4ZXIudGltZTtcblx0XHRsZXQgaW50ZXJwb2xhbnQgPSB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtcblxuXHRcdGlmIChpbnRlcnBvbGFudCA9PT0gbnVsbCkge1xuXHRcdFx0aW50ZXJwb2xhbnQgPSBtaXhlci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpO1xuXHRcdFx0dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudDtcblx0XHR9XG5cblx0XHRjb25zdCB0aW1lcyA9IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBpbnRlcnBvbGFudC5zYW1wbGVWYWx1ZXM7XG5cdFx0dGltZXNbMF0gPSBub3c7XG5cdFx0dmFsdWVzWzBdID0gd2VpZ2h0Tm93O1xuXHRcdHRpbWVzWzFdID0gbm93ICsgZHVyYXRpb247XG5cdFx0dmFsdWVzWzFdID0gd2VpZ2h0VGhlbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIEFuaW1hdGlvbk1peGVyIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblx0Y29uc3RydWN0b3Iocm9vdCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fcm9vdCA9IHJvb3Q7XG5cblx0XHR0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpO1xuXG5cdFx0dGhpcy5fYWNjdUluZGV4ID0gMDtcblx0XHR0aGlzLnRpbWUgPSAwO1xuXHRcdHRoaXMudGltZVNjYWxlID0gMS4wO1xuXHR9XG5cblx0X2JpbmRBY3Rpb24oYWN0aW9uLCBwcm90b3R5cGVBY3Rpb24pIHtcblx0XHRjb25zdCByb290ID0gYWN0aW9uLl9sb2NhbFJvb3QgfHwgdGhpcy5fcm9vdCxcblx0XHRcdFx0XHR0cmFja3MgPSBhY3Rpb24uX2NsaXAudHJhY2tzLFxuXHRcdFx0XHRcdG5UcmFja3MgPSB0cmFja3MubGVuZ3RoLFxuXHRcdFx0XHRcdGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzLFxuXHRcdFx0XHRcdGludGVycG9sYW50cyA9IGFjdGlvbi5faW50ZXJwb2xhbnRzLFxuXHRcdFx0XHRcdHJvb3RVdWlkID0gcm9vdC51dWlkLFxuXHRcdFx0XHRcdGJpbmRpbmdzQnlSb290ID0gdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lO1xuXHRcdGxldCBiaW5kaW5nc0J5TmFtZSA9IGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXTtcblxuXHRcdGlmIChiaW5kaW5nc0J5TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRiaW5kaW5nc0J5TmFtZSA9IHt9O1xuXHRcdFx0YmluZGluZ3NCeVJvb3Rbcm9vdFV1aWRdID0gYmluZGluZ3NCeU5hbWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG5UcmFja3M7ICsraSkge1xuXHRcdFx0Y29uc3QgdHJhY2sgPSB0cmFja3NbaV0sXG5cdFx0XHRcdFx0XHR0cmFja05hbWUgPSB0cmFjay5uYW1lO1xuXHRcdFx0bGV0IGJpbmRpbmcgPSBiaW5kaW5nc0J5TmFtZVt0cmFja05hbWVdO1xuXG5cdFx0XHRpZiAoYmluZGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdCsrYmluZGluZy5yZWZlcmVuY2VDb3VudDtcblx0XHRcdFx0YmluZGluZ3NbaV0gPSBiaW5kaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZyA9IGJpbmRpbmdzW2ldO1xuXG5cdFx0XHRcdGlmIChiaW5kaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBleGlzdGluZyBiaW5kaW5nLCBtYWtlIHN1cmUgdGhlIGNhY2hlIGtub3dzXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcuX2NhY2hlSW5kZXggPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdCsrYmluZGluZy5yZWZlcmVuY2VDb3VudDtcblxuXHRcdFx0XHRcdFx0dGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcsIHJvb3RVdWlkLCB0cmFja05hbWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IHByb3RvdHlwZUFjdGlvbiAmJiBwcm90b3R5cGVBY3Rpb24uX3Byb3BlcnR5QmluZGluZ3NbaV0uYmluZGluZy5wYXJzZWRQYXRoO1xuXHRcdFx0XHRiaW5kaW5nID0gbmV3IFByb3BlcnR5TWl4ZXIoUHJvcGVydHlCaW5kaW5nLmNyZWF0ZShyb290LCB0cmFja05hbWUsIHBhdGgpLCB0cmFjay5WYWx1ZVR5cGVOYW1lLCB0cmFjay5nZXRWYWx1ZVNpemUoKSk7XG5cdFx0XHRcdCsrYmluZGluZy5yZWZlcmVuY2VDb3VudDtcblxuXHRcdFx0XHR0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoYmluZGluZywgcm9vdFV1aWQsIHRyYWNrTmFtZSk7XG5cblx0XHRcdFx0YmluZGluZ3NbaV0gPSBiaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRpbnRlcnBvbGFudHNbaV0ucmVzdWx0QnVmZmVyID0gYmluZGluZy5idWZmZXI7XG5cdFx0fVxuXHR9XG5cblx0X2FjdGl2YXRlQWN0aW9uKGFjdGlvbikge1xuXHRcdGlmICghdGhpcy5faXNBY3RpdmVBY3Rpb24oYWN0aW9uKSkge1xuXHRcdFx0aWYgKGFjdGlvbi5fY2FjaGVJbmRleCA9PT0gbnVsbCkge1xuXHRcdFx0XHQvLyB0aGlzIGFjdGlvbiBoYXMgYmVlbiBmb3Jnb3R0ZW4gYnkgdGhlIGNhY2hlLCBidXQgdGhlIHVzZXJcblx0XHRcdFx0Ly8gYXBwZWFycyB0byBiZSBzdGlsbCB1c2luZyBpdCAtPiByZWJpbmRcblx0XHRcdFx0Y29uc3Qgcm9vdFV1aWQgPSAoYWN0aW9uLl9sb2NhbFJvb3QgfHwgdGhpcy5fcm9vdCkudXVpZCxcblx0XHRcdFx0XHRcdFx0Y2xpcFV1aWQgPSBhY3Rpb24uX2NsaXAudXVpZCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uc0ZvckNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwW2NsaXBVdWlkXTtcblxuXHRcdFx0XHR0aGlzLl9iaW5kQWN0aW9uKGFjdGlvbiwgYWN0aW9uc0ZvckNsaXAgJiYgYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zWzBdKTtcblxuXHRcdFx0XHR0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihhY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzOyAvLyBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cyAvIHNvcnQgb3V0IHN0YXRlXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2ldO1xuXG5cdFx0XHRcdGlmIChiaW5kaW5nLnVzZUNvdW50KysgPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLl9sZW5kQmluZGluZyhiaW5kaW5nKTtcblxuXHRcdFx0XHRcdGJpbmRpbmcuc2F2ZU9yaWdpbmFsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9sZW5kQWN0aW9uKGFjdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0X2RlYWN0aXZhdGVBY3Rpb24oYWN0aW9uKSB7XG5cdFx0aWYgKHRoaXMuX2lzQWN0aXZlQWN0aW9uKGFjdGlvbikpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzOyAvLyBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cyAvIHNvcnQgb3V0IHN0YXRlXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2ldO1xuXG5cdFx0XHRcdGlmICgtLWJpbmRpbmcudXNlQ291bnQgPT09IDApIHtcblx0XHRcdFx0XHRiaW5kaW5nLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCk7XG5cblx0XHRcdFx0XHR0aGlzLl90YWtlQmFja0JpbmRpbmcoYmluZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fdGFrZUJhY2tBY3Rpb24oYWN0aW9uKTtcblx0XHR9XG5cdH0gLy8gTWVtb3J5IG1hbmFnZXJcblxuXG5cdF9pbml0TWVtb3J5TWFuYWdlcigpIHtcblx0XHR0aGlzLl9hY3Rpb25zID0gW107IC8vICduQWN0aXZlQWN0aW9ucycgZm9sbG93ZWQgYnkgaW5hY3RpdmUgb25lc1xuXG5cdFx0dGhpcy5fbkFjdGl2ZUFjdGlvbnMgPSAwO1xuXHRcdHRoaXMuX2FjdGlvbnNCeUNsaXAgPSB7fTsgLy8gaW5zaWRlOlxuXHRcdC8vIHtcblx0XHQvLyBcdGtub3duQWN0aW9uczogQXJyYXk8IEFuaW1hdGlvbkFjdGlvbiA+IC0gdXNlZCBhcyBwcm90b3R5cGVzXG5cdFx0Ly8gXHRhY3Rpb25CeVJvb3Q6IEFuaW1hdGlvbkFjdGlvbiAtIGxvb2t1cFxuXHRcdC8vIH1cblxuXHRcdHRoaXMuX2JpbmRpbmdzID0gW107IC8vICduQWN0aXZlQmluZGluZ3MnIGZvbGxvd2VkIGJ5IGluYWN0aXZlIG9uZXNcblxuXHRcdHRoaXMuX25BY3RpdmVCaW5kaW5ncyA9IDA7XG5cdFx0dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lID0ge307IC8vIGluc2lkZTogTWFwPCBuYW1lLCBQcm9wZXJ0eU1peGVyID5cblxuXHRcdHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMgPSBbXTsgLy8gc2FtZSBnYW1lIGFzIGFib3ZlXG5cblx0XHR0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyA9IDA7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdHRoaXMuc3RhdHMgPSB7XG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGdldCB0b3RhbCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX2FjdGlvbnMubGVuZ3RoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVBY3Rpb25zO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cdFx0XHRiaW5kaW5nczoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9iaW5kaW5ncy5sZW5ndGg7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Z2V0IGluVXNlKCkge1xuXHRcdFx0XHRcdHJldHVybiBzY29wZS5fbkFjdGl2ZUJpbmRpbmdzO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cdFx0XHRjb250cm9sSW50ZXJwb2xhbnRzOiB7XG5cdFx0XHRcdGdldCB0b3RhbCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9O1xuXHR9IC8vIE1lbW9yeSBtYW5hZ2VtZW50IGZvciBBbmltYXRpb25BY3Rpb24gb2JqZWN0c1xuXG5cblx0X2lzQWN0aXZlQWN0aW9uKGFjdGlvbikge1xuXHRcdGNvbnN0IGluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4O1xuXHRcdHJldHVybiBpbmRleCAhPT0gbnVsbCAmJiBpbmRleCA8IHRoaXMuX25BY3RpdmVBY3Rpb25zO1xuXHR9XG5cblx0X2FkZEluYWN0aXZlQWN0aW9uKGFjdGlvbiwgY2xpcFV1aWQsIHJvb3RVdWlkKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXA7XG5cdFx0bGV0IGFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cblx0XHRpZiAoYWN0aW9uc0ZvckNsaXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YWN0aW9uc0ZvckNsaXAgPSB7XG5cdFx0XHRcdGtub3duQWN0aW9uczogW2FjdGlvbl0sXG5cdFx0XHRcdGFjdGlvbkJ5Um9vdDoge31cblx0XHRcdH07XG5cdFx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSAwO1xuXHRcdFx0YWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF0gPSBhY3Rpb25zRm9yQ2xpcDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qga25vd25BY3Rpb25zID0gYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zO1xuXHRcdFx0YWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4ID0ga25vd25BY3Rpb25zLmxlbmd0aDtcblx0XHRcdGtub3duQWN0aW9ucy5wdXNoKGFjdGlvbik7XG5cdFx0fVxuXG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gYWN0aW9ucy5sZW5ndGg7XG5cdFx0YWN0aW9ucy5wdXNoKGFjdGlvbik7XG5cdFx0YWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290W3Jvb3RVdWlkXSA9IGFjdGlvbjtcblx0fVxuXG5cdF9yZW1vdmVJbmFjdGl2ZUFjdGlvbihhY3Rpb24pIHtcblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdFx0XHRsYXN0SW5hY3RpdmVBY3Rpb24gPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdFx0Y2FjaGVJbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleDtcblx0XHRsYXN0SW5hY3RpdmVBY3Rpb24uX2NhY2hlSW5kZXggPSBjYWNoZUluZGV4O1xuXHRcdGFjdGlvbnNbY2FjaGVJbmRleF0gPSBsYXN0SW5hY3RpdmVBY3Rpb247XG5cdFx0YWN0aW9ucy5wb3AoKTtcblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBudWxsO1xuXHRcdGNvbnN0IGNsaXBVdWlkID0gYWN0aW9uLl9jbGlwLnV1aWQsXG5cdFx0XHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXAsXG5cdFx0XHRcdFx0YWN0aW9uc0ZvckNsaXAgPSBhY3Rpb25zQnlDbGlwW2NsaXBVdWlkXSxcblx0XHRcdFx0XHRrbm93bkFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zLFxuXHRcdFx0XHRcdGxhc3RLbm93bkFjdGlvbiA9IGtub3duQWN0aW9uc0ZvckNsaXBba25vd25BY3Rpb25zRm9yQ2xpcC5sZW5ndGggLSAxXSxcblx0XHRcdFx0XHRieUNsaXBDYWNoZUluZGV4ID0gYWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4O1xuXHRcdGxhc3RLbm93bkFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IGJ5Q2xpcENhY2hlSW5kZXg7XG5cdFx0a25vd25BY3Rpb25zRm9yQ2xpcFtieUNsaXBDYWNoZUluZGV4XSA9IGxhc3RLbm93bkFjdGlvbjtcblx0XHRrbm93bkFjdGlvbnNGb3JDbGlwLnBvcCgpO1xuXHRcdGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IG51bGw7XG5cdFx0Y29uc3QgYWN0aW9uQnlSb290ID0gYWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290LFxuXHRcdFx0XHRcdHJvb3RVdWlkID0gKGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QpLnV1aWQ7XG5cdFx0ZGVsZXRlIGFjdGlvbkJ5Um9vdFtyb290VXVpZF07XG5cblx0XHRpZiAoa25vd25BY3Rpb25zRm9yQ2xpcC5sZW5ndGggPT09IDApIHtcblx0XHRcdGRlbGV0ZSBhY3Rpb25zQnlDbGlwW2NsaXBVdWlkXTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGFjdGlvbik7XG5cdH1cblxuXHRfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihhY3Rpb24pIHtcblx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcblxuXHRcdFx0aWYgKC0tYmluZGluZy5yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYmluZGluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2xlbmRBY3Rpb24oYWN0aW9uKSB7XG5cdFx0Ly8gWyBhY3RpdmUgYWN0aW9ucyB8XHRpbmFjdGl2ZSBhY3Rpb25zXHRdXG5cdFx0Ly8gW1x0YWN0aXZlIGFjdGlvbnMgPnwgaW5hY3RpdmUgYWN0aW9ucyBdXG5cdFx0Ly9cdFx0XHRcdFx0XHRcdFx0IHNcdFx0XHRcdGFcblx0XHQvL1x0XHRcdFx0XHRcdFx0XHRcdDwtc3dhcC0+XG5cdFx0Ly9cdFx0XHRcdFx0XHRcdFx0IGFcdFx0XHRcdHNcblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdFx0XHRwcmV2SW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXgsXG5cdFx0XHRcdFx0bGFzdEFjdGl2ZUluZGV4ID0gdGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxcblx0XHRcdFx0XHRmaXJzdEluYWN0aXZlQWN0aW9uID0gYWN0aW9uc1tsYXN0QWN0aXZlSW5kZXhdO1xuXHRcdGFjdGlvbi5fY2FjaGVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcblx0XHRhY3Rpb25zW2xhc3RBY3RpdmVJbmRleF0gPSBhY3Rpb247XG5cdFx0Zmlyc3RJbmFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRhY3Rpb25zW3ByZXZJbmRleF0gPSBmaXJzdEluYWN0aXZlQWN0aW9uO1xuXHR9XG5cblx0X3Rha2VCYWNrQWN0aW9uKGFjdGlvbikge1xuXHRcdC8vIFtcdGFjdGl2ZSBhY3Rpb25zXHR8IGluYWN0aXZlIGFjdGlvbnMgXVxuXHRcdC8vIFsgYWN0aXZlIGFjdGlvbnMgfDwgaW5hY3RpdmUgYWN0aW9uc1x0XVxuXHRcdC8vXHRcdFx0XHRhXHRcdFx0XHRzXG5cdFx0Ly9cdFx0XHRcdCA8LXN3YXAtPlxuXHRcdC8vXHRcdFx0XHRzXHRcdFx0XHRhXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0cHJldkluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXHRcdFx0XHRcdGZpcnN0SW5hY3RpdmVJbmRleCA9IC0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsXG5cdFx0XHRcdFx0bGFzdEFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbZmlyc3RJbmFjdGl2ZUluZGV4XTtcblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0YWN0aW9uc1tmaXJzdEluYWN0aXZlSW5kZXhdID0gYWN0aW9uO1xuXHRcdGxhc3RBY3RpdmVBY3Rpb24uX2NhY2hlSW5kZXggPSBwcmV2SW5kZXg7XG5cdFx0YWN0aW9uc1twcmV2SW5kZXhdID0gbGFzdEFjdGl2ZUFjdGlvbjtcblx0fSAvLyBNZW1vcnkgbWFuYWdlbWVudCBmb3IgUHJvcGVydHlNaXhlciBvYmplY3RzXG5cblxuXHRfYWRkSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcsIHJvb3RVdWlkLCB0cmFja05hbWUpIHtcblx0XHRjb25zdCBiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxcblx0XHRcdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXHRcdGxldCBiaW5kaW5nQnlOYW1lID0gYmluZGluZ3NCeVJvb3Rbcm9vdFV1aWRdO1xuXG5cdFx0aWYgKGJpbmRpbmdCeU5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YmluZGluZ0J5TmFtZSA9IHt9O1xuXHRcdFx0YmluZGluZ3NCeVJvb3Rbcm9vdFV1aWRdID0gYmluZGluZ0J5TmFtZTtcblx0XHR9XG5cblx0XHRiaW5kaW5nQnlOYW1lW3RyYWNrTmFtZV0gPSBiaW5kaW5nO1xuXHRcdGJpbmRpbmcuX2NhY2hlSW5kZXggPSBiaW5kaW5ncy5sZW5ndGg7XG5cdFx0YmluZGluZ3MucHVzaChiaW5kaW5nKTtcblx0fVxuXG5cdF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYmluZGluZykge1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRcdFx0cHJvcEJpbmRpbmcgPSBiaW5kaW5nLmJpbmRpbmcsXG5cdFx0XHRcdFx0cm9vdFV1aWQgPSBwcm9wQmluZGluZy5yb290Tm9kZS51dWlkLFxuXHRcdFx0XHRcdHRyYWNrTmFtZSA9IHByb3BCaW5kaW5nLnBhdGgsXG5cdFx0XHRcdFx0YmluZGluZ3NCeVJvb3QgPSB0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsXG5cdFx0XHRcdFx0YmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXSxcblx0XHRcdFx0XHRsYXN0SW5hY3RpdmVCaW5kaW5nID0gYmluZGluZ3NbYmluZGluZ3MubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdFx0Y2FjaGVJbmRleCA9IGJpbmRpbmcuX2NhY2hlSW5kZXg7XG5cdFx0bGFzdEluYWN0aXZlQmluZGluZy5fY2FjaGVJbmRleCA9IGNhY2hlSW5kZXg7XG5cdFx0YmluZGluZ3NbY2FjaGVJbmRleF0gPSBsYXN0SW5hY3RpdmVCaW5kaW5nO1xuXHRcdGJpbmRpbmdzLnBvcCgpO1xuXHRcdGRlbGV0ZSBiaW5kaW5nQnlOYW1lW3RyYWNrTmFtZV07XG5cblx0XHRpZiAoT2JqZWN0LmtleXMoYmluZGluZ0J5TmFtZSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRkZWxldGUgYmluZGluZ3NCeVJvb3Rbcm9vdFV1aWRdO1xuXHRcdH1cblx0fVxuXG5cdF9sZW5kQmluZGluZyhiaW5kaW5nKSB7XG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRwcmV2SW5kZXggPSBiaW5kaW5nLl9jYWNoZUluZGV4LFxuXHRcdFx0XHRcdGxhc3RBY3RpdmVJbmRleCA9IHRoaXMuX25BY3RpdmVCaW5kaW5ncysrLFxuXHRcdFx0XHRcdGZpcnN0SW5hY3RpdmVCaW5kaW5nID0gYmluZGluZ3NbbGFzdEFjdGl2ZUluZGV4XTtcblx0XHRiaW5kaW5nLl9jYWNoZUluZGV4ID0gbGFzdEFjdGl2ZUluZGV4O1xuXHRcdGJpbmRpbmdzW2xhc3RBY3RpdmVJbmRleF0gPSBiaW5kaW5nO1xuXHRcdGZpcnN0SW5hY3RpdmVCaW5kaW5nLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGJpbmRpbmdzW3ByZXZJbmRleF0gPSBmaXJzdEluYWN0aXZlQmluZGluZztcblx0fVxuXG5cdF90YWtlQmFja0JpbmRpbmcoYmluZGluZykge1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRcdFx0cHJldkluZGV4ID0gYmluZGluZy5fY2FjaGVJbmRleCxcblx0XHRcdFx0XHRmaXJzdEluYWN0aXZlSW5kZXggPSAtLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxcblx0XHRcdFx0XHRsYXN0QWN0aXZlQmluZGluZyA9IGJpbmRpbmdzW2ZpcnN0SW5hY3RpdmVJbmRleF07XG5cdFx0YmluZGluZy5fY2FjaGVJbmRleCA9IGZpcnN0SW5hY3RpdmVJbmRleDtcblx0XHRiaW5kaW5nc1tmaXJzdEluYWN0aXZlSW5kZXhdID0gYmluZGluZztcblx0XHRsYXN0QWN0aXZlQmluZGluZy5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRiaW5kaW5nc1twcmV2SW5kZXhdID0gbGFzdEFjdGl2ZUJpbmRpbmc7XG5cdH0gLy8gTWVtb3J5IG1hbmFnZW1lbnQgb2YgSW50ZXJwb2xhbnRzIGZvciB3ZWlnaHQgYW5kIHRpbWUgc2NhbGVcblxuXG5cdF9sZW5kQ29udHJvbEludGVycG9sYW50KCkge1xuXHRcdGNvbnN0IGludGVycG9sYW50cyA9IHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsXG5cdFx0XHRcdFx0bGFzdEFjdGl2ZUluZGV4ID0gdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKztcblx0XHRsZXQgaW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudHNbbGFzdEFjdGl2ZUluZGV4XTtcblxuXHRcdGlmIChpbnRlcnBvbGFudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpbnRlcnBvbGFudCA9IG5ldyBMaW5lYXJJbnRlcnBvbGFudChuZXcgRmxvYXQzMkFycmF5KDIpLCBuZXcgRmxvYXQzMkFycmF5KDIpLCAxLCB0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKTtcblx0XHRcdGludGVycG9sYW50Ll9fY2FjaGVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcblx0XHRcdGludGVycG9sYW50c1tsYXN0QWN0aXZlSW5kZXhdID0gaW50ZXJwb2xhbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGludGVycG9sYW50O1xuXHR9XG5cblx0X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KGludGVycG9sYW50KSB7XG5cdFx0Y29uc3QgaW50ZXJwb2xhbnRzID0gdGhpcy5fY29udHJvbEludGVycG9sYW50cyxcblx0XHRcdFx0XHRwcmV2SW5kZXggPSBpbnRlcnBvbGFudC5fX2NhY2hlSW5kZXgsXG5cdFx0XHRcdFx0Zmlyc3RJbmFjdGl2ZUluZGV4ID0gLS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxcblx0XHRcdFx0XHRsYXN0QWN0aXZlSW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudHNbZmlyc3RJbmFjdGl2ZUluZGV4XTtcblx0XHRpbnRlcnBvbGFudC5fX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0aW50ZXJwb2xhbnRzW2ZpcnN0SW5hY3RpdmVJbmRleF0gPSBpbnRlcnBvbGFudDtcblx0XHRsYXN0QWN0aXZlSW50ZXJwb2xhbnQuX19jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGludGVycG9sYW50c1twcmV2SW5kZXhdID0gbGFzdEFjdGl2ZUludGVycG9sYW50O1xuXHR9IC8vIHJldHVybiBhbiBhY3Rpb24gZm9yIGEgY2xpcCBvcHRpb25hbGx5IHVzaW5nIGEgY3VzdG9tIHJvb3QgdGFyZ2V0XG5cdC8vIG9iamVjdCAodGhpcyBtZXRob2QgYWxsb2NhdGVzIGEgbG90IG9mIGR5bmFtaWMgbWVtb3J5IGluIGNhc2UgYVxuXHQvLyBwcmV2aW91c2x5IHVua25vd24gY2xpcC9yb290IGNvbWJpbmF0aW9uIGlzIHNwZWNpZmllZClcblxuXG5cdGNsaXBBY3Rpb24oY2xpcCwgb3B0aW9uYWxSb290LCBibGVuZE1vZGUpIHtcblx0XHRjb25zdCByb290ID0gb3B0aW9uYWxSb290IHx8IHRoaXMuX3Jvb3QsXG5cdFx0XHRcdFx0cm9vdFV1aWQgPSByb290LnV1aWQ7XG5cdFx0bGV0IGNsaXBPYmplY3QgPSB0eXBlb2YgY2xpcCA9PT0gJ3N0cmluZycgPyBBbmltYXRpb25DbGlwLmZpbmRCeU5hbWUocm9vdCwgY2xpcCkgOiBjbGlwO1xuXHRcdGNvbnN0IGNsaXBVdWlkID0gY2xpcE9iamVjdCAhPT0gbnVsbCA/IGNsaXBPYmplY3QudXVpZCA6IGNsaXA7XG5cdFx0Y29uc3QgYWN0aW9uc0ZvckNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwW2NsaXBVdWlkXTtcblx0XHRsZXQgcHJvdG90eXBlQWN0aW9uID0gbnVsbDtcblxuXHRcdGlmIChibGVuZE1vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKGNsaXBPYmplY3QgIT09IG51bGwpIHtcblx0XHRcdFx0YmxlbmRNb2RlID0gY2xpcE9iamVjdC5ibGVuZE1vZGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRibGVuZE1vZGUgPSBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGlvbnNGb3JDbGlwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nQWN0aW9uID0gYWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290W3Jvb3RVdWlkXTtcblxuXHRcdFx0aWYgKGV4aXN0aW5nQWN0aW9uICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmdBY3Rpb24uYmxlbmRNb2RlID09PSBibGVuZE1vZGUpIHtcblx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQWN0aW9uO1xuXHRcdFx0fSAvLyB3ZSBrbm93IHRoZSBjbGlwLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhcnNlIGFsbFxuXHRcdFx0Ly8gdGhlIGJpbmRpbmdzIGFnYWluIGJ1dCBjYW4ganVzdCBjb3B5XG5cblxuXHRcdFx0cHJvdG90eXBlQWN0aW9uID0gYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zWzBdOyAvLyBhbHNvLCB0YWtlIHRoZSBjbGlwIGZyb20gdGhlIHByb3RvdHlwZSBhY3Rpb25cblxuXHRcdFx0aWYgKGNsaXBPYmplY3QgPT09IG51bGwpIGNsaXBPYmplY3QgPSBwcm90b3R5cGVBY3Rpb24uX2NsaXA7XG5cdFx0fSAvLyBjbGlwIG11c3QgYmUga25vd24gd2hlbiBzcGVjaWZpZWQgdmlhIHN0cmluZ1xuXG5cblx0XHRpZiAoY2xpcE9iamVjdCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7IC8vIGFsbG9jYXRlIGFsbCByZXNvdXJjZXMgcmVxdWlyZWQgdG8gcnVuIGl0XG5cblx0XHRjb25zdCBuZXdBY3Rpb24gPSBuZXcgQW5pbWF0aW9uQWN0aW9uKHRoaXMsIGNsaXBPYmplY3QsIG9wdGlvbmFsUm9vdCwgYmxlbmRNb2RlKTtcblxuXHRcdHRoaXMuX2JpbmRBY3Rpb24obmV3QWN0aW9uLCBwcm90b3R5cGVBY3Rpb24pOyAvLyBhbmQgbWFrZSB0aGUgYWN0aW9uIGtub3duIHRvIHRoZSBtZW1vcnkgbWFuYWdlclxuXG5cblx0XHR0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihuZXdBY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCk7XG5cblx0XHRyZXR1cm4gbmV3QWN0aW9uO1xuXHR9IC8vIGdldCBhbiBleGlzdGluZyBhY3Rpb25cblxuXG5cdGV4aXN0aW5nQWN0aW9uKGNsaXAsIG9wdGlvbmFsUm9vdCkge1xuXHRcdGNvbnN0IHJvb3QgPSBvcHRpb25hbFJvb3QgfHwgdGhpcy5fcm9vdCxcblx0XHRcdFx0XHRyb290VXVpZCA9IHJvb3QudXVpZCxcblx0XHRcdFx0XHRjbGlwT2JqZWN0ID0gdHlwZW9mIGNsaXAgPT09ICdzdHJpbmcnID8gQW5pbWF0aW9uQ2xpcC5maW5kQnlOYW1lKHJvb3QsIGNsaXApIDogY2xpcCxcblx0XHRcdFx0XHRjbGlwVXVpZCA9IGNsaXBPYmplY3QgPyBjbGlwT2JqZWN0LnV1aWQgOiBjbGlwLFxuXHRcdFx0XHRcdGFjdGlvbnNGb3JDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cblx0XHRpZiAoYWN0aW9uc0ZvckNsaXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFtyb290VXVpZF0gfHwgbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fSAvLyBkZWFjdGl2YXRlcyBhbGwgcHJldmlvdXNseSBzY2hlZHVsZWQgYWN0aW9uc1xuXG5cblx0c3RvcEFsbEFjdGlvbigpIHtcblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdFx0XHRuQWN0aW9ucyA9IHRoaXMuX25BY3RpdmVBY3Rpb25zO1xuXG5cdFx0Zm9yIChsZXQgaSA9IG5BY3Rpb25zIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0XHRcdGFjdGlvbnNbaV0uc3RvcCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIGFkdmFuY2UgdGhlIHRpbWUgYW5kIHVwZGF0ZSBhcHBseSB0aGUgYW5pbWF0aW9uXG5cblxuXHR1cGRhdGUoZGVsdGFUaW1lKSB7XG5cdFx0ZGVsdGFUaW1lICo9IHRoaXMudGltZVNjYWxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0XHRcdG5BY3Rpb25zID0gdGhpcy5fbkFjdGl2ZUFjdGlvbnMsXG5cdFx0XHRcdFx0dGltZSA9IHRoaXMudGltZSArPSBkZWx0YVRpbWUsXG5cdFx0XHRcdFx0dGltZURpcmVjdGlvbiA9IE1hdGguc2lnbihkZWx0YVRpbWUpLFxuXHRcdFx0XHRcdGFjY3VJbmRleCA9IHRoaXMuX2FjY3VJbmRleCBePSAxOyAvLyBydW4gYWN0aXZlIGFjdGlvbnNcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBuQWN0aW9uczsgKytpKSB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW2ldO1xuXG5cdFx0XHRhY3Rpb24uX3VwZGF0ZSh0aW1lLCBkZWx0YVRpbWUsIHRpbWVEaXJlY3Rpb24sIGFjY3VJbmRleCk7XG5cdFx0fSAvLyB1cGRhdGUgc2NlbmUgZ3JhcGhcblxuXG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRuQmluZGluZ3MgPSB0aGlzLl9uQWN0aXZlQmluZGluZ3M7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbkJpbmRpbmdzOyArK2kpIHtcblx0XHRcdGJpbmRpbmdzW2ldLmFwcGx5KGFjY3VJbmRleCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gQWxsb3dzIHlvdSB0byBzZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiBhbiBhbmltYXRpb24uXG5cblxuXHRzZXRUaW1lKHRpbWVJblNlY29uZHMpIHtcblx0XHR0aGlzLnRpbWUgPSAwOyAvLyBaZXJvIG91dCB0aW1lIGF0dHJpYnV0ZSBmb3IgQW5pbWF0aW9uTWl4ZXIgb2JqZWN0O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9hY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLl9hY3Rpb25zW2ldLnRpbWUgPSAwOyAvLyBaZXJvIG91dCB0aW1lIGF0dHJpYnV0ZSBmb3IgYWxsIGFzc29jaWF0ZWQgQW5pbWF0aW9uQWN0aW9uIG9iamVjdHMuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlKHRpbWVJblNlY29uZHMpOyAvLyBVcGRhdGUgdXNlZCB0byBzZXQgZXhhY3QgdGltZS4gUmV0dXJucyBcInRoaXNcIiBBbmltYXRpb25NaXhlciBvYmplY3QuXG5cdH0gLy8gcmV0dXJuIHRoaXMgbWl4ZXIncyByb290IHRhcmdldCBvYmplY3RcblxuXG5cdGdldFJvb3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvb3Q7XG5cdH0gLy8gZnJlZSBhbGwgcmVzb3VyY2VzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjbGlwXG5cblxuXHR1bmNhY2hlQ2xpcChjbGlwKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0Y2xpcFV1aWQgPSBjbGlwLnV1aWQsXG5cdFx0XHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXAsXG5cdFx0XHRcdFx0YWN0aW9uc0ZvckNsaXAgPSBhY3Rpb25zQnlDbGlwW2NsaXBVdWlkXTtcblxuXHRcdGlmIChhY3Rpb25zRm9yQ2xpcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBub3RlOiBqdXN0IGNhbGxpbmcgX3JlbW92ZUluYWN0aXZlQWN0aW9uIHdvdWxkIG1lc3MgdXAgdGhlXG5cdFx0XHQvLyBpdGVyYXRpb24gc3RhdGUgYW5kIGFsc28gcmVxdWlyZSB1cGRhdGluZyB0aGUgc3RhdGUgd2UgY2FuXG5cdFx0XHQvLyBqdXN0IHRocm93IGF3YXlcblx0XHRcdGNvbnN0IGFjdGlvbnNUb1JlbW92ZSA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucztcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBhY3Rpb25zVG9SZW1vdmUubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gYWN0aW9uc1RvUmVtb3ZlW2ldO1xuXG5cdFx0XHRcdHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYWN0aW9uKTtcblxuXHRcdFx0XHRjb25zdCBjYWNoZUluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXHRcdFx0XHRcdFx0XHRsYXN0SW5hY3RpdmVBY3Rpb24gPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGFjdGlvbi5fY2FjaGVJbmRleCA9IG51bGw7XG5cdFx0XHRcdGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IG51bGw7XG5cdFx0XHRcdGxhc3RJbmFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IGNhY2hlSW5kZXg7XG5cdFx0XHRcdGFjdGlvbnNbY2FjaGVJbmRleF0gPSBsYXN0SW5hY3RpdmVBY3Rpb247XG5cdFx0XHRcdGFjdGlvbnMucG9wKCk7XG5cblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihhY3Rpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cdFx0fVxuXHR9IC8vIGZyZWUgYWxsIHJlc291cmNlcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcm9vdCB0YXJnZXQgb2JqZWN0XG5cblxuXHR1bmNhY2hlUm9vdChyb290KSB7XG5cdFx0Y29uc3Qgcm9vdFV1aWQgPSByb290LnV1aWQsXG5cdFx0XHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXA7XG5cblx0XHRmb3IgKGNvbnN0IGNsaXBVdWlkIGluIGFjdGlvbnNCeUNsaXApIHtcblx0XHRcdGNvbnN0IGFjdGlvbkJ5Um9vdCA9IGFjdGlvbnNCeUNsaXBbY2xpcFV1aWRdLmFjdGlvbkJ5Um9vdCxcblx0XHRcdFx0XHRcdGFjdGlvbiA9IGFjdGlvbkJ5Um9vdFtyb290VXVpZF07XG5cblx0XHRcdGlmIChhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGFjdGlvbik7XG5cblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oYWN0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxcblx0XHRcdFx0XHRiaW5kaW5nQnlOYW1lID0gYmluZGluZ3NCeVJvb3Rbcm9vdFV1aWRdO1xuXG5cdFx0aWYgKGJpbmRpbmdCeU5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCB0cmFja05hbWUgaW4gYmluZGluZ0J5TmFtZSkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gYmluZGluZ0J5TmFtZVt0cmFja05hbWVdO1xuXHRcdFx0XHRiaW5kaW5nLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCk7XG5cblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSAvLyByZW1vdmUgYSB0YXJnZXRlZCBjbGlwIGZyb20gdGhlIGNhY2hlXG5cblxuXHR1bmNhY2hlQWN0aW9uKGNsaXAsIG9wdGlvbmFsUm9vdCkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuZXhpc3RpbmdBY3Rpb24oY2xpcCwgb3B0aW9uYWxSb290KTtcblxuXHRcdGlmIChhY3Rpb24gIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYWN0aW9uKTtcblxuXHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oYWN0aW9uKTtcblx0XHR9XG5cdH1cblxufVxuXG5BbmltYXRpb25NaXhlci5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuXG5jbGFzcyBVbmlmb3JtIHtcblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLicpO1xuXHRcdFx0dmFsdWUgPSBhcmd1bWVudHNbMV07XG5cdFx0fVxuXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBVbmlmb3JtKHRoaXMudmFsdWUuY2xvbmUgPT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlLmNsb25lKCkpO1xuXHR9XG5cbn1cblxuY2xhc3MgSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgZXh0ZW5kcyBJbnRlcmxlYXZlZEJ1ZmZlciB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBzdHJpZGUsIG1lc2hQZXJBdHRyaWJ1dGUgPSAxKSB7XG5cdFx0c3VwZXIoYXJyYXksIHN0cmlkZSk7XG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gbWVzaFBlckF0dHJpYnV0ZTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IHNvdXJjZS5tZXNoUGVyQXR0cmlidXRlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoZGF0YSkge1xuXHRcdGNvbnN0IGliID0gc3VwZXIuY2xvbmUoZGF0YSk7XG5cdFx0aWIubWVzaFBlckF0dHJpYnV0ZSA9IHRoaXMubWVzaFBlckF0dHJpYnV0ZTtcblx0XHRyZXR1cm4gaWI7XG5cdH1cblxuXHR0b0pTT04oZGF0YSkge1xuXHRcdGNvbnN0IGpzb24gPSBzdXBlci50b0pTT04oZGF0YSk7XG5cdFx0anNvbi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyID0gdHJ1ZTtcblx0XHRqc29uLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblxufVxuXG5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cbmNsYXNzIEdMQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYnVmZmVyLCB0eXBlLCBpdGVtU2l6ZSwgZWxlbWVudFNpemUsIGNvdW50KSB7XG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cdFx0dGhpcy5lbGVtZW50U2l6ZSA9IGVsZW1lbnRTaXplO1xuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSB0cnVlKSB0aGlzLnZlcnNpb24rKztcblx0fVxuXG5cdHNldEJ1ZmZlcihidWZmZXIpIHtcblx0XHR0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFR5cGUodHlwZSwgZWxlbWVudFNpemUpIHtcblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdHRoaXMuZWxlbWVudFNpemUgPSBlbGVtZW50U2l6ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEl0ZW1TaXplKGl0ZW1TaXplKSB7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q291bnQoY291bnQpIHtcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5HTEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNHTEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbmNsYXNzIFJheWNhc3RlciB7XG5cdGNvbnN0cnVjdG9yKG9yaWdpbiwgZGlyZWN0aW9uLCBuZWFyID0gMCwgZmFyID0gSW5maW5pdHkpIHtcblx0XHR0aGlzLnJheSA9IG5ldyBSYXkob3JpZ2luLCBkaXJlY3Rpb24pOyAvLyBkaXJlY3Rpb24gaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkIChmb3IgYWNjdXJhdGUgZGlzdGFuY2UgY2FsY3VsYXRpb25zKVxuXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblx0XHR0aGlzLmNhbWVyYSA9IG51bGw7XG5cdFx0dGhpcy5sYXllcnMgPSBuZXcgTGF5ZXJzKCk7XG5cdFx0dGhpcy5wYXJhbXMgPSB7XG5cdFx0XHRNZXNoOiB7fSxcblx0XHRcdExpbmU6IHtcblx0XHRcdFx0dGhyZXNob2xkOiAxXG5cdFx0XHR9LFxuXHRcdFx0TE9EOiB7fSxcblx0XHRcdFBvaW50czoge1xuXHRcdFx0XHR0aHJlc2hvbGQ6IDFcblx0XHRcdH0sXG5cdFx0XHRTcHJpdGU6IHt9XG5cdFx0fTtcblx0fVxuXG5cdHNldChvcmlnaW4sIGRpcmVjdGlvbikge1xuXHRcdC8vIGRpcmVjdGlvbiBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQgKGZvciBhY2N1cmF0ZSBkaXN0YW5jZSBjYWxjdWxhdGlvbnMpXG5cdFx0dGhpcy5yYXkuc2V0KG9yaWdpbiwgZGlyZWN0aW9uKTtcblx0fVxuXG5cdHNldEZyb21DYW1lcmEoY29vcmRzLCBjYW1lcmEpIHtcblx0XHRpZiAoY2FtZXJhICYmIGNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XG5cdFx0XHR0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0XHR0aGlzLnJheS5kaXJlY3Rpb24uc2V0KGNvb3Jkcy54LCBjb29yZHMueSwgMC41KS51bnByb2plY3QoY2FtZXJhKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKTtcblx0XHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXHRcdH0gZWxzZSBpZiAoY2FtZXJhICYmIGNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xuXHRcdFx0dGhpcy5yYXkub3JpZ2luLnNldChjb29yZHMueCwgY29vcmRzLnksIChjYW1lcmEubmVhciArIGNhbWVyYS5mYXIpIC8gKGNhbWVyYS5uZWFyIC0gY2FtZXJhLmZhcikpLnVucHJvamVjdChjYW1lcmEpOyAvLyBzZXQgb3JpZ2luIGluIHBsYW5lIG9mIGNhbWVyYVxuXG5cdFx0XHR0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsIDAsIC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlOiAnICsgY2FtZXJhLnR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdGludGVyc2VjdE9iamVjdChvYmplY3QsIHJlY3Vyc2l2ZSA9IHRydWUsIGludGVyc2VjdHMgPSBbXSkge1xuXHRcdGludGVyc2VjdE9iamVjdChvYmplY3QsIHRoaXMsIGludGVyc2VjdHMsIHJlY3Vyc2l2ZSk7XG5cdFx0aW50ZXJzZWN0cy5zb3J0KGFzY1NvcnQpO1xuXHRcdHJldHVybiBpbnRlcnNlY3RzO1xuXHR9XG5cblx0aW50ZXJzZWN0T2JqZWN0cyhvYmplY3RzLCByZWN1cnNpdmUgPSB0cnVlLCBpbnRlcnNlY3RzID0gW10pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IG9iamVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpbnRlcnNlY3RPYmplY3Qob2JqZWN0c1tpXSwgdGhpcywgaW50ZXJzZWN0cywgcmVjdXJzaXZlKTtcblx0XHR9XG5cblx0XHRpbnRlcnNlY3RzLnNvcnQoYXNjU29ydCk7XG5cdFx0cmV0dXJuIGludGVyc2VjdHM7XG5cdH1cblxufVxuXG5mdW5jdGlvbiBhc2NTb3J0KGEsIGIpIHtcblx0cmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RPYmplY3Qob2JqZWN0LCByYXljYXN0ZXIsIGludGVyc2VjdHMsIHJlY3Vyc2l2ZSkge1xuXHRpZiAob2JqZWN0LmxheWVycy50ZXN0KHJheWNhc3Rlci5sYXllcnMpKSB7XG5cdFx0b2JqZWN0LnJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKTtcblx0fVxuXG5cdGlmIChyZWN1cnNpdmUgPT09IHRydWUpIHtcblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpbnRlcnNlY3RPYmplY3QoY2hpbGRyZW5baV0sIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmVmOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGhlcmljYWxfY29vcmRpbmF0ZV9zeXN0ZW1cbiAqXG4gKiBUaGUgcG9sYXIgYW5nbGUgKHBoaSkgaXMgbWVhc3VyZWQgZnJvbSB0aGUgcG9zaXRpdmUgeS1heGlzLiBUaGUgcG9zaXRpdmUgeS1heGlzIGlzIHVwLlxuICogVGhlIGF6aW11dGhhbCBhbmdsZSAodGhldGEpIGlzIG1lYXN1cmVkIGZyb20gdGhlIHBvc2l0aXZlIHotYXhpcy5cbiAqL1xuXG5jbGFzcyBTcGhlcmljYWwge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCBwaGkgPSAwLCB0aGV0YSA9IDApIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTsgLy8gcG9sYXIgYW5nbGVcblxuXHRcdHRoaXMudGhldGEgPSB0aGV0YTsgLy8gYXppbXV0aGFsIGFuZ2xlXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldChyYWRpdXMsIHBoaSwgdGhldGEpIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTtcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KG90aGVyKSB7XG5cdFx0dGhpcy5yYWRpdXMgPSBvdGhlci5yYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBvdGhlci5waGk7XG5cdFx0dGhpcy50aGV0YSA9IG90aGVyLnRoZXRhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWUgRVBTIGFuZCBQSS1FUFNcblxuXG5cdG1ha2VTYWZlKCkge1xuXHRcdGNvbnN0IEVQUyA9IDAuMDAwMDAxO1xuXHRcdHRoaXMucGhpID0gTWF0aC5tYXgoRVBTLCBNYXRoLm1pbihNYXRoLlBJIC0gRVBTLCB0aGlzLnBoaSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVZlY3RvcjModikge1xuXHRcdHJldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModi54LCB2LnksIHYueik7XG5cdH1cblxuXHRzZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHgsIHksIHopIHtcblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuXG5cdFx0aWYgKHRoaXMucmFkaXVzID09PSAwKSB7XG5cdFx0XHR0aGlzLnRoZXRhID0gMDtcblx0XHRcdHRoaXMucGhpID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50aGV0YSA9IE1hdGguYXRhbjIoeCwgeik7XG5cdFx0XHR0aGlzLnBoaSA9IE1hdGguYWNvcyhjbGFtcCh5IC8gdGhpcy5yYWRpdXMsIC0xLCAxKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZWY6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N5bGluZHJpY2FsX2Nvb3JkaW5hdGVfc3lzdGVtXG4gKi9cbmNsYXNzIEN5bGluZHJpY2FsIHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgdGhldGEgPSAwLCB5ID0gMCkge1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzOyAvLyBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gYSBwb2ludCBpbiB0aGUgeC16IHBsYW5lXG5cblx0XHR0aGlzLnRoZXRhID0gdGhldGE7IC8vIGNvdW50ZXJjbG9ja3dpc2UgYW5nbGUgaW4gdGhlIHgteiBwbGFuZSBtZWFzdXJlZCBpbiByYWRpYW5zIGZyb20gdGhlIHBvc2l0aXZlIHotYXhpc1xuXG5cdFx0dGhpcy55ID0geTsgLy8gaGVpZ2h0IGFib3ZlIHRoZSB4LXogcGxhbmVcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0KHJhZGl1cywgdGhldGEsIHkpIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkob3RoZXIpIHtcblx0XHR0aGlzLnJhZGl1cyA9IG90aGVyLnJhZGl1cztcblx0XHR0aGlzLnRoZXRhID0gb3RoZXIudGhldGE7XG5cdFx0dGhpcy55ID0gb3RoZXIueTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKHYpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHYueCwgdi55LCB2LnopO1xuXHR9XG5cblx0c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh4LCB5LCB6KSB7XG5cdFx0dGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQoeCAqIHggKyB6ICogeik7XG5cdFx0dGhpcy50aGV0YSA9IE1hdGguYXRhbjIoeCwgeik7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJDQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY2xhc3MgQm94MiB7XG5cdGNvbnN0cnVjdG9yKG1pbiA9IG5ldyBWZWN0b3IyKCtJbmZpbml0eSwgK0luZmluaXR5KSwgbWF4ID0gbmV3IFZlY3RvcjIoLUluZmluaXR5LCAtSW5maW5pdHkpKSB7XG5cdFx0dGhpcy5taW4gPSBtaW47XG5cdFx0dGhpcy5tYXggPSBtYXg7XG5cdH1cblxuXHRzZXQobWluLCBtYXgpIHtcblx0XHR0aGlzLm1pbi5jb3B5KG1pbik7XG5cdFx0dGhpcy5tYXguY29weShtYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVBvaW50cyhwb2ludHMpIHtcblx0XHR0aGlzLm1ha2VFbXB0eSgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdHRoaXMuZXhwYW5kQnlQb2ludChwb2ludHNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUNlbnRlckFuZFNpemUoY2VudGVyLCBzaXplKSB7XG5cdFx0Y29uc3QgaGFsZlNpemUgPSBfdmVjdG9yJDQuY29weShzaXplKS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXG5cdFx0dGhpcy5taW4uY29weShjZW50ZXIpLnN1YihoYWxmU2l6ZSk7XG5cdFx0dGhpcy5tYXguY29weShjZW50ZXIpLmFkZChoYWxmU2l6ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0Y29weShib3gpIHtcblx0XHR0aGlzLm1pbi5jb3B5KGJveC5taW4pO1xuXHRcdHRoaXMubWF4LmNvcHkoYm94Lm1heCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlRW1wdHkoKSB7XG5cdFx0dGhpcy5taW4ueCA9IHRoaXMubWluLnkgPSArSW5maW5pdHk7XG5cdFx0dGhpcy5tYXgueCA9IHRoaXMubWF4LnkgPSAtSW5maW5pdHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0VtcHR5KCkge1xuXHRcdC8vIHRoaXMgaXMgYSBtb3JlIHJvYnVzdCBjaGVjayBmb3IgZW1wdHkgdGhhbiAoIHZvbHVtZSA8PSAwICkgYmVjYXVzZSB2b2x1bWUgY2FuIGdldCBwb3NpdGl2ZSB3aXRoIHR3byBuZWdhdGl2ZSBheGVzXG5cdFx0cmV0dXJuIHRoaXMubWF4LnggPCB0aGlzLm1pbi54IHx8IHRoaXMubWF4LnkgPCB0aGlzLm1pbi55O1xuXHR9XG5cblx0Z2V0Q2VudGVyKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoMCwgMCkgOiB0YXJnZXQuYWRkVmVjdG9ycyh0aGlzLm1pbiwgdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKDAuNSk7XG5cdH1cblxuXHRnZXRTaXplKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoMCwgMCkgOiB0YXJnZXQuc3ViVmVjdG9ycyh0aGlzLm1heCwgdGhpcy5taW4pO1xuXHR9XG5cblx0ZXhwYW5kQnlQb2ludChwb2ludCkge1xuXHRcdHRoaXMubWluLm1pbihwb2ludCk7XG5cdFx0dGhpcy5tYXgubWF4KHBvaW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZEJ5VmVjdG9yKHZlY3Rvcikge1xuXHRcdHRoaXMubWluLnN1Yih2ZWN0b3IpO1xuXHRcdHRoaXMubWF4LmFkZCh2ZWN0b3IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kQnlTY2FsYXIoc2NhbGFyKSB7XG5cdFx0dGhpcy5taW4uYWRkU2NhbGFyKC1zY2FsYXIpO1xuXHRcdHRoaXMubWF4LmFkZFNjYWxhcihzY2FsYXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29udGFpbnNQb2ludChwb2ludCkge1xuXHRcdHJldHVybiBwb2ludC54IDwgdGhpcy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fCBwb2ludC55IDwgdGhpcy5taW4ueSB8fCBwb2ludC55ID4gdGhpcy5tYXgueSA/IGZhbHNlIDogdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zQm94KGJveCkge1xuXHRcdHJldHVybiB0aGlzLm1pbi54IDw9IGJveC5taW4ueCAmJiBib3gubWF4LnggPD0gdGhpcy5tYXgueCAmJiB0aGlzLm1pbi55IDw9IGJveC5taW4ueSAmJiBib3gubWF4LnkgPD0gdGhpcy5tYXgueTtcblx0fVxuXG5cdGdldFBhcmFtZXRlcihwb2ludCwgdGFyZ2V0KSB7XG5cdFx0Ly8gVGhpcyBjYW4gcG90ZW50aWFsbHkgaGF2ZSBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBib3hcblx0XHQvLyBoYXMgYSBzaXplIGRpbWVuc2lvbiBvZiAwLlxuXHRcdHJldHVybiB0YXJnZXQuc2V0KChwb2ludC54IC0gdGhpcy5taW4ueCkgLyAodGhpcy5tYXgueCAtIHRoaXMubWluLngpLCAocG9pbnQueSAtIHRoaXMubWluLnkpIC8gKHRoaXMubWF4LnkgLSB0aGlzLm1pbi55KSk7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdC8vIHVzaW5nIDQgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zXG5cdFx0cmV0dXJuIGJveC5tYXgueCA8IHRoaXMubWluLnggfHwgYm94Lm1pbi54ID4gdGhpcy5tYXgueCB8fCBib3gubWF4LnkgPCB0aGlzLm1pbi55IHx8IGJveC5taW4ueSA+IHRoaXMubWF4LnkgPyBmYWxzZSA6IHRydWU7XG5cdH1cblxuXHRjbGFtcFBvaW50KHBvaW50LCB0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkocG9pbnQpLmNsYW1wKHRoaXMubWluLCB0aGlzLm1heCk7XG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQocG9pbnQpIHtcblx0XHRjb25zdCBjbGFtcGVkUG9pbnQgPSBfdmVjdG9yJDQuY29weShwb2ludCkuY2xhbXAodGhpcy5taW4sIHRoaXMubWF4KTtcblxuXHRcdHJldHVybiBjbGFtcGVkUG9pbnQuc3ViKHBvaW50KS5sZW5ndGgoKTtcblx0fVxuXG5cdGludGVyc2VjdChib3gpIHtcblx0XHR0aGlzLm1pbi5tYXgoYm94Lm1pbik7XG5cdFx0dGhpcy5tYXgubWluKGJveC5tYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dW5pb24oYm94KSB7XG5cdFx0dGhpcy5taW4ubWluKGJveC5taW4pO1xuXHRcdHRoaXMubWF4Lm1heChib3gubWF4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZShvZmZzZXQpIHtcblx0XHR0aGlzLm1pbi5hZGQob2Zmc2V0KTtcblx0XHR0aGlzLm1heC5hZGQob2Zmc2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhib3gpIHtcblx0XHRyZXR1cm4gYm94Lm1pbi5lcXVhbHModGhpcy5taW4pICYmIGJveC5tYXguZXF1YWxzKHRoaXMubWF4KTtcblx0fVxuXG59XG5cbkJveDIucHJvdG90eXBlLmlzQm94MiA9IHRydWU7XG5cbmNvbnN0IF9zdGFydFAgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3N0YXJ0RW5kID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIExpbmUzIHtcblx0Y29uc3RydWN0b3Ioc3RhcnQgPSBuZXcgVmVjdG9yMygpLCBlbmQgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0dGhpcy5zdGFydCA9IHN0YXJ0O1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHR9XG5cblx0c2V0KHN0YXJ0LCBlbmQpIHtcblx0XHR0aGlzLnN0YXJ0LmNvcHkoc3RhcnQpO1xuXHRcdHRoaXMuZW5kLmNvcHkoZW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkobGluZSkge1xuXHRcdHRoaXMuc3RhcnQuY29weShsaW5lLnN0YXJ0KTtcblx0XHR0aGlzLmVuZC5jb3B5KGxpbmUuZW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENlbnRlcih0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnModGhpcy5zdGFydCwgdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKDAuNSk7XG5cdH1cblxuXHRkZWx0YSh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LnN1YlZlY3RvcnModGhpcy5lbmQsIHRoaXMuc3RhcnQpO1xuXHR9XG5cblx0ZGlzdGFuY2VTcSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCk7XG5cdH1cblxuXHRkaXN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKTtcblx0fVxuXG5cdGF0KHQsIHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLmRlbHRhKHRhcmdldCkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpO1xuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihwb2ludCwgY2xhbXBUb0xpbmUpIHtcblx0XHRfc3RhcnRQLnN1YlZlY3RvcnMocG9pbnQsIHRoaXMuc3RhcnQpO1xuXG5cdFx0X3N0YXJ0RW5kLnN1YlZlY3RvcnModGhpcy5lbmQsIHRoaXMuc3RhcnQpO1xuXG5cdFx0Y29uc3Qgc3RhcnRFbmQyID0gX3N0YXJ0RW5kLmRvdChfc3RhcnRFbmQpO1xuXG5cdFx0Y29uc3Qgc3RhcnRFbmRfc3RhcnRQID0gX3N0YXJ0RW5kLmRvdChfc3RhcnRQKTtcblxuXHRcdGxldCB0ID0gc3RhcnRFbmRfc3RhcnRQIC8gc3RhcnRFbmQyO1xuXG5cdFx0aWYgKGNsYW1wVG9MaW5lKSB7XG5cdFx0XHR0ID0gY2xhbXAodCwgMCwgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHQ7XG5cdH1cblxuXHRjbG9zZXN0UG9pbnRUb1BvaW50KHBvaW50LCBjbGFtcFRvTGluZSwgdGFyZ2V0KSB7XG5cdFx0Y29uc3QgdCA9IHRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihwb2ludCwgY2xhbXBUb0xpbmUpO1xuXHRcdHJldHVybiB0aGlzLmRlbHRhKHRhcmdldCkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpO1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG1hdHJpeCkge1xuXHRcdHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG5cdFx0dGhpcy5lbmQuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMobGluZSkge1xuXHRcdHJldHVybiBsaW5lLnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSAmJiBsaW5lLmVuZC5lcXVhbHModGhpcy5lbmQpO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkMyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBTcG90TGlnaHRIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGxpZ2h0LCBjb2xvcikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHR0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IFswLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAtMSwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgLTEsIDFdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGogPSAxLCBsID0gMzI7IGkgPCBsOyBpKyssIGorKykge1xuXHRcdFx0Y29uc3QgcDEgPSBpIC8gbCAqIE1hdGguUEkgKiAyO1xuXHRcdFx0Y29uc3QgcDIgPSBqIC8gbCAqIE1hdGguUEkgKiAyO1xuXHRcdFx0cG9zaXRpb25zLnB1c2goTWF0aC5jb3MocDEpLCBNYXRoLnNpbihwMSksIDEsIE1hdGguY29zKHAyKSwgTWF0aC5zaW4ocDIpLCAxKTtcblx0XHR9XG5cblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zLCAzKSk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0Zm9nOiBmYWxzZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0dGhpcy5jb25lID0gbmV3IExpbmVTZWdtZW50cyhnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMuYWRkKHRoaXMuY29uZSk7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5jb25lLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLmNvbmUubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRjb25zdCBjb25lTGVuZ3RoID0gdGhpcy5saWdodC5kaXN0YW5jZSA/IHRoaXMubGlnaHQuZGlzdGFuY2UgOiAxMDAwO1xuXHRcdGNvbnN0IGNvbmVXaWR0aCA9IGNvbmVMZW5ndGggKiBNYXRoLnRhbih0aGlzLmxpZ2h0LmFuZ2xlKTtcblx0XHR0aGlzLmNvbmUuc2NhbGUuc2V0KGNvbmVXaWR0aCwgY29uZVdpZHRoLCBjb25lTGVuZ3RoKTtcblxuXHRcdF92ZWN0b3IkMy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpO1xuXG5cdFx0dGhpcy5jb25lLmxvb2tBdChfdmVjdG9yJDMpO1xuXG5cdFx0aWYgKHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7XG5cdFx0fVxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ib25lTWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9tYXRyaXhXb3JsZEludiA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jbGFzcyBTa2VsZXRvbkhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdGNvbnN0IGJvbmVzID0gZ2V0Qm9uZUxpc3Qob2JqZWN0KTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3QgY29sb3JzID0gW107XG5cdFx0Y29uc3QgY29sb3IxID0gbmV3IENvbG9yKDAsIDAsIDEpO1xuXHRcdGNvbnN0IGNvbG9yMiA9IG5ldyBDb2xvcigwLCAxLCAwKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1tpXTtcblxuXHRcdFx0aWYgKGJvbmUucGFyZW50ICYmIGJvbmUucGFyZW50LmlzQm9uZSkge1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKDAsIDAsIDApO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKDAsIDAsIDApO1xuXHRcdFx0XHRjb2xvcnMucHVzaChjb2xvcjEuciwgY29sb3IxLmcsIGNvbG9yMS5iKTtcblx0XHRcdFx0Y29sb3JzLnB1c2goY29sb3IyLnIsIGNvbG9yMi5nLCBjb2xvcjIuYik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGNvbG9ycywgMykpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdHZlcnRleENvbG9yczogdHJ1ZSxcblx0XHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlLFxuXHRcdFx0dHJhbnNwYXJlbnQ6IHRydWVcblx0XHR9KTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdTa2VsZXRvbkhlbHBlcic7XG5cdFx0dGhpcy5pc1NrZWxldG9uSGVscGVyID0gdHJ1ZTtcblx0XHR0aGlzLnJvb3QgPSBvYmplY3Q7XG5cdFx0dGhpcy5ib25lcyA9IGJvbmVzO1xuXHRcdHRoaXMubWF0cml4ID0gb2JqZWN0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoZm9yY2UpIHtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xuXG5cdFx0X21hdHJpeFdvcmxkSW52LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IGJvbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbaV07XG5cblx0XHRcdGlmIChib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUpIHtcblx0XHRcdFx0X2JvbmVNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhfbWF0cml4V29ybGRJbnYsIGJvbmUubWF0cml4V29ybGQpO1xuXG5cdFx0XHRcdF92ZWN0b3IkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oX2JvbmVNYXRyaXgpO1xuXG5cdFx0XHRcdHBvc2l0aW9uLnNldFhZWihqLCBfdmVjdG9yJDIueCwgX3ZlY3RvciQyLnksIF92ZWN0b3IkMi56KTtcblxuXHRcdFx0XHRfYm9uZU1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKF9tYXRyaXhXb3JsZEludiwgYm9uZS5wYXJlbnQubWF0cml4V29ybGQpO1xuXG5cdFx0XHRcdF92ZWN0b3IkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oX2JvbmVNYXRyaXgpO1xuXG5cdFx0XHRcdHBvc2l0aW9uLnNldFhZWihqICsgMSwgX3ZlY3RvciQyLngsIF92ZWN0b3IkMi55LCBfdmVjdG9yJDIueik7XG5cdFx0XHRcdGogKz0gMjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIGdldEJvbmVMaXN0KG9iamVjdCkge1xuXHRjb25zdCBib25lTGlzdCA9IFtdO1xuXG5cdGlmIChvYmplY3QgJiYgb2JqZWN0LmlzQm9uZSkge1xuXHRcdGJvbmVMaXN0LnB1c2gob2JqZWN0KTtcblx0fVxuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0Ym9uZUxpc3QucHVzaC5hcHBseShib25lTGlzdCwgZ2V0Qm9uZUxpc3Qob2JqZWN0LmNoaWxkcmVuW2ldKSk7XG5cdH1cblxuXHRyZXR1cm4gYm9uZUxpc3Q7XG59XG5cbmNsYXNzIFBvaW50TGlnaHRIZWxwZXIgZXh0ZW5kcyBNZXNoIHtcblx0Y29uc3RydWN0b3IobGlnaHQsIHNwaGVyZVNpemUsIGNvbG9yKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgU3BoZXJlR2VvbWV0cnkoc3BoZXJlU2l6ZSwgNCwgMik7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0d2lyZWZyYW1lOiB0cnVlLFxuXHRcdFx0Zm9nOiBmYWxzZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRMaWdodEhlbHBlcic7XG5cdFx0dGhpcy5tYXRyaXggPSB0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0Lypcblx0XHQvLyBUT0RPOiBkZWxldGUgdGhpcyBjb21tZW50P1xuXHRcdGNvbnN0IGRpc3RhbmNlR2VvbWV0cnkgPSBuZXcgVEhSRUUuSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSggMSwgMiApO1xuXHRcdGNvbnN0IGRpc3RhbmNlTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGhleENvbG9yLCBmb2c6IGZhbHNlLCB3aXJlZnJhbWU6IHRydWUsIG9wYWNpdHk6IDAuMSwgdHJhbnNwYXJlbnQ6IHRydWUgfSApO1xuXHRcdHRoaXMubGlnaHRTcGhlcmUgPSBuZXcgVEhSRUUuTWVzaCggYnVsYkdlb21ldHJ5LCBidWxiTWF0ZXJpYWwgKTtcblx0XHR0aGlzLmxpZ2h0RGlzdGFuY2UgPSBuZXcgVEhSRUUuTWVzaCggZGlzdGFuY2VHZW9tZXRyeSwgZGlzdGFuY2VNYXRlcmlhbCApO1xuXHRcdGNvbnN0IGQgPSBsaWdodC5kaXN0YW5jZTtcblx0XHRpZiAoIGQgPT09IDAuMCApIHtcblx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS52aXNpYmxlID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS5zY2FsZS5zZXQoIGQsIGQsIGQgKTtcblx0XHR9XG5cdFx0dGhpcy5hZGQoIHRoaXMubGlnaHREaXN0YW5jZSApO1xuXHRcdCovXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdGlmICh0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7XG5cdFx0fVxuXHRcdC8qXG5cdFx0Y29uc3QgZCA9IHRoaXMubGlnaHQuZGlzdGFuY2U7XG5cdFx0XHRpZiAoIGQgPT09IDAuMCApIHtcblx0XHRcdFx0dGhpcy5saWdodERpc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS5zY2FsZS5zZXQoIGQsIGQsIGQgKTtcblx0XHRcdH1cblx0XHQqL1xuXG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2NvbG9yMSA9IC8qQF9fUFVSRV9fKi9uZXcgQ29sb3IoKTtcblxuY29uc3QgX2NvbG9yMiA9IC8qQF9fUFVSRV9fKi9uZXcgQ29sb3IoKTtcblxuY2xhc3MgSGVtaXNwaGVyZUxpZ2h0SGVscGVyIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcihsaWdodCwgc2l6ZSwgY29sb3IpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubGlnaHQgPSBsaWdodDtcblx0XHR0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy5tYXRyaXggPSBsaWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgT2N0YWhlZHJvbkdlb21ldHJ5KHNpemUpO1xuXHRcdGdlb21ldHJ5LnJvdGF0ZVkoTWF0aC5QSSAqIDAuNSk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHR3aXJlZnJhbWU6IHRydWUsXG5cdFx0XHRmb2c6IGZhbHNlLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KTtcblx0XHRpZiAodGhpcy5jb2xvciA9PT0gdW5kZWZpbmVkKSB0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycyA9IHRydWU7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XG5cdFx0Y29uc3QgY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbi5jb3VudCAqIDMpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnY29sb3InLCBuZXcgQnVmZmVyQXR0cmlidXRlKGNvbG9ycywgMykpO1xuXHRcdHRoaXMuYWRkKG5ldyBNZXNoKGdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKSk7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5jaGlsZHJlblswXS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cdFx0Y29uc3QgbWVzaCA9IHRoaXMuY2hpbGRyZW5bMF07XG5cblx0XHRpZiAodGhpcy5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29sb3JzID0gbWVzaC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ2NvbG9yJyk7XG5cblx0XHRcdF9jb2xvcjEuY29weSh0aGlzLmxpZ2h0LmNvbG9yKTtcblxuXHRcdFx0X2NvbG9yMi5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNvbG9ycy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2xvciA9IGkgPCBsIC8gMiA/IF9jb2xvcjEgOiBfY29sb3IyO1xuXHRcdFx0XHRjb2xvcnMuc2V0WFlaKGksIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb2xvcnMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdG1lc2gubG9va0F0KF92ZWN0b3IkMS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpO1xuXHR9XG5cbn1cblxuY2xhc3MgR3JpZEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cdGNvbnN0cnVjdG9yKHNpemUgPSAxMCwgZGl2aXNpb25zID0gMTAsIGNvbG9yMSA9IDB4NDQ0NDQ0LCBjb2xvcjIgPSAweDg4ODg4OCkge1xuXHRcdGNvbG9yMSA9IG5ldyBDb2xvcihjb2xvcjEpO1xuXHRcdGNvbG9yMiA9IG5ldyBDb2xvcihjb2xvcjIpO1xuXHRcdGNvbnN0IGNlbnRlciA9IGRpdmlzaW9ucyAvIDI7XG5cdFx0Y29uc3Qgc3RlcCA9IHNpemUgLyBkaXZpc2lvbnM7XG5cdFx0Y29uc3QgaGFsZlNpemUgPSBzaXplIC8gMjtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdLFxuXHRcdFx0XHRcdGNvbG9ycyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGogPSAwLCBrID0gLWhhbGZTaXplOyBpIDw9IGRpdmlzaW9uczsgaSsrLCBrICs9IHN0ZXApIHtcblx0XHRcdHZlcnRpY2VzLnB1c2goLWhhbGZTaXplLCAwLCBrLCBoYWxmU2l6ZSwgMCwgayk7XG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKGssIDAsIC1oYWxmU2l6ZSwgaywgMCwgaGFsZlNpemUpO1xuXHRcdFx0Y29uc3QgY29sb3IgPSBpID09PSBjZW50ZXIgPyBjb2xvcjEgOiBjb2xvcjI7XG5cdFx0XHRjb2xvci50b0FycmF5KGNvbG9ycywgaik7XG5cdFx0XHRqICs9IDM7XG5cdFx0XHRjb2xvci50b0FycmF5KGNvbG9ycywgaik7XG5cdFx0XHRqICs9IDM7XG5cdFx0XHRjb2xvci50b0FycmF5KGNvbG9ycywgaik7XG5cdFx0XHRqICs9IDM7XG5cdFx0XHRjb2xvci50b0FycmF5KGNvbG9ycywgaik7XG5cdFx0XHRqICs9IDM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3JzLCAzKSk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0dmVydGV4Q29sb3JzOiB0cnVlLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdHcmlkSGVscGVyJztcblx0fVxuXG59XG5cbmNsYXNzIFBvbGFyR3JpZEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEwLCByYWRpYWxzID0gMTYsIGNpcmNsZXMgPSA4LCBkaXZpc2lvbnMgPSA2NCwgY29sb3IxID0gMHg0NDQ0NDQsIGNvbG9yMiA9IDB4ODg4ODg4KSB7XG5cdFx0Y29sb3IxID0gbmV3IENvbG9yKGNvbG9yMSk7XG5cdFx0Y29sb3IyID0gbmV3IENvbG9yKGNvbG9yMik7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbXTsgLy8gY3JlYXRlIHRoZSByYWRpYWxzXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSByYWRpYWxzOyBpKyspIHtcblx0XHRcdGNvbnN0IHYgPSBpIC8gcmFkaWFscyAqIChNYXRoLlBJICogMik7XG5cdFx0XHRjb25zdCB4ID0gTWF0aC5zaW4odikgKiByYWRpdXM7XG5cdFx0XHRjb25zdCB6ID0gTWF0aC5jb3ModikgKiByYWRpdXM7XG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKDAsIDAsIDApO1xuXHRcdFx0dmVydGljZXMucHVzaCh4LCAwLCB6KTtcblx0XHRcdGNvbnN0IGNvbG9yID0gaSAmIDEgPyBjb2xvcjEgOiBjb2xvcjI7XG5cdFx0XHRjb2xvcnMucHVzaChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcblx0XHRcdGNvbG9ycy5wdXNoKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuXHRcdH0gLy8gY3JlYXRlIHRoZSBjaXJjbGVzXG5cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGNpcmNsZXM7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sb3IgPSBpICYgMSA/IGNvbG9yMSA6IGNvbG9yMjtcblx0XHRcdGNvbnN0IHIgPSByYWRpdXMgLSByYWRpdXMgLyBjaXJjbGVzICogaTtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBkaXZpc2lvbnM7IGorKykge1xuXHRcdFx0XHQvLyBmaXJzdCB2ZXJ0ZXhcblx0XHRcdFx0bGV0IHYgPSBqIC8gZGl2aXNpb25zICogKE1hdGguUEkgKiAyKTtcblx0XHRcdFx0bGV0IHggPSBNYXRoLnNpbih2KSAqIHI7XG5cdFx0XHRcdGxldCB6ID0gTWF0aC5jb3ModikgKiByO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHgsIDAsIHopO1xuXHRcdFx0XHRjb2xvcnMucHVzaChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTsgLy8gc2Vjb25kIHZlcnRleFxuXG5cdFx0XHRcdHYgPSAoaiArIDEpIC8gZGl2aXNpb25zICogKE1hdGguUEkgKiAyKTtcblx0XHRcdFx0eCA9IE1hdGguc2luKHYpICogcjtcblx0XHRcdFx0eiA9IE1hdGguY29zKHYpICogcjtcblx0XHRcdFx0dmVydGljZXMucHVzaCh4LCAwLCB6KTtcblx0XHRcdFx0Y29sb3JzLnB1c2goY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3JzLCAzKSk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0dmVydGV4Q29sb3JzOiB0cnVlLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdQb2xhckdyaWRIZWxwZXInO1xuXHR9XG5cbn1cblxuY29uc3QgX3YxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdjMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgRGlyZWN0aW9uYWxMaWdodEhlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IobGlnaHQsIHNpemUsIGNvbG9yKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5jb2xvciA9IGNvbG9yO1xuXHRcdGlmIChzaXplID09PSB1bmRlZmluZWQpIHNpemUgPSAxO1xuXHRcdGxldCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShbLXNpemUsIHNpemUsIDAsIHNpemUsIHNpemUsIDAsIHNpemUsIC1zaXplLCAwLCAtc2l6ZSwgLXNpemUsIDAsIC1zaXplLCBzaXplLCAwXSwgMykpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGZvZzogZmFsc2UsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pO1xuXHRcdHRoaXMubGlnaHRQbGFuZSA9IG5ldyBMaW5lKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy5hZGQodGhpcy5saWdodFBsYW5lKTtcblx0XHRnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShbMCwgMCwgMCwgMCwgMCwgMV0sIDMpKTtcblx0XHR0aGlzLnRhcmdldExpbmUgPSBuZXcgTGluZShnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMuYWRkKHRoaXMudGFyZ2V0TGluZSk7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5saWdodFBsYW5lLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRfdjEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpO1xuXG5cdFx0X3YyLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7XG5cblx0XHRfdjMuc3ViVmVjdG9ycyhfdjIsIF92MSk7XG5cblx0XHR0aGlzLmxpZ2h0UGxhbmUubG9va0F0KF92Mik7XG5cblx0XHRpZiAodGhpcy5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpO1xuXHRcdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7XG5cdFx0XHR0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKTtcblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldExpbmUubG9va0F0KF92Mik7XG5cdFx0dGhpcy50YXJnZXRMaW5lLnNjYWxlLnogPSBfdjMubGVuZ3RoKCk7XG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9jYW1lcmEgPSAvKkBfX1BVUkVfXyovbmV3IENhbWVyYSgpO1xuLyoqXG4gKlx0LSBzaG93cyBmcnVzdHVtLCBsaW5lIG9mIHNpZ2h0IGFuZCB1cCBvZiB0aGUgY2FtZXJhXG4gKlx0LSBzdWl0YWJsZSBmb3IgZmFzdCB1cGRhdGVzXG4gKiBcdC0gYmFzZWQgb24gZnJ1c3R1bSB2aXN1YWxpemF0aW9uIGluIGxpZ2h0Z2wuanMgc2hhZG93bWFwIGV4YW1wbGVcbiAqXHRcdGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9saWdodGdsLmpzL2Jsb2IvbWFzdGVyL3Rlc3RzL3NoYWRvd21hcC5odG1sXG4gKi9cblxuXG5jbGFzcyBDYW1lcmFIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXHRjb25zdHJ1Y3RvcihjYW1lcmEpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiAweGZmZmZmZixcblx0XHRcdHZlcnRleENvbG9yczogdHJ1ZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbXTtcblx0XHRjb25zdCBwb2ludE1hcCA9IHt9OyAvLyBjb2xvcnNcblxuXHRcdGNvbnN0IGNvbG9yRnJ1c3R1bSA9IG5ldyBDb2xvcigweGZmYWEwMCk7XG5cdFx0Y29uc3QgY29sb3JDb25lID0gbmV3IENvbG9yKDB4ZmYwMDAwKTtcblx0XHRjb25zdCBjb2xvclVwID0gbmV3IENvbG9yKDB4MDBhYWZmKTtcblx0XHRjb25zdCBjb2xvclRhcmdldCA9IG5ldyBDb2xvcigweGZmZmZmZik7XG5cdFx0Y29uc3QgY29sb3JDcm9zcyA9IG5ldyBDb2xvcigweDMzMzMzMyk7IC8vIG5lYXJcblxuXHRcdGFkZExpbmUoJ24xJywgJ24yJywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCduMicsICduNCcsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnbjQnLCAnbjMnLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ24zJywgJ24xJywgY29sb3JGcnVzdHVtKTsgLy8gZmFyXG5cblx0XHRhZGRMaW5lKCdmMScsICdmMicsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnZjInLCAnZjQnLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ2Y0JywgJ2YzJywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCdmMycsICdmMScsIGNvbG9yRnJ1c3R1bSk7IC8vIHNpZGVzXG5cblx0XHRhZGRMaW5lKCduMScsICdmMScsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnbjInLCAnZjInLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ24zJywgJ2YzJywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCduNCcsICdmNCcsIGNvbG9yRnJ1c3R1bSk7IC8vIGNvbmVcblxuXHRcdGFkZExpbmUoJ3AnLCAnbjEnLCBjb2xvckNvbmUpO1xuXHRcdGFkZExpbmUoJ3AnLCAnbjInLCBjb2xvckNvbmUpO1xuXHRcdGFkZExpbmUoJ3AnLCAnbjMnLCBjb2xvckNvbmUpO1xuXHRcdGFkZExpbmUoJ3AnLCAnbjQnLCBjb2xvckNvbmUpOyAvLyB1cFxuXG5cdFx0YWRkTGluZSgndTEnLCAndTInLCBjb2xvclVwKTtcblx0XHRhZGRMaW5lKCd1MicsICd1MycsIGNvbG9yVXApO1xuXHRcdGFkZExpbmUoJ3UzJywgJ3UxJywgY29sb3JVcCk7IC8vIHRhcmdldFxuXG5cdFx0YWRkTGluZSgnYycsICd0JywgY29sb3JUYXJnZXQpO1xuXHRcdGFkZExpbmUoJ3AnLCAnYycsIGNvbG9yQ3Jvc3MpOyAvLyBjcm9zc1xuXG5cdFx0YWRkTGluZSgnY24xJywgJ2NuMicsIGNvbG9yQ3Jvc3MpO1xuXHRcdGFkZExpbmUoJ2NuMycsICdjbjQnLCBjb2xvckNyb3NzKTtcblx0XHRhZGRMaW5lKCdjZjEnLCAnY2YyJywgY29sb3JDcm9zcyk7XG5cdFx0YWRkTGluZSgnY2YzJywgJ2NmNCcsIGNvbG9yQ3Jvc3MpO1xuXG5cdFx0ZnVuY3Rpb24gYWRkTGluZShhLCBiLCBjb2xvcikge1xuXHRcdFx0YWRkUG9pbnQoYSwgY29sb3IpO1xuXHRcdFx0YWRkUG9pbnQoYiwgY29sb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZFBvaW50KGlkLCBjb2xvcikge1xuXHRcdFx0dmVydGljZXMucHVzaCgwLCAwLCAwKTtcblx0XHRcdGNvbG9ycy5wdXNoKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuXG5cdFx0XHRpZiAocG9pbnRNYXBbaWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cG9pbnRNYXBbaWRdID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHBvaW50TWFwW2lkXS5wdXNoKHZlcnRpY2VzLmxlbmd0aCAvIDMgLSAxKTtcblx0XHR9XG5cblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3JzLCAzKSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnQ2FtZXJhSGVscGVyJztcblx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0XHRpZiAodGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCkgdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdHRoaXMubWF0cml4ID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMucG9pbnRNYXAgPSBwb2ludE1hcDtcblx0XHR0aGlzLnVwZGF0ZSgpO1xuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBwb2ludE1hcCA9IHRoaXMucG9pbnRNYXA7XG5cdFx0Y29uc3QgdyA9IDEsXG5cdFx0XHRcdFx0aCA9IDE7IC8vIHdlIG5lZWQganVzdCBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXggaW52ZXJzZVxuXHRcdC8vIHdvcmxkIG1hdHJpeCBtdXN0IGJlIGlkZW50aXR5XG5cblx0XHRfY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UpOyAvLyBjZW50ZXIgLyB0YXJnZXRcblxuXG5cdFx0c2V0UG9pbnQoJ2MnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIDAsIC0xKTtcblx0XHRzZXRQb2ludCgndCcsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgMCwgMSk7IC8vIG5lYXJcblxuXHRcdHNldFBvaW50KCduMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLXcsIC1oLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ24yJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCAtaCwgLTEpO1xuXHRcdHNldFBvaW50KCduMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLXcsIGgsIC0xKTtcblx0XHRzZXRQb2ludCgnbjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIGgsIC0xKTsgLy8gZmFyXG5cblx0XHRzZXRQb2ludCgnZjEnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC13LCAtaCwgMSk7XG5cdFx0c2V0UG9pbnQoJ2YyJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCAtaCwgMSk7XG5cdFx0c2V0UG9pbnQoJ2YzJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtdywgaCwgMSk7XG5cdFx0c2V0UG9pbnQoJ2Y0JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCBoLCAxKTsgLy8gdXBcblxuXHRcdHNldFBvaW50KCd1MScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdyAqIDAuNywgaCAqIDEuMSwgLTEpO1xuXHRcdHNldFBvaW50KCd1MicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLXcgKiAwLjcsIGggKiAxLjEsIC0xKTtcblx0XHRzZXRQb2ludCgndTMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGggKiAyLCAtMSk7IC8vIGNyb3NzXG5cblx0XHRzZXRQb2ludCgnY2YxJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtdywgMCwgMSk7XG5cdFx0c2V0UG9pbnQoJ2NmMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgMCwgMSk7XG5cdFx0c2V0UG9pbnQoJ2NmMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgLWgsIDEpO1xuXHRcdHNldFBvaW50KCdjZjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGgsIDEpO1xuXHRcdHNldFBvaW50KCdjbjEnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC13LCAwLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ2NuMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgMCwgLTEpO1xuXHRcdHNldFBvaW50KCdjbjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIC1oLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ2NuNCcsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgaCwgLTEpO1xuXHRcdGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0UG9pbnQocG9pbnQsIHBvaW50TWFwLCBnZW9tZXRyeSwgY2FtZXJhLCB4LCB5LCB6KSB7XG5cdF92ZWN0b3Iuc2V0KHgsIHksIHopLnVucHJvamVjdChjYW1lcmEpO1xuXG5cdGNvbnN0IHBvaW50cyA9IHBvaW50TWFwW3BvaW50XTtcblxuXHRpZiAocG9pbnRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0cG9zaXRpb24uc2V0WFlaKHBvaW50c1tpXSwgX3ZlY3Rvci54LCBfdmVjdG9yLnksIF92ZWN0b3Iueik7XG5cdFx0fVxuXHR9XG59XG5cbmNvbnN0IF9ib3ggPSAvKkBfX1BVUkVfXyovbmV3IEJveDMoKTtcblxuY2xhc3MgQm94SGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblx0Y29uc3RydWN0b3Iob2JqZWN0LCBjb2xvciA9IDB4ZmZmZjAwKSB7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMSwgMiwgMiwgMywgMywgMCwgNCwgNSwgNSwgNiwgNiwgNywgNywgNCwgMCwgNCwgMSwgNSwgMiwgNiwgMywgN10pO1xuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoOCAqIDMpO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0SW5kZXgobmV3IEJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKSk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zLCAzKSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRjb2xvcjogY29sb3IsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pKTtcblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLnR5cGUgPSAnQm94SGVscGVyJztcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLnVwZGF0ZSgpO1xuXHR9XG5cblx0dXBkYXRlKG9iamVjdCkge1xuXHRcdGlmIChvYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2JveC5zZXRGcm9tT2JqZWN0KHRoaXMub2JqZWN0KTtcblx0XHR9XG5cblx0XHRpZiAoX2JveC5pc0VtcHR5KCkpIHJldHVybjtcblx0XHRjb25zdCBtaW4gPSBfYm94Lm1pbjtcblx0XHRjb25zdCBtYXggPSBfYm94Lm1heDtcblx0XHQvKlxuXHRcdFx0NV9fX180XG5cdFx0MS9fX18wL3xcblx0XHR8IDZfX3xfN1xuXHRcdDIvX19fMy9cblx0XHRcdDA6IG1heC54LCBtYXgueSwgbWF4Lnpcblx0XHQxOiBtaW4ueCwgbWF4LnksIG1heC56XG5cdFx0MjogbWluLngsIG1pbi55LCBtYXguelxuXHRcdDM6IG1heC54LCBtaW4ueSwgbWF4Lnpcblx0XHQ0OiBtYXgueCwgbWF4LnksIG1pbi56XG5cdFx0NTogbWluLngsIG1heC55LCBtaW4uelxuXHRcdDY6IG1pbi54LCBtaW4ueSwgbWluLnpcblx0XHQ3OiBtYXgueCwgbWluLnksIG1pbi56XG5cdFx0Ki9cblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IGFycmF5ID0gcG9zaXRpb24uYXJyYXk7XG5cdFx0YXJyYXlbMF0gPSBtYXgueDtcblx0XHRhcnJheVsxXSA9IG1heC55O1xuXHRcdGFycmF5WzJdID0gbWF4Lno7XG5cdFx0YXJyYXlbM10gPSBtaW4ueDtcblx0XHRhcnJheVs0XSA9IG1heC55O1xuXHRcdGFycmF5WzVdID0gbWF4Lno7XG5cdFx0YXJyYXlbNl0gPSBtaW4ueDtcblx0XHRhcnJheVs3XSA9IG1pbi55O1xuXHRcdGFycmF5WzhdID0gbWF4Lno7XG5cdFx0YXJyYXlbOV0gPSBtYXgueDtcblx0XHRhcnJheVsxMF0gPSBtaW4ueTtcblx0XHRhcnJheVsxMV0gPSBtYXguejtcblx0XHRhcnJheVsxMl0gPSBtYXgueDtcblx0XHRhcnJheVsxM10gPSBtYXgueTtcblx0XHRhcnJheVsxNF0gPSBtaW4uejtcblx0XHRhcnJheVsxNV0gPSBtaW4ueDtcblx0XHRhcnJheVsxNl0gPSBtYXgueTtcblx0XHRhcnJheVsxN10gPSBtaW4uejtcblx0XHRhcnJheVsxOF0gPSBtaW4ueDtcblx0XHRhcnJheVsxOV0gPSBtaW4ueTtcblx0XHRhcnJheVsyMF0gPSBtaW4uejtcblx0XHRhcnJheVsyMV0gPSBtYXgueDtcblx0XHRhcnJheVsyMl0gPSBtaW4ueTtcblx0XHRhcnJheVsyM10gPSBtaW4uejtcblx0XHRwb3NpdGlvbi5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblx0fVxuXG5cdHNldEZyb21PYmplY3Qob2JqZWN0KSB7XG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0TGluZVNlZ21lbnRzLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywgc291cmNlKTtcblx0XHR0aGlzLm9iamVjdCA9IHNvdXJjZS5vYmplY3Q7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBCb3gzSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblx0Y29uc3RydWN0b3IoYm94LCBjb2xvciA9IDB4ZmZmZjAwKSB7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMSwgMiwgMiwgMywgMywgMCwgNCwgNSwgNSwgNiwgNiwgNywgNywgNCwgMCwgNCwgMSwgNSwgMiwgNiwgMywgN10pO1xuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IFsxLCAxLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgMSwgMSwgMSwgLTEsIC0xLCAxLCAtMSwgLTEsIC0xLCAtMSwgMSwgLTEsIC0xXTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEluZGV4KG5ldyBCdWZmZXJBdHRyaWJ1dGUoaW5kaWNlcywgMSkpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbnMsIDMpKTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSkpO1xuXHRcdHRoaXMuYm94ID0gYm94O1xuXHRcdHRoaXMudHlwZSA9ICdCb3gzSGVscGVyJztcblx0XHR0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoZm9yY2UpIHtcblx0XHRjb25zdCBib3ggPSB0aGlzLmJveDtcblx0XHRpZiAoYm94LmlzRW1wdHkoKSkgcmV0dXJuO1xuXHRcdGJveC5nZXRDZW50ZXIodGhpcy5wb3NpdGlvbik7XG5cdFx0Ym94LmdldFNpemUodGhpcy5zY2FsZSk7XG5cdFx0dGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0fVxuXG59XG5cbmNsYXNzIFBsYW5lSGVscGVyIGV4dGVuZHMgTGluZSB7XG5cdGNvbnN0cnVjdG9yKHBsYW5lLCBzaXplID0gMSwgaGV4ID0gMHhmZmZmMDApIHtcblx0XHRjb25zdCBjb2xvciA9IGhleDtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAxLCAtMSwgLTEsIDEsIDEsIC0xLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwXTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbnMsIDMpKTtcblx0XHRnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSkpO1xuXHRcdHRoaXMudHlwZSA9ICdQbGFuZUhlbHBlcic7XG5cdFx0dGhpcy5wbGFuZSA9IHBsYW5lO1xuXHRcdHRoaXMuc2l6ZSA9IHNpemU7XG5cdFx0Y29uc3QgcG9zaXRpb25zMiA9IFsxLCAxLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgLTEsIDEsIDEsIC0xLCAxXTtcblx0XHRjb25zdCBnZW9tZXRyeTIgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeTIuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uczIsIDMpKTtcblx0XHRnZW9tZXRyeTIuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cdFx0dGhpcy5hZGQobmV3IE1lc2goZ2VvbWV0cnkyLCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0Y29sb3I6IGNvbG9yLFxuXHRcdFx0b3BhY2l0eTogMC4yLFxuXHRcdFx0dHJhbnNwYXJlbnQ6IHRydWUsXG5cdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSkpKTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0bGV0IHNjYWxlID0gLXRoaXMucGxhbmUuY29uc3RhbnQ7XG5cdFx0aWYgKE1hdGguYWJzKHNjYWxlKSA8IDFlLTgpIHNjYWxlID0gMWUtODsgLy8gc2lnbiBkb2VzIG5vdCBtYXR0ZXJcblxuXHRcdHRoaXMuc2NhbGUuc2V0KDAuNSAqIHRoaXMuc2l6ZSwgMC41ICogdGhpcy5zaXplLCBzY2FsZSk7XG5cdFx0dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlID0gc2NhbGUgPCAwID8gQmFja1NpZGUgOiBGcm9udFNpZGU7IC8vIHJlbmRlcmVyIGZsaXBzIHNpZGUgd2hlbiBkZXRlcm1pbmFudCA8IDA7IGZsaXBwaW5nIG5vdCB3YW50ZWQgaGVyZVxuXG5cdFx0dGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpO1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0fVxuXG59XG5cbmNvbnN0IF9heGlzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmxldCBfbGluZUdlb21ldHJ5LCBfY29uZUdlb21ldHJ5O1xuXG5jbGFzcyBBcnJvd0hlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblx0Ly8gZGlyIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXHRjb25zdHJ1Y3RvcihkaXIgPSBuZXcgVmVjdG9yMygwLCAwLCAxKSwgb3JpZ2luID0gbmV3IFZlY3RvcjMoMCwgMCwgMCksIGxlbmd0aCA9IDEsIGNvbG9yID0gMHhmZmZmMDAsIGhlYWRMZW5ndGggPSBsZW5ndGggKiAwLjIsIGhlYWRXaWR0aCA9IGhlYWRMZW5ndGggKiAwLjIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdBcnJvd0hlbHBlcic7XG5cblx0XHRpZiAoX2xpbmVHZW9tZXRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfbGluZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRcdF9saW5lR2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKFswLCAwLCAwLCAwLCAxLCAwXSwgMykpO1xuXG5cdFx0XHRfY29uZUdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoMCwgMC41LCAxLCA1LCAxKTtcblxuXHRcdFx0X2NvbmVHZW9tZXRyeS50cmFuc2xhdGUoMCwgLTAuNSwgMCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KG9yaWdpbik7XG5cdFx0dGhpcy5saW5lID0gbmV3IExpbmUoX2xpbmVHZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSkpO1xuXHRcdHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5hZGQodGhpcy5saW5lKTtcblx0XHR0aGlzLmNvbmUgPSBuZXcgTWVzaChfY29uZUdlb21ldHJ5LCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0Y29sb3I6IGNvbG9yLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KSk7XG5cdFx0dGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmFkZCh0aGlzLmNvbmUpO1xuXHRcdHRoaXMuc2V0RGlyZWN0aW9uKGRpcik7XG5cdFx0dGhpcy5zZXRMZW5ndGgobGVuZ3RoLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xuXHR9XG5cblx0c2V0RGlyZWN0aW9uKGRpcikge1xuXHRcdC8vIGRpciBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHRpZiAoZGlyLnkgPiAwLjk5OTk5KSB7XG5cdFx0XHR0aGlzLnF1YXRlcm5pb24uc2V0KDAsIDAsIDAsIDEpO1xuXHRcdH0gZWxzZSBpZiAoZGlyLnkgPCAtMC45OTk5OSkge1xuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnNldCgxLCAwLCAwLCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X2F4aXMuc2V0KGRpci56LCAwLCAtZGlyLngpLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRjb25zdCByYWRpYW5zID0gTWF0aC5hY29zKGRpci55KTtcblx0XHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKF9heGlzLCByYWRpYW5zKTtcblx0XHR9XG5cdH1cblxuXHRzZXRMZW5ndGgobGVuZ3RoLCBoZWFkTGVuZ3RoID0gbGVuZ3RoICogMC4yLCBoZWFkV2lkdGggPSBoZWFkTGVuZ3RoICogMC4yKSB7XG5cdFx0dGhpcy5saW5lLnNjYWxlLnNldCgxLCBNYXRoLm1heCgwLjAwMDEsIGxlbmd0aCAtIGhlYWRMZW5ndGgpLCAxKTsgLy8gc2VlICMxNzQ1OFxuXG5cdFx0dGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMuY29uZS5zY2FsZS5zZXQoaGVhZFdpZHRoLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xuXHRcdHRoaXMuY29uZS5wb3NpdGlvbi55ID0gbGVuZ3RoO1xuXHRcdHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKTtcblx0fVxuXG5cdHNldENvbG9yKGNvbG9yKSB7XG5cdFx0dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLnNldChjb2xvcik7XG5cdFx0dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldChjb2xvcik7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlLCBmYWxzZSk7XG5cdFx0dGhpcy5saW5lLmNvcHkoc291cmNlLmxpbmUpO1xuXHRcdHRoaXMuY29uZS5jb3B5KHNvdXJjZS5jb25lKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIEF4ZXNIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXHRjb25zdHJ1Y3RvcihzaXplID0gMSkge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gWzAsIDAsIDAsIHNpemUsIDAsIDAsIDAsIDAsIDAsIDAsIHNpemUsIDAsIDAsIDAsIDAsIDAsIDAsIHNpemVdO1xuXHRcdGNvbnN0IGNvbG9ycyA9IFsxLCAwLCAwLCAxLCAwLjYsIDAsIDAsIDEsIDAsIDAuNiwgMSwgMCwgMCwgMCwgMSwgMCwgMC42LCAxXTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnY29sb3InLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShjb2xvcnMsIDMpKTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHR2ZXJ0ZXhDb2xvcnM6IHRydWUsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pO1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy50eXBlID0gJ0F4ZXNIZWxwZXInO1xuXHR9XG5cblx0c2V0Q29sb3JzKHhBeGlzQ29sb3IsIHlBeGlzQ29sb3IsIHpBeGlzQ29sb3IpIHtcblx0XHRjb25zdCBjb2xvciA9IG5ldyBDb2xvcigpO1xuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O1xuXHRcdGNvbG9yLnNldCh4QXhpc0NvbG9yKTtcblx0XHRjb2xvci50b0FycmF5KGFycmF5LCAwKTtcblx0XHRjb2xvci50b0FycmF5KGFycmF5LCAzKTtcblx0XHRjb2xvci5zZXQoeUF4aXNDb2xvcik7XG5cdFx0Y29sb3IudG9BcnJheShhcnJheSwgNik7XG5cdFx0Y29sb3IudG9BcnJheShhcnJheSwgOSk7XG5cdFx0Y29sb3Iuc2V0KHpBeGlzQ29sb3IpO1xuXHRcdGNvbG9yLnRvQXJyYXkoYXJyYXksIDEyKTtcblx0XHRjb2xvci50b0FycmF5KGFycmF5LCAxNSk7XG5cdFx0dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZVBhdGgge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnR5cGUgPSAnU2hhcGVQYXRoJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCk7XG5cdFx0dGhpcy5zdWJQYXRocyA9IFtdO1xuXHRcdHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXHR9XG5cblx0bW92ZVRvKHgsIHkpIHtcblx0XHR0aGlzLmN1cnJlbnRQYXRoID0gbmV3IFBhdGgoKTtcblx0XHR0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCk7XG5cdFx0dGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8oeCwgeSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsaW5lVG8oeCwgeSkge1xuXHRcdHRoaXMuY3VycmVudFBhdGgubGluZVRvKHgsIHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cXVhZHJhdGljQ3VydmVUbyhhQ1B4LCBhQ1B5LCBhWCwgYVkpIHtcblx0XHR0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8oYUNQeCwgYUNQeSwgYVgsIGFZKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGJlemllckN1cnZlVG8oYUNQMXgsIGFDUDF5LCBhQ1AyeCwgYUNQMnksIGFYLCBhWSkge1xuXHRcdHRoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyhhQ1AxeCwgYUNQMXksIGFDUDJ4LCBhQ1AyeSwgYVgsIGFZKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNwbGluZVRocnUocHRzKSB7XG5cdFx0dGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHB0cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b1NoYXBlcyhpc0NDVywgbm9Ib2xlcykge1xuXHRcdGZ1bmN0aW9uIHRvU2hhcGVzTm9Ib2xlcyhpblN1YnBhdGhzKSB7XG5cdFx0XHRjb25zdCBzaGFwZXMgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBpblN1YnBhdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCB0bXBQYXRoID0gaW5TdWJwYXRoc1tpXTtcblx0XHRcdFx0Y29uc3QgdG1wU2hhcGUgPSBuZXcgU2hhcGUoKTtcblx0XHRcdFx0dG1wU2hhcGUuY3VydmVzID0gdG1wUGF0aC5jdXJ2ZXM7XG5cdFx0XHRcdHNoYXBlcy5wdXNoKHRtcFNoYXBlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNoYXBlcztcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1BvaW50SW5zaWRlUG9seWdvbihpblB0LCBpblBvbHlnb24pIHtcblx0XHRcdGNvbnN0IHBvbHlMZW4gPSBpblBvbHlnb24ubGVuZ3RoOyAvLyBpblB0IG9uIHBvbHlnb24gY29udG91ciA9PiBpbW1lZGlhdGUgc3VjY2Vzc1x0XHRvclxuXHRcdFx0Ly8gdG9nZ2xpbmcgb2YgaW5zaWRlL291dHNpZGUgYXQgZXZlcnkgc2luZ2xlISBpbnRlcnNlY3Rpb24gcG9pbnQgb2YgYW4gZWRnZVxuXHRcdFx0Ly9cdHdpdGggdGhlIGhvcml6b250YWwgbGluZSB0aHJvdWdoIGluUHQsIGxlZnQgb2YgaW5QdFxuXHRcdFx0Ly9cdG5vdCBjb3VudGluZyBsb3dlclkgZW5kcG9pbnRzIG9mIGVkZ2VzIGFuZCB3aG9sZSBlZGdlcyBvbiB0aGF0IGxpbmVcblxuXHRcdFx0bGV0IGluc2lkZSA9IGZhbHNlO1xuXG5cdFx0XHRmb3IgKGxldCBwID0gcG9seUxlbiAtIDEsIHEgPSAwOyBxIDwgcG9seUxlbjsgcCA9IHErKykge1xuXHRcdFx0XHRsZXQgZWRnZUxvd1B0ID0gaW5Qb2x5Z29uW3BdO1xuXHRcdFx0XHRsZXQgZWRnZUhpZ2hQdCA9IGluUG9seWdvbltxXTtcblx0XHRcdFx0bGV0IGVkZ2VEeCA9IGVkZ2VIaWdoUHQueCAtIGVkZ2VMb3dQdC54O1xuXHRcdFx0XHRsZXQgZWRnZUR5ID0gZWRnZUhpZ2hQdC55IC0gZWRnZUxvd1B0Lnk7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKGVkZ2VEeSkgPiBOdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0XHRcdC8vIG5vdCBwYXJhbGxlbFxuXHRcdFx0XHRcdGlmIChlZGdlRHkgPCAwKSB7XG5cdFx0XHRcdFx0XHRlZGdlTG93UHQgPSBpblBvbHlnb25bcV07XG5cdFx0XHRcdFx0XHRlZGdlRHggPSAtZWRnZUR4O1xuXHRcdFx0XHRcdFx0ZWRnZUhpZ2hQdCA9IGluUG9seWdvbltwXTtcblx0XHRcdFx0XHRcdGVkZ2VEeSA9IC1lZGdlRHk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGluUHQueSA8IGVkZ2VMb3dQdC55IHx8IGluUHQueSA+IGVkZ2VIaWdoUHQueSkgY29udGludWU7XG5cblx0XHRcdFx0XHRpZiAoaW5QdC55ID09PSBlZGdlTG93UHQueSkge1xuXHRcdFx0XHRcdFx0aWYgKGluUHQueCA9PT0gZWRnZUxvd1B0LngpIHJldHVybiB0cnVlOyAvLyBpblB0IGlzIG9uIGNvbnRvdXIgP1xuXHRcdFx0XHRcdFx0Ly8gY29udGludWU7XHRcdFx0XHQvLyBubyBpbnRlcnNlY3Rpb24gb3IgZWRnZUxvd1B0ID0+IGRvZXNuJ3QgY291bnQgISEhXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHBlcnBFZGdlID0gZWRnZUR5ICogKGluUHQueCAtIGVkZ2VMb3dQdC54KSAtIGVkZ2VEeCAqIChpblB0LnkgLSBlZGdlTG93UHQueSk7XG5cdFx0XHRcdFx0XHRpZiAocGVycEVkZ2UgPT09IDApIHJldHVybiB0cnVlOyAvLyBpblB0IGlzIG9uIGNvbnRvdXIgP1xuXG5cdFx0XHRcdFx0XHRpZiAocGVycEVkZ2UgPCAwKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGluc2lkZSA9ICFpbnNpZGU7IC8vIHRydWUgaW50ZXJzZWN0aW9uIGxlZnQgb2YgaW5QdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBwYXJhbGxlbCBvciBjb2xsaW5lYXJcblx0XHRcdFx0XHRpZiAoaW5QdC55ICE9PSBlZGdlTG93UHQueSkgY29udGludWU7IC8vIHBhcmFsbGVsXG5cdFx0XHRcdFx0Ly8gZWRnZSBsaWVzIG9uIHRoZSBzYW1lIGhvcml6b250YWwgbGluZSBhcyBpblB0XG5cblx0XHRcdFx0XHRpZiAoZWRnZUhpZ2hQdC54IDw9IGluUHQueCAmJiBpblB0LnggPD0gZWRnZUxvd1B0LnggfHwgZWRnZUxvd1B0LnggPD0gaW5QdC54ICYmIGluUHQueCA8PSBlZGdlSGlnaFB0LngpIHJldHVybiB0cnVlOyAvLyBpblB0OiBQb2ludCBvbiBjb250b3VyICFcblx0XHRcdFx0XHQvLyBjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaW5zaWRlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzQ2xvY2tXaXNlID0gU2hhcGVVdGlscy5pc0Nsb2NrV2lzZTtcblx0XHRjb25zdCBzdWJQYXRocyA9IHRoaXMuc3ViUGF0aHM7XG5cdFx0aWYgKHN1YlBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXHRcdGlmIChub0hvbGVzID09PSB0cnVlKSByZXR1cm4gdG9TaGFwZXNOb0hvbGVzKHN1YlBhdGhzKTtcblx0XHRsZXQgc29saWQsIHRtcFBhdGgsIHRtcFNoYXBlO1xuXHRcdGNvbnN0IHNoYXBlcyA9IFtdO1xuXG5cdFx0aWYgKHN1YlBhdGhzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dG1wUGF0aCA9IHN1YlBhdGhzWzBdO1xuXHRcdFx0dG1wU2hhcGUgPSBuZXcgU2hhcGUoKTtcblx0XHRcdHRtcFNoYXBlLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXHRcdFx0c2hhcGVzLnB1c2godG1wU2hhcGUpO1xuXHRcdFx0cmV0dXJuIHNoYXBlcztcblx0XHR9XG5cblx0XHRsZXQgaG9sZXNGaXJzdCA9ICFpc0Nsb2NrV2lzZShzdWJQYXRoc1swXS5nZXRQb2ludHMoKSk7XG5cdFx0aG9sZXNGaXJzdCA9IGlzQ0NXID8gIWhvbGVzRmlyc3QgOiBob2xlc0ZpcnN0OyAvLyBjb25zb2xlLmxvZyhcIkhvbGVzIGZpcnN0XCIsIGhvbGVzRmlyc3QpO1xuXG5cdFx0Y29uc3QgYmV0dGVyU2hhcGVIb2xlcyA9IFtdO1xuXHRcdGNvbnN0IG5ld1NoYXBlcyA9IFtdO1xuXHRcdGxldCBuZXdTaGFwZUhvbGVzID0gW107XG5cdFx0bGV0IG1haW5JZHggPSAwO1xuXHRcdGxldCB0bXBQb2ludHM7XG5cdFx0bmV3U2hhcGVzW21haW5JZHhdID0gdW5kZWZpbmVkO1xuXHRcdG5ld1NoYXBlSG9sZXNbbWFpbklkeF0gPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc3ViUGF0aHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHR0bXBQYXRoID0gc3ViUGF0aHNbaV07XG5cdFx0XHR0bXBQb2ludHMgPSB0bXBQYXRoLmdldFBvaW50cygpO1xuXHRcdFx0c29saWQgPSBpc0Nsb2NrV2lzZSh0bXBQb2ludHMpO1xuXHRcdFx0c29saWQgPSBpc0NDVyA/ICFzb2xpZCA6IHNvbGlkO1xuXG5cdFx0XHRpZiAoc29saWQpIHtcblx0XHRcdFx0aWYgKCFob2xlc0ZpcnN0ICYmIG5ld1NoYXBlc1ttYWluSWR4XSkgbWFpbklkeCsrO1xuXHRcdFx0XHRuZXdTaGFwZXNbbWFpbklkeF0gPSB7XG5cdFx0XHRcdFx0czogbmV3IFNoYXBlKCksXG5cdFx0XHRcdFx0cDogdG1wUG9pbnRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdG5ld1NoYXBlc1ttYWluSWR4XS5zLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXHRcdFx0XHRpZiAoaG9sZXNGaXJzdCkgbWFpbklkeCsrO1xuXHRcdFx0XHRuZXdTaGFwZUhvbGVzW21haW5JZHhdID0gW107IC8vY29uc29sZS5sb2coJ2N3JywgaSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTaGFwZUhvbGVzW21haW5JZHhdLnB1c2goe1xuXHRcdFx0XHRcdGg6IHRtcFBhdGgsXG5cdFx0XHRcdFx0cDogdG1wUG9pbnRzWzBdXG5cdFx0XHRcdH0pOyAvL2NvbnNvbGUubG9nKCdjY3cnLCBpKTtcblx0XHRcdH1cblx0XHR9IC8vIG9ubHkgSG9sZXM/IC0+IHByb2JhYmx5IGFsbCBTaGFwZXMgd2l0aCB3cm9uZyBvcmllbnRhdGlvblxuXG5cblx0XHRpZiAoIW5ld1NoYXBlc1swXSkgcmV0dXJuIHRvU2hhcGVzTm9Ib2xlcyhzdWJQYXRocyk7XG5cblx0XHRpZiAobmV3U2hhcGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGxldCBhbWJpZ3VvdXMgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHRvQ2hhbmdlID0gW107XG5cblx0XHRcdGZvciAobGV0IHNJZHggPSAwLCBzTGVuID0gbmV3U2hhcGVzLmxlbmd0aDsgc0lkeCA8IHNMZW47IHNJZHgrKykge1xuXHRcdFx0XHRiZXR0ZXJTaGFwZUhvbGVzW3NJZHhdID0gW107XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IHNJZHggPSAwLCBzTGVuID0gbmV3U2hhcGVzLmxlbmd0aDsgc0lkeCA8IHNMZW47IHNJZHgrKykge1xuXHRcdFx0XHRjb25zdCBzaG8gPSBuZXdTaGFwZUhvbGVzW3NJZHhdO1xuXG5cdFx0XHRcdGZvciAobGV0IGhJZHggPSAwOyBoSWR4IDwgc2hvLmxlbmd0aDsgaElkeCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgaG8gPSBzaG9baElkeF07XG5cdFx0XHRcdFx0bGV0IGhvbGVfdW5hc3NpZ25lZCA9IHRydWU7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBzMklkeCA9IDA7IHMySWR4IDwgbmV3U2hhcGVzLmxlbmd0aDsgczJJZHgrKykge1xuXHRcdFx0XHRcdFx0aWYgKGlzUG9pbnRJbnNpZGVQb2x5Z29uKGhvLnAsIG5ld1NoYXBlc1tzMklkeF0ucCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNJZHggIT09IHMySWR4KSB0b0NoYW5nZS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRmcm9tczogc0lkeCxcblx0XHRcdFx0XHRcdFx0XHR0b3M6IHMySWR4LFxuXHRcdFx0XHRcdFx0XHRcdGhvbGU6IGhJZHhcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGhvbGVfdW5hc3NpZ25lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGhvbGVfdW5hc3NpZ25lZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdGJldHRlclNoYXBlSG9sZXNbczJJZHhdLnB1c2goaG8pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFtYmlndW91cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaG9sZV91bmFzc2lnbmVkKSB7XG5cdFx0XHRcdFx0XHRiZXR0ZXJTaGFwZUhvbGVzW3NJZHhdLnB1c2goaG8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBjb25zb2xlLmxvZyhcImFtYmlndW91czogXCIsIGFtYmlndW91cyk7XG5cblxuXHRcdFx0aWYgKHRvQ2hhbmdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJ0byBjaGFuZ2U6IFwiLCB0b0NoYW5nZSk7XG5cdFx0XHRcdGlmICghYW1iaWd1b3VzKSBuZXdTaGFwZUhvbGVzID0gYmV0dGVyU2hhcGVIb2xlcztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgdG1wSG9sZXM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBuZXdTaGFwZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0dG1wU2hhcGUgPSBuZXdTaGFwZXNbaV0ucztcblx0XHRcdHNoYXBlcy5wdXNoKHRtcFNoYXBlKTtcblx0XHRcdHRtcEhvbGVzID0gbmV3U2hhcGVIb2xlc1tpXTtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDAsIGpsID0gdG1wSG9sZXMubGVuZ3RoOyBqIDwgamw7IGorKykge1xuXHRcdFx0XHR0bXBTaGFwZS5ob2xlcy5wdXNoKHRtcEhvbGVzW2pdLmgpO1xuXHRcdFx0fVxuXHRcdH0gLy9jb25zb2xlLmxvZyhcInNoYXBlXCIsIHNoYXBlcyk7XG5cblxuXHRcdHJldHVybiBzaGFwZXM7XG5cdH1cblxufVxuXG5jb25zdCBfZmxvYXRWaWV3ID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuY29uc3QgX2ludDMyVmlldyA9IG5ldyBJbnQzMkFycmF5KF9mbG9hdFZpZXcuYnVmZmVyKTtcblxuY2xhc3MgRGF0YVV0aWxzIHtcblx0Ly8gQ29udmVydHMgZmxvYXQzMiB0byBmbG9hdDE2IChzdG9yZWQgYXMgdWludDE2IHZhbHVlKS5cblx0c3RhdGljIHRvSGFsZkZsb2F0KHZhbCkge1xuXHRcdGlmICh2YWwgPiA2NTUwNCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5EYXRhVXRpbHMudG9IYWxmRmxvYXQoKTogdmFsdWUgZXhjZWVkcyA2NTUwNC4nKTtcblx0XHRcdHZhbCA9IDY1NTA0OyAvLyBtYXhpbXVtIHJlcHJlc2VudGFibGUgdmFsdWUgaW4gZmxvYXQxNlxuXHRcdH0gLy8gU291cmNlOiBodHRwOi8vZ2FtZWRldi5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTczMjYvY29udmVyc2lvbi1vZi1hLW51bWJlci1mcm9tLXNpbmdsZS1wcmVjaXNpb24tZmxvYXRpbmctcG9pbnQtcmVwcmVzZW50YXRpb24tdG8tYS8xNzQxMCMxNzQxMFxuXG5cdFx0LyogVGhpcyBtZXRob2QgaXMgZmFzdGVyIHRoYW4gdGhlIE9wZW5FWFIgaW1wbGVtZW50YXRpb24gKHZlcnkgb2Z0ZW5cblx0XHQqIHVzZWQsIGVnLiBpbiBPZ3JlKSwgd2l0aCB0aGUgYWRkaXRpb25hbCBiZW5lZml0IG9mIHJvdW5kaW5nLCBpbnNwaXJlZFxuXHRcdCogYnkgSmFtZXMgVHVyc2E/cyBoYWxmLXByZWNpc2lvbiBjb2RlLiAqL1xuXG5cblx0XHRfZmxvYXRWaWV3WzBdID0gdmFsO1xuXHRcdGNvbnN0IHggPSBfaW50MzJWaWV3WzBdO1xuXHRcdGxldCBiaXRzID0geCA+PiAxNiAmIDB4ODAwMDtcblx0XHQvKiBHZXQgdGhlIHNpZ24gKi9cblxuXHRcdGxldCBtID0geCA+PiAxMiAmIDB4MDdmZjtcblx0XHQvKiBLZWVwIG9uZSBleHRyYSBiaXQgZm9yIHJvdW5kaW5nICovXG5cblx0XHRjb25zdCBlID0geCA+PiAyMyAmIDB4ZmY7XG5cdFx0LyogVXNpbmcgaW50IGlzIGZhc3RlciBoZXJlICovXG5cblx0XHQvKiBJZiB6ZXJvLCBvciBkZW5vcm1hbCwgb3IgZXhwb25lbnQgdW5kZXJmbG93cyB0b28gbXVjaCBmb3IgYSBkZW5vcm1hbFxuXHRcdFx0KiBoYWxmLCByZXR1cm4gc2lnbmVkIHplcm8uICovXG5cblx0XHRpZiAoZSA8IDEwMykgcmV0dXJuIGJpdHM7XG5cdFx0LyogSWYgTmFOLCByZXR1cm4gTmFOLiBJZiBJbmYgb3IgZXhwb25lbnQgb3ZlcmZsb3csIHJldHVybiBJbmYuICovXG5cblx0XHRpZiAoZSA+IDE0Mikge1xuXHRcdFx0Yml0cyB8PSAweDdjMDA7XG5cdFx0XHQvKiBJZiBleHBvbmVudCB3YXMgMHhmZiBhbmQgb25lIG1hbnRpc3NhIGJpdCB3YXMgc2V0LCBpdCBtZWFucyBOYU4sXG5cdFx0XHRcdFx0XHQqIG5vdCBJbmYsIHNvIG1ha2Ugc3VyZSB3ZSBzZXQgb25lIG1hbnRpc3NhIGJpdCB0b28uICovXG5cblx0XHRcdGJpdHMgfD0gKGUgPT0gMjU1ID8gMCA6IDEpICYmIHggJiAweDAwN2ZmZmZmO1xuXHRcdFx0cmV0dXJuIGJpdHM7XG5cdFx0fVxuXHRcdC8qIElmIGV4cG9uZW50IHVuZGVyZmxvd3MgYnV0IG5vdCB0b28gbXVjaCwgcmV0dXJuIGEgZGVub3JtYWwgKi9cblxuXG5cdFx0aWYgKGUgPCAxMTMpIHtcblx0XHRcdG0gfD0gMHgwODAwO1xuXHRcdFx0LyogRXh0cmEgcm91bmRpbmcgbWF5IG92ZXJmbG93IGFuZCBzZXQgbWFudGlzc2EgdG8gMCBhbmQgZXhwb25lbnRcblx0XHRcdFx0KiB0byAxLCB3aGljaCBpcyBPSy4gKi9cblxuXHRcdFx0Yml0cyB8PSAobSA+PiAxMTQgLSBlKSArIChtID4+IDExMyAtIGUgJiAxKTtcblx0XHRcdHJldHVybiBiaXRzO1xuXHRcdH1cblxuXHRcdGJpdHMgfD0gZSAtIDExMiA8PCAxMCB8IG0gPj4gMTtcblx0XHQvKiBFeHRyYSByb3VuZGluZy4gQW4gb3ZlcmZsb3cgd2lsbCBzZXQgbWFudGlzc2EgdG8gMCBhbmQgaW5jcmVtZW50XG5cdFx0XHQqIHRoZSBleHBvbmVudCwgd2hpY2ggaXMgT0suICovXG5cblx0XHRiaXRzICs9IG0gJiAxO1xuXHRcdHJldHVybiBiaXRzO1xuXHR9XG5cbn1cblxuY29uc3QgTGluZVN0cmlwID0gMDtcbmNvbnN0IExpbmVQaWVjZXMgPSAxO1xuY29uc3QgTm9Db2xvcnMgPSAwO1xuY29uc3QgRmFjZUNvbG9ycyA9IDE7XG5jb25zdCBWZXJ0ZXhDb2xvcnMgPSAyO1xuZnVuY3Rpb24gTWVzaEZhY2VNYXRlcmlhbChtYXRlcmlhbHMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbWF0ZXJpYWxzO1xufVxuZnVuY3Rpb24gTXVsdGlNYXRlcmlhbChtYXRlcmlhbHMgPSBbXSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuJyk7XG5cdG1hdGVyaWFscy5pc011bHRpTWF0ZXJpYWwgPSB0cnVlO1xuXHRtYXRlcmlhbHMubWF0ZXJpYWxzID0gbWF0ZXJpYWxzO1xuXG5cdG1hdGVyaWFscy5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbWF0ZXJpYWxzLnNsaWNlKCk7XG5cdH07XG5cblx0cmV0dXJuIG1hdGVyaWFscztcbn1cbmZ1bmN0aW9uIFBvaW50Q2xvdWQoZ2VvbWV0cnksIG1hdGVyaWFsKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4nKTtcblx0cmV0dXJuIG5ldyBQb2ludHMoZ2VvbWV0cnksIG1hdGVyaWFsKTtcbn1cbmZ1bmN0aW9uIFBhcnRpY2xlKG1hdGVyaWFsKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuJyk7XG5cdHJldHVybiBuZXcgU3ByaXRlKG1hdGVyaWFsKTtcbn1cbmZ1bmN0aW9uIFBhcnRpY2xlU3lzdGVtKGdlb21ldHJ5LCBtYXRlcmlhbCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLicpO1xuXHRyZXR1cm4gbmV3IFBvaW50cyhnZW9tZXRyeSwgbWF0ZXJpYWwpO1xufVxuZnVuY3Rpb24gUG9pbnRDbG91ZE1hdGVyaWFsKHBhcmFtZXRlcnMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4nKTtcblx0cmV0dXJuIG5ldyBQb2ludHNNYXRlcmlhbChwYXJhbWV0ZXJzKTtcbn1cbmZ1bmN0aW9uIFBhcnRpY2xlQmFzaWNNYXRlcmlhbChwYXJhbWV0ZXJzKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyk7XG5cdHJldHVybiBuZXcgUG9pbnRzTWF0ZXJpYWwocGFyYW1ldGVycyk7XG59XG5mdW5jdGlvbiBQYXJ0aWNsZVN5c3RlbU1hdGVyaWFsKHBhcmFtZXRlcnMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyk7XG5cdHJldHVybiBuZXcgUG9pbnRzTWF0ZXJpYWwocGFyYW1ldGVycyk7XG59XG5mdW5jdGlvbiBWZXJ0ZXgoeCwgeSwgeikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IFZlY3RvcjMoeCwgeSwgeik7XG59IC8vXG5cbmZ1bmN0aW9uIER5bmFtaWNCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSgpLnNldFVzYWdlKCBUSFJFRS5EeW5hbWljRHJhd1VzYWdlICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKS5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcbn1cbmZ1bmN0aW9uIEludDhBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEludDhCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn1cbmZ1bmN0aW9uIFVpbnQ4QXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IFVpbnQ4QnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBVaW50OENsYW1wZWRBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVWludDhDbGFtcGVkQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn1cbmZ1bmN0aW9uIEludDE2QXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEludDE2QnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBVaW50MTZBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVWludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBVaW50MTZCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn1cbmZ1bmN0aW9uIEludDMyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEludDMyQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBVaW50MzJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn1cbmZ1bmN0aW9uIEZsb2F0MzJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn1cbmZ1bmN0aW9uIEZsb2F0NjRBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoYXJyYXksIGl0ZW1TaXplKTtcbn0gLy9cblxuQ3VydmUuY3JlYXRlID0gZnVuY3Rpb24gKGNvbnN0cnVjdCwgZ2V0UG9pbnQpIHtcblx0Y29uc29sZS5sb2coJ1RIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQnKTtcblx0Y29uc3RydWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ3VydmUucHJvdG90eXBlKTtcblx0Y29uc3RydWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdDtcblx0Y29uc3RydWN0LnByb3RvdHlwZS5nZXRQb2ludCA9IGdldFBvaW50O1xuXHRyZXR1cm4gY29uc3RydWN0O1xufTsgLy9cblxuXG5QYXRoLnByb3RvdHlwZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24gKHBvaW50cykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLicpO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tUG9pbnRzKHBvaW50cyk7XG59OyAvL1xuXG5cbmZ1bmN0aW9uIEF4aXNIZWxwZXIoc2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLicpO1xuXHRyZXR1cm4gbmV3IEF4ZXNIZWxwZXIoc2l6ZSk7XG59XG5mdW5jdGlvbiBCb3VuZGluZ0JveEhlbHBlcihvYmplY3QsIGNvbG9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBCb3hIZWxwZXIob2JqZWN0LCBjb2xvcik7XG59XG5mdW5jdGlvbiBFZGdlc0hlbHBlcihvYmplY3QsIGhleCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgTGluZVNlZ21lbnRzKG5ldyBFZGdlc0dlb21ldHJ5KG9iamVjdC5nZW9tZXRyeSksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0Y29sb3I6IGhleCAhPT0gdW5kZWZpbmVkID8gaGV4IDogMHhmZmZmZmZcblx0fSkpO1xufVxuXG5HcmlkSGVscGVyLnByb3RvdHlwZS5zZXRDb2xvcnMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4nKTtcbn07XG5cblNrZWxldG9uSGVscGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLicpO1xufTtcblxuZnVuY3Rpb24gV2lyZWZyYW1lSGVscGVyKG9iamVjdCwgaGV4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IExpbmVTZWdtZW50cyhuZXcgV2lyZWZyYW1lR2VvbWV0cnkob2JqZWN0Lmdlb21ldHJ5KSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRjb2xvcjogaGV4ICE9PSB1bmRlZmluZWQgPyBoZXggOiAweGZmZmZmZlxuXHR9KSk7XG59IC8vXG5cbkxvYWRlci5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2UgPSBmdW5jdGlvbiAodXJsKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UodXJsKTtcbn07XG5cbkxvYWRlci5IYW5kbGVycyA9IHtcblx0YWRkOiBmdW5jdGlvblxuXHRcdC8qIHJlZ2V4LCBsb2FkZXIgKi9cblx0KCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLicpO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uXG5cdFx0LyogZmlsZSAqL1xuXHQoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuJyk7XG5cdH1cbn07XG5mdW5jdGlvbiBYSFJMb2FkZXIobWFuYWdlcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuJyk7XG5cdHJldHVybiBuZXcgRmlsZUxvYWRlcihtYW5hZ2VyKTtcbn1cbmZ1bmN0aW9uIEJpbmFyeVRleHR1cmVMb2FkZXIobWFuYWdlcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4nKTtcblx0cmV0dXJuIG5ldyBEYXRhVGV4dHVyZUxvYWRlcihtYW5hZ2VyKTtcbn0gLy9cblxuQm94Mi5wcm90b3R5cGUuY2VudGVyID0gZnVuY3Rpb24gKG9wdGlvbmFsVGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MjogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRDZW50ZXIob3B0aW9uYWxUYXJnZXQpO1xufTtcblxuQm94Mi5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLicpO1xuXHRyZXR1cm4gdGhpcy5pc0VtcHR5KCk7XG59O1xuXG5Cb3gyLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveCA9IGZ1bmN0aW9uIChib3gpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gyOiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNCb3goYm94KTtcbn07XG5cbkJveDIucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAob3B0aW9uYWxUYXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gyOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0U2l6ZShvcHRpb25hbFRhcmdldCk7XG59OyAvL1xuXG5cbkJveDMucHJvdG90eXBlLmNlbnRlciA9IGZ1bmN0aW9uIChvcHRpb25hbFRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKG9wdGlvbmFsVGFyZ2V0KTtcbn07XG5cbkJveDMucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4nKTtcblx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xufTtcblxuQm94My5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3ggPSBmdW5jdGlvbiAoYm94KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLicpO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGJveCk7XG59O1xuXG5Cb3gzLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZSA9IGZ1bmN0aW9uIChzcGhlcmUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoc3BoZXJlKTtcbn07XG5cbkJveDMucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAob3B0aW9uYWxUYXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0U2l6ZShvcHRpb25hbFRhcmdldCk7XG59OyAvL1xuXG5cblNwaGVyZS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuJyk7XG5cdHJldHVybiB0aGlzLmlzRW1wdHkoKTtcbn07IC8vXG5cblxuRnJ1c3R1bS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLicpO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChtKTtcbn07IC8vXG5cblxuTGluZTMucHJvdG90eXBlLmNlbnRlciA9IGZ1bmN0aW9uIChvcHRpb25hbFRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldENlbnRlcihvcHRpb25hbFRhcmdldCk7XG59OyAvL1xuXG5cbk1hdHJpeDMucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0ID0gZnVuY3Rpb24gKGFycmF5LCBvZmZzZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdGhpcy50b0FycmF5KGFycmF5LCBvZmZzZXQpO1xufTtcblxuTWF0cml4My5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzID0gZnVuY3Rpb24gKHZlY3Rvcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDModGhpcyk7XG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheSA9IGZ1bmN0aW9uXG5cdC8qIGEgKi9cbigpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDModGhpcyk7XG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5ID0gZnVuY3Rpb25cblx0LyogYXJyYXksIG9mZnNldCwgbGVuZ3RoICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLmdldEludmVyc2UgPSBmdW5jdGlvbiAobWF0cml4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdGhpcy5jb3B5KG1hdHJpeCkuaW52ZXJ0KCk7XG59OyAvL1xuXG5cbk1hdHJpeDQucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbiA9IGZ1bmN0aW9uIChtKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLicpO1xuXHRyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24obSk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldCA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMudG9BcnJheShhcnJheSwgb2Zmc2V0KTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBWZWN0b3IzKCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLCAzKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24gPSBmdW5jdGlvbiAocSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4nKTtcblx0cmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24ocSk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjMgPSBmdW5jdGlvbiAodmVjdG9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCh0aGlzKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yNCA9IGZ1bmN0aW9uICh2ZWN0b3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KHRoaXMpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXkgPSBmdW5jdGlvblxuXHQvKiBhICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVBeGlzID0gZnVuY3Rpb24gKHYpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0di50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5jcm9zc1ZlY3RvciA9IGZ1bmN0aW9uICh2ZWN0b3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQodGhpcyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUucm90YXRlWCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUucm90YXRlWSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUucm90YXRlWiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUucm90YXRlQnlBeGlzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQodGhpcyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5ID0gZnVuY3Rpb25cblx0LyogYXJyYXksIG9mZnNldCwgbGVuZ3RoICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLm1ha2VGcnVzdHVtID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMubWFrZVBlcnNwZWN0aXZlKGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmdldEludmVyc2UgPSBmdW5jdGlvbiAobWF0cml4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdGhpcy5jb3B5KG1hdHJpeCkuaW52ZXJ0KCk7XG59OyAvL1xuXG5cblBsYW5lLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmUgPSBmdW5jdGlvbiAobGluZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4nKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUobGluZSk7XG59OyAvL1xuXG5cblF1YXRlcm5pb24ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMyA9IGZ1bmN0aW9uICh2ZWN0b3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseVF1YXRlcm5pb24odGhpcyk7XG59O1xuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5pbnZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4nKTtcblx0cmV0dXJuIHRoaXMuaW52ZXJ0KCk7XG59OyAvL1xuXG5cblJheS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3ggPSBmdW5jdGlvbiAoYm94KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNCb3goYm94KTtcbn07XG5cblJheS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZSA9IGZ1bmN0aW9uIChwbGFuZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4nKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1BsYW5lKHBsYW5lKTtcbn07XG5cblJheS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmUgPSBmdW5jdGlvbiAoc3BoZXJlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoc3BoZXJlKTtcbn07IC8vXG5cblxuVHJpYW5nbGUucHJvdG90eXBlLmFyZWEgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRBcmVhKCk7XG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50ID0gZnVuY3Rpb24gKHBvaW50LCB0YXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQocG9pbnQsIHRhcmdldCk7XG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUubWlkcG9pbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuJyk7XG5cdHJldHVybiB0aGlzLmdldE1pZHBvaW50KHRhcmdldCk7XG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGVub3JtYWwgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0Tm9ybWFsKHRhcmdldCk7XG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUucGxhbmUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldFBsYW5lKHRhcmdldCk7XG59O1xuXG5UcmlhbmdsZS5iYXJ5Y29vcmRGcm9tUG9pbnQgPSBmdW5jdGlvbiAocG9pbnQsIGEsIGIsIGMsIHRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuJyk7XG5cdHJldHVybiBUcmlhbmdsZS5nZXRCYXJ5Y29vcmQocG9pbnQsIGEsIGIsIGMsIHRhcmdldCk7XG59O1xuXG5UcmlhbmdsZS5ub3JtYWwgPSBmdW5jdGlvbiAoYSwgYiwgYywgdGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4nKTtcblx0cmV0dXJuIFRyaWFuZ2xlLmdldE5vcm1hbChhLCBiLCBjLCB0YXJnZXQpO1xufTsgLy9cblxuXG5TaGFwZS5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cyA9IGZ1bmN0aW9uIChkaXZpc2lvbnMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdGhpcy5leHRyYWN0UG9pbnRzKGRpdmlzaW9ucyk7XG59O1xuXG5TaGFwZS5wcm90b3R5cGUuZXh0cnVkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgRXh0cnVkZUdlb21ldHJ5KHRoaXMsIG9wdGlvbnMpO1xufTtcblxuU2hhcGUucHJvdG90eXBlLm1ha2VHZW9tZXRyeSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgU2hhcGVHZW9tZXRyeSh0aGlzLCBvcHRpb25zKTtcbn07IC8vXG5cblxuVmVjdG9yMi5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpO1xufTtcblxuVmVjdG9yMi5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbiA9IGZ1bmN0aW9uICh2KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuJyk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8odik7XG59O1xuXG5WZWN0b3IyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW4gPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLicpO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKTtcbn07IC8vXG5cblxuVmVjdG9yMy5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLicpO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLicpO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4ID0gZnVuY3Rpb24gKG0pIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuJyk7XG5cdHJldHVybiB0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihtKTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobSk7XG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4ID0gZnVuY3Rpb24gKGluZGV4LCBtYXRyaXgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4nKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihtYXRyaXgsIGluZGV4KTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbiA9IGZ1bmN0aW9uIChtKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KG0pO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbiA9IGZ1bmN0aW9uICh2KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuJyk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8odik7XG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW4gPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLicpO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKTtcbn07IC8vXG5cblxuVmVjdG9yNC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpO1xufTtcblxuVmVjdG9yNC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nKTtcblx0cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCk7XG59OyAvL1xuXG5cbk9iamVjdDNELnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRPYmplY3RCeU5hbWUobmFtZSk7XG59O1xuXG5PYmplY3QzRC5wcm90b3R5cGUucmVuZGVyRGVwdGggPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLicpO1xufTtcblxuT2JqZWN0M0QucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChkaXN0YW5jZSwgYXhpcykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGF4aXMsIGRpc3RhbmNlKTtcbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLicpO1xufTtcblxuT2JqZWN0M0QucHJvdG90eXBlLmFwcGx5TWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4nKTtcblx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmplY3QzRC5wcm90b3R5cGUsIHtcblx0ZXVsZXJPcmRlcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4nKTtcblx0XHRcdHJldHVybiB0aGlzLnJvdGF0aW9uLm9yZGVyO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuJyk7XG5cdFx0XHR0aGlzLnJvdGF0aW9uLm9yZGVyID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHR1c2VRdWF0ZXJuaW9uOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LicpO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LicpO1xuXHRcdH1cblx0fVxufSk7XG5cbk1lc2gucHJvdG90eXBlLnNldERyYXdNb2RlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcblx0ZHJhd01vZGU6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLicpO1xuXHRcdFx0cmV0dXJuIFRyaWFuZ2xlc0RyYXdNb2RlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4nKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5Ta2lubmVkTWVzaC5wcm90b3R5cGUuaW5pdEJvbmVzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07IC8vXG5cblxuUGVyc3BlY3RpdmVDYW1lcmEucHJvdG90eXBlLnNldExlbnMgPSBmdW5jdGlvbiAoZm9jYWxMZW5ndGgsIGZpbG1HYXVnZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gJyArICdVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4nKTtcblx0aWYgKGZpbG1HYXVnZSAhPT0gdW5kZWZpbmVkKSB0aGlzLmZpbG1HYXVnZSA9IGZpbG1HYXVnZTtcblx0dGhpcy5zZXRGb2NhbExlbmd0aChmb2NhbExlbmd0aCk7XG59OyAvL1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKExpZ2h0LnByb3RvdHlwZSwge1xuXHRvbmx5U2hhZG93OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhRm92OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4nKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5mb3YgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUxlZnQ6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUxlZnQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmxlZnQuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEubGVmdCA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhUmlnaHQ6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4nKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodCA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhVG9wOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4nKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS50b3AgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUJvdHRvbToge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFOZWFyOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLicpO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLm5lYXIgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUZhcjoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuZmFyID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFWaXNpYmxlOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dCaWFzOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5iaWFzID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dEYXJrbmVzczoge1xuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBXaWR0aDoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4nKTtcblx0XHRcdHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGggPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcEhlaWdodDoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LicpO1xuXHRcdFx0dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQgPSB2YWx1ZTtcblx0XHR9XG5cdH1cbn0pOyAvL1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLCB7XG5cdGxlbmd0aDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoO1xuXHRcdH1cblx0fSxcblx0ZHluYW1pYzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLnVzYWdlID09PSBEeW5hbWljRHJhd1VzYWdlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvblxuXHRcdFx0LyogdmFsdWUgKi9cblx0XHQoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLicpO1xuXHRcdFx0dGhpcy5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLnNldER5bmFtaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuJyk7XG5cdHRoaXMuc2V0VXNhZ2UodmFsdWUgPT09IHRydWUgPyBEeW5hbWljRHJhd1VzYWdlIDogU3RhdGljRHJhd1VzYWdlKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXkgPSBmdW5jdGlvblxuXHQvKiBpbmRpY2VzICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufSwgQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5zZXRBcnJheSA9IGZ1bmN0aW9uXG5cdC8qIGFycmF5ICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzJyk7XG59OyAvL1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4nKTtcblx0dGhpcy5zZXRJbmRleChpbmRleCk7XG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIGF0dHJpYnV0ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuJyk7XG5cblx0aWYgKCEoYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5pc0J1ZmZlckF0dHJpYnV0ZSkgJiYgIShhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpKSB7XG5cdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuJyk7XG5cdFx0cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pKTtcblx0fVxuXG5cdGlmIChuYW1lID09PSAnaW5kZXgnKSB7XG5cdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLicpO1xuXHRcdHRoaXMuc2V0SW5kZXgoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUpO1xufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFkZERyYXdDYWxsID0gZnVuY3Rpb24gKHN0YXJ0LCBjb3VudCwgaW5kZXhPZmZzZXQpIHtcblx0aWYgKGluZGV4T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuJyk7XG5cdH1cblxuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuJyk7XG5cdHRoaXMuYWRkR3JvdXAoc3RhcnQsIGNvdW50KTtcbn07XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jbGVhckRyYXdDYWxscyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLicpO1xuXHR0aGlzLmNsZWFyR3JvdXBzKCk7XG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5kZWxldGVBdHRyaWJ1dGUobmFtZSk7XG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuYXBwbHlNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLicpO1xuXHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQobWF0cml4KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSwge1xuXHRkcmF3Y2FsbHM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4nKTtcblx0XHRcdHJldHVybiB0aGlzLmdyb3Vwcztcblx0XHR9XG5cdH0sXG5cdG9mZnNldHM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4nKTtcblx0XHRcdHJldHVybiB0aGlzLmdyb3Vwcztcblx0XHR9XG5cdH1cbn0pO1xuXG5JbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuc2V0RHluYW1pYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLicpO1xuXHR0aGlzLnNldFVzYWdlKHZhbHVlID09PSB0cnVlID8gRHluYW1pY0RyYXdVc2FnZSA6IFN0YXRpY0RyYXdVc2FnZSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb25cblx0LyogYXJyYXkgKi9cbigpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycycpO1xufTsgLy9cblxuXG5FeHRydWRlR2VvbWV0cnkucHJvdG90eXBlLmdldEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbkV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUuYWRkU2hhcGVMaXN0ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuRXh0cnVkZUdlb21ldHJ5LnByb3RvdHlwZS5hZGRTaGFwZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTsgLy9cblxuXG5TY2VuZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07IC8vXG5cblxuVW5pZm9ybS5wcm90b3R5cGUub25VcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuJyk7XG5cdHJldHVybiB0aGlzO1xufTsgLy9cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNYXRlcmlhbC5wcm90b3R5cGUsIHtcblx0d3JhcEFyb3VuZDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9XG5cdH0sXG5cdG92ZXJkcmF3OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9LFxuXHR3cmFwUkdCOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcigpO1xuXHRcdH1cblx0fSxcblx0c2hhZGluZzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4nKTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyk7XG5cdFx0XHR0aGlzLmZsYXRTaGFkaW5nID0gdmFsdWUgPT09IEZsYXRTaGFkaW5nO1xuXHRcdH1cblx0fSxcblx0c3RlbmNpbE1hc2s6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RlbmNpbEZ1bmNNYXNrO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLicpO1xuXHRcdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHZlcnRleFRhbmdlbnRzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZSwge1xuXHRkZXJpdmF0aXZlczoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcztcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLicpO1xuXHRcdFx0dGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzID0gdmFsdWU7XG5cdFx0fVxuXHR9XG59KTsgLy9cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuY2xlYXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0LCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLicpO1xuXHR0aGlzLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuXHR0aGlzLmNsZWFyKGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4nKTtcblx0dGhpcy5zZXRBbmltYXRpb25Mb29wKGNhbGxiYWNrKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHkgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuJyk7XG5cdHJldHVybiB0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRQcmVjaXNpb24gPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4nKTtcblx0cmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbjtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0R0xTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLicpO1xuXHRyZXR1cm4gdGhpcy5zdGF0ZS5yZXNldCgpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfdGV4dHVyZV9mbG9hdFxcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnT0VTX3RleHR1cmVfZmxvYXQnKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0XFwnICkuJyk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1xcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y1xcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjXFwnICkuJyk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXggPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdFWFRfYmxlbmRfbWlubWF4XFwnICkuJyk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCdFWFRfYmxlbmRfbWlubWF4Jyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuJyk7XG5cdHJldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcztcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ0FOR0xFX2luc3RhbmNlZF9hcnJheXNcXCcgKS4nKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKGJvb2xlYW4pIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuJyk7XG5cdHRoaXMuc2V0U2Npc3NvclRlc3QoYm9vbGVhbik7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5pbml0TWF0ZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hZGRQcmVQbHVnaW4gPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc2V0VGV4dHVyZTJEID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYkdMUmVuZGVyZXIucHJvdG90eXBlLCB7XG5cdHNoYWRvd01hcEVuYWJsZWQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4nKTtcblx0XHRcdHRoaXMuc2hhZG93TWFwLmVuYWJsZWQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcFR5cGU6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzLnNoYWRvd01hcC50eXBlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4nKTtcblx0XHRcdHRoaXMuc2hhZG93TWFwLnR5cGUgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcEN1bGxGYWNlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb25cblx0XHRcdC8qIHZhbHVlICovXG5cdFx0KCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH0sXG5cdGNvbnRleHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLmdldENvbnRleHQoKTtcblx0XHR9XG5cdH0sXG5cdHZyOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54cicpO1xuXHRcdFx0cmV0dXJuIHRoaXMueHI7XG5cdFx0fVxuXHR9LFxuXHRnYW1tYUlucHV0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH0sXG5cdGdhbW1hT3V0cHV0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuJyk7XG5cdFx0XHR0aGlzLm91dHB1dEVuY29kaW5nID0gdmFsdWUgPT09IHRydWUgPyBzUkdCRW5jb2RpbmcgOiBMaW5lYXJFbmNvZGluZztcblx0XHR9XG5cdH0sXG5cdHRvbmVNYXBwaW5nV2hpdGVQb2ludDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0XHRyZXR1cm4gMS4wO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9XG5cdH0sXG5cdGdhbW1hRmFjdG9yOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdFx0cmV0dXJuIDI7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYkdMU2hhZG93TWFwLnByb3RvdHlwZSwge1xuXHRjdWxsRmFjZToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvblxuXHRcdFx0LyogY3VsbEZhY2UgKi9cblx0XHQoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH0sXG5cdHJlbmRlclJldmVyc2VTaWRlZDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdH1cblx0fSxcblx0cmVuZGVyU2luZ2xlU2lkZWQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9XG59KTtcbmZ1bmN0aW9uIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZSh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLicpO1xuXHRyZXR1cm4gbmV3IFdlYkdMQ3ViZVJlbmRlclRhcmdldCh3aWR0aCwgb3B0aW9ucyk7XG59IC8vXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZSwge1xuXHR3cmFwUzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUud3JhcFM7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS53cmFwUyA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0d3JhcFQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBUO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUud3JhcFQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdG1hZ0ZpbHRlcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLicpO1xuXHRcdFx0dGhpcy50ZXh0dXJlLm1hZ0ZpbHRlciA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0bWluRmlsdGVyOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLm1pbkZpbHRlcjtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUubWluRmlsdGVyID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRhbmlzb3Ryb3B5OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUuYW5pc290cm9weTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5ID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRvZmZzZXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUub2Zmc2V0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS5vZmZzZXQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHJlcGVhdDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LicpO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5yZXBlYXQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LicpO1xuXHRcdFx0dGhpcy50ZXh0dXJlLnJlcGVhdCA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0Zm9ybWF0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLmZvcm1hdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUuZm9ybWF0ID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHR0eXBlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUudHlwZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS50eXBlID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRnZW5lcmF0ZU1pcG1hcHM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSB2YWx1ZTtcblx0XHR9XG5cdH1cbn0pOyAvL1xuXG5BdWRpby5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChmaWxlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLicpO1xuXHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdGNvbnN0IGF1ZGlvTG9hZGVyID0gbmV3IEF1ZGlvTG9hZGVyKCk7XG5cdGF1ZGlvTG9hZGVyLmxvYWQoZmlsZSwgZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdHNjb3BlLnNldEJ1ZmZlcihidWZmZXIpO1xuXHR9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5BdWRpb0FuYWx5c2VyLnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKTtcbn07IC8vXG5cblxuQ3ViZUNhbWVyYS5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcCA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5DdWJlQ2FtZXJhOiAudXBkYXRlQ3ViZU1hcCgpIGlzIG5vdyAudXBkYXRlKCkuJyk7XG5cdHJldHVybiB0aGlzLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xufTtcblxuQ3ViZUNhbWVyYS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuJyk7XG5cdHJldHVybiB0aGlzLnJlbmRlclRhcmdldC5jbGVhcihyZW5kZXJlciwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTtcbn07XG5cbkltYWdlVXRpbHMuY3Jvc3NPcmlnaW4gPSB1bmRlZmluZWQ7XG5cbkltYWdlVXRpbHMubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsLCBtYXBwaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4nKTtcblx0Y29uc3QgbG9hZGVyID0gbmV3IFRleHR1cmVMb2FkZXIoKTtcblx0bG9hZGVyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO1xuXHRjb25zdCB0ZXh0dXJlID0gbG9hZGVyLmxvYWQodXJsLCBvbkxvYWQsIHVuZGVmaW5lZCwgb25FcnJvcik7XG5cdGlmIChtYXBwaW5nKSB0ZXh0dXJlLm1hcHBpbmcgPSBtYXBwaW5nO1xuXHRyZXR1cm4gdGV4dHVyZTtcbn07XG5cbkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKHVybHMsIG1hcHBpbmcsIG9uTG9hZCwgb25FcnJvcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuJyk7XG5cdGNvbnN0IGxvYWRlciA9IG5ldyBDdWJlVGV4dHVyZUxvYWRlcigpO1xuXHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7XG5cdGNvbnN0IHRleHR1cmUgPSBsb2FkZXIubG9hZCh1cmxzLCBvbkxvYWQsIHVuZGVmaW5lZCwgb25FcnJvcik7XG5cdGlmIChtYXBwaW5nKSB0ZXh0dXJlLm1hcHBpbmcgPSBtYXBwaW5nO1xuXHRyZXR1cm4gdGV4dHVyZTtcbn07XG5cbkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuJyk7XG59O1xuXG5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuJyk7XG59OyAvL1xuXG5cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkJyk7XG59IC8vXG5cbmZ1bmN0aW9uIEpTT05Mb2FkZXIoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkpTT05Mb2FkZXIgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn0gLy9cblxuY29uc3QgU2NlbmVVdGlscyA9IHtcblx0Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDogZnVuY3Rpb25cblx0XHQvKiBnZW9tZXRyeSwgbWF0ZXJpYWxzICovXG5cdCgpIHtcblx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcycpO1xuXHR9LFxuXHRkZXRhY2g6IGZ1bmN0aW9uXG5cdFx0LyogY2hpbGQsIHBhcmVudCwgc2NlbmUgKi9cblx0KCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzJyk7XG5cdH0sXG5cdGF0dGFjaDogZnVuY3Rpb25cblx0XHQvKiBjaGlsZCwgc2NlbmUsIHBhcmVudCAqL1xuXHQoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMnKTtcblx0fVxufTsgLy9cblxuZnVuY3Rpb24gTGVuc0ZsYXJlKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcycpO1xufSAvL1xuXG5mdW5jdGlvbiBQYXJhbWV0cmljR2VvbWV0cnkoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvUGFyYW1ldHJpY0dlb21ldHJ5LmpzJyk7XG5cdHJldHVybiBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcbn1cbmZ1bmN0aW9uIFRleHRHZW9tZXRyeSgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMnKTtcblx0cmV0dXJuIG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xufVxuZnVuY3Rpb24gRm9udExvYWRlcigpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcycpO1xufVxuZnVuY3Rpb24gRm9udCgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuRm9udCBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcycpO1xufVxuZnVuY3Rpb24gSW1tZWRpYXRlUmVuZGVyT2JqZWN0KCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn1cblxuaWYgKHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdF9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVnaXN0ZXInLCB7XG5cdFx0ZGV0YWlsOiB7XG5cdFx0XHRyZXZpc2lvbjogUkVWSVNJT05cblx0XHR9XG5cdH0pKTtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG5cdGlmICh3aW5kb3cuX19USFJFRV9fKSB7XG5cdFx0Y29uc29sZS53YXJuKCdXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuJyk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93Ll9fVEhSRUVfXyA9IFJFVklTSU9OO1xuXHR9XG59XG5cbmV4cG9ydHMuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nID0gQUNFU0ZpbG1pY1RvbmVNYXBwaW5nO1xuZXhwb3J0cy5BZGRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uO1xuZXhwb3J0cy5BZGRPcGVyYXRpb24gPSBBZGRPcGVyYXRpb247XG5leHBvcnRzLkFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlID0gQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU7XG5leHBvcnRzLkFkZGl0aXZlQmxlbmRpbmcgPSBBZGRpdGl2ZUJsZW5kaW5nO1xuZXhwb3J0cy5BbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0O1xuZXhwb3J0cy5BbHdheXNEZXB0aCA9IEFsd2F5c0RlcHRoO1xuZXhwb3J0cy5BbHdheXNTdGVuY2lsRnVuYyA9IEFsd2F5c1N0ZW5jaWxGdW5jO1xuZXhwb3J0cy5BbWJpZW50TGlnaHQgPSBBbWJpZW50TGlnaHQ7XG5leHBvcnRzLkFtYmllbnRMaWdodFByb2JlID0gQW1iaWVudExpZ2h0UHJvYmU7XG5leHBvcnRzLkFuaW1hdGlvbkNsaXAgPSBBbmltYXRpb25DbGlwO1xuZXhwb3J0cy5BbmltYXRpb25Mb2FkZXIgPSBBbmltYXRpb25Mb2FkZXI7XG5leHBvcnRzLkFuaW1hdGlvbk1peGVyID0gQW5pbWF0aW9uTWl4ZXI7XG5leHBvcnRzLkFuaW1hdGlvbk9iamVjdEdyb3VwID0gQW5pbWF0aW9uT2JqZWN0R3JvdXA7XG5leHBvcnRzLkFuaW1hdGlvblV0aWxzID0gQW5pbWF0aW9uVXRpbHM7XG5leHBvcnRzLkFyY0N1cnZlID0gQXJjQ3VydmU7XG5leHBvcnRzLkFycmF5Q2FtZXJhID0gQXJyYXlDYW1lcmE7XG5leHBvcnRzLkFycm93SGVscGVyID0gQXJyb3dIZWxwZXI7XG5leHBvcnRzLkF1ZGlvID0gQXVkaW87XG5leHBvcnRzLkF1ZGlvQW5hbHlzZXIgPSBBdWRpb0FuYWx5c2VyO1xuZXhwb3J0cy5BdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHQ7XG5leHBvcnRzLkF1ZGlvTGlzdGVuZXIgPSBBdWRpb0xpc3RlbmVyO1xuZXhwb3J0cy5BdWRpb0xvYWRlciA9IEF1ZGlvTG9hZGVyO1xuZXhwb3J0cy5BeGVzSGVscGVyID0gQXhlc0hlbHBlcjtcbmV4cG9ydHMuQXhpc0hlbHBlciA9IEF4aXNIZWxwZXI7XG5leHBvcnRzLkJhY2tTaWRlID0gQmFja1NpZGU7XG5leHBvcnRzLkJhc2ljRGVwdGhQYWNraW5nID0gQmFzaWNEZXB0aFBhY2tpbmc7XG5leHBvcnRzLkJhc2ljU2hhZG93TWFwID0gQmFzaWNTaGFkb3dNYXA7XG5leHBvcnRzLkJpbmFyeVRleHR1cmVMb2FkZXIgPSBCaW5hcnlUZXh0dXJlTG9hZGVyO1xuZXhwb3J0cy5Cb25lID0gQm9uZTtcbmV4cG9ydHMuQm9vbGVhbktleWZyYW1lVHJhY2sgPSBCb29sZWFuS2V5ZnJhbWVUcmFjaztcbmV4cG9ydHMuQm91bmRpbmdCb3hIZWxwZXIgPSBCb3VuZGluZ0JveEhlbHBlcjtcbmV4cG9ydHMuQm94MiA9IEJveDI7XG5leHBvcnRzLkJveDMgPSBCb3gzO1xuZXhwb3J0cy5Cb3gzSGVscGVyID0gQm94M0hlbHBlcjtcbmV4cG9ydHMuQm94QnVmZmVyR2VvbWV0cnkgPSBCb3hHZW9tZXRyeTtcbmV4cG9ydHMuQm94R2VvbWV0cnkgPSBCb3hHZW9tZXRyeTtcbmV4cG9ydHMuQm94SGVscGVyID0gQm94SGVscGVyO1xuZXhwb3J0cy5CdWZmZXJBdHRyaWJ1dGUgPSBCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkJ1ZmZlckdlb21ldHJ5ID0gQnVmZmVyR2VvbWV0cnk7XG5leHBvcnRzLkJ1ZmZlckdlb21ldHJ5TG9hZGVyID0gQnVmZmVyR2VvbWV0cnlMb2FkZXI7XG5leHBvcnRzLkJ5dGVUeXBlID0gQnl0ZVR5cGU7XG5leHBvcnRzLkNhY2hlID0gQ2FjaGU7XG5leHBvcnRzLkNhbWVyYSA9IENhbWVyYTtcbmV4cG9ydHMuQ2FtZXJhSGVscGVyID0gQ2FtZXJhSGVscGVyO1xuZXhwb3J0cy5DYW52YXNSZW5kZXJlciA9IENhbnZhc1JlbmRlcmVyO1xuZXhwb3J0cy5DYW52YXNUZXh0dXJlID0gQ2FudmFzVGV4dHVyZTtcbmV4cG9ydHMuQ2F0bXVsbFJvbUN1cnZlMyA9IENhdG11bGxSb21DdXJ2ZTM7XG5leHBvcnRzLkNpbmVvblRvbmVNYXBwaW5nID0gQ2luZW9uVG9uZU1hcHBpbmc7XG5leHBvcnRzLkNpcmNsZUJ1ZmZlckdlb21ldHJ5ID0gQ2lyY2xlR2VvbWV0cnk7XG5leHBvcnRzLkNpcmNsZUdlb21ldHJ5ID0gQ2lyY2xlR2VvbWV0cnk7XG5leHBvcnRzLkNsYW1wVG9FZGdlV3JhcHBpbmcgPSBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuZXhwb3J0cy5DbG9jayA9IENsb2NrO1xuZXhwb3J0cy5Db2xvciA9IENvbG9yO1xuZXhwb3J0cy5Db2xvcktleWZyYW1lVHJhY2sgPSBDb2xvcktleWZyYW1lVHJhY2s7XG5leHBvcnRzLkNvbXByZXNzZWRUZXh0dXJlID0gQ29tcHJlc3NlZFRleHR1cmU7XG5leHBvcnRzLkNvbXByZXNzZWRUZXh0dXJlTG9hZGVyID0gQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI7XG5leHBvcnRzLkNvbmVCdWZmZXJHZW9tZXRyeSA9IENvbmVHZW9tZXRyeTtcbmV4cG9ydHMuQ29uZUdlb21ldHJ5ID0gQ29uZUdlb21ldHJ5O1xuZXhwb3J0cy5DdWJlQ2FtZXJhID0gQ3ViZUNhbWVyYTtcbmV4cG9ydHMuQ3ViZVJlZmxlY3Rpb25NYXBwaW5nID0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nO1xuZXhwb3J0cy5DdWJlUmVmcmFjdGlvbk1hcHBpbmcgPSBDdWJlUmVmcmFjdGlvbk1hcHBpbmc7XG5leHBvcnRzLkN1YmVUZXh0dXJlID0gQ3ViZVRleHR1cmU7XG5leHBvcnRzLkN1YmVUZXh0dXJlTG9hZGVyID0gQ3ViZVRleHR1cmVMb2FkZXI7XG5leHBvcnRzLkN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nID0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc7XG5leHBvcnRzLkN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nID0gQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc7XG5leHBvcnRzLkN1YmljQmV6aWVyQ3VydmUgPSBDdWJpY0JlemllckN1cnZlO1xuZXhwb3J0cy5DdWJpY0JlemllckN1cnZlMyA9IEN1YmljQmV6aWVyQ3VydmUzO1xuZXhwb3J0cy5DdWJpY0ludGVycG9sYW50ID0gQ3ViaWNJbnRlcnBvbGFudDtcbmV4cG9ydHMuQ3VsbEZhY2VCYWNrID0gQ3VsbEZhY2VCYWNrO1xuZXhwb3J0cy5DdWxsRmFjZUZyb250ID0gQ3VsbEZhY2VGcm9udDtcbmV4cG9ydHMuQ3VsbEZhY2VGcm9udEJhY2sgPSBDdWxsRmFjZUZyb250QmFjaztcbmV4cG9ydHMuQ3VsbEZhY2VOb25lID0gQ3VsbEZhY2VOb25lO1xuZXhwb3J0cy5DdXJ2ZSA9IEN1cnZlO1xuZXhwb3J0cy5DdXJ2ZVBhdGggPSBDdXJ2ZVBhdGg7XG5leHBvcnRzLkN1c3RvbUJsZW5kaW5nID0gQ3VzdG9tQmxlbmRpbmc7XG5leHBvcnRzLkN1c3RvbVRvbmVNYXBwaW5nID0gQ3VzdG9tVG9uZU1hcHBpbmc7XG5leHBvcnRzLkN5bGluZGVyQnVmZmVyR2VvbWV0cnkgPSBDeWxpbmRlckdlb21ldHJ5O1xuZXhwb3J0cy5DeWxpbmRlckdlb21ldHJ5ID0gQ3lsaW5kZXJHZW9tZXRyeTtcbmV4cG9ydHMuQ3lsaW5kcmljYWwgPSBDeWxpbmRyaWNhbDtcbmV4cG9ydHMuRGF0YVRleHR1cmUgPSBEYXRhVGV4dHVyZTtcbmV4cG9ydHMuRGF0YVRleHR1cmUyREFycmF5ID0gRGF0YVRleHR1cmUyREFycmF5O1xuZXhwb3J0cy5EYXRhVGV4dHVyZTNEID0gRGF0YVRleHR1cmUzRDtcbmV4cG9ydHMuRGF0YVRleHR1cmVMb2FkZXIgPSBEYXRhVGV4dHVyZUxvYWRlcjtcbmV4cG9ydHMuRGF0YVV0aWxzID0gRGF0YVV0aWxzO1xuZXhwb3J0cy5EZWNyZW1lbnRTdGVuY2lsT3AgPSBEZWNyZW1lbnRTdGVuY2lsT3A7XG5leHBvcnRzLkRlY3JlbWVudFdyYXBTdGVuY2lsT3AgPSBEZWNyZW1lbnRXcmFwU3RlbmNpbE9wO1xuZXhwb3J0cy5EZWZhdWx0TG9hZGluZ01hbmFnZXIgPSBEZWZhdWx0TG9hZGluZ01hbmFnZXI7XG5leHBvcnRzLkRlcHRoRm9ybWF0ID0gRGVwdGhGb3JtYXQ7XG5leHBvcnRzLkRlcHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdDtcbmV4cG9ydHMuRGVwdGhUZXh0dXJlID0gRGVwdGhUZXh0dXJlO1xuZXhwb3J0cy5EaXJlY3Rpb25hbExpZ2h0ID0gRGlyZWN0aW9uYWxMaWdodDtcbmV4cG9ydHMuRGlyZWN0aW9uYWxMaWdodEhlbHBlciA9IERpcmVjdGlvbmFsTGlnaHRIZWxwZXI7XG5leHBvcnRzLkRpc2NyZXRlSW50ZXJwb2xhbnQgPSBEaXNjcmV0ZUludGVycG9sYW50O1xuZXhwb3J0cy5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeSA9IERvZGVjYWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5Eb2RlY2FoZWRyb25HZW9tZXRyeSA9IERvZGVjYWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5Eb3VibGVTaWRlID0gRG91YmxlU2lkZTtcbmV4cG9ydHMuRHN0QWxwaGFGYWN0b3IgPSBEc3RBbHBoYUZhY3RvcjtcbmV4cG9ydHMuRHN0Q29sb3JGYWN0b3IgPSBEc3RDb2xvckZhY3RvcjtcbmV4cG9ydHMuRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSA9IER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkR5bmFtaWNDb3B5VXNhZ2UgPSBEeW5hbWljQ29weVVzYWdlO1xuZXhwb3J0cy5EeW5hbWljRHJhd1VzYWdlID0gRHluYW1pY0RyYXdVc2FnZTtcbmV4cG9ydHMuRHluYW1pY1JlYWRVc2FnZSA9IER5bmFtaWNSZWFkVXNhZ2U7XG5leHBvcnRzLkVkZ2VzR2VvbWV0cnkgPSBFZGdlc0dlb21ldHJ5O1xuZXhwb3J0cy5FZGdlc0hlbHBlciA9IEVkZ2VzSGVscGVyO1xuZXhwb3J0cy5FbGxpcHNlQ3VydmUgPSBFbGxpcHNlQ3VydmU7XG5leHBvcnRzLkVxdWFsRGVwdGggPSBFcXVhbERlcHRoO1xuZXhwb3J0cy5FcXVhbFN0ZW5jaWxGdW5jID0gRXF1YWxTdGVuY2lsRnVuYztcbmV4cG9ydHMuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcbmV4cG9ydHMuRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZztcbmV4cG9ydHMuRXVsZXIgPSBFdWxlcjtcbmV4cG9ydHMuRXZlbnREaXNwYXRjaGVyID0gRXZlbnREaXNwYXRjaGVyO1xuZXhwb3J0cy5FeHRydWRlQnVmZmVyR2VvbWV0cnkgPSBFeHRydWRlR2VvbWV0cnk7XG5leHBvcnRzLkV4dHJ1ZGVHZW9tZXRyeSA9IEV4dHJ1ZGVHZW9tZXRyeTtcbmV4cG9ydHMuRmFjZUNvbG9ycyA9IEZhY2VDb2xvcnM7XG5leHBvcnRzLkZpbGVMb2FkZXIgPSBGaWxlTG9hZGVyO1xuZXhwb3J0cy5GbGF0U2hhZGluZyA9IEZsYXRTaGFkaW5nO1xuZXhwb3J0cy5GbG9hdDE2QnVmZmVyQXR0cmlidXRlID0gRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuRmxvYXQzMkF0dHJpYnV0ZSA9IEZsb2F0MzJBdHRyaWJ1dGU7XG5leHBvcnRzLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUgPSBGbG9hdDMyQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5GbG9hdDY0QXR0cmlidXRlID0gRmxvYXQ2NEF0dHJpYnV0ZTtcbmV4cG9ydHMuRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSA9IEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkZsb2F0VHlwZSA9IEZsb2F0VHlwZTtcbmV4cG9ydHMuRm9nID0gRm9nO1xuZXhwb3J0cy5Gb2dFeHAyID0gRm9nRXhwMjtcbmV4cG9ydHMuRm9udCA9IEZvbnQ7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xuZXhwb3J0cy5GcmFtZWJ1ZmZlclRleHR1cmUgPSBGcmFtZWJ1ZmZlclRleHR1cmU7XG5leHBvcnRzLkZyb250U2lkZSA9IEZyb250U2lkZTtcbmV4cG9ydHMuRnJ1c3R1bSA9IEZydXN0dW07XG5leHBvcnRzLkdMQnVmZmVyQXR0cmlidXRlID0gR0xCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkdMU0wxID0gR0xTTDE7XG5leHBvcnRzLkdMU0wzID0gR0xTTDM7XG5leHBvcnRzLkdyZWF0ZXJEZXB0aCA9IEdyZWF0ZXJEZXB0aDtcbmV4cG9ydHMuR3JlYXRlckVxdWFsRGVwdGggPSBHcmVhdGVyRXF1YWxEZXB0aDtcbmV4cG9ydHMuR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmMgPSBHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYztcbmV4cG9ydHMuR3JlYXRlclN0ZW5jaWxGdW5jID0gR3JlYXRlclN0ZW5jaWxGdW5jO1xuZXhwb3J0cy5HcmlkSGVscGVyID0gR3JpZEhlbHBlcjtcbmV4cG9ydHMuR3JvdXAgPSBHcm91cDtcbmV4cG9ydHMuSGFsZkZsb2F0VHlwZSA9IEhhbGZGbG9hdFR5cGU7XG5leHBvcnRzLkhlbWlzcGhlcmVMaWdodCA9IEhlbWlzcGhlcmVMaWdodDtcbmV4cG9ydHMuSGVtaXNwaGVyZUxpZ2h0SGVscGVyID0gSGVtaXNwaGVyZUxpZ2h0SGVscGVyO1xuZXhwb3J0cy5IZW1pc3BoZXJlTGlnaHRQcm9iZSA9IEhlbWlzcGhlcmVMaWdodFByb2JlO1xuZXhwb3J0cy5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5ID0gSWNvc2FoZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuSWNvc2FoZWRyb25HZW9tZXRyeSA9IEljb3NhaGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLkltYWdlQml0bWFwTG9hZGVyID0gSW1hZ2VCaXRtYXBMb2FkZXI7XG5leHBvcnRzLkltYWdlTG9hZGVyID0gSW1hZ2VMb2FkZXI7XG5leHBvcnRzLkltYWdlVXRpbHMgPSBJbWFnZVV0aWxzO1xuZXhwb3J0cy5JbW1lZGlhdGVSZW5kZXJPYmplY3QgPSBJbW1lZGlhdGVSZW5kZXJPYmplY3Q7XG5leHBvcnRzLkluY3JlbWVudFN0ZW5jaWxPcCA9IEluY3JlbWVudFN0ZW5jaWxPcDtcbmV4cG9ydHMuSW5jcmVtZW50V3JhcFN0ZW5jaWxPcCA9IEluY3JlbWVudFdyYXBTdGVuY2lsT3A7XG5leHBvcnRzLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSBJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeTtcbmV4cG9ydHMuSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgPSBJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjtcbmV4cG9ydHMuSW5zdGFuY2VkTWVzaCA9IEluc3RhbmNlZE1lc2g7XG5leHBvcnRzLkludDE2QXR0cmlidXRlID0gSW50MTZBdHRyaWJ1dGU7XG5leHBvcnRzLkludDE2QnVmZmVyQXR0cmlidXRlID0gSW50MTZCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkludDMyQXR0cmlidXRlID0gSW50MzJBdHRyaWJ1dGU7XG5leHBvcnRzLkludDMyQnVmZmVyQXR0cmlidXRlID0gSW50MzJCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkludDhBdHRyaWJ1dGUgPSBJbnQ4QXR0cmlidXRlO1xuZXhwb3J0cy5JbnQ4QnVmZmVyQXR0cmlidXRlID0gSW50OEJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuSW50VHlwZSA9IEludFR5cGU7XG5leHBvcnRzLkludGVybGVhdmVkQnVmZmVyID0gSW50ZXJsZWF2ZWRCdWZmZXI7XG5leHBvcnRzLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlID0gSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkludGVycG9sYW50ID0gSW50ZXJwb2xhbnQ7XG5leHBvcnRzLkludGVycG9sYXRlRGlzY3JldGUgPSBJbnRlcnBvbGF0ZURpc2NyZXRlO1xuZXhwb3J0cy5JbnRlcnBvbGF0ZUxpbmVhciA9IEludGVycG9sYXRlTGluZWFyO1xuZXhwb3J0cy5JbnRlcnBvbGF0ZVNtb290aCA9IEludGVycG9sYXRlU21vb3RoO1xuZXhwb3J0cy5JbnZlcnRTdGVuY2lsT3AgPSBJbnZlcnRTdGVuY2lsT3A7XG5leHBvcnRzLkpTT05Mb2FkZXIgPSBKU09OTG9hZGVyO1xuZXhwb3J0cy5LZWVwU3RlbmNpbE9wID0gS2VlcFN0ZW5jaWxPcDtcbmV4cG9ydHMuS2V5ZnJhbWVUcmFjayA9IEtleWZyYW1lVHJhY2s7XG5leHBvcnRzLkxPRCA9IExPRDtcbmV4cG9ydHMuTGF0aGVCdWZmZXJHZW9tZXRyeSA9IExhdGhlR2VvbWV0cnk7XG5leHBvcnRzLkxhdGhlR2VvbWV0cnkgPSBMYXRoZUdlb21ldHJ5O1xuZXhwb3J0cy5MYXllcnMgPSBMYXllcnM7XG5leHBvcnRzLkxlbnNGbGFyZSA9IExlbnNGbGFyZTtcbmV4cG9ydHMuTGVzc0RlcHRoID0gTGVzc0RlcHRoO1xuZXhwb3J0cy5MZXNzRXF1YWxEZXB0aCA9IExlc3NFcXVhbERlcHRoO1xuZXhwb3J0cy5MZXNzRXF1YWxTdGVuY2lsRnVuYyA9IExlc3NFcXVhbFN0ZW5jaWxGdW5jO1xuZXhwb3J0cy5MZXNzU3RlbmNpbEZ1bmMgPSBMZXNzU3RlbmNpbEZ1bmM7XG5leHBvcnRzLkxpZ2h0ID0gTGlnaHQ7XG5leHBvcnRzLkxpZ2h0UHJvYmUgPSBMaWdodFByb2JlO1xuZXhwb3J0cy5MaW5lID0gTGluZTtcbmV4cG9ydHMuTGluZTMgPSBMaW5lMztcbmV4cG9ydHMuTGluZUJhc2ljTWF0ZXJpYWwgPSBMaW5lQmFzaWNNYXRlcmlhbDtcbmV4cG9ydHMuTGluZUN1cnZlID0gTGluZUN1cnZlO1xuZXhwb3J0cy5MaW5lQ3VydmUzID0gTGluZUN1cnZlMztcbmV4cG9ydHMuTGluZURhc2hlZE1hdGVyaWFsID0gTGluZURhc2hlZE1hdGVyaWFsO1xuZXhwb3J0cy5MaW5lTG9vcCA9IExpbmVMb29wO1xuZXhwb3J0cy5MaW5lUGllY2VzID0gTGluZVBpZWNlcztcbmV4cG9ydHMuTGluZVNlZ21lbnRzID0gTGluZVNlZ21lbnRzO1xuZXhwb3J0cy5MaW5lU3RyaXAgPSBMaW5lU3RyaXA7XG5leHBvcnRzLkxpbmVhckVuY29kaW5nID0gTGluZWFyRW5jb2Rpbmc7XG5leHBvcnRzLkxpbmVhckZpbHRlciA9IExpbmVhckZpbHRlcjtcbmV4cG9ydHMuTGluZWFySW50ZXJwb2xhbnQgPSBMaW5lYXJJbnRlcnBvbGFudDtcbmV4cG9ydHMuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyID0gTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyO1xuZXhwb3J0cy5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyID0gTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjtcbmV4cG9ydHMuTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyID0gTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyO1xuZXhwb3J0cy5MaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyID0gTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjtcbmV4cG9ydHMuTGluZWFyVG9uZU1hcHBpbmcgPSBMaW5lYXJUb25lTWFwcGluZztcbmV4cG9ydHMuTG9hZGVyID0gTG9hZGVyO1xuZXhwb3J0cy5Mb2FkZXJVdGlscyA9IExvYWRlclV0aWxzO1xuZXhwb3J0cy5Mb2FkaW5nTWFuYWdlciA9IExvYWRpbmdNYW5hZ2VyO1xuZXhwb3J0cy5Mb29wT25jZSA9IExvb3BPbmNlO1xuZXhwb3J0cy5Mb29wUGluZ1BvbmcgPSBMb29wUGluZ1Bvbmc7XG5leHBvcnRzLkxvb3BSZXBlYXQgPSBMb29wUmVwZWF0O1xuZXhwb3J0cy5MdW1pbmFuY2VBbHBoYUZvcm1hdCA9IEx1bWluYW5jZUFscGhhRm9ybWF0O1xuZXhwb3J0cy5MdW1pbmFuY2VGb3JtYXQgPSBMdW1pbmFuY2VGb3JtYXQ7XG5leHBvcnRzLk1PVVNFID0gTU9VU0U7XG5leHBvcnRzLk1hdGVyaWFsID0gTWF0ZXJpYWw7XG5leHBvcnRzLk1hdGVyaWFsTG9hZGVyID0gTWF0ZXJpYWxMb2FkZXI7XG5leHBvcnRzLk1hdGggPSBNYXRoVXRpbHM7XG5leHBvcnRzLk1hdGhVdGlscyA9IE1hdGhVdGlscztcbmV4cG9ydHMuTWF0cml4MyA9IE1hdHJpeDM7XG5leHBvcnRzLk1hdHJpeDQgPSBNYXRyaXg0O1xuZXhwb3J0cy5NYXhFcXVhdGlvbiA9IE1heEVxdWF0aW9uO1xuZXhwb3J0cy5NZXNoID0gTWVzaDtcbmV4cG9ydHMuTWVzaEJhc2ljTWF0ZXJpYWwgPSBNZXNoQmFzaWNNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaERlcHRoTWF0ZXJpYWwgPSBNZXNoRGVwdGhNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaERpc3RhbmNlTWF0ZXJpYWwgPSBNZXNoRGlzdGFuY2VNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaEZhY2VNYXRlcmlhbCA9IE1lc2hGYWNlTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hMYW1iZXJ0TWF0ZXJpYWwgPSBNZXNoTGFtYmVydE1hdGVyaWFsO1xuZXhwb3J0cy5NZXNoTWF0Y2FwTWF0ZXJpYWwgPSBNZXNoTWF0Y2FwTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hOb3JtYWxNYXRlcmlhbCA9IE1lc2hOb3JtYWxNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaFBob25nTWF0ZXJpYWwgPSBNZXNoUGhvbmdNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSBNZXNoUGh5c2ljYWxNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSBNZXNoU3RhbmRhcmRNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaFRvb25NYXRlcmlhbCA9IE1lc2hUb29uTWF0ZXJpYWw7XG5leHBvcnRzLk1pbkVxdWF0aW9uID0gTWluRXF1YXRpb247XG5leHBvcnRzLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmcgPSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nO1xuZXhwb3J0cy5NaXhPcGVyYXRpb24gPSBNaXhPcGVyYXRpb247XG5leHBvcnRzLk11bHRpTWF0ZXJpYWwgPSBNdWx0aU1hdGVyaWFsO1xuZXhwb3J0cy5NdWx0aXBseUJsZW5kaW5nID0gTXVsdGlwbHlCbGVuZGluZztcbmV4cG9ydHMuTXVsdGlwbHlPcGVyYXRpb24gPSBNdWx0aXBseU9wZXJhdGlvbjtcbmV4cG9ydHMuTmVhcmVzdEZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5leHBvcnRzLk5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIgPSBOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyO1xuZXhwb3J0cy5OZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlciA9IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyO1xuZXhwb3J0cy5OZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyID0gTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcjtcbmV4cG9ydHMuTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIgPSBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjtcbmV4cG9ydHMuTmV2ZXJEZXB0aCA9IE5ldmVyRGVwdGg7XG5leHBvcnRzLk5ldmVyU3RlbmNpbEZ1bmMgPSBOZXZlclN0ZW5jaWxGdW5jO1xuZXhwb3J0cy5Ob0JsZW5kaW5nID0gTm9CbGVuZGluZztcbmV4cG9ydHMuTm9Db2xvcnMgPSBOb0NvbG9ycztcbmV4cG9ydHMuTm9Ub25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5leHBvcnRzLk5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSA9IE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTtcbmV4cG9ydHMuTm9ybWFsQmxlbmRpbmcgPSBOb3JtYWxCbGVuZGluZztcbmV4cG9ydHMuTm90RXF1YWxEZXB0aCA9IE5vdEVxdWFsRGVwdGg7XG5leHBvcnRzLk5vdEVxdWFsU3RlbmNpbEZ1bmMgPSBOb3RFcXVhbFN0ZW5jaWxGdW5jO1xuZXhwb3J0cy5OdW1iZXJLZXlmcmFtZVRyYWNrID0gTnVtYmVyS2V5ZnJhbWVUcmFjaztcbmV4cG9ydHMuT2JqZWN0M0QgPSBPYmplY3QzRDtcbmV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuZXhwb3J0cy5PYmplY3RTcGFjZU5vcm1hbE1hcCA9IE9iamVjdFNwYWNlTm9ybWFsTWFwO1xuZXhwb3J0cy5PY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnkgPSBPY3RhaGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLk9jdGFoZWRyb25HZW9tZXRyeSA9IE9jdGFoZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuT25lRmFjdG9yID0gT25lRmFjdG9yO1xuZXhwb3J0cy5PbmVNaW51c0RzdEFscGhhRmFjdG9yID0gT25lTWludXNEc3RBbHBoYUZhY3RvcjtcbmV4cG9ydHMuT25lTWludXNEc3RDb2xvckZhY3RvciA9IE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I7XG5leHBvcnRzLk9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgPSBPbmVNaW51c1NyY0FscGhhRmFjdG9yO1xuZXhwb3J0cy5PbmVNaW51c1NyY0NvbG9yRmFjdG9yID0gT25lTWludXNTcmNDb2xvckZhY3RvcjtcbmV4cG9ydHMuT3J0aG9ncmFwaGljQ2FtZXJhID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xuZXhwb3J0cy5QQ0ZTaGFkb3dNYXAgPSBQQ0ZTaGFkb3dNYXA7XG5leHBvcnRzLlBDRlNvZnRTaGFkb3dNYXAgPSBQQ0ZTb2Z0U2hhZG93TWFwO1xuZXhwb3J0cy5QTVJFTUdlbmVyYXRvciA9IFBNUkVNR2VuZXJhdG9yO1xuZXhwb3J0cy5QYXJhbWV0cmljR2VvbWV0cnkgPSBQYXJhbWV0cmljR2VvbWV0cnk7XG5leHBvcnRzLlBhcnRpY2xlID0gUGFydGljbGU7XG5leHBvcnRzLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCA9IFBhcnRpY2xlQmFzaWNNYXRlcmlhbDtcbmV4cG9ydHMuUGFydGljbGVTeXN0ZW0gPSBQYXJ0aWNsZVN5c3RlbTtcbmV4cG9ydHMuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCA9IFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw7XG5leHBvcnRzLlBhdGggPSBQYXRoO1xuZXhwb3J0cy5QZXJzcGVjdGl2ZUNhbWVyYSA9IFBlcnNwZWN0aXZlQ2FtZXJhO1xuZXhwb3J0cy5QbGFuZSA9IFBsYW5lO1xuZXhwb3J0cy5QbGFuZUJ1ZmZlckdlb21ldHJ5ID0gUGxhbmVHZW9tZXRyeTtcbmV4cG9ydHMuUGxhbmVHZW9tZXRyeSA9IFBsYW5lR2VvbWV0cnk7XG5leHBvcnRzLlBsYW5lSGVscGVyID0gUGxhbmVIZWxwZXI7XG5leHBvcnRzLlBvaW50Q2xvdWQgPSBQb2ludENsb3VkO1xuZXhwb3J0cy5Qb2ludENsb3VkTWF0ZXJpYWwgPSBQb2ludENsb3VkTWF0ZXJpYWw7XG5leHBvcnRzLlBvaW50TGlnaHQgPSBQb2ludExpZ2h0O1xuZXhwb3J0cy5Qb2ludExpZ2h0SGVscGVyID0gUG9pbnRMaWdodEhlbHBlcjtcbmV4cG9ydHMuUG9pbnRzID0gUG9pbnRzO1xuZXhwb3J0cy5Qb2ludHNNYXRlcmlhbCA9IFBvaW50c01hdGVyaWFsO1xuZXhwb3J0cy5Qb2xhckdyaWRIZWxwZXIgPSBQb2xhckdyaWRIZWxwZXI7XG5leHBvcnRzLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSA9IFBvbHloZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuUG9seWhlZHJvbkdlb21ldHJ5ID0gUG9seWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5Qb3NpdGlvbmFsQXVkaW8gPSBQb3NpdGlvbmFsQXVkaW87XG5leHBvcnRzLlByb3BlcnR5QmluZGluZyA9IFByb3BlcnR5QmluZGluZztcbmV4cG9ydHMuUHJvcGVydHlNaXhlciA9IFByb3BlcnR5TWl4ZXI7XG5leHBvcnRzLlF1YWRyYXRpY0JlemllckN1cnZlID0gUXVhZHJhdGljQmV6aWVyQ3VydmU7XG5leHBvcnRzLlF1YWRyYXRpY0JlemllckN1cnZlMyA9IFF1YWRyYXRpY0JlemllckN1cnZlMztcbmV4cG9ydHMuUXVhdGVybmlvbiA9IFF1YXRlcm5pb247XG5leHBvcnRzLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrID0gUXVhdGVybmlvbktleWZyYW1lVHJhY2s7XG5leHBvcnRzLlF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCA9IFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudDtcbmV4cG9ydHMuUkVWSVNJT04gPSBSRVZJU0lPTjtcbmV4cG9ydHMuUkdCQURlcHRoUGFja2luZyA9IFJHQkFEZXB0aFBhY2tpbmc7XG5leHBvcnRzLlJHQkFGb3JtYXQgPSBSR0JBRm9ybWF0O1xuZXhwb3J0cy5SR0JBSW50ZWdlckZvcm1hdCA9IFJHQkFJbnRlZ2VyRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0gUkdCQV9BU1RDXzEweDEwX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzEweDVfRm9ybWF0ID0gUkdCQV9BU1RDXzEweDVfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfMTB4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfMTB4Nl9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfQVNUQ18xMHg4X0Zvcm1hdCA9IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdCA9IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfQVNUQ18xMngxMl9Gb3JtYXQgPSBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfNHg0X0Zvcm1hdCA9IFJHQkFfQVNUQ180eDRfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfNXg0X0Zvcm1hdCA9IFJHQkFfQVNUQ181eDRfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfNXg1X0Zvcm1hdCA9IFJHQkFfQVNUQ181eDVfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfNng1X0Zvcm1hdCA9IFJHQkFfQVNUQ182eDVfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfNng2X0Zvcm1hdCA9IFJHQkFfQVNUQ182eDZfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfOHg1X0Zvcm1hdCA9IFJHQkFfQVNUQ184eDVfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfOHg2X0Zvcm1hdCA9IFJHQkFfQVNUQ184eDZfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfOHg4X0Zvcm1hdCA9IFJHQkFfQVNUQ184eDhfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0JQVENfRm9ybWF0ID0gUkdCQV9CUFRDX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9FVEMyX0VBQ19Gb3JtYXQgPSBSR0JBX0VUQzJfRUFDX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfUzNUQ19EWFQxX0Zvcm1hdCA9IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9TM1RDX0RYVDNfRm9ybWF0ID0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX1MzVENfRFhUNV9Gb3JtYXQgPSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQ7XG5leHBvcnRzLlJHQl9FVEMxX0Zvcm1hdCA9IFJHQl9FVEMxX0Zvcm1hdDtcbmV4cG9ydHMuUkdCX0VUQzJfRm9ybWF0ID0gUkdCX0VUQzJfRm9ybWF0O1xuZXhwb3J0cy5SR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0O1xuZXhwb3J0cy5SR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCA9IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0O1xuZXhwb3J0cy5SR0JfUzNUQ19EWFQxX0Zvcm1hdCA9IFJHQl9TM1RDX0RYVDFfRm9ybWF0O1xuZXhwb3J0cy5SR0Zvcm1hdCA9IFJHRm9ybWF0O1xuZXhwb3J0cy5SR0ludGVnZXJGb3JtYXQgPSBSR0ludGVnZXJGb3JtYXQ7XG5leHBvcnRzLlJhd1NoYWRlck1hdGVyaWFsID0gUmF3U2hhZGVyTWF0ZXJpYWw7XG5leHBvcnRzLlJheSA9IFJheTtcbmV4cG9ydHMuUmF5Y2FzdGVyID0gUmF5Y2FzdGVyO1xuZXhwb3J0cy5SZWN0QXJlYUxpZ2h0ID0gUmVjdEFyZWFMaWdodDtcbmV4cG9ydHMuUmVkRm9ybWF0ID0gUmVkRm9ybWF0O1xuZXhwb3J0cy5SZWRJbnRlZ2VyRm9ybWF0ID0gUmVkSW50ZWdlckZvcm1hdDtcbmV4cG9ydHMuUmVpbmhhcmRUb25lTWFwcGluZyA9IFJlaW5oYXJkVG9uZU1hcHBpbmc7XG5leHBvcnRzLlJlcGVhdFdyYXBwaW5nID0gUmVwZWF0V3JhcHBpbmc7XG5leHBvcnRzLlJlcGxhY2VTdGVuY2lsT3AgPSBSZXBsYWNlU3RlbmNpbE9wO1xuZXhwb3J0cy5SZXZlcnNlU3VidHJhY3RFcXVhdGlvbiA9IFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uO1xuZXhwb3J0cy5SaW5nQnVmZmVyR2VvbWV0cnkgPSBSaW5nR2VvbWV0cnk7XG5leHBvcnRzLlJpbmdHZW9tZXRyeSA9IFJpbmdHZW9tZXRyeTtcbmV4cG9ydHMuU2NlbmUgPSBTY2VuZTtcbmV4cG9ydHMuU2NlbmVVdGlscyA9IFNjZW5lVXRpbHM7XG5leHBvcnRzLlNoYWRlckNodW5rID0gU2hhZGVyQ2h1bms7XG5leHBvcnRzLlNoYWRlckxpYiA9IFNoYWRlckxpYjtcbmV4cG9ydHMuU2hhZGVyTWF0ZXJpYWwgPSBTaGFkZXJNYXRlcmlhbDtcbmV4cG9ydHMuU2hhZG93TWF0ZXJpYWwgPSBTaGFkb3dNYXRlcmlhbDtcbmV4cG9ydHMuU2hhcGUgPSBTaGFwZTtcbmV4cG9ydHMuU2hhcGVCdWZmZXJHZW9tZXRyeSA9IFNoYXBlR2VvbWV0cnk7XG5leHBvcnRzLlNoYXBlR2VvbWV0cnkgPSBTaGFwZUdlb21ldHJ5O1xuZXhwb3J0cy5TaGFwZVBhdGggPSBTaGFwZVBhdGg7XG5leHBvcnRzLlNoYXBlVXRpbHMgPSBTaGFwZVV0aWxzO1xuZXhwb3J0cy5TaG9ydFR5cGUgPSBTaG9ydFR5cGU7XG5leHBvcnRzLlNrZWxldG9uID0gU2tlbGV0b247XG5leHBvcnRzLlNrZWxldG9uSGVscGVyID0gU2tlbGV0b25IZWxwZXI7XG5leHBvcnRzLlNraW5uZWRNZXNoID0gU2tpbm5lZE1lc2g7XG5leHBvcnRzLlNtb290aFNoYWRpbmcgPSBTbW9vdGhTaGFkaW5nO1xuZXhwb3J0cy5TcGhlcmUgPSBTcGhlcmU7XG5leHBvcnRzLlNwaGVyZUJ1ZmZlckdlb21ldHJ5ID0gU3BoZXJlR2VvbWV0cnk7XG5leHBvcnRzLlNwaGVyZUdlb21ldHJ5ID0gU3BoZXJlR2VvbWV0cnk7XG5leHBvcnRzLlNwaGVyaWNhbCA9IFNwaGVyaWNhbDtcbmV4cG9ydHMuU3BoZXJpY2FsSGFybW9uaWNzMyA9IFNwaGVyaWNhbEhhcm1vbmljczM7XG5leHBvcnRzLlNwbGluZUN1cnZlID0gU3BsaW5lQ3VydmU7XG5leHBvcnRzLlNwb3RMaWdodCA9IFNwb3RMaWdodDtcbmV4cG9ydHMuU3BvdExpZ2h0SGVscGVyID0gU3BvdExpZ2h0SGVscGVyO1xuZXhwb3J0cy5TcHJpdGUgPSBTcHJpdGU7XG5leHBvcnRzLlNwcml0ZU1hdGVyaWFsID0gU3ByaXRlTWF0ZXJpYWw7XG5leHBvcnRzLlNyY0FscGhhRmFjdG9yID0gU3JjQWxwaGFGYWN0b3I7XG5leHBvcnRzLlNyY0FscGhhU2F0dXJhdGVGYWN0b3IgPSBTcmNBbHBoYVNhdHVyYXRlRmFjdG9yO1xuZXhwb3J0cy5TcmNDb2xvckZhY3RvciA9IFNyY0NvbG9yRmFjdG9yO1xuZXhwb3J0cy5TdGF0aWNDb3B5VXNhZ2UgPSBTdGF0aWNDb3B5VXNhZ2U7XG5leHBvcnRzLlN0YXRpY0RyYXdVc2FnZSA9IFN0YXRpY0RyYXdVc2FnZTtcbmV4cG9ydHMuU3RhdGljUmVhZFVzYWdlID0gU3RhdGljUmVhZFVzYWdlO1xuZXhwb3J0cy5TdGVyZW9DYW1lcmEgPSBTdGVyZW9DYW1lcmE7XG5leHBvcnRzLlN0cmVhbUNvcHlVc2FnZSA9IFN0cmVhbUNvcHlVc2FnZTtcbmV4cG9ydHMuU3RyZWFtRHJhd1VzYWdlID0gU3RyZWFtRHJhd1VzYWdlO1xuZXhwb3J0cy5TdHJlYW1SZWFkVXNhZ2UgPSBTdHJlYW1SZWFkVXNhZ2U7XG5leHBvcnRzLlN0cmluZ0tleWZyYW1lVHJhY2sgPSBTdHJpbmdLZXlmcmFtZVRyYWNrO1xuZXhwb3J0cy5TdWJ0cmFjdEVxdWF0aW9uID0gU3VidHJhY3RFcXVhdGlvbjtcbmV4cG9ydHMuU3VidHJhY3RpdmVCbGVuZGluZyA9IFN1YnRyYWN0aXZlQmxlbmRpbmc7XG5leHBvcnRzLlRPVUNIID0gVE9VQ0g7XG5leHBvcnRzLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcbmV4cG9ydHMuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSA9IFRldHJhaGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLlRldHJhaGVkcm9uR2VvbWV0cnkgPSBUZXRyYWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5UZXh0R2VvbWV0cnkgPSBUZXh0R2VvbWV0cnk7XG5leHBvcnRzLlRleHR1cmUgPSBUZXh0dXJlO1xuZXhwb3J0cy5UZXh0dXJlTG9hZGVyID0gVGV4dHVyZUxvYWRlcjtcbmV4cG9ydHMuVG9ydXNCdWZmZXJHZW9tZXRyeSA9IFRvcnVzR2VvbWV0cnk7XG5leHBvcnRzLlRvcnVzR2VvbWV0cnkgPSBUb3J1c0dlb21ldHJ5O1xuZXhwb3J0cy5Ub3J1c0tub3RCdWZmZXJHZW9tZXRyeSA9IFRvcnVzS25vdEdlb21ldHJ5O1xuZXhwb3J0cy5Ub3J1c0tub3RHZW9tZXRyeSA9IFRvcnVzS25vdEdlb21ldHJ5O1xuZXhwb3J0cy5UcmlhbmdsZSA9IFRyaWFuZ2xlO1xuZXhwb3J0cy5UcmlhbmdsZUZhbkRyYXdNb2RlID0gVHJpYW5nbGVGYW5EcmF3TW9kZTtcbmV4cG9ydHMuVHJpYW5nbGVTdHJpcERyYXdNb2RlID0gVHJpYW5nbGVTdHJpcERyYXdNb2RlO1xuZXhwb3J0cy5UcmlhbmdsZXNEcmF3TW9kZSA9IFRyaWFuZ2xlc0RyYXdNb2RlO1xuZXhwb3J0cy5UdWJlQnVmZmVyR2VvbWV0cnkgPSBUdWJlR2VvbWV0cnk7XG5leHBvcnRzLlR1YmVHZW9tZXRyeSA9IFR1YmVHZW9tZXRyeTtcbmV4cG9ydHMuVVZNYXBwaW5nID0gVVZNYXBwaW5nO1xuZXhwb3J0cy5VaW50MTZBdHRyaWJ1dGUgPSBVaW50MTZBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSA9IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuVWludDMyQXR0cmlidXRlID0gVWludDMyQXR0cmlidXRlO1xuZXhwb3J0cy5VaW50MzJCdWZmZXJBdHRyaWJ1dGUgPSBVaW50MzJCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQ4QXR0cmlidXRlID0gVWludDhBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQ4QnVmZmVyQXR0cmlidXRlID0gVWludDhCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSA9IFVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZTtcbmV4cG9ydHMuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlID0gVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5Vbmlmb3JtID0gVW5pZm9ybTtcbmV4cG9ydHMuVW5pZm9ybXNMaWIgPSBVbmlmb3Jtc0xpYjtcbmV4cG9ydHMuVW5pZm9ybXNVdGlscyA9IFVuaWZvcm1zVXRpbHM7XG5leHBvcnRzLlVuc2lnbmVkQnl0ZVR5cGUgPSBVbnNpZ25lZEJ5dGVUeXBlO1xuZXhwb3J0cy5VbnNpZ25lZEludDI0OFR5cGUgPSBVbnNpZ25lZEludDI0OFR5cGU7XG5leHBvcnRzLlVuc2lnbmVkSW50VHlwZSA9IFVuc2lnbmVkSW50VHlwZTtcbmV4cG9ydHMuVW5zaWduZWRTaG9ydDQ0NDRUeXBlID0gVW5zaWduZWRTaG9ydDQ0NDRUeXBlO1xuZXhwb3J0cy5VbnNpZ25lZFNob3J0NTU1MVR5cGUgPSBVbnNpZ25lZFNob3J0NTU1MVR5cGU7XG5leHBvcnRzLlVuc2lnbmVkU2hvcnRUeXBlID0gVW5zaWduZWRTaG9ydFR5cGU7XG5leHBvcnRzLlZTTVNoYWRvd01hcCA9IFZTTVNoYWRvd01hcDtcbmV4cG9ydHMuVmVjdG9yMiA9IFZlY3RvcjI7XG5leHBvcnRzLlZlY3RvcjMgPSBWZWN0b3IzO1xuZXhwb3J0cy5WZWN0b3I0ID0gVmVjdG9yNDtcbmV4cG9ydHMuVmVjdG9yS2V5ZnJhbWVUcmFjayA9IFZlY3RvcktleWZyYW1lVHJhY2s7XG5leHBvcnRzLlZlcnRleCA9IFZlcnRleDtcbmV4cG9ydHMuVmVydGV4Q29sb3JzID0gVmVydGV4Q29sb3JzO1xuZXhwb3J0cy5WaWRlb1RleHR1cmUgPSBWaWRlb1RleHR1cmU7XG5leHBvcnRzLldlYkdMMVJlbmRlcmVyID0gV2ViR0wxUmVuZGVyZXI7XG5leHBvcnRzLldlYkdMQ3ViZVJlbmRlclRhcmdldCA9IFdlYkdMQ3ViZVJlbmRlclRhcmdldDtcbmV4cG9ydHMuV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPSBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cztcbmV4cG9ydHMuV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA9IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ7XG5leHBvcnRzLldlYkdMUmVuZGVyVGFyZ2V0ID0gV2ViR0xSZW5kZXJUYXJnZXQ7XG5leHBvcnRzLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSA9IFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZTtcbmV4cG9ydHMuV2ViR0xSZW5kZXJlciA9IFdlYkdMUmVuZGVyZXI7XG5leHBvcnRzLldlYkdMVXRpbHMgPSBXZWJHTFV0aWxzO1xuZXhwb3J0cy5XaXJlZnJhbWVHZW9tZXRyeSA9IFdpcmVmcmFtZUdlb21ldHJ5O1xuZXhwb3J0cy5XaXJlZnJhbWVIZWxwZXIgPSBXaXJlZnJhbWVIZWxwZXI7XG5leHBvcnRzLldyYXBBcm91bmRFbmRpbmcgPSBXcmFwQXJvdW5kRW5kaW5nO1xuZXhwb3J0cy5YSFJMb2FkZXIgPSBYSFJMb2FkZXI7XG5leHBvcnRzLlplcm9DdXJ2YXR1cmVFbmRpbmcgPSBaZXJvQ3VydmF0dXJlRW5kaW5nO1xuZXhwb3J0cy5aZXJvRmFjdG9yID0gWmVyb0ZhY3RvcjtcbmV4cG9ydHMuWmVyb1Nsb3BlRW5kaW5nID0gWmVyb1Nsb3BlRW5kaW5nO1xuZXhwb3J0cy5aZXJvU3RlbmNpbE9wID0gWmVyb1N0ZW5jaWxPcDtcbmV4cG9ydHMuX1NSR0JBRm9ybWF0ID0gX1NSR0JBRm9ybWF0O1xuZXhwb3J0cy5zUkdCRW5jb2RpbmcgPSBzUkdCRW5jb2Rpbmc7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiAqL1xuY29uc3QgUkVWSVNJT04gPSAnMTM3JztcbmNvbnN0IE1PVVNFID0geyBMRUZUOiAwLCBNSURETEU6IDEsIFJJR0hUOiAyLCBST1RBVEU6IDAsIERPTExZOiAxLCBQQU46IDIgfTtcbmNvbnN0IFRPVUNIID0geyBST1RBVEU6IDAsIFBBTjogMSwgRE9MTFlfUEFOOiAyLCBET0xMWV9ST1RBVEU6IDMgfTtcbmNvbnN0IEN1bGxGYWNlTm9uZSA9IDA7XG5jb25zdCBDdWxsRmFjZUJhY2sgPSAxO1xuY29uc3QgQ3VsbEZhY2VGcm9udCA9IDI7XG5jb25zdCBDdWxsRmFjZUZyb250QmFjayA9IDM7XG5jb25zdCBCYXNpY1NoYWRvd01hcCA9IDA7XG5jb25zdCBQQ0ZTaGFkb3dNYXAgPSAxO1xuY29uc3QgUENGU29mdFNoYWRvd01hcCA9IDI7XG5jb25zdCBWU01TaGFkb3dNYXAgPSAzO1xuY29uc3QgRnJvbnRTaWRlID0gMDtcbmNvbnN0IEJhY2tTaWRlID0gMTtcbmNvbnN0IERvdWJsZVNpZGUgPSAyO1xuY29uc3QgRmxhdFNoYWRpbmcgPSAxO1xuY29uc3QgU21vb3RoU2hhZGluZyA9IDI7XG5jb25zdCBOb0JsZW5kaW5nID0gMDtcbmNvbnN0IE5vcm1hbEJsZW5kaW5nID0gMTtcbmNvbnN0IEFkZGl0aXZlQmxlbmRpbmcgPSAyO1xuY29uc3QgU3VidHJhY3RpdmVCbGVuZGluZyA9IDM7XG5jb25zdCBNdWx0aXBseUJsZW5kaW5nID0gNDtcbmNvbnN0IEN1c3RvbUJsZW5kaW5nID0gNTtcbmNvbnN0IEFkZEVxdWF0aW9uID0gMTAwO1xuY29uc3QgU3VidHJhY3RFcXVhdGlvbiA9IDEwMTtcbmNvbnN0IFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uID0gMTAyO1xuY29uc3QgTWluRXF1YXRpb24gPSAxMDM7XG5jb25zdCBNYXhFcXVhdGlvbiA9IDEwNDtcbmNvbnN0IFplcm9GYWN0b3IgPSAyMDA7XG5jb25zdCBPbmVGYWN0b3IgPSAyMDE7XG5jb25zdCBTcmNDb2xvckZhY3RvciA9IDIwMjtcbmNvbnN0IE9uZU1pbnVzU3JjQ29sb3JGYWN0b3IgPSAyMDM7XG5jb25zdCBTcmNBbHBoYUZhY3RvciA9IDIwNDtcbmNvbnN0IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgPSAyMDU7XG5jb25zdCBEc3RBbHBoYUZhY3RvciA9IDIwNjtcbmNvbnN0IE9uZU1pbnVzRHN0QWxwaGFGYWN0b3IgPSAyMDc7XG5jb25zdCBEc3RDb2xvckZhY3RvciA9IDIwODtcbmNvbnN0IE9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgPSAyMDk7XG5jb25zdCBTcmNBbHBoYVNhdHVyYXRlRmFjdG9yID0gMjEwO1xuY29uc3QgTmV2ZXJEZXB0aCA9IDA7XG5jb25zdCBBbHdheXNEZXB0aCA9IDE7XG5jb25zdCBMZXNzRGVwdGggPSAyO1xuY29uc3QgTGVzc0VxdWFsRGVwdGggPSAzO1xuY29uc3QgRXF1YWxEZXB0aCA9IDQ7XG5jb25zdCBHcmVhdGVyRXF1YWxEZXB0aCA9IDU7XG5jb25zdCBHcmVhdGVyRGVwdGggPSA2O1xuY29uc3QgTm90RXF1YWxEZXB0aCA9IDc7XG5jb25zdCBNdWx0aXBseU9wZXJhdGlvbiA9IDA7XG5jb25zdCBNaXhPcGVyYXRpb24gPSAxO1xuY29uc3QgQWRkT3BlcmF0aW9uID0gMjtcbmNvbnN0IE5vVG9uZU1hcHBpbmcgPSAwO1xuY29uc3QgTGluZWFyVG9uZU1hcHBpbmcgPSAxO1xuY29uc3QgUmVpbmhhcmRUb25lTWFwcGluZyA9IDI7XG5jb25zdCBDaW5lb25Ub25lTWFwcGluZyA9IDM7XG5jb25zdCBBQ0VTRmlsbWljVG9uZU1hcHBpbmcgPSA0O1xuY29uc3QgQ3VzdG9tVG9uZU1hcHBpbmcgPSA1O1xuXG5jb25zdCBVVk1hcHBpbmcgPSAzMDA7XG5jb25zdCBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDE7XG5jb25zdCBDdWJlUmVmcmFjdGlvbk1hcHBpbmcgPSAzMDI7XG5jb25zdCBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyA9IDMwMztcbmNvbnN0IEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nID0gMzA0O1xuY29uc3QgQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDY7XG5jb25zdCBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZyA9IDMwNztcbmNvbnN0IFJlcGVhdFdyYXBwaW5nID0gMTAwMDtcbmNvbnN0IENsYW1wVG9FZGdlV3JhcHBpbmcgPSAxMDAxO1xuY29uc3QgTWlycm9yZWRSZXBlYXRXcmFwcGluZyA9IDEwMDI7XG5jb25zdCBOZWFyZXN0RmlsdGVyID0gMTAwMztcbmNvbnN0IE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyID0gMTAwNDtcbmNvbnN0IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyID0gMTAwNDtcbmNvbnN0IE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXIgPSAxMDA1O1xuY29uc3QgTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlciA9IDEwMDU7XG5jb25zdCBMaW5lYXJGaWx0ZXIgPSAxMDA2O1xuY29uc3QgTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlciA9IDEwMDc7XG5jb25zdCBMaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyID0gMTAwNztcbmNvbnN0IExpbmVhck1pcG1hcExpbmVhckZpbHRlciA9IDEwMDg7XG5jb25zdCBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXIgPSAxMDA4O1xuY29uc3QgVW5zaWduZWRCeXRlVHlwZSA9IDEwMDk7XG5jb25zdCBCeXRlVHlwZSA9IDEwMTA7XG5jb25zdCBTaG9ydFR5cGUgPSAxMDExO1xuY29uc3QgVW5zaWduZWRTaG9ydFR5cGUgPSAxMDEyO1xuY29uc3QgSW50VHlwZSA9IDEwMTM7XG5jb25zdCBVbnNpZ25lZEludFR5cGUgPSAxMDE0O1xuY29uc3QgRmxvYXRUeXBlID0gMTAxNTtcbmNvbnN0IEhhbGZGbG9hdFR5cGUgPSAxMDE2O1xuY29uc3QgVW5zaWduZWRTaG9ydDQ0NDRUeXBlID0gMTAxNztcbmNvbnN0IFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSA9IDEwMTg7XG5jb25zdCBVbnNpZ25lZEludDI0OFR5cGUgPSAxMDIwO1xuY29uc3QgQWxwaGFGb3JtYXQgPSAxMDIxO1xuY29uc3QgUkdCQUZvcm1hdCA9IDEwMjM7XG5jb25zdCBMdW1pbmFuY2VGb3JtYXQgPSAxMDI0O1xuY29uc3QgTHVtaW5hbmNlQWxwaGFGb3JtYXQgPSAxMDI1O1xuY29uc3QgRGVwdGhGb3JtYXQgPSAxMDI2O1xuY29uc3QgRGVwdGhTdGVuY2lsRm9ybWF0ID0gMTAyNztcbmNvbnN0IFJlZEZvcm1hdCA9IDEwMjg7XG5jb25zdCBSZWRJbnRlZ2VyRm9ybWF0ID0gMTAyOTtcbmNvbnN0IFJHRm9ybWF0ID0gMTAzMDtcbmNvbnN0IFJHSW50ZWdlckZvcm1hdCA9IDEwMzE7XG5jb25zdCBSR0JBSW50ZWdlckZvcm1hdCA9IDEwMzM7XG5cbmNvbnN0IFJHQl9TM1RDX0RYVDFfRm9ybWF0ID0gMzM3NzY7XG5jb25zdCBSR0JBX1MzVENfRFhUMV9Gb3JtYXQgPSAzMzc3NztcbmNvbnN0IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCA9IDMzNzc4O1xuY29uc3QgUkdCQV9TM1RDX0RYVDVfRm9ybWF0ID0gMzM3Nzk7XG5jb25zdCBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCA9IDM1ODQwO1xuY29uc3QgUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSAzNTg0MTtcbmNvbnN0IFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCA9IDM1ODQyO1xuY29uc3QgUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gMzU4NDM7XG5jb25zdCBSR0JfRVRDMV9Gb3JtYXQgPSAzNjE5NjtcbmNvbnN0IFJHQl9FVEMyX0Zvcm1hdCA9IDM3NDkyO1xuY29uc3QgUkdCQV9FVEMyX0VBQ19Gb3JtYXQgPSAzNzQ5NjtcbmNvbnN0IFJHQkFfQVNUQ180eDRfRm9ybWF0ID0gMzc4MDg7XG5jb25zdCBSR0JBX0FTVENfNXg0X0Zvcm1hdCA9IDM3ODA5O1xuY29uc3QgUkdCQV9BU1RDXzV4NV9Gb3JtYXQgPSAzNzgxMDtcbmNvbnN0IFJHQkFfQVNUQ182eDVfRm9ybWF0ID0gMzc4MTE7XG5jb25zdCBSR0JBX0FTVENfNng2X0Zvcm1hdCA9IDM3ODEyO1xuY29uc3QgUkdCQV9BU1RDXzh4NV9Gb3JtYXQgPSAzNzgxMztcbmNvbnN0IFJHQkFfQVNUQ184eDZfRm9ybWF0ID0gMzc4MTQ7XG5jb25zdCBSR0JBX0FTVENfOHg4X0Zvcm1hdCA9IDM3ODE1O1xuY29uc3QgUkdCQV9BU1RDXzEweDVfRm9ybWF0ID0gMzc4MTY7XG5jb25zdCBSR0JBX0FTVENfMTB4Nl9Gb3JtYXQgPSAzNzgxNztcbmNvbnN0IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCA9IDM3ODE4O1xuY29uc3QgUkdCQV9BU1RDXzEweDEwX0Zvcm1hdCA9IDM3ODE5O1xuY29uc3QgUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdCA9IDM3ODIwO1xuY29uc3QgUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdCA9IDM3ODIxO1xuY29uc3QgUkdCQV9CUFRDX0Zvcm1hdCA9IDM2NDkyO1xuY29uc3QgTG9vcE9uY2UgPSAyMjAwO1xuY29uc3QgTG9vcFJlcGVhdCA9IDIyMDE7XG5jb25zdCBMb29wUGluZ1BvbmcgPSAyMjAyO1xuY29uc3QgSW50ZXJwb2xhdGVEaXNjcmV0ZSA9IDIzMDA7XG5jb25zdCBJbnRlcnBvbGF0ZUxpbmVhciA9IDIzMDE7XG5jb25zdCBJbnRlcnBvbGF0ZVNtb290aCA9IDIzMDI7XG5jb25zdCBaZXJvQ3VydmF0dXJlRW5kaW5nID0gMjQwMDtcbmNvbnN0IFplcm9TbG9wZUVuZGluZyA9IDI0MDE7XG5jb25zdCBXcmFwQXJvdW5kRW5kaW5nID0gMjQwMjtcbmNvbnN0IE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSA9IDI1MDA7XG5jb25zdCBBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZSA9IDI1MDE7XG5jb25zdCBUcmlhbmdsZXNEcmF3TW9kZSA9IDA7XG5jb25zdCBUcmlhbmdsZVN0cmlwRHJhd01vZGUgPSAxO1xuY29uc3QgVHJpYW5nbGVGYW5EcmF3TW9kZSA9IDI7XG5jb25zdCBMaW5lYXJFbmNvZGluZyA9IDMwMDA7XG5jb25zdCBzUkdCRW5jb2RpbmcgPSAzMDAxO1xuY29uc3QgQmFzaWNEZXB0aFBhY2tpbmcgPSAzMjAwO1xuY29uc3QgUkdCQURlcHRoUGFja2luZyA9IDMyMDE7XG5jb25zdCBUYW5nZW50U3BhY2VOb3JtYWxNYXAgPSAwO1xuY29uc3QgT2JqZWN0U3BhY2VOb3JtYWxNYXAgPSAxO1xuXG5jb25zdCBaZXJvU3RlbmNpbE9wID0gMDtcbmNvbnN0IEtlZXBTdGVuY2lsT3AgPSA3NjgwO1xuY29uc3QgUmVwbGFjZVN0ZW5jaWxPcCA9IDc2ODE7XG5jb25zdCBJbmNyZW1lbnRTdGVuY2lsT3AgPSA3NjgyO1xuY29uc3QgRGVjcmVtZW50U3RlbmNpbE9wID0gNzY4MztcbmNvbnN0IEluY3JlbWVudFdyYXBTdGVuY2lsT3AgPSAzNDA1NTtcbmNvbnN0IERlY3JlbWVudFdyYXBTdGVuY2lsT3AgPSAzNDA1NjtcbmNvbnN0IEludmVydFN0ZW5jaWxPcCA9IDUzODY7XG5cbmNvbnN0IE5ldmVyU3RlbmNpbEZ1bmMgPSA1MTI7XG5jb25zdCBMZXNzU3RlbmNpbEZ1bmMgPSA1MTM7XG5jb25zdCBFcXVhbFN0ZW5jaWxGdW5jID0gNTE0O1xuY29uc3QgTGVzc0VxdWFsU3RlbmNpbEZ1bmMgPSA1MTU7XG5jb25zdCBHcmVhdGVyU3RlbmNpbEZ1bmMgPSA1MTY7XG5jb25zdCBOb3RFcXVhbFN0ZW5jaWxGdW5jID0gNTE3O1xuY29uc3QgR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmMgPSA1MTg7XG5jb25zdCBBbHdheXNTdGVuY2lsRnVuYyA9IDUxOTtcblxuY29uc3QgU3RhdGljRHJhd1VzYWdlID0gMzUwNDQ7XG5jb25zdCBEeW5hbWljRHJhd1VzYWdlID0gMzUwNDg7XG5jb25zdCBTdHJlYW1EcmF3VXNhZ2UgPSAzNTA0MDtcbmNvbnN0IFN0YXRpY1JlYWRVc2FnZSA9IDM1MDQ1O1xuY29uc3QgRHluYW1pY1JlYWRVc2FnZSA9IDM1MDQ5O1xuY29uc3QgU3RyZWFtUmVhZFVzYWdlID0gMzUwNDE7XG5jb25zdCBTdGF0aWNDb3B5VXNhZ2UgPSAzNTA0NjtcbmNvbnN0IER5bmFtaWNDb3B5VXNhZ2UgPSAzNTA1MDtcbmNvbnN0IFN0cmVhbUNvcHlVc2FnZSA9IDM1MDQyO1xuXG5jb25zdCBHTFNMMSA9ICcxMDAnO1xuY29uc3QgR0xTTDMgPSAnMzAwIGVzJztcblxuY29uc3QgX1NSR0JBRm9ybWF0ID0gMTAzNTsgLy8gZmFsbGJhY2sgZm9yIFdlYkdMIDFcblxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL2V2ZW50ZGlzcGF0Y2hlci5qcy9cbiAqL1xuXG5jbGFzcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGxpc3RlbmVyICkge1xuXG5cdFx0aWYgKCB0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCApIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXG5cdFx0aWYgKCBsaXN0ZW5lcnNbIHR5cGUgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRsaXN0ZW5lcnNbIHR5cGUgXSA9IFtdO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBsaXN0ZW5lcnNbIHR5cGUgXS5pbmRleE9mKCBsaXN0ZW5lciApID09PSAtIDEgKSB7XG5cblx0XHRcdGxpc3RlbmVyc1sgdHlwZSBdLnB1c2goIGxpc3RlbmVyICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGhhc0V2ZW50TGlzdGVuZXIoIHR5cGUsIGxpc3RlbmVyICkge1xuXG5cdFx0aWYgKCB0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCApIHJldHVybiBmYWxzZTtcblxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblxuXHRcdHJldHVybiBsaXN0ZW5lcnNbIHR5cGUgXSAhPT0gdW5kZWZpbmVkICYmIGxpc3RlbmVyc1sgdHlwZSBdLmluZGV4T2YoIGxpc3RlbmVyICkgIT09IC0gMTtcblxuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgbGlzdGVuZXIgKSB7XG5cblx0XHRpZiAoIHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXHRcdGNvbnN0IGxpc3RlbmVyQXJyYXkgPSBsaXN0ZW5lcnNbIHR5cGUgXTtcblxuXHRcdGlmICggbGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBpbmRleCA9IGxpc3RlbmVyQXJyYXkuaW5kZXhPZiggbGlzdGVuZXIgKTtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gLSAxICkge1xuXG5cdFx0XHRcdGxpc3RlbmVyQXJyYXkuc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGRpc3BhdGNoRXZlbnQoIGV2ZW50ICkge1xuXG5cdFx0aWYgKCB0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzWyBldmVudC50eXBlIF07XG5cblx0XHRpZiAoIGxpc3RlbmVyQXJyYXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gdGhpcztcblxuXHRcdFx0Ly8gTWFrZSBhIGNvcHksIGluIGNhc2UgbGlzdGVuZXJzIGFyZSByZW1vdmVkIHdoaWxlIGl0ZXJhdGluZy5cblx0XHRcdGNvbnN0IGFycmF5ID0gbGlzdGVuZXJBcnJheS5zbGljZSggMCApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGFycmF5WyBpIF0uY2FsbCggdGhpcywgZXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRldmVudC50YXJnZXQgPSBudWxsO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5jb25zdCBfbHV0ID0gW107XG5cbmZvciAoIGxldCBpID0gMDsgaSA8IDI1NjsgaSArKyApIHtcblxuXHRfbHV0WyBpIF0gPSAoIGkgPCAxNiA/ICcwJyA6ICcnICkgKyAoIGkgKS50b1N0cmluZyggMTYgKTtcblxufVxuXG5sZXQgX3NlZWQgPSAxMjM0NTY3O1xuXG5cbmNvbnN0IERFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIE1hdGguUEk7XG5cbi8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTk2MzEzNiMyMTk2MzEzNlxuZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCkge1xuXG5cdGNvbnN0IGQwID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRjb25zdCBkMSA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgZDIgPSBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmZmZiB8IDA7XG5cdGNvbnN0IGQzID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRjb25zdCB1dWlkID0gX2x1dFsgZDAgJiAweGZmIF0gKyBfbHV0WyBkMCA+PiA4ICYgMHhmZiBdICsgX2x1dFsgZDAgPj4gMTYgJiAweGZmIF0gKyBfbHV0WyBkMCA+PiAyNCAmIDB4ZmYgXSArICctJyArXG5cdFx0XHRfbHV0WyBkMSAmIDB4ZmYgXSArIF9sdXRbIGQxID4+IDggJiAweGZmIF0gKyAnLScgKyBfbHV0WyBkMSA+PiAxNiAmIDB4MGYgfCAweDQwIF0gKyBfbHV0WyBkMSA+PiAyNCAmIDB4ZmYgXSArICctJyArXG5cdFx0XHRfbHV0WyBkMiAmIDB4M2YgfCAweDgwIF0gKyBfbHV0WyBkMiA+PiA4ICYgMHhmZiBdICsgJy0nICsgX2x1dFsgZDIgPj4gMTYgJiAweGZmIF0gKyBfbHV0WyBkMiA+PiAyNCAmIDB4ZmYgXSArXG5cdFx0XHRfbHV0WyBkMyAmIDB4ZmYgXSArIF9sdXRbIGQzID4+IDggJiAweGZmIF0gKyBfbHV0WyBkMyA+PiAxNiAmIDB4ZmYgXSArIF9sdXRbIGQzID4+IDI0ICYgMHhmZiBdO1xuXG5cdC8vIC50b1VwcGVyQ2FzZSgpIGhlcmUgZmxhdHRlbnMgY29uY2F0ZW5hdGVkIHN0cmluZ3MgdG8gc2F2ZSBoZWFwIG1lbW9yeSBzcGFjZS5cblx0cmV0dXJuIHV1aWQudG9VcHBlckNhc2UoKTtcblxufVxuXG5mdW5jdGlvbiBjbGFtcCggdmFsdWUsIG1pbiwgbWF4ICkge1xuXG5cdHJldHVybiBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCB2YWx1ZSApICk7XG5cbn1cblxuLy8gY29tcHV0ZSBldWNsaWRpYW4gbW9kdWxvIG9mIG0gJSBuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG5mdW5jdGlvbiBldWNsaWRlYW5Nb2R1bG8oIG4sIG0gKSB7XG5cblx0cmV0dXJuICggKCBuICUgbSApICsgbSApICUgbTtcblxufVxuXG4vLyBMaW5lYXIgbWFwcGluZyBmcm9tIHJhbmdlIDxhMSwgYTI+IHRvIHJhbmdlIDxiMSwgYjI+XG5mdW5jdGlvbiBtYXBMaW5lYXIoIHgsIGExLCBhMiwgYjEsIGIyICkge1xuXG5cdHJldHVybiBiMSArICggeCAtIGExICkgKiAoIGIyIC0gYjEgKSAvICggYTIgLSBhMSApO1xuXG59XG5cbi8vIGh0dHBzOi8vd3d3LmdhbWVkZXYubmV0L3R1dG9yaWFscy9wcm9ncmFtbWluZy9nZW5lcmFsLWFuZC1nYW1lcGxheS1wcm9ncmFtbWluZy9pbnZlcnNlLWxlcnAtYS1zdXBlci11c2VmdWwteWV0LW9mdGVuLW92ZXJsb29rZWQtZnVuY3Rpb24tcjUyMzAvXG5mdW5jdGlvbiBpbnZlcnNlTGVycCggeCwgeSwgdmFsdWUgKSB7XG5cblx0aWYgKCB4ICE9PSB5ICkge1xuXG5cdFx0cmV0dXJuICggdmFsdWUgLSB4ICkgLyAoIHkgLSB4ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdHJldHVybiAwO1xuXG5cdH1cblxufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lYXJfaW50ZXJwb2xhdGlvblxuZnVuY3Rpb24gbGVycCggeCwgeSwgdCApIHtcblxuXHRyZXR1cm4gKCAxIC0gdCApICogeCArIHQgKiB5O1xuXG59XG5cbi8vIGh0dHA6Ly93d3cucm9yeWRyaXNjb2xsLmNvbS8yMDE2LzAzLzA3L2ZyYW1lLXJhdGUtaW5kZXBlbmRlbnQtZGFtcGluZy11c2luZy1sZXJwL1xuZnVuY3Rpb24gZGFtcCggeCwgeSwgbGFtYmRhLCBkdCApIHtcblxuXHRyZXR1cm4gbGVycCggeCwgeSwgMSAtIE1hdGguZXhwKCAtIGxhbWJkYSAqIGR0ICkgKTtcblxufVxuXG4vLyBodHRwczovL3d3dy5kZXNtb3MuY29tL2NhbGN1bGF0b3IvdmNzam55ejd4NFxuZnVuY3Rpb24gcGluZ3BvbmcoIHgsIGxlbmd0aCA9IDEgKSB7XG5cblx0cmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKCBldWNsaWRlYW5Nb2R1bG8oIHgsIGxlbmd0aCAqIDIgKSAtIGxlbmd0aCApO1xuXG59XG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU21vb3Roc3RlcFxuZnVuY3Rpb24gc21vb3Roc3RlcCggeCwgbWluLCBtYXggKSB7XG5cblx0aWYgKCB4IDw9IG1pbiApIHJldHVybiAwO1xuXHRpZiAoIHggPj0gbWF4ICkgcmV0dXJuIDE7XG5cblx0eCA9ICggeCAtIG1pbiApIC8gKCBtYXggLSBtaW4gKTtcblxuXHRyZXR1cm4geCAqIHggKiAoIDMgLSAyICogeCApO1xuXG59XG5cbmZ1bmN0aW9uIHNtb290aGVyc3RlcCggeCwgbWluLCBtYXggKSB7XG5cblx0aWYgKCB4IDw9IG1pbiApIHJldHVybiAwO1xuXHRpZiAoIHggPj0gbWF4ICkgcmV0dXJuIDE7XG5cblx0eCA9ICggeCAtIG1pbiApIC8gKCBtYXggLSBtaW4gKTtcblxuXHRyZXR1cm4geCAqIHggKiB4ICogKCB4ICogKCB4ICogNiAtIDE1ICkgKyAxMCApO1xuXG59XG5cbi8vIFJhbmRvbSBpbnRlZ2VyIGZyb20gPGxvdywgaGlnaD4gaW50ZXJ2YWxcbmZ1bmN0aW9uIHJhbmRJbnQoIGxvdywgaGlnaCApIHtcblxuXHRyZXR1cm4gbG93ICsgTWF0aC5mbG9vciggTWF0aC5yYW5kb20oKSAqICggaGlnaCAtIGxvdyArIDEgKSApO1xuXG59XG5cbi8vIFJhbmRvbSBmbG9hdCBmcm9tIDxsb3csIGhpZ2g+IGludGVydmFsXG5mdW5jdGlvbiByYW5kRmxvYXQoIGxvdywgaGlnaCApIHtcblxuXHRyZXR1cm4gbG93ICsgTWF0aC5yYW5kb20oKSAqICggaGlnaCAtIGxvdyApO1xuXG59XG5cbi8vIFJhbmRvbSBmbG9hdCBmcm9tIDwtcmFuZ2UvMiwgcmFuZ2UvMj4gaW50ZXJ2YWxcbmZ1bmN0aW9uIHJhbmRGbG9hdFNwcmVhZCggcmFuZ2UgKSB7XG5cblx0cmV0dXJuIHJhbmdlICogKCAwLjUgLSBNYXRoLnJhbmRvbSgpICk7XG5cbn1cblxuLy8gRGV0ZXJtaW5pc3RpYyBwc2V1ZG8tcmFuZG9tIGZsb2F0IGluIHRoZSBpbnRlcnZhbCBbIDAsIDEgXVxuZnVuY3Rpb24gc2VlZGVkUmFuZG9tKCBzICkge1xuXG5cdGlmICggcyAhPT0gdW5kZWZpbmVkICkgX3NlZWQgPSBzICUgMjE0NzQ4MzY0NztcblxuXHQvLyBQYXJrLU1pbGxlciBhbGdvcml0aG1cblxuXHRfc2VlZCA9IF9zZWVkICogMTY4MDcgJSAyMTQ3NDgzNjQ3O1xuXG5cdHJldHVybiAoIF9zZWVkIC0gMSApIC8gMjE0NzQ4MzY0NjtcblxufVxuXG5mdW5jdGlvbiBkZWdUb1JhZCggZGVncmVlcyApIHtcblxuXHRyZXR1cm4gZGVncmVlcyAqIERFRzJSQUQ7XG5cbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcoIHJhZGlhbnMgKSB7XG5cblx0cmV0dXJuIHJhZGlhbnMgKiBSQUQyREVHO1xuXG59XG5cbmZ1bmN0aW9uIGlzUG93ZXJPZlR3byggdmFsdWUgKSB7XG5cblx0cmV0dXJuICggdmFsdWUgJiAoIHZhbHVlIC0gMSApICkgPT09IDAgJiYgdmFsdWUgIT09IDA7XG5cbn1cblxuZnVuY3Rpb24gY2VpbFBvd2VyT2ZUd28oIHZhbHVlICkge1xuXG5cdHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5jZWlsKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcblxufVxuXG5mdW5jdGlvbiBmbG9vclBvd2VyT2ZUd28oIHZhbHVlICkge1xuXG5cdHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5mbG9vciggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlciggcSwgYSwgYiwgYywgb3JkZXIgKSB7XG5cblx0Ly8gSW50cmluc2ljIFByb3BlciBFdWxlciBBbmdsZXMgLSBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVsZXJfYW5nbGVzXG5cblx0Ly8gcm90YXRpb25zIGFyZSBhcHBsaWVkIHRvIHRoZSBheGVzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgJ29yZGVyJ1xuXHQvLyByb3RhdGlvbiBieSBhbmdsZSAnYScgaXMgYXBwbGllZCBmaXJzdCwgdGhlbiBieSBhbmdsZSAnYicsIHRoZW4gYnkgYW5nbGUgJ2MnXG5cdC8vIGFuZ2xlcyBhcmUgaW4gcmFkaWFuc1xuXG5cdGNvbnN0IGNvcyA9IE1hdGguY29zO1xuXHRjb25zdCBzaW4gPSBNYXRoLnNpbjtcblxuXHRjb25zdCBjMiA9IGNvcyggYiAvIDIgKTtcblx0Y29uc3QgczIgPSBzaW4oIGIgLyAyICk7XG5cblx0Y29uc3QgYzEzID0gY29zKCAoIGEgKyBjICkgLyAyICk7XG5cdGNvbnN0IHMxMyA9IHNpbiggKCBhICsgYyApIC8gMiApO1xuXG5cdGNvbnN0IGMxXzMgPSBjb3MoICggYSAtIGMgKSAvIDIgKTtcblx0Y29uc3QgczFfMyA9IHNpbiggKCBhIC0gYyApIC8gMiApO1xuXG5cdGNvbnN0IGMzXzEgPSBjb3MoICggYyAtIGEgKSAvIDIgKTtcblx0Y29uc3QgczNfMSA9IHNpbiggKCBjIC0gYSApIC8gMiApO1xuXG5cdHN3aXRjaCAoIG9yZGVyICkge1xuXG5cdFx0Y2FzZSAnWFlYJzpcblx0XHRcdHEuc2V0KCBjMiAqIHMxMywgczIgKiBjMV8zLCBzMiAqIHMxXzMsIGMyICogYzEzICk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1laWSc6XG5cdFx0XHRxLnNldCggczIgKiBzMV8zLCBjMiAqIHMxMywgczIgKiBjMV8zLCBjMiAqIGMxMyApO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdaWFonOlxuXHRcdFx0cS5zZXQoIHMyICogYzFfMywgczIgKiBzMV8zLCBjMiAqIHMxMywgYzIgKiBjMTMgKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWFpYJzpcblx0XHRcdHEuc2V0KCBjMiAqIHMxMywgczIgKiBzM18xLCBzMiAqIGMzXzEsIGMyICogYzEzICk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1lYWSc6XG5cdFx0XHRxLnNldCggczIgKiBjM18xLCBjMiAqIHMxMywgczIgKiBzM18xLCBjMiAqIGMxMyApO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdaWVonOlxuXHRcdFx0cS5zZXQoIHMyICogczNfMSwgczIgKiBjM18xLCBjMiAqIHMxMywgYzIgKiBjMTMgKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAnICsgb3JkZXIgKTtcblxuXHR9XG5cbn1cblxudmFyIE1hdGhVdGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRERUcyUkFEOiBERUcyUkFELFxuXHRSQUQyREVHOiBSQUQyREVHLFxuXHRnZW5lcmF0ZVVVSUQ6IGdlbmVyYXRlVVVJRCxcblx0Y2xhbXA6IGNsYW1wLFxuXHRldWNsaWRlYW5Nb2R1bG86IGV1Y2xpZGVhbk1vZHVsbyxcblx0bWFwTGluZWFyOiBtYXBMaW5lYXIsXG5cdGludmVyc2VMZXJwOiBpbnZlcnNlTGVycCxcblx0bGVycDogbGVycCxcblx0ZGFtcDogZGFtcCxcblx0cGluZ3Bvbmc6IHBpbmdwb25nLFxuXHRzbW9vdGhzdGVwOiBzbW9vdGhzdGVwLFxuXHRzbW9vdGhlcnN0ZXA6IHNtb290aGVyc3RlcCxcblx0cmFuZEludDogcmFuZEludCxcblx0cmFuZEZsb2F0OiByYW5kRmxvYXQsXG5cdHJhbmRGbG9hdFNwcmVhZDogcmFuZEZsb2F0U3ByZWFkLFxuXHRzZWVkZWRSYW5kb206IHNlZWRlZFJhbmRvbSxcblx0ZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuXHRyYWRUb0RlZzogcmFkVG9EZWcsXG5cdGlzUG93ZXJPZlR3bzogaXNQb3dlck9mVHdvLFxuXHRjZWlsUG93ZXJPZlR3bzogY2VpbFBvd2VyT2ZUd28sXG5cdGZsb29yUG93ZXJPZlR3bzogZmxvb3JQb3dlck9mVHdvLFxuXHRzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOiBzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyXG59KTtcblxuY2xhc3MgVmVjdG9yMiB7XG5cblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblxuXHR9XG5cblx0Z2V0IHdpZHRoKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueDtcblxuXHR9XG5cblx0c2V0IHdpZHRoKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMueCA9IHZhbHVlO1xuXG5cdH1cblxuXHRnZXQgaGVpZ2h0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueTtcblxuXHR9XG5cblx0c2V0IGhlaWdodCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnkgPSB2YWx1ZTtcblxuXHR9XG5cblx0c2V0KCB4LCB5ICkge1xuXG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0dGhpcy54ID0gc2NhbGFyO1xuXHRcdHRoaXMueSA9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYKCB4ICkge1xuXG5cdFx0dGhpcy54ID0geDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRZKCB5ICkge1xuXG5cdFx0dGhpcy55ID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRDb21wb25lbnQoIGluZGV4LCB2YWx1ZSApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHRoaXMueCA9IHZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgMTogdGhpcy55ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRDb21wb25lbnQoIGluZGV4ICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogcmV0dXJuIHRoaXMueDtcblx0XHRcdGNhc2UgMTogcmV0dXJuIHRoaXMueTtcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLngsIHRoaXMueSApO1xuXG5cdH1cblxuXHRjb3B5KCB2ICkge1xuXG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGQoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRTY2FsYXIoIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRWZWN0b3JzKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54ICsgYi54O1xuXHRcdHRoaXMueSA9IGEueSArIGIueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRTY2FsZWRWZWN0b3IoIHYsIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWIoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWJTY2FsYXIoIHMgKSB7XG5cblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWJWZWN0b3JzKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54IC0gYi54O1xuXHRcdHRoaXMueSA9IGEueSAtIGIueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseSggdiApIHtcblxuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseVNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpdmlkZSggdiApIHtcblxuXHRcdHRoaXMueCAvPSB2Lng7XG5cdFx0dGhpcy55IC89IHYueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXZpZGVTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4MyggbSApIHtcblxuXHRcdGNvbnN0IHggPSB0aGlzLngsIHkgPSB0aGlzLnk7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgMyBdICogeSArIGVbIDYgXTtcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDcgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtaW4oIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYXgoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcCggbWluLCBtYXggKSB7XG5cblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBNYXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pbi55LCBNYXRoLm1pbiggbWF4LnksIHRoaXMueSApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXBTY2FsYXIoIG1pblZhbCwgbWF4VmFsICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnkgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsYW1wTGVuZ3RoKCBtaW4sIG1heCApIHtcblxuXHRcdGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIGxlbmd0aCB8fCAxICkubXVsdGlwbHlTY2FsYXIoIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIGxlbmd0aCApICkgKTtcblxuXHR9XG5cblx0Zmxvb3IoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjZWlsKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNlaWwoIHRoaXMueSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdW5kKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5yb3VuZCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm91bmRUb1plcm8oKSB7XG5cblx0XHR0aGlzLnggPSAoIHRoaXMueCA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cblx0XHR0aGlzLnggPSAtIHRoaXMueDtcblx0XHR0aGlzLnkgPSAtIHRoaXMueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkb3QoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55O1xuXG5cdH1cblxuXHRjcm9zcyggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB2LnkgLSB0aGlzLnkgKiB2Lng7XG5cblx0fVxuXG5cdGxlbmd0aFNxKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueTtcblxuXHR9XG5cblx0bGVuZ3RoKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XG5cblx0fVxuXG5cdG1hbmhhdHRhbkxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLmFicyggdGhpcy54ICkgKyBNYXRoLmFicyggdGhpcy55ICk7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSB8fCAxICk7XG5cblx0fVxuXG5cdGFuZ2xlKCkge1xuXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcblxuXHRcdGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMiggLSB0aGlzLnksIC0gdGhpcy54ICkgKyBNYXRoLlBJO1xuXG5cdFx0cmV0dXJuIGFuZ2xlO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVRvU3F1YXJlZCggdiApICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9TcXVhcmVkKCB2ICkge1xuXG5cdFx0Y29uc3QgZHggPSB0aGlzLnggLSB2LngsIGR5ID0gdGhpcy55IC0gdi55O1xuXHRcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcblxuXHR9XG5cblx0bWFuaGF0dGFuRGlzdGFuY2VUbyggdiApIHtcblxuXHRcdHJldHVybiBNYXRoLmFicyggdGhpcy54IC0gdi54ICkgKyBNYXRoLmFicyggdGhpcy55IC0gdi55ICk7XG5cblx0fVxuXG5cdHNldExlbmd0aCggbGVuZ3RoICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApO1xuXG5cdH1cblxuXHRsZXJwKCB2LCBhbHBoYSApIHtcblxuXHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XG5cdFx0dGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRsZXJwVmVjdG9ycyggdjEsIHYyLCBhbHBoYSApIHtcblxuXHRcdHRoaXMueCA9IHYxLnggKyAoIHYyLnggLSB2MS54ICkgKiBhbHBoYTtcblx0XHR0aGlzLnkgPSB2MS55ICsgKCB2Mi55IC0gdjEueSApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCB2ICkge1xuXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0dGhpcy54ID0gYXJyYXlbIG9mZnNldCBdO1xuXHRcdHRoaXMueSA9IGFycmF5WyBvZmZzZXQgKyAxIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRoaXMueDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55O1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIG9mZnNldCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoIGluZGV4ICk7XG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoIGluZGV4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlQXJvdW5kKCBjZW50ZXIsIGFuZ2xlICkge1xuXG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKCBhbmdsZSApLCBzID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cblx0XHRjb25zdCB4ID0gdGhpcy54IC0gY2VudGVyLng7XG5cdFx0Y29uc3QgeSA9IHRoaXMueSAtIGNlbnRlci55O1xuXG5cdFx0dGhpcy54ID0geCAqIGMgLSB5ICogcyArIGNlbnRlci54O1xuXHRcdHRoaXMueSA9IHggKiBzICsgeSAqIGMgKyBjZW50ZXIueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYW5kb20oKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMueSA9IE1hdGgucmFuZG9tKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0KlsgU3ltYm9sLml0ZXJhdG9yIF0oKSB7XG5cblx0XHR5aWVsZCB0aGlzLng7XG5cdFx0eWllbGQgdGhpcy55O1xuXG5cdH1cblxufVxuXG5WZWN0b3IyLnByb3RvdHlwZS5pc1ZlY3RvcjIgPSB0cnVlO1xuXG5jbGFzcyBNYXRyaXgzIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuZWxlbWVudHMgPSBbXG5cblx0XHRcdDEsIDAsIDAsXG5cdFx0XHQwLCAxLCAwLFxuXHRcdFx0MCwgMCwgMVxuXG5cdFx0XTtcblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0c2V0KCBuMTEsIG4xMiwgbjEzLCBuMjEsIG4yMiwgbjIzLCBuMzEsIG4zMiwgbjMzICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSA9IG4xMTsgdGVbIDEgXSA9IG4yMTsgdGVbIDIgXSA9IG4zMTtcblx0XHR0ZVsgMyBdID0gbjEyOyB0ZVsgNCBdID0gbjIyOyB0ZVsgNSBdID0gbjMyO1xuXHRcdHRlWyA2IF0gPSBuMTM7IHRlWyA3IF0gPSBuMjM7IHRlWyA4IF0gPSBuMzM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0aWRlbnRpdHkoKSB7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0MSwgMCwgMCxcblx0XHRcdDAsIDEsIDAsXG5cdFx0XHQwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIG0gKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSA9IG1lWyAwIF07IHRlWyAxIF0gPSBtZVsgMSBdOyB0ZVsgMiBdID0gbWVbIDIgXTtcblx0XHR0ZVsgMyBdID0gbWVbIDMgXTsgdGVbIDQgXSA9IG1lWyA0IF07IHRlWyA1IF0gPSBtZVsgNSBdO1xuXHRcdHRlWyA2IF0gPSBtZVsgNiBdOyB0ZVsgNyBdID0gbWVbIDcgXTsgdGVbIDggXSA9IG1lWyA4IF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXh0cmFjdEJhc2lzKCB4QXhpcywgeUF4aXMsIHpBeGlzICkge1xuXG5cdFx0eEF4aXMuc2V0RnJvbU1hdHJpeDNDb2x1bW4oIHRoaXMsIDAgKTtcblx0XHR5QXhpcy5zZXRGcm9tTWF0cml4M0NvbHVtbiggdGhpcywgMSApO1xuXHRcdHpBeGlzLnNldEZyb21NYXRyaXgzQ29sdW1uKCB0aGlzLCAyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDQoIG0gKSB7XG5cblx0XHRjb25zdCBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0bWVbIDAgXSwgbWVbIDQgXSwgbWVbIDggXSxcblx0XHRcdG1lWyAxIF0sIG1lWyA1IF0sIG1lWyA5IF0sXG5cdFx0XHRtZVsgMiBdLCBtZVsgNiBdLCBtZVsgMTAgXVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseSggbSApIHtcblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIHRoaXMsIG0gKTtcblxuXHR9XG5cblx0cHJlbXVsdGlwbHkoIG0gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBtLCB0aGlzICk7XG5cblx0fVxuXG5cdG11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSB7XG5cblx0XHRjb25zdCBhZSA9IGEuZWxlbWVudHM7XG5cdFx0Y29uc3QgYmUgPSBiLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IGExMSA9IGFlWyAwIF0sIGExMiA9IGFlWyAzIF0sIGExMyA9IGFlWyA2IF07XG5cdFx0Y29uc3QgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDQgXSwgYTIzID0gYWVbIDcgXTtcblx0XHRjb25zdCBhMzEgPSBhZVsgMiBdLCBhMzIgPSBhZVsgNSBdLCBhMzMgPSBhZVsgOCBdO1xuXG5cdFx0Y29uc3QgYjExID0gYmVbIDAgXSwgYjEyID0gYmVbIDMgXSwgYjEzID0gYmVbIDYgXTtcblx0XHRjb25zdCBiMjEgPSBiZVsgMSBdLCBiMjIgPSBiZVsgNCBdLCBiMjMgPSBiZVsgNyBdO1xuXHRcdGNvbnN0IGIzMSA9IGJlWyAyIF0sIGIzMiA9IGJlWyA1IF0sIGIzMyA9IGJlWyA4IF07XG5cblx0XHR0ZVsgMCBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxO1xuXHRcdHRlWyAzIF0gPSBhMTEgKiBiMTIgKyBhMTIgKiBiMjIgKyBhMTMgKiBiMzI7XG5cdFx0dGVbIDYgXSA9IGExMSAqIGIxMyArIGExMiAqIGIyMyArIGExMyAqIGIzMztcblxuXHRcdHRlWyAxIF0gPSBhMjEgKiBiMTEgKyBhMjIgKiBiMjEgKyBhMjMgKiBiMzE7XG5cdFx0dGVbIDQgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMjtcblx0XHR0ZVsgNyBdID0gYTIxICogYjEzICsgYTIyICogYjIzICsgYTIzICogYjMzO1xuXG5cdFx0dGVbIDIgXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEzMyAqIGIzMTtcblx0XHR0ZVsgNSBdID0gYTMxICogYjEyICsgYTMyICogYjIyICsgYTMzICogYjMyO1xuXHRcdHRlWyA4IF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBhMzMgKiBiMzM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIoIHMgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR0ZVsgMCBdICo9IHM7IHRlWyAzIF0gKj0gczsgdGVbIDYgXSAqPSBzO1xuXHRcdHRlWyAxIF0gKj0gczsgdGVbIDQgXSAqPSBzOyB0ZVsgNyBdICo9IHM7XG5cdFx0dGVbIDIgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA4IF0gKj0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkZXRlcm1pbmFudCgpIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IGEgPSB0ZVsgMCBdLCBiID0gdGVbIDEgXSwgYyA9IHRlWyAyIF0sXG5cdFx0XHRkID0gdGVbIDMgXSwgZSA9IHRlWyA0IF0sIGYgPSB0ZVsgNSBdLFxuXHRcdFx0ZyA9IHRlWyA2IF0sIGggPSB0ZVsgNyBdLCBpID0gdGVbIDggXTtcblxuXHRcdHJldHVybiBhICogZSAqIGkgLSBhICogZiAqIGggLSBiICogZCAqIGkgKyBiICogZiAqIGcgKyBjICogZCAqIGggLSBjICogZSAqIGc7XG5cblx0fVxuXG5cdGludmVydCgpIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cyxcblxuXHRcdFx0bjExID0gdGVbIDAgXSwgbjIxID0gdGVbIDEgXSwgbjMxID0gdGVbIDIgXSxcblx0XHRcdG4xMiA9IHRlWyAzIF0sIG4yMiA9IHRlWyA0IF0sIG4zMiA9IHRlWyA1IF0sXG5cdFx0XHRuMTMgPSB0ZVsgNiBdLCBuMjMgPSB0ZVsgNyBdLCBuMzMgPSB0ZVsgOCBdLFxuXG5cdFx0XHR0MTEgPSBuMzMgKiBuMjIgLSBuMzIgKiBuMjMsXG5cdFx0XHR0MTIgPSBuMzIgKiBuMTMgLSBuMzMgKiBuMTIsXG5cdFx0XHR0MTMgPSBuMjMgKiBuMTIgLSBuMjIgKiBuMTMsXG5cblx0XHRcdGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiArIG4zMSAqIHQxMztcblxuXHRcdGlmICggZGV0ID09PSAwICkgcmV0dXJuIHRoaXMuc2V0KCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwICk7XG5cblx0XHRjb25zdCBkZXRJbnYgPSAxIC8gZGV0O1xuXG5cdFx0dGVbIDAgXSA9IHQxMSAqIGRldEludjtcblx0XHR0ZVsgMSBdID0gKCBuMzEgKiBuMjMgLSBuMzMgKiBuMjEgKSAqIGRldEludjtcblx0XHR0ZVsgMiBdID0gKCBuMzIgKiBuMjEgLSBuMzEgKiBuMjIgKSAqIGRldEludjtcblxuXHRcdHRlWyAzIF0gPSB0MTIgKiBkZXRJbnY7XG5cdFx0dGVbIDQgXSA9ICggbjMzICogbjExIC0gbjMxICogbjEzICkgKiBkZXRJbnY7XG5cdFx0dGVbIDUgXSA9ICggbjMxICogbjEyIC0gbjMyICogbjExICkgKiBkZXRJbnY7XG5cblx0XHR0ZVsgNiBdID0gdDEzICogZGV0SW52O1xuXHRcdHRlWyA3IF0gPSAoIG4yMSAqIG4xMyAtIG4yMyAqIG4xMSApICogZGV0SW52O1xuXHRcdHRlWyA4IF0gPSAoIG4yMiAqIG4xMSAtIG4yMSAqIG4xMiApICogZGV0SW52O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zcG9zZSgpIHtcblxuXHRcdGxldCB0bXA7XG5cdFx0Y29uc3QgbSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR0bXAgPSBtWyAxIF07IG1bIDEgXSA9IG1bIDMgXTsgbVsgMyBdID0gdG1wO1xuXHRcdHRtcCA9IG1bIDIgXTsgbVsgMiBdID0gbVsgNiBdOyBtWyA2IF0gPSB0bXA7XG5cdFx0dG1wID0gbVsgNSBdOyBtWyA1IF0gPSBtWyA3IF07IG1bIDcgXSA9IHRtcDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXROb3JtYWxNYXRyaXgoIG1hdHJpeDQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCggbWF0cml4NCApLmludmVydCgpLnRyYW5zcG9zZSgpO1xuXG5cdH1cblxuXHR0cmFuc3Bvc2VJbnRvQXJyYXkoIHIgKSB7XG5cblx0XHRjb25zdCBtID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHJbIDAgXSA9IG1bIDAgXTtcblx0XHRyWyAxIF0gPSBtWyAzIF07XG5cdFx0clsgMiBdID0gbVsgNiBdO1xuXHRcdHJbIDMgXSA9IG1bIDEgXTtcblx0XHRyWyA0IF0gPSBtWyA0IF07XG5cdFx0clsgNSBdID0gbVsgNyBdO1xuXHRcdHJbIDYgXSA9IG1bIDIgXTtcblx0XHRyWyA3IF0gPSBtWyA1IF07XG5cdFx0clsgOCBdID0gbVsgOCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFV2VHJhbnNmb3JtKCB0eCwgdHksIHN4LCBzeSwgcm90YXRpb24sIGN4LCBjeSApIHtcblxuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyggcm90YXRpb24gKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4oIHJvdGF0aW9uICk7XG5cblx0XHR0aGlzLnNldChcblx0XHRcdHN4ICogYywgc3ggKiBzLCAtIHN4ICogKCBjICogY3ggKyBzICogY3kgKSArIGN4ICsgdHgsXG5cdFx0XHQtIHN5ICogcywgc3kgKiBjLCAtIHN5ICogKCAtIHMgKiBjeCArIGMgKiBjeSApICsgY3kgKyB0eSxcblx0XHRcdDAsIDAsIDFcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNjYWxlKCBzeCwgc3kgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR0ZVsgMCBdICo9IHN4OyB0ZVsgMyBdICo9IHN4OyB0ZVsgNiBdICo9IHN4O1xuXHRcdHRlWyAxIF0gKj0gc3k7IHRlWyA0IF0gKj0gc3k7IHRlWyA3IF0gKj0gc3k7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlKCB0aGV0YSApIHtcblxuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyggdGhldGEgKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRjb25zdCBhMTEgPSB0ZVsgMCBdLCBhMTIgPSB0ZVsgMyBdLCBhMTMgPSB0ZVsgNiBdO1xuXHRcdGNvbnN0IGEyMSA9IHRlWyAxIF0sIGEyMiA9IHRlWyA0IF0sIGEyMyA9IHRlWyA3IF07XG5cblx0XHR0ZVsgMCBdID0gYyAqIGExMSArIHMgKiBhMjE7XG5cdFx0dGVbIDMgXSA9IGMgKiBhMTIgKyBzICogYTIyO1xuXHRcdHRlWyA2IF0gPSBjICogYTEzICsgcyAqIGEyMztcblxuXHRcdHRlWyAxIF0gPSAtIHMgKiBhMTEgKyBjICogYTIxO1xuXHRcdHRlWyA0IF0gPSAtIHMgKiBhMTIgKyBjICogYTIyO1xuXHRcdHRlWyA3IF0gPSAtIHMgKiBhMTMgKyBjICogYTIzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZSggdHgsIHR5ICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSArPSB0eCAqIHRlWyAyIF07IHRlWyAzIF0gKz0gdHggKiB0ZVsgNSBdOyB0ZVsgNiBdICs9IHR4ICogdGVbIDggXTtcblx0XHR0ZVsgMSBdICs9IHR5ICogdGVbIDIgXTsgdGVbIDQgXSArPSB0eSAqIHRlWyA1IF07IHRlWyA3IF0gKz0gdHkgKiB0ZVsgOCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggbWF0cml4ICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0aWYgKCB0ZVsgaSBdICE9PSBtZVsgaSBdICkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fVxuXG5cdGZyb21BcnJheSggYXJyYXksIG9mZnNldCA9IDAgKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRzWyBpIF0gPSBhcnJheVsgaSArIG9mZnNldCBdO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0ZVsgMCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0ZVsgMSBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0ZVsgMiBdO1xuXG5cdFx0YXJyYXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDQgXSA9IHRlWyA0IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDUgXSA9IHRlWyA1IF07XG5cblx0XHRhcnJheVsgb2Zmc2V0ICsgNiBdID0gdGVbIDYgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgOCBdID0gdGVbIDggXTtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5mcm9tQXJyYXkoIHRoaXMuZWxlbWVudHMgKTtcblxuXHR9XG5cbn1cblxuTWF0cml4My5wcm90b3R5cGUuaXNNYXRyaXgzID0gdHJ1ZTtcblxuZnVuY3Rpb24gYXJyYXlOZWVkc1VpbnQzMiggYXJyYXkgKSB7XG5cblx0Ly8gYXNzdW1lcyBsYXJnZXIgdmFsdWVzIHVzdWFsbHkgb24gbGFzdFxuXG5cdGZvciAoIGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLSBpICkge1xuXG5cdFx0aWYgKCBhcnJheVsgaSBdID4gNjU1MzUgKSByZXR1cm4gdHJ1ZTtcblxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xuXG59XG5cbmNvbnN0IFRZUEVEX0FSUkFZUyA9IHtcblx0SW50OEFycmF5OiBJbnQ4QXJyYXksXG5cdFVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXksXG5cdFVpbnQ4Q2xhbXBlZEFycmF5OiBVaW50OENsYW1wZWRBcnJheSxcblx0SW50MTZBcnJheTogSW50MTZBcnJheSxcblx0VWludDE2QXJyYXk6IFVpbnQxNkFycmF5LFxuXHRJbnQzMkFycmF5OiBJbnQzMkFycmF5LFxuXHRVaW50MzJBcnJheTogVWludDMyQXJyYXksXG5cdEZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXk6IEZsb2F0NjRBcnJheVxufTtcblxuZnVuY3Rpb24gZ2V0VHlwZWRBcnJheSggdHlwZSwgYnVmZmVyICkge1xuXG5cdHJldHVybiBuZXcgVFlQRURfQVJSQVlTWyB0eXBlIF0oIGJ1ZmZlciApO1xuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyggbmFtZSApIHtcblxuXHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsIG5hbWUgKTtcblxufVxuXG5jb25zdCBfY29sb3JLZXl3b3JkcyA9IHsgJ2FsaWNlYmx1ZSc6IDB4RjBGOEZGLCAnYW50aXF1ZXdoaXRlJzogMHhGQUVCRDcsICdhcXVhJzogMHgwMEZGRkYsICdhcXVhbWFyaW5lJzogMHg3RkZGRDQsICdhenVyZSc6IDB4RjBGRkZGLFxuXHQnYmVpZ2UnOiAweEY1RjVEQywgJ2Jpc3F1ZSc6IDB4RkZFNEM0LCAnYmxhY2snOiAweDAwMDAwMCwgJ2JsYW5jaGVkYWxtb25kJzogMHhGRkVCQ0QsICdibHVlJzogMHgwMDAwRkYsICdibHVldmlvbGV0JzogMHg4QTJCRTIsXG5cdCdicm93bic6IDB4QTUyQTJBLCAnYnVybHl3b29kJzogMHhERUI4ODcsICdjYWRldGJsdWUnOiAweDVGOUVBMCwgJ2NoYXJ0cmV1c2UnOiAweDdGRkYwMCwgJ2Nob2NvbGF0ZSc6IDB4RDI2OTFFLCAnY29yYWwnOiAweEZGN0Y1MCxcblx0J2Nvcm5mbG93ZXJibHVlJzogMHg2NDk1RUQsICdjb3Juc2lsayc6IDB4RkZGOERDLCAnY3JpbXNvbic6IDB4REMxNDNDLCAnY3lhbic6IDB4MDBGRkZGLCAnZGFya2JsdWUnOiAweDAwMDA4QiwgJ2RhcmtjeWFuJzogMHgwMDhCOEIsXG5cdCdkYXJrZ29sZGVucm9kJzogMHhCODg2MEIsICdkYXJrZ3JheSc6IDB4QTlBOUE5LCAnZGFya2dyZWVuJzogMHgwMDY0MDAsICdkYXJrZ3JleSc6IDB4QTlBOUE5LCAnZGFya2toYWtpJzogMHhCREI3NkIsICdkYXJrbWFnZW50YSc6IDB4OEIwMDhCLFxuXHQnZGFya29saXZlZ3JlZW4nOiAweDU1NkIyRiwgJ2RhcmtvcmFuZ2UnOiAweEZGOEMwMCwgJ2RhcmtvcmNoaWQnOiAweDk5MzJDQywgJ2RhcmtyZWQnOiAweDhCMDAwMCwgJ2RhcmtzYWxtb24nOiAweEU5OTY3QSwgJ2RhcmtzZWFncmVlbic6IDB4OEZCQzhGLFxuXHQnZGFya3NsYXRlYmx1ZSc6IDB4NDgzRDhCLCAnZGFya3NsYXRlZ3JheSc6IDB4MkY0RjRGLCAnZGFya3NsYXRlZ3JleSc6IDB4MkY0RjRGLCAnZGFya3R1cnF1b2lzZSc6IDB4MDBDRUQxLCAnZGFya3Zpb2xldCc6IDB4OTQwMEQzLFxuXHQnZGVlcHBpbmsnOiAweEZGMTQ5MywgJ2RlZXBza3libHVlJzogMHgwMEJGRkYsICdkaW1ncmF5JzogMHg2OTY5NjksICdkaW1ncmV5JzogMHg2OTY5NjksICdkb2RnZXJibHVlJzogMHgxRTkwRkYsICdmaXJlYnJpY2snOiAweEIyMjIyMixcblx0J2Zsb3JhbHdoaXRlJzogMHhGRkZBRjAsICdmb3Jlc3RncmVlbic6IDB4MjI4QjIyLCAnZnVjaHNpYSc6IDB4RkYwMEZGLCAnZ2FpbnNib3JvJzogMHhEQ0RDREMsICdnaG9zdHdoaXRlJzogMHhGOEY4RkYsICdnb2xkJzogMHhGRkQ3MDAsXG5cdCdnb2xkZW5yb2QnOiAweERBQTUyMCwgJ2dyYXknOiAweDgwODA4MCwgJ2dyZWVuJzogMHgwMDgwMDAsICdncmVlbnllbGxvdyc6IDB4QURGRjJGLCAnZ3JleSc6IDB4ODA4MDgwLCAnaG9uZXlkZXcnOiAweEYwRkZGMCwgJ2hvdHBpbmsnOiAweEZGNjlCNCxcblx0J2luZGlhbnJlZCc6IDB4Q0Q1QzVDLCAnaW5kaWdvJzogMHg0QjAwODIsICdpdm9yeSc6IDB4RkZGRkYwLCAna2hha2knOiAweEYwRTY4QywgJ2xhdmVuZGVyJzogMHhFNkU2RkEsICdsYXZlbmRlcmJsdXNoJzogMHhGRkYwRjUsICdsYXduZ3JlZW4nOiAweDdDRkMwMCxcblx0J2xlbW9uY2hpZmZvbic6IDB4RkZGQUNELCAnbGlnaHRibHVlJzogMHhBREQ4RTYsICdsaWdodGNvcmFsJzogMHhGMDgwODAsICdsaWdodGN5YW4nOiAweEUwRkZGRiwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogMHhGQUZBRDIsICdsaWdodGdyYXknOiAweEQzRDNEMyxcblx0J2xpZ2h0Z3JlZW4nOiAweDkwRUU5MCwgJ2xpZ2h0Z3JleSc6IDB4RDNEM0QzLCAnbGlnaHRwaW5rJzogMHhGRkI2QzEsICdsaWdodHNhbG1vbic6IDB4RkZBMDdBLCAnbGlnaHRzZWFncmVlbic6IDB4MjBCMkFBLCAnbGlnaHRza3libHVlJzogMHg4N0NFRkEsXG5cdCdsaWdodHNsYXRlZ3JheSc6IDB4Nzc4ODk5LCAnbGlnaHRzbGF0ZWdyZXknOiAweDc3ODg5OSwgJ2xpZ2h0c3RlZWxibHVlJzogMHhCMEM0REUsICdsaWdodHllbGxvdyc6IDB4RkZGRkUwLCAnbGltZSc6IDB4MDBGRjAwLCAnbGltZWdyZWVuJzogMHgzMkNEMzIsXG5cdCdsaW5lbic6IDB4RkFGMEU2LCAnbWFnZW50YSc6IDB4RkYwMEZGLCAnbWFyb29uJzogMHg4MDAwMDAsICdtZWRpdW1hcXVhbWFyaW5lJzogMHg2NkNEQUEsICdtZWRpdW1ibHVlJzogMHgwMDAwQ0QsICdtZWRpdW1vcmNoaWQnOiAweEJBNTVEMyxcblx0J21lZGl1bXB1cnBsZSc6IDB4OTM3MERCLCAnbWVkaXVtc2VhZ3JlZW4nOiAweDNDQjM3MSwgJ21lZGl1bXNsYXRlYmx1ZSc6IDB4N0I2OEVFLCAnbWVkaXVtc3ByaW5nZ3JlZW4nOiAweDAwRkE5QSwgJ21lZGl1bXR1cnF1b2lzZSc6IDB4NDhEMUNDLFxuXHQnbWVkaXVtdmlvbGV0cmVkJzogMHhDNzE1ODUsICdtaWRuaWdodGJsdWUnOiAweDE5MTk3MCwgJ21pbnRjcmVhbSc6IDB4RjVGRkZBLCAnbWlzdHlyb3NlJzogMHhGRkU0RTEsICdtb2NjYXNpbic6IDB4RkZFNEI1LCAnbmF2YWpvd2hpdGUnOiAweEZGREVBRCxcblx0J25hdnknOiAweDAwMDA4MCwgJ29sZGxhY2UnOiAweEZERjVFNiwgJ29saXZlJzogMHg4MDgwMDAsICdvbGl2ZWRyYWInOiAweDZCOEUyMywgJ29yYW5nZSc6IDB4RkZBNTAwLCAnb3JhbmdlcmVkJzogMHhGRjQ1MDAsICdvcmNoaWQnOiAweERBNzBENixcblx0J3BhbGVnb2xkZW5yb2QnOiAweEVFRThBQSwgJ3BhbGVncmVlbic6IDB4OThGQjk4LCAncGFsZXR1cnF1b2lzZSc6IDB4QUZFRUVFLCAncGFsZXZpb2xldHJlZCc6IDB4REI3MDkzLCAncGFwYXlhd2hpcCc6IDB4RkZFRkQ1LCAncGVhY2hwdWZmJzogMHhGRkRBQjksXG5cdCdwZXJ1JzogMHhDRDg1M0YsICdwaW5rJzogMHhGRkMwQ0IsICdwbHVtJzogMHhEREEwREQsICdwb3dkZXJibHVlJzogMHhCMEUwRTYsICdwdXJwbGUnOiAweDgwMDA4MCwgJ3JlYmVjY2FwdXJwbGUnOiAweDY2MzM5OSwgJ3JlZCc6IDB4RkYwMDAwLCAncm9zeWJyb3duJzogMHhCQzhGOEYsXG5cdCdyb3lhbGJsdWUnOiAweDQxNjlFMSwgJ3NhZGRsZWJyb3duJzogMHg4QjQ1MTMsICdzYWxtb24nOiAweEZBODA3MiwgJ3NhbmR5YnJvd24nOiAweEY0QTQ2MCwgJ3NlYWdyZWVuJzogMHgyRThCNTcsICdzZWFzaGVsbCc6IDB4RkZGNUVFLFxuXHQnc2llbm5hJzogMHhBMDUyMkQsICdzaWx2ZXInOiAweEMwQzBDMCwgJ3NreWJsdWUnOiAweDg3Q0VFQiwgJ3NsYXRlYmx1ZSc6IDB4NkE1QUNELCAnc2xhdGVncmF5JzogMHg3MDgwOTAsICdzbGF0ZWdyZXknOiAweDcwODA5MCwgJ3Nub3cnOiAweEZGRkFGQSxcblx0J3NwcmluZ2dyZWVuJzogMHgwMEZGN0YsICdzdGVlbGJsdWUnOiAweDQ2ODJCNCwgJ3Rhbic6IDB4RDJCNDhDLCAndGVhbCc6IDB4MDA4MDgwLCAndGhpc3RsZSc6IDB4RDhCRkQ4LCAndG9tYXRvJzogMHhGRjYzNDcsICd0dXJxdW9pc2UnOiAweDQwRTBEMCxcblx0J3Zpb2xldCc6IDB4RUU4MkVFLCAnd2hlYXQnOiAweEY1REVCMywgJ3doaXRlJzogMHhGRkZGRkYsICd3aGl0ZXNtb2tlJzogMHhGNUY1RjUsICd5ZWxsb3cnOiAweEZGRkYwMCwgJ3llbGxvd2dyZWVuJzogMHg5QUNEMzIgfTtcblxuY29uc3QgX2hzbEEgPSB7IGg6IDAsIHM6IDAsIGw6IDAgfTtcbmNvbnN0IF9oc2xCID0geyBoOiAwLCBzOiAwLCBsOiAwIH07XG5cbmZ1bmN0aW9uIGh1ZTJyZ2IoIHAsIHEsIHQgKSB7XG5cblx0aWYgKCB0IDwgMCApIHQgKz0gMTtcblx0aWYgKCB0ID4gMSApIHQgLT0gMTtcblx0aWYgKCB0IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0O1xuXHRpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xuXHRpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XG5cdHJldHVybiBwO1xuXG59XG5cbmZ1bmN0aW9uIFNSR0JUb0xpbmVhciggYyApIHtcblxuXHRyZXR1cm4gKCBjIDwgMC4wNDA0NSApID8gYyAqIDAuMDc3Mzk5MzgwOCA6IE1hdGgucG93KCBjICogMC45NDc4NjcyOTg2ICsgMC4wNTIxMzI3MDE0LCAyLjQgKTtcblxufVxuXG5mdW5jdGlvbiBMaW5lYXJUb1NSR0IoIGMgKSB7XG5cblx0cmV0dXJuICggYyA8IDAuMDAzMTMwOCApID8gYyAqIDEyLjkyIDogMS4wNTUgKiAoIE1hdGgucG93KCBjLCAwLjQxNjY2ICkgKSAtIDAuMDU1O1xuXG59XG5cbmNsYXNzIENvbG9yIHtcblxuXHRjb25zdHJ1Y3RvciggciwgZywgYiApIHtcblxuXHRcdGlmICggZyA9PT0gdW5kZWZpbmVkICYmIGIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gciBpcyBUSFJFRS5Db2xvciwgaGV4IG9yIHN0cmluZ1xuXHRcdFx0cmV0dXJuIHRoaXMuc2V0KCByICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRSR0IoIHIsIGcsIGIgKTtcblxuXHR9XG5cblx0c2V0KCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgJiYgdmFsdWUuaXNDb2xvciApIHtcblxuXHRcdFx0dGhpcy5jb3B5KCB2YWx1ZSApO1xuXG5cdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyApIHtcblxuXHRcdFx0dGhpcy5zZXRIZXgoIHZhbHVlICk7XG5cblx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICkge1xuXG5cdFx0XHR0aGlzLnNldFN0eWxlKCB2YWx1ZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0dGhpcy5yID0gc2NhbGFyO1xuXHRcdHRoaXMuZyA9IHNjYWxhcjtcblx0XHR0aGlzLmIgPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0SGV4KCBoZXggKSB7XG5cblx0XHRoZXggPSBNYXRoLmZsb29yKCBoZXggKTtcblxuXHRcdHRoaXMuciA9ICggaGV4ID4+IDE2ICYgMjU1ICkgLyAyNTU7XG5cdFx0dGhpcy5nID0gKCBoZXggPj4gOCAmIDI1NSApIC8gMjU1O1xuXHRcdHRoaXMuYiA9ICggaGV4ICYgMjU1ICkgLyAyNTU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0UkdCKCByLCBnLCBiICkge1xuXG5cdFx0dGhpcy5yID0gcjtcblx0XHR0aGlzLmcgPSBnO1xuXHRcdHRoaXMuYiA9IGI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0SFNMKCBoLCBzLCBsICkge1xuXG5cdFx0Ly8gaCxzLGwgcmFuZ2VzIGFyZSBpbiAwLjAgLSAxLjBcblx0XHRoID0gZXVjbGlkZWFuTW9kdWxvKCBoLCAxICk7XG5cdFx0cyA9IGNsYW1wKCBzLCAwLCAxICk7XG5cdFx0bCA9IGNsYW1wKCBsLCAwLCAxICk7XG5cblx0XHRpZiAoIHMgPT09IDAgKSB7XG5cblx0XHRcdHRoaXMuciA9IHRoaXMuZyA9IHRoaXMuYiA9IGw7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBwID0gbCA8PSAwLjUgPyBsICogKCAxICsgcyApIDogbCArIHMgLSAoIGwgKiBzICk7XG5cdFx0XHRjb25zdCBxID0gKCAyICogbCApIC0gcDtcblxuXHRcdFx0dGhpcy5yID0gaHVlMnJnYiggcSwgcCwgaCArIDEgLyAzICk7XG5cdFx0XHR0aGlzLmcgPSBodWUycmdiKCBxLCBwLCBoICk7XG5cdFx0XHR0aGlzLmIgPSBodWUycmdiKCBxLCBwLCBoIC0gMSAvIDMgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRTdHlsZSggc3R5bGUgKSB7XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVBbHBoYSggc3RyaW5nICkge1xuXG5cdFx0XHRpZiAoIHN0cmluZyA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIHBhcnNlRmxvYXQoIHN0cmluZyApIDwgMSApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICcgKyBzdHlsZSArICcgd2lsbCBiZSBpZ25vcmVkLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cblx0XHRsZXQgbTtcblxuXHRcdGlmICggbSA9IC9eKCg/OnJnYnxoc2wpYT8pXFwoKFteXFwpXSopXFwpLy5leGVjKCBzdHlsZSApICkge1xuXG5cdFx0XHQvLyByZ2IgLyBoc2xcblxuXHRcdFx0bGV0IGNvbG9yO1xuXHRcdFx0Y29uc3QgbmFtZSA9IG1bIDEgXTtcblx0XHRcdGNvbnN0IGNvbXBvbmVudHMgPSBtWyAyIF07XG5cblx0XHRcdHN3aXRjaCAoIG5hbWUgKSB7XG5cblx0XHRcdFx0Y2FzZSAncmdiJzpcblx0XHRcdFx0Y2FzZSAncmdiYSc6XG5cblx0XHRcdFx0XHRpZiAoIGNvbG9yID0gL15cXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHJnYigyNTUsMCwwKSByZ2JhKDI1NSwwLDAsMC41KVxuXHRcdFx0XHRcdFx0dGhpcy5yID0gTWF0aC5taW4oIDI1NSwgcGFyc2VJbnQoIGNvbG9yWyAxIF0sIDEwICkgKSAvIDI1NTtcblx0XHRcdFx0XHRcdHRoaXMuZyA9IE1hdGgubWluKCAyNTUsIHBhcnNlSW50KCBjb2xvclsgMiBdLCAxMCApICkgLyAyNTU7XG5cdFx0XHRcdFx0XHR0aGlzLmIgPSBNYXRoLm1pbiggMjU1LCBwYXJzZUludCggY29sb3JbIDMgXSwgMTAgKSApIC8gMjU1O1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVBbHBoYSggY29sb3JbIDQgXSApO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggY29sb3IgPSAvXlxccyooXFxkKylcXCVcXHMqLFxccyooXFxkKylcXCVcXHMqLFxccyooXFxkKylcXCVcXHMqKD86LFxccyooXFxkKlxcLj9cXGQrKVxccyopPyQvLmV4ZWMoIGNvbXBvbmVudHMgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcmdiKDEwMCUsMCUsMCUpIHJnYmEoMTAwJSwwJSwwJSwwLjUpXG5cdFx0XHRcdFx0XHR0aGlzLnIgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29sb3JbIDEgXSwgMTAgKSApIC8gMTAwO1xuXHRcdFx0XHRcdFx0dGhpcy5nID0gTWF0aC5taW4oIDEwMCwgcGFyc2VJbnQoIGNvbG9yWyAyIF0sIDEwICkgKSAvIDEwMDtcblx0XHRcdFx0XHRcdHRoaXMuYiA9IE1hdGgubWluKCAxMDAsIHBhcnNlSW50KCBjb2xvclsgMyBdLCAxMCApICkgLyAxMDA7XG5cblx0XHRcdFx0XHRcdGhhbmRsZUFscGhhKCBjb2xvclsgNCBdICk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnaHNsJzpcblx0XHRcdFx0Y2FzZSAnaHNsYSc6XG5cblx0XHRcdFx0XHRpZiAoIGNvbG9yID0gL15cXHMqKFxcZCpcXC4/XFxkKylcXHMqLFxccyooXFxkKylcXCVcXHMqLFxccyooXFxkKylcXCVcXHMqKD86LFxccyooXFxkKlxcLj9cXGQrKVxccyopPyQvLmV4ZWMoIGNvbXBvbmVudHMgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gaHNsKDEyMCw1MCUsNTAlKSBoc2xhKDEyMCw1MCUsNTAlLDAuNSlcblx0XHRcdFx0XHRcdGNvbnN0IGggPSBwYXJzZUZsb2F0KCBjb2xvclsgMSBdICkgLyAzNjA7XG5cdFx0XHRcdFx0XHRjb25zdCBzID0gcGFyc2VJbnQoIGNvbG9yWyAyIF0sIDEwICkgLyAxMDA7XG5cdFx0XHRcdFx0XHRjb25zdCBsID0gcGFyc2VJbnQoIGNvbG9yWyAzIF0sIDEwICkgLyAxMDA7XG5cblx0XHRcdFx0XHRcdGhhbmRsZUFscGhhKCBjb2xvclsgNCBdICk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEhTTCggaCwgcywgbCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIG0gPSAvXlxcIyhbQS1GYS1mXFxkXSspJC8uZXhlYyggc3R5bGUgKSApIHtcblxuXHRcdFx0Ly8gaGV4IGNvbG9yXG5cblx0XHRcdGNvbnN0IGhleCA9IG1bIDEgXTtcblx0XHRcdGNvbnN0IHNpemUgPSBoZXgubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHNpemUgPT09IDMgKSB7XG5cblx0XHRcdFx0Ly8gI2ZmMFxuXHRcdFx0XHR0aGlzLnIgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMCApICsgaGV4LmNoYXJBdCggMCApLCAxNiApIC8gMjU1O1xuXHRcdFx0XHR0aGlzLmcgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMSApICsgaGV4LmNoYXJBdCggMSApLCAxNiApIC8gMjU1O1xuXHRcdFx0XHR0aGlzLmIgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMiApICsgaGV4LmNoYXJBdCggMiApLCAxNiApIC8gMjU1O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzaXplID09PSA2ICkge1xuXG5cdFx0XHRcdC8vICNmZjAwMDBcblx0XHRcdFx0dGhpcy5yID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDAgKSArIGhleC5jaGFyQXQoIDEgKSwgMTYgKSAvIDI1NTtcblx0XHRcdFx0dGhpcy5nID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDIgKSArIGhleC5jaGFyQXQoIDMgKSwgMTYgKSAvIDI1NTtcblx0XHRcdFx0dGhpcy5iID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDQgKSArIGhleC5jaGFyQXQoIDUgKSwgMTYgKSAvIDI1NTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBzdHlsZSAmJiBzdHlsZS5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRDb2xvck5hbWUoIHN0eWxlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Q29sb3JOYW1lKCBzdHlsZSApIHtcblxuXHRcdC8vIGNvbG9yIGtleXdvcmRzXG5cdFx0Y29uc3QgaGV4ID0gX2NvbG9yS2V5d29yZHNbIHN0eWxlLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdGlmICggaGV4ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIHJlZFxuXHRcdFx0dGhpcy5zZXRIZXgoIGhleCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gdW5rbm93biBjb2xvclxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgJyArIHN0eWxlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuciwgdGhpcy5nLCB0aGlzLmIgKTtcblxuXHR9XG5cblx0Y29weSggY29sb3IgKSB7XG5cblx0XHR0aGlzLnIgPSBjb2xvci5yO1xuXHRcdHRoaXMuZyA9IGNvbG9yLmc7XG5cdFx0dGhpcy5iID0gY29sb3IuYjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5U1JHQlRvTGluZWFyKCBjb2xvciApIHtcblxuXHRcdHRoaXMuciA9IFNSR0JUb0xpbmVhciggY29sb3IuciApO1xuXHRcdHRoaXMuZyA9IFNSR0JUb0xpbmVhciggY29sb3IuZyApO1xuXHRcdHRoaXMuYiA9IFNSR0JUb0xpbmVhciggY29sb3IuYiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlMaW5lYXJUb1NSR0IoIGNvbG9yICkge1xuXG5cdFx0dGhpcy5yID0gTGluZWFyVG9TUkdCKCBjb2xvci5yICk7XG5cdFx0dGhpcy5nID0gTGluZWFyVG9TUkdCKCBjb2xvci5nICk7XG5cdFx0dGhpcy5iID0gTGluZWFyVG9TUkdCKCBjb2xvci5iICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29udmVydFNSR0JUb0xpbmVhcigpIHtcblxuXHRcdHRoaXMuY29weVNSR0JUb0xpbmVhciggdGhpcyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbnZlcnRMaW5lYXJUb1NSR0IoKSB7XG5cblx0XHR0aGlzLmNvcHlMaW5lYXJUb1NSR0IoIHRoaXMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRIZXgoKSB7XG5cblx0XHRyZXR1cm4gKCB0aGlzLnIgKiAyNTUgKSA8PCAxNiBeICggdGhpcy5nICogMjU1ICkgPDwgOCBeICggdGhpcy5iICogMjU1ICkgPDwgMDtcblxuXHR9XG5cblx0Z2V0SGV4U3RyaW5nKCkge1xuXG5cdFx0cmV0dXJuICggJzAwMDAwMCcgKyB0aGlzLmdldEhleCgpLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xuXG5cdH1cblxuXHRnZXRIU0woIHRhcmdldCApIHtcblxuXHRcdC8vIGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wXG5cblx0XHRjb25zdCByID0gdGhpcy5yLCBnID0gdGhpcy5nLCBiID0gdGhpcy5iO1xuXG5cdFx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoIHIsIGcsIGIgKTtcblx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbiggciwgZywgYiApO1xuXG5cdFx0bGV0IGh1ZSwgc2F0dXJhdGlvbjtcblx0XHRjb25zdCBsaWdodG5lc3MgPSAoIG1pbiArIG1heCApIC8gMi4wO1xuXG5cdFx0aWYgKCBtaW4gPT09IG1heCApIHtcblxuXHRcdFx0aHVlID0gMDtcblx0XHRcdHNhdHVyYXRpb24gPSAwO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cblx0XHRcdHNhdHVyYXRpb24gPSBsaWdodG5lc3MgPD0gMC41ID8gZGVsdGEgLyAoIG1heCArIG1pbiApIDogZGVsdGEgLyAoIDIgLSBtYXggLSBtaW4gKTtcblxuXHRcdFx0c3dpdGNoICggbWF4ICkge1xuXG5cdFx0XHRcdGNhc2UgcjogaHVlID0gKCBnIC0gYiApIC8gZGVsdGEgKyAoIGcgPCBiID8gNiA6IDAgKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgZzogaHVlID0gKCBiIC0gciApIC8gZGVsdGEgKyAyOyBicmVhaztcblx0XHRcdFx0Y2FzZSBiOiBodWUgPSAoIHIgLSBnICkgLyBkZWx0YSArIDQ7IGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHRcdGh1ZSAvPSA2O1xuXG5cdFx0fVxuXG5cdFx0dGFyZ2V0LmggPSBodWU7XG5cdFx0dGFyZ2V0LnMgPSBzYXR1cmF0aW9uO1xuXHRcdHRhcmdldC5sID0gbGlnaHRuZXNzO1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0Z2V0U3R5bGUoKSB7XG5cblx0XHRyZXR1cm4gJ3JnYignICsgKCAoIHRoaXMuciAqIDI1NSApIHwgMCApICsgJywnICsgKCAoIHRoaXMuZyAqIDI1NSApIHwgMCApICsgJywnICsgKCAoIHRoaXMuYiAqIDI1NSApIHwgMCApICsgJyknO1xuXG5cdH1cblxuXHRvZmZzZXRIU0woIGgsIHMsIGwgKSB7XG5cblx0XHR0aGlzLmdldEhTTCggX2hzbEEgKTtcblxuXHRcdF9oc2xBLmggKz0gaDsgX2hzbEEucyArPSBzOyBfaHNsQS5sICs9IGw7XG5cblx0XHR0aGlzLnNldEhTTCggX2hzbEEuaCwgX2hzbEEucywgX2hzbEEubCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZCggY29sb3IgKSB7XG5cblx0XHR0aGlzLnIgKz0gY29sb3Iucjtcblx0XHR0aGlzLmcgKz0gY29sb3IuZztcblx0XHR0aGlzLmIgKz0gY29sb3IuYjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRDb2xvcnMoIGNvbG9yMSwgY29sb3IyICkge1xuXG5cdFx0dGhpcy5yID0gY29sb3IxLnIgKyBjb2xvcjIucjtcblx0XHR0aGlzLmcgPSBjb2xvcjEuZyArIGNvbG9yMi5nO1xuXHRcdHRoaXMuYiA9IGNvbG9yMS5iICsgY29sb3IyLmI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy5yICs9IHM7XG5cdFx0dGhpcy5nICs9IHM7XG5cdFx0dGhpcy5iICs9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViKCBjb2xvciApIHtcblxuXHRcdHRoaXMuciA9IE1hdGgubWF4KCAwLCB0aGlzLnIgLSBjb2xvci5yICk7XG5cdFx0dGhpcy5nID0gTWF0aC5tYXgoIDAsIHRoaXMuZyAtIGNvbG9yLmcgKTtcblx0XHR0aGlzLmIgPSBNYXRoLm1heCggMCwgdGhpcy5iIC0gY29sb3IuYiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5KCBjb2xvciApIHtcblxuXHRcdHRoaXMuciAqPSBjb2xvci5yO1xuXHRcdHRoaXMuZyAqPSBjb2xvci5nO1xuXHRcdHRoaXMuYiAqPSBjb2xvci5iO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy5yICo9IHM7XG5cdFx0dGhpcy5nICo9IHM7XG5cdFx0dGhpcy5iICo9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycCggY29sb3IsIGFscGhhICkge1xuXG5cdFx0dGhpcy5yICs9ICggY29sb3IuciAtIHRoaXMuciApICogYWxwaGE7XG5cdFx0dGhpcy5nICs9ICggY29sb3IuZyAtIHRoaXMuZyApICogYWxwaGE7XG5cdFx0dGhpcy5iICs9ICggY29sb3IuYiAtIHRoaXMuYiApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycENvbG9ycyggY29sb3IxLCBjb2xvcjIsIGFscGhhICkge1xuXG5cdFx0dGhpcy5yID0gY29sb3IxLnIgKyAoIGNvbG9yMi5yIC0gY29sb3IxLnIgKSAqIGFscGhhO1xuXHRcdHRoaXMuZyA9IGNvbG9yMS5nICsgKCBjb2xvcjIuZyAtIGNvbG9yMS5nICkgKiBhbHBoYTtcblx0XHR0aGlzLmIgPSBjb2xvcjEuYiArICggY29sb3IyLmIgLSBjb2xvcjEuYiApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycEhTTCggY29sb3IsIGFscGhhICkge1xuXG5cdFx0dGhpcy5nZXRIU0woIF9oc2xBICk7XG5cdFx0Y29sb3IuZ2V0SFNMKCBfaHNsQiApO1xuXG5cdFx0Y29uc3QgaCA9IGxlcnAoIF9oc2xBLmgsIF9oc2xCLmgsIGFscGhhICk7XG5cdFx0Y29uc3QgcyA9IGxlcnAoIF9oc2xBLnMsIF9oc2xCLnMsIGFscGhhICk7XG5cdFx0Y29uc3QgbCA9IGxlcnAoIF9oc2xBLmwsIF9oc2xCLmwsIGFscGhhICk7XG5cblx0XHR0aGlzLnNldEhTTCggaCwgcywgbCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggYyApIHtcblxuXHRcdHJldHVybiAoIGMuciA9PT0gdGhpcy5yICkgJiYgKCBjLmcgPT09IHRoaXMuZyApICYmICggYy5iID09PSB0aGlzLmIgKTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdHRoaXMuciA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLmcgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXHRcdHRoaXMuYiA9IGFycmF5WyBvZmZzZXQgKyAyIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRoaXMucjtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy5nO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLmI7XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kZXggKSB7XG5cblx0XHR0aGlzLnIgPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTtcblx0XHR0aGlzLmcgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTtcblx0XHR0aGlzLmIgPSBhdHRyaWJ1dGUuZ2V0WiggaW5kZXggKTtcblxuXHRcdGlmICggYXR0cmlidXRlLm5vcm1hbGl6ZWQgPT09IHRydWUgKSB7XG5cblx0XHRcdC8vIGFzc3VtaW5nIFVpbnQ4QXJyYXlcblxuXHRcdFx0dGhpcy5yIC89IDI1NTtcblx0XHRcdHRoaXMuZyAvPSAyNTU7XG5cdFx0XHR0aGlzLmIgLz0gMjU1O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdHJldHVybiB0aGlzLmdldEhleCgpO1xuXG5cdH1cblxufVxuXG5Db2xvci5OQU1FUyA9IF9jb2xvcktleXdvcmRzO1xuXG5Db2xvci5wcm90b3R5cGUuaXNDb2xvciA9IHRydWU7XG5Db2xvci5wcm90b3R5cGUuciA9IDE7XG5Db2xvci5wcm90b3R5cGUuZyA9IDE7XG5Db2xvci5wcm90b3R5cGUuYiA9IDE7XG5cbmxldCBfY2FudmFzO1xuXG5jbGFzcyBJbWFnZVV0aWxzIHtcblxuXHRzdGF0aWMgZ2V0RGF0YVVSTCggaW1hZ2UgKSB7XG5cblx0XHRpZiAoIC9eZGF0YTovaS50ZXN0KCBpbWFnZS5zcmMgKSApIHtcblxuXHRcdFx0cmV0dXJuIGltYWdlLnNyYztcblxuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ID09ICd1bmRlZmluZWQnICkge1xuXG5cdFx0XHRyZXR1cm4gaW1hZ2Uuc3JjO1xuXG5cdFx0fVxuXG5cdFx0bGV0IGNhbnZhcztcblxuXHRcdGlmICggaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHtcblxuXHRcdFx0Y2FudmFzID0gaW1hZ2U7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIF9jYW52YXMgPT09IHVuZGVmaW5lZCApIF9jYW52YXMgPSBjcmVhdGVFbGVtZW50TlMoICdjYW52YXMnICk7XG5cblx0XHRcdF9jYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcblx0XHRcdF9jYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gX2NhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cblx0XHRcdGlmICggaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGEgKSB7XG5cblx0XHRcdFx0Y29udGV4dC5wdXRJbWFnZURhdGEoIGltYWdlLCAwLCAwICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Y2FudmFzID0gX2NhbnZhcztcblxuXHRcdH1cblxuXHRcdGlmICggY2FudmFzLndpZHRoID4gMjA0OCB8fCBjYW52YXMuaGVpZ2h0ID4gMjA0OCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zJywgaW1hZ2UgKTtcblxuXHRcdFx0cmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoICdpbWFnZS9qcGVnJywgMC42ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gY2FudmFzLnRvRGF0YVVSTCggJ2ltYWdlL3BuZycgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0c3RhdGljIHNSR0JUb0xpbmVhciggaW1hZ2UgKSB7XG5cblx0XHRpZiAoICggdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCApIHx8XG5cdFx0XHQoIHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHx8XG5cdFx0XHQoIHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCApICkge1xuXG5cdFx0XHRjb25zdCBjYW52YXMgPSBjcmVhdGVFbGVtZW50TlMoICdjYW52YXMnICk7XG5cblx0XHRcdGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuXHRcdFx0Y2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcblxuXHRcdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cdFx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblxuXHRcdFx0Y29uc3QgaW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblx0XHRcdGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0ZGF0YVsgaSBdID0gU1JHQlRvTGluZWFyKCBkYXRhWyBpIF0gLyAyNTUgKSAqIDI1NTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb250ZXh0LnB1dEltYWdlRGF0YSggaW1hZ2VEYXRhLCAwLCAwICk7XG5cblx0XHRcdHJldHVybiBjYW52YXM7XG5cblx0XHR9IGVsc2UgaWYgKCBpbWFnZS5kYXRhICkge1xuXG5cdFx0XHRjb25zdCBkYXRhID0gaW1hZ2UuZGF0YS5zbGljZSggMCApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSApIHtcblxuXHRcdFx0XHRcdGRhdGFbIGkgXSA9IE1hdGguZmxvb3IoIFNSR0JUb0xpbmVhciggZGF0YVsgaSBdIC8gMjU1ICkgKiAyNTUgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gYXNzdW1pbmcgZmxvYXRcblxuXHRcdFx0XHRcdGRhdGFbIGkgXSA9IFNSR0JUb0xpbmVhciggZGF0YVsgaSBdICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdH07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuJyApO1xuXHRcdFx0cmV0dXJuIGltYWdlO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5sZXQgdGV4dHVyZUlkID0gMDtcblxuY2xhc3MgVGV4dHVyZSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cblx0Y29uc3RydWN0b3IoIGltYWdlID0gVGV4dHVyZS5ERUZBVUxUX0lNQUdFLCBtYXBwaW5nID0gVGV4dHVyZS5ERUZBVUxUX01BUFBJTkcsIHdyYXBTID0gQ2xhbXBUb0VkZ2VXcmFwcGluZywgd3JhcFQgPSBDbGFtcFRvRWRnZVdyYXBwaW5nLCBtYWdGaWx0ZXIgPSBMaW5lYXJGaWx0ZXIsIG1pbkZpbHRlciA9IExpbmVhck1pcG1hcExpbmVhckZpbHRlciwgZm9ybWF0ID0gUkdCQUZvcm1hdCwgdHlwZSA9IFVuc2lnbmVkQnl0ZVR5cGUsIGFuaXNvdHJvcHkgPSAxLCBlbmNvZGluZyA9IExpbmVhckVuY29kaW5nICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogdGV4dHVyZUlkICsrIH0gKTtcblxuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmltYWdlID0gaW1hZ2U7XG5cdFx0dGhpcy5taXBtYXBzID0gW107XG5cblx0XHR0aGlzLm1hcHBpbmcgPSBtYXBwaW5nO1xuXG5cdFx0dGhpcy53cmFwUyA9IHdyYXBTO1xuXHRcdHRoaXMud3JhcFQgPSB3cmFwVDtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyO1xuXG5cdFx0dGhpcy5hbmlzb3Ryb3B5ID0gYW5pc290cm9weTtcblxuXHRcdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHRcdHRoaXMuaW50ZXJuYWxGb3JtYXQgPSBudWxsO1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cblx0XHR0aGlzLm9mZnNldCA9IG5ldyBWZWN0b3IyKCAwLCAwICk7XG5cdFx0dGhpcy5yZXBlYXQgPSBuZXcgVmVjdG9yMiggMSwgMSApO1xuXHRcdHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoIDAsIDAgKTtcblx0XHR0aGlzLnJvdGF0aW9uID0gMDtcblxuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5tYXRyaXggPSBuZXcgTWF0cml4MygpO1xuXG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSB0cnVlO1xuXHRcdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSB0cnVlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gNDtcdC8vIHZhbGlkIHZhbHVlczogMSwgMiwgNCwgOCAoc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sKVxuXG5cdFx0Ly8gVmFsdWVzIG9mIGVuY29kaW5nICE9PSBUSFJFRS5MaW5lYXJFbmNvZGluZyBvbmx5IHN1cHBvcnRlZCBvbiBtYXAsIGVudk1hcCBhbmQgZW1pc3NpdmVNYXAuXG5cdFx0Ly9cblx0XHQvLyBBbHNvIGNoYW5naW5nIHRoZSBlbmNvZGluZyBhZnRlciBhbHJlYWR5IHVzZWQgYnkgYSBNYXRlcmlhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IG1ha2UgdGhlIE1hdGVyaWFsXG5cdFx0Ly8gdXBkYXRlLiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IGNhbGwgTWF0ZXJpYWwubmVlZHNVcGRhdGUgdG8gdHJpZ2dlciBpdCB0byByZWNvbXBpbGUuXG5cdFx0dGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuXG5cdFx0dGhpcy51c2VyRGF0YSA9IHt9O1xuXG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblx0XHR0aGlzLm9uVXBkYXRlID0gbnVsbDtcblxuXHRcdHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID0gZmFsc2U7IC8vIGluZGljYXRlcyB3aGV0aGVyIGEgdGV4dHVyZSBiZWxvbmdzIHRvIGEgcmVuZGVyIHRhcmdldCBvciBub3Rcblx0XHR0aGlzLm5lZWRzUE1SRU1VcGRhdGUgPSBmYWxzZTsgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0ZXh0dXJlIHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgUE1SRU1HZW5lcmF0b3Igb3Igbm90IChvbmx5IHJlbGV2YW50IGZvciByZW5kZXIgdGFyZ2V0IHRleHR1cmVzKVxuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXgoKSB7XG5cblx0XHR0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSggdGhpcy5vZmZzZXQueCwgdGhpcy5vZmZzZXQueSwgdGhpcy5yZXBlYXQueCwgdGhpcy5yZXBlYXQueSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5jZW50ZXIueCwgdGhpcy5jZW50ZXIueSApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cblx0XHR0aGlzLmltYWdlID0gc291cmNlLmltYWdlO1xuXHRcdHRoaXMubWlwbWFwcyA9IHNvdXJjZS5taXBtYXBzLnNsaWNlKCAwICk7XG5cblx0XHR0aGlzLm1hcHBpbmcgPSBzb3VyY2UubWFwcGluZztcblxuXHRcdHRoaXMud3JhcFMgPSBzb3VyY2Uud3JhcFM7XG5cdFx0dGhpcy53cmFwVCA9IHNvdXJjZS53cmFwVDtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gc291cmNlLm1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IHNvdXJjZS5taW5GaWx0ZXI7XG5cblx0XHR0aGlzLmFuaXNvdHJvcHkgPSBzb3VyY2UuYW5pc290cm9weTtcblxuXHRcdHRoaXMuZm9ybWF0ID0gc291cmNlLmZvcm1hdDtcblx0XHR0aGlzLmludGVybmFsRm9ybWF0ID0gc291cmNlLmludGVybmFsRm9ybWF0O1xuXHRcdHRoaXMudHlwZSA9IHNvdXJjZS50eXBlO1xuXG5cdFx0dGhpcy5vZmZzZXQuY29weSggc291cmNlLm9mZnNldCApO1xuXHRcdHRoaXMucmVwZWF0LmNvcHkoIHNvdXJjZS5yZXBlYXQgKTtcblx0XHR0aGlzLmNlbnRlci5jb3B5KCBzb3VyY2UuY2VudGVyICk7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IHNvdXJjZS5yb3RhdGlvbjtcblxuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlO1xuXHRcdHRoaXMubWF0cml4LmNvcHkoIHNvdXJjZS5tYXRyaXggKTtcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gc291cmNlLmdlbmVyYXRlTWlwbWFwcztcblx0XHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbHlBbHBoYTtcblx0XHR0aGlzLmZsaXBZID0gc291cmNlLmZsaXBZO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gc291cmNlLnVucGFja0FsaWdubWVudDtcblx0XHR0aGlzLmVuY29kaW5nID0gc291cmNlLmVuY29kaW5nO1xuXG5cdFx0dGhpcy51c2VyRGF0YSA9IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBzb3VyY2UudXNlckRhdGEgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTiggbWV0YSApIHtcblxuXHRcdGNvbnN0IGlzUm9vdE9iamVjdCA9ICggbWV0YSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXRhID09PSAnc3RyaW5nJyApO1xuXG5cdFx0aWYgKCAhIGlzUm9vdE9iamVjdCAmJiBtZXRhLnRleHR1cmVzWyB0aGlzLnV1aWQgXSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRyZXR1cm4gbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF07XG5cblx0XHR9XG5cblx0XHRjb25zdCBvdXRwdXQgPSB7XG5cblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ1RleHR1cmUnLFxuXHRcdFx0XHRnZW5lcmF0b3I6ICdUZXh0dXJlLnRvSlNPTidcblx0XHRcdH0sXG5cblx0XHRcdHV1aWQ6IHRoaXMudXVpZCxcblx0XHRcdG5hbWU6IHRoaXMubmFtZSxcblxuXHRcdFx0bWFwcGluZzogdGhpcy5tYXBwaW5nLFxuXG5cdFx0XHRyZXBlYXQ6IFsgdGhpcy5yZXBlYXQueCwgdGhpcy5yZXBlYXQueSBdLFxuXHRcdFx0b2Zmc2V0OiBbIHRoaXMub2Zmc2V0LngsIHRoaXMub2Zmc2V0LnkgXSxcblx0XHRcdGNlbnRlcjogWyB0aGlzLmNlbnRlci54LCB0aGlzLmNlbnRlci55IF0sXG5cdFx0XHRyb3RhdGlvbjogdGhpcy5yb3RhdGlvbixcblxuXHRcdFx0d3JhcDogWyB0aGlzLndyYXBTLCB0aGlzLndyYXBUIF0sXG5cblx0XHRcdGZvcm1hdDogdGhpcy5mb3JtYXQsXG5cdFx0XHR0eXBlOiB0aGlzLnR5cGUsXG5cdFx0XHRlbmNvZGluZzogdGhpcy5lbmNvZGluZyxcblxuXHRcdFx0bWluRmlsdGVyOiB0aGlzLm1pbkZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogdGhpcy5tYWdGaWx0ZXIsXG5cdFx0XHRhbmlzb3Ryb3B5OiB0aGlzLmFuaXNvdHJvcHksXG5cblx0XHRcdGZsaXBZOiB0aGlzLmZsaXBZLFxuXG5cdFx0XHRwcmVtdWx0aXBseUFscGhhOiB0aGlzLnByZW11bHRpcGx5QWxwaGEsXG5cdFx0XHR1bnBhY2tBbGlnbm1lbnQ6IHRoaXMudW5wYWNrQWxpZ25tZW50XG5cblx0XHR9O1xuXG5cdFx0aWYgKCB0aGlzLmltYWdlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFRPRE86IE1vdmUgdG8gVEhSRUUuSW1hZ2VcblxuXHRcdFx0Y29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlO1xuXG5cdFx0XHRpZiAoIGltYWdlLnV1aWQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpbWFnZS51dWlkID0gZ2VuZXJhdGVVVUlEKCk7IC8vIFVHSFxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggISBpc1Jvb3RPYmplY3QgJiYgbWV0YS5pbWFnZXNbIGltYWdlLnV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGxldCB1cmw7XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBpbWFnZSApICkge1xuXG5cdFx0XHRcdFx0Ly8gcHJvY2VzcyBhcnJheSBvZiBpbWFnZXMgZS5nLiBDdWJlVGV4dHVyZVxuXG5cdFx0XHRcdFx0dXJsID0gW107XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBpbWFnZS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHQvLyBjaGVjayBjdWJlIHRleHR1cmUgd2l0aCBkYXRhIHRleHR1cmVzXG5cblx0XHRcdFx0XHRcdGlmICggaW1hZ2VbIGkgXS5pc0RhdGFUZXh0dXJlICkge1xuXG5cdFx0XHRcdFx0XHRcdHVybC5wdXNoKCBzZXJpYWxpemVJbWFnZSggaW1hZ2VbIGkgXS5pbWFnZSApICk7XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0dXJsLnB1c2goIHNlcmlhbGl6ZUltYWdlKCBpbWFnZVsgaSBdICkgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBwcm9jZXNzIHNpbmdsZSBpbWFnZVxuXG5cdFx0XHRcdFx0dXJsID0gc2VyaWFsaXplSW1hZ2UoIGltYWdlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1ldGEuaW1hZ2VzWyBpbWFnZS51dWlkIF0gPSB7XG5cdFx0XHRcdFx0dXVpZDogaW1hZ2UudXVpZCxcblx0XHRcdFx0XHR1cmw6IHVybFxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dHB1dC5pbWFnZSA9IGltYWdlLnV1aWQ7XG5cblx0XHR9XG5cblx0XHRpZiAoIEpTT04uc3RyaW5naWZ5KCB0aGlzLnVzZXJEYXRhICkgIT09ICd7fScgKSBvdXRwdXQudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhO1xuXG5cdFx0aWYgKCAhIGlzUm9vdE9iamVjdCApIHtcblxuXHRcdFx0bWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0gPSBvdXRwdXQ7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7XG5cblx0fVxuXG5cdHRyYW5zZm9ybVV2KCB1diApIHtcblxuXHRcdGlmICggdGhpcy5tYXBwaW5nICE9PSBVVk1hcHBpbmcgKSByZXR1cm4gdXY7XG5cblx0XHR1di5hcHBseU1hdHJpeDMoIHRoaXMubWF0cml4ICk7XG5cblx0XHRpZiAoIHV2LnggPCAwIHx8IHV2LnggPiAxICkge1xuXG5cdFx0XHRzd2l0Y2ggKCB0aGlzLndyYXBTICkge1xuXG5cdFx0XHRcdGNhc2UgUmVwZWF0V3JhcHBpbmc6XG5cblx0XHRcdFx0XHR1di54ID0gdXYueCAtIE1hdGguZmxvb3IoIHV2LnggKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENsYW1wVG9FZGdlV3JhcHBpbmc6XG5cblx0XHRcdFx0XHR1di54ID0gdXYueCA8IDAgPyAwIDogMTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6XG5cblx0XHRcdFx0XHRpZiAoIE1hdGguYWJzKCBNYXRoLmZsb29yKCB1di54ICkgJSAyICkgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdHV2LnggPSBNYXRoLmNlaWwoIHV2LnggKSAtIHV2Lng7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR1di54ID0gdXYueCAtIE1hdGguZmxvb3IoIHV2LnggKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHV2LnkgPCAwIHx8IHV2LnkgPiAxICkge1xuXG5cdFx0XHRzd2l0Y2ggKCB0aGlzLndyYXBUICkge1xuXG5cdFx0XHRcdGNhc2UgUmVwZWF0V3JhcHBpbmc6XG5cblx0XHRcdFx0XHR1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2LnkgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENsYW1wVG9FZGdlV3JhcHBpbmc6XG5cblx0XHRcdFx0XHR1di55ID0gdXYueSA8IDAgPyAwIDogMTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6XG5cblx0XHRcdFx0XHRpZiAoIE1hdGguYWJzKCBNYXRoLmZsb29yKCB1di55ICkgJSAyICkgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdHV2LnkgPSBNYXRoLmNlaWwoIHV2LnkgKSAtIHV2Lnk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2LnkgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZmxpcFkgKSB7XG5cblx0XHRcdHV2LnkgPSAxIC0gdXYueTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1djtcblxuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZlcnNpb24gKys7XG5cblx0fVxuXG59XG5cblRleHR1cmUuREVGQVVMVF9JTUFHRSA9IHVuZGVmaW5lZDtcblRleHR1cmUuREVGQVVMVF9NQVBQSU5HID0gVVZNYXBwaW5nO1xuXG5UZXh0dXJlLnByb3RvdHlwZS5pc1RleHR1cmUgPSB0cnVlO1xuXG5mdW5jdGlvbiBzZXJpYWxpemVJbWFnZSggaW1hZ2UgKSB7XG5cblx0aWYgKCAoIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB8fFxuXHRcdCggdHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50ICkgfHxcblx0XHQoIHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCApICkge1xuXG5cdFx0Ly8gZGVmYXVsdCBpbWFnZXNcblxuXHRcdHJldHVybiBJbWFnZVV0aWxzLmdldERhdGFVUkwoIGltYWdlICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggaW1hZ2UuZGF0YSApIHtcblxuXHRcdFx0Ly8gaW1hZ2VzIG9mIERhdGFUZXh0dXJlXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBpbWFnZS5kYXRhICksXG5cdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHQsXG5cdFx0XHRcdHR5cGU6IGltYWdlLmRhdGEuY29uc3RydWN0b3IubmFtZVxuXHRcdFx0fTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4nICk7XG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbmNsYXNzIFZlY3RvcjQge1xuXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMSApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXHRcdHRoaXMudyA9IHc7XG5cblx0fVxuXG5cdGdldCB3aWR0aCgpIHtcblxuXHRcdHJldHVybiB0aGlzLno7XG5cblx0fVxuXG5cdHNldCB3aWR0aCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnogPSB2YWx1ZTtcblxuXHR9XG5cblx0Z2V0IGhlaWdodCgpIHtcblxuXHRcdHJldHVybiB0aGlzLnc7XG5cblx0fVxuXG5cdHNldCBoZWlnaHQoIHZhbHVlICkge1xuXG5cdFx0dGhpcy53ID0gdmFsdWU7XG5cblx0fVxuXG5cdHNldCggeCwgeSwgeiwgdyApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXHRcdHRoaXMudyA9IHc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggPSBzY2FsYXI7XG5cdFx0dGhpcy55ID0gc2NhbGFyO1xuXHRcdHRoaXMueiA9IHNjYWxhcjtcblx0XHR0aGlzLncgPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WCggeCApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WSggeSApIHtcblxuXHRcdHRoaXMueSA9IHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WiggeiApIHtcblxuXHRcdHRoaXMueiA9IHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0VyggdyApIHtcblxuXHRcdHRoaXMudyA9IHc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Q29tcG9uZW50KCBpbmRleCwgdmFsdWUgKSB7XG5cblx0XHRzd2l0Y2ggKCBpbmRleCApIHtcblxuXHRcdFx0Y2FzZSAwOiB0aGlzLnggPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgMjogdGhpcy56ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAzOiB0aGlzLncgPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldENvbXBvbmVudCggaW5kZXggKSB7XG5cblx0XHRzd2l0Y2ggKCBpbmRleCApIHtcblxuXHRcdFx0Y2FzZSAwOiByZXR1cm4gdGhpcy54O1xuXHRcdFx0Y2FzZSAxOiByZXR1cm4gdGhpcy55O1xuXHRcdFx0Y2FzZSAyOiByZXR1cm4gdGhpcy56O1xuXHRcdFx0Y2FzZSAzOiByZXR1cm4gdGhpcy53O1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyApO1xuXG5cdH1cblxuXHRjb3B5KCB2ICkge1xuXG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHR0aGlzLnogPSB2Lno7XG5cdFx0dGhpcy53ID0gKCB2LncgIT09IHVuZGVmaW5lZCApID8gdi53IDogMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGQoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblx0XHR0aGlzLnogKz0gdi56O1xuXHRcdHRoaXMudyArPSB2Lnc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHM7XG5cdFx0dGhpcy55ICs9IHM7XG5cdFx0dGhpcy56ICs9IHM7XG5cdFx0dGhpcy53ICs9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cdFx0dGhpcy56ID0gYS56ICsgYi56O1xuXHRcdHRoaXMudyA9IGEudyArIGIudztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRTY2FsZWRWZWN0b3IoIHYsIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblx0XHR0aGlzLnogKz0gdi56ICogcztcblx0XHR0aGlzLncgKz0gdi53ICogcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWIoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblx0XHR0aGlzLnogLT0gdi56O1xuXHRcdHRoaXMudyAtPSB2Lnc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54IC09IHM7XG5cdFx0dGhpcy55IC09IHM7XG5cdFx0dGhpcy56IC09IHM7XG5cdFx0dGhpcy53IC09IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cdFx0dGhpcy56ID0gYS56IC0gYi56O1xuXHRcdHRoaXMudyA9IGEudyAtIGIudztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseSggdiApIHtcblxuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHR0aGlzLnogKj0gdi56O1xuXHRcdHRoaXMudyAqPSB2Lnc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcblx0XHR0aGlzLnogKj0gc2NhbGFyO1xuXHRcdHRoaXMudyAqPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtICkge1xuXG5cdFx0Y29uc3QgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMueiwgdyA9IHRoaXMudztcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICogeiArIGVbIDEyIF0gKiB3O1xuXHRcdHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKiB3O1xuXHRcdHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHogKyBlWyAxNCBdICogdztcblx0XHR0aGlzLncgPSBlWyAzIF0gKiB4ICsgZVsgNyBdICogeSArIGVbIDExIF0gKiB6ICsgZVsgMTUgXSAqIHc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xuXG5cdH1cblxuXHRzZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbiggcSApIHtcblxuXHRcdC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9xdWF0ZXJuaW9uVG9BbmdsZS9pbmRleC5odG1cblxuXHRcdC8vIHEgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cblx0XHR0aGlzLncgPSAyICogTWF0aC5hY29zKCBxLncgKTtcblxuXHRcdGNvbnN0IHMgPSBNYXRoLnNxcnQoIDEgLSBxLncgKiBxLncgKTtcblxuXHRcdGlmICggcyA8IDAuMDAwMSApIHtcblxuXHRcdFx0dGhpcy54ID0gMTtcblx0XHRcdHRoaXMueSA9IDA7XG5cdFx0XHR0aGlzLnogPSAwO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy54ID0gcS54IC8gcztcblx0XHRcdHRoaXMueSA9IHEueSAvIHM7XG5cdFx0XHR0aGlzLnogPSBxLnogLyBzO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCggbSApIHtcblxuXHRcdC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9tYXRyaXhUb0FuZ2xlL2luZGV4Lmh0bVxuXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblxuXHRcdGxldCBhbmdsZSwgeCwgeSwgejsgLy8gdmFyaWFibGVzIGZvciByZXN1bHRcblx0XHRjb25zdCBlcHNpbG9uID0gMC4wMSxcdFx0Ly8gbWFyZ2luIHRvIGFsbG93IGZvciByb3VuZGluZyBlcnJvcnNcblx0XHRcdGVwc2lsb24yID0gMC4xLFx0XHQvLyBtYXJnaW4gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAwIGFuZCAxODAgZGVncmVlc1xuXG5cdFx0XHR0ZSA9IG0uZWxlbWVudHMsXG5cblx0XHRcdG0xMSA9IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF0sXG5cdFx0XHRtMjEgPSB0ZVsgMSBdLCBtMjIgPSB0ZVsgNSBdLCBtMjMgPSB0ZVsgOSBdLFxuXHRcdFx0bTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF07XG5cblx0XHRpZiAoICggTWF0aC5hYnMoIG0xMiAtIG0yMSApIDwgZXBzaWxvbiApICYmXG5cdFx0ICAgICAoIE1hdGguYWJzKCBtMTMgLSBtMzEgKSA8IGVwc2lsb24gKSAmJlxuXHRcdCAgICAgKCBNYXRoLmFicyggbTIzIC0gbTMyICkgPCBlcHNpbG9uICkgKSB7XG5cblx0XHRcdC8vIHNpbmd1bGFyaXR5IGZvdW5kXG5cdFx0XHQvLyBmaXJzdCBjaGVjayBmb3IgaWRlbnRpdHkgbWF0cml4IHdoaWNoIG11c3QgaGF2ZSArMSBmb3IgYWxsIHRlcm1zXG5cdFx0XHQvLyBpbiBsZWFkaW5nIGRpYWdvbmFsIGFuZCB6ZXJvIGluIG90aGVyIHRlcm1zXG5cblx0XHRcdGlmICggKCBNYXRoLmFicyggbTEyICsgbTIxICkgPCBlcHNpbG9uMiApICYmXG5cdFx0XHQgICAgICggTWF0aC5hYnMoIG0xMyArIG0zMSApIDwgZXBzaWxvbjIgKSAmJlxuXHRcdFx0ICAgICAoIE1hdGguYWJzKCBtMjMgKyBtMzIgKSA8IGVwc2lsb24yICkgJiZcblx0XHRcdCAgICAgKCBNYXRoLmFicyggbTExICsgbTIyICsgbTMzIC0gMyApIDwgZXBzaWxvbjIgKSApIHtcblxuXHRcdFx0XHQvLyB0aGlzIHNpbmd1bGFyaXR5IGlzIGlkZW50aXR5IG1hdHJpeCBzbyBhbmdsZSA9IDBcblxuXHRcdFx0XHR0aGlzLnNldCggMSwgMCwgMCwgMCApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzOyAvLyB6ZXJvIGFuZ2xlLCBhcmJpdHJhcnkgYXhpc1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIG90aGVyd2lzZSB0aGlzIHNpbmd1bGFyaXR5IGlzIGFuZ2xlID0gMTgwXG5cblx0XHRcdGFuZ2xlID0gTWF0aC5QSTtcblxuXHRcdFx0Y29uc3QgeHggPSAoIG0xMSArIDEgKSAvIDI7XG5cdFx0XHRjb25zdCB5eSA9ICggbTIyICsgMSApIC8gMjtcblx0XHRcdGNvbnN0IHp6ID0gKCBtMzMgKyAxICkgLyAyO1xuXHRcdFx0Y29uc3QgeHkgPSAoIG0xMiArIG0yMSApIC8gNDtcblx0XHRcdGNvbnN0IHh6ID0gKCBtMTMgKyBtMzEgKSAvIDQ7XG5cdFx0XHRjb25zdCB5eiA9ICggbTIzICsgbTMyICkgLyA0O1xuXG5cdFx0XHRpZiAoICggeHggPiB5eSApICYmICggeHggPiB6eiApICkge1xuXG5cdFx0XHRcdC8vIG0xMSBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtXG5cblx0XHRcdFx0aWYgKCB4eCA8IGVwc2lsb24gKSB7XG5cblx0XHRcdFx0XHR4ID0gMDtcblx0XHRcdFx0XHR5ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eiA9IDAuNzA3MTA2NzgxO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR4ID0gTWF0aC5zcXJ0KCB4eCApO1xuXHRcdFx0XHRcdHkgPSB4eSAvIHg7XG5cdFx0XHRcdFx0eiA9IHh6IC8geDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIHl5ID4genogKSB7XG5cblx0XHRcdFx0Ly8gbTIyIGlzIHRoZSBsYXJnZXN0IGRpYWdvbmFsIHRlcm1cblxuXHRcdFx0XHRpZiAoIHl5IDwgZXBzaWxvbiApIHtcblxuXHRcdFx0XHRcdHggPSAwLjcwNzEwNjc4MTtcblx0XHRcdFx0XHR5ID0gMDtcblx0XHRcdFx0XHR6ID0gMC43MDcxMDY3ODE7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHkgPSBNYXRoLnNxcnQoIHl5ICk7XG5cdFx0XHRcdFx0eCA9IHh5IC8geTtcblx0XHRcdFx0XHR6ID0geXogLyB5O1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBtMzMgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybSBzbyBiYXNlIHJlc3VsdCBvbiB0aGlzXG5cblx0XHRcdFx0aWYgKCB6eiA8IGVwc2lsb24gKSB7XG5cblx0XHRcdFx0XHR4ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eSA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHRcdHogPSAwO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR6ID0gTWF0aC5zcXJ0KCB6eiApO1xuXHRcdFx0XHRcdHggPSB4eiAvIHo7XG5cdFx0XHRcdFx0eSA9IHl6IC8gejtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXQoIHgsIHksIHosIGFuZ2xlICk7XG5cblx0XHRcdHJldHVybiB0aGlzOyAvLyByZXR1cm4gMTgwIGRlZyByb3RhdGlvblxuXG5cdFx0fVxuXG5cdFx0Ly8gYXMgd2UgaGF2ZSByZWFjaGVkIGhlcmUgdGhlcmUgYXJlIG5vIHNpbmd1bGFyaXRpZXMgc28gd2UgY2FuIGhhbmRsZSBub3JtYWxseVxuXG5cdFx0bGV0IHMgPSBNYXRoLnNxcnQoICggbTMyIC0gbTIzICkgKiAoIG0zMiAtIG0yMyApICtcblx0XHRcdCggbTEzIC0gbTMxICkgKiAoIG0xMyAtIG0zMSApICtcblx0XHRcdCggbTIxIC0gbTEyICkgKiAoIG0yMSAtIG0xMiApICk7IC8vIHVzZWQgdG8gbm9ybWFsaXplXG5cblx0XHRpZiAoIE1hdGguYWJzKCBzICkgPCAwLjAwMSApIHMgPSAxO1xuXG5cdFx0Ly8gcHJldmVudCBkaXZpZGUgYnkgemVybywgc2hvdWxkIG5vdCBoYXBwZW4gaWYgbWF0cml4IGlzIG9ydGhvZ29uYWwgYW5kIHNob3VsZCBiZVxuXHRcdC8vIGNhdWdodCBieSBzaW5ndWxhcml0eSB0ZXN0IGFib3ZlLCBidXQgSSd2ZSBsZWZ0IGl0IGluIGp1c3QgaW4gY2FzZVxuXG5cdFx0dGhpcy54ID0gKCBtMzIgLSBtMjMgKSAvIHM7XG5cdFx0dGhpcy55ID0gKCBtMTMgLSBtMzEgKSAvIHM7XG5cdFx0dGhpcy56ID0gKCBtMjEgLSBtMTIgKSAvIHM7XG5cdFx0dGhpcy53ID0gTWF0aC5hY29zKCAoIG0xMSArIG0yMiArIG0zMyAtIDEgKSAvIDIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtaW4oIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbiggdGhpcy56LCB2LnogKTtcblx0XHR0aGlzLncgPSBNYXRoLm1pbiggdGhpcy53LCB2LncgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYXgoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTtcblx0XHR0aGlzLncgPSBNYXRoLm1heCggdGhpcy53LCB2LncgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcCggbWluLCBtYXggKSB7XG5cblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBNYXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pbi55LCBNYXRoLm1pbiggbWF4LnksIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7XG5cdFx0dGhpcy53ID0gTWF0aC5tYXgoIG1pbi53LCBNYXRoLm1pbiggbWF4LncsIHRoaXMudyApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXBTY2FsYXIoIG1pblZhbCwgbWF4VmFsICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnkgKSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueiApICk7XG5cdFx0dGhpcy53ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy53ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcExlbmd0aCggbWluLCBtYXggKSB7XG5cblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCBsZW5ndGggfHwgMSApLm11bHRpcGx5U2NhbGFyKCBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCBsZW5ndGggKSApICk7XG5cblx0fVxuXG5cdGZsb29yKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5mbG9vciggdGhpcy56ICk7XG5cdFx0dGhpcy53ID0gTWF0aC5mbG9vciggdGhpcy53ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2VpbCgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguY2VpbCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLmNlaWwoIHRoaXMueiApO1xuXHRcdHRoaXMudyA9IE1hdGguY2VpbCggdGhpcy53ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm91bmQoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTtcblx0XHR0aGlzLncgPSBNYXRoLnJvdW5kKCB0aGlzLncgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyb3VuZFRvWmVybygpIHtcblxuXHRcdHRoaXMueCA9ICggdGhpcy54IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnggKSA6IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9ICggdGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9ICggdGhpcy56IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnogKSA6IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXHRcdHRoaXMudyA9ICggdGhpcy53IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLncgKSA6IE1hdGguZmxvb3IoIHRoaXMudyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG5lZ2F0ZSgpIHtcblxuXHRcdHRoaXMueCA9IC0gdGhpcy54O1xuXHRcdHRoaXMueSA9IC0gdGhpcy55O1xuXHRcdHRoaXMueiA9IC0gdGhpcy56O1xuXHRcdHRoaXMudyA9IC0gdGhpcy53O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRvdCggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2LnogKyB0aGlzLncgKiB2Lnc7XG5cblx0fVxuXG5cdGxlbmd0aFNxKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRoaXMudztcblxuXHR9XG5cblx0bGVuZ3RoKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56ICsgdGhpcy53ICogdGhpcy53ICk7XG5cblx0fVxuXG5cdG1hbmhhdHRhbkxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLmFicyggdGhpcy54ICkgKyBNYXRoLmFicyggdGhpcy55ICkgKyBNYXRoLmFicyggdGhpcy56ICkgKyBNYXRoLmFicyggdGhpcy53ICk7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSB8fCAxICk7XG5cblx0fVxuXG5cdHNldExlbmd0aCggbGVuZ3RoICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApO1xuXG5cdH1cblxuXHRsZXJwKCB2LCBhbHBoYSApIHtcblxuXHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XG5cdFx0dGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcblx0XHR0aGlzLnogKz0gKCB2LnogLSB0aGlzLnogKSAqIGFscGhhO1xuXHRcdHRoaXMudyArPSAoIHYudyAtIHRoaXMudyApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycFZlY3RvcnMoIHYxLCB2MiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggPSB2MS54ICsgKCB2Mi54IC0gdjEueCApICogYWxwaGE7XG5cdFx0dGhpcy55ID0gdjEueSArICggdjIueSAtIHYxLnkgKSAqIGFscGhhO1xuXHRcdHRoaXMueiA9IHYxLnogKyAoIHYyLnogLSB2MS56ICkgKiBhbHBoYTtcblx0XHR0aGlzLncgPSB2MS53ICsgKCB2Mi53IC0gdjEudyApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCB2ICkge1xuXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSAmJiAoIHYueiA9PT0gdGhpcy56ICkgJiYgKCB2LncgPT09IHRoaXMudyApICk7XG5cblx0fVxuXG5cdGZyb21BcnJheSggYXJyYXksIG9mZnNldCA9IDAgKSB7XG5cblx0XHR0aGlzLnggPSBhcnJheVsgb2Zmc2V0IF07XG5cdFx0dGhpcy55ID0gYXJyYXlbIG9mZnNldCArIDEgXTtcblx0XHR0aGlzLnogPSBhcnJheVsgb2Zmc2V0ICsgMiBdO1xuXHRcdHRoaXMudyA9IGFycmF5WyBvZmZzZXQgKyAzIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRoaXMueDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLno7XG5cdFx0YXJyYXlbIG9mZnNldCArIDMgXSA9IHRoaXMudztcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKCBpbmRleCApO1xuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApO1xuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKCBpbmRleCApO1xuXHRcdHRoaXMudyA9IGF0dHJpYnV0ZS5nZXRXKCBpbmRleCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJhbmRvbSgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnogPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMudyA9IE1hdGgucmFuZG9tKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0KlsgU3ltYm9sLml0ZXJhdG9yIF0oKSB7XG5cblx0XHR5aWVsZCB0aGlzLng7XG5cdFx0eWllbGQgdGhpcy55O1xuXHRcdHlpZWxkIHRoaXMuejtcblx0XHR5aWVsZCB0aGlzLnc7XG5cblx0fVxuXG59XG5cblZlY3RvcjQucHJvdG90eXBlLmlzVmVjdG9yNCA9IHRydWU7XG5cbi8qXG4gSW4gb3B0aW9ucywgd2UgY2FuIHNwZWNpZnk6XG4gKiBUZXh0dXJlIHBhcmFtZXRlcnMgZm9yIGFuIGF1dG8tZ2VuZXJhdGVkIHRhcmdldCB0ZXh0dXJlXG4gKiBkZXB0aEJ1ZmZlci9zdGVuY2lsQnVmZmVyOiBCb29sZWFucyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgYnVmZmVyc1xuKi9cbmNsYXNzIFdlYkdMUmVuZGVyVGFyZ2V0IGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3Rvciggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyA9IHt9ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gMTtcblxuXHRcdHRoaXMuc2Npc3NvciA9IG5ldyBWZWN0b3I0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cdFx0dGhpcy5zY2lzc29yVGVzdCA9IGZhbHNlO1xuXG5cdFx0dGhpcy52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHR0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZSggdW5kZWZpbmVkLCBvcHRpb25zLm1hcHBpbmcsIG9wdGlvbnMud3JhcFMsIG9wdGlvbnMud3JhcFQsIG9wdGlvbnMubWFnRmlsdGVyLCBvcHRpb25zLm1pbkZpbHRlciwgb3B0aW9ucy5mb3JtYXQsIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5hbmlzb3Ryb3B5LCBvcHRpb25zLmVuY29kaW5nICk7XG5cdFx0dGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IHRydWU7XG5cblx0XHR0aGlzLnRleHR1cmUuaW1hZ2UgPSB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQsIGRlcHRoOiAxIH07XG5cblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzIDogZmFsc2U7XG5cdFx0dGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0ID0gb3B0aW9ucy5pbnRlcm5hbEZvcm1hdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcm5hbEZvcm1hdCA6IG51bGw7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IG9wdGlvbnMubWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblxuXHRcdHRoaXMuZGVwdGhCdWZmZXIgPSBvcHRpb25zLmRlcHRoQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoQnVmZmVyIDogdHJ1ZTtcblx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIgPSBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc3RlbmNpbEJ1ZmZlciA6IGZhbHNlO1xuXHRcdHRoaXMuZGVwdGhUZXh0dXJlID0gb3B0aW9ucy5kZXB0aFRleHR1cmUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGVwdGhUZXh0dXJlIDogbnVsbDtcblxuXHR9XG5cblx0c2V0VGV4dHVyZSggdGV4dHVyZSApIHtcblxuXHRcdHRleHR1cmUuaW1hZ2UgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy53aWR0aCxcblx0XHRcdGhlaWdodDogdGhpcy5oZWlnaHQsXG5cdFx0XHRkZXB0aDogdGhpcy5kZXB0aFxuXHRcdH07XG5cblx0XHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG5cdH1cblxuXHRzZXRTaXplKCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCA9IDEgKSB7XG5cblx0XHRpZiAoIHRoaXMud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuaGVpZ2h0ICE9PSBoZWlnaHQgfHwgdGhpcy5kZXB0aCAhPT0gZGVwdGggKSB7XG5cblx0XHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdFx0dGhpcy5kZXB0aCA9IGRlcHRoO1xuXG5cdFx0XHR0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGggPSB3aWR0aDtcblx0XHRcdHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHR0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGggPSBkZXB0aDtcblxuXHRcdFx0dGhpcy5kaXNwb3NlKCk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnZpZXdwb3J0LnNldCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXHRcdHRoaXMuc2Npc3Nvci5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXHRcdHRoaXMuZGVwdGggPSBzb3VyY2UuZGVwdGg7XG5cblx0XHR0aGlzLnZpZXdwb3J0LmNvcHkoIHNvdXJjZS52aWV3cG9ydCApO1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gc291cmNlLnRleHR1cmUuY2xvbmUoKTtcblxuXHRcdC8vIGVuc3VyZSBpbWFnZSBvYmplY3QgaXMgbm90IHNoYXJlZCwgc2VlICMyMDMyOFxuXG5cdFx0dGhpcy50ZXh0dXJlLmltYWdlID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS50ZXh0dXJlLmltYWdlICk7XG5cblx0XHR0aGlzLmRlcHRoQnVmZmVyID0gc291cmNlLmRlcHRoQnVmZmVyO1xuXHRcdHRoaXMuc3RlbmNpbEJ1ZmZlciA9IHNvdXJjZS5zdGVuY2lsQnVmZmVyO1xuXHRcdHRoaXMuZGVwdGhUZXh0dXJlID0gc291cmNlLmRlcHRoVGV4dHVyZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7XG5cblx0fVxuXG59XG5cbldlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0ID0gdHJ1ZTtcblxuY2xhc3MgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgZXh0ZW5kcyBXZWJHTFJlbmRlclRhcmdldCB7XG5cblx0Y29uc3RydWN0b3IoIHdpZHRoLCBoZWlnaHQsIGNvdW50ICkge1xuXG5cdFx0c3VwZXIoIHdpZHRoLCBoZWlnaHQgKTtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cblx0XHR0aGlzLnRleHR1cmUgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvdW50OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLnRleHR1cmVbIGkgXSA9IHRleHR1cmUuY2xvbmUoKTtcblxuXHRcdH1cblxuXHR9XG5cblx0c2V0U2l6ZSggd2lkdGgsIGhlaWdodCwgZGVwdGggPSAxICkge1xuXG5cdFx0aWYgKCB0aGlzLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuZGVwdGggIT09IGRlcHRoICkge1xuXG5cdFx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdHRoaXMuZGVwdGggPSBkZXB0aDtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRoaXMudGV4dHVyZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHR0aGlzLnRleHR1cmVbIGkgXS5pbWFnZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0XHR0aGlzLnRleHR1cmVbIGkgXS5pbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHRcdHRoaXMudGV4dHVyZVsgaSBdLmltYWdlLmRlcHRoID0gZGVwdGg7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kaXNwb3NlKCk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnZpZXdwb3J0LnNldCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXHRcdHRoaXMuc2Npc3Nvci5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXHRcdHRoaXMuZGVwdGggPSBzb3VyY2UuZGVwdGg7XG5cblx0XHR0aGlzLnZpZXdwb3J0LnNldCggMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQgKTtcblx0XHR0aGlzLnNjaXNzb3Iuc2V0KCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCApO1xuXG5cdFx0dGhpcy5kZXB0aEJ1ZmZlciA9IHNvdXJjZS5kZXB0aEJ1ZmZlcjtcblx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIgPSBzb3VyY2Uuc3RlbmNpbEJ1ZmZlcjtcblx0XHR0aGlzLmRlcHRoVGV4dHVyZSA9IHNvdXJjZS5kZXB0aFRleHR1cmU7XG5cblx0XHR0aGlzLnRleHR1cmUubGVuZ3RoID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBzb3VyY2UudGV4dHVyZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy50ZXh0dXJlWyBpIF0gPSBzb3VyY2UudGV4dHVyZVsgaSBdLmNsb25lKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPSB0cnVlO1xuXG5jbGFzcyBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGV4dGVuZHMgV2ViR0xSZW5kZXJUYXJnZXQge1xuXG5cdGNvbnN0cnVjdG9yKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zID0ge30gKSB7XG5cblx0XHRzdXBlciggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApO1xuXG5cdFx0dGhpcy5zYW1wbGVzID0gNDtcblxuXHRcdHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkgPSBvcHRpb25zLmlnbm9yZURlcHRoICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmlnbm9yZURlcHRoIDogdHJ1ZTtcblx0XHR0aGlzLnVzZVJlbmRlclRvVGV4dHVyZSA9ICggb3B0aW9ucy51c2VSZW5kZXJUb1RleHR1cmUgIT09IHVuZGVmaW5lZCApID8gb3B0aW9ucy51c2VSZW5kZXJUb1RleHR1cmUgOiBmYWxzZTtcblx0XHR0aGlzLnVzZVJlbmRlcmJ1ZmZlciA9IHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlID09PSBmYWxzZTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuc2FtcGxlcyA9IHNvdXJjZS5zYW1wbGVzO1xuXHRcdHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlID0gc291cmNlLnVzZVJlbmRlclRvVGV4dHVyZTtcblx0XHR0aGlzLnVzZVJlbmRlcmJ1ZmZlciA9IHNvdXJjZS51c2VSZW5kZXJidWZmZXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldC5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0ID0gdHJ1ZTtcblxuY2xhc3MgUXVhdGVybmlvbiB7XG5cblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCwgeiA9IDAsIHcgPSAxICkge1xuXG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fdyA9IHc7XG5cblx0fVxuXG5cdHN0YXRpYyBzbGVycCggcWEsIHFiLCBxbSwgdCApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4nICk7XG5cdFx0cmV0dXJuIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApO1xuXG5cdH1cblxuXHRzdGF0aWMgc2xlcnBGbGF0KCBkc3QsIGRzdE9mZnNldCwgc3JjMCwgc3JjT2Zmc2V0MCwgc3JjMSwgc3JjT2Zmc2V0MSwgdCApIHtcblxuXHRcdC8vIGZ1enotZnJlZSwgYXJyYXktYmFzZWQgUXVhdGVybmlvbiBTTEVSUCBvcGVyYXRpb25cblxuXHRcdGxldCB4MCA9IHNyYzBbIHNyY09mZnNldDAgKyAwIF0sXG5cdFx0XHR5MCA9IHNyYzBbIHNyY09mZnNldDAgKyAxIF0sXG5cdFx0XHR6MCA9IHNyYzBbIHNyY09mZnNldDAgKyAyIF0sXG5cdFx0XHR3MCA9IHNyYzBbIHNyY09mZnNldDAgKyAzIF07XG5cblx0XHRjb25zdCB4MSA9IHNyYzFbIHNyY09mZnNldDEgKyAwIF0sXG5cdFx0XHR5MSA9IHNyYzFbIHNyY09mZnNldDEgKyAxIF0sXG5cdFx0XHR6MSA9IHNyYzFbIHNyY09mZnNldDEgKyAyIF0sXG5cdFx0XHR3MSA9IHNyYzFbIHNyY09mZnNldDEgKyAzIF07XG5cblx0XHRpZiAoIHQgPT09IDAgKSB7XG5cblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMCBdID0geDA7XG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDEgXSA9IHkwO1xuXHRcdFx0ZHN0WyBkc3RPZmZzZXQgKyAyIF0gPSB6MDtcblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMyBdID0gdzA7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIHQgPT09IDEgKSB7XG5cblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMCBdID0geDE7XG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDEgXSA9IHkxO1xuXHRcdFx0ZHN0WyBkc3RPZmZzZXQgKyAyIF0gPSB6MTtcblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMyBdID0gdzE7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIHcwICE9PSB3MSB8fCB4MCAhPT0geDEgfHwgeTAgIT09IHkxIHx8IHowICE9PSB6MSApIHtcblxuXHRcdFx0bGV0IHMgPSAxIC0gdDtcblx0XHRcdGNvbnN0IGNvcyA9IHgwICogeDEgKyB5MCAqIHkxICsgejAgKiB6MSArIHcwICogdzEsXG5cdFx0XHRcdGRpciA9ICggY29zID49IDAgPyAxIDogLSAxICksXG5cdFx0XHRcdHNxclNpbiA9IDEgLSBjb3MgKiBjb3M7XG5cblx0XHRcdC8vIFNraXAgdGhlIFNsZXJwIGZvciB0aW55IHN0ZXBzIHRvIGF2b2lkIG51bWVyaWMgcHJvYmxlbXM6XG5cdFx0XHRpZiAoIHNxclNpbiA+IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdGNvbnN0IHNpbiA9IE1hdGguc3FydCggc3FyU2luICksXG5cdFx0XHRcdFx0bGVuID0gTWF0aC5hdGFuMiggc2luLCBjb3MgKiBkaXIgKTtcblxuXHRcdFx0XHRzID0gTWF0aC5zaW4oIHMgKiBsZW4gKSAvIHNpbjtcblx0XHRcdFx0dCA9IE1hdGguc2luKCB0ICogbGVuICkgLyBzaW47XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdERpciA9IHQgKiBkaXI7XG5cblx0XHRcdHgwID0geDAgKiBzICsgeDEgKiB0RGlyO1xuXHRcdFx0eTAgPSB5MCAqIHMgKyB5MSAqIHREaXI7XG5cdFx0XHR6MCA9IHowICogcyArIHoxICogdERpcjtcblx0XHRcdHcwID0gdzAgKiBzICsgdzEgKiB0RGlyO1xuXG5cdFx0XHQvLyBOb3JtYWxpemUgaW4gY2FzZSB3ZSBqdXN0IGRpZCBhIGxlcnA6XG5cdFx0XHRpZiAoIHMgPT09IDEgLSB0ICkge1xuXG5cdFx0XHRcdGNvbnN0IGYgPSAxIC8gTWF0aC5zcXJ0KCB4MCAqIHgwICsgeTAgKiB5MCArIHowICogejAgKyB3MCAqIHcwICk7XG5cblx0XHRcdFx0eDAgKj0gZjtcblx0XHRcdFx0eTAgKj0gZjtcblx0XHRcdFx0ejAgKj0gZjtcblx0XHRcdFx0dzAgKj0gZjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZHN0WyBkc3RPZmZzZXQgXSA9IHgwO1xuXHRcdGRzdFsgZHN0T2Zmc2V0ICsgMSBdID0geTA7XG5cdFx0ZHN0WyBkc3RPZmZzZXQgKyAyIF0gPSB6MDtcblx0XHRkc3RbIGRzdE9mZnNldCArIDMgXSA9IHcwO1xuXG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoIGRzdCwgZHN0T2Zmc2V0LCBzcmMwLCBzcmNPZmZzZXQwLCBzcmMxLCBzcmNPZmZzZXQxICkge1xuXG5cdFx0Y29uc3QgeDAgPSBzcmMwWyBzcmNPZmZzZXQwIF07XG5cdFx0Y29uc3QgeTAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMSBdO1xuXHRcdGNvbnN0IHowID0gc3JjMFsgc3JjT2Zmc2V0MCArIDIgXTtcblx0XHRjb25zdCB3MCA9IHNyYzBbIHNyY09mZnNldDAgKyAzIF07XG5cblx0XHRjb25zdCB4MSA9IHNyYzFbIHNyY09mZnNldDEgXTtcblx0XHRjb25zdCB5MSA9IHNyYzFbIHNyY09mZnNldDEgKyAxIF07XG5cdFx0Y29uc3QgejEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMiBdO1xuXHRcdGNvbnN0IHcxID0gc3JjMVsgc3JjT2Zmc2V0MSArIDMgXTtcblxuXHRcdGRzdFsgZHN0T2Zmc2V0IF0gPSB4MCAqIHcxICsgdzAgKiB4MSArIHkwICogejEgLSB6MCAqIHkxO1xuXHRcdGRzdFsgZHN0T2Zmc2V0ICsgMSBdID0geTAgKiB3MSArIHcwICogeTEgKyB6MCAqIHgxIC0geDAgKiB6MTtcblx0XHRkc3RbIGRzdE9mZnNldCArIDIgXSA9IHowICogdzEgKyB3MCAqIHoxICsgeDAgKiB5MSAtIHkwICogeDE7XG5cdFx0ZHN0WyBkc3RPZmZzZXQgKyAzIF0gPSB3MCAqIHcxIC0geDAgKiB4MSAtIHkwICogeTEgLSB6MCAqIHoxO1xuXG5cdFx0cmV0dXJuIGRzdDtcblxuXHR9XG5cblx0Z2V0IHgoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5feDtcblxuXHR9XG5cblx0c2V0IHgoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feCA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IHkoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5feTtcblxuXHR9XG5cblx0c2V0IHkoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feSA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IHooKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fejtcblxuXHR9XG5cblx0c2V0IHooIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feiA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IHcoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fdztcblxuXHR9XG5cblx0c2V0IHcoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5fdyA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0c2V0KCB4LCB5LCB6LCB3ICkge1xuXG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fdyA9IHc7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3osIHRoaXMuX3cgKTtcblxuXHR9XG5cblx0Y29weSggcXVhdGVybmlvbiApIHtcblxuXHRcdHRoaXMuX3ggPSBxdWF0ZXJuaW9uLng7XG5cdFx0dGhpcy5feSA9IHF1YXRlcm5pb24ueTtcblx0XHR0aGlzLl96ID0gcXVhdGVybmlvbi56O1xuXHRcdHRoaXMuX3cgPSBxdWF0ZXJuaW9uLnc7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUV1bGVyKCBldWxlciwgdXBkYXRlICkge1xuXG5cdFx0aWYgKCAhICggZXVsZXIgJiYgZXVsZXIuaXNFdWxlciApICkge1xuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCB4ID0gZXVsZXIuX3gsIHkgPSBldWxlci5feSwgeiA9IGV1bGVyLl96LCBvcmRlciA9IGV1bGVyLl9vcmRlcjtcblxuXHRcdC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cblx0XHQvLyBcdDIwNjk2LWZ1bmN0aW9uLXRvLWNvbnZlcnQtYmV0d2Vlbi1kY20tZXVsZXItYW5nbGVzLXF1YXRlcm5pb25zLWFuZC1ldWxlci12ZWN0b3JzL1xuXHRcdC8vXHRjb250ZW50L1NwaW5DYWxjLm1cblxuXHRcdGNvbnN0IGNvcyA9IE1hdGguY29zO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luO1xuXG5cdFx0Y29uc3QgYzEgPSBjb3MoIHggLyAyICk7XG5cdFx0Y29uc3QgYzIgPSBjb3MoIHkgLyAyICk7XG5cdFx0Y29uc3QgYzMgPSBjb3MoIHogLyAyICk7XG5cblx0XHRjb25zdCBzMSA9IHNpbiggeCAvIDIgKTtcblx0XHRjb25zdCBzMiA9IHNpbiggeSAvIDIgKTtcblx0XHRjb25zdCBzMyA9IHNpbiggeiAvIDIgKTtcblxuXHRcdHN3aXRjaCAoIG9yZGVyICkge1xuXG5cdFx0XHRjYXNlICdYWVonOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVhaJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1pYWSc6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWVgnOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVpYJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1haWSc6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHVwZGF0ZSAhPT0gZmFsc2UgKSB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKSB7XG5cblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvYW5nbGVUb1F1YXRlcm5pb24vaW5kZXguaHRtXG5cblx0XHQvLyBhc3N1bWVzIGF4aXMgaXMgbm9ybWFsaXplZFxuXG5cdFx0Y29uc3QgaGFsZkFuZ2xlID0gYW5nbGUgLyAyLCBzID0gTWF0aC5zaW4oIGhhbGZBbmdsZSApO1xuXG5cdFx0dGhpcy5feCA9IGF4aXMueCAqIHM7XG5cdFx0dGhpcy5feSA9IGF4aXMueSAqIHM7XG5cdFx0dGhpcy5feiA9IGF4aXMueiAqIHM7XG5cdFx0dGhpcy5fdyA9IE1hdGguY29zKCBoYWxmQW5nbGUgKTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXgoIG0gKSB7XG5cblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9RdWF0ZXJuaW9uL2luZGV4Lmh0bVxuXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblxuXHRcdGNvbnN0IHRlID0gbS5lbGVtZW50cyxcblxuXHRcdFx0bTExID0gdGVbIDAgXSwgbTEyID0gdGVbIDQgXSwgbTEzID0gdGVbIDggXSxcblx0XHRcdG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF0sXG5cdFx0XHRtMzEgPSB0ZVsgMiBdLCBtMzIgPSB0ZVsgNiBdLCBtMzMgPSB0ZVsgMTAgXSxcblxuXHRcdFx0dHJhY2UgPSBtMTEgKyBtMjIgKyBtMzM7XG5cblx0XHRpZiAoIHRyYWNlID4gMCApIHtcblxuXHRcdFx0Y29uc3QgcyA9IDAuNSAvIE1hdGguc3FydCggdHJhY2UgKyAxLjAgKTtcblxuXHRcdFx0dGhpcy5fdyA9IDAuMjUgLyBzO1xuXHRcdFx0dGhpcy5feCA9ICggbTMyIC0gbTIzICkgKiBzO1xuXHRcdFx0dGhpcy5feSA9ICggbTEzIC0gbTMxICkgKiBzO1xuXHRcdFx0dGhpcy5feiA9ICggbTIxIC0gbTEyICkgKiBzO1xuXG5cdFx0fSBlbHNlIGlmICggbTExID4gbTIyICYmIG0xMSA+IG0zMyApIHtcblxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCggMS4wICsgbTExIC0gbTIyIC0gbTMzICk7XG5cblx0XHRcdHRoaXMuX3cgPSAoIG0zMiAtIG0yMyApIC8gcztcblx0XHRcdHRoaXMuX3ggPSAwLjI1ICogcztcblx0XHRcdHRoaXMuX3kgPSAoIG0xMiArIG0yMSApIC8gcztcblx0XHRcdHRoaXMuX3ogPSAoIG0xMyArIG0zMSApIC8gcztcblxuXHRcdH0gZWxzZSBpZiAoIG0yMiA+IG0zMyApIHtcblxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCggMS4wICsgbTIyIC0gbTExIC0gbTMzICk7XG5cblx0XHRcdHRoaXMuX3cgPSAoIG0xMyAtIG0zMSApIC8gcztcblx0XHRcdHRoaXMuX3ggPSAoIG0xMiArIG0yMSApIC8gcztcblx0XHRcdHRoaXMuX3kgPSAwLjI1ICogcztcblx0XHRcdHRoaXMuX3ogPSAoIG0yMyArIG0zMiApIC8gcztcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoIDEuMCArIG0zMyAtIG0xMSAtIG0yMiApO1xuXG5cdFx0XHR0aGlzLl93ID0gKCBtMjEgLSBtMTIgKSAvIHM7XG5cdFx0XHR0aGlzLl94ID0gKCBtMTMgKyBtMzEgKSAvIHM7XG5cdFx0XHR0aGlzLl95ID0gKCBtMjMgKyBtMzIgKSAvIHM7XG5cdFx0XHR0aGlzLl96ID0gMC4yNSAqIHM7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVVuaXRWZWN0b3JzKCB2RnJvbSwgdlRvICkge1xuXG5cdFx0Ly8gYXNzdW1lcyBkaXJlY3Rpb24gdmVjdG9ycyB2RnJvbSBhbmQgdlRvIGFyZSBub3JtYWxpemVkXG5cblx0XHRsZXQgciA9IHZGcm9tLmRvdCggdlRvICkgKyAxO1xuXG5cdFx0aWYgKCByIDwgTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdC8vIHZGcm9tIGFuZCB2VG8gcG9pbnQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uc1xuXG5cdFx0XHRyID0gMDtcblxuXHRcdFx0aWYgKCBNYXRoLmFicyggdkZyb20ueCApID4gTWF0aC5hYnMoIHZGcm9tLnogKSApIHtcblxuXHRcdFx0XHR0aGlzLl94ID0gLSB2RnJvbS55O1xuXHRcdFx0XHR0aGlzLl95ID0gdkZyb20ueDtcblx0XHRcdFx0dGhpcy5feiA9IDA7XG5cdFx0XHRcdHRoaXMuX3cgPSByO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHRoaXMuX3ggPSAwO1xuXHRcdFx0XHR0aGlzLl95ID0gLSB2RnJvbS56O1xuXHRcdFx0XHR0aGlzLl96ID0gdkZyb20ueTtcblx0XHRcdFx0dGhpcy5fdyA9IHI7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGNyb3NzVmVjdG9ycyggdkZyb20sIHZUbyApOyAvLyBpbmxpbmVkIHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmN5IG9uIFZlY3RvcjNcblxuXHRcdFx0dGhpcy5feCA9IHZGcm9tLnkgKiB2VG8ueiAtIHZGcm9tLnogKiB2VG8ueTtcblx0XHRcdHRoaXMuX3kgPSB2RnJvbS56ICogdlRvLnggLSB2RnJvbS54ICogdlRvLno7XG5cdFx0XHR0aGlzLl96ID0gdkZyb20ueCAqIHZUby55IC0gdkZyb20ueSAqIHZUby54O1xuXHRcdFx0dGhpcy5fdyA9IHI7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcblxuXHR9XG5cblx0YW5nbGVUbyggcSApIHtcblxuXHRcdHJldHVybiAyICogTWF0aC5hY29zKCBNYXRoLmFicyggY2xhbXAoIHRoaXMuZG90KCBxICksIC0gMSwgMSApICkgKTtcblxuXHR9XG5cblx0cm90YXRlVG93YXJkcyggcSwgc3RlcCApIHtcblxuXHRcdGNvbnN0IGFuZ2xlID0gdGhpcy5hbmdsZVRvKCBxICk7XG5cblx0XHRpZiAoIGFuZ2xlID09PSAwICkgcmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCB0ID0gTWF0aC5taW4oIDEsIHN0ZXAgLyBhbmdsZSApO1xuXG5cdFx0dGhpcy5zbGVycCggcSwgdCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGlkZW50aXR5KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0KCAwLCAwLCAwLCAxICk7XG5cblx0fVxuXG5cdGludmVydCgpIHtcblxuXHRcdC8vIHF1YXRlcm5pb24gaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cblx0XHRyZXR1cm4gdGhpcy5jb25qdWdhdGUoKTtcblxuXHR9XG5cblx0Y29uanVnYXRlKCkge1xuXG5cdFx0dGhpcy5feCAqPSAtIDE7XG5cdFx0dGhpcy5feSAqPSAtIDE7XG5cdFx0dGhpcy5feiAqPSAtIDE7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZG90KCB2ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ggKiB2Ll94ICsgdGhpcy5feSAqIHYuX3kgKyB0aGlzLl96ICogdi5feiArIHRoaXMuX3cgKiB2Ll93O1xuXG5cdH1cblxuXHRsZW5ndGhTcSgpIHtcblxuXHRcdHJldHVybiB0aGlzLl94ICogdGhpcy5feCArIHRoaXMuX3kgKiB0aGlzLl95ICsgdGhpcy5feiAqIHRoaXMuX3ogKyB0aGlzLl93ICogdGhpcy5fdztcblxuXHR9XG5cblx0bGVuZ3RoKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5feCAqIHRoaXMuX3ggKyB0aGlzLl95ICogdGhpcy5feSArIHRoaXMuX3ogKiB0aGlzLl96ICsgdGhpcy5fdyAqIHRoaXMuX3cgKTtcblxuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXG5cdFx0bGV0IGwgPSB0aGlzLmxlbmd0aCgpO1xuXG5cdFx0aWYgKCBsID09PSAwICkge1xuXG5cdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdHRoaXMuX3kgPSAwO1xuXHRcdFx0dGhpcy5feiA9IDA7XG5cdFx0XHR0aGlzLl93ID0gMTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGwgPSAxIC8gbDtcblxuXHRcdFx0dGhpcy5feCA9IHRoaXMuX3ggKiBsO1xuXHRcdFx0dGhpcy5feSA9IHRoaXMuX3kgKiBsO1xuXHRcdFx0dGhpcy5feiA9IHRoaXMuX3ogKiBsO1xuXHRcdFx0dGhpcy5fdyA9IHRoaXMuX3cgKiBsO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5KCBxLCBwICkge1xuXG5cdFx0aWYgKCBwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoIHEsIHAgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoIHRoaXMsIHEgKTtcblxuXHR9XG5cblx0cHJlbXVsdGlwbHkoIHEgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKCBxLCB0aGlzICk7XG5cblx0fVxuXG5cdG11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSB7XG5cblx0XHQvLyBmcm9tIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvcmVhbE5vcm1lZEFsZ2VicmEvcXVhdGVybmlvbnMvY29kZS9pbmRleC5odG1cblxuXHRcdGNvbnN0IHFheCA9IGEuX3gsIHFheSA9IGEuX3ksIHFheiA9IGEuX3osIHFhdyA9IGEuX3c7XG5cdFx0Y29uc3QgcWJ4ID0gYi5feCwgcWJ5ID0gYi5feSwgcWJ6ID0gYi5feiwgcWJ3ID0gYi5fdztcblxuXHRcdHRoaXMuX3ggPSBxYXggKiBxYncgKyBxYXcgKiBxYnggKyBxYXkgKiBxYnogLSBxYXogKiBxYnk7XG5cdFx0dGhpcy5feSA9IHFheSAqIHFidyArIHFhdyAqIHFieSArIHFheiAqIHFieCAtIHFheCAqIHFiejtcblx0XHR0aGlzLl96ID0gcWF6ICogcWJ3ICsgcWF3ICogcWJ6ICsgcWF4ICogcWJ5IC0gcWF5ICogcWJ4O1xuXHRcdHRoaXMuX3cgPSBxYXcgKiBxYncgLSBxYXggKiBxYnggLSBxYXkgKiBxYnkgLSBxYXogKiBxYno7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2xlcnAoIHFiLCB0ICkge1xuXG5cdFx0aWYgKCB0ID09PSAwICkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCB0ID09PSAxICkgcmV0dXJuIHRoaXMuY29weSggcWIgKTtcblxuXHRcdGNvbnN0IHggPSB0aGlzLl94LCB5ID0gdGhpcy5feSwgeiA9IHRoaXMuX3osIHcgPSB0aGlzLl93O1xuXG5cdFx0Ly8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9yZWFsTm9ybWVkQWxnZWJyYS9xdWF0ZXJuaW9ucy9zbGVycC9cblxuXHRcdGxldCBjb3NIYWxmVGhldGEgPSB3ICogcWIuX3cgKyB4ICogcWIuX3ggKyB5ICogcWIuX3kgKyB6ICogcWIuX3o7XG5cblx0XHRpZiAoIGNvc0hhbGZUaGV0YSA8IDAgKSB7XG5cblx0XHRcdHRoaXMuX3cgPSAtIHFiLl93O1xuXHRcdFx0dGhpcy5feCA9IC0gcWIuX3g7XG5cdFx0XHR0aGlzLl95ID0gLSBxYi5feTtcblx0XHRcdHRoaXMuX3ogPSAtIHFiLl96O1xuXG5cdFx0XHRjb3NIYWxmVGhldGEgPSAtIGNvc0hhbGZUaGV0YTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuY29weSggcWIgKTtcblxuXHRcdH1cblxuXHRcdGlmICggY29zSGFsZlRoZXRhID49IDEuMCApIHtcblxuXHRcdFx0dGhpcy5fdyA9IHc7XG5cdFx0XHR0aGlzLl94ID0geDtcblx0XHRcdHRoaXMuX3kgPSB5O1xuXHRcdFx0dGhpcy5feiA9IHo7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3FyU2luSGFsZlRoZXRhID0gMS4wIC0gY29zSGFsZlRoZXRhICogY29zSGFsZlRoZXRhO1xuXG5cdFx0aWYgKCBzcXJTaW5IYWxmVGhldGEgPD0gTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdGNvbnN0IHMgPSAxIC0gdDtcblx0XHRcdHRoaXMuX3cgPSBzICogdyArIHQgKiB0aGlzLl93O1xuXHRcdFx0dGhpcy5feCA9IHMgKiB4ICsgdCAqIHRoaXMuX3g7XG5cdFx0XHR0aGlzLl95ID0gcyAqIHkgKyB0ICogdGhpcy5feTtcblx0XHRcdHRoaXMuX3ogPSBzICogeiArIHQgKiB0aGlzLl96O1xuXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZSgpO1xuXHRcdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH1cblxuXHRcdGNvbnN0IHNpbkhhbGZUaGV0YSA9IE1hdGguc3FydCggc3FyU2luSGFsZlRoZXRhICk7XG5cdFx0Y29uc3QgaGFsZlRoZXRhID0gTWF0aC5hdGFuMiggc2luSGFsZlRoZXRhLCBjb3NIYWxmVGhldGEgKTtcblx0XHRjb25zdCByYXRpb0EgPSBNYXRoLnNpbiggKCAxIC0gdCApICogaGFsZlRoZXRhICkgLyBzaW5IYWxmVGhldGEsXG5cdFx0XHRyYXRpb0IgPSBNYXRoLnNpbiggdCAqIGhhbGZUaGV0YSApIC8gc2luSGFsZlRoZXRhO1xuXG5cdFx0dGhpcy5fdyA9ICggdyAqIHJhdGlvQSArIHRoaXMuX3cgKiByYXRpb0IgKTtcblx0XHR0aGlzLl94ID0gKCB4ICogcmF0aW9BICsgdGhpcy5feCAqIHJhdGlvQiApO1xuXHRcdHRoaXMuX3kgPSAoIHkgKiByYXRpb0EgKyB0aGlzLl95ICogcmF0aW9CICk7XG5cdFx0dGhpcy5feiA9ICggeiAqIHJhdGlvQSArIHRoaXMuX3ogKiByYXRpb0IgKTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5jb3B5KCBxYSApLnNsZXJwKCBxYiwgdCApO1xuXG5cdH1cblxuXHRyYW5kb20oKSB7XG5cblx0XHQvLyBEZXJpdmVkIGZyb20gaHR0cDovL3BsYW5uaW5nLmNzLnVpdWMuZWR1L25vZGUxOTguaHRtbFxuXHRcdC8vIE5vdGUsIHRoaXMgc291cmNlIHVzZXMgdywgeCwgeSwgeiBvcmRlcmluZyxcblx0XHQvLyBzbyB3ZSBzd2FwIHRoZSBvcmRlciBiZWxvdy5cblxuXHRcdGNvbnN0IHUxID0gTWF0aC5yYW5kb20oKTtcblx0XHRjb25zdCBzcXJ0MXUxID0gTWF0aC5zcXJ0KCAxIC0gdTEgKTtcblx0XHRjb25zdCBzcXJ0dTEgPSBNYXRoLnNxcnQoIHUxICk7XG5cblx0XHRjb25zdCB1MiA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcblxuXHRcdGNvbnN0IHUzID0gMiAqIE1hdGguUEkgKiBNYXRoLnJhbmRvbSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0KFxuXHRcdFx0c3FydDF1MSAqIE1hdGguY29zKCB1MiApLFxuXHRcdFx0c3FydHUxICogTWF0aC5zaW4oIHUzICksXG5cdFx0XHRzcXJ0dTEgKiBNYXRoLmNvcyggdTMgKSxcblx0XHRcdHNxcnQxdTEgKiBNYXRoLnNpbiggdTIgKSxcblx0XHQpO1xuXG5cdH1cblxuXHRlcXVhbHMoIHF1YXRlcm5pb24gKSB7XG5cblx0XHRyZXR1cm4gKCBxdWF0ZXJuaW9uLl94ID09PSB0aGlzLl94ICkgJiYgKCBxdWF0ZXJuaW9uLl95ID09PSB0aGlzLl95ICkgJiYgKCBxdWF0ZXJuaW9uLl96ID09PSB0aGlzLl96ICkgJiYgKCBxdWF0ZXJuaW9uLl93ID09PSB0aGlzLl93ICk7XG5cblx0fVxuXG5cdGZyb21BcnJheSggYXJyYXksIG9mZnNldCA9IDAgKSB7XG5cblx0XHR0aGlzLl94ID0gYXJyYXlbIG9mZnNldCBdO1xuXHRcdHRoaXMuX3kgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXHRcdHRoaXMuX3ogPSBhcnJheVsgb2Zmc2V0ICsgMiBdO1xuXHRcdHRoaXMuX3cgPSBhcnJheVsgb2Zmc2V0ICsgMyBdO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLl94O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLl96O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLl93O1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4ICkge1xuXG5cdFx0dGhpcy5feCA9IGF0dHJpYnV0ZS5nZXRYKCBpbmRleCApO1xuXHRcdHRoaXMuX3kgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTtcblx0XHR0aGlzLl96ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7XG5cdFx0dGhpcy5fdyA9IGF0dHJpYnV0ZS5nZXRXKCBpbmRleCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdF9vbkNoYW5nZSggY2FsbGJhY2sgKSB7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0X29uQ2hhbmdlQ2FsbGJhY2soKSB7fVxuXG59XG5cblF1YXRlcm5pb24ucHJvdG90eXBlLmlzUXVhdGVybmlvbiA9IHRydWU7XG5cbmNsYXNzIFZlY3RvcjMge1xuXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAsIHogPSAwICkge1xuXG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHo7XG5cblx0fVxuXG5cdHNldCggeCwgeSwgeiApIHtcblxuXHRcdGlmICggeiA9PT0gdW5kZWZpbmVkICkgeiA9IHRoaXMuejsgLy8gc3ByaXRlLnNjYWxlLnNldCh4LHkpXG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0dGhpcy56ID0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFgoIHggKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFkoIHkgKSB7XG5cblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFooIHogKSB7XG5cblx0XHR0aGlzLnogPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldENvbXBvbmVudCggaW5kZXgsIHZhbHVlICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Q29tcG9uZW50KCBpbmRleCApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHJldHVybiB0aGlzLng7XG5cdFx0XHRjYXNlIDE6IHJldHVybiB0aGlzLnk7XG5cdFx0XHRjYXNlIDI6IHJldHVybiB0aGlzLno7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy54LCB0aGlzLnksIHRoaXMueiApO1xuXG5cdH1cblxuXHRjb3B5KCB2ICkge1xuXG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHR0aGlzLnogPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRTY2FsYXIoIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHR0aGlzLnogKz0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRWZWN0b3JzKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54ICsgYi54O1xuXHRcdHRoaXMueSA9IGEueSArIGIueTtcblx0XHR0aGlzLnogPSBhLnogKyBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKCB2LCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWJTY2FsYXIoIHMgKSB7XG5cblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHR0aGlzLnogLT0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdWJWZWN0b3JzKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54IC0gYi54O1xuXHRcdHRoaXMueSA9IGEueSAtIGIueTtcblx0XHR0aGlzLnogPSBhLnogLSBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHkoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHR0aGlzLnogKj0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseVZlY3RvcnMoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggKiBiLng7XG5cdFx0dGhpcy55ID0gYS55ICogYi55O1xuXHRcdHRoaXMueiA9IGEueiAqIGIuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcHBseUV1bGVyKCBldWxlciApIHtcblxuXHRcdGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oIF9xdWF0ZXJuaW9uJDQuc2V0RnJvbUV1bGVyKCBldWxlciApICk7XG5cblx0fVxuXG5cdGFwcGx5QXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApIHtcblxuXHRcdHJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbiggX3F1YXRlcm5pb24kNC5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApICk7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4MyggbSApIHtcblxuXHRcdGNvbnN0IHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgMyBdICogeSArIGVbIDYgXSAqIHo7XG5cdFx0dGhpcy55ID0gZVsgMSBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA3IF0gKiB6O1xuXHRcdHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOCBdICogejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcHBseU5vcm1hbE1hdHJpeCggbSApIHtcblxuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4MyggbSApLm5vcm1hbGl6ZSgpO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG0gKSB7XG5cblx0XHRjb25zdCB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3QgdyA9IDEgLyAoIGVbIDMgXSAqIHggKyBlWyA3IF0gKiB5ICsgZVsgMTEgXSAqIHogKyBlWyAxNSBdICk7XG5cblx0XHR0aGlzLnggPSAoIGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICogeiArIGVbIDEyIF0gKSAqIHc7XG5cdFx0dGhpcy55ID0gKCBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAqIHogKyBlWyAxMyBdICkgKiB3O1xuXHRcdHRoaXMueiA9ICggZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogeiArIGVbIDE0IF0gKSAqIHc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKCBxICkge1xuXG5cdFx0Y29uc3QgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHRjb25zdCBxeCA9IHEueCwgcXkgPSBxLnksIHF6ID0gcS56LCBxdyA9IHEudztcblxuXHRcdC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjdG9yXG5cblx0XHRjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcblx0XHRjb25zdCBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcblx0XHRjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcblx0XHRjb25zdCBpdyA9IC0gcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuXG5cdFx0Ly8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuXG5cdFx0dGhpcy54ID0gaXggKiBxdyArIGl3ICogLSBxeCArIGl5ICogLSBxeiAtIGl6ICogLSBxeTtcblx0XHR0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtIHF5ICsgaXogKiAtIHF4IC0gaXggKiAtIHF6O1xuXHRcdHRoaXMueiA9IGl6ICogcXcgKyBpdyAqIC0gcXogKyBpeCAqIC0gcXkgLSBpeSAqIC0gcXg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cHJvamVjdCggY2FtZXJhICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICkuYXBwbHlNYXRyaXg0KCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdH1cblxuXHR1bnByb2plY3QoIGNhbWVyYSApIHtcblxuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlICkuYXBwbHlNYXRyaXg0KCBjYW1lcmEubWF0cml4V29ybGQgKTtcblxuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKCBtICkge1xuXG5cdFx0Ly8gaW5wdXQ6IFRIUkVFLk1hdHJpeDQgYWZmaW5lIG1hdHJpeFxuXHRcdC8vIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIGRpcmVjdGlvblxuXG5cdFx0Y29uc3QgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICogejtcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAqIHo7XG5cdFx0dGhpcy56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogejtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xuXG5cdH1cblxuXHRkaXZpZGUoIHYgKSB7XG5cblx0XHR0aGlzLnggLz0gdi54O1xuXHRcdHRoaXMueSAvPSB2Lnk7XG5cdFx0dGhpcy56IC89IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXZpZGVTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XG5cblx0fVxuXG5cdG1pbiggdiApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWluKCB0aGlzLngsIHYueCApO1xuXHRcdHRoaXMueSA9IE1hdGgubWluKCB0aGlzLnksIHYueSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWluKCB0aGlzLnosIHYueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1heCggdiApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCB0aGlzLngsIHYueCApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCB0aGlzLnksIHYueSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCB0aGlzLnosIHYueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsYW1wKCBtaW4sIG1heCApIHtcblxuXHRcdC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlXG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggbWluLngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluLnksIE1hdGgubWluKCBtYXgueSwgdGhpcy55ICkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggbWluLnosIE1hdGgubWluKCBtYXgueiwgdGhpcy56ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcFNjYWxhciggbWluVmFsLCBtYXhWYWwgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnggKSApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy56ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcExlbmd0aCggbWluLCBtYXggKSB7XG5cblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCBsZW5ndGggfHwgMSApLm11bHRpcGx5U2NhbGFyKCBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCBsZW5ndGggKSApICk7XG5cblx0fVxuXG5cdGZsb29yKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5mbG9vciggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2VpbCgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguY2VpbCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLmNlaWwoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdW5kKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5yb3VuZCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5yb3VuZCggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm91bmRUb1plcm8oKSB7XG5cblx0XHR0aGlzLnggPSAoIHRoaXMueCA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSAoIHRoaXMueiA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy56ICkgOiBNYXRoLmZsb29yKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cblx0XHR0aGlzLnggPSAtIHRoaXMueDtcblx0XHR0aGlzLnkgPSAtIHRoaXMueTtcblx0XHR0aGlzLnogPSAtIHRoaXMuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkb3QoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56O1xuXG5cdH1cblxuXHQvLyBUT0RPIGxlbmd0aFNxdWFyZWQ/XG5cblx0bGVuZ3RoU3EoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56O1xuXG5cdH1cblxuXHRsZW5ndGgoKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKTtcblxuXHR9XG5cblx0bWFuaGF0dGFuTGVuZ3RoKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguYWJzKCB0aGlzLnggKSArIE1hdGguYWJzKCB0aGlzLnkgKSArIE1hdGguYWJzKCB0aGlzLnogKTtcblxuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCB0aGlzLmxlbmd0aCgpIHx8IDEgKTtcblxuXHR9XG5cblx0c2V0TGVuZ3RoKCBsZW5ndGggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhciggbGVuZ3RoICk7XG5cblx0fVxuXG5cdGxlcnAoIHYsIGFscGhhICkge1xuXG5cdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcblx0XHR0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xuXHRcdHRoaXMueiArPSAoIHYueiAtIHRoaXMueiApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycFZlY3RvcnMoIHYxLCB2MiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggPSB2MS54ICsgKCB2Mi54IC0gdjEueCApICogYWxwaGE7XG5cdFx0dGhpcy55ID0gdjEueSArICggdjIueSAtIHYxLnkgKSAqIGFscGhhO1xuXHRcdHRoaXMueiA9IHYxLnogKyAoIHYyLnogLSB2MS56ICkgKiBhbHBoYTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjcm9zcyggdiwgdyApIHtcblxuXHRcdGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdiwgdyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NWZWN0b3JzKCB0aGlzLCB2ICk7XG5cblx0fVxuXG5cdGNyb3NzVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdGNvbnN0IGF4ID0gYS54LCBheSA9IGEueSwgYXogPSBhLno7XG5cdFx0Y29uc3QgYnggPSBiLngsIGJ5ID0gYi55LCBieiA9IGIuejtcblxuXHRcdHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5O1xuXHRcdHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xuXHRcdHRoaXMueiA9IGF4ICogYnkgLSBheSAqIGJ4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHByb2plY3RPblZlY3RvciggdiApIHtcblxuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gdi5sZW5ndGhTcSgpO1xuXG5cdFx0aWYgKCBkZW5vbWluYXRvciA9PT0gMCApIHJldHVybiB0aGlzLnNldCggMCwgMCwgMCApO1xuXG5cdFx0Y29uc3Qgc2NhbGFyID0gdi5kb3QoIHRoaXMgKSAvIGRlbm9taW5hdG9yO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29weSggdiApLm11bHRpcGx5U2NhbGFyKCBzY2FsYXIgKTtcblxuXHR9XG5cblx0cHJvamVjdE9uUGxhbmUoIHBsYW5lTm9ybWFsICkge1xuXG5cdFx0X3ZlY3RvciRjLmNvcHkoIHRoaXMgKS5wcm9qZWN0T25WZWN0b3IoIHBsYW5lTm9ybWFsICk7XG5cblx0XHRyZXR1cm4gdGhpcy5zdWIoIF92ZWN0b3IkYyApO1xuXG5cdH1cblxuXHRyZWZsZWN0KCBub3JtYWwgKSB7XG5cblx0XHQvLyByZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWxcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cblx0XHRyZXR1cm4gdGhpcy5zdWIoIF92ZWN0b3IkYy5jb3B5KCBub3JtYWwgKS5tdWx0aXBseVNjYWxhciggMiAqIHRoaXMuZG90KCBub3JtYWwgKSApICk7XG5cblx0fVxuXG5cdGFuZ2xlVG8oIHYgKSB7XG5cblx0XHRjb25zdCBkZW5vbWluYXRvciA9IE1hdGguc3FydCggdGhpcy5sZW5ndGhTcSgpICogdi5sZW5ndGhTcSgpICk7XG5cblx0XHRpZiAoIGRlbm9taW5hdG9yID09PSAwICkgcmV0dXJuIE1hdGguUEkgLyAyO1xuXG5cdFx0Y29uc3QgdGhldGEgPSB0aGlzLmRvdCggdiApIC8gZGVub21pbmF0b3I7XG5cblx0XHQvLyBjbGFtcCwgdG8gaGFuZGxlIG51bWVyaWNhbCBwcm9ibGVtc1xuXG5cdFx0cmV0dXJuIE1hdGguYWNvcyggY2xhbXAoIHRoZXRhLCAtIDEsIDEgKSApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVRvU3F1YXJlZCggdiApICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9TcXVhcmVkKCB2ICkge1xuXG5cdFx0Y29uc3QgZHggPSB0aGlzLnggLSB2LngsIGR5ID0gdGhpcy55IC0gdi55LCBkeiA9IHRoaXMueiAtIHYuejtcblxuXHRcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7XG5cblx0fVxuXG5cdG1hbmhhdHRhbkRpc3RhbmNlVG8oIHYgKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCAtIHYueCApICsgTWF0aC5hYnMoIHRoaXMueSAtIHYueSApICsgTWF0aC5hYnMoIHRoaXMueiAtIHYueiApO1xuXG5cdH1cblxuXHRzZXRGcm9tU3BoZXJpY2FsKCBzICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyggcy5yYWRpdXMsIHMucGhpLCBzLnRoZXRhICk7XG5cblx0fVxuXG5cdHNldEZyb21TcGhlcmljYWxDb29yZHMoIHJhZGl1cywgcGhpLCB0aGV0YSApIHtcblxuXHRcdGNvbnN0IHNpblBoaVJhZGl1cyA9IE1hdGguc2luKCBwaGkgKSAqIHJhZGl1cztcblxuXHRcdHRoaXMueCA9IHNpblBoaVJhZGl1cyAqIE1hdGguc2luKCB0aGV0YSApO1xuXHRcdHRoaXMueSA9IE1hdGguY29zKCBwaGkgKSAqIHJhZGl1cztcblx0XHR0aGlzLnogPSBzaW5QaGlSYWRpdXMgKiBNYXRoLmNvcyggdGhldGEgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tQ3lsaW5kcmljYWwoIGMgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMoIGMucmFkaXVzLCBjLnRoZXRhLCBjLnkgKTtcblxuXHR9XG5cblx0c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKCByYWRpdXMsIHRoZXRhLCB5ICkge1xuXG5cdFx0dGhpcy54ID0gcmFkaXVzICogTWF0aC5zaW4oIHRoZXRhICk7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSByYWRpdXMgKiBNYXRoLmNvcyggdGhldGEgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tTWF0cml4UG9zaXRpb24oIG0gKSB7XG5cblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDEyIF07XG5cdFx0dGhpcy55ID0gZVsgMTMgXTtcblx0XHR0aGlzLnogPSBlWyAxNCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21NYXRyaXhTY2FsZSggbSApIHtcblxuXHRcdGNvbnN0IHN4ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAwICkubGVuZ3RoKCk7XG5cdFx0Y29uc3Qgc3kgPSB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDEgKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzeiA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMiApLmxlbmd0aCgpO1xuXG5cdFx0dGhpcy54ID0gc3g7XG5cdFx0dGhpcy55ID0gc3k7XG5cdFx0dGhpcy56ID0gc3o7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbU1hdHJpeENvbHVtbiggbSwgaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkoIG0uZWxlbWVudHMsIGluZGV4ICogNCApO1xuXG5cdH1cblxuXHRzZXRGcm9tTWF0cml4M0NvbHVtbiggbSwgaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkoIG0uZWxlbWVudHMsIGluZGV4ICogMyApO1xuXG5cdH1cblxuXHRlcXVhbHMoIHYgKSB7XG5cblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICYmICggdi56ID09PSB0aGlzLnogKSApO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0dGhpcy54ID0gYXJyYXlbIG9mZnNldCBdO1xuXHRcdHRoaXMueSA9IGFycmF5WyBvZmZzZXQgKyAxIF07XG5cdFx0dGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0FycmF5KCBhcnJheSA9IFtdLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0YXJyYXlbIG9mZnNldCBdID0gdGhpcy54O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLnk7XG5cdFx0YXJyYXlbIG9mZnNldCArIDIgXSA9IHRoaXMuejtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKCBpbmRleCApO1xuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApO1xuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKCBpbmRleCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJhbmRvbSgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnogPSBNYXRoLnJhbmRvbSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJhbmRvbURpcmVjdGlvbigpIHtcblxuXHRcdC8vIERlcml2ZWQgZnJvbSBodHRwczovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9TcGhlcmVQb2ludFBpY2tpbmcuaHRtbFxuXG5cdFx0Y29uc3QgdSA9ICggTWF0aC5yYW5kb20oKSAtIDAuNSApICogMjtcblx0XHRjb25zdCB0ID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyO1xuXHRcdGNvbnN0IGYgPSBNYXRoLnNxcnQoIDEgLSB1ICoqIDIgKTtcblxuXHRcdHRoaXMueCA9IGYgKiBNYXRoLmNvcyggdCApO1xuXHRcdHRoaXMueSA9IGYgKiBNYXRoLnNpbiggdCApO1xuXHRcdHRoaXMueiA9IHU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0KlsgU3ltYm9sLml0ZXJhdG9yIF0oKSB7XG5cblx0XHR5aWVsZCB0aGlzLng7XG5cdFx0eWllbGQgdGhpcy55O1xuXHRcdHlpZWxkIHRoaXMuejtcblxuXHR9XG5cbn1cblxuVmVjdG9yMy5wcm90b3R5cGUuaXNWZWN0b3IzID0gdHJ1ZTtcblxuY29uc3QgX3ZlY3RvciRjID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3F1YXRlcm5pb24kNCA9IC8qQF9fUFVSRV9fKi8gbmV3IFF1YXRlcm5pb24oKTtcblxuY2xhc3MgQm94MyB7XG5cblx0Y29uc3RydWN0b3IoIG1pbiA9IG5ldyBWZWN0b3IzKCArIEluZmluaXR5LCArIEluZmluaXR5LCArIEluZmluaXR5ICksIG1heCA9IG5ldyBWZWN0b3IzKCAtIEluZmluaXR5LCAtIEluZmluaXR5LCAtIEluZmluaXR5ICkgKSB7XG5cblx0XHR0aGlzLm1pbiA9IG1pbjtcblx0XHR0aGlzLm1heCA9IG1heDtcblxuXHR9XG5cblx0c2V0KCBtaW4sIG1heCApIHtcblxuXHRcdHRoaXMubWluLmNvcHkoIG1pbiApO1xuXHRcdHRoaXMubWF4LmNvcHkoIG1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21BcnJheSggYXJyYXkgKSB7XG5cblx0XHRsZXQgbWluWCA9ICsgSW5maW5pdHk7XG5cdFx0bGV0IG1pblkgPSArIEluZmluaXR5O1xuXHRcdGxldCBtaW5aID0gKyBJbmZpbml0eTtcblxuXHRcdGxldCBtYXhYID0gLSBJbmZpbml0eTtcblx0XHRsZXQgbWF4WSA9IC0gSW5maW5pdHk7XG5cdFx0bGV0IG1heFogPSAtIEluZmluaXR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRjb25zdCB4ID0gYXJyYXlbIGkgXTtcblx0XHRcdGNvbnN0IHkgPSBhcnJheVsgaSArIDEgXTtcblx0XHRcdGNvbnN0IHogPSBhcnJheVsgaSArIDIgXTtcblxuXHRcdFx0aWYgKCB4IDwgbWluWCApIG1pblggPSB4O1xuXHRcdFx0aWYgKCB5IDwgbWluWSApIG1pblkgPSB5O1xuXHRcdFx0aWYgKCB6IDwgbWluWiApIG1pblogPSB6O1xuXG5cdFx0XHRpZiAoIHggPiBtYXhYICkgbWF4WCA9IHg7XG5cdFx0XHRpZiAoIHkgPiBtYXhZICkgbWF4WSA9IHk7XG5cdFx0XHRpZiAoIHogPiBtYXhaICkgbWF4WiA9IHo7XG5cblx0XHR9XG5cblx0XHR0aGlzLm1pbi5zZXQoIG1pblgsIG1pblksIG1pblogKTtcblx0XHR0aGlzLm1heC5zZXQoIG1heFgsIG1heFksIG1heFogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSB7XG5cblx0XHRsZXQgbWluWCA9ICsgSW5maW5pdHk7XG5cdFx0bGV0IG1pblkgPSArIEluZmluaXR5O1xuXHRcdGxldCBtaW5aID0gKyBJbmZpbml0eTtcblxuXHRcdGxldCBtYXhYID0gLSBJbmZpbml0eTtcblx0XHRsZXQgbWF4WSA9IC0gSW5maW5pdHk7XG5cdFx0bGV0IG1heFogPSAtIEluZmluaXR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gYXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgeCA9IGF0dHJpYnV0ZS5nZXRYKCBpICk7XG5cdFx0XHRjb25zdCB5ID0gYXR0cmlidXRlLmdldFkoIGkgKTtcblx0XHRcdGNvbnN0IHogPSBhdHRyaWJ1dGUuZ2V0WiggaSApO1xuXG5cdFx0XHRpZiAoIHggPCBtaW5YICkgbWluWCA9IHg7XG5cdFx0XHRpZiAoIHkgPCBtaW5ZICkgbWluWSA9IHk7XG5cdFx0XHRpZiAoIHogPCBtaW5aICkgbWluWiA9IHo7XG5cblx0XHRcdGlmICggeCA+IG1heFggKSBtYXhYID0geDtcblx0XHRcdGlmICggeSA+IG1heFkgKSBtYXhZID0geTtcblx0XHRcdGlmICggeiA+IG1heFogKSBtYXhaID0gejtcblxuXHRcdH1cblxuXHRcdHRoaXMubWluLnNldCggbWluWCwgbWluWSwgbWluWiApO1xuXHRcdHRoaXMubWF4LnNldCggbWF4WCwgbWF4WSwgbWF4WiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Qb2ludHMoIHBvaW50cyApIHtcblxuXHRcdHRoaXMubWFrZUVtcHR5KCk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmV4cGFuZEJ5UG9pbnQoIHBvaW50c1sgaSBdICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUNlbnRlckFuZFNpemUoIGNlbnRlciwgc2l6ZSApIHtcblxuXHRcdGNvbnN0IGhhbGZTaXplID0gX3ZlY3RvciRiLmNvcHkoIHNpemUgKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cblx0XHR0aGlzLm1pbi5jb3B5KCBjZW50ZXIgKS5zdWIoIGhhbGZTaXplICk7XG5cdFx0dGhpcy5tYXguY29weSggY2VudGVyICkuYWRkKCBoYWxmU2l6ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21PYmplY3QoIG9iamVjdCwgcHJlY2lzZSA9IGZhbHNlICkge1xuXG5cdFx0dGhpcy5tYWtlRW1wdHkoKTtcblxuXHRcdHJldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KCBvYmplY3QsIHByZWNpc2UgKTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcHkoIGJveCApIHtcblxuXHRcdHRoaXMubWluLmNvcHkoIGJveC5taW4gKTtcblx0XHR0aGlzLm1heC5jb3B5KCBib3gubWF4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZUVtcHR5KCkge1xuXG5cdFx0dGhpcy5taW4ueCA9IHRoaXMubWluLnkgPSB0aGlzLm1pbi56ID0gKyBJbmZpbml0eTtcblx0XHR0aGlzLm1heC54ID0gdGhpcy5tYXgueSA9IHRoaXMubWF4LnogPSAtIEluZmluaXR5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGlzRW1wdHkoKSB7XG5cblx0XHQvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIGVtcHR5IHRoYW4gKCB2b2x1bWUgPD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQgcG9zaXRpdmUgd2l0aCB0d28gbmVnYXRpdmUgYXhlc1xuXG5cdFx0cmV0dXJuICggdGhpcy5tYXgueCA8IHRoaXMubWluLnggKSB8fCAoIHRoaXMubWF4LnkgPCB0aGlzLm1pbi55ICkgfHwgKCB0aGlzLm1heC56IDwgdGhpcy5taW4ueiApO1xuXG5cdH1cblxuXHRnZXRDZW50ZXIoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAsIDAsIDAgKSA6IHRhcmdldC5hZGRWZWN0b3JzKCB0aGlzLm1pbiwgdGhpcy5tYXggKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cblx0fVxuXG5cdGdldFNpemUoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAsIDAsIDAgKSA6IHRhcmdldC5zdWJWZWN0b3JzKCB0aGlzLm1heCwgdGhpcy5taW4gKTtcblxuXHR9XG5cblx0ZXhwYW5kQnlQb2ludCggcG9pbnQgKSB7XG5cblx0XHR0aGlzLm1pbi5taW4oIHBvaW50ICk7XG5cdFx0dGhpcy5tYXgubWF4KCBwb2ludCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5VmVjdG9yKCB2ZWN0b3IgKSB7XG5cblx0XHR0aGlzLm1pbi5zdWIoIHZlY3RvciApO1xuXHRcdHRoaXMubWF4LmFkZCggdmVjdG9yICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXhwYW5kQnlTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMubWluLmFkZFNjYWxhciggLSBzY2FsYXIgKTtcblx0XHR0aGlzLm1heC5hZGRTY2FsYXIoIHNjYWxhciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5T2JqZWN0KCBvYmplY3QsIHByZWNpc2UgPSBmYWxzZSApIHtcblxuXHRcdC8vIENvbXB1dGVzIHRoZSB3b3JsZC1heGlzLWFsaWduZWQgYm91bmRpbmcgYm94IG9mIGFuIG9iamVjdCAoaW5jbHVkaW5nIGl0cyBjaGlsZHJlbiksXG5cdFx0Ly8gYWNjb3VudGluZyBmb3IgYm90aCB0aGUgb2JqZWN0J3MsIGFuZCBjaGlsZHJlbidzLCB3b3JsZCB0cmFuc2Zvcm1zXG5cblx0XHRvYmplY3QudXBkYXRlV29ybGRNYXRyaXgoIGZhbHNlLCBmYWxzZSApO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cblx0XHRpZiAoIGdlb21ldHJ5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggcHJlY2lzZSAmJiBnZW9tZXRyeS5hdHRyaWJ1dGVzICE9IHVuZGVmaW5lZCAmJiBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRfdmVjdG9yJGIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGkgKS5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHRcdHRoaXMuZXhwYW5kQnlQb2ludCggX3ZlY3RvciRiICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnkuYm91bmRpbmdCb3ggPT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2JveCQzLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICk7XG5cdFx0XHRcdF9ib3gkMy5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRcdHRoaXMudW5pb24oIF9ib3gkMyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuZXhwYW5kQnlPYmplY3QoIGNoaWxkcmVuWyBpIF0sIHByZWNpc2UgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb250YWluc1BvaW50KCBwb2ludCApIHtcblxuXHRcdHJldHVybiBwb2ludC54IDwgdGhpcy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fFxuXHRcdFx0cG9pbnQueSA8IHRoaXMubWluLnkgfHwgcG9pbnQueSA+IHRoaXMubWF4LnkgfHxcblx0XHRcdHBvaW50LnogPCB0aGlzLm1pbi56IHx8IHBvaW50LnogPiB0aGlzLm1heC56ID8gZmFsc2UgOiB0cnVlO1xuXG5cdH1cblxuXHRjb250YWluc0JveCggYm94ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubWluLnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICYmXG5cdFx0XHR0aGlzLm1pbi55IDw9IGJveC5taW4ueSAmJiBib3gubWF4LnkgPD0gdGhpcy5tYXgueSAmJlxuXHRcdFx0dGhpcy5taW4ueiA8PSBib3gubWluLnogJiYgYm94Lm1heC56IDw9IHRoaXMubWF4Lno7XG5cblx0fVxuXG5cdGdldFBhcmFtZXRlciggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdC8vIFRoaXMgY2FuIHBvdGVudGlhbGx5IGhhdmUgYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgYm94XG5cdFx0Ly8gaGFzIGEgc2l6ZSBkaW1lbnNpb24gb2YgMC5cblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KFxuXHRcdFx0KCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1heC54IC0gdGhpcy5taW4ueCApLFxuXHRcdFx0KCBwb2ludC55IC0gdGhpcy5taW4ueSApIC8gKCB0aGlzLm1heC55IC0gdGhpcy5taW4ueSApLFxuXHRcdFx0KCBwb2ludC56IC0gdGhpcy5taW4ueiApIC8gKCB0aGlzLm1heC56IC0gdGhpcy5taW4ueiApXG5cdFx0KTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0Ly8gdXNpbmcgNiBzcGxpdHRpbmcgcGxhbmVzIHRvIHJ1bGUgb3V0IGludGVyc2VjdGlvbnMuXG5cdFx0cmV0dXJuIGJveC5tYXgueCA8IHRoaXMubWluLnggfHwgYm94Lm1pbi54ID4gdGhpcy5tYXgueCB8fFxuXHRcdFx0Ym94Lm1heC55IDwgdGhpcy5taW4ueSB8fCBib3gubWluLnkgPiB0aGlzLm1heC55IHx8XG5cdFx0XHRib3gubWF4LnogPCB0aGlzLm1pbi56IHx8IGJveC5taW4ueiA+IHRoaXMubWF4LnogPyBmYWxzZSA6IHRydWU7XG5cblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHtcblxuXHRcdC8vIEZpbmQgdGhlIHBvaW50IG9uIHRoZSBBQUJCIGNsb3Nlc3QgdG8gdGhlIHNwaGVyZSBjZW50ZXIuXG5cdFx0dGhpcy5jbGFtcFBvaW50KCBzcGhlcmUuY2VudGVyLCBfdmVjdG9yJGIgKTtcblxuXHRcdC8vIElmIHRoYXQgcG9pbnQgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHRoZSBBQUJCIGFuZCBzcGhlcmUgaW50ZXJzZWN0LlxuXHRcdHJldHVybiBfdmVjdG9yJGIuZGlzdGFuY2VUb1NxdWFyZWQoIHNwaGVyZS5jZW50ZXIgKSA8PSAoIHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNQbGFuZSggcGxhbmUgKSB7XG5cblx0XHQvLyBXZSBjb21wdXRlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGRvdCBwcm9kdWN0IHZhbHVlcy4gSWYgdGhvc2UgdmFsdWVzXG5cdFx0Ly8gYXJlIG9uIHRoZSBzYW1lIHNpZGUgKGJhY2sgb3IgZnJvbnQpIG9mIHRoZSBwbGFuZSwgdGhlbiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24uXG5cblx0XHRsZXQgbWluLCBtYXg7XG5cblx0XHRpZiAoIHBsYW5lLm5vcm1hbC54ID4gMCApIHtcblxuXHRcdFx0bWluID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54O1xuXHRcdFx0bWF4ID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1heC54O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bWluID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1heC54O1xuXHRcdFx0bWF4ID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwbGFuZS5ub3JtYWwueSA+IDAgKSB7XG5cblx0XHRcdG1pbiArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7XG5cdFx0XHRtYXggKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1heC55O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5tYXgueTtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHBsYW5lLm5vcm1hbC56ID4gMCApIHtcblxuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5taW4uejtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWF4Lno7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRtaW4gKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1heC56O1xuXHRcdFx0bWF4ICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5taW4uejtcblxuXHRcdH1cblxuXHRcdHJldHVybiAoIG1pbiA8PSAtIHBsYW5lLmNvbnN0YW50ICYmIG1heCA+PSAtIHBsYW5lLmNvbnN0YW50ICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNUcmlhbmdsZSggdHJpYW5nbGUgKSB7XG5cblx0XHRpZiAoIHRoaXMuaXNFbXB0eSgpICkge1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9XG5cblx0XHQvLyBjb21wdXRlIGJveCBjZW50ZXIgYW5kIGV4dGVudHNcblx0XHR0aGlzLmdldENlbnRlciggX2NlbnRlciApO1xuXHRcdF9leHRlbnRzLnN1YlZlY3RvcnMoIHRoaXMubWF4LCBfY2VudGVyICk7XG5cblx0XHQvLyB0cmFuc2xhdGUgdHJpYW5nbGUgdG8gYWFiYiBvcmlnaW5cblx0XHRfdjAkMi5zdWJWZWN0b3JzKCB0cmlhbmdsZS5hLCBfY2VudGVyICk7XG5cdFx0X3YxJDcuc3ViVmVjdG9ycyggdHJpYW5nbGUuYiwgX2NlbnRlciApO1xuXHRcdF92MiQzLnN1YlZlY3RvcnMoIHRyaWFuZ2xlLmMsIF9jZW50ZXIgKTtcblxuXHRcdC8vIGNvbXB1dGUgZWRnZSB2ZWN0b3JzIGZvciB0cmlhbmdsZVxuXHRcdF9mMC5zdWJWZWN0b3JzKCBfdjEkNywgX3YwJDIgKTtcblx0XHRfZjEuc3ViVmVjdG9ycyggX3YyJDMsIF92MSQ3ICk7XG5cdFx0X2YyLnN1YlZlY3RvcnMoIF92MCQyLCBfdjIkMyApO1xuXG5cdFx0Ly8gdGVzdCBhZ2FpbnN0IGF4ZXMgdGhhdCBhcmUgZ2l2ZW4gYnkgY3Jvc3MgcHJvZHVjdCBjb21iaW5hdGlvbnMgb2YgdGhlIGVkZ2VzIG9mIHRoZSB0cmlhbmdsZSBhbmQgdGhlIGVkZ2VzIG9mIHRoZSBhYWJiXG5cdFx0Ly8gbWFrZSBhbiBheGlzIHRlc3Rpbmcgb2YgZWFjaCBvZiB0aGUgMyBzaWRlcyBvZiB0aGUgYWFiYiBhZ2FpbnN0IGVhY2ggb2YgdGhlIDMgc2lkZXMgb2YgdGhlIHRyaWFuZ2xlID0gOSBheGlzIG9mIHNlcGFyYXRpb25cblx0XHQvLyBheGlzX2lqID0gdV9pIHggZl9qICh1MCwgdTEsIHUyID0gZmFjZSBub3JtYWxzIG9mIGFhYmIgPSB4LHkseiBheGVzIHZlY3RvcnMgc2luY2UgYWFiYiBpcyBheGlzIGFsaWduZWQpXG5cdFx0bGV0IGF4ZXMgPSBbXG5cdFx0XHQwLCAtIF9mMC56LCBfZjAueSwgMCwgLSBfZjEueiwgX2YxLnksIDAsIC0gX2YyLnosIF9mMi55LFxuXHRcdFx0X2YwLnosIDAsIC0gX2YwLngsIF9mMS56LCAwLCAtIF9mMS54LCBfZjIueiwgMCwgLSBfZjIueCxcblx0XHRcdC0gX2YwLnksIF9mMC54LCAwLCAtIF9mMS55LCBfZjEueCwgMCwgLSBfZjIueSwgX2YyLngsIDBcblx0XHRdO1xuXHRcdGlmICggISBzYXRGb3JBeGVzKCBheGVzLCBfdjAkMiwgX3YxJDcsIF92MiQzLCBfZXh0ZW50cyApICkge1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9XG5cblx0XHQvLyB0ZXN0IDMgZmFjZSBub3JtYWxzIGZyb20gdGhlIGFhYmJcblx0XHRheGVzID0gWyAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxIF07XG5cdFx0aWYgKCAhIHNhdEZvckF4ZXMoIGF4ZXMsIF92MCQyLCBfdjEkNywgX3YyJDMsIF9leHRlbnRzICkgKSB7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdH1cblxuXHRcdC8vIGZpbmFsbHkgdGVzdGluZyB0aGUgZmFjZSBub3JtYWwgb2YgdGhlIHRyaWFuZ2xlXG5cdFx0Ly8gdXNlIGFscmVhZHkgZXhpc3RpbmcgdHJpYW5nbGUgZWRnZSB2ZWN0b3JzIGhlcmVcblx0XHRfdHJpYW5nbGVOb3JtYWwuY3Jvc3NWZWN0b3JzKCBfZjAsIF9mMSApO1xuXHRcdGF4ZXMgPSBbIF90cmlhbmdsZU5vcm1hbC54LCBfdHJpYW5nbGVOb3JtYWwueSwgX3RyaWFuZ2xlTm9ybWFsLnogXTtcblxuXHRcdHJldHVybiBzYXRGb3JBeGVzKCBheGVzLCBfdjAkMiwgX3YxJDcsIF92MiQzLCBfZXh0ZW50cyApO1xuXG5cdH1cblxuXHRjbGFtcFBvaW50KCBwb2ludCwgdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBwb2ludCApLmNsYW1wKCB0aGlzLm1pbiwgdGhpcy5tYXggKTtcblxuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIHtcblxuXHRcdGNvbnN0IGNsYW1wZWRQb2ludCA9IF92ZWN0b3IkYi5jb3B5KCBwb2ludCApLmNsYW1wKCB0aGlzLm1pbiwgdGhpcy5tYXggKTtcblxuXHRcdHJldHVybiBjbGFtcGVkUG9pbnQuc3ViKCBwb2ludCApLmxlbmd0aCgpO1xuXG5cdH1cblxuXHRnZXRCb3VuZGluZ1NwaGVyZSggdGFyZ2V0ICkge1xuXG5cdFx0dGhpcy5nZXRDZW50ZXIoIHRhcmdldC5jZW50ZXIgKTtcblxuXHRcdHRhcmdldC5yYWRpdXMgPSB0aGlzLmdldFNpemUoIF92ZWN0b3IkYiApLmxlbmd0aCgpICogMC41O1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0aW50ZXJzZWN0KCBib3ggKSB7XG5cblx0XHR0aGlzLm1pbi5tYXgoIGJveC5taW4gKTtcblx0XHR0aGlzLm1heC5taW4oIGJveC5tYXggKTtcblxuXHRcdC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAsIHRoZSByZXN1bHQgaXMgZnVsbHkgZW1wdHksIG5vdCBzbGlnaHRseSBlbXB0eSB3aXRoIG5vbi1pbmYvK2luZiB2YWx1ZXMgdGhhdCB3aWxsIGNhdXNlIHN1YnNlcXVlbmNlIGludGVyc2VjdHMgdG8gZXJyb25lb3VzbHkgcmV0dXJuIHZhbGlkIHZhbHVlcy5cblx0XHRpZiAoIHRoaXMuaXNFbXB0eSgpICkgdGhpcy5tYWtlRW1wdHkoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR1bmlvbiggYm94ICkge1xuXG5cdFx0dGhpcy5taW4ubWluKCBib3gubWluICk7XG5cdFx0dGhpcy5tYXgubWF4KCBib3gubWF4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtYXRyaXggKSB7XG5cblx0XHQvLyB0cmFuc2Zvcm0gb2YgZW1wdHkgYm94IGlzIGFuIGVtcHR5IGJveC5cblx0XHRpZiAoIHRoaXMuaXNFbXB0eSgpICkgcmV0dXJuIHRoaXM7XG5cblx0XHQvLyBOT1RFOiBJIGFtIHVzaW5nIGEgYmluYXJ5IHBhdHRlcm4gdG8gc3BlY2lmeSBhbGwgMl4zIGNvbWJpbmF0aW9ucyBiZWxvd1xuXHRcdF9wb2ludHNbIDAgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMDBcblx0XHRfcG9pbnRzWyAxIF0uc2V0KCB0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1heC56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMDAxXG5cdFx0X3BvaW50c1sgMiBdLnNldCggdGhpcy5taW4ueCwgdGhpcy5tYXgueSwgdGhpcy5taW4ueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDAxMFxuXHRcdF9wb2ludHNbIDMgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMTFcblx0XHRfcG9pbnRzWyA0IF0uc2V0KCB0aGlzLm1heC54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMTAwXG5cdFx0X3BvaW50c1sgNSBdLnNldCggdGhpcy5tYXgueCwgdGhpcy5taW4ueSwgdGhpcy5tYXgueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDEwMVxuXHRcdF9wb2ludHNbIDYgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMTBcblx0XHRfcG9pbnRzWyA3IF0uc2V0KCB0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1heC56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMTExXG5cblx0XHR0aGlzLnNldEZyb21Qb2ludHMoIF9wb2ludHMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2xhdGUoIG9mZnNldCApIHtcblxuXHRcdHRoaXMubWluLmFkZCggb2Zmc2V0ICk7XG5cdFx0dGhpcy5tYXguYWRkKCBvZmZzZXQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIGJveCApIHtcblxuXHRcdHJldHVybiBib3gubWluLmVxdWFscyggdGhpcy5taW4gKSAmJiBib3gubWF4LmVxdWFscyggdGhpcy5tYXggKTtcblxuXHR9XG5cbn1cblxuQm94My5wcm90b3R5cGUuaXNCb3gzID0gdHJ1ZTtcblxuY29uc3QgX3BvaW50cyA9IFtcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKClcbl07XG5cbmNvbnN0IF92ZWN0b3IkYiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2JveCQzID0gLypAX19QVVJFX18qLyBuZXcgQm94MygpO1xuXG4vLyB0cmlhbmdsZSBjZW50ZXJlZCB2ZXJ0aWNlc1xuXG5jb25zdCBfdjAkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MSQ3ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3YyJDMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbi8vIHRyaWFuZ2xlIGVkZ2UgdmVjdG9yc1xuXG5jb25zdCBfZjAgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZjEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZjIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9jZW50ZXIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZXh0ZW50cyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90cmlhbmdsZU5vcm1hbCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90ZXN0QXhpcyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuZnVuY3Rpb24gc2F0Rm9yQXhlcyggYXhlcywgdjAsIHYxLCB2MiwgZXh0ZW50cyApIHtcblxuXHRmb3IgKCBsZXQgaSA9IDAsIGogPSBheGVzLmxlbmd0aCAtIDM7IGkgPD0gajsgaSArPSAzICkge1xuXG5cdFx0X3Rlc3RBeGlzLmZyb21BcnJheSggYXhlcywgaSApO1xuXHRcdC8vIHByb2plY3QgdGhlIGFhYmIgb250byB0aGUgc2VwZXJhdGluZyBheGlzXG5cdFx0Y29uc3QgciA9IGV4dGVudHMueCAqIE1hdGguYWJzKCBfdGVzdEF4aXMueCApICsgZXh0ZW50cy55ICogTWF0aC5hYnMoIF90ZXN0QXhpcy55ICkgKyBleHRlbnRzLnogKiBNYXRoLmFicyggX3Rlc3RBeGlzLnogKTtcblx0XHQvLyBwcm9qZWN0IGFsbCAzIHZlcnRpY2VzIG9mIHRoZSB0cmlhbmdsZSBvbnRvIHRoZSBzZXBlcmF0aW5nIGF4aXNcblx0XHRjb25zdCBwMCA9IHYwLmRvdCggX3Rlc3RBeGlzICk7XG5cdFx0Y29uc3QgcDEgPSB2MS5kb3QoIF90ZXN0QXhpcyApO1xuXHRcdGNvbnN0IHAyID0gdjIuZG90KCBfdGVzdEF4aXMgKTtcblx0XHQvLyBhY3R1YWwgdGVzdCwgYmFzaWNhbGx5IHNlZSBpZiBlaXRoZXIgb2YgdGhlIG1vc3QgZXh0cmVtZSBvZiB0aGUgdHJpYW5nbGUgcG9pbnRzIGludGVyc2VjdHMgclxuXHRcdGlmICggTWF0aC5tYXgoIC0gTWF0aC5tYXgoIHAwLCBwMSwgcDIgKSwgTWF0aC5taW4oIHAwLCBwMSwgcDIgKSApID4gciApIHtcblxuXHRcdFx0Ly8gcG9pbnRzIG9mIHRoZSBwcm9qZWN0ZWQgdHJpYW5nbGUgYXJlIG91dHNpZGUgdGhlIHByb2plY3RlZCBoYWxmLWxlbmd0aCBvZiB0aGUgYWFiYlxuXHRcdFx0Ly8gdGhlIGF4aXMgaXMgc2VwZXJhdGluZyBhbmQgd2UgY2FuIGV4aXRcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG5cbn1cblxuY29uc3QgX2JveCQyID0gLypAX19QVVJFX18qLyBuZXcgQm94MygpO1xuY29uc3QgX3YxJDYgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdG9GYXJ0aGVzdFBvaW50ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3RvUG9pbnQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFNwaGVyZSB7XG5cblx0Y29uc3RydWN0b3IoIGNlbnRlciA9IG5ldyBWZWN0b3IzKCksIHJhZGl1cyA9IC0gMSApIHtcblxuXHRcdHRoaXMuY2VudGVyID0gY2VudGVyO1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXG5cdH1cblxuXHRzZXQoIGNlbnRlciwgcmFkaXVzICkge1xuXG5cdFx0dGhpcy5jZW50ZXIuY29weSggY2VudGVyICk7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVBvaW50cyggcG9pbnRzLCBvcHRpb25hbENlbnRlciApIHtcblxuXHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyO1xuXG5cdFx0aWYgKCBvcHRpb25hbENlbnRlciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjZW50ZXIuY29weSggb3B0aW9uYWxDZW50ZXIgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF9ib3gkMi5zZXRGcm9tUG9pbnRzKCBwb2ludHMgKS5nZXRDZW50ZXIoIGNlbnRlciApO1xuXG5cdFx0fVxuXG5cdFx0bGV0IG1heFJhZGl1c1NxID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdG1heFJhZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50c1sgaSBdICkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KCBtYXhSYWRpdXNTcSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHNwaGVyZSApIHtcblxuXHRcdHRoaXMuY2VudGVyLmNvcHkoIHNwaGVyZS5jZW50ZXIgKTtcblx0XHR0aGlzLnJhZGl1cyA9IHNwaGVyZS5yYWRpdXM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0aXNFbXB0eSgpIHtcblxuXHRcdHJldHVybiAoIHRoaXMucmFkaXVzIDwgMCApO1xuXG5cdH1cblxuXHRtYWtlRW1wdHkoKSB7XG5cblx0XHR0aGlzLmNlbnRlci5zZXQoIDAsIDAsIDAgKTtcblx0XHR0aGlzLnJhZGl1cyA9IC0gMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb250YWluc1BvaW50KCBwb2ludCApIHtcblxuXHRcdHJldHVybiAoIHBvaW50LmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmNlbnRlciApIDw9ICggdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyApICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7XG5cblx0XHRyZXR1cm4gKCBwb2ludC5kaXN0YW5jZVRvKCB0aGlzLmNlbnRlciApIC0gdGhpcy5yYWRpdXMgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkge1xuXG5cdFx0Y29uc3QgcmFkaXVzU3VtID0gdGhpcy5yYWRpdXMgKyBzcGhlcmUucmFkaXVzO1xuXG5cdFx0cmV0dXJuIHNwaGVyZS5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIHRoaXMuY2VudGVyICkgPD0gKCByYWRpdXNTdW0gKiByYWRpdXNTdW0gKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0cmV0dXJuIGJveC5pbnRlcnNlY3RzU3BoZXJlKCB0aGlzICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNQbGFuZSggcGxhbmUgKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5jZW50ZXIgKSApIDw9IHRoaXMucmFkaXVzO1xuXG5cdH1cblxuXHRjbGFtcFBvaW50KCBwb2ludCwgdGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgZGVsdGFMZW5ndGhTcSA9IHRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludCApO1xuXG5cdFx0dGFyZ2V0LmNvcHkoIHBvaW50ICk7XG5cblx0XHRpZiAoIGRlbHRhTGVuZ3RoU3EgPiAoIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXMgKSApIHtcblxuXHRcdFx0dGFyZ2V0LnN1YiggdGhpcy5jZW50ZXIgKS5ub3JtYWxpemUoKTtcblx0XHRcdHRhcmdldC5tdWx0aXBseVNjYWxhciggdGhpcy5yYWRpdXMgKS5hZGQoIHRoaXMuY2VudGVyICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXG5cdH1cblxuXHRnZXRCb3VuZGluZ0JveCggdGFyZ2V0ICkge1xuXG5cdFx0aWYgKCB0aGlzLmlzRW1wdHkoKSApIHtcblxuXHRcdFx0Ly8gRW1wdHkgc3BoZXJlIHByb2R1Y2VzIGVtcHR5IGJvdW5kaW5nIGJveFxuXHRcdFx0dGFyZ2V0Lm1ha2VFbXB0eSgpO1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblxuXHRcdH1cblxuXHRcdHRhcmdldC5zZXQoIHRoaXMuY2VudGVyLCB0aGlzLmNlbnRlciApO1xuXHRcdHRhcmdldC5leHBhbmRCeVNjYWxhciggdGhpcy5yYWRpdXMgKTtcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4ICkge1xuXG5cdFx0dGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblx0XHR0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzICogbWF0cml4LmdldE1heFNjYWxlT25BeGlzKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNsYXRlKCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLmNlbnRlci5hZGQoIG9mZnNldCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5UG9pbnQoIHBvaW50ICkge1xuXG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanVqL01hdGhHZW9MaWIvYmxvYi8yOTQwYjk5Yjk5Y2ZlNTc1ZGQ0NTEwM2VmMjBmNDAxOWRlZTE1YjU0L3NyYy9HZW9tZXRyeS9TcGhlcmUuY3BwI0w2NDktTDY3MVxuXG5cdFx0X3RvUG9pbnQuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMuY2VudGVyICk7XG5cblx0XHRjb25zdCBsZW5ndGhTcSA9IF90b1BvaW50Lmxlbmd0aFNxKCk7XG5cblx0XHRpZiAoIGxlbmd0aFNxID4gKCB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzICkgKSB7XG5cblx0XHRcdGNvbnN0IGxlbmd0aCA9IE1hdGguc3FydCggbGVuZ3RoU3EgKTtcblx0XHRcdGNvbnN0IG1pc3NpbmdSYWRpdXNIYWxmID0gKCBsZW5ndGggLSB0aGlzLnJhZGl1cyApICogMC41O1xuXG5cdFx0XHQvLyBOdWRnZSB0aGlzIHNwaGVyZSB0b3dhcmRzIHRoZSB0YXJnZXQgcG9pbnQuIEFkZCBoYWxmIHRoZSBtaXNzaW5nIGRpc3RhbmNlIHRvIHJhZGl1cyxcblx0XHRcdC8vIGFuZCB0aGUgb3RoZXIgaGFsZiB0byBwb3NpdGlvbi4gVGhpcyBnaXZlcyBhIHRpZ2h0ZXIgZW5jbG9zdXJlLCBpbnN0ZWFkIG9mIGlmXG5cdFx0XHQvLyB0aGUgd2hvbGUgbWlzc2luZyBkaXN0YW5jZSB3ZXJlIGp1c3QgYWRkZWQgdG8gcmFkaXVzLlxuXG5cdFx0XHR0aGlzLmNlbnRlci5hZGQoIF90b1BvaW50Lm11bHRpcGx5U2NhbGFyKCBtaXNzaW5nUmFkaXVzSGFsZiAvIGxlbmd0aCApICk7XG5cdFx0XHR0aGlzLnJhZGl1cyArPSBtaXNzaW5nUmFkaXVzSGFsZjtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR1bmlvbiggc3BoZXJlICkge1xuXG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanVqL01hdGhHZW9MaWIvYmxvYi8yOTQwYjk5Yjk5Y2ZlNTc1ZGQ0NTEwM2VmMjBmNDAxOWRlZTE1YjU0L3NyYy9HZW9tZXRyeS9TcGhlcmUuY3BwI0w3NTktTDc2OVxuXG5cdFx0Ly8gVG8gZW5jbG9zZSBhbm90aGVyIHNwaGVyZSBpbnRvIHRoaXMgc3BoZXJlLCB3ZSBvbmx5IG5lZWQgdG8gZW5jbG9zZSB0d28gcG9pbnRzOlxuXHRcdC8vIDEpIEVuY2xvc2UgdGhlIGZhcnRoZXN0IHBvaW50IG9uIHRoZSBvdGhlciBzcGhlcmUgaW50byB0aGlzIHNwaGVyZS5cblx0XHQvLyAyKSBFbmNsb3NlIHRoZSBvcHBvc2l0ZSBwb2ludCBvZiB0aGUgZmFydGhlc3QgcG9pbnQgaW50byB0aGlzIHNwaGVyZS5cblxuXHRcdCBpZiAoIHRoaXMuY2VudGVyLmVxdWFscyggc3BoZXJlLmNlbnRlciApID09PSB0cnVlICkge1xuXG5cdFx0XHQgX3RvRmFydGhlc3RQb2ludC5zZXQoIDAsIDAsIDEgKS5tdWx0aXBseVNjYWxhciggc3BoZXJlLnJhZGl1cyApO1xuXG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfdG9GYXJ0aGVzdFBvaW50LnN1YlZlY3RvcnMoIHNwaGVyZS5jZW50ZXIsIHRoaXMuY2VudGVyICkubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIHNwaGVyZS5yYWRpdXMgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuZXhwYW5kQnlQb2ludCggX3YxJDYuY29weSggc3BoZXJlLmNlbnRlciApLmFkZCggX3RvRmFydGhlc3RQb2ludCApICk7XG5cdFx0dGhpcy5leHBhbmRCeVBvaW50KCBfdjEkNi5jb3B5KCBzcGhlcmUuY2VudGVyICkuc3ViKCBfdG9GYXJ0aGVzdFBvaW50ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIHNwaGVyZSApIHtcblxuXHRcdHJldHVybiBzcGhlcmUuY2VudGVyLmVxdWFscyggdGhpcy5jZW50ZXIgKSAmJiAoIHNwaGVyZS5yYWRpdXMgPT09IHRoaXMucmFkaXVzICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJGEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfc2VnQ2VudGVyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3NlZ0RpciA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9kaWZmID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfZWRnZTEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZWRnZTIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbm9ybWFsJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFJheSB7XG5cblx0Y29uc3RydWN0b3IoIG9yaWdpbiA9IG5ldyBWZWN0b3IzKCksIGRpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKCAwLCAwLCAtIDEgKSApIHtcblxuXHRcdHRoaXMub3JpZ2luID0gb3JpZ2luO1xuXHRcdHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuXG5cdH1cblxuXHRzZXQoIG9yaWdpbiwgZGlyZWN0aW9uICkge1xuXG5cdFx0dGhpcy5vcmlnaW4uY29weSggb3JpZ2luICk7XG5cdFx0dGhpcy5kaXJlY3Rpb24uY29weSggZGlyZWN0aW9uICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggcmF5ICkge1xuXG5cdFx0dGhpcy5vcmlnaW4uY29weSggcmF5Lm9yaWdpbiApO1xuXHRcdHRoaXMuZGlyZWN0aW9uLmNvcHkoIHJheS5kaXJlY3Rpb24gKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhdCggdCwgdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLm9yaWdpbiApO1xuXG5cdH1cblxuXHRsb29rQXQoIHYgKSB7XG5cblx0XHR0aGlzLmRpcmVjdGlvbi5jb3B5KCB2ICkuc3ViKCB0aGlzLm9yaWdpbiApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJlY2FzdCggdCApIHtcblxuXHRcdHRoaXMub3JpZ2luLmNvcHkoIHRoaXMuYXQoIHQsIF92ZWN0b3IkYSApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdHRhcmdldC5zdWJWZWN0b3JzKCBwb2ludCwgdGhpcy5vcmlnaW4gKTtcblxuXHRcdGNvbnN0IGRpcmVjdGlvbkRpc3RhbmNlID0gdGFyZ2V0LmRvdCggdGhpcy5kaXJlY3Rpb24gKTtcblxuXHRcdGlmICggZGlyZWN0aW9uRGlzdGFuY2UgPCAwICkge1xuXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIHRoaXMub3JpZ2luICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlwbHlTY2FsYXIoIGRpcmVjdGlvbkRpc3RhbmNlICkuYWRkKCB0aGlzLm9yaWdpbiApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKSApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKSB7XG5cblx0XHRjb25zdCBkaXJlY3Rpb25EaXN0YW5jZSA9IF92ZWN0b3IkYS5zdWJWZWN0b3JzKCBwb2ludCwgdGhpcy5vcmlnaW4gKS5kb3QoIHRoaXMuZGlyZWN0aW9uICk7XG5cblx0XHQvLyBwb2ludCBiZWhpbmQgdGhlIHJheVxuXG5cdFx0aWYgKCBkaXJlY3Rpb25EaXN0YW5jZSA8IDAgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTtcblxuXHRcdH1cblxuXHRcdF92ZWN0b3IkYS5jb3B5KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCBkaXJlY3Rpb25EaXN0YW5jZSApLmFkZCggdGhpcy5vcmlnaW4gKTtcblxuXHRcdHJldHVybiBfdmVjdG9yJGEuZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50ICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlU3FUb1NlZ21lbnQoIHYwLCB2MSwgb3B0aW9uYWxQb2ludE9uUmF5LCBvcHRpb25hbFBvaW50T25TZWdtZW50ICkge1xuXG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcG1qb25pYWsvR2VvbWV0cmljVG9vbHMvYmxvYi9tYXN0ZXIvR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9HdGVEaXN0UmF5U2VnbWVudC5oXG5cdFx0Ly8gSXQgcmV0dXJucyB0aGUgbWluIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJheSBhbmQgdGhlIHNlZ21lbnRcblx0XHQvLyBkZWZpbmVkIGJ5IHYwIGFuZCB2MVxuXHRcdC8vIEl0IGNhbiBhbHNvIHNldCB0d28gb3B0aW9uYWwgdGFyZ2V0cyA6XG5cdFx0Ly8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgcmF5XG5cdFx0Ly8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgc2VnbWVudFxuXG5cdFx0X3NlZ0NlbnRlci5jb3B5KCB2MCApLmFkZCggdjEgKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cdFx0X3NlZ0Rpci5jb3B5KCB2MSApLnN1YiggdjAgKS5ub3JtYWxpemUoKTtcblx0XHRfZGlmZi5jb3B5KCB0aGlzLm9yaWdpbiApLnN1YiggX3NlZ0NlbnRlciApO1xuXG5cdFx0Y29uc3Qgc2VnRXh0ZW50ID0gdjAuZGlzdGFuY2VUbyggdjEgKSAqIDAuNTtcblx0XHRjb25zdCBhMDEgPSAtIHRoaXMuZGlyZWN0aW9uLmRvdCggX3NlZ0RpciApO1xuXHRcdGNvbnN0IGIwID0gX2RpZmYuZG90KCB0aGlzLmRpcmVjdGlvbiApO1xuXHRcdGNvbnN0IGIxID0gLSBfZGlmZi5kb3QoIF9zZWdEaXIgKTtcblx0XHRjb25zdCBjID0gX2RpZmYubGVuZ3RoU3EoKTtcblx0XHRjb25zdCBkZXQgPSBNYXRoLmFicyggMSAtIGEwMSAqIGEwMSApO1xuXHRcdGxldCBzMCwgczEsIHNxckRpc3QsIGV4dERldDtcblxuXHRcdGlmICggZGV0ID4gMCApIHtcblxuXHRcdFx0Ly8gVGhlIHJheSBhbmQgc2VnbWVudCBhcmUgbm90IHBhcmFsbGVsLlxuXG5cdFx0XHRzMCA9IGEwMSAqIGIxIC0gYjA7XG5cdFx0XHRzMSA9IGEwMSAqIGIwIC0gYjE7XG5cdFx0XHRleHREZXQgPSBzZWdFeHRlbnQgKiBkZXQ7XG5cblx0XHRcdGlmICggczAgPj0gMCApIHtcblxuXHRcdFx0XHRpZiAoIHMxID49IC0gZXh0RGV0ICkge1xuXG5cdFx0XHRcdFx0aWYgKCBzMSA8PSBleHREZXQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHJlZ2lvbiAwXG5cdFx0XHRcdFx0XHQvLyBNaW5pbXVtIGF0IGludGVyaW9yIHBvaW50cyBvZiByYXkgYW5kIHNlZ21lbnQuXG5cblx0XHRcdFx0XHRcdGNvbnN0IGludkRldCA9IDEgLyBkZXQ7XG5cdFx0XHRcdFx0XHRzMCAqPSBpbnZEZXQ7XG5cdFx0XHRcdFx0XHRzMSAqPSBpbnZEZXQ7XG5cdFx0XHRcdFx0XHRzcXJEaXN0ID0gczAgKiAoIHMwICsgYTAxICogczEgKyAyICogYjAgKSArIHMxICogKCBhMDEgKiBzMCArIHMxICsgMiAqIGIxICkgKyBjO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gcmVnaW9uIDFcblxuXHRcdFx0XHRcdFx0czEgPSBzZWdFeHRlbnQ7XG5cdFx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogczEgKyBiMCApICk7XG5cdFx0XHRcdFx0XHRzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyByZWdpb24gNVxuXG5cdFx0XHRcdFx0czEgPSAtIHNlZ0V4dGVudDtcblx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogczEgKyBiMCApICk7XG5cdFx0XHRcdFx0c3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBzMSA8PSAtIGV4dERldCApIHtcblxuXHRcdFx0XHRcdC8vIHJlZ2lvbiA0XG5cblx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KCAwLCAtICggLSBhMDEgKiBzZWdFeHRlbnQgKyBiMCApICk7XG5cdFx0XHRcdFx0czEgPSAoIHMwID4gMCApID8gLSBzZWdFeHRlbnQgOiBNYXRoLm1pbiggTWF0aC5tYXgoIC0gc2VnRXh0ZW50LCAtIGIxICksIHNlZ0V4dGVudCApO1xuXHRcdFx0XHRcdHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggczEgPD0gZXh0RGV0ICkge1xuXG5cdFx0XHRcdFx0Ly8gcmVnaW9uIDNcblxuXHRcdFx0XHRcdHMwID0gMDtcblx0XHRcdFx0XHRzMSA9IE1hdGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwgc2VnRXh0ZW50ICk7XG5cdFx0XHRcdFx0c3FyRGlzdCA9IHMxICogKCBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gcmVnaW9uIDJcblxuXHRcdFx0XHRcdHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEgKiBzZWdFeHRlbnQgKyBiMCApICk7XG5cdFx0XHRcdFx0czEgPSAoIHMwID4gMCApID8gc2VnRXh0ZW50IDogTWF0aC5taW4oIE1hdGgubWF4KCAtIHNlZ0V4dGVudCwgLSBiMSApLCBzZWdFeHRlbnQgKTtcblx0XHRcdFx0XHRzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gUmF5IGFuZCBzZWdtZW50IGFyZSBwYXJhbGxlbC5cblxuXHRcdFx0czEgPSAoIGEwMSA+IDAgKSA/IC0gc2VnRXh0ZW50IDogc2VnRXh0ZW50O1xuXHRcdFx0czAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsgYjAgKSApO1xuXHRcdFx0c3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdH1cblxuXHRcdGlmICggb3B0aW9uYWxQb2ludE9uUmF5ICkge1xuXG5cdFx0XHRvcHRpb25hbFBvaW50T25SYXkuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggczAgKS5hZGQoIHRoaXMub3JpZ2luICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbmFsUG9pbnRPblNlZ21lbnQgKSB7XG5cblx0XHRcdG9wdGlvbmFsUG9pbnRPblNlZ21lbnQuY29weSggX3NlZ0RpciApLm11bHRpcGx5U2NhbGFyKCBzMSApLmFkZCggX3NlZ0NlbnRlciApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNxckRpc3Q7XG5cblx0fVxuXG5cdGludGVyc2VjdFNwaGVyZSggc3BoZXJlLCB0YXJnZXQgKSB7XG5cblx0XHRfdmVjdG9yJGEuc3ViVmVjdG9ycyggc3BoZXJlLmNlbnRlciwgdGhpcy5vcmlnaW4gKTtcblx0XHRjb25zdCB0Y2EgPSBfdmVjdG9yJGEuZG90KCB0aGlzLmRpcmVjdGlvbiApO1xuXHRcdGNvbnN0IGQyID0gX3ZlY3RvciRhLmRvdCggX3ZlY3RvciRhICkgLSB0Y2EgKiB0Y2E7XG5cdFx0Y29uc3QgcmFkaXVzMiA9IHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzO1xuXG5cdFx0aWYgKCBkMiA+IHJhZGl1czIgKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IHRoYyA9IE1hdGguc3FydCggcmFkaXVzMiAtIGQyICk7XG5cblx0XHQvLyB0MCA9IGZpcnN0IGludGVyc2VjdCBwb2ludCAtIGVudHJhbmNlIG9uIGZyb250IG9mIHNwaGVyZVxuXHRcdGNvbnN0IHQwID0gdGNhIC0gdGhjO1xuXG5cdFx0Ly8gdDEgPSBzZWNvbmQgaW50ZXJzZWN0IHBvaW50IC0gZXhpdCBwb2ludCBvbiBiYWNrIG9mIHNwaGVyZVxuXHRcdGNvbnN0IHQxID0gdGNhICsgdGhjO1xuXG5cdFx0Ly8gdGVzdCB0byBzZWUgaWYgYm90aCB0MCBhbmQgdDEgYXJlIGJlaGluZCB0aGUgcmF5IC0gaWYgc28sIHJldHVybiBudWxsXG5cdFx0aWYgKCB0MCA8IDAgJiYgdDEgPCAwICkgcmV0dXJuIG51bGw7XG5cblx0XHQvLyB0ZXN0IHRvIHNlZSBpZiB0MCBpcyBiZWhpbmQgdGhlIHJheTpcblx0XHQvLyBpZiBpdCBpcywgdGhlIHJheSBpcyBpbnNpZGUgdGhlIHNwaGVyZSwgc28gcmV0dXJuIHRoZSBzZWNvbmQgZXhpdCBwb2ludCBzY2FsZWQgYnkgdDEsXG5cdFx0Ly8gaW4gb3JkZXIgdG8gYWx3YXlzIHJldHVybiBhbiBpbnRlcnNlY3QgcG9pbnQgdGhhdCBpcyBpbiBmcm9udCBvZiB0aGUgcmF5LlxuXHRcdGlmICggdDAgPCAwICkgcmV0dXJuIHRoaXMuYXQoIHQxLCB0YXJnZXQgKTtcblxuXHRcdC8vIGVsc2UgdDAgaXMgaW4gZnJvbnQgb2YgdGhlIHJheSwgc28gcmV0dXJuIHRoZSBmaXJzdCBjb2xsaXNpb24gcG9pbnQgc2NhbGVkIGJ5IHQwXG5cdFx0cmV0dXJuIHRoaXMuYXQoIHQwLCB0YXJnZXQgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoIHNwaGVyZS5jZW50ZXIgKSA8PSAoIHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9QbGFuZSggcGxhbmUgKSB7XG5cblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHBsYW5lLm5vcm1hbC5kb3QoIHRoaXMuZGlyZWN0aW9uICk7XG5cblx0XHRpZiAoIGRlbm9taW5hdG9yID09PSAwICkge1xuXG5cdFx0XHQvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luXG5cdFx0XHRpZiAoIHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5vcmlnaW4gKSA9PT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gMDtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBOdWxsIGlzIHByZWZlcmFibGUgdG8gdW5kZWZpbmVkIHNpbmNlIHVuZGVmaW5lZCBtZWFucy4uLi4gaXQgaXMgdW5kZWZpbmVkXG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IC0gKCB0aGlzLm9yaWdpbi5kb3QoIHBsYW5lLm5vcm1hbCApICsgcGxhbmUuY29uc3RhbnQgKSAvIGRlbm9taW5hdG9yO1xuXG5cdFx0Ly8gUmV0dXJuIGlmIHRoZSByYXkgbmV2ZXIgaW50ZXJzZWN0cyB0aGUgcGxhbmVcblxuXHRcdHJldHVybiB0ID49IDAgPyB0IDogbnVsbDtcblxuXHR9XG5cblx0aW50ZXJzZWN0UGxhbmUoIHBsYW5lLCB0YXJnZXQgKSB7XG5cblx0XHRjb25zdCB0ID0gdGhpcy5kaXN0YW5jZVRvUGxhbmUoIHBsYW5lICk7XG5cblx0XHRpZiAoIHQgPT09IG51bGwgKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuYXQoIHQsIHRhcmdldCApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzUGxhbmUoIHBsYW5lICkge1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIHJheSBsaWVzIG9uIHRoZSBwbGFuZSBmaXJzdFxuXG5cdFx0Y29uc3QgZGlzdFRvUG9pbnQgPSBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHRoaXMub3JpZ2luICk7XG5cblx0XHRpZiAoIGRpc3RUb1BvaW50ID09PSAwICkge1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gcGxhbmUubm9ybWFsLmRvdCggdGhpcy5kaXJlY3Rpb24gKTtcblxuXHRcdGlmICggZGVub21pbmF0b3IgKiBkaXN0VG9Qb2ludCA8IDAgKSB7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Ly8gcmF5IG9yaWdpbiBpcyBiZWhpbmQgdGhlIHBsYW5lIChhbmQgaXMgcG9pbnRpbmcgYmVoaW5kIGl0KVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RCb3goIGJveCwgdGFyZ2V0ICkge1xuXG5cdFx0bGV0IHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xuXG5cdFx0Y29uc3QgaW52ZGlyeCA9IDEgLyB0aGlzLmRpcmVjdGlvbi54LFxuXHRcdFx0aW52ZGlyeSA9IDEgLyB0aGlzLmRpcmVjdGlvbi55LFxuXHRcdFx0aW52ZGlyeiA9IDEgLyB0aGlzLmRpcmVjdGlvbi56O1xuXG5cdFx0Y29uc3Qgb3JpZ2luID0gdGhpcy5vcmlnaW47XG5cblx0XHRpZiAoIGludmRpcnggPj0gMCApIHtcblxuXHRcdFx0dG1pbiA9ICggYm94Lm1pbi54IC0gb3JpZ2luLnggKSAqIGludmRpcng7XG5cdFx0XHR0bWF4ID0gKCBib3gubWF4LnggLSBvcmlnaW4ueCApICogaW52ZGlyeDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRtaW4gPSAoIGJveC5tYXgueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4O1xuXHRcdFx0dG1heCA9ICggYm94Lm1pbi54IC0gb3JpZ2luLnggKSAqIGludmRpcng7XG5cblx0XHR9XG5cblx0XHRpZiAoIGludmRpcnkgPj0gMCApIHtcblxuXHRcdFx0dHltaW4gPSAoIGJveC5taW4ueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5O1xuXHRcdFx0dHltYXggPSAoIGJveC5tYXgueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dHltaW4gPSAoIGJveC5tYXgueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5O1xuXHRcdFx0dHltYXggPSAoIGJveC5taW4ueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCAoIHRtaW4gPiB0eW1heCApIHx8ICggdHltaW4gPiB0bWF4ICkgKSByZXR1cm4gbnVsbDtcblxuXHRcdC8vIFRoZXNlIGxpbmVzIGFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRtaW4gb3IgdG1heCBpcyBOYU5cblx0XHQvLyAocmVzdWx0IG9mIDAgKiBJbmZpbml0eSkuIHggIT09IHggcmV0dXJucyB0cnVlIGlmIHggaXMgTmFOXG5cblx0XHRpZiAoIHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluICkgdG1pbiA9IHR5bWluO1xuXG5cdFx0aWYgKCB0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCApIHRtYXggPSB0eW1heDtcblxuXHRcdGlmICggaW52ZGlyeiA+PSAwICkge1xuXG5cdFx0XHR0em1pbiA9ICggYm94Lm1pbi56IC0gb3JpZ2luLnogKSAqIGludmRpcno7XG5cdFx0XHR0em1heCA9ICggYm94Lm1heC56IC0gb3JpZ2luLnogKSAqIGludmRpcno7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0em1pbiA9ICggYm94Lm1heC56IC0gb3JpZ2luLnogKSAqIGludmRpcno7XG5cdFx0XHR0em1heCA9ICggYm94Lm1pbi56IC0gb3JpZ2luLnogKSAqIGludmRpcno7XG5cblx0XHR9XG5cblx0XHRpZiAoICggdG1pbiA+IHR6bWF4ICkgfHwgKCB0em1pbiA+IHRtYXggKSApIHJldHVybiBudWxsO1xuXG5cdFx0aWYgKCB0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbiApIHRtaW4gPSB0em1pbjtcblxuXHRcdGlmICggdHptYXggPCB0bWF4IHx8IHRtYXggIT09IHRtYXggKSB0bWF4ID0gdHptYXg7XG5cblx0XHQvL3JldHVybiBwb2ludCBjbG9zZXN0IHRvIHRoZSByYXkgKHBvc2l0aXZlIHNpZGUpXG5cblx0XHRpZiAoIHRtYXggPCAwICkgcmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5hdCggdG1pbiA+PSAwID8gdG1pbiA6IHRtYXgsIHRhcmdldCApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KCBib3ggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3goIGJveCwgX3ZlY3RvciRhICkgIT09IG51bGw7XG5cblx0fVxuXG5cdGludGVyc2VjdFRyaWFuZ2xlKCBhLCBiLCBjLCBiYWNrZmFjZUN1bGxpbmcsIHRhcmdldCApIHtcblxuXHRcdC8vIENvbXB1dGUgdGhlIG9mZnNldCBvcmlnaW4sIGVkZ2VzLCBhbmQgbm9ybWFsLlxuXG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcG1qb25pYWsvR2VvbWV0cmljVG9vbHMvYmxvYi9tYXN0ZXIvR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9HdGVJbnRyUmF5M1RyaWFuZ2xlMy5oXG5cblx0XHRfZWRnZTEuc3ViVmVjdG9ycyggYiwgYSApO1xuXHRcdF9lZGdlMi5zdWJWZWN0b3JzKCBjLCBhICk7XG5cdFx0X25vcm1hbCQxLmNyb3NzVmVjdG9ycyggX2VkZ2UxLCBfZWRnZTIgKTtcblxuXHRcdC8vIFNvbHZlIFEgKyB0KkQgPSBiMSpFMSArIGIyKkUyIChRID0ga0RpZmYsIEQgPSByYXkgZGlyZWN0aW9uLFxuXHRcdC8vIEUxID0ga0VkZ2UxLCBFMiA9IGtFZGdlMiwgTiA9IENyb3NzKEUxLEUyKSkgYnlcblx0XHQvLyAgIHxEb3QoRCxOKXwqYjEgPSBzaWduKERvdChELE4pKSpEb3QoRCxDcm9zcyhRLEUyKSlcblx0XHQvLyAgIHxEb3QoRCxOKXwqYjIgPSBzaWduKERvdChELE4pKSpEb3QoRCxDcm9zcyhFMSxRKSlcblx0XHQvLyAgIHxEb3QoRCxOKXwqdCA9IC1zaWduKERvdChELE4pKSpEb3QoUSxOKVxuXHRcdGxldCBEZE4gPSB0aGlzLmRpcmVjdGlvbi5kb3QoIF9ub3JtYWwkMSApO1xuXHRcdGxldCBzaWduO1xuXG5cdFx0aWYgKCBEZE4gPiAwICkge1xuXG5cdFx0XHRpZiAoIGJhY2tmYWNlQ3VsbGluZyApIHJldHVybiBudWxsO1xuXHRcdFx0c2lnbiA9IDE7XG5cblx0XHR9IGVsc2UgaWYgKCBEZE4gPCAwICkge1xuXG5cdFx0XHRzaWduID0gLSAxO1xuXHRcdFx0RGROID0gLSBEZE47XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdF9kaWZmLnN1YlZlY3RvcnMoIHRoaXMub3JpZ2luLCBhICk7XG5cdFx0Y29uc3QgRGRReEUyID0gc2lnbiAqIHRoaXMuZGlyZWN0aW9uLmRvdCggX2VkZ2UyLmNyb3NzVmVjdG9ycyggX2RpZmYsIF9lZGdlMiApICk7XG5cblx0XHQvLyBiMSA8IDAsIG5vIGludGVyc2VjdGlvblxuXHRcdGlmICggRGRReEUyIDwgMCApIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHRjb25zdCBEZEUxeFEgPSBzaWduICogdGhpcy5kaXJlY3Rpb24uZG90KCBfZWRnZTEuY3Jvc3MoIF9kaWZmICkgKTtcblxuXHRcdC8vIGIyIDwgMCwgbm8gaW50ZXJzZWN0aW9uXG5cdFx0aWYgKCBEZEUxeFEgPCAwICkge1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdC8vIGIxK2IyID4gMSwgbm8gaW50ZXJzZWN0aW9uXG5cdFx0aWYgKCBEZFF4RTIgKyBEZEUxeFEgPiBEZE4gKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Ly8gTGluZSBpbnRlcnNlY3RzIHRyaWFuZ2xlLCBjaGVjayBpZiByYXkgZG9lcy5cblx0XHRjb25zdCBRZE4gPSAtIHNpZ24gKiBfZGlmZi5kb3QoIF9ub3JtYWwkMSApO1xuXG5cdFx0Ly8gdCA8IDAsIG5vIGludGVyc2VjdGlvblxuXHRcdGlmICggUWROIDwgMCApIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHQvLyBSYXkgaW50ZXJzZWN0cyB0cmlhbmdsZS5cblx0XHRyZXR1cm4gdGhpcy5hdCggUWROIC8gRGROLCB0YXJnZXQgKTtcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtYXRyaXg0ICkge1xuXG5cdFx0dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KCBtYXRyaXg0ICk7XG5cdFx0dGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXg0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCByYXkgKSB7XG5cblx0XHRyZXR1cm4gcmF5Lm9yaWdpbi5lcXVhbHMoIHRoaXMub3JpZ2luICkgJiYgcmF5LmRpcmVjdGlvbi5lcXVhbHMoIHRoaXMuZGlyZWN0aW9uICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBNYXRyaXg0IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuZWxlbWVudHMgPSBbXG5cblx0XHRcdDEsIDAsIDAsIDAsXG5cdFx0XHQwLCAxLCAwLCAwLFxuXHRcdFx0MCwgMCwgMSwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdF07XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldCggbjExLCBuMTIsIG4xMywgbjE0LCBuMjEsIG4yMiwgbjIzLCBuMjQsIG4zMSwgbjMyLCBuMzMsIG4zNCwgbjQxLCBuNDIsIG40MywgbjQ0ICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSA9IG4xMTsgdGVbIDQgXSA9IG4xMjsgdGVbIDggXSA9IG4xMzsgdGVbIDEyIF0gPSBuMTQ7XG5cdFx0dGVbIDEgXSA9IG4yMTsgdGVbIDUgXSA9IG4yMjsgdGVbIDkgXSA9IG4yMzsgdGVbIDEzIF0gPSBuMjQ7XG5cdFx0dGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBdID0gbjM0O1xuXHRcdHRlWyAzIF0gPSBuNDE7IHRlWyA3IF0gPSBuNDI7IHRlWyAxMSBdID0gbjQzOyB0ZVsgMTUgXSA9IG40NDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpZGVudGl0eSgpIHtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCAwLCAwLCAwLFxuXHRcdFx0MCwgMSwgMCwgMCxcblx0XHRcdDAsIDAsIDEsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7XG5cblx0fVxuXG5cdGNvcHkoIG0gKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSA9IG1lWyAwIF07IHRlWyAxIF0gPSBtZVsgMSBdOyB0ZVsgMiBdID0gbWVbIDIgXTsgdGVbIDMgXSA9IG1lWyAzIF07XG5cdFx0dGVbIDQgXSA9IG1lWyA0IF07IHRlWyA1IF0gPSBtZVsgNSBdOyB0ZVsgNiBdID0gbWVbIDYgXTsgdGVbIDcgXSA9IG1lWyA3IF07XG5cdFx0dGVbIDggXSA9IG1lWyA4IF07IHRlWyA5IF0gPSBtZVsgOSBdOyB0ZVsgMTAgXSA9IG1lWyAxMCBdOyB0ZVsgMTEgXSA9IG1lWyAxMSBdO1xuXHRcdHRlWyAxMiBdID0gbWVbIDEyIF07IHRlWyAxMyBdID0gbWVbIDEzIF07IHRlWyAxNCBdID0gbWVbIDE0IF07IHRlWyAxNSBdID0gbWVbIDE1IF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weVBvc2l0aW9uKCBtICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzLCBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0ZVsgMTIgXSA9IG1lWyAxMiBdO1xuXHRcdHRlWyAxMyBdID0gbWVbIDEzIF07XG5cdFx0dGVbIDE0IF0gPSBtZVsgMTQgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tTWF0cml4MyggbSApIHtcblxuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHRtZVsgMCBdLCBtZVsgMyBdLCBtZVsgNiBdLCAwLFxuXHRcdFx0bWVbIDEgXSwgbWVbIDQgXSwgbWVbIDcgXSwgMCxcblx0XHRcdG1lWyAyIF0sIG1lWyA1IF0sIG1lWyA4IF0sIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4dHJhY3RCYXNpcyggeEF4aXMsIHlBeGlzLCB6QXhpcyApIHtcblxuXHRcdHhBeGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIHRoaXMsIDAgKTtcblx0XHR5QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAxICk7XG5cdFx0ekF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbiggdGhpcywgMiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VCYXNpcyggeEF4aXMsIHlBeGlzLCB6QXhpcyApIHtcblxuXHRcdHRoaXMuc2V0KFxuXHRcdFx0eEF4aXMueCwgeUF4aXMueCwgekF4aXMueCwgMCxcblx0XHRcdHhBeGlzLnksIHlBeGlzLnksIHpBeGlzLnksIDAsXG5cdFx0XHR4QXhpcy56LCB5QXhpcy56LCB6QXhpcy56LCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXh0cmFjdFJvdGF0aW9uKCBtICkge1xuXG5cdFx0Ly8gdGhpcyBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCByZWZsZWN0aW9uIG1hdHJpY2VzXG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3Qgc2NhbGVYID0gMSAvIF92MSQ1LnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDAgKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzY2FsZVkgPSAxIC8gX3YxJDUuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMSApLmxlbmd0aCgpO1xuXHRcdGNvbnN0IHNjYWxlWiA9IDEgLyBfdjEkNS5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAyICkubGVuZ3RoKCk7XG5cblx0XHR0ZVsgMCBdID0gbWVbIDAgXSAqIHNjYWxlWDtcblx0XHR0ZVsgMSBdID0gbWVbIDEgXSAqIHNjYWxlWDtcblx0XHR0ZVsgMiBdID0gbWVbIDIgXSAqIHNjYWxlWDtcblx0XHR0ZVsgMyBdID0gMDtcblxuXHRcdHRlWyA0IF0gPSBtZVsgNCBdICogc2NhbGVZO1xuXHRcdHRlWyA1IF0gPSBtZVsgNSBdICogc2NhbGVZO1xuXHRcdHRlWyA2IF0gPSBtZVsgNiBdICogc2NhbGVZO1xuXHRcdHRlWyA3IF0gPSAwO1xuXG5cdFx0dGVbIDggXSA9IG1lWyA4IF0gKiBzY2FsZVo7XG5cdFx0dGVbIDkgXSA9IG1lWyA5IF0gKiBzY2FsZVo7XG5cdFx0dGVbIDEwIF0gPSBtZVsgMTAgXSAqIHNjYWxlWjtcblx0XHR0ZVsgMTEgXSA9IDA7XG5cblx0XHR0ZVsgMTIgXSA9IDA7XG5cdFx0dGVbIDEzIF0gPSAwO1xuXHRcdHRlWyAxNCBdID0gMDtcblx0XHR0ZVsgMTUgXSA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZVJvdGF0aW9uRnJvbUV1bGVyKCBldWxlciApIHtcblxuXHRcdGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3QgeCA9IGV1bGVyLngsIHkgPSBldWxlci55LCB6ID0gZXVsZXIuejtcblx0XHRjb25zdCBhID0gTWF0aC5jb3MoIHggKSwgYiA9IE1hdGguc2luKCB4ICk7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKCB5ICksIGQgPSBNYXRoLnNpbiggeSApO1xuXHRcdGNvbnN0IGUgPSBNYXRoLmNvcyggeiApLCBmID0gTWF0aC5zaW4oIHogKTtcblxuXHRcdGlmICggZXVsZXIub3JkZXIgPT09ICdYWVonICkge1xuXG5cdFx0XHRjb25zdCBhZSA9IGEgKiBlLCBhZiA9IGEgKiBmLCBiZSA9IGIgKiBlLCBiZiA9IGIgKiBmO1xuXG5cdFx0XHR0ZVsgMCBdID0gYyAqIGU7XG5cdFx0XHR0ZVsgNCBdID0gLSBjICogZjtcblx0XHRcdHRlWyA4IF0gPSBkO1xuXG5cdFx0XHR0ZVsgMSBdID0gYWYgKyBiZSAqIGQ7XG5cdFx0XHR0ZVsgNSBdID0gYWUgLSBiZiAqIGQ7XG5cdFx0XHR0ZVsgOSBdID0gLSBiICogYztcblxuXHRcdFx0dGVbIDIgXSA9IGJmIC0gYWUgKiBkO1xuXHRcdFx0dGVbIDYgXSA9IGJlICsgYWYgKiBkO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVhaJyApIHtcblxuXHRcdFx0Y29uc3QgY2UgPSBjICogZSwgY2YgPSBjICogZiwgZGUgPSBkICogZSwgZGYgPSBkICogZjtcblxuXHRcdFx0dGVbIDAgXSA9IGNlICsgZGYgKiBiO1xuXHRcdFx0dGVbIDQgXSA9IGRlICogYiAtIGNmO1xuXHRcdFx0dGVbIDggXSA9IGEgKiBkO1xuXG5cdFx0XHR0ZVsgMSBdID0gYSAqIGY7XG5cdFx0XHR0ZVsgNSBdID0gYSAqIGU7XG5cdFx0XHR0ZVsgOSBdID0gLSBiO1xuXG5cdFx0XHR0ZVsgMiBdID0gY2YgKiBiIC0gZGU7XG5cdFx0XHR0ZVsgNiBdID0gZGYgKyBjZSAqIGI7XG5cdFx0XHR0ZVsgMTAgXSA9IGEgKiBjO1xuXG5cdFx0fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdaWFknICkge1xuXG5cdFx0XHRjb25zdCBjZSA9IGMgKiBlLCBjZiA9IGMgKiBmLCBkZSA9IGQgKiBlLCBkZiA9IGQgKiBmO1xuXG5cdFx0XHR0ZVsgMCBdID0gY2UgLSBkZiAqIGI7XG5cdFx0XHR0ZVsgNCBdID0gLSBhICogZjtcblx0XHRcdHRlWyA4IF0gPSBkZSArIGNmICogYjtcblxuXHRcdFx0dGVbIDEgXSA9IGNmICsgZGUgKiBiO1xuXHRcdFx0dGVbIDUgXSA9IGEgKiBlO1xuXHRcdFx0dGVbIDkgXSA9IGRmIC0gY2UgKiBiO1xuXG5cdFx0XHR0ZVsgMiBdID0gLSBhICogZDtcblx0XHRcdHRlWyA2IF0gPSBiO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWllYJyApIHtcblxuXHRcdFx0Y29uc3QgYWUgPSBhICogZSwgYWYgPSBhICogZiwgYmUgPSBiICogZSwgYmYgPSBiICogZjtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IGJlICogZCAtIGFmO1xuXHRcdFx0dGVbIDggXSA9IGFlICogZCArIGJmO1xuXG5cdFx0XHR0ZVsgMSBdID0gYyAqIGY7XG5cdFx0XHR0ZVsgNSBdID0gYmYgKiBkICsgYWU7XG5cdFx0XHR0ZVsgOSBdID0gYWYgKiBkIC0gYmU7XG5cblx0XHRcdHRlWyAyIF0gPSAtIGQ7XG5cdFx0XHR0ZVsgNiBdID0gYiAqIGM7XG5cdFx0XHR0ZVsgMTAgXSA9IGEgKiBjO1xuXG5cdFx0fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdZWlgnICkge1xuXG5cdFx0XHRjb25zdCBhYyA9IGEgKiBjLCBhZCA9IGEgKiBkLCBiYyA9IGIgKiBjLCBiZCA9IGIgKiBkO1xuXG5cdFx0XHR0ZVsgMCBdID0gYyAqIGU7XG5cdFx0XHR0ZVsgNCBdID0gYmQgLSBhYyAqIGY7XG5cdFx0XHR0ZVsgOCBdID0gYmMgKiBmICsgYWQ7XG5cblx0XHRcdHRlWyAxIF0gPSBmO1xuXHRcdFx0dGVbIDUgXSA9IGEgKiBlO1xuXHRcdFx0dGVbIDkgXSA9IC0gYiAqIGU7XG5cblx0XHRcdHRlWyAyIF0gPSAtIGQgKiBlO1xuXHRcdFx0dGVbIDYgXSA9IGFkICogZiArIGJjO1xuXHRcdFx0dGVbIDEwIF0gPSBhYyAtIGJkICogZjtcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWFpZJyApIHtcblxuXHRcdFx0Y29uc3QgYWMgPSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBiICogZDtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IC0gZjtcblx0XHRcdHRlWyA4IF0gPSBkICogZTtcblxuXHRcdFx0dGVbIDEgXSA9IGFjICogZiArIGJkO1xuXHRcdFx0dGVbIDUgXSA9IGEgKiBlO1xuXHRcdFx0dGVbIDkgXSA9IGFkICogZiAtIGJjO1xuXG5cdFx0XHR0ZVsgMiBdID0gYmMgKiBmIC0gYWQ7XG5cdFx0XHR0ZVsgNiBdID0gYiAqIGU7XG5cdFx0XHR0ZVsgMTAgXSA9IGJkICogZiArIGFjO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYm90dG9tIHJvd1xuXHRcdHRlWyAzIF0gPSAwO1xuXHRcdHRlWyA3IF0gPSAwO1xuXHRcdHRlWyAxMSBdID0gMDtcblxuXHRcdC8vIGxhc3QgY29sdW1uXG5cdFx0dGVbIDEyIF0gPSAwO1xuXHRcdHRlWyAxMyBdID0gMDtcblx0XHR0ZVsgMTQgXSA9IDA7XG5cdFx0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCBxICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuY29tcG9zZSggX3plcm8sIHEsIF9vbmUgKTtcblxuXHR9XG5cblx0bG9va0F0KCBleWUsIHRhcmdldCwgdXAgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRfei5zdWJWZWN0b3JzKCBleWUsIHRhcmdldCApO1xuXG5cdFx0aWYgKCBfei5sZW5ndGhTcSgpID09PSAwICkge1xuXG5cdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cblxuXHRcdFx0X3oueiA9IDE7XG5cblx0XHR9XG5cblx0XHRfei5ub3JtYWxpemUoKTtcblx0XHRfeC5jcm9zc1ZlY3RvcnMoIHVwLCBfeiApO1xuXG5cdFx0aWYgKCBfeC5sZW5ndGhTcSgpID09PSAwICkge1xuXG5cdFx0XHQvLyB1cCBhbmQgeiBhcmUgcGFyYWxsZWxcblxuXHRcdFx0aWYgKCBNYXRoLmFicyggdXAueiApID09PSAxICkge1xuXG5cdFx0XHRcdF96LnggKz0gMC4wMDAxO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF96LnogKz0gMC4wMDAxO1xuXG5cdFx0XHR9XG5cblx0XHRcdF96Lm5vcm1hbGl6ZSgpO1xuXHRcdFx0X3guY3Jvc3NWZWN0b3JzKCB1cCwgX3ogKTtcblxuXHRcdH1cblxuXHRcdF94Lm5vcm1hbGl6ZSgpO1xuXHRcdF95LmNyb3NzVmVjdG9ycyggX3osIF94ICk7XG5cblx0XHR0ZVsgMCBdID0gX3gueDsgdGVbIDQgXSA9IF95Lng7IHRlWyA4IF0gPSBfei54O1xuXHRcdHRlWyAxIF0gPSBfeC55OyB0ZVsgNSBdID0gX3kueTsgdGVbIDkgXSA9IF96Lnk7XG5cdFx0dGVbIDIgXSA9IF94Lno7IHRlWyA2IF0gPSBfeS56OyB0ZVsgMTAgXSA9IF96Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHkoIG0sIG4gKSB7XG5cblx0XHRpZiAoIG4gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwgbiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggdGhpcywgbSApO1xuXG5cdH1cblxuXHRwcmVtdWx0aXBseSggbSApIHtcblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIG0sIHRoaXMgKTtcblxuXHR9XG5cblx0bXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIHtcblxuXHRcdGNvbnN0IGFlID0gYS5lbGVtZW50cztcblx0XHRjb25zdCBiZSA9IGIuZWxlbWVudHM7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3QgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDQgXSwgYTEzID0gYWVbIDggXSwgYTE0ID0gYWVbIDEyIF07XG5cdFx0Y29uc3QgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDUgXSwgYTIzID0gYWVbIDkgXSwgYTI0ID0gYWVbIDEzIF07XG5cdFx0Y29uc3QgYTMxID0gYWVbIDIgXSwgYTMyID0gYWVbIDYgXSwgYTMzID0gYWVbIDEwIF0sIGEzNCA9IGFlWyAxNCBdO1xuXHRcdGNvbnN0IGE0MSA9IGFlWyAzIF0sIGE0MiA9IGFlWyA3IF0sIGE0MyA9IGFlWyAxMSBdLCBhNDQgPSBhZVsgMTUgXTtcblxuXHRcdGNvbnN0IGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyA0IF0sIGIxMyA9IGJlWyA4IF0sIGIxNCA9IGJlWyAxMiBdO1xuXHRcdGNvbnN0IGIyMSA9IGJlWyAxIF0sIGIyMiA9IGJlWyA1IF0sIGIyMyA9IGJlWyA5IF0sIGIyNCA9IGJlWyAxMyBdO1xuXHRcdGNvbnN0IGIzMSA9IGJlWyAyIF0sIGIzMiA9IGJlWyA2IF0sIGIzMyA9IGJlWyAxMCBdLCBiMzQgPSBiZVsgMTQgXTtcblx0XHRjb25zdCBiNDEgPSBiZVsgMyBdLCBiNDIgPSBiZVsgNyBdLCBiNDMgPSBiZVsgMTEgXSwgYjQ0ID0gYmVbIDE1IF07XG5cblx0XHR0ZVsgMCBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxICsgYTE0ICogYjQxO1xuXHRcdHRlWyA0IF0gPSBhMTEgKiBiMTIgKyBhMTIgKiBiMjIgKyBhMTMgKiBiMzIgKyBhMTQgKiBiNDI7XG5cdFx0dGVbIDggXSA9IGExMSAqIGIxMyArIGExMiAqIGIyMyArIGExMyAqIGIzMyArIGExNCAqIGI0Mztcblx0XHR0ZVsgMTIgXSA9IGExMSAqIGIxNCArIGExMiAqIGIyNCArIGExMyAqIGIzNCArIGExNCAqIGI0NDtcblxuXHRcdHRlWyAxIF0gPSBhMjEgKiBiMTEgKyBhMjIgKiBiMjEgKyBhMjMgKiBiMzEgKyBhMjQgKiBiNDE7XG5cdFx0dGVbIDUgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMiArIGEyNCAqIGI0Mjtcblx0XHR0ZVsgOSBdID0gYTIxICogYjEzICsgYTIyICogYjIzICsgYTIzICogYjMzICsgYTI0ICogYjQzO1xuXHRcdHRlWyAxMyBdID0gYTIxICogYjE0ICsgYTIyICogYjI0ICsgYTIzICogYjM0ICsgYTI0ICogYjQ0O1xuXG5cdFx0dGVbIDIgXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEzMyAqIGIzMSArIGEzNCAqIGI0MTtcblx0XHR0ZVsgNiBdID0gYTMxICogYjEyICsgYTMyICogYjIyICsgYTMzICogYjMyICsgYTM0ICogYjQyO1xuXHRcdHRlWyAxMCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICogYjMzICsgYTM0ICogYjQzO1xuXHRcdHRlWyAxNCBdID0gYTMxICogYjE0ICsgYTMyICogYjI0ICsgYTMzICogYjM0ICsgYTM0ICogYjQ0O1xuXG5cdFx0dGVbIDMgXSA9IGE0MSAqIGIxMSArIGE0MiAqIGIyMSArIGE0MyAqIGIzMSArIGE0NCAqIGI0MTtcblx0XHR0ZVsgNyBdID0gYTQxICogYjEyICsgYTQyICogYjIyICsgYTQzICogYjMyICsgYTQ0ICogYjQyO1xuXHRcdHRlWyAxMSBdID0gYTQxICogYjEzICsgYTQyICogYjIzICsgYTQzICogYjMzICsgYTQ0ICogYjQzO1xuXHRcdHRlWyAxNSBdID0gYTQxICogYjE0ICsgYTQyICogYjI0ICsgYTQzICogYjM0ICsgYTQ0ICogYjQ0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKCBzICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSAqPSBzOyB0ZVsgNCBdICo9IHM7IHRlWyA4IF0gKj0gczsgdGVbIDEyIF0gKj0gcztcblx0XHR0ZVsgMSBdICo9IHM7IHRlWyA1IF0gKj0gczsgdGVbIDkgXSAqPSBzOyB0ZVsgMTMgXSAqPSBzO1xuXHRcdHRlWyAyIF0gKj0gczsgdGVbIDYgXSAqPSBzOyB0ZVsgMTAgXSAqPSBzOyB0ZVsgMTQgXSAqPSBzO1xuXHRcdHRlWyAzIF0gKj0gczsgdGVbIDcgXSAqPSBzOyB0ZVsgMTEgXSAqPSBzOyB0ZVsgMTUgXSAqPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRldGVybWluYW50KCkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3QgbjExID0gdGVbIDAgXSwgbjEyID0gdGVbIDQgXSwgbjEzID0gdGVbIDggXSwgbjE0ID0gdGVbIDEyIF07XG5cdFx0Y29uc3QgbjIxID0gdGVbIDEgXSwgbjIyID0gdGVbIDUgXSwgbjIzID0gdGVbIDkgXSwgbjI0ID0gdGVbIDEzIF07XG5cdFx0Y29uc3QgbjMxID0gdGVbIDIgXSwgbjMyID0gdGVbIDYgXSwgbjMzID0gdGVbIDEwIF0sIG4zNCA9IHRlWyAxNCBdO1xuXHRcdGNvbnN0IG40MSA9IHRlWyAzIF0sIG40MiA9IHRlWyA3IF0sIG40MyA9IHRlWyAxMSBdLCBuNDQgPSB0ZVsgMTUgXTtcblxuXHRcdC8vVE9ETzogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50XG5cdFx0Ly8oIGJhc2VkIG9uIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvbWF0cml4L2Z1bmN0aW9ucy9pbnZlcnNlL2ZvdXJEL2luZGV4Lmh0bSApXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bjQxICogKFxuXHRcdFx0XHQrIG4xNCAqIG4yMyAqIG4zMlxuXHRcdFx0XHQgLSBuMTMgKiBuMjQgKiBuMzJcblx0XHRcdFx0IC0gbjE0ICogbjIyICogbjMzXG5cdFx0XHRcdCArIG4xMiAqIG4yNCAqIG4zM1xuXHRcdFx0XHQgKyBuMTMgKiBuMjIgKiBuMzRcblx0XHRcdFx0IC0gbjEyICogbjIzICogbjM0XG5cdFx0XHQpICtcblx0XHRcdG40MiAqIChcblx0XHRcdFx0KyBuMTEgKiBuMjMgKiBuMzRcblx0XHRcdFx0IC0gbjExICogbjI0ICogbjMzXG5cdFx0XHRcdCArIG4xNCAqIG4yMSAqIG4zM1xuXHRcdFx0XHQgLSBuMTMgKiBuMjEgKiBuMzRcblx0XHRcdFx0ICsgbjEzICogbjI0ICogbjMxXG5cdFx0XHRcdCAtIG4xNCAqIG4yMyAqIG4zMVxuXHRcdFx0KSArXG5cdFx0XHRuNDMgKiAoXG5cdFx0XHRcdCsgbjExICogbjI0ICogbjMyXG5cdFx0XHRcdCAtIG4xMSAqIG4yMiAqIG4zNFxuXHRcdFx0XHQgLSBuMTQgKiBuMjEgKiBuMzJcblx0XHRcdFx0ICsgbjEyICogbjIxICogbjM0XG5cdFx0XHRcdCArIG4xNCAqIG4yMiAqIG4zMVxuXHRcdFx0XHQgLSBuMTIgKiBuMjQgKiBuMzFcblx0XHRcdCkgK1xuXHRcdFx0bjQ0ICogKFxuXHRcdFx0XHQtIG4xMyAqIG4yMiAqIG4zMVxuXHRcdFx0XHQgLSBuMTEgKiBuMjMgKiBuMzJcblx0XHRcdFx0ICsgbjExICogbjIyICogbjMzXG5cdFx0XHRcdCArIG4xMyAqIG4yMSAqIG4zMlxuXHRcdFx0XHQgLSBuMTIgKiBuMjEgKiBuMzNcblx0XHRcdFx0ICsgbjEyICogbjIzICogbjMxXG5cdFx0XHQpXG5cblx0XHQpO1xuXG5cdH1cblxuXHR0cmFuc3Bvc2UoKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0bGV0IHRtcDtcblxuXHRcdHRtcCA9IHRlWyAxIF07IHRlWyAxIF0gPSB0ZVsgNCBdOyB0ZVsgNCBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyAyIF07IHRlWyAyIF0gPSB0ZVsgOCBdOyB0ZVsgOCBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyA2IF07IHRlWyA2IF0gPSB0ZVsgOSBdOyB0ZVsgOSBdID0gdG1wO1xuXG5cdFx0dG1wID0gdGVbIDMgXTsgdGVbIDMgXSA9IHRlWyAxMiBdOyB0ZVsgMTIgXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVsgNyBdOyB0ZVsgNyBdID0gdGVbIDEzIF07IHRlWyAxMyBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyAxMSBdOyB0ZVsgMTEgXSA9IHRlWyAxNCBdOyB0ZVsgMTQgXSA9IHRtcDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRQb3NpdGlvbiggeCwgeSwgeiApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGlmICggeC5pc1ZlY3RvcjMgKSB7XG5cblx0XHRcdHRlWyAxMiBdID0geC54O1xuXHRcdFx0dGVbIDEzIF0gPSB4Lnk7XG5cdFx0XHR0ZVsgMTQgXSA9IHguejtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRlWyAxMiBdID0geDtcblx0XHRcdHRlWyAxMyBdID0geTtcblx0XHRcdHRlWyAxNCBdID0gejtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpbnZlcnQoKSB7XG5cblx0XHQvLyBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG1cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHMsXG5cblx0XHRcdG4xMSA9IHRlWyAwIF0sIG4yMSA9IHRlWyAxIF0sIG4zMSA9IHRlWyAyIF0sIG40MSA9IHRlWyAzIF0sXG5cdFx0XHRuMTIgPSB0ZVsgNCBdLCBuMjIgPSB0ZVsgNSBdLCBuMzIgPSB0ZVsgNiBdLCBuNDIgPSB0ZVsgNyBdLFxuXHRcdFx0bjEzID0gdGVbIDggXSwgbjIzID0gdGVbIDkgXSwgbjMzID0gdGVbIDEwIF0sIG40MyA9IHRlWyAxMSBdLFxuXHRcdFx0bjE0ID0gdGVbIDEyIF0sIG4yNCA9IHRlWyAxMyBdLCBuMzQgPSB0ZVsgMTQgXSwgbjQ0ID0gdGVbIDE1IF0sXG5cblx0XHRcdHQxMSA9IG4yMyAqIG4zNCAqIG40MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4yMiAqIG4zNCAqIG40MyAtIG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCxcblx0XHRcdHQxMiA9IG4xNCAqIG4zMyAqIG40MiAtIG4xMyAqIG4zNCAqIG40MiAtIG4xNCAqIG4zMiAqIG40MyArIG4xMiAqIG4zNCAqIG40MyArIG4xMyAqIG4zMiAqIG40NCAtIG4xMiAqIG4zMyAqIG40NCxcblx0XHRcdHQxMyA9IG4xMyAqIG4yNCAqIG40MiAtIG4xNCAqIG4yMyAqIG40MiArIG4xNCAqIG4yMiAqIG40MyAtIG4xMiAqIG4yNCAqIG40MyAtIG4xMyAqIG4yMiAqIG40NCArIG4xMiAqIG4yMyAqIG40NCxcblx0XHRcdHQxNCA9IG4xNCAqIG4yMyAqIG4zMiAtIG4xMyAqIG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAqIG4zMyArIG4xMyAqIG4yMiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDtcblxuXHRcdGNvbnN0IGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiArIG4zMSAqIHQxMyArIG40MSAqIHQxNDtcblxuXHRcdGlmICggZGV0ID09PSAwICkgcmV0dXJuIHRoaXMuc2V0KCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwICk7XG5cblx0XHRjb25zdCBkZXRJbnYgPSAxIC8gZGV0O1xuXG5cdFx0dGVbIDAgXSA9IHQxMSAqIGRldEludjtcblx0XHR0ZVsgMSBdID0gKCBuMjQgKiBuMzMgKiBuNDEgLSBuMjMgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzEgKiBuNDMgKyBuMjEgKiBuMzQgKiBuNDMgKyBuMjMgKiBuMzEgKiBuNDQgLSBuMjEgKiBuMzMgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgMiBdID0gKCBuMjIgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzIgKiBuNDEgKyBuMjQgKiBuMzEgKiBuNDIgLSBuMjEgKiBuMzQgKiBuNDIgLSBuMjIgKiBuMzEgKiBuNDQgKyBuMjEgKiBuMzIgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgMyBdID0gKCBuMjMgKiBuMzIgKiBuNDEgLSBuMjIgKiBuMzMgKiBuNDEgLSBuMjMgKiBuMzEgKiBuNDIgKyBuMjEgKiBuMzMgKiBuNDIgKyBuMjIgKiBuMzEgKiBuNDMgLSBuMjEgKiBuMzIgKiBuNDMgKSAqIGRldEludjtcblxuXHRcdHRlWyA0IF0gPSB0MTIgKiBkZXRJbnY7XG5cdFx0dGVbIDUgXSA9ICggbjEzICogbjM0ICogbjQxIC0gbjE0ICogbjMzICogbjQxICsgbjE0ICogbjMxICogbjQzIC0gbjExICogbjM0ICogbjQzIC0gbjEzICogbjMxICogbjQ0ICsgbjExICogbjMzICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDYgXSA9ICggbjE0ICogbjMyICogbjQxIC0gbjEyICogbjM0ICogbjQxIC0gbjE0ICogbjMxICogbjQyICsgbjExICogbjM0ICogbjQyICsgbjEyICogbjMxICogbjQ0IC0gbjExICogbjMyICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDcgXSA9ICggbjEyICogbjMzICogbjQxIC0gbjEzICogbjMyICogbjQxICsgbjEzICogbjMxICogbjQyIC0gbjExICogbjMzICogbjQyIC0gbjEyICogbjMxICogbjQzICsgbjExICogbjMyICogbjQzICkgKiBkZXRJbnY7XG5cblx0XHR0ZVsgOCBdID0gdDEzICogZGV0SW52O1xuXHRcdHRlWyA5IF0gPSAoIG4xNCAqIG4yMyAqIG40MSAtIG4xMyAqIG4yNCAqIG40MSAtIG4xNCAqIG4yMSAqIG40MyArIG4xMSAqIG4yNCAqIG40MyArIG4xMyAqIG4yMSAqIG40NCAtIG4xMSAqIG4yMyAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyAxMCBdID0gKCBuMTIgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjIgKiBuNDEgKyBuMTQgKiBuMjEgKiBuNDIgLSBuMTEgKiBuMjQgKiBuNDIgLSBuMTIgKiBuMjEgKiBuNDQgKyBuMTEgKiBuMjIgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgMTEgXSA9ICggbjEzICogbjIyICogbjQxIC0gbjEyICogbjIzICogbjQxIC0gbjEzICogbjIxICogbjQyICsgbjExICogbjIzICogbjQyICsgbjEyICogbjIxICogbjQzIC0gbjExICogbjIyICogbjQzICkgKiBkZXRJbnY7XG5cblx0XHR0ZVsgMTIgXSA9IHQxNCAqIGRldEludjtcblx0XHR0ZVsgMTMgXSA9ICggbjEzICogbjI0ICogbjMxIC0gbjE0ICogbjIzICogbjMxICsgbjE0ICogbjIxICogbjMzIC0gbjExICogbjI0ICogbjMzIC0gbjEzICogbjIxICogbjM0ICsgbjExICogbjIzICogbjM0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDE0IF0gPSAoIG4xNCAqIG4yMiAqIG4zMSAtIG4xMiAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMSAqIG4zMiArIG4xMSAqIG4yNCAqIG4zMiArIG4xMiAqIG4yMSAqIG4zNCAtIG4xMSAqIG4yMiAqIG4zNCApICogZGV0SW52O1xuXHRcdHRlWyAxNSBdID0gKCBuMTIgKiBuMjMgKiBuMzEgLSBuMTMgKiBuMjIgKiBuMzEgKyBuMTMgKiBuMjEgKiBuMzIgLSBuMTEgKiBuMjMgKiBuMzIgLSBuMTIgKiBuMjEgKiBuMzMgKyBuMTEgKiBuMjIgKiBuMzMgKSAqIGRldEludjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzY2FsZSggdiApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB4ID0gdi54LCB5ID0gdi55LCB6ID0gdi56O1xuXG5cdFx0dGVbIDAgXSAqPSB4OyB0ZVsgNCBdICo9IHk7IHRlWyA4IF0gKj0gejtcblx0XHR0ZVsgMSBdICo9IHg7IHRlWyA1IF0gKj0geTsgdGVbIDkgXSAqPSB6O1xuXHRcdHRlWyAyIF0gKj0geDsgdGVbIDYgXSAqPSB5OyB0ZVsgMTAgXSAqPSB6O1xuXHRcdHRlWyAzIF0gKj0geDsgdGVbIDcgXSAqPSB5OyB0ZVsgMTEgXSAqPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldE1heFNjYWxlT25BeGlzKCkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3Qgc2NhbGVYU3EgPSB0ZVsgMCBdICogdGVbIDAgXSArIHRlWyAxIF0gKiB0ZVsgMSBdICsgdGVbIDIgXSAqIHRlWyAyIF07XG5cdFx0Y29uc3Qgc2NhbGVZU3EgPSB0ZVsgNCBdICogdGVbIDQgXSArIHRlWyA1IF0gKiB0ZVsgNSBdICsgdGVbIDYgXSAqIHRlWyA2IF07XG5cdFx0Y29uc3Qgc2NhbGVaU3EgPSB0ZVsgOCBdICogdGVbIDggXSArIHRlWyA5IF0gKiB0ZVsgOSBdICsgdGVbIDEwIF0gKiB0ZVsgMTAgXTtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIE1hdGgubWF4KCBzY2FsZVhTcSwgc2NhbGVZU3EsIHNjYWxlWlNxICkgKTtcblxuXHR9XG5cblx0bWFrZVRyYW5zbGF0aW9uKCB4LCB5LCB6ICkge1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdDEsIDAsIDAsIHgsXG5cdFx0XHQwLCAxLCAwLCB5LFxuXHRcdFx0MCwgMCwgMSwgeixcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZVJvdGF0aW9uWCggdGhldGEgKSB7XG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCAwLCAwLCAwLFxuXHRcdFx0MCwgYywgLSBzLCAwLFxuXHRcdFx0MCwgcywgYywgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZVJvdGF0aW9uWSggdGhldGEgKSB7XG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQgYywgMCwgcywgMCxcblx0XHRcdCAwLCAxLCAwLCAwLFxuXHRcdFx0LSBzLCAwLCBjLCAwLFxuXHRcdFx0IDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZVJvdGF0aW9uWiggdGhldGEgKSB7XG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHRjLCAtIHMsIDAsIDAsXG5cdFx0XHRzLCBjLCAwLCAwLFxuXHRcdFx0MCwgMCwgMSwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZVJvdGF0aW9uQXhpcyggYXhpcywgYW5nbGUgKSB7XG5cblx0XHQvLyBCYXNlZCBvbiBodHRwOi8vd3d3LmdhbWVkZXYubmV0L3JlZmVyZW5jZS9hcnRpY2xlcy9hcnRpY2xlMTE5OS5hc3BcblxuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyggYW5nbGUgKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cdFx0Y29uc3QgdCA9IDEgLSBjO1xuXHRcdGNvbnN0IHggPSBheGlzLngsIHkgPSBheGlzLnksIHogPSBheGlzLno7XG5cdFx0Y29uc3QgdHggPSB0ICogeCwgdHkgPSB0ICogeTtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHR0eCAqIHggKyBjLCB0eCAqIHkgLSBzICogeiwgdHggKiB6ICsgcyAqIHksIDAsXG5cdFx0XHR0eCAqIHkgKyBzICogeiwgdHkgKiB5ICsgYywgdHkgKiB6IC0gcyAqIHgsIDAsXG5cdFx0XHR0eCAqIHogLSBzICogeSwgdHkgKiB6ICsgcyAqIHgsIHQgKiB6ICogeiArIGMsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VTY2FsZSggeCwgeSwgeiApIHtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHR4LCAwLCAwLCAwLFxuXHRcdFx0MCwgeSwgMCwgMCxcblx0XHRcdDAsIDAsIHosIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VTaGVhciggeHksIHh6LCB5eCwgeXosIHp4LCB6eSApIHtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCB5eCwgengsIDAsXG5cdFx0XHR4eSwgMSwgenksIDAsXG5cdFx0XHR4eiwgeXosIDEsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbXBvc2UoIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IHggPSBxdWF0ZXJuaW9uLl94LCB5ID0gcXVhdGVybmlvbi5feSwgeiA9IHF1YXRlcm5pb24uX3osIHcgPSBxdWF0ZXJuaW9uLl93O1xuXHRcdGNvbnN0IHgyID0geCArIHgsXHR5MiA9IHkgKyB5LCB6MiA9IHogKyB6O1xuXHRcdGNvbnN0IHh4ID0geCAqIHgyLCB4eSA9IHggKiB5MiwgeHogPSB4ICogejI7XG5cdFx0Y29uc3QgeXkgPSB5ICogeTIsIHl6ID0geSAqIHoyLCB6eiA9IHogKiB6Mjtcblx0XHRjb25zdCB3eCA9IHcgKiB4Miwgd3kgPSB3ICogeTIsIHd6ID0gdyAqIHoyO1xuXG5cdFx0Y29uc3Qgc3ggPSBzY2FsZS54LCBzeSA9IHNjYWxlLnksIHN6ID0gc2NhbGUuejtcblxuXHRcdHRlWyAwIF0gPSAoIDEgLSAoIHl5ICsgenogKSApICogc3g7XG5cdFx0dGVbIDEgXSA9ICggeHkgKyB3eiApICogc3g7XG5cdFx0dGVbIDIgXSA9ICggeHogLSB3eSApICogc3g7XG5cdFx0dGVbIDMgXSA9IDA7XG5cblx0XHR0ZVsgNCBdID0gKCB4eSAtIHd6ICkgKiBzeTtcblx0XHR0ZVsgNSBdID0gKCAxIC0gKCB4eCArIHp6ICkgKSAqIHN5O1xuXHRcdHRlWyA2IF0gPSAoIHl6ICsgd3ggKSAqIHN5O1xuXHRcdHRlWyA3IF0gPSAwO1xuXG5cdFx0dGVbIDggXSA9ICggeHogKyB3eSApICogc3o7XG5cdFx0dGVbIDkgXSA9ICggeXogLSB3eCApICogc3o7XG5cdFx0dGVbIDEwIF0gPSAoIDEgLSAoIHh4ICsgeXkgKSApICogc3o7XG5cdFx0dGVbIDExIF0gPSAwO1xuXG5cdFx0dGVbIDEyIF0gPSBwb3NpdGlvbi54O1xuXHRcdHRlWyAxMyBdID0gcG9zaXRpb24ueTtcblx0XHR0ZVsgMTQgXSA9IHBvc2l0aW9uLno7XG5cdFx0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRlY29tcG9zZSggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0bGV0IHN4ID0gX3YxJDUuc2V0KCB0ZVsgMCBdLCB0ZVsgMSBdLCB0ZVsgMiBdICkubGVuZ3RoKCk7XG5cdFx0Y29uc3Qgc3kgPSBfdjEkNS5zZXQoIHRlWyA0IF0sIHRlWyA1IF0sIHRlWyA2IF0gKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzeiA9IF92MSQ1LnNldCggdGVbIDggXSwgdGVbIDkgXSwgdGVbIDEwIF0gKS5sZW5ndGgoKTtcblxuXHRcdC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlXG5cdFx0Y29uc3QgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xuXHRcdGlmICggZGV0IDwgMCApIHN4ID0gLSBzeDtcblxuXHRcdHBvc2l0aW9uLnggPSB0ZVsgMTIgXTtcblx0XHRwb3NpdGlvbi55ID0gdGVbIDEzIF07XG5cdFx0cG9zaXRpb24ueiA9IHRlWyAxNCBdO1xuXG5cdFx0Ly8gc2NhbGUgdGhlIHJvdGF0aW9uIHBhcnRcblx0XHRfbTEkMi5jb3B5KCB0aGlzICk7XG5cblx0XHRjb25zdCBpbnZTWCA9IDEgLyBzeDtcblx0XHRjb25zdCBpbnZTWSA9IDEgLyBzeTtcblx0XHRjb25zdCBpbnZTWiA9IDEgLyBzejtcblxuXHRcdF9tMSQyLmVsZW1lbnRzWyAwIF0gKj0gaW52U1g7XG5cdFx0X20xJDIuZWxlbWVudHNbIDEgXSAqPSBpbnZTWDtcblx0XHRfbTEkMi5lbGVtZW50c1sgMiBdICo9IGludlNYO1xuXG5cdFx0X20xJDIuZWxlbWVudHNbIDQgXSAqPSBpbnZTWTtcblx0XHRfbTEkMi5lbGVtZW50c1sgNSBdICo9IGludlNZO1xuXHRcdF9tMSQyLmVsZW1lbnRzWyA2IF0gKj0gaW52U1k7XG5cblx0XHRfbTEkMi5lbGVtZW50c1sgOCBdICo9IGludlNaO1xuXHRcdF9tMSQyLmVsZW1lbnRzWyA5IF0gKj0gaW52U1o7XG5cdFx0X20xJDIuZWxlbWVudHNbIDEwIF0gKj0gaW52U1o7XG5cblx0XHRxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggX20xJDIgKTtcblxuXHRcdHNjYWxlLnggPSBzeDtcblx0XHRzY2FsZS55ID0gc3k7XG5cdFx0c2NhbGUueiA9IHN6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSB7XG5cblx0XHRpZiAoIGZhciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuJyApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHggPSAyICogbmVhciAvICggcmlnaHQgLSBsZWZ0ICk7XG5cdFx0Y29uc3QgeSA9IDIgKiBuZWFyIC8gKCB0b3AgLSBib3R0b20gKTtcblxuXHRcdGNvbnN0IGEgPSAoIHJpZ2h0ICsgbGVmdCApIC8gKCByaWdodCAtIGxlZnQgKTtcblx0XHRjb25zdCBiID0gKCB0b3AgKyBib3R0b20gKSAvICggdG9wIC0gYm90dG9tICk7XG5cdFx0Y29uc3QgYyA9IC0gKCBmYXIgKyBuZWFyICkgLyAoIGZhciAtIG5lYXIgKTtcblx0XHRjb25zdCBkID0gLSAyICogZmFyICogbmVhciAvICggZmFyIC0gbmVhciApO1xuXG5cdFx0dGVbIDAgXSA9IHg7XHR0ZVsgNCBdID0gMDtcdHRlWyA4IF0gPSBhO1x0dGVbIDEyIF0gPSAwO1xuXHRcdHRlWyAxIF0gPSAwO1x0dGVbIDUgXSA9IHk7XHR0ZVsgOSBdID0gYjtcdHRlWyAxMyBdID0gMDtcblx0XHR0ZVsgMiBdID0gMDtcdHRlWyA2IF0gPSAwO1x0dGVbIDEwIF0gPSBjO1x0dGVbIDE0IF0gPSBkO1xuXHRcdHRlWyAzIF0gPSAwO1x0dGVbIDcgXSA9IDA7XHR0ZVsgMTEgXSA9IC0gMTtcdHRlWyAxNSBdID0gMDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlT3J0aG9ncmFwaGljKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB3ID0gMS4wIC8gKCByaWdodCAtIGxlZnQgKTtcblx0XHRjb25zdCBoID0gMS4wIC8gKCB0b3AgLSBib3R0b20gKTtcblx0XHRjb25zdCBwID0gMS4wIC8gKCBmYXIgLSBuZWFyICk7XG5cblx0XHRjb25zdCB4ID0gKCByaWdodCArIGxlZnQgKSAqIHc7XG5cdFx0Y29uc3QgeSA9ICggdG9wICsgYm90dG9tICkgKiBoO1xuXHRcdGNvbnN0IHogPSAoIGZhciArIG5lYXIgKSAqIHA7XG5cblx0XHR0ZVsgMCBdID0gMiAqIHc7XHR0ZVsgNCBdID0gMDtcdHRlWyA4IF0gPSAwO1x0dGVbIDEyIF0gPSAtIHg7XG5cdFx0dGVbIDEgXSA9IDA7XHR0ZVsgNSBdID0gMiAqIGg7XHR0ZVsgOSBdID0gMDtcdHRlWyAxMyBdID0gLSB5O1xuXHRcdHRlWyAyIF0gPSAwO1x0dGVbIDYgXSA9IDA7XHR0ZVsgMTAgXSA9IC0gMiAqIHA7XHR0ZVsgMTQgXSA9IC0gejtcblx0XHR0ZVsgMyBdID0gMDtcdHRlWyA3IF0gPSAwO1x0dGVbIDExIF0gPSAwO1x0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggbWF0cml4ICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgMTY7IGkgKysgKSB7XG5cblx0XHRcdGlmICggdGVbIGkgXSAhPT0gbWVbIGkgXSApIHJldHVybiBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgMTY7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuZWxlbWVudHNbIGkgXSA9IGFycmF5WyBpICsgb2Zmc2V0IF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRlWyAwIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRlWyAxIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDIgXSA9IHRlWyAyIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07XG5cblx0XHRhcnJheVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgNSBdID0gdGVbIDUgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgNiBdID0gdGVbIDYgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcgXTtcblxuXHRcdGFycmF5WyBvZmZzZXQgKyA4IF0gPSB0ZVsgOCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA5IF0gPSB0ZVsgOSBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxMCBdID0gdGVbIDEwIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDExIF0gPSB0ZVsgMTEgXTtcblxuXHRcdGFycmF5WyBvZmZzZXQgKyAxMiBdID0gdGVbIDEyIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDEzIF0gPSB0ZVsgMTMgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMTQgXSA9IHRlWyAxNCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxNSBdID0gdGVbIDE1IF07XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG59XG5cbk1hdHJpeDQucHJvdG90eXBlLmlzTWF0cml4NCA9IHRydWU7XG5cbmNvbnN0IF92MSQ1ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX20xJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfemVybyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIDAsIDAsIDAgKTtcbmNvbnN0IF9vbmUgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAxLCAxLCAxICk7XG5jb25zdCBfeCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF95ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ogPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9tYXRyaXgkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9xdWF0ZXJuaW9uJDMgPSAvKkBfX1BVUkVfXyovIG5ldyBRdWF0ZXJuaW9uKCk7XG5cbmNsYXNzIEV1bGVyIHtcblxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwLCB6ID0gMCwgb3JkZXIgPSBFdWxlci5EZWZhdWx0T3JkZXIgKSB7XG5cblx0XHR0aGlzLl94ID0geDtcblx0XHR0aGlzLl95ID0geTtcblx0XHR0aGlzLl96ID0gejtcblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyO1xuXG5cdH1cblxuXHRnZXQgeCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl94O1xuXG5cdH1cblxuXHRzZXQgeCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLl94ID0gdmFsdWU7XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdH1cblxuXHRnZXQgeSgpIHtcblxuXHRcdHJldHVybiB0aGlzLl95O1xuXG5cdH1cblxuXHRzZXQgeSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLl95ID0gdmFsdWU7XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdH1cblxuXHRnZXQgeigpIHtcblxuXHRcdHJldHVybiB0aGlzLl96O1xuXG5cdH1cblxuXHRzZXQgeiggdmFsdWUgKSB7XG5cblx0XHR0aGlzLl96ID0gdmFsdWU7XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdH1cblxuXHRnZXQgb3JkZXIoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fb3JkZXI7XG5cblx0fVxuXG5cdHNldCBvcmRlciggdmFsdWUgKSB7XG5cblx0XHR0aGlzLl9vcmRlciA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0c2V0KCB4LCB5LCB6LCBvcmRlciA9IHRoaXMuX29yZGVyICkge1xuXG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fb3JkZXIgPSBvcmRlcjtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiwgdGhpcy5fb3JkZXIgKTtcblxuXHR9XG5cblx0Y29weSggZXVsZXIgKSB7XG5cblx0XHR0aGlzLl94ID0gZXVsZXIuX3g7XG5cdFx0dGhpcy5feSA9IGV1bGVyLl95O1xuXHRcdHRoaXMuX3ogPSBldWxlci5fejtcblx0XHR0aGlzLl9vcmRlciA9IGV1bGVyLl9vcmRlcjtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXgoIG0sIG9yZGVyID0gdGhpcy5fb3JkZXIsIHVwZGF0ZSA9IHRydWUgKSB7XG5cblx0XHQvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxuXG5cdFx0Y29uc3QgdGUgPSBtLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG0xMSA9IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF07XG5cdFx0Y29uc3QgbTIxID0gdGVbIDEgXSwgbTIyID0gdGVbIDUgXSwgbTIzID0gdGVbIDkgXTtcblx0XHRjb25zdCBtMzEgPSB0ZVsgMiBdLCBtMzIgPSB0ZVsgNiBdLCBtMzMgPSB0ZVsgMTAgXTtcblxuXHRcdHN3aXRjaCAoIG9yZGVyICkge1xuXG5cdFx0XHRjYXNlICdYWVonOlxuXG5cdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmFzaW4oIGNsYW1wKCBtMTMsIC0gMSwgMSApICk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggbTEzICkgPCAwLjk5OTk5OTkgKSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0zMyApO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTExICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0yMiApO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSAwO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVhaJzpcblxuXHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hc2luKCAtIGNsYW1wKCBtMjMsIC0gMSwgMSApICk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggbTIzICkgPCAwLjk5OTk5OTkgKSB7XG5cblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMzMgKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBtMjIgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIC0gbTMxLCBtMTEgKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gMDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1pYWSc6XG5cblx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXNpbiggY2xhbXAoIG0zMiwgLSAxLCAxICkgKTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBtMzIgKSA8IDAuOTk5OTk5OSApIHtcblxuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTMzICk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMjIgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhpcy5feSA9IDA7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIG0yMSwgbTExICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWVgnOlxuXG5cdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0zMSwgLSAxLCAxICkgKTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBtMzEgKSA8IDAuOTk5OTk5OSApIHtcblxuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0zMyApO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0xMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggLSBtMTIsIG0yMiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWVpYJzpcblxuXHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hc2luKCBjbGFtcCggbTIxLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRcdGlmICggTWF0aC5hYnMoIG0yMSApIDwgMC45OTk5OTk5ICkge1xuXG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoIC0gbTIzLCBtMjIgKTtcblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggLSBtMzEsIG0xMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMzMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1haWSc6XG5cblx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXNpbiggLSBjbGFtcCggbTEyLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRcdGlmICggTWF0aC5hYnMoIG0xMiApIDwgMC45OTk5OTk5ICkge1xuXG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoIG0zMiwgbTIyICk7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTExICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywgbTMzICk7XG5cdFx0XHRcdFx0dGhpcy5feSA9IDA7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyO1xuXG5cdFx0aWYgKCB1cGRhdGUgPT09IHRydWUgKSB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVF1YXRlcm5pb24oIHEsIG9yZGVyLCB1cGRhdGUgKSB7XG5cblx0XHRfbWF0cml4JDEubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHEgKTtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggX21hdHJpeCQxLCBvcmRlciwgdXBkYXRlICk7XG5cblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKCB2LCBvcmRlciA9IHRoaXMuX29yZGVyICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0KCB2LngsIHYueSwgdi56LCBvcmRlciApO1xuXG5cdH1cblxuXHRyZW9yZGVyKCBuZXdPcmRlciApIHtcblxuXHRcdC8vIFdBUk5JTkc6IHRoaXMgZGlzY2FyZHMgcmV2b2x1dGlvbiBpbmZvcm1hdGlvbiAtYmhvdXN0b25cblxuXHRcdF9xdWF0ZXJuaW9uJDMuc2V0RnJvbUV1bGVyKCB0aGlzICk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbiggX3F1YXRlcm5pb24kMywgbmV3T3JkZXIgKTtcblxuXHR9XG5cblx0ZXF1YWxzKCBldWxlciApIHtcblxuXHRcdHJldHVybiAoIGV1bGVyLl94ID09PSB0aGlzLl94ICkgJiYgKCBldWxlci5feSA9PT0gdGhpcy5feSApICYmICggZXVsZXIuX3ogPT09IHRoaXMuX3ogKSAmJiAoIGV1bGVyLl9vcmRlciA9PT0gdGhpcy5fb3JkZXIgKTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSApIHtcblxuXHRcdHRoaXMuX3ggPSBhcnJheVsgMCBdO1xuXHRcdHRoaXMuX3kgPSBhcnJheVsgMSBdO1xuXHRcdHRoaXMuX3ogPSBhcnJheVsgMiBdO1xuXHRcdGlmICggYXJyYXlbIDMgXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5fb3JkZXIgPSBhcnJheVsgMyBdO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLl94O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLl96O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLl9vcmRlcjtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0dG9WZWN0b3IzKCBvcHRpb25hbFJlc3VsdCApIHtcblxuXHRcdGlmICggb3B0aW9uYWxSZXN1bHQgKSB7XG5cblx0XHRcdHJldHVybiBvcHRpb25hbFJlc3VsdC5zZXQoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3ogKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfb25DaGFuZ2UoIGNhbGxiYWNrICkge1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdF9vbkNoYW5nZUNhbGxiYWNrKCkge31cblxufVxuXG5FdWxlci5wcm90b3R5cGUuaXNFdWxlciA9IHRydWU7XG5cbkV1bGVyLkRlZmF1bHRPcmRlciA9ICdYWVonO1xuRXVsZXIuUm90YXRpb25PcmRlcnMgPSBbICdYWVonLCAnWVpYJywgJ1pYWScsICdYWlknLCAnWVhaJywgJ1pZWCcgXTtcblxuY2xhc3MgTGF5ZXJzIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMubWFzayA9IDEgfCAwO1xuXG5cdH1cblxuXHRzZXQoIGNoYW5uZWwgKSB7XG5cblx0XHR0aGlzLm1hc2sgPSAoIDEgPDwgY2hhbm5lbCB8IDAgKSA+Pj4gMDtcblxuXHR9XG5cblx0ZW5hYmxlKCBjaGFubmVsICkge1xuXG5cdFx0dGhpcy5tYXNrIHw9IDEgPDwgY2hhbm5lbCB8IDA7XG5cblx0fVxuXG5cdGVuYWJsZUFsbCgpIHtcblxuXHRcdHRoaXMubWFzayA9IDB4ZmZmZmZmZmYgfCAwO1xuXG5cdH1cblxuXHR0b2dnbGUoIGNoYW5uZWwgKSB7XG5cblx0XHR0aGlzLm1hc2sgXj0gMSA8PCBjaGFubmVsIHwgMDtcblxuXHR9XG5cblx0ZGlzYWJsZSggY2hhbm5lbCApIHtcblxuXHRcdHRoaXMubWFzayAmPSB+ICggMSA8PCBjaGFubmVsIHwgMCApO1xuXG5cdH1cblxuXHRkaXNhYmxlQWxsKCkge1xuXG5cdFx0dGhpcy5tYXNrID0gMDtcblxuXHR9XG5cblx0dGVzdCggbGF5ZXJzICkge1xuXG5cdFx0cmV0dXJuICggdGhpcy5tYXNrICYgbGF5ZXJzLm1hc2sgKSAhPT0gMDtcblxuXHR9XG5cblx0aXNFbmFibGVkKCBjaGFubmVsICkge1xuXG5cdFx0cmV0dXJuICggdGhpcy5tYXNrICYgKCAxIDw8IGNoYW5uZWwgfCAwICkgKSAhPT0gMDtcblxuXHR9XG5cbn1cblxubGV0IF9vYmplY3QzRElkID0gMDtcblxuY29uc3QgX3YxJDQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfcTEgPSAvKkBfX1BVUkVfXyovIG5ldyBRdWF0ZXJuaW9uKCk7XG5jb25zdCBfbTEkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF90YXJnZXQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9wb3NpdGlvbiQzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3NjYWxlJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfcXVhdGVybmlvbiQyID0gLypAX19QVVJFX18qLyBuZXcgUXVhdGVybmlvbigpO1xuXG5jb25zdCBfeEF4aXMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAxLCAwLCAwICk7XG5jb25zdCBfeUF4aXMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAwLCAxLCAwICk7XG5jb25zdCBfekF4aXMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAwLCAwLCAxICk7XG5cbmNvbnN0IF9hZGRlZEV2ZW50ID0geyB0eXBlOiAnYWRkZWQnIH07XG5jb25zdCBfcmVtb3ZlZEV2ZW50ID0geyB0eXBlOiAncmVtb3ZlZCcgfTtcblxuY2xhc3MgT2JqZWN0M0QgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogX29iamVjdDNESWQgKysgfSApO1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLnR5cGUgPSAnT2JqZWN0M0QnO1xuXG5cdFx0dGhpcy5wYXJlbnQgPSBudWxsO1xuXHRcdHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuXHRcdHRoaXMudXAgPSBPYmplY3QzRC5EZWZhdWx0VXAuY2xvbmUoKTtcblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCByb3RhdGlvbiA9IG5ldyBFdWxlcigpO1xuXHRcdGNvbnN0IHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXHRcdGNvbnN0IHNjYWxlID0gbmV3IFZlY3RvcjMoIDEsIDEsIDEgKTtcblxuXHRcdGZ1bmN0aW9uIG9uUm90YXRpb25DaGFuZ2UoKSB7XG5cblx0XHRcdHF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKCByb3RhdGlvbiwgZmFsc2UgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uUXVhdGVybmlvbkNoYW5nZSgpIHtcblxuXHRcdFx0cm90YXRpb24uc2V0RnJvbVF1YXRlcm5pb24oIHF1YXRlcm5pb24sIHVuZGVmaW5lZCwgZmFsc2UgKTtcblxuXHRcdH1cblxuXHRcdHJvdGF0aW9uLl9vbkNoYW5nZSggb25Sb3RhdGlvbkNoYW5nZSApO1xuXHRcdHF1YXRlcm5pb24uX29uQ2hhbmdlKCBvblF1YXRlcm5pb25DaGFuZ2UgKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCB0aGlzLCB7XG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBwb3NpdGlvblxuXHRcdFx0fSxcblx0XHRcdHJvdGF0aW9uOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHJvdGF0aW9uXG5cdFx0XHR9LFxuXHRcdFx0cXVhdGVybmlvbjoge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBxdWF0ZXJuaW9uXG5cdFx0XHR9LFxuXHRcdFx0c2NhbGU6IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogc2NhbGVcblx0XHRcdH0sXG5cdFx0XHRtb2RlbFZpZXdNYXRyaXg6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBNYXRyaXg0KClcblx0XHRcdH0sXG5cdFx0XHRub3JtYWxNYXRyaXg6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBNYXRyaXgzKClcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBPYmplY3QzRC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMubGF5ZXJzID0gbmV3IExheWVycygpO1xuXHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cblx0XHR0aGlzLmNhc3RTaGFkb3cgPSBmYWxzZTtcblx0XHR0aGlzLnJlY2VpdmVTaGFkb3cgPSBmYWxzZTtcblxuXHRcdHRoaXMuZnJ1c3R1bUN1bGxlZCA9IHRydWU7XG5cdFx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cblx0XHR0aGlzLmFuaW1hdGlvbnMgPSBbXTtcblxuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblxuXHR9XG5cblx0b25CZWZvcmVSZW5kZXIoIC8qIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwICovICkge31cblxuXHRvbkFmdGVyUmVuZGVyKCAvKiByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCAqLyApIHt9XG5cblx0YXBwbHlNYXRyaXg0KCBtYXRyaXggKSB7XG5cblx0XHRpZiAoIHRoaXMubWF0cml4QXV0b1VwZGF0ZSApIHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHR0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSggbWF0cml4ICk7XG5cblx0XHR0aGlzLm1hdHJpeC5kZWNvbXBvc2UoIHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSApO1xuXG5cdH1cblxuXHRhcHBseVF1YXRlcm5pb24oIHEgKSB7XG5cblx0XHR0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoIHEgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICkge1xuXG5cdFx0Ly8gYXNzdW1lcyBheGlzIGlzIG5vcm1hbGl6ZWRcblxuXHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApO1xuXG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21FdWxlciggZXVsZXIgKSB7XG5cblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKCBldWxlciwgdHJ1ZSApO1xuXG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21NYXRyaXgoIG0gKSB7XG5cblx0XHQvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbSApO1xuXG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCBxICkge1xuXG5cdFx0Ly8gYXNzdW1lcyBxIGlzIG5vcm1hbGl6ZWRcblxuXHRcdHRoaXMucXVhdGVybmlvbi5jb3B5KCBxICk7XG5cblx0fVxuXG5cdHJvdGF0ZU9uQXhpcyggYXhpcywgYW5nbGUgKSB7XG5cblx0XHQvLyByb3RhdGUgb2JqZWN0IG9uIGF4aXMgaW4gb2JqZWN0IHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblxuXHRcdF9xMS5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApO1xuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KCBfcTEgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyb3RhdGVPbldvcmxkQXhpcyggYXhpcywgYW5nbGUgKSB7XG5cblx0XHQvLyByb3RhdGUgb2JqZWN0IG9uIGF4aXMgaW4gd29ybGQgc3BhY2Vcblx0XHQvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXHRcdC8vIG1ldGhvZCBhc3N1bWVzIG5vIHJvdGF0ZWQgcGFyZW50XG5cblx0XHRfcTEuc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKTtcblxuXHRcdHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSggX3ExICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlWCggYW5nbGUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoIF94QXhpcywgYW5nbGUgKTtcblxuXHR9XG5cblx0cm90YXRlWSggYW5nbGUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoIF95QXhpcywgYW5nbGUgKTtcblxuXHR9XG5cblx0cm90YXRlWiggYW5nbGUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoIF96QXhpcywgYW5nbGUgKTtcblxuXHR9XG5cblx0dHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIHtcblxuXHRcdC8vIHRyYW5zbGF0ZSBvYmplY3QgYnkgZGlzdGFuY2UgYWxvbmcgYXhpcyBpbiBvYmplY3Qgc3BhY2Vcblx0XHQvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXG5cdFx0X3YxJDQuY29weSggYXhpcyApLmFwcGx5UXVhdGVybmlvbiggdGhpcy5xdWF0ZXJuaW9uICk7XG5cblx0XHR0aGlzLnBvc2l0aW9uLmFkZCggX3YxJDQubXVsdGlwbHlTY2FsYXIoIGRpc3RhbmNlICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2xhdGVYKCBkaXN0YW5jZSApIHtcblxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyggX3hBeGlzLCBkaXN0YW5jZSApO1xuXG5cdH1cblxuXHR0cmFuc2xhdGVZKCBkaXN0YW5jZSApIHtcblxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyggX3lBeGlzLCBkaXN0YW5jZSApO1xuXG5cdH1cblxuXHR0cmFuc2xhdGVaKCBkaXN0YW5jZSApIHtcblxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyggX3pBeGlzLCBkaXN0YW5jZSApO1xuXG5cdH1cblxuXHRsb2NhbFRvV29ybGQoIHZlY3RvciApIHtcblxuXHRcdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICk7XG5cblx0fVxuXG5cdHdvcmxkVG9Mb2NhbCggdmVjdG9yICkge1xuXG5cdFx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoIF9tMSQxLmNvcHkoIHRoaXMubWF0cml4V29ybGQgKS5pbnZlcnQoKSApO1xuXG5cdH1cblxuXHRsb29rQXQoIHgsIHksIHogKSB7XG5cblx0XHQvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IG9iamVjdHMgaGF2aW5nIG5vbi11bmlmb3JtbHktc2NhbGVkIHBhcmVudChzKVxuXG5cdFx0aWYgKCB4LmlzVmVjdG9yMyApIHtcblxuXHRcdFx0X3RhcmdldC5jb3B5KCB4ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfdGFyZ2V0LnNldCggeCwgeSwgeiApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0X3Bvc2l0aW9uJDMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1hdHJpeFdvcmxkICk7XG5cblx0XHRpZiAoIHRoaXMuaXNDYW1lcmEgfHwgdGhpcy5pc0xpZ2h0ICkge1xuXG5cdFx0XHRfbTEkMS5sb29rQXQoIF9wb3NpdGlvbiQzLCBfdGFyZ2V0LCB0aGlzLnVwICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfbTEkMS5sb29rQXQoIF90YXJnZXQsIF9wb3NpdGlvbiQzLCB0aGlzLnVwICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBfbTEkMSApO1xuXG5cdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdF9tMSQxLmV4dHJhY3RSb3RhdGlvbiggcGFyZW50Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRfcTEuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBfbTEkMSApO1xuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KCBfcTEuaW52ZXJ0KCkgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0YWRkKCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdHRoaXMuYWRkKCBhcmd1bWVudHNbIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvYmplY3QgPT09IHRoaXMgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW5cXCd0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLicsIG9iamVjdCApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9XG5cblx0XHRpZiAoIG9iamVjdCAmJiBvYmplY3QuaXNPYmplY3QzRCApIHtcblxuXHRcdFx0aWYgKCBvYmplY3QucGFyZW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdG9iamVjdC5wYXJlbnQucmVtb3ZlKCBvYmplY3QgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3QucGFyZW50ID0gdGhpcztcblx0XHRcdHRoaXMuY2hpbGRyZW4ucHVzaCggb2JqZWN0ICk7XG5cblx0XHRcdG9iamVjdC5kaXNwYXRjaEV2ZW50KCBfYWRkZWRFdmVudCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4nLCBvYmplY3QgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyZW1vdmUoIG9iamVjdCApIHtcblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0dGhpcy5yZW1vdmUoIGFyZ3VtZW50c1sgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9XG5cblx0XHRjb25zdCBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZiggb2JqZWN0ICk7XG5cblx0XHRpZiAoIGluZGV4ICE9PSAtIDEgKSB7XG5cblx0XHRcdG9iamVjdC5wYXJlbnQgPSBudWxsO1xuXHRcdFx0dGhpcy5jaGlsZHJlbi5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdG9iamVjdC5kaXNwYXRjaEV2ZW50KCBfcmVtb3ZlZEV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmVtb3ZlRnJvbVBhcmVudCgpIHtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKCBwYXJlbnQgIT09IG51bGwgKSB7XG5cblx0XHRcdHBhcmVudC5yZW1vdmUoIHRoaXMgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGVhcigpIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSB0aGlzLmNoaWxkcmVuWyBpIF07XG5cblx0XHRcdG9iamVjdC5wYXJlbnQgPSBudWxsO1xuXG5cdFx0XHRvYmplY3QuZGlzcGF0Y2hFdmVudCggX3JlbW92ZWRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5jaGlsZHJlbi5sZW5ndGggPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblxuXHR9XG5cblx0YXR0YWNoKCBvYmplY3QgKSB7XG5cblx0XHQvLyBhZGRzIG9iamVjdCBhcyBhIGNoaWxkIG9mIHRoaXMsIHdoaWxlIG1haW50YWluaW5nIHRoZSBvYmplY3QncyB3b3JsZCB0cmFuc2Zvcm1cblxuXHRcdC8vIE5vdGU6IFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgc2NlbmUgZ3JhcGhzIGhhdmluZyBub24tdW5pZm9ybWx5LXNjYWxlZCBub2RlcyhzKVxuXG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTtcblxuXHRcdF9tMSQxLmNvcHkoIHRoaXMubWF0cml4V29ybGQgKS5pbnZlcnQoKTtcblxuXHRcdGlmICggb2JqZWN0LnBhcmVudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0b2JqZWN0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTtcblxuXHRcdFx0X20xJDEubXVsdGlwbHkoIG9iamVjdC5wYXJlbnQubWF0cml4V29ybGQgKTtcblxuXHRcdH1cblxuXHRcdG9iamVjdC5hcHBseU1hdHJpeDQoIF9tMSQxICk7XG5cblx0XHR0aGlzLmFkZCggb2JqZWN0ICk7XG5cblx0XHRvYmplY3QudXBkYXRlV29ybGRNYXRyaXgoIGZhbHNlLCB0cnVlICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0T2JqZWN0QnlJZCggaWQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCAnaWQnLCBpZCApO1xuXG5cdH1cblxuXHRnZXRPYmplY3RCeU5hbWUoIG5hbWUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCAnbmFtZScsIG5hbWUgKTtcblxuXHR9XG5cblx0Z2V0T2JqZWN0QnlQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXNbIG5hbWUgXSA9PT0gdmFsdWUgKSByZXR1cm4gdGhpcztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuWyBpIF07XG5cdFx0XHRjb25zdCBvYmplY3QgPSBjaGlsZC5nZXRPYmplY3RCeVByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXG5cdFx0XHRpZiAoIG9iamVjdCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiBvYmplY3Q7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0fVxuXG5cdGdldFdvcmxkUG9zaXRpb24oIHRhcmdldCApIHtcblxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdH1cblxuXHRnZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIHtcblxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggX3Bvc2l0aW9uJDMsIHRhcmdldCwgX3NjYWxlJDIgKTtcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGdldFdvcmxkU2NhbGUoIHRhcmdldCApIHtcblxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggX3Bvc2l0aW9uJDMsIF9xdWF0ZXJuaW9uJDIsIHRhcmdldCApO1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0Z2V0V29ybGREaXJlY3Rpb24oIHRhcmdldCApIHtcblxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHRjb25zdCBlID0gdGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztcblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KCBlWyA4IF0sIGVbIDkgXSwgZVsgMTAgXSApLm5vcm1hbGl6ZSgpO1xuXG5cdH1cblxuXHRyYXljYXN0KCAvKiByYXljYXN0ZXIsIGludGVyc2VjdHMgKi8gKSB7fVxuXG5cdHRyYXZlcnNlKCBjYWxsYmFjayApIHtcblxuXHRcdGNhbGxiYWNrKCB0aGlzICk7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjaGlsZHJlblsgaSBdLnRyYXZlcnNlKCBjYWxsYmFjayApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR0cmF2ZXJzZVZpc2libGUoIGNhbGxiYWNrICkge1xuXG5cdFx0aWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0Y2FsbGJhY2soIHRoaXMgKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNoaWxkcmVuWyBpIF0udHJhdmVyc2VWaXNpYmxlKCBjYWxsYmFjayApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR0cmF2ZXJzZUFuY2VzdG9ycyggY2FsbGJhY2sgKSB7XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmICggcGFyZW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRjYWxsYmFjayggcGFyZW50ICk7XG5cblx0XHRcdHBhcmVudC50cmF2ZXJzZUFuY2VzdG9ycyggY2FsbGJhY2sgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dXBkYXRlTWF0cml4KCkge1xuXG5cdFx0dGhpcy5tYXRyaXguY29tcG9zZSggdGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0ZXJuaW9uLCB0aGlzLnNjYWxlICk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKSB7XG5cblx0XHRpZiAoIHRoaXMubWF0cml4QXV0b1VwZGF0ZSApIHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHRpZiAoIHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSB8fCBmb3JjZSApIHtcblxuXHRcdFx0aWYgKCB0aGlzLnBhcmVudCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHR0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHRoaXMubWF0cml4ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCwgdGhpcy5tYXRyaXggKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0Zm9yY2UgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIGNoaWxkcmVuXG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjaGlsZHJlblsgaSBdLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR1cGRhdGVXb3JsZE1hdHJpeCggdXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4gKSB7XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmICggdXBkYXRlUGFyZW50cyA9PT0gdHJ1ZSAmJiBwYXJlbnQgIT09IG51bGwgKSB7XG5cblx0XHRcdHBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5tYXRyaXhBdXRvVXBkYXRlICkgdGhpcy51cGRhdGVNYXRyaXgoKTtcblxuXHRcdGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMubWF0cml4V29ybGQuY29weSggdGhpcy5tYXRyaXggKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyggdGhpcy5wYXJlbnQubWF0cml4V29ybGQsIHRoaXMubWF0cml4ICk7XG5cblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgY2hpbGRyZW5cblxuXHRcdGlmICggdXBkYXRlQ2hpbGRyZW4gPT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjaGlsZHJlblsgaSBdLnVwZGF0ZVdvcmxkTWF0cml4KCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTiggbWV0YSApIHtcblxuXHRcdC8vIG1ldGEgaXMgYSBzdHJpbmcgd2hlbiBjYWxsZWQgZnJvbSBKU09OLnN0cmluZ2lmeVxuXHRcdGNvbnN0IGlzUm9vdE9iamVjdCA9ICggbWV0YSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXRhID09PSAnc3RyaW5nJyApO1xuXG5cdFx0Y29uc3Qgb3V0cHV0ID0ge307XG5cblx0XHQvLyBtZXRhIGlzIGEgaGFzaCB1c2VkIHRvIGNvbGxlY3QgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLlxuXHRcdC8vIG5vdCBwcm92aWRpbmcgaXQgaW1wbGllcyB0aGF0IHRoaXMgaXMgdGhlIHJvb3Qgb2JqZWN0XG5cdFx0Ly8gYmVpbmcgc2VyaWFsaXplZC5cblx0XHRpZiAoIGlzUm9vdE9iamVjdCApIHtcblxuXHRcdFx0Ly8gaW5pdGlhbGl6ZSBtZXRhIG9ialxuXHRcdFx0bWV0YSA9IHtcblx0XHRcdFx0Z2VvbWV0cmllczoge30sXG5cdFx0XHRcdG1hdGVyaWFsczoge30sXG5cdFx0XHRcdHRleHR1cmVzOiB7fSxcblx0XHRcdFx0aW1hZ2VzOiB7fSxcblx0XHRcdFx0c2hhcGVzOiB7fSxcblx0XHRcdFx0c2tlbGV0b25zOiB7fSxcblx0XHRcdFx0YW5pbWF0aW9uczoge31cblx0XHRcdH07XG5cblx0XHRcdG91dHB1dC5tZXRhZGF0YSA9IHtcblx0XHRcdFx0dmVyc2lvbjogNC41LFxuXHRcdFx0XHR0eXBlOiAnT2JqZWN0Jyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnT2JqZWN0M0QudG9KU09OJ1xuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdC8vIHN0YW5kYXJkIE9iamVjdDNEIHNlcmlhbGl6YXRpb25cblxuXHRcdGNvbnN0IG9iamVjdCA9IHt9O1xuXG5cdFx0b2JqZWN0LnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0b2JqZWN0LnR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBvYmplY3QubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAoIHRoaXMuY2FzdFNoYWRvdyA9PT0gdHJ1ZSApIG9iamVjdC5jYXN0U2hhZG93ID0gdHJ1ZTtcblx0XHRpZiAoIHRoaXMucmVjZWl2ZVNoYWRvdyA9PT0gdHJ1ZSApIG9iamVjdC5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcblx0XHRpZiAoIHRoaXMudmlzaWJsZSA9PT0gZmFsc2UgKSBvYmplY3QudmlzaWJsZSA9IGZhbHNlO1xuXHRcdGlmICggdGhpcy5mcnVzdHVtQ3VsbGVkID09PSBmYWxzZSApIG9iamVjdC5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG5cdFx0aWYgKCB0aGlzLnJlbmRlck9yZGVyICE9PSAwICkgb2JqZWN0LnJlbmRlck9yZGVyID0gdGhpcy5yZW5kZXJPcmRlcjtcblx0XHRpZiAoIEpTT04uc3RyaW5naWZ5KCB0aGlzLnVzZXJEYXRhICkgIT09ICd7fScgKSBvYmplY3QudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhO1xuXG5cdFx0b2JqZWN0LmxheWVycyA9IHRoaXMubGF5ZXJzLm1hc2s7XG5cdFx0b2JqZWN0Lm1hdHJpeCA9IHRoaXMubWF0cml4LnRvQXJyYXkoKTtcblxuXHRcdGlmICggdGhpcy5tYXRyaXhBdXRvVXBkYXRlID09PSBmYWxzZSApIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHQvLyBvYmplY3Qgc3BlY2lmaWMgcHJvcGVydGllc1xuXG5cdFx0aWYgKCB0aGlzLmlzSW5zdGFuY2VkTWVzaCApIHtcblxuXHRcdFx0b2JqZWN0LnR5cGUgPSAnSW5zdGFuY2VkTWVzaCc7XG5cdFx0XHRvYmplY3QuY291bnQgPSB0aGlzLmNvdW50O1xuXHRcdFx0b2JqZWN0Lmluc3RhbmNlTWF0cml4ID0gdGhpcy5pbnN0YW5jZU1hdHJpeC50b0pTT04oKTtcblx0XHRcdGlmICggdGhpcy5pbnN0YW5jZUNvbG9yICE9PSBudWxsICkgb2JqZWN0Lmluc3RhbmNlQ29sb3IgPSB0aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCk7XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0ZnVuY3Rpb24gc2VyaWFsaXplKCBsaWJyYXJ5LCBlbGVtZW50ICkge1xuXG5cdFx0XHRpZiAoIGxpYnJhcnlbIGVsZW1lbnQudXVpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0bGlicmFyeVsgZWxlbWVudC51dWlkIF0gPSBlbGVtZW50LnRvSlNPTiggbWV0YSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtZW50LnV1aWQ7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaXNTY2VuZSApIHtcblxuXHRcdFx0aWYgKCB0aGlzLmJhY2tncm91bmQgKSB7XG5cblx0XHRcdFx0aWYgKCB0aGlzLmJhY2tncm91bmQuaXNDb2xvciApIHtcblxuXHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdFx0XHRvYmplY3QuYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdFx0b2JqZWN0LmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCB0aGlzLmlzTWVzaCB8fCB0aGlzLmlzTGluZSB8fCB0aGlzLmlzUG9pbnRzICkge1xuXG5cdFx0XHRvYmplY3QuZ2VvbWV0cnkgPSBzZXJpYWxpemUoIG1ldGEuZ2VvbWV0cmllcywgdGhpcy5nZW9tZXRyeSApO1xuXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO1xuXG5cdFx0XHRpZiAoIHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnNoYXBlcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnN0IHNoYXBlcyA9IHBhcmFtZXRlcnMuc2hhcGVzO1xuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggc2hhcGVzICkgKSB7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0c2VyaWFsaXplKCBtZXRhLnNoYXBlcywgc2hhcGUgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c2VyaWFsaXplKCBtZXRhLnNoYXBlcywgc2hhcGVzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaXNTa2lubmVkTWVzaCApIHtcblxuXHRcdFx0b2JqZWN0LmJpbmRNb2RlID0gdGhpcy5iaW5kTW9kZTtcblx0XHRcdG9iamVjdC5iaW5kTWF0cml4ID0gdGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKTtcblxuXHRcdFx0aWYgKCB0aGlzLnNrZWxldG9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0c2VyaWFsaXplKCBtZXRhLnNrZWxldG9ucywgdGhpcy5za2VsZXRvbiApO1xuXG5cdFx0XHRcdG9iamVjdC5za2VsZXRvbiA9IHRoaXMuc2tlbGV0b24udXVpZDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm1hdGVyaWFsICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdGhpcy5tYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdGNvbnN0IHV1aWRzID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5tYXRlcmlhbC5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0dXVpZHMucHVzaCggc2VyaWFsaXplKCBtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlhbFsgaSBdICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0b2JqZWN0Lm1hdGVyaWFsID0gdXVpZHM7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0b2JqZWN0Lm1hdGVyaWFsID0gc2VyaWFsaXplKCBtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlhbCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0aWYgKCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdG9iamVjdC5jaGlsZHJlbiA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRvYmplY3QuY2hpbGRyZW4ucHVzaCggdGhpcy5jaGlsZHJlblsgaSBdLnRvSlNPTiggbWV0YSApLm9iamVjdCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0aWYgKCB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0b2JqZWN0LmFuaW1hdGlvbnMgPSBbXTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5hbmltYXRpb25zLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRvYmplY3QuYW5pbWF0aW9ucy5wdXNoKCBzZXJpYWxpemUoIG1ldGEuYW5pbWF0aW9ucywgYW5pbWF0aW9uICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBpc1Jvb3RPYmplY3QgKSB7XG5cblx0XHRcdGNvbnN0IGdlb21ldHJpZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmdlb21ldHJpZXMgKTtcblx0XHRcdGNvbnN0IG1hdGVyaWFscyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEubWF0ZXJpYWxzICk7XG5cdFx0XHRjb25zdCB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEudGV4dHVyZXMgKTtcblx0XHRcdGNvbnN0IGltYWdlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEuaW1hZ2VzICk7XG5cdFx0XHRjb25zdCBzaGFwZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLnNoYXBlcyApO1xuXHRcdFx0Y29uc3Qgc2tlbGV0b25zID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5za2VsZXRvbnMgKTtcblx0XHRcdGNvbnN0IGFuaW1hdGlvbnMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmFuaW1hdGlvbnMgKTtcblxuXHRcdFx0aWYgKCBnZW9tZXRyaWVzLmxlbmd0aCA+IDAgKSBvdXRwdXQuZ2VvbWV0cmllcyA9IGdlb21ldHJpZXM7XG5cdFx0XHRpZiAoIG1hdGVyaWFscy5sZW5ndGggPiAwICkgb3V0cHV0Lm1hdGVyaWFscyA9IG1hdGVyaWFscztcblx0XHRcdGlmICggdGV4dHVyZXMubGVuZ3RoID4gMCApIG91dHB1dC50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXHRcdFx0aWYgKCBpbWFnZXMubGVuZ3RoID4gMCApIG91dHB1dC5pbWFnZXMgPSBpbWFnZXM7XG5cdFx0XHRpZiAoIHNoYXBlcy5sZW5ndGggPiAwICkgb3V0cHV0LnNoYXBlcyA9IHNoYXBlcztcblx0XHRcdGlmICggc2tlbGV0b25zLmxlbmd0aCA+IDAgKSBvdXRwdXQuc2tlbGV0b25zID0gc2tlbGV0b25zO1xuXHRcdFx0aWYgKCBhbmltYXRpb25zLmxlbmd0aCA+IDAgKSBvdXRwdXQuYW5pbWF0aW9ucyA9IGFuaW1hdGlvbnM7XG5cblx0XHR9XG5cblx0XHRvdXRwdXQub2JqZWN0ID0gb2JqZWN0O1xuXG5cdFx0cmV0dXJuIG91dHB1dDtcblxuXHRcdC8vIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBjYWNoZSBoYXNoXG5cdFx0Ly8gcmVtb3ZlIG1ldGFkYXRhIG9uIGVhY2ggaXRlbVxuXHRcdC8vIGFuZCByZXR1cm4gYXMgYXJyYXlcblx0XHRmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hlKCBjYWNoZSApIHtcblxuXHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0XHRmb3IgKCBjb25zdCBrZXkgaW4gY2FjaGUgKSB7XG5cblx0XHRcdFx0Y29uc3QgZGF0YSA9IGNhY2hlWyBrZXkgXTtcblx0XHRcdFx0ZGVsZXRlIGRhdGEubWV0YWRhdGE7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKCBkYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlcztcblxuXHRcdH1cblxuXHR9XG5cblx0Y2xvbmUoIHJlY3Vyc2l2ZSApIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMsIHJlY3Vyc2l2ZSApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSA9IHRydWUgKSB7XG5cblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcblxuXHRcdHRoaXMudXAuY29weSggc291cmNlLnVwICk7XG5cblx0XHR0aGlzLnBvc2l0aW9uLmNvcHkoIHNvdXJjZS5wb3NpdGlvbiApO1xuXHRcdHRoaXMucm90YXRpb24ub3JkZXIgPSBzb3VyY2Uucm90YXRpb24ub3JkZXI7XG5cdFx0dGhpcy5xdWF0ZXJuaW9uLmNvcHkoIHNvdXJjZS5xdWF0ZXJuaW9uICk7XG5cdFx0dGhpcy5zY2FsZS5jb3B5KCBzb3VyY2Uuc2NhbGUgKTtcblxuXHRcdHRoaXMubWF0cml4LmNvcHkoIHNvdXJjZS5tYXRyaXggKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHNvdXJjZS5tYXRyaXhXb3JsZCApO1xuXG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gc291cmNlLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7XG5cblx0XHR0aGlzLmxheWVycy5tYXNrID0gc291cmNlLmxheWVycy5tYXNrO1xuXHRcdHRoaXMudmlzaWJsZSA9IHNvdXJjZS52aXNpYmxlO1xuXG5cdFx0dGhpcy5jYXN0U2hhZG93ID0gc291cmNlLmNhc3RTaGFkb3c7XG5cdFx0dGhpcy5yZWNlaXZlU2hhZG93ID0gc291cmNlLnJlY2VpdmVTaGFkb3c7XG5cblx0XHR0aGlzLmZydXN0dW1DdWxsZWQgPSBzb3VyY2UuZnJ1c3R1bUN1bGxlZDtcblx0XHR0aGlzLnJlbmRlck9yZGVyID0gc291cmNlLnJlbmRlck9yZGVyO1xuXG5cdFx0dGhpcy51c2VyRGF0YSA9IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBzb3VyY2UudXNlckRhdGEgKSApO1xuXG5cdFx0aWYgKCByZWN1cnNpdmUgPT09IHRydWUgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHNvdXJjZS5jaGlsZHJlbi5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgY2hpbGQgPSBzb3VyY2UuY2hpbGRyZW5bIGkgXTtcblx0XHRcdFx0dGhpcy5hZGQoIGNoaWxkLmNsb25lKCkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk9iamVjdDNELkRlZmF1bHRVcCA9IG5ldyBWZWN0b3IzKCAwLCAxLCAwICk7XG5PYmplY3QzRC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSA9IHRydWU7XG5cbk9iamVjdDNELnByb3RvdHlwZS5pc09iamVjdDNEID0gdHJ1ZTtcblxuY29uc3QgX3YwJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjEkMyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MiQyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3YzJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92YWIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdmFjID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZiYyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92YXAgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdmJwID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZjcCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgVHJpYW5nbGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhID0gbmV3IFZlY3RvcjMoKSwgYiA9IG5ldyBWZWN0b3IzKCksIGMgPSBuZXcgVmVjdG9yMygpICkge1xuXG5cdFx0dGhpcy5hID0gYTtcblx0XHR0aGlzLmIgPSBiO1xuXHRcdHRoaXMuYyA9IGM7XG5cblx0fVxuXG5cdHN0YXRpYyBnZXROb3JtYWwoIGEsIGIsIGMsIHRhcmdldCApIHtcblxuXHRcdHRhcmdldC5zdWJWZWN0b3JzKCBjLCBiICk7XG5cdFx0X3YwJDEuc3ViVmVjdG9ycyggYSwgYiApO1xuXHRcdHRhcmdldC5jcm9zcyggX3YwJDEgKTtcblxuXHRcdGNvbnN0IHRhcmdldExlbmd0aFNxID0gdGFyZ2V0Lmxlbmd0aFNxKCk7XG5cdFx0aWYgKCB0YXJnZXRMZW5ndGhTcSA+IDAgKSB7XG5cblx0XHRcdHJldHVybiB0YXJnZXQubXVsdGlwbHlTY2FsYXIoIDEgLyBNYXRoLnNxcnQoIHRhcmdldExlbmd0aFNxICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KCAwLCAwLCAwICk7XG5cblx0fVxuXG5cdC8vIHN0YXRpYy9pbnN0YW5jZSBtZXRob2QgdG8gY2FsY3VsYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzXG5cdC8vIGJhc2VkIG9uOiBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5odG1sXG5cdHN0YXRpYyBnZXRCYXJ5Y29vcmQoIHBvaW50LCBhLCBiLCBjLCB0YXJnZXQgKSB7XG5cblx0XHRfdjAkMS5zdWJWZWN0b3JzKCBjLCBhICk7XG5cdFx0X3YxJDMuc3ViVmVjdG9ycyggYiwgYSApO1xuXHRcdF92MiQyLnN1YlZlY3RvcnMoIHBvaW50LCBhICk7XG5cblx0XHRjb25zdCBkb3QwMCA9IF92MCQxLmRvdCggX3YwJDEgKTtcblx0XHRjb25zdCBkb3QwMSA9IF92MCQxLmRvdCggX3YxJDMgKTtcblx0XHRjb25zdCBkb3QwMiA9IF92MCQxLmRvdCggX3YyJDIgKTtcblx0XHRjb25zdCBkb3QxMSA9IF92MSQzLmRvdCggX3YxJDMgKTtcblx0XHRjb25zdCBkb3QxMiA9IF92MSQzLmRvdCggX3YyJDIgKTtcblxuXHRcdGNvbnN0IGRlbm9tID0gKCBkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3QwMSApO1xuXG5cdFx0Ly8gY29sbGluZWFyIG9yIHNpbmd1bGFyIHRyaWFuZ2xlXG5cdFx0aWYgKCBkZW5vbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gYXJiaXRyYXJ5IGxvY2F0aW9uIG91dHNpZGUgb2YgdHJpYW5nbGU/XG5cdFx0XHQvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBiZXN0IGlkZWEsIG1heWJlIHNob3VsZCBiZSByZXR1cm5pbmcgdW5kZWZpbmVkXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LnNldCggLSAyLCAtIDEsIC0gMSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaW52RGVub20gPSAxIC8gZGVub207XG5cdFx0Y29uc3QgdSA9ICggZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIgKSAqIGludkRlbm9tO1xuXHRcdGNvbnN0IHYgPSAoIGRvdDAwICogZG90MTIgLSBkb3QwMSAqIGRvdDAyICkgKiBpbnZEZW5vbTtcblxuXHRcdC8vIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIG11c3QgYWx3YXlzIHN1bSB0byAxXG5cdFx0cmV0dXJuIHRhcmdldC5zZXQoIDEgLSB1IC0gdiwgdiwgdSApO1xuXG5cdH1cblxuXHRzdGF0aWMgY29udGFpbnNQb2ludCggcG9pbnQsIGEsIGIsIGMgKSB7XG5cblx0XHR0aGlzLmdldEJhcnljb29yZCggcG9pbnQsIGEsIGIsIGMsIF92MyQxICk7XG5cblx0XHRyZXR1cm4gKCBfdjMkMS54ID49IDAgKSAmJiAoIF92MyQxLnkgPj0gMCApICYmICggKCBfdjMkMS54ICsgX3YzJDEueSApIDw9IDEgKTtcblxuXHR9XG5cblx0c3RhdGljIGdldFVWKCBwb2ludCwgcDEsIHAyLCBwMywgdXYxLCB1djIsIHV2MywgdGFyZ2V0ICkge1xuXG5cdFx0dGhpcy5nZXRCYXJ5Y29vcmQoIHBvaW50LCBwMSwgcDIsIHAzLCBfdjMkMSApO1xuXG5cdFx0dGFyZ2V0LnNldCggMCwgMCApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIHV2MSwgX3YzJDEueCApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIHV2MiwgX3YzJDEueSApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIHV2MywgX3YzJDEueiApO1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0c3RhdGljIGlzRnJvbnRGYWNpbmcoIGEsIGIsIGMsIGRpcmVjdGlvbiApIHtcblxuXHRcdF92MCQxLnN1YlZlY3RvcnMoIGMsIGIgKTtcblx0XHRfdjEkMy5zdWJWZWN0b3JzKCBhLCBiICk7XG5cblx0XHQvLyBzdHJpY3RseSBmcm9udCBmYWNpbmdcblx0XHRyZXR1cm4gKCBfdjAkMS5jcm9zcyggX3YxJDMgKS5kb3QoIGRpcmVjdGlvbiApIDwgMCApID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdH1cblxuXHRzZXQoIGEsIGIsIGMgKSB7XG5cblx0XHR0aGlzLmEuY29weSggYSApO1xuXHRcdHRoaXMuYi5jb3B5KCBiICk7XG5cdFx0dGhpcy5jLmNvcHkoIGMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzQW5kSW5kaWNlcyggcG9pbnRzLCBpMCwgaTEsIGkyICkge1xuXG5cdFx0dGhpcy5hLmNvcHkoIHBvaW50c1sgaTAgXSApO1xuXHRcdHRoaXMuYi5jb3B5KCBwb2ludHNbIGkxIF0gKTtcblx0XHR0aGlzLmMuY29weSggcG9pbnRzWyBpMiBdICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXMoIGF0dHJpYnV0ZSwgaTAsIGkxLCBpMiApIHtcblxuXHRcdHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGkwICk7XG5cdFx0dGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaTEgKTtcblx0XHR0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpMiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCB0cmlhbmdsZSApIHtcblxuXHRcdHRoaXMuYS5jb3B5KCB0cmlhbmdsZS5hICk7XG5cdFx0dGhpcy5iLmNvcHkoIHRyaWFuZ2xlLmIgKTtcblx0XHR0aGlzLmMuY29weSggdHJpYW5nbGUuYyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldEFyZWEoKSB7XG5cblx0XHRfdjAkMS5zdWJWZWN0b3JzKCB0aGlzLmMsIHRoaXMuYiApO1xuXHRcdF92MSQzLnN1YlZlY3RvcnMoIHRoaXMuYSwgdGhpcy5iICk7XG5cblx0XHRyZXR1cm4gX3YwJDEuY3Jvc3MoIF92MSQzICkubGVuZ3RoKCkgKiAwLjU7XG5cblx0fVxuXG5cdGdldE1pZHBvaW50KCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuYSwgdGhpcy5iICkuYWRkKCB0aGlzLmMgKS5tdWx0aXBseVNjYWxhciggMSAvIDMgKTtcblxuXHR9XG5cblx0Z2V0Tm9ybWFsKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gVHJpYW5nbGUuZ2V0Tm9ybWFsKCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0YXJnZXQgKTtcblxuXHR9XG5cblx0Z2V0UGxhbmUoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jICk7XG5cblx0fVxuXG5cdGdldEJhcnljb29yZCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdHJldHVybiBUcmlhbmdsZS5nZXRCYXJ5Y29vcmQoIHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0YXJnZXQgKTtcblxuXHR9XG5cblx0Z2V0VVYoIHBvaW50LCB1djEsIHV2MiwgdXYzLCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gVHJpYW5nbGUuZ2V0VVYoIHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB1djEsIHV2MiwgdXYzLCB0YXJnZXQgKTtcblxuXHR9XG5cblx0Y29udGFpbnNQb2ludCggcG9pbnQgKSB7XG5cblx0XHRyZXR1cm4gVHJpYW5nbGUuY29udGFpbnNQb2ludCggcG9pbnQsIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMgKTtcblxuXHR9XG5cblx0aXNGcm9udEZhY2luZyggZGlyZWN0aW9uICkge1xuXG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmlzRnJvbnRGYWNpbmcoIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIGRpcmVjdGlvbiApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KCBib3ggKSB7XG5cblx0XHRyZXR1cm4gYm94LmludGVyc2VjdHNUcmlhbmdsZSggdGhpcyApO1xuXG5cdH1cblxuXHRjbG9zZXN0UG9pbnRUb1BvaW50KCBwLCB0YXJnZXQgKSB7XG5cblx0XHRjb25zdCBhID0gdGhpcy5hLCBiID0gdGhpcy5iLCBjID0gdGhpcy5jO1xuXHRcdGxldCB2LCB3O1xuXG5cdFx0Ly8gYWxnb3JpdGhtIHRoYW5rcyB0byBSZWFsLVRpbWUgQ29sbGlzaW9uIERldGVjdGlvbiBieSBDaHJpc3RlciBFcmljc29uLFxuXHRcdC8vIHB1Ymxpc2hlZCBieSBNb3JnYW4gS2F1Zm1hbm4gUHVibGlzaGVycywgKGMpIDIwMDUgRWxzZXZpZXIgSW5jLixcblx0XHQvLyB1bmRlciB0aGUgYWNjb21wYW55aW5nIGxpY2Vuc2U7IHNlZSBjaGFwdGVyIDUuMS41IGZvciBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblx0XHQvLyBiYXNpY2FsbHksIHdlJ3JlIGRpc3Rpbmd1aXNoaW5nIHdoaWNoIG9mIHRoZSB2b3Jvbm9pIHJlZ2lvbnMgb2YgdGhlIHRyaWFuZ2xlXG5cdFx0Ly8gdGhlIHBvaW50IGxpZXMgaW4gd2l0aCB0aGUgbWluaW11bSBhbW91bnQgb2YgcmVkdW5kYW50IGNvbXB1dGF0aW9uLlxuXG5cdFx0X3ZhYi5zdWJWZWN0b3JzKCBiLCBhICk7XG5cdFx0X3ZhYy5zdWJWZWN0b3JzKCBjLCBhICk7XG5cdFx0X3ZhcC5zdWJWZWN0b3JzKCBwLCBhICk7XG5cdFx0Y29uc3QgZDEgPSBfdmFiLmRvdCggX3ZhcCApO1xuXHRcdGNvbnN0IGQyID0gX3ZhYy5kb3QoIF92YXAgKTtcblx0XHRpZiAoIGQxIDw9IDAgJiYgZDIgPD0gMCApIHtcblxuXHRcdFx0Ly8gdmVydGV4IHJlZ2lvbiBvZiBBOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEsIDAsIDApXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGEgKTtcblxuXHRcdH1cblxuXHRcdF92YnAuc3ViVmVjdG9ycyggcCwgYiApO1xuXHRcdGNvbnN0IGQzID0gX3ZhYi5kb3QoIF92YnAgKTtcblx0XHRjb25zdCBkNCA9IF92YWMuZG90KCBfdmJwICk7XG5cdFx0aWYgKCBkMyA+PSAwICYmIGQ0IDw9IGQzICkge1xuXG5cdFx0XHQvLyB2ZXJ0ZXggcmVnaW9uIG9mIEI7IGJhcnljZW50cmljIGNvb3JkcyAoMCwgMSwgMClcblx0XHRcdHJldHVybiB0YXJnZXQuY29weSggYiApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdmMgPSBkMSAqIGQ0IC0gZDMgKiBkMjtcblx0XHRpZiAoIHZjIDw9IDAgJiYgZDEgPj0gMCAmJiBkMyA8PSAwICkge1xuXG5cdFx0XHR2ID0gZDEgLyAoIGQxIC0gZDMgKTtcblx0XHRcdC8vIGVkZ2UgcmVnaW9uIG9mIEFCOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEtdiwgdiwgMClcblx0XHRcdHJldHVybiB0YXJnZXQuY29weSggYSApLmFkZFNjYWxlZFZlY3RvciggX3ZhYiwgdiApO1xuXG5cdFx0fVxuXG5cdFx0X3ZjcC5zdWJWZWN0b3JzKCBwLCBjICk7XG5cdFx0Y29uc3QgZDUgPSBfdmFiLmRvdCggX3ZjcCApO1xuXHRcdGNvbnN0IGQ2ID0gX3ZhYy5kb3QoIF92Y3AgKTtcblx0XHRpZiAoIGQ2ID49IDAgJiYgZDUgPD0gZDYgKSB7XG5cblx0XHRcdC8vIHZlcnRleCByZWdpb24gb2YgQzsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAwLCAxKVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBjICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCB2YiA9IGQ1ICogZDIgLSBkMSAqIGQ2O1xuXHRcdGlmICggdmIgPD0gMCAmJiBkMiA+PSAwICYmIGQ2IDw9IDAgKSB7XG5cblx0XHRcdHcgPSBkMiAvICggZDIgLSBkNiApO1xuXHRcdFx0Ly8gZWRnZSByZWdpb24gb2YgQUM7IGJhcnljZW50cmljIGNvb3JkcyAoMS13LCAwLCB3KVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBhICkuYWRkU2NhbGVkVmVjdG9yKCBfdmFjLCB3ICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCB2YSA9IGQzICogZDYgLSBkNSAqIGQ0O1xuXHRcdGlmICggdmEgPD0gMCAmJiAoIGQ0IC0gZDMgKSA+PSAwICYmICggZDUgLSBkNiApID49IDAgKSB7XG5cblx0XHRcdF92YmMuc3ViVmVjdG9ycyggYywgYiApO1xuXHRcdFx0dyA9ICggZDQgLSBkMyApIC8gKCAoIGQ0IC0gZDMgKSArICggZDUgLSBkNiApICk7XG5cdFx0XHQvLyBlZGdlIHJlZ2lvbiBvZiBCQzsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAxLXcsIHcpXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGIgKS5hZGRTY2FsZWRWZWN0b3IoIF92YmMsIHcgKTsgLy8gZWRnZSByZWdpb24gb2YgQkNcblxuXHRcdH1cblxuXHRcdC8vIGZhY2UgcmVnaW9uXG5cdFx0Y29uc3QgZGVub20gPSAxIC8gKCB2YSArIHZiICsgdmMgKTtcblx0XHQvLyB1ID0gdmEgKiBkZW5vbVxuXHRcdHYgPSB2YiAqIGRlbm9tO1xuXHRcdHcgPSB2YyAqIGRlbm9tO1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBhICkuYWRkU2NhbGVkVmVjdG9yKCBfdmFiLCB2ICkuYWRkU2NhbGVkVmVjdG9yKCBfdmFjLCB3ICk7XG5cblx0fVxuXG5cdGVxdWFscyggdHJpYW5nbGUgKSB7XG5cblx0XHRyZXR1cm4gdHJpYW5nbGUuYS5lcXVhbHMoIHRoaXMuYSApICYmIHRyaWFuZ2xlLmIuZXF1YWxzKCB0aGlzLmIgKSAmJiB0cmlhbmdsZS5jLmVxdWFscyggdGhpcy5jICk7XG5cblx0fVxuXG59XG5cbmxldCBtYXRlcmlhbElkID0gMDtcblxuY2xhc3MgTWF0ZXJpYWwgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogbWF0ZXJpYWxJZCArKyB9ICk7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdHRoaXMudHlwZSA9ICdNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmZvZyA9IHRydWU7XG5cblx0XHR0aGlzLmJsZW5kaW5nID0gTm9ybWFsQmxlbmRpbmc7XG5cdFx0dGhpcy5zaWRlID0gRnJvbnRTaWRlO1xuXHRcdHRoaXMudmVydGV4Q29sb3JzID0gZmFsc2U7XG5cblx0XHR0aGlzLm9wYWNpdHkgPSAxO1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuXHRcdHRoaXMuYmxlbmRTcmMgPSBTcmNBbHBoYUZhY3Rvcjtcblx0XHR0aGlzLmJsZW5kRHN0ID0gT25lTWludXNTcmNBbHBoYUZhY3Rvcjtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb24gPSBBZGRFcXVhdGlvbjtcblx0XHR0aGlzLmJsZW5kU3JjQWxwaGEgPSBudWxsO1xuXHRcdHRoaXMuYmxlbmREc3RBbHBoYSA9IG51bGw7XG5cdFx0dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGEgPSBudWxsO1xuXG5cdFx0dGhpcy5kZXB0aEZ1bmMgPSBMZXNzRXF1YWxEZXB0aDtcblx0XHR0aGlzLmRlcHRoVGVzdCA9IHRydWU7XG5cdFx0dGhpcy5kZXB0aFdyaXRlID0gdHJ1ZTtcblxuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IDB4ZmY7XG5cdFx0dGhpcy5zdGVuY2lsRnVuYyA9IEFsd2F5c1N0ZW5jaWxGdW5jO1xuXHRcdHRoaXMuc3RlbmNpbFJlZiA9IDA7XG5cdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSAweGZmO1xuXHRcdHRoaXMuc3RlbmNpbEZhaWwgPSBLZWVwU3RlbmNpbE9wO1xuXHRcdHRoaXMuc3RlbmNpbFpGYWlsID0gS2VlcFN0ZW5jaWxPcDtcblx0XHR0aGlzLnN0ZW5jaWxaUGFzcyA9IEtlZXBTdGVuY2lsT3A7XG5cdFx0dGhpcy5zdGVuY2lsV3JpdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuY2xpcHBpbmdQbGFuZXMgPSBudWxsO1xuXHRcdHRoaXMuY2xpcEludGVyc2VjdGlvbiA9IGZhbHNlO1xuXHRcdHRoaXMuY2xpcFNoYWRvd3MgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2hhZG93U2lkZSA9IG51bGw7XG5cblx0XHR0aGlzLmNvbG9yV3JpdGUgPSB0cnVlO1xuXHRcdHRoaXMuYWxwaGFXcml0ZSA9IHRydWU7XG5cblx0XHR0aGlzLnByZWNpc2lvbiA9IG51bGw7IC8vIG92ZXJyaWRlIHRoZSByZW5kZXJlcidzIGRlZmF1bHQgcHJlY2lzaW9uIGZvciB0aGlzIG1hdGVyaWFsXG5cblx0XHR0aGlzLnBvbHlnb25PZmZzZXQgPSBmYWxzZTtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwO1xuXHRcdHRoaXMucG9seWdvbk9mZnNldFVuaXRzID0gMDtcblxuXHRcdHRoaXMuZGl0aGVyaW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLmFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlO1xuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXG5cdFx0dGhpcy50b25lTWFwcGVkID0gdHJ1ZTtcblxuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblxuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cblx0XHR0aGlzLl9hbHBoYVRlc3QgPSAwO1xuXG5cdH1cblxuXHRnZXQgYWxwaGFUZXN0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2FscGhhVGVzdDtcblxuXHR9XG5cblx0c2V0IGFscGhhVGVzdCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXMuX2FscGhhVGVzdCA+IDAgIT09IHZhbHVlID4gMCApIHtcblxuXHRcdFx0dGhpcy52ZXJzaW9uICsrO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fYWxwaGFUZXN0ID0gdmFsdWU7XG5cblx0fVxuXG5cdG9uQnVpbGQoIC8qIHNoYWRlcm9iamVjdCwgcmVuZGVyZXIgKi8gKSB7fVxuXG5cdG9uQmVmb3JlUmVuZGVyKCAvKiByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG9iamVjdCwgZ3JvdXAgKi8gKSB7fVxuXG5cdG9uQmVmb3JlQ29tcGlsZSggLyogc2hhZGVyb2JqZWN0LCByZW5kZXJlciAqLyApIHt9XG5cblx0Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCk7XG5cblx0fVxuXG5cdHNldFZhbHVlcyggdmFsdWVzICkge1xuXG5cdFx0aWYgKCB2YWx1ZXMgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdGZvciAoIGNvbnN0IGtleSBpbiB2YWx1ZXMgKSB7XG5cblx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gdmFsdWVzWyBrZXkgXTtcblxuXHRcdFx0aWYgKCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVyaWFsOiBcXCcnICsga2V5ICsgJ1xcJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLicgKTtcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgaWYgc2hhZGluZyBpcyBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yXG5cdFx0XHRpZiAoIGtleSA9PT0gJ3NoYWRpbmcnICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyApO1xuXHRcdFx0XHR0aGlzLmZsYXRTaGFkaW5nID0gKCBuZXdWYWx1ZSA9PT0gRmxhdFNoYWRpbmcgKSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpc1sga2V5IF07XG5cblx0XHRcdGlmICggY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IFxcJycgKyBrZXkgKyAnXFwnIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuJyApO1xuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNDb2xvciApIHtcblxuXHRcdFx0XHRjdXJyZW50VmFsdWUuc2V0KCBuZXdWYWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCAoIGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNWZWN0b3IzICkgJiYgKCBuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5pc1ZlY3RvcjMgKSApIHtcblxuXHRcdFx0XHRjdXJyZW50VmFsdWUuY29weSggbmV3VmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0aGlzWyBrZXkgXSA9IG5ld1ZhbHVlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTiggbWV0YSApIHtcblxuXHRcdGNvbnN0IGlzUm9vdCA9ICggbWV0YSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXRhID09PSAnc3RyaW5nJyApO1xuXG5cdFx0aWYgKCBpc1Jvb3QgKSB7XG5cblx0XHRcdG1ldGEgPSB7XG5cdFx0XHRcdHRleHR1cmVzOiB7fSxcblx0XHRcdFx0aW1hZ2VzOiB7fVxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdNYXRlcmlhbCcsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ01hdGVyaWFsLnRvSlNPTidcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gc3RhbmRhcmQgTWF0ZXJpYWwgc2VyaWFsaXphdGlvblxuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRkYXRhLnR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7XG5cblx0XHRpZiAoIHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvci5pc0NvbG9yICkgZGF0YS5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7XG5cblx0XHRpZiAoIHRoaXMucm91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLnJvdWdobmVzcyA9IHRoaXMucm91Z2huZXNzO1xuXHRcdGlmICggdGhpcy5tZXRhbG5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEubWV0YWxuZXNzID0gdGhpcy5tZXRhbG5lc3M7XG5cblx0XHRpZiAoIHRoaXMuc2hlZW4gIT09IHVuZGVmaW5lZCApIGRhdGEuc2hlZW4gPSB0aGlzLnNoZWVuO1xuXHRcdGlmICggdGhpcy5zaGVlbkNvbG9yICYmIHRoaXMuc2hlZW5Db2xvci5pc0NvbG9yICkgZGF0YS5zaGVlbkNvbG9yID0gdGhpcy5zaGVlbkNvbG9yLmdldEhleCgpO1xuXHRcdGlmICggdGhpcy5zaGVlblJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaGVlblJvdWdobmVzcyA9IHRoaXMuc2hlZW5Sb3VnaG5lc3M7XG5cdFx0aWYgKCB0aGlzLmVtaXNzaXZlICYmIHRoaXMuZW1pc3NpdmUuaXNDb2xvciApIGRhdGEuZW1pc3NpdmUgPSB0aGlzLmVtaXNzaXZlLmdldEhleCgpO1xuXHRcdGlmICggdGhpcy5lbWlzc2l2ZUludGVuc2l0eSAmJiB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSAxICkgZGF0YS5lbWlzc2l2ZUludGVuc2l0eSA9IHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk7XG5cblx0XHRpZiAoIHRoaXMuc3BlY3VsYXIgJiYgdGhpcy5zcGVjdWxhci5pc0NvbG9yICkgZGF0YS5zcGVjdWxhciA9IHRoaXMuc3BlY3VsYXIuZ2V0SGV4KCk7XG5cdFx0aWYgKCB0aGlzLnNwZWN1bGFySW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBkYXRhLnNwZWN1bGFySW50ZW5zaXR5ID0gdGhpcy5zcGVjdWxhckludGVuc2l0eTtcblx0XHRpZiAoIHRoaXMuc3BlY3VsYXJDb2xvciAmJiB0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciApIGRhdGEuc3BlY3VsYXJDb2xvciA9IHRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKTtcblx0XHRpZiAoIHRoaXMuc2hpbmluZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLnNoaW5pbmVzcyA9IHRoaXMuc2hpbmluZXNzO1xuXHRcdGlmICggdGhpcy5jbGVhcmNvYXQgIT09IHVuZGVmaW5lZCApIGRhdGEuY2xlYXJjb2F0ID0gdGhpcy5jbGVhcmNvYXQ7XG5cdFx0aWYgKCB0aGlzLmNsZWFyY29hdFJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5jbGVhcmNvYXRSb3VnaG5lc3MgPSB0aGlzLmNsZWFyY29hdFJvdWdobmVzcztcblxuXHRcdGlmICggdGhpcy5jbGVhcmNvYXRNYXAgJiYgdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmNsZWFyY29hdE1hcCA9IHRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwICYmIHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPSB0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCAmJiB0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEuY2xlYXJjb2F0Tm9ybWFsTWFwID0gdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRcdGRhdGEuY2xlYXJjb2F0Tm9ybWFsU2NhbGUgPSB0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5tYXAgJiYgdGhpcy5tYXAuaXNUZXh0dXJlICkgZGF0YS5tYXAgPSB0aGlzLm1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5tYXRjYXAgJiYgdGhpcy5tYXRjYXAuaXNUZXh0dXJlICkgZGF0YS5tYXRjYXAgPSB0aGlzLm1hdGNhcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5hbHBoYU1hcCAmJiB0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSApIGRhdGEuYWxwaGFNYXAgPSB0aGlzLmFscGhhTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cblx0XHRpZiAoIHRoaXMubGlnaHRNYXAgJiYgdGhpcy5saWdodE1hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEubGlnaHRNYXAgPSB0aGlzLmxpZ2h0TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLmxpZ2h0TWFwSW50ZW5zaXR5ID0gdGhpcy5saWdodE1hcEludGVuc2l0eTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5hb01hcCAmJiB0aGlzLmFvTWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5hb01hcCA9IHRoaXMuYW9NYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRcdGRhdGEuYW9NYXBJbnRlbnNpdHkgPSB0aGlzLmFvTWFwSW50ZW5zaXR5O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmJ1bXBNYXAgJiYgdGhpcy5idW1wTWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5idW1wTWFwID0gdGhpcy5idW1wTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLmJ1bXBTY2FsZSA9IHRoaXMuYnVtcFNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm5vcm1hbE1hcCAmJiB0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEubm9ybWFsTWFwID0gdGhpcy5ub3JtYWxNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRcdGRhdGEubm9ybWFsTWFwVHlwZSA9IHRoaXMubm9ybWFsTWFwVHlwZTtcblx0XHRcdGRhdGEubm9ybWFsU2NhbGUgPSB0aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5kaXNwbGFjZW1lbnRNYXAgJiYgdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudE1hcCA9IHRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudFNjYWxlID0gdGhpcy5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdGRhdGEuZGlzcGxhY2VtZW50QmlhcyA9IHRoaXMuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5yb3VnaG5lc3NNYXAgJiYgdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlICkgZGF0YS5yb3VnaG5lc3NNYXAgPSB0aGlzLnJvdWdobmVzc01hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5tZXRhbG5lc3NNYXAgJiYgdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlICkgZGF0YS5tZXRhbG5lc3NNYXAgPSB0aGlzLm1ldGFsbmVzc01hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0aWYgKCB0aGlzLmVtaXNzaXZlTWFwICYmIHRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlICkgZGF0YS5lbWlzc2l2ZU1hcCA9IHRoaXMuZW1pc3NpdmVNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMuc3BlY3VsYXJNYXAgJiYgdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUgKSBkYXRhLnNwZWN1bGFyTWFwID0gdGhpcy5zcGVjdWxhck1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCAmJiB0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSApIGRhdGEuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSB0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0aWYgKCB0aGlzLnNwZWN1bGFyQ29sb3JNYXAgJiYgdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSApIGRhdGEuc3BlY3VsYXJDb2xvck1hcCA9IHRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0aWYgKCB0aGlzLmVudk1hcCAmJiB0aGlzLmVudk1hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEuZW52TWFwID0gdGhpcy5lbnZNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdFx0aWYgKCB0aGlzLmNvbWJpbmUgIT09IHVuZGVmaW5lZCApIGRhdGEuY29tYmluZSA9IHRoaXMuY29tYmluZTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5lbnZNYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIGRhdGEuZW52TWFwSW50ZW5zaXR5ID0gdGhpcy5lbnZNYXBJbnRlbnNpdHk7XG5cdFx0aWYgKCB0aGlzLnJlZmxlY3Rpdml0eSAhPT0gdW5kZWZpbmVkICkgZGF0YS5yZWZsZWN0aXZpdHkgPSB0aGlzLnJlZmxlY3Rpdml0eTtcblx0XHRpZiAoIHRoaXMucmVmcmFjdGlvblJhdGlvICE9PSB1bmRlZmluZWQgKSBkYXRhLnJlZnJhY3Rpb25SYXRpbyA9IHRoaXMucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0aWYgKCB0aGlzLmdyYWRpZW50TWFwICYmIHRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmdyYWRpZW50TWFwID0gdGhpcy5ncmFkaWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnRyYW5zbWlzc2lvbiAhPT0gdW5kZWZpbmVkICkgZGF0YS50cmFuc21pc3Npb24gPSB0aGlzLnRyYW5zbWlzc2lvbjtcblx0XHRpZiAoIHRoaXMudHJhbnNtaXNzaW9uTWFwICYmIHRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSApIGRhdGEudHJhbnNtaXNzaW9uTWFwID0gdGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMudGhpY2tuZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLnRoaWNrbmVzcyA9IHRoaXMudGhpY2tuZXNzO1xuXHRcdGlmICggdGhpcy50aGlja25lc3NNYXAgJiYgdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlICkgZGF0YS50aGlja25lc3NNYXAgPSB0aGlzLnRoaWNrbmVzc01hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlICE9PSB1bmRlZmluZWQgKSBkYXRhLmF0dGVudWF0aW9uRGlzdGFuY2UgPSB0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U7XG5cdFx0aWYgKCB0aGlzLmF0dGVudWF0aW9uQ29sb3IgIT09IHVuZGVmaW5lZCApIGRhdGEuYXR0ZW51YXRpb25Db2xvciA9IHRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKTtcblxuXHRcdGlmICggdGhpcy5zaXplICE9PSB1bmRlZmluZWQgKSBkYXRhLnNpemUgPSB0aGlzLnNpemU7XG5cdFx0aWYgKCB0aGlzLnNoYWRvd1NpZGUgIT09IG51bGwgKSBkYXRhLnNoYWRvd1NpZGUgPSB0aGlzLnNoYWRvd1NpZGU7XG5cdFx0aWYgKCB0aGlzLnNpemVBdHRlbnVhdGlvbiAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaXplQXR0ZW51YXRpb24gPSB0aGlzLnNpemVBdHRlbnVhdGlvbjtcblxuXHRcdGlmICggdGhpcy5ibGVuZGluZyAhPT0gTm9ybWFsQmxlbmRpbmcgKSBkYXRhLmJsZW5kaW5nID0gdGhpcy5ibGVuZGluZztcblx0XHRpZiAoIHRoaXMuc2lkZSAhPT0gRnJvbnRTaWRlICkgZGF0YS5zaWRlID0gdGhpcy5zaWRlO1xuXHRcdGlmICggdGhpcy52ZXJ0ZXhDb2xvcnMgKSBkYXRhLnZlcnRleENvbG9ycyA9IHRydWU7XG5cblx0XHRpZiAoIHRoaXMub3BhY2l0eSA8IDEgKSBkYXRhLm9wYWNpdHkgPSB0aGlzLm9wYWNpdHk7XG5cdFx0aWYgKCB0aGlzLnRyYW5zcGFyZW50ID09PSB0cnVlICkgZGF0YS50cmFuc3BhcmVudCA9IHRoaXMudHJhbnNwYXJlbnQ7XG5cblx0XHRkYXRhLmRlcHRoRnVuYyA9IHRoaXMuZGVwdGhGdW5jO1xuXHRcdGRhdGEuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XG5cdFx0ZGF0YS5kZXB0aFdyaXRlID0gdGhpcy5kZXB0aFdyaXRlO1xuXHRcdGRhdGEuY29sb3JXcml0ZSA9IHRoaXMuY29sb3JXcml0ZTtcblx0XHRkYXRhLmFscGhhV3JpdGUgPSB0aGlzLmFscGhhV3JpdGU7XG5cblx0XHRkYXRhLnN0ZW5jaWxXcml0ZSA9IHRoaXMuc3RlbmNpbFdyaXRlO1xuXHRcdGRhdGEuc3RlbmNpbFdyaXRlTWFzayA9IHRoaXMuc3RlbmNpbFdyaXRlTWFzaztcblx0XHRkYXRhLnN0ZW5jaWxGdW5jID0gdGhpcy5zdGVuY2lsRnVuYztcblx0XHRkYXRhLnN0ZW5jaWxSZWYgPSB0aGlzLnN0ZW5jaWxSZWY7XG5cdFx0ZGF0YS5zdGVuY2lsRnVuY01hc2sgPSB0aGlzLnN0ZW5jaWxGdW5jTWFzaztcblx0XHRkYXRhLnN0ZW5jaWxGYWlsID0gdGhpcy5zdGVuY2lsRmFpbDtcblx0XHRkYXRhLnN0ZW5jaWxaRmFpbCA9IHRoaXMuc3RlbmNpbFpGYWlsO1xuXHRcdGRhdGEuc3RlbmNpbFpQYXNzID0gdGhpcy5zdGVuY2lsWlBhc3M7XG5cblx0XHQvLyByb3RhdGlvbiAoU3ByaXRlTWF0ZXJpYWwpXG5cdFx0aWYgKCB0aGlzLnJvdGF0aW9uICYmIHRoaXMucm90YXRpb24gIT09IDAgKSBkYXRhLnJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblxuXHRcdGlmICggdGhpcy5wb2x5Z29uT2Zmc2V0ID09PSB0cnVlICkgZGF0YS5wb2x5Z29uT2Zmc2V0ID0gdHJ1ZTtcblx0XHRpZiAoIHRoaXMucG9seWdvbk9mZnNldEZhY3RvciAhPT0gMCApIGRhdGEucG9seWdvbk9mZnNldEZhY3RvciA9IHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcjtcblx0XHRpZiAoIHRoaXMucG9seWdvbk9mZnNldFVuaXRzICE9PSAwICkgZGF0YS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB0aGlzLnBvbHlnb25PZmZzZXRVbml0cztcblxuXHRcdGlmICggdGhpcy5saW5ld2lkdGggJiYgdGhpcy5saW5ld2lkdGggIT09IDEgKSBkYXRhLmxpbmV3aWR0aCA9IHRoaXMubGluZXdpZHRoO1xuXHRcdGlmICggdGhpcy5kYXNoU2l6ZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5kYXNoU2l6ZSA9IHRoaXMuZGFzaFNpemU7XG5cdFx0aWYgKCB0aGlzLmdhcFNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEuZ2FwU2l6ZSA9IHRoaXMuZ2FwU2l6ZTtcblx0XHRpZiAoIHRoaXMuc2NhbGUgIT09IHVuZGVmaW5lZCApIGRhdGEuc2NhbGUgPSB0aGlzLnNjYWxlO1xuXG5cdFx0aWYgKCB0aGlzLmRpdGhlcmluZyA9PT0gdHJ1ZSApIGRhdGEuZGl0aGVyaW5nID0gdHJ1ZTtcblxuXHRcdGlmICggdGhpcy5hbHBoYVRlc3QgPiAwICkgZGF0YS5hbHBoYVRlc3QgPSB0aGlzLmFscGhhVGVzdDtcblx0XHRpZiAoIHRoaXMuYWxwaGFUb0NvdmVyYWdlID09PSB0cnVlICkgZGF0YS5hbHBoYVRvQ292ZXJhZ2UgPSB0aGlzLmFscGhhVG9Db3ZlcmFnZTtcblx0XHRpZiAoIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID09PSB0cnVlICkgZGF0YS5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0aGlzLnByZW11bHRpcGxpZWRBbHBoYTtcblxuXHRcdGlmICggdGhpcy53aXJlZnJhbWUgPT09IHRydWUgKSBkYXRhLndpcmVmcmFtZSA9IHRoaXMud2lyZWZyYW1lO1xuXHRcdGlmICggdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPiAxICkgZGF0YS53aXJlZnJhbWVMaW5ld2lkdGggPSB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRpZiAoIHRoaXMud2lyZWZyYW1lTGluZWNhcCAhPT0gJ3JvdW5kJyApIGRhdGEud2lyZWZyYW1lTGluZWNhcCA9IHRoaXMud2lyZWZyYW1lTGluZWNhcDtcblx0XHRpZiAoIHRoaXMud2lyZWZyYW1lTGluZWpvaW4gIT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVqb2luID0gdGhpcy53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdGlmICggdGhpcy5mbGF0U2hhZGluZyA9PT0gdHJ1ZSApIGRhdGEuZmxhdFNoYWRpbmcgPSB0aGlzLmZsYXRTaGFkaW5nO1xuXG5cdFx0aWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgZGF0YS52aXNpYmxlID0gZmFsc2U7XG5cblx0XHRpZiAoIHRoaXMudG9uZU1hcHBlZCA9PT0gZmFsc2UgKSBkYXRhLnRvbmVNYXBwZWQgPSBmYWxzZTtcblxuXHRcdGlmICggSlNPTi5zdHJpbmdpZnkoIHRoaXMudXNlckRhdGEgKSAhPT0gJ3t9JyApIGRhdGEudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhO1xuXG5cdFx0Ly8gVE9ETzogQ29waWVkIGZyb20gT2JqZWN0M0QudG9KU09OXG5cblx0XHRmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hlKCBjYWNoZSApIHtcblxuXHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdGZvciAoIGNvbnN0IGtleSBpbiBjYWNoZSApIHtcblxuXHRcdFx0XHRjb25zdCBkYXRhID0gY2FjaGVbIGtleSBdO1xuXHRcdFx0XHRkZWxldGUgZGF0YS5tZXRhZGF0YTtcblx0XHRcdFx0dmFsdWVzLnB1c2goIGRhdGEgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBpc1Jvb3QgKSB7XG5cblx0XHRcdGNvbnN0IHRleHR1cmVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS50ZXh0dXJlcyApO1xuXHRcdFx0Y29uc3QgaW1hZ2VzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5pbWFnZXMgKTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlcy5sZW5ndGggPiAwICkgZGF0YS50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXHRcdFx0aWYgKCBpbWFnZXMubGVuZ3RoID4gMCApIGRhdGEuaW1hZ2VzID0gaW1hZ2VzO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcblxuXHRcdHRoaXMuZm9nID0gc291cmNlLmZvZztcblxuXHRcdHRoaXMuYmxlbmRpbmcgPSBzb3VyY2UuYmxlbmRpbmc7XG5cdFx0dGhpcy5zaWRlID0gc291cmNlLnNpZGU7XG5cdFx0dGhpcy52ZXJ0ZXhDb2xvcnMgPSBzb3VyY2UudmVydGV4Q29sb3JzO1xuXG5cdFx0dGhpcy5vcGFjaXR5ID0gc291cmNlLm9wYWNpdHk7XG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IHNvdXJjZS50cmFuc3BhcmVudDtcblxuXHRcdHRoaXMuYmxlbmRTcmMgPSBzb3VyY2UuYmxlbmRTcmM7XG5cdFx0dGhpcy5ibGVuZERzdCA9IHNvdXJjZS5ibGVuZERzdDtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb24gPSBzb3VyY2UuYmxlbmRFcXVhdGlvbjtcblx0XHR0aGlzLmJsZW5kU3JjQWxwaGEgPSBzb3VyY2UuYmxlbmRTcmNBbHBoYTtcblx0XHR0aGlzLmJsZW5kRHN0QWxwaGEgPSBzb3VyY2UuYmxlbmREc3RBbHBoYTtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb25BbHBoYSA9IHNvdXJjZS5ibGVuZEVxdWF0aW9uQWxwaGE7XG5cblx0XHR0aGlzLmRlcHRoRnVuYyA9IHNvdXJjZS5kZXB0aEZ1bmM7XG5cdFx0dGhpcy5kZXB0aFRlc3QgPSBzb3VyY2UuZGVwdGhUZXN0O1xuXHRcdHRoaXMuZGVwdGhXcml0ZSA9IHNvdXJjZS5kZXB0aFdyaXRlO1xuXG5cdFx0dGhpcy5zdGVuY2lsV3JpdGVNYXNrID0gc291cmNlLnN0ZW5jaWxXcml0ZU1hc2s7XG5cdFx0dGhpcy5zdGVuY2lsRnVuYyA9IHNvdXJjZS5zdGVuY2lsRnVuYztcblx0XHR0aGlzLnN0ZW5jaWxSZWYgPSBzb3VyY2Uuc3RlbmNpbFJlZjtcblx0XHR0aGlzLnN0ZW5jaWxGdW5jTWFzayA9IHNvdXJjZS5zdGVuY2lsRnVuY01hc2s7XG5cdFx0dGhpcy5zdGVuY2lsRmFpbCA9IHNvdXJjZS5zdGVuY2lsRmFpbDtcblx0XHR0aGlzLnN0ZW5jaWxaRmFpbCA9IHNvdXJjZS5zdGVuY2lsWkZhaWw7XG5cdFx0dGhpcy5zdGVuY2lsWlBhc3MgPSBzb3VyY2Uuc3RlbmNpbFpQYXNzO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlID0gc291cmNlLnN0ZW5jaWxXcml0ZTtcblxuXHRcdGNvbnN0IHNyY1BsYW5lcyA9IHNvdXJjZS5jbGlwcGluZ1BsYW5lcztcblx0XHRsZXQgZHN0UGxhbmVzID0gbnVsbDtcblxuXHRcdGlmICggc3JjUGxhbmVzICE9PSBudWxsICkge1xuXG5cdFx0XHRjb25zdCBuID0gc3JjUGxhbmVzLmxlbmd0aDtcblx0XHRcdGRzdFBsYW5lcyA9IG5ldyBBcnJheSggbiApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0ZHN0UGxhbmVzWyBpIF0gPSBzcmNQbGFuZXNbIGkgXS5jbG9uZSgpO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0aGlzLmNsaXBwaW5nUGxhbmVzID0gZHN0UGxhbmVzO1xuXHRcdHRoaXMuY2xpcEludGVyc2VjdGlvbiA9IHNvdXJjZS5jbGlwSW50ZXJzZWN0aW9uO1xuXHRcdHRoaXMuY2xpcFNoYWRvd3MgPSBzb3VyY2UuY2xpcFNoYWRvd3M7XG5cblx0XHR0aGlzLnNoYWRvd1NpZGUgPSBzb3VyY2Uuc2hhZG93U2lkZTtcblxuXHRcdHRoaXMuY29sb3JXcml0ZSA9IHNvdXJjZS5jb2xvcldyaXRlO1xuXHRcdHRoaXMuYWxwaGFXcml0ZSA9IHNvdXJjZS5hbHBoYVdyaXRlO1xuXG5cdFx0dGhpcy5wcmVjaXNpb24gPSBzb3VyY2UucHJlY2lzaW9uO1xuXG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0ID0gc291cmNlLnBvbHlnb25PZmZzZXQ7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gc291cmNlLnBvbHlnb25PZmZzZXRGYWN0b3I7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMgPSBzb3VyY2UucG9seWdvbk9mZnNldFVuaXRzO1xuXG5cdFx0dGhpcy5kaXRoZXJpbmcgPSBzb3VyY2UuZGl0aGVyaW5nO1xuXG5cdFx0dGhpcy5hbHBoYVRlc3QgPSBzb3VyY2UuYWxwaGFUZXN0O1xuXHRcdHRoaXMuYWxwaGFUb0NvdmVyYWdlID0gc291cmNlLmFscGhhVG9Db3ZlcmFnZTtcblx0XHR0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHNvdXJjZS5wcmVtdWx0aXBsaWVkQWxwaGE7XG5cblx0XHR0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTtcblxuXHRcdHRoaXMudG9uZU1hcHBlZCA9IHNvdXJjZS50b25lTWFwcGVkO1xuXG5cdFx0dGhpcy51c2VyRGF0YSA9IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBzb3VyY2UudXNlckRhdGEgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTtcblxuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZlcnNpb24gKys7XG5cblx0fVxuXG59XG5cbk1hdGVyaWFsLnByb3RvdHlwZS5pc01hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgc3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKiAgY29tYmluZTogVEhSRUUuTXVsdGlwbHksXG4gKiAgcmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICogIHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKiAgZGVwdGhUZXN0OiA8Ym9vbD4sXG4gKiAgZGVwdGhXcml0ZTogPGJvb2w+LFxuICpcbiAqICB3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqICB3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaEJhc2ljTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2hCYXNpY01hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGVtaXNzaXZlXG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSAxO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuZW52TWFwID0gc291cmNlLmVudk1hcDtcblx0XHR0aGlzLmNvbWJpbmUgPSBzb3VyY2UuY29tYmluZTtcblx0XHR0aGlzLnJlZmxlY3Rpdml0eSA9IHNvdXJjZS5yZWZsZWN0aXZpdHk7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSBzb3VyY2UucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgX3ZlY3RvciQ5ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZlY3RvcjIkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcblxuY2xhc3MgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCBhcnJheSApICkge1xuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4nICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuYXJyYXkgPSBhcnJheTtcblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cdFx0dGhpcy5jb3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyBpdGVtU2l6ZSA6IDA7XG5cdFx0dGhpcy5ub3JtYWxpemVkID0gbm9ybWFsaXplZCA9PT0gdHJ1ZTtcblxuXHRcdHRoaXMudXNhZ2UgPSBTdGF0aWNEcmF3VXNhZ2U7XG5cdFx0dGhpcy51cGRhdGVSYW5nZSA9IHsgb2Zmc2V0OiAwLCBjb3VudDogLSAxIH07XG5cblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXG5cdH1cblxuXHRvblVwbG9hZENhbGxiYWNrKCkge31cblxuXHRzZXQgbmVlZHNVcGRhdGUoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB2YWx1ZSA9PT0gdHJ1ZSApIHRoaXMudmVyc2lvbiArKztcblxuXHR9XG5cblx0c2V0VXNhZ2UoIHZhbHVlICkge1xuXG5cdFx0dGhpcy51c2FnZSA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXHRcdHRoaXMuYXJyYXkgPSBuZXcgc291cmNlLmFycmF5LmNvbnN0cnVjdG9yKCBzb3VyY2UuYXJyYXkgKTtcblx0XHR0aGlzLml0ZW1TaXplID0gc291cmNlLml0ZW1TaXplO1xuXHRcdHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7XG5cdFx0dGhpcy5ub3JtYWxpemVkID0gc291cmNlLm5vcm1hbGl6ZWQ7XG5cblx0XHR0aGlzLnVzYWdlID0gc291cmNlLnVzYWdlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlBdCggaW5kZXgxLCBhdHRyaWJ1dGUsIGluZGV4MiApIHtcblxuXHRcdGluZGV4MSAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdGluZGV4MiAqPSBhdHRyaWJ1dGUuaXRlbVNpemU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5hcnJheVsgaW5kZXgxICsgaSBdID0gYXR0cmlidXRlLmFycmF5WyBpbmRleDIgKyBpIF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weUFycmF5KCBhcnJheSApIHtcblxuXHRcdHRoaXMuYXJyYXkuc2V0KCBhcnJheSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlDb2xvcnNBcnJheSggY29sb3JzICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGxldCBjb2xvciA9IGNvbG9yc1sgaSBdO1xuXG5cdFx0XHRpZiAoIGNvbG9yID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQnLCBpICk7XG5cdFx0XHRcdGNvbG9yID0gbmV3IENvbG9yKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gY29sb3Iucjtcblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IGNvbG9yLmc7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5iO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlWZWN0b3Iyc0FycmF5KCB2ZWN0b3JzICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1sgaSBdO1xuXG5cdFx0XHRpZiAoIHZlY3RvciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSApO1xuXHRcdFx0XHR2ZWN0b3IgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci54O1xuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weVZlY3RvcjNzQXJyYXkoIHZlY3RvcnMgKSB7XG5cblx0XHRjb25zdCBhcnJheSA9IHRoaXMuYXJyYXk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGxldCB2ZWN0b3IgPSB2ZWN0b3JzWyBpIF07XG5cblx0XHRcdGlmICggdmVjdG9yID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBpICk7XG5cdFx0XHRcdHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLng7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTtcblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci56O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlWZWN0b3I0c0FycmF5KCB2ZWN0b3JzICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1sgaSBdO1xuXG5cdFx0XHRpZiAoIHZlY3RvciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSApO1xuXHRcdFx0XHR2ZWN0b3IgPSBuZXcgVmVjdG9yNCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci54O1xuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3Iuejtcblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci53O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4MyggbSApIHtcblxuXHRcdGlmICggdGhpcy5pdGVtU2l6ZSA9PT0gMiApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0X3ZlY3RvcjIkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB0aGlzLCBpICk7XG5cdFx0XHRcdF92ZWN0b3IyJDEuYXBwbHlNYXRyaXgzKCBtICk7XG5cblx0XHRcdFx0dGhpcy5zZXRYWSggaSwgX3ZlY3RvcjIkMS54LCBfdmVjdG9yMiQxLnkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggdGhpcy5pdGVtU2l6ZSA9PT0gMyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0X3ZlY3RvciQ5LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHRoaXMsIGkgKTtcblx0XHRcdFx0X3ZlY3RvciQ5LmFwcGx5TWF0cml4MyggbSApO1xuXG5cdFx0XHRcdHRoaXMuc2V0WFlaKCBpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG0gKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0X3ZlY3RvciQ5LnggPSB0aGlzLmdldFgoIGkgKTtcblx0XHRcdF92ZWN0b3IkOS55ID0gdGhpcy5nZXRZKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueiA9IHRoaXMuZ2V0WiggaSApO1xuXG5cdFx0XHRfdmVjdG9yJDkuYXBwbHlNYXRyaXg0KCBtICk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKCBpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlOb3JtYWxNYXRyaXgoIG0gKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0X3ZlY3RvciQ5LnggPSB0aGlzLmdldFgoIGkgKTtcblx0XHRcdF92ZWN0b3IkOS55ID0gdGhpcy5nZXRZKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueiA9IHRoaXMuZ2V0WiggaSApO1xuXG5cdFx0XHRfdmVjdG9yJDkuYXBwbHlOb3JtYWxNYXRyaXgoIG0gKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooIGksIF92ZWN0b3IkOS54LCBfdmVjdG9yJDkueSwgX3ZlY3RvciQ5LnogKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2Zvcm1EaXJlY3Rpb24oIG0gKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0X3ZlY3RvciQ5LnggPSB0aGlzLmdldFgoIGkgKTtcblx0XHRcdF92ZWN0b3IkOS55ID0gdGhpcy5nZXRZKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueiA9IHRoaXMuZ2V0WiggaSApO1xuXG5cdFx0XHRfdmVjdG9yJDkudHJhbnNmb3JtRGlyZWN0aW9uKCBtICk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKCBpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0KCB2YWx1ZSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdHRoaXMuYXJyYXkuc2V0KCB2YWx1ZSwgb2Zmc2V0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0WCggaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplIF07XG5cblx0fVxuXG5cdHNldFgoIGluZGV4LCB4ICkge1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplIF0gPSB4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFkoIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDEgXTtcblxuXHR9XG5cblx0c2V0WSggaW5kZXgsIHkgKSB7XG5cblx0XHR0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAxIF0gPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFooIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDIgXTtcblxuXHR9XG5cblx0c2V0WiggaW5kZXgsIHogKSB7XG5cblx0XHR0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyIF0gPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFcoIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDMgXTtcblxuXHR9XG5cblx0c2V0VyggaW5kZXgsIHcgKSB7XG5cblx0XHR0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAzIF0gPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFhZKCBpbmRleCwgeCwgeSApIHtcblxuXHRcdGluZGV4ICo9IHRoaXMuaXRlbVNpemU7XG5cblx0XHR0aGlzLmFycmF5WyBpbmRleCArIDAgXSA9IHg7XG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAxIF0gPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFhZWiggaW5kZXgsIHgsIHksIHogKSB7XG5cblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAwIF0gPSB4O1xuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblx0XHR0aGlzLmFycmF5WyBpbmRleCArIDIgXSA9IHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WFlaVyggaW5kZXgsIHgsIHksIHosIHcgKSB7XG5cblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAwIF0gPSB4O1xuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblx0XHR0aGlzLmFycmF5WyBpbmRleCArIDIgXSA9IHo7XG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAzIF0gPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG9uVXBsb2FkKCBjYWxsYmFjayApIHtcblxuXHRcdHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmFycmF5LCB0aGlzLml0ZW1TaXplICkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0aXRlbVNpemU6IHRoaXMuaXRlbVNpemUsXG5cdFx0XHR0eXBlOiB0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0XHRhcnJheTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIHRoaXMuYXJyYXkgKSxcblx0XHRcdG5vcm1hbGl6ZWQ6IHRoaXMubm9ybWFsaXplZFxuXHRcdH07XG5cblx0XHRpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0aWYgKCB0aGlzLnVzYWdlICE9PSBTdGF0aWNEcmF3VXNhZ2UgKSBkYXRhLnVzYWdlID0gdGhpcy51c2FnZTtcblx0XHRpZiAoIHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0ICE9PSAwIHx8IHRoaXMudXBkYXRlUmFuZ2UuY291bnQgIT09IC0gMSApIGRhdGEudXBkYXRlUmFuZ2UgPSB0aGlzLnVwZGF0ZVJhbmdlO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGUgPSB0cnVlO1xuXG4vL1xuXG5jbGFzcyBJbnQ4QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBJbnQ4QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFVpbnQ4QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBVaW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBJbnQxNkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgSW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVWludDE2QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBVaW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSW50MzJCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IEludDMyQXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgVWludDMyQXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IFVpbnQxNkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5GbG9hdDE2QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgPSB0cnVlO1xuXG5jbGFzcyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBGbG9hdDMyQXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IEZsb2F0NjRBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxubGV0IF9pZCQxID0gMDtcblxuY29uc3QgX20xID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX29iaiA9IC8qQF9fUFVSRV9fKi8gbmV3IE9iamVjdDNEKCk7XG5jb25zdCBfb2Zmc2V0ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2JveCQxID0gLypAX19QVVJFX18qLyBuZXcgQm94MygpO1xuY29uc3QgX2JveE1vcnBoVGFyZ2V0cyA9IC8qQF9fUFVSRV9fKi8gbmV3IEJveDMoKTtcbmNvbnN0IF92ZWN0b3IkOCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgQnVmZmVyR2VvbWV0cnkgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogX2lkJDEgKysgfSApO1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLnR5cGUgPSAnQnVmZmVyR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5pbmRleCA9IG51bGw7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzID0ge307XG5cblx0XHR0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBmYWxzZTtcblxuXHRcdHRoaXMuZ3JvdXBzID0gW107XG5cblx0XHR0aGlzLmJvdW5kaW5nQm94ID0gbnVsbDtcblx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDtcblxuXHRcdHRoaXMuZHJhd1JhbmdlID0geyBzdGFydDogMCwgY291bnQ6IEluZmluaXR5IH07XG5cblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cblx0fVxuXG5cdGdldEluZGV4KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cblx0fVxuXG5cdHNldEluZGV4KCBpbmRleCApIHtcblxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggaW5kZXggKSApIHtcblxuXHRcdFx0dGhpcy5pbmRleCA9IG5ldyAoIGFycmF5TmVlZHNVaW50MzIoIGluZGV4ICkgPyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgOiBVaW50MTZCdWZmZXJBdHRyaWJ1dGUgKSggaW5kZXgsIDEgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRBdHRyaWJ1dGUoIG5hbWUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzWyBuYW1lIF07XG5cblx0fVxuXG5cdHNldEF0dHJpYnV0ZSggbmFtZSwgYXR0cmlidXRlICkge1xuXG5cdFx0dGhpcy5hdHRyaWJ1dGVzWyBuYW1lIF0gPSBhdHRyaWJ1dGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGVsZXRlQXR0cmlidXRlKCBuYW1lICkge1xuXG5cdFx0ZGVsZXRlIHRoaXMuYXR0cmlidXRlc1sgbmFtZSBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGhhc0F0dHJpYnV0ZSggbmFtZSApIHtcblxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbIG5hbWUgXSAhPT0gdW5kZWZpbmVkO1xuXG5cdH1cblxuXHRhZGRHcm91cCggc3RhcnQsIGNvdW50LCBtYXRlcmlhbEluZGV4ID0gMCApIHtcblxuXHRcdHRoaXMuZ3JvdXBzLnB1c2goIHtcblxuXHRcdFx0c3RhcnQ6IHN0YXJ0LFxuXHRcdFx0Y291bnQ6IGNvdW50LFxuXHRcdFx0bWF0ZXJpYWxJbmRleDogbWF0ZXJpYWxJbmRleFxuXG5cdFx0fSApO1xuXG5cdH1cblxuXHRjbGVhckdyb3VwcygpIHtcblxuXHRcdHRoaXMuZ3JvdXBzID0gW107XG5cblx0fVxuXG5cdHNldERyYXdSYW5nZSggc3RhcnQsIGNvdW50ICkge1xuXG5cdFx0dGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzdGFydDtcblx0XHR0aGlzLmRyYXdSYW5nZS5jb3VudCA9IGNvdW50O1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG1hdHJpeCApIHtcblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRwb3NpdGlvbi5hcHBseU1hdHJpeDQoIG1hdHJpeCApO1xuXG5cdFx0XHRwb3NpdGlvbi5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBub3JtYWwgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsO1xuXG5cdFx0aWYgKCBub3JtYWwgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3Qgbm9ybWFsTWF0cml4ID0gbmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApO1xuXG5cdFx0XHRub3JtYWwuYXBwbHlOb3JtYWxNYXRyaXgoIG5vcm1hbE1hdHJpeCApO1xuXG5cdFx0XHRub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFuZ2VudCA9IHRoaXMuYXR0cmlidXRlcy50YW5nZW50O1xuXG5cdFx0aWYgKCB0YW5nZW50ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRhbmdlbnQudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKTtcblxuXHRcdFx0dGFuZ2VudC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuYm91bmRpbmdCb3ggIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKCBxICkge1xuXG5cdFx0X20xLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCBxICk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX20xICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlWCggYW5nbGUgKSB7XG5cblx0XHQvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHgtYXhpc1xuXG5cdFx0X20xLm1ha2VSb3RhdGlvblgoIGFuZ2xlICk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX20xICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlWSggYW5nbGUgKSB7XG5cblx0XHQvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHktYXhpc1xuXG5cdFx0X20xLm1ha2VSb3RhdGlvblkoIGFuZ2xlICk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX20xICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlWiggYW5nbGUgKSB7XG5cblx0XHQvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHotYXhpc1xuXG5cdFx0X20xLm1ha2VSb3RhdGlvblooIGFuZ2xlICk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX20xICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNsYXRlKCB4LCB5LCB6ICkge1xuXG5cdFx0Ly8gdHJhbnNsYXRlIGdlb21ldHJ5XG5cblx0XHRfbTEubWFrZVRyYW5zbGF0aW9uKCB4LCB5LCB6ICk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX20xICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2NhbGUoIHgsIHksIHogKSB7XG5cblx0XHQvLyBzY2FsZSBnZW9tZXRyeVxuXG5cdFx0X20xLm1ha2VTY2FsZSggeCwgeSwgeiApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxvb2tBdCggdmVjdG9yICkge1xuXG5cdFx0X29iai5sb29rQXQoIHZlY3RvciApO1xuXG5cdFx0X29iai51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KCBfb2JqLm1hdHJpeCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNlbnRlcigpIHtcblxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG5cblx0XHR0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlciggX29mZnNldCApLm5lZ2F0ZSgpO1xuXG5cdFx0dGhpcy50cmFuc2xhdGUoIF9vZmZzZXQueCwgX29mZnNldC55LCBfb2Zmc2V0LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKCBwb2ludHMgKSB7XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0gcG9pbnRzWyBpIF07XG5cdFx0XHRwb3NpdGlvbi5wdXNoKCBwb2ludC54LCBwb2ludC55LCBwb2ludC56IHx8IDAgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIDMgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbXB1dGVCb3VuZGluZ0JveCgpIHtcblxuXHRcdGlmICggdGhpcy5ib3VuZGluZ0JveCA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3gzKCk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKCBwb3NpdGlvbiAmJiBwb3NpdGlvbi5pc0dMQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgXCJtZXNoLmZydXN0dW1DdWxsZWRcIiB0byBcImZhbHNlXCIuJywgdGhpcyApO1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94LnNldChcblx0XHRcdFx0bmV3IFZlY3RvcjMoIC0gSW5maW5pdHksIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKSxcblx0XHRcdFx0bmV3IFZlY3RvcjMoICsgSW5maW5pdHksICsgSW5maW5pdHksICsgSW5maW5pdHkgKVxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uICk7XG5cblx0XHRcdC8vIHByb2Nlc3MgbW9ycGggYXR0cmlidXRlcyBpZiBwcmVzZW50XG5cblx0XHRcdGlmICggbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvblsgaSBdO1xuXHRcdFx0XHRcdF9ib3gkMS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSApO1xuXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlICkge1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkVmVjdG9ycyggdGhpcy5ib3VuZGluZ0JveC5taW4sIF9ib3gkMS5taW4gKTtcblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCggX3ZlY3RvciQ4ICk7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGRWZWN0b3JzKCB0aGlzLmJvdW5kaW5nQm94Lm1heCwgX2JveCQxLm1heCApO1xuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KCBfdmVjdG9yJDggKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCggX2JveCQxLm1pbiApO1xuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KCBfYm94JDEubWF4ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBpc05hTiggdGhpcy5ib3VuZGluZ0JveC5taW4ueCApIHx8IGlzTmFOKCB0aGlzLmJvdW5kaW5nQm94Lm1pbi55ICkgfHwgaXNOYU4oIHRoaXMuYm91bmRpbmdCb3gubWluLnogKSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlIFwicG9zaXRpb25cIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpIHtcblxuXHRcdGlmICggdGhpcy5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG5ldyBTcGhlcmUoKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRpZiAoIHBvc2l0aW9uICYmIHBvc2l0aW9uLmlzR0xCdWZmZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCBcIm1lc2guZnJ1c3R1bUN1bGxlZFwiIHRvIFwiZmFsc2VcIi4nLCB0aGlzICk7XG5cblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KCBuZXcgVmVjdG9yMygpLCBJbmZpbml0eSApO1xuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIHBvc2l0aW9uICkge1xuXG5cdFx0XHQvLyBmaXJzdCwgZmluZCB0aGUgY2VudGVyIG9mIHRoZSBib3VuZGluZyBzcGhlcmVcblxuXHRcdFx0Y29uc3QgY2VudGVyID0gdGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7XG5cblx0XHRcdF9ib3gkMS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApO1xuXG5cdFx0XHQvLyBwcm9jZXNzIG1vcnBoIGF0dHJpYnV0ZXMgaWYgcHJlc2VudFxuXG5cdFx0XHRpZiAoIG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25bIGkgXTtcblx0XHRcdFx0XHRfYm94TW9ycGhUYXJnZXRzLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoIG1vcnBoQXR0cmlidXRlICk7XG5cblx0XHRcdFx0XHRpZiAoIHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUgKSB7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGRWZWN0b3JzKCBfYm94JDEubWluLCBfYm94TW9ycGhUYXJnZXRzLm1pbiApO1xuXHRcdFx0XHRcdFx0X2JveCQxLmV4cGFuZEJ5UG9pbnQoIF92ZWN0b3IkOCApO1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkVmVjdG9ycyggX2JveCQxLm1heCwgX2JveE1vcnBoVGFyZ2V0cy5tYXggKTtcblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KCBfdmVjdG9yJDggKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KCBfYm94TW9ycGhUYXJnZXRzLm1pbiApO1xuXHRcdFx0XHRcdFx0X2JveCQxLmV4cGFuZEJ5UG9pbnQoIF9ib3hNb3JwaFRhcmdldHMubWF4ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdF9ib3gkMS5nZXRDZW50ZXIoIGNlbnRlciApO1xuXG5cdFx0XHQvLyBzZWNvbmQsIHRyeSB0byBmaW5kIGEgYm91bmRpbmdTcGhlcmUgd2l0aCBhIHJhZGl1cyBzbWFsbGVyIHRoYW4gdGhlXG5cdFx0XHQvLyBib3VuZGluZ1NwaGVyZSBvZiB0aGUgYm91bmRpbmdCb3g6IHNxcnQoMykgc21hbGxlciBpbiB0aGUgYmVzdCBjYXNlXG5cblx0XHRcdGxldCBtYXhSYWRpdXNTcSA9IDA7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdF92ZWN0b3IkOC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgaSApO1xuXG5cdFx0XHRcdG1heFJhZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIF92ZWN0b3IkOCApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvY2VzcyBtb3JwaCBhdHRyaWJ1dGVzIGlmIHByZXNlbnRcblxuXHRcdFx0aWYgKCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uWyBpIF07XG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBqbCA9IG1vcnBoQXR0cmlidXRlLmNvdW50OyBqIDwgamw7IGogKysgKSB7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5mcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSwgaiApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0c1JlbGF0aXZlICkge1xuXG5cdFx0XHRcdFx0XHRcdF9vZmZzZXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGogKTtcblx0XHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZCggX29mZnNldCApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1heFJhZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIF92ZWN0b3IkOCApICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzID0gTWF0aC5zcXJ0KCBtYXhSYWRpdXNTcSApO1xuXG5cdFx0XHRpZiAoIGlzTmFOKCB0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyApICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlIFwicG9zaXRpb25cIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Y29tcHV0ZVRhbmdlbnRzKCkge1xuXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBiYXNlZCBvbiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL3RhbmdlbnQuaHRtbFxuXHRcdC8vIChwZXIgdmVydGV4IHRhbmdlbnRzKVxuXG5cdFx0aWYgKCBpbmRleCA9PT0gbnVsbCB8fFxuXHRcdFx0IGF0dHJpYnV0ZXMucG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0IGF0dHJpYnV0ZXMubm9ybWFsID09PSB1bmRlZmluZWQgfHxcblx0XHRcdCBhdHRyaWJ1dGVzLnV2ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1diknICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRjb25zdCBpbmRpY2VzID0gaW5kZXguYXJyYXk7XG5cdFx0Y29uc3QgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcblx0XHRjb25zdCBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwuYXJyYXk7XG5cdFx0Y29uc3QgdXZzID0gYXR0cmlidXRlcy51di5hcnJheTtcblxuXHRcdGNvbnN0IG5WZXJ0aWNlcyA9IHBvc2l0aW9ucy5sZW5ndGggLyAzO1xuXG5cdFx0aWYgKCBhdHRyaWJ1dGVzLnRhbmdlbnQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd0YW5nZW50JywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggbmV3IEZsb2F0MzJBcnJheSggNCAqIG5WZXJ0aWNlcyApLCA0ICkgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LmFycmF5O1xuXG5cdFx0Y29uc3QgdGFuMSA9IFtdLCB0YW4yID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkgKysgKSB7XG5cblx0XHRcdHRhbjFbIGkgXSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHR0YW4yWyBpIF0gPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdkEgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0dkIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0dkMgPSBuZXcgVmVjdG9yMygpLFxuXG5cdFx0XHR1dkEgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0dXZCID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdHV2QyA9IG5ldyBWZWN0b3IyKCksXG5cblx0XHRcdHNkaXIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0dGRpciA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVUcmlhbmdsZSggYSwgYiwgYyApIHtcblxuXHRcdFx0dkEuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGEgKiAzICk7XG5cdFx0XHR2Qi5mcm9tQXJyYXkoIHBvc2l0aW9ucywgYiAqIDMgKTtcblx0XHRcdHZDLmZyb21BcnJheSggcG9zaXRpb25zLCBjICogMyApO1xuXG5cdFx0XHR1dkEuZnJvbUFycmF5KCB1dnMsIGEgKiAyICk7XG5cdFx0XHR1dkIuZnJvbUFycmF5KCB1dnMsIGIgKiAyICk7XG5cdFx0XHR1dkMuZnJvbUFycmF5KCB1dnMsIGMgKiAyICk7XG5cblx0XHRcdHZCLnN1YiggdkEgKTtcblx0XHRcdHZDLnN1YiggdkEgKTtcblxuXHRcdFx0dXZCLnN1YiggdXZBICk7XG5cdFx0XHR1dkMuc3ViKCB1dkEgKTtcblxuXHRcdFx0Y29uc3QgciA9IDEuMCAvICggdXZCLnggKiB1dkMueSAtIHV2Qy54ICogdXZCLnkgKTtcblxuXHRcdFx0Ly8gc2lsZW50bHkgaWdub3JlIGRlZ2VuZXJhdGUgdXYgdHJpYW5nbGVzIGhhdmluZyBjb2luY2lkZW50IG9yIGNvbGluZWFyIHZlcnRpY2VzXG5cblx0XHRcdGlmICggISBpc0Zpbml0ZSggciApICkgcmV0dXJuO1xuXG5cdFx0XHRzZGlyLmNvcHkoIHZCICkubXVsdGlwbHlTY2FsYXIoIHV2Qy55ICkuYWRkU2NhbGVkVmVjdG9yKCB2QywgLSB1dkIueSApLm11bHRpcGx5U2NhbGFyKCByICk7XG5cdFx0XHR0ZGlyLmNvcHkoIHZDICkubXVsdGlwbHlTY2FsYXIoIHV2Qi54ICkuYWRkU2NhbGVkVmVjdG9yKCB2QiwgLSB1dkMueCApLm11bHRpcGx5U2NhbGFyKCByICk7XG5cblx0XHRcdHRhbjFbIGEgXS5hZGQoIHNkaXIgKTtcblx0XHRcdHRhbjFbIGIgXS5hZGQoIHNkaXIgKTtcblx0XHRcdHRhbjFbIGMgXS5hZGQoIHNkaXIgKTtcblxuXHRcdFx0dGFuMlsgYSBdLmFkZCggdGRpciApO1xuXHRcdFx0dGFuMlsgYiBdLmFkZCggdGRpciApO1xuXHRcdFx0dGFuMlsgYyBdLmFkZCggdGRpciApO1xuXG5cdFx0fVxuXG5cdFx0bGV0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuXG5cdFx0aWYgKCBncm91cHMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRncm91cHMgPSBbIHtcblx0XHRcdFx0c3RhcnQ6IDAsXG5cdFx0XHRcdGNvdW50OiBpbmRpY2VzLmxlbmd0aFxuXHRcdFx0fSBdO1xuXG5cdFx0fVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGkgXTtcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBncm91cC5zdGFydDtcblx0XHRcdGNvbnN0IGNvdW50ID0gZ3JvdXAuY291bnQ7XG5cblx0XHRcdGZvciAoIGxldCBqID0gc3RhcnQsIGpsID0gc3RhcnQgKyBjb3VudDsgaiA8IGpsOyBqICs9IDMgKSB7XG5cblx0XHRcdFx0aGFuZGxlVHJpYW5nbGUoXG5cdFx0XHRcdFx0aW5kaWNlc1sgaiArIDAgXSxcblx0XHRcdFx0XHRpbmRpY2VzWyBqICsgMSBdLFxuXHRcdFx0XHRcdGluZGljZXNbIGogKyAyIF1cblx0XHRcdFx0KTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdG1wID0gbmV3IFZlY3RvcjMoKSwgdG1wMiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgbiA9IG5ldyBWZWN0b3IzKCksIG4yID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVZlcnRleCggdiApIHtcblxuXHRcdFx0bi5mcm9tQXJyYXkoIG5vcm1hbHMsIHYgKiAzICk7XG5cdFx0XHRuMi5jb3B5KCBuICk7XG5cblx0XHRcdGNvbnN0IHQgPSB0YW4xWyB2IF07XG5cblx0XHRcdC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXG5cblx0XHRcdHRtcC5jb3B5KCB0ICk7XG5cdFx0XHR0bXAuc3ViKCBuLm11bHRpcGx5U2NhbGFyKCBuLmRvdCggdCApICkgKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIGhhbmRlZG5lc3NcblxuXHRcdFx0dG1wMi5jcm9zc1ZlY3RvcnMoIG4yLCB0ICk7XG5cdFx0XHRjb25zdCB0ZXN0ID0gdG1wMi5kb3QoIHRhbjJbIHYgXSApO1xuXHRcdFx0Y29uc3QgdyA9ICggdGVzdCA8IDAuMCApID8gLSAxLjAgOiAxLjA7XG5cblx0XHRcdHRhbmdlbnRzWyB2ICogNCBdID0gdG1wLng7XG5cdFx0XHR0YW5nZW50c1sgdiAqIDQgKyAxIF0gPSB0bXAueTtcblx0XHRcdHRhbmdlbnRzWyB2ICogNCArIDIgXSA9IHRtcC56O1xuXHRcdFx0dGFuZ2VudHNbIHYgKiA0ICsgMyBdID0gdztcblxuXHRcdH1cblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cblx0XHRcdGNvbnN0IHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRjb25zdCBjb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IHN0YXJ0LCBqbCA9IHN0YXJ0ICsgY291bnQ7IGogPCBqbDsgaiArPSAzICkge1xuXG5cdFx0XHRcdGhhbmRsZVZlcnRleCggaW5kaWNlc1sgaiArIDAgXSApO1xuXHRcdFx0XHRoYW5kbGVWZXJ0ZXgoIGluZGljZXNbIGogKyAxIF0gKTtcblx0XHRcdFx0aGFuZGxlVmVydGV4KCBpbmRpY2VzWyBqICsgMiBdICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Y29tcHV0ZVZlcnRleE5vcm1hbHMoKSB7XG5cblx0XHRjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJyApO1xuXG5cdFx0aWYgKCBwb3NpdGlvbkF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRsZXQgbm9ybWFsQXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoICdub3JtYWwnICk7XG5cblx0XHRcdGlmICggbm9ybWFsQXR0cmlidXRlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0bm9ybWFsQXR0cmlidXRlID0gbmV3IEJ1ZmZlckF0dHJpYnV0ZSggbmV3IEZsb2F0MzJBcnJheSggcG9zaXRpb25BdHRyaWJ1dGUuY291bnQgKiAzICksIDMgKTtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBub3JtYWxBdHRyaWJ1dGUgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyByZXNldCBleGlzdGluZyBub3JtYWxzIHRvIHplcm9cblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbm9ybWFsQXR0cmlidXRlLmNvdW50OyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKCBpLCAwLCAwLCAwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBBID0gbmV3IFZlY3RvcjMoKSwgcEIgPSBuZXcgVmVjdG9yMygpLCBwQyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBuQSA9IG5ldyBWZWN0b3IzKCksIG5CID0gbmV3IFZlY3RvcjMoKSwgbkMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgY2IgPSBuZXcgVmVjdG9yMygpLCBhYiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdC8vIGluZGV4ZWQgZWxlbWVudHNcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gaW5kZXguY291bnQ7IGkgPCBpbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdkEgPSBpbmRleC5nZXRYKCBpICsgMCApO1xuXHRcdFx0XHRcdGNvbnN0IHZCID0gaW5kZXguZ2V0WCggaSArIDEgKTtcblx0XHRcdFx0XHRjb25zdCB2QyA9IGluZGV4LmdldFgoIGkgKyAyICk7XG5cblx0XHRcdFx0XHRwQS5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgdkEgKTtcblx0XHRcdFx0XHRwQi5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgdkIgKTtcblx0XHRcdFx0XHRwQy5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgdkMgKTtcblxuXHRcdFx0XHRcdGNiLnN1YlZlY3RvcnMoIHBDLCBwQiApO1xuXHRcdFx0XHRcdGFiLnN1YlZlY3RvcnMoIHBBLCBwQiApO1xuXHRcdFx0XHRcdGNiLmNyb3NzKCBhYiApO1xuXG5cdFx0XHRcdFx0bkEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFsQXR0cmlidXRlLCB2QSApO1xuXHRcdFx0XHRcdG5CLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbEF0dHJpYnV0ZSwgdkIgKTtcblx0XHRcdFx0XHRuQy5mcm9tQnVmZmVyQXR0cmlidXRlKCBub3JtYWxBdHRyaWJ1dGUsIHZDICk7XG5cblx0XHRcdFx0XHRuQS5hZGQoIGNiICk7XG5cdFx0XHRcdFx0bkIuYWRkKCBjYiApO1xuXHRcdFx0XHRcdG5DLmFkZCggY2IgKTtcblxuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVooIHZBLCBuQS54LCBuQS55LCBuQS56ICk7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWiggdkIsIG5CLngsIG5CLnksIG5CLnogKTtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKCB2QywgbkMueCwgbkMueSwgbkMueiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBub24taW5kZXhlZCBlbGVtZW50cyAodW5jb25uZWN0ZWQgdHJpYW5nbGUgc291cClcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBpbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0cEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAwICk7XG5cdFx0XHRcdFx0cEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAxICk7XG5cdFx0XHRcdFx0cEMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAyICk7XG5cblx0XHRcdFx0XHRjYi5zdWJWZWN0b3JzKCBwQywgcEIgKTtcblx0XHRcdFx0XHRhYi5zdWJWZWN0b3JzKCBwQSwgcEIgKTtcblx0XHRcdFx0XHRjYi5jcm9zcyggYWIgKTtcblxuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVooIGkgKyAwLCBjYi54LCBjYi55LCBjYi56ICk7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWiggaSArIDEsIGNiLngsIGNiLnksIGNiLnogKTtcblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKCBpICsgMiwgY2IueCwgY2IueSwgY2IueiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtcblxuXHRcdFx0bm9ybWFsQXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0bWVyZ2UoIGdlb21ldHJ5LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoICEgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdG9mZnNldCA9IDA7XG5cblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0J1RIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gJ1xuXHRcdFx0XHQrICdVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuJ1xuXHRcdFx0KTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gYXR0cmlidXRlcyApIHtcblxuXHRcdFx0aWYgKCBnZW9tZXRyeS5hdHRyaWJ1dGVzWyBrZXkgXSA9PT0gdW5kZWZpbmVkICkgY29udGludWU7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZTEgPSBhdHRyaWJ1dGVzWyBrZXkgXTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZUFycmF5MSA9IGF0dHJpYnV0ZTEuYXJyYXk7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZTIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzWyBrZXkgXTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZUFycmF5MiA9IGF0dHJpYnV0ZTIuYXJyYXk7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZU9mZnNldCA9IGF0dHJpYnV0ZTIuaXRlbVNpemUgKiBvZmZzZXQ7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBNYXRoLm1pbiggYXR0cmlidXRlQXJyYXkyLmxlbmd0aCwgYXR0cmlidXRlQXJyYXkxLmxlbmd0aCAtIGF0dHJpYnV0ZU9mZnNldCApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGogPSBhdHRyaWJ1dGVPZmZzZXQ7IGkgPCBsZW5ndGg7IGkgKyssIGogKysgKSB7XG5cblx0XHRcdFx0YXR0cmlidXRlQXJyYXkxWyBqIF0gPSBhdHRyaWJ1dGVBcnJheTJbIGkgXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZU5vcm1hbHMoKSB7XG5cblx0XHRjb25zdCBub3JtYWxzID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBub3JtYWxzLmNvdW50OyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkOC5mcm9tQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCBpICk7XG5cblx0XHRcdF92ZWN0b3IkOC5ub3JtYWxpemUoKTtcblxuXHRcdFx0bm9ybWFscy5zZXRYWVooIGksIF92ZWN0b3IkOC54LCBfdmVjdG9yJDgueSwgX3ZlY3RvciQ4LnogKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dG9Ob25JbmRleGVkKCkge1xuXG5cdFx0ZnVuY3Rpb24gY29udmVydEJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRpY2VzICkge1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTtcblx0XHRcdGNvbnN0IGl0ZW1TaXplID0gYXR0cmlidXRlLml0ZW1TaXplO1xuXHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGF0dHJpYnV0ZS5ub3JtYWxpemVkO1xuXG5cdFx0XHRjb25zdCBhcnJheTIgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IoIGluZGljZXMubGVuZ3RoICogaXRlbVNpemUgKTtcblxuXHRcdFx0bGV0IGluZGV4ID0gMCwgaW5kZXgyID0gMDtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gaW5kaWNlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNbIGkgXSAqIGF0dHJpYnV0ZS5kYXRhLnN0cmlkZSArIGF0dHJpYnV0ZS5vZmZzZXQ7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGluZGV4ID0gaW5kaWNlc1sgaSBdICogaXRlbVNpemU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IGl0ZW1TaXplOyBqICsrICkge1xuXG5cdFx0XHRcdFx0YXJyYXkyWyBpbmRleDIgKysgXSA9IGFycmF5WyBpbmRleCArKyBdO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXkyLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGlmICggdGhpcy5pbmRleCA9PT0gbnVsbCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9XG5cblx0XHRjb25zdCBnZW9tZXRyeTIgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblxuXHRcdGNvbnN0IGluZGljZXMgPSB0aGlzLmluZGV4LmFycmF5O1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBhdHRyaWJ1dGVzXG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIGF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbIG5hbWUgXTtcblxuXHRcdFx0Y29uc3QgbmV3QXR0cmlidXRlID0gY29udmVydEJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRpY2VzICk7XG5cblx0XHRcdGdlb21ldHJ5Mi5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5ld0F0dHJpYnV0ZSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gbW9ycGggYXR0cmlidXRlc1xuXG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIG1vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhBcnJheSA9IFtdO1xuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNbIG5hbWUgXTsgLy8gbW9ycGhBdHRyaWJ1dGU6IGFycmF5IG9mIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGVzXG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZVsgaSBdO1xuXG5cdFx0XHRcdGNvbnN0IG5ld0F0dHJpYnV0ZSA9IGNvbnZlcnRCdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kaWNlcyApO1xuXG5cdFx0XHRcdG1vcnBoQXJyYXkucHVzaCggbmV3QXR0cmlidXRlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Z2VvbWV0cnkyLm1vcnBoQXR0cmlidXRlc1sgbmFtZSBdID0gbW9ycGhBcnJheTtcblxuXHRcdH1cblxuXHRcdGdlb21ldHJ5Mi5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cblx0XHQvLyBncm91cHNcblxuXHRcdGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cdFx0XHRnZW9tZXRyeTIuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdlb21ldHJ5MjtcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ0J1ZmZlckdlb21ldHJ5Jyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnQnVmZmVyR2VvbWV0cnkudG9KU09OJ1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBzdGFuZGFyZCBCdWZmZXJHZW9tZXRyeSBzZXJpYWxpemF0aW9uXG5cblx0XHRkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0ZGF0YS50eXBlID0gdGhpcy50eXBlO1xuXHRcdGlmICggdGhpcy5uYW1lICE9PSAnJyApIGRhdGEubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAoIE9iamVjdC5rZXlzKCB0aGlzLnVzZXJEYXRhICkubGVuZ3RoID4gMCApIGRhdGEudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhO1xuXG5cdFx0aWYgKCB0aGlzLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IHRoaXMucGFyYW1ldGVycztcblxuXHRcdFx0Zm9yICggY29uc3Qga2V5IGluIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRcdFx0aWYgKCBwYXJhbWV0ZXJzWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgZGF0YVsga2V5IF0gPSBwYXJhbWV0ZXJzWyBrZXkgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblxuXHRcdH1cblxuXHRcdC8vIGZvciBzaW1wbGljaXR5IHRoZSBjb2RlIGFzc3VtZXMgYXR0cmlidXRlcyBhcmUgbm90IHNoYXJlZCBhY3Jvc3MgZ2VvbWV0cmllcywgc2VlICMxNTgxMVxuXG5cdFx0ZGF0YS5kYXRhID0geyBhdHRyaWJ1dGVzOiB7fSB9O1xuXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0ZGF0YS5kYXRhLmluZGV4ID0ge1xuXHRcdFx0XHR0eXBlOiBpbmRleC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHRhcnJheTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGluZGV4LmFycmF5IClcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbIGtleSBdO1xuXG5cdFx0XHRkYXRhLmRhdGEuYXR0cmlidXRlc1sga2V5IF0gPSBhdHRyaWJ1dGUudG9KU09OKCBkYXRhLmRhdGEgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdGxldCBoYXNNb3JwaEF0dHJpYnV0ZXMgPSBmYWxzZTtcblxuXHRcdGZvciAoIGNvbnN0IGtleSBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlQXJyYXkgPSB0aGlzLm1vcnBoQXR0cmlidXRlc1sga2V5IF07XG5cblx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBhdHRyaWJ1dGVBcnJheS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBcnJheVsgaSBdO1xuXG5cdFx0XHRcdGFycmF5LnB1c2goIGF0dHJpYnV0ZS50b0pTT04oIGRhdGEuZGF0YSApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBhcnJheS5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRcdG1vcnBoQXR0cmlidXRlc1sga2V5IF0gPSBhcnJheTtcblxuXHRcdFx0XHRoYXNNb3JwaEF0dHJpYnV0ZXMgPSB0cnVlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGhhc01vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0ZGF0YS5kYXRhLm1vcnBoQXR0cmlidXRlcyA9IG1vcnBoQXR0cmlidXRlcztcblx0XHRcdGRhdGEuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwcztcblxuXHRcdGlmICggZ3JvdXBzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdGRhdGEuZGF0YS5ncm91cHMgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggZ3JvdXBzICkgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGJvdW5kaW5nU3BoZXJlID0gdGhpcy5ib3VuZGluZ1NwaGVyZTtcblxuXHRcdGlmICggYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7XG5cblx0XHRcdGRhdGEuZGF0YS5ib3VuZGluZ1NwaGVyZSA9IHtcblx0XHRcdFx0Y2VudGVyOiBib3VuZGluZ1NwaGVyZS5jZW50ZXIudG9BcnJheSgpLFxuXHRcdFx0XHRyYWRpdXM6IGJvdW5kaW5nU3BoZXJlLnJhZGl1c1xuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdCByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdC8vIHJlc2V0XG5cblx0XHR0aGlzLmluZGV4ID0gbnVsbDtcblx0XHR0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9O1xuXHRcdHRoaXMuZ3JvdXBzID0gW107XG5cdFx0dGhpcy5ib3VuZGluZ0JveCA9IG51bGw7XG5cdFx0dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7XG5cblx0XHQvLyB1c2VkIGZvciBzdG9yaW5nIGNsb25lZCwgc2hhcmVkIGRhdGFcblxuXHRcdGNvbnN0IGRhdGEgPSB7fTtcblxuXHRcdC8vIG5hbWVcblxuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXG5cdFx0Ly8gaW5kZXhcblxuXHRcdGNvbnN0IGluZGV4ID0gc291cmNlLmluZGV4O1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5zZXRJbmRleCggaW5kZXguY2xvbmUoIGRhdGEgKSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYXR0cmlidXRlc1xuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHNvdXJjZS5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBhdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWyBuYW1lIF07XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggbmFtZSwgYXR0cmlidXRlLmNsb25lKCBkYXRhICkgKTtcblxuXHRcdH1cblxuXHRcdC8vIG1vcnBoIGF0dHJpYnV0ZXNcblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IHNvdXJjZS5tb3JwaEF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIG1vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF07IC8vIG1vcnBoQXR0cmlidXRlOiBhcnJheSBvZiBGbG9hdDMyQnVmZmVyQXR0cmlidXRlc1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGFycmF5LnB1c2goIG1vcnBoQXR0cmlidXRlWyBpIF0uY2xvbmUoIGRhdGEgKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF0gPSBhcnJheTtcblxuXHRcdH1cblxuXHRcdHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBzb3VyY2UubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cblx0XHQvLyBncm91cHNcblxuXHRcdGNvbnN0IGdyb3VwcyA9IHNvdXJjZS5ncm91cHM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGkgXTtcblx0XHRcdHRoaXMuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYm91bmRpbmcgYm94XG5cblx0XHRjb25zdCBib3VuZGluZ0JveCA9IHNvdXJjZS5ib3VuZGluZ0JveDtcblxuXHRcdGlmICggYm91bmRpbmdCb3ggIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuYm91bmRpbmdCb3ggPSBib3VuZGluZ0JveC5jbG9uZSgpO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYm91bmRpbmcgc3BoZXJlXG5cblx0XHRjb25zdCBib3VuZGluZ1NwaGVyZSA9IHNvdXJjZS5ib3VuZGluZ1NwaGVyZTtcblxuXHRcdGlmICggYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBib3VuZGluZ1NwaGVyZS5jbG9uZSgpO1xuXG5cdFx0fVxuXG5cdFx0Ly8gZHJhdyByYW5nZVxuXG5cdFx0dGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzb3VyY2UuZHJhd1JhbmdlLnN0YXJ0O1xuXHRcdHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gc291cmNlLmRyYXdSYW5nZS5jb3VudDtcblxuXHRcdC8vIHVzZXIgZGF0YVxuXG5cdFx0dGhpcy51c2VyRGF0YSA9IHNvdXJjZS51c2VyRGF0YTtcblxuXHRcdC8vIGdlb21ldHJ5IGdlbmVyYXRvciBwYXJhbWV0ZXJzXG5cblx0XHRpZiAoIHNvdXJjZS5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB0aGlzLnBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLnBhcmFtZXRlcnMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7XG5cblx0fVxuXG59XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5ID0gdHJ1ZTtcblxuY29uc3QgX2ludmVyc2VNYXRyaXgkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9yYXkkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFJheSgpO1xuY29uc3QgX3NwaGVyZSQzID0gLypAX19QVVJFX18qLyBuZXcgU3BoZXJlKCk7XG5cbmNvbnN0IF92QSQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZCJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdkMkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RlbXBBID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3RlbXBCID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3RlbXBDID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbW9ycGhBID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX21vcnBoQiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9tb3JwaEMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF91dkEkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcbmNvbnN0IF91dkIkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcbmNvbnN0IF91dkMkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcblxuY29uc3QgX2ludGVyc2VjdGlvblBvaW50ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2ludGVyc2VjdGlvblBvaW50V29ybGQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIE1lc2ggZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCksIG1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKCkgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2gnO1xuXG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuXHRcdHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0aWYgKCBzb3VyY2UubW9ycGhUYXJnZXRJbmZsdWVuY2VzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBzb3VyY2UubW9ycGhUYXJnZXREaWN0aW9uYXJ5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS5tb3JwaFRhcmdldERpY3Rpb25hcnkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR1cGRhdGVNb3JwaFRhcmdldHMoKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyggbW9ycGhBdHRyaWJ1dGVzICk7XG5cblx0XHRcdGlmICgga2V5cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBrZXlzWyAwIF0gXTtcblxuXHRcdFx0XHRpZiAoIG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IFtdO1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgbSA9IDAsIG1sID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBtIDwgbWw7IG0gKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVsgbSBdLm5hbWUgfHwgU3RyaW5nKCBtICk7XG5cblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goIDAgKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5WyBuYW1lIF0gPSBtO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzO1xuXG5cdFx0XHRpZiAoIG1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG1vcnBoVGFyZ2V0cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXG5cdFx0aWYgKCBtYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0Ly8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUgZGlzdGFuY2UgdG8gcmF5XG5cblx0XHRpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRfc3BoZXJlJDMuY29weSggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgKTtcblx0XHRfc3BoZXJlJDMuYXBwbHlNYXRyaXg0KCBtYXRyaXhXb3JsZCApO1xuXG5cdFx0aWYgKCByYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoIF9zcGhlcmUkMyApID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdC8vXG5cblx0XHRfaW52ZXJzZU1hdHJpeCQyLmNvcHkoIG1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cdFx0X3JheSQyLmNvcHkoIHJheWNhc3Rlci5yYXkgKS5hcHBseU1hdHJpeDQoIF9pbnZlcnNlTWF0cml4JDIgKTtcblxuXHRcdC8vIENoZWNrIGJvdW5kaW5nQm94IGJlZm9yZSBjb250aW51aW5nXG5cblx0XHRpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsICkge1xuXG5cdFx0XHRpZiAoIF9yYXkkMi5pbnRlcnNlY3RzQm94KCBnZW9tZXRyeS5ib3VuZGluZ0JveCApID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdH1cblxuXHRcdGxldCBpbnRlcnNlY3Rpb247XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRjb25zdCBtb3JwaFBvc2l0aW9uID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblx0XHRcdGNvbnN0IHV2ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djtcblx0XHRcdGNvbnN0IHV2MiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudXYyO1xuXHRcdFx0Y29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXHRcdFx0Y29uc3QgZHJhd1JhbmdlID0gZ2VvbWV0cnkuZHJhd1JhbmdlO1xuXG5cdFx0XHRpZiAoIGluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdC8vIGluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGkgXTtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KCBncm91cC5zdGFydCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbiggaW5kZXguY291bnQsIE1hdGgubWluKCAoIGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQgKSwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApICk7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WCggaiApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXguZ2V0WCggaiArIDEgKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4LmdldFgoIGogKyAyICk7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggaW50ZXJzZWN0aW9uICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoIGogLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3Ncblx0XHRcdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24uZmFjZS5tYXRlcmlhbEluZGV4ID0gZ3JvdXAubWF0ZXJpYWxJbmRleDtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdGlvbiApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFuZ2Uuc3RhcnQgKTtcblx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbiggaW5kZXguY291bnQsICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoIGkgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGIgPSBpbmRleC5nZXRYKCBpICsgMSApO1xuXHRcdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4LmdldFgoIGkgKyAyICk7XG5cblx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oIHRoaXMsIG1hdGVyaWFsLCByYXljYXN0ZXIsIF9yYXkkMiwgcG9zaXRpb24sIG1vcnBoUG9zaXRpb24sIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLCB1diwgdXYyLCBhLCBiLCBjICk7XG5cblx0XHRcdFx0XHRcdGlmICggaW50ZXJzZWN0aW9uICkge1xuXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKCBpIC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gaW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIHBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gbm9uLWluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGkgXTtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KCBncm91cC5zdGFydCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbiggcG9zaXRpb24uY291bnQsIE1hdGgubWluKCAoIGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQgKSwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApICk7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhID0gajtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYiA9IGogKyAxO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjID0gaiArIDI7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggaW50ZXJzZWN0aW9uICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoIGogLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBub24taW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2UubWF0ZXJpYWxJbmRleCA9IGdyb3VwLm1hdGVyaWFsSW5kZXg7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIHBvc2l0aW9uLmNvdW50LCAoIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGEgPSBpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYiA9IGkgKyAxO1xuXHRcdFx0XHRcdFx0Y29uc3QgYyA9IGkgKyAyO1xuXG5cdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGludGVyc2VjdGlvbiApIHtcblxuXHRcdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vciggaSAvIDMgKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3Ncblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5NZXNoLnByb3RvdHlwZS5pc01lc2ggPSB0cnVlO1xuXG5mdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbiggb2JqZWN0LCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIHBBLCBwQiwgcEMsIHBvaW50ICkge1xuXG5cdGxldCBpbnRlcnNlY3Q7XG5cblx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHtcblxuXHRcdGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSggcEMsIHBCLCBwQSwgdHJ1ZSwgcG9pbnQgKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0aW50ZXJzZWN0ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKCBwQSwgcEIsIHBDLCBtYXRlcmlhbC5zaWRlICE9PSBEb3VibGVTaWRlLCBwb2ludCApO1xuXG5cdH1cblxuXHRpZiAoIGludGVyc2VjdCA9PT0gbnVsbCApIHJldHVybiBudWxsO1xuXG5cdF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNvcHkoIHBvaW50ICk7XG5cdF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmFwcGx5TWF0cml4NCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cblx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZCApO1xuXG5cdGlmICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSByZXR1cm4gbnVsbDtcblxuXHRyZXR1cm4ge1xuXHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRwb2ludDogX2ludGVyc2VjdGlvblBvaW50V29ybGQuY2xvbmUoKSxcblx0XHRvYmplY3Q6IG9iamVjdFxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMgKSB7XG5cblx0X3ZBJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGEgKTtcblx0X3ZCJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGIgKTtcblx0X3ZDJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGMgKTtcblxuXHRjb25zdCBtb3JwaEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVuY2VzO1xuXG5cdGlmICggbW9ycGhQb3NpdGlvbiAmJiBtb3JwaEluZmx1ZW5jZXMgKSB7XG5cblx0XHRfbW9ycGhBLnNldCggMCwgMCwgMCApO1xuXHRcdF9tb3JwaEIuc2V0KCAwLCAwLCAwICk7XG5cdFx0X21vcnBoQy5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtb3JwaFBvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBpbmZsdWVuY2UgPSBtb3JwaEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhQb3NpdGlvblsgaSBdO1xuXG5cdFx0XHRpZiAoIGluZmx1ZW5jZSA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRfdGVtcEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUsIGEgKTtcblx0XHRcdF90ZW1wQi5mcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSwgYiApO1xuXHRcdFx0X3RlbXBDLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG1vcnBoQXR0cmlidXRlLCBjICk7XG5cblx0XHRcdGlmICggbW9ycGhUYXJnZXRzUmVsYXRpdmUgKSB7XG5cblx0XHRcdFx0X21vcnBoQS5hZGRTY2FsZWRWZWN0b3IoIF90ZW1wQSwgaW5mbHVlbmNlICk7XG5cdFx0XHRcdF9tb3JwaEIuYWRkU2NhbGVkVmVjdG9yKCBfdGVtcEIsIGluZmx1ZW5jZSApO1xuXHRcdFx0XHRfbW9ycGhDLmFkZFNjYWxlZFZlY3RvciggX3RlbXBDLCBpbmZsdWVuY2UgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfbW9ycGhBLmFkZFNjYWxlZFZlY3RvciggX3RlbXBBLnN1YiggX3ZBJDEgKSwgaW5mbHVlbmNlICk7XG5cdFx0XHRcdF9tb3JwaEIuYWRkU2NhbGVkVmVjdG9yKCBfdGVtcEIuc3ViKCBfdkIkMSApLCBpbmZsdWVuY2UgKTtcblx0XHRcdFx0X21vcnBoQy5hZGRTY2FsZWRWZWN0b3IoIF90ZW1wQy5zdWIoIF92QyQxICksIGluZmx1ZW5jZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRfdkEkMS5hZGQoIF9tb3JwaEEgKTtcblx0XHRfdkIkMS5hZGQoIF9tb3JwaEIgKTtcblx0XHRfdkMkMS5hZGQoIF9tb3JwaEMgKTtcblxuXHR9XG5cblx0aWYgKCBvYmplY3QuaXNTa2lubmVkTWVzaCApIHtcblxuXHRcdG9iamVjdC5ib25lVHJhbnNmb3JtKCBhLCBfdkEkMSApO1xuXHRcdG9iamVjdC5ib25lVHJhbnNmb3JtKCBiLCBfdkIkMSApO1xuXHRcdG9iamVjdC5ib25lVHJhbnNmb3JtKCBjLCBfdkMkMSApO1xuXG5cdH1cblxuXHRjb25zdCBpbnRlcnNlY3Rpb24gPSBjaGVja0ludGVyc2VjdGlvbiggb2JqZWN0LCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIF92QSQxLCBfdkIkMSwgX3ZDJDEsIF9pbnRlcnNlY3Rpb25Qb2ludCApO1xuXG5cdGlmICggaW50ZXJzZWN0aW9uICkge1xuXG5cdFx0aWYgKCB1diApIHtcblxuXHRcdFx0X3V2QSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHV2LCBhICk7XG5cdFx0XHRfdXZCJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggdXYsIGIgKTtcblx0XHRcdF91dkMkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB1diwgYyApO1xuXG5cdFx0XHRpbnRlcnNlY3Rpb24udXYgPSBUcmlhbmdsZS5nZXRVViggX2ludGVyc2VjdGlvblBvaW50LCBfdkEkMSwgX3ZCJDEsIF92QyQxLCBfdXZBJDEsIF91dkIkMSwgX3V2QyQxLCBuZXcgVmVjdG9yMigpICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHV2MiApIHtcblxuXHRcdFx0X3V2QSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHV2MiwgYSApO1xuXHRcdFx0X3V2QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHV2MiwgYiApO1xuXHRcdFx0X3V2QyQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHV2MiwgYyApO1xuXG5cdFx0XHRpbnRlcnNlY3Rpb24udXYyID0gVHJpYW5nbGUuZ2V0VVYoIF9pbnRlcnNlY3Rpb25Qb2ludCwgX3ZBJDEsIF92QiQxLCBfdkMkMSwgX3V2QSQxLCBfdXZCJDEsIF91dkMkMSwgbmV3IFZlY3RvcjIoKSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZmFjZSA9IHtcblx0XHRcdGE6IGEsXG5cdFx0XHRiOiBiLFxuXHRcdFx0YzogYyxcblx0XHRcdG5vcm1hbDogbmV3IFZlY3RvcjMoKSxcblx0XHRcdG1hdGVyaWFsSW5kZXg6IDBcblx0XHR9O1xuXG5cdFx0VHJpYW5nbGUuZ2V0Tm9ybWFsKCBfdkEkMSwgX3ZCJDEsIF92QyQxLCBmYWNlLm5vcm1hbCApO1xuXG5cdFx0aW50ZXJzZWN0aW9uLmZhY2UgPSBmYWNlO1xuXG5cdH1cblxuXHRyZXR1cm4gaW50ZXJzZWN0aW9uO1xuXG59XG5cbmNsYXNzIEJveEdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGRlcHRoID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSwgZGVwdGhTZWdtZW50cyA9IDEgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0JveEdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0ZGVwdGg6IGRlcHRoLFxuXHRcdFx0d2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdGRlcHRoU2VnbWVudHM6IGRlcHRoU2VnbWVudHNcblx0XHR9O1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Ly8gc2VnbWVudHNcblxuXHRcdHdpZHRoU2VnbWVudHMgPSBNYXRoLmZsb29yKCB3aWR0aFNlZ21lbnRzICk7XG5cdFx0aGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApO1xuXHRcdGRlcHRoU2VnbWVudHMgPSBNYXRoLmZsb29yKCBkZXB0aFNlZ21lbnRzICk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgbnVtYmVyT2ZWZXJ0aWNlcyA9IDA7XG5cdFx0bGV0IGdyb3VwU3RhcnQgPSAwO1xuXG5cdFx0Ly8gYnVpbGQgZWFjaCBzaWRlIG9mIHRoZSBib3ggZ2VvbWV0cnlcblxuXHRcdGJ1aWxkUGxhbmUoICd6JywgJ3knLCAneCcsIC0gMSwgLSAxLCBkZXB0aCwgaGVpZ2h0LCB3aWR0aCwgZGVwdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIDAgKTsgLy8gcHhcblx0XHRidWlsZFBsYW5lKCAneicsICd5JywgJ3gnLCAxLCAtIDEsIGRlcHRoLCBoZWlnaHQsIC0gd2lkdGgsIGRlcHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCAxICk7IC8vIG54XG5cdFx0YnVpbGRQbGFuZSggJ3gnLCAneicsICd5JywgMSwgMSwgd2lkdGgsIGRlcHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGRlcHRoU2VnbWVudHMsIDIgKTsgLy8gcHlcblx0XHRidWlsZFBsYW5lKCAneCcsICd6JywgJ3knLCAxLCAtIDEsIHdpZHRoLCBkZXB0aCwgLSBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGRlcHRoU2VnbWVudHMsIDMgKTsgLy8gbnlcblx0XHRidWlsZFBsYW5lKCAneCcsICd5JywgJ3onLCAxLCAtIDEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgNCApOyAvLyBwelxuXHRcdGJ1aWxkUGxhbmUoICd4JywgJ3knLCAneicsIC0gMSwgLSAxLCB3aWR0aCwgaGVpZ2h0LCAtIGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgNSApOyAvLyBuelxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0XHRmdW5jdGlvbiBidWlsZFBsYW5lKCB1LCB2LCB3LCB1ZGlyLCB2ZGlyLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ3JpZFgsIGdyaWRZLCBtYXRlcmlhbEluZGV4ICkge1xuXG5cdFx0XHRjb25zdCBzZWdtZW50V2lkdGggPSB3aWR0aCAvIGdyaWRYO1xuXHRcdFx0Y29uc3Qgc2VnbWVudEhlaWdodCA9IGhlaWdodCAvIGdyaWRZO1xuXG5cdFx0XHRjb25zdCB3aWR0aEhhbGYgPSB3aWR0aCAvIDI7XG5cdFx0XHRjb25zdCBoZWlnaHRIYWxmID0gaGVpZ2h0IC8gMjtcblx0XHRcdGNvbnN0IGRlcHRoSGFsZiA9IGRlcHRoIC8gMjtcblxuXHRcdFx0Y29uc3QgZ3JpZFgxID0gZ3JpZFggKyAxO1xuXHRcdFx0Y29uc3QgZ3JpZFkxID0gZ3JpZFkgKyAxO1xuXG5cdFx0XHRsZXQgdmVydGV4Q291bnRlciA9IDA7XG5cdFx0XHRsZXQgZ3JvdXBDb3VudCA9IDA7XG5cblx0XHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdFx0Zm9yICggbGV0IGl5ID0gMDsgaXkgPCBncmlkWTE7IGl5ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHkgPSBpeSAqIHNlZ21lbnRIZWlnaHQgLSBoZWlnaHRIYWxmO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRXaWR0aCAtIHdpZHRoSGFsZjtcblxuXHRcdFx0XHRcdC8vIHNldCB2YWx1ZXMgdG8gY29ycmVjdCB2ZWN0b3IgY29tcG9uZW50XG5cblx0XHRcdFx0XHR2ZWN0b3JbIHUgXSA9IHggKiB1ZGlyO1xuXHRcdFx0XHRcdHZlY3RvclsgdiBdID0geSAqIHZkaXI7XG5cdFx0XHRcdFx0dmVjdG9yWyB3IF0gPSBkZXB0aEhhbGY7XG5cblx0XHRcdFx0XHQvLyBub3cgYXBwbHkgdmVjdG9yIHRvIHZlcnRleCBidWZmZXJcblxuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnogKTtcblxuXHRcdFx0XHRcdC8vIHNldCB2YWx1ZXMgdG8gY29ycmVjdCB2ZWN0b3IgY29tcG9uZW50XG5cblx0XHRcdFx0XHR2ZWN0b3JbIHUgXSA9IDA7XG5cdFx0XHRcdFx0dmVjdG9yWyB2IF0gPSAwO1xuXHRcdFx0XHRcdHZlY3RvclsgdyBdID0gZGVwdGggPiAwID8gMSA6IC0gMTtcblxuXHRcdFx0XHRcdC8vIG5vdyBhcHBseSB2ZWN0b3IgdG8gbm9ybWFsIGJ1ZmZlclxuXG5cdFx0XHRcdFx0bm9ybWFscy5wdXNoKCB2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56ICk7XG5cblx0XHRcdFx0XHQvLyB1dnNcblxuXHRcdFx0XHRcdHV2cy5wdXNoKCBpeCAvIGdyaWRYICk7XG5cdFx0XHRcdFx0dXZzLnB1c2goIDEgLSAoIGl5IC8gZ3JpZFkgKSApO1xuXG5cdFx0XHRcdFx0Ly8gY291bnRlcnNcblxuXHRcdFx0XHRcdHZlcnRleENvdW50ZXIgKz0gMTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gaW5kaWNlc1xuXG5cdFx0XHQvLyAxLiB5b3UgbmVlZCB0aHJlZSBpbmRpY2VzIHRvIGRyYXcgYSBzaW5nbGUgZmFjZVxuXHRcdFx0Ly8gMi4gYSBzaW5nbGUgc2VnbWVudCBjb25zaXN0cyBvZiB0d28gZmFjZXNcblx0XHRcdC8vIDMuIHNvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgc2l4ICgyKjMpIGluZGljZXMgcGVyIHNlZ21lbnRcblxuXHRcdFx0Zm9yICggbGV0IGl5ID0gMDsgaXkgPCBncmlkWTsgaXkgKysgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGl4ID0gMDsgaXggPCBncmlkWDsgaXggKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBhID0gbnVtYmVyT2ZWZXJ0aWNlcyArIGl4ICsgZ3JpZFgxICogaXk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRYMSAqICggaXkgKyAxICk7XG5cdFx0XHRcdFx0Y29uc3QgYyA9IG51bWJlck9mVmVydGljZXMgKyAoIGl4ICsgMSApICsgZ3JpZFgxICogKCBpeSArIDEgKTtcblx0XHRcdFx0XHRjb25zdCBkID0gbnVtYmVyT2ZWZXJ0aWNlcyArICggaXggKyAxICkgKyBncmlkWDEgKiBpeTtcblxuXHRcdFx0XHRcdC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0XHRcdC8vIGluY3JlYXNlIGNvdW50ZXJcblxuXHRcdFx0XHRcdGdyb3VwQ291bnQgKz0gNjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gYWRkIGEgZ3JvdXAgdG8gdGhlIGdlb21ldHJ5LiB0aGlzIHdpbGwgZW5zdXJlIG11bHRpIG1hdGVyaWFsIHN1cHBvcnRcblxuXHRcdFx0c2NvcGUuYWRkR3JvdXAoIGdyb3VwU3RhcnQsIGdyb3VwQ291bnQsIG1hdGVyaWFsSW5kZXggKTtcblxuXHRcdFx0Ly8gY2FsY3VsYXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzXG5cblx0XHRcdGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDtcblxuXHRcdFx0Ly8gdXBkYXRlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlc1xuXG5cdFx0XHRudW1iZXJPZlZlcnRpY2VzICs9IHZlcnRleENvdW50ZXI7XG5cblx0XHR9XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgQm94R2VvbWV0cnkoIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0LCBkYXRhLmRlcHRoLCBkYXRhLndpZHRoU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEuZGVwdGhTZWdtZW50cyApO1xuXG5cdH1cblxufVxuXG4vKipcbiAqIFVuaWZvcm0gVXRpbGl0aWVzXG4gKi9cblxuZnVuY3Rpb24gY2xvbmVVbmlmb3Jtcyggc3JjICkge1xuXG5cdGNvbnN0IGRzdCA9IHt9O1xuXG5cdGZvciAoIGNvbnN0IHUgaW4gc3JjICkge1xuXG5cdFx0ZHN0WyB1IF0gPSB7fTtcblxuXHRcdGZvciAoIGNvbnN0IHAgaW4gc3JjWyB1IF0gKSB7XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gc3JjWyB1IF1bIHAgXTtcblxuXHRcdFx0aWYgKCBwcm9wZXJ0eSAmJiAoIHByb3BlcnR5LmlzQ29sb3IgfHxcblx0XHRcdFx0cHJvcGVydHkuaXNNYXRyaXgzIHx8IHByb3BlcnR5LmlzTWF0cml4NCB8fFxuXHRcdFx0XHRwcm9wZXJ0eS5pc1ZlY3RvcjIgfHwgcHJvcGVydHkuaXNWZWN0b3IzIHx8IHByb3BlcnR5LmlzVmVjdG9yNCB8fFxuXHRcdFx0XHRwcm9wZXJ0eS5pc1RleHR1cmUgfHwgcHJvcGVydHkuaXNRdWF0ZXJuaW9uICkgKSB7XG5cblx0XHRcdFx0ZHN0WyB1IF1bIHAgXSA9IHByb3BlcnR5LmNsb25lKCk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHByb3BlcnR5ICkgKSB7XG5cblx0XHRcdFx0ZHN0WyB1IF1bIHAgXSA9IHByb3BlcnR5LnNsaWNlKCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0ZHN0WyB1IF1bIHAgXSA9IHByb3BlcnR5O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBkc3Q7XG5cbn1cblxuZnVuY3Rpb24gbWVyZ2VVbmlmb3JtcyggdW5pZm9ybXMgKSB7XG5cblx0Y29uc3QgbWVyZ2VkID0ge307XG5cblx0Zm9yICggbGV0IHUgPSAwOyB1IDwgdW5pZm9ybXMubGVuZ3RoOyB1ICsrICkge1xuXG5cdFx0Y29uc3QgdG1wID0gY2xvbmVVbmlmb3JtcyggdW5pZm9ybXNbIHUgXSApO1xuXG5cdFx0Zm9yICggY29uc3QgcCBpbiB0bXAgKSB7XG5cblx0XHRcdG1lcmdlZFsgcCBdID0gdG1wWyBwIF07XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXJnZWQ7XG5cbn1cblxuLy8gTGVnYWN5XG5cbmNvbnN0IFVuaWZvcm1zVXRpbHMgPSB7IGNsb25lOiBjbG9uZVVuaWZvcm1zLCBtZXJnZTogbWVyZ2VVbmlmb3JtcyB9O1xuXG52YXIgZGVmYXVsdF92ZXJ0ZXggPSBcInZvaWQgbWFpbigpIHtcXG5cXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XFxufVwiO1xuXG52YXIgZGVmYXVsdF9mcmFnbWVudCA9IFwidm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xcbn1cIjtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGRlZmluZXM6IHsgXCJsYWJlbFwiIDogXCJ2YWx1ZVwiIH0sXG4gKiAgdW5pZm9ybXM6IHsgXCJwYXJhbWV0ZXIxXCI6IHsgdmFsdWU6IDEuMCB9LCBcInBhcmFtZXRlcjJcIjogeyB2YWx1ZTI6IDIgfSB9LFxuICpcbiAqICBmcmFnbWVudFNoYWRlcjogPHN0cmluZz4sXG4gKiAgdmVydGV4U2hhZGVyOiA8c3RyaW5nPixcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqICBsaWdodHM6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIFNoYWRlck1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTaGFkZXJNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7fTtcblx0XHR0aGlzLnVuaWZvcm1zID0ge307XG5cblx0XHR0aGlzLnZlcnRleFNoYWRlciA9IGRlZmF1bHRfdmVydGV4O1xuXHRcdHRoaXMuZnJhZ21lbnRTaGFkZXIgPSBkZWZhdWx0X2ZyYWdtZW50O1xuXG5cdFx0dGhpcy5saW5ld2lkdGggPSAxO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cblx0XHR0aGlzLmZvZyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNjZW5lIGZvZ1xuXHRcdHRoaXMubGlnaHRzID0gZmFsc2U7IC8vIHNldCB0byB1c2Ugc2NlbmUgbGlnaHRzXG5cdFx0dGhpcy5jbGlwcGluZyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHVzZXItZGVmaW5lZCBjbGlwcGluZyBwbGFuZXNcblxuXHRcdHRoaXMuZXh0ZW5zaW9ucyA9IHtcblx0XHRcdGRlcml2YXRpdmVzOiBmYWxzZSwgLy8gc2V0IHRvIHVzZSBkZXJpdmF0aXZlc1xuXHRcdFx0ZnJhZ0RlcHRoOiBmYWxzZSwgLy8gc2V0IHRvIHVzZSBmcmFnbWVudCBkZXB0aCB2YWx1ZXNcblx0XHRcdGRyYXdCdWZmZXJzOiBmYWxzZSwgLy8gc2V0IHRvIHVzZSBkcmF3IGJ1ZmZlcnNcblx0XHRcdHNoYWRlclRleHR1cmVMT0Q6IGZhbHNlIC8vIHNldCB0byB1c2Ugc2hhZGVyIHRleHR1cmUgTE9EXG5cdFx0fTtcblxuXHRcdC8vIFdoZW4gcmVuZGVyZWQgZ2VvbWV0cnkgZG9lc24ndCBpbmNsdWRlIHRoZXNlIGF0dHJpYnV0ZXMgYnV0IHRoZSBtYXRlcmlhbCBkb2VzLFxuXHRcdC8vIHVzZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpbiBXZWJHTC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gYnVmZmVyIGRhdGEgaXMgbWlzc2luZy5cblx0XHR0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgPSB7XG5cdFx0XHQnY29sb3InOiBbIDEsIDEsIDEgXSxcblx0XHRcdCd1dic6IFsgMCwgMCBdLFxuXHRcdFx0J3V2Mic6IFsgMCwgMCBdXG5cdFx0fTtcblxuXHRcdHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5nbHNsVmVyc2lvbiA9IG51bGw7XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCBwYXJhbWV0ZXJzLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5mcmFnbWVudFNoYWRlciA9IHNvdXJjZS5mcmFnbWVudFNoYWRlcjtcblx0XHR0aGlzLnZlcnRleFNoYWRlciA9IHNvdXJjZS52ZXJ0ZXhTaGFkZXI7XG5cblx0XHR0aGlzLnVuaWZvcm1zID0gY2xvbmVVbmlmb3Jtcyggc291cmNlLnVuaWZvcm1zICk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLmRlZmluZXMgKTtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cblx0XHR0aGlzLmxpZ2h0cyA9IHNvdXJjZS5saWdodHM7XG5cdFx0dGhpcy5jbGlwcGluZyA9IHNvdXJjZS5jbGlwcGluZztcblxuXHRcdHRoaXMuZXh0ZW5zaW9ucyA9IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UuZXh0ZW5zaW9ucyApO1xuXG5cdFx0dGhpcy5nbHNsVmVyc2lvbiA9IHNvdXJjZS5nbHNsVmVyc2lvbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRkYXRhLmdsc2xWZXJzaW9uID0gdGhpcy5nbHNsVmVyc2lvbjtcblx0XHRkYXRhLnVuaWZvcm1zID0ge307XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIHRoaXMudW5pZm9ybXMgKSB7XG5cblx0XHRcdGNvbnN0IHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zWyBuYW1lIF07XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHVuaWZvcm0udmFsdWU7XG5cblx0XHRcdGlmICggdmFsdWUgJiYgdmFsdWUuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndCcsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvSlNPTiggbWV0YSApLnV1aWRcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNDb2xvciApIHtcblxuXHRcdFx0XHRkYXRhLnVuaWZvcm1zWyBuYW1lIF0gPSB7XG5cdFx0XHRcdFx0dHlwZTogJ2MnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS5nZXRIZXgoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc1ZlY3RvcjIgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd2MicsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc1ZlY3RvcjMgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd2MycsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc1ZlY3RvcjQgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd2NCcsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc01hdHJpeDMgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdtMycsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc01hdHJpeDQgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdtNCcsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBub3RlOiB0aGUgYXJyYXkgdmFyaWFudHMgdjJ2LCB2M3YsIHY0diwgbTR2IGFuZCB0diBhcmUgbm90IHN1cHBvcnRlZCBzbyBmYXJcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBPYmplY3Qua2V5cyggdGhpcy5kZWZpbmVzICkubGVuZ3RoID4gMCApIGRhdGEuZGVmaW5lcyA9IHRoaXMuZGVmaW5lcztcblxuXHRcdGRhdGEudmVydGV4U2hhZGVyID0gdGhpcy52ZXJ0ZXhTaGFkZXI7XG5cdFx0ZGF0YS5mcmFnbWVudFNoYWRlciA9IHRoaXMuZnJhZ21lbnRTaGFkZXI7XG5cblx0XHRjb25zdCBleHRlbnNpb25zID0ge307XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gdGhpcy5leHRlbnNpb25zICkge1xuXG5cdFx0XHRpZiAoIHRoaXMuZXh0ZW5zaW9uc1sga2V5IF0gPT09IHRydWUgKSBleHRlbnNpb25zWyBrZXkgXSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIE9iamVjdC5rZXlzKCBleHRlbnNpb25zICkubGVuZ3RoID4gMCApIGRhdGEuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWwgPSB0cnVlO1xuXG5jbGFzcyBDYW1lcmEgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0NhbWVyYSc7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KCBzb3VyY2UubWF0cml4V29ybGRJbnZlcnNlICk7XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSggc291cmNlLnByb2plY3Rpb25NYXRyaXggKTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkoIHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFdvcmxkRGlyZWN0aW9uKCB0YXJnZXQgKSB7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0Y29uc3QgZSA9IHRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCggLSBlWyA4IF0sIC0gZVsgOSBdLCAtIGVbIDEwIF0gKS5ub3JtYWxpemUoKTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KCB0aGlzLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0fVxuXG5cdHVwZGF0ZVdvcmxkTWF0cml4KCB1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbiApIHtcblxuXHRcdHN1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KCB1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbiApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSggdGhpcy5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuQ2FtZXJhLnByb3RvdHlwZS5pc0NhbWVyYSA9IHRydWU7XG5cbmNsYXNzIFBlcnNwZWN0aXZlQ2FtZXJhIGV4dGVuZHMgQ2FtZXJhIHtcblxuXHRjb25zdHJ1Y3RvciggZm92ID0gNTAsIGFzcGVjdCA9IDEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDAgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BlcnNwZWN0aXZlQ2FtZXJhJztcblxuXHRcdHRoaXMuZm92ID0gZm92O1xuXHRcdHRoaXMuem9vbSA9IDE7XG5cblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xuXHRcdHRoaXMuZmFyID0gZmFyO1xuXHRcdHRoaXMuZm9jdXMgPSAxMDtcblxuXHRcdHRoaXMuYXNwZWN0ID0gYXNwZWN0O1xuXHRcdHRoaXMudmlldyA9IG51bGw7XG5cblx0XHR0aGlzLmZpbG1HYXVnZSA9IDM1O1x0Ly8gd2lkdGggb2YgdGhlIGZpbG0gKGRlZmF1bHQgaW4gbWlsbGltZXRlcnMpXG5cdFx0dGhpcy5maWxtT2Zmc2V0ID0gMDtcdC8vIGhvcml6b250YWwgZmlsbSBvZmZzZXQgKHNhbWUgdW5pdCBhcyBnYXVnZSlcblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICk7XG5cblx0XHR0aGlzLmZvdiA9IHNvdXJjZS5mb3Y7XG5cdFx0dGhpcy56b29tID0gc291cmNlLnpvb207XG5cblx0XHR0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjtcblx0XHR0aGlzLmZhciA9IHNvdXJjZS5mYXI7XG5cdFx0dGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1cztcblxuXHRcdHRoaXMuYXNwZWN0ID0gc291cmNlLmFzcGVjdDtcblx0XHR0aGlzLnZpZXcgPSBzb3VyY2UudmlldyA9PT0gbnVsbCA/IG51bGwgOiBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLnZpZXcgKTtcblxuXHRcdHRoaXMuZmlsbUdhdWdlID0gc291cmNlLmZpbG1HYXVnZTtcblx0XHR0aGlzLmZpbG1PZmZzZXQgPSBzb3VyY2UuZmlsbU9mZnNldDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgRk9WIGJ5IGZvY2FsIGxlbmd0aCBpbiByZXNwZWN0IHRvIHRoZSBjdXJyZW50IC5maWxtR2F1Z2UuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IGZpbG0gZ2F1Z2UgaXMgMzUsIHNvIHRoYXQgdGhlIGZvY2FsIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGZvclxuXHQgKiBhIDM1bW0gKGZ1bGwgZnJhbWUpIGNhbWVyYS5cblx0ICpcblx0ICogVmFsdWVzIGZvciBmb2NhbCBsZW5ndGggYW5kIGZpbG0gZ2F1Z2UgbXVzdCBoYXZlIHRoZSBzYW1lIHVuaXQuXG5cdCAqL1xuXHRzZXRGb2NhbExlbmd0aCggZm9jYWxMZW5ndGggKSB7XG5cblx0XHQvKiogc2VlIHtAbGluayBodHRwOi8vd3d3LmJvYmF0a2lucy5jb20vcGhvdG9ncmFwaHkvdGVjaG5pY2FsL2ZpZWxkX29mX3ZpZXcuaHRtbH0gKi9cblx0XHRjb25zdCB2RXh0ZW50U2xvcGUgPSAwLjUgKiB0aGlzLmdldEZpbG1IZWlnaHQoKSAvIGZvY2FsTGVuZ3RoO1xuXG5cdFx0dGhpcy5mb3YgPSBSQUQyREVHICogMiAqIE1hdGguYXRhbiggdkV4dGVudFNsb3BlICk7XG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBmb2NhbCBsZW5ndGggZnJvbSB0aGUgY3VycmVudCAuZm92IGFuZCAuZmlsbUdhdWdlLlxuXHQgKi9cblx0Z2V0Rm9jYWxMZW5ndGgoKSB7XG5cblx0XHRjb25zdCB2RXh0ZW50U2xvcGUgPSBNYXRoLnRhbiggREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92ICk7XG5cblx0XHRyZXR1cm4gMC41ICogdGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyB2RXh0ZW50U2xvcGU7XG5cblx0fVxuXG5cdGdldEVmZmVjdGl2ZUZPVigpIHtcblxuXHRcdHJldHVybiBSQUQyREVHICogMiAqIE1hdGguYXRhbihcblx0XHRcdE1hdGgudGFuKCBERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRoaXMuem9vbSApO1xuXG5cdH1cblxuXHRnZXRGaWxtV2lkdGgoKSB7XG5cblx0XHQvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVyZWQgaW4gcG9ydHJhaXQgZm9ybWF0IChhc3BlY3QgPCAxKVxuXHRcdHJldHVybiB0aGlzLmZpbG1HYXVnZSAqIE1hdGgubWluKCB0aGlzLmFzcGVjdCwgMSApO1xuXG5cdH1cblxuXHRnZXRGaWxtSGVpZ2h0KCkge1xuXG5cdFx0Ly8gZmlsbSBub3QgY29tcGxldGVseSBjb3ZlcmVkIGluIGxhbmRzY2FwZSBmb3JtYXQgKGFzcGVjdCA+IDEpXG5cdFx0cmV0dXJuIHRoaXMuZmlsbUdhdWdlIC8gTWF0aC5tYXgoIHRoaXMuYXNwZWN0LCAxICk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGFuIG9mZnNldCBpbiBhIGxhcmdlciBmcnVzdHVtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbXVsdGktd2luZG93IG9yXG5cdCAqIG11bHRpLW1vbml0b3IvbXVsdGktbWFjaGluZSBzZXR1cHMuXG5cdCAqXG5cdCAqIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSAzeDIgbW9uaXRvcnMgYW5kIGVhY2ggbW9uaXRvciBpcyAxOTIweDEwODAgYW5kXG5cdCAqIHRoZSBtb25pdG9ycyBhcmUgaW4gZ3JpZCBsaWtlIHRoaXNcblx0ICpcblx0ICogICArLS0tKy0tLSstLS0rXG5cdCAqICAgfCBBIHwgQiB8IEMgfFxuXHQgKiAgICstLS0rLS0tKy0tLStcblx0ICogICB8IEQgfCBFIHwgRiB8XG5cdCAqICAgKy0tLSstLS0rLS0tK1xuXHQgKlxuXHQgKiB0aGVuIGZvciBlYWNoIG1vbml0b3IgeW91IHdvdWxkIGNhbGwgaXQgbGlrZSB0aGlzXG5cdCAqXG5cdCAqICAgY29uc3QgdyA9IDE5MjA7XG5cdCAqICAgY29uc3QgaCA9IDEwODA7XG5cdCAqICAgY29uc3QgZnVsbFdpZHRoID0gdyAqIDM7XG5cdCAqICAgY29uc3QgZnVsbEhlaWdodCA9IGggKiAyO1xuXHQgKlxuXHQgKiAgIC0tQS0tXG5cdCAqICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDAsIGggKiAwLCB3LCBoICk7XG5cdCAqICAgLS1CLS1cblx0ICogICBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMSwgaCAqIDAsIHcsIGggKTtcblx0ICogICAtLUMtLVxuXHQgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAyLCBoICogMCwgdywgaCApO1xuXHQgKiAgIC0tRC0tXG5cdCAqICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDAsIGggKiAxLCB3LCBoICk7XG5cdCAqICAgLS1FLS1cblx0ICogICBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMSwgaCAqIDEsIHcsIGggKTtcblx0ICogICAtLUYtLVxuXHQgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAyLCBoICogMSwgdywgaCApO1xuXHQgKlxuXHQgKiAgIE5vdGUgdGhlcmUgaXMgbm8gcmVhc29uIG1vbml0b3JzIGhhdmUgdG8gYmUgdGhlIHNhbWUgc2l6ZSBvciBpbiBhIGdyaWQuXG5cdCAqL1xuXHRzZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG5cblx0XHR0aGlzLmFzcGVjdCA9IGZ1bGxXaWR0aCAvIGZ1bGxIZWlnaHQ7XG5cblx0XHRpZiAoIHRoaXMudmlldyA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy52aWV3ID0ge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRmdWxsV2lkdGg6IDEsXG5cdFx0XHRcdGZ1bGxIZWlnaHQ6IDEsXG5cdFx0XHRcdG9mZnNldFg6IDAsXG5cdFx0XHRcdG9mZnNldFk6IDAsXG5cdFx0XHRcdHdpZHRoOiAxLFxuXHRcdFx0XHRoZWlnaHQ6IDFcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1bGxXaWR0aDtcblx0XHR0aGlzLnZpZXcuZnVsbEhlaWdodCA9IGZ1bGxIZWlnaHQ7XG5cdFx0dGhpcy52aWV3Lm9mZnNldFggPSB4O1xuXHRcdHRoaXMudmlldy5vZmZzZXRZID0geTtcblx0XHR0aGlzLnZpZXcud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLnZpZXcuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdGNsZWFyVmlld09mZnNldCgpIHtcblxuXHRcdGlmICggdGhpcy52aWV3ICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XG5cblx0XHRjb25zdCBuZWFyID0gdGhpcy5uZWFyO1xuXHRcdGxldCB0b3AgPSBuZWFyICogTWF0aC50YW4oIERFRzJSQUQgKiAwLjUgKiB0aGlzLmZvdiApIC8gdGhpcy56b29tO1xuXHRcdGxldCBoZWlnaHQgPSAyICogdG9wO1xuXHRcdGxldCB3aWR0aCA9IHRoaXMuYXNwZWN0ICogaGVpZ2h0O1xuXHRcdGxldCBsZWZ0ID0gLSAwLjUgKiB3aWR0aDtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy52aWV3O1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgIT09IG51bGwgJiYgdGhpcy52aWV3LmVuYWJsZWQgKSB7XG5cblx0XHRcdGNvbnN0IGZ1bGxXaWR0aCA9IHZpZXcuZnVsbFdpZHRoLFxuXHRcdFx0XHRmdWxsSGVpZ2h0ID0gdmlldy5mdWxsSGVpZ2h0O1xuXG5cdFx0XHRsZWZ0ICs9IHZpZXcub2Zmc2V0WCAqIHdpZHRoIC8gZnVsbFdpZHRoO1xuXHRcdFx0dG9wIC09IHZpZXcub2Zmc2V0WSAqIGhlaWdodCAvIGZ1bGxIZWlnaHQ7XG5cdFx0XHR3aWR0aCAqPSB2aWV3LndpZHRoIC8gZnVsbFdpZHRoO1xuXHRcdFx0aGVpZ2h0ICo9IHZpZXcuaGVpZ2h0IC8gZnVsbEhlaWdodDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHNrZXcgPSB0aGlzLmZpbG1PZmZzZXQ7XG5cdFx0aWYgKCBza2V3ICE9PSAwICkgbGVmdCArPSBuZWFyICogc2tldyAvIHRoaXMuZ2V0RmlsbVdpZHRoKCk7XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCBsZWZ0ICsgd2lkdGgsIHRvcCwgdG9wIC0gaGVpZ2h0LCBuZWFyLCB0aGlzLmZhciApO1xuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KCB0aGlzLnByb2plY3Rpb25NYXRyaXggKS5pbnZlcnQoKTtcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0ZGF0YS5vYmplY3QuZm92ID0gdGhpcy5mb3Y7XG5cdFx0ZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTtcblxuXHRcdGRhdGEub2JqZWN0Lm5lYXIgPSB0aGlzLm5lYXI7XG5cdFx0ZGF0YS5vYmplY3QuZmFyID0gdGhpcy5mYXI7XG5cdFx0ZGF0YS5vYmplY3QuZm9jdXMgPSB0aGlzLmZvY3VzO1xuXG5cdFx0ZGF0YS5vYmplY3QuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XG5cblx0XHRpZiAoIHRoaXMudmlldyAhPT0gbnVsbCApIGRhdGEub2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgdGhpcy52aWV3ICk7XG5cblx0XHRkYXRhLm9iamVjdC5maWxtR2F1Z2UgPSB0aGlzLmZpbG1HYXVnZTtcblx0XHRkYXRhLm9iamVjdC5maWxtT2Zmc2V0ID0gdGhpcy5maWxtT2Zmc2V0O1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cblBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhID0gdHJ1ZTtcblxuY29uc3QgZm92ID0gOTAsIGFzcGVjdCA9IDE7XG5cbmNsYXNzIEN1YmVDYW1lcmEgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIG5lYXIsIGZhciwgcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDdWJlQ2FtZXJhJztcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICE9PSB0cnVlICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cblx0XHRjb25zdCBjYW1lcmFQWCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYVBYLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYVBYLnVwLnNldCggMCwgLSAxLCAwICk7XG5cdFx0Y2FtZXJhUFgubG9va0F0KCBuZXcgVmVjdG9yMyggMSwgMCwgMCApICk7XG5cdFx0dGhpcy5hZGQoIGNhbWVyYVBYICk7XG5cblx0XHRjb25zdCBjYW1lcmFOWCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYU5YLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYU5YLnVwLnNldCggMCwgLSAxLCAwICk7XG5cdFx0Y2FtZXJhTlgubG9va0F0KCBuZXcgVmVjdG9yMyggLSAxLCAwLCAwICkgKTtcblx0XHR0aGlzLmFkZCggY2FtZXJhTlggKTtcblxuXHRcdGNvbnN0IGNhbWVyYVBZID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7XG5cdFx0Y2FtZXJhUFkubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhUFkudXAuc2V0KCAwLCAwLCAxICk7XG5cdFx0Y2FtZXJhUFkubG9va0F0KCBuZXcgVmVjdG9yMyggMCwgMSwgMCApICk7XG5cdFx0dGhpcy5hZGQoIGNhbWVyYVBZICk7XG5cblx0XHRjb25zdCBjYW1lcmFOWSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYU5ZLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYU5ZLnVwLnNldCggMCwgMCwgLSAxICk7XG5cdFx0Y2FtZXJhTlkubG9va0F0KCBuZXcgVmVjdG9yMyggMCwgLSAxLCAwICkgKTtcblx0XHR0aGlzLmFkZCggY2FtZXJhTlkgKTtcblxuXHRcdGNvbnN0IGNhbWVyYVBaID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7XG5cdFx0Y2FtZXJhUFoubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhUFoudXAuc2V0KCAwLCAtIDEsIDAgKTtcblx0XHRjYW1lcmFQWi5sb29rQXQoIG5ldyBWZWN0b3IzKCAwLCAwLCAxICkgKTtcblx0XHR0aGlzLmFkZCggY2FtZXJhUFogKTtcblxuXHRcdGNvbnN0IGNhbWVyYU5aID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7XG5cdFx0Y2FtZXJhTloubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhTloudXAuc2V0KCAwLCAtIDEsIDAgKTtcblx0XHRjYW1lcmFOWi5sb29rQXQoIG5ldyBWZWN0b3IzKCAwLCAwLCAtIDEgKSApO1xuXHRcdHRoaXMuYWRkKCBjYW1lcmFOWiApO1xuXG5cdH1cblxuXHR1cGRhdGUoIHJlbmRlcmVyLCBzY2VuZSApIHtcblxuXHRcdGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldDtcblxuXHRcdGNvbnN0IFsgY2FtZXJhUFgsIGNhbWVyYU5YLCBjYW1lcmFQWSwgY2FtZXJhTlksIGNhbWVyYVBaLCBjYW1lcmFOWiBdID0gdGhpcy5jaGlsZHJlbjtcblxuXHRcdGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSByZW5kZXJlci54ci5lbmFibGVkO1xuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdHJlbmRlcmVyLnhyLmVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdGNvbnN0IGdlbmVyYXRlTWlwbWFwcyA9IHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztcblxuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDAgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFQWCApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDEgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFOWCApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDIgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFQWSApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDMgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFOWSApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDQgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFQWiApO1xuXG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZ2VuZXJhdGVNaXBtYXBzO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDUgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFOWiApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBjdXJyZW50UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRyZW5kZXJlci54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblxuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxufVxuXG5jbGFzcyBDdWJlVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCBpbWFnZXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKSB7XG5cblx0XHRpbWFnZXMgPSBpbWFnZXMgIT09IHVuZGVmaW5lZCA/IGltYWdlcyA6IFtdO1xuXHRcdG1hcHBpbmcgPSBtYXBwaW5nICE9PSB1bmRlZmluZWQgPyBtYXBwaW5nIDogQ3ViZVJlZmxlY3Rpb25NYXBwaW5nO1xuXG5cdFx0c3VwZXIoIGltYWdlcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApO1xuXG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXG5cdH1cblxuXHRnZXQgaW1hZ2VzKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuaW1hZ2U7XG5cblx0fVxuXG5cdHNldCBpbWFnZXMoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5pbWFnZSA9IHZhbHVlO1xuXG5cdH1cblxufVxuXG5DdWJlVGV4dHVyZS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBleHRlbmRzIFdlYkdMUmVuZGVyVGFyZ2V0IHtcblxuXHRjb25zdHJ1Y3Rvciggc2l6ZSwgb3B0aW9ucywgZHVtbXkgKSB7XG5cblx0XHRpZiAoIE51bWJlci5pc0ludGVnZXIoIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApJyApO1xuXG5cdFx0XHRvcHRpb25zID0gZHVtbXk7XG5cblx0XHR9XG5cblx0XHRzdXBlciggc2l6ZSwgc2l6ZSwgb3B0aW9ucyApO1xuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHQvLyBCeSBjb252ZW50aW9uIC0tIGxpa2VseSBiYXNlZCBvbiB0aGUgUmVuZGVyTWFuIHNwZWMgZnJvbSB0aGUgMTk5MCdzIC0tIGN1YmUgbWFwcyBhcmUgc3BlY2lmaWVkIGJ5IFdlYkdMIChhbmQgdGhyZWUuanMpXG5cdFx0Ly8gaW4gYSBjb29yZGluYXRlIHN5c3RlbSBpbiB3aGljaCBwb3NpdGl2ZS14IGlzIHRvIHRoZSByaWdodCB3aGVuIGxvb2tpbmcgdXAgdGhlIHBvc2l0aXZlLXogYXhpcyAtLSBpbiBvdGhlciB3b3Jkcyxcblx0XHQvLyBpbiBhIGxlZnQtaGFuZGVkIGNvb3JkaW5hdGUgc3lzdGVtLiBCeSBjb250aW51aW5nIHRoaXMgY29udmVudGlvbiwgcHJlZXhpc3RpbmcgY3ViZSBtYXBzIGNvbnRpbnVlZCB0byByZW5kZXIgY29ycmVjdGx5LlxuXG5cdFx0Ly8gdGhyZWUuanMgdXNlcyBhIHJpZ2h0LWhhbmRlZCBjb29yZGluYXRlIHN5c3RlbS4gU28gZW52aXJvbm1lbnQgbWFwcyB1c2VkIGluIHRocmVlLmpzIGFwcGVhciB0byBoYXZlIHB4IGFuZCBueCBzd2FwcGVkXG5cdFx0Ly8gYW5kIHRoZSBmbGFnIGlzUmVuZGVyVGFyZ2V0VGV4dHVyZSBjb250cm9scyB0aGlzIGNvbnZlcnNpb24uIFRoZSBmbGlwIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIFdlYkdMQ3ViZVJlbmRlclRhcmdldC50ZXh0dXJlXG5cdFx0Ly8gYXMgYSBjdWJlIHRleHR1cmUgKHRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBpc1JlbmRlclRhcmdldFRleHR1cmUgaXMgc2V0IHRvIHRydWUgZm9yIGN1YmUgdGV4dHVyZXMpLlxuXG5cdFx0dGhpcy50ZXh0dXJlID0gbmV3IEN1YmVUZXh0dXJlKCB1bmRlZmluZWQsIG9wdGlvbnMubWFwcGluZywgb3B0aW9ucy53cmFwUywgb3B0aW9ucy53cmFwVCwgb3B0aW9ucy5tYWdGaWx0ZXIsIG9wdGlvbnMubWluRmlsdGVyLCBvcHRpb25zLmZvcm1hdCwgb3B0aW9ucy50eXBlLCBvcHRpb25zLmFuaXNvdHJvcHksIG9wdGlvbnMuZW5jb2RpbmcgKTtcblx0XHR0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID0gdHJ1ZTtcblxuXHRcdHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBvcHRpb25zLmdlbmVyYXRlTWlwbWFwcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgOiBmYWxzZTtcblx0XHR0aGlzLnRleHR1cmUubWluRmlsdGVyID0gb3B0aW9ucy5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubWluRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXG5cdH1cblxuXHRmcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSggcmVuZGVyZXIsIHRleHR1cmUgKSB7XG5cblx0XHR0aGlzLnRleHR1cmUudHlwZSA9IHRleHR1cmUudHlwZTtcblx0XHR0aGlzLnRleHR1cmUuZm9ybWF0ID0gUkdCQUZvcm1hdDsgLy8gc2VlICMxODg1OVxuXHRcdHRoaXMudGV4dHVyZS5lbmNvZGluZyA9IHRleHR1cmUuZW5jb2Rpbmc7XG5cblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IHRleHR1cmUubWluRmlsdGVyO1xuXHRcdHRoaXMudGV4dHVyZS5tYWdGaWx0ZXIgPSB0ZXh0dXJlLm1hZ0ZpbHRlcjtcblxuXHRcdGNvbnN0IHNoYWRlciA9IHtcblxuXHRcdFx0dW5pZm9ybXM6IHtcblx0XHRcdFx0dEVxdWlyZWN0OiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHR9LFxuXG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6IC8qIGdsc2wgKi9gXG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHR2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0XHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHRcdFx0XHRcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblxuXHRcdFx0XHR9XG5cdFx0XHRgLFxuXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqL2BcblxuXHRcdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXG5cdFx0XHRcdH1cblx0XHRcdGBcblx0XHR9O1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94R2VvbWV0cnkoIDUsIDUsIDUgKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKCB7XG5cblx0XHRcdG5hbWU6ICdDdWJlbWFwRnJvbUVxdWlyZWN0JyxcblxuXHRcdFx0dW5pZm9ybXM6IGNsb25lVW5pZm9ybXMoIHNoYWRlci51bmlmb3JtcyApLFxuXHRcdFx0dmVydGV4U2hhZGVyOiBzaGFkZXIudmVydGV4U2hhZGVyLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXI6IHNoYWRlci5mcmFnbWVudFNoYWRlcixcblx0XHRcdHNpZGU6IEJhY2tTaWRlLFxuXHRcdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmdcblxuXHRcdH0gKTtcblxuXHRcdG1hdGVyaWFsLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZSA9IHRleHR1cmU7XG5cblx0XHRjb25zdCBtZXNoID0gbmV3IE1lc2goIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0Y29uc3QgY3VycmVudE1pbkZpbHRlciA9IHRleHR1cmUubWluRmlsdGVyO1xuXG5cdFx0Ly8gQXZvaWQgYmx1cnJlZCBwb2xlc1xuXHRcdGlmICggdGV4dHVyZS5taW5GaWx0ZXIgPT09IExpbmVhck1pcG1hcExpbmVhckZpbHRlciApIHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXG5cdFx0Y29uc3QgY2FtZXJhID0gbmV3IEN1YmVDYW1lcmEoIDEsIDEwLCB0aGlzICk7XG5cdFx0Y2FtZXJhLnVwZGF0ZSggcmVuZGVyZXIsIG1lc2ggKTtcblxuXHRcdHRleHR1cmUubWluRmlsdGVyID0gY3VycmVudE1pbkZpbHRlcjtcblxuXHRcdG1lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdG1lc2gubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsZWFyKCByZW5kZXJlciwgY29sb3IsIGRlcHRoLCBzdGVuY2lsICkge1xuXG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCB0aGlzLCBpICk7XG5cblx0XHRcdHJlbmRlcmVyLmNsZWFyKCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwgKTtcblxuXHRcdH1cblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggY3VycmVudFJlbmRlclRhcmdldCApO1xuXG5cdH1cblxufVxuXG5XZWJHTEN1YmVSZW5kZXJUYXJnZXQucHJvdG90eXBlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID0gdHJ1ZTtcblxuY29uc3QgX3ZlY3RvcjEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdmVjdG9yMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9ub3JtYWxNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXgzKCk7XG5cbmNsYXNzIFBsYW5lIHtcblxuXHRjb25zdHJ1Y3Rvciggbm9ybWFsID0gbmV3IFZlY3RvcjMoIDEsIDAsIDAgKSwgY29uc3RhbnQgPSAwICkge1xuXG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXG5cdFx0dGhpcy5ub3JtYWwgPSBub3JtYWw7XG5cdFx0dGhpcy5jb25zdGFudCA9IGNvbnN0YW50O1xuXG5cdH1cblxuXHRzZXQoIG5vcm1hbCwgY29uc3RhbnQgKSB7XG5cblx0XHR0aGlzLm5vcm1hbC5jb3B5KCBub3JtYWwgKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gY29uc3RhbnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Q29tcG9uZW50cyggeCwgeSwgeiwgdyApIHtcblxuXHRcdHRoaXMubm9ybWFsLnNldCggeCwgeSwgeiApO1xuXHRcdHRoaXMuY29uc3RhbnQgPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KCBub3JtYWwsIHBvaW50ICkge1xuXG5cdFx0dGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7XG5cdFx0dGhpcy5jb25zdGFudCA9IC0gcG9pbnQuZG90KCB0aGlzLm5vcm1hbCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Db3BsYW5hclBvaW50cyggYSwgYiwgYyApIHtcblxuXHRcdGNvbnN0IG5vcm1hbCA9IF92ZWN0b3IxLnN1YlZlY3RvcnMoIGMsIGIgKS5jcm9zcyggX3ZlY3RvcjIuc3ViVmVjdG9ycyggYSwgYiApICkubm9ybWFsaXplKCk7XG5cblx0XHQvLyBROiBzaG91bGQgYW4gZXJyb3IgYmUgdGhyb3duIGlmIG5vcm1hbCBpcyB6ZXJvIChlLmcuIGRlZ2VuZXJhdGUgcGxhbmUpP1xuXG5cdFx0dGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCggbm9ybWFsLCBhICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggcGxhbmUgKSB7XG5cblx0XHR0aGlzLm5vcm1hbC5jb3B5KCBwbGFuZS5ub3JtYWwgKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gcGxhbmUuY29uc3RhbnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXG5cdFx0Ly8gTm90ZTogd2lsbCBsZWFkIHRvIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIHBsYW5lIGlzIGludmFsaWQuXG5cblx0XHRjb25zdCBpbnZlcnNlTm9ybWFsTGVuZ3RoID0gMS4wIC8gdGhpcy5ub3JtYWwubGVuZ3RoKCk7XG5cdFx0dGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIoIGludmVyc2VOb3JtYWxMZW5ndGggKTtcblx0XHR0aGlzLmNvbnN0YW50ICo9IGludmVyc2VOb3JtYWxMZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bmVnYXRlKCkge1xuXG5cdFx0dGhpcy5jb25zdGFudCAqPSAtIDE7XG5cdFx0dGhpcy5ub3JtYWwubmVnYXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIHtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbC5kb3QoIHBvaW50ICkgKyB0aGlzLmNvbnN0YW50O1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvU3BoZXJlKCBzcGhlcmUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIHNwaGVyZS5jZW50ZXIgKSAtIHNwaGVyZS5yYWRpdXM7XG5cblx0fVxuXG5cdHByb2plY3RQb2ludCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggdGhpcy5ub3JtYWwgKS5tdWx0aXBseVNjYWxhciggLSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSApLmFkZCggcG9pbnQgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0TGluZSggbGluZSwgdGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgZGlyZWN0aW9uID0gbGluZS5kZWx0YSggX3ZlY3RvcjEgKTtcblxuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gdGhpcy5ub3JtYWwuZG90KCBkaXJlY3Rpb24gKTtcblxuXHRcdGlmICggZGVub21pbmF0b3IgPT09IDAgKSB7XG5cblx0XHRcdC8vIGxpbmUgaXMgY29wbGFuYXIsIHJldHVybiBvcmlnaW5cblx0XHRcdGlmICggdGhpcy5kaXN0YW5jZVRvUG9pbnQoIGxpbmUuc3RhcnQgKSA9PT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGxpbmUuc3RhcnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBVbnN1cmUgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCBtZXRob2QgdG8gaGFuZGxlIHRoaXMgY2FzZS5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IC0gKCBsaW5lLnN0YXJ0LmRvdCggdGhpcy5ub3JtYWwgKSArIHRoaXMuY29uc3RhbnQgKSAvIGRlbm9taW5hdG9yO1xuXG5cdFx0aWYgKCB0IDwgMCB8fCB0ID4gMSApIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCBsaW5lLnN0YXJ0ICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNMaW5lKCBsaW5lICkge1xuXG5cdFx0Ly8gTm90ZTogdGhpcyB0ZXN0cyBpZiBhIGxpbmUgaW50ZXJzZWN0cyB0aGUgcGxhbmUsIG5vdCB3aGV0aGVyIGl0IChvciBpdHMgZW5kLXBvaW50cykgYXJlIGNvcGxhbmFyIHdpdGggaXQuXG5cblx0XHRjb25zdCBzdGFydFNpZ24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApO1xuXHRcdGNvbnN0IGVuZFNpZ24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5lbmQgKTtcblxuXHRcdHJldHVybiAoIHN0YXJ0U2lnbiA8IDAgJiYgZW5kU2lnbiA+IDAgKSB8fCAoIGVuZFNpZ24gPCAwICYmIHN0YXJ0U2lnbiA+IDAgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0cmV0dXJuIGJveC5pbnRlcnNlY3RzUGxhbmUoIHRoaXMgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkge1xuXG5cdFx0cmV0dXJuIHNwaGVyZS5pbnRlcnNlY3RzUGxhbmUoIHRoaXMgKTtcblxuXHR9XG5cblx0Y29wbGFuYXJQb2ludCggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCAtIHRoaXMuY29uc3RhbnQgKTtcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtYXRyaXgsIG9wdGlvbmFsTm9ybWFsTWF0cml4ICkge1xuXG5cdFx0Y29uc3Qgbm9ybWFsTWF0cml4ID0gb3B0aW9uYWxOb3JtYWxNYXRyaXggfHwgX25vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApO1xuXG5cdFx0Y29uc3QgcmVmZXJlbmNlUG9pbnQgPSB0aGlzLmNvcGxhbmFyUG9pbnQoIF92ZWN0b3IxICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblxuXHRcdGNvbnN0IG5vcm1hbCA9IHRoaXMubm9ybWFsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHR0aGlzLmNvbnN0YW50ID0gLSByZWZlcmVuY2VQb2ludC5kb3QoIG5vcm1hbCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZSggb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5jb25zdGFudCAtPSBvZmZzZXQuZG90KCB0aGlzLm5vcm1hbCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggcGxhbmUgKSB7XG5cblx0XHRyZXR1cm4gcGxhbmUubm9ybWFsLmVxdWFscyggdGhpcy5ub3JtYWwgKSAmJiAoIHBsYW5lLmNvbnN0YW50ID09PSB0aGlzLmNvbnN0YW50ICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxufVxuXG5QbGFuZS5wcm90b3R5cGUuaXNQbGFuZSA9IHRydWU7XG5cbmNvbnN0IF9zcGhlcmUkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFNwaGVyZSgpO1xuY29uc3QgX3ZlY3RvciQ3ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBGcnVzdHVtIHtcblxuXHRjb25zdHJ1Y3RvciggcDAgPSBuZXcgUGxhbmUoKSwgcDEgPSBuZXcgUGxhbmUoKSwgcDIgPSBuZXcgUGxhbmUoKSwgcDMgPSBuZXcgUGxhbmUoKSwgcDQgPSBuZXcgUGxhbmUoKSwgcDUgPSBuZXcgUGxhbmUoKSApIHtcblxuXHRcdHRoaXMucGxhbmVzID0gWyBwMCwgcDEsIHAyLCBwMywgcDQsIHA1IF07XG5cblx0fVxuXG5cdHNldCggcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0cGxhbmVzWyAwIF0uY29weSggcDAgKTtcblx0XHRwbGFuZXNbIDEgXS5jb3B5KCBwMSApO1xuXHRcdHBsYW5lc1sgMiBdLmNvcHkoIHAyICk7XG5cdFx0cGxhbmVzWyAzIF0uY29weSggcDMgKTtcblx0XHRwbGFuZXNbIDQgXS5jb3B5KCBwNCApO1xuXHRcdHBsYW5lc1sgNSBdLmNvcHkoIHA1ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggZnJ1c3R1bSApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0cGxhbmVzWyBpIF0uY29weSggZnJ1c3R1bS5wbGFuZXNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCBtICkge1xuXG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5wbGFuZXM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lMCA9IG1lWyAwIF0sIG1lMSA9IG1lWyAxIF0sIG1lMiA9IG1lWyAyIF0sIG1lMyA9IG1lWyAzIF07XG5cdFx0Y29uc3QgbWU0ID0gbWVbIDQgXSwgbWU1ID0gbWVbIDUgXSwgbWU2ID0gbWVbIDYgXSwgbWU3ID0gbWVbIDcgXTtcblx0XHRjb25zdCBtZTggPSBtZVsgOCBdLCBtZTkgPSBtZVsgOSBdLCBtZTEwID0gbWVbIDEwIF0sIG1lMTEgPSBtZVsgMTEgXTtcblx0XHRjb25zdCBtZTEyID0gbWVbIDEyIF0sIG1lMTMgPSBtZVsgMTMgXSwgbWUxNCA9IG1lWyAxNCBdLCBtZTE1ID0gbWVbIDE1IF07XG5cblx0XHRwbGFuZXNbIDAgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCwgbWUxNSAtIG1lMTIgKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbIDEgXS5zZXRDb21wb25lbnRzKCBtZTMgKyBtZTAsIG1lNyArIG1lNCwgbWUxMSArIG1lOCwgbWUxNSArIG1lMTIgKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbIDIgXS5zZXRDb21wb25lbnRzKCBtZTMgKyBtZTEsIG1lNyArIG1lNSwgbWUxMSArIG1lOSwgbWUxNSArIG1lMTMgKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbIDMgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTEsIG1lNyAtIG1lNSwgbWUxMSAtIG1lOSwgbWUxNSAtIG1lMTMgKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbIDQgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTIsIG1lNyAtIG1lNiwgbWUxMSAtIG1lMTAsIG1lMTUgLSBtZTE0ICkubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWyA1IF0uc2V0Q29tcG9uZW50cyggbWUzICsgbWUyLCBtZTcgKyBtZTYsIG1lMTEgKyBtZTEwLCBtZTE1ICsgbWUxNCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGludGVyc2VjdHNPYmplY3QoIG9iamVjdCApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5O1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZSQyLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICkuYXBwbHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTtcblxuXHRcdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoIF9zcGhlcmUkMiApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzU3ByaXRlKCBzcHJpdGUgKSB7XG5cblx0XHRfc3BoZXJlJDIuY2VudGVyLnNldCggMCwgMCwgMCApO1xuXHRcdF9zcGhlcmUkMi5yYWRpdXMgPSAwLjcwNzEwNjc4MTE4NjU0NzY7XG5cdFx0X3NwaGVyZSQyLmFwcGx5TWF0cml4NCggc3ByaXRlLm1hdHJpeFdvcmxkICk7XG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCBfc3BoZXJlJDIgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkge1xuXG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5wbGFuZXM7XG5cdFx0Y29uc3QgY2VudGVyID0gc3BoZXJlLmNlbnRlcjtcblx0XHRjb25zdCBuZWdSYWRpdXMgPSAtIHNwaGVyZS5yYWRpdXM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IHBsYW5lc1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggY2VudGVyICk7XG5cblx0XHRcdGlmICggZGlzdGFuY2UgPCBuZWdSYWRpdXMgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5wbGFuZXM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwbGFuZSA9IHBsYW5lc1sgaSBdO1xuXG5cdFx0XHQvLyBjb3JuZXIgYXQgbWF4IGRpc3RhbmNlXG5cblx0XHRcdF92ZWN0b3IkNy54ID0gcGxhbmUubm9ybWFsLnggPiAwID8gYm94Lm1heC54IDogYm94Lm1pbi54O1xuXHRcdFx0X3ZlY3RvciQ3LnkgPSBwbGFuZS5ub3JtYWwueSA+IDAgPyBib3gubWF4LnkgOiBib3gubWluLnk7XG5cdFx0XHRfdmVjdG9yJDcueiA9IHBsYW5lLm5vcm1hbC56ID4gMCA/IGJveC5tYXgueiA6IGJveC5taW4uejtcblxuXHRcdFx0aWYgKCBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIF92ZWN0b3IkNyApIDwgMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRjb250YWluc1BvaW50KCBwb2ludCApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0aWYgKCBwbGFuZXNbIGkgXS5kaXN0YW5jZVRvUG9pbnQoIHBvaW50ICkgPCAwICkge1xuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBXZWJHTEFuaW1hdGlvbigpIHtcblxuXHRsZXQgY29udGV4dCA9IG51bGw7XG5cdGxldCBpc0FuaW1hdGluZyA9IGZhbHNlO1xuXHRsZXQgYW5pbWF0aW9uTG9vcCA9IG51bGw7XG5cdGxldCByZXF1ZXN0SWQgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUoIHRpbWUsIGZyYW1lICkge1xuXG5cdFx0YW5pbWF0aW9uTG9vcCggdGltZSwgZnJhbWUgKTtcblxuXHRcdHJlcXVlc3RJZCA9IGNvbnRleHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBvbkFuaW1hdGlvbkZyYW1lICk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cblx0XHRzdGFydDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRpZiAoIGlzQW5pbWF0aW5nID09PSB0cnVlICkgcmV0dXJuO1xuXHRcdFx0aWYgKCBhbmltYXRpb25Mb29wID09PSBudWxsICkgcmV0dXJuO1xuXG5cdFx0XHRyZXF1ZXN0SWQgPSBjb250ZXh0LnJlcXVlc3RBbmltYXRpb25GcmFtZSggb25BbmltYXRpb25GcmFtZSApO1xuXG5cdFx0XHRpc0FuaW1hdGluZyA9IHRydWU7XG5cblx0XHR9LFxuXG5cdFx0c3RvcDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb250ZXh0LmNhbmNlbEFuaW1hdGlvbkZyYW1lKCByZXF1ZXN0SWQgKTtcblxuXHRcdFx0aXNBbmltYXRpbmcgPSBmYWxzZTtcblxuXHRcdH0sXG5cblx0XHRzZXRBbmltYXRpb25Mb29wOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkge1xuXG5cdFx0XHRhbmltYXRpb25Mb29wID0gY2FsbGJhY2s7XG5cblx0XHR9LFxuXG5cdFx0c2V0Q29udGV4dDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29udGV4dCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xBdHRyaWJ1dGVzKCBnbCwgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGNvbnN0IGJ1ZmZlcnMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciggYXR0cmlidXRlLCBidWZmZXJUeXBlICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7XG5cdFx0Y29uc3QgdXNhZ2UgPSBhdHRyaWJ1dGUudXNhZ2U7XG5cblx0XHRjb25zdCBidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXHRcdGdsLmJpbmRCdWZmZXIoIGJ1ZmZlclR5cGUsIGJ1ZmZlciApO1xuXHRcdGdsLmJ1ZmZlckRhdGEoIGJ1ZmZlclR5cGUsIGFycmF5LCB1c2FnZSApO1xuXG5cdFx0YXR0cmlidXRlLm9uVXBsb2FkQ2FsbGJhY2soKTtcblxuXHRcdGxldCB0eXBlID0gNTEyNjtcblxuXHRcdGlmICggYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTI2O1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuJyApO1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSApIHtcblxuXHRcdFx0aWYgKCBhdHRyaWJ1dGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0XHR0eXBlID0gNTEzMTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHR5cGUgPSA1MTIzO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTIyO1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSApIHtcblxuXHRcdFx0dHlwZSA9IDUxMjU7XG5cblx0XHR9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTI0O1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTIwO1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyMTtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTIxO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGJ1ZmZlcjogYnVmZmVyLFxuXHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdGJ5dGVzUGVyRWxlbWVudDogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQsXG5cdFx0XHR2ZXJzaW9uOiBhdHRyaWJ1dGUudmVyc2lvblxuXHRcdH07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZUJ1ZmZlciggYnVmZmVyLCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUgKSB7XG5cblx0XHRjb25zdCBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTtcblx0XHRjb25zdCB1cGRhdGVSYW5nZSA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZTtcblxuXHRcdGdsLmJpbmRCdWZmZXIoIGJ1ZmZlclR5cGUsIGJ1ZmZlciApO1xuXG5cdFx0aWYgKCB1cGRhdGVSYW5nZS5jb3VudCA9PT0gLSAxICkge1xuXG5cdFx0XHQvLyBOb3QgdXNpbmcgdXBkYXRlIHJhbmdlc1xuXG5cdFx0XHRnbC5idWZmZXJTdWJEYXRhKCBidWZmZXJUeXBlLCAwLCBhcnJheSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBpc1dlYkdMMiApIHtcblxuXHRcdFx0XHRnbC5idWZmZXJTdWJEYXRhKCBidWZmZXJUeXBlLCB1cGRhdGVSYW5nZS5vZmZzZXQgKiBhcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcblx0XHRcdFx0XHRhcnJheSwgdXBkYXRlUmFuZ2Uub2Zmc2V0LCB1cGRhdGVSYW5nZS5jb3VudCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGdsLmJ1ZmZlclN1YkRhdGEoIGJ1ZmZlclR5cGUsIHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFxuXHRcdFx0XHRcdGFycmF5LnN1YmFycmF5KCB1cGRhdGVSYW5nZS5vZmZzZXQsIHVwZGF0ZVJhbmdlLm9mZnNldCArIHVwZGF0ZVJhbmdlLmNvdW50ICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGVSYW5nZS5jb3VudCA9IC0gMTsgLy8gcmVzZXQgcmFuZ2VcblxuXHRcdH1cblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBnZXQoIGF0dHJpYnV0ZSApIHtcblxuXHRcdGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTtcblxuXHRcdHJldHVybiBidWZmZXJzLmdldCggYXR0cmlidXRlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbW92ZSggYXR0cmlidXRlICkge1xuXG5cdFx0aWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhO1xuXG5cdFx0Y29uc3QgZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTtcblxuXHRcdGlmICggZGF0YSApIHtcblxuXHRcdFx0Z2wuZGVsZXRlQnVmZmVyKCBkYXRhLmJ1ZmZlciApO1xuXG5cdFx0XHRidWZmZXJzLmRlbGV0ZSggYXR0cmlidXRlICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZSggYXR0cmlidXRlLCBidWZmZXJUeXBlICkge1xuXG5cdFx0aWYgKCBhdHRyaWJ1dGUuaXNHTEJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0Y29uc3QgY2FjaGVkID0gYnVmZmVycy5nZXQoIGF0dHJpYnV0ZSApO1xuXG5cdFx0XHRpZiAoICEgY2FjaGVkIHx8IGNhY2hlZC52ZXJzaW9uIDwgYXR0cmlidXRlLnZlcnNpb24gKSB7XG5cblx0XHRcdFx0YnVmZmVycy5zZXQoIGF0dHJpYnV0ZSwge1xuXHRcdFx0XHRcdGJ1ZmZlcjogYXR0cmlidXRlLmJ1ZmZlcixcblx0XHRcdFx0XHR0eXBlOiBhdHRyaWJ1dGUudHlwZSxcblx0XHRcdFx0XHRieXRlc1BlckVsZW1lbnQ6IGF0dHJpYnV0ZS5lbGVtZW50U2l6ZSxcblx0XHRcdFx0XHR2ZXJzaW9uOiBhdHRyaWJ1dGUudmVyc2lvblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhO1xuXG5cdFx0Y29uc3QgZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTtcblxuXHRcdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRidWZmZXJzLnNldCggYXR0cmlidXRlLCBjcmVhdGVCdWZmZXIoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApICk7XG5cblx0XHR9IGVsc2UgaWYgKCBkYXRhLnZlcnNpb24gPCBhdHRyaWJ1dGUudmVyc2lvbiApIHtcblxuXHRcdFx0dXBkYXRlQnVmZmVyKCBkYXRhLmJ1ZmZlciwgYXR0cmlidXRlLCBidWZmZXJUeXBlICk7XG5cblx0XHRcdGRhdGEudmVyc2lvbiA9IGF0dHJpYnV0ZS52ZXJzaW9uO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0Z2V0OiBnZXQsXG5cdFx0cmVtb3ZlOiByZW1vdmUsXG5cdFx0dXBkYXRlOiB1cGRhdGVcblxuXHR9O1xuXG59XG5cbmNsYXNzIFBsYW5lR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BsYW5lR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHR3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLFxuXHRcdFx0aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXG5cdFx0fTtcblxuXHRcdGNvbnN0IHdpZHRoX2hhbGYgPSB3aWR0aCAvIDI7XG5cdFx0Y29uc3QgaGVpZ2h0X2hhbGYgPSBoZWlnaHQgLyAyO1xuXG5cdFx0Y29uc3QgZ3JpZFggPSBNYXRoLmZsb29yKCB3aWR0aFNlZ21lbnRzICk7XG5cdFx0Y29uc3QgZ3JpZFkgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApO1xuXG5cdFx0Y29uc3QgZ3JpZFgxID0gZ3JpZFggKyAxO1xuXHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcblxuXHRcdGNvbnN0IHNlZ21lbnRfd2lkdGggPSB3aWR0aCAvIGdyaWRYO1xuXHRcdGNvbnN0IHNlZ21lbnRfaGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7XG5cblx0XHQvL1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGl5ID0gMDsgaXkgPCBncmlkWTE7IGl5ICsrICkge1xuXG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xuXG5cdFx0XHRmb3IgKCBsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgeCA9IGl4ICogc2VnbWVudF93aWR0aCAtIHdpZHRoX2hhbGY7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggeCwgLSB5LCAwICk7XG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCAwLCAwLCAxICk7XG5cblx0XHRcdFx0dXZzLnB1c2goIGl4IC8gZ3JpZFggKTtcblx0XHRcdFx0dXZzLnB1c2goIDEgLSAoIGl5IC8gZ3JpZFkgKSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaXkgPSAwOyBpeSA8IGdyaWRZOyBpeSArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGl4ID0gMDsgaXggPCBncmlkWDsgaXggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYSA9IGl4ICsgZ3JpZFgxICogaXk7XG5cdFx0XHRcdGNvbnN0IGIgPSBpeCArIGdyaWRYMSAqICggaXkgKyAxICk7XG5cdFx0XHRcdGNvbnN0IGMgPSAoIGl4ICsgMSApICsgZ3JpZFgxICogKCBpeSArIDEgKTtcblx0XHRcdFx0Y29uc3QgZCA9ICggaXggKyAxICkgKyBncmlkWDEgKiBpeTtcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgUGxhbmVHZW9tZXRyeSggZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQsIGRhdGEud2lkdGhTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cyApO1xuXG5cdH1cblxufVxuXG52YXIgYWxwaGFtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGFtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BTFBIQU1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGF0ZXN0X2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FMUEhBVEVTVFxcblxcdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFURVNUXFxuXFx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XFxuI2VuZGlmXCI7XG5cbnZhciBhb21hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BT01BUFxcblxcdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEIClcXG5cXHRcXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGFvbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQU9NQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xcbiNlbmRpZlwiO1xuXG52YXIgYmVnaW5fdmVydGV4ID0gXCJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTtcIjtcblxudmFyIGJlZ2lubm9ybWFsX3ZlcnRleCA9IFwidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcXG4jaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xcbiNlbmRpZlwiO1xuXG52YXIgYnNkZnMgPSBcInZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcXG5cXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcXG59XFxudmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgZG90VkggKSB7XFxuXFx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApO1xcblxcdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XFxufVxcbmZsb2F0IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcXG5cXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XFxuXFx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xcblxcdGZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcXG5cXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XFxufVxcbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XFxuXFx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xcblxcdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcXG5cXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcXG59XFxudmVjMyBCUkRGX0dHWCggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcXG5cXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xcblxcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xcblxcdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcXG5cXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xcblxcdHZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTtcXG5cXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XFxuXFx0ZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcXG5cXHRyZXR1cm4gRiAqICggViAqIEQgKTtcXG59XFxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wO1xcblxcdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xcblxcdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcXG5cXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XFxuXFx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xcblxcdHJldHVybiB1djtcXG59XFxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XFxuXFx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xcblxcdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcXG59XFxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XFxuXFx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XFxuXFx0ZmxvYXQgeSA9IGFicyggeCApO1xcblxcdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XFxuXFx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcXG5cXHRmbG9hdCB2ID0gYSAvIGI7XFxuXFx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xcblxcdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcXG59XFxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XFxuXFx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcXG5cXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xcblxcdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XFxuXFx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIFQxLCBUMjtcXG5cXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xcblxcdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcXG5cXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xcblxcdHZlYzMgY29vcmRzWyA0IF07XFxuXFx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xcblxcdGNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XFxuXFx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcXG5cXHRjb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcXG5cXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcXG5cXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcXG5cXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XFxuXFx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xcblxcdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XFxuXFx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XFxuXFx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xcbn1cXG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xcblxcdHJldHVybiAwLjI1O1xcbn1cXG5mbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XFxuXFx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XFxufVxcbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcXG5cXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xcblxcdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcXG5cXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xcblxcdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApO1xcblxcdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XFxuXFx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xcblxcdHJldHVybiBGICogKCBHICogRCApO1xcbn1cXG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcXG5mbG9hdCBEX0NoYXJsaWUoIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgZG90TkggKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcXG5cXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xcblxcdGZsb2F0IGNvczJoID0gZG90TkggKiBkb3ROSDtcXG5cXHRmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xcblxcdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xcbn1cXG5mbG9hdCBWX05ldWJlbHQoIGZsb2F0IGRvdE5WLCBmbG9hdCBkb3ROTCApIHtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcXG59XFxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xcblxcdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XFxuXFx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xcblxcdGZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xcblxcdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xcblxcdHJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApO1xcbn1cXG4jZW5kaWZcIjtcblxudmFyIGJ1bXBtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9CVU1QTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTtcXG5cXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcXG5cXHRcXHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XFxuXFx0XFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xcblxcdFxcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcXG5cXHRcXHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcXG5cXHRcXHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcXG5cXHRcXHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcXG5cXHR9XFxuXFx0dmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcXG5cXHRcXHR2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7XFxuXFx0XFx0dmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApO1xcblxcdFxcdHZlYzMgdk4gPSBzdXJmX25vcm07XFxuXFx0XFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xcblxcdFxcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcXG5cXHRcXHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtcXG5cXHRcXHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2ZWM0IHBsYW5lO1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XFxuXFx0XFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xcblxcdFxcdGlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTXFxuXFx0XFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0XFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xcblxcdFxcdFxcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcXG5cXHRcXHRcXHRjbGlwcGVkID0gKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYmIGNsaXBwZWQ7XFxuXFx0XFx0fVxcblxcdFxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0XFx0aWYgKCBjbGlwcGVkICkgZGlzY2FyZDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcXG5cXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCA9IFwiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXFxuXFx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XFxuI2VuZGlmXCI7XG5cbnZhciBjbGlwcGluZ19wbGFuZXNfdmVydGV4ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHRkaWZmdXNlQ29sb3IgKj0gdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXFxuXFx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7XFxuI2VuZGlmXCI7XG5cbnZhciBjb2xvcl9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXFxuXFx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX3BhcnNfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcXG5cXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xcbiNlbmRpZlwiO1xuXG52YXIgY29sb3JfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2Q29sb3IgPSB2ZWM0KCAxLjAgKTtcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXFxuXFx0dkNvbG9yID0gdmVjMyggMS4wICk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DT0xPUlxcblxcdHZDb2xvciAqPSBjb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1JcXG5cXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xcbiNlbmRpZlwiO1xuXG52YXIgY29tbW9uID0gXCIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXFxuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcXG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwN1xcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxcbiNkZWZpbmUgRVBTSUxPTiAxZS02XFxuI2lmbmRlZiBzYXR1cmF0ZVxcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxcbiNlbmRpZlxcbiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApIClcXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XFxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XFxuZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfVxcbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxcbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XFxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcXG5cXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuXFx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XFxuXFx0cmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7XFxufVxcbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxcblxcdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XFxuI2Vsc2VcXG5cXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XFxuXFx0XFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcXG5cXHRcXHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XFxuXFx0fVxcbiNlbmRpZlxcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcXG5cXHR2ZWMzIGNvbG9yO1xcblxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdGJvb2wgdmlzaWJsZTtcXG59O1xcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XFxuXFx0dmVjMyBkaXJlY3REaWZmdXNlO1xcblxcdHZlYzMgZGlyZWN0U3BlY3VsYXI7XFxuXFx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XFxuXFx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xcbn07XFxuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xcblxcdHZlYzMgcG9zaXRpb247XFxuXFx0dmVjMyBub3JtYWw7XFxuXFx0dmVjMyB2aWV3RGlyO1xcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XFxuI2VuZGlmXFxufTtcXG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xcblxcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xcbn1cXG52ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcXG5cXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcXG59XFxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XFxuXFx0bWF0MyB0bXA7XFxuXFx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XFxuXFx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XFxuXFx0dG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7XFxuXFx0cmV0dXJuIHRtcDtcXG59XFxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcXG5cXHR2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7XFxuXFx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XFxufVxcbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xcblxcdHJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDtcXG59XFxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcXG5cXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcXG5cXHRmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XFxuXFx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcXG59XCI7XG5cbnZhciBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQgPSBcIiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXFxuXFx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXFxuXFx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXFxuXFx0I2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjBcXG5cXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXFxuXFx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XFxuXFx0XFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IGZhY2UgPSAtIDEuMDtcXG5cXHRcXHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XFxuXFx0XFx0XFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XFxuXFx0XFx0XFx0ZWxzZVxcblxcdFxcdFxcdFxcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXFxuXFx0XFx0XFx0XFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xcblxcdFxcdFxcdGVsc2VcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBmYWNlO1xcblxcdH1cXG5cXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcXG5cXHRcXHR2ZWMyIHV2O1xcblxcdFxcdGlmICggZmFjZSA9PSAwLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XFxuXFx0XFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xcblxcdFxcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XFxuXFx0fVxcblxcdHZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7XFxuXFx0XFx0ZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTtcXG5cXHRcXHRtaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7XFxuXFx0XFx0ZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTtcXG5cXHRcXHRmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApO1xcblxcdFxcdHZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7XFxuXFx0XFx0aWYgKCBmYWNlID4gMi4wICkge1xcblxcdFxcdFxcdHV2LnkgKz0gZmFjZVNpemU7XFxuXFx0XFx0XFx0ZmFjZSAtPSAzLjA7XFxuXFx0XFx0fVxcblxcdFxcdHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xcblxcdFxcdGlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkge1xcblxcdFxcdFxcdHV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplO1xcblxcdFxcdH1cXG5cXHRcXHR1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcXG5cXHRcXHR1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApO1xcblxcdFxcdHV2ICo9IHRleGVsU2l6ZTtcXG5cXHRcXHRyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiO1xcblxcdH1cXG5cXHQjZGVmaW5lIHIwIDEuMFxcblxcdCNkZWZpbmUgdjAgMC4zMzlcXG5cXHQjZGVmaW5lIG0wIC0gMi4wXFxuXFx0I2RlZmluZSByMSAwLjhcXG5cXHQjZGVmaW5lIHYxIDAuMjc2XFxuXFx0I2RlZmluZSBtMSAtIDEuMFxcblxcdCNkZWZpbmUgcjQgMC40XFxuXFx0I2RlZmluZSB2NCAwLjA0NlxcblxcdCNkZWZpbmUgbTQgMi4wXFxuXFx0I2RlZmluZSByNSAwLjMwNVxcblxcdCNkZWZpbmUgdjUgMC4wMTZcXG5cXHQjZGVmaW5lIG01IDMuMFxcblxcdCNkZWZpbmUgcjYgMC4yMVxcblxcdCNkZWZpbmUgdjYgMC4wMDM4XFxuXFx0I2RlZmluZSBtNiA0LjBcXG5cXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xcblxcdFxcdGZsb2F0IG1pcCA9IDAuMDtcXG5cXHRcXHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XFxuXFx0XFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xcblxcdFxcdFxcdG1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTtcXG5cXHRcXHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7XFxuXFx0XFx0XFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xcblxcdFxcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG1pcDtcXG5cXHR9XFxuXFx0dmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkge1xcblxcdFxcdGZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTtcXG5cXHRcXHRmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApO1xcblxcdFxcdGZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTtcXG5cXHRcXHR2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7XFxuXFx0XFx0aWYgKCBtaXBGID09IDAuMCApIHtcXG5cXHRcXHRcXHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcXG5cXHRcXHRcXHRyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTtcXG5cXHRcXHR9XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgZGVmYXVsdG5vcm1hbF92ZXJ0ZXggPSBcInZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XFxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXFxuXFx0bWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcXG5cXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XFxuXFx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XFxuI2VuZGlmXFxudHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcXG4jaWZkZWYgRkxJUF9TSURFRFxcblxcdHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XFxuXFx0I2lmZGVmIEZMSVBfU0lERURcXG5cXHRcXHR0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XFxuXFx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcXG5cXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XFxuI2VuZGlmXCI7XG5cbnZhciBkaXNwbGFjZW1lbnRtYXBfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxcblxcdHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XFxuI2VuZGlmXCI7XG5cbnZhciBlbWlzc2l2ZW1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxcblxcdHZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xcblxcdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcXG4jZW5kaWZcIjtcblxudmFyIGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcIjtcblxudmFyIGVuY29kaW5nc19mcmFnbWVudCA9IFwiZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7XCI7XG5cbnZhciBlbmNvZGluZ3NfcGFyc19mcmFnbWVudCA9IFwidmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcXG5cXHRyZXR1cm4gdmFsdWU7XFxufVxcbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xcblxcdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcXG59XCI7XG5cbnZhciBlbnZtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdHZlYzMgY2FtZXJhVG9GcmFnO1xcblxcdFxcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xcblxcdFxcdH1cXG5cXHRcXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cXG5cXHRcXHRcXHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZWxzZVxcblxcdFxcdHZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0O1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXFxuXFx0XFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xcblxcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApO1xcblxcdCNlbHNlXFxuXFx0XFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XFxuXFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXFxuXFx0XFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XFxuXFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXFxuXFx0XFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdHVuaWZvcm0gZmxvYXQgZW52TWFwSW50ZW5zaXR5O1xcblxcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcXG5cXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxcblxcdFxcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xcblxcdCNlbmRpZlxcblxcdFxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcXG5cXHRcXHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZfV09STERQT1NcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XFxuXFx0I2Vsc2VcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxcblxcdFxcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdFxcblxcdFxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG5cXHQjZWxzZVxcblxcdFxcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxuXFx0I2Vsc2VcXG5cXHRcXHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xcblxcdFxcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcXG5cXHRcXHR9XFxuXFx0XFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cXG5cXHRcXHRcXHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0dlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZm9nX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHR2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcXG4jZW5kaWZcIjtcblxudmFyIGZvZ19wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcXG4jZW5kaWZcIjtcblxudmFyIGZvZ19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHQjaWZkZWYgRk9HX0VYUDJcXG5cXHRcXHRmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTtcXG5cXHQjZWxzZVxcblxcdFxcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XFxuXFx0I2VuZGlmXFxuXFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xcbiNlbmRpZlwiO1xuXG52YXIgZm9nX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRk9HXFxuXFx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xcblxcdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xcblxcdCNpZmRlZiBGT0dfRVhQMlxcblxcdFxcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcXG5cXHQjZWxzZVxcblxcdFxcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGZvZ0ZhcjtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcXG4jZW5kaWZcXG52ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XFxuXFx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG5cXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xcblxcdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcXG5cXHRcXHRyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xcblxcdCNlbmRpZlxcbn1cIjtcblxudmFyIGxpZ2h0bWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcXG5cXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcXG5cXHRcXHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTElHSFRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX2xhbWJlcnRfdmVydGV4ID0gXCJ2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTtcXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XFxuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcXG52TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApO1xcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7XFxuI2VuZGlmXFxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcXG5mbG9hdCBkb3ROTDtcXG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG52SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xcbnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0dkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xcblxcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcXG4jZW5kaWZcXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRcXHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0Z2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdFxcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xcblxcdFxcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfcGFyc19iZWdpbiA9IFwidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XFxudW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XFxudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcXG5cXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xcblxcdHZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59XFxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTtcXG5cXHRyZXR1cm4gaXJyYWRpYW5jZTtcXG59XFxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yO1xcblxcdHJldHVybiBpcnJhZGlhbmNlO1xcbn1cXG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcXG5cXHQjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKVxcblxcdFxcdGZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTtcXG5cXHRcXHRpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkge1xcblxcdFxcdFxcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xcblxcdCNlbHNlXFxuXFx0XFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xcblxcdFxcdFxcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiAxLjA7XFxuXFx0I2VuZGlmXFxufVxcbmZsb2F0IGdldFNwb3RBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgY29uZUNvc2luZSwgY29uc3QgaW4gZmxvYXQgcGVudW1icmFDb3NpbmUsIGNvbnN0IGluIGZsb2F0IGFuZ2xlQ29zaW5lICkge1xcblxcdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcXG59XFxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxcblxcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcXG5cXHRcXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdH07XFxuXFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xcblxcdHZvaWQgZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XFxuXFx0XFx0bGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xcblxcdFxcdGxpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xcblxcdFxcdGxpZ2h0LnZpc2libGUgPSB0cnVlO1xcblxcdH1cXG4jZW5kaWZcXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdFxcdGZsb2F0IGRpc3RhbmNlO1xcblxcdFxcdGZsb2F0IGRlY2F5O1xcblxcdH07XFxuXFx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XFxuXFx0dm9pZCBnZXRQb2ludExpZ2h0SW5mbyggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcXG5cXHRcXHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XFxuXFx0XFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XFxuXFx0XFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xcblxcdFxcdGxpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcXG5cXHRcXHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XFxuXFx0XFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcXG5cXHR9XFxuI2VuZGlmXFxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgU3BvdExpZ2h0IHtcXG5cXHRcXHR2ZWMzIHBvc2l0aW9uO1xcblxcdFxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0XFx0ZmxvYXQgZGlzdGFuY2U7XFxuXFx0XFx0ZmxvYXQgZGVjYXk7XFxuXFx0XFx0ZmxvYXQgY29uZUNvcztcXG5cXHRcXHRmbG9hdCBwZW51bWJyYUNvcztcXG5cXHR9O1xcblxcdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xcblxcdHZvaWQgZ2V0U3BvdExpZ2h0SW5mbyggY29uc3QgaW4gU3BvdExpZ2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XFxuXFx0XFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XFxuXFx0XFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XFxuXFx0XFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGxpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IHNwb3RBdHRlbnVhdGlvbiA9IGdldFNwb3RBdHRlbnVhdGlvbiggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcXG5cXHRcXHRpZiAoIHNwb3RBdHRlbnVhdGlvbiA+IDAuMCApIHtcXG5cXHRcXHRcXHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcXG5cXHRcXHRcXHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcXG5cXHRcXHRcXHRsaWdodC52aXNpYmxlID0gZmFsc2U7XFxuXFx0XFx0fVxcblxcdH1cXG4jZW5kaWZcXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGhhbGZXaWR0aDtcXG5cXHRcXHR2ZWMzIGhhbGZIZWlnaHQ7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcXG5cXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XFxuI2VuZGlmXFxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcXG5cXHRcXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIHNreUNvbG9yO1xcblxcdFxcdHZlYzMgZ3JvdW5kQ29sb3I7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcXG5cXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdFxcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xcblxcdFxcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XFxuXFx0XFx0cmV0dXJuIGlycmFkaWFuY2U7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcXG5cXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxcblxcdFxcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XFxuXFx0XFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdFxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHRcXHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7XFxuXFx0XFx0XFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0cmV0dXJuIHZlYzMoIDAuMCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHR2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0XFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdFxcdHZlYzMgcmVmbGVjdFZlYztcXG5cXHRcXHRcXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxcblxcdFxcdFxcdFxcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xcblxcdFxcdFxcdFxcdHJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7XFxuXFx0XFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRcXHRyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xcblxcdFxcdFxcdCNlbmRpZlxcblxcdFxcdFxcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0XFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7XFxuXFx0XFx0XFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB2ZWMzKCAwLjAgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfdG9vbl9mcmFnbWVudCA9IFwiVG9vbk1hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XCI7XG5cbnZhciBsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50ID0gXCJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcXG5cXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcXG59O1xcbnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxuI2RlZmluZSBSRV9EaXJlY3RcXHRcXHRcXHRcXHRSRV9EaXJlY3RfVG9vblxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXFx0XFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcXHQoMClcIjtcblxudmFyIGxpZ2h0c19waG9uZ19mcmFnbWVudCA9IFwiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoO1wiO1xuXG52YXIgbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQgPSBcInZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xcblxcdHZlYzMgZGlmZnVzZUNvbG9yO1xcblxcdHZlYzMgc3BlY3VsYXJDb2xvcjtcXG5cXHRmbG9hdCBzcGVjdWxhclNoaW5pbmVzcztcXG5cXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xcbn07XFxudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xcbn1cXG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG4jZGVmaW5lIFJFX0RpcmVjdFxcdFxcdFxcdFxcdFJFX0RpcmVjdF9CbGlublBob25nXFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcXHRcXHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVxcdCgwKVwiO1xuXG52YXIgbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50ID0gXCJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcXG5mbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTtcXG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xcbm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTtcXG4jaWZkZWYgSU9SXFxuXFx0I2lmZGVmIFNQRUNVTEFSXFxuXFx0XFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTtcXG5cXHRcXHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yO1xcblxcdFxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcXG5cXHRcXHRcXHRzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxcblxcdFxcdFxcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xcblxcdCNlbHNlXFxuXFx0XFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7XFxuXFx0XFx0dmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7XFxuXFx0XFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XFxuXFx0I2VuZGlmXFxuXFx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcXG4jZWxzZVxcblxcdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XFxuXFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxcblxcdFxcdG1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcXG5cXHRcXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XFxuXFx0I2VuZGlmXFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1xcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTtcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfU0hFRU5cXG5cXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjtcXG5cXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcXG5cXHRcXHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xcblxcdCNlbmRpZlxcblxcdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcXG5cXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXFxuXFx0XFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50ID0gXCJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XFxuXFx0dmVjMyBkaWZmdXNlQ29sb3I7XFxuXFx0ZmxvYXQgcm91Z2huZXNzO1xcblxcdHZlYzMgc3BlY3VsYXJDb2xvcjtcXG5cXHRmbG9hdCBzcGVjdWxhckY5MDtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGZsb2F0IGNsZWFyY29hdDtcXG5cXHRcXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XFxuXFx0XFx0dmVjMyBjbGVhcmNvYXRGMDtcXG5cXHRcXHRmbG9hdCBjbGVhcmNvYXRGOTA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TSEVFTlxcblxcdFxcdHZlYzMgc2hlZW5Db2xvcjtcXG5cXHRcXHRmbG9hdCBzaGVlblJvdWdobmVzcztcXG5cXHQjZW5kaWZcXG59O1xcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcXG52ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcXG5mbG9hdCBJQkxTaGVlbkJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcykge1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG5cXHRmbG9hdCBhID0gcm91Z2huZXNzIDwgMC4yNSA/IC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45IDogLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1O1xcblxcdGZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjtcXG5cXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIERHICogUkVDSVBST0NBTF9QSSApO1xcbn1cXG52ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRjb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcXG5cXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcXG5cXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xcblxcdGZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xcblxcdHZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcXG5cXHRyZXR1cm4gZmFiO1xcbn1cXG52ZWMzIEVudmlyb25tZW50QlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xcblxcdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xcbn1cXG52b2lkIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHtcXG5cXHR2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcXG5cXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XFxuXFx0ZmxvYXQgRXNzID0gZmFiLnggKyBmYWIueTtcXG5cXHRmbG9hdCBFbXMgPSAxLjAgLSBFc3M7XFxuXFx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XFx0dmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XFxuXFx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XFxuXFx0bXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcXG59XFxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxcblxcdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdFxcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xcblxcdFxcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xcblxcdFxcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xcblxcdFxcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XFxuXFx0XFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xcblxcdFxcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XFxuXFx0XFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xcblxcdFxcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xcblxcdFxcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcXHRcXHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XFxuXFx0XFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xcblxcdFxcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcXG5cXHRcXHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xcblxcdFxcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xcblxcdFxcdHZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xcblxcdFxcdG1hdDMgbUludiA9IG1hdDMoXFxuXFx0XFx0XFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxcblxcdFxcdFxcdHZlYzMoICAgIDAsIDEsICAgIDAgKSxcXG5cXHRcXHRcXHR2ZWMzKCB0MS56LCAwLCB0MS53IClcXG5cXHRcXHQpO1xcblxcdFxcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xcblxcdH1cXG4jZW5kaWZcXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XFxuXFx0XFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcXG5cXHRjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xcblxcdHZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcXG59XFxuI2RlZmluZSBSRV9EaXJlY3RcXHRcXHRcXHRcXHRSRV9EaXJlY3RfUGh5c2ljYWxcXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVxcdFxcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXFx0XFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXFx0XFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xcbn1cIjtcblxudmFyIGxpZ2h0c19mcmFnbWVudF9iZWdpbiA9IFwiXFxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcXG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcXG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XFxuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xcbiNlbmRpZlxcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XFxuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcXG5cXHQjZW5kaWZcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcXG5cXHRcXHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXFxuXFx0XFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdFNwb3RMaWdodCBzcG90TGlnaHQ7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XFxuXFx0I2VuZGlmXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XFxuXFx0XFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxcblxcdFxcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XFxuXFx0I2VuZGlmXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xcblxcdFxcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xcblxcdFxcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXFxuXFx0XFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxcblxcdFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XFxuXFx0XFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXFxuXFx0dmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcXG5cXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0XFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xcblxcdFxcdFxcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHRcXHR9XFxuXFx0XFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXFxuXFx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19mcmFnbWVudF9tYXBzID0gXCIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcXG5cXHQjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0XFx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdFxcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcXG5cXHRcXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcXG5cXHRcXHRcXHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XFxuXFx0I2VuZGlmXFxuXFx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApICYmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdGlibElycmFkaWFuY2UgKz0gZ2V0SUJMSXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcXG5cXHRyYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX2ZyYWdtZW50X2VuZCA9IFwiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXFxuXFx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxcblxcdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcXG5cXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XFxuI2VuZGlmXCI7XG5cbnZhciBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXFxuXFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xcblxcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcXG5cXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcXG5cXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxcblxcdFxcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcXG5cXHRcXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXFxuXFx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcXG5cXHRcXHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcXG5cXHRcXHR2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTtcXG5cXHQjZWxzZVxcblxcdFxcdGlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkge1xcblxcdFxcdFxcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcXG5cXHRcXHRcXHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XFxuXFx0XFx0fVxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX01BUFxcblxcdHZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcXG5cXHQjaWZkZWYgREVDT0RFX1ZJREVPX1RFWFRVUkVcXG5cXHRcXHRzYW1wbGVkRGlmZnVzZUNvbG9yID0gdmVjNCggbWl4KCBwb3coIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcXG5cXHQjZW5kaWZcXG5cXHRkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9wYXJ0aWNsZV9mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxcblxcdHZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUFQXFxuXFx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XFxuI2VuZGlmXCI7XG5cbnZhciBtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxcblxcdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0FMUEhBTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBtZXRhbG5lc3NtYXBfZnJhZ21lbnQgPSBcImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcXG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxcblxcdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XFxuXFx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XFxuI2VuZGlmXCI7XG5cbnZhciBtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaG5vcm1hbF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcXG5cXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcXG5cXHRcXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7XFxuXFx0XFx0XFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XFxuXFx0XFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xcblxcdFxcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaHRhcmdldF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcXG5cXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcXG5cXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xcblxcdFxcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcXG5cXHRcXHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xcblxcdFxcdFxcdGZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTtcXG5cXHRcXHRcXHRmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7XFxuXFx0XFx0XFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcXG5cXHRcXHRcXHR2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7XFxuXFx0XFx0XFx0cmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7XFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0XFx0XFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaHRhcmdldF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXFxuXFx0dHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xcblxcdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxcblxcdFxcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcXG5cXHRcXHRcXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcXG5cXHRcXHRcXHRcXHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XFxuXFx0XFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRcXHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XFxuXFx0XFx0XFx0I2VuZGlmXFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XFxuXFx0XFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfZnJhZ21lbnRfYmVnaW4gPSBcImZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wO1xcbiNpZmRlZiBGTEFUX1NIQURFRFxcblxcdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xcblxcdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xcblxcdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xcbiNlbHNlXFxuXFx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcXG5cXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0bm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XFxuXFx0XFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xcblxcdFxcdFxcdGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0I2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApXFxuXFx0XFx0XFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO1wiO1xuXG52YXIgbm9ybWFsX2ZyYWdtZW50X21hcHMgPSBcIiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcXG5cXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xcblxcdCNpZmRlZiBGTElQX1NJREVEXFxuXFx0XFx0bm9ybWFsID0gLSBub3JtYWw7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0I2VuZGlmXFxuXFx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcXG4jZWxpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xcblxcdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0bm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xcblxcdCNlbHNlXFxuXFx0XFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XFxuXFx0I2VuZGlmXFxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxcblxcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsX3BhcnNfZnJhZ21lbnQgPSBcIiNpZm5kZWYgRkxBVF9TSEFERURcXG5cXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfcGFyc192ZXJ0ZXggPSBcIiNpZm5kZWYgRkxBVF9TSEFERURcXG5cXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfdmVydGV4ID0gXCIjaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XFxuXFx0XFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX05PUk1BTE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG5cXHR1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7XFxuI2VuZGlmXFxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxcblxcdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XFxuI2VuZGlmXFxuI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApIClcXG5cXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XFxuXFx0XFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcXG5cXHRcXHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xcblxcdFxcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XFxuXFx0XFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcXG5cXHRcXHR2ZWMzIE4gPSBzdXJmX25vcm07XFxuXFx0XFx0dmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTtcXG5cXHRcXHR2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApO1xcblxcdFxcdHZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XFxuXFx0XFx0dmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcXG5cXHRcXHRmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApO1xcblxcdFxcdGZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApO1xcblxcdFxcdHJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4gPSBcIiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcXG4jZW5kaWZcIjtcblxudmFyIGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcyA9IFwiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXFxuXFx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcXG5cXHRjbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcXG5cXHQjZWxzZVxcblxcdFxcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XFxuXFx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xcbiNlbmRpZlwiO1xuXG52YXIgb3V0cHV0X2ZyYWdtZW50ID0gXCIjaWZkZWYgT1BBUVVFXFxuZGlmZnVzZUNvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5kaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTtcXG4jZW5kaWZcXG5nbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1wiO1xuXG52YXIgcGFja2luZyA9IFwidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xcbn1cXG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcXG5cXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcXG59XFxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcXG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApO1xcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xcbnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xcblxcdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xcblxcdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XFx0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcXG59XFxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcXG5cXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7XFxufVxcbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XFxuXFx0dmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSApO1xcblxcdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7XFxufVxcbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcXG5cXHRyZXR1cm4gdmVjMiggdi54ICsgKCB2LnkgLyAyNTUuMCApLCB2LnogKyAoIHYudyAvIDI1NS4wICkgKTtcXG59XFxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XFxufVxcbmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XFxufVxcbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiAoICggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xcbn1cXG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcXG59XCI7XG5cbnZhciBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50ID0gXCIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxcblxcdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXCI7XG5cbnZhciBwcm9qZWN0X3ZlcnRleCA9IFwidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xcblxcdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XFxuI2VuZGlmXFxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XFxuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcIjtcblxudmFyIGRpdGhlcmluZ19mcmFnbWVudCA9IFwiI2lmZGVmIERJVEhFUklOR1xcblxcdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcXG4jZW5kaWZcIjtcblxudmFyIGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgRElUSEVSSU5HXFxuXFx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0XFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xcblxcdFxcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XFxuXFx0XFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcXG5cXHRcXHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHJvdWdobmVzc21hcF9mcmFnbWVudCA9IFwiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXFxuXFx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcXG5cXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcXG4jZW5kaWZcIjtcblxudmFyIHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xcblxcdFxcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xcblxcdH1cXG5cXHR2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHtcXG5cXHRcXHRyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7XFxuXFx0fVxcblxcdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xcblxcdFxcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcXG5cXHRcXHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xcblxcdFxcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XFxuXFx0XFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcXG5cXHRcXHRcXHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XFxuXFx0XFx0XFx0ZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTtcXG5cXHRcXHRcXHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1xcdFxcdFxcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1xcdFxcdFxcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gb2NjbHVzaW9uO1xcblxcdH1cXG5cXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xcblxcdFxcdGZsb2F0IHNoYWRvdyA9IDEuMDtcXG5cXHRcXHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcXG5cXHRcXHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XFxuXFx0XFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xcblxcdFxcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcXG5cXHRcXHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XFxuXFx0XFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcXG5cXHRcXHRpZiAoIGZydXN0dW1UZXN0ICkge1xcblxcdFxcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxcblxcdFxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xcblxcdFxcdFxcdGZsb2F0IGR5MiA9IGR5MCAvIDIuMDtcXG5cXHRcXHRcXHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XFxuXFx0XFx0XFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xcblxcdFxcdFxcdHNoYWRvdyA9IChcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyAxNy4wICk7XFxuXFx0XFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxcblxcdFxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XFxuXFx0XFx0XFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcXG5cXHRcXHRcXHR2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7XFxuXFx0XFx0XFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xcblxcdFxcdFxcdHV2IC09IGYgKiB0ZXhlbFNpemU7XFxuXFx0XFx0XFx0c2hhZG93ID0gKFxcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnggKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi54ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi55ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueSApICtcXG5cXHRcXHRcXHRcXHRtaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0XFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0XFx0ICBmLnggKSxcXG5cXHRcXHRcXHRcXHRcXHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdFxcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0XFx0ICBmLnggKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi55IClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyA5LjAgKTtcXG5cXHRcXHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxcblxcdFxcdFxcdHNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gc2hhZG93O1xcblxcdH1cXG5cXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XFxuXFx0XFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XFxuXFx0XFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XFxuXFx0XFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcXG5cXHRcXHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XFxuXFx0XFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xcblxcdFxcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XFxuXFx0XFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xcblxcdFxcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcXG5cXHRcXHRcXHRpZiAoIHYueiA+IDAuMCApXFxuXFx0XFx0XFx0XFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XFxuXFx0XFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcXG5cXHRcXHRcXHRmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApO1xcblxcdFxcdFxcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcXG5cXHRcXHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xcblxcdFxcdFxcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XFxuXFx0XFx0XFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtcXG5cXHRcXHRcXHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XFxuXFx0fVxcblxcdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xcblxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XFxuXFx0XFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XFxuXFx0XFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcXHRcXHRkcCArPSBzaGFkb3dCaWFzO1xcblxcdFxcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcXG5cXHRcXHRcXHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XFxuXFx0XFx0XFx0cmV0dXJuIChcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyA5LjAgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hcF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBzaGFkb3dtYXBfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdFxcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xcblxcdFxcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcXG5cXHRcXHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xcblxcdFxcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hc2tfcGFyc19mcmFnbWVudCA9IFwiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcXG5cXHRmbG9hdCBzaGFkb3cgPSAxLjA7XFxuXFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNlbmRpZlxcblxcdHJldHVybiBzaGFkb3c7XFxufVwiO1xuXG52YXIgc2tpbmJhc2VfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NLSU5OSU5HXFxuXFx0bWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XFxuXFx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XFxuXFx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XFxuXFx0bWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7XFxuI2VuZGlmXCI7XG5cbnZhciBza2lubmluZ19wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xcblxcdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcXG5cXHQjaWZkZWYgQk9ORV9URVhUVVJFXFxuXFx0XFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XFxuXFx0XFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xcblxcdFxcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcXG5cXHRcXHRcXHRmbG9hdCBqID0gaSAqIDQuMDtcXG5cXHRcXHRcXHRmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcXG5cXHRcXHRcXHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcXG5cXHRcXHRcXHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcXG5cXHRcXHRcXHRmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcXG5cXHRcXHRcXHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcXG5cXHRcXHRcXHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0dmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xcblxcdFxcdFxcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcXG5cXHRcXHRcXHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0bWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcXG5cXHRcXHRcXHRyZXR1cm4gYm9uZTtcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHR1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcXG5cXHRcXHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XFxuXFx0XFx0XFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcXG5cXHRcXHRcXHRyZXR1cm4gYm9uZTtcXG5cXHRcXHR9XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBza2lubmluZ192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0tJTk5JTkdcXG5cXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcblxcdHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xcblxcdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XFxuI2VuZGlmXCI7XG5cbnZhciBza2lubm9ybWFsX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7XFxuXFx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcXG5cXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XFxuXFx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XFxuXFx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0b2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNwZWN1bGFybWFwX2ZyYWdtZW50ID0gXCJmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcXG5cXHR2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcXG5cXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xcbiNlbHNlXFxuXFx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcXG4jZW5kaWZcIjtcblxudmFyIHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcXG4jZW5kaWZcIjtcblxudmFyIHRvbmVtYXBwaW5nX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcXG5cXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcXG4jZW5kaWZcIjtcblxudmFyIHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQgPSBcIiNpZm5kZWYgc2F0dXJhdGVcXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XFxudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xcbn1cXG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcXG59XFxudmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xcblxcdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xcblxcdHJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7XFxufVxcbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XFxuXFx0dmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7XFxuXFx0dmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTtcXG5cXHRyZXR1cm4gYSAvIGI7XFxufVxcbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdGNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0MyhcXG5cXHRcXHR2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksXFx0XFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxcblxcdFxcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxcblxcdCk7XFxuXFx0Y29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0MyhcXG5cXHRcXHR2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksXFx0XFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxcblxcdFxcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxcblxcdCk7XFxuXFx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjtcXG5cXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xcblxcdGNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApO1xcblxcdGNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yO1xcblxcdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcXG59XFxudmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9XCI7XG5cbnZhciB0cmFuc21pc3Npb25fZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0ZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7XFxuXFx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xcblxcdGZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzcztcXG5cXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxcblxcdFxcdHRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxcblxcdFxcdHRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZztcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xcblxcdHZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTtcXG5cXHR2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXFxuXFx0XFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxcblxcdFxcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxcblxcdFxcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcXG5cXHR0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XFxuXFx0dHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XFxuI2VuZGlmXCI7XG5cbnZhciB0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5cXHR1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjtcXG5cXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcXG5cXHR1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7XFxuXFx0dW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7XFxuXFx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XFxuXFx0I2VuZGlmXFxuXFx0dW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplO1xcblxcdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XFxuXFx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xcblxcdHVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xcblxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG5cXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xcblxcdFxcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xcblxcdFxcdHZlYzMgbW9kZWxTY2FsZTtcXG5cXHRcXHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcXG5cXHRcXHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcXG5cXHRcXHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcXG5cXHRcXHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xcblxcdH1cXG5cXHRmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcXG5cXHRcXHRyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcXG5cXHR9XFxuXFx0dmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcXG5cXHRcXHRmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7XFxuXFx0XFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0dmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xcblxcdFxcdGlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHJhZGlhbmNlO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0dmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcXG5cXHRcXHRcXHR2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7XFx0XFx0XFx0cmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTtcXG5cXHRcXHR9XFxuXFx0fVxcblxcdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXFxuXFx0XFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcXG5cXHRcXHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXFxuXFx0XFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xcblxcdFxcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcXG5cXHRcXHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcXG5cXHRcXHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XFxuXFx0XFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XFxuXFx0XFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XFxuXFx0XFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XFxuXFx0XFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xcblxcdFxcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcXG5cXHRcXHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcXG5cXHRcXHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHV2X3BhcnNfZnJhZ21lbnQgPSBcIiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxcblxcdHZhcnlpbmcgdmVjMiB2VXY7XFxuI2VuZGlmXCI7XG5cbnZhciB1dl9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9VVlxcblxcdCNpZmRlZiBVVlNfVkVSVEVYX09OTFlcXG5cXHRcXHR2ZWMyIHZVdjtcXG5cXHQjZWxzZVxcblxcdFxcdHZhcnlpbmcgdmVjMiB2VXY7XFxuXFx0I2VuZGlmXFxuXFx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xcbiNlbmRpZlwiO1xuXG52YXIgdXZfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1VWXFxuXFx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcXG4jZW5kaWZcIjtcblxudmFyIHV2Ml9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzIgdlV2MjtcXG4jZW5kaWZcIjtcblxudmFyIHV2Ml9wYXJzX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXFxuXFx0YXR0cmlidXRlIHZlYzIgdXYyO1xcblxcdHZhcnlpbmcgdmVjMiB2VXYyO1xcblxcdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XFxuI2VuZGlmXCI7XG5cbnZhciB1djJfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcXG5cXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xcbiNlbmRpZlwiO1xuXG52YXIgd29ybGRwb3NfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApXFxuXFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcblxcdCNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xcblxcdFxcdHdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247XFxuXFx0I2VuZGlmXFxuXFx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcIjtcblxuY29uc3QgdmVydGV4JGcgPSBcInZhcnlpbmcgdmVjMiB2VXY7XFxudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xcblxcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRnID0gXCJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XFxudmFyeWluZyB2ZWMyIHZVdjtcXG52b2lkIG1haW4oKSB7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGYgPSBcInZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG52b2lkIG1haW4oKSB7XFxuXFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHRnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udztcXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JGYgPSBcIiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdGdsX0ZyYWdDb2xvciA9IGVudkNvbG9yO1xcblxcdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkZSA9IFwiI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHRcXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dztcXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JGUgPSBcIiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xcblxcdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHRcXHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0ZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41O1xcblxcdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHRcXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcXG5cXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcXG5cXHRcXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcXG5cXHQjZW5kaWZcXG59XCI7XG5cbmNvbnN0IHZlcnRleCRkID0gXCIjZGVmaW5lIERJU1RBTkNFXFxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHRcXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRkID0gXCIjZGVmaW5lIERJU1RBTkNFXFxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XFxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluICgpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XFxuXFx0ZGlzdCA9ICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xcblxcdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xcbn1cIjtcblxuY29uc3QgdmVydGV4JGMgPSBcInZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG52b2lkIG1haW4oKSB7XFxuXFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JGMgPSBcInVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcXG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxudm9pZCBtYWluKCkge1xcblxcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcXG5cXHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkYiA9IFwidW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0dkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlO1xcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkYiA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XFxudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XFxudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcXG5cXHRcXHRkaXNjYXJkO1xcblxcdH1cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRhID0gXCIjaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKVxcblxcdFxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JGEgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHQjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0XFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDkgPSBcIiNkZWZpbmUgTEFNQkVSVFxcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcXG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xcblxcdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkOSA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XFxudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG5cXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcXG5cXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xcblxcdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcXG5cXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcXG5cXHQjZWxzZVxcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcXG5cXHQjZW5kaWZcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkOCA9IFwiI2RlZmluZSBNQVRDQVBcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQ4ID0gXCIjZGVmaW5lIE1BVENBUFxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0dmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XFxuXFx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xcblxcdHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XFxuXFx0dmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xcblxcdCNpZmRlZiBVU0VfTUFUQ0FQXFxuXFx0XFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xcblxcdCNlbHNlXFxuXFx0XFx0dmVjNCBtYXRjYXBDb2xvciA9IHZlYzQoIHZlYzMoIG1peCggMC4yLCAwLjgsIHV2LnkgKSApLCAxLjAgKTtcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDcgPSBcIiNkZWZpbmUgTk9STUFMXFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuI2VuZGlmXFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQ3ID0gXCIjZGVmaW5lIE5PUk1BTFxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxcblxcdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTtcXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ2ID0gXCIjZGVmaW5lIFBIT05HXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQ2ID0gXCIjZGVmaW5lIFBIT05HXFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcXG51bmlmb3JtIGZsb2F0IHNoaW5pbmVzcztcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ1ID0gXCIjZGVmaW5lIFNUQU5EQVJEXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5cXHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx1djJfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcXG4jZW5kaWZcXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JDUgPSBcIiNkZWZpbmUgU1RBTkRBUkRcXG4jaWZkZWYgUEhZU0lDQUxcXG5cXHQjZGVmaW5lIElPUlxcblxcdCNkZWZpbmUgU1BFQ1VMQVJcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XFxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpZmRlZiBJT1JcXG5cXHR1bmlmb3JtIGZsb2F0IGlvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJcXG5cXHR1bmlmb3JtIGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5O1xcblxcdHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xcblxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwO1xcblxcdCNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XFxuXFx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9TSEVFTlxcblxcdHVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yO1xcblxcdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XFxuXFx0I2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcXG5cXHR2ZWMzIHRvdGFsU3BlY3VsYXIgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XFxuXFx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpZmRlZiBVU0VfU0hFRU5cXG5cXHRcXHRmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTtcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcXG5cXHRcXHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xcblxcdFxcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDQgPSBcIiNkZWZpbmUgVE9PTlxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JDQgPSBcIiNkZWZpbmUgVE9PTlxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c190b29uX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDMgPSBcInVuaWZvcm0gZmxvYXQgc2l6ZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcXG5cXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxcblxcdFxcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcXG5cXHRcXHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKj0gKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkMyA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQyID0gXCIjaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkMiA9IFwidW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDEgPSBcInVuaWZvcm0gZmxvYXQgcm90YXRpb247XFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xcblxcdHZlYzIgc2NhbGU7XFxuXFx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XFxuXFx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XFxuXFx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXFxuXFx0XFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xcblxcdFxcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56O1xcblxcdCNlbmRpZlxcblxcdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XFxuXFx0dmVjMiByb3RhdGVkUG9zaXRpb247XFxuXFx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xcblxcdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcXG5cXHRtdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcXG5cXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQxID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgU2hhZGVyQ2h1bmsgPSB7XG5cdGFscGhhbWFwX2ZyYWdtZW50OiBhbHBoYW1hcF9mcmFnbWVudCxcblx0YWxwaGFtYXBfcGFyc19mcmFnbWVudDogYWxwaGFtYXBfcGFyc19mcmFnbWVudCxcblx0YWxwaGF0ZXN0X2ZyYWdtZW50OiBhbHBoYXRlc3RfZnJhZ21lbnQsXG5cdGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OiBhbHBoYXRlc3RfcGFyc19mcmFnbWVudCxcblx0YW9tYXBfZnJhZ21lbnQ6IGFvbWFwX2ZyYWdtZW50LFxuXHRhb21hcF9wYXJzX2ZyYWdtZW50OiBhb21hcF9wYXJzX2ZyYWdtZW50LFxuXHRiZWdpbl92ZXJ0ZXg6IGJlZ2luX3ZlcnRleCxcblx0YmVnaW5ub3JtYWxfdmVydGV4OiBiZWdpbm5vcm1hbF92ZXJ0ZXgsXG5cdGJzZGZzOiBic2Rmcyxcblx0YnVtcG1hcF9wYXJzX2ZyYWdtZW50OiBidW1wbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQsXG5cdGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4LFxuXHRjbGlwcGluZ19wbGFuZXNfdmVydGV4OiBjbGlwcGluZ19wbGFuZXNfdmVydGV4LFxuXHRjb2xvcl9mcmFnbWVudDogY29sb3JfZnJhZ21lbnQsXG5cdGNvbG9yX3BhcnNfZnJhZ21lbnQ6IGNvbG9yX3BhcnNfZnJhZ21lbnQsXG5cdGNvbG9yX3BhcnNfdmVydGV4OiBjb2xvcl9wYXJzX3ZlcnRleCxcblx0Y29sb3JfdmVydGV4OiBjb2xvcl92ZXJ0ZXgsXG5cdGNvbW1vbjogY29tbW9uLFxuXHRjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudCxcblx0ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IGRlZmF1bHRub3JtYWxfdmVydGV4LFxuXHRkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleCxcblx0ZGlzcGxhY2VtZW50bWFwX3ZlcnRleDogZGlzcGxhY2VtZW50bWFwX3ZlcnRleCxcblx0ZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IGVtaXNzaXZlbWFwX2ZyYWdtZW50LFxuXHRlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50LFxuXHRlbmNvZGluZ3NfZnJhZ21lbnQ6IGVuY29kaW5nc19mcmFnbWVudCxcblx0ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IGVuY29kaW5nc19wYXJzX2ZyYWdtZW50LFxuXHRlbnZtYXBfZnJhZ21lbnQ6IGVudm1hcF9mcmFnbWVudCxcblx0ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX3BhcnNfdmVydGV4OiBlbnZtYXBfcGFyc192ZXJ0ZXgsXG5cdGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX3ZlcnRleDogZW52bWFwX3ZlcnRleCxcblx0Zm9nX3ZlcnRleDogZm9nX3ZlcnRleCxcblx0Zm9nX3BhcnNfdmVydGV4OiBmb2dfcGFyc192ZXJ0ZXgsXG5cdGZvZ19mcmFnbWVudDogZm9nX2ZyYWdtZW50LFxuXHRmb2dfcGFyc19mcmFnbWVudDogZm9nX3BhcnNfZnJhZ21lbnQsXG5cdGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGxpZ2h0bWFwX2ZyYWdtZW50OiBsaWdodG1hcF9mcmFnbWVudCxcblx0bGlnaHRtYXBfcGFyc19mcmFnbWVudDogbGlnaHRtYXBfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX2xhbWJlcnRfdmVydGV4OiBsaWdodHNfbGFtYmVydF92ZXJ0ZXgsXG5cdGxpZ2h0c19wYXJzX2JlZ2luOiBsaWdodHNfcGFyc19iZWdpbixcblx0bGlnaHRzX3Rvb25fZnJhZ21lbnQ6IGxpZ2h0c190b29uX2ZyYWdtZW50LFxuXHRsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiBsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IGxpZ2h0c19waG9uZ19mcmFnbWVudCxcblx0bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudCxcblx0bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodHNfZnJhZ21lbnRfYmVnaW46IGxpZ2h0c19mcmFnbWVudF9iZWdpbixcblx0bGlnaHRzX2ZyYWdtZW50X21hcHM6IGxpZ2h0c19mcmFnbWVudF9tYXBzLFxuXHRsaWdodHNfZnJhZ21lbnRfZW5kOiBsaWdodHNfZnJhZ21lbnRfZW5kLFxuXHRsb2dkZXB0aGJ1Zl9mcmFnbWVudDogbG9nZGVwdGhidWZfZnJhZ21lbnQsXG5cdGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQsXG5cdGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleCxcblx0bG9nZGVwdGhidWZfdmVydGV4OiBsb2dkZXB0aGJ1Zl92ZXJ0ZXgsXG5cdG1hcF9mcmFnbWVudDogbWFwX2ZyYWdtZW50LFxuXHRtYXBfcGFyc19mcmFnbWVudDogbWFwX3BhcnNfZnJhZ21lbnQsXG5cdG1hcF9wYXJ0aWNsZV9mcmFnbWVudDogbWFwX3BhcnRpY2xlX2ZyYWdtZW50LFxuXHRtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDogbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQsXG5cdG1ldGFsbmVzc21hcF9mcmFnbWVudDogbWV0YWxuZXNzbWFwX2ZyYWdtZW50LFxuXHRtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDogbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQsXG5cdG1vcnBobm9ybWFsX3ZlcnRleDogbW9ycGhub3JtYWxfdmVydGV4LFxuXHRtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDogbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXgsXG5cdG1vcnBodGFyZ2V0X3ZlcnRleDogbW9ycGh0YXJnZXRfdmVydGV4LFxuXHRub3JtYWxfZnJhZ21lbnRfYmVnaW46IG5vcm1hbF9mcmFnbWVudF9iZWdpbixcblx0bm9ybWFsX2ZyYWdtZW50X21hcHM6IG5vcm1hbF9mcmFnbWVudF9tYXBzLFxuXHRub3JtYWxfcGFyc19mcmFnbWVudDogbm9ybWFsX3BhcnNfZnJhZ21lbnQsXG5cdG5vcm1hbF9wYXJzX3ZlcnRleDogbm9ybWFsX3BhcnNfdmVydGV4LFxuXHRub3JtYWxfdmVydGV4OiBub3JtYWxfdmVydGV4LFxuXHRub3JtYWxtYXBfcGFyc19mcmFnbWVudDogbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4sXG5cdGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczogY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzLFxuXHRjbGVhcmNvYXRfcGFyc19mcmFnbWVudDogY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQsXG5cdG91dHB1dF9mcmFnbWVudDogb3V0cHV0X2ZyYWdtZW50LFxuXHRwYWNraW5nOiBwYWNraW5nLFxuXHRwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50LFxuXHRwcm9qZWN0X3ZlcnRleDogcHJvamVjdF92ZXJ0ZXgsXG5cdGRpdGhlcmluZ19mcmFnbWVudDogZGl0aGVyaW5nX2ZyYWdtZW50LFxuXHRkaXRoZXJpbmdfcGFyc19mcmFnbWVudDogZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQsXG5cdHJvdWdobmVzc21hcF9mcmFnbWVudDogcm91Z2huZXNzbWFwX2ZyYWdtZW50LFxuXHRyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDogcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQsXG5cdHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCxcblx0c2hhZG93bWFwX3BhcnNfdmVydGV4OiBzaGFkb3dtYXBfcGFyc192ZXJ0ZXgsXG5cdHNoYWRvd21hcF92ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0ZXgsXG5cdHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDogc2hhZG93bWFza19wYXJzX2ZyYWdtZW50LFxuXHRza2luYmFzZV92ZXJ0ZXg6IHNraW5iYXNlX3ZlcnRleCxcblx0c2tpbm5pbmdfcGFyc192ZXJ0ZXg6IHNraW5uaW5nX3BhcnNfdmVydGV4LFxuXHRza2lubmluZ192ZXJ0ZXg6IHNraW5uaW5nX3ZlcnRleCxcblx0c2tpbm5vcm1hbF92ZXJ0ZXg6IHNraW5ub3JtYWxfdmVydGV4LFxuXHRzcGVjdWxhcm1hcF9mcmFnbWVudDogc3BlY3VsYXJtYXBfZnJhZ21lbnQsXG5cdHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQsXG5cdHRvbmVtYXBwaW5nX2ZyYWdtZW50OiB0b25lbWFwcGluZ19mcmFnbWVudCxcblx0dG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDogdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCxcblx0dHJhbnNtaXNzaW9uX2ZyYWdtZW50OiB0cmFuc21pc3Npb25fZnJhZ21lbnQsXG5cdHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50OiB0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudCxcblx0dXZfcGFyc19mcmFnbWVudDogdXZfcGFyc19mcmFnbWVudCxcblx0dXZfcGFyc192ZXJ0ZXg6IHV2X3BhcnNfdmVydGV4LFxuXHR1dl92ZXJ0ZXg6IHV2X3ZlcnRleCxcblx0dXYyX3BhcnNfZnJhZ21lbnQ6IHV2Ml9wYXJzX2ZyYWdtZW50LFxuXHR1djJfcGFyc192ZXJ0ZXg6IHV2Ml9wYXJzX3ZlcnRleCxcblx0dXYyX3ZlcnRleDogdXYyX3ZlcnRleCxcblx0d29ybGRwb3NfdmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgsXG5cblx0YmFja2dyb3VuZF92ZXJ0OiB2ZXJ0ZXgkZyxcblx0YmFja2dyb3VuZF9mcmFnOiBmcmFnbWVudCRnLFxuXHRjdWJlX3ZlcnQ6IHZlcnRleCRmLFxuXHRjdWJlX2ZyYWc6IGZyYWdtZW50JGYsXG5cdGRlcHRoX3ZlcnQ6IHZlcnRleCRlLFxuXHRkZXB0aF9mcmFnOiBmcmFnbWVudCRlLFxuXHRkaXN0YW5jZVJHQkFfdmVydDogdmVydGV4JGQsXG5cdGRpc3RhbmNlUkdCQV9mcmFnOiBmcmFnbWVudCRkLFxuXHRlcXVpcmVjdF92ZXJ0OiB2ZXJ0ZXgkYyxcblx0ZXF1aXJlY3RfZnJhZzogZnJhZ21lbnQkYyxcblx0bGluZWRhc2hlZF92ZXJ0OiB2ZXJ0ZXgkYixcblx0bGluZWRhc2hlZF9mcmFnOiBmcmFnbWVudCRiLFxuXHRtZXNoYmFzaWNfdmVydDogdmVydGV4JGEsXG5cdG1lc2hiYXNpY19mcmFnOiBmcmFnbWVudCRhLFxuXHRtZXNobGFtYmVydF92ZXJ0OiB2ZXJ0ZXgkOSxcblx0bWVzaGxhbWJlcnRfZnJhZzogZnJhZ21lbnQkOSxcblx0bWVzaG1hdGNhcF92ZXJ0OiB2ZXJ0ZXgkOCxcblx0bWVzaG1hdGNhcF9mcmFnOiBmcmFnbWVudCQ4LFxuXHRtZXNobm9ybWFsX3ZlcnQ6IHZlcnRleCQ3LFxuXHRtZXNobm9ybWFsX2ZyYWc6IGZyYWdtZW50JDcsXG5cdG1lc2hwaG9uZ192ZXJ0OiB2ZXJ0ZXgkNixcblx0bWVzaHBob25nX2ZyYWc6IGZyYWdtZW50JDYsXG5cdG1lc2hwaHlzaWNhbF92ZXJ0OiB2ZXJ0ZXgkNSxcblx0bWVzaHBoeXNpY2FsX2ZyYWc6IGZyYWdtZW50JDUsXG5cdG1lc2h0b29uX3ZlcnQ6IHZlcnRleCQ0LFxuXHRtZXNodG9vbl9mcmFnOiBmcmFnbWVudCQ0LFxuXHRwb2ludHNfdmVydDogdmVydGV4JDMsXG5cdHBvaW50c19mcmFnOiBmcmFnbWVudCQzLFxuXHRzaGFkb3dfdmVydDogdmVydGV4JDIsXG5cdHNoYWRvd19mcmFnOiBmcmFnbWVudCQyLFxuXHRzcHJpdGVfdmVydDogdmVydGV4JDEsXG5cdHNwcml0ZV9mcmFnOiBmcmFnbWVudCQxXG59O1xuXG4vKipcbiAqIFVuaWZvcm1zIGxpYnJhcnkgZm9yIHNoYXJlZCB3ZWJnbCBzaGFkZXJzXG4gKi9cblxuY29uc3QgVW5pZm9ybXNMaWIgPSB7XG5cblx0Y29tbW9uOiB7XG5cblx0XHRkaWZmdXNlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZmZmZmZmICkgfSxcblx0XHRvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfSxcblxuXHRcdG1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdHV2VHJhbnNmb3JtOiB7IHZhbHVlOiBuZXcgTWF0cml4MygpIH0sXG5cdFx0dXYyVHJhbnNmb3JtOiB7IHZhbHVlOiBuZXcgTWF0cml4MygpIH0sXG5cblx0XHRhbHBoYU1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGFscGhhVGVzdDogeyB2YWx1ZTogMCB9XG5cblx0fSxcblxuXHRzcGVjdWxhcm1hcDoge1xuXG5cdFx0c3BlY3VsYXJNYXA6IHsgdmFsdWU6IG51bGwgfSxcblxuXHR9LFxuXG5cdGVudm1hcDoge1xuXG5cdFx0ZW52TWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0ZmxpcEVudk1hcDogeyB2YWx1ZTogLSAxIH0sXG5cdFx0cmVmbGVjdGl2aXR5OiB7IHZhbHVlOiAxLjAgfSwgLy8gYmFzaWMsIGxhbWJlcnQsIHBob25nXG5cdFx0aW9yOiB7IHZhbHVlOiAxLjUgfSwgLy8gc3RhbmRhcmQsIHBoeXNpY2FsXG5cdFx0cmVmcmFjdGlvblJhdGlvOiB7IHZhbHVlOiAwLjk4IH1cblxuXHR9LFxuXG5cdGFvbWFwOiB7XG5cblx0XHRhb01hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGFvTWFwSW50ZW5zaXR5OiB7IHZhbHVlOiAxIH1cblxuXHR9LFxuXG5cdGxpZ2h0bWFwOiB7XG5cblx0XHRsaWdodE1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGxpZ2h0TWFwSW50ZW5zaXR5OiB7IHZhbHVlOiAxIH1cblxuXHR9LFxuXG5cdGVtaXNzaXZlbWFwOiB7XG5cblx0XHRlbWlzc2l2ZU1hcDogeyB2YWx1ZTogbnVsbCB9XG5cblx0fSxcblxuXHRidW1wbWFwOiB7XG5cblx0XHRidW1wTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0YnVtcFNjYWxlOiB7IHZhbHVlOiAxIH1cblxuXHR9LFxuXG5cdG5vcm1hbG1hcDoge1xuXG5cdFx0bm9ybWFsTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0bm9ybWFsU2NhbGU6IHsgdmFsdWU6IG5ldyBWZWN0b3IyKCAxLCAxICkgfVxuXG5cdH0sXG5cblx0ZGlzcGxhY2VtZW50bWFwOiB7XG5cblx0XHRkaXNwbGFjZW1lbnRNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRkaXNwbGFjZW1lbnRTY2FsZTogeyB2YWx1ZTogMSB9LFxuXHRcdGRpc3BsYWNlbWVudEJpYXM6IHsgdmFsdWU6IDAgfVxuXG5cdH0sXG5cblx0cm91Z2huZXNzbWFwOiB7XG5cblx0XHRyb3VnaG5lc3NNYXA6IHsgdmFsdWU6IG51bGwgfVxuXG5cdH0sXG5cblx0bWV0YWxuZXNzbWFwOiB7XG5cblx0XHRtZXRhbG5lc3NNYXA6IHsgdmFsdWU6IG51bGwgfVxuXG5cdH0sXG5cblx0Z3JhZGllbnRtYXA6IHtcblxuXHRcdGdyYWRpZW50TWFwOiB7IHZhbHVlOiBudWxsIH1cblxuXHR9LFxuXG5cdGZvZzoge1xuXG5cdFx0Zm9nRGVuc2l0eTogeyB2YWx1ZTogMC4wMDAyNSB9LFxuXHRcdGZvZ05lYXI6IHsgdmFsdWU6IDEgfSxcblx0XHRmb2dGYXI6IHsgdmFsdWU6IDIwMDAgfSxcblx0XHRmb2dDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCAweGZmZmZmZiApIH1cblxuXHR9LFxuXG5cdGxpZ2h0czoge1xuXG5cdFx0YW1iaWVudExpZ2h0Q29sb3I6IHsgdmFsdWU6IFtdIH0sXG5cblx0XHRsaWdodFByb2JlOiB7IHZhbHVlOiBbXSB9LFxuXG5cdFx0ZGlyZWN0aW9uYWxMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRkaXJlY3Rpb246IHt9LFxuXHRcdFx0Y29sb3I6IHt9XG5cdFx0fSB9LFxuXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRzaGFkb3dCaWFzOiB7fSxcblx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IHt9LFxuXHRcdFx0c2hhZG93UmFkaXVzOiB7fSxcblx0XHRcdHNoYWRvd01hcFNpemU6IHt9XG5cdFx0fSB9LFxuXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXA6IHsgdmFsdWU6IFtdIH0sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IHsgdmFsdWU6IFtdIH0sXG5cblx0XHRzcG90TGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczoge1xuXHRcdFx0Y29sb3I6IHt9LFxuXHRcdFx0cG9zaXRpb246IHt9LFxuXHRcdFx0ZGlyZWN0aW9uOiB7fSxcblx0XHRcdGRpc3RhbmNlOiB7fSxcblx0XHRcdGNvbmVDb3M6IHt9LFxuXHRcdFx0cGVudW1icmFDb3M6IHt9LFxuXHRcdFx0ZGVjYXk6IHt9XG5cdFx0fSB9LFxuXG5cdFx0c3BvdExpZ2h0U2hhZG93czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHtcblx0XHRcdHNoYWRvd0JpYXM6IHt9LFxuXHRcdFx0c2hhZG93Tm9ybWFsQmlhczoge30sXG5cdFx0XHRzaGFkb3dSYWRpdXM6IHt9LFxuXHRcdFx0c2hhZG93TWFwU2l6ZToge31cblx0XHR9IH0sXG5cblx0XHRzcG90U2hhZG93TWFwOiB7IHZhbHVlOiBbXSB9LFxuXHRcdHNwb3RTaGFkb3dNYXRyaXg6IHsgdmFsdWU6IFtdIH0sXG5cblx0XHRwb2ludExpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHtcblx0XHRcdGNvbG9yOiB7fSxcblx0XHRcdHBvc2l0aW9uOiB7fSxcblx0XHRcdGRlY2F5OiB7fSxcblx0XHRcdGRpc3RhbmNlOiB7fVxuXHRcdH0gfSxcblxuXHRcdHBvaW50TGlnaHRTaGFkb3dzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczoge1xuXHRcdFx0c2hhZG93Qmlhczoge30sXG5cdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiB7fSxcblx0XHRcdHNoYWRvd1JhZGl1czoge30sXG5cdFx0XHRzaGFkb3dNYXBTaXplOiB7fSxcblx0XHRcdHNoYWRvd0NhbWVyYU5lYXI6IHt9LFxuXHRcdFx0c2hhZG93Q2FtZXJhRmFyOiB7fVxuXHRcdH0gfSxcblxuXHRcdHBvaW50U2hhZG93TWFwOiB7IHZhbHVlOiBbXSB9LFxuXHRcdHBvaW50U2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LFxuXG5cdFx0aGVtaXNwaGVyZUxpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHtcblx0XHRcdGRpcmVjdGlvbjoge30sXG5cdFx0XHRza3lDb2xvcjoge30sXG5cdFx0XHRncm91bmRDb2xvcjoge31cblx0XHR9IH0sXG5cblx0XHQvLyBUT0RPIChhYmVsbmF0aW9uKTogUmVjdEFyZWFMaWdodCBCUkRGIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWQgZnJvbSBleGFtcGxlIHRvIG1haW4gc3JjXG5cdFx0cmVjdEFyZWFMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRjb2xvcjoge30sXG5cdFx0XHRwb3NpdGlvbjoge30sXG5cdFx0XHR3aWR0aDoge30sXG5cdFx0XHRoZWlnaHQ6IHt9XG5cdFx0fSB9LFxuXG5cdFx0bHRjXzE6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRsdGNfMjogeyB2YWx1ZTogbnVsbCB9XG5cblx0fSxcblxuXHRwb2ludHM6IHtcblxuXHRcdGRpZmZ1c2U6IHsgdmFsdWU6IG5ldyBDb2xvciggMHhmZmZmZmYgKSB9LFxuXHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9LFxuXHRcdHNpemU6IHsgdmFsdWU6IDEuMCB9LFxuXHRcdHNjYWxlOiB7IHZhbHVlOiAxLjAgfSxcblx0XHRtYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhbHBoYU1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGFscGhhVGVzdDogeyB2YWx1ZTogMCB9LFxuXHRcdHV2VHJhbnNmb3JtOiB7IHZhbHVlOiBuZXcgTWF0cml4MygpIH1cblxuXHR9LFxuXG5cdHNwcml0ZToge1xuXG5cdFx0ZGlmZnVzZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweGZmZmZmZiApIH0sXG5cdFx0b3BhY2l0eTogeyB2YWx1ZTogMS4wIH0sXG5cdFx0Y2VudGVyOiB7IHZhbHVlOiBuZXcgVmVjdG9yMiggMC41LCAwLjUgKSB9LFxuXHRcdHJvdGF0aW9uOiB7IHZhbHVlOiAwLjAgfSxcblx0XHRtYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhbHBoYU1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGFscGhhVGVzdDogeyB2YWx1ZTogMCB9LFxuXHRcdHV2VHJhbnNmb3JtOiB7IHZhbHVlOiBuZXcgTWF0cml4MygpIH1cblxuXHR9XG5cbn07XG5cbmNvbnN0IFNoYWRlckxpYiA9IHtcblxuXHRiYXNpYzoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLnNwZWN1bGFybWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW52bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuYW9tYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmZvZ1xuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGJhc2ljX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY19mcmFnXG5cblx0fSxcblxuXHRsYW1iZXJ0OiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbnZtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5hb21hcCxcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2csXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodHMsXG5cdFx0XHR7XG5cdFx0XHRcdGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfVxuXHRcdFx0fVxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfZnJhZ1xuXG5cdH0sXG5cblx0cGhvbmc6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmVudm1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmFvbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmJ1bXBtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2csXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodHMsXG5cdFx0XHR7XG5cdFx0XHRcdGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfSxcblx0XHRcdFx0c3BlY3VsYXI6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgxMTExMTEgKSB9LFxuXHRcdFx0XHRzaGluaW5lc3M6IHsgdmFsdWU6IDMwIH1cblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaG9uZ192ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfZnJhZ1xuXG5cdH0sXG5cblx0c3RhbmRhcmQ6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbnZtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5hb21hcCxcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5idW1wbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubm9ybWFsbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIucm91Z2huZXNzbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubWV0YWxuZXNzbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0sXG5cdFx0XHRcdHJvdWdobmVzczogeyB2YWx1ZTogMS4wIH0sXG5cdFx0XHRcdG1ldGFsbmVzczogeyB2YWx1ZTogMC4wIH0sXG5cdFx0XHRcdGVudk1hcEludGVuc2l0eTogeyB2YWx1ZTogMSB9IC8vIHRlbXBvcmFyeVxuXHRcdFx0fVxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF9mcmFnXG5cblx0fSxcblxuXHR0b29uOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuYW9tYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmVtaXNzaXZlbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuYnVtcG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLm5vcm1hbG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmdyYWRpZW50bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH1cblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2h0b29uX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2h0b29uX2ZyYWdcblxuXHR9LFxuXG5cdG1hdGNhcDoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLmJ1bXBtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2csXG5cdFx0XHR7XG5cdFx0XHRcdG1hdGNhcDogeyB2YWx1ZTogbnVsbCB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobWF0Y2FwX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2htYXRjYXBfZnJhZ1xuXG5cdH0sXG5cblx0cG9pbnRzOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIucG9pbnRzLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nXG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5wb2ludHNfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRzX2ZyYWdcblxuXHR9LFxuXG5cdGRhc2hlZDoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLmZvZyxcblx0XHRcdHtcblx0XHRcdFx0c2NhbGU6IHsgdmFsdWU6IDEgfSxcblx0XHRcdFx0ZGFzaFNpemU6IHsgdmFsdWU6IDEgfSxcblx0XHRcdFx0dG90YWxTaXplOiB7IHZhbHVlOiAyIH1cblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmxpbmVkYXNoZWRfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hlZF9mcmFnXG5cblx0fSxcblxuXHRkZXB0aDoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcFxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZGVwdGhfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZGVwdGhfZnJhZ1xuXG5cdH0sXG5cblx0bm9ybWFsOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuYnVtcG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLm5vcm1hbG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCxcblx0XHRcdHtcblx0XHRcdFx0b3BhY2l0eTogeyB2YWx1ZTogMS4wIH1cblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hub3JtYWxfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaG5vcm1hbF9mcmFnXG5cblx0fSxcblxuXHRzcHJpdGU6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5zcHJpdGUsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2dcblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLnNwcml0ZV92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5zcHJpdGVfZnJhZ1xuXG5cdH0sXG5cblx0YmFja2dyb3VuZDoge1xuXG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdHV2VHJhbnNmb3JtOiB7IHZhbHVlOiBuZXcgTWF0cml4MygpIH0sXG5cdFx0XHR0MkQ6IHsgdmFsdWU6IG51bGwgfSxcblx0XHR9LFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5iYWNrZ3JvdW5kX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmJhY2tncm91bmRfZnJhZ1xuXG5cdH0sXG5cdC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly9cdEN1YmUgbWFwIHNoYWRlclxuXHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdGN1YmU6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbnZtYXAsXG5cdFx0XHR7XG5cdFx0XHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5jdWJlX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmN1YmVfZnJhZ1xuXG5cdH0sXG5cblx0ZXF1aXJlY3Q6IHtcblxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHR0RXF1aXJlY3Q6IHsgdmFsdWU6IG51bGwgfSxcblx0XHR9LFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF9mcmFnXG5cblx0fSxcblxuXHRkaXN0YW5jZVJHQkE6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsXG5cdFx0XHR7XG5cdFx0XHRcdHJlZmVyZW5jZVBvc2l0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMygpIH0sXG5cdFx0XHRcdG5lYXJEaXN0YW5jZTogeyB2YWx1ZTogMSB9LFxuXHRcdFx0XHRmYXJEaXN0YW5jZTogeyB2YWx1ZTogMTAwMCB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5kaXN0YW5jZVJHQkFfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZGlzdGFuY2VSR0JBX2ZyYWdcblxuXHR9LFxuXG5cdHNoYWRvdzoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0cyxcblx0XHRcdFVuaWZvcm1zTGliLmZvZyxcblx0XHRcdHtcblx0XHRcdFx0Y29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMCApIH0sXG5cdFx0XHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9XG5cdFx0XHR9LFxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuc2hhZG93X3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnNoYWRvd19mcmFnXG5cblx0fVxuXG59O1xuXG5TaGFkZXJMaWIucGh5c2ljYWwgPSB7XG5cblx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRTaGFkZXJMaWIuc3RhbmRhcmQudW5pZm9ybXMsXG5cdFx0e1xuXHRcdFx0Y2xlYXJjb2F0OiB7IHZhbHVlOiAwIH0sXG5cdFx0XHRjbGVhcmNvYXRNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdGNsZWFyY29hdFJvdWdobmVzczogeyB2YWx1ZTogMCB9LFxuXHRcdFx0Y2xlYXJjb2F0Um91Z2huZXNzTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRjbGVhcmNvYXROb3JtYWxTY2FsZTogeyB2YWx1ZTogbmV3IFZlY3RvcjIoIDEsIDEgKSB9LFxuXHRcdFx0Y2xlYXJjb2F0Tm9ybWFsTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRzaGVlbjogeyB2YWx1ZTogMCB9LFxuXHRcdFx0c2hlZW5Db2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0sXG5cdFx0XHRzaGVlbkNvbG9yTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRzaGVlblJvdWdobmVzczogeyB2YWx1ZTogMSB9LFxuXHRcdFx0c2hlZW5Sb3VnaG5lc3NNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdHRyYW5zbWlzc2lvbjogeyB2YWx1ZTogMCB9LFxuXHRcdFx0dHJhbnNtaXNzaW9uTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHR0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTogeyB2YWx1ZTogbmV3IFZlY3RvcjIoKSB9LFxuXHRcdFx0dHJhbnNtaXNzaW9uU2FtcGxlck1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0dGhpY2tuZXNzOiB7IHZhbHVlOiAwIH0sXG5cdFx0XHR0aGlja25lc3NNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdGF0dGVudWF0aW9uRGlzdGFuY2U6IHsgdmFsdWU6IDAgfSxcblx0XHRcdGF0dGVudWF0aW9uQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9LFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHk6IHsgdmFsdWU6IDEgfSxcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5TWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRzcGVjdWxhckNvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDEsIDEsIDEgKSB9LFxuXHRcdFx0c3BlY3VsYXJDb2xvck1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdH1cblx0XSApLFxuXG5cdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3ZlcnQsXG5cdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZ1xuXG59O1xuXG5mdW5jdGlvbiBXZWJHTEJhY2tncm91bmQoIHJlbmRlcmVyLCBjdWJlbWFwcywgc3RhdGUsIG9iamVjdHMsIGFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEgKSB7XG5cblx0Y29uc3QgY2xlYXJDb2xvciA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTtcblx0bGV0IGNsZWFyQWxwaGEgPSBhbHBoYSA9PT0gdHJ1ZSA/IDAgOiAxO1xuXG5cdGxldCBwbGFuZU1lc2g7XG5cdGxldCBib3hNZXNoO1xuXG5cdGxldCBjdXJyZW50QmFja2dyb3VuZCA9IG51bGw7XG5cdGxldCBjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gPSAwO1xuXHRsZXQgY3VycmVudFRvbmVtYXBwaW5nID0gbnVsbDtcblxuXHRmdW5jdGlvbiByZW5kZXIoIHJlbmRlckxpc3QsIHNjZW5lICkge1xuXG5cdFx0bGV0IGZvcmNlQ2xlYXIgPSBmYWxzZTtcblx0XHRsZXQgYmFja2dyb3VuZCA9IHNjZW5lLmlzU2NlbmUgPT09IHRydWUgPyBzY2VuZS5iYWNrZ3JvdW5kIDogbnVsbDtcblxuXHRcdGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0YmFja2dyb3VuZCA9IGN1YmVtYXBzLmdldCggYmFja2dyb3VuZCApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGJhY2tncm91bmQgaW4gQVJcblx0XHQvLyBUT0RPOiBSZWNvbnNpZGVyIHRoaXMuXG5cblx0XHRjb25zdCB4ciA9IHJlbmRlcmVyLnhyO1xuXHRcdGNvbnN0IHNlc3Npb24gPSB4ci5nZXRTZXNzaW9uICYmIHhyLmdldFNlc3Npb24oKTtcblxuXHRcdGlmICggc2Vzc2lvbiAmJiBzZXNzaW9uLmVudmlyb25tZW50QmxlbmRNb2RlID09PSAnYWRkaXRpdmUnICkge1xuXG5cdFx0XHRiYWNrZ3JvdW5kID0gbnVsbDtcblxuXHRcdH1cblxuXHRcdGlmICggYmFja2dyb3VuZCA9PT0gbnVsbCApIHtcblxuXHRcdFx0c2V0Q2xlYXIoIGNsZWFyQ29sb3IsIGNsZWFyQWxwaGEgKTtcblxuXHRcdH0gZWxzZSBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc0NvbG9yICkge1xuXG5cdFx0XHRzZXRDbGVhciggYmFja2dyb3VuZCwgMSApO1xuXHRcdFx0Zm9yY2VDbGVhciA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlbmRlcmVyLmF1dG9DbGVhciB8fCBmb3JjZUNsZWFyICkge1xuXG5cdFx0XHRyZW5kZXJlci5jbGVhciggcmVuZGVyZXIuYXV0b0NsZWFyQ29sb3IsIHJlbmRlcmVyLmF1dG9DbGVhckRlcHRoLCByZW5kZXJlci5hdXRvQ2xlYXJTdGVuY2lsICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGJhY2tncm91bmQgJiYgKCBiYWNrZ3JvdW5kLmlzQ3ViZVRleHR1cmUgfHwgYmFja2dyb3VuZC5tYXBwaW5nID09PSBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZyApICkge1xuXG5cdFx0XHRpZiAoIGJveE1lc2ggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRib3hNZXNoID0gbmV3IE1lc2goXG5cdFx0XHRcdFx0bmV3IEJveEdlb21ldHJ5KCAxLCAxLCAxICksXG5cdFx0XHRcdFx0bmV3IFNoYWRlck1hdGVyaWFsKCB7XG5cdFx0XHRcdFx0XHRuYW1lOiAnQmFja2dyb3VuZEN1YmVNYXRlcmlhbCcsXG5cdFx0XHRcdFx0XHR1bmlmb3JtczogY2xvbmVVbmlmb3JtcyggU2hhZGVyTGliLmN1YmUudW5pZm9ybXMgKSxcblx0XHRcdFx0XHRcdHZlcnRleFNoYWRlcjogU2hhZGVyTGliLmN1YmUudmVydGV4U2hhZGVyLFxuXHRcdFx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckxpYi5jdWJlLmZyYWdtZW50U2hhZGVyLFxuXHRcdFx0XHRcdFx0c2lkZTogQmFja1NpZGUsXG5cdFx0XHRcdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRmb2c6IGZhbHNlXG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ym94TWVzaC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoICdub3JtYWwnICk7XG5cdFx0XHRcdGJveE1lc2guZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCAndXYnICk7XG5cblx0XHRcdFx0Ym94TWVzaC5vbkJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uICggcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRcdFx0XHR0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbiggY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBlbmFibGUgY29kZSBpbmplY3Rpb24gZm9yIG5vbi1idWlsdC1pbiBtYXRlcmlhbFxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGJveE1lc2gubWF0ZXJpYWwsICdlbnZNYXAnLCB7XG5cblx0XHRcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRvYmplY3RzLnVwZGF0ZSggYm94TWVzaCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGJveE1lc2gubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlID0gYmFja2dyb3VuZDtcblx0XHRcdGJveE1lc2gubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZSA9ICggYmFja2dyb3VuZC5pc0N1YmVUZXh0dXJlICYmIGJhY2tncm91bmQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSApID8gLSAxIDogMTtcblxuXHRcdFx0aWYgKCBjdXJyZW50QmFja2dyb3VuZCAhPT0gYmFja2dyb3VuZCB8fFxuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gIT09IGJhY2tncm91bmQudmVyc2lvbiB8fFxuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgIT09IHJlbmRlcmVyLnRvbmVNYXBwaW5nICkge1xuXG5cdFx0XHRcdGJveE1lc2gubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdGN1cnJlbnRCYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uID0gYmFja2dyb3VuZC52ZXJzaW9uO1xuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgPSByZW5kZXJlci50b25lTWFwcGluZztcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBwdXNoIHRvIHRoZSBwcmUtc29ydGVkIG9wYXF1ZSByZW5kZXIgbGlzdFxuXHRcdFx0cmVuZGVyTGlzdC51bnNoaWZ0KCBib3hNZXNoLCBib3hNZXNoLmdlb21ldHJ5LCBib3hNZXNoLm1hdGVyaWFsLCAwLCAwLCBudWxsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRpZiAoIHBsYW5lTWVzaCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHBsYW5lTWVzaCA9IG5ldyBNZXNoKFxuXHRcdFx0XHRcdG5ldyBQbGFuZUdlb21ldHJ5KCAyLCAyICksXG5cdFx0XHRcdFx0bmV3IFNoYWRlck1hdGVyaWFsKCB7XG5cdFx0XHRcdFx0XHRuYW1lOiAnQmFja2dyb3VuZE1hdGVyaWFsJyxcblx0XHRcdFx0XHRcdHVuaWZvcm1zOiBjbG9uZVVuaWZvcm1zKCBTaGFkZXJMaWIuYmFja2dyb3VuZC51bmlmb3JtcyApLFxuXHRcdFx0XHRcdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJMaWIuYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsXG5cdFx0XHRcdFx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyTGliLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHRcdFx0XHRzaWRlOiBGcm9udFNpZGUsXG5cdFx0XHRcdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRmb2c6IGZhbHNlXG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cGxhbmVNZXNoLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSggJ25vcm1hbCcgKTtcblxuXHRcdFx0XHQvLyBlbmFibGUgY29kZSBpbmplY3Rpb24gZm9yIG5vbi1idWlsdC1pbiBtYXRlcmlhbFxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHBsYW5lTWVzaC5tYXRlcmlhbCwgJ21hcCcsIHtcblxuXHRcdFx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdG9iamVjdHMudXBkYXRlKCBwbGFuZU1lc2ggKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRwbGFuZU1lc2gubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlID0gYmFja2dyb3VuZDtcblxuXHRcdFx0aWYgKCBiYWNrZ3JvdW5kLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0YmFja2dyb3VuZC51cGRhdGVNYXRyaXgoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRwbGFuZU1lc2gubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSggYmFja2dyb3VuZC5tYXRyaXggKTtcblxuXHRcdFx0aWYgKCBjdXJyZW50QmFja2dyb3VuZCAhPT0gYmFja2dyb3VuZCB8fFxuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gIT09IGJhY2tncm91bmQudmVyc2lvbiB8fFxuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgIT09IHJlbmRlcmVyLnRvbmVNYXBwaW5nICkge1xuXG5cdFx0XHRcdHBsYW5lTWVzaC5tYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gPSBiYWNrZ3JvdW5kLnZlcnNpb247XG5cdFx0XHRcdGN1cnJlbnRUb25lbWFwcGluZyA9IHJlbmRlcmVyLnRvbmVNYXBwaW5nO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0Ly8gcHVzaCB0byB0aGUgcHJlLXNvcnRlZCBvcGFxdWUgcmVuZGVyIGxpc3Rcblx0XHRcdHJlbmRlckxpc3QudW5zaGlmdCggcGxhbmVNZXNoLCBwbGFuZU1lc2guZ2VvbWV0cnksIHBsYW5lTWVzaC5tYXRlcmlhbCwgMCwgMCwgbnVsbCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRDbGVhciggY29sb3IsIGFscGhhICkge1xuXG5cdFx0c3RhdGUuYnVmZmVycy5jb2xvci5zZXRDbGVhciggY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgYWxwaGEsIHByZW11bHRpcGxpZWRBbHBoYSApO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0Z2V0Q2xlYXJDb2xvcjogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gY2xlYXJDb2xvcjtcblxuXHRcdH0sXG5cdFx0c2V0Q2xlYXJDb2xvcjogZnVuY3Rpb24gKCBjb2xvciwgYWxwaGEgPSAxICkge1xuXG5cdFx0XHRjbGVhckNvbG9yLnNldCggY29sb3IgKTtcblx0XHRcdGNsZWFyQWxwaGEgPSBhbHBoYTtcblx0XHRcdHNldENsZWFyKCBjbGVhckNvbG9yLCBjbGVhckFscGhhICk7XG5cblx0XHR9LFxuXHRcdGdldENsZWFyQWxwaGE6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIGNsZWFyQWxwaGE7XG5cblx0XHR9LFxuXHRcdHNldENsZWFyQWxwaGE6IGZ1bmN0aW9uICggYWxwaGEgKSB7XG5cblx0XHRcdGNsZWFyQWxwaGEgPSBhbHBoYTtcblx0XHRcdHNldENsZWFyKCBjbGVhckNvbG9yLCBjbGVhckFscGhhICk7XG5cblx0XHR9LFxuXHRcdHJlbmRlcjogcmVuZGVyXG5cblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTEJpbmRpbmdTdGF0ZXMoIGdsLCBleHRlbnNpb25zLCBhdHRyaWJ1dGVzLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgbWF4VmVydGV4QXR0cmlidXRlcyA9IGdsLmdldFBhcmFtZXRlciggMzQ5MjEgKTtcblxuXHRjb25zdCBleHRlbnNpb24gPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPyBudWxsIDogZXh0ZW5zaW9ucy5nZXQoICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcgKTtcblx0Y29uc3QgdmFvQXZhaWxhYmxlID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyIHx8IGV4dGVuc2lvbiAhPT0gbnVsbDtcblxuXHRjb25zdCBiaW5kaW5nU3RhdGVzID0ge307XG5cblx0Y29uc3QgZGVmYXVsdFN0YXRlID0gY3JlYXRlQmluZGluZ1N0YXRlKCBudWxsICk7XG5cdGxldCBjdXJyZW50U3RhdGUgPSBkZWZhdWx0U3RhdGU7XG5cblx0ZnVuY3Rpb24gc2V0dXAoIG9iamVjdCwgbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5LCBpbmRleCApIHtcblxuXHRcdGxldCB1cGRhdGVCdWZmZXJzID0gZmFsc2U7XG5cblx0XHRpZiAoIHZhb0F2YWlsYWJsZSApIHtcblxuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRCaW5kaW5nU3RhdGUoIGdlb21ldHJ5LCBwcm9ncmFtLCBtYXRlcmlhbCApO1xuXG5cdFx0XHRpZiAoIGN1cnJlbnRTdGF0ZSAhPT0gc3RhdGUgKSB7XG5cblx0XHRcdFx0Y3VycmVudFN0YXRlID0gc3RhdGU7XG5cdFx0XHRcdGJpbmRWZXJ0ZXhBcnJheU9iamVjdCggY3VycmVudFN0YXRlLm9iamVjdCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZUJ1ZmZlcnMgPSBuZWVkc1VwZGF0ZSggZ2VvbWV0cnksIGluZGV4ICk7XG5cblx0XHRcdGlmICggdXBkYXRlQnVmZmVycyApIHNhdmVDYWNoZSggZ2VvbWV0cnksIGluZGV4ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCB3aXJlZnJhbWUgPSAoIG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIGN1cnJlbnRTdGF0ZS5nZW9tZXRyeSAhPT0gZ2VvbWV0cnkuaWQgfHxcblx0XHRcdFx0Y3VycmVudFN0YXRlLnByb2dyYW0gIT09IHByb2dyYW0uaWQgfHxcblx0XHRcdFx0Y3VycmVudFN0YXRlLndpcmVmcmFtZSAhPT0gd2lyZWZyYW1lICkge1xuXG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS5nZW9tZXRyeSA9IGdlb21ldHJ5LmlkO1xuXHRcdFx0XHRjdXJyZW50U3RhdGUucHJvZ3JhbSA9IHByb2dyYW0uaWQ7XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS53aXJlZnJhbWUgPSB3aXJlZnJhbWU7XG5cblx0XHRcdFx0dXBkYXRlQnVmZmVycyA9IHRydWU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dXBkYXRlQnVmZmVycyA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZSggaW5kZXgsIDM0OTYzICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHVwZGF0ZUJ1ZmZlcnMgKSB7XG5cblx0XHRcdHNldHVwVmVydGV4QXR0cmlidXRlcyggb2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnkgKTtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRnbC5iaW5kQnVmZmVyKCAzNDk2MywgYXR0cmlidXRlcy5nZXQoIGluZGV4ICkuYnVmZmVyICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlVmVydGV4QXJyYXlPYmplY3QoKSB7XG5cblx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHJldHVybiBnbC5jcmVhdGVWZXJ0ZXhBcnJheSgpO1xuXG5cdFx0cmV0dXJuIGV4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kVmVydGV4QXJyYXlPYmplY3QoIHZhbyApIHtcblxuXHRcdGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyICkgcmV0dXJuIGdsLmJpbmRWZXJ0ZXhBcnJheSggdmFvICk7XG5cblx0XHRyZXR1cm4gZXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyggdmFvICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KCB2YW8gKSB7XG5cblx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHJldHVybiBnbC5kZWxldGVWZXJ0ZXhBcnJheSggdmFvICk7XG5cblx0XHRyZXR1cm4gZXh0ZW5zaW9uLmRlbGV0ZVZlcnRleEFycmF5T0VTKCB2YW8gKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QmluZGluZ1N0YXRlKCBnZW9tZXRyeSwgcHJvZ3JhbSwgbWF0ZXJpYWwgKSB7XG5cblx0XHRjb25zdCB3aXJlZnJhbWUgPSAoIG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSApO1xuXG5cdFx0bGV0IHByb2dyYW1NYXAgPSBiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeS5pZCBdO1xuXG5cdFx0aWYgKCBwcm9ncmFtTWFwID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHByb2dyYW1NYXAgPSB7fTtcblx0XHRcdGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5LmlkIF0gPSBwcm9ncmFtTWFwO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHN0YXRlTWFwID0gcHJvZ3JhbU1hcFsgcHJvZ3JhbS5pZCBdO1xuXG5cdFx0aWYgKCBzdGF0ZU1hcCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzdGF0ZU1hcCA9IHt9O1xuXHRcdFx0cHJvZ3JhbU1hcFsgcHJvZ3JhbS5pZCBdID0gc3RhdGVNYXA7XG5cblx0XHR9XG5cblx0XHRsZXQgc3RhdGUgPSBzdGF0ZU1hcFsgd2lyZWZyYW1lIF07XG5cblx0XHRpZiAoIHN0YXRlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHN0YXRlID0gY3JlYXRlQmluZGluZ1N0YXRlKCBjcmVhdGVWZXJ0ZXhBcnJheU9iamVjdCgpICk7XG5cdFx0XHRzdGF0ZU1hcFsgd2lyZWZyYW1lIF0gPSBzdGF0ZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBzdGF0ZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlQmluZGluZ1N0YXRlKCB2YW8gKSB7XG5cblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gW107XG5cdFx0Y29uc3QgZW5hYmxlZEF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjb25zdCBhdHRyaWJ1dGVEaXZpc29ycyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbWF4VmVydGV4QXR0cmlidXRlczsgaSArKyApIHtcblxuXHRcdFx0bmV3QXR0cmlidXRlc1sgaSBdID0gMDtcblx0XHRcdGVuYWJsZWRBdHRyaWJ1dGVzWyBpIF0gPSAwO1xuXHRcdFx0YXR0cmlidXRlRGl2aXNvcnNbIGkgXSA9IDA7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXG5cdFx0XHQvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbiBub24tVkFPIHN1cHBvcnQgYnJvd3NlclxuXHRcdFx0Z2VvbWV0cnk6IG51bGwsXG5cdFx0XHRwcm9ncmFtOiBudWxsLFxuXHRcdFx0d2lyZWZyYW1lOiBmYWxzZSxcblxuXHRcdFx0bmV3QXR0cmlidXRlczogbmV3QXR0cmlidXRlcyxcblx0XHRcdGVuYWJsZWRBdHRyaWJ1dGVzOiBlbmFibGVkQXR0cmlidXRlcyxcblx0XHRcdGF0dHJpYnV0ZURpdmlzb3JzOiBhdHRyaWJ1dGVEaXZpc29ycyxcblx0XHRcdG9iamVjdDogdmFvLFxuXHRcdFx0YXR0cmlidXRlczoge30sXG5cdFx0XHRpbmRleDogbnVsbFxuXG5cdFx0fTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNVcGRhdGUoIGdlb21ldHJ5LCBpbmRleCApIHtcblxuXHRcdGNvbnN0IGNhY2hlZEF0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUuYXR0cmlidXRlcztcblx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG5cdFx0bGV0IGF0dHJpYnV0ZXNOdW0gPSAwO1xuXG5cdFx0Zm9yICggY29uc3Qga2V5IGluIGdlb21ldHJ5QXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgY2FjaGVkQXR0cmlidXRlID0gY2FjaGVkQXR0cmlidXRlc1sga2V5IF07XG5cdFx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZSA9IGdlb21ldHJ5QXR0cmlidXRlc1sga2V5IF07XG5cblx0XHRcdGlmICggY2FjaGVkQXR0cmlidXRlID09PSB1bmRlZmluZWQgKSByZXR1cm4gdHJ1ZTtcblxuXHRcdFx0aWYgKCBjYWNoZWRBdHRyaWJ1dGUuYXR0cmlidXRlICE9PSBnZW9tZXRyeUF0dHJpYnV0ZSApIHJldHVybiB0cnVlO1xuXG5cdFx0XHRpZiAoIGNhY2hlZEF0dHJpYnV0ZS5kYXRhICE9PSBnZW9tZXRyeUF0dHJpYnV0ZS5kYXRhICkgcmV0dXJuIHRydWU7XG5cblx0XHRcdGF0dHJpYnV0ZXNOdW0gKys7XG5cblx0XHR9XG5cblx0XHRpZiAoIGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzTnVtICE9PSBhdHRyaWJ1dGVzTnVtICkgcmV0dXJuIHRydWU7XG5cblx0XHRpZiAoIGN1cnJlbnRTdGF0ZS5pbmRleCAhPT0gaW5kZXggKSByZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2F2ZUNhY2hlKCBnZW9tZXRyeSwgaW5kZXggKSB7XG5cblx0XHRjb25zdCBjYWNoZSA9IHt9O1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdGxldCBhdHRyaWJ1dGVzTnVtID0gMDtcblxuXHRcdGZvciAoIGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWyBrZXkgXTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0ZGF0YS5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7XG5cblx0XHRcdGlmICggYXR0cmlidXRlLmRhdGEgKSB7XG5cblx0XHRcdFx0ZGF0YS5kYXRhID0gYXR0cmlidXRlLmRhdGE7XG5cblx0XHRcdH1cblxuXHRcdFx0Y2FjaGVbIGtleSBdID0gZGF0YTtcblxuXHRcdFx0YXR0cmlidXRlc051bSArKztcblxuXHRcdH1cblxuXHRcdGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzID0gY2FjaGU7XG5cdFx0Y3VycmVudFN0YXRlLmF0dHJpYnV0ZXNOdW0gPSBhdHRyaWJ1dGVzTnVtO1xuXG5cdFx0Y3VycmVudFN0YXRlLmluZGV4ID0gaW5kZXg7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGluaXRBdHRyaWJ1dGVzKCkge1xuXG5cdFx0Y29uc3QgbmV3QXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5uZXdBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG5ld0F0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdG5ld0F0dHJpYnV0ZXNbIGkgXSA9IDA7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGVuYWJsZUF0dHJpYnV0ZSggYXR0cmlidXRlICkge1xuXG5cdFx0ZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvciggYXR0cmlidXRlLCAwICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIGF0dHJpYnV0ZSwgbWVzaFBlckF0dHJpYnV0ZSApIHtcblxuXHRcdGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUubmV3QXR0cmlidXRlcztcblx0XHRjb25zdCBlbmFibGVkQXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5lbmFibGVkQXR0cmlidXRlcztcblx0XHRjb25zdCBhdHRyaWJ1dGVEaXZpc29ycyA9IGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVEaXZpc29ycztcblxuXHRcdG5ld0F0dHJpYnV0ZXNbIGF0dHJpYnV0ZSBdID0gMTtcblxuXHRcdGlmICggZW5hYmxlZEF0dHJpYnV0ZXNbIGF0dHJpYnV0ZSBdID09PSAwICkge1xuXG5cdFx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSggYXR0cmlidXRlICk7XG5cdFx0XHRlbmFibGVkQXR0cmlidXRlc1sgYXR0cmlidXRlIF0gPSAxO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBhdHRyaWJ1dGVEaXZpc29yc1sgYXR0cmlidXRlIF0gIT09IG1lc2hQZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMiA/IGdsIDogZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApO1xuXG5cdFx0XHRleHRlbnNpb25bIGNhcGFiaWxpdGllcy5pc1dlYkdMMiA/ICd2ZXJ0ZXhBdHRyaWJEaXZpc29yJyA6ICd2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUnIF0oIGF0dHJpYnV0ZSwgbWVzaFBlckF0dHJpYnV0ZSApO1xuXHRcdFx0YXR0cmlidXRlRGl2aXNvcnNbIGF0dHJpYnV0ZSBdID0gbWVzaFBlckF0dHJpYnV0ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSB7XG5cblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLm5ld0F0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgZW5hYmxlZEF0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUuZW5hYmxlZEF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGlmICggZW5hYmxlZEF0dHJpYnV0ZXNbIGkgXSAhPT0gbmV3QXR0cmlidXRlc1sgaSBdICkge1xuXG5cdFx0XHRcdGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSggaSApO1xuXHRcdFx0XHRlbmFibGVkQXR0cmlidXRlc1sgaSBdID0gMDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB2ZXJ0ZXhBdHRyaWJQb2ludGVyKCBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZSAmJiAoIHR5cGUgPT09IDUxMjQgfHwgdHlwZSA9PT0gNTEyNSApICkge1xuXG5cdFx0XHRnbC52ZXJ0ZXhBdHRyaWJJUG9pbnRlciggaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgb2Zmc2V0ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBWZXJ0ZXhBdHRyaWJ1dGVzKCBvYmplY3QsIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSApIHtcblxuXHRcdGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSBmYWxzZSAmJiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggfHwgZ2VvbWV0cnkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSApICkge1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKSA9PT0gbnVsbCApIHJldHVybjtcblxuXHRcdH1cblxuXHRcdGluaXRBdHRyaWJ1dGVzKCk7XG5cblx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG5cdFx0Y29uc3QgcHJvZ3JhbUF0dHJpYnV0ZXMgPSBwcm9ncmFtLmdldEF0dHJpYnV0ZXMoKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyA9IG1hdGVyaWFsLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIHByb2dyYW1BdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBwcm9ncmFtQXR0cmlidXRlID0gcHJvZ3JhbUF0dHJpYnV0ZXNbIG5hbWUgXTtcblxuXHRcdFx0aWYgKCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uID49IDAgKSB7XG5cblx0XHRcdFx0bGV0IGdlb21ldHJ5QXR0cmlidXRlID0gZ2VvbWV0cnlBdHRyaWJ1dGVzWyBuYW1lIF07XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeUF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0aWYgKCBuYW1lID09PSAnaW5zdGFuY2VNYXRyaXgnICYmIG9iamVjdC5pbnN0YW5jZU1hdHJpeCApIGdlb21ldHJ5QXR0cmlidXRlID0gb2JqZWN0Lmluc3RhbmNlTWF0cml4O1xuXHRcdFx0XHRcdGlmICggbmFtZSA9PT0gJ2luc3RhbmNlQ29sb3InICYmIG9iamVjdC5pbnN0YW5jZUNvbG9yICkgZ2VvbWV0cnlBdHRyaWJ1dGUgPSBvYmplY3QuaW5zdGFuY2VDb2xvcjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeUF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGdlb21ldHJ5QXR0cmlidXRlLm5vcm1hbGl6ZWQ7XG5cdFx0XHRcdFx0Y29uc3Qgc2l6ZSA9IGdlb21ldHJ5QXR0cmlidXRlLml0ZW1TaXplO1xuXG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5QXR0cmlidXRlICk7XG5cblx0XHRcdFx0XHQvLyBUT0RPIEF0dHJpYnV0ZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBjb250ZXh0IHJlc3RvcmVcblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlID09PSB1bmRlZmluZWQgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IGJ1ZmZlciA9IGF0dHJpYnV0ZS5idWZmZXI7XG5cdFx0XHRcdFx0Y29uc3QgdHlwZSA9IGF0dHJpYnV0ZS50eXBlO1xuXHRcdFx0XHRcdGNvbnN0IGJ5dGVzUGVyRWxlbWVudCA9IGF0dHJpYnV0ZS5ieXRlc1BlckVsZW1lbnQ7XG5cblx0XHRcdFx0XHRpZiAoIGdlb21ldHJ5QXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSBnZW9tZXRyeUF0dHJpYnV0ZS5kYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWRlID0gZGF0YS5zdHJpZGU7XG5cdFx0XHRcdFx0XHRjb25zdCBvZmZzZXQgPSBnZW9tZXRyeUF0dHJpYnV0ZS5vZmZzZXQ7XG5cblx0XHRcdFx0XHRcdGlmICggZGF0YSAmJiBkYXRhLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSwgZGF0YS5tZXNoUGVyQXR0cmlidXRlICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICggb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAhPT0gdHJ1ZSAmJiBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Z2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgPSBkYXRhLm1lc2hQZXJBdHRyaWJ1dGUgKiBkYXRhLmNvdW50O1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGkgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Z2wuYmluZEJ1ZmZlciggMzQ5NjIsIGJ1ZmZlciApO1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHR2ZXJ0ZXhBdHRyaWJQb2ludGVyKFxuXHRcdFx0XHRcdFx0XHRcdHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpLFxuXHRcdFx0XHRcdFx0XHRcdHNpemUgLyBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZSxcblx0XHRcdFx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdFx0XHRcdG5vcm1hbGl6ZWQsXG5cdFx0XHRcdFx0XHRcdFx0c3RyaWRlICogYnl0ZXNQZXJFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcdCggb2Zmc2V0ICsgKCBzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUgKSAqIGkgKSAqIGJ5dGVzUGVyRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpZiAoIGdlb21ldHJ5QXR0cmlidXRlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvciggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksIGdlb21ldHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBvYmplY3QuaXNJbnN0YW5jZWRNZXNoICE9PSB0cnVlICYmIGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9IGdlb21ldHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUgKiBnZW9tZXRyeUF0dHJpYnV0ZS5jb3VudDtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGdsLmJpbmRCdWZmZXIoIDM0OTYyLCBidWZmZXIgKTtcblxuXHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmVydGV4QXR0cmliUG9pbnRlcihcblx0XHRcdFx0XHRcdFx0XHRwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSxcblx0XHRcdFx0XHRcdFx0XHRzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRcdFx0XHRub3JtYWxpemVkLFxuXHRcdFx0XHRcdFx0XHRcdHNpemUgKiBieXRlc1BlckVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdFx0KCBzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUgKSAqIGkgKiBieXRlc1BlckVsZW1lbnRcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBtYXRlcmlhbERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXNbIG5hbWUgXTtcblxuXHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0c3dpdGNoICggdmFsdWUubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRnbC52ZXJ0ZXhBdHRyaWIyZnYoIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24sIHZhbHVlICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjNmdiggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiwgdmFsdWUgKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliNGZ2KCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliMWZ2KCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRkaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0cmVzZXQoKTtcblxuXHRcdGZvciAoIGNvbnN0IGdlb21ldHJ5SWQgaW4gYmluZGluZ1N0YXRlcyApIHtcblxuXHRcdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5SWQgXTtcblxuXHRcdFx0Zm9yICggY29uc3QgcHJvZ3JhbUlkIGluIHByb2dyYW1NYXAgKSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhdGVNYXAgPSBwcm9ncmFtTWFwWyBwcm9ncmFtSWQgXTtcblxuXHRcdFx0XHRmb3IgKCBjb25zdCB3aXJlZnJhbWUgaW4gc3RhdGVNYXAgKSB7XG5cblx0XHRcdFx0XHRkZWxldGVWZXJ0ZXhBcnJheU9iamVjdCggc3RhdGVNYXBbIHdpcmVmcmFtZSBdLm9iamVjdCApO1xuXG5cdFx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwWyB3aXJlZnJhbWUgXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIHByb2dyYW1NYXBbIHByb2dyYW1JZCBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeUlkIF07XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KCBnZW9tZXRyeSApIHtcblxuXHRcdGlmICggYmluZGluZ1N0YXRlc1sgZ2VvbWV0cnkuaWQgXSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5LmlkIF07XG5cblx0XHRmb3IgKCBjb25zdCBwcm9ncmFtSWQgaW4gcHJvZ3JhbU1hcCApIHtcblxuXHRcdFx0Y29uc3Qgc3RhdGVNYXAgPSBwcm9ncmFtTWFwWyBwcm9ncmFtSWQgXTtcblxuXHRcdFx0Zm9yICggY29uc3Qgd2lyZWZyYW1lIGluIHN0YXRlTWFwICkge1xuXG5cdFx0XHRcdGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KCBzdGF0ZU1hcFsgd2lyZWZyYW1lIF0ub2JqZWN0ICk7XG5cblx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwWyB3aXJlZnJhbWUgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgcHJvZ3JhbU1hcFsgcHJvZ3JhbUlkIF07XG5cblx0XHR9XG5cblx0XHRkZWxldGUgYmluZGluZ1N0YXRlc1sgZ2VvbWV0cnkuaWQgXTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVsZWFzZVN0YXRlc09mUHJvZ3JhbSggcHJvZ3JhbSApIHtcblxuXHRcdGZvciAoIGNvbnN0IGdlb21ldHJ5SWQgaW4gYmluZGluZ1N0YXRlcyApIHtcblxuXHRcdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5SWQgXTtcblxuXHRcdFx0aWYgKCBwcm9ncmFtTWFwWyBwcm9ncmFtLmlkIF0gPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbIHByb2dyYW0uaWQgXTtcblxuXHRcdFx0Zm9yICggY29uc3Qgd2lyZWZyYW1lIGluIHN0YXRlTWFwICkge1xuXG5cdFx0XHRcdGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KCBzdGF0ZU1hcFsgd2lyZWZyYW1lIF0ub2JqZWN0ICk7XG5cblx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwWyB3aXJlZnJhbWUgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgcHJvZ3JhbU1hcFsgcHJvZ3JhbS5pZCBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZXNldCgpIHtcblxuXHRcdHJlc2V0RGVmYXVsdFN0YXRlKCk7XG5cblx0XHRpZiAoIGN1cnJlbnRTdGF0ZSA9PT0gZGVmYXVsdFN0YXRlICkgcmV0dXJuO1xuXG5cdFx0Y3VycmVudFN0YXRlID0gZGVmYXVsdFN0YXRlO1xuXHRcdGJpbmRWZXJ0ZXhBcnJheU9iamVjdCggY3VycmVudFN0YXRlLm9iamVjdCApO1xuXG5cdH1cblxuXHQvLyBmb3IgYmFja3dhcmQtY29tcGF0aWxpYml0eVxuXG5cdGZ1bmN0aW9uIHJlc2V0RGVmYXVsdFN0YXRlKCkge1xuXG5cdFx0ZGVmYXVsdFN0YXRlLmdlb21ldHJ5ID0gbnVsbDtcblx0XHRkZWZhdWx0U3RhdGUucHJvZ3JhbSA9IG51bGw7XG5cdFx0ZGVmYXVsdFN0YXRlLndpcmVmcmFtZSA9IGZhbHNlO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0c2V0dXA6IHNldHVwLFxuXHRcdHJlc2V0OiByZXNldCxcblx0XHRyZXNldERlZmF1bHRTdGF0ZTogcmVzZXREZWZhdWx0U3RhdGUsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZSxcblx0XHRyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTogcmVsZWFzZVN0YXRlc09mR2VvbWV0cnksXG5cdFx0cmVsZWFzZVN0YXRlc09mUHJvZ3JhbTogcmVsZWFzZVN0YXRlc09mUHJvZ3JhbSxcblxuXHRcdGluaXRBdHRyaWJ1dGVzOiBpbml0QXR0cmlidXRlcyxcblx0XHRlbmFibGVBdHRyaWJ1dGU6IGVuYWJsZUF0dHJpYnV0ZSxcblx0XHRkaXNhYmxlVW51c2VkQXR0cmlidXRlczogZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXNcblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQnVmZmVyUmVuZGVyZXIoIGdsLCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cblx0bGV0IG1vZGU7XG5cblx0ZnVuY3Rpb24gc2V0TW9kZSggdmFsdWUgKSB7XG5cblx0XHRtb2RlID0gdmFsdWU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlciggc3RhcnQsIGNvdW50ICkge1xuXG5cdFx0Z2wuZHJhd0FycmF5cyggbW9kZSwgc3RhcnQsIGNvdW50ICk7XG5cblx0XHRpbmZvLnVwZGF0ZSggY291bnQsIG1vZGUsIDEgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVySW5zdGFuY2VzKCBzdGFydCwgY291bnQsIHByaW1jb3VudCApIHtcblxuXHRcdGlmICggcHJpbWNvdW50ID09PSAwICkgcmV0dXJuO1xuXG5cdFx0bGV0IGV4dGVuc2lvbiwgbWV0aG9kTmFtZTtcblxuXHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGdsO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3QXJyYXlzSW5zdGFuY2VkJztcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTtcblx0XHRcdG1ldGhvZE5hbWUgPSAnZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFJztcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gPT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicgKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRleHRlbnNpb25bIG1ldGhvZE5hbWUgXSggbW9kZSwgc3RhcnQsIGNvdW50LCBwcmltY291bnQgKTtcblxuXHRcdGluZm8udXBkYXRlKCBjb3VudCwgbW9kZSwgcHJpbWNvdW50ICk7XG5cblx0fVxuXG5cdC8vXG5cblx0dGhpcy5zZXRNb2RlID0gc2V0TW9kZTtcblx0dGhpcy5yZW5kZXIgPSByZW5kZXI7XG5cdHRoaXMucmVuZGVySW5zdGFuY2VzID0gcmVuZGVySW5zdGFuY2VzO1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQ2FwYWJpbGl0aWVzKCBnbCwgZXh0ZW5zaW9ucywgcGFyYW1ldGVycyApIHtcblxuXHRsZXQgbWF4QW5pc290cm9weTtcblxuXHRmdW5jdGlvbiBnZXRNYXhBbmlzb3Ryb3B5KCkge1xuXG5cdFx0aWYgKCBtYXhBbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQgKSByZXR1cm4gbWF4QW5pc290cm9weTtcblxuXHRcdGlmICggZXh0ZW5zaW9ucy5oYXMoICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnICkgPT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApO1xuXG5cdFx0XHRtYXhBbmlzb3Ryb3B5ID0gZ2wuZ2V0UGFyYW1ldGVyKCBleHRlbnNpb24uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRtYXhBbmlzb3Ryb3B5ID0gMDtcblxuXHRcdH1cblxuXHRcdHJldHVybiBtYXhBbmlzb3Ryb3B5O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRNYXhQcmVjaXNpb24oIHByZWNpc2lvbiApIHtcblxuXHRcdGlmICggcHJlY2lzaW9uID09PSAnaGlnaHAnICkge1xuXG5cdFx0XHRpZiAoIGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCggMzU2MzMsIDM2MzM4ICkucHJlY2lzaW9uID4gMCAmJlxuXHRcdFx0XHRnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIDM1NjMyLCAzNjMzOCApLnByZWNpc2lvbiA+IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuICdoaWdocCc7XG5cblx0XHRcdH1cblxuXHRcdFx0cHJlY2lzaW9uID0gJ21lZGl1bXAnO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwcmVjaXNpb24gPT09ICdtZWRpdW1wJyApIHtcblxuXHRcdFx0aWYgKCBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIDM1NjMzLCAzNjMzNyApLnByZWNpc2lvbiA+IDAgJiZcblx0XHRcdFx0Z2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCAzNTYzMiwgMzYzMzcgKS5wcmVjaXNpb24gPiAwICkge1xuXG5cdFx0XHRcdHJldHVybiAnbWVkaXVtcCc7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiAnbG93cCc7XG5cblx0fVxuXG5cdGNvbnN0IGlzV2ViR0wyID0gKCB0eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2wgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0ICkgfHxcblx0XHQoIHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2wgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCApO1xuXG5cdGxldCBwcmVjaXNpb24gPSBwYXJhbWV0ZXJzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVjaXNpb24gOiAnaGlnaHAnO1xuXHRjb25zdCBtYXhQcmVjaXNpb24gPSBnZXRNYXhQcmVjaXNpb24oIHByZWNpc2lvbiApO1xuXG5cdGlmICggbWF4UHJlY2lzaW9uICE9PSBwcmVjaXNpb24gKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOicsIHByZWNpc2lvbiwgJ25vdCBzdXBwb3J0ZWQsIHVzaW5nJywgbWF4UHJlY2lzaW9uLCAnaW5zdGVhZC4nICk7XG5cdFx0cHJlY2lzaW9uID0gbWF4UHJlY2lzaW9uO1xuXG5cdH1cblxuXHRjb25zdCBkcmF3QnVmZmVycyA9IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfZHJhd19idWZmZXJzJyApO1xuXG5cdGNvbnN0IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPSBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPT09IHRydWU7XG5cblx0Y29uc3QgbWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM0OTMwICk7XG5cdGNvbnN0IG1heFZlcnRleFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNTY2MCApO1xuXHRjb25zdCBtYXhUZXh0dXJlU2l6ZSA9IGdsLmdldFBhcmFtZXRlciggMzM3OSApO1xuXHRjb25zdCBtYXhDdWJlbWFwU2l6ZSA9IGdsLmdldFBhcmFtZXRlciggMzQwNzYgKTtcblxuXHRjb25zdCBtYXhBdHRyaWJ1dGVzID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNDkyMSApO1xuXHRjb25zdCBtYXhWZXJ0ZXhVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlciggMzYzNDcgKTtcblx0Y29uc3QgbWF4VmFyeWluZ3MgPSBnbC5nZXRQYXJhbWV0ZXIoIDM2MzQ4ICk7XG5cdGNvbnN0IG1heEZyYWdtZW50VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM2MzQ5ICk7XG5cblx0Y29uc3QgdmVydGV4VGV4dHVyZXMgPSBtYXhWZXJ0ZXhUZXh0dXJlcyA+IDA7XG5cdGNvbnN0IGZsb2F0RnJhZ21lbnRUZXh0dXJlcyA9IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCAnT0VTX3RleHR1cmVfZmxvYXQnICk7XG5cdGNvbnN0IGZsb2F0VmVydGV4VGV4dHVyZXMgPSB2ZXJ0ZXhUZXh0dXJlcyAmJiBmbG9hdEZyYWdtZW50VGV4dHVyZXM7XG5cblx0Y29uc3QgbWF4U2FtcGxlcyA9IGlzV2ViR0wyID8gZ2wuZ2V0UGFyYW1ldGVyKCAzNjE4MyApIDogMDtcblxuXHRyZXR1cm4ge1xuXG5cdFx0aXNXZWJHTDI6IGlzV2ViR0wyLFxuXG5cdFx0ZHJhd0J1ZmZlcnM6IGRyYXdCdWZmZXJzLFxuXG5cdFx0Z2V0TWF4QW5pc290cm9weTogZ2V0TWF4QW5pc290cm9weSxcblx0XHRnZXRNYXhQcmVjaXNpb246IGdldE1heFByZWNpc2lvbixcblxuXHRcdHByZWNpc2lvbjogcHJlY2lzaW9uLFxuXHRcdGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIsXG5cblx0XHRtYXhUZXh0dXJlczogbWF4VGV4dHVyZXMsXG5cdFx0bWF4VmVydGV4VGV4dHVyZXM6IG1heFZlcnRleFRleHR1cmVzLFxuXHRcdG1heFRleHR1cmVTaXplOiBtYXhUZXh0dXJlU2l6ZSxcblx0XHRtYXhDdWJlbWFwU2l6ZTogbWF4Q3ViZW1hcFNpemUsXG5cblx0XHRtYXhBdHRyaWJ1dGVzOiBtYXhBdHRyaWJ1dGVzLFxuXHRcdG1heFZlcnRleFVuaWZvcm1zOiBtYXhWZXJ0ZXhVbmlmb3Jtcyxcblx0XHRtYXhWYXJ5aW5nczogbWF4VmFyeWluZ3MsXG5cdFx0bWF4RnJhZ21lbnRVbmlmb3JtczogbWF4RnJhZ21lbnRVbmlmb3JtcyxcblxuXHRcdHZlcnRleFRleHR1cmVzOiB2ZXJ0ZXhUZXh0dXJlcyxcblx0XHRmbG9hdEZyYWdtZW50VGV4dHVyZXM6IGZsb2F0RnJhZ21lbnRUZXh0dXJlcyxcblx0XHRmbG9hdFZlcnRleFRleHR1cmVzOiBmbG9hdFZlcnRleFRleHR1cmVzLFxuXG5cdFx0bWF4U2FtcGxlczogbWF4U2FtcGxlc1xuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xDbGlwcGluZyggcHJvcGVydGllcyApIHtcblxuXHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0bGV0IGdsb2JhbFN0YXRlID0gbnVsbCxcblx0XHRudW1HbG9iYWxQbGFuZXMgPSAwLFxuXHRcdGxvY2FsQ2xpcHBpbmdFbmFibGVkID0gZmFsc2UsXG5cdFx0cmVuZGVyaW5nU2hhZG93cyA9IGZhbHNlO1xuXG5cdGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKCksXG5cdFx0dmlld05vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCksXG5cblx0XHR1bmlmb3JtID0geyB2YWx1ZTogbnVsbCwgbmVlZHNVcGRhdGU6IGZhbHNlIH07XG5cblx0dGhpcy51bmlmb3JtID0gdW5pZm9ybTtcblx0dGhpcy5udW1QbGFuZXMgPSAwO1xuXHR0aGlzLm51bUludGVyc2VjdGlvbiA9IDA7XG5cblx0dGhpcy5pbml0ID0gZnVuY3Rpb24gKCBwbGFuZXMsIGVuYWJsZUxvY2FsQ2xpcHBpbmcsIGNhbWVyYSApIHtcblxuXHRcdGNvbnN0IGVuYWJsZWQgPVxuXHRcdFx0cGxhbmVzLmxlbmd0aCAhPT0gMCB8fFxuXHRcdFx0ZW5hYmxlTG9jYWxDbGlwcGluZyB8fFxuXHRcdFx0Ly8gZW5hYmxlIHN0YXRlIG9mIHByZXZpb3VzIGZyYW1lIC0gdGhlIGNsaXBwaW5nIGNvZGUgaGFzIHRvXG5cdFx0XHQvLyBydW4gYW5vdGhlciBmcmFtZSBpbiBvcmRlciB0byByZXNldCB0aGUgc3RhdGU6XG5cdFx0XHRudW1HbG9iYWxQbGFuZXMgIT09IDAgfHxcblx0XHRcdGxvY2FsQ2xpcHBpbmdFbmFibGVkO1xuXG5cdFx0bG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBlbmFibGVMb2NhbENsaXBwaW5nO1xuXG5cdFx0Z2xvYmFsU3RhdGUgPSBwcm9qZWN0UGxhbmVzKCBwbGFuZXMsIGNhbWVyYSwgMCApO1xuXHRcdG51bUdsb2JhbFBsYW5lcyA9IHBsYW5lcy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gZW5hYmxlZDtcblxuXHR9O1xuXG5cdHRoaXMuYmVnaW5TaGFkb3dzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmVuZGVyaW5nU2hhZG93cyA9IHRydWU7XG5cdFx0cHJvamVjdFBsYW5lcyggbnVsbCApO1xuXG5cdH07XG5cblx0dGhpcy5lbmRTaGFkb3dzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmVuZGVyaW5nU2hhZG93cyA9IGZhbHNlO1xuXHRcdHJlc2V0R2xvYmFsU3RhdGUoKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0U3RhdGUgPSBmdW5jdGlvbiAoIG1hdGVyaWFsLCBjYW1lcmEsIHVzZUNhY2hlICkge1xuXG5cdFx0Y29uc3QgcGxhbmVzID0gbWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXMsXG5cdFx0XHRjbGlwSW50ZXJzZWN0aW9uID0gbWF0ZXJpYWwuY2xpcEludGVyc2VjdGlvbixcblx0XHRcdGNsaXBTaGFkb3dzID0gbWF0ZXJpYWwuY2xpcFNoYWRvd3M7XG5cblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTtcblxuXHRcdGlmICggISBsb2NhbENsaXBwaW5nRW5hYmxlZCB8fCBwbGFuZXMgPT09IG51bGwgfHwgcGxhbmVzLmxlbmd0aCA9PT0gMCB8fCByZW5kZXJpbmdTaGFkb3dzICYmICEgY2xpcFNoYWRvd3MgKSB7XG5cblx0XHRcdC8vIHRoZXJlJ3Mgbm8gbG9jYWwgY2xpcHBpbmdcblxuXHRcdFx0aWYgKCByZW5kZXJpbmdTaGFkb3dzICkge1xuXG5cdFx0XHRcdC8vIHRoZXJlJ3Mgbm8gZ2xvYmFsIGNsaXBwaW5nXG5cblx0XHRcdFx0cHJvamVjdFBsYW5lcyggbnVsbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJlc2V0R2xvYmFsU3RhdGUoKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3Qgbkdsb2JhbCA9IHJlbmRlcmluZ1NoYWRvd3MgPyAwIDogbnVtR2xvYmFsUGxhbmVzLFxuXHRcdFx0XHRsR2xvYmFsID0gbkdsb2JhbCAqIDQ7XG5cblx0XHRcdGxldCBkc3RBcnJheSA9IG1hdGVyaWFsUHJvcGVydGllcy5jbGlwcGluZ1N0YXRlIHx8IG51bGw7XG5cblx0XHRcdHVuaWZvcm0udmFsdWUgPSBkc3RBcnJheTsgLy8gZW5zdXJlIHVuaXF1ZSBzdGF0ZVxuXG5cdFx0XHRkc3RBcnJheSA9IHByb2plY3RQbGFuZXMoIHBsYW5lcywgY2FtZXJhLCBsR2xvYmFsLCB1c2VDYWNoZSApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IGxHbG9iYWw7ICsrIGkgKSB7XG5cblx0XHRcdFx0ZHN0QXJyYXlbIGkgXSA9IGdsb2JhbFN0YXRlWyBpIF07XG5cblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmNsaXBwaW5nU3RhdGUgPSBkc3RBcnJheTtcblx0XHRcdHRoaXMubnVtSW50ZXJzZWN0aW9uID0gY2xpcEludGVyc2VjdGlvbiA/IHRoaXMubnVtUGxhbmVzIDogMDtcblx0XHRcdHRoaXMubnVtUGxhbmVzICs9IG5HbG9iYWw7XG5cblx0XHR9XG5cblxuXHR9O1xuXG5cdGZ1bmN0aW9uIHJlc2V0R2xvYmFsU3RhdGUoKSB7XG5cblx0XHRpZiAoIHVuaWZvcm0udmFsdWUgIT09IGdsb2JhbFN0YXRlICkge1xuXG5cdFx0XHR1bmlmb3JtLnZhbHVlID0gZ2xvYmFsU3RhdGU7XG5cdFx0XHR1bmlmb3JtLm5lZWRzVXBkYXRlID0gbnVtR2xvYmFsUGxhbmVzID4gMDtcblxuXHRcdH1cblxuXHRcdHNjb3BlLm51bVBsYW5lcyA9IG51bUdsb2JhbFBsYW5lcztcblx0XHRzY29wZS5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBwcm9qZWN0UGxhbmVzKCBwbGFuZXMsIGNhbWVyYSwgZHN0T2Zmc2V0LCBza2lwVHJhbnNmb3JtICkge1xuXG5cdFx0Y29uc3QgblBsYW5lcyA9IHBsYW5lcyAhPT0gbnVsbCA/IHBsYW5lcy5sZW5ndGggOiAwO1xuXHRcdGxldCBkc3RBcnJheSA9IG51bGw7XG5cblx0XHRpZiAoIG5QbGFuZXMgIT09IDAgKSB7XG5cblx0XHRcdGRzdEFycmF5ID0gdW5pZm9ybS52YWx1ZTtcblxuXHRcdFx0aWYgKCBza2lwVHJhbnNmb3JtICE9PSB0cnVlIHx8IGRzdEFycmF5ID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IGZsYXRTaXplID0gZHN0T2Zmc2V0ICsgblBsYW5lcyAqIDQsXG5cdFx0XHRcdFx0dmlld01hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2U7XG5cblx0XHRcdFx0dmlld05vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoIHZpZXdNYXRyaXggKTtcblxuXHRcdFx0XHRpZiAoIGRzdEFycmF5ID09PSBudWxsIHx8IGRzdEFycmF5Lmxlbmd0aCA8IGZsYXRTaXplICkge1xuXG5cdFx0XHRcdFx0ZHN0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KCBmbGF0U2l6ZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGk0ID0gZHN0T2Zmc2V0OyBpICE9PSBuUGxhbmVzOyArKyBpLCBpNCArPSA0ICkge1xuXG5cdFx0XHRcdFx0cGxhbmUuY29weSggcGxhbmVzWyBpIF0gKS5hcHBseU1hdHJpeDQoIHZpZXdNYXRyaXgsIHZpZXdOb3JtYWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdHBsYW5lLm5vcm1hbC50b0FycmF5KCBkc3RBcnJheSwgaTQgKTtcblx0XHRcdFx0XHRkc3RBcnJheVsgaTQgKyAzIF0gPSBwbGFuZS5jb25zdGFudDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybS52YWx1ZSA9IGRzdEFycmF5O1xuXHRcdFx0dW5pZm9ybS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRzY29wZS5udW1QbGFuZXMgPSBuUGxhbmVzO1xuXHRcdHNjb3BlLm51bUludGVyc2VjdGlvbiA9IDA7XG5cblx0XHRyZXR1cm4gZHN0QXJyYXk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQ3ViZU1hcHMoIHJlbmRlcmVyICkge1xuXG5cdGxldCBjdWJlbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gbWFwVGV4dHVyZU1hcHBpbmcoIHRleHR1cmUsIG1hcHBpbmcgKSB7XG5cblx0XHRpZiAoIG1hcHBpbmcgPT09IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nICkge1xuXG5cdFx0XHR0ZXh0dXJlLm1hcHBpbmcgPSBDdWJlUmVmbGVjdGlvbk1hcHBpbmc7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZyApIHtcblxuXHRcdFx0dGV4dHVyZS5tYXBwaW5nID0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldCggdGV4dHVyZSApIHtcblxuXHRcdGlmICggdGV4dHVyZSAmJiB0ZXh0dXJlLmlzVGV4dHVyZSAmJiB0ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0ZXh0dXJlLm1hcHBpbmc7XG5cblx0XHRcdGlmICggbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcgKSB7XG5cblx0XHRcdFx0aWYgKCBjdWJlbWFwcy5oYXMoIHRleHR1cmUgKSApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGN1YmVtYXAgPSBjdWJlbWFwcy5nZXQoIHRleHR1cmUgKS50ZXh0dXJlO1xuXHRcdFx0XHRcdHJldHVybiBtYXBUZXh0dXJlTWFwcGluZyggY3ViZW1hcCwgdGV4dHVyZS5tYXBwaW5nICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdGlmICggaW1hZ2UgJiYgaW1hZ2UuaGVpZ2h0ID4gMCApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggaW1hZ2UuaGVpZ2h0IC8gMiApO1xuXHRcdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKCByZW5kZXJlciwgdGV4dHVyZSApO1xuXHRcdFx0XHRcdFx0Y3ViZW1hcHMuc2V0KCB0ZXh0dXJlLCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0XHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIG1hcFRleHR1cmVNYXBwaW5nKCByZW5kZXJUYXJnZXQudGV4dHVyZSwgdGV4dHVyZS5tYXBwaW5nICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBpbWFnZSBub3QgeWV0IHJlYWR5LiB0cnkgdGhlIGNvbnZlcnNpb24gbmV4dCBmcmFtZVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSBldmVudC50YXJnZXQ7XG5cblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApO1xuXG5cdFx0Y29uc3QgY3ViZW1hcCA9IGN1YmVtYXBzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0aWYgKCBjdWJlbWFwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGN1YmVtYXBzLmRlbGV0ZSggdGV4dHVyZSApO1xuXHRcdFx0Y3ViZW1hcC5kaXNwb3NlKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cblx0XHRjdWJlbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xuXG59XG5cbmNsYXNzIE9ydGhvZ3JhcGhpY0NhbWVyYSBleHRlbmRzIENhbWVyYSB7XG5cblx0Y29uc3RydWN0b3IoIGxlZnQgPSAtIDEsIHJpZ2h0ID0gMSwgdG9wID0gMSwgYm90dG9tID0gLSAxLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdPcnRob2dyYXBoaWNDYW1lcmEnO1xuXG5cdFx0dGhpcy56b29tID0gMTtcblx0XHR0aGlzLnZpZXcgPSBudWxsO1xuXG5cdFx0dGhpcy5sZWZ0ID0gbGVmdDtcblx0XHR0aGlzLnJpZ2h0ID0gcmlnaHQ7XG5cdFx0dGhpcy50b3AgPSB0b3A7XG5cdFx0dGhpcy5ib3R0b20gPSBib3R0b207XG5cblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xuXHRcdHRoaXMuZmFyID0gZmFyO1xuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlLCByZWN1cnNpdmUgKTtcblxuXHRcdHRoaXMubGVmdCA9IHNvdXJjZS5sZWZ0O1xuXHRcdHRoaXMucmlnaHQgPSBzb3VyY2UucmlnaHQ7XG5cdFx0dGhpcy50b3AgPSBzb3VyY2UudG9wO1xuXHRcdHRoaXMuYm90dG9tID0gc291cmNlLmJvdHRvbTtcblx0XHR0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjtcblx0XHR0aGlzLmZhciA9IHNvdXJjZS5mYXI7XG5cblx0XHR0aGlzLnpvb20gPSBzb3VyY2Uuem9vbTtcblx0XHR0aGlzLnZpZXcgPSBzb3VyY2UudmlldyA9PT0gbnVsbCA/IG51bGwgOiBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLnZpZXcgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG5cblx0XHRpZiAoIHRoaXMudmlldyA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy52aWV3ID0ge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRmdWxsV2lkdGg6IDEsXG5cdFx0XHRcdGZ1bGxIZWlnaHQ6IDEsXG5cdFx0XHRcdG9mZnNldFg6IDAsXG5cdFx0XHRcdG9mZnNldFk6IDAsXG5cdFx0XHRcdHdpZHRoOiAxLFxuXHRcdFx0XHRoZWlnaHQ6IDFcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1bGxXaWR0aDtcblx0XHR0aGlzLnZpZXcuZnVsbEhlaWdodCA9IGZ1bGxIZWlnaHQ7XG5cdFx0dGhpcy52aWV3Lm9mZnNldFggPSB4O1xuXHRcdHRoaXMudmlldy5vZmZzZXRZID0geTtcblx0XHR0aGlzLnZpZXcud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLnZpZXcuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdGNsZWFyVmlld09mZnNldCgpIHtcblxuXHRcdGlmICggdGhpcy52aWV3ICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0fVxuXG5cdHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XG5cblx0XHRjb25zdCBkeCA9ICggdGhpcy5yaWdodCAtIHRoaXMubGVmdCApIC8gKCAyICogdGhpcy56b29tICk7XG5cdFx0Y29uc3QgZHkgPSAoIHRoaXMudG9wIC0gdGhpcy5ib3R0b20gKSAvICggMiAqIHRoaXMuem9vbSApO1xuXHRcdGNvbnN0IGN4ID0gKCB0aGlzLnJpZ2h0ICsgdGhpcy5sZWZ0ICkgLyAyO1xuXHRcdGNvbnN0IGN5ID0gKCB0aGlzLnRvcCArIHRoaXMuYm90dG9tICkgLyAyO1xuXG5cdFx0bGV0IGxlZnQgPSBjeCAtIGR4O1xuXHRcdGxldCByaWdodCA9IGN4ICsgZHg7XG5cdFx0bGV0IHRvcCA9IGN5ICsgZHk7XG5cdFx0bGV0IGJvdHRvbSA9IGN5IC0gZHk7XG5cblx0XHRpZiAoIHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlzLnZpZXcuZW5hYmxlZCApIHtcblxuXHRcdFx0Y29uc3Qgc2NhbGVXID0gKCB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0ICkgLyB0aGlzLnZpZXcuZnVsbFdpZHRoIC8gdGhpcy56b29tO1xuXHRcdFx0Y29uc3Qgc2NhbGVIID0gKCB0aGlzLnRvcCAtIHRoaXMuYm90dG9tICkgLyB0aGlzLnZpZXcuZnVsbEhlaWdodCAvIHRoaXMuem9vbTtcblxuXHRcdFx0bGVmdCArPSBzY2FsZVcgKiB0aGlzLnZpZXcub2Zmc2V0WDtcblx0XHRcdHJpZ2h0ID0gbGVmdCArIHNjYWxlVyAqIHRoaXMudmlldy53aWR0aDtcblx0XHRcdHRvcCAtPSBzY2FsZUggKiB0aGlzLnZpZXcub2Zmc2V0WTtcblx0XHRcdGJvdHRvbSA9IHRvcCAtIHNjYWxlSCAqIHRoaXMudmlldy5oZWlnaHQ7XG5cblx0XHR9XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0aGlzLm5lYXIsIHRoaXMuZmFyICk7XG5cblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkoIHRoaXMucHJvamVjdGlvbk1hdHJpeCApLmludmVydCgpO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRkYXRhLm9iamVjdC56b29tID0gdGhpcy56b29tO1xuXHRcdGRhdGEub2JqZWN0LmxlZnQgPSB0aGlzLmxlZnQ7XG5cdFx0ZGF0YS5vYmplY3QucmlnaHQgPSB0aGlzLnJpZ2h0O1xuXHRcdGRhdGEub2JqZWN0LnRvcCA9IHRoaXMudG9wO1xuXHRcdGRhdGEub2JqZWN0LmJvdHRvbSA9IHRoaXMuYm90dG9tO1xuXHRcdGRhdGEub2JqZWN0Lm5lYXIgPSB0aGlzLm5lYXI7XG5cdFx0ZGF0YS5vYmplY3QuZmFyID0gdGhpcy5mYXI7XG5cblx0XHRpZiAoIHRoaXMudmlldyAhPT0gbnVsbCApIGRhdGEub2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgdGhpcy52aWV3ICk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuT3J0aG9ncmFwaGljQ2FtZXJhLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYSA9IHRydWU7XG5cbmNsYXNzIFJhd1NoYWRlck1hdGVyaWFsIGV4dGVuZHMgU2hhZGVyTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoIHBhcmFtZXRlcnMgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdSYXdTaGFkZXJNYXRlcmlhbCc7XG5cblx0fVxuXG59XG5cblJhd1NoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgTE9EX01JTiA9IDQ7XG5jb25zdCBMT0RfTUFYID0gODtcbmNvbnN0IFNJWkVfTUFYID0gTWF0aC5wb3coIDIsIExPRF9NQVggKTtcblxuLy8gVGhlIHN0YW5kYXJkIGRldmlhdGlvbnMgKHJhZGlhbnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXh0cmEgbWlwcy4gVGhlc2UgYXJlXG4vLyBjaG9zZW4gdG8gYXBwcm94aW1hdGUgYSBUcm93YnJpZGdlLVJlaXR6IGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiB0aW1lcyB0aGVcbi8vIGdlb21ldHJpYyBzaGFkb3dpbmcgZnVuY3Rpb24uIFRoZXNlIHNpZ21hIHZhbHVlcyBzcXVhcmVkIG11c3QgbWF0Y2ggdGhlXG4vLyB2YXJpYW5jZSAjZGVmaW5lcyBpbiBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQuZ2xzbC5qcy5cbmNvbnN0IEVYVFJBX0xPRF9TSUdNQSA9IFsgMC4xMjUsIDAuMjE1LCAwLjM1LCAwLjQ0NiwgMC41MjYsIDAuNTgyIF07XG5cbmNvbnN0IFRPVEFMX0xPRFMgPSBMT0RfTUFYIC0gTE9EX01JTiArIDEgKyBFWFRSQV9MT0RfU0lHTUEubGVuZ3RoO1xuXG4vLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGJsdXIgZm9yIGxvb3AuIFNtYWxsZXIgc2lnbWFzIHdpbGwgdXNlIGZld2VyXG4vLyBzYW1wbGVzIGFuZCBleGl0IGVhcmx5LCBidXQgbm90IHJlY29tcGlsZSB0aGUgc2hhZGVyLlxuY29uc3QgTUFYX1NBTVBMRVMgPSAyMDtcblxuY29uc3QgX2ZsYXRDYW1lcmEgPSAvKkBfX1BVUkVfXyovIG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoKTtcbmNvbnN0IHsgX2xvZFBsYW5lcywgX3NpemVMb2RzLCBfc2lnbWFzIH0gPSAvKkBfX1BVUkVfXyovIF9jcmVhdGVQbGFuZXMoKTtcbmNvbnN0IF9jbGVhckNvbG9yID0gLypAX19QVVJFX18qLyBuZXcgQ29sb3IoKTtcbmxldCBfb2xkVGFyZ2V0ID0gbnVsbDtcblxuLy8gR29sZGVuIFJhdGlvXG5jb25zdCBQSEkgPSAoIDEgKyBNYXRoLnNxcnQoIDUgKSApIC8gMjtcbmNvbnN0IElOVl9QSEkgPSAxIC8gUEhJO1xuXG4vLyBWZXJ0aWNlcyBvZiBhIGRvZGVjYWhlZHJvbiAoZXhjZXB0IHRoZSBvcHBvc2l0ZXMsIHdoaWNoIHJlcHJlc2VudCB0aGVcbi8vIHNhbWUgYXhpcyksIHVzZWQgYXMgYXhpcyBkaXJlY3Rpb25zIGV2ZW5seSBzcHJlYWQgb24gYSBzcGhlcmUuXG5jb25zdCBfYXhpc0RpcmVjdGlvbnMgPSBbXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIDEsIDEsIDEgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggLSAxLCAxLCAxICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIDEsIDEsIC0gMSApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAtIDEsIDEsIC0gMSApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAwLCBQSEksIElOVl9QSEkgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMCwgUEhJLCAtIElOVl9QSEkgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggSU5WX1BISSwgMCwgUEhJICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIC0gSU5WX1BISSwgMCwgUEhJICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIFBISSwgSU5WX1BISSwgMCApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAtIFBISSwgSU5WX1BISSwgMCApIF07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBnZW5lcmF0ZXMgYSBQcmVmaWx0ZXJlZCwgTWlwbWFwcGVkIFJhZGlhbmNlIEVudmlyb25tZW50IE1hcFxuICogKFBNUkVNKSBmcm9tIGEgY3ViZU1hcCBlbnZpcm9ubWVudCB0ZXh0dXJlLiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgbGV2ZWxzIG9mXG4gKiBibHVyIHRvIGJlIHF1aWNrbHkgYWNjZXNzZWQgYmFzZWQgb24gbWF0ZXJpYWwgcm91Z2huZXNzLiBJdCBpcyBwYWNrZWQgaW50byBhXG4gKiBzcGVjaWFsIEN1YmVVViBmb3JtYXQgdGhhdCBhbGxvd3MgdXMgdG8gcGVyZm9ybSBjdXN0b20gaW50ZXJwb2xhdGlvbiBzbyB0aGF0XG4gKiB3ZSBjYW4gc3VwcG9ydCBub25saW5lYXIgZm9ybWF0cyBzdWNoIGFzIFJHQkUuIFVubGlrZSBhIHRyYWRpdGlvbmFsIG1pcG1hcFxuICogY2hhaW4sIGl0IG9ubHkgZ29lcyBkb3duIHRvIHRoZSBMT0RfTUlOIGxldmVsIChhYm92ZSksIGFuZCB0aGVuIGNyZWF0ZXMgZXh0cmFcbiAqIGV2ZW4gbW9yZSBmaWx0ZXJlZCAnbWlwcycgYXQgdGhlIHNhbWUgTE9EX01JTiByZXNvbHV0aW9uLCBhc3NvY2lhdGVkIHdpdGhcbiAqIGhpZ2hlciByb3VnaG5lc3MgbGV2ZWxzLiBJbiB0aGlzIHdheSB3ZSBtYWludGFpbiByZXNvbHV0aW9uIHRvIHNtb290aGx5XG4gKiBpbnRlcnBvbGF0ZSBkaWZmdXNlIGxpZ2h0aW5nIHdoaWxlIGxpbWl0aW5nIHNhbXBsaW5nIGNvbXB1dGF0aW9uLlxuICpcbiAqIFBhcGVyOiBGYXN0LCBBY2N1cmF0ZSBJbWFnZS1CYXNlZCBMaWdodGluZ1xuICogaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xNXk4cl9VcEtsVTlTdlY0SUxiMEMzcUNQZWNTOHB2THovdmlld1xuKi9cblxuY2xhc3MgUE1SRU1HZW5lcmF0b3Ige1xuXG5cdGNvbnN0cnVjdG9yKCByZW5kZXJlciApIHtcblxuXHRcdHRoaXMuX3JlbmRlcmVyID0gcmVuZGVyZXI7XG5cdFx0dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQgPSBudWxsO1xuXG5cdFx0dGhpcy5fYmx1ck1hdGVyaWFsID0gX2dldEJsdXJTaGFkZXIoIE1BWF9TQU1QTEVTICk7XG5cdFx0dGhpcy5fZXF1aXJlY3RTaGFkZXIgPSBudWxsO1xuXHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIgPSBudWxsO1xuXG5cdFx0dGhpcy5fY29tcGlsZU1hdGVyaWFsKCB0aGlzLl9ibHVyTWF0ZXJpYWwgKTtcblxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYSBzdXBwbGllZCBTY2VuZSwgd2hpY2ggY2FuIGJlIGZhc3RlciB0aGFuIHVzaW5nIGFuXG5cdCAqIGltYWdlIGlmIG5ldHdvcmtpbmcgYmFuZHdpZHRoIGlzIGxvdy4gT3B0aW9uYWwgc2lnbWEgc3BlY2lmaWVzIGEgYmx1ciByYWRpdXNcblx0ICogaW4gcmFkaWFucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzY2VuZSBiZWZvcmUgUE1SRU0gZ2VuZXJhdGlvbi4gT3B0aW9uYWwgbmVhclxuXHQgKiBhbmQgZmFyIHBsYW5lcyBlbnN1cmUgdGhlIHNjZW5lIGlzIHJlbmRlcmVkIGluIGl0cyBlbnRpcmV0eSAodGhlIGN1YmVDYW1lcmFcblx0ICogaXMgcGxhY2VkIGF0IHRoZSBvcmlnaW4pLlxuXHQgKi9cblx0ZnJvbVNjZW5lKCBzY2VuZSwgc2lnbWEgPSAwLCBuZWFyID0gMC4xLCBmYXIgPSAxMDAgKSB7XG5cblx0XHRfb2xkVGFyZ2V0ID0gdGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cdFx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gdGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7XG5cblx0XHR0aGlzLl9zY2VuZVRvQ3ViZVVWKCBzY2VuZSwgbmVhciwgZmFyLCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblx0XHRpZiAoIHNpZ21hID4gMCApIHtcblxuXHRcdFx0dGhpcy5fYmx1ciggY3ViZVVWUmVuZGVyVGFyZ2V0LCAwLCAwLCBzaWdtYSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fYXBwbHlQTVJFTSggY3ViZVVWUmVuZGVyVGFyZ2V0ICk7XG5cdFx0dGhpcy5fY2xlYW51cCggY3ViZVVWUmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRyZXR1cm4gY3ViZVVWUmVuZGVyVGFyZ2V0O1xuXG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIGEgUE1SRU0gZnJvbSBhbiBlcXVpcmVjdGFuZ3VsYXIgdGV4dHVyZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBMRFJcblx0ICogb3IgSERSLiBUaGUgaWRlYWwgaW5wdXQgaW1hZ2Ugc2l6ZSBpcyAxayAoMTAyNCB4IDUxMiksXG5cdCAqIGFzIHRoaXMgbWF0Y2hlcyBiZXN0IHdpdGggdGhlIDI1NiB4IDI1NiBjdWJlbWFwIG91dHB1dC5cblx0ICovXG5cdGZyb21FcXVpcmVjdGFuZ3VsYXIoIGVxdWlyZWN0YW5ndWxhciwgcmVuZGVyVGFyZ2V0ID0gbnVsbCApIHtcblxuXHRcdHJldHVybiB0aGlzLl9mcm9tVGV4dHVyZSggZXF1aXJlY3Rhbmd1bGFyLCByZW5kZXJUYXJnZXQgKTtcblxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYW4gY3ViZW1hcCB0ZXh0dXJlLCB3aGljaCBjYW4gYmUgZWl0aGVyIExEUlxuXHQgKiBvciBIRFIuIFRoZSBpZGVhbCBpbnB1dCBjdWJlIHNpemUgaXMgMjU2IHggMjU2LFxuXHQgKiBhcyB0aGlzIG1hdGNoZXMgYmVzdCB3aXRoIHRoZSAyNTYgeCAyNTYgY3ViZW1hcCBvdXRwdXQuXG5cdCAqL1xuXHRmcm9tQ3ViZW1hcCggY3ViZW1hcCwgcmVuZGVyVGFyZ2V0ID0gbnVsbCApIHtcblxuXHRcdHJldHVybiB0aGlzLl9mcm9tVGV4dHVyZSggY3ViZW1hcCwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBQcmUtY29tcGlsZXMgdGhlIGN1YmVtYXAgc2hhZGVyLiBZb3UgY2FuIGdldCBmYXN0ZXIgc3RhcnQtdXAgYnkgaW52b2tpbmcgdGhpcyBtZXRob2QgZHVyaW5nXG5cdCAqIHlvdXIgdGV4dHVyZSdzIG5ldHdvcmsgZmV0Y2ggZm9yIGluY3JlYXNlZCBjb25jdXJyZW5jeS5cblx0ICovXG5cdGNvbXBpbGVDdWJlbWFwU2hhZGVyKCkge1xuXG5cdFx0aWYgKCB0aGlzLl9jdWJlbWFwU2hhZGVyID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyID0gX2dldEN1YmVtYXBTaGFkZXIoKTtcblx0XHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCggdGhpcy5fY3ViZW1hcFNoYWRlciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogUHJlLWNvbXBpbGVzIHRoZSBlcXVpcmVjdGFuZ3VsYXIgc2hhZGVyLiBZb3UgY2FuIGdldCBmYXN0ZXIgc3RhcnQtdXAgYnkgaW52b2tpbmcgdGhpcyBtZXRob2QgZHVyaW5nXG5cdCAqIHlvdXIgdGV4dHVyZSdzIG5ldHdvcmsgZmV0Y2ggZm9yIGluY3JlYXNlZCBjb25jdXJyZW5jeS5cblx0ICovXG5cdGNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKSB7XG5cblx0XHRpZiAoIHRoaXMuX2VxdWlyZWN0U2hhZGVyID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9lcXVpcmVjdFNoYWRlciA9IF9nZXRFcXVpcmVjdFNoYWRlcigpO1xuXHRcdFx0dGhpcy5fY29tcGlsZU1hdGVyaWFsKCB0aGlzLl9lcXVpcmVjdFNoYWRlciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogRGlzcG9zZXMgb2YgdGhlIFBNUkVNR2VuZXJhdG9yJ3MgaW50ZXJuYWwgbWVtb3J5LiBOb3RlIHRoYXQgUE1SRU1HZW5lcmF0b3IgaXMgYSBzdGF0aWMgY2xhc3MsXG5cdCAqIHNvIHlvdSBzaG91bGQgbm90IG5lZWQgbW9yZSB0aGFuIG9uZSBQTVJFTUdlbmVyYXRvciBvYmplY3QuIElmIHlvdSBkbywgY2FsbGluZyBkaXNwb3NlKCkgb25cblx0ICogb25lIG9mIHRoZW0gd2lsbCBjYXVzZSBhbnkgb3RoZXJzIHRvIGFsc28gYmVjb21lIHVudXNhYmxlLlxuXHQgKi9cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCk7XG5cblx0XHRpZiAoIHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ICE9PSBudWxsICkgdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuXG5cdFx0aWYgKCB0aGlzLl9jdWJlbWFwU2hhZGVyICE9PSBudWxsICkgdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCk7XG5cdFx0aWYgKCB0aGlzLl9lcXVpcmVjdFNoYWRlciAhPT0gbnVsbCApIHRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IF9sb2RQbGFuZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRfbG9kUGxhbmVzWyBpIF0uZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBwcml2YXRlIGludGVyZmFjZVxuXG5cdF9jbGVhbnVwKCBvdXRwdXRUYXJnZXQgKSB7XG5cblx0XHR0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIF9vbGRUYXJnZXQgKTtcblx0XHRvdXRwdXRUYXJnZXQuc2Npc3NvclRlc3QgPSBmYWxzZTtcblx0XHRfc2V0Vmlld3BvcnQoIG91dHB1dFRhcmdldCwgMCwgMCwgb3V0cHV0VGFyZ2V0LndpZHRoLCBvdXRwdXRUYXJnZXQuaGVpZ2h0ICk7XG5cblx0fVxuXG5cdF9mcm9tVGV4dHVyZSggdGV4dHVyZSwgcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0X29sZFRhcmdldCA9IHRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldCB8fCB0aGlzLl9hbGxvY2F0ZVRhcmdldHMoIHRleHR1cmUgKTtcblx0XHR0aGlzLl90ZXh0dXJlVG9DdWJlVVYoIHRleHR1cmUsIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXHRcdHRoaXMuX2FwcGx5UE1SRU0oIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXHRcdHRoaXMuX2NsZWFudXAoIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXG5cdFx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblxuXHR9XG5cblx0X2FsbG9jYXRlVGFyZ2V0cyggdGV4dHVyZSApIHsgLy8gd2FybmluZzogbnVsbCB0ZXh0dXJlIGlzIHZhbGlkXG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiBmYWxzZSxcblx0XHRcdHR5cGU6IEhhbGZGbG9hdFR5cGUsXG5cdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRlbmNvZGluZzogTGluZWFyRW5jb2RpbmcsXG5cdFx0XHRkZXB0aEJ1ZmZlcjogZmFsc2Vcblx0XHR9O1xuXG5cdFx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gX2NyZWF0ZVJlbmRlclRhcmdldCggcGFyYW1zICk7XG5cdFx0Y3ViZVVWUmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyID0gdGV4dHVyZSA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdGlmICggdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID0gX2NyZWF0ZVJlbmRlclRhcmdldCggcGFyYW1zICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gY3ViZVVWUmVuZGVyVGFyZ2V0O1xuXG5cdH1cblxuXHRfY29tcGlsZU1hdGVyaWFsKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IHRtcE1lc2ggPSBuZXcgTWVzaCggX2xvZFBsYW5lc1sgMCBdLCBtYXRlcmlhbCApO1xuXHRcdHRoaXMuX3JlbmRlcmVyLmNvbXBpbGUoIHRtcE1lc2gsIF9mbGF0Q2FtZXJhICk7XG5cblx0fVxuXG5cdF9zY2VuZVRvQ3ViZVVWKCBzY2VuZSwgbmVhciwgZmFyLCBjdWJlVVZSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBmb3YgPSA5MDtcblx0XHRjb25zdCBhc3BlY3QgPSAxO1xuXHRcdGNvbnN0IGN1YmVDYW1lcmEgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTtcblx0XHRjb25zdCB1cFNpZ24gPSBbIDEsIC0gMSwgMSwgMSwgMSwgMSBdO1xuXHRcdGNvbnN0IGZvcndhcmRTaWduID0gWyAxLCAxLCAxLCAtIDEsIC0gMSwgLSAxIF07XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblxuXHRcdGNvbnN0IG9yaWdpbmFsQXV0b0NsZWFyID0gcmVuZGVyZXIuYXV0b0NsZWFyO1xuXHRcdGNvbnN0IHRvbmVNYXBwaW5nID0gcmVuZGVyZXIudG9uZU1hcHBpbmc7XG5cdFx0cmVuZGVyZXIuZ2V0Q2xlYXJDb2xvciggX2NsZWFyQ29sb3IgKTtcblxuXHRcdHJlbmRlcmVyLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZztcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcblxuXHRcdGNvbnN0IGJhY2tncm91bmRNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCgge1xuXHRcdFx0bmFtZTogJ1BNUkVNLkJhY2tncm91bmQnLFxuXHRcdFx0c2lkZTogQmFja1NpZGUsXG5cdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0fSApO1xuXG5cdFx0Y29uc3QgYmFja2dyb3VuZEJveCA9IG5ldyBNZXNoKCBuZXcgQm94R2VvbWV0cnkoKSwgYmFja2dyb3VuZE1hdGVyaWFsICk7XG5cblx0XHRsZXQgdXNlU29saWRDb2xvciA9IGZhbHNlO1xuXHRcdGNvbnN0IGJhY2tncm91bmQgPSBzY2VuZS5iYWNrZ3JvdW5kO1xuXG5cdFx0aWYgKCBiYWNrZ3JvdW5kICkge1xuXG5cdFx0XHRpZiAoIGJhY2tncm91bmQuaXNDb2xvciApIHtcblxuXHRcdFx0XHRiYWNrZ3JvdW5kTWF0ZXJpYWwuY29sb3IuY29weSggYmFja2dyb3VuZCApO1xuXHRcdFx0XHRzY2VuZS5iYWNrZ3JvdW5kID0gbnVsbDtcblx0XHRcdFx0dXNlU29saWRDb2xvciA9IHRydWU7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGJhY2tncm91bmRNYXRlcmlhbC5jb2xvci5jb3B5KCBfY2xlYXJDb2xvciApO1xuXHRcdFx0dXNlU29saWRDb2xvciA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBjb2wgPSBpICUgMztcblx0XHRcdGlmICggY29sID09PSAwICkge1xuXG5cdFx0XHRcdGN1YmVDYW1lcmEudXAuc2V0KCAwLCB1cFNpZ25bIGkgXSwgMCApO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdCggZm9yd2FyZFNpZ25bIGkgXSwgMCwgMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBjb2wgPT09IDEgKSB7XG5cblx0XHRcdFx0Y3ViZUNhbWVyYS51cC5zZXQoIDAsIDAsIHVwU2lnblsgaSBdICk7XG5cdFx0XHRcdGN1YmVDYW1lcmEubG9va0F0KCAwLCBmb3J3YXJkU2lnblsgaSBdLCAwICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y3ViZUNhbWVyYS51cC5zZXQoIDAsIHVwU2lnblsgaSBdLCAwICk7XG5cdFx0XHRcdGN1YmVDYW1lcmEubG9va0F0KCAwLCAwLCBmb3J3YXJkU2lnblsgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X3NldFZpZXdwb3J0KCBjdWJlVVZSZW5kZXJUYXJnZXQsXG5cdFx0XHRcdGNvbCAqIFNJWkVfTUFYLCBpID4gMiA/IFNJWkVfTUFYIDogMCwgU0laRV9NQVgsIFNJWkVfTUFYICk7XG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRpZiAoIHVzZVNvbGlkQ29sb3IgKSB7XG5cblx0XHRcdFx0cmVuZGVyZXIucmVuZGVyKCBiYWNrZ3JvdW5kQm94LCBjdWJlQ2FtZXJhICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY3ViZUNhbWVyYSApO1xuXG5cdFx0fVxuXG5cdFx0YmFja2dyb3VuZEJveC5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0YmFja2dyb3VuZEJveC5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cblx0XHRyZW5kZXJlci50b25lTWFwcGluZyA9IHRvbmVNYXBwaW5nO1xuXHRcdHJlbmRlcmVyLmF1dG9DbGVhciA9IG9yaWdpbmFsQXV0b0NsZWFyO1xuXHRcdHNjZW5lLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xuXG5cdH1cblxuXHRfdGV4dHVyZVRvQ3ViZVVWKCB0ZXh0dXJlLCBjdWJlVVZSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXG5cdFx0Y29uc3QgaXNDdWJlVGV4dHVyZSA9ICggdGV4dHVyZS5tYXBwaW5nID09PSBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgfHwgdGV4dHVyZS5tYXBwaW5nID09PSBDdWJlUmVmcmFjdGlvbk1hcHBpbmcgKTtcblxuXHRcdGlmICggaXNDdWJlVGV4dHVyZSApIHtcblxuXHRcdFx0aWYgKCB0aGlzLl9jdWJlbWFwU2hhZGVyID09PSBudWxsICkge1xuXG5cdFx0XHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIgPSBfZ2V0Q3ViZW1hcFNoYWRlcigpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZSA9ICggdGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlICkgPyAtIDEgOiAxO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCB0aGlzLl9lcXVpcmVjdFNoYWRlciA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHR0aGlzLl9lcXVpcmVjdFNoYWRlciA9IF9nZXRFcXVpcmVjdFNoYWRlcigpO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IGlzQ3ViZVRleHR1cmUgPyB0aGlzLl9jdWJlbWFwU2hhZGVyIDogdGhpcy5fZXF1aXJlY3RTaGFkZXI7XG5cdFx0Y29uc3QgbWVzaCA9IG5ldyBNZXNoKCBfbG9kUGxhbmVzWyAwIF0sIG1hdGVyaWFsICk7XG5cblx0XHRjb25zdCB1bmlmb3JtcyA9IG1hdGVyaWFsLnVuaWZvcm1zO1xuXG5cdFx0dW5pZm9ybXNbICdlbnZNYXAnIF0udmFsdWUgPSB0ZXh0dXJlO1xuXG5cdFx0aWYgKCAhIGlzQ3ViZVRleHR1cmUgKSB7XG5cblx0XHRcdHVuaWZvcm1zWyAndGV4ZWxTaXplJyBdLnZhbHVlLnNldCggMS4wIC8gdGV4dHVyZS5pbWFnZS53aWR0aCwgMS4wIC8gdGV4dHVyZS5pbWFnZS5oZWlnaHQgKTtcblxuXHRcdH1cblxuXHRcdF9zZXRWaWV3cG9ydCggY3ViZVVWUmVuZGVyVGFyZ2V0LCAwLCAwLCAzICogU0laRV9NQVgsIDIgKiBTSVpFX01BWCApO1xuXG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoIG1lc2gsIF9mbGF0Q2FtZXJhICk7XG5cblx0fVxuXG5cdF9hcHBseVBNUkVNKCBjdWJlVVZSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXHRcdGNvbnN0IGF1dG9DbGVhciA9IHJlbmRlcmVyLmF1dG9DbGVhcjtcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcblxuXHRcdGZvciAoIGxldCBpID0gMTsgaSA8IFRPVEFMX0xPRFM7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHNpZ21hID0gTWF0aC5zcXJ0KCBfc2lnbWFzWyBpIF0gKiBfc2lnbWFzWyBpIF0gLSBfc2lnbWFzWyBpIC0gMSBdICogX3NpZ21hc1sgaSAtIDEgXSApO1xuXG5cdFx0XHRjb25zdCBwb2xlQXhpcyA9IF9heGlzRGlyZWN0aW9uc1sgKCBpIC0gMSApICUgX2F4aXNEaXJlY3Rpb25zLmxlbmd0aCBdO1xuXG5cdFx0XHR0aGlzLl9ibHVyKCBjdWJlVVZSZW5kZXJUYXJnZXQsIGkgLSAxLCBpLCBzaWdtYSwgcG9sZUF4aXMgKTtcblxuXHRcdH1cblxuXHRcdHJlbmRlcmVyLmF1dG9DbGVhciA9IGF1dG9DbGVhcjtcblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSB0d28tcGFzcyBHYXVzc2lhbiBibHVyIGZvciBhIGN1YmVtYXAuIE5vcm1hbGx5IHRoaXMgaXMgZG9uZVxuXHQgKiB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHksIGJ1dCB0aGlzIGJyZWFrcyBkb3duIG9uIGEgY3ViZS4gSGVyZSB3ZSBhcHBseVxuXHQgKiB0aGUgYmx1ciBsYXRpdHVkaW5hbGx5IChhcm91bmQgdGhlIHBvbGVzKSwgYW5kIHRoZW4gbG9uZ2l0dWRpbmFsbHkgKHRvd2FyZHNcblx0ICogdGhlIHBvbGVzKSB0byBhcHByb3hpbWF0ZSB0aGUgb3J0aG9nb25hbGx5LXNlcGFyYWJsZSBibHVyLiBJdCBpcyBsZWFzdFxuXHQgKiBhY2N1cmF0ZSBhdCB0aGUgcG9sZXMsIGJ1dCBzdGlsbCBkb2VzIGEgZGVjZW50IGpvYi5cblx0ICovXG5cdF9ibHVyKCBjdWJlVVZSZW5kZXJUYXJnZXQsIGxvZEluLCBsb2RPdXQsIHNpZ21hLCBwb2xlQXhpcyApIHtcblxuXHRcdGNvbnN0IHBpbmdQb25nUmVuZGVyVGFyZ2V0ID0gdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7XG5cblx0XHR0aGlzLl9oYWxmQmx1cihcblx0XHRcdGN1YmVVVlJlbmRlclRhcmdldCxcblx0XHRcdHBpbmdQb25nUmVuZGVyVGFyZ2V0LFxuXHRcdFx0bG9kSW4sXG5cdFx0XHRsb2RPdXQsXG5cdFx0XHRzaWdtYSxcblx0XHRcdCdsYXRpdHVkaW5hbCcsXG5cdFx0XHRwb2xlQXhpcyApO1xuXG5cdFx0dGhpcy5faGFsZkJsdXIoXG5cdFx0XHRwaW5nUG9uZ1JlbmRlclRhcmdldCxcblx0XHRcdGN1YmVVVlJlbmRlclRhcmdldCxcblx0XHRcdGxvZE91dCxcblx0XHRcdGxvZE91dCxcblx0XHRcdHNpZ21hLFxuXHRcdFx0J2xvbmdpdHVkaW5hbCcsXG5cdFx0XHRwb2xlQXhpcyApO1xuXG5cdH1cblxuXHRfaGFsZkJsdXIoIHRhcmdldEluLCB0YXJnZXRPdXQsIGxvZEluLCBsb2RPdXQsIHNpZ21hUmFkaWFucywgZGlyZWN0aW9uLCBwb2xlQXhpcyApIHtcblxuXHRcdGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXI7XG5cdFx0Y29uc3QgYmx1ck1hdGVyaWFsID0gdGhpcy5fYmx1ck1hdGVyaWFsO1xuXG5cdFx0aWYgKCBkaXJlY3Rpb24gIT09ICdsYXRpdHVkaW5hbCcgJiYgZGlyZWN0aW9uICE9PSAnbG9uZ2l0dWRpbmFsJyApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0J2JsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEnICk7XG5cblx0XHR9XG5cblx0XHQvLyBOdW1iZXIgb2Ygc3RhbmRhcmQgZGV2aWF0aW9ucyBhdCB3aGljaCB0byBjdXQgb2ZmIHRoZSBkaXNjcmV0ZSBhcHByb3hpbWF0aW9uLlxuXHRcdGNvbnN0IFNUQU5EQVJEX0RFVklBVElPTlMgPSAzO1xuXG5cdFx0Y29uc3QgYmx1ck1lc2ggPSBuZXcgTWVzaCggX2xvZFBsYW5lc1sgbG9kT3V0IF0sIGJsdXJNYXRlcmlhbCApO1xuXHRcdGNvbnN0IGJsdXJVbmlmb3JtcyA9IGJsdXJNYXRlcmlhbC51bmlmb3JtcztcblxuXHRcdGNvbnN0IHBpeGVscyA9IF9zaXplTG9kc1sgbG9kSW4gXSAtIDE7XG5cdFx0Y29uc3QgcmFkaWFuc1BlclBpeGVsID0gaXNGaW5pdGUoIHNpZ21hUmFkaWFucyApID8gTWF0aC5QSSAvICggMiAqIHBpeGVscyApIDogMiAqIE1hdGguUEkgLyAoIDIgKiBNQVhfU0FNUExFUyAtIDEgKTtcblx0XHRjb25zdCBzaWdtYVBpeGVscyA9IHNpZ21hUmFkaWFucyAvIHJhZGlhbnNQZXJQaXhlbDtcblx0XHRjb25zdCBzYW1wbGVzID0gaXNGaW5pdGUoIHNpZ21hUmFkaWFucyApID8gMSArIE1hdGguZmxvb3IoIFNUQU5EQVJEX0RFVklBVElPTlMgKiBzaWdtYVBpeGVscyApIDogTUFYX1NBTVBMRVM7XG5cblx0XHRpZiAoIHNhbXBsZXMgPiBNQVhfU0FNUExFUyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCBgc2lnbWFSYWRpYW5zLCAke1xuXHRcdFx0XHRzaWdtYVJhZGlhbnN9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7XG5cdFx0XHRcdHNhbXBsZXN9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtNQVhfU0FNUExFU31gICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCB3ZWlnaHRzID0gW107XG5cdFx0bGV0IHN1bSA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBNQVhfU0FNUExFUzsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgeCA9IGkgLyBzaWdtYVBpeGVscztcblx0XHRcdGNvbnN0IHdlaWdodCA9IE1hdGguZXhwKCAtIHggKiB4IC8gMiApO1xuXHRcdFx0d2VpZ2h0cy5wdXNoKCB3ZWlnaHQgKTtcblxuXHRcdFx0aWYgKCBpID09PSAwICkge1xuXG5cdFx0XHRcdHN1bSArPSB3ZWlnaHQ7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGkgPCBzYW1wbGVzICkge1xuXG5cdFx0XHRcdHN1bSArPSAyICogd2VpZ2h0O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0d2VpZ2h0c1sgaSBdID0gd2VpZ2h0c1sgaSBdIC8gc3VtO1xuXG5cdFx0fVxuXG5cdFx0Ymx1clVuaWZvcm1zWyAnZW52TWFwJyBdLnZhbHVlID0gdGFyZ2V0SW4udGV4dHVyZTtcblx0XHRibHVyVW5pZm9ybXNbICdzYW1wbGVzJyBdLnZhbHVlID0gc2FtcGxlcztcblx0XHRibHVyVW5pZm9ybXNbICd3ZWlnaHRzJyBdLnZhbHVlID0gd2VpZ2h0cztcblx0XHRibHVyVW5pZm9ybXNbICdsYXRpdHVkaW5hbCcgXS52YWx1ZSA9IGRpcmVjdGlvbiA9PT0gJ2xhdGl0dWRpbmFsJztcblxuXHRcdGlmICggcG9sZUF4aXMgKSB7XG5cblx0XHRcdGJsdXJVbmlmb3Jtc1sgJ3BvbGVBeGlzJyBdLnZhbHVlID0gcG9sZUF4aXM7XG5cblx0XHR9XG5cblx0XHRibHVyVW5pZm9ybXNbICdkVGhldGEnIF0udmFsdWUgPSByYWRpYW5zUGVyUGl4ZWw7XG5cdFx0Ymx1clVuaWZvcm1zWyAnbWlwSW50JyBdLnZhbHVlID0gTE9EX01BWCAtIGxvZEluO1xuXG5cdFx0Y29uc3Qgb3V0cHV0U2l6ZSA9IF9zaXplTG9kc1sgbG9kT3V0IF07XG5cdFx0Y29uc3QgeCA9IDMgKiBNYXRoLm1heCggMCwgU0laRV9NQVggLSAyICogb3V0cHV0U2l6ZSApO1xuXHRcdGNvbnN0IHkgPSAoIGxvZE91dCA9PT0gMCA/IDAgOiAyICogU0laRV9NQVggKSArIDIgKiBvdXRwdXRTaXplICogKCBsb2RPdXQgPiBMT0RfTUFYIC0gTE9EX01JTiA/IGxvZE91dCAtIExPRF9NQVggKyBMT0RfTUlOIDogMCApO1xuXG5cdFx0X3NldFZpZXdwb3J0KCB0YXJnZXRPdXQsIHgsIHksIDMgKiBvdXRwdXRTaXplLCAyICogb3V0cHV0U2l6ZSApO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggdGFyZ2V0T3V0ICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBibHVyTWVzaCwgX2ZsYXRDYW1lcmEgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVBsYW5lcygpIHtcblxuXHRjb25zdCBfbG9kUGxhbmVzID0gW107XG5cdGNvbnN0IF9zaXplTG9kcyA9IFtdO1xuXHRjb25zdCBfc2lnbWFzID0gW107XG5cblx0bGV0IGxvZCA9IExPRF9NQVg7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgVE9UQUxfTE9EUzsgaSArKyApIHtcblxuXHRcdGNvbnN0IHNpemVMb2QgPSBNYXRoLnBvdyggMiwgbG9kICk7XG5cdFx0X3NpemVMb2RzLnB1c2goIHNpemVMb2QgKTtcblx0XHRsZXQgc2lnbWEgPSAxLjAgLyBzaXplTG9kO1xuXG5cdFx0aWYgKCBpID4gTE9EX01BWCAtIExPRF9NSU4gKSB7XG5cblx0XHRcdHNpZ21hID0gRVhUUkFfTE9EX1NJR01BWyBpIC0gTE9EX01BWCArIExPRF9NSU4gLSAxIF07XG5cblx0XHR9IGVsc2UgaWYgKCBpID09PSAwICkge1xuXG5cdFx0XHRzaWdtYSA9IDA7XG5cblx0XHR9XG5cblx0XHRfc2lnbWFzLnB1c2goIHNpZ21hICk7XG5cblx0XHRjb25zdCB0ZXhlbFNpemUgPSAxLjAgLyAoIHNpemVMb2QgLSAxICk7XG5cdFx0Y29uc3QgbWluID0gLSB0ZXhlbFNpemUgLyAyO1xuXHRcdGNvbnN0IG1heCA9IDEgKyB0ZXhlbFNpemUgLyAyO1xuXHRcdGNvbnN0IHV2MSA9IFsgbWluLCBtaW4sIG1heCwgbWluLCBtYXgsIG1heCwgbWluLCBtaW4sIG1heCwgbWF4LCBtaW4sIG1heCBdO1xuXG5cdFx0Y29uc3QgY3ViZUZhY2VzID0gNjtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IDY7XG5cdFx0Y29uc3QgcG9zaXRpb25TaXplID0gMztcblx0XHRjb25zdCB1dlNpemUgPSAyO1xuXHRcdGNvbnN0IGZhY2VJbmRleFNpemUgPSAxO1xuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSBuZXcgRmxvYXQzMkFycmF5KCBwb3NpdGlvblNpemUgKiB2ZXJ0aWNlcyAqIGN1YmVGYWNlcyApO1xuXHRcdGNvbnN0IHV2ID0gbmV3IEZsb2F0MzJBcnJheSggdXZTaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMgKTtcblx0XHRjb25zdCBmYWNlSW5kZXggPSBuZXcgRmxvYXQzMkFycmF5KCBmYWNlSW5kZXhTaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMgKTtcblxuXHRcdGZvciAoIGxldCBmYWNlID0gMDsgZmFjZSA8IGN1YmVGYWNlczsgZmFjZSArKyApIHtcblxuXHRcdFx0Y29uc3QgeCA9ICggZmFjZSAlIDMgKSAqIDIgLyAzIC0gMTtcblx0XHRcdGNvbnN0IHkgPSBmYWNlID4gMiA/IDAgOiAtIDE7XG5cdFx0XHRjb25zdCBjb29yZGluYXRlcyA9IFtcblx0XHRcdFx0eCwgeSwgMCxcblx0XHRcdFx0eCArIDIgLyAzLCB5LCAwLFxuXHRcdFx0XHR4ICsgMiAvIDMsIHkgKyAxLCAwLFxuXHRcdFx0XHR4LCB5LCAwLFxuXHRcdFx0XHR4ICsgMiAvIDMsIHkgKyAxLCAwLFxuXHRcdFx0XHR4LCB5ICsgMSwgMFxuXHRcdFx0XTtcblx0XHRcdHBvc2l0aW9uLnNldCggY29vcmRpbmF0ZXMsIHBvc2l0aW9uU2l6ZSAqIHZlcnRpY2VzICogZmFjZSApO1xuXHRcdFx0dXYuc2V0KCB1djEsIHV2U2l6ZSAqIHZlcnRpY2VzICogZmFjZSApO1xuXHRcdFx0Y29uc3QgZmlsbCA9IFsgZmFjZSwgZmFjZSwgZmFjZSwgZmFjZSwgZmFjZSwgZmFjZSBdO1xuXHRcdFx0ZmFjZUluZGV4LnNldCggZmlsbCwgZmFjZUluZGV4U2l6ZSAqIHZlcnRpY2VzICogZmFjZSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgcGxhbmVzID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0cGxhbmVzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIHBvc2l0aW9uU2l6ZSApICk7XG5cdFx0cGxhbmVzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdXYsIHV2U2l6ZSApICk7XG5cdFx0cGxhbmVzLnNldEF0dHJpYnV0ZSggJ2ZhY2VJbmRleCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGZhY2VJbmRleCwgZmFjZUluZGV4U2l6ZSApICk7XG5cdFx0X2xvZFBsYW5lcy5wdXNoKCBwbGFuZXMgKTtcblxuXHRcdGlmICggbG9kID4gTE9EX01JTiApIHtcblxuXHRcdFx0bG9kIC0tO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4geyBfbG9kUGxhbmVzLCBfc2l6ZUxvZHMsIF9zaWdtYXMgfTtcblxufVxuXG5mdW5jdGlvbiBfY3JlYXRlUmVuZGVyVGFyZ2V0KCBwYXJhbXMgKSB7XG5cblx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KCAzICogU0laRV9NQVgsIDMgKiBTSVpFX01BWCwgcGFyYW1zICk7XG5cdGN1YmVVVlJlbmRlclRhcmdldC50ZXh0dXJlLm1hcHBpbmcgPSBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZztcblx0Y3ViZVVWUmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZSA9ICdQTVJFTS5jdWJlVXYnO1xuXHRjdWJlVVZSZW5kZXJUYXJnZXQuc2Npc3NvclRlc3QgPSB0cnVlO1xuXHRyZXR1cm4gY3ViZVVWUmVuZGVyVGFyZ2V0O1xuXG59XG5cbmZ1bmN0aW9uIF9zZXRWaWV3cG9ydCggdGFyZ2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdHRhcmdldC52aWV3cG9ydC5zZXQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKTtcblx0dGFyZ2V0LnNjaXNzb3Iuc2V0KCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7XG5cbn1cblxuZnVuY3Rpb24gX2dldEJsdXJTaGFkZXIoIG1heFNhbXBsZXMgKSB7XG5cblx0Y29uc3Qgd2VpZ2h0cyA9IG5ldyBGbG9hdDMyQXJyYXkoIG1heFNhbXBsZXMgKTtcblx0Y29uc3QgcG9sZUF4aXMgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApO1xuXHRjb25zdCBzaGFkZXJNYXRlcmlhbCA9IG5ldyBSYXdTaGFkZXJNYXRlcmlhbCgge1xuXG5cdFx0bmFtZTogJ1NwaGVyaWNhbEdhdXNzaWFuQmx1cicsXG5cblx0XHRkZWZpbmVzOiB7ICduJzogbWF4U2FtcGxlcyB9LFxuXG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdCdlbnZNYXAnOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHQnc2FtcGxlcyc6IHsgdmFsdWU6IDEgfSxcblx0XHRcdCd3ZWlnaHRzJzogeyB2YWx1ZTogd2VpZ2h0cyB9LFxuXHRcdFx0J2xhdGl0dWRpbmFsJzogeyB2YWx1ZTogZmFsc2UgfSxcblx0XHRcdCdkVGhldGEnOiB7IHZhbHVlOiAwIH0sXG5cdFx0XHQnbWlwSW50JzogeyB2YWx1ZTogMCB9LFxuXHRcdFx0J3BvbGVBeGlzJzogeyB2YWx1ZTogcG9sZUF4aXMgfVxuXHRcdH0sXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSxcblxuXHRcdGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovYFxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0YCxcblxuXHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nLFxuXHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0ZGVwdGhXcml0ZTogZmFsc2VcblxuXHR9ICk7XG5cblx0cmV0dXJuIHNoYWRlck1hdGVyaWFsO1xuXG59XG5cbmZ1bmN0aW9uIF9nZXRFcXVpcmVjdFNoYWRlcigpIHtcblxuXHRjb25zdCB0ZXhlbFNpemUgPSBuZXcgVmVjdG9yMiggMSwgMSApO1xuXHRjb25zdCBzaGFkZXJNYXRlcmlhbCA9IG5ldyBSYXdTaGFkZXJNYXRlcmlhbCgge1xuXG5cdFx0bmFtZTogJ0VxdWlyZWN0YW5ndWxhclRvQ3ViZVVWJyxcblxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHQnZW52TWFwJzogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0J3RleGVsU2l6ZSc6IHsgdmFsdWU6IHRleGVsU2l6ZSB9XG5cdFx0fSxcblxuXHRcdHZlcnRleFNoYWRlcjogX2dldENvbW1vblZlcnRleFNoYWRlcigpLFxuXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IC8qIGdsc2wgKi9gXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcblxuXHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXG5cdFx0XHRcdHZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cdFx0XHRcdHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTtcblx0XHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdFx0dmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di55ICs9IHRleGVsU2l6ZS55O1xuXHRcdFx0XHR2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCAtPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0fVxuXHRcdGAsXG5cblx0XHRibGVuZGluZzogTm9CbGVuZGluZyxcblx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlXG5cblx0fSApO1xuXG5cdHJldHVybiBzaGFkZXJNYXRlcmlhbDtcblxufVxuXG5mdW5jdGlvbiBfZ2V0Q3ViZW1hcFNoYWRlcigpIHtcblxuXHRjb25zdCBzaGFkZXJNYXRlcmlhbCA9IG5ldyBSYXdTaGFkZXJNYXRlcmlhbCgge1xuXG5cdFx0bmFtZTogJ0N1YmVtYXBUb0N1YmVVVicsXG5cblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0J2Vudk1hcCc6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdCdmbGlwRW52TWFwJzogeyB2YWx1ZTogLSAxIH1cblx0XHR9LFxuXG5cdFx0dmVydGV4U2hhZGVyOiBfZ2V0Q29tbW9uVmVydGV4U2hhZGVyKCksXG5cblx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqL2BcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7XG5cblx0XHRcdH1cblx0XHRgLFxuXG5cdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmcsXG5cdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRkZXB0aFdyaXRlOiBmYWxzZVxuXG5cdH0gKTtcblxuXHRyZXR1cm4gc2hhZGVyTWF0ZXJpYWw7XG5cbn1cblxuZnVuY3Rpb24gX2dldENvbW1vblZlcnRleFNoYWRlcigpIHtcblxuXHRyZXR1cm4gLyogZ2xzbCAqL2BcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHRgO1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQ3ViZVVWTWFwcyggcmVuZGVyZXIgKSB7XG5cblx0bGV0IGN1YmVVVm1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGxldCBwbXJlbUdlbmVyYXRvciA9IG51bGw7XG5cblx0ZnVuY3Rpb24gZ2V0KCB0ZXh0dXJlICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGV4dHVyZS5tYXBwaW5nO1xuXG5cdFx0XHRjb25zdCBpc0VxdWlyZWN0TWFwID0gKCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyB8fCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZyApO1xuXHRcdFx0Y29uc3QgaXNDdWJlTWFwID0gKCBtYXBwaW5nID09PSBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nICk7XG5cblx0XHRcdC8vIGVxdWlyZWN0L2N1YmUgbWFwIHRvIGN1YmVVViBjb252ZXJzaW9uXG5cblx0XHRcdGlmICggaXNFcXVpcmVjdE1hcCB8fCBpc0N1YmVNYXAgKSB7XG5cblx0XHRcdFx0aWYgKCB0ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSAmJiB0ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGUgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGxldCByZW5kZXJUYXJnZXQgPSBjdWJlVVZtYXBzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBwbXJlbUdlbmVyYXRvciA9PT0gbnVsbCApIHBtcmVtR2VuZXJhdG9yID0gbmV3IFBNUkVNR2VuZXJhdG9yKCByZW5kZXJlciApO1xuXG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0ID0gaXNFcXVpcmVjdE1hcCA/IHBtcmVtR2VuZXJhdG9yLmZyb21FcXVpcmVjdGFuZ3VsYXIoIHRleHR1cmUsIHJlbmRlclRhcmdldCApIDogcG1yZW1HZW5lcmF0b3IuZnJvbUN1YmVtYXAoIHRleHR1cmUsIHJlbmRlclRhcmdldCApO1xuXHRcdFx0XHRcdGN1YmVVVm1hcHMuc2V0KCB0ZXh0dXJlLCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0XHRcdHJldHVybiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCBjdWJlVVZtYXBzLmhhcyggdGV4dHVyZSApICkge1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY3ViZVVWbWFwcy5nZXQoIHRleHR1cmUgKS50ZXh0dXJlO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaW1hZ2UgPSB0ZXh0dXJlLmltYWdlO1xuXG5cdFx0XHRcdFx0XHRpZiAoICggaXNFcXVpcmVjdE1hcCAmJiBpbWFnZSAmJiBpbWFnZS5oZWlnaHQgPiAwICkgfHwgKCBpc0N1YmVNYXAgJiYgaW1hZ2UgJiYgaXNDdWJlVGV4dHVyZUNvbXBsZXRlKCBpbWFnZSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBwbXJlbUdlbmVyYXRvciA9PT0gbnVsbCApIHBtcmVtR2VuZXJhdG9yID0gbmV3IFBNUkVNR2VuZXJhdG9yKCByZW5kZXJlciApO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IGlzRXF1aXJlY3RNYXAgPyBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKCB0ZXh0dXJlICkgOiBwbXJlbUdlbmVyYXRvci5mcm9tQ3ViZW1hcCggdGV4dHVyZSApO1xuXHRcdFx0XHRcdFx0XHRjdWJlVVZtYXBzLnNldCggdGV4dHVyZSwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0XHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gaW1hZ2Ugbm90IHlldCByZWFkeS4gdHJ5IHRoZSBjb252ZXJzaW9uIG5leHQgZnJhbWVcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGlzQ3ViZVRleHR1cmVDb21wbGV0ZSggaW1hZ2UgKSB7XG5cblx0XHRsZXQgY291bnQgPSAwO1xuXHRcdGNvbnN0IGxlbmd0aCA9IDY7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGlmICggaW1hZ2VbIGkgXSAhPT0gdW5kZWZpbmVkICkgY291bnQgKys7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gY291bnQgPT09IGxlbmd0aDtcblxuXG5cdH1cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSBldmVudC50YXJnZXQ7XG5cblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApO1xuXG5cdFx0Y29uc3QgY3ViZW1hcFVWID0gY3ViZVVWbWFwcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggY3ViZW1hcFVWICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGN1YmVVVm1hcHMuZGVsZXRlKCB0ZXh0dXJlICk7XG5cdFx0XHRjdWJlbWFwVVYuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0Y3ViZVVWbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0XHRpZiAoIHBtcmVtR2VuZXJhdG9yICE9PSBudWxsICkge1xuXG5cdFx0XHRwbXJlbUdlbmVyYXRvci5kaXNwb3NlKCk7XG5cdFx0XHRwbXJlbUdlbmVyYXRvciA9IG51bGw7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMRXh0ZW5zaW9ucyggZ2wgKSB7XG5cblx0Y29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cdGZ1bmN0aW9uIGdldEV4dGVuc2lvbiggbmFtZSApIHtcblxuXHRcdGlmICggZXh0ZW5zaW9uc1sgbmFtZSBdICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHJldHVybiBleHRlbnNpb25zWyBuYW1lIF07XG5cblx0XHR9XG5cblx0XHRsZXQgZXh0ZW5zaW9uO1xuXG5cdFx0c3dpdGNoICggbmFtZSApIHtcblxuXHRcdFx0Y2FzZSAnV0VCR0xfZGVwdGhfdGV4dHVyZSc6XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUnICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnOlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKSB8fCBnbC5nZXRFeHRlbnNpb24oICdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnOlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKSB8fCBnbC5nZXRFeHRlbnNpb24oICdNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ1dFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oIG5hbWUgKTtcblxuXHRcdH1cblxuXHRcdGV4dGVuc2lvbnNbIG5hbWUgXSA9IGV4dGVuc2lvbjtcblxuXHRcdHJldHVybiBleHRlbnNpb247XG5cblx0fVxuXG5cdHJldHVybiB7XG5cblx0XHRoYXM6IGZ1bmN0aW9uICggbmFtZSApIHtcblxuXHRcdFx0cmV0dXJuIGdldEV4dGVuc2lvbiggbmFtZSApICE9PSBudWxsO1xuXG5cdFx0fSxcblxuXHRcdGluaXQ6IGZ1bmN0aW9uICggY2FwYWJpbGl0aWVzICkge1xuXG5cdFx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHtcblxuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdFWFRfY29sb3JfYnVmZmVyX2Zsb2F0JyApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGdldEV4dGVuc2lvbiggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbiggJ09FU190ZXh0dXJlX2Zsb2F0JyApO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfZWxlbWVudF9pbmRleF91aW50JyApO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInICk7XG5cdFx0XHRnZXRFeHRlbnNpb24oICdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnICk7XG5cdFx0XHRnZXRFeHRlbnNpb24oICdXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUnICk7XG5cblx0XHR9LFxuXG5cdFx0Z2V0OiBmdW5jdGlvbiAoIG5hbWUgKSB7XG5cblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGdldEV4dGVuc2lvbiggbmFtZSApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAnICsgbmFtZSArICcgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuJyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHRlbnNpb247XG5cblx0XHR9XG5cblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTEdlb21ldHJpZXMoIGdsLCBhdHRyaWJ1dGVzLCBpbmZvLCBiaW5kaW5nU3RhdGVzICkge1xuXG5cdGNvbnN0IGdlb21ldHJpZXMgPSB7fTtcblx0Y29uc3Qgd2lyZWZyYW1lQXR0cmlidXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gb25HZW9tZXRyeURpc3Bvc2UoIGV2ZW50ICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBldmVudC50YXJnZXQ7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRhdHRyaWJ1dGVzLnJlbW92ZSggZ2VvbWV0cnkuaW5kZXggKTtcblxuXHRcdH1cblxuXHRcdGZvciAoIGNvbnN0IG5hbWUgaW4gZ2VvbWV0cnkuYXR0cmlidXRlcyApIHtcblxuXHRcdFx0YXR0cmlidXRlcy5yZW1vdmUoIGdlb21ldHJ5LmF0dHJpYnV0ZXNbIG5hbWUgXSApO1xuXG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbkdlb21ldHJ5RGlzcG9zZSApO1xuXG5cdFx0ZGVsZXRlIGdlb21ldHJpZXNbIGdlb21ldHJ5LmlkIF07XG5cblx0XHRjb25zdCBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldCggZ2VvbWV0cnkgKTtcblxuXHRcdGlmICggYXR0cmlidXRlICkge1xuXG5cdFx0XHRhdHRyaWJ1dGVzLnJlbW92ZSggYXR0cmlidXRlICk7XG5cdFx0XHR3aXJlZnJhbWVBdHRyaWJ1dGVzLmRlbGV0ZSggZ2VvbWV0cnkgKTtcblxuXHRcdH1cblxuXHRcdGJpbmRpbmdTdGF0ZXMucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoIGdlb21ldHJ5ICk7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPT09IHRydWUgKSB7XG5cblx0XHRcdGRlbGV0ZSBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudDtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpbmZvLm1lbW9yeS5nZW9tZXRyaWVzIC0tO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXQoIG9iamVjdCwgZ2VvbWV0cnkgKSB7XG5cblx0XHRpZiAoIGdlb21ldHJpZXNbIGdlb21ldHJ5LmlkIF0gPT09IHRydWUgKSByZXR1cm4gZ2VvbWV0cnk7XG5cblx0XHRnZW9tZXRyeS5hZGRFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uR2VvbWV0cnlEaXNwb3NlICk7XG5cblx0XHRnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdID0gdHJ1ZTtcblxuXHRcdGluZm8ubWVtb3J5Lmdlb21ldHJpZXMgKys7XG5cblx0XHRyZXR1cm4gZ2VvbWV0cnk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZSggZ2VvbWV0cnkgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gVXBkYXRpbmcgaW5kZXggYnVmZmVyIGluIFZBTyBub3cuIFNlZSBXZWJHTEJpbmRpbmdTdGF0ZXMuXG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIGdlb21ldHJ5QXR0cmlidXRlcyApIHtcblxuXHRcdFx0YXR0cmlidXRlcy51cGRhdGUoIGdlb21ldHJ5QXR0cmlidXRlc1sgbmFtZSBdLCAzNDk2MiApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gbW9ycGggdGFyZ2V0c1xuXG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGFycmF5ID0gbW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF07XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0YXR0cmlidXRlcy51cGRhdGUoIGFycmF5WyBpIF0sIDM0OTYyICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlV2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRyeSApIHtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5SW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblx0XHRjb25zdCBnZW9tZXRyeVBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRsZXQgdmVyc2lvbiA9IDA7XG5cblx0XHRpZiAoIGdlb21ldHJ5SW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdGNvbnN0IGFycmF5ID0gZ2VvbWV0cnlJbmRleC5hcnJheTtcblx0XHRcdHZlcnNpb24gPSBnZW9tZXRyeUluZGV4LnZlcnNpb247XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRjb25zdCBhID0gYXJyYXlbIGkgKyAwIF07XG5cdFx0XHRcdGNvbnN0IGIgPSBhcnJheVsgaSArIDEgXTtcblx0XHRcdFx0Y29uc3QgYyA9IGFycmF5WyBpICsgMiBdO1xuXG5cdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgYiwgYywgYywgYSApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IGdlb21ldHJ5UG9zaXRpb24uYXJyYXk7XG5cdFx0XHR2ZXJzaW9uID0gZ2VvbWV0cnlQb3NpdGlvbi52ZXJzaW9uO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSAoIGFycmF5Lmxlbmd0aCAvIDMgKSAtIDE7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0Y29uc3QgYSA9IGkgKyAwO1xuXHRcdFx0XHRjb25zdCBiID0gaSArIDE7XG5cdFx0XHRcdGNvbnN0IGMgPSBpICsgMjtcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGIsIGMsIGMsIGEgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXR0cmlidXRlID0gbmV3ICggYXJyYXlOZWVkc1VpbnQzMiggaW5kaWNlcyApID8gVWludDMyQnVmZmVyQXR0cmlidXRlIDogVWludDE2QnVmZmVyQXR0cmlidXRlICkoIGluZGljZXMsIDEgKTtcblx0XHRhdHRyaWJ1dGUudmVyc2lvbiA9IHZlcnNpb247XG5cblx0XHQvLyBVcGRhdGluZyBpbmRleCBidWZmZXIgaW4gVkFPIG5vdy4gU2VlIFdlYkdMQmluZGluZ1N0YXRlc1xuXG5cdFx0Ly9cblxuXHRcdGNvbnN0IHByZXZpb3VzQXR0cmlidXRlID0gd2lyZWZyYW1lQXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5ICk7XG5cblx0XHRpZiAoIHByZXZpb3VzQXR0cmlidXRlICkgYXR0cmlidXRlcy5yZW1vdmUoIHByZXZpb3VzQXR0cmlidXRlICk7XG5cblx0XHQvL1xuXG5cdFx0d2lyZWZyYW1lQXR0cmlidXRlcy5zZXQoIGdlb21ldHJ5LCBhdHRyaWJ1dGUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0V2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRyeSApIHtcblxuXHRcdGNvbnN0IGN1cnJlbnRBdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldCggZ2VvbWV0cnkgKTtcblxuXHRcdGlmICggY3VycmVudEF0dHJpYnV0ZSApIHtcblxuXHRcdFx0Y29uc3QgZ2VvbWV0cnlJbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXG5cdFx0XHRpZiAoIGdlb21ldHJ5SW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Ly8gaWYgdGhlIGF0dHJpYnV0ZSBpcyBvYnNvbGV0ZSwgY3JlYXRlIGEgbmV3IG9uZVxuXG5cdFx0XHRcdGlmICggY3VycmVudEF0dHJpYnV0ZS52ZXJzaW9uIDwgZ2VvbWV0cnlJbmRleC52ZXJzaW9uICkge1xuXG5cdFx0XHRcdFx0dXBkYXRlV2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRyeSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dXBkYXRlV2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRyeSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KCBnZW9tZXRyeSApO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0Z2V0OiBnZXQsXG5cdFx0dXBkYXRlOiB1cGRhdGUsXG5cblx0XHRnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6IGdldFdpcmVmcmFtZUF0dHJpYnV0ZVxuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoIGdsLCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cblx0bGV0IG1vZGU7XG5cblx0ZnVuY3Rpb24gc2V0TW9kZSggdmFsdWUgKSB7XG5cblx0XHRtb2RlID0gdmFsdWU7XG5cblx0fVxuXG5cdGxldCB0eXBlLCBieXRlc1BlckVsZW1lbnQ7XG5cblx0ZnVuY3Rpb24gc2V0SW5kZXgoIHZhbHVlICkge1xuXG5cdFx0dHlwZSA9IHZhbHVlLnR5cGU7XG5cdFx0Ynl0ZXNQZXJFbGVtZW50ID0gdmFsdWUuYnl0ZXNQZXJFbGVtZW50O1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXIoIHN0YXJ0LCBjb3VudCApIHtcblxuXHRcdGdsLmRyYXdFbGVtZW50cyggbW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50ICk7XG5cblx0XHRpbmZvLnVwZGF0ZSggY291bnQsIG1vZGUsIDEgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVySW5zdGFuY2VzKCBzdGFydCwgY291bnQsIHByaW1jb3VudCApIHtcblxuXHRcdGlmICggcHJpbWNvdW50ID09PSAwICkgcmV0dXJuO1xuXG5cdFx0bGV0IGV4dGVuc2lvbiwgbWV0aG9kTmFtZTtcblxuXHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGdsO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3RWxlbWVudHNJbnN0YW5jZWQnO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSc7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyApO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGV4dGVuc2lvblsgbWV0aG9kTmFtZSBdKCBtb2RlLCBjb3VudCwgdHlwZSwgc3RhcnQgKiBieXRlc1BlckVsZW1lbnQsIHByaW1jb3VudCApO1xuXG5cdFx0aW5mby51cGRhdGUoIGNvdW50LCBtb2RlLCBwcmltY291bnQgKTtcblxuXHR9XG5cblx0Ly9cblxuXHR0aGlzLnNldE1vZGUgPSBzZXRNb2RlO1xuXHR0aGlzLnNldEluZGV4ID0gc2V0SW5kZXg7XG5cdHRoaXMucmVuZGVyID0gcmVuZGVyO1xuXHR0aGlzLnJlbmRlckluc3RhbmNlcyA9IHJlbmRlckluc3RhbmNlcztcblxufVxuXG5mdW5jdGlvbiBXZWJHTEluZm8oIGdsICkge1xuXG5cdGNvbnN0IG1lbW9yeSA9IHtcblx0XHRnZW9tZXRyaWVzOiAwLFxuXHRcdHRleHR1cmVzOiAwXG5cdH07XG5cblx0Y29uc3QgcmVuZGVyID0ge1xuXHRcdGZyYW1lOiAwLFxuXHRcdGNhbGxzOiAwLFxuXHRcdHRyaWFuZ2xlczogMCxcblx0XHRwb2ludHM6IDAsXG5cdFx0bGluZXM6IDBcblx0fTtcblxuXHRmdW5jdGlvbiB1cGRhdGUoIGNvdW50LCBtb2RlLCBpbnN0YW5jZUNvdW50ICkge1xuXG5cdFx0cmVuZGVyLmNhbGxzICsrO1xuXG5cdFx0c3dpdGNoICggbW9kZSApIHtcblxuXHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRyZW5kZXIudHJpYW5nbGVzICs9IGluc3RhbmNlQ291bnQgKiAoIGNvdW50IC8gMyApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZW5kZXIubGluZXMgKz0gaW5zdGFuY2VDb3VudCAqICggY291bnQgLyAyICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDM6XG5cdFx0XHRcdHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAtIDEgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0cmVuZGVyLmxpbmVzICs9IGluc3RhbmNlQ291bnQgKiBjb3VudDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0cmVuZGVyLnBvaW50cyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZTonLCBtb2RlICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZXNldCgpIHtcblxuXHRcdHJlbmRlci5mcmFtZSArKztcblx0XHRyZW5kZXIuY2FsbHMgPSAwO1xuXHRcdHJlbmRlci50cmlhbmdsZXMgPSAwO1xuXHRcdHJlbmRlci5wb2ludHMgPSAwO1xuXHRcdHJlbmRlci5saW5lcyA9IDA7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVtb3J5OiBtZW1vcnksXG5cdFx0cmVuZGVyOiByZW5kZXIsXG5cdFx0cHJvZ3JhbXM6IG51bGwsXG5cdFx0YXV0b1Jlc2V0OiB0cnVlLFxuXHRcdHJlc2V0OiByZXNldCxcblx0XHR1cGRhdGU6IHVwZGF0ZVxuXHR9O1xuXG59XG5cbmNsYXNzIERhdGFUZXh0dXJlMkRBcnJheSBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCBkYXRhID0gbnVsbCwgd2lkdGggPSAxLCBoZWlnaHQgPSAxLCBkZXB0aCA9IDEgKSB7XG5cblx0XHRzdXBlciggbnVsbCApO1xuXG5cdFx0dGhpcy5pbWFnZSA9IHsgZGF0YSwgd2lkdGgsIGhlaWdodCwgZGVwdGggfTtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cblx0XHR0aGlzLndyYXBSID0gQ2xhbXBUb0VkZ2VXcmFwcGluZztcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblxuXHR9XG5cbn1cblxuRGF0YVRleHR1cmUyREFycmF5LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheSA9IHRydWU7XG5cbmZ1bmN0aW9uIG51bWVyaWNhbFNvcnQoIGEsIGIgKSB7XG5cblx0cmV0dXJuIGFbIDAgXSAtIGJbIDAgXTtcblxufVxuXG5mdW5jdGlvbiBhYnNOdW1lcmljYWxTb3J0KCBhLCBiICkge1xuXG5cdHJldHVybiBNYXRoLmFicyggYlsgMSBdICkgLSBNYXRoLmFicyggYVsgMSBdICk7XG5cbn1cblxuZnVuY3Rpb24gZGVub3JtYWxpemUoIG1vcnBoLCBhdHRyaWJ1dGUgKSB7XG5cblx0bGV0IGRlbm9taW5hdG9yID0gMTtcblx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS5kYXRhLmFycmF5IDogYXR0cmlidXRlLmFycmF5O1xuXG5cdGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgKSBkZW5vbWluYXRvciA9IDEyNztcblx0ZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSApIGRlbm9taW5hdG9yID0gMzI3Njc7XG5cdGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgKSBkZW5vbWluYXRvciA9IDIxNDc0ODM2NDc7XG5cdGVsc2UgY29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAnLCBhcnJheSApO1xuXG5cdG1vcnBoLmRpdmlkZVNjYWxhciggZGVub21pbmF0b3IgKTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTE1vcnBodGFyZ2V0cyggZ2wsIGNhcGFiaWxpdGllcywgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgaW5mbHVlbmNlc0xpc3QgPSB7fTtcblx0Y29uc3QgbW9ycGhJbmZsdWVuY2VzID0gbmV3IEZsb2F0MzJBcnJheSggOCApO1xuXHRjb25zdCBtb3JwaFRleHR1cmVzID0gbmV3IFdlYWtNYXAoKTtcblx0Y29uc3QgbW9ycGggPSBuZXcgVmVjdG9yMygpO1xuXG5cdGNvbnN0IHdvcmtJbmZsdWVuY2VzID0gW107XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgODsgaSArKyApIHtcblxuXHRcdHdvcmtJbmZsdWVuY2VzWyBpIF0gPSBbIGksIDAgXTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcHJvZ3JhbSApIHtcblxuXHRcdGNvbnN0IG9iamVjdEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVuY2VzO1xuXG5cdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IHRydWUgKSB7XG5cblx0XHRcdC8vIGluc3RlYWQgb2YgdXNpbmcgYXR0cmlidXRlcywgdGhlIFdlYkdMIDIgY29kZSBwYXRoIGVuY29kZXMgbW9ycGggdGFyZ2V0c1xuXHRcdFx0Ly8gaW50byBhbiBhcnJheSBvZiBkYXRhIHRleHR1cmVzLiBFYWNoIGxheWVyIHJlcHJlc2VudHMgYSBzaW5nbGUgbW9ycGggdGFyZ2V0LlxuXG5cdFx0XHRjb25zdCBudW1iZXJPZk1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg7XG5cblx0XHRcdGxldCBlbnRyeSA9IG1vcnBoVGV4dHVyZXMuZ2V0KCBnZW9tZXRyeSApO1xuXG5cdFx0XHRpZiAoIGVudHJ5ID09PSB1bmRlZmluZWQgfHwgZW50cnkuY291bnQgIT09IG51bWJlck9mTW9ycGhUYXJnZXRzICkge1xuXG5cdFx0XHRcdGlmICggZW50cnkgIT09IHVuZGVmaW5lZCApIGVudHJ5LnRleHR1cmUuZGlzcG9zZSgpO1xuXG5cdFx0XHRcdGNvbnN0IGhhc01vcnBoTm9ybWFscyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwgIT09IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRcdGNvbnN0IG1vcnBoTm9ybWFscyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwgfHwgW107XG5cblx0XHRcdFx0Y29uc3QgbnVtYmVyT2ZWZXJ0aWNlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQ7XG5cdFx0XHRcdGNvbnN0IG51bWJlck9mVmVydGV4RGF0YSA9ICggaGFzTW9ycGhOb3JtYWxzID09PSB0cnVlICkgPyAyIDogMTsgLy8gKHYsbikgdnMuICh2KVxuXG5cdFx0XHRcdGxldCB3aWR0aCA9IG51bWJlck9mVmVydGljZXMgKiBudW1iZXJPZlZlcnRleERhdGE7XG5cdFx0XHRcdGxldCBoZWlnaHQgPSAxO1xuXG5cdFx0XHRcdGlmICggd2lkdGggPiBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUgKSB7XG5cblx0XHRcdFx0XHRoZWlnaHQgPSBNYXRoLmNlaWwoIHdpZHRoIC8gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplICk7XG5cdFx0XHRcdFx0d2lkdGggPSBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoIHdpZHRoICogaGVpZ2h0ICogNCAqIG51bWJlck9mTW9ycGhUYXJnZXRzICk7XG5cblx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZTJEQXJyYXkoIGJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgbnVtYmVyT2ZNb3JwaFRhcmdldHMgKTtcblx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSBSR0JBRm9ybWF0OyAvLyB1c2luZyBSR0JBIHNpbmNlIFJHQiBtaWdodCBiZSBlbXVsYXRlZCAoYW5kIGlzIHRodXMgc2xvd2VyKVxuXHRcdFx0XHR0ZXh0dXJlLnR5cGUgPSBGbG9hdFR5cGU7XG5cdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdC8vIGZpbGwgYnVmZmVyXG5cblx0XHRcdFx0Y29uc3QgdmVydGV4RGF0YVN0cmlkZSA9IG51bWJlck9mVmVydGV4RGF0YSAqIDQ7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZNb3JwaFRhcmdldHM7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgaSBdO1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoTm9ybWFsID0gbW9ycGhOb3JtYWxzWyBpIF07XG5cblx0XHRcdFx0XHRjb25zdCBvZmZzZXQgPSB3aWR0aCAqIGhlaWdodCAqIDQgKiBpO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgbW9ycGhUYXJnZXQuY291bnQ7IGogKysgKSB7XG5cblx0XHRcdFx0XHRcdG1vcnBoLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG1vcnBoVGFyZ2V0LCBqICk7XG5cblx0XHRcdFx0XHRcdGlmICggbW9ycGhUYXJnZXQubm9ybWFsaXplZCA9PT0gdHJ1ZSApIGRlbm9ybWFsaXplKCBtb3JwaCwgbW9ycGhUYXJnZXQgKTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWRlID0gaiAqIHZlcnRleERhdGFTdHJpZGU7XG5cblx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgMCBdID0gbW9ycGgueDtcblx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgMSBdID0gbW9ycGgueTtcblx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgMiBdID0gbW9ycGguejtcblx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgMyBdID0gMDtcblxuXHRcdFx0XHRcdFx0aWYgKCBoYXNNb3JwaE5vcm1hbHMgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0bW9ycGguZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhOb3JtYWwsIGogKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIG1vcnBoTm9ybWFsLm5vcm1hbGl6ZWQgPT09IHRydWUgKSBkZW5vcm1hbGl6ZSggbW9ycGgsIG1vcnBoTm9ybWFsICk7XG5cblx0XHRcdFx0XHRcdFx0YnVmZmVyWyBvZmZzZXQgKyBzdHJpZGUgKyA0IF0gPSBtb3JwaC54O1xuXHRcdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDUgXSA9IG1vcnBoLnk7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgNiBdID0gbW9ycGguejtcblx0XHRcdFx0XHRcdFx0YnVmZmVyWyBvZmZzZXQgKyBzdHJpZGUgKyA3IF0gPSAwO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVudHJ5ID0ge1xuXHRcdFx0XHRcdGNvdW50OiBudW1iZXJPZk1vcnBoVGFyZ2V0cyxcblx0XHRcdFx0XHR0ZXh0dXJlOiB0ZXh0dXJlLFxuXHRcdFx0XHRcdHNpemU6IG5ldyBWZWN0b3IyKCB3aWR0aCwgaGVpZ2h0IClcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRtb3JwaFRleHR1cmVzLnNldCggZ2VvbWV0cnksIGVudHJ5ICk7XG5cblx0XHRcdFx0ZnVuY3Rpb24gZGlzcG9zZVRleHR1cmUoKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLmRpc3Bvc2UoKTtcblxuXHRcdFx0XHRcdG1vcnBoVGV4dHVyZXMuZGVsZXRlKCBnZW9tZXRyeSApO1xuXG5cdFx0XHRcdFx0Z2VvbWV0cnkucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBkaXNwb3NlVGV4dHVyZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZW9tZXRyeS5hZGRFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIGRpc3Bvc2VUZXh0dXJlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9cblxuXHRcdFx0bGV0IG1vcnBoSW5mbHVlbmNlc1N1bSA9IDA7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG9iamVjdEluZmx1ZW5jZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1N1bSArPSBvYmplY3RJbmZsdWVuY2VzWyBpIF07XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW9ycGhCYXNlSW5mbHVlbmNlID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmUgPyAxIDogMSAtIG1vcnBoSW5mbHVlbmNlc1N1bTtcblxuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZScsIG1vcnBoQmFzZUluZmx1ZW5jZSApO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0SW5mbHVlbmNlcycsIG9iamVjdEluZmx1ZW5jZXMgKTtcblxuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0c1RleHR1cmUnLCBlbnRyeS50ZXh0dXJlLCB0ZXh0dXJlcyApO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0c1RleHR1cmVTaXplJywgZW50cnkuc2l6ZSApO1xuXG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBXaGVuIG9iamVjdCBkb2Vzbid0IGhhdmUgbW9ycGggdGFyZ2V0IGluZmx1ZW5jZXMgZGVmaW5lZCwgd2UgdHJlYXQgaXQgYXMgYSAwLWxlbmd0aCBhcnJheVxuXHRcdFx0Ly8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIHNldCB1cCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UgLyBtb3JwaFRhcmdldEluZmx1ZW5jZXNcblxuXHRcdFx0Y29uc3QgbGVuZ3RoID0gb2JqZWN0SW5mbHVlbmNlcyA9PT0gdW5kZWZpbmVkID8gMCA6IG9iamVjdEluZmx1ZW5jZXMubGVuZ3RoO1xuXG5cdFx0XHRsZXQgaW5mbHVlbmNlcyA9IGluZmx1ZW5jZXNMaXN0WyBnZW9tZXRyeS5pZCBdO1xuXG5cdFx0XHRpZiAoIGluZmx1ZW5jZXMgPT09IHVuZGVmaW5lZCB8fCBpbmZsdWVuY2VzLmxlbmd0aCAhPT0gbGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIGluaXRpYWxpc2UgbGlzdFxuXG5cdFx0XHRcdGluZmx1ZW5jZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRpbmZsdWVuY2VzWyBpIF0gPSBbIGksIDAgXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5mbHVlbmNlc0xpc3RbIGdlb21ldHJ5LmlkIF0gPSBpbmZsdWVuY2VzO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbGxlY3QgaW5mbHVlbmNlc1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW5mbHVlbmNlID0gaW5mbHVlbmNlc1sgaSBdO1xuXG5cdFx0XHRcdGluZmx1ZW5jZVsgMCBdID0gaTtcblx0XHRcdFx0aW5mbHVlbmNlWyAxIF0gPSBvYmplY3RJbmZsdWVuY2VzWyBpIF07XG5cblx0XHRcdH1cblxuXHRcdFx0aW5mbHVlbmNlcy5zb3J0KCBhYnNOdW1lcmljYWxTb3J0ICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDg7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBpIDwgbGVuZ3RoICYmIGluZmx1ZW5jZXNbIGkgXVsgMSBdICkge1xuXG5cdFx0XHRcdFx0d29ya0luZmx1ZW5jZXNbIGkgXVsgMCBdID0gaW5mbHVlbmNlc1sgaSBdWyAwIF07XG5cdFx0XHRcdFx0d29ya0luZmx1ZW5jZXNbIGkgXVsgMSBdID0gaW5mbHVlbmNlc1sgaSBdWyAxIF07XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzWyBpIF1bIDAgXSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzWyBpIF1bIDEgXSA9IDA7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHdvcmtJbmZsdWVuY2VzLnNvcnQoIG51bWVyaWNhbFNvcnQgKTtcblxuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgbW9ycGhOb3JtYWxzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtcblxuXHRcdFx0bGV0IG1vcnBoSW5mbHVlbmNlc1N1bSA9IDA7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW5mbHVlbmNlID0gd29ya0luZmx1ZW5jZXNbIGkgXTtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBpbmZsdWVuY2VbIDAgXTtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpbmZsdWVuY2VbIDEgXTtcblxuXHRcdFx0XHRpZiAoIGluZGV4ICE9PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSApIHtcblxuXHRcdFx0XHRcdGlmICggbW9ycGhUYXJnZXRzICYmIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSggJ21vcnBoVGFyZ2V0JyArIGkgKSAhPT0gbW9ycGhUYXJnZXRzWyBpbmRleCBdICkge1xuXG5cdFx0XHRcdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdtb3JwaFRhcmdldCcgKyBpLCBtb3JwaFRhcmdldHNbIGluZGV4IF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggbW9ycGhOb3JtYWxzICYmIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSggJ21vcnBoTm9ybWFsJyArIGkgKSAhPT0gbW9ycGhOb3JtYWxzWyBpbmRleCBdICkge1xuXG5cdFx0XHRcdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdtb3JwaE5vcm1hbCcgKyBpLCBtb3JwaE5vcm1hbHNbIGluZGV4IF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1sgaSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0bW9ycGhJbmZsdWVuY2VzU3VtICs9IHZhbHVlO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0cyAmJiBnZW9tZXRyeS5oYXNBdHRyaWJ1dGUoICdtb3JwaFRhcmdldCcgKyBpICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRcdGdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSggJ21vcnBoVGFyZ2V0JyArIGkgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggbW9ycGhOb3JtYWxzICYmIGdlb21ldHJ5Lmhhc0F0dHJpYnV0ZSggJ21vcnBoTm9ybWFsJyArIGkgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0Z2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCAnbW9ycGhOb3JtYWwnICsgaSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bW9ycGhJbmZsdWVuY2VzWyBpIF0gPSAwO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBHTFNMIHNoYWRlciB1c2VzIGZvcm11bGEgYmFzZWluZmx1ZW5jZSAqIGJhc2UgKyBzdW0odGFyZ2V0ICogaW5mbHVlbmNlKVxuXHRcdFx0Ly8gVGhpcyBhbGxvd3MgdXMgdG8gc3dpdGNoIGJldHdlZW4gYWJzb2x1dGUgbW9ycGhzIGFuZCByZWxhdGl2ZSBtb3JwaHMgd2l0aG91dCBjaGFuZ2luZyBzaGFkZXIgY29kZVxuXHRcdFx0Ly8gV2hlbiBiYXNlaW5mbHVlbmNlID0gMSAtIHN1bShpbmZsdWVuY2UpLCB0aGUgYWJvdmUgaXMgZXF1aXZhbGVudCB0byBzdW0oKHRhcmdldCAtIGJhc2UpICogaW5mbHVlbmNlKVxuXHRcdFx0Y29uc3QgbW9ycGhCYXNlSW5mbHVlbmNlID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmUgPyAxIDogMSAtIG1vcnBoSW5mbHVlbmNlc1N1bTtcblxuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZScsIG1vcnBoQmFzZUluZmx1ZW5jZSApO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBnbCwgJ21vcnBoVGFyZ2V0SW5mbHVlbmNlcycsIG1vcnBoSW5mbHVlbmNlcyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0dXBkYXRlOiB1cGRhdGVcblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMT2JqZWN0cyggZ2wsIGdlb21ldHJpZXMsIGF0dHJpYnV0ZXMsIGluZm8gKSB7XG5cblx0bGV0IHVwZGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gdXBkYXRlKCBvYmplY3QgKSB7XG5cblx0XHRjb25zdCBmcmFtZSA9IGluZm8ucmVuZGVyLmZyYW1lO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgYnVmZmVyZ2VvbWV0cnkgPSBnZW9tZXRyaWVzLmdldCggb2JqZWN0LCBnZW9tZXRyeSApO1xuXG5cdFx0Ly8gVXBkYXRlIG9uY2UgcGVyIGZyYW1lXG5cblx0XHRpZiAoIHVwZGF0ZU1hcC5nZXQoIGJ1ZmZlcmdlb21ldHJ5ICkgIT09IGZyYW1lICkge1xuXG5cdFx0XHRnZW9tZXRyaWVzLnVwZGF0ZSggYnVmZmVyZ2VvbWV0cnkgKTtcblxuXHRcdFx0dXBkYXRlTWFwLnNldCggYnVmZmVyZ2VvbWV0cnksIGZyYW1lICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggKSB7XG5cblx0XHRcdGlmICggb2JqZWN0Lmhhc0V2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25JbnN0YW5jZWRNZXNoRGlzcG9zZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRvYmplY3QuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbkluc3RhbmNlZE1lc2hEaXNwb3NlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcy51cGRhdGUoIG9iamVjdC5pbnN0YW5jZU1hdHJpeCwgMzQ5NjIgKTtcblxuXHRcdFx0aWYgKCBvYmplY3QuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZSggb2JqZWN0Lmluc3RhbmNlQ29sb3IsIDM0OTYyICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBidWZmZXJnZW9tZXRyeTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblxuXHRcdHVwZGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UoIGV2ZW50ICkge1xuXG5cdFx0Y29uc3QgaW5zdGFuY2VkTWVzaCA9IGV2ZW50LnRhcmdldDtcblxuXHRcdGluc3RhbmNlZE1lc2gucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbkluc3RhbmNlZE1lc2hEaXNwb3NlICk7XG5cblx0XHRhdHRyaWJ1dGVzLnJlbW92ZSggaW5zdGFuY2VkTWVzaC5pbnN0YW5jZU1hdHJpeCApO1xuXG5cdFx0aWYgKCBpbnN0YW5jZWRNZXNoLmluc3RhbmNlQ29sb3IgIT09IG51bGwgKSBhdHRyaWJ1dGVzLnJlbW92ZSggaW5zdGFuY2VkTWVzaC5pbnN0YW5jZUNvbG9yICk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cblx0XHR1cGRhdGU6IHVwZGF0ZSxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cblx0fTtcblxufVxuXG5jbGFzcyBEYXRhVGV4dHVyZTNEIGV4dGVuZHMgVGV4dHVyZSB7XG5cblx0Y29uc3RydWN0b3IoIGRhdGEgPSBudWxsLCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGRlcHRoID0gMSApIHtcblxuXHRcdC8vIFdlJ3JlIGdvaW5nIHRvIGFkZCAuc2V0WFhYKCkgbWV0aG9kcyBmb3Igc2V0dGluZyBwcm9wZXJ0aWVzIGxhdGVyLlxuXHRcdC8vIFVzZXJzIGNhbiBzdGlsbCBzZXQgaW4gRGF0YVRleHR1cmUzRCBkaXJlY3RseS5cblx0XHQvL1xuXHRcdC8vXHRjb25zdCB0ZXh0dXJlID0gbmV3IFRIUkVFLkRhdGFUZXh0dXJlM0QoIGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoICk7XG5cdFx0Ly8gXHR0ZXh0dXJlLmFuaXNvdHJvcHkgPSAxNjtcblx0XHQvL1xuXHRcdC8vIFNlZSAjMTQ4MzlcblxuXHRcdHN1cGVyKCBudWxsICk7XG5cblx0XHR0aGlzLmltYWdlID0geyBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9O1xuXG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblxuXHRcdHRoaXMud3JhcFIgPSBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuXG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7XG5cdFx0dGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxO1xuXG5cdH1cblxufVxuXG5EYXRhVGV4dHVyZTNELnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0QgPSB0cnVlO1xuXG4vKipcbiAqIFVuaWZvcm1zIG9mIGEgcHJvZ3JhbS5cbiAqIFRob3NlIGZvcm0gYSB0cmVlIHN0cnVjdHVyZSB3aXRoIGEgc3BlY2lhbCB0b3AtbGV2ZWwgY29udGFpbmVyIGZvciB0aGUgcm9vdCxcbiAqIHdoaWNoIHlvdSBnZXQgYnkgY2FsbGluZyAnbmV3IFdlYkdMVW5pZm9ybXMoIGdsLCBwcm9ncmFtICknLlxuICpcbiAqXG4gKiBQcm9wZXJ0aWVzIG9mIGlubmVyIG5vZGVzIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcjpcbiAqXG4gKiAuc2VxIC0gYXJyYXkgb2YgbmVzdGVkIHVuaWZvcm1zXG4gKiAubWFwIC0gbmVzdGVkIHVuaWZvcm1zIGJ5IG5hbWVcbiAqXG4gKlxuICogTWV0aG9kcyBvZiBhbGwgbm9kZXMgZXhjZXB0IHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyOlxuICpcbiAqIC5zZXRWYWx1ZSggZ2wsIHZhbHVlLCBbdGV4dHVyZXNdIClcbiAqXG4gKiBcdFx0dXBsb2FkcyBhIHVuaWZvcm0gdmFsdWUocylcbiAqICBcdHRoZSAndGV4dHVyZXMnIHBhcmFtZXRlciBpcyBuZWVkZWQgZm9yIHNhbXBsZXIgdW5pZm9ybXNcbiAqXG4gKlxuICogU3RhdGljIG1ldGhvZHMgb2YgdGhlIHRvcC1sZXZlbCBjb250YWluZXIgKHRleHR1cmVzIGZhY3Rvcml6YXRpb25zKTpcbiAqXG4gKiAudXBsb2FkKCBnbCwgc2VxLCB2YWx1ZXMsIHRleHR1cmVzIClcbiAqXG4gKiBcdFx0c2V0cyB1bmlmb3JtcyBpbiAnc2VxJyB0byAndmFsdWVzW2lkXS52YWx1ZSdcbiAqXG4gKiAuc2VxV2l0aFZhbHVlKCBzZXEsIHZhbHVlcyApIDogZmlsdGVyZWRTZXFcbiAqXG4gKiBcdFx0ZmlsdGVycyAnc2VxJyBlbnRyaWVzIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2YWx1ZXNcbiAqXG4gKlxuICogTWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAodGV4dHVyZXMgZmFjdG9yaXphdGlvbnMpOlxuICpcbiAqIC5zZXRWYWx1ZSggZ2wsIG5hbWUsIHZhbHVlLCB0ZXh0dXJlcyApXG4gKlxuICogXHRcdHNldHMgdW5pZm9ybSB3aXRoICBuYW1lICduYW1lJyB0byAndmFsdWUnXG4gKlxuICogLnNldE9wdGlvbmFsKCBnbCwgb2JqLCBwcm9wIClcbiAqXG4gKiBcdFx0bGlrZSAuc2V0IGZvciBhbiBvcHRpb25hbCBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5cbmNvbnN0IGVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7XG5jb25zdCBlbXB0eVRleHR1cmUyZEFycmF5ID0gbmV3IERhdGFUZXh0dXJlMkRBcnJheSgpO1xuY29uc3QgZW1wdHlUZXh0dXJlM2QgPSBuZXcgRGF0YVRleHR1cmUzRCgpO1xuY29uc3QgZW1wdHlDdWJlVGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpO1xuXG4vLyAtLS0gVXRpbGl0aWVzIC0tLVxuXG4vLyBBcnJheSBDYWNoZXMgKHByb3ZpZGUgdHlwZWQgYXJyYXlzIGZvciB0ZW1wb3JhcnkgYnkgc2l6ZSlcblxuY29uc3QgYXJyYXlDYWNoZUYzMiA9IFtdO1xuY29uc3QgYXJyYXlDYWNoZUkzMiA9IFtdO1xuXG4vLyBGbG9hdDMyQXJyYXkgY2FjaGVzIHVzZWQgZm9yIHVwbG9hZGluZyBNYXRyaXggdW5pZm9ybXNcblxuY29uc3QgbWF0NGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSggMTYgKTtcbmNvbnN0IG1hdDNhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoIDkgKTtcbmNvbnN0IG1hdDJhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoIDQgKTtcblxuLy8gRmxhdHRlbmluZyBmb3IgYXJyYXlzIG9mIHZlY3RvcnMgYW5kIG1hdHJpY2VzXG5cbmZ1bmN0aW9uIGZsYXR0ZW4oIGFycmF5LCBuQmxvY2tzLCBibG9ja1NpemUgKSB7XG5cblx0Y29uc3QgZmlyc3RFbGVtID0gYXJyYXlbIDAgXTtcblxuXHRpZiAoIGZpcnN0RWxlbSA8PSAwIHx8IGZpcnN0RWxlbSA+IDAgKSByZXR1cm4gYXJyYXk7XG5cdC8vIHVub3B0aW1pemVkOiAhIGlzTmFOKCBmaXJzdEVsZW0gKVxuXHQvLyBzZWUgaHR0cDovL2phY2tzb25kdW5zdGFuLmNvbS9hcnRpY2xlcy85ODNcblxuXHRjb25zdCBuID0gbkJsb2NrcyAqIGJsb2NrU2l6ZTtcblx0bGV0IHIgPSBhcnJheUNhY2hlRjMyWyBuIF07XG5cblx0aWYgKCByID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRyID0gbmV3IEZsb2F0MzJBcnJheSggbiApO1xuXHRcdGFycmF5Q2FjaGVGMzJbIG4gXSA9IHI7XG5cblx0fVxuXG5cdGlmICggbkJsb2NrcyAhPT0gMCApIHtcblxuXHRcdGZpcnN0RWxlbS50b0FycmF5KCByLCAwICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDEsIG9mZnNldCA9IDA7IGkgIT09IG5CbG9ja3M7ICsrIGkgKSB7XG5cblx0XHRcdG9mZnNldCArPSBibG9ja1NpemU7XG5cdFx0XHRhcnJheVsgaSBdLnRvQXJyYXkoIHIsIG9mZnNldCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gcjtcblxufVxuXG5mdW5jdGlvbiBhcnJheXNFcXVhbCggYSwgYiApIHtcblxuXHRpZiAoIGEubGVuZ3RoICE9PSBiLmxlbmd0aCApIHJldHVybiBmYWxzZTtcblxuXHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBhLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRpZiAoIGFbIGkgXSAhPT0gYlsgaSBdICkgcmV0dXJuIGZhbHNlO1xuXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcblxufVxuXG5mdW5jdGlvbiBjb3B5QXJyYXkoIGEsIGIgKSB7XG5cblx0Zm9yICggbGV0IGkgPSAwLCBsID0gYi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0YVsgaSBdID0gYlsgaSBdO1xuXG5cdH1cblxufVxuXG4vLyBUZXh0dXJlIHVuaXQgYWxsb2NhdGlvblxuXG5mdW5jdGlvbiBhbGxvY1RleFVuaXRzKCB0ZXh0dXJlcywgbiApIHtcblxuXHRsZXQgciA9IGFycmF5Q2FjaGVJMzJbIG4gXTtcblxuXHRpZiAoIHIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdHIgPSBuZXcgSW50MzJBcnJheSggbiApO1xuXHRcdGFycmF5Q2FjaGVJMzJbIG4gXSA9IHI7XG5cblx0fVxuXG5cdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdHJbIGkgXSA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHR9XG5cblx0cmV0dXJuIHI7XG5cbn1cblxuLy8gLS0tIFNldHRlcnMgLS0tXG5cbi8vIE5vdGU6IERlZmluaW5nIHRoZXNlIG1ldGhvZHMgZXh0ZXJuYWxseSwgYmVjYXVzZSB0aGV5IGNvbWUgaW4gYSBidW5jaFxuLy8gYW5kIHRoaXMgd2F5IHRoZWlyIG5hbWVzIG1pbmlmeS5cblxuLy8gU2luZ2xlIHNjYWxhclxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxZiggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggY2FjaGVbIDAgXSA9PT0gdiApIHJldHVybjtcblxuXHRnbC51bmlmb3JtMWYoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNhY2hlWyAwIF0gPSB2O1xuXG59XG5cbi8vIFNpbmdsZSBmbG9hdCB2ZWN0b3IgKGZyb20gZmxhdCBhcnJheSBvciBUSFJFRS5WZWN0b3JOKVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYyZiggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggdi54ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRpZiAoIGNhY2hlWyAwIF0gIT09IHYueCB8fCBjYWNoZVsgMSBdICE9PSB2LnkgKSB7XG5cblx0XHRcdGdsLnVuaWZvcm0yZiggdGhpcy5hZGRyLCB2LngsIHYueSApO1xuXG5cdFx0XHRjYWNoZVsgMCBdID0gdi54O1xuXHRcdFx0Y2FjaGVbIDEgXSA9IHYueTtcblxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRcdGdsLnVuaWZvcm0yZnYoIHRoaXMuYWRkciwgdiApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzZiggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggdi54ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRpZiAoIGNhY2hlWyAwIF0gIT09IHYueCB8fCBjYWNoZVsgMSBdICE9PSB2LnkgfHwgY2FjaGVbIDIgXSAhPT0gdi56ICkge1xuXG5cdFx0XHRnbC51bmlmb3JtM2YoIHRoaXMuYWRkciwgdi54LCB2LnksIHYueiApO1xuXG5cdFx0XHRjYWNoZVsgMCBdID0gdi54O1xuXHRcdFx0Y2FjaGVbIDEgXSA9IHYueTtcblx0XHRcdGNhY2hlWyAyIF0gPSB2Lno7XG5cblx0XHR9XG5cblx0fSBlbHNlIGlmICggdi5yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRpZiAoIGNhY2hlWyAwIF0gIT09IHYuciB8fCBjYWNoZVsgMSBdICE9PSB2LmcgfHwgY2FjaGVbIDIgXSAhPT0gdi5iICkge1xuXG5cdFx0XHRnbC51bmlmb3JtM2YoIHRoaXMuYWRkciwgdi5yLCB2LmcsIHYuYiApO1xuXG5cdFx0XHRjYWNoZVsgMCBdID0gdi5yO1xuXHRcdFx0Y2FjaGVbIDEgXSA9IHYuZztcblx0XHRcdGNhY2hlWyAyIF0gPSB2LmI7XG5cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0XHRnbC51bmlmb3JtM2Z2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGYoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIHYueCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBjYWNoZVsgMCBdICE9PSB2LnggfHwgY2FjaGVbIDEgXSAhPT0gdi55IHx8IGNhY2hlWyAyIF0gIT09IHYueiB8fCBjYWNoZVsgMyBdICE9PSB2LncgKSB7XG5cblx0XHRcdGdsLnVuaWZvcm00ZiggdGhpcy5hZGRyLCB2LngsIHYueSwgdi56LCB2LncgKTtcblxuXHRcdFx0Y2FjaGVbIDAgXSA9IHYueDtcblx0XHRcdGNhY2hlWyAxIF0gPSB2Lnk7XG5cdFx0XHRjYWNoZVsgMiBdID0gdi56O1xuXHRcdFx0Y2FjaGVbIDMgXSA9IHYudztcblxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRcdGdsLnVuaWZvcm00ZnYoIHRoaXMuYWRkciwgdiApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG5cdH1cblxufVxuXG4vLyBTaW5nbGUgbWF0cml4IChmcm9tIGZsYXQgYXJyYXkgb3IgVEhSRUUuTWF0cml4TilcblxuZnVuY3Rpb24gc2V0VmFsdWVNMiggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRjb25zdCBlbGVtZW50cyA9IHYuZWxlbWVudHM7XG5cblx0aWYgKCBlbGVtZW50cyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRcdGdsLnVuaWZvcm1NYXRyaXgyZnYoIHRoaXMuYWRkciwgZmFsc2UsIHYgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIGVsZW1lbnRzICkgKSByZXR1cm47XG5cblx0XHRtYXQyYXJyYXkuc2V0KCBlbGVtZW50cyApO1xuXG5cdFx0Z2wudW5pZm9ybU1hdHJpeDJmdiggdGhpcy5hZGRyLCBmYWxzZSwgbWF0MmFycmF5ICk7XG5cblx0XHRjb3B5QXJyYXkoIGNhY2hlLCBlbGVtZW50cyApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU0zKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IGVsZW1lbnRzID0gdi5lbGVtZW50cztcblxuXHRpZiAoIGVsZW1lbnRzID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdFx0Z2wudW5pZm9ybU1hdHJpeDNmdiggdGhpcy5hZGRyLCBmYWxzZSwgdiApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZWxlbWVudHMgKSApIHJldHVybjtcblxuXHRcdG1hdDNhcnJheS5zZXQoIGVsZW1lbnRzICk7XG5cblx0XHRnbC51bmlmb3JtTWF0cml4M2Z2KCB0aGlzLmFkZHIsIGZhbHNlLCBtYXQzYXJyYXkgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIGVsZW1lbnRzICk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlTTQoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgZWxlbWVudHMgPSB2LmVsZW1lbnRzO1xuXG5cdGlmICggZWxlbWVudHMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0XHRnbC51bmlmb3JtTWF0cml4NGZ2KCB0aGlzLmFkZHIsIGZhbHNlLCB2ICk7XG5cblx0XHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCBlbGVtZW50cyApICkgcmV0dXJuO1xuXG5cdFx0bWF0NGFycmF5LnNldCggZWxlbWVudHMgKTtcblxuXHRcdGdsLnVuaWZvcm1NYXRyaXg0ZnYoIHRoaXMuYWRkciwgZmFsc2UsIG1hdDRhcnJheSApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgZWxlbWVudHMgKTtcblxuXHR9XG5cbn1cblxuLy8gU2luZ2xlIGludGVnZXIgLyBib29sZWFuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjFpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBjYWNoZVsgMCBdID09PSB2ICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm0xaSggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y2FjaGVbIDAgXSA9IHY7XG5cbn1cblxuLy8gU2luZ2xlIGludGVnZXIgLyBib29sZWFuIHZlY3RvciAoZnJvbSBmbGF0IGFycmF5KVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYyaSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTJpdiggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjNpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRnbC51bmlmb3JtM2l2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm00aXYoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxufVxuXG4vLyBTaW5nbGUgdW5zaWduZWQgaW50ZWdlclxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxdWkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGNhY2hlWyAwIF0gPT09IHYgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTF1aSggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y2FjaGVbIDAgXSA9IHY7XG5cbn1cblxuLy8gU2luZ2xlIHVuc2lnbmVkIGludGVnZXIgdmVjdG9yIChmcm9tIGZsYXQgYXJyYXkpXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJ1aSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTJ1aXYoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzdWkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm0zdWl2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNHVpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRnbC51bmlmb3JtNHVpdiggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG59XG5cblxuLy8gU2luZ2xlIHRleHR1cmUgKDJEIC8gQ3ViZSlcblxuZnVuY3Rpb24gc2V0VmFsdWVUMSggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoIGNhY2hlWyAwIF0gIT09IHVuaXQgKSB7XG5cblx0XHRnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdW5pdCApO1xuXHRcdGNhY2hlWyAwIF0gPSB1bml0O1xuXG5cdH1cblxuXHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEKCB2IHx8IGVtcHR5VGV4dHVyZSwgdW5pdCApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDNEMSggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoIGNhY2hlWyAwIF0gIT09IHVuaXQgKSB7XG5cblx0XHRnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdW5pdCApO1xuXHRcdGNhY2hlWyAwIF0gPSB1bml0O1xuXG5cdH1cblxuXHR0ZXh0dXJlcy5zZXRUZXh0dXJlM0QoIHYgfHwgZW1wdHlUZXh0dXJlM2QsIHVuaXQgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQ2KCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRjb25zdCB1bml0ID0gdGV4dHVyZXMuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO1xuXG5cdGlmICggY2FjaGVbIDAgXSAhPT0gdW5pdCApIHtcblxuXHRcdGdsLnVuaWZvcm0xaSggdGhpcy5hZGRyLCB1bml0ICk7XG5cdFx0Y2FjaGVbIDAgXSA9IHVuaXQ7XG5cblx0fVxuXG5cdHRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZSggdiB8fCBlbXB0eUN1YmVUZXh0dXJlLCB1bml0ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUMkRBcnJheTEoIGdsLCB2LCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKCBjYWNoZVsgMCBdICE9PSB1bml0ICkge1xuXG5cdFx0Z2wudW5pZm9ybTFpKCB0aGlzLmFkZHIsIHVuaXQgKTtcblx0XHRjYWNoZVsgMCBdID0gdW5pdDtcblxuXHR9XG5cblx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEQXJyYXkoIHYgfHwgZW1wdHlUZXh0dXJlMmRBcnJheSwgdW5pdCApO1xuXG59XG5cbi8vIEhlbHBlciB0byBwaWNrIHRoZSByaWdodCBzZXR0ZXIgZm9yIHRoZSBzaW5ndWxhciBjYXNlXG5cbmZ1bmN0aW9uIGdldFNpbmd1bGFyU2V0dGVyKCB0eXBlICkge1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cblx0XHRjYXNlIDB4MTQwNjogcmV0dXJuIHNldFZhbHVlVjFmOyAvLyBGTE9BVFxuXHRcdGNhc2UgMHg4YjUwOiByZXR1cm4gc2V0VmFsdWVWMmY7IC8vIF9WRUMyXG5cdFx0Y2FzZSAweDhiNTE6IHJldHVybiBzZXRWYWx1ZVYzZjsgLy8gX1ZFQzNcblx0XHRjYXNlIDB4OGI1MjogcmV0dXJuIHNldFZhbHVlVjRmOyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDhiNWE6IHJldHVybiBzZXRWYWx1ZU0yOyAvLyBfTUFUMlxuXHRcdGNhc2UgMHg4YjViOiByZXR1cm4gc2V0VmFsdWVNMzsgLy8gX01BVDNcblx0XHRjYXNlIDB4OGI1YzogcmV0dXJuIHNldFZhbHVlTTQ7IC8vIF9NQVQ0XG5cblx0XHRjYXNlIDB4MTQwNDogY2FzZSAweDhiNTY6IHJldHVybiBzZXRWYWx1ZVYxaTsgLy8gSU5ULCBCT09MXG5cdFx0Y2FzZSAweDhiNTM6IGNhc2UgMHg4YjU3OiByZXR1cm4gc2V0VmFsdWVWMmk7IC8vIF9WRUMyXG5cdFx0Y2FzZSAweDhiNTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4gc2V0VmFsdWVWM2k7IC8vIF9WRUMzXG5cdFx0Y2FzZSAweDhiNTU6IGNhc2UgMHg4YjU5OiByZXR1cm4gc2V0VmFsdWVWNGk7IC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4MTQwNTogcmV0dXJuIHNldFZhbHVlVjF1aTsgLy8gVUlOVFxuXHRcdGNhc2UgMHg4ZGM2OiByZXR1cm4gc2V0VmFsdWVWMnVpOyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4ZGM3OiByZXR1cm4gc2V0VmFsdWVWM3VpOyAvLyBfVkVDM1xuXHRcdGNhc2UgMHg4ZGM4OiByZXR1cm4gc2V0VmFsdWVWNHVpOyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDhiNWU6IC8vIFNBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGQ2NjogLy8gU0FNUExFUl9FWFRFUk5BTF9PRVNcblx0XHRjYXNlIDB4OGRjYTogLy8gSU5UX1NBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGRkMjogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGI2MjogLy8gU0FNUExFUl8yRF9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQxO1xuXG5cdFx0Y2FzZSAweDhiNWY6IC8vIFNBTVBMRVJfM0Rcblx0XHRjYXNlIDB4OGRjYjogLy8gSU5UX1NBTVBMRVJfM0Rcblx0XHRjYXNlIDB4OGRkMzogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfM0Rcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQzRDE7XG5cblx0XHRjYXNlIDB4OGI2MDogLy8gU0FNUExFUl9DVUJFXG5cdFx0Y2FzZSAweDhkY2M6IC8vIElOVF9TQU1QTEVSX0NVQkVcblx0XHRjYXNlIDB4OGRkNDogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRVxuXHRcdGNhc2UgMHg4ZGM1OiAvLyBTQU1QTEVSX0NVQkVfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUNjtcblxuXHRcdGNhc2UgMHg4ZGMxOiAvLyBTQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkY2Y6IC8vIElOVF9TQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkZDc6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkYzQ6IC8vIFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMkRBcnJheTE7XG5cblx0fVxuXG59XG5cblxuLy8gQXJyYXkgb2Ygc2NhbGFyc1xuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxZkFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtMWZ2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG4vLyBBcnJheSBvZiB2ZWN0b3JzIChmcm9tIGZsYXQgYXJyYXkgb3IgYXJyYXkgb2YgVEhSRUUuVmVjdG9yTilcblxuZnVuY3Rpb24gc2V0VmFsdWVWMmZBcnJheSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgMiApO1xuXG5cdGdsLnVuaWZvcm0yZnYoIHRoaXMuYWRkciwgZGF0YSApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjNmQXJyYXkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDMgKTtcblxuXHRnbC51bmlmb3JtM2Z2KCB0aGlzLmFkZHIsIGRhdGEgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVY0ZkFycmF5KCBnbCwgdiApIHtcblxuXHRjb25zdCBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCA0ICk7XG5cblx0Z2wudW5pZm9ybTRmdiggdGhpcy5hZGRyLCBkYXRhICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgbWF0cmljZXMgKGZyb20gZmxhdCBhcnJheSBvciBhcnJheSBvZiBUSFJFRS5NYXRyaXhOKVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU0yQXJyYXkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDQgKTtcblxuXHRnbC51bmlmb3JtTWF0cml4MmZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBkYXRhICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVNM0FycmF5KCBnbCwgdiApIHtcblxuXHRjb25zdCBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCA5ICk7XG5cblx0Z2wudW5pZm9ybU1hdHJpeDNmdiggdGhpcy5hZGRyLCBmYWxzZSwgZGF0YSApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlTTRBcnJheSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgMTYgKTtcblxuXHRnbC51bmlmb3JtTWF0cml4NGZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBkYXRhICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgaW50ZWdlciAvIGJvb2xlYW5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMWlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTFpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgaW50ZWdlciAvIGJvb2xlYW4gdmVjdG9ycyAoZnJvbSBmbGF0IGFycmF5KVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYyaUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtMml2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzaUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtM2l2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVY0aUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtNGl2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG4vLyBBcnJheSBvZiB1bnNpZ25lZCBpbnRlZ2VyXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjF1aUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtMXVpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlciB2ZWN0b3JzIChmcm9tIGZsYXQgYXJyYXkpXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJ1aUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtMnVpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM3VpQXJyYXkoIGdsLCB2ICkge1xuXG5cdGdsLnVuaWZvcm0zdWl2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVY0dWlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTR1aXYoIHRoaXMuYWRkciwgdiApO1xuXG59XG5cblxuLy8gQXJyYXkgb2YgdGV4dHVyZXMgKDJEIC8gM0QgLyBDdWJlIC8gMkRBcnJheSlcblxuZnVuY3Rpb24gc2V0VmFsdWVUMUFycmF5KCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXG5cdGNvbnN0IHVuaXRzID0gYWxsb2NUZXhVbml0cyggdGV4dHVyZXMsIG4gKTtcblxuXHRnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRCggdlsgaSBdIHx8IGVtcHR5VGV4dHVyZSwgdW5pdHNbIGkgXSApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQzREFycmF5KCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXG5cdGNvbnN0IHVuaXRzID0gYWxsb2NUZXhVbml0cyggdGV4dHVyZXMsIG4gKTtcblxuXHRnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKCB2WyBpIF0gfHwgZW1wdHlUZXh0dXJlM2QsIHVuaXRzWyBpIF0gKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUNkFycmF5KCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXG5cdGNvbnN0IHVuaXRzID0gYWxsb2NUZXhVbml0cyggdGV4dHVyZXMsIG4gKTtcblxuXHRnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlKCB2WyBpIF0gfHwgZW1wdHlDdWJlVGV4dHVyZSwgdW5pdHNbIGkgXSApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQyREFycmF5QXJyYXkoIGdsLCB2LCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCBuID0gdi5sZW5ndGg7XG5cblx0Y29uc3QgdW5pdHMgPSBhbGxvY1RleFVuaXRzKCB0ZXh0dXJlcywgbiApO1xuXG5cdGdsLnVuaWZvcm0xaXYoIHRoaXMuYWRkciwgdW5pdHMgKTtcblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkRBcnJheSggdlsgaSBdIHx8IGVtcHR5VGV4dHVyZTJkQXJyYXksIHVuaXRzWyBpIF0gKTtcblxuXHR9XG5cbn1cblxuXG4vLyBIZWxwZXIgdG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciBhIHB1cmUgKGJvdHRvbS1sZXZlbCkgYXJyYXlcblxuZnVuY3Rpb24gZ2V0UHVyZUFycmF5U2V0dGVyKCB0eXBlICkge1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cblx0XHRjYXNlIDB4MTQwNjogcmV0dXJuIHNldFZhbHVlVjFmQXJyYXk7IC8vIEZMT0FUXG5cdFx0Y2FzZSAweDhiNTA6IHJldHVybiBzZXRWYWx1ZVYyZkFycmF5OyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4YjUxOiByZXR1cm4gc2V0VmFsdWVWM2ZBcnJheTsgLy8gX1ZFQzNcblx0XHRjYXNlIDB4OGI1MjogcmV0dXJuIHNldFZhbHVlVjRmQXJyYXk7IC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4OGI1YTogcmV0dXJuIHNldFZhbHVlTTJBcnJheTsgLy8gX01BVDJcblx0XHRjYXNlIDB4OGI1YjogcmV0dXJuIHNldFZhbHVlTTNBcnJheTsgLy8gX01BVDNcblx0XHRjYXNlIDB4OGI1YzogcmV0dXJuIHNldFZhbHVlTTRBcnJheTsgLy8gX01BVDRcblxuXHRcdGNhc2UgMHgxNDA0OiBjYXNlIDB4OGI1NjogcmV0dXJuIHNldFZhbHVlVjFpQXJyYXk7IC8vIElOVCwgQk9PTFxuXHRcdGNhc2UgMHg4YjUzOiBjYXNlIDB4OGI1NzogcmV0dXJuIHNldFZhbHVlVjJpQXJyYXk7IC8vIF9WRUMyXG5cdFx0Y2FzZSAweDhiNTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4gc2V0VmFsdWVWM2lBcnJheTsgLy8gX1ZFQzNcblx0XHRjYXNlIDB4OGI1NTogY2FzZSAweDhiNTk6IHJldHVybiBzZXRWYWx1ZVY0aUFycmF5OyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDE0MDU6IHJldHVybiBzZXRWYWx1ZVYxdWlBcnJheTsgLy8gVUlOVFxuXHRcdGNhc2UgMHg4ZGM2OiByZXR1cm4gc2V0VmFsdWVWMnVpQXJyYXk7IC8vIF9WRUMyXG5cdFx0Y2FzZSAweDhkYzc6IHJldHVybiBzZXRWYWx1ZVYzdWlBcnJheTsgLy8gX1ZFQzNcblx0XHRjYXNlIDB4OGRjODogcmV0dXJuIHNldFZhbHVlVjR1aUFycmF5OyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDhiNWU6IC8vIFNBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGQ2NjogLy8gU0FNUExFUl9FWFRFUk5BTF9PRVNcblx0XHRjYXNlIDB4OGRjYTogLy8gSU5UX1NBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGRkMjogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRcblx0XHRjYXNlIDB4OGI2MjogLy8gU0FNUExFUl8yRF9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQxQXJyYXk7XG5cblx0XHRjYXNlIDB4OGI1ZjogLy8gU0FNUExFUl8zRFxuXHRcdGNhc2UgMHg4ZGNiOiAvLyBJTlRfU0FNUExFUl8zRFxuXHRcdGNhc2UgMHg4ZGQzOiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl8zRFxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDNEQXJyYXk7XG5cblx0XHRjYXNlIDB4OGI2MDogLy8gU0FNUExFUl9DVUJFXG5cdFx0Y2FzZSAweDhkY2M6IC8vIElOVF9TQU1QTEVSX0NVQkVcblx0XHRjYXNlIDB4OGRkNDogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRVxuXHRcdGNhc2UgMHg4ZGM1OiAvLyBTQU1QTEVSX0NVQkVfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUNkFycmF5O1xuXG5cdFx0Y2FzZSAweDhkYzE6IC8vIFNBTVBMRVJfMkRfQVJSQVlcblx0XHRjYXNlIDB4OGRjZjogLy8gSU5UX1NBTVBMRVJfMkRfQVJSQVlcblx0XHRjYXNlIDB4OGRkNzogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVlcblx0XHRjYXNlIDB4OGRjNDogLy8gU0FNUExFUl8yRF9BUlJBWV9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQyREFycmF5QXJyYXk7XG5cblx0fVxuXG59XG5cbi8vIC0tLSBVbmlmb3JtIENsYXNzZXMgLS0tXG5cbmZ1bmN0aW9uIFNpbmdsZVVuaWZvcm0oIGlkLCBhY3RpdmVJbmZvLCBhZGRyICkge1xuXG5cdHRoaXMuaWQgPSBpZDtcblx0dGhpcy5hZGRyID0gYWRkcjtcblx0dGhpcy5jYWNoZSA9IFtdO1xuXHR0aGlzLnNldFZhbHVlID0gZ2V0U2luZ3VsYXJTZXR0ZXIoIGFjdGl2ZUluZm8udHlwZSApO1xuXG5cdC8vIHRoaXMucGF0aCA9IGFjdGl2ZUluZm8ubmFtZTsgLy8gREVCVUdcblxufVxuXG5mdW5jdGlvbiBQdXJlQXJyYXlVbmlmb3JtKCBpZCwgYWN0aXZlSW5mbywgYWRkciApIHtcblxuXHR0aGlzLmlkID0gaWQ7XG5cdHRoaXMuYWRkciA9IGFkZHI7XG5cdHRoaXMuY2FjaGUgPSBbXTtcblx0dGhpcy5zaXplID0gYWN0aXZlSW5mby5zaXplO1xuXHR0aGlzLnNldFZhbHVlID0gZ2V0UHVyZUFycmF5U2V0dGVyKCBhY3RpdmVJbmZvLnR5cGUgKTtcblxuXHQvLyB0aGlzLnBhdGggPSBhY3RpdmVJbmZvLm5hbWU7IC8vIERFQlVHXG5cbn1cblxuUHVyZUFycmF5VW5pZm9ybS5wcm90b3R5cGUudXBkYXRlQ2FjaGUgPSBmdW5jdGlvbiAoIGRhdGEgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSAmJiBjYWNoZS5sZW5ndGggIT09IGRhdGEubGVuZ3RoICkge1xuXG5cdFx0dGhpcy5jYWNoZSA9IG5ldyBGbG9hdDMyQXJyYXkoIGRhdGEubGVuZ3RoICk7XG5cblx0fVxuXG5cdGNvcHlBcnJheSggY2FjaGUsIGRhdGEgKTtcblxufTtcblxuZnVuY3Rpb24gU3RydWN0dXJlZFVuaWZvcm0oIGlkICkge1xuXG5cdHRoaXMuaWQgPSBpZDtcblxuXHR0aGlzLnNlcSA9IFtdO1xuXHR0aGlzLm1hcCA9IHt9O1xuXG59XG5cblN0cnVjdHVyZWRVbmlmb3JtLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICggZ2wsIHZhbHVlLCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCBzZXEgPSB0aGlzLnNlcTtcblxuXHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBzZXEubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0Y29uc3QgdSA9IHNlcVsgaSBdO1xuXHRcdHUuc2V0VmFsdWUoIGdsLCB2YWx1ZVsgdS5pZCBdLCB0ZXh0dXJlcyApO1xuXG5cdH1cblxufTtcblxuLy8gLS0tIFRvcC1sZXZlbCAtLS1cblxuLy8gUGFyc2VyIC0gYnVpbGRzIHVwIHRoZSBwcm9wZXJ0eSB0cmVlIGZyb20gdGhlIHBhdGggc3RyaW5nc1xuXG5jb25zdCBSZVBhdGhQYXJ0ID0gLyhcXHcrKShcXF0pPyhcXFt8XFwuKT8vZztcblxuLy8gZXh0cmFjdHNcbi8vIFx0LSB0aGUgaWRlbnRpZmllciAobWVtYmVyIG5hbWUgb3IgYXJyYXkgaW5kZXgpXG4vLyAgLSBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByaWdodCBicmFja2V0IChmb3VuZCB3aGVuIGFycmF5IGluZGV4KVxuLy8gIC0gZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgbGVmdCBicmFja2V0IG9yIGRvdCAodHlwZSBvZiBzdWJzY3JpcHQpXG4vL1xuLy8gTm90ZTogVGhlc2UgcG9ydGlvbnMgY2FuIGJlIHJlYWQgaW4gYSBub24tb3ZlcmxhcHBpbmcgZmFzaGlvbiBhbmRcbi8vIGFsbG93IHN0cmFpZ2h0Zm9yd2FyZCBwYXJzaW5nIG9mIHRoZSBoaWVyYXJjaHkgdGhhdCBXZWJHTCBlbmNvZGVzXG4vLyBpbiB0aGUgdW5pZm9ybSBuYW1lcy5cblxuZnVuY3Rpb24gYWRkVW5pZm9ybSggY29udGFpbmVyLCB1bmlmb3JtT2JqZWN0ICkge1xuXG5cdGNvbnRhaW5lci5zZXEucHVzaCggdW5pZm9ybU9iamVjdCApO1xuXHRjb250YWluZXIubWFwWyB1bmlmb3JtT2JqZWN0LmlkIF0gPSB1bmlmb3JtT2JqZWN0O1xuXG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5pZm9ybSggYWN0aXZlSW5mbywgYWRkciwgY29udGFpbmVyICkge1xuXG5cdGNvbnN0IHBhdGggPSBhY3RpdmVJbmZvLm5hbWUsXG5cdFx0cGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG5cdC8vIHJlc2V0IFJlZ0V4cCBvYmplY3QsIGJlY2F1c2Ugb2YgdGhlIGVhcmx5IGV4aXQgb2YgYSBwcmV2aW91cyBydW5cblx0UmVQYXRoUGFydC5sYXN0SW5kZXggPSAwO1xuXG5cdHdoaWxlICggdHJ1ZSApIHtcblxuXHRcdGNvbnN0IG1hdGNoID0gUmVQYXRoUGFydC5leGVjKCBwYXRoICksXG5cdFx0XHRtYXRjaEVuZCA9IFJlUGF0aFBhcnQubGFzdEluZGV4O1xuXG5cdFx0bGV0IGlkID0gbWF0Y2hbIDEgXTtcblx0XHRjb25zdCBpZElzSW5kZXggPSBtYXRjaFsgMiBdID09PSAnXScsXG5cdFx0XHRzdWJzY3JpcHQgPSBtYXRjaFsgMyBdO1xuXG5cdFx0aWYgKCBpZElzSW5kZXggKSBpZCA9IGlkIHwgMDsgLy8gY29udmVydCB0byBpbnRlZ2VyXG5cblx0XHRpZiAoIHN1YnNjcmlwdCA9PT0gdW5kZWZpbmVkIHx8IHN1YnNjcmlwdCA9PT0gJ1snICYmIG1hdGNoRW5kICsgMiA9PT0gcGF0aExlbmd0aCApIHtcblxuXHRcdFx0Ly8gYmFyZSBuYW1lIG9yIFwicHVyZVwiIGJvdHRvbS1sZXZlbCBhcnJheSBcIlswXVwiIHN1ZmZpeFxuXG5cdFx0XHRhZGRVbmlmb3JtKCBjb250YWluZXIsIHN1YnNjcmlwdCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0bmV3IFNpbmdsZVVuaWZvcm0oIGlkLCBhY3RpdmVJbmZvLCBhZGRyICkgOlxuXHRcdFx0XHRuZXcgUHVyZUFycmF5VW5pZm9ybSggaWQsIGFjdGl2ZUluZm8sIGFkZHIgKSApO1xuXG5cdFx0XHRicmVhaztcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHN0ZXAgaW50byBpbm5lciBub2RlIC8gY3JlYXRlIGl0IGluIGNhc2UgaXQgZG9lc24ndCBleGlzdFxuXG5cdFx0XHRjb25zdCBtYXAgPSBjb250YWluZXIubWFwO1xuXHRcdFx0bGV0IG5leHQgPSBtYXBbIGlkIF07XG5cblx0XHRcdGlmICggbmV4dCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdG5leHQgPSBuZXcgU3RydWN0dXJlZFVuaWZvcm0oIGlkICk7XG5cdFx0XHRcdGFkZFVuaWZvcm0oIGNvbnRhaW5lciwgbmV4dCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnRhaW5lciA9IG5leHQ7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbi8vIFJvb3QgQ29udGFpbmVyXG5cbmZ1bmN0aW9uIFdlYkdMVW5pZm9ybXMoIGdsLCBwcm9ncmFtICkge1xuXG5cdHRoaXMuc2VxID0gW107XG5cdHRoaXMubWFwID0ge307XG5cblx0Y29uc3QgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzE4ICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbjsgKysgaSApIHtcblxuXHRcdGNvbnN0IGluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKCBwcm9ncmFtLCBpICksXG5cdFx0XHRhZGRyID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCBpbmZvLm5hbWUgKTtcblxuXHRcdHBhcnNlVW5pZm9ybSggaW5mbywgYWRkciwgdGhpcyApO1xuXG5cdH1cblxufVxuXG5XZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICggZ2wsIG5hbWUsIHZhbHVlLCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCB1ID0gdGhpcy5tYXBbIG5hbWUgXTtcblxuXHRpZiAoIHUgIT09IHVuZGVmaW5lZCApIHUuc2V0VmFsdWUoIGdsLCB2YWx1ZSwgdGV4dHVyZXMgKTtcblxufTtcblxuV2ViR0xVbmlmb3Jtcy5wcm90b3R5cGUuc2V0T3B0aW9uYWwgPSBmdW5jdGlvbiAoIGdsLCBvYmplY3QsIG5hbWUgKSB7XG5cblx0Y29uc3QgdiA9IG9iamVjdFsgbmFtZSBdO1xuXG5cdGlmICggdiAhPT0gdW5kZWZpbmVkICkgdGhpcy5zZXRWYWx1ZSggZ2wsIG5hbWUsIHYgKTtcblxufTtcblxuXG4vLyBTdGF0aWMgaW50ZXJmYWNlXG5cbldlYkdMVW5pZm9ybXMudXBsb2FkID0gZnVuY3Rpb24gKCBnbCwgc2VxLCB2YWx1ZXMsIHRleHR1cmVzICkge1xuXG5cdGZvciAoIGxldCBpID0gMCwgbiA9IHNlcS5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRjb25zdCB1ID0gc2VxWyBpIF0sXG5cdFx0XHR2ID0gdmFsdWVzWyB1LmlkIF07XG5cblx0XHRpZiAoIHYubmVlZHNVcGRhdGUgIT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBub3RlOiBhbHdheXMgdXBkYXRpbmcgd2hlbiAubmVlZHNVcGRhdGUgaXMgdW5kZWZpbmVkXG5cdFx0XHR1LnNldFZhbHVlKCBnbCwgdi52YWx1ZSwgdGV4dHVyZXMgKTtcblxuXHRcdH1cblxuXHR9XG5cbn07XG5cbldlYkdMVW5pZm9ybXMuc2VxV2l0aFZhbHVlID0gZnVuY3Rpb24gKCBzZXEsIHZhbHVlcyApIHtcblxuXHRjb25zdCByID0gW107XG5cblx0Zm9yICggbGV0IGkgPSAwLCBuID0gc2VxLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdGNvbnN0IHUgPSBzZXFbIGkgXTtcblx0XHRpZiAoIHUuaWQgaW4gdmFsdWVzICkgci5wdXNoKCB1ICk7XG5cblx0fVxuXG5cdHJldHVybiByO1xuXG59O1xuXG5mdW5jdGlvbiBXZWJHTFNoYWRlciggZ2wsIHR5cGUsIHN0cmluZyApIHtcblxuXHRjb25zdCBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoIHR5cGUgKTtcblxuXHRnbC5zaGFkZXJTb3VyY2UoIHNoYWRlciwgc3RyaW5nICk7XG5cdGdsLmNvbXBpbGVTaGFkZXIoIHNoYWRlciApO1xuXG5cdHJldHVybiBzaGFkZXI7XG5cbn1cblxubGV0IHByb2dyYW1JZENvdW50ID0gMDtcblxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoIHN0cmluZyApIHtcblxuXHRjb25zdCBsaW5lcyA9IHN0cmluZy5zcGxpdCggJ1xcbicgKTtcblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRsaW5lc1sgaSBdID0gKCBpICsgMSApICsgJzogJyArIGxpbmVzWyBpIF07XG5cblx0fVxuXG5cdHJldHVybiBsaW5lcy5qb2luKCAnXFxuJyApO1xuXG59XG5cbmZ1bmN0aW9uIGdldEVuY29kaW5nQ29tcG9uZW50cyggZW5jb2RpbmcgKSB7XG5cblx0c3dpdGNoICggZW5jb2RpbmcgKSB7XG5cblx0XHRjYXNlIExpbmVhckVuY29kaW5nOlxuXHRcdFx0cmV0dXJuIFsgJ0xpbmVhcicsICcoIHZhbHVlICknIF07XG5cdFx0Y2FzZSBzUkdCRW5jb2Rpbmc6XG5cdFx0XHRyZXR1cm4gWyAnc1JHQicsICcoIHZhbHVlICknIF07XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6JywgZW5jb2RpbmcgKTtcblx0XHRcdHJldHVybiBbICdMaW5lYXInLCAnKCB2YWx1ZSApJyBdO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBnZXRTaGFkZXJFcnJvcnMoIGdsLCBzaGFkZXIsIHR5cGUgKSB7XG5cblx0Y29uc3Qgc3RhdHVzID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKCBzaGFkZXIsIDM1NzEzICk7XG5cdGNvbnN0IGVycm9ycyA9IGdsLmdldFNoYWRlckluZm9Mb2coIHNoYWRlciApLnRyaW0oKTtcblxuXHRpZiAoIHN0YXR1cyAmJiBlcnJvcnMgPT09ICcnICkgcmV0dXJuICcnO1xuXG5cdC8vIC0tZW5hYmxlLXByaXZpbGVnZWQtd2ViZ2wtZXh0ZW5zaW9uXG5cdC8vIGNvbnNvbGUubG9nKCAnKionICsgdHlwZSArICcqKicsIGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2RlYnVnX3NoYWRlcnMnICkuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSggc2hhZGVyICkgKTtcblxuXHRyZXR1cm4gdHlwZS50b1VwcGVyQ2FzZSgpICsgJ1xcblxcbicgKyBlcnJvcnMgKyAnXFxuXFxuJyArIGFkZExpbmVOdW1iZXJzKCBnbC5nZXRTaGFkZXJTb3VyY2UoIHNoYWRlciApICk7XG5cbn1cblxuZnVuY3Rpb24gZ2V0VGV4ZWxFbmNvZGluZ0Z1bmN0aW9uKCBmdW5jdGlvbk5hbWUsIGVuY29kaW5nICkge1xuXG5cdGNvbnN0IGNvbXBvbmVudHMgPSBnZXRFbmNvZGluZ0NvbXBvbmVudHMoIGVuY29kaW5nICk7XG5cdHJldHVybiAndmVjNCAnICsgZnVuY3Rpb25OYW1lICsgJyggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvJyArIGNvbXBvbmVudHNbIDAgXSArIGNvbXBvbmVudHNbIDEgXSArICc7IH0nO1xuXG59XG5cbmZ1bmN0aW9uIGdldFRvbmVNYXBwaW5nRnVuY3Rpb24oIGZ1bmN0aW9uTmFtZSwgdG9uZU1hcHBpbmcgKSB7XG5cblx0bGV0IHRvbmVNYXBwaW5nTmFtZTtcblxuXHRzd2l0Y2ggKCB0b25lTWFwcGluZyApIHtcblxuXHRcdGNhc2UgTGluZWFyVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnTGluZWFyJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBSZWluaGFyZFRvbmVNYXBwaW5nOlxuXHRcdFx0dG9uZU1hcHBpbmdOYW1lID0gJ1JlaW5oYXJkJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBDaW5lb25Ub25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdPcHRpbWl6ZWRDaW5lb24nO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIEFDRVNGaWxtaWNUb25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdBQ0VTRmlsbWljJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBDdXN0b21Ub25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdDdXN0b20nO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzonLCB0b25lTWFwcGluZyApO1xuXHRcdFx0dG9uZU1hcHBpbmdOYW1lID0gJ0xpbmVhcic7XG5cblx0fVxuXG5cdHJldHVybiAndmVjMyAnICsgZnVuY3Rpb25OYW1lICsgJyggdmVjMyBjb2xvciApIHsgcmV0dXJuICcgKyB0b25lTWFwcGluZ05hbWUgKyAnVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0nO1xuXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXh0ZW5zaW9ucyggcGFyYW1ldGVycyApIHtcblxuXHRjb25zdCBjaHVua3MgPSBbXG5cdFx0KCBwYXJhbWV0ZXJzLmV4dGVuc2lvbkRlcml2YXRpdmVzIHx8IHBhcmFtZXRlcnMuZW52TWFwQ3ViZVVWIHx8IHBhcmFtZXRlcnMuYnVtcE1hcCB8fCBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCB8fCBwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCB8fCBwYXJhbWV0ZXJzLmZsYXRTaGFkaW5nIHx8IHBhcmFtZXRlcnMuc2hhZGVySUQgPT09ICdwaHlzaWNhbCcgKSA/ICcjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZScgOiAnJyxcblx0XHQoIHBhcmFtZXRlcnMuZXh0ZW5zaW9uRnJhZ0RlcHRoIHx8IHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciApICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGggPyAnI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZScgOiAnJyxcblx0XHQoIHBhcmFtZXRlcnMuZXh0ZW5zaW9uRHJhd0J1ZmZlcnMgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzICkgPyAnI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZScgOiAnJyxcblx0XHQoIHBhcmFtZXRlcnMuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRCB8fCBwYXJhbWV0ZXJzLmVudk1hcCB8fCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiApICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kID8gJyNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZScgOiAnJ1xuXHRdO1xuXG5cdHJldHVybiBjaHVua3MuZmlsdGVyKCBmaWx0ZXJFbXB0eUxpbmUgKS5qb2luKCAnXFxuJyApO1xuXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRGVmaW5lcyggZGVmaW5lcyApIHtcblxuXHRjb25zdCBjaHVua3MgPSBbXTtcblxuXHRmb3IgKCBjb25zdCBuYW1lIGluIGRlZmluZXMgKSB7XG5cblx0XHRjb25zdCB2YWx1ZSA9IGRlZmluZXNbIG5hbWUgXTtcblxuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkgY29udGludWU7XG5cblx0XHRjaHVua3MucHVzaCggJyNkZWZpbmUgJyArIG5hbWUgKyAnICcgKyB2YWx1ZSApO1xuXG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oICdcXG4nICk7XG5cbn1cblxuZnVuY3Rpb24gZmV0Y2hBdHRyaWJ1dGVMb2NhdGlvbnMoIGdsLCBwcm9ncmFtICkge1xuXG5cdGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcblxuXHRjb25zdCBuID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlciggcHJvZ3JhbSwgMzU3MjEgKTtcblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpICsrICkge1xuXG5cdFx0Y29uc3QgaW5mbyA9IGdsLmdldEFjdGl2ZUF0dHJpYiggcHJvZ3JhbSwgaSApO1xuXHRcdGNvbnN0IG5hbWUgPSBpbmZvLm5hbWU7XG5cblx0XHRsZXQgbG9jYXRpb25TaXplID0gMTtcblx0XHRpZiAoIGluZm8udHlwZSA9PT0gMzU2NzQgKSBsb2NhdGlvblNpemUgPSAyO1xuXHRcdGlmICggaW5mby50eXBlID09PSAzNTY3NSApIGxvY2F0aW9uU2l6ZSA9IDM7XG5cdFx0aWYgKCBpbmZvLnR5cGUgPT09IDM1Njc2ICkgbG9jYXRpb25TaXplID0gNDtcblxuXHRcdC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuV2ViR0xQcm9ncmFtOiBBQ1RJVkUgVkVSVEVYIEFUVFJJQlVURTonLCBuYW1lLCBpICk7XG5cblx0XHRhdHRyaWJ1dGVzWyBuYW1lIF0gPSB7XG5cdFx0XHR0eXBlOiBpbmZvLnR5cGUsXG5cdFx0XHRsb2NhdGlvbjogZ2wuZ2V0QXR0cmliTG9jYXRpb24oIHByb2dyYW0sIG5hbWUgKSxcblx0XHRcdGxvY2F0aW9uU2l6ZTogbG9jYXRpb25TaXplXG5cdFx0fTtcblxuXHR9XG5cblx0cmV0dXJuIGF0dHJpYnV0ZXM7XG5cbn1cblxuZnVuY3Rpb24gZmlsdGVyRW1wdHlMaW5lKCBzdHJpbmcgKSB7XG5cblx0cmV0dXJuIHN0cmluZyAhPT0gJyc7XG5cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUxpZ2h0TnVtcyggc3RyaW5nLCBwYXJhbWV0ZXJzICkge1xuXG5cdHJldHVybiBzdHJpbmdcblx0XHQucmVwbGFjZSggL05VTV9ESVJfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtRGlyTGlnaHRzIClcblx0XHQucmVwbGFjZSggL05VTV9TUE9UX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bVNwb3RMaWdodHMgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1SZWN0QXJlYUxpZ2h0cyApXG5cdFx0LnJlcGxhY2UoIC9OVU1fUE9JTlRfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtUG9pbnRMaWdodHMgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX0hFTUlfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtSGVtaUxpZ2h0cyApXG5cdFx0LnJlcGxhY2UoIC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1EaXJMaWdodFNoYWRvd3MgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLCBwYXJhbWV0ZXJzLm51bVNwb3RMaWdodFNoYWRvd3MgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1Qb2ludExpZ2h0U2hhZG93cyApO1xuXG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGlwcGluZ1BsYW5lTnVtcyggc3RyaW5nLCBwYXJhbWV0ZXJzICkge1xuXG5cdHJldHVybiBzdHJpbmdcblx0XHQucmVwbGFjZSggL05VTV9DTElQUElOR19QTEFORVMvZywgcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcyApXG5cdFx0LnJlcGxhY2UoIC9VTklPTl9DTElQUElOR19QTEFORVMvZywgKCBwYXJhbWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVzIC0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9uICkgKTtcblxufVxuXG4vLyBSZXNvbHZlIEluY2x1ZGVzXG5cbmNvbnN0IGluY2x1ZGVQYXR0ZXJuID0gL15bIFxcdF0qI2luY2x1ZGUgKzwoW1xcd1xcZC4vXSspPi9nbTtcblxuZnVuY3Rpb24gcmVzb2x2ZUluY2x1ZGVzKCBzdHJpbmcgKSB7XG5cblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBpbmNsdWRlUGF0dGVybiwgaW5jbHVkZVJlcGxhY2VyICk7XG5cbn1cblxuZnVuY3Rpb24gaW5jbHVkZVJlcGxhY2VyKCBtYXRjaCwgaW5jbHVkZSApIHtcblxuXHRjb25zdCBzdHJpbmcgPSBTaGFkZXJDaHVua1sgaW5jbHVkZSBdO1xuXG5cdGlmICggc3RyaW5nID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoICdDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCcgKyBpbmNsdWRlICsgJz4nICk7XG5cblx0fVxuXG5cdHJldHVybiByZXNvbHZlSW5jbHVkZXMoIHN0cmluZyApO1xuXG59XG5cbi8vIFVucm9sbCBMb29wc1xuXG5jb25zdCBkZXByZWNhdGVkVW5yb2xsTG9vcFBhdHRlcm4gPSAvI3ByYWdtYSB1bnJvbGxfbG9vcFtcXHNdKz9mb3IgXFwoIGludCBpIFxcPSAoXFxkKylcXDsgaSA8IChcXGQrKVxcOyBpIFxcK1xcKyBcXCkgXFx7KFtcXHNcXFNdKz8pKD89XFx9KVxcfS9nO1xuY29uc3QgdW5yb2xsTG9vcFBhdHRlcm4gPSAvI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxccytmb3JcXHMqXFwoXFxzKmludFxccytpXFxzKj1cXHMqKFxcZCspXFxzKjtcXHMqaVxccyo8XFxzKihcXGQrKVxccyo7XFxzKmlcXHMqXFwrXFwrXFxzKlxcKVxccyp7KFtcXHNcXFNdKz8pfVxccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO1xuXG5mdW5jdGlvbiB1bnJvbGxMb29wcyggc3RyaW5nICkge1xuXG5cdHJldHVybiBzdHJpbmdcblx0XHQucmVwbGFjZSggdW5yb2xsTG9vcFBhdHRlcm4sIGxvb3BSZXBsYWNlciApXG5cdFx0LnJlcGxhY2UoIGRlcHJlY2F0ZWRVbnJvbGxMb29wUGF0dGVybiwgZGVwcmVjYXRlZExvb3BSZXBsYWNlciApO1xuXG59XG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWRMb29wUmVwbGFjZXIoIG1hdGNoLCBzdGFydCwgZW5kLCBzbmlwcGV0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1dlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4nICk7XG5cdHJldHVybiBsb29wUmVwbGFjZXIoIG1hdGNoLCBzdGFydCwgZW5kLCBzbmlwcGV0ICk7XG5cbn1cblxuZnVuY3Rpb24gbG9vcFJlcGxhY2VyKCBtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCApIHtcblxuXHRsZXQgc3RyaW5nID0gJyc7XG5cblx0Zm9yICggbGV0IGkgPSBwYXJzZUludCggc3RhcnQgKTsgaSA8IHBhcnNlSW50KCBlbmQgKTsgaSArKyApIHtcblxuXHRcdHN0cmluZyArPSBzbmlwcGV0XG5cdFx0XHQucmVwbGFjZSggL1xcW1xccyppXFxzKlxcXS9nLCAnWyAnICsgaSArICcgXScgKVxuXHRcdFx0LnJlcGxhY2UoIC9VTlJPTExFRF9MT09QX0lOREVYL2csIGkgKTtcblxuXHR9XG5cblx0cmV0dXJuIHN0cmluZztcblxufVxuXG4vL1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVByZWNpc2lvbiggcGFyYW1ldGVycyApIHtcblxuXHRsZXQgcHJlY2lzaW9uc3RyaW5nID0gJ3ByZWNpc2lvbiAnICsgcGFyYW1ldGVycy5wcmVjaXNpb24gKyAnIGZsb2F0O1xcbnByZWNpc2lvbiAnICsgcGFyYW1ldGVycy5wcmVjaXNpb24gKyAnIGludDsnO1xuXG5cdGlmICggcGFyYW1ldGVycy5wcmVjaXNpb24gPT09ICdoaWdocCcgKSB7XG5cblx0XHRwcmVjaXNpb25zdHJpbmcgKz0gJ1xcbiNkZWZpbmUgSElHSF9QUkVDSVNJT04nO1xuXG5cdH0gZWxzZSBpZiAoIHBhcmFtZXRlcnMucHJlY2lzaW9uID09PSAnbWVkaXVtcCcgKSB7XG5cblx0XHRwcmVjaXNpb25zdHJpbmcgKz0gJ1xcbiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTic7XG5cblx0fSBlbHNlIGlmICggcGFyYW1ldGVycy5wcmVjaXNpb24gPT09ICdsb3dwJyApIHtcblxuXHRcdHByZWNpc2lvbnN0cmluZyArPSAnXFxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OJztcblxuXHR9XG5cblx0cmV0dXJuIHByZWNpc2lvbnN0cmluZztcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNoYWRvd01hcFR5cGVEZWZpbmUoIHBhcmFtZXRlcnMgKSB7XG5cblx0bGV0IHNoYWRvd01hcFR5cGVEZWZpbmUgPSAnU0hBRE9XTUFQX1RZUEVfQkFTSUMnO1xuXG5cdGlmICggcGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBQQ0ZTaGFkb3dNYXAgKSB7XG5cblx0XHRzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX1BDRic7XG5cblx0fSBlbHNlIGlmICggcGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBQQ0ZTb2Z0U2hhZG93TWFwICkge1xuXG5cdFx0c2hhZG93TWFwVHlwZURlZmluZSA9ICdTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCc7XG5cblx0fSBlbHNlIGlmICggcGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBWU01TaGFkb3dNYXAgKSB7XG5cblx0XHRzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX1ZTTSc7XG5cblx0fVxuXG5cdHJldHVybiBzaGFkb3dNYXBUeXBlRGVmaW5lO1xuXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW52TWFwVHlwZURlZmluZSggcGFyYW1ldGVycyApIHtcblxuXHRsZXQgZW52TWFwVHlwZURlZmluZSA9ICdFTlZNQVBfVFlQRV9DVUJFJztcblxuXHRpZiAoIHBhcmFtZXRlcnMuZW52TWFwICkge1xuXG5cdFx0c3dpdGNoICggcGFyYW1ldGVycy5lbnZNYXBNb2RlICkge1xuXG5cdFx0XHRjYXNlIEN1YmVSZWZsZWN0aW9uTWFwcGluZzpcblx0XHRcdGNhc2UgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOlxuXHRcdFx0XHRlbnZNYXBUeXBlRGVmaW5lID0gJ0VOVk1BUF9UWVBFX0NVQkUnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzpcblx0XHRcdGNhc2UgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6XG5cdFx0XHRcdGVudk1hcFR5cGVEZWZpbmUgPSAnRU5WTUFQX1RZUEVfQ1VCRV9VVic7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gZW52TWFwVHlwZURlZmluZTtcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVudk1hcE1vZGVEZWZpbmUoIHBhcmFtZXRlcnMgKSB7XG5cblx0bGV0IGVudk1hcE1vZGVEZWZpbmUgPSAnRU5WTUFQX01PREVfUkVGTEVDVElPTic7XG5cblx0aWYgKCBwYXJhbWV0ZXJzLmVudk1hcCApIHtcblxuXHRcdHN3aXRjaCAoIHBhcmFtZXRlcnMuZW52TWFwTW9kZSApIHtcblxuXHRcdFx0Y2FzZSBDdWJlUmVmcmFjdGlvbk1hcHBpbmc6XG5cdFx0XHRjYXNlIEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOlxuXG5cdFx0XHRcdGVudk1hcE1vZGVEZWZpbmUgPSAnRU5WTUFQX01PREVfUkVGUkFDVElPTic7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gZW52TWFwTW9kZURlZmluZTtcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVudk1hcEJsZW5kaW5nRGVmaW5lKCBwYXJhbWV0ZXJzICkge1xuXG5cdGxldCBlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfTk9ORSc7XG5cblx0aWYgKCBwYXJhbWV0ZXJzLmVudk1hcCApIHtcblxuXHRcdHN3aXRjaCAoIHBhcmFtZXRlcnMuY29tYmluZSApIHtcblxuXHRcdFx0Y2FzZSBNdWx0aXBseU9wZXJhdGlvbjpcblx0XHRcdFx0ZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTWl4T3BlcmF0aW9uOlxuXHRcdFx0XHRlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfTUlYJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWRkT3BlcmF0aW9uOlxuXHRcdFx0XHRlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfQUREJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBlbnZNYXBCbGVuZGluZ0RlZmluZTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTFByb2dyYW0oIHJlbmRlcmVyLCBjYWNoZUtleSwgcGFyYW1ldGVycywgYmluZGluZ1N0YXRlcyApIHtcblxuXHQvLyBUT0RPIFNlbmQgdGhpcyBldmVudCB0byBUaHJlZS5qcyBEZXZUb29sc1xuXHQvLyBjb25zb2xlLmxvZyggJ1dlYkdMUHJvZ3JhbScsIGNhY2hlS2V5ICk7XG5cblx0Y29uc3QgZ2wgPSByZW5kZXJlci5nZXRDb250ZXh0KCk7XG5cblx0Y29uc3QgZGVmaW5lcyA9IHBhcmFtZXRlcnMuZGVmaW5lcztcblxuXHRsZXQgdmVydGV4U2hhZGVyID0gcGFyYW1ldGVycy52ZXJ0ZXhTaGFkZXI7XG5cdGxldCBmcmFnbWVudFNoYWRlciA9IHBhcmFtZXRlcnMuZnJhZ21lbnRTaGFkZXI7XG5cblx0Y29uc3Qgc2hhZG93TWFwVHlwZURlZmluZSA9IGdlbmVyYXRlU2hhZG93TWFwVHlwZURlZmluZSggcGFyYW1ldGVycyApO1xuXHRjb25zdCBlbnZNYXBUeXBlRGVmaW5lID0gZ2VuZXJhdGVFbnZNYXBUeXBlRGVmaW5lKCBwYXJhbWV0ZXJzICk7XG5cdGNvbnN0IGVudk1hcE1vZGVEZWZpbmUgPSBnZW5lcmF0ZUVudk1hcE1vZGVEZWZpbmUoIHBhcmFtZXRlcnMgKTtcblx0Y29uc3QgZW52TWFwQmxlbmRpbmdEZWZpbmUgPSBnZW5lcmF0ZUVudk1hcEJsZW5kaW5nRGVmaW5lKCBwYXJhbWV0ZXJzICk7XG5cblx0Y29uc3QgY3VzdG9tRXh0ZW5zaW9ucyA9IHBhcmFtZXRlcnMuaXNXZWJHTDIgPyAnJyA6IGdlbmVyYXRlRXh0ZW5zaW9ucyggcGFyYW1ldGVycyApO1xuXG5cdGNvbnN0IGN1c3RvbURlZmluZXMgPSBnZW5lcmF0ZURlZmluZXMoIGRlZmluZXMgKTtcblxuXHRjb25zdCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG5cdGxldCBwcmVmaXhWZXJ0ZXgsIHByZWZpeEZyYWdtZW50O1xuXHRsZXQgdmVyc2lvblN0cmluZyA9IHBhcmFtZXRlcnMuZ2xzbFZlcnNpb24gPyAnI3ZlcnNpb24gJyArIHBhcmFtZXRlcnMuZ2xzbFZlcnNpb24gKyAnXFxuJyA6ICcnO1xuXG5cdGlmICggcGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsICkge1xuXG5cdFx0cHJlZml4VmVydGV4ID0gW1xuXG5cdFx0XHRjdXN0b21EZWZpbmVzXG5cblx0XHRdLmZpbHRlciggZmlsdGVyRW1wdHlMaW5lICkuam9pbiggJ1xcbicgKTtcblxuXHRcdGlmICggcHJlZml4VmVydGV4Lmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdHByZWZpeFZlcnRleCArPSAnXFxuJztcblxuXHRcdH1cblxuXHRcdHByZWZpeEZyYWdtZW50ID0gW1xuXG5cdFx0XHRjdXN0b21FeHRlbnNpb25zLFxuXHRcdFx0Y3VzdG9tRGVmaW5lc1xuXG5cdFx0XS5maWx0ZXIoIGZpbHRlckVtcHR5TGluZSApLmpvaW4oICdcXG4nICk7XG5cblx0XHRpZiAoIHByZWZpeEZyYWdtZW50Lmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdHByZWZpeEZyYWdtZW50ICs9ICdcXG4nO1xuXG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHRwcmVmaXhWZXJ0ZXggPSBbXG5cblx0XHRcdGdlbmVyYXRlUHJlY2lzaW9uKCBwYXJhbWV0ZXJzICksXG5cblx0XHRcdCcjZGVmaW5lIFNIQURFUl9OQU1FICcgKyBwYXJhbWV0ZXJzLnNoYWRlck5hbWUsXG5cblx0XHRcdGN1c3RvbURlZmluZXMsXG5cblx0XHRcdHBhcmFtZXRlcnMuaW5zdGFuY2luZyA/ICcjZGVmaW5lIFVTRV9JTlNUQU5DSU5HJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5pbnN0YW5jaW5nQ29sb3IgPyAnI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUicgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzID8gJyNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTJyA6ICcnLFxuXG5cdFx0XHQnI2RlZmluZSBNQVhfQk9ORVMgJyArIHBhcmFtZXRlcnMubWF4Qm9uZXMsXG5cdFx0XHQoIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nICkgPyAnI2RlZmluZSBVU0VfRk9HJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZ0V4cDIgKSA/ICcjZGVmaW5lIEZPR19FWFAyJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLm1hcCA/ICcjZGVmaW5lIFVTRV9NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lIFVTRV9FTlZNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBNb2RlRGVmaW5lIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmxpZ2h0TWFwID8gJyNkZWZpbmUgVVNFX0xJR0hUTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5hb01hcCA/ICcjZGVmaW5lIFVTRV9BT01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmJ1bXBNYXAgPyAnI2RlZmluZSBVU0VfQlVNUE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMubm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX05PUk1BTE1BUCcgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCApID8gJyNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCAmJiBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCApID8gJyNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5jbGVhcmNvYXRNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0Tm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuZGlzcGxhY2VtZW50TWFwICYmIHBhcmFtZXRlcnMuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyA/ICcjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc3BlY3VsYXJNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNwZWN1bGFySW50ZW5zaXR5TWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zcGVjdWxhckNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMucm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMubWV0YWxuZXNzTWFwID8gJyNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuYWxwaGFNYXAgPyAnI2RlZmluZSBVU0VfQUxQSEFNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTicgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uTWFwID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudGhpY2tuZXNzTWFwID8gJyNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5zaGVlbkNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzID8gJyNkZWZpbmUgVVNFX1RBTkdFTlQnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnZlcnRleENvbG9ycyA/ICcjZGVmaW5lIFVTRV9DT0xPUicgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudmVydGV4QWxwaGFzID8gJyNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhVdnMgPyAnI2RlZmluZSBVU0VfVVYnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnV2c1ZlcnRleE9ubHkgPyAnI2RlZmluZSBVVlNfVkVSVEVYX09OTFknIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgPyAnI2RlZmluZSBGTEFUX1NIQURFRCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5za2lubmluZyA/ICcjZGVmaW5lIFVTRV9TS0lOTklORycgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudXNlVmVydGV4VGV4dHVyZSA/ICcjZGVmaW5lIEJPTkVfVEVYVFVSRScgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5tb3JwaFRhcmdldHMgPyAnI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5tb3JwaE5vcm1hbHMgJiYgcGFyYW1ldGVycy5mbGF0U2hhZGluZyA9PT0gZmFsc2UgPyAnI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyAmJiBwYXJhbWV0ZXJzLmlzV2ViR0wyICkgPyAnI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRScgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5tb3JwaFRhcmdldHMgJiYgcGFyYW1ldGVycy5pc1dlYkdMMiApID8gJyNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICcgKyBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0c0NvdW50IDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmRvdWJsZVNpZGVkID8gJyNkZWZpbmUgRE9VQkxFX1NJREVEJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5mbGlwU2lkZWQgPyAnI2RlZmluZSBGTElQX1NJREVEJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSBVU0VfU0hBRE9XTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkID8gJyNkZWZpbmUgJyArIHNoYWRvd01hcFR5cGVEZWZpbmUgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5zaXplQXR0ZW51YXRpb24gPyAnI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUYnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoICkgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6ICcnLFxuXG5cdFx0XHQndW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OycsXG5cdFx0XHQndW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsnLFxuXHRcdFx0J3VuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OycsXG5cdFx0XHQndW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7Jyxcblx0XHRcdCd1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OycsXG5cdFx0XHQndW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOycsXG5cdFx0XHQndW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOycsXG5cblx0XHRcdCcjaWZkZWYgVVNFX0lOU1RBTkNJTkcnLFxuXG5cdFx0XHQnXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsnLFxuXG5cdFx0XHQnI2VuZGlmJyxcblxuXHRcdFx0JyNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUicsXG5cblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7JyxcblxuXHRcdFx0JyNlbmRpZicsXG5cblx0XHRcdCdhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsnLFxuXHRcdFx0J2F0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsnLFxuXHRcdFx0J2F0dHJpYnV0ZSB2ZWMyIHV2OycsXG5cblx0XHRcdCcjaWZkZWYgVVNFX1RBTkdFTlQnLFxuXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OycsXG5cblx0XHRcdCcjZW5kaWYnLFxuXG5cdFx0XHQnI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApJyxcblxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzQgY29sb3I7JyxcblxuXHRcdFx0JyNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApJyxcblxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzMgY29sb3I7JyxcblxuXHRcdFx0JyNlbmRpZicsXG5cblx0XHRcdCcjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICknLFxuXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7Jyxcblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsnLFxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOycsXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7JyxcblxuXHRcdFx0J1x0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMnLFxuXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsnLFxuXHRcdFx0J1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7Jyxcblx0XHRcdCdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOycsXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsnLFxuXG5cdFx0XHQnXHQjZWxzZScsXG5cblx0XHRcdCdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OycsXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsnLFxuXHRcdFx0J1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7Jyxcblx0XHRcdCdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OycsXG5cblx0XHRcdCdcdCNlbmRpZicsXG5cblx0XHRcdCcjZW5kaWYnLFxuXG5cdFx0XHQnI2lmZGVmIFVTRV9TS0lOTklORycsXG5cblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsnLFxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsnLFxuXG5cdFx0XHQnI2VuZGlmJyxcblxuXHRcdFx0J1xcbidcblxuXHRcdF0uZmlsdGVyKCBmaWx0ZXJFbXB0eUxpbmUgKS5qb2luKCAnXFxuJyApO1xuXG5cdFx0cHJlZml4RnJhZ21lbnQgPSBbXG5cblx0XHRcdGN1c3RvbUV4dGVuc2lvbnMsXG5cblx0XHRcdGdlbmVyYXRlUHJlY2lzaW9uKCBwYXJhbWV0ZXJzICksXG5cblx0XHRcdCcjZGVmaW5lIFNIQURFUl9OQU1FICcgKyBwYXJhbWV0ZXJzLnNoYWRlck5hbWUsXG5cblx0XHRcdGN1c3RvbURlZmluZXMsXG5cblx0XHRcdCggcGFyYW1ldGVycy51c2VGb2cgJiYgcGFyYW1ldGVycy5mb2cgKSA/ICcjZGVmaW5lIFVTRV9GT0cnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nRXhwMiApID8gJyNkZWZpbmUgRk9HX0VYUDInIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMubWFwID8gJyNkZWZpbmUgVVNFX01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMubWF0Y2FwID8gJyNkZWZpbmUgVVNFX01BVENBUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgVVNFX0VOVk1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgJyArIGVudk1hcFR5cGVEZWZpbmUgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgJyArIGVudk1hcE1vZGVEZWZpbmUgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgJyArIGVudk1hcEJsZW5kaW5nRGVmaW5lIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmxpZ2h0TWFwID8gJyNkZWZpbmUgVVNFX0xJR0hUTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5hb01hcCA/ICcjZGVmaW5lIFVTRV9BT01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmJ1bXBNYXAgPyAnI2RlZmluZSBVU0VfQlVNUE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMubm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX05PUk1BTE1BUCcgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCApID8gJyNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCAmJiBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCApID8gJyNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5jbGVhcmNvYXQgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5jbGVhcmNvYXRNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0Tm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc3BlY3VsYXJNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNwZWN1bGFySW50ZW5zaXR5TWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zcGVjdWxhckNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLm1ldGFsbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuYWxwaGFNYXAgPyAnI2RlZmluZSBVU0VfQUxQSEFNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmFscGhhVGVzdCA/ICcjZGVmaW5lIFVTRV9BTFBIQVRFU1QnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc2hlZW4gPyAnI2RlZmluZSBVU0VfU0hFRU4nIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNoZWVuQ29sb3JNYXAgPyAnI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuc2hlZW5Sb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTicgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uTWFwID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudGhpY2tuZXNzTWFwID8gJyNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5kZWNvZGVWaWRlb1RleHR1cmUgPyAnI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRScgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5lIFVTRV9UQU5HRU5UJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhDb2xvcnMgfHwgcGFyYW1ldGVycy5pbnN0YW5jaW5nQ29sb3IgPyAnI2RlZmluZSBVU0VfQ09MT1InIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnZlcnRleEFscGhhcyA/ICcjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQScgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudmVydGV4VXZzID8gJyNkZWZpbmUgVVNFX1VWJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy51dnNWZXJ0ZXhPbmx5ID8gJyNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmdyYWRpZW50TWFwID8gJyNkZWZpbmUgVVNFX0dSQURJRU5UTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmZsYXRTaGFkaW5nID8gJyNkZWZpbmUgRkxBVF9TSEFERUQnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuZG91YmxlU2lkZWQgPyAnI2RlZmluZSBET1VCTEVfU0lERUQnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmZsaXBTaWRlZCA/ICcjZGVmaW5lIEZMSVBfU0lERUQnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/ICcjZGVmaW5lIFVTRV9TSEFET1dNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSAnICsgc2hhZG93TWFwVHlwZURlZmluZSA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSA/ICcjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPyAnI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUYnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoICkgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6ICcnLFxuXG5cdFx0XHQoICggcGFyYW1ldGVycy5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EIHx8IHBhcmFtZXRlcnMuZW52TWFwICkgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2QgKSA/ICcjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCcgOiAnJyxcblxuXHRcdFx0J3VuaWZvcm0gbWF0NCB2aWV3TWF0cml4OycsXG5cdFx0XHQndW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOycsXG5cdFx0XHQndW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOycsXG5cblx0XHRcdCggcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyApID8gJyNkZWZpbmUgVE9ORV9NQVBQSU5HJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVNYXBwaW5nICkgPyBTaGFkZXJDaHVua1sgJ3RvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQnIF0gOiAnJywgLy8gdGhpcyBjb2RlIGlzIHJlcXVpcmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB0b25lTWFwcGluZygpIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3dcblx0XHRcdCggcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyApID8gZ2V0VG9uZU1hcHBpbmdGdW5jdGlvbiggJ3RvbmVNYXBwaW5nJywgcGFyYW1ldGVycy50b25lTWFwcGluZyApIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuZGl0aGVyaW5nID8gJyNkZWZpbmUgRElUSEVSSU5HJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5hbHBoYVdyaXRlID8gJycgOiAnI2RlZmluZSBPUEFRVUUnLFxuXG5cdFx0XHRTaGFkZXJDaHVua1sgJ2VuY29kaW5nc19wYXJzX2ZyYWdtZW50JyBdLCAvLyB0aGlzIGNvZGUgaXMgcmVxdWlyZWQgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgZW5jb2RpbmcvZGVjb2RpbmcgZnVuY3Rpb24gZGVmaW5lZCBiZWxvd1xuXHRcdFx0Z2V0VGV4ZWxFbmNvZGluZ0Z1bmN0aW9uKCAnbGluZWFyVG9PdXRwdXRUZXhlbCcsIHBhcmFtZXRlcnMub3V0cHV0RW5jb2RpbmcgKSxcblxuXHRcdFx0cGFyYW1ldGVycy5kZXB0aFBhY2tpbmcgPyAnI2RlZmluZSBERVBUSF9QQUNLSU5HICcgKyBwYXJhbWV0ZXJzLmRlcHRoUGFja2luZyA6ICcnLFxuXG5cdFx0XHQnXFxuJ1xuXG5cdFx0XS5maWx0ZXIoIGZpbHRlckVtcHR5TGluZSApLmpvaW4oICdcXG4nICk7XG5cblx0fVxuXG5cdHZlcnRleFNoYWRlciA9IHJlc29sdmVJbmNsdWRlcyggdmVydGV4U2hhZGVyICk7XG5cdHZlcnRleFNoYWRlciA9IHJlcGxhY2VMaWdodE51bXMoIHZlcnRleFNoYWRlciwgcGFyYW1ldGVycyApO1xuXHR2ZXJ0ZXhTaGFkZXIgPSByZXBsYWNlQ2xpcHBpbmdQbGFuZU51bXMoIHZlcnRleFNoYWRlciwgcGFyYW1ldGVycyApO1xuXG5cdGZyYWdtZW50U2hhZGVyID0gcmVzb2x2ZUluY2x1ZGVzKCBmcmFnbWVudFNoYWRlciApO1xuXHRmcmFnbWVudFNoYWRlciA9IHJlcGxhY2VMaWdodE51bXMoIGZyYWdtZW50U2hhZGVyLCBwYXJhbWV0ZXJzICk7XG5cdGZyYWdtZW50U2hhZGVyID0gcmVwbGFjZUNsaXBwaW5nUGxhbmVOdW1zKCBmcmFnbWVudFNoYWRlciwgcGFyYW1ldGVycyApO1xuXG5cdHZlcnRleFNoYWRlciA9IHVucm9sbExvb3BzKCB2ZXJ0ZXhTaGFkZXIgKTtcblx0ZnJhZ21lbnRTaGFkZXIgPSB1bnJvbGxMb29wcyggZnJhZ21lbnRTaGFkZXIgKTtcblxuXHRpZiAoIHBhcmFtZXRlcnMuaXNXZWJHTDIgJiYgcGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsICE9PSB0cnVlICkge1xuXG5cdFx0Ly8gR0xTTCAzLjAgY29udmVyc2lvbiBmb3IgYnVpbHQtaW4gbWF0ZXJpYWxzIGFuZCBTaGFkZXJNYXRlcmlhbFxuXG5cdFx0dmVyc2lvblN0cmluZyA9ICcjdmVyc2lvbiAzMDAgZXNcXG4nO1xuXG5cdFx0cHJlZml4VmVydGV4ID0gW1xuXHRcdFx0J3ByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OycsXG5cdFx0XHQnI2RlZmluZSBhdHRyaWJ1dGUgaW4nLFxuXHRcdFx0JyNkZWZpbmUgdmFyeWluZyBvdXQnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUnXG5cdFx0XS5qb2luKCAnXFxuJyApICsgJ1xcbicgKyBwcmVmaXhWZXJ0ZXg7XG5cblx0XHRwcmVmaXhGcmFnbWVudCA9IFtcblx0XHRcdCcjZGVmaW5lIHZhcnlpbmcgaW4nLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID09PSBHTFNMMyApID8gJycgOiAnbGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOycsXG5cdFx0XHQoIHBhcmFtZXRlcnMuZ2xzbFZlcnNpb24gPT09IEdMU0wzICkgPyAnJyA6ICcjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3InLFxuXHRcdFx0JyNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCcsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZScsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2onLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCcsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCdcblx0XHRdLmpvaW4oICdcXG4nICkgKyAnXFxuJyArIHByZWZpeEZyYWdtZW50O1xuXG5cdH1cblxuXHRjb25zdCB2ZXJ0ZXhHbHNsID0gdmVyc2lvblN0cmluZyArIHByZWZpeFZlcnRleCArIHZlcnRleFNoYWRlcjtcblx0Y29uc3QgZnJhZ21lbnRHbHNsID0gdmVyc2lvblN0cmluZyArIHByZWZpeEZyYWdtZW50ICsgZnJhZ21lbnRTaGFkZXI7XG5cblx0Ly8gY29uc29sZS5sb2coICcqVkVSVEVYKicsIHZlcnRleEdsc2wgKTtcblx0Ly8gY29uc29sZS5sb2coICcqRlJBR01FTlQqJywgZnJhZ21lbnRHbHNsICk7XG5cblx0Y29uc3QgZ2xWZXJ0ZXhTaGFkZXIgPSBXZWJHTFNoYWRlciggZ2wsIDM1NjMzLCB2ZXJ0ZXhHbHNsICk7XG5cdGNvbnN0IGdsRnJhZ21lbnRTaGFkZXIgPSBXZWJHTFNoYWRlciggZ2wsIDM1NjMyLCBmcmFnbWVudEdsc2wgKTtcblxuXHRnbC5hdHRhY2hTaGFkZXIoIHByb2dyYW0sIGdsVmVydGV4U2hhZGVyICk7XG5cdGdsLmF0dGFjaFNoYWRlciggcHJvZ3JhbSwgZ2xGcmFnbWVudFNoYWRlciApO1xuXG5cdC8vIEZvcmNlIGEgcGFydGljdWxhciBhdHRyaWJ1dGUgdG8gaW5kZXggMC5cblxuXHRpZiAoIHBhcmFtZXRlcnMuaW5kZXgwQXR0cmlidXRlTmFtZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0Z2wuYmluZEF0dHJpYkxvY2F0aW9uKCBwcm9ncmFtLCAwLCBwYXJhbWV0ZXJzLmluZGV4MEF0dHJpYnV0ZU5hbWUgKTtcblxuXHR9IGVsc2UgaWYgKCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyA9PT0gdHJ1ZSApIHtcblxuXHRcdC8vIHByb2dyYW1zIHdpdGggbW9ycGhUYXJnZXRzIGRpc3BsYWNlIHBvc2l0aW9uIG91dCBvZiBhdHRyaWJ1dGUgMFxuXHRcdGdsLmJpbmRBdHRyaWJMb2NhdGlvbiggcHJvZ3JhbSwgMCwgJ3Bvc2l0aW9uJyApO1xuXG5cdH1cblxuXHRnbC5saW5rUHJvZ3JhbSggcHJvZ3JhbSApO1xuXG5cdC8vIGNoZWNrIGZvciBsaW5rIGVycm9yc1xuXHRpZiAoIHJlbmRlcmVyLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzICkge1xuXG5cdFx0Y29uc3QgcHJvZ3JhbUxvZyA9IGdsLmdldFByb2dyYW1JbmZvTG9nKCBwcm9ncmFtICkudHJpbSgpO1xuXHRcdGNvbnN0IHZlcnRleExvZyA9IGdsLmdldFNoYWRlckluZm9Mb2coIGdsVmVydGV4U2hhZGVyICkudHJpbSgpO1xuXHRcdGNvbnN0IGZyYWdtZW50TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyggZ2xGcmFnbWVudFNoYWRlciApLnRyaW0oKTtcblxuXHRcdGxldCBydW5uYWJsZSA9IHRydWU7XG5cdFx0bGV0IGhhdmVEaWFnbm9zdGljcyA9IHRydWU7XG5cblx0XHRpZiAoIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzE0ICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRydW5uYWJsZSA9IGZhbHNlO1xuXG5cdFx0XHRjb25zdCB2ZXJ0ZXhFcnJvcnMgPSBnZXRTaGFkZXJFcnJvcnMoIGdsLCBnbFZlcnRleFNoYWRlciwgJ3ZlcnRleCcgKTtcblx0XHRcdGNvbnN0IGZyYWdtZW50RXJyb3JzID0gZ2V0U2hhZGVyRXJyb3JzKCBnbCwgZ2xGcmFnbWVudFNoYWRlciwgJ2ZyYWdtZW50JyApO1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHQnVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgJyArIGdsLmdldEVycm9yKCkgKyAnIC0gJyArXG5cdFx0XHRcdCdWQUxJREFURV9TVEFUVVMgJyArIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzE1ICkgKyAnXFxuXFxuJyArXG5cdFx0XHRcdCdQcm9ncmFtIEluZm8gTG9nOiAnICsgcHJvZ3JhbUxvZyArICdcXG4nICtcblx0XHRcdFx0dmVydGV4RXJyb3JzICsgJ1xcbicgK1xuXHRcdFx0XHRmcmFnbWVudEVycm9yc1xuXHRcdFx0KTtcblxuXHRcdH0gZWxzZSBpZiAoIHByb2dyYW1Mb2cgIT09ICcnICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6JywgcHJvZ3JhbUxvZyApO1xuXG5cdFx0fSBlbHNlIGlmICggdmVydGV4TG9nID09PSAnJyB8fCBmcmFnbWVudExvZyA9PT0gJycgKSB7XG5cblx0XHRcdGhhdmVEaWFnbm9zdGljcyA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBoYXZlRGlhZ25vc3RpY3MgKSB7XG5cblx0XHRcdHRoaXMuZGlhZ25vc3RpY3MgPSB7XG5cblx0XHRcdFx0cnVubmFibGU6IHJ1bm5hYmxlLFxuXG5cdFx0XHRcdHByb2dyYW1Mb2c6IHByb2dyYW1Mb2csXG5cblx0XHRcdFx0dmVydGV4U2hhZGVyOiB7XG5cblx0XHRcdFx0XHRsb2c6IHZlcnRleExvZyxcblx0XHRcdFx0XHRwcmVmaXg6IHByZWZpeFZlcnRleFxuXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IHtcblxuXHRcdFx0XHRcdGxvZzogZnJhZ21lbnRMb2csXG5cdFx0XHRcdFx0cHJlZml4OiBwcmVmaXhGcmFnbWVudFxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gQ2xlYW4gdXBcblxuXHQvLyBDcmFzaGVzIGluIGlPUzkgYW5kIGlPUzEwLiAjMTg0MDJcblx0Ly8gZ2wuZGV0YWNoU2hhZGVyKCBwcm9ncmFtLCBnbFZlcnRleFNoYWRlciApO1xuXHQvLyBnbC5kZXRhY2hTaGFkZXIoIHByb2dyYW0sIGdsRnJhZ21lbnRTaGFkZXIgKTtcblxuXHRnbC5kZWxldGVTaGFkZXIoIGdsVmVydGV4U2hhZGVyICk7XG5cdGdsLmRlbGV0ZVNoYWRlciggZ2xGcmFnbWVudFNoYWRlciApO1xuXG5cdC8vIHNldCB1cCBjYWNoaW5nIGZvciB1bmlmb3JtIGxvY2F0aW9uc1xuXG5cdGxldCBjYWNoZWRVbmlmb3JtcztcblxuXHR0aGlzLmdldFVuaWZvcm1zID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0aWYgKCBjYWNoZWRVbmlmb3JtcyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjYWNoZWRVbmlmb3JtcyA9IG5ldyBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlZFVuaWZvcm1zO1xuXG5cdH07XG5cblx0Ly8gc2V0IHVwIGNhY2hpbmcgZm9yIGF0dHJpYnV0ZSBsb2NhdGlvbnNcblxuXHRsZXQgY2FjaGVkQXR0cmlidXRlcztcblxuXHR0aGlzLmdldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoIGNhY2hlZEF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y2FjaGVkQXR0cmlidXRlcyA9IGZldGNoQXR0cmlidXRlTG9jYXRpb25zKCBnbCwgcHJvZ3JhbSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlZEF0dHJpYnV0ZXM7XG5cblx0fTtcblxuXHQvLyBmcmVlIHJlc291cmNlXG5cblx0dGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0YmluZGluZ1N0YXRlcy5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKCB0aGlzICk7XG5cblx0XHRnbC5kZWxldGVQcm9ncmFtKCBwcm9ncmFtICk7XG5cdFx0dGhpcy5wcm9ncmFtID0gdW5kZWZpbmVkO1xuXG5cdH07XG5cblx0Ly9cblxuXHR0aGlzLm5hbWUgPSBwYXJhbWV0ZXJzLnNoYWRlck5hbWU7XG5cdHRoaXMuaWQgPSBwcm9ncmFtSWRDb3VudCArKztcblx0dGhpcy5jYWNoZUtleSA9IGNhY2hlS2V5O1xuXHR0aGlzLnVzZWRUaW1lcyA9IDE7XG5cdHRoaXMucHJvZ3JhbSA9IHByb2dyYW07XG5cdHRoaXMudmVydGV4U2hhZGVyID0gZ2xWZXJ0ZXhTaGFkZXI7XG5cdHRoaXMuZnJhZ21lbnRTaGFkZXIgPSBnbEZyYWdtZW50U2hhZGVyO1xuXG5cdHJldHVybiB0aGlzO1xuXG59XG5cbmxldCBfaWQgPSAwO1xuXG5jbGFzcyBXZWJHTFNoYWRlckNhY2hlIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuc2hhZGVyQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5tYXRlcmlhbENhY2hlID0gbmV3IE1hcCgpO1xuXG5cdH1cblxuXHR1cGRhdGUoIG1hdGVyaWFsICkge1xuXG5cdFx0Y29uc3QgdmVydGV4U2hhZGVyID0gbWF0ZXJpYWwudmVydGV4U2hhZGVyO1xuXHRcdGNvbnN0IGZyYWdtZW50U2hhZGVyID0gbWF0ZXJpYWwuZnJhZ21lbnRTaGFkZXI7XG5cblx0XHRjb25zdCB2ZXJ0ZXhTaGFkZXJTdGFnZSA9IHRoaXMuX2dldFNoYWRlclN0YWdlKCB2ZXJ0ZXhTaGFkZXIgKTtcblx0XHRjb25zdCBmcmFnbWVudFNoYWRlclN0YWdlID0gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UoIGZyYWdtZW50U2hhZGVyICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbFNoYWRlcnMgPSB0aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKCBtYXRlcmlhbCApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbFNoYWRlcnMuaGFzKCB2ZXJ0ZXhTaGFkZXJTdGFnZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0bWF0ZXJpYWxTaGFkZXJzLmFkZCggdmVydGV4U2hhZGVyU3RhZ2UgKTtcblx0XHRcdHZlcnRleFNoYWRlclN0YWdlLnVzZWRUaW1lcyArKztcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWxTaGFkZXJzLmhhcyggZnJhZ21lbnRTaGFkZXJTdGFnZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0bWF0ZXJpYWxTaGFkZXJzLmFkZCggZnJhZ21lbnRTaGFkZXJTdGFnZSApO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXJTdGFnZS51c2VkVGltZXMgKys7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmVtb3ZlKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IG1hdGVyaWFsU2hhZGVycyA9IHRoaXMubWF0ZXJpYWxDYWNoZS5nZXQoIG1hdGVyaWFsICk7XG5cblx0XHRmb3IgKCBjb25zdCBzaGFkZXJTdGFnZSBvZiBtYXRlcmlhbFNoYWRlcnMgKSB7XG5cblx0XHRcdHNoYWRlclN0YWdlLnVzZWRUaW1lcyAtLTtcblxuXHRcdFx0aWYgKCBzaGFkZXJTdGFnZS51c2VkVGltZXMgPT09IDAgKSB0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZSggc2hhZGVyU3RhZ2UgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUoIG1hdGVyaWFsICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0VmVydGV4U2hhZGVySUQoIG1hdGVyaWFsICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKCBtYXRlcmlhbC52ZXJ0ZXhTaGFkZXIgKS5pZDtcblxuXHR9XG5cblx0Z2V0RnJhZ21lbnRTaGFkZXJJRCggbWF0ZXJpYWwgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UoIG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyICkuaWQ7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCk7XG5cblx0fVxuXG5cdF9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5tYXRlcmlhbENhY2hlO1xuXG5cdFx0aWYgKCBjYWNoZS5oYXMoIG1hdGVyaWFsICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjYWNoZS5zZXQoIG1hdGVyaWFsLCBuZXcgU2V0KCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZS5nZXQoIG1hdGVyaWFsICk7XG5cblx0fVxuXG5cdF9nZXRTaGFkZXJTdGFnZSggY29kZSApIHtcblxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5zaGFkZXJDYWNoZTtcblxuXHRcdGlmICggY2FjaGUuaGFzKCBjb2RlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjb25zdCBzdGFnZSA9IG5ldyBXZWJHTFNoYWRlclN0YWdlKCk7XG5cdFx0XHRjYWNoZS5zZXQoIGNvZGUsIHN0YWdlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGUuZ2V0KCBjb2RlICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFdlYkdMU2hhZGVyU3RhZ2Uge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0dGhpcy5pZCA9IF9pZCArKztcblxuXHRcdHRoaXMudXNlZFRpbWVzID0gMDtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xQcm9ncmFtcyggcmVuZGVyZXIsIGN1YmVtYXBzLCBjdWJldXZtYXBzLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMsIGJpbmRpbmdTdGF0ZXMsIGNsaXBwaW5nICkge1xuXG5cdGNvbnN0IF9wcm9ncmFtTGF5ZXJzID0gbmV3IExheWVycygpO1xuXHRjb25zdCBfY3VzdG9tU2hhZGVycyA9IG5ldyBXZWJHTFNoYWRlckNhY2hlKCk7XG5cdGNvbnN0IHByb2dyYW1zID0gW107XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cdGNvbnN0IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPSBjYXBhYmlsaXRpZXMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjtcblx0Y29uc3QgZmxvYXRWZXJ0ZXhUZXh0dXJlcyA9IGNhcGFiaWxpdGllcy5mbG9hdFZlcnRleFRleHR1cmVzO1xuXHRjb25zdCBtYXhWZXJ0ZXhVbmlmb3JtcyA9IGNhcGFiaWxpdGllcy5tYXhWZXJ0ZXhVbmlmb3Jtcztcblx0Y29uc3QgdmVydGV4VGV4dHVyZXMgPSBjYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXM7XG5cdGxldCBwcmVjaXNpb24gPSBjYXBhYmlsaXRpZXMucHJlY2lzaW9uO1xuXG5cdGNvbnN0IHNoYWRlcklEcyA9IHtcblx0XHRNZXNoRGVwdGhNYXRlcmlhbDogJ2RlcHRoJyxcblx0XHRNZXNoRGlzdGFuY2VNYXRlcmlhbDogJ2Rpc3RhbmNlUkdCQScsXG5cdFx0TWVzaE5vcm1hbE1hdGVyaWFsOiAnbm9ybWFsJyxcblx0XHRNZXNoQmFzaWNNYXRlcmlhbDogJ2Jhc2ljJyxcblx0XHRNZXNoTGFtYmVydE1hdGVyaWFsOiAnbGFtYmVydCcsXG5cdFx0TWVzaFBob25nTWF0ZXJpYWw6ICdwaG9uZycsXG5cdFx0TWVzaFRvb25NYXRlcmlhbDogJ3Rvb24nLFxuXHRcdE1lc2hTdGFuZGFyZE1hdGVyaWFsOiAncGh5c2ljYWwnLFxuXHRcdE1lc2hQaHlzaWNhbE1hdGVyaWFsOiAncGh5c2ljYWwnLFxuXHRcdE1lc2hNYXRjYXBNYXRlcmlhbDogJ21hdGNhcCcsXG5cdFx0TGluZUJhc2ljTWF0ZXJpYWw6ICdiYXNpYycsXG5cdFx0TGluZURhc2hlZE1hdGVyaWFsOiAnZGFzaGVkJyxcblx0XHRQb2ludHNNYXRlcmlhbDogJ3BvaW50cycsXG5cdFx0U2hhZG93TWF0ZXJpYWw6ICdzaGFkb3cnLFxuXHRcdFNwcml0ZU1hdGVyaWFsOiAnc3ByaXRlJ1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldE1heEJvbmVzKCBvYmplY3QgKSB7XG5cblx0XHRjb25zdCBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcblx0XHRjb25zdCBib25lcyA9IHNrZWxldG9uLmJvbmVzO1xuXG5cdFx0aWYgKCBmbG9hdFZlcnRleFRleHR1cmVzICkge1xuXG5cdFx0XHRyZXR1cm4gMTAyNDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGRlZmF1bHQgZm9yIHdoZW4gb2JqZWN0IGlzIG5vdCBzcGVjaWZpZWRcblx0XHRcdC8vICggZm9yIGV4YW1wbGUgd2hlbiBwcmVidWlsZGluZyBzaGFkZXIgdG8gYmUgdXNlZCB3aXRoIG11bHRpcGxlIG9iamVjdHMgKVxuXHRcdFx0Ly9cblx0XHRcdC8vICAtIGxlYXZlIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG90aGVyIHVuaWZvcm1zXG5cdFx0XHQvLyAgLSBsaW1pdCBoZXJlIGlzIEFOR0xFJ3MgMjU0IG1heCB1bmlmb3JtIHZlY3RvcnNcblx0XHRcdC8vICAgICh1cCB0byA1NCBzaG91bGQgYmUgc2FmZSlcblxuXHRcdFx0Y29uc3QgblZlcnRleFVuaWZvcm1zID0gbWF4VmVydGV4VW5pZm9ybXM7XG5cdFx0XHRjb25zdCBuVmVydGV4TWF0cmljZXMgPSBNYXRoLmZsb29yKCAoIG5WZXJ0ZXhVbmlmb3JtcyAtIDIwICkgLyA0ICk7XG5cblx0XHRcdGNvbnN0IG1heEJvbmVzID0gTWF0aC5taW4oIG5WZXJ0ZXhNYXRyaWNlcywgYm9uZXMubGVuZ3RoICk7XG5cblx0XHRcdGlmICggbWF4Qm9uZXMgPCBib25lcy5sZW5ndGggKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICcgKyBib25lcy5sZW5ndGggKyAnIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAnICsgbWF4Qm9uZXMgKyAnLicgKTtcblx0XHRcdFx0cmV0dXJuIDA7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1heEJvbmVzO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKCBtYXRlcmlhbCwgbGlnaHRzLCBzaGFkb3dzLCBzY2VuZSwgb2JqZWN0ICkge1xuXG5cdFx0Y29uc3QgZm9nID0gc2NlbmUuZm9nO1xuXHRcdGNvbnN0IGVudmlyb25tZW50ID0gbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IHNjZW5lLmVudmlyb25tZW50IDogbnVsbDtcblxuXHRcdGNvbnN0IGVudk1hcCA9ICggbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IGN1YmV1dm1hcHMgOiBjdWJlbWFwcyApLmdldCggbWF0ZXJpYWwuZW52TWFwIHx8IGVudmlyb25tZW50ICk7XG5cblx0XHRjb25zdCBzaGFkZXJJRCA9IHNoYWRlcklEc1sgbWF0ZXJpYWwudHlwZSBdO1xuXG5cdFx0Ly8gaGV1cmlzdGljcyB0byBjcmVhdGUgc2hhZGVyIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIGxpZ2h0cyBpbiB0aGUgc2NlbmVcblx0XHQvLyAobm90IHRvIGJsb3cgb3ZlciBtYXhMaWdodHMgYnVkZ2V0KVxuXG5cdFx0Y29uc3QgbWF4Qm9uZXMgPSBvYmplY3QuaXNTa2lubmVkTWVzaCA/IGdldE1heEJvbmVzKCBvYmplY3QgKSA6IDA7XG5cblx0XHRpZiAoIG1hdGVyaWFsLnByZWNpc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0cHJlY2lzaW9uID0gY2FwYWJpbGl0aWVzLmdldE1heFByZWNpc2lvbiggbWF0ZXJpYWwucHJlY2lzaW9uICk7XG5cblx0XHRcdGlmICggcHJlY2lzaW9uICE9PSBtYXRlcmlhbC5wcmVjaXNpb24gKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6JywgbWF0ZXJpYWwucHJlY2lzaW9uLCAnbm90IHN1cHBvcnRlZCwgdXNpbmcnLCBwcmVjaXNpb24sICdpbnN0ZWFkLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0bGV0IHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXI7XG5cdFx0bGV0IGN1c3RvbVZlcnRleFNoYWRlcklELCBjdXN0b21GcmFnbWVudFNoYWRlcklEO1xuXG5cdFx0aWYgKCBzaGFkZXJJRCApIHtcblxuXHRcdFx0Y29uc3Qgc2hhZGVyID0gU2hhZGVyTGliWyBzaGFkZXJJRCBdO1xuXG5cdFx0XHR2ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXI7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR2ZXJ0ZXhTaGFkZXIgPSBtYXRlcmlhbC52ZXJ0ZXhTaGFkZXI7XG5cdFx0XHRmcmFnbWVudFNoYWRlciA9IG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0XHRfY3VzdG9tU2hhZGVycy51cGRhdGUoIG1hdGVyaWFsICk7XG5cblx0XHRcdGN1c3RvbVZlcnRleFNoYWRlcklEID0gX2N1c3RvbVNoYWRlcnMuZ2V0VmVydGV4U2hhZGVySUQoIG1hdGVyaWFsICk7XG5cdFx0XHRjdXN0b21GcmFnbWVudFNoYWRlcklEID0gX2N1c3RvbVNoYWRlcnMuZ2V0RnJhZ21lbnRTaGFkZXJJRCggbWF0ZXJpYWwgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdGNvbnN0IHVzZUFscGhhVGVzdCA9IG1hdGVyaWFsLmFscGhhVGVzdCA+IDA7XG5cdFx0Y29uc3QgdXNlQ2xlYXJjb2F0ID0gbWF0ZXJpYWwuY2xlYXJjb2F0ID4gMDtcblxuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cblx0XHRcdGlzV2ViR0wyOiBpc1dlYkdMMixcblxuXHRcdFx0c2hhZGVySUQ6IHNoYWRlcklELFxuXHRcdFx0c2hhZGVyTmFtZTogbWF0ZXJpYWwudHlwZSxcblxuXHRcdFx0dmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHRkZWZpbmVzOiBtYXRlcmlhbC5kZWZpbmVzLFxuXG5cdFx0XHRjdXN0b21WZXJ0ZXhTaGFkZXJJRDogY3VzdG9tVmVydGV4U2hhZGVySUQsXG5cdFx0XHRjdXN0b21GcmFnbWVudFNoYWRlcklEOiBjdXN0b21GcmFnbWVudFNoYWRlcklELFxuXG5cdFx0XHRpc1Jhd1NoYWRlck1hdGVyaWFsOiBtYXRlcmlhbC5pc1Jhd1NoYWRlck1hdGVyaWFsID09PSB0cnVlLFxuXHRcdFx0Z2xzbFZlcnNpb246IG1hdGVyaWFsLmdsc2xWZXJzaW9uLFxuXG5cdFx0XHRwcmVjaXNpb246IHByZWNpc2lvbixcblxuXHRcdFx0aW5zdGFuY2luZzogb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSxcblx0XHRcdGluc3RhbmNpbmdDb2xvcjogb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSAmJiBvYmplY3QuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCxcblxuXHRcdFx0c3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczogdmVydGV4VGV4dHVyZXMsXG5cdFx0XHRvdXRwdXRFbmNvZGluZzogKCBjdXJyZW50UmVuZGVyVGFyZ2V0ID09PSBudWxsICkgPyByZW5kZXJlci5vdXRwdXRFbmNvZGluZyA6ICggY3VycmVudFJlbmRlclRhcmdldC5pc1hSUmVuZGVyVGFyZ2V0ID09PSB0cnVlID8gY3VycmVudFJlbmRlclRhcmdldC50ZXh0dXJlLmVuY29kaW5nIDogTGluZWFyRW5jb2RpbmcgKSxcblx0XHRcdG1hcDogISEgbWF0ZXJpYWwubWFwLFxuXHRcdFx0bWF0Y2FwOiAhISBtYXRlcmlhbC5tYXRjYXAsXG5cdFx0XHRlbnZNYXA6ICEhIGVudk1hcCxcblx0XHRcdGVudk1hcE1vZGU6IGVudk1hcCAmJiBlbnZNYXAubWFwcGluZyxcblx0XHRcdGVudk1hcEN1YmVVVjogKCAhISBlbnZNYXAgKSAmJiAoICggZW52TWFwLm1hcHBpbmcgPT09IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nICkgfHwgKCBlbnZNYXAubWFwcGluZyA9PT0gQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmcgKSApLFxuXHRcdFx0bGlnaHRNYXA6ICEhIG1hdGVyaWFsLmxpZ2h0TWFwLFxuXHRcdFx0YW9NYXA6ICEhIG1hdGVyaWFsLmFvTWFwLFxuXHRcdFx0ZW1pc3NpdmVNYXA6ICEhIG1hdGVyaWFsLmVtaXNzaXZlTWFwLFxuXHRcdFx0YnVtcE1hcDogISEgbWF0ZXJpYWwuYnVtcE1hcCxcblx0XHRcdG5vcm1hbE1hcDogISEgbWF0ZXJpYWwubm9ybWFsTWFwLFxuXHRcdFx0b2JqZWN0U3BhY2VOb3JtYWxNYXA6IG1hdGVyaWFsLm5vcm1hbE1hcFR5cGUgPT09IE9iamVjdFNwYWNlTm9ybWFsTWFwLFxuXHRcdFx0dGFuZ2VudFNwYWNlTm9ybWFsTWFwOiBtYXRlcmlhbC5ub3JtYWxNYXBUeXBlID09PSBUYW5nZW50U3BhY2VOb3JtYWxNYXAsXG5cblx0XHRcdGRlY29kZVZpZGVvVGV4dHVyZTogISEgbWF0ZXJpYWwubWFwICYmICggbWF0ZXJpYWwubWFwLmlzVmlkZW9UZXh0dXJlID09PSB0cnVlICkgJiYgKCBtYXRlcmlhbC5tYXAuZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApLFxuXG5cdFx0XHRjbGVhcmNvYXQ6IHVzZUNsZWFyY29hdCxcblx0XHRcdGNsZWFyY29hdE1hcDogdXNlQ2xlYXJjb2F0ICYmICEhIG1hdGVyaWFsLmNsZWFyY29hdE1hcCxcblx0XHRcdGNsZWFyY29hdFJvdWdobmVzc01hcDogdXNlQ2xlYXJjb2F0ICYmICEhIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCxcblx0XHRcdGNsZWFyY29hdE5vcm1hbE1hcDogdXNlQ2xlYXJjb2F0ICYmICEhIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCxcblxuXHRcdFx0ZGlzcGxhY2VtZW50TWFwOiAhISBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAsXG5cdFx0XHRyb3VnaG5lc3NNYXA6ICEhIG1hdGVyaWFsLnJvdWdobmVzc01hcCxcblx0XHRcdG1ldGFsbmVzc01hcDogISEgbWF0ZXJpYWwubWV0YWxuZXNzTWFwLFxuXHRcdFx0c3BlY3VsYXJNYXA6ICEhIG1hdGVyaWFsLnNwZWN1bGFyTWFwLFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlNYXA6ICEhIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwLFxuXHRcdFx0c3BlY3VsYXJDb2xvck1hcDogISEgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCxcblxuXHRcdFx0YWxwaGFNYXA6ICEhIG1hdGVyaWFsLmFscGhhTWFwLFxuXHRcdFx0YWxwaGFUZXN0OiB1c2VBbHBoYVRlc3QsXG5cdFx0XHRhbHBoYVdyaXRlOiBtYXRlcmlhbC5hbHBoYVdyaXRlIHx8IG1hdGVyaWFsLnRyYW5zcGFyZW50LFxuXG5cdFx0XHRncmFkaWVudE1hcDogISEgbWF0ZXJpYWwuZ3JhZGllbnRNYXAsXG5cblx0XHRcdHNoZWVuOiBtYXRlcmlhbC5zaGVlbiA+IDAsXG5cdFx0XHRzaGVlbkNvbG9yTWFwOiAhISBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwLFxuXHRcdFx0c2hlZW5Sb3VnaG5lc3NNYXA6ICEhIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwLFxuXG5cdFx0XHR0cmFuc21pc3Npb246IG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAsXG5cdFx0XHR0cmFuc21pc3Npb25NYXA6ICEhIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCxcblx0XHRcdHRoaWNrbmVzc01hcDogISEgbWF0ZXJpYWwudGhpY2tuZXNzTWFwLFxuXG5cdFx0XHRjb21iaW5lOiBtYXRlcmlhbC5jb21iaW5lLFxuXG5cdFx0XHR2ZXJ0ZXhUYW5nZW50czogKCAhISBtYXRlcmlhbC5ub3JtYWxNYXAgJiYgISEgb2JqZWN0Lmdlb21ldHJ5ICYmICEhIG9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQgKSxcblx0XHRcdHZlcnRleENvbG9yczogbWF0ZXJpYWwudmVydGV4Q29sb3JzLFxuXHRcdFx0dmVydGV4QWxwaGFzOiBtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IHRydWUgJiYgISEgb2JqZWN0Lmdlb21ldHJ5ICYmICEhIG9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yICYmIG9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplID09PSA0LFxuXHRcdFx0dmVydGV4VXZzOiAhISBtYXRlcmlhbC5tYXAgfHwgISEgbWF0ZXJpYWwuYnVtcE1hcCB8fCAhISBtYXRlcmlhbC5ub3JtYWxNYXAgfHwgISEgbWF0ZXJpYWwuc3BlY3VsYXJNYXAgfHwgISEgbWF0ZXJpYWwuYWxwaGFNYXAgfHwgISEgbWF0ZXJpYWwuZW1pc3NpdmVNYXAgfHwgISEgbWF0ZXJpYWwucm91Z2huZXNzTWFwIHx8ICEhIG1hdGVyaWFsLm1ldGFsbmVzc01hcCB8fCAhISBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgfHwgISEgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwIHx8ICEhIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCB8fCAhISBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgfHwgISEgbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwIHx8ICEhIG1hdGVyaWFsLnRoaWNrbmVzc01hcCB8fCAhISBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCB8fCAhISBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwIHx8ICEhIG1hdGVyaWFsLnNoZWVuQ29sb3JNYXAgfHwgISEgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAsXG5cdFx0XHR1dnNWZXJ0ZXhPbmx5OiAhICggISEgbWF0ZXJpYWwubWFwIHx8ICEhIG1hdGVyaWFsLmJ1bXBNYXAgfHwgISEgbWF0ZXJpYWwubm9ybWFsTWFwIHx8ICEhIG1hdGVyaWFsLnNwZWN1bGFyTWFwIHx8ICEhIG1hdGVyaWFsLmFscGhhTWFwIHx8ICEhIG1hdGVyaWFsLmVtaXNzaXZlTWFwIHx8ICEhIG1hdGVyaWFsLnJvdWdobmVzc01hcCB8fCAhISBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgfHwgISEgbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwIHx8IG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAgfHwgISEgbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwIHx8ICEhIG1hdGVyaWFsLnRoaWNrbmVzc01hcCB8fCAhISBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCB8fCAhISBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwIHx8IG1hdGVyaWFsLnNoZWVuID4gMCB8fCAhISBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwIHx8ICEhIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwICkgJiYgISEgbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwLFxuXG5cdFx0XHRmb2c6ICEhIGZvZyxcblx0XHRcdHVzZUZvZzogbWF0ZXJpYWwuZm9nLFxuXHRcdFx0Zm9nRXhwMjogKCBmb2cgJiYgZm9nLmlzRm9nRXhwMiApLFxuXG5cdFx0XHRmbGF0U2hhZGluZzogISEgbWF0ZXJpYWwuZmxhdFNoYWRpbmcsXG5cblx0XHRcdHNpemVBdHRlbnVhdGlvbjogbWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uLFxuXHRcdFx0bG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjogbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixcblxuXHRcdFx0c2tpbm5pbmc6IG9iamVjdC5pc1NraW5uZWRNZXNoID09PSB0cnVlICYmIG1heEJvbmVzID4gMCxcblx0XHRcdG1heEJvbmVzOiBtYXhCb25lcyxcblx0XHRcdHVzZVZlcnRleFRleHR1cmU6IGZsb2F0VmVydGV4VGV4dHVyZXMsXG5cblx0XHRcdG1vcnBoVGFyZ2V0czogISEgb2JqZWN0Lmdlb21ldHJ5ICYmICEhIG9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXG5cdFx0XHRtb3JwaE5vcm1hbHM6ICEhIG9iamVjdC5nZW9tZXRyeSAmJiAhISBvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxcblx0XHRcdG1vcnBoVGFyZ2V0c0NvdW50OiAoICEhIG9iamVjdC5nZW9tZXRyeSAmJiAhISBvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uICkgPyBvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCA6IDAsXG5cblx0XHRcdG51bURpckxpZ2h0czogbGlnaHRzLmRpcmVjdGlvbmFsLmxlbmd0aCxcblx0XHRcdG51bVBvaW50TGlnaHRzOiBsaWdodHMucG9pbnQubGVuZ3RoLFxuXHRcdFx0bnVtU3BvdExpZ2h0czogbGlnaHRzLnNwb3QubGVuZ3RoLFxuXHRcdFx0bnVtUmVjdEFyZWFMaWdodHM6IGxpZ2h0cy5yZWN0QXJlYS5sZW5ndGgsXG5cdFx0XHRudW1IZW1pTGlnaHRzOiBsaWdodHMuaGVtaS5sZW5ndGgsXG5cblx0XHRcdG51bURpckxpZ2h0U2hhZG93czogbGlnaHRzLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxcblx0XHRcdG51bVBvaW50TGlnaHRTaGFkb3dzOiBsaWdodHMucG9pbnRTaGFkb3dNYXAubGVuZ3RoLFxuXHRcdFx0bnVtU3BvdExpZ2h0U2hhZG93czogbGlnaHRzLnNwb3RTaGFkb3dNYXAubGVuZ3RoLFxuXG5cdFx0XHRudW1DbGlwcGluZ1BsYW5lczogY2xpcHBpbmcubnVtUGxhbmVzLFxuXHRcdFx0bnVtQ2xpcEludGVyc2VjdGlvbjogY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uLFxuXG5cdFx0XHRkaXRoZXJpbmc6IG1hdGVyaWFsLmRpdGhlcmluZyxcblxuXHRcdFx0c2hhZG93TWFwRW5hYmxlZDogcmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgJiYgc2hhZG93cy5sZW5ndGggPiAwLFxuXHRcdFx0c2hhZG93TWFwVHlwZTogcmVuZGVyZXIuc2hhZG93TWFwLnR5cGUsXG5cblx0XHRcdHRvbmVNYXBwaW5nOiBtYXRlcmlhbC50b25lTWFwcGVkID8gcmVuZGVyZXIudG9uZU1hcHBpbmcgOiBOb1RvbmVNYXBwaW5nLFxuXHRcdFx0cGh5c2ljYWxseUNvcnJlY3RMaWdodHM6IHJlbmRlcmVyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLFxuXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSxcblxuXHRcdFx0ZG91YmxlU2lkZWQ6IG1hdGVyaWFsLnNpZGUgPT09IERvdWJsZVNpZGUsXG5cdFx0XHRmbGlwU2lkZWQ6IG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlLFxuXG5cdFx0XHRkZXB0aFBhY2tpbmc6ICggbWF0ZXJpYWwuZGVwdGhQYWNraW5nICE9PSB1bmRlZmluZWQgKSA/IG1hdGVyaWFsLmRlcHRoUGFja2luZyA6IGZhbHNlLFxuXG5cdFx0XHRpbmRleDBBdHRyaWJ1dGVOYW1lOiBtYXRlcmlhbC5pbmRleDBBdHRyaWJ1dGVOYW1lLFxuXG5cdFx0XHRleHRlbnNpb25EZXJpdmF0aXZlczogbWF0ZXJpYWwuZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbC5leHRlbnNpb25zLmRlcml2YXRpdmVzLFxuXHRcdFx0ZXh0ZW5zaW9uRnJhZ0RlcHRoOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLFxuXHRcdFx0ZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxcblx0XHRcdGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELFxuXG5cdFx0XHRyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDogaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoICdFWFRfZnJhZ19kZXB0aCcgKSxcblx0XHRcdHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfZHJhd19idWZmZXJzJyApLFxuXHRcdFx0cmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOiBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcyggJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnICksXG5cblx0XHRcdGN1c3RvbVByb2dyYW1DYWNoZUtleTogbWF0ZXJpYWwuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KClcblxuXHRcdH07XG5cblx0XHRyZXR1cm4gcGFyYW1ldGVycztcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5KCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdGlmICggcGFyYW1ldGVycy5zaGFkZXJJRCApIHtcblxuXHRcdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5zaGFkZXJJRCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5jdXN0b21WZXJ0ZXhTaGFkZXJJRCApO1xuXHRcdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5jdXN0b21GcmFnbWVudFNoYWRlcklEICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMuZGVmaW5lcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmb3IgKCBjb25zdCBuYW1lIGluIHBhcmFtZXRlcnMuZGVmaW5lcyApIHtcblxuXHRcdFx0XHRhcnJheS5wdXNoKCBuYW1lICk7XG5cdFx0XHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuZGVmaW5lc1sgbmFtZSBdICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggcGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsID09PSBmYWxzZSApIHtcblxuXHRcdFx0Z2V0UHJvZ3JhbUNhY2hlS2V5UGFyYW1ldGVycyggYXJyYXksIHBhcmFtZXRlcnMgKTtcblx0XHRcdGdldFByb2dyYW1DYWNoZUtleUJvb2xlYW5zKCBhcnJheSwgcGFyYW1ldGVycyApO1xuXHRcdFx0YXJyYXkucHVzaCggcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgKTtcblxuXHRcdH1cblxuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5ICk7XG5cblx0XHRyZXR1cm4gYXJyYXkuam9pbigpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtQ2FjaGVLZXlQYXJhbWV0ZXJzKCBhcnJheSwgcGFyYW1ldGVycyApIHtcblxuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMucHJlY2lzaW9uICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5vdXRwdXRFbmNvZGluZyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuZW52TWFwTW9kZSApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuY29tYmluZSApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMudmVydGV4VXZzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5mb2dFeHAyICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5zaXplQXR0ZW51YXRpb24gKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm1heEJvbmVzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5tb3JwaFRhcmdldHNDb3VudCApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtRGlyTGlnaHRzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5udW1Qb2ludExpZ2h0cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtU3BvdExpZ2h0cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtSGVtaUxpZ2h0cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtUmVjdEFyZWFMaWdodHMgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bURpckxpZ2h0U2hhZG93cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtUG9pbnRMaWdodFNoYWRvd3MgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bVNwb3RMaWdodFNoYWRvd3MgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLnNoYWRvd01hcFR5cGUgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtQ2xpcEludGVyc2VjdGlvbiApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuYWxwaGFXcml0ZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtQ2FjaGVLZXlCb29sZWFucyggYXJyYXksIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRfcHJvZ3JhbUxheWVycy5kaXNhYmxlQWxsKCk7XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMuaXNXZWJHTDIgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAwICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmluc3RhbmNpbmcgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmluc3RhbmNpbmdDb2xvciApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDMgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5tYXRjYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA1ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmVudk1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDYgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZW52TWFwQ3ViZVVWIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNyApO1xuXHRcdGlmICggcGFyYW1ldGVycy5saWdodE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDggKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuYW9NYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA5ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTAgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuYnVtcE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDExICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEyICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLm9iamVjdFNwYWNlTm9ybWFsTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTMgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudGFuZ2VudFNwYWNlTm9ybWFsTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTQgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuY2xlYXJjb2F0IClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTUgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTYgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuY2xlYXJjb2F0Um91Z2huZXNzTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTcgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuY2xlYXJjb2F0Tm9ybWFsTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTggKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZGlzcGxhY2VtZW50TWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTkgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuc3BlY3VsYXJNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyMCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyMSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5tZXRhbG5lc3NNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyMiApO1xuXHRcdGlmICggcGFyYW1ldGVycy5ncmFkaWVudE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDIzICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmFscGhhTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjQgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuYWxwaGFUZXN0IClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjUgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudmVydGV4Q29sb3JzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjYgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudmVydGV4QWxwaGFzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjcgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudmVydGV4VXZzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjggKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudmVydGV4VGFuZ2VudHMgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyOSApO1xuXHRcdGlmICggcGFyYW1ldGVycy51dnNWZXJ0ZXhPbmx5IClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMzAgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZm9nIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMzEgKTtcblxuXHRcdGFycmF5LnB1c2goIF9wcm9ncmFtTGF5ZXJzLm1hc2sgKTtcblx0XHRfcHJvZ3JhbUxheWVycy5kaXNhYmxlQWxsKCk7XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMudXNlRm9nIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5mbGF0U2hhZGluZyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDIgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuc2tpbm5pbmcgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAzICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnVzZVZlcnRleFRleHR1cmUgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA0ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDUgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNiApO1xuXHRcdGlmICggcGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA3ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA4ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggOSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5kb3VibGVTaWRlZCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEwICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmZsaXBTaWRlZCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDExICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmRlcHRoUGFja2luZyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEyICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmRpdGhlcmluZyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEzICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNwZWN1bGFySW50ZW5zaXR5TWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTQgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuc3BlY3VsYXJDb2xvck1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE1ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE2ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbk1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE3ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnRoaWNrbmVzc01hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE4ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNoZWVuIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMTkgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuc2hlZW5Db2xvck1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDIwICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjEgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZGVjb2RlVmlkZW9UZXh0dXJlIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjIgKTtcblxuXHRcdGFycmF5LnB1c2goIF9wcm9ncmFtTGF5ZXJzLm1hc2sgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0VW5pZm9ybXMoIG1hdGVyaWFsICkge1xuXG5cdFx0Y29uc3Qgc2hhZGVySUQgPSBzaGFkZXJJRHNbIG1hdGVyaWFsLnR5cGUgXTtcblx0XHRsZXQgdW5pZm9ybXM7XG5cblx0XHRpZiAoIHNoYWRlcklEICkge1xuXG5cdFx0XHRjb25zdCBzaGFkZXIgPSBTaGFkZXJMaWJbIHNoYWRlcklEIF07XG5cdFx0XHR1bmlmb3JtcyA9IFVuaWZvcm1zVXRpbHMuY2xvbmUoIHNoYWRlci51bmlmb3JtcyApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dW5pZm9ybXMgPSBtYXRlcmlhbC51bmlmb3JtcztcblxuXHRcdH1cblxuXHRcdHJldHVybiB1bmlmb3JtcztcblxuXHR9XG5cblx0ZnVuY3Rpb24gYWNxdWlyZVByb2dyYW0oIHBhcmFtZXRlcnMsIGNhY2hlS2V5ICkge1xuXG5cdFx0bGV0IHByb2dyYW07XG5cblx0XHQvLyBDaGVjayBpZiBjb2RlIGhhcyBiZWVuIGFscmVhZHkgY29tcGlsZWRcblx0XHRmb3IgKCBsZXQgcCA9IDAsIHBsID0gcHJvZ3JhbXMubGVuZ3RoOyBwIDwgcGw7IHAgKysgKSB7XG5cblx0XHRcdGNvbnN0IHByZWV4aXN0aW5nUHJvZ3JhbSA9IHByb2dyYW1zWyBwIF07XG5cblx0XHRcdGlmICggcHJlZXhpc3RpbmdQcm9ncmFtLmNhY2hlS2V5ID09PSBjYWNoZUtleSApIHtcblxuXHRcdFx0XHRwcm9ncmFtID0gcHJlZXhpc3RpbmdQcm9ncmFtO1xuXHRcdFx0XHQrKyBwcm9ncmFtLnVzZWRUaW1lcztcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBwcm9ncmFtID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHByb2dyYW0gPSBuZXcgV2ViR0xQcm9ncmFtKCByZW5kZXJlciwgY2FjaGVLZXksIHBhcmFtZXRlcnMsIGJpbmRpbmdTdGF0ZXMgKTtcblx0XHRcdHByb2dyYW1zLnB1c2goIHByb2dyYW0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBwcm9ncmFtO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlUHJvZ3JhbSggcHJvZ3JhbSApIHtcblxuXHRcdGlmICggLS0gcHJvZ3JhbS51c2VkVGltZXMgPT09IDAgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBmcm9tIHVub3JkZXJlZCBzZXRcblx0XHRcdGNvbnN0IGkgPSBwcm9ncmFtcy5pbmRleE9mKCBwcm9ncmFtICk7XG5cdFx0XHRwcm9ncmFtc1sgaSBdID0gcHJvZ3JhbXNbIHByb2dyYW1zLmxlbmd0aCAtIDEgXTtcblx0XHRcdHByb2dyYW1zLnBvcCgpO1xuXG5cdFx0XHQvLyBGcmVlIFdlYkdMIHJlc291cmNlc1xuXHRcdFx0cHJvZ3JhbS5kZXN0cm95KCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VTaGFkZXJDYWNoZSggbWF0ZXJpYWwgKSB7XG5cblx0XHRfY3VzdG9tU2hhZGVycy5yZW1vdmUoIG1hdGVyaWFsICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cblx0XHRfY3VzdG9tU2hhZGVycy5kaXNwb3NlKCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0UGFyYW1ldGVyczogZ2V0UGFyYW1ldGVycyxcblx0XHRnZXRQcm9ncmFtQ2FjaGVLZXk6IGdldFByb2dyYW1DYWNoZUtleSxcblx0XHRnZXRVbmlmb3JtczogZ2V0VW5pZm9ybXMsXG5cdFx0YWNxdWlyZVByb2dyYW06IGFjcXVpcmVQcm9ncmFtLFxuXHRcdHJlbGVhc2VQcm9ncmFtOiByZWxlYXNlUHJvZ3JhbSxcblx0XHRyZWxlYXNlU2hhZGVyQ2FjaGU6IHJlbGVhc2VTaGFkZXJDYWNoZSxcblx0XHQvLyBFeHBvc2VkIGZvciByZXNvdXJjZSBtb25pdG9yaW5nICYgZXJyb3IgZmVlZGJhY2sgdmlhIHJlbmRlcmVyLmluZm86XG5cdFx0cHJvZ3JhbXM6IHByb2dyYW1zLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTFByb3BlcnRpZXMoKSB7XG5cblx0bGV0IHByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGdldCggb2JqZWN0ICkge1xuXG5cdFx0bGV0IG1hcCA9IHByb3BlcnRpZXMuZ2V0KCBvYmplY3QgKTtcblxuXHRcdGlmICggbWFwID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdG1hcCA9IHt9O1xuXHRcdFx0cHJvcGVydGllcy5zZXQoIG9iamVjdCwgbWFwICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbWFwO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmUoIG9iamVjdCApIHtcblxuXHRcdHByb3BlcnRpZXMuZGVsZXRlKCBvYmplY3QgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlKCBvYmplY3QsIGtleSwgdmFsdWUgKSB7XG5cblx0XHRwcm9wZXJ0aWVzLmdldCggb2JqZWN0IClbIGtleSBdID0gdmFsdWU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cblx0XHRwcm9wZXJ0aWVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRyZW1vdmU6IHJlbW92ZSxcblx0XHR1cGRhdGU6IHVwZGF0ZSxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gcGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7XG5cblx0aWYgKCBhLmdyb3VwT3JkZXIgIT09IGIuZ3JvdXBPcmRlciApIHtcblxuXHRcdHJldHVybiBhLmdyb3VwT3JkZXIgLSBiLmdyb3VwT3JkZXI7XG5cblx0fSBlbHNlIGlmICggYS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlciApIHtcblxuXHRcdHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRlcjtcblxuXHR9IGVsc2UgaWYgKCBhLm1hdGVyaWFsLmlkICE9PSBiLm1hdGVyaWFsLmlkICkge1xuXG5cdFx0cmV0dXJuIGEubWF0ZXJpYWwuaWQgLSBiLm1hdGVyaWFsLmlkO1xuXG5cdH0gZWxzZSBpZiAoIGEueiAhPT0gYi56ICkge1xuXG5cdFx0cmV0dXJuIGEueiAtIGIuejtcblxuXHR9IGVsc2Uge1xuXG5cdFx0cmV0dXJuIGEuaWQgLSBiLmlkO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiByZXZlcnNlUGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7XG5cblx0aWYgKCBhLmdyb3VwT3JkZXIgIT09IGIuZ3JvdXBPcmRlciApIHtcblxuXHRcdHJldHVybiBhLmdyb3VwT3JkZXIgLSBiLmdyb3VwT3JkZXI7XG5cblx0fSBlbHNlIGlmICggYS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlciApIHtcblxuXHRcdHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRlcjtcblxuXHR9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHtcblxuXHRcdHJldHVybiBiLnogLSBhLno7XG5cblx0fSBlbHNlIHtcblxuXHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblxuXHR9XG5cbn1cblxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlckxpc3QoKSB7XG5cblx0Y29uc3QgcmVuZGVySXRlbXMgPSBbXTtcblx0bGV0IHJlbmRlckl0ZW1zSW5kZXggPSAwO1xuXG5cdGNvbnN0IG9wYXF1ZSA9IFtdO1xuXHRjb25zdCB0cmFuc21pc3NpdmUgPSBbXTtcblx0Y29uc3QgdHJhbnNwYXJlbnQgPSBbXTtcblxuXHRmdW5jdGlvbiBpbml0KCkge1xuXG5cdFx0cmVuZGVySXRlbXNJbmRleCA9IDA7XG5cblx0XHRvcGFxdWUubGVuZ3RoID0gMDtcblx0XHR0cmFuc21pc3NpdmUubGVuZ3RoID0gMDtcblx0XHR0cmFuc3BhcmVudC5sZW5ndGggPSAwO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXROZXh0UmVuZGVySXRlbSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICkge1xuXG5cdFx0bGV0IHJlbmRlckl0ZW0gPSByZW5kZXJJdGVtc1sgcmVuZGVySXRlbXNJbmRleCBdO1xuXG5cdFx0aWYgKCByZW5kZXJJdGVtID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHJlbmRlckl0ZW0gPSB7XG5cdFx0XHRcdGlkOiBvYmplY3QuaWQsXG5cdFx0XHRcdG9iamVjdDogb2JqZWN0LFxuXHRcdFx0XHRnZW9tZXRyeTogZ2VvbWV0cnksXG5cdFx0XHRcdG1hdGVyaWFsOiBtYXRlcmlhbCxcblx0XHRcdFx0Z3JvdXBPcmRlcjogZ3JvdXBPcmRlcixcblx0XHRcdFx0cmVuZGVyT3JkZXI6IG9iamVjdC5yZW5kZXJPcmRlcixcblx0XHRcdFx0ejogeixcblx0XHRcdFx0Z3JvdXA6IGdyb3VwXG5cdFx0XHR9O1xuXG5cdFx0XHRyZW5kZXJJdGVtc1sgcmVuZGVySXRlbXNJbmRleCBdID0gcmVuZGVySXRlbTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJlbmRlckl0ZW0uaWQgPSBvYmplY3QuaWQ7XG5cdFx0XHRyZW5kZXJJdGVtLm9iamVjdCA9IG9iamVjdDtcblx0XHRcdHJlbmRlckl0ZW0uZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHRcdHJlbmRlckl0ZW0ubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHRcdHJlbmRlckl0ZW0uZ3JvdXBPcmRlciA9IGdyb3VwT3JkZXI7XG5cdFx0XHRyZW5kZXJJdGVtLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXHRcdFx0cmVuZGVySXRlbS56ID0gejtcblx0XHRcdHJlbmRlckl0ZW0uZ3JvdXAgPSBncm91cDtcblxuXHRcdH1cblxuXHRcdHJlbmRlckl0ZW1zSW5kZXggKys7XG5cblx0XHRyZXR1cm4gcmVuZGVySXRlbTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICkge1xuXG5cdFx0Y29uc3QgcmVuZGVySXRlbSA9IGdldE5leHRSZW5kZXJJdGVtKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgeiwgZ3JvdXAgKTtcblxuXHRcdGlmICggbWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMC4wICkge1xuXG5cdFx0XHR0cmFuc21pc3NpdmUucHVzaCggcmVuZGVySXRlbSApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUgKSB7XG5cblx0XHRcdHRyYW5zcGFyZW50LnB1c2goIHJlbmRlckl0ZW0gKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdG9wYXF1ZS5wdXNoKCByZW5kZXJJdGVtICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVuc2hpZnQoIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCApIHtcblxuXHRcdGNvbnN0IHJlbmRlckl0ZW0gPSBnZXROZXh0UmVuZGVySXRlbSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAuMCApIHtcblxuXHRcdFx0dHJhbnNtaXNzaXZlLnVuc2hpZnQoIHJlbmRlckl0ZW0gKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlICkge1xuXG5cdFx0XHR0cmFuc3BhcmVudC51bnNoaWZ0KCByZW5kZXJJdGVtICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRvcGFxdWUudW5zaGlmdCggcmVuZGVySXRlbSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0KCBjdXN0b21PcGFxdWVTb3J0LCBjdXN0b21UcmFuc3BhcmVudFNvcnQgKSB7XG5cblx0XHRpZiAoIG9wYXF1ZS5sZW5ndGggPiAxICkgb3BhcXVlLnNvcnQoIGN1c3RvbU9wYXF1ZVNvcnQgfHwgcGFpbnRlclNvcnRTdGFibGUgKTtcblx0XHRpZiAoIHRyYW5zbWlzc2l2ZS5sZW5ndGggPiAxICkgdHJhbnNtaXNzaXZlLnNvcnQoIGN1c3RvbVRyYW5zcGFyZW50U29ydCB8fCByZXZlcnNlUGFpbnRlclNvcnRTdGFibGUgKTtcblx0XHRpZiAoIHRyYW5zcGFyZW50Lmxlbmd0aCA+IDEgKSB0cmFuc3BhcmVudC5zb3J0KCBjdXN0b21UcmFuc3BhcmVudFNvcnQgfHwgcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmlzaCgpIHtcblxuXHRcdC8vIENsZWFyIHJlZmVyZW5jZXMgZnJvbSBpbmFjdGl2ZSByZW5kZXJJdGVtcyBpbiB0aGUgbGlzdFxuXG5cdFx0Zm9yICggbGV0IGkgPSByZW5kZXJJdGVtc0luZGV4LCBpbCA9IHJlbmRlckl0ZW1zLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCByZW5kZXJJdGVtID0gcmVuZGVySXRlbXNbIGkgXTtcblxuXHRcdFx0aWYgKCByZW5kZXJJdGVtLmlkID09PSBudWxsICkgYnJlYWs7XG5cblx0XHRcdHJlbmRlckl0ZW0uaWQgPSBudWxsO1xuXHRcdFx0cmVuZGVySXRlbS5vYmplY3QgPSBudWxsO1xuXHRcdFx0cmVuZGVySXRlbS5nZW9tZXRyeSA9IG51bGw7XG5cdFx0XHRyZW5kZXJJdGVtLm1hdGVyaWFsID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0uZ3JvdXAgPSBudWxsO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0b3BhcXVlOiBvcGFxdWUsXG5cdFx0dHJhbnNtaXNzaXZlOiB0cmFuc21pc3NpdmUsXG5cdFx0dHJhbnNwYXJlbnQ6IHRyYW5zcGFyZW50LFxuXG5cdFx0aW5pdDogaW5pdCxcblx0XHRwdXNoOiBwdXNoLFxuXHRcdHVuc2hpZnQ6IHVuc2hpZnQsXG5cdFx0ZmluaXNoOiBmaW5pc2gsXG5cblx0XHRzb3J0OiBzb3J0XG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJMaXN0cygpIHtcblxuXHRsZXQgbGlzdHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGdldCggc2NlbmUsIHJlbmRlckNhbGxEZXB0aCApIHtcblxuXHRcdGxldCBsaXN0O1xuXG5cdFx0aWYgKCBsaXN0cy5oYXMoIHNjZW5lICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRsaXN0ID0gbmV3IFdlYkdMUmVuZGVyTGlzdCgpO1xuXHRcdFx0bGlzdHMuc2V0KCBzY2VuZSwgWyBsaXN0IF0gKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggcmVuZGVyQ2FsbERlcHRoID49IGxpc3RzLmdldCggc2NlbmUgKS5sZW5ndGggKSB7XG5cblx0XHRcdFx0bGlzdCA9IG5ldyBXZWJHTFJlbmRlckxpc3QoKTtcblx0XHRcdFx0bGlzdHMuZ2V0KCBzY2VuZSApLnB1c2goIGxpc3QgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRsaXN0ID0gbGlzdHMuZ2V0KCBzY2VuZSApWyByZW5kZXJDYWxsRGVwdGggXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxpc3Q7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cblx0XHRsaXN0cyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFVuaWZvcm1zQ2FjaGUoKSB7XG5cblx0Y29uc3QgbGlnaHRzID0ge307XG5cblx0cmV0dXJuIHtcblxuXHRcdGdldDogZnVuY3Rpb24gKCBsaWdodCApIHtcblxuXHRcdFx0aWYgKCBsaWdodHNbIGxpZ2h0LmlkIF0gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gbGlnaHRzWyBsaWdodC5pZCBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGxldCB1bmlmb3JtcztcblxuXHRcdFx0c3dpdGNoICggbGlnaHQudHlwZSApIHtcblxuXHRcdFx0XHRjYXNlICdEaXJlY3Rpb25hbExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU3BvdExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0ZGlzdGFuY2U6IDAsXG5cdFx0XHRcdFx0XHRjb25lQ29zOiAwLFxuXHRcdFx0XHRcdFx0cGVudW1icmFDb3M6IDAsXG5cdFx0XHRcdFx0XHRkZWNheTogMFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnUG9pbnRMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKSxcblx0XHRcdFx0XHRcdGRpc3RhbmNlOiAwLFxuXHRcdFx0XHRcdFx0ZGVjYXk6IDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ0hlbWlzcGhlcmVMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRza3lDb2xvcjogbmV3IENvbG9yKCksXG5cdFx0XHRcdFx0XHRncm91bmRDb2xvcjogbmV3IENvbG9yKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1JlY3RBcmVhTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRoYWxmV2lkdGg6IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRoYWxmSGVpZ2h0OiBuZXcgVmVjdG9yMygpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRsaWdodHNbIGxpZ2h0LmlkIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0cmV0dXJuIHVuaWZvcm1zO1xuXG5cdFx0fVxuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gU2hhZG93VW5pZm9ybXNDYWNoZSgpIHtcblxuXHRjb25zdCBsaWdodHMgPSB7fTtcblxuXHRyZXR1cm4ge1xuXG5cdFx0Z2V0OiBmdW5jdGlvbiAoIGxpZ2h0ICkge1xuXG5cdFx0XHRpZiAoIGxpZ2h0c1sgbGlnaHQuaWQgXSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiBsaWdodHNbIGxpZ2h0LmlkIF07XG5cblx0XHRcdH1cblxuXHRcdFx0bGV0IHVuaWZvcm1zO1xuXG5cdFx0XHRzd2l0Y2ggKCBsaWdodC50eXBlICkge1xuXG5cdFx0XHRcdGNhc2UgJ0RpcmVjdGlvbmFsTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0c2hhZG93QmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dSYWRpdXM6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdTcG90TGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0c2hhZG93QmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dSYWRpdXM6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdQb2ludExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHNoYWRvd0JpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93UmFkaXVzOiAxLFxuXHRcdFx0XHRcdFx0c2hhZG93TWFwU2l6ZTogbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0XHRcdHNoYWRvd0NhbWVyYU5lYXI6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dDYW1lcmFGYXI6IDEwMDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdC8vIFRPRE8gKGFiZWxuYXRpb24pOiBzZXQgUmVjdEFyZWFMaWdodCBzaGFkb3cgdW5pZm9ybXNcblxuXHRcdFx0fVxuXG5cdFx0XHRsaWdodHNbIGxpZ2h0LmlkIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0cmV0dXJuIHVuaWZvcm1zO1xuXG5cdFx0fVxuXG5cdH07XG5cbn1cblxuXG5cbmxldCBuZXh0VmVyc2lvbiA9IDA7XG5cbmZ1bmN0aW9uIHNoYWRvd0Nhc3RpbmdMaWdodHNGaXJzdCggbGlnaHRBLCBsaWdodEIgKSB7XG5cblx0cmV0dXJuICggbGlnaHRCLmNhc3RTaGFkb3cgPyAxIDogMCApIC0gKCBsaWdodEEuY2FzdFNoYWRvdyA/IDEgOiAwICk7XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xMaWdodHMoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApIHtcblxuXHRjb25zdCBjYWNoZSA9IG5ldyBVbmlmb3Jtc0NhY2hlKCk7XG5cblx0Y29uc3Qgc2hhZG93Q2FjaGUgPSBTaGFkb3dVbmlmb3Jtc0NhY2hlKCk7XG5cblx0Y29uc3Qgc3RhdGUgPSB7XG5cblx0XHR2ZXJzaW9uOiAwLFxuXG5cdFx0aGFzaDoge1xuXHRcdFx0ZGlyZWN0aW9uYWxMZW5ndGg6IC0gMSxcblx0XHRcdHBvaW50TGVuZ3RoOiAtIDEsXG5cdFx0XHRzcG90TGVuZ3RoOiAtIDEsXG5cdFx0XHRyZWN0QXJlYUxlbmd0aDogLSAxLFxuXHRcdFx0aGVtaUxlbmd0aDogLSAxLFxuXG5cdFx0XHRudW1EaXJlY3Rpb25hbFNoYWRvd3M6IC0gMSxcblx0XHRcdG51bVBvaW50U2hhZG93czogLSAxLFxuXHRcdFx0bnVtU3BvdFNoYWRvd3M6IC0gMVxuXHRcdH0sXG5cblx0XHRhbWJpZW50OiBbIDAsIDAsIDAgXSxcblx0XHRwcm9iZTogW10sXG5cdFx0ZGlyZWN0aW9uYWw6IFtdLFxuXHRcdGRpcmVjdGlvbmFsU2hhZG93OiBbXSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvd01hcDogW10sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IFtdLFxuXHRcdHNwb3Q6IFtdLFxuXHRcdHNwb3RTaGFkb3c6IFtdLFxuXHRcdHNwb3RTaGFkb3dNYXA6IFtdLFxuXHRcdHNwb3RTaGFkb3dNYXRyaXg6IFtdLFxuXHRcdHJlY3RBcmVhOiBbXSxcblx0XHRyZWN0QXJlYUxUQzE6IG51bGwsXG5cdFx0cmVjdEFyZWFMVEMyOiBudWxsLFxuXHRcdHBvaW50OiBbXSxcblx0XHRwb2ludFNoYWRvdzogW10sXG5cdFx0cG9pbnRTaGFkb3dNYXA6IFtdLFxuXHRcdHBvaW50U2hhZG93TWF0cml4OiBbXSxcblx0XHRoZW1pOiBbXVxuXG5cdH07XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHN0YXRlLnByb2JlLnB1c2goIG5ldyBWZWN0b3IzKCkgKTtcblxuXHRjb25zdCB2ZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcblx0Y29uc3QgbWF0cml4NCA9IG5ldyBNYXRyaXg0KCk7XG5cdGNvbnN0IG1hdHJpeDQyID0gbmV3IE1hdHJpeDQoKTtcblxuXHRmdW5jdGlvbiBzZXR1cCggbGlnaHRzLCBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyApIHtcblxuXHRcdGxldCByID0gMCwgZyA9IDAsIGIgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHN0YXRlLnByb2JlWyBpIF0uc2V0KCAwLCAwLCAwICk7XG5cblx0XHRsZXQgZGlyZWN0aW9uYWxMZW5ndGggPSAwO1xuXHRcdGxldCBwb2ludExlbmd0aCA9IDA7XG5cdFx0bGV0IHNwb3RMZW5ndGggPSAwO1xuXHRcdGxldCByZWN0QXJlYUxlbmd0aCA9IDA7XG5cdFx0bGV0IGhlbWlMZW5ndGggPSAwO1xuXG5cdFx0bGV0IG51bURpcmVjdGlvbmFsU2hhZG93cyA9IDA7XG5cdFx0bGV0IG51bVBvaW50U2hhZG93cyA9IDA7XG5cdFx0bGV0IG51bVNwb3RTaGFkb3dzID0gMDtcblxuXHRcdGxpZ2h0cy5zb3J0KCBzaGFkb3dDYXN0aW5nTGlnaHRzRmlyc3QgKTtcblxuXHRcdC8vIGFydGlzdC1mcmllbmRseSBsaWdodCBpbnRlbnNpdHkgc2NhbGluZyBmYWN0b3Jcblx0XHRjb25zdCBzY2FsZUZhY3RvciA9ICggcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgIT09IHRydWUgKSA/IE1hdGguUEkgOiAxO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbGlnaHRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzWyBpIF07XG5cblx0XHRcdGNvbnN0IGNvbG9yID0gbGlnaHQuY29sb3I7XG5cdFx0XHRjb25zdCBpbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHk7XG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNlO1xuXG5cdFx0XHRjb25zdCBzaGFkb3dNYXAgPSAoIGxpZ2h0LnNoYWRvdyAmJiBsaWdodC5zaGFkb3cubWFwICkgPyBsaWdodC5zaGFkb3cubWFwLnRleHR1cmUgOiBudWxsO1xuXG5cdFx0XHRpZiAoIGxpZ2h0LmlzQW1iaWVudExpZ2h0ICkge1xuXG5cdFx0XHRcdHIgKz0gY29sb3IuciAqIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yO1xuXHRcdFx0XHRnICs9IGNvbG9yLmcgKiBpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcjtcblx0XHRcdFx0YiArPSBjb2xvci5iICogaW50ZW5zaXR5ICogc2NhbGVGYWN0b3I7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzTGlnaHRQcm9iZSApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCA5OyBqICsrICkge1xuXG5cdFx0XHRcdFx0c3RhdGUucHJvYmVbIGogXS5hZGRTY2FsZWRWZWN0b3IoIGxpZ2h0LnNoLmNvZWZmaWNpZW50c1sgaiBdLCBpbnRlbnNpdHkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5jb2xvci5jb3B5KCBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBsaWdodC5pbnRlbnNpdHkgKiBzY2FsZUZhY3RvciApO1xuXG5cdFx0XHRcdGlmICggbGlnaHQuY2FzdFNoYWRvdyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvd1VuaWZvcm1zID0gc2hhZG93Q2FjaGUuZ2V0KCBsaWdodCApO1xuXG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblxuXHRcdFx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93WyBkaXJlY3Rpb25hbExlbmd0aCBdID0gc2hhZG93VW5pZm9ybXM7XG5cdFx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGRpcmVjdGlvbmFsTGVuZ3RoIF0gPSBzaGFkb3dNYXA7XG5cdFx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGRpcmVjdGlvbmFsTGVuZ3RoIF0gPSBsaWdodC5zaGFkb3cubWF0cml4O1xuXG5cdFx0XHRcdFx0bnVtRGlyZWN0aW9uYWxTaGFkb3dzICsrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFsgZGlyZWN0aW9uYWxMZW5ndGggXSA9IHVuaWZvcm1zO1xuXG5cdFx0XHRcdGRpcmVjdGlvbmFsTGVuZ3RoICsrO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1Nwb3RMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuY29sb3IuY29weSggY29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IgKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5jb25lQ29zID0gTWF0aC5jb3MoIGxpZ2h0LmFuZ2xlICk7XG5cdFx0XHRcdHVuaWZvcm1zLnBlbnVtYnJhQ29zID0gTWF0aC5jb3MoIGxpZ2h0LmFuZ2xlICogKCAxIC0gbGlnaHQucGVudW1icmEgKSApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kZWNheSA9IGxpZ2h0LmRlY2F5O1xuXG5cdFx0XHRcdGlmICggbGlnaHQuY2FzdFNoYWRvdyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvd1VuaWZvcm1zID0gc2hhZG93Q2FjaGUuZ2V0KCBsaWdodCApO1xuXG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblxuXHRcdFx0XHRcdHN0YXRlLnNwb3RTaGFkb3dbIHNwb3RMZW5ndGggXSA9IHNoYWRvd1VuaWZvcm1zO1xuXHRcdFx0XHRcdHN0YXRlLnNwb3RTaGFkb3dNYXBbIHNwb3RMZW5ndGggXSA9IHNoYWRvd01hcDtcblx0XHRcdFx0XHRzdGF0ZS5zcG90U2hhZG93TWF0cml4WyBzcG90TGVuZ3RoIF0gPSBsaWdodC5zaGFkb3cubWF0cml4O1xuXG5cdFx0XHRcdFx0bnVtU3BvdFNoYWRvd3MgKys7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnNwb3RbIHNwb3RMZW5ndGggXSA9IHVuaWZvcm1zO1xuXG5cdFx0XHRcdHNwb3RMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUmVjdEFyZWFMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHQvLyAoYSkgaW50ZW5zaXR5IGlzIHRoZSB0b3RhbCB2aXNpYmxlIGxpZ2h0IGVtaXR0ZWRcblx0XHRcdFx0Ly91bmlmb3Jtcy5jb2xvci5jb3B5KCBjb2xvciApLm11bHRpcGx5U2NhbGFyKCBpbnRlbnNpdHkgLyAoIGxpZ2h0LndpZHRoICogbGlnaHQuaGVpZ2h0ICogTWF0aC5QSSApICk7XG5cblx0XHRcdFx0Ly8gKGIpIGludGVuc2l0eSBpcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgbGlnaHRcblx0XHRcdFx0dW5pZm9ybXMuY29sb3IuY29weSggY29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLnNldCggbGlnaHQud2lkdGggKiAwLjUsIDAuMCwgMC4wICk7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuc2V0KCAwLjAsIGxpZ2h0LmhlaWdodCAqIDAuNSwgMC4wICk7XG5cblx0XHRcdFx0c3RhdGUucmVjdEFyZWFbIHJlY3RBcmVhTGVuZ3RoIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0XHRyZWN0QXJlYUxlbmd0aCArKztcblxuXHRcdFx0fSBlbHNlIGlmICggbGlnaHQuaXNQb2ludExpZ2h0ICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gY2FjaGUuZ2V0KCBsaWdodCApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkoIGxpZ2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGxpZ2h0LmludGVuc2l0eSAqIHNjYWxlRmFjdG9yICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpc3RhbmNlID0gbGlnaHQuZGlzdGFuY2U7XG5cdFx0XHRcdHVuaWZvcm1zLmRlY2F5ID0gbGlnaHQuZGVjYXk7XG5cblx0XHRcdFx0aWYgKCBsaWdodC5jYXN0U2hhZG93ICkge1xuXG5cdFx0XHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xuXG5cdFx0XHRcdFx0Y29uc3Qgc2hhZG93VW5pZm9ybXMgPSBzaGFkb3dDYWNoZS5nZXQoIGxpZ2h0ICk7XG5cblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dCaWFzID0gc2hhZG93LmJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93Tm9ybWFsQmlhcyA9IHNoYWRvdy5ub3JtYWxCaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd1JhZGl1cyA9IHNoYWRvdy5yYWRpdXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93TWFwU2l6ZSA9IHNoYWRvdy5tYXBTaXplO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0NhbWVyYU5lYXIgPSBzaGFkb3cuY2FtZXJhLm5lYXI7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93Q2FtZXJhRmFyID0gc2hhZG93LmNhbWVyYS5mYXI7XG5cblx0XHRcdFx0XHRzdGF0ZS5wb2ludFNoYWRvd1sgcG9pbnRMZW5ndGggXSA9IHNoYWRvd1VuaWZvcm1zO1xuXHRcdFx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWFwWyBwb2ludExlbmd0aCBdID0gc2hhZG93TWFwO1xuXHRcdFx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWF0cml4WyBwb2ludExlbmd0aCBdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDtcblxuXHRcdFx0XHRcdG51bVBvaW50U2hhZG93cyArKztcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUucG9pbnRbIHBvaW50TGVuZ3RoIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0XHRwb2ludExlbmd0aCArKztcblxuXHRcdFx0fSBlbHNlIGlmICggbGlnaHQuaXNIZW1pc3BoZXJlTGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQoIGxpZ2h0ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuc2t5Q29sb3IuY29weSggbGlnaHQuY29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IgKTtcblx0XHRcdFx0dW5pZm9ybXMuZ3JvdW5kQ29sb3IuY29weSggbGlnaHQuZ3JvdW5kQ29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IgKTtcblxuXHRcdFx0XHRzdGF0ZS5oZW1pWyBoZW1pTGVuZ3RoIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0XHRoZW1pTGVuZ3RoICsrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlY3RBcmVhTGVuZ3RoID4gMCApIHtcblxuXHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0Ly8gV2ViR0wgMlxuXG5cdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMSA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8xO1xuXHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMjtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBXZWJHTCAxXG5cblx0XHRcdFx0aWYgKCBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMSA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8xO1xuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMiA9IFVuaWZvcm1zTGliLkxUQ19GTE9BVF8yO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGV4dGVuc2lvbnMuaGFzKCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzEgPSBVbmlmb3Jtc0xpYi5MVENfSEFMRl8xO1xuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMiA9IFVuaWZvcm1zTGliLkxUQ19IQUxGXzI7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5hbWJpZW50WyAwIF0gPSByO1xuXHRcdHN0YXRlLmFtYmllbnRbIDEgXSA9IGc7XG5cdFx0c3RhdGUuYW1iaWVudFsgMiBdID0gYjtcblxuXHRcdGNvbnN0IGhhc2ggPSBzdGF0ZS5oYXNoO1xuXG5cdFx0aWYgKCBoYXNoLmRpcmVjdGlvbmFsTGVuZ3RoICE9PSBkaXJlY3Rpb25hbExlbmd0aCB8fFxuXHRcdFx0aGFzaC5wb2ludExlbmd0aCAhPT0gcG9pbnRMZW5ndGggfHxcblx0XHRcdGhhc2guc3BvdExlbmd0aCAhPT0gc3BvdExlbmd0aCB8fFxuXHRcdFx0aGFzaC5yZWN0QXJlYUxlbmd0aCAhPT0gcmVjdEFyZWFMZW5ndGggfHxcblx0XHRcdGhhc2guaGVtaUxlbmd0aCAhPT0gaGVtaUxlbmd0aCB8fFxuXHRcdFx0aGFzaC5udW1EaXJlY3Rpb25hbFNoYWRvd3MgIT09IG51bURpcmVjdGlvbmFsU2hhZG93cyB8fFxuXHRcdFx0aGFzaC5udW1Qb2ludFNoYWRvd3MgIT09IG51bVBvaW50U2hhZG93cyB8fFxuXHRcdFx0aGFzaC5udW1TcG90U2hhZG93cyAhPT0gbnVtU3BvdFNoYWRvd3MgKSB7XG5cblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsLmxlbmd0aCA9IGRpcmVjdGlvbmFsTGVuZ3RoO1xuXHRcdFx0c3RhdGUuc3BvdC5sZW5ndGggPSBzcG90TGVuZ3RoO1xuXHRcdFx0c3RhdGUucmVjdEFyZWEubGVuZ3RoID0gcmVjdEFyZWFMZW5ndGg7XG5cdFx0XHRzdGF0ZS5wb2ludC5sZW5ndGggPSBwb2ludExlbmd0aDtcblx0XHRcdHN0YXRlLmhlbWkubGVuZ3RoID0gaGVtaUxlbmd0aDtcblxuXHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0c3RhdGUucG9pbnRTaGFkb3cubGVuZ3RoID0gbnVtUG9pbnRTaGFkb3dzO1xuXHRcdFx0c3RhdGUucG9pbnRTaGFkb3dNYXAubGVuZ3RoID0gbnVtUG9pbnRTaGFkb3dzO1xuXHRcdFx0c3RhdGUuc3BvdFNoYWRvdy5sZW5ndGggPSBudW1TcG90U2hhZG93cztcblx0XHRcdHN0YXRlLnNwb3RTaGFkb3dNYXAubGVuZ3RoID0gbnVtU3BvdFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGggPSBudW1EaXJlY3Rpb25hbFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGggPSBudW1Qb2ludFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aCA9IG51bVNwb3RTaGFkb3dzO1xuXG5cdFx0XHRoYXNoLmRpcmVjdGlvbmFsTGVuZ3RoID0gZGlyZWN0aW9uYWxMZW5ndGg7XG5cdFx0XHRoYXNoLnBvaW50TGVuZ3RoID0gcG9pbnRMZW5ndGg7XG5cdFx0XHRoYXNoLnNwb3RMZW5ndGggPSBzcG90TGVuZ3RoO1xuXHRcdFx0aGFzaC5yZWN0QXJlYUxlbmd0aCA9IHJlY3RBcmVhTGVuZ3RoO1xuXHRcdFx0aGFzaC5oZW1pTGVuZ3RoID0gaGVtaUxlbmd0aDtcblxuXHRcdFx0aGFzaC5udW1EaXJlY3Rpb25hbFNoYWRvd3MgPSBudW1EaXJlY3Rpb25hbFNoYWRvd3M7XG5cdFx0XHRoYXNoLm51bVBvaW50U2hhZG93cyA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdGhhc2gubnVtU3BvdFNoYWRvd3MgPSBudW1TcG90U2hhZG93cztcblxuXHRcdFx0c3RhdGUudmVyc2lvbiA9IG5leHRWZXJzaW9uICsrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cFZpZXcoIGxpZ2h0cywgY2FtZXJhICkge1xuXG5cdFx0bGV0IGRpcmVjdGlvbmFsTGVuZ3RoID0gMDtcblx0XHRsZXQgcG9pbnRMZW5ndGggPSAwO1xuXHRcdGxldCBzcG90TGVuZ3RoID0gMDtcblx0XHRsZXQgcmVjdEFyZWFMZW5ndGggPSAwO1xuXHRcdGxldCBoZW1pTGVuZ3RoID0gMDtcblxuXHRcdGNvbnN0IHZpZXdNYXRyaXggPSBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbGlnaHRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzWyBpIF07XG5cblx0XHRcdGlmICggbGlnaHQuaXNEaXJlY3Rpb25hbExpZ2h0ICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuZGlyZWN0aW9uYWxbIGRpcmVjdGlvbmFsTGVuZ3RoIF07XG5cblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc3ViKCB2ZWN0b3IzICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oIHZpZXdNYXRyaXggKTtcblxuXHRcdFx0XHRkaXJlY3Rpb25hbExlbmd0aCArKztcblxuXHRcdFx0fSBlbHNlIGlmICggbGlnaHQuaXNTcG90TGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5zcG90WyBzcG90TGVuZ3RoIF07XG5cblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoIHZpZXdNYXRyaXggKTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHR2ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5zdWIoIHZlY3RvcjMgKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbiggdmlld01hdHJpeCApO1xuXG5cdFx0XHRcdHNwb3RMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUmVjdEFyZWFMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLnJlY3RBcmVhWyByZWN0QXJlYUxlbmd0aCBdO1xuXG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uYXBwbHlNYXRyaXg0KCB2aWV3TWF0cml4ICk7XG5cblx0XHRcdFx0Ly8gZXh0cmFjdCBsb2NhbCByb3RhdGlvbiBvZiBsaWdodCB0byBkZXJpdmUgd2lkdGgvaGVpZ2h0IGhhbGYgdmVjdG9yc1xuXHRcdFx0XHRtYXRyaXg0Mi5pZGVudGl0eSgpO1xuXHRcdFx0XHRtYXRyaXg0LmNvcHkoIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdG1hdHJpeDQucHJlbXVsdGlwbHkoIHZpZXdNYXRyaXggKTtcblx0XHRcdFx0bWF0cml4NDIuZXh0cmFjdFJvdGF0aW9uKCBtYXRyaXg0ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLnNldCggbGlnaHQud2lkdGggKiAwLjUsIDAuMCwgMC4wICk7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuc2V0KCAwLjAsIGxpZ2h0LmhlaWdodCAqIDAuNSwgMC4wICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLmFwcGx5TWF0cml4NCggbWF0cml4NDIgKTtcblx0XHRcdFx0dW5pZm9ybXMuaGFsZkhlaWdodC5hcHBseU1hdHJpeDQoIG1hdHJpeDQyICk7XG5cblx0XHRcdFx0cmVjdEFyZWFMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLnBvaW50WyBwb2ludExlbmd0aCBdO1xuXG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uYXBwbHlNYXRyaXg0KCB2aWV3TWF0cml4ICk7XG5cblx0XHRcdFx0cG9pbnRMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzSGVtaXNwaGVyZUxpZ2h0ICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuaGVtaVsgaGVtaUxlbmd0aCBdO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oIHZpZXdNYXRyaXggKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdGhlbWlMZW5ndGggKys7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZXR1cDogc2V0dXAsXG5cdFx0c2V0dXBWaWV3OiBzZXR1cFZpZXcsXG5cdFx0c3RhdGU6IHN0YXRlXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJTdGF0ZSggZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGxpZ2h0cyA9IG5ldyBXZWJHTExpZ2h0cyggZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICk7XG5cblx0Y29uc3QgbGlnaHRzQXJyYXkgPSBbXTtcblx0Y29uc3Qgc2hhZG93c0FycmF5ID0gW107XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblxuXHRcdGxpZ2h0c0FycmF5Lmxlbmd0aCA9IDA7XG5cdFx0c2hhZG93c0FycmF5Lmxlbmd0aCA9IDA7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2hMaWdodCggbGlnaHQgKSB7XG5cblx0XHRsaWdodHNBcnJheS5wdXNoKCBsaWdodCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBwdXNoU2hhZG93KCBzaGFkb3dMaWdodCApIHtcblxuXHRcdHNoYWRvd3NBcnJheS5wdXNoKCBzaGFkb3dMaWdodCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cExpZ2h0cyggcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgKSB7XG5cblx0XHRsaWdodHMuc2V0dXAoIGxpZ2h0c0FycmF5LCBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cExpZ2h0c1ZpZXcoIGNhbWVyYSApIHtcblxuXHRcdGxpZ2h0cy5zZXR1cFZpZXcoIGxpZ2h0c0FycmF5LCBjYW1lcmEgKTtcblxuXHR9XG5cblx0Y29uc3Qgc3RhdGUgPSB7XG5cdFx0bGlnaHRzQXJyYXk6IGxpZ2h0c0FycmF5LFxuXHRcdHNoYWRvd3NBcnJheTogc2hhZG93c0FycmF5LFxuXG5cdFx0bGlnaHRzOiBsaWdodHNcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGluaXQ6IGluaXQsXG5cdFx0c3RhdGU6IHN0YXRlLFxuXHRcdHNldHVwTGlnaHRzOiBzZXR1cExpZ2h0cyxcblx0XHRzZXR1cExpZ2h0c1ZpZXc6IHNldHVwTGlnaHRzVmlldyxcblxuXHRcdHB1c2hMaWdodDogcHVzaExpZ2h0LFxuXHRcdHB1c2hTaGFkb3c6IHB1c2hTaGFkb3dcblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlclN0YXRlcyggZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGxldCByZW5kZXJTdGF0ZXMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGdldCggc2NlbmUsIHJlbmRlckNhbGxEZXB0aCA9IDAgKSB7XG5cblx0XHRsZXQgcmVuZGVyU3RhdGU7XG5cblx0XHRpZiAoIHJlbmRlclN0YXRlcy5oYXMoIHNjZW5lICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRyZW5kZXJTdGF0ZSA9IG5ldyBXZWJHTFJlbmRlclN0YXRlKCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKTtcblx0XHRcdHJlbmRlclN0YXRlcy5zZXQoIHNjZW5lLCBbIHJlbmRlclN0YXRlIF0gKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggcmVuZGVyQ2FsbERlcHRoID49IHJlbmRlclN0YXRlcy5nZXQoIHNjZW5lICkubGVuZ3RoICkge1xuXG5cdFx0XHRcdHJlbmRlclN0YXRlID0gbmV3IFdlYkdMUmVuZGVyU3RhdGUoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApO1xuXHRcdFx0XHRyZW5kZXJTdGF0ZXMuZ2V0KCBzY2VuZSApLnB1c2goIHJlbmRlclN0YXRlICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZXMuZ2V0KCBzY2VuZSApWyByZW5kZXJDYWxsRGVwdGggXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlbmRlclN0YXRlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0cmVuZGVyU3RhdGVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG5cbn1cblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaERlcHRoTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2hEZXB0aE1hdGVyaWFsJztcblxuXHRcdHRoaXMuZGVwdGhQYWNraW5nID0gQmFzaWNEZXB0aFBhY2tpbmc7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cblx0XHR0aGlzLmZvZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRlcHRoUGFja2luZyA9IHNvdXJjZS5kZXB0aFBhY2tpbmc7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hEZXB0aE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcbiAqICByZWZlcmVuY2VQb3NpdGlvbjogPGZsb2F0PixcbiAqICBuZWFyRGlzdGFuY2U6IDxmbG9hdD4sXG4gKiAgZmFyRGlzdGFuY2U6IDxmbG9hdD4sXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+XG4gKlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hEaXN0YW5jZU1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoRGlzdGFuY2VNYXRlcmlhbCc7XG5cblx0XHR0aGlzLnJlZmVyZW5jZVBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHR0aGlzLm5lYXJEaXN0YW5jZSA9IDE7XG5cdFx0dGhpcy5mYXJEaXN0YW5jZSA9IDEwMDA7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy5mb2cgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KCBzb3VyY2UucmVmZXJlbmNlUG9zaXRpb24gKTtcblx0XHR0aGlzLm5lYXJEaXN0YW5jZSA9IHNvdXJjZS5uZWFyRGlzdGFuY2U7XG5cdFx0dGhpcy5mYXJEaXN0YW5jZSA9IHNvdXJjZS5mYXJEaXN0YW5jZTtcblxuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNvdXJjZS5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoRGlzdGFuY2VNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IHZlcnRleCA9IFwidm9pZCBtYWluKCkge1xcblxcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQgPSBcInVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbiNpbmNsdWRlIDxwYWNraW5nPlxcbnZvaWQgbWFpbigpIHtcXG5cXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XFxuXFx0ZmxvYXQgbWVhbiA9IDAuMDtcXG5cXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XFxuXFx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xcblxcdGZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wO1xcblxcdGZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkge1xcblxcdFxcdGZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTtcXG5cXHRcXHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXFxuXFx0XFx0XFx0dmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xcblxcdFxcdFxcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XFxuXFx0XFx0XFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xcblxcdFxcdFxcdG1lYW4gKz0gZGVwdGg7XFxuXFx0XFx0XFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdG1lYW4gPSBtZWFuIC8gc2FtcGxlcztcXG5cXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzO1xcblxcdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XFxufVwiO1xuXG5mdW5jdGlvbiBXZWJHTFNoYWRvd01hcCggX3JlbmRlcmVyLCBfb2JqZWN0cywgX2NhcGFiaWxpdGllcyApIHtcblxuXHRsZXQgX2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xuXG5cdGNvbnN0IF9zaGFkb3dNYXBTaXplID0gbmV3IFZlY3RvcjIoKSxcblx0XHRfdmlld3BvcnRTaXplID0gbmV3IFZlY3RvcjIoKSxcblxuXHRcdF92aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCksXG5cblx0XHRfZGVwdGhNYXRlcmlhbCA9IG5ldyBNZXNoRGVwdGhNYXRlcmlhbCggeyBkZXB0aFBhY2tpbmc6IFJHQkFEZXB0aFBhY2tpbmcgfSApLFxuXHRcdF9kaXN0YW5jZU1hdGVyaWFsID0gbmV3IE1lc2hEaXN0YW5jZU1hdGVyaWFsKCksXG5cblx0XHRfbWF0ZXJpYWxDYWNoZSA9IHt9LFxuXG5cdFx0X21heFRleHR1cmVTaXplID0gX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZTtcblxuXHRjb25zdCBzaGFkb3dTaWRlID0geyAwOiBCYWNrU2lkZSwgMTogRnJvbnRTaWRlLCAyOiBEb3VibGVTaWRlIH07XG5cblx0Y29uc3Qgc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCgge1xuXHRcdGRlZmluZXM6IHtcblx0XHRcdFZTTV9TQU1QTEVTOiA4XG5cdFx0fSxcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0c2hhZG93X3Bhc3M6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IyKCkgfSxcblx0XHRcdHJhZGl1czogeyB2YWx1ZTogNC4wIH1cblx0XHR9LFxuXG5cdFx0dmVydGV4U2hhZGVyOiB2ZXJ0ZXgsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50XG5cblx0fSApO1xuXG5cdGNvbnN0IHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbCA9IHNoYWRvd01hdGVyaWFsVmVydGljYWwuY2xvbmUoKTtcblx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTID0gMTtcblxuXHRjb25zdCBmdWxsU2NyZWVuVHJpID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdGZ1bGxTY3JlZW5Ucmkuc2V0QXR0cmlidXRlKFxuXHRcdCdwb3NpdGlvbicsXG5cdFx0bmV3IEJ1ZmZlckF0dHJpYnV0ZShcblx0XHRcdG5ldyBGbG9hdDMyQXJyYXkoIFsgLSAxLCAtIDEsIDAuNSwgMywgLSAxLCAwLjUsIC0gMSwgMywgMC41IF0gKSxcblx0XHRcdDNcblx0XHQpXG5cdCk7XG5cblx0Y29uc3QgZnVsbFNjcmVlbk1lc2ggPSBuZXcgTWVzaCggZnVsbFNjcmVlblRyaSwgc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbCApO1xuXG5cdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHR0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblxuXHR0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuXHR0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0dGhpcy50eXBlID0gUENGU2hhZG93TWFwO1xuXG5cdHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBsaWdodHMsIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXHRcdGlmICggc2NvcGUuYXV0b1VwZGF0ZSA9PT0gZmFsc2UgJiYgc2NvcGUubmVlZHNVcGRhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0aWYgKCBsaWdodHMubGVuZ3RoID09PSAwICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclRhcmdldCA9IF9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRjb25zdCBhY3RpdmVDdWJlRmFjZSA9IF9yZW5kZXJlci5nZXRBY3RpdmVDdWJlRmFjZSgpO1xuXHRcdGNvbnN0IGFjdGl2ZU1pcG1hcExldmVsID0gX3JlbmRlcmVyLmdldEFjdGl2ZU1pcG1hcExldmVsKCk7XG5cblx0XHRjb25zdCBfc3RhdGUgPSBfcmVuZGVyZXIuc3RhdGU7XG5cblx0XHQvLyBTZXQgR0wgc3RhdGUgZm9yIGRlcHRoIG1hcC5cblx0XHRfc3RhdGUuc2V0QmxlbmRpbmcoIE5vQmxlbmRpbmcgKTtcblx0XHRfc3RhdGUuYnVmZmVycy5jb2xvci5zZXRDbGVhciggMSwgMSwgMSwgMSApO1xuXHRcdF9zdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoIHRydWUgKTtcblx0XHRfc3RhdGUuc2V0U2Npc3NvclRlc3QoIGZhbHNlICk7XG5cblx0XHQvLyByZW5kZXIgZGVwdGggbWFwXG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbGlnaHRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1sgaSBdO1xuXHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xuXG5cdFx0XHRpZiAoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMU2hhZG93TWFwOicsIGxpZ2h0LCAnaGFzIG5vIHNoYWRvdy4nICk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggc2hhZG93LmF1dG9VcGRhdGUgPT09IGZhbHNlICYmIHNoYWRvdy5uZWVkc1VwZGF0ZSA9PT0gZmFsc2UgKSBjb250aW51ZTtcblxuXHRcdFx0X3NoYWRvd01hcFNpemUuY29weSggc2hhZG93Lm1hcFNpemUgKTtcblxuXHRcdFx0Y29uc3Qgc2hhZG93RnJhbWVFeHRlbnRzID0gc2hhZG93LmdldEZyYW1lRXh0ZW50cygpO1xuXG5cdFx0XHRfc2hhZG93TWFwU2l6ZS5tdWx0aXBseSggc2hhZG93RnJhbWVFeHRlbnRzICk7XG5cblx0XHRcdF92aWV3cG9ydFNpemUuY29weSggc2hhZG93Lm1hcFNpemUgKTtcblxuXHRcdFx0aWYgKCBfc2hhZG93TWFwU2l6ZS54ID4gX21heFRleHR1cmVTaXplIHx8IF9zaGFkb3dNYXBTaXplLnkgPiBfbWF4VGV4dHVyZVNpemUgKSB7XG5cblx0XHRcdFx0aWYgKCBfc2hhZG93TWFwU2l6ZS54ID4gX21heFRleHR1cmVTaXplICkge1xuXG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS54ID0gTWF0aC5mbG9vciggX21heFRleHR1cmVTaXplIC8gc2hhZG93RnJhbWVFeHRlbnRzLnggKTtcblx0XHRcdFx0XHRfc2hhZG93TWFwU2l6ZS54ID0gX3ZpZXdwb3J0U2l6ZS54ICogc2hhZG93RnJhbWVFeHRlbnRzLng7XG5cdFx0XHRcdFx0c2hhZG93Lm1hcFNpemUueCA9IF92aWV3cG9ydFNpemUueDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBfc2hhZG93TWFwU2l6ZS55ID4gX21heFRleHR1cmVTaXplICkge1xuXG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS55ID0gTWF0aC5mbG9vciggX21heFRleHR1cmVTaXplIC8gc2hhZG93RnJhbWVFeHRlbnRzLnkgKTtcblx0XHRcdFx0XHRfc2hhZG93TWFwU2l6ZS55ID0gX3ZpZXdwb3J0U2l6ZS55ICogc2hhZG93RnJhbWVFeHRlbnRzLnk7XG5cdFx0XHRcdFx0c2hhZG93Lm1hcFNpemUueSA9IF92aWV3cG9ydFNpemUueTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzaGFkb3cubWFwID09PSBudWxsICYmICEgc2hhZG93LmlzUG9pbnRMaWdodFNoYWRvdyAmJiB0aGlzLnR5cGUgPT09IFZTTVNoYWRvd01hcCApIHtcblxuXHRcdFx0XHRjb25zdCBwYXJzID0geyBtaW5GaWx0ZXI6IExpbmVhckZpbHRlciwgbWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXIsIGZvcm1hdDogUkdCQUZvcm1hdCB9O1xuXG5cdFx0XHRcdHNoYWRvdy5tYXAgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoIF9zaGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMgKTtcblx0XHRcdFx0c2hhZG93Lm1hcC50ZXh0dXJlLm5hbWUgPSBsaWdodC5uYW1lICsgJy5zaGFkb3dNYXAnO1xuXG5cdFx0XHRcdHNoYWRvdy5tYXBQYXNzID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KCBfc2hhZG93TWFwU2l6ZS54LCBfc2hhZG93TWFwU2l6ZS55LCBwYXJzICk7XG5cblx0XHRcdFx0c2hhZG93LmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzaGFkb3cubWFwID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IHBhcnMgPSB7IG1pbkZpbHRlcjogTmVhcmVzdEZpbHRlciwgbWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLCBmb3JtYXQ6IFJHQkFGb3JtYXQgfTtcblxuXHRcdFx0XHRzaGFkb3cubWFwID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KCBfc2hhZG93TWFwU2l6ZS54LCBfc2hhZG93TWFwU2l6ZS55LCBwYXJzICk7XG5cdFx0XHRcdHNoYWRvdy5tYXAudGV4dHVyZS5uYW1lID0gbGlnaHQubmFtZSArICcuc2hhZG93TWFwJztcblxuXHRcdFx0XHRzaGFkb3cuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBzaGFkb3cubWFwICk7XG5cdFx0XHRfcmVuZGVyZXIuY2xlYXIoKTtcblxuXHRcdFx0Y29uc3Qgdmlld3BvcnRDb3VudCA9IHNoYWRvdy5nZXRWaWV3cG9ydENvdW50KCk7XG5cblx0XHRcdGZvciAoIGxldCB2cCA9IDA7IHZwIDwgdmlld3BvcnRDb3VudDsgdnAgKysgKSB7XG5cblx0XHRcdFx0Y29uc3Qgdmlld3BvcnQgPSBzaGFkb3cuZ2V0Vmlld3BvcnQoIHZwICk7XG5cblx0XHRcdFx0X3ZpZXdwb3J0LnNldChcblx0XHRcdFx0XHRfdmlld3BvcnRTaXplLnggKiB2aWV3cG9ydC54LFxuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueSAqIHZpZXdwb3J0LnksXG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS54ICogdmlld3BvcnQueixcblx0XHRcdFx0XHRfdmlld3BvcnRTaXplLnkgKiB2aWV3cG9ydC53XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0X3N0YXRlLnZpZXdwb3J0KCBfdmlld3BvcnQgKTtcblxuXHRcdFx0XHRzaGFkb3cudXBkYXRlTWF0cmljZXMoIGxpZ2h0LCB2cCApO1xuXG5cdFx0XHRcdF9mcnVzdHVtID0gc2hhZG93LmdldEZydXN0dW0oKTtcblxuXHRcdFx0XHRyZW5kZXJPYmplY3QoIHNjZW5lLCBjYW1lcmEsIHNoYWRvdy5jYW1lcmEsIGxpZ2h0LCB0aGlzLnR5cGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBkbyBibHVyIHBhc3MgZm9yIFZTTVxuXG5cdFx0XHRpZiAoICEgc2hhZG93LmlzUG9pbnRMaWdodFNoYWRvdyAmJiB0aGlzLnR5cGUgPT09IFZTTVNoYWRvd01hcCApIHtcblxuXHRcdFx0XHRWU01QYXNzKCBzaGFkb3csIGNhbWVyYSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHNoYWRvdy5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0c2NvcGUubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdF9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIGN1cnJlbnRSZW5kZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlLCBhY3RpdmVNaXBtYXBMZXZlbCApO1xuXG5cdH07XG5cblx0ZnVuY3Rpb24gVlNNUGFzcyggc2hhZG93LCBjYW1lcmEgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IF9vYmplY3RzLnVwZGF0ZSggZnVsbFNjcmVlbk1lc2ggKTtcblxuXHRcdGlmICggc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC5kZWZpbmVzLlZTTV9TQU1QTEVTICE9PSBzaGFkb3cuYmx1clNhbXBsZXMgKSB7XG5cblx0XHRcdHNoYWRvd01hdGVyaWFsVmVydGljYWwuZGVmaW5lcy5WU01fU0FNUExFUyA9IHNoYWRvdy5ibHVyU2FtcGxlcztcblx0XHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC5kZWZpbmVzLlZTTV9TQU1QTEVTID0gc2hhZG93LmJsdXJTYW1wbGVzO1xuXG5cdFx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHQvLyB2ZXJ0aWNhbCBwYXNzXG5cblx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlID0gc2hhZG93Lm1hcC50ZXh0dXJlO1xuXHRcdHNoYWRvd01hdGVyaWFsVmVydGljYWwudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZSA9IHNoYWRvdy5tYXBTaXplO1xuXHRcdHNoYWRvd01hdGVyaWFsVmVydGljYWwudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gc2hhZG93LnJhZGl1cztcblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBzaGFkb3cubWFwUGFzcyApO1xuXHRcdF9yZW5kZXJlci5jbGVhcigpO1xuXHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3QoIGNhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIHNoYWRvd01hdGVyaWFsVmVydGljYWwsIGZ1bGxTY3JlZW5NZXNoLCBudWxsICk7XG5cblx0XHQvLyBob3Jpem9udGFsIHBhc3NcblxuXHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZSA9IHNoYWRvdy5tYXBQYXNzLnRleHR1cmU7XG5cdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gc2hhZG93LnJhZGl1cztcblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBzaGFkb3cubWFwICk7XG5cdFx0X3JlbmRlcmVyLmNsZWFyKCk7XG5cdFx0X3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRpcmVjdCggY2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgc2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLCBmdWxsU2NyZWVuTWVzaCwgbnVsbCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXREZXB0aE1hdGVyaWFsKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgbGlnaHQsIHNoYWRvd0NhbWVyYU5lYXIsIHNoYWRvd0NhbWVyYUZhciwgdHlwZSApIHtcblxuXHRcdGxldCByZXN1bHQgPSBudWxsO1xuXG5cdFx0Y29uc3QgY3VzdG9tTWF0ZXJpYWwgPSAoIGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSApID8gb2JqZWN0LmN1c3RvbURpc3RhbmNlTWF0ZXJpYWwgOiBvYmplY3QuY3VzdG9tRGVwdGhNYXRlcmlhbDtcblxuXHRcdGlmICggY3VzdG9tTWF0ZXJpYWwgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0cmVzdWx0ID0gY3VzdG9tTWF0ZXJpYWw7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXN1bHQgPSAoIGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSApID8gX2Rpc3RhbmNlTWF0ZXJpYWwgOiBfZGVwdGhNYXRlcmlhbDtcblxuXHRcdH1cblxuXHRcdGlmICggKCBfcmVuZGVyZXIubG9jYWxDbGlwcGluZ0VuYWJsZWQgJiYgbWF0ZXJpYWwuY2xpcFNoYWRvd3MgPT09IHRydWUgJiYgbWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXMubGVuZ3RoICE9PSAwICkgfHxcblx0XHRcdCggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICYmIG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlICE9PSAwICkgfHxcblx0XHRcdCggbWF0ZXJpYWwuYWxwaGFNYXAgJiYgbWF0ZXJpYWwuYWxwaGFUZXN0ID4gMCApICkge1xuXG5cdFx0XHQvLyBpbiB0aGlzIGNhc2Ugd2UgbmVlZCBhIHVuaXF1ZSBtYXRlcmlhbCBpbnN0YW5jZSByZWZsZWN0aW5nIHRoZVxuXHRcdFx0Ly8gYXBwcm9wcmlhdGUgc3RhdGVcblxuXHRcdFx0Y29uc3Qga2V5QSA9IHJlc3VsdC51dWlkLCBrZXlCID0gbWF0ZXJpYWwudXVpZDtcblxuXHRcdFx0bGV0IG1hdGVyaWFsc0ZvclZhcmlhbnQgPSBfbWF0ZXJpYWxDYWNoZVsga2V5QSBdO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsc0ZvclZhcmlhbnQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRtYXRlcmlhbHNGb3JWYXJpYW50ID0ge307XG5cdFx0XHRcdF9tYXRlcmlhbENhY2hlWyBrZXlBIF0gPSBtYXRlcmlhbHNGb3JWYXJpYW50O1xuXG5cdFx0XHR9XG5cblx0XHRcdGxldCBjYWNoZWRNYXRlcmlhbCA9IG1hdGVyaWFsc0ZvclZhcmlhbnRbIGtleUIgXTtcblxuXHRcdFx0aWYgKCBjYWNoZWRNYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNhY2hlZE1hdGVyaWFsID0gcmVzdWx0LmNsb25lKCk7XG5cdFx0XHRcdG1hdGVyaWFsc0ZvclZhcmlhbnRbIGtleUIgXSA9IGNhY2hlZE1hdGVyaWFsO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IGNhY2hlZE1hdGVyaWFsO1xuXG5cdFx0fVxuXG5cdFx0cmVzdWx0LnZpc2libGUgPSBtYXRlcmlhbC52aXNpYmxlO1xuXHRcdHJlc3VsdC53aXJlZnJhbWUgPSBtYXRlcmlhbC53aXJlZnJhbWU7XG5cblx0XHRpZiAoIHR5cGUgPT09IFZTTVNoYWRvd01hcCApIHtcblxuXHRcdFx0cmVzdWx0LnNpZGUgPSAoIG1hdGVyaWFsLnNoYWRvd1NpZGUgIT09IG51bGwgKSA/IG1hdGVyaWFsLnNoYWRvd1NpZGUgOiBtYXRlcmlhbC5zaWRlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cmVzdWx0LnNpZGUgPSAoIG1hdGVyaWFsLnNoYWRvd1NpZGUgIT09IG51bGwgKSA/IG1hdGVyaWFsLnNoYWRvd1NpZGUgOiBzaGFkb3dTaWRlWyBtYXRlcmlhbC5zaWRlIF07XG5cblx0XHR9XG5cblx0XHRyZXN1bHQuYWxwaGFNYXAgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblx0XHRyZXN1bHQuYWxwaGFUZXN0ID0gbWF0ZXJpYWwuYWxwaGFUZXN0O1xuXG5cdFx0cmVzdWx0LmNsaXBTaGFkb3dzID0gbWF0ZXJpYWwuY2xpcFNoYWRvd3M7XG5cdFx0cmVzdWx0LmNsaXBwaW5nUGxhbmVzID0gbWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXM7XG5cdFx0cmVzdWx0LmNsaXBJbnRlcnNlY3Rpb24gPSBtYXRlcmlhbC5jbGlwSW50ZXJzZWN0aW9uO1xuXG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRyZXN1bHQuZGlzcGxhY2VtZW50U2NhbGUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRyZXN1bHQuZGlzcGxhY2VtZW50QmlhcyA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHRyZXN1bHQud2lyZWZyYW1lTGluZXdpZHRoID0gbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHJlc3VsdC5saW5ld2lkdGggPSBtYXRlcmlhbC5saW5ld2lkdGg7XG5cblx0XHRpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSAmJiByZXN1bHQuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVzdWx0LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdHJlc3VsdC5uZWFyRGlzdGFuY2UgPSBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdFx0cmVzdWx0LmZhckRpc3RhbmNlID0gc2hhZG93Q2FtZXJhRmFyO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0KCBvYmplY3QsIGNhbWVyYSwgc2hhZG93Q2FtZXJhLCBsaWdodCwgdHlwZSApIHtcblxuXHRcdGlmICggb2JqZWN0LnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdmlzaWJsZSA9IG9iamVjdC5sYXllcnMudGVzdCggY2FtZXJhLmxheWVycyApO1xuXG5cdFx0aWYgKCB2aXNpYmxlICYmICggb2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cyApICkge1xuXG5cdFx0XHRpZiAoICggb2JqZWN0LmNhc3RTaGFkb3cgfHwgKCBvYmplY3QucmVjZWl2ZVNoYWRvdyAmJiB0eXBlID09PSBWU01TaGFkb3dNYXAgKSApICYmICggISBvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSApICkge1xuXG5cdFx0XHRcdG9iamVjdC5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggc2hhZG93Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBfb2JqZWN0cy51cGRhdGUoIG9iamVjdCApO1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICkgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgayA9IDAsIGtsID0gZ3JvdXBzLmxlbmd0aDsgayA8IGtsOyBrICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1sgayBdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsWyBncm91cC5tYXRlcmlhbEluZGV4IF07XG5cblx0XHRcdFx0XHRcdGlmICggZ3JvdXBNYXRlcmlhbCAmJiBncm91cE1hdGVyaWFsLnZpc2libGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVwdGhNYXRlcmlhbCA9IGdldERlcHRoTWF0ZXJpYWwoIG9iamVjdCwgZ2VvbWV0cnksIGdyb3VwTWF0ZXJpYWwsIGxpZ2h0LCBzaGFkb3dDYW1lcmEubmVhciwgc2hhZG93Q2FtZXJhLmZhciwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3QoIHNoYWRvd0NhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIGRlcHRoTWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnZpc2libGUgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBkZXB0aE1hdGVyaWFsID0gZ2V0RGVwdGhNYXRlcmlhbCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGxpZ2h0LCBzaGFkb3dDYW1lcmEubmVhciwgc2hhZG93Q2FtZXJhLmZhciwgdHlwZSApO1xuXG5cdFx0XHRcdFx0X3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRpcmVjdCggc2hhZG93Q2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgZGVwdGhNYXRlcmlhbCwgb2JqZWN0LCBudWxsICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHJlbmRlck9iamVjdCggY2hpbGRyZW5bIGkgXSwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGxpZ2h0LCB0eXBlICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMU3RhdGUoIGdsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cblx0ZnVuY3Rpb24gQ29sb3JCdWZmZXIoKSB7XG5cblx0XHRsZXQgbG9ja2VkID0gZmFsc2U7XG5cblx0XHRjb25zdCBjb2xvciA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0bGV0IGN1cnJlbnRDb2xvck1hc2sgPSBudWxsO1xuXHRcdGNvbnN0IGN1cnJlbnRDb2xvckNsZWFyID0gbmV3IFZlY3RvcjQoIDAsIDAsIDAsIDAgKTtcblxuXHRcdHJldHVybiB7XG5cblx0XHRcdHNldE1hc2s6IGZ1bmN0aW9uICggY29sb3JNYXNrICkge1xuXG5cdFx0XHRcdGlmICggY3VycmVudENvbG9yTWFzayAhPT0gY29sb3JNYXNrICYmICEgbG9ja2VkICkge1xuXG5cdFx0XHRcdFx0Z2wuY29sb3JNYXNrKCBjb2xvck1hc2ssIGNvbG9yTWFzaywgY29sb3JNYXNrLCBjb2xvck1hc2sgKTtcblx0XHRcdFx0XHRjdXJyZW50Q29sb3JNYXNrID0gY29sb3JNYXNrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0TG9ja2VkOiBmdW5jdGlvbiAoIGxvY2sgKSB7XG5cblx0XHRcdFx0bG9ja2VkID0gbG9jaztcblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0Q2xlYXI6IGZ1bmN0aW9uICggciwgZywgYiwgYSwgcHJlbXVsdGlwbGllZEFscGhhICkge1xuXG5cdFx0XHRcdGlmICggcHJlbXVsdGlwbGllZEFscGhhID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0ciAqPSBhOyBnICo9IGE7IGIgKj0gYTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sb3Iuc2V0KCByLCBnLCBiLCBhICk7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50Q29sb3JDbGVhci5lcXVhbHMoIGNvbG9yICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0Z2wuY2xlYXJDb2xvciggciwgZywgYiwgYSApO1xuXHRcdFx0XHRcdGN1cnJlbnRDb2xvckNsZWFyLmNvcHkoIGNvbG9yICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGN1cnJlbnRDb2xvck1hc2sgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50Q29sb3JDbGVhci5zZXQoIC0gMSwgMCwgMCwgMCApOyAvLyBzZXQgdG8gaW52YWxpZCBzdGF0ZVxuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBEZXB0aEJ1ZmZlcigpIHtcblxuXHRcdGxldCBsb2NrZWQgPSBmYWxzZTtcblxuXHRcdGxldCBjdXJyZW50RGVwdGhNYXNrID0gbnVsbDtcblx0XHRsZXQgY3VycmVudERlcHRoRnVuYyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDtcblxuXHRcdHJldHVybiB7XG5cblx0XHRcdHNldFRlc3Q6IGZ1bmN0aW9uICggZGVwdGhUZXN0ICkge1xuXG5cdFx0XHRcdGlmICggZGVwdGhUZXN0ICkge1xuXG5cdFx0XHRcdFx0ZW5hYmxlKCAyOTI5ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGRpc2FibGUoIDI5MjkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldE1hc2s6IGZ1bmN0aW9uICggZGVwdGhNYXNrICkge1xuXG5cdFx0XHRcdGlmICggY3VycmVudERlcHRoTWFzayAhPT0gZGVwdGhNYXNrICYmICEgbG9ja2VkICkge1xuXG5cdFx0XHRcdFx0Z2wuZGVwdGhNYXNrKCBkZXB0aE1hc2sgKTtcblx0XHRcdFx0XHRjdXJyZW50RGVwdGhNYXNrID0gZGVwdGhNYXNrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0RnVuYzogZnVuY3Rpb24gKCBkZXB0aEZ1bmMgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50RGVwdGhGdW5jICE9PSBkZXB0aEZ1bmMgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGRlcHRoRnVuYyApIHtcblxuXHRcdFx0XHRcdFx0c3dpdGNoICggZGVwdGhGdW5jICkge1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTmV2ZXJEZXB0aDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTEyICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBBbHdheXNEZXB0aDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE5ICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBMZXNzRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxMyApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTGVzc0VxdWFsRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNSApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgRXF1YWxEZXB0aDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE0ICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBHcmVhdGVyRXF1YWxEZXB0aDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE4ICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBHcmVhdGVyRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNiApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTm90RXF1YWxEZXB0aDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE3ICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE1ICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyggNTE1ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdXJyZW50RGVwdGhGdW5jID0gZGVwdGhGdW5jO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0TG9ja2VkOiBmdW5jdGlvbiAoIGxvY2sgKSB7XG5cblx0XHRcdFx0bG9ja2VkID0gbG9jaztcblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0Q2xlYXI6IGZ1bmN0aW9uICggZGVwdGggKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50RGVwdGhDbGVhciAhPT0gZGVwdGggKSB7XG5cblx0XHRcdFx0XHRnbC5jbGVhckRlcHRoKCBkZXB0aCApO1xuXHRcdFx0XHRcdGN1cnJlbnREZXB0aENsZWFyID0gZGVwdGg7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGN1cnJlbnREZXB0aE1hc2sgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50RGVwdGhGdW5jID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudERlcHRoQ2xlYXIgPSBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBTdGVuY2lsQnVmZmVyKCkge1xuXG5cdFx0bGV0IGxvY2tlZCA9IGZhbHNlO1xuXG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRnVuYyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsUmVmID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxGdW5jTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRmFpbCA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsWkZhaWwgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFpQYXNzID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxDbGVhciA9IG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXG5cdFx0XHRzZXRUZXN0OiBmdW5jdGlvbiAoIHN0ZW5jaWxUZXN0ICkge1xuXG5cdFx0XHRcdGlmICggISBsb2NrZWQgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHN0ZW5jaWxUZXN0ICkge1xuXG5cdFx0XHRcdFx0XHRlbmFibGUoIDI5NjAgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGRpc2FibGUoIDI5NjAgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldE1hc2s6IGZ1bmN0aW9uICggc3RlbmNpbE1hc2sgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50U3RlbmNpbE1hc2sgIT09IHN0ZW5jaWxNYXNrICYmICEgbG9ja2VkICkge1xuXG5cdFx0XHRcdFx0Z2wuc3RlbmNpbE1hc2soIHN0ZW5jaWxNYXNrICk7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRzZXRGdW5jOiBmdW5jdGlvbiAoIHN0ZW5jaWxGdW5jLCBzdGVuY2lsUmVmLCBzdGVuY2lsTWFzayApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTdGVuY2lsRnVuYyAhPT0gc3RlbmNpbEZ1bmMgfHxcblx0XHRcdFx0ICAgICBjdXJyZW50U3RlbmNpbFJlZiAhPT0gc3RlbmNpbFJlZiB8fFxuXHRcdFx0XHQgICAgIGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgIT09IHN0ZW5jaWxNYXNrICkge1xuXG5cdFx0XHRcdFx0Z2wuc3RlbmNpbEZ1bmMoIHN0ZW5jaWxGdW5jLCBzdGVuY2lsUmVmLCBzdGVuY2lsTWFzayApO1xuXG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxSZWYgPSBzdGVuY2lsUmVmO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgPSBzdGVuY2lsTWFzaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldE9wOiBmdW5jdGlvbiAoIHN0ZW5jaWxGYWlsLCBzdGVuY2lsWkZhaWwsIHN0ZW5jaWxaUGFzcyApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTdGVuY2lsRmFpbCAhPT0gc3RlbmNpbEZhaWwgfHxcblx0XHRcdFx0ICAgICBjdXJyZW50U3RlbmNpbFpGYWlsICE9PSBzdGVuY2lsWkZhaWwgfHxcblx0XHRcdFx0ICAgICBjdXJyZW50U3RlbmNpbFpQYXNzICE9PSBzdGVuY2lsWlBhc3MgKSB7XG5cblx0XHRcdFx0XHRnbC5zdGVuY2lsT3AoIHN0ZW5jaWxGYWlsLCBzdGVuY2lsWkZhaWwsIHN0ZW5jaWxaUGFzcyApO1xuXG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaRmFpbCA9IHN0ZW5jaWxaRmFpbDtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbFpQYXNzID0gc3RlbmNpbFpQYXNzO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0TG9ja2VkOiBmdW5jdGlvbiAoIGxvY2sgKSB7XG5cblx0XHRcdFx0bG9ja2VkID0gbG9jaztcblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0Q2xlYXI6IGZ1bmN0aW9uICggc3RlbmNpbCApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTdGVuY2lsQ2xlYXIgIT09IHN0ZW5jaWwgKSB7XG5cblx0XHRcdFx0XHRnbC5jbGVhclN0ZW5jaWwoIHN0ZW5jaWwgKTtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbENsZWFyID0gc3RlbmNpbDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0bG9ja2VkID0gZmFsc2U7XG5cblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGdW5jID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxSZWYgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmNNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGYWlsID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaRmFpbCA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsWlBhc3MgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbENsZWFyID0gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHR9XG5cblx0Ly9cblxuXHRjb25zdCBjb2xvckJ1ZmZlciA9IG5ldyBDb2xvckJ1ZmZlcigpO1xuXHRjb25zdCBkZXB0aEJ1ZmZlciA9IG5ldyBEZXB0aEJ1ZmZlcigpO1xuXHRjb25zdCBzdGVuY2lsQnVmZmVyID0gbmV3IFN0ZW5jaWxCdWZmZXIoKTtcblxuXHRsZXQgZW5hYmxlZENhcGFiaWxpdGllcyA9IHt9O1xuXG5cdGxldCBjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnMgPSB7fTtcblx0bGV0IGN1cnJlbnREcmF3YnVmZmVycyA9IG5ldyBXZWFrTWFwKCk7XG5cdGxldCBkZWZhdWx0RHJhd2J1ZmZlcnMgPSBbXTtcblxuXHRsZXQgY3VycmVudFByb2dyYW0gPSBudWxsO1xuXG5cdGxldCBjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gZmFsc2U7XG5cdGxldCBjdXJyZW50QmxlbmRpbmcgPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kRXF1YXRpb24gPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kU3JjID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZERzdCA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZFNyY0FscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDtcblx0bGV0IGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IGZhbHNlO1xuXG5cdGxldCBjdXJyZW50RmxpcFNpZGVkID0gbnVsbDtcblx0bGV0IGN1cnJlbnRDdWxsRmFjZSA9IG51bGw7XG5cblx0bGV0IGN1cnJlbnRMaW5lV2lkdGggPSBudWxsO1xuXG5cdGxldCBjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciA9IG51bGw7XG5cdGxldCBjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gbnVsbDtcblxuXHRjb25zdCBtYXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlciggMzU2NjEgKTtcblxuXHRsZXQgbGluZVdpZHRoQXZhaWxhYmxlID0gZmFsc2U7XG5cdGxldCB2ZXJzaW9uID0gMDtcblx0Y29uc3QgZ2xWZXJzaW9uID0gZ2wuZ2V0UGFyYW1ldGVyKCA3OTM4ICk7XG5cblx0aWYgKCBnbFZlcnNpb24uaW5kZXhPZiggJ1dlYkdMJyApICE9PSAtIDEgKSB7XG5cblx0XHR2ZXJzaW9uID0gcGFyc2VGbG9hdCggL15XZWJHTCAoXFxkKS8uZXhlYyggZ2xWZXJzaW9uIClbIDEgXSApO1xuXHRcdGxpbmVXaWR0aEF2YWlsYWJsZSA9ICggdmVyc2lvbiA+PSAxLjAgKTtcblxuXHR9IGVsc2UgaWYgKCBnbFZlcnNpb24uaW5kZXhPZiggJ09wZW5HTCBFUycgKSAhPT0gLSAxICkge1xuXG5cdFx0dmVyc2lvbiA9IHBhcnNlRmxvYXQoIC9eT3BlbkdMIEVTIChcXGQpLy5leGVjKCBnbFZlcnNpb24gKVsgMSBdICk7XG5cdFx0bGluZVdpZHRoQXZhaWxhYmxlID0gKCB2ZXJzaW9uID49IDIuMCApO1xuXG5cdH1cblxuXHRsZXQgY3VycmVudFRleHR1cmVTbG90ID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCb3VuZFRleHR1cmVzID0ge307XG5cblx0Y29uc3Qgc2Npc3NvclBhcmFtID0gZ2wuZ2V0UGFyYW1ldGVyKCAzMDg4ICk7XG5cdGNvbnN0IHZpZXdwb3J0UGFyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoIDI5NzggKTtcblxuXHRjb25zdCBjdXJyZW50U2Npc3NvciA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KCBzY2lzc29yUGFyYW0gKTtcblx0Y29uc3QgY3VycmVudFZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKS5mcm9tQXJyYXkoIHZpZXdwb3J0UGFyYW0gKTtcblxuXHRmdW5jdGlvbiBjcmVhdGVUZXh0dXJlKCB0eXBlLCB0YXJnZXQsIGNvdW50ICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KCA0ICk7IC8vIDQgaXMgcmVxdWlyZWQgdG8gbWF0Y2ggZGVmYXVsdCB1bnBhY2sgYWxpZ25tZW50IG9mIDQuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHRcdGdsLmJpbmRUZXh0dXJlKCB0eXBlLCB0ZXh0dXJlICk7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaSggdHlwZSwgMTAyNDEsIDk3MjggKTtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKCB0eXBlLCAxMDI0MCwgOTcyOCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY291bnQ7IGkgKysgKSB7XG5cblx0XHRcdGdsLnRleEltYWdlMkQoIHRhcmdldCArIGksIDAsIDY0MDgsIDEsIDEsIDAsIDY0MDgsIDUxMjEsIGRhdGEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxuXHRjb25zdCBlbXB0eVRleHR1cmVzID0ge307XG5cdGVtcHR5VGV4dHVyZXNbIDM1NTMgXSA9IGNyZWF0ZVRleHR1cmUoIDM1NTMsIDM1NTMsIDEgKTtcblx0ZW1wdHlUZXh0dXJlc1sgMzQwNjcgXSA9IGNyZWF0ZVRleHR1cmUoIDM0MDY3LCAzNDA2OSwgNiApO1xuXG5cdC8vIGluaXRcblxuXHRjb2xvckJ1ZmZlci5zZXRDbGVhciggMCwgMCwgMCwgMSApO1xuXHRkZXB0aEJ1ZmZlci5zZXRDbGVhciggMSApO1xuXHRzdGVuY2lsQnVmZmVyLnNldENsZWFyKCAwICk7XG5cblx0ZW5hYmxlKCAyOTI5ICk7XG5cdGRlcHRoQnVmZmVyLnNldEZ1bmMoIExlc3NFcXVhbERlcHRoICk7XG5cblx0c2V0RmxpcFNpZGVkKCBmYWxzZSApO1xuXHRzZXRDdWxsRmFjZSggQ3VsbEZhY2VCYWNrICk7XG5cdGVuYWJsZSggMjg4NCApO1xuXG5cdHNldEJsZW5kaW5nKCBOb0JsZW5kaW5nICk7XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBlbmFibGUoIGlkICkge1xuXG5cdFx0aWYgKCBlbmFibGVkQ2FwYWJpbGl0aWVzWyBpZCBdICE9PSB0cnVlICkge1xuXG5cdFx0XHRnbC5lbmFibGUoIGlkICk7XG5cdFx0XHRlbmFibGVkQ2FwYWJpbGl0aWVzWyBpZCBdID0gdHJ1ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzYWJsZSggaWQgKSB7XG5cblx0XHRpZiAoIGVuYWJsZWRDYXBhYmlsaXRpZXNbIGlkIF0gIT09IGZhbHNlICkge1xuXG5cdFx0XHRnbC5kaXNhYmxlKCBpZCApO1xuXHRcdFx0ZW5hYmxlZENhcGFiaWxpdGllc1sgaWQgXSA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kRnJhbWVidWZmZXIoIHRhcmdldCwgZnJhbWVidWZmZXIgKSB7XG5cblx0XHRpZiAoIGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1sgdGFyZ2V0IF0gIT09IGZyYW1lYnVmZmVyICkge1xuXG5cdFx0XHRnbC5iaW5kRnJhbWVidWZmZXIoIHRhcmdldCwgZnJhbWVidWZmZXIgKTtcblxuXHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzWyB0YXJnZXQgXSA9IGZyYW1lYnVmZmVyO1xuXG5cdFx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRcdC8vIDM2MDA5IGlzIGVxdWl2YWxlbnQgdG8gMzYxNjBcblxuXHRcdFx0XHRpZiAoIHRhcmdldCA9PT0gMzYwMDkgKSB7XG5cblx0XHRcdFx0XHRjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnNbIDM2MTYwIF0gPSBmcmFtZWJ1ZmZlcjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IDM2MTYwICkge1xuXG5cdFx0XHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzWyAzNjAwOSBdID0gZnJhbWVidWZmZXI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3QnVmZmVycyggcmVuZGVyVGFyZ2V0LCBmcmFtZWJ1ZmZlciApIHtcblxuXHRcdGxldCBkcmF3QnVmZmVycyA9IGRlZmF1bHREcmF3YnVmZmVycztcblxuXHRcdGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdGRyYXdCdWZmZXJzID0gY3VycmVudERyYXdidWZmZXJzLmdldCggZnJhbWVidWZmZXIgKTtcblxuXHRcdFx0aWYgKCBkcmF3QnVmZmVycyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGRyYXdCdWZmZXJzID0gW107XG5cdFx0XHRcdGN1cnJlbnREcmF3YnVmZmVycy5zZXQoIGZyYW1lYnVmZmVyLCBkcmF3QnVmZmVycyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgKSB7XG5cblx0XHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0XHRpZiAoIGRyYXdCdWZmZXJzLmxlbmd0aCAhPT0gdGV4dHVyZXMubGVuZ3RoIHx8IGRyYXdCdWZmZXJzWyAwIF0gIT09IDM2MDY0ICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRkcmF3QnVmZmVyc1sgaSBdID0gMzYwNjQgKyBpO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZHJhd0J1ZmZlcnMubGVuZ3RoID0gdGV4dHVyZXMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0bmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIGRyYXdCdWZmZXJzWyAwIF0gIT09IDM2MDY0ICkge1xuXG5cdFx0XHRcdFx0ZHJhd0J1ZmZlcnNbIDAgXSA9IDM2MDY0O1xuXG5cdFx0XHRcdFx0bmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBkcmF3QnVmZmVyc1sgMCBdICE9PSAxMDI5ICkge1xuXG5cdFx0XHRcdGRyYXdCdWZmZXJzWyAwIF0gPSAxMDI5O1xuXG5cdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBuZWVkc1VwZGF0ZSApIHtcblxuXHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0Z2wuZHJhd0J1ZmZlcnMoIGRyYXdCdWZmZXJzICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0ZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9kcmF3X2J1ZmZlcnMnICkuZHJhd0J1ZmZlcnNXRUJHTCggZHJhd0J1ZmZlcnMgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVzZVByb2dyYW0oIHByb2dyYW0gKSB7XG5cblx0XHRpZiAoIGN1cnJlbnRQcm9ncmFtICE9PSBwcm9ncmFtICkge1xuXG5cdFx0XHRnbC51c2VQcm9ncmFtKCBwcm9ncmFtICk7XG5cblx0XHRcdGN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fVxuXG5cdGNvbnN0IGVxdWF0aW9uVG9HTCA9IHtcblx0XHRbIEFkZEVxdWF0aW9uIF06IDMyNzc0LFxuXHRcdFsgU3VidHJhY3RFcXVhdGlvbiBdOiAzMjc3OCxcblx0XHRbIFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uIF06IDMyNzc5XG5cdH07XG5cblx0aWYgKCBpc1dlYkdMMiApIHtcblxuXHRcdGVxdWF0aW9uVG9HTFsgTWluRXF1YXRpb24gXSA9IDMyNzc1O1xuXHRcdGVxdWF0aW9uVG9HTFsgTWF4RXF1YXRpb24gXSA9IDMyNzc2O1xuXG5cdH0gZWxzZSB7XG5cblx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICk7XG5cblx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0ZXF1YXRpb25Ub0dMWyBNaW5FcXVhdGlvbiBdID0gZXh0ZW5zaW9uLk1JTl9FWFQ7XG5cdFx0XHRlcXVhdGlvblRvR0xbIE1heEVxdWF0aW9uIF0gPSBleHRlbnNpb24uTUFYX0VYVDtcblxuXHRcdH1cblxuXHR9XG5cblx0Y29uc3QgZmFjdG9yVG9HTCA9IHtcblx0XHRbIFplcm9GYWN0b3IgXTogMCxcblx0XHRbIE9uZUZhY3RvciBdOiAxLFxuXHRcdFsgU3JjQ29sb3JGYWN0b3IgXTogNzY4LFxuXHRcdFsgU3JjQWxwaGFGYWN0b3IgXTogNzcwLFxuXHRcdFsgU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciBdOiA3NzYsXG5cdFx0WyBEc3RDb2xvckZhY3RvciBdOiA3NzQsXG5cdFx0WyBEc3RBbHBoYUZhY3RvciBdOiA3NzIsXG5cdFx0WyBPbmVNaW51c1NyY0NvbG9yRmFjdG9yIF06IDc2OSxcblx0XHRbIE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgXTogNzcxLFxuXHRcdFsgT25lTWludXNEc3RDb2xvckZhY3RvciBdOiA3NzUsXG5cdFx0WyBPbmVNaW51c0RzdEFscGhhRmFjdG9yIF06IDc3M1xuXHR9O1xuXG5cdGZ1bmN0aW9uIHNldEJsZW5kaW5nKCBibGVuZGluZywgYmxlbmRFcXVhdGlvbiwgYmxlbmRTcmMsIGJsZW5kRHN0LCBibGVuZEVxdWF0aW9uQWxwaGEsIGJsZW5kU3JjQWxwaGEsIGJsZW5kRHN0QWxwaGEsIHByZW11bHRpcGxpZWRBbHBoYSApIHtcblxuXHRcdGlmICggYmxlbmRpbmcgPT09IE5vQmxlbmRpbmcgKSB7XG5cblx0XHRcdGlmICggY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRkaXNhYmxlKCAzMDQyICk7XG5cdFx0XHRcdGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRlbmFibGUoIDMwNDIgKTtcblx0XHRcdGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBibGVuZGluZyAhPT0gQ3VzdG9tQmxlbmRpbmcgKSB7XG5cblx0XHRcdGlmICggYmxlbmRpbmcgIT09IGN1cnJlbnRCbGVuZGluZyB8fCBwcmVtdWx0aXBsaWVkQWxwaGEgIT09IGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRCbGVuZEVxdWF0aW9uICE9PSBBZGRFcXVhdGlvbiB8fCBjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhICE9PSBBZGRFcXVhdGlvbiApIHtcblxuXHRcdFx0XHRcdGdsLmJsZW5kRXF1YXRpb24oIDMyNzc0ICk7XG5cblx0XHRcdFx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uO1xuXHRcdFx0XHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgPSBBZGRFcXVhdGlvbjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBwcmVtdWx0aXBsaWVkQWxwaGEgKSB7XG5cblx0XHRcdFx0XHRzd2l0Y2ggKCBibGVuZGluZyApIHtcblxuXHRcdFx0XHRcdFx0Y2FzZSBOb3JtYWxCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIDEsIDc3MSwgMSwgNzcxICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIEFkZGl0aXZlQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuYyggMSwgMSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBTdWJ0cmFjdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggMCwgNzY5LCAwLCAxICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIE11bHRpcGx5QmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAwLCA3NjgsIDAsIDc3MCApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICcsIGJsZW5kaW5nICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRzd2l0Y2ggKCBibGVuZGluZyApIHtcblxuXHRcdFx0XHRcdFx0Y2FzZSBOb3JtYWxCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIDc3MCwgNzcxLCAxLCA3NzEgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgQWRkaXRpdmVCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jKCA3NzAsIDEgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgU3VidHJhY3RpdmVCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIDAsIDc2OSwgMCwgMSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBNdWx0aXBseUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmMoIDAsIDc2OCApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICcsIGJsZW5kaW5nICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50QmxlbmRTcmMgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmREc3QgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDtcblxuXHRcdFx0XHRjdXJyZW50QmxlbmRpbmcgPSBibGVuZGluZztcblx0XHRcdFx0Y3VycmVudFByZW11bHRpcGxlZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdC8vIGN1c3RvbSBibGVuZGluZ1xuXG5cdFx0YmxlbmRFcXVhdGlvbkFscGhhID0gYmxlbmRFcXVhdGlvbkFscGhhIHx8IGJsZW5kRXF1YXRpb247XG5cdFx0YmxlbmRTcmNBbHBoYSA9IGJsZW5kU3JjQWxwaGEgfHwgYmxlbmRTcmM7XG5cdFx0YmxlbmREc3RBbHBoYSA9IGJsZW5kRHN0QWxwaGEgfHwgYmxlbmREc3Q7XG5cblx0XHRpZiAoIGJsZW5kRXF1YXRpb24gIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uIHx8IGJsZW5kRXF1YXRpb25BbHBoYSAhPT0gY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSApIHtcblxuXHRcdFx0Z2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBlcXVhdGlvblRvR0xbIGJsZW5kRXF1YXRpb24gXSwgZXF1YXRpb25Ub0dMWyBibGVuZEVxdWF0aW9uQWxwaGEgXSApO1xuXG5cdFx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbiA9IGJsZW5kRXF1YXRpb247XG5cdFx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gYmxlbmRFcXVhdGlvbkFscGhhO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBibGVuZFNyYyAhPT0gY3VycmVudEJsZW5kU3JjIHx8IGJsZW5kRHN0ICE9PSBjdXJyZW50QmxlbmREc3QgfHwgYmxlbmRTcmNBbHBoYSAhPT0gY3VycmVudEJsZW5kU3JjQWxwaGEgfHwgYmxlbmREc3RBbHBoYSAhPT0gY3VycmVudEJsZW5kRHN0QWxwaGEgKSB7XG5cblx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCBmYWN0b3JUb0dMWyBibGVuZFNyYyBdLCBmYWN0b3JUb0dMWyBibGVuZERzdCBdLCBmYWN0b3JUb0dMWyBibGVuZFNyY0FscGhhIF0sIGZhY3RvclRvR0xbIGJsZW5kRHN0QWxwaGEgXSApO1xuXG5cdFx0XHRjdXJyZW50QmxlbmRTcmMgPSBibGVuZFNyYztcblx0XHRcdGN1cnJlbnRCbGVuZERzdCA9IGJsZW5kRHN0O1xuXHRcdFx0Y3VycmVudEJsZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhO1xuXHRcdFx0Y3VycmVudEJsZW5kRHN0QWxwaGEgPSBibGVuZERzdEFscGhhO1xuXG5cdFx0fVxuXG5cdFx0Y3VycmVudEJsZW5kaW5nID0gYmxlbmRpbmc7XG5cdFx0Y3VycmVudFByZW11bHRpcGxlZEFscGhhID0gbnVsbDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0TWF0ZXJpYWwoIG1hdGVyaWFsLCBmcm9udEZhY2VDVyApIHtcblxuXHRcdG1hdGVyaWFsLnNpZGUgPT09IERvdWJsZVNpZGVcblx0XHRcdD8gZGlzYWJsZSggMjg4NCApXG5cdFx0XHQ6IGVuYWJsZSggMjg4NCApO1xuXG5cdFx0bGV0IGZsaXBTaWRlZCA9ICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKTtcblx0XHRpZiAoIGZyb250RmFjZUNXICkgZmxpcFNpZGVkID0gISBmbGlwU2lkZWQ7XG5cblx0XHRzZXRGbGlwU2lkZWQoIGZsaXBTaWRlZCApO1xuXG5cdFx0KCBtYXRlcmlhbC5ibGVuZGluZyA9PT0gTm9ybWFsQmxlbmRpbmcgJiYgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IGZhbHNlIClcblx0XHRcdD8gc2V0QmxlbmRpbmcoIE5vQmxlbmRpbmcgKVxuXHRcdFx0OiBzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcsIG1hdGVyaWFsLmJsZW5kRXF1YXRpb24sIG1hdGVyaWFsLmJsZW5kU3JjLCBtYXRlcmlhbC5ibGVuZERzdCwgbWF0ZXJpYWwuYmxlbmRFcXVhdGlvbkFscGhhLCBtYXRlcmlhbC5ibGVuZFNyY0FscGhhLCBtYXRlcmlhbC5ibGVuZERzdEFscGhhLCBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEgKTtcblxuXHRcdGRlcHRoQnVmZmVyLnNldEZ1bmMoIG1hdGVyaWFsLmRlcHRoRnVuYyApO1xuXHRcdGRlcHRoQnVmZmVyLnNldFRlc3QoIG1hdGVyaWFsLmRlcHRoVGVzdCApO1xuXHRcdGRlcHRoQnVmZmVyLnNldE1hc2soIG1hdGVyaWFsLmRlcHRoV3JpdGUgKTtcblx0XHRjb2xvckJ1ZmZlci5zZXRNYXNrKCBtYXRlcmlhbC5jb2xvcldyaXRlICk7XG5cblx0XHRjb25zdCBzdGVuY2lsV3JpdGUgPSBtYXRlcmlhbC5zdGVuY2lsV3JpdGU7XG5cdFx0c3RlbmNpbEJ1ZmZlci5zZXRUZXN0KCBzdGVuY2lsV3JpdGUgKTtcblx0XHRpZiAoIHN0ZW5jaWxXcml0ZSApIHtcblxuXHRcdFx0c3RlbmNpbEJ1ZmZlci5zZXRNYXNrKCBtYXRlcmlhbC5zdGVuY2lsV3JpdGVNYXNrICk7XG5cdFx0XHRzdGVuY2lsQnVmZmVyLnNldEZ1bmMoIG1hdGVyaWFsLnN0ZW5jaWxGdW5jLCBtYXRlcmlhbC5zdGVuY2lsUmVmLCBtYXRlcmlhbC5zdGVuY2lsRnVuY01hc2sgKTtcblx0XHRcdHN0ZW5jaWxCdWZmZXIuc2V0T3AoIG1hdGVyaWFsLnN0ZW5jaWxGYWlsLCBtYXRlcmlhbC5zdGVuY2lsWkZhaWwsIG1hdGVyaWFsLnN0ZW5jaWxaUGFzcyApO1xuXG5cdFx0fVxuXG5cdFx0c2V0UG9seWdvbk9mZnNldCggbWF0ZXJpYWwucG9seWdvbk9mZnNldCwgbWF0ZXJpYWwucG9seWdvbk9mZnNldEZhY3RvciwgbWF0ZXJpYWwucG9seWdvbk9mZnNldFVuaXRzICk7XG5cblx0XHRtYXRlcmlhbC5hbHBoYVRvQ292ZXJhZ2UgPT09IHRydWVcblx0XHRcdD8gZW5hYmxlKCAzMjkyNiApXG5cdFx0XHQ6IGRpc2FibGUoIDMyOTI2ICk7XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gc2V0RmxpcFNpZGVkKCBmbGlwU2lkZWQgKSB7XG5cblx0XHRpZiAoIGN1cnJlbnRGbGlwU2lkZWQgIT09IGZsaXBTaWRlZCApIHtcblxuXHRcdFx0aWYgKCBmbGlwU2lkZWQgKSB7XG5cblx0XHRcdFx0Z2wuZnJvbnRGYWNlKCAyMzA0ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Z2wuZnJvbnRGYWNlKCAyMzA1ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudEZsaXBTaWRlZCA9IGZsaXBTaWRlZDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Q3VsbEZhY2UoIGN1bGxGYWNlICkge1xuXG5cdFx0aWYgKCBjdWxsRmFjZSAhPT0gQ3VsbEZhY2VOb25lICkge1xuXG5cdFx0XHRlbmFibGUoIDI4ODQgKTtcblxuXHRcdFx0aWYgKCBjdWxsRmFjZSAhPT0gY3VycmVudEN1bGxGYWNlICkge1xuXG5cdFx0XHRcdGlmICggY3VsbEZhY2UgPT09IEN1bGxGYWNlQmFjayApIHtcblxuXHRcdFx0XHRcdGdsLmN1bGxGYWNlKCAxMDI5ICk7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggY3VsbEZhY2UgPT09IEN1bGxGYWNlRnJvbnQgKSB7XG5cblx0XHRcdFx0XHRnbC5jdWxsRmFjZSggMTAyOCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRnbC5jdWxsRmFjZSggMTAzMiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0ZGlzYWJsZSggMjg4NCApO1xuXG5cdFx0fVxuXG5cdFx0Y3VycmVudEN1bGxGYWNlID0gY3VsbEZhY2U7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVXaWR0aCggd2lkdGggKSB7XG5cblx0XHRpZiAoIHdpZHRoICE9PSBjdXJyZW50TGluZVdpZHRoICkge1xuXG5cdFx0XHRpZiAoIGxpbmVXaWR0aEF2YWlsYWJsZSApIGdsLmxpbmVXaWR0aCggd2lkdGggKTtcblxuXHRcdFx0Y3VycmVudExpbmVXaWR0aCA9IHdpZHRoO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRQb2x5Z29uT2Zmc2V0KCBwb2x5Z29uT2Zmc2V0LCBmYWN0b3IsIHVuaXRzICkge1xuXG5cdFx0aWYgKCBwb2x5Z29uT2Zmc2V0ICkge1xuXG5cdFx0XHRlbmFibGUoIDMyODIzICk7XG5cblx0XHRcdGlmICggY3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgIT09IGZhY3RvciB8fCBjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzICE9PSB1bml0cyApIHtcblxuXHRcdFx0XHRnbC5wb2x5Z29uT2Zmc2V0KCBmYWN0b3IsIHVuaXRzICk7XG5cblx0XHRcdFx0Y3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7XG5cdFx0XHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0VW5pdHMgPSB1bml0cztcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0ZGlzYWJsZSggMzI4MjMgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0U2Npc3NvclRlc3QoIHNjaXNzb3JUZXN0ICkge1xuXG5cdFx0aWYgKCBzY2lzc29yVGVzdCApIHtcblxuXHRcdFx0ZW5hYmxlKCAzMDg5ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRkaXNhYmxlKCAzMDg5ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vIHRleHR1cmVcblxuXHRmdW5jdGlvbiBhY3RpdmVUZXh0dXJlKCB3ZWJnbFNsb3QgKSB7XG5cblx0XHRpZiAoIHdlYmdsU2xvdCA9PT0gdW5kZWZpbmVkICkgd2ViZ2xTbG90ID0gMzM5ODQgKyBtYXhUZXh0dXJlcyAtIDE7XG5cblx0XHRpZiAoIGN1cnJlbnRUZXh0dXJlU2xvdCAhPT0gd2ViZ2xTbG90ICkge1xuXG5cdFx0XHRnbC5hY3RpdmVUZXh0dXJlKCB3ZWJnbFNsb3QgKTtcblx0XHRcdGN1cnJlbnRUZXh0dXJlU2xvdCA9IHdlYmdsU2xvdDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gYmluZFRleHR1cmUoIHdlYmdsVHlwZSwgd2ViZ2xUZXh0dXJlICkge1xuXG5cdFx0aWYgKCBjdXJyZW50VGV4dHVyZVNsb3QgPT09IG51bGwgKSB7XG5cblx0XHRcdGFjdGl2ZVRleHR1cmUoKTtcblxuXHRcdH1cblxuXHRcdGxldCBib3VuZFRleHR1cmUgPSBjdXJyZW50Qm91bmRUZXh0dXJlc1sgY3VycmVudFRleHR1cmVTbG90IF07XG5cblx0XHRpZiAoIGJvdW5kVGV4dHVyZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRib3VuZFRleHR1cmUgPSB7IHR5cGU6IHVuZGVmaW5lZCwgdGV4dHVyZTogdW5kZWZpbmVkIH07XG5cdFx0XHRjdXJyZW50Qm91bmRUZXh0dXJlc1sgY3VycmVudFRleHR1cmVTbG90IF0gPSBib3VuZFRleHR1cmU7XG5cblx0XHR9XG5cblx0XHRpZiAoIGJvdW5kVGV4dHVyZS50eXBlICE9PSB3ZWJnbFR5cGUgfHwgYm91bmRUZXh0dXJlLnRleHR1cmUgIT09IHdlYmdsVGV4dHVyZSApIHtcblxuXHRcdFx0Z2wuYmluZFRleHR1cmUoIHdlYmdsVHlwZSwgd2ViZ2xUZXh0dXJlIHx8IGVtcHR5VGV4dHVyZXNbIHdlYmdsVHlwZSBdICk7XG5cblx0XHRcdGJvdW5kVGV4dHVyZS50eXBlID0gd2ViZ2xUeXBlO1xuXHRcdFx0Ym91bmRUZXh0dXJlLnRleHR1cmUgPSB3ZWJnbFRleHR1cmU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVuYmluZFRleHR1cmUoKSB7XG5cblx0XHRjb25zdCBib3VuZFRleHR1cmUgPSBjdXJyZW50Qm91bmRUZXh0dXJlc1sgY3VycmVudFRleHR1cmVTbG90IF07XG5cblx0XHRpZiAoIGJvdW5kVGV4dHVyZSAhPT0gdW5kZWZpbmVkICYmIGJvdW5kVGV4dHVyZS50eXBlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGdsLmJpbmRUZXh0dXJlKCBib3VuZFRleHR1cmUudHlwZSwgbnVsbCApO1xuXG5cdFx0XHRib3VuZFRleHR1cmUudHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdGJvdW5kVGV4dHVyZS50ZXh0dXJlID0gdW5kZWZpbmVkO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjb21wcmVzc2VkVGV4SW1hZ2UyRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7XG5cblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN1YkltYWdlMkQoKSB7XG5cblx0XHR0cnkge1xuXG5cdFx0XHRnbC50ZXhTdWJJbWFnZTJELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7XG5cblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN1YkltYWdlM0QoKSB7XG5cblx0XHR0cnkge1xuXG5cdFx0XHRnbC50ZXhTdWJJbWFnZTNELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7XG5cblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoIGdsLCBhcmd1bWVudHMgKTtcblxuXHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4U3RvcmFnZTJEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wudGV4U3RvcmFnZTJELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7XG5cblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN0b3JhZ2UzRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLnRleFN0b3JhZ2UzRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhJbWFnZTJEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wudGV4SW1hZ2UyRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhJbWFnZTNEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wudGV4SW1hZ2UzRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIHNjaXNzb3IoIHNjaXNzb3IgKSB7XG5cblx0XHRpZiAoIGN1cnJlbnRTY2lzc29yLmVxdWFscyggc2Npc3NvciApID09PSBmYWxzZSApIHtcblxuXHRcdFx0Z2wuc2Npc3Nvciggc2Npc3Nvci54LCBzY2lzc29yLnksIHNjaXNzb3Iueiwgc2Npc3Nvci53ICk7XG5cdFx0XHRjdXJyZW50U2Npc3Nvci5jb3B5KCBzY2lzc29yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHZpZXdwb3J0KCB2aWV3cG9ydCApIHtcblxuXHRcdGlmICggY3VycmVudFZpZXdwb3J0LmVxdWFscyggdmlld3BvcnQgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGdsLnZpZXdwb3J0KCB2aWV3cG9ydC54LCB2aWV3cG9ydC55LCB2aWV3cG9ydC56LCB2aWV3cG9ydC53ICk7XG5cdFx0XHRjdXJyZW50Vmlld3BvcnQuY29weSggdmlld3BvcnQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiByZXNldCgpIHtcblxuXHRcdC8vIHJlc2V0IHN0YXRlXG5cblx0XHRnbC5kaXNhYmxlKCAzMDQyICk7XG5cdFx0Z2wuZGlzYWJsZSggMjg4NCApO1xuXHRcdGdsLmRpc2FibGUoIDI5MjkgKTtcblx0XHRnbC5kaXNhYmxlKCAzMjgyMyApO1xuXHRcdGdsLmRpc2FibGUoIDMwODkgKTtcblx0XHRnbC5kaXNhYmxlKCAyOTYwICk7XG5cdFx0Z2wuZGlzYWJsZSggMzI5MjYgKTtcblxuXHRcdGdsLmJsZW5kRXF1YXRpb24oIDMyNzc0ICk7XG5cdFx0Z2wuYmxlbmRGdW5jKCAxLCAwICk7XG5cdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIDEsIDAsIDEsIDAgKTtcblxuXHRcdGdsLmNvbG9yTWFzayggdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSApO1xuXHRcdGdsLmNsZWFyQ29sb3IoIDAsIDAsIDAsIDAgKTtcblxuXHRcdGdsLmRlcHRoTWFzayggdHJ1ZSApO1xuXHRcdGdsLmRlcHRoRnVuYyggNTEzICk7XG5cdFx0Z2wuY2xlYXJEZXB0aCggMSApO1xuXG5cdFx0Z2wuc3RlbmNpbE1hc2soIDB4ZmZmZmZmZmYgKTtcblx0XHRnbC5zdGVuY2lsRnVuYyggNTE5LCAwLCAweGZmZmZmZmZmICk7XG5cdFx0Z2wuc3RlbmNpbE9wKCA3NjgwLCA3NjgwLCA3NjgwICk7XG5cdFx0Z2wuY2xlYXJTdGVuY2lsKCAwICk7XG5cblx0XHRnbC5jdWxsRmFjZSggMTAyOSApO1xuXHRcdGdsLmZyb250RmFjZSggMjMwNSApO1xuXG5cdFx0Z2wucG9seWdvbk9mZnNldCggMCwgMCApO1xuXG5cdFx0Z2wuYWN0aXZlVGV4dHVyZSggMzM5ODQgKTtcblxuXHRcdGdsLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIG51bGwgKTtcblxuXHRcdGlmICggaXNXZWJHTDIgPT09IHRydWUgKSB7XG5cblx0XHRcdGdsLmJpbmRGcmFtZWJ1ZmZlciggMzYwMDksIG51bGwgKTtcblx0XHRcdGdsLmJpbmRGcmFtZWJ1ZmZlciggMzYwMDgsIG51bGwgKTtcblxuXHRcdH1cblxuXHRcdGdsLnVzZVByb2dyYW0oIG51bGwgKTtcblxuXHRcdGdsLmxpbmVXaWR0aCggMSApO1xuXG5cdFx0Z2wuc2Npc3NvciggMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0ICk7XG5cdFx0Z2wudmlld3BvcnQoIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCApO1xuXG5cdFx0Ly8gcmVzZXQgaW50ZXJuYWxzXG5cblx0XHRlbmFibGVkQ2FwYWJpbGl0aWVzID0ge307XG5cblx0XHRjdXJyZW50VGV4dHVyZVNsb3QgPSBudWxsO1xuXHRcdGN1cnJlbnRCb3VuZFRleHR1cmVzID0ge307XG5cblx0XHRjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnMgPSB7fTtcblx0XHRjdXJyZW50RHJhd2J1ZmZlcnMgPSBuZXcgV2Vha01hcCgpO1xuXHRcdGRlZmF1bHREcmF3YnVmZmVycyA9IFtdO1xuXG5cdFx0Y3VycmVudFByb2dyYW0gPSBudWxsO1xuXG5cdFx0Y3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRcdGN1cnJlbnRCbGVuZGluZyA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZFNyYyA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRHN0ID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRHN0QWxwaGEgPSBudWxsO1xuXHRcdGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IGZhbHNlO1xuXG5cdFx0Y3VycmVudEZsaXBTaWRlZCA9IG51bGw7XG5cdFx0Y3VycmVudEN1bGxGYWNlID0gbnVsbDtcblxuXHRcdGN1cnJlbnRMaW5lV2lkdGggPSBudWxsO1xuXG5cdFx0Y3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgPSBudWxsO1xuXHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0VW5pdHMgPSBudWxsO1xuXG5cdFx0Y3VycmVudFNjaXNzb3Iuc2V0KCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQgKTtcblx0XHRjdXJyZW50Vmlld3BvcnQuc2V0KCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQgKTtcblxuXHRcdGNvbG9yQnVmZmVyLnJlc2V0KCk7XG5cdFx0ZGVwdGhCdWZmZXIucmVzZXQoKTtcblx0XHRzdGVuY2lsQnVmZmVyLnJlc2V0KCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cblx0XHRidWZmZXJzOiB7XG5cdFx0XHRjb2xvcjogY29sb3JCdWZmZXIsXG5cdFx0XHRkZXB0aDogZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsOiBzdGVuY2lsQnVmZmVyXG5cdFx0fSxcblxuXHRcdGVuYWJsZTogZW5hYmxlLFxuXHRcdGRpc2FibGU6IGRpc2FibGUsXG5cblx0XHRiaW5kRnJhbWVidWZmZXI6IGJpbmRGcmFtZWJ1ZmZlcixcblx0XHRkcmF3QnVmZmVyczogZHJhd0J1ZmZlcnMsXG5cblx0XHR1c2VQcm9ncmFtOiB1c2VQcm9ncmFtLFxuXG5cdFx0c2V0QmxlbmRpbmc6IHNldEJsZW5kaW5nLFxuXHRcdHNldE1hdGVyaWFsOiBzZXRNYXRlcmlhbCxcblxuXHRcdHNldEZsaXBTaWRlZDogc2V0RmxpcFNpZGVkLFxuXHRcdHNldEN1bGxGYWNlOiBzZXRDdWxsRmFjZSxcblxuXHRcdHNldExpbmVXaWR0aDogc2V0TGluZVdpZHRoLFxuXHRcdHNldFBvbHlnb25PZmZzZXQ6IHNldFBvbHlnb25PZmZzZXQsXG5cblx0XHRzZXRTY2lzc29yVGVzdDogc2V0U2Npc3NvclRlc3QsXG5cblx0XHRhY3RpdmVUZXh0dXJlOiBhY3RpdmVUZXh0dXJlLFxuXHRcdGJpbmRUZXh0dXJlOiBiaW5kVGV4dHVyZSxcblx0XHR1bmJpbmRUZXh0dXJlOiB1bmJpbmRUZXh0dXJlLFxuXHRcdGNvbXByZXNzZWRUZXhJbWFnZTJEOiBjb21wcmVzc2VkVGV4SW1hZ2UyRCxcblx0XHR0ZXhJbWFnZTJEOiB0ZXhJbWFnZTJELFxuXHRcdHRleEltYWdlM0Q6IHRleEltYWdlM0QsXG5cblx0XHR0ZXhTdG9yYWdlMkQ6IHRleFN0b3JhZ2UyRCxcblx0XHR0ZXhTdG9yYWdlM0Q6IHRleFN0b3JhZ2UzRCxcblx0XHR0ZXhTdWJJbWFnZTJEOiB0ZXhTdWJJbWFnZTJELFxuXHRcdHRleFN1YkltYWdlM0Q6IHRleFN1YkltYWdlM0QsXG5cdFx0Y29tcHJlc3NlZFRleFN1YkltYWdlMkQ6IGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELFxuXG5cdFx0c2Npc3Nvcjogc2Npc3Nvcixcblx0XHR2aWV3cG9ydDogdmlld3BvcnQsXG5cblx0XHRyZXNldDogcmVzZXRcblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMVGV4dHVyZXMoIF9nbCwgZXh0ZW5zaW9ucywgc3RhdGUsIHByb3BlcnRpZXMsIGNhcGFiaWxpdGllcywgdXRpbHMsIGluZm8gKSB7XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cdGNvbnN0IG1heFRleHR1cmVzID0gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVzO1xuXHRjb25zdCBtYXhDdWJlbWFwU2l6ZSA9IGNhcGFiaWxpdGllcy5tYXhDdWJlbWFwU2l6ZTtcblx0Y29uc3QgbWF4VGV4dHVyZVNpemUgPSBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemU7XG5cdGNvbnN0IG1heFNhbXBsZXMgPSBjYXBhYmlsaXRpZXMubWF4U2FtcGxlcztcblx0Y29uc3QgaGFzTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gZXh0ZW5zaW9ucy5oYXMoICdXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUnICk7XG5cdGNvbnN0IE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbiA9IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA/IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyApIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IF92aWRlb1RleHR1cmVzID0gbmV3IFdlYWtNYXAoKTtcblx0bGV0IF9jYW52YXM7XG5cblx0Ly8gY29yZG92YSBpT1MgKGFzIG9mIDUuMCkgc3RpbGwgdXNlcyBVSVdlYlZpZXcsIHdoaWNoIHByb3ZpZGVzIE9mZnNjcmVlbkNhbnZhcyxcblx0Ly8gYWxzbyBPZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIpLCBidXQgbm90IE9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikhXG5cdC8vIFNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBvbmx5IGltcGxlbWVudCBPZmZzY3JlZW5DYW52YXMgcGFydGlhbGx5IChlLmcuIGxhY2tpbmcgMmQpLlxuXG5cdGxldCB1c2VPZmZzY3JlZW5DYW52YXMgPSBmYWxzZTtcblxuXHR0cnkge1xuXG5cdFx0dXNlT2Zmc2NyZWVuQ2FudmFzID0gdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCdcblx0XHRcdCYmICggbmV3IE9mZnNjcmVlbkNhbnZhcyggMSwgMSApLmdldENvbnRleHQoICcyZCcgKSApICE9PSBudWxsO1xuXG5cdH0gY2F0Y2ggKCBlcnIgKSB7XG5cblx0XHQvLyBJZ25vcmUgYW55IGVycm9yc1xuXG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVDYW52YXMoIHdpZHRoLCBoZWlnaHQgKSB7XG5cblx0XHQvLyBVc2UgT2Zmc2NyZWVuQ2FudmFzIHdoZW4gYXZhaWxhYmxlLiBTcGVjaWFsbHkgbmVlZGVkIGluIHdlYiB3b3JrZXJzXG5cblx0XHRyZXR1cm4gdXNlT2Zmc2NyZWVuQ2FudmFzID9cblx0XHRcdG5ldyBPZmZzY3JlZW5DYW52YXMoIHdpZHRoLCBoZWlnaHQgKSA6IGNyZWF0ZUVsZW1lbnROUyggJ2NhbnZhcycgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVzaXplSW1hZ2UoIGltYWdlLCBuZWVkc1Bvd2VyT2ZUd28sIG5lZWRzTmV3Q2FudmFzLCBtYXhTaXplICkge1xuXG5cdFx0bGV0IHNjYWxlID0gMTtcblxuXHRcdC8vIGhhbmRsZSBjYXNlIGlmIHRleHR1cmUgZXhjZWVkcyBtYXggc2l6ZVxuXG5cdFx0aWYgKCBpbWFnZS53aWR0aCA+IG1heFNpemUgfHwgaW1hZ2UuaGVpZ2h0ID4gbWF4U2l6ZSApIHtcblxuXHRcdFx0c2NhbGUgPSBtYXhTaXplIC8gTWF0aC5tYXgoIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblxuXHRcdH1cblxuXHRcdC8vIG9ubHkgcGVyZm9ybSByZXNpemUgaWYgbmVjZXNzYXJ5XG5cblx0XHRpZiAoIHNjYWxlIDwgMSB8fCBuZWVkc1Bvd2VyT2ZUd28gPT09IHRydWUgKSB7XG5cblx0XHRcdC8vIG9ubHkgcGVyZm9ybSByZXNpemUgZm9yIGNlcnRhaW4gaW1hZ2UgdHlwZXNcblxuXHRcdFx0aWYgKCAoIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB8fFxuXHRcdFx0XHQoIHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHx8XG5cdFx0XHRcdCggdHlwZW9mIEltYWdlQml0bWFwICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwICkgKSB7XG5cblx0XHRcdFx0Y29uc3QgZmxvb3IgPSBuZWVkc1Bvd2VyT2ZUd28gPyBmbG9vclBvd2VyT2ZUd28gOiBNYXRoLmZsb29yO1xuXG5cdFx0XHRcdGNvbnN0IHdpZHRoID0gZmxvb3IoIHNjYWxlICogaW1hZ2Uud2lkdGggKTtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gZmxvb3IoIHNjYWxlICogaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdFx0aWYgKCBfY2FudmFzID09PSB1bmRlZmluZWQgKSBfY2FudmFzID0gY3JlYXRlQ2FudmFzKCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHRcdFx0Ly8gY3ViZSB0ZXh0dXJlcyBjYW4ndCByZXVzZSB0aGUgc2FtZSBjYW52YXNcblxuXHRcdFx0XHRjb25zdCBjYW52YXMgPSBuZWVkc05ld0NhbnZhcyA/IGNyZWF0ZUNhbnZhcyggd2lkdGgsIGhlaWdodCApIDogX2NhbnZhcztcblxuXHRcdFx0XHRjYW52YXMud2lkdGggPSB3aWR0aDtcblx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblx0XHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCArICcpIHRvICgnICsgd2lkdGggKyAneCcgKyBoZWlnaHQgKyAnKS4nICk7XG5cblx0XHRcdFx0cmV0dXJuIGNhbnZhcztcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoICdkYXRhJyBpbiBpbWFnZSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCArICcpLicgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGltYWdlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gaW1hZ2U7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGlzUG93ZXJPZlR3byQxKCBpbWFnZSApIHtcblxuXHRcdHJldHVybiBpc1Bvd2VyT2ZUd28oIGltYWdlLndpZHRoICkgJiYgaXNQb3dlck9mVHdvKCBpbWFnZS5oZWlnaHQgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4dHVyZU5lZWRzUG93ZXJPZlR3byggdGV4dHVyZSApIHtcblxuXHRcdGlmICggaXNXZWJHTDIgKSByZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gKCB0ZXh0dXJlLndyYXBTICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcgKSB8fFxuXHRcdFx0KCB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkge1xuXG5cdFx0cmV0dXJuIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzICYmIHN1cHBvcnRzTWlwcyAmJlxuXHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlcjtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVNaXBtYXAoIHRhcmdldCApIHtcblxuXHRcdF9nbC5nZW5lcmF0ZU1pcG1hcCggdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldEludGVybmFsRm9ybWF0KCBpbnRlcm5hbEZvcm1hdE5hbWUsIGdsRm9ybWF0LCBnbFR5cGUsIGVuY29kaW5nLCBpc1ZpZGVvVGV4dHVyZSA9IGZhbHNlICkge1xuXG5cdFx0aWYgKCBpc1dlYkdMMiA9PT0gZmFsc2UgKSByZXR1cm4gZ2xGb3JtYXQ7XG5cblx0XHRpZiAoIGludGVybmFsRm9ybWF0TmFtZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0aWYgKCBfZ2xbIGludGVybmFsRm9ybWF0TmFtZSBdICE9PSB1bmRlZmluZWQgKSByZXR1cm4gX2dsWyBpbnRlcm5hbEZvcm1hdE5hbWUgXTtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCBcXCcnICsgaW50ZXJuYWxGb3JtYXROYW1lICsgJ1xcJycgKTtcblxuXHRcdH1cblxuXHRcdGxldCBpbnRlcm5hbEZvcm1hdCA9IGdsRm9ybWF0O1xuXG5cdFx0aWYgKCBnbEZvcm1hdCA9PT0gNjQwMyApIHtcblxuXHRcdFx0aWYgKCBnbFR5cGUgPT09IDUxMjYgKSBpbnRlcm5hbEZvcm1hdCA9IDMzMzI2O1xuXHRcdFx0aWYgKCBnbFR5cGUgPT09IDUxMzEgKSBpbnRlcm5hbEZvcm1hdCA9IDMzMzI1O1xuXHRcdFx0aWYgKCBnbFR5cGUgPT09IDUxMjEgKSBpbnRlcm5hbEZvcm1hdCA9IDMzMzIxO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBnbEZvcm1hdCA9PT0gMzMzMTkgKSB7XG5cblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTI2ICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyODtcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTMxICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyNztcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTIxICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyMztcblxuXHRcdH1cblxuXHRcdGlmICggZ2xGb3JtYXQgPT09IDY0MDggKSB7XG5cblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTI2ICkgaW50ZXJuYWxGb3JtYXQgPSAzNDgzNjtcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTMxICkgaW50ZXJuYWxGb3JtYXQgPSAzNDg0Mjtcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTIxICkgaW50ZXJuYWxGb3JtYXQgPSAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgJiYgaXNWaWRlb1RleHR1cmUgPT09IGZhbHNlICkgPyAzNTkwNyA6IDMyODU2O1xuXHRcdFx0aWYgKCBnbFR5cGUgPT09IDMyODE5ICkgaW50ZXJuYWxGb3JtYXQgPSAzMjg1NDtcblx0XHRcdGlmICggZ2xUeXBlID09PSAzMjgyMCApIGludGVybmFsRm9ybWF0ID0gMzI4NTU7XG5cblx0XHR9XG5cblx0XHRpZiAoIGludGVybmFsRm9ybWF0ID09PSAzMzMyNSB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gMzMzMjYgfHxcblx0XHRcdGludGVybmFsRm9ybWF0ID09PSAzMzMyNyB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gMzMzMjggfHxcblx0XHRcdGludGVybmFsRm9ybWF0ID09PSAzNDg0MiB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gMzQ4MzYgKSB7XG5cblx0XHRcdGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBpbnRlcm5hbEZvcm1hdDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TWlwTGV2ZWxzKCB0ZXh0dXJlLCBpbWFnZSwgc3VwcG9ydHNNaXBzICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApID09PSB0cnVlIHx8ICggdGV4dHVyZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyICkgKSB7XG5cblx0XHRcdHJldHVybiBNYXRoLmxvZzIoIE1hdGgubWF4KCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICkgKSArIDE7XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLm1pcG1hcHMgIT09IHVuZGVmaW5lZCAmJiB0ZXh0dXJlLm1pcG1hcHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Ly8gdXNlci1kZWZpbmVkIG1pcG1hcHNcblxuXHRcdFx0cmV0dXJuIHRleHR1cmUubWlwbWFwcy5sZW5ndGg7XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgJiYgQXJyYXkuaXNBcnJheSggdGV4dHVyZS5pbWFnZSApICkge1xuXG5cdFx0XHRyZXR1cm4gaW1hZ2UubWlwbWFwcy5sZW5ndGg7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyB0ZXh0dXJlIHdpdGhvdXQgbWlwbWFwcyAob25seSBiYXNlIGxldmVsKVxuXG5cdFx0XHRyZXR1cm4gMTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gRmFsbGJhY2sgZmlsdGVycyBmb3Igbm9uLXBvd2VyLW9mLTIgdGV4dHVyZXNcblxuXHRmdW5jdGlvbiBmaWx0ZXJGYWxsYmFjayggZiApIHtcblxuXHRcdGlmICggZiA9PT0gTmVhcmVzdEZpbHRlciB8fCBmID09PSBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlciB8fCBmID09PSBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyICkge1xuXG5cdFx0XHRyZXR1cm4gOTcyODtcblxuXHRcdH1cblxuXHRcdHJldHVybiA5NzI5O1xuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIG9uVGV4dHVyZURpc3Bvc2UoIGV2ZW50ICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IGV2ZW50LnRhcmdldDtcblxuXHRcdHRleHR1cmUucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlICk7XG5cblx0XHRkZWFsbG9jYXRlVGV4dHVyZSggdGV4dHVyZSApO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlICkge1xuXG5cdFx0XHRfdmlkZW9UZXh0dXJlcy5kZWxldGUoIHRleHR1cmUgKTtcblxuXHRcdH1cblxuXHRcdGluZm8ubWVtb3J5LnRleHR1cmVzIC0tO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvblJlbmRlclRhcmdldERpc3Bvc2UoIGV2ZW50ICkge1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0cmVuZGVyVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25SZW5kZXJUYXJnZXREaXNwb3NlICk7XG5cblx0XHRkZWFsbG9jYXRlUmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKTtcblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBkZWFsbG9jYXRlVGV4dHVyZSggdGV4dHVyZSApIHtcblxuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdF9nbC5kZWxldGVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdFx0cHJvcGVydGllcy5yZW1vdmUoIHRleHR1cmUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZGVhbGxvY2F0ZVJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoICEgcmVuZGVyVGFyZ2V0ICkgcmV0dXJuO1xuXG5cdFx0aWYgKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfZ2wuZGVsZXRlVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMgLS07XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgKSB7XG5cblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdFx0X2dsLmRlbGV0ZUZyYW1lYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdICk7XG5cdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlclsgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF9nbC5kZWxldGVGcmFtZWJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgKTtcblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciApO1xuXHRcdFx0aWYgKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciApIF9nbC5kZWxldGVGcmFtZWJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIgKTtcblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciApO1xuXHRcdFx0aWYgKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciApIF9nbC5kZWxldGVSZW5kZXJidWZmZXIoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdGV4dHVyZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlWyBpIF0gKTtcblxuXHRcdFx0XHRpZiAoIGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICkge1xuXG5cdFx0XHRcdFx0X2dsLmRlbGV0ZVRleHR1cmUoIGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cblx0XHRcdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcyAtLTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHJvcGVydGllcy5yZW1vdmUoIHRleHR1cmVbIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRwcm9wZXJ0aWVzLnJlbW92ZSggdGV4dHVyZSApO1xuXHRcdHByb3BlcnRpZXMucmVtb3ZlKCByZW5kZXJUYXJnZXQgKTtcblxuXHR9XG5cblx0Ly9cblxuXHRsZXQgdGV4dHVyZVVuaXRzID0gMDtcblxuXHRmdW5jdGlvbiByZXNldFRleHR1cmVVbml0cygpIHtcblxuXHRcdHRleHR1cmVVbml0cyA9IDA7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGFsbG9jYXRlVGV4dHVyZVVuaXQoKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlVW5pdCA9IHRleHR1cmVVbml0cztcblxuXHRcdGlmICggdGV4dHVyZVVuaXQgPj0gbWF4VGV4dHVyZXMgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgJyArIHRleHR1cmVVbml0ICsgJyB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgJyArIG1heFRleHR1cmVzICk7XG5cblx0XHR9XG5cblx0XHR0ZXh0dXJlVW5pdHMgKz0gMTtcblxuXHRcdHJldHVybiB0ZXh0dXJlVW5pdDtcblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNsb3QgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIHRleHR1cmUuaXNWaWRlb1RleHR1cmUgKSB1cGRhdGVWaWRlb1RleHR1cmUoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0Y29uc3QgaW1hZ2UgPSB0ZXh0dXJlLmltYWdlO1xuXG5cdFx0XHRpZiAoIGltYWdlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkJyApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbWFnZS5jb21wbGV0ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZScgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoIDMzOTg0ICsgc2xvdCApO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzNTUzLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlMkRBcnJheSggdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0dXBsb2FkVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoIDMzOTg0ICsgc2xvdCApO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzNTg2NiwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTNEKCB0ZXh0dXJlLCBzbG90ICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLnZlcnNpb24gPiAwICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uICkge1xuXG5cdFx0XHR1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoIDMyODc5LCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0dXBsb2FkQ3ViZVRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90ICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggMzQwNjcsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cblx0fVxuXG5cdGNvbnN0IHdyYXBwaW5nVG9HTCA9IHtcblx0XHRbIFJlcGVhdFdyYXBwaW5nIF06IDEwNDk3LFxuXHRcdFsgQ2xhbXBUb0VkZ2VXcmFwcGluZyBdOiAzMzA3MSxcblx0XHRbIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmcgXTogMzM2NDhcblx0fTtcblxuXHRjb25zdCBmaWx0ZXJUb0dMID0ge1xuXHRcdFsgTmVhcmVzdEZpbHRlciBdOiA5NzI4LFxuXHRcdFsgTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIgXTogOTk4NCxcblx0XHRbIE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXIgXTogOTk4NixcblxuXHRcdFsgTGluZWFyRmlsdGVyIF06IDk3MjksXG5cdFx0WyBMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyIF06IDk5ODUsXG5cdFx0WyBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIgXTogOTk4N1xuXHR9O1xuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmVQYXJhbWV0ZXJzKCB0ZXh0dXJlVHlwZSwgdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkge1xuXG5cdFx0aWYgKCBzdXBwb3J0c01pcHMgKSB7XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDIsIHdyYXBwaW5nVG9HTFsgdGV4dHVyZS53cmFwUyBdICk7XG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQzLCB3cmFwcGluZ1RvR0xbIHRleHR1cmUud3JhcFQgXSApO1xuXG5cdFx0XHRpZiAoIHRleHR1cmVUeXBlID09PSAzMjg3OSB8fCB0ZXh0dXJlVHlwZSA9PT0gMzU4NjYgKSB7XG5cblx0XHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAzMjg4Miwgd3JhcHBpbmdUb0dMWyB0ZXh0dXJlLndyYXBSIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQwLCBmaWx0ZXJUb0dMWyB0ZXh0dXJlLm1hZ0ZpbHRlciBdICk7XG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQxLCBmaWx0ZXJUb0dMWyB0ZXh0dXJlLm1pbkZpbHRlciBdICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQyLCAzMzA3MSApO1xuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MywgMzMwNzEgKTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlVHlwZSA9PT0gMzI4NzkgfHwgdGV4dHVyZVR5cGUgPT09IDM1ODY2ICkge1xuXG5cdFx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMzI4ODIsIDMzMDcxICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0ZXh0dXJlLndyYXBTICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4nICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MCwgZmlsdGVyRmFsbGJhY2soIHRleHR1cmUubWFnRmlsdGVyICkgKTtcblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDEsIGZpbHRlckZhbGxiYWNrKCB0ZXh0dXJlLm1pbkZpbHRlciApICk7XG5cblx0XHRcdGlmICggdGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlciApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGV4dGVuc2lvbnMuaGFzKCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApID09PSB0cnVlICkge1xuXG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSAmJiBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicgKSA9PT0gZmFsc2UgKSByZXR1cm47IC8vIHZlcmlmeSBleHRlbnNpb24gZm9yIFdlYkdMIDEgYW5kIFdlYkdMIDJcblx0XHRcdGlmICggaXNXZWJHTDIgPT09IGZhbHNlICYmICggdGV4dHVyZS50eXBlID09PSBIYWxmRmxvYXRUeXBlICYmIGV4dGVuc2lvbnMuaGFzKCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICkgPT09IGZhbHNlICkgKSByZXR1cm47IC8vIHZlcmlmeSBleHRlbnNpb24gZm9yIFdlYkdMIDEgb25seVxuXG5cdFx0XHRpZiAoIHRleHR1cmUuYW5pc290cm9weSA+IDEgfHwgcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX2N1cnJlbnRBbmlzb3Ryb3B5ICkge1xuXG5cdFx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJmKCB0ZXh0dXJlVHlwZSwgZXh0ZW5zaW9uLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCBNYXRoLm1pbiggdGV4dHVyZS5hbmlzb3Ryb3B5LCBjYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpICkgKTtcblx0XHRcdFx0cHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX2N1cnJlbnRBbmlzb3Ryb3B5ID0gdGV4dHVyZS5hbmlzb3Ryb3B5O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGluaXRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSApIHtcblxuXHRcdGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPSB0cnVlO1xuXG5cdFx0XHR0ZXh0dXJlLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApO1xuXG5cdFx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzICsrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGxldCB0ZXh0dXJlVHlwZSA9IDM1NTM7XG5cblx0XHRpZiAoIHRleHR1cmUuaXNEYXRhVGV4dHVyZTJEQXJyYXkgKSB0ZXh0dXJlVHlwZSA9IDM1ODY2O1xuXHRcdGlmICggdGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QgKSB0ZXh0dXJlVHlwZSA9IDMyODc5O1xuXG5cdFx0aW5pdFRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlICk7XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggdGV4dHVyZVR5cGUsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQwLCB0ZXh0dXJlLmZsaXBZICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MSwgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE3LCB0ZXh0dXJlLnVucGFja0FsaWdubWVudCApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDMsIDAgKTtcblxuXHRcdGNvbnN0IG5lZWRzUG93ZXJPZlR3byA9IHRleHR1cmVOZWVkc1Bvd2VyT2ZUd28oIHRleHR1cmUgKSAmJiBpc1Bvd2VyT2ZUd28kMSggdGV4dHVyZS5pbWFnZSApID09PSBmYWxzZTtcblx0XHRsZXQgaW1hZ2UgPSByZXNpemVJbWFnZSggdGV4dHVyZS5pbWFnZSwgbmVlZHNQb3dlck9mVHdvLCBmYWxzZSwgbWF4VGV4dHVyZVNpemUgKTtcblx0XHRpbWFnZSA9IHZlcmlmeUNvbG9yU3BhY2UoIHRleHR1cmUsIGltYWdlICk7XG5cblx0XHRjb25zdCBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMSggaW1hZ2UgKSB8fCBpc1dlYkdMMixcblx0XHRcdGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggdGV4dHVyZS5mb3JtYXQsIHRleHR1cmUuZW5jb2RpbmcgKTtcblxuXHRcdGxldCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKSxcblx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCggdGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZywgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSApO1xuXG5cdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnMoIHRleHR1cmVUeXBlLCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKTtcblxuXHRcdGxldCBtaXBtYXA7XG5cdFx0Y29uc3QgbWlwbWFwcyA9IHRleHR1cmUubWlwbWFwcztcblxuXHRcdGNvbnN0IHVzZVRleFN0b3JhZ2UgPSAoIGlzV2ViR0wyICYmIHRleHR1cmUuaXNWaWRlb1RleHR1cmUgIT09IHRydWUgKTtcblx0XHRjb25zdCBhbGxvY2F0ZU1lbW9yeSA9ICggdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID09PSB1bmRlZmluZWQgKTtcblx0XHRjb25zdCBsZXZlbHMgPSBnZXRNaXBMZXZlbHMoIHRleHR1cmUsIGltYWdlLCBzdXBwb3J0c01pcHMgKTtcblxuXHRcdGlmICggdGV4dHVyZS5pc0RlcHRoVGV4dHVyZSApIHtcblxuXHRcdFx0Ly8gcG9wdWxhdGUgZGVwdGggdGV4dHVyZSB3aXRoIGR1bW15IGRhdGFcblxuXHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IDY0MDI7XG5cblx0XHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0aWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSApIHtcblxuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzNjAxMjtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50VHlwZSApIHtcblxuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzMzE5MDtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSApIHtcblxuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzNTA1NjtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IDMzMTg5OyAvLyBXZWJHTDIgcmVxdWlyZXMgc2l6ZWQgaW50ZXJuYWxmb3JtYXQgZm9yIGdsVGV4SW1hZ2UyRFxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIHRleHR1cmUudHlwZSA9PT0gRmxvYXRUeXBlICkge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1dlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLicgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gdmFsaWRhdGlvbiBjaGVja3MgZm9yIFdlYkdMIDFcblxuXHRcdFx0aWYgKCB0ZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgJiYgZ2xJbnRlcm5hbEZvcm1hdCA9PT0gNjQwMiApIHtcblxuXHRcdFx0XHQvLyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBhcmVcblx0XHRcdFx0Ly8gREVQVEhfQ09NUE9ORU5UIGFuZCB0eXBlIGlzIG5vdCBVTlNJR05FRF9TSE9SVCBvciBVTlNJR05FRF9JTlRcblx0XHRcdFx0Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pXG5cdFx0XHRcdGlmICggdGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZFNob3J0VHlwZSAmJiB0ZXh0dXJlLnR5cGUgIT09IFVuc2lnbmVkSW50VHlwZSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4nICk7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLnR5cGUgPSBVbnNpZ25lZFNob3J0VHlwZTtcblx0XHRcdFx0XHRnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0ZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICYmIGdsSW50ZXJuYWxGb3JtYXQgPT09IDY0MDIgKSB7XG5cblx0XHRcdFx0Ly8gRGVwdGggc3RlbmNpbCB0ZXh0dXJlcyBuZWVkIHRoZSBERVBUSF9TVEVOQ0lMIGludGVybmFsIGZvcm1hdFxuXHRcdFx0XHQvLyAoaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9kZXB0aF90ZXh0dXJlLylcblx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IDM0MDQxO1xuXG5cdFx0XHRcdC8vIFRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcyBnZW5lcmF0ZWQgYnkgdGV4SW1hZ2UyRCBpZiBmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IGFyZVxuXHRcdFx0XHQvLyBERVBUSF9TVEVOQ0lMIGFuZCB0eXBlIGlzIG5vdCBVTlNJR05FRF9JTlRfMjRfOF9XRUJHTC5cblx0XHRcdFx0Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pXG5cdFx0XHRcdGlmICggdGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZEludDI0OFR5cGUgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLicgKTtcblxuXHRcdFx0XHRcdHRleHR1cmUudHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTtcblx0XHRcdFx0XHRnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9cblxuXHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRCggMzU1MywgMSwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM1NTMsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG51bGwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggdGV4dHVyZS5pc0RhdGFUZXh0dXJlICkge1xuXG5cdFx0XHQvLyB1c2UgbWFudWFsbHkgY3JlYXRlZCBtaXBtYXBzIGlmIGF2YWlsYWJsZVxuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzXG5cdFx0XHQvLyBzZXQgMCBsZXZlbCBtaXBtYXAgYW5kIHRoZW4gdXNlIEdMIHRvIGdlbmVyYXRlIG90aGVyIG1pcG1hcCBsZXZlbHNcblxuXHRcdFx0aWYgKCBtaXBtYXBzLmxlbmd0aCA+IDAgJiYgc3VwcG9ydHNNaXBzICkge1xuXG5cdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRCggMzU1MywgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXBzWyAwIF0ud2lkdGgsIG1pcG1hcHNbIDAgXS5oZWlnaHQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRtaXBtYXAgPSBtaXBtYXBzWyBpIF07XG5cblx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM1NTMsIDAsIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM1NTMsIGksIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzU1MywgMCwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgKSB7XG5cblx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwc1sgMCBdLndpZHRoLCBtaXBtYXBzWyAwIF0uaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0bWlwbWFwID0gbWlwbWFwc1sgaSBdO1xuXG5cdFx0XHRcdGlmICggdGV4dHVyZS5mb3JtYXQgIT09IFJHQkFGb3JtYXQgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGdsRm9ybWF0ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoIDM1NTMsIGksIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoIDM1NTMsIGksIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKScgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNTUzLCBpLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCBpLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5ICkge1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0aWYgKCBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UzRCggMzU4NjYsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UzRCggMzU4NjYsIDAsIDAsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UzRCggMzU4NjYsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEICkge1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0aWYgKCBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UzRCggMzI4NzksIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UzRCggMzI4NzksIDAsIDAsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UzRCggMzI4NzksIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRleHR1cmUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgKSB7XG5cblx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM1NTMsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG51bGwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gcmVndWxhciBUZXh0dXJlIChpbWFnZSwgdmlkZW8sIGNhbnZhcylcblxuXHRcdFx0Ly8gdXNlIG1hbnVhbGx5IGNyZWF0ZWQgbWlwbWFwcyBpZiBhdmFpbGFibGVcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBubyBtYW51YWwgbWlwbWFwc1xuXHRcdFx0Ly8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBtaXBtYXAgbGV2ZWxzXG5cblx0XHRcdGlmICggbWlwbWFwcy5sZW5ndGggPiAwICYmIHN1cHBvcnRzTWlwcyApIHtcblxuXHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwc1sgMCBdLndpZHRoLCBtaXBtYXBzWyAwIF0uaGVpZ2h0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtaXBtYXBzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0bWlwbWFwID0gbWlwbWFwc1sgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNTUzLCBpLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM1NTMsIGksIGdsSW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdGlmICggYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRCggMzU1MywgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNTUzLCAwLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCAwLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApICkge1xuXG5cdFx0XHRnZW5lcmF0ZU1pcG1hcCggdGV4dHVyZVR5cGUgKTtcblxuXHRcdH1cblxuXHRcdHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9IHRleHR1cmUudmVyc2lvbjtcblxuXHRcdGlmICggdGV4dHVyZS5vblVwZGF0ZSApIHRleHR1cmUub25VcGRhdGUoIHRleHR1cmUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBsb2FkQ3ViZVRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90ICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmltYWdlLmxlbmd0aCAhPT0gNiApIHJldHVybjtcblxuXHRcdGluaXRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSApO1xuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoIDM0MDY3LCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MCwgdGV4dHVyZS5mbGlwWSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDEsIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNywgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQzLCAwICk7XG5cblx0XHRjb25zdCBpc0NvbXByZXNzZWQgPSAoIHRleHR1cmUgJiYgKCB0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgfHwgdGV4dHVyZS5pbWFnZVsgMCBdLmlzQ29tcHJlc3NlZFRleHR1cmUgKSApO1xuXHRcdGNvbnN0IGlzRGF0YVRleHR1cmUgPSAoIHRleHR1cmUuaW1hZ2VbIDAgXSAmJiB0ZXh0dXJlLmltYWdlWyAwIF0uaXNEYXRhVGV4dHVyZSApO1xuXG5cdFx0Y29uc3QgY3ViZUltYWdlID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRpZiAoICEgaXNDb21wcmVzc2VkICYmICEgaXNEYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0XHRjdWJlSW1hZ2VbIGkgXSA9IHJlc2l6ZUltYWdlKCB0ZXh0dXJlLmltYWdlWyBpIF0sIGZhbHNlLCB0cnVlLCBtYXhDdWJlbWFwU2l6ZSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGN1YmVJbWFnZVsgaSBdID0gaXNEYXRhVGV4dHVyZSA/IHRleHR1cmUuaW1hZ2VbIGkgXS5pbWFnZSA6IHRleHR1cmUuaW1hZ2VbIGkgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjdWJlSW1hZ2VbIGkgXSA9IHZlcmlmeUNvbG9yU3BhY2UoIHRleHR1cmUsIGN1YmVJbWFnZVsgaSBdICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBpbWFnZSA9IGN1YmVJbWFnZVsgMCBdLFxuXHRcdFx0c3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEoIGltYWdlICkgfHwgaXNXZWJHTDIsXG5cdFx0XHRnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nICksXG5cdFx0XHRnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKSxcblx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCggdGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyApO1xuXG5cdFx0Y29uc3QgdXNlVGV4U3RvcmFnZSA9ICggaXNXZWJHTDIgJiYgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSAhPT0gdHJ1ZSApO1xuXHRcdGNvbnN0IGFsbG9jYXRlTWVtb3J5ID0gKCB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPT09IHVuZGVmaW5lZCApO1xuXHRcdGxldCBsZXZlbHMgPSBnZXRNaXBMZXZlbHMoIHRleHR1cmUsIGltYWdlLCBzdXBwb3J0c01pcHMgKTtcblxuXHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKCAzNDA2NywgdGV4dHVyZSwgc3VwcG9ydHNNaXBzICk7XG5cblx0XHRsZXQgbWlwbWFwcztcblxuXHRcdGlmICggaXNDb21wcmVzc2VkICkge1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNDA2NywgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0XHRtaXBtYXBzID0gY3ViZUltYWdlWyBpIF0ubWlwbWFwcztcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBtaXBtYXBzLmxlbmd0aDsgaiArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IG1pcG1hcCA9IG1pcG1hcHNbIGogXTtcblxuXHRcdFx0XHRcdGlmICggdGV4dHVyZS5mb3JtYXQgIT09IFJHQkFGb3JtYXQgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggZ2xGb3JtYXQgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoIDM0MDY5ICsgaSwgaiwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0c3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoIDM0MDY5ICsgaSwgaiwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKScgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM0MDY5ICsgaSwgaiwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgaiwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzO1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0Ly8gVE9ETzogVW5pZm9ybWx5IGhhbmRsZSBtaXBtYXAgZGVmaW5pdGlvbnNcblx0XHRcdFx0Ly8gTm9ybWFsIHRleHR1cmVzIGFuZCBjb21wcmVzc2VkIGN1YmUgdGV4dHVyZXMgZGVmaW5lIGJhc2UgbGV2ZWwgKyBtaXBzIHdpdGggdGhlaXIgbWlwbWFwIGFycmF5XG5cdFx0XHRcdC8vIFVuY29tcHJlc3NlZCBjdWJlIHRleHR1cmVzIHVzZSB0aGVpciBtaXBtYXAgYXJyYXkgb25seSBmb3IgbWlwcyAobm8gYmFzZSBsZXZlbClcblxuXHRcdFx0XHRpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCApIGxldmVscyArKztcblxuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM0MDY3LCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGN1YmVJbWFnZVsgMCBdLndpZHRoLCBjdWJlSW1hZ2VbIDAgXS5oZWlnaHQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRcdGlmICggaXNEYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzQwNjkgKyBpLCAwLCAwLCAwLCBjdWJlSW1hZ2VbIGkgXS53aWR0aCwgY3ViZUltYWdlWyBpIF0uaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbIGkgXS5kYXRhICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGN1YmVJbWFnZVsgaSBdLndpZHRoLCBjdWJlSW1hZ2VbIGkgXS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGN1YmVJbWFnZVsgaSBdLmRhdGEgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IG1pcG1hcHMubGVuZ3RoOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBtaXBtYXAgPSBtaXBtYXBzWyBqIF07XG5cdFx0XHRcdFx0XHRjb25zdCBtaXBtYXBJbWFnZSA9IG1pcG1hcC5pbWFnZVsgaSBdLmltYWdlO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzQwNjkgKyBpLCBqICsgMSwgMCwgMCwgbWlwbWFwSW1hZ2Uud2lkdGgsIG1pcG1hcEltYWdlLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwSW1hZ2UuZGF0YSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgaiArIDEsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcEltYWdlLndpZHRoLCBtaXBtYXBJbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcEltYWdlLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM0MDY5ICsgaSwgMCwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlWyBpIF0gKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlWyBpIF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IG1pcG1hcHMubGVuZ3RoOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBtaXBtYXAgPSBtaXBtYXBzWyBqIF07XG5cblx0XHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNDA2OSArIGksIGogKyAxLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuaW1hZ2VbIGkgXSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgaiArIDEsIGdsSW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5pbWFnZVsgaSBdICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKSApIHtcblxuXHRcdFx0Ly8gV2UgYXNzdW1lIGltYWdlcyBmb3IgY3ViZSBtYXAgaGF2ZSB0aGUgc2FtZSBzaXplLlxuXHRcdFx0Z2VuZXJhdGVNaXBtYXAoIDM0MDY3ICk7XG5cblx0XHR9XG5cblx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPSB0ZXh0dXJlLnZlcnNpb247XG5cblx0XHRpZiAoIHRleHR1cmUub25VcGRhdGUgKSB0ZXh0dXJlLm9uVXBkYXRlKCB0ZXh0dXJlICk7XG5cblx0fVxuXG5cdC8vIFJlbmRlciB0YXJnZXRzXG5cblx0Ly8gU2V0dXAgc3RvcmFnZSBmb3IgdGFyZ2V0IHRleHR1cmUgYW5kIGJpbmQgaXQgdG8gY29ycmVjdCBmcmFtZWJ1ZmZlclxuXHRmdW5jdGlvbiBzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSggZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGV4dHVyZVRhcmdldCApIHtcblxuXHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggdGV4dHVyZS5mb3JtYXQsIHRleHR1cmUuZW5jb2RpbmcgKTtcblx0XHRjb25zdCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKTtcblx0XHRjb25zdCBnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQoIHRleHR1cmUuaW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIHRleHR1cmUuZW5jb2RpbmcgKTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0aWYgKCAhIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzICkge1xuXG5cdFx0XHRpZiAoIHRleHR1cmVUYXJnZXQgPT09IDMyODc5IHx8IHRleHR1cmVUYXJnZXQgPT09IDM1ODY2ICkge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlM0QoIHRleHR1cmVUYXJnZXQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgcmVuZGVyVGFyZ2V0LmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRCggdGV4dHVyZVRhcmdldCwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVyICk7XG5cdFx0aWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlICkge1xuXG5cdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24uZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCggMzYxNjAsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQsIHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICkuX193ZWJnbFRleHR1cmUsIDAsIGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIDM2MTYwLCBhdHRhY2htZW50LCB0ZXh0dXJlVGFyZ2V0LCBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlLCAwICk7XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBudWxsICk7XG5cblx0fVxuXG5cblx0Ly8gU2V0dXAgc3RvcmFnZSBmb3IgaW50ZXJuYWwgZGVwdGgvc3RlbmNpbCBidWZmZXJzIGFuZCBiaW5kIHRvIGNvcnJlY3QgZnJhbWVidWZmZXJcblx0ZnVuY3Rpb24gc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5kZXJidWZmZXIsIHJlbmRlclRhcmdldCwgaXNNdWx0aXNhbXBsZSApIHtcblxuXHRcdF9nbC5iaW5kUmVuZGVyYnVmZmVyKCAzNjE2MSwgcmVuZGVyYnVmZmVyICk7XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciAmJiAhIHJlbmRlclRhcmdldC5zdGVuY2lsQnVmZmVyICkge1xuXG5cdFx0XHRsZXQgZ2xJbnRlcm5hbEZvcm1hdCA9IDMzMTg5O1xuXG5cdFx0XHRpZiAoIGlzTXVsdGlzYW1wbGUgfHwgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRjb25zdCBkZXB0aFRleHR1cmUgPSByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlO1xuXG5cdFx0XHRcdGlmICggZGVwdGhUZXh0dXJlICYmIGRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdGlmICggZGVwdGhUZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSApIHtcblxuXHRcdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IDM2MDEyO1xuXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggZGVwdGhUZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50VHlwZSApIHtcblxuXHRcdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IDMzMTkwO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0aWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlICkge1xuXG5cdFx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCggMzYxNjEsIHNhbXBsZXMsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKCAzNjE2MSwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKCAzNjE2MSwgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKCAzNjE2MCwgMzYwOTYsIDM2MTYxLCByZW5kZXJidWZmZXIgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciAmJiByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIHtcblxuXHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRpZiAoIGlzTXVsdGlzYW1wbGUgJiYgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciApIHtcblxuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKCAzNjE2MSwgc2FtcGxlcywgMzUwNTYsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlICkge1xuXG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoIDM2MTYxLCBzYW1wbGVzLCAzNTA1NiwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoIDM2MTYxLCAzNDA0MSwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoIDM2MTYwLCAzMzMwNiwgMzYxNjEsIHJlbmRlcmJ1ZmZlciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVXNlIHRoZSBmaXJzdCB0ZXh0dXJlIGZvciBNUlQgc28gZmFyXG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPT09IHRydWUgPyByZW5kZXJUYXJnZXQudGV4dHVyZVsgMCBdIDogcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggdGV4dHVyZS5mb3JtYXQsIHRleHR1cmUuZW5jb2RpbmcgKTtcblx0XHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApO1xuXHRcdFx0Y29uc3QgZ2xJbnRlcm5hbEZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KCB0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdGlmICggaXNNdWx0aXNhbXBsZSAmJiByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyICkge1xuXG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoIDM2MTYxLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKCAzNjE2MSwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoIDM2MTYxLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0X2dsLmJpbmRSZW5kZXJidWZmZXIoIDM2MTYxLCBudWxsICk7XG5cblx0fVxuXG5cdC8vIFNldHVwIHJlc291cmNlcyBmb3IgYSBEZXB0aCBUZXh0dXJlIGZvciBhIEZCTyAobmVlZHMgYW4gZXh0ZW5zaW9uKVxuXHRmdW5jdGlvbiBzZXR1cERlcHRoVGV4dHVyZSggZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCApIHtcblxuXHRcdGNvbnN0IGlzQ3ViZSA9ICggcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCApO1xuXHRcdGlmICggaXNDdWJlICkgdGhyb3cgbmV3IEVycm9yKCAnRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCcgKTtcblxuXHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVyICk7XG5cblx0XHRpZiAoICEgKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICYmIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUgKSApIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAncmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZScgKTtcblxuXHRcdH1cblxuXHRcdC8vIHVwbG9hZCBhbiBlbXB0eSBkZXB0aCB0ZXh0dXJlIHdpdGggZnJhbWVidWZmZXIgc2l6ZVxuXHRcdGlmICggISBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlIHx8XG5cdFx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGggIT09IHJlbmRlclRhcmdldC53aWR0aCB8fFxuXHRcdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCAhPT0gcmVuZGVyVGFyZ2V0LmhlaWdodCApIHtcblxuXHRcdFx0cmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDtcblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0LmhlaWdodDtcblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0c2V0VGV4dHVyZTJEKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLCAwICk7XG5cblx0XHRjb25zdCB3ZWJnbERlcHRoVGV4dHVyZSA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICkuX193ZWJnbFRleHR1cmU7XG5cdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB7XG5cblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24uZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCggMzYxNjAsIDM2MDk2LCAzNTUzLCB3ZWJnbERlcHRoVGV4dHVyZSwgMCwgc2FtcGxlcyApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCggMzYxNjAsIDM2MDk2LCAzNTUzLCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkge1xuXG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSB7XG5cblx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoIDM2MTYwLCAzMzMwNiwgMzU1Mywgd2ViZ2xEZXB0aFRleHR1cmUsIDAsIHNhbXBsZXMgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIDM2MTYwLCAzMzMwNiwgMzU1Mywgd2ViZ2xEZXB0aFRleHR1cmUsIDAgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0JyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBTZXR1cCBHTCByZXNvdXJjZXMgZm9yIGEgbm9uLXRleHR1cmUgZGVwdGggYnVmZmVyXG5cdGZ1bmN0aW9uIHNldHVwRGVwdGhSZW5kZXJidWZmZXIoIHJlbmRlclRhcmdldCApIHtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cdFx0Y29uc3QgaXNDdWJlID0gKCByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgPT09IHRydWUgKTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAmJiAhIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlciApIHtcblxuXHRcdFx0aWYgKCBpc0N1YmUgKSB0aHJvdyBuZXcgRXJyb3IoICd0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cycgKTtcblxuXHRcdFx0c2V0dXBEZXB0aFRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggaXNDdWJlICkge1xuXG5cdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyWyBpIF0gKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlclsgaSBdID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbIGkgXSwgcmVuZGVyVGFyZ2V0LCBmYWxzZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApO1xuXHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblx0XHRcdFx0c2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCBmYWxzZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBudWxsICk7XG5cblx0fVxuXG5cdC8vIHJlYmluZCBmcmFtZWJ1ZmZlciB3aXRoIGV4dGVybmFsIHRleHR1cmVzXG5cdGZ1bmN0aW9uIHJlYmluZFRleHR1cmVzKCByZW5kZXJUYXJnZXQsIGNvbG9yVGV4dHVyZSwgZGVwdGhUZXh0dXJlICkge1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdGlmICggY29sb3JUZXh0dXJlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQudGV4dHVyZSwgMzYwNjQsIDM1NTMgKTtcblxuXHRcdH1cblxuXHRcdGlmICggZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHNldHVwRGVwdGhSZW5kZXJidWZmZXIoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBTZXQgdXAgR0wgcmVzb3VyY2VzIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuXHRmdW5jdGlvbiBzZXR1cFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRyZW5kZXJUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblJlbmRlclRhcmdldERpc3Bvc2UgKTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgIT09IHRydWUgKSB7XG5cblx0XHRcdGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4dHVyZS52ZXJzaW9uO1xuXHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMgKys7XG5cblx0XHR9XG5cblx0XHRjb25zdCBpc0N1YmUgPSAoIHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCA9PT0gdHJ1ZSApO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVSZW5kZXJUYXJnZXRzID0gKCByZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyA9PT0gdHJ1ZSApO1xuXHRcdGNvbnN0IGlzUmVuZGVyVGFyZ2V0M0QgPSB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRCB8fCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5O1xuXHRcdGNvbnN0IHN1cHBvcnRzTWlwcyA9IGlzUG93ZXJPZlR3byQxKCByZW5kZXJUYXJnZXQgKSB8fCBpc1dlYkdMMjtcblxuXHRcdC8vIFNldHVwIGZyYW1lYnVmZmVyXG5cblx0XHRpZiAoIGlzQ3ViZSApIHtcblxuXHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgPSBbXTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cblx0XHRcdGlmICggaXNNdWx0aXBsZVJlbmRlclRhcmdldHMgKSB7XG5cblx0XHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMuZHJhd0J1ZmZlcnMgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlcyA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlc1sgaSBdICk7XG5cblx0XHRcdFx0XHRcdGlmICggYXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0XHRcdFx0XHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMgKys7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLicgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIgKSB7XG5cblx0XHRcdFx0aWYgKCBpc1dlYkdMMiApIHtcblxuXHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIgPSBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG5cblx0XHRcdFx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlciggMzYxNjEsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyICk7XG5cblx0XHRcdFx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0XHRcdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICk7XG5cdFx0XHRcdFx0Y29uc3QgZ2xJbnRlcm5hbEZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KCB0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0XHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApO1xuXHRcdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoIDM2MTYxLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyICk7XG5cdFx0XHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKCAzNjE2MCwgMzYwNjQsIDM2MTYxLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciApO1xuXHRcdFx0XHRcdF9nbC5iaW5kUmVuZGVyYnVmZmVyKCAzNjE2MSwgbnVsbCApO1xuXG5cdFx0XHRcdFx0aWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgKSB7XG5cblx0XHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0XHRcdFx0c2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCB0cnVlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBudWxsICk7XG5cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLicgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIFNldHVwIGNvbG9yIGJ1ZmZlclxuXG5cdFx0aWYgKCBpc0N1YmUgKSB7XG5cblx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzNDA2NywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblx0XHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKCAzNDA2NywgdGV4dHVyZSwgc3VwcG9ydHNNaXBzICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyWyBpIF0sIHJlbmRlclRhcmdldCwgdGV4dHVyZSwgMzYwNjQsIDM0MDY5ICsgaSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKSApIHtcblxuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcCggMzQwNjcgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0XHR9IGVsc2UgaWYgKCBpc011bHRpcGxlUmVuZGVyVGFyZ2V0cyApIHtcblxuXHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB0ZXh0dXJlc1sgaSBdO1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCBhdHRhY2htZW50ICk7XG5cblx0XHRcdFx0c3RhdGUuYmluZFRleHR1cmUoIDM1NTMsIGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cdFx0XHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKCAzNTUzLCBhdHRhY2htZW50LCBzdXBwb3J0c01pcHMgKTtcblx0XHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIGF0dGFjaG1lbnQsIDM2MDY0ICsgaSwgMzU1MyApO1xuXG5cdFx0XHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCBhdHRhY2htZW50LCBzdXBwb3J0c01pcHMgKSApIHtcblxuXHRcdFx0XHRcdGdlbmVyYXRlTWlwbWFwKCAzNTUzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGxldCBnbFRleHR1cmVUeXBlID0gMzU1MztcblxuXHRcdFx0aWYgKCBpc1JlbmRlclRhcmdldDNEICkge1xuXG5cdFx0XHRcdC8vIFJlbmRlciB0YXJnZXRzIGNvbnRhaW5pbmcgbGF5ZXJzLCBpLmU6IFRleHR1cmUgM0QgYW5kIDJkIGFycmF5c1xuXG5cdFx0XHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBpc1RleHR1cmUzRCA9IHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEO1xuXHRcdFx0XHRcdGdsVGV4dHVyZVR5cGUgPSBpc1RleHR1cmUzRCA/IDMyODc5IDogMzU4NjY7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKCBnbFRleHR1cmVUeXBlLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXHRcdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnMoIGdsVGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApO1xuXHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRleHR1cmUsIDM2MDY0LCBnbFRleHR1cmVUeXBlICk7XG5cblx0XHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKSApIHtcblxuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcCggZ2xUZXh0dXJlVHlwZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHRcdH1cblxuXHRcdC8vIFNldHVwIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnNcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyICkge1xuXG5cdFx0XHRzZXR1cERlcHRoUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMSggcmVuZGVyVGFyZ2V0ICkgfHwgaXNXZWJHTDI7XG5cblx0XHRjb25zdCB0ZXh0dXJlcyA9IHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID09PSB0cnVlID8gcmVuZGVyVGFyZ2V0LnRleHR1cmUgOiBbIHJlbmRlclRhcmdldC50ZXh0dXJlIF07XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdGV4dHVyZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHRleHR1cmUgPSB0ZXh0dXJlc1sgaSBdO1xuXG5cdFx0XHRpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkgKSB7XG5cblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID8gMzQwNjcgOiAzNTUzO1xuXHRcdFx0XHRjb25zdCB3ZWJnbFRleHR1cmUgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlO1xuXG5cdFx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKCB0YXJnZXQsIHdlYmdsVGV4dHVyZSApO1xuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcCggdGFyZ2V0ICk7XG5cdFx0XHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyICkge1xuXG5cdFx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRcdGNvbnN0IHdpZHRoID0gcmVuZGVyVGFyZ2V0LndpZHRoO1xuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSByZW5kZXJUYXJnZXQuaGVpZ2h0O1xuXHRcdFx0XHRsZXQgbWFzayA9IDE2Mzg0O1xuXHRcdFx0XHRjb25zdCBpbnZhbGlkYXRpb25BcnJheSA9IFsgMzYwNjQgXTtcblx0XHRcdFx0Y29uc3QgZGVwdGhTdHlsZSA9IHJlbmRlclRhcmdldC5zdGVuY2lsQnVmZmVyID8gMzMzMDYgOiAzNjA5NjtcblxuXHRcdFx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciApIHtcblxuXHRcdFx0XHRcdGludmFsaWRhdGlvbkFycmF5LnB1c2goIGRlcHRoU3R5bGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAhIHJlbmRlclRhcmdldC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSApIHtcblxuXHRcdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyICkgbWFzayB8PSAyNTY7XG5cdFx0XHRcdFx0aWYgKCByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIG1hc2sgfD0gMTAyNDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MDA4LCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciApO1xuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MDA5LCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApO1xuXG5cdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5ICkge1xuXG5cdFx0XHRcdFx0X2dsLmludmFsaWRhdGVGcmFtZWJ1ZmZlciggMzYwMDgsIFsgZGVwdGhTdHlsZSBdICk7XG5cdFx0XHRcdFx0X2dsLmludmFsaWRhdGVGcmFtZWJ1ZmZlciggMzYwMDksIFsgZGVwdGhTdHlsZSBdICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9nbC5ibGl0RnJhbWVidWZmZXIoIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIG1hc2ssIDk3MjggKTtcblx0XHRcdFx0X2dsLmludmFsaWRhdGVGcmFtZWJ1ZmZlciggMzYwMDgsIGludmFsaWRhdGlvbkFycmF5ICk7XG5cblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjAwOCwgbnVsbCApO1xuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MDA5LCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuICggaXNXZWJHTDIgJiYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyIHx8IHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSApID9cblx0XHRcdE1hdGgubWluKCBtYXhTYW1wbGVzLCByZW5kZXJUYXJnZXQuc2FtcGxlcyApIDogMDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlVmlkZW9UZXh0dXJlKCB0ZXh0dXJlICkge1xuXG5cdFx0Y29uc3QgZnJhbWUgPSBpbmZvLnJlbmRlci5mcmFtZTtcblxuXHRcdC8vIENoZWNrIHRoZSBsYXN0IGZyYW1lIHdlIHVwZGF0ZWQgdGhlIFZpZGVvVGV4dHVyZVxuXG5cdFx0aWYgKCBfdmlkZW9UZXh0dXJlcy5nZXQoIHRleHR1cmUgKSAhPT0gZnJhbWUgKSB7XG5cblx0XHRcdF92aWRlb1RleHR1cmVzLnNldCggdGV4dHVyZSwgZnJhbWUgKTtcblx0XHRcdHRleHR1cmUudXBkYXRlKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHZlcmlmeUNvbG9yU3BhY2UoIHRleHR1cmUsIGltYWdlICkge1xuXG5cdFx0Y29uc3QgZW5jb2RpbmcgPSB0ZXh0dXJlLmVuY29kaW5nO1xuXHRcdGNvbnN0IGZvcm1hdCA9IHRleHR1cmUuZm9ybWF0O1xuXHRcdGNvbnN0IHR5cGUgPSB0ZXh0dXJlLnR5cGU7XG5cblx0XHRpZiAoIHRleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSA9PT0gdHJ1ZSB8fCB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlID09PSB0cnVlIHx8IHRleHR1cmUuZm9ybWF0ID09PSBfU1JHQkFGb3JtYXQgKSByZXR1cm4gaW1hZ2U7XG5cblx0XHRpZiAoIGVuY29kaW5nICE9PSBMaW5lYXJFbmNvZGluZyApIHtcblxuXHRcdFx0Ly8gc1JHQlxuXG5cdFx0XHRpZiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSB7XG5cblx0XHRcdFx0aWYgKCBpc1dlYkdMMiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHQvLyBpbiBXZWJHTCAxLCB0cnkgdG8gdXNlIEVYVF9zUkdCIGV4dGVuc2lvbiBhbmQgdW5zaXplZCBmb3JtYXRzXG5cblx0XHRcdFx0XHRpZiAoIGV4dGVuc2lvbnMuaGFzKCAnRVhUX3NSR0InICkgPT09IHRydWUgJiYgZm9ybWF0ID09PSBSR0JBRm9ybWF0ICkge1xuXG5cdFx0XHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IF9TUkdCQUZvcm1hdDtcblxuXHRcdFx0XHRcdFx0Ly8gaXQncyBub3QgcG9zc2libGUgdG8gZ2VuZXJhdGUgbWlwcyBpbiBXZWJHTCAxIHdpdGggdGhpcyBleHRlbnNpb25cblxuXHRcdFx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gc2xvdyBmYWxsYmFjayAoQ1BVIGRlY29kZSlcblxuXHRcdFx0XHRcdFx0aW1hZ2UgPSBJbWFnZVV0aWxzLnNSR0JUb0xpbmVhciggaW1hZ2UgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gaW4gV2ViR0wgMiB1bmNvbXByZXNzZWQgdGV4dHVyZXMgY2FuIG9ubHkgYmUgc1JHQiBlbmNvZGVkIGlmIHRoZXkgaGF2ZSB0aGUgUkdCQTggZm9ybWF0XG5cblx0XHRcdFx0XHRpZiAoIGZvcm1hdCAhPT0gUkdCQUZvcm1hdCB8fCB0eXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4nICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOicsIGVuY29kaW5nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBpbWFnZTtcblxuXHR9XG5cblx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuXHRsZXQgd2FybmVkVGV4dHVyZTJEID0gZmFsc2U7XG5cdGxldCB3YXJuZWRUZXh0dXJlQ3ViZSA9IGZhbHNlO1xuXG5cdGZ1bmN0aW9uIHNhZmVTZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNsb3QgKSB7XG5cblx0XHRpZiAoIHRleHR1cmUgJiYgdGV4dHVyZS5pc1dlYkdMUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRpZiAoIHdhcm5lZFRleHR1cmUyRCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb25cXCd0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuJyApO1xuXHRcdFx0XHR3YXJuZWRUZXh0dXJlMkQgPSB0cnVlO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG5cblx0XHR9XG5cblx0XHRzZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNsb3QgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2FmZVNldFRleHR1cmVDdWJlKCB0ZXh0dXJlLCBzbG90ICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdGlmICggd2FybmVkVGV4dHVyZUN1YmUgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb25cXCd0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4nICk7XG5cdFx0XHRcdHdhcm5lZFRleHR1cmVDdWJlID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuXG5cdFx0fVxuXG5cblx0XHRzZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApO1xuXG5cdH1cblxuXHQvL1xuXG5cdHRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdCA9IGFsbG9jYXRlVGV4dHVyZVVuaXQ7XG5cdHRoaXMucmVzZXRUZXh0dXJlVW5pdHMgPSByZXNldFRleHR1cmVVbml0cztcblxuXHR0aGlzLnNldFRleHR1cmUyRCA9IHNldFRleHR1cmUyRDtcblx0dGhpcy5zZXRUZXh0dXJlMkRBcnJheSA9IHNldFRleHR1cmUyREFycmF5O1xuXHR0aGlzLnNldFRleHR1cmUzRCA9IHNldFRleHR1cmUzRDtcblx0dGhpcy5zZXRUZXh0dXJlQ3ViZSA9IHNldFRleHR1cmVDdWJlO1xuXHR0aGlzLnJlYmluZFRleHR1cmVzID0gcmViaW5kVGV4dHVyZXM7XG5cdHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQgPSBzZXR1cFJlbmRlclRhcmdldDtcblx0dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAgPSB1cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA7XG5cdHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgPSB1cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldDtcblx0dGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyID0gc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcjtcblx0dGhpcy5zZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSA9IHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlO1xuXG5cdHRoaXMuc2FmZVNldFRleHR1cmUyRCA9IHNhZmVTZXRUZXh0dXJlMkQ7XG5cdHRoaXMuc2FmZVNldFRleHR1cmVDdWJlID0gc2FmZVNldFRleHR1cmVDdWJlO1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMVXRpbHMoIGdsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cblx0ZnVuY3Rpb24gY29udmVydCggcCwgZW5jb2RpbmcgPSBudWxsICkge1xuXG5cdFx0bGV0IGV4dGVuc2lvbjtcblxuXHRcdGlmICggcCA9PT0gVW5zaWduZWRCeXRlVHlwZSApIHJldHVybiA1MTIxO1xuXHRcdGlmICggcCA9PT0gVW5zaWduZWRTaG9ydDQ0NDRUeXBlICkgcmV0dXJuIDMyODE5O1xuXHRcdGlmICggcCA9PT0gVW5zaWduZWRTaG9ydDU1NTFUeXBlICkgcmV0dXJuIDMyODIwO1xuXG5cdFx0aWYgKCBwID09PSBCeXRlVHlwZSApIHJldHVybiA1MTIwO1xuXHRcdGlmICggcCA9PT0gU2hvcnRUeXBlICkgcmV0dXJuIDUxMjI7XG5cdFx0aWYgKCBwID09PSBVbnNpZ25lZFNob3J0VHlwZSApIHJldHVybiA1MTIzO1xuXHRcdGlmICggcCA9PT0gSW50VHlwZSApIHJldHVybiA1MTI0O1xuXHRcdGlmICggcCA9PT0gVW5zaWduZWRJbnRUeXBlICkgcmV0dXJuIDUxMjU7XG5cdFx0aWYgKCBwID09PSBGbG9hdFR5cGUgKSByZXR1cm4gNTEyNjtcblxuXHRcdGlmICggcCA9PT0gSGFsZkZsb2F0VHlwZSApIHtcblxuXHRcdFx0aWYgKCBpc1dlYkdMMiApIHJldHVybiA1MTMxO1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICk7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uSEFMRl9GTE9BVF9PRVM7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggcCA9PT0gQWxwaGFGb3JtYXQgKSByZXR1cm4gNjQwNjtcblx0XHRpZiAoIHAgPT09IFJHQkFGb3JtYXQgKSByZXR1cm4gNjQwODtcblx0XHRpZiAoIHAgPT09IEx1bWluYW5jZUZvcm1hdCApIHJldHVybiA2NDA5O1xuXHRcdGlmICggcCA9PT0gTHVtaW5hbmNlQWxwaGFGb3JtYXQgKSByZXR1cm4gNjQxMDtcblx0XHRpZiAoIHAgPT09IERlcHRoRm9ybWF0ICkgcmV0dXJuIDY0MDI7XG5cdFx0aWYgKCBwID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQgKSByZXR1cm4gMzQwNDE7XG5cdFx0aWYgKCBwID09PSBSZWRGb3JtYXQgKSByZXR1cm4gNjQwMztcblxuXHRcdC8vIFdlYkdMIDEgc1JHQiBmYWxsYmFja1xuXG5cdFx0aWYgKCBwID09PSBfU1JHQkFGb3JtYXQgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX3NSR0InICk7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uU1JHQl9BTFBIQV9FWFQ7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIFdlYkdMMiBmb3JtYXRzLlxuXG5cdFx0aWYgKCBwID09PSBSZWRJbnRlZ2VyRm9ybWF0ICkgcmV0dXJuIDM2MjQ0O1xuXHRcdGlmICggcCA9PT0gUkdGb3JtYXQgKSByZXR1cm4gMzMzMTk7XG5cdFx0aWYgKCBwID09PSBSR0ludGVnZXJGb3JtYXQgKSByZXR1cm4gMzMzMjA7XG5cdFx0aWYgKCBwID09PSBSR0JBSW50ZWdlckZvcm1hdCApIHJldHVybiAzNjI0OTtcblxuXHRcdC8vIFMzVENcblxuXHRcdGlmICggcCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCB8fCBwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQgKSB7XG5cblx0XHRcdGlmICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApIHtcblxuXHRcdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2InICk7XG5cblx0XHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQl9TM1RDX0RYVDFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtcblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JBX1MzVENfRFhUM19Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO1xuXHRcdFx0XHRcdGlmICggcCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICk7XG5cblx0XHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQl9TM1RDX0RYVDFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xuXHRcdFx0XHRcdGlmICggcCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtcblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7XG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIFBWUlRDXG5cblx0XHRpZiAoIHAgPT09IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0IHx8IHAgPT09IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCB8fCBwID09PSBSR0JBX1BWUlRDXzJCUFBWMV9Gb3JtYXQgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRpZiAoIHAgPT09IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7XG5cdFx0XHRcdGlmICggcCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRztcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gRVRDMVxuXG5cdFx0aWYgKCBwID09PSBSR0JfRVRDMV9Gb3JtYXQgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEnICk7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gRVRDMlxuXG5cdFx0aWYgKCBwID09PSBSR0JfRVRDMl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9FVEMyX0VBQ19Gb3JtYXQgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YycgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBwID09PSBSR0JfRVRDMl9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9FVEMyIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCOF9FVEMyO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfRVRDMl9FQUNfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIEFTVENcblxuXHRcdGlmICggcCA9PT0gUkdCQV9BU1RDXzR4NF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzV4NF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzV4NV9Gb3JtYXQgfHxcblx0XHRcdHAgPT09IFJHQkFfQVNUQ182eDVfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ182eDZfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ184eDVfRm9ybWF0IHx8XG5cdFx0XHRwID09PSBSR0JBX0FTVENfOHg2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfOHg4X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTB4NV9Gb3JtYXQgfHxcblx0XHRcdHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDEwX0Zvcm1hdCB8fFxuXHRcdFx0cCA9PT0gUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjJyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ180eDRfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ181eDRfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ181eDVfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ182eDVfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ182eDZfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ184eDVfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ184eDZfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ184eDhfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMHg1X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBCUFRDXG5cblx0XHRpZiAoIHAgPT09IFJHQkFfQlBUQ19Gb3JtYXQgKSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YycgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0JQVENfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVCA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFQ7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpZiAoIHAgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSApIHtcblxuXHRcdFx0aWYgKCBpc1dlYkdMMiApIHJldHVybiAzNDA0MjtcblxuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9kZXB0aF90ZXh0dXJlJyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiB7IGNvbnZlcnQ6IGNvbnZlcnQgfTtcblxufVxuXG5jbGFzcyBBcnJheUNhbWVyYSBleHRlbmRzIFBlcnNwZWN0aXZlQ2FtZXJhIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXkgPSBbXSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmNhbWVyYXMgPSBhcnJheTtcblxuXHR9XG5cbn1cblxuQXJyYXlDYW1lcmEucHJvdG90eXBlLmlzQXJyYXlDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBHcm91cCBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnR3JvdXAnO1xuXG5cdH1cblxufVxuXG5Hcm91cC5wcm90b3R5cGUuaXNHcm91cCA9IHRydWU7XG5cbmNvbnN0IF9tb3ZlRXZlbnQgPSB7IHR5cGU6ICdtb3ZlJyB9O1xuXG5jbGFzcyBXZWJYUkNvbnRyb2xsZXIge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0dGhpcy5fdGFyZ2V0UmF5ID0gbnVsbDtcblx0XHR0aGlzLl9ncmlwID0gbnVsbDtcblx0XHR0aGlzLl9oYW5kID0gbnVsbDtcblxuXHR9XG5cblx0Z2V0SGFuZFNwYWNlKCkge1xuXG5cdFx0aWYgKCB0aGlzLl9oYW5kID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9oYW5kID0gbmV3IEdyb3VwKCk7XG5cdFx0XHR0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2hhbmQudmlzaWJsZSA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLl9oYW5kLmpvaW50cyA9IHt9O1xuXHRcdFx0dGhpcy5faGFuZC5pbnB1dFN0YXRlID0geyBwaW5jaGluZzogZmFsc2UgfTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9oYW5kO1xuXG5cdH1cblxuXHRnZXRUYXJnZXRSYXlTcGFjZSgpIHtcblxuXHRcdGlmICggdGhpcy5fdGFyZ2V0UmF5ID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl90YXJnZXRSYXkgPSBuZXcgR3JvdXAoKTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5O1xuXG5cdH1cblxuXHRnZXRHcmlwU3BhY2UoKSB7XG5cblx0XHRpZiAoIHRoaXMuX2dyaXAgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2dyaXAgPSBuZXcgR3JvdXAoKTtcblx0XHRcdHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZ3JpcC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ3JpcDtcblxuXHR9XG5cblx0ZGlzcGF0Y2hFdmVudCggZXZlbnQgKSB7XG5cblx0XHRpZiAoIHRoaXMuX3RhcmdldFJheSAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQoIGV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2dyaXAgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5faGFuZCAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpc2Nvbm5lY3QoIGlucHV0U291cmNlICkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNjb25uZWN0ZWQnLCBkYXRhOiBpbnB1dFNvdXJjZSB9ICk7XG5cblx0XHRpZiAoIHRoaXMuX3RhcmdldFJheSAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LnZpc2libGUgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5fZ3JpcCAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fZ3JpcC52aXNpYmxlID0gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2hhbmQgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2hhbmQudmlzaWJsZSA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHVwZGF0ZSggaW5wdXRTb3VyY2UsIGZyYW1lLCByZWZlcmVuY2VTcGFjZSApIHtcblxuXHRcdGxldCBpbnB1dFBvc2UgPSBudWxsO1xuXHRcdGxldCBncmlwUG9zZSA9IG51bGw7XG5cdFx0bGV0IGhhbmRQb3NlID0gbnVsbDtcblxuXHRcdGNvbnN0IHRhcmdldFJheSA9IHRoaXMuX3RhcmdldFJheTtcblx0XHRjb25zdCBncmlwID0gdGhpcy5fZ3JpcDtcblx0XHRjb25zdCBoYW5kID0gdGhpcy5faGFuZDtcblxuXHRcdGlmICggaW5wdXRTb3VyY2UgJiYgZnJhbWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUgIT09ICd2aXNpYmxlLWJsdXJyZWQnICkge1xuXG5cdFx0XHRpZiAoIHRhcmdldFJheSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRpbnB1dFBvc2UgPSBmcmFtZS5nZXRQb3NlKCBpbnB1dFNvdXJjZS50YXJnZXRSYXlTcGFjZSwgcmVmZXJlbmNlU3BhY2UgKTtcblxuXHRcdFx0XHRpZiAoIGlucHV0UG9zZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdHRhcmdldFJheS5tYXRyaXguZnJvbUFycmF5KCBpbnB1dFBvc2UudHJhbnNmb3JtLm1hdHJpeCApO1xuXHRcdFx0XHRcdHRhcmdldFJheS5tYXRyaXguZGVjb21wb3NlKCB0YXJnZXRSYXkucG9zaXRpb24sIHRhcmdldFJheS5yb3RhdGlvbiwgdGFyZ2V0UmF5LnNjYWxlICk7XG5cblx0XHRcdFx0XHRpZiAoIGlucHV0UG9zZS5saW5lYXJWZWxvY2l0eSApIHtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5saW5lYXJWZWxvY2l0eS5jb3B5KCBpbnB1dFBvc2UubGluZWFyVmVsb2NpdHkgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHRhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBpbnB1dFBvc2UuYW5ndWxhclZlbG9jaXR5ICkge1xuXG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5hbmd1bGFyVmVsb2NpdHkuY29weSggaW5wdXRQb3NlLmFuZ3VsYXJWZWxvY2l0eSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCBfbW92ZUV2ZW50ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFuZCAmJiBpbnB1dFNvdXJjZS5oYW5kICkge1xuXG5cdFx0XHRcdGhhbmRQb3NlID0gdHJ1ZTtcblxuXHRcdFx0XHRmb3IgKCBjb25zdCBpbnB1dGpvaW50IG9mIGlucHV0U291cmNlLmhhbmQudmFsdWVzKCkgKSB7XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgdGhlIGpvaW50cyBncm91cHMgd2l0aCB0aGUgWFJKb2ludCBwb3Nlc1xuXHRcdFx0XHRcdGNvbnN0IGpvaW50UG9zZSA9IGZyYW1lLmdldEpvaW50UG9zZSggaW5wdXRqb2ludCwgcmVmZXJlbmNlU3BhY2UgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZC5qb2ludHNbIGlucHV0am9pbnQuam9pbnROYW1lIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gVGhlIHRyYW5zZm9ybSBvZiB0aGlzIGpvaW50IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBqb2ludCBwb3NlIG9uIGVhY2ggZnJhbWVcblx0XHRcdFx0XHRcdGNvbnN0IGpvaW50ID0gbmV3IEdyb3VwKCk7XG5cdFx0XHRcdFx0XHRqb2ludC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRqb2ludC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRoYW5kLmpvaW50c1sgaW5wdXRqb2ludC5qb2ludE5hbWUgXSA9IGpvaW50O1xuXHRcdFx0XHRcdFx0Ly8gPz9cblx0XHRcdFx0XHRcdGhhbmQuYWRkKCBqb2ludCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3Qgam9pbnQgPSBoYW5kLmpvaW50c1sgaW5wdXRqb2ludC5qb2ludE5hbWUgXTtcblxuXHRcdFx0XHRcdGlmICggam9pbnRQb3NlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRqb2ludC5tYXRyaXguZnJvbUFycmF5KCBqb2ludFBvc2UudHJhbnNmb3JtLm1hdHJpeCApO1xuXHRcdFx0XHRcdFx0am9pbnQubWF0cml4LmRlY29tcG9zZSggam9pbnQucG9zaXRpb24sIGpvaW50LnJvdGF0aW9uLCBqb2ludC5zY2FsZSApO1xuXHRcdFx0XHRcdFx0am9pbnQuam9pbnRSYWRpdXMgPSBqb2ludFBvc2UucmFkaXVzO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0am9pbnQudmlzaWJsZSA9IGpvaW50UG9zZSAhPT0gbnVsbDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3VzdG9tIGV2ZW50c1xuXG5cdFx0XHRcdC8vIENoZWNrIHBpbmNoelxuXHRcdFx0XHRjb25zdCBpbmRleFRpcCA9IGhhbmQuam9pbnRzWyAnaW5kZXgtZmluZ2VyLXRpcCcgXTtcblx0XHRcdFx0Y29uc3QgdGh1bWJUaXAgPSBoYW5kLmpvaW50c1sgJ3RodW1iLXRpcCcgXTtcblx0XHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBpbmRleFRpcC5wb3NpdGlvbi5kaXN0YW5jZVRvKCB0aHVtYlRpcC5wb3NpdGlvbiApO1xuXG5cdFx0XHRcdGNvbnN0IGRpc3RhbmNlVG9QaW5jaCA9IDAuMDI7XG5cdFx0XHRcdGNvbnN0IHRocmVzaG9sZCA9IDAuMDA1O1xuXG5cdFx0XHRcdGlmICggaGFuZC5pbnB1dFN0YXRlLnBpbmNoaW5nICYmIGRpc3RhbmNlID4gZGlzdGFuY2VUb1BpbmNoICsgdGhyZXNob2xkICkge1xuXG5cdFx0XHRcdFx0aGFuZC5pbnB1dFN0YXRlLnBpbmNoaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7XG5cdFx0XHRcdFx0XHR0eXBlOiAncGluY2hlbmQnLFxuXHRcdFx0XHRcdFx0aGFuZGVkbmVzczogaW5wdXRTb3VyY2UuaGFuZGVkbmVzcyxcblx0XHRcdFx0XHRcdHRhcmdldDogdGhpc1xuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCAhIGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyAmJiBkaXN0YW5jZSA8PSBkaXN0YW5jZVRvUGluY2ggLSB0aHJlc2hvbGQgKSB7XG5cblx0XHRcdFx0XHRoYW5kLmlucHV0U3RhdGUucGluY2hpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudCgge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3BpbmNoc3RhcnQnLFxuXHRcdFx0XHRcdFx0aGFuZGVkbmVzczogaW5wdXRTb3VyY2UuaGFuZGVkbmVzcyxcblx0XHRcdFx0XHRcdHRhcmdldDogdGhpc1xuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBncmlwICE9PSBudWxsICYmIGlucHV0U291cmNlLmdyaXBTcGFjZSApIHtcblxuXHRcdFx0XHRcdGdyaXBQb3NlID0gZnJhbWUuZ2V0UG9zZSggaW5wdXRTb3VyY2UuZ3JpcFNwYWNlLCByZWZlcmVuY2VTcGFjZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBncmlwUG9zZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0Z3JpcC5tYXRyaXguZnJvbUFycmF5KCBncmlwUG9zZS50cmFuc2Zvcm0ubWF0cml4ICk7XG5cdFx0XHRcdFx0XHRncmlwLm1hdHJpeC5kZWNvbXBvc2UoIGdyaXAucG9zaXRpb24sIGdyaXAucm90YXRpb24sIGdyaXAuc2NhbGUgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBncmlwUG9zZS5saW5lYXJWZWxvY2l0eSApIHtcblxuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0xpbmVhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Z3JpcC5saW5lYXJWZWxvY2l0eS5jb3B5KCBncmlwUG9zZS5saW5lYXJWZWxvY2l0eSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzTGluZWFyVmVsb2NpdHkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoIGdyaXBQb3NlLmFuZ3VsYXJWZWxvY2l0eSApIHtcblxuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGdyaXAuYW5ndWxhclZlbG9jaXR5LmNvcHkoIGdyaXBQb3NlLmFuZ3VsYXJWZWxvY2l0eSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzQW5ndWxhclZlbG9jaXR5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGFyZ2V0UmF5ICE9PSBudWxsICkge1xuXG5cdFx0XHR0YXJnZXRSYXkudmlzaWJsZSA9ICggaW5wdXRQb3NlICE9PSBudWxsICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGdyaXAgIT09IG51bGwgKSB7XG5cblx0XHRcdGdyaXAudmlzaWJsZSA9ICggZ3JpcFBvc2UgIT09IG51bGwgKTtcblxuXHRcdH1cblxuXHRcdGlmICggaGFuZCAhPT0gbnVsbCApIHtcblxuXHRcdFx0aGFuZC52aXNpYmxlID0gKCBoYW5kUG9zZSAhPT0gbnVsbCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIERlcHRoVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBmb3JtYXQgKSB7XG5cblx0XHRmb3JtYXQgPSBmb3JtYXQgIT09IHVuZGVmaW5lZCA/IGZvcm1hdCA6IERlcHRoRm9ybWF0O1xuXG5cdFx0aWYgKCBmb3JtYXQgIT09IERlcHRoRm9ybWF0ICYmIGZvcm1hdCAhPT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkge1xuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCcgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB0eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7XG5cdFx0aWYgKCB0eXBlID09PSB1bmRlZmluZWQgJiYgZm9ybWF0ID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQgKSB0eXBlID0gVW5zaWduZWRJbnQyNDhUeXBlO1xuXG5cdFx0c3VwZXIoIG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApO1xuXG5cdFx0dGhpcy5pbWFnZSA9IHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xuXG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBtYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1hZ0ZpbHRlciA6IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1pbkZpbHRlciA6IE5lYXJlc3RGaWx0ZXI7XG5cblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7XG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHNcdD0gZmFsc2U7XG5cblx0fVxuXG5cbn1cblxuRGVwdGhUZXh0dXJlLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIFdlYlhSTWFuYWdlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cblx0Y29uc3RydWN0b3IoIHJlbmRlcmVyLCBnbCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRsZXQgc2Vzc2lvbiA9IG51bGw7XG5cdFx0bGV0IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSAxLjA7XG5cblx0XHRsZXQgcmVmZXJlbmNlU3BhY2UgPSBudWxsO1xuXHRcdGxldCByZWZlcmVuY2VTcGFjZVR5cGUgPSAnbG9jYWwtZmxvb3InO1xuXHRcdGNvbnN0IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHJlbmRlcmVyLmV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyApO1xuXG5cdFx0bGV0IHBvc2UgPSBudWxsO1xuXHRcdGxldCBnbEJpbmRpbmcgPSBudWxsO1xuXHRcdGxldCBnbFByb2pMYXllciA9IG51bGw7XG5cdFx0bGV0IGdsQmFzZUxheWVyID0gbnVsbDtcblx0XHRsZXQgaXNNdWx0aXNhbXBsZSA9IGZhbHNlO1xuXHRcdGxldCB4ckZyYW1lID0gbnVsbDtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTtcblx0XHRsZXQgaW5pdGlhbFJlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0bGV0IG5ld1JlbmRlclRhcmdldCA9IG51bGw7XG5cblx0XHRjb25zdCBjb250cm9sbGVycyA9IFtdO1xuXHRcdGNvbnN0IGlucHV0U291cmNlc01hcCA9IG5ldyBNYXAoKTtcblxuXHRcdC8vXG5cblx0XHRjb25zdCBjYW1lcmFMID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdFx0Y2FtZXJhTC5sYXllcnMuZW5hYmxlKCAxICk7XG5cdFx0Y2FtZXJhTC52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7XG5cblx0XHRjb25zdCBjYW1lcmFSID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdFx0Y2FtZXJhUi5sYXllcnMuZW5hYmxlKCAyICk7XG5cdFx0Y2FtZXJhUi52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7XG5cblx0XHRjb25zdCBjYW1lcmFzID0gWyBjYW1lcmFMLCBjYW1lcmFSIF07XG5cblx0XHRjb25zdCBjYW1lcmFWUiA9IG5ldyBBcnJheUNhbWVyYSgpO1xuXHRcdGNhbWVyYVZSLmxheWVycy5lbmFibGUoIDEgKTtcblx0XHRjYW1lcmFWUi5sYXllcnMuZW5hYmxlKCAyICk7XG5cblx0XHRsZXQgX2N1cnJlbnREZXB0aE5lYXIgPSBudWxsO1xuXHRcdGxldCBfY3VycmVudERlcHRoRmFyID0gbnVsbDtcblxuXHRcdC8vXG5cblx0XHR0aGlzLmNhbWVyYUF1dG9VcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0dGhpcy5pc1ByZXNlbnRpbmcgPSBmYWxzZTtcblxuXHRcdHRoaXMuZ2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uICggaW5kZXggKSB7XG5cblx0XHRcdGxldCBjb250cm9sbGVyID0gY29udHJvbGxlcnNbIGluZGV4IF07XG5cblx0XHRcdGlmICggY29udHJvbGxlciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIgPSBuZXcgV2ViWFJDb250cm9sbGVyKCk7XG5cdFx0XHRcdGNvbnRyb2xsZXJzWyBpbmRleCBdID0gY29udHJvbGxlcjtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbGxlci5nZXRUYXJnZXRSYXlTcGFjZSgpO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0Q29udHJvbGxlckdyaXAgPSBmdW5jdGlvbiAoIGluZGV4ICkge1xuXG5cdFx0XHRsZXQgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzWyBpbmRleCBdO1xuXG5cdFx0XHRpZiAoIGNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb250cm9sbGVyID0gbmV3IFdlYlhSQ29udHJvbGxlcigpO1xuXHRcdFx0XHRjb250cm9sbGVyc1sgaW5kZXggXSA9IGNvbnRyb2xsZXI7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xsZXIuZ2V0R3JpcFNwYWNlKCk7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRIYW5kID0gZnVuY3Rpb24gKCBpbmRleCApIHtcblxuXHRcdFx0bGV0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1sgaW5kZXggXTtcblxuXHRcdFx0aWYgKCBjb250cm9sbGVyID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29udHJvbGxlciA9IG5ldyBXZWJYUkNvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29udHJvbGxlcnNbIGluZGV4IF0gPSBjb250cm9sbGVyO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb250cm9sbGVyLmdldEhhbmRTcGFjZSgpO1xuXG5cdFx0fTtcblxuXHRcdC8vXG5cblx0XHRmdW5jdGlvbiBvblNlc3Npb25FdmVudCggZXZlbnQgKSB7XG5cblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBpbnB1dFNvdXJjZXNNYXAuZ2V0KCBldmVudC5pbnB1dFNvdXJjZSApO1xuXG5cdFx0XHRpZiAoIGNvbnRyb2xsZXIgKSB7XG5cblx0XHRcdFx0Y29udHJvbGxlci5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6IGV2ZW50LnR5cGUsIGRhdGE6IGV2ZW50LmlucHV0U291cmNlIH0gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25TZXNzaW9uRW5kKCkge1xuXG5cdFx0XHRpbnB1dFNvdXJjZXNNYXAuZm9yRWFjaCggZnVuY3Rpb24gKCBjb250cm9sbGVyLCBpbnB1dFNvdXJjZSApIHtcblxuXHRcdFx0XHRjb250cm9sbGVyLmRpc2Nvbm5lY3QoIGlucHV0U291cmNlICk7XG5cblx0XHRcdH0gKTtcblxuXHRcdFx0aW5wdXRTb3VyY2VzTWFwLmNsZWFyKCk7XG5cblx0XHRcdF9jdXJyZW50RGVwdGhOZWFyID0gbnVsbDtcblx0XHRcdF9jdXJyZW50RGVwdGhGYXIgPSBudWxsO1xuXG5cdFx0XHQvLyByZXN0b3JlIGZyYW1lYnVmZmVyL3JlbmRlcmluZyBzdGF0ZVxuXG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIGluaXRpYWxSZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0Z2xCYXNlTGF5ZXIgPSBudWxsO1xuXHRcdFx0Z2xQcm9qTGF5ZXIgPSBudWxsO1xuXHRcdFx0Z2xCaW5kaW5nID0gbnVsbDtcblx0XHRcdHNlc3Npb24gPSBudWxsO1xuXHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbnVsbDtcblxuXHRcdFx0Ly9cblxuXHRcdFx0YW5pbWF0aW9uLnN0b3AoKTtcblxuXHRcdFx0c2NvcGUuaXNQcmVzZW50aW5nID0gZmFsc2U7XG5cblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ3Nlc3Npb25lbmQnIH0gKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuc2V0RnJhbWVidWZmZXJTY2FsZUZhY3RvciA9IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSB2YWx1ZTtcblxuXHRcdFx0aWYgKCBzY29wZS5pc1ByZXNlbnRpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGUgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRyZWZlcmVuY2VTcGFjZVR5cGUgPSB2YWx1ZTtcblxuXHRcdFx0aWYgKCBzY29wZS5pc1ByZXNlbnRpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRSZWZlcmVuY2VTcGFjZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHJlZmVyZW5jZVNwYWNlO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0QmFzZUxheWVyID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gZ2xQcm9qTGF5ZXIgIT09IG51bGwgPyBnbFByb2pMYXllciA6IGdsQmFzZUxheWVyO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0QmluZGluZyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIGdsQmluZGluZztcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEZyYW1lID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4geHJGcmFtZTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiBzZXNzaW9uO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0U2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdHNlc3Npb24gPSB2YWx1ZTtcblxuXHRcdFx0aWYgKCBzZXNzaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGluaXRpYWxSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzZWxlY3QnLCBvblNlc3Npb25FdmVudCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzZWxlY3RzdGFydCcsIG9uU2Vzc2lvbkV2ZW50ICk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ3NlbGVjdGVuZCcsIG9uU2Vzc2lvbkV2ZW50ICk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ3NxdWVlemUnLCBvblNlc3Npb25FdmVudCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzcXVlZXplc3RhcnQnLCBvblNlc3Npb25FdmVudCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzcXVlZXplZW5kJywgb25TZXNzaW9uRXZlbnQgKTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnZW5kJywgb25TZXNzaW9uRW5kICk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0c291cmNlc2NoYW5nZScsIG9uSW5wdXRTb3VyY2VzQ2hhbmdlICk7XG5cblx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLnhyQ29tcGF0aWJsZSAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdGF3YWl0IGdsLm1ha2VYUkNvbXBhdGlibGUoKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAoIHNlc3Npb24ucmVuZGVyU3RhdGUubGF5ZXJzID09PSB1bmRlZmluZWQgKSB8fCAoIHJlbmRlcmVyLmNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gZmFsc2UgKSApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGxheWVySW5pdCA9IHtcblx0XHRcdFx0XHRcdGFudGlhbGlhczogKCBzZXNzaW9uLnJlbmRlclN0YXRlLmxheWVycyA9PT0gdW5kZWZpbmVkICkgPyBhdHRyaWJ1dGVzLmFudGlhbGlhcyA6IHRydWUsXG5cdFx0XHRcdFx0XHRhbHBoYTogYXR0cmlidXRlcy5hbHBoYSxcblx0XHRcdFx0XHRcdGRlcHRoOiBhdHRyaWJ1dGVzLmRlcHRoLFxuXHRcdFx0XHRcdFx0c3RlbmNpbDogYXR0cmlidXRlcy5zdGVuY2lsLFxuXHRcdFx0XHRcdFx0ZnJhbWVidWZmZXJTY2FsZUZhY3RvcjogZnJhbWVidWZmZXJTY2FsZUZhY3RvclxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRnbEJhc2VMYXllciA9IG5ldyBYUldlYkdMTGF5ZXIoIHNlc3Npb24sIGdsLCBsYXllckluaXQgKTtcblxuXHRcdFx0XHRcdHNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoIHsgYmFzZUxheWVyOiBnbEJhc2VMYXllciB9ICk7XG5cblx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoXG5cdFx0XHRcdFx0XHRnbEJhc2VMYXllci5mcmFtZWJ1ZmZlcldpZHRoLFxuXHRcdFx0XHRcdFx0Z2xCYXNlTGF5ZXIuZnJhbWVidWZmZXJIZWlnaHQsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdFx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0XHRcdFx0ZW5jb2Rpbmc6IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aXNNdWx0aXNhbXBsZSA9IGF0dHJpYnV0ZXMuYW50aWFsaWFzO1xuXHRcdFx0XHRcdGxldCBkZXB0aEZvcm1hdCA9IG51bGw7XG5cdFx0XHRcdFx0bGV0IGRlcHRoVHlwZSA9IG51bGw7XG5cdFx0XHRcdFx0bGV0IGdsRGVwdGhGb3JtYXQgPSBudWxsO1xuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLmRlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRnbERlcHRoRm9ybWF0ID0gYXR0cmlidXRlcy5zdGVuY2lsID8gMzUwNTYgOiAzMzE5MDtcblx0XHRcdFx0XHRcdGRlcHRoRm9ybWF0ID0gYXR0cmlidXRlcy5zdGVuY2lsID8gRGVwdGhTdGVuY2lsRm9ybWF0IDogRGVwdGhGb3JtYXQ7XG5cdFx0XHRcdFx0XHRkZXB0aFR5cGUgPSBhdHRyaWJ1dGVzLnN0ZW5jaWwgPyBVbnNpZ25lZEludDI0OFR5cGUgOiBVbnNpZ25lZFNob3J0VHlwZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByb2plY3Rpb25sYXllckluaXQgPSB7XG5cdFx0XHRcdFx0XHRjb2xvckZvcm1hdDogKCByZW5kZXJlci5vdXRwdXRFbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyAzNTkwNyA6IDMyODU2LFxuXHRcdFx0XHRcdFx0ZGVwdGhGb3JtYXQ6IGdsRGVwdGhGb3JtYXQsXG5cdFx0XHRcdFx0XHRzY2FsZUZhY3RvcjogZnJhbWVidWZmZXJTY2FsZUZhY3RvclxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRnbEJpbmRpbmcgPSBuZXcgWFJXZWJHTEJpbmRpbmcoIHNlc3Npb24sIGdsICk7XG5cblx0XHRcdFx0XHRnbFByb2pMYXllciA9IGdsQmluZGluZy5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIoIHByb2plY3Rpb25sYXllckluaXQgKTtcblxuXHRcdFx0XHRcdHNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoIHsgbGF5ZXJzOiBbIGdsUHJvakxheWVyIF0gfSApO1xuXG5cdFx0XHRcdFx0aWYgKCBpc011bHRpc2FtcGxlICkge1xuXG5cdFx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldChcblx0XHRcdFx0XHRcdFx0Z2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLFxuXHRcdFx0XHRcdFx0XHRnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFVuc2lnbmVkQnl0ZVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0ZGVwdGhUZXh0dXJlOiBuZXcgRGVwdGhUZXh0dXJlKCBnbFByb2pMYXllci50ZXh0dXJlV2lkdGgsIGdsUHJvakxheWVyLnRleHR1cmVIZWlnaHQsIGRlcHRoVHlwZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZGVwdGhGb3JtYXQgKSxcblx0XHRcdFx0XHRcdFx0XHRzdGVuY2lsQnVmZmVyOiBhdHRyaWJ1dGVzLnN0ZW5jaWwsXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlRGVwdGg6IGdsUHJvakxheWVyLmlnbm9yZURlcHRoVmFsdWVzLFxuXHRcdFx0XHRcdFx0XHRcdHVzZVJlbmRlclRvVGV4dHVyZTogaGFzTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlLFxuXHRcdFx0XHRcdFx0XHRcdGVuY29kaW5nOiByZW5kZXJlci5vdXRwdXRFbmNvZGluZ1xuXHRcdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoXG5cdFx0XHRcdFx0XHRcdGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCxcblx0XHRcdFx0XHRcdFx0Z2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBVbnNpZ25lZEJ5dGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdGRlcHRoVGV4dHVyZTogbmV3IERlcHRoVGV4dHVyZSggZ2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLCBnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LCBkZXB0aFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGRlcHRoRm9ybWF0ICksXG5cdFx0XHRcdFx0XHRcdFx0c3RlbmNpbEJ1ZmZlcjogYXR0cmlidXRlcy5zdGVuY2lsLFxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZURlcHRoOiBnbFByb2pMYXllci5pZ25vcmVEZXB0aFZhbHVlcyxcblx0XHRcdFx0XHRcdFx0XHRlbmNvZGluZzogcmVuZGVyZXIub3V0cHV0RW5jb2Rpbmdcblx0XHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQuaXNYUlJlbmRlclRhcmdldCA9IHRydWU7IC8vIFRPRE8gUmVtb3ZlIHRoaXMgd2hlbiBwb3NzaWJsZSwgc2VlICMyMzI3OFxuXG5cdFx0XHRcdC8vIFNldCBmb3ZlYXRpb24gdG8gbWF4aW11bS5cblx0XHRcdFx0dGhpcy5zZXRGb3ZlYXRpb24oIDEuMCApO1xuXG5cdFx0XHRcdHJlZmVyZW5jZVNwYWNlID0gYXdhaXQgc2Vzc2lvbi5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoIHJlZmVyZW5jZVNwYWNlVHlwZSApO1xuXG5cdFx0XHRcdGFuaW1hdGlvbi5zZXRDb250ZXh0KCBzZXNzaW9uICk7XG5cdFx0XHRcdGFuaW1hdGlvbi5zdGFydCgpO1xuXG5cdFx0XHRcdHNjb3BlLmlzUHJlc2VudGluZyA9IHRydWU7XG5cblx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnc2Vzc2lvbnN0YXJ0JyB9ICk7XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBvbklucHV0U291cmNlc0NoYW5nZSggZXZlbnQgKSB7XG5cblx0XHRcdGNvbnN0IGlucHV0U291cmNlcyA9IHNlc3Npb24uaW5wdXRTb3VyY2VzO1xuXG5cdFx0XHQvLyBBc3NpZ24gaW5wdXRTb3VyY2VzIHRvIGF2YWlsYWJsZSBjb250cm9sbGVyc1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjb250cm9sbGVycy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0aW5wdXRTb3VyY2VzTWFwLnNldCggaW5wdXRTb3VyY2VzWyBpIF0sIGNvbnRyb2xsZXJzWyBpIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBOb3RpZnkgZGlzY29ubmVjdGVkXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGV2ZW50LnJlbW92ZWQubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGlucHV0U291cmNlID0gZXZlbnQucmVtb3ZlZFsgaSBdO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gaW5wdXRTb3VyY2VzTWFwLmdldCggaW5wdXRTb3VyY2UgKTtcblxuXHRcdFx0XHRpZiAoIGNvbnRyb2xsZXIgKSB7XG5cblx0XHRcdFx0XHRjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc2Nvbm5lY3RlZCcsIGRhdGE6IGlucHV0U291cmNlIH0gKTtcblx0XHRcdFx0XHRpbnB1dFNvdXJjZXNNYXAuZGVsZXRlKCBpbnB1dFNvdXJjZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBOb3RpZnkgY29ubmVjdGVkXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGV2ZW50LmFkZGVkLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGV2ZW50LmFkZGVkWyBpIF07XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBpbnB1dFNvdXJjZXNNYXAuZ2V0KCBpbnB1dFNvdXJjZSApO1xuXG5cdFx0XHRcdGlmICggY29udHJvbGxlciApIHtcblxuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnY29ubmVjdGVkJywgZGF0YTogaW5wdXRTb3VyY2UgfSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGNvbnN0IGNhbWVyYUxQb3MgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IGNhbWVyYVJQb3MgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0LyoqXG5cdFx0ICogQXNzdW1lcyAyIGNhbWVyYXMgdGhhdCBhcmUgcGFyYWxsZWwgYW5kIHNoYXJlIGFuIFgtYXhpcywgYW5kIHRoYXRcblx0XHQgKiB0aGUgY2FtZXJhcycgcHJvamVjdGlvbiBhbmQgd29ybGQgbWF0cmljZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LlxuXHRcdCAqIEFuZCB0aGF0IG5lYXIgYW5kIGZhciBwbGFuZXMgYXJlIGlkZW50aWNhbCBmb3IgYm90aCBjYW1lcmFzLlxuXHRcdCAqIFZpc3VhbGl6YXRpb24gb2YgdGhpcyB0ZWNobmlxdWU6IGh0dHBzOi8vY29tcHV0ZXJncmFwaGljcy5zdGFja2V4Y2hhbmdlLmNvbS9hLzQ3NjVcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBzZXRQcm9qZWN0aW9uRnJvbVVuaW9uKCBjYW1lcmEsIGNhbWVyYUwsIGNhbWVyYVIgKSB7XG5cblx0XHRcdGNhbWVyYUxQb3Muc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjYW1lcmFMLm1hdHJpeFdvcmxkICk7XG5cdFx0XHRjYW1lcmFSUG9zLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhUi5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRjb25zdCBpcGQgPSBjYW1lcmFMUG9zLmRpc3RhbmNlVG8oIGNhbWVyYVJQb3MgKTtcblxuXHRcdFx0Y29uc3QgcHJvakwgPSBjYW1lcmFMLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHM7XG5cdFx0XHRjb25zdCBwcm9qUiA9IGNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cztcblxuXHRcdFx0Ly8gVlIgc3lzdGVtcyB3aWxsIGhhdmUgaWRlbnRpY2FsIGZhciBhbmQgbmVhciBwbGFuZXMsIGFuZFxuXHRcdFx0Ly8gbW9zdCBsaWtlbHkgaWRlbnRpY2FsIHRvcCBhbmQgYm90dG9tIGZydXN0dW0gZXh0ZW50cy5cblx0XHRcdC8vIFVzZSB0aGUgbGVmdCBjYW1lcmEgZm9yIHRoZXNlIHZhbHVlcy5cblx0XHRcdGNvbnN0IG5lYXIgPSBwcm9qTFsgMTQgXSAvICggcHJvakxbIDEwIF0gLSAxICk7XG5cdFx0XHRjb25zdCBmYXIgPSBwcm9qTFsgMTQgXSAvICggcHJvakxbIDEwIF0gKyAxICk7XG5cdFx0XHRjb25zdCB0b3BGb3YgPSAoIHByb2pMWyA5IF0gKyAxICkgLyBwcm9qTFsgNSBdO1xuXHRcdFx0Y29uc3QgYm90dG9tRm92ID0gKCBwcm9qTFsgOSBdIC0gMSApIC8gcHJvakxbIDUgXTtcblxuXHRcdFx0Y29uc3QgbGVmdEZvdiA9ICggcHJvakxbIDggXSAtIDEgKSAvIHByb2pMWyAwIF07XG5cdFx0XHRjb25zdCByaWdodEZvdiA9ICggcHJvalJbIDggXSArIDEgKSAvIHByb2pSWyAwIF07XG5cdFx0XHRjb25zdCBsZWZ0ID0gbmVhciAqIGxlZnRGb3Y7XG5cdFx0XHRjb25zdCByaWdodCA9IG5lYXIgKiByaWdodEZvdjtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBuZXcgY2FtZXJhJ3MgcG9zaXRpb24gb2Zmc2V0IGZyb20gdGhlXG5cdFx0XHQvLyBsZWZ0IGNhbWVyYS4geE9mZnNldCBzaG91bGQgYmUgcm91Z2hseSBoYWxmIGBpcGRgLlxuXHRcdFx0Y29uc3Qgek9mZnNldCA9IGlwZCAvICggLSBsZWZ0Rm92ICsgcmlnaHRGb3YgKTtcblx0XHRcdGNvbnN0IHhPZmZzZXQgPSB6T2Zmc2V0ICogLSBsZWZ0Rm92O1xuXG5cdFx0XHQvLyBUT0RPOiBCZXR0ZXIgd2F5IHRvIGFwcGx5IHRoaXMgb2Zmc2V0P1xuXHRcdFx0Y2FtZXJhTC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIGNhbWVyYS5wb3NpdGlvbiwgY2FtZXJhLnF1YXRlcm5pb24sIGNhbWVyYS5zY2FsZSApO1xuXHRcdFx0Y2FtZXJhLnRyYW5zbGF0ZVgoIHhPZmZzZXQgKTtcblx0XHRcdGNhbWVyYS50cmFuc2xhdGVaKCB6T2Zmc2V0ICk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGQuY29tcG9zZSggY2FtZXJhLnBvc2l0aW9uLCBjYW1lcmEucXVhdGVybmlvbiwgY2FtZXJhLnNjYWxlICk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXG5cdFx0XHQvLyBGaW5kIHRoZSB1bmlvbiBvZiB0aGUgZnJ1c3R1bSB2YWx1ZXMgb2YgdGhlIGNhbWVyYXMgYW5kIHNjYWxlXG5cdFx0XHQvLyB0aGUgdmFsdWVzIHNvIHRoYXQgdGhlIG5lYXIgcGxhbmUncyBwb3NpdGlvbiBkb2VzIG5vdCBjaGFuZ2UgaW4gd29ybGQgc3BhY2UsXG5cdFx0XHQvLyBhbHRob3VnaCBtdXN0IG5vdyBiZSByZWxhdGl2ZSB0byB0aGUgbmV3IHVuaW9uIGNhbWVyYS5cblx0XHRcdGNvbnN0IG5lYXIyID0gbmVhciArIHpPZmZzZXQ7XG5cdFx0XHRjb25zdCBmYXIyID0gZmFyICsgek9mZnNldDtcblx0XHRcdGNvbnN0IGxlZnQyID0gbGVmdCAtIHhPZmZzZXQ7XG5cdFx0XHRjb25zdCByaWdodDIgPSByaWdodCArICggaXBkIC0geE9mZnNldCApO1xuXHRcdFx0Y29uc3QgdG9wMiA9IHRvcEZvdiAqIGZhciAvIGZhcjIgKiBuZWFyMjtcblx0XHRcdGNvbnN0IGJvdHRvbTIgPSBib3R0b21Gb3YgKiBmYXIgLyBmYXIyICogbmVhcjI7XG5cblx0XHRcdGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZSggbGVmdDIsIHJpZ2h0MiwgdG9wMiwgYm90dG9tMiwgbmVhcjIsIGZhcjIgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHVwZGF0ZUNhbWVyYSggY2FtZXJhLCBwYXJlbnQgKSB7XG5cblx0XHRcdGlmICggcGFyZW50ID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5jb3B5KCBjYW1lcmEubWF0cml4ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoIHBhcmVudC5tYXRyaXhXb3JsZCwgY2FtZXJhLm1hdHJpeCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuY29weSggY2FtZXJhLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnVwZGF0ZUNhbWVyYSA9IGZ1bmN0aW9uICggY2FtZXJhICkge1xuXG5cdFx0XHRpZiAoIHNlc3Npb24gPT09IG51bGwgKSByZXR1cm47XG5cblx0XHRcdGNhbWVyYVZSLm5lYXIgPSBjYW1lcmFSLm5lYXIgPSBjYW1lcmFMLm5lYXIgPSBjYW1lcmEubmVhcjtcblx0XHRcdGNhbWVyYVZSLmZhciA9IGNhbWVyYVIuZmFyID0gY2FtZXJhTC5mYXIgPSBjYW1lcmEuZmFyO1xuXG5cdFx0XHRpZiAoIF9jdXJyZW50RGVwdGhOZWFyICE9PSBjYW1lcmFWUi5uZWFyIHx8IF9jdXJyZW50RGVwdGhGYXIgIT09IGNhbWVyYVZSLmZhciApIHtcblxuXHRcdFx0XHQvLyBOb3RlIHRoYXQgdGhlIG5ldyByZW5kZXJTdGF0ZSB3b24ndCBhcHBseSB1bnRpbCB0aGUgbmV4dCBmcmFtZS4gU2VlICMxODMyMFxuXG5cdFx0XHRcdHNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoIHtcblx0XHRcdFx0XHRkZXB0aE5lYXI6IGNhbWVyYVZSLm5lYXIsXG5cdFx0XHRcdFx0ZGVwdGhGYXI6IGNhbWVyYVZSLmZhclxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0X2N1cnJlbnREZXB0aE5lYXIgPSBjYW1lcmFWUi5uZWFyO1xuXHRcdFx0XHRfY3VycmVudERlcHRoRmFyID0gY2FtZXJhVlIuZmFyO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmVudCA9IGNhbWVyYS5wYXJlbnQ7XG5cdFx0XHRjb25zdCBjYW1lcmFzID0gY2FtZXJhVlIuY2FtZXJhcztcblxuXHRcdFx0dXBkYXRlQ2FtZXJhKCBjYW1lcmFWUiwgcGFyZW50ICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdHVwZGF0ZUNhbWVyYSggY2FtZXJhc1sgaSBdLCBwYXJlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjYW1lcmFWUi5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIGNhbWVyYVZSLnBvc2l0aW9uLCBjYW1lcmFWUi5xdWF0ZXJuaW9uLCBjYW1lcmFWUi5zY2FsZSApO1xuXG5cdFx0XHQvLyB1cGRhdGUgdXNlciBjYW1lcmEgYW5kIGl0cyBjaGlsZHJlblxuXG5cdFx0XHRjYW1lcmEucG9zaXRpb24uY29weSggY2FtZXJhVlIucG9zaXRpb24gKTtcblx0XHRcdGNhbWVyYS5xdWF0ZXJuaW9uLmNvcHkoIGNhbWVyYVZSLnF1YXRlcm5pb24gKTtcblx0XHRcdGNhbWVyYS5zY2FsZS5jb3B5KCBjYW1lcmFWUi5zY2FsZSApO1xuXHRcdFx0Y2FtZXJhLm1hdHJpeC5jb3B5KCBjYW1lcmFWUi5tYXRyaXggKTtcblx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5jb3B5KCBjYW1lcmFWUi5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IGNhbWVyYS5jaGlsZHJlbjtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjaGlsZHJlblsgaSBdLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IGZvciBwcm9wZXIgdmlldyBmcnVzdHVtIGN1bGxpbmdcblxuXHRcdFx0aWYgKCBjYW1lcmFzLmxlbmd0aCA9PT0gMiApIHtcblxuXHRcdFx0XHRzZXRQcm9qZWN0aW9uRnJvbVVuaW9uKCBjYW1lcmFWUiwgY2FtZXJhTCwgY2FtZXJhUiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIGFzc3VtZSBzaW5nbGUgY2FtZXJhIHNldHVwIChBUilcblxuXHRcdFx0XHRjYW1lcmFWUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIGNhbWVyYUwucHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRDYW1lcmEgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiBjYW1lcmFWUjtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEZvdmVhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0aWYgKCBnbFByb2pMYXllciAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZ2xQcm9qTGF5ZXIuZml4ZWRGb3ZlYXRpb247XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBnbEJhc2VMYXllciAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZ2xCYXNlTGF5ZXIuZml4ZWRGb3ZlYXRpb247XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdH07XG5cblx0XHR0aGlzLnNldEZvdmVhdGlvbiA9IGZ1bmN0aW9uICggZm92ZWF0aW9uICkge1xuXG5cdFx0XHQvLyAwID0gbm8gZm92ZWF0aW9uID0gZnVsbCByZXNvbHV0aW9uXG5cdFx0XHQvLyAxID0gbWF4aW11bSBmb3ZlYXRpb24gPSB0aGUgZWRnZXMgcmVuZGVyIGF0IGxvd2VyIHJlc29sdXRpb25cblxuXHRcdFx0aWYgKCBnbFByb2pMYXllciAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRnbFByb2pMYXllci5maXhlZEZvdmVhdGlvbiA9IGZvdmVhdGlvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGdsQmFzZUxheWVyICE9PSBudWxsICYmIGdsQmFzZUxheWVyLmZpeGVkRm92ZWF0aW9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Z2xCYXNlTGF5ZXIuZml4ZWRGb3ZlYXRpb24gPSBmb3ZlYXRpb247XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHQvLyBBbmltYXRpb24gTG9vcFxuXG5cdFx0bGV0IG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IG51bGw7XG5cblx0XHRmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKCB0aW1lLCBmcmFtZSApIHtcblxuXHRcdFx0cG9zZSA9IGZyYW1lLmdldFZpZXdlclBvc2UoIHJlZmVyZW5jZVNwYWNlICk7XG5cdFx0XHR4ckZyYW1lID0gZnJhbWU7XG5cblx0XHRcdGlmICggcG9zZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCB2aWV3cyA9IHBvc2Uudmlld3M7XG5cblx0XHRcdFx0aWYgKCBnbEJhc2VMYXllciAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKCBuZXdSZW5kZXJUYXJnZXQsIGdsQmFzZUxheWVyLmZyYW1lYnVmZmVyICk7XG5cdFx0XHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBuZXdSZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGNhbWVyYVZSTmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHQvLyBjaGVjayBpZiBpdCdzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIGNhbWVyYVZSJ3MgY2FtZXJhIGxpc3RcblxuXHRcdFx0XHRpZiAoIHZpZXdzLmxlbmd0aCAhPT0gY2FtZXJhVlIuY2FtZXJhcy5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHRjYW1lcmFWUi5jYW1lcmFzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0Y2FtZXJhVlJOZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHZpZXdzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSB2aWV3c1sgaSBdO1xuXG5cdFx0XHRcdFx0bGV0IHZpZXdwb3J0ID0gbnVsbDtcblxuXHRcdFx0XHRcdGlmICggZ2xCYXNlTGF5ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdHZpZXdwb3J0ID0gZ2xCYXNlTGF5ZXIuZ2V0Vmlld3BvcnQoIHZpZXcgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdsU3ViSW1hZ2UgPSBnbEJpbmRpbmcuZ2V0Vmlld1N1YkltYWdlKCBnbFByb2pMYXllciwgdmlldyApO1xuXHRcdFx0XHRcdFx0dmlld3BvcnQgPSBnbFN1YkltYWdlLnZpZXdwb3J0O1xuXG5cdFx0XHRcdFx0XHQvLyBGb3Igc2lkZS1ieS1zaWRlIHByb2plY3Rpb24sIHdlIG9ubHkgcHJvZHVjZSBhIHNpbmdsZSB0ZXh0dXJlIGZvciBib3RoIGV5ZXMuXG5cdFx0XHRcdFx0XHRpZiAoIGkgPT09IDAgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoXG5cdFx0XHRcdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdGdsU3ViSW1hZ2UuY29sb3JUZXh0dXJlLFxuXHRcdFx0XHRcdFx0XHRcdGdsUHJvakxheWVyLmlnbm9yZURlcHRoVmFsdWVzID8gdW5kZWZpbmVkIDogZ2xTdWJJbWFnZS5kZXB0aFN0ZW5jaWxUZXh0dXJlICk7XG5cblx0XHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBuZXdSZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgY2FtZXJhID0gY2FtZXJhc1sgaSBdO1xuXG5cdFx0XHRcdFx0Y2FtZXJhLm1hdHJpeC5mcm9tQXJyYXkoIHZpZXcudHJhbnNmb3JtLm1hdHJpeCApO1xuXHRcdFx0XHRcdGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheSggdmlldy5wcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0XHRcdFx0Y2FtZXJhLnZpZXdwb3J0LnNldCggdmlld3BvcnQueCwgdmlld3BvcnQueSwgdmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCApO1xuXG5cdFx0XHRcdFx0aWYgKCBpID09PSAwICkge1xuXG5cdFx0XHRcdFx0XHRjYW1lcmFWUi5tYXRyaXguY29weSggY2FtZXJhLm1hdHJpeCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBjYW1lcmFWUk5lZWRzVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRjYW1lcmFWUi5jYW1lcmFzLnB1c2goIGNhbWVyYSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvL1xuXG5cdFx0XHRjb25zdCBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0U291cmNlcztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29udHJvbGxlcnMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1sgaSBdO1xuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGlucHV0U291cmNlc1sgaSBdO1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIudXBkYXRlKCBpbnB1dFNvdXJjZSwgZnJhbWUsIHJlZmVyZW5jZVNwYWNlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgKSBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soIHRpbWUsIGZyYW1lICk7XG5cblx0XHRcdHhyRnJhbWUgPSBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgYW5pbWF0aW9uID0gbmV3IFdlYkdMQW5pbWF0aW9uKCk7XG5cblx0XHRhbmltYXRpb24uc2V0QW5pbWF0aW9uTG9vcCggb25BbmltYXRpb25GcmFtZSApO1xuXG5cdFx0dGhpcy5zZXRBbmltYXRpb25Mb29wID0gZnVuY3Rpb24gKCBjYWxsYmFjayApIHtcblxuXHRcdFx0b25BbmltYXRpb25GcmFtZUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge307XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMTWF0ZXJpYWxzKCBwcm9wZXJ0aWVzICkge1xuXG5cdGZ1bmN0aW9uIHJlZnJlc2hGb2dVbmlmb3JtcyggdW5pZm9ybXMsIGZvZyApIHtcblxuXHRcdHVuaWZvcm1zLmZvZ0NvbG9yLnZhbHVlLmNvcHkoIGZvZy5jb2xvciApO1xuXG5cdFx0aWYgKCBmb2cuaXNGb2cgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmZvZ05lYXIudmFsdWUgPSBmb2cubmVhcjtcblx0XHRcdHVuaWZvcm1zLmZvZ0Zhci52YWx1ZSA9IGZvZy5mYXI7XG5cblx0XHR9IGVsc2UgaWYgKCBmb2cuaXNGb2dFeHAyICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5mb2dEZW5zaXR5LnZhbHVlID0gZm9nLmRlbnNpdHk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKCB1bmlmb3JtcywgbWF0ZXJpYWwsIHBpeGVsUmF0aW8sIGhlaWdodCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zTGFtYmVydCggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNUb29uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNQaG9uZyggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0cmVmcmVzaFVuaWZvcm1zUGh5c2ljYWwoIHVuaWZvcm1zLCBtYXRlcmlhbCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hNYXRjYXBNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc01hdGNhcCggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hEZXB0aE1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zRGVwdGgoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0Rpc3RhbmNlKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zTm9ybWFsKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTGluZUJhc2ljTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0xpbmUoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzTGluZURhc2hlZE1hdGVyaWFsICkge1xuXG5cdFx0XHRcdHJlZnJlc2hVbmlmb3Jtc0Rhc2goIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1BvaW50c01hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNQb2ludHMoIHVuaWZvcm1zLCBtYXRlcmlhbCwgcGl4ZWxSYXRpbywgaGVpZ2h0ICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1Nwcml0ZU1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNTcHJpdGVzKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzU2hhZG93TWF0ZXJpYWwgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmNvbG9yLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgKSB7XG5cblx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IGZhbHNlOyAvLyAjMTU1ODFcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblxuXHRcdGlmICggbWF0ZXJpYWwuY29sb3IgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUuY29weSggbWF0ZXJpYWwuY29sb3IgKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZW1pc3NpdmUgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmVtaXNzaXZlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmVtaXNzaXZlICkubXVsdGlwbHlTY2FsYXIoIG1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5hbHBoYU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuc3BlY3VsYXJNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFyTWFwLnZhbHVlID0gbWF0ZXJpYWwuc3BlY3VsYXJNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmFscGhhVGVzdCA+IDAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmFscGhhVGVzdC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGVudk1hcCA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApLmVudk1hcDtcblxuXHRcdGlmICggZW52TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5lbnZNYXAudmFsdWUgPSBlbnZNYXA7XG5cblx0XHRcdHVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSAoIGVudk1hcC5pc0N1YmVUZXh0dXJlICYmIGVudk1hcC5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlICkgPyAtIDEgOiAxO1xuXG5cdFx0XHR1bmlmb3Jtcy5yZWZsZWN0aXZpdHkudmFsdWUgPSBtYXRlcmlhbC5yZWZsZWN0aXZpdHk7XG5cdFx0XHR1bmlmb3Jtcy5pb3IudmFsdWUgPSBtYXRlcmlhbC5pb3I7XG5cdFx0XHR1bmlmb3Jtcy5yZWZyYWN0aW9uUmF0aW8udmFsdWUgPSBtYXRlcmlhbC5yZWZyYWN0aW9uUmF0aW87XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmxpZ2h0TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5saWdodE1hcC52YWx1ZSA9IG1hdGVyaWFsLmxpZ2h0TWFwO1xuXHRcdFx0dW5pZm9ybXMubGlnaHRNYXBJbnRlbnNpdHkudmFsdWUgPSBtYXRlcmlhbC5saWdodE1hcEludGVuc2l0eTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYW9NYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmFvTWFwLnZhbHVlID0gbWF0ZXJpYWwuYW9NYXA7XG5cdFx0XHR1bmlmb3Jtcy5hb01hcEludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLmFvTWFwSW50ZW5zaXR5O1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzXG5cdFx0Ly8gMS4gY29sb3IgbWFwXG5cdFx0Ly8gMi4gc3BlY3VsYXIgbWFwXG5cdFx0Ly8gMy4gZGlzcGxhY2VtZW50TWFwIG1hcFxuXHRcdC8vIDQuIG5vcm1hbCBtYXBcblx0XHQvLyA1LiBidW1wIG1hcFxuXHRcdC8vIDYuIHJvdWdobmVzc01hcCBtYXBcblx0XHQvLyA3LiBtZXRhbG5lc3NNYXAgbWFwXG5cdFx0Ly8gOC4gYWxwaGFNYXAgbWFwXG5cdFx0Ly8gOS4gZW1pc3NpdmVNYXAgbWFwXG5cdFx0Ly8gMTAuIGNsZWFyY29hdCBtYXBcblx0XHQvLyAxMS4gY2xlYXJjb2F0IG5vcm1hbCBtYXBcblx0XHQvLyAxMi4gY2xlYXJjb2F0IHJvdWdobmVzc01hcCBtYXBcblx0XHQvLyAxMy4gc3BlY3VsYXIgaW50ZW5zaXR5IG1hcFxuXHRcdC8vIDE0LiBzcGVjdWxhciB0aW50IG1hcFxuXHRcdC8vIDE1LiB0cmFuc21pc3Npb24gbWFwXG5cdFx0Ly8gMTYuIHRoaWNrbmVzcyBtYXBcblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5zcGVjdWxhck1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNwZWN1bGFyTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuYnVtcE1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3NNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5hbHBoYU1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuZW1pc3NpdmVNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmNsZWFyY29hdE1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdE1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnRoaWNrbmVzc01hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnRoaWNrbmVzc01hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnNoZWVuQ29sb3JNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcDtcblxuXHRcdH1cblxuXHRcdGlmICggdXZTY2FsZU1hcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0aWYgKCB1dlNjYWxlTWFwLmlzV2ViR0xSZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdFx0dXZTY2FsZU1hcCA9IHV2U2NhbGVNYXAudGV4dHVyZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHV2U2NhbGVNYXAubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHR1dlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoIHV2U2NhbGVNYXAubWF0cml4ICk7XG5cblx0XHR9XG5cblx0XHQvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXMgZm9yIHV2MlxuXHRcdC8vIDEuIGFvIG1hcFxuXHRcdC8vIDIuIGxpZ2h0IG1hcFxuXG5cdFx0bGV0IHV2MlNjYWxlTWFwO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5hb01hcCApIHtcblxuXHRcdFx0dXYyU2NhbGVNYXAgPSBtYXRlcmlhbC5hb01hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmxpZ2h0TWFwICkge1xuXG5cdFx0XHR1djJTY2FsZU1hcCA9IG1hdGVyaWFsLmxpZ2h0TWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1djJTY2FsZU1hcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0aWYgKCB1djJTY2FsZU1hcC5pc1dlYkdMUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRcdHV2MlNjYWxlTWFwID0gdXYyU2NhbGVNYXAudGV4dHVyZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHV2MlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0dXYyU2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoIHV2MlNjYWxlTWFwLm1hdHJpeCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNMaW5lKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0Rhc2goIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdHVuaWZvcm1zLmRhc2hTaXplLnZhbHVlID0gbWF0ZXJpYWwuZGFzaFNpemU7XG5cdFx0dW5pZm9ybXMudG90YWxTaXplLnZhbHVlID0gbWF0ZXJpYWwuZGFzaFNpemUgKyBtYXRlcmlhbC5nYXBTaXplO1xuXHRcdHVuaWZvcm1zLnNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuc2NhbGU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1BvaW50cyggdW5pZm9ybXMsIG1hdGVyaWFsLCBwaXhlbFJhdGlvLCBoZWlnaHQgKSB7XG5cblx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cdFx0dW5pZm9ybXMuc2l6ZS52YWx1ZSA9IG1hdGVyaWFsLnNpemUgKiBwaXhlbFJhdGlvO1xuXHRcdHVuaWZvcm1zLnNjYWxlLnZhbHVlID0gaGVpZ2h0ICogMC41O1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm1hcC52YWx1ZSA9IG1hdGVyaWFsLm1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYWxwaGFNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmFscGhhTWFwLnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmFscGhhVGVzdCA+IDAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmFscGhhVGVzdC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblxuXHRcdH1cblxuXHRcdC8vIHV2IHJlcGVhdCBhbmQgb2Zmc2V0IHNldHRpbmcgcHJpb3JpdGllc1xuXHRcdC8vIDEuIGNvbG9yIG1hcFxuXHRcdC8vIDIuIGFscGhhIG1hcFxuXG5cdFx0bGV0IHV2U2NhbGVNYXA7XG5cblx0XHRpZiAoIG1hdGVyaWFsLm1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmFscGhhTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIHV2U2NhbGVNYXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCB1dlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0dXZTY2FsZU1hcC51cGRhdGVNYXRyaXgoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KCB1dlNjYWxlTWFwLm1hdHJpeCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNTcHJpdGVzKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cdFx0dW5pZm9ybXMucm90YXRpb24udmFsdWUgPSBtYXRlcmlhbC5yb3RhdGlvbjtcblxuXHRcdGlmICggbWF0ZXJpYWwubWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5tYXAudmFsdWUgPSBtYXRlcmlhbC5tYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmFscGhhTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hbHBoYU1hcC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5hbHBoYVRlc3QgPiAwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hbHBoYVRlc3QudmFsdWUgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cblx0XHR9XG5cblx0XHQvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXNcblx0XHQvLyAxLiBjb2xvciBtYXBcblx0XHQvLyAyLiBhbHBoYSBtYXBcblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5hbHBoYU1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1dlNjYWxlTWFwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggdXZTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdHV2U2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSggdXZTY2FsZU1hcC5tYXRyaXggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGFtYmVydCggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zUGhvbmcoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdHVuaWZvcm1zLnNwZWN1bGFyLnZhbHVlLmNvcHkoIG1hdGVyaWFsLnNwZWN1bGFyICk7XG5cdFx0dW5pZm9ybXMuc2hpbmluZXNzLnZhbHVlID0gTWF0aC5tYXgoIG1hdGVyaWFsLnNoaW5pbmVzcywgMWUtNCApOyAvLyB0byBwcmV2ZW50IHBvdyggMC4wLCAwLjAgKVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYnVtcE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0gMTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5ub3JtYWxTY2FsZSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zVG9vbiggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5ncmFkaWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZ3JhZGllbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5ncmFkaWVudE1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZW1pc3NpdmVNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtIDE7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwubm9ybWFsU2NhbGUgKTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5yb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XG5cdFx0dW5pZm9ybXMubWV0YWxuZXNzLnZhbHVlID0gbWF0ZXJpYWwubWV0YWxuZXNzO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLnJvdWdobmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLnJvdWdobmVzc01hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwubWV0YWxuZXNzTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5tZXRhbG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5idW1wTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgKj0gLSAxO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5ub3JtYWxNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLm5vcm1hbFNjYWxlICk7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZW52TWFwID0gcHJvcGVydGllcy5nZXQoIG1hdGVyaWFsICkuZW52TWFwO1xuXG5cdFx0aWYgKCBlbnZNYXAgKSB7XG5cblx0XHRcdC8vdW5pZm9ybXMuZW52TWFwLnZhbHVlID0gbWF0ZXJpYWwuZW52TWFwOyAvLyBwYXJ0IG9mIHVuaWZvcm1zIGNvbW1vblxuXHRcdFx0dW5pZm9ybXMuZW52TWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5O1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQaHlzaWNhbCggdW5pZm9ybXMsIG1hdGVyaWFsLCB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRyZWZyZXNoVW5pZm9ybXNTdGFuZGFyZCggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR1bmlmb3Jtcy5pb3IudmFsdWUgPSBtYXRlcmlhbC5pb3I7IC8vIGFsc28gcGFydCBvZiB1bmlmb3JtcyBjb21tb25cblxuXHRcdGlmICggbWF0ZXJpYWwuc2hlZW4gPiAwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKS5tdWx0aXBseVNjYWxhciggbWF0ZXJpYWwuc2hlZW4gKTtcblxuXHRcdFx0dW5pZm9ybXMuc2hlZW5Sb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzcztcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLnNoZWVuQ29sb3JNYXAudmFsdWUgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdFx0dW5pZm9ybXMuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5jbGVhcmNvYXQgPiAwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXQudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXQ7XG5cdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3M7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuY2xlYXJjb2F0TWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdE1hcC52YWx1ZSA9IG1hdGVyaWFsLmNsZWFyY29hdE1hcDtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCApIHtcblxuXHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAgKSB7XG5cblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsU2NhbGUgKTtcblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB7XG5cblx0XHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMCApIHtcblxuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uLnZhbHVlID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uO1xuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZSA9IHRyYW5zbWlzc2lvblJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KCB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQud2lkdGgsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgKSB7XG5cblx0XHRcdFx0dW5pZm9ybXMudHJhbnNtaXNzaW9uTWFwLnZhbHVlID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnRoaWNrbmVzcy52YWx1ZSA9IG1hdGVyaWFsLnRoaWNrbmVzcztcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC50aGlja25lc3NNYXAgKSB7XG5cblx0XHRcdFx0dW5pZm9ybXMudGhpY2tuZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwudGhpY2tuZXNzTWFwO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWUgPSBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dW5pZm9ybXMuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KCBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yICk7XG5cblx0XHR9XG5cblx0XHR1bmlmb3Jtcy5zcGVjdWxhckludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHVuaWZvcm1zLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuc3BlY3VsYXJDb2xvck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXA7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc01hdGNhcCggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXRjYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm1hdGNhcC52YWx1ZSA9IG1hdGVyaWFsLm1hdGNhcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYnVtcE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0gMTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5ub3JtYWxTY2FsZSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zRGVwdGgoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0Rpc3RhbmNlKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0fVxuXG5cdFx0dW5pZm9ybXMucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weSggbWF0ZXJpYWwucmVmZXJlbmNlUG9zaXRpb24gKTtcblx0XHR1bmlmb3Jtcy5uZWFyRGlzdGFuY2UudmFsdWUgPSBtYXRlcmlhbC5uZWFyRGlzdGFuY2U7XG5cdFx0dW5pZm9ybXMuZmFyRGlzdGFuY2UudmFsdWUgPSBtYXRlcmlhbC5mYXJEaXN0YW5jZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTm9ybWFsKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtIDE7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwubm9ybWFsU2NhbGUgKTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cmVmcmVzaEZvZ1VuaWZvcm1zOiByZWZyZXNoRm9nVW5pZm9ybXMsXG5cdFx0cmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6IHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCgpIHtcblxuXHRjb25zdCBjYW52YXMgPSBjcmVhdGVFbGVtZW50TlMoICdjYW52YXMnICk7XG5cdGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblx0cmV0dXJuIGNhbnZhcztcblxufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlcmVyKCBwYXJhbWV0ZXJzID0ge30gKSB7XG5cblx0Y29uc3QgX2NhbnZhcyA9IHBhcmFtZXRlcnMuY2FudmFzICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmNhbnZhcyA6IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKSxcblx0XHRfY29udGV4dCA9IHBhcmFtZXRlcnMuY29udGV4dCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5jb250ZXh0IDogbnVsbCxcblxuXHRcdF9hbHBoYSA9IHBhcmFtZXRlcnMuYWxwaGEgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYWxwaGEgOiBmYWxzZSxcblx0XHRfZGVwdGggPSBwYXJhbWV0ZXJzLmRlcHRoICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRlcHRoIDogdHJ1ZSxcblx0XHRfc3RlbmNpbCA9IHBhcmFtZXRlcnMuc3RlbmNpbCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5zdGVuY2lsIDogdHJ1ZSxcblx0XHRfYW50aWFsaWFzID0gcGFyYW1ldGVycy5hbnRpYWxpYXMgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYW50aWFsaWFzIDogZmFsc2UsXG5cdFx0X3ByZW11bHRpcGxpZWRBbHBoYSA9IHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSA6IHRydWUsXG5cdFx0X3ByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IHBhcmFtZXRlcnMucHJlc2VydmVEcmF3aW5nQnVmZmVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA6IGZhbHNlLFxuXHRcdF9wb3dlclByZWZlcmVuY2UgPSBwYXJhbWV0ZXJzLnBvd2VyUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wb3dlclByZWZlcmVuY2UgOiAnZGVmYXVsdCcsXG5cdFx0X2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBwYXJhbWV0ZXJzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA6IGZhbHNlO1xuXG5cdGxldCBjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7XG5cdGxldCBjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsO1xuXG5cdC8vIHJlbmRlcigpIGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBjYWxsYmFjayB0cmlnZ2VyZWQgYnkgYW5vdGhlciByZW5kZXIuXG5cdC8vIFdlIHRyYWNrIHRoaXMgc28gdGhhdCB0aGUgbmVzdGVkIHJlbmRlciBjYWxsIGdldHMgaXRzIGxpc3QgYW5kIHN0YXRlIGlzb2xhdGVkIGZyb20gdGhlIHBhcmVudCByZW5kZXIgY2FsbC5cblxuXHRjb25zdCByZW5kZXJMaXN0U3RhY2sgPSBbXTtcblx0Y29uc3QgcmVuZGVyU3RhdGVTdGFjayA9IFtdO1xuXG5cdC8vIHB1YmxpYyBwcm9wZXJ0aWVzXG5cblx0dGhpcy5kb21FbGVtZW50ID0gX2NhbnZhcztcblxuXHQvLyBEZWJ1ZyBjb25maWd1cmF0aW9uIGNvbnRhaW5lclxuXHR0aGlzLmRlYnVnID0ge1xuXG5cdFx0LyoqXG5cdFx0ICogRW5hYmxlcyBlcnJvciBjaGVja2luZyBhbmQgcmVwb3J0aW5nIHdoZW4gc2hhZGVyIHByb2dyYW1zIGFyZSBiZWluZyBjb21waWxlZFxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGNoZWNrU2hhZGVyRXJyb3JzOiB0cnVlXG5cdH07XG5cblx0Ly8gY2xlYXJpbmdcblxuXHR0aGlzLmF1dG9DbGVhciA9IHRydWU7XG5cdHRoaXMuYXV0b0NsZWFyQ29sb3IgPSB0cnVlO1xuXHR0aGlzLmF1dG9DbGVhckRlcHRoID0gdHJ1ZTtcblx0dGhpcy5hdXRvQ2xlYXJTdGVuY2lsID0gdHJ1ZTtcblxuXHQvLyBzY2VuZSBncmFwaFxuXG5cdHRoaXMuc29ydE9iamVjdHMgPSB0cnVlO1xuXG5cdC8vIHVzZXItZGVmaW5lZCBjbGlwcGluZ1xuXG5cdHRoaXMuY2xpcHBpbmdQbGFuZXMgPSBbXTtcblx0dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNlO1xuXG5cdC8vIHBoeXNpY2FsbHkgYmFzZWQgc2hhZGluZ1xuXG5cdHRoaXMub3V0cHV0RW5jb2RpbmcgPSBMaW5lYXJFbmNvZGluZztcblxuXHQvLyBwaHlzaWNhbCBsaWdodHNcblxuXHR0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID0gZmFsc2U7XG5cblx0Ly8gdG9uZSBtYXBwaW5nXG5cblx0dGhpcy50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cdHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZSA9IDEuMDtcblxuXHQvLyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG5cblx0Y29uc3QgX3RoaXMgPSB0aGlzO1xuXG5cdGxldCBfaXNDb250ZXh0TG9zdCA9IGZhbHNlO1xuXG5cdC8vIGludGVybmFsIHN0YXRlIGNhY2hlXG5cblx0bGV0IF9jdXJyZW50QWN0aXZlQ3ViZUZhY2UgPSAwO1xuXHRsZXQgX2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbCA9IDA7XG5cdGxldCBfY3VycmVudFJlbmRlclRhcmdldCA9IG51bGw7XG5cdGxldCBfY3VycmVudE1hdGVyaWFsSWQgPSAtIDE7XG5cblx0bGV0IF9jdXJyZW50Q2FtZXJhID0gbnVsbDtcblxuXHRjb25zdCBfY3VycmVudFZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKTtcblx0Y29uc3QgX2N1cnJlbnRTY2lzc29yID0gbmV3IFZlY3RvcjQoKTtcblx0bGV0IF9jdXJyZW50U2Npc3NvclRlc3QgPSBudWxsO1xuXG5cdC8vXG5cblx0bGV0IF93aWR0aCA9IF9jYW52YXMud2lkdGg7XG5cdGxldCBfaGVpZ2h0ID0gX2NhbnZhcy5oZWlnaHQ7XG5cblx0bGV0IF9waXhlbFJhdGlvID0gMTtcblx0bGV0IF9vcGFxdWVTb3J0ID0gbnVsbDtcblx0bGV0IF90cmFuc3BhcmVudFNvcnQgPSBudWxsO1xuXG5cdGNvbnN0IF92aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCAwLCAwLCBfd2lkdGgsIF9oZWlnaHQgKTtcblx0Y29uc3QgX3NjaXNzb3IgPSBuZXcgVmVjdG9yNCggMCwgMCwgX3dpZHRoLCBfaGVpZ2h0ICk7XG5cdGxldCBfc2Npc3NvclRlc3QgPSBmYWxzZTtcblxuXHQvLyBmcnVzdHVtXG5cblx0Y29uc3QgX2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xuXG5cdC8vIGNsaXBwaW5nXG5cblx0bGV0IF9jbGlwcGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0bGV0IF9sb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNlO1xuXG5cdC8vIHRyYW5zbWlzc2lvblxuXG5cdGxldCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ID0gbnVsbDtcblxuXHQvLyBjYW1lcmEgbWF0cmljZXMgY2FjaGVcblxuXHRjb25zdCBfcHJvalNjcmVlbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0Y29uc3QgX3ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdGNvbnN0IF9lbXB0eVNjZW5lID0geyBiYWNrZ3JvdW5kOiBudWxsLCBmb2c6IG51bGwsIGVudmlyb25tZW50OiBudWxsLCBvdmVycmlkZU1hdGVyaWFsOiBudWxsLCBpc1NjZW5lOiB0cnVlIH07XG5cblx0ZnVuY3Rpb24gZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpIHtcblxuXHRcdHJldHVybiBfY3VycmVudFJlbmRlclRhcmdldCA9PT0gbnVsbCA/IF9waXhlbFJhdGlvIDogMTtcblxuXHR9XG5cblx0Ly8gaW5pdGlhbGl6ZVxuXG5cdGxldCBfZ2wgPSBfY29udGV4dDtcblxuXHRmdW5jdGlvbiBnZXRDb250ZXh0KCBjb250ZXh0TmFtZXMsIGNvbnRleHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29udGV4dE5hbWVzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY29udGV4dE5hbWUgPSBjb250ZXh0TmFtZXNbIGkgXTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoIGNvbnRleHROYW1lLCBjb250ZXh0QXR0cmlidXRlcyApO1xuXHRcdFx0aWYgKCBjb250ZXh0ICE9PSBudWxsICkgcmV0dXJuIGNvbnRleHQ7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblxuXHR9XG5cblx0dHJ5IHtcblxuXHRcdGNvbnN0IGNvbnRleHRBdHRyaWJ1dGVzID0ge1xuXHRcdFx0YWxwaGE6IHRydWUsXG5cdFx0XHRkZXB0aDogX2RlcHRoLFxuXHRcdFx0c3RlbmNpbDogX3N0ZW5jaWwsXG5cdFx0XHRhbnRpYWxpYXM6IF9hbnRpYWxpYXMsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IF9wcmVtdWx0aXBsaWVkQWxwaGEsXG5cdFx0XHRwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IF9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG5cdFx0XHRwb3dlclByZWZlcmVuY2U6IF9wb3dlclByZWZlcmVuY2UsXG5cdFx0XHRmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdFxuXHRcdH07XG5cblx0XHQvLyBPZmZzY3JlZW5DYW52YXMgZG9lcyBub3QgaGF2ZSBzZXRBdHRyaWJ1dGUsIHNlZSAjMjI4MTFcblx0XHRpZiAoICdzZXRBdHRyaWJ1dGUnIGluIF9jYW52YXMgKSBfY2FudmFzLnNldEF0dHJpYnV0ZSggJ2RhdGEtZW5naW5lJywgYHRocmVlLmpzIHIke1JFVklTSU9OfWAgKTtcblxuXHRcdC8vIGV2ZW50IGxpc3RlbmVycyBtdXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIFdlYkdMIGNvbnRleHQgaXMgY3JlYXRlZCwgc2VlICMxMjc1M1xuXHRcdF9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRMb3N0LCBmYWxzZSApO1xuXHRcdF9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgb25Db250ZXh0UmVzdG9yZSwgZmFsc2UgKTtcblxuXHRcdGlmICggX2dsID09PSBudWxsICkge1xuXG5cdFx0XHRjb25zdCBjb250ZXh0TmFtZXMgPSBbICd3ZWJnbDInLCAnd2ViZ2wnLCAnZXhwZXJpbWVudGFsLXdlYmdsJyBdO1xuXG5cdFx0XHRpZiAoIF90aGlzLmlzV2ViR0wxUmVuZGVyZXIgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0Y29udGV4dE5hbWVzLnNoaWZ0KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2dsID0gZ2V0Q29udGV4dCggY29udGV4dE5hbWVzLCBjb250ZXh0QXR0cmlidXRlcyApO1xuXG5cdFx0XHRpZiAoIF9nbCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRpZiAoIGdldENvbnRleHQoIGNvbnRleHROYW1lcyApICkge1xuXG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4nICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggJ0Vycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuJyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gU29tZSBleHBlcmltZW50YWwtd2ViZ2wgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBoYXZlIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdFxuXG5cdFx0aWYgKCBfZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdF9nbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0cmV0dXJuIHsgJ3JhbmdlTWluJzogMSwgJ3JhbmdlTWF4JzogMSwgJ3ByZWNpc2lvbic6IDEgfTtcblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogJyArIGVycm9yLm1lc3NhZ2UgKTtcblx0XHR0aHJvdyBlcnJvcjtcblxuXHR9XG5cblx0bGV0IGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcywgc3RhdGUsIGluZm87XG5cdGxldCBwcm9wZXJ0aWVzLCB0ZXh0dXJlcywgY3ViZW1hcHMsIGN1YmV1dm1hcHMsIGF0dHJpYnV0ZXMsIGdlb21ldHJpZXMsIG9iamVjdHM7XG5cdGxldCBwcm9ncmFtQ2FjaGUsIG1hdGVyaWFscywgcmVuZGVyTGlzdHMsIHJlbmRlclN0YXRlcywgY2xpcHBpbmcsIHNoYWRvd01hcDtcblxuXHRsZXQgYmFja2dyb3VuZCwgbW9ycGh0YXJnZXRzLCBidWZmZXJSZW5kZXJlciwgaW5kZXhlZEJ1ZmZlclJlbmRlcmVyO1xuXG5cdGxldCB1dGlscywgYmluZGluZ1N0YXRlcztcblxuXHRmdW5jdGlvbiBpbml0R0xDb250ZXh0KCkge1xuXG5cdFx0ZXh0ZW5zaW9ucyA9IG5ldyBXZWJHTEV4dGVuc2lvbnMoIF9nbCApO1xuXG5cdFx0Y2FwYWJpbGl0aWVzID0gbmV3IFdlYkdMQ2FwYWJpbGl0aWVzKCBfZ2wsIGV4dGVuc2lvbnMsIHBhcmFtZXRlcnMgKTtcblxuXHRcdGV4dGVuc2lvbnMuaW5pdCggY2FwYWJpbGl0aWVzICk7XG5cblx0XHR1dGlscyA9IG5ldyBXZWJHTFV0aWxzKCBfZ2wsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApO1xuXG5cdFx0c3RhdGUgPSBuZXcgV2ViR0xTdGF0ZSggX2dsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKTtcblxuXHRcdGluZm8gPSBuZXcgV2ViR0xJbmZvKCBfZ2wgKTtcblx0XHRwcm9wZXJ0aWVzID0gbmV3IFdlYkdMUHJvcGVydGllcygpO1xuXHRcdHRleHR1cmVzID0gbmV3IFdlYkdMVGV4dHVyZXMoIF9nbCwgZXh0ZW5zaW9ucywgc3RhdGUsIHByb3BlcnRpZXMsIGNhcGFiaWxpdGllcywgdXRpbHMsIGluZm8gKTtcblx0XHRjdWJlbWFwcyA9IG5ldyBXZWJHTEN1YmVNYXBzKCBfdGhpcyApO1xuXHRcdGN1YmV1dm1hcHMgPSBuZXcgV2ViR0xDdWJlVVZNYXBzKCBfdGhpcyApO1xuXHRcdGF0dHJpYnV0ZXMgPSBuZXcgV2ViR0xBdHRyaWJ1dGVzKCBfZ2wsIGNhcGFiaWxpdGllcyApO1xuXHRcdGJpbmRpbmdTdGF0ZXMgPSBuZXcgV2ViR0xCaW5kaW5nU3RhdGVzKCBfZ2wsIGV4dGVuc2lvbnMsIGF0dHJpYnV0ZXMsIGNhcGFiaWxpdGllcyApO1xuXHRcdGdlb21ldHJpZXMgPSBuZXcgV2ViR0xHZW9tZXRyaWVzKCBfZ2wsIGF0dHJpYnV0ZXMsIGluZm8sIGJpbmRpbmdTdGF0ZXMgKTtcblx0XHRvYmplY3RzID0gbmV3IFdlYkdMT2JqZWN0cyggX2dsLCBnZW9tZXRyaWVzLCBhdHRyaWJ1dGVzLCBpbmZvICk7XG5cdFx0bW9ycGh0YXJnZXRzID0gbmV3IFdlYkdMTW9ycGh0YXJnZXRzKCBfZ2wsIGNhcGFiaWxpdGllcywgdGV4dHVyZXMgKTtcblx0XHRjbGlwcGluZyA9IG5ldyBXZWJHTENsaXBwaW5nKCBwcm9wZXJ0aWVzICk7XG5cdFx0cHJvZ3JhbUNhY2hlID0gbmV3IFdlYkdMUHJvZ3JhbXMoIF90aGlzLCBjdWJlbWFwcywgY3ViZXV2bWFwcywgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzLCBiaW5kaW5nU3RhdGVzLCBjbGlwcGluZyApO1xuXHRcdG1hdGVyaWFscyA9IG5ldyBXZWJHTE1hdGVyaWFscyggcHJvcGVydGllcyApO1xuXHRcdHJlbmRlckxpc3RzID0gbmV3IFdlYkdMUmVuZGVyTGlzdHMoKTtcblx0XHRyZW5kZXJTdGF0ZXMgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZXMoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApO1xuXHRcdGJhY2tncm91bmQgPSBuZXcgV2ViR0xCYWNrZ3JvdW5kKCBfdGhpcywgY3ViZW1hcHMsIHN0YXRlLCBvYmplY3RzLCBfYWxwaGEsIF9wcmVtdWx0aXBsaWVkQWxwaGEgKTtcblx0XHRzaGFkb3dNYXAgPSBuZXcgV2ViR0xTaGFkb3dNYXAoIF90aGlzLCBvYmplY3RzLCBjYXBhYmlsaXRpZXMgKTtcblxuXHRcdGJ1ZmZlclJlbmRlcmVyID0gbmV3IFdlYkdMQnVmZmVyUmVuZGVyZXIoIF9nbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzICk7XG5cdFx0aW5kZXhlZEJ1ZmZlclJlbmRlcmVyID0gbmV3IFdlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyKCBfZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNhcGFiaWxpdGllcyApO1xuXG5cdFx0aW5mby5wcm9ncmFtcyA9IHByb2dyYW1DYWNoZS5wcm9ncmFtcztcblxuXHRcdF90aGlzLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcztcblx0XHRfdGhpcy5leHRlbnNpb25zID0gZXh0ZW5zaW9ucztcblx0XHRfdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblx0XHRfdGhpcy5yZW5kZXJMaXN0cyA9IHJlbmRlckxpc3RzO1xuXHRcdF90aGlzLnNoYWRvd01hcCA9IHNoYWRvd01hcDtcblx0XHRfdGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHRcdF90aGlzLmluZm8gPSBpbmZvO1xuXG5cdH1cblxuXHRpbml0R0xDb250ZXh0KCk7XG5cblx0Ly8geHJcblxuXHRjb25zdCB4ciA9IG5ldyBXZWJYUk1hbmFnZXIoIF90aGlzLCBfZ2wgKTtcblxuXHR0aGlzLnhyID0geHI7XG5cblx0Ly8gQVBJXG5cblx0dGhpcy5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9nbDtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2dsLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7XG5cblx0fTtcblxuXHR0aGlzLmZvcmNlQ29udGV4dExvc3MgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2xvc2VfY29udGV4dCcgKTtcblx0XHRpZiAoIGV4dGVuc2lvbiApIGV4dGVuc2lvbi5sb3NlQ29udGV4dCgpO1xuXG5cdH07XG5cblx0dGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9sb3NlX2NvbnRleHQnICk7XG5cdFx0aWYgKCBleHRlbnNpb24gKSBleHRlbnNpb24ucmVzdG9yZUNvbnRleHQoKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0UGl4ZWxSYXRpbyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBfcGl4ZWxSYXRpbztcblxuXHR9O1xuXG5cdHRoaXMuc2V0UGl4ZWxSYXRpbyA9IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSByZXR1cm47XG5cblx0XHRfcGl4ZWxSYXRpbyA9IHZhbHVlO1xuXG5cdFx0dGhpcy5zZXRTaXplKCBfd2lkdGgsIF9oZWlnaHQsIGZhbHNlICk7XG5cblx0fTtcblxuXHR0aGlzLmdldFNpemUgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KCBfd2lkdGgsIF9oZWlnaHQgKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0U2l6ZSA9IGZ1bmN0aW9uICggd2lkdGgsIGhlaWdodCwgdXBkYXRlU3R5bGUgKSB7XG5cblx0XHRpZiAoIHhyLmlzUHJlc2VudGluZyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuXFwndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRfd2lkdGggPSB3aWR0aDtcblx0XHRfaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0X2NhbnZhcy53aWR0aCA9IE1hdGguZmxvb3IoIHdpZHRoICogX3BpeGVsUmF0aW8gKTtcblx0XHRfY2FudmFzLmhlaWdodCA9IE1hdGguZmxvb3IoIGhlaWdodCAqIF9waXhlbFJhdGlvICk7XG5cblx0XHRpZiAoIHVwZGF0ZVN0eWxlICE9PSBmYWxzZSApIHtcblxuXHRcdFx0X2NhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4Jztcblx0XHRcdF9jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcblxuXHRcdH1cblxuXHRcdHRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemUgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KCBfd2lkdGggKiBfcGl4ZWxSYXRpbywgX2hlaWdodCAqIF9waXhlbFJhdGlvICkuZmxvb3IoKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQsIHBpeGVsUmF0aW8gKSB7XG5cblx0XHRfd2lkdGggPSB3aWR0aDtcblx0XHRfaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0X3BpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuXG5cdFx0X2NhbnZhcy53aWR0aCA9IE1hdGguZmxvb3IoIHdpZHRoICogcGl4ZWxSYXRpbyApO1xuXHRcdF9jYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vciggaGVpZ2h0ICogcGl4ZWxSYXRpbyApO1xuXG5cdFx0dGhpcy5zZXRWaWV3cG9ydCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRDdXJyZW50Vmlld3BvcnQgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggX2N1cnJlbnRWaWV3cG9ydCApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBfdmlld3BvcnQgKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG5cblx0XHRpZiAoIHguaXNWZWN0b3I0ICkge1xuXG5cdFx0XHRfdmlld3BvcnQuc2V0KCB4LngsIHgueSwgeC56LCB4LncgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF92aWV3cG9ydC5zZXQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKTtcblxuXHRcdH1cblxuXHRcdHN0YXRlLnZpZXdwb3J0KCBfY3VycmVudFZpZXdwb3J0LmNvcHkoIF92aWV3cG9ydCApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApLmZsb29yKCkgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0U2Npc3NvciA9IGZ1bmN0aW9uICggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBfc2Npc3NvciApO1xuXG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0aWYgKCB4LmlzVmVjdG9yNCApIHtcblxuXHRcdFx0X3NjaXNzb3Iuc2V0KCB4LngsIHgueSwgeC56LCB4LncgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF9zY2lzc29yLnNldCggeCwgeSwgd2lkdGgsIGhlaWdodCApO1xuXG5cdFx0fVxuXG5cdFx0c3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxvb3IoKSApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRTY2lzc29yVGVzdCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBfc2Npc3NvclRlc3Q7XG5cblx0fTtcblxuXHR0aGlzLnNldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCBib29sZWFuICkge1xuXG5cdFx0c3RhdGUuc2V0U2Npc3NvclRlc3QoIF9zY2lzc29yVGVzdCA9IGJvb2xlYW4gKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0T3BhcXVlU29ydCA9IGZ1bmN0aW9uICggbWV0aG9kICkge1xuXG5cdFx0X29wYXF1ZVNvcnQgPSBtZXRob2Q7XG5cblx0fTtcblxuXHR0aGlzLnNldFRyYW5zcGFyZW50U29ydCA9IGZ1bmN0aW9uICggbWV0aG9kICkge1xuXG5cdFx0X3RyYW5zcGFyZW50U29ydCA9IG1ldGhvZDtcblxuXHR9O1xuXG5cdC8vIENsZWFyaW5nXG5cblx0dGhpcy5nZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGJhY2tncm91bmQuZ2V0Q2xlYXJDb2xvcigpICk7XG5cblx0fTtcblxuXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRiYWNrZ3JvdW5kLnNldENsZWFyQ29sb3IuYXBwbHkoIGJhY2tncm91bmQsIGFyZ3VtZW50cyApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRDbGVhckFscGhhID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIGJhY2tncm91bmQuZ2V0Q2xlYXJBbHBoYSgpO1xuXG5cdH07XG5cblx0dGhpcy5zZXRDbGVhckFscGhhID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0YmFja2dyb3VuZC5zZXRDbGVhckFscGhhLmFwcGx5KCBiYWNrZ3JvdW5kLCBhcmd1bWVudHMgKTtcblxuXHR9O1xuXG5cdHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHtcblxuXHRcdGxldCBiaXRzID0gMDtcblxuXHRcdGlmICggY29sb3IgPT09IHVuZGVmaW5lZCB8fCBjb2xvciApIGJpdHMgfD0gMTYzODQ7XG5cdFx0aWYgKCBkZXB0aCA9PT0gdW5kZWZpbmVkIHx8IGRlcHRoICkgYml0cyB8PSAyNTY7XG5cdFx0aWYgKCBzdGVuY2lsID09PSB1bmRlZmluZWQgfHwgc3RlbmNpbCApIGJpdHMgfD0gMTAyNDtcblxuXHRcdF9nbC5jbGVhciggYml0cyApO1xuXG5cdH07XG5cblx0dGhpcy5jbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy5jbGVhciggdHJ1ZSwgZmFsc2UsIGZhbHNlICk7XG5cblx0fTtcblxuXHR0aGlzLmNsZWFyRGVwdGggPSBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLmNsZWFyKCBmYWxzZSwgdHJ1ZSwgZmFsc2UgKTtcblxuXHR9O1xuXG5cdHRoaXMuY2xlYXJTdGVuY2lsID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy5jbGVhciggZmFsc2UsIGZhbHNlLCB0cnVlICk7XG5cblx0fTtcblxuXHQvL1xuXG5cdHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdF9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRMb3N0LCBmYWxzZSApO1xuXHRcdF9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgb25Db250ZXh0UmVzdG9yZSwgZmFsc2UgKTtcblxuXHRcdHJlbmRlckxpc3RzLmRpc3Bvc2UoKTtcblx0XHRyZW5kZXJTdGF0ZXMuZGlzcG9zZSgpO1xuXHRcdHByb3BlcnRpZXMuZGlzcG9zZSgpO1xuXHRcdGN1YmVtYXBzLmRpc3Bvc2UoKTtcblx0XHRjdWJldXZtYXBzLmRpc3Bvc2UoKTtcblx0XHRvYmplY3RzLmRpc3Bvc2UoKTtcblx0XHRiaW5kaW5nU3RhdGVzLmRpc3Bvc2UoKTtcblx0XHRwcm9ncmFtQ2FjaGUuZGlzcG9zZSgpO1xuXG5cdFx0eHIuZGlzcG9zZSgpO1xuXG5cdFx0eHIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3Nlc3Npb25zdGFydCcsIG9uWFJTZXNzaW9uU3RhcnQgKTtcblx0XHR4ci5yZW1vdmVFdmVudExpc3RlbmVyKCAnc2Vzc2lvbmVuZCcsIG9uWFJTZXNzaW9uRW5kICk7XG5cblx0XHRpZiAoIF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuXHRcdFx0X3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9IG51bGw7XG5cblx0XHR9XG5cblx0XHRhbmltYXRpb24uc3RvcCgpO1xuXG5cdH07XG5cblx0Ly8gRXZlbnRzXG5cblx0ZnVuY3Rpb24gb25Db250ZXh0TG9zdCggZXZlbnQgKSB7XG5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Y29uc29sZS5sb2coICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuJyApO1xuXG5cdFx0X2lzQ29udGV4dExvc3QgPSB0cnVlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvbkNvbnRleHRSZXN0b3JlKCAvKiBldmVudCAqLyApIHtcblxuXHRcdGNvbnNvbGUubG9nKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4nICk7XG5cblx0XHRfaXNDb250ZXh0TG9zdCA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgaW5mb0F1dG9SZXNldCA9IGluZm8uYXV0b1Jlc2V0O1xuXHRcdGNvbnN0IHNoYWRvd01hcEVuYWJsZWQgPSBzaGFkb3dNYXAuZW5hYmxlZDtcblx0XHRjb25zdCBzaGFkb3dNYXBBdXRvVXBkYXRlID0gc2hhZG93TWFwLmF1dG9VcGRhdGU7XG5cdFx0Y29uc3Qgc2hhZG93TWFwTmVlZHNVcGRhdGUgPSBzaGFkb3dNYXAubmVlZHNVcGRhdGU7XG5cdFx0Y29uc3Qgc2hhZG93TWFwVHlwZSA9IHNoYWRvd01hcC50eXBlO1xuXG5cdFx0aW5pdEdMQ29udGV4dCgpO1xuXG5cdFx0aW5mby5hdXRvUmVzZXQgPSBpbmZvQXV0b1Jlc2V0O1xuXHRcdHNoYWRvd01hcC5lbmFibGVkID0gc2hhZG93TWFwRW5hYmxlZDtcblx0XHRzaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IHNoYWRvd01hcEF1dG9VcGRhdGU7XG5cdFx0c2hhZG93TWFwLm5lZWRzVXBkYXRlID0gc2hhZG93TWFwTmVlZHNVcGRhdGU7XG5cdFx0c2hhZG93TWFwLnR5cGUgPSBzaGFkb3dNYXBUeXBlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvbk1hdGVyaWFsRGlzcG9zZSggZXZlbnQgKSB7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IGV2ZW50LnRhcmdldDtcblxuXHRcdG1hdGVyaWFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25NYXRlcmlhbERpc3Bvc2UgKTtcblxuXHRcdGRlYWxsb2NhdGVNYXRlcmlhbCggbWF0ZXJpYWwgKTtcblxuXHR9XG5cblx0Ly8gQnVmZmVyIGRlYWxsb2NhdGlvblxuXG5cdGZ1bmN0aW9uIGRlYWxsb2NhdGVNYXRlcmlhbCggbWF0ZXJpYWwgKSB7XG5cblx0XHRyZWxlYXNlTWF0ZXJpYWxQcm9ncmFtUmVmZXJlbmNlcyggbWF0ZXJpYWwgKTtcblxuXHRcdHByb3BlcnRpZXMucmVtb3ZlKCBtYXRlcmlhbCApO1xuXG5cdH1cblxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVuY2VzKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IHByb2dyYW1zID0gcHJvcGVydGllcy5nZXQoIG1hdGVyaWFsICkucHJvZ3JhbXM7XG5cblx0XHRpZiAoIHByb2dyYW1zICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHByb2dyYW1zLmZvckVhY2goIGZ1bmN0aW9uICggcHJvZ3JhbSApIHtcblxuXHRcdFx0XHRwcm9ncmFtQ2FjaGUucmVsZWFzZVByb2dyYW0oIHByb2dyYW0gKTtcblxuXHRcdFx0fSApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0cHJvZ3JhbUNhY2hlLnJlbGVhc2VTaGFkZXJDYWNoZSggbWF0ZXJpYWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBCdWZmZXIgcmVuZGVyaW5nXG5cblx0dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QgPSBmdW5jdGlvbiAoIGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0LCBncm91cCApIHtcblxuXHRcdGlmICggc2NlbmUgPT09IG51bGwgKSBzY2VuZSA9IF9lbXB0eVNjZW5lOyAvLyByZW5kZXJCdWZmZXJEaXJlY3Qgc2Vjb25kIHBhcmFtZXRlciB1c2VkIHRvIGJlIGZvZyAoY291bGQgYmUgbnVsbClcblxuXHRcdGNvbnN0IGZyb250RmFjZUNXID0gKCBvYmplY3QuaXNNZXNoICYmIG9iamVjdC5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpIDwgMCApO1xuXG5cdFx0Y29uc3QgcHJvZ3JhbSA9IHNldFByb2dyYW0oIGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0ICk7XG5cblx0XHRzdGF0ZS5zZXRNYXRlcmlhbCggbWF0ZXJpYWwsIGZyb250RmFjZUNXICk7XG5cblx0XHQvL1xuXG5cdFx0bGV0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0Ly9cblxuXHRcdGlmICggaW5kZXggPT09IG51bGwgKSB7XG5cblx0XHRcdGlmICggcG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbi5jb3VudCA9PT0gMCApIHJldHVybjtcblxuXHRcdH0gZWxzZSBpZiAoIGluZGV4LmNvdW50ID09PSAwICkge1xuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0bGV0IHJhbmdlRmFjdG9yID0gMTtcblxuXHRcdGlmICggbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlICkge1xuXG5cdFx0XHRpbmRleCA9IGdlb21ldHJpZXMuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRyeSApO1xuXHRcdFx0cmFuZ2VGYWN0b3IgPSAyO1xuXG5cdFx0fVxuXG5cdFx0YmluZGluZ1N0YXRlcy5zZXR1cCggb2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnksIGluZGV4ICk7XG5cblx0XHRsZXQgYXR0cmlidXRlO1xuXHRcdGxldCByZW5kZXJlciA9IGJ1ZmZlclJlbmRlcmVyO1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0YXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoIGluZGV4ICk7XG5cblx0XHRcdHJlbmRlcmVyID0gaW5kZXhlZEJ1ZmZlclJlbmRlcmVyO1xuXHRcdFx0cmVuZGVyZXIuc2V0SW5kZXgoIGF0dHJpYnV0ZSApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGNvbnN0IGRhdGFDb3VudCA9ICggaW5kZXggIT09IG51bGwgKSA/IGluZGV4LmNvdW50IDogcG9zaXRpb24uY291bnQ7XG5cblx0XHRjb25zdCByYW5nZVN0YXJ0ID0gZ2VvbWV0cnkuZHJhd1JhbmdlLnN0YXJ0ICogcmFuZ2VGYWN0b3I7XG5cdFx0Y29uc3QgcmFuZ2VDb3VudCA9IGdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCAqIHJhbmdlRmFjdG9yO1xuXG5cdFx0Y29uc3QgZ3JvdXBTdGFydCA9IGdyb3VwICE9PSBudWxsID8gZ3JvdXAuc3RhcnQgKiByYW5nZUZhY3RvciA6IDA7XG5cdFx0Y29uc3QgZ3JvdXBDb3VudCA9IGdyb3VwICE9PSBudWxsID8gZ3JvdXAuY291bnQgKiByYW5nZUZhY3RvciA6IEluZmluaXR5O1xuXG5cdFx0Y29uc3QgZHJhd1N0YXJ0ID0gTWF0aC5tYXgoIHJhbmdlU3RhcnQsIGdyb3VwU3RhcnQgKTtcblx0XHRjb25zdCBkcmF3RW5kID0gTWF0aC5taW4oIGRhdGFDb3VudCwgcmFuZ2VTdGFydCArIHJhbmdlQ291bnQsIGdyb3VwU3RhcnQgKyBncm91cENvdW50ICkgLSAxO1xuXG5cdFx0Y29uc3QgZHJhd0NvdW50ID0gTWF0aC5tYXgoIDAsIGRyYXdFbmQgLSBkcmF3U3RhcnQgKyAxICk7XG5cblx0XHRpZiAoIGRyYXdDb3VudCA9PT0gMCApIHJldHVybjtcblxuXHRcdC8vXG5cblx0XHRpZiAoIG9iamVjdC5pc01lc2ggKSB7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlICkge1xuXG5cdFx0XHRcdHN0YXRlLnNldExpbmVXaWR0aCggbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoICogZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpICk7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoIDEgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKCA0ICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc0xpbmUgKSB7XG5cblx0XHRcdGxldCBsaW5lV2lkdGggPSBtYXRlcmlhbC5saW5ld2lkdGg7XG5cblx0XHRcdGlmICggbGluZVdpZHRoID09PSB1bmRlZmluZWQgKSBsaW5lV2lkdGggPSAxOyAvLyBOb3QgdXNpbmcgTGluZSpNYXRlcmlhbFxuXG5cdFx0XHRzdGF0ZS5zZXRMaW5lV2lkdGgoIGxpbmVXaWR0aCAqIGdldFRhcmdldFBpeGVsUmF0aW8oKSApO1xuXG5cdFx0XHRpZiAoIG9iamVjdC5pc0xpbmVTZWdtZW50cyApIHtcblxuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKCAxICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc0xpbmVMb29wICkge1xuXG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoIDIgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKCAzICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc1BvaW50cyApIHtcblxuXHRcdFx0cmVuZGVyZXIuc2V0TW9kZSggMCApO1xuXG5cdFx0fSBlbHNlIGlmICggb2JqZWN0LmlzU3ByaXRlICkge1xuXG5cdFx0XHRyZW5kZXJlci5zZXRNb2RlKCA0ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggKSB7XG5cblx0XHRcdHJlbmRlcmVyLnJlbmRlckluc3RhbmNlcyggZHJhd1N0YXJ0LCBkcmF3Q291bnQsIG9iamVjdC5jb3VudCApO1xuXG5cdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc3QgaW5zdGFuY2VDb3VudCA9IE1hdGgubWluKCBnZW9tZXRyeS5pbnN0YW5jZUNvdW50LCBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCApO1xuXG5cdFx0XHRyZW5kZXJlci5yZW5kZXJJbnN0YW5jZXMoIGRyYXdTdGFydCwgZHJhd0NvdW50LCBpbnN0YW5jZUNvdW50ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZW5kZXJlci5yZW5kZXIoIGRyYXdTdGFydCwgZHJhd0NvdW50ICk7XG5cblx0XHR9XG5cblx0fTtcblxuXHQvLyBDb21waWxlXG5cblx0dGhpcy5jb21waWxlID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0Y3VycmVudFJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVzLmdldCggc2NlbmUgKTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuaW5pdCgpO1xuXG5cdFx0cmVuZGVyU3RhdGVTdGFjay5wdXNoKCBjdXJyZW50UmVuZGVyU3RhdGUgKTtcblxuXHRcdHNjZW5lLnRyYXZlcnNlVmlzaWJsZSggZnVuY3Rpb24gKCBvYmplY3QgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0LmlzTGlnaHQgJiYgb2JqZWN0LmxheWVycy50ZXN0KCBjYW1lcmEubGF5ZXJzICkgKSB7XG5cblx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hMaWdodCggb2JqZWN0ICk7XG5cblx0XHRcdFx0aWYgKCBvYmplY3QuY2FzdFNoYWRvdyApIHtcblxuXHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5wdXNoU2hhZG93KCBvYmplY3QgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gKTtcblxuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0cyggX3RoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgKTtcblxuXHRcdHNjZW5lLnRyYXZlcnNlKCBmdW5jdGlvbiAoIG9iamVjdCApIHtcblxuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbWF0ZXJpYWwubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbDIgPSBtYXRlcmlhbFsgaSBdO1xuXG5cdFx0XHRcdFx0XHRnZXRQcm9ncmFtKCBtYXRlcmlhbDIsIHNjZW5lLCBvYmplY3QgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Z2V0UHJvZ3JhbSggbWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gKTtcblxuXHRcdHJlbmRlclN0YXRlU3RhY2sucG9wKCk7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlID0gbnVsbDtcblxuXHR9O1xuXG5cdC8vIEFuaW1hdGlvbiBMb29wXG5cblx0bGV0IG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IG51bGw7XG5cblx0ZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggdGltZSApIHtcblxuXHRcdGlmICggb25BbmltYXRpb25GcmFtZUNhbGxiYWNrICkgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrKCB0aW1lICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIG9uWFJTZXNzaW9uU3RhcnQoKSB7XG5cblx0XHRhbmltYXRpb24uc3RvcCgpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvblhSU2Vzc2lvbkVuZCgpIHtcblxuXHRcdGFuaW1hdGlvbi5zdGFydCgpO1xuXG5cdH1cblxuXHRjb25zdCBhbmltYXRpb24gPSBuZXcgV2ViR0xBbmltYXRpb24oKTtcblx0YW5pbWF0aW9uLnNldEFuaW1hdGlvbkxvb3AoIG9uQW5pbWF0aW9uRnJhbWUgKTtcblxuXHRpZiAoIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICkgYW5pbWF0aW9uLnNldENvbnRleHQoIHdpbmRvdyApO1xuXG5cdHRoaXMuc2V0QW5pbWF0aW9uTG9vcCA9IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7XG5cblx0XHRvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR4ci5zZXRBbmltYXRpb25Mb29wKCBjYWxsYmFjayApO1xuXG5cdFx0KCBjYWxsYmFjayA9PT0gbnVsbCApID8gYW5pbWF0aW9uLnN0b3AoKSA6IGFuaW1hdGlvbi5zdGFydCgpO1xuXG5cdH07XG5cblx0eHIuYWRkRXZlbnRMaXN0ZW5lciggJ3Nlc3Npb25zdGFydCcsIG9uWFJTZXNzaW9uU3RhcnQgKTtcblx0eHIuYWRkRXZlbnRMaXN0ZW5lciggJ3Nlc3Npb25lbmQnLCBvblhSU2Vzc2lvbkVuZCApO1xuXG5cdC8vIFJlbmRlcmluZ1xuXG5cdHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0aWYgKCBjYW1lcmEgIT09IHVuZGVmaW5lZCAmJiBjYW1lcmEuaXNDYW1lcmEgIT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBfaXNDb250ZXh0TG9zdCA9PT0gdHJ1ZSApIHJldHVybjtcblxuXHRcdC8vIHVwZGF0ZSBzY2VuZSBncmFwaFxuXG5cdFx0aWYgKCBzY2VuZS5hdXRvVXBkYXRlID09PSB0cnVlICkgc2NlbmUudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdC8vIHVwZGF0ZSBjYW1lcmEgbWF0cmljZXMgYW5kIGZydXN0dW1cblxuXHRcdGlmICggY2FtZXJhLnBhcmVudCA9PT0gbnVsbCApIGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0aWYgKCB4ci5lbmFibGVkID09PSB0cnVlICYmIHhyLmlzUHJlc2VudGluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0aWYgKCB4ci5jYW1lcmFBdXRvVXBkYXRlID09PSB0cnVlICkgeHIudXBkYXRlQ2FtZXJhKCBjYW1lcmEgKTtcblxuXHRcdFx0Y2FtZXJhID0geHIuZ2V0Q2FtZXJhKCk7IC8vIHVzZSBYUiBjYW1lcmEgZm9yIHJlbmRlcmluZ1xuXG5cdFx0fVxuXG5cdFx0Ly9cblx0XHRpZiAoIHNjZW5lLmlzU2NlbmUgPT09IHRydWUgKSBzY2VuZS5vbkJlZm9yZVJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIF9jdXJyZW50UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZXMuZ2V0KCBzY2VuZSwgcmVuZGVyU3RhdGVTdGFjay5sZW5ndGggKTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuaW5pdCgpO1xuXG5cdFx0cmVuZGVyU3RhdGVTdGFjay5wdXNoKCBjdXJyZW50UmVuZGVyU3RhdGUgKTtcblxuXHRcdF9wcm9qU2NyZWVuTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7XG5cdFx0X2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoIF9wcm9qU2NyZWVuTWF0cml4ICk7XG5cblx0XHRfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPSB0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO1xuXHRcdF9jbGlwcGluZ0VuYWJsZWQgPSBjbGlwcGluZy5pbml0KCB0aGlzLmNsaXBwaW5nUGxhbmVzLCBfbG9jYWxDbGlwcGluZ0VuYWJsZWQsIGNhbWVyYSApO1xuXG5cdFx0Y3VycmVudFJlbmRlckxpc3QgPSByZW5kZXJMaXN0cy5nZXQoIHNjZW5lLCByZW5kZXJMaXN0U3RhY2subGVuZ3RoICk7XG5cdFx0Y3VycmVudFJlbmRlckxpc3QuaW5pdCgpO1xuXG5cdFx0cmVuZGVyTGlzdFN0YWNrLnB1c2goIGN1cnJlbnRSZW5kZXJMaXN0ICk7XG5cblx0XHRwcm9qZWN0T2JqZWN0KCBzY2VuZSwgY2FtZXJhLCAwLCBfdGhpcy5zb3J0T2JqZWN0cyApO1xuXG5cdFx0Y3VycmVudFJlbmRlckxpc3QuZmluaXNoKCk7XG5cblx0XHRpZiAoIF90aGlzLnNvcnRPYmplY3RzID09PSB0cnVlICkge1xuXG5cdFx0XHRjdXJyZW50UmVuZGVyTGlzdC5zb3J0KCBfb3BhcXVlU29ydCwgX3RyYW5zcGFyZW50U29ydCApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGlmICggX2NsaXBwaW5nRW5hYmxlZCA9PT0gdHJ1ZSApIGNsaXBwaW5nLmJlZ2luU2hhZG93cygpO1xuXG5cdFx0Y29uc3Qgc2hhZG93c0FycmF5ID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLnNoYWRvd3NBcnJheTtcblxuXHRcdHNoYWRvd01hcC5yZW5kZXIoIHNoYWRvd3NBcnJheSwgc2NlbmUsIGNhbWVyYSApO1xuXG5cdFx0aWYgKCBfY2xpcHBpbmdFbmFibGVkID09PSB0cnVlICkgY2xpcHBpbmcuZW5kU2hhZG93cygpO1xuXG5cdFx0Ly9cblxuXHRcdGlmICggdGhpcy5pbmZvLmF1dG9SZXNldCA9PT0gdHJ1ZSApIHRoaXMuaW5mby5yZXNldCgpO1xuXG5cdFx0Ly9cblxuXHRcdGJhY2tncm91bmQucmVuZGVyKCBjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUgKTtcblxuXHRcdC8vIHJlbmRlciBzY2VuZVxuXG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLnNldHVwTGlnaHRzKCBfdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyApO1xuXG5cdFx0aWYgKCBjYW1lcmEuaXNBcnJheUNhbWVyYSApIHtcblxuXHRcdFx0Y29uc3QgY2FtZXJhcyA9IGNhbWVyYS5jYW1lcmFzO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjYW1lcmFzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgY2FtZXJhMiA9IGNhbWVyYXNbIGkgXTtcblxuXHRcdFx0XHRyZW5kZXJTY2VuZSggY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEyLCBjYW1lcmEyLnZpZXdwb3J0ICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJlbmRlclNjZW5lKCBjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYSApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGlmICggX2N1cnJlbnRSZW5kZXJUYXJnZXQgIT09IG51bGwgKSB7XG5cblx0XHRcdC8vIHJlc29sdmUgbXVsdGlzYW1wbGUgcmVuZGVyYnVmZmVycyB0byBhIHNpbmdsZS1zYW1wbGUgdGV4dHVyZSBpZiBuZWNlc3NhcnlcblxuXHRcdFx0dGV4dHVyZXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoIF9jdXJyZW50UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdC8vIEdlbmVyYXRlIG1pcG1hcCBpZiB3ZSdyZSB1c2luZyBhbnkga2luZCBvZiBtaXBtYXAgZmlsdGVyaW5nXG5cblx0XHRcdHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCggX2N1cnJlbnRSZW5kZXJUYXJnZXQgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpZiAoIHNjZW5lLmlzU2NlbmUgPT09IHRydWUgKSBzY2VuZS5vbkFmdGVyUmVuZGVyKCBfdGhpcywgc2NlbmUsIGNhbWVyYSApO1xuXG5cdFx0Ly8gRW5zdXJlIGRlcHRoIGJ1ZmZlciB3cml0aW5nIGlzIGVuYWJsZWQgc28gaXQgY2FuIGJlIGNsZWFyZWQgb24gbmV4dCByZW5kZXJcblxuXHRcdHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCggdHJ1ZSApO1xuXHRcdHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayggdHJ1ZSApO1xuXHRcdHN0YXRlLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayggdHJ1ZSApO1xuXG5cdFx0c3RhdGUuc2V0UG9seWdvbk9mZnNldCggZmFsc2UgKTtcblxuXHRcdC8vIF9nbC5maW5pc2goKTtcblxuXHRcdGJpbmRpbmdTdGF0ZXMucmVzZXREZWZhdWx0U3RhdGUoKTtcblx0XHRfY3VycmVudE1hdGVyaWFsSWQgPSAtIDE7XG5cdFx0X2N1cnJlbnRDYW1lcmEgPSBudWxsO1xuXG5cdFx0cmVuZGVyU3RhdGVTdGFjay5wb3AoKTtcblxuXHRcdGlmICggcmVuZGVyU3RhdGVTdGFjay5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZVN0YWNrWyByZW5kZXJTdGF0ZVN0YWNrLmxlbmd0aCAtIDEgXTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IG51bGw7XG5cblx0XHR9XG5cblx0XHRyZW5kZXJMaXN0U3RhY2sucG9wKCk7XG5cblx0XHRpZiAoIHJlbmRlckxpc3RTdGFjay5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRjdXJyZW50UmVuZGVyTGlzdCA9IHJlbmRlckxpc3RTdGFja1sgcmVuZGVyTGlzdFN0YWNrLmxlbmd0aCAtIDEgXTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0ID0gbnVsbDtcblxuXHRcdH1cblxuXHR9O1xuXG5cdGZ1bmN0aW9uIHByb2plY3RPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBncm91cE9yZGVyLCBzb3J0T2JqZWN0cyApIHtcblxuXHRcdGlmICggb2JqZWN0LnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdmlzaWJsZSA9IG9iamVjdC5sYXllcnMudGVzdCggY2FtZXJhLmxheWVycyApO1xuXG5cdFx0aWYgKCB2aXNpYmxlICkge1xuXG5cdFx0XHRpZiAoIG9iamVjdC5pc0dyb3VwICkge1xuXG5cdFx0XHRcdGdyb3VwT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc0xPRCApIHtcblxuXHRcdFx0XHRpZiAoIG9iamVjdC5hdXRvVXBkYXRlID09PSB0cnVlICkgb2JqZWN0LnVwZGF0ZSggY2FtZXJhICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc0xpZ2h0ICkge1xuXG5cdFx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5wdXNoTGlnaHQoIG9iamVjdCApO1xuXG5cdFx0XHRcdGlmICggb2JqZWN0LmNhc3RTaGFkb3cgKSB7XG5cblx0XHRcdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUucHVzaFNoYWRvdyggb2JqZWN0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNTcHJpdGUgKSB7XG5cblx0XHRcdFx0aWYgKCAhIG9iamVjdC5mcnVzdHVtQ3VsbGVkIHx8IF9mcnVzdHVtLmludGVyc2VjdHNTcHJpdGUoIG9iamVjdCApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBzb3J0T2JqZWN0cyApIHtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBvYmplY3QubWF0cml4V29ybGQgKVxuXHRcdFx0XHRcdFx0XHQuYXBwbHlNYXRyaXg0KCBfcHJvalNjcmVlbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3RzLnVwZGF0ZSggb2JqZWN0ICk7XG5cdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0XHRpZiAoIG1hdGVyaWFsLnZpc2libGUgKSB7XG5cblx0XHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnB1c2goIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBudWxsICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNNZXNoIHx8IG9iamVjdC5pc0xpbmUgfHwgb2JqZWN0LmlzUG9pbnRzICkge1xuXG5cdFx0XHRcdGlmICggb2JqZWN0LmlzU2tpbm5lZE1lc2ggKSB7XG5cblx0XHRcdFx0XHQvLyB1cGRhdGUgc2tlbGV0b24gb25seSBvbmNlIGluIGEgZnJhbWVcblxuXHRcdFx0XHRcdGlmICggb2JqZWN0LnNrZWxldG9uLmZyYW1lICE9PSBpbmZvLnJlbmRlci5mcmFtZSApIHtcblxuXHRcdFx0XHRcdFx0b2JqZWN0LnNrZWxldG9uLnVwZGF0ZSgpO1xuXHRcdFx0XHRcdFx0b2JqZWN0LnNrZWxldG9uLmZyYW1lID0gaW5mby5yZW5kZXIuZnJhbWU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggISBvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSApIHtcblxuXHRcdFx0XHRcdGlmICggc29ydE9iamVjdHMgKSB7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggb2JqZWN0Lm1hdHJpeFdvcmxkIClcblx0XHRcdFx0XHRcdFx0LmFwcGx5TWF0cml4NCggX3Byb2pTY3JlZW5NYXRyaXggKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0cy51cGRhdGUoIG9iamVjdCApO1xuXHRcdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggZ3JvdXBNYXRlcmlhbCAmJiBncm91cE1hdGVyaWFsLnZpc2libGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIGdlb21ldHJ5LCBncm91cE1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBncm91cCApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwudmlzaWJsZSApIHtcblxuXHRcdFx0XHRcdFx0Y3VycmVudFJlbmRlckxpc3QucHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIF92ZWN0b3IzLnosIG51bGwgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGNoaWxkcmVuID0gb2JqZWN0LmNoaWxkcmVuO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0cHJvamVjdE9iamVjdCggY2hpbGRyZW5bIGkgXSwgY2FtZXJhLCBncm91cE9yZGVyLCBzb3J0T2JqZWN0cyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJTY2VuZSggY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEsIHZpZXdwb3J0ICkge1xuXG5cdFx0Y29uc3Qgb3BhcXVlT2JqZWN0cyA9IGN1cnJlbnRSZW5kZXJMaXN0Lm9wYXF1ZTtcblx0XHRjb25zdCB0cmFuc21pc3NpdmVPYmplY3RzID0gY3VycmVudFJlbmRlckxpc3QudHJhbnNtaXNzaXZlO1xuXHRcdGNvbnN0IHRyYW5zcGFyZW50T2JqZWN0cyA9IGN1cnJlbnRSZW5kZXJMaXN0LnRyYW5zcGFyZW50O1xuXG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLnNldHVwTGlnaHRzVmlldyggY2FtZXJhICk7XG5cblx0XHRpZiAoIHRyYW5zbWlzc2l2ZU9iamVjdHMubGVuZ3RoID4gMCApIHJlbmRlclRyYW5zbWlzc2lvblBhc3MoIG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKTtcblxuXHRcdGlmICggdmlld3BvcnQgKSBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRWaWV3cG9ydC5jb3B5KCB2aWV3cG9ydCApICk7XG5cblx0XHRpZiAoIG9wYXF1ZU9iamVjdHMubGVuZ3RoID4gMCApIHJlbmRlck9iamVjdHMoIG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKTtcblx0XHRpZiAoIHRyYW5zbWlzc2l2ZU9iamVjdHMubGVuZ3RoID4gMCApIHJlbmRlck9iamVjdHMoIHRyYW5zbWlzc2l2ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKTtcblx0XHRpZiAoIHRyYW5zcGFyZW50T2JqZWN0cy5sZW5ndGggPiAwICkgcmVuZGVyT2JqZWN0cyggdHJhbnNwYXJlbnRPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlclRyYW5zbWlzc2lvblBhc3MoIG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRpZiAoIF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPT09IG51bGwgKSB7XG5cblx0XHRcdGNvbnN0IG5lZWRzQW50aWFsaWFzID0gX2FudGlhbGlhcyA9PT0gdHJ1ZSAmJiBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IHRydWU7XG5cdFx0XHRjb25zdCByZW5kZXJUYXJnZXRUeXBlID0gbmVlZHNBbnRpYWxpYXMgPyBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IDogV2ViR0xSZW5kZXJUYXJnZXQ7XG5cblx0XHRcdF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPSBuZXcgcmVuZGVyVGFyZ2V0VHlwZSggMTAyNCwgMTAyNCwge1xuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcHM6IHRydWUsXG5cdFx0XHRcdHR5cGU6IHV0aWxzLmNvbnZlcnQoIEhhbGZGbG9hdFR5cGUgKSAhPT0gbnVsbCA/IEhhbGZGbG9hdFR5cGUgOiBVbnNpZ25lZEJ5dGVUeXBlLFxuXHRcdFx0XHRtaW5GaWx0ZXI6IExpbmVhck1pcG1hcExpbmVhckZpbHRlcixcblx0XHRcdFx0bWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxuXHRcdFx0XHR3cmFwUzogQ2xhbXBUb0VkZ2VXcmFwcGluZyxcblx0XHRcdFx0d3JhcFQ6IENsYW1wVG9FZGdlV3JhcHBpbmcsXG5cdFx0XHRcdHVzZVJlbmRlclRvVGV4dHVyZTogZXh0ZW5zaW9ucy5oYXMoICdXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUnIClcblx0XHRcdH0gKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSBfdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRfdGhpcy5zZXRSZW5kZXJUYXJnZXQoIF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgKTtcblx0XHRfdGhpcy5jbGVhcigpO1xuXG5cdFx0Ly8gVHVybiBvZmYgdGhlIGZlYXR1cmVzIHdoaWNoIGNhbiBhZmZlY3QgdGhlIGZyYWcgY29sb3IgZm9yIG9wYXF1ZSBvYmplY3RzIHBhc3MuXG5cdFx0Ly8gT3RoZXJ3aXNlIHRoZXkgYXJlIGFwcGxpZWQgdHdpY2UgaW4gb3BhcXVlIG9iamVjdHMgcGFzcyBhbmQgdHJhbnNtaXNzaW9uIG9iamVjdHMgcGFzcy5cblx0XHRjb25zdCBjdXJyZW50VG9uZU1hcHBpbmcgPSBfdGhpcy50b25lTWFwcGluZztcblx0XHRfdGhpcy50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cblx0XHRyZW5kZXJPYmplY3RzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7XG5cblx0XHRfdGhpcy50b25lTWFwcGluZyA9IGN1cnJlbnRUb25lTWFwcGluZztcblxuXHRcdHRleHR1cmVzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICk7XG5cdFx0dGV4dHVyZXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRfdGhpcy5zZXRSZW5kZXJUYXJnZXQoIGN1cnJlbnRSZW5kZXJUYXJnZXQgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0cyggcmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYSApIHtcblxuXHRcdGNvbnN0IG92ZXJyaWRlTWF0ZXJpYWwgPSBzY2VuZS5pc1NjZW5lID09PSB0cnVlID8gc2NlbmUub3ZlcnJpZGVNYXRlcmlhbCA6IG51bGw7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSByZW5kZXJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHJlbmRlckl0ZW0gPSByZW5kZXJMaXN0WyBpIF07XG5cblx0XHRcdGNvbnN0IG9iamVjdCA9IHJlbmRlckl0ZW0ub2JqZWN0O1xuXHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSByZW5kZXJJdGVtLmdlb21ldHJ5O1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvdmVycmlkZU1hdGVyaWFsID09PSBudWxsID8gcmVuZGVySXRlbS5tYXRlcmlhbCA6IG92ZXJyaWRlTWF0ZXJpYWw7XG5cdFx0XHRjb25zdCBncm91cCA9IHJlbmRlckl0ZW0uZ3JvdXA7XG5cblx0XHRcdGlmICggb2JqZWN0LmxheWVycy50ZXN0KCBjYW1lcmEubGF5ZXJzICkgKSB7XG5cblx0XHRcdFx0cmVuZGVyT2JqZWN0KCBvYmplY3QsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJPYmplY3QoIG9iamVjdCwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCApIHtcblxuXHRcdG9iamVjdC5vbkJlZm9yZVJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKTtcblxuXHRcdG9iamVjdC5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cdFx0b2JqZWN0Lm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoIG9iamVjdC5tb2RlbFZpZXdNYXRyaXggKTtcblxuXHRcdG1hdGVyaWFsLm9uQmVmb3JlUmVuZGVyKCBfdGhpcywgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG9iamVjdCwgZ3JvdXAgKTtcblxuXHRcdGlmICggbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUgJiYgbWF0ZXJpYWwuc2lkZSA9PT0gRG91YmxlU2lkZSApIHtcblxuXHRcdFx0bWF0ZXJpYWwuc2lkZSA9IEJhY2tTaWRlO1xuXHRcdFx0bWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0X3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0KCBjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKTtcblxuXHRcdFx0bWF0ZXJpYWwuc2lkZSA9IEZyb250U2lkZTtcblx0XHRcdG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdF90aGlzLnJlbmRlckJ1ZmZlckRpcmVjdCggY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwICk7XG5cblx0XHRcdG1hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0KCBjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKTtcblxuXHRcdH1cblxuXHRcdG9iamVjdC5vbkFmdGVyUmVuZGVyKCBfdGhpcywgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtKCBtYXRlcmlhbCwgc2NlbmUsIG9iamVjdCApIHtcblxuXHRcdGlmICggc2NlbmUuaXNTY2VuZSAhPT0gdHJ1ZSApIHNjZW5lID0gX2VtcHR5U2NlbmU7IC8vIHNjZW5lIGNvdWxkIGJlIGEgTWVzaCwgTGluZSwgUG9pbnRzLCAuLi5cblxuXHRcdGNvbnN0IG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApO1xuXG5cdFx0Y29uc3QgbGlnaHRzID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLmxpZ2h0cztcblx0XHRjb25zdCBzaGFkb3dzQXJyYXkgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUuc2hhZG93c0FycmF5O1xuXG5cdFx0Y29uc3QgbGlnaHRzU3RhdGVWZXJzaW9uID0gbGlnaHRzLnN0YXRlLnZlcnNpb247XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gcHJvZ3JhbUNhY2hlLmdldFBhcmFtZXRlcnMoIG1hdGVyaWFsLCBsaWdodHMuc3RhdGUsIHNoYWRvd3NBcnJheSwgc2NlbmUsIG9iamVjdCApO1xuXHRcdGNvbnN0IHByb2dyYW1DYWNoZUtleSA9IHByb2dyYW1DYWNoZS5nZXRQcm9ncmFtQ2FjaGVLZXkoIHBhcmFtZXRlcnMgKTtcblxuXHRcdGxldCBwcm9ncmFtcyA9IG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtcztcblxuXHRcdC8vIGFsd2F5cyB1cGRhdGUgZW52aXJvbm1lbnQgYW5kIGZvZyAtIGNoYW5naW5nIHRoZXNlIHRyaWdnZXIgYW4gZ2V0UHJvZ3JhbSBjYWxsLCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ncmFtIGRvZXNuJ3QgY2hhbmdlXG5cblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuZW52aXJvbm1lbnQgPSBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gc2NlbmUuZW52aXJvbm1lbnQgOiBudWxsO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5mb2cgPSBzY2VuZS5mb2c7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmVudk1hcCA9ICggbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IGN1YmV1dm1hcHMgOiBjdWJlbWFwcyApLmdldCggbWF0ZXJpYWwuZW52TWFwIHx8IG1hdGVyaWFsUHJvcGVydGllcy5lbnZpcm9ubWVudCApO1xuXG5cdFx0aWYgKCBwcm9ncmFtcyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBuZXcgbWF0ZXJpYWxcblxuXHRcdFx0bWF0ZXJpYWwuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbk1hdGVyaWFsRGlzcG9zZSApO1xuXG5cdFx0XHRwcm9ncmFtcyA9IG5ldyBNYXAoKTtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtcyA9IHByb2dyYW1zO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHByb2dyYW0gPSBwcm9ncmFtcy5nZXQoIHByb2dyYW1DYWNoZUtleSApO1xuXG5cdFx0aWYgKCBwcm9ncmFtICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIGVhcmx5IG91dCBpZiBwcm9ncmFtIGFuZCBsaWdodCBzdGF0ZSBpcyBpZGVudGljYWxcblxuXHRcdFx0aWYgKCBtYXRlcmlhbFByb3BlcnRpZXMuY3VycmVudFByb2dyYW0gPT09IHByb2dyYW0gJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c1N0YXRlVmVyc2lvbiA9PT0gbGlnaHRzU3RhdGVWZXJzaW9uICkge1xuXG5cdFx0XHRcdHVwZGF0ZUNvbW1vbk1hdGVyaWFsUHJvcGVydGllcyggbWF0ZXJpYWwsIHBhcmFtZXRlcnMgKTtcblxuXHRcdFx0XHRyZXR1cm4gcHJvZ3JhbTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cGFyYW1ldGVycy51bmlmb3JtcyA9IHByb2dyYW1DYWNoZS5nZXRVbmlmb3JtcyggbWF0ZXJpYWwgKTtcblxuXHRcdFx0bWF0ZXJpYWwub25CdWlsZCggb2JqZWN0LCBwYXJhbWV0ZXJzLCBfdGhpcyApO1xuXG5cdFx0XHRtYXRlcmlhbC5vbkJlZm9yZUNvbXBpbGUoIHBhcmFtZXRlcnMsIF90aGlzICk7XG5cblx0XHRcdHByb2dyYW0gPSBwcm9ncmFtQ2FjaGUuYWNxdWlyZVByb2dyYW0oIHBhcmFtZXRlcnMsIHByb2dyYW1DYWNoZUtleSApO1xuXHRcdFx0cHJvZ3JhbXMuc2V0KCBwcm9ncmFtQ2FjaGVLZXksIHByb2dyYW0gKTtcblxuXHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zID0gcGFyYW1ldGVycy51bmlmb3JtcztcblxuXHRcdH1cblxuXHRcdGNvbnN0IHVuaWZvcm1zID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zO1xuXG5cdFx0aWYgKCAoICEgbWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCAmJiAhIG1hdGVyaWFsLmlzUmF3U2hhZGVyTWF0ZXJpYWwgKSB8fCBtYXRlcmlhbC5jbGlwcGluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dW5pZm9ybXMuY2xpcHBpbmdQbGFuZXMgPSBjbGlwcGluZy51bmlmb3JtO1xuXG5cdFx0fVxuXG5cdFx0dXBkYXRlQ29tbW9uTWF0ZXJpYWxQcm9wZXJ0aWVzKCBtYXRlcmlhbCwgcGFyYW1ldGVycyApO1xuXG5cdFx0Ly8gc3RvcmUgdGhlIGxpZ2h0IHNldHVwIGl0IHdhcyBjcmVhdGVkIGZvclxuXG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzID0gbWF0ZXJpYWxOZWVkc0xpZ2h0cyggbWF0ZXJpYWwgKTtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzU3RhdGVWZXJzaW9uID0gbGlnaHRzU3RhdGVWZXJzaW9uO1xuXG5cdFx0aWYgKCBtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMgKSB7XG5cblx0XHRcdC8vIHdpcmUgdXAgdGhlIG1hdGVyaWFsIHRvIHRoaXMgcmVuZGVyZXIncyBsaWdodGluZyBzdGF0ZVxuXG5cdFx0XHR1bmlmb3Jtcy5hbWJpZW50TGlnaHRDb2xvci52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5hbWJpZW50O1xuXHRcdFx0dW5pZm9ybXMubGlnaHRQcm9iZS52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wcm9iZTtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsO1xuXHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWUgPSBsaWdodHMuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5zcG90TGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3Q7XG5cdFx0XHR1bmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5yZWN0QXJlYUxpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5yZWN0QXJlYTtcblx0XHRcdHVuaWZvcm1zLmx0Y18xLnZhbHVlID0gbGlnaHRzLnN0YXRlLnJlY3RBcmVhTFRDMTtcblx0XHRcdHVuaWZvcm1zLmx0Y18yLnZhbHVlID0gbGlnaHRzLnN0YXRlLnJlY3RBcmVhTFRDMjtcblx0XHRcdHVuaWZvcm1zLnBvaW50TGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50O1xuXHRcdFx0dW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3MudmFsdWUgPSBsaWdodHMuc3RhdGUucG9pbnRTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmhlbWk7XG5cblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWUgPSBsaWdodHMuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg7XG5cdFx0XHR1bmlmb3Jtcy5zcG90U2hhZG93TWFwLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3dNYXA7XG5cdFx0XHR1bmlmb3Jtcy5zcG90U2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXg7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludFNoYWRvd01hcDtcblx0XHRcdHVuaWZvcm1zLnBvaW50U2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50U2hhZG93TWF0cml4O1xuXHRcdFx0Ly8gVE9ETyAoYWJlbG5hdGlvbik6IGFkZCBhcmVhIGxpZ2h0cyBzaGFkb3cgaW5mbyB0byB1bmlmb3Jtc1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvZ1VuaWZvcm1zID0gcHJvZ3JhbS5nZXRVbmlmb3JtcygpO1xuXHRcdGNvbnN0IHVuaWZvcm1zTGlzdCA9IFdlYkdMVW5pZm9ybXMuc2VxV2l0aFZhbHVlKCBwcm9nVW5pZm9ybXMuc2VxLCB1bmlmb3JtcyApO1xuXG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0ID0gdW5pZm9ybXNMaXN0O1xuXG5cdFx0cmV0dXJuIHByb2dyYW07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZUNvbW1vbk1hdGVyaWFsUHJvcGVydGllcyggbWF0ZXJpYWwsIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTtcblxuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5vdXRwdXRFbmNvZGluZyA9IHBhcmFtZXRlcnMub3V0cHV0RW5jb2Rpbmc7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmluc3RhbmNpbmcgPSBwYXJhbWV0ZXJzLmluc3RhbmNpbmc7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnNraW5uaW5nID0gcGFyYW1ldGVycy5za2lubmluZztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzID0gcGFyYW1ldGVycy5tb3JwaFRhcmdldHM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoTm9ybWFscyA9IHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaFRhcmdldHNDb3VudCA9IHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzQ291bnQ7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzID0gcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubnVtSW50ZXJzZWN0aW9uID0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9uO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy52ZXJ0ZXhBbHBoYXMgPSBwYXJhbWV0ZXJzLnZlcnRleEFscGhhcztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudmVydGV4VGFuZ2VudHMgPSBwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy50b25lTWFwcGluZyA9IHBhcmFtZXRlcnMudG9uZU1hcHBpbmc7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFByb2dyYW0oIGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0ICkge1xuXG5cdFx0aWYgKCBzY2VuZS5pc1NjZW5lICE9PSB0cnVlICkgc2NlbmUgPSBfZW1wdHlTY2VuZTsgLy8gc2NlbmUgY291bGQgYmUgYSBNZXNoLCBMaW5lLCBQb2ludHMsIC4uLlxuXG5cdFx0dGV4dHVyZXMucmVzZXRUZXh0dXJlVW5pdHMoKTtcblxuXHRcdGNvbnN0IGZvZyA9IHNjZW5lLmZvZztcblx0XHRjb25zdCBlbnZpcm9ubWVudCA9IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBzY2VuZS5lbnZpcm9ubWVudCA6IG51bGw7XG5cdFx0Y29uc3QgZW5jb2RpbmcgPSAoIF9jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSBudWxsICkgPyBfdGhpcy5vdXRwdXRFbmNvZGluZyA6ICggX2N1cnJlbnRSZW5kZXJUYXJnZXQuaXNYUlJlbmRlclRhcmdldCA9PT0gdHJ1ZSA/IF9jdXJyZW50UmVuZGVyVGFyZ2V0LnRleHR1cmUuZW5jb2RpbmcgOiBMaW5lYXJFbmNvZGluZyApO1xuXHRcdGNvbnN0IGVudk1hcCA9ICggbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IGN1YmV1dm1hcHMgOiBjdWJlbWFwcyApLmdldCggbWF0ZXJpYWwuZW52TWFwIHx8IGVudmlyb25tZW50ICk7XG5cdFx0Y29uc3QgdmVydGV4QWxwaGFzID0gbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSB0cnVlICYmICEhIGdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSA9PT0gNDtcblx0XHRjb25zdCB2ZXJ0ZXhUYW5nZW50cyA9ICEhIG1hdGVyaWFsLm5vcm1hbE1hcCAmJiAhISBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQ7XG5cdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gISEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IG1vcnBoTm9ybWFscyA9ICEhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWw7XG5cdFx0Y29uc3QgbW9ycGhUYXJnZXRzQ291bnQgPSAhISBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24gPyBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoIDogMDtcblx0XHRjb25zdCB0b25lTWFwcGluZyA9IG1hdGVyaWFsLnRvbmVNYXBwZWQgPyBfdGhpcy50b25lTWFwcGluZyA6IE5vVG9uZU1hcHBpbmc7XG5cblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTtcblx0XHRjb25zdCBsaWdodHMgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUubGlnaHRzO1xuXG5cdFx0aWYgKCBfY2xpcHBpbmdFbmFibGVkID09PSB0cnVlICkge1xuXG5cdFx0XHRpZiAoIF9sb2NhbENsaXBwaW5nRW5hYmxlZCA9PT0gdHJ1ZSB8fCBjYW1lcmEgIT09IF9jdXJyZW50Q2FtZXJhICkge1xuXG5cdFx0XHRcdGNvbnN0IHVzZUNhY2hlID1cblx0XHRcdFx0XHRjYW1lcmEgPT09IF9jdXJyZW50Q2FtZXJhICYmXG5cdFx0XHRcdFx0bWF0ZXJpYWwuaWQgPT09IF9jdXJyZW50TWF0ZXJpYWxJZDtcblxuXHRcdFx0XHQvLyB3ZSBtaWdodCB3YW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHNvbWUgQ2xpcHBpbmdHcm91cFxuXHRcdFx0XHQvLyBvYmplY3QgaW5zdGVhZCBvZiB0aGUgbWF0ZXJpYWwsIG9uY2UgaXQgYmVjb21lcyBmZWFzaWJsZVxuXHRcdFx0XHQvLyAoIzg0NjUsICM4Mzc5KVxuXHRcdFx0XHRjbGlwcGluZy5zZXRTdGF0ZSggbWF0ZXJpYWwsIGNhbWVyYSwgdXNlQ2FjaGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGxldCBuZWVkc1Byb2dyYW1DaGFuZ2UgPSBmYWxzZTtcblxuXHRcdGlmICggbWF0ZXJpYWwudmVyc2lvbiA9PT0gbWF0ZXJpYWxQcm9wZXJ0aWVzLl9fdmVyc2lvbiApIHtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMgJiYgKCBtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzU3RhdGVWZXJzaW9uICE9PSBsaWdodHMuc3RhdGUudmVyc2lvbiApICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5vdXRwdXRFbmNvZGluZyAhPT0gZW5jb2RpbmcgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuaW5zdGFuY2luZyA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggISBvYmplY3QuaXNJbnN0YW5jZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5pbnN0YW5jaW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5za2lubmluZyA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggISBvYmplY3QuaXNTa2lubmVkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuc2tpbm5pbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLmVudk1hcCAhPT0gZW52TWFwICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmZvZyAmJiBtYXRlcmlhbFByb3BlcnRpZXMuZm9nICE9PSBmb2cgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0KCBtYXRlcmlhbFByb3BlcnRpZXMubnVtQ2xpcHBpbmdQbGFuZXMgIT09IGNsaXBwaW5nLm51bVBsYW5lcyB8fFxuXHRcdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMubnVtSW50ZXJzZWN0aW9uICE9PSBjbGlwcGluZy5udW1JbnRlcnNlY3Rpb24gKSApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbFByb3BlcnRpZXMudmVydGV4QWxwaGFzICE9PSB2ZXJ0ZXhBbHBoYXMgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleFRhbmdlbnRzICE9PSB2ZXJ0ZXhUYW5nZW50cyApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzICE9PSBtb3JwaFRhcmdldHMgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoTm9ybWFscyAhPT0gbW9ycGhOb3JtYWxzICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy50b25lTWFwcGluZyAhPT0gdG9uZU1hcHBpbmcgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSB0cnVlICYmIG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaFRhcmdldHNDb3VudCAhPT0gbW9ycGhUYXJnZXRzQ291bnQgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5fX3ZlcnNpb24gPSBtYXRlcmlhbC52ZXJzaW9uO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGxldCBwcm9ncmFtID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtO1xuXG5cdFx0aWYgKCBuZWVkc1Byb2dyYW1DaGFuZ2UgPT09IHRydWUgKSB7XG5cblx0XHRcdHByb2dyYW0gPSBnZXRQcm9ncmFtKCBtYXRlcmlhbCwgc2NlbmUsIG9iamVjdCApO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHJlZnJlc2hQcm9ncmFtID0gZmFsc2U7XG5cdFx0bGV0IHJlZnJlc2hNYXRlcmlhbCA9IGZhbHNlO1xuXHRcdGxldCByZWZyZXNoTGlnaHRzID0gZmFsc2U7XG5cblx0XHRjb25zdCBwX3VuaWZvcm1zID0gcHJvZ3JhbS5nZXRVbmlmb3JtcygpLFxuXHRcdFx0bV91bmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcztcblxuXHRcdGlmICggc3RhdGUudXNlUHJvZ3JhbSggcHJvZ3JhbS5wcm9ncmFtICkgKSB7XG5cblx0XHRcdHJlZnJlc2hQcm9ncmFtID0gdHJ1ZTtcblx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7XG5cdFx0XHRyZWZyZXNoTGlnaHRzID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuaWQgIT09IF9jdXJyZW50TWF0ZXJpYWxJZCApIHtcblxuXHRcdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gbWF0ZXJpYWwuaWQ7XG5cblx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlZnJlc2hQcm9ncmFtIHx8IF9jdXJyZW50Q2FtZXJhICE9PSBjYW1lcmEgKSB7XG5cblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3Byb2plY3Rpb25NYXRyaXgnLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRpZiAoIGNhcGFiaWxpdGllcy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICkge1xuXG5cdFx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2xvZ0RlcHRoQnVmRkMnLFxuXHRcdFx0XHRcdDIuMCAvICggTWF0aC5sb2coIGNhbWVyYS5mYXIgKyAxLjAgKSAvIE1hdGguTE4yICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIF9jdXJyZW50Q2FtZXJhICE9PSBjYW1lcmEgKSB7XG5cblx0XHRcdFx0X2N1cnJlbnRDYW1lcmEgPSBjYW1lcmE7XG5cblx0XHRcdFx0Ly8gbGlnaHRpbmcgdW5pZm9ybXMgZGVwZW5kIG9uIHRoZSBjYW1lcmEgc28gZW5mb3JjZSBhbiB1cGRhdGVcblx0XHRcdFx0Ly8gbm93LCBpbiBjYXNlIHRoaXMgbWF0ZXJpYWwgc3VwcG9ydHMgbGlnaHRzIC0gb3IgbGF0ZXIsIHdoZW5cblx0XHRcdFx0Ly8gdGhlIG5leHQgbWF0ZXJpYWwgdGhhdCBkb2VzIGdldHMgYWN0aXZhdGVkOlxuXG5cdFx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7XHRcdC8vIHNldCB0byB0cnVlIG9uIG1hdGVyaWFsIGNoYW5nZVxuXHRcdFx0XHRyZWZyZXNoTGlnaHRzID0gdHJ1ZTtcdFx0Ly8gcmVtYWlucyBzZXQgdW50aWwgdXBkYXRlIGRvbmVcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBsb2FkIG1hdGVyaWFsIHNwZWNpZmljIHVuaWZvcm1zXG5cdFx0XHQvLyAoc2hhZGVyIG1hdGVyaWFsIGFsc28gZ2V0cyB0aGVtIGZvciB0aGUgc2FrZSBvZiBnZW5lcmljaXR5KVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5lbnZNYXAgKSB7XG5cblx0XHRcdFx0Y29uc3QgdUNhbVBvcyA9IHBfdW5pZm9ybXMubWFwLmNhbWVyYVBvc2l0aW9uO1xuXG5cdFx0XHRcdGlmICggdUNhbVBvcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0dUNhbVBvcy5zZXRWYWx1ZSggX2dsLFxuXHRcdFx0XHRcdFx0X3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjYW1lcmEubWF0cml4V29ybGQgKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCApIHtcblxuXHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdpc09ydGhvZ3JhcGhpYycsIGNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSA9PT0gdHJ1ZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzU2hhZG93TWF0ZXJpYWwgfHxcblx0XHRcdFx0b2JqZWN0LmlzU2tpbm5lZE1lc2ggKSB7XG5cblx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAndmlld01hdHJpeCcsIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gc2tpbm5pbmcgYW5kIG1vcnBoIHRhcmdldCB1bmlmb3JtcyBtdXN0IGJlIHNldCBldmVuIGlmIG1hdGVyaWFsIGRpZG4ndCBjaGFuZ2Vcblx0XHQvLyBhdXRvLXNldHRpbmcgb2YgdGV4dHVyZSB1bml0IGZvciBib25lIGFuZCBtb3JwaCB0ZXh0dXJlIG11c3QgZ28gYmVmb3JlIG90aGVyIHRleHR1cmVzXG5cdFx0Ly8gb3RoZXJ3aXNlIHRleHR1cmVzIHVzZWQgZm9yIHNraW5uaW5nIGFuZCBtb3JwaGluZyBjYW4gdGFrZSBvdmVyIHRleHR1cmUgdW5pdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIG1hdGVyaWFsIHRleHR1cmVzXG5cblx0XHRpZiAoIG9iamVjdC5pc1NraW5uZWRNZXNoICkge1xuXG5cdFx0XHRwX3VuaWZvcm1zLnNldE9wdGlvbmFsKCBfZ2wsIG9iamVjdCwgJ2JpbmRNYXRyaXgnICk7XG5cdFx0XHRwX3VuaWZvcm1zLnNldE9wdGlvbmFsKCBfZ2wsIG9iamVjdCwgJ2JpbmRNYXRyaXhJbnZlcnNlJyApO1xuXG5cdFx0XHRjb25zdCBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcblxuXHRcdFx0aWYgKCBza2VsZXRvbiApIHtcblxuXHRcdFx0XHRpZiAoIGNhcGFiaWxpdGllcy5mbG9hdFZlcnRleFRleHR1cmVzICkge1xuXG5cdFx0XHRcdFx0aWYgKCBza2VsZXRvbi5ib25lVGV4dHVyZSA9PT0gbnVsbCApIHNrZWxldG9uLmNvbXB1dGVCb25lVGV4dHVyZSgpO1xuXG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnYm9uZVRleHR1cmUnLCBza2VsZXRvbi5ib25lVGV4dHVyZSwgdGV4dHVyZXMgKTtcblx0XHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdib25lVGV4dHVyZVNpemUnLCBza2VsZXRvbi5ib25lVGV4dHVyZVNpemUgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBza2VsZXRvbiwgJ2JvbmVNYXRyaWNlcycgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggISEgZ2VvbWV0cnkgJiYgKCBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24gIT09IHVuZGVmaW5lZCB8fCBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsICE9PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0bW9ycGh0YXJnZXRzLnVwZGF0ZSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0gKTtcblxuXHRcdH1cblxuXG5cdFx0aWYgKCByZWZyZXNoTWF0ZXJpYWwgfHwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnJlY2VpdmVTaGFkb3cgIT09IG9iamVjdC5yZWNlaXZlU2hhZG93ICkge1xuXG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMucmVjZWl2ZVNoYWRvdyA9IG9iamVjdC5yZWNlaXZlU2hhZG93O1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAncmVjZWl2ZVNoYWRvdycsIG9iamVjdC5yZWNlaXZlU2hhZG93ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHJlZnJlc2hNYXRlcmlhbCApIHtcblxuXHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAndG9uZU1hcHBpbmdFeHBvc3VyZScsIF90aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmUgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMgKSB7XG5cblx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbWF0ZXJpYWwgcmVxdWlyZXMgbGlnaHRpbmcgaW5mb1xuXG5cdFx0XHRcdC8vIG5vdGU6IGFsbCBsaWdodGluZyB1bmlmb3JtcyBhcmUgYWx3YXlzIHNldCBjb3JyZWN0bHlcblx0XHRcdFx0Ly8gdGhleSBzaW1wbHkgcmVmZXJlbmNlIHRoZSByZW5kZXJlcidzIHN0YXRlIGZvciB0aGVpclxuXHRcdFx0XHQvLyB2YWx1ZXNcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gdXNlIHRoZSBjdXJyZW50IG1hdGVyaWFsJ3MgLm5lZWRzVXBkYXRlIGZsYWdzIHRvIHNldFxuXHRcdFx0XHQvLyB0aGUgR0wgc3RhdGUgd2hlbiByZXF1aXJlZFxuXG5cdFx0XHRcdG1hcmtVbmlmb3Jtc0xpZ2h0c05lZWRzVXBkYXRlKCBtX3VuaWZvcm1zLCByZWZyZXNoTGlnaHRzICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gcmVmcmVzaCB1bmlmb3JtcyBjb21tb24gdG8gc2V2ZXJhbCBtYXRlcmlhbHNcblxuXHRcdFx0aWYgKCBmb2cgJiYgbWF0ZXJpYWwuZm9nICkge1xuXG5cdFx0XHRcdG1hdGVyaWFscy5yZWZyZXNoRm9nVW5pZm9ybXMoIG1fdW5pZm9ybXMsIGZvZyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1hdGVyaWFscy5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyggbV91bmlmb3JtcywgbWF0ZXJpYWwsIF9waXhlbFJhdGlvLCBfaGVpZ2h0LCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFdlYkdMVW5pZm9ybXMudXBsb2FkKCBfZ2wsIG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3Jtc0xpc3QsIG1fdW5pZm9ybXMsIHRleHR1cmVzICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYgbWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRXZWJHTFVuaWZvcm1zLnVwbG9hZCggX2dsLCBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0LCBtX3VuaWZvcm1zLCB0ZXh0dXJlcyApO1xuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmlzU3ByaXRlTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2NlbnRlcicsIG9iamVjdC5jZW50ZXIgKTtcblxuXHRcdH1cblxuXHRcdC8vIGNvbW1vbiBtYXRyaWNlc1xuXG5cdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnbW9kZWxWaWV3TWF0cml4Jywgb2JqZWN0Lm1vZGVsVmlld01hdHJpeCApO1xuXHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ25vcm1hbE1hdHJpeCcsIG9iamVjdC5ub3JtYWxNYXRyaXggKTtcblx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdtb2RlbE1hdHJpeCcsIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0cmV0dXJuIHByb2dyYW07XG5cblx0fVxuXG5cdC8vIElmIHVuaWZvcm1zIGFyZSBtYXJrZWQgYXMgY2xlYW4sIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBsb2FkZWQgdG8gdGhlIEdQVS5cblxuXHRmdW5jdGlvbiBtYXJrVW5pZm9ybXNMaWdodHNOZWVkc1VwZGF0ZSggdW5pZm9ybXMsIHZhbHVlICkge1xuXG5cdFx0dW5pZm9ybXMuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5saWdodFByb2JlLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cblx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMucG9pbnRMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnNwb3RMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIG1hdGVyaWFsTmVlZHNMaWdodHMoIG1hdGVyaWFsICkge1xuXG5cdFx0cmV0dXJuIG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fFxuXHRcdFx0bWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc1NoYWRvd01hdGVyaWFsIHx8XG5cdFx0XHQoIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYgbWF0ZXJpYWwubGlnaHRzID09PSB0cnVlICk7XG5cblx0fVxuXG5cdHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2N1cnJlbnRBY3RpdmVDdWJlRmFjZTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbDtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jdXJyZW50UmVuZGVyVGFyZ2V0O1xuXG5cdH07XG5cblx0dGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyA9IGZ1bmN0aW9uICggcmVuZGVyVGFyZ2V0LCBjb2xvclRleHR1cmUsIGRlcHRoVGV4dHVyZSApIHtcblxuXHRcdHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlID0gY29sb3JUZXh0dXJlO1xuXHRcdHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICkuX193ZWJnbFRleHR1cmUgPSBkZXB0aFRleHR1cmU7XG5cblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzID0gdHJ1ZTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2hhc0V4dGVybmFsVGV4dHVyZXMgKSB7XG5cblx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlciA9IGRlcHRoVGV4dHVyZSA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoICEgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyICkge1xuXG5cdFx0XHRcdC8vIFRoZSBtdWx0aXNhbXBsZV9yZW5kZXJfdG9fdGV4dHVyZSBleHRlbnNpb24gZG9lc24ndCB3b3JrIHByb3Blcmx5IGlmIHRoZXJlXG5cdFx0XHRcdC8vIGFyZSBtaWRmcmFtZSBmbHVzaGVzIGFuZCBhbiBleHRlcm5hbCBkZXB0aCBidWZmZXIuIERpc2FibGUgdXNlIG9mIHRoZSBleHRlbnNpb24uXG5cdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ3JlbmRlci10by10ZXh0dXJlIGV4dGVuc2lvbiB3YXMgZGlzYWJsZWQgYmVjYXVzZSBhbiBleHRlcm5hbCB0ZXh0dXJlIHdhcyBwcm92aWRlZCcgKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciA9IHRydWU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fTtcblxuXHR0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKCByZW5kZXJUYXJnZXQsIGRlZmF1bHRGcmFtZWJ1ZmZlciApIHtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgPSBkZWZhdWx0RnJhbWVidWZmZXI7XG5cdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciA9IGRlZmF1bHRGcmFtZWJ1ZmZlciA9PT0gdW5kZWZpbmVkO1xuXG5cdH07XG5cblx0dGhpcy5zZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgYWN0aXZlQ3ViZUZhY2UgPSAwLCBhY3RpdmVNaXBtYXBMZXZlbCA9IDAgKSB7XG5cblx0XHRfY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblx0XHRfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gYWN0aXZlQ3ViZUZhY2U7XG5cdFx0X2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbCA9IGFjdGl2ZU1pcG1hcExldmVsO1xuXHRcdGxldCB1c2VEZWZhdWx0RnJhbWVidWZmZXIgPSB0cnVlO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlYmluZCB0aGUgZnJhbWVidWZmZXIuXG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIG51bGwgKTtcblx0XHRcdFx0dXNlRGVmYXVsdEZyYW1lYnVmZmVyID0gZmFsc2U7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZXMuc2V0dXBSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyApIHtcblxuXHRcdFx0XHQvLyBDb2xvciBhbmQgZGVwdGggdGV4dHVyZSBtdXN0IGJlIHJlYm91bmQgaW4gb3JkZXIgZm9yIHRoZSBzd2FwY2hhaW4gdG8gdXBkYXRlLlxuXHRcdFx0XHR0ZXh0dXJlcy5yZWJpbmRUZXh0dXJlcyggcmVuZGVyVGFyZ2V0LCBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LnRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSwgcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRsZXQgZnJhbWVidWZmZXIgPSBudWxsO1xuXHRcdGxldCBpc0N1YmUgPSBmYWxzZTtcblx0XHRsZXQgaXNSZW5kZXJUYXJnZXQzRCA9IGZhbHNlO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRCB8fCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5ICkge1xuXG5cdFx0XHRcdGlzUmVuZGVyVGFyZ2V0M0QgPSB0cnVlO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IF9fd2ViZ2xGcmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5fX3dlYmdsRnJhbWVidWZmZXI7XG5cblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRcdGZyYW1lYnVmZmVyID0gX193ZWJnbEZyYW1lYnVmZmVyWyBhY3RpdmVDdWJlRmFjZSBdO1xuXHRcdFx0XHRpc0N1YmUgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyICkge1xuXG5cdFx0XHRcdGZyYW1lYnVmZmVyID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRmcmFtZWJ1ZmZlciA9IF9fd2ViZ2xGcmFtZWJ1ZmZlcjtcblxuXHRcdFx0fVxuXG5cdFx0XHRfY3VycmVudFZpZXdwb3J0LmNvcHkoIHJlbmRlclRhcmdldC52aWV3cG9ydCApO1xuXHRcdFx0X2N1cnJlbnRTY2lzc29yLmNvcHkoIHJlbmRlclRhcmdldC5zY2lzc29yICk7XG5cdFx0XHRfY3VycmVudFNjaXNzb3JUZXN0ID0gcmVuZGVyVGFyZ2V0LnNjaXNzb3JUZXN0O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X2N1cnJlbnRWaWV3cG9ydC5jb3B5KCBfdmlld3BvcnQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0aW8gKS5mbG9vcigpO1xuXHRcdFx0X2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxvb3IoKTtcblx0XHRcdF9jdXJyZW50U2Npc3NvclRlc3QgPSBfc2Npc3NvclRlc3Q7XG5cblx0XHR9XG5cblx0XHRjb25zdCBmcmFtZWJ1ZmZlckJvdW5kID0gc3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgZnJhbWVidWZmZXIgKTtcblxuXHRcdGlmICggZnJhbWVidWZmZXJCb3VuZCAmJiBjYXBhYmlsaXRpZXMuZHJhd0J1ZmZlcnMgJiYgdXNlRGVmYXVsdEZyYW1lYnVmZmVyICkge1xuXG5cdFx0XHRzdGF0ZS5kcmF3QnVmZmVycyggcmVuZGVyVGFyZ2V0LCBmcmFtZWJ1ZmZlciApO1xuXG5cdFx0fVxuXG5cdFx0c3RhdGUudmlld3BvcnQoIF9jdXJyZW50Vmlld3BvcnQgKTtcblx0XHRzdGF0ZS5zY2lzc29yKCBfY3VycmVudFNjaXNzb3IgKTtcblx0XHRzdGF0ZS5zZXRTY2lzc29yVGVzdCggX2N1cnJlbnRTY2lzc29yVGVzdCApO1xuXG5cdFx0aWYgKCBpc0N1YmUgKSB7XG5cblx0XHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldC50ZXh0dXJlICk7XG5cdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIDM2MTYwLCAzNjA2NCwgMzQwNjkgKyBhY3RpdmVDdWJlRmFjZSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUsIGFjdGl2ZU1pcG1hcExldmVsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBpc1JlbmRlclRhcmdldDNEICkge1xuXG5cdFx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApO1xuXHRcdFx0Y29uc3QgbGF5ZXIgPSBhY3RpdmVDdWJlRmFjZSB8fCAwO1xuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKCAzNjE2MCwgMzYwNjQsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlLCBhY3RpdmVNaXBtYXBMZXZlbCB8fCAwLCBsYXllciApO1xuXG5cdFx0fVxuXG5cdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gLSAxOyAvLyByZXNldCBjdXJyZW50IG1hdGVyaWFsIHRvIGVuc3VyZSBjb3JyZWN0IHVuaWZvcm0gYmluZGluZ3NcblxuXHR9O1xuXG5cdHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscyA9IGZ1bmN0aW9uICggcmVuZGVyVGFyZ2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBidWZmZXIsIGFjdGl2ZUN1YmVGYWNlSW5kZXggKSB7XG5cblx0XHRpZiAoICEgKCByZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXQgKSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRsZXQgZnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICkuX193ZWJnbEZyYW1lYnVmZmVyO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgJiYgYWN0aXZlQ3ViZUZhY2VJbmRleCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyWyBhY3RpdmVDdWJlRmFjZUluZGV4IF07XG5cblx0XHR9XG5cblx0XHRpZiAoIGZyYW1lYnVmZmVyICkge1xuXG5cdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBmcmFtZWJ1ZmZlciApO1xuXG5cdFx0XHR0cnkge1xuXG5cdFx0XHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZUZvcm1hdCA9IHRleHR1cmUuZm9ybWF0O1xuXHRcdFx0XHRjb25zdCB0ZXh0dXJlVHlwZSA9IHRleHR1cmUudHlwZTtcblxuXHRcdFx0XHRpZiAoIHRleHR1cmVGb3JtYXQgIT09IFJHQkFGb3JtYXQgJiYgdXRpbHMuY29udmVydCggdGV4dHVyZUZvcm1hdCApICE9PSBfZ2wuZ2V0UGFyYW1ldGVyKCAzNTczOSApICkge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LicgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGhhbGZGbG9hdFN1cHBvcnRlZEJ5RXh0ID0gKCB0ZXh0dXJlVHlwZSA9PT0gSGFsZkZsb2F0VHlwZSApICYmICggZXh0ZW5zaW9ucy5oYXMoICdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnICkgfHwgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgJiYgZXh0ZW5zaW9ucy5oYXMoICdFWFRfY29sb3JfYnVmZmVyX2Zsb2F0JyApICkgKTtcblxuXHRcdFx0XHRpZiAoIHRleHR1cmVUeXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlICYmIHV0aWxzLmNvbnZlcnQoIHRleHR1cmVUeXBlICkgIT09IF9nbC5nZXRQYXJhbWV0ZXIoIDM1NzM4ICkgJiYgLy8gRWRnZSBhbmQgQ2hyb21lIE1hYyA8IDUyICgjOTUxMylcblx0XHRcdFx0XHQhICggdGV4dHVyZVR5cGUgPT09IEZsb2F0VHlwZSAmJiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2Zsb2F0JyApIHx8IGV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0JyApICkgKSAmJiAvLyBDaHJvbWUgTWFjID49IDUyIGFuZCBGaXJlZm94XG5cdFx0XHRcdFx0ISBoYWxmRmxvYXRTdXBwb3J0ZWRCeUV4dCApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuJyApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyggMzYxNjAgKSA9PT0gMzYwNTMgKSB7XG5cblx0XHRcdFx0XHQvLyB0aGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudCBlbnN1cmVzIHZhbGlkIHJlYWQgcmVxdWVzdHMgKG5vIG91dC1vZi1ib3VuZHMgcGl4ZWxzLCBzZWUgIzg2MDQpXG5cblx0XHRcdFx0XHRpZiAoICggeCA+PSAwICYmIHggPD0gKCByZW5kZXJUYXJnZXQud2lkdGggLSB3aWR0aCApICkgJiYgKCB5ID49IDAgJiYgeSA8PSAoIHJlbmRlclRhcmdldC5oZWlnaHQgLSBoZWlnaHQgKSApICkge1xuXG5cdFx0XHRcdFx0XHRfZ2wucmVhZFBpeGVscyggeCwgeSwgd2lkdGgsIGhlaWdodCwgdXRpbHMuY29udmVydCggdGV4dHVyZUZvcm1hdCApLCB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlVHlwZSApLCBidWZmZXIgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGZpbmFsbHkge1xuXG5cdFx0XHRcdC8vIHJlc3RvcmUgZnJhbWVidWZmZXIgb2YgY3VycmVudCByZW5kZXIgdGFyZ2V0IGlmIG5lY2Vzc2FyeVxuXG5cdFx0XHRcdGNvbnN0IGZyYW1lYnVmZmVyID0gKCBfY3VycmVudFJlbmRlclRhcmdldCAhPT0gbnVsbCApID8gcHJvcGVydGllcy5nZXQoIF9jdXJyZW50UmVuZGVyVGFyZ2V0ICkuX193ZWJnbEZyYW1lYnVmZmVyIDogbnVsbDtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgZnJhbWVidWZmZXIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH07XG5cblx0dGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmUgPSBmdW5jdGlvbiAoIHBvc2l0aW9uLCB0ZXh0dXJlLCBsZXZlbCA9IDAgKSB7XG5cblx0XHRpZiAoIHRleHR1cmUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgIT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGxldmVsU2NhbGUgPSBNYXRoLnBvdyggMiwgLSBsZXZlbCApO1xuXHRcdGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vciggdGV4dHVyZS5pbWFnZS53aWR0aCAqIGxldmVsU2NhbGUgKTtcblx0XHRjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKCB0ZXh0dXJlLmltYWdlLmhlaWdodCAqIGxldmVsU2NhbGUgKTtcblxuXHRcdHRleHR1cmVzLnNldFRleHR1cmUyRCggdGV4dHVyZSwgMCApO1xuXG5cdFx0X2dsLmNvcHlUZXhTdWJJbWFnZTJEKCAzNTUzLCBsZXZlbCwgMCwgMCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCApO1xuXG5cdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXG5cdH07XG5cblx0dGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZSA9IGZ1bmN0aW9uICggcG9zaXRpb24sIHNyY1RleHR1cmUsIGRzdFRleHR1cmUsIGxldmVsID0gMCApIHtcblxuXHRcdGNvbnN0IHdpZHRoID0gc3JjVGV4dHVyZS5pbWFnZS53aWR0aDtcblx0XHRjb25zdCBoZWlnaHQgPSBzcmNUZXh0dXJlLmltYWdlLmhlaWdodDtcblx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIGRzdFRleHR1cmUuZm9ybWF0ICk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCggZHN0VGV4dHVyZS50eXBlICk7XG5cblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIGRzdFRleHR1cmUsIDAgKTtcblxuXHRcdC8vIEFzIGFub3RoZXIgdGV4dHVyZSB1cGxvYWQgbWF5IGhhdmUgY2hhbmdlZCBwaXhlbFN0b3JlaVxuXHRcdC8vIHBhcmFtZXRlcnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGZvciB0aGUgZHN0VGV4dHVyZVxuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDAsIGRzdFRleHR1cmUuZmxpcFkgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQxLCBkc3RUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTcsIGRzdFRleHR1cmUudW5wYWNrQWxpZ25tZW50ICk7XG5cblx0XHRpZiAoIHNyY1RleHR1cmUuaXNEYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0X2dsLnRleFN1YkltYWdlMkQoIDM1NTMsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBzcmNUZXh0dXJlLmltYWdlLmRhdGEgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggc3JjVGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICkge1xuXG5cdFx0XHRcdF9nbC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCggMzU1MywgbGV2ZWwsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHNyY1RleHR1cmUubWlwbWFwc1sgMCBdLndpZHRoLCBzcmNUZXh0dXJlLm1pcG1hcHNbIDAgXS5oZWlnaHQsIGdsRm9ybWF0LCBzcmNUZXh0dXJlLm1pcG1hcHNbIDAgXS5kYXRhICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X2dsLnRleFN1YkltYWdlMkQoIDM1NTMsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBnbEZvcm1hdCwgZ2xUeXBlLCBzcmNUZXh0dXJlLmltYWdlICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIG1pcG1hcHMgb25seSB3aGVuIGNvcHlpbmcgbGV2ZWwgMFxuXHRcdGlmICggbGV2ZWwgPT09IDAgJiYgZHN0VGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgKSBfZ2wuZ2VuZXJhdGVNaXBtYXAoIDM1NTMgKTtcblxuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHR9O1xuXG5cdHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRCA9IGZ1bmN0aW9uICggc291cmNlQm94LCBwb3NpdGlvbiwgc3JjVGV4dHVyZSwgZHN0VGV4dHVyZSwgbGV2ZWwgPSAwICkge1xuXG5cdFx0aWYgKCBfdGhpcy5pc1dlYkdMMVJlbmRlcmVyICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgd2lkdGggPSBzb3VyY2VCb3gubWF4LnggLSBzb3VyY2VCb3gubWluLnggKyAxO1xuXHRcdGNvbnN0IGhlaWdodCA9IHNvdXJjZUJveC5tYXgueSAtIHNvdXJjZUJveC5taW4ueSArIDE7XG5cdFx0Y29uc3QgZGVwdGggPSBzb3VyY2VCb3gubWF4LnogLSBzb3VyY2VCb3gubWluLnogKyAxO1xuXHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggZHN0VGV4dHVyZS5mb3JtYXQgKTtcblx0XHRjb25zdCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCBkc3RUZXh0dXJlLnR5cGUgKTtcblx0XHRsZXQgZ2xUYXJnZXQ7XG5cblx0XHRpZiAoIGRzdFRleHR1cmUuaXNEYXRhVGV4dHVyZTNEICkge1xuXG5cdFx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlM0QoIGRzdFRleHR1cmUsIDAgKTtcblx0XHRcdGdsVGFyZ2V0ID0gMzI4Nzk7XG5cblx0XHR9IGVsc2UgaWYgKCBkc3RUZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5ICkge1xuXG5cdFx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkRBcnJheSggZHN0VGV4dHVyZSwgMCApO1xuXHRcdFx0Z2xUYXJnZXQgPSAzNTg2NjtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MCwgZHN0VGV4dHVyZS5mbGlwWSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDEsIGRzdFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNywgZHN0VGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgKTtcblxuXHRcdGNvbnN0IHVucGFja1Jvd0xlbiA9IF9nbC5nZXRQYXJhbWV0ZXIoIDMzMTQgKTtcblx0XHRjb25zdCB1bnBhY2tJbWFnZUhlaWdodCA9IF9nbC5nZXRQYXJhbWV0ZXIoIDMyODc4ICk7XG5cdFx0Y29uc3QgdW5wYWNrU2tpcFBpeGVscyA9IF9nbC5nZXRQYXJhbWV0ZXIoIDMzMTYgKTtcblx0XHRjb25zdCB1bnBhY2tTa2lwUm93cyA9IF9nbC5nZXRQYXJhbWV0ZXIoIDMzMTUgKTtcblx0XHRjb25zdCB1bnBhY2tTa2lwSW1hZ2VzID0gX2dsLmdldFBhcmFtZXRlciggMzI4NzcgKTtcblxuXHRcdGNvbnN0IGltYWdlID0gc3JjVGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlID8gc3JjVGV4dHVyZS5taXBtYXBzWyAwIF0gOiBzcmNUZXh0dXJlLmltYWdlO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE0LCBpbWFnZS53aWR0aCApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzI4NzgsIGltYWdlLmhlaWdodCApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNiwgc291cmNlQm94Lm1pbi54ICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE1LCBzb3VyY2VCb3gubWluLnkgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMyODc3LCBzb3VyY2VCb3gubWluLnogKTtcblxuXHRcdGlmICggc3JjVGV4dHVyZS5pc0RhdGFUZXh0dXJlIHx8IHNyY1RleHR1cmUuaXNEYXRhVGV4dHVyZTNEICkge1xuXG5cdFx0XHRfZ2wudGV4U3ViSW1hZ2UzRCggZ2xUYXJnZXQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBzcmNUZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuJyApO1xuXHRcdFx0XHRfZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoIGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBpbWFnZS5kYXRhICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X2dsLnRleFN1YkltYWdlM0QoIGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNCwgdW5wYWNrUm93TGVuICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMjg3OCwgdW5wYWNrSW1hZ2VIZWlnaHQgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTYsIHVucGFja1NraXBQaXhlbHMgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTUsIHVucGFja1NraXBSb3dzICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMjg3NywgdW5wYWNrU2tpcEltYWdlcyApO1xuXG5cdFx0Ly8gR2VuZXJhdGUgbWlwbWFwcyBvbmx5IHdoZW4gY29weWluZyBsZXZlbCAwXG5cdFx0aWYgKCBsZXZlbCA9PT0gMCAmJiBkc3RUZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyApIF9nbC5nZW5lcmF0ZU1pcG1hcCggZ2xUYXJnZXQgKTtcblxuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHR9O1xuXG5cdHRoaXMuaW5pdFRleHR1cmUgPSBmdW5jdGlvbiAoIHRleHR1cmUgKSB7XG5cblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIHRleHR1cmUsIDAgKTtcblxuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHR9O1xuXG5cdHRoaXMucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdF9jdXJyZW50QWN0aXZlQ3ViZUZhY2UgPSAwO1xuXHRcdF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWwgPSAwO1xuXHRcdF9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gbnVsbDtcblxuXHRcdHN0YXRlLnJlc2V0KCk7XG5cdFx0YmluZGluZ1N0YXRlcy5yZXNldCgpO1xuXG5cdH07XG5cblx0aWYgKCB0eXBlb2YgX19USFJFRV9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyApIHtcblxuXHRcdF9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICdvYnNlcnZlJywgeyBkZXRhaWw6IHRoaXMgfSApICk7XG5cblx0fVxuXG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlciA9IHRydWU7XG5cbmNsYXNzIFdlYkdMMVJlbmRlcmVyIGV4dGVuZHMgV2ViR0xSZW5kZXJlciB7fVxuXG5XZWJHTDFSZW5kZXJlci5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlciA9IHRydWU7XG5cbmNsYXNzIEZvZ0V4cDIge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgZGVuc2l0eSA9IDAuMDAwMjUgKSB7XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIGNvbG9yICk7XG5cdFx0dGhpcy5kZW5zaXR5ID0gZGVuc2l0eTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IEZvZ0V4cDIoIHRoaXMuY29sb3IsIHRoaXMuZGVuc2l0eSApO1xuXG5cdH1cblxuXHR0b0pTT04oIC8qIG1ldGEgKi8gKSB7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogJ0ZvZ0V4cDInLFxuXHRcdFx0Y29sb3I6IHRoaXMuY29sb3IuZ2V0SGV4KCksXG5cdFx0XHRkZW5zaXR5OiB0aGlzLmRlbnNpdHlcblx0XHR9O1xuXG5cdH1cblxufVxuXG5Gb2dFeHAyLnByb3RvdHlwZS5pc0ZvZ0V4cDIgPSB0cnVlO1xuXG5jbGFzcyBGb2cge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgbmVhciA9IDEsIGZhciA9IDEwMDAgKSB7XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIGNvbG9yICk7XG5cblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xuXHRcdHRoaXMuZmFyID0gZmFyO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgRm9nKCB0aGlzLmNvbG9yLCB0aGlzLm5lYXIsIHRoaXMuZmFyICk7XG5cblx0fVxuXG5cdHRvSlNPTiggLyogbWV0YSAqLyApIHtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiAnRm9nJyxcblx0XHRcdGNvbG9yOiB0aGlzLmNvbG9yLmdldEhleCgpLFxuXHRcdFx0bmVhcjogdGhpcy5uZWFyLFxuXHRcdFx0ZmFyOiB0aGlzLmZhclxuXHRcdH07XG5cblx0fVxuXG59XG5cbkZvZy5wcm90b3R5cGUuaXNGb2cgPSB0cnVlO1xuXG5jbGFzcyBTY2VuZSBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU2NlbmUnO1xuXG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0gbnVsbDtcblx0XHR0aGlzLmVudmlyb25tZW50ID0gbnVsbDtcblx0XHR0aGlzLmZvZyA9IG51bGw7XG5cblx0XHR0aGlzLm92ZXJyaWRlTWF0ZXJpYWwgPSBudWxsO1xuXG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTsgLy8gY2hlY2tlZCBieSB0aGUgcmVuZGVyZXJcblxuXHRcdGlmICggdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0XHRcdF9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICdvYnNlcnZlJywgeyBkZXRhaWw6IHRoaXMgfSApICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlLCByZWN1cnNpdmUgKTtcblxuXHRcdGlmICggc291cmNlLmJhY2tncm91bmQgIT09IG51bGwgKSB0aGlzLmJhY2tncm91bmQgPSBzb3VyY2UuYmFja2dyb3VuZC5jbG9uZSgpO1xuXHRcdGlmICggc291cmNlLmVudmlyb25tZW50ICE9PSBudWxsICkgdGhpcy5lbnZpcm9ubWVudCA9IHNvdXJjZS5lbnZpcm9ubWVudC5jbG9uZSgpO1xuXHRcdGlmICggc291cmNlLmZvZyAhPT0gbnVsbCApIHRoaXMuZm9nID0gc291cmNlLmZvZy5jbG9uZSgpO1xuXG5cdFx0aWYgKCBzb3VyY2Uub3ZlcnJpZGVNYXRlcmlhbCAhPT0gbnVsbCApIHRoaXMub3ZlcnJpZGVNYXRlcmlhbCA9IHNvdXJjZS5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCk7XG5cblx0XHR0aGlzLmF1dG9VcGRhdGUgPSBzb3VyY2UuYXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRpZiAoIHRoaXMuZm9nICE9PSBudWxsICkgZGF0YS5vYmplY3QuZm9nID0gdGhpcy5mb2cudG9KU09OKCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuU2NlbmUucHJvdG90eXBlLmlzU2NlbmUgPSB0cnVlO1xuXG5jbGFzcyBJbnRlcmxlYXZlZEJ1ZmZlciB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBzdHJpZGUgKSB7XG5cblx0XHR0aGlzLmFycmF5ID0gYXJyYXk7XG5cdFx0dGhpcy5zdHJpZGUgPSBzdHJpZGU7XG5cdFx0dGhpcy5jb3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyBzdHJpZGUgOiAwO1xuXG5cdFx0dGhpcy51c2FnZSA9IFN0YXRpY0RyYXdVc2FnZTtcblx0XHR0aGlzLnVwZGF0ZVJhbmdlID0geyBvZmZzZXQ6IDAsIGNvdW50OiAtIDEgfTtcblxuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHR9XG5cblx0b25VcGxvYWRDYWxsYmFjaygpIHt9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZlcnNpb24gKys7XG5cblx0fVxuXG5cdHNldFVzYWdlKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMudXNhZ2UgPSB2YWx1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLmFycmF5ID0gbmV3IHNvdXJjZS5hcnJheS5jb25zdHJ1Y3Rvciggc291cmNlLmFycmF5ICk7XG5cdFx0dGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDtcblx0XHR0aGlzLnN0cmlkZSA9IHNvdXJjZS5zdHJpZGU7XG5cdFx0dGhpcy51c2FnZSA9IHNvdXJjZS51c2FnZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5QXQoIGluZGV4MSwgYXR0cmlidXRlLCBpbmRleDIgKSB7XG5cblx0XHRpbmRleDEgKj0gdGhpcy5zdHJpZGU7XG5cdFx0aW5kZXgyICo9IGF0dHJpYnV0ZS5zdHJpZGU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLnN0cmlkZTsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuYXJyYXlbIGluZGV4MSArIGkgXSA9IGF0dHJpYnV0ZS5hcnJheVsgaW5kZXgyICsgaSBdO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldCggdmFsdWUsIG9mZnNldCA9IDAgKSB7XG5cblx0XHR0aGlzLmFycmF5LnNldCggdmFsdWUsIG9mZnNldCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCBkYXRhICkge1xuXG5cdFx0aWYgKCBkYXRhLmFycmF5QnVmZmVycyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRkYXRhLmFycmF5QnVmZmVycyA9IHt9O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhLmFycmF5QnVmZmVyc1sgdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRkYXRhLmFycmF5QnVmZmVyc1sgdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgXSA9IHRoaXMuYXJyYXkuc2xpY2UoIDAgKS5idWZmZXI7XG5cblx0XHR9XG5cblx0XHRjb25zdCBhcnJheSA9IG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKCBkYXRhLmFycmF5QnVmZmVyc1sgdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgXSApO1xuXG5cdFx0Y29uc3QgaWIgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvciggYXJyYXksIHRoaXMuc3RyaWRlICk7XG5cdFx0aWIuc2V0VXNhZ2UoIHRoaXMudXNhZ2UgKTtcblxuXHRcdHJldHVybiBpYjtcblxuXHR9XG5cblx0b25VcGxvYWQoIGNhbGxiYWNrICkge1xuXG5cdFx0dGhpcy5vblVwbG9hZENhbGxiYWNrID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCBkYXRhICkge1xuXG5cdFx0aWYgKCBkYXRhLmFycmF5QnVmZmVycyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRkYXRhLmFycmF5QnVmZmVycyA9IHt9O1xuXG5cdFx0fVxuXG5cdFx0Ly8gZ2VuZXJhdGUgVVVJRCBmb3IgYXJyYXkgYnVmZmVyIGlmIG5lY2Vzc2FyeVxuXG5cdFx0aWYgKCB0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhLmFycmF5QnVmZmVyc1sgdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRkYXRhLmFycmF5QnVmZmVyc1sgdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBuZXcgVWludDMyQXJyYXkoIHRoaXMuYXJyYXkuYnVmZmVyICkgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXVpZDogdGhpcy51dWlkLFxuXHRcdFx0YnVmZmVyOiB0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCxcblx0XHRcdHR5cGU6IHRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdHN0cmlkZTogdGhpcy5zdHJpZGVcblx0XHR9O1xuXG5cdH1cblxufVxuXG5JbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IkNiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBpbnRlcmxlYXZlZEJ1ZmZlciwgaXRlbVNpemUsIG9mZnNldCwgbm9ybWFsaXplZCA9IGZhbHNlICkge1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmRhdGEgPSBpbnRlcmxlYXZlZEJ1ZmZlcjtcblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cdFx0dGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG5cblx0XHR0aGlzLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkID09PSB0cnVlO1xuXG5cdH1cblxuXHRnZXQgY291bnQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhLmNvdW50O1xuXG5cdH1cblxuXHRnZXQgYXJyYXkoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5O1xuXG5cdH1cblxuXHRzZXQgbmVlZHNVcGRhdGUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5kYXRhLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuZGF0YS5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkNi54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDYueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ2LmFwcGx5TWF0cml4NCggbSApO1xuXG5cdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5Tm9ybWFsTWF0cml4KCBtICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkNi54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDYueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ2LmFwcGx5Tm9ybWFsTWF0cml4KCBtICk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKCBpLCBfdmVjdG9yJDYueCwgX3ZlY3RvciQ2LnksIF92ZWN0b3IkNi56ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKCBtICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkNi54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDYueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ2LnRyYW5zZm9ybURpcmVjdGlvbiggbSApO1xuXG5cdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFgoIGluZGV4LCB4ICkge1xuXG5cdFx0dGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCBdID0geDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRZKCBpbmRleCwgeSApIHtcblxuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAxIF0gPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFooIGluZGV4LCB6ICkge1xuXG5cdFx0dGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDIgXSA9IHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0VyggaW5kZXgsIHcgKSB7XG5cblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMyBdID0gdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRYKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0IF07XG5cblx0fVxuXG5cdGdldFkoIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAxIF07XG5cblx0fVxuXG5cdGdldFooIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAyIF07XG5cblx0fVxuXG5cdGdldFcoIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAzIF07XG5cblx0fVxuXG5cdHNldFhZKCBpbmRleCwgeCwgeSApIHtcblxuXHRcdGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMCBdID0geDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYWVooIGluZGV4LCB4LCB5LCB6ICkge1xuXG5cdFx0aW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblxuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAwIF0gPSB4O1xuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAxIF0gPSB5O1xuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAyIF0gPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFhZWlcoIGluZGV4LCB4LCB5LCB6LCB3ICkge1xuXG5cdFx0aW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblxuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAwIF0gPSB4O1xuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAxIF0gPSB5O1xuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAyIF0gPSB6O1xuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAzIF0gPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCBkYXRhICkge1xuXG5cdFx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUubG9nKCAnVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuJyApO1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gaSAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCB0aGlzLml0ZW1TaXplOyBqICsrICkge1xuXG5cdFx0XHRcdFx0YXJyYXkucHVzaCggdGhpcy5kYXRhLmFycmF5WyBpbmRleCArIGogXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZSggbmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoIGFycmF5ICksIHRoaXMuaXRlbVNpemUsIHRoaXMubm9ybWFsaXplZCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBkYXRhLmludGVybGVhdmVkQnVmZmVycyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID0ge307XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBkYXRhLmludGVybGVhdmVkQnVmZmVyc1sgdGhpcy5kYXRhLnV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzWyB0aGlzLmRhdGEudXVpZCBdID0gdGhpcy5kYXRhLmNsb25lKCBkYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSggZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbIHRoaXMuZGF0YS51dWlkIF0sIHRoaXMuaXRlbVNpemUsIHRoaXMub2Zmc2V0LCB0aGlzLm5vcm1hbGl6ZWQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dG9KU09OKCBkYXRhICkge1xuXG5cdFx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUubG9nKCAnVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4nICk7XG5cblx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMuY291bnQ7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW5kZXggPSBpICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0O1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IHRoaXMuaXRlbVNpemU7IGogKysgKSB7XG5cblx0XHRcdFx0XHRhcnJheS5wdXNoKCB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgaiBdICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGRlaW50ZXJsZWF2ZSBkYXRhIGFuZCBzYXZlIGl0IGFzIGFuIG9yZGluYXJ5IGJ1ZmZlciBhdHRyaWJ1dGUgZm9yIG5vd1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpdGVtU2l6ZTogdGhpcy5pdGVtU2l6ZSxcblx0XHRcdFx0dHlwZTogdGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHRhcnJheTogYXJyYXksXG5cdFx0XHRcdG5vcm1hbGl6ZWQ6IHRoaXMubm9ybWFsaXplZFxuXHRcdFx0fTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHNhdmUgYXMgdHJ1ZSBpbnRlcmxhdmVkIGF0dHJpYnR1ZVxuXG5cdFx0XHRpZiAoIGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0ZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnMgPSB7fTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzWyB0aGlzLmRhdGEudXVpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0ZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbIHRoaXMuZGF0YS51dWlkIF0gPSB0aGlzLmRhdGEudG9KU09OKCBkYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTogdHJ1ZSxcblx0XHRcdFx0aXRlbVNpemU6IHRoaXMuaXRlbVNpemUsXG5cdFx0XHRcdGRhdGE6IHRoaXMuZGF0YS51dWlkLFxuXHRcdFx0XHRvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuXHRcdFx0XHRub3JtYWxpemVkOiB0aGlzLm5vcm1hbGl6ZWRcblx0XHRcdH07XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgcm90YXRpb246IDxmbG9hdD4sXG4gKiAgc2l6ZUF0dGVudWF0aW9uOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBTcHJpdGVNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU3ByaXRlTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5yb3RhdGlvbiA9IDA7XG5cblx0XHR0aGlzLnNpemVBdHRlbnVhdGlvbiA9IHRydWU7XG5cblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblxuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLnJvdGF0aW9uID0gc291cmNlLnJvdGF0aW9uO1xuXG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6ZUF0dGVudWF0aW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNwcml0ZU1hdGVyaWFsLnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsID0gdHJ1ZTtcblxubGV0IF9nZW9tZXRyeTtcblxuY29uc3QgX2ludGVyc2VjdFBvaW50ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3dvcmxkU2NhbGUgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbXZQb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2FsaWduZWRQb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcbmNvbnN0IF9yb3RhdGVkUG9zaXRpb24gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5jb25zdCBfdmlld1dvcmxkTWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfdkEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdkIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdkMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF91dkEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5jb25zdCBfdXZCID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMigpO1xuY29uc3QgX3V2QyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcblxuY2xhc3MgU3ByaXRlIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBtYXRlcmlhbCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU3ByaXRlJztcblxuXHRcdGlmICggX2dlb21ldHJ5ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdF9nZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0XHRjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KCBbXG5cdFx0XHRcdC0gMC41LCAtIDAuNSwgMCwgMCwgMCxcblx0XHRcdFx0MC41LCAtIDAuNSwgMCwgMSwgMCxcblx0XHRcdFx0MC41LCAwLjUsIDAsIDEsIDEsXG5cdFx0XHRcdC0gMC41LCAwLjUsIDAsIDAsIDFcblx0XHRcdF0gKTtcblxuXHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXIgPSBuZXcgSW50ZXJsZWF2ZWRCdWZmZXIoIGZsb2F0MzJBcnJheSwgNSApO1xuXG5cdFx0XHRfZ2VvbWV0cnkuc2V0SW5kZXgoIFsgMCwgMSwgMixcdDAsIDIsIDMgXSApO1xuXHRcdFx0X2dlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxlYXZlZEJ1ZmZlciwgMywgMCwgZmFsc2UgKSApO1xuXHRcdFx0X2dlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxlYXZlZEJ1ZmZlciwgMiwgMywgZmFsc2UgKSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5nZW9tZXRyeSA9IF9nZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gKCBtYXRlcmlhbCAhPT0gdW5kZWZpbmVkICkgPyBtYXRlcmlhbCA6IG5ldyBTcHJpdGVNYXRlcmlhbCgpO1xuXG5cdFx0dGhpcy5jZW50ZXIgPSBuZXcgVmVjdG9yMiggMC41LCAwLjUgKTtcblxuXHR9XG5cblx0cmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkge1xuXG5cdFx0aWYgKCByYXljYXN0ZXIuY2FtZXJhID09PSBudWxsICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU3ByaXRlOiBcIlJheWNhc3Rlci5jYW1lcmFcIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyApO1xuXG5cdFx0fVxuXG5cdFx0X3dvcmxkU2NhbGUuc2V0RnJvbU1hdHJpeFNjYWxlKCB0aGlzLm1hdHJpeFdvcmxkICk7XG5cblx0XHRfdmlld1dvcmxkTWF0cml4LmNvcHkoIHJheWNhc3Rlci5jYW1lcmEubWF0cml4V29ybGQgKTtcblx0XHR0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCByYXljYXN0ZXIuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdFx0X212UG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1vZGVsVmlld01hdHJpeCApO1xuXG5cdFx0aWYgKCByYXljYXN0ZXIuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEgJiYgdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb24gPT09IGZhbHNlICkge1xuXG5cdFx0XHRfd29ybGRTY2FsZS5tdWx0aXBseVNjYWxhciggLSBfbXZQb3NpdGlvbi56ICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCByb3RhdGlvbiA9IHRoaXMubWF0ZXJpYWwucm90YXRpb247XG5cdFx0bGV0IHNpbiwgY29zO1xuXG5cdFx0aWYgKCByb3RhdGlvbiAhPT0gMCApIHtcblxuXHRcdFx0Y29zID0gTWF0aC5jb3MoIHJvdGF0aW9uICk7XG5cdFx0XHRzaW4gPSBNYXRoLnNpbiggcm90YXRpb24gKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyO1xuXG5cdFx0dHJhbnNmb3JtVmVydGV4KCBfdkEuc2V0KCAtIDAuNSwgLSAwLjUsIDAgKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zICk7XG5cdFx0dHJhbnNmb3JtVmVydGV4KCBfdkIuc2V0KCAwLjUsIC0gMC41LCAwICksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyApO1xuXHRcdHRyYW5zZm9ybVZlcnRleCggX3ZDLnNldCggMC41LCAwLjUsIDAgKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zICk7XG5cblx0XHRfdXZBLnNldCggMCwgMCApO1xuXHRcdF91dkIuc2V0KCAxLCAwICk7XG5cdFx0X3V2Qy5zZXQoIDEsIDEgKTtcblxuXHRcdC8vIGNoZWNrIGZpcnN0IHRyaWFuZ2xlXG5cdFx0bGV0IGludGVyc2VjdCA9IHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoIF92QSwgX3ZCLCBfdkMsIGZhbHNlLCBfaW50ZXJzZWN0UG9pbnQgKTtcblxuXHRcdGlmICggaW50ZXJzZWN0ID09PSBudWxsICkge1xuXG5cdFx0XHQvLyBjaGVjayBzZWNvbmQgdHJpYW5nbGVcblx0XHRcdHRyYW5zZm9ybVZlcnRleCggX3ZCLnNldCggLSAwLjUsIDAuNSwgMCApLCBfbXZQb3NpdGlvbiwgY2VudGVyLCBfd29ybGRTY2FsZSwgc2luLCBjb3MgKTtcblx0XHRcdF91dkIuc2V0KCAwLCAxICk7XG5cblx0XHRcdGludGVyc2VjdCA9IHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoIF92QSwgX3ZDLCBfdkIsIGZhbHNlLCBfaW50ZXJzZWN0UG9pbnQgKTtcblx0XHRcdGlmICggaW50ZXJzZWN0ID09PSBudWxsICkge1xuXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBfaW50ZXJzZWN0UG9pbnQgKTtcblxuXHRcdGlmICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSByZXR1cm47XG5cblx0XHRpbnRlcnNlY3RzLnB1c2goIHtcblxuXHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0cG9pbnQ6IF9pbnRlcnNlY3RQb2ludC5jbG9uZSgpLFxuXHRcdFx0dXY6IFRyaWFuZ2xlLmdldFVWKCBfaW50ZXJzZWN0UG9pbnQsIF92QSwgX3ZCLCBfdkMsIF91dkEsIF91dkIsIF91dkMsIG5ldyBWZWN0b3IyKCkgKSxcblx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRvYmplY3Q6IHRoaXNcblxuXHRcdH0gKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHRpZiAoIHNvdXJjZS5jZW50ZXIgIT09IHVuZGVmaW5lZCApIHRoaXMuY2VudGVyLmNvcHkoIHNvdXJjZS5jZW50ZXIgKTtcblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuU3ByaXRlLnByb3RvdHlwZS5pc1Nwcml0ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVZlcnRleCggdmVydGV4UG9zaXRpb24sIG12UG9zaXRpb24sIGNlbnRlciwgc2NhbGUsIHNpbiwgY29zICkge1xuXG5cdC8vIGNvbXB1dGUgcG9zaXRpb24gaW4gY2FtZXJhIHNwYWNlXG5cdF9hbGlnbmVkUG9zaXRpb24uc3ViVmVjdG9ycyggdmVydGV4UG9zaXRpb24sIGNlbnRlciApLmFkZFNjYWxhciggMC41ICkubXVsdGlwbHkoIHNjYWxlICk7XG5cblx0Ly8gdG8gY2hlY2sgaWYgcm90YXRpb24gaXMgbm90IHplcm9cblx0aWYgKCBzaW4gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdF9yb3RhdGVkUG9zaXRpb24ueCA9ICggY29zICogX2FsaWduZWRQb3NpdGlvbi54ICkgLSAoIHNpbiAqIF9hbGlnbmVkUG9zaXRpb24ueSApO1xuXHRcdF9yb3RhdGVkUG9zaXRpb24ueSA9ICggc2luICogX2FsaWduZWRQb3NpdGlvbi54ICkgKyAoIGNvcyAqIF9hbGlnbmVkUG9zaXRpb24ueSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRfcm90YXRlZFBvc2l0aW9uLmNvcHkoIF9hbGlnbmVkUG9zaXRpb24gKTtcblxuXHR9XG5cblxuXHR2ZXJ0ZXhQb3NpdGlvbi5jb3B5KCBtdlBvc2l0aW9uICk7XG5cdHZlcnRleFBvc2l0aW9uLnggKz0gX3JvdGF0ZWRQb3NpdGlvbi54O1xuXHR2ZXJ0ZXhQb3NpdGlvbi55ICs9IF9yb3RhdGVkUG9zaXRpb24ueTtcblxuXHQvLyB0cmFuc2Zvcm0gdG8gd29ybGQgc3BhY2Vcblx0dmVydGV4UG9zaXRpb24uYXBwbHlNYXRyaXg0KCBfdmlld1dvcmxkTWF0cml4ICk7XG5cbn1cblxuY29uc3QgX3YxJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjIkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTE9EIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2N1cnJlbnRMZXZlbCA9IDA7XG5cblx0XHR0aGlzLnR5cGUgPSAnTE9EJztcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCB0aGlzLCB7XG5cdFx0XHRsZXZlbHM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IFtdXG5cdFx0XHR9LFxuXHRcdFx0aXNMT0Q6IHtcblx0XHRcdFx0dmFsdWU6IHRydWUsXG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlLCBmYWxzZSApO1xuXG5cdFx0Y29uc3QgbGV2ZWxzID0gc291cmNlLmxldmVscztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGxldmVscy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBsZXZlbCA9IGxldmVsc1sgaSBdO1xuXG5cdFx0XHR0aGlzLmFkZExldmVsKCBsZXZlbC5vYmplY3QuY2xvbmUoKSwgbGV2ZWwuZGlzdGFuY2UgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHNvdXJjZS5hdXRvVXBkYXRlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZExldmVsKCBvYmplY3QsIGRpc3RhbmNlID0gMCApIHtcblxuXHRcdGRpc3RhbmNlID0gTWF0aC5hYnMoIGRpc3RhbmNlICk7XG5cblx0XHRjb25zdCBsZXZlbHMgPSB0aGlzLmxldmVscztcblxuXHRcdGxldCBsO1xuXG5cdFx0Zm9yICggbCA9IDA7IGwgPCBsZXZlbHMubGVuZ3RoOyBsICsrICkge1xuXG5cdFx0XHRpZiAoIGRpc3RhbmNlIDwgbGV2ZWxzWyBsIF0uZGlzdGFuY2UgKSB7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGxldmVscy5zcGxpY2UoIGwsIDAsIHsgZGlzdGFuY2U6IGRpc3RhbmNlLCBvYmplY3Q6IG9iamVjdCB9ICk7XG5cblx0XHR0aGlzLmFkZCggb2JqZWN0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Q3VycmVudExldmVsKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2N1cnJlbnRMZXZlbDtcblxuXHR9XG5cblx0Z2V0T2JqZWN0Rm9yRGlzdGFuY2UoIGRpc3RhbmNlICkge1xuXG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cblx0XHRpZiAoIGxldmVscy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRsZXQgaSwgbDtcblxuXHRcdFx0Zm9yICggaSA9IDEsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGRpc3RhbmNlIDwgbGV2ZWxzWyBpIF0uZGlzdGFuY2UgKSB7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxldmVsc1sgaSAtIDEgXS5vYmplY3Q7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblxuXHR9XG5cblx0cmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkge1xuXG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cblx0XHRpZiAoIGxldmVscy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRfdjEkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubWF0cml4V29ybGQgKTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBfdjEkMiApO1xuXG5cdFx0XHR0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKCBkaXN0YW5jZSApLnJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR1cGRhdGUoIGNhbWVyYSApIHtcblxuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKCBsZXZlbHMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0X3YxJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjYW1lcmEubWF0cml4V29ybGQgKTtcblx0XHRcdF92MiQxLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IF92MSQyLmRpc3RhbmNlVG8oIF92MiQxICkgLyBjYW1lcmEuem9vbTtcblxuXHRcdFx0bGV2ZWxzWyAwIF0ub2JqZWN0LnZpc2libGUgPSB0cnVlO1xuXG5cdFx0XHRsZXQgaSwgbDtcblxuXHRcdFx0Zm9yICggaSA9IDEsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGRpc3RhbmNlID49IGxldmVsc1sgaSBdLmRpc3RhbmNlICkge1xuXG5cdFx0XHRcdFx0bGV2ZWxzWyBpIC0gMSBdLm9iamVjdC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV2ZWxzWyBpIF0ub2JqZWN0LnZpc2libGUgPSB0cnVlO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fY3VycmVudExldmVsID0gaSAtIDE7XG5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0bGV2ZWxzWyBpIF0ub2JqZWN0LnZpc2libGUgPSBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRpZiAoIHRoaXMuYXV0b1VwZGF0ZSA9PT0gZmFsc2UgKSBkYXRhLm9iamVjdC5hdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHRkYXRhLm9iamVjdC5sZXZlbHMgPSBbXTtcblxuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGxldmVsID0gbGV2ZWxzWyBpIF07XG5cblx0XHRcdGRhdGEub2JqZWN0LmxldmVscy5wdXNoKCB7XG5cdFx0XHRcdG9iamVjdDogbGV2ZWwub2JqZWN0LnV1aWQsXG5cdFx0XHRcdGRpc3RhbmNlOiBsZXZlbC5kaXN0YW5jZVxuXHRcdFx0fSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbmNvbnN0IF9iYXNlUG9zaXRpb24gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9za2luSW5kZXggPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3I0KCk7XG5jb25zdCBfc2tpbldlaWdodCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjQoKTtcblxuY29uc3QgX3ZlY3RvciQ1ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX21hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcblxuY2xhc3MgU2tpbm5lZE1lc2ggZXh0ZW5kcyBNZXNoIHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnksIG1hdGVyaWFsICkge1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1NraW5uZWRNZXNoJztcblxuXHRcdHRoaXMuYmluZE1vZGUgPSAnYXR0YWNoZWQnO1xuXHRcdHRoaXMuYmluZE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5iaW5kTWF0cml4SW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5iaW5kTW9kZSA9IHNvdXJjZS5iaW5kTW9kZTtcblx0XHR0aGlzLmJpbmRNYXRyaXguY29weSggc291cmNlLmJpbmRNYXRyaXggKTtcblx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoIHNvdXJjZS5iaW5kTWF0cml4SW52ZXJzZSApO1xuXG5cdFx0dGhpcy5za2VsZXRvbiA9IHNvdXJjZS5za2VsZXRvbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRiaW5kKCBza2VsZXRvbiwgYmluZE1hdHJpeCApIHtcblxuXHRcdHRoaXMuc2tlbGV0b24gPSBza2VsZXRvbjtcblxuXHRcdGlmICggYmluZE1hdHJpeCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7XG5cblx0XHRcdHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKTtcblxuXHRcdFx0YmluZE1hdHJpeCA9IHRoaXMubWF0cml4V29ybGQ7XG5cblx0XHR9XG5cblx0XHR0aGlzLmJpbmRNYXRyaXguY29weSggYmluZE1hdHJpeCApO1xuXHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSggYmluZE1hdHJpeCApLmludmVydCgpO1xuXG5cdH1cblxuXHRwb3NlKCkge1xuXG5cdFx0dGhpcy5za2VsZXRvbi5wb3NlKCk7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZVNraW5XZWlnaHRzKCkge1xuXG5cdFx0Y29uc3QgdmVjdG9yID0gbmV3IFZlY3RvcjQoKTtcblxuXHRcdGNvbnN0IHNraW5XZWlnaHQgPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNraW5XZWlnaHQuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHR2ZWN0b3IueCA9IHNraW5XZWlnaHQuZ2V0WCggaSApO1xuXHRcdFx0dmVjdG9yLnkgPSBza2luV2VpZ2h0LmdldFkoIGkgKTtcblx0XHRcdHZlY3Rvci56ID0gc2tpbldlaWdodC5nZXRaKCBpICk7XG5cdFx0XHR2ZWN0b3IudyA9IHNraW5XZWlnaHQuZ2V0VyggaSApO1xuXG5cdFx0XHRjb25zdCBzY2FsZSA9IDEuMCAvIHZlY3Rvci5tYW5oYXR0YW5MZW5ndGgoKTtcblxuXHRcdFx0aWYgKCBzY2FsZSAhPT0gSW5maW5pdHkgKSB7XG5cblx0XHRcdFx0dmVjdG9yLm11bHRpcGx5U2NhbGFyKCBzY2FsZSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHZlY3Rvci5zZXQoIDEsIDAsIDAsIDAgKTsgLy8gZG8gc29tZXRoaW5nIHJlYXNvbmFibGVcblxuXHRcdFx0fVxuXG5cdFx0XHRza2luV2VpZ2h0LnNldFhZWlcoIGksIHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnosIHZlY3Rvci53ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApIHtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdFx0aWYgKCB0aGlzLmJpbmRNb2RlID09PSAnYXR0YWNoZWQnICkge1xuXG5cdFx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoIHRoaXMubWF0cml4V29ybGQgKS5pbnZlcnQoKTtcblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuYmluZE1vZGUgPT09ICdkZXRhY2hlZCcgKSB7XG5cblx0XHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSggdGhpcy5iaW5kTWF0cml4ICkuaW52ZXJ0KCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAnICsgdGhpcy5iaW5kTW9kZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRib25lVHJhbnNmb3JtKCBpbmRleCwgdGFyZ2V0ICkge1xuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdF9za2luSW5kZXguZnJvbUJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luSW5kZXgsIGluZGV4ICk7XG5cdFx0X3NraW5XZWlnaHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0LCBpbmRleCApO1xuXG5cdFx0X2Jhc2VQb3NpdGlvbi5jb3B5KCB0YXJnZXQgKS5hcHBseU1hdHJpeDQoIHRoaXMuYmluZE1hdHJpeCApO1xuXG5cdFx0dGFyZ2V0LnNldCggMCwgMCwgMCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3Qgd2VpZ2h0ID0gX3NraW5XZWlnaHQuZ2V0Q29tcG9uZW50KCBpICk7XG5cblx0XHRcdGlmICggd2VpZ2h0ICE9PSAwICkge1xuXG5cdFx0XHRcdGNvbnN0IGJvbmVJbmRleCA9IF9za2luSW5kZXguZ2V0Q29tcG9uZW50KCBpICk7XG5cblx0XHRcdFx0X21hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBza2VsZXRvbi5ib25lc1sgYm9uZUluZGV4IF0ubWF0cml4V29ybGQsIHNrZWxldG9uLmJvbmVJbnZlcnNlc1sgYm9uZUluZGV4IF0gKTtcblxuXHRcdFx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBfdmVjdG9yJDUuY29weSggX2Jhc2VQb3NpdGlvbiApLmFwcGx5TWF0cml4NCggX21hdHJpeCApLCB3ZWlnaHQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldC5hcHBseU1hdHJpeDQoIHRoaXMuYmluZE1hdHJpeEludmVyc2UgKTtcblxuXHR9XG5cbn1cblxuU2tpbm5lZE1lc2gucHJvdG90eXBlLmlzU2tpbm5lZE1lc2ggPSB0cnVlO1xuXG5jbGFzcyBCb25lIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdCb25lJztcblxuXHR9XG5cbn1cblxuQm9uZS5wcm90b3R5cGUuaXNCb25lID0gdHJ1ZTtcblxuY2xhc3MgRGF0YVRleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggZGF0YSA9IG51bGwsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgZm9ybWF0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXIsIG1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29kaW5nICkge1xuXG5cdFx0c3VwZXIoIG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTtcblxuXHRcdHRoaXMuaW1hZ2UgPSB7IGRhdGE6IGRhdGEsIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyO1xuXG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7XG5cdFx0dGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxO1xuXG5cdH1cblxufVxuXG5EYXRhVGV4dHVyZS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZSA9IHRydWU7XG5cbmNvbnN0IF9vZmZzZXRNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfaWRlbnRpdHlNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5cbmNsYXNzIFNrZWxldG9uIHtcblxuXHRjb25zdHJ1Y3RvciggYm9uZXMgPSBbXSwgYm9uZUludmVyc2VzID0gW10gKSB7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdHRoaXMuYm9uZXMgPSBib25lcy5zbGljZSggMCApO1xuXHRcdHRoaXMuYm9uZUludmVyc2VzID0gYm9uZUludmVyc2VzO1xuXHRcdHRoaXMuYm9uZU1hdHJpY2VzID0gbnVsbDtcblxuXHRcdHRoaXMuYm9uZVRleHR1cmUgPSBudWxsO1xuXHRcdHRoaXMuYm9uZVRleHR1cmVTaXplID0gMDtcblxuXHRcdHRoaXMuZnJhbWUgPSAtIDE7XG5cblx0XHR0aGlzLmluaXQoKTtcblxuXHR9XG5cblx0aW5pdCgpIHtcblxuXHRcdGNvbnN0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRjb25zdCBib25lSW52ZXJzZXMgPSB0aGlzLmJvbmVJbnZlcnNlcztcblxuXHRcdHRoaXMuYm9uZU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheSggYm9uZXMubGVuZ3RoICogMTYgKTtcblxuXHRcdC8vIGNhbGN1bGF0ZSBpbnZlcnNlIGJvbmUgbWF0cmljZXMgaWYgbmVjZXNzYXJ5XG5cblx0XHRpZiAoIGJvbmVJbnZlcnNlcy5sZW5ndGggPT09IDAgKSB7XG5cblx0XHRcdHRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VcblxuXHRcdFx0aWYgKCBib25lcy5sZW5ndGggIT09IGJvbmVJbnZlcnNlcy5sZW5ndGggKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLicgKTtcblxuXHRcdFx0XHR0aGlzLmJvbmVJbnZlcnNlcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0dGhpcy5ib25lSW52ZXJzZXMucHVzaCggbmV3IE1hdHJpeDQoKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRjYWxjdWxhdGVJbnZlcnNlcygpIHtcblxuXHRcdHRoaXMuYm9uZUludmVyc2VzLmxlbmd0aCA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgaW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHRcdGlmICggdGhpcy5ib25lc1sgaSBdICkge1xuXG5cdFx0XHRcdGludmVyc2UuY29weSggdGhpcy5ib25lc1sgaSBdLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ib25lSW52ZXJzZXMucHVzaCggaW52ZXJzZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRwb3NlKCkge1xuXG5cdFx0Ly8gcmVjb3ZlciB0aGUgYmluZC10aW1lIHdvcmxkIG1hdHJpY2VzXG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZXNbIGkgXTtcblxuXHRcdFx0aWYgKCBib25lICkge1xuXG5cdFx0XHRcdGJvbmUubWF0cml4V29ybGQuY29weSggdGhpcy5ib25lSW52ZXJzZXNbIGkgXSApLmludmVydCgpO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBjb21wdXRlIHRoZSBsb2NhbCBtYXRyaWNlcywgcG9zaXRpb25zLCByb3RhdGlvbnMgYW5kIHNjYWxlc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmVzWyBpIF07XG5cblx0XHRcdGlmICggYm9uZSApIHtcblxuXHRcdFx0XHRpZiAoIGJvbmUucGFyZW50ICYmIGJvbmUucGFyZW50LmlzQm9uZSApIHtcblxuXHRcdFx0XHRcdGJvbmUubWF0cml4LmNvcHkoIGJvbmUucGFyZW50Lm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cdFx0XHRcdFx0Ym9uZS5tYXRyaXgubXVsdGlwbHkoIGJvbmUubWF0cml4V29ybGQgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ym9uZS5tYXRyaXguY29weSggYm9uZS5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRib25lLm1hdHJpeC5kZWNvbXBvc2UoIGJvbmUucG9zaXRpb24sIGJvbmUucXVhdGVybmlvbiwgYm9uZS5zY2FsZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblxuXHRcdGNvbnN0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRjb25zdCBib25lSW52ZXJzZXMgPSB0aGlzLmJvbmVJbnZlcnNlcztcblx0XHRjb25zdCBib25lTWF0cmljZXMgPSB0aGlzLmJvbmVNYXRyaWNlcztcblx0XHRjb25zdCBib25lVGV4dHVyZSA9IHRoaXMuYm9uZVRleHR1cmU7XG5cblx0XHQvLyBmbGF0dGVuIGJvbmUgbWF0cmljZXMgdG8gYXJyYXlcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Ly8gY29tcHV0ZSB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIHRoZSBvcmlnaW5hbCB0cmFuc2Zvcm1cblxuXHRcdFx0Y29uc3QgbWF0cml4ID0gYm9uZXNbIGkgXSA/IGJvbmVzWyBpIF0ubWF0cml4V29ybGQgOiBfaWRlbnRpdHlNYXRyaXg7XG5cblx0XHRcdF9vZmZzZXRNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggbWF0cml4LCBib25lSW52ZXJzZXNbIGkgXSApO1xuXHRcdFx0X29mZnNldE1hdHJpeC50b0FycmF5KCBib25lTWF0cmljZXMsIGkgKiAxNiApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBib25lVGV4dHVyZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0Ym9uZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgU2tlbGV0b24oIHRoaXMuYm9uZXMsIHRoaXMuYm9uZUludmVyc2VzICk7XG5cblx0fVxuXG5cdGNvbXB1dGVCb25lVGV4dHVyZSgpIHtcblxuXHRcdC8vIGxheW91dCAoMSBtYXRyaXggPSA0IHBpeGVscylcblx0XHQvLyAgICAgIFJHQkEgUkdCQSBSR0JBIFJHQkEgKD0+IGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjMsIGNvbHVtbjQpXG5cdFx0Ly8gIHdpdGggIDh4OCAgcGl4ZWwgdGV4dHVyZSBtYXggICAxNiBib25lcyAqIDQgcGl4ZWxzID0gICg4ICogOClcblx0XHQvLyAgICAgICAxNngxNiBwaXhlbCB0ZXh0dXJlIG1heCAgIDY0IGJvbmVzICogNCBwaXhlbHMgPSAoMTYgKiAxNilcblx0XHQvLyAgICAgICAzMngzMiBwaXhlbCB0ZXh0dXJlIG1heCAgMjU2IGJvbmVzICogNCBwaXhlbHMgPSAoMzIgKiAzMilcblx0XHQvLyAgICAgICA2NHg2NCBwaXhlbCB0ZXh0dXJlIG1heCAxMDI0IGJvbmVzICogNCBwaXhlbHMgPSAoNjQgKiA2NClcblxuXHRcdGxldCBzaXplID0gTWF0aC5zcXJ0KCB0aGlzLmJvbmVzLmxlbmd0aCAqIDQgKTsgLy8gNCBwaXhlbHMgbmVlZGVkIGZvciAxIG1hdHJpeFxuXHRcdHNpemUgPSBjZWlsUG93ZXJPZlR3byggc2l6ZSApO1xuXHRcdHNpemUgPSBNYXRoLm1heCggc2l6ZSwgNCApO1xuXG5cdFx0Y29uc3QgYm9uZU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheSggc2l6ZSAqIHNpemUgKiA0ICk7IC8vIDQgZmxvYXRzIHBlciBSR0JBIHBpeGVsXG5cdFx0Ym9uZU1hdHJpY2VzLnNldCggdGhpcy5ib25lTWF0cmljZXMgKTsgLy8gY29weSBjdXJyZW50IHZhbHVlc1xuXG5cdFx0Y29uc3QgYm9uZVRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUoIGJvbmVNYXRyaWNlcywgc2l6ZSwgc2l6ZSwgUkdCQUZvcm1hdCwgRmxvYXRUeXBlICk7XG5cdFx0Ym9uZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0dGhpcy5ib25lTWF0cmljZXMgPSBib25lTWF0cmljZXM7XG5cdFx0dGhpcy5ib25lVGV4dHVyZSA9IGJvbmVUZXh0dXJlO1xuXHRcdHRoaXMuYm9uZVRleHR1cmVTaXplID0gc2l6ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRCb25lQnlOYW1lKCBuYW1lICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmVzWyBpIF07XG5cblx0XHRcdGlmICggYm9uZS5uYW1lID09PSBuYW1lICkge1xuXG5cdFx0XHRcdHJldHVybiBib25lO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdH1cblxuXHRkaXNwb3NlKCApIHtcblxuXHRcdGlmICggdGhpcy5ib25lVGV4dHVyZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCk7XG5cblx0XHRcdHRoaXMuYm9uZVRleHR1cmUgPSBudWxsO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiwgYm9uZXMgKSB7XG5cblx0XHR0aGlzLnV1aWQgPSBqc29uLnV1aWQ7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBqc29uLmJvbmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHV1aWQgPSBqc29uLmJvbmVzWyBpIF07XG5cdFx0XHRsZXQgYm9uZSA9IGJvbmVzWyB1dWlkIF07XG5cblx0XHRcdGlmICggYm9uZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlNrZWxldG9uOiBObyBib25lIGZvdW5kIHdpdGggVVVJRDonLCB1dWlkICk7XG5cdFx0XHRcdGJvbmUgPSBuZXcgQm9uZSgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYm9uZXMucHVzaCggYm9uZSApO1xuXHRcdFx0dGhpcy5ib25lSW52ZXJzZXMucHVzaCggbmV3IE1hdHJpeDQoKS5mcm9tQXJyYXkoIGpzb24uYm9uZUludmVyc2VzWyBpIF0gKSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0KCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ1NrZWxldG9uJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnU2tlbGV0b24udG9KU09OJ1xuXHRcdFx0fSxcblx0XHRcdGJvbmVzOiBbXSxcblx0XHRcdGJvbmVJbnZlcnNlczogW11cblx0XHR9O1xuXG5cdFx0ZGF0YS51dWlkID0gdGhpcy51dWlkO1xuXG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGNvbnN0IGJvbmVJbnZlcnNlcyA9IHRoaXMuYm9uZUludmVyc2VzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gYm9uZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzWyBpIF07XG5cdFx0XHRkYXRhLmJvbmVzLnB1c2goIGJvbmUudXVpZCApO1xuXG5cdFx0XHRjb25zdCBib25lSW52ZXJzZSA9IGJvbmVJbnZlcnNlc1sgaSBdO1xuXHRcdFx0ZGF0YS5ib25lSW52ZXJzZXMucHVzaCggYm9uZUludmVyc2UudG9BcnJheSgpICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkLCBtZXNoUGVyQXR0cmlidXRlID0gMSApIHtcblxuXHRcdGlmICggdHlwZW9mIG5vcm1hbGl6ZWQgPT09ICdudW1iZXInICkge1xuXG5cdFx0XHRtZXNoUGVyQXR0cmlidXRlID0gbm9ybWFsaXplZDtcblxuXHRcdFx0bm9ybWFsaXplZCA9IGZhbHNlO1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuJyApO1xuXG5cdFx0fVxuXG5cdFx0c3VwZXIoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gbWVzaFBlckF0dHJpYnV0ZTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLm1lc2hQZXJBdHRyaWJ1dGUgPSBzb3VyY2UubWVzaFBlckF0dHJpYnV0ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0XHRkYXRhLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuY29uc3QgX2luc3RhbmNlTG9jYWxNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfaW5zdGFuY2VXb3JsZE1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2luc3RhbmNlSW50ZXJzZWN0cyA9IFtdO1xuXG5jb25zdCBfbWVzaCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1lc2goKTtcblxuY2xhc3MgSW5zdGFuY2VkTWVzaCBleHRlbmRzIE1lc2gge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGNvdW50ICkge1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy5pbnN0YW5jZU1hdHJpeCA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIGNvdW50ICogMTYgKSwgMTYgKTtcblx0XHR0aGlzLmluc3RhbmNlQ29sb3IgPSBudWxsO1xuXG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xuXG5cdFx0dGhpcy5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5pbnN0YW5jZU1hdHJpeC5jb3B5KCBzb3VyY2UuaW5zdGFuY2VNYXRyaXggKTtcblxuXHRcdGlmICggc291cmNlLmluc3RhbmNlQ29sb3IgIT09IG51bGwgKSB0aGlzLmluc3RhbmNlQ29sb3IgPSBzb3VyY2UuaW5zdGFuY2VDb2xvci5jbG9uZSgpO1xuXG5cdFx0dGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRDb2xvckF0KCBpbmRleCwgY29sb3IgKSB7XG5cblx0XHRjb2xvci5mcm9tQXJyYXkoIHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwgaW5kZXggKiAzICk7XG5cblx0fVxuXG5cdGdldE1hdHJpeEF0KCBpbmRleCwgbWF0cml4ICkge1xuXG5cdFx0bWF0cml4LmZyb21BcnJheSggdGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwgaW5kZXggKiAxNiApO1xuXG5cdH1cblxuXHRyYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7XG5cblx0XHRjb25zdCBtYXRyaXhXb3JsZCA9IHRoaXMubWF0cml4V29ybGQ7XG5cdFx0Y29uc3QgcmF5Y2FzdFRpbWVzID0gdGhpcy5jb3VudDtcblxuXHRcdF9tZXNoLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRfbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cblx0XHRpZiAoIF9tZXNoLm1hdGVyaWFsID09PSB1bmRlZmluZWQgKSByZXR1cm47XG5cblx0XHRmb3IgKCBsZXQgaW5zdGFuY2VJZCA9IDA7IGluc3RhbmNlSWQgPCByYXljYXN0VGltZXM7IGluc3RhbmNlSWQgKysgKSB7XG5cblx0XHRcdC8vIGNhbGN1bGF0ZSB0aGUgd29ybGQgbWF0cml4IGZvciBlYWNoIGluc3RhbmNlXG5cblx0XHRcdHRoaXMuZ2V0TWF0cml4QXQoIGluc3RhbmNlSWQsIF9pbnN0YW5jZUxvY2FsTWF0cml4ICk7XG5cblx0XHRcdF9pbnN0YW5jZVdvcmxkTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIG1hdHJpeFdvcmxkLCBfaW5zdGFuY2VMb2NhbE1hdHJpeCApO1xuXG5cdFx0XHQvLyB0aGUgbWVzaCByZXByZXNlbnRzIHRoaXMgc2luZ2xlIGluc3RhbmNlXG5cblx0XHRcdF9tZXNoLm1hdHJpeFdvcmxkID0gX2luc3RhbmNlV29ybGRNYXRyaXg7XG5cblx0XHRcdF9tZXNoLnJheWNhc3QoIHJheWNhc3RlciwgX2luc3RhbmNlSW50ZXJzZWN0cyApO1xuXG5cdFx0XHQvLyBwcm9jZXNzIHRoZSByZXN1bHQgb2YgcmF5Y2FzdFxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBfaW5zdGFuY2VJbnRlcnNlY3RzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW50ZXJzZWN0ID0gX2luc3RhbmNlSW50ZXJzZWN0c1sgaSBdO1xuXHRcdFx0XHRpbnRlcnNlY3QuaW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XG5cdFx0XHRcdGludGVyc2VjdC5vYmplY3QgPSB0aGlzO1xuXHRcdFx0XHRpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9pbnN0YW5jZUludGVyc2VjdHMubGVuZ3RoID0gMDtcblxuXHRcdH1cblxuXHR9XG5cblx0c2V0Q29sb3JBdCggaW5kZXgsIGNvbG9yICkge1xuXG5cdFx0aWYgKCB0aGlzLmluc3RhbmNlQ29sb3IgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuaW5zdGFuY2VDb2xvciA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQgKiAzICksIDMgKTtcblxuXHRcdH1cblxuXHRcdGNvbG9yLnRvQXJyYXkoIHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwgaW5kZXggKiAzICk7XG5cblx0fVxuXG5cdHNldE1hdHJpeEF0KCBpbmRleCwgbWF0cml4ICkge1xuXG5cdFx0bWF0cml4LnRvQXJyYXkoIHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksIGluZGV4ICogMTYgKTtcblxuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7XG5cblx0fVxuXG59XG5cbkluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbGluZXdpZHRoOiA8ZmxvYXQ+LFxuICogIGxpbmVjYXA6IFwicm91bmRcIixcbiAqICBsaW5lam9pbjogXCJyb3VuZFwiXG4gKiB9XG4gKi9cblxuY2xhc3MgTGluZUJhc2ljTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xpbmVCYXNpY01hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7XG5cblx0XHR0aGlzLmxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy5saW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLmxpbmVqb2luID0gJ3JvdW5kJztcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXG5cdFx0dGhpcy5saW5ld2lkdGggPSBzb3VyY2UubGluZXdpZHRoO1xuXHRcdHRoaXMubGluZWNhcCA9IHNvdXJjZS5saW5lY2FwO1xuXHRcdHRoaXMubGluZWpvaW4gPSBzb3VyY2UubGluZWpvaW47XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTGluZUJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCBfc3RhcnQkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9lbmQkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9pbnZlcnNlTWF0cml4JDEgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcmF5JDEgPSAvKkBfX1BVUkVfXyovIG5ldyBSYXkoKTtcbmNvbnN0IF9zcGhlcmUkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFNwaGVyZSgpO1xuXG5jbGFzcyBMaW5lIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCgpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaW5lJztcblxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cblx0XHR0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb21wdXRlTGluZURpc3RhbmNlcygpIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Ly8gd2UgYXNzdW1lIG5vbi1pbmRleGVkIGdlb21ldHJ5XG5cblx0XHRcdGlmICggZ2VvbWV0cnkuaW5kZXggPT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBsaW5lRGlzdGFuY2VzID0gWyAwIF07XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAxLCBsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0X3N0YXJ0JDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgLSAxICk7XG5cdFx0XHRcdFx0X2VuZCQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICk7XG5cblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzWyBpIF0gPSBsaW5lRGlzdGFuY2VzWyBpIC0gMSBdO1xuXHRcdFx0XHRcdGxpbmVEaXN0YW5jZXNbIGkgXSArPSBfc3RhcnQkMS5kaXN0YW5jZVRvKCBfZW5kJDEgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnbGluZURpc3RhbmNlJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGxpbmVEaXN0YW5jZXMsIDEgKSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHJheWNhc3Rlci5wYXJhbXMuTGluZS50aHJlc2hvbGQ7XG5cdFx0Y29uc3QgZHJhd1JhbmdlID0gZ2VvbWV0cnkuZHJhd1JhbmdlO1xuXG5cdFx0Ly8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUgZGlzdGFuY2UgdG8gcmF5XG5cblx0XHRpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRfc3BoZXJlJDEuY29weSggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgKTtcblx0XHRfc3BoZXJlJDEuYXBwbHlNYXRyaXg0KCBtYXRyaXhXb3JsZCApO1xuXHRcdF9zcGhlcmUkMS5yYWRpdXMgKz0gdGhyZXNob2xkO1xuXG5cdFx0aWYgKCByYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoIF9zcGhlcmUkMSApID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdC8vXG5cblx0XHRfaW52ZXJzZU1hdHJpeCQxLmNvcHkoIG1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cdFx0X3JheSQxLmNvcHkoIHJheWNhc3Rlci5yYXkgKS5hcHBseU1hdHJpeDQoIF9pbnZlcnNlTWF0cml4JDEgKTtcblxuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkID0gdGhyZXNob2xkIC8gKCAoIHRoaXMuc2NhbGUueCArIHRoaXMuc2NhbGUueSArIHRoaXMuc2NhbGUueiApIC8gMyApO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXG5cdFx0Y29uc3QgdlN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB2RW5kID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBpbnRlclNlZ21lbnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IGludGVyUmF5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBzdGVwID0gdGhpcy5pc0xpbmVTZWdtZW50cyA/IDIgOiAxO1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zdCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKCBpbmRleC5jb3VudCwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gc3RhcnQsIGwgPSBlbmQgLSAxOyBpIDwgbDsgaSArPSBzdGVwICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoIGkgKTtcblx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXguZ2V0WCggaSArIDEgKTtcblxuXHRcdFx0XHRcdHZTdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgYSApO1xuXHRcdFx0XHRcdHZFbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGIgKTtcblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RTcSA9IF9yYXkkMS5kaXN0YW5jZVNxVG9TZWdtZW50KCB2U3RhcnQsIHZFbmQsIGludGVyUmF5LCBpbnRlclNlZ21lbnQgKTtcblxuXHRcdFx0XHRcdGlmICggZGlzdFNxID4gbG9jYWxUaHJlc2hvbGRTcSApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICk7IC8vTW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvblxuXG5cdFx0XHRcdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBpbnRlclJheSApO1xuXG5cdFx0XHRcdFx0aWYgKCBkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhciApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCB7XG5cblx0XHRcdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0XHRcdC8vIFdoYXQgZG8gd2Ugd2FudD8gaW50ZXJzZWN0aW9uIHBvaW50IG9uIHRoZSByYXkgb3Igb24gdGhlIHNlZ21lbnQ/P1xuXHRcdFx0XHRcdFx0Ly8gcG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksXG5cdFx0XHRcdFx0XHRwb2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICksXG5cdFx0XHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdFx0XHRmYWNlSW5kZXg6IG51bGwsXG5cdFx0XHRcdFx0XHRvYmplY3Q6IHRoaXNcblxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKCBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudCwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gc3RhcnQsIGwgPSBlbmQgLSAxOyBpIDwgbDsgaSArPSBzdGVwICkge1xuXG5cdFx0XHRcdFx0dlN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICk7XG5cdFx0XHRcdFx0dkVuZC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSArIDEgKTtcblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RTcSA9IF9yYXkkMS5kaXN0YW5jZVNxVG9TZWdtZW50KCB2U3RhcnQsIHZFbmQsIGludGVyUmF5LCBpbnRlclNlZ21lbnQgKTtcblxuXHRcdFx0XHRcdGlmICggZGlzdFNxID4gbG9jYWxUaHJlc2hvbGRTcSApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICk7IC8vTW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvblxuXG5cdFx0XHRcdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBpbnRlclJheSApO1xuXG5cdFx0XHRcdFx0aWYgKCBkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhciApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCB7XG5cblx0XHRcdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0XHRcdC8vIFdoYXQgZG8gd2Ugd2FudD8gaW50ZXJzZWN0aW9uIHBvaW50IG9uIHRoZSByYXkgb3Igb24gdGhlIHNlZ21lbnQ/P1xuXHRcdFx0XHRcdFx0Ly8gcG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksXG5cdFx0XHRcdFx0XHRwb2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICksXG5cdFx0XHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdFx0XHRmYWNlSW5kZXg6IG51bGwsXG5cdFx0XHRcdFx0XHRvYmplY3Q6IHRoaXNcblxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoIG1vcnBoQXR0cmlidXRlcyApO1xuXG5cdFx0XHRpZiAoIGtleXMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sga2V5c1sgMCBdIF07XG5cblx0XHRcdFx0aWYgKCBtb3JwaEF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBbXTtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IG0gPSAwLCBtbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lID0gbW9ycGhBdHRyaWJ1dGVbIG0gXS5uYW1lIHx8IFN0cmluZyggbSApO1xuXG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKCAwICk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVsgbmFtZSBdID0gbTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cztcblxuXHRcdFx0aWYgKCBtb3JwaFRhcmdldHMgIT09IHVuZGVmaW5lZCAmJiBtb3JwaFRhcmdldHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cbn1cblxuTGluZS5wcm90b3R5cGUuaXNMaW5lID0gdHJ1ZTtcblxuY29uc3QgX3N0YXJ0ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2VuZCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTGluZVNlZ21lbnRzIGV4dGVuZHMgTGluZSB7XG5cblx0Y29uc3RydWN0b3IoIGdlb21ldHJ5LCBtYXRlcmlhbCApIHtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaW5lU2VnbWVudHMnO1xuXG5cdH1cblxuXHRjb21wdXRlTGluZURpc3RhbmNlcygpIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Ly8gd2UgYXNzdW1lIG5vbi1pbmRleGVkIGdlb21ldHJ5XG5cblx0XHRcdGlmICggZ2VvbWV0cnkuaW5kZXggPT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBsaW5lRGlzdGFuY2VzID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpICs9IDIgKSB7XG5cblx0XHRcdFx0XHRfc3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKTtcblx0XHRcdFx0XHRfZW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMSApO1xuXG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1sgaSBdID0gKCBpID09PSAwICkgPyAwIDogbGluZURpc3RhbmNlc1sgaSAtIDEgXTtcblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzWyBpICsgMSBdID0gbGluZURpc3RhbmNlc1sgaSBdICsgX3N0YXJ0LmRpc3RhbmNlVG8oIF9lbmQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnbGluZURpc3RhbmNlJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGxpbmVEaXN0YW5jZXMsIDEgKSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBnZW9tZXRyeS5pc0dlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTGluZVNlZ21lbnRzLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cyA9IHRydWU7XG5cbmNsYXNzIExpbmVMb29wIGV4dGVuZHMgTGluZSB7XG5cblx0Y29uc3RydWN0b3IoIGdlb21ldHJ5LCBtYXRlcmlhbCApIHtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaW5lTG9vcCc7XG5cblx0fVxuXG59XG5cbkxpbmVMb29wLnByb3RvdHlwZS5pc0xpbmVMb29wID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgc2l6ZTogPGZsb2F0PixcbiAqICBzaXplQXR0ZW51YXRpb246IDxib29sPlxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBQb2ludHNNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRzTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5zaXplID0gMTtcblx0XHR0aGlzLnNpemVBdHRlbnVhdGlvbiA9IHRydWU7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5zaXplID0gc291cmNlLnNpemU7XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6ZUF0dGVudWF0aW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblBvaW50c01hdGVyaWFsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgX2ludmVyc2VNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcmF5ID0gLypAX19QVVJFX18qLyBuZXcgUmF5KCk7XG5jb25zdCBfc3BoZXJlID0gLypAX19QVVJFX18qLyBuZXcgU3BoZXJlKCk7XG5jb25zdCBfcG9zaXRpb24kMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgUG9pbnRzIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLCBtYXRlcmlhbCA9IG5ldyBQb2ludHNNYXRlcmlhbCgpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdQb2ludHMnO1xuXG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuXHRcdHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5tYXRlcmlhbCA9IHNvdXJjZS5tYXRlcmlhbDtcblx0XHR0aGlzLmdlb21ldHJ5ID0gc291cmNlLmdlb21ldHJ5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBtYXRyaXhXb3JsZCA9IHRoaXMubWF0cml4V29ybGQ7XG5cdFx0Y29uc3QgdGhyZXNob2xkID0gcmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO1xuXHRcdGNvbnN0IGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZTtcblxuXHRcdC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheVxuXG5cdFx0aWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSApO1xuXHRcdF9zcGhlcmUuYXBwbHlNYXRyaXg0KCBtYXRyaXhXb3JsZCApO1xuXHRcdF9zcGhlcmUucmFkaXVzICs9IHRocmVzaG9sZDtcblxuXHRcdGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBfc3BoZXJlICkgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0Ly9cblxuXHRcdF9pbnZlcnNlTWF0cml4LmNvcHkoIG1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cdFx0X3JheS5jb3B5KCByYXljYXN0ZXIucmF5ICkuYXBwbHlNYXRyaXg0KCBfaW52ZXJzZU1hdHJpeCApO1xuXG5cdFx0Y29uc3QgbG9jYWxUaHJlc2hvbGQgPSB0aHJlc2hvbGQgLyAoICggdGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56ICkgLyAzICk7XG5cdFx0Y29uc3QgbG9jYWxUaHJlc2hvbGRTcSA9IGxvY2FsVGhyZXNob2xkICogbG9jYWxUaHJlc2hvbGQ7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlID0gYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFuZ2Uuc3RhcnQgKTtcblx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIGluZGV4LmNvdW50LCAoIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleC5nZXRYKCBpICk7XG5cblx0XHRcdFx0XHRfcG9zaXRpb24kMi5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgYSApO1xuXG5cdFx0XHRcdFx0dGVzdFBvaW50KCBfcG9zaXRpb24kMiwgYSwgbG9jYWxUaHJlc2hvbGRTcSwgbWF0cml4V29ybGQsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdGhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFuZ2Uuc3RhcnQgKTtcblx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIHBvc2l0aW9uQXR0cmlidXRlLmNvdW50LCAoIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSBzdGFydCwgbCA9IGVuZDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRfcG9zaXRpb24kMi5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSApO1xuXG5cdFx0XHRcdFx0dGVzdFBvaW50KCBfcG9zaXRpb24kMiwgaSwgbG9jYWxUaHJlc2hvbGRTcSwgbWF0cml4V29ybGQsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdGhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKCBtb3JwaEF0dHJpYnV0ZXMgKTtcblxuXHRcdFx0aWYgKCBrZXlzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNbIGtleXNbIDAgXSBdO1xuXG5cdFx0XHRcdGlmICggbW9ycGhBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gW107XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IG1vcnBoQXR0cmlidXRlWyBtIF0ubmFtZSB8fCBTdHJpbmcoIG0gKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCggMCApO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbIG5hbWUgXSA9IG07XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cblx0XHRcdGlmICggbW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cbn1cblxuUG9pbnRzLnByb3RvdHlwZS5pc1BvaW50cyA9IHRydWU7XG5cbmZ1bmN0aW9uIHRlc3RQb2ludCggcG9pbnQsIGluZGV4LCBsb2NhbFRocmVzaG9sZFNxLCBtYXRyaXhXb3JsZCwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCBvYmplY3QgKSB7XG5cblx0Y29uc3QgcmF5UG9pbnREaXN0YW5jZVNxID0gX3JheS5kaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKTtcblxuXHRpZiAoIHJheVBvaW50RGlzdGFuY2VTcSA8IGxvY2FsVGhyZXNob2xkU3EgKSB7XG5cblx0XHRjb25zdCBpbnRlcnNlY3RQb2ludCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRfcmF5LmNsb3Nlc3RQb2ludFRvUG9pbnQoIHBvaW50LCBpbnRlcnNlY3RQb2ludCApO1xuXHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQgKTtcblxuXHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggaW50ZXJzZWN0UG9pbnQgKTtcblxuXHRcdGlmICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSByZXR1cm47XG5cblx0XHRpbnRlcnNlY3RzLnB1c2goIHtcblxuXHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KCByYXlQb2ludERpc3RhbmNlU3EgKSxcblx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRvYmplY3Q6IG9iamVjdFxuXG5cdFx0fSApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBWaWRlb1RleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggdmlkZW8sIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApIHtcblxuXHRcdHN1cGVyKCB2aWRlbywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICk7XG5cblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWluRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtYWdGaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gdXBkYXRlVmlkZW8oKSB7XG5cblx0XHRcdHNjb3BlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdHZpZGVvLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soIHVwZGF0ZVZpZGVvICk7XG5cblx0XHR9XG5cblx0XHRpZiAoICdyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrJyBpbiB2aWRlbyApIHtcblxuXHRcdFx0dmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayggdXBkYXRlVmlkZW8gKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuaW1hZ2UgKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblxuXHRcdGNvbnN0IHZpZGVvID0gdGhpcy5pbWFnZTtcblx0XHRjb25zdCBoYXNWaWRlb0ZyYW1lQ2FsbGJhY2sgPSAncmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaycgaW4gdmlkZW87XG5cblx0XHRpZiAoIGhhc1ZpZGVvRnJhbWVDYWxsYmFjayA9PT0gZmFsc2UgJiYgdmlkZW8ucmVhZHlTdGF0ZSA+PSB2aWRlby5IQVZFX0NVUlJFTlRfREFUQSApIHtcblxuXHRcdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cblZpZGVvVGV4dHVyZS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBGcmFtZWJ1ZmZlclRleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3Rvciggd2lkdGgsIGhlaWdodCwgZm9ybWF0ICkge1xuXG5cdFx0c3VwZXIoIHsgd2lkdGgsIGhlaWdodCB9ICk7XG5cblx0XHR0aGlzLmZvcm1hdCA9IGZvcm1hdDtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG59XG5cbkZyYW1lYnVmZmVyVGV4dHVyZS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBDb21wcmVzc2VkVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCBtaXBtYXBzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29kaW5nICkge1xuXG5cdFx0c3VwZXIoIG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTtcblxuXHRcdHRoaXMuaW1hZ2UgPSB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcblx0XHR0aGlzLm1pcG1hcHMgPSBtaXBtYXBzO1xuXG5cdFx0Ly8gbm8gZmxpcHBpbmcgZm9yIGN1YmUgdGV4dHVyZXNcblx0XHQvLyAoYWxzbyBmbGlwcGluZyBkb2Vzbid0IHdvcmsgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgKVxuXG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXG5cdFx0Ly8gY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlc1xuXHRcdC8vIG1pcHMgbXVzdCBiZSBlbWJlZGRlZCBpbiBERFMgZmlsZXNcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cblx0fVxuXG59XG5cbkNvbXByZXNzZWRUZXh0dXJlLnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgQ2FudmFzVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCBjYW52YXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApIHtcblxuXHRcdHN1cGVyKCBjYW52YXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApO1xuXG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG59XG5cbkNhbnZhc1RleHR1cmUucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIENpcmNsZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBzZWdtZW50cyA9IDgsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKiAyICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDaXJjbGVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHNlZ21lbnRzOiBzZWdtZW50cyxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXG5cdFx0c2VnbWVudHMgPSBNYXRoLm1heCggMywgc2VnbWVudHMgKTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0Ly8gY2VudGVyIHBvaW50XG5cblx0XHR2ZXJ0aWNlcy5wdXNoKCAwLCAwLCAwICk7XG5cdFx0bm9ybWFscy5wdXNoKCAwLCAwLCAxICk7XG5cdFx0dXZzLnB1c2goIDAuNSwgMC41ICk7XG5cblx0XHRmb3IgKCBsZXQgcyA9IDAsIGkgPSAzOyBzIDw9IHNlZ21lbnRzOyBzICsrLCBpICs9IDMgKSB7XG5cblx0XHRcdGNvbnN0IHNlZ21lbnQgPSB0aGV0YVN0YXJ0ICsgcyAvIHNlZ21lbnRzICogdGhldGFMZW5ndGg7XG5cblx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIE1hdGguY29zKCBzZWdtZW50ICk7XG5cdFx0XHR2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1hdGguc2luKCBzZWdtZW50ICk7XG5cblx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdG5vcm1hbHMucHVzaCggMCwgMCwgMSApO1xuXG5cdFx0XHQvLyB1dnNcblxuXHRcdFx0dXYueCA9ICggdmVydGljZXNbIGkgXSAvIHJhZGl1cyArIDEgKSAvIDI7XG5cdFx0XHR1di55ID0gKCB2ZXJ0aWNlc1sgaSArIDEgXSAvIHJhZGl1cyArIDEgKSAvIDI7XG5cblx0XHRcdHV2cy5wdXNoKCB1di54LCB1di55ICk7XG5cblx0XHR9XG5cblx0XHQvLyBpbmRpY2VzXG5cblx0XHRmb3IgKCBsZXQgaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdGluZGljZXMucHVzaCggaSwgaSArIDEsIDAgKTtcblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IENpcmNsZUdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS5zZWdtZW50cywgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEN5bGluZGVyR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1c1RvcCA9IDEsIHJhZGl1c0JvdHRvbSA9IDEsIGhlaWdodCA9IDEsIHJhZGlhbFNlZ21lbnRzID0gOCwgaGVpZ2h0U2VnbWVudHMgPSAxLCBvcGVuRW5kZWQgPSBmYWxzZSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDeWxpbmRlckdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1c1RvcDogcmFkaXVzVG9wLFxuXHRcdFx0cmFkaXVzQm90dG9tOiByYWRpdXNCb3R0b20sXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdG9wZW5FbmRlZDogb3BlbkVuZGVkLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRyYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRzICk7XG5cdFx0aGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApO1xuXG5cdFx0Ly8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBpbmRleEFycmF5ID0gW107XG5cdFx0Y29uc3QgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cdFx0bGV0IGdyb3VwU3RhcnQgPSAwO1xuXG5cdFx0Ly8gZ2VuZXJhdGUgZ2VvbWV0cnlcblxuXHRcdGdlbmVyYXRlVG9yc28oKTtcblxuXHRcdGlmICggb3BlbkVuZGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0aWYgKCByYWRpdXNUb3AgPiAwICkgZ2VuZXJhdGVDYXAoIHRydWUgKTtcblx0XHRcdGlmICggcmFkaXVzQm90dG9tID4gMCApIGdlbmVyYXRlQ2FwKCBmYWxzZSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVRvcnNvKCkge1xuXG5cdFx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0bGV0IGdyb3VwQ291bnQgPSAwO1xuXG5cdFx0XHQvLyB0aGlzIHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbFxuXHRcdFx0Y29uc3Qgc2xvcGUgPSAoIHJhZGl1c0JvdHRvbSAtIHJhZGl1c1RvcCApIC8gaGVpZ2h0O1xuXG5cdFx0XHQvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAoIGxldCB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbmRleFJvdyA9IFtdO1xuXG5cdFx0XHRcdGNvbnN0IHYgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XG5cblx0XHRcdFx0Ly8gY2FsY3VsYXRlIHRoZSByYWRpdXMgb2YgdGhlIGN1cnJlbnQgcm93XG5cblx0XHRcdFx0Y29uc3QgcmFkaXVzID0gdiAqICggcmFkaXVzQm90dG9tIC0gcmFkaXVzVG9wICkgKyByYWRpdXNUb3A7XG5cblx0XHRcdFx0Zm9yICggbGV0IHggPSAwOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdSA9IHggLyByYWRpYWxTZWdtZW50cztcblxuXHRcdFx0XHRcdGNvbnN0IHRoZXRhID0gdSAqIHRoZXRhTGVuZ3RoICsgdGhldGFTdGFydDtcblxuXHRcdFx0XHRcdGNvbnN0IHNpblRoZXRhID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cdFx0XHRcdFx0Y29uc3QgY29zVGhldGEgPSBNYXRoLmNvcyggdGhldGEgKTtcblxuXHRcdFx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBzaW5UaGV0YTtcblx0XHRcdFx0XHR2ZXJ0ZXgueSA9IC0gdiAqIGhlaWdodCArIGhhbGZIZWlnaHQ7XG5cdFx0XHRcdFx0dmVydGV4LnogPSByYWRpdXMgKiBjb3NUaGV0YTtcblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0XHQvLyBub3JtYWxcblxuXHRcdFx0XHRcdG5vcm1hbC5zZXQoIHNpblRoZXRhLCBzbG9wZSwgY29zVGhldGEgKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHRcdC8vIHV2XG5cblx0XHRcdFx0XHR1dnMucHVzaCggdSwgMSAtIHYgKTtcblxuXHRcdFx0XHRcdC8vIHNhdmUgaW5kZXggb2YgdmVydGV4IGluIHJlc3BlY3RpdmUgcm93XG5cblx0XHRcdFx0XHRpbmRleFJvdy5wdXNoKCBpbmRleCArKyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3cgc2F2ZSB2ZXJ0aWNlcyBvZiB0aGUgcm93IGluIG91ciBpbmRleCBhcnJheVxuXG5cdFx0XHRcdGluZGV4QXJyYXkucHVzaCggaW5kZXhSb3cgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBnZW5lcmF0ZSBpbmRpY2VzXG5cblx0XHRcdGZvciAoIGxldCB4ID0gMDsgeCA8IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCB5ID0gMDsgeSA8IGhlaWdodFNlZ21lbnRzOyB5ICsrICkge1xuXG5cdFx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBpbmRleCBhcnJheSB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgaW5kaWNlc1xuXG5cdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4QXJyYXlbIHkgXVsgeCBdO1xuXHRcdFx0XHRcdGNvbnN0IGIgPSBpbmRleEFycmF5WyB5ICsgMSBdWyB4IF07XG5cdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4QXJyYXlbIHkgKyAxIF1bIHggKyAxIF07XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGluZGV4QXJyYXlbIHkgXVsgeCArIDEgXTtcblxuXHRcdFx0XHRcdC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0XHRcdC8vIHVwZGF0ZSBncm91cCBjb3VudGVyXG5cblx0XHRcdFx0XHRncm91cENvdW50ICs9IDY7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0XG5cblx0XHRcdHNjb3BlLmFkZEdyb3VwKCBncm91cFN0YXJ0LCBncm91cENvdW50LCAwICk7XG5cblx0XHRcdC8vIGNhbGN1bGF0ZSBuZXcgc3RhcnQgdmFsdWUgZm9yIGdyb3Vwc1xuXG5cdFx0XHRncm91cFN0YXJ0ICs9IGdyb3VwQ291bnQ7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUNhcCggdG9wICkge1xuXG5cdFx0XHQvLyBzYXZlIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2VudGVyIHZlcnRleFxuXHRcdFx0Y29uc3QgY2VudGVySW5kZXhTdGFydCA9IGluZGV4O1xuXG5cdFx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRsZXQgZ3JvdXBDb3VudCA9IDA7XG5cblx0XHRcdGNvbnN0IHJhZGl1cyA9ICggdG9wID09PSB0cnVlICkgPyByYWRpdXNUb3AgOiByYWRpdXNCb3R0b207XG5cdFx0XHRjb25zdCBzaWduID0gKCB0b3AgPT09IHRydWUgKSA/IDEgOiAtIDE7XG5cblx0XHRcdC8vIGZpcnN0IHdlIGdlbmVyYXRlIHRoZSBjZW50ZXIgdmVydGV4IGRhdGEgb2YgdGhlIGNhcC5cblx0XHRcdC8vIGJlY2F1c2UgdGhlIGdlb21ldHJ5IG5lZWRzIG9uZSBzZXQgb2YgdXZzIHBlciBmYWNlLFxuXHRcdFx0Ly8gd2UgbXVzdCBnZW5lcmF0ZSBhIGNlbnRlciB2ZXJ0ZXggcGVyIGZhY2Uvc2VnbWVudFxuXG5cdFx0XHRmb3IgKCBsZXQgeCA9IDE7IHggPD0gcmFkaWFsU2VnbWVudHM7IHggKysgKSB7XG5cblx0XHRcdFx0Ly8gdmVydGV4XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggMCwgaGFsZkhlaWdodCAqIHNpZ24sIDAgKTtcblxuXHRcdFx0XHQvLyBub3JtYWxcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goIDAsIHNpZ24sIDAgKTtcblxuXHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKCAwLjUsIDAuNSApO1xuXG5cdFx0XHRcdC8vIGluY3JlYXNlIGluZGV4XG5cblx0XHRcdFx0aW5kZXggKys7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gc2F2ZSB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2VudGVyIHZlcnRleFxuXHRcdFx0Y29uc3QgY2VudGVySW5kZXhFbmQgPSBpbmRleDtcblxuXHRcdFx0Ly8gbm93IHdlIGdlbmVyYXRlIHRoZSBzdXJyb3VuZGluZyB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAoIGxldCB4ID0gMDsgeCA8PSByYWRpYWxTZWdtZW50czsgeCArKyApIHtcblxuXHRcdFx0XHRjb25zdCB1ID0geCAvIHJhZGlhbFNlZ21lbnRzO1xuXHRcdFx0XHRjb25zdCB0aGV0YSA9IHUgKiB0aGV0YUxlbmd0aCArIHRoZXRhU3RhcnQ7XG5cblx0XHRcdFx0Y29uc3QgY29zVGhldGEgPSBNYXRoLmNvcyggdGhldGEgKTtcblx0XHRcdFx0Y29uc3Qgc2luVGhldGEgPSBNYXRoLnNpbiggdGhldGEgKTtcblxuXHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIHNpblRoZXRhO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IGhhbGZIZWlnaHQgKiBzaWduO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHJhZGl1cyAqIGNvc1RoZXRhO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCAwLCBzaWduLCAwICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1di54ID0gKCBjb3NUaGV0YSAqIDAuNSApICsgMC41O1xuXHRcdFx0XHR1di55ID0gKCBzaW5UaGV0YSAqIDAuNSAqIHNpZ24gKSArIDAuNTtcblx0XHRcdFx0dXZzLnB1c2goIHV2LngsIHV2LnkgKTtcblxuXHRcdFx0XHQvLyBpbmNyZWFzZSBpbmRleFxuXG5cdFx0XHRcdGluZGV4ICsrO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGdlbmVyYXRlIGluZGljZXNcblxuXHRcdFx0Zm9yICggbGV0IHggPSAwOyB4IDwgcmFkaWFsU2VnbWVudHM7IHggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYyA9IGNlbnRlckluZGV4U3RhcnQgKyB4O1xuXHRcdFx0XHRjb25zdCBpID0gY2VudGVySW5kZXhFbmQgKyB4O1xuXG5cdFx0XHRcdGlmICggdG9wID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gZmFjZSB0b3BcblxuXHRcdFx0XHRcdGluZGljZXMucHVzaCggaSwgaSArIDEsIGMgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gZmFjZSBib3R0b21cblxuXHRcdFx0XHRcdGluZGljZXMucHVzaCggaSArIDEsIGksIGMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z3JvdXBDb3VudCArPSAzO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0XG5cblx0XHRcdHNjb3BlLmFkZEdyb3VwKCBncm91cFN0YXJ0LCBncm91cENvdW50LCB0b3AgPT09IHRydWUgPyAxIDogMiApO1xuXG5cdFx0XHQvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHNcblxuXHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50O1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IEN5bGluZGVyR2VvbWV0cnkoIGRhdGEucmFkaXVzVG9wLCBkYXRhLnJhZGl1c0JvdHRvbSwgZGF0YS5oZWlnaHQsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEub3BlbkVuZGVkLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGggKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgQ29uZUdlb21ldHJ5IGV4dGVuZHMgQ3lsaW5kZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEsIGhlaWdodCA9IDEsIHJhZGlhbFNlZ21lbnRzID0gOCwgaGVpZ2h0U2VnbWVudHMgPSAxLCBvcGVuRW5kZWQgPSBmYWxzZSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIgKSB7XG5cblx0XHRzdXBlciggMCwgcmFkaXVzLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0NvbmVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0cmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLFxuXHRcdFx0aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLFxuXHRcdFx0b3BlbkVuZGVkOiBvcGVuRW5kZWQsXG5cdFx0XHR0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LFxuXHRcdFx0dGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoXG5cdFx0fTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBDb25lR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLmhlaWdodCwgZGF0YS5yYWRpYWxTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cywgZGF0YS5vcGVuRW5kZWQsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBQb2x5aGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHZlcnRpY2VzID0gW10sIGluZGljZXMgPSBbXSwgcmFkaXVzID0gMSwgZGV0YWlsID0gMCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUG9seWhlZHJvbkdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHZlcnRpY2VzOiB2ZXJ0aWNlcyxcblx0XHRcdGluZGljZXM6IGluZGljZXMsXG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblxuXHRcdC8vIGRlZmF1bHQgYnVmZmVyIGRhdGFcblxuXHRcdGNvbnN0IHZlcnRleEJ1ZmZlciA9IFtdO1xuXHRcdGNvbnN0IHV2QnVmZmVyID0gW107XG5cblx0XHQvLyB0aGUgc3ViZGl2aXNpb24gY3JlYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBkYXRhXG5cblx0XHRzdWJkaXZpZGUoIGRldGFpbCApO1xuXG5cdFx0Ly8gYWxsIHZlcnRpY2VzIHNob3VsZCBsaWUgb24gYSBjb25jZXB0dWFsIHNwaGVyZSB3aXRoIGEgZ2l2ZW4gcmFkaXVzXG5cblx0XHRhcHBseVJhZGl1cyggcmFkaXVzICk7XG5cblx0XHQvLyBmaW5hbGx5LCBjcmVhdGUgdGhlIHV2IGRhdGFcblxuXHRcdGdlbmVyYXRlVVZzKCk7XG5cblx0XHQvLyBidWlsZCBub24taW5kZXhlZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0ZXhCdWZmZXIsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRleEJ1ZmZlci5zbGljZSgpLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2QnVmZmVyLCAyICkgKTtcblxuXHRcdGlmICggZGV0YWlsID09PSAwICkge1xuXG5cdFx0XHR0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7IC8vIGZsYXQgbm9ybWFsc1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7IC8vIHNtb290aCBub3JtYWxzXG5cblx0XHR9XG5cblx0XHQvLyBoZWxwZXIgZnVuY3Rpb25zXG5cblx0XHRmdW5jdGlvbiBzdWJkaXZpZGUoIGRldGFpbCApIHtcblxuXHRcdFx0Y29uc3QgYSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBiID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGZhY2VzIGFuZCBhcHBseSBhIHN1YmRpdmlzb24gd2l0aCB0aGUgZ2l2ZW4gZGV0YWlsIHZhbHVlXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0Ly8gZ2V0IHRoZSB2ZXJ0aWNlcyBvZiB0aGUgZmFjZVxuXG5cdFx0XHRcdGdldFZlcnRleEJ5SW5kZXgoIGluZGljZXNbIGkgKyAwIF0sIGEgKTtcblx0XHRcdFx0Z2V0VmVydGV4QnlJbmRleCggaW5kaWNlc1sgaSArIDEgXSwgYiApO1xuXHRcdFx0XHRnZXRWZXJ0ZXhCeUluZGV4KCBpbmRpY2VzWyBpICsgMiBdLCBjICk7XG5cblx0XHRcdFx0Ly8gcGVyZm9ybSBzdWJkaXZpc2lvblxuXG5cdFx0XHRcdHN1YmRpdmlkZUZhY2UoIGEsIGIsIGMsIGRldGFpbCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdWJkaXZpZGVGYWNlKCBhLCBiLCBjLCBkZXRhaWwgKSB7XG5cblx0XHRcdGNvbnN0IGNvbHMgPSBkZXRhaWwgKyAxO1xuXG5cdFx0XHQvLyB3ZSB1c2UgdGhpcyBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IGFzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIHRoZSBzdWJkaXZpc2lvblxuXG5cdFx0XHRjb25zdCB2ID0gW107XG5cblx0XHRcdC8vIGNvbnN0cnVjdCBhbGwgb2YgdGhlIHZlcnRpY2VzIGZvciB0aGlzIHN1YmRpdmlzaW9uXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSBjb2xzOyBpICsrICkge1xuXG5cdFx0XHRcdHZbIGkgXSA9IFtdO1xuXG5cdFx0XHRcdGNvbnN0IGFqID0gYS5jbG9uZSgpLmxlcnAoIGMsIGkgLyBjb2xzICk7XG5cdFx0XHRcdGNvbnN0IGJqID0gYi5jbG9uZSgpLmxlcnAoIGMsIGkgLyBjb2xzICk7XG5cblx0XHRcdFx0Y29uc3Qgcm93cyA9IGNvbHMgLSBpO1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSByb3dzOyBqICsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBqID09PSAwICYmIGkgPT09IGNvbHMgKSB7XG5cblx0XHRcdFx0XHRcdHZbIGkgXVsgaiBdID0gYWo7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR2WyBpIF1bIGogXSA9IGFqLmNsb25lKCkubGVycCggYmosIGogLyByb3dzICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbnN0cnVjdCBhbGwgb2YgdGhlIGZhY2VzXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvbHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgMiAqICggY29scyAtIGkgKSAtIDE7IGogKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBrID0gTWF0aC5mbG9vciggaiAvIDIgKTtcblxuXHRcdFx0XHRcdGlmICggaiAlIDIgPT09IDAgKSB7XG5cblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgoIHZbIGkgXVsgayArIDEgXSApO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCggdlsgaSArIDEgXVsgayBdICk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KCB2WyBpIF1bIGsgXSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCggdlsgaSBdWyBrICsgMSBdICk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KCB2WyBpICsgMSBdWyBrICsgMSBdICk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KCB2WyBpICsgMSBdWyBrIF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFwcGx5UmFkaXVzKCByYWRpdXMgKSB7XG5cblx0XHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdC8vIGl0ZXJhdGUgb3ZlciB0aGUgZW50aXJlIGJ1ZmZlciBhbmQgYXBwbHkgdGhlIHJhZGl1cyB0byBlYWNoIHZlcnRleFxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0dmVydGV4LnggPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF07XG5cdFx0XHRcdHZlcnRleC55ID0gdmVydGV4QnVmZmVyWyBpICsgMSBdO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHZlcnRleEJ1ZmZlclsgaSArIDIgXTtcblxuXHRcdFx0XHR2ZXJ0ZXgubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIHJhZGl1cyApO1xuXG5cdFx0XHRcdHZlcnRleEJ1ZmZlclsgaSArIDAgXSA9IHZlcnRleC54O1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJbIGkgKyAxIF0gPSB2ZXJ0ZXgueTtcblx0XHRcdFx0dmVydGV4QnVmZmVyWyBpICsgMiBdID0gdmVydGV4Lno7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlVVZzKCkge1xuXG5cdFx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0dmVydGV4LnggPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF07XG5cdFx0XHRcdHZlcnRleC55ID0gdmVydGV4QnVmZmVyWyBpICsgMSBdO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHZlcnRleEJ1ZmZlclsgaSArIDIgXTtcblxuXHRcdFx0XHRjb25zdCB1ID0gYXppbXV0aCggdmVydGV4ICkgLyAyIC8gTWF0aC5QSSArIDAuNTtcblx0XHRcdFx0Y29uc3QgdiA9IGluY2xpbmF0aW9uKCB2ZXJ0ZXggKSAvIE1hdGguUEkgKyAwLjU7XG5cdFx0XHRcdHV2QnVmZmVyLnB1c2goIHUsIDEgLSB2ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Y29ycmVjdFVWcygpO1xuXG5cdFx0XHRjb3JyZWN0U2VhbSgpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY29ycmVjdFNlYW0oKSB7XG5cblx0XHRcdC8vIGhhbmRsZSBjYXNlIHdoZW4gZmFjZSBzdHJhZGRsZXMgdGhlIHNlYW0sIHNlZSAjMzI2OVxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB1dkJ1ZmZlci5sZW5ndGg7IGkgKz0gNiApIHtcblxuXHRcdFx0XHQvLyB1diBkYXRhIG9mIGEgc2luZ2xlIGZhY2VcblxuXHRcdFx0XHRjb25zdCB4MCA9IHV2QnVmZmVyWyBpICsgMCBdO1xuXHRcdFx0XHRjb25zdCB4MSA9IHV2QnVmZmVyWyBpICsgMiBdO1xuXHRcdFx0XHRjb25zdCB4MiA9IHV2QnVmZmVyWyBpICsgNCBdO1xuXG5cdFx0XHRcdGNvbnN0IG1heCA9IE1hdGgubWF4KCB4MCwgeDEsIHgyICk7XG5cdFx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKCB4MCwgeDEsIHgyICk7XG5cblx0XHRcdFx0Ly8gMC45IGlzIHNvbWV3aGF0IGFyYml0cmFyeVxuXG5cdFx0XHRcdGlmICggbWF4ID4gMC45ICYmIG1pbiA8IDAuMSApIHtcblxuXHRcdFx0XHRcdGlmICggeDAgPCAwLjIgKSB1dkJ1ZmZlclsgaSArIDAgXSArPSAxO1xuXHRcdFx0XHRcdGlmICggeDEgPCAwLjIgKSB1dkJ1ZmZlclsgaSArIDIgXSArPSAxO1xuXHRcdFx0XHRcdGlmICggeDIgPCAwLjIgKSB1dkJ1ZmZlclsgaSArIDQgXSArPSAxO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHVzaFZlcnRleCggdmVydGV4ICkge1xuXG5cdFx0XHR2ZXJ0ZXhCdWZmZXIucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0VmVydGV4QnlJbmRleCggaW5kZXgsIHZlcnRleCApIHtcblxuXHRcdFx0Y29uc3Qgc3RyaWRlID0gaW5kZXggKiAzO1xuXG5cdFx0XHR2ZXJ0ZXgueCA9IHZlcnRpY2VzWyBzdHJpZGUgKyAwIF07XG5cdFx0XHR2ZXJ0ZXgueSA9IHZlcnRpY2VzWyBzdHJpZGUgKyAxIF07XG5cdFx0XHR2ZXJ0ZXgueiA9IHZlcnRpY2VzWyBzdHJpZGUgKyAyIF07XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb3JyZWN0VVZzKCkge1xuXG5cdFx0XHRjb25zdCBhID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgYyA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGNvbnN0IGNlbnRyb2lkID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0Y29uc3QgdXZBID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdGNvbnN0IHV2QiA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRjb25zdCB1dkMgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGogPSAwOyBpIDwgdmVydGV4QnVmZmVyLmxlbmd0aDsgaSArPSA5LCBqICs9IDYgKSB7XG5cblx0XHRcdFx0YS5zZXQoIHZlcnRleEJ1ZmZlclsgaSArIDAgXSwgdmVydGV4QnVmZmVyWyBpICsgMSBdLCB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF0gKTtcblx0XHRcdFx0Yi5zZXQoIHZlcnRleEJ1ZmZlclsgaSArIDMgXSwgdmVydGV4QnVmZmVyWyBpICsgNCBdLCB2ZXJ0ZXhCdWZmZXJbIGkgKyA1IF0gKTtcblx0XHRcdFx0Yy5zZXQoIHZlcnRleEJ1ZmZlclsgaSArIDYgXSwgdmVydGV4QnVmZmVyWyBpICsgNyBdLCB2ZXJ0ZXhCdWZmZXJbIGkgKyA4IF0gKTtcblxuXHRcdFx0XHR1dkEuc2V0KCB1dkJ1ZmZlclsgaiArIDAgXSwgdXZCdWZmZXJbIGogKyAxIF0gKTtcblx0XHRcdFx0dXZCLnNldCggdXZCdWZmZXJbIGogKyAyIF0sIHV2QnVmZmVyWyBqICsgMyBdICk7XG5cdFx0XHRcdHV2Qy5zZXQoIHV2QnVmZmVyWyBqICsgNCBdLCB1dkJ1ZmZlclsgaiArIDUgXSApO1xuXG5cdFx0XHRcdGNlbnRyb2lkLmNvcHkoIGEgKS5hZGQoIGIgKS5hZGQoIGMgKS5kaXZpZGVTY2FsYXIoIDMgKTtcblxuXHRcdFx0XHRjb25zdCBhemkgPSBhemltdXRoKCBjZW50cm9pZCApO1xuXG5cdFx0XHRcdGNvcnJlY3RVViggdXZBLCBqICsgMCwgYSwgYXppICk7XG5cdFx0XHRcdGNvcnJlY3RVViggdXZCLCBqICsgMiwgYiwgYXppICk7XG5cdFx0XHRcdGNvcnJlY3RVViggdXZDLCBqICsgNCwgYywgYXppICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3RVViggdXYsIHN0cmlkZSwgdmVjdG9yLCBhemltdXRoICkge1xuXG5cdFx0XHRpZiAoICggYXppbXV0aCA8IDAgKSAmJiAoIHV2LnggPT09IDEgKSApIHtcblxuXHRcdFx0XHR1dkJ1ZmZlclsgc3RyaWRlIF0gPSB1di54IC0gMTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICggdmVjdG9yLnggPT09IDAgKSAmJiAoIHZlY3Rvci56ID09PSAwICkgKSB7XG5cblx0XHRcdFx0dXZCdWZmZXJbIHN0cmlkZSBdID0gYXppbXV0aCAvIDIgLyBNYXRoLlBJICsgMC41O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBBbmdsZSBhcm91bmQgdGhlIFkgYXhpcywgY291bnRlci1jbG9ja3dpc2Ugd2hlbiBsb29raW5nIGZyb20gYWJvdmUuXG5cblx0XHRmdW5jdGlvbiBhemltdXRoKCB2ZWN0b3IgKSB7XG5cblx0XHRcdHJldHVybiBNYXRoLmF0YW4yKCB2ZWN0b3IueiwgLSB2ZWN0b3IueCApO1xuXG5cdFx0fVxuXG5cblx0XHQvLyBBbmdsZSBhYm92ZSB0aGUgWFogcGxhbmUuXG5cblx0XHRmdW5jdGlvbiBpbmNsaW5hdGlvbiggdmVjdG9yICkge1xuXG5cdFx0XHRyZXR1cm4gTWF0aC5hdGFuMiggLSB2ZWN0b3IueSwgTWF0aC5zcXJ0KCAoIHZlY3Rvci54ICogdmVjdG9yLnggKSArICggdmVjdG9yLnogKiB2ZWN0b3IueiApICkgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBQb2x5aGVkcm9uR2VvbWV0cnkoIGRhdGEudmVydGljZXMsIGRhdGEuaW5kaWNlcywgZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlscyApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBEb2RlY2FoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEsIGRldGFpbCA9IDAgKSB7XG5cblx0XHRjb25zdCB0ID0gKCAxICsgTWF0aC5zcXJ0KCA1ICkgKSAvIDI7XG5cdFx0Y29uc3QgciA9IDEgLyB0O1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXG5cblx0XHRcdC8vICjCsTEsIMKxMSwgwrExKVxuXHRcdFx0LSAxLCAtIDEsIC0gMSxcdC0gMSwgLSAxLCAxLFxuXHRcdFx0LSAxLCAxLCAtIDEsIC0gMSwgMSwgMSxcblx0XHRcdDEsIC0gMSwgLSAxLCAxLCAtIDEsIDEsXG5cdFx0XHQxLCAxLCAtIDEsIDEsIDEsIDEsXG5cblx0XHRcdC8vICgwLCDCsTEvz4YsIMKxz4YpXG5cdFx0XHQwLCAtIHIsIC0gdCwgMCwgLSByLCB0LFxuXHRcdFx0MCwgciwgLSB0LCAwLCByLCB0LFxuXG5cdFx0XHQvLyAowrExL8+GLCDCsc+GLCAwKVxuXHRcdFx0LSByLCAtIHQsIDAsIC0gciwgdCwgMCxcblx0XHRcdHIsIC0gdCwgMCwgciwgdCwgMCxcblxuXHRcdFx0Ly8gKMKxz4YsIDAsIMKxMS/Philcblx0XHRcdC0gdCwgMCwgLSByLCB0LCAwLCAtIHIsXG5cdFx0XHQtIHQsIDAsIHIsIHQsIDAsIHJcblx0XHRdO1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtcblx0XHRcdDMsIDExLCA3LCBcdDMsIDcsIDE1LCBcdDMsIDE1LCAxMyxcblx0XHRcdDcsIDE5LCAxNywgXHQ3LCAxNywgNiwgXHQ3LCA2LCAxNSxcblx0XHRcdDE3LCA0LCA4LCBcdDE3LCA4LCAxMCwgXHQxNywgMTAsIDYsXG5cdFx0XHQ4LCAwLCAxNiwgXHQ4LCAxNiwgMiwgXHQ4LCAyLCAxMCxcblx0XHRcdDAsIDEyLCAxLCBcdDAsIDEsIDE4LCBcdDAsIDE4LCAxNixcblx0XHRcdDYsIDEwLCAyLCBcdDYsIDIsIDEzLCBcdDYsIDEzLCAxNSxcblx0XHRcdDIsIDE2LCAxOCwgXHQyLCAxOCwgMywgXHQyLCAzLCAxMyxcblx0XHRcdDE4LCAxLCA5LCBcdDE4LCA5LCAxMSwgXHQxOCwgMTEsIDMsXG5cdFx0XHQ0LCAxNCwgMTIsIFx0NCwgMTIsIDAsIFx0NCwgMCwgOCxcblx0XHRcdDExLCA5LCA1LCBcdDExLCA1LCAxOSwgXHQxMSwgMTksIDcsXG5cdFx0XHQxOSwgNSwgMTQsIFx0MTksIDE0LCA0LCBcdDE5LCA0LCAxNyxcblx0XHRcdDEsIDEyLCAxNCwgXHQxLCAxNCwgNSwgXHQxLCA1LCA5XG5cdFx0XTtcblxuXHRcdHN1cGVyKCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdEb2RlY2FoZWRyb25HZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBEb2RlY2FoZWRyb25HZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlsICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IF92MCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjEkMSA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90cmlhbmdsZSA9IG5ldyBUcmlhbmdsZSgpO1xuXG5jbGFzcyBFZGdlc0dlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSA9IG51bGwsIHRocmVzaG9sZEFuZ2xlID0gMSApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0VkZ2VzR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5LFxuXHRcdFx0dGhyZXNob2xkQW5nbGU6IHRocmVzaG9sZEFuZ2xlXG5cdFx0fTtcblxuXHRcdGlmICggZ2VvbWV0cnkgIT09IG51bGwgKSB7XG5cblx0XHRcdGNvbnN0IHByZWNpc2lvblBvaW50cyA9IDQ7XG5cdFx0XHRjb25zdCBwcmVjaXNpb24gPSBNYXRoLnBvdyggMTAsIHByZWNpc2lvblBvaW50cyApO1xuXHRcdFx0Y29uc3QgdGhyZXNob2xkRG90ID0gTWF0aC5jb3MoIERFRzJSQUQgKiB0aHJlc2hvbGRBbmdsZSApO1xuXG5cdFx0XHRjb25zdCBpbmRleEF0dHIgPSBnZW9tZXRyeS5nZXRJbmRleCgpO1xuXHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICk7XG5cdFx0XHRjb25zdCBpbmRleENvdW50ID0gaW5kZXhBdHRyID8gaW5kZXhBdHRyLmNvdW50IDogcG9zaXRpb25BdHRyLmNvdW50O1xuXG5cdFx0XHRjb25zdCBpbmRleEFyciA9IFsgMCwgMCwgMCBdO1xuXHRcdFx0Y29uc3QgdmVydEtleXMgPSBbICdhJywgJ2InLCAnYycgXTtcblx0XHRcdGNvbnN0IGhhc2hlcyA9IG5ldyBBcnJheSggMyApO1xuXG5cdFx0XHRjb25zdCBlZGdlRGF0YSA9IHt9O1xuXHRcdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRpZiAoIGluZGV4QXR0ciApIHtcblxuXHRcdFx0XHRcdGluZGV4QXJyWyAwIF0gPSBpbmRleEF0dHIuZ2V0WCggaSApO1xuXHRcdFx0XHRcdGluZGV4QXJyWyAxIF0gPSBpbmRleEF0dHIuZ2V0WCggaSArIDEgKTtcblx0XHRcdFx0XHRpbmRleEFyclsgMiBdID0gaW5kZXhBdHRyLmdldFgoIGkgKyAyICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGluZGV4QXJyWyAwIF0gPSBpO1xuXHRcdFx0XHRcdGluZGV4QXJyWyAxIF0gPSBpICsgMTtcblx0XHRcdFx0XHRpbmRleEFyclsgMiBdID0gaSArIDI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHsgYSwgYiwgYyB9ID0gX3RyaWFuZ2xlO1xuXHRcdFx0XHRhLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0ciwgaW5kZXhBcnJbIDAgXSApO1xuXHRcdFx0XHRiLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0ciwgaW5kZXhBcnJbIDEgXSApO1xuXHRcdFx0XHRjLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0ciwgaW5kZXhBcnJbIDIgXSApO1xuXHRcdFx0XHRfdHJpYW5nbGUuZ2V0Tm9ybWFsKCBfbm9ybWFsICk7XG5cblx0XHRcdFx0Ly8gY3JlYXRlIGhhc2hlcyBmb3IgdGhlIGVkZ2UgZnJvbSB0aGUgdmVydGljZXNcblx0XHRcdFx0aGFzaGVzWyAwIF0gPSBgJHsgTWF0aC5yb3VuZCggYS54ICogcHJlY2lzaW9uICkgfSwkeyBNYXRoLnJvdW5kKCBhLnkgKiBwcmVjaXNpb24gKSB9LCR7IE1hdGgucm91bmQoIGEueiAqIHByZWNpc2lvbiApIH1gO1xuXHRcdFx0XHRoYXNoZXNbIDEgXSA9IGAkeyBNYXRoLnJvdW5kKCBiLnggKiBwcmVjaXNpb24gKSB9LCR7IE1hdGgucm91bmQoIGIueSAqIHByZWNpc2lvbiApIH0sJHsgTWF0aC5yb3VuZCggYi56ICogcHJlY2lzaW9uICkgfWA7XG5cdFx0XHRcdGhhc2hlc1sgMiBdID0gYCR7IE1hdGgucm91bmQoIGMueCAqIHByZWNpc2lvbiApIH0sJHsgTWF0aC5yb3VuZCggYy55ICogcHJlY2lzaW9uICkgfSwkeyBNYXRoLnJvdW5kKCBjLnogKiBwcmVjaXNpb24gKSB9YDtcblxuXHRcdFx0XHQvLyBza2lwIGRlZ2VuZXJhdGUgdHJpYW5nbGVzXG5cdFx0XHRcdGlmICggaGFzaGVzWyAwIF0gPT09IGhhc2hlc1sgMSBdIHx8IGhhc2hlc1sgMSBdID09PSBoYXNoZXNbIDIgXSB8fCBoYXNoZXNbIDIgXSA9PT0gaGFzaGVzWyAwIF0gKSB7XG5cblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGVkZ2Vcblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgMzsgaiArKyApIHtcblxuXHRcdFx0XHRcdC8vIGdldCB0aGUgZmlyc3QgYW5kIG5leHQgdmVydGV4IG1ha2luZyB1cCB0aGUgZWRnZVxuXHRcdFx0XHRcdGNvbnN0IGpOZXh0ID0gKCBqICsgMSApICUgMztcblx0XHRcdFx0XHRjb25zdCB2ZWNIYXNoMCA9IGhhc2hlc1sgaiBdO1xuXHRcdFx0XHRcdGNvbnN0IHZlY0hhc2gxID0gaGFzaGVzWyBqTmV4dCBdO1xuXHRcdFx0XHRcdGNvbnN0IHYwID0gX3RyaWFuZ2xlWyB2ZXJ0S2V5c1sgaiBdIF07XG5cdFx0XHRcdFx0Y29uc3QgdjEgPSBfdHJpYW5nbGVbIHZlcnRLZXlzWyBqTmV4dCBdIF07XG5cblx0XHRcdFx0XHRjb25zdCBoYXNoID0gYCR7IHZlY0hhc2gwIH1fJHsgdmVjSGFzaDEgfWA7XG5cdFx0XHRcdFx0Y29uc3QgcmV2ZXJzZUhhc2ggPSBgJHsgdmVjSGFzaDEgfV8keyB2ZWNIYXNoMCB9YDtcblxuXHRcdFx0XHRcdGlmICggcmV2ZXJzZUhhc2ggaW4gZWRnZURhdGEgJiYgZWRnZURhdGFbIHJldmVyc2VIYXNoIF0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIGEgc2libGluZyBlZGdlIGFkZCBpdCBpbnRvIHRoZSB2ZXJ0ZXggYXJyYXkgaWZcblx0XHRcdFx0XHRcdC8vIGl0IG1lZXRzIHRoZSBhbmdsZSB0aHJlc2hvbGQgYW5kIGRlbGV0ZSB0aGUgZWRnZSBmcm9tIHRoZSBtYXAuXG5cdFx0XHRcdFx0XHRpZiAoIF9ub3JtYWwuZG90KCBlZGdlRGF0YVsgcmV2ZXJzZUhhc2ggXS5ub3JtYWwgKSA8PSB0aHJlc2hvbGREb3QgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaCggdjAueCwgdjAueSwgdjAueiApO1xuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2MS54LCB2MS55LCB2MS56ICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZWRnZURhdGFbIHJldmVyc2VIYXNoIF0gPSBudWxsO1xuXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggISAoIGhhc2ggaW4gZWRnZURhdGEgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gaWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gZWRnZSBoZXJlIHRoZW4gc2tpcCBhZGRpbmcgYSBuZXcgb25lXG5cdFx0XHRcdFx0XHRlZGdlRGF0YVsgaGFzaCBdID0ge1xuXG5cdFx0XHRcdFx0XHRcdGluZGV4MDogaW5kZXhBcnJbIGogXSxcblx0XHRcdFx0XHRcdFx0aW5kZXgxOiBpbmRleEFyclsgak5leHQgXSxcblx0XHRcdFx0XHRcdFx0bm9ybWFsOiBfbm9ybWFsLmNsb25lKCksXG5cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGl0ZXJhdGUgb3ZlciBhbGwgcmVtYWluaW5nLCB1bm1hdGNoZWQgZWRnZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSB2ZXJ0ZXggYXJyYXlcblx0XHRcdGZvciAoIGNvbnN0IGtleSBpbiBlZGdlRGF0YSApIHtcblxuXHRcdFx0XHRpZiAoIGVkZ2VEYXRhWyBrZXkgXSApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHsgaW5kZXgwLCBpbmRleDEgfSA9IGVkZ2VEYXRhWyBrZXkgXTtcblx0XHRcdFx0XHRfdjAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyLCBpbmRleDAgKTtcblx0XHRcdFx0XHRfdjEkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHIsIGluZGV4MSApO1xuXG5cdFx0XHRcdFx0dmVydGljZXMucHVzaCggX3YwLngsIF92MC55LCBfdjAueiApO1xuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIF92MSQxLngsIF92MSQxLnksIF92MSQxLnogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbi8qKlxuICogRXh0ZW5zaWJsZSBjdXJ2ZSBvYmplY3QuXG4gKlxuICogU29tZSBjb21tb24gb2YgY3VydmUgbWV0aG9kczpcbiAqIC5nZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgKSwgLmdldFRhbmdlbnQoIHQsIG9wdGlvbmFsVGFyZ2V0IClcbiAqIC5nZXRQb2ludEF0KCB1LCBvcHRpb25hbFRhcmdldCApLCAuZ2V0VGFuZ2VudEF0KCB1LCBvcHRpb25hbFRhcmdldCApXG4gKiAuZ2V0UG9pbnRzKCksIC5nZXRTcGFjZWRQb2ludHMoKVxuICogLmdldExlbmd0aCgpXG4gKiAudXBkYXRlQXJjTGVuZ3RocygpXG4gKlxuICogVGhpcyBmb2xsb3dpbmcgY3VydmVzIGluaGVyaXQgZnJvbSBUSFJFRS5DdXJ2ZTpcbiAqXG4gKiAtLSAyRCBjdXJ2ZXMgLS1cbiAqIFRIUkVFLkFyY0N1cnZlXG4gKiBUSFJFRS5DdWJpY0JlemllckN1cnZlXG4gKiBUSFJFRS5FbGxpcHNlQ3VydmVcbiAqIFRIUkVFLkxpbmVDdXJ2ZVxuICogVEhSRUUuUXVhZHJhdGljQmV6aWVyQ3VydmVcbiAqIFRIUkVFLlNwbGluZUN1cnZlXG4gKlxuICogLS0gM0QgY3VydmVzIC0tXG4gKiBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzXG4gKiBUSFJFRS5DdWJpY0JlemllckN1cnZlM1xuICogVEhSRUUuTGluZUN1cnZlM1xuICogVEhSRUUuUXVhZHJhdGljQmV6aWVyQ3VydmUzXG4gKlxuICogQSBzZXJpZXMgb2YgY3VydmVzIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIFRIUkVFLkN1cnZlUGF0aC5cbiAqXG4gKiovXG5cbmNsYXNzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMudHlwZSA9ICdDdXJ2ZSc7XG5cblx0XHR0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IDIwMDtcblxuXHR9XG5cblx0Ly8gVmlydHVhbCBiYXNlIGNsYXNzIG1ldGhvZCB0byBvdmVyd3JpdGUgYW5kIGltcGxlbWVudCBpbiBzdWJjbGFzc2VzXG5cdC8vXHQtIHQgWzAgLi4gMV1cblxuXHRnZXRQb2ludCggLyogdCwgb3B0aW9uYWxUYXJnZXQgKi8gKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLicgKTtcblx0XHRyZXR1cm4gbnVsbDtcblxuXHR9XG5cblx0Ly8gR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBhcmMgbGVuZ3RoXG5cdC8vIC0gdSBbMCAuLiAxXVxuXG5cdGdldFBvaW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgdCA9IHRoaXMuZ2V0VXRvVG1hcHBpbmcoIHUgKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgKTtcblxuXHR9XG5cblx0Ly8gR2V0IHNlcXVlbmNlIG9mIHBvaW50cyB1c2luZyBnZXRQb2ludCggdCApXG5cblx0Z2V0UG9pbnRzKCBkaXZpc2lvbnMgPSA1ICkge1xuXG5cdFx0Y29uc3QgcG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsrICkge1xuXG5cdFx0XHRwb2ludHMucHVzaCggdGhpcy5nZXRQb2ludCggZCAvIGRpdmlzaW9ucyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXG5cdH1cblxuXHQvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRzIHVzaW5nIGdldFBvaW50QXQoIHUgKVxuXG5cdGdldFNwYWNlZFBvaW50cyggZGl2aXNpb25zID0gNSApIHtcblxuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGQgPSAwOyBkIDw9IGRpdmlzaW9uczsgZCArKyApIHtcblxuXHRcdFx0cG9pbnRzLnB1c2goIHRoaXMuZ2V0UG9pbnRBdCggZCAvIGRpdmlzaW9ucyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXG5cdH1cblxuXHQvLyBHZXQgdG90YWwgY3VydmUgYXJjIGxlbmd0aFxuXG5cdGdldExlbmd0aCgpIHtcblxuXHRcdGNvbnN0IGxlbmd0aHMgPSB0aGlzLmdldExlbmd0aHMoKTtcblx0XHRyZXR1cm4gbGVuZ3Roc1sgbGVuZ3Rocy5sZW5ndGggLSAxIF07XG5cblx0fVxuXG5cdC8vIEdldCBsaXN0IG9mIGN1bXVsYXRpdmUgc2VnbWVudCBsZW5ndGhzXG5cblx0Z2V0TGVuZ3RocyggZGl2aXNpb25zID0gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgKSB7XG5cblx0XHRpZiAoIHRoaXMuY2FjaGVBcmNMZW5ndGhzICYmXG5cdFx0XHQoIHRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aCA9PT0gZGl2aXNpb25zICsgMSApICYmXG5cdFx0XHQhIHRoaXMubmVlZHNVcGRhdGUgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3RocztcblxuXHRcdH1cblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdGNvbnN0IGNhY2hlID0gW107XG5cdFx0bGV0IGN1cnJlbnQsIGxhc3QgPSB0aGlzLmdldFBvaW50KCAwICk7XG5cdFx0bGV0IHN1bSA9IDA7XG5cblx0XHRjYWNoZS5wdXNoKCAwICk7XG5cblx0XHRmb3IgKCBsZXQgcCA9IDE7IHAgPD0gZGl2aXNpb25zOyBwICsrICkge1xuXG5cdFx0XHRjdXJyZW50ID0gdGhpcy5nZXRQb2ludCggcCAvIGRpdmlzaW9ucyApO1xuXHRcdFx0c3VtICs9IGN1cnJlbnQuZGlzdGFuY2VUbyggbGFzdCApO1xuXHRcdFx0Y2FjaGUucHVzaCggc3VtICk7XG5cdFx0XHRsYXN0ID0gY3VycmVudDtcblxuXHRcdH1cblxuXHRcdHRoaXMuY2FjaGVBcmNMZW5ndGhzID0gY2FjaGU7XG5cblx0XHRyZXR1cm4gY2FjaGU7IC8vIHsgc3VtczogY2FjaGUsIHN1bTogc3VtIH07IFN1bSBpcyBpbiB0aGUgbGFzdCBlbGVtZW50LlxuXG5cdH1cblxuXHR1cGRhdGVBcmNMZW5ndGhzKCkge1xuXG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5nZXRMZW5ndGhzKCk7XG5cblx0fVxuXG5cdC8vIEdpdmVuIHUgKCAwIC4uIDEgKSwgZ2V0IGEgdCB0byBmaW5kIHAuIFRoaXMgZ2l2ZXMgeW91IHBvaW50cyB3aGljaCBhcmUgZXF1aWRpc3RhbnRcblxuXHRnZXRVdG9UbWFwcGluZyggdSwgZGlzdGFuY2UgKSB7XG5cblx0XHRjb25zdCBhcmNMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7XG5cblx0XHRsZXQgaSA9IDA7XG5cdFx0Y29uc3QgaWwgPSBhcmNMZW5ndGhzLmxlbmd0aDtcblxuXHRcdGxldCB0YXJnZXRBcmNMZW5ndGg7IC8vIFRoZSB0YXJnZXRlZCB1IGRpc3RhbmNlIHZhbHVlIHRvIGdldFxuXG5cdFx0aWYgKCBkaXN0YW5jZSApIHtcblxuXHRcdFx0dGFyZ2V0QXJjTGVuZ3RoID0gZGlzdGFuY2U7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0YXJnZXRBcmNMZW5ndGggPSB1ICogYXJjTGVuZ3Roc1sgaWwgLSAxIF07XG5cblx0XHR9XG5cblx0XHQvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgaW5kZXggd2l0aCBsYXJnZXN0IHZhbHVlIHNtYWxsZXIgdGhhbiB0YXJnZXQgdSBkaXN0YW5jZVxuXG5cdFx0bGV0IGxvdyA9IDAsIGhpZ2ggPSBpbCAtIDEsIGNvbXBhcmlzb247XG5cblx0XHR3aGlsZSAoIGxvdyA8PSBoaWdoICkge1xuXG5cdFx0XHRpID0gTWF0aC5mbG9vciggbG93ICsgKCBoaWdoIC0gbG93ICkgLyAyICk7IC8vIGxlc3MgbGlrZWx5IHRvIG92ZXJmbG93LCB0aG91Z2ggcHJvYmFibHkgbm90IGlzc3VlIGhlcmUsIEpTIGRvZXNuJ3QgcmVhbGx5IGhhdmUgaW50ZWdlcnMsIGFsbCBudW1iZXJzIGFyZSBmbG9hdHNcblxuXHRcdFx0Y29tcGFyaXNvbiA9IGFyY0xlbmd0aHNbIGkgXSAtIHRhcmdldEFyY0xlbmd0aDtcblxuXHRcdFx0aWYgKCBjb21wYXJpc29uIDwgMCApIHtcblxuXHRcdFx0XHRsb3cgPSBpICsgMTtcblxuXHRcdFx0fSBlbHNlIGlmICggY29tcGFyaXNvbiA+IDAgKSB7XG5cblx0XHRcdFx0aGlnaCA9IGkgLSAxO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGhpZ2ggPSBpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHQvLyBET05FXG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGkgPSBoaWdoO1xuXG5cdFx0aWYgKCBhcmNMZW5ndGhzWyBpIF0gPT09IHRhcmdldEFyY0xlbmd0aCApIHtcblxuXHRcdFx0cmV0dXJuIGkgLyAoIGlsIC0gMSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gd2UgY291bGQgZ2V0IGZpbmVyIGdyYWluIGF0IGxlbmd0aHMsIG9yIHVzZSBzaW1wbGUgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcblxuXHRcdGNvbnN0IGxlbmd0aEJlZm9yZSA9IGFyY0xlbmd0aHNbIGkgXTtcblx0XHRjb25zdCBsZW5ndGhBZnRlciA9IGFyY0xlbmd0aHNbIGkgKyAxIF07XG5cblx0XHRjb25zdCBzZWdtZW50TGVuZ3RoID0gbGVuZ3RoQWZ0ZXIgLSBsZW5ndGhCZWZvcmU7XG5cblx0XHQvLyBkZXRlcm1pbmUgd2hlcmUgd2UgYXJlIGJldHdlZW4gdGhlICdiZWZvcmUnIGFuZCAnYWZ0ZXInIHBvaW50c1xuXG5cdFx0Y29uc3Qgc2VnbWVudEZyYWN0aW9uID0gKCB0YXJnZXRBcmNMZW5ndGggLSBsZW5ndGhCZWZvcmUgKSAvIHNlZ21lbnRMZW5ndGg7XG5cblx0XHQvLyBhZGQgdGhhdCBmcmFjdGlvbmFsIGFtb3VudCB0byB0XG5cblx0XHRjb25zdCB0ID0gKCBpICsgc2VnbWVudEZyYWN0aW9uICkgLyAoIGlsIC0gMSApO1xuXG5cdFx0cmV0dXJuIHQ7XG5cblx0fVxuXG5cdC8vIFJldHVybnMgYSB1bml0IHZlY3RvciB0YW5nZW50IGF0IHRcblx0Ly8gSW4gY2FzZSBhbnkgc3ViIGN1cnZlIGRvZXMgbm90IGltcGxlbWVudCBpdHMgdGFuZ2VudCBkZXJpdmF0aW9uLFxuXHQvLyAyIHBvaW50cyBhIHNtYWxsIGRlbHRhIGFwYXJ0IHdpbGwgYmUgdXNlZCB0byBmaW5kIGl0cyBncmFkaWVudFxuXHQvLyB3aGljaCBzZWVtcyB0byBnaXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uXG5cblx0Z2V0VGFuZ2VudCggdCwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBkZWx0YSA9IDAuMDAwMTtcblx0XHRsZXQgdDEgPSB0IC0gZGVsdGE7XG5cdFx0bGV0IHQyID0gdCArIGRlbHRhO1xuXG5cdFx0Ly8gQ2FwcGluZyBpbiBjYXNlIG9mIGRhbmdlclxuXG5cdFx0aWYgKCB0MSA8IDAgKSB0MSA9IDA7XG5cdFx0aWYgKCB0MiA+IDEgKSB0MiA9IDE7XG5cblx0XHRjb25zdCBwdDEgPSB0aGlzLmdldFBvaW50KCB0MSApO1xuXHRcdGNvbnN0IHB0MiA9IHRoaXMuZ2V0UG9pbnQoIHQyICk7XG5cblx0XHRjb25zdCB0YW5nZW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgKCAoIHB0MS5pc1ZlY3RvcjIgKSA/IG5ldyBWZWN0b3IyKCkgOiBuZXcgVmVjdG9yMygpICk7XG5cblx0XHR0YW5nZW50LmNvcHkoIHB0MiApLnN1YiggcHQxICkubm9ybWFsaXplKCk7XG5cblx0XHRyZXR1cm4gdGFuZ2VudDtcblxuXHR9XG5cblx0Z2V0VGFuZ2VudEF0KCB1LCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRcdGNvbnN0IHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKCB1ICk7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudCggdCwgb3B0aW9uYWxUYXJnZXQgKTtcblxuXHR9XG5cblx0Y29tcHV0ZUZyZW5ldEZyYW1lcyggc2VnbWVudHMsIGNsb3NlZCApIHtcblxuXHRcdC8vIHNlZSBodHRwOi8vd3d3LmNzLmluZGlhbmEuZWR1L3B1Yi90ZWNocmVwb3J0cy9UUjQyNS5wZGZcblxuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRjb25zdCB0YW5nZW50cyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCBiaW5vcm1hbHMgPSBbXTtcblxuXHRcdGNvbnN0IHZlYyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgbWF0ID0gbmV3IE1hdHJpeDQoKTtcblxuXHRcdC8vIGNvbXB1dGUgdGhlIHRhbmdlbnQgdmVjdG9ycyBmb3IgZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCB1ID0gaSAvIHNlZ21lbnRzO1xuXG5cdFx0XHR0YW5nZW50c1sgaSBdID0gdGhpcy5nZXRUYW5nZW50QXQoIHUsIG5ldyBWZWN0b3IzKCkgKTtcblxuXHRcdH1cblxuXHRcdC8vIHNlbGVjdCBhbiBpbml0aWFsIG5vcm1hbCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgZmlyc3QgdGFuZ2VudCB2ZWN0b3IsXG5cdFx0Ly8gYW5kIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG1pbmltdW0gdGFuZ2VudCB4eXogY29tcG9uZW50XG5cblx0XHRub3JtYWxzWyAwIF0gPSBuZXcgVmVjdG9yMygpO1xuXHRcdGJpbm9ybWFsc1sgMCBdID0gbmV3IFZlY3RvcjMoKTtcblx0XHRsZXQgbWluID0gTnVtYmVyLk1BWF9WQUxVRTtcblx0XHRjb25zdCB0eCA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnggKTtcblx0XHRjb25zdCB0eSA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnkgKTtcblx0XHRjb25zdCB0eiA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnogKTtcblxuXHRcdGlmICggdHggPD0gbWluICkge1xuXG5cdFx0XHRtaW4gPSB0eDtcblx0XHRcdG5vcm1hbC5zZXQoIDEsIDAsIDAgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdHkgPD0gbWluICkge1xuXG5cdFx0XHRtaW4gPSB0eTtcblx0XHRcdG5vcm1hbC5zZXQoIDAsIDEsIDAgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdHogPD0gbWluICkge1xuXG5cdFx0XHRub3JtYWwuc2V0KCAwLCAwLCAxICk7XG5cblx0XHR9XG5cblx0XHR2ZWMuY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgMCBdLCBub3JtYWwgKS5ub3JtYWxpemUoKTtcblxuXHRcdG5vcm1hbHNbIDAgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyAwIF0sIHZlYyApO1xuXHRcdGJpbm9ybWFsc1sgMCBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwgbm9ybWFsc1sgMCBdICk7XG5cblxuXHRcdC8vIGNvbXB1dGUgdGhlIHNsb3dseS12YXJ5aW5nIG5vcm1hbCBhbmQgYmlub3JtYWwgdmVjdG9ycyBmb3IgZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZVxuXG5cdFx0Zm9yICggbGV0IGkgPSAxOyBpIDw9IHNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRub3JtYWxzWyBpIF0gPSBub3JtYWxzWyBpIC0gMSBdLmNsb25lKCk7XG5cblx0XHRcdGJpbm9ybWFsc1sgaSBdID0gYmlub3JtYWxzWyBpIC0gMSBdLmNsb25lKCk7XG5cblx0XHRcdHZlYy5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyBpIC0gMSBdLCB0YW5nZW50c1sgaSBdICk7XG5cblx0XHRcdGlmICggdmVjLmxlbmd0aCgpID4gTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdFx0dmVjLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdGNvbnN0IHRoZXRhID0gTWF0aC5hY29zKCBjbGFtcCggdGFuZ2VudHNbIGkgLSAxIF0uZG90KCB0YW5nZW50c1sgaSBdICksIC0gMSwgMSApICk7IC8vIGNsYW1wIGZvciBmbG9hdGluZyBwdCBlcnJvcnNcblxuXHRcdFx0XHRub3JtYWxzWyBpIF0uYXBwbHlNYXRyaXg0KCBtYXQubWFrZVJvdGF0aW9uQXhpcyggdmVjLCB0aGV0YSApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ymlub3JtYWxzWyBpIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSBdLCBub3JtYWxzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSBjdXJ2ZSBpcyBjbG9zZWQsIHBvc3Rwcm9jZXNzIHRoZSB2ZWN0b3JzIHNvIHRoZSBmaXJzdCBhbmQgbGFzdCBub3JtYWwgdmVjdG9ycyBhcmUgdGhlIHNhbWVcblxuXHRcdGlmICggY2xvc2VkID09PSB0cnVlICkge1xuXG5cdFx0XHRsZXQgdGhldGEgPSBNYXRoLmFjb3MoIGNsYW1wKCBub3JtYWxzWyAwIF0uZG90KCBub3JtYWxzWyBzZWdtZW50cyBdICksIC0gMSwgMSApICk7XG5cdFx0XHR0aGV0YSAvPSBzZWdtZW50cztcblxuXHRcdFx0aWYgKCB0YW5nZW50c1sgMCBdLmRvdCggdmVjLmNyb3NzVmVjdG9ycyggbm9ybWFsc1sgMCBdLCBub3JtYWxzWyBzZWdtZW50cyBdICkgKSA+IDAgKSB7XG5cblx0XHRcdFx0dGhldGEgPSAtIHRoZXRhO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGxldCBpID0gMTsgaSA8PSBzZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHQvLyB0d2lzdCBhIGxpdHRsZS4uLlxuXHRcdFx0XHRub3JtYWxzWyBpIF0uYXBwbHlNYXRyaXg0KCBtYXQubWFrZVJvdGF0aW9uQXhpcyggdGFuZ2VudHNbIGkgXSwgdGhldGEgKiBpICkgKTtcblx0XHRcdFx0Ymlub3JtYWxzWyBpIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSBdLCBub3JtYWxzWyBpIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhbmdlbnRzOiB0YW5nZW50cyxcblx0XHRcdG5vcm1hbHM6IG5vcm1hbHMsXG5cdFx0XHRiaW5vcm1hbHM6IGJpbm9ybWFsc1xuXHRcdH07XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IHNvdXJjZS5hcmNMZW5ndGhEaXZpc2lvbnM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ0N1cnZlJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnQ3VydmUudG9KU09OJ1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRkYXRhLmFyY0xlbmd0aERpdmlzaW9ucyA9IHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zO1xuXHRcdGRhdGEudHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0ganNvbi5hcmNMZW5ndGhEaXZpc2lvbnM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY2xhc3MgRWxsaXBzZUN1cnZlIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCBhWCA9IDAsIGFZID0gMCwgeFJhZGl1cyA9IDEsIHlSYWRpdXMgPSAxLCBhU3RhcnRBbmdsZSA9IDAsIGFFbmRBbmdsZSA9IE1hdGguUEkgKiAyLCBhQ2xvY2t3aXNlID0gZmFsc2UsIGFSb3RhdGlvbiA9IDAgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0VsbGlwc2VDdXJ2ZSc7XG5cblx0XHR0aGlzLmFYID0gYVg7XG5cdFx0dGhpcy5hWSA9IGFZO1xuXG5cdFx0dGhpcy54UmFkaXVzID0geFJhZGl1cztcblx0XHR0aGlzLnlSYWRpdXMgPSB5UmFkaXVzO1xuXG5cdFx0dGhpcy5hU3RhcnRBbmdsZSA9IGFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0gYUVuZEFuZ2xlO1xuXG5cdFx0dGhpcy5hQ2xvY2t3aXNlID0gYUNsb2Nrd2lzZTtcblxuXHRcdHRoaXMuYVJvdGF0aW9uID0gYVJvdGF0aW9uO1xuXG5cdH1cblxuXHRnZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRjb25zdCB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHRcdGxldCBkZWx0YUFuZ2xlID0gdGhpcy5hRW5kQW5nbGUgLSB0aGlzLmFTdGFydEFuZ2xlO1xuXHRcdGNvbnN0IHNhbWVQb2ludHMgPSBNYXRoLmFicyggZGVsdGFBbmdsZSApIDwgTnVtYmVyLkVQU0lMT047XG5cblx0XHQvLyBlbnN1cmVzIHRoYXQgZGVsdGFBbmdsZSBpcyAwIC4uIDIgUElcblx0XHR3aGlsZSAoIGRlbHRhQW5nbGUgPCAwICkgZGVsdGFBbmdsZSArPSB0d29QaTtcblx0XHR3aGlsZSAoIGRlbHRhQW5nbGUgPiB0d29QaSApIGRlbHRhQW5nbGUgLT0gdHdvUGk7XG5cblx0XHRpZiAoIGRlbHRhQW5nbGUgPCBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0aWYgKCBzYW1lUG9pbnRzICkge1xuXG5cdFx0XHRcdGRlbHRhQW5nbGUgPSAwO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGRlbHRhQW5nbGUgPSB0d29QaTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFDbG9ja3dpc2UgPT09IHRydWUgJiYgISBzYW1lUG9pbnRzICkge1xuXG5cdFx0XHRpZiAoIGRlbHRhQW5nbGUgPT09IHR3b1BpICkge1xuXG5cdFx0XHRcdGRlbHRhQW5nbGUgPSAtIHR3b1BpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGRlbHRhQW5nbGUgPSBkZWx0YUFuZ2xlIC0gdHdvUGk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGFuZ2xlID0gdGhpcy5hU3RhcnRBbmdsZSArIHQgKiBkZWx0YUFuZ2xlO1xuXHRcdGxldCB4ID0gdGhpcy5hWCArIHRoaXMueFJhZGl1cyAqIE1hdGguY29zKCBhbmdsZSApO1xuXHRcdGxldCB5ID0gdGhpcy5hWSArIHRoaXMueVJhZGl1cyAqIE1hdGguc2luKCBhbmdsZSApO1xuXG5cdFx0aWYgKCB0aGlzLmFSb3RhdGlvbiAhPT0gMCApIHtcblxuXHRcdFx0Y29uc3QgY29zID0gTWF0aC5jb3MoIHRoaXMuYVJvdGF0aW9uICk7XG5cdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbiggdGhpcy5hUm90YXRpb24gKTtcblxuXHRcdFx0Y29uc3QgdHggPSB4IC0gdGhpcy5hWDtcblx0XHRcdGNvbnN0IHR5ID0geSAtIHRoaXMuYVk7XG5cblx0XHRcdC8vIFJvdGF0ZSB0aGUgcG9pbnQgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cblx0XHRcdHggPSB0eCAqIGNvcyAtIHR5ICogc2luICsgdGhpcy5hWDtcblx0XHRcdHkgPSB0eCAqIHNpbiArIHR5ICogY29zICsgdGhpcy5hWTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludC5zZXQoIHgsIHkgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmFYID0gc291cmNlLmFYO1xuXHRcdHRoaXMuYVkgPSBzb3VyY2UuYVk7XG5cblx0XHR0aGlzLnhSYWRpdXMgPSBzb3VyY2UueFJhZGl1cztcblx0XHR0aGlzLnlSYWRpdXMgPSBzb3VyY2UueVJhZGl1cztcblxuXHRcdHRoaXMuYVN0YXJ0QW5nbGUgPSBzb3VyY2UuYVN0YXJ0QW5nbGU7XG5cdFx0dGhpcy5hRW5kQW5nbGUgPSBzb3VyY2UuYUVuZEFuZ2xlO1xuXG5cdFx0dGhpcy5hQ2xvY2t3aXNlID0gc291cmNlLmFDbG9ja3dpc2U7XG5cblx0XHR0aGlzLmFSb3RhdGlvbiA9IHNvdXJjZS5hUm90YXRpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5hWCA9IHRoaXMuYVg7XG5cdFx0ZGF0YS5hWSA9IHRoaXMuYVk7XG5cblx0XHRkYXRhLnhSYWRpdXMgPSB0aGlzLnhSYWRpdXM7XG5cdFx0ZGF0YS55UmFkaXVzID0gdGhpcy55UmFkaXVzO1xuXG5cdFx0ZGF0YS5hU3RhcnRBbmdsZSA9IHRoaXMuYVN0YXJ0QW5nbGU7XG5cdFx0ZGF0YS5hRW5kQW5nbGUgPSB0aGlzLmFFbmRBbmdsZTtcblxuXHRcdGRhdGEuYUNsb2Nrd2lzZSA9IHRoaXMuYUNsb2Nrd2lzZTtcblxuXHRcdGRhdGEuYVJvdGF0aW9uID0gdGhpcy5hUm90YXRpb247XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy5hWCA9IGpzb24uYVg7XG5cdFx0dGhpcy5hWSA9IGpzb24uYVk7XG5cblx0XHR0aGlzLnhSYWRpdXMgPSBqc29uLnhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0ganNvbi55UmFkaXVzO1xuXG5cdFx0dGhpcy5hU3RhcnRBbmdsZSA9IGpzb24uYVN0YXJ0QW5nbGU7XG5cdFx0dGhpcy5hRW5kQW5nbGUgPSBqc29uLmFFbmRBbmdsZTtcblxuXHRcdHRoaXMuYUNsb2Nrd2lzZSA9IGpzb24uYUNsb2Nrd2lzZTtcblxuXHRcdHRoaXMuYVJvdGF0aW9uID0ganNvbi5hUm90YXRpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZSA9IHRydWU7XG5cbmNsYXNzIEFyY0N1cnZlIGV4dGVuZHMgRWxsaXBzZUN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkge1xuXG5cdFx0c3VwZXIoIGFYLCBhWSwgYVJhZGl1cywgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0FyY0N1cnZlJztcblxuXHR9XG5cbn1cblxuQXJjQ3VydmUucHJvdG90eXBlLmlzQXJjQ3VydmUgPSB0cnVlO1xuXG4vKipcbiAqIENlbnRyaXBldGFsIENhdG11bGxSb20gQ3VydmUgLSB3aGljaCBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nXG4gKiBjdXNwcyBhbmQgc2VsZi1pbnRlcnNlY3Rpb25zIGluIG5vbi11bmlmb3JtIGNhdG11bGwgcm9tIGN1cnZlcy5cbiAqIGh0dHA6Ly93d3cuY2VteXVrc2VsLmNvbS9yZXNlYXJjaC9jYXRtdWxscm9tX3BhcmFtL2NhdG11bGxyb20ucGRmXG4gKlxuICogY3VydmUudHlwZSBhY2NlcHRzIGNlbnRyaXBldGFsKGRlZmF1bHQpLCBjaG9yZGFsIGFuZCBjYXRtdWxscm9tXG4gKiBjdXJ2ZS50ZW5zaW9uIGlzIHVzZWQgZm9yIGNhdG11bGxyb20gd2hpY2ggZGVmYXVsdHMgdG8gMC41XG4gKi9cblxuXG4vKlxuQmFzZWQgb24gYW4gb3B0aW1pemVkIGMrKyBzb2x1dGlvbiBpblxuIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NDg5NzM2L2NhdG11bGwtcm9tLWN1cnZlLXdpdGgtbm8tY3VzcHMtYW5kLW5vLXNlbGYtaW50ZXJzZWN0aW9ucy9cbiAtIGh0dHA6Ly9pZGVvbmUuY29tL05vRWJWTVxuXG5UaGlzIEN1YmljUG9seSBjbGFzcyBjb3VsZCBiZSB1c2VkIGZvciByZXVzaW5nIHNvbWUgdmFyaWFibGVzIGFuZCBjYWxjdWxhdGlvbnMsXG5idXQgZm9yIHRocmVlLmpzIGN1cnZlIHVzZSwgaXQgY291bGQgYmUgcG9zc2libGUgaW5saW5lZCBhbmQgZmxhdHRlbiBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGxcbndoaWNoIGNhbiBiZSBwbGFjZWQgaW4gQ3VydmVVdGlscy5cbiovXG5cbmZ1bmN0aW9uIEN1YmljUG9seSgpIHtcblxuXHRsZXQgYzAgPSAwLCBjMSA9IDAsIGMyID0gMCwgYzMgPSAwO1xuXG5cdC8qXG5cdCAqIENvbXB1dGUgY29lZmZpY2llbnRzIGZvciBhIGN1YmljIHBvbHlub21pYWxcblx0ICogICBwKHMpID0gYzAgKyBjMSpzICsgYzIqc14yICsgYzMqc14zXG5cdCAqIHN1Y2ggdGhhdFxuXHQgKiAgIHAoMCkgPSB4MCwgcCgxKSA9IHgxXG5cdCAqICBhbmRcblx0ICogICBwJygwKSA9IHQwLCBwJygxKSA9IHQxLlxuXHQgKi9cblx0ZnVuY3Rpb24gaW5pdCggeDAsIHgxLCB0MCwgdDEgKSB7XG5cblx0XHRjMCA9IHgwO1xuXHRcdGMxID0gdDA7XG5cdFx0YzIgPSAtIDMgKiB4MCArIDMgKiB4MSAtIDIgKiB0MCAtIHQxO1xuXHRcdGMzID0gMiAqIHgwIC0gMiAqIHgxICsgdDAgKyB0MTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdGluaXRDYXRtdWxsUm9tOiBmdW5jdGlvbiAoIHgwLCB4MSwgeDIsIHgzLCB0ZW5zaW9uICkge1xuXG5cdFx0XHRpbml0KCB4MSwgeDIsIHRlbnNpb24gKiAoIHgyIC0geDAgKSwgdGVuc2lvbiAqICggeDMgLSB4MSApICk7XG5cblx0XHR9LFxuXG5cdFx0aW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOiBmdW5jdGlvbiAoIHgwLCB4MSwgeDIsIHgzLCBkdDAsIGR0MSwgZHQyICkge1xuXG5cdFx0XHQvLyBjb21wdXRlIHRhbmdlbnRzIHdoZW4gcGFyYW1ldGVyaXplZCBpbiBbdDEsdDJdXG5cdFx0XHRsZXQgdDEgPSAoIHgxIC0geDAgKSAvIGR0MCAtICggeDIgLSB4MCApIC8gKCBkdDAgKyBkdDEgKSArICggeDIgLSB4MSApIC8gZHQxO1xuXHRcdFx0bGV0IHQyID0gKCB4MiAtIHgxICkgLyBkdDEgLSAoIHgzIC0geDEgKSAvICggZHQxICsgZHQyICkgKyAoIHgzIC0geDIgKSAvIGR0MjtcblxuXHRcdFx0Ly8gcmVzY2FsZSB0YW5nZW50cyBmb3IgcGFyYW1ldHJpemF0aW9uIGluIFswLDFdXG5cdFx0XHR0MSAqPSBkdDE7XG5cdFx0XHR0MiAqPSBkdDE7XG5cblx0XHRcdGluaXQoIHgxLCB4MiwgdDEsIHQyICk7XG5cblx0XHR9LFxuXG5cdFx0Y2FsYzogZnVuY3Rpb24gKCB0ICkge1xuXG5cdFx0XHRjb25zdCB0MiA9IHQgKiB0O1xuXHRcdFx0Y29uc3QgdDMgPSB0MiAqIHQ7XG5cdFx0XHRyZXR1cm4gYzAgKyBjMSAqIHQgKyBjMiAqIHQyICsgYzMgKiB0MztcblxuXHRcdH1cblxuXHR9O1xuXG59XG5cbi8vXG5cbmNvbnN0IHRtcCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBweCA9IG5ldyBDdWJpY1BvbHkoKSwgcHkgPSBuZXcgQ3ViaWNQb2x5KCksIHB6ID0gbmV3IEN1YmljUG9seSgpO1xuXG5jbGFzcyBDYXRtdWxsUm9tQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCBwb2ludHMgPSBbXSwgY2xvc2VkID0gZmFsc2UsIGN1cnZlVHlwZSA9ICdjZW50cmlwZXRhbCcsIHRlbnNpb24gPSAwLjUgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0NhdG11bGxSb21DdXJ2ZTMnO1xuXG5cdFx0dGhpcy5wb2ludHMgPSBwb2ludHM7XG5cdFx0dGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSBjdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0gdGVuc2lvbjtcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cblx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcblx0XHRjb25zdCBsID0gcG9pbnRzLmxlbmd0aDtcblxuXHRcdGNvbnN0IHAgPSAoIGwgLSAoIHRoaXMuY2xvc2VkID8gMCA6IDEgKSApICogdDtcblx0XHRsZXQgaW50UG9pbnQgPSBNYXRoLmZsb29yKCBwICk7XG5cdFx0bGV0IHdlaWdodCA9IHAgLSBpbnRQb2ludDtcblxuXHRcdGlmICggdGhpcy5jbG9zZWQgKSB7XG5cblx0XHRcdGludFBvaW50ICs9IGludFBvaW50ID4gMCA/IDAgOiAoIE1hdGguZmxvb3IoIE1hdGguYWJzKCBpbnRQb2ludCApIC8gbCApICsgMSApICogbDtcblxuXHRcdH0gZWxzZSBpZiAoIHdlaWdodCA9PT0gMCAmJiBpbnRQb2ludCA9PT0gbCAtIDEgKSB7XG5cblx0XHRcdGludFBvaW50ID0gbCAtIDI7XG5cdFx0XHR3ZWlnaHQgPSAxO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHAwLCBwMzsgLy8gNCBwb2ludHMgKHAxICYgcDIgZGVmaW5lZCBiZWxvdylcblxuXHRcdGlmICggdGhpcy5jbG9zZWQgfHwgaW50UG9pbnQgPiAwICkge1xuXG5cdFx0XHRwMCA9IHBvaW50c1sgKCBpbnRQb2ludCAtIDEgKSAlIGwgXTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGV4dHJhcG9sYXRlIGZpcnN0IHBvaW50XG5cdFx0XHR0bXAuc3ViVmVjdG9ycyggcG9pbnRzWyAwIF0sIHBvaW50c1sgMSBdICkuYWRkKCBwb2ludHNbIDAgXSApO1xuXHRcdFx0cDAgPSB0bXA7XG5cblx0XHR9XG5cblx0XHRjb25zdCBwMSA9IHBvaW50c1sgaW50UG9pbnQgJSBsIF07XG5cdFx0Y29uc3QgcDIgPSBwb2ludHNbICggaW50UG9pbnQgKyAxICkgJSBsIF07XG5cblx0XHRpZiAoIHRoaXMuY2xvc2VkIHx8IGludFBvaW50ICsgMiA8IGwgKSB7XG5cblx0XHRcdHAzID0gcG9pbnRzWyAoIGludFBvaW50ICsgMiApICUgbCBdO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gZXh0cmFwb2xhdGUgbGFzdCBwb2ludFxuXHRcdFx0dG1wLnN1YlZlY3RvcnMoIHBvaW50c1sgbCAtIDEgXSwgcG9pbnRzWyBsIC0gMiBdICkuYWRkKCBwb2ludHNbIGwgLSAxIF0gKTtcblx0XHRcdHAzID0gdG1wO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmN1cnZlVHlwZSA9PT0gJ2NlbnRyaXBldGFsJyB8fCB0aGlzLmN1cnZlVHlwZSA9PT0gJ2Nob3JkYWwnICkge1xuXG5cdFx0XHQvLyBpbml0IENlbnRyaXBldGFsIC8gQ2hvcmRhbCBDYXRtdWxsLVJvbVxuXHRcdFx0Y29uc3QgcG93ID0gdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyA/IDAuNSA6IDAuMjU7XG5cdFx0XHRsZXQgZHQwID0gTWF0aC5wb3coIHAwLmRpc3RhbmNlVG9TcXVhcmVkKCBwMSApLCBwb3cgKTtcblx0XHRcdGxldCBkdDEgPSBNYXRoLnBvdyggcDEuZGlzdGFuY2VUb1NxdWFyZWQoIHAyICksIHBvdyApO1xuXHRcdFx0bGV0IGR0MiA9IE1hdGgucG93KCBwMi5kaXN0YW5jZVRvU3F1YXJlZCggcDMgKSwgcG93ICk7XG5cblx0XHRcdC8vIHNhZmV0eSBjaGVjayBmb3IgcmVwZWF0ZWQgcG9pbnRzXG5cdFx0XHRpZiAoIGR0MSA8IDFlLTQgKSBkdDEgPSAxLjA7XG5cdFx0XHRpZiAoIGR0MCA8IDFlLTQgKSBkdDAgPSBkdDE7XG5cdFx0XHRpZiAoIGR0MiA8IDFlLTQgKSBkdDIgPSBkdDE7XG5cblx0XHRcdHB4LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueCwgcDEueCwgcDIueCwgcDMueCwgZHQwLCBkdDEsIGR0MiApO1xuXHRcdFx0cHkuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKCBwMC55LCBwMS55LCBwMi55LCBwMy55LCBkdDAsIGR0MSwgZHQyICk7XG5cdFx0XHRwei5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oIHAwLnosIHAxLnosIHAyLnosIHAzLnosIGR0MCwgZHQxLCBkdDIgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuY3VydmVUeXBlID09PSAnY2F0bXVsbHJvbScgKSB7XG5cblx0XHRcdHB4LmluaXRDYXRtdWxsUm9tKCBwMC54LCBwMS54LCBwMi54LCBwMy54LCB0aGlzLnRlbnNpb24gKTtcblx0XHRcdHB5LmluaXRDYXRtdWxsUm9tKCBwMC55LCBwMS55LCBwMi55LCBwMy55LCB0aGlzLnRlbnNpb24gKTtcblx0XHRcdHB6LmluaXRDYXRtdWxsUm9tKCBwMC56LCBwMS56LCBwMi56LCBwMy56LCB0aGlzLnRlbnNpb24gKTtcblxuXHRcdH1cblxuXHRcdHBvaW50LnNldChcblx0XHRcdHB4LmNhbGMoIHdlaWdodCApLFxuXHRcdFx0cHkuY2FsYyggd2VpZ2h0ICksXG5cdFx0XHRwei5jYWxjKCB3ZWlnaHQgKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNvdXJjZS5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcG9pbnQgPSBzb3VyY2UucG9pbnRzWyBpIF07XG5cblx0XHRcdHRoaXMucG9pbnRzLnB1c2goIHBvaW50LmNsb25lKCkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuY2xvc2VkID0gc291cmNlLmNsb3NlZDtcblx0XHR0aGlzLmN1cnZlVHlwZSA9IHNvdXJjZS5jdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0gc291cmNlLnRlbnNpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludHNbIGkgXTtcblx0XHRcdGRhdGEucG9pbnRzLnB1c2goIHBvaW50LnRvQXJyYXkoKSApO1xuXG5cdFx0fVxuXG5cdFx0ZGF0YS5jbG9zZWQgPSB0aGlzLmNsb3NlZDtcblx0XHRkYXRhLmN1cnZlVHlwZSA9IHRoaXMuY3VydmVUeXBlO1xuXHRcdGRhdGEudGVuc2lvbiA9IHRoaXMudGVuc2lvbjtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLnBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcG9pbnQgPSBqc29uLnBvaW50c1sgaSBdO1xuXHRcdFx0dGhpcy5wb2ludHMucHVzaCggbmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkoIHBvaW50ICkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuY2xvc2VkID0ganNvbi5jbG9zZWQ7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSBqc29uLmN1cnZlVHlwZTtcblx0XHR0aGlzLnRlbnNpb24gPSBqc29uLnRlbnNpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzID0gdHJ1ZTtcblxuLyoqXG4gKiBCZXppZXIgQ3VydmVzIGZvcm11bGFzIG9idGFpbmVkIGZyb21cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0IlQzMlQTl6aWVyX2N1cnZlXG4gKi9cblxuZnVuY3Rpb24gQ2F0bXVsbFJvbSggdCwgcDAsIHAxLCBwMiwgcDMgKSB7XG5cblx0Y29uc3QgdjAgPSAoIHAyIC0gcDAgKSAqIDAuNTtcblx0Y29uc3QgdjEgPSAoIHAzIC0gcDEgKSAqIDAuNTtcblx0Y29uc3QgdDIgPSB0ICogdDtcblx0Y29uc3QgdDMgPSB0ICogdDI7XG5cdHJldHVybiAoIDIgKiBwMSAtIDIgKiBwMiArIHYwICsgdjEgKSAqIHQzICsgKCAtIDMgKiBwMSArIDMgKiBwMiAtIDIgKiB2MCAtIHYxICkgKiB0MiArIHYwICogdCArIHAxO1xuXG59XG5cbi8vXG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAwKCB0LCBwICkge1xuXG5cdGNvbnN0IGsgPSAxIC0gdDtcblx0cmV0dXJuIGsgKiBrICogcDtcblxufVxuXG5mdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMSggdCwgcCApIHtcblxuXHRyZXR1cm4gMiAqICggMSAtIHQgKSAqIHQgKiBwO1xuXG59XG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAyKCB0LCBwICkge1xuXG5cdHJldHVybiB0ICogdCAqIHA7XG5cbn1cblxuZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyKCB0LCBwMCwgcDEsIHAyICkge1xuXG5cdHJldHVybiBRdWFkcmF0aWNCZXppZXJQMCggdCwgcDAgKSArIFF1YWRyYXRpY0JlemllclAxKCB0LCBwMSApICtcblx0XHRRdWFkcmF0aWNCZXppZXJQMiggdCwgcDIgKTtcblxufVxuXG4vL1xuXG5mdW5jdGlvbiBDdWJpY0JlemllclAwKCB0LCBwICkge1xuXG5cdGNvbnN0IGsgPSAxIC0gdDtcblx0cmV0dXJuIGsgKiBrICogayAqIHA7XG5cbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMSggdCwgcCApIHtcblxuXHRjb25zdCBrID0gMSAtIHQ7XG5cdHJldHVybiAzICogayAqIGsgKiB0ICogcDtcblxufVxuXG5mdW5jdGlvbiBDdWJpY0JlemllclAyKCB0LCBwICkge1xuXG5cdHJldHVybiAzICogKCAxIC0gdCApICogdCAqIHQgKiBwO1xuXG59XG5cbmZ1bmN0aW9uIEN1YmljQmV6aWVyUDMoIHQsIHAgKSB7XG5cblx0cmV0dXJuIHQgKiB0ICogdCAqIHA7XG5cbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXIoIHQsIHAwLCBwMSwgcDIsIHAzICkge1xuXG5cdHJldHVybiBDdWJpY0JlemllclAwKCB0LCBwMCApICsgQ3ViaWNCZXppZXJQMSggdCwgcDEgKSArIEN1YmljQmV6aWVyUDIoIHQsIHAyICkgK1xuXHRcdEN1YmljQmV6aWVyUDMoIHQsIHAzICk7XG5cbn1cblxuY2xhc3MgQ3ViaWNCZXppZXJDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggdjAgPSBuZXcgVmVjdG9yMigpLCB2MSA9IG5ldyBWZWN0b3IyKCksIHYyID0gbmV3IFZlY3RvcjIoKSwgdjMgPSBuZXcgVmVjdG9yMigpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDdWJpY0JlemllckN1cnZlJztcblxuXHRcdHRoaXMudjAgPSB2MDtcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHRcdHRoaXMudjMgPSB2MztcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cblx0XHRjb25zdCB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0aGlzLnYyLCB2MyA9IHRoaXMudjM7XG5cblx0XHRwb2ludC5zZXQoXG5cdFx0XHRDdWJpY0JlemllciggdCwgdjAueCwgdjEueCwgdjIueCwgdjMueCApLFxuXHRcdFx0Q3ViaWNCZXppZXIoIHQsIHYwLnksIHYxLnksIHYyLnksIHYzLnkgKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTtcblx0XHR0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApO1xuXHRcdHRoaXMudjIuY29weSggc291cmNlLnYyICk7XG5cdFx0dGhpcy52My5jb3B5KCBzb3VyY2UudjMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYzID0gdGhpcy52My50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAgKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheSgganNvbi52MSApO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7XG5cdFx0dGhpcy52My5mcm9tQXJyYXkoIGpzb24udjMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5DdWJpY0JlemllckN1cnZlLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBDdWJpY0JlemllckN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggdjAgPSBuZXcgVmVjdG9yMygpLCB2MSA9IG5ldyBWZWN0b3IzKCksIHYyID0gbmV3IFZlY3RvcjMoKSwgdjMgPSBuZXcgVmVjdG9yMygpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDdWJpY0JlemllckN1cnZlMyc7XG5cblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2Mjtcblx0XHR0aGlzLnYzID0gdjM7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MiwgdjMgPSB0aGlzLnYzO1xuXG5cdFx0cG9pbnQuc2V0KFxuXHRcdFx0Q3ViaWNCZXppZXIoIHQsIHYwLngsIHYxLngsIHYyLngsIHYzLnggKSxcblx0XHRcdEN1YmljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55LCB2My55ICksXG5cdFx0XHRDdWJpY0JlemllciggdCwgdjAueiwgdjEueiwgdjIueiwgdjMueiApXG5cdFx0KTtcblxuXHRcdHJldHVybiBwb2ludDtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCApO1xuXHRcdHRoaXMudjEuY29weSggc291cmNlLnYxICk7XG5cdFx0dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTtcblx0XHR0aGlzLnYzLmNvcHkoIHNvdXJjZS52MyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEudjAgPSB0aGlzLnYwLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7XG5cdFx0ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpO1xuXHRcdGRhdGEudjMgPSB0aGlzLnYzLnRvQXJyYXkoKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLnYwLmZyb21BcnJheSgganNvbi52MCApO1xuXHRcdHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoIGpzb24udjIgKTtcblx0XHR0aGlzLnYzLmZyb21BcnJheSgganNvbi52MyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzID0gdHJ1ZTtcblxuY2xhc3MgTGluZUN1cnZlIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCB2MSA9IG5ldyBWZWN0b3IyKCksIHYyID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGluZUN1cnZlJztcblxuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0aWYgKCB0ID09PSAxICkge1xuXG5cdFx0XHRwb2ludC5jb3B5KCB0aGlzLnYyICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRwb2ludC5jb3B5KCB0aGlzLnYyICkuc3ViKCB0aGlzLnYxICk7XG5cdFx0XHRwb2ludC5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy52MSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblxuXHQvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXRcblx0Z2V0UG9pbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRQb2ludCggdSwgb3B0aW9uYWxUYXJnZXQgKTtcblxuXHR9XG5cblx0Z2V0VGFuZ2VudCggdCwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRjb25zdCB0YW5nZW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjIoKTtcblxuXHRcdHRhbmdlbnQuY29weSggdGhpcy52MiApLnN1YiggdGhpcy52MSApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0cmV0dXJuIHRhbmdlbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTtcblx0XHR0aGlzLnYyLmNvcHkoIHNvdXJjZS52MiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoIGpzb24udjEgKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkxpbmVDdXJ2ZS5wcm90b3R5cGUuaXNMaW5lQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBMaW5lQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCB2MSA9IG5ldyBWZWN0b3IzKCksIHYyID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGluZUN1cnZlMyc7XG5cdFx0dGhpcy5pc0xpbmVDdXJ2ZTMgPSB0cnVlO1xuXG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2MjtcblxuXHR9XG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0aWYgKCB0ID09PSAxICkge1xuXG5cdFx0XHRwb2ludC5jb3B5KCB0aGlzLnYyICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRwb2ludC5jb3B5KCB0aGlzLnYyICkuc3ViKCB0aGlzLnYxICk7XG5cdFx0XHRwb2ludC5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy52MSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblx0Ly8gTGluZSBjdXJ2ZSBpcyBsaW5lYXIsIHNvIHdlIGNhbiBvdmVyd3JpdGUgZGVmYXVsdCBnZXRQb2ludEF0XG5cdGdldFBvaW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHUsIG9wdGlvbmFsVGFyZ2V0ICk7XG5cblx0fVxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMudjEuY29weSggc291cmNlLnYxICk7XG5cdFx0dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoIGpzb24udjEgKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIFF1YWRyYXRpY0JlemllckN1cnZlIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCB2MCA9IG5ldyBWZWN0b3IyKCksIHYxID0gbmV3IFZlY3RvcjIoKSwgdjIgPSBuZXcgVmVjdG9yMigpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdRdWFkcmF0aWNCZXppZXJDdXJ2ZSc7XG5cblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2MjtcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cblx0XHRjb25zdCB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0aGlzLnYyO1xuXG5cdFx0cG9pbnQuc2V0KFxuXHRcdFx0UXVhZHJhdGljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54ICksXG5cdFx0XHRRdWFkcmF0aWNCZXppZXIoIHQsIHYwLnksIHYxLnksIHYyLnkgKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTtcblx0XHR0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApO1xuXHRcdHRoaXMudjIuY29weSggc291cmNlLnYyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAgKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheSgganNvbi52MSApO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuUXVhZHJhdGljQmV6aWVyQ3VydmUucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMgZXh0ZW5kcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoIHYwID0gbmV3IFZlY3RvcjMoKSwgdjEgPSBuZXcgVmVjdG9yMygpLCB2MiA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1F1YWRyYXRpY0JlemllckN1cnZlMyc7XG5cblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2MjtcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cblx0XHRjb25zdCB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0aGlzLnYyO1xuXG5cdFx0cG9pbnQuc2V0KFxuXHRcdFx0UXVhZHJhdGljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54ICksXG5cdFx0XHRRdWFkcmF0aWNCZXppZXIoIHQsIHYwLnksIHYxLnksIHYyLnkgKSxcblx0XHRcdFF1YWRyYXRpY0JlemllciggdCwgdjAueiwgdjEueiwgdjIueiApXG5cdFx0KTtcblxuXHRcdHJldHVybiBwb2ludDtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCApO1xuXHRcdHRoaXMudjEuY29weSggc291cmNlLnYxICk7XG5cdFx0dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLnYwLmZyb21BcnJheSgganNvbi52MCApO1xuXHRcdHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoIGpzb24udjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzID0gdHJ1ZTtcblxuY2xhc3MgU3BsaW5lQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoIHBvaW50cyA9IFtdICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTcGxpbmVDdXJ2ZSc7XG5cblx0XHR0aGlzLnBvaW50cyA9IHBvaW50cztcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cblx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcblx0XHRjb25zdCBwID0gKCBwb2ludHMubGVuZ3RoIC0gMSApICogdDtcblxuXHRcdGNvbnN0IGludFBvaW50ID0gTWF0aC5mbG9vciggcCApO1xuXHRcdGNvbnN0IHdlaWdodCA9IHAgLSBpbnRQb2ludDtcblxuXHRcdGNvbnN0IHAwID0gcG9pbnRzWyBpbnRQb2ludCA9PT0gMCA/IGludFBvaW50IDogaW50UG9pbnQgLSAxIF07XG5cdFx0Y29uc3QgcDEgPSBwb2ludHNbIGludFBvaW50IF07XG5cdFx0Y29uc3QgcDIgPSBwb2ludHNbIGludFBvaW50ID4gcG9pbnRzLmxlbmd0aCAtIDIgPyBwb2ludHMubGVuZ3RoIC0gMSA6IGludFBvaW50ICsgMSBdO1xuXHRcdGNvbnN0IHAzID0gcG9pbnRzWyBpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAzID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDIgXTtcblxuXHRcdHBvaW50LnNldChcblx0XHRcdENhdG11bGxSb20oIHdlaWdodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCApLFxuXHRcdFx0Q2F0bXVsbFJvbSggd2VpZ2h0LCBwMC55LCBwMS55LCBwMi55LCBwMy55IClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzb3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0gc291cmNlLnBvaW50c1sgaSBdO1xuXG5cdFx0XHR0aGlzLnBvaW50cy5wdXNoKCBwb2ludC5jbG9uZSgpICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludHNbIGkgXTtcblx0XHRcdGRhdGEucG9pbnRzLnB1c2goIHBvaW50LnRvQXJyYXkoKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBqc29uLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwb2ludCA9IGpzb24ucG9pbnRzWyBpIF07XG5cdFx0XHR0aGlzLnBvaW50cy5wdXNoKCBuZXcgVmVjdG9yMigpLmZyb21BcnJheSggcG9pbnQgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNwbGluZUN1cnZlLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlID0gdHJ1ZTtcblxudmFyIEN1cnZlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRBcmNDdXJ2ZTogQXJjQ3VydmUsXG5cdENhdG11bGxSb21DdXJ2ZTM6IENhdG11bGxSb21DdXJ2ZTMsXG5cdEN1YmljQmV6aWVyQ3VydmU6IEN1YmljQmV6aWVyQ3VydmUsXG5cdEN1YmljQmV6aWVyQ3VydmUzOiBDdWJpY0JlemllckN1cnZlMyxcblx0RWxsaXBzZUN1cnZlOiBFbGxpcHNlQ3VydmUsXG5cdExpbmVDdXJ2ZTogTGluZUN1cnZlLFxuXHRMaW5lQ3VydmUzOiBMaW5lQ3VydmUzLFxuXHRRdWFkcmF0aWNCZXppZXJDdXJ2ZTogUXVhZHJhdGljQmV6aWVyQ3VydmUsXG5cdFF1YWRyYXRpY0JlemllckN1cnZlMzogUXVhZHJhdGljQmV6aWVyQ3VydmUzLFxuXHRTcGxpbmVDdXJ2ZTogU3BsaW5lQ3VydmVcbn0pO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXHRDdXJ2ZWQgUGF0aCAtIGEgY3VydmUgcGF0aCBpcyBzaW1wbHkgYSBhcnJheSBvZiBjb25uZWN0ZWRcbiAqICBjdXJ2ZXMsIGJ1dCByZXRhaW5zIHRoZSBhcGkgb2YgYSBjdXJ2ZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5jbGFzcyBDdXJ2ZVBhdGggZXh0ZW5kcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0N1cnZlUGF0aCc7XG5cblx0XHR0aGlzLmN1cnZlcyA9IFtdO1xuXHRcdHRoaXMuYXV0b0Nsb3NlID0gZmFsc2U7IC8vIEF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBwYXRoXG5cblx0fVxuXG5cdGFkZCggY3VydmUgKSB7XG5cblx0XHR0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApO1xuXG5cdH1cblxuXHRjbG9zZVBhdGgoKSB7XG5cblx0XHQvLyBBZGQgYSBsaW5lIGN1cnZlIGlmIHN0YXJ0IGFuZCBlbmQgb2YgbGluZXMgYXJlIG5vdCBjb25uZWN0ZWRcblx0XHRjb25zdCBzdGFydFBvaW50ID0gdGhpcy5jdXJ2ZXNbIDAgXS5nZXRQb2ludCggMCApO1xuXHRcdGNvbnN0IGVuZFBvaW50ID0gdGhpcy5jdXJ2ZXNbIHRoaXMuY3VydmVzLmxlbmd0aCAtIDEgXS5nZXRQb2ludCggMSApO1xuXG5cdFx0aWYgKCAhIHN0YXJ0UG9pbnQuZXF1YWxzKCBlbmRQb2ludCApICkge1xuXG5cdFx0XHR0aGlzLmN1cnZlcy5wdXNoKCBuZXcgTGluZUN1cnZlKCBlbmRQb2ludCwgc3RhcnRQb2ludCApICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vIFRvIGdldCBhY2N1cmF0ZSBwb2ludCB3aXRoIHJlZmVyZW5jZSB0b1xuXHQvLyBlbnRpcmUgcGF0aCBkaXN0YW5jZSBhdCB0aW1lIHQsXG5cdC8vIGZvbGxvd2luZyBoYXMgdG8gYmUgZG9uZTpcblxuXHQvLyAxLiBMZW5ndGggb2YgZWFjaCBzdWIgcGF0aCBoYXZlIHRvIGJlIGtub3duXG5cdC8vIDIuIExvY2F0ZSBhbmQgaWRlbnRpZnkgdHlwZSBvZiBjdXJ2ZVxuXHQvLyAzLiBHZXQgdCBmb3IgdGhlIGN1cnZlXG5cdC8vIDQuIFJldHVybiBjdXJ2ZS5nZXRQb2ludEF0KHQnKVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRcdGNvbnN0IGQgPSB0ICogdGhpcy5nZXRMZW5ndGgoKTtcblx0XHRjb25zdCBjdXJ2ZUxlbmd0aHMgPSB0aGlzLmdldEN1cnZlTGVuZ3RocygpO1xuXHRcdGxldCBpID0gMDtcblxuXHRcdC8vIFRvIHRoaW5rIGFib3V0IGJvdW5kYXJpZXMgcG9pbnRzLlxuXG5cdFx0d2hpbGUgKCBpIDwgY3VydmVMZW5ndGhzLmxlbmd0aCApIHtcblxuXHRcdFx0aWYgKCBjdXJ2ZUxlbmd0aHNbIGkgXSA+PSBkICkge1xuXG5cdFx0XHRcdGNvbnN0IGRpZmYgPSBjdXJ2ZUxlbmd0aHNbIGkgXSAtIGQ7XG5cdFx0XHRcdGNvbnN0IGN1cnZlID0gdGhpcy5jdXJ2ZXNbIGkgXTtcblxuXHRcdFx0XHRjb25zdCBzZWdtZW50TGVuZ3RoID0gY3VydmUuZ2V0TGVuZ3RoKCk7XG5cdFx0XHRcdGNvbnN0IHUgPSBzZWdtZW50TGVuZ3RoID09PSAwID8gMCA6IDEgLSBkaWZmIC8gc2VnbWVudExlbmd0aDtcblxuXHRcdFx0XHRyZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpICsrO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0XHQvLyBsb29wIHdoZXJlIHN1bSAhPSAwLCBzdW0gPiBkICwgc3VtKzEgPGRcblxuXHR9XG5cblx0Ly8gV2UgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBUSFJFRS5DdXJ2ZSBnZXRQb2ludCgpIHdpdGggZ2V0TGVuZ3RoKCkgYmVjYXVzZSBpblxuXHQvLyBUSFJFRS5DdXJ2ZSwgZ2V0TGVuZ3RoKCkgZGVwZW5kcyBvbiBnZXRQb2ludCgpIGJ1dCBpbiBUSFJFRS5DdXJ2ZVBhdGhcblx0Ly8gZ2V0UG9pbnQoKSBkZXBlbmRzIG9uIGdldExlbmd0aFxuXG5cdGdldExlbmd0aCgpIHtcblxuXHRcdGNvbnN0IGxlbnMgPSB0aGlzLmdldEN1cnZlTGVuZ3RocygpO1xuXHRcdHJldHVybiBsZW5zWyBsZW5zLmxlbmd0aCAtIDEgXTtcblxuXHR9XG5cblx0Ly8gY2FjaGVMZW5ndGhzIG11c3QgYmUgcmVjYWxjdWxhdGVkLlxuXHR1cGRhdGVBcmNMZW5ndGhzKCkge1xuXG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5jYWNoZUxlbmd0aHMgPSBudWxsO1xuXHRcdHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XG5cblx0fVxuXG5cdC8vIENvbXB1dGUgbGVuZ3RocyBhbmQgY2FjaGUgdGhlbVxuXHQvLyBXZSBjYW5ub3Qgb3ZlcndyaXRlIGdldExlbmd0aHMoKSBiZWNhdXNlIFV0b1QgbWFwcGluZyB1c2VzIGl0LlxuXG5cdGdldEN1cnZlTGVuZ3RocygpIHtcblxuXHRcdC8vIFdlIHVzZSBjYWNoZSB2YWx1ZXMgaWYgY3VydmVzIGFuZCBjYWNoZSBhcnJheSBhcmUgc2FtZSBsZW5ndGhcblxuXHRcdGlmICggdGhpcy5jYWNoZUxlbmd0aHMgJiYgdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoID09PSB0aGlzLmN1cnZlcy5sZW5ndGggKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztcblxuXHRcdH1cblxuXHRcdC8vIEdldCBsZW5ndGggb2Ygc3ViLWN1cnZlXG5cdFx0Ly8gUHVzaCBzdW1zIGludG8gY2FjaGVkIGFycmF5XG5cblx0XHRjb25zdCBsZW5ndGhzID0gW107XG5cdFx0bGV0IHN1bXMgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0c3VtcyArPSB0aGlzLmN1cnZlc1sgaSBdLmdldExlbmd0aCgpO1xuXHRcdFx0bGVuZ3Rocy5wdXNoKCBzdW1zICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNhY2hlTGVuZ3RocyA9IGxlbmd0aHM7XG5cblx0XHRyZXR1cm4gbGVuZ3RocztcblxuXHR9XG5cblx0Z2V0U3BhY2VkUG9pbnRzKCBkaXZpc2lvbnMgPSA0MCApIHtcblxuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IGRpdmlzaW9uczsgaSArKyApIHtcblxuXHRcdFx0cG9pbnRzLnB1c2goIHRoaXMuZ2V0UG9pbnQoIGkgLyBkaXZpc2lvbnMgKSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmF1dG9DbG9zZSApIHtcblxuXHRcdFx0cG9pbnRzLnB1c2goIHBvaW50c1sgMCBdICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXG5cdH1cblxuXHRnZXRQb2ludHMoIGRpdmlzaW9ucyA9IDEyICkge1xuXG5cdFx0Y29uc3QgcG9pbnRzID0gW107XG5cdFx0bGV0IGxhc3Q7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGN1cnZlcyA9IHRoaXMuY3VydmVzOyBpIDwgY3VydmVzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY3VydmUgPSBjdXJ2ZXNbIGkgXTtcblx0XHRcdGNvbnN0IHJlc29sdXRpb24gPSAoIGN1cnZlICYmIGN1cnZlLmlzRWxsaXBzZUN1cnZlICkgPyBkaXZpc2lvbnMgKiAyXG5cdFx0XHRcdDogKCBjdXJ2ZSAmJiAoIGN1cnZlLmlzTGluZUN1cnZlIHx8IGN1cnZlLmlzTGluZUN1cnZlMyApICkgPyAxXG5cdFx0XHRcdFx0OiAoIGN1cnZlICYmIGN1cnZlLmlzU3BsaW5lQ3VydmUgKSA/IGRpdmlzaW9ucyAqIGN1cnZlLnBvaW50cy5sZW5ndGhcblx0XHRcdFx0XHRcdDogZGl2aXNpb25zO1xuXG5cdFx0XHRjb25zdCBwdHMgPSBjdXJ2ZS5nZXRQb2ludHMoIHJlc29sdXRpb24gKTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgcHRzLmxlbmd0aDsgaiArKyApIHtcblxuXHRcdFx0XHRjb25zdCBwb2ludCA9IHB0c1sgaiBdO1xuXG5cdFx0XHRcdGlmICggbGFzdCAmJiBsYXN0LmVxdWFscyggcG9pbnQgKSApIGNvbnRpbnVlOyAvLyBlbnN1cmVzIG5vIGNvbnNlY3V0aXZlIHBvaW50cyBhcmUgZHVwbGljYXRlc1xuXG5cdFx0XHRcdHBvaW50cy5wdXNoKCBwb2ludCApO1xuXHRcdFx0XHRsYXN0ID0gcG9pbnQ7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5hdXRvQ2xvc2UgJiYgcG9pbnRzLmxlbmd0aCA+IDEgJiYgISBwb2ludHNbIHBvaW50cy5sZW5ndGggLSAxIF0uZXF1YWxzKCBwb2ludHNbIDAgXSApICkge1xuXG5cdFx0XHRwb2ludHMucHVzaCggcG9pbnRzWyAwIF0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludHM7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jdXJ2ZXMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNvdXJjZS5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY3VydmUgPSBzb3VyY2UuY3VydmVzWyBpIF07XG5cblx0XHRcdHRoaXMuY3VydmVzLnB1c2goIGN1cnZlLmNsb25lKCkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuYXV0b0Nsb3NlID0gc291cmNlLmF1dG9DbG9zZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLmF1dG9DbG9zZSA9IHRoaXMuYXV0b0Nsb3NlO1xuXHRcdGRhdGEuY3VydmVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBjdXJ2ZSA9IHRoaXMuY3VydmVzWyBpIF07XG5cdFx0XHRkYXRhLmN1cnZlcy5wdXNoKCBjdXJ2ZS50b0pTT04oKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMuYXV0b0Nsb3NlID0ganNvbi5hdXRvQ2xvc2U7XG5cdFx0dGhpcy5jdXJ2ZXMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24uY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGN1cnZlID0ganNvbi5jdXJ2ZXNbIGkgXTtcblx0XHRcdHRoaXMuY3VydmVzLnB1c2goIG5ldyBDdXJ2ZXNbIGN1cnZlLnR5cGUgXSgpLmZyb21KU09OKCBjdXJ2ZSApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY2xhc3MgUGF0aCBleHRlbmRzIEN1cnZlUGF0aCB7XG5cblx0Y29uc3RydWN0b3IoIHBvaW50cyApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BhdGgnO1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0aWYgKCBwb2ludHMgKSB7XG5cblx0XHRcdHRoaXMuc2V0RnJvbVBvaW50cyggcG9pbnRzICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldEZyb21Qb2ludHMoIHBvaW50cyApIHtcblxuXHRcdHRoaXMubW92ZVRvKCBwb2ludHNbIDAgXS54LCBwb2ludHNbIDAgXS55ICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDEsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5saW5lVG8oIHBvaW50c1sgaSBdLngsIHBvaW50c1sgaSBdLnkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtb3ZlVG8oIHgsIHkgKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRQb2ludC5zZXQoIHgsIHkgKTsgLy8gVE9ETyBjb25zaWRlciByZWZlcmVuY2luZyB2ZWN0b3JzIGluc3RlYWQgb2YgY29weWluZz9cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRsaW5lVG8oIHgsIHkgKSB7XG5cblx0XHRjb25zdCBjdXJ2ZSA9IG5ldyBMaW5lQ3VydmUoIHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksIG5ldyBWZWN0b3IyKCB4LCB5ICkgKTtcblx0XHR0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApO1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KCB4LCB5ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cXVhZHJhdGljQ3VydmVUbyggYUNQeCwgYUNQeSwgYVgsIGFZICkge1xuXG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUoXG5cdFx0XHR0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGFDUHgsIGFDUHkgKSxcblx0XHRcdG5ldyBWZWN0b3IyKCBhWCwgYVkgKVxuXHRcdCk7XG5cblx0XHR0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApO1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KCBhWCwgYVkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRiZXppZXJDdXJ2ZVRvKCBhQ1AxeCwgYUNQMXksIGFDUDJ4LCBhQ1AyeSwgYVgsIGFZICkge1xuXG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgQ3ViaWNCZXppZXJDdXJ2ZShcblx0XHRcdHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksXG5cdFx0XHRuZXcgVmVjdG9yMiggYUNQMXgsIGFDUDF5ICksXG5cdFx0XHRuZXcgVmVjdG9yMiggYUNQMngsIGFDUDJ5ICksXG5cdFx0XHRuZXcgVmVjdG9yMiggYVgsIGFZIClcblx0XHQpO1xuXG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHRcdHRoaXMuY3VycmVudFBvaW50LnNldCggYVgsIGFZICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3BsaW5lVGhydSggcHRzIC8qQXJyYXkgb2YgVmVjdG9yKi8gKSB7XG5cblx0XHRjb25zdCBucHRzID0gWyB0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpIF0uY29uY2F0KCBwdHMgKTtcblxuXHRcdGNvbnN0IGN1cnZlID0gbmV3IFNwbGluZUN1cnZlKCBucHRzICk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHRcdHRoaXMuY3VycmVudFBvaW50LmNvcHkoIHB0c1sgcHRzLmxlbmd0aCAtIDEgXSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFyYyggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkge1xuXG5cdFx0Y29uc3QgeDAgPSB0aGlzLmN1cnJlbnRQb2ludC54O1xuXHRcdGNvbnN0IHkwID0gdGhpcy5jdXJyZW50UG9pbnQueTtcblxuXHRcdHRoaXMuYWJzYXJjKCBhWCArIHgwLCBhWSArIHkwLCBhUmFkaXVzLFxuXHRcdFx0YVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFic2FyYyggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkge1xuXG5cdFx0dGhpcy5hYnNlbGxpcHNlKCBhWCwgYVksIGFSYWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlbGxpcHNlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHtcblxuXHRcdGNvbnN0IHgwID0gdGhpcy5jdXJyZW50UG9pbnQueDtcblx0XHRjb25zdCB5MCA9IHRoaXMuY3VycmVudFBvaW50Lnk7XG5cblx0XHR0aGlzLmFic2VsbGlwc2UoIGFYICsgeDAsIGFZICsgeTAsIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFic2VsbGlwc2UoIGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uICkge1xuXG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgRWxsaXBzZUN1cnZlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApO1xuXG5cdFx0aWYgKCB0aGlzLmN1cnZlcy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHQvLyBpZiBhIHByZXZpb3VzIGN1cnZlIGlzIHByZXNlbnQsIGF0dGVtcHQgdG8gam9pblxuXHRcdFx0Y29uc3QgZmlyc3RQb2ludCA9IGN1cnZlLmdldFBvaW50KCAwICk7XG5cblx0XHRcdGlmICggISBmaXJzdFBvaW50LmVxdWFscyggdGhpcy5jdXJyZW50UG9pbnQgKSApIHtcblxuXHRcdFx0XHR0aGlzLmxpbmVUbyggZmlyc3RQb2ludC54LCBmaXJzdFBvaW50LnkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHRcdGNvbnN0IGxhc3RQb2ludCA9IGN1cnZlLmdldFBvaW50KCAxICk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuY29weSggbGFzdFBvaW50ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmN1cnJlbnRQb2ludC5jb3B5KCBzb3VyY2UuY3VycmVudFBvaW50ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5jdXJyZW50UG9pbnQgPSB0aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KCBqc29uLmN1cnJlbnRQb2ludCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIFNoYXBlIGV4dGVuZHMgUGF0aCB7XG5cblx0Y29uc3RydWN0b3IoIHBvaW50cyApIHtcblxuXHRcdHN1cGVyKCBwb2ludHMgKTtcblxuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlJztcblxuXHRcdHRoaXMuaG9sZXMgPSBbXTtcblxuXHR9XG5cblx0Z2V0UG9pbnRzSG9sZXMoIGRpdmlzaW9ucyApIHtcblxuXHRcdGNvbnN0IGhvbGVzUHRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGhvbGVzUHRzWyBpIF0gPSB0aGlzLmhvbGVzWyBpIF0uZ2V0UG9pbnRzKCBkaXZpc2lvbnMgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBob2xlc1B0cztcblxuXHR9XG5cblx0Ly8gZ2V0IHBvaW50cyBvZiBzaGFwZSBhbmQgaG9sZXMgKGtleXBvaW50cyBiYXNlZCBvbiBzZWdtZW50cyBwYXJhbWV0ZXIpXG5cblx0ZXh0cmFjdFBvaW50cyggZGl2aXNpb25zICkge1xuXG5cdFx0cmV0dXJuIHtcblxuXHRcdFx0c2hhcGU6IHRoaXMuZ2V0UG9pbnRzKCBkaXZpc2lvbnMgKSxcblx0XHRcdGhvbGVzOiB0aGlzLmdldFBvaW50c0hvbGVzKCBkaXZpc2lvbnMgKVxuXG5cdFx0fTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmhvbGVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzb3VyY2UuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgaG9sZSA9IHNvdXJjZS5ob2xlc1sgaSBdO1xuXG5cdFx0XHR0aGlzLmhvbGVzLnB1c2goIGhvbGUuY2xvbmUoKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRkYXRhLmhvbGVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGhvbGUgPSB0aGlzLmhvbGVzWyBpIF07XG5cdFx0XHRkYXRhLmhvbGVzLnB1c2goIGhvbGUudG9KU09OKCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLnV1aWQgPSBqc29uLnV1aWQ7XG5cdFx0dGhpcy5ob2xlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBob2xlID0ganNvbi5ob2xlc1sgaSBdO1xuXHRcdFx0dGhpcy5ob2xlcy5wdXNoKCBuZXcgUGF0aCgpLmZyb21KU09OKCBob2xlICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG4vKipcbiAqIFBvcnQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L2VhcmN1dCAodjIuMi4yKVxuICovXG5cbmNvbnN0IEVhcmN1dCA9IHtcblxuXHR0cmlhbmd1bGF0ZTogZnVuY3Rpb24gKCBkYXRhLCBob2xlSW5kaWNlcywgZGltID0gMiApIHtcblxuXHRcdGNvbnN0IGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoO1xuXHRcdGNvbnN0IG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1sgMCBdICogZGltIDogZGF0YS5sZW5ndGg7XG5cdFx0bGV0IG91dGVyTm9kZSA9IGxpbmtlZExpc3QoIGRhdGEsIDAsIG91dGVyTGVuLCBkaW0sIHRydWUgKTtcblx0XHRjb25zdCB0cmlhbmdsZXMgPSBbXTtcblxuXHRcdGlmICggISBvdXRlck5vZGUgfHwgb3V0ZXJOb2RlLm5leHQgPT09IG91dGVyTm9kZS5wcmV2ICkgcmV0dXJuIHRyaWFuZ2xlcztcblxuXHRcdGxldCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBpbnZTaXplO1xuXG5cdFx0aWYgKCBoYXNIb2xlcyApIG91dGVyTm9kZSA9IGVsaW1pbmF0ZUhvbGVzKCBkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0gKTtcblxuXHRcdC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuXHRcdGlmICggZGF0YS5sZW5ndGggPiA4MCAqIGRpbSApIHtcblxuXHRcdFx0bWluWCA9IG1heFggPSBkYXRhWyAwIF07XG5cdFx0XHRtaW5ZID0gbWF4WSA9IGRhdGFbIDEgXTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0gKSB7XG5cblx0XHRcdFx0eCA9IGRhdGFbIGkgXTtcblx0XHRcdFx0eSA9IGRhdGFbIGkgKyAxIF07XG5cdFx0XHRcdGlmICggeCA8IG1pblggKSBtaW5YID0geDtcblx0XHRcdFx0aWYgKCB5IDwgbWluWSApIG1pblkgPSB5O1xuXHRcdFx0XHRpZiAoIHggPiBtYXhYICkgbWF4WCA9IHg7XG5cdFx0XHRcdGlmICggeSA+IG1heFkgKSBtYXhZID0geTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxuXHRcdFx0aW52U2l6ZSA9IE1hdGgubWF4KCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkgKTtcblx0XHRcdGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xuXG5cdFx0fVxuXG5cdFx0ZWFyY3V0TGlua2VkKCBvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7XG5cblx0XHRyZXR1cm4gdHJpYW5nbGVzO1xuXG5cdH1cblxufTtcblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KCBkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSApIHtcblxuXHRsZXQgaSwgbGFzdDtcblxuXHRpZiAoIGNsb2Nrd2lzZSA9PT0gKCBzaWduZWRBcmVhKCBkYXRhLCBzdGFydCwgZW5kLCBkaW0gKSA+IDAgKSApIHtcblxuXHRcdGZvciAoIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0gKSBsYXN0ID0gaW5zZXJ0Tm9kZSggaSwgZGF0YVsgaSBdLCBkYXRhWyBpICsgMSBdLCBsYXN0ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdGZvciAoIGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltICkgbGFzdCA9IGluc2VydE5vZGUoIGksIGRhdGFbIGkgXSwgZGF0YVsgaSArIDEgXSwgbGFzdCApO1xuXG5cdH1cblxuXHRpZiAoIGxhc3QgJiYgZXF1YWxzKCBsYXN0LCBsYXN0Lm5leHQgKSApIHtcblxuXHRcdHJlbW92ZU5vZGUoIGxhc3QgKTtcblx0XHRsYXN0ID0gbGFzdC5uZXh0O1xuXG5cdH1cblxuXHRyZXR1cm4gbGFzdDtcblxufVxuXG4vLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuZnVuY3Rpb24gZmlsdGVyUG9pbnRzKCBzdGFydCwgZW5kICkge1xuXG5cdGlmICggISBzdGFydCApIHJldHVybiBzdGFydDtcblx0aWYgKCAhIGVuZCApIGVuZCA9IHN0YXJ0O1xuXG5cdGxldCBwID0gc3RhcnQsXG5cdFx0YWdhaW47XG5cdGRvIHtcblxuXHRcdGFnYWluID0gZmFsc2U7XG5cblx0XHRpZiAoICEgcC5zdGVpbmVyICYmICggZXF1YWxzKCBwLCBwLm5leHQgKSB8fCBhcmVhKCBwLnByZXYsIHAsIHAubmV4dCApID09PSAwICkgKSB7XG5cblx0XHRcdHJlbW92ZU5vZGUoIHAgKTtcblx0XHRcdHAgPSBlbmQgPSBwLnByZXY7XG5cdFx0XHRpZiAoIHAgPT09IHAubmV4dCApIGJyZWFrO1xuXHRcdFx0YWdhaW4gPSB0cnVlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cCA9IHAubmV4dDtcblxuXHRcdH1cblxuXHR9IHdoaWxlICggYWdhaW4gfHwgcCAhPT0gZW5kICk7XG5cblx0cmV0dXJuIGVuZDtcblxufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZCggZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcyApIHtcblxuXHRpZiAoICEgZWFyICkgcmV0dXJuO1xuXG5cdC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcblx0aWYgKCAhIHBhc3MgJiYgaW52U2l6ZSApIGluZGV4Q3VydmUoIGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSApO1xuXG5cdGxldCBzdG9wID0gZWFyLFxuXHRcdHByZXYsIG5leHQ7XG5cblx0Ly8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG5cdHdoaWxlICggZWFyLnByZXYgIT09IGVhci5uZXh0ICkge1xuXG5cdFx0cHJldiA9IGVhci5wcmV2O1xuXHRcdG5leHQgPSBlYXIubmV4dDtcblxuXHRcdGlmICggaW52U2l6ZSA/IGlzRWFySGFzaGVkKCBlYXIsIG1pblgsIG1pblksIGludlNpemUgKSA6IGlzRWFyKCBlYXIgKSApIHtcblxuXHRcdFx0Ly8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKCBwcmV2LmkgLyBkaW0gKTtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKCBlYXIuaSAvIGRpbSApO1xuXHRcdFx0dHJpYW5nbGVzLnB1c2goIG5leHQuaSAvIGRpbSApO1xuXG5cdFx0XHRyZW1vdmVOb2RlKCBlYXIgKTtcblxuXHRcdFx0Ly8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuXHRcdFx0ZWFyID0gbmV4dC5uZXh0O1xuXHRcdFx0c3RvcCA9IG5leHQubmV4dDtcblxuXHRcdFx0Y29udGludWU7XG5cblx0XHR9XG5cblx0XHRlYXIgPSBuZXh0O1xuXG5cdFx0Ly8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcblx0XHRpZiAoIGVhciA9PT0gc3RvcCApIHtcblxuXHRcdFx0Ly8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cblx0XHRcdGlmICggISBwYXNzICkge1xuXG5cdFx0XHRcdGVhcmN1dExpbmtlZCggZmlsdGVyUG9pbnRzKCBlYXIgKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEgKTtcblxuXHRcdFx0XHQvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBwYXNzID09PSAxICkge1xuXG5cdFx0XHRcdGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoIGZpbHRlclBvaW50cyggZWFyICksIHRyaWFuZ2xlcywgZGltICk7XG5cdFx0XHRcdGVhcmN1dExpbmtlZCggZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgMiApO1xuXG5cdFx0XHRcdC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG5cblx0XHRcdH0gZWxzZSBpZiAoIHBhc3MgPT09IDIgKSB7XG5cblx0XHRcdFx0c3BsaXRFYXJjdXQoIGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuLy8gY2hlY2sgd2hldGhlciBhIHBvbHlnb24gbm9kZSBmb3JtcyBhIHZhbGlkIGVhciB3aXRoIGFkamFjZW50IG5vZGVzXG5mdW5jdGlvbiBpc0VhciggZWFyICkge1xuXG5cdGNvbnN0IGEgPSBlYXIucHJldixcblx0XHRiID0gZWFyLFxuXHRcdGMgPSBlYXIubmV4dDtcblxuXHRpZiAoIGFyZWEoIGEsIGIsIGMgKSA+PSAwICkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG5cdC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG5cdGxldCBwID0gZWFyLm5leHQubmV4dDtcblxuXHR3aGlsZSAoIHAgIT09IGVhci5wcmV2ICkge1xuXG5cdFx0aWYgKCBwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55ICkgJiZcblx0XHRcdGFyZWEoIHAucHJldiwgcCwgcC5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTtcblx0XHRwID0gcC5uZXh0O1xuXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcblxufVxuXG5mdW5jdGlvbiBpc0Vhckhhc2hlZCggZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplICkge1xuXG5cdGNvbnN0IGEgPSBlYXIucHJldixcblx0XHRiID0gZWFyLFxuXHRcdGMgPSBlYXIubmV4dDtcblxuXHRpZiAoIGFyZWEoIGEsIGIsIGMgKSA+PSAwICkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG5cdC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG5cdGNvbnN0IG1pblRYID0gYS54IDwgYi54ID8gKCBhLnggPCBjLnggPyBhLnggOiBjLnggKSA6ICggYi54IDwgYy54ID8gYi54IDogYy54ICksXG5cdFx0bWluVFkgPSBhLnkgPCBiLnkgPyAoIGEueSA8IGMueSA/IGEueSA6IGMueSApIDogKCBiLnkgPCBjLnkgPyBiLnkgOiBjLnkgKSxcblx0XHRtYXhUWCA9IGEueCA+IGIueCA/ICggYS54ID4gYy54ID8gYS54IDogYy54ICkgOiAoIGIueCA+IGMueCA/IGIueCA6IGMueCApLFxuXHRcdG1heFRZID0gYS55ID4gYi55ID8gKCBhLnkgPiBjLnkgPyBhLnkgOiBjLnkgKSA6ICggYi55ID4gYy55ID8gYi55IDogYy55ICk7XG5cblx0Ly8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcblx0Y29uc3QgbWluWiA9IHpPcmRlciggbWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplICksXG5cdFx0bWF4WiA9IHpPcmRlciggbWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7XG5cblx0bGV0IHAgPSBlYXIucHJldlosXG5cdFx0biA9IGVhci5uZXh0WjtcblxuXHQvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBib3RoIGRpcmVjdGlvbnNcblx0d2hpbGUgKCBwICYmIHAueiA+PSBtaW5aICYmIG4gJiYgbi56IDw9IG1heFogKSB7XG5cblx0XHRpZiAoIHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG5cdFx0XHRwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55ICkgJiZcblx0XHRcdGFyZWEoIHAucHJldiwgcCwgcC5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTtcblx0XHRwID0gcC5wcmV2WjtcblxuXHRcdGlmICggbiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcblx0XHRcdHBvaW50SW5UcmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkgKSAmJlxuXHRcdFx0YXJlYSggbi5wcmV2LCBuLCBuLm5leHQgKSA+PSAwICkgcmV0dXJuIGZhbHNlO1xuXHRcdG4gPSBuLm5leHRaO1xuXG5cdH1cblxuXHQvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlclxuXHR3aGlsZSAoIHAgJiYgcC56ID49IG1pblogKSB7XG5cblx0XHRpZiAoIHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG5cdFx0XHRwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55ICkgJiZcblx0XHRcdGFyZWEoIHAucHJldiwgcCwgcC5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTtcblx0XHRwID0gcC5wcmV2WjtcblxuXHR9XG5cblx0Ly8gbG9vayBmb3IgcmVtYWluaW5nIHBvaW50cyBpbiBpbmNyZWFzaW5nIHotb3JkZXJcblx0d2hpbGUgKCBuICYmIG4ueiA8PSBtYXhaICkge1xuXG5cdFx0aWYgKCBuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuXHRcdFx0cG9pbnRJblRyaWFuZ2xlKCBhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSApICYmXG5cdFx0XHRhcmVhKCBuLnByZXYsIG4sIG4ubmV4dCApID49IDAgKSByZXR1cm4gZmFsc2U7XG5cdFx0biA9IG4ubmV4dFo7XG5cblx0fVxuXG5cdHJldHVybiB0cnVlO1xuXG59XG5cbi8vIGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1pbnRlcnNlY3Rpb25zXG5mdW5jdGlvbiBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKCBzdGFydCwgdHJpYW5nbGVzLCBkaW0gKSB7XG5cblx0bGV0IHAgPSBzdGFydDtcblx0ZG8ge1xuXG5cdFx0Y29uc3QgYSA9IHAucHJldixcblx0XHRcdGIgPSBwLm5leHQubmV4dDtcblxuXHRcdGlmICggISBlcXVhbHMoIGEsIGIgKSAmJiBpbnRlcnNlY3RzKCBhLCBwLCBwLm5leHQsIGIgKSAmJiBsb2NhbGx5SW5zaWRlKCBhLCBiICkgJiYgbG9jYWxseUluc2lkZSggYiwgYSApICkge1xuXG5cdFx0XHR0cmlhbmdsZXMucHVzaCggYS5pIC8gZGltICk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaCggcC5pIC8gZGltICk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaCggYi5pIC8gZGltICk7XG5cblx0XHRcdC8vIHJlbW92ZSB0d28gbm9kZXMgaW52b2x2ZWRcblx0XHRcdHJlbW92ZU5vZGUoIHAgKTtcblx0XHRcdHJlbW92ZU5vZGUoIHAubmV4dCApO1xuXG5cdFx0XHRwID0gc3RhcnQgPSBiO1xuXG5cdFx0fVxuXG5cdFx0cCA9IHAubmV4dDtcblxuXHR9IHdoaWxlICggcCAhPT0gc3RhcnQgKTtcblxuXHRyZXR1cm4gZmlsdGVyUG9pbnRzKCBwICk7XG5cbn1cblxuLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1bGF0ZSB0aGVtIGluZGVwZW5kZW50bHlcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KCBzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKSB7XG5cblx0Ly8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cblx0bGV0IGEgPSBzdGFydDtcblx0ZG8ge1xuXG5cdFx0bGV0IGIgPSBhLm5leHQubmV4dDtcblx0XHR3aGlsZSAoIGIgIT09IGEucHJldiApIHtcblxuXHRcdFx0aWYgKCBhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoIGEsIGIgKSApIHtcblxuXHRcdFx0XHQvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkgdGhlIGRpYWdvbmFsXG5cdFx0XHRcdGxldCBjID0gc3BsaXRQb2x5Z29uKCBhLCBiICk7XG5cblx0XHRcdFx0Ly8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcblx0XHRcdFx0YSA9IGZpbHRlclBvaW50cyggYSwgYS5uZXh0ICk7XG5cdFx0XHRcdGMgPSBmaWx0ZXJQb2ludHMoIGMsIGMubmV4dCApO1xuXG5cdFx0XHRcdC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG5cdFx0XHRcdGVhcmN1dExpbmtlZCggYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKTtcblx0XHRcdFx0ZWFyY3V0TGlua2VkKCBjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdH1cblxuXHRcdFx0YiA9IGIubmV4dDtcblxuXHRcdH1cblxuXHRcdGEgPSBhLm5leHQ7XG5cblx0fSB3aGlsZSAoIGEgIT09IHN0YXJ0ICk7XG5cbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoIGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSApIHtcblxuXHRjb25zdCBxdWV1ZSA9IFtdO1xuXHRsZXQgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xuXG5cdGZvciAoIGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkgKysgKSB7XG5cblx0XHRzdGFydCA9IGhvbGVJbmRpY2VzWyBpIF0gKiBkaW07XG5cdFx0ZW5kID0gaSA8IGxlbiAtIDEgPyBob2xlSW5kaWNlc1sgaSArIDEgXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuXHRcdGxpc3QgPSBsaW5rZWRMaXN0KCBkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlICk7XG5cdFx0aWYgKCBsaXN0ID09PSBsaXN0Lm5leHQgKSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuXHRcdHF1ZXVlLnB1c2goIGdldExlZnRtb3N0KCBsaXN0ICkgKTtcblxuXHR9XG5cblx0cXVldWUuc29ydCggY29tcGFyZVggKTtcblxuXHQvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuXHRmb3IgKCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdGVsaW1pbmF0ZUhvbGUoIHF1ZXVlWyBpIF0sIG91dGVyTm9kZSApO1xuXHRcdG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyggb3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCApO1xuXG5cdH1cblxuXHRyZXR1cm4gb3V0ZXJOb2RlO1xuXG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKCBhLCBiICkge1xuXG5cdHJldHVybiBhLnggLSBiLng7XG5cbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKCBob2xlLCBvdXRlck5vZGUgKSB7XG5cblx0b3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoIGhvbGUsIG91dGVyTm9kZSApO1xuXHRpZiAoIG91dGVyTm9kZSApIHtcblxuXHRcdGNvbnN0IGIgPSBzcGxpdFBvbHlnb24oIG91dGVyTm9kZSwgaG9sZSApO1xuXG5cdFx0Ly8gZmlsdGVyIGNvbGxpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG5cdFx0ZmlsdGVyUG9pbnRzKCBvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0ICk7XG5cdFx0ZmlsdGVyUG9pbnRzKCBiLCBiLm5leHQgKTtcblxuXHR9XG5cbn1cblxuLy8gRGF2aWQgRWJlcmx5J3MgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGEgYnJpZGdlIGJldHdlZW4gaG9sZSBhbmQgb3V0ZXIgcG9seWdvblxuZnVuY3Rpb24gZmluZEhvbGVCcmlkZ2UoIGhvbGUsIG91dGVyTm9kZSApIHtcblxuXHRsZXQgcCA9IG91dGVyTm9kZTtcblx0Y29uc3QgaHggPSBob2xlLng7XG5cdGNvbnN0IGh5ID0gaG9sZS55O1xuXHRsZXQgcXggPSAtIEluZmluaXR5LCBtO1xuXG5cdC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcblx0Ly8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3RlbnRpYWwgY29ubmVjdGlvbiBwb2ludFxuXHRkbyB7XG5cblx0XHRpZiAoIGh5IDw9IHAueSAmJiBoeSA+PSBwLm5leHQueSAmJiBwLm5leHQueSAhPT0gcC55ICkge1xuXG5cdFx0XHRjb25zdCB4ID0gcC54ICsgKCBoeSAtIHAueSApICogKCBwLm5leHQueCAtIHAueCApIC8gKCBwLm5leHQueSAtIHAueSApO1xuXHRcdFx0aWYgKCB4IDw9IGh4ICYmIHggPiBxeCApIHtcblxuXHRcdFx0XHRxeCA9IHg7XG5cdFx0XHRcdGlmICggeCA9PT0gaHggKSB7XG5cblx0XHRcdFx0XHRpZiAoIGh5ID09PSBwLnkgKSByZXR1cm4gcDtcblx0XHRcdFx0XHRpZiAoIGh5ID09PSBwLm5leHQueSApIHJldHVybiBwLm5leHQ7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IG91dGVyTm9kZSApO1xuXG5cdGlmICggISBtICkgcmV0dXJuIG51bGw7XG5cblx0aWYgKCBoeCA9PT0gcXggKSByZXR1cm4gbTsgLy8gaG9sZSB0b3VjaGVzIG91dGVyIHNlZ21lbnQ7IHBpY2sgbGVmdG1vc3QgZW5kcG9pbnRcblxuXHQvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG5cdC8vIGlmIHRoZXJlIGFyZSBubyBwb2ludHMgZm91bmQsIHdlIGhhdmUgYSB2YWxpZCBjb25uZWN0aW9uO1xuXHQvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG5cdGNvbnN0IHN0b3AgPSBtLFxuXHRcdG14ID0gbS54LFxuXHRcdG15ID0gbS55O1xuXHRsZXQgdGFuTWluID0gSW5maW5pdHksIHRhbjtcblxuXHRwID0gbTtcblxuXHRkbyB7XG5cblx0XHRpZiAoIGh4ID49IHAueCAmJiBwLnggPj0gbXggJiYgaHggIT09IHAueCAmJlxuXHRcdFx0XHRwb2ludEluVHJpYW5nbGUoIGh5IDwgbXkgPyBoeCA6IHF4LCBoeSwgbXgsIG15LCBoeSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55ICkgKSB7XG5cblx0XHRcdHRhbiA9IE1hdGguYWJzKCBoeSAtIHAueSApIC8gKCBoeCAtIHAueCApOyAvLyB0YW5nZW50aWFsXG5cblx0XHRcdGlmICggbG9jYWxseUluc2lkZSggcCwgaG9sZSApICYmICggdGFuIDwgdGFuTWluIHx8ICggdGFuID09PSB0YW5NaW4gJiYgKCBwLnggPiBtLnggfHwgKCBwLnggPT09IG0ueCAmJiBzZWN0b3JDb250YWluc1NlY3RvciggbSwgcCApICkgKSApICkgKSB7XG5cblx0XHRcdFx0bSA9IHA7XG5cdFx0XHRcdHRhbk1pbiA9IHRhbjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cCA9IHAubmV4dDtcblxuXHR9IHdoaWxlICggcCAhPT0gc3RvcCApO1xuXG5cdHJldHVybiBtO1xuXG59XG5cbi8vIHdoZXRoZXIgc2VjdG9yIGluIHZlcnRleCBtIGNvbnRhaW5zIHNlY3RvciBpbiB2ZXJ0ZXggcCBpbiB0aGUgc2FtZSBjb29yZGluYXRlc1xuZnVuY3Rpb24gc2VjdG9yQ29udGFpbnNTZWN0b3IoIG0sIHAgKSB7XG5cblx0cmV0dXJuIGFyZWEoIG0ucHJldiwgbSwgcC5wcmV2ICkgPCAwICYmIGFyZWEoIHAubmV4dCwgbSwgbS5uZXh0ICkgPCAwO1xuXG59XG5cbi8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbmZ1bmN0aW9uIGluZGV4Q3VydmUoIHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplICkge1xuXG5cdGxldCBwID0gc3RhcnQ7XG5cdGRvIHtcblxuXHRcdGlmICggcC56ID09PSBudWxsICkgcC56ID0gek9yZGVyKCBwLngsIHAueSwgbWluWCwgbWluWSwgaW52U2l6ZSApO1xuXHRcdHAucHJldlogPSBwLnByZXY7XG5cdFx0cC5uZXh0WiA9IHAubmV4dDtcblx0XHRwID0gcC5uZXh0O1xuXG5cdH0gd2hpbGUgKCBwICE9PSBzdGFydCApO1xuXG5cdHAucHJldloubmV4dFogPSBudWxsO1xuXHRwLnByZXZaID0gbnVsbDtcblxuXHRzb3J0TGlua2VkKCBwICk7XG5cbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKCBsaXN0ICkge1xuXG5cdGxldCBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcblx0XHRpblNpemUgPSAxO1xuXG5cdGRvIHtcblxuXHRcdHAgPSBsaXN0O1xuXHRcdGxpc3QgPSBudWxsO1xuXHRcdHRhaWwgPSBudWxsO1xuXHRcdG51bU1lcmdlcyA9IDA7XG5cblx0XHR3aGlsZSAoIHAgKSB7XG5cblx0XHRcdG51bU1lcmdlcyArKztcblx0XHRcdHEgPSBwO1xuXHRcdFx0cFNpemUgPSAwO1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBpblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0cFNpemUgKys7XG5cdFx0XHRcdHEgPSBxLm5leHRaO1xuXHRcdFx0XHRpZiAoICEgcSApIGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHRcdHFTaXplID0gaW5TaXplO1xuXG5cdFx0XHR3aGlsZSAoIHBTaXplID4gMCB8fCAoIHFTaXplID4gMCAmJiBxICkgKSB7XG5cblx0XHRcdFx0aWYgKCBwU2l6ZSAhPT0gMCAmJiAoIHFTaXplID09PSAwIHx8ICEgcSB8fCBwLnogPD0gcS56ICkgKSB7XG5cblx0XHRcdFx0XHRlID0gcDtcblx0XHRcdFx0XHRwID0gcC5uZXh0Wjtcblx0XHRcdFx0XHRwU2l6ZSAtLTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0ZSA9IHE7XG5cdFx0XHRcdFx0cSA9IHEubmV4dFo7XG5cdFx0XHRcdFx0cVNpemUgLS07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdGFpbCApIHRhaWwubmV4dFogPSBlO1xuXHRcdFx0XHRlbHNlIGxpc3QgPSBlO1xuXG5cdFx0XHRcdGUucHJldlogPSB0YWlsO1xuXHRcdFx0XHR0YWlsID0gZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRwID0gcTtcblxuXHRcdH1cblxuXHRcdHRhaWwubmV4dFogPSBudWxsO1xuXHRcdGluU2l6ZSAqPSAyO1xuXG5cdH0gd2hpbGUgKCBudW1NZXJnZXMgPiAxICk7XG5cblx0cmV0dXJuIGxpc3Q7XG5cbn1cblxuLy8gei1vcmRlciBvZiBhIHBvaW50IGdpdmVuIGNvb3JkcyBhbmQgaW52ZXJzZSBvZiB0aGUgbG9uZ2VyIHNpZGUgb2YgZGF0YSBiYm94XG5mdW5jdGlvbiB6T3JkZXIoIHgsIHksIG1pblgsIG1pblksIGludlNpemUgKSB7XG5cblx0Ly8gY29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciByYW5nZVxuXHR4ID0gMzI3NjcgKiAoIHggLSBtaW5YICkgKiBpbnZTaXplO1xuXHR5ID0gMzI3NjcgKiAoIHkgLSBtaW5ZICkgKiBpbnZTaXplO1xuXG5cdHggPSAoIHggfCAoIHggPDwgOCApICkgJiAweDAwRkYwMEZGO1xuXHR4ID0gKCB4IHwgKCB4IDw8IDQgKSApICYgMHgwRjBGMEYwRjtcblx0eCA9ICggeCB8ICggeCA8PCAyICkgKSAmIDB4MzMzMzMzMzM7XG5cdHggPSAoIHggfCAoIHggPDwgMSApICkgJiAweDU1NTU1NTU1O1xuXG5cdHkgPSAoIHkgfCAoIHkgPDwgOCApICkgJiAweDAwRkYwMEZGO1xuXHR5ID0gKCB5IHwgKCB5IDw8IDQgKSApICYgMHgwRjBGMEYwRjtcblx0eSA9ICggeSB8ICggeSA8PCAyICkgKSAmIDB4MzMzMzMzMzM7XG5cdHkgPSAoIHkgfCAoIHkgPDwgMSApICkgJiAweDU1NTU1NTU1O1xuXG5cdHJldHVybiB4IHwgKCB5IDw8IDEgKTtcblxufVxuXG4vLyBmaW5kIHRoZSBsZWZ0bW9zdCBub2RlIG9mIGEgcG9seWdvbiByaW5nXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdCggc3RhcnQgKSB7XG5cblx0bGV0IHAgPSBzdGFydCxcblx0XHRsZWZ0bW9zdCA9IHN0YXJ0O1xuXHRkbyB7XG5cblx0XHRpZiAoIHAueCA8IGxlZnRtb3N0LnggfHwgKCBwLnggPT09IGxlZnRtb3N0LnggJiYgcC55IDwgbGVmdG1vc3QueSApICkgbGVmdG1vc3QgPSBwO1xuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IHN0YXJ0ICk7XG5cblx0cmV0dXJuIGxlZnRtb3N0O1xuXG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZSggYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5ICkge1xuXG5cdHJldHVybiAoIGN4IC0gcHggKSAqICggYXkgLSBweSApIC0gKCBheCAtIHB4ICkgKiAoIGN5IC0gcHkgKSA+PSAwICYmXG5cdFx0XHQoIGF4IC0gcHggKSAqICggYnkgLSBweSApIC0gKCBieCAtIHB4ICkgKiAoIGF5IC0gcHkgKSA+PSAwICYmXG5cdFx0XHQoIGJ4IC0gcHggKSAqICggY3kgLSBweSApIC0gKCBjeCAtIHB4ICkgKiAoIGJ5IC0gcHkgKSA+PSAwO1xuXG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKCBhLCBiICkge1xuXG5cdHJldHVybiBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgISBpbnRlcnNlY3RzUG9seWdvbiggYSwgYiApICYmIC8vIGRvbmVzJ3QgaW50ZXJzZWN0IG90aGVyIGVkZ2VzXG5cdFx0KCBsb2NhbGx5SW5zaWRlKCBhLCBiICkgJiYgbG9jYWxseUluc2lkZSggYiwgYSApICYmIG1pZGRsZUluc2lkZSggYSwgYiApICYmIC8vIGxvY2FsbHkgdmlzaWJsZVxuXHRcdCggYXJlYSggYS5wcmV2LCBhLCBiLnByZXYgKSB8fCBhcmVhKCBhLCBiLnByZXYsIGIgKSApIHx8IC8vIGRvZXMgbm90IGNyZWF0ZSBvcHBvc2l0ZS1mYWNpbmcgc2VjdG9yc1xuXHRcdGVxdWFscyggYSwgYiApICYmIGFyZWEoIGEucHJldiwgYSwgYS5uZXh0ICkgPiAwICYmIGFyZWEoIGIucHJldiwgYiwgYi5uZXh0ICkgPiAwICk7IC8vIHNwZWNpYWwgemVyby1sZW5ndGggY2FzZVxuXG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEoIHAsIHEsIHIgKSB7XG5cblx0cmV0dXJuICggcS55IC0gcC55ICkgKiAoIHIueCAtIHEueCApIC0gKCBxLnggLSBwLnggKSAqICggci55IC0gcS55ICk7XG5cbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyggcDEsIHAyICkge1xuXG5cdHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG5cbn1cblxuLy8gY2hlY2sgaWYgdHdvIHNlZ21lbnRzIGludGVyc2VjdFxuZnVuY3Rpb24gaW50ZXJzZWN0cyggcDEsIHExLCBwMiwgcTIgKSB7XG5cblx0Y29uc3QgbzEgPSBzaWduKCBhcmVhKCBwMSwgcTEsIHAyICkgKTtcblx0Y29uc3QgbzIgPSBzaWduKCBhcmVhKCBwMSwgcTEsIHEyICkgKTtcblx0Y29uc3QgbzMgPSBzaWduKCBhcmVhKCBwMiwgcTIsIHAxICkgKTtcblx0Y29uc3QgbzQgPSBzaWduKCBhcmVhKCBwMiwgcTIsIHExICkgKTtcblxuXHRpZiAoIG8xICE9PSBvMiAmJiBvMyAhPT0gbzQgKSByZXR1cm4gdHJ1ZTsgLy8gZ2VuZXJhbCBjYXNlXG5cblx0aWYgKCBvMSA9PT0gMCAmJiBvblNlZ21lbnQoIHAxLCBwMiwgcTEgKSApIHJldHVybiB0cnVlOyAvLyBwMSwgcTEgYW5kIHAyIGFyZSBjb2xsaW5lYXIgYW5kIHAyIGxpZXMgb24gcDFxMVxuXHRpZiAoIG8yID09PSAwICYmIG9uU2VnbWVudCggcDEsIHEyLCBxMSApICkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcTIgYXJlIGNvbGxpbmVhciBhbmQgcTIgbGllcyBvbiBwMXExXG5cdGlmICggbzMgPT09IDAgJiYgb25TZWdtZW50KCBwMiwgcDEsIHEyICkgKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29sbGluZWFyIGFuZCBwMSBsaWVzIG9uIHAycTJcblx0aWYgKCBvNCA9PT0gMCAmJiBvblNlZ21lbnQoIHAyLCBxMSwgcTIgKSApIHJldHVybiB0cnVlOyAvLyBwMiwgcTIgYW5kIHExIGFyZSBjb2xsaW5lYXIgYW5kIHExIGxpZXMgb24gcDJxMlxuXG5cdHJldHVybiBmYWxzZTtcblxufVxuXG4vLyBmb3IgY29sbGluZWFyIHBvaW50cyBwLCBxLCByLCBjaGVjayBpZiBwb2ludCBxIGxpZXMgb24gc2VnbWVudCBwclxuZnVuY3Rpb24gb25TZWdtZW50KCBwLCBxLCByICkge1xuXG5cdHJldHVybiBxLnggPD0gTWF0aC5tYXgoIHAueCwgci54ICkgJiYgcS54ID49IE1hdGgubWluKCBwLngsIHIueCApICYmIHEueSA8PSBNYXRoLm1heCggcC55LCByLnkgKSAmJiBxLnkgPj0gTWF0aC5taW4oIHAueSwgci55ICk7XG5cbn1cblxuZnVuY3Rpb24gc2lnbiggbnVtICkge1xuXG5cdHJldHVybiBudW0gPiAwID8gMSA6IG51bSA8IDAgPyAtIDEgOiAwO1xuXG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbiggYSwgYiApIHtcblxuXHRsZXQgcCA9IGE7XG5cdGRvIHtcblxuXHRcdGlmICggcC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG5cdFx0XHRcdGludGVyc2VjdHMoIHAsIHAubmV4dCwgYSwgYiApICkgcmV0dXJuIHRydWU7XG5cdFx0cCA9IHAubmV4dDtcblxuXHR9IHdoaWxlICggcCAhPT0gYSApO1xuXG5cdHJldHVybiBmYWxzZTtcblxufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIGxvY2FsbHlJbnNpZGUoIGEsIGIgKSB7XG5cblx0cmV0dXJuIGFyZWEoIGEucHJldiwgYSwgYS5uZXh0ICkgPCAwID9cblx0XHRhcmVhKCBhLCBiLCBhLm5leHQgKSA+PSAwICYmIGFyZWEoIGEsIGEucHJldiwgYiApID49IDAgOlxuXHRcdGFyZWEoIGEsIGIsIGEucHJldiApIDwgMCB8fCBhcmVhKCBhLCBhLm5leHQsIGIgKSA8IDA7XG5cbn1cblxuLy8gY2hlY2sgaWYgdGhlIG1pZGRsZSBwb2ludCBvZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBtaWRkbGVJbnNpZGUoIGEsIGIgKSB7XG5cblx0bGV0IHAgPSBhLFxuXHRcdGluc2lkZSA9IGZhbHNlO1xuXHRjb25zdCBweCA9ICggYS54ICsgYi54ICkgLyAyLFxuXHRcdHB5ID0gKCBhLnkgKyBiLnkgKSAvIDI7XG5cdGRvIHtcblxuXHRcdGlmICggKCAoIHAueSA+IHB5ICkgIT09ICggcC5uZXh0LnkgPiBweSApICkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxuXHRcdFx0XHQoIHB4IDwgKCBwLm5leHQueCAtIHAueCApICogKCBweSAtIHAueSApIC8gKCBwLm5leHQueSAtIHAueSApICsgcC54ICkgKVxuXHRcdFx0aW5zaWRlID0gISBpbnNpZGU7XG5cdFx0cCA9IHAubmV4dDtcblxuXHR9IHdoaWxlICggcCAhPT0gYSApO1xuXG5cdHJldHVybiBpbnNpZGU7XG5cbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oIGEsIGIgKSB7XG5cblx0Y29uc3QgYTIgPSBuZXcgTm9kZSggYS5pLCBhLngsIGEueSApLFxuXHRcdGIyID0gbmV3IE5vZGUoIGIuaSwgYi54LCBiLnkgKSxcblx0XHRhbiA9IGEubmV4dCxcblx0XHRicCA9IGIucHJldjtcblxuXHRhLm5leHQgPSBiO1xuXHRiLnByZXYgPSBhO1xuXG5cdGEyLm5leHQgPSBhbjtcblx0YW4ucHJldiA9IGEyO1xuXG5cdGIyLm5leHQgPSBhMjtcblx0YTIucHJldiA9IGIyO1xuXG5cdGJwLm5leHQgPSBiMjtcblx0YjIucHJldiA9IGJwO1xuXG5cdHJldHVybiBiMjtcblxufVxuXG4vLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gaW5zZXJ0Tm9kZSggaSwgeCwgeSwgbGFzdCApIHtcblxuXHRjb25zdCBwID0gbmV3IE5vZGUoIGksIHgsIHkgKTtcblxuXHRpZiAoICEgbGFzdCApIHtcblxuXHRcdHAucHJldiA9IHA7XG5cdFx0cC5uZXh0ID0gcDtcblxuXHR9IGVsc2Uge1xuXG5cdFx0cC5uZXh0ID0gbGFzdC5uZXh0O1xuXHRcdHAucHJldiA9IGxhc3Q7XG5cdFx0bGFzdC5uZXh0LnByZXYgPSBwO1xuXHRcdGxhc3QubmV4dCA9IHA7XG5cblx0fVxuXG5cdHJldHVybiBwO1xuXG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUoIHAgKSB7XG5cblx0cC5uZXh0LnByZXYgPSBwLnByZXY7XG5cdHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG5cdGlmICggcC5wcmV2WiApIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuXHRpZiAoIHAubmV4dFogKSBwLm5leHRaLnByZXZaID0gcC5wcmV2WjtcblxufVxuXG5mdW5jdGlvbiBOb2RlKCBpLCB4LCB5ICkge1xuXG5cdC8vIHZlcnRleCBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuXHR0aGlzLmkgPSBpO1xuXG5cdC8vIHZlcnRleCBjb29yZGluYXRlc1xuXHR0aGlzLnggPSB4O1xuXHR0aGlzLnkgPSB5O1xuXG5cdC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZ1xuXHR0aGlzLnByZXYgPSBudWxsO1xuXHR0aGlzLm5leHQgPSBudWxsO1xuXG5cdC8vIHotb3JkZXIgY3VydmUgdmFsdWVcblx0dGhpcy56ID0gbnVsbDtcblxuXHQvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG5cdHRoaXMucHJldlogPSBudWxsO1xuXHR0aGlzLm5leHRaID0gbnVsbDtcblxuXHQvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuXHR0aGlzLnN0ZWluZXIgPSBmYWxzZTtcblxufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKCBkYXRhLCBzdGFydCwgZW5kLCBkaW0gKSB7XG5cblx0bGV0IHN1bSA9IDA7XG5cdGZvciAoIGxldCBpID0gc3RhcnQsIGogPSBlbmQgLSBkaW07IGkgPCBlbmQ7IGkgKz0gZGltICkge1xuXG5cdFx0c3VtICs9ICggZGF0YVsgaiBdIC0gZGF0YVsgaSBdICkgKiAoIGRhdGFbIGkgKyAxIF0gKyBkYXRhWyBqICsgMSBdICk7XG5cdFx0aiA9IGk7XG5cblx0fVxuXG5cdHJldHVybiBzdW07XG5cbn1cblxuY2xhc3MgU2hhcGVVdGlscyB7XG5cblx0Ly8gY2FsY3VsYXRlIGFyZWEgb2YgdGhlIGNvbnRvdXIgcG9seWdvblxuXG5cdHN0YXRpYyBhcmVhKCBjb250b3VyICkge1xuXG5cdFx0Y29uc3QgbiA9IGNvbnRvdXIubGVuZ3RoO1xuXHRcdGxldCBhID0gMC4wO1xuXG5cdFx0Zm9yICggbGV0IHAgPSBuIC0gMSwgcSA9IDA7IHEgPCBuOyBwID0gcSArKyApIHtcblxuXHRcdFx0YSArPSBjb250b3VyWyBwIF0ueCAqIGNvbnRvdXJbIHEgXS55IC0gY29udG91clsgcSBdLnggKiBjb250b3VyWyBwIF0ueTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBhICogMC41O1xuXG5cdH1cblxuXHRzdGF0aWMgaXNDbG9ja1dpc2UoIHB0cyApIHtcblxuXHRcdHJldHVybiBTaGFwZVV0aWxzLmFyZWEoIHB0cyApIDwgMDtcblxuXHR9XG5cblx0c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUoIGNvbnRvdXIsIGhvbGVzICkge1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTsgLy8gZmxhdCBhcnJheSBvZiB2ZXJ0aWNlcyBsaWtlIFsgeDAseTAsIHgxLHkxLCB4Mix5MiwgLi4uIF1cblx0XHRjb25zdCBob2xlSW5kaWNlcyA9IFtdOyAvLyBhcnJheSBvZiBob2xlIGluZGljZXNcblx0XHRjb25zdCBmYWNlcyA9IFtdOyAvLyBmaW5hbCBhcnJheSBvZiB2ZXJ0ZXggaW5kaWNlcyBsaWtlIFsgWyBhLGIsZCBdLCBbIGIsYyxkIF0gXVxuXG5cdFx0cmVtb3ZlRHVwRW5kUHRzKCBjb250b3VyICk7XG5cdFx0YWRkQ29udG91ciggdmVydGljZXMsIGNvbnRvdXIgKTtcblxuXHRcdC8vXG5cblx0XHRsZXQgaG9sZUluZGV4ID0gY29udG91ci5sZW5ndGg7XG5cblx0XHRob2xlcy5mb3JFYWNoKCByZW1vdmVEdXBFbmRQdHMgKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGhvbGVzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0aG9sZUluZGljZXMucHVzaCggaG9sZUluZGV4ICk7XG5cdFx0XHRob2xlSW5kZXggKz0gaG9sZXNbIGkgXS5sZW5ndGg7XG5cdFx0XHRhZGRDb250b3VyKCB2ZXJ0aWNlcywgaG9sZXNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGNvbnN0IHRyaWFuZ2xlcyA9IEVhcmN1dC50cmlhbmd1bGF0ZSggdmVydGljZXMsIGhvbGVJbmRpY2VzICk7XG5cblx0XHQvL1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSArPSAzICkge1xuXG5cdFx0XHRmYWNlcy5wdXNoKCB0cmlhbmdsZXMuc2xpY2UoIGksIGkgKyAzICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBmYWNlcztcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRHVwRW5kUHRzKCBwb2ludHMgKSB7XG5cblx0Y29uc3QgbCA9IHBvaW50cy5sZW5ndGg7XG5cblx0aWYgKCBsID4gMiAmJiBwb2ludHNbIGwgLSAxIF0uZXF1YWxzKCBwb2ludHNbIDAgXSApICkge1xuXG5cdFx0cG9pbnRzLnBvcCgpO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBhZGRDb250b3VyKCB2ZXJ0aWNlcywgY29udG91ciApIHtcblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjb250b3VyLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdHZlcnRpY2VzLnB1c2goIGNvbnRvdXJbIGkgXS54ICk7XG5cdFx0dmVydGljZXMucHVzaCggY29udG91clsgaSBdLnkgKTtcblxuXHR9XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGV4dHJ1ZGVkIGdlb21ldHJ5IGZyb20gYSBwYXRoIHNoYXBlLlxuICpcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlxuICogIGN1cnZlU2VnbWVudHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgcG9pbnRzIG9uIHRoZSBjdXJ2ZXNcbiAqICBzdGVwczogPGludD4sIC8vIG51bWJlciBvZiBwb2ludHMgZm9yIHotc2lkZSBleHRydXNpb25zIC8gdXNlZCBmb3Igc3ViZGl2aWRpbmcgc2VnbWVudHMgb2YgZXh0cnVkZSBzcGxpbmUgdG9vXG4gKiAgZGVwdGg6IDxmbG9hdD4sIC8vIERlcHRoIHRvIGV4dHJ1ZGUgdGhlIHNoYXBlXG4gKlxuICogIGJldmVsRW5hYmxlZDogPGJvb2w+LCAvLyB0dXJuIG9uIGJldmVsXG4gKiAgYmV2ZWxUaGlja25lc3M6IDxmbG9hdD4sIC8vIGhvdyBkZWVwIGludG8gdGhlIG9yaWdpbmFsIHNoYXBlIGJldmVsIGdvZXNcbiAqICBiZXZlbFNpemU6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIChpbmNsdWRpbmcgYmV2ZWxPZmZzZXQpIGlzIGJldmVsXG4gKiAgYmV2ZWxPZmZzZXQ6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIGRvZXMgYmV2ZWwgc3RhcnRcbiAqICBiZXZlbFNlZ21lbnRzOiA8aW50PiwgLy8gbnVtYmVyIG9mIGJldmVsIGxheWVyc1xuICpcbiAqICBleHRydWRlUGF0aDogPFRIUkVFLkN1cnZlPiAvLyBjdXJ2ZSB0byBleHRydWRlIHNoYXBlIGFsb25nXG4gKlxuICogIFVWR2VuZXJhdG9yOiA8T2JqZWN0PiAvLyBvYmplY3QgdGhhdCBwcm92aWRlcyBVViBnZW5lcmF0b3IgZnVuY3Rpb25zXG4gKlxuICogfVxuICovXG5cbmNsYXNzIEV4dHJ1ZGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3Rvciggc2hhcGVzID0gbmV3IFNoYXBlKCBbIG5ldyBWZWN0b3IyKCAwLjUsIDAuNSApLCBuZXcgVmVjdG9yMiggLSAwLjUsIDAuNSApLCBuZXcgVmVjdG9yMiggLSAwLjUsIC0gMC41ICksIG5ldyBWZWN0b3IyKCAwLjUsIC0gMC41ICkgXSApLCBvcHRpb25zID0ge30gKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0V4dHJ1ZGVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRzaGFwZXM6IHNoYXBlcyxcblx0XHRcdG9wdGlvbnM6IG9wdGlvbnNcblx0XHR9O1xuXG5cdFx0c2hhcGVzID0gQXJyYXkuaXNBcnJheSggc2hhcGVzICkgPyBzaGFwZXMgOiBbIHNoYXBlcyBdO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgdmVydGljZXNBcnJheSA9IFtdO1xuXHRcdGNvbnN0IHV2QXJyYXkgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1sgaSBdO1xuXHRcdFx0YWRkU2hhcGUoIHNoYXBlICk7XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlc0FycmF5LCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2QXJyYXksIDIgKSApO1xuXG5cdFx0dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xuXG5cdFx0Ly8gZnVuY3Rpb25zXG5cblx0XHRmdW5jdGlvbiBhZGRTaGFwZSggc2hhcGUgKSB7XG5cblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gW107XG5cblx0XHRcdC8vIG9wdGlvbnNcblxuXHRcdFx0Y29uc3QgY3VydmVTZWdtZW50cyA9IG9wdGlvbnMuY3VydmVTZWdtZW50cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jdXJ2ZVNlZ21lbnRzIDogMTI7XG5cdFx0XHRjb25zdCBzdGVwcyA9IG9wdGlvbnMuc3RlcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc3RlcHMgOiAxO1xuXHRcdFx0bGV0IGRlcHRoID0gb3B0aW9ucy5kZXB0aCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aCA6IDE7XG5cblx0XHRcdGxldCBiZXZlbEVuYWJsZWQgPSBvcHRpb25zLmJldmVsRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbEVuYWJsZWQgOiB0cnVlO1xuXHRcdFx0bGV0IGJldmVsVGhpY2tuZXNzID0gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyA6IDAuMjtcblx0XHRcdGxldCBiZXZlbFNpemUgPSBvcHRpb25zLmJldmVsU2l6ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbFNpemUgOiBiZXZlbFRoaWNrbmVzcyAtIDAuMTtcblx0XHRcdGxldCBiZXZlbE9mZnNldCA9IG9wdGlvbnMuYmV2ZWxPZmZzZXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxPZmZzZXQgOiAwO1xuXHRcdFx0bGV0IGJldmVsU2VnbWVudHMgPSBvcHRpb25zLmJldmVsU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxTZWdtZW50cyA6IDM7XG5cblx0XHRcdGNvbnN0IGV4dHJ1ZGVQYXRoID0gb3B0aW9ucy5leHRydWRlUGF0aDtcblxuXHRcdFx0Y29uc3QgdXZnZW4gPSBvcHRpb25zLlVWR2VuZXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLlVWR2VuZXJhdG9yIDogV29ybGRVVkdlbmVyYXRvcjtcblxuXHRcdFx0Ly8gZGVwcmVjYXRlZCBvcHRpb25zXG5cblx0XHRcdGlmICggb3B0aW9ucy5hbW91bnQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLicgKTtcblx0XHRcdFx0ZGVwdGggPSBvcHRpb25zLmFtb3VudDtcblxuXHRcdFx0fVxuXG5cdFx0XHQvL1xuXG5cdFx0XHRsZXQgZXh0cnVkZVB0cywgZXh0cnVkZUJ5UGF0aCA9IGZhbHNlO1xuXHRcdFx0bGV0IHNwbGluZVR1YmUsIGJpbm9ybWFsLCBub3JtYWwsIHBvc2l0aW9uMjtcblxuXHRcdFx0aWYgKCBleHRydWRlUGF0aCApIHtcblxuXHRcdFx0XHRleHRydWRlUHRzID0gZXh0cnVkZVBhdGguZ2V0U3BhY2VkUG9pbnRzKCBzdGVwcyApO1xuXG5cdFx0XHRcdGV4dHJ1ZGVCeVBhdGggPSB0cnVlO1xuXHRcdFx0XHRiZXZlbEVuYWJsZWQgPSBmYWxzZTsgLy8gYmV2ZWxzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhdGggZXh0cnVzaW9uXG5cblx0XHRcdFx0Ly8gU0VUVVAgVE5CIHZhcmlhYmxlc1xuXG5cdFx0XHRcdC8vIFRPRE8xIC0gaGF2ZSBhIC5pc0Nsb3NlZCBpbiBzcGxpbmU/XG5cblx0XHRcdFx0c3BsaW5lVHViZSA9IGV4dHJ1ZGVQYXRoLmNvbXB1dGVGcmVuZXRGcmFtZXMoIHN0ZXBzLCBmYWxzZSApO1xuXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHNwbGluZVR1YmUsICdzcGxpbmVUdWJlJywgc3BsaW5lVHViZS5ub3JtYWxzLmxlbmd0aCwgJ3N0ZXBzJywgc3RlcHMsICdleHRydWRlUHRzJywgZXh0cnVkZVB0cy5sZW5ndGgpO1xuXG5cdFx0XHRcdGJpbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdFx0bm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdFx0cG9zaXRpb24yID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYWZlZ3VhcmRzIGlmIGJldmVscyBhcmUgbm90IGVuYWJsZWRcblxuXHRcdFx0aWYgKCAhIGJldmVsRW5hYmxlZCApIHtcblxuXHRcdFx0XHRiZXZlbFNlZ21lbnRzID0gMDtcblx0XHRcdFx0YmV2ZWxUaGlja25lc3MgPSAwO1xuXHRcdFx0XHRiZXZlbFNpemUgPSAwO1xuXHRcdFx0XHRiZXZlbE9mZnNldCA9IDA7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gVmFyaWFibGVzIGluaXRpYWxpemF0aW9uXG5cblx0XHRcdGNvbnN0IHNoYXBlUG9pbnRzID0gc2hhcGUuZXh0cmFjdFBvaW50cyggY3VydmVTZWdtZW50cyApO1xuXG5cdFx0XHRsZXQgdmVydGljZXMgPSBzaGFwZVBvaW50cy5zaGFwZTtcblx0XHRcdGNvbnN0IGhvbGVzID0gc2hhcGVQb2ludHMuaG9sZXM7XG5cblx0XHRcdGNvbnN0IHJldmVyc2UgPSAhIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHZlcnRpY2VzICk7XG5cblx0XHRcdGlmICggcmV2ZXJzZSApIHtcblxuXHRcdFx0XHR2ZXJ0aWNlcyA9IHZlcnRpY2VzLnJldmVyc2UoKTtcblxuXHRcdFx0XHQvLyBNYXliZSB3ZSBzaG91bGQgYWxzbyBjaGVjayBpZiBob2xlcyBhcmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwganVzdCB0byBiZSBzYWZlIC4uLlxuXG5cdFx0XHRcdGZvciAoIGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblxuXHRcdFx0XHRcdGlmICggU2hhcGVVdGlscy5pc0Nsb2NrV2lzZSggYWhvbGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aG9sZXNbIGggXSA9IGFob2xlLnJldmVyc2UoKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXG5cdFx0XHRjb25zdCBmYWNlcyA9IFNoYXBlVXRpbHMudHJpYW5ndWxhdGVTaGFwZSggdmVydGljZXMsIGhvbGVzICk7XG5cblx0XHRcdC8qIFZlcnRpY2VzICovXG5cblx0XHRcdGNvbnN0IGNvbnRvdXIgPSB2ZXJ0aWNlczsgLy8gdmVydGljZXMgaGFzIGFsbCBwb2ludHMgYnV0IGNvbnRvdXIgaGFzIG9ubHkgcG9pbnRzIG9mIGNpcmN1bWZlcmVuY2VcblxuXHRcdFx0Zm9yICggbGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblxuXHRcdFx0XHR2ZXJ0aWNlcyA9IHZlcnRpY2VzLmNvbmNhdCggYWhvbGUgKTtcblxuXHRcdFx0fVxuXG5cblx0XHRcdGZ1bmN0aW9uIHNjYWxlUHQyKCBwdCwgdmVjLCBzaXplICkge1xuXG5cdFx0XHRcdGlmICggISB2ZWMgKSBjb25zb2xlLmVycm9yKCAnVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QnICk7XG5cblx0XHRcdFx0cmV0dXJuIHZlYy5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKCBzaXplICkuYWRkKCBwdCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZsZW4gPSB2ZXJ0aWNlcy5sZW5ndGgsIGZsZW4gPSBmYWNlcy5sZW5ndGg7XG5cblxuXHRcdFx0Ly8gRmluZCBkaXJlY3Rpb25zIGZvciBwb2ludCBtb3ZlbWVudFxuXG5cblx0XHRcdGZ1bmN0aW9uIGdldEJldmVsVmVjKCBpblB0LCBpblByZXYsIGluTmV4dCApIHtcblxuXHRcdFx0XHQvLyBjb21wdXRlcyBmb3IgaW5QdCB0aGUgY29ycmVzcG9uZGluZyBwb2ludCBpblB0JyBvbiBhIG5ldyBjb250b3VyXG5cdFx0XHRcdC8vICAgc2hpZnRlZCBieSAxIHVuaXQgKGxlbmd0aCBvZiBub3JtYWxpemVkIHZlY3RvcikgdG8gdGhlIGxlZnRcblx0XHRcdFx0Ly8gaWYgd2Ugd2FsayBhbG9uZyBjb250b3VyIGNsb2Nrd2lzZSwgdGhpcyBuZXcgY29udG91ciBpcyBvdXRzaWRlIHRoZSBvbGQgb25lXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGluUHQnIGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBsaW5lcyBwYXJhbGxlbCB0byB0aGUgdHdvXG5cdFx0XHRcdC8vICBhZGphY2VudCBlZGdlcyBvZiBpblB0IGF0IGEgZGlzdGFuY2Ugb2YgMSB1bml0IG9uIHRoZSBsZWZ0IHNpZGUuXG5cblx0XHRcdFx0bGV0IHZfdHJhbnNfeCwgdl90cmFuc195LCBzaHJpbmtfYnk7IC8vIHJlc3VsdGluZyB0cmFuc2xhdGlvbiB2ZWN0b3IgZm9yIGluUHRcblxuXHRcdFx0XHQvLyBnb29kIHJlYWRpbmcgZm9yIGdlb21ldHJ5IGFsZ29yaXRobXMgKGhlcmU6IGxpbmUtbGluZSBpbnRlcnNlY3Rpb24pXG5cdFx0XHRcdC8vIGh0dHA6Ly9nZW9tYWxnb3JpdGhtcy5jb20vYTA1LV9pbnRlcnNlY3QtMS5odG1sXG5cblx0XHRcdFx0Y29uc3Qgdl9wcmV2X3ggPSBpblB0LnggLSBpblByZXYueCxcblx0XHRcdFx0XHR2X3ByZXZfeSA9IGluUHQueSAtIGluUHJldi55O1xuXHRcdFx0XHRjb25zdCB2X25leHRfeCA9IGluTmV4dC54IC0gaW5QdC54LFxuXHRcdFx0XHRcdHZfbmV4dF95ID0gaW5OZXh0LnkgLSBpblB0Lnk7XG5cblx0XHRcdFx0Y29uc3Qgdl9wcmV2X2xlbnNxID0gKCB2X3ByZXZfeCAqIHZfcHJldl94ICsgdl9wcmV2X3kgKiB2X3ByZXZfeSApO1xuXG5cdFx0XHRcdC8vIGNoZWNrIGZvciBjb2xsaW5lYXIgZWRnZXNcblx0XHRcdFx0Y29uc3QgY29sbGluZWFyMCA9ICggdl9wcmV2X3ggKiB2X25leHRfeSAtIHZfcHJldl95ICogdl9uZXh0X3ggKTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBjb2xsaW5lYXIwICkgPiBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdC8vIG5vdCBjb2xsaW5lYXJcblxuXHRcdFx0XHRcdC8vIGxlbmd0aCBvZiB2ZWN0b3JzIGZvciBub3JtYWxpemluZ1xuXG5cdFx0XHRcdFx0Y29uc3Qgdl9wcmV2X2xlbiA9IE1hdGguc3FydCggdl9wcmV2X2xlbnNxICk7XG5cdFx0XHRcdFx0Y29uc3Qgdl9uZXh0X2xlbiA9IE1hdGguc3FydCggdl9uZXh0X3ggKiB2X25leHRfeCArIHZfbmV4dF95ICogdl9uZXh0X3kgKTtcblxuXHRcdFx0XHRcdC8vIHNoaWZ0IGFkamFjZW50IHBvaW50cyBieSB1bml0IHZlY3RvcnMgdG8gdGhlIGxlZnRcblxuXHRcdFx0XHRcdGNvbnN0IHB0UHJldlNoaWZ0X3ggPSAoIGluUHJldi54IC0gdl9wcmV2X3kgLyB2X3ByZXZfbGVuICk7XG5cdFx0XHRcdFx0Y29uc3QgcHRQcmV2U2hpZnRfeSA9ICggaW5QcmV2LnkgKyB2X3ByZXZfeCAvIHZfcHJldl9sZW4gKTtcblxuXHRcdFx0XHRcdGNvbnN0IHB0TmV4dFNoaWZ0X3ggPSAoIGluTmV4dC54IC0gdl9uZXh0X3kgLyB2X25leHRfbGVuICk7XG5cdFx0XHRcdFx0Y29uc3QgcHROZXh0U2hpZnRfeSA9ICggaW5OZXh0LnkgKyB2X25leHRfeCAvIHZfbmV4dF9sZW4gKTtcblxuXHRcdFx0XHRcdC8vIHNjYWxpbmcgZmFjdG9yIGZvciB2X3ByZXYgdG8gaW50ZXJzZWN0aW9uIHBvaW50XG5cblx0XHRcdFx0XHRjb25zdCBzZiA9ICggKCBwdE5leHRTaGlmdF94IC0gcHRQcmV2U2hpZnRfeCApICogdl9uZXh0X3kgLVxuXHRcdFx0XHRcdFx0XHQoIHB0TmV4dFNoaWZ0X3kgLSBwdFByZXZTaGlmdF95ICkgKiB2X25leHRfeCApIC9cblx0XHRcdFx0XHRcdCggdl9wcmV2X3ggKiB2X25leHRfeSAtIHZfcHJldl95ICogdl9uZXh0X3ggKTtcblxuXHRcdFx0XHRcdC8vIHZlY3RvciBmcm9tIGluUHQgdG8gaW50ZXJzZWN0aW9uIHBvaW50XG5cblx0XHRcdFx0XHR2X3RyYW5zX3ggPSAoIHB0UHJldlNoaWZ0X3ggKyB2X3ByZXZfeCAqIHNmIC0gaW5QdC54ICk7XG5cdFx0XHRcdFx0dl90cmFuc195ID0gKCBwdFByZXZTaGlmdF95ICsgdl9wcmV2X3kgKiBzZiAtIGluUHQueSApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qgbm9ybWFsaXplISwgb3RoZXJ3aXNlIHNoYXJwIGNvcm5lcnMgYmVjb21lIHVnbHlcblx0XHRcdFx0XHQvLyAgYnV0IHByZXZlbnQgY3Jhenkgc3Bpa2VzXG5cdFx0XHRcdFx0Y29uc3Qgdl90cmFuc19sZW5zcSA9ICggdl90cmFuc194ICogdl90cmFuc194ICsgdl90cmFuc195ICogdl90cmFuc195ICk7XG5cdFx0XHRcdFx0aWYgKCB2X3RyYW5zX2xlbnNxIDw9IDIgKSB7XG5cblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVmVjdG9yMiggdl90cmFuc194LCB2X3RyYW5zX3kgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHNocmlua19ieSA9IE1hdGguc3FydCggdl90cmFuc19sZW5zcSAvIDIgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBjb2xsaW5lYXIgZWRnZXNcblxuXHRcdFx0XHRcdGxldCBkaXJlY3Rpb25fZXEgPSBmYWxzZTsgLy8gYXNzdW1lczogb3Bwb3NpdGVcblxuXHRcdFx0XHRcdGlmICggdl9wcmV2X3ggPiBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCB2X25leHRfeCA+IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdFx0XHRcdGRpcmVjdGlvbl9lcSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGlmICggdl9wcmV2X3ggPCAtIE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdl9uZXh0X3ggPCAtIE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uX2VxID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBNYXRoLnNpZ24oIHZfcHJldl95ICkgPT09IE1hdGguc2lnbiggdl9uZXh0X3kgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbl9lcSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGRpcmVjdGlvbl9lcSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJXYXJuaW5nOiBsaW5lcyBhcmUgYSBzdHJhaWdodCBzZXF1ZW5jZVwiKTtcblx0XHRcdFx0XHRcdHZfdHJhbnNfeCA9IC0gdl9wcmV2X3k7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3kgPSB2X3ByZXZfeDtcblx0XHRcdFx0XHRcdHNocmlua19ieSA9IE1hdGguc3FydCggdl9wcmV2X2xlbnNxICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIldhcm5pbmc6IGxpbmVzIGFyZSBhIHN0cmFpZ2h0IHNwaWtlXCIpO1xuXHRcdFx0XHRcdFx0dl90cmFuc194ID0gdl9wcmV2X3g7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3kgPSB2X3ByZXZfeTtcblx0XHRcdFx0XHRcdHNocmlua19ieSA9IE1hdGguc3FydCggdl9wcmV2X2xlbnNxIC8gMiApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIoIHZfdHJhbnNfeCAvIHNocmlua19ieSwgdl90cmFuc195IC8gc2hyaW5rX2J5ICk7XG5cblx0XHRcdH1cblxuXG5cdFx0XHRjb25zdCBjb250b3VyTW92ZW1lbnRzID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBjb250b3VyLmxlbmd0aCwgaiA9IGlsIC0gMSwgayA9IGkgKyAxOyBpIDwgaWw7IGkgKyssIGogKyssIGsgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBqID09PSBpbCApIGogPSAwO1xuXHRcdFx0XHRpZiAoIGsgPT09IGlsICkgayA9IDA7XG5cblx0XHRcdFx0Ly8gIChqKS0tLShpKS0tLShrKVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnaSxqLGsnLCBpLCBqICwgaylcblxuXHRcdFx0XHRjb250b3VyTW92ZW1lbnRzWyBpIF0gPSBnZXRCZXZlbFZlYyggY29udG91clsgaSBdLCBjb250b3VyWyBqIF0sIGNvbnRvdXJbIGsgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhvbGVzTW92ZW1lbnRzID0gW107XG5cdFx0XHRsZXQgb25lSG9sZU1vdmVtZW50cywgdmVydGljZXNNb3ZlbWVudHMgPSBjb250b3VyTW92ZW1lbnRzLmNvbmNhdCgpO1xuXG5cdFx0XHRmb3IgKCBsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1sgaCBdO1xuXG5cdFx0XHRcdG9uZUhvbGVNb3ZlbWVudHMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoLCBqID0gaWwgLSAxLCBrID0gaSArIDE7IGkgPCBpbDsgaSArKywgaiArKywgayArKyApIHtcblxuXHRcdFx0XHRcdGlmICggaiA9PT0gaWwgKSBqID0gMDtcblx0XHRcdFx0XHRpZiAoIGsgPT09IGlsICkgayA9IDA7XG5cblx0XHRcdFx0XHQvLyAgKGopLS0tKGkpLS0tKGspXG5cdFx0XHRcdFx0b25lSG9sZU1vdmVtZW50c1sgaSBdID0gZ2V0QmV2ZWxWZWMoIGFob2xlWyBpIF0sIGFob2xlWyBqIF0sIGFob2xlWyBrIF0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aG9sZXNNb3ZlbWVudHMucHVzaCggb25lSG9sZU1vdmVtZW50cyApO1xuXHRcdFx0XHR2ZXJ0aWNlc01vdmVtZW50cyA9IHZlcnRpY2VzTW92ZW1lbnRzLmNvbmNhdCggb25lSG9sZU1vdmVtZW50cyApO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0Ly8gTG9vcCBiZXZlbFNlZ21lbnRzLCAxIGZvciB0aGUgZnJvbnQsIDEgZm9yIHRoZSBiYWNrXG5cblx0XHRcdGZvciAoIGxldCBiID0gMDsgYiA8IGJldmVsU2VnbWVudHM7IGIgKysgKSB7XG5cblx0XHRcdFx0Ly9mb3IgKCBiID0gYmV2ZWxTZWdtZW50czsgYiA+IDA7IGIgLS0gKSB7XG5cblx0XHRcdFx0Y29uc3QgdCA9IGIgLyBiZXZlbFNlZ21lbnRzO1xuXHRcdFx0XHRjb25zdCB6ID0gYmV2ZWxUaGlja25lc3MgKiBNYXRoLmNvcyggdCAqIE1hdGguUEkgLyAyICk7XG5cdFx0XHRcdGNvbnN0IGJzID0gYmV2ZWxTaXplICogTWF0aC5zaW4oIHQgKiBNYXRoLlBJIC8gMiApICsgYmV2ZWxPZmZzZXQ7XG5cblx0XHRcdFx0Ly8gY29udHJhY3Qgc2hhcGVcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gY29udG91ci5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBzY2FsZVB0MiggY29udG91clsgaSBdLCBjb250b3VyTW92ZW1lbnRzWyBpIF0sIGJzICk7XG5cblx0XHRcdFx0XHR2KCB2ZXJ0LngsIHZlcnQueSwgLSB6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGV4cGFuZCBob2xlc1xuXG5cdFx0XHRcdGZvciAoIGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblx0XHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gaG9sZXNNb3ZlbWVudHNbIGggXTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgdmVydCA9IHNjYWxlUHQyKCBhaG9sZVsgaSBdLCBvbmVIb2xlTW92ZW1lbnRzWyBpIF0sIGJzICk7XG5cblx0XHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55LCAtIHogKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYnMgPSBiZXZlbFNpemUgKyBiZXZlbE9mZnNldDtcblxuXHRcdFx0Ly8gQmFjayBmYWNpbmcgdmVydGljZXNcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdmxlbjsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB2ZXJ0ID0gYmV2ZWxFbmFibGVkID8gc2NhbGVQdDIoIHZlcnRpY2VzWyBpIF0sIHZlcnRpY2VzTW92ZW1lbnRzWyBpIF0sIGJzICkgOiB2ZXJ0aWNlc1sgaSBdO1xuXG5cdFx0XHRcdGlmICggISBleHRydWRlQnlQYXRoICkge1xuXG5cdFx0XHRcdFx0diggdmVydC54LCB2ZXJ0LnksIDAgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gdiggdmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzWyAwIF0ueSwgZXh0cnVkZVB0c1sgMCBdLnggKTtcblxuXHRcdFx0XHRcdG5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLm5vcm1hbHNbIDAgXSApLm11bHRpcGx5U2NhbGFyKCB2ZXJ0LnggKTtcblx0XHRcdFx0XHRiaW5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLmJpbm9ybWFsc1sgMCBdICkubXVsdGlwbHlTY2FsYXIoIHZlcnQueSApO1xuXG5cdFx0XHRcdFx0cG9zaXRpb24yLmNvcHkoIGV4dHJ1ZGVQdHNbIDAgXSApLmFkZCggbm9ybWFsICkuYWRkKCBiaW5vcm1hbCApO1xuXG5cdFx0XHRcdFx0diggcG9zaXRpb24yLngsIHBvc2l0aW9uMi55LCBwb3NpdGlvbjIueiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgc3RlcHBlZCB2ZXJ0aWNlcy4uLlxuXHRcdFx0Ly8gSW5jbHVkaW5nIGZyb250IGZhY2luZyB2ZXJ0aWNlc1xuXG5cdFx0XHRmb3IgKCBsZXQgcyA9IDE7IHMgPD0gc3RlcHM7IHMgKysgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdmxlbjsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBiZXZlbEVuYWJsZWQgPyBzY2FsZVB0MiggdmVydGljZXNbIGkgXSwgdmVydGljZXNNb3ZlbWVudHNbIGkgXSwgYnMgKSA6IHZlcnRpY2VzWyBpIF07XG5cblx0XHRcdFx0XHRpZiAoICEgZXh0cnVkZUJ5UGF0aCApIHtcblxuXHRcdFx0XHRcdFx0diggdmVydC54LCB2ZXJ0LnksIGRlcHRoIC8gc3RlcHMgKiBzICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyB2KCB2ZXJ0LngsIHZlcnQueSArIGV4dHJ1ZGVQdHNbIHMgLSAxIF0ueSwgZXh0cnVkZVB0c1sgcyAtIDEgXS54ICk7XG5cblx0XHRcdFx0XHRcdG5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLm5vcm1hbHNbIHMgXSApLm11bHRpcGx5U2NhbGFyKCB2ZXJ0LnggKTtcblx0XHRcdFx0XHRcdGJpbm9ybWFsLmNvcHkoIHNwbGluZVR1YmUuYmlub3JtYWxzWyBzIF0gKS5tdWx0aXBseVNjYWxhciggdmVydC55ICk7XG5cblx0XHRcdFx0XHRcdHBvc2l0aW9uMi5jb3B5KCBleHRydWRlUHRzWyBzIF0gKS5hZGQoIG5vcm1hbCApLmFkZCggYmlub3JtYWwgKTtcblxuXHRcdFx0XHRcdFx0diggcG9zaXRpb24yLngsIHBvc2l0aW9uMi55LCBwb3NpdGlvbjIueiApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cblx0XHRcdC8vIEFkZCBiZXZlbCBzZWdtZW50cyBwbGFuZXNcblxuXHRcdFx0Ly9mb3IgKCBiID0gMTsgYiA8PSBiZXZlbFNlZ21lbnRzOyBiICsrICkge1xuXHRcdFx0Zm9yICggbGV0IGIgPSBiZXZlbFNlZ21lbnRzIC0gMTsgYiA+PSAwOyBiIC0tICkge1xuXG5cdFx0XHRcdGNvbnN0IHQgPSBiIC8gYmV2ZWxTZWdtZW50cztcblx0XHRcdFx0Y29uc3QgeiA9IGJldmVsVGhpY2tuZXNzICogTWF0aC5jb3MoIHQgKiBNYXRoLlBJIC8gMiApO1xuXHRcdFx0XHRjb25zdCBicyA9IGJldmVsU2l6ZSAqIE1hdGguc2luKCB0ICogTWF0aC5QSSAvIDIgKSArIGJldmVsT2Zmc2V0O1xuXG5cdFx0XHRcdC8vIGNvbnRyYWN0IHNoYXBlXG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoIGNvbnRvdXJbIGkgXSwgY29udG91ck1vdmVtZW50c1sgaSBdLCBicyApO1xuXHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55LCBkZXB0aCArIHogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXhwYW5kIGhvbGVzXG5cblx0XHRcdFx0Zm9yICggbGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1sgaCBdO1xuXHRcdFx0XHRcdG9uZUhvbGVNb3ZlbWVudHMgPSBob2xlc01vdmVtZW50c1sgaCBdO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGFob2xlLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoIGFob2xlWyBpIF0sIG9uZUhvbGVNb3ZlbWVudHNbIGkgXSwgYnMgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCAhIGV4dHJ1ZGVCeVBhdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0diggdmVydC54LCB2ZXJ0LnksIGRlcHRoICsgeiApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55ICsgZXh0cnVkZVB0c1sgc3RlcHMgLSAxIF0ueSwgZXh0cnVkZVB0c1sgc3RlcHMgLSAxIF0ueCArIHogKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvKiBGYWNlcyAqL1xuXG5cdFx0XHQvLyBUb3AgYW5kIGJvdHRvbSBmYWNlc1xuXG5cdFx0XHRidWlsZExpZEZhY2VzKCk7XG5cblx0XHRcdC8vIFNpZGVzIGZhY2VzXG5cblx0XHRcdGJ1aWxkU2lkZUZhY2VzKCk7XG5cblxuXHRcdFx0Ly8vLy8gIEludGVybmFsIGZ1bmN0aW9uc1xuXG5cdFx0XHRmdW5jdGlvbiBidWlsZExpZEZhY2VzKCkge1xuXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzO1xuXG5cdFx0XHRcdGlmICggYmV2ZWxFbmFibGVkICkge1xuXG5cdFx0XHRcdFx0bGV0IGxheWVyID0gMDsgLy8gc3RlcHMgKyAxXG5cdFx0XHRcdFx0bGV0IG9mZnNldCA9IHZsZW4gKiBsYXllcjtcblxuXHRcdFx0XHRcdC8vIEJvdHRvbSBmYWNlc1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZmxlbjsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzWyBpIF07XG5cdFx0XHRcdFx0XHRmMyggZmFjZVsgMiBdICsgb2Zmc2V0LCBmYWNlWyAxIF0gKyBvZmZzZXQsIGZhY2VbIDAgXSArIG9mZnNldCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGF5ZXIgPSBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyO1xuXHRcdFx0XHRcdG9mZnNldCA9IHZsZW4gKiBsYXllcjtcblxuXHRcdFx0XHRcdC8vIFRvcCBmYWNlc1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZmxlbjsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzWyBpIF07XG5cdFx0XHRcdFx0XHRmMyggZmFjZVsgMCBdICsgb2Zmc2V0LCBmYWNlWyAxIF0gKyBvZmZzZXQsIGZhY2VbIDIgXSArIG9mZnNldCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBCb3R0b20gZmFjZXNcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1sgaSBdO1xuXHRcdFx0XHRcdFx0ZjMoIGZhY2VbIDIgXSwgZmFjZVsgMSBdLCBmYWNlWyAwIF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFRvcCBmYWNlc1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZmxlbjsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzWyBpIF07XG5cdFx0XHRcdFx0XHRmMyggZmFjZVsgMCBdICsgdmxlbiAqIHN0ZXBzLCBmYWNlWyAxIF0gKyB2bGVuICogc3RlcHMsIGZhY2VbIDIgXSArIHZsZW4gKiBzdGVwcyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5hZGRHcm91cCggc3RhcnQsIHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMyAtIHN0YXJ0LCAwICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIGZhY2VzIGZvciB0aGUgei1zaWRlcyBvZiB0aGUgc2hhcGVcblxuXHRcdFx0ZnVuY3Rpb24gYnVpbGRTaWRlRmFjZXMoKSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cdFx0XHRcdGxldCBsYXllcm9mZnNldCA9IDA7XG5cdFx0XHRcdHNpZGV3YWxscyggY29udG91ciwgbGF5ZXJvZmZzZXQgKTtcblx0XHRcdFx0bGF5ZXJvZmZzZXQgKz0gY29udG91ci5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggbGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1sgaCBdO1xuXHRcdFx0XHRcdHNpZGV3YWxscyggYWhvbGUsIGxheWVyb2Zmc2V0ICk7XG5cblx0XHRcdFx0XHQvLywgdHJ1ZVxuXHRcdFx0XHRcdGxheWVyb2Zmc2V0ICs9IGFob2xlLmxlbmd0aDtcblxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRzY29wZS5hZGRHcm91cCggc3RhcnQsIHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMyAtIHN0YXJ0LCAxICk7XG5cblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBzaWRld2FsbHMoIGNvbnRvdXIsIGxheWVyb2Zmc2V0ICkge1xuXG5cdFx0XHRcdGxldCBpID0gY29udG91ci5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCAtLSBpID49IDAgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBqID0gaTtcblx0XHRcdFx0XHRsZXQgayA9IGkgLSAxO1xuXHRcdFx0XHRcdGlmICggayA8IDAgKSBrID0gY29udG91ci5sZW5ndGggLSAxO1xuXG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZygnYicsIGksaiwgaS0xLCBrLHZlcnRpY2VzLmxlbmd0aCk7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgcyA9IDAsIHNsID0gKCBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyICk7IHMgPCBzbDsgcyArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2xlbjEgPSB2bGVuICogcztcblx0XHRcdFx0XHRcdGNvbnN0IHNsZW4yID0gdmxlbiAqICggcyArIDEgKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYSA9IGxheWVyb2Zmc2V0ICsgaiArIHNsZW4xLFxuXHRcdFx0XHRcdFx0XHRiID0gbGF5ZXJvZmZzZXQgKyBrICsgc2xlbjEsXG5cdFx0XHRcdFx0XHRcdGMgPSBsYXllcm9mZnNldCArIGsgKyBzbGVuMixcblx0XHRcdFx0XHRcdFx0ZCA9IGxheWVyb2Zmc2V0ICsgaiArIHNsZW4yO1xuXG5cdFx0XHRcdFx0XHRmNCggYSwgYiwgYywgZCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiB2KCB4LCB5LCB6ICkge1xuXG5cdFx0XHRcdHBsYWNlaG9sZGVyLnB1c2goIHggKTtcblx0XHRcdFx0cGxhY2Vob2xkZXIucHVzaCggeSApO1xuXHRcdFx0XHRwbGFjZWhvbGRlci5wdXNoKCB6ICk7XG5cblx0XHRcdH1cblxuXG5cdFx0XHRmdW5jdGlvbiBmMyggYSwgYiwgYyApIHtcblxuXHRcdFx0XHRhZGRWZXJ0ZXgoIGEgKTtcblx0XHRcdFx0YWRkVmVydGV4KCBiICk7XG5cdFx0XHRcdGFkZFZlcnRleCggYyApO1xuXG5cdFx0XHRcdGNvbnN0IG5leHRJbmRleCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblx0XHRcdFx0Y29uc3QgdXZzID0gdXZnZW4uZ2VuZXJhdGVUb3BVViggc2NvcGUsIHZlcnRpY2VzQXJyYXksIG5leHRJbmRleCAtIDMsIG5leHRJbmRleCAtIDIsIG5leHRJbmRleCAtIDEgKTtcblxuXHRcdFx0XHRhZGRVViggdXZzWyAwIF0gKTtcblx0XHRcdFx0YWRkVVYoIHV2c1sgMSBdICk7XG5cdFx0XHRcdGFkZFVWKCB1dnNbIDIgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGY0KCBhLCBiLCBjLCBkICkge1xuXG5cdFx0XHRcdGFkZFZlcnRleCggYSApO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoIGIgKTtcblx0XHRcdFx0YWRkVmVydGV4KCBkICk7XG5cblx0XHRcdFx0YWRkVmVydGV4KCBiICk7XG5cdFx0XHRcdGFkZFZlcnRleCggYyApO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoIGQgKTtcblxuXG5cdFx0XHRcdGNvbnN0IG5leHRJbmRleCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblx0XHRcdFx0Y29uc3QgdXZzID0gdXZnZW4uZ2VuZXJhdGVTaWRlV2FsbFVWKCBzY29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gNiwgbmV4dEluZGV4IC0gMywgbmV4dEluZGV4IC0gMiwgbmV4dEluZGV4IC0gMSApO1xuXG5cdFx0XHRcdGFkZFVWKCB1dnNbIDAgXSApO1xuXHRcdFx0XHRhZGRVViggdXZzWyAxIF0gKTtcblx0XHRcdFx0YWRkVVYoIHV2c1sgMyBdICk7XG5cblx0XHRcdFx0YWRkVVYoIHV2c1sgMSBdICk7XG5cdFx0XHRcdGFkZFVWKCB1dnNbIDIgXSApO1xuXHRcdFx0XHRhZGRVViggdXZzWyAzIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBhZGRWZXJ0ZXgoIGluZGV4ICkge1xuXG5cdFx0XHRcdHZlcnRpY2VzQXJyYXkucHVzaCggcGxhY2Vob2xkZXJbIGluZGV4ICogMyArIDAgXSApO1xuXHRcdFx0XHR2ZXJ0aWNlc0FycmF5LnB1c2goIHBsYWNlaG9sZGVyWyBpbmRleCAqIDMgKyAxIF0gKTtcblx0XHRcdFx0dmVydGljZXNBcnJheS5wdXNoKCBwbGFjZWhvbGRlclsgaW5kZXggKiAzICsgMiBdICk7XG5cblx0XHRcdH1cblxuXG5cdFx0XHRmdW5jdGlvbiBhZGRVViggdmVjdG9yMiApIHtcblxuXHRcdFx0XHR1dkFycmF5LnB1c2goIHZlY3RvcjIueCApO1xuXHRcdFx0XHR1dkFycmF5LnB1c2goIHZlY3RvcjIueSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyYW1ldGVycy5zaGFwZXM7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMucGFyYW1ldGVycy5vcHRpb25zO1xuXG5cdFx0cmV0dXJuIHRvSlNPTiQxKCBzaGFwZXMsIG9wdGlvbnMsIGRhdGEgKTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhLCBzaGFwZXMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeVNoYXBlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGogPSAwLCBqbCA9IGRhdGEuc2hhcGVzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1sgZGF0YS5zaGFwZXNbIGogXSBdO1xuXG5cdFx0XHRnZW9tZXRyeVNoYXBlcy5wdXNoKCBzaGFwZSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0cnVkZVBhdGggPSBkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGg7XG5cblx0XHRpZiAoIGV4dHJ1ZGVQYXRoICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGRhdGEub3B0aW9ucy5leHRydWRlUGF0aCA9IG5ldyBDdXJ2ZXNbIGV4dHJ1ZGVQYXRoLnR5cGUgXSgpLmZyb21KU09OKCBleHRydWRlUGF0aCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBFeHRydWRlR2VvbWV0cnkoIGdlb21ldHJ5U2hhcGVzLCBkYXRhLm9wdGlvbnMgKTtcblxuXHR9XG5cbn1cblxuY29uc3QgV29ybGRVVkdlbmVyYXRvciA9IHtcblxuXHRnZW5lcmF0ZVRvcFVWOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBpbmRleEIsIGluZGV4QyApIHtcblxuXHRcdGNvbnN0IGFfeCA9IHZlcnRpY2VzWyBpbmRleEEgKiAzIF07XG5cdFx0Y29uc3QgYV95ID0gdmVydGljZXNbIGluZGV4QSAqIDMgKyAxIF07XG5cdFx0Y29uc3QgYl94ID0gdmVydGljZXNbIGluZGV4QiAqIDMgXTtcblx0XHRjb25zdCBiX3kgPSB2ZXJ0aWNlc1sgaW5kZXhCICogMyArIDEgXTtcblx0XHRjb25zdCBjX3ggPSB2ZXJ0aWNlc1sgaW5kZXhDICogMyBdO1xuXHRcdGNvbnN0IGNfeSA9IHZlcnRpY2VzWyBpbmRleEMgKiAzICsgMSBdO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdG5ldyBWZWN0b3IyKCBhX3gsIGFfeSApLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGJfeCwgYl95ICksXG5cdFx0XHRuZXcgVmVjdG9yMiggY194LCBjX3kgKVxuXHRcdF07XG5cblx0fSxcblxuXHRnZW5lcmF0ZVNpZGVXYWxsVVY6IGZ1bmN0aW9uICggZ2VvbWV0cnksIHZlcnRpY2VzLCBpbmRleEEsIGluZGV4QiwgaW5kZXhDLCBpbmRleEQgKSB7XG5cblx0XHRjb25zdCBhX3ggPSB2ZXJ0aWNlc1sgaW5kZXhBICogMyBdO1xuXHRcdGNvbnN0IGFfeSA9IHZlcnRpY2VzWyBpbmRleEEgKiAzICsgMSBdO1xuXHRcdGNvbnN0IGFfeiA9IHZlcnRpY2VzWyBpbmRleEEgKiAzICsgMiBdO1xuXHRcdGNvbnN0IGJfeCA9IHZlcnRpY2VzWyBpbmRleEIgKiAzIF07XG5cdFx0Y29uc3QgYl95ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAxIF07XG5cdFx0Y29uc3QgYl96ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAyIF07XG5cdFx0Y29uc3QgY194ID0gdmVydGljZXNbIGluZGV4QyAqIDMgXTtcblx0XHRjb25zdCBjX3kgPSB2ZXJ0aWNlc1sgaW5kZXhDICogMyArIDEgXTtcblx0XHRjb25zdCBjX3ogPSB2ZXJ0aWNlc1sgaW5kZXhDICogMyArIDIgXTtcblx0XHRjb25zdCBkX3ggPSB2ZXJ0aWNlc1sgaW5kZXhEICogMyBdO1xuXHRcdGNvbnN0IGRfeSA9IHZlcnRpY2VzWyBpbmRleEQgKiAzICsgMSBdO1xuXHRcdGNvbnN0IGRfeiA9IHZlcnRpY2VzWyBpbmRleEQgKiAzICsgMiBdO1xuXG5cdFx0aWYgKCBNYXRoLmFicyggYV95IC0gYl95ICkgPCBNYXRoLmFicyggYV94IC0gYl94ICkgKSB7XG5cblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBhX3gsIDEgLSBhX3ogKSxcblx0XHRcdFx0bmV3IFZlY3RvcjIoIGJfeCwgMSAtIGJfeiApLFxuXHRcdFx0XHRuZXcgVmVjdG9yMiggY194LCAxIC0gY196ICksXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBkX3gsIDEgLSBkX3ogKVxuXHRcdFx0XTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBhX3ksIDEgLSBhX3ogKSxcblx0XHRcdFx0bmV3IFZlY3RvcjIoIGJfeSwgMSAtIGJfeiApLFxuXHRcdFx0XHRuZXcgVmVjdG9yMiggY195LCAxIC0gY196ICksXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBkX3ksIDEgLSBkX3ogKVxuXHRcdFx0XTtcblxuXHRcdH1cblxuXHR9XG5cbn07XG5cbmZ1bmN0aW9uIHRvSlNPTiQxKCBzaGFwZXMsIG9wdGlvbnMsIGRhdGEgKSB7XG5cblx0ZGF0YS5zaGFwZXMgPSBbXTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHNoYXBlcyApICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzWyBpIF07XG5cblx0XHRcdGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlLnV1aWQgKTtcblxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0ZGF0YS5zaGFwZXMucHVzaCggc2hhcGVzLnV1aWQgKTtcblxuXHR9XG5cblx0aWYgKCBvcHRpb25zLmV4dHJ1ZGVQYXRoICE9PSB1bmRlZmluZWQgKSBkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGggPSBvcHRpb25zLmV4dHJ1ZGVQYXRoLnRvSlNPTigpO1xuXG5cdHJldHVybiBkYXRhO1xuXG59XG5cbmNsYXNzIEljb3NhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBkZXRhaWwgPSAwICkge1xuXG5cdFx0Y29uc3QgdCA9ICggMSArIE1hdGguc3FydCggNSApICkgLyAyO1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXG5cdFx0XHQtIDEsIHQsIDAsIFx0MSwgdCwgMCwgXHQtIDEsIC0gdCwgMCwgXHQxLCAtIHQsIDAsXG5cdFx0XHQwLCAtIDEsIHQsIFx0MCwgMSwgdCxcdDAsIC0gMSwgLSB0LCBcdDAsIDEsIC0gdCxcblx0XHRcdHQsIDAsIC0gMSwgXHR0LCAwLCAxLCBcdC0gdCwgMCwgLSAxLCBcdC0gdCwgMCwgMVxuXHRcdF07XG5cblx0XHRjb25zdCBpbmRpY2VzID0gW1xuXHRcdFx0MCwgMTEsIDUsIFx0MCwgNSwgMSwgXHQwLCAxLCA3LCBcdDAsIDcsIDEwLCBcdDAsIDEwLCAxMSxcblx0XHRcdDEsIDUsIDksIFx0NSwgMTEsIDQsXHQxMSwgMTAsIDIsXHQxMCwgNywgNixcdDcsIDEsIDgsXG5cdFx0XHQzLCA5LCA0LCBcdDMsIDQsIDIsXHQzLCAyLCA2LFx0MywgNiwgOCxcdDMsIDgsIDksXG5cdFx0XHQ0LCA5LCA1LCBcdDIsIDQsIDExLFx0NiwgMiwgMTAsXHQ4LCA2LCA3LFx0OSwgOCwgMVxuXHRcdF07XG5cblx0XHRzdXBlciggdmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnSWNvc2FoZWRyb25HZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBJY29zYWhlZHJvbkdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgTGF0aGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcG9pbnRzID0gWyBuZXcgVmVjdG9yMiggMCwgMC41ICksIG5ldyBWZWN0b3IyKCAwLjUsIDAgKSwgbmV3IFZlY3RvcjIoIDAsIC0gMC41ICkgXSwgc2VnbWVudHMgPSAxMiwgcGhpU3RhcnQgPSAwLCBwaGlMZW5ndGggPSBNYXRoLlBJICogMiApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGF0aGVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRwb2ludHM6IHBvaW50cyxcblx0XHRcdHNlZ21lbnRzOiBzZWdtZW50cyxcblx0XHRcdHBoaVN0YXJ0OiBwaGlTdGFydCxcblx0XHRcdHBoaUxlbmd0aDogcGhpTGVuZ3RoXG5cdFx0fTtcblxuXHRcdHNlZ21lbnRzID0gTWF0aC5mbG9vciggc2VnbWVudHMgKTtcblxuXHRcdC8vIGNsYW1wIHBoaUxlbmd0aCBzbyBpdCdzIGluIHJhbmdlIG9mIFsgMCwgMlBJIF1cblxuXHRcdHBoaUxlbmd0aCA9IGNsYW1wKCBwaGlMZW5ndGgsIDAsIE1hdGguUEkgKiAyICk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblx0XHRjb25zdCBpbml0Tm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IGludmVyc2VTZWdtZW50cyA9IDEuMCAvIHNlZ21lbnRzO1xuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgY3VyTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBwcmV2Tm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRsZXQgZHggPSAwO1xuXHRcdGxldCBkeSA9IDA7XG5cblx0XHQvLyBwcmUtY29tcHV0ZSBub3JtYWxzIGZvciBpbml0aWFsIFwibWVyaWRpYW5cIlxuXG5cdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9ICggcG9pbnRzLmxlbmd0aCAtIDEgKTsgaiArKyApIHtcblxuXHRcdFx0c3dpdGNoICggaiApIHtcblxuXHRcdFx0XHRjYXNlIDA6XHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAxc3QgdmVydGV4IG9uIHBhdGhcblxuXHRcdFx0XHRcdGR4ID0gcG9pbnRzWyBqICsgMSBdLnggLSBwb2ludHNbIGogXS54O1xuXHRcdFx0XHRcdGR5ID0gcG9pbnRzWyBqICsgMSBdLnkgLSBwb2ludHNbIGogXS55O1xuXG5cdFx0XHRcdFx0bm9ybWFsLnggPSBkeSAqIDEuMDtcblx0XHRcdFx0XHRub3JtYWwueSA9IC0gZHg7XG5cdFx0XHRcdFx0bm9ybWFsLnogPSBkeSAqIDAuMDtcblxuXHRcdFx0XHRcdHByZXZOb3JtYWwuY29weSggbm9ybWFsICk7XG5cblx0XHRcdFx0XHRub3JtYWwubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHRpbml0Tm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56ICk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICggcG9pbnRzLmxlbmd0aCAtIDEgKTpcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGxhc3QgVmVydGV4IG9uIHBhdGhcblxuXHRcdFx0XHRcdGluaXROb3JtYWxzLnB1c2goIHByZXZOb3JtYWwueCwgcHJldk5vcm1hbC55LCBwcmV2Tm9ybWFsLnogKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XHRcdFx0Ly8gZGVmYXVsdCBoYW5kbGluZyBmb3IgYWxsIHZlcnRpY2VzIGluIGJldHdlZW5cblxuXHRcdFx0XHRcdGR4ID0gcG9pbnRzWyBqICsgMSBdLnggLSBwb2ludHNbIGogXS54O1xuXHRcdFx0XHRcdGR5ID0gcG9pbnRzWyBqICsgMSBdLnkgLSBwb2ludHNbIGogXS55O1xuXG5cdFx0XHRcdFx0bm9ybWFsLnggPSBkeSAqIDEuMDtcblx0XHRcdFx0XHRub3JtYWwueSA9IC0gZHg7XG5cdFx0XHRcdFx0bm9ybWFsLnogPSBkeSAqIDAuMDtcblxuXHRcdFx0XHRcdGN1ck5vcm1hbC5jb3B5KCBub3JtYWwgKTtcblxuXHRcdFx0XHRcdG5vcm1hbC54ICs9IHByZXZOb3JtYWwueDtcblx0XHRcdFx0XHRub3JtYWwueSArPSBwcmV2Tm9ybWFsLnk7XG5cdFx0XHRcdFx0bm9ybWFsLnogKz0gcHJldk5vcm1hbC56O1xuXG5cdFx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0aW5pdE5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApO1xuXG5cdFx0XHRcdFx0cHJldk5vcm1hbC5jb3B5KCBjdXJOb3JtYWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIHV2cyBhbmQgbm9ybWFsc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwaGkgPSBwaGlTdGFydCArIGkgKiBpbnZlcnNlU2VnbWVudHMgKiBwaGlMZW5ndGg7XG5cblx0XHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKCBwaGkgKTtcblx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKCBwaGkgKTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9ICggcG9pbnRzLmxlbmd0aCAtIDEgKTsgaiArKyApIHtcblxuXHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IHBvaW50c1sgaiBdLnggKiBzaW47XG5cdFx0XHRcdHZlcnRleC55ID0gcG9pbnRzWyBqIF0ueTtcblx0XHRcdFx0dmVydGV4LnogPSBwb2ludHNbIGogXS54ICogY29zO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdHV2LnggPSBpIC8gc2VnbWVudHM7XG5cdFx0XHRcdHV2LnkgPSBqIC8gKCBwb2ludHMubGVuZ3RoIC0gMSApO1xuXG5cdFx0XHRcdHV2cy5wdXNoKCB1di54LCB1di55ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0Y29uc3QgeCA9IGluaXROb3JtYWxzWyAzICogaiArIDAgXSAqIHNpbjtcblx0XHRcdFx0Y29uc3QgeSA9IGluaXROb3JtYWxzWyAzICogaiArIDEgXTtcblx0XHRcdFx0Y29uc3QgeiA9IGluaXROb3JtYWxzWyAzICogaiArIDAgXSAqIGNvcztcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goIHgsIHksIHogKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gaW5kaWNlc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgc2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8ICggcG9pbnRzLmxlbmd0aCAtIDEgKTsgaiArKyApIHtcblxuXHRcdFx0XHRjb25zdCBiYXNlID0gaiArIGkgKiBwb2ludHMubGVuZ3RoO1xuXG5cdFx0XHRcdGNvbnN0IGEgPSBiYXNlO1xuXHRcdFx0XHRjb25zdCBiID0gYmFzZSArIHBvaW50cy5sZW5ndGg7XG5cdFx0XHRcdGNvbnN0IGMgPSBiYXNlICsgcG9pbnRzLmxlbmd0aCArIDE7XG5cdFx0XHRcdGNvbnN0IGQgPSBiYXNlICsgMTtcblxuXHRcdFx0XHQvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgZCApO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGMsIGQsIGIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgTGF0aGVHZW9tZXRyeSggZGF0YS5wb2ludHMsIGRhdGEuc2VnbWVudHMsIGRhdGEucGhpU3RhcnQsIGRhdGEucGhpTGVuZ3RoICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIE9jdGFoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEsIGRldGFpbCA9IDAgKSB7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtcblx0XHRcdDEsIDAsIDAsIFx0LSAxLCAwLCAwLFx0MCwgMSwgMCxcblx0XHRcdDAsIC0gMSwgMCwgXHQwLCAwLCAxLFx0MCwgMCwgLSAxXG5cdFx0XTtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXG5cdFx0XHQwLCAyLCA0LFx0MCwgNCwgMyxcdDAsIDMsIDUsXG5cdFx0XHQwLCA1LCAyLFx0MSwgMiwgNSxcdDEsIDUsIDMsXG5cdFx0XHQxLCAzLCA0LFx0MSwgNCwgMlxuXHRcdF07XG5cblx0XHRzdXBlciggdmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnT2N0YWhlZHJvbkdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9O1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IE9jdGFoZWRyb25HZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlsICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFJpbmdHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggaW5uZXJSYWRpdXMgPSAwLjUsIG91dGVyUmFkaXVzID0gMSwgdGhldGFTZWdtZW50cyA9IDgsIHBoaVNlZ21lbnRzID0gMSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1JpbmdHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRpbm5lclJhZGl1czogaW5uZXJSYWRpdXMsXG5cdFx0XHRvdXRlclJhZGl1czogb3V0ZXJSYWRpdXMsXG5cdFx0XHR0aGV0YVNlZ21lbnRzOiB0aGV0YVNlZ21lbnRzLFxuXHRcdFx0cGhpU2VnbWVudHM6IHBoaVNlZ21lbnRzLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cblx0XHR0aGV0YVNlZ21lbnRzID0gTWF0aC5tYXgoIDMsIHRoZXRhU2VnbWVudHMgKTtcblx0XHRwaGlTZWdtZW50cyA9IE1hdGgubWF4KCAxLCBwaGlTZWdtZW50cyApO1xuXG5cdFx0Ly8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXG5cdFx0Ly8gc29tZSBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgcmFkaXVzID0gaW5uZXJSYWRpdXM7XG5cdFx0Y29uc3QgcmFkaXVzU3RlcCA9ICggKCBvdXRlclJhZGl1cyAtIGlubmVyUmFkaXVzICkgLyBwaGlTZWdtZW50cyApO1xuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9IHBoaVNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gdGhldGFTZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHQvLyB2YWx1ZXMgYXJlIGdlbmVyYXRlIGZyb20gdGhlIGluc2lkZSBvZiB0aGUgcmluZyB0byB0aGUgb3V0c2lkZVxuXG5cdFx0XHRcdGNvbnN0IHNlZ21lbnQgPSB0aGV0YVN0YXJ0ICsgaSAvIHRoZXRhU2VnbWVudHMgKiB0aGV0YUxlbmd0aDtcblxuXHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIE1hdGguY29zKCBzZWdtZW50ICk7XG5cdFx0XHRcdHZlcnRleC55ID0gcmFkaXVzICogTWF0aC5zaW4oIHNlZ21lbnQgKTtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCAwLCAwLCAxICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1di54ID0gKCB2ZXJ0ZXgueCAvIG91dGVyUmFkaXVzICsgMSApIC8gMjtcblx0XHRcdFx0dXYueSA9ICggdmVydGV4LnkgLyBvdXRlclJhZGl1cyArIDEgKSAvIDI7XG5cblx0XHRcdFx0dXZzLnB1c2goIHV2LngsIHV2LnkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBpbmNyZWFzZSB0aGUgcmFkaXVzIGZvciBuZXh0IHJvdyBvZiB2ZXJ0aWNlc1xuXG5cdFx0XHRyYWRpdXMgKz0gcmFkaXVzU3RlcDtcblxuXHRcdH1cblxuXHRcdC8vIGluZGljZXNcblxuXHRcdGZvciAoIGxldCBqID0gMDsgaiA8IHBoaVNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRjb25zdCB0aGV0YVNlZ21lbnRMZXZlbCA9IGogKiAoIHRoZXRhU2VnbWVudHMgKyAxICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoZXRhU2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3Qgc2VnbWVudCA9IGkgKyB0aGV0YVNlZ21lbnRMZXZlbDtcblxuXHRcdFx0XHRjb25zdCBhID0gc2VnbWVudDtcblx0XHRcdFx0Y29uc3QgYiA9IHNlZ21lbnQgKyB0aGV0YVNlZ21lbnRzICsgMTtcblx0XHRcdFx0Y29uc3QgYyA9IHNlZ21lbnQgKyB0aGV0YVNlZ21lbnRzICsgMjtcblx0XHRcdFx0Y29uc3QgZCA9IHNlZ21lbnQgKyAxO1xuXG5cdFx0XHRcdC8vIGZhY2VzXG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdGluZGljZXMucHVzaCggYiwgYywgZCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleCggaW5kaWNlcyApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBSaW5nR2VvbWV0cnkoIGRhdGEuaW5uZXJSYWRpdXMsIGRhdGEub3V0ZXJSYWRpdXMsIGRhdGEudGhldGFTZWdtZW50cywgZGF0YS5waGlTZWdtZW50cywgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFNoYXBlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHNoYXBlcyA9IG5ldyBTaGFwZSggWyBuZXcgVmVjdG9yMiggMCwgMC41ICksIG5ldyBWZWN0b3IyKCAtIDAuNSwgLSAwLjUgKSwgbmV3IFZlY3RvcjIoIDAuNSwgLSAwLjUgKSBdICksIGN1cnZlU2VnbWVudHMgPSAxMiApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2hhcGVzOiBzaGFwZXMsXG5cdFx0XHRjdXJ2ZVNlZ21lbnRzOiBjdXJ2ZVNlZ21lbnRzXG5cdFx0fTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGxldCBncm91cFN0YXJ0ID0gMDtcblx0XHRsZXQgZ3JvdXBDb3VudCA9IDA7XG5cblx0XHQvLyBhbGxvdyBzaW5nbGUgYW5kIGFycmF5IHZhbHVlcyBmb3IgXCJzaGFwZXNcIiBwYXJhbWV0ZXJcblxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggc2hhcGVzICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRhZGRTaGFwZSggc2hhcGVzICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBzaGFwZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGFkZFNoYXBlKCBzaGFwZXNbIGkgXSApO1xuXG5cdFx0XHRcdHRoaXMuYWRkR3JvdXAoIGdyb3VwU3RhcnQsIGdyb3VwQ291bnQsIGkgKTsgLy8gZW5hYmxlcyBNdWx0aU1hdGVyaWFsIHN1cHBvcnRcblxuXHRcdFx0XHRncm91cFN0YXJ0ICs9IGdyb3VwQ291bnQ7XG5cdFx0XHRcdGdyb3VwQ291bnQgPSAwO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleCggaW5kaWNlcyApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTtcblxuXG5cdFx0Ly8gaGVscGVyIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gYWRkU2hhcGUoIHNoYXBlICkge1xuXG5cdFx0XHRjb25zdCBpbmRleE9mZnNldCA9IHZlcnRpY2VzLmxlbmd0aCAvIDM7XG5cdFx0XHRjb25zdCBwb2ludHMgPSBzaGFwZS5leHRyYWN0UG9pbnRzKCBjdXJ2ZVNlZ21lbnRzICk7XG5cblx0XHRcdGxldCBzaGFwZVZlcnRpY2VzID0gcG9pbnRzLnNoYXBlO1xuXHRcdFx0Y29uc3Qgc2hhcGVIb2xlcyA9IHBvaW50cy5ob2xlcztcblxuXHRcdFx0Ly8gY2hlY2sgZGlyZWN0aW9uIG9mIHZlcnRpY2VzXG5cblx0XHRcdGlmICggU2hhcGVVdGlscy5pc0Nsb2NrV2lzZSggc2hhcGVWZXJ0aWNlcyApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRzaGFwZVZlcnRpY2VzID0gc2hhcGVWZXJ0aWNlcy5yZXZlcnNlKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc2hhcGVIb2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNoYXBlSG9sZSA9IHNoYXBlSG9sZXNbIGkgXTtcblxuXHRcdFx0XHRpZiAoIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHNoYXBlSG9sZSApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0c2hhcGVIb2xlc1sgaSBdID0gc2hhcGVIb2xlLnJldmVyc2UoKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZmFjZXMgPSBTaGFwZVV0aWxzLnRyaWFuZ3VsYXRlU2hhcGUoIHNoYXBlVmVydGljZXMsIHNoYXBlSG9sZXMgKTtcblxuXHRcdFx0Ly8gam9pbiB2ZXJ0aWNlcyBvZiBpbm5lciBhbmQgb3V0ZXIgcGF0aHMgdG8gYSBzaW5nbGUgYXJyYXlcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc2hhcGVIb2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNoYXBlSG9sZSA9IHNoYXBlSG9sZXNbIGkgXTtcblx0XHRcdFx0c2hhcGVWZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMuY29uY2F0KCBzaGFwZUhvbGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyB2ZXJ0aWNlcywgbm9ybWFscywgdXZzXG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlVmVydGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB2ZXJ0ZXggPSBzaGFwZVZlcnRpY2VzWyBpIF07XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCAwICk7XG5cdFx0XHRcdG5vcm1hbHMucHVzaCggMCwgMCwgMSApO1xuXHRcdFx0XHR1dnMucHVzaCggdmVydGV4LngsIHZlcnRleC55ICk7IC8vIHdvcmxkIHV2c1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGluY2lkZXNcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gZmFjZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbIGkgXTtcblxuXHRcdFx0XHRjb25zdCBhID0gZmFjZVsgMCBdICsgaW5kZXhPZmZzZXQ7XG5cdFx0XHRcdGNvbnN0IGIgPSBmYWNlWyAxIF0gKyBpbmRleE9mZnNldDtcblx0XHRcdFx0Y29uc3QgYyA9IGZhY2VbIDIgXSArIGluZGV4T2Zmc2V0O1xuXG5cdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgYyApO1xuXHRcdFx0XHRncm91cENvdW50ICs9IDM7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0Y29uc3Qgc2hhcGVzID0gdGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztcblxuXHRcdHJldHVybiB0b0pTT04oIHNoYXBlcywgZGF0YSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEsIHNoYXBlcyApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5U2hhcGVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaiA9IDAsIGpsID0gZGF0YS5zaGFwZXMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7XG5cblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzWyBkYXRhLnNoYXBlc1sgaiBdIF07XG5cblx0XHRcdGdlb21ldHJ5U2hhcGVzLnB1c2goIHNoYXBlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFNoYXBlR2VvbWV0cnkoIGdlb21ldHJ5U2hhcGVzLCBkYXRhLmN1cnZlU2VnbWVudHMgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gdG9KU09OKCBzaGFwZXMsIGRhdGEgKSB7XG5cblx0ZGF0YS5zaGFwZXMgPSBbXTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHNoYXBlcyApICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzWyBpIF07XG5cblx0XHRcdGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlLnV1aWQgKTtcblxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0ZGF0YS5zaGFwZXMucHVzaCggc2hhcGVzLnV1aWQgKTtcblxuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG5cbn1cblxuY2xhc3MgU3BoZXJlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEsIHdpZHRoU2VnbWVudHMgPSAzMiwgaGVpZ2h0U2VnbWVudHMgPSAxNiwgcGhpU3RhcnQgPSAwLCBwaGlMZW5ndGggPSBNYXRoLlBJICogMiwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NwaGVyZUdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0d2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdHBoaVN0YXJ0OiBwaGlTdGFydCxcblx0XHRcdHBoaUxlbmd0aDogcGhpTGVuZ3RoLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cblx0XHR3aWR0aFNlZ21lbnRzID0gTWF0aC5tYXgoIDMsIE1hdGguZmxvb3IoIHdpZHRoU2VnbWVudHMgKSApO1xuXHRcdGhlaWdodFNlZ21lbnRzID0gTWF0aC5tYXgoIDIsIE1hdGguZmxvb3IoIGhlaWdodFNlZ21lbnRzICkgKTtcblxuXHRcdGNvbnN0IHRoZXRhRW5kID0gTWF0aC5taW4oIHRoZXRhU3RhcnQgKyB0aGV0YUxlbmd0aCwgTWF0aC5QSSApO1xuXG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBncmlkID0gW107XG5cblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRmb3IgKCBsZXQgaXkgPSAwOyBpeSA8PSBoZWlnaHRTZWdtZW50czsgaXkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHZlcnRpY2VzUm93ID0gW107XG5cblx0XHRcdGNvbnN0IHYgPSBpeSAvIGhlaWdodFNlZ21lbnRzO1xuXG5cdFx0XHQvLyBzcGVjaWFsIGNhc2UgZm9yIHRoZSBwb2xlc1xuXG5cdFx0XHRsZXQgdU9mZnNldCA9IDA7XG5cblx0XHRcdGlmICggaXkgPT0gMCAmJiB0aGV0YVN0YXJ0ID09IDAgKSB7XG5cblx0XHRcdFx0dU9mZnNldCA9IDAuNSAvIHdpZHRoU2VnbWVudHM7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGl5ID09IGhlaWdodFNlZ21lbnRzICYmIHRoZXRhRW5kID09IE1hdGguUEkgKSB7XG5cblx0XHRcdFx0dU9mZnNldCA9IC0gMC41IC8gd2lkdGhTZWdtZW50cztcblxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBsZXQgaXggPSAwOyBpeCA8PSB3aWR0aFNlZ21lbnRzOyBpeCArKyApIHtcblxuXHRcdFx0XHRjb25zdCB1ID0gaXggLyB3aWR0aFNlZ21lbnRzO1xuXG5cdFx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gLSByYWRpdXMgKiBNYXRoLmNvcyggcGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoICkgKiBNYXRoLnNpbiggdGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCApO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1hdGguY29zKCB0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoICk7XG5cdFx0XHRcdHZlcnRleC56ID0gcmFkaXVzICogTWF0aC5zaW4oIHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCApICogTWF0aC5zaW4oIHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGggKTtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFsLmNvcHkoIHZlcnRleCApLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKCB1ICsgdU9mZnNldCwgMSAtIHYgKTtcblxuXHRcdFx0XHR2ZXJ0aWNlc1Jvdy5wdXNoKCBpbmRleCArKyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGdyaWQucHVzaCggdmVydGljZXNSb3cgKTtcblxuXHRcdH1cblxuXHRcdC8vIGluZGljZXNcblxuXHRcdGZvciAoIGxldCBpeSA9IDA7IGl5IDwgaGVpZ2h0U2VnbWVudHM7IGl5ICsrICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaXggPSAwOyBpeCA8IHdpZHRoU2VnbWVudHM7IGl4ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGEgPSBncmlkWyBpeSBdWyBpeCArIDEgXTtcblx0XHRcdFx0Y29uc3QgYiA9IGdyaWRbIGl5IF1bIGl4IF07XG5cdFx0XHRcdGNvbnN0IGMgPSBncmlkWyBpeSArIDEgXVsgaXggXTtcblx0XHRcdFx0Y29uc3QgZCA9IGdyaWRbIGl5ICsgMSBdWyBpeCArIDEgXTtcblxuXHRcdFx0XHRpZiAoIGl5ICE9PSAwIHx8IHRoZXRhU3RhcnQgPiAwICkgaW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdGlmICggaXkgIT09IGhlaWdodFNlZ21lbnRzIC0gMSB8fCB0aGV0YUVuZCA8IE1hdGguUEkgKSBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgU3BoZXJlR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLndpZHRoU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEucGhpU3RhcnQsIGRhdGEucGhpTGVuZ3RoLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGggKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVGV0cmFoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEsIGRldGFpbCA9IDAgKSB7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtcblx0XHRcdDEsIDEsIDEsIFx0LSAxLCAtIDEsIDEsIFx0LSAxLCAxLCAtIDEsIFx0MSwgLSAxLCAtIDFcblx0XHRdO1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtcblx0XHRcdDIsIDEsIDAsIFx0MCwgMywgMixcdDEsIDMsIDAsXHQyLCAzLCAxXG5cdFx0XTtcblxuXHRcdHN1cGVyKCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdUZXRyYWhlZHJvbkdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9O1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFRldHJhaGVkcm9uR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBUb3J1c0dlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCB0dWJlID0gMC40LCByYWRpYWxTZWdtZW50cyA9IDgsIHR1YnVsYXJTZWdtZW50cyA9IDYsIGFyYyA9IE1hdGguUEkgKiAyICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnVG9ydXNHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHR1YmU6IHR1YmUsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHR0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cyxcblx0XHRcdGFyYzogYXJjXG5cdFx0fTtcblxuXHRcdHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9vciggcmFkaWFsU2VnbWVudHMgKTtcblx0XHR0dWJ1bGFyU2VnbWVudHMgPSBNYXRoLmZsb29yKCB0dWJ1bGFyU2VnbWVudHMgKTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IGNlbnRlciA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHUgPSBpIC8gdHVidWxhclNlZ21lbnRzICogYXJjO1xuXHRcdFx0XHRjb25zdCB2ID0gaiAvIHJhZGlhbFNlZ21lbnRzICogTWF0aC5QSSAqIDI7XG5cblx0XHRcdFx0Ly8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSAoIHJhZGl1cyArIHR1YmUgKiBNYXRoLmNvcyggdiApICkgKiBNYXRoLmNvcyggdSApO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9ICggcmFkaXVzICsgdHViZSAqIE1hdGguY29zKCB2ICkgKSAqIE1hdGguc2luKCB1ICk7XG5cdFx0XHRcdHZlcnRleC56ID0gdHViZSAqIE1hdGguc2luKCB2ICk7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdGNlbnRlci54ID0gcmFkaXVzICogTWF0aC5jb3MoIHUgKTtcblx0XHRcdFx0Y2VudGVyLnkgPSByYWRpdXMgKiBNYXRoLnNpbiggdSApO1xuXHRcdFx0XHRub3JtYWwuc3ViVmVjdG9ycyggdmVydGV4LCBjZW50ZXIgKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKCBpIC8gdHVidWxhclNlZ21lbnRzICk7XG5cdFx0XHRcdHV2cy5wdXNoKCBqIC8gcmFkaWFsU2VnbWVudHMgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cdFx0Zm9yICggbGV0IGogPSAxOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDE7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdC8vIGluZGljZXNcblxuXHRcdFx0XHRjb25zdCBhID0gKCB0dWJ1bGFyU2VnbWVudHMgKyAxICkgKiBqICsgaSAtIDE7XG5cdFx0XHRcdGNvbnN0IGIgPSAoIHR1YnVsYXJTZWdtZW50cyArIDEgKSAqICggaiAtIDEgKSArIGkgLSAxO1xuXHRcdFx0XHRjb25zdCBjID0gKCB0dWJ1bGFyU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyBpO1xuXHRcdFx0XHRjb25zdCBkID0gKCB0dWJ1bGFyU2VnbWVudHMgKyAxICkgKiBqICsgaTtcblxuXHRcdFx0XHQvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgZCApO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgVG9ydXNHZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEudHViZSwgZGF0YS5yYWRpYWxTZWdtZW50cywgZGF0YS50dWJ1bGFyU2VnbWVudHMsIGRhdGEuYXJjICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFRvcnVzS25vdEdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCB0dWJlID0gMC40LCB0dWJ1bGFyU2VnbWVudHMgPSA2NCwgcmFkaWFsU2VnbWVudHMgPSA4LCBwID0gMiwgcSA9IDMgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdUb3J1c0tub3RHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHR1YmU6IHR1YmUsXG5cdFx0XHR0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cyxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdHA6IHAsXG5cdFx0XHRxOiBxXG5cdFx0fTtcblxuXHRcdHR1YnVsYXJTZWdtZW50cyA9IE1hdGguZmxvb3IoIHR1YnVsYXJTZWdtZW50cyApO1xuXHRcdHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9vciggcmFkaWFsU2VnbWVudHMgKTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGNvbnN0IFAxID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBQMiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRjb25zdCBCID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBUID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBOID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7ICsrIGkgKSB7XG5cblx0XHRcdC8vIHRoZSByYWRpYW4gXCJ1XCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ2VtZW50XG5cblx0XHRcdGNvbnN0IHUgPSBpIC8gdHVidWxhclNlZ21lbnRzICogcCAqIE1hdGguUEkgKiAyO1xuXG5cdFx0XHQvLyBub3cgd2UgY2FsY3VsYXRlIHR3byBwb2ludHMuIFAxIGlzIG91ciBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZSwgUDIgaXMgYSBsaXR0bGUgZmFydGhlciBhaGVhZC5cblx0XHRcdC8vIHRoZXNlIHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYSBzcGVjaWFsIFwiY29vcmRpbmF0ZSBzcGFjZVwiLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHZlcnRleCBwb3NpdGlvbnNcblxuXHRcdFx0Y2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKCB1LCBwLCBxLCByYWRpdXMsIFAxICk7XG5cdFx0XHRjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUoIHUgKyAwLjAxLCBwLCBxLCByYWRpdXMsIFAyICk7XG5cblx0XHRcdC8vIGNhbGN1bGF0ZSBvcnRob25vcm1hbCBiYXNpc1xuXG5cdFx0XHRULnN1YlZlY3RvcnMoIFAyLCBQMSApO1xuXHRcdFx0Ti5hZGRWZWN0b3JzKCBQMiwgUDEgKTtcblx0XHRcdEIuY3Jvc3NWZWN0b3JzKCBULCBOICk7XG5cdFx0XHROLmNyb3NzVmVjdG9ycyggQiwgVCApO1xuXG5cdFx0XHQvLyBub3JtYWxpemUgQiwgTi4gVCBjYW4gYmUgaWdub3JlZCwgd2UgZG9uJ3QgdXNlIGl0XG5cblx0XHRcdEIubm9ybWFsaXplKCk7XG5cdFx0XHROLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7ICsrIGogKSB7XG5cblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgdmVydGljZXMuIHRoZXkgYXJlIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGV4dHJ1c2lvbiBvZiB0aGUgdG9ydXMgY3VydmUuXG5cdFx0XHRcdC8vIGJlY2F1c2Ugd2UgZXh0cnVkZSBhIHNoYXBlIGluIHRoZSB4eS1wbGFuZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSB6LXZhbHVlLlxuXG5cdFx0XHRcdGNvbnN0IHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjtcblx0XHRcdFx0Y29uc3QgY3ggPSAtIHR1YmUgKiBNYXRoLmNvcyggdiApO1xuXHRcdFx0XHRjb25zdCBjeSA9IHR1YmUgKiBNYXRoLnNpbiggdiApO1xuXG5cdFx0XHRcdC8vIG5vdyBjYWxjdWxhdGUgdGhlIGZpbmFsIHZlcnRleCBwb3NpdGlvbi5cblx0XHRcdFx0Ly8gZmlyc3Qgd2Ugb3JpZW50IHRoZSBleHRydXNpb24gd2l0aCBvdXIgYmFzaXMgdmVjdG9zLCB0aGVuIHdlIGFkZCBpdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmVcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IFAxLnggKyAoIGN4ICogTi54ICsgY3kgKiBCLnggKTtcblx0XHRcdFx0dmVydGV4LnkgPSBQMS55ICsgKCBjeCAqIE4ueSArIGN5ICogQi55ICk7XG5cdFx0XHRcdHZlcnRleC56ID0gUDEueiArICggY3ggKiBOLnogKyBjeSAqIEIueiApO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdFx0XHQvLyBub3JtYWwgKFAxIGlzIGFsd2F5cyB0aGUgY2VudGVyL29yaWdpbiBvZiB0aGUgZXh0cnVzaW9uLCB0aHVzIHdlIGNhbiB1c2UgaXQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwpXG5cblx0XHRcdFx0bm9ybWFsLnN1YlZlY3RvcnMoIHZlcnRleCwgUDEgKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKCBpIC8gdHVidWxhclNlZ21lbnRzICk7XG5cdFx0XHRcdHV2cy5wdXNoKCBqIC8gcmFkaWFsU2VnbWVudHMgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cdFx0Zm9yICggbGV0IGogPSAxOyBqIDw9IHR1YnVsYXJTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdC8vIGluZGljZXNcblxuXHRcdFx0XHRjb25zdCBhID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqICggaiAtIDEgKSArICggaSAtIDEgKTtcblx0XHRcdFx0Y29uc3QgYiA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgKCBpIC0gMSApO1xuXHRcdFx0XHRjb25zdCBjID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqIGogKyBpO1xuXHRcdFx0XHRjb25zdCBkID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqICggaiAtIDEgKSArIGk7XG5cblx0XHRcdFx0Ly8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdFx0Ly8gdGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZVxuXG5cdFx0ZnVuY3Rpb24gY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKCB1LCBwLCBxLCByYWRpdXMsIHBvc2l0aW9uICkge1xuXG5cdFx0XHRjb25zdCBjdSA9IE1hdGguY29zKCB1ICk7XG5cdFx0XHRjb25zdCBzdSA9IE1hdGguc2luKCB1ICk7XG5cdFx0XHRjb25zdCBxdU92ZXJQID0gcSAvIHAgKiB1O1xuXHRcdFx0Y29uc3QgY3MgPSBNYXRoLmNvcyggcXVPdmVyUCApO1xuXG5cdFx0XHRwb3NpdGlvbi54ID0gcmFkaXVzICogKCAyICsgY3MgKSAqIDAuNSAqIGN1O1xuXHRcdFx0cG9zaXRpb24ueSA9IHJhZGl1cyAqICggMiArIGNzICkgKiBzdSAqIDAuNTtcblx0XHRcdHBvc2l0aW9uLnogPSByYWRpdXMgKiBNYXRoLnNpbiggcXVPdmVyUCApICogMC41O1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFRvcnVzS25vdEdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS50dWJlLCBkYXRhLnR1YnVsYXJTZWdtZW50cywgZGF0YS5yYWRpYWxTZWdtZW50cywgZGF0YS5wLCBkYXRhLnEgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVHViZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXRoID0gbmV3IFF1YWRyYXRpY0JlemllckN1cnZlMyggbmV3IFZlY3RvcjMoIC0gMSwgLSAxLCAwICksIG5ldyBWZWN0b3IzKCAtIDEsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDEsIDEsIDAgKSApLCB0dWJ1bGFyU2VnbWVudHMgPSA2NCwgcmFkaXVzID0gMSwgcmFkaWFsU2VnbWVudHMgPSA4LCBjbG9zZWQgPSBmYWxzZSApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1R1YmVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRwYXRoOiBwYXRoLFxuXHRcdFx0dHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGNsb3NlZDogY2xvc2VkXG5cdFx0fTtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHBhdGguY29tcHV0ZUZyZW5ldEZyYW1lcyggdHVidWxhclNlZ21lbnRzLCBjbG9zZWQgKTtcblxuXHRcdC8vIGV4cG9zZSBpbnRlcm5hbHNcblxuXHRcdHRoaXMudGFuZ2VudHMgPSBmcmFtZXMudGFuZ2VudHM7XG5cdFx0dGhpcy5ub3JtYWxzID0gZnJhbWVzLm5vcm1hbHM7XG5cdFx0dGhpcy5iaW5vcm1hbHMgPSBmcmFtZXMuYmlub3JtYWxzO1xuXG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRsZXQgUCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHQvLyBidWZmZXJcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblxuXHRcdC8vIGNyZWF0ZSBidWZmZXIgZGF0YVxuXG5cdFx0Z2VuZXJhdGVCdWZmZXJEYXRhKCk7XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleCggaW5kaWNlcyApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTtcblxuXHRcdC8vIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVCdWZmZXJEYXRhKCkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0dWJ1bGFyU2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Z2VuZXJhdGVTZWdtZW50KCBpICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gaWYgdGhlIGdlb21ldHJ5IGlzIG5vdCBjbG9zZWQsIGdlbmVyYXRlIHRoZSBsYXN0IHJvdyBvZiB2ZXJ0aWNlcyBhbmQgbm9ybWFsc1xuXHRcdFx0Ly8gYXQgdGhlIHJlZ3VsYXIgcG9zaXRpb24gb24gdGhlIGdpdmVuIHBhdGhcblx0XHRcdC8vXG5cdFx0XHQvLyBpZiB0aGUgZ2VvbWV0cnkgaXMgY2xvc2VkLCBkdXBsaWNhdGUgdGhlIGZpcnN0IHJvdyBvZiB2ZXJ0aWNlcyBhbmQgbm9ybWFscyAodXZzIHdpbGwgZGlmZmVyKVxuXG5cdFx0XHRnZW5lcmF0ZVNlZ21lbnQoICggY2xvc2VkID09PSBmYWxzZSApID8gdHVidWxhclNlZ21lbnRzIDogMCApO1xuXG5cdFx0XHQvLyB1dnMgYXJlIGdlbmVyYXRlZCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLlxuXHRcdFx0Ly8gdGhpcyBtYWtlcyBpdCBlYXN5IGNvbXB1dGUgY29ycmVjdCB2YWx1ZXMgZm9yIGNsb3NlZCBnZW9tZXRyaWVzXG5cblx0XHRcdGdlbmVyYXRlVVZzKCk7XG5cblx0XHRcdC8vIGZpbmFsbHkgY3JlYXRlIGZhY2VzXG5cblx0XHRcdGdlbmVyYXRlSW5kaWNlcygpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVTZWdtZW50KCBpICkge1xuXG5cdFx0XHQvLyB3ZSB1c2UgZ2V0UG9pbnRBdCB0byBzYW1wbGUgZXZlbmx5IGRpc3RyaWJ1dGVkIHBvaW50cyBmcm9tIHRoZSBnaXZlbiBwYXRoXG5cblx0XHRcdFAgPSBwYXRoLmdldFBvaW50QXQoIGkgLyB0dWJ1bGFyU2VnbWVudHMsIFAgKTtcblxuXHRcdFx0Ly8gcmV0cmlldmUgY29ycmVzcG9uZGluZyBub3JtYWwgYW5kIGJpbm9ybWFsXG5cblx0XHRcdGNvbnN0IE4gPSBmcmFtZXMubm9ybWFsc1sgaSBdO1xuXHRcdFx0Y29uc3QgQiA9IGZyYW1lcy5iaW5vcm1hbHNbIGkgXTtcblxuXHRcdFx0Ly8gZ2VuZXJhdGUgbm9ybWFscyBhbmQgdmVydGljZXMgZm9yIHRoZSBjdXJyZW50IHNlZ21lbnRcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjtcblxuXHRcdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbiggdiApO1xuXHRcdFx0XHRjb25zdCBjb3MgPSAtIE1hdGguY29zKCB2ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFsLnggPSAoIGNvcyAqIE4ueCArIHNpbiAqIEIueCApO1xuXHRcdFx0XHRub3JtYWwueSA9ICggY29zICogTi55ICsgc2luICogQi55ICk7XG5cdFx0XHRcdG5vcm1hbC56ID0gKCBjb3MgKiBOLnogKyBzaW4gKiBCLnogKTtcblx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApO1xuXG5cdFx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gUC54ICsgcmFkaXVzICogbm9ybWFsLng7XG5cdFx0XHRcdHZlcnRleC55ID0gUC55ICsgcmFkaXVzICogbm9ybWFsLnk7XG5cdFx0XHRcdHZlcnRleC56ID0gUC56ICsgcmFkaXVzICogbm9ybWFsLno7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUluZGljZXMoKSB7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGogKysgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYSA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyAoIGkgLSAxICk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgKCBpIC0gMSApO1xuXHRcdFx0XHRcdGNvbnN0IGMgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogaiArIGk7XG5cdFx0XHRcdFx0Y29uc3QgZCA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyBpO1xuXG5cdFx0XHRcdFx0Ly8gZmFjZXNcblxuXHRcdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgZCApO1xuXHRcdFx0XHRcdGluZGljZXMucHVzaCggYiwgYywgZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVVVnMoKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRcdFx0dXYueCA9IGkgLyB0dWJ1bGFyU2VnbWVudHM7XG5cdFx0XHRcdFx0dXYueSA9IGogLyByYWRpYWxTZWdtZW50cztcblxuXHRcdFx0XHRcdHV2cy5wdXNoKCB1di54LCB1di55ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEucGF0aCA9IHRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdC8vIFRoaXMgb25seSB3b3JrcyBmb3IgYnVpbHQtaW4gY3VydmVzIChlLmcuIENhdG11bGxSb21DdXJ2ZTMpLlxuXHRcdC8vIFVzZXIgZGVmaW5lZCBjdXJ2ZXMgb3IgaW5zdGFuY2VzIG9mIEN1cnZlUGF0aCB3aWxsIG5vdCBiZSBkZXNlcmlhbGl6ZWQuXG5cdFx0cmV0dXJuIG5ldyBUdWJlR2VvbWV0cnkoXG5cdFx0XHRuZXcgQ3VydmVzWyBkYXRhLnBhdGgudHlwZSBdKCkuZnJvbUpTT04oIGRhdGEucGF0aCApLFxuXHRcdFx0ZGF0YS50dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRkYXRhLnJhZGl1cyxcblx0XHRcdGRhdGEucmFkaWFsU2VnbWVudHMsXG5cdFx0XHRkYXRhLmNsb3NlZFxuXHRcdCk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFdpcmVmcmFtZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSA9IG51bGwgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdXaXJlZnJhbWVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRnZW9tZXRyeTogZ2VvbWV0cnlcblx0XHR9O1xuXG5cdFx0aWYgKCBnZW9tZXRyeSAhPT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gYnVmZmVyXG5cblx0XHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0XHRjb25zdCBlZGdlcyA9IG5ldyBTZXQoKTtcblxuXHRcdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBlbmQgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRpZiAoIGdlb21ldHJ5LmluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdC8vIGluZGV4ZWQgQnVmZmVyR2VvbWV0cnlcblxuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRcdGNvbnN0IGluZGljZXMgPSBnZW9tZXRyeS5pbmRleDtcblx0XHRcdFx0bGV0IGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwcztcblxuXHRcdFx0XHRpZiAoIGdyb3Vwcy5sZW5ndGggPT09IDAgKSB7XG5cblx0XHRcdFx0XHRncm91cHMgPSBbIHsgc3RhcnQ6IDAsIGNvdW50OiBpbmRpY2VzLmNvdW50LCBtYXRlcmlhbEluZGV4OiAwIH0gXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY3JlYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgZWdlcyB3aXRob3V0IGR1cGxpY2F0ZXNcblxuXHRcdFx0XHRmb3IgKCBsZXQgbyA9IDAsIG9sID0gZ3JvdXBzLmxlbmd0aDsgbyA8IG9sOyArKyBvICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIG8gXTtcblxuXHRcdFx0XHRcdGNvbnN0IGdyb3VwU3RhcnQgPSBncm91cC5zdGFydDtcblx0XHRcdFx0XHRjb25zdCBncm91cENvdW50ID0gZ3JvdXAuY291bnQ7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IGdyb3VwU3RhcnQsIGwgPSAoIGdyb3VwU3RhcnQgKyBncm91cENvdW50ICk7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IDM7IGogKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgxID0gaW5kaWNlcy5nZXRYKCBpICsgaiApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleDIgPSBpbmRpY2VzLmdldFgoIGkgKyAoIGogKyAxICkgJSAzICk7XG5cblx0XHRcdFx0XHRcdFx0c3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGluZGV4MSApO1xuXHRcdFx0XHRcdFx0XHRlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGluZGV4MiApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggaXNVbmlxdWVFZGdlKCBzdGFydCwgZW5kLCBlZGdlcyApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaCggc3RhcnQueCwgc3RhcnQueSwgc3RhcnQueiApO1xuXHRcdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIGVuZC54LCBlbmQueSwgZW5kLnogKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnlcblxuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gKCBwb3NpdGlvbi5jb3VudCAvIDMgKTsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCAzOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHQvLyB0aHJlZSBlZGdlcyBwZXIgdHJpYW5nbGUsIGFuIGVkZ2UgaXMgcmVwcmVzZW50ZWQgYXMgKGluZGV4MSwgaW5kZXgyKVxuXHRcdFx0XHRcdFx0Ly8gZS5nLiB0aGUgZmlyc3QgdHJpYW5nbGUgaGFzIHRoZSBmb2xsb3dpbmcgZWRnZXM6ICgwLDEpLCgxLDIpLCgyLDApXG5cblx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MSA9IDMgKiBpICsgajtcblx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MiA9IDMgKiBpICsgKCAoIGogKyAxICkgJSAzICk7XG5cblx0XHRcdFx0XHRcdHN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBpbmRleDEgKTtcblx0XHRcdFx0XHRcdGVuZC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgaW5kZXgyICk7XG5cblx0XHRcdFx0XHRcdGlmICggaXNVbmlxdWVFZGdlKCBzdGFydCwgZW5kLCBlZGdlcyApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIHN0YXJ0LngsIHN0YXJ0LnksIHN0YXJ0LnogKTtcblx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaCggZW5kLngsIGVuZC55LCBlbmQueiApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBpc1VuaXF1ZUVkZ2UoIHN0YXJ0LCBlbmQsIGVkZ2VzICkge1xuXG5cdGNvbnN0IGhhc2gxID0gYCR7c3RhcnQueH0sJHtzdGFydC55fSwke3N0YXJ0Lnp9LSR7ZW5kLnh9LCR7ZW5kLnl9LCR7ZW5kLnp9YDtcblx0Y29uc3QgaGFzaDIgPSBgJHtlbmQueH0sJHtlbmQueX0sJHtlbmQuen0tJHtzdGFydC54fSwke3N0YXJ0Lnl9LCR7c3RhcnQuen1gOyAvLyBjb2luY2lkZW50IGVkZ2VcblxuXHRpZiAoIGVkZ2VzLmhhcyggaGFzaDEgKSA9PT0gdHJ1ZSB8fCBlZGdlcy5oYXMoIGhhc2gyICkgPT09IHRydWUgKSB7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSBlbHNlIHtcblxuXHRcdGVkZ2VzLmFkZCggaGFzaDEsIGhhc2gyICk7XG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fVxuXG59XG5cbnZhciBHZW9tZXRyaWVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuXHRfX3Byb3RvX186IG51bGwsXG5cdEJveEdlb21ldHJ5OiBCb3hHZW9tZXRyeSxcblx0Qm94QnVmZmVyR2VvbWV0cnk6IEJveEdlb21ldHJ5LFxuXHRDaXJjbGVHZW9tZXRyeTogQ2lyY2xlR2VvbWV0cnksXG5cdENpcmNsZUJ1ZmZlckdlb21ldHJ5OiBDaXJjbGVHZW9tZXRyeSxcblx0Q29uZUdlb21ldHJ5OiBDb25lR2VvbWV0cnksXG5cdENvbmVCdWZmZXJHZW9tZXRyeTogQ29uZUdlb21ldHJ5LFxuXHRDeWxpbmRlckdlb21ldHJ5OiBDeWxpbmRlckdlb21ldHJ5LFxuXHRDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OiBDeWxpbmRlckdlb21ldHJ5LFxuXHREb2RlY2FoZWRyb25HZW9tZXRyeTogRG9kZWNhaGVkcm9uR2VvbWV0cnksXG5cdERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBEb2RlY2FoZWRyb25HZW9tZXRyeSxcblx0RWRnZXNHZW9tZXRyeTogRWRnZXNHZW9tZXRyeSxcblx0RXh0cnVkZUdlb21ldHJ5OiBFeHRydWRlR2VvbWV0cnksXG5cdEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogRXh0cnVkZUdlb21ldHJ5LFxuXHRJY29zYWhlZHJvbkdlb21ldHJ5OiBJY29zYWhlZHJvbkdlb21ldHJ5LFxuXHRJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBJY29zYWhlZHJvbkdlb21ldHJ5LFxuXHRMYXRoZUdlb21ldHJ5OiBMYXRoZUdlb21ldHJ5LFxuXHRMYXRoZUJ1ZmZlckdlb21ldHJ5OiBMYXRoZUdlb21ldHJ5LFxuXHRPY3RhaGVkcm9uR2VvbWV0cnk6IE9jdGFoZWRyb25HZW9tZXRyeSxcblx0T2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBPY3RhaGVkcm9uR2VvbWV0cnksXG5cdFBsYW5lR2VvbWV0cnk6IFBsYW5lR2VvbWV0cnksXG5cdFBsYW5lQnVmZmVyR2VvbWV0cnk6IFBsYW5lR2VvbWV0cnksXG5cdFBvbHloZWRyb25HZW9tZXRyeTogUG9seWhlZHJvbkdlb21ldHJ5LFxuXHRQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6IFBvbHloZWRyb25HZW9tZXRyeSxcblx0UmluZ0dlb21ldHJ5OiBSaW5nR2VvbWV0cnksXG5cdFJpbmdCdWZmZXJHZW9tZXRyeTogUmluZ0dlb21ldHJ5LFxuXHRTaGFwZUdlb21ldHJ5OiBTaGFwZUdlb21ldHJ5LFxuXHRTaGFwZUJ1ZmZlckdlb21ldHJ5OiBTaGFwZUdlb21ldHJ5LFxuXHRTcGhlcmVHZW9tZXRyeTogU3BoZXJlR2VvbWV0cnksXG5cdFNwaGVyZUJ1ZmZlckdlb21ldHJ5OiBTcGhlcmVHZW9tZXRyeSxcblx0VGV0cmFoZWRyb25HZW9tZXRyeTogVGV0cmFoZWRyb25HZW9tZXRyeSxcblx0VGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTogVGV0cmFoZWRyb25HZW9tZXRyeSxcblx0VG9ydXNHZW9tZXRyeTogVG9ydXNHZW9tZXRyeSxcblx0VG9ydXNCdWZmZXJHZW9tZXRyeTogVG9ydXNHZW9tZXRyeSxcblx0VG9ydXNLbm90R2VvbWV0cnk6IFRvcnVzS25vdEdlb21ldHJ5LFxuXHRUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTogVG9ydXNLbm90R2VvbWV0cnksXG5cdFR1YmVHZW9tZXRyeTogVHViZUdlb21ldHJ5LFxuXHRUdWJlQnVmZmVyR2VvbWV0cnk6IFR1YmVHZW9tZXRyeSxcblx0V2lyZWZyYW1lR2VvbWV0cnk6IFdpcmVmcmFtZUdlb21ldHJ5XG59KTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8VEhSRUUuQ29sb3I+XG4gKiB9XG4gKi9cblxuY2xhc3MgU2hhZG93TWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1NoYWRvd01hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IHRydWU7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuU2hhZG93TWF0ZXJpYWwucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICogIHJvdWdobmVzczogPGZsb2F0PixcbiAqICBtZXRhbG5lc3M6IDxmbG9hdD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBlbWlzc2l2ZTogPGhleD4sXG4gKiAgZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICogIG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKiAgbm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICogIHJvdWdobmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbWV0YWxuZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICogIGVudk1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiAgZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGVmaW5lcyA9IHsgJ1NUQU5EQVJEJzogJycgfTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoU3RhbmRhcmRNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlXG5cdFx0dGhpcy5yb3VnaG5lc3MgPSAxLjA7XG5cdFx0dGhpcy5tZXRhbG5lc3MgPSAwLjA7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy5yb3VnaG5lc3NNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5tZXRhbG5lc3NNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5lbnZNYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7ICdTVEFOREFSRCc6ICcnIH07XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXHRcdHRoaXMucm91Z2huZXNzID0gc291cmNlLnJvdWdobmVzcztcblx0XHR0aGlzLm1ldGFsbmVzcyA9IHNvdXJjZS5tZXRhbG5lc3M7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmVtaXNzaXZlLmNvcHkoIHNvdXJjZS5lbWlzc2l2ZSApO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTtcblx0XHR0aGlzLm5vcm1hbFNjYWxlLmNvcHkoIHNvdXJjZS5ub3JtYWxTY2FsZSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR0aGlzLnJvdWdobmVzc01hcCA9IHNvdXJjZS5yb3VnaG5lc3NNYXA7XG5cblx0XHR0aGlzLm1ldGFsbmVzc01hcCA9IHNvdXJjZS5tZXRhbG5lc3NNYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwO1xuXHRcdHRoaXMuZW52TWFwSW50ZW5zaXR5ID0gc291cmNlLmVudk1hcEludGVuc2l0eTtcblxuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBzb3VyY2UuZmxhdFNoYWRpbmc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY2xlYXJjb2F0OiA8ZmxvYXQ+LFxuICogIGNsZWFyY29hdE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBjbGVhcmNvYXRSb3VnaG5lc3M6IDxmbG9hdD4sXG4gKiAgY2xlYXJjb2F0Um91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGNsZWFyY29hdE5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKiAgY2xlYXJjb2F0Tm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBpb3I6IDxmbG9hdD4sXG4gKiAgcmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICpcbiAqICBzaGVlbjogPGZsb2F0PixcbiAqICBzaGVlbkNvbG9yOiA8Q29sb3I+LFxuICogIHNoZWVuQ29sb3JNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgc2hlZW5Sb3VnaG5lc3M6IDxmbG9hdD4sXG4gKiAgc2hlZW5Sb3VnaG5lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIHRyYW5zbWlzc2lvbjogPGZsb2F0PixcbiAqICB0cmFuc21pc3Npb25NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIHRoaWNrbmVzczogPGZsb2F0PixcbiAqICB0aGlja25lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYXR0ZW51YXRpb25EaXN0YW5jZTogPGZsb2F0PixcbiAqICBhdHRlbnVhdGlvbkNvbG9yOiA8Q29sb3I+LFxuICpcbiAqICBzcGVjdWxhckludGVuc2l0eTogPGZsb2F0PixcbiAqICBzcGVjdWxhckludGVuc2l0eU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBzcGVjdWxhckNvbG9yOiA8Q29sb3I+LFxuICogIHNwZWN1bGFyQ29sb3JNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+IClcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoUGh5c2ljYWxNYXRlcmlhbCBleHRlbmRzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cblx0XHRcdCdTVEFOREFSRCc6ICcnLFxuXHRcdFx0J1BIWVNJQ0FMJzogJydcblxuXHRcdH07XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaFBoeXNpY2FsTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jbGVhcmNvYXRNYXAgPSBudWxsO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzID0gMC4wO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmlvciA9IDEuNTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ3JlZmxlY3Rpdml0eScsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdHJldHVybiAoIGNsYW1wKCAyLjUgKiAoIHRoaXMuaW9yIC0gMSApIC8gKCB0aGlzLmlvciArIDEgKSwgMCwgMSApICk7XG5cblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uICggcmVmbGVjdGl2aXR5ICkge1xuXG5cdFx0XHRcdHRoaXMuaW9yID0gKCAxICsgMC40ICogcmVmbGVjdGl2aXR5ICkgLyAoIDEgLSAwLjQgKiByZWZsZWN0aXZpdHkgKTtcblxuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuc2hlZW5Db2xvciA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTtcblx0XHR0aGlzLnNoZWVuQ29sb3JNYXAgPSBudWxsO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3MgPSAxLjA7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzc01hcCA9IG51bGw7XG5cblx0XHR0aGlzLnRyYW5zbWlzc2lvbk1hcCA9IG51bGw7XG5cblx0XHR0aGlzLnRoaWNrbmVzcyA9IDA7XG5cdFx0dGhpcy50aGlja25lc3NNYXAgPSBudWxsO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSA9IDAuMDtcblx0XHR0aGlzLmF0dGVudWF0aW9uQ29sb3IgPSBuZXcgQ29sb3IoIDEsIDEsIDEgKTtcblxuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCA9IG51bGw7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yID0gbmV3IENvbG9yKCAxLCAxLCAxICk7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuX3NoZWVuID0gMC4wO1xuXHRcdHRoaXMuX2NsZWFyY29hdCA9IDA7XG5cdFx0dGhpcy5fdHJhbnNtaXNzaW9uID0gMDtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGdldCBzaGVlbigpIHtcblxuXHRcdHJldHVybiB0aGlzLl9zaGVlbjtcblxuXHR9XG5cblx0c2V0IHNoZWVuKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdGhpcy5fc2hlZW4gPiAwICE9PSB2YWx1ZSA+IDAgKSB7XG5cblx0XHRcdHRoaXMudmVyc2lvbiArKztcblxuXHRcdH1cblxuXHRcdHRoaXMuX3NoZWVuID0gdmFsdWU7XG5cblx0fVxuXG5cdGdldCBjbGVhcmNvYXQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fY2xlYXJjb2F0O1xuXG5cdH1cblxuXHRzZXQgY2xlYXJjb2F0KCB2YWx1ZSApIHtcblxuXHRcdGlmICggdGhpcy5fY2xlYXJjb2F0ID4gMCAhPT0gdmFsdWUgPiAwICkge1xuXG5cdFx0XHR0aGlzLnZlcnNpb24gKys7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9jbGVhcmNvYXQgPSB2YWx1ZTtcblxuXHR9XG5cblx0Z2V0IHRyYW5zbWlzc2lvbigpIHtcblxuXHRcdHJldHVybiB0aGlzLl90cmFuc21pc3Npb247XG5cblx0fVxuXG5cdHNldCB0cmFuc21pc3Npb24oIHZhbHVlICkge1xuXG5cdFx0aWYgKCB0aGlzLl90cmFuc21pc3Npb24gPiAwICE9PSB2YWx1ZSA+IDAgKSB7XG5cblx0XHRcdHRoaXMudmVyc2lvbiArKztcblxuXHRcdH1cblxuXHRcdHRoaXMuX3RyYW5zbWlzc2lvbiA9IHZhbHVlO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblxuXHRcdFx0J1NUQU5EQVJEJzogJycsXG5cdFx0XHQnUEhZU0lDQUwnOiAnJ1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuY2xlYXJjb2F0ID0gc291cmNlLmNsZWFyY29hdDtcblx0XHR0aGlzLmNsZWFyY29hdE1hcCA9IHNvdXJjZS5jbGVhcmNvYXRNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MgPSBzb3VyY2UuY2xlYXJjb2F0Um91Z2huZXNzO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gc291cmNlLmNsZWFyY29hdFJvdWdobmVzc01hcDtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCA9IHNvdXJjZS5jbGVhcmNvYXROb3JtYWxNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KCBzb3VyY2UuY2xlYXJjb2F0Tm9ybWFsU2NhbGUgKTtcblxuXHRcdHRoaXMuaW9yID0gc291cmNlLmlvcjtcblxuXHRcdHRoaXMuc2hlZW4gPSBzb3VyY2Uuc2hlZW47XG5cdFx0dGhpcy5zaGVlbkNvbG9yLmNvcHkoIHNvdXJjZS5zaGVlbkNvbG9yICk7XG5cdFx0dGhpcy5zaGVlbkNvbG9yTWFwID0gc291cmNlLnNoZWVuQ29sb3JNYXA7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzcyA9IHNvdXJjZS5zaGVlblJvdWdobmVzcztcblx0XHR0aGlzLnNoZWVuUm91Z2huZXNzTWFwID0gc291cmNlLnNoZWVuUm91Z2huZXNzTWFwO1xuXG5cdFx0dGhpcy50cmFuc21pc3Npb24gPSBzb3VyY2UudHJhbnNtaXNzaW9uO1xuXHRcdHRoaXMudHJhbnNtaXNzaW9uTWFwID0gc291cmNlLnRyYW5zbWlzc2lvbk1hcDtcblxuXHRcdHRoaXMudGhpY2tuZXNzID0gc291cmNlLnRoaWNrbmVzcztcblx0XHR0aGlzLnRoaWNrbmVzc01hcCA9IHNvdXJjZS50aGlja25lc3NNYXA7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlID0gc291cmNlLmF0dGVudWF0aW9uRGlzdGFuY2U7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkoIHNvdXJjZS5hdHRlbnVhdGlvbkNvbG9yICk7XG5cblx0XHR0aGlzLnNwZWN1bGFySW50ZW5zaXR5ID0gc291cmNlLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSBzb3VyY2Uuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yLmNvcHkoIHNvdXJjZS5zcGVjdWxhckNvbG9yICk7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yTWFwID0gc291cmNlLnNwZWN1bGFyQ29sb3JNYXA7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICogIHNwZWN1bGFyOiA8aGV4PixcbiAqICBzaGluaW5lc3M6IDxmbG9hdD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBlbWlzc2l2ZTogPGhleD4sXG4gKiAgZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICogIG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKiAgbm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICogIHNwZWN1bGFyTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICogIGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5T3BlcmF0aW9uLFxuICogIHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiAgZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hQaG9uZ01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoUGhvbmdNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlXG5cdFx0dGhpcy5zcGVjdWxhciA9IG5ldyBDb2xvciggMHgxMTExMTEgKTtcblx0XHR0aGlzLnNoaW5pbmVzcyA9IDMwO1xuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLmVtaXNzaXZlID0gbmV3IENvbG9yKCAweDAwMDAwMCApO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gMTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCAxLCAxICk7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblxuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSAxO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cdFx0dGhpcy5zcGVjdWxhci5jb3B5KCBzb3VyY2Uuc3BlY3VsYXIgKTtcblx0XHR0aGlzLnNoaW5pbmVzcyA9IHNvdXJjZS5zaGluaW5lc3M7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmVtaXNzaXZlLmNvcHkoIHNvdXJjZS5lbWlzc2l2ZSApO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTtcblx0XHR0aGlzLm5vcm1hbFNjYWxlLmNvcHkoIHNvdXJjZS5ub3JtYWxTY2FsZSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuZW52TWFwID0gc291cmNlLmVudk1hcDtcblx0XHR0aGlzLmNvbWJpbmUgPSBzb3VyY2UuY29tYmluZTtcblx0XHR0aGlzLnJlZmxlY3Rpdml0eSA9IHNvdXJjZS5yZWZsZWN0aXZpdHk7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSBzb3VyY2UucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoUGhvbmdNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBncmFkaWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgZW1pc3NpdmU6IDxoZXg+LFxuICogIGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKiAgZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqICBub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICogIG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoVG9vbk1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGVmaW5lcyA9IHsgJ1RPT04nOiAnJyB9O1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2hUb29uTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmdyYWRpZW50TWFwID0gbnVsbDtcblxuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMiggMSwgMSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cdFx0dGhpcy5ncmFkaWVudE1hcCA9IHNvdXJjZS5ncmFkaWVudE1hcDtcblxuXHRcdHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTtcblxuXHRcdHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9NYXA7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTtcblxuXHRcdHRoaXMuZW1pc3NpdmUuY29weSggc291cmNlLmVtaXNzaXZlICk7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5idW1wTWFwID0gc291cmNlLmJ1bXBNYXA7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSBzb3VyY2UuYnVtcFNjYWxlO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNvdXJjZS5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaFRvb25NYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqICBub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICogIG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqICB3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqICB3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD5cbiAqXG4gKiAgZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hOb3JtYWxNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaE5vcm1hbE1hdGVyaWFsJztcblxuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cblx0XHR0aGlzLmZvZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBzb3VyY2UuZmxhdFNoYWRpbmc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaE5vcm1hbE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqICBlbWlzc2l2ZTogPGhleD4sXG4gKiAgZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgc3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKiAgY29tYmluZTogVEhSRUUuTXVsdGlwbHksXG4gKiAgcmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICogIHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoTGFtYmVydE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoTGFtYmVydE1hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGRpZmZ1c2VcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblxuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuZW52TWFwID0gbnVsbDtcblx0XHR0aGlzLmNvbWJpbmUgPSBNdWx0aXBseU9wZXJhdGlvbjtcblx0XHR0aGlzLnJlZmxlY3Rpdml0eSA9IDE7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4O1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJztcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblxuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblxuXHRcdHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTtcblxuXHRcdHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9NYXA7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTtcblxuXHRcdHRoaXMuZW1pc3NpdmUuY29weSggc291cmNlLmVtaXNzaXZlICk7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IHNvdXJjZS5zcGVjdWxhck1hcDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoTGFtYmVydE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIG1hdGNhcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGZsYXRTaGFkaW5nOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoTWF0Y2FwTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0geyAnTUFUQ0FQJzogJycgfTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoTWF0Y2FwTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsgLy8gZGlmZnVzZVxuXG5cdFx0dGhpcy5tYXRjYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMiggMSwgMSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7ICdNQVRDQVAnOiAnJyB9O1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblxuXHRcdHRoaXMubWF0Y2FwID0gc291cmNlLm1hdGNhcDtcblxuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTtcblx0XHR0aGlzLm5vcm1hbFNjYWxlLmNvcHkoIHNvdXJjZS5ub3JtYWxTY2FsZSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoTWF0Y2FwTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaE1hdGNhcE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqICBsaW5ld2lkdGg6IDxmbG9hdD4sXG4gKlxuICogIHNjYWxlOiA8ZmxvYXQ+LFxuICogIGRhc2hTaXplOiA8ZmxvYXQ+LFxuICogIGdhcFNpemU6IDxmbG9hdD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBMaW5lRGFzaGVkTWF0ZXJpYWwgZXh0ZW5kcyBMaW5lQmFzaWNNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xpbmVEYXNoZWRNYXRlcmlhbCc7XG5cblx0XHR0aGlzLnNjYWxlID0gMTtcblx0XHR0aGlzLmRhc2hTaXplID0gMztcblx0XHR0aGlzLmdhcFNpemUgPSAxO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnNjYWxlID0gc291cmNlLnNjYWxlO1xuXHRcdHRoaXMuZGFzaFNpemUgPSBzb3VyY2UuZGFzaFNpemU7XG5cdFx0dGhpcy5nYXBTaXplID0gc291cmNlLmdhcFNpemU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTGluZURhc2hlZE1hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbCA9IHRydWU7XG5cbnZhciBNYXRlcmlhbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0U2hhZG93TWF0ZXJpYWw6IFNoYWRvd01hdGVyaWFsLFxuXHRTcHJpdGVNYXRlcmlhbDogU3ByaXRlTWF0ZXJpYWwsXG5cdFJhd1NoYWRlck1hdGVyaWFsOiBSYXdTaGFkZXJNYXRlcmlhbCxcblx0U2hhZGVyTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsLFxuXHRQb2ludHNNYXRlcmlhbDogUG9pbnRzTWF0ZXJpYWwsXG5cdE1lc2hQaHlzaWNhbE1hdGVyaWFsOiBNZXNoUGh5c2ljYWxNYXRlcmlhbCxcblx0TWVzaFN0YW5kYXJkTWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHRNZXNoUGhvbmdNYXRlcmlhbDogTWVzaFBob25nTWF0ZXJpYWwsXG5cdE1lc2hUb29uTWF0ZXJpYWw6IE1lc2hUb29uTWF0ZXJpYWwsXG5cdE1lc2hOb3JtYWxNYXRlcmlhbDogTWVzaE5vcm1hbE1hdGVyaWFsLFxuXHRNZXNoTGFtYmVydE1hdGVyaWFsOiBNZXNoTGFtYmVydE1hdGVyaWFsLFxuXHRNZXNoRGVwdGhNYXRlcmlhbDogTWVzaERlcHRoTWF0ZXJpYWwsXG5cdE1lc2hEaXN0YW5jZU1hdGVyaWFsOiBNZXNoRGlzdGFuY2VNYXRlcmlhbCxcblx0TWVzaEJhc2ljTWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsLFxuXHRNZXNoTWF0Y2FwTWF0ZXJpYWw6IE1lc2hNYXRjYXBNYXRlcmlhbCxcblx0TGluZURhc2hlZE1hdGVyaWFsOiBMaW5lRGFzaGVkTWF0ZXJpYWwsXG5cdExpbmVCYXNpY01hdGVyaWFsOiBMaW5lQmFzaWNNYXRlcmlhbCxcblx0TWF0ZXJpYWw6IE1hdGVyaWFsXG59KTtcblxuY29uc3QgQW5pbWF0aW9uVXRpbHMgPSB7XG5cblx0Ly8gc2FtZSBhcyBBcnJheS5wcm90b3R5cGUuc2xpY2UsIGJ1dCBhbHNvIHdvcmtzIG9uIHR5cGVkIGFycmF5c1xuXHRhcnJheVNsaWNlOiBmdW5jdGlvbiAoIGFycmF5LCBmcm9tLCB0byApIHtcblxuXHRcdGlmICggQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KCBhcnJheSApICkge1xuXG5cdFx0XHQvLyBpbiBpb3M5IGFycmF5LnN1YmFycmF5KGZyb20sIHVuZGVmaW5lZCkgd2lsbCByZXR1cm4gZW1wdHkgYXJyYXlcblx0XHRcdC8vIGJ1dCBhcnJheS5zdWJhcnJheShmcm9tKSBvciBhcnJheS5zdWJhcnJheShmcm9tLCBsZW4pIGlzIGNvcnJlY3Rcblx0XHRcdHJldHVybiBuZXcgYXJyYXkuY29uc3RydWN0b3IoIGFycmF5LnN1YmFycmF5KCBmcm9tLCB0byAhPT0gdW5kZWZpbmVkID8gdG8gOiBhcnJheS5sZW5ndGggKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFycmF5LnNsaWNlKCBmcm9tLCB0byApO1xuXG5cdH0sXG5cblx0Ly8gY29udmVydHMgYW4gYXJyYXkgdG8gYSBzcGVjaWZpYyB0eXBlXG5cdGNvbnZlcnRBcnJheTogZnVuY3Rpb24gKCBhcnJheSwgdHlwZSwgZm9yY2VDbG9uZSApIHtcblxuXHRcdGlmICggISBhcnJheSB8fCAvLyBsZXQgJ3VuZGVmaW5lZCcgYW5kICdudWxsJyBwYXNzXG5cdFx0XHQhIGZvcmNlQ2xvbmUgJiYgYXJyYXkuY29uc3RydWN0b3IgPT09IHR5cGUgKSByZXR1cm4gYXJyYXk7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlLkJZVEVTX1BFUl9FTEVNRU5UID09PSAnbnVtYmVyJyApIHtcblxuXHRcdFx0cmV0dXJuIG5ldyB0eXBlKCBhcnJheSApOyAvLyBjcmVhdGUgdHlwZWQgYXJyYXlcblxuXHRcdH1cblxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXkgKTsgLy8gY3JlYXRlIEFycmF5XG5cblx0fSxcblxuXHRpc1R5cGVkQXJyYXk6IGZ1bmN0aW9uICggb2JqZWN0ICkge1xuXG5cdFx0cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyggb2JqZWN0ICkgJiZcblx0XHRcdCEgKCBvYmplY3QgaW5zdGFuY2VvZiBEYXRhVmlldyApO1xuXG5cdH0sXG5cblx0Ly8gcmV0dXJucyBhbiBhcnJheSBieSB3aGljaCB0aW1lcyBhbmQgdmFsdWVzIGNhbiBiZSBzb3J0ZWRcblx0Z2V0S2V5ZnJhbWVPcmRlcjogZnVuY3Rpb24gKCB0aW1lcyApIHtcblxuXHRcdGZ1bmN0aW9uIGNvbXBhcmVUaW1lKCBpLCBqICkge1xuXG5cdFx0XHRyZXR1cm4gdGltZXNbIGkgXSAtIHRpbWVzWyBqIF07XG5cblx0XHR9XG5cblx0XHRjb25zdCBuID0gdGltZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSggbiApO1xuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbjsgKysgaSApIHJlc3VsdFsgaSBdID0gaTtcblxuXHRcdHJlc3VsdC5zb3J0KCBjb21wYXJlVGltZSApO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHR9LFxuXG5cdC8vIHVzZXMgdGhlIGFycmF5IHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgJ2dldEtleWZyYW1lT3JkZXInIHRvIHNvcnQgZGF0YVxuXHRzb3J0ZWRBcnJheTogZnVuY3Rpb24gKCB2YWx1ZXMsIHN0cmlkZSwgb3JkZXIgKSB7XG5cblx0XHRjb25zdCBuVmFsdWVzID0gdmFsdWVzLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgdmFsdWVzLmNvbnN0cnVjdG9yKCBuVmFsdWVzICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGRzdE9mZnNldCA9IDA7IGRzdE9mZnNldCAhPT0gblZhbHVlczsgKysgaSApIHtcblxuXHRcdFx0Y29uc3Qgc3JjT2Zmc2V0ID0gb3JkZXJbIGkgXSAqIHN0cmlkZTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7XG5cblx0XHRcdFx0cmVzdWx0WyBkc3RPZmZzZXQgKysgXSA9IHZhbHVlc1sgc3JjT2Zmc2V0ICsgaiBdO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdH0sXG5cblx0Ly8gZnVuY3Rpb24gZm9yIHBhcnNpbmcgQU9TIGtleWZyYW1lIGZvcm1hdHNcblx0ZmxhdHRlbkpTT046IGZ1bmN0aW9uICgganNvbktleXMsIHRpbWVzLCB2YWx1ZXMsIHZhbHVlUHJvcGVydHlOYW1lICkge1xuXG5cdFx0bGV0IGkgPSAxLCBrZXkgPSBqc29uS2V5c1sgMCBdO1xuXG5cdFx0d2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0a2V5ID0ganNvbktleXNbIGkgKysgXTtcblxuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSByZXR1cm47IC8vIG5vIGRhdGFcblxuXHRcdGxldCB2YWx1ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTtcblx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSByZXR1cm47IC8vIG5vIGRhdGFcblxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblxuXHRcdFx0ZG8ge1xuXG5cdFx0XHRcdHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRpbWVzLnB1c2goIGtleS50aW1lICk7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2guYXBwbHkoIHZhbHVlcywgdmFsdWUgKTsgLy8gcHVzaCBhbGwgZWxlbWVudHNcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbIGkgKysgXTtcblxuXHRcdFx0fSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7XG5cblx0XHR9IGVsc2UgaWYgKCB2YWx1ZS50b0FycmF5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIC4uLmFzc3VtZSBUSFJFRS5NYXRoLWlzaFxuXG5cdFx0XHRkbyB7XG5cblx0XHRcdFx0dmFsdWUgPSBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF07XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0dGltZXMucHVzaCgga2V5LnRpbWUgKTtcblx0XHRcdFx0XHR2YWx1ZS50b0FycmF5KCB2YWx1ZXMsIHZhbHVlcy5sZW5ndGggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbIGkgKysgXTtcblxuXHRcdFx0fSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBvdGhlcndpc2UgcHVzaCBhcy1pc1xuXG5cdFx0XHRkbyB7XG5cblx0XHRcdFx0dmFsdWUgPSBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF07XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0dGltZXMucHVzaCgga2V5LnRpbWUgKTtcblx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbIGkgKysgXTtcblxuXHRcdFx0fSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7XG5cblx0XHR9XG5cblx0fSxcblxuXHRzdWJjbGlwOiBmdW5jdGlvbiAoIHNvdXJjZUNsaXAsIG5hbWUsIHN0YXJ0RnJhbWUsIGVuZEZyYW1lLCBmcHMgPSAzMCApIHtcblxuXHRcdGNvbnN0IGNsaXAgPSBzb3VyY2VDbGlwLmNsb25lKCk7XG5cblx0XHRjbGlwLm5hbWUgPSBuYW1lO1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IHRyYWNrID0gY2xpcC50cmFja3NbIGkgXTtcblx0XHRcdGNvbnN0IHZhbHVlU2l6ZSA9IHRyYWNrLmdldFZhbHVlU2l6ZSgpO1xuXG5cdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IHRyYWNrLnRpbWVzLmxlbmd0aDsgKysgaiApIHtcblxuXHRcdFx0XHRjb25zdCBmcmFtZSA9IHRyYWNrLnRpbWVzWyBqIF0gKiBmcHM7XG5cblx0XHRcdFx0aWYgKCBmcmFtZSA8IHN0YXJ0RnJhbWUgfHwgZnJhbWUgPj0gZW5kRnJhbWUgKSBjb250aW51ZTtcblxuXHRcdFx0XHR0aW1lcy5wdXNoKCB0cmFjay50aW1lc1sgaiBdICk7XG5cblx0XHRcdFx0Zm9yICggbGV0IGsgPSAwOyBrIDwgdmFsdWVTaXplOyArKyBrICkge1xuXG5cdFx0XHRcdFx0dmFsdWVzLnB1c2goIHRyYWNrLnZhbHVlc1sgaiAqIHZhbHVlU2l6ZSArIGsgXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRpbWVzLmxlbmd0aCA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHR0cmFjay50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdGltZXMsIHRyYWNrLnRpbWVzLmNvbnN0cnVjdG9yICk7XG5cdFx0XHR0cmFjay52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHZhbHVlcywgdHJhY2sudmFsdWVzLmNvbnN0cnVjdG9yICk7XG5cblx0XHRcdHRyYWNrcy5wdXNoKCB0cmFjayApO1xuXG5cdFx0fVxuXG5cdFx0Y2xpcC50cmFja3MgPSB0cmFja3M7XG5cblx0XHQvLyBmaW5kIG1pbmltdW0gLnRpbWVzIHZhbHVlIGFjcm9zcyBhbGwgdHJhY2tzIGluIHRoZSB0cmltbWVkIGNsaXBcblxuXHRcdGxldCBtaW5TdGFydFRpbWUgPSBJbmZpbml0eTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgKysgaSApIHtcblxuXHRcdFx0aWYgKCBtaW5TdGFydFRpbWUgPiBjbGlwLnRyYWNrc1sgaSBdLnRpbWVzWyAwIF0gKSB7XG5cblx0XHRcdFx0bWluU3RhcnRUaW1lID0gY2xpcC50cmFja3NbIGkgXS50aW1lc1sgMCBdO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBzaGlmdCBhbGwgdHJhY2tzIHN1Y2ggdGhhdCBjbGlwIGJlZ2lucyBhdCB0PTBcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgKysgaSApIHtcblxuXHRcdFx0Y2xpcC50cmFja3NbIGkgXS5zaGlmdCggLSAxICogbWluU3RhcnRUaW1lICk7XG5cblx0XHR9XG5cblx0XHRjbGlwLnJlc2V0RHVyYXRpb24oKTtcblxuXHRcdHJldHVybiBjbGlwO1xuXG5cdH0sXG5cblx0bWFrZUNsaXBBZGRpdGl2ZTogZnVuY3Rpb24gKCB0YXJnZXRDbGlwLCByZWZlcmVuY2VGcmFtZSA9IDAsIHJlZmVyZW5jZUNsaXAgPSB0YXJnZXRDbGlwLCBmcHMgPSAzMCApIHtcblxuXHRcdGlmICggZnBzIDw9IDAgKSBmcHMgPSAzMDtcblxuXHRcdGNvbnN0IG51bVRyYWNrcyA9IHJlZmVyZW5jZUNsaXAudHJhY2tzLmxlbmd0aDtcblx0XHRjb25zdCByZWZlcmVuY2VUaW1lID0gcmVmZXJlbmNlRnJhbWUgLyBmcHM7XG5cblx0XHQvLyBNYWtlIGVhY2ggdHJhY2sncyB2YWx1ZXMgcmVsYXRpdmUgdG8gdGhlIHZhbHVlcyBhdCB0aGUgcmVmZXJlbmNlIGZyYW1lXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCByZWZlcmVuY2VUcmFjayA9IHJlZmVyZW5jZUNsaXAudHJhY2tzWyBpIF07XG5cdFx0XHRjb25zdCByZWZlcmVuY2VUcmFja1R5cGUgPSByZWZlcmVuY2VUcmFjay5WYWx1ZVR5cGVOYW1lO1xuXG5cdFx0XHQvLyBTa2lwIHRoaXMgdHJhY2sgaWYgaXQncyBub24tbnVtZXJpY1xuXHRcdFx0aWYgKCByZWZlcmVuY2VUcmFja1R5cGUgPT09ICdib29sJyB8fCByZWZlcmVuY2VUcmFja1R5cGUgPT09ICdzdHJpbmcnICkgY29udGludWU7XG5cblx0XHRcdC8vIEZpbmQgdGhlIHRyYWNrIGluIHRoZSB0YXJnZXQgY2xpcCB3aG9zZSBuYW1lIGFuZCB0eXBlIG1hdGNoZXMgdGhlIHJlZmVyZW5jZSB0cmFja1xuXHRcdFx0Y29uc3QgdGFyZ2V0VHJhY2sgPSB0YXJnZXRDbGlwLnRyYWNrcy5maW5kKCBmdW5jdGlvbiAoIHRyYWNrICkge1xuXG5cdFx0XHRcdHJldHVybiB0cmFjay5uYW1lID09PSByZWZlcmVuY2VUcmFjay5uYW1lXG5cdFx0XHRcdFx0JiYgdHJhY2suVmFsdWVUeXBlTmFtZSA9PT0gcmVmZXJlbmNlVHJhY2tUeXBlO1xuXG5cdFx0XHR9ICk7XG5cblx0XHRcdGlmICggdGFyZ2V0VHJhY2sgPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRsZXQgcmVmZXJlbmNlT2Zmc2V0ID0gMDtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVZhbHVlU2l6ZSA9IHJlZmVyZW5jZVRyYWNrLmdldFZhbHVlU2l6ZSgpO1xuXG5cdFx0XHRpZiAoIHJlZmVyZW5jZVRyYWNrLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lICkge1xuXG5cdFx0XHRcdHJlZmVyZW5jZU9mZnNldCA9IHJlZmVyZW5jZVZhbHVlU2l6ZSAvIDM7XG5cblx0XHRcdH1cblxuXHRcdFx0bGV0IHRhcmdldE9mZnNldCA9IDA7XG5cdFx0XHRjb25zdCB0YXJnZXRWYWx1ZVNpemUgPSB0YXJnZXRUcmFjay5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdFx0aWYgKCB0YXJnZXRUcmFjay5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSApIHtcblxuXHRcdFx0XHR0YXJnZXRPZmZzZXQgPSB0YXJnZXRWYWx1ZVNpemUgLyAzO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IHJlZmVyZW5jZVRyYWNrLnRpbWVzLmxlbmd0aCAtIDE7XG5cdFx0XHRsZXQgcmVmZXJlbmNlVmFsdWU7XG5cblx0XHRcdC8vIEZpbmQgdGhlIHZhbHVlIHRvIHN1YnRyYWN0IG91dCBvZiB0aGUgdHJhY2tcblx0XHRcdGlmICggcmVmZXJlbmNlVGltZSA8PSByZWZlcmVuY2VUcmFjay50aW1lc1sgMCBdICkge1xuXG5cdFx0XHRcdC8vIFJlZmVyZW5jZSBmcmFtZSBpcyBlYXJsaWVyIHRoYW4gdGhlIGZpcnN0IGtleWZyYW1lLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3Qga2V5ZnJhbWVcblx0XHRcdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0Y29uc3QgZW5kSW5kZXggPSByZWZlcmVuY2VWYWx1ZVNpemUgLSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdHJlZmVyZW5jZVZhbHVlID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggcmVmZXJlbmNlVHJhY2sudmFsdWVzLCBzdGFydEluZGV4LCBlbmRJbmRleCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCByZWZlcmVuY2VUaW1lID49IHJlZmVyZW5jZVRyYWNrLnRpbWVzWyBsYXN0SW5kZXggXSApIHtcblxuXHRcdFx0XHQvLyBSZWZlcmVuY2UgZnJhbWUgaXMgYWZ0ZXIgdGhlIGxhc3Qga2V5ZnJhbWUsIHNvIGp1c3QgdXNlIHRoZSBsYXN0IGtleWZyYW1lXG5cdFx0XHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBsYXN0SW5kZXggKiByZWZlcmVuY2VWYWx1ZVNpemUgKyByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHJlZmVyZW5jZVZhbHVlU2l6ZSAtIHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0cmVmZXJlbmNlVmFsdWUgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCByZWZlcmVuY2VUcmFjay52YWx1ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJwb2xhdGUgdG8gdGhlIHJlZmVyZW5jZSB2YWx1ZVxuXHRcdFx0XHRjb25zdCBpbnRlcnBvbGFudCA9IHJlZmVyZW5jZVRyYWNrLmNyZWF0ZUludGVycG9sYW50KCk7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0SW5kZXggPSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdGNvbnN0IGVuZEluZGV4ID0gcmVmZXJlbmNlVmFsdWVTaXplIC0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRpbnRlcnBvbGFudC5ldmFsdWF0ZSggcmVmZXJlbmNlVGltZSApO1xuXHRcdFx0XHRyZWZlcmVuY2VWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIGludGVycG9sYW50LnJlc3VsdEJ1ZmZlciwgc3RhcnRJbmRleCwgZW5kSW5kZXggKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb25qdWdhdGUgdGhlIHF1YXRlcm5pb25cblx0XHRcdGlmICggcmVmZXJlbmNlVHJhY2tUeXBlID09PSAncXVhdGVybmlvbicgKSB7XG5cblx0XHRcdFx0Y29uc3QgcmVmZXJlbmNlUXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCkuZnJvbUFycmF5KCByZWZlcmVuY2VWYWx1ZSApLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpO1xuXHRcdFx0XHRyZWZlcmVuY2VRdWF0LnRvQXJyYXkoIHJlZmVyZW5jZVZhbHVlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VidHJhY3QgdGhlIHJlZmVyZW5jZSB2YWx1ZSBmcm9tIGFsbCBvZiB0aGUgdHJhY2sgdmFsdWVzXG5cblx0XHRcdGNvbnN0IG51bVRpbWVzID0gdGFyZ2V0VHJhY2sudGltZXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgbnVtVGltZXM7ICsrIGogKSB7XG5cblx0XHRcdFx0Y29uc3QgdmFsdWVTdGFydCA9IGogKiB0YXJnZXRWYWx1ZVNpemUgKyB0YXJnZXRPZmZzZXQ7XG5cblx0XHRcdFx0aWYgKCByZWZlcmVuY2VUcmFja1R5cGUgPT09ICdxdWF0ZXJuaW9uJyApIHtcblxuXHRcdFx0XHRcdC8vIE11bHRpcGx5IHRoZSBjb25qdWdhdGUgZm9yIHF1YXRlcm5pb24gdHJhY2sgdHlwZXNcblx0XHRcdFx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KFxuXHRcdFx0XHRcdFx0dGFyZ2V0VHJhY2sudmFsdWVzLFxuXHRcdFx0XHRcdFx0dmFsdWVTdGFydCxcblx0XHRcdFx0XHRcdHJlZmVyZW5jZVZhbHVlLFxuXHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdHRhcmdldFRyYWNrLnZhbHVlcyxcblx0XHRcdFx0XHRcdHZhbHVlU3RhcnRcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zdCB2YWx1ZUVuZCA9IHRhcmdldFZhbHVlU2l6ZSAtIHRhcmdldE9mZnNldCAqIDI7XG5cblx0XHRcdFx0XHQvLyBTdWJ0cmFjdCBlYWNoIHZhbHVlIGZvciBhbGwgb3RoZXIgbnVtZXJpYyB0cmFjayB0eXBlc1xuXHRcdFx0XHRcdGZvciAoIGxldCBrID0gMDsgayA8IHZhbHVlRW5kOyArKyBrICkge1xuXG5cdFx0XHRcdFx0XHR0YXJnZXRUcmFjay52YWx1ZXNbIHZhbHVlU3RhcnQgKyBrIF0gLT0gcmVmZXJlbmNlVmFsdWVbIGsgXTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRhcmdldENsaXAuYmxlbmRNb2RlID0gQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU7XG5cblx0XHRyZXR1cm4gdGFyZ2V0Q2xpcDtcblxuXHR9XG5cbn07XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBpbnRlcnBvbGFudHMgb3ZlciBwYXJhbWV0cmljIHNhbXBsZXMuXG4gKlxuICogVGhlIHBhcmFtZXRlciBkb21haW4gaXMgb25lIGRpbWVuc2lvbmFsLCB0eXBpY2FsbHkgdGhlIHRpbWUgb3IgYSBwYXRoXG4gKiBhbG9uZyBhIGN1cnZlIGRlZmluZWQgYnkgdGhlIGRhdGEuXG4gKlxuICogVGhlIHNhbXBsZSB2YWx1ZXMgY2FuIGhhdmUgYW55IGRpbWVuc2lvbmFsaXR5IGFuZCBkZXJpdmVkIGNsYXNzZXMgbWF5XG4gKiBhcHBseSBzcGVjaWFsIGludGVycHJldGF0aW9ucyB0byB0aGUgZGF0YS5cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBpbnRlcnZhbCBzZWVrIGluIGEgVGVtcGxhdGUgTWV0aG9kLCBkZWZlcnJpbmdcbiAqIHRoZSBhY3R1YWwgaW50ZXJwb2xhdGlvbiB0byBkZXJpdmVkIGNsYXNzZXMuXG4gKlxuICogVGltZSBjb21wbGV4aXR5IGlzIE8oMSkgZm9yIGxpbmVhciBhY2Nlc3MgY3Jvc3NpbmcgYXQgbW9zdCB0d28gcG9pbnRzXG4gKiBhbmQgTyhsb2cgTikgZm9yIHJhbmRvbSBhY2Nlc3MsIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbnMuXG4gKlxuICogUmVmZXJlbmNlczpcbiAqXG4gKiBcdFx0aHR0cDovL3d3dy5vb2Rlc2lnbi5jb20vdGVtcGxhdGUtbWV0aG9kLXBhdHRlcm4uaHRtbFxuICpcbiAqL1xuXG5jbGFzcyBJbnRlcnBvbGFudCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7XG5cblx0XHR0aGlzLnBhcmFtZXRlclBvc2l0aW9ucyA9IHBhcmFtZXRlclBvc2l0aW9ucztcblx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IDA7XG5cblx0XHR0aGlzLnJlc3VsdEJ1ZmZlciA9IHJlc3VsdEJ1ZmZlciAhPT0gdW5kZWZpbmVkID9cblx0XHRcdHJlc3VsdEJ1ZmZlciA6IG5ldyBzYW1wbGVWYWx1ZXMuY29uc3RydWN0b3IoIHNhbXBsZVNpemUgKTtcblx0XHR0aGlzLnNhbXBsZVZhbHVlcyA9IHNhbXBsZVZhbHVlcztcblx0XHR0aGlzLnZhbHVlU2l6ZSA9IHNhbXBsZVNpemU7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gbnVsbDtcblx0XHR0aGlzLkRlZmF1bHRTZXR0aW5nc18gPSB7fTtcblxuXHR9XG5cblx0ZXZhbHVhdGUoIHQgKSB7XG5cblx0XHRjb25zdCBwcCA9IHRoaXMucGFyYW1ldGVyUG9zaXRpb25zO1xuXHRcdGxldCBpMSA9IHRoaXMuX2NhY2hlZEluZGV4LFxuXHRcdFx0dDEgPSBwcFsgaTEgXSxcblx0XHRcdHQwID0gcHBbIGkxIC0gMSBdO1xuXG5cdFx0dmFsaWRhdGVfaW50ZXJ2YWw6IHtcblxuXHRcdFx0c2Vlazoge1xuXG5cdFx0XHRcdGxldCByaWdodDtcblxuXHRcdFx0XHRsaW5lYXJfc2Nhbjoge1xuXG5cdFx0XHRcdFx0Ly8tIFNlZSBodHRwOi8vanNwZXJmLmNvbS9jb21wYXJpc29uLXRvLXVuZGVmaW5lZC8zXG5cdFx0XHRcdFx0Ly8tIHNsb3dlciBjb2RlOlxuXHRcdFx0XHRcdC8vLVxuXHRcdFx0XHRcdC8vLSBcdFx0XHRcdGlmICggdCA+PSB0MSB8fCB0MSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGZvcndhcmRfc2NhbjogaWYgKCAhICggdCA8IHQxICkgKSB7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBnaXZlVXBBdCA9IGkxICsgMjsgOyApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHQxID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoIHQgPCB0MCApIGJyZWFrIGZvcndhcmRfc2NhbjtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIGFmdGVyIGVuZFxuXG5cdFx0XHRcdFx0XHRcdFx0aTEgPSBwcC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fY2FjaGVkSW5kZXggPSBpMTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hZnRlckVuZF8oIGkxIC0gMSwgdCwgdDAgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBpMSA9PT0gZ2l2ZVVwQXQgKSBicmVhazsgLy8gdGhpcyBsb29wXG5cblx0XHRcdFx0XHRcdFx0dDAgPSB0MTtcblx0XHRcdFx0XHRcdFx0dDEgPSBwcFsgKysgaTEgXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHQgPCB0MSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWsgc2VlaztcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gcHJlcGFyZSBiaW5hcnkgc2VhcmNoIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbmRleFxuXHRcdFx0XHRcdFx0cmlnaHQgPSBwcC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRicmVhayBsaW5lYXJfc2NhbjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vLSBzbG93ZXIgY29kZTpcblx0XHRcdFx0XHQvLy1cdFx0XHRcdFx0aWYgKCB0IDwgdDAgfHwgdDAgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRpZiAoICEgKCB0ID49IHQwICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGxvb3Bpbmc/XG5cblx0XHRcdFx0XHRcdGNvbnN0IHQxZ2xvYmFsID0gcHBbIDEgXTtcblxuXHRcdFx0XHRcdFx0aWYgKCB0IDwgdDFnbG9iYWwgKSB7XG5cblx0XHRcdFx0XHRcdFx0aTEgPSAyOyAvLyArIDEsIHVzaW5nIHRoZSBzY2FuIGZvciB0aGUgZGV0YWlsc1xuXHRcdFx0XHRcdFx0XHR0MCA9IHQxZ2xvYmFsO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIGxpbmVhciByZXZlcnNlIHNjYW5cblxuXHRcdFx0XHRcdFx0Zm9yICggbGV0IGdpdmVVcEF0ID0gaTEgLSAyOyA7ICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdDAgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIGJlZm9yZSBzdGFydFxuXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fY2FjaGVkSW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmJlZm9yZVN0YXJ0XyggMCwgdCwgdDEgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBpMSA9PT0gZ2l2ZVVwQXQgKSBicmVhazsgLy8gdGhpcyBsb29wXG5cblx0XHRcdFx0XHRcdFx0dDEgPSB0MDtcblx0XHRcdFx0XHRcdFx0dDAgPSBwcFsgLS0gaTEgLSAxIF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0ID49IHQwICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhcnJpdmVkIGF0IHRoZSBzb3VnaHQgaW50ZXJ2YWxcblx0XHRcdFx0XHRcdFx0XHRicmVhayBzZWVrO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBwcmVwYXJlIGJpbmFyeSBzZWFyY2ggb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5kZXhcblx0XHRcdFx0XHRcdHJpZ2h0ID0gaTE7XG5cdFx0XHRcdFx0XHRpMSA9IDA7XG5cdFx0XHRcdFx0XHRicmVhayBsaW5lYXJfc2NhbjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHRoZSBpbnRlcnZhbCBpcyB2YWxpZFxuXG5cdFx0XHRcdFx0YnJlYWsgdmFsaWRhdGVfaW50ZXJ2YWw7XG5cblx0XHRcdFx0fSAvLyBsaW5lYXIgc2NhblxuXG5cdFx0XHRcdC8vIGJpbmFyeSBzZWFyY2hcblxuXHRcdFx0XHR3aGlsZSAoIGkxIDwgcmlnaHQgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBtaWQgPSAoIGkxICsgcmlnaHQgKSA+Pj4gMTtcblxuXHRcdFx0XHRcdGlmICggdCA8IHBwWyBtaWQgXSApIHtcblxuXHRcdFx0XHRcdFx0cmlnaHQgPSBtaWQ7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpMSA9IG1pZCArIDE7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHQxID0gcHBbIGkxIF07XG5cdFx0XHRcdHQwID0gcHBbIGkxIC0gMSBdO1xuXG5cdFx0XHRcdC8vIGNoZWNrIGJvdW5kYXJ5IGNhc2VzLCBhZ2FpblxuXG5cdFx0XHRcdGlmICggdDAgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gMDtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oIDAsIHQsIHQxICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdDEgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGkxID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKCBpMSAtIDEsIHQwLCB0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IC8vIHNlZWtcblxuXHRcdFx0dGhpcy5fY2FjaGVkSW5kZXggPSBpMTtcblxuXHRcdFx0dGhpcy5pbnRlcnZhbENoYW5nZWRfKCBpMSwgdDAsIHQxICk7XG5cblx0XHR9IC8vIHZhbGlkYXRlX2ludGVydmFsXG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oIGkxLCB0MCwgdCwgdDEgKTtcblxuXHR9XG5cblx0Z2V0U2V0dGluZ3NfKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3MgfHwgdGhpcy5EZWZhdWx0U2V0dGluZ3NfO1xuXG5cdH1cblxuXHRjb3B5U2FtcGxlVmFsdWVfKCBpbmRleCApIHtcblxuXHRcdC8vIGNvcGllcyBhIHNhbXBsZSB2YWx1ZSB0byB0aGUgcmVzdWx0IGJ1ZmZlclxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsXG5cdFx0XHR2YWx1ZXMgPSB0aGlzLnNhbXBsZVZhbHVlcyxcblx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0b2Zmc2V0ID0gaW5kZXggKiBzdHJpZGU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSApIHtcblxuXHRcdFx0cmVzdWx0WyBpIF0gPSB2YWx1ZXNbIG9mZnNldCArIGkgXTtcblxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cblx0fVxuXG5cdC8vIFRlbXBsYXRlIG1ldGhvZHMgZm9yIGRlcml2ZWQgY2xhc3NlczpcblxuXHRpbnRlcnBvbGF0ZV8oIC8qIGkxLCB0MCwgdCwgdDEgKi8gKSB7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoICdjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCcgKTtcblx0XHQvLyBpbXBsZW1lbnRhdGlvbnMgc2hhbGwgcmV0dXJuIHRoaXMucmVzdWx0QnVmZmVyXG5cblx0fVxuXG5cdGludGVydmFsQ2hhbmdlZF8oIC8qIGkxLCB0MCwgdDEgKi8gKSB7XG5cblx0XHQvLyBlbXB0eVxuXG5cdH1cblxufVxuXG4vLyBBTElBUyBERUZJTklUSU9OU1xuXG5JbnRlcnBvbGFudC5wcm90b3R5cGUuYmVmb3JlU3RhcnRfID0gSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87XG5JbnRlcnBvbGFudC5wcm90b3R5cGUuYWZ0ZXJFbmRfID0gSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87XG5cbi8qKlxuICogRmFzdCBhbmQgc2ltcGxlIGN1YmljIHNwbGluZSBpbnRlcnBvbGFudC5cbiAqXG4gKiBJdCB3YXMgZGVyaXZlZCBmcm9tIGEgSGVybWl0aWFuIGNvbnN0cnVjdGlvbiBzZXR0aW5nIHRoZSBmaXJzdCBkZXJpdmF0aXZlXG4gKiBhdCBlYWNoIHNhbXBsZSBwb3NpdGlvbiB0byB0aGUgbGluZWFyIHNsb3BlIGJldHdlZW4gbmVpZ2hib3JpbmcgcG9zaXRpb25zXG4gKiBvdmVyIHRoZWlyIHBhcmFtZXRlciBpbnRlcnZhbC5cbiAqL1xuXG5jbGFzcyBDdWJpY0ludGVycG9sYW50IGV4dGVuZHMgSW50ZXJwb2xhbnQge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkge1xuXG5cdFx0c3VwZXIoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTtcblxuXHRcdHRoaXMuX3dlaWdodFByZXYgPSAtIDA7XG5cdFx0dGhpcy5fb2Zmc2V0UHJldiA9IC0gMDtcblx0XHR0aGlzLl93ZWlnaHROZXh0ID0gLSAwO1xuXHRcdHRoaXMuX29mZnNldE5leHQgPSAtIDA7XG5cblx0XHR0aGlzLkRlZmF1bHRTZXR0aW5nc18gPSB7XG5cblx0XHRcdGVuZGluZ1N0YXJ0OiBaZXJvQ3VydmF0dXJlRW5kaW5nLFxuXHRcdFx0ZW5kaW5nRW5kOiBaZXJvQ3VydmF0dXJlRW5kaW5nXG5cblx0XHR9O1xuXG5cdH1cblxuXHRpbnRlcnZhbENoYW5nZWRfKCBpMSwgdDAsIHQxICkge1xuXG5cdFx0Y29uc3QgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucztcblx0XHRsZXQgaVByZXYgPSBpMSAtIDIsXG5cdFx0XHRpTmV4dCA9IGkxICsgMSxcblxuXHRcdFx0dFByZXYgPSBwcFsgaVByZXYgXSxcblx0XHRcdHROZXh0ID0gcHBbIGlOZXh0IF07XG5cblx0XHRpZiAoIHRQcmV2ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHN3aXRjaCAoIHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQgKSB7XG5cblx0XHRcdFx0Y2FzZSBaZXJvU2xvcGVFbmRpbmc6XG5cblx0XHRcdFx0XHQvLyBmJyh0MCkgPSAwXG5cdFx0XHRcdFx0aVByZXYgPSBpMTtcblx0XHRcdFx0XHR0UHJldiA9IDIgKiB0MCAtIHQxO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBXcmFwQXJvdW5kRW5kaW5nOlxuXG5cdFx0XHRcdFx0Ly8gdXNlIHRoZSBvdGhlciBlbmQgb2YgdGhlIGN1cnZlXG5cdFx0XHRcdFx0aVByZXYgPSBwcC5sZW5ndGggLSAyO1xuXHRcdFx0XHRcdHRQcmV2ID0gdDAgKyBwcFsgaVByZXYgXSAtIHBwWyBpUHJldiArIDEgXTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRpbmdcblxuXHRcdFx0XHRcdC8vIGYnJyh0MCkgPSAwIGEuay5hLiBOYXR1cmFsIFNwbGluZVxuXHRcdFx0XHRcdGlQcmV2ID0gaTE7XG5cdFx0XHRcdFx0dFByZXYgPSB0MTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0TmV4dCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzd2l0Y2ggKCB0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCApIHtcblxuXHRcdFx0XHRjYXNlIFplcm9TbG9wZUVuZGluZzpcblxuXHRcdFx0XHRcdC8vIGYnKHROKSA9IDBcblx0XHRcdFx0XHRpTmV4dCA9IGkxO1xuXHRcdFx0XHRcdHROZXh0ID0gMiAqIHQxIC0gdDA7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFdyYXBBcm91bmRFbmRpbmc6XG5cblx0XHRcdFx0XHQvLyB1c2UgdGhlIG90aGVyIGVuZCBvZiB0aGUgY3VydmVcblx0XHRcdFx0XHRpTmV4dCA9IDE7XG5cdFx0XHRcdFx0dE5leHQgPSB0MSArIHBwWyAxIF0gLSBwcFsgMCBdO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDogLy8gWmVyb0N1cnZhdHVyZUVuZGluZ1xuXG5cdFx0XHRcdFx0Ly8gZicnKHROKSA9IDAsIGEuay5hLiBOYXR1cmFsIFNwbGluZVxuXHRcdFx0XHRcdGlOZXh0ID0gaTEgLSAxO1xuXHRcdFx0XHRcdHROZXh0ID0gdDA7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGhhbGZEdCA9ICggdDEgLSB0MCApICogMC41LFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemU7XG5cblx0XHR0aGlzLl93ZWlnaHRQcmV2ID0gaGFsZkR0IC8gKCB0MCAtIHRQcmV2ICk7XG5cdFx0dGhpcy5fd2VpZ2h0TmV4dCA9IGhhbGZEdCAvICggdE5leHQgLSB0MSApO1xuXHRcdHRoaXMuX29mZnNldFByZXYgPSBpUHJldiAqIHN0cmlkZTtcblx0XHR0aGlzLl9vZmZzZXROZXh0ID0gaU5leHQgKiBzdHJpZGU7XG5cblx0fVxuXG5cdGludGVycG9sYXRlXyggaTEsIHQwLCB0LCB0MSApIHtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblxuXHRcdFx0bzEgPSBpMSAqIHN0cmlkZSxcdFx0bzAgPSBvMSAtIHN0cmlkZSxcblx0XHRcdG9QID0gdGhpcy5fb2Zmc2V0UHJldiwgXHRvTiA9IHRoaXMuX29mZnNldE5leHQsXG5cdFx0XHR3UCA9IHRoaXMuX3dlaWdodFByZXYsXHR3TiA9IHRoaXMuX3dlaWdodE5leHQsXG5cblx0XHRcdHAgPSAoIHQgLSB0MCApIC8gKCB0MSAtIHQwICksXG5cdFx0XHRwcCA9IHAgKiBwLFxuXHRcdFx0cHBwID0gcHAgKiBwO1xuXG5cdFx0Ly8gZXZhbHVhdGUgcG9seW5vbWlhbHNcblxuXHRcdGNvbnN0IHNQID0gLSB3UCAqIHBwcCArIDIgKiB3UCAqIHBwIC0gd1AgKiBwO1xuXHRcdGNvbnN0IHMwID0gKCAxICsgd1AgKSAqIHBwcCArICggLSAxLjUgLSAyICogd1AgKSAqIHBwICsgKCAtIDAuNSArIHdQICkgKiBwICsgMTtcblx0XHRjb25zdCBzMSA9ICggLSAxIC0gd04gKSAqIHBwcCArICggMS41ICsgd04gKSAqIHBwICsgMC41ICogcDtcblx0XHRjb25zdCBzTiA9IHdOICogcHBwIC0gd04gKiBwcDtcblxuXHRcdC8vIGNvbWJpbmUgZGF0YSBsaW5lYXJseVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdHJlc3VsdFsgaSBdID1cblx0XHRcdFx0XHRzUCAqIHZhbHVlc1sgb1AgKyBpIF0gK1xuXHRcdFx0XHRcdHMwICogdmFsdWVzWyBvMCArIGkgXSArXG5cdFx0XHRcdFx0czEgKiB2YWx1ZXNbIG8xICsgaSBdICtcblx0XHRcdFx0XHRzTiAqIHZhbHVlc1sgb04gKyBpIF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdH1cblxufVxuXG5jbGFzcyBMaW5lYXJJbnRlcnBvbGFudCBleHRlbmRzIEludGVycG9sYW50IHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApIHtcblxuXHRcdHN1cGVyKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICk7XG5cblx0fVxuXG5cdGludGVycG9sYXRlXyggaTEsIHQwLCB0LCB0MSApIHtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblxuXHRcdFx0b2Zmc2V0MSA9IGkxICogc3RyaWRlLFxuXHRcdFx0b2Zmc2V0MCA9IG9mZnNldDEgLSBzdHJpZGUsXG5cblx0XHRcdHdlaWdodDEgPSAoIHQgLSB0MCApIC8gKCB0MSAtIHQwICksXG5cdFx0XHR3ZWlnaHQwID0gMSAtIHdlaWdodDE7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSApIHtcblxuXHRcdFx0cmVzdWx0WyBpIF0gPVxuXHRcdFx0XHRcdHZhbHVlc1sgb2Zmc2V0MCArIGkgXSAqIHdlaWdodDAgK1xuXHRcdFx0XHRcdHZhbHVlc1sgb2Zmc2V0MSArIGkgXSAqIHdlaWdodDE7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdH1cblxufVxuXG4vKipcbiAqXG4gKiBJbnRlcnBvbGFudCB0aGF0IGV2YWx1YXRlcyB0byB0aGUgc2FtcGxlIHZhbHVlIGF0IHRoZSBwb3NpdGlvbiBwcmVjZWVkaW5nXG4gKiB0aGUgcGFyYW1ldGVyLlxuICovXG5cbmNsYXNzIERpc2NyZXRlSW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7XG5cblx0XHRzdXBlciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApO1xuXG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oIGkxIC8qLCB0MCwgdCwgdDEgKi8gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKCBpMSAtIDEgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgS2V5ZnJhbWVUcmFjayB7XG5cblx0Y29uc3RydWN0b3IoIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7XG5cblx0XHRpZiAoIG5hbWUgPT09IHVuZGVmaW5lZCApIHRocm93IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkJyApO1xuXHRcdGlmICggdGltZXMgPT09IHVuZGVmaW5lZCB8fCB0aW1lcy5sZW5ndGggPT09IDAgKSB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBubyBrZXlmcmFtZXMgaW4gdHJhY2sgbmFtZWQgJyArIG5hbWUgKTtcblxuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cblx0XHR0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB0aW1lcywgdGhpcy5UaW1lQnVmZmVyVHlwZSApO1xuXHRcdHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB2YWx1ZXMsIHRoaXMuVmFsdWVCdWZmZXJUeXBlICk7XG5cblx0XHR0aGlzLnNldEludGVycG9sYXRpb24oIGludGVycG9sYXRpb24gfHwgdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbiApO1xuXG5cdH1cblxuXHQvLyBTZXJpYWxpemF0aW9uIChpbiBzdGF0aWMgY29udGV4dCwgYmVjYXVzZSBvZiBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uXG5cdC8vIGFuZCBhdXRvbWF0aWMgaW52b2NhdGlvbiBvZiAudG9KU09OKTpcblxuXHRzdGF0aWMgdG9KU09OKCB0cmFjayApIHtcblxuXHRcdGNvbnN0IHRyYWNrVHlwZSA9IHRyYWNrLmNvbnN0cnVjdG9yO1xuXG5cdFx0bGV0IGpzb247XG5cblx0XHQvLyBkZXJpdmVkIGNsYXNzZXMgY2FuIGRlZmluZSBhIHN0YXRpYyB0b0pTT04gbWV0aG9kXG5cdFx0aWYgKCB0cmFja1R5cGUudG9KU09OICE9PSB0aGlzLnRvSlNPTiApIHtcblxuXHRcdFx0anNvbiA9IHRyYWNrVHlwZS50b0pTT04oIHRyYWNrICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBieSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhlIGRhdGEgY2FuIGJlIHNlcmlhbGl6ZWQgYXMtaXNcblx0XHRcdGpzb24gPSB7XG5cblx0XHRcdFx0J25hbWUnOiB0cmFjay5uYW1lLFxuXHRcdFx0XHQndGltZXMnOiBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRyYWNrLnRpbWVzLCBBcnJheSApLFxuXHRcdFx0XHQndmFsdWVzJzogQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB0cmFjay52YWx1ZXMsIEFycmF5IClcblxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgaW50ZXJwb2xhdGlvbiA9IHRyYWNrLmdldEludGVycG9sYXRpb24oKTtcblxuXHRcdFx0aWYgKCBpbnRlcnBvbGF0aW9uICE9PSB0cmFjay5EZWZhdWx0SW50ZXJwb2xhdGlvbiApIHtcblxuXHRcdFx0XHRqc29uLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRqc29uLnR5cGUgPSB0cmFjay5WYWx1ZVR5cGVOYW1lOyAvLyBtYW5kYXRvcnlcblxuXHRcdHJldHVybiBqc29uO1xuXG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSggcmVzdWx0ICkge1xuXG5cdFx0cmV0dXJuIG5ldyBEaXNjcmV0ZUludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7XG5cblx0fVxuXG5cdEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhciggcmVzdWx0ICkge1xuXG5cdFx0cmV0dXJuIG5ldyBMaW5lYXJJbnRlcnBvbGFudCggdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApO1xuXG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGgoIHJlc3VsdCApIHtcblxuXHRcdHJldHVybiBuZXcgQ3ViaWNJbnRlcnBvbGFudCggdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApO1xuXG5cdH1cblxuXHRzZXRJbnRlcnBvbGF0aW9uKCBpbnRlcnBvbGF0aW9uICkge1xuXG5cdFx0bGV0IGZhY3RvcnlNZXRob2Q7XG5cblx0XHRzd2l0Y2ggKCBpbnRlcnBvbGF0aW9uICkge1xuXG5cdFx0XHRjYXNlIEludGVycG9sYXRlRGlzY3JldGU6XG5cblx0XHRcdFx0ZmFjdG9yeU1ldGhvZCA9IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgSW50ZXJwb2xhdGVMaW5lYXI6XG5cblx0XHRcdFx0ZmFjdG9yeU1ldGhvZCA9IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEludGVycG9sYXRlU21vb3RoOlxuXG5cdFx0XHRcdGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHRcdGlmICggZmFjdG9yeU1ldGhvZCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gJ3Vuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICcgK1xuXHRcdFx0XHR0aGlzLlZhbHVlVHlwZU5hbWUgKyAnIGtleWZyYW1lIHRyYWNrIG5hbWVkICcgKyB0aGlzLm5hbWU7XG5cblx0XHRcdGlmICggdGhpcy5jcmVhdGVJbnRlcnBvbGFudCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIGZhbGwgYmFjayB0byBkZWZhdWx0LCB1bmxlc3MgdGhlIGRlZmF1bHQgaXRzZWxmIGlzIG1lc3NlZCB1cFxuXHRcdFx0XHRpZiAoIGludGVycG9sYXRpb24gIT09IHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24gKSB7XG5cblx0XHRcdFx0XHR0aGlzLnNldEludGVycG9sYXRpb24oIHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24gKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBtZXNzYWdlICk7IC8vIGZhdGFsLCBpbiB0aGlzIGNhc2VcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazonLCBtZXNzYWdlICk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH1cblxuXHRcdHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgPSBmYWN0b3J5TWV0aG9kO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldEludGVycG9sYXRpb24oKSB7XG5cblx0XHRzd2l0Y2ggKCB0aGlzLmNyZWF0ZUludGVycG9sYW50ICkge1xuXG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6XG5cblx0XHRcdFx0cmV0dXJuIEludGVycG9sYXRlRGlzY3JldGU7XG5cblx0XHRcdGNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6XG5cblx0XHRcdFx0cmV0dXJuIEludGVycG9sYXRlTGluZWFyO1xuXG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOlxuXG5cdFx0XHRcdHJldHVybiBJbnRlcnBvbGF0ZVNtb290aDtcblxuXHRcdH1cblxuXHR9XG5cblx0Z2V0VmFsdWVTaXplKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCAvIHRoaXMudGltZXMubGVuZ3RoO1xuXG5cdH1cblxuXHQvLyBtb3ZlIGFsbCBrZXlmcmFtZXMgZWl0aGVyIGZvcndhcmRzIG9yIGJhY2t3YXJkcyBpbiB0aW1lXG5cdHNoaWZ0KCB0aW1lT2Zmc2V0ICkge1xuXG5cdFx0aWYgKCB0aW1lT2Zmc2V0ICE9PSAwLjAgKSB7XG5cblx0XHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdHRpbWVzWyBpIF0gKz0gdGltZU9mZnNldDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIHNjYWxlIGFsbCBrZXlmcmFtZSB0aW1lcyBieSBhIGZhY3RvciAodXNlZnVsIGZvciBmcmFtZSA8LT4gc2Vjb25kcyBjb252ZXJzaW9ucylcblx0c2NhbGUoIHRpbWVTY2FsZSApIHtcblxuXHRcdGlmICggdGltZVNjYWxlICE9PSAxLjAgKSB7XG5cblx0XHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdHRpbWVzWyBpIF0gKj0gdGltZVNjYWxlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Ly8gcmVtb3ZlcyBrZXlmcmFtZXMgYmVmb3JlIGFuZCBhZnRlciBhbmltYXRpb24gd2l0aG91dCBjaGFuZ2luZyBhbnkgdmFsdWVzIHdpdGhpbiB0aGUgcmFuZ2UgW3N0YXJ0VGltZSwgZW5kVGltZV0uXG5cdC8vIElNUE9SVEFOVDogV2UgZG8gbm90IHNoaWZ0IGFyb3VuZCBrZXlzIHRvIHRoZSBzdGFydCBvZiB0aGUgdHJhY2sgdGltZSwgYmVjYXVzZSBmb3IgaW50ZXJwb2xhdGVkIGtleXMgdGhpcyB3aWxsIGNoYW5nZSB0aGVpciB2YWx1ZXNcblx0dHJpbSggc3RhcnRUaW1lLCBlbmRUaW1lICkge1xuXG5cdFx0Y29uc3QgdGltZXMgPSB0aGlzLnRpbWVzLFxuXHRcdFx0bktleXMgPSB0aW1lcy5sZW5ndGg7XG5cblx0XHRsZXQgZnJvbSA9IDAsXG5cdFx0XHR0byA9IG5LZXlzIC0gMTtcblxuXHRcdHdoaWxlICggZnJvbSAhPT0gbktleXMgJiYgdGltZXNbIGZyb20gXSA8IHN0YXJ0VGltZSApIHtcblxuXHRcdFx0KysgZnJvbTtcblxuXHRcdH1cblxuXHRcdHdoaWxlICggdG8gIT09IC0gMSAmJiB0aW1lc1sgdG8gXSA+IGVuZFRpbWUgKSB7XG5cblx0XHRcdC0tIHRvO1xuXG5cdFx0fVxuXG5cdFx0KysgdG87IC8vIGluY2x1c2l2ZSAtPiBleGNsdXNpdmUgYm91bmRcblxuXHRcdGlmICggZnJvbSAhPT0gMCB8fCB0byAhPT0gbktleXMgKSB7XG5cblx0XHRcdC8vIGVtcHR5IHRyYWNrcyBhcmUgZm9yYmlkZGVuLCBzbyBrZWVwIGF0IGxlYXN0IG9uZSBrZXlmcmFtZVxuXHRcdFx0aWYgKCBmcm9tID49IHRvICkge1xuXG5cdFx0XHRcdHRvID0gTWF0aC5tYXgoIHRvLCAxICk7XG5cdFx0XHRcdGZyb20gPSB0byAtIDE7XG5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RyaWRlID0gdGhpcy5nZXRWYWx1ZVNpemUoKTtcblx0XHRcdHRoaXMudGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB0aW1lcywgZnJvbSwgdG8gKTtcblx0XHRcdHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy52YWx1ZXMsIGZyb20gKiBzdHJpZGUsIHRvICogc3RyaWRlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Ly8gZW5zdXJlIHdlIGRvIG5vdCBnZXQgYSBHYXJiYWdlSW5HYXJiYWdlT3V0IHNpdHVhdGlvbiwgbWFrZSBzdXJlIHRyYWNrcyBhcmUgYXQgbGVhc3QgbWluaW1hbGx5IHZpYWJsZVxuXHR2YWxpZGF0ZSgpIHtcblxuXHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRjb25zdCB2YWx1ZVNpemUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpO1xuXHRcdGlmICggdmFsdWVTaXplIC0gTWF0aC5mbG9vciggdmFsdWVTaXplICkgIT09IDAgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suJywgdGhpcyApO1xuXHRcdFx0dmFsaWQgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcyxcblx0XHRcdHZhbHVlcyA9IHRoaXMudmFsdWVzLFxuXG5cdFx0XHRuS2V5cyA9IHRpbWVzLmxlbmd0aDtcblxuXHRcdGlmICggbktleXMgPT09IDAgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4nLCB0aGlzICk7XG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHByZXZUaW1lID0gbnVsbDtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbktleXM7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGN1cnJUaW1lID0gdGltZXNbIGkgXTtcblxuXHRcdFx0aWYgKCB0eXBlb2YgY3VyclRpbWUgPT09ICdudW1iZXInICYmIGlzTmFOKCBjdXJyVGltZSApICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4nLCB0aGlzLCBpLCBjdXJyVGltZSApO1xuXHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHByZXZUaW1lICE9PSBudWxsICYmIHByZXZUaW1lID4gY3VyclRpbWUgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLicsIHRoaXMsIGksIGN1cnJUaW1lLCBwcmV2VGltZSApO1xuXHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRwcmV2VGltZSA9IGN1cnJUaW1lO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCBBbmltYXRpb25VdGlscy5pc1R5cGVkQXJyYXkoIHZhbHVlcyApICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgbiA9IHZhbHVlcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1sgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCBpc05hTiggdmFsdWUgKSApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4nLCB0aGlzLCBpLCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXG5cdH1cblxuXHQvLyByZW1vdmVzIGVxdWl2YWxlbnQgc2VxdWVudGlhbCBrZXlzIGFzIGNvbW1vbiBpbiBtb3JwaCB0YXJnZXQgc2VxdWVuY2VzXG5cdC8vICgwLDAsMCwwLDEsMSwxLDAsMCwwLDAsMCwwLDApIC0tPiAoMCwwLDEsMSwwLDApXG5cdG9wdGltaXplKCkge1xuXG5cdFx0Ly8gdGltZXMgb3IgdmFsdWVzIG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlciB0cmFja3MsIHNvIG92ZXJ3cml0aW5nIGlzIHVuc2FmZVxuXHRcdGNvbnN0IHRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy50aW1lcyApLFxuXHRcdFx0dmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy52YWx1ZXMgKSxcblx0XHRcdHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCksXG5cblx0XHRcdHNtb290aEludGVycG9sYXRpb24gPSB0aGlzLmdldEludGVycG9sYXRpb24oKSA9PT0gSW50ZXJwb2xhdGVTbW9vdGgsXG5cblx0XHRcdGxhc3RJbmRleCA9IHRpbWVzLmxlbmd0aCAtIDE7XG5cblx0XHRsZXQgd3JpdGVJbmRleCA9IDE7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDE7IGkgPCBsYXN0SW5kZXg7ICsrIGkgKSB7XG5cblx0XHRcdGxldCBrZWVwID0gZmFsc2U7XG5cblx0XHRcdGNvbnN0IHRpbWUgPSB0aW1lc1sgaSBdO1xuXHRcdFx0Y29uc3QgdGltZU5leHQgPSB0aW1lc1sgaSArIDEgXTtcblxuXHRcdFx0Ly8gcmVtb3ZlIGFkamFjZW50IGtleWZyYW1lcyBzY2hlZHVsZWQgYXQgdGhlIHNhbWUgdGltZVxuXG5cdFx0XHRpZiAoIHRpbWUgIT09IHRpbWVOZXh0ICYmICggaSAhPT0gMSB8fCB0aW1lICE9PSB0aW1lc1sgMCBdICkgKSB7XG5cblx0XHRcdFx0aWYgKCAhIHNtb290aEludGVycG9sYXRpb24gKSB7XG5cblx0XHRcdFx0XHQvLyByZW1vdmUgdW5uZWNlc3Nhcnkga2V5ZnJhbWVzIHNhbWUgYXMgdGhlaXIgbmVpZ2hib3JzXG5cblx0XHRcdFx0XHRjb25zdCBvZmZzZXQgPSBpICogc3RyaWRlLFxuXHRcdFx0XHRcdFx0b2Zmc2V0UCA9IG9mZnNldCAtIHN0cmlkZSxcblx0XHRcdFx0XHRcdG9mZnNldE4gPSBvZmZzZXQgKyBzdHJpZGU7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogIT09IHN0cmlkZTsgKysgaiApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbIG9mZnNldCArIGogXTtcblxuXHRcdFx0XHRcdFx0aWYgKCB2YWx1ZSAhPT0gdmFsdWVzWyBvZmZzZXRQICsgaiBdIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlICE9PSB2YWx1ZXNbIG9mZnNldE4gKyBqIF0gKSB7XG5cblx0XHRcdFx0XHRcdFx0a2VlcCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGtlZXAgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBpbi1wbGFjZSBjb21wYWN0aW9uXG5cblx0XHRcdGlmICgga2VlcCApIHtcblxuXHRcdFx0XHRpZiAoIGkgIT09IHdyaXRlSW5kZXggKSB7XG5cblx0XHRcdFx0XHR0aW1lc1sgd3JpdGVJbmRleCBdID0gdGltZXNbIGkgXTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlYWRPZmZzZXQgPSBpICogc3RyaWRlLFxuXHRcdFx0XHRcdFx0d3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7XG5cblx0XHRcdFx0XHRcdHZhbHVlc1sgd3JpdGVPZmZzZXQgKyBqIF0gPSB2YWx1ZXNbIHJlYWRPZmZzZXQgKyBqIF07XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCsrIHdyaXRlSW5kZXg7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGZsdXNoIGxhc3Qga2V5ZnJhbWUgKGNvbXBhY3Rpb24gbG9va3MgYWhlYWQpXG5cblx0XHRpZiAoIGxhc3RJbmRleCA+IDAgKSB7XG5cblx0XHRcdHRpbWVzWyB3cml0ZUluZGV4IF0gPSB0aW1lc1sgbGFzdEluZGV4IF07XG5cblx0XHRcdGZvciAoIGxldCByZWFkT2Zmc2V0ID0gbGFzdEluZGV4ICogc3RyaWRlLCB3cml0ZU9mZnNldCA9IHdyaXRlSW5kZXggKiBzdHJpZGUsIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7XG5cblx0XHRcdFx0dmFsdWVzWyB3cml0ZU9mZnNldCArIGogXSA9IHZhbHVlc1sgcmVhZE9mZnNldCArIGogXTtcblxuXHRcdFx0fVxuXG5cdFx0XHQrKyB3cml0ZUluZGV4O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB3cml0ZUluZGV4ICE9PSB0aW1lcy5sZW5ndGggKSB7XG5cblx0XHRcdHRoaXMudGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB0aW1lcywgMCwgd3JpdGVJbmRleCApO1xuXHRcdFx0dGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB2YWx1ZXMsIDAsIHdyaXRlSW5kZXggKiBzdHJpZGUgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMudGltZXMgPSB0aW1lcztcblx0XHRcdHRoaXMudmFsdWVzID0gdmFsdWVzO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0Y29uc3QgdGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB0aGlzLnRpbWVzLCAwICk7XG5cdFx0Y29uc3QgdmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy52YWx1ZXMsIDAgKTtcblxuXHRcdGNvbnN0IFR5cGVkS2V5ZnJhbWVUcmFjayA9IHRoaXMuY29uc3RydWN0b3I7XG5cdFx0Y29uc3QgdHJhY2sgPSBuZXcgVHlwZWRLZXlmcmFtZVRyYWNrKCB0aGlzLm5hbWUsIHRpbWVzLCB2YWx1ZXMgKTtcblxuXHRcdC8vIEludGVycG9sYW50IGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yIGlzIG5vdCBzYXZlZCwgc28gY29weSB0aGUgZmFjdG9yeSBtZXRob2QgZGlyZWN0bHkuXG5cdFx0dHJhY2suY3JlYXRlSW50ZXJwb2xhbnQgPSB0aGlzLmNyZWF0ZUludGVycG9sYW50O1xuXG5cdFx0cmV0dXJuIHRyYWNrO1xuXG5cdH1cblxufVxuXG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZSA9IEZsb2F0MzJBcnJheTtcbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZSA9IEZsb2F0MzJBcnJheTtcbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVMaW5lYXI7XG5cbi8qKlxuICogQSBUcmFjayBvZiBCb29sZWFuIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuY2xhc3MgQm9vbGVhbktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ2Jvb2wnO1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZSA9IEFycmF5O1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIgPSB1bmRlZmluZWQ7XG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgVHJhY2sgb2Yga2V5ZnJhbWUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IGNvbG9yLlxuICovXG5jbGFzcyBDb2xvcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbkNvbG9yS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdjb2xvcic7XG5cbi8qKlxuICogQSBUcmFjayBvZiBudW1lcmljIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuY2xhc3MgTnVtYmVyS2V5ZnJhbWVUcmFjayBleHRlbmRzIEtleWZyYW1lVHJhY2sge31cblxuTnVtYmVyS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdudW1iZXInO1xuXG4vKipcbiAqIFNwaGVyaWNhbCBsaW5lYXIgdW5pdCBxdWF0ZXJuaW9uIGludGVycG9sYW50LlxuICovXG5cbmNsYXNzIFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCBleHRlbmRzIEludGVycG9sYW50IHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApIHtcblxuXHRcdHN1cGVyKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICk7XG5cblx0fVxuXG5cdGludGVycG9sYXRlXyggaTEsIHQwLCB0LCB0MSApIHtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblxuXHRcdFx0YWxwaGEgPSAoIHQgLSB0MCApIC8gKCB0MSAtIHQwICk7XG5cblx0XHRsZXQgb2Zmc2V0ID0gaTEgKiBzdHJpZGU7XG5cblx0XHRmb3IgKCBsZXQgZW5kID0gb2Zmc2V0ICsgc3RyaWRlOyBvZmZzZXQgIT09IGVuZDsgb2Zmc2V0ICs9IDQgKSB7XG5cblx0XHRcdFF1YXRlcm5pb24uc2xlcnBGbGF0KCByZXN1bHQsIDAsIHZhbHVlcywgb2Zmc2V0IC0gc3RyaWRlLCB2YWx1ZXMsIG9mZnNldCwgYWxwaGEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cblx0fVxuXG59XG5cbi8qKlxuICogQSBUcmFjayBvZiBxdWF0ZXJuaW9uIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuY2xhc3MgUXVhdGVybmlvbktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHtcblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIoIHJlc3VsdCApIHtcblxuXHRcdHJldHVybiBuZXcgUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7XG5cblx0fVxuXG59XG5cblF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ3F1YXRlcm5pb24nO1xuLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVyaXRlZFxuUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVMaW5lYXI7XG5RdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgVHJhY2sgdGhhdCBpbnRlcnBvbGF0ZXMgU3RyaW5nc1xuICovXG5jbGFzcyBTdHJpbmdLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ3N0cmluZyc7XG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGUgPSBBcnJheTtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhciA9IHVuZGVmaW5lZDtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIFRyYWNrIG9mIHZlY3RvcmVkIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuY2xhc3MgVmVjdG9yS2V5ZnJhbWVUcmFjayBleHRlbmRzIEtleWZyYW1lVHJhY2sge31cblxuVmVjdG9yS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICd2ZWN0b3InO1xuXG5jbGFzcyBBbmltYXRpb25DbGlwIHtcblxuXHRjb25zdHJ1Y3RvciggbmFtZSwgZHVyYXRpb24gPSAtIDEsIHRyYWNrcywgYmxlbmRNb2RlID0gTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlICkge1xuXG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLnRyYWNrcyA9IHRyYWNrcztcblx0XHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdFx0dGhpcy5ibGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdC8vIHRoaXMgbWVhbnMgaXQgc2hvdWxkIGZpZ3VyZSBvdXQgaXRzIGR1cmF0aW9uIGJ5IHNjYW5uaW5nIHRoZSB0cmFja3Ncblx0XHRpZiAoIHRoaXMuZHVyYXRpb24gPCAwICkge1xuXG5cdFx0XHR0aGlzLnJlc2V0RHVyYXRpb24oKTtcblxuXHRcdH1cblxuXHR9XG5cblxuXHRzdGF0aWMgcGFyc2UoIGpzb24gKSB7XG5cblx0XHRjb25zdCB0cmFja3MgPSBbXSxcblx0XHRcdGpzb25UcmFja3MgPSBqc29uLnRyYWNrcyxcblx0XHRcdGZyYW1lVGltZSA9IDEuMCAvICgganNvbi5mcHMgfHwgMS4wICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBqc29uVHJhY2tzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0dHJhY2tzLnB1c2goIHBhcnNlS2V5ZnJhbWVUcmFjaygganNvblRyYWNrc1sgaSBdICkuc2NhbGUoIGZyYW1lVGltZSApICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBjbGlwID0gbmV3IHRoaXMoIGpzb24ubmFtZSwganNvbi5kdXJhdGlvbiwgdHJhY2tzLCBqc29uLmJsZW5kTW9kZSApO1xuXHRcdGNsaXAudXVpZCA9IGpzb24udXVpZDtcblxuXHRcdHJldHVybiBjbGlwO1xuXG5cdH1cblxuXHRzdGF0aWMgdG9KU09OKCBjbGlwICkge1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gW10sXG5cdFx0XHRjbGlwVHJhY2tzID0gY2xpcC50cmFja3M7XG5cblx0XHRjb25zdCBqc29uID0ge1xuXG5cdFx0XHQnbmFtZSc6IGNsaXAubmFtZSxcblx0XHRcdCdkdXJhdGlvbic6IGNsaXAuZHVyYXRpb24sXG5cdFx0XHQndHJhY2tzJzogdHJhY2tzLFxuXHRcdFx0J3V1aWQnOiBjbGlwLnV1aWQsXG5cdFx0XHQnYmxlbmRNb2RlJzogY2xpcC5ibGVuZE1vZGVcblxuXHRcdH07XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBjbGlwVHJhY2tzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0dHJhY2tzLnB1c2goIEtleWZyYW1lVHJhY2sudG9KU09OKCBjbGlwVHJhY2tzWyBpIF0gKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpzb247XG5cblx0fVxuXG5cdHN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSggbmFtZSwgbW9ycGhUYXJnZXRTZXF1ZW5jZSwgZnBzLCBub0xvb3AgKSB7XG5cblx0XHRjb25zdCBudW1Nb3JwaFRhcmdldHMgPSBtb3JwaFRhcmdldFNlcXVlbmNlLmxlbmd0aDtcblx0XHRjb25zdCB0cmFja3MgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG51bU1vcnBoVGFyZ2V0czsgaSArKyApIHtcblxuXHRcdFx0bGV0IHRpbWVzID0gW107XG5cdFx0XHRsZXQgdmFsdWVzID0gW107XG5cblx0XHRcdHRpbWVzLnB1c2goXG5cdFx0XHRcdCggaSArIG51bU1vcnBoVGFyZ2V0cyAtIDEgKSAlIG51bU1vcnBoVGFyZ2V0cyxcblx0XHRcdFx0aSxcblx0XHRcdFx0KCBpICsgMSApICUgbnVtTW9ycGhUYXJnZXRzICk7XG5cblx0XHRcdHZhbHVlcy5wdXNoKCAwLCAxLCAwICk7XG5cblx0XHRcdGNvbnN0IG9yZGVyID0gQW5pbWF0aW9uVXRpbHMuZ2V0S2V5ZnJhbWVPcmRlciggdGltZXMgKTtcblx0XHRcdHRpbWVzID0gQW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkoIHRpbWVzLCAxLCBvcmRlciApO1xuXHRcdFx0dmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkoIHZhbHVlcywgMSwgb3JkZXIgKTtcblxuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBrZXkgYXQgdGhlIGZpcnN0IGZyYW1lLCBkdXBsaWNhdGUgaXQgYXMgdGhlXG5cdFx0XHQvLyBsYXN0IGZyYW1lIGFzIHdlbGwgZm9yIHBlcmZlY3QgbG9vcC5cblx0XHRcdGlmICggISBub0xvb3AgJiYgdGltZXNbIDAgXSA9PT0gMCApIHtcblxuXHRcdFx0XHR0aW1lcy5wdXNoKCBudW1Nb3JwaFRhcmdldHMgKTtcblx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlc1sgMCBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dHJhY2tzLnB1c2goXG5cdFx0XHRcdG5ldyBOdW1iZXJLZXlmcmFtZVRyYWNrKFxuXHRcdFx0XHRcdCcubW9ycGhUYXJnZXRJbmZsdWVuY2VzWycgKyBtb3JwaFRhcmdldFNlcXVlbmNlWyBpIF0ubmFtZSArICddJyxcblx0XHRcdFx0XHR0aW1lcywgdmFsdWVzXG5cdFx0XHRcdCkuc2NhbGUoIDEuMCAvIGZwcyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMoIG5hbWUsIC0gMSwgdHJhY2tzICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmaW5kQnlOYW1lKCBvYmplY3RPckNsaXBBcnJheSwgbmFtZSApIHtcblxuXHRcdGxldCBjbGlwQXJyYXkgPSBvYmplY3RPckNsaXBBcnJheTtcblxuXHRcdGlmICggISBBcnJheS5pc0FycmF5KCBvYmplY3RPckNsaXBBcnJheSApICkge1xuXG5cdFx0XHRjb25zdCBvID0gb2JqZWN0T3JDbGlwQXJyYXk7XG5cdFx0XHRjbGlwQXJyYXkgPSBvLmdlb21ldHJ5ICYmIG8uZ2VvbWV0cnkuYW5pbWF0aW9ucyB8fCBvLmFuaW1hdGlvbnM7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjbGlwQXJyYXkubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRpZiAoIGNsaXBBcnJheVsgaSBdLm5hbWUgPT09IG5hbWUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGNsaXBBcnJheVsgaSBdO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblxuXHR9XG5cblx0c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKCBtb3JwaFRhcmdldHMsIGZwcywgbm9Mb29wICkge1xuXG5cdFx0Y29uc3QgYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHMgPSB7fTtcblxuXHRcdC8vIHRlc3RlZCB3aXRoIGh0dHBzOi8vcmVnZXgxMDEuY29tLyBvbiB0cmljayBzZXF1ZW5jZXNcblx0XHQvLyBzdWNoIGZsYW1pbmdvX2ZseUFfMDAzLCBmbGFtaW5nb19ydW4xXzAwMywgY3JkZWF0aDAwNTlcblx0XHRjb25zdCBwYXR0ZXJuID0gL14oW1xcdy1dKj8pKFtcXGRdKykkLztcblxuXHRcdC8vIHNvcnQgbW9ycGggdGFyZ2V0IG5hbWVzIGludG8gYW5pbWF0aW9uIGdyb3VwcyBiYXNlZFxuXHRcdC8vIHBhdHRlcm5zIGxpa2UgV2Fsa18wMDEsIFdhbGtfMDAyLCBSdW5fMDAxLCBSdW5fMDAyXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXQgPSBtb3JwaFRhcmdldHNbIGkgXTtcblx0XHRcdGNvbnN0IHBhcnRzID0gbW9ycGhUYXJnZXQubmFtZS5tYXRjaCggcGF0dGVybiApO1xuXG5cdFx0XHRpZiAoIHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcnRzWyAxIF07XG5cblx0XHRcdFx0bGV0IGFuaW1hdGlvbk1vcnBoVGFyZ2V0cyA9IGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzWyBuYW1lIF07XG5cblx0XHRcdFx0aWYgKCAhIGFuaW1hdGlvbk1vcnBoVGFyZ2V0cyApIHtcblxuXHRcdFx0XHRcdGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzWyBuYW1lIF0gPSBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBbXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YW5pbWF0aW9uTW9ycGhUYXJnZXRzLnB1c2goIG1vcnBoVGFyZ2V0ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGNsaXBzID0gW107XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzICkge1xuXG5cdFx0XHRjbGlwcy5wdXNoKCB0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKCBuYW1lLCBhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1sgbmFtZSBdLCBmcHMsIG5vTG9vcCApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xpcHM7XG5cblx0fVxuXG5cdC8vIHBhcnNlIHRoZSBhbmltYXRpb24uaGllcmFyY2h5IGZvcm1hdFxuXHRzdGF0aWMgcGFyc2VBbmltYXRpb24oIGFuaW1hdGlvbiwgYm9uZXMgKSB7XG5cblx0XHRpZiAoICEgYW5pbWF0aW9uICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4nICk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGFkZE5vbmVtcHR5VHJhY2sgPSBmdW5jdGlvbiAoIHRyYWNrVHlwZSwgdHJhY2tOYW1lLCBhbmltYXRpb25LZXlzLCBwcm9wZXJ0eU5hbWUsIGRlc3RUcmFja3MgKSB7XG5cblx0XHRcdC8vIG9ubHkgcmV0dXJuIHRyYWNrIGlmIHRoZXJlIGFyZSBhY3R1YWxseSBrZXlzLlxuXHRcdFx0aWYgKCBhbmltYXRpb25LZXlzLmxlbmd0aCAhPT0gMCApIHtcblxuXHRcdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblxuXHRcdFx0XHRBbmltYXRpb25VdGlscy5mbGF0dGVuSlNPTiggYW5pbWF0aW9uS2V5cywgdGltZXMsIHZhbHVlcywgcHJvcGVydHlOYW1lICk7XG5cblx0XHRcdFx0Ly8gZW1wdHkga2V5cyBhcmUgZmlsdGVyZWQgb3V0LCBzbyBjaGVjayBhZ2FpblxuXHRcdFx0XHRpZiAoIHRpbWVzLmxlbmd0aCAhPT0gMCApIHtcblxuXHRcdFx0XHRcdGRlc3RUcmFja3MucHVzaCggbmV3IHRyYWNrVHlwZSggdHJhY2tOYW1lLCB0aW1lcywgdmFsdWVzICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHRjb25zdCB0cmFja3MgPSBbXTtcblxuXHRcdGNvbnN0IGNsaXBOYW1lID0gYW5pbWF0aW9uLm5hbWUgfHwgJ2RlZmF1bHQnO1xuXHRcdGNvbnN0IGZwcyA9IGFuaW1hdGlvbi5mcHMgfHwgMzA7XG5cdFx0Y29uc3QgYmxlbmRNb2RlID0gYW5pbWF0aW9uLmJsZW5kTW9kZTtcblxuXHRcdC8vIGF1dG9tYXRpYyBsZW5ndGggZGV0ZXJtaW5hdGlvbiBpbiBBbmltYXRpb25DbGlwLlxuXHRcdGxldCBkdXJhdGlvbiA9IGFuaW1hdGlvbi5sZW5ndGggfHwgLSAxO1xuXG5cdFx0Y29uc3QgaGllcmFyY2h5VHJhY2tzID0gYW5pbWF0aW9uLmhpZXJhcmNoeSB8fCBbXTtcblxuXHRcdGZvciAoIGxldCBoID0gMDsgaCA8IGhpZXJhcmNoeVRyYWNrcy5sZW5ndGg7IGggKysgKSB7XG5cblx0XHRcdGNvbnN0IGFuaW1hdGlvbktleXMgPSBoaWVyYXJjaHlUcmFja3NbIGggXS5rZXlzO1xuXG5cdFx0XHQvLyBza2lwIGVtcHR5IHRyYWNrc1xuXHRcdFx0aWYgKCAhIGFuaW1hdGlvbktleXMgfHwgYW5pbWF0aW9uS2V5cy5sZW5ndGggPT09IDAgKSBjb250aW51ZTtcblxuXHRcdFx0Ly8gcHJvY2VzcyBtb3JwaCB0YXJnZXRzXG5cdFx0XHRpZiAoIGFuaW1hdGlvbktleXNbIDAgXS5tb3JwaFRhcmdldHMgKSB7XG5cblx0XHRcdFx0Ly8gZmlndXJlIG91dCBhbGwgbW9ycGggdGFyZ2V0cyB1c2VkIGluIHRoaXMgdHJhY2tcblx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXROYW1lcyA9IHt9O1xuXG5cdFx0XHRcdGxldCBrO1xuXG5cdFx0XHRcdGZvciAoIGsgPSAwOyBrIDwgYW5pbWF0aW9uS2V5cy5sZW5ndGg7IGsgKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGFuaW1hdGlvbktleXNbIGsgXS5tb3JwaFRhcmdldHMgKSB7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBtID0gMDsgbSA8IGFuaW1hdGlvbktleXNbIGsgXS5tb3JwaFRhcmdldHMubGVuZ3RoOyBtICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdG1vcnBoVGFyZ2V0TmFtZXNbIGFuaW1hdGlvbktleXNbIGsgXS5tb3JwaFRhcmdldHNbIG0gXSBdID0gLSAxO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNyZWF0ZSBhIHRyYWNrIGZvciBlYWNoIG1vcnBoIHRhcmdldCB3aXRoIGFsbCB6ZXJvXG5cdFx0XHRcdC8vIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBleGNlcHQgZm9yIHRoZSBrZXlzIGluIHdoaWNoXG5cdFx0XHRcdC8vIHRoZSBtb3JwaFRhcmdldCBpcyBuYW1lZC5cblx0XHRcdFx0Zm9yICggY29uc3QgbW9ycGhUYXJnZXROYW1lIGluIG1vcnBoVGFyZ2V0TmFtZXMgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IG0gPSAwOyBtICE9PSBhbmltYXRpb25LZXlzWyBrIF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsgKysgbSApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uS2V5ID0gYW5pbWF0aW9uS2V5c1sgayBdO1xuXG5cdFx0XHRcdFx0XHR0aW1lcy5wdXNoKCBhbmltYXRpb25LZXkudGltZSApO1xuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goICggYW5pbWF0aW9uS2V5Lm1vcnBoVGFyZ2V0ID09PSBtb3JwaFRhcmdldE5hbWUgKSA/IDEgOiAwICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0cmFja3MucHVzaCggbmV3IE51bWJlcktleWZyYW1lVHJhY2soICcubW9ycGhUYXJnZXRJbmZsdWVuY2VbJyArIG1vcnBoVGFyZ2V0TmFtZSArICddJywgdGltZXMsIHZhbHVlcyApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGR1cmF0aW9uID0gbW9ycGhUYXJnZXROYW1lcy5sZW5ndGggKiAoIGZwcyB8fCAxLjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyAuLi5hc3N1bWUgc2tlbGV0YWwgYW5pbWF0aW9uXG5cblx0XHRcdFx0Y29uc3QgYm9uZU5hbWUgPSAnLmJvbmVzWycgKyBib25lc1sgaCBdLm5hbWUgKyAnXSc7XG5cblx0XHRcdFx0YWRkTm9uZW1wdHlUcmFjayhcblx0XHRcdFx0XHRWZWN0b3JLZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucG9zaXRpb24nLFxuXHRcdFx0XHRcdGFuaW1hdGlvbktleXMsICdwb3MnLCB0cmFja3MgKTtcblxuXHRcdFx0XHRhZGROb25lbXB0eVRyYWNrKFxuXHRcdFx0XHRcdFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucXVhdGVybmlvbicsXG5cdFx0XHRcdFx0YW5pbWF0aW9uS2V5cywgJ3JvdCcsIHRyYWNrcyApO1xuXG5cdFx0XHRcdGFkZE5vbmVtcHR5VHJhY2soXG5cdFx0XHRcdFx0VmVjdG9yS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnNjYWxlJyxcblx0XHRcdFx0XHRhbmltYXRpb25LZXlzLCAnc2NsJywgdHJhY2tzICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdHJhY2tzLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHRjb25zdCBjbGlwID0gbmV3IHRoaXMoIGNsaXBOYW1lLCBkdXJhdGlvbiwgdHJhY2tzLCBibGVuZE1vZGUgKTtcblxuXHRcdHJldHVybiBjbGlwO1xuXG5cdH1cblxuXHRyZXNldER1cmF0aW9uKCkge1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gdGhpcy50cmFja3M7XG5cdFx0bGV0IGR1cmF0aW9uID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IHRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IHRyYWNrID0gdGhpcy50cmFja3NbIGkgXTtcblxuXHRcdFx0ZHVyYXRpb24gPSBNYXRoLm1heCggZHVyYXRpb24sIHRyYWNrLnRpbWVzWyB0cmFjay50aW1lcy5sZW5ndGggLSAxIF0gKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmltKCkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHR0aGlzLnRyYWNrc1sgaSBdLnRyaW0oIDAsIHRoaXMuZHVyYXRpb24gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR2YWxpZGF0ZSgpIHtcblxuXHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHZhbGlkID0gdmFsaWQgJiYgdGhpcy50cmFja3NbIGkgXS52YWxpZGF0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXG5cdH1cblxuXHRvcHRpbWl6ZSgpIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy50cmFja3NbIGkgXS5vcHRpbWl6ZSgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHRyYWNrcy5wdXNoKCB0aGlzLnRyYWNrc1sgaSBdLmNsb25lKCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy5uYW1lLCB0aGlzLmR1cmF0aW9uLCB0cmFja3MsIHRoaXMuYmxlbmRNb2RlICk7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTiggdGhpcyApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBnZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKCB0eXBlTmFtZSApIHtcblxuXHRzd2l0Y2ggKCB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXG5cdFx0Y2FzZSAnc2NhbGFyJzpcblx0XHRjYXNlICdkb3VibGUnOlxuXHRcdGNhc2UgJ2Zsb2F0Jzpcblx0XHRjYXNlICdudW1iZXInOlxuXHRcdGNhc2UgJ2ludGVnZXInOlxuXG5cdFx0XHRyZXR1cm4gTnVtYmVyS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ3ZlY3Rvcic6XG5cdFx0Y2FzZSAndmVjdG9yMic6XG5cdFx0Y2FzZSAndmVjdG9yMyc6XG5cdFx0Y2FzZSAndmVjdG9yNCc6XG5cblx0XHRcdHJldHVybiBWZWN0b3JLZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAnY29sb3InOlxuXG5cdFx0XHRyZXR1cm4gQ29sb3JLZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAncXVhdGVybmlvbic6XG5cblx0XHRcdHJldHVybiBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXG5cdFx0XHRyZXR1cm4gQm9vbGVhbktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICdzdHJpbmcnOlxuXG5cdFx0XHRyZXR1cm4gU3RyaW5nS2V5ZnJhbWVUcmFjaztcblxuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICcgKyB0eXBlTmFtZSApO1xuXG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5ZnJhbWVUcmFjaygganNvbiApIHtcblxuXHRpZiAoIGpzb24udHlwZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UnICk7XG5cblx0fVxuXG5cdGNvbnN0IHRyYWNrVHlwZSA9IGdldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWUoIGpzb24udHlwZSApO1xuXG5cdGlmICgganNvbi50aW1lcyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0Y29uc3QgdGltZXMgPSBbXSwgdmFsdWVzID0gW107XG5cblx0XHRBbmltYXRpb25VdGlscy5mbGF0dGVuSlNPTigganNvbi5rZXlzLCB0aW1lcywgdmFsdWVzLCAndmFsdWUnICk7XG5cblx0XHRqc29uLnRpbWVzID0gdGltZXM7XG5cdFx0anNvbi52YWx1ZXMgPSB2YWx1ZXM7XG5cblx0fVxuXG5cdC8vIGRlcml2ZWQgY2xhc3NlcyBjYW4gZGVmaW5lIGEgc3RhdGljIHBhcnNlIG1ldGhvZFxuXHRpZiAoIHRyYWNrVHlwZS5wYXJzZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0cmV0dXJuIHRyYWNrVHlwZS5wYXJzZSgganNvbiApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBieSBkZWZhdWx0LCB3ZSBhc3N1bWUgYSBjb25zdHJ1Y3RvciBjb21wYXRpYmxlIHdpdGggdGhlIGJhc2Vcblx0XHRyZXR1cm4gbmV3IHRyYWNrVHlwZSgganNvbi5uYW1lLCBqc29uLnRpbWVzLCBqc29uLnZhbHVlcywganNvbi5pbnRlcnBvbGF0aW9uICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IENhY2hlID0ge1xuXG5cdGVuYWJsZWQ6IGZhbHNlLFxuXG5cdGZpbGVzOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uICgga2V5LCBmaWxlICkge1xuXG5cdFx0aWYgKCB0aGlzLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0Ly8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdBZGRpbmcga2V5OicsIGtleSApO1xuXG5cdFx0dGhpcy5maWxlc1sga2V5IF0gPSBmaWxlO1xuXG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbiAoIGtleSApIHtcblxuXHRcdGlmICggdGhpcy5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQ2FjaGUnLCAnQ2hlY2tpbmcga2V5OicsIGtleSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsZXNbIGtleSBdO1xuXG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiAoIGtleSApIHtcblxuXHRcdGRlbGV0ZSB0aGlzLmZpbGVzWyBrZXkgXTtcblxuXHR9LFxuXG5cdGNsZWFyOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLmZpbGVzID0ge307XG5cblx0fVxuXG59O1xuXG5jbGFzcyBMb2FkaW5nTWFuYWdlciB7XG5cblx0Y29uc3RydWN0b3IoIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGxldCBpc0xvYWRpbmcgPSBmYWxzZTtcblx0XHRsZXQgaXRlbXNMb2FkZWQgPSAwO1xuXHRcdGxldCBpdGVtc1RvdGFsID0gMDtcblx0XHRsZXQgdXJsTW9kaWZpZXIgPSB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaGFuZGxlcnMgPSBbXTtcblxuXHRcdC8vIFJlZmVyIHRvICM1Njg5IGZvciB0aGUgcmVhc29uIHdoeSB3ZSBkb24ndCBzZXQgLm9uU3RhcnRcblx0XHQvLyBpbiB0aGUgY29uc3RydWN0b3JcblxuXHRcdHRoaXMub25TdGFydCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLm9uTG9hZCA9IG9uTG9hZDtcblx0XHR0aGlzLm9uUHJvZ3Jlc3MgPSBvblByb2dyZXNzO1xuXHRcdHRoaXMub25FcnJvciA9IG9uRXJyb3I7XG5cblx0XHR0aGlzLml0ZW1TdGFydCA9IGZ1bmN0aW9uICggdXJsICkge1xuXG5cdFx0XHRpdGVtc1RvdGFsICsrO1xuXG5cdFx0XHRpZiAoIGlzTG9hZGluZyA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5vblN0YXJ0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRzY29wZS5vblN0YXJ0KCB1cmwsIGl0ZW1zTG9hZGVkLCBpdGVtc1RvdGFsICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlzTG9hZGluZyA9IHRydWU7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5pdGVtRW5kID0gZnVuY3Rpb24gKCB1cmwgKSB7XG5cblx0XHRcdGl0ZW1zTG9hZGVkICsrO1xuXG5cdFx0XHRpZiAoIHNjb3BlLm9uUHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRzY29wZS5vblByb2dyZXNzKCB1cmwsIGl0ZW1zTG9hZGVkLCBpdGVtc1RvdGFsICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpdGVtc0xvYWRlZCA9PT0gaXRlbXNUb3RhbCApIHtcblxuXHRcdFx0XHRpc0xvYWRpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIHNjb3BlLm9uTG9hZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0c2NvcGUub25Mb2FkKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5pdGVtRXJyb3IgPSBmdW5jdGlvbiAoIHVybCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5vbkVycm9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0c2NvcGUub25FcnJvciggdXJsICk7XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0aGlzLnJlc29sdmVVUkwgPSBmdW5jdGlvbiAoIHVybCApIHtcblxuXHRcdFx0aWYgKCB1cmxNb2RpZmllciApIHtcblxuXHRcdFx0XHRyZXR1cm4gdXJsTW9kaWZpZXIoIHVybCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1cmw7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRVUkxNb2RpZmllciA9IGZ1bmN0aW9uICggdHJhbnNmb3JtICkge1xuXG5cdFx0XHR1cmxNb2RpZmllciA9IHRyYW5zZm9ybTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5hZGRIYW5kbGVyID0gZnVuY3Rpb24gKCByZWdleCwgbG9hZGVyICkge1xuXG5cdFx0XHRoYW5kbGVycy5wdXNoKCByZWdleCwgbG9hZGVyICk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMucmVtb3ZlSGFuZGxlciA9IGZ1bmN0aW9uICggcmVnZXggKSB7XG5cblx0XHRcdGNvbnN0IGluZGV4ID0gaGFuZGxlcnMuaW5kZXhPZiggcmVnZXggKTtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gLSAxICkge1xuXG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaW5kZXgsIDIgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEhhbmRsZXIgPSBmdW5jdGlvbiAoIGZpbGUgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMiApIHtcblxuXHRcdFx0XHRjb25zdCByZWdleCA9IGhhbmRsZXJzWyBpIF07XG5cdFx0XHRcdGNvbnN0IGxvYWRlciA9IGhhbmRsZXJzWyBpICsgMSBdO1xuXG5cdFx0XHRcdGlmICggcmVnZXguZ2xvYmFsICkgcmVnZXgubGFzdEluZGV4ID0gMDsgLy8gc2VlICMxNzkyMFxuXG5cdFx0XHRcdGlmICggcmVnZXgudGVzdCggZmlsZSApICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIGxvYWRlcjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9O1xuXG5cdH1cblxufVxuXG5jb25zdCBEZWZhdWx0TG9hZGluZ01hbmFnZXIgPSBuZXcgTG9hZGluZ01hbmFnZXIoKTtcblxuY2xhc3MgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0gdW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyO1xuXG5cdFx0dGhpcy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xuXHRcdHRoaXMud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG5cdFx0dGhpcy5wYXRoID0gJyc7XG5cdFx0dGhpcy5yZXNvdXJjZVBhdGggPSAnJztcblx0XHR0aGlzLnJlcXVlc3RIZWFkZXIgPSB7fTtcblxuXHR9XG5cblx0bG9hZCggLyogdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKi8gKSB7fVxuXG5cdGxvYWRBc3luYyggdXJsLCBvblByb2dyZXNzICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKCBmdW5jdGlvbiAoIHJlc29sdmUsIHJlamVjdCApIHtcblxuXHRcdFx0c2NvcGUubG9hZCggdXJsLCByZXNvbHZlLCBvblByb2dyZXNzLCByZWplY3QgKTtcblxuXHRcdH0gKTtcblxuXHR9XG5cblx0cGFyc2UoIC8qIGRhdGEgKi8gKSB7fVxuXG5cdHNldENyb3NzT3JpZ2luKCBjcm9zc09yaWdpbiApIHtcblxuXHRcdHRoaXMuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0V2l0aENyZWRlbnRpYWxzKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMud2l0aENyZWRlbnRpYWxzID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFBhdGgoIHBhdGggKSB7XG5cblx0XHR0aGlzLnBhdGggPSBwYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRSZXNvdXJjZVBhdGgoIHJlc291cmNlUGF0aCApIHtcblxuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gcmVzb3VyY2VQYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRSZXF1ZXN0SGVhZGVyKCByZXF1ZXN0SGVhZGVyICkge1xuXG5cdFx0dGhpcy5yZXF1ZXN0SGVhZGVyID0gcmVxdWVzdEhlYWRlcjtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY29uc3QgbG9hZGluZyA9IHt9O1xuXG5jbGFzcyBGaWxlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0aWYgKCB1cmwgPT09IHVuZGVmaW5lZCApIHVybCA9ICcnO1xuXG5cdFx0aWYgKCB0aGlzLnBhdGggIT09IHVuZGVmaW5lZCApIHVybCA9IHRoaXMucGF0aCArIHVybDtcblxuXHRcdHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTtcblxuXHRcdGNvbnN0IGNhY2hlZCA9IENhY2hlLmdldCggdXJsICk7XG5cblx0XHRpZiAoIGNhY2hlZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTtcblxuXHRcdFx0c2V0VGltZW91dCggKCkgPT4ge1xuXG5cdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTtcblxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHRcdH0sIDAgKTtcblxuXHRcdFx0cmV0dXJuIGNhY2hlZDtcblxuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHJlcXVlc3QgaXMgZHVwbGljYXRlXG5cblx0XHRpZiAoIGxvYWRpbmdbIHVybCBdICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGxvYWRpbmdbIHVybCBdLnB1c2goIHtcblxuXHRcdFx0XHRvbkxvYWQ6IG9uTG9hZCxcblx0XHRcdFx0b25Qcm9ncmVzczogb25Qcm9ncmVzcyxcblx0XHRcdFx0b25FcnJvcjogb25FcnJvclxuXG5cdFx0XHR9ICk7XG5cblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpc2UgYXJyYXkgZm9yIGR1cGxpY2F0ZSByZXF1ZXN0c1xuXHRcdGxvYWRpbmdbIHVybCBdID0gW107XG5cblx0XHRsb2FkaW5nWyB1cmwgXS5wdXNoKCB7XG5cdFx0XHRvbkxvYWQ6IG9uTG9hZCxcblx0XHRcdG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsXG5cdFx0XHRvbkVycm9yOiBvbkVycm9yLFxuXHRcdH0gKTtcblxuXHRcdC8vIGNyZWF0ZSByZXF1ZXN0XG5cdFx0Y29uc3QgcmVxID0gbmV3IFJlcXVlc3QoIHVybCwge1xuXHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnMoIHRoaXMucmVxdWVzdEhlYWRlciApLFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyxcblx0XHRcdC8vIEFuIGFib3J0IGNvbnRyb2xsZXIgY291bGQgYmUgYWRkZWQgd2l0aGluIGEgZnV0dXJlIFBSXG5cdFx0fSApO1xuXG5cdFx0Ly8gcmVjb3JkIHN0YXRlcyAoIGF2b2lkIGRhdGEgcmFjZSApXG5cdFx0Y29uc3QgbWltZVR5cGUgPSB0aGlzLm1pbWVUeXBlO1xuXHRcdGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMucmVzcG9uc2VUeXBlO1xuXG5cdFx0Ly8gc3RhcnQgdGhlIGZldGNoXG5cdFx0ZmV0Y2goIHJlcSApXG5cdFx0XHQudGhlbiggcmVzcG9uc2UgPT4ge1xuXG5cdFx0XHRcdGlmICggcmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAwICkge1xuXG5cdFx0XHRcdFx0Ly8gU29tZSBicm93c2VycyByZXR1cm4gSFRUUCBTdGF0dXMgMCB3aGVuIHVzaW5nIG5vbi1odHRwIHByb3RvY29sXG5cdFx0XHRcdFx0Ly8gZS5nLiAnZmlsZTovLycgb3IgJ2RhdGE6Ly8nLiBIYW5kbGUgYXMgc3VjY2Vzcy5cblxuXHRcdFx0XHRcdGlmICggcmVzcG9uc2Uuc3RhdHVzID09PSAwICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLicgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAndW5kZWZpbmVkJyB8fCByZXNwb25zZS5ib2R5LmdldFJlYWRlciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBjYWxsYmFja3MgPSBsb2FkaW5nWyB1cmwgXTtcblx0XHRcdFx0XHRjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXNwb25zZS5oZWFkZXJzLmdldCggJ0NvbnRlbnQtTGVuZ3RoJyApO1xuXHRcdFx0XHRcdGNvbnN0IHRvdGFsID0gY29udGVudExlbmd0aCA/IHBhcnNlSW50KCBjb250ZW50TGVuZ3RoICkgOiAwO1xuXHRcdFx0XHRcdGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPT0gMDtcblx0XHRcdFx0XHRsZXQgbG9hZGVkID0gMDtcblxuXHRcdFx0XHRcdC8vIHBlcmlvZGljYWxseSByZWFkIGRhdGEgaW50byB0aGUgbmV3IHN0cmVhbSB0cmFja2luZyB3aGlsZSBkb3dubG9hZCBwcm9ncmVzc1xuXHRcdFx0XHRcdGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSgge1xuXHRcdFx0XHRcdFx0c3RhcnQoIGNvbnRyb2xsZXIgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVhZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiByZWFkRGF0YSgpIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5yZWFkKCkudGhlbiggKCB7IGRvbmUsIHZhbHVlIH0gKSA9PiB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZG9uZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudCggJ3Byb2dyZXNzJywgeyBsZW5ndGhDb21wdXRhYmxlLCBsb2FkZWQsIHRvdGFsIH0gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tzWyBpIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjay5vblByb2dyZXNzICkgY2FsbGJhY2sub25Qcm9ncmVzcyggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5lbnF1ZXVlKCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZWFkRGF0YSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKCBzdHJlYW0gKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhyb3cgRXJyb3IoIGBmZXRjaCBmb3IgXCIke3Jlc3BvbnNlLnVybH1cIiByZXNwb25kZWQgd2l0aCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IClcblx0XHRcdC50aGVuKCByZXNwb25zZSA9PiB7XG5cblx0XHRcdFx0c3dpdGNoICggcmVzcG9uc2VUeXBlICkge1xuXG5cdFx0XHRcdFx0Y2FzZSAnYXJyYXlidWZmZXInOlxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcblxuXHRcdFx0XHRcdGNhc2UgJ2Jsb2InOlxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xuXG5cdFx0XHRcdFx0Y2FzZSAnZG9jdW1lbnQnOlxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpXG5cdFx0XHRcdFx0XHRcdC50aGVuKCB0ZXh0ID0+IHtcblxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyggdGV4dCwgbWltZVR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRjYXNlICdqc29uJzpcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRcdGlmICggbWltZVR5cGUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIHNuaWZmIGVuY29kaW5nXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlID0gL2NoYXJzZXQ9XCI/KFteO1wiXFxzXSopXCI/L2k7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGV4ZWMgPSByZS5leGVjKCBtaW1lVHlwZSApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IGV4ZWMgJiYgZXhlY1sgMSBdID8gZXhlY1sgMSBdLnRvTG93ZXJDYXNlKCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoIGxhYmVsICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpLnRoZW4oIGFiID0+IGRlY29kZXIuZGVjb2RlKCBhYiApICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gKVxuXHRcdFx0LnRoZW4oIGRhdGEgPT4ge1xuXG5cdFx0XHRcdC8vIEFkZCB0byBjYWNoZSBvbmx5IG9uIEhUVFAgc3VjY2Vzcywgc28gdGhhdCB3ZSBkbyBub3QgY2FjaGVcblx0XHRcdFx0Ly8gZXJyb3IgcmVzcG9uc2UgYm9kaWVzIGFzIHByb3BlciByZXNwb25zZXMgdG8gcmVxdWVzdHMuXG5cdFx0XHRcdENhY2hlLmFkZCggdXJsLCBkYXRhICk7XG5cblx0XHRcdFx0Y29uc3QgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJsIF07XG5cdFx0XHRcdGRlbGV0ZSBsb2FkaW5nWyB1cmwgXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja3NbIGkgXTtcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrLm9uTG9hZCApIGNhbGxiYWNrLm9uTG9hZCggZGF0YSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSApXG5cdFx0XHQuY2F0Y2goIGVyciA9PiB7XG5cblx0XHRcdFx0Ly8gQWJvcnQgZXJyb3JzIGFuZCBvdGhlciBlcnJvcnMgYXJlIGhhbmRsZWQgdGhlIHNhbWVcblxuXHRcdFx0XHRjb25zdCBjYWxsYmFja3MgPSBsb2FkaW5nWyB1cmwgXTtcblxuXHRcdFx0XHRpZiAoIGNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2hlbiBvbkxvYWQgd2FzIGNhbGxlZCBhbmQgdXJsIHdhcyBkZWxldGVkIGluIGBsb2FkaW5nYFxuXHRcdFx0XHRcdHRoaXMubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXHRcdFx0XHRcdHRocm93IGVycjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGxvYWRpbmdbIHVybCBdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1sgaSBdO1xuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sub25FcnJvciApIGNhbGxiYWNrLm9uRXJyb3IoIGVyciApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblxuXHRcdFx0fSApXG5cdFx0XHQuZmluYWxseSggKCkgPT4ge1xuXG5cdFx0XHRcdHRoaXMubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdFx0fSApO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0fVxuXG5cdHNldFJlc3BvbnNlVHlwZSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnJlc3BvbnNlVHlwZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRNaW1lVHlwZSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLm1pbWVUeXBlID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIEFuaW1hdGlvbkxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTtcblx0XHRsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHRoaXMucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHRoaXMud2l0aENyZWRlbnRpYWxzICk7XG5cdFx0bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkge1xuXG5cdFx0XHR0cnkge1xuXG5cdFx0XHRcdG9uTG9hZCggc2NvcGUucGFyc2UoIEpTT04ucGFyc2UoIHRleHQgKSApICk7XG5cblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdGlmICggb25FcnJvciApIHtcblxuXHRcdFx0XHRcdG9uRXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7XG5cblx0XHRcdH1cblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHR9XG5cblx0cGFyc2UoIGpzb24gKSB7XG5cblx0XHRjb25zdCBhbmltYXRpb25zID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY2xpcCA9IEFuaW1hdGlvbkNsaXAucGFyc2UoIGpzb25bIGkgXSApO1xuXG5cdFx0XHRhbmltYXRpb25zLnB1c2goIGNsaXAgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBhbmltYXRpb25zO1xuXG5cdH1cblxufVxuXG4vKipcbiAqIEFic3RyYWN0IEJhc2UgY2xhc3MgdG8gYmxvY2sgYmFzZWQgdGV4dHVyZXMgbG9hZGVyIChkZHMsIHB2ciwgLi4uKVxuICpcbiAqIFN1YiBjbGFzc2VzIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBwYXJzZSgpIG1ldGhvZCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gbG9hZCgpLlxuICovXG5cbmNsYXNzIENvbXByZXNzZWRUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgaW1hZ2VzID0gW107XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gbmV3IENvbXByZXNzZWRUZXh0dXJlKCk7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXHRcdGxvYWRlci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggdGhpcy5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggc2NvcGUud2l0aENyZWRlbnRpYWxzICk7XG5cblx0XHRsZXQgbG9hZGVkID0gMDtcblxuXHRcdGZ1bmN0aW9uIGxvYWRUZXh0dXJlKCBpICkge1xuXG5cdFx0XHRsb2FkZXIubG9hZCggdXJsWyBpIF0sIGZ1bmN0aW9uICggYnVmZmVyICkge1xuXG5cdFx0XHRcdGNvbnN0IHRleERhdGFzID0gc2NvcGUucGFyc2UoIGJ1ZmZlciwgdHJ1ZSApO1xuXG5cdFx0XHRcdGltYWdlc1sgaSBdID0ge1xuXHRcdFx0XHRcdHdpZHRoOiB0ZXhEYXRhcy53aWR0aCxcblx0XHRcdFx0XHRoZWlnaHQ6IHRleERhdGFzLmhlaWdodCxcblx0XHRcdFx0XHRmb3JtYXQ6IHRleERhdGFzLmZvcm1hdCxcblx0XHRcdFx0XHRtaXBtYXBzOiB0ZXhEYXRhcy5taXBtYXBzXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0bG9hZGVkICs9IDE7XG5cblx0XHRcdFx0aWYgKCBsb2FkZWQgPT09IDYgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHRleERhdGFzLm1pcG1hcENvdW50ID09PSAxICkgdGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlID0gaW1hZ2VzO1xuXHRcdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0O1xuXHRcdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKCBvbkxvYWQgKSBvbkxvYWQoIHRleHR1cmUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHRcdH1cblxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdXJsICkgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB1cmwubGVuZ3RoOyBpIDwgaWw7ICsrIGkgKSB7XG5cblx0XHRcdFx0bG9hZFRleHR1cmUoIGkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gY29tcHJlc3NlZCBjdWJlbWFwIHRleHR1cmUgc3RvcmVkIGluIGEgc2luZ2xlIEREUyBmaWxlXG5cblx0XHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggYnVmZmVyICkge1xuXG5cdFx0XHRcdGNvbnN0IHRleERhdGFzID0gc2NvcGUucGFyc2UoIGJ1ZmZlciwgdHJ1ZSApO1xuXG5cdFx0XHRcdGlmICggdGV4RGF0YXMuaXNDdWJlbWFwICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgZmFjZXMgPSB0ZXhEYXRhcy5taXBtYXBzLmxlbmd0aCAvIHRleERhdGFzLm1pcG1hcENvdW50O1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGYgPSAwOyBmIDwgZmFjZXM7IGYgKysgKSB7XG5cblx0XHRcdFx0XHRcdGltYWdlc1sgZiBdID0geyBtaXBtYXBzOiBbXSB9O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0ZXhEYXRhcy5taXBtYXBDb3VudDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRpbWFnZXNbIGYgXS5taXBtYXBzLnB1c2goIHRleERhdGFzLm1pcG1hcHNbIGYgKiB0ZXhEYXRhcy5taXBtYXBDb3VudCArIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbIGYgXS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7XG5cdFx0XHRcdFx0XHRcdGltYWdlc1sgZiBdLndpZHRoID0gdGV4RGF0YXMud2lkdGg7XG5cdFx0XHRcdFx0XHRcdGltYWdlc1sgZiBdLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGV4dHVyZS5pbWFnZSA9IGltYWdlcztcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5pbWFnZS53aWR0aCA9IHRleERhdGFzLndpZHRoO1xuXHRcdFx0XHRcdHRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gdGV4RGF0YXMuaGVpZ2h0O1xuXHRcdFx0XHRcdHRleHR1cmUubWlwbWFwcyA9IHRleERhdGFzLm1pcG1hcHM7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdGV4RGF0YXMubWlwbWFwQ291bnQgPT09IDEgKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7XG5cdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7XG5cblx0XHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxufVxuXG5jbGFzcyBJbWFnZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGlmICggdGhpcy5wYXRoICE9PSB1bmRlZmluZWQgKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7XG5cblx0XHR1cmwgPSB0aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCggdXJsICk7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBjYWNoZWQgPSBDYWNoZS5nZXQoIHVybCApO1xuXG5cdFx0aWYgKCBjYWNoZWQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCApO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0aWYgKCBvbkxvYWQgKSBvbkxvYWQoIGNhY2hlZCApO1xuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHRcdH0sIDAgKTtcblxuXHRcdFx0cmV0dXJuIGNhY2hlZDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGltYWdlID0gY3JlYXRlRWxlbWVudE5TKCAnaW1nJyApO1xuXG5cdFx0ZnVuY3Rpb24gb25JbWFnZUxvYWQoKSB7XG5cblx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG5cblx0XHRcdENhY2hlLmFkZCggdXJsLCB0aGlzICk7XG5cblx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCB0aGlzICk7XG5cblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvbkltYWdlRXJyb3IoIGV2ZW50ICkge1xuXG5cdFx0XHRyZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG5cdFx0XHRpZiAoIG9uRXJyb3IgKSBvbkVycm9yKCBldmVudCApO1xuXG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSB7XG5cblx0XHRcdGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdsb2FkJywgb25JbWFnZUxvYWQsIGZhbHNlICk7XG5cdFx0XHRpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZXJyb3InLCBvbkltYWdlRXJyb3IsIGZhbHNlICk7XG5cblx0XHR9XG5cblx0XHRpbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2FkLCBmYWxzZSApO1xuXHRcdGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoICdlcnJvcicsIG9uSW1hZ2VFcnJvciwgZmFsc2UgKTtcblxuXHRcdGlmICggdXJsLnN1YnN0ciggMCwgNSApICE9PSAnZGF0YTonICkge1xuXG5cdFx0XHRpZiAoIHRoaXMuY3Jvc3NPcmlnaW4gIT09IHVuZGVmaW5lZCApIGltYWdlLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcblxuXHRcdH1cblxuXHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTtcblxuXHRcdGltYWdlLnNyYyA9IHVybDtcblxuXHRcdHJldHVybiBpbWFnZTtcblxuXHR9XG5cbn1cblxuY2xhc3MgQ3ViZVRleHR1cmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJscywgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTtcblx0XHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTtcblx0XHRsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7XG5cblx0XHRsZXQgbG9hZGVkID0gMDtcblxuXHRcdGZ1bmN0aW9uIGxvYWRUZXh0dXJlKCBpICkge1xuXG5cdFx0XHRsb2FkZXIubG9hZCggdXJsc1sgaSBdLCBmdW5jdGlvbiAoIGltYWdlICkge1xuXG5cdFx0XHRcdHRleHR1cmUuaW1hZ2VzWyBpIF0gPSBpbWFnZTtcblxuXHRcdFx0XHRsb2FkZWQgKys7XG5cblx0XHRcdFx0aWYgKCBsb2FkZWQgPT09IDYgKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LCB1bmRlZmluZWQsIG9uRXJyb3IgKTtcblxuXHRcdH1cblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyArKyBpICkge1xuXG5cdFx0XHRsb2FkVGV4dHVyZSggaSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cblx0fVxuXG59XG5cbi8qKlxuICogQWJzdHJhY3QgQmFzZSBjbGFzcyB0byBsb2FkIGdlbmVyaWMgYmluYXJ5IHRleHR1cmVzIGZvcm1hdHMgKHJnYmUsIGhkciwgLi4uKVxuICpcbiAqIFN1YiBjbGFzc2VzIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBwYXJzZSgpIG1ldGhvZCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gbG9hZCgpLlxuICovXG5cbmNsYXNzIERhdGFUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZSgpO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggdGhpcy5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHNjb3BlLndpdGhDcmVkZW50aWFscyApO1xuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggYnVmZmVyICkge1xuXG5cdFx0XHRjb25zdCB0ZXhEYXRhID0gc2NvcGUucGFyc2UoIGJ1ZmZlciApO1xuXG5cdFx0XHRpZiAoICEgdGV4RGF0YSApIHJldHVybjtcblxuXHRcdFx0aWYgKCB0ZXhEYXRhLmltYWdlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS5pbWFnZSA9IHRleERhdGEuaW1hZ2U7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHRleERhdGEuZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhLndpZHRoO1xuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGEuaGVpZ2h0O1xuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLmRhdGEgPSB0ZXhEYXRhLmRhdGE7XG5cblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZS53cmFwUyA9IHRleERhdGEud3JhcFMgIT09IHVuZGVmaW5lZCA/IHRleERhdGEud3JhcFMgOiBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuXHRcdFx0dGV4dHVyZS53cmFwVCA9IHRleERhdGEud3JhcFQgIT09IHVuZGVmaW5lZCA/IHRleERhdGEud3JhcFQgOiBDbGFtcFRvRWRnZVdyYXBwaW5nO1xuXG5cdFx0XHR0ZXh0dXJlLm1hZ0ZpbHRlciA9IHRleERhdGEubWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLm1hZ0ZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gdGV4RGF0YS5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IHRleERhdGEubWluRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXG5cdFx0XHR0ZXh0dXJlLmFuaXNvdHJvcHkgPSB0ZXhEYXRhLmFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCA/IHRleERhdGEuYW5pc290cm9weSA6IDE7XG5cblx0XHRcdGlmICggdGV4RGF0YS5lbmNvZGluZyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUuZW5jb2RpbmcgPSB0ZXhEYXRhLmVuY29kaW5nO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4RGF0YS5mbGlwWSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUuZmxpcFkgPSB0ZXhEYXRhLmZsaXBZO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4RGF0YS5mb3JtYXQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGEuZm9ybWF0O1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4RGF0YS50eXBlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS50eXBlID0gdGV4RGF0YS50eXBlO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4RGF0YS5taXBtYXBzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YS5taXBtYXBzO1xuXHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhck1pcG1hcExpbmVhckZpbHRlcjsgLy8gcHJlc3VtYWJseS4uLlxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4RGF0YS5taXBtYXBDb3VudCA9PT0gMSApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEuZ2VuZXJhdGVNaXBtYXBzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSB0ZXhEYXRhLmdlbmVyYXRlTWlwbWFwcztcblxuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKCBvbkxvYWQgKSBvbkxvYWQoIHRleHR1cmUsIHRleERhdGEgKTtcblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cblx0fVxuXG59XG5cbmNsYXNzIFRleHR1cmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUoKTtcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXG5cdFx0bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBpbWFnZSApIHtcblxuXHRcdFx0dGV4dHVyZS5pbWFnZSA9IGltYWdlO1xuXHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdGlmICggb25Mb2FkICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0b25Mb2FkKCB0ZXh0dXJlICk7XG5cblx0XHRcdH1cblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxufVxuXG5jbGFzcyBMaWdodCBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggY29sb3IsIGludGVuc2l0eSA9IDEgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xpZ2h0JztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIGNvbG9yICk7XG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHQvLyBFbXB0eSBoZXJlIGluIGJhc2UgY2xhc3M7IHNvbWUgc3ViY2xhc3NlcyBvdmVycmlkZS5cblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXHRcdHRoaXMuaW50ZW5zaXR5ID0gc291cmNlLmludGVuc2l0eTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRkYXRhLm9iamVjdC5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7XG5cdFx0ZGF0YS5vYmplY3QuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XG5cblx0XHRpZiAoIHRoaXMuZ3JvdW5kQ29sb3IgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0Lmdyb3VuZENvbG9yID0gdGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKTtcblxuXHRcdGlmICggdGhpcy5kaXN0YW5jZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QuZGlzdGFuY2UgPSB0aGlzLmRpc3RhbmNlO1xuXHRcdGlmICggdGhpcy5hbmdsZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QuYW5nbGUgPSB0aGlzLmFuZ2xlO1xuXHRcdGlmICggdGhpcy5kZWNheSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QuZGVjYXkgPSB0aGlzLmRlY2F5O1xuXHRcdGlmICggdGhpcy5wZW51bWJyYSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QucGVudW1icmEgPSB0aGlzLnBlbnVtYnJhO1xuXG5cdFx0aWYgKCB0aGlzLnNoYWRvdyAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3Quc2hhZG93ID0gdGhpcy5zaGFkb3cudG9KU09OKCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuTGlnaHQucHJvdG90eXBlLmlzTGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBIZW1pc3BoZXJlTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIHNreUNvbG9yLCBncm91bmRDb2xvciwgaW50ZW5zaXR5ICkge1xuXG5cdFx0c3VwZXIoIHNreUNvbG9yLCBpbnRlbnNpdHkgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdIZW1pc3BoZXJlTGlnaHQnO1xuXG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KCBPYmplY3QzRC5EZWZhdWx0VXAgKTtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0dGhpcy5ncm91bmRDb2xvciA9IG5ldyBDb2xvciggZ3JvdW5kQ29sb3IgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0TGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7XG5cblx0XHR0aGlzLmdyb3VuZENvbG9yLmNvcHkoIHNvdXJjZS5ncm91bmRDb2xvciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkhlbWlzcGhlcmVMaWdodC5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHQgPSB0cnVlO1xuXG5jb25zdCBfcHJvalNjcmVlbk1hdHJpeCQxID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX2xpZ2h0UG9zaXRpb25Xb3JsZCQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2xvb2tUYXJnZXQkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTGlnaHRTaGFkb3cge1xuXG5cdGNvbnN0cnVjdG9yKCBjYW1lcmEgKSB7XG5cblx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblxuXHRcdHRoaXMuYmlhcyA9IDA7XG5cdFx0dGhpcy5ub3JtYWxCaWFzID0gMDtcblx0XHR0aGlzLnJhZGl1cyA9IDE7XG5cdFx0dGhpcy5ibHVyU2FtcGxlcyA9IDg7XG5cblx0XHR0aGlzLm1hcFNpemUgPSBuZXcgVmVjdG9yMiggNTEyLCA1MTIgKTtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLm1hcFBhc3MgPSBudWxsO1xuXHRcdHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5fZnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XG5cdFx0dGhpcy5fZnJhbWVFeHRlbnRzID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblxuXHRcdHRoaXMuX3ZpZXdwb3J0Q291bnQgPSAxO1xuXG5cdFx0dGhpcy5fdmlld3BvcnRzID0gW1xuXG5cdFx0XHRuZXcgVmVjdG9yNCggMCwgMCwgMSwgMSApXG5cblx0XHRdO1xuXG5cdH1cblxuXHRnZXRWaWV3cG9ydENvdW50KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnQ7XG5cblx0fVxuXG5cdGdldEZydXN0dW0oKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZnJ1c3R1bTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMoIGxpZ2h0ICkge1xuXG5cdFx0Y29uc3Qgc2hhZG93Q2FtZXJhID0gdGhpcy5jYW1lcmE7XG5cdFx0Y29uc3Qgc2hhZG93TWF0cml4ID0gdGhpcy5tYXRyaXg7XG5cblx0XHRfbGlnaHRQb3NpdGlvbldvcmxkJDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdHNoYWRvd0NhbWVyYS5wb3NpdGlvbi5jb3B5KCBfbGlnaHRQb3NpdGlvbldvcmxkJDEgKTtcblxuXHRcdF9sb29rVGFyZ2V0JDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50YXJnZXQubWF0cml4V29ybGQgKTtcblx0XHRzaGFkb3dDYW1lcmEubG9va0F0KCBfbG9va1RhcmdldCQxICk7XG5cdFx0c2hhZG93Q2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRfcHJvalNjcmVlbk1hdHJpeCQxLm11bHRpcGx5TWF0cmljZXMoIHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBzaGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7XG5cdFx0dGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCggX3Byb2pTY3JlZW5NYXRyaXgkMSApO1xuXG5cdFx0c2hhZG93TWF0cml4LnNldChcblx0XHRcdDAuNSwgMC4wLCAwLjAsIDAuNSxcblx0XHRcdDAuMCwgMC41LCAwLjAsIDAuNSxcblx0XHRcdDAuMCwgMC4wLCAwLjUsIDAuNSxcblx0XHRcdDAuMCwgMC4wLCAwLjAsIDEuMFxuXHRcdCk7XG5cblx0XHRzaGFkb3dNYXRyaXgubXVsdGlwbHkoIHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0c2hhZG93TWF0cml4Lm11bHRpcGx5KCBzaGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7XG5cblx0fVxuXG5cdGdldFZpZXdwb3J0KCB2aWV3cG9ydEluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1sgdmlld3BvcnRJbmRleCBdO1xuXG5cdH1cblxuXHRnZXRGcmFtZUV4dGVudHMoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0aWYgKCB0aGlzLm1hcCApIHtcblxuXHRcdFx0dGhpcy5tYXAuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm1hcFBhc3MgKSB7XG5cblx0XHRcdHRoaXMubWFwUGFzcy5kaXNwb3NlKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHRoaXMuY2FtZXJhID0gc291cmNlLmNhbWVyYS5jbG9uZSgpO1xuXG5cdFx0dGhpcy5iaWFzID0gc291cmNlLmJpYXM7XG5cdFx0dGhpcy5yYWRpdXMgPSBzb3VyY2UucmFkaXVzO1xuXG5cdFx0dGhpcy5tYXBTaXplLmNvcHkoIHNvdXJjZS5tYXBTaXplICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IG9iamVjdCA9IHt9O1xuXG5cdFx0aWYgKCB0aGlzLmJpYXMgIT09IDAgKSBvYmplY3QuYmlhcyA9IHRoaXMuYmlhcztcblx0XHRpZiAoIHRoaXMubm9ybWFsQmlhcyAhPT0gMCApIG9iamVjdC5ub3JtYWxCaWFzID0gdGhpcy5ub3JtYWxCaWFzO1xuXHRcdGlmICggdGhpcy5yYWRpdXMgIT09IDEgKSBvYmplY3QucmFkaXVzID0gdGhpcy5yYWRpdXM7XG5cdFx0aWYgKCB0aGlzLm1hcFNpemUueCAhPT0gNTEyIHx8IHRoaXMubWFwU2l6ZS55ICE9PSA1MTIgKSBvYmplY3QubWFwU2l6ZSA9IHRoaXMubWFwU2l6ZS50b0FycmF5KCk7XG5cblx0XHRvYmplY3QuY2FtZXJhID0gdGhpcy5jYW1lcmEudG9KU09OKCBmYWxzZSApLm9iamVjdDtcblx0XHRkZWxldGUgb2JqZWN0LmNhbWVyYS5tYXRyaXg7XG5cblx0XHRyZXR1cm4gb2JqZWN0O1xuXG5cdH1cblxufVxuXG5jbGFzcyBTcG90TGlnaHRTaGFkb3cgZXh0ZW5kcyBMaWdodFNoYWRvdyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlciggbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCA1MCwgMSwgMC41LCA1MDAgKSApO1xuXG5cdFx0dGhpcy5mb2N1cyA9IDE7XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKCBsaWdodCApIHtcblxuXHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhO1xuXG5cdFx0Y29uc3QgZm92ID0gUkFEMkRFRyAqIDIgKiBsaWdodC5hbmdsZSAqIHRoaXMuZm9jdXM7XG5cdFx0Y29uc3QgYXNwZWN0ID0gdGhpcy5tYXBTaXplLndpZHRoIC8gdGhpcy5tYXBTaXplLmhlaWdodDtcblx0XHRjb25zdCBmYXIgPSBsaWdodC5kaXN0YW5jZSB8fCBjYW1lcmEuZmFyO1xuXG5cdFx0aWYgKCBmb3YgIT09IGNhbWVyYS5mb3YgfHwgYXNwZWN0ICE9PSBjYW1lcmEuYXNwZWN0IHx8IGZhciAhPT0gY2FtZXJhLmZhciApIHtcblxuXHRcdFx0Y2FtZXJhLmZvdiA9IGZvdjtcblx0XHRcdGNhbWVyYS5hc3BlY3QgPSBhc3BlY3Q7XG5cdFx0XHRjYW1lcmEuZmFyID0gZmFyO1xuXHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdH1cblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpY2VzKCBsaWdodCApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuZm9jdXMgPSBzb3VyY2UuZm9jdXM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuU3BvdExpZ2h0U2hhZG93LnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIFNwb3RMaWdodCBleHRlbmRzIExpZ2h0IHtcblxuXHRjb25zdHJ1Y3RvciggY29sb3IsIGludGVuc2l0eSwgZGlzdGFuY2UgPSAwLCBhbmdsZSA9IE1hdGguUEkgLyAzLCBwZW51bWJyYSA9IDAsIGRlY2F5ID0gMSApIHtcblxuXHRcdHN1cGVyKCBjb2xvciwgaW50ZW5zaXR5ICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU3BvdExpZ2h0JztcblxuXHRcdHRoaXMucG9zaXRpb24uY29weSggT2JqZWN0M0QuRGVmYXVsdFVwICk7XG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMudGFyZ2V0ID0gbmV3IE9iamVjdDNEKCk7XG5cblx0XHR0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0dGhpcy5hbmdsZSA9IGFuZ2xlO1xuXHRcdHRoaXMucGVudW1icmEgPSBwZW51bWJyYTtcblx0XHR0aGlzLmRlY2F5ID0gZGVjYXk7IC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi5cblxuXHRcdHRoaXMuc2hhZG93ID0gbmV3IFNwb3RMaWdodFNoYWRvdygpO1xuXG5cdH1cblxuXHRnZXQgcG93ZXIoKSB7XG5cblx0XHQvLyBjb21wdXRlIHRoZSBsaWdodCdzIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpIGZyb20gaXRzIGludGVuc2l0eSAoaW4gY2FuZGVsYSlcblx0XHQvLyBieSBjb252ZW50aW9uIGZvciBhIHNwb3RsaWdodCwgbHVtaW5vdXMgcG93ZXIgKGxtKSA9IM+AICogbHVtaW5vdXMgaW50ZW5zaXR5IChjZClcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnNpdHkgKiBNYXRoLlBJO1xuXG5cdH1cblxuXHRzZXQgcG93ZXIoIHBvd2VyICkge1xuXG5cdFx0Ly8gc2V0IHRoZSBsaWdodCdzIGludGVuc2l0eSAoaW4gY2FuZGVsYSkgZnJvbSB0aGUgZGVzaXJlZCBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKVxuXHRcdHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyBNYXRoLlBJO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5zaGFkb3cuZGlzcG9zZSgpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuZGlzdGFuY2UgPSBzb3VyY2UuZGlzdGFuY2U7XG5cdFx0dGhpcy5hbmdsZSA9IHNvdXJjZS5hbmdsZTtcblx0XHR0aGlzLnBlbnVtYnJhID0gc291cmNlLnBlbnVtYnJhO1xuXHRcdHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7XG5cblx0XHR0aGlzLnRhcmdldCA9IHNvdXJjZS50YXJnZXQuY2xvbmUoKTtcblxuXHRcdHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNwb3RMaWdodC5wcm90b3R5cGUuaXNTcG90TGlnaHQgPSB0cnVlO1xuXG5jb25zdCBfcHJvalNjcmVlbk1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9saWdodFBvc2l0aW9uV29ybGQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbG9va1RhcmdldCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgUG9pbnRMaWdodFNoYWRvdyBleHRlbmRzIExpZ2h0U2hhZG93IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIDkwLCAxLCAwLjUsIDUwMCApICk7XG5cblx0XHR0aGlzLl9mcmFtZUV4dGVudHMgPSBuZXcgVmVjdG9yMiggNCwgMiApO1xuXG5cdFx0dGhpcy5fdmlld3BvcnRDb3VudCA9IDY7XG5cblx0XHR0aGlzLl92aWV3cG9ydHMgPSBbXG5cdFx0XHQvLyBUaGVzZSB2aWV3cG9ydHMgbWFwIGEgY3ViZS1tYXAgb250byBhIDJEIHRleHR1cmUgd2l0aCB0aGVcblx0XHRcdC8vIGZvbGxvd2luZyBvcmllbnRhdGlvbjpcblx0XHRcdC8vXG5cdFx0XHQvLyAgeHpYWlxuXHRcdFx0Ly8gICB5IFlcblx0XHRcdC8vXG5cdFx0XHQvLyBYIC0gUG9zaXRpdmUgeCBkaXJlY3Rpb25cblx0XHRcdC8vIHggLSBOZWdhdGl2ZSB4IGRpcmVjdGlvblxuXHRcdFx0Ly8gWSAtIFBvc2l0aXZlIHkgZGlyZWN0aW9uXG5cdFx0XHQvLyB5IC0gTmVnYXRpdmUgeSBkaXJlY3Rpb25cblx0XHRcdC8vIFogLSBQb3NpdGl2ZSB6IGRpcmVjdGlvblxuXHRcdFx0Ly8geiAtIE5lZ2F0aXZlIHogZGlyZWN0aW9uXG5cblx0XHRcdC8vIHBvc2l0aXZlIFhcblx0XHRcdG5ldyBWZWN0b3I0KCAyLCAxLCAxLCAxICksXG5cdFx0XHQvLyBuZWdhdGl2ZSBYXG5cdFx0XHRuZXcgVmVjdG9yNCggMCwgMSwgMSwgMSApLFxuXHRcdFx0Ly8gcG9zaXRpdmUgWlxuXHRcdFx0bmV3IFZlY3RvcjQoIDMsIDEsIDEsIDEgKSxcblx0XHRcdC8vIG5lZ2F0aXZlIFpcblx0XHRcdG5ldyBWZWN0b3I0KCAxLCAxLCAxLCAxICksXG5cdFx0XHQvLyBwb3NpdGl2ZSBZXG5cdFx0XHRuZXcgVmVjdG9yNCggMywgMCwgMSwgMSApLFxuXHRcdFx0Ly8gbmVnYXRpdmUgWVxuXHRcdFx0bmV3IFZlY3RvcjQoIDEsIDAsIDEsIDEgKVxuXHRcdF07XG5cblx0XHR0aGlzLl9jdWJlRGlyZWN0aW9ucyA9IFtcblx0XHRcdG5ldyBWZWN0b3IzKCAxLCAwLCAwICksIG5ldyBWZWN0b3IzKCAtIDEsIDAsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDAsIDEgKSxcblx0XHRcdG5ldyBWZWN0b3IzKCAwLCAwLCAtIDEgKSwgbmV3IFZlY3RvcjMoIDAsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIC0gMSwgMCApXG5cdFx0XTtcblxuXHRcdHRoaXMuX2N1YmVVcHMgPSBbXG5cdFx0XHRuZXcgVmVjdG9yMyggMCwgMSwgMCApLCBuZXcgVmVjdG9yMyggMCwgMSwgMCApLCBuZXcgVmVjdG9yMyggMCwgMSwgMCApLFxuXHRcdFx0bmV3IFZlY3RvcjMoIDAsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDAsIDEgKSxcdG5ldyBWZWN0b3IzKCAwLCAwLCAtIDEgKVxuXHRcdF07XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKCBsaWdodCwgdmlld3BvcnRJbmRleCA9IDAgKSB7XG5cblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcblx0XHRjb25zdCBzaGFkb3dNYXRyaXggPSB0aGlzLm1hdHJpeDtcblxuXHRcdGNvbnN0IGZhciA9IGxpZ2h0LmRpc3RhbmNlIHx8IGNhbWVyYS5mYXI7XG5cblx0XHRpZiAoIGZhciAhPT0gY2FtZXJhLmZhciApIHtcblxuXHRcdFx0Y2FtZXJhLmZhciA9IGZhcjtcblx0XHRcdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHR9XG5cblx0XHRfbGlnaHRQb3NpdGlvbldvcmxkLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRjYW1lcmEucG9zaXRpb24uY29weSggX2xpZ2h0UG9zaXRpb25Xb3JsZCApO1xuXG5cdFx0X2xvb2tUYXJnZXQuY29weSggY2FtZXJhLnBvc2l0aW9uICk7XG5cdFx0X2xvb2tUYXJnZXQuYWRkKCB0aGlzLl9jdWJlRGlyZWN0aW9uc1sgdmlld3BvcnRJbmRleCBdICk7XG5cdFx0Y2FtZXJhLnVwLmNvcHkoIHRoaXMuX2N1YmVVcHNbIHZpZXdwb3J0SW5kZXggXSApO1xuXHRcdGNhbWVyYS5sb29rQXQoIF9sb29rVGFyZ2V0ICk7XG5cdFx0Y2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRzaGFkb3dNYXRyaXgubWFrZVRyYW5zbGF0aW9uKCAtIF9saWdodFBvc2l0aW9uV29ybGQueCwgLSBfbGlnaHRQb3NpdGlvbldvcmxkLnksIC0gX2xpZ2h0UG9zaXRpb25Xb3JsZC56ICk7XG5cblx0XHRfcHJvalNjcmVlbk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXHRcdHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoIF9wcm9qU2NyZWVuTWF0cml4ICk7XG5cblx0fVxuXG59XG5cblBvaW50TGlnaHRTaGFkb3cucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIFBvaW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlID0gMCwgZGVjYXkgPSAxICkge1xuXG5cdFx0c3VwZXIoIGNvbG9yLCBpbnRlbnNpdHkgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdQb2ludExpZ2h0JztcblxuXHRcdHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHR0aGlzLmRlY2F5ID0gZGVjYXk7IC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi5cblxuXHRcdHRoaXMuc2hhZG93ID0gbmV3IFBvaW50TGlnaHRTaGFkb3coKTtcblxuXHR9XG5cblx0Z2V0IHBvd2VyKCkge1xuXG5cdFx0Ly8gY29tcHV0ZSB0aGUgbGlnaHQncyBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKSBmcm9tIGl0cyBpbnRlbnNpdHkgKGluIGNhbmRlbGEpXG5cdFx0Ly8gZm9yIGFuIGlzb3Ryb3BpYyBsaWdodCBzb3VyY2UsIGx1bWlub3VzIHBvd2VyIChsbSkgPSA0IM+AIGx1bWlub3VzIGludGVuc2l0eSAoY2QpXG5cdFx0cmV0dXJuIHRoaXMuaW50ZW5zaXR5ICogNCAqIE1hdGguUEk7XG5cblx0fVxuXG5cdHNldCBwb3dlciggcG93ZXIgKSB7XG5cblx0XHQvLyBzZXQgdGhlIGxpZ2h0J3MgaW50ZW5zaXR5IChpbiBjYW5kZWxhKSBmcm9tIHRoZSBkZXNpcmVkIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpXG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBwb3dlciAvICggNCAqIE1hdGguUEkgKTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuc2hhZG93LmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRpc3RhbmNlID0gc291cmNlLmRpc3RhbmNlO1xuXHRcdHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7XG5cblx0XHR0aGlzLnNoYWRvdyA9IHNvdXJjZS5zaGFkb3cuY2xvbmUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5Qb2ludExpZ2h0LnByb3RvdHlwZS5pc1BvaW50TGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGV4dGVuZHMgTGlnaHRTaGFkb3cge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoIG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoIC0gNSwgNSwgNSwgLSA1LCAwLjUsIDUwMCApICk7XG5cblx0fVxuXG59XG5cbkRpcmVjdGlvbmFsTGlnaHRTaGFkb3cucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIERpcmVjdGlvbmFsTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHkgKSB7XG5cblx0XHRzdXBlciggY29sb3IsIGludGVuc2l0eSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0RpcmVjdGlvbmFsTGlnaHQnO1xuXG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KCBPYmplY3QzRC5EZWZhdWx0VXAgKTtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0dGhpcy50YXJnZXQgPSBuZXcgT2JqZWN0M0QoKTtcblxuXHRcdHRoaXMuc2hhZG93ID0gbmV3IERpcmVjdGlvbmFsTGlnaHRTaGFkb3coKTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuc2hhZG93LmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnRhcmdldCA9IHNvdXJjZS50YXJnZXQuY2xvbmUoKTtcblx0XHR0aGlzLnNoYWRvdyA9IHNvdXJjZS5zaGFkb3cuY2xvbmUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5EaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBBbWJpZW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHkgKSB7XG5cblx0XHRzdXBlciggY29sb3IsIGludGVuc2l0eSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0FtYmllbnRMaWdodCc7XG5cblx0fVxuXG59XG5cbkFtYmllbnRMaWdodC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBSZWN0QXJlYUxpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgaW50ZW5zaXR5LCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxMCApIHtcblxuXHRcdHN1cGVyKCBjb2xvciwgaW50ZW5zaXR5ICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUmVjdEFyZWFMaWdodCc7XG5cblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cblx0fVxuXG5cdGdldCBwb3dlcigpIHtcblxuXHRcdC8vIGNvbXB1dGUgdGhlIGxpZ2h0J3MgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucykgZnJvbSBpdHMgaW50ZW5zaXR5IChpbiBuaXRzKVxuXHRcdHJldHVybiB0aGlzLmludGVuc2l0eSAqIHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIE1hdGguUEk7XG5cblx0fVxuXG5cdHNldCBwb3dlciggcG93ZXIgKSB7XG5cblx0XHQvLyBzZXQgdGhlIGxpZ2h0J3MgaW50ZW5zaXR5IChpbiBuaXRzKSBmcm9tIHRoZSBkZXNpcmVkIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpXG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBwb3dlciAvICggdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0ICogTWF0aC5QSSApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTiggbWV0YSApIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oIG1ldGEgKTtcblxuXHRcdGRhdGEub2JqZWN0LndpZHRoID0gdGhpcy53aWR0aDtcblx0XHRkYXRhLm9iamVjdC5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5SZWN0QXJlYUxpZ2h0LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQgPSB0cnVlO1xuXG4vKipcbiAqIFByaW1hcnkgcmVmZXJlbmNlOlxuICogICBodHRwczovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9wYXBlcnMvZW52bWFwL2Vudm1hcC5wZGZcbiAqXG4gKiBTZWNvbmRhcnkgcmVmZXJlbmNlOlxuICogICBodHRwczovL3d3dy5wcHNsb2FuLm9yZy9wdWJsaWNhdGlvbnMvU3R1cGlkU0gzNi5wZGZcbiAqL1xuXG4vLyAzLWJhbmQgU0ggZGVmaW5lZCBieSA5IGNvZWZmaWNpZW50c1xuXG5jbGFzcyBTcGhlcmljYWxIYXJtb25pY3MzIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuY29lZmZpY2llbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50cy5wdXNoKCBuZXcgVmVjdG9yMygpICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldCggY29lZmZpY2llbnRzICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbIGkgXS5jb3B5KCBjb2VmZmljaWVudHNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHplcm8oKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1sgaSBdLnNldCggMCwgMCwgMCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIGdldCB0aGUgcmFkaWFuY2UgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsXG5cdC8vIHRhcmdldCBpcyBhIFZlY3RvcjNcblx0Z2V0QXQoIG5vcm1hbCwgdGFyZ2V0ICkge1xuXG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGhcblxuXHRcdGNvbnN0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XG5cblx0XHRjb25zdCBjb2VmZiA9IHRoaXMuY29lZmZpY2llbnRzO1xuXG5cdFx0Ly8gYmFuZCAwXG5cdFx0dGFyZ2V0LmNvcHkoIGNvZWZmWyAwIF0gKS5tdWx0aXBseVNjYWxhciggMC4yODIwOTUgKTtcblxuXHRcdC8vIGJhbmQgMVxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAxIF0sIDAuNDg4NjAzICogeSApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAyIF0sIDAuNDg4NjAzICogeiApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAzIF0sIDAuNDg4NjAzICogeCApO1xuXG5cdFx0Ly8gYmFuZCAyXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDQgXSwgMS4wOTI1NDggKiAoIHggKiB5ICkgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNSBdLCAxLjA5MjU0OCAqICggeSAqIHogKSApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyA2IF0sIDAuMzE1MzkyICogKCAzLjAgKiB6ICogeiAtIDEuMCApICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDcgXSwgMS4wOTI1NDggKiAoIHggKiB6ICkgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgOCBdLCAwLjU0NjI3NCAqICggeCAqIHggLSB5ICogeSApICk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXG5cdH1cblxuXHQvLyBnZXQgdGhlIGlycmFkaWFuY2UgKHJhZGlhbmNlIGNvbnZvbHZlZCB3aXRoIGNvc2luZSBsb2JlKSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBub3JtYWxcblx0Ly8gdGFyZ2V0IGlzIGEgVmVjdG9yM1xuXHQvLyBodHRwczovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9wYXBlcnMvZW52bWFwL2Vudm1hcC5wZGZcblx0Z2V0SXJyYWRpYW5jZUF0KCBub3JtYWwsIHRhcmdldCApIHtcblxuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoXG5cblx0XHRjb25zdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXG5cdFx0Y29uc3QgY29lZmYgPSB0aGlzLmNvZWZmaWNpZW50cztcblxuXHRcdC8vIGJhbmQgMFxuXHRcdHRhcmdldC5jb3B5KCBjb2VmZlsgMCBdICkubXVsdGlwbHlTY2FsYXIoIDAuODg2MjI3ICk7IC8vIM+AICogMC4yODIwOTVcblxuXHRcdC8vIGJhbmQgMVxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAxIF0sIDIuMCAqIDAuNTExNjY0ICogeSApOyAvLyAoIDIgKiDPgCAvIDMgKSAqIDAuNDg4NjAzXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDIgXSwgMi4wICogMC41MTE2NjQgKiB6ICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDMgXSwgMi4wICogMC41MTE2NjQgKiB4ICk7XG5cblx0XHQvLyBiYW5kIDJcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNCBdLCAyLjAgKiAwLjQyOTA0MyAqIHggKiB5ICk7IC8vICggz4AgLyA0ICkgKiAxLjA5MjU0OFxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyA1IF0sIDIuMCAqIDAuNDI5MDQzICogeSAqIHogKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNiBdLCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTsgLy8gKCDPgCAvIDQgKSAqIDAuMzE1MzkyICogM1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyA3IF0sIDIuMCAqIDAuNDI5MDQzICogeCAqIHogKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgOCBdLCAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApICk7IC8vICggz4AgLyA0ICkgKiAwLjU0NjI3NFxuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0YWRkKCBzaCApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuY29lZmZpY2llbnRzWyBpIF0uYWRkKCBzaC5jb2VmZmljaWVudHNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZFNjYWxlZFNIKCBzaCwgcyApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuY29lZmZpY2llbnRzWyBpIF0uYWRkU2NhbGVkVmVjdG9yKCBzaC5jb2VmZmljaWVudHNbIGkgXSwgcyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNjYWxlKCBzICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbIGkgXS5tdWx0aXBseVNjYWxhciggcyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnAoIHNoLCBhbHBoYSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuY29lZmZpY2llbnRzWyBpIF0ubGVycCggc2guY29lZmZpY2llbnRzWyBpIF0sIGFscGhhICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCBzaCApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdGlmICggISB0aGlzLmNvZWZmaWNpZW50c1sgaSBdLmVxdWFscyggc2guY29lZmZpY2llbnRzWyBpIF0gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRjb3B5KCBzaCApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldCggc2guY29lZmZpY2llbnRzICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0Y29uc3QgY29lZmZpY2llbnRzID0gdGhpcy5jb2VmZmljaWVudHM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHRjb2VmZmljaWVudHNbIGkgXS5mcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgKyAoIGkgKiAzICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0FycmF5KCBhcnJheSA9IFtdLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0Y29uc3QgY29lZmZpY2llbnRzID0gdGhpcy5jb2VmZmljaWVudHM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHRjb2VmZmljaWVudHNbIGkgXS50b0FycmF5KCBhcnJheSwgb2Zmc2V0ICsgKCBpICogMyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdC8vIGV2YWx1YXRlIHRoZSBiYXNpcyBmdW5jdGlvbnNcblx0Ly8gc2hCYXNpcyBpcyBhbiBBcnJheVsgOSBdXG5cdHN0YXRpYyBnZXRCYXNpc0F0KCBub3JtYWwsIHNoQmFzaXMgKSB7XG5cblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aFxuXG5cdFx0Y29uc3QgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblxuXHRcdC8vIGJhbmQgMFxuXHRcdHNoQmFzaXNbIDAgXSA9IDAuMjgyMDk1O1xuXG5cdFx0Ly8gYmFuZCAxXG5cdFx0c2hCYXNpc1sgMSBdID0gMC40ODg2MDMgKiB5O1xuXHRcdHNoQmFzaXNbIDIgXSA9IDAuNDg4NjAzICogejtcblx0XHRzaEJhc2lzWyAzIF0gPSAwLjQ4ODYwMyAqIHg7XG5cblx0XHQvLyBiYW5kIDJcblx0XHRzaEJhc2lzWyA0IF0gPSAxLjA5MjU0OCAqIHggKiB5O1xuXHRcdHNoQmFzaXNbIDUgXSA9IDEuMDkyNTQ4ICogeSAqIHo7XG5cdFx0c2hCYXNpc1sgNiBdID0gMC4zMTUzOTIgKiAoIDMgKiB6ICogeiAtIDEgKTtcblx0XHRzaEJhc2lzWyA3IF0gPSAxLjA5MjU0OCAqIHggKiB6O1xuXHRcdHNoQmFzaXNbIDggXSA9IDAuNTQ2Mjc0ICogKCB4ICogeCAtIHkgKiB5ICk7XG5cblx0fVxuXG59XG5cblNwaGVyaWNhbEhhcm1vbmljczMucHJvdG90eXBlLmlzU3BoZXJpY2FsSGFybW9uaWNzMyA9IHRydWU7XG5cbmNsYXNzIExpZ2h0UHJvYmUgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIHNoID0gbmV3IFNwaGVyaWNhbEhhcm1vbmljczMoKSwgaW50ZW5zaXR5ID0gMSApIHtcblxuXHRcdHN1cGVyKCB1bmRlZmluZWQsIGludGVuc2l0eSApO1xuXG5cdFx0dGhpcy5zaCA9IHNoO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuc2guY29weSggc291cmNlLnNoICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHR0aGlzLmludGVuc2l0eSA9IGpzb24uaW50ZW5zaXR5OyAvLyBUT0RPOiBNb3ZlIHRoaXMgYml0IHRvIExpZ2h0LmZyb21KU09OKCk7XG5cdFx0dGhpcy5zaC5mcm9tQXJyYXkoIGpzb24uc2ggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRkYXRhLm9iamVjdC5zaCA9IHRoaXMuc2gudG9BcnJheSgpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbkxpZ2h0UHJvYmUucHJvdG90eXBlLmlzTGlnaHRQcm9iZSA9IHRydWU7XG5cbmNsYXNzIE1hdGVyaWFsTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cdFx0dGhpcy50ZXh0dXJlcyA9IHt9O1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHNjb3BlLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggc2NvcGUucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHNjb3BlLndpdGhDcmVkZW50aWFscyApO1xuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggdGV4dCApIHtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBhcnNlKCB0ZXh0ICkgKSApO1xuXG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRpZiAoIG9uRXJyb3IgKSB7XG5cblx0XHRcdFx0XHRvbkVycm9yKCBlICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXG5cdFx0XHR9XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0fVxuXG5cdHBhcnNlKCBqc29uICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB0aGlzLnRleHR1cmVzO1xuXG5cdFx0ZnVuY3Rpb24gZ2V0VGV4dHVyZSggbmFtZSApIHtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlc1sgbmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWxMb2FkZXI6IFVuZGVmaW5lZCB0ZXh0dXJlJywgbmFtZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0ZXh0dXJlc1sgbmFtZSBdO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWxzWyBqc29uLnR5cGUgXSgpO1xuXG5cdFx0aWYgKCBqc29uLnV1aWQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnV1aWQgPSBqc29uLnV1aWQ7XG5cdFx0aWYgKCBqc29uLm5hbWUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm5hbWUgPSBqc29uLm5hbWU7XG5cdFx0aWYgKCBqc29uLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuY29sb3IgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNvbG9yLnNldEhleCgganNvbi5jb2xvciApO1xuXHRcdGlmICgganNvbi5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJvdWdobmVzcyA9IGpzb24ucm91Z2huZXNzO1xuXHRcdGlmICgganNvbi5tZXRhbG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1ldGFsbmVzcyA9IGpzb24ubWV0YWxuZXNzO1xuXHRcdGlmICgganNvbi5zaGVlbiAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hlZW4gPSBqc29uLnNoZWVuO1xuXHRcdGlmICgganNvbi5zaGVlbkNvbG9yICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGVlbkNvbG9yID0gbmV3IENvbG9yKCkuc2V0SGV4KCBqc29uLnNoZWVuQ29sb3IgKTtcblx0XHRpZiAoIGpzb24uc2hlZW5Sb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0ganNvbi5zaGVlblJvdWdobmVzcztcblx0XHRpZiAoIGpzb24uZW1pc3NpdmUgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5lbWlzc2l2ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZW1pc3NpdmUuc2V0SGV4KCBqc29uLmVtaXNzaXZlICk7XG5cdFx0aWYgKCBqc29uLnNwZWN1bGFyICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuc3BlY3VsYXIgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNwZWN1bGFyLnNldEhleCgganNvbi5zcGVjdWxhciApO1xuXHRcdGlmICgganNvbi5zcGVjdWxhckludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHkgPSBqc29uLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdGlmICgganNvbi5zcGVjdWxhckNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvci5zZXRIZXgoIGpzb24uc3BlY3VsYXJDb2xvciApO1xuXHRcdGlmICgganNvbi5zaGluaW5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNoaW5pbmVzcyA9IGpzb24uc2hpbmluZXNzO1xuXHRcdGlmICgganNvbi5jbGVhcmNvYXQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyY29hdCA9IGpzb24uY2xlYXJjb2F0O1xuXHRcdGlmICgganNvbi5jbGVhcmNvYXRSb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGpzb24uY2xlYXJjb2F0Um91Z2huZXNzO1xuXHRcdGlmICgganNvbi50cmFuc21pc3Npb24gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA9IGpzb24udHJhbnNtaXNzaW9uO1xuXHRcdGlmICgganNvbi50aGlja25lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRoaWNrbmVzcyA9IGpzb24udGhpY2tuZXNzO1xuXHRcdGlmICgganNvbi5hdHRlbnVhdGlvbkRpc3RhbmNlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlID0ganNvbi5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdGlmICgganNvbi5hdHRlbnVhdGlvbkNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvci5zZXRIZXgoIGpzb24uYXR0ZW51YXRpb25Db2xvciApO1xuXHRcdGlmICgganNvbi5mb2cgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZvZyA9IGpzb24uZm9nO1xuXHRcdGlmICgganNvbi5mbGF0U2hhZGluZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZmxhdFNoYWRpbmcgPSBqc29uLmZsYXRTaGFkaW5nO1xuXHRcdGlmICgganNvbi5ibGVuZGluZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYmxlbmRpbmcgPSBqc29uLmJsZW5kaW5nO1xuXHRcdGlmICgganNvbi5jb21iaW5lICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jb21iaW5lID0ganNvbi5jb21iaW5lO1xuXHRcdGlmICgganNvbi5zaWRlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaWRlID0ganNvbi5zaWRlO1xuXHRcdGlmICgganNvbi5zaGFkb3dTaWRlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGFkb3dTaWRlID0ganNvbi5zaGFkb3dTaWRlO1xuXHRcdGlmICgganNvbi5vcGFjaXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5vcGFjaXR5ID0ganNvbi5vcGFjaXR5O1xuXHRcdGlmICgganNvbi50cmFuc3BhcmVudCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBqc29uLnRyYW5zcGFyZW50O1xuXHRcdGlmICgganNvbi5hbHBoYVRlc3QgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmFscGhhVGVzdCA9IGpzb24uYWxwaGFUZXN0O1xuXHRcdGlmICgganNvbi5kZXB0aFRlc3QgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRlcHRoVGVzdCA9IGpzb24uZGVwdGhUZXN0O1xuXHRcdGlmICgganNvbi5kZXB0aFdyaXRlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kZXB0aFdyaXRlID0ganNvbi5kZXB0aFdyaXRlO1xuXHRcdGlmICgganNvbi5jb2xvcldyaXRlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jb2xvcldyaXRlID0ganNvbi5jb2xvcldyaXRlO1xuXHRcdGlmICgganNvbi5hbHBoYVdyaXRlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hbHBoYVdyaXRlID0ganNvbi5hbHBoYVdyaXRlO1xuXG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxXcml0ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbFdyaXRlID0ganNvbi5zdGVuY2lsV3JpdGU7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxXcml0ZU1hc2sgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxXcml0ZU1hc2sgPSBqc29uLnN0ZW5jaWxXcml0ZU1hc2s7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxGdW5jICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zdGVuY2lsRnVuYyA9IGpzb24uc3RlbmNpbEZ1bmM7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxSZWYgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxSZWYgPSBqc29uLnN0ZW5jaWxSZWY7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxGdW5jTWFzayAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbEZ1bmNNYXNrID0ganNvbi5zdGVuY2lsRnVuY01hc2s7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxGYWlsICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zdGVuY2lsRmFpbCA9IGpzb24uc3RlbmNpbEZhaWw7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxaRmFpbCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbFpGYWlsID0ganNvbi5zdGVuY2lsWkZhaWw7XG5cdFx0aWYgKCBqc29uLnN0ZW5jaWxaUGFzcyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbFpQYXNzID0ganNvbi5zdGVuY2lsWlBhc3M7XG5cblx0XHRpZiAoIGpzb24ud2lyZWZyYW1lICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC53aXJlZnJhbWUgPSBqc29uLndpcmVmcmFtZTtcblx0XHRpZiAoIGpzb24ud2lyZWZyYW1lTGluZXdpZHRoICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGggPSBqc29uLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRpZiAoIGpzb24ud2lyZWZyYW1lTGluZWNhcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCA9IGpzb24ud2lyZWZyYW1lTGluZWNhcDtcblx0XHRpZiAoIGpzb24ud2lyZWZyYW1lTGluZWpvaW4gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luID0ganNvbi53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdGlmICgganNvbi5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucm90YXRpb24gPSBqc29uLnJvdGF0aW9uO1xuXG5cdFx0aWYgKCBqc29uLmxpbmV3aWR0aCAhPT0gMSApIG1hdGVyaWFsLmxpbmV3aWR0aCA9IGpzb24ubGluZXdpZHRoO1xuXHRcdGlmICgganNvbi5kYXNoU2l6ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZGFzaFNpemUgPSBqc29uLmRhc2hTaXplO1xuXHRcdGlmICgganNvbi5nYXBTaXplICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5nYXBTaXplID0ganNvbi5nYXBTaXplO1xuXHRcdGlmICgganNvbi5zY2FsZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2NhbGUgPSBqc29uLnNjYWxlO1xuXG5cdFx0aWYgKCBqc29uLnBvbHlnb25PZmZzZXQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnBvbHlnb25PZmZzZXQgPSBqc29uLnBvbHlnb25PZmZzZXQ7XG5cdFx0aWYgKCBqc29uLnBvbHlnb25PZmZzZXRGYWN0b3IgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBqc29uLnBvbHlnb25PZmZzZXRGYWN0b3I7XG5cdFx0aWYgKCBqc29uLnBvbHlnb25PZmZzZXRVbml0cyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucG9seWdvbk9mZnNldFVuaXRzID0ganNvbi5wb2x5Z29uT2Zmc2V0VW5pdHM7XG5cblx0XHRpZiAoIGpzb24uZGl0aGVyaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kaXRoZXJpbmcgPSBqc29uLmRpdGhlcmluZztcblxuXHRcdGlmICgganNvbi5hbHBoYVRvQ292ZXJhZ2UgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmFscGhhVG9Db3ZlcmFnZSA9IGpzb24uYWxwaGFUb0NvdmVyYWdlO1xuXHRcdGlmICgganNvbi5wcmVtdWx0aXBsaWVkQWxwaGEgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSA9IGpzb24ucHJlbXVsdGlwbGllZEFscGhhO1xuXG5cdFx0aWYgKCBqc29uLnZpc2libGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnZpc2libGUgPSBqc29uLnZpc2libGU7XG5cblx0XHRpZiAoIGpzb24udG9uZU1hcHBlZCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudG9uZU1hcHBlZCA9IGpzb24udG9uZU1hcHBlZDtcblxuXHRcdGlmICgganNvbi51c2VyRGF0YSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudXNlckRhdGEgPSBqc29uLnVzZXJEYXRhO1xuXG5cdFx0aWYgKCBqc29uLnZlcnRleENvbG9ycyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiBqc29uLnZlcnRleENvbG9ycyA9PT0gJ251bWJlcicgKSB7XG5cblx0XHRcdFx0bWF0ZXJpYWwudmVydGV4Q29sb3JzID0gKCBqc29uLnZlcnRleENvbG9ycyA+IDAgKSA/IHRydWUgOiBmYWxzZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSBqc29uLnZlcnRleENvbG9ycztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gU2hhZGVyIE1hdGVyaWFsXG5cblx0XHRpZiAoIGpzb24udW5pZm9ybXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggY29uc3QgbmFtZSBpbiBqc29uLnVuaWZvcm1zICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm0gPSBqc29uLnVuaWZvcm1zWyBuYW1lIF07XG5cblx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXSA9IHt9O1xuXG5cdFx0XHRcdHN3aXRjaCAoIHVuaWZvcm0udHlwZSApIHtcblxuXHRcdFx0XHRcdGNhc2UgJ3QnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IGdldFRleHR1cmUoIHVuaWZvcm0udmFsdWUgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAnYyc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gbmV3IENvbG9yKCkuc2V0SGV4KCB1bmlmb3JtLnZhbHVlICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ3YyJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBuZXcgVmVjdG9yMigpLmZyb21BcnJheSggdW5pZm9ybS52YWx1ZSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICd2Myc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gbmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkoIHVuaWZvcm0udmFsdWUgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAndjQnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KCB1bmlmb3JtLnZhbHVlICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ20zJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBuZXcgTWF0cml4MygpLmZyb21BcnJheSggdW5pZm9ybS52YWx1ZSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdtNCc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gbmV3IE1hdHJpeDQoKS5mcm9tQXJyYXkoIHVuaWZvcm0udmFsdWUgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSB1bmlmb3JtLnZhbHVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBqc29uLmRlZmluZXMgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRlZmluZXMgPSBqc29uLmRlZmluZXM7XG5cdFx0aWYgKCBqc29uLnZlcnRleFNoYWRlciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudmVydGV4U2hhZGVyID0ganNvbi52ZXJ0ZXhTaGFkZXI7XG5cdFx0aWYgKCBqc29uLmZyYWdtZW50U2hhZGVyICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mcmFnbWVudFNoYWRlciA9IGpzb24uZnJhZ21lbnRTaGFkZXI7XG5cblx0XHRpZiAoIGpzb24uZXh0ZW5zaW9ucyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmb3IgKCBjb25zdCBrZXkgaW4ganNvbi5leHRlbnNpb25zICkge1xuXG5cdFx0XHRcdG1hdGVyaWFsLmV4dGVuc2lvbnNbIGtleSBdID0ganNvbi5leHRlbnNpb25zWyBrZXkgXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gRGVwcmVjYXRlZFxuXG5cdFx0aWYgKCBqc29uLnNoYWRpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZsYXRTaGFkaW5nID0ganNvbi5zaGFkaW5nID09PSAxOyAvLyBUSFJFRS5GbGF0U2hhZGluZ1xuXG5cdFx0Ly8gZm9yIFBvaW50c01hdGVyaWFsXG5cblx0XHRpZiAoIGpzb24uc2l6ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2l6ZSA9IGpzb24uc2l6ZTtcblx0XHRpZiAoIGpzb24uc2l6ZUF0dGVudWF0aW9uICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaXplQXR0ZW51YXRpb24gPSBqc29uLnNpemVBdHRlbnVhdGlvbjtcblxuXHRcdC8vIG1hcHNcblxuXHRcdGlmICgganNvbi5tYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1hcCA9IGdldFRleHR1cmUoIGpzb24ubWFwICk7XG5cdFx0aWYgKCBqc29uLm1hdGNhcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubWF0Y2FwID0gZ2V0VGV4dHVyZSgganNvbi5tYXRjYXAgKTtcblxuXHRcdGlmICgganNvbi5hbHBoYU1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYWxwaGFNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmFscGhhTWFwICk7XG5cblx0XHRpZiAoIGpzb24uYnVtcE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYnVtcE1hcCA9IGdldFRleHR1cmUoIGpzb24uYnVtcE1hcCApO1xuXHRcdGlmICgganNvbi5idW1wU2NhbGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmJ1bXBTY2FsZSA9IGpzb24uYnVtcFNjYWxlO1xuXG5cdFx0aWYgKCBqc29uLm5vcm1hbE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubm9ybWFsTWFwID0gZ2V0VGV4dHVyZSgganNvbi5ub3JtYWxNYXAgKTtcblx0XHRpZiAoIGpzb24ubm9ybWFsTWFwVHlwZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubm9ybWFsTWFwVHlwZSA9IGpzb24ubm9ybWFsTWFwVHlwZTtcblx0XHRpZiAoIGpzb24ubm9ybWFsU2NhbGUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0bGV0IG5vcm1hbFNjYWxlID0ganNvbi5ub3JtYWxTY2FsZTtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBub3JtYWxTY2FsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBCbGVuZGVyIGV4cG9ydGVyIHVzZWQgdG8gZXhwb3J0IGEgc2NhbGFyLiBTZWUgIzc0NTlcblxuXHRcdFx0XHRub3JtYWxTY2FsZSA9IFsgbm9ybWFsU2NhbGUsIG5vcm1hbFNjYWxlIF07XG5cblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWwubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigpLmZyb21BcnJheSggbm9ybWFsU2NhbGUgKTtcblxuXHRcdH1cblxuXHRcdGlmICgganNvbi5kaXNwbGFjZW1lbnRNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCA9IGdldFRleHR1cmUoIGpzb24uZGlzcGxhY2VtZW50TWFwICk7XG5cdFx0aWYgKCBqc29uLmRpc3BsYWNlbWVudFNjYWxlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZSA9IGpzb24uZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0aWYgKCBqc29uLmRpc3BsYWNlbWVudEJpYXMgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXMgPSBqc29uLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHRpZiAoIGpzb24ucm91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgPSBnZXRUZXh0dXJlKCBqc29uLnJvdWdobmVzc01hcCApO1xuXHRcdGlmICgganNvbi5tZXRhbG5lc3NNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1ldGFsbmVzc01hcCA9IGdldFRleHR1cmUoIGpzb24ubWV0YWxuZXNzTWFwICk7XG5cblx0XHRpZiAoIGpzb24uZW1pc3NpdmVNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVtaXNzaXZlTWFwID0gZ2V0VGV4dHVyZSgganNvbi5lbWlzc2l2ZU1hcCApO1xuXHRcdGlmICgganNvbi5lbWlzc2l2ZUludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHkgPSBqc29uLmVtaXNzaXZlSW50ZW5zaXR5O1xuXG5cdFx0aWYgKCBqc29uLnNwZWN1bGFyTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhck1hcCA9IGdldFRleHR1cmUoIGpzb24uc3BlY3VsYXJNYXAgKTtcblx0XHRpZiAoIGpzb24uc3BlY3VsYXJJbnRlbnNpdHlNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwID0gZ2V0VGV4dHVyZSgganNvbi5zcGVjdWxhckludGVuc2l0eU1hcCApO1xuXHRcdGlmICgganNvbi5zcGVjdWxhckNvbG9yTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwID0gZ2V0VGV4dHVyZSgganNvbi5zcGVjdWxhckNvbG9yTWFwICk7XG5cblx0XHRpZiAoIGpzb24uZW52TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5lbnZNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmVudk1hcCApO1xuXHRcdGlmICgganNvbi5lbnZNYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA9IGpzb24uZW52TWFwSW50ZW5zaXR5O1xuXG5cdFx0aWYgKCBqc29uLnJlZmxlY3Rpdml0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucmVmbGVjdGl2aXR5ID0ganNvbi5yZWZsZWN0aXZpdHk7XG5cdFx0aWYgKCBqc29uLnJlZnJhY3Rpb25SYXRpbyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvID0ganNvbi5yZWZyYWN0aW9uUmF0aW87XG5cblx0XHRpZiAoIGpzb24ubGlnaHRNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmxpZ2h0TWFwID0gZ2V0VGV4dHVyZSgganNvbi5saWdodE1hcCApO1xuXHRcdGlmICgganNvbi5saWdodE1hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNpdHkgPSBqc29uLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXG5cdFx0aWYgKCBqc29uLmFvTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hb01hcCA9IGdldFRleHR1cmUoIGpzb24uYW9NYXAgKTtcblx0XHRpZiAoIGpzb24uYW9NYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmFvTWFwSW50ZW5zaXR5ID0ganNvbi5hb01hcEludGVuc2l0eTtcblxuXHRcdGlmICgganNvbi5ncmFkaWVudE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZ3JhZGllbnRNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmdyYWRpZW50TWFwICk7XG5cblx0XHRpZiAoIGpzb24uY2xlYXJjb2F0TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmNsZWFyY29hdE1hcCApO1xuXHRcdGlmICgganNvbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IGdldFRleHR1cmUoIGpzb24uY2xlYXJjb2F0Um91Z2huZXNzTWFwICk7XG5cdFx0aWYgKCBqc29uLmNsZWFyY29hdE5vcm1hbE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwID0gZ2V0VGV4dHVyZSgganNvbi5jbGVhcmNvYXROb3JtYWxNYXAgKTtcblx0XHRpZiAoIGpzb24uY2xlYXJjb2F0Tm9ybWFsU2NhbGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIGpzb24uY2xlYXJjb2F0Tm9ybWFsU2NhbGUgKTtcblxuXHRcdGlmICgganNvbi50cmFuc21pc3Npb25NYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCA9IGdldFRleHR1cmUoIGpzb24udHJhbnNtaXNzaW9uTWFwICk7XG5cdFx0aWYgKCBqc29uLnRoaWNrbmVzc01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudGhpY2tuZXNzTWFwID0gZ2V0VGV4dHVyZSgganNvbi50aGlja25lc3NNYXAgKTtcblxuXHRcdGlmICgganNvbi5zaGVlbkNvbG9yTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwID0gZ2V0VGV4dHVyZSgganNvbi5zaGVlbkNvbG9yTWFwICk7XG5cdFx0aWYgKCBqc29uLnNoZWVuUm91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCA9IGdldFRleHR1cmUoIGpzb24uc2hlZW5Sb3VnaG5lc3NNYXAgKTtcblxuXHRcdHJldHVybiBtYXRlcmlhbDtcblxuXHR9XG5cblx0c2V0VGV4dHVyZXMoIHZhbHVlICkge1xuXG5cdFx0dGhpcy50ZXh0dXJlcyA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBMb2FkZXJVdGlscyB7XG5cblx0c3RhdGljIGRlY29kZVRleHQoIGFycmF5ICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnICkge1xuXG5cdFx0XHRyZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKCBhcnJheSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gQXZvaWQgdGhlIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkpIHNob3J0Y3V0LCB3aGljaFxuXHRcdC8vIHRocm93cyBhIFwibWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIiBlcnJvciBmb3IgbGFyZ2UgYXJyYXlzLlxuXG5cdFx0bGV0IHMgPSAnJztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBhcnJheS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Ly8gSW1wbGljaXRseSBhc3N1bWVzIGxpdHRsZS1lbmRpYW4uXG5cdFx0XHRzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoIGFycmF5WyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cblx0XHRcdC8vIG1lcmdlcyBtdWx0aS1ieXRlIHV0Zi04IGNoYXJhY3RlcnMuXG5cblx0XHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoIGVzY2FwZSggcyApICk7XG5cblx0XHR9IGNhdGNoICggZSApIHsgLy8gc2VlICMxNjM1OFxuXG5cdFx0XHRyZXR1cm4gcztcblxuXHRcdH1cblxuXHR9XG5cblx0c3RhdGljIGV4dHJhY3RVcmxCYXNlKCB1cmwgKSB7XG5cblx0XHRjb25zdCBpbmRleCA9IHVybC5sYXN0SW5kZXhPZiggJy8nICk7XG5cblx0XHRpZiAoIGluZGV4ID09PSAtIDEgKSByZXR1cm4gJy4vJztcblxuXHRcdHJldHVybiB1cmwuc3Vic3RyKCAwLCBpbmRleCArIDEgKTtcblxuXHR9XG5cblx0c3RhdGljIHJlc29sdmVVUkwoIHVybCwgcGF0aCApIHtcblxuXHRcdC8vIEludmFsaWQgVVJMXG5cdFx0aWYgKCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyB8fCB1cmwgPT09ICcnICkgcmV0dXJuICcnO1xuXG5cdFx0Ly8gSG9zdCBSZWxhdGl2ZSBVUkxcblx0XHRpZiAoIC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QoIHBhdGggKSAmJiAvXlxcLy8udGVzdCggdXJsICkgKSB7XG5cblx0XHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoIC8oXmh0dHBzPzpcXC9cXC9bXlxcL10rKS4qL2ksICckMScgKTtcblxuXHRcdH1cblxuXHRcdC8vIEFic29sdXRlIFVSTCBodHRwOi8vLGh0dHBzOi8vLC8vXG5cdFx0aWYgKCAvXihodHRwcz86KT9cXC9cXC8vaS50ZXN0KCB1cmwgKSApIHJldHVybiB1cmw7XG5cblx0XHQvLyBEYXRhIFVSSVxuXHRcdGlmICggL15kYXRhOi4qLC4qJC9pLnRlc3QoIHVybCApICkgcmV0dXJuIHVybDtcblxuXHRcdC8vIEJsb2IgVVJMXG5cdFx0aWYgKCAvXmJsb2I6LiokL2kudGVzdCggdXJsICkgKSByZXR1cm4gdXJsO1xuXG5cdFx0Ly8gUmVsYXRpdmUgVVJMXG5cdFx0cmV0dXJuIHBhdGggKyB1cmw7XG5cblx0fVxuXG59XG5cbmNsYXNzIEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSc7XG5cdFx0dGhpcy5pbnN0YW5jZUNvdW50ID0gSW5maW5pdHk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5pbnN0YW5jZUNvdW50ID0gc291cmNlLmluc3RhbmNlQ291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oIHRoaXMgKTtcblxuXHRcdGRhdGEuaW5zdGFuY2VDb3VudCA9IHRoaXMuaW5zdGFuY2VDb3VudDtcblxuXHRcdGRhdGEuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSB0cnVlO1xuXG5jbGFzcyBCdWZmZXJHZW9tZXRyeUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHNjb3BlLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggc2NvcGUucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHNjb3BlLndpdGhDcmVkZW50aWFscyApO1xuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggdGV4dCApIHtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBhcnNlKCB0ZXh0ICkgKSApO1xuXG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRpZiAoIG9uRXJyb3IgKSB7XG5cblx0XHRcdFx0XHRvbkVycm9yKCBlICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXG5cdFx0XHR9XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0fVxuXG5cdHBhcnNlKCBqc29uICkge1xuXG5cdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXJNYXAgPSB7fTtcblx0XHRjb25zdCBhcnJheUJ1ZmZlck1hcCA9IHt9O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0SW50ZXJsZWF2ZWRCdWZmZXIoIGpzb24sIHV1aWQgKSB7XG5cblx0XHRcdGlmICggaW50ZXJsZWF2ZWRCdWZmZXJNYXBbIHV1aWQgXSAhPT0gdW5kZWZpbmVkICkgcmV0dXJuIGludGVybGVhdmVkQnVmZmVyTWFwWyB1dWlkIF07XG5cblx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVycyA9IGpzb24uaW50ZXJsZWF2ZWRCdWZmZXJzO1xuXHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXIgPSBpbnRlcmxlYXZlZEJ1ZmZlcnNbIHV1aWQgXTtcblxuXHRcdFx0Y29uc3QgYnVmZmVyID0gZ2V0QXJyYXlCdWZmZXIoIGpzb24sIGludGVybGVhdmVkQnVmZmVyLmJ1ZmZlciApO1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IGdldFR5cGVkQXJyYXkoIGludGVybGVhdmVkQnVmZmVyLnR5cGUsIGJ1ZmZlciApO1xuXHRcdFx0Y29uc3QgaWIgPSBuZXcgSW50ZXJsZWF2ZWRCdWZmZXIoIGFycmF5LCBpbnRlcmxlYXZlZEJ1ZmZlci5zdHJpZGUgKTtcblx0XHRcdGliLnV1aWQgPSBpbnRlcmxlYXZlZEJ1ZmZlci51dWlkO1xuXG5cdFx0XHRpbnRlcmxlYXZlZEJ1ZmZlck1hcFsgdXVpZCBdID0gaWI7XG5cblx0XHRcdHJldHVybiBpYjtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKCBqc29uLCB1dWlkICkge1xuXG5cdFx0XHRpZiAoIGFycmF5QnVmZmVyTWFwWyB1dWlkIF0gIT09IHVuZGVmaW5lZCApIHJldHVybiBhcnJheUJ1ZmZlck1hcFsgdXVpZCBdO1xuXG5cdFx0XHRjb25zdCBhcnJheUJ1ZmZlcnMgPSBqc29uLmFycmF5QnVmZmVycztcblx0XHRcdGNvbnN0IGFycmF5QnVmZmVyID0gYXJyYXlCdWZmZXJzWyB1dWlkIF07XG5cblx0XHRcdGNvbnN0IGFiID0gbmV3IFVpbnQzMkFycmF5KCBhcnJheUJ1ZmZlciApLmJ1ZmZlcjtcblxuXHRcdFx0YXJyYXlCdWZmZXJNYXBbIHV1aWQgXSA9IGFiO1xuXG5cdFx0XHRyZXR1cm4gYWI7XG5cblx0XHR9XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IGpzb24uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSA/IG5ldyBJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSgpIDogbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRjb25zdCBpbmRleCA9IGpzb24uZGF0YS5pbmRleDtcblxuXHRcdGlmICggaW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgdHlwZWRBcnJheSA9IGdldFR5cGVkQXJyYXkoIGluZGV4LnR5cGUsIGluZGV4LmFycmF5ICk7XG5cdFx0XHRnZW9tZXRyeS5zZXRJbmRleCggbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdHlwZWRBcnJheSwgMSApICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0ganNvbi5kYXRhLmF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gYXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07XG5cdFx0XHRsZXQgYnVmZmVyQXR0cmlidXRlO1xuXG5cdFx0XHRpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyID0gZ2V0SW50ZXJsZWF2ZWRCdWZmZXIoIGpzb24uZGF0YSwgYXR0cmlidXRlLmRhdGEgKTtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxlYXZlZEJ1ZmZlciwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUub2Zmc2V0LCBhdHRyaWJ1dGUubm9ybWFsaXplZCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnN0IHR5cGVkQXJyYXkgPSBnZXRUeXBlZEFycmF5KCBhdHRyaWJ1dGUudHlwZSwgYXR0cmlidXRlLmFycmF5ICk7XG5cdFx0XHRcdGNvbnN0IGJ1ZmZlckF0dHJpYnV0ZUNvbnN0ciA9IGF0dHJpYnV0ZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA/IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA6IEJ1ZmZlckF0dHJpYnV0ZTtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IGJ1ZmZlckF0dHJpYnV0ZUNvbnN0ciggdHlwZWRBcnJheSwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUubm9ybWFsaXplZCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggYXR0cmlidXRlLm5hbWUgIT09IHVuZGVmaW5lZCApIGJ1ZmZlckF0dHJpYnV0ZS5uYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRpZiAoIGF0dHJpYnV0ZS51c2FnZSAhPT0gdW5kZWZpbmVkICkgYnVmZmVyQXR0cmlidXRlLnNldFVzYWdlKCBhdHRyaWJ1dGUudXNhZ2UgKTtcblxuXHRcdFx0aWYgKCBhdHRyaWJ1dGUudXBkYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUudXBkYXRlUmFuZ2Uub2Zmc2V0ID0gYXR0cmlidXRlLnVwZGF0ZVJhbmdlLm9mZnNldDtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlLnVwZGF0ZVJhbmdlLmNvdW50ID0gYXR0cmlidXRlLnVwZGF0ZVJhbmdlLmNvdW50O1xuXG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgga2V5LCBidWZmZXJBdHRyaWJ1dGUgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGpzb24uZGF0YS5tb3JwaEF0dHJpYnV0ZXM7XG5cblx0XHRpZiAoIG1vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0Zm9yICggY29uc3Qga2V5IGluIG1vcnBoQXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheSA9IG1vcnBoQXR0cmlidXRlc1sga2V5IF07XG5cblx0XHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBcnJheVsgaSBdO1xuXHRcdFx0XHRcdGxldCBidWZmZXJBdHRyaWJ1dGU7XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IGdldEludGVybGVhdmVkQnVmZmVyKCBqc29uLmRhdGEsIGF0dHJpYnV0ZS5kYXRhICk7XG5cdFx0XHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUgPSBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoIGludGVybGVhdmVkQnVmZmVyLCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5vZmZzZXQsIGF0dHJpYnV0ZS5ub3JtYWxpemVkICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRjb25zdCB0eXBlZEFycmF5ID0gZ2V0VHlwZWRBcnJheSggYXR0cmlidXRlLnR5cGUsIGF0dHJpYnV0ZS5hcnJheSApO1xuXHRcdFx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdHlwZWRBcnJheSwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUubm9ybWFsaXplZCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGUubmFtZSAhPT0gdW5kZWZpbmVkICkgYnVmZmVyQXR0cmlidXRlLm5hbWUgPSBhdHRyaWJ1dGUubmFtZTtcblx0XHRcdFx0XHRhcnJheS5wdXNoKCBidWZmZXJBdHRyaWJ1dGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzWyBrZXkgXSA9IGFycmF5O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaFRhcmdldHNSZWxhdGl2ZSA9IGpzb24uZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblxuXHRcdGlmICggbW9ycGhUYXJnZXRzUmVsYXRpdmUgKSB7XG5cblx0XHRcdGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGdyb3VwcyA9IGpzb24uZGF0YS5ncm91cHMgfHwganNvbi5kYXRhLmRyYXdjYWxscyB8fCBqc29uLmRhdGEub2Zmc2V0cztcblxuXHRcdGlmICggZ3JvdXBzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGdyb3Vwcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGkgXTtcblxuXHRcdFx0XHRnZW9tZXRyeS5hZGRHcm91cCggZ3JvdXAuc3RhcnQsIGdyb3VwLmNvdW50LCBncm91cC5tYXRlcmlhbEluZGV4ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGJvdW5kaW5nU3BoZXJlID0ganNvbi5kYXRhLmJvdW5kaW5nU3BoZXJlO1xuXG5cdFx0aWYgKCBib3VuZGluZ1NwaGVyZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRpZiAoIGJvdW5kaW5nU3BoZXJlLmNlbnRlciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNlbnRlci5mcm9tQXJyYXkoIGJvdW5kaW5nU3BoZXJlLmNlbnRlciApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID0gbmV3IFNwaGVyZSggY2VudGVyLCBib3VuZGluZ1NwaGVyZS5yYWRpdXMgKTtcblxuXHRcdH1cblxuXHRcdGlmICgganNvbi5uYW1lICkgZ2VvbWV0cnkubmFtZSA9IGpzb24ubmFtZTtcblx0XHRpZiAoIGpzb24udXNlckRhdGEgKSBnZW9tZXRyeS51c2VyRGF0YSA9IGpzb24udXNlckRhdGE7XG5cblx0XHRyZXR1cm4gZ2VvbWV0cnk7XG5cblx0fVxuXG59XG5cbmNsYXNzIE9iamVjdExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IHBhdGggPSAoIHRoaXMucGF0aCA9PT0gJycgKSA/IExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCB1cmwgKSA6IHRoaXMucGF0aDtcblx0XHR0aGlzLnJlc291cmNlUGF0aCA9IHRoaXMucmVzb3VyY2VQYXRoIHx8IHBhdGg7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCB0aGlzLnJlcXVlc3RIZWFkZXIgKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCB0aGlzLndpdGhDcmVkZW50aWFscyApO1xuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggdGV4dCApIHtcblxuXHRcdFx0bGV0IGpzb24gPSBudWxsO1xuXG5cdFx0XHR0cnkge1xuXG5cdFx0XHRcdGpzb24gPSBKU09OLnBhcnNlKCB0ZXh0ICk7XG5cblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblxuXHRcdFx0XHRpZiAoIG9uRXJyb3IgIT09IHVuZGVmaW5lZCApIG9uRXJyb3IoIGVycm9yICk7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFOk9iamVjdExvYWRlcjogQ2FuXFwndCBwYXJzZSAnICsgdXJsICsgJy4nLCBlcnJvci5tZXNzYWdlICk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1ldGFkYXRhID0ganNvbi5tZXRhZGF0YTtcblxuXHRcdFx0aWYgKCBtZXRhZGF0YSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdnZW9tZXRyeScgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk9iamVjdExvYWRlcjogQ2FuXFwndCBsb2FkICcgKyB1cmwgKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHRcdHNjb3BlLnBhcnNlKCBqc29uLCBvbkxvYWQgKTtcblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHR9XG5cblx0YXN5bmMgbG9hZEFzeW5jKCB1cmwsIG9uUHJvZ3Jlc3MgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBwYXRoID0gKCB0aGlzLnBhdGggPT09ICcnICkgPyBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSggdXJsICkgOiB0aGlzLnBhdGg7XG5cdFx0dGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnJlc291cmNlUGF0aCB8fCBwYXRoO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggdGhpcy5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggdGhpcy53aXRoQ3JlZGVudGlhbHMgKTtcblxuXHRcdGNvbnN0IHRleHQgPSBhd2FpdCBsb2FkZXIubG9hZEFzeW5jKCB1cmwsIG9uUHJvZ3Jlc3MgKTtcblxuXHRcdGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKCB0ZXh0ICk7XG5cblx0XHRjb25zdCBtZXRhZGF0YSA9IGpzb24ubWV0YWRhdGE7XG5cblx0XHRpZiAoIG1ldGFkYXRhID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2dlb21ldHJ5JyApIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW5cXCd0IGxvYWQgJyArIHVybCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGF3YWl0IHNjb3BlLnBhcnNlQXN5bmMoIGpzb24gKTtcblxuXHR9XG5cblx0cGFyc2UoIGpzb24sIG9uTG9hZCApIHtcblxuXHRcdGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLnBhcnNlQW5pbWF0aW9ucygganNvbi5hbmltYXRpb25zICk7XG5cdFx0Y29uc3Qgc2hhcGVzID0gdGhpcy5wYXJzZVNoYXBlcygganNvbi5zaGFwZXMgKTtcblx0XHRjb25zdCBnZW9tZXRyaWVzID0gdGhpcy5wYXJzZUdlb21ldHJpZXMoIGpzb24uZ2VvbWV0cmllcywgc2hhcGVzICk7XG5cblx0XHRjb25zdCBpbWFnZXMgPSB0aGlzLnBhcnNlSW1hZ2VzKCBqc29uLmltYWdlcywgZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRpZiAoIG9uTG9hZCAhPT0gdW5kZWZpbmVkICkgb25Mb2FkKCBvYmplY3QgKTtcblxuXHRcdH0gKTtcblxuXHRcdGNvbnN0IHRleHR1cmVzID0gdGhpcy5wYXJzZVRleHR1cmVzKCBqc29uLnRleHR1cmVzLCBpbWFnZXMgKTtcblx0XHRjb25zdCBtYXRlcmlhbHMgPSB0aGlzLnBhcnNlTWF0ZXJpYWxzKCBqc29uLm1hdGVyaWFscywgdGV4dHVyZXMgKTtcblxuXHRcdGNvbnN0IG9iamVjdCA9IHRoaXMucGFyc2VPYmplY3QoIGpzb24ub2JqZWN0LCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMsIHRleHR1cmVzLCBhbmltYXRpb25zICk7XG5cdFx0Y29uc3Qgc2tlbGV0b25zID0gdGhpcy5wYXJzZVNrZWxldG9ucygganNvbi5za2VsZXRvbnMsIG9iamVjdCApO1xuXG5cdFx0dGhpcy5iaW5kU2tlbGV0b25zKCBvYmplY3QsIHNrZWxldG9ucyApO1xuXG5cdFx0Ly9cblxuXHRcdGlmICggb25Mb2FkICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGxldCBoYXNJbWFnZXMgPSBmYWxzZTtcblxuXHRcdFx0Zm9yICggY29uc3QgdXVpZCBpbiBpbWFnZXMgKSB7XG5cblx0XHRcdFx0aWYgKCBpbWFnZXNbIHV1aWQgXSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB7XG5cblx0XHRcdFx0XHRoYXNJbWFnZXMgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc0ltYWdlcyA9PT0gZmFsc2UgKSBvbkxvYWQoIG9iamVjdCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iamVjdDtcblxuXHR9XG5cblx0YXN5bmMgcGFyc2VBc3luYygganNvbiApIHtcblxuXHRcdGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLnBhcnNlQW5pbWF0aW9ucygganNvbi5hbmltYXRpb25zICk7XG5cdFx0Y29uc3Qgc2hhcGVzID0gdGhpcy5wYXJzZVNoYXBlcygganNvbi5zaGFwZXMgKTtcblx0XHRjb25zdCBnZW9tZXRyaWVzID0gdGhpcy5wYXJzZUdlb21ldHJpZXMoIGpzb24uZ2VvbWV0cmllcywgc2hhcGVzICk7XG5cblx0XHRjb25zdCBpbWFnZXMgPSBhd2FpdCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmMoIGpzb24uaW1hZ2VzICk7XG5cblx0XHRjb25zdCB0ZXh0dXJlcyA9IHRoaXMucGFyc2VUZXh0dXJlcygganNvbi50ZXh0dXJlcywgaW1hZ2VzICk7XG5cdFx0Y29uc3QgbWF0ZXJpYWxzID0gdGhpcy5wYXJzZU1hdGVyaWFscygganNvbi5tYXRlcmlhbHMsIHRleHR1cmVzICk7XG5cblx0XHRjb25zdCBvYmplY3QgPSB0aGlzLnBhcnNlT2JqZWN0KCBqc29uLm9iamVjdCwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucyApO1xuXHRcdGNvbnN0IHNrZWxldG9ucyA9IHRoaXMucGFyc2VTa2VsZXRvbnMoIGpzb24uc2tlbGV0b25zLCBvYmplY3QgKTtcblxuXHRcdHRoaXMuYmluZFNrZWxldG9ucyggb2JqZWN0LCBza2VsZXRvbnMgKTtcblxuXHRcdHJldHVybiBvYmplY3Q7XG5cblx0fVxuXG5cdHBhcnNlU2hhcGVzKCBqc29uICkge1xuXG5cdFx0Y29uc3Qgc2hhcGVzID0ge307XG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNoYXBlID0gbmV3IFNoYXBlKCkuZnJvbUpTT04oIGpzb25bIGkgXSApO1xuXG5cdFx0XHRcdHNoYXBlc1sgc2hhcGUudXVpZCBdID0gc2hhcGU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBzaGFwZXM7XG5cblx0fVxuXG5cdHBhcnNlU2tlbGV0b25zKCBqc29uLCBvYmplY3QgKSB7XG5cblx0XHRjb25zdCBza2VsZXRvbnMgPSB7fTtcblx0XHRjb25zdCBib25lcyA9IHt9O1xuXG5cdFx0Ly8gZ2VuZXJhdGUgYm9uZSBsb29rdXAgdGFibGVcblxuXHRcdG9iamVjdC50cmF2ZXJzZSggZnVuY3Rpb24gKCBjaGlsZCApIHtcblxuXHRcdFx0aWYgKCBjaGlsZC5pc0JvbmUgKSBib25lc1sgY2hpbGQudXVpZCBdID0gY2hpbGQ7XG5cblx0XHR9ICk7XG5cblx0XHQvLyBjcmVhdGUgc2tlbGV0b25zXG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNrZWxldG9uID0gbmV3IFNrZWxldG9uKCkuZnJvbUpTT04oIGpzb25bIGkgXSwgYm9uZXMgKTtcblxuXHRcdFx0XHRza2VsZXRvbnNbIHNrZWxldG9uLnV1aWQgXSA9IHNrZWxldG9uO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gc2tlbGV0b25zO1xuXG5cdH1cblxuXHRwYXJzZUdlb21ldHJpZXMoIGpzb24sIHNoYXBlcyApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJpZXMgPSB7fTtcblxuXHRcdGlmICgganNvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBidWZmZXJHZW9tZXRyeUxvYWRlciA9IG5ldyBCdWZmZXJHZW9tZXRyeUxvYWRlcigpO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0bGV0IGdlb21ldHJ5O1xuXHRcdFx0XHRjb25zdCBkYXRhID0ganNvblsgaSBdO1xuXG5cdFx0XHRcdHN3aXRjaCAoIGRhdGEudHlwZSApIHtcblxuXHRcdFx0XHRcdGNhc2UgJ0J1ZmZlckdlb21ldHJ5Jzpcblx0XHRcdFx0XHRjYXNlICdJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSc6XG5cblx0XHRcdFx0XHRcdGdlb21ldHJ5ID0gYnVmZmVyR2VvbWV0cnlMb2FkZXIucGFyc2UoIGRhdGEgKTtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdHZW9tZXRyeSc6XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmplY3RMb2FkZXI6IFRoZSBsZWdhY3kgR2VvbWV0cnkgdHlwZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicgKTtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0XHRpZiAoIGRhdGEudHlwZSBpbiBHZW9tZXRyaWVzICkge1xuXG5cdFx0XHRcdFx0XHRcdGdlb21ldHJ5ID0gR2VvbWV0cmllc1sgZGF0YS50eXBlIF0uZnJvbUpTT04oIGRhdGEsIHNoYXBlcyApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiggYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSBcIiR7IGRhdGEudHlwZSB9XCJgICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkudXVpZCA9IGRhdGEudXVpZDtcblxuXHRcdFx0XHRpZiAoIGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkICkgZ2VvbWV0cnkubmFtZSA9IGRhdGEubmFtZTtcblx0XHRcdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ID09PSB0cnVlICYmIGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCApIGdlb21ldHJ5LnVzZXJEYXRhID0gZGF0YS51c2VyRGF0YTtcblxuXHRcdFx0XHRnZW9tZXRyaWVzWyBkYXRhLnV1aWQgXSA9IGdlb21ldHJ5O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZ2VvbWV0cmllcztcblxuXHR9XG5cblx0cGFyc2VNYXRlcmlhbHMoIGpzb24sIHRleHR1cmVzICkge1xuXG5cdFx0Y29uc3QgY2FjaGUgPSB7fTsgLy8gTXVsdGlNYXRlcmlhbFxuXHRcdGNvbnN0IG1hdGVyaWFscyA9IHt9O1xuXG5cdFx0aWYgKCBqc29uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IGxvYWRlciA9IG5ldyBNYXRlcmlhbExvYWRlcigpO1xuXHRcdFx0bG9hZGVyLnNldFRleHR1cmVzKCB0ZXh0dXJlcyApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25bIGkgXTtcblxuXHRcdFx0XHRpZiAoIGRhdGEudHlwZSA9PT0gJ011bHRpTWF0ZXJpYWwnICkge1xuXG5cdFx0XHRcdFx0Ly8gRGVwcmVjYXRlZFxuXG5cdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IGRhdGEubWF0ZXJpYWxzLmxlbmd0aDsgaiArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBkYXRhLm1hdGVyaWFsc1sgaiBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGNhY2hlWyBtYXRlcmlhbC51dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZVsgbWF0ZXJpYWwudXVpZCBdID0gbG9hZGVyLnBhcnNlKCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFycmF5LnB1c2goIGNhY2hlWyBtYXRlcmlhbC51dWlkIF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1hdGVyaWFsc1sgZGF0YS51dWlkIF0gPSBhcnJheTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCBjYWNoZVsgZGF0YS51dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0Y2FjaGVbIGRhdGEudXVpZCBdID0gbG9hZGVyLnBhcnNlKCBkYXRhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtYXRlcmlhbHNbIGRhdGEudXVpZCBdID0gY2FjaGVbIGRhdGEudXVpZCBdO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGVyaWFscztcblxuXHR9XG5cblx0cGFyc2VBbmltYXRpb25zKCBqc29uICkge1xuXG5cdFx0Y29uc3QgYW5pbWF0aW9ucyA9IHt9O1xuXG5cdFx0aWYgKCBqc29uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uWyBpIF07XG5cblx0XHRcdFx0Y29uc3QgY2xpcCA9IEFuaW1hdGlvbkNsaXAucGFyc2UoIGRhdGEgKTtcblxuXHRcdFx0XHRhbmltYXRpb25zWyBjbGlwLnV1aWQgXSA9IGNsaXA7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBhbmltYXRpb25zO1xuXG5cdH1cblxuXHRwYXJzZUltYWdlcygganNvbiwgb25Mb2FkICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGltYWdlcyA9IHt9O1xuXG5cdFx0bGV0IGxvYWRlcjtcblxuXHRcdGZ1bmN0aW9uIGxvYWRJbWFnZSggdXJsICkge1xuXG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0XHRcdHJldHVybiBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdFx0fSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0XHR9ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBkZXNlcmlhbGl6ZUltYWdlKCBpbWFnZSApIHtcblxuXHRcdFx0aWYgKCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnICkge1xuXG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlO1xuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSAvXihcXC9cXC8pfChbYS16XSs6KFxcL1xcLyk/KS9pLnRlc3QoIHVybCApID8gdXJsIDogc2NvcGUucmVzb3VyY2VQYXRoICsgdXJsO1xuXG5cdFx0XHRcdHJldHVybiBsb2FkSW1hZ2UoIHBhdGggKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIGltYWdlLmRhdGEgKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZGF0YTogZ2V0VHlwZWRBcnJheSggaW1hZ2UudHlwZSwgaW1hZ2UuZGF0YSApLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICgganNvbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Y29uc3QgbWFuYWdlciA9IG5ldyBMb2FkaW5nTWFuYWdlciggb25Mb2FkICk7XG5cblx0XHRcdGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggbWFuYWdlciApO1xuXHRcdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBqc29uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGltYWdlID0ganNvblsgaSBdO1xuXHRcdFx0XHRjb25zdCB1cmwgPSBpbWFnZS51cmw7XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB1cmwgKSApIHtcblxuXHRcdFx0XHRcdC8vIGxvYWQgYXJyYXkgb2YgaW1hZ2VzIGUuZyBDdWJlVGV4dHVyZVxuXG5cdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMCwgamwgPSB1cmwubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRVcmwgPSB1cmxbIGogXTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGVzZXJpYWxpemVkSW1hZ2UgPSBkZXNlcmlhbGl6ZUltYWdlKCBjdXJyZW50VXJsICk7XG5cblx0XHRcdFx0XHRcdGlmICggZGVzZXJpYWxpemVkSW1hZ2UgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBkZXNlcmlhbGl6ZWRJbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRpbWFnZXNbIGltYWdlLnV1aWQgXS5wdXNoKCBkZXNlcmlhbGl6ZWRJbWFnZSApO1xuXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBzcGVjaWFsIGNhc2U6IGhhbmRsZSBhcnJheSBvZiBkYXRhIHRleHR1cmVzIGZvciBjdWJlIHRleHR1cmVzXG5cblx0XHRcdFx0XHRcdFx0XHRpbWFnZXNbIGltYWdlLnV1aWQgXS5wdXNoKCBuZXcgRGF0YVRleHR1cmUoIGRlc2VyaWFsaXplZEltYWdlLmRhdGEsIGRlc2VyaWFsaXplZEltYWdlLndpZHRoLCBkZXNlcmlhbGl6ZWRJbWFnZS5oZWlnaHQgKSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBsb2FkIHNpbmdsZSBpbWFnZVxuXG5cdFx0XHRcdFx0Y29uc3QgZGVzZXJpYWxpemVkSW1hZ2UgPSBkZXNlcmlhbGl6ZUltYWdlKCBpbWFnZS51cmwgKTtcblxuXHRcdFx0XHRcdGlmICggZGVzZXJpYWxpemVkSW1hZ2UgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdGltYWdlc1sgaW1hZ2UudXVpZCBdID0gZGVzZXJpYWxpemVkSW1hZ2U7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gaW1hZ2VzO1xuXG5cdH1cblxuXHRhc3luYyBwYXJzZUltYWdlc0FzeW5jKCBqc29uICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGltYWdlcyA9IHt9O1xuXG5cdFx0bGV0IGxvYWRlcjtcblxuXHRcdGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplSW1hZ2UoIGltYWdlICkge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycgKSB7XG5cblx0XHRcdFx0Y29uc3QgdXJsID0gaW1hZ2U7XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IC9eKFxcL1xcLyl8KFthLXpdKzooXFwvXFwvKT8pL2kudGVzdCggdXJsICkgPyB1cmwgOiBzY29wZS5yZXNvdXJjZVBhdGggKyB1cmw7XG5cblx0XHRcdFx0cmV0dXJuIGF3YWl0IGxvYWRlci5sb2FkQXN5bmMoIHBhdGggKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIGltYWdlLmRhdGEgKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZGF0YTogZ2V0VHlwZWRBcnJheSggaW1hZ2UudHlwZSwgaW1hZ2UuZGF0YSApLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICgganNvbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0bG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTtcblx0XHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0ganNvbi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbWFnZSA9IGpzb25bIGkgXTtcblx0XHRcdFx0Y29uc3QgdXJsID0gaW1hZ2UudXJsO1xuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdXJsICkgKSB7XG5cblx0XHRcdFx0XHQvLyBsb2FkIGFycmF5IG9mIGltYWdlcyBlLmcgQ3ViZVRleHR1cmVcblxuXHRcdFx0XHRcdGltYWdlc1sgaW1hZ2UudXVpZCBdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIGpsID0gdXJsLmxlbmd0aDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VXJsID0gdXJsWyBqIF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gYXdhaXQgZGVzZXJpYWxpemVJbWFnZSggY3VycmVudFVybCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggZGVzZXJpYWxpemVkSW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0ucHVzaCggZGVzZXJpYWxpemVkSW1hZ2UgKTtcblxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgYXJyYXkgb2YgZGF0YSB0ZXh0dXJlcyBmb3IgY3ViZSB0ZXh0dXJlc1xuXG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0ucHVzaCggbmV3IERhdGFUZXh0dXJlKCBkZXNlcmlhbGl6ZWRJbWFnZS5kYXRhLCBkZXNlcmlhbGl6ZWRJbWFnZS53aWR0aCwgZGVzZXJpYWxpemVkSW1hZ2UuaGVpZ2h0ICkgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gbG9hZCBzaW5nbGUgaW1hZ2VcblxuXHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gYXdhaXQgZGVzZXJpYWxpemVJbWFnZSggaW1hZ2UudXJsICk7XG5cblx0XHRcdFx0XHRpZiAoIGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRpbWFnZXNbIGltYWdlLnV1aWQgXSA9IGRlc2VyaWFsaXplZEltYWdlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlcztcblxuXHR9XG5cblx0cGFyc2VUZXh0dXJlcygganNvbiwgaW1hZ2VzICkge1xuXG5cdFx0ZnVuY3Rpb24gcGFyc2VDb25zdGFudCggdmFsdWUsIHR5cGUgKSB7XG5cblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyApIHJldHVybiB2YWx1ZTtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4nLCB2YWx1ZSApO1xuXG5cdFx0XHRyZXR1cm4gdHlwZVsgdmFsdWUgXTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRleHR1cmVzID0ge307XG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uWyBpIF07XG5cblx0XHRcdFx0aWYgKCBkYXRhLmltYWdlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IE5vIFwiaW1hZ2VcIiBzcGVjaWZpZWQgZm9yJywgZGF0YS51dWlkICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggaW1hZ2VzWyBkYXRhLmltYWdlIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGltYWdlJywgZGF0YS5pbWFnZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgdGV4dHVyZTtcblx0XHRcdFx0Y29uc3QgaW1hZ2UgPSBpbWFnZXNbIGRhdGEuaW1hZ2UgXTtcblxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGltYWdlICkgKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlID0gbmV3IEN1YmVUZXh0dXJlKCBpbWFnZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBpbWFnZS5sZW5ndGggPT09IDYgKSB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCBpbWFnZSAmJiBpbWFnZS5kYXRhICkge1xuXG5cdFx0XHRcdFx0XHR0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKCBpbWFnZS5kYXRhLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR0ZXh0dXJlID0gbmV3IFRleHR1cmUoIGltYWdlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGltYWdlICkgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7IC8vIHRleHR1cmVzIGNhbiBoYXZlIHVuZGVmaW5lZCBpbWFnZSBkYXRhXG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUudXVpZCA9IGRhdGEudXVpZDtcblxuXHRcdFx0XHRpZiAoIGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5uYW1lID0gZGF0YS5uYW1lO1xuXG5cdFx0XHRcdGlmICggZGF0YS5tYXBwaW5nICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm1hcHBpbmcgPSBwYXJzZUNvbnN0YW50KCBkYXRhLm1hcHBpbmcsIFRFWFRVUkVfTUFQUElORyApO1xuXG5cdFx0XHRcdGlmICggZGF0YS5vZmZzZXQgIT09IHVuZGVmaW5lZCApIHRleHR1cmUub2Zmc2V0LmZyb21BcnJheSggZGF0YS5vZmZzZXQgKTtcblx0XHRcdFx0aWYgKCBkYXRhLnJlcGVhdCAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5yZXBlYXQuZnJvbUFycmF5KCBkYXRhLnJlcGVhdCApO1xuXHRcdFx0XHRpZiAoIGRhdGEuY2VudGVyICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmNlbnRlci5mcm9tQXJyYXkoIGRhdGEuY2VudGVyICk7XG5cdFx0XHRcdGlmICggZGF0YS5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5yb3RhdGlvbiA9IGRhdGEucm90YXRpb247XG5cblx0XHRcdFx0aWYgKCBkYXRhLndyYXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRleHR1cmUud3JhcFMgPSBwYXJzZUNvbnN0YW50KCBkYXRhLndyYXBbIDAgXSwgVEVYVFVSRV9XUkFQUElORyApO1xuXHRcdFx0XHRcdHRleHR1cmUud3JhcFQgPSBwYXJzZUNvbnN0YW50KCBkYXRhLndyYXBbIDEgXSwgVEVYVFVSRV9XUkFQUElORyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGRhdGEuZm9ybWF0ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmZvcm1hdCA9IGRhdGEuZm9ybWF0O1xuXHRcdFx0XHRpZiAoIGRhdGEudHlwZSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS50eXBlID0gZGF0YS50eXBlO1xuXHRcdFx0XHRpZiAoIGRhdGEuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCApIHRleHR1cmUuZW5jb2RpbmcgPSBkYXRhLmVuY29kaW5nO1xuXG5cdFx0XHRcdGlmICggZGF0YS5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCApIHRleHR1cmUubWluRmlsdGVyID0gcGFyc2VDb25zdGFudCggZGF0YS5taW5GaWx0ZXIsIFRFWFRVUkVfRklMVEVSICk7XG5cdFx0XHRcdGlmICggZGF0YS5tYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCApIHRleHR1cmUubWFnRmlsdGVyID0gcGFyc2VDb25zdGFudCggZGF0YS5tYWdGaWx0ZXIsIFRFWFRVUkVfRklMVEVSICk7XG5cdFx0XHRcdGlmICggZGF0YS5hbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmFuaXNvdHJvcHkgPSBkYXRhLmFuaXNvdHJvcHk7XG5cblx0XHRcdFx0aWYgKCBkYXRhLmZsaXBZICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmZsaXBZID0gZGF0YS5mbGlwWTtcblxuXHRcdFx0XHRpZiAoIGRhdGEucHJlbXVsdGlwbHlBbHBoYSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gZGF0YS5wcmVtdWx0aXBseUFscGhhO1xuXHRcdFx0XHRpZiAoIGRhdGEudW5wYWNrQWxpZ25tZW50ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLnVucGFja0FsaWdubWVudCA9IGRhdGEudW5wYWNrQWxpZ25tZW50O1xuXG5cdFx0XHRcdGlmICggZGF0YS51c2VyRGF0YSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS51c2VyRGF0YSA9IGRhdGEudXNlckRhdGE7XG5cblx0XHRcdFx0dGV4dHVyZXNbIGRhdGEudXVpZCBdID0gdGV4dHVyZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmVzO1xuXG5cdH1cblxuXHRwYXJzZU9iamVjdCggZGF0YSwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucyApIHtcblxuXHRcdGxldCBvYmplY3Q7XG5cblx0XHRmdW5jdGlvbiBnZXRHZW9tZXRyeSggbmFtZSApIHtcblxuXHRcdFx0aWYgKCBnZW9tZXRyaWVzWyBuYW1lIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeScsIG5hbWUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZ2VvbWV0cmllc1sgbmFtZSBdO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0TWF0ZXJpYWwoIG5hbWUgKSB7XG5cblx0XHRcdGlmICggbmFtZSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cblx0XHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB1dWlkID0gbmFtZVsgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCBtYXRlcmlhbHNbIHV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCcsIHV1aWQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFycmF5LnB1c2goIG1hdGVyaWFsc1sgdXVpZCBdICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsc1sgbmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwnLCBuYW1lICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGVyaWFsc1sgbmFtZSBdO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0VGV4dHVyZSggdXVpZCApIHtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlc1sgdXVpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIHV1aWQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGV4dHVyZXNbIHV1aWQgXTtcblxuXHRcdH1cblxuXHRcdGxldCBnZW9tZXRyeSwgbWF0ZXJpYWw7XG5cblx0XHRzd2l0Y2ggKCBkYXRhLnR5cGUgKSB7XG5cblx0XHRcdGNhc2UgJ1NjZW5lJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgU2NlbmUoKTtcblxuXHRcdFx0XHRpZiAoIGRhdGEuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0aWYgKCBOdW1iZXIuaXNJbnRlZ2VyKCBkYXRhLmJhY2tncm91bmQgKSApIHtcblxuXHRcdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSBuZXcgQ29sb3IoIGRhdGEuYmFja2dyb3VuZCApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSBnZXRUZXh0dXJlKCBkYXRhLmJhY2tncm91bmQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBkYXRhLmVudmlyb25tZW50ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRvYmplY3QuZW52aXJvbm1lbnQgPSBnZXRUZXh0dXJlKCBkYXRhLmVudmlyb25tZW50ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZGF0YS5mb2cgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGlmICggZGF0YS5mb2cudHlwZSA9PT0gJ0ZvZycgKSB7XG5cblx0XHRcdFx0XHRcdG9iamVjdC5mb2cgPSBuZXcgRm9nKCBkYXRhLmZvZy5jb2xvciwgZGF0YS5mb2cubmVhciwgZGF0YS5mb2cuZmFyICk7XG5cblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBkYXRhLmZvZy50eXBlID09PSAnRm9nRXhwMicgKSB7XG5cblx0XHRcdFx0XHRcdG9iamVjdC5mb2cgPSBuZXcgRm9nRXhwMiggZGF0YS5mb2cuY29sb3IsIGRhdGEuZm9nLmRlbnNpdHkgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1BlcnNwZWN0aXZlQ2FtZXJhJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGRhdGEuZm92LCBkYXRhLmFzcGVjdCwgZGF0YS5uZWFyLCBkYXRhLmZhciApO1xuXG5cdFx0XHRcdGlmICggZGF0YS5mb2N1cyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmZvY3VzID0gZGF0YS5mb2N1cztcblx0XHRcdFx0aWYgKCBkYXRhLnpvb20gIT09IHVuZGVmaW5lZCApIG9iamVjdC56b29tID0gZGF0YS56b29tO1xuXHRcdFx0XHRpZiAoIGRhdGEuZmlsbUdhdWdlICE9PSB1bmRlZmluZWQgKSBvYmplY3QuZmlsbUdhdWdlID0gZGF0YS5maWxtR2F1Z2U7XG5cdFx0XHRcdGlmICggZGF0YS5maWxtT2Zmc2V0ICE9PSB1bmRlZmluZWQgKSBvYmplY3QuZmlsbU9mZnNldCA9IGRhdGEuZmlsbU9mZnNldDtcblx0XHRcdFx0aWYgKCBkYXRhLnZpZXcgIT09IHVuZGVmaW5lZCApIG9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIGRhdGEudmlldyApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdPcnRob2dyYXBoaWNDYW1lcmEnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoIGRhdGEubGVmdCwgZGF0YS5yaWdodCwgZGF0YS50b3AsIGRhdGEuYm90dG9tLCBkYXRhLm5lYXIsIGRhdGEuZmFyICk7XG5cblx0XHRcdFx0aWYgKCBkYXRhLnpvb20gIT09IHVuZGVmaW5lZCApIG9iamVjdC56b29tID0gZGF0YS56b29tO1xuXHRcdFx0XHRpZiAoIGRhdGEudmlldyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgZGF0YS52aWV3ICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0FtYmllbnRMaWdodCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IEFtYmllbnRMaWdodCggZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1BvaW50TGlnaHQnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBQb2ludExpZ2h0KCBkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS5kaXN0YW5jZSwgZGF0YS5kZWNheSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdSZWN0QXJlYUxpZ2h0JzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUmVjdEFyZWFMaWdodCggZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHksIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0ICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1Nwb3RMaWdodCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNwb3RMaWdodCggZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHksIGRhdGEuZGlzdGFuY2UsIGRhdGEuYW5nbGUsIGRhdGEucGVudW1icmEsIGRhdGEuZGVjYXkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnSGVtaXNwaGVyZUxpZ2h0JzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgSGVtaXNwaGVyZUxpZ2h0KCBkYXRhLmNvbG9yLCBkYXRhLmdyb3VuZENvbG9yLCBkYXRhLmludGVuc2l0eSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaWdodFByb2JlJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGlnaHRQcm9iZSgpLmZyb21KU09OKCBkYXRhICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1NraW5uZWRNZXNoJzpcblxuXHRcdFx0XHRnZW9tZXRyeSA9IGdldEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICk7XG5cdFx0XHQgXHRtYXRlcmlhbCA9IGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICk7XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNraW5uZWRNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdFx0XHRpZiAoIGRhdGEuYmluZE1vZGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5iaW5kTW9kZSA9IGRhdGEuYmluZE1vZGU7XG5cdFx0XHRcdGlmICggZGF0YS5iaW5kTWF0cml4ICE9PSB1bmRlZmluZWQgKSBvYmplY3QuYmluZE1hdHJpeC5mcm9tQXJyYXkoIGRhdGEuYmluZE1hdHJpeCApO1xuXHRcdFx0XHRpZiAoIGRhdGEuc2tlbGV0b24gIT09IHVuZGVmaW5lZCApIG9iamVjdC5za2VsZXRvbiA9IGRhdGEuc2tlbGV0b247XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ01lc2gnOlxuXG5cdFx0XHRcdGdlb21ldHJ5ID0gZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKTtcblx0XHRcdFx0bWF0ZXJpYWwgPSBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApO1xuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnSW5zdGFuY2VkTWVzaCc6XG5cblx0XHRcdFx0Z2VvbWV0cnkgPSBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApO1xuXHRcdFx0XHRtYXRlcmlhbCA9IGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICk7XG5cdFx0XHRcdGNvbnN0IGNvdW50ID0gZGF0YS5jb3VudDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VNYXRyaXggPSBkYXRhLmluc3RhbmNlTWF0cml4O1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZUNvbG9yID0gZGF0YS5pbnN0YW5jZUNvbG9yO1xuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBJbnN0YW5jZWRNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGNvdW50ICk7XG5cdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeCA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIGluc3RhbmNlTWF0cml4LmFycmF5ICksIDE2ICk7XG5cdFx0XHRcdGlmICggaW5zdGFuY2VDb2xvciAhPT0gdW5kZWZpbmVkICkgb2JqZWN0Lmluc3RhbmNlQ29sb3IgPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKCBuZXcgRmxvYXQzMkFycmF5KCBpbnN0YW5jZUNvbG9yLmFycmF5ICksIGluc3RhbmNlQ29sb3IuaXRlbVNpemUgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTE9EJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTE9EKCk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xpbmUnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBMaW5lKCBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApLCBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xpbmVMb29wJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGluZUxvb3AoIGdldEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICksIGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTGluZVNlZ21lbnRzJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGluZVNlZ21lbnRzKCBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApLCBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1BvaW50Q2xvdWQnOlxuXHRcdFx0Y2FzZSAnUG9pbnRzJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUG9pbnRzKCBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApLCBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1Nwcml0ZSc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNwcml0ZSggZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdHcm91cCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IEdyb3VwKCk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0JvbmUnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBCb25lKCk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IE9iamVjdDNEKCk7XG5cblx0XHR9XG5cblx0XHRvYmplY3QudXVpZCA9IGRhdGEudXVpZDtcblxuXHRcdGlmICggZGF0YS5uYW1lICE9PSB1bmRlZmluZWQgKSBvYmplY3QubmFtZSA9IGRhdGEubmFtZTtcblxuXHRcdGlmICggZGF0YS5tYXRyaXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0b2JqZWN0Lm1hdHJpeC5mcm9tQXJyYXkoIGRhdGEubWF0cml4ICk7XG5cblx0XHRcdGlmICggZGF0YS5tYXRyaXhBdXRvVXBkYXRlICE9PSB1bmRlZmluZWQgKSBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGRhdGEubWF0cml4QXV0b1VwZGF0ZTtcblx0XHRcdGlmICggb2JqZWN0Lm1hdHJpeEF1dG9VcGRhdGUgKSBvYmplY3QubWF0cml4LmRlY29tcG9zZSggb2JqZWN0LnBvc2l0aW9uLCBvYmplY3QucXVhdGVybmlvbiwgb2JqZWN0LnNjYWxlICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIGRhdGEucG9zaXRpb24gIT09IHVuZGVmaW5lZCApIG9iamVjdC5wb3NpdGlvbi5mcm9tQXJyYXkoIGRhdGEucG9zaXRpb24gKTtcblx0XHRcdGlmICggZGF0YS5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnJvdGF0aW9uLmZyb21BcnJheSggZGF0YS5yb3RhdGlvbiApO1xuXHRcdFx0aWYgKCBkYXRhLnF1YXRlcm5pb24gIT09IHVuZGVmaW5lZCApIG9iamVjdC5xdWF0ZXJuaW9uLmZyb21BcnJheSggZGF0YS5xdWF0ZXJuaW9uICk7XG5cdFx0XHRpZiAoIGRhdGEuc2NhbGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zY2FsZS5mcm9tQXJyYXkoIGRhdGEuc2NhbGUgKTtcblxuXHRcdH1cblxuXHRcdGlmICggZGF0YS5jYXN0U2hhZG93ICE9PSB1bmRlZmluZWQgKSBvYmplY3QuY2FzdFNoYWRvdyA9IGRhdGEuY2FzdFNoYWRvdztcblx0XHRpZiAoIGRhdGEucmVjZWl2ZVNoYWRvdyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnJlY2VpdmVTaGFkb3cgPSBkYXRhLnJlY2VpdmVTaGFkb3c7XG5cblx0XHRpZiAoIGRhdGEuc2hhZG93ICkge1xuXG5cdFx0XHRpZiAoIGRhdGEuc2hhZG93LmJpYXMgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zaGFkb3cuYmlhcyA9IGRhdGEuc2hhZG93LmJpYXM7XG5cdFx0XHRpZiAoIGRhdGEuc2hhZG93Lm5vcm1hbEJpYXMgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zaGFkb3cubm9ybWFsQmlhcyA9IGRhdGEuc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRpZiAoIGRhdGEuc2hhZG93LnJhZGl1cyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnNoYWRvdy5yYWRpdXMgPSBkYXRhLnNoYWRvdy5yYWRpdXM7XG5cdFx0XHRpZiAoIGRhdGEuc2hhZG93Lm1hcFNpemUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zaGFkb3cubWFwU2l6ZS5mcm9tQXJyYXkoIGRhdGEuc2hhZG93Lm1hcFNpemUgKTtcblx0XHRcdGlmICggZGF0YS5zaGFkb3cuY2FtZXJhICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93LmNhbWVyYSA9IHRoaXMucGFyc2VPYmplY3QoIGRhdGEuc2hhZG93LmNhbWVyYSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhLnZpc2libGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC52aXNpYmxlID0gZGF0YS52aXNpYmxlO1xuXHRcdGlmICggZGF0YS5mcnVzdHVtQ3VsbGVkICE9PSB1bmRlZmluZWQgKSBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9IGRhdGEuZnJ1c3R1bUN1bGxlZDtcblx0XHRpZiAoIGRhdGEucmVuZGVyT3JkZXIgIT09IHVuZGVmaW5lZCApIG9iamVjdC5yZW5kZXJPcmRlciA9IGRhdGEucmVuZGVyT3JkZXI7XG5cdFx0aWYgKCBkYXRhLnVzZXJEYXRhICE9PSB1bmRlZmluZWQgKSBvYmplY3QudXNlckRhdGEgPSBkYXRhLnVzZXJEYXRhO1xuXHRcdGlmICggZGF0YS5sYXllcnMgIT09IHVuZGVmaW5lZCApIG9iamVjdC5sYXllcnMubWFzayA9IGRhdGEubGF5ZXJzO1xuXG5cdFx0aWYgKCBkYXRhLmNoaWxkcmVuICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbjtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdG9iamVjdC5hZGQoIHRoaXMucGFyc2VPYmplY3QoIGNoaWxkcmVuWyBpIF0sIGdlb21ldHJpZXMsIG1hdGVyaWFscywgdGV4dHVyZXMsIGFuaW1hdGlvbnMgKSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGRhdGEuYW5pbWF0aW9ucyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBvYmplY3RBbmltYXRpb25zID0gZGF0YS5hbmltYXRpb25zO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBvYmplY3RBbmltYXRpb25zLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB1dWlkID0gb2JqZWN0QW5pbWF0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdG9iamVjdC5hbmltYXRpb25zLnB1c2goIGFuaW1hdGlvbnNbIHV1aWQgXSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGRhdGEudHlwZSA9PT0gJ0xPRCcgKSB7XG5cblx0XHRcdGlmICggZGF0YS5hdXRvVXBkYXRlICE9PSB1bmRlZmluZWQgKSBvYmplY3QuYXV0b1VwZGF0ZSA9IGRhdGEuYXV0b1VwZGF0ZTtcblxuXHRcdFx0Y29uc3QgbGV2ZWxzID0gZGF0YS5sZXZlbHM7XG5cblx0XHRcdGZvciAoIGxldCBsID0gMDsgbCA8IGxldmVscy5sZW5ndGg7IGwgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgbGV2ZWwgPSBsZXZlbHNbIGwgXTtcblx0XHRcdFx0Y29uc3QgY2hpbGQgPSBvYmplY3QuZ2V0T2JqZWN0QnlQcm9wZXJ0eSggJ3V1aWQnLCBsZXZlbC5vYmplY3QgKTtcblxuXHRcdFx0XHRpZiAoIGNoaWxkICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRvYmplY3QuYWRkTGV2ZWwoIGNoaWxkLCBsZXZlbC5kaXN0YW5jZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iamVjdDtcblxuXHR9XG5cblx0YmluZFNrZWxldG9ucyggb2JqZWN0LCBza2VsZXRvbnMgKSB7XG5cblx0XHRpZiAoIE9iamVjdC5rZXlzKCBza2VsZXRvbnMgKS5sZW5ndGggPT09IDAgKSByZXR1cm47XG5cblx0XHRvYmplY3QudHJhdmVyc2UoIGZ1bmN0aW9uICggY2hpbGQgKSB7XG5cblx0XHRcdGlmICggY2hpbGQuaXNTa2lubmVkTWVzaCA9PT0gdHJ1ZSAmJiBjaGlsZC5za2VsZXRvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnN0IHNrZWxldG9uID0gc2tlbGV0b25zWyBjaGlsZC5za2VsZXRvbiBdO1xuXG5cdFx0XHRcdGlmICggc2tlbGV0b24gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gc2tlbGV0b24gZm91bmQgd2l0aCBVVUlEOicsIGNoaWxkLnNrZWxldG9uICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNoaWxkLmJpbmQoIHNrZWxldG9uLCBjaGlsZC5iaW5kTWF0cml4ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cblx0fVxuXG5cdC8qIERFUFJFQ0FURUQgKi9cblxuXHRzZXRUZXh0dXJlUGF0aCggdmFsdWUgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IC5zZXRUZXh0dXJlUGF0aCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldFJlc291cmNlUGF0aCgpLicgKTtcblx0XHRyZXR1cm4gdGhpcy5zZXRSZXNvdXJjZVBhdGgoIHZhbHVlICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IFRFWFRVUkVfTUFQUElORyA9IHtcblx0VVZNYXBwaW5nOiBVVk1hcHBpbmcsXG5cdEN1YmVSZWZsZWN0aW9uTWFwcGluZzogQ3ViZVJlZmxlY3Rpb25NYXBwaW5nLFxuXHRDdWJlUmVmcmFjdGlvbk1hcHBpbmc6IEN1YmVSZWZyYWN0aW9uTWFwcGluZyxcblx0RXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nLFxuXHRFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzogRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcsXG5cdEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOiBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZyxcblx0Q3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nXG59O1xuXG5jb25zdCBURVhUVVJFX1dSQVBQSU5HID0ge1xuXHRSZXBlYXRXcmFwcGluZzogUmVwZWF0V3JhcHBpbmcsXG5cdENsYW1wVG9FZGdlV3JhcHBpbmc6IENsYW1wVG9FZGdlV3JhcHBpbmcsXG5cdE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmdcbn07XG5cbmNvbnN0IFRFWFRVUkVfRklMVEVSID0ge1xuXHROZWFyZXN0RmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxuXHROZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjogTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIsXG5cdE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6IE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXIsXG5cdExpbmVhckZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOiBMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyLFxuXHRMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6IExpbmVhck1pcG1hcExpbmVhckZpbHRlclxufTtcblxuY2xhc3MgSW1hZ2VCaXRtYXBMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHRcdGlmICggdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwID09PSAndW5kZWZpbmVkJyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4nICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBmZXRjaCgpIG5vdCBzdXBwb3J0ZWQuJyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5vcHRpb25zID0geyBwcmVtdWx0aXBseUFscGhhOiAnbm9uZScgfTtcblxuXHR9XG5cblx0c2V0T3B0aW9ucyggb3B0aW9ucyApIHtcblxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRpZiAoIHVybCA9PT0gdW5kZWZpbmVkICkgdXJsID0gJyc7XG5cblx0XHRpZiAoIHRoaXMucGF0aCAhPT0gdW5kZWZpbmVkICkgdXJsID0gdGhpcy5wYXRoICsgdXJsO1xuXG5cdFx0dXJsID0gdGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwoIHVybCApO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgY2FjaGVkID0gQ2FjaGUuZ2V0KCB1cmwgKTtcblxuXHRcdGlmICggY2FjaGVkICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTtcblxuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTtcblxuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0XHR9LCAwICk7XG5cblx0XHRcdHJldHVybiBjYWNoZWQ7XG5cblx0XHR9XG5cblx0XHRjb25zdCBmZXRjaE9wdGlvbnMgPSB7fTtcblx0XHRmZXRjaE9wdGlvbnMuY3JlZGVudGlhbHMgPSAoIHRoaXMuY3Jvc3NPcmlnaW4gPT09ICdhbm9ueW1vdXMnICkgPyAnc2FtZS1vcmlnaW4nIDogJ2luY2x1ZGUnO1xuXHRcdGZldGNoT3B0aW9ucy5oZWFkZXJzID0gdGhpcy5yZXF1ZXN0SGVhZGVyO1xuXG5cdFx0ZmV0Y2goIHVybCwgZmV0Y2hPcHRpb25zICkudGhlbiggZnVuY3Rpb24gKCByZXMgKSB7XG5cblx0XHRcdHJldHVybiByZXMuYmxvYigpO1xuXG5cdFx0fSApLnRoZW4oIGZ1bmN0aW9uICggYmxvYiApIHtcblxuXHRcdFx0cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKCBibG9iLCBPYmplY3QuYXNzaWduKCBzY29wZS5vcHRpb25zLCB7IGNvbG9yU3BhY2VDb252ZXJzaW9uOiAnbm9uZScgfSApICk7XG5cblx0XHR9ICkudGhlbiggZnVuY3Rpb24gKCBpbWFnZUJpdG1hcCApIHtcblxuXHRcdFx0Q2FjaGUuYWRkKCB1cmwsIGltYWdlQml0bWFwICk7XG5cblx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCBpbWFnZUJpdG1hcCApO1xuXG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0fSApLmNhdGNoKCBmdW5jdGlvbiAoIGUgKSB7XG5cblx0XHRcdGlmICggb25FcnJvciApIG9uRXJyb3IoIGUgKTtcblxuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdH0gKTtcblxuXHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTtcblxuXHR9XG5cbn1cblxuSW1hZ2VCaXRtYXBMb2FkZXIucHJvdG90eXBlLmlzSW1hZ2VCaXRtYXBMb2FkZXIgPSB0cnVlO1xuXG5sZXQgX2NvbnRleHQ7XG5cbmNvbnN0IEF1ZGlvQ29udGV4dCA9IHtcblxuXHRnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdF9jb250ZXh0ID0gbmV3ICggd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0ICkoKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBfY29udGV4dDtcblxuXHR9LFxuXG5cdHNldENvbnRleHQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRfY29udGV4dCA9IHZhbHVlO1xuXG5cdH1cblxufTtcblxuY2xhc3MgQXVkaW9Mb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5YnVmZmVyJyApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggdGhpcy5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggdGhpcy53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHQvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBidWZmZXIuIFRoZSBgZGVjb2RlQXVkaW9EYXRhYCBtZXRob2Rcblx0XHRcdFx0Ly8gZGV0YWNoZXMgdGhlIGJ1ZmZlciB3aGVuIGNvbXBsZXRlLCBwcmV2ZW50aW5nIHJldXNlLlxuXHRcdFx0XHRjb25zdCBidWZmZXJDb3B5ID0gYnVmZmVyLnNsaWNlKCAwICk7XG5cblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IEF1ZGlvQ29udGV4dC5nZXRDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKCBidWZmZXJDb3B5LCBmdW5jdGlvbiAoIGF1ZGlvQnVmZmVyICkge1xuXG5cdFx0XHRcdFx0b25Mb2FkKCBhdWRpb0J1ZmZlciApO1xuXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0aWYgKCBvbkVycm9yICkge1xuXG5cdFx0XHRcdFx0b25FcnJvciggZSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvciApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBIZW1pc3BoZXJlTGlnaHRQcm9iZSBleHRlbmRzIExpZ2h0UHJvYmUge1xuXG5cdGNvbnN0cnVjdG9yKCBza3lDb2xvciwgZ3JvdW5kQ29sb3IsIGludGVuc2l0eSA9IDEgKSB7XG5cblx0XHRzdXBlciggdW5kZWZpbmVkLCBpbnRlbnNpdHkgKTtcblxuXHRcdGNvbnN0IGNvbG9yMSA9IG5ldyBDb2xvcigpLnNldCggc2t5Q29sb3IgKTtcblx0XHRjb25zdCBjb2xvcjIgPSBuZXcgQ29sb3IoKS5zZXQoIGdyb3VuZENvbG9yICk7XG5cblx0XHRjb25zdCBza3kgPSBuZXcgVmVjdG9yMyggY29sb3IxLnIsIGNvbG9yMS5nLCBjb2xvcjEuYiApO1xuXHRcdGNvbnN0IGdyb3VuZCA9IG5ldyBWZWN0b3IzKCBjb2xvcjIuciwgY29sb3IyLmcsIGNvbG9yMi5iICk7XG5cblx0XHQvLyB3aXRob3V0IGV4dHJhIGZhY3RvciBvZiBQSSBpbiB0aGUgc2hhZGVyLCBzaG91bGQgPSAxIC8gTWF0aC5zcXJ0KCBNYXRoLlBJICk7XG5cdFx0Y29uc3QgYzAgPSBNYXRoLnNxcnQoIE1hdGguUEkgKTtcblx0XHRjb25zdCBjMSA9IGMwICogTWF0aC5zcXJ0KCAwLjc1ICk7XG5cblx0XHR0aGlzLnNoLmNvZWZmaWNpZW50c1sgMCBdLmNvcHkoIHNreSApLmFkZCggZ3JvdW5kICkubXVsdGlwbHlTY2FsYXIoIGMwICk7XG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbIDEgXS5jb3B5KCBza3kgKS5zdWIoIGdyb3VuZCApLm11bHRpcGx5U2NhbGFyKCBjMSApO1xuXG5cdH1cblxufVxuXG5IZW1pc3BoZXJlTGlnaHRQcm9iZS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZSA9IHRydWU7XG5cbmNsYXNzIEFtYmllbnRMaWdodFByb2JlIGV4dGVuZHMgTGlnaHRQcm9iZSB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHkgPSAxICkge1xuXG5cdFx0c3VwZXIoIHVuZGVmaW5lZCwgaW50ZW5zaXR5ICk7XG5cblx0XHRjb25zdCBjb2xvcjEgPSBuZXcgQ29sb3IoKS5zZXQoIGNvbG9yICk7XG5cblx0XHQvLyB3aXRob3V0IGV4dHJhIGZhY3RvciBvZiBQSSBpbiB0aGUgc2hhZGVyLCB3b3VsZCBiZSAyIC8gTWF0aC5zcXJ0KCBNYXRoLlBJICk7XG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbIDAgXS5zZXQoIGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIgKS5tdWx0aXBseVNjYWxhciggMiAqIE1hdGguc3FydCggTWF0aC5QSSApICk7XG5cblx0fVxuXG59XG5cbkFtYmllbnRMaWdodFByb2JlLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlID0gdHJ1ZTtcblxuY29uc3QgX2V5ZVJpZ2h0ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX2V5ZUxlZnQgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcHJvamVjdGlvbk1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcblxuY2xhc3MgU3RlcmVvQ2FtZXJhIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMudHlwZSA9ICdTdGVyZW9DYW1lcmEnO1xuXG5cdFx0dGhpcy5hc3BlY3QgPSAxO1xuXG5cdFx0dGhpcy5leWVTZXAgPSAwLjA2NDtcblxuXHRcdHRoaXMuY2FtZXJhTCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdHRoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKCAxICk7XG5cdFx0dGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKCAyICk7XG5cdFx0dGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuX2NhY2hlID0ge1xuXHRcdFx0Zm9jdXM6IG51bGwsXG5cdFx0XHRmb3Y6IG51bGwsXG5cdFx0XHRhc3BlY3Q6IG51bGwsXG5cdFx0XHRuZWFyOiBudWxsLFxuXHRcdFx0ZmFyOiBudWxsLFxuXHRcdFx0em9vbTogbnVsbCxcblx0XHRcdGV5ZVNlcDogbnVsbFxuXHRcdH07XG5cblx0fVxuXG5cdHVwZGF0ZSggY2FtZXJhICkge1xuXG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLl9jYWNoZTtcblxuXHRcdGNvbnN0IG5lZWRzVXBkYXRlID0gY2FjaGUuZm9jdXMgIT09IGNhbWVyYS5mb2N1cyB8fCBjYWNoZS5mb3YgIT09IGNhbWVyYS5mb3YgfHxcblx0XHRcdGNhY2hlLmFzcGVjdCAhPT0gY2FtZXJhLmFzcGVjdCAqIHRoaXMuYXNwZWN0IHx8IGNhY2hlLm5lYXIgIT09IGNhbWVyYS5uZWFyIHx8XG5cdFx0XHRjYWNoZS5mYXIgIT09IGNhbWVyYS5mYXIgfHwgY2FjaGUuem9vbSAhPT0gY2FtZXJhLnpvb20gfHwgY2FjaGUuZXllU2VwICE9PSB0aGlzLmV5ZVNlcDtcblxuXHRcdGlmICggbmVlZHNVcGRhdGUgKSB7XG5cblx0XHRcdGNhY2hlLmZvY3VzID0gY2FtZXJhLmZvY3VzO1xuXHRcdFx0Y2FjaGUuZm92ID0gY2FtZXJhLmZvdjtcblx0XHRcdGNhY2hlLmFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcblx0XHRcdGNhY2hlLm5lYXIgPSBjYW1lcmEubmVhcjtcblx0XHRcdGNhY2hlLmZhciA9IGNhbWVyYS5mYXI7XG5cdFx0XHRjYWNoZS56b29tID0gY2FtZXJhLnpvb207XG5cdFx0XHRjYWNoZS5leWVTZXAgPSB0aGlzLmV5ZVNlcDtcblxuXHRcdFx0Ly8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxuXHRcdFx0Ly8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cblxuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguY29weSggY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKTtcblx0XHRcdGNvbnN0IGV5ZVNlcEhhbGYgPSBjYWNoZS5leWVTZXAgLyAyO1xuXHRcdFx0Y29uc3QgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwSGFsZiAqIGNhY2hlLm5lYXIgLyBjYWNoZS5mb2N1cztcblx0XHRcdGNvbnN0IHltYXggPSAoIGNhY2hlLm5lYXIgKiBNYXRoLnRhbiggREVHMlJBRCAqIGNhY2hlLmZvdiAqIDAuNSApICkgLyBjYWNoZS56b29tO1xuXHRcdFx0bGV0IHhtaW4sIHhtYXg7XG5cblx0XHRcdC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XG5cblx0XHRcdF9leWVMZWZ0LmVsZW1lbnRzWyAxMiBdID0gLSBleWVTZXBIYWxmO1xuXHRcdFx0X2V5ZVJpZ2h0LmVsZW1lbnRzWyAxMiBdID0gZXllU2VwSGFsZjtcblxuXHRcdFx0Ly8gZm9yIGxlZnQgZXllXG5cblx0XHRcdHhtaW4gPSAtIHltYXggKiBjYWNoZS5hc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XG5cdFx0XHR4bWF4ID0geW1heCAqIGNhY2hlLmFzcGVjdCArIGV5ZVNlcE9uUHJvamVjdGlvbjtcblxuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguZWxlbWVudHNbIDAgXSA9IDIgKiBjYWNoZS5uZWFyIC8gKCB4bWF4IC0geG1pbiApO1xuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguZWxlbWVudHNbIDggXSA9ICggeG1heCArIHhtaW4gKSAvICggeG1heCAtIHhtaW4gKTtcblxuXHRcdFx0dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weSggX3Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0Ly8gZm9yIHJpZ2h0IGV5ZVxuXG5cdFx0XHR4bWluID0gLSB5bWF4ICogY2FjaGUuYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xuXHRcdFx0eG1heCA9IHltYXggKiBjYWNoZS5hc3BlY3QgLSBleWVTZXBPblByb2plY3Rpb247XG5cblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gPSAyICogY2FjaGUubmVhciAvICggeG1heCAtIHhtaW4gKTtcblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA4IF0gPSAoIHhtYXggKyB4bWluICkgLyAoIHhtYXggLSB4bWluICk7XG5cblx0XHRcdHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIF9wcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weSggY2FtZXJhLm1hdHJpeFdvcmxkICkubXVsdGlwbHkoIF9leWVMZWZ0ICk7XG5cdFx0dGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZCApLm11bHRpcGx5KCBfZXllUmlnaHQgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgQ2xvY2sge1xuXG5cdGNvbnN0cnVjdG9yKCBhdXRvU3RhcnQgPSB0cnVlICkge1xuXG5cdFx0dGhpcy5hdXRvU3RhcnQgPSBhdXRvU3RhcnQ7XG5cblx0XHR0aGlzLnN0YXJ0VGltZSA9IDA7XG5cdFx0dGhpcy5vbGRUaW1lID0gMDtcblx0XHR0aGlzLmVsYXBzZWRUaW1lID0gMDtcblxuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXG5cdH1cblxuXHRzdGFydCgpIHtcblxuXHRcdHRoaXMuc3RhcnRUaW1lID0gbm93KCk7XG5cblx0XHR0aGlzLm9sZFRpbWUgPSB0aGlzLnN0YXJ0VGltZTtcblx0XHR0aGlzLmVsYXBzZWRUaW1lID0gMDtcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdH1cblxuXHRzdG9wKCkge1xuXG5cdFx0dGhpcy5nZXRFbGFwc2VkVGltZSgpO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cblx0fVxuXG5cdGdldEVsYXBzZWRUaW1lKCkge1xuXG5cdFx0dGhpcy5nZXREZWx0YSgpO1xuXHRcdHJldHVybiB0aGlzLmVsYXBzZWRUaW1lO1xuXG5cdH1cblxuXHRnZXREZWx0YSgpIHtcblxuXHRcdGxldCBkaWZmID0gMDtcblxuXHRcdGlmICggdGhpcy5hdXRvU3RhcnQgJiYgISB0aGlzLnJ1bm5pbmcgKSB7XG5cblx0XHRcdHRoaXMuc3RhcnQoKTtcblx0XHRcdHJldHVybiAwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnJ1bm5pbmcgKSB7XG5cblx0XHRcdGNvbnN0IG5ld1RpbWUgPSBub3coKTtcblxuXHRcdFx0ZGlmZiA9ICggbmV3VGltZSAtIHRoaXMub2xkVGltZSApIC8gMTAwMDtcblx0XHRcdHRoaXMub2xkVGltZSA9IG5ld1RpbWU7XG5cblx0XHRcdHRoaXMuZWxhcHNlZFRpbWUgKz0gZGlmZjtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkaWZmO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBub3coKSB7XG5cblx0cmV0dXJuICggdHlwZW9mIHBlcmZvcm1hbmNlID09PSAndW5kZWZpbmVkJyA/IERhdGUgOiBwZXJmb3JtYW5jZSApLm5vdygpOyAvLyBzZWUgIzEwNzMyXG5cbn1cblxuY29uc3QgX3Bvc2l0aW9uJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfcXVhdGVybmlvbiQxID0gLypAX19QVVJFX18qLyBuZXcgUXVhdGVybmlvbigpO1xuY29uc3QgX3NjYWxlJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfb3JpZW50YXRpb24kMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgQXVkaW9MaXN0ZW5lciBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQXVkaW9MaXN0ZW5lcic7XG5cblx0XHR0aGlzLmNvbnRleHQgPSBBdWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpO1xuXG5cdFx0dGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHR0aGlzLmdhaW4uY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cblx0XHR0aGlzLmZpbHRlciA9IG51bGw7XG5cblx0XHR0aGlzLnRpbWVEZWx0YSA9IDA7XG5cblx0XHQvLyBwcml2YXRlXG5cblx0XHR0aGlzLl9jbG9jayA9IG5ldyBDbG9jaygpO1xuXG5cdH1cblxuXHRnZXRJbnB1dCgpIHtcblxuXHRcdHJldHVybiB0aGlzLmdhaW47XG5cblx0fVxuXG5cdHJlbW92ZUZpbHRlcigpIHtcblxuXHRcdGlmICggdGhpcy5maWx0ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KCB0aGlzLmZpbHRlciApO1xuXHRcdFx0dGhpcy5maWx0ZXIuZGlzY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cdFx0XHR0aGlzLmdhaW4uY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cdFx0XHR0aGlzLmZpbHRlciA9IG51bGw7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0RmlsdGVyKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyO1xuXG5cdH1cblxuXHRzZXRGaWx0ZXIoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB0aGlzLmZpbHRlciAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5nYWluLmRpc2Nvbm5lY3QoIHRoaXMuZmlsdGVyICk7XG5cdFx0XHR0aGlzLmZpbHRlci5kaXNjb25uZWN0KCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24gKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24gKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuZmlsdGVyID0gdmFsdWU7XG5cdFx0dGhpcy5nYWluLmNvbm5lY3QoIHRoaXMuZmlsdGVyICk7XG5cdFx0dGhpcy5maWx0ZXIuY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0TWFzdGVyVm9sdW1lKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlO1xuXG5cdH1cblxuXHRzZXRNYXN0ZXJWb2x1bWUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKCB2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7XG5cblx0XHRjb25zdCBsaXN0ZW5lciA9IHRoaXMuY29udGV4dC5saXN0ZW5lcjtcblx0XHRjb25zdCB1cCA9IHRoaXMudXA7XG5cblx0XHR0aGlzLnRpbWVEZWx0YSA9IHRoaXMuX2Nsb2NrLmdldERlbHRhKCk7XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggX3Bvc2l0aW9uJDEsIF9xdWF0ZXJuaW9uJDEsIF9zY2FsZSQxICk7XG5cblx0XHRfb3JpZW50YXRpb24kMS5zZXQoIDAsIDAsIC0gMSApLmFwcGx5UXVhdGVybmlvbiggX3F1YXRlcm5pb24kMSApO1xuXG5cdFx0aWYgKCBsaXN0ZW5lci5wb3NpdGlvblggKSB7XG5cblx0XHRcdC8vIGNvZGUgcGF0aCBmb3IgQ2hyb21lIChzZWUgIzE0MzkzKVxuXG5cdFx0XHRjb25zdCBlbmRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy50aW1lRGVsdGE7XG5cblx0XHRcdGxpc3RlbmVyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX3Bvc2l0aW9uJDEueCwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfcG9zaXRpb24kMS55LCBlbmRUaW1lICk7XG5cdFx0XHRsaXN0ZW5lci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9wb3NpdGlvbiQxLnosIGVuZFRpbWUgKTtcblx0XHRcdGxpc3RlbmVyLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfb3JpZW50YXRpb24kMS54LCBlbmRUaW1lICk7XG5cdFx0XHRsaXN0ZW5lci5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX29yaWVudGF0aW9uJDEueSwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9vcmllbnRhdGlvbiQxLnosIGVuZFRpbWUgKTtcblx0XHRcdGxpc3RlbmVyLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggdXAueCwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIudXBZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCB1cC55LCBlbmRUaW1lICk7XG5cdFx0XHRsaXN0ZW5lci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIHVwLnosIGVuZFRpbWUgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGxpc3RlbmVyLnNldFBvc2l0aW9uKCBfcG9zaXRpb24kMS54LCBfcG9zaXRpb24kMS55LCBfcG9zaXRpb24kMS56ICk7XG5cdFx0XHRsaXN0ZW5lci5zZXRPcmllbnRhdGlvbiggX29yaWVudGF0aW9uJDEueCwgX29yaWVudGF0aW9uJDEueSwgX29yaWVudGF0aW9uJDEueiwgdXAueCwgdXAueSwgdXAueiApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5jbGFzcyBBdWRpbyBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggbGlzdGVuZXIgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0F1ZGlvJztcblxuXHRcdHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcblx0XHR0aGlzLmNvbnRleHQgPSBsaXN0ZW5lci5jb250ZXh0O1xuXG5cdFx0dGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHR0aGlzLmdhaW4uY29ubmVjdCggbGlzdGVuZXIuZ2V0SW5wdXQoKSApO1xuXG5cdFx0dGhpcy5hdXRvcGxheSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5idWZmZXIgPSBudWxsO1xuXHRcdHRoaXMuZGV0dW5lID0gMDtcblx0XHR0aGlzLmxvb3AgPSBmYWxzZTtcblx0XHR0aGlzLmxvb3BTdGFydCA9IDA7XG5cdFx0dGhpcy5sb29wRW5kID0gMDtcblx0XHR0aGlzLm9mZnNldCA9IDA7XG5cdFx0dGhpcy5kdXJhdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnBsYXliYWNrUmF0ZSA9IDE7XG5cdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IHRydWU7XG5cdFx0dGhpcy5zb3VyY2UgPSBudWxsO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdlbXB0eSc7XG5cblx0XHR0aGlzLl9zdGFydGVkQXQgPSAwO1xuXHRcdHRoaXMuX3Byb2dyZXNzID0gMDtcblx0XHR0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMuZmlsdGVycyA9IFtdO1xuXG5cdH1cblxuXHRnZXRPdXRwdXQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nYWluO1xuXG5cdH1cblxuXHRzZXROb2RlU291cmNlKCBhdWRpb05vZGUgKSB7XG5cblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IGZhbHNlO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdhdWRpb05vZGUnO1xuXHRcdHRoaXMuc291cmNlID0gYXVkaW9Ob2RlO1xuXHRcdHRoaXMuY29ubmVjdCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldE1lZGlhRWxlbWVudFNvdXJjZSggbWVkaWFFbGVtZW50ICkge1xuXG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnbWVkaWFOb2RlJztcblx0XHR0aGlzLnNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoIG1lZGlhRWxlbWVudCApO1xuXHRcdHRoaXMuY29ubmVjdCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldE1lZGlhU3RyZWFtU291cmNlKCBtZWRpYVN0cmVhbSApIHtcblxuXHRcdHRoaXMuaGFzUGxheWJhY2tDb250cm9sID0gZmFsc2U7XG5cdFx0dGhpcy5zb3VyY2VUeXBlID0gJ21lZGlhU3RyZWFtTm9kZSc7XG5cdFx0dGhpcy5zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoIG1lZGlhU3RyZWFtICk7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0QnVmZmVyKCBhdWRpb0J1ZmZlciApIHtcblxuXHRcdHRoaXMuYnVmZmVyID0gYXVkaW9CdWZmZXI7XG5cdFx0dGhpcy5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG5cblx0XHRpZiAoIHRoaXMuYXV0b3BsYXkgKSB0aGlzLnBsYXkoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRwbGF5KCBkZWxheSA9IDAgKSB7XG5cblx0XHRpZiAoIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHR0aGlzLl9zdGFydGVkQXQgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKyBkZWxheTtcblxuXHRcdGNvbnN0IHNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0XHRzb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXI7XG5cdFx0c291cmNlLmxvb3AgPSB0aGlzLmxvb3A7XG5cdFx0c291cmNlLmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHRcdHNvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kO1xuXHRcdHNvdXJjZS5vbmVuZGVkID0gdGhpcy5vbkVuZGVkLmJpbmQoIHRoaXMgKTtcblx0XHRzb3VyY2Uuc3RhcnQoIHRoaXMuX3N0YXJ0ZWRBdCwgdGhpcy5fcHJvZ3Jlc3MgKyB0aGlzLm9mZnNldCwgdGhpcy5kdXJhdGlvbiApO1xuXG5cdFx0dGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cblx0XHR0aGlzLnNldERldHVuZSggdGhpcy5kZXR1bmUgKTtcblx0XHR0aGlzLnNldFBsYXliYWNrUmF0ZSggdGhpcy5wbGF5YmFja1JhdGUgKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbm5lY3QoKTtcblxuXHR9XG5cblx0cGF1c2UoKSB7XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Ly8gdXBkYXRlIGN1cnJlbnQgcHJvZ3Jlc3NcblxuXHRcdFx0dGhpcy5fcHJvZ3Jlc3MgKz0gTWF0aC5tYXgoIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0ZWRBdCwgMCApICogdGhpcy5wbGF5YmFja1JhdGU7XG5cblx0XHRcdGlmICggdGhpcy5sb29wID09PSB0cnVlICkge1xuXG5cdFx0XHRcdC8vIGVuc3VyZSBfcHJvZ3Jlc3MgZG9lcyBub3QgZXhjZWVkIGR1cmF0aW9uIHdpdGggbG9vcGVkIGF1ZGlvc1xuXG5cdFx0XHRcdHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fcHJvZ3Jlc3MgJSAoIHRoaXMuZHVyYXRpb24gfHwgdGhpcy5idWZmZXIuZHVyYXRpb24gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNvdXJjZS5zdG9wKCk7XG5cdFx0XHR0aGlzLnNvdXJjZS5vbmVuZGVkID0gbnVsbDtcblxuXHRcdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdG9wKCkge1xuXG5cdFx0aWYgKCB0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdHRoaXMuX3Byb2dyZXNzID0gMDtcblxuXHRcdHRoaXMuc291cmNlLnN0b3AoKTtcblx0XHR0aGlzLnNvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0XHR0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbm5lY3QoKSB7XG5cblx0XHRpZiAoIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHR0aGlzLnNvdXJjZS5jb25uZWN0KCB0aGlzLmZpbHRlcnNbIDAgXSApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDEsIGwgPSB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHR0aGlzLmZpbHRlcnNbIGkgLSAxIF0uY29ubmVjdCggdGhpcy5maWx0ZXJzWyBpIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZpbHRlcnNbIHRoaXMuZmlsdGVycy5sZW5ndGggLSAxIF0uY29ubmVjdCggdGhpcy5nZXRPdXRwdXQoKSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UuY29ubmVjdCggdGhpcy5nZXRPdXRwdXQoKSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXNjb25uZWN0KCkge1xuXG5cdFx0aWYgKCB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UuZGlzY29ubmVjdCggdGhpcy5maWx0ZXJzWyAwIF0gKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAxLCBsID0gdGhpcy5maWx0ZXJzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0dGhpcy5maWx0ZXJzWyBpIC0gMSBdLmRpc2Nvbm5lY3QoIHRoaXMuZmlsdGVyc1sgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5maWx0ZXJzWyB0aGlzLmZpbHRlcnMubGVuZ3RoIC0gMSBdLmRpc2Nvbm5lY3QoIHRoaXMuZ2V0T3V0cHV0KCkgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuc291cmNlLmRpc2Nvbm5lY3QoIHRoaXMuZ2V0T3V0cHV0KCkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldEZpbHRlcnMoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXJzO1xuXG5cdH1cblxuXHRzZXRGaWx0ZXJzKCB2YWx1ZSApIHtcblxuXHRcdGlmICggISB2YWx1ZSApIHZhbHVlID0gW107XG5cblx0XHRpZiAoIHRoaXMuX2Nvbm5lY3RlZCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0XHR0aGlzLmZpbHRlcnMgPSB2YWx1ZS5zbGljZSgpO1xuXHRcdFx0dGhpcy5jb25uZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmZpbHRlcnMgPSB2YWx1ZS5zbGljZSgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldERldHVuZSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLmRldHVuZSA9IHZhbHVlO1xuXG5cdFx0aWYgKCB0aGlzLnNvdXJjZS5kZXR1bmUgPT09IHVuZGVmaW5lZCApIHJldHVybjsgLy8gb25seSBzZXQgZGV0dW5lIHdoZW4gYXZhaWxhYmxlXG5cblx0XHRpZiAoIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICkge1xuXG5cdFx0XHR0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKCB0aGlzLmRldHVuZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0RGV0dW5lKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGV0dW5lO1xuXG5cdH1cblxuXHRnZXRGaWx0ZXIoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbIDAgXTtcblxuXHR9XG5cblx0c2V0RmlsdGVyKCBmaWx0ZXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKCBmaWx0ZXIgPyBbIGZpbHRlciBdIDogW10gKTtcblxuXHR9XG5cblx0c2V0UGxheWJhY2tSYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHR0aGlzLnBsYXliYWNrUmF0ZSA9IHZhbHVlO1xuXG5cdFx0aWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSggdGhpcy5wbGF5YmFja1JhdGUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFBsYXliYWNrUmF0ZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZTtcblxuXHR9XG5cblx0b25FbmRlZCgpIHtcblxuXHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cblx0fVxuXG5cdGdldExvb3AoKSB7XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubG9vcDtcblxuXHR9XG5cblx0c2V0TG9vcCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5sb29wID0gdmFsdWU7XG5cblx0XHRpZiAoIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICkge1xuXG5cdFx0XHR0aGlzLnNvdXJjZS5sb29wID0gdGhpcy5sb29wO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldExvb3BTdGFydCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLmxvb3BTdGFydCA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldExvb3BFbmQoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5sb29wRW5kID0gdmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Vm9sdW1lKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlO1xuXG5cdH1cblxuXHRzZXRWb2x1bWUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKCB2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY29uc3QgX3Bvc2l0aW9uID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3F1YXRlcm5pb24gPSAvKkBfX1BVUkVfXyovIG5ldyBRdWF0ZXJuaW9uKCk7XG5jb25zdCBfc2NhbGUgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfb3JpZW50YXRpb24gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFBvc2l0aW9uYWxBdWRpbyBleHRlbmRzIEF1ZGlvIHtcblxuXHRjb25zdHJ1Y3RvciggbGlzdGVuZXIgKSB7XG5cblx0XHRzdXBlciggbGlzdGVuZXIgKTtcblxuXHRcdHRoaXMucGFubmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHRcdHRoaXMucGFubmVyLnBhbm5pbmdNb2RlbCA9ICdIUlRGJztcblx0XHR0aGlzLnBhbm5lci5jb25uZWN0KCB0aGlzLmdhaW4gKTtcblxuXHR9XG5cblx0Z2V0T3V0cHV0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMucGFubmVyO1xuXG5cdH1cblxuXHRnZXRSZWZEaXN0YW5jZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZTtcblxuXHR9XG5cblx0c2V0UmVmRGlzdGFuY2UoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5wYW5uZXIucmVmRGlzdGFuY2UgPSB2YWx1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRSb2xsb2ZmRmFjdG9yKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I7XG5cblx0fVxuXG5cdHNldFJvbGxvZmZGYWN0b3IoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5wYW5uZXIucm9sbG9mZkZhY3RvciA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldERpc3RhbmNlTW9kZWwoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbDtcblxuXHR9XG5cblx0c2V0RGlzdGFuY2VNb2RlbCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsID0gdmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0TWF4RGlzdGFuY2UoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U7XG5cblx0fVxuXG5cdHNldE1heERpc3RhbmNlKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMucGFubmVyLm1heERpc3RhbmNlID0gdmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RGlyZWN0aW9uYWxDb25lKCBjb25lSW5uZXJBbmdsZSwgY29uZU91dGVyQW5nbGUsIGNvbmVPdXRlckdhaW4gKSB7XG5cblx0XHR0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZSA9IGNvbmVJbm5lckFuZ2xlO1xuXHRcdHRoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlID0gY29uZU91dGVyQW5nbGU7XG5cdFx0dGhpcy5wYW5uZXIuY29uZU91dGVyR2FpbiA9IGNvbmVPdXRlckdhaW47XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSB0cnVlICYmIHRoaXMuaXNQbGF5aW5nID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKCBfcG9zaXRpb24sIF9xdWF0ZXJuaW9uLCBfc2NhbGUgKTtcblxuXHRcdF9vcmllbnRhdGlvbi5zZXQoIDAsIDAsIDEgKS5hcHBseVF1YXRlcm5pb24oIF9xdWF0ZXJuaW9uICk7XG5cblx0XHRjb25zdCBwYW5uZXIgPSB0aGlzLnBhbm5lcjtcblxuXHRcdGlmICggcGFubmVyLnBvc2l0aW9uWCApIHtcblxuXHRcdFx0Ly8gY29kZSBwYXRoIGZvciBDaHJvbWUgYW5kIEZpcmVmb3ggKHNlZSAjMTQzOTMpXG5cblx0XHRcdGNvbnN0IGVuZFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxpc3RlbmVyLnRpbWVEZWx0YTtcblxuXHRcdFx0cGFubmVyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX3Bvc2l0aW9uLngsIGVuZFRpbWUgKTtcblx0XHRcdHBhbm5lci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9wb3NpdGlvbi55LCBlbmRUaW1lICk7XG5cdFx0XHRwYW5uZXIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfcG9zaXRpb24ueiwgZW5kVGltZSApO1xuXHRcdFx0cGFubmVyLm9yaWVudGF0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX29yaWVudGF0aW9uLngsIGVuZFRpbWUgKTtcblx0XHRcdHBhbm5lci5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9vcmllbnRhdGlvbi55LCBlbmRUaW1lICk7XG5cdFx0XHRwYW5uZXIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfb3JpZW50YXRpb24ueiwgZW5kVGltZSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cGFubmVyLnNldFBvc2l0aW9uKCBfcG9zaXRpb24ueCwgX3Bvc2l0aW9uLnksIF9wb3NpdGlvbi56ICk7XG5cdFx0XHRwYW5uZXIuc2V0T3JpZW50YXRpb24oIF9vcmllbnRhdGlvbi54LCBfb3JpZW50YXRpb24ueSwgX29yaWVudGF0aW9uLnogKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuY2xhc3MgQXVkaW9BbmFseXNlciB7XG5cblx0Y29uc3RydWN0b3IoIGF1ZGlvLCBmZnRTaXplID0gMjA0OCApIHtcblxuXHRcdHRoaXMuYW5hbHlzZXIgPSBhdWRpby5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdFx0dGhpcy5hbmFseXNlci5mZnRTaXplID0gZmZ0U2l6ZTtcblxuXHRcdHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KCB0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50ICk7XG5cblx0XHRhdWRpby5nZXRPdXRwdXQoKS5jb25uZWN0KCB0aGlzLmFuYWx5c2VyICk7XG5cblx0fVxuXG5cblx0Z2V0RnJlcXVlbmN5RGF0YSgpIHtcblxuXHRcdHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoIHRoaXMuZGF0YSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YTtcblxuXHR9XG5cblx0Z2V0QXZlcmFnZUZyZXF1ZW5jeSgpIHtcblxuXHRcdGxldCB2YWx1ZSA9IDA7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHZhbHVlICs9IGRhdGFbIGkgXTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZSAvIGRhdGEubGVuZ3RoO1xuXG5cdH1cblxufVxuXG5jbGFzcyBQcm9wZXJ0eU1peGVyIHtcblxuXHRjb25zdHJ1Y3RvciggYmluZGluZywgdHlwZU5hbWUsIHZhbHVlU2l6ZSApIHtcblxuXHRcdHRoaXMuYmluZGluZyA9IGJpbmRpbmc7XG5cdFx0dGhpcy52YWx1ZVNpemUgPSB2YWx1ZVNpemU7XG5cblx0XHRsZXQgbWl4RnVuY3Rpb24sXG5cdFx0XHRtaXhGdW5jdGlvbkFkZGl0aXZlLFxuXHRcdFx0c2V0SWRlbnRpdHk7XG5cblx0XHQvLyBidWZmZXIgbGF5b3V0OiBbIGluY29taW5nIHwgYWNjdTAgfCBhY2N1MSB8IG9yaWcgfCBhZGRBY2N1IHwgKG9wdGlvbmFsIHdvcmspIF1cblx0XHQvL1xuXHRcdC8vIGludGVycG9sYXRvcnMgY2FuIHVzZSAuYnVmZmVyIGFzIHRoZWlyIC5yZXN1bHRcblx0XHQvLyB0aGUgZGF0YSB0aGVuIGdvZXMgdG8gJ2luY29taW5nJ1xuXHRcdC8vXG5cdFx0Ly8gJ2FjY3UwJyBhbmQgJ2FjY3UxJyBhcmUgdXNlZCBmcmFtZS1pbnRlcmxlYXZlZCBmb3Jcblx0XHQvLyB0aGUgY3VtdWxhdGl2ZSByZXN1bHQgYW5kIGFyZSBjb21wYXJlZCB0byBkZXRlY3Rcblx0XHQvLyBjaGFuZ2VzXG5cdFx0Ly9cblx0XHQvLyAnb3JpZycgc3RvcmVzIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgcHJvcGVydHlcblx0XHQvL1xuXHRcdC8vICdhZGQnIGlzIHVzZWQgZm9yIGFkZGl0aXZlIGN1bXVsYXRpdmUgcmVzdWx0c1xuXHRcdC8vXG5cdFx0Ly8gJ3dvcmsnIGlzIG9wdGlvbmFsIGFuZCBpcyBvbmx5IHByZXNlbnQgZm9yIHF1YXRlcm5pb24gdHlwZXMuIEl0IGlzIHVzZWRcblx0XHQvLyB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcXVhdGVybmlvbiBtdWx0aXBsaWNhdGlvbiByZXN1bHRzXG5cblx0XHRzd2l0Y2ggKCB0eXBlTmFtZSApIHtcblxuXHRcdFx0Y2FzZSAncXVhdGVybmlvbic6XG5cdFx0XHRcdG1peEZ1bmN0aW9uID0gdGhpcy5fc2xlcnA7XG5cdFx0XHRcdG1peEZ1bmN0aW9uQWRkaXRpdmUgPSB0aGlzLl9zbGVycEFkZGl0aXZlO1xuXHRcdFx0XHRzZXRJZGVudGl0eSA9IHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uO1xuXG5cdFx0XHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSggdmFsdWVTaXplICogNiApO1xuXHRcdFx0XHR0aGlzLl93b3JrSW5kZXggPSA1O1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRtaXhGdW5jdGlvbiA9IHRoaXMuX3NlbGVjdDtcblxuXHRcdFx0XHQvLyBVc2UgdGhlIHJlZ3VsYXIgbWl4IGZ1bmN0aW9uIGFuZCBmb3IgYWRkaXRpdmUgb24gdGhlc2UgdHlwZXMsXG5cdFx0XHRcdC8vIGFkZGl0aXZlIGlzIG5vdCByZWxldmFudCBmb3Igbm9uLW51bWVyaWMgdHlwZXNcblx0XHRcdFx0bWl4RnVuY3Rpb25BZGRpdGl2ZSA9IHRoaXMuX3NlbGVjdDtcblxuXHRcdFx0XHRzZXRJZGVudGl0eSA9IHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcjtcblxuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheSggdmFsdWVTaXplICogNSApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bWl4RnVuY3Rpb24gPSB0aGlzLl9sZXJwO1xuXHRcdFx0XHRtaXhGdW5jdGlvbkFkZGl0aXZlID0gdGhpcy5fbGVycEFkZGl0aXZlO1xuXHRcdFx0XHRzZXRJZGVudGl0eSA9IHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljO1xuXG5cdFx0XHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSggdmFsdWVTaXplICogNSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uID0gbWl4RnVuY3Rpb247XG5cdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUgPSBtaXhGdW5jdGlvbkFkZGl0aXZlO1xuXHRcdHRoaXMuX3NldElkZW50aXR5ID0gc2V0SWRlbnRpdHk7XG5cdFx0dGhpcy5fb3JpZ0luZGV4ID0gMztcblx0XHR0aGlzLl9hZGRJbmRleCA9IDQ7XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSAwO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID0gMDtcblxuXHRcdHRoaXMudXNlQ291bnQgPSAwO1xuXHRcdHRoaXMucmVmZXJlbmNlQ291bnQgPSAwO1xuXG5cdH1cblxuXHQvLyBhY2N1bXVsYXRlIGRhdGEgaW4gdGhlICdpbmNvbWluZycgcmVnaW9uIGludG8gJ2FjY3U8aT4nXG5cdGFjY3VtdWxhdGUoIGFjY3VJbmRleCwgd2VpZ2h0ICkge1xuXG5cdFx0Ly8gbm90ZTogaGFwcGlseSBhY2N1bXVsYXRpbmcgbm90aGluZyB3aGVuIHdlaWdodCA9IDAsIHRoZSBjYWxsZXIga25vd3Ncblx0XHQvLyB0aGUgd2VpZ2h0IGFuZCBzaG91bGRuJ3QgaGF2ZSBtYWRlIHRoZSBjYWxsIGluIHRoZSBmaXJzdCBwbGFjZVxuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdG9mZnNldCA9IGFjY3VJbmRleCAqIHN0cmlkZSArIHN0cmlkZTtcblxuXHRcdGxldCBjdXJyZW50V2VpZ2h0ID0gdGhpcy5jdW11bGF0aXZlV2VpZ2h0O1xuXG5cdFx0aWYgKCBjdXJyZW50V2VpZ2h0ID09PSAwICkge1xuXG5cdFx0XHQvLyBhY2N1TiA6PSBpbmNvbWluZyAqIHdlaWdodFxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSApIHtcblxuXHRcdFx0XHRidWZmZXJbIG9mZnNldCArIGkgXSA9IGJ1ZmZlclsgaSBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRXZWlnaHQgPSB3ZWlnaHQ7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBhY2N1TiA6PSBhY2N1TiArIGluY29taW5nICogd2VpZ2h0XG5cblx0XHRcdGN1cnJlbnRXZWlnaHQgKz0gd2VpZ2h0O1xuXHRcdFx0Y29uc3QgbWl4ID0gd2VpZ2h0IC8gY3VycmVudFdlaWdodDtcblx0XHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbiggYnVmZmVyLCBvZmZzZXQsIDAsIG1peCwgc3RyaWRlICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSBjdXJyZW50V2VpZ2h0O1xuXG5cdH1cblxuXHQvLyBhY2N1bXVsYXRlIGRhdGEgaW4gdGhlICdpbmNvbWluZycgcmVnaW9uIGludG8gJ2FkZCdcblx0YWNjdW11bGF0ZUFkZGl0aXZlKCB3ZWlnaHQgKSB7XG5cblx0XHRjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlcixcblx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0b2Zmc2V0ID0gc3RyaWRlICogdGhpcy5fYWRkSW5kZXg7XG5cblx0XHRpZiAoIHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID09PSAwICkge1xuXG5cdFx0XHQvLyBhZGQgPSBpZGVudGl0eVxuXG5cdFx0XHR0aGlzLl9zZXRJZGVudGl0eSgpO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYWRkIDo9IGFkZCArIGluY29taW5nICogd2VpZ2h0XG5cblx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZSggYnVmZmVyLCBvZmZzZXQsIDAsIHdlaWdodCwgc3RyaWRlICk7XG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgKz0gd2VpZ2h0O1xuXG5cdH1cblxuXHQvLyBhcHBseSB0aGUgc3RhdGUgb2YgJ2FjY3U8aT4nIHRvIHRoZSBiaW5kaW5nIHdoZW4gYWNjdXMgZGlmZmVyXG5cdGFwcGx5KCBhY2N1SW5kZXggKSB7XG5cblx0XHRjb25zdCBzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0b2Zmc2V0ID0gYWNjdUluZGV4ICogc3RyaWRlICsgc3RyaWRlLFxuXG5cdFx0XHR3ZWlnaHQgPSB0aGlzLmN1bXVsYXRpdmVXZWlnaHQsXG5cdFx0XHR3ZWlnaHRBZGRpdGl2ZSA9IHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLFxuXG5cdFx0XHRiaW5kaW5nID0gdGhpcy5iaW5kaW5nO1xuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gMDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9IDA7XG5cblx0XHRpZiAoIHdlaWdodCA8IDEgKSB7XG5cblx0XHRcdC8vIGFjY3VOIDo9IGFjY3VOICsgb3JpZ2luYWwgKiAoIDEgLSBjdW11bGF0aXZlV2VpZ2h0IClcblxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZU9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX29yaWdJbmRleDtcblxuXHRcdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uKFxuXHRcdFx0XHRidWZmZXIsIG9mZnNldCwgb3JpZ2luYWxWYWx1ZU9mZnNldCwgMSAtIHdlaWdodCwgc3RyaWRlICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHdlaWdodEFkZGl0aXZlID4gMCApIHtcblxuXHRcdFx0Ly8gYWNjdU4gOj0gYWNjdU4gKyBhZGRpdGl2ZSBhY2N1TlxuXG5cdFx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZSggYnVmZmVyLCBvZmZzZXQsIHRoaXMuX2FkZEluZGV4ICogc3RyaWRlLCAxLCBzdHJpZGUgKTtcblxuXHRcdH1cblxuXHRcdGZvciAoIGxldCBpID0gc3RyaWRlLCBlID0gc3RyaWRlICsgc3RyaWRlOyBpICE9PSBlOyArKyBpICkge1xuXG5cdFx0XHRpZiAoIGJ1ZmZlclsgaSBdICE9PSBidWZmZXJbIGkgKyBzdHJpZGUgXSApIHtcblxuXHRcdFx0XHQvLyB2YWx1ZSBoYXMgY2hhbmdlZCAtPiB1cGRhdGUgc2NlbmUgZ3JhcGhcblxuXHRcdFx0XHRiaW5kaW5nLnNldFZhbHVlKCBidWZmZXIsIG9mZnNldCApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGJvdW5kIHByb3BlcnR5IGFuZCBjb3B5IGl0IHRvIGJvdGggYWNjdXNcblx0c2F2ZU9yaWdpbmFsU3RhdGUoKSB7XG5cblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nO1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblxuXHRcdFx0b3JpZ2luYWxWYWx1ZU9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX29yaWdJbmRleDtcblxuXHRcdGJpbmRpbmcuZ2V0VmFsdWUoIGJ1ZmZlciwgb3JpZ2luYWxWYWx1ZU9mZnNldCApO1xuXG5cdFx0Ly8gYWNjdVswLi4xXSA6PSBvcmlnIC0tIGluaXRpYWxseSBkZXRlY3QgY2hhbmdlcyBhZ2FpbnN0IHRoZSBvcmlnaW5hbFxuXHRcdGZvciAoIGxldCBpID0gc3RyaWRlLCBlID0gb3JpZ2luYWxWYWx1ZU9mZnNldDsgaSAhPT0gZTsgKysgaSApIHtcblxuXHRcdFx0YnVmZmVyWyBpIF0gPSBidWZmZXJbIG9yaWdpbmFsVmFsdWVPZmZzZXQgKyAoIGkgJSBzdHJpZGUgKSBdO1xuXG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRvIGlkZW50aXR5IGZvciBhZGRpdGl2ZVxuXHRcdHRoaXMuX3NldElkZW50aXR5KCk7XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSAwO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID0gMDtcblxuXHR9XG5cblx0Ly8gYXBwbHkgdGhlIHN0YXRlIHByZXZpb3VzbHkgdGFrZW4gdmlhICdzYXZlT3JpZ2luYWxTdGF0ZScgdG8gdGhlIGJpbmRpbmdcblx0cmVzdG9yZU9yaWdpbmFsU3RhdGUoKSB7XG5cblx0XHRjb25zdCBvcmlnaW5hbFZhbHVlT2Zmc2V0ID0gdGhpcy52YWx1ZVNpemUgKiAzO1xuXHRcdHRoaXMuYmluZGluZy5zZXRWYWx1ZSggdGhpcy5idWZmZXIsIG9yaWdpbmFsVmFsdWVPZmZzZXQgKTtcblxuXHR9XG5cblx0X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCkge1xuXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuX2FkZEluZGV4ICogdGhpcy52YWx1ZVNpemU7XG5cdFx0Y29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgdGhpcy52YWx1ZVNpemU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5idWZmZXJbIGkgXSA9IDA7XG5cblx0XHR9XG5cblx0fVxuXG5cdF9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpIHtcblxuXHRcdHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCk7XG5cdFx0dGhpcy5idWZmZXJbIHRoaXMuX2FkZEluZGV4ICogdGhpcy52YWx1ZVNpemUgKyAzIF0gPSAxO1xuXG5cdH1cblxuXHRfc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCkge1xuXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuX29yaWdJbmRleCAqIHRoaXMudmFsdWVTaXplO1xuXHRcdGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fYWRkSW5kZXggKiB0aGlzLnZhbHVlU2l6ZTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVTaXplOyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmJ1ZmZlclsgdGFyZ2V0SW5kZXggKyBpIF0gPSB0aGlzLmJ1ZmZlclsgc3RhcnRJbmRleCArIGkgXTtcblxuXHRcdH1cblxuXHR9XG5cblxuXHQvLyBtaXggZnVuY3Rpb25zXG5cblx0X3NlbGVjdCggYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCwgc3RyaWRlICkge1xuXG5cdFx0aWYgKCB0ID49IDAuNSApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdFx0YnVmZmVyWyBkc3RPZmZzZXQgKyBpIF0gPSBidWZmZXJbIHNyY09mZnNldCArIGkgXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRfc2xlcnAoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQgKSB7XG5cblx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdCggYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIHNyY09mZnNldCwgdCApO1xuXG5cdH1cblxuXHRfc2xlcnBBZGRpdGl2ZSggYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCwgc3RyaWRlICkge1xuXG5cdFx0Y29uc3Qgd29ya09mZnNldCA9IHRoaXMuX3dvcmtJbmRleCAqIHN0cmlkZTtcblxuXHRcdC8vIFN0b3JlIHJlc3VsdCBpbiBpbnRlcm1lZGlhdGUgYnVmZmVyIG9mZnNldFxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoIGJ1ZmZlciwgd29ya09mZnNldCwgYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgc3JjT2Zmc2V0ICk7XG5cblx0XHQvLyBTbGVycCB0byB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdFxuXHRcdFF1YXRlcm5pb24uc2xlcnBGbGF0KCBidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgd29ya09mZnNldCwgdCApO1xuXG5cdH1cblxuXHRfbGVycCggYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCwgc3RyaWRlICkge1xuXG5cdFx0Y29uc3QgcyA9IDEgLSB0O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IGogPSBkc3RPZmZzZXQgKyBpO1xuXG5cdFx0XHRidWZmZXJbIGogXSA9IGJ1ZmZlclsgaiBdICogcyArIGJ1ZmZlclsgc3JjT2Zmc2V0ICsgaSBdICogdDtcblxuXHRcdH1cblxuXHR9XG5cblx0X2xlcnBBZGRpdGl2ZSggYnVmZmVyLCBkc3RPZmZzZXQsIHNyY09mZnNldCwgdCwgc3RyaWRlICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IGogPSBkc3RPZmZzZXQgKyBpO1xuXG5cdFx0XHRidWZmZXJbIGogXSA9IGJ1ZmZlclsgaiBdICsgYnVmZmVyWyBzcmNPZmZzZXQgKyBpIF0gKiB0O1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG4vLyBDaGFyYWN0ZXJzIFtdLjovIGFyZSByZXNlcnZlZCBmb3IgdHJhY2sgYmluZGluZyBzeW50YXguXG5jb25zdCBfUkVTRVJWRURfQ0hBUlNfUkUgPSAnXFxcXFtcXFxcXVxcXFwuOlxcXFwvJztcbmNvbnN0IF9yZXNlcnZlZFJlID0gbmV3IFJlZ0V4cCggJ1snICsgX1JFU0VSVkVEX0NIQVJTX1JFICsgJ10nLCAnZycgKTtcblxuLy8gQXR0ZW1wdHMgdG8gYWxsb3cgbm9kZSBuYW1lcyBmcm9tIGFueSBsYW5ndWFnZS4gRVM1J3MgYFxcd2AgcmVnZXhwIG1hdGNoZXNcbi8vIG9ubHkgbGF0aW4gY2hhcmFjdGVycywgYW5kIHRoZSB1bmljb2RlIFxccHtMfSBpcyBub3QgeWV0IHN1cHBvcnRlZC4gU29cbi8vIGluc3RlYWQsIHdlIGV4Y2x1ZGUgcmVzZXJ2ZWQgY2hhcmFjdGVycyBhbmQgbWF0Y2ggZXZlcnl0aGluZyBlbHNlLlxuY29uc3QgX3dvcmRDaGFyID0gJ1teJyArIF9SRVNFUlZFRF9DSEFSU19SRSArICddJztcbmNvbnN0IF93b3JkQ2hhck9yRG90ID0gJ1teJyArIF9SRVNFUlZFRF9DSEFSU19SRS5yZXBsYWNlKCAnXFxcXC4nLCAnJyApICsgJ10nO1xuXG4vLyBQYXJlbnQgZGlyZWN0b3JpZXMsIGRlbGltaXRlZCBieSAnLycgb3IgJzonLiBDdXJyZW50bHkgdW51c2VkLCBidXQgbXVzdFxuLy8gYmUgbWF0Y2hlZCB0byBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgdHJhY2sgbmFtZS5cbmNvbnN0IF9kaXJlY3RvcnlSZSA9IC8oKD86V0MrW1xcLzpdKSopLy5zb3VyY2UucmVwbGFjZSggJ1dDJywgX3dvcmRDaGFyICk7XG5cbi8vIFRhcmdldCBub2RlLiBNYXkgY29udGFpbiB3b3JkIGNoYXJhY3RlcnMgKGEtekEtWjAtOV8pIGFuZCAnLicgb3IgJy0nLlxuY29uc3QgX25vZGVSZSA9IC8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoICdXQ09EJywgX3dvcmRDaGFyT3JEb3QgKTtcblxuLy8gT2JqZWN0IG9uIHRhcmdldCBub2RlLCBhbmQgYWNjZXNzb3IuIE1heSBub3QgY29udGFpbiByZXNlcnZlZFxuLy8gY2hhcmFjdGVycy4gQWNjZXNzb3IgbWF5IGNvbnRhaW4gYW55IGNoYXJhY3RlciBleGNlcHQgY2xvc2luZyBicmFja2V0LlxuY29uc3QgX29iamVjdFJlID0gLyg/OlxcLihXQyspKD86XFxbKC4rKVxcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCAnV0MnLCBfd29yZENoYXIgKTtcblxuLy8gUHJvcGVydHkgYW5kIGFjY2Vzc29yLiBNYXkgbm90IGNvbnRhaW4gcmVzZXJ2ZWQgY2hhcmFjdGVycy4gQWNjZXNzb3IgbWF5XG4vLyBjb250YWluIGFueSBub24tYnJhY2tldCBjaGFyYWN0ZXJzLlxuY29uc3QgX3Byb3BlcnR5UmUgPSAvXFwuKFdDKykoPzpcXFsoLispXFxdKT8vLnNvdXJjZS5yZXBsYWNlKCAnV0MnLCBfd29yZENoYXIgKTtcblxuY29uc3QgX3RyYWNrUmUgPSBuZXcgUmVnRXhwKCAnJ1xuXHQrICdeJ1xuXHQrIF9kaXJlY3RvcnlSZVxuXHQrIF9ub2RlUmVcblx0KyBfb2JqZWN0UmVcblx0KyBfcHJvcGVydHlSZVxuXHQrICckJ1xuKTtcblxuY29uc3QgX3N1cHBvcnRlZE9iamVjdE5hbWVzID0gWyAnbWF0ZXJpYWwnLCAnbWF0ZXJpYWxzJywgJ2JvbmVzJyBdO1xuXG5jbGFzcyBDb21wb3NpdGUge1xuXG5cdGNvbnN0cnVjdG9yKCB0YXJnZXRHcm91cCwgcGF0aCwgb3B0aW9uYWxQYXJzZWRQYXRoICkge1xuXG5cdFx0Y29uc3QgcGFyc2VkUGF0aCA9IG9wdGlvbmFsUGFyc2VkUGF0aCB8fCBQcm9wZXJ0eUJpbmRpbmcucGFyc2VUcmFja05hbWUoIHBhdGggKTtcblxuXHRcdHRoaXMuX3RhcmdldEdyb3VwID0gdGFyZ2V0R3JvdXA7XG5cdFx0dGhpcy5fYmluZGluZ3MgPSB0YXJnZXRHcm91cC5zdWJzY3JpYmVfKCBwYXRoLCBwYXJzZWRQYXRoICk7XG5cblx0fVxuXG5cdGdldFZhbHVlKCBhcnJheSwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5iaW5kKCk7IC8vIGJpbmQgYWxsIGJpbmRpbmdcblxuXHRcdGNvbnN0IGZpcnN0VmFsaWRJbmRleCA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxcblx0XHRcdGJpbmRpbmcgPSB0aGlzLl9iaW5kaW5nc1sgZmlyc3RWYWxpZEluZGV4IF07XG5cblx0XHQvLyBhbmQgb25seSBjYWxsIC5nZXRWYWx1ZSBvbiB0aGUgZmlyc3Rcblx0XHRpZiAoIGJpbmRpbmcgIT09IHVuZGVmaW5lZCApIGJpbmRpbmcuZ2V0VmFsdWUoIGFycmF5LCBvZmZzZXQgKTtcblxuXHR9XG5cblx0c2V0VmFsdWUoIGFycmF5LCBvZmZzZXQgKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGJpbmRpbmdzWyBpIF0uc2V0VmFsdWUoIGFycmF5LCBvZmZzZXQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0YmluZCgpIHtcblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRmb3IgKCBsZXQgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0YmluZGluZ3NbIGkgXS5iaW5kKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHVuYmluZCgpIHtcblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRmb3IgKCBsZXQgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0YmluZGluZ3NbIGkgXS51bmJpbmQoKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuLy8gTm90ZTogVGhpcyBjbGFzcyB1c2VzIGEgU3RhdGUgcGF0dGVybiBvbiBhIHBlci1tZXRob2QgYmFzaXM6XG4vLyAnYmluZCcgc2V0cyAndGhpcy5nZXRWYWx1ZScgLyAnc2V0VmFsdWUnIGFuZCBzaGFkb3dzIHRoZVxuLy8gcHJvdG90eXBlIHZlcnNpb24gb2YgdGhlc2UgbWV0aG9kcyB3aXRoIG9uZSB0aGF0IHJlcHJlc2VudHNcbi8vIHRoZSBib3VuZCBzdGF0ZS4gV2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCB0aGUgbWV0aG9kc1xuLy8gYmVjb21lIG5vLW9wcy5cbmNsYXNzIFByb3BlcnR5QmluZGluZyB7XG5cblx0Y29uc3RydWN0b3IoIHJvb3ROb2RlLCBwYXRoLCBwYXJzZWRQYXRoICkge1xuXG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblx0XHR0aGlzLnBhcnNlZFBhdGggPSBwYXJzZWRQYXRoIHx8IFByb3BlcnR5QmluZGluZy5wYXJzZVRyYWNrTmFtZSggcGF0aCApO1xuXG5cdFx0dGhpcy5ub2RlID0gUHJvcGVydHlCaW5kaW5nLmZpbmROb2RlKCByb290Tm9kZSwgdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lICkgfHwgcm9vdE5vZGU7XG5cblx0XHR0aGlzLnJvb3ROb2RlID0gcm9vdE5vZGU7XG5cblx0XHQvLyBpbml0aWFsIHN0YXRlIG9mIHRoZXNlIG1ldGhvZHMgdGhhdCBjYWxscyAnYmluZCdcblx0XHR0aGlzLmdldFZhbHVlID0gdGhpcy5fZ2V0VmFsdWVfdW5ib3VuZDtcblx0XHR0aGlzLnNldFZhbHVlID0gdGhpcy5fc2V0VmFsdWVfdW5ib3VuZDtcblxuXHR9XG5cblxuXHRzdGF0aWMgY3JlYXRlKCByb290LCBwYXRoLCBwYXJzZWRQYXRoICkge1xuXG5cdFx0aWYgKCAhICggcm9vdCAmJiByb290LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXAgKSApIHtcblxuXHRcdFx0cmV0dXJuIG5ldyBQcm9wZXJ0eUJpbmRpbmcoIHJvb3QsIHBhdGgsIHBhcnNlZFBhdGggKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiBuZXcgUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZSggcm9vdCwgcGF0aCwgcGFyc2VkUGF0aCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogUmVwbGFjZXMgc3BhY2VzIHdpdGggdW5kZXJzY29yZXMgYW5kIHJlbW92ZXMgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyBmcm9tXG5cdCAqIG5vZGUgbmFtZXMsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggcGFyc2VUcmFja05hbWUoKS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9kZSBuYW1lIHRvIGJlIHNhbml0aXplZC5cblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIHNhbml0aXplTm9kZU5hbWUoIG5hbWUgKSB7XG5cblx0XHRyZXR1cm4gbmFtZS5yZXBsYWNlKCAvXFxzL2csICdfJyApLnJlcGxhY2UoIF9yZXNlcnZlZFJlLCAnJyApO1xuXG5cdH1cblxuXHRzdGF0aWMgcGFyc2VUcmFja05hbWUoIHRyYWNrTmFtZSApIHtcblxuXHRcdGNvbnN0IG1hdGNoZXMgPSBfdHJhY2tSZS5leGVjKCB0cmFja05hbWUgKTtcblxuXHRcdGlmICggISBtYXRjaGVzICkge1xuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICcgKyB0cmFja05hbWUgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSB7XG5cdFx0XHQvLyBkaXJlY3RvcnlOYW1lOiBtYXRjaGVzWyAxIF0sIC8vICh0c2NodykgY3VycmVudGx5IHVudXNlZFxuXHRcdFx0bm9kZU5hbWU6IG1hdGNoZXNbIDIgXSxcblx0XHRcdG9iamVjdE5hbWU6IG1hdGNoZXNbIDMgXSxcblx0XHRcdG9iamVjdEluZGV4OiBtYXRjaGVzWyA0IF0sXG5cdFx0XHRwcm9wZXJ0eU5hbWU6IG1hdGNoZXNbIDUgXSwgLy8gcmVxdWlyZWRcblx0XHRcdHByb3BlcnR5SW5kZXg6IG1hdGNoZXNbIDYgXVxuXHRcdH07XG5cblx0XHRjb25zdCBsYXN0RG90ID0gcmVzdWx0cy5ub2RlTmFtZSAmJiByZXN1bHRzLm5vZGVOYW1lLmxhc3RJbmRleE9mKCAnLicgKTtcblxuXHRcdGlmICggbGFzdERvdCAhPT0gdW5kZWZpbmVkICYmIGxhc3REb3QgIT09IC0gMSApIHtcblxuXHRcdFx0Y29uc3Qgb2JqZWN0TmFtZSA9IHJlc3VsdHMubm9kZU5hbWUuc3Vic3RyaW5nKCBsYXN0RG90ICsgMSApO1xuXG5cdFx0XHQvLyBPYmplY3QgbmFtZXMgbXVzdCBiZSBjaGVja2VkIGFnYWluc3QgYW4gYWxsb3dsaXN0LiBPdGhlcndpc2UsIHRoZXJlXG5cdFx0XHQvLyBpcyBubyB3YXkgdG8gcGFyc2UgJ2Zvby5iYXIuYmF6JzogJ2JheicgbXVzdCBiZSBhIHByb3BlcnR5LCBidXRcblx0XHRcdC8vICdiYXInIGNvdWxkIGJlIHRoZSBvYmplY3ROYW1lLCBvciBwYXJ0IG9mIGEgbm9kZU5hbWUgKHdoaWNoIGNhblxuXHRcdFx0Ly8gaW5jbHVkZSAnLicgY2hhcmFjdGVycykuXG5cdFx0XHRpZiAoIF9zdXBwb3J0ZWRPYmplY3ROYW1lcy5pbmRleE9mKCBvYmplY3ROYW1lICkgIT09IC0gMSApIHtcblxuXHRcdFx0XHRyZXN1bHRzLm5vZGVOYW1lID0gcmVzdWx0cy5ub2RlTmFtZS5zdWJzdHJpbmcoIDAsIGxhc3REb3QgKTtcblx0XHRcdFx0cmVzdWx0cy5vYmplY3ROYW1lID0gb2JqZWN0TmFtZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCByZXN1bHRzLnByb3BlcnR5TmFtZSA9PT0gbnVsbCB8fCByZXN1bHRzLnByb3BlcnR5TmFtZS5sZW5ndGggPT09IDAgKSB7XG5cblx0XHRcdHRocm93IG5ldyBFcnJvciggJ1Byb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICcgKyB0cmFja05hbWUgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHRzO1xuXG5cdH1cblxuXHRzdGF0aWMgZmluZE5vZGUoIHJvb3QsIG5vZGVOYW1lICkge1xuXG5cdFx0aWYgKCAhIG5vZGVOYW1lIHx8IG5vZGVOYW1lID09PSAnJyB8fCBub2RlTmFtZSA9PT0gJy4nIHx8IG5vZGVOYW1lID09PSAtIDEgfHwgbm9kZU5hbWUgPT09IHJvb3QubmFtZSB8fCBub2RlTmFtZSA9PT0gcm9vdC51dWlkICkge1xuXG5cdFx0XHRyZXR1cm4gcm9vdDtcblxuXHRcdH1cblxuXHRcdC8vIHNlYXJjaCBpbnRvIHNrZWxldG9uIGJvbmVzLlxuXHRcdGlmICggcm9vdC5za2VsZXRvbiApIHtcblxuXHRcdFx0Y29uc3QgYm9uZSA9IHJvb3Quc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZSggbm9kZU5hbWUgKTtcblxuXHRcdFx0aWYgKCBib25lICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGJvbmU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIHNlYXJjaCBpbnRvIG5vZGUgc3VidHJlZS5cblx0XHRpZiAoIHJvb3QuY2hpbGRyZW4gKSB7XG5cblx0XHRcdGNvbnN0IHNlYXJjaE5vZGVTdWJ0cmVlID0gZnVuY3Rpb24gKCBjaGlsZHJlbiApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBjaGlsZE5vZGUgPSBjaGlsZHJlblsgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCBjaGlsZE5vZGUubmFtZSA9PT0gbm9kZU5hbWUgfHwgY2hpbGROb2RlLnV1aWQgPT09IG5vZGVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY2hpbGROb2RlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2VhcmNoTm9kZVN1YnRyZWUoIGNoaWxkTm9kZS5jaGlsZHJlbiApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXN1bHQgKSByZXR1cm4gcmVzdWx0O1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc3ViVHJlZU5vZGUgPSBzZWFyY2hOb2RlU3VidHJlZSggcm9vdC5jaGlsZHJlbiApO1xuXG5cdFx0XHRpZiAoIHN1YlRyZWVOb2RlICkge1xuXG5cdFx0XHRcdHJldHVybiBzdWJUcmVlTm9kZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdC8vIHRoZXNlIGFyZSB1c2VkIHRvIFwiYmluZFwiIGEgbm9uZXhpc3RlbnQgcHJvcGVydHlcblx0X2dldFZhbHVlX3VuYXZhaWxhYmxlKCkge31cblx0X3NldFZhbHVlX3VuYXZhaWxhYmxlKCkge31cblxuXHQvLyBHZXR0ZXJzXG5cblx0X2dldFZhbHVlX2RpcmVjdCggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHRidWZmZXJbIG9mZnNldCBdID0gdGhpcy50YXJnZXRPYmplY3RbIHRoaXMucHJvcGVydHlOYW1lIF07XG5cblx0fVxuXG5cdF9nZXRWYWx1ZV9hcnJheSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHRjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVkUHJvcGVydHk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBzb3VyY2UubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRidWZmZXJbIG9mZnNldCArKyBdID0gc291cmNlWyBpIF07XG5cblx0XHR9XG5cblx0fVxuXG5cdF9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0YnVmZmVyWyBvZmZzZXQgXSA9IHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVsgdGhpcy5wcm9wZXJ0eUluZGV4IF07XG5cblx0fVxuXG5cdF9nZXRWYWx1ZV90b0FycmF5KCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KCBidWZmZXIsIG9mZnNldCApO1xuXG5cdH1cblxuXHQvLyBEaXJlY3RcblxuXHRfc2V0VmFsdWVfZGlyZWN0KCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMudGFyZ2V0T2JqZWN0WyB0aGlzLnByb3BlcnR5TmFtZSBdID0gYnVmZmVyWyBvZmZzZXQgXTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdFsgdGhpcy5wcm9wZXJ0eU5hbWUgXSA9IGJ1ZmZlclsgb2Zmc2V0IF07XG5cdFx0dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHRfc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy50YXJnZXRPYmplY3RbIHRoaXMucHJvcGVydHlOYW1lIF0gPSBidWZmZXJbIG9mZnNldCBdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHQvLyBFbnRpcmVBcnJheVxuXG5cdF9zZXRWYWx1ZV9hcnJheSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gZGVzdC5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGRlc3RbIGkgXSA9IGJ1ZmZlclsgb2Zmc2V0ICsrIF07XG5cblx0XHR9XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gZGVzdC5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGRlc3RbIGkgXSA9IGJ1ZmZlclsgb2Zmc2V0ICsrIF07XG5cblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdGNvbnN0IGRlc3QgPSB0aGlzLnJlc29sdmVkUHJvcGVydHk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBkZXN0Lmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0ZGVzdFsgaSBdID0gYnVmZmVyWyBvZmZzZXQgKysgXTtcblxuXHRcdH1cblxuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHQvLyBBcnJheUVsZW1lbnRcblxuXHRfc2V0VmFsdWVfYXJyYXlFbGVtZW50KCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVsgdGhpcy5wcm9wZXJ0eUluZGV4IF0gPSBidWZmZXJbIG9mZnNldCBdO1xuXG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVsgdGhpcy5wcm9wZXJ0eUluZGV4IF0gPSBidWZmZXJbIG9mZnNldCBdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVsgdGhpcy5wcm9wZXJ0eUluZGV4IF0gPSBidWZmZXJbIG9mZnNldCBdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHQvLyBIYXNUb0Zyb21BcnJheVxuXG5cdF9zZXRWYWx1ZV9mcm9tQXJyYXkoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSggYnVmZmVyLCBvZmZzZXQgKTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KCBidWZmZXIsIG9mZnNldCApO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoIGJ1ZmZlciwgb2Zmc2V0ICk7XG5cdFx0dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdF9nZXRWYWx1ZV91bmJvdW5kKCB0YXJnZXRBcnJheSwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5iaW5kKCk7XG5cdFx0dGhpcy5nZXRWYWx1ZSggdGFyZ2V0QXJyYXksIG9mZnNldCApO1xuXG5cdH1cblxuXHRfc2V0VmFsdWVfdW5ib3VuZCggc291cmNlQXJyYXksIG9mZnNldCApIHtcblxuXHRcdHRoaXMuYmluZCgpO1xuXHRcdHRoaXMuc2V0VmFsdWUoIHNvdXJjZUFycmF5LCBvZmZzZXQgKTtcblxuXHR9XG5cblx0Ly8gY3JlYXRlIGdldHRlciAvIHNldHRlciBwYWlyIGZvciBhIHByb3BlcnR5IGluIHRoZSBzY2VuZSBncmFwaFxuXHRiaW5kKCkge1xuXG5cdFx0bGV0IHRhcmdldE9iamVjdCA9IHRoaXMubm9kZTtcblx0XHRjb25zdCBwYXJzZWRQYXRoID0gdGhpcy5wYXJzZWRQYXRoO1xuXG5cdFx0Y29uc3Qgb2JqZWN0TmFtZSA9IHBhcnNlZFBhdGgub2JqZWN0TmFtZTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBwYXJzZWRQYXRoLnByb3BlcnR5TmFtZTtcblx0XHRsZXQgcHJvcGVydHlJbmRleCA9IHBhcnNlZFBhdGgucHJvcGVydHlJbmRleDtcblxuXHRcdGlmICggISB0YXJnZXRPYmplY3QgKSB7XG5cblx0XHRcdHRhcmdldE9iamVjdCA9IFByb3BlcnR5QmluZGluZy5maW5kTm9kZSggdGhpcy5yb290Tm9kZSwgcGFyc2VkUGF0aC5ub2RlTmFtZSApIHx8IHRoaXMucm9vdE5vZGU7XG5cblx0XHRcdHRoaXMubm9kZSA9IHRhcmdldE9iamVjdDtcblxuXHRcdH1cblxuXHRcdC8vIHNldCBmYWlsIHN0YXRlIHNvIHdlIGNhbiBqdXN0ICdyZXR1cm4nIG9uIGVycm9yXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtcblxuXHRcdC8vIGVuc3VyZSB0aGVyZSBpcyBhIHZhbHVlIG5vZGVcblx0XHRpZiAoICEgdGFyZ2V0T2JqZWN0ICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAnICsgdGhpcy5wYXRoICsgJyBidXQgaXQgd2FzblxcJ3QgZm91bmQuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvYmplY3ROYW1lICkge1xuXG5cdFx0XHRsZXQgb2JqZWN0SW5kZXggPSBwYXJzZWRQYXRoLm9iamVjdEluZGV4O1xuXG5cdFx0XHQvLyBzcGVjaWFsIGNhc2VzIHdlcmUgd2UgbmVlZCB0byByZWFjaCBkZWVwZXIgaW50byB0aGUgaGllcmFyY2h5IHRvIGdldCB0aGUgZmFjZSBtYXRlcmlhbHMuLi4uXG5cdFx0XHRzd2l0Y2ggKCBvYmplY3ROYW1lICkge1xuXG5cdFx0XHRcdGNhc2UgJ21hdGVyaWFscyc6XG5cblx0XHRcdFx0XHRpZiAoICEgdGFyZ2V0T2JqZWN0Lm1hdGVyaWFsICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuJywgdGhpcyApO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhIHRhcmdldE9iamVjdC5tYXRlcmlhbC5tYXRlcmlhbHMgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LicsIHRoaXMgKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdC5tYXRlcmlhbC5tYXRlcmlhbHM7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdib25lcyc6XG5cblx0XHRcdFx0XHRpZiAoICEgdGFyZ2V0T2JqZWN0LnNrZWxldG9uICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uJywgdGhpcyApO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb246IHNraXAgdGhpcyBpZiBwcm9wZXJ0eUluZGV4IGlzIGFscmVhZHkgYW4gaW50ZWdlclxuXHRcdFx0XHRcdC8vIGFuZCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHN0cmluZyB0byBhIHRydWUgaW50ZWdlci5cblxuXHRcdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdC5za2VsZXRvbi5ib25lcztcblxuXHRcdFx0XHRcdC8vIHN1cHBvcnQgcmVzb2x2aW5nIG1vcnBoVGFyZ2V0IG5hbWVzIGludG8gaW5kaWNlcy5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0YXJnZXRPYmplY3QubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHRhcmdldE9iamVjdFsgaSBdLm5hbWUgPT09IG9iamVjdEluZGV4ICkge1xuXG5cdFx0XHRcdFx0XHRcdG9iamVjdEluZGV4ID0gaTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRpZiAoIHRhcmdldE9iamVjdFsgb2JqZWN0TmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLicsIHRoaXMgKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdFsgb2JqZWN0TmFtZSBdO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0aWYgKCBvYmplY3RJbmRleCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggdGFyZ2V0T2JqZWN0WyBvYmplY3RJbmRleCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLicsIHRoaXMsIHRhcmdldE9iamVjdCApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0WyBvYmplY3RJbmRleCBdO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyByZXNvbHZlIHByb3BlcnR5XG5cdFx0Y29uc3Qgbm9kZVByb3BlcnR5ID0gdGFyZ2V0T2JqZWN0WyBwcm9wZXJ0eU5hbWUgXTtcblxuXHRcdGlmICggbm9kZVByb3BlcnR5ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IG5vZGVOYW1lID0gcGFyc2VkUGF0aC5ub2RlTmFtZTtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICcgKyBub2RlTmFtZSArXG5cdFx0XHRcdCcuJyArIHByb3BlcnR5TmFtZSArICcgYnV0IGl0IHdhc25cXCd0IGZvdW5kLicsIHRhcmdldE9iamVjdCApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0Ly8gZGV0ZXJtaW5lIHZlcnNpb25pbmcgc2NoZW1lXG5cdFx0bGV0IHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTm9uZTtcblxuXHRcdHRoaXMudGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0O1xuXG5cdFx0aWYgKCB0YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgIT09IHVuZGVmaW5lZCApIHsgLy8gbWF0ZXJpYWxcblxuXHRcdFx0dmVyc2lvbmluZyA9IHRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTtcblxuXHRcdH0gZWxzZSBpZiAoIHRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlICE9PSB1bmRlZmluZWQgKSB7IC8vIG5vZGUgdHJhbnNmb3JtXG5cblx0XHRcdHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZTtcblxuXHRcdH1cblxuXHRcdC8vIGRldGVybWluZSBob3cgdGhlIHByb3BlcnR5IGdldHMgYm91bmRcblx0XHRsZXQgYmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtcblxuXHRcdGlmICggcHJvcGVydHlJbmRleCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBhY2Nlc3MgYSBzdWIgZWxlbWVudCBvZiB0aGUgcHJvcGVydHkgYXJyYXkgKG9ubHkgcHJpbWl0aXZlcyBhcmUgc3VwcG9ydGVkIHJpZ2h0IG5vdylcblxuXHRcdFx0aWYgKCBwcm9wZXJ0eU5hbWUgPT09ICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnICkge1xuXG5cdFx0XHRcdC8vIHBvdGVudGlhbCBvcHRpbWl6YXRpb24sIHNraXAgdGhpcyBpZiBwcm9wZXJ0eUluZGV4IGlzIGFscmVhZHkgYW4gaW50ZWdlciwgYW5kIGNvbnZlcnQgdGhlIGludGVnZXIgc3RyaW5nIHRvIGEgdHJ1ZSBpbnRlZ2VyLlxuXG5cdFx0XHRcdC8vIHN1cHBvcnQgcmVzb2x2aW5nIG1vcnBoVGFyZ2V0IG5hbWVzIGludG8gaW5kaWNlcy5cblx0XHRcdFx0aWYgKCAhIHRhcmdldE9iamVjdC5nZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4nLCB0aGlzICk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHRhcmdldE9iamVjdC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0aWYgKCAhIHRhcmdldE9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuJywgdGhpcyApO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCB0YXJnZXRPYmplY3QubW9ycGhUYXJnZXREaWN0aW9uYXJ5WyBwcm9wZXJ0eUluZGV4IF0gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmRleCA9IHRhcmdldE9iamVjdC5tb3JwaFRhcmdldERpY3Rpb25hcnlbIHByb3BlcnR5SW5kZXggXTtcblxuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nLCB0aGlzICk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRiaW5kaW5nVHlwZSA9IHRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O1xuXG5cdFx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkgPSBub2RlUHJvcGVydHk7XG5cdFx0XHR0aGlzLnByb3BlcnR5SW5kZXggPSBwcm9wZXJ0eUluZGV4O1xuXG5cdFx0fSBlbHNlIGlmICggbm9kZVByb3BlcnR5LmZyb21BcnJheSAhPT0gdW5kZWZpbmVkICYmIG5vZGVQcm9wZXJ0eS50b0FycmF5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIG11c3QgdXNlIGNvcHkgZm9yIE9iamVjdDNELkV1bGVyL1F1YXRlcm5pb25cblxuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5O1xuXG5cdFx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkgPSBub2RlUHJvcGVydHk7XG5cblx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCBub2RlUHJvcGVydHkgKSApIHtcblxuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5O1xuXG5cdFx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkgPSBub2RlUHJvcGVydHk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcblxuXHRcdH1cblxuXHRcdC8vIHNlbGVjdCBnZXR0ZXIgLyBzZXR0ZXJcblx0XHR0aGlzLmdldFZhbHVlID0gdGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlWyBiaW5kaW5nVHlwZSBdO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nWyBiaW5kaW5nVHlwZSBdWyB2ZXJzaW9uaW5nIF07XG5cblx0fVxuXG5cdHVuYmluZCgpIHtcblxuXHRcdHRoaXMubm9kZSA9IG51bGw7XG5cblx0XHQvLyBiYWNrIHRvIHRoZSBwcm90b3R5cGUgdmVyc2lvbiBvZiBnZXRWYWx1ZSAvIHNldFZhbHVlXG5cdFx0Ly8gbm90ZTogYXZvaWRpbmcgdG8gbXV0YXRlIHRoZSBzaGFwZSBvZiAndGhpcycgdmlhICdkZWxldGUnXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlX3VuYm91bmQ7XG5cdFx0dGhpcy5zZXRWYWx1ZSA9IHRoaXMuX3NldFZhbHVlX3VuYm91bmQ7XG5cblx0fVxuXG59XG5cblByb3BlcnR5QmluZGluZy5Db21wb3NpdGUgPSBDb21wb3NpdGU7XG5cblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuQmluZGluZ1R5cGUgPSB7XG5cdERpcmVjdDogMCxcblx0RW50aXJlQXJyYXk6IDEsXG5cdEFycmF5RWxlbWVudDogMixcblx0SGFzRnJvbVRvQXJyYXk6IDNcbn07XG5cblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuVmVyc2lvbmluZyA9IHtcblx0Tm9uZTogMCxcblx0TmVlZHNVcGRhdGU6IDEsXG5cdE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6IDJcbn07XG5cblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZSA9IFtcblxuXHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsXG5cdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5LFxuXHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsXG5cdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXksXG5cbl07XG5cblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmcgPSBbXG5cblx0W1xuXHRcdC8vIERpcmVjdFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUsXG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsXG5cblx0XSwgW1xuXG5cdFx0Ly8gRW50aXJlQXJyYXlcblxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsXG5cblx0XSwgW1xuXG5cdFx0Ly8gQXJyYXlFbGVtZW50XG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSxcblxuXHRdLCBbXG5cblx0XHQvLyBIYXNUb0Zyb21BcnJheVxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUsXG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsXG5cblx0XVxuXG5dO1xuXG4vKipcbiAqXG4gKiBBIGdyb3VwIG9mIG9iamVjdHMgdGhhdCByZWNlaXZlcyBhIHNoYXJlZCBhbmltYXRpb24gc3RhdGUuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogIC0gQWRkIG9iamVjdHMgeW91IHdvdWxkIG90aGVyd2lzZSBwYXNzIGFzICdyb290JyB0byB0aGVcbiAqICAgIGNvbnN0cnVjdG9yIG9yIHRoZSAuY2xpcEFjdGlvbiBtZXRob2Qgb2YgQW5pbWF0aW9uTWl4ZXIuXG4gKlxuICogIC0gSW5zdGVhZCBwYXNzIHRoaXMgb2JqZWN0IGFzICdyb290Jy5cbiAqXG4gKiAgLSBZb3UgY2FuIGFsc28gYWRkIGFuZCByZW1vdmUgb2JqZWN0cyBsYXRlciB3aGVuIHRoZSBtaXhlclxuICogICAgaXMgcnVubmluZy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBhcHBlYXIgYXMgb25lIG9iamVjdCB0byB0aGUgbWl4ZXIsXG4gKiAgICBzbyBjYWNoZSBjb250cm9sIG9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdHMgbXVzdCBiZSBkb25lXG4gKiAgICBvbiB0aGUgZ3JvdXAuXG4gKlxuICogTGltaXRhdGlvbjpcbiAqXG4gKiAgLSBUaGUgYW5pbWF0ZWQgcHJvcGVydGllcyBtdXN0IGJlIGNvbXBhdGlibGUgYW1vbmcgdGhlXG4gKiAgICBhbGwgb2JqZWN0cyBpbiB0aGUgZ3JvdXAuXG4gKlxuICogIC0gQSBzaW5nbGUgcHJvcGVydHkgY2FuIGVpdGhlciBiZSBjb250cm9sbGVkIHRocm91Z2ggYVxuICogICAgdGFyZ2V0IGdyb3VwIG9yIGRpcmVjdGx5LCBidXQgbm90IGJvdGguXG4gKi9cblxuY2xhc3MgQW5pbWF0aW9uT2JqZWN0R3JvdXAge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHQvLyBjYWNoZWQgb2JqZWN0cyBmb2xsb3dlZCBieSB0aGUgYWN0aXZlIG9uZXNcblx0XHR0aGlzLl9vYmplY3RzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSAwOyAvLyB0aHJlc2hvbGRcblx0XHQvLyBub3RlOiByZWFkIGJ5IFByb3BlcnR5QmluZGluZy5Db21wb3NpdGVcblxuXHRcdGNvbnN0IGluZGljZXMgPSB7fTtcblx0XHR0aGlzLl9pbmRpY2VzQnlVVUlEID0gaW5kaWNlczsgLy8gZm9yIGJvb2trZWVwaW5nXG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRpbmRpY2VzWyBhcmd1bWVudHNbIGkgXS51dWlkIF0gPSBpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fcGF0aHMgPSBbXTsgLy8gaW5zaWRlOiBzdHJpbmdcblx0XHR0aGlzLl9wYXJzZWRQYXRocyA9IFtdOyAvLyBpbnNpZGU6IHsgd2UgZG9uJ3QgY2FyZSwgaGVyZSB9XG5cdFx0dGhpcy5fYmluZGluZ3MgPSBbXTsgLy8gaW5zaWRlOiBBcnJheTwgUHJvcGVydHlCaW5kaW5nID5cblx0XHR0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGggPSB7fTsgLy8gaW5zaWRlOiBpbmRpY2VzIGluIHRoZXNlIGFycmF5c1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0dGhpcy5zdGF0cyA9IHtcblxuXHRcdFx0b2JqZWN0czoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX29iamVjdHMubGVuZ3RoO1xuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnRvdGFsIC0gc2NvcGUubkNhY2hlZE9iamVjdHNfO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRnZXQgYmluZGluZ3NQZXJPYmplY3QoKSB7XG5cblx0XHRcdFx0cmV0dXJuIHNjb3BlLl9iaW5kaW5ncy5sZW5ndGg7XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0fVxuXG5cdGFkZCgpIHtcblxuXHRcdGNvbnN0IG9iamVjdHMgPSB0aGlzLl9vYmplY3RzLFxuXHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRwYXRocyA9IHRoaXMuX3BhdGhzLFxuXHRcdFx0cGFyc2VkUGF0aHMgPSB0aGlzLl9wYXJzZWRQYXRocyxcblx0XHRcdGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRuQmluZGluZ3MgPSBiaW5kaW5ncy5sZW5ndGg7XG5cblx0XHRsZXQga25vd25PYmplY3QgPSB1bmRlZmluZWQsXG5cdFx0XHRuT2JqZWN0cyA9IG9iamVjdHMubGVuZ3RoLFxuXHRcdFx0bkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IG9iamVjdCA9IGFyZ3VtZW50c1sgaSBdLFxuXHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQ7XG5cdFx0XHRsZXQgaW5kZXggPSBpbmRpY2VzQnlVVUlEWyB1dWlkIF07XG5cblx0XHRcdGlmICggaW5kZXggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyB1bmtub3duIG9iamVjdCAtPiBhZGQgaXQgdG8gdGhlIEFDVElWRSByZWdpb25cblxuXHRcdFx0XHRpbmRleCA9IG5PYmplY3RzICsrO1xuXHRcdFx0XHRpbmRpY2VzQnlVVUlEWyB1dWlkIF0gPSBpbmRleDtcblx0XHRcdFx0b2JqZWN0cy5wdXNoKCBvYmplY3QgKTtcblxuXHRcdFx0XHQvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArKyBqICkge1xuXG5cdFx0XHRcdFx0YmluZGluZ3NbIGogXS5wdXNoKCBuZXcgUHJvcGVydHlCaW5kaW5nKCBvYmplY3QsIHBhdGhzWyBqIF0sIHBhcnNlZFBhdGhzWyBqIF0gKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggaW5kZXggPCBuQ2FjaGVkT2JqZWN0cyApIHtcblxuXHRcdFx0XHRrbm93bk9iamVjdCA9IG9iamVjdHNbIGluZGV4IF07XG5cblx0XHRcdFx0Ly8gbW92ZSBleGlzdGluZyBvYmplY3QgdG8gdGhlIEFDVElWRSByZWdpb25cblxuXHRcdFx0XHRjb25zdCBmaXJzdEFjdGl2ZUluZGV4ID0gLS0gbkNhY2hlZE9iamVjdHMsXG5cdFx0XHRcdFx0bGFzdENhY2hlZE9iamVjdCA9IG9iamVjdHNbIGZpcnN0QWN0aXZlSW5kZXggXTtcblxuXHRcdFx0XHRpbmRpY2VzQnlVVUlEWyBsYXN0Q2FjaGVkT2JqZWN0LnV1aWQgXSA9IGluZGV4O1xuXHRcdFx0XHRvYmplY3RzWyBpbmRleCBdID0gbGFzdENhY2hlZE9iamVjdDtcblxuXHRcdFx0XHRpbmRpY2VzQnlVVUlEWyB1dWlkIF0gPSBmaXJzdEFjdGl2ZUluZGV4O1xuXHRcdFx0XHRvYmplY3RzWyBmaXJzdEFjdGl2ZUluZGV4IF0gPSBvYmplY3Q7XG5cblx0XHRcdFx0Ly8gYWNjb3VudGluZyBpcyBkb25lLCBub3cgZG8gdGhlIHNhbWUgZm9yIGFsbCBiaW5kaW5nc1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKysgaiApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzWyBqIF0sXG5cdFx0XHRcdFx0XHRsYXN0Q2FjaGVkID0gYmluZGluZ3NGb3JQYXRoWyBmaXJzdEFjdGl2ZUluZGV4IF07XG5cblx0XHRcdFx0XHRsZXQgYmluZGluZyA9IGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXTtcblxuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXSA9IGxhc3RDYWNoZWQ7XG5cblx0XHRcdFx0XHRpZiAoIGJpbmRpbmcgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gc2luY2Ugd2UgZG8gbm90IGJvdGhlciB0byBjcmVhdGUgbmV3IGJpbmRpbmdzXG5cdFx0XHRcdFx0XHQvLyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQsIHRoZSBiaW5kaW5nIG1heVxuXHRcdFx0XHRcdFx0Ly8gb3IgbWF5IG5vdCBleGlzdFxuXG5cdFx0XHRcdFx0XHRiaW5kaW5nID0gbmV3IFByb3BlcnR5QmluZGluZyggb2JqZWN0LCBwYXRoc1sgaiBdLCBwYXJzZWRQYXRoc1sgaiBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGZpcnN0QWN0aXZlSW5kZXggXSA9IGJpbmRpbmc7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3RzWyBpbmRleCBdICE9PSBrbm93bk9iamVjdCApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCAnICtcblx0XHRcdFx0XHQnZGV0ZWN0ZWQuIENsZWFuIHRoZSBjYWNoZXMgb3IgcmVjcmVhdGUgeW91ciBpbmZyYXN0cnVjdHVyZSB3aGVuIHJlbG9hZGluZyBzY2VuZXMuJyApO1xuXG5cdFx0XHR9IC8vIGVsc2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHdoZXJlIHdlIHdhbnQgaXQgdG8gYmVcblxuXHRcdH0gLy8gZm9yIGFyZ3VtZW50c1xuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblxuXHR9XG5cblx0cmVtb3ZlKCkge1xuXG5cdFx0Y29uc3Qgb2JqZWN0cyA9IHRoaXMuX29iamVjdHMsXG5cdFx0XHRpbmRpY2VzQnlVVUlEID0gdGhpcy5faW5kaWNlc0J5VVVJRCxcblx0XHRcdGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRuQmluZGluZ3MgPSBiaW5kaW5ncy5sZW5ndGg7XG5cblx0XHRsZXQgbkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IG9iamVjdCA9IGFyZ3VtZW50c1sgaSBdLFxuXHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQsXG5cdFx0XHRcdGluZGV4ID0gaW5kaWNlc0J5VVVJRFsgdXVpZCBdO1xuXG5cdFx0XHRpZiAoIGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gbkNhY2hlZE9iamVjdHMgKSB7XG5cblx0XHRcdFx0Ly8gbW92ZSBleGlzdGluZyBvYmplY3QgaW50byB0aGUgQ0FDSEVEIHJlZ2lvblxuXG5cdFx0XHRcdGNvbnN0IGxhc3RDYWNoZWRJbmRleCA9IG5DYWNoZWRPYmplY3RzICsrLFxuXHRcdFx0XHRcdGZpcnN0QWN0aXZlT2JqZWN0ID0gb2JqZWN0c1sgbGFzdENhY2hlZEluZGV4IF07XG5cblx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgZmlyc3RBY3RpdmVPYmplY3QudXVpZCBdID0gaW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbIGluZGV4IF0gPSBmaXJzdEFjdGl2ZU9iamVjdDtcblxuXHRcdFx0XHRpbmRpY2VzQnlVVUlEWyB1dWlkIF0gPSBsYXN0Q2FjaGVkSW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbIGxhc3RDYWNoZWRJbmRleCBdID0gb2JqZWN0O1xuXG5cdFx0XHRcdC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsrIGogKSB7XG5cblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nc0ZvclBhdGggPSBiaW5kaW5nc1sgaiBdLFxuXHRcdFx0XHRcdFx0Zmlyc3RBY3RpdmUgPSBiaW5kaW5nc0ZvclBhdGhbIGxhc3RDYWNoZWRJbmRleCBdLFxuXHRcdFx0XHRcdFx0YmluZGluZyA9IGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXTtcblxuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXSA9IGZpcnN0QWN0aXZlO1xuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFsgbGFzdENhY2hlZEluZGV4IF0gPSBiaW5kaW5nO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSAvLyBmb3IgYXJndW1lbnRzXG5cblx0XHR0aGlzLm5DYWNoZWRPYmplY3RzXyA9IG5DYWNoZWRPYmplY3RzO1xuXG5cdH1cblxuXHQvLyByZW1vdmUgJiBmb3JnZXRcblx0dW5jYWNoZSgpIHtcblxuXHRcdGNvbnN0IG9iamVjdHMgPSB0aGlzLl9vYmplY3RzLFxuXHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0bkJpbmRpbmdzID0gYmluZGluZ3MubGVuZ3RoO1xuXG5cdFx0bGV0IG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRuT2JqZWN0cyA9IG9iamVjdHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gYXJndW1lbnRzWyBpIF0sXG5cdFx0XHRcdHV1aWQgPSBvYmplY3QudXVpZCxcblx0XHRcdFx0aW5kZXggPSBpbmRpY2VzQnlVVUlEWyB1dWlkIF07XG5cblx0XHRcdGlmICggaW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRkZWxldGUgaW5kaWNlc0J5VVVJRFsgdXVpZCBdO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCBuQ2FjaGVkT2JqZWN0cyApIHtcblxuXHRcdFx0XHRcdC8vIG9iamVjdCBpcyBjYWNoZWQsIHNocmluayB0aGUgQ0FDSEVEIHJlZ2lvblxuXG5cdFx0XHRcdFx0Y29uc3QgZmlyc3RBY3RpdmVJbmRleCA9IC0tIG5DYWNoZWRPYmplY3RzLFxuXHRcdFx0XHRcdFx0bGFzdENhY2hlZE9iamVjdCA9IG9iamVjdHNbIGZpcnN0QWN0aXZlSW5kZXggXSxcblx0XHRcdFx0XHRcdGxhc3RJbmRleCA9IC0tIG5PYmplY3RzLFxuXHRcdFx0XHRcdFx0bGFzdE9iamVjdCA9IG9iamVjdHNbIGxhc3RJbmRleCBdO1xuXG5cdFx0XHRcdFx0Ly8gbGFzdCBjYWNoZWQgb2JqZWN0IHRha2VzIHRoaXMgb2JqZWN0J3MgcGxhY2Vcblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEWyBsYXN0Q2FjaGVkT2JqZWN0LnV1aWQgXSA9IGluZGV4O1xuXHRcdFx0XHRcdG9iamVjdHNbIGluZGV4IF0gPSBsYXN0Q2FjaGVkT2JqZWN0O1xuXG5cdFx0XHRcdFx0Ly8gbGFzdCBvYmplY3QgZ29lcyB0byB0aGUgYWN0aXZhdGVkIHNsb3QgYW5kIHBvcFxuXHRcdFx0XHRcdGluZGljZXNCeVVVSURbIGxhc3RPYmplY3QudXVpZCBdID0gZmlyc3RBY3RpdmVJbmRleDtcblx0XHRcdFx0XHRvYmplY3RzWyBmaXJzdEFjdGl2ZUluZGV4IF0gPSBsYXN0T2JqZWN0O1xuXHRcdFx0XHRcdG9iamVjdHMucG9wKCk7XG5cblx0XHRcdFx0XHQvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsrIGogKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzWyBqIF0sXG5cdFx0XHRcdFx0XHRcdGxhc3RDYWNoZWQgPSBiaW5kaW5nc0ZvclBhdGhbIGZpcnN0QWN0aXZlSW5kZXggXSxcblx0XHRcdFx0XHRcdFx0bGFzdCA9IGJpbmRpbmdzRm9yUGF0aFsgbGFzdEluZGV4IF07XG5cblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXSA9IGxhc3RDYWNoZWQ7XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGZpcnN0QWN0aXZlSW5kZXggXSA9IGxhc3Q7XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGgucG9wKCk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIG9iamVjdCBpcyBhY3RpdmUsIGp1c3Qgc3dhcCB3aXRoIHRoZSBsYXN0IGFuZCBwb3BcblxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJbmRleCA9IC0tIG5PYmplY3RzLFxuXHRcdFx0XHRcdFx0bGFzdE9iamVjdCA9IG9iamVjdHNbIGxhc3RJbmRleCBdO1xuXG5cdFx0XHRcdFx0aWYgKCBsYXN0SW5kZXggPiAwICkge1xuXG5cdFx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEWyBsYXN0T2JqZWN0LnV1aWQgXSA9IGluZGV4O1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b2JqZWN0c1sgaW5kZXggXSA9IGxhc3RPYmplY3Q7XG5cdFx0XHRcdFx0b2JqZWN0cy5wb3AoKTtcblxuXHRcdFx0XHRcdC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKysgaiApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ3NGb3JQYXRoID0gYmluZGluZ3NbIGogXTtcblxuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoWyBpbmRleCBdID0gYmluZGluZ3NGb3JQYXRoWyBsYXN0SW5kZXggXTtcblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aC5wb3AoKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IC8vIGNhY2hlZCBvciBhY3RpdmVcblxuXHRcdFx0fSAvLyBpZiBvYmplY3QgaXMga25vd25cblxuXHRcdH0gLy8gZm9yIGFyZ3VtZW50c1xuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblxuXHR9XG5cblx0Ly8gSW50ZXJuYWwgaW50ZXJmYWNlIHVzZWQgYnkgYmVmcmllbmRlZCBQcm9wZXJ0eUJpbmRpbmcuQ29tcG9zaXRlOlxuXG5cdHN1YnNjcmliZV8oIHBhdGgsIHBhcnNlZFBhdGggKSB7XG5cblx0XHQvLyByZXR1cm5zIGFuIGFycmF5IG9mIGJpbmRpbmdzIGZvciB0aGUgZ2l2ZW4gcGF0aCB0aGF0IGlzIGNoYW5nZWRcblx0XHQvLyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRhaW5lZCBvYmplY3RzIGluIHRoZSBncm91cFxuXG5cdFx0Y29uc3QgaW5kaWNlc0J5UGF0aCA9IHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aDtcblx0XHRsZXQgaW5kZXggPSBpbmRpY2VzQnlQYXRoWyBwYXRoIF07XG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncztcblxuXHRcdGlmICggaW5kZXggIT09IHVuZGVmaW5lZCApIHJldHVybiBiaW5kaW5nc1sgaW5kZXggXTtcblxuXHRcdGNvbnN0IHBhdGhzID0gdGhpcy5fcGF0aHMsXG5cdFx0XHRwYXJzZWRQYXRocyA9IHRoaXMuX3BhcnNlZFBhdGhzLFxuXHRcdFx0b2JqZWN0cyA9IHRoaXMuX29iamVjdHMsXG5cdFx0XHRuT2JqZWN0cyA9IG9iamVjdHMubGVuZ3RoLFxuXHRcdFx0bkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXyxcblx0XHRcdGJpbmRpbmdzRm9yUGF0aCA9IG5ldyBBcnJheSggbk9iamVjdHMgKTtcblxuXHRcdGluZGV4ID0gYmluZGluZ3MubGVuZ3RoO1xuXG5cdFx0aW5kaWNlc0J5UGF0aFsgcGF0aCBdID0gaW5kZXg7XG5cblx0XHRwYXRocy5wdXNoKCBwYXRoICk7XG5cdFx0cGFyc2VkUGF0aHMucHVzaCggcGFyc2VkUGF0aCApO1xuXHRcdGJpbmRpbmdzLnB1c2goIGJpbmRpbmdzRm9yUGF0aCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSBuQ2FjaGVkT2JqZWN0cywgbiA9IG9iamVjdHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSBvYmplY3RzWyBpIF07XG5cdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGkgXSA9IG5ldyBQcm9wZXJ0eUJpbmRpbmcoIG9iamVjdCwgcGF0aCwgcGFyc2VkUGF0aCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJpbmRpbmdzRm9yUGF0aDtcblxuXHR9XG5cblx0dW5zdWJzY3JpYmVfKCBwYXRoICkge1xuXG5cdFx0Ly8gdGVsbHMgdGhlIGdyb3VwIHRvIGZvcmdldCBhYm91dCBhIHByb3BlcnR5IHBhdGggYW5kIG5vIGxvbmdlclxuXHRcdC8vIHVwZGF0ZSB0aGUgYXJyYXkgcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoICdzdWJzY3JpYmVfJ1xuXG5cdFx0Y29uc3QgaW5kaWNlc0J5UGF0aCA9IHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxcblx0XHRcdGluZGV4ID0gaW5kaWNlc0J5UGF0aFsgcGF0aCBdO1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBwYXRocyA9IHRoaXMuX3BhdGhzLFxuXHRcdFx0XHRwYXJzZWRQYXRocyA9IHRoaXMuX3BhcnNlZFBhdGhzLFxuXHRcdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRsYXN0QmluZGluZ3NJbmRleCA9IGJpbmRpbmdzLmxlbmd0aCAtIDEsXG5cdFx0XHRcdGxhc3RCaW5kaW5ncyA9IGJpbmRpbmdzWyBsYXN0QmluZGluZ3NJbmRleCBdLFxuXHRcdFx0XHRsYXN0QmluZGluZ3NQYXRoID0gcGF0aFsgbGFzdEJpbmRpbmdzSW5kZXggXTtcblxuXHRcdFx0aW5kaWNlc0J5UGF0aFsgbGFzdEJpbmRpbmdzUGF0aCBdID0gaW5kZXg7XG5cblx0XHRcdGJpbmRpbmdzWyBpbmRleCBdID0gbGFzdEJpbmRpbmdzO1xuXHRcdFx0YmluZGluZ3MucG9wKCk7XG5cblx0XHRcdHBhcnNlZFBhdGhzWyBpbmRleCBdID0gcGFyc2VkUGF0aHNbIGxhc3RCaW5kaW5nc0luZGV4IF07XG5cdFx0XHRwYXJzZWRQYXRocy5wb3AoKTtcblxuXHRcdFx0cGF0aHNbIGluZGV4IF0gPSBwYXRoc1sgbGFzdEJpbmRpbmdzSW5kZXggXTtcblx0XHRcdHBhdGhzLnBvcCgpO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5BbmltYXRpb25PYmplY3RHcm91cC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cCA9IHRydWU7XG5cbmNsYXNzIEFuaW1hdGlvbkFjdGlvbiB7XG5cblx0Y29uc3RydWN0b3IoIG1peGVyLCBjbGlwLCBsb2NhbFJvb3QgPSBudWxsLCBibGVuZE1vZGUgPSBjbGlwLmJsZW5kTW9kZSApIHtcblxuXHRcdHRoaXMuX21peGVyID0gbWl4ZXI7XG5cdFx0dGhpcy5fY2xpcCA9IGNsaXA7XG5cdFx0dGhpcy5fbG9jYWxSb290ID0gbG9jYWxSb290O1xuXHRcdHRoaXMuYmxlbmRNb2RlID0gYmxlbmRNb2RlO1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gY2xpcC50cmFja3MsXG5cdFx0XHRuVHJhY2tzID0gdHJhY2tzLmxlbmd0aCxcblx0XHRcdGludGVycG9sYW50cyA9IG5ldyBBcnJheSggblRyYWNrcyApO1xuXG5cdFx0Y29uc3QgaW50ZXJwb2xhbnRTZXR0aW5ncyA9IHtcblx0XHRcdGVuZGluZ1N0YXJ0OiBaZXJvQ3VydmF0dXJlRW5kaW5nLFxuXHRcdFx0ZW5kaW5nRW5kOiBaZXJvQ3VydmF0dXJlRW5kaW5nXG5cdFx0fTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gblRyYWNrczsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0cmFja3NbIGkgXS5jcmVhdGVJbnRlcnBvbGFudCggbnVsbCApO1xuXHRcdFx0aW50ZXJwb2xhbnRzWyBpIF0gPSBpbnRlcnBvbGFudDtcblx0XHRcdGludGVycG9sYW50LnNldHRpbmdzID0gaW50ZXJwb2xhbnRTZXR0aW5ncztcblxuXHRcdH1cblxuXHRcdHRoaXMuX2ludGVycG9sYW50U2V0dGluZ3MgPSBpbnRlcnBvbGFudFNldHRpbmdzO1xuXG5cdFx0dGhpcy5faW50ZXJwb2xhbnRzID0gaW50ZXJwb2xhbnRzOyAvLyBib3VuZCBieSB0aGUgbWl4ZXJcblxuXHRcdC8vIGluc2lkZTogUHJvcGVydHlNaXhlciAobWFuYWdlZCBieSB0aGUgbWl4ZXIpXG5cdFx0dGhpcy5fcHJvcGVydHlCaW5kaW5ncyA9IG5ldyBBcnJheSggblRyYWNrcyApO1xuXG5cdFx0dGhpcy5fY2FjaGVJbmRleCA9IG51bGw7IC8vIGZvciB0aGUgbWVtb3J5IG1hbmFnZXJcblx0XHR0aGlzLl9ieUNsaXBDYWNoZUluZGV4ID0gbnVsbDsgLy8gZm9yIHRoZSBtZW1vcnkgbWFuYWdlclxuXG5cdFx0dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQgPSBudWxsO1xuXHRcdHRoaXMuX3dlaWdodEludGVycG9sYW50ID0gbnVsbDtcblxuXHRcdHRoaXMubG9vcCA9IExvb3BSZXBlYXQ7XG5cdFx0dGhpcy5fbG9vcENvdW50ID0gLSAxO1xuXG5cdFx0Ly8gZ2xvYmFsIG1peGVyIHRpbWUgd2hlbiB0aGUgYWN0aW9uIGlzIHRvIGJlIHN0YXJ0ZWRcblx0XHQvLyBpdCdzIHNldCBiYWNrIHRvICdudWxsJyB1cG9uIHN0YXJ0IG9mIHRoZSBhY3Rpb25cblx0XHR0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuXG5cdFx0Ly8gc2NhbGVkIGxvY2FsIHRpbWUgb2YgdGhlIGFjdGlvblxuXHRcdC8vIGdldHMgY2xhbXBlZCBvciB3cmFwcGVkIHRvIDAuLmNsaXAuZHVyYXRpb24gYWNjb3JkaW5nIHRvIGxvb3Bcblx0XHR0aGlzLnRpbWUgPSAwO1xuXG5cdFx0dGhpcy50aW1lU2NhbGUgPSAxO1xuXHRcdHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSA9IDE7XG5cblx0XHR0aGlzLndlaWdodCA9IDE7XG5cdFx0dGhpcy5fZWZmZWN0aXZlV2VpZ2h0ID0gMTtcblxuXHRcdHRoaXMucmVwZXRpdGlvbnMgPSBJbmZpbml0eTsgLy8gbm8uIG9mIHJlcGV0aXRpb25zIHdoZW4gbG9vcGluZ1xuXG5cdFx0dGhpcy5wYXVzZWQgPSBmYWxzZTsgLy8gdHJ1ZSAtPiB6ZXJvIGVmZmVjdGl2ZSB0aW1lIHNjYWxlXG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTsgLy8gZmFsc2UgLT4gemVybyBlZmZlY3RpdmUgd2VpZ2h0XG5cblx0XHR0aGlzLmNsYW1wV2hlbkZpbmlzaGVkID0gZmFsc2U7Ly8ga2VlcCBmZWVkaW5nIHRoZSBsYXN0IGZyYW1lP1xuXG5cdFx0dGhpcy56ZXJvU2xvcGVBdFN0YXJ0ID0gdHJ1ZTsvLyBmb3Igc21vb3RoIGludGVycG9sYXRpb24gdy9vIHNlcGFyYXRlXG5cdFx0dGhpcy56ZXJvU2xvcGVBdEVuZCA9IHRydWU7Ly8gY2xpcHMgZm9yIHN0YXJ0LCBsb29wIGFuZCBlbmRcblxuXHR9XG5cblx0Ly8gU3RhdGUgJiBTY2hlZHVsaW5nXG5cblx0cGxheSgpIHtcblxuXHRcdHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbiggdGhpcyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN0b3AoKSB7XG5cblx0XHR0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbiggdGhpcyApO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzZXQoKTtcblxuXHR9XG5cblx0cmVzZXQoKSB7XG5cblx0XHR0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXHRcdHRoaXMuZW5hYmxlZCA9IHRydWU7XG5cblx0XHR0aGlzLnRpbWUgPSAwOyAvLyByZXN0YXJ0IGNsaXBcblx0XHR0aGlzLl9sb29wQ291bnQgPSAtIDE7Ly8gZm9yZ2V0IHByZXZpb3VzIGxvb3BzXG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDsvLyBmb3JnZXQgc2NoZWR1bGluZ1xuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCk7XG5cblx0fVxuXG5cdGlzUnVubmluZygpIHtcblxuXHRcdHJldHVybiB0aGlzLmVuYWJsZWQgJiYgISB0aGlzLnBhdXNlZCAmJiB0aGlzLnRpbWVTY2FsZSAhPT0gMCAmJlxuXHRcdFx0dGhpcy5fc3RhcnRUaW1lID09PSBudWxsICYmIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbiggdGhpcyApO1xuXG5cdH1cblxuXHQvLyByZXR1cm4gdHJ1ZSB3aGVuIHBsYXkgaGFzIGJlZW4gY2FsbGVkXG5cdGlzU2NoZWR1bGVkKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbiggdGhpcyApO1xuXG5cdH1cblxuXHRzdGFydEF0KCB0aW1lICkge1xuXG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRMb29wKCBtb2RlLCByZXBldGl0aW9ucyApIHtcblxuXHRcdHRoaXMubG9vcCA9IG1vZGU7XG5cdFx0dGhpcy5yZXBldGl0aW9ucyA9IHJlcGV0aXRpb25zO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIFdlaWdodFxuXG5cdC8vIHNldCB0aGUgd2VpZ2h0IHN0b3BwaW5nIGFueSBzY2hlZHVsZWQgZmFkaW5nXG5cdC8vIGFsdGhvdWdoIC5lbmFibGVkID0gZmFsc2UgeWllbGRzIGFuIGVmZmVjdGl2ZSB3ZWlnaHQgb2YgemVybywgdGhpc1xuXHQvLyBtZXRob2QgZG9lcyAqbm90KiBjaGFuZ2UgLmVuYWJsZWQsIGJlY2F1c2UgaXQgd291bGQgYmUgY29uZnVzaW5nXG5cdHNldEVmZmVjdGl2ZVdlaWdodCggd2VpZ2h0ICkge1xuXG5cdFx0dGhpcy53ZWlnaHQgPSB3ZWlnaHQ7XG5cblx0XHQvLyBub3RlOiBzYW1lIGxvZ2ljIGFzIHdoZW4gdXBkYXRlZCBhdCBydW50aW1lXG5cdFx0dGhpcy5fZWZmZWN0aXZlV2VpZ2h0ID0gdGhpcy5lbmFibGVkID8gd2VpZ2h0IDogMDtcblxuXHRcdHJldHVybiB0aGlzLnN0b3BGYWRpbmcoKTtcblxuXHR9XG5cblx0Ly8gcmV0dXJuIHRoZSB3ZWlnaHQgY29uc2lkZXJpbmcgZmFkaW5nIGFuZCAuZW5hYmxlZFxuXHRnZXRFZmZlY3RpdmVXZWlnaHQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0O1xuXG5cdH1cblxuXHRmYWRlSW4oIGR1cmF0aW9uICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKCBkdXJhdGlvbiwgMCwgMSApO1xuXG5cdH1cblxuXHRmYWRlT3V0KCBkdXJhdGlvbiApIHtcblxuXHRcdHJldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyggZHVyYXRpb24sIDEsIDAgKTtcblxuXHR9XG5cblx0Y3Jvc3NGYWRlRnJvbSggZmFkZU91dEFjdGlvbiwgZHVyYXRpb24sIHdhcnAgKSB7XG5cblx0XHRmYWRlT3V0QWN0aW9uLmZhZGVPdXQoIGR1cmF0aW9uICk7XG5cdFx0dGhpcy5mYWRlSW4oIGR1cmF0aW9uICk7XG5cblx0XHRpZiAoIHdhcnAgKSB7XG5cblx0XHRcdGNvbnN0IGZhZGVJbkR1cmF0aW9uID0gdGhpcy5fY2xpcC5kdXJhdGlvbixcblx0XHRcdFx0ZmFkZU91dER1cmF0aW9uID0gZmFkZU91dEFjdGlvbi5fY2xpcC5kdXJhdGlvbixcblxuXHRcdFx0XHRzdGFydEVuZFJhdGlvID0gZmFkZU91dER1cmF0aW9uIC8gZmFkZUluRHVyYXRpb24sXG5cdFx0XHRcdGVuZFN0YXJ0UmF0aW8gPSBmYWRlSW5EdXJhdGlvbiAvIGZhZGVPdXREdXJhdGlvbjtcblxuXHRcdFx0ZmFkZU91dEFjdGlvbi53YXJwKCAxLjAsIHN0YXJ0RW5kUmF0aW8sIGR1cmF0aW9uICk7XG5cdFx0XHR0aGlzLndhcnAoIGVuZFN0YXJ0UmF0aW8sIDEuMCwgZHVyYXRpb24gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjcm9zc0ZhZGVUbyggZmFkZUluQWN0aW9uLCBkdXJhdGlvbiwgd2FycCApIHtcblxuXHRcdHJldHVybiBmYWRlSW5BY3Rpb24uY3Jvc3NGYWRlRnJvbSggdGhpcywgZHVyYXRpb24sIHdhcnAgKTtcblxuXHR9XG5cblx0c3RvcEZhZGluZygpIHtcblxuXHRcdGNvbnN0IHdlaWdodEludGVycG9sYW50ID0gdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7XG5cblx0XHRpZiAoIHdlaWdodEludGVycG9sYW50ICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl93ZWlnaHRJbnRlcnBvbGFudCA9IG51bGw7XG5cdFx0XHR0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQoIHdlaWdodEludGVycG9sYW50ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Ly8gVGltZSBTY2FsZSBDb250cm9sXG5cblx0Ly8gc2V0IHRoZSB0aW1lIHNjYWxlIHN0b3BwaW5nIGFueSBzY2hlZHVsZWQgd2FycGluZ1xuXHQvLyBhbHRob3VnaCAucGF1c2VkID0gdHJ1ZSB5aWVsZHMgYW4gZWZmZWN0aXZlIHRpbWUgc2NhbGUgb2YgemVybywgdGhpc1xuXHQvLyBtZXRob2QgZG9lcyAqbm90KiBjaGFuZ2UgLnBhdXNlZCwgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb25mdXNpbmdcblx0c2V0RWZmZWN0aXZlVGltZVNjYWxlKCB0aW1lU2NhbGUgKSB7XG5cblx0XHR0aGlzLnRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcblx0XHR0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUgPSB0aGlzLnBhdXNlZCA/IDAgOiB0aW1lU2NhbGU7XG5cblx0XHRyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpO1xuXG5cdH1cblxuXHQvLyByZXR1cm4gdGhlIHRpbWUgc2NhbGUgY29uc2lkZXJpbmcgd2FycGluZyBhbmQgLnBhdXNlZFxuXHRnZXRFZmZlY3RpdmVUaW1lU2NhbGUoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlO1xuXG5cdH1cblxuXHRzZXREdXJhdGlvbiggZHVyYXRpb24gKSB7XG5cblx0XHR0aGlzLnRpbWVTY2FsZSA9IHRoaXMuX2NsaXAuZHVyYXRpb24gLyBkdXJhdGlvbjtcblxuXHRcdHJldHVybiB0aGlzLnN0b3BXYXJwaW5nKCk7XG5cblx0fVxuXG5cdHN5bmNXaXRoKCBhY3Rpb24gKSB7XG5cblx0XHR0aGlzLnRpbWUgPSBhY3Rpb24udGltZTtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IGFjdGlvbi50aW1lU2NhbGU7XG5cblx0XHRyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpO1xuXG5cdH1cblxuXHRoYWx0KCBkdXJhdGlvbiApIHtcblxuXHRcdHJldHVybiB0aGlzLndhcnAoIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwgMCwgZHVyYXRpb24gKTtcblxuXHR9XG5cblx0d2FycCggc3RhcnRUaW1lU2NhbGUsIGVuZFRpbWVTY2FsZSwgZHVyYXRpb24gKSB7XG5cblx0XHRjb25zdCBtaXhlciA9IHRoaXMuX21peGVyLFxuXHRcdFx0bm93ID0gbWl4ZXIudGltZSxcblx0XHRcdHRpbWVTY2FsZSA9IHRoaXMudGltZVNjYWxlO1xuXG5cdFx0bGV0IGludGVycG9sYW50ID0gdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7XG5cblx0XHRpZiAoIGludGVycG9sYW50ID09PSBudWxsICkge1xuXG5cdFx0XHRpbnRlcnBvbGFudCA9IG1peGVyLl9sZW5kQ29udHJvbEludGVycG9sYW50KCk7XG5cdFx0XHR0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCA9IGludGVycG9sYW50O1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGltZXMgPSBpbnRlcnBvbGFudC5wYXJhbWV0ZXJQb3NpdGlvbnMsXG5cdFx0XHR2YWx1ZXMgPSBpbnRlcnBvbGFudC5zYW1wbGVWYWx1ZXM7XG5cblx0XHR0aW1lc1sgMCBdID0gbm93O1xuXHRcdHRpbWVzWyAxIF0gPSBub3cgKyBkdXJhdGlvbjtcblxuXHRcdHZhbHVlc1sgMCBdID0gc3RhcnRUaW1lU2NhbGUgLyB0aW1lU2NhbGU7XG5cdFx0dmFsdWVzWyAxIF0gPSBlbmRUaW1lU2NhbGUgLyB0aW1lU2NhbGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3RvcFdhcnBpbmcoKSB7XG5cblx0XHRjb25zdCB0aW1lU2NhbGVJbnRlcnBvbGFudCA9IHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O1xuXG5cdFx0aWYgKCB0aW1lU2NhbGVJbnRlcnBvbGFudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQgPSBudWxsO1xuXHRcdFx0dGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KCB0aW1lU2NhbGVJbnRlcnBvbGFudCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIE9iamVjdCBBY2Nlc3NvcnNcblxuXHRnZXRNaXhlcigpIHtcblxuXHRcdHJldHVybiB0aGlzLl9taXhlcjtcblxuXHR9XG5cblx0Z2V0Q2xpcCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9jbGlwO1xuXG5cdH1cblxuXHRnZXRSb290KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsUm9vdCB8fCB0aGlzLl9taXhlci5fcm9vdDtcblxuXHR9XG5cblx0Ly8gSW50ZXJuYVxuXG5cdF91cGRhdGUoIHRpbWUsIGRlbHRhVGltZSwgdGltZURpcmVjdGlvbiwgYWNjdUluZGV4ICkge1xuXG5cdFx0Ly8gY2FsbGVkIGJ5IHRoZSBtaXhlclxuXG5cdFx0aWYgKCAhIHRoaXMuZW5hYmxlZCApIHtcblxuXHRcdFx0Ly8gY2FsbCAuX3VwZGF0ZVdlaWdodCgpIHRvIHVwZGF0ZSAuX2VmZmVjdGl2ZVdlaWdodFxuXG5cdFx0XHR0aGlzLl91cGRhdGVXZWlnaHQoIHRpbWUgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTtcblxuXHRcdGlmICggc3RhcnRUaW1lICE9PSBudWxsICkge1xuXG5cdFx0XHQvLyBjaGVjayBmb3Igc2NoZWR1bGVkIHN0YXJ0IG9mIGFjdGlvblxuXG5cdFx0XHRjb25zdCB0aW1lUnVubmluZyA9ICggdGltZSAtIHN0YXJ0VGltZSApICogdGltZURpcmVjdGlvbjtcblx0XHRcdGlmICggdGltZVJ1bm5pbmcgPCAwIHx8IHRpbWVEaXJlY3Rpb24gPT09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuOyAvLyB5ZXQgdG8gY29tZSAvIGRvbid0IGRlY2lkZSB3aGVuIGRlbHRhID0gMFxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHN0YXJ0XG5cblx0XHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7IC8vIHVuc2NoZWR1bGVcblx0XHRcdGRlbHRhVGltZSA9IHRpbWVEaXJlY3Rpb24gKiB0aW1lUnVubmluZztcblxuXHRcdH1cblxuXHRcdC8vIGFwcGx5IHRpbWUgc2NhbGUgYW5kIGFkdmFuY2UgdGltZVxuXG5cdFx0ZGVsdGFUaW1lICo9IHRoaXMuX3VwZGF0ZVRpbWVTY2FsZSggdGltZSApO1xuXHRcdGNvbnN0IGNsaXBUaW1lID0gdGhpcy5fdXBkYXRlVGltZSggZGVsdGFUaW1lICk7XG5cblx0XHQvLyBub3RlOiBfdXBkYXRlVGltZSBtYXkgZGlzYWJsZSB0aGUgYWN0aW9uIHJlc3VsdGluZyBpblxuXHRcdC8vIGFuIGVmZmVjdGl2ZSB3ZWlnaHQgb2YgMFxuXG5cdFx0Y29uc3Qgd2VpZ2h0ID0gdGhpcy5fdXBkYXRlV2VpZ2h0KCB0aW1lICk7XG5cblx0XHRpZiAoIHdlaWdodCA+IDAgKSB7XG5cblx0XHRcdGNvbnN0IGludGVycG9sYW50cyA9IHRoaXMuX2ludGVycG9sYW50cztcblx0XHRcdGNvbnN0IHByb3BlcnR5TWl4ZXJzID0gdGhpcy5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdFx0c3dpdGNoICggdGhpcy5ibGVuZE1vZGUgKSB7XG5cblx0XHRcdFx0Y2FzZSBBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTpcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMCwgbSA9IGludGVycG9sYW50cy5sZW5ndGg7IGogIT09IG07ICsrIGogKSB7XG5cblx0XHRcdFx0XHRcdGludGVycG9sYW50c1sgaiBdLmV2YWx1YXRlKCBjbGlwVGltZSApO1xuXHRcdFx0XHRcdFx0cHJvcGVydHlNaXhlcnNbIGogXS5hY2N1bXVsYXRlQWRkaXRpdmUoIHdlaWdodCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGU6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBpbnRlcnBvbGFudHMubGVuZ3RoOyBqICE9PSBtOyArKyBqICkge1xuXG5cdFx0XHRcdFx0XHRpbnRlcnBvbGFudHNbIGogXS5ldmFsdWF0ZSggY2xpcFRpbWUgKTtcblx0XHRcdFx0XHRcdHByb3BlcnR5TWl4ZXJzWyBqIF0uYWNjdW11bGF0ZSggYWNjdUluZGV4LCB3ZWlnaHQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRfdXBkYXRlV2VpZ2h0KCB0aW1lICkge1xuXG5cdFx0bGV0IHdlaWdodCA9IDA7XG5cblx0XHRpZiAoIHRoaXMuZW5hYmxlZCApIHtcblxuXHRcdFx0d2VpZ2h0ID0gdGhpcy53ZWlnaHQ7XG5cdFx0XHRjb25zdCBpbnRlcnBvbGFudCA9IHRoaXMuX3dlaWdodEludGVycG9sYW50O1xuXG5cdFx0XHRpZiAoIGludGVycG9sYW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IGludGVycG9sYW50VmFsdWUgPSBpbnRlcnBvbGFudC5ldmFsdWF0ZSggdGltZSApWyAwIF07XG5cblx0XHRcdFx0d2VpZ2h0ICo9IGludGVycG9sYW50VmFsdWU7XG5cblx0XHRcdFx0aWYgKCB0aW1lID4gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zWyAxIF0gKSB7XG5cblx0XHRcdFx0XHR0aGlzLnN0b3BGYWRpbmcoKTtcblxuXHRcdFx0XHRcdGlmICggaW50ZXJwb2xhbnRWYWx1ZSA9PT0gMCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gZmFkZWQgb3V0LCBkaXNhYmxlXG5cdFx0XHRcdFx0XHR0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IHdlaWdodDtcblx0XHRyZXR1cm4gd2VpZ2h0O1xuXG5cdH1cblxuXHRfdXBkYXRlVGltZVNjYWxlKCB0aW1lICkge1xuXG5cdFx0bGV0IHRpbWVTY2FsZSA9IDA7XG5cblx0XHRpZiAoICEgdGhpcy5wYXVzZWQgKSB7XG5cblx0XHRcdHRpbWVTY2FsZSA9IHRoaXMudGltZVNjYWxlO1xuXG5cdFx0XHRjb25zdCBpbnRlcnBvbGFudCA9IHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O1xuXG5cdFx0XHRpZiAoIGludGVycG9sYW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IGludGVycG9sYW50VmFsdWUgPSBpbnRlcnBvbGFudC5ldmFsdWF0ZSggdGltZSApWyAwIF07XG5cblx0XHRcdFx0dGltZVNjYWxlICo9IGludGVycG9sYW50VmFsdWU7XG5cblx0XHRcdFx0aWYgKCB0aW1lID4gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zWyAxIF0gKSB7XG5cblx0XHRcdFx0XHR0aGlzLnN0b3BXYXJwaW5nKCk7XG5cblx0XHRcdFx0XHRpZiAoIHRpbWVTY2FsZSA9PT0gMCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gbW90aW9uIGhhcyBoYWx0ZWQsIHBhdXNlXG5cdFx0XHRcdFx0XHR0aGlzLnBhdXNlZCA9IHRydWU7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyB3YXJwIGRvbmUgLSBhcHBseSBmaW5hbCB0aW1lIHNjYWxlXG5cdFx0XHRcdFx0XHR0aGlzLnRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcblx0XHRyZXR1cm4gdGltZVNjYWxlO1xuXG5cdH1cblxuXHRfdXBkYXRlVGltZSggZGVsdGFUaW1lICkge1xuXG5cdFx0Y29uc3QgZHVyYXRpb24gPSB0aGlzLl9jbGlwLmR1cmF0aW9uO1xuXHRcdGNvbnN0IGxvb3AgPSB0aGlzLmxvb3A7XG5cblx0XHRsZXQgdGltZSA9IHRoaXMudGltZSArIGRlbHRhVGltZTtcblx0XHRsZXQgbG9vcENvdW50ID0gdGhpcy5fbG9vcENvdW50O1xuXG5cdFx0Y29uc3QgcGluZ1BvbmcgPSAoIGxvb3AgPT09IExvb3BQaW5nUG9uZyApO1xuXG5cdFx0aWYgKCBkZWx0YVRpbWUgPT09IDAgKSB7XG5cblx0XHRcdGlmICggbG9vcENvdW50ID09PSAtIDEgKSByZXR1cm4gdGltZTtcblxuXHRcdFx0cmV0dXJuICggcGluZ1BvbmcgJiYgKCBsb29wQ291bnQgJiAxICkgPT09IDEgKSA/IGR1cmF0aW9uIC0gdGltZSA6IHRpbWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIGxvb3AgPT09IExvb3BPbmNlICkge1xuXG5cdFx0XHRpZiAoIGxvb3BDb3VudCA9PT0gLSAxICkge1xuXG5cdFx0XHRcdC8vIGp1c3Qgc3RhcnRlZFxuXG5cdFx0XHRcdHRoaXMuX2xvb3BDb3VudCA9IDA7XG5cdFx0XHRcdHRoaXMuX3NldEVuZGluZ3MoIHRydWUsIHRydWUsIGZhbHNlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlX3N0b3A6IHtcblxuXHRcdFx0XHRpZiAoIHRpbWUgPj0gZHVyYXRpb24gKSB7XG5cblx0XHRcdFx0XHR0aW1lID0gZHVyYXRpb247XG5cblx0XHRcdFx0fSBlbHNlIGlmICggdGltZSA8IDAgKSB7XG5cblx0XHRcdFx0XHR0aW1lID0gMDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHRcdGJyZWFrIGhhbmRsZV9zdG9wO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHRoaXMuY2xhbXBXaGVuRmluaXNoZWQgKSB0aGlzLnBhdXNlZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgdGhpcy5lbmFibGVkID0gZmFsc2U7XG5cblx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHR0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KCB7XG5cdFx0XHRcdFx0dHlwZTogJ2ZpbmlzaGVkJywgYWN0aW9uOiB0aGlzLFxuXHRcdFx0XHRcdGRpcmVjdGlvbjogZGVsdGFUaW1lIDwgMCA/IC0gMSA6IDFcblx0XHRcdFx0fSApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgeyAvLyByZXBldGl0aXZlIFJlcGVhdCBvciBQaW5nUG9uZ1xuXG5cdFx0XHRpZiAoIGxvb3BDb3VudCA9PT0gLSAxICkge1xuXG5cdFx0XHRcdC8vIGp1c3Qgc3RhcnRlZFxuXG5cdFx0XHRcdGlmICggZGVsdGFUaW1lID49IDAgKSB7XG5cblx0XHRcdFx0XHRsb29wQ291bnQgPSAwO1xuXG5cdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyggdHJ1ZSwgdGhpcy5yZXBldGl0aW9ucyA9PT0gMCwgcGluZ1BvbmcgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gd2hlbiBsb29waW5nIGluIHJldmVyc2UgZGlyZWN0aW9uLCB0aGUgaW5pdGlhbFxuXHRcdFx0XHRcdC8vIHRyYW5zaXRpb24gdGhyb3VnaCB6ZXJvIGNvdW50cyBhcyBhIHJlcGV0aXRpb24sXG5cdFx0XHRcdFx0Ly8gc28gbGVhdmUgbG9vcENvdW50IGF0IC0xXG5cblx0XHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKCB0aGlzLnJlcGV0aXRpb25zID09PSAwLCB0cnVlLCBwaW5nUG9uZyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRpbWUgPj0gZHVyYXRpb24gfHwgdGltZSA8IDAgKSB7XG5cblx0XHRcdFx0Ly8gd3JhcCBhcm91bmRcblxuXHRcdFx0XHRjb25zdCBsb29wRGVsdGEgPSBNYXRoLmZsb29yKCB0aW1lIC8gZHVyYXRpb24gKTsgLy8gc2lnbmVkXG5cdFx0XHRcdHRpbWUgLT0gZHVyYXRpb24gKiBsb29wRGVsdGE7XG5cblx0XHRcdFx0bG9vcENvdW50ICs9IE1hdGguYWJzKCBsb29wRGVsdGEgKTtcblxuXHRcdFx0XHRjb25zdCBwZW5kaW5nID0gdGhpcy5yZXBldGl0aW9ucyAtIGxvb3BDb3VudDtcblxuXHRcdFx0XHRpZiAoIHBlbmRpbmcgPD0gMCApIHtcblxuXHRcdFx0XHRcdC8vIGhhdmUgdG8gc3RvcCAoc3dpdGNoIHN0YXRlLCBjbGFtcCB0aW1lLCBmaXJlIGV2ZW50KVxuXG5cdFx0XHRcdFx0aWYgKCB0aGlzLmNsYW1wV2hlbkZpbmlzaGVkICkgdGhpcy5wYXVzZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGVsc2UgdGhpcy5lbmFibGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHR0aW1lID0gZGVsdGFUaW1lID4gMCA/IGR1cmF0aW9uIDogMDtcblxuXHRcdFx0XHRcdHRoaXMudGltZSA9IHRpbWU7XG5cblx0XHRcdFx0XHR0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KCB7XG5cdFx0XHRcdFx0XHR0eXBlOiAnZmluaXNoZWQnLCBhY3Rpb246IHRoaXMsXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRlbHRhVGltZSA+IDAgPyAxIDogLSAxXG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBrZWVwIHJ1bm5pbmdcblxuXHRcdFx0XHRcdGlmICggcGVuZGluZyA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gZW50ZXJpbmcgdGhlIGxhc3Qgcm91bmRcblxuXHRcdFx0XHRcdFx0Y29uc3QgYXRTdGFydCA9IGRlbHRhVGltZSA8IDA7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKCBhdFN0YXJ0LCAhIGF0U3RhcnQsIHBpbmdQb25nICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKCBmYWxzZSwgZmFsc2UsIHBpbmdQb25nICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XG5cblx0XHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHRcdFx0dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCgge1xuXHRcdFx0XHRcdFx0dHlwZTogJ2xvb3AnLCBhY3Rpb246IHRoaXMsIGxvb3BEZWx0YTogbG9vcERlbHRhXG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggcGluZ1BvbmcgJiYgKCBsb29wQ291bnQgJiAxICkgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gaW52ZXJ0IHRpbWUgZm9yIHRoZSBcInBvbmcgcm91bmRcIlxuXG5cdFx0XHRcdHJldHVybiBkdXJhdGlvbiAtIHRpbWU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lO1xuXG5cdH1cblxuXHRfc2V0RW5kaW5ncyggYXRTdGFydCwgYXRFbmQsIHBpbmdQb25nICkge1xuXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO1xuXG5cdFx0aWYgKCBwaW5nUG9uZyApIHtcblxuXHRcdFx0c2V0dGluZ3MuZW5kaW5nU3RhcnQgPSBaZXJvU2xvcGVFbmRpbmc7XG5cdFx0XHRzZXR0aW5ncy5lbmRpbmdFbmQgPSBaZXJvU2xvcGVFbmRpbmc7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBhc3N1bWluZyBmb3IgTG9vcE9uY2UgYXRTdGFydCA9PSBhdEVuZCA9PSB0cnVlXG5cblx0XHRcdGlmICggYXRTdGFydCApIHtcblxuXHRcdFx0XHRzZXR0aW5ncy5lbmRpbmdTdGFydCA9IHRoaXMuemVyb1Nsb3BlQXRTdGFydCA/IFplcm9TbG9wZUVuZGluZyA6IFplcm9DdXJ2YXR1cmVFbmRpbmc7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c2V0dGluZ3MuZW5kaW5nU3RhcnQgPSBXcmFwQXJvdW5kRW5kaW5nO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggYXRFbmQgKSB7XG5cblx0XHRcdFx0c2V0dGluZ3MuZW5kaW5nRW5kID0gdGhpcy56ZXJvU2xvcGVBdEVuZCA/IFplcm9TbG9wZUVuZGluZyA6IFplcm9DdXJ2YXR1cmVFbmRpbmc7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c2V0dGluZ3MuZW5kaW5nRW5kIFx0ID0gV3JhcEFyb3VuZEVuZGluZztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRfc2NoZWR1bGVGYWRpbmcoIGR1cmF0aW9uLCB3ZWlnaHROb3csIHdlaWdodFRoZW4gKSB7XG5cblx0XHRjb25zdCBtaXhlciA9IHRoaXMuX21peGVyLCBub3cgPSBtaXhlci50aW1lO1xuXHRcdGxldCBpbnRlcnBvbGFudCA9IHRoaXMuX3dlaWdodEludGVycG9sYW50O1xuXG5cdFx0aWYgKCBpbnRlcnBvbGFudCA9PT0gbnVsbCApIHtcblxuXHRcdFx0aW50ZXJwb2xhbnQgPSBtaXhlci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpO1xuXHRcdFx0dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRpbWVzID0gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zLFxuXHRcdFx0dmFsdWVzID0gaW50ZXJwb2xhbnQuc2FtcGxlVmFsdWVzO1xuXG5cdFx0dGltZXNbIDAgXSA9IG5vdztcblx0XHR2YWx1ZXNbIDAgXSA9IHdlaWdodE5vdztcblx0XHR0aW1lc1sgMSBdID0gbm93ICsgZHVyYXRpb247XG5cdFx0dmFsdWVzWyAxIF0gPSB3ZWlnaHRUaGVuO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIEFuaW1hdGlvbk1peGVyIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3Rvciggcm9vdCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9yb290ID0gcm9vdDtcblx0XHR0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpO1xuXHRcdHRoaXMuX2FjY3VJbmRleCA9IDA7XG5cdFx0dGhpcy50aW1lID0gMDtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IDEuMDtcblxuXHR9XG5cblx0X2JpbmRBY3Rpb24oIGFjdGlvbiwgcHJvdG90eXBlQWN0aW9uICkge1xuXG5cdFx0Y29uc3Qgcm9vdCA9IGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QsXG5cdFx0XHR0cmFja3MgPSBhY3Rpb24uX2NsaXAudHJhY2tzLFxuXHRcdFx0blRyYWNrcyA9IHRyYWNrcy5sZW5ndGgsXG5cdFx0XHRiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncyxcblx0XHRcdGludGVycG9sYW50cyA9IGFjdGlvbi5faW50ZXJwb2xhbnRzLFxuXHRcdFx0cm9vdFV1aWQgPSByb290LnV1aWQsXG5cdFx0XHRiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZTtcblxuXHRcdGxldCBiaW5kaW5nc0J5TmFtZSA9IGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0aWYgKCBiaW5kaW5nc0J5TmFtZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRiaW5kaW5nc0J5TmFtZSA9IHt9O1xuXHRcdFx0YmluZGluZ3NCeVJvb3RbIHJvb3RVdWlkIF0gPSBiaW5kaW5nc0J5TmFtZTtcblxuXHRcdH1cblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gblRyYWNrczsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgdHJhY2sgPSB0cmFja3NbIGkgXSxcblx0XHRcdFx0dHJhY2tOYW1lID0gdHJhY2submFtZTtcblxuXHRcdFx0bGV0IGJpbmRpbmcgPSBiaW5kaW5nc0J5TmFtZVsgdHJhY2tOYW1lIF07XG5cblx0XHRcdGlmICggYmluZGluZyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdCsrIGJpbmRpbmcucmVmZXJlbmNlQ291bnQ7XG5cdFx0XHRcdGJpbmRpbmdzWyBpIF0gPSBiaW5kaW5nO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGJpbmRpbmcgPSBiaW5kaW5nc1sgaSBdO1xuXG5cdFx0XHRcdGlmICggYmluZGluZyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gZXhpc3RpbmcgYmluZGluZywgbWFrZSBzdXJlIHRoZSBjYWNoZSBrbm93c1xuXG5cdFx0XHRcdFx0aWYgKCBiaW5kaW5nLl9jYWNoZUluZGV4ID09PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHQrKyBiaW5kaW5nLnJlZmVyZW5jZUNvdW50O1xuXHRcdFx0XHRcdFx0dGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKCBiaW5kaW5nLCByb290VXVpZCwgdHJhY2tOYW1lICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IHByb3RvdHlwZUFjdGlvbiAmJiBwcm90b3R5cGVBY3Rpb24uXG5cdFx0XHRcdFx0X3Byb3BlcnR5QmluZGluZ3NbIGkgXS5iaW5kaW5nLnBhcnNlZFBhdGg7XG5cblx0XHRcdFx0YmluZGluZyA9IG5ldyBQcm9wZXJ0eU1peGVyKFxuXHRcdFx0XHRcdFByb3BlcnR5QmluZGluZy5jcmVhdGUoIHJvb3QsIHRyYWNrTmFtZSwgcGF0aCApLFxuXHRcdFx0XHRcdHRyYWNrLlZhbHVlVHlwZU5hbWUsIHRyYWNrLmdldFZhbHVlU2l6ZSgpICk7XG5cblx0XHRcdFx0KysgYmluZGluZy5yZWZlcmVuY2VDb3VudDtcblx0XHRcdFx0dGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKCBiaW5kaW5nLCByb290VXVpZCwgdHJhY2tOYW1lICk7XG5cblx0XHRcdFx0YmluZGluZ3NbIGkgXSA9IGJpbmRpbmc7XG5cblx0XHRcdH1cblxuXHRcdFx0aW50ZXJwb2xhbnRzWyBpIF0ucmVzdWx0QnVmZmVyID0gYmluZGluZy5idWZmZXI7XG5cblx0XHR9XG5cblx0fVxuXG5cdF9hY3RpdmF0ZUFjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0aWYgKCAhIHRoaXMuX2lzQWN0aXZlQWN0aW9uKCBhY3Rpb24gKSApIHtcblxuXHRcdFx0aWYgKCBhY3Rpb24uX2NhY2hlSW5kZXggPT09IG51bGwgKSB7XG5cblx0XHRcdFx0Ly8gdGhpcyBhY3Rpb24gaGFzIGJlZW4gZm9yZ290dGVuIGJ5IHRoZSBjYWNoZSwgYnV0IHRoZSB1c2VyXG5cdFx0XHRcdC8vIGFwcGVhcnMgdG8gYmUgc3RpbGwgdXNpbmcgaXQgLT4gcmViaW5kXG5cblx0XHRcdFx0Y29uc3Qgcm9vdFV1aWQgPSAoIGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QgKS51dWlkLFxuXHRcdFx0XHRcdGNsaXBVdWlkID0gYWN0aW9uLl9jbGlwLnV1aWQsXG5cdFx0XHRcdFx0YWN0aW9uc0ZvckNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXG5cdFx0XHRcdHRoaXMuX2JpbmRBY3Rpb24oIGFjdGlvbixcblx0XHRcdFx0XHRhY3Rpb25zRm9yQ2xpcCAmJiBhY3Rpb25zRm9yQ2xpcC5rbm93bkFjdGlvbnNbIDAgXSApO1xuXG5cdFx0XHRcdHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKCBhY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzO1xuXG5cdFx0XHQvLyBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cyAvIHNvcnQgb3V0IHN0YXRlXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdzWyBpIF07XG5cblx0XHRcdFx0aWYgKCBiaW5kaW5nLnVzZUNvdW50ICsrID09PSAwICkge1xuXG5cdFx0XHRcdFx0dGhpcy5fbGVuZEJpbmRpbmcoIGJpbmRpbmcgKTtcblx0XHRcdFx0XHRiaW5kaW5nLnNhdmVPcmlnaW5hbFN0YXRlKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2xlbmRBY3Rpb24oIGFjdGlvbiApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfZGVhY3RpdmF0ZUFjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0aWYgKCB0aGlzLl9pc0FjdGl2ZUFjdGlvbiggYWN0aW9uICkgKSB7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzO1xuXG5cdFx0XHQvLyBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cyAvIHNvcnQgb3V0IHN0YXRlXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdzWyBpIF07XG5cblx0XHRcdFx0aWYgKCAtLSBiaW5kaW5nLnVzZUNvdW50ID09PSAwICkge1xuXG5cdFx0XHRcdFx0YmluZGluZy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpO1xuXHRcdFx0XHRcdHRoaXMuX3Rha2VCYWNrQmluZGluZyggYmluZGluZyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl90YWtlQmFja0FjdGlvbiggYWN0aW9uICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vIE1lbW9yeSBtYW5hZ2VyXG5cblx0X2luaXRNZW1vcnlNYW5hZ2VyKCkge1xuXG5cdFx0dGhpcy5fYWN0aW9ucyA9IFtdOyAvLyAnbkFjdGl2ZUFjdGlvbnMnIGZvbGxvd2VkIGJ5IGluYWN0aXZlIG9uZXNcblx0XHR0aGlzLl9uQWN0aXZlQWN0aW9ucyA9IDA7XG5cblx0XHR0aGlzLl9hY3Rpb25zQnlDbGlwID0ge307XG5cdFx0Ly8gaW5zaWRlOlxuXHRcdC8vIHtcblx0XHQvLyBcdGtub3duQWN0aW9uczogQXJyYXk8IEFuaW1hdGlvbkFjdGlvbiA+IC0gdXNlZCBhcyBwcm90b3R5cGVzXG5cdFx0Ly8gXHRhY3Rpb25CeVJvb3Q6IEFuaW1hdGlvbkFjdGlvbiAtIGxvb2t1cFxuXHRcdC8vIH1cblxuXG5cdFx0dGhpcy5fYmluZGluZ3MgPSBbXTsgLy8gJ25BY3RpdmVCaW5kaW5ncycgZm9sbG93ZWQgYnkgaW5hY3RpdmUgb25lc1xuXHRcdHRoaXMuX25BY3RpdmVCaW5kaW5ncyA9IDA7XG5cblx0XHR0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUgPSB7fTsgLy8gaW5zaWRlOiBNYXA8IG5hbWUsIFByb3BlcnR5TWl4ZXIgPlxuXG5cblx0XHR0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzID0gW107IC8vIHNhbWUgZ2FtZSBhcyBhYm92ZVxuXHRcdHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzID0gMDtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdHRoaXMuc3RhdHMgPSB7XG5cblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Z2V0IHRvdGFsKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9hY3Rpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVBY3Rpb25zO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRiaW5kaW5nczoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX2JpbmRpbmdzLmxlbmd0aDtcblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVCaW5kaW5ncztcblxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29udHJvbEludGVycG9sYW50czoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RoO1xuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblxuXHRcdFx0XHRcdHJldHVybiBzY29wZS5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHR9XG5cblx0Ly8gTWVtb3J5IG1hbmFnZW1lbnQgZm9yIEFuaW1hdGlvbkFjdGlvbiBvYmplY3RzXG5cblx0X2lzQWN0aXZlQWN0aW9uKCBhY3Rpb24gKSB7XG5cblx0XHRjb25zdCBpbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleDtcblx0XHRyZXR1cm4gaW5kZXggIT09IG51bGwgJiYgaW5kZXggPCB0aGlzLl9uQWN0aXZlQWN0aW9ucztcblxuXHR9XG5cblx0X2FkZEluYWN0aXZlQWN0aW9uKCBhY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCApIHtcblxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXA7XG5cblx0XHRsZXQgYWN0aW9uc0ZvckNsaXAgPSBhY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXG5cdFx0aWYgKCBhY3Rpb25zRm9yQ2xpcCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRhY3Rpb25zRm9yQ2xpcCA9IHtcblxuXHRcdFx0XHRrbm93bkFjdGlvbnM6IFsgYWN0aW9uIF0sXG5cdFx0XHRcdGFjdGlvbkJ5Um9vdDoge31cblxuXHRcdFx0fTtcblxuXHRcdFx0YWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4ID0gMDtcblxuXHRcdFx0YWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXSA9IGFjdGlvbnNGb3JDbGlwO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3Qga25vd25BY3Rpb25zID0gYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zO1xuXG5cdFx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBrbm93bkFjdGlvbnMubGVuZ3RoO1xuXHRcdFx0a25vd25BY3Rpb25zLnB1c2goIGFjdGlvbiApO1xuXG5cdFx0fVxuXG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gYWN0aW9ucy5sZW5ndGg7XG5cdFx0YWN0aW9ucy5wdXNoKCBhY3Rpb24gKTtcblxuXHRcdGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFsgcm9vdFV1aWQgXSA9IGFjdGlvbjtcblxuXHR9XG5cblx0X3JlbW92ZUluYWN0aXZlQWN0aW9uKCBhY3Rpb24gKSB7XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdGxhc3RJbmFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbIGFjdGlvbnMubGVuZ3RoIC0gMSBdLFxuXHRcdFx0Y2FjaGVJbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleDtcblxuXHRcdGxhc3RJbmFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IGNhY2hlSW5kZXg7XG5cdFx0YWN0aW9uc1sgY2FjaGVJbmRleCBdID0gbGFzdEluYWN0aXZlQWN0aW9uO1xuXHRcdGFjdGlvbnMucG9wKCk7XG5cblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBudWxsO1xuXG5cblx0XHRjb25zdCBjbGlwVXVpZCA9IGFjdGlvbi5fY2xpcC51dWlkLFxuXHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXAsXG5cdFx0XHRhY3Rpb25zRm9yQ2xpcCA9IGFjdGlvbnNCeUNsaXBbIGNsaXBVdWlkIF0sXG5cdFx0XHRrbm93bkFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zLFxuXG5cdFx0XHRsYXN0S25vd25BY3Rpb24gPVxuXHRcdFx0XHRrbm93bkFjdGlvbnNGb3JDbGlwWyBrbm93bkFjdGlvbnNGb3JDbGlwLmxlbmd0aCAtIDEgXSxcblxuXHRcdFx0YnlDbGlwQ2FjaGVJbmRleCA9IGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleDtcblxuXHRcdGxhc3RLbm93bkFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IGJ5Q2xpcENhY2hlSW5kZXg7XG5cdFx0a25vd25BY3Rpb25zRm9yQ2xpcFsgYnlDbGlwQ2FjaGVJbmRleCBdID0gbGFzdEtub3duQWN0aW9uO1xuXHRcdGtub3duQWN0aW9uc0ZvckNsaXAucG9wKCk7XG5cblx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBudWxsO1xuXG5cblx0XHRjb25zdCBhY3Rpb25CeVJvb3QgPSBhY3Rpb25zRm9yQ2xpcC5hY3Rpb25CeVJvb3QsXG5cdFx0XHRyb290VXVpZCA9ICggYWN0aW9uLl9sb2NhbFJvb3QgfHwgdGhpcy5fcm9vdCApLnV1aWQ7XG5cblx0XHRkZWxldGUgYWN0aW9uQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0aWYgKCBrbm93bkFjdGlvbnNGb3JDbGlwLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0ZGVsZXRlIGFjdGlvbnNCeUNsaXBbIGNsaXBVdWlkIF07XG5cblx0XHR9XG5cblx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKCBhY3Rpb24gKTtcblxuXHR9XG5cblx0X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oIGFjdGlvbiApIHtcblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gYWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBiaW5kaW5nID0gYmluZGluZ3NbIGkgXTtcblxuXHRcdFx0aWYgKCAtLSBiaW5kaW5nLnJlZmVyZW5jZUNvdW50ID09PSAwICkge1xuXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyggYmluZGluZyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdF9sZW5kQWN0aW9uKCBhY3Rpb24gKSB7XG5cblx0XHQvLyBbIGFjdGl2ZSBhY3Rpb25zIHwgIGluYWN0aXZlIGFjdGlvbnMgIF1cblx0XHQvLyBbICBhY3RpdmUgYWN0aW9ucyA+fCBpbmFjdGl2ZSBhY3Rpb25zIF1cblx0XHQvLyAgICAgICAgICAgICAgICAgcyAgICAgICAgYVxuXHRcdC8vICAgICAgICAgICAgICAgICAgPC1zd2FwLT5cblx0XHQvLyAgICAgICAgICAgICAgICAgYSAgICAgICAgc1xuXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRwcmV2SW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXgsXG5cblx0XHRcdGxhc3RBY3RpdmVJbmRleCA9IHRoaXMuX25BY3RpdmVBY3Rpb25zICsrLFxuXG5cdFx0XHRmaXJzdEluYWN0aXZlQWN0aW9uID0gYWN0aW9uc1sgbGFzdEFjdGl2ZUluZGV4IF07XG5cblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBsYXN0QWN0aXZlSW5kZXg7XG5cdFx0YWN0aW9uc1sgbGFzdEFjdGl2ZUluZGV4IF0gPSBhY3Rpb247XG5cblx0XHRmaXJzdEluYWN0aXZlQWN0aW9uLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGFjdGlvbnNbIHByZXZJbmRleCBdID0gZmlyc3RJbmFjdGl2ZUFjdGlvbjtcblxuXHR9XG5cblx0X3Rha2VCYWNrQWN0aW9uKCBhY3Rpb24gKSB7XG5cblx0XHQvLyBbICBhY3RpdmUgYWN0aW9ucyAgfCBpbmFjdGl2ZSBhY3Rpb25zIF1cblx0XHQvLyBbIGFjdGl2ZSBhY3Rpb25zIHw8IGluYWN0aXZlIGFjdGlvbnMgIF1cblx0XHQvLyAgICAgICAgYSAgICAgICAgc1xuXHRcdC8vICAgICAgICAgPC1zd2FwLT5cblx0XHQvLyAgICAgICAgcyAgICAgICAgYVxuXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRwcmV2SW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXgsXG5cblx0XHRcdGZpcnN0SW5hY3RpdmVJbmRleCA9IC0tIHRoaXMuX25BY3RpdmVBY3Rpb25zLFxuXG5cdFx0XHRsYXN0QWN0aXZlQWN0aW9uID0gYWN0aW9uc1sgZmlyc3RJbmFjdGl2ZUluZGV4IF07XG5cblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0YWN0aW9uc1sgZmlyc3RJbmFjdGl2ZUluZGV4IF0gPSBhY3Rpb247XG5cblx0XHRsYXN0QWN0aXZlQWN0aW9uLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGFjdGlvbnNbIHByZXZJbmRleCBdID0gbGFzdEFjdGl2ZUFjdGlvbjtcblxuXHR9XG5cblx0Ly8gTWVtb3J5IG1hbmFnZW1lbnQgZm9yIFByb3BlcnR5TWl4ZXIgb2JqZWN0c1xuXG5cdF9hZGRJbmFjdGl2ZUJpbmRpbmcoIGJpbmRpbmcsIHJvb3RVdWlkLCB0cmFja05hbWUgKSB7XG5cblx0XHRjb25zdCBiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxcblx0XHRcdGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRsZXQgYmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0aWYgKCBiaW5kaW5nQnlOYW1lID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGJpbmRpbmdCeU5hbWUgPSB7fTtcblx0XHRcdGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdID0gYmluZGluZ0J5TmFtZTtcblxuXHRcdH1cblxuXHRcdGJpbmRpbmdCeU5hbWVbIHRyYWNrTmFtZSBdID0gYmluZGluZztcblxuXHRcdGJpbmRpbmcuX2NhY2hlSW5kZXggPSBiaW5kaW5ncy5sZW5ndGg7XG5cdFx0YmluZGluZ3MucHVzaCggYmluZGluZyApO1xuXG5cdH1cblxuXHRfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKCBiaW5kaW5nICkge1xuXG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdHByb3BCaW5kaW5nID0gYmluZGluZy5iaW5kaW5nLFxuXHRcdFx0cm9vdFV1aWQgPSBwcm9wQmluZGluZy5yb290Tm9kZS51dWlkLFxuXHRcdFx0dHJhY2tOYW1lID0gcHJvcEJpbmRpbmcucGF0aCxcblx0XHRcdGJpbmRpbmdzQnlSb290ID0gdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLFxuXHRcdFx0YmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdLFxuXG5cdFx0XHRsYXN0SW5hY3RpdmVCaW5kaW5nID0gYmluZGluZ3NbIGJpbmRpbmdzLmxlbmd0aCAtIDEgXSxcblx0XHRcdGNhY2hlSW5kZXggPSBiaW5kaW5nLl9jYWNoZUluZGV4O1xuXG5cdFx0bGFzdEluYWN0aXZlQmluZGluZy5fY2FjaGVJbmRleCA9IGNhY2hlSW5kZXg7XG5cdFx0YmluZGluZ3NbIGNhY2hlSW5kZXggXSA9IGxhc3RJbmFjdGl2ZUJpbmRpbmc7XG5cdFx0YmluZGluZ3MucG9wKCk7XG5cblx0XHRkZWxldGUgYmluZGluZ0J5TmFtZVsgdHJhY2tOYW1lIF07XG5cblx0XHRpZiAoIE9iamVjdC5rZXlzKCBiaW5kaW5nQnlOYW1lICkubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRkZWxldGUgYmluZGluZ3NCeVJvb3RbIHJvb3RVdWlkIF07XG5cblx0XHR9XG5cblx0fVxuXG5cdF9sZW5kQmluZGluZyggYmluZGluZyApIHtcblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRwcmV2SW5kZXggPSBiaW5kaW5nLl9jYWNoZUluZGV4LFxuXG5cdFx0XHRsYXN0QWN0aXZlSW5kZXggPSB0aGlzLl9uQWN0aXZlQmluZGluZ3MgKyssXG5cblx0XHRcdGZpcnN0SW5hY3RpdmVCaW5kaW5nID0gYmluZGluZ3NbIGxhc3RBY3RpdmVJbmRleCBdO1xuXG5cdFx0YmluZGluZy5fY2FjaGVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcblx0XHRiaW5kaW5nc1sgbGFzdEFjdGl2ZUluZGV4IF0gPSBiaW5kaW5nO1xuXG5cdFx0Zmlyc3RJbmFjdGl2ZUJpbmRpbmcuX2NhY2hlSW5kZXggPSBwcmV2SW5kZXg7XG5cdFx0YmluZGluZ3NbIHByZXZJbmRleCBdID0gZmlyc3RJbmFjdGl2ZUJpbmRpbmc7XG5cblx0fVxuXG5cdF90YWtlQmFja0JpbmRpbmcoIGJpbmRpbmcgKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0cHJldkluZGV4ID0gYmluZGluZy5fY2FjaGVJbmRleCxcblxuXHRcdFx0Zmlyc3RJbmFjdGl2ZUluZGV4ID0gLS0gdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLFxuXG5cdFx0XHRsYXN0QWN0aXZlQmluZGluZyA9IGJpbmRpbmdzWyBmaXJzdEluYWN0aXZlSW5kZXggXTtcblxuXHRcdGJpbmRpbmcuX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0YmluZGluZ3NbIGZpcnN0SW5hY3RpdmVJbmRleCBdID0gYmluZGluZztcblxuXHRcdGxhc3RBY3RpdmVCaW5kaW5nLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGJpbmRpbmdzWyBwcmV2SW5kZXggXSA9IGxhc3RBY3RpdmVCaW5kaW5nO1xuXG5cdH1cblxuXG5cdC8vIE1lbW9yeSBtYW5hZ2VtZW50IG9mIEludGVycG9sYW50cyBmb3Igd2VpZ2h0IGFuZCB0aW1lIHNjYWxlXG5cblx0X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSB7XG5cblx0XHRjb25zdCBpbnRlcnBvbGFudHMgPSB0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLFxuXHRcdFx0bGFzdEFjdGl2ZUluZGV4ID0gdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMgKys7XG5cblx0XHRsZXQgaW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudHNbIGxhc3RBY3RpdmVJbmRleCBdO1xuXG5cdFx0aWYgKCBpbnRlcnBvbGFudCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpbnRlcnBvbGFudCA9IG5ldyBMaW5lYXJJbnRlcnBvbGFudChcblx0XHRcdFx0bmV3IEZsb2F0MzJBcnJheSggMiApLCBuZXcgRmxvYXQzMkFycmF5KCAyICksXG5cdFx0XHRcdDEsIHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIgKTtcblxuXHRcdFx0aW50ZXJwb2xhbnQuX19jYWNoZUluZGV4ID0gbGFzdEFjdGl2ZUluZGV4O1xuXHRcdFx0aW50ZXJwb2xhbnRzWyBsYXN0QWN0aXZlSW5kZXggXSA9IGludGVycG9sYW50O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGludGVycG9sYW50O1xuXG5cdH1cblxuXHRfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQoIGludGVycG9sYW50ICkge1xuXG5cdFx0Y29uc3QgaW50ZXJwb2xhbnRzID0gdGhpcy5fY29udHJvbEludGVycG9sYW50cyxcblx0XHRcdHByZXZJbmRleCA9IGludGVycG9sYW50Ll9fY2FjaGVJbmRleCxcblxuXHRcdFx0Zmlyc3RJbmFjdGl2ZUluZGV4ID0gLS0gdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsXG5cblx0XHRcdGxhc3RBY3RpdmVJbnRlcnBvbGFudCA9IGludGVycG9sYW50c1sgZmlyc3RJbmFjdGl2ZUluZGV4IF07XG5cblx0XHRpbnRlcnBvbGFudC5fX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0aW50ZXJwb2xhbnRzWyBmaXJzdEluYWN0aXZlSW5kZXggXSA9IGludGVycG9sYW50O1xuXG5cdFx0bGFzdEFjdGl2ZUludGVycG9sYW50Ll9fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRpbnRlcnBvbGFudHNbIHByZXZJbmRleCBdID0gbGFzdEFjdGl2ZUludGVycG9sYW50O1xuXG5cdH1cblxuXHQvLyByZXR1cm4gYW4gYWN0aW9uIGZvciBhIGNsaXAgb3B0aW9uYWxseSB1c2luZyBhIGN1c3RvbSByb290IHRhcmdldFxuXHQvLyBvYmplY3QgKHRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIGxvdCBvZiBkeW5hbWljIG1lbW9yeSBpbiBjYXNlIGFcblx0Ly8gcHJldmlvdXNseSB1bmtub3duIGNsaXAvcm9vdCBjb21iaW5hdGlvbiBpcyBzcGVjaWZpZWQpXG5cdGNsaXBBY3Rpb24oIGNsaXAsIG9wdGlvbmFsUm9vdCwgYmxlbmRNb2RlICkge1xuXG5cdFx0Y29uc3Qgcm9vdCA9IG9wdGlvbmFsUm9vdCB8fCB0aGlzLl9yb290LFxuXHRcdFx0cm9vdFV1aWQgPSByb290LnV1aWQ7XG5cblx0XHRsZXQgY2xpcE9iamVjdCA9IHR5cGVvZiBjbGlwID09PSAnc3RyaW5nJyA/IEFuaW1hdGlvbkNsaXAuZmluZEJ5TmFtZSggcm9vdCwgY2xpcCApIDogY2xpcDtcblxuXHRcdGNvbnN0IGNsaXBVdWlkID0gY2xpcE9iamVjdCAhPT0gbnVsbCA/IGNsaXBPYmplY3QudXVpZCA6IGNsaXA7XG5cblx0XHRjb25zdCBhY3Rpb25zRm9yQ2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXBbIGNsaXBVdWlkIF07XG5cdFx0bGV0IHByb3RvdHlwZUFjdGlvbiA9IG51bGw7XG5cblx0XHRpZiAoIGJsZW5kTW9kZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpZiAoIGNsaXBPYmplY3QgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0YmxlbmRNb2RlID0gY2xpcE9iamVjdC5ibGVuZE1vZGU7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0YmxlbmRNb2RlID0gTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGFjdGlvbnNGb3JDbGlwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IGV4aXN0aW5nQWN0aW9uID0gYWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0XHRpZiAoIGV4aXN0aW5nQWN0aW9uICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmdBY3Rpb24uYmxlbmRNb2RlID09PSBibGVuZE1vZGUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQWN0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHdlIGtub3cgdGhlIGNsaXAsIHNvIHdlIGRvbid0IGhhdmUgdG8gcGFyc2UgYWxsXG5cdFx0XHQvLyB0aGUgYmluZGluZ3MgYWdhaW4gYnV0IGNhbiBqdXN0IGNvcHlcblx0XHRcdHByb3RvdHlwZUFjdGlvbiA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9uc1sgMCBdO1xuXG5cdFx0XHQvLyBhbHNvLCB0YWtlIHRoZSBjbGlwIGZyb20gdGhlIHByb3RvdHlwZSBhY3Rpb25cblx0XHRcdGlmICggY2xpcE9iamVjdCA9PT0gbnVsbCApXG5cdFx0XHRcdGNsaXBPYmplY3QgPSBwcm90b3R5cGVBY3Rpb24uX2NsaXA7XG5cblx0XHR9XG5cblx0XHQvLyBjbGlwIG11c3QgYmUga25vd24gd2hlbiBzcGVjaWZpZWQgdmlhIHN0cmluZ1xuXHRcdGlmICggY2xpcE9iamVjdCA9PT0gbnVsbCApIHJldHVybiBudWxsO1xuXG5cdFx0Ly8gYWxsb2NhdGUgYWxsIHJlc291cmNlcyByZXF1aXJlZCB0byBydW4gaXRcblx0XHRjb25zdCBuZXdBY3Rpb24gPSBuZXcgQW5pbWF0aW9uQWN0aW9uKCB0aGlzLCBjbGlwT2JqZWN0LCBvcHRpb25hbFJvb3QsIGJsZW5kTW9kZSApO1xuXG5cdFx0dGhpcy5fYmluZEFjdGlvbiggbmV3QWN0aW9uLCBwcm90b3R5cGVBY3Rpb24gKTtcblxuXHRcdC8vIGFuZCBtYWtlIHRoZSBhY3Rpb24ga25vd24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VyXG5cdFx0dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oIG5ld0FjdGlvbiwgY2xpcFV1aWQsIHJvb3RVdWlkICk7XG5cblx0XHRyZXR1cm4gbmV3QWN0aW9uO1xuXG5cdH1cblxuXHQvLyBnZXQgYW4gZXhpc3RpbmcgYWN0aW9uXG5cdGV4aXN0aW5nQWN0aW9uKCBjbGlwLCBvcHRpb25hbFJvb3QgKSB7XG5cblx0XHRjb25zdCByb290ID0gb3B0aW9uYWxSb290IHx8IHRoaXMuX3Jvb3QsXG5cdFx0XHRyb290VXVpZCA9IHJvb3QudXVpZCxcblxuXHRcdFx0Y2xpcE9iamVjdCA9IHR5cGVvZiBjbGlwID09PSAnc3RyaW5nJyA/XG5cdFx0XHRcdEFuaW1hdGlvbkNsaXAuZmluZEJ5TmFtZSggcm9vdCwgY2xpcCApIDogY2xpcCxcblxuXHRcdFx0Y2xpcFV1aWQgPSBjbGlwT2JqZWN0ID8gY2xpcE9iamVjdC51dWlkIDogY2xpcCxcblxuXHRcdFx0YWN0aW9uc0ZvckNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXG5cdFx0aWYgKCBhY3Rpb25zRm9yQ2xpcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRyZXR1cm4gYWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290WyByb290VXVpZCBdIHx8IG51bGw7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblxuXHR9XG5cblx0Ly8gZGVhY3RpdmF0ZXMgYWxsIHByZXZpb3VzbHkgc2NoZWR1bGVkIGFjdGlvbnNcblx0c3RvcEFsbEFjdGlvbigpIHtcblxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0bkFjdGlvbnMgPSB0aGlzLl9uQWN0aXZlQWN0aW9ucztcblxuXHRcdGZvciAoIGxldCBpID0gbkFjdGlvbnMgLSAxOyBpID49IDA7IC0tIGkgKSB7XG5cblx0XHRcdGFjdGlvbnNbIGkgXS5zdG9wKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Ly8gYWR2YW5jZSB0aGUgdGltZSBhbmQgdXBkYXRlIGFwcGx5IHRoZSBhbmltYXRpb25cblx0dXBkYXRlKCBkZWx0YVRpbWUgKSB7XG5cblx0XHRkZWx0YVRpbWUgKj0gdGhpcy50aW1lU2NhbGU7XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdG5BY3Rpb25zID0gdGhpcy5fbkFjdGl2ZUFjdGlvbnMsXG5cblx0XHRcdHRpbWUgPSB0aGlzLnRpbWUgKz0gZGVsdGFUaW1lLFxuXHRcdFx0dGltZURpcmVjdGlvbiA9IE1hdGguc2lnbiggZGVsdGFUaW1lICksXG5cblx0XHRcdGFjY3VJbmRleCA9IHRoaXMuX2FjY3VJbmRleCBePSAxO1xuXG5cdFx0Ly8gcnVuIGFjdGl2ZSBhY3Rpb25zXG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG5BY3Rpb25zOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zWyBpIF07XG5cblx0XHRcdGFjdGlvbi5fdXBkYXRlKCB0aW1lLCBkZWx0YVRpbWUsIHRpbWVEaXJlY3Rpb24sIGFjY3VJbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIHNjZW5lIGdyYXBoXG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0bkJpbmRpbmdzID0gdGhpcy5fbkFjdGl2ZUJpbmRpbmdzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuQmluZGluZ3M7ICsrIGkgKSB7XG5cblx0XHRcdGJpbmRpbmdzWyBpIF0uYXBwbHkoIGFjY3VJbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIEFsbG93cyB5b3UgdG8gc2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gYW4gYW5pbWF0aW9uLlxuXHRzZXRUaW1lKCB0aW1lSW5TZWNvbmRzICkge1xuXG5cdFx0dGhpcy50aW1lID0gMDsgLy8gWmVybyBvdXQgdGltZSBhdHRyaWJ1dGUgZm9yIEFuaW1hdGlvbk1peGVyIG9iamVjdDtcblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLl9hY3Rpb25zLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5fYWN0aW9uc1sgaSBdLnRpbWUgPSAwOyAvLyBaZXJvIG91dCB0aW1lIGF0dHJpYnV0ZSBmb3IgYWxsIGFzc29jaWF0ZWQgQW5pbWF0aW9uQWN0aW9uIG9iamVjdHMuXG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy51cGRhdGUoIHRpbWVJblNlY29uZHMgKTsgLy8gVXBkYXRlIHVzZWQgdG8gc2V0IGV4YWN0IHRpbWUuIFJldHVybnMgXCJ0aGlzXCIgQW5pbWF0aW9uTWl4ZXIgb2JqZWN0LlxuXG5cdH1cblxuXHQvLyByZXR1cm4gdGhpcyBtaXhlcidzIHJvb3QgdGFyZ2V0IG9iamVjdFxuXHRnZXRSb290KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Jvb3Q7XG5cblx0fVxuXG5cdC8vIGZyZWUgYWxsIHJlc291cmNlcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY2xpcFxuXHR1bmNhY2hlQ2xpcCggY2xpcCApIHtcblxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0Y2xpcFV1aWQgPSBjbGlwLnV1aWQsXG5cdFx0XHRhY3Rpb25zQnlDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcCxcblx0XHRcdGFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXTtcblxuXHRcdGlmICggYWN0aW9uc0ZvckNsaXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gbm90ZToganVzdCBjYWxsaW5nIF9yZW1vdmVJbmFjdGl2ZUFjdGlvbiB3b3VsZCBtZXNzIHVwIHRoZVxuXHRcdFx0Ly8gaXRlcmF0aW9uIHN0YXRlIGFuZCBhbHNvIHJlcXVpcmUgdXBkYXRpbmcgdGhlIHN0YXRlIHdlIGNhblxuXHRcdFx0Ly8ganVzdCB0aHJvdyBhd2F5XG5cblx0XHRcdGNvbnN0IGFjdGlvbnNUb1JlbW92ZSA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYWN0aW9uc1RvUmVtb3ZlLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zVG9SZW1vdmVbIGkgXTtcblxuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKCBhY3Rpb24gKTtcblxuXHRcdFx0XHRjb25zdCBjYWNoZUluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXHRcdFx0XHRcdGxhc3RJbmFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbIGFjdGlvbnMubGVuZ3RoIC0gMSBdO1xuXG5cdFx0XHRcdGFjdGlvbi5fY2FjaGVJbmRleCA9IG51bGw7XG5cdFx0XHRcdGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IG51bGw7XG5cblx0XHRcdFx0bGFzdEluYWN0aXZlQWN0aW9uLl9jYWNoZUluZGV4ID0gY2FjaGVJbmRleDtcblx0XHRcdFx0YWN0aW9uc1sgY2FjaGVJbmRleCBdID0gbGFzdEluYWN0aXZlQWN0aW9uO1xuXHRcdFx0XHRhY3Rpb25zLnBvcCgpO1xuXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oIGFjdGlvbiApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBhY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBmcmVlIGFsbCByZXNvdXJjZXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHJvb3QgdGFyZ2V0IG9iamVjdFxuXHR1bmNhY2hlUm9vdCggcm9vdCApIHtcblxuXHRcdGNvbnN0IHJvb3RVdWlkID0gcm9vdC51dWlkLFxuXHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXA7XG5cblx0XHRmb3IgKCBjb25zdCBjbGlwVXVpZCBpbiBhY3Rpb25zQnlDbGlwICkge1xuXG5cdFx0XHRjb25zdCBhY3Rpb25CeVJvb3QgPSBhY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdLmFjdGlvbkJ5Um9vdCxcblx0XHRcdFx0YWN0aW9uID0gYWN0aW9uQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0XHRpZiAoIGFjdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oIGFjdGlvbiApO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbiggYWN0aW9uICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGJpbmRpbmdzQnlSb290ID0gdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLFxuXHRcdFx0YmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0aWYgKCBiaW5kaW5nQnlOYW1lICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGNvbnN0IHRyYWNrTmFtZSBpbiBiaW5kaW5nQnlOYW1lICkge1xuXG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nQnlOYW1lWyB0cmFja05hbWUgXTtcblx0XHRcdFx0YmluZGluZy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoIGJpbmRpbmcgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyByZW1vdmUgYSB0YXJnZXRlZCBjbGlwIGZyb20gdGhlIGNhY2hlXG5cdHVuY2FjaGVBY3Rpb24oIGNsaXAsIG9wdGlvbmFsUm9vdCApIHtcblxuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuZXhpc3RpbmdBY3Rpb24oIGNsaXAsIG9wdGlvbmFsUm9vdCApO1xuXG5cdFx0aWYgKCBhY3Rpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oIGFjdGlvbiApO1xuXHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oIGFjdGlvbiApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5BbmltYXRpb25NaXhlci5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KCAxICk7XG5cbmNsYXNzIFVuaWZvcm0ge1xuXG5cdGNvbnN0cnVjdG9yKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4nICk7XG5cdFx0XHR2YWx1ZSA9IGFyZ3VtZW50c1sgMSBdO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgVW5pZm9ybSggdGhpcy52YWx1ZS5jbG9uZSA9PT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWUuY2xvbmUoKSApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciBleHRlbmRzIEludGVybGVhdmVkQnVmZmVyIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIHN0cmlkZSwgbWVzaFBlckF0dHJpYnV0ZSA9IDEgKSB7XG5cblx0XHRzdXBlciggYXJyYXksIHN0cmlkZSApO1xuXG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gbWVzaFBlckF0dHJpYnV0ZTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLm1lc2hQZXJBdHRyaWJ1dGUgPSBzb3VyY2UubWVzaFBlckF0dHJpYnV0ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSggZGF0YSApIHtcblxuXHRcdGNvbnN0IGliID0gc3VwZXIuY2xvbmUoIGRhdGEgKTtcblxuXHRcdGliLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0XHRyZXR1cm4gaWI7XG5cblx0fVxuXG5cdHRvSlNPTiggZGF0YSApIHtcblxuXHRcdGNvbnN0IGpzb24gPSBzdXBlci50b0pTT04oIGRhdGEgKTtcblxuXHRcdGpzb24uaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cdFx0anNvbi5tZXNoUGVyQXR0cmlidXRlID0gdGhpcy5tZXNoUGVyQXR0cmlidXRlO1xuXG5cdFx0cmV0dXJuIGpzb247XG5cblx0fVxuXG59XG5cbkluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyID0gdHJ1ZTtcblxuY2xhc3MgR0xCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBidWZmZXIsIHR5cGUsIGl0ZW1TaXplLCBlbGVtZW50U2l6ZSwgY291bnQgKSB7XG5cblx0XHR0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdHRoaXMuaXRlbVNpemUgPSBpdGVtU2l6ZTtcblx0XHR0aGlzLmVsZW1lbnRTaXplID0gZWxlbWVudFNpemU7XG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xuXG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblxuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZlcnNpb24gKys7XG5cblx0fVxuXG5cdHNldEJ1ZmZlciggYnVmZmVyICkge1xuXG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0VHlwZSggdHlwZSwgZWxlbWVudFNpemUgKSB7XG5cblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdHRoaXMuZWxlbWVudFNpemUgPSBlbGVtZW50U2l6ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRJdGVtU2l6ZSggaXRlbVNpemUgKSB7XG5cblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Q291bnQoIGNvdW50ICkge1xuXG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkdMQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuY2xhc3MgUmF5Y2FzdGVyIHtcblxuXHRjb25zdHJ1Y3Rvciggb3JpZ2luLCBkaXJlY3Rpb24sIG5lYXIgPSAwLCBmYXIgPSBJbmZpbml0eSApIHtcblxuXHRcdHRoaXMucmF5ID0gbmV3IFJheSggb3JpZ2luLCBkaXJlY3Rpb24gKTtcblx0XHQvLyBkaXJlY3Rpb24gaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkIChmb3IgYWNjdXJhdGUgZGlzdGFuY2UgY2FsY3VsYXRpb25zKVxuXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblx0XHR0aGlzLmNhbWVyYSA9IG51bGw7XG5cdFx0dGhpcy5sYXllcnMgPSBuZXcgTGF5ZXJzKCk7XG5cblx0XHR0aGlzLnBhcmFtcyA9IHtcblx0XHRcdE1lc2g6IHt9LFxuXHRcdFx0TGluZTogeyB0aHJlc2hvbGQ6IDEgfSxcblx0XHRcdExPRDoge30sXG5cdFx0XHRQb2ludHM6IHsgdGhyZXNob2xkOiAxIH0sXG5cdFx0XHRTcHJpdGU6IHt9XG5cdFx0fTtcblxuXHR9XG5cblx0c2V0KCBvcmlnaW4sIGRpcmVjdGlvbiApIHtcblxuXHRcdC8vIGRpcmVjdGlvbiBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQgKGZvciBhY2N1cmF0ZSBkaXN0YW5jZSBjYWxjdWxhdGlvbnMpXG5cblx0XHR0aGlzLnJheS5zZXQoIG9yaWdpbiwgZGlyZWN0aW9uICk7XG5cblx0fVxuXG5cdHNldEZyb21DYW1lcmEoIGNvb3JkcywgY2FtZXJhICkge1xuXG5cdFx0aWYgKCBjYW1lcmEgJiYgY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEgKSB7XG5cblx0XHRcdHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGNhbWVyYS5tYXRyaXhXb3JsZCApO1xuXHRcdFx0dGhpcy5yYXkuZGlyZWN0aW9uLnNldCggY29vcmRzLngsIGNvb3Jkcy55LCAwLjUgKS51bnByb2plY3QoIGNhbWVyYSApLnN1YiggdGhpcy5yYXkub3JpZ2luICkubm9ybWFsaXplKCk7XG5cdFx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblxuXHRcdH0gZWxzZSBpZiAoIGNhbWVyYSAmJiBjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7XG5cblx0XHRcdHRoaXMucmF5Lm9yaWdpbi5zZXQoIGNvb3Jkcy54LCBjb29yZHMueSwgKCBjYW1lcmEubmVhciArIGNhbWVyYS5mYXIgKSAvICggY2FtZXJhLm5lYXIgLSBjYW1lcmEuZmFyICkgKS51bnByb2plY3QoIGNhbWVyYSApOyAvLyBzZXQgb3JpZ2luIGluIHBsYW5lIG9mIGNhbWVyYVxuXHRcdFx0dGhpcy5yYXkuZGlyZWN0aW9uLnNldCggMCwgMCwgLSAxICkudHJhbnNmb3JtRGlyZWN0aW9uKCBjYW1lcmEubWF0cml4V29ybGQgKTtcblx0XHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGU6ICcgKyBjYW1lcmEudHlwZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRpbnRlcnNlY3RPYmplY3QoIG9iamVjdCwgcmVjdXJzaXZlID0gdHJ1ZSwgaW50ZXJzZWN0cyA9IFtdICkge1xuXG5cdFx0aW50ZXJzZWN0T2JqZWN0KCBvYmplY3QsIHRoaXMsIGludGVyc2VjdHMsIHJlY3Vyc2l2ZSApO1xuXG5cdFx0aW50ZXJzZWN0cy5zb3J0KCBhc2NTb3J0ICk7XG5cblx0XHRyZXR1cm4gaW50ZXJzZWN0cztcblxuXHR9XG5cblx0aW50ZXJzZWN0T2JqZWN0cyggb2JqZWN0cywgcmVjdXJzaXZlID0gdHJ1ZSwgaW50ZXJzZWN0cyA9IFtdICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gb2JqZWN0cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRpbnRlcnNlY3RPYmplY3QoIG9iamVjdHNbIGkgXSwgdGhpcywgaW50ZXJzZWN0cywgcmVjdXJzaXZlICk7XG5cblx0XHR9XG5cblx0XHRpbnRlcnNlY3RzLnNvcnQoIGFzY1NvcnQgKTtcblxuXHRcdHJldHVybiBpbnRlcnNlY3RzO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBhc2NTb3J0KCBhLCBiICkge1xuXG5cdHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcblxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RPYmplY3QoIG9iamVjdCwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCByZWN1cnNpdmUgKSB7XG5cblx0aWYgKCBvYmplY3QubGF5ZXJzLnRlc3QoIHJheWNhc3Rlci5sYXllcnMgKSApIHtcblxuXHRcdG9iamVjdC5yYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKTtcblxuXHR9XG5cblx0aWYgKCByZWN1cnNpdmUgPT09IHRydWUgKSB7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGludGVyc2VjdE9iamVjdCggY2hpbGRyZW5bIGkgXSwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCB0cnVlICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbi8qKlxuICogUmVmOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGhlcmljYWxfY29vcmRpbmF0ZV9zeXN0ZW1cbiAqXG4gKiBUaGUgcG9sYXIgYW5nbGUgKHBoaSkgaXMgbWVhc3VyZWQgZnJvbSB0aGUgcG9zaXRpdmUgeS1heGlzLiBUaGUgcG9zaXRpdmUgeS1heGlzIGlzIHVwLlxuICogVGhlIGF6aW11dGhhbCBhbmdsZSAodGhldGEpIGlzIG1lYXN1cmVkIGZyb20gdGhlIHBvc2l0aXZlIHotYXhpcy5cbiAqL1xuXG5jbGFzcyBTcGhlcmljYWwge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBwaGkgPSAwLCB0aGV0YSA9IDAgKSB7XG5cblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTsgLy8gcG9sYXIgYW5nbGVcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7IC8vIGF6aW11dGhhbCBhbmdsZVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldCggcmFkaXVzLCBwaGksIHRoZXRhICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7XG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIG90aGVyICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSBvdGhlci5yYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBvdGhlci5waGk7XG5cdFx0dGhpcy50aGV0YSA9IG90aGVyLnRoZXRhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWUgRVBTIGFuZCBQSS1FUFNcblx0bWFrZVNhZmUoKSB7XG5cblx0XHRjb25zdCBFUFMgPSAwLjAwMDAwMTtcblx0XHR0aGlzLnBoaSA9IE1hdGgubWF4KCBFUFMsIE1hdGgubWluKCBNYXRoLlBJIC0gRVBTLCB0aGlzLnBoaSApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVZlY3RvcjMoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKCB2LngsIHYueSwgdi56ICk7XG5cblx0fVxuXG5cdHNldEZyb21DYXJ0ZXNpYW5Db29yZHMoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCggeCAqIHggKyB5ICogeSArIHogKiB6ICk7XG5cblx0XHRpZiAoIHRoaXMucmFkaXVzID09PSAwICkge1xuXG5cdFx0XHR0aGlzLnRoZXRhID0gMDtcblx0XHRcdHRoaXMucGhpID0gMDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMudGhldGEgPSBNYXRoLmF0YW4yKCB4LCB6ICk7XG5cdFx0XHR0aGlzLnBoaSA9IE1hdGguYWNvcyggY2xhbXAoIHkgLyB0aGlzLnJhZGl1cywgLSAxLCAxICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuLyoqXG4gKiBSZWY6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N5bGluZHJpY2FsX2Nvb3JkaW5hdGVfc3lzdGVtXG4gKi9cblxuY2xhc3MgQ3lsaW5kcmljYWwge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCB0aGV0YSA9IDAsIHkgPSAwICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7IC8vIGRpc3RhbmNlIGZyb20gdGhlIG9yaWdpbiB0byBhIHBvaW50IGluIHRoZSB4LXogcGxhbmVcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7IC8vIGNvdW50ZXJjbG9ja3dpc2UgYW5nbGUgaW4gdGhlIHgteiBwbGFuZSBtZWFzdXJlZCBpbiByYWRpYW5zIGZyb20gdGhlIHBvc2l0aXZlIHotYXhpc1xuXHRcdHRoaXMueSA9IHk7IC8vIGhlaWdodCBhYm92ZSB0aGUgeC16IHBsYW5lXG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0KCByYWRpdXMsIHRoZXRhLCB5ICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhO1xuXHRcdHRoaXMueSA9IHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggb3RoZXIgKSB7XG5cblx0XHR0aGlzLnJhZGl1cyA9IG90aGVyLnJhZGl1cztcblx0XHR0aGlzLnRoZXRhID0gb3RoZXIudGhldGE7XG5cdFx0dGhpcy55ID0gb3RoZXIueTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tVmVjdG9yMyggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHMoIHYueCwgdi55LCB2LnogKTtcblxuXHR9XG5cblx0c2V0RnJvbUNhcnRlc2lhbkNvb3JkcyggeCwgeSwgeiApIHtcblxuXHRcdHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KCB4ICogeCArIHogKiB6ICk7XG5cdFx0dGhpcy50aGV0YSA9IE1hdGguYXRhbjIoIHgsIHogKTtcblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJDQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5cbmNsYXNzIEJveDIge1xuXG5cdGNvbnN0cnVjdG9yKCBtaW4gPSBuZXcgVmVjdG9yMiggKyBJbmZpbml0eSwgKyBJbmZpbml0eSApLCBtYXggPSBuZXcgVmVjdG9yMiggLSBJbmZpbml0eSwgLSBJbmZpbml0eSApICkge1xuXG5cdFx0dGhpcy5taW4gPSBtaW47XG5cdFx0dGhpcy5tYXggPSBtYXg7XG5cblx0fVxuXG5cdHNldCggbWluLCBtYXggKSB7XG5cblx0XHR0aGlzLm1pbi5jb3B5KCBtaW4gKTtcblx0XHR0aGlzLm1heC5jb3B5KCBtYXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKCBwb2ludHMgKSB7XG5cblx0XHR0aGlzLm1ha2VFbXB0eSgpO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5leHBhbmRCeVBvaW50KCBwb2ludHNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21DZW50ZXJBbmRTaXplKCBjZW50ZXIsIHNpemUgKSB7XG5cblx0XHRjb25zdCBoYWxmU2l6ZSA9IF92ZWN0b3IkNC5jb3B5KCBzaXplICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXHRcdHRoaXMubWluLmNvcHkoIGNlbnRlciApLnN1YiggaGFsZlNpemUgKTtcblx0XHR0aGlzLm1heC5jb3B5KCBjZW50ZXIgKS5hZGQoIGhhbGZTaXplICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcHkoIGJveCApIHtcblxuXHRcdHRoaXMubWluLmNvcHkoIGJveC5taW4gKTtcblx0XHR0aGlzLm1heC5jb3B5KCBib3gubWF4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZUVtcHR5KCkge1xuXG5cdFx0dGhpcy5taW4ueCA9IHRoaXMubWluLnkgPSArIEluZmluaXR5O1xuXHRcdHRoaXMubWF4LnggPSB0aGlzLm1heC55ID0gLSBJbmZpbml0eTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpc0VtcHR5KCkge1xuXG5cdFx0Ly8gdGhpcyBpcyBhIG1vcmUgcm9idXN0IGNoZWNrIGZvciBlbXB0eSB0aGFuICggdm9sdW1lIDw9IDAgKSBiZWNhdXNlIHZvbHVtZSBjYW4gZ2V0IHBvc2l0aXZlIHdpdGggdHdvIG5lZ2F0aXZlIGF4ZXNcblxuXHRcdHJldHVybiAoIHRoaXMubWF4LnggPCB0aGlzLm1pbi54ICkgfHwgKCB0aGlzLm1heC55IDwgdGhpcy5taW4ueSApO1xuXG5cdH1cblxuXHRnZXRDZW50ZXIoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAsIDAgKSA6IHRhcmdldC5hZGRWZWN0b3JzKCB0aGlzLm1pbiwgdGhpcy5tYXggKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cblx0fVxuXG5cdGdldFNpemUoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAsIDAgKSA6IHRhcmdldC5zdWJWZWN0b3JzKCB0aGlzLm1heCwgdGhpcy5taW4gKTtcblxuXHR9XG5cblx0ZXhwYW5kQnlQb2ludCggcG9pbnQgKSB7XG5cblx0XHR0aGlzLm1pbi5taW4oIHBvaW50ICk7XG5cdFx0dGhpcy5tYXgubWF4KCBwb2ludCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5VmVjdG9yKCB2ZWN0b3IgKSB7XG5cblx0XHR0aGlzLm1pbi5zdWIoIHZlY3RvciApO1xuXHRcdHRoaXMubWF4LmFkZCggdmVjdG9yICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXhwYW5kQnlTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMubWluLmFkZFNjYWxhciggLSBzY2FsYXIgKTtcblx0XHR0aGlzLm1heC5hZGRTY2FsYXIoIHNjYWxhciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbnRhaW5zUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0cmV0dXJuIHBvaW50LnggPCB0aGlzLm1pbi54IHx8IHBvaW50LnggPiB0aGlzLm1heC54IHx8XG5cdFx0XHRwb2ludC55IDwgdGhpcy5taW4ueSB8fCBwb2ludC55ID4gdGhpcy5tYXgueSA/IGZhbHNlIDogdHJ1ZTtcblxuXHR9XG5cblx0Y29udGFpbnNCb3goIGJveCApIHtcblxuXHRcdHJldHVybiB0aGlzLm1pbi54IDw9IGJveC5taW4ueCAmJiBib3gubWF4LnggPD0gdGhpcy5tYXgueCAmJlxuXHRcdFx0dGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4Lnk7XG5cblx0fVxuXG5cdGdldFBhcmFtZXRlciggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdC8vIFRoaXMgY2FuIHBvdGVudGlhbGx5IGhhdmUgYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgYm94XG5cdFx0Ly8gaGFzIGEgc2l6ZSBkaW1lbnNpb24gb2YgMC5cblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KFxuXHRcdFx0KCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1heC54IC0gdGhpcy5taW4ueCApLFxuXHRcdFx0KCBwb2ludC55IC0gdGhpcy5taW4ueSApIC8gKCB0aGlzLm1heC55IC0gdGhpcy5taW4ueSApXG5cdFx0KTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0Ly8gdXNpbmcgNCBzcGxpdHRpbmcgcGxhbmVzIHRvIHJ1bGUgb3V0IGludGVyc2VjdGlvbnNcblxuXHRcdHJldHVybiBib3gubWF4LnggPCB0aGlzLm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHxcblx0XHRcdGJveC5tYXgueSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSA/IGZhbHNlIDogdHJ1ZTtcblxuXHR9XG5cblx0Y2xhbXBQb2ludCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7XG5cblx0XHRjb25zdCBjbGFtcGVkUG9pbnQgPSBfdmVjdG9yJDQuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7XG5cdFx0cmV0dXJuIGNsYW1wZWRQb2ludC5zdWIoIHBvaW50ICkubGVuZ3RoKCk7XG5cblx0fVxuXG5cdGludGVyc2VjdCggYm94ICkge1xuXG5cdFx0dGhpcy5taW4ubWF4KCBib3gubWluICk7XG5cdFx0dGhpcy5tYXgubWluKCBib3gubWF4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dW5pb24oIGJveCApIHtcblxuXHRcdHRoaXMubWluLm1pbiggYm94Lm1pbiApO1xuXHRcdHRoaXMubWF4Lm1heCggYm94Lm1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZSggb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5taW4uYWRkKCBvZmZzZXQgKTtcblx0XHR0aGlzLm1heC5hZGQoIG9mZnNldCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggYm94ICkge1xuXG5cdFx0cmV0dXJuIGJveC5taW4uZXF1YWxzKCB0aGlzLm1pbiApICYmIGJveC5tYXguZXF1YWxzKCB0aGlzLm1heCApO1xuXG5cdH1cblxufVxuXG5Cb3gyLnByb3RvdHlwZS5pc0JveDIgPSB0cnVlO1xuXG5jb25zdCBfc3RhcnRQID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3N0YXJ0RW5kID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBMaW5lMyB7XG5cblx0Y29uc3RydWN0b3IoIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKSwgZW5kID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblxuXHR9XG5cblx0c2V0KCBzdGFydCwgZW5kICkge1xuXG5cdFx0dGhpcy5zdGFydC5jb3B5KCBzdGFydCApO1xuXHRcdHRoaXMuZW5kLmNvcHkoIGVuZCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIGxpbmUgKSB7XG5cblx0XHR0aGlzLnN0YXJ0LmNvcHkoIGxpbmUuc3RhcnQgKTtcblx0XHR0aGlzLmVuZC5jb3B5KCBsaW5lLmVuZCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldENlbnRlciggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5hZGRWZWN0b3JzKCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTtcblxuXHR9XG5cblx0ZGVsdGEoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuc3ViVmVjdG9ycyggdGhpcy5lbmQsIHRoaXMuc3RhcnQgKTtcblxuXHR9XG5cblx0ZGlzdGFuY2VTcSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmVuZCApO1xuXG5cdH1cblxuXHRkaXN0YW5jZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8oIHRoaXMuZW5kICk7XG5cblx0fVxuXG5cdGF0KCB0LCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kZWx0YSggdGFyZ2V0ICkubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMuc3RhcnQgKTtcblxuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlciggcG9pbnQsIGNsYW1wVG9MaW5lICkge1xuXG5cdFx0X3N0YXJ0UC5zdWJWZWN0b3JzKCBwb2ludCwgdGhpcy5zdGFydCApO1xuXHRcdF9zdGFydEVuZC5zdWJWZWN0b3JzKCB0aGlzLmVuZCwgdGhpcy5zdGFydCApO1xuXG5cdFx0Y29uc3Qgc3RhcnRFbmQyID0gX3N0YXJ0RW5kLmRvdCggX3N0YXJ0RW5kICk7XG5cdFx0Y29uc3Qgc3RhcnRFbmRfc3RhcnRQID0gX3N0YXJ0RW5kLmRvdCggX3N0YXJ0UCApO1xuXG5cdFx0bGV0IHQgPSBzdGFydEVuZF9zdGFydFAgLyBzdGFydEVuZDI7XG5cblx0XHRpZiAoIGNsYW1wVG9MaW5lICkge1xuXG5cdFx0XHR0ID0gY2xhbXAoIHQsIDAsIDEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0O1xuXG5cdH1cblxuXHRjbG9zZXN0UG9pbnRUb1BvaW50KCBwb2ludCwgY2xhbXBUb0xpbmUsIHRhcmdldCApIHtcblxuXHRcdGNvbnN0IHQgPSB0aGlzLmNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIoIHBvaW50LCBjbGFtcFRvTGluZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGVsdGEoIHRhcmdldCApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLnN0YXJ0ICk7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4ICkge1xuXG5cdFx0dGhpcy5zdGFydC5hcHBseU1hdHJpeDQoIG1hdHJpeCApO1xuXHRcdHRoaXMuZW5kLmFwcGx5TWF0cml4NCggbWF0cml4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCBsaW5lICkge1xuXG5cdFx0cmV0dXJuIGxpbmUuc3RhcnQuZXF1YWxzKCB0aGlzLnN0YXJ0ICkgJiYgbGluZS5lbmQuZXF1YWxzKCB0aGlzLmVuZCApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBTcG90TGlnaHRIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGxpZ2h0LCBjb2xvciApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gW1xuXHRcdFx0MCwgMCwgMCwgXHQwLCAwLCAxLFxuXHRcdFx0MCwgMCwgMCwgXHQxLCAwLCAxLFxuXHRcdFx0MCwgMCwgMCxcdC0gMSwgMCwgMSxcblx0XHRcdDAsIDAsIDAsIFx0MCwgMSwgMSxcblx0XHRcdDAsIDAsIDAsIFx0MCwgLSAxLCAxXG5cdFx0XTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaiA9IDEsIGwgPSAzMjsgaSA8IGw7IGkgKyssIGogKysgKSB7XG5cblx0XHRcdGNvbnN0IHAxID0gKCBpIC8gbCApICogTWF0aC5QSSAqIDI7XG5cdFx0XHRjb25zdCBwMiA9ICggaiAvIGwgKSAqIE1hdGguUEkgKiAyO1xuXG5cdFx0XHRwb3NpdGlvbnMucHVzaChcblx0XHRcdFx0TWF0aC5jb3MoIHAxICksIE1hdGguc2luKCBwMSApLCAxLFxuXHRcdFx0XHRNYXRoLmNvcyggcDIgKSwgTWF0aC5zaW4oIHAyICksIDFcblx0XHRcdCk7XG5cblx0XHR9XG5cblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbnMsIDMgKSApO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgZm9nOiBmYWxzZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXG5cdFx0dGhpcy5jb25lID0gbmV3IExpbmVTZWdtZW50cyggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cdFx0dGhpcy5hZGQoIHRoaXMuY29uZSApO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0dXBkYXRlKCkge1xuXG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0Y29uc3QgY29uZUxlbmd0aCA9IHRoaXMubGlnaHQuZGlzdGFuY2UgPyB0aGlzLmxpZ2h0LmRpc3RhbmNlIDogMTAwMDtcblx0XHRjb25zdCBjb25lV2lkdGggPSBjb25lTGVuZ3RoICogTWF0aC50YW4oIHRoaXMubGlnaHQuYW5nbGUgKTtcblxuXHRcdHRoaXMuY29uZS5zY2FsZS5zZXQoIGNvbmVXaWR0aCwgY29uZVdpZHRoLCBjb25lTGVuZ3RoICk7XG5cblx0XHRfdmVjdG9yJDMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0dGhpcy5jb25lLmxvb2tBdCggX3ZlY3RvciQzICk7XG5cblx0XHRpZiAoIHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2JvbmVNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfbWF0cml4V29ybGRJbnYgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5cblxuY2xhc3MgU2tlbGV0b25IZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXG5cdGNvbnN0cnVjdG9yKCBvYmplY3QgKSB7XG5cblx0XHRjb25zdCBib25lcyA9IGdldEJvbmVMaXN0KCBvYmplY3QgKTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbG9ycyA9IFtdO1xuXG5cdFx0Y29uc3QgY29sb3IxID0gbmV3IENvbG9yKCAwLCAwLCAxICk7XG5cdFx0Y29uc3QgY29sb3IyID0gbmV3IENvbG9yKCAwLCAxLCAwICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBib25lcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1sgaSBdO1xuXG5cdFx0XHRpZiAoIGJvbmUucGFyZW50ICYmIGJvbmUucGFyZW50LmlzQm9uZSApIHtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCAwLCAwLCAwICk7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIDAsIDAsIDAgKTtcblx0XHRcdFx0Y29sb3JzLnB1c2goIGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIgKTtcblx0XHRcdFx0Y29sb3JzLnB1c2goIGNvbG9yMi5yLCBjb2xvcjIuZywgY29sb3IyLmIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyB2ZXJ0ZXhDb2xvcnM6IHRydWUsIGRlcHRoVGVzdDogZmFsc2UsIGRlcHRoV3JpdGU6IGZhbHNlLCB0b25lTWFwcGVkOiBmYWxzZSwgdHJhbnNwYXJlbnQ6IHRydWUgfSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1NrZWxldG9uSGVscGVyJztcblx0XHR0aGlzLmlzU2tlbGV0b25IZWxwZXIgPSB0cnVlO1xuXG5cdFx0dGhpcy5yb290ID0gb2JqZWN0O1xuXHRcdHRoaXMuYm9uZXMgPSBib25lcztcblxuXHRcdHRoaXMubWF0cml4ID0gb2JqZWN0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKSB7XG5cblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKTtcblxuXHRcdF9tYXRyaXhXb3JsZEludi5jb3B5KCB0aGlzLnJvb3QubWF0cml4V29ybGQgKS5pbnZlcnQoKTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaiA9IDA7IGkgPCBib25lcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1sgaSBdO1xuXG5cdFx0XHRpZiAoIGJvbmUucGFyZW50ICYmIGJvbmUucGFyZW50LmlzQm9uZSApIHtcblxuXHRcdFx0XHRfYm9uZU1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBfbWF0cml4V29ybGRJbnYsIGJvbmUubWF0cml4V29ybGQgKTtcblx0XHRcdFx0X3ZlY3RvciQyLnNldEZyb21NYXRyaXhQb3NpdGlvbiggX2JvbmVNYXRyaXggKTtcblx0XHRcdFx0cG9zaXRpb24uc2V0WFlaKCBqLCBfdmVjdG9yJDIueCwgX3ZlY3RvciQyLnksIF92ZWN0b3IkMi56ICk7XG5cblx0XHRcdFx0X2JvbmVNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggX21hdHJpeFdvcmxkSW52LCBib25lLnBhcmVudC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHRfdmVjdG9yJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBfYm9uZU1hdHJpeCApO1xuXHRcdFx0XHRwb3NpdGlvbi5zZXRYWVooIGogKyAxLCBfdmVjdG9yJDIueCwgX3ZlY3RvciQyLnksIF92ZWN0b3IkMi56ICk7XG5cblx0XHRcdFx0aiArPSAyO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKTtcblxuXHR9XG5cbn1cblxuXG5mdW5jdGlvbiBnZXRCb25lTGlzdCggb2JqZWN0ICkge1xuXG5cdGNvbnN0IGJvbmVMaXN0ID0gW107XG5cblx0aWYgKCBvYmplY3QgJiYgb2JqZWN0LmlzQm9uZSApIHtcblxuXHRcdGJvbmVMaXN0LnB1c2goIG9iamVjdCApO1xuXG5cdH1cblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBvYmplY3QuY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0Ym9uZUxpc3QucHVzaC5hcHBseSggYm9uZUxpc3QsIGdldEJvbmVMaXN0KCBvYmplY3QuY2hpbGRyZW5bIGkgXSApICk7XG5cblx0fVxuXG5cdHJldHVybiBib25lTGlzdDtcblxufVxuXG5jbGFzcyBQb2ludExpZ2h0SGVscGVyIGV4dGVuZHMgTWVzaCB7XG5cblx0Y29uc3RydWN0b3IoIGxpZ2h0LCBzcGhlcmVTaXplLCBjb2xvciApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IFNwaGVyZUdlb21ldHJ5KCBzcGhlcmVTaXplLCA0LCAyICk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHsgd2lyZWZyYW1lOiB0cnVlLCBmb2c6IGZhbHNlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0dGhpcy5jb2xvciA9IGNvbG9yO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BvaW50TGlnaHRIZWxwZXInO1xuXG5cdFx0dGhpcy5tYXRyaXggPSB0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXG5cdFx0Lypcblx0Ly8gVE9ETzogZGVsZXRlIHRoaXMgY29tbWVudD9cblx0Y29uc3QgZGlzdGFuY2VHZW9tZXRyeSA9IG5ldyBUSFJFRS5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCAxLCAyICk7XG5cdGNvbnN0IGRpc3RhbmNlTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGhleENvbG9yLCBmb2c6IGZhbHNlLCB3aXJlZnJhbWU6IHRydWUsIG9wYWNpdHk6IDAuMSwgdHJhbnNwYXJlbnQ6IHRydWUgfSApO1xuXG5cdHRoaXMubGlnaHRTcGhlcmUgPSBuZXcgVEhSRUUuTWVzaCggYnVsYkdlb21ldHJ5LCBidWxiTWF0ZXJpYWwgKTtcblx0dGhpcy5saWdodERpc3RhbmNlID0gbmV3IFRIUkVFLk1lc2goIGRpc3RhbmNlR2VvbWV0cnksIGRpc3RhbmNlTWF0ZXJpYWwgKTtcblxuXHRjb25zdCBkID0gbGlnaHQuZGlzdGFuY2U7XG5cblx0aWYgKCBkID09PSAwLjAgKSB7XG5cblx0XHR0aGlzLmxpZ2h0RGlzdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuXG5cdH0gZWxzZSB7XG5cblx0XHR0aGlzLmxpZ2h0RGlzdGFuY2Uuc2NhbGUuc2V0KCBkLCBkLCBkICk7XG5cblx0fVxuXG5cdHRoaXMuYWRkKCB0aGlzLmxpZ2h0RGlzdGFuY2UgKTtcblx0Ki9cblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cblx0XHRpZiAoIHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMubWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5saWdodC5jb2xvciApO1xuXG5cdFx0fVxuXG5cdFx0Lypcblx0XHRjb25zdCBkID0gdGhpcy5saWdodC5kaXN0YW5jZTtcblxuXHRcdGlmICggZCA9PT0gMC4wICkge1xuXG5cdFx0XHR0aGlzLmxpZ2h0RGlzdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5saWdodERpc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuXHRcdFx0dGhpcy5saWdodERpc3RhbmNlLnNjYWxlLnNldCggZCwgZCwgZCApO1xuXG5cdFx0fVxuXHRcdCovXG5cblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9jb2xvcjEgPSAvKkBfX1BVUkVfXyovIG5ldyBDb2xvcigpO1xuY29uc3QgX2NvbG9yMiA9IC8qQF9fUFVSRV9fKi8gbmV3IENvbG9yKCk7XG5cbmNsYXNzIEhlbWlzcGhlcmVMaWdodEhlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggbGlnaHQsIHNpemUsIGNvbG9yICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0dGhpcy5tYXRyaXggPSBsaWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9jdGFoZWRyb25HZW9tZXRyeSggc2l6ZSApO1xuXHRcdGdlb21ldHJ5LnJvdGF0ZVkoIE1hdGguUEkgKiAwLjUgKTtcblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHsgd2lyZWZyYW1lOiB0cnVlLCBmb2c6IGZhbHNlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cdFx0aWYgKCB0aGlzLmNvbG9yID09PSB1bmRlZmluZWQgKSB0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycyA9IHRydWU7XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmdldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJyApO1xuXHRcdGNvbnN0IGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoIHBvc2l0aW9uLmNvdW50ICogMyApO1xuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnY29sb3InLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKSApO1xuXG5cdFx0dGhpcy5hZGQoIG5ldyBNZXNoKCBnZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCApICk7XG5cblx0XHR0aGlzLnVwZGF0ZSgpO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5jaGlsZHJlblsgMCBdLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLmNoaWxkcmVuWyAwIF0ubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cblx0XHRjb25zdCBtZXNoID0gdGhpcy5jaGlsZHJlblsgMCBdO1xuXG5cdFx0aWYgKCB0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KCB0aGlzLmNvbG9yICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBjb2xvcnMgPSBtZXNoLmdlb21ldHJ5LmdldEF0dHJpYnV0ZSggJ2NvbG9yJyApO1xuXG5cdFx0XHRfY29sb3IxLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTtcblx0XHRcdF9jb2xvcjIuY29weSggdGhpcy5saWdodC5ncm91bmRDb2xvciApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjb2xvcnMuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGNvbG9yID0gKCBpIDwgKCBsIC8gMiApICkgPyBfY29sb3IxIDogX2NvbG9yMjtcblxuXHRcdFx0XHRjb2xvcnMuc2V0WFlaKCBpLCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Y29sb3JzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdG1lc2gubG9va0F0KCBfdmVjdG9yJDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkICkubmVnYXRlKCkgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgR3JpZEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cblx0Y29uc3RydWN0b3IoIHNpemUgPSAxMCwgZGl2aXNpb25zID0gMTAsIGNvbG9yMSA9IDB4NDQ0NDQ0LCBjb2xvcjIgPSAweDg4ODg4OCApIHtcblxuXHRcdGNvbG9yMSA9IG5ldyBDb2xvciggY29sb3IxICk7XG5cdFx0Y29sb3IyID0gbmV3IENvbG9yKCBjb2xvcjIgKTtcblxuXHRcdGNvbnN0IGNlbnRlciA9IGRpdmlzaW9ucyAvIDI7XG5cdFx0Y29uc3Qgc3RlcCA9IHNpemUgLyBkaXZpc2lvbnM7XG5cdFx0Y29uc3QgaGFsZlNpemUgPSBzaXplIC8gMjtcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW10sIGNvbG9ycyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBqID0gMCwgayA9IC0gaGFsZlNpemU7IGkgPD0gZGl2aXNpb25zOyBpICsrLCBrICs9IHN0ZXAgKSB7XG5cblx0XHRcdHZlcnRpY2VzLnB1c2goIC0gaGFsZlNpemUsIDAsIGssIGhhbGZTaXplLCAwLCBrICk7XG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKCBrLCAwLCAtIGhhbGZTaXplLCBrLCAwLCBoYWxmU2l6ZSApO1xuXG5cdFx0XHRjb25zdCBjb2xvciA9IGkgPT09IGNlbnRlciA/IGNvbG9yMSA6IGNvbG9yMjtcblxuXHRcdFx0Y29sb3IudG9BcnJheSggY29sb3JzLCBqICk7IGogKz0gMztcblx0XHRcdGNvbG9yLnRvQXJyYXkoIGNvbG9ycywgaiApOyBqICs9IDM7XG5cdFx0XHRjb2xvci50b0FycmF5KCBjb2xvcnMsIGogKTsgaiArPSAzO1xuXHRcdFx0Y29sb3IudG9BcnJheSggY29sb3JzLCBqICk7IGogKz0gMztcblxuXHRcdH1cblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyB2ZXJ0ZXhDb2xvcnM6IHRydWUsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKTtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdHcmlkSGVscGVyJztcblxuXHR9XG5cbn1cblxuY2xhc3MgUG9sYXJHcmlkSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMTAsIHJhZGlhbHMgPSAxNiwgY2lyY2xlcyA9IDgsIGRpdmlzaW9ucyA9IDY0LCBjb2xvcjEgPSAweDQ0NDQ0NCwgY29sb3IyID0gMHg4ODg4ODggKSB7XG5cblx0XHRjb2xvcjEgPSBuZXcgQ29sb3IoIGNvbG9yMSApO1xuXHRcdGNvbG9yMiA9IG5ldyBDb2xvciggY29sb3IyICk7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbG9ycyA9IFtdO1xuXG5cdFx0Ly8gY3JlYXRlIHRoZSByYWRpYWxzXG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gcmFkaWFsczsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgdiA9ICggaSAvIHJhZGlhbHMgKSAqICggTWF0aC5QSSAqIDIgKTtcblxuXHRcdFx0Y29uc3QgeCA9IE1hdGguc2luKCB2ICkgKiByYWRpdXM7XG5cdFx0XHRjb25zdCB6ID0gTWF0aC5jb3MoIHYgKSAqIHJhZGl1cztcblxuXHRcdFx0dmVydGljZXMucHVzaCggMCwgMCwgMCApO1xuXHRcdFx0dmVydGljZXMucHVzaCggeCwgMCwgeiApO1xuXG5cdFx0XHRjb25zdCBjb2xvciA9ICggaSAmIDEgKSA/IGNvbG9yMSA6IGNvbG9yMjtcblxuXHRcdFx0Y29sb3JzLnB1c2goIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIgKTtcblx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cblx0XHR9XG5cblx0XHQvLyBjcmVhdGUgdGhlIGNpcmNsZXNcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSBjaXJjbGVzOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBjb2xvciA9ICggaSAmIDEgKSA/IGNvbG9yMSA6IGNvbG9yMjtcblxuXHRcdFx0Y29uc3QgciA9IHJhZGl1cyAtICggcmFkaXVzIC8gY2lyY2xlcyAqIGkgKTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgZGl2aXNpb25zOyBqICsrICkge1xuXG5cdFx0XHRcdC8vIGZpcnN0IHZlcnRleFxuXG5cdFx0XHRcdGxldCB2ID0gKCBqIC8gZGl2aXNpb25zICkgKiAoIE1hdGguUEkgKiAyICk7XG5cblx0XHRcdFx0bGV0IHggPSBNYXRoLnNpbiggdiApICogcjtcblx0XHRcdFx0bGV0IHogPSBNYXRoLmNvcyggdiApICogcjtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB4LCAwLCB6ICk7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cblx0XHRcdFx0Ly8gc2Vjb25kIHZlcnRleFxuXG5cdFx0XHRcdHYgPSAoICggaiArIDEgKSAvIGRpdmlzaW9ucyApICogKCBNYXRoLlBJICogMiApO1xuXG5cdFx0XHRcdHggPSBNYXRoLnNpbiggdiApICogcjtcblx0XHRcdFx0eiA9IE1hdGguY29zKCB2ICkgKiByO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHgsIDAsIHogKTtcblx0XHRcdFx0Y29sb3JzLnB1c2goIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnY29sb3InLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggY29sb3JzLCAzICkgKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IHZlcnRleENvbG9yczogdHJ1ZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BvbGFyR3JpZEhlbHBlcic7XG5cblx0fVxuXG59XG5cbmNvbnN0IF92MSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgRGlyZWN0aW9uYWxMaWdodEhlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggbGlnaHQsIHNpemUsIGNvbG9yICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0dGhpcy5tYXRyaXggPSBsaWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblxuXHRcdGlmICggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IDE7XG5cblx0XHRsZXQgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBbXG5cdFx0XHQtIHNpemUsIHNpemUsIDAsXG5cdFx0XHRzaXplLCBzaXplLCAwLFxuXHRcdFx0c2l6ZSwgLSBzaXplLCAwLFxuXHRcdFx0LSBzaXplLCAtIHNpemUsIDAsXG5cdFx0XHQtIHNpemUsIHNpemUsIDBcblx0XHRdLCAzICkgKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGZvZzogZmFsc2UsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKTtcblxuXHRcdHRoaXMubGlnaHRQbGFuZSA9IG5ldyBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblx0XHR0aGlzLmFkZCggdGhpcy5saWdodFBsYW5lICk7XG5cblx0XHRnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIFsgMCwgMCwgMCwgMCwgMCwgMSBdLCAzICkgKTtcblxuXHRcdHRoaXMudGFyZ2V0TGluZSA9IG5ldyBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblx0XHR0aGlzLmFkZCggdGhpcy50YXJnZXRMaW5lICk7XG5cblx0XHR0aGlzLnVwZGF0ZSgpO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5saWdodFBsYW5lLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0dXBkYXRlKCkge1xuXG5cdFx0X3YxLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5saWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdF92Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkICk7XG5cdFx0X3YzLnN1YlZlY3RvcnMoIF92MiwgX3YxICk7XG5cblx0XHR0aGlzLmxpZ2h0UGxhbmUubG9va0F0KCBfdjIgKTtcblxuXHRcdGlmICggdGhpcy5jb2xvciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCB0aGlzLmNvbG9yICk7XG5cdFx0XHR0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCB0aGlzLmNvbG9yICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5saWdodC5jb2xvciApO1xuXHRcdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMudGFyZ2V0TGluZS5sb29rQXQoIF92MiApO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5zY2FsZS56ID0gX3YzLmxlbmd0aCgpO1xuXG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2NhbWVyYSA9IC8qQF9fUFVSRV9fKi8gbmV3IENhbWVyYSgpO1xuXG4vKipcbiAqXHQtIHNob3dzIGZydXN0dW0sIGxpbmUgb2Ygc2lnaHQgYW5kIHVwIG9mIHRoZSBjYW1lcmFcbiAqXHQtIHN1aXRhYmxlIGZvciBmYXN0IHVwZGF0ZXNcbiAqIFx0LSBiYXNlZCBvbiBmcnVzdHVtIHZpc3VhbGl6YXRpb24gaW4gbGlnaHRnbC5qcyBzaGFkb3dtYXAgZXhhbXBsZVxuICpcdFx0aHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2xpZ2h0Z2wuanMvYmxvYi9tYXN0ZXIvdGVzdHMvc2hhZG93bWFwLmh0bWxcbiAqL1xuXG5jbGFzcyBDYW1lcmFIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXG5cdGNvbnN0cnVjdG9yKCBjYW1lcmEgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiAweGZmZmZmZiwgdmVydGV4Q29sb3JzOiB0cnVlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbG9ycyA9IFtdO1xuXG5cdFx0Y29uc3QgcG9pbnRNYXAgPSB7fTtcblxuXHRcdC8vIGNvbG9yc1xuXG5cdFx0Y29uc3QgY29sb3JGcnVzdHVtID0gbmV3IENvbG9yKCAweGZmYWEwMCApO1xuXHRcdGNvbnN0IGNvbG9yQ29uZSA9IG5ldyBDb2xvciggMHhmZjAwMDAgKTtcblx0XHRjb25zdCBjb2xvclVwID0gbmV3IENvbG9yKCAweDAwYWFmZiApO1xuXHRcdGNvbnN0IGNvbG9yVGFyZ2V0ID0gbmV3IENvbG9yKCAweGZmZmZmZiApO1xuXHRcdGNvbnN0IGNvbG9yQ3Jvc3MgPSBuZXcgQ29sb3IoIDB4MzMzMzMzICk7XG5cblx0XHQvLyBuZWFyXG5cblx0XHRhZGRMaW5lKCAnbjEnLCAnbjInLCBjb2xvckZydXN0dW0gKTtcblx0XHRhZGRMaW5lKCAnbjInLCAnbjQnLCBjb2xvckZydXN0dW0gKTtcblx0XHRhZGRMaW5lKCAnbjQnLCAnbjMnLCBjb2xvckZydXN0dW0gKTtcblx0XHRhZGRMaW5lKCAnbjMnLCAnbjEnLCBjb2xvckZydXN0dW0gKTtcblxuXHRcdC8vIGZhclxuXG5cdFx0YWRkTGluZSggJ2YxJywgJ2YyJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ2YyJywgJ2Y0JywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ2Y0JywgJ2YzJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ2YzJywgJ2YxJywgY29sb3JGcnVzdHVtICk7XG5cblx0XHQvLyBzaWRlc1xuXG5cdFx0YWRkTGluZSggJ24xJywgJ2YxJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ24yJywgJ2YyJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ24zJywgJ2YzJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ240JywgJ2Y0JywgY29sb3JGcnVzdHVtICk7XG5cblx0XHQvLyBjb25lXG5cblx0XHRhZGRMaW5lKCAncCcsICduMScsIGNvbG9yQ29uZSApO1xuXHRcdGFkZExpbmUoICdwJywgJ24yJywgY29sb3JDb25lICk7XG5cdFx0YWRkTGluZSggJ3AnLCAnbjMnLCBjb2xvckNvbmUgKTtcblx0XHRhZGRMaW5lKCAncCcsICduNCcsIGNvbG9yQ29uZSApO1xuXG5cdFx0Ly8gdXBcblxuXHRcdGFkZExpbmUoICd1MScsICd1MicsIGNvbG9yVXAgKTtcblx0XHRhZGRMaW5lKCAndTInLCAndTMnLCBjb2xvclVwICk7XG5cdFx0YWRkTGluZSggJ3UzJywgJ3UxJywgY29sb3JVcCApO1xuXG5cdFx0Ly8gdGFyZ2V0XG5cblx0XHRhZGRMaW5lKCAnYycsICd0JywgY29sb3JUYXJnZXQgKTtcblx0XHRhZGRMaW5lKCAncCcsICdjJywgY29sb3JDcm9zcyApO1xuXG5cdFx0Ly8gY3Jvc3NcblxuXHRcdGFkZExpbmUoICdjbjEnLCAnY24yJywgY29sb3JDcm9zcyApO1xuXHRcdGFkZExpbmUoICdjbjMnLCAnY240JywgY29sb3JDcm9zcyApO1xuXG5cdFx0YWRkTGluZSggJ2NmMScsICdjZjInLCBjb2xvckNyb3NzICk7XG5cdFx0YWRkTGluZSggJ2NmMycsICdjZjQnLCBjb2xvckNyb3NzICk7XG5cblx0XHRmdW5jdGlvbiBhZGRMaW5lKCBhLCBiLCBjb2xvciApIHtcblxuXHRcdFx0YWRkUG9pbnQoIGEsIGNvbG9yICk7XG5cdFx0XHRhZGRQb2ludCggYiwgY29sb3IgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZFBvaW50KCBpZCwgY29sb3IgKSB7XG5cblx0XHRcdHZlcnRpY2VzLnB1c2goIDAsIDAsIDAgKTtcblx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cblx0XHRcdGlmICggcG9pbnRNYXBbIGlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRwb2ludE1hcFsgaWQgXSA9IFtdO1xuXG5cdFx0XHR9XG5cblx0XHRcdHBvaW50TWFwWyBpZCBdLnB1c2goICggdmVydGljZXMubGVuZ3RoIC8gMyApIC0gMSApO1xuXG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ2FtZXJhSGVscGVyJztcblxuXHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXHRcdGlmICggdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCApIHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdHRoaXMubWF0cml4ID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5wb2ludE1hcCA9IHBvaW50TWFwO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cblx0dXBkYXRlKCkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IHBvaW50TWFwID0gdGhpcy5wb2ludE1hcDtcblxuXHRcdGNvbnN0IHcgPSAxLCBoID0gMTtcblxuXHRcdC8vIHdlIG5lZWQganVzdCBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXggaW52ZXJzZVxuXHRcdC8vIHdvcmxkIG1hdHJpeCBtdXN0IGJlIGlkZW50aXR5XG5cblx0XHRfY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkoIHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlICk7XG5cblx0XHQvLyBjZW50ZXIgLyB0YXJnZXRcblxuXHRcdHNldFBvaW50KCAnYycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgMCwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICd0JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCAwLCAxICk7XG5cblx0XHQvLyBuZWFyXG5cblx0XHRzZXRQb2ludCggJ24xJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcsIC0gaCwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICduMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgLSBoLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ24zJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcsIGgsIC0gMSApO1xuXHRcdHNldFBvaW50KCAnbjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIGgsIC0gMSApO1xuXG5cdFx0Ly8gZmFyXG5cblx0XHRzZXRQb2ludCggJ2YxJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcsIC0gaCwgMSApO1xuXHRcdHNldFBvaW50KCAnZjInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIC0gaCwgMSApO1xuXHRcdHNldFBvaW50KCAnZjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC0gdywgaCwgMSApO1xuXHRcdHNldFBvaW50KCAnZjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIGgsIDEgKTtcblxuXHRcdC8vIHVwXG5cblx0XHRzZXRQb2ludCggJ3UxJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3ICogMC43LCBoICogMS4xLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ3UyJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcgKiAwLjcsIGggKiAxLjEsIC0gMSApO1xuXHRcdHNldFBvaW50KCAndTMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGggKiAyLCAtIDEgKTtcblxuXHRcdC8vIGNyb3NzXG5cblx0XHRzZXRQb2ludCggJ2NmMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3LCAwLCAxICk7XG5cdFx0c2V0UG9pbnQoICdjZjInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIDAsIDEgKTtcblx0XHRzZXRQb2ludCggJ2NmMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgLSBoLCAxICk7XG5cdFx0c2V0UG9pbnQoICdjZjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGgsIDEgKTtcblxuXHRcdHNldFBvaW50KCAnY24xJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcsIDAsIC0gMSApO1xuXHRcdHNldFBvaW50KCAnY24yJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCAwLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ2NuMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgLSBoLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ2NuNCcsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgaCwgLSAxICk7XG5cblx0XHRnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cbn1cblxuXG5mdW5jdGlvbiBzZXRQb2ludCggcG9pbnQsIHBvaW50TWFwLCBnZW9tZXRyeSwgY2FtZXJhLCB4LCB5LCB6ICkge1xuXG5cdF92ZWN0b3Iuc2V0KCB4LCB5LCB6ICkudW5wcm9qZWN0KCBjYW1lcmEgKTtcblxuXHRjb25zdCBwb2ludHMgPSBwb2ludE1hcFsgcG9pbnQgXTtcblxuXHRpZiAoIHBvaW50cyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRwb3NpdGlvbi5zZXRYWVooIHBvaW50c1sgaSBdLCBfdmVjdG9yLngsIF92ZWN0b3IueSwgX3ZlY3Rvci56ICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbmNvbnN0IF9ib3ggPSAvKkBfX1BVUkVfXyovIG5ldyBCb3gzKCk7XG5cbmNsYXNzIEJveEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cblx0Y29uc3RydWN0b3IoIG9iamVjdCwgY29sb3IgPSAweGZmZmYwMCApIHtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoIFsgMCwgMSwgMSwgMiwgMiwgMywgMywgMCwgNCwgNSwgNSwgNiwgNiwgNywgNywgNCwgMCwgNCwgMSwgNSwgMiwgNiwgMywgNyBdICk7XG5cdFx0Y29uc3QgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSggOCAqIDMgKTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0SW5kZXgoIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGluZGljZXMsIDEgKSApO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25zLCAzICkgKTtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBjb2xvciwgdG9uZU1hcHBlZDogZmFsc2UgfSApICk7XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLnR5cGUgPSAnQm94SGVscGVyJztcblxuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cblx0dXBkYXRlKCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIG9iamVjdCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4nICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub2JqZWN0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdF9ib3guc2V0RnJvbU9iamVjdCggdGhpcy5vYmplY3QgKTtcblxuXHRcdH1cblxuXHRcdGlmICggX2JveC5pc0VtcHR5KCkgKSByZXR1cm47XG5cblx0XHRjb25zdCBtaW4gPSBfYm94Lm1pbjtcblx0XHRjb25zdCBtYXggPSBfYm94Lm1heDtcblxuXHRcdC8qXG5cdFx0XHQ1X19fXzRcblx0XHQxL19fXzAvfFxuXHRcdHwgNl9ffF83XG5cdFx0Mi9fX18zL1xuXG5cdFx0MDogbWF4LngsIG1heC55LCBtYXguelxuXHRcdDE6IG1pbi54LCBtYXgueSwgbWF4Lnpcblx0XHQyOiBtaW4ueCwgbWluLnksIG1heC56XG5cdFx0MzogbWF4LngsIG1pbi55LCBtYXguelxuXHRcdDQ6IG1heC54LCBtYXgueSwgbWluLnpcblx0XHQ1OiBtaW4ueCwgbWF4LnksIG1pbi56XG5cdFx0NjogbWluLngsIG1pbi55LCBtaW4uelxuXHRcdDc6IG1heC54LCBtaW4ueSwgbWluLnpcblx0XHQqL1xuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0Y29uc3QgYXJyYXkgPSBwb3NpdGlvbi5hcnJheTtcblxuXHRcdGFycmF5WyAwIF0gPSBtYXgueDsgYXJyYXlbIDEgXSA9IG1heC55OyBhcnJheVsgMiBdID0gbWF4Lno7XG5cdFx0YXJyYXlbIDMgXSA9IG1pbi54OyBhcnJheVsgNCBdID0gbWF4Lnk7IGFycmF5WyA1IF0gPSBtYXguejtcblx0XHRhcnJheVsgNiBdID0gbWluLng7IGFycmF5WyA3IF0gPSBtaW4ueTsgYXJyYXlbIDggXSA9IG1heC56O1xuXHRcdGFycmF5WyA5IF0gPSBtYXgueDsgYXJyYXlbIDEwIF0gPSBtaW4ueTsgYXJyYXlbIDExIF0gPSBtYXguejtcblx0XHRhcnJheVsgMTIgXSA9IG1heC54OyBhcnJheVsgMTMgXSA9IG1heC55OyBhcnJheVsgMTQgXSA9IG1pbi56O1xuXHRcdGFycmF5WyAxNSBdID0gbWluLng7IGFycmF5WyAxNiBdID0gbWF4Lnk7IGFycmF5WyAxNyBdID0gbWluLno7XG5cdFx0YXJyYXlbIDE4IF0gPSBtaW4ueDsgYXJyYXlbIDE5IF0gPSBtaW4ueTsgYXJyYXlbIDIwIF0gPSBtaW4uejtcblx0XHRhcnJheVsgMjEgXSA9IG1heC54OyBhcnJheVsgMjIgXSA9IG1pbi55OyBhcnJheVsgMjMgXSA9IG1pbi56O1xuXG5cdFx0cG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXG5cdH1cblxuXHRzZXRGcm9tT2JqZWN0KCBvYmplY3QgKSB7XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLnVwZGF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdExpbmVTZWdtZW50cy5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTtcblxuXHRcdHRoaXMub2JqZWN0ID0gc291cmNlLm9iamVjdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBCb3gzSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblxuXHRjb25zdHJ1Y3RvciggYm94LCBjb2xvciA9IDB4ZmZmZjAwICkge1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSggWyAwLCAxLCAxLCAyLCAyLCAzLCAzLCAwLCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA0LCAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3IF0gKTtcblxuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IFsgMSwgMSwgMSwgLSAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgLSAxLCAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgLSAxLCAtIDEsIC0gMSwgLSAxLCAxLCAtIDEsIC0gMSBdO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblxuXHRcdGdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVmZmVyQXR0cmlidXRlKCBpbmRpY2VzLCAxICkgKTtcblxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9ucywgMyApICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKSApO1xuXG5cdFx0dGhpcy5ib3ggPSBib3g7XG5cblx0XHR0aGlzLnR5cGUgPSAnQm94M0hlbHBlcic7XG5cblx0XHR0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKSB7XG5cblx0XHRjb25zdCBib3ggPSB0aGlzLmJveDtcblxuXHRcdGlmICggYm94LmlzRW1wdHkoKSApIHJldHVybjtcblxuXHRcdGJveC5nZXRDZW50ZXIoIHRoaXMucG9zaXRpb24gKTtcblxuXHRcdGJveC5nZXRTaXplKCB0aGlzLnNjYWxlICk7XG5cblx0XHR0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKCAwLjUgKTtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBQbGFuZUhlbHBlciBleHRlbmRzIExpbmUge1xuXG5cdGNvbnN0cnVjdG9yKCBwbGFuZSwgc2l6ZSA9IDEsIGhleCA9IDB4ZmZmZjAwICkge1xuXG5cdFx0Y29uc3QgY29sb3IgPSBoZXg7XG5cblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbIDEsIC0gMSwgMSwgLSAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgMSwgMSwgLSAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgLSAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwIF07XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9ucywgMyApICk7XG5cdFx0Z2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BsYW5lSGVscGVyJztcblxuXHRcdHRoaXMucGxhbmUgPSBwbGFuZTtcblxuXHRcdHRoaXMuc2l6ZSA9IHNpemU7XG5cblx0XHRjb25zdCBwb3NpdGlvbnMyID0gWyAxLCAxLCAxLCAtIDEsIDEsIDEsIC0gMSwgLSAxLCAxLCAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgLSAxLCAxIF07XG5cblx0XHRjb25zdCBnZW9tZXRyeTIgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeTIuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25zMiwgMyApICk7XG5cdFx0Z2VvbWV0cnkyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0dGhpcy5hZGQoIG5ldyBNZXNoKCBnZW9tZXRyeTIsIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIG9wYWNpdHk6IDAuMiwgdHJhbnNwYXJlbnQ6IHRydWUsIGRlcHRoV3JpdGU6IGZhbHNlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICkgKSApO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKSB7XG5cblx0XHRsZXQgc2NhbGUgPSAtIHRoaXMucGxhbmUuY29uc3RhbnQ7XG5cblx0XHRpZiAoIE1hdGguYWJzKCBzY2FsZSApIDwgMWUtOCApIHNjYWxlID0gMWUtODsgLy8gc2lnbiBkb2VzIG5vdCBtYXR0ZXJcblxuXHRcdHRoaXMuc2NhbGUuc2V0KCAwLjUgKiB0aGlzLnNpemUsIDAuNSAqIHRoaXMuc2l6ZSwgc2NhbGUgKTtcblxuXHRcdHRoaXMuY2hpbGRyZW5bIDAgXS5tYXRlcmlhbC5zaWRlID0gKCBzY2FsZSA8IDAgKSA/IEJhY2tTaWRlIDogRnJvbnRTaWRlOyAvLyByZW5kZXJlciBmbGlwcyBzaWRlIHdoZW4gZGV0ZXJtaW5hbnQgPCAwOyBmbGlwcGluZyBub3Qgd2FudGVkIGhlcmVcblxuXHRcdHRoaXMubG9va0F0KCB0aGlzLnBsYW5lLm5vcm1hbCApO1xuXG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IF9heGlzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xubGV0IF9saW5lR2VvbWV0cnksIF9jb25lR2VvbWV0cnk7XG5cbmNsYXNzIEFycm93SGVscGVyIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdC8vIGRpciBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblxuXHRjb25zdHJ1Y3RvciggZGlyID0gbmV3IFZlY3RvcjMoIDAsIDAsIDEgKSwgb3JpZ2luID0gbmV3IFZlY3RvcjMoIDAsIDAsIDAgKSwgbGVuZ3RoID0gMSwgY29sb3IgPSAweGZmZmYwMCwgaGVhZExlbmd0aCA9IGxlbmd0aCAqIDAuMiwgaGVhZFdpZHRoID0gaGVhZExlbmd0aCAqIDAuMiApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQXJyb3dIZWxwZXInO1xuXG5cdFx0aWYgKCBfbGluZUdlb21ldHJ5ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdF9saW5lR2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRcdF9saW5lR2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggWyAwLCAwLCAwLCAwLCAxLCAwIF0sIDMgKSApO1xuXG5cdFx0XHRfY29uZUdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoIDAsIDAuNSwgMSwgNSwgMSApO1xuXHRcdFx0X2NvbmVHZW9tZXRyeS50cmFuc2xhdGUoIDAsIC0gMC41LCAwICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnBvc2l0aW9uLmNvcHkoIG9yaWdpbiApO1xuXG5cdFx0dGhpcy5saW5lID0gbmV3IExpbmUoIF9saW5lR2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKSApO1xuXHRcdHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5hZGQoIHRoaXMubGluZSApO1xuXG5cdFx0dGhpcy5jb25lID0gbmV3IE1lc2goIF9jb25lR2VvbWV0cnksIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKSApO1xuXHRcdHRoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5hZGQoIHRoaXMuY29uZSApO1xuXG5cdFx0dGhpcy5zZXREaXJlY3Rpb24oIGRpciApO1xuXHRcdHRoaXMuc2V0TGVuZ3RoKCBsZW5ndGgsIGhlYWRMZW5ndGgsIGhlYWRXaWR0aCApO1xuXG5cdH1cblxuXHRzZXREaXJlY3Rpb24oIGRpciApIHtcblxuXHRcdC8vIGRpciBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblxuXHRcdGlmICggZGlyLnkgPiAwLjk5OTk5ICkge1xuXG5cdFx0XHR0aGlzLnF1YXRlcm5pb24uc2V0KCAwLCAwLCAwLCAxICk7XG5cblx0XHR9IGVsc2UgaWYgKCBkaXIueSA8IC0gMC45OTk5OSApIHtcblxuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnNldCggMSwgMCwgMCwgMCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X2F4aXMuc2V0KCBkaXIueiwgMCwgLSBkaXIueCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRjb25zdCByYWRpYW5zID0gTWF0aC5hY29zKCBkaXIueSApO1xuXG5cdFx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSggX2F4aXMsIHJhZGlhbnMgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0c2V0TGVuZ3RoKCBsZW5ndGgsIGhlYWRMZW5ndGggPSBsZW5ndGggKiAwLjIsIGhlYWRXaWR0aCA9IGhlYWRMZW5ndGggKiAwLjIgKSB7XG5cblx0XHR0aGlzLmxpbmUuc2NhbGUuc2V0KCAxLCBNYXRoLm1heCggMC4wMDAxLCBsZW5ndGggLSBoZWFkTGVuZ3RoICksIDEgKTsgLy8gc2VlICMxNzQ1OFxuXHRcdHRoaXMubGluZS51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMuY29uZS5zY2FsZS5zZXQoIGhlYWRXaWR0aCwgaGVhZExlbmd0aCwgaGVhZFdpZHRoICk7XG5cdFx0dGhpcy5jb25lLnBvc2l0aW9uLnkgPSBsZW5ndGg7XG5cdFx0dGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdH1cblxuXHRzZXRDb2xvciggY29sb3IgKSB7XG5cblx0XHR0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCBjb2xvciApO1xuXHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQoIGNvbG9yICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgZmFsc2UgKTtcblxuXHRcdHRoaXMubGluZS5jb3B5KCBzb3VyY2UubGluZSApO1xuXHRcdHRoaXMuY29uZS5jb3B5KCBzb3VyY2UuY29uZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIEF4ZXNIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXG5cdGNvbnN0cnVjdG9yKCBzaXplID0gMSApIHtcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW1xuXHRcdFx0MCwgMCwgMCxcdHNpemUsIDAsIDAsXG5cdFx0XHQwLCAwLCAwLFx0MCwgc2l6ZSwgMCxcblx0XHRcdDAsIDAsIDAsXHQwLCAwLCBzaXplXG5cdFx0XTtcblxuXHRcdGNvbnN0IGNvbG9ycyA9IFtcblx0XHRcdDEsIDAsIDAsXHQxLCAwLjYsIDAsXG5cdFx0XHQwLCAxLCAwLFx0MC42LCAxLCAwLFxuXHRcdFx0MCwgMCwgMSxcdDAsIDAuNiwgMVxuXHRcdF07XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKSApO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgdmVydGV4Q29sb3JzOiB0cnVlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQXhlc0hlbHBlcic7XG5cblx0fVxuXG5cdHNldENvbG9ycyggeEF4aXNDb2xvciwgeUF4aXNDb2xvciwgekF4aXNDb2xvciApIHtcblxuXHRcdGNvbnN0IGNvbG9yID0gbmV3IENvbG9yKCk7XG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuYXJyYXk7XG5cblx0XHRjb2xvci5zZXQoIHhBeGlzQ29sb3IgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgMCApO1xuXHRcdGNvbG9yLnRvQXJyYXkoIGFycmF5LCAzICk7XG5cblx0XHRjb2xvci5zZXQoIHlBeGlzQ29sb3IgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgNiApO1xuXHRcdGNvbG9yLnRvQXJyYXkoIGFycmF5LCA5ICk7XG5cblx0XHRjb2xvci5zZXQoIHpBeGlzQ29sb3IgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgMTIgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgMTUgKTtcblxuXHRcdHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZVBhdGgge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlUGF0aCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCk7XG5cblx0XHR0aGlzLnN1YlBhdGhzID0gW107XG5cdFx0dGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cblx0fVxuXG5cdG1vdmVUbyggeCwgeSApIHtcblxuXHRcdHRoaXMuY3VycmVudFBhdGggPSBuZXcgUGF0aCgpO1xuXHRcdHRoaXMuc3ViUGF0aHMucHVzaCggdGhpcy5jdXJyZW50UGF0aCApO1xuXHRcdHRoaXMuY3VycmVudFBhdGgubW92ZVRvKCB4LCB5ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGluZVRvKCB4LCB5ICkge1xuXG5cdFx0dGhpcy5jdXJyZW50UGF0aC5saW5lVG8oIHgsIHkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRxdWFkcmF0aWNDdXJ2ZVRvKCBhQ1B4LCBhQ1B5LCBhWCwgYVkgKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8oIGFDUHgsIGFDUHksIGFYLCBhWSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGJlemllckN1cnZlVG8oIGFDUDF4LCBhQ1AxeSwgYUNQMngsIGFDUDJ5LCBhWCwgYVkgKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8oIGFDUDF4LCBhQ1AxeSwgYUNQMngsIGFDUDJ5LCBhWCwgYVkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzcGxpbmVUaHJ1KCBwdHMgKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUoIHB0cyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvU2hhcGVzKCBpc0NDVywgbm9Ib2xlcyApIHtcblxuXHRcdGZ1bmN0aW9uIHRvU2hhcGVzTm9Ib2xlcyggaW5TdWJwYXRocyApIHtcblxuXHRcdFx0Y29uc3Qgc2hhcGVzID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGluU3VicGF0aHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB0bXBQYXRoID0gaW5TdWJwYXRoc1sgaSBdO1xuXG5cdFx0XHRcdGNvbnN0IHRtcFNoYXBlID0gbmV3IFNoYXBlKCk7XG5cdFx0XHRcdHRtcFNoYXBlLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXG5cdFx0XHRcdHNoYXBlcy5wdXNoKCB0bXBTaGFwZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzaGFwZXM7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1BvaW50SW5zaWRlUG9seWdvbiggaW5QdCwgaW5Qb2x5Z29uICkge1xuXG5cdFx0XHRjb25zdCBwb2x5TGVuID0gaW5Qb2x5Z29uLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW5QdCBvbiBwb2x5Z29uIGNvbnRvdXIgPT4gaW1tZWRpYXRlIHN1Y2Nlc3MgICAgb3Jcblx0XHRcdC8vIHRvZ2dsaW5nIG9mIGluc2lkZS9vdXRzaWRlIGF0IGV2ZXJ5IHNpbmdsZSEgaW50ZXJzZWN0aW9uIHBvaW50IG9mIGFuIGVkZ2Vcblx0XHRcdC8vICB3aXRoIHRoZSBob3Jpem9udGFsIGxpbmUgdGhyb3VnaCBpblB0LCBsZWZ0IG9mIGluUHRcblx0XHRcdC8vICBub3QgY291bnRpbmcgbG93ZXJZIGVuZHBvaW50cyBvZiBlZGdlcyBhbmQgd2hvbGUgZWRnZXMgb24gdGhhdCBsaW5lXG5cdFx0XHRsZXQgaW5zaWRlID0gZmFsc2U7XG5cdFx0XHRmb3IgKCBsZXQgcCA9IHBvbHlMZW4gLSAxLCBxID0gMDsgcSA8IHBvbHlMZW47IHAgPSBxICsrICkge1xuXG5cdFx0XHRcdGxldCBlZGdlTG93UHQgPSBpblBvbHlnb25bIHAgXTtcblx0XHRcdFx0bGV0IGVkZ2VIaWdoUHQgPSBpblBvbHlnb25bIHEgXTtcblxuXHRcdFx0XHRsZXQgZWRnZUR4ID0gZWRnZUhpZ2hQdC54IC0gZWRnZUxvd1B0Lng7XG5cdFx0XHRcdGxldCBlZGdlRHkgPSBlZGdlSGlnaFB0LnkgLSBlZGdlTG93UHQueTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBlZGdlRHkgKSA+IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdFx0Ly8gbm90IHBhcmFsbGVsXG5cdFx0XHRcdFx0aWYgKCBlZGdlRHkgPCAwICkge1xuXG5cdFx0XHRcdFx0XHRlZGdlTG93UHQgPSBpblBvbHlnb25bIHEgXTsgZWRnZUR4ID0gLSBlZGdlRHg7XG5cdFx0XHRcdFx0XHRlZGdlSGlnaFB0ID0gaW5Qb2x5Z29uWyBwIF07IGVkZ2VEeSA9IC0gZWRnZUR5O1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAoIGluUHQueSA8IGVkZ2VMb3dQdC55ICkgfHwgKCBpblB0LnkgPiBlZGdlSGlnaFB0LnkgKSApIFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGlmICggaW5QdC55ID09PSBlZGdlTG93UHQueSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBpblB0LnggPT09IGVkZ2VMb3dQdC54IClcdFx0cmV0dXJuXHR0cnVlO1x0XHQvLyBpblB0IGlzIG9uIGNvbnRvdXIgP1xuXHRcdFx0XHRcdFx0Ly8gY29udGludWU7XHRcdFx0XHQvLyBubyBpbnRlcnNlY3Rpb24gb3IgZWRnZUxvd1B0ID0+IGRvZXNuJ3QgY291bnQgISEhXG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBwZXJwRWRnZSA9IGVkZ2VEeSAqICggaW5QdC54IC0gZWRnZUxvd1B0LnggKSAtIGVkZ2VEeCAqICggaW5QdC55IC0gZWRnZUxvd1B0LnkgKTtcblx0XHRcdFx0XHRcdGlmICggcGVycEVkZ2UgPT09IDAgKVx0XHRcdFx0cmV0dXJuXHR0cnVlO1x0XHQvLyBpblB0IGlzIG9uIGNvbnRvdXIgP1xuXHRcdFx0XHRcdFx0aWYgKCBwZXJwRWRnZSA8IDAgKSBcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aW5zaWRlID0gISBpbnNpZGU7XHRcdC8vIHRydWUgaW50ZXJzZWN0aW9uIGxlZnQgb2YgaW5QdFxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBwYXJhbGxlbCBvciBjb2xsaW5lYXJcblx0XHRcdFx0XHRpZiAoIGluUHQueSAhPT0gZWRnZUxvd1B0LnkgKSBcdFx0Y29udGludWU7XHRcdFx0Ly8gcGFyYWxsZWxcblx0XHRcdFx0XHQvLyBlZGdlIGxpZXMgb24gdGhlIHNhbWUgaG9yaXpvbnRhbCBsaW5lIGFzIGluUHRcblx0XHRcdFx0XHRpZiAoICggKCBlZGdlSGlnaFB0LnggPD0gaW5QdC54ICkgJiYgKCBpblB0LnggPD0gZWRnZUxvd1B0LnggKSApIHx8XG5cdFx0XHRcdFx0XHQgKCAoIGVkZ2VMb3dQdC54IDw9IGluUHQueCApICYmICggaW5QdC54IDw9IGVkZ2VIaWdoUHQueCApICkgKVx0XHRyZXR1cm5cdHRydWU7XHQvLyBpblB0OiBQb2ludCBvbiBjb250b3VyICFcblx0XHRcdFx0XHQvLyBjb250aW51ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuXHRpbnNpZGU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBpc0Nsb2NrV2lzZSA9IFNoYXBlVXRpbHMuaXNDbG9ja1dpc2U7XG5cblx0XHRjb25zdCBzdWJQYXRocyA9IHRoaXMuc3ViUGF0aHM7XG5cdFx0aWYgKCBzdWJQYXRocy5sZW5ndGggPT09IDAgKSByZXR1cm4gW107XG5cblx0XHRpZiAoIG5vSG9sZXMgPT09IHRydWUgKVx0cmV0dXJuXHR0b1NoYXBlc05vSG9sZXMoIHN1YlBhdGhzICk7XG5cblxuXHRcdGxldCBzb2xpZCwgdG1wUGF0aCwgdG1wU2hhcGU7XG5cdFx0Y29uc3Qgc2hhcGVzID0gW107XG5cblx0XHRpZiAoIHN1YlBhdGhzLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdFx0dG1wUGF0aCA9IHN1YlBhdGhzWyAwIF07XG5cdFx0XHR0bXBTaGFwZSA9IG5ldyBTaGFwZSgpO1xuXHRcdFx0dG1wU2hhcGUuY3VydmVzID0gdG1wUGF0aC5jdXJ2ZXM7XG5cdFx0XHRzaGFwZXMucHVzaCggdG1wU2hhcGUgKTtcblx0XHRcdHJldHVybiBzaGFwZXM7XG5cblx0XHR9XG5cblx0XHRsZXQgaG9sZXNGaXJzdCA9ICEgaXNDbG9ja1dpc2UoIHN1YlBhdGhzWyAwIF0uZ2V0UG9pbnRzKCkgKTtcblx0XHRob2xlc0ZpcnN0ID0gaXNDQ1cgPyAhIGhvbGVzRmlyc3QgOiBob2xlc0ZpcnN0O1xuXG5cdFx0Ly8gY29uc29sZS5sb2coXCJIb2xlcyBmaXJzdFwiLCBob2xlc0ZpcnN0KTtcblxuXHRcdGNvbnN0IGJldHRlclNoYXBlSG9sZXMgPSBbXTtcblx0XHRjb25zdCBuZXdTaGFwZXMgPSBbXTtcblx0XHRsZXQgbmV3U2hhcGVIb2xlcyA9IFtdO1xuXHRcdGxldCBtYWluSWR4ID0gMDtcblx0XHRsZXQgdG1wUG9pbnRzO1xuXG5cdFx0bmV3U2hhcGVzWyBtYWluSWR4IF0gPSB1bmRlZmluZWQ7XG5cdFx0bmV3U2hhcGVIb2xlc1sgbWFpbklkeCBdID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzdWJQYXRocy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHR0bXBQYXRoID0gc3ViUGF0aHNbIGkgXTtcblx0XHRcdHRtcFBvaW50cyA9IHRtcFBhdGguZ2V0UG9pbnRzKCk7XG5cdFx0XHRzb2xpZCA9IGlzQ2xvY2tXaXNlKCB0bXBQb2ludHMgKTtcblx0XHRcdHNvbGlkID0gaXNDQ1cgPyAhIHNvbGlkIDogc29saWQ7XG5cblx0XHRcdGlmICggc29saWQgKSB7XG5cblx0XHRcdFx0aWYgKCAoICEgaG9sZXNGaXJzdCApICYmICggbmV3U2hhcGVzWyBtYWluSWR4IF0gKSApXHRtYWluSWR4ICsrO1xuXG5cdFx0XHRcdG5ld1NoYXBlc1sgbWFpbklkeCBdID0geyBzOiBuZXcgU2hhcGUoKSwgcDogdG1wUG9pbnRzIH07XG5cdFx0XHRcdG5ld1NoYXBlc1sgbWFpbklkeCBdLnMuY3VydmVzID0gdG1wUGF0aC5jdXJ2ZXM7XG5cblx0XHRcdFx0aWYgKCBob2xlc0ZpcnN0IClcdG1haW5JZHggKys7XG5cdFx0XHRcdG5ld1NoYXBlSG9sZXNbIG1haW5JZHggXSA9IFtdO1xuXG5cdFx0XHRcdC8vY29uc29sZS5sb2coJ2N3JywgaSk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0bmV3U2hhcGVIb2xlc1sgbWFpbklkeCBdLnB1c2goIHsgaDogdG1wUGF0aCwgcDogdG1wUG9pbnRzWyAwIF0gfSApO1xuXG5cdFx0XHRcdC8vY29uc29sZS5sb2coJ2NjdycsIGkpO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBvbmx5IEhvbGVzPyAtPiBwcm9iYWJseSBhbGwgU2hhcGVzIHdpdGggd3Jvbmcgb3JpZW50YXRpb25cblx0XHRpZiAoICEgbmV3U2hhcGVzWyAwIF0gKVx0cmV0dXJuXHR0b1NoYXBlc05vSG9sZXMoIHN1YlBhdGhzICk7XG5cblxuXHRcdGlmICggbmV3U2hhcGVzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdGxldCBhbWJpZ3VvdXMgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHRvQ2hhbmdlID0gW107XG5cblx0XHRcdGZvciAoIGxldCBzSWR4ID0gMCwgc0xlbiA9IG5ld1NoYXBlcy5sZW5ndGg7IHNJZHggPCBzTGVuOyBzSWR4ICsrICkge1xuXG5cdFx0XHRcdGJldHRlclNoYXBlSG9sZXNbIHNJZHggXSA9IFtdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGxldCBzSWR4ID0gMCwgc0xlbiA9IG5ld1NoYXBlcy5sZW5ndGg7IHNJZHggPCBzTGVuOyBzSWR4ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNobyA9IG5ld1NoYXBlSG9sZXNbIHNJZHggXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaElkeCA9IDA7IGhJZHggPCBzaG8ubGVuZ3RoOyBoSWR4ICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgaG8gPSBzaG9bIGhJZHggXTtcblx0XHRcdFx0XHRsZXQgaG9sZV91bmFzc2lnbmVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBzMklkeCA9IDA7IHMySWR4IDwgbmV3U2hhcGVzLmxlbmd0aDsgczJJZHggKysgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggaXNQb2ludEluc2lkZVBvbHlnb24oIGhvLnAsIG5ld1NoYXBlc1sgczJJZHggXS5wICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBzSWR4ICE9PSBzMklkeCApXHR0b0NoYW5nZS5wdXNoKCB7IGZyb21zOiBzSWR4LCB0b3M6IHMySWR4LCBob2xlOiBoSWR4IH0gKTtcblx0XHRcdFx0XHRcdFx0aWYgKCBob2xlX3VuYXNzaWduZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRob2xlX3VuYXNzaWduZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRiZXR0ZXJTaGFwZUhvbGVzWyBzMklkeCBdLnB1c2goIGhvICk7XG5cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdGFtYmlndW91cyA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGhvbGVfdW5hc3NpZ25lZCApIHtcblxuXHRcdFx0XHRcdFx0YmV0dGVyU2hhcGVIb2xlc1sgc0lkeCBdLnB1c2goIGhvICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFtYmlndW91czogXCIsIGFtYmlndW91cyk7XG5cblx0XHRcdGlmICggdG9DaGFuZ2UubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInRvIGNoYW5nZTogXCIsIHRvQ2hhbmdlKTtcblx0XHRcdFx0aWYgKCAhIGFtYmlndW91cyApXHRuZXdTaGFwZUhvbGVzID0gYmV0dGVyU2hhcGVIb2xlcztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0bGV0IHRtcEhvbGVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG5ld1NoYXBlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0dG1wU2hhcGUgPSBuZXdTaGFwZXNbIGkgXS5zO1xuXHRcdFx0c2hhcGVzLnB1c2goIHRtcFNoYXBlICk7XG5cdFx0XHR0bXBIb2xlcyA9IG5ld1NoYXBlSG9sZXNbIGkgXTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwLCBqbCA9IHRtcEhvbGVzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRcdHRtcFNoYXBlLmhvbGVzLnB1c2goIHRtcEhvbGVzWyBqIF0uaCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvL2NvbnNvbGUubG9nKFwic2hhcGVcIiwgc2hhcGVzKTtcblxuXHRcdHJldHVybiBzaGFwZXM7XG5cblx0fVxuXG59XG5cbmNvbnN0IF9mbG9hdFZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KCAxICk7XG5jb25zdCBfaW50MzJWaWV3ID0gbmV3IEludDMyQXJyYXkoIF9mbG9hdFZpZXcuYnVmZmVyICk7XG5cbmNsYXNzIERhdGFVdGlscyB7XG5cblx0Ly8gQ29udmVydHMgZmxvYXQzMiB0byBmbG9hdDE2IChzdG9yZWQgYXMgdWludDE2IHZhbHVlKS5cblxuXHRzdGF0aWMgdG9IYWxmRmxvYXQoIHZhbCApIHtcblxuXHRcdGlmICggdmFsID4gNjU1MDQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LicgKTtcblxuXHRcdFx0dmFsID0gNjU1MDQ7IC8vIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBpbiBmbG9hdDE2XG5cblx0XHR9XG5cblx0XHQvLyBTb3VyY2U6IGh0dHA6Ly9nYW1lZGV2LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xNzMyNi9jb252ZXJzaW9uLW9mLWEtbnVtYmVyLWZyb20tc2luZ2xlLXByZWNpc2lvbi1mbG9hdGluZy1wb2ludC1yZXByZXNlbnRhdGlvbi10by1hLzE3NDEwIzE3NDEwXG5cblx0XHQvKiBUaGlzIG1ldGhvZCBpcyBmYXN0ZXIgdGhhbiB0aGUgT3BlbkVYUiBpbXBsZW1lbnRhdGlvbiAodmVyeSBvZnRlblxuXHRcdCogdXNlZCwgZWcuIGluIE9ncmUpLCB3aXRoIHRoZSBhZGRpdGlvbmFsIGJlbmVmaXQgb2Ygcm91bmRpbmcsIGluc3BpcmVkXG5cdFx0KiBieSBKYW1lcyBUdXJzYT9zIGhhbGYtcHJlY2lzaW9uIGNvZGUuICovXG5cblx0XHRfZmxvYXRWaWV3WyAwIF0gPSB2YWw7XG5cdFx0Y29uc3QgeCA9IF9pbnQzMlZpZXdbIDAgXTtcblxuXHRcdGxldCBiaXRzID0gKCB4ID4+IDE2ICkgJiAweDgwMDA7IC8qIEdldCB0aGUgc2lnbiAqL1xuXHRcdGxldCBtID0gKCB4ID4+IDEyICkgJiAweDA3ZmY7IC8qIEtlZXAgb25lIGV4dHJhIGJpdCBmb3Igcm91bmRpbmcgKi9cblx0XHRjb25zdCBlID0gKCB4ID4+IDIzICkgJiAweGZmOyAvKiBVc2luZyBpbnQgaXMgZmFzdGVyIGhlcmUgKi9cblxuXHRcdC8qIElmIHplcm8sIG9yIGRlbm9ybWFsLCBvciBleHBvbmVudCB1bmRlcmZsb3dzIHRvbyBtdWNoIGZvciBhIGRlbm9ybWFsXG5cdFx0XHQqIGhhbGYsIHJldHVybiBzaWduZWQgemVyby4gKi9cblx0XHRpZiAoIGUgPCAxMDMgKSByZXR1cm4gYml0cztcblxuXHRcdC8qIElmIE5hTiwgcmV0dXJuIE5hTi4gSWYgSW5mIG9yIGV4cG9uZW50IG92ZXJmbG93LCByZXR1cm4gSW5mLiAqL1xuXHRcdGlmICggZSA+IDE0MiApIHtcblxuXHRcdFx0Yml0cyB8PSAweDdjMDA7XG5cdFx0XHQvKiBJZiBleHBvbmVudCB3YXMgMHhmZiBhbmQgb25lIG1hbnRpc3NhIGJpdCB3YXMgc2V0LCBpdCBtZWFucyBOYU4sXG5cdFx0XHRcdFx0XHQqIG5vdCBJbmYsIHNvIG1ha2Ugc3VyZSB3ZSBzZXQgb25lIG1hbnRpc3NhIGJpdCB0b28uICovXG5cdFx0XHRiaXRzIHw9ICggKCBlID09IDI1NSApID8gMCA6IDEgKSAmJiAoIHggJiAweDAwN2ZmZmZmICk7XG5cdFx0XHRyZXR1cm4gYml0cztcblxuXHRcdH1cblxuXHRcdC8qIElmIGV4cG9uZW50IHVuZGVyZmxvd3MgYnV0IG5vdCB0b28gbXVjaCwgcmV0dXJuIGEgZGVub3JtYWwgKi9cblx0XHRpZiAoIGUgPCAxMTMgKSB7XG5cblx0XHRcdG0gfD0gMHgwODAwO1xuXHRcdFx0LyogRXh0cmEgcm91bmRpbmcgbWF5IG92ZXJmbG93IGFuZCBzZXQgbWFudGlzc2EgdG8gMCBhbmQgZXhwb25lbnRcblx0XHRcdFx0KiB0byAxLCB3aGljaCBpcyBPSy4gKi9cblx0XHRcdGJpdHMgfD0gKCBtID4+ICggMTE0IC0gZSApICkgKyAoICggbSA+PiAoIDExMyAtIGUgKSApICYgMSApO1xuXHRcdFx0cmV0dXJuIGJpdHM7XG5cblx0XHR9XG5cblx0XHRiaXRzIHw9ICggKCBlIC0gMTEyICkgPDwgMTAgKSB8ICggbSA+PiAxICk7XG5cdFx0LyogRXh0cmEgcm91bmRpbmcuIEFuIG92ZXJmbG93IHdpbGwgc2V0IG1hbnRpc3NhIHRvIDAgYW5kIGluY3JlbWVudFxuXHRcdFx0KiB0aGUgZXhwb25lbnQsIHdoaWNoIGlzIE9LLiAqL1xuXHRcdGJpdHMgKz0gbSAmIDE7XG5cdFx0cmV0dXJuIGJpdHM7XG5cblx0fVxuXG59XG5cbmNvbnN0IExpbmVTdHJpcCA9IDA7XG5jb25zdCBMaW5lUGllY2VzID0gMTtcbmNvbnN0IE5vQ29sb3JzID0gMDtcbmNvbnN0IEZhY2VDb2xvcnMgPSAxO1xuY29uc3QgVmVydGV4Q29sb3JzID0gMjtcblxuZnVuY3Rpb24gTWVzaEZhY2VNYXRlcmlhbCggbWF0ZXJpYWxzICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbWF0ZXJpYWxzO1xuXG59XG5cbmZ1bmN0aW9uIE11bHRpTWF0ZXJpYWwoIG1hdGVyaWFscyA9IFtdICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuJyApO1xuXHRtYXRlcmlhbHMuaXNNdWx0aU1hdGVyaWFsID0gdHJ1ZTtcblx0bWF0ZXJpYWxzLm1hdGVyaWFscyA9IG1hdGVyaWFscztcblx0bWF0ZXJpYWxzLmNsb25lID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIG1hdGVyaWFscy5zbGljZSgpO1xuXG5cdH07XG5cblx0cmV0dXJuIG1hdGVyaWFscztcblxufVxuXG5mdW5jdGlvbiBQb2ludENsb3VkKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4nICk7XG5cdHJldHVybiBuZXcgUG9pbnRzKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxufVxuXG5mdW5jdGlvbiBQYXJ0aWNsZSggbWF0ZXJpYWwgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuJyApO1xuXHRyZXR1cm4gbmV3IFNwcml0ZSggbWF0ZXJpYWwgKTtcblxufVxuXG5mdW5jdGlvbiBQYXJ0aWNsZVN5c3RlbSggZ2VvbWV0cnksIG1hdGVyaWFsICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLicgKTtcblx0cmV0dXJuIG5ldyBQb2ludHMoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG59XG5cbmZ1bmN0aW9uIFBvaW50Q2xvdWRNYXRlcmlhbCggcGFyYW1ldGVycyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4nICk7XG5cdHJldHVybiBuZXcgUG9pbnRzTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKTtcblxufVxuXG5mdW5jdGlvbiBQYXJ0aWNsZUJhc2ljTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyApO1xuXHRyZXR1cm4gbmV3IFBvaW50c01hdGVyaWFsKCBwYXJhbWV0ZXJzICk7XG5cbn1cblxuZnVuY3Rpb24gUGFydGljbGVTeXN0ZW1NYXRlcmlhbCggcGFyYW1ldGVycyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyApO1xuXHRyZXR1cm4gbmV3IFBvaW50c01hdGVyaWFsKCBwYXJhbWV0ZXJzICk7XG5cbn1cblxuZnVuY3Rpb24gVmVydGV4KCB4LCB5LCB6ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBWZWN0b3IzKCB4LCB5LCB6ICk7XG5cbn1cblxuLy9cblxuZnVuY3Rpb24gRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkuc2V0VXNhZ2UoIER5bmFtaWNEcmF3VXNhZ2UgKTtcblxufVxuXG5mdW5jdGlvbiBJbnQ4QXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBJbnQ4QnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG5mdW5jdGlvbiBVaW50OEF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBVaW50OEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gVWludDhDbGFtcGVkQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVWludDhDbGFtcGVkQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG5mdW5jdGlvbiBJbnQxNkF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBJbnQxNkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gVWludDE2QXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVWludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG5mdW5jdGlvbiBJbnQzMkF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBJbnQzMkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gVWludDMyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVWludDMyQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG5mdW5jdGlvbiBGbG9hdDMyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG5mdW5jdGlvbiBGbG9hdDY0QXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBGbG9hdDY0QnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKTtcblxufVxuXG4vL1xuXG5DdXJ2ZS5jcmVhdGUgPSBmdW5jdGlvbiAoIGNvbnN0cnVjdCwgZ2V0UG9pbnQgKSB7XG5cblx0Y29uc29sZS5sb2coICdUSFJFRS5DdXJ2ZS5jcmVhdGUoKSBoYXMgYmVlbiBkZXByZWNhdGVkJyApO1xuXG5cdGNvbnN0cnVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTtcblx0Y29uc3RydWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdDtcblx0Y29uc3RydWN0LnByb3RvdHlwZS5nZXRQb2ludCA9IGdldFBvaW50O1xuXG5cdHJldHVybiBjb25zdHJ1Y3Q7XG5cbn07XG5cbi8vXG5cblBhdGgucHJvdG90eXBlLmZyb21Qb2ludHMgPSBmdW5jdGlvbiAoIHBvaW50cyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4nICk7XG5cdHJldHVybiB0aGlzLnNldEZyb21Qb2ludHMoIHBvaW50cyApO1xuXG59O1xuXG4vL1xuXG5mdW5jdGlvbiBBeGlzSGVscGVyKCBzaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLicgKTtcblx0cmV0dXJuIG5ldyBBeGVzSGVscGVyKCBzaXplICk7XG5cbn1cblxuZnVuY3Rpb24gQm91bmRpbmdCb3hIZWxwZXIoIG9iamVjdCwgY29sb3IgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgQm94SGVscGVyKCBvYmplY3QsIGNvbG9yICk7XG5cbn1cblxuZnVuY3Rpb24gRWRnZXNIZWxwZXIoIG9iamVjdCwgaGV4ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IExpbmVTZWdtZW50cyggbmV3IEVkZ2VzR2VvbWV0cnkoIG9iamVjdC5nZW9tZXRyeSApLCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGhleCAhPT0gdW5kZWZpbmVkID8gaGV4IDogMHhmZmZmZmYgfSApICk7XG5cbn1cblxuR3JpZEhlbHBlci5wcm90b3R5cGUuc2V0Q29sb3JzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuJyApO1xuXG59O1xuXG5Ta2VsZXRvbkhlbHBlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4nICk7XG5cbn07XG5cbmZ1bmN0aW9uIFdpcmVmcmFtZUhlbHBlciggb2JqZWN0LCBoZXggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBMaW5lU2VnbWVudHMoIG5ldyBXaXJlZnJhbWVHZW9tZXRyeSggb2JqZWN0Lmdlb21ldHJ5ICksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogaGV4ICE9PSB1bmRlZmluZWQgPyBoZXggOiAweGZmZmZmZiB9ICkgKTtcblxufVxuXG4vL1xuXG5Mb2FkZXIucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlID0gZnVuY3Rpb24gKCB1cmwgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCB1cmwgKTtcblxufTtcblxuTG9hZGVyLkhhbmRsZXJzID0ge1xuXG5cdGFkZDogZnVuY3Rpb24gKCAvKiByZWdleCwgbG9hZGVyICovICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLicgKTtcblxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24gKCAvKiBmaWxlICovICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLicgKTtcblxuXHR9XG5cbn07XG5cbmZ1bmN0aW9uIFhIUkxvYWRlciggbWFuYWdlciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLicgKTtcblx0cmV0dXJuIG5ldyBGaWxlTG9hZGVyKCBtYW5hZ2VyICk7XG5cbn1cblxuZnVuY3Rpb24gQmluYXJ5VGV4dHVyZUxvYWRlciggbWFuYWdlciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuJyApO1xuXHRyZXR1cm4gbmV3IERhdGFUZXh0dXJlTG9hZGVyKCBtYW5hZ2VyICk7XG5cbn1cblxuLy9cblxuQm94Mi5wcm90b3R5cGUuY2VudGVyID0gZnVuY3Rpb24gKCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRDZW50ZXIoIG9wdGlvbmFsVGFyZ2V0ICk7XG5cbn07XG5cbkJveDIucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4nICk7XG5cdHJldHVybiB0aGlzLmlzRW1wdHkoKTtcblxufTtcblxuQm94Mi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3ggPSBmdW5jdGlvbiAoIGJveCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gyOiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KCBib3ggKTtcblxufTtcblxuQm94Mi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRTaXplKCBvcHRpb25hbFRhcmdldCApO1xuXG59O1xuXG4vL1xuXG5Cb3gzLnByb3RvdHlwZS5jZW50ZXIgPSBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldENlbnRlciggb3B0aW9uYWxUYXJnZXQgKTtcblxufTtcblxuQm94My5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLicgKTtcblx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuXG59O1xuXG5Cb3gzLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveCA9IGZ1bmN0aW9uICggYm94ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4nICk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNCb3goIGJveCApO1xuXG59O1xuXG5Cb3gzLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZSA9IGZ1bmN0aW9uICggc3BoZXJlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4nICk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApO1xuXG59O1xuXG5Cb3gzLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldFNpemUoIG9wdGlvbmFsVGFyZ2V0ICk7XG5cbn07XG5cbi8vXG5cblNwaGVyZS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pc0VtcHR5KCk7XG5cbn07XG5cbi8vXG5cbkZydXN0dW0ucHJvdG90eXBlLnNldEZyb21NYXRyaXggPSBmdW5jdGlvbiAoIG0gKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLicgKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoIG0gKTtcblxufTtcblxuLy9cblxuTGluZTMucHJvdG90eXBlLmNlbnRlciA9IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGluZTM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldENlbnRlciggb3B0aW9uYWxUYXJnZXQgKTtcblxufTtcblxuLy9cblxuTWF0cml4My5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQgPSBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB0aGlzLnRvQXJyYXkoIGFycmF5LCBvZmZzZXQgKTtcblxufTtcblxuTWF0cml4My5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzID0gZnVuY3Rpb24gKCB2ZWN0b3IgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDMoIHRoaXMgKTtcblxufTtcblxuTWF0cml4My5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXkgPSBmdW5jdGlvbiAoIC8qIGEgKi8gKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlID0gZnVuY3Rpb24gKCBhdHRyaWJ1dGUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCB0aGlzICk7XG5cbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXkgPSBmdW5jdGlvbiAoIC8qIGFycmF5LCBvZmZzZXQsIGxlbmd0aCAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuTWF0cml4My5wcm90b3R5cGUuZ2V0SW52ZXJzZSA9IGZ1bmN0aW9uICggbWF0cml4ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4nICk7XG5cdHJldHVybiB0aGlzLmNvcHkoIG1hdHJpeCApLmludmVydCgpO1xuXG59O1xuXG4vL1xuXG5NYXRyaXg0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb24gPSBmdW5jdGlvbiAoIG0gKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLicgKTtcblx0cmV0dXJuIHRoaXMuY29weVBvc2l0aW9uKCBtICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0ID0gZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy50b0FycmF5KCBhcnJheSwgb2Zmc2V0ICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhDb2x1bW4oIHRoaXMsIDMgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbiA9IGZ1bmN0aW9uICggcSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjMgPSBmdW5jdGlvbiAoIHZlY3RvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCggdGhpcyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQgPSBmdW5jdGlvbiAoIHZlY3RvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCggdGhpcyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheSA9IGZ1bmN0aW9uICggLyogYSAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZUF4aXMgPSBmdW5jdGlvbiAoIHYgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHR2LnRyYW5zZm9ybURpcmVjdGlvbiggdGhpcyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5jcm9zc1ZlY3RvciA9IGZ1bmN0aW9uICggdmVjdG9yICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoIHRoaXMgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVggPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVkgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVogPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlID0gZnVuY3Rpb24gKCBhdHRyaWJ1dGUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCB0aGlzICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXkgPSBmdW5jdGlvbiAoIC8qIGFycmF5LCBvZmZzZXQsIGxlbmd0aCAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUubWFrZUZydXN0dW0gPSBmdW5jdGlvbiAoIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLmdldEludmVyc2UgPSBmdW5jdGlvbiAoIG1hdHJpeCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTtcblxufTtcblxuLy9cblxuUGxhbmUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZSA9IGZ1bmN0aW9uICggbGluZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzTGluZSggbGluZSApO1xuXG59O1xuXG4vL1xuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjMgPSBmdW5jdGlvbiAoIHZlY3RvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCB0aGlzICk7XG5cbn07XG5cblF1YXRlcm5pb24ucHJvdG90eXBlLmludmVyc2UgPSBmdW5jdGlvbiAoICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4nICk7XG5cdHJldHVybiB0aGlzLmludmVydCgpO1xuXG59O1xuXG4vL1xuXG5SYXkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94ID0gZnVuY3Rpb24gKCBib3ggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KCBib3ggKTtcblxufTtcblxuUmF5LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lID0gZnVuY3Rpb24gKCBwbGFuZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzUGxhbmUoIHBsYW5lICk7XG5cbn07XG5cblJheS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmUgPSBmdW5jdGlvbiAoIHNwaGVyZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4nICk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApO1xuXG59O1xuXG4vL1xuXG5UcmlhbmdsZS5wcm90b3R5cGUuYXJlYSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRBcmVhKCk7XG5cbn07XG5cblRyaWFuZ2xlLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldEJhcnljb29yZCggcG9pbnQsIHRhcmdldCApO1xuXG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUubWlkcG9pbnQgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldE1pZHBvaW50KCB0YXJnZXQgKTtcblxufTtcblxuVHJpYW5nbGUucHJvdG90eXBlbm9ybWFsID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldE5vcm1hbCggdGFyZ2V0ICk7XG5cbn07XG5cblRyaWFuZ2xlLnByb3RvdHlwZS5wbGFuZSA9IGZ1bmN0aW9uICggdGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0UGxhbmUoIHRhcmdldCApO1xuXG59O1xuXG5UcmlhbmdsZS5iYXJ5Y29vcmRGcm9tUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCBhLCBiLCBjLCB0YXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4nICk7XG5cdHJldHVybiBUcmlhbmdsZS5nZXRCYXJ5Y29vcmQoIHBvaW50LCBhLCBiLCBjLCB0YXJnZXQgKTtcblxufTtcblxuVHJpYW5nbGUubm9ybWFsID0gZnVuY3Rpb24gKCBhLCBiLCBjLCB0YXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4nICk7XG5cdHJldHVybiBUcmlhbmdsZS5nZXROb3JtYWwoIGEsIGIsIGMsIHRhcmdldCApO1xuXG59O1xuXG4vL1xuXG5TaGFwZS5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cyA9IGZ1bmN0aW9uICggZGl2aXNpb25zICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy5leHRyYWN0UG9pbnRzKCBkaXZpc2lvbnMgKTtcblxufTtcblxuU2hhcGUucHJvdG90eXBlLmV4dHJ1ZGUgPSBmdW5jdGlvbiAoIG9wdGlvbnMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IEV4dHJ1ZGVHZW9tZXRyeSggdGhpcywgb3B0aW9ucyApO1xuXG59O1xuXG5TaGFwZS5wcm90b3R5cGUubWFrZUdlb21ldHJ5ID0gZnVuY3Rpb24gKCBvcHRpb25zICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBTaGFwZUdlb21ldHJ5KCB0aGlzLCBvcHRpb25zICk7XG5cbn07XG5cbi8vXG5cblZlY3RvcjIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGUgPSBmdW5jdGlvbiAoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7XG5cdHJldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApO1xuXG59O1xuXG5WZWN0b3IyLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuID0gZnVuY3Rpb24gKCB2ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLicgKTtcblx0cmV0dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyggdiApO1xuXG59O1xuXG5WZWN0b3IyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW4gPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLicgKTtcblx0cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCk7XG5cbn07XG5cbi8vXG5cblZlY3RvcjMucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4nICk7XG5cbn07XG5cblZlY3RvcjMucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb24gPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4nICk7XG5cbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeCA9IGZ1bmN0aW9uICggbSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG0gKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4ID0gZnVuY3Rpb24gKCBtICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4nICk7XG5cdHJldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZSggbSApO1xuXG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4ID0gZnVuY3Rpb24gKCBpbmRleCwgbWF0cml4ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLicgKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbWF0cml4LCBpbmRleCApO1xuXG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb24gPSBmdW5jdGlvbiAoIG0gKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggbSApO1xuXG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlID0gZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbiA9IGZ1bmN0aW9uICggdiApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4nICk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oIHYgKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nICk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpO1xuXG59O1xuXG4vL1xuXG5WZWN0b3I0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlID0gZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKTtcblxufTtcblxuVmVjdG9yNC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nICk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpO1xuXG59O1xuXG4vL1xuXG5PYmplY3QzRC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAoIG5hbWUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKCBuYW1lICk7XG5cbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS5yZW5kZXJEZXB0aCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuJyApO1xuXG59O1xuXG5PYmplY3QzRC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKCBkaXN0YW5jZSwgYXhpcyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICk7XG5cbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLicgKTtcblxufTtcblxuT2JqZWN0M0QucHJvdG90eXBlLmFwcGx5TWF0cml4ID0gZnVuY3Rpb24gKCBtYXRyaXggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLicgKTtcblx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE9iamVjdDNELnByb3RvdHlwZSwge1xuXG5cdGV1bGVyT3JkZXI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXI7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuJyApO1xuXHRcdFx0dGhpcy5yb3RhdGlvbi5vcmRlciA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHR1c2VRdWF0ZXJuaW9uOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LicgKTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LicgKTtcblxuXHRcdH1cblx0fVxuXG59ICk7XG5cbk1lc2gucHJvdG90eXBlLnNldERyYXdNb2RlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LicgKTtcblxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1lc2gucHJvdG90eXBlLCB7XG5cblx0ZHJhd01vZGU6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLicgKTtcblx0XHRcdHJldHVybiBUcmlhbmdsZXNEcmF3TW9kZTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4nICk7XG5cblx0XHR9XG5cdH1cblxufSApO1xuXG5Ta2lubmVkTWVzaC5wcm90b3R5cGUuaW5pdEJvbmVzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbi8vXG5cblBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZS5zZXRMZW5zID0gZnVuY3Rpb24gKCBmb2NhbExlbmd0aCwgZmlsbUdhdWdlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gJyArXG5cdFx0XHQnVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuJyApO1xuXG5cdGlmICggZmlsbUdhdWdlICE9PSB1bmRlZmluZWQgKSB0aGlzLmZpbG1HYXVnZSA9IGZpbG1HYXVnZTtcblx0dGhpcy5zZXRGb2NhbExlbmd0aCggZm9jYWxMZW5ndGggKTtcblxufTtcblxuLy9cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIExpZ2h0LnByb3RvdHlwZSwge1xuXHRvbmx5U2hhZG93OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhRm92OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5mb3YgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhTGVmdDoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5sZWZ0ID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYVJpZ2h0OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhVG9wOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS50b3AgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhQm90dG9tOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5ib3R0b20gPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhTmVhcjoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUZhcjoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuZmFyID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYVZpc2libGU6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0JpYXM6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLicgKTtcblx0XHRcdHRoaXMuc2hhZG93LmJpYXMgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93RGFya25lc3M6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH1cblx0fSxcblx0c2hhZG93TWFwV2lkdGg6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcEhlaWdodDoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuJyApO1xuXHRcdFx0dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQgPSB2YWx1ZTtcblxuXHRcdH1cblx0fVxufSApO1xuXG4vL1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSwge1xuXG5cdGxlbmd0aDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmFycmF5Lmxlbmd0aDtcblxuXHRcdH1cblx0fSxcblx0ZHluYW1pYzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy51c2FnZSA9PT0gRHluYW1pY0RyYXdVc2FnZTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIC8qIHZhbHVlICovICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4nICk7XG5cdFx0XHR0aGlzLnNldFVzYWdlKCBEeW5hbWljRHJhd1VzYWdlICk7XG5cblx0XHR9XG5cdH1cblxufSApO1xuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLnNldER5bmFtaWMgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4nICk7XG5cdHRoaXMuc2V0VXNhZ2UoIHZhbHVlID09PSB0cnVlID8gRHluYW1pY0RyYXdVc2FnZSA6IFN0YXRpY0RyYXdVc2FnZSApO1xuXHRyZXR1cm4gdGhpcztcblxufTtcblxuQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5ID0gZnVuY3Rpb24gKCAvKiBpbmRpY2VzICovICkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn0sXG5cbkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuc2V0QXJyYXkgPSBmdW5jdGlvbiAoIC8qIGFycmF5ICovICkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycycgKTtcblxufTtcblxuLy9cblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24gKCBpbmRleCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4nICk7XG5cdHRoaXMuc2V0SW5kZXgoIGluZGV4ICk7XG5cbn07XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoIG5hbWUsIGF0dHJpYnV0ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLicgKTtcblxuXHRpZiAoICEgKCBhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmlzQnVmZmVyQXR0cmlidXRlICkgJiYgISAoIGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLicgKTtcblxuXHRcdHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSggbmFtZSwgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggYXJndW1lbnRzWyAxIF0sIGFyZ3VtZW50c1sgMiBdICkgKTtcblxuXHR9XG5cblx0aWYgKCBuYW1lID09PSAnaW5kZXgnICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4nICk7XG5cdFx0dGhpcy5zZXRJbmRleCggYXR0cmlidXRlICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCBuYW1lLCBhdHRyaWJ1dGUgKTtcblxufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFkZERyYXdDYWxsID0gZnVuY3Rpb24gKCBzdGFydCwgY291bnQsIGluZGV4T2Zmc2V0ICkge1xuXG5cdGlmICggaW5kZXhPZmZzZXQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuJyApO1xuXG5cdH1cblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLicgKTtcblx0dGhpcy5hZGRHcm91cCggc3RhcnQsIGNvdW50ICk7XG5cbn07XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jbGVhckRyYXdDYWxscyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLicgKTtcblx0dGhpcy5jbGVhckdyb3VwcygpO1xuXG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gKCBuYW1lICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuJyApO1xuXG5cdHJldHVybiB0aGlzLmRlbGV0ZUF0dHJpYnV0ZSggbmFtZSApO1xuXG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuYXBwbHlNYXRyaXggPSBmdW5jdGlvbiAoIG1hdHJpeCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIG1hdHJpeCApO1xuXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLCB7XG5cblx0ZHJhd2NhbGxzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuZ3JvdXBzO1xuXG5cdFx0fVxuXHR9LFxuXHRvZmZzZXRzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuZ3JvdXBzO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLnNldER5bmFtaWMgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLicgKTtcblx0dGhpcy5zZXRVc2FnZSggdmFsdWUgPT09IHRydWUgPyBEeW5hbWljRHJhd1VzYWdlIDogU3RhdGljRHJhd1VzYWdlICk7XG5cdHJldHVybiB0aGlzO1xuXG59O1xuXG5JbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuc2V0QXJyYXkgPSBmdW5jdGlvbiAoIC8qIGFycmF5ICovICkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzJyApO1xuXG59O1xuXG4vL1xuXG5FeHRydWRlR2VvbWV0cnkucHJvdG90eXBlLmdldEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbkV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUuYWRkU2hhcGVMaXN0ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuRXh0cnVkZUdlb21ldHJ5LnByb3RvdHlwZS5hZGRTaGFwZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuLy9cblxuU2NlbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG4vL1xuXG5Vbmlmb3JtLnByb3RvdHlwZS5vblVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB0aGlzO1xuXG59O1xuXG4vL1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggTWF0ZXJpYWwucHJvdG90eXBlLCB7XG5cblx0d3JhcEFyb3VuZDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cblx0b3ZlcmRyYXc6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cblx0d3JhcFJHQjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cdFx0XHRyZXR1cm4gbmV3IENvbG9yKCk7XG5cblx0XHR9XG5cdH0sXG5cblx0c2hhZGluZzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4nICk7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4nICk7XG5cdFx0XHR0aGlzLmZsYXRTaGFkaW5nID0gKCB2YWx1ZSA9PT0gRmxhdFNoYWRpbmcgKTtcblxuXHRcdH1cblx0fSxcblxuXHRzdGVuY2lsTWFzazoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RlbmNpbEZ1bmNNYXNrO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4nICk7XG5cdFx0XHR0aGlzLnN0ZW5jaWxGdW5jTWFzayA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXG5cdHZlcnRleFRhbmdlbnRzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXG59ICk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUsIHtcblxuXHRkZXJpdmF0aXZlczoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuJyApO1xuXHRcdFx0dGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzID0gdmFsdWU7XG5cblx0XHR9XG5cdH1cblxufSApO1xuXG4vL1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jbGVhclRhcmdldCA9IGZ1bmN0aW9uICggcmVuZGVyVGFyZ2V0LCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4nICk7XG5cdHRoaXMuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKTtcblx0dGhpcy5jbGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAoIGNhbGxiYWNrICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuJyApO1xuXHR0aGlzLnNldEFuaW1hdGlvbkxvb3AoIGNhbGxiYWNrICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHkgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRQcmVjaXNpb24gPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4nICk7XG5cdHJldHVybiB0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb247XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0R0xTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLicgKTtcblx0cmV0dXJuIHRoaXMuc3RhdGUucmVzZXQoKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfdGV4dHVyZV9mbG9hdFxcJyApLicgKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y1xcJyApLicgKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGNcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnRVhUX2JsZW5kX21pbm1heFxcJyApLicgKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuJyApO1xuXHRyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXM7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ0FOR0xFX2luc3RhbmNlZF9hcnJheXNcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoIGJvb2xlYW4gKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLicgKTtcblx0dGhpcy5zZXRTY2lzc29yVGVzdCggYm9vbGVhbiApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5pbml0TWF0ZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hZGRQcmVQbHVnaW4gPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc2V0VGV4dHVyZTJEID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCk7XG5cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBXZWJHTFJlbmRlcmVyLnByb3RvdHlwZSwge1xuXG5cdHNoYWRvd01hcEVuYWJsZWQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4nICk7XG5cdFx0XHR0aGlzLnNoYWRvd01hcC5lbmFibGVkID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcFR5cGU6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGU7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4nICk7XG5cdFx0XHR0aGlzLnNoYWRvd01hcC50eXBlID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcEN1bGxGYWNlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCAvKiB2YWx1ZSAqLyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXHRjb250ZXh0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29udGV4dCgpO1xuXG5cdFx0fVxuXHR9LFxuXHR2cjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHInICk7XG5cdFx0XHRyZXR1cm4gdGhpcy54cjtcblxuXHRcdH1cblx0fSxcblx0Z2FtbWFJbnB1dDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXHRnYW1tYU91dHB1dDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuJyApO1xuXHRcdFx0dGhpcy5vdXRwdXRFbmNvZGluZyA9ICggdmFsdWUgPT09IHRydWUgKSA/IHNSR0JFbmNvZGluZyA6IExpbmVhckVuY29kaW5nO1xuXG5cdFx0fVxuXHR9LFxuXHR0b25lTWFwcGluZ1doaXRlUG9pbnQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLicgKTtcblx0XHRcdHJldHVybiAxLjA7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXHRnYW1tYUZhY3Rvcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cdFx0XHRyZXR1cm4gMjtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH1cblx0fVxufSApO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggV2ViR0xTaGFkb3dNYXAucHJvdG90eXBlLCB7XG5cblx0Y3VsbEZhY2U6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCAvKiBjdWxsRmFjZSAqLyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblx0fSxcblx0cmVuZGVyUmV2ZXJzZVNpZGVkOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXHRyZW5kZXJTaW5nbGVTaWRlZDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cdH1cblxufSApO1xuXG5mdW5jdGlvbiBXZWJHTFJlbmRlclRhcmdldEN1YmUoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLicgKTtcblx0cmV0dXJuIG5ldyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHdpZHRoLCBvcHRpb25zICk7XG5cbn1cblxuLy9cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFdlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZSwge1xuXG5cdHdyYXBTOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUud3JhcFM7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLndyYXBTID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHdyYXBUOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUud3JhcFQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLndyYXBUID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdG1hZ0ZpbHRlcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUubWFnRmlsdGVyO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLm1hZ0ZpbHRlciA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRtaW5GaWx0ZXI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLm1pbkZpbHRlcjtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS5taW5GaWx0ZXIgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0YW5pc290cm9weToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5O1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4nICk7XG5cdFx0XHR0aGlzLnRleHR1cmUuYW5pc290cm9weSA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRvZmZzZXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldDtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS5vZmZzZXQgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0cmVwZWF0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5yZXBlYXQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4nICk7XG5cdFx0XHR0aGlzLnRleHR1cmUucmVwZWF0ID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdGZvcm1hdDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUuZm9ybWF0O1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLmZvcm1hdCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHR0eXBlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLnR5cGU7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS50eXBlID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdGdlbmVyYXRlTWlwbWFwczoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuLy9cblxuQXVkaW8ucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoIGZpbGUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLicgKTtcblx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRjb25zdCBhdWRpb0xvYWRlciA9IG5ldyBBdWRpb0xvYWRlcigpO1xuXHRhdWRpb0xvYWRlci5sb2FkKCBmaWxlLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHtcblxuXHRcdHNjb3BlLnNldEJ1ZmZlciggYnVmZmVyICk7XG5cblx0fSApO1xuXHRyZXR1cm4gdGhpcztcblxufTtcblxuXG5BdWRpb0FuYWx5c2VyLnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7XG5cbn07XG5cbi8vXG5cbkN1YmVDYW1lcmEucHJvdG90eXBlLnVwZGF0ZUN1YmVNYXAgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzY2VuZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5DdWJlQ2FtZXJhOiAudXBkYXRlQ3ViZU1hcCgpIGlzIG5vdyAudXBkYXRlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy51cGRhdGUoIHJlbmRlcmVyLCBzY2VuZSApO1xuXG59O1xuXG5DdWJlQ2FtZXJhLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICggcmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLicgKTtcblx0cmV0dXJuIHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKCByZW5kZXJlciwgY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7XG5cbn07XG5cbkltYWdlVXRpbHMuY3Jvc3NPcmlnaW4gPSB1bmRlZmluZWQ7XG5cbkltYWdlVXRpbHMubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAoIHVybCwgbWFwcGluZywgb25Mb2FkLCBvbkVycm9yICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLicgKTtcblxuXHRjb25zdCBsb2FkZXIgPSBuZXcgVGV4dHVyZUxvYWRlcigpO1xuXHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTtcblxuXHRjb25zdCB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIHVybCwgb25Mb2FkLCB1bmRlZmluZWQsIG9uRXJyb3IgKTtcblxuXHRpZiAoIG1hcHBpbmcgKSB0ZXh0dXJlLm1hcHBpbmcgPSBtYXBwaW5nO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xuXG59O1xuXG5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSA9IGZ1bmN0aW9uICggdXJscywgbWFwcGluZywgb25Mb2FkLCBvbkVycm9yICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuJyApO1xuXG5cdGNvbnN0IGxvYWRlciA9IG5ldyBDdWJlVGV4dHVyZUxvYWRlcigpO1xuXHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTtcblxuXHRjb25zdCB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIHVybHMsIG9uTG9hZCwgdW5kZWZpbmVkLCBvbkVycm9yICk7XG5cblx0aWYgKCBtYXBwaW5nICkgdGV4dHVyZS5tYXBwaW5nID0gbWFwcGluZztcblxuXHRyZXR1cm4gdGV4dHVyZTtcblxufTtcblxuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4nICk7XG5cbn07XG5cbkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4nICk7XG5cbn07XG5cbi8vXG5cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkJyApO1xuXG59XG5cbi8vXG5cbmZ1bmN0aW9uIEpTT05Mb2FkZXIoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkpTT05Mb2FkZXIgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn1cblxuLy9cblxuY29uc3QgU2NlbmVVdGlscyA9IHtcblxuXHRjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OiBmdW5jdGlvbiAoIC8qIGdlb21ldHJ5LCBtYXRlcmlhbHMgKi8gKSB7XG5cblx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMnICk7XG5cblx0fSxcblxuXHRkZXRhY2g6IGZ1bmN0aW9uICggLyogY2hpbGQsIHBhcmVudCwgc2NlbmUgKi8gKSB7XG5cblx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMnICk7XG5cblx0fSxcblxuXHRhdHRhY2g6IGZ1bmN0aW9uICggLyogY2hpbGQsIHNjZW5lLCBwYXJlbnQgKi8gKSB7XG5cblx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMnICk7XG5cblx0fVxuXG59O1xuXG4vL1xuXG5mdW5jdGlvbiBMZW5zRmxhcmUoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxlbnNGbGFyZSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL29iamVjdHMvTGVuc2ZsYXJlLmpzJyApO1xuXG59XG5cbi8vXG5cbmZ1bmN0aW9uIFBhcmFtZXRyaWNHZW9tZXRyeSgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9QYXJhbWV0cmljR2VvbWV0cnkuanMnICk7XG5cdHJldHVybiBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblxufVxuXG5mdW5jdGlvbiBUZXh0R2VvbWV0cnkoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlRleHRHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5LmpzJyApO1xuXHRyZXR1cm4gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cbn1cblxuZnVuY3Rpb24gRm9udExvYWRlcigpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcycgKTtcblxufVxuXG5mdW5jdGlvbiBGb250KCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Gb250IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vbG9hZGVycy9Gb250TG9hZGVyLmpzJyApO1xuXG59XG5cbmZ1bmN0aW9uIEltbWVkaWF0ZVJlbmRlck9iamVjdCgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuSW1tZWRpYXRlUmVuZGVyT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59XG5cbmlmICggdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0X19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3JlZ2lzdGVyJywgeyBkZXRhaWw6IHtcblx0XHRyZXZpc2lvbjogUkVWSVNJT04sXG5cdH0gfSApICk7XG5cbn1cblxuaWYgKCB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyApIHtcblxuXHRpZiAoIHdpbmRvdy5fX1RIUkVFX18gKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuJyApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHR3aW5kb3cuX19USFJFRV9fID0gUkVWSVNJT047XG5cblx0fVxuXG59XG5cbmV4cG9ydCB7IEFDRVNGaWxtaWNUb25lTWFwcGluZywgQWRkRXF1YXRpb24sIEFkZE9wZXJhdGlvbiwgQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUsIEFkZGl0aXZlQmxlbmRpbmcsIEFscGhhRm9ybWF0LCBBbHdheXNEZXB0aCwgQWx3YXlzU3RlbmNpbEZ1bmMsIEFtYmllbnRMaWdodCwgQW1iaWVudExpZ2h0UHJvYmUsIEFuaW1hdGlvbkNsaXAsIEFuaW1hdGlvbkxvYWRlciwgQW5pbWF0aW9uTWl4ZXIsIEFuaW1hdGlvbk9iamVjdEdyb3VwLCBBbmltYXRpb25VdGlscywgQXJjQ3VydmUsIEFycmF5Q2FtZXJhLCBBcnJvd0hlbHBlciwgQXVkaW8sIEF1ZGlvQW5hbHlzZXIsIEF1ZGlvQ29udGV4dCwgQXVkaW9MaXN0ZW5lciwgQXVkaW9Mb2FkZXIsIEF4ZXNIZWxwZXIsIEF4aXNIZWxwZXIsIEJhY2tTaWRlLCBCYXNpY0RlcHRoUGFja2luZywgQmFzaWNTaGFkb3dNYXAsIEJpbmFyeVRleHR1cmVMb2FkZXIsIEJvbmUsIEJvb2xlYW5LZXlmcmFtZVRyYWNrLCBCb3VuZGluZ0JveEhlbHBlciwgQm94MiwgQm94MywgQm94M0hlbHBlciwgQm94R2VvbWV0cnkgYXMgQm94QnVmZmVyR2VvbWV0cnksIEJveEdlb21ldHJ5LCBCb3hIZWxwZXIsIEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnksIEJ1ZmZlckdlb21ldHJ5TG9hZGVyLCBCeXRlVHlwZSwgQ2FjaGUsIENhbWVyYSwgQ2FtZXJhSGVscGVyLCBDYW52YXNSZW5kZXJlciwgQ2FudmFzVGV4dHVyZSwgQ2F0bXVsbFJvbUN1cnZlMywgQ2luZW9uVG9uZU1hcHBpbmcsIENpcmNsZUdlb21ldHJ5IGFzIENpcmNsZUJ1ZmZlckdlb21ldHJ5LCBDaXJjbGVHZW9tZXRyeSwgQ2xhbXBUb0VkZ2VXcmFwcGluZywgQ2xvY2ssIENvbG9yLCBDb2xvcktleWZyYW1lVHJhY2ssIENvbXByZXNzZWRUZXh0dXJlLCBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciwgQ29uZUdlb21ldHJ5IGFzIENvbmVCdWZmZXJHZW9tZXRyeSwgQ29uZUdlb21ldHJ5LCBDdWJlQ2FtZXJhLCBDdWJlUmVmbGVjdGlvbk1hcHBpbmcsIEN1YmVSZWZyYWN0aW9uTWFwcGluZywgQ3ViZVRleHR1cmUsIEN1YmVUZXh0dXJlTG9hZGVyLCBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZywgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmcsIEN1YmljQmV6aWVyQ3VydmUsIEN1YmljQmV6aWVyQ3VydmUzLCBDdWJpY0ludGVycG9sYW50LCBDdWxsRmFjZUJhY2ssIEN1bGxGYWNlRnJvbnQsIEN1bGxGYWNlRnJvbnRCYWNrLCBDdWxsRmFjZU5vbmUsIEN1cnZlLCBDdXJ2ZVBhdGgsIEN1c3RvbUJsZW5kaW5nLCBDdXN0b21Ub25lTWFwcGluZywgQ3lsaW5kZXJHZW9tZXRyeSBhcyBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5LCBDeWxpbmRlckdlb21ldHJ5LCBDeWxpbmRyaWNhbCwgRGF0YVRleHR1cmUsIERhdGFUZXh0dXJlMkRBcnJheSwgRGF0YVRleHR1cmUzRCwgRGF0YVRleHR1cmVMb2FkZXIsIERhdGFVdGlscywgRGVjcmVtZW50U3RlbmNpbE9wLCBEZWNyZW1lbnRXcmFwU3RlbmNpbE9wLCBEZWZhdWx0TG9hZGluZ01hbmFnZXIsIERlcHRoRm9ybWF0LCBEZXB0aFN0ZW5jaWxGb3JtYXQsIERlcHRoVGV4dHVyZSwgRGlyZWN0aW9uYWxMaWdodCwgRGlyZWN0aW9uYWxMaWdodEhlbHBlciwgRGlzY3JldGVJbnRlcnBvbGFudCwgRG9kZWNhaGVkcm9uR2VvbWV0cnkgYXMgRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnksIERvZGVjYWhlZHJvbkdlb21ldHJ5LCBEb3VibGVTaWRlLCBEc3RBbHBoYUZhY3RvciwgRHN0Q29sb3JGYWN0b3IsIER5bmFtaWNCdWZmZXJBdHRyaWJ1dGUsIER5bmFtaWNDb3B5VXNhZ2UsIER5bmFtaWNEcmF3VXNhZ2UsIER5bmFtaWNSZWFkVXNhZ2UsIEVkZ2VzR2VvbWV0cnksIEVkZ2VzSGVscGVyLCBFbGxpcHNlQ3VydmUsIEVxdWFsRGVwdGgsIEVxdWFsU3RlbmNpbEZ1bmMsIEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nLCBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZywgRXVsZXIsIEV2ZW50RGlzcGF0Y2hlciwgRXh0cnVkZUdlb21ldHJ5IGFzIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSwgRXh0cnVkZUdlb21ldHJ5LCBGYWNlQ29sb3JzLCBGaWxlTG9hZGVyLCBGbGF0U2hhZGluZywgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSwgRmxvYXQzMkF0dHJpYnV0ZSwgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSwgRmxvYXQ2NEF0dHJpYnV0ZSwgRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSwgRmxvYXRUeXBlLCBGb2csIEZvZ0V4cDIsIEZvbnQsIEZvbnRMb2FkZXIsIEZyYW1lYnVmZmVyVGV4dHVyZSwgRnJvbnRTaWRlLCBGcnVzdHVtLCBHTEJ1ZmZlckF0dHJpYnV0ZSwgR0xTTDEsIEdMU0wzLCBHcmVhdGVyRGVwdGgsIEdyZWF0ZXJFcXVhbERlcHRoLCBHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYywgR3JlYXRlclN0ZW5jaWxGdW5jLCBHcmlkSGVscGVyLCBHcm91cCwgSGFsZkZsb2F0VHlwZSwgSGVtaXNwaGVyZUxpZ2h0LCBIZW1pc3BoZXJlTGlnaHRIZWxwZXIsIEhlbWlzcGhlcmVMaWdodFByb2JlLCBJY29zYWhlZHJvbkdlb21ldHJ5IGFzIEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnksIEljb3NhaGVkcm9uR2VvbWV0cnksIEltYWdlQml0bWFwTG9hZGVyLCBJbWFnZUxvYWRlciwgSW1hZ2VVdGlscywgSW1tZWRpYXRlUmVuZGVyT2JqZWN0LCBJbmNyZW1lbnRTdGVuY2lsT3AsIEluY3JlbWVudFdyYXBTdGVuY2lsT3AsIEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSwgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnksIEluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyLCBJbnN0YW5jZWRNZXNoLCBJbnQxNkF0dHJpYnV0ZSwgSW50MTZCdWZmZXJBdHRyaWJ1dGUsIEludDMyQXR0cmlidXRlLCBJbnQzMkJ1ZmZlckF0dHJpYnV0ZSwgSW50OEF0dHJpYnV0ZSwgSW50OEJ1ZmZlckF0dHJpYnV0ZSwgSW50VHlwZSwgSW50ZXJsZWF2ZWRCdWZmZXIsIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLCBJbnRlcnBvbGFudCwgSW50ZXJwb2xhdGVEaXNjcmV0ZSwgSW50ZXJwb2xhdGVMaW5lYXIsIEludGVycG9sYXRlU21vb3RoLCBJbnZlcnRTdGVuY2lsT3AsIEpTT05Mb2FkZXIsIEtlZXBTdGVuY2lsT3AsIEtleWZyYW1lVHJhY2ssIExPRCwgTGF0aGVHZW9tZXRyeSBhcyBMYXRoZUJ1ZmZlckdlb21ldHJ5LCBMYXRoZUdlb21ldHJ5LCBMYXllcnMsIExlbnNGbGFyZSwgTGVzc0RlcHRoLCBMZXNzRXF1YWxEZXB0aCwgTGVzc0VxdWFsU3RlbmNpbEZ1bmMsIExlc3NTdGVuY2lsRnVuYywgTGlnaHQsIExpZ2h0UHJvYmUsIExpbmUsIExpbmUzLCBMaW5lQmFzaWNNYXRlcmlhbCwgTGluZUN1cnZlLCBMaW5lQ3VydmUzLCBMaW5lRGFzaGVkTWF0ZXJpYWwsIExpbmVMb29wLCBMaW5lUGllY2VzLCBMaW5lU2VnbWVudHMsIExpbmVTdHJpcCwgTGluZWFyRW5jb2RpbmcsIExpbmVhckZpbHRlciwgTGluZWFySW50ZXJwb2xhbnQsIExpbmVhck1pcE1hcExpbmVhckZpbHRlciwgTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlciwgTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyLCBMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyLCBMaW5lYXJUb25lTWFwcGluZywgTG9hZGVyLCBMb2FkZXJVdGlscywgTG9hZGluZ01hbmFnZXIsIExvb3BPbmNlLCBMb29wUGluZ1BvbmcsIExvb3BSZXBlYXQsIEx1bWluYW5jZUFscGhhRm9ybWF0LCBMdW1pbmFuY2VGb3JtYXQsIE1PVVNFLCBNYXRlcmlhbCwgTWF0ZXJpYWxMb2FkZXIsIE1hdGhVdGlscyBhcyBNYXRoLCBNYXRoVXRpbHMsIE1hdHJpeDMsIE1hdHJpeDQsIE1heEVxdWF0aW9uLCBNZXNoLCBNZXNoQmFzaWNNYXRlcmlhbCwgTWVzaERlcHRoTWF0ZXJpYWwsIE1lc2hEaXN0YW5jZU1hdGVyaWFsLCBNZXNoRmFjZU1hdGVyaWFsLCBNZXNoTGFtYmVydE1hdGVyaWFsLCBNZXNoTWF0Y2FwTWF0ZXJpYWwsIE1lc2hOb3JtYWxNYXRlcmlhbCwgTWVzaFBob25nTWF0ZXJpYWwsIE1lc2hQaHlzaWNhbE1hdGVyaWFsLCBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgTWVzaFRvb25NYXRlcmlhbCwgTWluRXF1YXRpb24sIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmcsIE1peE9wZXJhdGlvbiwgTXVsdGlNYXRlcmlhbCwgTXVsdGlwbHlCbGVuZGluZywgTXVsdGlwbHlPcGVyYXRpb24sIE5lYXJlc3RGaWx0ZXIsIE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIsIE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyLCBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyLCBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlciwgTmV2ZXJEZXB0aCwgTmV2ZXJTdGVuY2lsRnVuYywgTm9CbGVuZGluZywgTm9Db2xvcnMsIE5vVG9uZU1hcHBpbmcsIE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSwgTm9ybWFsQmxlbmRpbmcsIE5vdEVxdWFsRGVwdGgsIE5vdEVxdWFsU3RlbmNpbEZ1bmMsIE51bWJlcktleWZyYW1lVHJhY2ssIE9iamVjdDNELCBPYmplY3RMb2FkZXIsIE9iamVjdFNwYWNlTm9ybWFsTWFwLCBPY3RhaGVkcm9uR2VvbWV0cnkgYXMgT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5LCBPY3RhaGVkcm9uR2VvbWV0cnksIE9uZUZhY3RvciwgT25lTWludXNEc3RBbHBoYUZhY3RvciwgT25lTWludXNEc3RDb2xvckZhY3RvciwgT25lTWludXNTcmNBbHBoYUZhY3RvciwgT25lTWludXNTcmNDb2xvckZhY3RvciwgT3J0aG9ncmFwaGljQ2FtZXJhLCBQQ0ZTaGFkb3dNYXAsIFBDRlNvZnRTaGFkb3dNYXAsIFBNUkVNR2VuZXJhdG9yLCBQYXJhbWV0cmljR2VvbWV0cnksIFBhcnRpY2xlLCBQYXJ0aWNsZUJhc2ljTWF0ZXJpYWwsIFBhcnRpY2xlU3lzdGVtLCBQYXJ0aWNsZVN5c3RlbU1hdGVyaWFsLCBQYXRoLCBQZXJzcGVjdGl2ZUNhbWVyYSwgUGxhbmUsIFBsYW5lR2VvbWV0cnkgYXMgUGxhbmVCdWZmZXJHZW9tZXRyeSwgUGxhbmVHZW9tZXRyeSwgUGxhbmVIZWxwZXIsIFBvaW50Q2xvdWQsIFBvaW50Q2xvdWRNYXRlcmlhbCwgUG9pbnRMaWdodCwgUG9pbnRMaWdodEhlbHBlciwgUG9pbnRzLCBQb2ludHNNYXRlcmlhbCwgUG9sYXJHcmlkSGVscGVyLCBQb2x5aGVkcm9uR2VvbWV0cnkgYXMgUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5LCBQb2x5aGVkcm9uR2VvbWV0cnksIFBvc2l0aW9uYWxBdWRpbywgUHJvcGVydHlCaW5kaW5nLCBQcm9wZXJ0eU1peGVyLCBRdWFkcmF0aWNCZXppZXJDdXJ2ZSwgUXVhZHJhdGljQmV6aWVyQ3VydmUzLCBRdWF0ZXJuaW9uLCBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaywgUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50LCBSRVZJU0lPTiwgUkdCQURlcHRoUGFja2luZywgUkdCQUZvcm1hdCwgUkdCQUludGVnZXJGb3JtYXQsIFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQsIFJHQkFfQVNUQ18xMHg1X0Zvcm1hdCwgUkdCQV9BU1RDXzEweDZfRm9ybWF0LCBSR0JBX0FTVENfMTB4OF9Gb3JtYXQsIFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQsIFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQsIFJHQkFfQVNUQ180eDRfRm9ybWF0LCBSR0JBX0FTVENfNXg0X0Zvcm1hdCwgUkdCQV9BU1RDXzV4NV9Gb3JtYXQsIFJHQkFfQVNUQ182eDVfRm9ybWF0LCBSR0JBX0FTVENfNng2X0Zvcm1hdCwgUkdCQV9BU1RDXzh4NV9Gb3JtYXQsIFJHQkFfQVNUQ184eDZfRm9ybWF0LCBSR0JBX0FTVENfOHg4X0Zvcm1hdCwgUkdCQV9CUFRDX0Zvcm1hdCwgUkdCQV9FVEMyX0VBQ19Gb3JtYXQsIFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCwgUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0LCBSR0JBX1MzVENfRFhUMV9Gb3JtYXQsIFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCwgUkdCQV9TM1RDX0RYVDVfRm9ybWF0LCBSR0JfRVRDMV9Gb3JtYXQsIFJHQl9FVEMyX0Zvcm1hdCwgUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQsIFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0LCBSR0JfUzNUQ19EWFQxX0Zvcm1hdCwgUkdGb3JtYXQsIFJHSW50ZWdlckZvcm1hdCwgUmF3U2hhZGVyTWF0ZXJpYWwsIFJheSwgUmF5Y2FzdGVyLCBSZWN0QXJlYUxpZ2h0LCBSZWRGb3JtYXQsIFJlZEludGVnZXJGb3JtYXQsIFJlaW5oYXJkVG9uZU1hcHBpbmcsIFJlcGVhdFdyYXBwaW5nLCBSZXBsYWNlU3RlbmNpbE9wLCBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbiwgUmluZ0dlb21ldHJ5IGFzIFJpbmdCdWZmZXJHZW9tZXRyeSwgUmluZ0dlb21ldHJ5LCBTY2VuZSwgU2NlbmVVdGlscywgU2hhZGVyQ2h1bmssIFNoYWRlckxpYiwgU2hhZGVyTWF0ZXJpYWwsIFNoYWRvd01hdGVyaWFsLCBTaGFwZSwgU2hhcGVHZW9tZXRyeSBhcyBTaGFwZUJ1ZmZlckdlb21ldHJ5LCBTaGFwZUdlb21ldHJ5LCBTaGFwZVBhdGgsIFNoYXBlVXRpbHMsIFNob3J0VHlwZSwgU2tlbGV0b24sIFNrZWxldG9uSGVscGVyLCBTa2lubmVkTWVzaCwgU21vb3RoU2hhZGluZywgU3BoZXJlLCBTcGhlcmVHZW9tZXRyeSBhcyBTcGhlcmVCdWZmZXJHZW9tZXRyeSwgU3BoZXJlR2VvbWV0cnksIFNwaGVyaWNhbCwgU3BoZXJpY2FsSGFybW9uaWNzMywgU3BsaW5lQ3VydmUsIFNwb3RMaWdodCwgU3BvdExpZ2h0SGVscGVyLCBTcHJpdGUsIFNwcml0ZU1hdGVyaWFsLCBTcmNBbHBoYUZhY3RvciwgU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciwgU3JjQ29sb3JGYWN0b3IsIFN0YXRpY0NvcHlVc2FnZSwgU3RhdGljRHJhd1VzYWdlLCBTdGF0aWNSZWFkVXNhZ2UsIFN0ZXJlb0NhbWVyYSwgU3RyZWFtQ29weVVzYWdlLCBTdHJlYW1EcmF3VXNhZ2UsIFN0cmVhbVJlYWRVc2FnZSwgU3RyaW5nS2V5ZnJhbWVUcmFjaywgU3VidHJhY3RFcXVhdGlvbiwgU3VidHJhY3RpdmVCbGVuZGluZywgVE9VQ0gsIFRhbmdlbnRTcGFjZU5vcm1hbE1hcCwgVGV0cmFoZWRyb25HZW9tZXRyeSBhcyBUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5LCBUZXRyYWhlZHJvbkdlb21ldHJ5LCBUZXh0R2VvbWV0cnksIFRleHR1cmUsIFRleHR1cmVMb2FkZXIsIFRvcnVzR2VvbWV0cnkgYXMgVG9ydXNCdWZmZXJHZW9tZXRyeSwgVG9ydXNHZW9tZXRyeSwgVG9ydXNLbm90R2VvbWV0cnkgYXMgVG9ydXNLbm90QnVmZmVyR2VvbWV0cnksIFRvcnVzS25vdEdlb21ldHJ5LCBUcmlhbmdsZSwgVHJpYW5nbGVGYW5EcmF3TW9kZSwgVHJpYW5nbGVTdHJpcERyYXdNb2RlLCBUcmlhbmdsZXNEcmF3TW9kZSwgVHViZUdlb21ldHJ5IGFzIFR1YmVCdWZmZXJHZW9tZXRyeSwgVHViZUdlb21ldHJ5LCBVVk1hcHBpbmcsIFVpbnQxNkF0dHJpYnV0ZSwgVWludDE2QnVmZmVyQXR0cmlidXRlLCBVaW50MzJBdHRyaWJ1dGUsIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSwgVWludDhBdHRyaWJ1dGUsIFVpbnQ4QnVmZmVyQXR0cmlidXRlLCBVaW50OENsYW1wZWRBdHRyaWJ1dGUsIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSwgVW5pZm9ybSwgVW5pZm9ybXNMaWIsIFVuaWZvcm1zVXRpbHMsIFVuc2lnbmVkQnl0ZVR5cGUsIFVuc2lnbmVkSW50MjQ4VHlwZSwgVW5zaWduZWRJbnRUeXBlLCBVbnNpZ25lZFNob3J0NDQ0NFR5cGUsIFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSwgVW5zaWduZWRTaG9ydFR5cGUsIFZTTVNoYWRvd01hcCwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCwgVmVjdG9yS2V5ZnJhbWVUcmFjaywgVmVydGV4LCBWZXJ0ZXhDb2xvcnMsIFZpZGVvVGV4dHVyZSwgV2ViR0wxUmVuZGVyZXIsIFdlYkdMQ3ViZVJlbmRlclRhcmdldCwgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsIFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQsIFdlYkdMUmVuZGVyVGFyZ2V0LCBXZWJHTFJlbmRlclRhcmdldEN1YmUsIFdlYkdMUmVuZGVyZXIsIFdlYkdMVXRpbHMsIFdpcmVmcmFtZUdlb21ldHJ5LCBXaXJlZnJhbWVIZWxwZXIsIFdyYXBBcm91bmRFbmRpbmcsIFhIUkxvYWRlciwgWmVyb0N1cnZhdHVyZUVuZGluZywgWmVyb0ZhY3RvciwgWmVyb1Nsb3BlRW5kaW5nLCBaZXJvU3RlbmNpbE9wLCBfU1JHQkFGb3JtYXQsIHNSR0JFbmNvZGluZyB9O1xuIiwiaW1wb3J0IHtcblx0RXZlbnREaXNwYXRjaGVyLFxuXHRNT1VTRSxcblx0UXVhdGVybmlvbixcblx0U3BoZXJpY2FsLFxuXHRUT1VDSCxcblx0VmVjdG9yMixcblx0VmVjdG9yM1xufSBmcm9tICd0aHJlZSc7XG5cbi8vIFRoaXMgc2V0IG9mIGNvbnRyb2xzIHBlcmZvcm1zIG9yYml0aW5nLCBkb2xseWluZyAoem9vbWluZyksIGFuZCBwYW5uaW5nLlxuLy8gVW5saWtlIFRyYWNrYmFsbENvbnRyb2xzLCBpdCBtYWludGFpbnMgdGhlIFwidXBcIiBkaXJlY3Rpb24gb2JqZWN0LnVwICgrWSBieSBkZWZhdWx0KS5cbi8vXG4vLyAgICBPcmJpdCAtIGxlZnQgbW91c2UgLyB0b3VjaDogb25lLWZpbmdlciBtb3ZlXG4vLyAgICBab29tIC0gbWlkZGxlIG1vdXNlLCBvciBtb3VzZXdoZWVsIC8gdG91Y2g6IHR3by1maW5nZXIgc3ByZWFkIG9yIHNxdWlzaFxuLy8gICAgUGFuIC0gcmlnaHQgbW91c2UsIG9yIGxlZnQgbW91c2UgKyBjdHJsL21ldGEvc2hpZnRLZXksIG9yIGFycm93IGtleXMgLyB0b3VjaDogdHdvLWZpbmdlciBtb3ZlXG5cbmNvbnN0IF9jaGFuZ2VFdmVudCA9IHsgdHlwZTogJ2NoYW5nZScgfTtcbmNvbnN0IF9zdGFydEV2ZW50ID0geyB0eXBlOiAnc3RhcnQnIH07XG5jb25zdCBfZW5kRXZlbnQgPSB7IHR5cGU6ICdlbmQnIH07XG5cbmNsYXNzIE9yYml0Q29udHJvbHMgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCBkb21FbGVtZW50ID09PSB1bmRlZmluZWQgKSBjb25zb2xlLndhcm4oICdUSFJFRS5PcmJpdENvbnRyb2xzOiBUaGUgc2Vjb25kIHBhcmFtZXRlciBcImRvbUVsZW1lbnRcIiBpcyBub3cgbWFuZGF0b3J5LicgKTtcblx0XHRpZiAoIGRvbUVsZW1lbnQgPT09IGRvY3VtZW50ICkgY29uc29sZS5lcnJvciggJ1RIUkVFLk9yYml0Q29udHJvbHM6IFwiZG9jdW1lbnRcIiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCBcImRvbUVsZW1lbnRcIi4gUGxlYXNlIHVzZSBcInJlbmRlcmVyLmRvbUVsZW1lbnRcIiBpbnN0ZWFkLicgKTtcblxuXHRcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHRcdHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XG5cdFx0dGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnOyAvLyBkaXNhYmxlIHRvdWNoIHNjcm9sbFxuXG5cdFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhpcyBjb250cm9sXG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuXHRcdC8vIFwidGFyZ2V0XCIgc2V0cyB0aGUgbG9jYXRpb24gb2YgZm9jdXMsIHdoZXJlIHRoZSBvYmplY3Qgb3JiaXRzIGFyb3VuZFxuXHRcdHRoaXMudGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdC8vIEhvdyBmYXIgeW91IGNhbiBkb2xseSBpbiBhbmQgb3V0ICggUGVyc3BlY3RpdmVDYW1lcmEgb25seSApXG5cdFx0dGhpcy5taW5EaXN0YW5jZSA9IDA7XG5cdFx0dGhpcy5tYXhEaXN0YW5jZSA9IEluZmluaXR5O1xuXG5cdFx0Ly8gSG93IGZhciB5b3UgY2FuIHpvb20gaW4gYW5kIG91dCAoIE9ydGhvZ3JhcGhpY0NhbWVyYSBvbmx5IClcblx0XHR0aGlzLm1pblpvb20gPSAwO1xuXHRcdHRoaXMubWF4Wm9vbSA9IEluZmluaXR5O1xuXG5cdFx0Ly8gSG93IGZhciB5b3UgY2FuIG9yYml0IHZlcnRpY2FsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXG5cdFx0Ly8gUmFuZ2UgaXMgMCB0byBNYXRoLlBJIHJhZGlhbnMuXG5cdFx0dGhpcy5taW5Qb2xhckFuZ2xlID0gMDsgLy8gcmFkaWFuc1xuXHRcdHRoaXMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEk7IC8vIHJhZGlhbnNcblxuXHRcdC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCBob3Jpem9udGFsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXG5cdFx0Ly8gSWYgc2V0LCB0aGUgaW50ZXJ2YWwgWyBtaW4sIG1heCBdIG11c3QgYmUgYSBzdWItaW50ZXJ2YWwgb2YgWyAtIDIgUEksIDIgUEkgXSwgd2l0aCAoIG1heCAtIG1pbiA8IDIgUEkgKVxuXHRcdHRoaXMubWluQXppbXV0aEFuZ2xlID0gLSBJbmZpbml0eTsgLy8gcmFkaWFuc1xuXHRcdHRoaXMubWF4QXppbXV0aEFuZ2xlID0gSW5maW5pdHk7IC8vIHJhZGlhbnNcblxuXHRcdC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSBkYW1waW5nIChpbmVydGlhKVxuXHRcdC8vIElmIGRhbXBpbmcgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXG5cdFx0dGhpcy5lbmFibGVEYW1waW5nID0gZmFsc2U7XG5cdFx0dGhpcy5kYW1waW5nRmFjdG9yID0gMC4wNTtcblxuXHRcdC8vIFRoaXMgb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgZG9sbHlpbmcgaW4gYW5kIG91dDsgbGVmdCBhcyBcInpvb21cIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgem9vbWluZ1xuXHRcdHRoaXMuZW5hYmxlWm9vbSA9IHRydWU7XG5cdFx0dGhpcy56b29tU3BlZWQgPSAxLjA7XG5cblx0XHQvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSByb3RhdGluZ1xuXHRcdHRoaXMuZW5hYmxlUm90YXRlID0gdHJ1ZTtcblx0XHR0aGlzLnJvdGF0ZVNwZWVkID0gMS4wO1xuXG5cdFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcGFubmluZ1xuXHRcdHRoaXMuZW5hYmxlUGFuID0gdHJ1ZTtcblx0XHR0aGlzLnBhblNwZWVkID0gMS4wO1xuXHRcdHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nID0gdHJ1ZTsgLy8gaWYgZmFsc2UsIHBhbiBvcnRob2dvbmFsIHRvIHdvcmxkLXNwYWNlIGRpcmVjdGlvbiBjYW1lcmEudXBcblx0XHR0aGlzLmtleVBhblNwZWVkID0gNy4wO1x0Ly8gcGl4ZWxzIG1vdmVkIHBlciBhcnJvdyBrZXkgcHVzaFxuXG5cdFx0Ly8gU2V0IHRvIHRydWUgdG8gYXV0b21hdGljYWxseSByb3RhdGUgYXJvdW5kIHRoZSB0YXJnZXRcblx0XHQvLyBJZiBhdXRvLXJvdGF0ZSBpcyBlbmFibGVkLCB5b3UgbXVzdCBjYWxsIGNvbnRyb2xzLnVwZGF0ZSgpIGluIHlvdXIgYW5pbWF0aW9uIGxvb3Bcblx0XHR0aGlzLmF1dG9Sb3RhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmF1dG9Sb3RhdGVTcGVlZCA9IDIuMDsgLy8gMzAgc2Vjb25kcyBwZXIgb3JiaXQgd2hlbiBmcHMgaXMgNjBcblxuXHRcdC8vIFRoZSBmb3VyIGFycm93IGtleXNcblx0XHR0aGlzLmtleXMgPSB7IExFRlQ6ICdBcnJvd0xlZnQnLCBVUDogJ0Fycm93VXAnLCBSSUdIVDogJ0Fycm93UmlnaHQnLCBCT1RUT006ICdBcnJvd0Rvd24nIH07XG5cblx0XHQvLyBNb3VzZSBidXR0b25zXG5cdFx0dGhpcy5tb3VzZUJ1dHRvbnMgPSB7IExFRlQ6IE1PVVNFLlJPVEFURSwgTUlERExFOiBNT1VTRS5ET0xMWSwgUklHSFQ6IE1PVVNFLlBBTiB9O1xuXG5cdFx0Ly8gVG91Y2ggZmluZ2Vyc1xuXHRcdHRoaXMudG91Y2hlcyA9IHsgT05FOiBUT1VDSC5ST1RBVEUsIFRXTzogVE9VQ0guRE9MTFlfUEFOIH07XG5cblx0XHQvLyBmb3IgcmVzZXRcblx0XHR0aGlzLnRhcmdldDAgPSB0aGlzLnRhcmdldC5jbG9uZSgpO1xuXHRcdHRoaXMucG9zaXRpb24wID0gdGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTtcblx0XHR0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcblxuXHRcdC8vIHRoZSB0YXJnZXQgRE9NIGVsZW1lbnQgZm9yIGtleSBldmVudHNcblx0XHR0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzID0gbnVsbDtcblxuXHRcdC8vXG5cdFx0Ly8gcHVibGljIG1ldGhvZHNcblx0XHQvL1xuXG5cdFx0dGhpcy5nZXRQb2xhckFuZ2xlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gc3BoZXJpY2FsLnBoaTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEF6aW11dGhhbEFuZ2xlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gc3BoZXJpY2FsLnRoZXRhO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0RGlzdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLm9iamVjdC5wb3NpdGlvbi5kaXN0YW5jZVRvKCB0aGlzLnRhcmdldCApO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMubGlzdGVuVG9LZXlFdmVudHMgPSBmdW5jdGlvbiAoIGRvbUVsZW1lbnQgKSB7XG5cblx0XHRcdGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCBvbktleURvd24gKTtcblx0XHRcdHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgPSBkb21FbGVtZW50O1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuc2F2ZVN0YXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRzY29wZS50YXJnZXQwLmNvcHkoIHNjb3BlLnRhcmdldCApO1xuXHRcdFx0c2NvcGUucG9zaXRpb24wLmNvcHkoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApO1xuXHRcdFx0c2NvcGUuem9vbTAgPSBzY29wZS5vYmplY3Quem9vbTtcblxuXHRcdH07XG5cblx0XHR0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRzY29wZS50YXJnZXQuY29weSggc2NvcGUudGFyZ2V0MCApO1xuXHRcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmNvcHkoIHNjb3BlLnBvc2l0aW9uMCApO1xuXHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBzY29wZS56b29tMDtcblxuXHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9jaGFuZ2VFdmVudCApO1xuXG5cdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdFx0c3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0fTtcblxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGV4cG9zZWQsIGJ1dCBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjYW4gbWFrZSBpdCBwcml2YXRlLi4uXG5cdFx0dGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IG9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdC8vIHNvIGNhbWVyYS51cCBpcyB0aGUgb3JiaXQgYXhpc1xuXHRcdFx0Y29uc3QgcXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVVuaXRWZWN0b3JzKCBvYmplY3QudXAsIG5ldyBWZWN0b3IzKCAwLCAxLCAwICkgKTtcblx0XHRcdGNvbnN0IHF1YXRJbnZlcnNlID0gcXVhdC5jbG9uZSgpLmludmVydCgpO1xuXG5cdFx0XHRjb25zdCBsYXN0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgbGFzdFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXG5cdFx0XHRjb25zdCB0d29QSSA9IDIgKiBNYXRoLlBJO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlKCkge1xuXG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gc2NvcGUub2JqZWN0LnBvc2l0aW9uO1xuXG5cdFx0XHRcdG9mZnNldC5jb3B5KCBwb3NpdGlvbiApLnN1Yiggc2NvcGUudGFyZ2V0ICk7XG5cblx0XHRcdFx0Ly8gcm90YXRlIG9mZnNldCB0byBcInktYXhpcy1pcy11cFwiIHNwYWNlXG5cdFx0XHRcdG9mZnNldC5hcHBseVF1YXRlcm5pb24oIHF1YXQgKTtcblxuXHRcdFx0XHQvLyBhbmdsZSBmcm9tIHotYXhpcyBhcm91bmQgeS1heGlzXG5cdFx0XHRcdHNwaGVyaWNhbC5zZXRGcm9tVmVjdG9yMyggb2Zmc2V0ICk7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5hdXRvUm90YXRlICYmIHN0YXRlID09PSBTVEFURS5OT05FICkge1xuXG5cdFx0XHRcdFx0cm90YXRlTGVmdCggZ2V0QXV0b1JvdGF0aW9uQW5nbGUoKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZURhbXBpbmcgKSB7XG5cblx0XHRcdFx0XHRzcGhlcmljYWwudGhldGEgKz0gc3BoZXJpY2FsRGVsdGEudGhldGEgKiBzY29wZS5kYW1waW5nRmFjdG9yO1xuXHRcdFx0XHRcdHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpICogc2NvcGUuZGFtcGluZ0ZhY3RvcjtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhO1xuXHRcdFx0XHRcdHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyByZXN0cmljdCB0aGV0YSB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXG5cblx0XHRcdFx0bGV0IG1pbiA9IHNjb3BlLm1pbkF6aW11dGhBbmdsZTtcblx0XHRcdFx0bGV0IG1heCA9IHNjb3BlLm1heEF6aW11dGhBbmdsZTtcblxuXHRcdFx0XHRpZiAoIGlzRmluaXRlKCBtaW4gKSAmJiBpc0Zpbml0ZSggbWF4ICkgKSB7XG5cblx0XHRcdFx0XHRpZiAoIG1pbiA8IC0gTWF0aC5QSSApIG1pbiArPSB0d29QSTsgZWxzZSBpZiAoIG1pbiA+IE1hdGguUEkgKSBtaW4gLT0gdHdvUEk7XG5cblx0XHRcdFx0XHRpZiAoIG1heCA8IC0gTWF0aC5QSSApIG1heCArPSB0d29QSTsgZWxzZSBpZiAoIG1heCA+IE1hdGguUEkgKSBtYXggLT0gdHdvUEk7XG5cblx0XHRcdFx0XHRpZiAoIG1pbiA8PSBtYXggKSB7XG5cblx0XHRcdFx0XHRcdHNwaGVyaWNhbC50aGV0YSA9IE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIHNwaGVyaWNhbC50aGV0YSApICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzcGhlcmljYWwudGhldGEgPSAoIHNwaGVyaWNhbC50aGV0YSA+ICggbWluICsgbWF4ICkgLyAyICkgP1xuXHRcdFx0XHRcdFx0XHRNYXRoLm1heCggbWluLCBzcGhlcmljYWwudGhldGEgKSA6XG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKCBtYXgsIHNwaGVyaWNhbC50aGV0YSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xuXHRcdFx0XHRzcGhlcmljYWwucGhpID0gTWF0aC5tYXgoIHNjb3BlLm1pblBvbGFyQW5nbGUsIE1hdGgubWluKCBzY29wZS5tYXhQb2xhckFuZ2xlLCBzcGhlcmljYWwucGhpICkgKTtcblxuXHRcdFx0XHRzcGhlcmljYWwubWFrZVNhZmUoKTtcblxuXG5cdFx0XHRcdHNwaGVyaWNhbC5yYWRpdXMgKj0gc2NhbGU7XG5cblx0XHRcdFx0Ly8gcmVzdHJpY3QgcmFkaXVzIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcblx0XHRcdFx0c3BoZXJpY2FsLnJhZGl1cyA9IE1hdGgubWF4KCBzY29wZS5taW5EaXN0YW5jZSwgTWF0aC5taW4oIHNjb3BlLm1heERpc3RhbmNlLCBzcGhlcmljYWwucmFkaXVzICkgKTtcblxuXHRcdFx0XHQvLyBtb3ZlIHRhcmdldCB0byBwYW5uZWQgbG9jYXRpb25cblxuXHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZURhbXBpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRzY29wZS50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBwYW5PZmZzZXQsIHNjb3BlLmRhbXBpbmdGYWN0b3IgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c2NvcGUudGFyZ2V0LmFkZCggcGFuT2Zmc2V0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9mZnNldC5zZXRGcm9tU3BoZXJpY2FsKCBzcGhlcmljYWwgKTtcblxuXHRcdFx0XHQvLyByb3RhdGUgb2Zmc2V0IGJhY2sgdG8gXCJjYW1lcmEtdXAtdmVjdG9yLWlzLXVwXCIgc3BhY2Vcblx0XHRcdFx0b2Zmc2V0LmFwcGx5UXVhdGVybmlvbiggcXVhdEludmVyc2UgKTtcblxuXHRcdFx0XHRwb3NpdGlvbi5jb3B5KCBzY29wZS50YXJnZXQgKS5hZGQoIG9mZnNldCApO1xuXG5cdFx0XHRcdHNjb3BlLm9iamVjdC5sb29rQXQoIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlRGFtcGluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHNwaGVyaWNhbERlbHRhLnRoZXRhICo9ICggMSAtIHNjb3BlLmRhbXBpbmdGYWN0b3IgKTtcblx0XHRcdFx0XHRzcGhlcmljYWxEZWx0YS5waGkgKj0gKCAxIC0gc2NvcGUuZGFtcGluZ0ZhY3RvciApO1xuXG5cdFx0XHRcdFx0cGFuT2Zmc2V0Lm11bHRpcGx5U2NhbGFyKCAxIC0gc2NvcGUuZGFtcGluZ0ZhY3RvciApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRzcGhlcmljYWxEZWx0YS5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdFx0XHRcdHBhbk9mZnNldC5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NhbGUgPSAxO1xuXG5cdFx0XHRcdC8vIHVwZGF0ZSBjb25kaXRpb24gaXM6XG5cdFx0XHRcdC8vIG1pbihjYW1lcmEgZGlzcGxhY2VtZW50LCBjYW1lcmEgcm90YXRpb24gaW4gcmFkaWFucyleMiA+IEVQU1xuXHRcdFx0XHQvLyB1c2luZyBzbWFsbC1hbmdsZSBhcHByb3hpbWF0aW9uIGNvcyh4LzIpID0gMSAtIHheMiAvIDhcblxuXHRcdFx0XHRpZiAoIHpvb21DaGFuZ2VkIHx8XG5cdFx0XHRcdFx0bGFzdFBvc2l0aW9uLmRpc3RhbmNlVG9TcXVhcmVkKCBzY29wZS5vYmplY3QucG9zaXRpb24gKSA+IEVQUyB8fFxuXHRcdFx0XHRcdDggKiAoIDEgLSBsYXN0UXVhdGVybmlvbi5kb3QoIHNjb3BlLm9iamVjdC5xdWF0ZXJuaW9uICkgKSA+IEVQUyApIHtcblxuXHRcdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9jaGFuZ2VFdmVudCApO1xuXG5cdFx0XHRcdFx0bGFzdFBvc2l0aW9uLmNvcHkoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApO1xuXHRcdFx0XHRcdGxhc3RRdWF0ZXJuaW9uLmNvcHkoIHNjb3BlLm9iamVjdC5xdWF0ZXJuaW9uICk7XG5cdFx0XHRcdFx0em9vbUNoYW5nZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH07XG5cblx0XHR9KCk7XG5cblx0XHR0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NvbnRleHRtZW51Jywgb25Db250ZXh0TWVudSApO1xuXG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyZG93bicsIG9uUG9pbnRlckRvd24gKTtcblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJjYW5jZWwnLCBvblBvaW50ZXJDYW5jZWwgKTtcblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3doZWVsJywgb25Nb3VzZVdoZWVsICk7XG5cblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSApO1xuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcnVwJywgb25Qb2ludGVyVXAgKTtcblxuXG5cdFx0XHRpZiAoIHNjb3BlLl9kb21FbGVtZW50S2V5RXZlbnRzICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHNjb3BlLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgb25LZXlEb3duICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9zY29wZS5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7IC8vIHNob3VsZCB0aGlzIGJlIGFkZGVkIGhlcmU/XG5cblx0XHR9O1xuXG5cdFx0Ly9cblx0XHQvLyBpbnRlcm5hbHNcblx0XHQvL1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgU1RBVEUgPSB7XG5cdFx0XHROT05FOiAtIDEsXG5cdFx0XHRST1RBVEU6IDAsXG5cdFx0XHRET0xMWTogMSxcblx0XHRcdFBBTjogMixcblx0XHRcdFRPVUNIX1JPVEFURTogMyxcblx0XHRcdFRPVUNIX1BBTjogNCxcblx0XHRcdFRPVUNIX0RPTExZX1BBTjogNSxcblx0XHRcdFRPVUNIX0RPTExZX1JPVEFURTogNlxuXHRcdH07XG5cblx0XHRsZXQgc3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0Y29uc3QgRVBTID0gMC4wMDAwMDE7XG5cblx0XHQvLyBjdXJyZW50IHBvc2l0aW9uIGluIHNwaGVyaWNhbCBjb29yZGluYXRlc1xuXHRcdGNvbnN0IHNwaGVyaWNhbCA9IG5ldyBTcGhlcmljYWwoKTtcblx0XHRjb25zdCBzcGhlcmljYWxEZWx0YSA9IG5ldyBTcGhlcmljYWwoKTtcblxuXHRcdGxldCBzY2FsZSA9IDE7XG5cdFx0Y29uc3QgcGFuT2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRsZXQgem9vbUNoYW5nZWQgPSBmYWxzZTtcblxuXHRcdGNvbnN0IHJvdGF0ZVN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCByb3RhdGVFbmQgPSBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IHJvdGF0ZURlbHRhID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdGNvbnN0IHBhblN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBwYW5FbmQgPSBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IHBhbkRlbHRhID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdGNvbnN0IGRvbGx5U3RhcnQgPSBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IGRvbGx5RW5kID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBkb2xseURlbHRhID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdGNvbnN0IHBvaW50ZXJzID0gW107XG5cdFx0Y29uc3QgcG9pbnRlclBvc2l0aW9ucyA9IHt9O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0QXV0b1JvdGF0aW9uQW5nbGUoKSB7XG5cblx0XHRcdHJldHVybiAyICogTWF0aC5QSSAvIDYwIC8gNjAgKiBzY29wZS5hdXRvUm90YXRlU3BlZWQ7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRab29tU2NhbGUoKSB7XG5cblx0XHRcdHJldHVybiBNYXRoLnBvdyggMC45NSwgc2NvcGUuem9vbVNwZWVkICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiByb3RhdGVMZWZ0KCBhbmdsZSApIHtcblxuXHRcdFx0c3BoZXJpY2FsRGVsdGEudGhldGEgLT0gYW5nbGU7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiByb3RhdGVVcCggYW5nbGUgKSB7XG5cblx0XHRcdHNwaGVyaWNhbERlbHRhLnBoaSAtPSBhbmdsZTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHBhbkxlZnQgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IHYgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuTGVmdCggZGlzdGFuY2UsIG9iamVjdE1hdHJpeCApIHtcblxuXHRcdFx0XHR2LnNldEZyb21NYXRyaXhDb2x1bW4oIG9iamVjdE1hdHJpeCwgMCApOyAvLyBnZXQgWCBjb2x1bW4gb2Ygb2JqZWN0TWF0cml4XG5cdFx0XHRcdHYubXVsdGlwbHlTY2FsYXIoIC0gZGlzdGFuY2UgKTtcblxuXHRcdFx0XHRwYW5PZmZzZXQuYWRkKCB2ICk7XG5cblx0XHRcdH07XG5cblx0XHR9KCk7XG5cblx0XHRjb25zdCBwYW5VcCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc3QgdiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBwYW5VcCggZGlzdGFuY2UsIG9iamVjdE1hdHJpeCApIHtcblxuXHRcdFx0XHRpZiAoIHNjb3BlLnNjcmVlblNwYWNlUGFubmluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHYuc2V0RnJvbU1hdHJpeENvbHVtbiggb2JqZWN0TWF0cml4LCAxICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHYuc2V0RnJvbU1hdHJpeENvbHVtbiggb2JqZWN0TWF0cml4LCAwICk7XG5cdFx0XHRcdFx0di5jcm9zc1ZlY3RvcnMoIHNjb3BlLm9iamVjdC51cCwgdiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2Lm11bHRpcGx5U2NhbGFyKCBkaXN0YW5jZSApO1xuXG5cdFx0XHRcdHBhbk9mZnNldC5hZGQoIHYgKTtcblxuXHRcdFx0fTtcblxuXHRcdH0oKTtcblxuXHRcdC8vIGRlbHRhWCBhbmQgZGVsdGFZIGFyZSBpbiBwaXhlbHM7IHJpZ2h0IGFuZCBkb3duIGFyZSBwb3NpdGl2ZVxuXHRcdGNvbnN0IHBhbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhbiggZGVsdGFYLCBkZWx0YVkgKSB7XG5cblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IHNjb3BlLmRvbUVsZW1lbnQ7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHtcblxuXHRcdFx0XHRcdC8vIHBlcnNwZWN0aXZlXG5cdFx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBzY29wZS5vYmplY3QucG9zaXRpb247XG5cdFx0XHRcdFx0b2Zmc2V0LmNvcHkoIHBvc2l0aW9uICkuc3ViKCBzY29wZS50YXJnZXQgKTtcblx0XHRcdFx0XHRsZXQgdGFyZ2V0RGlzdGFuY2UgPSBvZmZzZXQubGVuZ3RoKCk7XG5cblx0XHRcdFx0XHQvLyBoYWxmIG9mIHRoZSBmb3YgaXMgY2VudGVyIHRvIHRvcCBvZiBzY3JlZW5cblx0XHRcdFx0XHR0YXJnZXREaXN0YW5jZSAqPSBNYXRoLnRhbiggKCBzY29wZS5vYmplY3QuZm92IC8gMiApICogTWF0aC5QSSAvIDE4MC4wICk7XG5cblx0XHRcdFx0XHQvLyB3ZSB1c2Ugb25seSBjbGllbnRIZWlnaHQgaGVyZSBzbyBhc3BlY3QgcmF0aW8gZG9lcyBub3QgZGlzdG9ydCBzcGVlZFxuXHRcdFx0XHRcdHBhbkxlZnQoIDIgKiBkZWx0YVggKiB0YXJnZXREaXN0YW5jZSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4ICk7XG5cdFx0XHRcdFx0cGFuVXAoIDIgKiBkZWx0YVkgKiB0YXJnZXREaXN0YW5jZSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdFx0Ly8gb3J0aG9ncmFwaGljXG5cdFx0XHRcdFx0cGFuTGVmdCggZGVsdGFYICogKCBzY29wZS5vYmplY3QucmlnaHQgLSBzY29wZS5vYmplY3QubGVmdCApIC8gc2NvcGUub2JqZWN0Lnpvb20gLyBlbGVtZW50LmNsaWVudFdpZHRoLCBzY29wZS5vYmplY3QubWF0cml4ICk7XG5cdFx0XHRcdFx0cGFuVXAoIGRlbHRhWSAqICggc2NvcGUub2JqZWN0LnRvcCAtIHNjb3BlLm9iamVjdC5ib3R0b20gKSAvIHNjb3BlLm9iamVjdC56b29tIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsIHNjb3BlLm9iamVjdC5tYXRyaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gY2FtZXJhIG5laXRoZXIgb3J0aG9ncmFwaGljIG5vciBwZXJzcGVjdGl2ZVxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1dBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4nICk7XG5cdFx0XHRcdFx0c2NvcGUuZW5hYmxlUGFuID0gZmFsc2U7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9O1xuXG5cdFx0fSgpO1xuXG5cdFx0ZnVuY3Rpb24gZG9sbHlPdXQoIGRvbGx5U2NhbGUgKSB7XG5cblx0XHRcdGlmICggc2NvcGUub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEgKSB7XG5cblx0XHRcdFx0c2NhbGUgLz0gZG9sbHlTY2FsZTtcblxuXHRcdFx0fSBlbHNlIGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gTWF0aC5tYXgoIHNjb3BlLm1pblpvb20sIE1hdGgubWluKCBzY29wZS5tYXhab29tLCBzY29wZS5vYmplY3Quem9vbSAqIGRvbGx5U2NhbGUgKSApO1xuXHRcdFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdFx0XHR6b29tQ2hhbmdlZCA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4nICk7XG5cdFx0XHRcdHNjb3BlLmVuYWJsZVpvb20gPSBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZG9sbHlJbiggZG9sbHlTY2FsZSApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHtcblxuXHRcdFx0XHRzY2FsZSAqPSBkb2xseVNjYWxlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzY29wZS5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7XG5cblx0XHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBNYXRoLm1heCggc2NvcGUubWluWm9vbSwgTWF0aC5taW4oIHNjb3BlLm1heFpvb20sIHNjb3BlLm9iamVjdC56b29tIC8gZG9sbHlTY2FsZSApICk7XG5cdFx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHRcdHpvb21DaGFuZ2VkID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLicgKTtcblx0XHRcdFx0c2NvcGUuZW5hYmxlWm9vbSA9IGZhbHNlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvL1xuXHRcdC8vIGV2ZW50IGNhbGxiYWNrcyAtIHVwZGF0ZSB0aGUgb2JqZWN0IHN0YXRlXG5cdFx0Ly9cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93blJvdGF0ZSggZXZlbnQgKSB7XG5cblx0XHRcdHJvdGF0ZVN0YXJ0LnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duRG9sbHkoIGV2ZW50ICkge1xuXG5cdFx0XHRkb2xseVN0YXJ0LnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duUGFuKCBldmVudCApIHtcblxuXHRcdFx0cGFuU3RhcnQuc2V0KCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmVSb3RhdGUoIGV2ZW50ICkge1xuXG5cdFx0XHRyb3RhdGVFbmQuc2V0KCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cblx0XHRcdHJvdGF0ZURlbHRhLnN1YlZlY3RvcnMoIHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQgKS5tdWx0aXBseVNjYWxhciggc2NvcGUucm90YXRlU3BlZWQgKTtcblxuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHNjb3BlLmRvbUVsZW1lbnQ7XG5cblx0XHRcdHJvdGF0ZUxlZnQoIDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueCAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICk7IC8vIHllcywgaGVpZ2h0XG5cblx0XHRcdHJvdGF0ZVVwKCAyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnkgLyBlbGVtZW50LmNsaWVudEhlaWdodCApO1xuXG5cdFx0XHRyb3RhdGVTdGFydC5jb3B5KCByb3RhdGVFbmQgKTtcblxuXHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmVEb2xseSggZXZlbnQgKSB7XG5cblx0XHRcdGRvbGx5RW5kLnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0XHRkb2xseURlbHRhLnN1YlZlY3RvcnMoIGRvbGx5RW5kLCBkb2xseVN0YXJ0ICk7XG5cblx0XHRcdGlmICggZG9sbHlEZWx0YS55ID4gMCApIHtcblxuXHRcdFx0XHRkb2xseU91dCggZ2V0Wm9vbVNjYWxlKCkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggZG9sbHlEZWx0YS55IDwgMCApIHtcblxuXHRcdFx0XHRkb2xseUluKCBnZXRab29tU2NhbGUoKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGRvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTtcblxuXHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmVQYW4oIGV2ZW50ICkge1xuXG5cdFx0XHRwYW5FbmQuc2V0KCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cblx0XHRcdHBhbkRlbHRhLnN1YlZlY3RvcnMoIHBhbkVuZCwgcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggc2NvcGUucGFuU3BlZWQgKTtcblxuXHRcdFx0cGFuKCBwYW5EZWx0YS54LCBwYW5EZWx0YS55ICk7XG5cblx0XHRcdHBhblN0YXJ0LmNvcHkoIHBhbkVuZCApO1xuXG5cdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZU1vdXNlV2hlZWwoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIGV2ZW50LmRlbHRhWSA8IDAgKSB7XG5cblx0XHRcdFx0ZG9sbHlJbiggZ2V0Wm9vbVNjYWxlKCkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggZXZlbnQuZGVsdGFZID4gMCApIHtcblxuXHRcdFx0XHRkb2xseU91dCggZ2V0Wm9vbVNjYWxlKCkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZUtleURvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0c3dpdGNoICggZXZlbnQuY29kZSApIHtcblxuXHRcdFx0XHRjYXNlIHNjb3BlLmtleXMuVVA6XG5cdFx0XHRcdFx0cGFuKCAwLCBzY29wZS5rZXlQYW5TcGVlZCApO1xuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIHNjb3BlLmtleXMuQk9UVE9NOlxuXHRcdFx0XHRcdHBhbiggMCwgLSBzY29wZS5rZXlQYW5TcGVlZCApO1xuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIHNjb3BlLmtleXMuTEVGVDpcblx0XHRcdFx0XHRwYW4oIHNjb3BlLmtleVBhblNwZWVkLCAwICk7XG5cdFx0XHRcdFx0bmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2Ugc2NvcGUua2V5cy5SSUdIVDpcblx0XHRcdFx0XHRwYW4oIC0gc2NvcGUua2V5UGFuU3BlZWQsIDAgKTtcblx0XHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBuZWVkc1VwZGF0ZSApIHtcblxuXHRcdFx0XHQvLyBwcmV2ZW50IHRoZSBicm93c2VyIGZyb20gc2Nyb2xsaW5nIG9uIGN1cnNvciBrZXlzXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHRcdH1cblxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpIHtcblxuXHRcdFx0aWYgKCBwb2ludGVycy5sZW5ndGggPT09IDEgKSB7XG5cblx0XHRcdFx0cm90YXRlU3RhcnQuc2V0KCBwb2ludGVyc1sgMCBdLnBhZ2VYLCBwb2ludGVyc1sgMCBdLnBhZ2VZICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3QgeCA9IDAuNSAqICggcG9pbnRlcnNbIDAgXS5wYWdlWCArIHBvaW50ZXJzWyAxIF0ucGFnZVggKTtcblx0XHRcdFx0Y29uc3QgeSA9IDAuNSAqICggcG9pbnRlcnNbIDAgXS5wYWdlWSArIHBvaW50ZXJzWyAxIF0ucGFnZVkgKTtcblxuXHRcdFx0XHRyb3RhdGVTdGFydC5zZXQoIHgsIHkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFBhbigpIHtcblxuXHRcdFx0aWYgKCBwb2ludGVycy5sZW5ndGggPT09IDEgKSB7XG5cblx0XHRcdFx0cGFuU3RhcnQuc2V0KCBwb2ludGVyc1sgMCBdLnBhZ2VYLCBwb2ludGVyc1sgMCBdLnBhZ2VZICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3QgeCA9IDAuNSAqICggcG9pbnRlcnNbIDAgXS5wYWdlWCArIHBvaW50ZXJzWyAxIF0ucGFnZVggKTtcblx0XHRcdFx0Y29uc3QgeSA9IDAuNSAqICggcG9pbnRlcnNbIDAgXS5wYWdlWSArIHBvaW50ZXJzWyAxIF0ucGFnZVkgKTtcblxuXHRcdFx0XHRwYW5TdGFydC5zZXQoIHgsIHkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydERvbGx5KCkge1xuXG5cdFx0XHRjb25zdCBkeCA9IHBvaW50ZXJzWyAwIF0ucGFnZVggLSBwb2ludGVyc1sgMSBdLnBhZ2VYO1xuXHRcdFx0Y29uc3QgZHkgPSBwb2ludGVyc1sgMCBdLnBhZ2VZIC0gcG9pbnRlcnNbIDEgXS5wYWdlWTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7XG5cblx0XHRcdGRvbGx5U3RhcnQuc2V0KCAwLCBkaXN0YW5jZSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydERvbGx5UGFuKCkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gKSBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKTtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVQYW4gKSBoYW5kbGVUb3VjaFN0YXJ0UGFuKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlSb3RhdGUoKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlWm9vbSApIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpO1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVJvdGF0ZSApIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZVJvdGF0ZSggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggcG9pbnRlcnMubGVuZ3RoID09IDEgKSB7XG5cblx0XHRcdFx0cm90YXRlRW5kLnNldCggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oIGV2ZW50ICk7XG5cblx0XHRcdFx0Y29uc3QgeCA9IDAuNSAqICggZXZlbnQucGFnZVggKyBwb3NpdGlvbi54ICk7XG5cdFx0XHRcdGNvbnN0IHkgPSAwLjUgKiAoIGV2ZW50LnBhZ2VZICsgcG9zaXRpb24ueSApO1xuXG5cdFx0XHRcdHJvdGF0ZUVuZC5zZXQoIHgsIHkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCByb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnJvdGF0ZVNwZWVkICk7XG5cblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50O1xuXG5cdFx0XHRyb3RhdGVMZWZ0KCAyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnggLyBlbGVtZW50LmNsaWVudEhlaWdodCApOyAvLyB5ZXMsIGhlaWdodFxuXG5cdFx0XHRyb3RhdGVVcCggMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKTtcblxuXHRcdFx0cm90YXRlU3RhcnQuY29weSggcm90YXRlRW5kICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmVQYW4oIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHBvaW50ZXJzLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdFx0XHRwYW5FbmQuc2V0KCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbiggZXZlbnQgKTtcblxuXHRcdFx0XHRjb25zdCB4ID0gMC41ICogKCBldmVudC5wYWdlWCArIHBvc2l0aW9uLnggKTtcblx0XHRcdFx0Y29uc3QgeSA9IDAuNSAqICggZXZlbnQucGFnZVkgKyBwb3NpdGlvbi55ICk7XG5cblx0XHRcdFx0cGFuRW5kLnNldCggeCwgeSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHBhbkRlbHRhLnN1YlZlY3RvcnMoIHBhbkVuZCwgcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggc2NvcGUucGFuU3BlZWQgKTtcblxuXHRcdFx0cGFuKCBwYW5EZWx0YS54LCBwYW5EZWx0YS55ICk7XG5cblx0XHRcdHBhblN0YXJ0LmNvcHkoIHBhbkVuZCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hNb3ZlRG9sbHkoIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbiggZXZlbnQgKTtcblxuXHRcdFx0Y29uc3QgZHggPSBldmVudC5wYWdlWCAtIHBvc2l0aW9uLng7XG5cdFx0XHRjb25zdCBkeSA9IGV2ZW50LnBhZ2VZIC0gcG9zaXRpb24ueTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7XG5cblx0XHRcdGRvbGx5RW5kLnNldCggMCwgZGlzdGFuY2UgKTtcblxuXHRcdFx0ZG9sbHlEZWx0YS5zZXQoIDAsIE1hdGgucG93KCBkb2xseUVuZC55IC8gZG9sbHlTdGFydC55LCBzY29wZS56b29tU3BlZWQgKSApO1xuXG5cdFx0XHRkb2xseU91dCggZG9sbHlEZWx0YS55ICk7XG5cblx0XHRcdGRvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZURvbGx5UGFuKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tICkgaGFuZGxlVG91Y2hNb3ZlRG9sbHkoIGV2ZW50ICk7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlUGFuICkgaGFuZGxlVG91Y2hNb3ZlUGFuKCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hNb3ZlRG9sbHlSb3RhdGUoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gKSBoYW5kbGVUb3VjaE1vdmVEb2xseSggZXZlbnQgKTtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgKSBoYW5kbGVUb3VjaE1vdmVSb3RhdGUoIGV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHQvL1xuXHRcdC8vIGV2ZW50IGhhbmRsZXJzIC0gRlNNOiBsaXN0ZW4gZm9yIGV2ZW50cyBhbmQgcmVzZXQgc3RhdGVcblx0XHQvL1xuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyRG93biggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGlmICggcG9pbnRlcnMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUoIGV2ZW50LnBvaW50ZXJJZCApO1xuXG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSApO1xuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVydXAnLCBvblBvaW50ZXJVcCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGFkZFBvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdGlmICggZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgKSB7XG5cblx0XHRcdFx0b25Ub3VjaFN0YXJ0KCBldmVudCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdG9uTW91c2VEb3duKCBldmVudCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblBvaW50ZXJNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyApIHtcblxuXHRcdFx0XHRvblRvdWNoTW92ZSggZXZlbnQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRvbk1vdXNlTW92ZSggZXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyVXAoIGV2ZW50ICkge1xuXG5cdFx0ICAgIHJlbW92ZVBvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHQgICAgaWYgKCBwb2ludGVycy5sZW5ndGggPT09IDAgKSB7XG5cblx0XHQgICAgICAgIHNjb3BlLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKCBldmVudC5wb2ludGVySWQgKTtcblxuXHRcdCAgICAgICAgc2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlICk7XG5cdFx0ICAgICAgICBzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVydXAnLCBvblBvaW50ZXJVcCApO1xuXG5cdFx0ICAgIH1cblxuXHRcdCAgICBzY29wZS5kaXNwYXRjaEV2ZW50KCBfZW5kRXZlbnQgKTtcblxuXHRcdCAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblBvaW50ZXJDYW5jZWwoIGV2ZW50ICkge1xuXG5cdFx0XHRyZW1vdmVQb2ludGVyKCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZURvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRsZXQgbW91c2VBY3Rpb247XG5cblx0XHRcdHN3aXRjaCAoIGV2ZW50LmJ1dHRvbiApIHtcblxuXHRcdFx0XHRjYXNlIDA6XG5cblx0XHRcdFx0XHRtb3VzZUFjdGlvbiA9IHNjb3BlLm1vdXNlQnV0dG9ucy5MRUZUO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgMTpcblxuXHRcdFx0XHRcdG1vdXNlQWN0aW9uID0gc2NvcGUubW91c2VCdXR0b25zLk1JRERMRTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDI6XG5cblx0XHRcdFx0XHRtb3VzZUFjdGlvbiA9IHNjb3BlLm1vdXNlQnV0dG9ucy5SSUdIVDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0bW91c2VBY3Rpb24gPSAtIDE7XG5cblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoICggbW91c2VBY3Rpb24gKSB7XG5cblx0XHRcdFx0Y2FzZSBNT1VTRS5ET0xMWTpcblxuXHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlWm9vbSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVNb3VzZURvd25Eb2xseSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuRE9MTFk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1PVVNFLlJPVEFURTpcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5ICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdGhhbmRsZU1vdXNlRG93blBhbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5QQU47XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdGhhbmRsZU1vdXNlRG93blJvdGF0ZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5ST1RBVEU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1PVVNFLlBBTjpcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5ICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdGhhbmRsZU1vdXNlRG93blJvdGF0ZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5ST1RBVEU7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdGhhbmRsZU1vdXNlRG93blBhbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5QQU47XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3RhdGUgIT09IFNUQVRFLk5PTkUgKSB7XG5cblx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZU1vdmUoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRzd2l0Y2ggKCBzdGF0ZSApIHtcblxuXHRcdFx0XHRjYXNlIFNUQVRFLlJPVEFURTpcblxuXHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlUm90YXRlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdGhhbmRsZU1vdXNlTW92ZVJvdGF0ZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU1RBVEUuRE9MTFk6XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aGFuZGxlTW91c2VNb3ZlRG9sbHkoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFNUQVRFLlBBTjpcblxuXHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlUGFuID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdGhhbmRsZU1vdXNlTW92ZVBhbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvbk1vdXNlV2hlZWwoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlIHx8IHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlIHx8IHN0YXRlICE9PSBTVEFURS5OT05FICkgcmV0dXJuO1xuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfc3RhcnRFdmVudCApO1xuXG5cdFx0XHRoYW5kbGVNb3VzZVdoZWVsKCBldmVudCApO1xuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfZW5kRXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uS2V5RG93biggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgfHwgc2NvcGUuZW5hYmxlUGFuID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aGFuZGxlS2V5RG93biggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uVG91Y2hTdGFydCggZXZlbnQgKSB7XG5cblx0XHRcdHRyYWNrUG9pbnRlciggZXZlbnQgKTtcblxuXHRcdFx0c3dpdGNoICggcG9pbnRlcnMubGVuZ3RoICkge1xuXG5cdFx0XHRcdGNhc2UgMTpcblxuXHRcdFx0XHRcdHN3aXRjaCAoIHNjb3BlLnRvdWNoZXMuT05FICkge1xuXG5cdFx0XHRcdFx0XHRjYXNlIFRPVUNILlJPVEFURTpcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdFx0aGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuVE9VQ0hfUk9UQVRFO1xuXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFRPVUNILlBBTjpcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdFx0aGFuZGxlVG91Y2hTdGFydFBhbigpO1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuVE9VQ0hfUEFOO1xuXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgMjpcblxuXHRcdFx0XHRcdHN3aXRjaCAoIHNjb3BlLnRvdWNoZXMuVFdPICkge1xuXG5cdFx0XHRcdFx0XHRjYXNlIFRPVUNILkRPTExZX1BBTjpcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdFx0aGFuZGxlVG91Y2hTdGFydERvbGx5UGFuKCk7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5UT1VDSF9ET0xMWV9QQU47XG5cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgVE9VQ0guRE9MTFlfUk9UQVRFOlxuXG5cdFx0XHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgc2NvcGUuZW5hYmxlUm90YXRlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdFx0XHRoYW5kbGVUb3VjaFN0YXJ0RG9sbHlSb3RhdGUoKTtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZX1JPVEFURTtcblxuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3RhdGUgIT09IFNUQVRFLk5PTkUgKSB7XG5cblx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Ub3VjaE1vdmUoIGV2ZW50ICkge1xuXG5cdFx0XHR0cmFja1BvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdHN3aXRjaCAoIHN0YXRlICkge1xuXG5cdFx0XHRcdGNhc2UgU1RBVEUuVE9VQ0hfUk9UQVRFOlxuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aGFuZGxlVG91Y2hNb3ZlUm90YXRlKCBldmVudCApO1xuXG5cdFx0XHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFNUQVRFLlRPVUNIX1BBTjpcblxuXHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlUGFuID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdGhhbmRsZVRvdWNoTW92ZVBhbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBTVEFURS5UT1VDSF9ET0xMWV9QQU46XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVUb3VjaE1vdmVEb2xseVBhbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBTVEFURS5UT1VDSF9ET0xMWV9ST1RBVEU6XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVUb3VjaE1vdmVEb2xseVJvdGF0ZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Db250ZXh0TWVudSggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRQb2ludGVyKCBldmVudCApIHtcblxuXHRcdFx0cG9pbnRlcnMucHVzaCggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoIGV2ZW50ICkge1xuXG5cdFx0XHRkZWxldGUgcG9pbnRlclBvc2l0aW9uc1sgZXZlbnQucG9pbnRlcklkIF07XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHBvaW50ZXJzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIHBvaW50ZXJzWyBpIF0ucG9pbnRlcklkID09IGV2ZW50LnBvaW50ZXJJZCApIHtcblxuXHRcdFx0XHRcdHBvaW50ZXJzLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyYWNrUG9pbnRlciggZXZlbnQgKSB7XG5cblx0XHRcdGxldCBwb3NpdGlvbiA9IHBvaW50ZXJQb3NpdGlvbnNbIGV2ZW50LnBvaW50ZXJJZCBdO1xuXG5cdFx0XHRpZiAoIHBvc2l0aW9uID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xuXHRcdFx0XHRwb2ludGVyUG9zaXRpb25zWyBldmVudC5wb2ludGVySWQgXSA9IHBvc2l0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHRcdHBvc2l0aW9uLnNldCggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBwb2ludGVyID0gKCBldmVudC5wb2ludGVySWQgPT09IHBvaW50ZXJzWyAwIF0ucG9pbnRlcklkICkgPyBwb2ludGVyc1sgMSBdIDogcG9pbnRlcnNbIDAgXTtcblxuXHRcdFx0cmV0dXJuIHBvaW50ZXJQb3NpdGlvbnNbIHBvaW50ZXIucG9pbnRlcklkIF07XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnY29udGV4dG1lbnUnLCBvbkNvbnRleHRNZW51ICk7XG5cblx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyZG93bicsIG9uUG9pbnRlckRvd24gKTtcblx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyY2FuY2VsJywgb25Qb2ludGVyQ2FuY2VsICk7XG5cdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnd2hlZWwnLCBvbk1vdXNlV2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSApO1xuXG5cdFx0Ly8gZm9yY2UgYW4gdXBkYXRlIGF0IHN0YXJ0XG5cblx0XHR0aGlzLnVwZGF0ZSgpO1xuXG5cdH1cblxufVxuXG5cbi8vIFRoaXMgc2V0IG9mIGNvbnRyb2xzIHBlcmZvcm1zIG9yYml0aW5nLCBkb2xseWluZyAoem9vbWluZyksIGFuZCBwYW5uaW5nLlxuLy8gVW5saWtlIFRyYWNrYmFsbENvbnRyb2xzLCBpdCBtYWludGFpbnMgdGhlIFwidXBcIiBkaXJlY3Rpb24gb2JqZWN0LnVwICgrWSBieSBkZWZhdWx0KS5cbi8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIE9yYml0Q29udHJvbHMsIGFub3RoZXIgc2V0IG9mIHRvdWNoIGJlaGF2aW9yXG4vL1xuLy8gICAgT3JiaXQgLSByaWdodCBtb3VzZSwgb3IgbGVmdCBtb3VzZSArIGN0cmwvbWV0YS9zaGlmdEtleSAvIHRvdWNoOiB0d28tZmluZ2VyIHJvdGF0ZVxuLy8gICAgWm9vbSAtIG1pZGRsZSBtb3VzZSwgb3IgbW91c2V3aGVlbCAvIHRvdWNoOiB0d28tZmluZ2VyIHNwcmVhZCBvciBzcXVpc2hcbi8vICAgIFBhbiAtIGxlZnQgbW91c2UsIG9yIGFycm93IGtleXMgLyB0b3VjaDogb25lLWZpbmdlciBtb3ZlXG5cbmNsYXNzIE1hcENvbnRyb2xzIGV4dGVuZHMgT3JiaXRDb250cm9scyB7XG5cblx0Y29uc3RydWN0b3IoIG9iamVjdCwgZG9tRWxlbWVudCApIHtcblxuXHRcdHN1cGVyKCBvYmplY3QsIGRvbUVsZW1lbnQgKTtcblxuXHRcdHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nID0gZmFsc2U7IC8vIHBhbiBvcnRob2dvbmFsIHRvIHdvcmxkLXNwYWNlIGRpcmVjdGlvbiBjYW1lcmEudXBcblxuXHRcdHRoaXMubW91c2VCdXR0b25zLkxFRlQgPSBNT1VTRS5QQU47XG5cdFx0dGhpcy5tb3VzZUJ1dHRvbnMuUklHSFQgPSBNT1VTRS5ST1RBVEU7XG5cblx0XHR0aGlzLnRvdWNoZXMuT05FID0gVE9VQ0guUEFOO1xuXHRcdHRoaXMudG91Y2hlcy5UV08gPSBUT1VDSC5ET0xMWV9ST1RBVEU7XG5cblx0fVxuXG59XG5cbmV4cG9ydCB7IE9yYml0Q29udHJvbHMsIE1hcENvbnRyb2xzIH07XG4iLCJpbXBvcnQge1xuXHRFdmVudERpc3BhdGNoZXIsXG5cdE1PVVNFLFxuXHRRdWF0ZXJuaW9uLFxuXHRWZWN0b3IyLFxuXHRWZWN0b3IzXG59IGZyb20gJ3RocmVlJztcblxuY29uc3QgX2NoYW5nZUV2ZW50ID0geyB0eXBlOiAnY2hhbmdlJyB9O1xuY29uc3QgX3N0YXJ0RXZlbnQgPSB7IHR5cGU6ICdzdGFydCcgfTtcbmNvbnN0IF9lbmRFdmVudCA9IHsgdHlwZTogJ2VuZCcgfTtcblxuY2xhc3MgVHJhY2tiYWxsQ29udHJvbHMgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCBkb21FbGVtZW50ID09PSB1bmRlZmluZWQgKSBjb25zb2xlLndhcm4oICdUSFJFRS5UcmFja2JhbGxDb250cm9sczogVGhlIHNlY29uZCBwYXJhbWV0ZXIgXCJkb21FbGVtZW50XCIgaXMgbm93IG1hbmRhdG9yeS4nICk7XG5cdFx0aWYgKCBkb21FbGVtZW50ID09PSBkb2N1bWVudCApIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5UcmFja2JhbGxDb250cm9sczogXCJkb2N1bWVudFwiIHNob3VsZCBub3QgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IFwiZG9tRWxlbWVudFwiLiBQbGVhc2UgdXNlIFwicmVuZGVyZXIuZG9tRWxlbWVudFwiIGluc3RlYWQuJyApO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IFNUQVRFID0geyBOT05FOiAtIDEsIFJPVEFURTogMCwgWk9PTTogMSwgUEFOOiAyLCBUT1VDSF9ST1RBVEU6IDMsIFRPVUNIX1pPT01fUEFOOiA0IH07XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuXHRcdHRoaXMuZG9tRWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJzsgLy8gZGlzYWJsZSB0b3VjaCBzY3JvbGxcblxuXHRcdC8vIEFQSVxuXG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuXHRcdHRoaXMuc2NyZWVuID0geyBsZWZ0OiAwLCB0b3A6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblxuXHRcdHRoaXMucm90YXRlU3BlZWQgPSAxLjA7XG5cdFx0dGhpcy56b29tU3BlZWQgPSAxLjI7XG5cdFx0dGhpcy5wYW5TcGVlZCA9IDAuMztcblxuXHRcdHRoaXMubm9Sb3RhdGUgPSBmYWxzZTtcblx0XHR0aGlzLm5vWm9vbSA9IGZhbHNlO1xuXHRcdHRoaXMubm9QYW4gPSBmYWxzZTtcblxuXHRcdHRoaXMuc3RhdGljTW92aW5nID0gZmFsc2U7XG5cdFx0dGhpcy5keW5hbWljRGFtcGluZ0ZhY3RvciA9IDAuMjtcblxuXHRcdHRoaXMubWluRGlzdGFuY2UgPSAwO1xuXHRcdHRoaXMubWF4RGlzdGFuY2UgPSBJbmZpbml0eTtcblxuXHRcdHRoaXMua2V5cyA9IFsgJ0tleUEnIC8qQSovLCAnS2V5UycgLypTKi8sICdLZXlEJyAvKkQqLyBdO1xuXG5cdFx0dGhpcy5tb3VzZUJ1dHRvbnMgPSB7IExFRlQ6IE1PVVNFLlJPVEFURSwgTUlERExFOiBNT1VTRS5ET0xMWSwgUklHSFQ6IE1PVVNFLlBBTiB9O1xuXG5cdFx0Ly8gaW50ZXJuYWxzXG5cblx0XHR0aGlzLnRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRjb25zdCBFUFMgPSAwLjAwMDAwMTtcblxuXHRcdGNvbnN0IGxhc3RQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0bGV0IGxhc3Rab29tID0gMTtcblxuXHRcdGxldCBfc3RhdGUgPSBTVEFURS5OT05FLFxuXHRcdFx0X2tleVN0YXRlID0gU1RBVEUuTk9ORSxcblxuXHRcdFx0X3RvdWNoWm9vbURpc3RhbmNlU3RhcnQgPSAwLFxuXHRcdFx0X3RvdWNoWm9vbURpc3RhbmNlRW5kID0gMCxcblxuXHRcdFx0X2xhc3RBbmdsZSA9IDA7XG5cblx0XHRjb25zdCBfZXllID0gbmV3IFZlY3RvcjMoKSxcblxuXHRcdFx0X21vdmVQcmV2ID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdF9tb3ZlQ3VyciA9IG5ldyBWZWN0b3IyKCksXG5cblx0XHRcdF9sYXN0QXhpcyA9IG5ldyBWZWN0b3IzKCksXG5cblx0XHRcdF96b29tU3RhcnQgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0X3pvb21FbmQgPSBuZXcgVmVjdG9yMigpLFxuXG5cdFx0XHRfcGFuU3RhcnQgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0X3BhbkVuZCA9IG5ldyBWZWN0b3IyKCksXG5cblx0XHRcdF9wb2ludGVycyA9IFtdLFxuXHRcdFx0X3BvaW50ZXJQb3NpdGlvbnMgPSB7fTtcblxuXHRcdC8vIGZvciByZXNldFxuXG5cdFx0dGhpcy50YXJnZXQwID0gdGhpcy50YXJnZXQuY2xvbmUoKTtcblx0XHR0aGlzLnBvc2l0aW9uMCA9IHRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCk7XG5cdFx0dGhpcy51cDAgPSB0aGlzLm9iamVjdC51cC5jbG9uZSgpO1xuXHRcdHRoaXMuem9vbTAgPSB0aGlzLm9iamVjdC56b29tO1xuXG5cdFx0Ly8gbWV0aG9kc1xuXG5cdFx0dGhpcy5oYW5kbGVSZXNpemUgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IGJveCA9IHNjb3BlLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHQvLyBhZGp1c3RtZW50cyBjb21lIGZyb20gc2ltaWxhciBjb2RlIGluIHRoZSBqcXVlcnkgb2Zmc2V0KCkgZnVuY3Rpb25cblx0XHRcdGNvbnN0IGQgPSBzY29wZS5kb21FbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0c2NvcGUuc2NyZWVuLmxlZnQgPSBib3gubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCAtIGQuY2xpZW50TGVmdDtcblx0XHRcdHNjb3BlLnNjcmVlbi50b3AgPSBib3gudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gZC5jbGllbnRUb3A7XG5cdFx0XHRzY29wZS5zY3JlZW4ud2lkdGggPSBib3gud2lkdGg7XG5cdFx0XHRzY29wZS5zY3JlZW4uaGVpZ2h0ID0gYm94LmhlaWdodDtcblxuXHRcdH07XG5cblx0XHRjb25zdCBnZXRNb3VzZU9uU2NyZWVuID0gKCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBnZXRNb3VzZU9uU2NyZWVuKCBwYWdlWCwgcGFnZVkgKSB7XG5cblx0XHRcdFx0dmVjdG9yLnNldChcblx0XHRcdFx0XHQoIHBhZ2VYIC0gc2NvcGUuc2NyZWVuLmxlZnQgKSAvIHNjb3BlLnNjcmVlbi53aWR0aCxcblx0XHRcdFx0XHQoIHBhZ2VZIC0gc2NvcGUuc2NyZWVuLnRvcCApIC8gc2NvcGUuc2NyZWVuLmhlaWdodFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB2ZWN0b3I7XG5cblx0XHRcdH07XG5cblx0XHR9KCkgKTtcblxuXHRcdGNvbnN0IGdldE1vdXNlT25DaXJjbGUgPSAoIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc3QgdmVjdG9yID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGdldE1vdXNlT25DaXJjbGUoIHBhZ2VYLCBwYWdlWSApIHtcblxuXHRcdFx0XHR2ZWN0b3Iuc2V0KFxuXHRcdFx0XHRcdCggKCBwYWdlWCAtIHNjb3BlLnNjcmVlbi53aWR0aCAqIDAuNSAtIHNjb3BlLnNjcmVlbi5sZWZ0ICkgLyAoIHNjb3BlLnNjcmVlbi53aWR0aCAqIDAuNSApICksXG5cdFx0XHRcdFx0KCAoIHNjb3BlLnNjcmVlbi5oZWlnaHQgKyAyICogKCBzY29wZS5zY3JlZW4udG9wIC0gcGFnZVkgKSApIC8gc2NvcGUuc2NyZWVuLndpZHRoICkgLy8gc2NyZWVuLndpZHRoIGludGVudGlvbmFsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIHZlY3RvcjtcblxuXHRcdFx0fTtcblxuXHRcdH0oKSApO1xuXG5cdFx0dGhpcy5yb3RhdGVDYW1lcmEgPSAoIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc3QgYXhpcyA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpLFxuXHRcdFx0XHRleWVEaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRvYmplY3RVcERpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdG9iamVjdFNpZGV3YXlzRGlyZWN0aW9uID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0bW92ZURpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiByb3RhdGVDYW1lcmEoKSB7XG5cblx0XHRcdFx0bW92ZURpcmVjdGlvbi5zZXQoIF9tb3ZlQ3Vyci54IC0gX21vdmVQcmV2LngsIF9tb3ZlQ3Vyci55IC0gX21vdmVQcmV2LnksIDAgKTtcblx0XHRcdFx0bGV0IGFuZ2xlID0gbW92ZURpcmVjdGlvbi5sZW5ndGgoKTtcblxuXHRcdFx0XHRpZiAoIGFuZ2xlICkge1xuXG5cdFx0XHRcdFx0X2V5ZS5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKS5zdWIoIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRcdFx0ZXllRGlyZWN0aW9uLmNvcHkoIF9leWUgKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRvYmplY3RVcERpcmVjdGlvbi5jb3B5KCBzY29wZS5vYmplY3QudXAgKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRvYmplY3RTaWRld2F5c0RpcmVjdGlvbi5jcm9zc1ZlY3RvcnMoIG9iamVjdFVwRGlyZWN0aW9uLCBleWVEaXJlY3Rpb24gKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRcdG9iamVjdFVwRGlyZWN0aW9uLnNldExlbmd0aCggX21vdmVDdXJyLnkgLSBfbW92ZVByZXYueSApO1xuXHRcdFx0XHRcdG9iamVjdFNpZGV3YXlzRGlyZWN0aW9uLnNldExlbmd0aCggX21vdmVDdXJyLnggLSBfbW92ZVByZXYueCApO1xuXG5cdFx0XHRcdFx0bW92ZURpcmVjdGlvbi5jb3B5KCBvYmplY3RVcERpcmVjdGlvbi5hZGQoIG9iamVjdFNpZGV3YXlzRGlyZWN0aW9uICkgKTtcblxuXHRcdFx0XHRcdGF4aXMuY3Jvc3NWZWN0b3JzKCBtb3ZlRGlyZWN0aW9uLCBfZXllICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHRhbmdsZSAqPSBzY29wZS5yb3RhdGVTcGVlZDtcblx0XHRcdFx0XHRxdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICk7XG5cblx0XHRcdFx0XHRfZXllLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApO1xuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC51cC5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTtcblxuXHRcdFx0XHRcdF9sYXN0QXhpcy5jb3B5KCBheGlzICk7XG5cdFx0XHRcdFx0X2xhc3RBbmdsZSA9IGFuZ2xlO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoICEgc2NvcGUuc3RhdGljTW92aW5nICYmIF9sYXN0QW5nbGUgKSB7XG5cblx0XHRcdFx0XHRfbGFzdEFuZ2xlICo9IE1hdGguc3FydCggMS4wIC0gc2NvcGUuZHluYW1pY0RhbXBpbmdGYWN0b3IgKTtcblx0XHRcdFx0XHRfZXllLmNvcHkoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApLnN1Yiggc2NvcGUudGFyZ2V0ICk7XG5cdFx0XHRcdFx0cXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBfbGFzdEF4aXMsIF9sYXN0QW5nbGUgKTtcblx0XHRcdFx0XHRfZXllLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApO1xuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC51cC5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0X21vdmVQcmV2LmNvcHkoIF9tb3ZlQ3VyciApO1xuXG5cdFx0XHR9O1xuXG5cdFx0fSgpICk7XG5cblxuXHRcdHRoaXMuem9vbUNhbWVyYSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0bGV0IGZhY3RvcjtcblxuXHRcdFx0aWYgKCBfc3RhdGUgPT09IFNUQVRFLlRPVUNIX1pPT01fUEFOICkge1xuXG5cdFx0XHRcdGZhY3RvciA9IF90b3VjaFpvb21EaXN0YW5jZVN0YXJ0IC8gX3RvdWNoWm9vbURpc3RhbmNlRW5kO1xuXHRcdFx0XHRfdG91Y2hab29tRGlzdGFuY2VTdGFydCA9IF90b3VjaFpvb21EaXN0YW5jZUVuZDtcblxuXHRcdFx0XHRpZiAoIHNjb3BlLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhICkge1xuXG5cdFx0XHRcdFx0X2V5ZS5tdWx0aXBseVNjYWxhciggZmFjdG9yICk7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gLz0gZmFjdG9yO1xuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyYWNrYmFsbENvbnRyb2xzOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZScgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0ZmFjdG9yID0gMS4wICsgKCBfem9vbUVuZC55IC0gX3pvb21TdGFydC55ICkgKiBzY29wZS56b29tU3BlZWQ7XG5cblx0XHRcdFx0aWYgKCBmYWN0b3IgIT09IDEuMCAmJiBmYWN0b3IgPiAwLjAgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhICkge1xuXG5cdFx0XHRcdFx0XHRfZXllLm11bHRpcGx5U2NhbGFyKCBmYWN0b3IgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSApIHtcblxuXHRcdFx0XHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gLz0gZmFjdG9yO1xuXHRcdFx0XHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyYWNrYmFsbENvbnRyb2xzOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZScgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzY29wZS5zdGF0aWNNb3ZpbmcgKSB7XG5cblx0XHRcdFx0XHRfem9vbVN0YXJ0LmNvcHkoIF96b29tRW5kICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdF96b29tU3RhcnQueSArPSAoIF96b29tRW5kLnkgLSBfem9vbVN0YXJ0LnkgKSAqIHRoaXMuZHluYW1pY0RhbXBpbmdGYWN0b3I7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5wYW5DYW1lcmEgPSAoIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc3QgbW91c2VDaGFuZ2UgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRvYmplY3RVcCA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdHBhbiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBwYW5DYW1lcmEoKSB7XG5cblx0XHRcdFx0bW91c2VDaGFuZ2UuY29weSggX3BhbkVuZCApLnN1YiggX3BhblN0YXJ0ICk7XG5cblx0XHRcdFx0aWYgKCBtb3VzZUNoYW5nZS5sZW5ndGhTcSgpICkge1xuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHNjYWxlX3ggPSAoIHNjb3BlLm9iamVjdC5yaWdodCAtIHNjb3BlLm9iamVjdC5sZWZ0ICkgLyBzY29wZS5vYmplY3Quem9vbSAvIHNjb3BlLmRvbUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cdFx0XHRcdFx0XHRjb25zdCBzY2FsZV95ID0gKCBzY29wZS5vYmplY3QudG9wIC0gc2NvcGUub2JqZWN0LmJvdHRvbSApIC8gc2NvcGUub2JqZWN0Lnpvb20gLyBzY29wZS5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG5cdFx0XHRcdFx0XHRtb3VzZUNoYW5nZS54ICo9IHNjYWxlX3g7XG5cdFx0XHRcdFx0XHRtb3VzZUNoYW5nZS55ICo9IHNjYWxlX3k7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtb3VzZUNoYW5nZS5tdWx0aXBseVNjYWxhciggX2V5ZS5sZW5ndGgoKSAqIHNjb3BlLnBhblNwZWVkICk7XG5cblx0XHRcdFx0XHRwYW4uY29weSggX2V5ZSApLmNyb3NzKCBzY29wZS5vYmplY3QudXAgKS5zZXRMZW5ndGgoIG1vdXNlQ2hhbmdlLnggKTtcblx0XHRcdFx0XHRwYW4uYWRkKCBvYmplY3RVcC5jb3B5KCBzY29wZS5vYmplY3QudXAgKS5zZXRMZW5ndGgoIG1vdXNlQ2hhbmdlLnkgKSApO1xuXG5cdFx0XHRcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmFkZCggcGFuICk7XG5cdFx0XHRcdFx0c2NvcGUudGFyZ2V0LmFkZCggcGFuICk7XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLnN0YXRpY01vdmluZyApIHtcblxuXHRcdFx0XHRcdFx0X3BhblN0YXJ0LmNvcHkoIF9wYW5FbmQgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdF9wYW5TdGFydC5hZGQoIG1vdXNlQ2hhbmdlLnN1YlZlY3RvcnMoIF9wYW5FbmQsIF9wYW5TdGFydCApLm11bHRpcGx5U2NhbGFyKCBzY29wZS5keW5hbWljRGFtcGluZ0ZhY3RvciApICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9O1xuXG5cdFx0fSgpICk7XG5cblx0XHR0aGlzLmNoZWNrRGlzdGFuY2VzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRpZiAoICEgc2NvcGUubm9ab29tIHx8ICEgc2NvcGUubm9QYW4gKSB7XG5cblx0XHRcdFx0aWYgKCBfZXllLmxlbmd0aFNxKCkgPiBzY29wZS5tYXhEaXN0YW5jZSAqIHNjb3BlLm1heERpc3RhbmNlICkge1xuXG5cdFx0XHRcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmFkZFZlY3RvcnMoIHNjb3BlLnRhcmdldCwgX2V5ZS5zZXRMZW5ndGgoIHNjb3BlLm1heERpc3RhbmNlICkgKTtcblx0XHRcdFx0XHRfem9vbVN0YXJ0LmNvcHkoIF96b29tRW5kICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggX2V5ZS5sZW5ndGhTcSgpIDwgc2NvcGUubWluRGlzdGFuY2UgKiBzY29wZS5taW5EaXN0YW5jZSApIHtcblxuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5hZGRWZWN0b3JzKCBzY29wZS50YXJnZXQsIF9leWUuc2V0TGVuZ3RoKCBzY29wZS5taW5EaXN0YW5jZSApICk7XG5cdFx0XHRcdFx0X3pvb21TdGFydC5jb3B5KCBfem9vbUVuZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRfZXllLnN1YlZlY3RvcnMoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiwgc2NvcGUudGFyZ2V0ICk7XG5cblx0XHRcdGlmICggISBzY29wZS5ub1JvdGF0ZSApIHtcblxuXHRcdFx0XHRzY29wZS5yb3RhdGVDYW1lcmEoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEgc2NvcGUubm9ab29tICkge1xuXG5cdFx0XHRcdHNjb3BlLnpvb21DYW1lcmEoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEgc2NvcGUubm9QYW4gKSB7XG5cblx0XHRcdFx0c2NvcGUucGFuQ2FtZXJhKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmFkZFZlY3RvcnMoIHNjb3BlLnRhcmdldCwgX2V5ZSApO1xuXG5cdFx0XHRpZiAoIHNjb3BlLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhICkge1xuXG5cdFx0XHRcdHNjb3BlLmNoZWNrRGlzdGFuY2VzKCk7XG5cblx0XHRcdFx0c2NvcGUub2JqZWN0Lmxvb2tBdCggc2NvcGUudGFyZ2V0ICk7XG5cblx0XHRcdFx0aWYgKCBsYXN0UG9zaXRpb24uZGlzdGFuY2VUb1NxdWFyZWQoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApID4gRVBTICkge1xuXG5cdFx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX2NoYW5nZUV2ZW50ICk7XG5cblx0XHRcdFx0XHRsYXN0UG9zaXRpb24uY29weSggc2NvcGUub2JqZWN0LnBvc2l0aW9uICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBzY29wZS5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7XG5cblx0XHRcdFx0c2NvcGUub2JqZWN0Lmxvb2tBdCggc2NvcGUudGFyZ2V0ICk7XG5cblx0XHRcdFx0aWYgKCBsYXN0UG9zaXRpb24uZGlzdGFuY2VUb1NxdWFyZWQoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApID4gRVBTIHx8IGxhc3Rab29tICE9PSBzY29wZS5vYmplY3Quem9vbSApIHtcblxuXHRcdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9jaGFuZ2VFdmVudCApO1xuXG5cdFx0XHRcdFx0bGFzdFBvc2l0aW9uLmNvcHkoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApO1xuXHRcdFx0XHRcdGxhc3Rab29tID0gc2NvcGUub2JqZWN0Lnpvb207XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyYWNrYmFsbENvbnRyb2xzOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZScgKTtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdF9zdGF0ZSA9IFNUQVRFLk5PTkU7XG5cdFx0XHRfa2V5U3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0XHRzY29wZS50YXJnZXQuY29weSggc2NvcGUudGFyZ2V0MCApO1xuXHRcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmNvcHkoIHNjb3BlLnBvc2l0aW9uMCApO1xuXHRcdFx0c2NvcGUub2JqZWN0LnVwLmNvcHkoIHNjb3BlLnVwMCApO1xuXHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBzY29wZS56b29tMDtcblxuXHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdFx0X2V5ZS5zdWJWZWN0b3JzKCBzY29wZS5vYmplY3QucG9zaXRpb24sIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRzY29wZS5vYmplY3QubG9va0F0KCBzY29wZS50YXJnZXQgKTtcblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX2NoYW5nZUV2ZW50ICk7XG5cblx0XHRcdGxhc3RQb3NpdGlvbi5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKTtcblx0XHRcdGxhc3Rab29tID0gc2NvcGUub2JqZWN0Lnpvb207XG5cblx0XHR9O1xuXG5cdFx0Ly8gbGlzdGVuZXJzXG5cblx0XHRmdW5jdGlvbiBvblBvaW50ZXJEb3duKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBfcG9pbnRlcnMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUoIGV2ZW50LnBvaW50ZXJJZCApO1xuXG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSApO1xuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVydXAnLCBvblBvaW50ZXJVcCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGFkZFBvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdGlmICggZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgKSB7XG5cblx0XHRcdFx0b25Ub3VjaFN0YXJ0KCBldmVudCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdG9uTW91c2VEb3duKCBldmVudCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblBvaW50ZXJNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyApIHtcblxuXHRcdFx0XHRvblRvdWNoTW92ZSggZXZlbnQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRvbk1vdXNlTW92ZSggZXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyVXAoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnICkge1xuXG5cdFx0XHRcdG9uVG91Y2hFbmQoIGV2ZW50ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0b25Nb3VzZVVwKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9cblxuXHRcdFx0cmVtb3ZlUG9pbnRlciggZXZlbnQgKTtcblxuXHRcdFx0aWYgKCBfcG9pbnRlcnMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKCBldmVudC5wb2ludGVySWQgKTtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUgKTtcblx0XHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcnVwJywgb25Qb2ludGVyVXAgKTtcblxuXHRcdFx0fVxuXG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblBvaW50ZXJDYW5jZWwoIGV2ZW50ICkge1xuXG5cdFx0XHRyZW1vdmVQb2ludGVyKCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24ga2V5ZG93biggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIGtleWRvd24gKTtcblxuXHRcdFx0aWYgKCBfa2V5U3RhdGUgIT09IFNUQVRFLk5PTkUgKSB7XG5cblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBldmVudC5jb2RlID09PSBzY29wZS5rZXlzWyBTVEFURS5ST1RBVEUgXSAmJiAhIHNjb3BlLm5vUm90YXRlICkge1xuXG5cdFx0XHRcdF9rZXlTdGF0ZSA9IFNUQVRFLlJPVEFURTtcblxuXHRcdFx0fSBlbHNlIGlmICggZXZlbnQuY29kZSA9PT0gc2NvcGUua2V5c1sgU1RBVEUuWk9PTSBdICYmICEgc2NvcGUubm9ab29tICkge1xuXG5cdFx0XHRcdF9rZXlTdGF0ZSA9IFNUQVRFLlpPT007XG5cblx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LmNvZGUgPT09IHNjb3BlLmtleXNbIFNUQVRFLlBBTiBdICYmICEgc2NvcGUubm9QYW4gKSB7XG5cblx0XHRcdFx0X2tleVN0YXRlID0gU1RBVEUuUEFOO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBrZXl1cCgpIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0X2tleVN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywga2V5ZG93biApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZURvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIF9zdGF0ZSA9PT0gU1RBVEUuTk9ORSApIHtcblxuXHRcdFx0XHRzd2l0Y2ggKCBldmVudC5idXR0b24gKSB7XG5cblx0XHRcdFx0XHRjYXNlIHNjb3BlLm1vdXNlQnV0dG9ucy5MRUZUOlxuXHRcdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuUk9UQVRFO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIHNjb3BlLm1vdXNlQnV0dG9ucy5NSURETEU6XG5cdFx0XHRcdFx0XHRfc3RhdGUgPSBTVEFURS5aT09NO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIHNjb3BlLm1vdXNlQnV0dG9ucy5SSUdIVDpcblx0XHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlBBTjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXRlID0gKCBfa2V5U3RhdGUgIT09IFNUQVRFLk5PTkUgKSA/IF9rZXlTdGF0ZSA6IF9zdGF0ZTtcblxuXHRcdFx0aWYgKCBzdGF0ZSA9PT0gU1RBVEUuUk9UQVRFICYmICEgc2NvcGUubm9Sb3RhdGUgKSB7XG5cblx0XHRcdFx0X21vdmVDdXJyLmNvcHkoIGdldE1vdXNlT25DaXJjbGUoIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggc3RhdGUgPT09IFNUQVRFLlpPT00gJiYgISBzY29wZS5ub1pvb20gKSB7XG5cblx0XHRcdFx0X3pvb21TdGFydC5jb3B5KCBnZXRNb3VzZU9uU2NyZWVuKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXHRcdFx0XHRfem9vbUVuZC5jb3B5KCBfem9vbVN0YXJ0ICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHN0YXRlID09PSBTVEFURS5QQU4gJiYgISBzY29wZS5ub1BhbiApIHtcblxuXHRcdFx0XHRfcGFuU3RhcnQuY29weSggZ2V0TW91c2VPblNjcmVlbiggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICkgKTtcblx0XHRcdFx0X3BhbkVuZC5jb3B5KCBfcGFuU3RhcnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfc3RhcnRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZU1vdmUoIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBzdGF0ZSA9ICggX2tleVN0YXRlICE9PSBTVEFURS5OT05FICkgPyBfa2V5U3RhdGUgOiBfc3RhdGU7XG5cblx0XHRcdGlmICggc3RhdGUgPT09IFNUQVRFLlJPVEFURSAmJiAhIHNjb3BlLm5vUm90YXRlICkge1xuXG5cdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblx0XHRcdFx0X21vdmVDdXJyLmNvcHkoIGdldE1vdXNlT25DaXJjbGUoIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHN0YXRlID09PSBTVEFURS5aT09NICYmICEgc2NvcGUubm9ab29tICkge1xuXG5cdFx0XHRcdF96b29tRW5kLmNvcHkoIGdldE1vdXNlT25TY3JlZW4oIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHN0YXRlID09PSBTVEFURS5QQU4gJiYgISBzY29wZS5ub1BhbiApIHtcblxuXHRcdFx0XHRfcGFuRW5kLmNvcHkoIGdldE1vdXNlT25TY3JlZW4oIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uTW91c2VVcCgpIHtcblxuXHRcdFx0X3N0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX2VuZEV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvbk1vdXNlV2hlZWwoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIHNjb3BlLm5vWm9vbSA9PT0gdHJ1ZSApIHJldHVybjtcblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0c3dpdGNoICggZXZlbnQuZGVsdGFNb2RlICkge1xuXG5cdFx0XHRcdGNhc2UgMjpcblx0XHRcdFx0XHQvLyBab29tIGluIHBhZ2VzXG5cdFx0XHRcdFx0X3pvb21TdGFydC55IC09IGV2ZW50LmRlbHRhWSAqIDAuMDI1O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHQvLyBab29tIGluIGxpbmVzXG5cdFx0XHRcdFx0X3pvb21TdGFydC55IC09IGV2ZW50LmRlbHRhWSAqIDAuMDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyB1bmRlZmluZWQsIDAsIGFzc3VtZSBwaXhlbHNcblx0XHRcdFx0XHRfem9vbVN0YXJ0LnkgLT0gZXZlbnQuZGVsdGFZICogMC4wMDAyNTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfc3RhcnRFdmVudCApO1xuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX2VuZEV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblRvdWNoU3RhcnQoIGV2ZW50ICkge1xuXG5cdFx0XHR0cmFja1BvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdHN3aXRjaCAoIF9wb2ludGVycy5sZW5ndGggKSB7XG5cblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlRPVUNIX1JPVEFURTtcblx0XHRcdFx0XHRfbW92ZUN1cnIuY29weSggZ2V0TW91c2VPbkNpcmNsZSggX3BvaW50ZXJzWyAwIF0ucGFnZVgsIF9wb2ludGVyc1sgMCBdLnBhZ2VZICkgKTtcblx0XHRcdFx0XHRfbW92ZVByZXYuY29weSggX21vdmVDdXJyICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDogLy8gMiBvciBtb3JlXG5cdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuVE9VQ0hfWk9PTV9QQU47XG5cdFx0XHRcdFx0Y29uc3QgZHggPSBfcG9pbnRlcnNbIDAgXS5wYWdlWCAtIF9wb2ludGVyc1sgMSBdLnBhZ2VYO1xuXHRcdFx0XHRcdGNvbnN0IGR5ID0gX3BvaW50ZXJzWyAwIF0ucGFnZVkgLSBfcG9pbnRlcnNbIDEgXS5wYWdlWTtcblx0XHRcdFx0XHRfdG91Y2hab29tRGlzdGFuY2VFbmQgPSBfdG91Y2hab29tRGlzdGFuY2VTdGFydCA9IE1hdGguc3FydCggZHggKiBkeCArIGR5ICogZHkgKTtcblxuXHRcdFx0XHRcdGNvbnN0IHggPSAoIF9wb2ludGVyc1sgMCBdLnBhZ2VYICsgX3BvaW50ZXJzWyAxIF0ucGFnZVggKSAvIDI7XG5cdFx0XHRcdFx0Y29uc3QgeSA9ICggX3BvaW50ZXJzWyAwIF0ucGFnZVkgKyBfcG9pbnRlcnNbIDEgXS5wYWdlWSApIC8gMjtcblx0XHRcdFx0XHRfcGFuU3RhcnQuY29weSggZ2V0TW91c2VPblNjcmVlbiggeCwgeSApICk7XG5cdFx0XHRcdFx0X3BhbkVuZC5jb3B5KCBfcGFuU3RhcnQgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfc3RhcnRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Ub3VjaE1vdmUoIGV2ZW50ICkge1xuXG5cdFx0XHR0cmFja1BvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdHN3aXRjaCAoIF9wb2ludGVycy5sZW5ndGggKSB7XG5cblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblx0XHRcdFx0XHRfbW92ZUN1cnIuY29weSggZ2V0TW91c2VPbkNpcmNsZSggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICkgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OiAvLyAyIG9yIG1vcmVcblxuXHRcdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKCBldmVudCApO1xuXG5cdFx0XHRcdFx0Y29uc3QgZHggPSBldmVudC5wYWdlWCAtIHBvc2l0aW9uLng7XG5cdFx0XHRcdFx0Y29uc3QgZHkgPSBldmVudC5wYWdlWSAtIHBvc2l0aW9uLnk7XG5cdFx0XHRcdFx0X3RvdWNoWm9vbURpc3RhbmNlRW5kID0gTWF0aC5zcXJ0KCBkeCAqIGR4ICsgZHkgKiBkeSApO1xuXG5cdFx0XHRcdFx0Y29uc3QgeCA9ICggZXZlbnQucGFnZVggKyBwb3NpdGlvbi54ICkgLyAyO1xuXHRcdFx0XHRcdGNvbnN0IHkgPSAoIGV2ZW50LnBhZ2VZICsgcG9zaXRpb24ueSApIC8gMjtcblx0XHRcdFx0XHRfcGFuRW5kLmNvcHkoIGdldE1vdXNlT25TY3JlZW4oIHgsIHkgKSApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblRvdWNoRW5kKCBldmVudCApIHtcblxuXHRcdFx0c3dpdGNoICggX3BvaW50ZXJzLmxlbmd0aCApIHtcblxuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuTk9ORTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuVE9VQ0hfUk9UQVRFO1xuXHRcdFx0XHRcdF9tb3ZlQ3Vyci5jb3B5KCBnZXRNb3VzZU9uQ2lyY2xlKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXHRcdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuVE9VQ0hfWk9PTV9QQU47XG5cdFx0XHRcdFx0X21vdmVDdXJyLmNvcHkoIGdldE1vdXNlT25DaXJjbGUoIGV2ZW50LnBhZ2VYIC0gX21vdmVQcmV2LnBhZ2VYLCBldmVudC5wYWdlWSAtIF9tb3ZlUHJldi5wYWdlWSApICk7XG5cdFx0XHRcdFx0X21vdmVQcmV2LmNvcHkoIF9tb3ZlQ3VyciApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9lbmRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY29udGV4dG1lbnUoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWRkUG9pbnRlciggZXZlbnQgKSB7XG5cblx0XHRcdF9wb2ludGVycy5wdXNoKCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVtb3ZlUG9pbnRlciggZXZlbnQgKSB7XG5cblx0XHRcdGRlbGV0ZSBfcG9pbnRlclBvc2l0aW9uc1sgZXZlbnQucG9pbnRlcklkIF07XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IF9wb2ludGVycy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBfcG9pbnRlcnNbIGkgXS5wb2ludGVySWQgPT0gZXZlbnQucG9pbnRlcklkICkge1xuXG5cdFx0XHRcdFx0X3BvaW50ZXJzLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyYWNrUG9pbnRlciggZXZlbnQgKSB7XG5cblx0XHRcdGxldCBwb3NpdGlvbiA9IF9wb2ludGVyUG9zaXRpb25zWyBldmVudC5wb2ludGVySWQgXTtcblxuXHRcdFx0aWYgKCBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdFx0X3BvaW50ZXJQb3NpdGlvbnNbIGV2ZW50LnBvaW50ZXJJZCBdID0gcG9zaXRpb247XG5cblx0XHRcdH1cblxuXHRcdFx0cG9zaXRpb24uc2V0KCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ZXIgPSAoIGV2ZW50LnBvaW50ZXJJZCA9PT0gX3BvaW50ZXJzWyAwIF0ucG9pbnRlcklkICkgPyBfcG9pbnRlcnNbIDEgXSA6IF9wb2ludGVyc1sgMCBdO1xuXG5cdFx0XHRyZXR1cm4gX3BvaW50ZXJQb3NpdGlvbnNbIHBvaW50ZXIucG9pbnRlcklkIF07XG5cblx0XHR9XG5cblx0XHR0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NvbnRleHRtZW51JywgY29udGV4dG1lbnUgKTtcblxuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duICk7XG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyY2FuY2VsJywgb25Qb2ludGVyQ2FuY2VsICk7XG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3aGVlbCcsIG9uTW91c2VXaGVlbCApO1xuXG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUgKTtcblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJ1cCcsIG9uUG9pbnRlclVwICk7XG5cblx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIGtleWRvd24gKTtcblx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5dXAnLCBrZXl1cCApO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnY29udGV4dG1lbnUnLCBjb250ZXh0bWVudSApO1xuXG5cdFx0dGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyZG93bicsIG9uUG9pbnRlckRvd24gKTtcblx0XHR0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJjYW5jZWwnLCBvblBvaW50ZXJDYW5jZWwgKTtcblx0XHR0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3doZWVsJywgb25Nb3VzZVdoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0gKTtcblxuXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywga2V5ZG93biApO1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAna2V5dXAnLCBrZXl1cCApO1xuXG5cdFx0dGhpcy5oYW5kbGVSZXNpemUoKTtcblxuXHRcdC8vIGZvcmNlIGFuIHVwZGF0ZSBhdCBzdGFydFxuXHRcdHRoaXMudXBkYXRlKCk7XG5cblx0fVxuXG59XG5cbmV4cG9ydCB7IFRyYWNrYmFsbENvbnRyb2xzIH07XG4iLCJpbXBvcnQge1xuXHRCdWZmZXJHZW9tZXRyeSxcblx0RmlsZUxvYWRlcixcblx0RmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSxcblx0TG9hZGVyLFxuXHRMb2FkZXJVdGlscyxcblx0UG9pbnRzLFxuXHRQb2ludHNNYXRlcmlhbFxufSBmcm9tICd0aHJlZSc7XG5cbmNsYXNzIFBDRExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdFx0dGhpcy5saXR0bGVFbmRpYW4gPSB0cnVlO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHNjb3BlLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCAnYXJyYXlidWZmZXInICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHNjb3BlLnJlcXVlc3RIZWFkZXIgKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCBzY29wZS53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGRhdGEgKSB7XG5cblx0XHRcdHRyeSB7XG5cblx0XHRcdFx0b25Mb2FkKCBzY29wZS5wYXJzZSggZGF0YSwgdXJsICkgKTtcblxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0aWYgKCBvbkVycm9yICkge1xuXG5cdFx0XHRcdFx0b25FcnJvciggZSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvciApO1xuXG5cdH1cblxuXHRwYXJzZSggZGF0YSwgdXJsICkge1xuXG5cdFx0Ly8gZnJvbSBodHRwczovL2dpdGxhYi5jb20vdGFrZXR3by90aHJlZS1wY2QtbG9hZGVyL2Jsb2IvbWFzdGVyL2RlY29tcHJlc3MtbHpmLmpzXG5cblx0XHRmdW5jdGlvbiBkZWNvbXByZXNzTFpGKCBpbkRhdGEsIG91dExlbmd0aCApIHtcblxuXHRcdFx0Y29uc3QgaW5MZW5ndGggPSBpbkRhdGEubGVuZ3RoO1xuXHRcdFx0Y29uc3Qgb3V0RGF0YSA9IG5ldyBVaW50OEFycmF5KCBvdXRMZW5ndGggKTtcblx0XHRcdGxldCBpblB0ciA9IDA7XG5cdFx0XHRsZXQgb3V0UHRyID0gMDtcblx0XHRcdGxldCBjdHJsO1xuXHRcdFx0bGV0IGxlbjtcblx0XHRcdGxldCByZWY7XG5cdFx0XHRkbyB7XG5cblx0XHRcdFx0Y3RybCA9IGluRGF0YVsgaW5QdHIgKysgXTtcblx0XHRcdFx0aWYgKCBjdHJsIDwgKCAxIDw8IDUgKSApIHtcblxuXHRcdFx0XHRcdGN0cmwgKys7XG5cdFx0XHRcdFx0aWYgKCBvdXRQdHIgKyBjdHJsID4gb3V0TGVuZ3RoICkgdGhyb3cgbmV3IEVycm9yKCAnT3V0cHV0IGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoJyApO1xuXHRcdFx0XHRcdGlmICggaW5QdHIgKyBjdHJsID4gaW5MZW5ndGggKSB0aHJvdyBuZXcgRXJyb3IoICdJbnZhbGlkIGNvbXByZXNzZWQgZGF0YScgKTtcblx0XHRcdFx0XHRkbyB7XG5cblx0XHRcdFx0XHRcdG91dERhdGFbIG91dFB0ciArKyBdID0gaW5EYXRhWyBpblB0ciArKyBdO1xuXG5cdFx0XHRcdFx0fSB3aGlsZSAoIC0tIGN0cmwgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0bGVuID0gY3RybCA+PiA1O1xuXHRcdFx0XHRcdHJlZiA9IG91dFB0ciAtICggKCBjdHJsICYgMHgxZiApIDw8IDggKSAtIDE7XG5cdFx0XHRcdFx0aWYgKCBpblB0ciA+PSBpbkxlbmd0aCApIHRocm93IG5ldyBFcnJvciggJ0ludmFsaWQgY29tcHJlc3NlZCBkYXRhJyApO1xuXHRcdFx0XHRcdGlmICggbGVuID09PSA3ICkge1xuXG5cdFx0XHRcdFx0XHRsZW4gKz0gaW5EYXRhWyBpblB0ciArKyBdO1xuXHRcdFx0XHRcdFx0aWYgKCBpblB0ciA+PSBpbkxlbmd0aCApIHRocm93IG5ldyBFcnJvciggJ0ludmFsaWQgY29tcHJlc3NlZCBkYXRhJyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVmIC09IGluRGF0YVsgaW5QdHIgKysgXTtcblx0XHRcdFx0XHRpZiAoIG91dFB0ciArIGxlbiArIDIgPiBvdXRMZW5ndGggKSB0aHJvdyBuZXcgRXJyb3IoICdPdXRwdXQgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2gnICk7XG5cdFx0XHRcdFx0aWYgKCByZWYgPCAwICkgdGhyb3cgbmV3IEVycm9yKCAnSW52YWxpZCBjb21wcmVzc2VkIGRhdGEnICk7XG5cdFx0XHRcdFx0aWYgKCByZWYgPj0gb3V0UHRyICkgdGhyb3cgbmV3IEVycm9yKCAnSW52YWxpZCBjb21wcmVzc2VkIGRhdGEnICk7XG5cdFx0XHRcdFx0ZG8ge1xuXG5cdFx0XHRcdFx0XHRvdXREYXRhWyBvdXRQdHIgKysgXSA9IG91dERhdGFbIHJlZiArKyBdO1xuXG5cdFx0XHRcdFx0fSB3aGlsZSAoIC0tIGxlbiArIDIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gd2hpbGUgKCBpblB0ciA8IGluTGVuZ3RoICk7XG5cblx0XHRcdHJldHVybiBvdXREYXRhO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcGFyc2VIZWFkZXIoIGRhdGEgKSB7XG5cblx0XHRcdGNvbnN0IFBDRGhlYWRlciA9IHt9O1xuXHRcdFx0Y29uc3QgcmVzdWx0MSA9IGRhdGEuc2VhcmNoKCAvW1xcclxcbl1EQVRBXFxzKFxcUyopXFxzL2kgKTtcblx0XHRcdGNvbnN0IHJlc3VsdDIgPSAvW1xcclxcbl1EQVRBXFxzKFxcUyopXFxzL2kuZXhlYyggZGF0YS5zdWJzdHIoIHJlc3VsdDEgLSAxICkgKTtcblxuXHRcdFx0UENEaGVhZGVyLmRhdGEgPSByZXN1bHQyWyAxIF07XG5cdFx0XHRQQ0RoZWFkZXIuaGVhZGVyTGVuID0gcmVzdWx0MlsgMCBdLmxlbmd0aCArIHJlc3VsdDE7XG5cdFx0XHRQQ0RoZWFkZXIuc3RyID0gZGF0YS5zdWJzdHIoIDAsIFBDRGhlYWRlci5oZWFkZXJMZW4gKTtcblxuXHRcdFx0Ly8gcmVtb3ZlIGNvbW1lbnRzXG5cblx0XHRcdFBDRGhlYWRlci5zdHIgPSBQQ0RoZWFkZXIuc3RyLnJlcGxhY2UoIC9cXCMuKi9naSwgJycgKTtcblxuXHRcdFx0Ly8gcGFyc2VcblxuXHRcdFx0UENEaGVhZGVyLnZlcnNpb24gPSAvVkVSU0lPTiAoLiopL2kuZXhlYyggUENEaGVhZGVyLnN0ciApO1xuXHRcdFx0UENEaGVhZGVyLmZpZWxkcyA9IC9GSUVMRFMgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci5zaXplID0gL1NJWkUgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci50eXBlID0gL1RZUEUgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci5jb3VudCA9IC9DT1VOVCAoLiopL2kuZXhlYyggUENEaGVhZGVyLnN0ciApO1xuXHRcdFx0UENEaGVhZGVyLndpZHRoID0gL1dJRFRIICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cdFx0XHRQQ0RoZWFkZXIuaGVpZ2h0ID0gL0hFSUdIVCAoLiopL2kuZXhlYyggUENEaGVhZGVyLnN0ciApO1xuXHRcdFx0UENEaGVhZGVyLnZpZXdwb2ludCA9IC9WSUVXUE9JTlQgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci5wb2ludHMgPSAvUE9JTlRTICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cblx0XHRcdC8vIGV2YWx1YXRlXG5cblx0XHRcdGlmICggUENEaGVhZGVyLnZlcnNpb24gIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIudmVyc2lvbiA9IHBhcnNlRmxvYXQoIFBDRGhlYWRlci52ZXJzaW9uWyAxIF0gKTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIuZmllbGRzICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLmZpZWxkcyA9IFBDRGhlYWRlci5maWVsZHNbIDEgXS5zcGxpdCggJyAnICk7XG5cblx0XHRcdGlmICggUENEaGVhZGVyLnR5cGUgIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIudHlwZSA9IFBDRGhlYWRlci50eXBlWyAxIF0uc3BsaXQoICcgJyApO1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci53aWR0aCAhPT0gbnVsbCApXG5cdFx0XHRcdFBDRGhlYWRlci53aWR0aCA9IHBhcnNlSW50KCBQQ0RoZWFkZXIud2lkdGhbIDEgXSApO1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci5oZWlnaHQgIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIuaGVpZ2h0ID0gcGFyc2VJbnQoIFBDRGhlYWRlci5oZWlnaHRbIDEgXSApO1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci52aWV3cG9pbnQgIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIudmlld3BvaW50ID0gUENEaGVhZGVyLnZpZXdwb2ludFsgMSBdO1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci5wb2ludHMgIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIucG9pbnRzID0gcGFyc2VJbnQoIFBDRGhlYWRlci5wb2ludHNbIDEgXSwgMTAgKTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIucG9pbnRzID09PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLnBvaW50cyA9IFBDRGhlYWRlci53aWR0aCAqIFBDRGhlYWRlci5oZWlnaHQ7XG5cblx0XHRcdGlmICggUENEaGVhZGVyLnNpemUgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0UENEaGVhZGVyLnNpemUgPSBQQ0RoZWFkZXIuc2l6ZVsgMSBdLnNwbGl0KCAnICcgKS5tYXAoIGZ1bmN0aW9uICggeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggeCwgMTAgKTtcblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIuY291bnQgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0UENEaGVhZGVyLmNvdW50ID0gUENEaGVhZGVyLmNvdW50WyAxIF0uc3BsaXQoICcgJyApLm1hcCggZnVuY3Rpb24gKCB4ICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB4LCAxMCApO1xuXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRQQ0RoZWFkZXIuY291bnQgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBQQ0RoZWFkZXIuZmllbGRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRQQ0RoZWFkZXIuY291bnQucHVzaCggMSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRQQ0RoZWFkZXIub2Zmc2V0ID0ge307XG5cblx0XHRcdGxldCBzaXplU3VtID0gMDtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gUENEaGVhZGVyLmZpZWxkcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGlmICggUENEaGVhZGVyLmRhdGEgPT09ICdhc2NpaScgKSB7XG5cblx0XHRcdFx0XHRQQ0RoZWFkZXIub2Zmc2V0WyBQQ0RoZWFkZXIuZmllbGRzWyBpIF0gXSA9IGk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFBDRGhlYWRlci5vZmZzZXRbIFBDRGhlYWRlci5maWVsZHNbIGkgXSBdID0gc2l6ZVN1bTtcblx0XHRcdFx0XHRzaXplU3VtICs9IFBDRGhlYWRlci5zaXplWyBpIF0gKiBQQ0RoZWFkZXIuY291bnRbIGkgXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gZm9yIGJpbmFyeSBvbmx5XG5cblx0XHRcdFBDRGhlYWRlci5yb3dTaXplID0gc2l6ZVN1bTtcblxuXHRcdFx0cmV0dXJuIFBDRGhlYWRlcjtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRleHREYXRhID0gTG9hZGVyVXRpbHMuZGVjb2RlVGV4dCggbmV3IFVpbnQ4QXJyYXkoIGRhdGEgKSApO1xuXG5cdFx0Ly8gcGFyc2UgaGVhZGVyIChhbHdheXMgYXNjaWkgZm9ybWF0KVxuXG5cdFx0Y29uc3QgUENEaGVhZGVyID0gcGFyc2VIZWFkZXIoIHRleHREYXRhICk7XG5cblx0XHQvLyBwYXJzZSBkYXRhXG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbCA9IFtdO1xuXHRcdGNvbnN0IGNvbG9yID0gW107XG5cblx0XHQvLyBhc2NpaVxuXG5cdFx0aWYgKCBQQ0RoZWFkZXIuZGF0YSA9PT0gJ2FzY2lpJyApIHtcblxuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gUENEaGVhZGVyLm9mZnNldDtcblx0XHRcdGNvbnN0IHBjZERhdGEgPSB0ZXh0RGF0YS5zdWJzdHIoIFBDRGhlYWRlci5oZWFkZXJMZW4gKTtcblx0XHRcdGNvbnN0IGxpbmVzID0gcGNkRGF0YS5zcGxpdCggJ1xcbicgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGxpbmVzWyBpIF0gPT09ICcnICkgY29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzWyBpIF0uc3BsaXQoICcgJyApO1xuXG5cdFx0XHRcdGlmICggb2Zmc2V0LnggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHBvc2l0aW9uLnB1c2goIHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC54IF0gKSApO1xuXHRcdFx0XHRcdHBvc2l0aW9uLnB1c2goIHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC55IF0gKSApO1xuXHRcdFx0XHRcdHBvc2l0aW9uLnB1c2goIHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC56IF0gKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG9mZnNldC5yZ2IgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHJnYiA9IHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC5yZ2IgXSApO1xuXHRcdFx0XHRcdGNvbnN0IHIgPSAoIHJnYiA+PiAxNiApICYgMHgwMDAwZmY7XG5cdFx0XHRcdFx0Y29uc3QgZyA9ICggcmdiID4+IDggKSAmIDB4MDAwMGZmO1xuXHRcdFx0XHRcdGNvbnN0IGIgPSAoIHJnYiA+PiAwICkgJiAweDAwMDBmZjtcblx0XHRcdFx0XHRjb2xvci5wdXNoKCByIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggb2Zmc2V0Lm5vcm1hbF94ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRub3JtYWwucHVzaCggcGFyc2VGbG9hdCggbGluZVsgb2Zmc2V0Lm5vcm1hbF94IF0gKSApO1xuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQubm9ybWFsX3kgXSApICk7XG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC5ub3JtYWxfeiBdICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJpbmFyeS1jb21wcmVzc2VkXG5cblx0XHQvLyBub3JtYWxseSBkYXRhIGluIFBDRCBmaWxlcyBhcmUgb3JnYW5pemVkIGFzIGFycmF5IG9mIHN0cnVjdHVyZXM6IFhZWlJHQlhZWlJHQlxuXHRcdC8vIGJpbmFyeSBjb21wcmVzc2VkIFBDRCBmaWxlcyBvcmdhbml6ZSB0aGVpciBkYXRhIGFzIHN0cnVjdHVyZSBvZiBhcnJheXM6IFhYWVlaWlJHQlJHQlxuXHRcdC8vIHRoYXQgcmVxdWlyZXMgYSB0b3RhbGx5IGRpZmZlcmVudCBwYXJzaW5nIGFwcHJvYWNoIGNvbXBhcmVkIHRvIG5vbi1jb21wcmVzc2VkIGRhdGFcblxuXHRcdGlmICggUENEaGVhZGVyLmRhdGEgPT09ICdiaW5hcnlfY29tcHJlc3NlZCcgKSB7XG5cblx0XHRcdGNvbnN0IHNpemVzID0gbmV3IFVpbnQzMkFycmF5KCBkYXRhLnNsaWNlKCBQQ0RoZWFkZXIuaGVhZGVyTGVuLCBQQ0RoZWFkZXIuaGVhZGVyTGVuICsgOCApICk7XG5cdFx0XHRjb25zdCBjb21wcmVzc2VkU2l6ZSA9IHNpemVzWyAwIF07XG5cdFx0XHRjb25zdCBkZWNvbXByZXNzZWRTaXplID0gc2l6ZXNbIDEgXTtcblx0XHRcdGNvbnN0IGRlY29tcHJlc3NlZCA9IGRlY29tcHJlc3NMWkYoIG5ldyBVaW50OEFycmF5KCBkYXRhLCBQQ0RoZWFkZXIuaGVhZGVyTGVuICsgOCwgY29tcHJlc3NlZFNpemUgKSwgZGVjb21wcmVzc2VkU2l6ZSApO1xuXHRcdFx0Y29uc3QgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcoIGRlY29tcHJlc3NlZC5idWZmZXIgKTtcblxuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gUENEaGVhZGVyLm9mZnNldDtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgUENEaGVhZGVyLnBvaW50czsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIG9mZnNldC54ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQueCApICsgUENEaGVhZGVyLnNpemVbIDAgXSAqIGksIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQueSApICsgUENEaGVhZGVyLnNpemVbIDEgXSAqIGksIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQueiApICsgUENEaGVhZGVyLnNpemVbIDIgXSAqIGksIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQucmdiICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb2xvci5wdXNoKCBkYXRhdmlldy5nZXRVaW50OCggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0LnJnYiApICsgUENEaGVhZGVyLnNpemVbIDMgXSAqIGkgKyAyICkgLyAyNTUuMCApO1xuXHRcdFx0XHRcdGNvbG9yLnB1c2goIGRhdGF2aWV3LmdldFVpbnQ4KCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQucmdiICkgKyBQQ0RoZWFkZXIuc2l6ZVsgMyBdICogaSArIDEgKSAvIDI1NS4wICk7XG5cdFx0XHRcdFx0Y29sb3IucHVzaCggZGF0YXZpZXcuZ2V0VWludDgoICggUENEaGVhZGVyLnBvaW50cyAqIG9mZnNldC5yZ2IgKSArIFBDRGhlYWRlci5zaXplWyAzIF0gKiBpICsgMCApIC8gMjU1LjAgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQubm9ybWFsX3ggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQubm9ybWFsX3ggKSArIFBDRGhlYWRlci5zaXplWyA0IF0gKiBpLCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoICggUENEaGVhZGVyLnBvaW50cyAqIG9mZnNldC5ub3JtYWxfeSApICsgUENEaGVhZGVyLnNpemVbIDUgXSAqIGksIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblx0XHRcdFx0XHRub3JtYWwucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0Lm5vcm1hbF96ICkgKyBQQ0RoZWFkZXIuc2l6ZVsgNiBdICogaSwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYmluYXJ5XG5cblx0XHRpZiAoIFBDRGhlYWRlci5kYXRhID09PSAnYmluYXJ5JyApIHtcblxuXHRcdFx0Y29uc3QgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcoIGRhdGEsIFBDRGhlYWRlci5oZWFkZXJMZW4gKTtcblx0XHRcdGNvbnN0IG9mZnNldCA9IFBDRGhlYWRlci5vZmZzZXQ7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgcm93ID0gMDsgaSA8IFBDRGhlYWRlci5wb2ludHM7IGkgKyssIHJvdyArPSBQQ0RoZWFkZXIucm93U2l6ZSApIHtcblxuXHRcdFx0XHRpZiAoIG9mZnNldC54ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCByb3cgKyBvZmZzZXQueCwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXHRcdFx0XHRcdHBvc2l0aW9uLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoIHJvdyArIG9mZnNldC55LCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0cG9zaXRpb24ucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggcm93ICsgb2Zmc2V0LnosIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQucmdiICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb2xvci5wdXNoKCBkYXRhdmlldy5nZXRVaW50OCggcm93ICsgb2Zmc2V0LnJnYiArIDIgKSAvIDI1NS4wICk7XG5cdFx0XHRcdFx0Y29sb3IucHVzaCggZGF0YXZpZXcuZ2V0VWludDgoIHJvdyArIG9mZnNldC5yZ2IgKyAxICkgLyAyNTUuMCApO1xuXHRcdFx0XHRcdGNvbG9yLnB1c2goIGRhdGF2aWV3LmdldFVpbnQ4KCByb3cgKyBvZmZzZXQucmdiICsgMCApIC8gMjU1LjAgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQubm9ybWFsX3ggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCByb3cgKyBvZmZzZXQubm9ybWFsX3gsIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblx0XHRcdFx0XHRub3JtYWwucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggcm93ICsgb2Zmc2V0Lm5vcm1hbF95LCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoIHJvdyArIG9mZnNldC5ub3JtYWxfeiwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRpZiAoIHBvc2l0aW9uLmxlbmd0aCA+IDAgKSBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgMyApICk7XG5cdFx0aWYgKCBub3JtYWwubGVuZ3RoID4gMCApIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWwsIDMgKSApO1xuXHRcdGlmICggY29sb3IubGVuZ3RoID4gMCApIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGNvbG9yLCAzICkgKTtcblxuXHRcdGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0Ly8gYnVpbGQgbWF0ZXJpYWxcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IFBvaW50c01hdGVyaWFsKCB7IHNpemU6IDAuMDA1IH0gKTtcblxuXHRcdGlmICggY29sb3IubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0bWF0ZXJpYWwudmVydGV4Q29sb3JzID0gdHJ1ZTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdG1hdGVyaWFsLmNvbG9yLnNldEhleCggTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmICk7XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBwb2ludCBjbG91ZFxuXG5cdFx0Y29uc3QgbWVzaCA9IG5ldyBQb2ludHMoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXHRcdGxldCBuYW1lID0gdXJsLnNwbGl0KCAnJyApLnJldmVyc2UoKS5qb2luKCAnJyApO1xuXHRcdG5hbWUgPSAvKFteXFwvXSopLy5leGVjKCBuYW1lICk7XG5cdFx0bmFtZSA9IG5hbWVbIDEgXS5zcGxpdCggJycgKS5yZXZlcnNlKCkuam9pbiggJycgKTtcblx0XHRtZXNoLm5hbWUgPSBuYW1lO1xuXG5cdFx0cmV0dXJuIG1lc2g7XG5cblx0fVxuXG59XG5cbmV4cG9ydCB7IFBDRExvYWRlciB9O1xuIiwiLy8gc291cmNlOiBnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfaHR0cF9wYiA9IHJlcXVpcmUoJy4uLy4uL2dvb2dsZS9hcGkvaHR0cF9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2h0dHBfcGIpO1xudmFyIGdvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUuYXBpLmh0dHAnLCBudWxsLCBnbG9iYWwpO1xuXG4vKipcbiAqIEEgdHVwbGUgb2Yge2ZpZWxkIG51bWJlciwgY2xhc3MgY29uc3RydWN0b3J9IGZvciB0aGUgZXh0ZW5zaW9uXG4gKiBmaWVsZCBuYW1lZCBgaHR0cGAuXG4gKiBAdHlwZSB7IWpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPCFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5odHRwID0gbmV3IGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvKFxuICAgIDcyMjk1NzI4LFxuICAgIHtodHRwOiAwfSxcbiAgICBnb29nbGVfYXBpX2h0dHBfcGIuSHR0cFJ1bGUsXG4gICAgIC8qKiBAdHlwZSB7P2Z1bmN0aW9uKChib29sZWFufHVuZGVmaW5lZCksIWpzcGIuTWVzc2FnZT0pOiAhT2JqZWN0fSAqLyAoXG4gICAgICAgICBnb29nbGVfYXBpX2h0dHBfcGIuSHR0cFJ1bGUudG9PYmplY3QpLFxuICAgIDApO1xuXG5nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wYi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnlbNzIyOTU3MjhdID0gbmV3IGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvKFxuICAgIHByb3RvLmdvb2dsZS5hcGkuaHR0cCxcbiAgICBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2UsXG4gICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZSxcbiAgICBnb29nbGVfYXBpX2h0dHBfcGIuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIsXG4gICAgZ29vZ2xlX2FwaV9odHRwX3BiLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcixcbiAgICBmYWxzZSk7XG4vLyBUaGlzIHJlZ2lzdGVycyB0aGUgZXh0ZW5zaW9uIGZpZWxkIHdpdGggdGhlIGV4dGVuZGVkIGNsYXNzLCBzbyB0aGF0XG4vLyB0b09iamVjdCgpIHdpbGwgZnVuY3Rpb24gY29ycmVjdGx5LlxuZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcGIuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zWzcyMjk1NzI4XSA9IHByb3RvLmdvb2dsZS5hcGkuaHR0cDtcblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLmdvb2dsZS5hcGkpO1xuIiwiLy8gc291cmNlOiBnb29nbGUvYXBpL2h0dHAucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybicsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5IdHRwJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLlBhdHRlcm5DYXNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5hcGkuSHR0cC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLmFwaS5IdHRwLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5hcGkuSHR0cCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5yZXBlYXRlZEZpZWxkc18sIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybic7XG59XG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHAudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHB9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcnVsZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSdWxlc0xpc3QoKSxcbiAgICBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb246IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDIsIGZhbHNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUuYXBpLkh0dHA7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUnVsZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5hcGkuSHR0cC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJ1bGVzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uKCk7XG4gIGlmIChmKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEh0dHBSdWxlIHJ1bGVzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuZ2V0UnVsZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5zZXRSdWxlc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuYWRkUnVsZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuY2xlYXJSdWxlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UnVsZXNMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGZ1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24gPSAyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5nZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5zZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucmVwZWF0ZWRGaWVsZHNfID0gWzExXTtcblxuLyoqXG4gKiBPbmVvZiBncm91cCBkZWZpbml0aW9ucyBmb3IgdGhpcyBtZXNzYWdlLiBFYWNoIGdyb3VwIGRlZmluZXMgdGhlIGZpZWxkXG4gKiBudW1iZXJzIGJlbG9uZ2luZyB0byB0aGF0IGdyb3VwLiBXaGVuIG9mIHRoZXNlIGZpZWxkcycgdmFsdWUgaXMgc2V0LCBhbGxcbiAqIG90aGVyIGZpZWxkcyBpbiB0aGUgZ3JvdXAgYXJlIGNsZWFyZWQuIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIGlmIG11bHRpcGxlXG4gKiBmaWVsZHMgYXJlIGVuY291bnRlcmVkIGZvciBhIGdyb3VwLCBvbmx5IHRoZSBsYXN0IHZhbHVlIHNlZW4gd2lsbCBiZSBrZXB0LlxuICogQHByaXZhdGUgeyFBcnJheTwhQXJyYXk8bnVtYmVyPj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc18gPSBbWzIsMyw0LDUsNiw4XV07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5QYXR0ZXJuQ2FzZSA9IHtcbiAgUEFUVEVSTl9OT1RfU0VUOiAwLFxuICBHRVQ6IDIsXG4gIFBVVDogMyxcbiAgUE9TVDogNCxcbiAgREVMRVRFOiA1LFxuICBQQVRDSDogNixcbiAgQ1VTVE9NOiA4XG59O1xuXG4vKipcbiAqIEByZXR1cm4ge3Byb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuUGF0dGVybkNhc2V9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFBhdHRlcm5DYXNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3Byb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuUGF0dGVybkNhc2V9ICovKGpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdKSk7XG59O1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZWxlY3RvcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBnZXQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIiksXG4gICAgcHV0OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIFwiXCIpLFxuICAgIHBvc3Q6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgXCJcIiksXG4gICAgcGJfZGVsZXRlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDUsIFwiXCIpLFxuICAgIHBhdGNoOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDYsIFwiXCIpLFxuICAgIGN1c3RvbTogKGYgPSBtc2cuZ2V0Q3VzdG9tKCkpICYmIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4udG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBib2R5OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDcsIFwiXCIpLFxuICAgIHJlc3BvbnNlQm9keToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxMiwgXCJcIiksXG4gICAgYWRkaXRpb25hbEJpbmRpbmdzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0QWRkaXRpb25hbEJpbmRpbmdzTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U2VsZWN0b3IodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRHZXQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQdXQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQb3N0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RGVsZXRlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGF0Y2godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm47XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEN1c3RvbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEJvZHkodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UmVzcG9uc2VCb2R5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkQWRkaXRpb25hbEJpbmRpbmdzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U2VsZWN0b3IoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA2KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA2LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q3VzdG9tKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgOCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCb2R5KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA3LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzcG9uc2VCb2R5KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDExLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHNlbGVjdG9yID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0U2VsZWN0b3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRTZWxlY3RvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBnZXQgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRHZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRHZXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMiwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyR2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCAyLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNHZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwdXQgPSAzO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRQdXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMywgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyUHV0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCAzLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNQdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwb3N0ID0gNDtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UG9zdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldFBvc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNCwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyUG9zdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNCwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzUG9zdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGRlbGV0ZSA9IDU7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldERlbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA1LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldERlbGV0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCA1LCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJEZWxldGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDUsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc0RlbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDUpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBhdGNoID0gNjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRQYXRjaCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCA2LCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJQYXRjaCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNiwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzUGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA2KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEN1c3RvbUh0dHBQYXR0ZXJuIGN1c3RvbSA9IDg7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0Q3VzdG9tID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4sIDgpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRDdXN0b20gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsIDgsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyQ3VzdG9tID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEN1c3RvbSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc0N1c3RvbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDgpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGJvZHkgPSA3O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRCb2R5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDcsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0Qm9keSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyByZXNwb25zZV9ib2R5ID0gMTI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFJlc3BvbnNlQm9keSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRSZXNwb25zZUJvZHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgSHR0cFJ1bGUgYWRkaXRpb25hbF9iaW5kaW5ncyA9IDExO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0QWRkaXRpb25hbEJpbmRpbmdzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSwgMTEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0QWRkaXRpb25hbEJpbmRpbmdzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMTEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmFkZEFkZGl0aW9uYWxCaW5kaW5ncyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckFkZGl0aW9uYWxCaW5kaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QWRkaXRpb25hbEJpbmRpbmdzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAga2luZDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwYXRoOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufVxuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybjtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufVxuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEtpbmQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQYXRoKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0S2luZCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBhdGgoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBraW5kID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuZ2V0S2luZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnNldEtpbmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcGF0aCA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5zZXRQYXRoID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUuYXBpKTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL2FwaS9odHRwYm9keS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfcHJvdG9idWZfYW55X3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9hbnlfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX3Byb3RvYnVmX2FueV9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keSc7XG59XG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucmVwZWF0ZWRGaWVsZHNfID0gWzNdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250ZW50VHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBkYXRhOiBtc2cuZ2V0RGF0YV9hc0I2NCgpLFxuICAgIGV4dGVuc2lvbnNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRFeHRlbnNpb25zTGlzdCgpLFxuICAgIGdvb2dsZV9wcm90b2J1Zl9hbnlfcGIuQW55LnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldENvbnRlbnRUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldERhdGEodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9hbnlfcGIuQW55O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLGdvb2dsZV9wcm90b2J1Zl9hbnlfcGIuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRXh0ZW5zaW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldENvbnRlbnRUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGF0YV9hc1U4KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVCeXRlcyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFeHRlbnNpb25zTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfYW55X3BiLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udGVudF90eXBlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuZ2V0Q29udGVudFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHl9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5zZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGRhdGEgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBkYXRhID0gMjtcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldERhdGEoKWBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuZ2V0RGF0YV9hc0I2NCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NChcbiAgICAgIHRoaXMuZ2V0RGF0YSgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgZGF0YSA9IDI7XG4gKiBOb3RlIHRoYXQgVWludDhBcnJheSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cbiAqIEBzZWUgaHR0cDovL2Nhbml1c2UuY29tL1VpbnQ4QXJyYXlcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldERhdGEoKWBcbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5nZXREYXRhX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXREYXRhKCkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHl9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuQW55IGV4dGVuc2lvbnMgPSAzO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuQW55Pn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnk+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl9hbnlfcGIuQW55LCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnk+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHl9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLnNldEV4dGVuc2lvbnNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuQW55fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5hZGRFeHRlbnNpb25zID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDMsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFeHRlbnNpb25zTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUuYXBpKTtcbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb24ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5HZW9tZXRyeVR5cGVDYXNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lm9uZW9mR3JvdXBzXyk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lc3BhY2U6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgdHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBzdWJ0eXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIFwiXCIpLFxuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWVzcGFjZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRTdWJ0eXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lc3BhY2UoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3VidHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lc3BhY2UgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5zZXROYW1lc3BhY2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgdHlwZSA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5zZXRUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHN1YnR5cGUgPSAzO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuZ2V0U3VidHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuc2V0U3VidHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gNDtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBhbmFsb2dzTWFwOiAoZiA9IG1zZy5nZXRBbmFsb2dzTWFwKCkpID8gZi50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnRvT2JqZWN0KSA6IFtdLFxuICAgIGRpZ2l0YWxJbnRlcnJ1cHRzTWFwOiAoZiA9IG1zZy5nZXREaWdpdGFsSW50ZXJydXB0c01hcCgpKSA/IGYudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMudG9PYmplY3QpIDogW11cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG1zZy5nZXRBbmFsb2dzTWFwKCk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlYWRlcikge1xuICAgICAgICBqc3BiLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShtZXNzYWdlLCByZWFkZXIsIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLCBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2UsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciwgXCJcIiwgbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzKCkpO1xuICAgICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBtc2cuZ2V0RGlnaXRhbEludGVycnVwdHNNYXAoKTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSwgZnVuY3Rpb24obWVzc2FnZSwgcmVhZGVyKSB7XG4gICAgICAgIGpzcGIuTWFwLmRlc2VyaWFsaXplQmluYXJ5KG1lc3NhZ2UsIHJlYWRlciwganNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcsIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkTWVzc2FnZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciwgXCJcIiwgbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cygpKTtcbiAgICAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRBbmFsb2dzTWFwKHRydWUpO1xuICBpZiAoZiAmJiBmLmdldExlbmd0aCgpID4gMCkge1xuICAgIGYuc2VyaWFsaXplQmluYXJ5KDEsIHdyaXRlciwganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLCBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcik7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGlnaXRhbEludGVycnVwdHNNYXAodHJ1ZSk7XG4gIGlmIChmICYmIGYuZ2V0TGVuZ3RoKCkgPiAwKSB7XG4gICAgZi5zZXJpYWxpemVCaW5hcnkoMiwgd3JpdGVyLCBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmcsIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2UsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcik7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBtYXA8c3RyaW5nLCBBbmFsb2dTdGF0dXM+IGFuYWxvZ3MgPSAxO1xuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X25vTGF6eUNyZWF0ZSBEbyBub3QgY3JlYXRlIHRoZSBtYXAgaWZcbiAqIGVtcHR5LCBpbnN0ZWFkIHJldHVybmluZyBgdW5kZWZpbmVkYFxuICogQHJldHVybiB7IWpzcGIuTWFwPHN0cmluZywhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXM+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS5nZXRBbmFsb2dzTWFwID0gZnVuY3Rpb24ob3B0X25vTGF6eUNyZWF0ZSkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshanNwYi5NYXA8c3RyaW5nLCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cz59ICovIChcbiAgICAgIGpzcGIuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLCAxLCBvcHRfbm9MYXp5Q3JlYXRlLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMpKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdmFsdWVzIGZyb20gdGhlIG1hcC4gVGhlIG1hcCB3aWxsIGJlIG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS5jbGVhckFuYWxvZ3NNYXAgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXRBbmFsb2dzTWFwKCkuY2xlYXIoKTtcbiAgcmV0dXJuIHRoaXM7fTtcblxuXG4vKipcbiAqIG1hcDxzdHJpbmcsIERpZ2l0YWxJbnRlcnJ1cHRTdGF0dXM+IGRpZ2l0YWxfaW50ZXJydXB0cyA9IDI7XG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfbm9MYXp5Q3JlYXRlIERvIG5vdCBjcmVhdGUgdGhlIG1hcCBpZlxuICogZW1wdHksIGluc3RlYWQgcmV0dXJuaW5nIGB1bmRlZmluZWRgXG4gKiBAcmV0dXJuIHshanNwYi5NYXA8c3RyaW5nLCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXM+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS5nZXREaWdpdGFsSW50ZXJydXB0c01hcCA9IGZ1bmN0aW9uKG9wdF9ub0xhenlDcmVhdGUpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IWpzcGIuTWFwPHN0cmluZywhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzPn0gKi8gKFxuICAgICAganNwYi5NZXNzYWdlLmdldE1hcEZpZWxkKHRoaXMsIDIsIG9wdF9ub0xhenlDcmVhdGUsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMpKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdmFsdWVzIGZyb20gdGhlIG1hcC4gVGhlIG1hcCB3aWxsIGJlIG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnByb3RvdHlwZS5jbGVhckRpZ2l0YWxJbnRlcnJ1cHRzTWFwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZ2V0RGlnaXRhbEludGVycnVwdHNNYXAoKS5jbGVhcigpO1xuICByZXR1cm4gdGhpczt9O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHZhbHVlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiB2YWx1ZSA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHZhbHVlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VmFsdWUoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQ2NChcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IHZhbHVlID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgeDoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKSxcbiAgICB5OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHo6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMCksXG4gICAgb1g6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIDAuMCksXG4gICAgb1k6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDUsIDAuMCksXG4gICAgb1o6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDYsIDAuMCksXG4gICAgdGhldGE6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDcsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRYKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFoodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRPWCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE9ZKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0T1oodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRUaGV0YSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0WCgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFkoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRaKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T1goKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPWSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgNSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9aKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICA2LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VGhldGEoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4ID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5ID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB6ID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5nZXRaID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldFogPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBvX3ggPSA0O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLmdldE9YID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldE9YID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgb195ID0gNTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5nZXRPWSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgNSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5zZXRPWSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIG9feiA9IDY7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0T1ogPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDYsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuc2V0T1ogPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB0aGV0YSA9IDc7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0VGhldGEgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDcsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuc2V0VGhldGEgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlZmVyZW5jZUZyYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvc2U6IChmID0gbXNnLmdldFBvc2UoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UmVmZXJlbmNlRnJhbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVmZXJlbmNlRnJhbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQb3NlKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHJlZmVyZW5jZV9mcmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLmdldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuc2V0UmVmZXJlbmNlRnJhbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBQb3NlIHBvc2UgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuZ2V0UG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuc2V0UG9zZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuY2xlYXJQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2UodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnByb3RvdHlwZS5oYXNQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHg6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgeToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKSxcbiAgICB6OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFkodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRaKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRYKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFooKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4ID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5ID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB6ID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5nZXRaID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMucHJvdG90eXBlLnNldFogPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByYWRpdXNNbToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmU7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UmFkaXVzTW0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmFkaXVzTW0oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSByYWRpdXNfbW0gPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5wcm90b3R5cGUuZ2V0UmFkaXVzTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUucHJvdG90eXBlLnNldFJhZGl1c01tID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHdpZHRoTW06IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgbGVuZ3RoTW06IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgZGVwdGhNbToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc207XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFdpZHRoTW0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRMZW5ndGhNbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldERlcHRoTW0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFdpZHRoTW0oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMZW5ndGhNbSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERlcHRoTW0oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB3aWR0aF9tbSA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5wcm90b3R5cGUuZ2V0V2lkdGhNbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5zZXRXaWR0aE1tID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbGVuZ3RoX21tID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5nZXRMZW5ndGhNbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5zZXRMZW5ndGhNbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGRlcHRoX21tID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5nZXREZXB0aE1tID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc219IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20ucHJvdG90eXBlLnNldERlcHRoTW0gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogT25lb2YgZ3JvdXAgZGVmaW5pdGlvbnMgZm9yIHRoaXMgbWVzc2FnZS4gRWFjaCBncm91cCBkZWZpbmVzIHRoZSBmaWVsZFxuICogbnVtYmVycyBiZWxvbmdpbmcgdG8gdGhhdCBncm91cC4gV2hlbiBvZiB0aGVzZSBmaWVsZHMnIHZhbHVlIGlzIHNldCwgYWxsXG4gKiBvdGhlciBmaWVsZHMgaW4gdGhlIGdyb3VwIGFyZSBjbGVhcmVkLiBEdXJpbmcgZGVzZXJpYWxpemF0aW9uLCBpZiBtdWx0aXBsZVxuICogZmllbGRzIGFyZSBlbmNvdW50ZXJlZCBmb3IgYSBncm91cCwgb25seSB0aGUgbGFzdCB2YWx1ZSBzZWVuIHdpbGwgYmUga2VwdC5cbiAqIEBwcml2YXRlIHshQXJyYXk8IUFycmF5PG51bWJlcj4+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkub25lb2ZHcm91cHNfID0gW1syLDNdXTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lkdlb21ldHJ5VHlwZUNhc2UgPSB7XG4gIEdFT01FVFJZX1RZUEVfTk9UX1NFVDogMCxcbiAgU1BIRVJFOiAyLFxuICBCT1g6IDNcbn07XG5cbi8qKlxuICogQHJldHVybiB7cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5HZW9tZXRyeVR5cGVDYXNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5nZXRHZW9tZXRyeVR5cGVDYXNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuR2VvbWV0cnlUeXBlQ2FzZX0gKi8oanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5vbmVvZkdyb3Vwc19bMF0pKTtcbn07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGNlbnRlcjogKGYgPSBtc2cuZ2V0Q2VudGVyKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHNwaGVyZTogKGYgPSBtc2cuZ2V0U3BoZXJlKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgYm94OiAoZiA9IG1zZy5nZXRCb3goKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0Q2VudGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFNwaGVyZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEJveCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldENlbnRlcigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRTcGhlcmUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCb3goKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBQb3NlIGNlbnRlciA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5nZXRDZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLnNldENlbnRlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuY2xlYXJDZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0Q2VudGVyKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuaGFzQ2VudGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBTcGhlcmUgc3BoZXJlID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuZ2V0U3BoZXJlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5zZXRTcGhlcmUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsIDIsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmNsZWFyU3BoZXJlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFNwaGVyZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmhhc1NwaGVyZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgUmVjdGFuZ3VsYXJQcmlzbSBib3ggPSAzO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuZ2V0Qm94ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5zZXRCb3ggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsIDMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmNsZWFyQm94ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEJveCh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmhhc0JveCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5yZXBlYXRlZEZpZWxkc18gPSBbMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlZmVyZW5jZUZyYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGdlb21ldHJpZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRHZW9tZXRyaWVzTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UmVmZXJlbmNlRnJhbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEdlb21ldHJpZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSZWZlcmVuY2VGcmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEdlb21ldHJpZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHJlZmVyZW5jZV9mcmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLmdldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5wcm90b3R5cGUuc2V0UmVmZXJlbmNlRnJhbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBHZW9tZXRyeSBnZW9tZXRyaWVzID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLmdldEdlb21ldHJpZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnk+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLnNldEdlb21ldHJpZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS5hZGRHZW9tZXRyaWVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5wcm90b3R5cGUuY2xlYXJHZW9tZXRyaWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRHZW9tZXRyaWVzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb2ludENsb3VkOiBtc2cuZ2V0UG9pbnRDbG91ZF9hc0I2NCgpLFxuICAgIGdlb21ldHJpZXM6IChmID0gbXNnLmdldEdlb21ldHJpZXMoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldFBvaW50Q2xvdWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEdlb21ldHJpZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvaW50Q2xvdWRfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0R2VvbWV0cmllcygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBwb2ludF9jbG91ZCA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUuZ2V0UG9pbnRDbG91ZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgcG9pbnRfY2xvdWQgPSAxO1xuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0UG9pbnRDbG91ZCgpYFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLmdldFBvaW50Q2xvdWRfYXNCNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQoXG4gICAgICB0aGlzLmdldFBvaW50Q2xvdWQoKSkpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHBvaW50X2Nsb3VkID0gMTtcbiAqIE5vdGUgdGhhdCBVaW50OEFycmF5IGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGJyb3dzZXJzLlxuICogQHNlZSBodHRwOi8vY2FuaXVzZS5jb20vVWludDhBcnJheVxuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0UG9pbnRDbG91ZCgpYFxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUuZ2V0UG9pbnRDbG91ZF9hc1U4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNVOChcbiAgICAgIHRoaXMuZ2V0UG9pbnRDbG91ZCgpKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshKHN0cmluZ3xVaW50OEFycmF5KX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLnNldFBvaW50Q2xvdWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEdlb21ldHJpZXNJbkZyYW1lIGdlb21ldHJpZXMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUuZ2V0R2VvbWV0cmllcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLnNldEdlb21ldHJpZXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS5jbGVhckdlb21ldHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0R2VvbWV0cmllcyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUuaGFzR2VvbWV0cmllcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbGF0aXR1ZGU6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgbG9uZ2l0dWRlOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldExhdGl0dWRlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0TG9uZ2l0dWRlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TGF0aXR1ZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMb25naXR1ZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBsYXRpdHVkZSA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQucHJvdG90eXBlLmdldExhdGl0dWRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5wcm90b3R5cGUuc2V0TGF0aXR1ZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBsb25naXR1ZGUgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LnByb3RvdHlwZS5nZXRMb25naXR1ZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LnByb3RvdHlwZS5zZXRMb25naXR1ZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZWZlcmVuY2VGcmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwb3NlSW5PYnNlcnZlckZyYW1lOiAoZiA9IG1zZy5nZXRQb3NlSW5PYnNlcnZlckZyYW1lKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm07XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UmVmZXJlbmNlRnJhbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFBvc2VJbk9ic2VydmVyRnJhbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVmZXJlbmNlRnJhbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQb3NlSW5PYnNlcnZlckZyYW1lKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyByZWZlcmVuY2VfZnJhbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0UmVmZXJlbmNlRnJhbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgUG9zZUluRnJhbWUgcG9zZV9pbl9vYnNlcnZlcl9mcmFtZSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFBvc2VJbk9ic2VydmVyRnJhbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUuc2V0UG9zZUluT2JzZXJ2ZXJGcmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnByb3RvdHlwZS5jbGVhclBvc2VJbk9ic2VydmVyRnJhbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zZUluT2JzZXJ2ZXJGcmFtZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnByb3RvdHlwZS5oYXNQb3NlSW5PYnNlcnZlckZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucmVwZWF0ZWRGaWVsZHNfID0gWzEsMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgb2JzdGFjbGVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0T2JzdGFjbGVzTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgdHJhbnNmb3Jtc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFRyYW5zZm9ybXNMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE9ic3RhY2xlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm07XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRUcmFuc2Zvcm1zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRPYnN0YWNsZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFRyYW5zZm9ybXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEdlb21ldHJpZXNJbkZyYW1lIG9ic3RhY2xlcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWU+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLmdldE9ic3RhY2xlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLnNldE9ic3RhY2xlc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuYWRkT2JzdGFjbGVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLmNsZWFyT2JzdGFjbGVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPYnN0YWNsZXNMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBUcmFuc2Zvcm0gdHJhbnNmb3JtcyA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuc2V0VHJhbnNmb3Jtc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5hZGRUcmFuc2Zvcm1zID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5jbGVhclRyYW5zZm9ybXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFRyYW5zZm9ybXNMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEpO1xuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2FybS92MS9hcm0ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBvc2U6IChmID0gbXNnLmdldFBvc2UoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0UG9zZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2UoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlIHBvc2UgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2UsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldFBvc2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQb3NlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZGVncmVlc0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZERlZ3JlZXModmFsdWVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldERlZ3JlZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVQYWNrZWREb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBkb3VibGUgZGVncmVlcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmdldERlZ3JlZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLnNldERlZ3JlZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmFkZERlZ3JlZXMgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmNsZWFyRGVncmVlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGVncmVlc0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb3NpdGlvbkRlZ3M6IChmID0gbXNnLmdldFBvc2l0aW9uRGVncygpKSAmJiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvbkRlZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQb3NpdGlvbkRlZ3MoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEpvaW50UG9zaXRpb25zIHBvc2l0aW9uX2RlZ3MgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRQb3NpdGlvbkRlZ3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UucHJvdG90eXBlLnNldFBvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbkRlZ3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25EZWdzKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuaGFzUG9zaXRpb25EZWdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgdG86IChmID0gbXNnLmdldFRvKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2UudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICB3b3JsZFN0YXRlOiAoZiA9IG1zZy5nZXRXb3JsZFN0YXRlKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFRvKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRXb3JsZFN0YXRlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VG8oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdvcmxkU3RhdGUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuUG9zZSB0byA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldFRvID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldFRvID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJUbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRUbyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuaGFzVG8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZSB3b3JsZF9zdGF0ZSA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldFdvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0V29ybGRTdGF0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmNsZWFyV29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRXb3JsZFN0YXRlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwb3NpdGlvbkRlZ3M6IChmID0gbXNnLmdldFBvc2l0aW9uRGVncygpKSAmJiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvbkRlZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQb3NpdGlvbkRlZ3MoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBKb2ludFBvc2l0aW9ucyBwb3NpdGlvbl9kZWdzID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5nZXRQb3NpdGlvbkRlZ3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5zZXRQb3NpdGlvbkRlZ3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5jbGVhclBvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQb3NpdGlvbkRlZ3ModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmhhc1Bvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGVuZFBvc2l0aW9uOiAoZiA9IG1zZy5nZXRFbmRQb3NpdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgam9pbnRQb3NpdGlvbnM6IChmID0gbXNnLmdldEpvaW50UG9zaXRpb25zKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEVuZFBvc2l0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEpvaW50UG9zaXRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRFbmRQb3NpdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Sm9pbnRQb3NpdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuUG9zZSBlbmRfcG9zaXRpb24gPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5nZXRFbmRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2UsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5zZXRFbmRQb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyRW5kUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RW5kUG9zaXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmhhc0VuZFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBKb2ludFBvc2l0aW9ucyBqb2ludF9wb3NpdGlvbnMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmdldEpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0Sm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5jbGVhckpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEpvaW50UG9zaXRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5oYXNKb2ludFBvc2l0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmFybS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBBcm1TZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXJtU2VydmljZSgpIHt9XG4gIEFybVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkFybVNlcnZpY2VcIjtcbiAgcmV0dXJuIEFybVNlcnZpY2U7XG59KCkpO1xuXG5Bcm1TZXJ2aWNlLkdldEVuZFBvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldEVuZFBvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5HZXRFbmRQb3NpdGlvblJlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb1Bvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLkdldEpvaW50UG9zaXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIkdldEpvaW50UG9zaXRpb25zXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLk1vdmVUb0pvaW50UG9zaXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb0pvaW50UG9zaXRpb25zXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlXG59O1xuXG5leHBvcnRzLkFybVNlcnZpY2UgPSBBcm1TZXJ2aWNlO1xuXG5mdW5jdGlvbiBBcm1TZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RW5kUG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFbmRQb3NpdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5HZXRFbmRQb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUubW92ZVRvUG9zaXRpb24gPSBmdW5jdGlvbiBtb3ZlVG9Qb3NpdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5Nb3ZlVG9Qb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0Sm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbiBnZXRKb2ludFBvc2l0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5HZXRKb2ludFBvc2l0aW9ucywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUubW92ZVRvSm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbiBtb3ZlVG9Kb2ludFBvc2l0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5Nb3ZlVG9Kb2ludFBvc2l0aW9ucywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5Bcm1TZXJ2aWNlQ2xpZW50ID0gQXJtU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2Jhc2UvdjEvYmFzZS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGRpc3RhbmNlTW06IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMCksXG4gICAgbW1QZXJTZWM6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMCksXG4gICAgYmxvY2s6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDQsIGZhbHNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0RGlzdGFuY2VNbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE1tUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRCbG9jayh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGlzdGFuY2VNbSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1tUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QmxvY2soKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNCxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IGRpc3RhbmNlX21tID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLmdldERpc3RhbmNlTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLnNldERpc3RhbmNlTW0gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbW1fcGVyX3NlYyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS5nZXRNbVBlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0TW1QZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgYmxvY2sgPSA0O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLmdldEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0QmxvY2sgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZGlzdGFuY2VNbToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwKSxcbiAgICBtbVBlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKSxcbiAgICBhbmdsZURlZzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgMC4wKSxcbiAgICBibG9jazoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0RGlzdGFuY2VNbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE1tUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0QW5nbGVEZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEJsb2NrKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGlzdGFuY2VNbSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1tUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5nbGVEZWcoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCbG9jaygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgZGlzdGFuY2VfbW0gPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QucHJvdG90eXBlLmdldERpc3RhbmNlTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0RGlzdGFuY2VNbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBtbV9wZXJfc2VjID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5nZXRNbVBlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXRNbVBlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGFuZ2xlX2RlZyA9IDQ7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5nbGVEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgYmxvY2sgPSA1O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5nZXRCbG9jayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0QmxvY2sgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgYW5nbGVEZWc6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgZGVnc1BlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKSxcbiAgICBibG9jazoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldEFuZ2xlRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0RGVnc1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0QmxvY2sodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBbmdsZURlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERlZ3NQZXJTZWMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCbG9jaygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGFuZ2xlX2RlZyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5nbGVEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkZWdzX3Blcl9zZWMgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLmdldERlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuc2V0RGVnc1BlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBibG9jayA9IDQ7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLmdldEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnByb3RvdHlwZS5zZXRCbG9jayA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9iYXNlL3YxL2Jhc2UucHJvdG9cblxudmFyIHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBCYXNlU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJhc2VTZXJ2aWNlKCkge31cbiAgQmFzZVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5CYXNlU2VydmljZVwiO1xuICByZXR1cm4gQmFzZVNlcnZpY2U7XG59KCkpO1xuXG5CYXNlU2VydmljZS5Nb3ZlU3RyYWlnaHQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiTW92ZVN0cmFpZ2h0XCIsXG4gIHNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZVN0cmFpZ2h0UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5Nb3ZlU3RyYWlnaHRSZXNwb25zZVxufTtcblxuQmFzZVNlcnZpY2UuTW92ZUFyYyA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlQXJjXCIsXG4gIHNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZUFyY1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZUFyY1Jlc3BvbnNlXG59O1xuXG5CYXNlU2VydmljZS5TcGluID0ge1xuICBtZXRob2ROYW1lOiBcIlNwaW5cIixcbiAgc2VydmljZTogQmFzZVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5TcGluUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5TcGluUmVzcG9uc2Vcbn07XG5cbkJhc2VTZXJ2aWNlLlN0b3AgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU3RvcFwiLFxuICBzZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiLlN0b3BSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiLlN0b3BSZXNwb25zZVxufTtcblxuZXhwb3J0cy5CYXNlU2VydmljZSA9IEJhc2VTZXJ2aWNlO1xuXG5mdW5jdGlvbiBCYXNlU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbkJhc2VTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5tb3ZlU3RyYWlnaHQgPSBmdW5jdGlvbiBtb3ZlU3RyYWlnaHQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJhc2VTZXJ2aWNlLk1vdmVTdHJhaWdodCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQmFzZVNlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmVBcmMgPSBmdW5jdGlvbiBtb3ZlQXJjKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCYXNlU2VydmljZS5Nb3ZlQXJjLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5CYXNlU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3BpbiA9IGZ1bmN0aW9uIHNwaW4ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJhc2VTZXJ2aWNlLlNwaW4sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJhc2VTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQmFzZVNlcnZpY2UuU3RvcCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5CYXNlU2VydmljZUNsaWVudCA9IEJhc2VTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmQucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGF0dXM6IChmID0gbXNnLmdldFN0YXR1cygpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Cb2FyZFN0YXR1cy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRTdGF0dXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdGF0dXMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkJvYXJkU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMgc3RhdHVzID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGF0dXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1c30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyU3RhdHVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXR1cyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmhhc1N0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwaW46IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIiksXG4gICAgaGlnaDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQaW4odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEhpZ2godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0SGlnaCgpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLmdldFBpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgaGlnaCA9IDM7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXRIaWdoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLnNldEhpZ2ggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBpbjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBpbigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaW4gPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXRQaW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXRQaW4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaGlnaDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEhpZ2godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SGlnaCgpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGhpZ2ggPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UucHJvdG90eXBlLmdldEhpZ2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRIaWdoID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwaW46IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGR1dHlDeWNsZVBjdDoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXREdXR5Q3ljbGVQY3QodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXREdXR5Q3ljbGVQY3QoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkdXR5X2N5Y2xlX3BjdCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLmdldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLnNldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBpbjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBkdXR5Q3ljbGVQY3Q6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0RHV0eUN5Y2xlUGN0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RHV0eUN5Y2xlUGN0KCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkdXR5X2N5Y2xlX3BjdCA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0RHV0eUN5Y2xlUGN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QucHJvdG90eXBlLnNldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcGluOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBpbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBpbigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaW4gPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldFBpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXRQaW4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBmcmVxdWVuY3lIejoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZFVpbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRGcmVxdWVuY3lIeih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEZyZXF1ZW5jeUh6KCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDY0KFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDY0IGZyZXF1ZW5jeV9oeiA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UucHJvdG90eXBlLmdldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUuc2V0RnJlcXVlbmN5SHogPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcGluOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGZyZXF1ZW5jeUh6OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBpbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDY0KCkpO1xuICAgICAgbXNnLnNldEZyZXF1ZW5jeUh6KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RnJlcXVlbmN5SHooKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50NjQoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHVpbnQ2NCBmcmVxdWVuY3lfaHogPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnNldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBib2FyZE5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgYW5hbG9nUmVhZGVyTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRCb2FyZE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRBbmFsb2dSZWFkZXJOYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Qm9hcmROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5hbG9nUmVhZGVyTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGJvYXJkX25hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRCb2FyZE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRCb2FyZE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgYW5hbG9nX3JlYWRlcl9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5hbG9nUmVhZGVyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QucHJvdG90eXBlLnNldEFuYWxvZ1JlYWRlck5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VmFsdWUoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIHZhbHVlID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgYm9hcmROYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGRpZ2l0YWxJbnRlcnJ1cHROYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Qm9hcmROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RGlnaXRhbEludGVycnVwdE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEJvYXJkTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERpZ2l0YWxJbnRlcnJ1cHROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgYm9hcmRfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Qm9hcmROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QucHJvdG90eXBlLnNldEJvYXJkTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBkaWdpdGFsX2ludGVycnVwdF9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0LnByb3RvdHlwZS5nZXREaWdpdGFsSW50ZXJydXB0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0LnByb3RvdHlwZS5zZXREaWdpdGFsSW50ZXJydXB0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHZhbHVlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRWYWx1ZSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgdmFsdWUgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmQucHJvdG9cblxudmFyIHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9ib2FyZC92MS9ib2FyZF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgQm9hcmRTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQm9hcmRTZXJ2aWNlKCkge31cbiAgQm9hcmRTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkJvYXJkU2VydmljZVwiO1xuICByZXR1cm4gQm9hcmRTZXJ2aWNlO1xufSgpKTtcblxuQm9hcmRTZXJ2aWNlLlN0YXR1cyA9IHtcbiAgbWV0aG9kTmFtZTogXCJTdGF0dXNcIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TdGF0dXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuU3RhdHVzUmVzcG9uc2Vcbn07XG5cbkJvYXJkU2VydmljZS5TZXRHUElPID0ge1xuICBtZXRob2ROYW1lOiBcIlNldEdQSU9cIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRHUElPUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlNldEdQSU9SZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLkdldEdQSU8gPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0R1BJT1wiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLkdldEdQSU9SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuR2V0R1BJT1Jlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuUFdNID0ge1xuICBtZXRob2ROYW1lOiBcIlBXTVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlBXTVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5QV01SZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLlNldFBXTSA9IHtcbiAgbWV0aG9kTmFtZTogXCJTZXRQV01cIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRQV01SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuU2V0UFdNUmVzcG9uc2Vcbn07XG5cbkJvYXJkU2VydmljZS5QV01GcmVxdWVuY3kgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUFdNRnJlcXVlbmN5XCIsXG4gIHNlcnZpY2U6IEJvYXJkU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuUFdNRnJlcXVlbmN5UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlBXTUZyZXF1ZW5jeVJlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuU2V0UFdNRnJlcXVlbmN5ID0ge1xuICBtZXRob2ROYW1lOiBcIlNldFBXTUZyZXF1ZW5jeVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRQV01GcmVxdWVuY3lSZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLlJlYWRBbmFsb2dSZWFkZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZEFuYWxvZ1JlYWRlclwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlID0ge1xuICBtZXRob2ROYW1lOiBcIkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZVxufTtcblxuZXhwb3J0cy5Cb2FyZFNlcnZpY2UgPSBCb2FyZFNlcnZpY2U7XG5cbmZ1bmN0aW9uIEJvYXJkU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3RhdHVzID0gZnVuY3Rpb24gc3RhdHVzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU3RhdHVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldEdQSU8gPSBmdW5jdGlvbiBzZXRHUElPKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU2V0R1BJTywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRHUElPID0gZnVuY3Rpb24gZ2V0R1BJTyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQm9hcmRTZXJ2aWNlLkdldEdQSU8sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUucFdNID0gZnVuY3Rpb24gcFdNKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuUFdNLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldFBXTSA9IGZ1bmN0aW9uIHNldFBXTShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQm9hcmRTZXJ2aWNlLlNldFBXTSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5wV01GcmVxdWVuY3kgPSBmdW5jdGlvbiBwV01GcmVxdWVuY3kocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJvYXJkU2VydmljZS5QV01GcmVxdWVuY3ksIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUuc2V0UFdNRnJlcXVlbmN5ID0gZnVuY3Rpb24gc2V0UFdNRnJlcXVlbmN5KHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU2V0UFdNRnJlcXVlbmN5LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlYWRBbmFsb2dSZWFkZXIgPSBmdW5jdGlvbiByZWFkQW5hbG9nUmVhZGVyKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuUmVhZEFuYWxvZ1JlYWRlciwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXREaWdpdGFsSW50ZXJydXB0VmFsdWUgPSBmdW5jdGlvbiBnZXREaWdpdGFsSW50ZXJydXB0VmFsdWUocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJvYXJkU2VydmljZS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuQm9hcmRTZXJ2aWNlQ2xpZW50ID0gQm9hcmRTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvY2FtZXJhL3YxL2NhbWVyYS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbnZhciBnb29nbGVfYXBpX2h0dHBib2R5X3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9odHRwYm9keV9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2h0dHBib2R5X3BiKTtcbnZhciBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21tb24vdjEvY29tbW9uX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGltYWdlOiBtc2cuZ2V0SW1hZ2VfYXNCNjQoKSxcbiAgICB3aWR0aFB4OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDApLFxuICAgIGhlaWdodFB4OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldEltYWdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRXaWR0aFB4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRIZWlnaHRQeCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1pbWVUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0SW1hZ2VfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0V2lkdGhQeCgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEhlaWdodFB4KCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGltYWdlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGltYWdlID0gMjtcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldEltYWdlKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLmdldEltYWdlX2FzQjY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KFxuICAgICAgdGhpcy5nZXRJbWFnZSgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgaW1hZ2UgPSAyO1xuICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgYnJvd3NlcnMuXG4gKiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRJbWFnZSgpYFxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLmdldEltYWdlX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXRJbWFnZSgpKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshKHN0cmluZ3xVaW50OEFycmF5KX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuc2V0SW1hZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IHdpZHRoX3B4ID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0V2lkdGhQeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNldFdpZHRoUHggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQ2NCBoZWlnaHRfcHggPSA0O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRIZWlnaHRQeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNldEhlaWdodFB4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWltZVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1pbWVUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG1pbWVfdHlwZSA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5wcm90b3R5cGUuc2V0TWltZVR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvaW50Q2xvdWQ6IG1zZy5nZXRQb2ludENsb3VkX2FzQjY0KClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRNaW1lVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAocmVhZGVyLnJlYWRCeXRlcygpKTtcbiAgICAgIG1zZy5zZXRQb2ludENsb3VkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNaW1lVHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvaW50Q2xvdWRfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHBvaW50X2Nsb3VkID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb2ludENsb3VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBwb2ludF9jbG91ZCA9IDI7XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRQb2ludENsb3VkKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9pbnRDbG91ZF9hc0I2NCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NChcbiAgICAgIHRoaXMuZ2V0UG9pbnRDbG91ZCgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgcG9pbnRfY2xvdWQgPSAyO1xuICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgYnJvd3NlcnMuXG4gKiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRQb2ludENsb3VkKClgXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb2ludENsb3VkX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXRQb2ludENsb3VkKCkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9pbnRDbG91ZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2NhbWVyYV92MV9jYW1lcmFfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiXCIpO1xudmFyIGdvb2dsZV9hcGlfaHR0cGJvZHlfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9odHRwYm9keV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgQ2FtZXJhU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbWVyYVNlcnZpY2UoKSB7fVxuICBDYW1lcmFTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5DYW1lcmFTZXJ2aWNlXCI7XG4gIHJldHVybiBDYW1lcmFTZXJ2aWNlO1xufSgpKTtcblxuQ2FtZXJhU2VydmljZS5HZXRGcmFtZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRGcmFtZVwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLkdldEZyYW1lUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2NhbWVyYV92MV9jYW1lcmFfcGIuR2V0RnJhbWVSZXNwb25zZVxufTtcblxuQ2FtZXJhU2VydmljZS5SZW5kZXJGcmFtZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZW5kZXJGcmFtZVwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLlJlbmRlckZyYW1lUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBnb29nbGVfYXBpX2h0dHBib2R5X3BiLkh0dHBCb2R5XG59O1xuXG5DYW1lcmFTZXJ2aWNlLkdldFBvaW50Q2xvdWQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0UG9pbnRDbG91ZFwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLkdldFBvaW50Q2xvdWRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfY2FtZXJhX3YxX2NhbWVyYV9wYi5HZXRQb2ludENsb3VkUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuQ2FtZXJhU2VydmljZSA9IENhbWVyYVNlcnZpY2U7XG5cbmZ1bmN0aW9uIENhbWVyYVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRGcmFtZSA9IGZ1bmN0aW9uIGdldEZyYW1lKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShDYW1lcmFTZXJ2aWNlLkdldEZyYW1lLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZW5kZXJGcmFtZSA9IGZ1bmN0aW9uIHJlbmRlckZyYW1lKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShDYW1lcmFTZXJ2aWNlLlJlbmRlckZyYW1lLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb2ludENsb3VkID0gZnVuY3Rpb24gZ2V0UG9pbnRDbG91ZChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQ2FtZXJhU2VydmljZS5HZXRQb2ludENsb3VkLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkNhbWVyYVNlcnZpY2VDbGllbnQgPSBDYW1lcmFTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4LnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UnO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5yZXBlYXRlZEZpZWxkc18gPSBbM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByb3dzOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApLFxuICAgIGNvbHM6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMCksXG4gICAgZGF0YUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXguZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDMyKCkpO1xuICAgICAgbXNnLnNldFJvd3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZFVpbnQzMigpKTtcbiAgICAgIG1zZy5zZXRDb2xzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZFVpbnQzMigpIDogW3JlYWRlci5yZWFkVWludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGREYXRhKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSb3dzKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldENvbHMoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGF0YUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZFVpbnQzMihcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHVpbnQzMiByb3dzID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmdldFJvd3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLnNldFJvd3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCB1aW50MzIgY29scyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5nZXRDb2xzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5zZXRDb2xzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgdWludDMyIGRhdGEgPSAzO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5nZXREYXRhTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLnNldERhdGFMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmFkZERhdGEgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDMsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmNsZWFyRGF0YUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGF0YUxpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbWF0cml4OiAoZiA9IG1zZy5nZXRNYXRyaXgoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE1hdHJpeCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNYXRyaXgoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE1hdHJpeCBtYXRyaXggPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWF0cml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UucHJvdG90eXBlLnNldE1hdHJpeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhck1hdHJpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRNYXRyaXgodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUuaGFzTWF0cml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNsaXBEZXRlY3RlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFNsaXBEZXRlY3RlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTbGlwRGV0ZWN0ZWQoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBzbGlwX2RldGVjdGVkID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5nZXRTbGlwRGV0ZWN0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5zZXRTbGlwRGV0ZWN0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4LnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L2ZvcmNlbWF0cml4L3YxL2ZvcmNlX21hdHJpeF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgRm9yY2VNYXRyaXhTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRm9yY2VNYXRyaXhTZXJ2aWNlKCkge31cbiAgRm9yY2VNYXRyaXhTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkZvcmNlTWF0cml4U2VydmljZVwiO1xuICByZXR1cm4gRm9yY2VNYXRyaXhTZXJ2aWNlO1xufSgpKTtcblxuRm9yY2VNYXRyaXhTZXJ2aWNlLlJlYWRNYXRyaXggPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZE1hdHJpeFwiLFxuICBzZXJ2aWNlOiBGb3JjZU1hdHJpeFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYi5SZWFkTWF0cml4UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYi5SZWFkTWF0cml4UmVzcG9uc2Vcbn07XG5cbkZvcmNlTWF0cml4U2VydmljZS5EZXRlY3RTbGlwID0ge1xuICBtZXRob2ROYW1lOiBcIkRldGVjdFNsaXBcIixcbiAgc2VydmljZTogRm9yY2VNYXRyaXhTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9mb3JjZW1hdHJpeF92MV9mb3JjZV9tYXRyaXhfcGIuRGV0ZWN0U2xpcFJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9mb3JjZW1hdHJpeF92MV9mb3JjZV9tYXRyaXhfcGIuRGV0ZWN0U2xpcFJlc3BvbnNlXG59O1xuXG5leHBvcnRzLkZvcmNlTWF0cml4U2VydmljZSA9IEZvcmNlTWF0cml4U2VydmljZTtcblxuZnVuY3Rpb24gRm9yY2VNYXRyaXhTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuRm9yY2VNYXRyaXhTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkTWF0cml4ID0gZnVuY3Rpb24gcmVhZE1hdHJpeChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoRm9yY2VNYXRyaXhTZXJ2aWNlLlJlYWRNYXRyaXgsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkZvcmNlTWF0cml4U2VydmljZUNsaWVudC5wcm90b3R5cGUuZGV0ZWN0U2xpcCA9IGZ1bmN0aW9uIGRldGVjdFNsaXAocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEZvcmNlTWF0cml4U2VydmljZS5EZXRlY3RTbGlwLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkZvcmNlTWF0cml4U2VydmljZUNsaWVudCA9IEZvcmNlTWF0cml4U2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2dhbnRyeS92MS9nYW50cnkucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cycsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cyc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb25zTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFBvc2l0aW9uc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZG91YmxlIHBvc2l0aW9uc19tbSA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLmFkZFBvc2l0aW9uc01tID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcG9zaXRpb25zTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB3b3JsZFN0YXRlOiAoZiA9IG1zZy5nZXRXb3JsZFN0YXRlKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFBvc2l0aW9uc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0V29ybGRTdGF0ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdvcmxkU3RhdGUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGRvdWJsZSBwb3NpdGlvbnNfbW0gPSAyO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuYWRkUG9zaXRpb25zTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDIsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUgd29ybGRfc3RhdGUgPSAzO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldFdvcmxkU3RhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhcldvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0V29ybGRTdGF0ZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuaGFzV29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBsZW5ndGhzTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWREb3VibGUoKSA6IFtyZWFkZXIucmVhZERvdWJsZSgpXSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtc2cuYWRkTGVuZ3Roc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TGVuZ3Roc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZG91YmxlIGxlbmd0aHNfbW0gPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0TGVuZ3Roc01tTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZCh0aGlzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8bnVtYmVyPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UucHJvdG90eXBlLnNldExlbmd0aHNNbUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRMZW5ndGhzTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJMZW5ndGhzTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldExlbmd0aHNNbUxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5yZXBlYXRlZEZpZWxkc18gPSBbMSwyXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb3NpdGlvbnNNbUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGxlbmd0aHNNbUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZERvdWJsZSgpIDogW3JlYWRlci5yZWFkRG91YmxlKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQb3NpdGlvbnNNbSh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZExlbmd0aHNNbSh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldExlbmd0aHNNbUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZERvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGRvdWJsZSBwb3NpdGlvbnNfbW0gPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuYWRkUG9zaXRpb25zTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBkb3VibGUgbGVuZ3Roc19tbSA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS5nZXRMZW5ndGhzTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0TGVuZ3Roc01tTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMucHJvdG90eXBlLmFkZExlbmd0aHNNbSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS5jbGVhckxlbmd0aHNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TGVuZ3Roc01tTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5LnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5X3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBHYW50cnlTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2FudHJ5U2VydmljZSgpIHt9XG4gIEdhbnRyeVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdhbnRyeVNlcnZpY2VcIjtcbiAgcmV0dXJuIEdhbnRyeVNlcnZpY2U7XG59KCkpO1xuXG5HYW50cnlTZXJ2aWNlLkdldFBvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFBvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEdhbnRyeVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIuR2V0UG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5HZXRQb3NpdGlvblJlc3BvbnNlXG59O1xuXG5HYW50cnlTZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb1Bvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEdhbnRyeVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlXG59O1xuXG5HYW50cnlTZXJ2aWNlLkdldExlbmd0aHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0TGVuZ3Roc1wiLFxuICBzZXJ2aWNlOiBHYW50cnlTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9nYW50cnlfdjFfZ2FudHJ5X3BiLkdldExlbmd0aHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5HZXRMZW5ndGhzUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuR2FudHJ5U2VydmljZSA9IEdhbnRyeVNlcnZpY2U7XG5cbmZ1bmN0aW9uIEdhbnRyeVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHYW50cnlTZXJ2aWNlLkdldFBvc2l0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5tb3ZlVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uIG1vdmVUb1Bvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHYW50cnlTZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRMZW5ndGhzID0gZnVuY3Rpb24gZ2V0TGVuZ3RocyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoR2FudHJ5U2VydmljZS5HZXRMZW5ndGhzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkdhbnRyeVNlcnZpY2VDbGllbnQgPSBHYW50cnlTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN1Y2Nlc3M6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEsIGZhbHNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFN1Y2Nlc3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdWNjZXNzKCk7XG4gIGlmIChmKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgc3VjY2VzcyA9IDE7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UucHJvdG90eXBlLnNldFN1Y2Nlc3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvY29tcG9uZW50L2dyaXBwZXIvdjEvZ3JpcHBlci5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9ncmlwcGVyL3YxL2dyaXBwZXJfcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIEdyaXBwZXJTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR3JpcHBlclNlcnZpY2UoKSB7fVxuICBHcmlwcGVyU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyaXBwZXJTZXJ2aWNlXCI7XG4gIHJldHVybiBHcmlwcGVyU2VydmljZTtcbn0oKSk7XG5cbkdyaXBwZXJTZXJ2aWNlLk9wZW4gPSB7XG4gIG1ldGhvZE5hbWU6IFwiT3BlblwiLFxuICBzZXJ2aWNlOiBHcmlwcGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ3JpcHBlcl92MV9ncmlwcGVyX3BiLk9wZW5SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ3JpcHBlcl92MV9ncmlwcGVyX3BiLk9wZW5SZXNwb25zZVxufTtcblxuR3JpcHBlclNlcnZpY2UuR3JhYiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHcmFiXCIsXG4gIHNlcnZpY2U6IEdyaXBwZXJTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIuR3JhYlJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIuR3JhYlJlc3BvbnNlXG59O1xuXG5leHBvcnRzLkdyaXBwZXJTZXJ2aWNlID0gR3JpcHBlclNlcnZpY2U7XG5cbmZ1bmN0aW9uIEdyaXBwZXJTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuR3JpcHBlclNlcnZpY2VDbGllbnQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiBvcGVuKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHcmlwcGVyU2VydmljZS5PcGVuLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HcmlwcGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ3JhYiA9IGZ1bmN0aW9uIGdyYWIocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEdyaXBwZXJTZXJ2aWNlLkdyYWIsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuR3JpcHBlclNlcnZpY2VDbGllbnQgPSBHcmlwcGVyU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2ltdS92MS9pbXUucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHknLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXInLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlciA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHhEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIHlEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHpEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WERlZ3NQZXJTZWModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRZRGVnc1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFpEZWdzUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRYRGVnc1BlclNlYygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFlEZWdzUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WkRlZ3NQZXJTZWMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4X2RlZ3NfcGVyX3NlYyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WERlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WERlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5X2RlZ3NfcGVyX3NlYyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WURlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WURlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB6X2RlZ3NfcGVyX3NlYyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WkRlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WkRlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByb2xsRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIHBpdGNoRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHlhd0RlZzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0Um9sbERlZyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFBpdGNoRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WWF3RGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJvbGxEZWcoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQaXRjaERlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFlhd0RlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJvbGxfZGVnID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLmdldFJvbGxEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFJvbGxEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBwaXRjaF9kZWcgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5wcm90b3R5cGUuZ2V0UGl0Y2hEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFBpdGNoRGVnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeWF3X2RlZyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnByb3RvdHlwZS5nZXRZYXdEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFlhd0RlZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB4TW1QZXJTZWNQZXJTZWM6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgeU1tUGVyU2VjUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHpNbVBlclNlY1BlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb247XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFhNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFlNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFpNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0WE1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WU1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Wk1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeF9tbV9wZXJfc2VjX3Blcl9zZWMgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24ucHJvdG90eXBlLmdldFhNbVBlclNlY1BlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS5zZXRYTW1QZXJTZWNQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5X21tX3Blcl9zZWNfcGVyX3NlYyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuZ2V0WU1tUGVyU2VjUGVyU2VjID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24ucHJvdG90eXBlLnNldFlNbVBlclNlY1BlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHpfbW1fcGVyX3NlY19wZXJfc2VjID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS5nZXRaTW1QZXJTZWNQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuc2V0Wk1tUGVyU2VjUGVyU2VjID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHhHYXVzczoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKSxcbiAgICB5R2F1c3M6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgekdhdXNzOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WEdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WUdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WkdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRYR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRZR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRaR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4X2dhdXNzID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5nZXRYR2F1c3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5wcm90b3R5cGUuc2V0WEdhdXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeV9nYXVzcyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5wcm90b3R5cGUuZ2V0WUdhdXNzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLnNldFlHYXVzcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHpfZ2F1c3MgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLmdldFpHYXVzcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5zZXRaR2F1c3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGFuZ3VsYXJWZWxvY2l0eTogKGYgPSBtc2cuZ2V0QW5ndWxhclZlbG9jaXR5KCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0QW5ndWxhclZlbG9jaXR5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRBbmd1bGFyVmVsb2NpdHkoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBBbmd1bGFyVmVsb2NpdHkgYW5ndWxhcl92ZWxvY2l0eSA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLmdldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLnNldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEFuZ3VsYXJWZWxvY2l0eSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5wcm90b3R5cGUuaGFzQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG9yaWVudGF0aW9uOiAoZiA9IG1zZy5nZXRPcmllbnRhdGlvbigpKSAmJiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3JpZW50YXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0T3JpZW50YXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEV1bGVyQW5nbGVzIG9yaWVudGF0aW9uID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldE9yaWVudGF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyT3JpZW50YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3JpZW50YXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzT3JpZW50YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGFjY2VsZXJhdGlvbjogKGYgPSBtc2cuZ2V0QWNjZWxlcmF0aW9uKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0QWNjZWxlcmF0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRBY2NlbGVyYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBBY2NlbGVyYXRpb24gYWNjZWxlcmF0aW9uID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0QWNjZWxlcmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0QWNjZWxlcmF0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJBY2NlbGVyYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QWNjZWxlcmF0aW9uKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNBY2NlbGVyYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1hZ25ldG9tZXRlcjogKGYgPSBtc2cuZ2V0TWFnbmV0b21ldGVyKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXI7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0TWFnbmV0b21ldGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNYWduZXRvbWV0ZXIoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNYWduZXRvbWV0ZXIgbWFnbmV0b21ldGVyID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWFnbmV0b21ldGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0TWFnbmV0b21ldGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJNYWduZXRvbWV0ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TWFnbmV0b21ldGVyKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnByb3RvdHlwZS5oYXNNYWduZXRvbWV0ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdS5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9pbXVfdjFfaW11X3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgSU1VU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElNVVNlcnZpY2UoKSB7fVxuICBJTVVTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmltdS52MS5JTVVTZXJ2aWNlXCI7XG4gIHJldHVybiBJTVVTZXJ2aWNlO1xufSgpKTtcblxuSU1VU2VydmljZS5SZWFkQW5ndWxhclZlbG9jaXR5ID0ge1xuICBtZXRob2ROYW1lOiBcIlJlYWRBbmd1bGFyVmVsb2NpdHlcIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ltdV92MV9pbXVfcGIuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlXG59O1xuXG5JTVVTZXJ2aWNlLlJlYWRPcmllbnRhdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZWFkT3JpZW50YXRpb25cIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkT3JpZW50YXRpb25SZXNwb25zZVxufTtcblxuSU1VU2VydmljZS5SZWFkQWNjZWxlcmF0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIlJlYWRBY2NlbGVyYXRpb25cIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ltdV92MV9pbXVfcGIuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlXG59O1xuXG5JTVVTZXJ2aWNlLlJlYWRNYWduZXRvbWV0ZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZE1hZ25ldG9tZXRlclwiLFxuICBzZXJ2aWNlOiBJTVVTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9pbXVfdjFfaW11X3BiLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuSU1VU2VydmljZSA9IElNVVNlcnZpY2U7XG5cbmZ1bmN0aW9uIElNVVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gcmVhZEFuZ3VsYXJWZWxvY2l0eShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkQW5ndWxhclZlbG9jaXR5LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkT3JpZW50YXRpb24gPSBmdW5jdGlvbiByZWFkT3JpZW50YXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KElNVVNlcnZpY2UuUmVhZE9yaWVudGF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkQWNjZWxlcmF0aW9uID0gZnVuY3Rpb24gcmVhZEFjY2VsZXJhdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkQWNjZWxlcmF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkTWFnbmV0b21ldGVyID0gZnVuY3Rpb24gcmVhZE1hZ25ldG9tZXRlcihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkTWFnbmV0b21ldGVyLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLklNVVNlcnZpY2VDbGllbnQgPSBJTVVTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXIucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sbGVyOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q29udHJvbGxlcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QucHJvdG90eXBlLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sc0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkQ29udHJvbHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDb250cm9sc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGNvbnRyb2xzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRDb250cm9sc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5wcm90b3R5cGUuc2V0Q29udHJvbHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRDb250cm9scyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQ29udHJvbHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldENvbnRyb2xzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29udHJvbGxlcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sbGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGV2ZW50c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV2ZW50c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRFdmVudHNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEV2ZW50IGV2ZW50cyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRFdmVudHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXZlbnRzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29udHJvbGxlcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBldmVudDogKGYgPSBtc2cuZ2V0RXZlbnQoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sbGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEV2ZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbGxlciA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3QucHJvdG90eXBlLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRDb250cm9sbGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgRXZlbnQgZXZlbnQgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3QucHJvdG90eXBlLmNsZWFyRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXZlbnQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5oYXNFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdGltZTogKGYgPSBtc2cuZ2V0VGltZSgpKSAmJiBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIGV2ZW50OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGNvbnRyb2w6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgXCJcIiksXG4gICAgdmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXA7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRUaW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RXZlbnQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VGltZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIHRpbWUgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIuVGltZXN0YW1wLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmNsZWFyVGltZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRUaW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmhhc1RpbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBldmVudCA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUuc2V0RXZlbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbCA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRDb250cm9sID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRDb250cm9sID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHZhbHVlID0gNDtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGNvbnRyb2xsZXI6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZXZlbnRzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXZlbnRzTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldENvbnRyb2xsZXIodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRXZlbnRzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucmVwZWF0ZWRGaWVsZHNfID0gWzIsM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGV2ZW50c0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgY2FuY2VsbGVkRXZlbnRzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q29udHJvbCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZENhbmNlbGxlZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDb250cm9sKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RXZlbnRzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q2FuY2VsbGVkRXZlbnRzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbCA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5nZXRDb250cm9sID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXRDb250cm9sID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGV2ZW50cyA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXRFdmVudHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuY2xlYXJFdmVudHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50c0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyBjYW5jZWxsZWRfZXZlbnRzID0gMztcbiAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuZ2V0Q2FuY2VsbGVkRXZlbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLnNldENhbmNlbGxlZEV2ZW50c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuYWRkQ2FuY2VsbGVkRXZlbnRzID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAzLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5jbGVhckNhbmNlbGxlZEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0Q2FuY2VsbGVkRXZlbnRzTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEV2ZW50cyBldmVudHMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlbnRzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFdmVudHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50c0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBldmVudDogKGYgPSBtc2cuZ2V0RXZlbnQoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEV2ZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBFdmVudCBldmVudCA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRFdmVudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50KHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLmhhc0V2ZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGV2ZW50c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV2ZW50c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRFdmVudHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRXZlbnQgZXZlbnRzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnNldEV2ZW50c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyRXZlbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFdmVudHNMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvY29tcG9uZW50L2lucHV0Y29udHJvbGxlci92MS9pbnB1dF9jb250cm9sbGVyLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXJfcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIElucHV0Q29udHJvbGxlclNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlKCkge31cbiAgSW5wdXRDb250cm9sbGVyU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuSW5wdXRDb250cm9sbGVyU2VydmljZVwiO1xuICByZXR1cm4gSW5wdXRDb250cm9sbGVyU2VydmljZTtcbn0oKSk7XG5cbklucHV0Q29udHJvbGxlclNlcnZpY2UuR2V0Q29udHJvbHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0Q29udHJvbHNcIixcbiAgc2VydmljZTogSW5wdXRDb250cm9sbGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuR2V0Q29udHJvbHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuR2V0Q29udHJvbHNSZXNwb25zZVxufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZS5HZXRFdmVudHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0RXZlbnRzXCIsXG4gIHNlcnZpY2U6IElucHV0Q29udHJvbGxlclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLkdldEV2ZW50c1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9pbnB1dGNvbnRyb2xsZXJfdjFfaW5wdXRfY29udHJvbGxlcl9wYi5HZXRFdmVudHNSZXNwb25zZVxufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZS5TdHJlYW1FdmVudHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU3RyZWFtRXZlbnRzXCIsXG4gIHNlcnZpY2U6IElucHV0Q29udHJvbGxlclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogdHJ1ZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuU3RyZWFtRXZlbnRzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLlN0cmVhbUV2ZW50c1Jlc3BvbnNlXG59O1xuXG5JbnB1dENvbnRyb2xsZXJTZXJ2aWNlLlRyaWdnZXJFdmVudCA9IHtcbiAgbWV0aG9kTmFtZTogXCJUcmlnZ2VyRXZlbnRcIixcbiAgc2VydmljZTogSW5wdXRDb250cm9sbGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuVHJpZ2dlckV2ZW50UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLlRyaWdnZXJFdmVudFJlc3BvbnNlXG59O1xuXG5leHBvcnRzLklucHV0Q29udHJvbGxlclNlcnZpY2UgPSBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlO1xuXG5mdW5jdGlvbiBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0Q29udHJvbHMgPSBmdW5jdGlvbiBnZXRDb250cm9scyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSW5wdXRDb250cm9sbGVyU2VydmljZS5HZXRDb250cm9scywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RXZlbnRzID0gZnVuY3Rpb24gZ2V0RXZlbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShJbnB1dENvbnRyb2xsZXJTZXJ2aWNlLkdldEV2ZW50cywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3RyZWFtRXZlbnRzID0gZnVuY3Rpb24gc3RyZWFtRXZlbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSkge1xuICB2YXIgbGlzdGVuZXJzID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIGVuZDogW10sXG4gICAgc3RhdHVzOiBbXVxuICB9O1xuICB2YXIgY2xpZW50ID0gZ3JwYy5pbnZva2UoSW5wdXRDb250cm9sbGVyU2VydmljZS5TdHJlYW1FdmVudHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbk1lc3NhZ2U6IGZ1bmN0aW9uIChyZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAgIGxpc3RlbmVycy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcihyZXNwb25zZU1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHN0YXR1cywgc3RhdHVzTWVzc2FnZSwgdHJhaWxlcnMpIHtcbiAgICAgIGxpc3RlbmVycy5zdGF0dXMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyKHsgY29kZTogc3RhdHVzLCBkZXRhaWxzOiBzdGF0dXNNZXNzYWdlLCBtZXRhZGF0YTogdHJhaWxlcnMgfSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5lbmQuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyKHsgY29kZTogc3RhdHVzLCBkZXRhaWxzOiBzdGF0dXNNZXNzYWdlLCBtZXRhZGF0YTogdHJhaWxlcnMgfSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycyA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBvbjogZnVuY3Rpb24gKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGxpc3RlbmVyc1t0eXBlXS5wdXNoKGhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxpc3RlbmVycyA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KElucHV0Q29udHJvbGxlclNlcnZpY2UuVHJpZ2dlckV2ZW50LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLklucHV0Q29udHJvbGxlclNlcnZpY2VDbGllbnQgPSBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3IucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvc3RydWN0X3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cyc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvd2VyUGN0OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UG93ZXJQY3QodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvd2VyUGN0KCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHBvd2VyX3BjdCA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRQb3dlclBjdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0UG93ZXJQY3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcnBtOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHJldm9sdXRpb25zOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UnBtKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UmV2b2x1dGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJwbSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJldm9sdXRpb25zKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJwbSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5nZXRScG0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLnNldFJwbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJldm9sdXRpb25zID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLmdldFJldm9sdXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXZvbHV0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHJwbToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKSxcbiAgICBwb3NpdGlvblJldm9sdXRpb25zOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRScG0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvblJldm9sdXRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJwbSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uUmV2b2x1dGlvbnMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcnBtID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuZ2V0UnBtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2V0UnBtID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcG9zaXRpb25fcmV2b2x1dGlvbnMgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnByb3RvdHlwZS5nZXRQb3NpdGlvblJldm9sdXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2V0UG9zaXRpb25SZXZvbHV0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBvZmZzZXQ6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRPZmZzZXQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9mZnNldCgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBvZmZzZXQgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0T2Zmc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRPZmZzZXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb246IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb24oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBwb3NpdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBpc09uOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRJc09uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SXNPbigpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGlzX29uID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UucHJvdG90eXBlLmdldElzT24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5wcm90b3R5cGUuc2V0SXNPbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb3NpdGlvblJlcG9ydGluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvblJlcG9ydGluZyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb25SZXBvcnRpbmcoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBwb3NpdGlvbl9yZXBvcnRpbmcgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRQb3NpdGlvblJlcG9ydGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb25SZXBvcnRpbmcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGlzT246IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEsIGZhbHNlKSxcbiAgICBwb3NpdGlvblJlcG9ydGluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgZmFsc2UpLFxuICAgIHBvc2l0aW9uOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldElzT24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFBvc2l0aW9uUmVwb3J0aW5nKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UG9zaXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SXNPbigpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb25SZXBvcnRpbmcoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGlzX29uID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLnByb3RvdHlwZS5nZXRJc09uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0SXNPbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHBvc2l0aW9uX3JlcG9ydGluZyA9IDI7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb25SZXBvcnRpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLnByb3RvdHlwZS5zZXRQb3NpdGlvblJlcG9ydGluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcG9zaXRpb24gPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9tb3Rvci92MS9tb3Rvci5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L21vdG9yL3YxL21vdG9yX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBNb3RvclNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNb3RvclNlcnZpY2UoKSB7fVxuICBNb3RvclNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuTW90b3JTZXJ2aWNlXCI7XG4gIHJldHVybiBNb3RvclNlcnZpY2U7XG59KCkpO1xuXG5Nb3RvclNlcnZpY2UuU2V0UG93ZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU2V0UG93ZXJcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TZXRQb3dlclJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TZXRQb3dlclJlc3BvbnNlXG59O1xuXG5Nb3RvclNlcnZpY2UuR29Gb3IgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR29Gb3JcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb0ZvclJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb0ZvclJlc3BvbnNlXG59O1xuXG5Nb3RvclNlcnZpY2UuR29UbyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHb1RvXCIsXG4gIHNlcnZpY2U6IE1vdG9yU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfbW90b3JfdjFfbW90b3JfcGIuR29Ub1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb1RvUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5SZXNldFplcm9Qb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZXNldFplcm9Qb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5HZXRQb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRQb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldFBvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldFBvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5HZXRGZWF0dXJlcyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRGZWF0dXJlc1wiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldEZlYXR1cmVzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldEZlYXR1cmVzUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5TdG9wID0ge1xuICBtZXRob2ROYW1lOiBcIlN0b3BcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TdG9wUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlN0b3BSZXNwb25zZVxufTtcblxuTW90b3JTZXJ2aWNlLklzUG93ZXJlZCA9IHtcbiAgbWV0aG9kTmFtZTogXCJJc1Bvd2VyZWRcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Jc1Bvd2VyZWRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfbW90b3JfdjFfbW90b3JfcGIuSXNQb3dlcmVkUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuTW90b3JTZXJ2aWNlID0gTW90b3JTZXJ2aWNlO1xuXG5mdW5jdGlvbiBNb3RvclNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldFBvd2VyID0gZnVuY3Rpb24gc2V0UG93ZXIocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5TZXRQb3dlciwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nb0ZvciA9IGZ1bmN0aW9uIGdvRm9yKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuR29Gb3IsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdG9yU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ29UbyA9IGZ1bmN0aW9uIGdvVG8ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5Hb1RvLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlc2V0WmVyb1Bvc2l0aW9uID0gZnVuY3Rpb24gcmVzZXRaZXJvUG9zaXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5SZXNldFplcm9Qb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuR2V0UG9zaXRpb24sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdG9yU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RmVhdHVyZXMgPSBmdW5jdGlvbiBnZXRGZWF0dXJlcyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoTW90b3JTZXJ2aWNlLkdldEZlYXR1cmVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuU3RvcCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5pc1Bvd2VyZWQgPSBmdW5jdGlvbiBpc1Bvd2VyZWQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5Jc1Bvd2VyZWQsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuTW90b3JTZXJ2aWNlQ2xpZW50ID0gTW90b3JTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvc2Vydm8vdjEvc2Vydm8ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBhbmdsZURlZzoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRVaW50MzIoKSk7XG4gICAgICBtc2cuc2V0QW5nbGVEZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5nbGVEZWcoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIGFuZ2xlX2RlZyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldEFuZ2xlRGVnID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBvc2l0aW9uRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRVaW50MzIoKSk7XG4gICAgICBtc2cuc2V0UG9zaXRpb25EZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uRGVnKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIHBvc2l0aW9uX2RlZyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb25EZWc6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDMyKCkpO1xuICAgICAgbXNnLnNldFBvc2l0aW9uRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uRGVnKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIHBvc2l0aW9uX2RlZyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLnByb3RvdHlwZS5nZXRQb3NpdGlvbkRlZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2by5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9zZXJ2b192MV9zZXJ2b19wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L3NlcnZvL3YxL3NlcnZvX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBTZXJ2b1NlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXJ2b1NlcnZpY2UoKSB7fVxuICBTZXJ2b1NlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU2Vydm9TZXJ2aWNlXCI7XG4gIHJldHVybiBTZXJ2b1NlcnZpY2U7XG59KCkpO1xuXG5TZXJ2b1NlcnZpY2UuTW92ZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlXCIsXG4gIHNlcnZpY2U6IFNlcnZvU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfc2Vydm9fdjFfc2Vydm9fcGIuTW92ZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9zZXJ2b192MV9zZXJ2b19wYi5Nb3ZlUmVzcG9uc2Vcbn07XG5cblNlcnZvU2VydmljZS5HZXRQb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRQb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBTZXJ2b1NlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X3NlcnZvX3YxX3NlcnZvX3BiLkdldFBvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X3NlcnZvX3YxX3NlcnZvX3BiLkdldFBvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuU2Vydm9TZXJ2aWNlID0gU2Vydm9TZXJ2aWNlO1xuXG5mdW5jdGlvbiBTZXJ2b1NlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5TZXJ2b1NlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiBtb3ZlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShTZXJ2b1NlcnZpY2UuTW92ZSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuU2Vydm9TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShTZXJ2b1NlcnZpY2UuR2V0UG9zaXRpb24sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuU2Vydm9TZXJ2aWNlQ2xpZW50ID0gU2Vydm9TZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9yb2JvdC92MS9yb2JvdC5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc291cmNlTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBjb21tYW5kTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBhcmdzOiAoZiA9IG1zZy5nZXRBcmdzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlc291cmNlTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldENvbW1hbmROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEFyZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VOYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q29tbWFuZE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBcmdzKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcmVzb3VyY2VfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnNldFJlc291cmNlTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBjb21tYW5kX25hbWUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q29tbWFuZE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnNldENvbW1hbmROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBhcmdzID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuZ2V0QXJncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuc2V0QXJncyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckFyZ3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QXJncyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5oYXNBcmdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc3VsdDogKGYgPSBtc2cuZ2V0UmVzdWx0KCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0UmVzdWx0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSZXN1bHQoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgcmVzdWx0ID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLmdldFJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXN1bHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRSZXN1bHQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLmhhc1Jlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgbWV0aG9kOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGFyZ3VtZW50czogKGYgPSBtc2cuZ2V0QXJndW1lbnRzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgc3RhcnRlZDogKGYgPSBtc2cuZ2V0U3RhcnRlZCgpKSAmJiBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWV0aG9kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEFyZ3VtZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXA7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRTdGFydGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb259IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SWQoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRNZXRob2QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBcmd1bWVudHMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRTdGFydGVkKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgNCxcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG1ldGhvZCA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmdldE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgYXJndW1lbnRzID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRBcmd1bWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5zZXRBcmd1bWVudHMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmNsZWFyQXJndW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEFyZ3VtZW50cyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmhhc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBzdGFydGVkID0gNDtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIuVGltZXN0YW1wLCA0KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuc2V0U3RhcnRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuY2xlYXJTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXJ0ZWQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5oYXNTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNCkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBvcGVyYXRpb25zTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0T3BlcmF0aW9uc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkT3BlcmF0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE9wZXJhdGlvbnNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbnMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24sIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuc2V0T3BlcmF0aW9uc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucHJvdG90eXBlLmFkZE9wZXJhdGlvbnMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhck9wZXJhdGlvbnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wZXJhdGlvbnNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBpZDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRJZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkucm9ib3QudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9yb2JvdC92MS9yb2JvdC5wcm90b1xuXG52YXIgcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3Byb3RvL2FwaS9yb2JvdC92MS9yb2JvdF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgUm9ib3RTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm9ib3RTZXJ2aWNlKCkge31cbiAgUm9ib3RTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkucm9ib3QudjEuUm9ib3RTZXJ2aWNlXCI7XG4gIHJldHVybiBSb2JvdFNlcnZpY2U7XG59KCkpO1xuXG5Sb2JvdFNlcnZpY2UuUmVzb3VyY2VSdW5Db21tYW5kID0ge1xuICBtZXRob2ROYW1lOiBcIlJlc291cmNlUnVuQ29tbWFuZFwiLFxuICBzZXJ2aWNlOiBSb2JvdFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfcm9ib3RfdjFfcm9ib3RfcGIuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfcm9ib3RfdjFfcm9ib3RfcGIuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2Vcbn07XG5cblJvYm90U2VydmljZS5HZXRPcGVyYXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE9wZXJhdGlvbnNcIixcbiAgc2VydmljZTogUm9ib3RTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiLkdldE9wZXJhdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5HZXRPcGVyYXRpb25zUmVzcG9uc2Vcbn07XG5cblJvYm90U2VydmljZS5DYW5jZWxPcGVyYXRpb24gPSB7XG4gIG1ldGhvZE5hbWU6IFwiQ2FuY2VsT3BlcmF0aW9uXCIsXG4gIHNlcnZpY2U6IFJvYm90U2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5DYW5jZWxPcGVyYXRpb25SZXNwb25zZVxufTtcblxuUm9ib3RTZXJ2aWNlLkJsb2NrRm9yT3BlcmF0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkJsb2NrRm9yT3BlcmF0aW9uXCIsXG4gIHNlcnZpY2U6IFJvYm90U2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuUm9ib3RTZXJ2aWNlID0gUm9ib3RTZXJ2aWNlO1xuXG5mdW5jdGlvbiBSb2JvdFNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5Sb2JvdFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlc291cmNlUnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJlc291cmNlUnVuQ29tbWFuZChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoUm9ib3RTZXJ2aWNlLlJlc291cmNlUnVuQ29tbWFuZCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuUm9ib3RTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRPcGVyYXRpb25zID0gZnVuY3Rpb24gZ2V0T3BlcmF0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoUm9ib3RTZXJ2aWNlLkdldE9wZXJhdGlvbnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblJvYm90U2VydmljZUNsaWVudC5wcm90b3R5cGUuY2FuY2VsT3BlcmF0aW9uID0gZnVuY3Rpb24gY2FuY2VsT3BlcmF0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShSb2JvdFNlcnZpY2UuQ2FuY2VsT3BlcmF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Sb2JvdFNlcnZpY2VDbGllbnQucHJvdG90eXBlLmJsb2NrRm9yT3BlcmF0aW9uID0gZnVuY3Rpb24gYmxvY2tGb3JPcGVyYXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFJvYm90U2VydmljZS5CbG9ja0Zvck9wZXJhdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5Sb2JvdFNlcnZpY2VDbGllbnQgPSBSb2JvdFNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGEucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZXNvdXJjZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZXNvdXJjZXNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRSZXNvdXJjZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUgcmVzb3VyY2VzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5wcm90b3R5cGUuZ2V0UmVzb3VyY2VzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXNvdXJjZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRSZXNvdXJjZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhclJlc291cmNlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VzTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGEucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX21ldGFkYXRhX3YxX21ldGFkYXRhX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9zZXJ2aWNlL21ldGFkYXRhL3YxL21ldGFkYXRhX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBNZXRhZGF0YVNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNZXRhZGF0YVNlcnZpY2UoKSB7fVxuICBNZXRhZGF0YVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLk1ldGFkYXRhU2VydmljZVwiO1xuICByZXR1cm4gTWV0YWRhdGFTZXJ2aWNlO1xufSgpKTtcblxuTWV0YWRhdGFTZXJ2aWNlLlJlc291cmNlcyA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZXNvdXJjZXNcIixcbiAgc2VydmljZTogTWV0YWRhdGFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbWV0YWRhdGFfdjFfbWV0YWRhdGFfcGIuUmVzb3VyY2VzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9tZXRhZGF0YV92MV9tZXRhZGF0YV9wYi5SZXNvdXJjZXNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5NZXRhZGF0YVNlcnZpY2UgPSBNZXRhZGF0YVNlcnZpY2U7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk1ldGFkYXRhU2VydmljZUNsaWVudC5wcm90b3R5cGUucmVzb3VyY2VzID0gZnVuY3Rpb24gcmVzb3VyY2VzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNZXRhZGF0YVNlcnZpY2UuUmVzb3VyY2VzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLk1ldGFkYXRhU2VydmljZUNsaWVudCA9IE1ldGFkYXRhU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvc2VydmljZS9tb3Rpb24vdjEvbW90aW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBkZXN0aW5hdGlvbjogKGYgPSBtc2cuZ2V0RGVzdGluYXRpb24oKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBjb21wb25lbnROYW1lOiAoZiA9IG1zZy5nZXRDb21wb25lbnROYW1lKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHdvcmxkU3RhdGU6IChmID0gbXNnLmdldFdvcmxkU3RhdGUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldERlc3RpbmF0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0Q29tcG9uZW50TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0V29ybGRTdGF0ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0RGVzdGluYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2VJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRDb21wb25lbnROYW1lKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdvcmxkU3RhdGUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSBkZXN0aW5hdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5nZXREZXN0aW5hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXREZXN0aW5hdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyRGVzdGluYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGVzdGluYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmhhc0Rlc3RpbmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBjb21wb25lbnRfbmFtZSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldENvbXBvbmVudE5hbWUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmhhc0NvbXBvbmVudE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZSB3b3JsZF9zdGF0ZSA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldFdvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2V0V29ybGRTdGF0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyV29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRXb3JsZFN0YXRlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5oYXNXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdWNjZXNzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRTdWNjZXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U3VjY2VzcygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHN1Y2Nlc3MgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdWNjZXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29tcG9uZW50TmFtZTogKGYgPSBtc2cuZ2V0Q29tcG9uZW50TmFtZSgpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBkZXN0aW5hdGlvbkZyYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIHN1cHBsZW1lbnRhbFRyYW5zZm9ybXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlRyYW5zZm9ybS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldENvbXBvbmVudE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXREZXN0aW5hdGlvbkZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5UcmFuc2Zvcm07XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuVHJhbnNmb3JtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU3VwcGxlbWVudGFsVHJhbnNmb3Jtcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29tcG9uZW50TmFtZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXREZXN0aW5hdGlvbkZyYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3VwcGxlbWVudGFsVHJhbnNmb3Jtc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuVHJhbnNmb3JtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIGNvbXBvbmVudF9uYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0Q29tcG9uZW50TmFtZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuaGFzQ29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGRlc3RpbmF0aW9uX2ZyYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXREZXN0aW5hdGlvbkZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldERlc3RpbmF0aW9uRnJhbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBwcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSBzdXBwbGVtZW50YWxfdHJhbnNmb3JtcyA9IDM7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlRyYW5zZm9ybSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldFN1cHBsZW1lbnRhbFRyYW5zZm9ybXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm09fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuYWRkU3VwcGxlbWVudGFsVHJhbnNmb3JtcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zZTogKGYgPSBtc2cuZ2V0UG9zZSgpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSBwb3NlID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2VJbkZyYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2UodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5tb3Rpb24udjFcbi8vIGZpbGU6IHByb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb24ucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX21vdGlvbl92MV9tb3Rpb25fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgTW90aW9uU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1vdGlvblNlcnZpY2UoKSB7fVxuICBNb3Rpb25TZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW90aW9uU2VydmljZVwiO1xuICByZXR1cm4gTW90aW9uU2VydmljZTtcbn0oKSk7XG5cbk1vdGlvblNlcnZpY2UuTW92ZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlXCIsXG4gIHNlcnZpY2U6IE1vdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9tb3Rpb25fdjFfbW90aW9uX3BiLk1vdmVSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX21vdGlvbl92MV9tb3Rpb25fcGIuTW92ZVJlc3BvbnNlXG59O1xuXG5Nb3Rpb25TZXJ2aWNlLkdldFBvc2UgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0UG9zZVwiLFxuICBzZXJ2aWNlOiBNb3Rpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbW90aW9uX3YxX21vdGlvbl9wYi5HZXRQb3NlUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9tb3Rpb25fdjFfbW90aW9uX3BiLkdldFBvc2VSZXNwb25zZVxufTtcblxuZXhwb3J0cy5Nb3Rpb25TZXJ2aWNlID0gTW90aW9uU2VydmljZTtcblxuZnVuY3Rpb24gTW90aW9uU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk1vdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiBtb3ZlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3Rpb25TZXJ2aWNlLk1vdmUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFBvc2UgPSBmdW5jdGlvbiBnZXRQb3NlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3Rpb25TZXJ2aWNlLkdldFBvc2UsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuTW90aW9uU2VydmljZUNsaWVudCA9IE1vdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2UvbmF2aWdhdGlvbi92MS9uYXZpZ2F0aW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbW9kZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRNb2RlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1vZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNb2RlIG1vZGUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UucHJvdG90eXBlLmdldE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5wcm90b3R5cGUuc2V0TW9kZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBtb2RlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGV9ICovIChyZWFkZXIucmVhZEVudW0oKSk7XG4gICAgICBtc2cuc2V0TW9kZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1vZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNb2RlIG1vZGUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5Nb2RlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuc2V0TW9kZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGlkOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldExvY2F0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SWQoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMb2NhdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGlkID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LnByb3RvdHlwZS5zZXRJZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQgbG9jYXRpb24gPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLmNsZWFyTG9jYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TG9jYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LnByb3RvdHlwZS5oYXNMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldExvY2F0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRMb2NhdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCBsb2NhdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyTG9jYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TG9jYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLmhhc0xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB3YXlwb2ludHNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRXYXlwb2ludHNMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQ7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFdheXBvaW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFdheXBvaW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBXYXlwb2ludCB3YXlwb2ludHMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50Pn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0V2F5cG9pbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludD59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50Pn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRXYXlwb2ludHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludD19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRXYXlwb2ludHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhcldheXBvaW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0V2F5cG9pbnRzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0TG9jYXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TG9jYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQgbG9jYXRpb24gPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuY2xlYXJMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRMb2NhdGlvbih1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LnByb3RvdHlwZS5oYXNMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGUgPSB7XG4gIE1PREVfVU5TUEVDSUZJRUQ6IDAsXG4gIE1PREVfTUFOVUFMOiAxLFxuICBNT0RFX1dBWVBPSU5UOiAyXG59O1xuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb24ucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIE5hdmlnYXRpb25TZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTmF2aWdhdGlvblNlcnZpY2UoKSB7fVxuICBOYXZpZ2F0aW9uU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5OYXZpZ2F0aW9uU2VydmljZVwiO1xuICByZXR1cm4gTmF2aWdhdGlvblNlcnZpY2U7XG59KCkpO1xuXG5OYXZpZ2F0aW9uU2VydmljZS5HZXRNb2RlID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE1vZGVcIixcbiAgc2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuR2V0TW9kZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLkdldE1vZGVSZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuU2V0TW9kZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJTZXRNb2RlXCIsXG4gIHNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLlNldE1vZGVSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5TZXRNb2RlUmVzcG9uc2Vcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlLkdldExvY2F0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldExvY2F0aW9uXCIsXG4gIHNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLkdldExvY2F0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuR2V0TG9jYXRpb25SZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuR2V0V2F5cG9pbnRzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFdheXBvaW50c1wiLFxuICBzZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5HZXRXYXlwb2ludHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5HZXRXYXlwb2ludHNSZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuQWRkV2F5cG9pbnQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiQWRkV2F5cG9pbnRcIixcbiAgc2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuQWRkV2F5cG9pbnRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5BZGRXYXlwb2ludFJlc3BvbnNlXG59O1xuXG5OYXZpZ2F0aW9uU2VydmljZS5SZW1vdmVXYXlwb2ludCA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZW1vdmVXYXlwb2ludFwiLFxuICBzZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5SZW1vdmVXYXlwb2ludFJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLlJlbW92ZVdheXBvaW50UmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuTmF2aWdhdGlvblNlcnZpY2UgPSBOYXZpZ2F0aW9uU2VydmljZTtcblxuZnVuY3Rpb24gTmF2aWdhdGlvblNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5OYXZpZ2F0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0TW9kZSA9IGZ1bmN0aW9uIGdldE1vZGUocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLkdldE1vZGUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5zZXRNb2RlID0gZnVuY3Rpb24gc2V0TW9kZShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoTmF2aWdhdGlvblNlcnZpY2UuU2V0TW9kZSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTmF2aWdhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0TG9jYXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLkdldExvY2F0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5OYXZpZ2F0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0V2F5cG9pbnRzID0gZnVuY3Rpb24gZ2V0V2F5cG9pbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShOYXZpZ2F0aW9uU2VydmljZS5HZXRXYXlwb2ludHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5hZGRXYXlwb2ludCA9IGZ1bmN0aW9uIGFkZFdheXBvaW50KHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShOYXZpZ2F0aW9uU2VydmljZS5BZGRXYXlwb2ludCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTmF2aWdhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlbW92ZVdheXBvaW50ID0gZnVuY3Rpb24gcmVtb3ZlV2F5cG9pbnQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLlJlbW92ZVdheXBvaW50LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50ID0gTmF2aWdhdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb24ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvc3RydWN0X3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlciA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGNhbWVyYU5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgc2VnbWVudGVyTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBtaW1lVHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBcIlwiKSxcbiAgICBwYXJhbWV0ZXJzOiAoZiA9IG1zZy5nZXRQYXJhbWV0ZXJzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q2FtZXJhTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFNlZ21lbnRlck5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRNaW1lVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3Q7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQYXJhbWV0ZXJzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q2FtZXJhTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFNlZ21lbnRlck5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRNaW1lVHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBhcmFtZXRlcnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICA0LFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBjYW1lcmFfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLmdldENhbWVyYU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LnByb3RvdHlwZS5zZXRDYW1lcmFOYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHNlZ21lbnRlcl9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0U2VnbWVudGVyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnNldFNlZ21lbnRlck5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgcGFyYW1ldGVycyA9IDQ7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgNCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnNldFBhcmFtZXRlcnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLmNsZWFyUGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQYXJhbWV0ZXJzKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuaGFzUGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbWltZVR5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgb2JqZWN0c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE9iamVjdHNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWltZVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvaW50Q2xvdWRPYmplY3Q7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE9iamVjdHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPYmplY3RzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb2ludENsb3VkT2JqZWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBtaW1lX3R5cGUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UucHJvdG90eXBlLnNldE1pbWVUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0IG9iamVjdHMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0T2JqZWN0c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdD59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdCwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuc2V0T2JqZWN0c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuYWRkT2JqZWN0cyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhck9iamVjdHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9iamVjdHNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlZ21lbnRlck5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRTZWdtZW50ZXJOYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZWdtZW50ZXJOYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgc2VnbWVudGVyX25hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QucHJvdG90eXBlLmdldFNlZ21lbnRlck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5wcm90b3R5cGUuc2V0U2VnbWVudGVyTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICB0eXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHR5cGUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUuc2V0VHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwYXJhbWV0ZXJzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UGFyYW1ldGVyc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXI7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUGFyYW1ldGVycyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBhcmFtZXRlcnNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBUeXBlZFBhcmFtZXRlciBwYXJhbWV0ZXJzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5wcm90b3R5cGUuc2V0UGFyYW1ldGVyc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXI9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRQYXJhbWV0ZXJzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhclBhcmFtZXRlcnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBhcmFtZXRlcnNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZWdtZW50ZXJzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5hZGRTZWdtZW50ZXJzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U2VnbWVudGVyc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIHNlZ21lbnRlcnMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucHJvdG90eXBlLmdldFNlZ21lbnRlcnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxzdHJpbmc+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucHJvdG90eXBlLnNldFNlZ21lbnRlcnNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRTZWdtZW50ZXJzID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTZWdtZW50ZXJzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTZWdtZW50ZXJzTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbi5wcm90b1xuXG52YXIgcHJvdG9fYXBpX3NlcnZpY2Vfb2JqZWN0c2VnbWVudGF0aW9uX3YxX29iamVjdF9zZWdtZW50YXRpb25fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlKCkge31cbiAgT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VcIjtcbiAgcmV0dXJuIE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2U7XG59KCkpO1xuXG5PYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldE9iamVjdFBvaW50Q2xvdWRzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE9iamVjdFBvaW50Q2xvdWRzXCIsXG4gIHNlcnZpY2U6IE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9vYmplY3RzZWdtZW50YXRpb25fdjFfb2JqZWN0X3NlZ21lbnRhdGlvbl9wYi5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfb2JqZWN0c2VnbWVudGF0aW9uX3YxX29iamVjdF9zZWdtZW50YXRpb25fcGIuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZVxufTtcblxuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFNlZ21lbnRlclBhcmFtZXRlcnNcIixcbiAgc2VydmljZTogT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZVxufTtcblxuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5HZXRTZWdtZW50ZXJzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFNlZ21lbnRlcnNcIixcbiAgc2VydmljZTogT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlcnNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5PYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlID0gT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZTtcblxuZnVuY3Rpb24gT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldE9iamVjdFBvaW50Q2xvdWRzID0gZnVuY3Rpb24gZ2V0T2JqZWN0UG9pbnRDbG91ZHMocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UuR2V0T2JqZWN0UG9pbnRDbG91ZHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFNlZ21lbnRlclBhcmFtZXRlcnMgPSBmdW5jdGlvbiBnZXRTZWdtZW50ZXJQYXJhbWV0ZXJzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldFNlZ21lbnRlclBhcmFtZXRlcnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFNlZ21lbnRlcnMgPSBmdW5jdGlvbiBnZXRTZWdtZW50ZXJzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldFNlZ21lbnRlcnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudCA9IE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdF9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiKTtcbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbnZhciBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21tb24vdjEvY29tbW9uX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncycsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlbnNvck5hbWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0U2Vuc29yTmFtZXNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRTZW5zb3JOYW1lcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZW5zb3JOYW1lc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIHNlbnNvcl9uYW1lcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLmdldFNlbnNvck5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLmFkZFNlbnNvck5hbWVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U2Vuc29yTmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZW5zb3JOYW1lc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFNlbnNvck5hbWVzTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU2Vuc29yTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U2Vuc29yTmFtZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBzZW5zb3JfbmFtZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS5nZXRTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5wcm90b3R5cGUuc2V0U2Vuc29yTmFtZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS5hZGRTZW5zb3JOYW1lcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QucHJvdG90eXBlLmNsZWFyU2Vuc29yTmFtZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFNlbnNvck5hbWVzTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5yZXBlYXRlZEZpZWxkc18gPSBbMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0gbXNnLmdldE5hbWUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgcmVhZGluZ3NMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZWFkaW5nc0xpc3QoKSxcbiAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlZhbHVlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5nc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuVmFsdWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlYWRpbmdzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRSZWFkaW5nc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBuYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5nc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXROYW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlZhbHVlIHJlYWRpbmdzID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuZ2V0UmVhZGluZ3NMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuVmFsdWUsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnByb3RvdHlwZS5zZXRSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnByb3RvdHlwZS5hZGRSZWFkaW5ncyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuY2xlYXJSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVhZGluZ3NMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlYWRpbmdzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVhZGluZ3NMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUmVhZGluZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJlYWRpbmdzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFJlYWRpbmdzIHJlYWRpbmdzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuZ2V0UmVhZGluZ3NMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3M+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuYWRkUmVhZGluZ3MgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVhZGluZ3NMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MVxuLy8gZmlsZTogcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzLnByb3RvXG5cbnZhciBwcm90b19hcGlfc2VydmljZV9zZW5zb3JzX3YxX3NlbnNvcnNfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBTZW5zb3JzU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNlbnNvcnNTZXJ2aWNlKCkge31cbiAgU2Vuc29yc1NlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuU2Vuc29yc1NlcnZpY2VcIjtcbiAgcmV0dXJuIFNlbnNvcnNTZXJ2aWNlO1xufSgpKTtcblxuU2Vuc29yc1NlcnZpY2UuR2V0U2Vuc29ycyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRTZW5zb3JzXCIsXG4gIHNlcnZpY2U6IFNlbnNvcnNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc2Vuc29yc192MV9zZW5zb3JzX3BiLkdldFNlbnNvcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX3NlbnNvcnNfdjFfc2Vuc29yc19wYi5HZXRTZW5zb3JzUmVzcG9uc2Vcbn07XG5cblNlbnNvcnNTZXJ2aWNlLkdldFJlYWRpbmdzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFJlYWRpbmdzXCIsXG4gIHNlcnZpY2U6IFNlbnNvcnNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc2Vuc29yc192MV9zZW5zb3JzX3BiLkdldFJlYWRpbmdzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9zZW5zb3JzX3YxX3NlbnNvcnNfcGIuR2V0UmVhZGluZ3NSZXNwb25zZVxufTtcblxuZXhwb3J0cy5TZW5zb3JzU2VydmljZSA9IFNlbnNvcnNTZXJ2aWNlO1xuXG5mdW5jdGlvbiBTZW5zb3JzU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblNlbnNvcnNTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTZW5zb3JzID0gZnVuY3Rpb24gZ2V0U2Vuc29ycyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU2Vuc29yc1NlcnZpY2UuR2V0U2Vuc29ycywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuU2Vuc29yc1NlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFJlYWRpbmdzID0gZnVuY3Rpb24gZ2V0UmVhZGluZ3MocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFNlbnNvcnNTZXJ2aWNlLkdldFJlYWRpbmdzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLlNlbnNvcnNTZXJ2aWNlQ2xpZW50ID0gU2Vuc29yc1NlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1cy5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX2R1cmF0aW9uX3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0gbXNnLmdldE5hbWUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgc3RhdHVzOiAoZiA9IG1zZy5nZXRTdGF0dXMoKSkgJiYgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFN0YXR1cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3RhdHVzKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBuYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXROYW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBzdGF0dXMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLmdldFN0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuY2xlYXJTdGF0dXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U3RhdHVzKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuaGFzU3RhdHVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZXNvdXJjZU5hbWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVzb3VyY2VOYW1lc0xpc3QoKSxcbiAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlc291cmNlTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VOYW1lc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIHJlc291cmNlX25hbWVzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QucHJvdG90eXBlLmFkZFJlc291cmNlTmFtZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5jbGVhclJlc291cmNlTmFtZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc291cmNlTmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN0YXR1c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFN0YXR1c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRTdGF0dXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFN0YXR1c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBTdGF0dXMgc3RhdHVzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3RhdHVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuc2V0U3RhdHVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRTdGF0dXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTdGF0dXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXR1c0xpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc291cmNlTmFtZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZXNvdXJjZU5hbWVzTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBldmVyeTogKGYgPSBtc2cuZ2V0RXZlcnkoKSkgJiYgZ29vZ2xlX3Byb3RvYnVmX2R1cmF0aW9uX3BiLkR1cmF0aW9uLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlc291cmNlTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9kdXJhdGlvbl9wYi5EdXJhdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRFdmVyeSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSZXNvdXJjZU5hbWVzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZXJ5KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUgcmVzb3VyY2VfbmFtZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZU5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXNvdXJjZU5hbWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuYWRkUmVzb3VyY2VOYW1lcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VOYW1lc0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiBldmVyeSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuZ2V0RXZlcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24sIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb258dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlcnkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFdmVyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFdmVyeSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5oYXNFdmVyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGF0dXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRTdGF0dXNMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU3RhdHVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdGF0dXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgU3RhdHVzIHN0YXR1cyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmdldFN0YXR1c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnNldFN0YXR1c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuYWRkU3RhdHVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyU3RhdHVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTdGF0dXNMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5zdGF0dXMudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9zZXJ2aWNlL3N0YXR1cy92MS9zdGF0dXMucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX3N0YXR1c192MV9zdGF0dXNfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1c19wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgU3RhdHVzU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0YXR1c1NlcnZpY2UoKSB7fVxuICBTdGF0dXNTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzU2VydmljZVwiO1xuICByZXR1cm4gU3RhdHVzU2VydmljZTtcbn0oKSk7XG5cblN0YXR1c1NlcnZpY2UuR2V0U3RhdHVzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFN0YXR1c1wiLFxuICBzZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc3RhdHVzX3YxX3N0YXR1c19wYi5HZXRTdGF0dXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX3N0YXR1c192MV9zdGF0dXNfcGIuR2V0U3RhdHVzUmVzcG9uc2Vcbn07XG5cblN0YXR1c1NlcnZpY2UuU3RyZWFtU3RhdHVzID0ge1xuICBtZXRob2ROYW1lOiBcIlN0cmVhbVN0YXR1c1wiLFxuICBzZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IHRydWUsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9zdGF0dXNfdjFfc3RhdHVzX3BiLlN0cmVhbVN0YXR1c1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc3RhdHVzX3YxX3N0YXR1c19wYi5TdHJlYW1TdGF0dXNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5TdGF0dXNTZXJ2aWNlID0gU3RhdHVzU2VydmljZTtcblxuZnVuY3Rpb24gU3RhdHVzU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0YXR1c1NlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFN0YXR1cyA9IGZ1bmN0aW9uIGdldFN0YXR1cyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU3RhdHVzU2VydmljZS5HZXRTdGF0dXMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblN0YXR1c1NlcnZpY2VDbGllbnQucHJvdG90eXBlLnN0cmVhbVN0YXR1cyA9IGZ1bmN0aW9uIHN0cmVhbVN0YXR1cyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEpIHtcbiAgdmFyIGxpc3RlbmVycyA9IHtcbiAgICBkYXRhOiBbXSxcbiAgICBlbmQ6IFtdLFxuICAgIHN0YXR1czogW11cbiAgfTtcbiAgdmFyIGNsaWVudCA9IGdycGMuaW52b2tlKFN0YXR1c1NlcnZpY2UuU3RyZWFtU3RhdHVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25NZXNzYWdlOiBmdW5jdGlvbiAocmVzcG9uc2VNZXNzYWdlKSB7XG4gICAgICBsaXN0ZW5lcnMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIocmVzcG9uc2VNZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChzdGF0dXMsIHN0YXR1c01lc3NhZ2UsIHRyYWlsZXJzKSB7XG4gICAgICBsaXN0ZW5lcnMuc3RhdHVzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcih7IGNvZGU6IHN0YXR1cywgZGV0YWlsczogc3RhdHVzTWVzc2FnZSwgbWV0YWRhdGE6IHRyYWlsZXJzIH0pO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMuZW5kLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcih7IGNvZGU6IHN0YXR1cywgZGV0YWlsczogc3RhdHVzTWVzc2FnZSwgbWV0YWRhdGE6IHRyYWlsZXJzIH0pO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb246IGZ1bmN0aW9uICh0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBsaXN0ZW5lcnNbdHlwZV0ucHVzaChoYW5kbGVyKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5TdGF0dXNTZXJ2aWNlQ2xpZW50ID0gU3RhdHVzU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9zdHJlYW0vdjEvc3RyZWFtLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWVzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyBuYW1lcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLmdldE5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLnNldE5hbWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGROYW1lcyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLnN0cmVhbS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5zdHJlYW0udjFcbi8vIGZpbGU6IHByb3RvL3N0cmVhbS92MS9zdHJlYW0ucHJvdG9cblxudmFyIHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgU3RyZWFtU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0cmVhbVNlcnZpY2UoKSB7fVxuICBTdHJlYW1TZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5zdHJlYW0udjEuU3RyZWFtU2VydmljZVwiO1xuICByZXR1cm4gU3RyZWFtU2VydmljZTtcbn0oKSk7XG5cblN0cmVhbVNlcnZpY2UuTGlzdFN0cmVhbXMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiTGlzdFN0cmVhbXNcIixcbiAgc2VydmljZTogU3RyZWFtU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIuTGlzdFN0cmVhbXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIuTGlzdFN0cmVhbXNSZXNwb25zZVxufTtcblxuU3RyZWFtU2VydmljZS5BZGRTdHJlYW0gPSB7XG4gIG1ldGhvZE5hbWU6IFwiQWRkU3RyZWFtXCIsXG4gIHNlcnZpY2U6IFN0cmVhbVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19zdHJlYW1fdjFfc3RyZWFtX3BiLkFkZFN0cmVhbVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fc3RyZWFtX3YxX3N0cmVhbV9wYi5BZGRTdHJlYW1SZXNwb25zZVxufTtcblxuZXhwb3J0cy5TdHJlYW1TZXJ2aWNlID0gU3RyZWFtU2VydmljZTtcblxuZnVuY3Rpb24gU3RyZWFtU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0cmVhbVNlcnZpY2VDbGllbnQucHJvdG90eXBlLmxpc3RTdHJlYW1zID0gZnVuY3Rpb24gbGlzdFN0cmVhbXMocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFN0cmVhbVNlcnZpY2UuTGlzdFN0cmVhbXMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblN0cmVhbVNlcnZpY2VDbGllbnQucHJvdG90eXBlLmFkZFN0cmVhbSA9IGZ1bmN0aW9uIGFkZFN0cmVhbShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU3RyZWFtU2VydmljZS5BZGRTdHJlYW0sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuU3RyZWFtU2VydmljZUNsaWVudCA9IFN0cmVhbVNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCB7IGdycGMgfSA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIik7XG53aW5kb3cucm9ib3RBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGIuanMnKTtcbmNvbnN0IHsgUm9ib3RTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGJfc2VydmljZS5qcycpO1xud2luZG93Lm1ldGFkYXRhQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGFfcGIuanMnKTtcbmNvbnN0IHsgTWV0YWRhdGFTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuY29tbW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbndpbmRvdy5hcm1BcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2FybS92MS9hcm1fcGIuanMnKTtcbmNvbnN0IHsgQXJtU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5iYXNlQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9iYXNlL3YxL2Jhc2VfcGIuanMnKTtcbmNvbnN0IHsgQmFzZVNlcnZpY2VDbGllbnQgfSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5ib2FyZEFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmRfcGIuanMnKTtcbmNvbnN0IHsgQm9hcmRTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2JvYXJkL3YxL2JvYXJkX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5jYW1lcmFBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2NhbWVyYS92MS9jYW1lcmFfcGIuanMnKTtcbmNvbnN0IHsgQ2FtZXJhU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5mb3JjZU1hdHJpeEFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiLmpzJyk7XG5jb25zdCB7IEZvcmNlTWF0cml4U2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9mb3JjZW1hdHJpeC92MS9mb3JjZV9tYXRyaXhfcGJfc2VydmljZS5qcycpO1xud2luZG93LmdhbnRyeUFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ2FudHJ5L3YxL2dhbnRyeV9wYi5qcycpO1xuY29uc3QgeyBHYW50cnlTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2dhbnRyeS92MS9nYW50cnlfcGJfc2VydmljZS5qcycpO1xud2luZG93LmdyaXBwZXJBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2dyaXBwZXIvdjEvZ3JpcHBlcl9wYi5qcycpO1xuY29uc3QgeyBHcmlwcGVyU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9ncmlwcGVyL3YxL2dyaXBwZXJfcGJfc2VydmljZS5qcycpO1xud2luZG93LmltdUFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYi5qcycpO1xuY29uc3QgeyBJTVVTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2ltdS92MS9pbXVfcGJfc2VydmljZS5qcycpO1xud2luZG93LmlucHV0QXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbnB1dGNvbnRyb2xsZXIvdjEvaW5wdXRfY29udHJvbGxlcl9wYi5qcycpO1xuY29uc3QgeyBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2lucHV0Y29udHJvbGxlci92MS9pbnB1dF9jb250cm9sbGVyX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5tb3RvckFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3JfcGIuanMnKTtcbmNvbnN0IHsgTW90b3JTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L21vdG9yL3YxL21vdG9yX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5uYXZpZ2F0aW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbmF2aWdhdGlvbi92MS9uYXZpZ2F0aW9uX3BiLmpzJyk7XG5jb25zdCB7IE5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJfc2VydmljZS5qcycpO1xud2luZG93Lm1vdGlvbkFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb25fcGIuanMnKTtcbmNvbnN0IHsgTW90aW9uU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cub2JqZWN0U2VnbWVudGF0aW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGIuanMnKTtcbmNvbnN0IHsgT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGJfc2VydmljZS5qcycpO1xud2luZG93LnNlbnNvcnNBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9zZW5zb3JzL3YxL3NlbnNvcnNfcGIuanMnKTtcbmNvbnN0IHsgU2Vuc29yc1NlcnZpY2VDbGllbnQgfSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3NlbnNvcnMvdjEvc2Vuc29yc19wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuc2Vydm9BcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L3NlcnZvL3YxL3NlcnZvX3BiLmpzJyk7XG5jb25zdCB7IFNlcnZvU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2b19wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuc3RhdHVzQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1c19wYi5qcycpO1xuY29uc3QgeyBTdGF0dXNTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9zdGF0dXMvdjEvc3RhdHVzX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5zdHJlYW1BcGkgPSByZXF1aXJlKFwiLi9nZW4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYi5qc1wiKTtcbmNvbnN0IHsgU3RyZWFtU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYl9zZXJ2aWNlLmpzJyk7XG5jb25zdCB7IGRpYWxEaXJlY3QsIGRpYWxXZWJSVEMgfSA9IHJlcXVpcmUoXCJAdmlhbXJvYm90aWNzL3JwY1wiKTtcbndpbmRvdy5USFJFRSA9IHJlcXVpcmUoXCJ0aHJlZVwiKVxud2luZG93LnBjZExpYiA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUENETG9hZGVyLmpzXCIpXG53aW5kb3cub3JiaXRMaWIgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzXCIpXG53aW5kb3cudHJhY2tMaWIgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9UcmFja2JhbGxDb250cm9scy5qc1wiKVxuY29uc3QgcnRjQ29uZmlnID0ge1xuXHRpY2VTZXJ2ZXJzOiBbXG5cdFx0e1xuXHRcdFx0dXJsczogJ3N0dW46Z2xvYmFsLnN0dW4udHdpbGlvLmNvbTozNDc4P3RyYW5zcG9ydD11ZHAnXG5cdFx0fVxuXHRdXG59XG5cbmlmICh3aW5kb3cud2VicnRjQWRkaXRpb25hbElDRVNlcnZlcnMpIHtcblx0cnRjQ29uZmlnLmljZVNlcnZlcnMgPSBydGNDb25maWcuaWNlU2VydmVycy5jb25jYXQod2luZG93LndlYnJ0Y0FkZGl0aW9uYWxJQ0VTZXJ2ZXJzKTtcbn1cblxubGV0IGNvbm5lY3QgPSBhc3luYyAoYXV0aEVudGl0eSwgY3JlZHMpID0+IHtcblx0bGV0IHRyYW5zcG9ydEZhY3Rvcnk7XG5cdGNvbnN0IG9wdHMgPSB7IFxuXHRcdGF1dGhFbnRpdHk6IGF1dGhFbnRpdHksXG5cdFx0Y3JlZGVudGlhbHM6IGNyZWRzLFxuXHRcdHdlYnJ0Y09wdGlvbnM6IHsgcnRjQ29uZmlnOiBydGNDb25maWcgfSxcblx0fTtcblx0Y29uc3QgaW1wbGllZFVSTCA9IGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0bmFtZX0ke2xvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJyd9YDtcblx0aWYgKHdpbmRvdy53ZWJydGNFbmFibGVkKSB7XG5cdFx0aWYgKCF3aW5kb3cud2VicnRjU2lnbmFsaW5nQWRkcmVzcykge1xuXHRcdFx0d2luZG93LndlYnJ0Y1NpZ25hbGluZ0FkZHJlc3MgPSBpbXBsaWVkVVJMO1xuXHRcdH1cblx0XHRvcHRzLndlYnJ0Y09wdGlvbnMuc2lnbmFsaW5nQXV0aEVudGl0eSA9IG9wdHMuYXV0aEVudGl0eTtcblx0XHRvcHRzLndlYnJ0Y09wdGlvbnMuc2lnbmFsaW5nQ3JlZGVudGlhbHMgPSBvcHRzLmNyZWRlbnRpYWxzO1xuXG5cdFx0Y29uc3Qgd2ViUlRDQ29ubiA9IGF3YWl0IGRpYWxXZWJSVEMod2luZG93LndlYnJ0Y1NpZ25hbGluZ0FkZHJlc3MsIHdpbmRvdy53ZWJydGNIb3N0LCBvcHRzKTtcblx0XHR0cmFuc3BvcnRGYWN0b3J5ID0gd2ViUlRDQ29ubi50cmFuc3BvcnRGYWN0b3J5XG5cdFx0d2luZG93LnN0cmVhbVNlcnZpY2UgPSBuZXcgU3RyZWFtU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdFx0d2ViUlRDQ29ubi5wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gYXN5bmMgZXZlbnQgPT4ge1xuXHRcdFx0Y29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXHRcdFx0dmlkZW8uc3JjT2JqZWN0ID0gZXZlbnQuc3RyZWFtc1swXTtcblx0XHRcdHZpZGVvLmF1dG9wbGF5ID0gdHJ1ZTtcblx0XHRcdHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XG5cdFx0XHR2aWRlby5wbGF5c0lubGluZSA9IHRydWU7XG5cdFx0XHRjb25zdCBzdHJlYW1OYW1lID0gZXZlbnQuc3RyZWFtc1swXS5pZDtcblx0XHRcdGNvbnN0IHN0cmVhbUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdHJlYW0tJHtzdHJlYW1OYW1lfWApO1xuXHRcdFx0aWYgKHN0cmVhbUNvbnRhaW5lciAmJiBzdHJlYW1Db250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ2aWRlb1wiKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHN0cmVhbUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpWzBdLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0cmVhbUNvbnRhaW5lcikge1xuXHRcdFx0XHRzdHJlYW1Db250YWluZXIuYXBwZW5kQ2hpbGQodmlkZW8pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdmlkZW9QcmV2aWV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblx0XHRcdHZpZGVvUHJldmlldy5zcmNPYmplY3QgPSBldmVudC5zdHJlYW1zWzBdO1xuXHRcdFx0dmlkZW9QcmV2aWV3LmF1dG9wbGF5ID0gdHJ1ZTtcblx0XHRcdHZpZGVvUHJldmlldy5jb250cm9scyA9IGZhbHNlO1xuXHRcdFx0dmlkZW9QcmV2aWV3LnBsYXlzSW5saW5lID0gdHJ1ZTtcblx0XHRcdGNvbnN0IHN0cmVhbVByZXZpZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc3RyZWFtLXByZXZpZXctJHtzdHJlYW1OYW1lfWApO1xuXHRcdFx0aWYgKHN0cmVhbVByZXZpZXdDb250YWluZXIgJiYgc3RyZWFtUHJldmlld0NvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c3RyZWFtUHJldmlld0NvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpWzBdLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0cmVhbVByZXZpZXdDb250YWluZXIpIHtcblx0XHRcdFx0c3RyZWFtUHJldmlld0NvbnRhaW5lci5hcHBlbmRDaGlsZCh2aWRlb1ByZXZpZXcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0cmFuc3BvcnRGYWN0b3J5ID0gYXdhaXQgZGlhbERpcmVjdChpbXBsaWVkVVJMLCBvcHRzKTtcblx0fVxuXG5cdC8vIHNhdmUgYXV0aEVudGl0eSwgY3JlZHNcblx0d2luZG93LmNvbm5lY3QgPSAoKSA9PiBjb25uZWN0KGF1dGhFbnRpdHksIGNyZWRzKTtcblxuXHR3aW5kb3cucm9ib3RTZXJ2aWNlID0gbmV3IFJvYm90U2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblxuXHQvLyBUT0RPOiB0aGVzZSBzaG91bGQgYmUgY3JlYXRlZCBhcyBuZWVkZWQgZm9yICMyNzJcblx0d2luZG93LmFybVNlcnZpY2UgPSBuZXcgQXJtU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5iYXNlU2VydmljZSA9IG5ldyBCYXNlU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG4gICAgd2luZG93LmJvYXJkU2VydmljZSA9IG5ldyBCb2FyZFNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuY2FtZXJhU2VydmljZSA9IG5ldyBDYW1lcmFTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmZvcmNlTWF0cml4U2VydmljZSA9IG5ldyBGb3JjZU1hdHJpeFNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuZ2FudHJ5U2VydmljZSA9IG5ldyBHYW50cnlTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmdyaXBwZXJTZXJ2aWNlID0gbmV3IEdyaXBwZXJTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmltdVNlcnZpY2UgPSBuZXcgSU1VU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5pbnB1dENvbnRyb2xsZXJTZXJ2aWNlID0gbmV3IElucHV0Q29udHJvbGxlclNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cubW90b3JTZXJ2aWNlID0gbmV3IE1vdG9yU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5uYXZpZ2F0aW9uU2VydmljZSA9IG5ldyBOYXZpZ2F0aW9uU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5tb3Rpb25TZXJ2aWNlID0gbmV3IE1vdGlvblNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cub2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSA9IG5ldyBPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LnNlbnNvcnNTZXJ2aWNlID0gbmV3IFNlbnNvcnNTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LnNlcnZvU2VydmljZSA9IG5ldyBTZXJ2b1NlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuc3RhdHVzU2VydmljZSA9IG5ldyBTdGF0dXNTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcbn1cbndpbmRvdy5jb25uZWN0ID0gY29ubmVjdDtcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL0BpbXByb2JhYmxlLWVuZy9ncnBjLXdlYi9kaXN0L2dycGMtd2ViLWNsaWVudC51bWQuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9AdmlhbXJvYm90aWNzL3JwYy9kaXN0L21haW4uanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlLXByb3RvYnVmLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9hbnlfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL25vZGVfbW9kdWxlcy9nb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2J1aWxkL3RocmVlLmNqcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2J1aWxkL3RocmVlLm1vZHVsZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2NvbnRyb2xzL1RyYWNrYmFsbENvbnRyb2xzLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUENETG9hZGVyLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vZ29vZ2xlL2FwaS9odHRwX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL2dvb2dsZS9hcGkvaHR0cGJvZHlfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYXJtL3YxL2FybV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9ib2FyZC92MS9ib2FyZF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2JvYXJkL3YxL2JvYXJkX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvY2FtZXJhL3YxL2NhbWVyYV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ2FudHJ5L3YxL2dhbnRyeV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyX3BiX3NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbXUvdjEvaW11X3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXJfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbnB1dGNvbnRyb2xsZXIvdjEvaW5wdXRfY29udHJvbGxlcl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3JfcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9tb3Rvci92MS9tb3Rvcl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvc2Vydm8vdjEvc2Vydm9fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2b19wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9yb2JvdC92MS9yb2JvdF9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb25fcGIuanMiLCJ3ZWJwYWNrOi8vcmRrLXdlYi8uL3NyYy9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL25hdmlnYXRpb24vdjEvbmF2aWdhdGlvbl9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbl9wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbl9wYl9zZXJ2aWNlLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3NlbnNvcnMvdjEvc2Vuc29yc19wYi5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9zZW5zb3JzL3YxL3NlbnNvcnNfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9hcGkvc2VydmljZS9zdGF0dXMvdjEvc3RhdHVzX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3N0YXR1cy92MS9zdGF0dXNfcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViLy4vc3JjL2dlbi9wcm90by9zdHJlYW0vdjEvc3RyZWFtX3BiLmpzIiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvZ2VuL3Byb3RvL3N0cmVhbS92MS9zdHJlYW1fcGJfc2VydmljZS5qcyIsIndlYnBhY2s6Ly9yZGstd2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3Jkay13ZWIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3Jkay13ZWIvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9yZGstd2ViL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcmRrLXdlYi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3Jkay13ZWIvLi9zcmMvY29udHJvbC5qcyJdLCJuYW1lcyI6W10s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QTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDBFQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtB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QUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWIsOENBQTZDLENBQUMsY0FBYyxFQUFDOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUI7O0FBRXZCOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWUsU0FBUztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzWkFBc1o7O0FBRXRaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQyxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZixHQUFHOzs7QUFHSCx1R0FBdUc7O0FBRXZHLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEMsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFdBQVc7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsT0FBTztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUEseUNBQXlDOzs7QUFHekM7O0FBRUE7O0FBRUEsd0NBQXdDOzs7QUFHeEM7O0FBRUE7O0FBRUEsK0JBQStCO0FBQy9CO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFLDBFQUEwRTs7O0FBRzFFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1Qzs7O0FBR3ZDOztBQUVBOztBQUVBLHlDQUF5Qzs7O0FBR3pDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0MsK0JBQStCOzs7QUFHL0Isc0hBQXNIOztBQUV0SDtBQUNBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUEscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5RkFBeUY7OztBQUd6RjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDLHVCQUF1Qjs7QUFFdkIsdUJBQXVCOztBQUV2QixvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBLDRFQUE0RTs7QUFFNUU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUEsK0VBQStFOztBQUUvRTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLEdBQUc7OztBQUdILDJDQUEyQzs7O0FBRzNDO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxzREFBc0Q7OztBQUd0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsaUNBQWlDOztBQUU1RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQ0FBa0MsT0FBTztBQUN6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyxPQUFPO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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Q0FBbUMsUUFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsc0JBQXNCOztBQUV0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLFdBQVcsd0VBQXdFO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdGQUF3Rjs7O0FBR3hGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixtQ0FBbUM7QUFDekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asc0JBQXNCLG1DQUFtQztBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLG1DQUFtQztBQUN4RDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esc0JBQXNCLG1DQUFtQztBQUN6RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxzQkFBc0IsbUNBQW1DO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsbUNBQW1DO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLGVBQWU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxzQkFBc0I7O0FBRXRCO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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QTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCwwREFBMEQsK0RBQStEO0FBQzVLO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBLCtCQUErQjs7QUFFL0I7O0FBRUEsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKOztBQUVBLGtCQUFrQiw2QkFBNkI7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0osa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtB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QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGNBQWM7O0FBRWQsdUNBQXVDLFFBQVE7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RCxRQUFRO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTzs7QUFFdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixPQUFPOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4Qzs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDZCQUE2Qix3Q0FBd0MsR0FBRztBQUN4RSxnREFBZ0QsMEJBQTBCLHVCQUF1QixtQ0FBbUMsK0NBQStDLHFCQUFxQiw2QkFBNkIsb0VBQW9FLGlEQUFpRCx3QkFBd0IsYUFBYSxTQUFTLDhDQUE4Qyx5S0FBeUssK0JBQStCLDBGQUEwRixrSkFBa0osc0JBQXNCLHNDQUFzQyxpQkFBaUIsMEJBQTBCLDBDQUEwQyx1REFBdUQsNERBQTRELEdBQUc7O0FBRWpuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxpQ0FBaUM7O0FBRWpDOztBQUVBOztBQUVBOztBQUVBLCtCQUErQjs7O0FBRy9CLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEscUdBQXFHOzs7QUFHckc7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixXQUFXO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEdBQTRHOztBQUU1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsUUFBUTtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxFQUFFLGNBQWM7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDLFFBQVE7QUFDL0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtHQUFrRzs7QUFF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QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDLFFBQVE7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxRQUFRO0FBQy9DOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLDZD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUIseUJBQXlCOztBQUV6QjtBQUNBLG1DQUFtQzs7QUFFbkMsc0NBQXNDOztBQUV0QyxzQ0FBc0M7O0FBRXRDO0FBQ0EsZ0NBQWdDOztBQUVoQzs7QUFFQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMEJBQTBCOztBQUUxQixnQ0FBZ0M7OztBQUdoQztBQUNBLG1DQUFtQzs7QUFFbkMsc0NBQXNDOztBQUV0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQSxpQkFBaUIseUJBQXlCO0FBQzFDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosa0ZBQWtGLFNBQVMsR0FBRzs7QUFFOUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7O0FBRWpCO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOENBQThDOztBQUU5Qzs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDLDJEQUEyRDs7QUFFM0Q7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RCxzREFBc0Q7O0FBRXRELDhDQUE4Qzs7QUFFOUM7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBLEdBQUc7OztBQUdILHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7QUFDaEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1REFBdUQ7O0FBRXZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxRkFBcUY7QUFDckY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTs7QUFFQSwyQkFBMkI7O0FBRTNCLHlCQUF5QjtBQUN6QixJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDREQUE0RDs7O0FBRzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7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T0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDJCQUEyQjtBQUNyRDtBQUNBOztBQUVBLDRFQUE0RTs7O0FBRzVFOztBQUVBLGlEQUFpRDs7O0FBR2pELGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsT0FBTztBQUN2RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBOztBQUVBOztBQUVBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxPQUFPO0FBQ3ZEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnRUFBZ0U7O0FBRWhFOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxRQUFRO0FBQ3pDOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxnQ0FBZ0MsT0FBTztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUIsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRCxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGVBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFOztBQUV4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsY0FBYztBQUNkLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLG1CQUFtQjtBQUMxRDtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFD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SUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0JBQWtCLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTTtBQUMzRSxrQkFBa0IsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEVBQUU7O0FBRTdFO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQSwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTOztBQUUxQjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSw0QkFBNEI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEMsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEMsaURBQWlEO0FBQ2pEOztBQUVBLHVEQUF1RDs7QUFFdkQ7QUFDQSx1REFBdUQ7O0FBRXZELDJEQUEyRDs7QUFFM0Q7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdILDRFQUE0RTtBQUM1RTs7QUFFQTtBQUNBLDBGQUEwRjs7QUFFMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBLG9DQUFvQyxRQUFRO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsK0NBQStDOztBQUUvQyw0Q0FBNEM7O0FBRTVDLHlDQUF5Qzs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxzRUFBc0UsVUFBVTtBQUNoRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjs7QUFFbkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxPQUFPO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsMkJBQTJCO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxRQUFRO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLFFBQVE7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFD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R0g7O0FBRUEsK0NBQStDO0FBQy9DOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QyxTQUFTO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkM7O0FBRTdDLHVDQUF1QyxTQUFTO0FBQ2hEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3Qyx1Q0FBdUMsU0FBUztBQUNoRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjs7QUFFdEI7QUFDQSxtQ0FBbUM7O0FBRW5DLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0NBQXNDLFNBQVM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBLG9EQUFvRDs7QUFFcEQ7QUFDQSxHQUFHOzs7QUFHSCx1Q0FBdUM7O0FBRXZDOztBQUVBLCtDQUErQzs7O0FBRy9DOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsUUFBUTtBQUNwQztBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QyxpQkFBaUIsZ0JBQWdCO0FBQ2pDOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLGdCQUFnQjs7QUFFaEIsaUJBQWlCLDBCQUEwQjtBQUMzQyw2QkFBNkI7QUFDN0I7O0FBRUEsb0NBQW9DO0FBQ3BDLEVBQUU7OztBQUdGO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDLFNBQVM7QUFDdkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsSUFBSTtBQUNKLFVBQVU7QUFDVjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHNIQUFzSDs7QUFFdEg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCOztBQUV2QixxQkFBcUI7O0FBRXJCLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0JB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUEsNEVBQTRFOzs7QUFHNUU7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0Esb0VBQW9FLDZDQUE2Qzs7QUFFakg7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUNBQW1DLGFBQWE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5QyxrQkFBa0I7QUFDbEIsTUFBTTtBQUNOO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQSx5SEFBeUg7QUFDekg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7QUFDUDtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsYUFBYTtBQUMzRDtBQUNBOztBQUVBLDhDQUE4QyxhQUFhO0FBQzNEOztBQUVBLHNCQUFzQixtQkFBbUI7QUFDekM7QUFDQTs7QUFFQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMzRuQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0JBQWdCLFNBQVM7O0FBRXpCOztBQUVBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdCQUFnQixlQUFlO0FBQy9CLGdCQUFnQixlQUFlO0FBQy9CLGdCQUFnQixlQUFlOztBQUUvQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDLG9CQUFvQixtQkFBbUI7QUFDdkMsb0JBQW9CLG1CQUFtQjs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsY0FBYzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLGlCQUFpQjs7QUFFaEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZTtBQUMvQixnQkFBZ0IsZUFBZTs7QUFFL0I7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMEJBQTBCLHlCQUF5QjtBQUNuRCwwQkFBMEIseUJBQXlCOztBQUVuRDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0NBQWdDLFFBQVE7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmLGVBQWU7O0FBRWY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLHdEQUF3RDtBQUN4RCx3Q0FBd0M7QUFDeEMsd0NBQXdDOztBQUV4Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxjQUFjOztBQUU3Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCOztBQUVwQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLG1CQUFtQixpQkFBaUI7O0FBRXBDOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDLGdDQUFnQzs7QUFFaEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0NBQWdDOztBQUVoQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsT0FBTzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDhDQUE4Qzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLGtCQUFrQjs7QUFFekM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7O0FBRWhCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsa0JBQWtCOztBQUV6Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsV0FBVzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFROztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDLFFBQVE7O0FBRXREOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5Qzs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLEdBQUc7O0FBRUgsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esd0NBQXdDLE9BQU87O0FBRS9DO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjs7QUFFaEY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxRQUFROztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOzs7QUFHQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZSxlQUFlO0FBQzlDLGdCQUFnQixlQUFlLGVBQWU7QUFDOUMsZ0JBQWdCLGVBQWUsZ0JBQWdCO0FBQy9DLGdCQUFnQixlQUFlLGdCQUFnQjs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsbUJBQW1CLG1CQUFtQjtBQUMxRCxvQkFBb0IsbUJBQW1CLG1CQUFtQjtBQUMxRCxvQkFBb0IsbUJBQW1CLHFCQUFxQjtBQUM1RCxzQkFBc0IscUJBQXFCLHFCQUFxQjs7QUFFaEU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGlCQUFpQixnQkFBZ0I7QUFDakMsaUJBQWlCLGdCQUFnQjs7QUFFakM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxjQUFjLGNBQWM7QUFDM0MsZUFBZSxjQUFjLGNBQWM7QUFDM0MsZUFBZSxjQUFjLGVBQWU7QUFDNUMsZUFBZSxjQUFjLGVBQWU7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLG1CQUFtQjtBQUNuQyxnQkFBZ0IsbUJBQW1CO0FBQ25DLGdCQUFnQixtQkFBbUI7O0FBRW5DLGdCQUFnQixvQkFBb0I7QUFDcEMsZ0JBQWdCLG9CQUFvQjtBQUNwQyxpQkFBaUIscUJBQXFCOztBQUV0Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsY0FBYztBQUM3QixlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsY0FBYzs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsYUFBYSxhQUFhO0FBQ3hDLGNBQWMsYUFBYSxhQUFhO0FBQ3hDLGNBQWMsYUFBYSxjQUFjO0FBQ3pDLGNBQWMsYUFBYSxnQkFBZ0I7O0FBRTNDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsYUFBYSxhQUFhO0FBQzVDLGNBQWMsaUJBQWlCLGFBQWE7QUFDNUMsY0FBYyxhQUFhLG9CQUFvQjtBQUMvQyxjQUFjLGFBQWEsY0FBYzs7QUFFekM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTs7QUFFMUI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLFFBQVE7O0FBRTFCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckIsdUJBQXVCOztBQUV2Qjs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0Msd0JBQXdCOztBQUU5RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFF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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsNEJBQTRCOztBQUUvQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLHNEQUFzRDs7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUJBQXVCOztBQUU3RDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSw4Q0FBOEM7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsU0FBUzs7QUFFNUI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsa0JBQWtCOztBQUV6Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjs7QUFFdEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPOztBQUU3Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTzs7QUFFN0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTzs7QUFFN0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQ0FBbUMsT0FBTzs7QUFFMUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVILG1DQUFtQyxPQUFPOztBQUUxQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDLE9BQU87O0FBRXpDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsT0FBTzs7QUFFekM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyxrQkFBa0I7O0FBRXhEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9COztBQUVwQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx5REFBeUQsUUFBUTs7QUFFakU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx5REFBeUQsUUFBUTs7QUFFakU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlEQUF5RCxRQUFROztBQUVqRTtBQUNBOztBQUVBLGdEQUFnRCxRQUFROztBQUV4RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFD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Q0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsd0VBQXdFO0FBQ25GOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdFQUFnRTs7QUFFaEU7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QixJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7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O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IseUJBQXlCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNkNBQTZDLFFBQVE7O0FBRXJEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsUUFBUTs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixtQ0FBbUM7O0FBRTFEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE9BQU87O0FBRVAsdUJBQXVCLG1DQUFtQzs7QUFFMUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0JBQXNCLG1DQUFtQzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBLHVCQUF1QixtQ0FBbUM7O0FBRTFEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE9BQU87O0FBRVAsdUJBQXVCLG1DQUFtQzs7QUFFMUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0JBQXNCLG1DQUFtQzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7O0FBRTVCOztBQUVBLG1CQUFtQixlQUFlOztBQUVsQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0NBQW9DLGVBQWU7O0FBRW5EOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLGlDQUFpQztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQix1QkFBdUI7O0FBRXpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7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QUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsaURBQWlELE9BQU87O0FBRXhEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsT0FBTzs7QUFFeEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxvQkFBb0IsMEJBQTBCOztBQUU5QztBQUNBOztBQUVBOztBQUVBLHFCQUFxQix1QkFBdUI7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLDZCQUE2Qjs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLFlBQVk7O0FBRWhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixZQUFZOztBQUUvQjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixPQUFPOztBQUUxQjs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixPQUFPOztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsOEJBQThCLGVBQWU7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLE9BQU87O0FBRXRDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLCtCQUErQixPQUFPOztBQUV0Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixTQUFTOztBQUUxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7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Q0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QyxRQUFROztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQSxFQUFFOztBQUVGOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQSxFQUFFOztBQUVGOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMERBQTBELFFBQVE7O0FBRWxFOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7O0FBSUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixPQUFPOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87O0FBRTVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSixvQkFBb0IsT0FBTzs7QUFFM0I7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFDQUFxQyxPQUFPOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVB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RUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxRQUFROztBQUVqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxZQUFZLFFBQVE7O0FBRXBCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBLDBDQUEwQzs7QUFFMUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFdBQVc7O0FBRTdCOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkNBQTJDLFFBQVE7O0FBRW5EOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsT0FBTzs7QUFFMUI7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFF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QTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsd0NBQXdDLFFBQVE7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsU0FBUzs7QUFFVDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvQkFBb0I7O0FBRXBCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QiwwQ0FBMEM7O0FBRWpFOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU4sS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxPQUFPOztBQUVQOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLDRDQUE0Qzs7QUFFM0U7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEseUJBQXlCLHFCQUFxQjs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQ0FBaUMseUJBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxpQ0FBaUMsMEJBQTBCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUixNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjs7QUFFQTs7QUFFQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEIsdUJBQXVCOztBQUVqRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsd0JBQXdCOztBQUUzQzs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsMEJBQTBCOztBQUU3QztBQUNBOztBQUVBOztBQUVBLGdDQUFnQywwQ0FBMEM7QUFDMUU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHdCQUF3Qjs7QUFFM0M7QUFDQTs7QUFFQTs7QUFFQSxnQ0FBZ0MsdUNBQXVDOztBQUV2RTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsb0JBQW9COztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdDQUF3QyxPQUFPOztBQUUvQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CLGtCQUFrQjs7QUFFdEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQix3QkFBd0I7O0FBRTNDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBLEdBQUc7O0FBRUgsdUNBQXVDOztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNkNBQTZDO0FBQzdDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQzs7QUFFcEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQkFBc0I7O0FBRXRCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix5QkFBeUI7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRixTQUFTOztBQUU5RjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxZQUFZOztBQUVaOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLGdEQUFnRDs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHFCQUFxQixxQkFBcUI7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEseUNBQXlDLE9BQU87O0FBRWhEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsT0FBTzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxPQUFPOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvREFBb0Q7O0FBRXBEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0RBQW9EOztBQUVwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCLHlCQUF5Qjs7QUFFekI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkI7O0FBRTNCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsaUVBQWlFLGVBQWU7O0FBRWhGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCOztBQUV6Qjs7QUFFQSxrRUFBa0UsZUFBZTs7QUFFakY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1DQUFtQyxPQUFPOztBQUUxQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsT0FBTzs7QUFFekM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLGdCQUFnQjs7QUFFbkM7O0FBRUEsb0JBQW9CLG1CQUFtQjs7QUFFdkM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsZ0JBQWdCOztBQUVuQzs7QUFFQSxvQkFBb0IsbUJBQW1COztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsY0FBYyxtQkFBbUI7O0FBRWpDOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdCQUF3QixxQ0FBcUM7O0FBRTdEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtDQUFrQyxPQUFPOztBQUV6Qzs7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OztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxPQUFPOztBQUV4RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLCtDQUErQzs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwrQ0FBK0M7O0FBRS9DOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsUUFBUTs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpREFBaUQsT0FBTzs7QUFFeEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtDQUFrQyxRQUFROztBQUUxQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUEsaUNBQWlDLE9BQU87O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxRQUFROztBQUV6RDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxVQUFVLGdCQUFnQjs7QUFFMUI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsZUFBZTs7QUFFeEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLHFCQUFxQjs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7O0FBRXZDLG9CQUFvQixvQkFBb0I7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsb0JBQW9COztBQUV2QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwrQkFBK0I7O0FBRS9CLEdBQUc7O0FBRUgsMkJBQTJCOztBQUUzQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixXQUFXOztBQUU5Qjs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixXQUFXOztBQUUvQjs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixVQUFVOztBQUU3QixvQkFBb0IsMEJBQTBCOztBQUU5Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHlCQUF5Qjs7QUFFNUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIseUJBQXlCOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIseUJBQXlCOztBQUVuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsZ0JBQWdCOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FB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QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixlQUFlOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwQ0FBMEMsT0FBTzs7QUFFakQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMENBQTBDLE9BQU87O0FBRWpEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQyxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLGtCQUFrQjs7QUFFL0I7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUEsMkJBQTJCLCtCQUErQjs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsNkNBQTZDOztBQUU3Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTs7QUFFM0I7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRjs7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QTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMkNBQTJDLFFBQVE7O0FBRW5EOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixzQkFBc0I7O0FBRXhDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLHNCQUFzQjs7QUFFeEMsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjs7QUFFeEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7O0FBRXhDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDLG9CQUFvQixxQkFBcUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHNCQUFzQjs7QUFFekMsb0JBQW9CLHFCQUFxQjs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsbURBQW1EOztBQUVwRTs7QUFFQTs7QUFFQSx3Q0FBd0MsUUFBUTs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0QsT0FBTzs7QUFFdEUsc0JBQXNCLE9BQU87O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsZ0RBQWdELE9BQU87O0FBRXZELHFCQUFxQixPQUFPOztBQUU1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU07QUFDM0Usa0JBQWtCLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxFQUFFOztBQUU3RTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQjs7QUFFbEI7O0FBRUEscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0I7O0FBRWxCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUNBQXFDOztBQUVyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxjQUFjO0FBQ2Q7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDLEVBQUU7O0FBRXBDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixjQUFjOztBQUVoQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixjQUFjOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLGNBQWM7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0M7O0FBRWxDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMLGdDQUFnQzs7QUFFaEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHFDQUFxQyxTQUFTOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHFDQUFxQyxTQUFTOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLGFBQWE7O0FBRS9COztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLFNBQVM7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLGVBQWU7O0FBRWpDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjOztBQUVuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1RkFBdUYsY0FBYzs7QUFFckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxrQ0FBa0MsZ0JBQWdCOztBQUVsRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUzs7QUFFbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUNBQXlDLFNBQVM7O0FBRWxEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHFCQUFxQjs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixzQkFBc0I7O0FBRXhDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7O0FBRXBEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQiw0QkFBNEI7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQiwwQkFBMEI7O0FBRTFDOztBQUVBLHNCQUFzQiw0Q0FBNEM7O0FBRWxFOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLDhDQUE4Qzs7QUFFbkU7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFNBQVM7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQix3QkFBd0I7O0FBRTFDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFVBQVU7O0FBRVY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdDQUF3QyxPQUFPOztBQUUvQztBQUNBOztBQUVBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLCtCQUErQixjQUFjOztBQUU3Qzs7QUFFQTs7QUFFQSxVQUFVOztBQUVWOztBQUVB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Q0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlEQUFpRDs7QUFFakQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7O0FBR0g7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDhCQUE4Qjs7QUFFOUI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQSxxRUFBcUU7O0FBRXJFOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsT0FBTzs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCLE9BQU87O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPOztBQUV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0NBQWtDO0FBQ2xDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsOEVBQThFOztBQUU5RTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHFDQUFxQyxRQUFROztBQUU3QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUcsY0FBYzs7QUFFakI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0RBQWdELFFBQVE7O0FBRXhEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsU0FBUzs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQyxPQUFPOztBQUUzQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUEsb0NBQW9DLE9BQU87O0FBRTNDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG9DQUFvQyxPQUFPOztBQUUzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUCx1RUFBdUUsWUFBWTs7QUFFbkY7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUJBQXFCLDJCQUEyQjs7QUFFaEQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCOztBQUVwQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLFFBQVE7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLFFBQVE7O0FBRTdDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLFFBQVE7O0FBRTlDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvQ0FBb0MsT0FBTzs7QUFFM0M7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUEsNkNBQTZDOztBQUU3Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxNQUFNOztBQUVOOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGtFQUFrRTs7QUFFbEU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIscUJBQXFCOztBQUV4Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsNkJBQTZCOztBQUVoRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsbUJBQW1COztBQUV0QztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsa0JBQWtCOztBQUVsQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVILGtFQUFrRSwrQkFBK0I7O0FBRWpHLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTCxJQUFJOztBQUVKOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwRUFBMEU7O0FBRTFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDLE9BQU87O0FBRW5EOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsaURBQWlEOztBQUVqRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCOztBQUVuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVB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QUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsU0FBUzs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1DQUFtQyxTQUFTOztBQUU1Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQ0FBbUMsU0FBUzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUNBQW1DLFNBQVM7O0FBRTVDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUIseUJBQXlCOztBQUU5Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxpREFBaUQ7O0FBRWpEOztBQUVBLEdBQUcsZ0VBQWdFOztBQUVuRTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOzs7QUFHQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDLHdDQUF3QyxTQUFTOztB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d0JBQXdCO0FBQ3hCLHlCQUF5Qjs7QUFFekI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxXQUFXOztBQUVYOztBQUVBOztBQUVBLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSw4Q0FBOEMsU0FBUzs7QUFFdkQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxTQUFTOztBQUV2RDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxHQUFHLE9BQU87O0FBRVY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0RBQW9EO0FBQ3BEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTixLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QyxTQUFTOztBQUVqRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0Esd0NBQXdDLFNBQVM7O0FBRWpEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCO0FBQ3RCOztBQUVBLG1DQUFtQzs7O0FBR25DLGlDQUFpQztBQUNqQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxTQUFTOztBQUVoRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixRQUFROztBQUVyQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxrQkFBa0IsZ0JBQWdCOztBQUVsQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7O0FBRW5DOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCLGtCQUFrQiwwQkFBMEI7O0FBRTVDLCtCQUErQjs7QUFFL0I7O0FBRUEsc0NBQXNDOztBQUV0Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtDQUErQyxTQUFTOztBQUV4RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWCxVQUFVLGVBQWU7QUFDekIsVUFBVTtBQUNWLFlBQVksZUFBZTtBQUMzQjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVILDhIQUE4SDtBQUM5SDtBQUNBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLE9BQU87O0FBRTdDOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1QyxPQUFPOztBQUU5Qzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIscUJBQXFCOztBQUVyQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCO0FBQ3ZCLHFCQUFxQjtBQUNyQixhQUFhOztBQUViOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsUUFBUTs7QUFFOUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNB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QTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsZ0NBQWdDOztBQUUzRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLDJDQUEyQyx5REFBeUQ7O0FBRXBHO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxQ0FBcUMsT0FBTzs7QUFFNUM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLGtDQUFrQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLG9CQUFvQjtBQUN6QyxxQkFBcUIsb0JBQW9CO0FBQ3pDLHFCQUFxQixvQkFBb0I7QUFDekMscUJBQXFCLHFCQUFxQjtBQUMxQyxzQkFBc0IscUJBQXFCO0FBQzNDLHNCQUFzQixxQkFBcUI7QUFDM0Msc0JBQXNCLHFCQUFxQjtBQUMzQyxzQkFBc0IscUJBQXFCOztBQUUzQzs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwyQ0FBMkMsa0NBQWtDOztBQUU3RTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLGtDQUFrQzs7QUFFN0U7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlEQUF5RCxzRkFBc0Y7O0FBRS9JOztBQUVBOztBQUVBOztBQUVBLCtDQUErQzs7QUFFL0M7O0FBRUEsMEVBQTBFLDZDQUE2Qzs7QUFFdkg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsK0RBQStELGtDQUFrQztBQUNqRztBQUNBOztBQUVBLCtEQUErRCxrQ0FBa0M7QUFDakc7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyx3Q0FBd0M7O0FBRW5GOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwQ0FBMEMsT0FBTzs7QUFFakQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQyxrQ0FBa0M7O0FBRWxDOztBQUVBOztBQUVBOztBQUVBLGlEQUFpRDtBQUNqRCxrQkFBa0I7O0FBRWxCLE1BQU07O0FBRU47QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLE9BQU87O0FBRTlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUk7O0FBRUosb0NBQW9DLGdDQUFnQzs7QUFFcEU7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQSwrQ0FBK0MsYUFBYTs7QUFFNUQ7O0FBRUE7O0FBRUEsK0NBQStDLGFBQWE7O0FBRTVEOztBQUVBLHVCQUF1QixtQkFBbUI7O0FBRTFDO0FBQ0E7O0FBRUEseUJBQXlCLDBCQUEwQjs7QUFFbkQ7O0FBRUEsNkNBQTZDLHNDQUFzQztBQUNuRjs7QUFFQTtBQUNBOztBQUVBLFFBQVE7O0FBRVI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHlDQUF5QyxRQUFROztBQUVqRDtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLFFBQVE7O0FBRWpEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEMsK0JBQStCO0FBQy9CLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHdGQUF3Riw0Q0FBNEM7O0FBRXBJOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsNEZBQTRGLDRDQUE0Qzs7QUFFeEk7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUc7QUFDckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUc7QUFDckc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFO0FBQ0Y7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFOztBQUVGOztBQUVBOztBQUVBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztB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QUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxvRUFBb0U7O0FBRXBFOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFNBQVMsOENBQVc7O0FBRXBCOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFNBQVMsK0NBQVk7O0FBRXJCOztBQUVBOztBQUVBOztBQUVBOztBQUVBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsU0FBUyw0Q0FBUzs7QUFFbEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLCtDQUFZOztBQUV2Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLDRDQUFTOztBQUVwQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLGtEQUFlOztBQUUxQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLHFEQUFrQjs7QUFFN0I7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FB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QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsMENBQU87QUFDbEMsbUJBQW1CLDBDQUFPO0FBQzFCLGNBQWMsMENBQU87O0FBRXJCOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixzQkFBc0I7O0FBRXpDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLDBDQUFPO0FBQzFCOztBQUVBOztBQUVBOztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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b0NBQW9DLG1CQUFPLENBQUMsbUdBQWlEO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QkFBTyxDQUFDLHdHQUFrRDtBQUNsRyxXQUFXLCtIQUF3Qzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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YTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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Q0E7QUFDQTs7QUFFQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Ryx3RUFBd0UsOEJBQThCOztBQUV0RztBQUNBLDhEQUE4RCw4QkFBOEI7QUFDNUYsZ0VBQWdFLDhCQUE4QjtBQUM5RixxRUFBcUUsOEJBQThCO0FBQ25HLG9FQUFvRSw4QkFBOEI7QUFDbEcsOEVBQThFLDhCQUE4QjtBQUM1RyxvRUFBb0UsOEJBQThCO0FBQ2xHLHNFQUFzRSw4QkFBOEI7QUFDcEcsOERBQThELDhCQUE4QjtBQUM1RixzRkFBc0YsOEJBQThCO0FBQ3BILGtFQUFrRSw4QkFBOEI7QUFDaEcsNEVBQTRFLDhCQUE4QjtBQUMxRyxvRUFBb0UsOEJBQThCO0FBQ2xHLDRGQUE0Riw4QkFBOEI7QUFDMUgsc0VBQXNFLDhCQUE4QjtBQUNwRyxrRUFBa0UsOEJBQThCO0FBQ2hHLG9FQUFvRSw4QkFBOEI7QUFDbEc7QUFDQSIsImZpbGUiOiJjb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciByPXQoKTtmb3IodmFyIG4gaW4gcikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtuXT1yW25dfX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBvIGluIGUpci5kKG4sbyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG8pKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTEwKX0oW2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDMpO3QuTWV0YWRhdGE9bi5Ccm93c2VySGVhZGVyc30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVidWc9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmFwcGx5KG51bGwsZSk6Y29uc29sZS5sb2cuYXBwbHkobnVsbCxlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDApLG89cig4KSxzPXIoOSksaT1yKDEpLGE9cig0KSx1PXIoMTQpO3QuY2xpZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBkKGUsdCl9O3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RhcnRlZD0hMSx0aGlzLnNlbnRGaXJzdE1lc3NhZ2U9ITEsdGhpcy5jb21wbGV0ZWQ9ITEsdGhpcy5jbG9zZWQ9ITEsdGhpcy5maW5pc2hlZFNlbmRpbmc9ITEsdGhpcy5vbkhlYWRlcnNDYWxsYmFja3M9W10sdGhpcy5vbk1lc3NhZ2VDYWxsYmFja3M9W10sdGhpcy5vbkVuZENhbGxiYWNrcz1bXSx0aGlzLnBhcnNlcj1uZXcgby5DaHVua1BhcnNlcix0aGlzLm1ldGhvZERlZmluaXRpb249ZSx0aGlzLnByb3BzPXQsdGhpcy5jcmVhdGVUcmFuc3BvcnQoKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5ob3N0K1wiL1wiK3RoaXMubWV0aG9kRGVmaW5pdGlvbi5zZXJ2aWNlLnNlcnZpY2VOYW1lK1wiL1wiK3RoaXMubWV0aG9kRGVmaW5pdGlvbi5tZXRob2ROYW1lLHQ9e21ldGhvZERlZmluaXRpb246dGhpcy5tZXRob2REZWZpbml0aW9uLGRlYnVnOnRoaXMucHJvcHMuZGVidWd8fCExLHVybDplLG9uSGVhZGVyczp0aGlzLm9uVHJhbnNwb3J0SGVhZGVycy5iaW5kKHRoaXMpLG9uQ2h1bms6dGhpcy5vblRyYW5zcG9ydENodW5rLmJpbmQodGhpcyksb25FbmQ6dGhpcy5vblRyYW5zcG9ydEVuZC5iaW5kKHRoaXMpfTt0aGlzLnByb3BzLnRyYW5zcG9ydD90aGlzLnRyYW5zcG9ydD10aGlzLnByb3BzLnRyYW5zcG9ydCh0KTp0aGlzLnRyYW5zcG9ydD1hLm1ha2VEZWZhdWx0VHJhbnNwb3J0KHQpfSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydEhlYWRlcnM9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwib25IZWFkZXJzXCIsZSx0KSx0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwiZ3JwYy5vbkhlYWRlcnMgcmVjZWl2ZWQgYWZ0ZXIgcmVxdWVzdCB3YXMgY2xvc2VkIC0gaWdub3JpbmdcIik7ZWxzZSBpZigwPT09dCk7ZWxzZXt0aGlzLnJlc3BvbnNlSGVhZGVycz1lLHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkhlYWRlcnMucmVzcG9uc2VIZWFkZXJzXCIsSlNPTi5zdHJpbmdpZnkodGhpcy5yZXNwb25zZUhlYWRlcnMsbnVsbCwyKSk7dmFyIHI9YyhlKTt0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwib25IZWFkZXJzLmdSUENTdGF0dXNcIixyKTt2YXIgbj1yJiZyPj0wP3I6cy5odHRwU3RhdHVzVG9Db2RlKHQpO3RoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkhlYWRlcnMuY29kZVwiLG4pO3ZhciBvPWUuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpfHxbXTtpZih0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwib25IZWFkZXJzLmdSUENNZXNzYWdlXCIsbyksdGhpcy5yYXdPbkhlYWRlcnMoZSksbiE9PXMuQ29kZS5PSyl7dmFyIGE9dGhpcy5kZWNvZGVHUlBDU3RhdHVzKG9bMF0pO3RoaXMucmF3T25FcnJvcihuLGEsZSl9fX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRDaHVuaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJncnBjLm9uQ2h1bmsgcmVjZWl2ZWQgYWZ0ZXIgcmVxdWVzdCB3YXMgY2xvc2VkIC0gaWdub3JpbmdcIik7ZWxzZXt2YXIgcj1bXTt0cnl7cj10aGlzLnBhcnNlci5wYXJzZShlKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcIm9uQ2h1bmsucGFyc2luZyBlcnJvclwiLGUsZS5tZXNzYWdlKSx2b2lkIHRoaXMucmF3T25FcnJvcihzLkNvZGUuSW50ZXJuYWwsXCJwYXJzaW5nIGVycm9yOiBcIitlLm1lc3NhZ2UpfXIuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmNodW5rVHlwZT09PW8uQ2h1bmtUeXBlLk1FU1NBR0Upe3ZhciByPXQubWV0aG9kRGVmaW5pdGlvbi5yZXNwb25zZVR5cGUuZGVzZXJpYWxpemVCaW5hcnkoZS5kYXRhKTt0LnJhd09uTWVzc2FnZShyKX1lbHNlIGUuY2h1bmtUeXBlPT09by5DaHVua1R5cGUuVFJBSUxFUlMmJih0LnJlc3BvbnNlSGVhZGVycz8odC5yZXNwb25zZVRyYWlsZXJzPW5ldyBuLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucHJvcHMuZGVidWcmJmkuZGVidWcoXCJvbkNodW5rLnRyYWlsZXJzXCIsdC5yZXNwb25zZVRyYWlsZXJzKSk6KHQucmVzcG9uc2VIZWFkZXJzPW5ldyBuLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucmF3T25IZWFkZXJzKHQucmVzcG9uc2VIZWFkZXJzKSkpfSl9fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydEVuZD1mdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJncnBjLm9uRW5kXCIpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJncnBjLm9uRW5kIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2UgaWYodm9pZCAwIT09dGhpcy5yZXNwb25zZVRyYWlsZXJzKXt2YXIgZT1jKHRoaXMucmVzcG9uc2VUcmFpbGVycyk7aWYobnVsbCE9PWUpe3ZhciB0PXRoaXMucmVzcG9uc2VUcmFpbGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIikscj10aGlzLmRlY29kZUdSUENTdGF0dXModFswXSk7dGhpcy5yYXdPbkVuZChlLHIsdGhpcy5yZXNwb25zZVRyYWlsZXJzKX1lbHNlIHRoaXMucmF3T25FcnJvcihzLkNvZGUuSW50ZXJuYWwsXCJSZXNwb25zZSBjbG9zZWQgd2l0aG91dCBncnBjLXN0YXR1cyAoVHJhaWxlcnMgcHJvdmlkZWQpXCIpfWVsc2V7aWYodm9pZCAwPT09dGhpcy5yZXNwb25zZUhlYWRlcnMpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVycm9yKHMuQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgaGVhZGVyc1wiKTt2YXIgbj1jKHRoaXMucmVzcG9uc2VIZWFkZXJzKSxvPXRoaXMucmVzcG9uc2VIZWFkZXJzLmdldChcImdycGMtbWVzc2FnZVwiKTtpZih0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwiZ3JwYy5oZWFkZXJzIG9ubHkgcmVzcG9uc2UgXCIsbixvKSxudWxsPT09bilyZXR1cm4gdm9pZCB0aGlzLnJhd09uRW5kKHMuQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKEhlYWRlcnMgb25seSlcIix0aGlzLnJlc3BvbnNlSGVhZGVycyk7dmFyIGE9dGhpcy5kZWNvZGVHUlBDU3RhdHVzKG9bMF0pO3RoaXMucmF3T25FbmQobixhLHRoaXMucmVzcG9uc2VIZWFkZXJzKX19LGUucHJvdG90eXBlLmRlY29kZUdSUENTdGF0dXM9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuXCJcIjt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZX19LGUucHJvdG90eXBlLnJhd09uRW5kPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzO3RoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJyYXdPbkVuZFwiLGUsdCxyKSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihvKXtpZighbi5jbG9zZWQpdHJ5e28oZSx0LHIpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fSkpfSxlLnByb3RvdHlwZS5yYXdPbkhlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcInJhd09uSGVhZGVyc1wiLGUpLHRoaXMuY29tcGxldGVkfHx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RyeXt0KGUpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fSl9LGUucHJvdG90eXBlLnJhd09uRXJyb3I9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPXRoaXM7dm9pZCAwPT09ciYmKHI9bmV3IG4uTWV0YWRhdGEpLHRoaXMucHJvcHMuZGVidWcmJmkuZGVidWcoXCJyYXdPbkVycm9yXCIsZSx0KSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtpZighby5jbG9zZWQpdHJ5e24oZSx0LHIpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fSkpfSxlLnByb3RvdHlwZS5yYXdPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZpLmRlYnVnKFwicmF3T25NZXNzYWdlXCIsZS50b09iamVjdCgpKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5jbG9zZWR8fHRoaXMub25NZXNzYWdlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ocil7aWYoIXQuY2xvc2VkKXRyeXtyKGUpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fSl9LGUucHJvdG90eXBlLm9uSGVhZGVycz1mdW5jdGlvbihlKXt0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5vbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy5vbk1lc3NhZ2VDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7dGhpcy5vbkVuZENhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgc3RhcnRlZCAtIGNhbm5vdCAuc3RhcnQoKVwiKTt0aGlzLnN0YXJ0ZWQ9ITA7dmFyIHQ9bmV3IG4uTWV0YWRhdGEoZXx8e30pO3Quc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi9ncnBjLXdlYitwcm90b1wiKSx0LnNldChcIngtZ3JwYy13ZWJcIixcIjFcIiksdGhpcy50cmFuc3BvcnQuc3RhcnQodCl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLnNlbmQoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZih0aGlzLmZpbmlzaGVkU2VuZGluZyl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBmaW5pc2hlZCBzZW5kaW5nIC0gY2Fubm90IC5zZW5kKClcIik7aWYoIXRoaXMubWV0aG9kRGVmaW5pdGlvbi5yZXF1ZXN0U3RyZWFtJiZ0aGlzLnNlbnRGaXJzdE1lc3NhZ2UpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBhbHJlYWR5IHNlbnQgZm9yIG5vbi1jbGllbnQtc3RyZWFtaW5nIG1ldGhvZCAtIGNhbm5vdCAuc2VuZCgpXCIpO3RoaXMuc2VudEZpcnN0TWVzc2FnZT0hMDt2YXIgdD11LmZyYW1lUmVxdWVzdChlKTt0aGlzLnRyYW5zcG9ydC5zZW5kTWVzc2FnZSh0KX0sZS5wcm90b3R5cGUuZmluaXNoU2VuZD1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLmZpbmlzaFNlbmQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLmNsb3NlKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5zZW5kKClcIik7aWYodGhpcy5maW5pc2hlZFNlbmRpbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgZmluaXNoZWQgc2VuZGluZyAtIGNhbm5vdCAuZmluaXNoU2VuZCgpXCIpO3RoaXMuZmluaXNoZWRTZW5kaW5nPSEwLHRoaXMudHJhbnNwb3J0LmZpbmlzaFNlbmQoKX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5zdGFydCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuY2xvc2UoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLmNsb3NlKClcIik7dGhpcy5jbG9zZWQ9ITAsdGhpcy5wcm9wcy5kZWJ1ZyYmaS5kZWJ1ZyhcInJlcXVlc3QuYWJvcnQgYWJvcnRpbmcgcmVxdWVzdFwiKSx0aGlzLnRyYW5zcG9ydC5jYW5jZWwoKX0sZX0oKTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUuZ2V0KFwiZ3JwYy1zdGF0dXNcIil8fFtdO2lmKHQubGVuZ3RoPjApdHJ5e3ZhciByPXRbMF07cmV0dXJuIHBhcnNlSW50KHIsMTApfWNhdGNoKGUpe3JldHVybiBudWxsfXJldHVybiBudWxsfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dKXJldHVybiB0W25dLmV4cG9ydHM7dmFyIG89dFtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbbl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsciksby5sPSEwLG8uZXhwb3J0c31yZXR1cm4gci5tPWUsci5jPXQsci5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPVwiXCIscihyLnM9MSl9KFtmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cigzKTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9e3NwbGl0VmFsdWVzOiExfSk7dmFyIHIsbz10aGlzO2lmKHRoaXMuaGVhZGVyc01hcD17fSxlKWlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzJiZlIGluc3RhbmNlb2YgSGVhZGVycyluLmdldEhlYWRlcktleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXtuLmdldEhlYWRlclZhbHVlcyhlLHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5zcGxpdFZhbHVlcz9vLmFwcGVuZChyLG4uc3BsaXRIZWFkZXJWYWx1ZShlKSk6by5hcHBlbmQocixlKX0pfSk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2Yocj1lKSYmXCJvYmplY3RcIj09dHlwZW9mIHIuaGVhZGVyc01hcCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5mb3JFYWNoKWUuZm9yRWFjaChmdW5jdGlvbihlLHQpe28uYXBwZW5kKGUsdCl9KTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXAmJmUgaW5zdGFuY2VvZiBNYXApe2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe28uYXBwZW5kKHQsZSl9KX1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5hcHBlbmRGcm9tU3RyaW5nKGUpOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZSl7by5hcHBlbmQodCxlKX0pOm8uYXBwZW5kKHQscil9KX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zcGxpdChcIlxcclxcblwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0sbz1uLmluZGV4T2YoXCI6XCIpO2lmKG8+MCl7dmFyIHM9bi5zdWJzdHJpbmcoMCxvKS50cmltKCksaT1uLnN1YnN0cmluZyhvKzEpLnRyaW0oKTt0aGlzLmFwcGVuZChzLGkpfX19LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciByPW4ubm9ybWFsaXplTmFtZShlKTtpZih2b2lkIDA9PT10KWRlbGV0ZSB0aGlzLmhlYWRlcnNNYXBbcl07ZWxzZXt2YXIgbz10aGlzLmhlYWRlcnNNYXBbcl07aWYobyl7dmFyIHM9by5pbmRleE9mKHQpO3M+PTAmJm8uc3BsaWNlKHMsMSksMD09PW8ubGVuZ3RoJiZkZWxldGUgdGhpcy5oZWFkZXJzTWFwW3JdfX19LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbz1uLm5vcm1hbGl6ZU5hbWUoZSk7QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnNNYXBbb10pfHwodGhpcy5oZWFkZXJzTWFwW29dPVtdKSxBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihlKXtyLmhlYWRlcnNNYXBbb10ucHVzaChuLm5vcm1hbGl6ZVZhbHVlKGUpKX0pOnRoaXMuaGVhZGVyc01hcFtvXS5wdXNoKG4ubm9ybWFsaXplVmFsdWUodCkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uLm5vcm1hbGl6ZU5hbWUoZSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89W107dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe28ucHVzaChuLm5vcm1hbGl6ZVZhbHVlKGUpKX0pLHRoaXMuaGVhZGVyc01hcFtyXT1vfWVsc2UgdGhpcy5oZWFkZXJzTWFwW3JdPVtuLm5vcm1hbGl6ZVZhbHVlKHQpXX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5oZWFkZXJzTWFwW24ubm9ybWFsaXplTmFtZShlKV07aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuITE7aWYodm9pZCAwIT09dCl7dmFyIG89bi5ub3JtYWxpemVWYWx1ZSh0KTtyZXR1cm4gci5pbmRleE9mKG8pPj0wfXJldHVybiEwfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oZWFkZXJzTWFwW24ubm9ybWFsaXplTmFtZShlKV07cmV0dXJuIHZvaWQgMCE9PXQ/dC5jb25jYXQoKTpbXX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuaGVhZGVyc01hcCkuZm9yRWFjaChmdW5jdGlvbihyKXtlKHIsdC5oZWFkZXJzTWFwW3JdKX0sdGhpcyl9LGUucHJvdG90eXBlLnRvSGVhZGVycz1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzKXt2YXIgZT1uZXcgSGVhZGVycztyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UuYXBwZW5kKHQscil9KX0pLGV9dGhyb3cgbmV3IEVycm9yKFwiSGVhZGVycyBjbGFzcyBpcyBub3QgZGVmaW5lZFwiKX0sZX0oKTt0LkJyb3dzZXJIZWFkZXJzPW99LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDApO3QuQnJvd3NlckhlYWRlcnM9bi5Ccm93c2VySGVhZGVyc30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaXRlcmF0ZUhlYWRlcnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksbj1yLm5leHQoKTshbi5kb25lOyl0KG4udmFsdWVbMF0pLG49ci5uZXh0KCl9LHQuaXRlcmF0ZUhlYWRlcnNLZXlzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUua2V5cygpLG49ci5uZXh0KCk7IW4uZG9uZTspdChuLnZhbHVlKSxuPXIubmV4dCgpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZX10Lm5vcm1hbGl6ZU5hbWU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHQubm9ybWFsaXplVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksZX0sdC5nZXRIZWFkZXJWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1vKGUpO2lmKHIgaW5zdGFuY2VvZiBIZWFkZXJzJiZyLmdldEFsbClyZXR1cm4gci5nZXRBbGwodCk7dmFyIG49ci5nZXQodCk7cmV0dXJuIG4mJlwic3RyaW5nXCI9PXR5cGVvZiBuP1tuXTpufSx0LmdldEhlYWRlcktleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKSxyPXt9LHM9W107cmV0dXJuIHQua2V5cz9uLml0ZXJhdGVIZWFkZXJzS2V5cyh0LGZ1bmN0aW9uKGUpe3JbZV18fChyW2VdPSEwLHMucHVzaChlKSl9KTp0LmZvckVhY2g/dC5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7clt0XXx8KHJbdF09ITAscy5wdXNoKHQpKX0pOm4uaXRlcmF0ZUhlYWRlcnModCxmdW5jdGlvbihlKXt2YXIgdD1lWzBdO3JbdF18fChyW3RdPSEwLHMucHVzaCh0KSl9KSxzfSx0LnNwbGl0SGVhZGVyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuc3BsaXQoXCIsIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSl9KSx0fX1dKX0sZS5leHBvcnRzPW4oKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoNSksbz1mdW5jdGlvbihlKXtyZXR1cm4gbi5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ITF9KShlKX07dC5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeT1mdW5jdGlvbihlKXtvPWV9LHQubWFrZURlZmF1bHRUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cig2KSxvPXIoNyk7dC5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe2lmKG4uZGV0ZWN0RmV0Y2hTdXBwb3J0KCkpe3ZhciB0PXtjcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFscz9cImluY2x1ZGVcIjpcInNhbWUtb3JpZ2luXCJ9O3JldHVybiBuLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQodCl9cmV0dXJuIG8uWGhyVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHN9KX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89cigwKSxzPXIoMSk7dC5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWJ1ZyYmcy5kZWJ1ZyhcImZldGNoUmVxdWVzdFwiLGUpLG5ldyBpKGUsdCl9KHQsZSl9fTt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmNhbmNlbGxlZD0hMSx0aGlzLmNvbnRyb2xsZXI9c2VsZi5BYm9ydENvbnRyb2xsZXImJm5ldyBBYm9ydENvbnRyb2xsZXIsdGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLnB1bXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2lmKHRoaXMucmVhZGVyPWUsdGhpcy5jYW5jZWxsZWQpcmV0dXJuIHRoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIkZldGNoLnB1bXAuY2FuY2VsIGF0IGZpcnN0IHB1bXBcIiksdm9pZCB0aGlzLnJlYWRlci5jYW5jZWwoKTt0aGlzLnJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbihlKXtpZihlLmRvbmUpcmV0dXJuIHIub3B0aW9ucy5vbkVuZCgpLHQ7ci5vcHRpb25zLm9uQ2h1bmsoZS52YWx1ZSksci5wdW1wKHIucmVhZGVyLHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7ci5jYW5jZWxsZWQ/ci5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKTooci5jYW5jZWxsZWQ9ITAsci5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLHIub3B0aW9ucy5vbkVuZChlKSl9KX0sZS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2ZldGNoKHRoaXMub3B0aW9ucy51cmwsbih7fSx0aGlzLmluaXQse2hlYWRlcnM6dGhpcy5tZXRhZGF0YS50b0hlYWRlcnMoKSxtZXRob2Q6XCJQT1NUXCIsYm9keTplLHNpZ25hbDp0aGlzLmNvbnRyb2xsZXImJnRoaXMuY29udHJvbGxlci5zaWduYWx9KSkudGhlbihmdW5jdGlvbihlKXtpZih0Lm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJGZXRjaC5yZXNwb25zZVwiLGUpLHQub3B0aW9ucy5vbkhlYWRlcnMobmV3IG8uTWV0YWRhdGEoZS5oZWFkZXJzKSxlLnN0YXR1cyksIWUuYm9keSlyZXR1cm4gZTt0LnB1bXAoZS5ib2R5LmdldFJlYWRlcigpLGUpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5jYW5jZWxsZWQ/dC5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKToodC5jYW5jZWxsZWQ9ITAsdC5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLHQub3B0aW9ucy5vbkVuZChlKSl9KX0sZS5wcm90b3R5cGUuc2VuZE1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt0aGlzLm1ldGFkYXRhPWV9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsbGVkP3RoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIkZldGNoLmFib3J0LmNhbmNlbCBhbHJlYWR5IGNhbmNlbGxlZFwiKToodGhpcy5jYW5jZWxsZWQ9ITAsdGhpcy5yZWFkZXI/KHRoaXMub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIkZldGNoLmFib3J0LmNhbmNlbFwiKSx0aGlzLnJlYWRlci5jYW5jZWwoKSk6dGhpcy5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsIGJlZm9yZSByZWFkZXJcIiksdGhpcy5jb250cm9sbGVyJiZ0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSl9LGV9KCk7dC5kZXRlY3RGZXRjaFN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzcG9uc2UmJlJlc3BvbnNlLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImJvZHlcIikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEhlYWRlcnN9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4sbz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHM9cigwKSxpPXIoMSksYT1yKDExKTt0LlhoclRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoYS5kZXRlY3RNb3pYSFJTdXBwb3J0KCkpcmV0dXJuIG5ldyBkKHQsZSk7aWYoYS5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydCgpKXJldHVybiBuZXcgdSh0LGUpO3Rocm93IG5ldyBFcnJvcihcIlRoaXMgZW52aXJvbm1lbnQncyBYSFIgaW1wbGVtZW50YXRpb24gY2Fubm90IHN1cHBvcnQgYmluYXJ5IHRyYW5zZmVyLlwiKX19O3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJYSFIub25Qcm9ncmVzc0V2ZW50Lmxlbmd0aDogXCIsdGhpcy54aHIucmVzcG9uc2UubGVuZ3RoKTt2YXIgZT10aGlzLnhoci5yZXNwb25zZS5zdWJzdHIodGhpcy5pbmRleCk7dGhpcy5pbmRleD10aGlzLnhoci5yZXNwb25zZS5sZW5ndGg7dmFyIHQ9cChlKTt0aGlzLm9wdGlvbnMub25DaHVuayh0KX0sZS5wcm90b3R5cGUub25Mb2FkRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJYSFIub25Mb2FkRXZlbnRcIiksdGhpcy5vcHRpb25zLm9uRW5kKCl9LGUucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJYSFIub25TdGF0ZUNoYW5nZVwiLHRoaXMueGhyLnJlYWR5U3RhdGUpLHRoaXMueGhyLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEJiZ0aGlzLm9wdGlvbnMub25IZWFkZXJzKG5ldyBzLk1ldGFkYXRhKHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx0aGlzLnhoci5zdGF0dXMpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnhoci5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubWV0YWRhdGE9ZTt2YXIgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy54aHI9cixyLm9wZW4oXCJQT1NUXCIsdGhpcy5vcHRpb25zLnVybCksdGhpcy5jb25maWd1cmVYaHIoKSx0aGlzLm1ldGFkYXRhLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyLnNldFJlcXVlc3RIZWFkZXIoZSx0LmpvaW4oXCIsIFwiKSl9KSxyLndpdGhDcmVkZW50aWFscz1Cb29sZWFuKHRoaXMuaW5pdC53aXRoQ3JlZGVudGlhbHMpLHIuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIix0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSksci5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIix0aGlzLm9uUHJvZ3Jlc3NFdmVudC5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZW5kXCIsdGhpcy5vbkxvYWRFdmVudC5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3Qub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIlhIUi5lcnJvclwiLGUpLHQub3B0aW9ucy5vbkVuZChlLmVycm9yKX0pfSxlLnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJ0ZXh0XCIsdGhpcy54aHIub3ZlcnJpZGVNaW1lVHlwZShcInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWRcIil9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIlhIUi5hYm9ydFwiKSx0aGlzLnhoci5hYm9ydCgpfSxlfSgpO3QuWEhSPXU7dmFyIGQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJNb3pYSFIuY29uZmlndXJlWGhyOiBzZXR0aW5nIHJlc3BvbnNlVHlwZSB0byAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInXCIpLHRoaXMueGhyLnJlc3BvbnNlVHlwZT1cIm1vei1jaHVua2VkLWFycmF5YnVmZmVyXCJ9LHQucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlO3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIk1velhIUi5vblByb2dyZXNzRXZlbnQ6IFwiLG5ldyBVaW50OEFycmF5KGUpKSx0aGlzLm9wdGlvbnMub25DaHVuayhuZXcgVWludDhBcnJheShlKSl9LHR9KHUpO2Z1bmN0aW9uIGMoZSx0KXt2YXIgcj1lLmNoYXJDb2RlQXQodCk7aWYocj49NTUyOTYmJnI8PTU2MzE5KXt2YXIgbj1lLmNoYXJDb2RlQXQodCsxKTtuPj01NjMyMCYmbjw9NTczNDMmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApKX1yZXR1cm4gcn1mdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCkscj0wLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIG89U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD9lLmNvZGVQb2ludEF0KG4pOmMoZSxuKTt0W3IrK109MjU1Jm99cmV0dXJuIHR9dC5Nb3pDaHVua2VkQXJyYXlCdWZmZXJYSFI9ZCx0LnN0cmluZ1RvQXJyYXlCdWZmZXI9cH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuLG89cigwKSxzPWZ1bmN0aW9uKGUpe3JldHVybiA5PT09ZXx8MTA9PT1lfHwxMz09PWV9O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHMoZSl8fGU+PTMyJiZlPD0xMjZ9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MDt0IT09ZS5sZW5ndGg7Kyt0KWlmKCFpKGVbdF0pKXRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGlzIG5vdCB2YWxpZCAocHJpbnRhYmxlKSBBU0NJSVwiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDEyOD09KDEyOCZlLmdldFVpbnQ4KDApKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmdldFVpbnQzMigxLCExKX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gZS5ieXRlTGVuZ3RoLXQ+PXJ9ZnVuY3Rpb24gcChlLHQscil7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSh0LHIpO3ZhciBuPWUubGVuZ3RoO3ZvaWQgMCE9PXImJihuPXIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShuLXQpLHM9MCxpPXQ7aTxuO2krKylvW3MrK109ZVtpXTtyZXR1cm4gb310LmRlY29kZUFTQ0lJPWEsdC5lbmNvZGVBU0NJST1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLHI9MDtyIT09ZS5sZW5ndGg7KytyKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7aWYoIWkobikpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgY29udGFpbnMgaW52YWxpZCBBU0NJSVwiKTt0W3JdPW59cmV0dXJuIHR9LGZ1bmN0aW9uKGUpe2VbZS5NRVNTQUdFPTFdPVwiTUVTU0FHRVwiLGVbZS5UUkFJTEVSUz0yXT1cIlRSQUlMRVJTXCJ9KG49dC5DaHVua1R5cGV8fCh0LkNodW5rVHlwZT17fSkpO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYnVmZmVyPW51bGwsdGhpcy5wb3NpdGlvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aCYmdClyZXR1cm5bXTt2YXIgcixzPVtdO2lmKG51bGw9PXRoaXMuYnVmZmVyKXRoaXMuYnVmZmVyPWUsdGhpcy5wb3NpdGlvbj0wO2Vsc2UgaWYodGhpcy5wb3NpdGlvbj09PXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZXt2YXIgaT10aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoLXRoaXMucG9zaXRpb24saD1uZXcgVWludDhBcnJheShpK2UuYnl0ZUxlbmd0aCksZj1wKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24pO2guc2V0KGYsMCk7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoZSk7aC5zZXQobCxpKSx0aGlzLmJ1ZmZlcj1oLHRoaXMucG9zaXRpb249MH1mb3IoOzspe2lmKCFjKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSkpcmV0dXJuIHM7dmFyIGc9cCh0aGlzLmJ1ZmZlcix0aGlzLnBvc2l0aW9uLHRoaXMucG9zaXRpb24rNSksYj1uZXcgRGF0YVZpZXcoZy5idWZmZXIsZy5ieXRlT2Zmc2V0LGcuYnl0ZUxlbmd0aCkseT1kKGIpO2lmKCFjKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSt5KSlyZXR1cm4gczt2YXIgdj1wKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24rNSx0aGlzLnBvc2l0aW9uKzUreSk7aWYodGhpcy5wb3NpdGlvbis9NSt5LHUoYikpcmV0dXJuIHMucHVzaCh7Y2h1bmtUeXBlOm4uVFJBSUxFUlMsdHJhaWxlcnM6KHI9dixuZXcgby5NZXRhZGF0YShhKHIpKSl9KSxzO3MucHVzaCh7Y2h1bmtUeXBlOm4uTUVTU0FHRSxkYXRhOnZ9KX19LGV9KCk7dC5DaHVua1BhcnNlcj1ofSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlLk9LPTBdPVwiT0tcIixlW2UuQ2FuY2VsZWQ9MV09XCJDYW5jZWxlZFwiLGVbZS5Vbmtub3duPTJdPVwiVW5rbm93blwiLGVbZS5JbnZhbGlkQXJndW1lbnQ9M109XCJJbnZhbGlkQXJndW1lbnRcIixlW2UuRGVhZGxpbmVFeGNlZWRlZD00XT1cIkRlYWRsaW5lRXhjZWVkZWRcIixlW2UuTm90Rm91bmQ9NV09XCJOb3RGb3VuZFwiLGVbZS5BbHJlYWR5RXhpc3RzPTZdPVwiQWxyZWFkeUV4aXN0c1wiLGVbZS5QZXJtaXNzaW9uRGVuaWVkPTddPVwiUGVybWlzc2lvbkRlbmllZFwiLGVbZS5SZXNvdXJjZUV4aGF1c3RlZD04XT1cIlJlc291cmNlRXhoYXVzdGVkXCIsZVtlLkZhaWxlZFByZWNvbmRpdGlvbj05XT1cIkZhaWxlZFByZWNvbmRpdGlvblwiLGVbZS5BYm9ydGVkPTEwXT1cIkFib3J0ZWRcIixlW2UuT3V0T2ZSYW5nZT0xMV09XCJPdXRPZlJhbmdlXCIsZVtlLlVuaW1wbGVtZW50ZWQ9MTJdPVwiVW5pbXBsZW1lbnRlZFwiLGVbZS5JbnRlcm5hbD0xM109XCJJbnRlcm5hbFwiLGVbZS5VbmF2YWlsYWJsZT0xNF09XCJVbmF2YWlsYWJsZVwiLGVbZS5EYXRhTG9zcz0xNV09XCJEYXRhTG9zc1wiLGVbZS5VbmF1dGhlbnRpY2F0ZWQ9MTZdPVwiVW5hdXRoZW50aWNhdGVkXCJ9KG49dC5Db2RlfHwodC5Db2RlPXt9KSksdC5odHRwU3RhdHVzVG9Db2RlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIG4uSW50ZXJuYWw7Y2FzZSAyMDA6cmV0dXJuIG4uT0s7Y2FzZSA0MDA6cmV0dXJuIG4uSW52YWxpZEFyZ3VtZW50O2Nhc2UgNDAxOnJldHVybiBuLlVuYXV0aGVudGljYXRlZDtjYXNlIDQwMzpyZXR1cm4gbi5QZXJtaXNzaW9uRGVuaWVkO2Nhc2UgNDA0OnJldHVybiBuLk5vdEZvdW5kO2Nhc2UgNDA5OnJldHVybiBuLkFib3J0ZWQ7Y2FzZSA0MTI6cmV0dXJuIG4uRmFpbGVkUHJlY29uZGl0aW9uO2Nhc2UgNDI5OnJldHVybiBuLlJlc291cmNlRXhoYXVzdGVkO2Nhc2UgNDk5OnJldHVybiBuLkNhbmNlbGVkO2Nhc2UgNTAwOnJldHVybiBuLlVua25vd247Y2FzZSA1MDE6cmV0dXJuIG4uVW5pbXBsZW1lbnRlZDtjYXNlIDUwMzpyZXR1cm4gbi5VbmF2YWlsYWJsZTtjYXNlIDUwNDpyZXR1cm4gbi5EZWFkbGluZUV4Y2VlZGVkO2RlZmF1bHQ6cmV0dXJuIG4uVW5rbm93bn19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49cigzKSxvPXIoNCkscz1yKDYpLGk9cigxMiksYT1yKDcpLHU9cig1KSxkPXIoOSksYz1yKDEzKSxwPXIoMTUpLGg9cigyKTshZnVuY3Rpb24oZSl7ZS5zZXREZWZhdWx0VHJhbnNwb3J0PW8uc2V0RGVmYXVsdFRyYW5zcG9ydEZhY3RvcnksZS5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0PXUuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydCxlLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQ9cy5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0LGUuWGhyVHJhbnNwb3J0PWEuWGhyVHJhbnNwb3J0LGUuV2Vic29ja2V0VHJhbnNwb3J0PWkuV2Vic29ja2V0VHJhbnNwb3J0LGUuQ29kZT1kLkNvZGUsZS5NZXRhZGF0YT1uLkJyb3dzZXJIZWFkZXJzLGUuY2xpZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGguY2xpZW50KGUsdCl9LGUuaW52b2tlPWMuaW52b2tlLGUudW5hcnk9cC51bmFyeX0odC5ncnBjfHwodC5ncnBjPXt9KSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbjtmdW5jdGlvbiBvKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjtpZihYTUxIdHRwUmVxdWVzdCl7bj1uZXcgWE1MSHR0cFJlcXVlc3Q7dHJ5e24ub3BlbihcIkdFVFwiLFwiaHR0cHM6Ly9sb2NhbGhvc3RcIil9Y2F0Y2goZSl7fX1yZXR1cm4gbn1mdW5jdGlvbiBzKGUpe3ZhciB0PW8oKTtpZighdClyZXR1cm4hMTt0cnl7cmV0dXJuIHQucmVzcG9uc2VUeXBlPWUsdC5yZXNwb25zZVR5cGU9PT1lfWNhdGNoKGUpe31yZXR1cm4hMX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnhoclN1cHBvcnRzUmVzcG9uc2VUeXBlPXMsdC5kZXRlY3RNb3pYSFJTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiZzKFwibW96LWNodW5rZWQtYXJyYXlidWZmZXJcIil9LHQuZGV0ZWN0WEhST3ZlcnJpZGVNaW1lVHlwZVN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcIm92ZXJyaWRlTWltZVR5cGVcIil9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG4sbz1yKDEpLHM9cig4KTshZnVuY3Rpb24oZSl7ZVtlLkZJTklTSF9TRU5EPTFdPVwiRklOSVNIX1NFTkRcIn0obnx8KG49e30pKTt2YXIgaT1uZXcgVWludDhBcnJheShbMV0pO3QuV2Vic29ja2V0VHJhbnNwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtlLmRlYnVnJiZvLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdFwiLGUpO3ZhciB0LHI9ZnVuY3Rpb24oZSl7aWYoXCJodHRwczovL1wiPT09ZS5zdWJzdHIoMCw4KSlyZXR1cm5cIndzczovL1wiK2Uuc3Vic3RyKDgpO2lmKFwiaHR0cDovL1wiPT09ZS5zdWJzdHIoMCw3KSlyZXR1cm5cIndzOi8vXCIrZS5zdWJzdHIoNyk7dGhyb3cgbmV3IEVycm9yKFwiV2Vic29ja2V0IHRyYW5zcG9ydCBjb25zdHJ1Y3RlZCB3aXRoIG5vbi1odHRwczovLyBvciBodHRwOi8vIGhvc3QuXCIpfShlLnVybCksYT1bXTtmdW5jdGlvbiB1KGUpe2lmKGU9PT1uLkZJTklTSF9TRU5EKXQuc2VuZChpKTtlbHNle3ZhciByPWUsbz1uZXcgSW50OEFycmF5KHIuYnl0ZUxlbmd0aCsxKTtvLnNldChuZXcgVWludDhBcnJheShbMF0pKSxvLnNldChyLDEpLHQuc2VuZChvKX19cmV0dXJue3NlbmRNZXNzYWdlOmZ1bmN0aW9uKGUpe3QmJnQucmVhZHlTdGF0ZSE9PXQuQ09OTkVDVElORz91KGUpOmEucHVzaChlKX0sZmluaXNoU2VuZDpmdW5jdGlvbigpe3QmJnQucmVhZHlTdGF0ZSE9PXQuQ09OTkVDVElORz91KG4uRklOSVNIX1NFTkQpOmEucHVzaChuLkZJTklTSF9TRU5EKX0sc3RhcnQ6ZnVuY3Rpb24obil7KHQ9bmV3IFdlYlNvY2tldChyLFtcImdycGMtd2Vic29ja2V0c1wiXSkpLmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLHQub25vcGVuPWZ1bmN0aW9uKCl7dmFyIHI7ZS5kZWJ1ZyYmby5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3Qub25vcGVuXCIpLHQuc2VuZCgocj1cIlwiLG4uZm9yRWFjaChmdW5jdGlvbihlLHQpe3IrPWUrXCI6IFwiK3Quam9pbihcIiwgXCIpK1wiXFxyXFxuXCJ9KSxzLmVuY29kZUFTQ0lJKHIpKSksYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3UoZSl9KX0sdC5vbmNsb3NlPWZ1bmN0aW9uKHQpe2UuZGVidWcmJm8uZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uY2xvc2VcIix0KSxlLm9uRW5kKCl9LHQub25lcnJvcj1mdW5jdGlvbih0KXtlLmRlYnVnJiZvLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbmVycm9yXCIsdCl9LHQub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2Uub25DaHVuayhuZXcgVWludDhBcnJheSh0LmRhdGEpKX19LGNhbmNlbDpmdW5jdGlvbigpe2UuZGVidWcmJm8uZGVidWcoXCJ3ZWJzb2NrZXQuYWJvcnRcIiksdC5jbG9zZSgpfX19KGUpfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDIpO3QuaW52b2tlPWZ1bmN0aW9uKGUsdCl7aWYoZS5yZXF1ZXN0U3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi5pbnZva2UgY2Fubm90IGJlIHVzZWQgd2l0aCBjbGllbnQtc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuY2xpZW50IGluc3RlYWQuXCIpO3ZhciByPW4uY2xpZW50KGUse2hvc3Q6dC5ob3N0LHRyYW5zcG9ydDp0LnRyYW5zcG9ydCxkZWJ1Zzp0LmRlYnVnfSk7cmV0dXJuIHQub25IZWFkZXJzJiZyLm9uSGVhZGVycyh0Lm9uSGVhZGVycyksdC5vbk1lc3NhZ2UmJnIub25NZXNzYWdlKHQub25NZXNzYWdlKSx0Lm9uRW5kJiZyLm9uRW5kKHQub25FbmQpLHIuc3RhcnQodC5tZXRhZGF0YSksci5zZW5kKHQucmVxdWVzdCksci5maW5pc2hTZW5kKCkse2Nsb3NlOmZ1bmN0aW9uKCl7ci5jbG9zZSgpfX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5mcmFtZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXJpYWxpemVCaW5hcnkoKSxyPW5ldyBBcnJheUJ1ZmZlcih0LmJ5dGVMZW5ndGgrNSk7cmV0dXJuIG5ldyBEYXRhVmlldyhyLDEsNCkuc2V0VWludDMyKDAsdC5sZW5ndGgsITEpLG5ldyBVaW50OEFycmF5KHIsNSkuc2V0KHQpLG5ldyBVaW50OEFycmF5KHIpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMCksbz1yKDIpO3QudW5hcnk9ZnVuY3Rpb24oZSx0KXtpZihlLnJlc3BvbnNlU3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIHNlcnZlci1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5pbnZva2Ugb3IgLmNsaWVudCBpbnN0ZWFkLlwiKTtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLnVuYXJ5IGNhbm5vdCBiZSB1c2VkIHdpdGggY2xpZW50LXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmNsaWVudCBpbnN0ZWFkLlwiKTt2YXIgcj1udWxsLHM9bnVsbCxpPW8uY2xpZW50KGUse2hvc3Q6dC5ob3N0LHRyYW5zcG9ydDp0LnRyYW5zcG9ydCxkZWJ1Zzp0LmRlYnVnfSk7cmV0dXJuIGkub25IZWFkZXJzKGZ1bmN0aW9uKGUpe3I9ZX0pLGkub25NZXNzYWdlKGZ1bmN0aW9uKGUpe3M9ZX0pLGkub25FbmQoZnVuY3Rpb24oZSxvLGkpe3Qub25FbmQoe3N0YXR1czplLHN0YXR1c01lc3NhZ2U6byxoZWFkZXJzOnJ8fG5ldyBuLk1ldGFkYXRhLG1lc3NhZ2U6cyx0cmFpbGVyczppfSl9KSxpLnN0YXJ0KHQubWV0YWRhdGEpLGkuc2VuZCh0LnJlcXVlc3QpLGkuZmluaXNoU2VuZCgpLHtjbG9zZTpmdW5jdGlvbigpe2kuY2xvc2UoKX19fX1dKX0pOyIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMucnBjPXQoKTplLnJwYz10KCl9KHdpbmRvdywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gbyhyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIG49dFtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbcl0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsbyksbi5sPSEwLG4uZXhwb3J0c31yZXR1cm4gby5tPWUsby5jPXQsby5kPWZ1bmN0aW9uKGUsdCxyKXtvLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxvLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sby50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1vKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciByPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoby5yKHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKW8uZChyLG4sZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxuKSk7cmV0dXJuIHJ9LG8ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gby5kKHQsXCJhXCIsdCksdH0sby5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvLnA9XCJcIixvKG8ucz04KX0oW2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhmdW5jdGlvbihnbG9iYWwsQnVmZmVyKXt2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9LCRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGUsdCxvKXtlIGluc3RhbmNlb2YgU3RyaW5nJiYoZT1TdHJpbmcoZSkpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPTA7bjxyO24rKyl7dmFyIGk9ZVtuXTtpZih0LmNhbGwobyxpLG4sZSkpcmV0dXJue2k6bix2Oml9fXJldHVybntpOi0xLHY6dm9pZCAwfX0sJGpzY29tcC5BU1NVTUVfRVM1PSExLCRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITEsJGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMSwkanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITEsJGpzY29tcC5kZWZpbmVQcm9wZXJ0eT0kanNjb21wLkFTU1VNRV9FUzV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbyl7ZSE9QXJyYXkucHJvdG90eXBlJiZlIT1PYmplY3QucHJvdG90eXBlJiYoZVt0XT1vLnZhbHVlKX0sJGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09ZT9lOnZvaWQgMCE9PWdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDplfSwkanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKSwkanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKHQpe2ZvcihvPSRqc2NvbXAuZ2xvYmFsLGU9ZS5zcGxpdChcIi5cIikscj0wO3I8ZS5sZW5ndGgtMTtyKyspe3ZhciBuPWVbcl07biBpbiBvfHwob1tuXT17fSksbz1vW25dfSh0PXQocj1vW2U9ZVtlLmxlbmd0aC0xXV0pKSE9ciYmbnVsbCE9dCYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShvLGUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSwkanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxlLHQpLml9fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbihlLHQsbyl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlICd0aGlzJyB2YWx1ZSBmb3IgU3RyaW5nLnByb3RvdHlwZS5cIitvK1wiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKHQgaW5zdGFuY2VvZiBSZWdFeHApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuXCIrbytcIiBtdXN0IG5vdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTtyZXR1cm4gZStcIlwifSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbz0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsXCJlbmRzV2l0aFwiKTtlKz1cIlwiLHZvaWQgMD09PXQmJih0PW8ubGVuZ3RoKSx0PU1hdGgubWF4KDAsTWF0aC5taW4oMHx0LG8ubGVuZ3RoKSk7Zm9yKHZhciByPWUubGVuZ3RoOzA8ciYmMDx0OylpZihvWy0tdF0hPWVbLS1yXSlyZXR1cm4hMTtyZXR1cm4gMD49cn19KSxcImVzNlwiLFwiZXMzXCIpLCRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxlLHQpLnZ9fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3ZhciBvPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsZSxcInN0YXJ0c1dpdGhcIik7ZSs9XCJcIjt2YXIgcj1vLmxlbmd0aCxuPWUubGVuZ3RoO3Q9TWF0aC5tYXgoMCxNYXRoLm1pbigwfHQsby5sZW5ndGgpKTtmb3IodmFyIGk9MDtpPG4mJnQ8cjspaWYob1t0KytdIT1lW2krK10pcmV0dXJuITE7cmV0dXJuIGk+PW59fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUpe3ZhciB0PSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsbnVsbCxcInJlcGVhdFwiKTtpZigwPmV8fDEzNDIxNzcyNzk8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgY291bnQgdmFsdWVcIik7ZXw9MDtmb3IodmFyIG89XCJcIjtlOykxJmUmJihvKz10KSwoZT4+Pj0xKSYmKHQrPXQpO3JldHVybiBvfX0pLFwiZXM2XCIsXCJlczNcIik7dmFyIENPTVBJTEVEPSEwLGdvb2c9Z29vZ3x8e307Z29vZy5nbG9iYWw9dGhpc3x8c2VsZixnb29nLmlzRGVmPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxnb29nLmlzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfSxnb29nLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGV9LGdvb2cuaXNOdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGdvb2cuZXhwb3J0UGF0aF89ZnVuY3Rpb24oZSx0LG8pe2U9ZS5zcGxpdChcIi5cIiksbz1vfHxnb29nLmdsb2JhbCxlWzBdaW4gb3x8dm9pZCAwPT09by5leGVjU2NyaXB0fHxvLmV4ZWNTY3JpcHQoXCJ2YXIgXCIrZVswXSk7Zm9yKHZhciByO2UubGVuZ3RoJiYocj1lLnNoaWZ0KCkpOykhZS5sZW5ndGgmJmdvb2cuaXNEZWYodCk/b1tyXT10Om89b1tyXSYmb1tyXSE9PU9iamVjdC5wcm90b3R5cGVbcl0/b1tyXTpvW3JdPXt9fSxnb29nLmRlZmluZT1mdW5jdGlvbihlLHQpe2lmKCFDT01QSUxFRCl7dmFyIG89Z29vZy5nbG9iYWwuQ0xPU1VSRV9VTkNPTVBJTEVEX0RFRklORVMscj1nb29nLmdsb2JhbC5DTE9TVVJFX0RFRklORVM7byYmdm9pZCAwPT09by5ub2RlVHlwZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sZSk/dD1vW2VdOnImJnZvaWQgMD09PXIubm9kZVR5cGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUpJiYodD1yW2VdKX1yZXR1cm4gdH0sZ29vZy5GRUFUVVJFU0VUX1lFQVI9MjAxMixnb29nLkRFQlVHPSEwLGdvb2cuTE9DQUxFPVwiZW5cIixnb29nLlRSVVNURURfU0lURT0hMCxnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEU9ITEsZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERT1DT01QSUxFRCYmIWdvb2cuREVCVUcsZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HPSExLGdvb2cucHJvdmlkZT1mdW5jdGlvbihlKXtpZihnb29nLmlzSW5Nb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLnByb3ZpZGUgY2Fubm90IGJlIHVzZWQgd2l0aGluIGEgbW9kdWxlLlwiKTtpZighQ09NUElMRUQmJmdvb2cuaXNQcm92aWRlZF8oZSkpdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicrZSsnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtnb29nLmNvbnN0cnVjdE5hbWVzcGFjZV8oZSl9LGdvb2cuY29uc3RydWN0TmFtZXNwYWNlXz1mdW5jdGlvbihlLHQpe2lmKCFDT01QSUxFRCl7ZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXTtmb3IodmFyIG89ZTsobz1vLnN1YnN0cmluZygwLG8ubGFzdEluZGV4T2YoXCIuXCIpKSkmJiFnb29nLmdldE9iamVjdEJ5TmFtZShvKTspZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW29dPSEwfWdvb2cuZXhwb3J0UGF0aF8oZSx0KX0sZ29vZy5nZXRTY3JpcHROb25jZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZSE9Z29vZy5nbG9iYWw/Z29vZy5nZXRTY3JpcHROb25jZV8oZS5kb2N1bWVudCk6KG51bGw9PT1nb29nLmNzcE5vbmNlXyYmKGdvb2cuY3NwTm9uY2VfPWdvb2cuZ2V0U2NyaXB0Tm9uY2VfKGdvb2cuZ2xvYmFsLmRvY3VtZW50KSksZ29vZy5jc3BOb25jZV8pfSxnb29nLk5PTkNFX1BBVFRFUk5fPS9eW1xcdysvXy1dK1s9XXswLDJ9JC8sZ29vZy5jc3BOb25jZV89bnVsbCxnb29nLmdldFNjcmlwdE5vbmNlXz1mdW5jdGlvbihlKXtyZXR1cm4oZT1lLnF1ZXJ5U2VsZWN0b3ImJmUucXVlcnlTZWxlY3RvcihcInNjcmlwdFtub25jZV1cIikpJiYoZT1lLm5vbmNlfHxlLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpKSYmZ29vZy5OT05DRV9QQVRURVJOXy50ZXN0KGUpP2U6XCJcIn0sZ29vZy5WQUxJRF9NT0RVTEVfUkVfPS9eW2EtekEtWl8kXVthLXpBLVowLTkuXyRdKiQvLGdvb2cubW9kdWxlPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzU3RyaW5nKGUpfHwhZXx8LTE9PWUuc2VhcmNoKGdvb2cuVkFMSURfTU9EVUxFX1JFXykpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSBpZGVudGlmaWVyXCIpO2lmKCFnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiTW9kdWxlIFwiK2UrXCIgaGFzIGJlZW4gbG9hZGVkIGluY29ycmVjdGx5LiBOb3RlLCBtb2R1bGVzIGNhbm5vdCBiZSBsb2FkZWQgYXMgbm9ybWFsIHNjcmlwdHMuIFRoZXkgcmVxdWlyZSBzb21lIGtpbmQgb2YgcHJlLXByb2Nlc3Npbmcgc3RlcC4gWW91J3JlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZSB2aWEgYSBzY3JpcHQgdGFnIG9yIGFzIGEgcGFydCBvZiBhIGNvbmNhdGVuYXRlZCBidW5kbGUgd2l0aG91dCByZXdyaXRpbmcgdGhlIG1vZHVsZS4gRm9yIG1vcmUgaW5mbyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L3dpa2kvZ29vZy5tb2R1bGU6LWFuLUVTNi1tb2R1bGUtbGlrZS1hbHRlcm5hdGl2ZS10by1nb29nLnByb3ZpZGUuXCIpO2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZSBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlLlwiKTtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lPWUsIUNPTVBJTEVEKXtpZihnb29nLmlzUHJvdmlkZWRfKGUpKXRocm93IEVycm9yKCdOYW1lc3BhY2UgXCInK2UrJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7ZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXX19LGdvb2cubW9kdWxlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5tb2R1bGUuZ2V0SW50ZXJuYWxfKGUpfSxnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF89ZnVuY3Rpb24oZSl7aWYoIUNPTVBJTEVEKXtpZihlIGluIGdvb2cubG9hZGVkTW9kdWxlc18pcmV0dXJuIGdvb2cubG9hZGVkTW9kdWxlc19bZV0uZXhwb3J0cztpZighZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2VdKXJldHVybiBudWxsIT0oZT1nb29nLmdldE9iamVjdEJ5TmFtZShlKSk/ZTpudWxsfXJldHVybiBudWxsfSxnb29nLk1vZHVsZVR5cGU9e0VTNjpcImVzNlwiLEdPT0c6XCJnb29nXCJ9LGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGwsZ29vZy5pc0luTW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpfHxnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfKCl9LGdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7cmV0dXJuISFnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8udHlwZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0d9LGdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl89ZnVuY3Rpb24oKXtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8udHlwZT09Z29vZy5Nb2R1bGVUeXBlLkVTNilyZXR1cm4hMDt2YXIgZT1nb29nLmdsb2JhbC4kanNjb21wO3JldHVybiEhZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZ2V0Q3VycmVudE1vZHVsZVBhdGgmJiEhZS5nZXRDdXJyZW50TW9kdWxlUGF0aCgpKX0sZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT1mdW5jdGlvbigpe2lmKCFDT01QSUxFRCYmIWdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgZ29vZy5tb2R1bGVcIik7aWYoIUNPTVBJTEVEJiYhZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZSl0aHJvdyBFcnJvcihcImdvb2cubW9kdWxlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2UuXCIpO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2U9ITB9LGdvb2cuZGVjbGFyZU1vZHVsZUlkPWZ1bmN0aW9uKGUpe2lmKCFDT01QSUxFRCl7aWYoIWdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cuZGVjbGFyZU1vZHVsZUlkIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBFUzYgbW9kdWxlXCIpO2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5kZWNsYXJlTW9kdWxlSWQgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIG1vZHVsZS5cIik7aWYoZSBpbiBnb29nLmxvYWRlZE1vZHVsZXNfKXRocm93IEVycm9yKCdNb2R1bGUgd2l0aCBuYW1lc3BhY2UgXCInK2UrJ1wiIGFscmVhZHkgZXhpc3RzLicpfWlmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfKWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWU9ZTtlbHNle3ZhciB0PWdvb2cuZ2xvYmFsLiRqc2NvbXA7aWYoIXR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQuZ2V0Q3VycmVudE1vZHVsZVBhdGgpdGhyb3cgRXJyb3IoJ01vZHVsZSB3aXRoIG5hbWVzcGFjZSBcIicrZSsnXCIgaGFzIGJlZW4gbG9hZGVkIGluY29ycmVjdGx5LicpO3Q9dC5yZXF1aXJlKHQuZ2V0Q3VycmVudE1vZHVsZVBhdGgoKSksZ29vZy5sb2FkZWRNb2R1bGVzX1tlXT17ZXhwb3J0czp0LHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkVTNixtb2R1bGVJZDplfX19LGdvb2cuc2V0VGVzdE9ubHk9ZnVuY3Rpb24oZSl7aWYoZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERSl0aHJvdyBlPWV8fFwiXCIsRXJyb3IoXCJJbXBvcnRpbmcgdGVzdC1vbmx5IGNvZGUgaW50byBub24tZGVidWcgZW52aXJvbm1lbnRcIisoZT9cIjogXCIrZTpcIi5cIikpfSxnb29nLmZvcndhcmREZWNsYXJlPWZ1bmN0aW9uKGUpe30sQ09NUElMRUR8fChnb29nLmlzUHJvdmlkZWRfPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluIGdvb2cubG9hZGVkTW9kdWxlc198fCFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bZV0mJmdvb2cuaXNEZWZBbmROb3ROdWxsKGdvb2cuZ2V0T2JqZWN0QnlOYW1lKGUpKX0sZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfPXtcImdvb2cubW9kdWxlXCI6ITB9KSxnb29nLmdldE9iamVjdEJ5TmFtZT1mdW5jdGlvbihlLHQpe2U9ZS5zcGxpdChcIi5cIiksdD10fHxnb29nLmdsb2JhbDtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZih0PXRbZVtvXV0sIWdvb2cuaXNEZWZBbmROb3ROdWxsKHQpKXJldHVybiBudWxsO3JldHVybiB0fSxnb29nLmdsb2JhbGl6ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiB0PXR8fGdvb2cuZ2xvYmFsLGUpdFtvXT1lW29dfSxnb29nLmFkZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scil7IUNPTVBJTEVEJiZnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEJiZnb29nLmRlYnVnTG9hZGVyXy5hZGREZXBlbmRlbmN5KGUsdCxvLHIpfSxnb29nLkVOQUJMRV9ERUJVR19MT0FERVI9ITAsZ29vZy5sb2dUb0NvbnNvbGVfPWZ1bmN0aW9uKGUpe2dvb2cuZ2xvYmFsLmNvbnNvbGUmJmdvb2cuZ2xvYmFsLmNvbnNvbGUuZXJyb3IoZSl9LGdvb2cucmVxdWlyZT1mdW5jdGlvbihlKXtpZighQ09NUElMRUQpe2lmKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUiYmZ29vZy5kZWJ1Z0xvYWRlcl8ucmVxdWVzdGVkKGUpLGdvb2cuaXNQcm92aWRlZF8oZSkpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSlyZXR1cm4gZ29vZy5tb2R1bGUuZ2V0SW50ZXJuYWxfKGUpfWVsc2UgaWYoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKXt2YXIgdD1nb29nLm1vZHVsZUxvYWRlclN0YXRlXztnb29nLm1vZHVsZUxvYWRlclN0YXRlXz1udWxsO3RyeXtnb29nLmRlYnVnTG9hZGVyXy5sb2FkXyhlKX1maW5hbGx5e2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXR9fXJldHVybiBudWxsfX0sZ29vZy5yZXF1aXJlVHlwZT1mdW5jdGlvbihlKXtyZXR1cm57fX0sZ29vZy5iYXNlUGF0aD1cIlwiLGdvb2cubnVsbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7fSxnb29nLmFic3RyYWN0TWV0aG9kPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoXCJ1bmltcGxlbWVudGVkIGFic3RyYWN0IG1ldGhvZFwiKX0sZ29vZy5hZGRTaW5nbGV0b25HZXR0ZXI9ZnVuY3Rpb24oZSl7ZS5pbnN0YW5jZV89dm9pZCAwLGUuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnN0YW5jZV8/ZS5pbnN0YW5jZV86KGdvb2cuREVCVUcmJihnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfW2dvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc18ubGVuZ3RoXT1lKSxlLmluc3RhbmNlXz1uZXcgZSl9fSxnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfPVtdLGdvb2cuTE9BRF9NT0RVTEVfVVNJTkdfRVZBTD0hMCxnb29nLlNFQUxfTU9EVUxFX0VYUE9SVFM9Z29vZy5ERUJVRyxnb29nLmxvYWRlZE1vZHVsZXNfPXt9LGdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQ9IUNPTVBJTEVEJiZnb29nLkVOQUJMRV9ERUJVR19MT0FERVIsZ29vZy5UUkFOU1BJTEU9XCJkZXRlY3RcIixnb29nLkFTU1VNRV9FU19NT0RVTEVTX1RSQU5TUElMRUQ9ITEsZ29vZy5UUkFOU1BJTEVfVE9fTEFOR1VBR0U9XCJcIixnb29nLlRSQU5TUElMRVI9XCJ0cmFuc3BpbGUuanNcIixnb29nLmhhc0JhZExldFNjb3Bpbmc9bnVsbCxnb29nLnVzZVNhZmFyaTEwV29ya2Fyb3VuZD1mdW5jdGlvbigpe2lmKG51bGw9PWdvb2cuaGFzQmFkTGV0U2NvcGluZyl7dHJ5e3ZhciBhPSFldmFsKCdcInVzZSBzdHJpY3RcIjtsZXQgeCA9IDE7IGZ1bmN0aW9uIGYoKSB7IHJldHVybiB0eXBlb2YgeDsgfTtmKCkgPT0gXCJudW1iZXJcIjsnKX1jYXRjaChlKXthPSExfWdvb2cuaGFzQmFkTGV0U2NvcGluZz1hfXJldHVybiBnb29nLmhhc0JhZExldFNjb3Bpbmd9LGdvb2cud29ya2Fyb3VuZFNhZmFyaTEwRXZhbEJ1Zz1mdW5jdGlvbihlKXtyZXR1cm5cIihmdW5jdGlvbigpe1wiK2UrXCJcXG47fSkoKTtcXG5cIn0sZ29vZy5sb2FkTW9kdWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfO3RyeXtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXz17bW9kdWxlTmFtZTpcIlwiLGRlY2xhcmVMZWdhY3lOYW1lc3BhY2U6ITEsdHlwZTpnb29nLk1vZHVsZVR5cGUuR09PR30sZ29vZy5pc0Z1bmN0aW9uKGUpKXZhciBvPWUuY2FsbCh2b2lkIDAse30pO2Vsc2V7aWYoIWdvb2cuaXNTdHJpbmcoZSkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uXCIpO2dvb2cudXNlU2FmYXJpMTBXb3JrYXJvdW5kKCkmJihlPWdvb2cud29ya2Fyb3VuZFNhZmFyaTEwRXZhbEJ1ZyhlKSksbz1nb29nLmxvYWRNb2R1bGVGcm9tU291cmNlXy5jYWxsKHZvaWQgMCxlKX12YXIgcj1nb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lO2lmKCFnb29nLmlzU3RyaW5nKHIpfHwhcil0aHJvdyBFcnJvcignSW52YWxpZCBtb2R1bGUgbmFtZSBcIicrcisnXCInKTtnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlP2dvb2cuY29uc3RydWN0TmFtZXNwYWNlXyhyLG8pOmdvb2cuU0VBTF9NT0RVTEVfRVhQT1JUUyYmT2JqZWN0LnNlYWwmJlwib2JqZWN0XCI9PXR5cGVvZiBvJiZudWxsIT1vJiZPYmplY3Quc2VhbChvKSxnb29nLmxvYWRlZE1vZHVsZXNfW3JdPXtleHBvcnRzOm8sdHlwZTpnb29nLk1vZHVsZVR5cGUuR09PRyxtb2R1bGVJZDpnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lfX1maW5hbGx5e2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXR9fSxnb29nLmxvYWRNb2R1bGVGcm9tU291cmNlXz1mdW5jdGlvbihhKXtyZXR1cm4gZXZhbChhKSx7fX0sZ29vZy5ub3JtYWxpemVQYXRoXz1mdW5jdGlvbihlKXtlPWUuc3BsaXQoXCIvXCIpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7KVwiLlwiPT1lW3RdP2Uuc3BsaWNlKHQsMSk6dCYmXCIuLlwiPT1lW3RdJiZlW3QtMV0mJlwiLi5cIiE9ZVt0LTFdP2Uuc3BsaWNlKC0tdCwyKTp0Kys7cmV0dXJuIGUuam9pbihcIi9cIil9LGdvb2cubG9hZEZpbGVTeW5jXz1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0xPQURfRklMRV9TWU5DKXJldHVybiBnb29nLmdsb2JhbC5DTE9TVVJFX0xPQURfRklMRV9TWU5DKGUpO3RyeXt2YXIgdD1uZXcgZ29vZy5nbG9iYWwuWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbihcImdldFwiLGUsITEpLHQuc2VuZCgpLDA9PXQuc3RhdHVzfHwyMDA9PXQuc3RhdHVzP3QucmVzcG9uc2VUZXh0Om51bGx9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSxnb29nLnRyYW5zcGlsZV89ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWdvb2cuZ2xvYmFsLiRqc2NvbXA7cnx8KGdvb2cuZ2xvYmFsLiRqc2NvbXA9cj17fSk7dmFyIG49ci50cmFuc3BpbGU7aWYoIW4pe3ZhciBpPWdvb2cuYmFzZVBhdGgrZ29vZy5UUkFOU1BJTEVSLHM9Z29vZy5sb2FkRmlsZVN5bmNfKGkpO2lmKHMpe2lmKGZ1bmN0aW9uKCl7KDAsZXZhbCkocytcIlxcbi8vIyBzb3VyY2VVUkw9XCIraSl9LmNhbGwoZ29vZy5nbG9iYWwpLGdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQmJmdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQuJGpzY29tcCYmIWdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQuJGpzY29tcC50cmFuc3BpbGUpdGhyb3cgRXJyb3IoJ1RoZSB0cmFuc3BpbGVyIGRpZCBub3QgcHJvcGVybHkgZXhwb3J0IHRoZSBcInRyYW5zcGlsZVwiIG1ldGhvZC4gJGd3dEV4cG9ydDogJytKU09OLnN0cmluZ2lmeShnb29nLmdsb2JhbC4kZ3d0RXhwb3J0KSk7Z29vZy5nbG9iYWwuJGpzY29tcC50cmFuc3BpbGU9Z29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wLnRyYW5zcGlsZSxuPShyPWdvb2cuZ2xvYmFsLiRqc2NvbXApLnRyYW5zcGlsZX19cmV0dXJuIG58fChuPXIudHJhbnNwaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cubG9nVG9Db25zb2xlXyh0K1wiIHJlcXVpcmVzIHRyYW5zcGlsYXRpb24gYnV0IG5vIHRyYW5zcGlsZXIgd2FzIGZvdW5kLlwiKSxlfSksbihlLHQsbyl9LGdvb2cudHlwZU9mPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlO2lmKFwib2JqZWN0XCI9PXQpe2lmKCFlKXJldHVyblwibnVsbFwiO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm5cImFycmF5XCI7aWYoZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gdDt2YXIgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7aWYoXCJbb2JqZWN0IFdpbmRvd11cIj09bylyZXR1cm5cIm9iamVjdFwiO2lmKFwiW29iamVjdCBBcnJheV1cIj09b3x8XCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoJiZ2b2lkIDAhPT1lLnNwbGljZSYmdm9pZCAwIT09ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWUucHJvcGVydHlJc0VudW1lcmFibGUoXCJzcGxpY2VcIikpcmV0dXJuXCJhcnJheVwiO2lmKFwiW29iamVjdCBGdW5jdGlvbl1cIj09b3x8dm9pZCAwIT09ZS5jYWxsJiZ2b2lkIDAhPT1lLnByb3BlcnR5SXNFbnVtZXJhYmxlJiYhZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShcImNhbGxcIikpcmV0dXJuXCJmdW5jdGlvblwifWVsc2UgaWYoXCJmdW5jdGlvblwiPT10JiZ2b2lkIDA9PT1lLmNhbGwpcmV0dXJuXCJvYmplY3RcIjtyZXR1cm4gdH0sZ29vZy5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxnb29nLmlzRGVmQW5kTm90TnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZX0sZ29vZy5pc0FycmF5PWZ1bmN0aW9uKGUpe3JldHVyblwiYXJyYXlcIj09Z29vZy50eXBlT2YoZSl9LGdvb2cuaXNBcnJheUxpa2U9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy50eXBlT2YoZSk7cmV0dXJuXCJhcnJheVwiPT10fHxcIm9iamVjdFwiPT10JiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGh9LGdvb2cuaXNEYXRlTGlrZT1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pc09iamVjdChlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXRGdWxsWWVhcn0sZ29vZy5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09Z29vZy50eXBlT2YoZSl9LGdvb2cuaXNPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuXCJvYmplY3RcIj09dCYmbnVsbCE9ZXx8XCJmdW5jdGlvblwiPT10fSxnb29nLmdldFVpZD1mdW5jdGlvbihlKXtyZXR1cm4gZVtnb29nLlVJRF9QUk9QRVJUWV9dfHwoZVtnb29nLlVJRF9QUk9QRVJUWV9dPSsrZ29vZy51aWRDb3VudGVyXyl9LGdvb2cuaGFzVWlkPWZ1bmN0aW9uKGUpe3JldHVybiEhZVtnb29nLlVJRF9QUk9QRVJUWV9dfSxnb29nLnJlbW92ZVVpZD1mdW5jdGlvbihlKXtudWxsIT09ZSYmXCJyZW1vdmVBdHRyaWJ1dGVcImluIGUmJmUucmVtb3ZlQXR0cmlidXRlKGdvb2cuVUlEX1BST1BFUlRZXyk7dHJ5e2RlbGV0ZSBlW2dvb2cuVUlEX1BST1BFUlRZX119Y2F0Y2goZSl7fX0sZ29vZy5VSURfUFJPUEVSVFlfPVwiY2xvc3VyZV91aWRfXCIrKDFlOSpNYXRoLnJhbmRvbSgpPj4+MCksZ29vZy51aWRDb3VudGVyXz0wLGdvb2cuZ2V0SGFzaENvZGU9Z29vZy5nZXRVaWQsZ29vZy5yZW1vdmVIYXNoQ29kZT1nb29nLnJlbW92ZVVpZCxnb29nLmNsb25lT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cudHlwZU9mKGUpO2lmKFwib2JqZWN0XCI9PXR8fFwiYXJyYXlcIj09dCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9uZSlyZXR1cm4gZS5jbG9uZSgpO2Zvcih2YXIgbyBpbiB0PVwiYXJyYXlcIj09dD9bXTp7fSxlKXRbb109Z29vZy5jbG9uZU9iamVjdChlW29dKTtyZXR1cm4gdH1yZXR1cm4gZX0sZ29vZy5iaW5kTmF0aXZlXz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGUuY2FsbC5hcHBseShlLmJpbmQsYXJndW1lbnRzKX0sZ29vZy5iaW5kSnNfPWZ1bmN0aW9uKGUsdCxvKXtpZighZSl0aHJvdyBFcnJvcigpO2lmKDI8YXJndW1lbnRzLmxlbmd0aCl7dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KG8sciksZS5hcHBseSh0LG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSxnb29nLmJpbmQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmLTEhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCkuaW5kZXhPZihcIm5hdGl2ZSBjb2RlXCIpP2dvb2cuYmluZD1nb29nLmJpbmROYXRpdmVfOmdvb2cuYmluZD1nb29nLmJpbmRKc18sZ29vZy5iaW5kLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ29vZy5wYXJ0aWFsPWZ1bmN0aW9uKGUsdCl7dmFyIG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW8uc2xpY2UoKTtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsdCl9fSxnb29nLm1peGluPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpZVtvXT10W29dfSxnb29nLm5vdz1nb29nLlRSVVNURURfU0lURSYmRGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxnb29nLmdsb2JhbEV2YWw9ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuZXhlY1NjcmlwdClnb29nLmdsb2JhbC5leGVjU2NyaXB0KGUsXCJKYXZhU2NyaXB0XCIpO2Vsc2V7aWYoIWdvb2cuZ2xvYmFsLmV2YWwpdGhyb3cgRXJyb3IoXCJnb29nLmdsb2JhbEV2YWwgbm90IGF2YWlsYWJsZVwiKTtpZihudWxsPT1nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfKXt0cnl7Z29vZy5nbG9iYWwuZXZhbChcInZhciBfZXZhbFRlc3RfID0gMTtcIil9Y2F0Y2goZSl7fWlmKHZvaWQgMCE9PWdvb2cuZ2xvYmFsLl9ldmFsVGVzdF8pe3RyeXtkZWxldGUgZ29vZy5nbG9iYWwuX2V2YWxUZXN0X31jYXRjaChlKXt9Z29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz0hMH1lbHNlIGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc189ITF9aWYoZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXylnb29nLmdsb2JhbC5ldmFsKGUpO2Vsc2V7dmFyIHQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQsbz10LmNyZWF0ZUVsZW1lbnQoXCJTQ1JJUFRcIik7by50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIsby5kZWZlcj0hMSxvLmFwcGVuZENoaWxkKHQuY3JlYXRlVGV4dE5vZGUoZSkpLHQuaGVhZC5hcHBlbmRDaGlsZChvKSx0LmhlYWQucmVtb3ZlQ2hpbGQobyl9fX0sZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz1udWxsLGdvb2cuZ2V0Q3NzTmFtZT1mdW5jdGlvbihlLHQpe2lmKFwiLlwiPT1TdHJpbmcoZSkuY2hhckF0KDApKXRocm93IEVycm9yKCdjbGFzc05hbWUgcGFzc2VkIGluIGdvb2cuZ2V0Q3NzTmFtZSBtdXN0IG5vdCBzdGFydCB3aXRoIFwiLlwiLiBZb3UgcGFzc2VkOiAnK2UpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmNzc05hbWVNYXBwaW5nX1tlXXx8ZX0scj1mdW5jdGlvbihlKXtlPWUuc3BsaXQoXCItXCIpO2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKG8oZVtyXSkpO3JldHVybiB0LmpvaW4oXCItXCIpfTtyZXR1cm4gcj1nb29nLmNzc05hbWVNYXBwaW5nXz9cIkJZX1dIT0xFXCI9PWdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV8/bzpyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxlPXQ/ZStcIi1cIityKHQpOnIoZSksZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBfRk4/Z29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBfRk4oZSk6ZX0sZ29vZy5zZXRDc3NOYW1lTWFwcGluZz1mdW5jdGlvbihlLHQpe2dvb2cuY3NzTmFtZU1hcHBpbmdfPWUsZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXz10fSwhQ09NUElMRUQmJmdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORyYmKGdvb2cuY3NzTmFtZU1hcHBpbmdfPWdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORyksZ29vZy5nZXRNc2c9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBvJiZvLmh0bWwmJihlPWUucmVwbGFjZSgvPC9nLFwiJmx0O1wiKSksdCYmKGU9ZS5yZXBsYWNlKC9cXHtcXCQoW159XSspfS9nLChmdW5jdGlvbihlLG8pe3JldHVybiBudWxsIT10JiZvIGluIHQ/dFtvXTplfSkpKSxlfSxnb29nLmdldE1zZ1dpdGhGYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxnb29nLmV4cG9ydFN5bWJvbD1mdW5jdGlvbihlLHQsbyl7Z29vZy5leHBvcnRQYXRoXyhlLHQsbyl9LGdvb2cuZXhwb3J0UHJvcGVydHk9ZnVuY3Rpb24oZSx0LG8pe2VbdF09b30sZ29vZy5pbmhlcml0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oKXt9by5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5zdXBlckNsYXNzXz10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbyxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuYmFzZT1mdW5jdGlvbihlLG8scil7Zm9yKHZhciBuPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMiksaT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdC5wcm90b3R5cGVbb10uYXBwbHkoZSxuKX19LGdvb2cuYmFzZT1mdW5jdGlvbihlLHQsbyl7dmFyIHI9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7aWYoZ29vZy5TVFJJQ1RfTU9ERV9DT01QQVRJQkxFfHxnb29nLkRFQlVHJiYhcil0aHJvdyBFcnJvcihcImFyZ3VtZW50cy5jYWxsZXIgbm90IGRlZmluZWQuICBnb29nLmJhc2UoKSBjYW5ub3QgYmUgdXNlZCB3aXRoIHN0cmljdCBtb2RlIGNvZGUuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtQ1wiKTtpZih2b2lkIDAhPT1yLnN1cGVyQ2xhc3NfKXtmb3IodmFyIG49QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiByLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yLmFwcGx5KGUsbil9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJlwic3ltYm9sXCIhPXR5cGVvZiB0KXRocm93IEVycm9yKFwibWV0aG9kIG5hbWVzIHByb3ZpZGVkIHRvIGdvb2cuYmFzZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sXCIpO2ZvcihuPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMiksaT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTtpPSExO2Zvcih2YXIgcz1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtzO3M9T2JqZWN0LmdldFByb3RvdHlwZU9mKHMpKWlmKHNbdF09PT1yKWk9ITA7ZWxzZSBpZihpKXJldHVybiBzW3RdLmFwcGx5KGUsbik7aWYoZVt0XT09PXIpcmV0dXJuIGUuY29uc3RydWN0b3IucHJvdG90eXBlW3RdLmFwcGx5KGUsbik7dGhyb3cgRXJyb3IoXCJnb29nLmJhc2UgY2FsbGVkIGZyb20gYSBtZXRob2Qgb2Ygb25lIG5hbWUgdG8gYSBtZXRob2Qgb2YgYSBkaWZmZXJlbnQgbmFtZVwiKX0sZ29vZy5zY29wZT1mdW5jdGlvbihlKXtpZihnb29nLmlzSW5Nb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLnNjb3BlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aGluIGEgbW9kdWxlLlwiKTtlLmNhbGwoZ29vZy5nbG9iYWwpfSxDT01QSUxFRHx8KGdvb2cuZ2xvYmFsLkNPTVBJTEVEPUNPTVBJTEVEKSxnb29nLmRlZmluZUNsYXNzPWZ1bmN0aW9uKGUsdCl7dmFyIG89dC5jb25zdHJ1Y3RvcixyPXQuc3RhdGljcztyZXR1cm4gbyYmbyE9T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcnx8KG89ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcImNhbm5vdCBpbnN0YW50aWF0ZSBhbiBpbnRlcmZhY2UgKG5vIGNvbnN0cnVjdG9yIGRlZmluZWQpLlwiKX0pLG89Z29vZy5kZWZpbmVDbGFzcy5jcmVhdGVTZWFsaW5nQ29uc3RydWN0b3JfKG8sZSksZSYmZ29vZy5pbmhlcml0cyhvLGUpLGRlbGV0ZSB0LmNvbnN0cnVjdG9yLGRlbGV0ZSB0LnN0YXRpY3MsZ29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfKG8ucHJvdG90eXBlLHQpLG51bGwhPXImJihyIGluc3RhbmNlb2YgRnVuY3Rpb24/cihvKTpnb29nLmRlZmluZUNsYXNzLmFwcGx5UHJvcGVydGllc18obyxyKSksb30sZ29vZy5kZWZpbmVDbGFzcy5TRUFMX0NMQVNTX0lOU1RBTkNFUz1nb29nLkRFQlVHLGdvb2cuZGVmaW5lQ2xhc3MuY3JlYXRlU2VhbGluZ0NvbnN0cnVjdG9yXz1mdW5jdGlvbihlLHQpe2lmKCFnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTKXJldHVybiBlO3ZhciBvPSFnb29nLmRlZmluZUNsYXNzLmlzVW5zZWFsYWJsZV8odCkscj1mdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0W2dvb2cuVUlEX1BST1BFUlRZX109dFtnb29nLlVJRF9QUk9QRVJUWV9dLHRoaXMuY29uc3RydWN0b3I9PT1yJiZvJiZPYmplY3Quc2VhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZPYmplY3Quc2VhbCh0KSx0fTtyZXR1cm4gcn0sZ29vZy5kZWZpbmVDbGFzcy5pc1Vuc2VhbGFibGVfPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnByb3RvdHlwZSYmZS5wcm90b3R5cGVbZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZX119LGdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpLGdvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtmb3IodmFyIHI9MDtyPGdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfLmxlbmd0aDtyKyspbz1nb29nLmRlZmluZUNsYXNzLk9CSkVDVF9QUk9UT1RZUEVfRklFTERTX1tyXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSl9LGdvb2cudGFnVW5zZWFsYWJsZUNsYXNzPWZ1bmN0aW9uKGUpeyFDT01QSUxFRCYmZ29vZy5kZWZpbmVDbGFzcy5TRUFMX0NMQVNTX0lOU1RBTkNFUyYmKGUucHJvdG90eXBlW2dvb2cuVU5TRUFMQUJMRV9DT05TVFJVQ1RPUl9QUk9QRVJUWV9dPSEwKX0sZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZXz1cImdvb2dfZGVmaW5lQ2xhc3NfbGVnYWN5X3Vuc2VhbGFibGVcIiwhQ09NUElMRUQmJmdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQmJihnb29nLmluSHRtbERvY3VtZW50Xz1mdW5jdGlvbigpe3ZhciBlPWdvb2cuZ2xvYmFsLmRvY3VtZW50O3JldHVybiBudWxsIT1lJiZcIndyaXRlXCJpbiBlfSxnb29nLmlzRG9jdW1lbnRMb2FkaW5nXz1mdW5jdGlvbigpe3ZhciBlPWdvb2cuZ2xvYmFsLmRvY3VtZW50O3JldHVybiBlLmF0dGFjaEV2ZW50P1wiY29tcGxldGVcIiE9ZS5yZWFkeVN0YXRlOlwibG9hZGluZ1wiPT1lLnJlYWR5U3RhdGV9LGdvb2cuZmluZEJhc2VQYXRoXz1mdW5jdGlvbigpe2lmKGdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpJiZnb29nLmlzU3RyaW5nKGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIKSlnb29nLmJhc2VQYXRoPWdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQsdD1lLmN1cnJlbnRTY3JpcHQ7Zm9yKHQ9KGU9dD9bdF06ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIlNDUklQVFwiKSkubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciBvPWVbdF0uc3JjLHI9by5sYXN0SW5kZXhPZihcIj9cIik7aWYocj0tMT09cj9vLmxlbmd0aDpyLFwiYmFzZS5qc1wiPT1vLnN1YnN0cihyLTcsNykpe2dvb2cuYmFzZVBhdGg9by5zdWJzdHIoMCxyLTcpO2JyZWFrfX19fSxnb29nLmZpbmRCYXNlUGF0aF8oKSxnb29nLlRyYW5zcGlsZXI9ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl89bnVsbCx0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfPWdvb2cuVFJBTlNQSUxFX1RPX0xBTkdVQUdFfSxnb29nLlRyYW5zcGlsZXIucHJvdG90eXBlLmNyZWF0ZVJlcXVpcmVzVHJhbnNwaWxhdGlvbl89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQsbyl7ZT9kW3RdPSEwOm8oKT8oYz10LGRbdF09ITEpOmU9ZFt0XT0hMH1mdW5jdGlvbiBiKGEpe3RyeXtyZXR1cm4hIWV2YWwoYSl9Y2F0Y2goZSl7cmV0dXJuITF9fXZhciBjPVwiZXMzXCIsZD17ZXMzOiExfSxlPSExLGY9Z29vZy5nbG9iYWwubmF2aWdhdG9yJiZnb29nLmdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50P2dvb2cuZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ6XCJcIjtyZXR1cm4gYShcImVzNVwiLChmdW5jdGlvbigpe3JldHVybiBiKFwiWzEsXS5sZW5ndGg9PTFcIil9KSksYShcImVzNlwiLChmdW5jdGlvbigpe3JldHVybiFmLm1hdGNoKC9FZGdlXFwvKFxcZCspKFxcLlxcZCkqL2kpJiZiKCcoKCk9PntcInVzZSBzdHJpY3RcIjtjbGFzcyBYe2NvbnN0cnVjdG9yKCl7aWYobmV3LnRhcmdldCE9U3RyaW5nKXRocm93IDE7dGhpcy54PTQyfX1sZXQgcT1SZWZsZWN0LmNvbnN0cnVjdChYLFtdLFN0cmluZyk7aWYocS54IT00Mnx8IShxIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyAxO2Zvcihjb25zdCBhIG9mWzIsM10pe2lmKGE9PTIpY29udGludWU7ZnVuY3Rpb24gZih6PXthfSl7bGV0IGE9MDtyZXR1cm4gei5hfXtmdW5jdGlvbiBmKCl7cmV0dXJuIDA7fX1yZXR1cm4gZigpPT0zfX0pKCknKX0pKSxhKFwiZXM3XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCIyICoqIDIgPT0gNFwiKX0pKSxhKFwiZXM4XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJhc3luYyAoKSA9PiAxLCB0cnVlXCIpfSkpLGEoXCJlczlcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcIih7Li4ucmVzdH0gPSB7fSksIHRydWVcIil9KSksYShcImVzX25leHRcIiwoZnVuY3Rpb24oKXtyZXR1cm4hMX0pKSx7dGFyZ2V0OmMsbWFwOmR9fSxnb29nLlRyYW5zcGlsZXIucHJvdG90eXBlLm5lZWRzVHJhbnNwaWxlPWZ1bmN0aW9uKGUsdCl7aWYoXCJhbHdheXNcIj09Z29vZy5UUkFOU1BJTEUpcmV0dXJuITA7aWYoXCJuZXZlclwiPT1nb29nLlRSQU5TUElMRSlyZXR1cm4hMTtpZighdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fKXt2YXIgbz10aGlzLmNyZWF0ZVJlcXVpcmVzVHJhbnNwaWxhdGlvbl8oKTt0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl89by5tYXAsdGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0Xz10aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRffHxvLnRhcmdldH1pZihlIGluIHRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXylyZXR1cm4hIXRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uX1tlXXx8ISghZ29vZy5pbkh0bWxEb2N1bWVudF8oKXx8XCJlczZcIiE9dHx8XCJub01vZHVsZVwiaW4gZ29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSk7dGhyb3cgRXJyb3IoXCJVbmtub3duIGxhbmd1YWdlIG1vZGU6IFwiK2UpfSxnb29nLlRyYW5zcGlsZXIucHJvdG90eXBlLnRyYW5zcGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnRyYW5zcGlsZV8oZSx0LHRoaXMudHJhbnNwaWxhdGlvblRhcmdldF8pfSxnb29nLnRyYW5zcGlsZXJfPW5ldyBnb29nLlRyYW5zcGlsZXIsZ29vZy5wcm90ZWN0U2NyaXB0VGFnXz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC88XFwvKFNDUklQVCkvZ2ksXCJcXFxceDNjLyQxXCIpfSxnb29nLkRlYnVnTG9hZGVyXz1mdW5jdGlvbigpe3RoaXMuZGVwZW5kZW5jaWVzXz17fSx0aGlzLmlkVG9QYXRoXz17fSx0aGlzLndyaXR0ZW5fPXt9LHRoaXMubG9hZGluZ0RlcHNfPVtdLHRoaXMuZGVwc1RvTG9hZF89W10sdGhpcy5wYXVzZWRfPSExLHRoaXMuZmFjdG9yeV89bmV3IGdvb2cuRGVwZW5kZW5jeUZhY3RvcnkoZ29vZy50cmFuc3BpbGVyXyksdGhpcy5kZWZlcnJlZENhbGxiYWNrc189e30sdGhpcy5kZWZlcnJlZFF1ZXVlXz1bXX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oKXtyJiYoZ29vZy5nbG9iYWwuc2V0VGltZW91dChyLDApLHI9bnVsbCl9dmFyIHI9dDtpZihlLmxlbmd0aCl7dD1bXTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5nZXRQYXRoRnJvbURlcHNfKGVbbl0pO2lmKCFpKXRocm93IEVycm9yKFwiVW5yZWdvbml6ZWQgbmFtZXNwYWNlOiBcIitlW25dKTt0LnB1c2godGhpcy5kZXBlbmRlbmNpZXNfW2ldKX1pPWdvb2cucmVxdWlyZTt2YXIgcz0wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaShlW25dKSx0W25dLm9uTG9hZCgoZnVuY3Rpb24oKXsrK3M9PWUubGVuZ3RoJiZvKCl9KSl9ZWxzZSBvKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkQ2xvc3VyZURlcHM9ZnVuY3Rpb24oKXt0aGlzLmRlcHNUb0xvYWRfLnB1c2godGhpcy5mYWN0b3J5Xy5jcmVhdGVEZXBlbmRlbmN5KGdvb2cubm9ybWFsaXplUGF0aF8oZ29vZy5iYXNlUGF0aCtcImRlcHMuanNcIiksXCJkZXBzLmpzXCIsW10sW10se30sITEpKSx0aGlzLmxvYWREZXBzXygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucmVxdWVzdGVkPWZ1bmN0aW9uKGUsdCl7KGU9dGhpcy5nZXRQYXRoRnJvbURlcHNfKGUpKSYmKHR8fHRoaXMuYXJlRGVwc0xvYWRlZF8odGhpcy5kZXBlbmRlbmNpZXNfW2VdLnJlcXVpcmVzKSkmJih0PXRoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2VdKSYmKGRlbGV0ZSB0aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1tlXSx0KCkpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuc2V0RGVwZW5kZW5jeUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dGhpcy5mYWN0b3J5Xz1lfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZF89ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhlKSl0aHJvdyBlPVwiZ29vZy5yZXF1aXJlIGNvdWxkIG5vdCBmaW5kOiBcIitlLGdvb2cubG9nVG9Db25zb2xlXyhlKSxFcnJvcihlKTt2YXIgdD10aGlzLG89W10scj1mdW5jdGlvbihlKXt2YXIgbj10LmdldFBhdGhGcm9tRGVwc18oZSk7aWYoIW4pdGhyb3cgRXJyb3IoXCJCYWQgZGVwZW5kZW5jeSBwYXRoIG9yIHN5bWJvbDogXCIrZSk7aWYoIXQud3JpdHRlbl9bbl0pe2Zvcih0LndyaXR0ZW5fW25dPSEwLGU9dC5kZXBlbmRlbmNpZXNfW25dLG49MDtuPGUucmVxdWlyZXMubGVuZ3RoO24rKylnb29nLmlzUHJvdmlkZWRfKGUucmVxdWlyZXNbbl0pfHxyKGUucmVxdWlyZXNbbl0pO28ucHVzaChlKX19O3IoZSksZT0hIXRoaXMuZGVwc1RvTG9hZF8ubGVuZ3RoLHRoaXMuZGVwc1RvTG9hZF89dGhpcy5kZXBzVG9Mb2FkXy5jb25jYXQobyksdGhpcy5wYXVzZWRffHxlfHx0aGlzLmxvYWREZXBzXygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZERlcHNfPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD10aGlzLnBhdXNlZF87dGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgmJiF0OykhZnVuY3Rpb24oKXt2YXIgbz0hMSxyPWUuZGVwc1RvTG9hZF8uc2hpZnQoKSxuPSExO2UubG9hZGluZ18ocik7dmFyIGk9e3BhdXNlOmZ1bmN0aW9uKCl7aWYobyl0aHJvdyBFcnJvcihcIkNhbm5vdCBjYWxsIHBhdXNlIGFmdGVyIHRoZSBjYWxsIHRvIGxvYWQuXCIpO3Q9ITB9LHJlc3VtZTpmdW5jdGlvbigpe28/ZS5yZXN1bWVfKCk6dD0hMX0sbG9hZGVkOmZ1bmN0aW9uKCl7aWYobil0aHJvdyBFcnJvcihcIkRvdWJsZSBjYWxsIHRvIGxvYWRlZC5cIik7bj0hMCxlLmxvYWRlZF8ocil9LHBlbmRpbmc6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbz0wO288ZS5sb2FkaW5nRGVwc18ubGVuZ3RoO28rKyl0LnB1c2goZS5sb2FkaW5nRGVwc19bb10pO3JldHVybiB0fSxzZXRNb2R1bGVTdGF0ZTpmdW5jdGlvbihlKXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz17dHlwZTplLG1vZHVsZU5hbWU6XCJcIixkZWNsYXJlTGVnYWN5TmFtZXNwYWNlOiExfX0scmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzOmZ1bmN0aW9uKGUsdCxvKXtvJiYoZ29vZy5sb2FkZWRNb2R1bGVzX1tvXT17ZXhwb3J0czp0LHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkVTNixtb2R1bGVJZDpvfHxcIlwifSl9LHJlZ2lzdGVyR29vZ01vZHVsZUV4cG9ydHM6ZnVuY3Rpb24oZSx0KXtnb29nLmxvYWRlZE1vZHVsZXNfW2VdPXtleHBvcnRzOnQsdHlwZTpnb29nLk1vZHVsZVR5cGUuR09PRyxtb2R1bGVJZDplfX0sY2xlYXJNb2R1bGVTdGF0ZTpmdW5jdGlvbigpe2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGx9LGRlZmVyOmZ1bmN0aW9uKHQpe2lmKG8pdGhyb3cgRXJyb3IoXCJDYW5ub3QgcmVnaXN0ZXIgd2l0aCBkZWZlciBhZnRlciB0aGUgY2FsbCB0byBsb2FkLlwiKTtlLmRlZmVyXyhyLHQpfSxhcmVEZXBzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXJlRGVwc0xvYWRlZF8oci5yZXF1aXJlcyl9fTt0cnl7ci5sb2FkKGkpfWZpbmFsbHl7bz0hMH19KCk7dCYmdGhpcy5wYXVzZV8oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnBhdXNlXz1mdW5jdGlvbigpe3RoaXMucGF1c2VkXz0hMH0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnJlc3VtZV89ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZF8mJih0aGlzLnBhdXNlZF89ITEsdGhpcy5sb2FkRGVwc18oKSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkaW5nXz1mdW5jdGlvbihlKXt0aGlzLmxvYWRpbmdEZXBzXy5wdXNoKGUpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZGVkXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMubG9hZGluZ0RlcHNfLmxlbmd0aDt0KyspaWYodGhpcy5sb2FkaW5nRGVwc19bdF09PWUpe3RoaXMubG9hZGluZ0RlcHNfLnNwbGljZSh0LDEpO2JyZWFrfWZvcih0PTA7dDx0aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aDt0KyspaWYodGhpcy5kZWZlcnJlZFF1ZXVlX1t0XT09ZS5wYXRoKXt0aGlzLmRlZmVycmVkUXVldWVfLnNwbGljZSh0LDEpO2JyZWFrfWlmKHRoaXMubG9hZGluZ0RlcHNfLmxlbmd0aD09dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGgmJiF0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aClmb3IoO3RoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoOyl0aGlzLnJlcXVlc3RlZCh0aGlzLmRlZmVycmVkUXVldWVfLnNoaWZ0KCksITApO2UubG9hZGVkKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5hcmVEZXBzTG9hZGVkXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG89dGhpcy5nZXRQYXRoRnJvbURlcHNfKGVbdF0pO2lmKCFvfHwhKG8gaW4gdGhpcy5kZWZlcnJlZENhbGxiYWNrc18pJiYhZ29vZy5pc1Byb3ZpZGVkXyhlW3RdKSlyZXR1cm4hMX1yZXR1cm4hMH0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmdldFBhdGhGcm9tRGVwc189ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gdGhpcy5pZFRvUGF0aF8/dGhpcy5pZFRvUGF0aF9bZV06ZSBpbiB0aGlzLmRlcGVuZGVuY2llc18/ZTpudWxsfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuZGVmZXJfPWZ1bmN0aW9uKGUsdCl7dGhpcy5kZWZlcnJlZENhbGxiYWNrc19bZS5wYXRoXT10LHRoaXMuZGVmZXJyZWRRdWV1ZV8ucHVzaChlLnBhdGgpfSxnb29nLkxvYWRDb250cm9sbGVyPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnBlbmRpbmc9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cz1mdW5jdGlvbihlLHQsbyl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5zZXRNb2R1bGVTdGF0ZT1mdW5jdGlvbihlKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyTW9kdWxlU3RhdGU9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmRlZmVyPWZ1bmN0aW9uKGUpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuYXJlRGVwc0xvYWRlZD1mdW5jdGlvbigpe30sZ29vZy5EZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIsbil7dGhpcy5wYXRoPWUsdGhpcy5yZWxhdGl2ZVBhdGg9dCx0aGlzLnByb3ZpZGVzPW8sdGhpcy5yZXF1aXJlcz1yLHRoaXMubG9hZEZsYWdzPW4sdGhpcy5sb2FkZWRfPSExLHRoaXMubG9hZENhbGxiYWNrc189W119LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUuZ2V0UGF0aE5hbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhdGgsdD1lLmluZGV4T2YoXCI6Ly9cIik7cmV0dXJuIDA8PXQmJigwPD0odD0oZT1lLnN1YnN0cmluZyh0KzMpKS5pbmRleE9mKFwiL1wiKSkmJihlPWUuc3Vic3RyaW5nKHQrMSkpKSxlfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLm9uTG9hZD1mdW5jdGlvbihlKXt0aGlzLmxvYWRlZF8/ZSgpOnRoaXMubG9hZENhbGxiYWNrc18ucHVzaChlKX0sZ29vZy5EZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZF89ITA7dmFyIGU9dGhpcy5sb2FkQ2FsbGJhY2tzXzt0aGlzLmxvYWRDYWxsYmFja3NfPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0oKX0sZ29vZy5EZXBlbmRlbmN5LmRlZmVyXz0hMSxnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfPXt9LGdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXz1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDMyKTtyZXR1cm4gZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwX1t0XT1lLHR9LGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfPWZ1bmN0aW9uKGUpe2RlbGV0ZSBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2VdfSxnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF8pKXRocm93IEVycm9yKFwiQ2FsbGJhY2sga2V5IFwiK2UrXCIgZG9lcyBub3QgZXhpc3QgKHdhcyBiYXNlLmpzIGxvYWRlZCBtb3JlIHRoYW4gb25jZT8pLlwiKTtmb3IodmFyIG89Z29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwX1tlXSxyPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXIucHVzaChhcmd1bWVudHNbbl0pO28uYXBwbHkodm9pZCAwLHIpfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2UubG9hZGVkKCk6ZS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIHQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7aWYoXCJjb21wbGV0ZVwiPT10LnJlYWR5U3RhdGUmJiFnb29nLkVOQUJMRV9DSFJPTUVfQVBQX1NBRkVfU0NSSVBUX0xPQURJTkcpe2lmKC9cXGJkZXBzLmpzJC8udGVzdCh0aGlzLnBhdGgpKXJldHVybiB2b2lkIGUubG9hZGVkKCk7dGhyb3cgRXJyb3IoJ0Nhbm5vdCB3cml0ZSBcIicrdGhpcy5wYXRoKydcIiBhZnRlciBkb2N1bWVudCBsb2FkJyl9aWYoIWdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORyYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSl7dmFyIG89Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbih0KXtnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfJiZcImNvbXBsZXRlXCIhPXQucmVhZHlTdGF0ZXx8KGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKG8pLGUubG9hZGVkKCkpfSkpLHI9IWdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJmdvb2cuZ2V0U2NyaXB0Tm9uY2UoKT8nIG5vbmNlPVwiJytnb29nLmdldFNjcmlwdE5vbmNlKCkrJ1wiJzpcIlwiO3I9JzxzY3JpcHQgc3JjPVwiJyt0aGlzLnBhdGgrJ1wiICcrKGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8/XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIjpcIm9ubG9hZFwiKStcIj1cXFwiZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXygnXCIrbysnXFwnLCB0aGlzKVwiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiAnKyhnb29nLkRlcGVuZGVuY3kuZGVmZXJfP1wiZGVmZXJcIjpcIlwiKStyK1wiPjxcXC9zY3JpcHQ+XCIsdC53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKHIpOnIpfWVsc2V7dmFyIG49dC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uZGVmZXI9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXyxuLmFzeW5jPSExLG4udHlwZT1cInRleHQvamF2YXNjcmlwdFwiLChyPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJm4uc2V0QXR0cmlidXRlKFwibm9uY2VcIixyKSxnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfPyhlLnBhdXNlKCksbi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtcImxvYWRlZFwiIT1uLnJlYWR5U3RhdGUmJlwiY29tcGxldGVcIiE9bi5yZWFkeVN0YXRlfHwoZS5sb2FkZWQoKSxlLnJlc3VtZSgpKX0pOm4ub25sb2FkPWZ1bmN0aW9uKCl7bi5vbmxvYWQ9bnVsbCxlLmxvYWRlZCgpfSxuLnNyYz1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVTY3JpcHRVUkwodGhpcy5wYXRoKTp0aGlzLnBhdGgsdC5oZWFkLmFwcGVuZENoaWxkKG4pfX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksXCJkZXBzLmpzXCI9PXRoaXMucmVsYXRpdmVQYXRoPyhnb29nLmxvZ1RvQ29uc29sZV8oXCJDb25zaWRlciBzZXR0aW5nIENMT1NVUkVfSU1QT1JUX1NDUklQVCBiZWZvcmUgbG9hZGluZyBiYXNlLmpzLCBvciBzZXR0aW5nIENMT1NVUkVfTk9fREVQUyB0byB0cnVlLlwiKSxlLmxvYWRlZCgpKTplLnBhdXNlKCl9LGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKX0sZ29vZy5pbmhlcml0cyhnb29nLkVzNk1vZHVsZURlcGVuZGVuY3ksZ29vZy5EZXBlbmRlbmN5KSxnb29nLkVzNk1vZHVsZURlcGVuZGVuY3kucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2UubG9hZGVkKCk6ZS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIHQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQsbz10aGlzO2lmKGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpe3ZhciByPWZ1bmN0aW9uKGUsbyl7ZT1vPyc8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBjcm9zc29yaWdpbj4nK28rXCI8XFwvc2NyaXB0PlwiOic8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBjcm9zc29yaWdpbiBzcmM9XCInK2UrJ1wiPjxcXC9zY3JpcHQ+Jyx0LndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwoZSk6ZSl9O2dvb2cuRGVwZW5kZW5jeS5kZWZlcl89ITB9ZWxzZSByPWZ1bmN0aW9uKGUsbyl7dmFyIHI9dC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3IuZGVmZXI9ITAsci5hc3luYz0hMSxyLnR5cGU9XCJtb2R1bGVcIixyLnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsITApO3ZhciBuPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKTtuJiZyLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsbiksbz9yLnRleHRDb250ZW50PWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdChvKTpvOnIuc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTChlKTplLHQuaGVhZC5hcHBlbmRDaGlsZChyKX07dmFyIG49Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKG4pLGUuc2V0TW9kdWxlU3RhdGUoZ29vZy5Nb2R1bGVUeXBlLkVTNil9KSk7cih2b2lkIDAsJ2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK24rJ1wiKScpLHIodGhpcy5wYXRoLHZvaWQgMCk7dmFyIGk9Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbih0KXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhpKSxlLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhvLnBhdGgsdCxnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKX0pKTtyKHZvaWQgMCwnaW1wb3J0ICogYXMgbSBmcm9tIFwiJyt0aGlzLnBhdGgrJ1wiOyBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytpKydcIiwgbSknKTt2YXIgcz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKCl7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18ocyksZS5jbGVhck1vZHVsZVN0YXRlKCksZS5sb2FkZWQoKX0pKTtyKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicrcysnXCIpJyl9ZWxzZSBnb29nLmxvZ1RvQ29uc29sZV8oXCJDYW5ub3QgdXNlIGRlZmF1bHQgZGVidWcgbG9hZGVyIG91dHNpZGUgb2YgSFRNTCBkb2N1bWVudHMuXCIpLGUucGF1c2UoKX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXtnb29nLkRlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy5jb250ZW50c189bnVsbCx0aGlzLmxhenlGZXRjaF89IWdvb2cuaW5IdG1sRG9jdW1lbnRfKCl8fCEoXCJub01vZHVsZVwiaW4gZ29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSl9LGdvb2cuaW5oZXJpdHMoZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3ksZ29vZy5EZXBlbmRlbmN5KSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7ci5jb250ZW50c189Z29vZy5sb2FkRmlsZVN5bmNfKHIucGF0aCksci5jb250ZW50c18mJihyLmNvbnRlbnRzXz1yLnRyYW5zZm9ybShyLmNvbnRlbnRzXyksci5jb250ZW50c18mJihyLmNvbnRlbnRzXys9XCJcXG4vLyMgc291cmNlVVJMPVwiK3IucGF0aCkpfWZ1bmN0aW9uIG8oKXtpZihyLmxhenlGZXRjaF8mJnQoKSxyLmNvbnRlbnRzXyl7biYmZS5zZXRNb2R1bGVTdGF0ZShnb29nLk1vZHVsZVR5cGUuRVM2KTt0cnl7dmFyIG89ci5jb250ZW50c187aWYoci5jb250ZW50c189bnVsbCxnb29nLmdsb2JhbEV2YWwobyksbil2YXIgaT1nb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lfWZpbmFsbHl7biYmZS5jbGVhck1vZHVsZVN0YXRlKCl9biYmZ29vZy5nbG9iYWwuJGpzY29tcC5yZXF1aXJlLmVuc3VyZShbci5nZXRQYXRoTmFtZSgpXSwoZnVuY3Rpb24oKXtlLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhyLnBhdGgsZ29vZy5nbG9iYWwuJGpzY29tcC5yZXF1aXJlKHIuZ2V0UGF0aE5hbWUoKSksaSl9KSksZS5sb2FkZWQoKX19dmFyIHI9dGhpcztpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpdCgpLHRoaXMuY29udGVudHNfJiZnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQoXCJcIix0aGlzLmNvbnRlbnRzXyk/KHRoaXMuY29udGVudHNfPW51bGwsZS5sb2FkZWQoKSk6ZS5wYXVzZSgpO2Vsc2V7dmFyIG49dGhpcy5sb2FkRmxhZ3MubW9kdWxlPT1nb29nLk1vZHVsZVR5cGUuRVM2O3RoaXMubGF6eUZldGNoX3x8dCgpO3ZhciBpPTE8ZS5wZW5kaW5nKCkubGVuZ3RoLHM9aSYmZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXztpZihpPWdvb2cuRGVwZW5kZW5jeS5kZWZlcl8mJihpfHxnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpKSxzfHxpKWUuZGVmZXIoKGZ1bmN0aW9uKCl7bygpfSkpO2Vsc2V7dmFyIGE9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7aWYocz1nb29nLmluSHRtbERvY3VtZW50XygpJiZcIkFjdGl2ZVhPYmplY3RcImluIGdvb2cuZ2xvYmFsLG4mJmdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkmJiFzKXtnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSEwLGUucGF1c2UoKTt2YXIgcD1hLm9ucmVhZHlzdGF0ZWNoYW5nZTthLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1wiaW50ZXJhY3RpdmVcIj09YS5yZWFkeVN0YXRlJiYoYS5vbnJlYWR5c3RhdGVjaGFuZ2U9cCxvKCksZS5yZXN1bWUoKSksZ29vZy5pc0Z1bmN0aW9uKHApJiZwLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lbHNlIWdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJmdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCk/ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudCx0PWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXygoZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyh0KSxvKCl9KSkscj0nPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+Jytnb29nLnByb3RlY3RTY3JpcHRUYWdfKCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJyt0KydcIik7JykrXCI8XFwvc2NyaXB0PlwiO2Uud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChyKTpyKX0oKTpvKCl9fX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXt9LGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLGkpe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pLHRoaXMudHJhbnNwaWxlcj1pfSxnb29nLmluaGVyaXRzKGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc3BpbGVyLnRyYW5zcGlsZShlLHRoaXMuZ2V0UGF0aE5hbWUoKSl9LGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKX0sZ29vZy5pbmhlcml0cyhnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLGkscyl7Z29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy5uZWVkc1RyYW5zcGlsZV89aSx0aGlzLnRyYW5zcGlsZXJfPXN9LGdvb2cuaW5oZXJpdHMoZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSksZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5lZWRzVHJhbnNwaWxlXyYmKGU9dGhpcy50cmFuc3BpbGVyXy50cmFuc3BpbGUoZSx0aGlzLmdldFBhdGhOYW1lKCkpKSxnb29nLkxPQURfTU9EVUxFX1VTSU5HX0VWQUwmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuSlNPTik/XCJnb29nLmxvYWRNb2R1bGUoXCIrZ29vZy5nbG9iYWwuSlNPTi5zdHJpbmdpZnkoZStcIlxcbi8vIyBzb3VyY2VVUkw9XCIrdGhpcy5wYXRoK1wiXFxuXCIpK1wiKTtcIjonZ29vZy5sb2FkTW9kdWxlKGZ1bmN0aW9uKGV4cG9ydHMpIHtcInVzZSBzdHJpY3RcIjsnK2UrXCJcXG47cmV0dXJuIGV4cG9ydHN9KTtcXG4vLyMgc291cmNlVVJMPVwiK3RoaXMucGF0aCtcIlxcblwifSxnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfPSEoZ29vZy5nbG9iYWwuYXRvYnx8IWdvb2cuZ2xvYmFsLmRvY3VtZW50fHwhZ29vZy5nbG9iYWwuZG9jdW1lbnQuYWxsKSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyKXt0PXR8fFtdLGU9ZS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpO3ZhciBuPWdvb2cubm9ybWFsaXplUGF0aF8oZ29vZy5iYXNlUGF0aCtlKTtmb3IociYmXCJib29sZWFuXCIhPXR5cGVvZiByfHwocj1yP3ttb2R1bGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0d9Ont9KSxvPXRoaXMuZmFjdG9yeV8uY3JlYXRlRGVwZW5kZW5jeShuLGUsdCxvLHIsZ29vZy50cmFuc3BpbGVyXy5uZWVkc1RyYW5zcGlsZShyLmxhbmd8fFwiZXMzXCIsci5tb2R1bGUpKSx0aGlzLmRlcGVuZGVuY2llc19bbl09byxvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5pZFRvUGF0aF9bdFtvXV09bjt0aGlzLmlkVG9QYXRoX1tlXT1ufSxnb29nLkRlcGVuZGVuY3lGYWN0b3J5PWZ1bmN0aW9uKGUpe3RoaXMudHJhbnNwaWxlcj1lfSxnb29nLkRlcGVuZGVuY3lGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIsbixpKXtyZXR1cm4gbi5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5HT09HP25ldyBnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5KGUsdCxvLHIsbixpLHRoaXMudHJhbnNwaWxlcik6aT9uZXcgZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeShlLHQsbyxyLG4sdGhpcy50cmFuc3BpbGVyKTpuLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkVTNj9cIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFJiZnb29nLkFTU1VNRV9FU19NT0RVTEVTX1RSQU5TUElMRUQ/bmV3IGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3koZSx0LG8scixuKTpuZXcgZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5KGUsdCxvLHIsbik6bmV3IGdvb2cuRGVwZW5kZW5jeShlLHQsbyxyLG4pfSxnb29nLmRlYnVnTG9hZGVyXz1uZXcgZ29vZy5EZWJ1Z0xvYWRlcl8sZ29vZy5sb2FkQ2xvc3VyZURlcHM9ZnVuY3Rpb24oKXtnb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKX0sZ29vZy5zZXREZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihlKXtnb29nLmRlYnVnTG9hZGVyXy5zZXREZXBlbmRlbmN5RmFjdG9yeShlKX0sZ29vZy5nbG9iYWwuQ0xPU1VSRV9OT19ERVBTfHxnb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKSxnb29nLmJvb3RzdHJhcD1mdW5jdGlvbihlLHQpe2dvb2cuZGVidWdMb2FkZXJfLmJvb3RzdHJhcChlLHQpfSksZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FPVwiXCIsZ29vZy5pZGVudGl0eV89ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGdvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5PWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFRydXN0ZWRUeXBlc3x8IVRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kpcmV0dXJuIHQ7dHJ5e3Q9VHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShlLHtjcmVhdGVIVE1MOmdvb2cuaWRlbnRpdHlfLGNyZWF0ZVNjcmlwdDpnb29nLmlkZW50aXR5XyxjcmVhdGVTY3JpcHRVUkw6Z29vZy5pZGVudGl0eV8sY3JlYXRlVVJMOmdvb2cuaWRlbnRpdHlffSl9Y2F0Y2goZSl7Z29vZy5sb2dUb0NvbnNvbGVfKGUubWVzc2FnZSl9cmV0dXJuIHR9LGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRT9nb29nLmNyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUUrXCIjYmFzZVwiKTpudWxsLGdvb2cub2JqZWN0PXt9LGdvb2cub2JqZWN0LmlzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEvdDplIT1lJiZ0IT10fSxnb29nLm9iamVjdC5mb3JFYWNoPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSl0LmNhbGwobyxlW3JdLHIsZSl9LGdvb2cub2JqZWN0LmZpbHRlcj1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKXQuY2FsbChvLGVbcl0scixlKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59LGdvb2cub2JqZWN0Lm1hcD1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKW5bcl09dC5jYWxsKG8sZVtyXSxyLGUpO3JldHVybiBufSxnb29nLm9iamVjdC5zb21lPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZih0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9LGdvb2cub2JqZWN0LmV2ZXJ5PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZighdC5jYWxsKG8sZVtyXSxyLGUpKXJldHVybiExO3JldHVybiEwfSxnb29nLm9iamVjdC5nZXRDb3VudD1mdW5jdGlvbihlKXt2YXIgdCxvPTA7Zm9yKHQgaW4gZSlvKys7cmV0dXJuIG99LGdvb2cub2JqZWN0LmdldEFueUtleT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4gdH0sZ29vZy5vYmplY3QuZ2V0QW55VmFsdWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpcmV0dXJuIGVbdF19LGdvb2cub2JqZWN0LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cub2JqZWN0LmNvbnRhaW5zVmFsdWUoZSx0KX0sZ29vZy5vYmplY3QuZ2V0VmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0LG89W10scj0wO2Zvcih0IGluIGUpb1tyKytdPWVbdF07cmV0dXJuIG99LGdvb2cub2JqZWN0LmdldEtleXM9ZnVuY3Rpb24oZSl7dmFyIHQsbz1bXSxyPTA7Zm9yKHQgaW4gZSlvW3IrK109dDtyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0VmFsdWVCeUtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmlzQXJyYXlMaWtlKHQpLHI9bz90OmFyZ3VtZW50cztmb3Iobz1vPzA6MTtvPHIubGVuZ3RoO28rKyl7aWYobnVsbD09ZSlyZXR1cm47ZT1lW3Jbb11dfXJldHVybiBlfSxnb29nLm9iamVjdC5jb250YWluc0tleT1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT09ZSYmdCBpbiBlfSxnb29nLm9iamVjdC5jb250YWluc1ZhbHVlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIGUpaWYoZVtvXT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5vYmplY3QuZmluZEtleT1mdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByIGluIGUpaWYodC5jYWxsKG8sZVtyXSxyLGUpKXJldHVybiByfSxnb29nLm9iamVjdC5maW5kVmFsdWU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybih0PWdvb2cub2JqZWN0LmZpbmRLZXkoZSx0LG8pKSYmZVt0XX0sZ29vZy5vYmplY3QuaXNFbXB0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5vYmplY3QuY2xlYXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpZGVsZXRlIGVbdF19LGdvb2cub2JqZWN0LnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBvO3JldHVybihvPXQgaW4gZSkmJmRlbGV0ZSBlW3RdLG99LGdvb2cub2JqZWN0LmFkZD1mdW5jdGlvbihlLHQsbyl7aWYobnVsbCE9PWUmJnQgaW4gZSl0aHJvdyBFcnJvcignVGhlIG9iamVjdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBrZXkgXCInK3QrJ1wiJyk7Z29vZy5vYmplY3Quc2V0KGUsdCxvKX0sZ29vZy5vYmplY3QuZ2V0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbCE9PWUmJnQgaW4gZT9lW3RdOm99LGdvb2cub2JqZWN0LnNldD1mdW5jdGlvbihlLHQsbyl7ZVt0XT1vfSxnb29nLm9iamVjdC5zZXRJZlVuZGVmaW5lZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbdF09b30sZ29vZy5vYmplY3Quc2V0V2l0aFJldHVyblZhbHVlSWZOb3RTZXQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0IGluIGU/ZVt0XToobz1vKCksZVt0XT1vKX0sZ29vZy5vYmplY3QuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIGUpaWYoIShvIGluIHQpfHxlW29dIT09dFtvXSlyZXR1cm4hMTtmb3IodmFyIHIgaW4gdClpZighKHIgaW4gZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cub2JqZWN0LmNsb25lPWZ1bmN0aW9uKGUpe3ZhciB0LG89e307Zm9yKHQgaW4gZSlvW3RdPWVbdF07cmV0dXJuIG99LGdvb2cub2JqZWN0LnVuc2FmZUNsb25lPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cudHlwZU9mKGUpO2lmKFwib2JqZWN0XCI9PXR8fFwiYXJyYXlcIj09dCl7aWYoZ29vZy5pc0Z1bmN0aW9uKGUuY2xvbmUpKXJldHVybiBlLmNsb25lKCk7Zm9yKHZhciBvIGluIHQ9XCJhcnJheVwiPT10P1tdOnt9LGUpdFtvXT1nb29nLm9iamVjdC51bnNhZmVDbG9uZShlW29dKTtyZXR1cm4gdH1yZXR1cm4gZX0sZ29vZy5vYmplY3QudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe3ZhciB0LG89e307Zm9yKHQgaW4gZSlvW2VbdF1dPXQ7cmV0dXJuIG99LGdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpLGdvb2cub2JqZWN0LmV4dGVuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyxyLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXtmb3IobyBpbiByPWFyZ3VtZW50c1tuXSllW29dPXJbb107Zm9yKHZhciBpPTA7aTxnb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTXy5sZW5ndGg7aSsrKW89Z29vZy5vYmplY3QuUFJPVE9UWVBFX0ZJRUxEU19baV0sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJihlW29dPXJbb10pfX0sZ29vZy5vYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMT09dCYmZ29vZy5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIGdvb2cub2JqZWN0LmNyZWF0ZS5hcHBseShudWxsLGFyZ3VtZW50c1swXSk7aWYodCUyKXRocm93IEVycm9yKFwiVW5ldmVuIG51bWJlciBvZiBhcmd1bWVudHNcIik7Zm9yKHZhciBvPXt9LHI9MDtyPHQ7cis9MilvW2FyZ3VtZW50c1tyXV09YXJndW1lbnRzW3IrMV07cmV0dXJuIG99LGdvb2cub2JqZWN0LmNyZWF0ZVNldD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO2lmKDE9PXQmJmdvb2cuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiBnb29nLm9iamVjdC5jcmVhdGVTZXQuYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pO2Zvcih2YXIgbz17fSxyPTA7cjx0O3IrKylvW2FyZ3VtZW50c1tyXV09ITA7cmV0dXJuIG99LGdvb2cub2JqZWN0LmNyZWF0ZUltbXV0YWJsZVZpZXc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gT2JqZWN0LmlzRnJvemVuJiYhT2JqZWN0LmlzRnJvemVuKGUpJiYodD1PYmplY3QuY3JlYXRlKGUpLE9iamVjdC5mcmVlemUodCkpLHR9LGdvb2cub2JqZWN0LmlzSW1tdXRhYmxlVmlldz1mdW5jdGlvbihlKXtyZXR1cm4hIU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKGUpfSxnb29nLm9iamVjdC5nZXRBbGxQcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKGUsdCxvKXtpZighZSlyZXR1cm5bXTtpZighT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpcmV0dXJuIGdvb2cub2JqZWN0LmdldEtleXMoZSk7Zm9yKHZhciByPXt9O2UmJihlIT09T2JqZWN0LnByb3RvdHlwZXx8dCkmJihlIT09RnVuY3Rpb24ucHJvdG90eXBlfHxvKTspe2Zvcih2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPTA7aTxuLmxlbmd0aDtpKyspcltuW2ldXT0hMDtlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKX1yZXR1cm4gZ29vZy5vYmplY3QuZ2V0S2V5cyhyKX0sZ29vZy5vYmplY3QuZ2V0U3VwZXJDbGFzcz1mdW5jdGlvbihlKXtyZXR1cm4oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpKSYmZS5jb25zdHJ1Y3Rvcn0sZ29vZy5kZWJ1Zz17fSxnb29nLmRlYnVnLkVycm9yPWZ1bmN0aW9uKGUpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZ29vZy5kZWJ1Zy5FcnJvcik7ZWxzZXt2YXIgdD1FcnJvcigpLnN0YWNrO3QmJih0aGlzLnN0YWNrPXQpfWUmJih0aGlzLm1lc3NhZ2U9U3RyaW5nKGUpKSx0aGlzLnJlcG9ydEVycm9yVG9TZXJ2ZXI9ITB9LGdvb2cuaW5oZXJpdHMoZ29vZy5kZWJ1Zy5FcnJvcixFcnJvciksZ29vZy5kZWJ1Zy5FcnJvci5wcm90b3R5cGUubmFtZT1cIkN1c3RvbUVycm9yXCIsZ29vZy5kb209e30sZ29vZy5kb20uTm9kZVR5cGU9e0VMRU1FTlQ6MSxBVFRSSUJVVEU6MixURVhUOjMsQ0RBVEFfU0VDVElPTjo0LEVOVElUWV9SRUZFUkVOQ0U6NSxFTlRJVFk6NixQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOjcsQ09NTUVOVDo4LERPQ1VNRU5UOjksRE9DVU1FTlRfVFlQRToxMCxET0NVTUVOVF9GUkFHTUVOVDoxMSxOT1RBVElPTjoxMn0sZ29vZy5hc3NlcnRzPXt9LGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUz1nb29nLkRFQlVHLGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbihlLHQpe2dvb2cuZGVidWcuRXJyb3IuY2FsbCh0aGlzLGdvb2cuYXNzZXJ0cy5zdWJzXyhlLHQpKSx0aGlzLm1lc3NhZ2VQYXR0ZXJuPWV9LGdvb2cuaW5oZXJpdHMoZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yLGdvb2cuZGVidWcuRXJyb3IpLGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUubmFtZT1cIkFzc2VydGlvbkVycm9yXCIsZ29vZy5hc3NlcnRzLkRFRkFVTFRfRVJST1JfSEFORExFUj1mdW5jdGlvbihlKXt0aHJvdyBlfSxnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1nb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSLGdvb2cuYXNzZXJ0cy5zdWJzXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1cIlwiLHI9KGU9ZS5zcGxpdChcIiVzXCIpKS5sZW5ndGgtMSxuPTA7bjxyO24rKylvKz1lW25dKyhuPHQubGVuZ3RoP3Rbbl06XCIlc1wiKTtyZXR1cm4gbytlW3JdfSxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1cIkFzc2VydGlvbiBmYWlsZWRcIjtpZihvKXtuKz1cIjogXCIrbzt2YXIgaT1yfWVsc2UgZSYmKG4rPVwiOiBcIitlLGk9dCk7ZT1uZXcgZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yKFwiXCIrbixpfHxbXSksZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl8oZSl9LGdvb2cuYXNzZXJ0cy5zZXRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYoZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl89ZSl9LGdvb2cuYXNzZXJ0cy5hc3NlcnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFlJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIlwiLG51bGwsdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRFeGlzdHM9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJm51bGw9PWUmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgdG8gZXhpc3Q6ICVzLlwiLFtlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmZhaWw9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJmdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfKG5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJGYWlsdXJlXCIrKGU/XCI6IFwiK2U6XCJcIiksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9LGdvb2cuYXNzZXJ0cy5hc3NlcnROdW1iZXI9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzTnVtYmVyKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIG51bWJlciBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmc9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzU3RyaW5nKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIHN0cmluZyBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNGdW5jdGlvbihlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRPYmplY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzT2JqZWN0KGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRBcnJheT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNBcnJheShlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBhcnJheSBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRCb29sZWFuPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0Jvb2xlYW4oZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgYm9vbGVhbiBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRFbGVtZW50PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxnb29nLmlzT2JqZWN0KGUpJiZlLm5vZGVUeXBlPT1nb29nLmRvbS5Ob2RlVHlwZS5FTEVNRU5UfHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIEVsZW1lbnQgYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGUpLGVdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZj1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxlIGluc3RhbmNlb2YgdHx8Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBpbnN0YW5jZW9mICVzIGJ1dCBnb3QgJXMuXCIsW2dvb2cuYXNzZXJ0cy5nZXRUeXBlXyh0KSxnb29nLmFzc2VydHMuZ2V0VHlwZV8oZSldLG8sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0RmluaXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxcIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSl8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgJXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyIGJ1dCBpdCBpcyBub3QuXCIsW2VdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0T2JqZWN0UHJvdG90eXBlSXNJbnRhY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gT2JqZWN0LnByb3RvdHlwZSlnb29nLmFzc2VydHMuZmFpbChlK1wiIHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSBpbiBPYmplY3QucHJvdG90eXBlLlwiKX0sZ29vZy5hc3NlcnRzLmdldFR5cGVfPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb24/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxcInVua25vd24gdHlwZSBuYW1lXCI6ZSBpbnN0YW5jZW9mIE9iamVjdD9lLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxlLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTpudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZX07dmFyIGpzcGI9e0JpbmFyeUNvbnN0YW50czp7fSxDb25zdEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9LEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9fTtqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU9e0lOVkFMSUQ6LTEsRE9VQkxFOjEsRkxPQVQ6MixJTlQ2NDozLFVJTlQ2NDo0LElOVDMyOjUsRklYRUQ2NDo2LEZJWEVEMzI6NyxCT09MOjgsU1RSSU5HOjksR1JPVVA6MTAsTUVTU0FHRToxMSxCWVRFUzoxMixVSU5UMzI6MTMsRU5VTToxNCxTRklYRUQzMjoxNSxTRklYRUQ2NDoxNixTSU5UMzI6MTcsU0lOVDY0OjE4LEZIQVNINjQ6MzAsVkhBU0g2NDozMX0sanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU9e0lOVkFMSUQ6LTEsVkFSSU5UOjAsRklYRUQ2NDoxLERFTElNSVRFRDoyLFNUQVJUX0dST1VQOjMsRU5EX0dST1VQOjQsRklYRUQzMjo1fSxqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZSxvPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlO3N3aXRjaChlKXtjYXNlIHQuSU5UMzI6Y2FzZSB0LklOVDY0OmNhc2UgdC5VSU5UMzI6Y2FzZSB0LlVJTlQ2NDpjYXNlIHQuU0lOVDMyOmNhc2UgdC5TSU5UNjQ6Y2FzZSB0LkJPT0w6Y2FzZSB0LkVOVU06Y2FzZSB0LlZIQVNINjQ6cmV0dXJuIG8uVkFSSU5UO2Nhc2UgdC5ET1VCTEU6Y2FzZSB0LkZJWEVENjQ6Y2FzZSB0LlNGSVhFRDY0OmNhc2UgdC5GSEFTSDY0OnJldHVybiBvLkZJWEVENjQ7Y2FzZSB0LlNUUklORzpjYXNlIHQuTUVTU0FHRTpjYXNlIHQuQllURVM6cmV0dXJuIG8uREVMSU1JVEVEO2Nhc2UgdC5GTE9BVDpjYXNlIHQuRklYRUQzMjpjYXNlIHQuU0ZJWEVEMzI6cmV0dXJuIG8uRklYRUQzMjtkZWZhdWx0OnJldHVybiBvLklOVkFMSUR9fSxqc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUj0tMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX0VQUz0xNDAxMjk4NDY0MzI0ODE3ZS02MCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01JTj0xMTc1NDk0MzUwODIyMjg3NWUtNTQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVg9MzQwMjgyMzQ2NjM4NTI4ODZlMjIsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9FUFM9NWUtMzI0LGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUlOPTIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVg9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMD0xMDQ4NTc2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMz04Mzg4NjA4LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMT0yMTQ3NDgzNjQ4LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMj00Mjk0OTY3Mjk2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mj00NTAzNTk5NjI3MzcwNDk2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Mz0weDgwMDAwMDAwMDAwMDAwMDAsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0PTB4MTAwMDAwMDAwMDAwMDAwMDAsanNwYi5CaW5hcnlDb25zdGFudHMuWkVST19IQVNIPVwiXFwwXFwwXFwwXFwwXFwwXFwwXFwwXFwwXCIsZ29vZy5hcnJheT17fSxnb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTPWdvb2cuVFJVU1RFRF9TSVRFLGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlM9MjAxMjxnb29nLkZFQVRVUkVTRVRfWUVBUixnb29nLmFycmF5LnBlZWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19LGdvb2cuYXJyYXkubGFzdD1nb29nLmFycmF5LnBlZWssZ29vZy5hcnJheS5pbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuaW5kZXhPZik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2lmKG89bnVsbD09bz8wOjA+bz9NYXRoLm1heCgwLGUubGVuZ3RoK28pOm8sZ29vZy5pc1N0cmluZyhlKSlyZXR1cm4gZ29vZy5pc1N0cmluZyh0KSYmMT09dC5sZW5ndGg/ZS5pbmRleE9mKHQsbyk6LTE7Zm9yKDtvPGUubGVuZ3RoO28rKylpZihvIGluIGUmJmVbb109PT10KXJldHVybiBvO3JldHVybi0xfSxnb29nLmFycmF5Lmxhc3RJbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG51bGw9PW8/ZS5sZW5ndGgtMTpvKX06ZnVuY3Rpb24oZSx0LG8pe2lmKDA+KG89bnVsbD09bz9lLmxlbmd0aC0xOm8pJiYobz1NYXRoLm1heCgwLGUubGVuZ3RoK28pKSxnb29nLmlzU3RyaW5nKGUpKXJldHVybiBnb29nLmlzU3RyaW5nKHQpJiYxPT10Lmxlbmd0aD9lLmxhc3RJbmRleE9mKHQsbyk6LTE7Zm9yKDswPD1vO28tLSlpZihvIGluIGUmJmVbb109PT10KXJldHVybiBvO3JldHVybi0xfSxnb29nLmFycmF5LmZvckVhY2g9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKT9mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxpPTA7aTxyO2krKylpIGluIG4mJnQuY2FsbChvLG5baV0saSxlKX0sZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWUubGVuZ3RoLG49Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmU7Zm9yKC0tcjswPD1yOy0tcilyIGluIG4mJnQuY2FsbChvLG5bcl0scixlKX0sZ29vZy5hcnJheS5maWx0ZXI9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5maWx0ZXIpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPVtdLGk9MCxzPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGE9MDthPHI7YSsrKWlmKGEgaW4gcyl7dmFyIHA9c1thXTt0LmNhbGwobyxwLGEsZSkmJihuW2krK109cCl9cmV0dXJuIG59LGdvb2cuYXJyYXkubWFwPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubWFwKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1BcnJheShyKSxpPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLHM9MDtzPHI7cysrKXMgaW4gaSYmKG5bc109dC5jYWxsKG8saVtzXSxzLGUpKTtyZXR1cm4gbn0sZ29vZy5hcnJheS5yZWR1Y2U9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5yZWR1Y2UpP2Z1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxyJiYodD1nb29nLmJpbmQodCxyKSksQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49bztyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGUsKGZ1bmN0aW9uKG8saSl7bj10LmNhbGwocixuLG8saSxlKX0pKSxufSxnb29nLmFycmF5LnJlZHVjZVJpZ2h0PWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpP2Z1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPXQpLHImJih0PWdvb2cuYmluZCh0LHIpKSxBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPW87cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaFJpZ2h0KGUsKGZ1bmN0aW9uKG8saSl7bj10LmNhbGwocixuLG8saSxlKX0pKSxufSxnb29nLmFycmF5LnNvbWU9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5zb21lKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPWUubGVuZ3RoLG49Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUsaT0wO2k8cjtpKyspaWYoaSBpbiBuJiZ0LmNhbGwobyxuW2ldLGksZSkpcmV0dXJuITA7cmV0dXJuITF9LGdvb2cuYXJyYXkuZXZlcnk9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5ldmVyeSk/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxpPTA7aTxyO2krKylpZihpIGluIG4mJiF0LmNhbGwobyxuW2ldLGksZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cuYXJyYXkuY291bnQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTA7cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChlLChmdW5jdGlvbihlLG4saSl7dC5jYWxsKG8sZSxuLGkpJiYrK3J9KSxvKSxyfSxnb29nLmFycmF5LmZpbmQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPih0PWdvb2cuYXJyYXkuZmluZEluZGV4KGUsdCxvKSk/bnVsbDpnb29nLmlzU3RyaW5nKGUpP2UuY2hhckF0KHQpOmVbdF19LGdvb2cuYXJyYXkuZmluZEluZGV4PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxpPTA7aTxyO2krKylpZihpIGluIG4mJnQuY2FsbChvLG5baV0saSxlKSlyZXR1cm4gaTtyZXR1cm4tMX0sZ29vZy5hcnJheS5maW5kUmlnaHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPih0PWdvb2cuYXJyYXkuZmluZEluZGV4UmlnaHQoZSx0LG8pKT9udWxsOmdvb2cuaXNTdHJpbmcoZSk/ZS5jaGFyQXQodCk6ZVt0XX0sZ29vZy5hcnJheS5maW5kSW5kZXhSaWdodD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZTtmb3IoLS1yOzA8PXI7ci0tKWlmKHIgaW4gbiYmdC5jYWxsKG8sbltyXSxyLGUpKXJldHVybiByO3JldHVybi0xfSxnb29nLmFycmF5LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8PWdvb2cuYXJyYXkuaW5kZXhPZihlLHQpfSxnb29nLmFycmF5LmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUubGVuZ3RofSxnb29nLmFycmF5LmNsZWFyPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzQXJyYXkoZSkpZm9yKHZhciB0PWUubGVuZ3RoLTE7MDw9dDt0LS0pZGVsZXRlIGVbdF07ZS5sZW5ndGg9MH0sZ29vZy5hcnJheS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtnb29nLmFycmF5LmNvbnRhaW5zKGUsdCl8fGUucHVzaCh0KX0sZ29vZy5hcnJheS5pbnNlcnRBdD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hcnJheS5zcGxpY2UoZSxvLDAsdCl9LGdvb2cuYXJyYXkuaW5zZXJ0QXJyYXlBdD1mdW5jdGlvbihlLHQsbyl7Z29vZy5wYXJ0aWFsKGdvb2cuYXJyYXkuc3BsaWNlLGUsbywwKS5hcHBseShudWxsLHQpfSxnb29nLmFycmF5Lmluc2VydEJlZm9yZT1mdW5jdGlvbihlLHQsbyl7dmFyIHI7Mj09YXJndW1lbnRzLmxlbmd0aHx8MD4ocj1nb29nLmFycmF5LmluZGV4T2YoZSxvKSk/ZS5wdXNoKHQpOmdvb2cuYXJyYXkuaW5zZXJ0QXQoZSx0LHIpfSxnb29nLmFycmF5LnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBvO3JldHVybihvPTA8PSh0PWdvb2cuYXJyYXkuaW5kZXhPZihlLHQpKSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KSxvfSxnb29nLmFycmF5LnJlbW92ZUxhc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDw9KHQ9Z29vZy5hcnJheS5sYXN0SW5kZXhPZihlLHQpKSYmKGdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KSwhMCl9LGdvb2cuYXJyYXkucmVtb3ZlQXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksMT09QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGUsdCwxKS5sZW5ndGh9LGdvb2cuYXJyYXkucmVtb3ZlSWY9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPD0odD1nb29nLmFycmF5LmZpbmRJbmRleChlLHQsbykpJiYoZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLCEwKX0sZ29vZy5hcnJheS5yZW1vdmVBbGxJZj1mdW5jdGlvbihlLHQsbyl7dmFyIHI9MDtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQoZSwoZnVuY3Rpb24obixpKXt0LmNhbGwobyxuLGksZSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSxpKSYmcisrfSkpLHJ9LGdvb2cuYXJyYXkuY29uY2F0PWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9LGdvb2cuYXJyYXkuam9pbj1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhcmd1bWVudHMpfSxnb29nLmFycmF5LnRvQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoMDx0KXtmb3IodmFyIG89QXJyYXkodCkscj0wO3I8dDtyKyspb1tyXT1lW3JdO3JldHVybiBvfXJldHVybltdfSxnb29nLmFycmF5LmNsb25lPWdvb2cuYXJyYXkudG9BcnJheSxnb29nLmFycmF5LmV4dGVuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspe3ZhciByPWFyZ3VtZW50c1tvXTtpZihnb29nLmlzQXJyYXlMaWtlKHIpKXt2YXIgbj1lLmxlbmd0aHx8MCxpPXIubGVuZ3RofHwwO2UubGVuZ3RoPW4raTtmb3IodmFyIHM9MDtzPGk7cysrKWVbbitzXT1yW3NdfWVsc2UgZS5wdXNoKHIpfX0sZ29vZy5hcnJheS5zcGxpY2U9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoZSxnb29nLmFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSl9LGdvb2cuYXJyYXkuc2xpY2U9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSwyPj1hcmd1bWVudHMubGVuZ3RoP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0LG8pfSxnb29nLmFycmF5LnJlbW92ZUR1cGxpY2F0ZXM9ZnVuY3Rpb24oZSx0LG8pe3Q9dHx8ZTt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pc09iamVjdChlKT9cIm9cIitnb29nLmdldFVpZChlKToodHlwZW9mIGUpLmNoYXJBdCgwKStlfTtvPW98fHIscj17fTtmb3IodmFyIG49MCxpPTA7aTxlLmxlbmd0aDspe3ZhciBzPWVbaSsrXSxhPW8ocyk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSl8fChyW2FdPSEwLHRbbisrXT1zKX10Lmxlbmd0aD1ufSxnb29nLmFycmF5LmJpbmFyeVNlYXJjaD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXyhlLG98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUsITEsdCl9LGdvb2cuYXJyYXkuYmluYXJ5U2VsZWN0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfKGUsdCwhMCx2b2lkIDAsbyl9LGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXz1mdW5jdGlvbihlLHQsbyxyLG4pe2Zvcih2YXIgaSxzPTAsYT1lLmxlbmd0aDtzPGE7KXt2YXIgcD1zK2E+PjEsZz1vP3QuY2FsbChuLGVbcF0scCxlKTp0KHIsZVtwXSk7MDxnP3M9cCsxOihhPXAsaT0hZyl9cmV0dXJuIGk/czp+c30sZ29vZy5hcnJheS5zb3J0PWZ1bmN0aW9uKGUsdCl7ZS5zb3J0KHR8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUpfSxnb29nLmFycmF5LnN0YWJsZVNvcnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89QXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKylvW3JdPXtpbmRleDpyLHZhbHVlOmVbcl19O3ZhciBuPXR8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Zm9yKGdvb2cuYXJyYXkuc29ydChvLChmdW5jdGlvbihlLHQpe3JldHVybiBuKGUudmFsdWUsdC52YWx1ZSl8fGUuaW5kZXgtdC5pbmRleH0pKSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT1vW3JdLnZhbHVlfSxnb29nLmFycmF5LnNvcnRCeUtleT1mdW5jdGlvbihlLHQsbyl7dmFyIHI9b3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtnb29nLmFycmF5LnNvcnQoZSwoZnVuY3Rpb24oZSxvKXtyZXR1cm4gcih0KGUpLHQobykpfSkpfSxnb29nLmFycmF5LnNvcnRPYmplY3RzQnlLZXk9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXJyYXkuc29ydEJ5S2V5KGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSksbyl9LGdvb2cuYXJyYXkuaXNTb3J0ZWQ9ZnVuY3Rpb24oZSx0LG8pe3Q9dHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dChlW3ItMV0sZVtyXSk7aWYoMDxufHwwPT1uJiZvKXJldHVybiExfXJldHVybiEwfSxnb29nLmFycmF5LmVxdWFscz1mdW5jdGlvbihlLHQsbyl7aWYoIWdvb2cuaXNBcnJheUxpa2UoZSl8fCFnb29nLmlzQXJyYXlMaWtlKHQpfHxlLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7dmFyIHI9ZS5sZW5ndGg7bz1vfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlRXF1YWxpdHk7Zm9yKHZhciBuPTA7bjxyO24rKylpZighbyhlW25dLHRbbl0pKXJldHVybiExO3JldHVybiEwfSxnb29nLmFycmF5LmNvbXBhcmUzPWZ1bmN0aW9uKGUsdCxvKXtvPW98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Zm9yKHZhciByPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxuPTA7bjxyO24rKyl7dmFyIGk9byhlW25dLHRbbl0pO2lmKDAhPWkpcmV0dXJuIGl9cmV0dXJuIGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUoZS5sZW5ndGgsdC5sZW5ndGgpfSxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+dD8xOmU8dD8tMTowfSxnb29nLmFycmF5LmludmVyc2VEZWZhdWx0Q29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybi1nb29nLmFycmF5LmRlZmF1bHRDb21wYXJlKGUsdCl9LGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dH0sZ29vZy5hcnJheS5iaW5hcnlJbnNlcnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPihvPWdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoKGUsdCxvKSkmJihnb29nLmFycmF5Lmluc2VydEF0KGUsdCwtKG8rMSkpLCEwKX0sZ29vZy5hcnJheS5iaW5hcnlSZW1vdmU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPD0odD1nb29nLmFycmF5LmJpbmFyeVNlYXJjaChlLHQsbykpJiZnb29nLmFycmF5LnJlbW92ZUF0KGUsdCl9LGdvb2cuYXJyYXkuYnVja2V0PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dLHM9dC5jYWxsKG8saSxuLGUpO2dvb2cuaXNEZWYocykmJihyW3NdfHwocltzXT1bXSkpLnB1c2goaSl9cmV0dXJuIHJ9LGdvb2cuYXJyYXkudG9PYmplY3Q9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPXt9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24obixpKXtyW3QuY2FsbChvLG4saSxlKV09bn0pKSxyfSxnb29nLmFycmF5LnJhbmdlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1bXSxuPTAsaT1lO2lmKHZvaWQgMCE9PXQmJihuPWUsaT10KSwwPihvPW98fDEpKihpLW4pKXJldHVybltdO2lmKDA8bylmb3IoZT1uO2U8aTtlKz1vKXIucHVzaChlKTtlbHNlIGZvcihlPW47ZT5pO2UrPW8pci5wdXNoKGUpO3JldHVybiByfSxnb29nLmFycmF5LnJlcGVhdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxyPTA7cjx0O3IrKylvW3JdPWU7cmV0dXJuIG99LGdvb2cuYXJyYXkuZmxhdHRlbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe3ZhciByPWFyZ3VtZW50c1tvXTtpZihnb29nLmlzQXJyYXkocikpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKz04MTkyKXt2YXIgaT1nb29nLmFycmF5LnNsaWNlKHIsbixuKzgxOTIpO2k9Z29vZy5hcnJheS5mbGF0dGVuLmFwcGx5KG51bGwsaSk7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKGlbc10pfWVsc2UgdC5wdXNoKHIpfXJldHVybiB0fSxnb29nLmFycmF5LnJvdGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxlLmxlbmd0aCYmKDA8KHQlPWUubGVuZ3RoKT9BcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShlLGUuc3BsaWNlKC10LHQpKTowPnQmJkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUsZS5zcGxpY2UoMCwtdCkpKSxlfSxnb29nLmFycmF5Lm1vdmVJdGVtPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8ZS5sZW5ndGgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9byYmbzxlLmxlbmd0aCksdD1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoZSx0LDEpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChlLG8sMCx0WzBdKX0sZ29vZy5hcnJheS56aXA9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciB0PVtdLG89YXJndW1lbnRzWzBdLmxlbmd0aCxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylhcmd1bWVudHNbcl0ubGVuZ3RoPG8mJihvPWFyZ3VtZW50c1tyXS5sZW5ndGgpO2ZvcihyPTA7cjxvO3IrKyl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW4ucHVzaChhcmd1bWVudHNbaV1bcl0pO3QucHVzaChuKX1yZXR1cm4gdH0sZ29vZy5hcnJheS5zaHVmZmxlPWZ1bmN0aW9uKGUsdCl7dD10fHxNYXRoLnJhbmRvbTtmb3IodmFyIG89ZS5sZW5ndGgtMTswPG87by0tKXt2YXIgcj1NYXRoLmZsb29yKHQoKSoobysxKSksbj1lW29dO2Vbb109ZVtyXSxlW3JdPW59fSxnb29nLmFycmF5LmNvcHlCeUluZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG89W107cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtvLnB1c2goZVt0XSl9KSksb30sZ29vZy5hcnJheS5jb25jYXRNYXA9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFycmF5LmNvbmNhdC5hcHBseShbXSxnb29nLmFycmF5Lm1hcChlLHQsbykpfSxnb29nLmNyeXB0PXt9LGdvb2cuY3J5cHQuc3RyaW5nVG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckNvZGVBdChyKTsyNTU8biYmKHRbbysrXT0yNTUmbixuPj49OCksdFtvKytdPW59cmV0dXJuIHR9LGdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmc9ZnVuY3Rpb24oZSl7aWYoODE5Mj49ZS5sZW5ndGgpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIHQ9XCJcIixvPTA7bzxlLmxlbmd0aDtvKz04MTkyKXt2YXIgcj1nb29nLmFycmF5LnNsaWNlKGUsbyxvKzgxOTIpO3QrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyKX1yZXR1cm4gdH0sZ29vZy5jcnlwdC5ieXRlQXJyYXlUb0hleD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFycmF5Lm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gMTwoZT1lLnRvU3RyaW5nKDE2KSkubGVuZ3RoP2U6XCIwXCIrZX0pKS5qb2luKHR8fFwiXCIpfSxnb29nLmNyeXB0LmhleFRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMD09ZS5sZW5ndGglMixcIktleSBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiKTtmb3IodmFyIHQ9W10sbz0wO288ZS5sZW5ndGg7bys9Mil0LnB1c2gocGFyc2VJbnQoZS5zdWJzdHJpbmcobyxvKzIpLDE2KSk7cmV0dXJuIHR9LGdvb2cuY3J5cHQuc3RyaW5nVG9VdGY4Qnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7MTI4Pm4/dFtvKytdPW46KDIwNDg+bj90W28rK109bj4+NnwxOTI6KDU1Mjk2PT0oNjQ1MTImbikmJnIrMTxlLmxlbmd0aCYmNTYzMjA9PSg2NDUxMiZlLmNoYXJDb2RlQXQocisxKSk/KG49NjU1MzYrKCgxMDIzJm4pPDwxMCkrKDEwMjMmZS5jaGFyQ29kZUF0KCsrcikpLHRbbysrXT1uPj4xOHwyNDAsdFtvKytdPW4+PjEyJjYzfDEyOCk6dFtvKytdPW4+PjEyfDIyNCx0W28rK109bj4+NiY2M3wxMjgpLHRbbysrXT02MyZufDEyOCl9cmV0dXJuIHR9LGdvb2cuY3J5cHQudXRmOEJ5dGVBcnJheVRvU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTAscj0wO288ZS5sZW5ndGg7KXt2YXIgbj1lW28rK107aWYoMTI4Pm4pdFtyKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobik7ZWxzZSBpZigxOTE8biYmMjI0Pm4pe3ZhciBpPWVbbysrXTt0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmbik8PDZ8NjMmaSl9ZWxzZSBpZigyMzk8biYmMzY1Pm4pe2k9ZVtvKytdO3ZhciBzPWVbbysrXTtuPSgoNyZuKTw8MTh8KDYzJmkpPDwxMnwoNjMmcyk8PDZ8NjMmZVtvKytdKS02NTUzNix0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisobj4+MTApKSx0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZuKSl9ZWxzZSBpPWVbbysrXSxzPWVbbysrXSx0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmbik8PDEyfCg2MyZpKTw8Nnw2MyZzKX1yZXR1cm4gdC5qb2luKFwiXCIpfSxnb29nLmNyeXB0LnhvckJ5dGVBcnJheT1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZS5sZW5ndGg9PXQubGVuZ3RoLFwiWE9SIGFycmF5IGxlbmd0aHMgbXVzdCBtYXRjaFwiKTtmb3IodmFyIG89W10scj0wO3I8ZS5sZW5ndGg7cisrKW8ucHVzaChlW3JdXnRbcl0pO3JldHVybiBvfSxnb29nLmRvbS5hc3NlcnRzPXt9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbj1mdW5jdGlvbihlKXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciB0PWdvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93XyhlKTt0JiYoIWV8fCEoZSBpbnN0YW5jZW9mIHQuTG9jYXRpb24pJiZlIGluc3RhbmNlb2YgdC5FbGVtZW50KSYmZ29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSBMb2NhdGlvbiAob3IgYSBub24tRWxlbWVudCBtb2NrKTsgZ290OiAlc1wiLGdvb2cuZG9tLmFzc2VydHMuZGVidWdTdHJpbmdGb3JUeXBlXyhlKSl9cmV0dXJuIGV9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV89ZnVuY3Rpb24oZSx0KXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciBvPWdvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93XyhlKTtvJiZ2b2lkIDAhPT1vW3RdJiYoZSYmKGUgaW5zdGFuY2VvZiBvW3RdfHwhKGUgaW5zdGFuY2VvZiBvLkxvY2F0aW9ufHxlIGluc3RhbmNlb2Ygby5FbGVtZW50KSl8fGdvb2cuYXNzZXJ0cy5mYWlsKFwiQXJndW1lbnQgaXMgbm90IGEgJXMgKG9yIGEgbm9uLUVsZW1lbnQsIG5vbi1Mb2NhdGlvbiBtb2NrKTsgZ290OiAlc1wiLHQsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGUpKSl9cmV0dXJuIGV9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQW5jaG9yRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEFuY2hvckVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQnV0dG9uRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEJ1dHRvbkVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MTGlua0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxMaW5rRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJbWFnZUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQXVkaW9FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQXVkaW9FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFZpZGVvRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTFZpZGVvRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbnB1dEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJbnB1dEVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVGV4dEFyZWFFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MVGV4dEFyZWFFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxDYW52YXNFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEVtYmVkRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEVtYmVkRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGb3JtRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEZvcm1FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZyYW1lRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEZyYW1lRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MSUZyYW1lRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxPYmplY3RFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MT2JqZWN0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MU2NyaXB0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzT2JqZWN0KGUpKXJldHVybiB2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6bnVsbD09PWU/XCJudWxsXCI6dHlwZW9mIGU7dHJ5e3JldHVybiBlLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxlLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1jYXRjaChlKXtyZXR1cm5cIjxvYmplY3QgY291bGQgbm90IGJlIHN0cmluZ2lmaWVkPlwifX0sZ29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfPWZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1lJiZlLm93bmVyRG9jdW1lbnQsbz10JiYodC5kZWZhdWx0Vmlld3x8dC5wYXJlbnRXaW5kb3cpO2lmKChvPW98fGdvb2cuZ2xvYmFsKS5FbGVtZW50JiZvLkxvY2F0aW9uKXJldHVybiBvfWNhdGNoKGUpe31yZXR1cm4gbnVsbH0sZ29vZy5mdW5jdGlvbnM9e30sZ29vZy5mdW5jdGlvbnMuY29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5GQUxTRT1mdW5jdGlvbigpe3JldHVybiExfSxnb29nLmZ1bmN0aW9ucy5UUlVFPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGdvb2cuZnVuY3Rpb25zLk5VTEw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ29vZy5mdW5jdGlvbnMuaWRlbnRpdHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sZ29vZy5mdW5jdGlvbnMuZXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoZSl9fSxnb29nLmZ1bmN0aW9ucy5mYWlsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IGV9fSxnb29nLmZ1bmN0aW9ucy5sb2NrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8MCxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAsdCkpfX0sZ29vZy5mdW5jdGlvbnMubnRoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbZV19fSxnb29nLmZ1bmN0aW9ucy5wYXJ0aWFsUmlnaHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsbyksZS5hcHBseSh0aGlzLHQpfX0sZ29vZy5mdW5jdGlvbnMud2l0aFJldHVyblZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuZnVuY3Rpb25zLnNlcXVlbmNlKGUsZ29vZy5mdW5jdGlvbnMuY29uc3RhbnQodCkpfSxnb29nLmZ1bmN0aW9ucy5lcXVhbFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiB0P2U9PW86ZT09PW99fSxnb29nLmZ1bmN0aW9ucy5jb21wb3NlPWZ1bmN0aW9uKGUsdCl7dmFyIG89YXJndW1lbnRzLHI9by5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU7ciYmKGU9b1tyLTFdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7Zm9yKHZhciB0PXItMjswPD10O3QtLSllPW9bdF0uY2FsbCh0aGlzLGUpO3JldHVybiBlfX0sZ29vZy5mdW5jdGlvbnMuc2VxdWVuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLG89dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlLHI9MDtyPG87cisrKWU9dFtyXS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5hbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLG89dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxvO2UrKylpZighdFtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITE7cmV0dXJuITB9fSxnb29nLmZ1bmN0aW9ucy5vcj1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG87ZSsrKWlmKHRbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybiEwO3JldHVybiExfX0sZ29vZy5mdW5jdGlvbnMubm90PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGdvb2cuZnVuY3Rpb25zLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBvPWZ1bmN0aW9uKCl7fTtyZXR1cm4gby5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbz1uZXcgbyxlLmFwcGx5KG8sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSxvfSxnb29nLmZ1bmN0aW9ucy5DQUNIRV9SRVRVUk5fVkFMVUU9ITAsZ29vZy5mdW5jdGlvbnMuY2FjaGVSZXR1cm5WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdCxvPSExO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnb29nLmZ1bmN0aW9ucy5DQUNIRV9SRVRVUk5fVkFMVUU/KG98fCh0PWUoKSxvPSEwKSx0KTplKCl9fSxnb29nLmZ1bmN0aW9ucy5vbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCl7dmFyIGU9dDt0PW51bGwsZSgpfX19LGdvb2cuZnVuY3Rpb25zLmRlYm91bmNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbihuKXtnb29nLmdsb2JhbC5jbGVhclRpbWVvdXQocik7dmFyIGk9YXJndW1lbnRzO3I9Z29vZy5nbG9iYWwuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmFwcGx5KG8saSl9KSx0KX19LGdvb2cuZnVuY3Rpb25zLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wLG49ITEsaT1bXSxzPWZ1bmN0aW9uKCl7cj0wLG4mJihuPSExLGEoKSl9LGE9ZnVuY3Rpb24oKXtyPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQocyx0KSxlLmFwcGx5KG8saSl9O3JldHVybiBmdW5jdGlvbihlKXtpPWFyZ3VtZW50cyxyP249ITA6YSgpfX0sZ29vZy5mdW5jdGlvbnMucmF0ZUxpbWl0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wLG49ZnVuY3Rpb24oKXtyPTB9O3JldHVybiBmdW5jdGlvbihpKXtyfHwocj1nb29nLmdsb2JhbC5zZXRUaW1lb3V0KG4sdCksZS5hcHBseShvLGFyZ3VtZW50cykpfX0sZ29vZy5kb20uSHRtbEVsZW1lbnQ9ZnVuY3Rpb24oKXt9LGdvb2cuZG9tLlRhZ05hbWU9ZnVuY3Rpb24oZSl7dGhpcy50YWdOYW1lXz1lfSxnb29nLmRvbS5UYWdOYW1lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWVffSxnb29nLmRvbS5UYWdOYW1lLkE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBXCIpLGdvb2cuZG9tLlRhZ05hbWUuQUJCUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFCQlJcIiksZ29vZy5kb20uVGFnTmFtZS5BQ1JPTllNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUNST05ZTVwiKSxnb29nLmRvbS5UYWdOYW1lLkFERFJFU1M9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBRERSRVNTXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVBQTEVUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVBQTEVUXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVJFQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFSRUFcIiksZ29vZy5kb20uVGFnTmFtZS5BUlRJQ0xFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVJUSUNMRVwiKSxnb29nLmRvbS5UYWdOYW1lLkFTSURFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVNJREVcIiksZ29vZy5kb20uVGFnTmFtZS5BVURJTz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFVRElPXCIpLGdvb2cuZG9tLlRhZ05hbWUuQj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJcIiksZ29vZy5kb20uVGFnTmFtZS5CQVNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRVwiKSxnb29nLmRvbS5UYWdOYW1lLkJBU0VGT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRUZPTlRcIiksZ29vZy5kb20uVGFnTmFtZS5CREk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRElcIiksZ29vZy5kb20uVGFnTmFtZS5CRE89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRE9cIiksZ29vZy5kb20uVGFnTmFtZS5CSUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCSUdcIiksZ29vZy5kb20uVGFnTmFtZS5CTE9DS1FVT1RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkxPQ0tRVU9URVwiKSxnb29nLmRvbS5UYWdOYW1lLkJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCT0RZXCIpLGdvb2cuZG9tLlRhZ05hbWUuQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCUlwiKSxnb29nLmRvbS5UYWdOYW1lLkJVVFRPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJVVFRPTlwiKSxnb29nLmRvbS5UYWdOYW1lLkNBTlZBUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBTlZBU1wiKSxnb29nLmRvbS5UYWdOYW1lLkNBUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDQVBUSU9OXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0VOVEVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0VOVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0lURT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNJVEVcIiksZ29vZy5kb20uVGFnTmFtZS5DT0RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09ERVwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNPTFwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MR1JPVVBcIiksZ29vZy5kb20uVGFnTmFtZS5DT01NQU5EPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09NTUFORFwiKSxnb29nLmRvbS5UYWdOYW1lLkRBVEE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJEQVRBXCIpLGdvb2cuZG9tLlRhZ05hbWUuREFUQUxJU1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJEQVRBTElTVFwiKSxnb29nLmRvbS5UYWdOYW1lLkREPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRERcIiksZ29vZy5kb20uVGFnTmFtZS5ERUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERUxcIiksZ29vZy5kb20uVGFnTmFtZS5ERVRBSUxTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREVUQUlMU1wiKSxnb29nLmRvbS5UYWdOYW1lLkRGTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRGTlwiKSxnb29nLmRvbS5UYWdOYW1lLkRJQUxPRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJQUxPR1wiKSxnb29nLmRvbS5UYWdOYW1lLkRJUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJUlwiKSxnb29nLmRvbS5UYWdOYW1lLkRJVj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJVlwiKSxnb29nLmRvbS5UYWdOYW1lLkRMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRExcIiksZ29vZy5kb20uVGFnTmFtZS5EVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRUXCIpLGdvb2cuZG9tLlRhZ05hbWUuRU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJFTVwiKSxnb29nLmRvbS5UYWdOYW1lLkVNQkVEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRU1CRURcIiksZ29vZy5kb20uVGFnTmFtZS5GSUVMRFNFVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJRUxEU0VUXCIpLGdvb2cuZG9tLlRhZ05hbWUuRklHQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJR0NBUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5GSUdVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGSUdVUkVcIiksZ29vZy5kb20uVGFnTmFtZS5GT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9OVFwiKSxnb29nLmRvbS5UYWdOYW1lLkZPT1RFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPT1RFUlwiKSxnb29nLmRvbS5UYWdOYW1lLkZPUk09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT1JNXCIpLGdvb2cuZG9tLlRhZ05hbWUuRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVwiKSxnb29nLmRvbS5UYWdOYW1lLkZSQU1FU0VUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRlJBTUVTRVRcIiksZ29vZy5kb20uVGFnTmFtZS5IMT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgxXCIpLGdvb2cuZG9tLlRhZ05hbWUuSDI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIMlwiKSxnb29nLmRvbS5UYWdOYW1lLkgzPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDNcIiksZ29vZy5kb20uVGFnTmFtZS5IND1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg0XCIpLGdvb2cuZG9tLlRhZ05hbWUuSDU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINVwiKSxnb29nLmRvbS5UYWdOYW1lLkg2PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDZcIiksZ29vZy5kb20uVGFnTmFtZS5IRUFEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBRFwiKSxnb29nLmRvbS5UYWdOYW1lLkhFQURFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhFQURFUlwiKSxnb29nLmRvbS5UYWdOYW1lLkhHUk9VUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLkhSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSFJcIiksZ29vZy5kb20uVGFnTmFtZS5IVE1MPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSFRNTFwiKSxnb29nLmRvbS5UYWdOYW1lLkk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJXCIpLGdvb2cuZG9tLlRhZ05hbWUuSUZSQU1FPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSUZSQU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU1HPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU1HXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU5QVVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTlBVVFwiKSxnb29nLmRvbS5UYWdOYW1lLklOUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklOU1wiKSxnb29nLmRvbS5UYWdOYW1lLklTSU5ERVg9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJU0lOREVYXCIpLGdvb2cuZG9tLlRhZ05hbWUuS0JEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiS0JEXCIpLGdvb2cuZG9tLlRhZ05hbWUuS0VZR0VOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiS0VZR0VOXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEFCRUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMQUJFTFwiKSxnb29nLmRvbS5UYWdOYW1lLkxFR0VORD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxFR0VORFwiKSxnb29nLmRvbS5UYWdOYW1lLkxJPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElcIiksZ29vZy5kb20uVGFnTmFtZS5MSU5LPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElOS1wiKSxnb29nLmRvbS5UYWdOYW1lLk1BSU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQUlOXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFQXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFSSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BUktcIiksZ29vZy5kb20uVGFnTmFtZS5NQVRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFUSFwiKSxnb29nLmRvbS5UYWdOYW1lLk1FTlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVOVUlURU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VSVRFTVwiKSxnb29nLmRvbS5UYWdOYW1lLk1FVEE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRBXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVURVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRFUlwiKSxnb29nLmRvbS5UYWdOYW1lLk5BVj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5BVlwiKSxnb29nLmRvbS5UYWdOYW1lLk5PRlJBTUVTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9GUkFNRVNcIiksZ29vZy5kb20uVGFnTmFtZS5OT1NDUklQVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5PU0NSSVBUXCIpLGdvb2cuZG9tLlRhZ05hbWUuT0JKRUNUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT0JKRUNUXCIpLGdvb2cuZG9tLlRhZ05hbWUuT0w9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPTFwiKSxnb29nLmRvbS5UYWdOYW1lLk9QVEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT1BUR1JPVVBcIiksZ29vZy5kb20uVGFnTmFtZS5PUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5PVVRQVVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPVVRQVVRcIiksZ29vZy5kb20uVGFnTmFtZS5QPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFwiKSxnb29nLmRvbS5UYWdOYW1lLlBBUkFNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUEFSQU1cIiksZ29vZy5kb20uVGFnTmFtZS5QSUNUVVJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUElDVFVSRVwiKSxnb29nLmRvbS5UYWdOYW1lLlBSRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBSRVwiKSxnb29nLmRvbS5UYWdOYW1lLlBST0dSRVNTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFJPR1JFU1NcIiksZ29vZy5kb20uVGFnTmFtZS5RPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUVwiKSxnb29nLmRvbS5UYWdOYW1lLlJQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlBcIiksZ29vZy5kb20uVGFnTmFtZS5SVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJUXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlRDPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRDXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlVCWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJVQllcIiksZ29vZy5kb20uVGFnTmFtZS5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1wiKSxnb29nLmRvbS5UYWdOYW1lLlNBTVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTQU1QXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0NSSVBUXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0VDVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNFQ1RJT05cIiksZ29vZy5kb20uVGFnTmFtZS5TRUxFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTRUxFQ1RcIiksZ29vZy5kb20uVGFnTmFtZS5TTUFMTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNNQUxMXCIpLGdvb2cuZG9tLlRhZ05hbWUuU09VUkNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU09VUkNFXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1BBTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNQQU5cIiksZ29vZy5kb20uVGFnTmFtZS5TVFJJS0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJJS0VcIiksZ29vZy5kb20uVGFnTmFtZS5TVFJPTkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJPTkdcIiksZ29vZy5kb20uVGFnTmFtZS5TVFlMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUWUxFXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1VCPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VCXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1VNTUFSWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVTU1BUllcIiksZ29vZy5kb20uVGFnTmFtZS5TVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVVBcIiksZ29vZy5kb20uVGFnTmFtZS5TVkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVkdcIiksZ29vZy5kb20uVGFnTmFtZS5UQUJMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRBQkxFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUQk9EWVwiKSxnb29nLmRvbS5UYWdOYW1lLlREPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVERcIiksZ29vZy5kb20uVGFnTmFtZS5URU1QTEFURT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRFTVBMQVRFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEVYVEFSRUE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURVhUQVJFQVwiKSxnb29nLmRvbS5UYWdOYW1lLlRGT09UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEZPT1RcIiksZ29vZy5kb20uVGFnTmFtZS5USD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRIXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEhFQUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSEVBRFwiKSxnb29nLmRvbS5UYWdOYW1lLlRJTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuVElUTEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSVRMRVwiKSxnb29nLmRvbS5UYWdOYW1lLlRSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFJcIiksZ29vZy5kb20uVGFnTmFtZS5UUkFDSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRSQUNLXCIpLGdvb2cuZG9tLlRhZ05hbWUuVFQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUVFwiKSxnb29nLmRvbS5UYWdOYW1lLlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVXCIpLGdvb2cuZG9tLlRhZ05hbWUuVUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVTFwiKSxnb29nLmRvbS5UYWdOYW1lLlZBUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlZBUlwiKSxnb29nLmRvbS5UYWdOYW1lLlZJREVPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVklERU9cIiksZ29vZy5kb20uVGFnTmFtZS5XQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJXQlJcIiksZ29vZy5kb20udGFncz17fSxnb29nLmRvbS50YWdzLlZPSURfVEFHU189e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxnb29nLmRvbS50YWdzLmlzVm9pZFRhZz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWdvb2cuZG9tLnRhZ3MuVk9JRF9UQUdTX1tlXX0sZ29vZy5odG1sPXt9LGdvb2cuaHRtbC50cnVzdGVkdHlwZXM9e30sZ29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNodG1sXCIpOm51bGwsZ29vZy5zdHJpbmc9e30sZ29vZy5zdHJpbmcuVHlwZWRTdHJpbmc9ZnVuY3Rpb24oKXt9LGdvb2cuc3RyaW5nLkNvbnN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfPWU9PT1nb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXyYmdHx8XCJcIix0aGlzLlNUUklOR19DT05TVF9UWVBFX01BUktFUl9fR09PR19TVFJJTkdfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5zdHJpbmcuQ29uc3QuVFlQRV9NQVJLRVJffSxnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV99LGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ29uc3R7XCIrdGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfK1wifVwifSxnb29nLnN0cmluZy5Db25zdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuc3RyaW5nLkNvbnN0JiZlLlNUUklOR19DT05TVF9UWVBFX01BUktFUl9fR09PR19TVFJJTkdfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl8/ZS5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIENvbnN0LCBnb3QgJ1wiK2UrXCInXCIpLFwidHlwZV9lcnJvcjpDb25zdFwiKX0sZ29vZy5zdHJpbmcuQ29uc3QuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGdvb2cuc3RyaW5nLkNvbnN0KGdvb2cuc3RyaW5nLkNvbnN0LkdPT0dfU1RSSU5HX0NPTlNUUlVDVE9SX1RPS0VOX1BSSVZBVEVfLGUpfSxnb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl89e30sZ29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV89e30sZ29vZy5zdHJpbmcuQ29uc3QuRU1QVFk9Z29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIlwiKSxnb29nLmh0bWwuU2FmZVNjcmlwdD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU0NSSVBUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVNjcmlwdC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVNjcmlwdC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVNjcmlwdC5FTVBUWTpnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Db25zdGFudEFuZEFyZ3M9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspby5wdXNoKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIihcIitnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkrXCIpKFwiK28uam9pbihcIiwgXCIpK1wiKTtcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Kc29uPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5XyhlKSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVNjcmlwdHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXBUcnVzdGVkU2NyaXB0KGUpLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVNjcmlwdCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU2NyaXB0JiZlLlNBRkVfU0NSSVBUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVTY3JpcHQsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTY3JpcHRcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV89ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoLzwvZyxcIlxcXFx4M2NcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU2NyaXB0KS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUpfSxnb29nLmh0bWwuU2FmZVNjcmlwdC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVTY3JpcHQoZSk6ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVNjcmlwdC5FTVBUWT1nb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5mcz17fSxnb29nLmZzLnVybD17fSxnb29nLmZzLnVybC5jcmVhdGVPYmplY3RVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZnMudXJsLmdldFVybE9iamVjdF8oKS5jcmVhdGVPYmplY3RVUkwoZSl9LGdvb2cuZnMudXJsLnJldm9rZU9iamVjdFVybD1mdW5jdGlvbihlKXtnb29nLmZzLnVybC5nZXRVcmxPYmplY3RfKCkucmV2b2tlT2JqZWN0VVJMKGUpfSxnb29nLmZzLnVybC5nZXRVcmxPYmplY3RfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5mcy51cmwuZmluZFVybE9iamVjdF8oKTtpZihudWxsIT1lKXJldHVybiBlO3Rocm93IEVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGJsb2IgVVJMc1wiKX0sZ29vZy5mcy51cmwuZmluZFVybE9iamVjdF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5pc0RlZihnb29nLmdsb2JhbC5VUkwpJiZnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLlVSTC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsLlVSTDpnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLndlYmtpdFVSTCkmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWwud2Via2l0VVJMOmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbDpudWxsfSxnb29nLmZzLnVybC5icm93c2VyU3VwcG9ydHNPYmplY3RVcmxzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPWdvb2cuZnMudXJsLmZpbmRVcmxPYmplY3RfKCl9LGdvb2cuaTE4bj17fSxnb29nLmkxOG4uYmlkaT17fSxnb29nLmkxOG4uYmlkaS5GT1JDRV9SVEw9ITEsZ29vZy5pMThuLmJpZGkuSVNfUlRMPWdvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTHx8KFwiYXJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJmYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcImhlXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiaXdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJwc1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInNkXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwidWdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ1clwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInlpXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCkpJiYoMj09Z29vZy5MT0NBTEUubGVuZ3RofHxcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSl8fDM8PWdvb2cuTE9DQUxFLmxlbmd0aCYmXCJja2JcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKSYmKDM9PWdvb2cuTE9DQUxFLmxlbmd0aHx8XCItXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpfHxcIl9cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCkpfHw3PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJyb2hnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwidGhhYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpKXx8ODw9Z29vZy5MT0NBTEUubGVuZ3RoJiYoXCItXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpfHxcIl9cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCkpJiYoXCJhZGxtXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwiYXJhYlwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcImhlYnJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJua29vXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwicm9oZ1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcInRoYWFcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKSksZ29vZy5pMThuLmJpZGkuRm9ybWF0PXtMUkU6XCLigKpcIixSTEU6XCLigKtcIixQREY6XCLigKxcIixMUk06XCLigI5cIixSTE06XCLigI9cIn0sZ29vZy5pMThuLmJpZGkuRGlyPXtMVFI6MSxSVEw6LTEsTkVVVFJBTDowfSxnb29nLmkxOG4uYmlkaS5SSUdIVD1cInJpZ2h0XCIsZ29vZy5pMThuLmJpZGkuTEVGVD1cImxlZnRcIixnb29nLmkxOG4uYmlkaS5JMThOX1JJR0hUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5MRUZUOmdvb2cuaTE4bi5iaWRpLlJJR0hULGdvb2cuaTE4bi5iaWRpLkkxOE5fTEVGVD1nb29nLmkxOG4uYmlkaS5JU19SVEw/Z29vZy5pMThuLmJpZGkuUklHSFQ6Z29vZy5pMThuLmJpZGkuTEVGVCxnb29nLmkxOG4uYmlkaS50b0Rpcj1mdW5jdGlvbihlLHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA8ZT9nb29nLmkxOG4uYmlkaS5EaXIuTFRSOjA+ZT9nb29nLmkxOG4uYmlkaS5EaXIuUlRMOnQ/bnVsbDpnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTDpudWxsPT1lP251bGw6ZT9nb29nLmkxOG4uYmlkaS5EaXIuUlRMOmdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXz1cIkEtWmEtesOALcOWw5gtw7bDuC3KuMyALdaQ4KSALeG/v+KAjuKwgC1cXHVkODAxXFx1ZDgwNC1cXHVkODM5XFx1ZDgzYy1cXHVkYmZm76SALe+snO+4gC3vua/vu70t77+/XCIsZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfPVwi1pEt26/bui3go7/igI9cXHVkODAyLVxcdWQ4MDNcXHVkODNhLVxcdWQ4M2LvrJ0t77e/77mwLe+7vFwiLGdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXz0vPFtePl0qPnwmW147XSs7L2csZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXyxcIlwiKTplfSxnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ189bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaGFzUnRsQ2hhcj1nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwsZ29vZy5pMThuLmJpZGkuaGFzQW55THRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0ckNoYXJSZWdfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5sdHJSZV89bmV3IFJlZ0V4cChcIl5bXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5ydGxSZV89bmV3IFJlZ0V4cChcIl5bXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5pc1J0bENoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bFJlXy50ZXN0KGUpfSxnb29nLmkxOG4uYmlkaS5pc0x0ckNoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0clJlXy50ZXN0KGUpfSxnb29nLmkxOG4uYmlkaS5pc05ldXRyYWxDaGFyPWZ1bmN0aW9uKGUpe3JldHVybiFnb29nLmkxOG4uYmlkaS5pc0x0ckNoYXIoZSkmJiFnb29nLmkxOG4uYmlkaS5pc1J0bENoYXIoZSl9LGdvb2cuaTE4bi5iaWRpLmx0ckRpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnJ0bERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhSdGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzUnRsVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsLGdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzTHRyVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoTHRyLGdvb2cuaTE4bi5iaWRpLmlzUmVxdWlyZWRMdHJSZV89L15odHRwOlxcL1xcLy4qLyxnb29nLmkxOG4uYmlkaS5pc05ldXRyYWxUZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Z29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCksZ29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KGUpfHwhZ29vZy5pMThuLmJpZGkuaGFzQW55THRyKGUpJiYhZ29vZy5pMThuLmJpZGkuaGFzQW55UnRsKGUpfSxnb29nLmkxOG4uYmlkaS5sdHJFeGl0RGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdW15cIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdKiRcIiksZ29vZy5pMThuLmJpZGkucnRsRXhpdERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVteXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXSokXCIpLGdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoTHRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0ckV4aXREaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNMdHJFeGl0VGV4dD1nb29nLmkxOG4uYmlkaS5lbmRzV2l0aEx0cixnb29nLmkxOG4uYmlkaS5lbmRzV2l0aFJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzUnRsRXhpdFRleHQ9Z29vZy5pMThuLmJpZGkuZW5kc1dpdGhSdGwsZ29vZy5pMThuLmJpZGkucnRsTG9jYWxlc1JlXz0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaSxnb29nLmkxOG4uYmlkaS5pc1J0bExhbmd1YWdlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxMb2NhbGVzUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmJyYWNrZXRHdWFyZFRleHRSZV89LyhcXCguKj9cXCkrKXwoXFxbLio/XFxdKyl8KFxcey4qP1xcfSspfCg8Lio/PispL2csZ29vZy5pMThuLmJpZGkuZ3VhcmRCcmFja2V0SW5UZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9KHZvaWQgMD09PXQ/Z29vZy5pMThuLmJpZGkuaGFzQW55UnRsKGUpOnQpP2dvb2cuaTE4bi5iaWRpLkZvcm1hdC5STE06Z29vZy5pMThuLmJpZGkuRm9ybWF0LkxSTSxlLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuYnJhY2tldEd1YXJkVGV4dFJlXyx0K1wiJCZcIit0KX0sZ29vZy5pMThuLmJpZGkuZW5mb3JjZVJ0bEluSHRtbD1mdW5jdGlvbihlKXtyZXR1cm5cIjxcIj09ZS5jaGFyQXQoMCk/ZS5yZXBsYWNlKC88XFx3Ky8sXCIkJiBkaXI9cnRsXCIpOlwiXFxuPHNwYW4gZGlyPXJ0bD5cIitlK1wiPC9zcGFuPlwifSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUkxFK2UrZ29vZy5pMThuLmJpZGkuRm9ybWF0LlBERn0sZ29vZy5pMThuLmJpZGkuZW5mb3JjZUx0ckluSHRtbD1mdW5jdGlvbihlKXtyZXR1cm5cIjxcIj09ZS5jaGFyQXQoMCk/ZS5yZXBsYWNlKC88XFx3Ky8sXCIkJiBkaXI9bHRyXCIpOlwiXFxuPHNwYW4gZGlyPWx0cj5cIitlK1wiPC9zcGFuPlwifSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlTHRySW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5Gb3JtYXQuTFJFK2UrZ29vZy5pMThuLmJpZGkuRm9ybWF0LlBERn0sZ29vZy5pMThuLmJpZGkuZGltZW5zaW9uc1JlXz0vOlxccyooWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKikvZyxnb29nLmkxOG4uYmlkaS5sZWZ0UmVfPS9sZWZ0L2dpLGdvb2cuaTE4bi5iaWRpLnJpZ2h0UmVfPS9yaWdodC9naSxnb29nLmkxOG4uYmlkaS50ZW1wUmVfPS8lJSUlL2csZ29vZy5pMThuLmJpZGkubWlycm9yQ1NTPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuZGltZW5zaW9uc1JlXyxcIjokMSAkNCAkMyAkMlwiKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmxlZnRSZV8sXCIlJSUlXCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkucmlnaHRSZV8sZ29vZy5pMThuLmJpZGkuTEVGVCkucmVwbGFjZShnb29nLmkxOG4uYmlkaS50ZW1wUmVfLGdvb2cuaTE4bi5iaWRpLlJJR0hUKX0sZ29vZy5pMThuLmJpZGkuZG91YmxlUXVvdGVTdWJzdGl0dXRlUmVfPS8oW1xcdTA1OTEtXFx1MDVmMl0pXCIvZyxnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV89LyhbXFx1MDU5MS1cXHUwNWYyXSknL2csZ29vZy5pMThuLmJpZGkubm9ybWFsaXplSGVicmV3UXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5kb3VibGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMde0XCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuc2luZ2xlUXVvdGVTdWJzdGl0dXRlUmVfLFwiJDHXs1wiKX0sZ29vZy5pMThuLmJpZGkud29yZFNlcGFyYXRvclJlXz0vXFxzKy8sZ29vZy5pMThuLmJpZGkuaGFzTnVtZXJhbHNSZV89L1tcXGRcXHUwNmYwLVxcdTA2ZjldLyxnb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfPS40LGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG89MCxyPTAsbj0hMTtmb3IoZT1nb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KS5zcGxpdChnb29nLmkxOG4uYmlkaS53b3JkU2VwYXJhdG9yUmVfKSx0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBpPWVbdF07Z29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bChpKT8obysrLHIrKyk6Z29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KGkpP249ITA6Z29vZy5pMThuLmJpZGkuaGFzQW55THRyKGkpP3IrKzpnb29nLmkxOG4uYmlkaS5oYXNOdW1lcmFsc1JlXy50ZXN0KGkpJiYobj0hMCl9cmV0dXJuIDA9PXI/bj9nb29nLmkxOG4uYmlkaS5EaXIuTFRSOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOm8vcj5nb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn0sZ29vZy5pMThuLmJpZGkuZGV0ZWN0UnRsRGlyZWN0aW9uYWxpdHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb24oZSx0KT09Z29vZy5pMThuLmJpZGkuRGlyLlJUTH0sZ29vZy5pMThuLmJpZGkuc2V0RWxlbWVudERpckFuZEFsaWduPWZ1bmN0aW9uKGUsdCl7ZSYmKHQ9Z29vZy5pMThuLmJpZGkudG9EaXIodCkpJiYoZS5zdHlsZS50ZXh0QWxpZ249dD09Z29vZy5pMThuLmJpZGkuRGlyLlJUTD9nb29nLmkxOG4uYmlkaS5SSUdIVDpnb29nLmkxOG4uYmlkaS5MRUZULGUuZGlyPXQ9PWdvb2cuaTE4bi5iaWRpLkRpci5SVEw/XCJydGxcIjpcImx0clwiKX0sZ29vZy5pMThuLmJpZGkuc2V0RWxlbWVudERpckJ5VGV4dERpcmVjdGlvbmFsaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uKHQpKXtjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5MVFI6ZS5kaXI9XCJsdHJcIjticmVhaztjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5SVEw6ZS5kaXI9XCJydGxcIjticmVhaztkZWZhdWx0OmUucmVtb3ZlQXR0cmlidXRlKFwiZGlyXCIpfX0sZ29vZy5pMThuLmJpZGkuRGlyZWN0aW9uYWxTdHJpbmc9ZnVuY3Rpb24oKXt9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLnRydXN0ZWRVUkxfPW51bGwsdGhpcy5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5jbG9uZVdpdGhQYXJhbXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcCh0aGlzKSxyPShvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVVJMX1BBUkFNX1BBUlNFUl8uZXhlYyhvKSlbM118fFwiXCI7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uob1sxXStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCI/XCIsb1syXXx8XCJcIixlKStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCIjXCIscix0KSl9LGdvb2cuREVCVUcmJihnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiVHJ1c3RlZFJlc291cmNlVXJse1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwmJmUuVFJVU1RFRF9SRVNPVVJDRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFRydXN0ZWRSZXNvdXJjZVVybCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6VHJ1c3RlZFJlc291cmNlVXJsXCIpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJ1c3RlZFVSTF8/ZS50cnVzdGVkVVJMXzpnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSk7aWYoIWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfLnRlc3QobykpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFRydXN0ZWRSZXNvdXJjZVVybCBmb3JtYXQ6IFwiK28pO3JldHVybiBlPW8ucmVwbGFjZShnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkZPUk1BVF9NQVJLRVJfLChmdW5jdGlvbihlLHIpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSl0aHJvdyBFcnJvcignRm91bmQgbWFya2VyLCBcIicrcisnXCIsIGluIGZvcm1hdCBzdHJpbmcsIFwiJytvKydcIiwgYnV0IG5vIHZhbGlkIGxhYmVsIG1hcHBpbmcgZm91bmQgaW4gYXJnczogJytKU09OLnN0cmluZ2lmeSh0KSk7cmV0dXJuKGU9dFtyXSlpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTplbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGUpKX0pKSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkZPUk1BVF9NQVJLRVJfPS8leyhcXHcrKX0vZyxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkJBU0VfVVJMXz0vXigoaHR0cHM6KT9cXC9cXC9bMC05YS16LjpbXFxdLV0rXFwvfFxcL1teL1xcXFxdfFteOi9cXFxcJV0rXFwvfFteOi9cXFxcJV0qWz8jXXxhYm91dDpibGFuayMpL2ksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5VUkxfUEFSQU1fUEFSU0VSXz0vXihbXj8jXSopKFxcP1teI10qKT8oI1tcXHNcXFNdKik/Lyxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdFdpdGhQYXJhbXM9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZm9ybWF0KGUsdCkuY2xvbmVXaXRoUGFyYW1zKG8scil9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9XCJcIixvPTA7bzxlLmxlbmd0aDtvKyspdCs9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGVbb10pO3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsO3JldHVybiB0LnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKGUpOmUsZ29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kmJih0LnRydXN0ZWRVUkxfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChlKSksdH0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5zdHJpbmdpZnlQYXJhbXNfPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsPT1vKXJldHVybiB0O2lmKGdvb2cuaXNTdHJpbmcobykpcmV0dXJuIG8/ZStlbmNvZGVVUklDb21wb25lbnQobyk6XCJcIjtmb3IodmFyIHIgaW4gbyl7dmFyIG49b1tyXTtuPWdvb2cuaXNBcnJheShuKT9uOltuXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXTtudWxsIT1zJiYodHx8KHQ9ZSksdCs9KHQubGVuZ3RoPmUubGVuZ3RoP1wiJlwiOlwiXCIpK2VuY29kZVVSSUNvbXBvbmVudChyKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHMpKSl9fXJldHVybiB0fSxnb29nLnN0cmluZy5pbnRlcm5hbD17fSxnb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PWUubGFzdEluZGV4T2YodCwwKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuZW5kc1dpdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbz1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gMDw9byYmZS5pbmRleE9mKHQsbyk9PW99LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSh0LGUuc3Vic3RyKDAsdC5sZW5ndGgpKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSh0LGUuc3Vic3RyKGUubGVuZ3RoLXQubGVuZ3RoLHQubGVuZ3RoKSl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PXQudG9Mb3dlckNhc2UoKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4vXltcXHNcXHhhMF0qJC8udGVzdChlKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbT1nb29nLlRSVVNURURfU0lURSYmU3RyaW5nLnByb3RvdHlwZS50cmltP2Z1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX06ZnVuY3Rpb24oZSl7cmV0dXJuL15bXFxzXFx4YTBdKihbXFxzXFxTXSo/KVtcXHNcXHhhMF0qJC8uZXhlYyhlKVsxXX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybihlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKTwodD1TdHJpbmcodCkudG9Mb3dlckNhc2UoKSk/LTE6ZT09dD8wOjF9LGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKS9nLHQ/XCI8YnIgLz5cIjpcIjxicj5cIil9LGdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGU9ZnVuY3Rpb24oZSx0KXtpZih0KWU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV8sXCImYW1wO1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXyxcIiZsdDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV8sXCImZ3Q7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuUVVPVF9SRV8sXCImcXVvdDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfLFwiJiMzOTtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5OVUxMX1JFXyxcIiYjMDtcIik7ZWxzZXtpZighZ29vZy5zdHJpbmcuaW50ZXJuYWwuQUxMX1JFXy50ZXN0KGUpKXJldHVybiBlOy0xIT1lLmluZGV4T2YoXCImXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXyxcIiZhbXA7XCIpKSwtMSE9ZS5pbmRleE9mKFwiPFwiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXyxcIiZsdDtcIikpLC0xIT1lLmluZGV4T2YoXCI+XCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuR1RfUkVfLFwiJmd0O1wiKSksLTEhPWUuaW5kZXhPZignXCInKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfLFwiJnF1b3Q7XCIpKSwtMSE9ZS5pbmRleE9mKFwiJ1wiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKSksLTEhPWUuaW5kZXhPZihcIlxcMFwiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKSl9cmV0dXJuIGV9LGdvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV89LyYvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5MVF9SRV89LzwvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV89Lz4vZyxnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXz0vXCIvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfPS8nL2csZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV89L1xceDAwL2csZ29vZy5zdHJpbmcuaW50ZXJuYWwuQUxMX1JFXz0vW1xceDAwJjw+XCInXS8sZ29vZy5zdHJpbmcuaW50ZXJuYWwud2hpdGVzcGFjZUVzY2FwZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9CcihlLnJlcGxhY2UoLyAgL2csXCIgJiMxNjA7XCIpLHQpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybi0xIT1lLmluZGV4T2YodCl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUudG9Mb3dlckNhc2UoKSx0LnRvTG93ZXJDYXNlKCkpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbz0wO2U9Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbShTdHJpbmcoZSkpLnNwbGl0KFwiLlwiKSx0PWdvb2cuc3RyaW5nLmludGVybmFsLnRyaW0oU3RyaW5nKHQpKS5zcGxpdChcIi5cIik7Zm9yKHZhciByPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxuPTA7MD09byYmbjxyO24rKyl7dmFyIGk9ZVtuXXx8XCJcIixzPXRbbl18fFwiXCI7ZG97aWYoaT0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhpKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLHM9LyhcXGQqKShcXEQqKSguKikvLmV4ZWMocyl8fFtcIlwiLFwiXCIsXCJcIixcIlwiXSwwPT1pWzBdLmxlbmd0aCYmMD09c1swXS5sZW5ndGgpYnJlYWs7bz0wPT1pWzFdLmxlbmd0aD8wOnBhcnNlSW50KGlbMV0sMTApO3ZhciBhPTA9PXNbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoc1sxXSwxMCk7bz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKG8sYSl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oMD09aVsyXS5sZW5ndGgsMD09c1syXS5sZW5ndGgpfHxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKGlbMl0sc1syXSksaT1pWzNdLHM9c1szXX13aGlsZSgwPT1vKX1yZXR1cm4gb30sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXz1mdW5jdGlvbihlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH0sZ29vZy5odG1sLlNhZmVVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HPVwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIixnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlVXJse1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZVVybC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVVcmwmJmUuU0FGRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVVybCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZVVybFwiKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKX0sZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fPS9eKD86YXVkaW9cXC8oPzozZ3BwMnwzZ3BwfGFhY3xMMTZ8bWlkaXxtcDN8bXA0fG1wZWd8b2dhfG9nZ3xvcHVzfHgtbTRhfHgtd2F2fHdhdnx3ZWJtKXxpbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicHx4LWljb24pfHRleHRcXC9jc3Z8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibXxxdWlja3RpbWUpKSg/OjtcXHcrPSg/Olxcdyt8XCJbXFx3Oz1dK1wiKSkqJC9pLGdvb2cuaHRtbC5TYWZlVXJsLmlzU2FmZU1pbWVUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbUJsb2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QoZS50eXBlKT9nb29nLmZzLnVybC5jcmVhdGVPYmplY3RVcmwoZSk6Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXz0vXmRhdGE6KFteLF0qKTtiYXNlNjQsW2EtejAtOStcXC9dKz0qJC9pLGdvb2cuaHRtbC5TYWZlVXJsLmZyb21EYXRhVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PShlPWUucmVwbGFjZSgvKCUwQXwlMEQpL2csXCJcIikpLm1hdGNoKGdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXyk7cmV0dXJuIHQ9dCYmZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QodFsxXSksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQ/ZTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVRlbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwidGVsOlwiKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU0lQX1VSTF9QQVRURVJOXz0vXnNpcFtzXT86WythLXowLTlfLiEkJSYnKlxcLz1eYHt8fX4tXStAKFthLXowLTktXStcXC4pK1thLXowLTldezIsNjN9JC9pLGdvb2cuaHRtbC5TYWZlVXJsLmZyb21TaXBVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fLnRlc3QoZGVjb2RlVVJJQ29tcG9uZW50KGUpKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tRmFjZWJvb2tNZXNzZW5nZXJVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcImZiLW1lc3NlbmdlcjovL3NoYXJlXCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21XaGF0c0FwcFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwid2hhdHNhcHA6Ly9zZW5kXCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21TbXNVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcInNtczpcIikmJmdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXyhlKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5pc1Ntc1VybEJvZHlWYWxpZF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKFwiI1wiKTtpZigwPHQmJihlPWUuc3Vic3RyaW5nKDAsdCkpLCEodD1lLm1hdGNoKC9bPyZdYm9keT0vZ2kpKSlyZXR1cm4hMDtpZigxPHQubGVuZ3RoKXJldHVybiExO2lmKCEoZT1lLm1hdGNoKC9bPyZdYm9keT0oW14mXSopLylbMV0pKXJldHVybiEwO3RyeXtkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuL14oPzpbYS16MC05XFwtXy5+XXwlWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tU3NoVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJzc2g6Ly9cIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVDaHJvbWVFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9eY2hyb21lLWV4dGVuc2lvbjpcXC9cXC8oW15cXC9dKylcXC8vLGUsdCl9LGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRmlyZWZveEV4dGVuc2lvblVybD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15tb3otZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFZGdlRXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXm1zLWJyb3dzZXItZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4oZT1lLmV4ZWModCkpPyhlPWVbMV0sLTE9PShvIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/W2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChvKV06by5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSl9KSkpLmluZGV4T2YoZSkmJih0PWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpKTp0PWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcsZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tVHJ1c3RlZFJlc291cmNlVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoZSkpfSxnb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl89L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cCk6fFteOi8/I10qKD86Wy8/I118JCkpL2ksZ29vZy5odG1sLlNhZmVVcmwuU0FGRV9VUkxfUEFUVEVSTj1nb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl8sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOihlPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/ZTooZT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nP2UuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpOlN0cmluZyhlKSx0JiYvXmRhdGE6L2kudGVzdChlKSYmKHQ9Z29vZy5odG1sLlNhZmVVcmwuZnJvbURhdGFVcmwoZSkpLmdldFR5cGVkU3RyaW5nVmFsdWUoKT09ZT90Oihnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGUpLFwiJXMgZG9lcyBub3QgbWF0Y2ggdGhlIHNhZmUgVVJMIHBhdHRlcm5cIixlKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpKSl9LGdvb2cuaHRtbC5TYWZlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGdvb2cuaHRtbC5TYWZlVXJsO3JldHVybiB0LnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChlKTplLHR9LGdvb2cuaHRtbC5TYWZlVXJsLkFCT1VUX0JMQU5LPWdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImFib3V0OmJsYW5rXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGU9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU1RZTEVfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU3R5bGUuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKS5sZW5ndGg/Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWTooZ29vZy5hc3NlcnRzLmFzc2VydChnb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aChlLFwiO1wiKSxcIkxhc3QgY2hhcmFjdGVyIG9mIHN0eWxlIHN0cmluZyBpcyBub3QgJzsnOiBcIitlKSxnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI6XCIpLFwiU3R5bGUgc3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgJzonLCB0byBzcGVjaWZ5IGEgXFxcIm5hbWU6IHZhbHVlXFxcIiBwYWlyOiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV99LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVN0eWxle1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZSYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU3R5bGUmJmUuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVN0eWxlLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlU3R5bGVcIil9LGdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBnb29nLmh0bWwuU2FmZVN0eWxlKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUpfSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HPVwiekNsb3N1cmV6XCIsZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbz1cIlwiO2Zvcih0IGluIGUpe2lmKCEvXlstX2EtekEtWjAtOV0rJC8udGVzdCh0KSl0aHJvdyBFcnJvcihcIk5hbWUgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05XSwgZ290OiBcIit0KTt2YXIgcj1lW3RdO251bGwhPXImJihvKz10K1wiOlwiKyhyPWdvb2cuaXNBcnJheShyKT9nb29nLmFycmF5Lm1hcChyLGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXykuam9pbihcIiBcIik6Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKHIpKStcIjtcIil9cmV0dXJuIG8/Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvKTpnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZfSxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZV89ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKXJldHVybid1cmwoXCInK2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChlKS5yZXBsYWNlKC88L2csXCIlM2NcIikucmVwbGFjZSgvW1xcXFxcIl0vZyxcIlxcXFwkJlwiKSsnXCIpJztpZihlPWUgaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdD9nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSk6Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVTdHJpbmdfKFN0cmluZyhlKSksL1t7O31dLy50ZXN0KGUpKXRocm93IG5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJWYWx1ZSBkb2VzIG5vdCBhbGxvdyBbezt9XSwgZ290OiAlcy5cIixbZV0pO3JldHVybiBlfSxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ189ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXyxcIiQxXCIpLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfLFwiJDFcIikucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV8sXCJ1cmxcIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfLnRlc3QodCk/Z29vZy5odG1sLlNhZmVTdHlsZS5DT01NRU5UX1JFXy50ZXN0KGUpPyhnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBkaXNhbGxvd3MgY29tbWVudHMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKTpnb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkUXVvdGVzXyhlKT9nb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkU3F1YXJlQnJhY2tldHNfKGUpP2dvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVVcmxfKGUpOihnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSByZXF1aXJlcyBiYWxhbmNlZCBzcXVhcmUgYnJhY2tldHMgYW5kIG9uZSBpZGVudGlmaWVyIHBlciBwYWlyIG9mIGJyYWNrZXRzLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIHJlcXVpcmVzIGJhbGFuY2VkIHF1b3RlcywgZ290OiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkcpOihnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBhbGxvd3Mgb25seSBcIitnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfK1wiIGFuZCBzaW1wbGUgZnVuY3Rpb25zLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyl9LGdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRRdW90ZXNfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxvPSEwLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZS5jaGFyQXQocik7XCInXCI9PW4mJm8/dD0hdDonXCInPT1uJiZ0JiYobz0hbyl9cmV0dXJuIHQmJm99LGdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRTcXVhcmVCcmFja2V0c189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLG89L15bLV9hLXpBLVowLTldJC8scj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJBdChyKTtpZihcIl1cIj09bil7aWYodClyZXR1cm4hMTt0PSEwfWVsc2UgaWYoXCJbXCI9PW4pe2lmKCF0KXJldHVybiExO3Q9ITF9ZWxzZSBpZighdCYmIW8udGVzdChuKSlyZXR1cm4hMX1yZXR1cm4gdH0sZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXz1cIlstLC5cXFwiJyVfISMgYS16QS1aMC05XFxcXFtcXFxcXV1cIixnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX1JFXz1uZXcgUmVnRXhwKFwiXlwiK2dvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfQUxMT1dFRF9DSEFSU18rXCIrJFwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV89L1xcYih1cmxcXChbIFxcdFxcbl0qKSgnWyAtJigtXFxbXFxdLX5dKid8XCJbICEjLVxcW1xcXS1+XSpcInxbISMtJiotXFxbXFxdLX5dKikoWyBcXHRcXG5dKlxcKSkvZyxnb29nLmh0bWwuU2FmZVN0eWxlLkZVTkNUSU9OU19SRV89L1xcYihoc2x8aHNsYXxyZ2J8cmdiYXxtYXRyaXh8Y2FsY3xtaW5tYXh8Zml0LWNvbnRlbnR8cmVwZWF0fChyb3RhdGV8c2NhbGV8dHJhbnNsYXRlKShYfFl8WnwzZCk/KVxcKFstKyovMC05YS16LiVcXFtcXF0sIF0rXFwpL2csZ29vZy5odG1sLlNhZmVTdHlsZS5DT01NRU5UX1JFXz0vXFwvXFwqLyxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplVXJsXz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXywoZnVuY3Rpb24oZSx0LG8scil7dmFyIG49XCJcIjtyZXR1cm4gbz1vLnJlcGxhY2UoL14oWydcIl0pKC4qKVxcMSQvLChmdW5jdGlvbihlLHQsbyl7cmV0dXJuIG49dCxvfSkpLGU9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUobykuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpLHQrbitlK24rcn0pKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5jb25jYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixvPWZ1bmN0aW9uKGUpe2dvb2cuaXNBcnJheShlKT9nb29nLmFycmF5LmZvckVhY2goZSxvKTp0Kz1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChlKX07cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChhcmd1bWVudHMsbyksdD9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX1NUWUxFX1NIRUVUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlUnVsZT1mdW5jdGlvbihlLHQpe2lmKGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI8XCIpKXRocm93IEVycm9yKFwiU2VsZWN0b3IgZG9lcyBub3QgYWxsb3cgJzwnLCBnb3Q6IFwiK2UpO3ZhciBvPWUucmVwbGFjZSgvKCd8XCIpKCg/IVxcMSlbXlxcclxcblxcZlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxL2csXCJcIik7aWYoIS9eWy1fYS16QS1aMC05Iy46KiAsPit+W1xcXSgpPV4kfF0rJC8udGVzdChvKSl0aHJvdyBFcnJvcihcIlNlbGVjdG9yIGFsbG93cyBvbmx5IFstX2EtekEtWjAtOSMuOiogLD4rfltcXFxcXSgpPV4kfF0gYW5kIHN0cmluZ3MsIGdvdDogXCIrZSk7aWYoIWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5oYXNCYWxhbmNlZEJyYWNrZXRzXyhvKSl0aHJvdyBFcnJvcihcIigpIGFuZCBbXSBpbiBzZWxlY3RvciBtdXN0IGJlIGJhbGFuY2VkLCBnb3Q6IFwiK2UpO3JldHVybiB0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZXx8KHQ9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGUodCkpLGU9ZStcIntcIitnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcCh0KS5yZXBsYWNlKC88L2csXCJcXFxcM0MgXCIpK1wifVwiLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuaGFzQmFsYW5jZWRCcmFja2V0c189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXtcIihcIjpcIilcIixcIltcIjpcIl1cIn0sbz1bXSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodFtuXSlvLnB1c2godFtuXSk7ZWxzZSBpZihnb29nLm9iamVjdC5jb250YWlucyh0LG4pJiZvLnBvcCgpIT1uKXJldHVybiExfXJldHVybiAwPT1vLmxlbmd0aH0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNvbmNhdD1mdW5jdGlvbihlKXt2YXIgdD1cIlwiLG89ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG8pOnQrPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoZSl9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2goYXJndW1lbnRzLG8pLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKS5sZW5ndGg/Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LkVNUFRZOihnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhlLFwiPFwiKSxcIkZvcmJpZGRlbiAnPCcgY2hhcmFjdGVyIGluIHN0eWxlIHNoZWV0IHN0cmluZzogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV99LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGVTaGVldHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmUuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmUuU0FGRV9TVFlMRV9TSEVFVF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVTdHlsZVNoZWV0LCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlU3R5bGVTaGVldFwiKX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuRU1QVFk9Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5sYWJzPXt9LGdvb2cubGFicy51c2VyQWdlbnQ9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsPXt9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdmlnYXRvcl8oKTtyZXR1cm4gZSYmKGU9ZS51c2VyQWdlbnQpP2U6XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdmlnYXRvcl89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5nbG9iYWwubmF2aWdhdG9yfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50Xz1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXygpLGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5zZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oZSl7Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnVzZXJBZ2VudF89ZXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ18oKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50X30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnModCxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZT1mdW5jdGlvbihlKXt2YXIgdD1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zKHQsZSl9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbz0vKFxcd1tcXHcgXSspXFwvKFteXFxzXSspXFxzKig/OlxcKCguKj8pXFwpKT8vZyxyPVtdO3Q9by5leGVjKGUpOylyLnB1c2goW3RbMV0sdFsyXSx0WzNdfHx2b2lkIDBdKTtyZXR1cm4gcn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyPXt9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJPcGVyYVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSUVfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZy9cIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk9QUlwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRmlyZWZveFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRnhpT1NcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2FmYXJpXCIpJiYhKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94XygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrKCl8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ29hc3RcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfPWZ1bmN0aW9uKCl7cmV0dXJuKGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfKCkmJmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFwcGxlV2ViS2l0XCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfPWZ1bmN0aW9uKCl7cmV0dXJuKGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNocm9tZVwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ3JpT1NcIikpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfKCl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEFuZHJvaWRCcm93c2VyXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpJiYhKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNGaXJlZm94KCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGsoKSl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZUNocm9taXVtPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmFDaHJvbWl1bT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNGaXJlZm94PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NhZmFyaT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0NvYXN0PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJb3NXZWJ2aWV3PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0FuZHJvaWRCcm93c2VyPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEFuZHJvaWRCcm93c2VyXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlNpbGtcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT1nb29nLmFycmF5LmZpbmQoZSxyKSxvW2VdfHxcIlwifXZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtpZihnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpKXJldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0SUVWZXJzaW9uXyh0KTt0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcyh0KTt2YXIgbz17fTtnb29nLmFycmF5LmZvckVhY2godCwoZnVuY3Rpb24oZSl7b1tlWzBdXT1lWzFdfSkpO3ZhciByPWdvb2cucGFydGlhbChnb29nLm9iamVjdC5jb250YWluc0tleSxvKTtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKT9lKFtcIlZlcnNpb25cIixcIk9wZXJhXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCk/ZShbXCJFZGdlXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlQ2hyb21pdW0oKT9lKFtcIkVkZ1wiXSk6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCk/ZShbXCJDaHJvbWVcIixcIkNyaU9TXCJdKToodD10WzJdKSYmdFsxXXx8XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiAwPD1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldFZlcnNpb24oKSxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldElFVmVyc2lvbl89ZnVuY3Rpb24oZSl7dmFyIHQ9L3J2OiAqKFtcXGRcXC5dKikvLmV4ZWMoZSk7aWYodCYmdFsxXSlyZXR1cm4gdFsxXTt0PVwiXCI7dmFyIG89L01TSUUgKyhbXFxkXFwuXSspLy5leGVjKGUpO2lmKG8mJm9bMV0paWYoZT0vVHJpZGVudFxcLyhcXGQuXFxkKS8uZXhlYyhlKSxcIjcuMFwiPT1vWzFdKWlmKGUmJmVbMV0pc3dpdGNoKGVbMV0pe2Nhc2VcIjQuMFwiOnQ9XCI4LjBcIjticmVhaztjYXNlXCI1LjBcIjp0PVwiOS4wXCI7YnJlYWs7Y2FzZVwiNi4wXCI6dD1cIjEwLjBcIjticmVhaztjYXNlXCI3LjBcIjp0PVwiMTEuMFwifWVsc2UgdD1cIjcuMFwiO2Vsc2UgdD1vWzFdO3JldHVybiB0fSxnb29nLmh0bWwuU2FmZUh0bWw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9IVE1MX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfLHRoaXMuZGlyXz1udWxsfSxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpcl99LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVIdG1se1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGUpLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlSHRtbCYmZS5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlSHRtbCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZUh0bWxcIil9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlPWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWwpcmV0dXJuIGU7dmFyIHQ9XCJvYmplY3RcIj09dHlwZW9mIGUsbz1udWxsO3JldHVybiB0JiZlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZyYmKG89ZS5nZXREaXJlY3Rpb24oKSksZT10JiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoZSksbyl9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlUHJlc2VydmluZ05ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sP2U6KGU9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnIoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZS5nZXREaXJlY3Rpb24oKSkpfSxnb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZVByZXNlcnZpbmdOZXdsaW5lc0FuZFNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbD9lOihlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLndoaXRlc3BhY2VFc2NhcGUoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZS5nZXREaXJlY3Rpb24oKSkpfSxnb29nLmh0bWwuU2FmZUh0bWwuZnJvbT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZSxnb29nLmh0bWwuU2FmZUh0bWwuVkFMSURfTkFNRVNfSU5fVEFHXz0vXlthLXpBLVowLTktXSskLyxnb29nLmh0bWwuU2FmZUh0bWwuVVJMX0FUVFJJQlVURVNfPXthY3Rpb246ITAsY2l0ZTohMCxkYXRhOiEwLGZvcm1hY3Rpb246ITAsaHJlZjohMCxtYW5pZmVzdDohMCxwb3N0ZXI6ITAsc3JjOiEwfSxnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXz17QVBQTEVUOiEwLEJBU0U6ITAsRU1CRUQ6ITAsSUZSQU1FOiEwLExJTks6ITAsTUFUSDohMCxNRVRBOiEwLE9CSkVDVDohMCxTQ1JJUFQ6ITAsU1RZTEU6ITAsU1ZHOiEwLFRFTVBMQVRFOiEwfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWUoU3RyaW5nKGUpKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShTdHJpbmcoZSksdCxvKX0sZ29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWU9ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QoZSkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRhZyBuYW1lIDxcIitlK1wiPi5cIik7aWYoZS50b1VwcGVyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLk5PVF9BTExPV0VEX1RBR19OQU1FU18pdGhyb3cgRXJyb3IoXCJUYWcgbmFtZSA8XCIrZStcIj4gaXMgbm90IGFsbG93ZWQgZm9yIFNhZmVIdG1sLlwiKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZUlmcmFtZT1mdW5jdGlvbihlLHQsbyxyKXtlJiZnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKTt2YXIgbj17fTtyZXR1cm4gbi5zcmM9ZXx8bnVsbCxuLnNyY2RvYz10JiZnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKHQpLGU9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKG4se3NhbmRib3g6XCJcIn0sbyksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJpZnJhbWVcIixlLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FuZGJveElmcmFtZT1mdW5jdGlvbihlLHQsbyxyKXtpZighZ29vZy5odG1sLlNhZmVIdG1sLmNhblVzZVNhbmRib3hJZnJhbWUoKSl0aHJvdyBFcnJvcihcIlRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgc2FuZGJveGVkIGlmcmFtZXMuXCIpO3ZhciBuPXt9O3JldHVybiBuLnNyYz1lP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShlKSk6bnVsbCxuLnNyY2RvYz10fHxudWxsLG4uc2FuZGJveD1cIlwiLGU9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKG4se30sbyksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJpZnJhbWVcIixlLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudCYmXCJzYW5kYm94XCJpbiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGV9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHRTcmM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoZSksZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMoe3NyYzplfSx7fSx0KSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcInNjcmlwdFwiLGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpe3ZhciByPW8udG9Mb3dlckNhc2UoKTtpZihcImxhbmd1YWdlXCI9PXJ8fFwic3JjXCI9PXJ8fFwidGV4dFwiPT1yfHxcInR5cGVcIj09cil0aHJvdyBFcnJvcignQ2Fubm90IHNldCBcIicrcisnXCIgYXR0cmlidXRlJyl9Zm9yKG89XCJcIixlPWdvb2cuYXJyYXkuY29uY2F0KGUpLHI9MDtyPGUubGVuZ3RoO3IrKylvKz1nb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXAoZVtyXSk7cmV0dXJuIGU9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uobyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzY3JpcHRcIix0LGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU3R5bGU9ZnVuY3Rpb24oZSx0KXt0PWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7dHlwZTpcInRleHQvY3NzXCJ9LHt9LHQpO3ZhciBvPVwiXCI7ZT1nb29nLmFycmF5LmNvbmNhdChlKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylvKz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQudW53cmFwKGVbcl0pO3JldHVybiBlPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKG8sZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic3R5bGVcIix0LGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlTWV0YVJlZnJlc2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1nb29nLmh0bWwuU2FmZVVybC51bndyYXAoZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoZSkpLChnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCkpJiZnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhlLFwiO1wiKSYmKGU9XCInXCIrZS5yZXBsYWNlKC8nL2csXCIlMjdcIikrXCInXCIpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwibWV0YVwiLHtcImh0dHAtZXF1aXZcIjpcInJlZnJlc2hcIixjb250ZW50Oih0fHwwKStcIjsgdXJsPVwiK2V9KX0sZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfPWZ1bmN0aW9uKGUsdCxvKXtpZihvIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Qpbz1nb29nLnN0cmluZy5Db25zdC51bndyYXAobyk7ZWxzZSBpZihcInN0eWxlXCI9PXQudG9Mb3dlckNhc2UoKSlvPWdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXyhvKTtlbHNle2lmKC9eb24vaS50ZXN0KHQpKXRocm93IEVycm9yKCdBdHRyaWJ1dGUgXCInK3QrJ1wiIHJlcXVpcmVzIGdvb2cuc3RyaW5nLkNvbnN0IHZhbHVlLCBcIicrbysnXCIgZ2l2ZW4uJyk7aWYodC50b0xvd2VyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLlVSTF9BVFRSSUJVVEVTXylpZihvIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybClvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKG8pO2Vsc2UgaWYobyBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKW89Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKG8pO2Vsc2V7aWYoIWdvb2cuaXNTdHJpbmcobykpdGhyb3cgRXJyb3IoJ0F0dHJpYnV0ZSBcIicrdCsnXCIgb24gdGFnIFwiJytlKydcIiByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVVybCwgZ29vZy5zdHJpbmcuQ29uc3QsIG9yIHN0cmluZywgdmFsdWUgXCInK28rJ1wiIGdpdmVuLicpO289Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUobykuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpfX1yZXR1cm4gby5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nJiYobz1vLmdldFR5cGVkU3RyaW5nVmFsdWUoKSksZ29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzU3RyaW5nKG8pfHxnb29nLmlzTnVtYmVyKG8pLFwiU3RyaW5nIG9yIG51bWJlciB2YWx1ZSBleHBlY3RlZCwgZ290IFwiK3R5cGVvZiBvK1wiIHdpdGggdmFsdWU6IFwiK28pLHQrJz1cIicrZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShTdHJpbmcobykpKydcIid9LGdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXz1mdW5jdGlvbihlKXtpZighZ29vZy5pc09iamVjdChlKSl0aHJvdyBFcnJvcignVGhlIFwic3R5bGVcIiBhdHRyaWJ1dGUgcmVxdWlyZXMgZ29vZy5odG1sLlNhZmVTdHlsZSBvciBtYXAgb2Ygc3R5bGUgcHJvcGVydGllcywgJyt0eXBlb2YgZStcIiBnaXZlbjogXCIrZSk7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlfHwoZT1nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZShlKSksZ29vZy5odG1sLlNhZmVTdHlsZS51bndyYXAoZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVXaXRoRGlyPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybih0PWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGUodCxvLHIpKS5kaXJfPWUsdH0sZ29vZy5odG1sLlNhZmVIdG1sLmpvaW49ZnVuY3Rpb24oZSx0KXt2YXIgbz0oZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSkuZ2V0RGlyZWN0aW9uKCkscj1bXSxuPWZ1bmN0aW9uKGUpe2dvb2cuaXNBcnJheShlKT9nb29nLmFycmF5LmZvckVhY2goZSxuKTooZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSxyLnB1c2goZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZT1lLmdldERpcmVjdGlvbigpLG89PWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMP289ZTplIT1nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCYmbyE9ZSYmKG89bnVsbCkpfTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKHQsbiksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uoci5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoZSkpLG8pfSxnb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuam9pbihnb29nLmh0bWwuU2FmZUh0bWwuRU1QVFksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXRXaXRoRGlyPWZ1bmN0aW9uKGUsdCl7dmFyIG89Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdChnb29nLmFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk7cmV0dXJuIG8uZGlyXz1lLG99LGdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e30sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlSHRtbCkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhlLHQpfSxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlSFRNTChlKTplLHRoaXMuZGlyXz10LHRoaXN9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1udWxsLG49XCI8XCIrZStnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcyhlLHQpO3JldHVybiBnb29nLmlzRGVmQW5kTm90TnVsbChvKT9nb29nLmlzQXJyYXkobyl8fChvPVtvXSk6bz1bXSxnb29nLmRvbS50YWdzLmlzVm9pZFRhZyhlLnRvTG93ZXJDYXNlKCkpPyhnb29nLmFzc2VydHMuYXNzZXJ0KCFvLmxlbmd0aCxcIlZvaWQgdGFnIDxcIitlK1wiPiBkb2VzIG5vdCBhbGxvdyBjb250ZW50LlwiKSxuKz1cIj5cIik6KHI9Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdChvKSxuKz1cIj5cIitnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKHIpK1wiPC9cIitlK1wiPlwiLHI9ci5nZXREaXJlY3Rpb24oKSksKGU9dCYmdC5kaXIpJiYocj0vXihsdHJ8cnRsfGF1dG8pJC9pLnRlc3QoZSk/Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6bnVsbCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UobixyKX0sZ29vZy5odG1sLlNhZmVIdG1sLnN0cmluZ2lmeUF0dHJpYnV0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1cIlwiO2lmKHQpZm9yKHZhciByIGluIHQpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuVkFMSURfTkFNRVNfSU5fVEFHXy50ZXN0KHIpKXRocm93IEVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lIFwiJytyKydcIi4nKTt2YXIgbj10W3JdO2dvb2cuaXNEZWZBbmROb3ROdWxsKG4pJiYobys9XCIgXCIrZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfKGUscixuKSl9cmV0dXJuIG99LGdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcz1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKWdvb2cuYXNzZXJ0cy5hc3NlcnQoci50b0xvd2VyQ2FzZSgpPT1yLFwiTXVzdCBiZSBsb3dlciBjYXNlXCIpLG5bcl09ZVtyXTtmb3IociBpbiB0KWdvb2cuYXNzZXJ0cy5hc3NlcnQoci50b0xvd2VyQ2FzZSgpPT1yLFwiTXVzdCBiZSBsb3dlciBjYXNlXCIpLG5bcl09dFtyXTtmb3IociBpbiBvKXt2YXIgaT1yLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiBlKXRocm93IEVycm9yKCdDYW5ub3Qgb3ZlcnJpZGUgXCInK2krJ1wiIGF0dHJpYnV0ZSwgZ290IFwiJytyKydcIiB3aXRoIHZhbHVlIFwiJytvW3JdKydcIicpO2kgaW4gdCYmZGVsZXRlIG5baV0sbltyXT1vW3JdfXJldHVybiBufSxnb29nLmh0bWwuU2FmZUh0bWwuRE9DVFlQRV9IVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiPCFET0NUWVBFIGh0bWw+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKSxnb29nLmh0bWwuU2FmZUh0bWwuQlI9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCI8YnI+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucz17fSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZUh0bWxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0LG98fG51bGwpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVNjcmlwdEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU3R5bGVGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZVNoZWV0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy50cnVzdGVkUmVzb3VyY2VVcmxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5kb20uc2FmZT17fSxnb29nLmRvbS5zYWZlLkluc2VydEFkamFjZW50SHRtbFBvc2l0aW9uPXtBRlRFUkJFR0lOOlwiYWZ0ZXJiZWdpblwiLEFGVEVSRU5EOlwiYWZ0ZXJlbmRcIixCRUZPUkVCRUdJTjpcImJlZm9yZWJlZ2luXCIsQkVGT1JFRU5EOlwiYmVmb3JlZW5kXCJ9LGdvb2cuZG9tLnNhZmUuaW5zZXJ0QWRqYWNlbnRIdG1sPWZ1bmN0aW9uKGUsdCxvKXtlLmluc2VydEFkamFjZW50SFRNTCh0LGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChvKSl9LGdvb2cuZG9tLnNhZmUuU0VUX0lOTkVSX0hUTUxfRElTQUxMT1dFRF9UQUdTXz17TUFUSDohMCxTQ1JJUFQ6ITAsU1RZTEU6ITAsU1ZHOiEwLFRFTVBMQVRFOiEwfSxnb29nLmRvbS5zYWZlLmlzSW5uZXJIdG1sQ2xlYW51cFJlY3Vyc2l2ZV89Z29vZy5mdW5jdGlvbnMuY2FjaGVSZXR1cm5WYWx1ZSgoZnVuY3Rpb24oKXtpZihnb29nLkRFQlVHJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuITE7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksZS5hcHBlbmRDaGlsZCh0KSwhKGdvb2cuREVCVUcmJiFlLmZpcnN0Q2hpbGQpJiYodD1lLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxlLmlubmVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoZ29vZy5odG1sLlNhZmVIdG1sLkVNUFRZKSwhdC5wYXJlbnRFbGVtZW50KX0pKSxnb29nLmRvbS5zYWZlLnVuc2FmZVNldElubmVySHRtbERvTm90VXNlT3JFbHNlPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5kb20uc2FmZS5pc0lubmVySHRtbENsZWFudXBSZWN1cnNpdmVfKCkpZm9yKDtlLmxhc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmxhc3RDaGlsZCk7ZS5pbm5lckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKHQpfSxnb29nLmRvbS5zYWZlLnNldElubmVySHRtbD1mdW5jdGlvbihlLHQpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIG89ZS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7aWYoZ29vZy5kb20uc2FmZS5TRVRfSU5ORVJfSFRNTF9ESVNBTExPV0VEX1RBR1NfW29dKXRocm93IEVycm9yKFwiZ29vZy5kb20uc2FmZS5zZXRJbm5lckh0bWwgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGNvbnRlbnQgb2YgXCIrZS50YWdOYW1lK1wiLlwiKX1nb29nLmRvbS5zYWZlLnVuc2FmZVNldElubmVySHRtbERvTm90VXNlT3JFbHNlKGUsdCl9LGdvb2cuZG9tLnNhZmUuc2V0T3V0ZXJIdG1sPWZ1bmN0aW9uKGUsdCl7ZS5vdXRlckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKHQpfSxnb29nLmRvbS5zYWZlLnNldEZvcm1FbGVtZW50QWN0aW9uPWZ1bmN0aW9uKGUsdCl7dD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZvcm1FbGVtZW50KGUpLmFjdGlvbj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEJ1dHRvbkZvcm1BY3Rpb249ZnVuY3Rpb24oZSx0KXt0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQnV0dG9uRWxlbWVudChlKS5mb3JtQWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SW5wdXRGb3JtQWN0aW9uPWZ1bmN0aW9uKGUsdCl7dD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElucHV0RWxlbWVudChlKS5mb3JtQWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0U3R5bGU9ZnVuY3Rpb24oZSx0KXtlLnN0eWxlLmNzc1RleHQ9Z29vZy5odG1sLlNhZmVTdHlsZS51bndyYXAodCl9LGdvb2cuZG9tLnNhZmUuZG9jdW1lbnRXcml0ZT1mdW5jdGlvbihlLHQpe2Uud3JpdGUoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKHQpKX0sZ29vZy5kb20uc2FmZS5zZXRBbmNob3JIcmVmPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBbmNob3JFbGVtZW50KGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5ocmVmPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SW1hZ2VTcmM9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEltYWdlRWxlbWVudChlKSwhKHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBvPS9eZGF0YTppbWFnZVxcLy9pLnRlc3QodCk7dD1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0LG8pfWUuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0QXVkaW9TcmM9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEF1ZGlvRWxlbWVudChlKSwhKHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBvPS9eZGF0YTphdWRpb1xcLy9pLnRlc3QodCk7dD1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0LG8pfWUuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0VmlkZW9TcmM9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFZpZGVvRWxlbWVudChlKSwhKHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBvPS9eZGF0YTp2aWRlb1xcLy9pLnRlc3QodCk7dD1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0LG8pfWUuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0RW1iZWRTcmM9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEVtYmVkRWxlbWVudChlKSxlLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0RnJhbWVTcmM9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZyYW1lRWxlbWVudChlKSxlLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SWZyYW1lU3JjPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJZnJhbWVTcmNkb2M9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQoZSksZS5zcmNkb2M9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKHQpfSxnb29nLmRvbS5zYWZlLnNldExpbmtIcmVmQW5kUmVsPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTExpbmtFbGVtZW50KGUpLGUucmVsPW8sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMobyxcInN0eWxlc2hlZXRcIik/KGdvb2cuYXNzZXJ0cy5hc3NlcnQodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwsJ1VSTCBtdXN0IGJlIFRydXN0ZWRSZXNvdXJjZVVybCBiZWNhdXNlIFwicmVsXCIgY29udGFpbnMgXCJzdHlsZXNoZWV0XCInKSxlLmhyZWY9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKHQpKTplLmhyZWY9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw/Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKHQpOnQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpOmdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCkpfSxnb29nLmRvbS5zYWZlLnNldE9iamVjdERhdGE9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTE9iamVjdEVsZW1lbnQoZSksZS5kYXRhPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRTY3JpcHRTcmM9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQoZSksZS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKHQpLCh0PWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJmUuc2V0QXR0cmlidXRlKFwibm9uY2VcIix0KX0sZ29vZy5kb20uc2FmZS5zZXRTY3JpcHRDb250ZW50PWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50KGUpLGUudGV4dD1nb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXBUcnVzdGVkU2NyaXB0KHQpLCh0PWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJmUuc2V0QXR0cmlidXRlKFwibm9uY2VcIix0KX0sZ29vZy5kb20uc2FmZS5zZXRMb2NhdGlvbkhyZWY9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzTG9jYXRpb24oZSksdD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxlLmhyZWY9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5hc3NpZ25Mb2NhdGlvbj1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihlKSx0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGUuYXNzaWduKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCkpfSxnb29nLmRvbS5zYWZlLnJlcGxhY2VMb2NhdGlvbj1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihlKSx0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGUucmVwbGFjZShnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpKX0sZ29vZy5kb20uc2FmZS5vcGVuSW5XaW5kb3c9ZnVuY3Rpb24oZSx0LG8scixuKXtyZXR1cm4gZT1lIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/ZTpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChlKSwodHx8Z29vZy5nbG9iYWwpLm9wZW4oZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChlKSxvP2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChvKTpcIlwiLHIsbil9LGdvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nSHRtbD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZyhlLHQsXCJ0ZXh0L2h0bWxcIil9LGdvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZS5wYXJzZUZyb21TdHJpbmcoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKHQpLG8pfSxnb29nLmRvbS5zYWZlLmNyZWF0ZUltYWdlRnJvbUJsb2I9ZnVuY3Rpb24oZSl7aWYoIS9eaW1hZ2VcXC8uKi9nLnRlc3QoZS50eXBlKSl0aHJvdyBFcnJvcihcImdvb2cuZG9tLnNhZmUuY3JlYXRlSW1hZ2VGcm9tQmxvYiBvbmx5IGFjY2VwdHMgTUlNRSB0eXBlIGltYWdlLy4qLlwiKTt2YXIgdD1nb29nLmdsb2JhbC5VUkwuY3JlYXRlT2JqZWN0VVJMKGUpO3JldHVybihlPW5ldyBnb29nLmdsb2JhbC5JbWFnZSkub25sb2FkPWZ1bmN0aW9uKCl7Z29vZy5nbG9iYWwuVVJMLnJldm9rZU9iamVjdFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbWFnZVNyYyhlLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0KGdvb2cuc3RyaW5nLkNvbnN0LmZyb20oXCJJbWFnZSBibG9iIFVSTC5cIiksdCkpLGV9LGdvb2cuc3RyaW5nLkRFVEVDVF9ET1VCTEVfRVNDQVBJTkc9ITEsZ29vZy5zdHJpbmcuRk9SQ0VfTk9OX0RPTV9IVE1MX1VORVNDQVBJTkc9ITEsZ29vZy5zdHJpbmcuVW5pY29kZT17TkJTUDpcIsKgXCJ9LGdvb2cuc3RyaW5nLnN0YXJ0c1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuc3RhcnRzV2l0aCxnb29nLnN0cmluZy5lbmRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aCxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgsZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGgsZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlRXF1YWxzPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVxdWFscyxnb29nLnN0cmluZy5zdWJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPWUuc3BsaXQoXCIlc1wiKSxyPVwiXCIsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7bi5sZW5ndGgmJjE8by5sZW5ndGg7KXIrPW8uc2hpZnQoKStuLnNoaWZ0KCk7cmV0dXJuIHIrby5qb2luKFwiJXNcIil9LGdvb2cuc3RyaW5nLmNvbGxhcHNlV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxzXFx4YTBdKy9nLFwiIFwiKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfSxnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlPWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UsZ29vZy5zdHJpbmcuaXNFbXB0eVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gMD09ZS5sZW5ndGh9LGdvb2cuc3RyaW5nLmlzRW1wdHk9Z29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZSxnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlU2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5tYWtlU2FmZShlKSl9LGdvb2cuc3RyaW5nLmlzRW1wdHlTYWZlPWdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2VTYWZlLGdvb2cuc3RyaW5nLmlzQnJlYWtpbmdXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiEvW15cXHRcXG5cXHIgXS8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNBbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4hL1teYS16QS1aXS8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3JldHVybiEvW14wLTldLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc0FscGhhTnVtZXJpYz1mdW5jdGlvbihlKXtyZXR1cm4hL1teYS16QS1aMC05XS8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNTcGFjZT1mdW5jdGlvbihlKXtyZXR1cm5cIiBcIj09ZX0sZ29vZy5zdHJpbmcuaXNVbmljb2RlQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gMT09ZS5sZW5ndGgmJlwiIFwiPD1lJiZcIn5cIj49ZXx8XCLCgFwiPD1lJiZcIu+/vVwiPj1lfSxnb29nLnN0cmluZy5zdHJpcE5ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikrL2csXCIgXCIpfSxnb29nLnN0cmluZy5jYW5vbmljYWxpemVOZXdsaW5lcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csXCJcXG5cIil9LGdvb2cuc3RyaW5nLm5vcm1hbGl6ZVdoaXRlc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFx4YTB8XFxzL2csXCIgXCIpfSxnb29nLnN0cmluZy5ub3JtYWxpemVTcGFjZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFx4YTB8WyBcXHRdKy9nLFwiIFwiKX0sZ29vZy5zdHJpbmcuY29sbGFwc2VCcmVha2luZ1NwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFx0XFxyXFxuIF0rL2csXCIgXCIpLnJlcGxhY2UoL15bXFx0XFxyXFxuIF0rfFtcXHRcXHJcXG4gXSskL2csXCJcIil9LGdvb2cuc3RyaW5nLnRyaW09Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbSxnb29nLnN0cmluZy50cmltTGVmdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eW1xcc1xceGEwXSsvLFwiXCIpfSxnb29nLnN0cmluZy50cmltUmlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcc1xceGEwXSskLyxcIlwiKX0sZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZT1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlLGdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV89ZnVuY3Rpb24oZSx0LG8pe2lmKGU9PXQpcmV0dXJuIDA7aWYoIWUpcmV0dXJuLTE7aWYoIXQpcmV0dXJuIDE7Zm9yKHZhciByPWUudG9Mb3dlckNhc2UoKS5tYXRjaChvKSxuPXQudG9Mb3dlckNhc2UoKS5tYXRjaChvKSxpPU1hdGgubWluKHIubGVuZ3RoLG4ubGVuZ3RoKSxzPTA7czxpO3MrKyl7bz1yW3NdO3ZhciBhPW5bc107aWYobyE9YSlyZXR1cm4gZT1wYXJzZUludChvLDEwKSwhaXNOYU4oZSkmJih0PXBhcnNlSW50KGEsMTApLCFpc05hTih0KSYmZS10KT9lLXQ6bzxhPy0xOjF9cmV0dXJuIHIubGVuZ3RoIT1uLmxlbmd0aD9yLmxlbmd0aC1uLmxlbmd0aDplPHQ/LTE6MX0sZ29vZy5zdHJpbmcuaW50QXdhcmVDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV8oZSx0LC9cXGQrfFxcRCsvZyl9LGdvb2cuc3RyaW5nLmZsb2F0QXdhcmVDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV8oZSx0LC9cXGQrfFxcLlxcZCt8XFxEKy9nKX0sZ29vZy5zdHJpbmcubnVtZXJhdGVDb21wYXJlPWdvb2cuc3RyaW5nLmZsb2F0QXdhcmVDb21wYXJlLGdvb2cuc3RyaW5nLnVybEVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhlKSl9LGdvb2cuc3RyaW5nLnVybERlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUucmVwbGFjZSgvXFwrL2csXCIgXCIpKX0sZ29vZy5zdHJpbmcubmV3TGluZVRvQnI9Z29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnIsZ29vZy5zdHJpbmcuaHRtbEVzY2FwZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPWdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoZSx0KSxnb29nLnN0cmluZy5ERVRFQ1RfRE9VQkxFX0VTQ0FQSU5HJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuRV9SRV8sXCImIzEwMTtcIikpLGV9LGdvb2cuc3RyaW5nLkVfUkVfPS9lL2csZ29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllcz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZSxcIiZcIik/IWdvb2cuc3RyaW5nLkZPUkNFX05PTl9ET01fSFRNTF9VTkVTQ0FQSU5HJiZcImRvY3VtZW50XCJpbiBnb29nLmdsb2JhbD9nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzVXNpbmdEb21fKGUpOmdvb2cuc3RyaW5nLnVuZXNjYXBlUHVyZVhtbEVudGl0aWVzXyhlKTplfSxnb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzV2l0aERvY3VtZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGUsXCImXCIpP2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV8oZSx0KTplfSxnb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzVXNpbmdEb21fPWZ1bmN0aW9uKGUsdCl7dmFyIG89e1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIid9LHI9dD90LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik6Z29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gZS5yZXBsYWNlKGdvb2cuc3RyaW5nLkhUTUxfRU5USVRZX1BBVFRFUk5fLChmdW5jdGlvbihlLHQpe3ZhciBuPW9bZV07cmV0dXJuIG58fChcIiNcIj09dC5jaGFyQXQoMCkmJih0PU51bWJlcihcIjBcIit0LnN1YnN0cigxKSksaXNOYU4odCl8fChuPVN0cmluZy5mcm9tQ2hhckNvZGUodCkpKSxufHwoZ29vZy5kb20uc2FmZS5zZXRJbm5lckh0bWwocixnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZUh0bWxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3QoZ29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIlNpbmdsZSBIVE1MIGVudGl0eS5cIiksZStcIiBcIikpLG49ci5maXJzdENoaWxkLm5vZGVWYWx1ZS5zbGljZSgwLC0xKSksb1tlXT1uKX0pKX0sZ29vZy5zdHJpbmcudW5lc2NhcGVQdXJlWG1sRW50aXRpZXNfPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyYoW147XSspOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlXCJhbXBcIjpyZXR1cm5cIiZcIjtjYXNlXCJsdFwiOnJldHVyblwiPFwiO2Nhc2VcImd0XCI6cmV0dXJuXCI+XCI7Y2FzZVwicXVvdFwiOnJldHVybidcIic7ZGVmYXVsdDpyZXR1cm5cIiNcIiE9dC5jaGFyQXQoMCl8fCh0PU51bWJlcihcIjBcIit0LnN1YnN0cigxKSksaXNOYU4odCkpP2U6U3RyaW5nLmZyb21DaGFyQ29kZSh0KX19KSl9LGdvb2cuc3RyaW5nLkhUTUxfRU5USVRZX1BBVFRFUk5fPS8mKFteO1xcczwmXSspOz8vZyxnb29nLnN0cmluZy53aGl0ZXNwYWNlRXNjYXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLm5ld0xpbmVUb0JyKGUucmVwbGFjZSgvICAvZyxcIiAmIzE2MDtcIiksdCl9LGdvb2cuc3RyaW5nLnByZXNlcnZlU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhefFtcXG4gXSkgL2csXCIkMVwiK2dvb2cuc3RyaW5nLlVuaWNvZGUuTkJTUCl9LGdvb2cuc3RyaW5nLnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPXQubGVuZ3RoLHI9MDtyPG87cisrKXt2YXIgbj0xPT1vP3Q6dC5jaGFyQXQocik7aWYoZS5jaGFyQXQoMCk9PW4mJmUuY2hhckF0KGUubGVuZ3RoLTEpPT1uKXJldHVybiBlLnN1YnN0cmluZygxLGUubGVuZ3RoLTEpfXJldHVybiBlfSxnb29nLnN0cmluZy50cnVuY2F0ZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG8mJihlPWdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXMoZSkpLGUubGVuZ3RoPnQmJihlPWUuc3Vic3RyaW5nKDAsdC0zKStcIi4uLlwiKSxvJiYoZT1nb29nLnN0cmluZy5odG1sRXNjYXBlKGUpKSxlfSxnb29nLnN0cmluZy50cnVuY2F0ZU1pZGRsZT1mdW5jdGlvbihlLHQsbyxyKXtpZihvJiYoZT1nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzKGUpKSxyJiZlLmxlbmd0aD50KXtyPnQmJihyPXQpO3ZhciBuPWUubGVuZ3RoLXI7ZT1lLnN1YnN0cmluZygwLHQtcikrXCIuLi5cIitlLnN1YnN0cmluZyhuKX1lbHNlIGUubGVuZ3RoPnQmJihyPU1hdGguZmxvb3IodC8yKSxuPWUubGVuZ3RoLXIsZT1lLnN1YnN0cmluZygwLHIrdCUyKStcIi4uLlwiK2Uuc3Vic3RyaW5nKG4pKTtyZXR1cm4gbyYmKGU9Z29vZy5zdHJpbmcuaHRtbEVzY2FwZShlKSksZX0sZ29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzXz17XCJcXDBcIjpcIlxcXFwwXCIsXCJcXGJcIjpcIlxcXFxiXCIsXCJcXGZcIjpcIlxcXFxmXCIsXCJcXG5cIjpcIlxcXFxuXCIsXCJcXHJcIjpcIlxcXFxyXCIsXCJcXHRcIjpcIlxcXFx0XCIsXCJcXHZcIjpcIlxcXFx4MEJcIiwnXCInOidcXFxcXCInLFwiXFxcXFwiOlwiXFxcXFxcXFxcIixcIjxcIjpcIlxcXFx1MDAzQ1wifSxnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlXz17XCInXCI6XCJcXFxcJ1wifSxnb29nLnN0cmluZy5xdW90ZT1mdW5jdGlvbihlKXtlPVN0cmluZyhlKTtmb3IodmFyIHQ9WydcIiddLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZS5jaGFyQXQobyksbj1yLmNoYXJDb2RlQXQoMCk7dFtvKzFdPWdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc19bcl18fCgzMTxuJiYxMjc+bj9yOmdvb2cuc3RyaW5nLmVzY2FwZUNoYXIocikpfXJldHVybiB0LnB1c2goJ1wiJyksdC5qb2luKFwiXCIpfSxnb29nLnN0cmluZy5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MDtvPGUubGVuZ3RoO28rKyl0W29dPWdvb2cuc3RyaW5nLmVzY2FwZUNoYXIoZS5jaGFyQXQobykpO3JldHVybiB0LmpvaW4oXCJcIil9LGdvb2cuc3RyaW5nLmVzY2FwZUNoYXI9ZnVuY3Rpb24oZSl7aWYoZSBpbiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlXylyZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bZV07aWYoZSBpbiBnb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfKXJldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1tlXT1nb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfW2VdO3ZhciB0PWUuY2hhckNvZGVBdCgwKTtpZigzMTx0JiYxMjc+dCl2YXIgbz1lO2Vsc2UgMjU2PnQ/KG89XCJcXFxceFwiLCgxNj50fHwyNTY8dCkmJihvKz1cIjBcIikpOihvPVwiXFxcXHVcIiw0MDk2PnQmJihvKz1cIjBcIikpLG8rPXQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2VdPW99LGdvb2cuc3RyaW5nLmNvbnRhaW5zPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zLGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zLGdvb2cuc3RyaW5nLmNvdW50T2Y9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmdD9lLnNwbGl0KHQpLmxlbmd0aC0xOjB9LGdvb2cuc3RyaW5nLnJlbW92ZUF0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1lO3JldHVybiAwPD10JiZ0PGUubGVuZ3RoJiYwPG8mJihyPWUuc3Vic3RyKDAsdCkrZS5zdWJzdHIodCtvLGUubGVuZ3RoLXQtbykpLHJ9LGdvb2cuc3RyaW5nLnJlbW92ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnJlcGxhY2UodCxcIlwiKX0sZ29vZy5zdHJpbmcucmVtb3ZlQWxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9bmV3IFJlZ0V4cChnb29nLnN0cmluZy5yZWdFeHBFc2NhcGUodCksXCJnXCIpLGUucmVwbGFjZSh0LFwiXCIpfSxnb29nLnN0cmluZy5yZXBsYWNlQWxsPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdD1uZXcgUmVnRXhwKGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSh0KSxcImdcIiksZS5yZXBsYWNlKHQsby5yZXBsYWNlKC9cXCQvZyxcIiQkJCRcIikpfSxnb29nLnN0cmluZy5yZWdFeHBFc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC8oWy0oKVxcW1xcXXt9Kz8qLiRcXF58LDojPCFcXFxcXSkvZyxcIlxcXFwkMVwiKS5yZXBsYWNlKC9cXHgwOC9nLFwiXFxcXHgwOFwiKX0sZ29vZy5zdHJpbmcucmVwZWF0PVN0cmluZy5wcm90b3R5cGUucmVwZWF0P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwZWF0KHQpfTpmdW5jdGlvbihlLHQpe3JldHVybiBBcnJheSh0KzEpLmpvaW4oZSl9LGdvb2cuc3RyaW5nLnBhZE51bWJlcj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuLTE9PShvPShlPWdvb2cuaXNEZWYobyk/ZS50b0ZpeGVkKG8pOlN0cmluZyhlKSkuaW5kZXhPZihcIi5cIikpJiYobz1lLmxlbmd0aCksZ29vZy5zdHJpbmcucmVwZWF0KFwiMFwiLE1hdGgubWF4KDAsdC1vKSkrZX0sZ29vZy5zdHJpbmcubWFrZVNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpTdHJpbmcoZSl9LGdvb2cuc3RyaW5nLmJ1aWxkU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cyxcIlwiKX0sZ29vZy5zdHJpbmcuZ2V0UmFuZG9tU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNikrTWF0aC5hYnMoTWF0aC5mbG9vcigyMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCkpXmdvb2cubm93KCkpLnRvU3RyaW5nKDM2KX0sZ29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucyxnb29nLnN0cmluZy5oYXNoQ29kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxvPTA7bzxlLmxlbmd0aDsrK28pdD0zMSp0K2UuY2hhckNvZGVBdChvKT4+PjA7cmV0dXJuIHR9LGdvb2cuc3RyaW5nLnVuaXF1ZVN0cmluZ0NvdW50ZXJfPTIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKXwwLGdvb2cuc3RyaW5nLmNyZWF0ZVVuaXF1ZVN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiZ29vZ19cIitnb29nLnN0cmluZy51bmlxdWVTdHJpbmdDb3VudGVyXysrfSxnb29nLnN0cmluZy50b051bWJlcj1mdW5jdGlvbihlKXt2YXIgdD1OdW1iZXIoZSk7cmV0dXJuIDA9PXQmJmdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2UoZSk/TmFOOnR9LGdvb2cuc3RyaW5nLmlzTG93ZXJDYW1lbENhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuL15bYS16XSsoW0EtWl1bYS16XSopKiQvLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzVXBwZXJDYW1lbENhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW0EtWl1bYS16XSopKyQvLnRlc3QoZSl9LGdvb2cuc3RyaW5nLnRvQ2FtZWxDYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgvXFwtKFthLXpdKS9nLChmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9KSl9LGdvb2cuc3RyaW5nLnRvU2VsZWN0b3JDYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgvKFtBLVpdKS9nLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCl9LGdvb2cuc3RyaW5nLnRvVGl0bGVDYXNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9Z29vZy5pc1N0cmluZyh0KT9nb29nLnN0cmluZy5yZWdFeHBFc2NhcGUodCk6XCJcXFxcc1wiLGUucmVwbGFjZShuZXcgUmVnRXhwKFwiKF5cIisodD9cInxbXCIrdCtcIl0rXCI6XCJcIikrXCIpKFthLXpdKVwiLFwiZ1wiKSwoZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0K28udG9VcHBlckNhc2UoKX0pKX0sZ29vZy5zdHJpbmcuY2FwaXRhbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUuY2hhckF0KDApKS50b1VwcGVyQ2FzZSgpK1N0cmluZyhlLnN1YnN0cigxKSkudG9Mb3dlckNhc2UoKX0sZ29vZy5zdHJpbmcucGFyc2VJbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGUpJiYoZT1TdHJpbmcoZSkpLGdvb2cuaXNTdHJpbmcoZSk/L15cXHMqLT8weC9pLnRlc3QoZSk/cGFyc2VJbnQoZSwxNik6cGFyc2VJbnQoZSwxMCk6TmFOfSxnb29nLnN0cmluZy5zcGxpdExpbWl0PWZ1bmN0aW9uKGUsdCxvKXtlPWUuc3BsaXQodCk7Zm9yKHZhciByPVtdOzA8byYmZS5sZW5ndGg7KXIucHVzaChlLnNoaWZ0KCkpLG8tLTtyZXR1cm4gZS5sZW5ndGgmJnIucHVzaChlLmpvaW4odCkpLHJ9LGdvb2cuc3RyaW5nLmxhc3RDb21wb25lbnQ9ZnVuY3Rpb24oZSx0KXtpZighdClyZXR1cm4gZTtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIG89LTEscj0wO3I8dC5sZW5ndGg7cisrKWlmKFwiXCIhPXRbcl0pe3ZhciBuPWUubGFzdEluZGV4T2YodFtyXSk7bj5vJiYobz1uKX1yZXR1cm4tMT09bz9lOmUuc2xpY2UobysxKX0sZ29vZy5zdHJpbmcuZWRpdERpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG89W10scj1bXTtpZihlPT10KXJldHVybiAwO2lmKCFlLmxlbmd0aHx8IXQubGVuZ3RoKXJldHVybiBNYXRoLm1heChlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCsxO24rKylvW25dPW47Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7clswXT1uKzE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspcltpKzFdPU1hdGgubWluKHJbaV0rMSxvW2krMV0rMSxvW2ldK051bWJlcihlW25dIT10W2ldKSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldPXJbaV19cmV0dXJuIHJbdC5sZW5ndGhdfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZT17fSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1ByZXN0bz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJQcmVzdG9cIil9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzVHJpZGVudD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJUcmlkZW50XCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNU0lFXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRWRnZVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNXZWJLaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIldlYktpdFwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0dlY2tvPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkdlY2tvXCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNXZWJLaXQoKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzVHJpZGVudCgpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCl9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7aWYoZSl7ZT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZXh0cmFjdFZlcnNpb25UdXBsZXMoZSk7dmFyIHQsbz1nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRFbmdpbmVUdXBsZV8oZSk7aWYobylyZXR1cm5cIkdlY2tvXCI9PW9bMF0/Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbkZvcktleV8oZSxcIkZpcmVmb3hcIik6b1sxXTtpZigoZT1lWzBdKSYmKHQ9ZVsyXSkmJih0PS9UcmlkZW50XFwvKFteXFxzO10rKS8uZXhlYyh0KSkpcmV0dXJuIHRbMV19cmV0dXJuXCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0RW5naW5lVHVwbGVfPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKSlyZXR1cm4gZVsxXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG89ZVt0XTtpZihcIkVkZ2VcIj09b1swXSlyZXR1cm4gb319LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbigpLGUpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uRm9yS2V5Xz1mdW5jdGlvbihlLHQpe3JldHVybihlPWdvb2cuYXJyYXkuZmluZChlLChmdW5jdGlvbihlKXtyZXR1cm4gdD09ZVswXX0pKSkmJmVbMV18fFwiXCJ9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm09e30sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0FuZHJvaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQW5kcm9pZFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2Q9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBvZFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwaG9uZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGhvbmVcIikmJiFnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUG9kXCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBhZFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBhZFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCl9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTWFjaW50b3NoXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTGludXg9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTGludXhcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIldpbmRvd3NcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDck9TXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lY2FzdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDcktleVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJLYWlPU1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0dvMlBob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJHQUZQXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmdldFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCksdD1cIlwiO3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cygpP3Q9KGU9KHQ9L1dpbmRvd3MgKD86TlR8UGhvbmUpIChbMC05Ll0rKS8pLmV4ZWMoZSkpP2VbMV06XCIwLjBcIjpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCk/dD0oZT0odD0vKD86aVBob25lfGlQb2R8aVBhZHxDUFUpXFxzK09TXFxzKyhcXFMrKS8pLmV4ZWMoZSkpJiZlWzFdLnJlcGxhY2UoL18vZyxcIi5cIik6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc01hY2ludG9zaCgpP3Q9KGU9KHQ9L01hYyBPUyBYIChbMC05Xy5dKykvKS5leGVjKGUpKT9lWzFdLnJlcGxhY2UoL18vZyxcIi5cIik6XCIxMFwiOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNLYWlPUygpP3Q9KGU9KHQ9Lyg/OkthaU9TKVxcLyhcXFMrKS9pKS5leGVjKGUpKSYmZVsxXTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQW5kcm9pZCgpP3Q9KGU9KHQ9L0FuZHJvaWRcXHMrKFteXFwpO10rKShcXCl8OykvKS5leGVjKGUpKSYmZVsxXTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lT1MoKSYmKHQ9KGU9KHQ9Lyg/OkNyT1NcXHMrKD86aTY4Nnx4ODZfNjQpXFxzKyhbMC05Ll0rKSkvKS5leGVjKGUpKSYmZVsxXSksdHx8XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uZ2V0VmVyc2lvbigpLGUpfSxnb29nLnJlZmxlY3Q9e30sZ29vZy5yZWZsZWN0Lm9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiB0fSxnb29nLnJlZmxlY3Qub2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sZ29vZy5yZWZsZWN0LnNpbmtWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5yZWZsZWN0LnNpbmtWYWx1ZVtcIiBcIl0oZSksZX0sZ29vZy5yZWZsZWN0LnNpbmtWYWx1ZVtcIiBcIl09Z29vZy5udWxsRnVuY3Rpb24sZ29vZy5yZWZsZWN0LmNhbkFjY2Vzc1Byb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBnb29nLnJlZmxlY3Quc2lua1ZhbHVlKGVbdF0pLCEwfWNhdGNoKGUpe31yZXR1cm4hMX0sZ29vZy5yZWZsZWN0LmNhY2hlPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiByPXI/cih0KTp0LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpP2Vbcl06ZVtyXT1vKHQpfSxnb29nLnVzZXJBZ2VudD17fSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSUU9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0U9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVQ9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVQ9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9BTllfVkVSU0lPTj0hMSxnb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz1nb29nLnVzZXJBZ2VudC5BU1NVTUVfSUV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9FREdFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfR0VDS098fGdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0VCS0lUfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkEsZ29vZy51c2VyQWdlbnQuZ2V0VXNlckFnZW50U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKX0sZ29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5nbG9iYWwubmF2aWdhdG9yfHxudWxsfSxnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKX0sZ29vZy51c2VyQWdlbnQuT1BFUkE9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhKCksZ29vZy51c2VyQWdlbnQuSUU9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCksZ29vZy51c2VyQWdlbnQuRURHRT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRTpnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKSxnb29nLnVzZXJBZ2VudC5FREdFX09SX0lFPWdvb2cudXNlckFnZW50LkVER0V8fGdvb2cudXNlckFnZW50LklFLGdvb2cudXNlckFnZW50LkdFQ0tPPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLTzpnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0dlY2tvKCksZ29vZy51c2VyQWdlbnQuV0VCS0lUPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0KCksZ29vZy51c2VyQWdlbnQuaXNNb2JpbGVfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cudXNlckFnZW50LldFQktJVCYmZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTW9iaWxlXCIpfSxnb29nLnVzZXJBZ2VudC5NT0JJTEU9Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LmlzTW9iaWxlXygpLGdvb2cudXNlckFnZW50LlNBRkFSST1nb29nLnVzZXJBZ2VudC5XRUJLSVQsZ29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lUGxhdGZvcm1fPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKTtyZXR1cm4gZSYmZS5wbGF0Zm9ybXx8XCJcIn0sZ29vZy51c2VyQWdlbnQuUExBVEZPUk09Z29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lUGxhdGZvcm1fKCksZ29vZy51c2VyQWdlbnQuQVNTVU1FX01BQz0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0lORE9XUz0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTElOVVg9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX1gxMT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5EUk9JRD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9LQUlPUz0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfR08yUEhPTkU9ITEsZ29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9NQUN8fGdvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTElOVVh8fGdvb2cudXNlckFnZW50LkFTU1VNRV9YMTF8fGdvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0QsZ29vZy51c2VyQWdlbnQuTUFDPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2goKSxnb29nLnVzZXJBZ2VudC5XSU5ET1dTPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfV0lORE9XUzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cygpLGdvb2cudXNlckFnZW50LmlzTGVnYWN5TGludXhfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNMaW51eCgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lT1MoKX0sZ29vZy51c2VyQWdlbnQuTElOVVg9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWDpnb29nLnVzZXJBZ2VudC5pc0xlZ2FjeUxpbnV4XygpLGdvb2cudXNlckFnZW50LmlzWDExXz1mdW5jdGlvbigpe3ZhciBlPWdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCk7cmV0dXJuISFlJiZnb29nLnN0cmluZy5jb250YWlucyhlLmFwcFZlcnNpb258fFwiXCIsXCJYMTFcIil9LGdvb2cudXNlckFnZW50LlgxMT1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX1gxMTpnb29nLnVzZXJBZ2VudC5pc1gxMV8oKSxnb29nLnVzZXJBZ2VudC5BTkRST0lEPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5EUk9JRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQW5kcm9pZCgpLGdvb2cudXNlckFnZW50LklQSE9ORT1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCksZ29vZy51c2VyQWdlbnQuSVBBRD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwYWQoKSxnb29nLnVzZXJBZ2VudC5JUE9EPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZCgpLGdvb2cudXNlckFnZW50LklPUz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKSxnb29nLnVzZXJBZ2VudC5LQUlPUz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0tBSU9TOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNLYWlPUygpLGdvb2cudXNlckFnZW50LkdPMlBIT05FPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfR08yUEhPTkU6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0dvMlBob25lKCksZ29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lVmVyc2lvbl89ZnVuY3Rpb24oKXt2YXIgZT1cIlwiLHQ9Z29vZy51c2VyQWdlbnQuZ2V0VmVyc2lvblJlZ2V4UmVzdWx0XygpO3JldHVybiB0JiYoZT10P3RbMV06XCJcIiksZ29vZy51c2VyQWdlbnQuSUUmJihudWxsIT0odD1nb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfKCkpJiZ0PnBhcnNlRmxvYXQoZSkpP1N0cmluZyh0KTplfSxnb29nLnVzZXJBZ2VudC5nZXRWZXJzaW9uUmVnZXhSZXN1bHRfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy51c2VyQWdlbnQuZ2V0VXNlckFnZW50U3RyaW5nKCk7cmV0dXJuIGdvb2cudXNlckFnZW50LkdFQ0tPPy9ydjooW15cXCk7XSspKFxcKXw7KS8uZXhlYyhlKTpnb29nLnVzZXJBZ2VudC5FREdFPy9FZGdlXFwvKFtcXGRcXC5dKykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuSUU/L1xcYig/Ok1TSUV8cnYpWzogXShbXlxcKTtdKykoXFwpfDspLy5leGVjKGUpOmdvb2cudXNlckFnZW50LldFQktJVD8vV2ViS2l0XFwvKFxcUyspLy5leGVjKGUpOmdvb2cudXNlckFnZW50Lk9QRVJBPy8oPzpWZXJzaW9uKVsgXFwvXT8oXFxTKykvLmV4ZWMoZSk6dm9pZCAwfSxnb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIGU/ZS5kb2N1bWVudE1vZGU6dm9pZCAwfSxnb29nLnVzZXJBZ2VudC5WRVJTSU9OPWdvb2cudXNlckFnZW50LmRldGVybWluZVZlcnNpb25fKCksZ29vZy51c2VyQWdlbnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZSx0KX0sZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXJDYWNoZV89e30sZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cudXNlckFnZW50LkFTU1VNRV9BTllfVkVSU0lPTnx8Z29vZy5yZWZsZWN0LmNhY2hlKGdvb2cudXNlckFnZW50LmlzVmVyc2lvbk9ySGlnaGVyQ2FjaGVfLGUsKGZ1bmN0aW9uKCl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLnVzZXJBZ2VudC5WRVJTSU9OLGUpfSkpfSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb249Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXIsZ29vZy51c2VyQWdlbnQuaXNEb2N1bWVudE1vZGVPckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGdvb2cudXNlckFnZW50LkRPQ1VNRU5UX01PREUpPj1lfSxnb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZT1nb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZU9ySGlnaGVyLGdvb2cudXNlckFnZW50LkRPQ1VNRU5UX01PREU9ZnVuY3Rpb24oKXtpZihnb29nLmdsb2JhbC5kb2N1bWVudCYmZ29vZy51c2VyQWdlbnQuSUUpcmV0dXJuIGdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV8oKX0oKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0PXt9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1g9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUQ9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9DSFJPTUU9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJLGdvb2cudXNlckFnZW50LnByb2R1Y3QuT1BFUkE9Z29vZy51c2VyQWdlbnQuT1BFUkEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JRT1nb29nLnVzZXJBZ2VudC5JRSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkVER0U9Z29vZy51c2VyQWdlbnQuRURHRSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkZJUkVGT1g9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzSXBob25lT3JJcG9kXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCl9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuSVBIT05FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfKCksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JUEFEPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQU5EUk9JRD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQW5kcm9pZEJyb3dzZXIoKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkNIUk9NRT1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzU2FmYXJpRGVza3RvcF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpKCkmJiFnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCl9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNTYWZhcmlEZXNrdG9wXygpLGdvb2cuY3J5cHQuYmFzZTY0PXt9LGdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCIsZ29vZy5jcnlwdC5iYXNlNjQuRU5DT0RFRF9WQUxTPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIisvPVwiLGdvb2cuY3J5cHQuYmFzZTY0LkVOQ09ERURfVkFMU19XRUJTQUZFPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIi1fLlwiLGdvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0PXtERUZBVUxUOjAsTk9fUEFERElORzoxLFdFQlNBRkU6MixXRUJTQUZFX0RPVF9QQURESU5HOjMsV0VCU0FGRV9OT19QQURESU5HOjR9LGdvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc189XCI9LlwiLGdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ189ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGdvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc18sZSl9LGdvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzXz17fTtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz1udWxsLGdvb2cuY3J5cHQuYmFzZTY0LkFTU1VNRV9OQVRJVkVfU1VQUE9SVF89Z29vZy51c2VyQWdlbnQuR0VDS098fGdvb2cudXNlckFnZW50LldFQktJVCYmIWdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJfHxnb29nLnVzZXJBZ2VudC5PUEVSQSxnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0VOQ09ERV89Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUX3x8XCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYnRvYSxnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0RFQ09ERV89Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUX3x8IWdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJJiYhZ29vZy51c2VyQWdlbnQuSUUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGdvb2cuZ2xvYmFsLmF0b2IsZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzQXJyYXlMaWtlKGUpLFwiZW5jb2RlQnl0ZUFycmF5IHRha2VzIGFuIGFycmF5IGFzIGEgcGFyYW1ldGVyXCIpLHZvaWQgMD09PXQmJih0PWdvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0LkRFRkFVTFQpLGdvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCksdD1nb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bdF07Zm9yKHZhciBvPVtdLHI9MDtyPGUubGVuZ3RoO3IrPTMpe3ZhciBuPWVbcl0saT1yKzE8ZS5sZW5ndGgscz1pP2VbcisxXTowLGE9cisyPGUubGVuZ3RoLHA9YT9lW3IrMl06MCxnPW4+PjI7bj0oMyZuKTw8NHxzPj40LHM9KDE1JnMpPDwyfHA+PjYscCY9NjMsYXx8KHA9NjQsaXx8KHM9NjQpKSxvLnB1c2godFtnXSx0W25dLHRbc118fFwiXCIsdFtwXXx8XCJcIil9cmV0dXJuIG8uam9pbihcIlwiKX0sZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlU3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXyYmIXQ/Z29vZy5nbG9iYWwuYnRvYShlKTpnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoZ29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheShlKSx0KX0sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9ERUNPREVfJiYhdClyZXR1cm4gZ29vZy5nbG9iYWwuYXRvYihlKTt2YXIgbz1cIlwiO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7bys9U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pKSxvfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlLHQpe3ZhciBvPVtdO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7by5wdXNoKGUpfSkpLG99LGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnVzZXJBZ2VudC5JRXx8Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXIoXCIxMFwiKSxcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXNcIik7dmFyIHQ9ZS5sZW5ndGgsbz0zKnQvNDtvJTM/bz1NYXRoLmZsb29yKG8pOmdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ18oZVt0LTFdKSYmKG89Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhlW3QtMl0pP28tMjpvLTEpO3ZhciByPW5ldyBVaW50OEFycmF5KG8pLG49MDtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfKGUsKGZ1bmN0aW9uKGUpe3JbbisrXT1lfSkpLHIuc3ViYXJyYXkoMCxuKX0sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyh0KXtmb3IoO3I8ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChyKyspLG49Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bb107aWYobnVsbCE9bilyZXR1cm4gbjtpZighZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShvKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK28pfXJldHVybiB0fWdvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCk7Zm9yKHZhciByPTA7Oyl7dmFyIG49bygtMSksaT1vKDApLHM9byg2NCksYT1vKDY0KTtpZig2ND09PWEmJi0xPT09bilicmVhazt0KG48PDJ8aT4+NCksNjQhPXMmJih0KGk8PDQmMjQwfHM+PjIpLDY0IT1hJiZ0KHM8PDYmMTkyfGEpKX19LGdvb2cuY3J5cHQuYmFzZTY0LmluaXRfPWZ1bmN0aW9uKCl7aWYoIWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfKXtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz17fTtmb3IodmFyIGU9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fLnNwbGl0KFwiXCIpLHQ9W1wiKy89XCIsXCIrL1wiLFwiLV89XCIsXCItXy5cIixcIi1fXCJdLG89MDs1Pm87bysrKXt2YXIgcj1lLmNvbmNhdCh0W29dLnNwbGl0KFwiXCIpKTtnb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bb109cjtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfW2ldO3ZvaWQgMD09PXM/Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9baV09bjpnb29nLmFzc2VydHMuYXNzZXJ0KHM9PT1uKX19fX0sanNwYi51dGlscz17fSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdFVpbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD1lPj4+MDtlPU1hdGguZmxvb3IoKGUtdCkvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PXQsanNwYi51dGlscy5zcGxpdDY0SGlnaD1lfSxqc3BiLnV0aWxzLnNwbGl0SW50NjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lLG89KGU9TWF0aC5hYnMoZSkpPj4+MDtlPU1hdGguZmxvb3IoKGUtbykvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSxlPj4+PTAsdCYmKGU9fmU+Pj4wLDQyOTQ5NjcyOTU8KG89MSsofm8+Pj4wKSkmJihvPTAsNDI5NDk2NzI5NTwrK2UmJihlPTApKSksanNwYi51dGlscy5zcGxpdDY0TG93PW8sanNwYi51dGlscy5zcGxpdDY0SGlnaD1lfSxqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lO2U9MipNYXRoLmFicyhlKSxqc3BiLnV0aWxzLnNwbGl0VWludDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7dCYmKDA9PWU/MD09bz9vPWU9NDI5NDk2NzI5NTooby0tLGU9NDI5NDk2NzI5NSk6ZS0tKSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9ZSxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPW99LGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyPWZ1bmN0aW9uKGUpe3ZhciB0PTA+ZT8xOjA7aWYoMD09PShlPXQ/LWU6ZSkpMDwxL2U/KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MCk6KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MjE0NzQ4MzY0OCk7ZWxzZSBpZihpc05hTihlKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PTIxNDc0ODM2NDc7ZWxzZSBpZihlPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KHQ8PDMxfDIxMzkwOTUwNDApPj4+MDtlbHNlIGlmKGU8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NSU4pZT1NYXRoLnJvdW5kKGUvTWF0aC5wb3coMiwtMTQ5KSksanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8ZSk+Pj4wO2Vsc2V7dmFyIG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMik7ZSo9TWF0aC5wb3coMiwtbyksZT04Mzg4NjA3Jk1hdGgucm91bmQoZSpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMjMpLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KHQ8PDMxfG8rMTI3PDwyM3xlKT4+PjB9fSxqc3BiLnV0aWxzLnNwbGl0RmxvYXQ2ND1mdW5jdGlvbihlKXt2YXIgdD0wPmU/MTowO2lmKDA9PT0oZT10Py1lOmUpKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MDwxL2U/MDoyMTQ3NDgzNjQ4LGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wO2Vsc2UgaWYoaXNOYU4oZSkpanNwYi51dGlscy5zcGxpdDY0SGlnaD0yMTQ3NDgzNjQ3LGpzcGIudXRpbHMuc3BsaXQ2NExvdz00Mjk0OTY3Mjk1O2Vsc2UgaWYoZT5qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWClqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPSh0PDwzMXwyMTQ2NDM1MDcyKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PTA7ZWxzZSBpZihlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUlOKXt2YXIgbz1lL01hdGgucG93KDIsLTEwNzQpO2U9by9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIsanNwYi51dGlscy5zcGxpdDY0SGlnaD0odDw8MzF8ZSk+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz1vPj4+MH1lbHNle3ZhciByPTA7aWYoMjw9KG89ZSkpZm9yKDsyPD1vJiYxMDIzPnI7KXIrKyxvLz0yO2Vsc2UgZm9yKDsxPm8mJi0xMDIyPHI7KW8qPTIsci0tO2U9KG89ZSpNYXRoLnBvdygyLC1yKSkqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwJjEwNDg1NzUsbz1vKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mj4+PjAsanNwYi51dGlscy5zcGxpdDY0SGlnaD0odDw8MzF8cisxMDIzPDwyMHxlKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PW99fSxqc3BiLnV0aWxzLnNwbGl0SGFzaDY0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckNvZGVBdCgwKSxvPWUuY2hhckNvZGVBdCgxKSxyPWUuY2hhckNvZGVBdCgyKSxuPWUuY2hhckNvZGVBdCgzKSxpPWUuY2hhckNvZGVBdCg0KSxzPWUuY2hhckNvZGVBdCg1KSxhPWUuY2hhckNvZGVBdCg2KTtlPWUuY2hhckNvZGVBdCg3KSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9dCsobzw8OCkrKHI8PDE2KSsobjw8MjQpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWkrKHM8PDgpKyhhPDwxNikrKGU8PDI0KT4+PjB9LGpzcGIudXRpbHMuam9pblVpbnQ2ND1mdW5jdGlvbihlLHQpe3JldHVybiB0KmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMisoZT4+PjApfSxqc3BiLnV0aWxzLmpvaW5JbnQ2ND1mdW5jdGlvbihlLHQpe3ZhciBvPTIxNDc0ODM2NDgmdDtyZXR1cm4gbyYmKHQ9fnQ+Pj4wLDA9PShlPTErfmU+Pj4wKSYmKHQ9dCsxPj4+MCkpLGU9anNwYi51dGlscy5qb2luVWludDY0KGUsdCksbz8tZTplfSxqc3BiLnV0aWxzLnRvWmlnemFnNjQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPXQ+PjMxO3JldHVybiBvKGU8PDFeciwodDw8MXxlPj4+MzEpXnIpfSxqc3BiLnV0aWxzLmpvaW5aaWd6YWc2ND1mdW5jdGlvbihlLHQpe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NChlLHQsanNwYi51dGlscy5qb2luSW50NjQpfSxqc3BiLnV0aWxzLmZyb21aaWd6YWc2ND1mdW5jdGlvbihlLHQsbyl7dmFyIHI9LSgxJmUpO3JldHVybiBvKChlPj4+MXx0PDwzMSlecix0Pj4+MV5yKX0sanNwYi51dGlscy5qb2luRmxvYXQzMj1mdW5jdGlvbihlLHQpe3Q9MiooZT4+MzEpKzE7dmFyIG89ZT4+PjIzJjI1NTtyZXR1cm4gZSY9ODM4ODYwNywyNTU9PW8/ZT9OYU46MS8wKnQ6MD09bz90Kk1hdGgucG93KDIsLTE0OSkqZTp0Kk1hdGgucG93KDIsby0xNTApKihlK01hdGgucG93KDIsMjMpKX0sanNwYi51dGlscy5qb2luRmxvYXQ2ND1mdW5jdGlvbihlLHQpe3ZhciBvPTIqKHQ+PjMxKSsxLHI9dD4+PjIwJjIwNDc7cmV0dXJuIGU9anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKigxMDQ4NTc1JnQpK2UsMjA0Nz09cj9lP05hTjoxLzAqbzowPT1yP28qTWF0aC5wb3coMiwtMTA3NCkqZTpvKk1hdGgucG93KDIsci0xMDc1KSooZStqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNTIpfSxqc3BiLnV0aWxzLmpvaW5IYXNoNjQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj4+MCYyNTUsZT4+PjgmMjU1LGU+Pj4xNiYyNTUsZT4+PjI0JjI1NSx0Pj4+MCYyNTUsdD4+PjgmMjU1LHQ+Pj4xNiYyNTUsdD4+PjI0JjI1NSl9LGpzcGIudXRpbHMuRElHSVRTPVwiMDEyMzQ1Njc4OWFiY2RlZlwiLnNwbGl0KFwiXCIpLGpzcGIudXRpbHMuWkVST19DSEFSX0NPREVfPTQ4LGpzcGIudXRpbHMuQV9DSEFSX0NPREVfPTk3LGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZT1lP1N0cmluZyhlKTpcIlwiLHQ/XCIwMDAwMDAwXCIuc2xpY2UoZS5sZW5ndGgpK2U6ZX1pZigyMDk3MTUxPj10KXJldHVyblwiXCIranNwYi51dGlscy5qb2luVWludDY0KGUsdCk7dmFyIHI9KGU+Pj4yNHx0PDw4KT4+PjAmMTY3NzcyMTU7cmV0dXJuIGU9KDE2Nzc3MjE1JmUpKzY3NzcyMTYqcis2NzEwNjU2Kih0PXQ+PjE2JjY1NTM1KSxyKz04MTQ3NDk3KnQsdCo9MiwxZTc8PWUmJihyKz1NYXRoLmZsb29yKGUvMWU3KSxlJT0xZTcpLDFlNzw9ciYmKHQrPU1hdGguZmxvb3Ioci8xZTcpLHIlPTFlNyksbyh0LDApK28ocix0KStvKGUsMSl9LGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbz0yMTQ3NDgzNjQ4JnQ7cmV0dXJuIG8mJih0PX50KygwPT0oZT0xK35lPj4+MCk/MTowKT4+PjApLGU9anNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGUsdCksbz9cIi1cIitlOmV9LGpzcGIudXRpbHMuaGFzaDY0VG9EZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGUsdCl7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSxlPWpzcGIudXRpbHMuc3BsaXQ2NExvdzt2YXIgbz1qc3BiLnV0aWxzLnNwbGl0NjRIaWdoO3JldHVybiB0P2pzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcoZSxvKTpqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoZSxvKX0sanNwYi51dGlscy5oYXNoNjRBcnJheVRvRGVjaW1hbFN0cmluZ3M9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89QXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKylvW3JdPWpzcGIudXRpbHMuaGFzaDY0VG9EZWNpbWFsU3RyaW5nKGVbcl0sdCk7cmV0dXJuIG99LGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG89MDs4Pm8mJigxIT09ZXx8MDx0KTtvKyspdD1lKnJbb10rdCxyW29dPTI1NSZ0LHQ+Pj49OH1nb29nLmFzc2VydHMuYXNzZXJ0KDA8ZS5sZW5ndGgpO3ZhciBvPSExO1wiLVwiPT09ZVswXSYmKG89ITAsZT1lLnNsaWNlKDEpKTtmb3IodmFyIHI9WzAsMCwwLDAsMCwwLDAsMF0sbj0wO248ZS5sZW5ndGg7bisrKXQoMTAsZS5jaGFyQ29kZUF0KG4pLWpzcGIudXRpbHMuWkVST19DSEFSX0NPREVfKTtyZXR1cm4gbyYmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7OD5lO2UrKylyW2VdPTI1NSZ+cltlXX0oKSx0KDEsMSkpLGdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmcocil9LGpzcGIudXRpbHMuc3BsaXREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGUpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoZSkpfSxqc3BiLnV0aWxzLnRvSGV4RGlnaXRfPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDEwPmU/anNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV8rZTpqc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXy0xMCtlKX0sanNwYi51dGlscy5mcm9tSGV4Q2hhckNvZGVfPWZ1bmN0aW9uKGUpe3JldHVybiBlPj1qc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXz9lLWpzcGIudXRpbHMuQV9DSEFSX0NPREVfKzEwOmUtanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV99LGpzcGIudXRpbHMuaGFzaDY0VG9IZXhTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9QXJyYXkoMTgpO3RbMF09XCIwXCIsdFsxXT1cInhcIjtmb3IodmFyIG89MDs4Pm87bysrKXt2YXIgcj1lLmNoYXJDb2RlQXQoNy1vKTt0WzIqbysyXT1qc3BiLnV0aWxzLnRvSGV4RGlnaXRfKHI+PjQpLHRbMipvKzNdPWpzcGIudXRpbHMudG9IZXhEaWdpdF8oMTUmcil9cmV0dXJuIHQuam9pbihcIlwiKX0sanNwYi51dGlscy5oZXhTdHJpbmdUb0hhc2g2ND1mdW5jdGlvbihlKXtlPWUudG9Mb3dlckNhc2UoKSxnb29nLmFzc2VydHMuYXNzZXJ0KDE4PT1lLmxlbmd0aCksZ29vZy5hc3NlcnRzLmFzc2VydChcIjBcIj09ZVswXSksZ29vZy5hc3NlcnRzLmFzc2VydChcInhcIj09ZVsxXSk7Zm9yKHZhciB0PVwiXCIsbz0wOzg+bztvKyspe3ZhciByPWpzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXyhlLmNoYXJDb2RlQXQoMipvKzIpKSxuPWpzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXyhlLmNoYXJDb2RlQXQoMipvKzMpKTt0PVN0cmluZy5mcm9tQ2hhckNvZGUoMTYqcituKSt0fXJldHVybiB0fSxqc3BiLnV0aWxzLmhhc2g2NFRvTnVtYmVyPWZ1bmN0aW9uKGUsdCl7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSxlPWpzcGIudXRpbHMuc3BsaXQ2NExvdzt2YXIgbz1qc3BiLnV0aWxzLnNwbGl0NjRIaWdoO3JldHVybiB0P2pzcGIudXRpbHMuam9pbkludDY0KGUsbyk6anNwYi51dGlscy5qb2luVWludDY0KGUsbyl9LGpzcGIudXRpbHMubnVtYmVyVG9IYXNoNjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGpzcGIudXRpbHMuc3BsaXRJbnQ2NChlKSxqc3BiLnV0aWxzLmpvaW5IYXNoNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLnV0aWxzLmNvdW50VmFyaW50cz1mdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPTAsbj10O248bztuKyspcis9ZVtuXT4+NztyZXR1cm4gby10LXJ9LGpzcGIudXRpbHMuY291bnRWYXJpbnRGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49MDtpZigxMjg+KHI9OCpyK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCkpZm9yKDt0PG8mJmVbdCsrXT09cjspZm9yKG4rKzs7KXt2YXIgaT1lW3QrK107aWYoMD09KDEyOCZpKSlicmVha31lbHNlIGZvcig7dDxvOyl7Zm9yKGk9cjsxMjg8aTspe2lmKGVbdF0hPSgxMjcmaXwxMjgpKXJldHVybiBuO3QrKyxpPj49N31pZihlW3QrK10hPWkpYnJlYWs7Zm9yKG4rKzswIT0oMTI4JihpPWVbdCsrXSkpOyk7fXJldHVybiBufSxqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfPWZ1bmN0aW9uKGUsdCxvLHIsbil7dmFyIGk9MDtpZigxMjg+cilmb3IoO3Q8byYmZVt0KytdPT1yOylpKyssdCs9bjtlbHNlIGZvcig7dDxvOyl7Zm9yKHZhciBzPXI7MTI4PHM7KXtpZihlW3QrK10hPSgxMjcmc3wxMjgpKXJldHVybiBpO3M+Pj03fWlmKGVbdCsrXSE9cylicmVhaztpKyssdCs9bn1yZXR1cm4gaX0sanNwYi51dGlscy5jb3VudEZpeGVkMzJGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc18oZSx0LG8sOCpyK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIsNCl9LGpzcGIudXRpbHMuY291bnRGaXhlZDY0RmllbGRzPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGUsdCxvLDgqcitqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0LDgpfSxqc3BiLnV0aWxzLmNvdW50RGVsaW1pdGVkRmllbGRzPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPTA7Zm9yKHI9OCpyK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRDt0PG87KXtmb3IodmFyIGk9cjsxMjg8aTspe2lmKGVbdCsrXSE9KDEyNyZpfDEyOCkpcmV0dXJuIG47aT4+PTd9aWYoZVt0KytdIT1pKWJyZWFrO24rKztmb3IodmFyIHM9MCxhPTE7cys9KDEyNyYoaT1lW3QrK10pKSphLGEqPTEyOCwwIT0oMTI4JmkpOyk7dCs9c31yZXR1cm4gbn0sanNwYi51dGlscy5kZWJ1Z0J5dGVzVG9UZXh0Rm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PSdcIic7aWYoZSl7ZT1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkoZSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspdCs9XCJcXFxceFwiLDE2PmVbb10mJih0Kz1cIjBcIiksdCs9ZVtvXS50b1N0cmluZygxNil9cmV0dXJuIHQrJ1wiJ30sanNwYi51dGlscy5kZWJ1Z1NjYWxhclRvVGV4dEZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9nb29nLnN0cmluZy5xdW90ZShlKTplLnRvU3RyaW5nKCl9LGpzcGIudXRpbHMuc3RyaW5nVG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWUuY2hhckNvZGVBdChvKTtpZigyNTU8cil0aHJvdyBFcnJvcihcIkNvbnZlcnNpb24gZXJyb3I6IHN0cmluZyBjb250YWlucyBjb2RlcG9pbnQgb3V0c2lkZSBvZiBieXRlIHJhbmdlXCIpO3Rbb109cn1yZXR1cm4gdH0sanNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yPT09VWludDhBcnJheT9lOmUuY29uc3RydWN0b3I9PT1BcnJheUJ1ZmZlcnx8dm9pZCAwIT09QnVmZmVyJiZlLmNvbnN0cnVjdG9yPT09QnVmZmVyfHxlLmNvbnN0cnVjdG9yPT09QXJyYXk/bmV3IFVpbnQ4QXJyYXkoZSk6ZS5jb25zdHJ1Y3Rvcj09PVN0cmluZz9nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb1VpbnQ4QXJyYXkoZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiVHlwZSBub3QgY29udmVydGlibGUgdG8gVWludDhBcnJheS5cIiksbmV3IFVpbnQ4QXJyYXkoMCkpfSxqc3BiLkJpbmFyeURlY29kZXI9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuYnl0ZXNfPW51bGwsdGhpcy5jdXJzb3JfPXRoaXMuZW5kXz10aGlzLnN0YXJ0Xz0wLHRoaXMuZXJyb3JfPSExLGUmJnRoaXMuc2V0QmxvY2soZSx0LG8pfSxqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV89W10sanNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jPWZ1bmN0aW9uKGUsdCxvKXtpZihqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgcj1qc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ucG9wKCk7cmV0dXJuIGUmJnIuc2V0QmxvY2soZSx0LG8pLHJ9cmV0dXJuIG5ldyBqc3BiLkJpbmFyeURlY29kZXIoZSx0LG8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksMTAwPmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgmJmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmJ5dGVzXyx0aGlzLnN0YXJ0Xyx0aGlzLmVuZF8tdGhpcy5zdGFydF8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5ieXRlc189bnVsbCx0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTAsdGhpcy5lcnJvcl89ITF9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnl0ZXNffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNldEJsb2NrPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmJ5dGVzXz1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkoZSksdGhpcy5zdGFydF89dm9pZCAwIT09dD90OjAsdGhpcy5lbmRfPXZvaWQgMCE9PW8/dGhpcy5zdGFydF8rbzp0aGlzLmJ5dGVzXy5sZW5ndGgsdGhpcy5jdXJzb3JfPXRoaXMuc3RhcnRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKGUpe3RoaXMuZW5kXz1lfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jdXJzb3JfPXRoaXMuc3RhcnRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0Q3Vyc29yPWZ1bmN0aW9uKGUpe3RoaXMuY3Vyc29yXz1lfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmFkdmFuY2U9ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JfKz1lLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmF0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yXz09dGhpcy5lbmRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnBhc3RFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPnRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8MD50aGlzLmN1cnNvcl98fHRoaXMuY3Vyc29yXz50aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTEyOCxvPTAscj0wLG49MDs0Pm4mJjEyODw9dDtuKyspb3w9KDEyNyYodD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10pKTw8NypuO2lmKDEyODw9dCYmKG98PSgxMjcmKHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdKSk8PDI4LHJ8PSgxMjcmdCk+PjQpLDEyODw9dClmb3Iobj0wOzU+biYmMTI4PD10O24rKylyfD0oMTI3Jih0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSkpPDw3Km4rMztpZigxMjg+dClyZXR1cm4gZShvPj4+MCxyPj4+MCk7Z29vZy5hc3NlcnRzLmZhaWwoXCJGYWlsZWQgdG8gcmVhZCB2YXJpbnQsIGVuY29kaW5nIGlzIGludmFsaWQuXCIpLHRoaXMuZXJyb3JfPSEwfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KChmdW5jdGlvbih0LG8pe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NCh0LG8sZSl9KSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzXyxvPXRoaXMuY3Vyc29yXzt0aGlzLmN1cnNvcl8rPTg7Zm9yKHZhciByPTAsbj0wLGk9bys3O2k+PW87aS0tKXI9cjw8OHx0W2ldLG49bjw8OHx0W2krNF07cmV0dXJuIGUocixuKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5za2lwVmFyaW50PWZ1bmN0aW9uKCl7Zm9yKDsxMjgmdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfXTspdGhpcy5jdXJzb3JfKys7dGhpcy5jdXJzb3JfKyt9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUudW5za2lwVmFyaW50PWZ1bmN0aW9uKGUpe2Zvcig7MTI4PGU7KXRoaXMuY3Vyc29yXy0tLGU+Pj49Nzt0aGlzLmN1cnNvcl8tLX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfLHQ9ZVt0aGlzLmN1cnNvcl8rMF0sbz0xMjcmdDtyZXR1cm4gMTI4PnQ/KHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXysxXSkpPDw3LDEyOD50Pyh0aGlzLmN1cnNvcl8rPTIsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksbyk6KG98PSgxMjcmKHQ9ZVt0aGlzLmN1cnNvcl8rMl0pKTw8MTQsMTI4PnQ/KHRoaXMuY3Vyc29yXys9Myxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXyszXSkpPDwyMSwxMjg+dD8odGhpcy5jdXJzb3JfKz00LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTUmKHQ9ZVt0aGlzLmN1cnNvcl8rNF0pKTw8MjgsMTI4PnQ/KHRoaXMuY3Vyc29yXys9NSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvPj4+MCk6KHRoaXMuY3Vyc29yXys9NSwxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiZnb29nLmFzc2VydHMuYXNzZXJ0KCExKSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKSkpKSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDMyPWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzIsanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCkudG9TdHJpbmcoKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gZT4+PjFeLSgxJmUpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luVWludDY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luSW50NjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblppZ3phZzY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0WmlnemFnVmFyaW50NjQoanNwYi51dGlscy5qb2luSGFzaDY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07cmV0dXJuIHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sdD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV07cmV0dXJuIHRoaXMuY3Vyc29yXys9Mixnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwwfHQ8PDh9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXSxvPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysyXSxyPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyszXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz00LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLChlPDwwfHQ8PDh8bzw8MTZ8cjw8MjQpPj4+MH0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVWludDY0KGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdO3JldHVybiB0aGlzLmN1cnNvcl8rPTEsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksZTw8MjQ+PjI0fSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLChlPDwwfHQ8PDgpPDwxNj4+MTZ9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLG89dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLHI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3JldHVybiB0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksZTw8MHx0PDw4fG88PDE2fHI8PDI0fSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkludDY0KGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyhlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRGbG9hdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5GbG9hdDMyKGUsMCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZERvdWJsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzXyxvPXRoaXMuY3Vyc29yXztlPW8rZTtmb3IodmFyIHI9W10sbj1cIlwiO288ZTspe3ZhciBpPXRbbysrXTtpZigxMjg+aSlyLnB1c2goaSk7ZWxzZXtpZigxOTI+aSljb250aW51ZTtpZigyMjQ+aSl7dmFyIHM9dFtvKytdO3IucHVzaCgoMzEmaSk8PDZ8NjMmcyl9ZWxzZSBpZigyNDA+aSl7cz10W28rK107dmFyIGE9dFtvKytdO3IucHVzaCgoMTUmaSk8PDEyfCg2MyZzKTw8Nnw2MyZhKX1lbHNlIGlmKDI0OD5pKXtpPSg3JmkpPDwxOHwoNjMmKHM9dFtvKytdKSk8PDEyfCg2MyYoYT10W28rK10pKTw8Nnw2MyZ0W28rK10saS09NjU1MzYsci5wdXNoKDU1Mjk2KyhpPj4xMCYxMDIzKSw1NjMyMCsoMTAyMyZpKSl9fTgxOTI8PXIubGVuZ3RoJiYobis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIpLHIubGVuZ3RoPTApfXJldHVybiBuKz1nb29nLmNyeXB0LmJ5dGVBcnJheVRvU3RyaW5nKHIpLHRoaXMuY3Vyc29yXz1vLG59LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFN0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMucmVhZFN0cmluZyhlKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkQnl0ZXM9ZnVuY3Rpb24oZSl7aWYoMD5lfHx0aGlzLmN1cnNvcl8rZT50aGlzLmJ5dGVzXy5sZW5ndGgpcmV0dXJuIHRoaXMuZXJyb3JfPSEwLGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBieXRlIGxlbmd0aCFcIiksbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHQ9dGhpcy5ieXRlc18uc3ViYXJyYXkodGhpcy5jdXJzb3JfLHRoaXMuY3Vyc29yXytlKTtyZXR1cm4gdGhpcy5jdXJzb3JfKz1lLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLHR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pbkhhc2g2NCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc18sdD10aGlzLmN1cnNvcl8sbz1lW3QrMF0scj1lW3QrMV0sbj1lW3QrMl0saT1lW3QrM10scz1lW3QrNF0sYT1lW3QrNV0scD1lW3QrNl07cmV0dXJuIGU9ZVt0KzddLHRoaXMuY3Vyc29yXys9OCxTdHJpbmcuZnJvbUNoYXJDb2RlKG8scixuLGkscyxhLHAsZSl9LGpzcGIuQmluYXJ5UmVhZGVyPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmRlY29kZXJfPWpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyhlLHQsbyksdGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSx0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVIsdGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQsdGhpcy5lcnJvcl89ITEsdGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsfSxqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXz1bXSxqc3BiLkJpbmFyeVJlYWRlci5hbGxvYz1mdW5jdGlvbihlLHQsbyl7aWYoanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgcj1qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTtyZXR1cm4gZSYmci5kZWNvZGVyXy5zZXRCbG9jayhlLHQsbykscn1yZXR1cm4gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGUsdCxvKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmFsbG9jPWpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jLGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5mcmVlPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy5jbGVhcigpLHRoaXMubmV4dEZpZWxkXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUix0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuSU5WQUxJRCx0aGlzLmVycm9yXz0hMSx0aGlzLnJlYWRDYWxsYmFja3NfPW51bGwsMTAwPmpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCYmanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ucHVzaCh0aGlzKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkQ3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGRDdXJzb3JffSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dEZpZWxkX30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldFdpcmVUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlX30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmlzRGVsaW1pdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuaXNFbmRHcm91cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHx0aGlzLmRlY29kZXJfLmdldEVycm9yKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5zZXRCbG9jaz1mdW5jdGlvbihlLHQsbyl7dGhpcy5kZWNvZGVyXy5zZXRCbG9jayhlLHQsbyksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnJlc2V0KCksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbihlKXt0aGlzLmRlY29kZXJfLmFkdmFuY2UoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5uZXh0RmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRlY29kZXJfLmF0RW5kKCkpcmV0dXJuITE7aWYodGhpcy5nZXRFcnJvcigpKXJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIkRlY29kZXIgaGl0IGFuIGVycm9yXCIpLCExO3RoaXMuZmllbGRDdXJzb3JfPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLHQ9ZT4+PjM7cmV0dXJuKGUmPTcpIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzImJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVAmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUD8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZTogJXMgKGF0IHBvc2l0aW9uICVzKVwiLGUsdGhpcy5maWVsZEN1cnNvcl8pLHRoaXMuZXJyb3JfPSEwLCExKToodGhpcy5uZXh0RmllbGRfPXQsdGhpcy5uZXh0V2lyZVR5cGVfPWUsITApfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUudW5za2lwSGVhZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy51bnNraXBWYXJpbnQodGhpcy5uZXh0RmllbGRfPDwzfHRoaXMubmV4dFdpcmVUeXBlXyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwTWF0Y2hpbmdGaWVsZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5leHRGaWVsZF87Zm9yKHRoaXMudW5za2lwSGVhZGVyKCk7dGhpcy5uZXh0RmllbGQoKSYmdGhpcy5nZXRGaWVsZE51bWJlcigpPT1lOyl0aGlzLnNraXBGaWVsZCgpO3RoaXMuZGVjb2Rlcl8uYXRFbmQoKXx8dGhpcy51bnNraXBIZWFkZXIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBWYXJpbnRGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UPyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwVmFyaW50RmllbGRcIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5za2lwVmFyaW50KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRGVsaW1pdGVkRmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRClnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRGVsaW1pdGVkRmllbGRcIiksdGhpcy5za2lwRmllbGQoKTtlbHNle3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTt0aGlzLmRlY29kZXJfLmFkdmFuY2UoZSl9fSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkMzJGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMj8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoNCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRml4ZWQ2NEZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0Pyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRml4ZWQ2NEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg4KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBHcm91cD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLm5leHRGaWVsZF87Oyl7aWYoIXRoaXMubmV4dEZpZWxkKCkpe2dvb2cuYXNzZXJ0cy5mYWlsKFwiVW5tYXRjaGVkIHN0YXJ0LWdyb3VwIHRhZzogc3RyZWFtIEVPRlwiKSx0aGlzLmVycm9yXz0hMDticmVha31pZih0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCl7dGhpcy5uZXh0RmllbGRfIT1lJiYoZ29vZy5hc3NlcnRzLmZhaWwoXCJVbm1hdGNoZWQgZW5kLWdyb3VwIHRhZ1wiKSx0aGlzLmVycm9yXz0hMCk7YnJlYWt9dGhpcy5za2lwRmllbGQoKX19LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRmllbGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5uZXh0V2lyZVR5cGVfKXtjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVDp0aGlzLnNraXBWYXJpbnRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NDp0aGlzLnNraXBGaXhlZDY0RmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRDp0aGlzLnNraXBEZWxpbWl0ZWRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMjp0aGlzLnNraXBGaXhlZDMyRmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQOnRoaXMuc2tpcEdyb3VwKCk7YnJlYWs7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSBlbmNvZGluZyBmb3IgZmllbGQuXCIpfX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlZ2lzdGVyUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7bnVsbD09PXRoaXMucmVhZENhbGxiYWNrc18mJih0aGlzLnJlYWRDYWxsYmFja3NfPXt9KSxnb29nLmFzc2VydHMuYXNzZXJ0KCF0aGlzLnJlYWRDYWxsYmFja3NfW2VdKSx0aGlzLnJlYWRDYWxsYmFja3NfW2VdPXR9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5ydW5SZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9PXRoaXMucmVhZENhbGxiYWNrc18pLGU9dGhpcy5yZWFkQ2FsbGJhY2tzX1tlXSxnb29nLmFzc2VydHMuYXNzZXJ0KGUpLGUodGhpcyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQW55PWZ1bmN0aW9uKGUpe3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlKGUpO3ZhciB0PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZTtzd2l0Y2goZSl7Y2FzZSB0LkRPVUJMRTpyZXR1cm4gdGhpcy5yZWFkRG91YmxlKCk7Y2FzZSB0LkZMT0FUOnJldHVybiB0aGlzLnJlYWRGbG9hdCgpO2Nhc2UgdC5JTlQ2NDpyZXR1cm4gdGhpcy5yZWFkSW50NjQoKTtjYXNlIHQuVUlOVDY0OnJldHVybiB0aGlzLnJlYWRVaW50NjQoKTtjYXNlIHQuSU5UMzI6cmV0dXJuIHRoaXMucmVhZEludDMyKCk7Y2FzZSB0LkZJWEVENjQ6cmV0dXJuIHRoaXMucmVhZEZpeGVkNjQoKTtjYXNlIHQuRklYRUQzMjpyZXR1cm4gdGhpcy5yZWFkRml4ZWQzMigpO2Nhc2UgdC5CT09MOnJldHVybiB0aGlzLnJlYWRCb29sKCk7Y2FzZSB0LlNUUklORzpyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKCk7Y2FzZSB0LkdST1VQOmdvb2cuYXNzZXJ0cy5mYWlsKFwiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIHQuTUVTU0FHRTpnb29nLmFzc2VydHMuZmFpbChcIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIHQuQllURVM6cmV0dXJuIHRoaXMucmVhZEJ5dGVzKCk7Y2FzZSB0LlVJTlQzMjpyZXR1cm4gdGhpcy5yZWFkVWludDMyKCk7Y2FzZSB0LkVOVU06cmV0dXJuIHRoaXMucmVhZEVudW0oKTtjYXNlIHQuU0ZJWEVEMzI6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDMyKCk7Y2FzZSB0LlNGSVhFRDY0OnJldHVybiB0aGlzLnJlYWRTZml4ZWQ2NCgpO2Nhc2UgdC5TSU5UMzI6cmV0dXJuIHRoaXMucmVhZFNpbnQzMigpO2Nhc2UgdC5TSU5UNjQ6cmV0dXJuIHRoaXMucmVhZFNpbnQ2NCgpO2Nhc2UgdC5GSEFTSDY0OnJldHVybiB0aGlzLnJlYWRGaXhlZEhhc2g2NCgpO2Nhc2UgdC5WSEFTSDY0OnJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQoKTtkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBmaWVsZCB0eXBlIGluIHJlYWRBbnkoKVwiKX1yZXR1cm4gMH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIG89dGhpcy5kZWNvZGVyXy5nZXRFbmQoKSxyPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkrcix0aGlzLmRlY29kZXJfLnNldEVuZChyKSx0KGUsdGhpcyksdGhpcy5kZWNvZGVyXy5zZXRDdXJzb3IociksdGhpcy5kZWNvZGVyXy5zZXRFbmQobyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkR3JvdXA9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRGaWVsZF89PWUpLG8odCx0aGlzKSx0aGlzLmVycm9yX3x8dGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVB8fChnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIHN1Ym1lc3NhZ2UgZGlkIG5vdCBlbmQgd2l0aCBhbiBFTkRfR1JPVVAgdGFnXCIpLHRoaXMuZXJyb3JfPSEwKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkRGVjb2Rlcj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSx0PXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCksbz10K2U7cmV0dXJuIGU9anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCksdCxlKSx0aGlzLmRlY29kZXJfLnNldEN1cnNvcihvKSxlfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRVaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSwhIXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTdHJpbmcoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQnl0ZXM9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEJ5dGVzKGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludEhhc2g2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0VmFyaW50NjQoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRWYXJpbnQ2NCgoZnVuY3Rpb24odCxvKXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQodCxvLGUpfSkpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0Rml4ZWQ2NChlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaWVsZF89ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIHQ9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3Q9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSt0O2Zvcih2YXIgbz1bXTt0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpPHQ7KW8ucHVzaChlLmNhbGwodGhpcy5kZWNvZGVyXykpO3JldHVybiBvfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGbG9hdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRmxvYXQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRCb29sKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRFbnVtKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KX0sanNwYi5CaW5hcnlFbmNvZGVyPWZ1bmN0aW9uKCl7dGhpcy5idWZmZXJfPVtdfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RofSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnVmZmVyXztyZXR1cm4gdGhpcy5idWZmZXJfPVtdLGV9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCl7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCh0PT1NYXRoLmZsb29yKHQpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTswPHR8fDEyNzxlOyl0aGlzLmJ1ZmZlcl8ucHVzaCgxMjcmZXwxMjgpLGU9KGU+Pj43fHQ8PDI1KT4+PjAsdD4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KHQ9PU1hdGguZmxvb3IodCkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVaW50MzIoZSksdGhpcy53cml0ZVVpbnQzMih0KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oZSl7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7MTI3PGU7KXRoaXMuYnVmZmVyXy5wdXNoKDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oZSl7aWYoZ29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSwwPD1lKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKGUpO2Vsc2V7Zm9yKHZhciB0PTA7OT50O3QrKyl0aGlzLmJ1ZmZlcl8ucHVzaCgxMjcmZXwxMjgpLGU+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKDEpfX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSxqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSxqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoZTw8MV5lPj4zMSk+Pj4wKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdFppZ3phZzY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKGUpe3RoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoZSkpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSxqc3BiLnV0aWxzLnRvWmlnemFnNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gsKGZ1bmN0aW9uKGUsbyl7dC53cml0ZVNwbGl0VmFyaW50NjQoZT4+PjAsbz4+PjApfSkpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDg9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJjI1Nj5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDE2PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiY2NTUzNj5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjE2JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjI0JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSxqc3BiLnV0aWxzLnNwbGl0VWludDY0KGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoLTEyODw9ZSYmMTI4PmUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQxNj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoLTMyNzY4PD1lJiYzMjc2OD5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQzMj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjgmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MTYmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MjQmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdEludDY0KGUpLHRoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KCtlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiYrZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLGpzcGIudXRpbHMuc3BsaXRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoZSkpLHRoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRmxvYXQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCgxLzA9PT1lfHwtMS8wPT09ZXx8aXNOYU4oZSl8fGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCYmZTw9anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpLGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyKGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZURvdWJsZT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KDEvMD09PWV8fC0xLzA9PT1lfHxpc05hTihlKXx8ZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYJiZlPD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCksanNwYi51dGlscy5zcGxpdEZsb2F0NjQoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSksdGhpcy5idWZmZXJfLnB1c2goZT8xOjApfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRW51bT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMihlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGUpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihlKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYnVmZmVyXy5sZW5ndGgsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lLmNoYXJDb2RlQXQobyk7aWYoMTI4PnIpdGhpcy5idWZmZXJfLnB1c2gocik7ZWxzZSBpZigyMDQ4PnIpdGhpcy5idWZmZXJfLnB1c2gocj4+NnwxOTIpLHRoaXMuYnVmZmVyXy5wdXNoKDYzJnJ8MTI4KTtlbHNlIGlmKDY1NTM2PnIpaWYoNTUyOTY8PXImJjU2MzE5Pj1yJiZvKzE8ZS5sZW5ndGgpe3ZhciBuPWUuY2hhckNvZGVBdChvKzEpOzU2MzIwPD1uJiY1NzM0Mz49biYmKHI9MTAyNCooci01NTI5Nikrbi01NjMyMCs2NTUzNix0aGlzLmJ1ZmZlcl8ucHVzaChyPj4xOHwyNDApLHRoaXMuYnVmZmVyXy5wdXNoKHI+PjEyJjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2gocj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKDYzJnJ8MTI4KSxvKyspfWVsc2UgdGhpcy5idWZmZXJfLnB1c2gocj4+MTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChyPj42JjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goNjMmcnwxMjgpfXJldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RoLXR9LGpzcGIuYXJpdGg9e30sanNwYi5hcml0aC5VSW50NjQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmxvPWUsdGhpcy5oaT10fSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhpPGUuaGl8fHRoaXMuaGk9PWUuaGkmJnRoaXMubG88ZS5sbz8tMTp0aGlzLmhpPT1lLmhpJiZ0aGlzLmxvPT1lLmxvPzA6MX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvPj4+MXwoMSZ0aGlzLmhpKTw8MzEpPj4+MCx0aGlzLmhpPj4+MT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubGVmdFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvPDwxPj4+MCwodGhpcy5oaTw8MXx0aGlzLmxvPj4+MzEpPj4+MCl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5tc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISgyMTQ3NDgzNjQ4JnRoaXMuaGkpfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubHNiPWZ1bmN0aW9uKCl7cmV0dXJuISEoMSZ0aGlzLmxvKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnplcm89ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5sbyYmMD09dGhpcy5oaX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvK2UubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrZS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2UubG8/MTowKT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoKHRoaXMubG8tZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1lLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1lLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzI9ZnVuY3Rpb24oZSx0KXt2YXIgbz02NTUzNSZlLHI9NjU1MzUmdCxuPXQ+Pj4xNjtmb3IodD1vKnIrNjU1MzYqKG8qbiY2NTUzNSkrNjU1MzYqKChlPj4+PTE2KSpyJjY1NTM1KSxvPWUqbisobypuPj4+MTYpKyhlKnI+Pj4xNik7NDI5NDk2NzI5Njw9dDspdC09NDI5NDk2NzI5NixvKz0xO3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodD4+PjAsbz4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUpe3ZhciB0PWpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKHRoaXMubG8sZSk7cmV0dXJuKGU9anNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzIodGhpcy5oaSxlKSkuaGk9ZS5sbyxlLmxvPTAsdC5hZGQoZSl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZSl7aWYoMD09ZSlyZXR1cm5bXTt2YXIgdD1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxvPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpO2U9bmV3IGpzcGIuYXJpdGguVUludDY0KGUsMCk7Zm9yKHZhciByPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgxLDApOyFlLm1zYigpOyllPWUubGVmdFNoaWZ0KCkscj1yLmxlZnRTaGlmdCgpO2Zvcig7IXIuemVybygpOykwPj1lLmNtcChvKSYmKHQ9dC5hZGQociksbz1vLnN1YihlKSksZT1lLnJpZ2h0U2hpZnQoKSxyPXIucmlnaHRTaGlmdCgpO3JldHVyblt0LG9dfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIGU9XCJcIix0PXRoaXM7IXQuemVybygpOyl7dmFyIG89KHQ9dC5kaXYoMTApKVswXTtlPXRbMV0ubG8rZSx0PW99cmV0dXJuXCJcIj09ZSYmKGU9XCIwXCIpLGV9LGpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLG89bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCkscj0wO3I8ZS5sZW5ndGg7cisrKXtpZihcIjBcIj5lW3JdfHxcIjlcIjxlW3JdKXJldHVybiBudWxsO3ZhciBuPXBhcnNlSW50KGVbcl0sMTApO28ubG89bix0PXQubXVsKDEwKS5hZGQobyl9cmV0dXJuIHR9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbyx0aGlzLmhpKX0sanNwYi5hcml0aC5JbnQ2ND1mdW5jdGlvbihlLHQpe3RoaXMubG89ZSx0aGlzLmhpPXR9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8rZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaStlLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rZS5sbz8xOjApPj4+MCl9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8tZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1lLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1lLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQodGhpcy5sbyx0aGlzLmhpKX0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wIT0oMjE0NzQ4MzY0OCZ0aGlzLmhpKSx0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpO3JldHVybiBlJiYodD1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKS5zdWIodCkpLChlP1wiLVwiOlwiXCIpK3QudG9TdHJpbmcoKX0sanNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PTA8ZS5sZW5ndGgmJlwiLVwiPT1lWzBdO3JldHVybiB0JiYoZT1lLnN1YnN0cmluZygxKSksbnVsbD09PShlPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoZSkpP251bGw6KHQmJihlPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLnN1YihlKSksbmV3IGpzcGIuYXJpdGguSW50NjQoZS5sbyxlLmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyPWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdLHRoaXMudG90YWxMZW5ndGhfPTAsdGhpcy5lbmNvZGVyXz1uZXcganNwYi5CaW5hcnlFbmNvZGVyLHRoaXMuYm9va21hcmtzXz1bXX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmFwcGVuZFVpbnQ4QXJyYXlfPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy5ibG9ja3NfLnB1c2godCksdGhpcy5ibG9ja3NfLnB1c2goZSksdGhpcy50b3RhbExlbmd0aF8rPXQubGVuZ3RoK2UubGVuZ3RofSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYmVnaW5EZWxpbWl0ZWRfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSxlPXRoaXMuZW5jb2Rlcl8uZW5kKCksdGhpcy5ibG9ja3NfLnB1c2goZSksdGhpcy50b3RhbExlbmd0aF8rPWUubGVuZ3RoLGUucHVzaCh0aGlzLnRvdGFsTGVuZ3RoXyksZX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmVuZERlbGltaXRlZF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wb3AoKTtmb3IodD10aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpLXQsZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10KTsxMjc8dDspZS5wdXNoKDEyNyZ0fDEyOCksdD4+Pj03LHRoaXMudG90YWxMZW5ndGhfKys7ZS5wdXNoKHQpLHRoaXMudG90YWxMZW5ndGhfKyt9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGUuc3ViYXJyYXkodCxvKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5tYXliZVdyaXRlU2VyaWFsaXplZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe251bGwhPWUmJm51bGwhPXQmJm51bGwhPW8mJnRoaXMud3JpdGVTZXJpYWxpemVkTWVzc2FnZShlLHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXSx0aGlzLmVuY29kZXJfLmVuZCgpLHRoaXMudG90YWxMZW5ndGhfPTAsdGhpcy5ib29rbWFya3NfPVtdfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZ2V0UmVzdWx0QnVmZmVyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPT10aGlzLmJvb2ttYXJrc18ubGVuZ3RoKTtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKSksdD10aGlzLmJsb2Nrc18sbz10Lmxlbmd0aCxyPTAsbj0wO248bztuKyspe3ZhciBpPXRbbl07ZS5zZXQoaSxyKSxyKz1pLmxlbmd0aH1yZXR1cm4gdD10aGlzLmVuY29kZXJfLmVuZCgpLGUuc2V0KHQscikscis9dC5sZW5ndGgsZ29vZy5hc3NlcnRzLmFzc2VydChyPT1lLmxlbmd0aCksdGhpcy5ibG9ja3NfPVtlXSxlfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZ2V0UmVzdWx0QmFzZTY0U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkodGhpcy5nZXRSZXN1bHRCdWZmZXIoKSxlKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmJlZ2luU3ViTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVkXyhlKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmRTdWJNZXNzYWdlPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD10aGlzLmJvb2ttYXJrc18ubGVuZ3RoKSx0aGlzLmVuZERlbGltaXRlZF8odGhpcy5ib29rbWFya3NfLnBvcCgpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmllbGRIZWFkZXJfPWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydCgxPD1lJiZlPT1NYXRoLmZsb29yKGUpKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmUrdCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUFueT1mdW5jdGlvbihlLHQsbyl7dmFyIHI9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlO3N3aXRjaChlKXtjYXNlIHIuRE9VQkxFOnRoaXMud3JpdGVEb3VibGUodCxvKTticmVhaztjYXNlIHIuRkxPQVQ6dGhpcy53cml0ZUZsb2F0KHQsbyk7YnJlYWs7Y2FzZSByLklOVDY0OnRoaXMud3JpdGVJbnQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5VSU5UNjQ6dGhpcy53cml0ZVVpbnQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5JTlQzMjp0aGlzLndyaXRlSW50MzIodCxvKTticmVhaztjYXNlIHIuRklYRUQ2NDp0aGlzLndyaXRlRml4ZWQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5GSVhFRDMyOnRoaXMud3JpdGVGaXhlZDMyKHQsbyk7YnJlYWs7Y2FzZSByLkJPT0w6dGhpcy53cml0ZUJvb2wodCxvKTticmVhaztjYXNlIHIuU1RSSU5HOnRoaXMud3JpdGVTdHJpbmcodCxvKTticmVhaztjYXNlIHIuR1JPVVA6Z29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKVwiKTticmVhaztjYXNlIHIuTUVTU0FHRTpnb29nLmFzc2VydHMuZmFpbChcIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KClcIik7YnJlYWs7Y2FzZSByLkJZVEVTOnRoaXMud3JpdGVCeXRlcyh0LG8pO2JyZWFrO2Nhc2Ugci5VSU5UMzI6dGhpcy53cml0ZVVpbnQzMih0LG8pO2JyZWFrO2Nhc2Ugci5FTlVNOnRoaXMud3JpdGVFbnVtKHQsbyk7YnJlYWs7Y2FzZSByLlNGSVhFRDMyOnRoaXMud3JpdGVTZml4ZWQzMih0LG8pO2JyZWFrO2Nhc2Ugci5TRklYRUQ2NDp0aGlzLndyaXRlU2ZpeGVkNjQodCxvKTticmVhaztjYXNlIHIuU0lOVDMyOnRoaXMud3JpdGVTaW50MzIodCxvKTticmVhaztjYXNlIHIuU0lOVDY0OnRoaXMud3JpdGVTaW50NjQodCxvKTticmVhaztjYXNlIHIuRkhBU0g2NDp0aGlzLndyaXRlRml4ZWRIYXNoNjQodCxvKTticmVhaztjYXNlIHIuVkhBU0g2NDp0aGlzLndyaXRlVmFyaW50SGFzaDY0KHQsbyk7YnJlYWs7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgZmllbGQgdHlwZSBpbiB3cml0ZUFueSgpXCIpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzJfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ189ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50SGFzaDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1wYXJzZUludCh0LDEwKSxnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NCh0LmxvLHQuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9cGFyc2VJbnQodCwxMCksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50NjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHQubG8sdC5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50MzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiZ0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhlLHQpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiZ0aGlzLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfKGUsdCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlSW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZsb2F0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlRmxvYXQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVEb3VibGU9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVEb3VibGUodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZUJvb2wodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVFbnVtPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJihlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTdHJpbmcodCksdGhpcy5lbmREZWxpbWl0ZWRfKGUpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQnl0ZXM9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodC5sZW5ndGgpLHRoaXMuYXBwZW5kVWludDhBcnJheV8odCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXtudWxsIT10JiYoZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKSxvKHQsdGhpcyksdGhpcy5lbmREZWxpbWl0ZWRfKGUpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZVNldD1mdW5jdGlvbihlLHQsbyl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygyLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGUpLGU9dGhpcy5iZWdpbkRlbGltaXRlZF8oMyksbyh0LHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhlKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUdyb3VwPWZ1bmN0aW9uKGUsdCxvKXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSxvKHQsdGhpcyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDg9PXQubGVuZ3RoKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoOD09dC5sZW5ndGgpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3ZhciByPXRoaXMuZW5jb2Rlcl87anNwYi51dGlscy50b1ppZ3phZzY0KHQsbywoZnVuY3Rpb24oZSx0KXtyLndyaXRlU3BsaXRWYXJpbnQ2NChlPj4+MCx0Pj4+MCl9KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUludDMyU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGUsbyh0W25dKSxyKHRbbl0pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoZSxvKHRbbl0pLHIodFtuXSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLndyaXRlU3BsaXRaaWd6YWdWYXJpbnQ2NChlLG8odFtuXSkscih0W25dKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVJbnQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVWludDMyU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVVaW50NjRTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGaXhlZDMyKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZpeGVkNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2ZpeGVkMzIoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNmaXhlZDY0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTZml4ZWQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZsb2F0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRmxvYXQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWREb3VibGU9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVEb3VibGUoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCb29sPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlQm9vbChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEVudW09ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVFbnVtKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkQnl0ZXM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVCeXRlcyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGwhPXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO28odFtyXSx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8obil9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEdyb3VwPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsIT10KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksbyh0W3JdLHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWRIYXNoNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVWYXJpbnRIYXNoNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIocGFyc2VJbnQodFtvXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQobyh0W25dKSxyKHRbbl0pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQobyh0W25dKSxyKHRbbl0pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBuPXRoaXMuZW5jb2Rlcl8saT0wO2k8dC5sZW5ndGg7aSsrKWpzcGIudXRpbHMudG9aaWd6YWc2NChvKHRbaV0pLHIodFtpXSksKGZ1bmN0aW9uKGUsdCl7bi53cml0ZVNwbGl0VmFyaW50NjQoZT4+PjAsdD4+PjApfSkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyh0W29dKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChyLmxvLHIuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHBhcnNlSW50KHRbb10sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyh0W29dKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChyLmxvLHIuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMih0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NCh0W29dKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMih0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQ2NCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBvPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodFtlXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChvLmxvLG8uaGkpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQzMih0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NFN0cmluZyh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRmxvYXQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRG91YmxlPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRCb29sPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUJvb2wodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEVudW09ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlRW51bSh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuTWFwPWZ1bmN0aW9uKGUsdCl7dGhpcy5hcnJfPWUsdGhpcy52YWx1ZUN0b3JfPXQsdGhpcy5tYXBfPXt9LHRoaXMuYXJyQ2xlYW49ITAsMDx0aGlzLmFycl8ubGVuZ3RoJiZ0aGlzLmxvYWRGcm9tQXJyYXlfKCl9LGpzcGIuTWFwLnByb3RvdHlwZS5sb2FkRnJvbUFycmF5Xz1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5hcnJfLmxlbmd0aDtlKyspe3ZhciB0PXRoaXMuYXJyX1tlXSxvPXRbMF07dGhpcy5tYXBfW28udG9TdHJpbmcoKV09bmV3IGpzcGIuTWFwLkVudHJ5XyhvLHRbMV0pfXRoaXMuYXJyQ2xlYW49ITB9LGpzcGIuTWFwLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgZSx0PXRoaXMubWFwXztmb3IoZSBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpKXt2YXIgbz10W2VdLnZhbHVlV3JhcHBlcjtvJiZvLnRvQXJyYXkoKX19fWVsc2V7Zm9yKHRoaXMuYXJyXy5sZW5ndGg9MCwodD10aGlzLnN0cmluZ0tleXNfKCkpLnNvcnQoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRoaXMubWFwX1t0W2VdXTsobz1yLnZhbHVlV3JhcHBlcikmJm8udG9BcnJheSgpLHRoaXMuYXJyXy5wdXNoKFtyLmtleSxyLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffSxqc3BiLk1hcC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89dGhpcy50b0FycmF5KCkscj1bXSxuPTA7bjxvLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMubWFwX1tvW25dWzBdLnRvU3RyaW5nKCldO3RoaXMud3JhcEVudHJ5XyhpKTt2YXIgcz1pLnZhbHVlV3JhcHBlcjtzPyhnb29nLmFzc2VydHMuYXNzZXJ0KHQpLHIucHVzaChbaS5rZXksdChlLHMpXSkpOnIucHVzaChbaS5rZXksaS52YWx1ZV0pfXJldHVybiByfSxqc3BiLk1hcC5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUsdCxvKXt0PW5ldyBqc3BiLk1hcChbXSx0KTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPW8oZVtyXVsxXSk7dC5zZXQobixpKX1yZXR1cm4gdH0sanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXz1mdW5jdGlvbihlKXt0aGlzLmlkeF89MCx0aGlzLmFycl89ZX0sanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkeF88dGhpcy5hcnJfLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0aGlzLmFycl9bdGhpcy5pZHhfKytdfTp7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiYoanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksanNwYi5NYXAucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0tleXNfKCkubGVuZ3RofSxqc3BiLk1hcC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcF89e30sdGhpcy5hcnJDbGVhbj0hMX0sanNwYi5NYXAucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoKTt2YXIgdD10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoZSk7cmV0dXJuIGRlbGV0ZSB0aGlzLm1hcF9bZV0sdGhpcy5hcnJDbGVhbj0hMSx0fSxqc3BiLk1hcC5wcm90b3R5cGUuZ2V0RW50cnlMaXN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnN0cmluZ0tleXNfKCk7dC5zb3J0KCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRoaXMubWFwX1t0W29dXTtlLnB1c2goW3Iua2V5LHIudmFsdWVdKX1yZXR1cm4gZX0sanNwYi5NYXAucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dGhpcy5tYXBfW3Rbb11dO2UucHVzaChbci5rZXksdGhpcy53cmFwRW50cnlfKHIpXSl9cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGUpfSxqc3BiLk1hcC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zdHJpbmdLZXlzXygpO3Quc29ydCgpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWUucHVzaCh0aGlzLm1hcF9bdFtvXV0ua2V5KTtyZXR1cm4gbmV3IGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyllLnB1c2godGhpcy53cmFwRW50cnlfKHRoaXMubWFwX1t0W29dXSkpO3JldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhlKX0sanNwYi5NYXAucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLnN0cmluZ0tleXNfKCk7by5zb3J0KCk7Zm9yKHZhciByPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMubWFwX1tvW3JdXTtlLmNhbGwodCx0aGlzLndyYXBFbnRyeV8obiksbi5rZXksdGhpcyl9fSxqc3BiLk1hcC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG89bmV3IGpzcGIuTWFwLkVudHJ5XyhlKTtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhvLnZhbHVlV3JhcHBlcj10LG8udmFsdWU9dC50b0FycmF5KCkpOm8udmFsdWU9dCx0aGlzLm1hcF9bZS50b1N0cmluZygpXT1vLHRoaXMuYXJyQ2xlYW49ITEsdGhpc30sanNwYi5NYXAucHJvdG90eXBlLndyYXBFbnRyeV89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmFsdWVDdG9yXz8oZS52YWx1ZVdyYXBwZXJ8fChlLnZhbHVlV3JhcHBlcj1uZXcgdGhpcy52YWx1ZUN0b3JfKGUudmFsdWUpKSxlLnZhbHVlV3JhcHBlcik6ZS52YWx1ZX0sanNwYi5NYXAucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtpZihlPXRoaXMubWFwX1tlLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKWluIHRoaXMubWFwX30sanNwYi5NYXAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBpPXRoaXMuc3RyaW5nS2V5c18oKTtpLnNvcnQoKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGE9dGhpcy5tYXBfW2lbc11dO3QuYmVnaW5TdWJNZXNzYWdlKGUpLG8uY2FsbCh0LDEsYS5rZXkpLHRoaXMudmFsdWVDdG9yXz9yLmNhbGwodCwyLHRoaXMud3JhcEVudHJ5XyhhKSxuKTpyLmNhbGwodCwyLGEudmFsdWUpLHQuZW5kU3ViTWVzc2FnZSgpfX0sanNwYi5NYXAuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSx0LG8scixuLGkscyl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXt2YXIgYT10LmdldEZpZWxkTnVtYmVyKCk7MT09YT9pPW8uY2FsbCh0KToyPT1hJiYoZS52YWx1ZUN0b3JfPyhnb29nLmFzc2VydHMuYXNzZXJ0KG4pLHN8fChzPW5ldyBlLnZhbHVlQ3Rvcl8pLHIuY2FsbCh0LHMsbikpOnM9ci5jYWxsKHQpKX1nb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9cyksZS5zZXQoaSxzKX0sanNwYi5NYXAucHJvdG90eXBlLnN0cmluZ0tleXNfPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLm1hcF8sbz1bXTtmb3IoZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiZvLnB1c2goZSk7cmV0dXJuIG99LGpzcGIuTWFwLkVudHJ5Xz1mdW5jdGlvbihlLHQpe3RoaXMua2V5PWUsdGhpcy52YWx1ZT10LHRoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH0sanNwYi5FeHRlbnNpb25GaWVsZEluZm89ZnVuY3Rpb24oZSx0LG8scixuKXt0aGlzLmZpZWxkSW5kZXg9ZSx0aGlzLmZpZWxkTmFtZT10LHRoaXMuY3Rvcj1vLHRoaXMudG9PYmplY3RGbj1yLHRoaXMuaXNSZXBlYXRlZD1ufSxqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz1mdW5jdGlvbihlLHQsbyxyLG4saSl7dGhpcy5maWVsZEluZm89ZSx0aGlzLmJpbmFyeVJlYWRlckZuPXQsdGhpcy5iaW5hcnlXcml0ZXJGbj1vLHRoaXMuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuPXIsdGhpcy5iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbj1uLHRoaXMuaXNQYWNrZWQ9aX0sanNwYi5FeHRlbnNpb25GaWVsZEluZm8ucHJvdG90eXBlLmlzTWVzc2FnZVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY3Rvcn0sanNwYi5NZXNzYWdlPWZ1bmN0aW9uKCl7fSxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUPSEwLGpzcGIuTWVzc2FnZS5HRU5FUkFURV9GUk9NX09CSkVDVD0hZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERSxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fU1RSSU5HPSEwLGpzcGIuTWVzc2FnZS5BU1NVTUVfTE9DQUxfQVJSQVlTPSExLGpzcGIuTWVzc2FnZS5TRVJJQUxJWkVfRU1QVFlfVFJBSUxJTkdfRklFTERTPSEwLGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuZ2V0SnNQYk1lc3NhZ2VJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VJZF99LGpzcGIuTWVzc2FnZS5nZXRJbmRleF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCtlLmFycmF5SW5kZXhPZmZzZXRffSxqc3BiLk1lc3NhZ2UuaGlkZGVuRVM2UHJvcGVydHlfPWZ1bmN0aW9uKCl7fSxqc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQtZS5hcnJheUluZGV4T2Zmc2V0X30sanNwYi5NZXNzYWdlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSx0LG8scixuLGkpe2lmKGUud3JhcHBlcnNfPW51bGwsdHx8KHQ9bz9bb106W10pLGUubWVzc2FnZUlkXz1vP1N0cmluZyhvKTp2b2lkIDAsZS5hcnJheUluZGV4T2Zmc2V0Xz0wPT09bz8tMTowLGUuYXJyYXk9dCxqc3BiLk1lc3NhZ2UuaW5pdFBpdm90QW5kRXh0ZW5zaW9uT2JqZWN0XyhlLHIpLGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSxqc3BiLk1lc3NhZ2UuU0VSSUFMSVpFX0VNUFRZX1RSQUlMSU5HX0ZJRUxEU3x8KGUucmVwZWF0ZWRGaWVsZHM9biksbilmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKShvPW5bdF0pPGUucGl2b3RfPyhvPWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSxvKSxlLmFycmF5W29dPWUuYXJyYXlbb118fGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXyk6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oZSksZS5leHRlbnNpb25PYmplY3RfW29dPWUuZXh0ZW5zaW9uT2JqZWN0X1tvXXx8anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfKTtpZihpJiZpLmxlbmd0aClmb3IodD0wO3Q8aS5sZW5ndGg7dCsrKWpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKGUsaVt0XSl9LGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz1nb29nLkRFQlVHJiZPYmplY3QuZnJlZXplP09iamVjdC5mcmVlemUoW10pOltdLGpzcGIuTWVzc2FnZS5pc0FycmF5Xz1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLkFTU1VNRV9MT0NBTF9BUlJBWVM/ZSBpbnN0YW5jZW9mIEFycmF5OkFycmF5LmlzQXJyYXkoZSl9LGpzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGV8fGpzcGIuTWVzc2FnZS5pc0FycmF5XyhlKXx8anNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSl9LGpzcGIuTWVzc2FnZS5pbml0UGl2b3RBbmRFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZS5hcnJheS5sZW5ndGgscj0tMTtpZihvJiYocj1vLTEsbz1lLmFycmF5W3JdLGpzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF8obykpKXJldHVybiBlLnBpdm90Xz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfKGUsciksdm9pZChlLmV4dGVuc2lvbk9iamVjdF89byk7LTE8dD8oZS5waXZvdF89TWF0aC5tYXgodCxqc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfKGUscisxKSksZS5leHRlbnNpb25PYmplY3RfPW51bGwpOmUucGl2b3RfPU51bWJlci5NQVhfVkFMVUV9LGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oZSl7dmFyIHQ9anNwYi5NZXNzYWdlLmdldEluZGV4XyhlLGUucGl2b3RfKTtlLmFycmF5W3RdfHwoZS5leHRlbnNpb25PYmplY3RfPWUuYXJyYXlbdF09e30pfSxqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXJbbl09dC5jYWxsKGVbbl0sbyxlW25dKTtyZXR1cm4gcn0sanNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCxvLHIsbil7Zm9yKHZhciBpIGluIG8pe3ZhciBzPW9baV0sYT1yLmNhbGwoZSxzKTtpZihudWxsIT1hKXtmb3IodmFyIHAgaW4gcy5maWVsZE5hbWUpaWYocy5maWVsZE5hbWUuaGFzT3duUHJvcGVydHkocCkpYnJlYWs7dFtwXT1zLnRvT2JqZWN0Rm4/cy5pc1JlcGVhdGVkP2pzcGIuTWVzc2FnZS50b09iamVjdExpc3QoYSxzLnRvT2JqZWN0Rm4sbik6cy50b09iamVjdEZuKG4sYSk6YX19fSxqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucz1mdW5jdGlvbihlLHQsbyxyKXtmb3IodmFyIG4gaW4gbyl7dmFyIGk9b1tuXSxzPWkuZmllbGRJbmZvO2lmKCFpLmJpbmFyeVdyaXRlckZuKXRocm93IEVycm9yKFwiTWVzc2FnZSBleHRlbnNpb24gcHJlc2VudCB0aGF0IHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBiaW5hcnkgc2VyaWFsaXphdGlvbiBzdXBwb3J0XCIpO3ZhciBhPXIuY2FsbChlLHMpO2lmKG51bGwhPWEpaWYocy5pc01lc3NhZ2VUeXBlKCkpe2lmKCFpLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbil0aHJvdyBFcnJvcihcIk1lc3NhZ2UgZXh0ZW5zaW9uIHByZXNlbnQgaG9sZGluZyBzdWJtZXNzYWdlIHdpdGhvdXQgYmluYXJ5IHN1cHBvcnQgZW5hYmxlZCwgYW5kIG1lc3NhZ2UgaXMgYmVpbmcgc2VyaWFsaXplZCB0byBiaW5hcnkgZm9ybWF0XCIpO2kuYmluYXJ5V3JpdGVyRm4uY2FsbCh0LHMuZmllbGRJbmRleCxhLGkuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuKX1lbHNlIGkuYmluYXJ5V3JpdGVyRm4uY2FsbCh0LHMuZmllbGRJbmRleCxhKX19LGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCxvLHIsbil7dmFyIGk9b1t0LmdldEZpZWxkTnVtYmVyKCldO2lmKGkpe2lmKG89aS5maWVsZEluZm8sIWkuYmluYXJ5UmVhZGVyRm4pdGhyb3cgRXJyb3IoXCJEZXNlcmlhbGl6aW5nIGV4dGVuc2lvbiB3aG9zZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGJpbmFyeSBmb3JtYXRcIik7aWYoby5pc01lc3NhZ2VUeXBlKCkpe3ZhciBzPW5ldyBvLmN0b3I7aS5iaW5hcnlSZWFkZXJGbi5jYWxsKHQscyxpLmJpbmFyeU1lc3NhZ2VEZXNlcmlhbGl6ZUZuKX1lbHNlIHM9aS5iaW5hcnlSZWFkZXJGbi5jYWxsKHQpO28uaXNSZXBlYXRlZCYmIWkuaXNQYWNrZWQ/KHQ9ci5jYWxsKGUsbykpP3QucHVzaChzKTpuLmNhbGwoZSxvLFtzXSk6bi5jYWxsKGUsbyxzKX1lbHNlIHQuc2tpcEZpZWxkKCl9LGpzcGIuTWVzc2FnZS5nZXRGaWVsZD1mdW5jdGlvbihlLHQpe2lmKHQ8ZS5waXZvdF8pe3Q9anNwYi5NZXNzYWdlLmdldEluZGV4XyhlLHQpO3ZhciBvPWUuYXJyYXlbdF07cmV0dXJuIG89PT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8/ZS5hcnJheVt0XT1bXTpvfWlmKGUuZXh0ZW5zaW9uT2JqZWN0XylyZXR1cm4obz1lLmV4dGVuc2lvbk9iamVjdF9bdF0pPT09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfP2UuZXh0ZW5zaW9uT2JqZWN0X1t0XT1bXTpvfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZD1mdW5jdGlvbihlLHQpe3JldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KX0sanNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpKT9lOitlfSxqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpKT9lOiEhZX0sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKGUsdCl7dmFyIG89anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KTtpZihlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc198fChlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30pLCFlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bdF0pe2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKW9bcl09K29bcl07ZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdPSEwfXJldHVybiBvfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sZWFuRmllbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpO2lmKGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX3x8KGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSksIWUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1t0XSl7Zm9yKHZhciByPTA7cjxvLmxlbmd0aDtyKyspb1tyXT0hIW9bcl07ZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdPSEwfXJldHVybiBvfSxqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2ND1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2dvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShlKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJDYW5ub3QgY29lcmNlIHRvIGI2NCBzdHJpbmc6IFwiK2dvb2cudHlwZU9mKGUpKSxudWxsKX0sanNwYi5NZXNzYWdlLmJ5dGVzQXNVOD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb1VpbnQ4QXJyYXkoZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiQ2Fubm90IGNvZXJjZSB0byBVaW50OEFycmF5OiBcIitnb29nLnR5cGVPZihlKSksbnVsbCl9LGpzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc0I2ND1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc18oZSksZS5sZW5ndGgmJlwic3RyaW5nXCIhPXR5cGVvZiBlWzBdP2dvb2cuYXJyYXkubWFwKGUsanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQpOmV9LGpzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc1U4PWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyhlKSwhZS5sZW5ndGh8fGVbMF1pbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpnb29nLmFycmF5Lm1hcChlLGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgpfSxqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXz1mdW5jdGlvbihlKXtpZihnb29nLkRFQlVHJiZlJiYxPGUubGVuZ3RoKXt2YXIgdD1nb29nLnR5cGVPZihlWzBdKTtnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7Z29vZy50eXBlT2YoZSkhPXQmJmdvb2cuYXNzZXJ0cy5mYWlsKFwiSW5jb25zaXN0ZW50IHR5cGUgaW4gSlNQQiByZXBlYXRlZCBmaWVsZCBhcnJheS4gR290IFwiK2dvb2cudHlwZU9mKGUpK1wiIGV4cGVjdGVkIFwiK3QpfSkpfX0sanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KSk/bzplfSxqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKGUsdCkpP286ZX0sanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkKGUsdCkpP286ZX0sanNwYi5NZXNzYWdlLmdldEZpZWxkUHJvdG8zPWpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0LGpzcGIuTWVzc2FnZS5nZXRNYXBGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtpZihlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSx0IGluIGUud3JhcHBlcnNfKXJldHVybiBlLndyYXBwZXJzX1t0XTt2YXIgbj1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KTtpZighbil7aWYobylyZXR1cm47bj1bXSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LG4pfXJldHVybiBlLndyYXBwZXJzX1t0XT1uZXcganNwYi5NYXAobixyKX0sanNwYi5NZXNzYWdlLnNldEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLHQ8ZS5waXZvdF8/ZS5hcnJheVtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsdCldPW86KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oZSksZS5leHRlbnNpb25PYmplY3RfW3RdPW8pLGV9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sMCl9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbywwKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sITEpfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLFwiXCIpfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sXCJcIil9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLDApfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nSW50RmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLFwiMFwiKX0sanNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0Xz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLG8hPT1yP2pzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQsbyk6dDxlLnBpdm90Xz9lLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSx0KV09bnVsbDooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhlKSxkZWxldGUgZS5leHRlbnNpb25PYmplY3RfW3RdKSxlfSxqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksdD1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpLG51bGwhPXI/dC5zcGxpY2UociwwLG8pOnQucHVzaChvKSxlfSxqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLChvPWpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKGUsbykpJiZvIT09dCYmdm9pZCAwIT09ciYmKGUud3JhcHBlcnNfJiZvIGluIGUud3JhcHBlcnNfJiYoZS53cmFwcGVyc19bb109dm9pZCAwKSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSxvLHZvaWQgMCkpLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQscil9LGpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLHM9anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsaSk7bnVsbCE9cyYmKG89aSxyPXMsanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsaSx2b2lkIDApKX1yZXR1cm4gbz8oanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsbyxyKSxvKTowfSxqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLCFlLndyYXBwZXJzX1tvXSl7dmFyIG49anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsbyk7KHJ8fG4pJiYoZS53cmFwcGVyc19bb109bmV3IHQobikpfXJldHVybiBlLndyYXBwZXJzX1tvXX0sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXyhlLHQsbyksKHQ9ZS53cmFwcGVyc19bb10pPT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8mJih0PWUud3JhcHBlcnNfW29dPVtdKSx0fSxqc3BiLk1lc3NhZ2Uud3JhcFJlcGVhdGVkRmllbGRfPWZ1bmN0aW9uKGUsdCxvKXtpZihlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSwhZS53cmFwcGVyc19bb10pe2Zvcih2YXIgcj1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLG8pLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09bmV3IHQocltpXSk7ZS53cmFwcGVyc19bb109bn19LGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KTt2YXIgcj1vP28udG9BcnJheSgpOm87cmV0dXJuIGUud3JhcHBlcnNfW3RdPW8sanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxyKX0sanNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KTt2YXIgbj1yP3IudG9BcnJheSgpOnI7cmV0dXJuIGUud3JhcHBlcnNfW3RdPXIsanNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQoZSx0LG8sbil9LGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLG89b3x8W107Zm9yKHZhciByPVtdLG49MDtuPG8ubGVuZ3RoO24rKylyW25dPW9bbl0udG9BcnJheSgpO3JldHVybiBlLndyYXBwZXJzX1t0XT1vLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQscil9LGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIsbil7anNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXyhlLHIsdCk7dmFyIGk9ZS53cmFwcGVyc19bdF07cmV0dXJuIGl8fChpPWUud3JhcHBlcnNfW3RdPVtdKSxvPW98fG5ldyByLGU9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KSxudWxsIT1uPyhpLnNwbGljZShuLDAsbyksZS5zcGxpY2UobiwwLG8udG9BcnJheSgpKSk6KGkucHVzaChvKSxlLnB1c2goby50b0FycmF5KCkpKSxvfSxqc3BiLk1lc3NhZ2UudG9NYXA9ZnVuY3Rpb24oZSx0LG8scil7Zm9yKHZhciBuPXt9LGk9MDtpPGUubGVuZ3RoO2krKyluW3QuY2FsbChlW2ldKV09bz9vLmNhbGwoZVtpXSxyLGVbaV0pOmVbaV07cmV0dXJuIG59LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuc3luY01hcEZpZWxkc189ZnVuY3Rpb24oKXtpZih0aGlzLndyYXBwZXJzXylmb3IodmFyIGUgaW4gdGhpcy53cmFwcGVyc18pe3ZhciB0PXRoaXMud3JhcHBlcnNfW2VdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdFtvXSYmdFtvXS50b0FycmF5KCk7ZWxzZSB0JiZ0LnRvQXJyYXkoKX19LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN5bmNNYXBGaWVsZHNfKCksdGhpcy5hcnJheX0sanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX1NUUklORyYmKGpzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW5jTWFwRmllbGRzXygpLHRoaXMuYXJyYXkudG9TdHJpbmcoKX0pLGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZXh0ZW5zaW9uT2JqZWN0Xyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7dmFyIHQ9ZS5maWVsZEluZGV4O2lmKGUuaXNSZXBlYXRlZCl7aWYoZS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIHRoaXMud3JhcHBlcnNfW3RdfHwodGhpcy53cmFwcGVyc19bdF09Z29vZy5hcnJheS5tYXAodGhpcy5leHRlbnNpb25PYmplY3RfW3RdfHxbXSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlLmN0b3IodCl9KSkpLHRoaXMud3JhcHBlcnNfW3RdfWVsc2UgaWYoZS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIXRoaXMud3JhcHBlcnNfW3RdJiZ0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF0mJih0aGlzLndyYXBwZXJzX1t0XT1uZXcgZS5jdG9yKHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1t0XSkpLHRoaXMud3JhcHBlcnNfW3RdO3JldHVybiB0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF19fSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnNldEV4dGVuc2lvbj1mdW5jdGlvbihlLHQpe3RoaXMud3JhcHBlcnNffHwodGhpcy53cmFwcGVyc189e30pLGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8odGhpcyk7dmFyIG89ZS5maWVsZEluZGV4O3JldHVybiBlLmlzUmVwZWF0ZWQ/KHQ9dHx8W10sZS5pc01lc3NhZ2VUeXBlKCk/KHRoaXMud3JhcHBlcnNfW29dPXQsdGhpcy5leHRlbnNpb25PYmplY3RfW29dPWdvb2cuYXJyYXkubWFwKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvQXJyYXkoKX0pKSk6dGhpcy5leHRlbnNpb25PYmplY3RfW29dPXQpOmUuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tvXT10LHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT10P3QudG9BcnJheSgpOnQpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT10LHRoaXN9LGpzcGIuTWVzc2FnZS5kaWZmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdC5jb25zdHJ1Y3RvcikpdGhyb3cgRXJyb3IoXCJNZXNzYWdlcyBoYXZlIGRpZmZlcmVudCB0eXBlcy5cIik7dmFyIG89ZS50b0FycmF5KCk7dD10LnRvQXJyYXkoKTt2YXIgcj1bXSxuPTAsaT1vLmxlbmd0aD50Lmxlbmd0aD9vLmxlbmd0aDp0Lmxlbmd0aDtmb3IoZS5nZXRKc1BiTWVzc2FnZUlkKCkmJihyWzBdPWUuZ2V0SnNQYk1lc3NhZ2VJZCgpLG49MSk7bjxpO24rKylqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhvW25dLHRbbl0pfHwocltuXT10W25dKTtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3Iocil9LGpzcGIuTWVzc2FnZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09dHx8ISghZXx8IXQpJiZlIGluc3RhbmNlb2YgdC5jb25zdHJ1Y3RvciYmanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoZS50b0FycmF5KCksdC50b0FycmF5KCkpfSxqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnM9ZnVuY3Rpb24oZSx0KXtlPWV8fHt9LHQ9dHx8e307dmFyIG8scj17fTtmb3IobyBpbiBlKXJbb109MDtmb3IobyBpbiB0KXJbb109MDtmb3IobyBpbiByKWlmKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhlW29dLHRbb10pKXJldHVybiExO3JldHVybiEwfSxqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcz1mdW5jdGlvbihlLHQpe2lmKGU9PXQpcmV0dXJuITA7aWYoIWdvb2cuaXNPYmplY3QoZSl8fCFnb29nLmlzT2JqZWN0KHQpKXJldHVybiEhKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZpc05hTihlKXx8XCJudW1iZXJcIj09dHlwZW9mIHQmJmlzTmFOKHQpKSYmU3RyaW5nKGUpPT1TdHJpbmcodCk7aWYoZS5jb25zdHJ1Y3RvciE9dC5jb25zdHJ1Y3RvcilyZXR1cm4hMTtpZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5KXtpZihlLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYoZVtvXSE9dFtvXSlyZXR1cm4hMTtyZXR1cm4hMH1pZihlLmNvbnN0cnVjdG9yPT09QXJyYXkpe3ZhciByPXZvaWQgMCxuPXZvaWQgMCxpPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKTtmb3Iobz0wO288aTtvKyspe3ZhciBzPWVbb10sYT10W29dO2lmKHMmJnMuY29uc3RydWN0b3I9PU9iamVjdCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodm9pZCAwPT09ciksZ29vZy5hc3NlcnRzLmFzc2VydChvPT09ZS5sZW5ndGgtMSkscj1zLHM9dm9pZCAwKSxhJiZhLmNvbnN0cnVjdG9yPT1PYmplY3QmJihnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMD09PW4pLGdvb2cuYXNzZXJ0cy5hc3NlcnQobz09PXQubGVuZ3RoLTEpLG49YSxhPXZvaWQgMCksIWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKHMsYSkpcmV0dXJuITF9cmV0dXJuIXImJiFufHwocj1yfHx7fSxuPW58fHt9LGpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucyhyLG4pKX1pZihlLmNvbnN0cnVjdG9yPT09T2JqZWN0KXJldHVybiBqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMoZSx0KTt0aHJvdyBFcnJvcihcIkludmFsaWQgdHlwZSBpbiBKU1BCIGFycmF5XCIpfSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmNsb25lTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKHRoaXMpfSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UodGhpcyl9LGpzcGIuTWVzc2FnZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZShlKX0sanNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IoanNwYi5NZXNzYWdlLmNsb25lXyhlLnRvQXJyYXkoKSkpfSxqc3BiLk1lc3NhZ2UuY29weUludG89ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YodCxqc3BiLk1lc3NhZ2UpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZS5jb25zdHJ1Y3Rvcj09dC5jb25zdHJ1Y3RvcixcIkNvcHkgc291cmNlIGFuZCB0YXJnZXQgbWVzc2FnZSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlLlwiKSxlPWpzcGIuTWVzc2FnZS5jbG9uZShlKTtmb3IodmFyIG89dC50b0FycmF5KCkscj1lLnRvQXJyYXkoKSxuPW8ubGVuZ3RoPTA7bjxyLmxlbmd0aDtuKyspb1tuXT1yW25dO3Qud3JhcHBlcnNfPWUud3JhcHBlcnNfLHQuZXh0ZW5zaW9uT2JqZWN0Xz1lLmV4dGVuc2lvbk9iamVjdF99LGpzcGIuTWVzc2FnZS5jbG9uZV89ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PUFycmF5KGUubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb107bnVsbCE9ciYmKHRbb109XCJvYmplY3RcIj09dHlwZW9mIHI/anNwYi5NZXNzYWdlLmNsb25lXyhnb29nLmFzc2VydHMuYXNzZXJ0KHIpKTpyKX1yZXR1cm4gdH1pZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShlKTtmb3IobyBpbiB0PXt9LGUpbnVsbCE9KHI9ZVtvXSkmJih0W29dPVwib2JqZWN0XCI9PXR5cGVvZiByP2pzcGIuTWVzc2FnZS5jbG9uZV8oZ29vZy5hc3NlcnRzLmFzc2VydChyKSk6cik7cmV0dXJuIHR9LGpzcGIuTWVzc2FnZS5yZWdpc3Rlck1lc3NhZ2VUeXBlPWZ1bmN0aW9uKGUsdCl7dC5tZXNzYWdlSWQ9ZX0sanNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zPXt9LGpzcGIuTWVzc2FnZS5tZXNzYWdlU2V0RXh0ZW5zaW9uc0JpbmFyeT17fSxqc3BiLkV4cG9ydD17fSxleHBvcnRzLk1hcD1qc3BiLk1hcCxleHBvcnRzLk1lc3NhZ2U9anNwYi5NZXNzYWdlLGV4cG9ydHMuQmluYXJ5UmVhZGVyPWpzcGIuQmluYXJ5UmVhZGVyLGV4cG9ydHMuQmluYXJ5V3JpdGVyPWpzcGIuQmluYXJ5V3JpdGVyLGV4cG9ydHMuRXh0ZW5zaW9uRmllbGRJbmZvPWpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvLGV4cG9ydHMuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPWpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvLGV4cG9ydHMuZXhwb3J0U3ltYm9sPWdvb2cuZXhwb3J0U3ltYm9sLGV4cG9ydHMuaW5oZXJpdHM9Z29vZy5pbmhlcml0cyxleHBvcnRzLm9iamVjdD17ZXh0ZW5kOmdvb2cub2JqZWN0LmV4dGVuZH0sZXhwb3J0cy50eXBlT2Y9Z29vZy50eXBlT2Z9KS5jYWxsKHRoaXMsX193ZWJwYWNrX3JlcXVpcmVfXyg0KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQsbyl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG8ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBuPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLG8pLG4ubD0hMCxuLmV4cG9ydHN9cmV0dXJuIG8ubT1lLG8uYz10LG8uZD1mdW5jdGlvbihlLHQscil7by5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sby5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG8udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9byhlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG8ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIG4gaW4gZSlvLmQocixuLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbikpO3JldHVybiByfSxvLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG8uZCh0LFwiYVwiLHQpLHR9LG8ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sby5wPVwiXCIsbyhvLnM9MTApfShbZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oMyk7dC5NZXRhZGF0YT1yLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWJ1Zz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtjb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYXBwbHkobnVsbCxlKTpjb25zb2xlLmxvZy5hcHBseShudWxsLGUpfX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oMCksbj1vKDgpLGk9byg5KSxzPW8oMSksYT1vKDQpLHA9bygxNCk7dC5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGcoZSx0KX07dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdGFydGVkPSExLHRoaXMuc2VudEZpcnN0TWVzc2FnZT0hMSx0aGlzLmNvbXBsZXRlZD0hMSx0aGlzLmNsb3NlZD0hMSx0aGlzLmZpbmlzaGVkU2VuZGluZz0hMSx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcz1bXSx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcz1bXSx0aGlzLm9uRW5kQ2FsbGJhY2tzPVtdLHRoaXMucGFyc2VyPW5ldyBuLkNodW5rUGFyc2VyLHRoaXMubWV0aG9kRGVmaW5pdGlvbj1lLHRoaXMucHJvcHM9dCx0aGlzLmNyZWF0ZVRyYW5zcG9ydCgpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVUcmFuc3BvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmhvc3QrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLm1ldGhvZE5hbWUsdD17bWV0aG9kRGVmaW5pdGlvbjp0aGlzLm1ldGhvZERlZmluaXRpb24sZGVidWc6dGhpcy5wcm9wcy5kZWJ1Z3x8ITEsdXJsOmUsb25IZWFkZXJzOnRoaXMub25UcmFuc3BvcnRIZWFkZXJzLmJpbmQodGhpcyksb25DaHVuazp0aGlzLm9uVHJhbnNwb3J0Q2h1bmsuYmluZCh0aGlzKSxvbkVuZDp0aGlzLm9uVHJhbnNwb3J0RW5kLmJpbmQodGhpcyl9O3RoaXMucHJvcHMudHJhbnNwb3J0P3RoaXMudHJhbnNwb3J0PXRoaXMucHJvcHMudHJhbnNwb3J0KHQpOnRoaXMudHJhbnNwb3J0PWEubWFrZURlZmF1bHRUcmFuc3BvcnQodCl9LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0SGVhZGVycz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJvbkhlYWRlcnNcIixlLHQpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJncnBjLm9uSGVhZGVycyByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKDA9PT10KTtlbHNle3RoaXMucmVzcG9uc2VIZWFkZXJzPWUsdGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uSGVhZGVycy5yZXNwb25zZUhlYWRlcnNcIixKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNlSGVhZGVycyxudWxsLDIpKTt2YXIgbz1sKGUpO3RoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ1N0YXR1c1wiLG8pO3ZhciByPW8mJm8+PTA/bzppLmh0dHBTdGF0dXNUb0NvZGUodCk7dGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcIm9uSGVhZGVycy5jb2RlXCIscik7dmFyIG49ZS5nZXQoXCJncnBjLW1lc3NhZ2VcIil8fFtdO2lmKHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ01lc3NhZ2VcIixuKSx0aGlzLnJhd09uSGVhZGVycyhlKSxyIT09aS5Db2RlLk9LKXt2YXIgYT10aGlzLmRlY29kZUdSUENTdGF0dXMoblswXSk7dGhpcy5yYXdPbkVycm9yKHIsYSxlKX19fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydENodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcImdycGMub25DaHVuayByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNle3ZhciBvPVtdO3RyeXtvPXRoaXMucGFyc2VyLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybiB0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwib25DaHVuay5wYXJzaW5nIGVycm9yXCIsZSxlLm1lc3NhZ2UpLHZvaWQgdGhpcy5yYXdPbkVycm9yKGkuQ29kZS5JbnRlcm5hbCxcInBhcnNpbmcgZXJyb3I6IFwiK2UubWVzc2FnZSl9by5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmNodW5rVHlwZT09PW4uQ2h1bmtUeXBlLk1FU1NBR0Upe3ZhciBvPXQubWV0aG9kRGVmaW5pdGlvbi5yZXNwb25zZVR5cGUuZGVzZXJpYWxpemVCaW5hcnkoZS5kYXRhKTt0LnJhd09uTWVzc2FnZShvKX1lbHNlIGUuY2h1bmtUeXBlPT09bi5DaHVua1R5cGUuVFJBSUxFUlMmJih0LnJlc3BvbnNlSGVhZGVycz8odC5yZXNwb25zZVRyYWlsZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucHJvcHMuZGVidWcmJnMuZGVidWcoXCJvbkNodW5rLnRyYWlsZXJzXCIsdC5yZXNwb25zZVRyYWlsZXJzKSk6KHQucmVzcG9uc2VIZWFkZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucmF3T25IZWFkZXJzKHQucmVzcG9uc2VIZWFkZXJzKSkpfSkpfX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRFbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwiZ3JwYy5vbkVuZFwiKSx0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwiZ3JwYy5vbkVuZCByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKHZvaWQgMCE9PXRoaXMucmVzcG9uc2VUcmFpbGVycyl7dmFyIGU9bCh0aGlzLnJlc3BvbnNlVHJhaWxlcnMpO2lmKG51bGwhPT1lKXt2YXIgdD10aGlzLnJlc3BvbnNlVHJhaWxlcnMuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpLG89dGhpcy5kZWNvZGVHUlBDU3RhdHVzKHRbMF0pO3RoaXMucmF3T25FbmQoZSxvLHRoaXMucmVzcG9uc2VUcmFpbGVycyl9ZWxzZSB0aGlzLnJhd09uRXJyb3IoaS5Db2RlLkludGVybmFsLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKFRyYWlsZXJzIHByb3ZpZGVkKVwiKX1lbHNle2lmKHZvaWQgMD09PXRoaXMucmVzcG9uc2VIZWFkZXJzKXJldHVybiB2b2lkIHRoaXMucmF3T25FcnJvcihpLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGhlYWRlcnNcIik7dmFyIHI9bCh0aGlzLnJlc3BvbnNlSGVhZGVycyksbj10aGlzLnJlc3BvbnNlSGVhZGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIik7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcImdycGMuaGVhZGVycyBvbmx5IHJlc3BvbnNlIFwiLHIsbiksbnVsbD09PXIpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVuZChpLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGdycGMtc3RhdHVzIChIZWFkZXJzIG9ubHkpXCIsdGhpcy5yZXNwb25zZUhlYWRlcnMpO3ZhciBhPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyhuWzBdKTt0aGlzLnJhd09uRW5kKHIsYSx0aGlzLnJlc3BvbnNlSGVhZGVycyl9fSxlLnByb3RvdHlwZS5kZWNvZGVHUlBDU3RhdHVzPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVyblwiXCI7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxlLnByb3RvdHlwZS5yYXdPbkVuZD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwicmF3T25FbmRcIixlLHQsbyksdGhpcy5jb21wbGV0ZWR8fCh0aGlzLmNvbXBsZXRlZD0hMCx0aGlzLm9uRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFyLmNsb3NlZCl0cnl7bihlLHQsbyl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSkpfX0pKSl9LGUucHJvdG90eXBlLnJhd09uSGVhZGVycz1mdW5jdGlvbihlKXt0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwicmF3T25IZWFkZXJzXCIsZSksdGhpcy5jb21wbGV0ZWR8fHRoaXMub25IZWFkZXJzQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RyeXt0KGUpfWNhdGNoKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX19KSl9LGUucHJvdG90eXBlLnJhd09uRXJyb3I9ZnVuY3Rpb24oZSx0LG8pe3ZhciBuPXRoaXM7dm9pZCAwPT09byYmKG89bmV3IHIuTWV0YWRhdGEpLHRoaXMucHJvcHMuZGVidWcmJnMuZGVidWcoXCJyYXdPbkVycm9yXCIsZSx0KSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoIW4uY2xvc2VkKXRyeXtyKGUsdCxvKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25NZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5wcm9wcy5kZWJ1ZyYmcy5kZWJ1ZyhcInJhd09uTWVzc2FnZVwiLGUudG9PYmplY3QoKSksdGhpcy5jb21wbGV0ZWR8fHRoaXMuY2xvc2VkfHx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihvKXtpZighdC5jbG9zZWQpdHJ5e28oZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSkpfX0pKX0sZS5wcm90b3R5cGUub25IZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMub25IZWFkZXJzQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLm9uTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXt0aGlzLm9uRW5kQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBzdGFydGVkIC0gY2Fubm90IC5zdGFydCgpXCIpO3RoaXMuc3RhcnRlZD0hMDt2YXIgdD1uZXcgci5NZXRhZGF0YShlfHx7fSk7dC5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL2dycGMtd2ViK3Byb3RvXCIpLHQuc2V0KFwieC1ncnBjLXdlYlwiLFwiMVwiKSx0aGlzLnRyYW5zcG9ydC5zdGFydCh0KX0sZS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5zdGFydCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuc2VuZCgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKHRoaXMuZmluaXNoZWRTZW5kaW5nKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGZpbmlzaGVkIHNlbmRpbmcgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZighdGhpcy5tZXRob2REZWZpbml0aW9uLnJlcXVlc3RTdHJlYW0mJnRoaXMuc2VudEZpcnN0TWVzc2FnZSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIGFscmVhZHkgc2VudCBmb3Igbm9uLWNsaWVudC1zdHJlYW1pbmcgbWV0aG9kIC0gY2Fubm90IC5zZW5kKClcIik7dGhpcy5zZW50Rmlyc3RNZXNzYWdlPSEwO3ZhciB0PXAuZnJhbWVSZXF1ZXN0KGUpO3RoaXMudHJhbnNwb3J0LnNlbmRNZXNzYWdlKHQpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuZmluaXNoU2VuZCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuY2xvc2UoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZih0aGlzLmZpbmlzaGVkU2VuZGluZyl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBmaW5pc2hlZCBzZW5kaW5nIC0gY2Fubm90IC5maW5pc2hTZW5kKClcIik7dGhpcy5maW5pc2hlZFNlbmRpbmc9ITAsdGhpcy50cmFuc3BvcnQuZmluaXNoU2VuZCgpfSxlLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLnN0YXJ0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5jbG9zZSgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuY2xvc2UoKVwiKTt0aGlzLmNsb3NlZD0hMCx0aGlzLnByb3BzLmRlYnVnJiZzLmRlYnVnKFwicmVxdWVzdC5hYm9ydCBhYm9ydGluZyByZXF1ZXN0XCIpLHRoaXMudHJhbnNwb3J0LmNhbmNlbCgpfSxlfSgpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5nZXQoXCJncnBjLXN0YXR1c1wiKXx8W107aWYodC5sZW5ndGg+MCl0cnl7dmFyIG89dFswXTtyZXR1cm4gcGFyc2VJbnQobywxMCl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIG51bGx9fSxmdW5jdGlvbihlLHQsbyl7dmFyIHI7cj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBvKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgbj10W3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxvKSxuLmw9ITAsbi5leHBvcnRzfXJldHVybiBvLm09ZSxvLmM9dCxvLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG8uZD1mdW5jdGlvbihlLHQscil7by5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LG8ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gby5kKHQsXCJhXCIsdCksdH0sby5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvLnA9XCJcIixvKG8ucz0xKX0oW2Z1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDMpLG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09ZSYmKGU9e30pLHZvaWQgMD09PXQmJih0PXtzcGxpdFZhbHVlczohMX0pO3ZhciBvLG49dGhpczt0aGlzLmhlYWRlcnNNYXA9e30sZSYmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzJiZlIGluc3RhbmNlb2YgSGVhZGVycz9yLmdldEhlYWRlcktleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obyl7ci5nZXRIZWFkZXJWYWx1ZXMoZSxvKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNwbGl0VmFsdWVzP24uYXBwZW5kKG8sci5zcGxpdEhlYWRlclZhbHVlKGUpKTpuLmFwcGVuZChvLGUpfSkpfSkpOlwib2JqZWN0XCI9PXR5cGVvZihvPWUpJiZcIm9iamVjdFwiPT10eXBlb2Ygby5oZWFkZXJzTWFwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe24uYXBwZW5kKGUsdCl9KSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCYmZSBpbnN0YW5jZW9mIE1hcD9lLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bi5hcHBlbmQodCxlKX0pKTpcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLmFwcGVuZEZyb21TdHJpbmcoZSk6XCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPWVbdF07QXJyYXkuaXNBcnJheShvKT9vLmZvckVhY2goKGZ1bmN0aW9uKGUpe24uYXBwZW5kKHQsZSl9KSk6bi5hcHBlbmQodCxvKX0pKSl9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc3BsaXQoXCJcXHJcXG5cIiksbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dLG49ci5pbmRleE9mKFwiOlwiKTtpZihuPjApe3ZhciBpPXIuc3Vic3RyaW5nKDAsbikudHJpbSgpLHM9ci5zdWJzdHJpbmcobisxKS50cmltKCk7dGhpcy5hcHBlbmQoaSxzKX19fSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbz1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYodm9pZCAwPT09dClkZWxldGUgdGhpcy5oZWFkZXJzTWFwW29dO2Vsc2V7dmFyIG49dGhpcy5oZWFkZXJzTWFwW29dO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0KTtpPj0wJiZuLnNwbGljZShpLDEpLDA9PT1uLmxlbmd0aCYmZGVsZXRlIHRoaXMuaGVhZGVyc01hcFtvXX19fSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLG49ci5ub3JtYWxpemVOYW1lKGUpO0FycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzTWFwW25dKXx8KHRoaXMuaGVhZGVyc01hcFtuXT1bXSksQXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goKGZ1bmN0aW9uKGUpe28uaGVhZGVyc01hcFtuXS5wdXNoKHIubm9ybWFsaXplVmFsdWUoZSkpfSkpOnRoaXMuaGVhZGVyc01hcFtuXS5wdXNoKHIubm9ybWFsaXplVmFsdWUodCkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49W107dC5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnB1c2goci5ub3JtYWxpemVWYWx1ZShlKSl9KSksdGhpcy5oZWFkZXJzTWFwW29dPW59ZWxzZSB0aGlzLmhlYWRlcnNNYXBbb109W3Iubm9ybWFsaXplVmFsdWUodCldfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10KXt2YXIgbj1yLm5vcm1hbGl6ZVZhbHVlKHQpO3JldHVybiBvLmluZGV4T2Yobik+PTB9cmV0dXJuITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtyZXR1cm4gdm9pZCAwIT09dD90LmNvbmNhdCgpOltdfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5oZWFkZXJzTWFwKS5mb3JFYWNoKChmdW5jdGlvbihvKXtlKG8sdC5oZWFkZXJzTWFwW29dKX0pLHRoaXMpfSxlLnByb3RvdHlwZS50b0hlYWRlcnM9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgSGVhZGVycyl7dmFyIGU9bmV3IEhlYWRlcnM7cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXtvLmZvckVhY2goKGZ1bmN0aW9uKG8pe2UuYXBwZW5kKHQsbyl9KSl9KSksZX10aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNsYXNzIGlzIG5vdCBkZWZpbmVkXCIpfSxlfSgpO3QuQnJvd3NlckhlYWRlcnM9bn0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oMCk7dC5Ccm93c2VySGVhZGVycz1yLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pdGVyYXRlSGVhZGVycz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1lW1N5bWJvbC5pdGVyYXRvcl0oKSxyPW8ubmV4dCgpOyFyLmRvbmU7KXQoci52YWx1ZVswXSkscj1vLm5leHQoKX0sdC5pdGVyYXRlSGVhZGVyc0tleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89ZS5rZXlzKCkscj1vLm5leHQoKTshci5kb25lOyl0KHIudmFsdWUpLHI9by5uZXh0KCl9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygyKTt0Lm5vcm1hbGl6ZU5hbWU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHQubm9ybWFsaXplVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksZX0sdC5nZXRIZWFkZXJWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1lO2lmKG8gaW5zdGFuY2VvZiBIZWFkZXJzJiZvLmdldEFsbClyZXR1cm4gby5nZXRBbGwodCk7dmFyIHI9by5nZXQodCk7cmV0dXJuIHImJlwic3RyaW5nXCI9PXR5cGVvZiByP1tyXTpyfSx0LmdldEhlYWRlcktleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxvPXt9LG49W107cmV0dXJuIHQua2V5cz9yLml0ZXJhdGVIZWFkZXJzS2V5cyh0LChmdW5jdGlvbihlKXtvW2VdfHwob1tlXT0hMCxuLnB1c2goZSkpfSkpOnQuZm9yRWFjaD90LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7b1t0XXx8KG9bdF09ITAsbi5wdXNoKHQpKX0pKTpyLml0ZXJhdGVIZWFkZXJzKHQsKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07b1t0XXx8KG9bdF09ITAsbi5wdXNoKHQpKX0pKSxufSx0LnNwbGl0SGVhZGVyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuc3BsaXQoXCIsIFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSl9KSksdH19XSl9LGUuZXhwb3J0cz1yKCl9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDUpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHIuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydCh7d2l0aENyZWRlbnRpYWxzOiExfSkoZSl9O3Quc2V0RGVmYXVsdFRyYW5zcG9ydEZhY3Rvcnk9ZnVuY3Rpb24oZSl7bj1lfSx0Lm1ha2VEZWZhdWx0VHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW8oNiksbj1vKDcpO3QuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydD1mdW5jdGlvbihlKXtpZihyLmRldGVjdEZldGNoU3VwcG9ydCgpKXt2YXIgdD17Y3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHM/XCJpbmNsdWRlXCI6XCJzYW1lLW9yaWdpblwifTtyZXR1cm4gci5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0KHQpfXJldHVybiBuLlhoclRyYW5zcG9ydCh7d2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSl9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbz0xLHI9YXJndW1lbnRzLmxlbmd0aDtvPHI7bysrKWZvcih2YXIgbiBpbiB0PWFyZ3VtZW50c1tvXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPW8oMCksaT1vKDEpO3QuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVidWcmJmkuZGVidWcoXCJmZXRjaFJlcXVlc3RcIixlKSxuZXcgcyhlLHQpfSh0LGUpfX07dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jYW5jZWxsZWQ9ITEsdGhpcy5jb250cm9sbGVyPXNlbGYuQWJvcnRDb250cm9sbGVyJiZuZXcgQWJvcnRDb250cm9sbGVyLHRoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5wdW1wPWZ1bmN0aW9uKGUsdCl7dmFyIG89dGhpcztpZih0aGlzLnJlYWRlcj1lLHRoaXMuY2FuY2VsbGVkKXJldHVybiB0aGlzLm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJGZXRjaC5wdW1wLmNhbmNlbCBhdCBmaXJzdCBwdW1wXCIpLHZvaWQgdGhpcy5yZWFkZXIuY2FuY2VsKCk7dGhpcy5yZWFkZXIucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUuZG9uZSlyZXR1cm4gby5vcHRpb25zLm9uRW5kKCksdDtvLm9wdGlvbnMub25DaHVuayhlLnZhbHVlKSxvLnB1bXAoby5yZWFkZXIsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe28uY2FuY2VsbGVkP28ub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmNhdGNoIC0gcmVxdWVzdCBjYW5jZWxsZWRcIik6KG8uY2FuY2VsbGVkPSEwLG8ub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmNhdGNoXCIsZS5tZXNzYWdlKSxvLm9wdGlvbnMub25FbmQoZSkpfSkpfSxlLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZmV0Y2godGhpcy5vcHRpb25zLnVybCxyKHt9LHRoaXMuaW5pdCx7aGVhZGVyczp0aGlzLm1ldGFkYXRhLnRvSGVhZGVycygpLG1ldGhvZDpcIlBPU1RcIixib2R5OmUsc2lnbmFsOnRoaXMuY29udHJvbGxlciYmdGhpcy5jb250cm9sbGVyLnNpZ25hbH0pKS50aGVuKChmdW5jdGlvbihlKXtpZih0Lm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJGZXRjaC5yZXNwb25zZVwiLGUpLHQub3B0aW9ucy5vbkhlYWRlcnMobmV3IG4uTWV0YWRhdGEoZS5oZWFkZXJzKSxlLnN0YXR1cyksIWUuYm9keSlyZXR1cm4gZTt0LnB1bXAoZS5ib2R5LmdldFJlYWRlcigpLGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt0LmNhbmNlbGxlZD90Lm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJGZXRjaC5jYXRjaCAtIHJlcXVlc3QgY2FuY2VsbGVkXCIpOih0LmNhbmNlbGxlZD0hMCx0Lm9wdGlvbnMuZGVidWcmJmkuZGVidWcoXCJGZXRjaC5jYXRjaFwiLGUubWVzc2FnZSksdC5vcHRpb25zLm9uRW5kKGUpKX0pKX0sZS5wcm90b3R5cGUuc2VuZE1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt0aGlzLm1ldGFkYXRhPWV9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsbGVkP3RoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmFib3J0LmNhbmNlbCBhbHJlYWR5IGNhbmNlbGxlZFwiKToodGhpcy5jYW5jZWxsZWQ9ITAsdGhpcy5yZWFkZXI/KHRoaXMub3B0aW9ucy5kZWJ1ZyYmaS5kZWJ1ZyhcIkZldGNoLmFib3J0LmNhbmNlbFwiKSx0aGlzLnJlYWRlci5jYW5jZWwoKSk6dGhpcy5vcHRpb25zLmRlYnVnJiZpLmRlYnVnKFwiRmV0Y2guYWJvcnQuY2FuY2VsIGJlZm9yZSByZWFkZXJcIiksdGhpcy5jb250cm9sbGVyJiZ0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSl9LGV9KCk7dC5kZXRlY3RGZXRjaFN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzcG9uc2UmJlJlc3BvbnNlLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImJvZHlcIikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEhlYWRlcnN9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdCl0Lmhhc093blByb3BlcnR5KG8pJiYoZVtvXT10W29dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooby5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG8pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9bygwKSxzPW8oMSksYT1vKDExKTt0LlhoclRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoYS5kZXRlY3RNb3pYSFJTdXBwb3J0KCkpcmV0dXJuIG5ldyBnKHQsZSk7aWYoYS5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydCgpKXJldHVybiBuZXcgcCh0LGUpO3Rocm93IG5ldyBFcnJvcihcIlRoaXMgZW52aXJvbm1lbnQncyBYSFIgaW1wbGVtZW50YXRpb24gY2Fubm90IHN1cHBvcnQgYmluYXJ5IHRyYW5zZmVyLlwiKX19O3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJYSFIub25Qcm9ncmVzc0V2ZW50Lmxlbmd0aDogXCIsdGhpcy54aHIucmVzcG9uc2UubGVuZ3RoKTt2YXIgZT10aGlzLnhoci5yZXNwb25zZS5zdWJzdHIodGhpcy5pbmRleCk7dGhpcy5pbmRleD10aGlzLnhoci5yZXNwb25zZS5sZW5ndGg7dmFyIHQ9dShlKTt0aGlzLm9wdGlvbnMub25DaHVuayh0KX0sZS5wcm90b3R5cGUub25Mb2FkRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJYSFIub25Mb2FkRXZlbnRcIiksdGhpcy5vcHRpb25zLm9uRW5kKCl9LGUucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJYSFIub25TdGF0ZUNoYW5nZVwiLHRoaXMueGhyLnJlYWR5U3RhdGUpLHRoaXMueGhyLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEJiZ0aGlzLm9wdGlvbnMub25IZWFkZXJzKG5ldyBpLk1ldGFkYXRhKHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx0aGlzLnhoci5zdGF0dXMpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnhoci5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubWV0YWRhdGE9ZTt2YXIgbz1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy54aHI9byxvLm9wZW4oXCJQT1NUXCIsdGhpcy5vcHRpb25zLnVybCksdGhpcy5jb25maWd1cmVYaHIoKSx0aGlzLm1ldGFkYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7by5zZXRSZXF1ZXN0SGVhZGVyKGUsdC5qb2luKFwiLCBcIikpfSkpLG8ud2l0aENyZWRlbnRpYWxzPUJvb2xlYW4odGhpcy5pbml0LndpdGhDcmVkZW50aWFscyksby5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLHRoaXMub25Qcm9ncmVzc0V2ZW50LmJpbmQodGhpcykpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRlbmRcIix0aGlzLm9uTG9hZEV2ZW50LmJpbmQodGhpcykpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3Qub3B0aW9ucy5kZWJ1ZyYmcy5kZWJ1ZyhcIlhIUi5lcnJvclwiLGUpLHQub3B0aW9ucy5vbkVuZChlLmVycm9yKX0pKX0sZS5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy54aHIucmVzcG9uc2VUeXBlPVwidGV4dFwiLHRoaXMueGhyLm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkXCIpfSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJYSFIuYWJvcnRcIiksdGhpcy54aHIuYWJvcnQoKX0sZX0oKTt0LlhIUj1wO3ZhciBnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBuKHQsZSksdC5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRlYnVnJiZzLmRlYnVnKFwiTW96WEhSLmNvbmZpZ3VyZVhocjogc2V0dGluZyByZXNwb25zZVR5cGUgdG8gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJ1wiKSx0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwifSx0LnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnhoci5yZXNwb25zZTt0aGlzLm9wdGlvbnMuZGVidWcmJnMuZGVidWcoXCJNb3pYSFIub25Qcm9ncmVzc0V2ZW50OiBcIixuZXcgVWludDhBcnJheShlKSksdGhpcy5vcHRpb25zLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkoZSkpfSx0fShwKTtmdW5jdGlvbiBsKGUsdCl7dmFyIG89ZS5jaGFyQ29kZUF0KHQpO2lmKG8+PTU1Mjk2JiZvPD01NjMxOSl7dmFyIHI9ZS5jaGFyQ29kZUF0KHQrMSk7cj49NTYzMjAmJnI8PTU3MzQzJiYobz02NTUzNisoby01NTI5Njw8MTApKyhyLTU2MzIwKSl9cmV0dXJuIG99ZnVuY3Rpb24gdShlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG89MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQ/ZS5jb2RlUG9pbnRBdChyKTpsKGUscik7dFtvKytdPTI1NSZufXJldHVybiB0fXQuTW96Q2h1bmtlZEFycmF5QnVmZmVyWEhSPWcsdC5zdHJpbmdUb0FycmF5QnVmZmVyPXV9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcixuPW8oMCk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDk9PT1lfHwxMD09PWV8fDEzPT09ZX0oZSl8fGU+PTMyJiZlPD0xMjZ9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9MDt0IT09ZS5sZW5ndGg7Kyt0KWlmKCFpKGVbdF0pKXRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGlzIG5vdCB2YWxpZCAocHJpbnRhYmxlKSBBU0NJSVwiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDEyOD09KDEyOCZlLmdldFVpbnQ4KDApKX1mdW5jdGlvbiBwKGUpe3JldHVybiBlLmdldFVpbnQzMigxLCExKX1mdW5jdGlvbiBnKGUsdCxvKXtyZXR1cm4gZS5ieXRlTGVuZ3RoLXQ+PW99ZnVuY3Rpb24gbChlLHQsbyl7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSh0LG8pO3ZhciByPWUubGVuZ3RoO3ZvaWQgMCE9PW8mJihyPW8pO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheShyLXQpLGk9MCxzPXQ7czxyO3MrKyluW2krK109ZVtzXTtyZXR1cm4gbn10LmRlY29kZUFTQ0lJPXMsdC5lbmNvZGVBU0NJST1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG89MDtvIT09ZS5sZW5ndGg7KytvKXt2YXIgcj1lLmNoYXJDb2RlQXQobyk7aWYoIWkocikpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgY29udGFpbnMgaW52YWxpZCBBU0NJSVwiKTt0W29dPXJ9cmV0dXJuIHR9LGZ1bmN0aW9uKGUpe2VbZS5NRVNTQUdFPTFdPVwiTUVTU0FHRVwiLGVbZS5UUkFJTEVSUz0yXT1cIlRSQUlMRVJTXCJ9KHI9dC5DaHVua1R5cGV8fCh0LkNodW5rVHlwZT17fSkpO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYnVmZmVyPW51bGwsdGhpcy5wb3NpdGlvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aCYmdClyZXR1cm5bXTt2YXIgbyxpPVtdO2lmKG51bGw9PXRoaXMuYnVmZmVyKXRoaXMuYnVmZmVyPWUsdGhpcy5wb3NpdGlvbj0wO2Vsc2UgaWYodGhpcy5wb3NpdGlvbj09PXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZXt2YXIgdT10aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoLXRoaXMucG9zaXRpb24sYz1uZXcgVWludDhBcnJheSh1K2UuYnl0ZUxlbmd0aCksZD1sKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24pO2Muc2V0KGQsMCk7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoZSk7Yy5zZXQoZix1KSx0aGlzLmJ1ZmZlcj1jLHRoaXMucG9zaXRpb249MH1mb3IoOzspe2lmKCFnKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSkpcmV0dXJuIGk7dmFyIGg9bCh0aGlzLmJ1ZmZlcix0aGlzLnBvc2l0aW9uLHRoaXMucG9zaXRpb24rNSksYj1uZXcgRGF0YVZpZXcoaC5idWZmZXIsaC5ieXRlT2Zmc2V0LGguYnl0ZUxlbmd0aCkseT1wKGIpO2lmKCFnKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSt5KSlyZXR1cm4gaTt2YXIgbT1sKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24rNSx0aGlzLnBvc2l0aW9uKzUreSk7aWYodGhpcy5wb3NpdGlvbis9NSt5LGEoYikpcmV0dXJuIGkucHVzaCh7Y2h1bmtUeXBlOnIuVFJBSUxFUlMsdHJhaWxlcnM6KG89bSxuZXcgbi5NZXRhZGF0YShzKG8pKSl9KSxpO2kucHVzaCh7Y2h1bmtUeXBlOnIuTUVTU0FHRSxkYXRhOm19KX19LGV9KCk7dC5DaHVua1BhcnNlcj11fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlLk9LPTBdPVwiT0tcIixlW2UuQ2FuY2VsZWQ9MV09XCJDYW5jZWxlZFwiLGVbZS5Vbmtub3duPTJdPVwiVW5rbm93blwiLGVbZS5JbnZhbGlkQXJndW1lbnQ9M109XCJJbnZhbGlkQXJndW1lbnRcIixlW2UuRGVhZGxpbmVFeGNlZWRlZD00XT1cIkRlYWRsaW5lRXhjZWVkZWRcIixlW2UuTm90Rm91bmQ9NV09XCJOb3RGb3VuZFwiLGVbZS5BbHJlYWR5RXhpc3RzPTZdPVwiQWxyZWFkeUV4aXN0c1wiLGVbZS5QZXJtaXNzaW9uRGVuaWVkPTddPVwiUGVybWlzc2lvbkRlbmllZFwiLGVbZS5SZXNvdXJjZUV4aGF1c3RlZD04XT1cIlJlc291cmNlRXhoYXVzdGVkXCIsZVtlLkZhaWxlZFByZWNvbmRpdGlvbj05XT1cIkZhaWxlZFByZWNvbmRpdGlvblwiLGVbZS5BYm9ydGVkPTEwXT1cIkFib3J0ZWRcIixlW2UuT3V0T2ZSYW5nZT0xMV09XCJPdXRPZlJhbmdlXCIsZVtlLlVuaW1wbGVtZW50ZWQ9MTJdPVwiVW5pbXBsZW1lbnRlZFwiLGVbZS5JbnRlcm5hbD0xM109XCJJbnRlcm5hbFwiLGVbZS5VbmF2YWlsYWJsZT0xNF09XCJVbmF2YWlsYWJsZVwiLGVbZS5EYXRhTG9zcz0xNV09XCJEYXRhTG9zc1wiLGVbZS5VbmF1dGhlbnRpY2F0ZWQ9MTZdPVwiVW5hdXRoZW50aWNhdGVkXCJ9KHI9dC5Db2RlfHwodC5Db2RlPXt9KSksdC5odHRwU3RhdHVzVG9Db2RlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHIuSW50ZXJuYWw7Y2FzZSAyMDA6cmV0dXJuIHIuT0s7Y2FzZSA0MDA6cmV0dXJuIHIuSW52YWxpZEFyZ3VtZW50O2Nhc2UgNDAxOnJldHVybiByLlVuYXV0aGVudGljYXRlZDtjYXNlIDQwMzpyZXR1cm4gci5QZXJtaXNzaW9uRGVuaWVkO2Nhc2UgNDA0OnJldHVybiByLk5vdEZvdW5kO2Nhc2UgNDA5OnJldHVybiByLkFib3J0ZWQ7Y2FzZSA0MTI6cmV0dXJuIHIuRmFpbGVkUHJlY29uZGl0aW9uO2Nhc2UgNDI5OnJldHVybiByLlJlc291cmNlRXhoYXVzdGVkO2Nhc2UgNDk5OnJldHVybiByLkNhbmNlbGVkO2Nhc2UgNTAwOnJldHVybiByLlVua25vd247Y2FzZSA1MDE6cmV0dXJuIHIuVW5pbXBsZW1lbnRlZDtjYXNlIDUwMzpyZXR1cm4gci5VbmF2YWlsYWJsZTtjYXNlIDUwNDpyZXR1cm4gci5EZWFkbGluZUV4Y2VlZGVkO2RlZmF1bHQ6cmV0dXJuIHIuVW5rbm93bn19fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygzKSxuPW8oNCksaT1vKDYpLHM9bygxMiksYT1vKDcpLHA9byg1KSxnPW8oOSksbD1vKDEzKSx1PW8oMTUpLGM9bygyKTshZnVuY3Rpb24oZSl7ZS5zZXREZWZhdWx0VHJhbnNwb3J0PW4uc2V0RGVmYXVsdFRyYW5zcG9ydEZhY3RvcnksZS5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0PXAuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydCxlLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQ9aS5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0LGUuWGhyVHJhbnNwb3J0PWEuWGhyVHJhbnNwb3J0LGUuV2Vic29ja2V0VHJhbnNwb3J0PXMuV2Vic29ja2V0VHJhbnNwb3J0LGUuQ29kZT1nLkNvZGUsZS5NZXRhZGF0YT1yLkJyb3dzZXJIZWFkZXJzLGUuY2xpZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMuY2xpZW50KGUsdCl9LGUuaW52b2tlPWwuaW52b2tlLGUudW5hcnk9dS51bmFyeX0odC5ncnBjfHwodC5ncnBjPXt9KSl9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjt2YXIgcjtmdW5jdGlvbiBuKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09cilyZXR1cm4gcjtpZihYTUxIdHRwUmVxdWVzdCl7cj1uZXcgWE1MSHR0cFJlcXVlc3Q7dHJ5e3Iub3BlbihcIkdFVFwiLFwiaHR0cHM6Ly9sb2NhbGhvc3RcIil9Y2F0Y2goZSl7fX1yZXR1cm4gcn0oKTtpZighdClyZXR1cm4hMTt0cnl7cmV0dXJuIHQucmVzcG9uc2VUeXBlPWUsdC5yZXNwb25zZVR5cGU9PT1lfWNhdGNoKGUpe31yZXR1cm4hMX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnhoclN1cHBvcnRzUmVzcG9uc2VUeXBlPW4sdC5kZXRlY3RNb3pYSFJTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiZuKFwibW96LWNodW5rZWQtYXJyYXlidWZmZXJcIil9LHQuZGV0ZWN0WEhST3ZlcnJpZGVNaW1lVHlwZVN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcIm92ZXJyaWRlTWltZVR5cGVcIil9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHIsbj1vKDEpLGk9byg4KTshZnVuY3Rpb24oZSl7ZVtlLkZJTklTSF9TRU5EPTFdPVwiRklOSVNIX1NFTkRcIn0ocnx8KHI9e30pKTt2YXIgcz1uZXcgVWludDhBcnJheShbMV0pO3QuV2Vic29ja2V0VHJhbnNwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtlLmRlYnVnJiZuLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdFwiLGUpO3ZhciB0LG89ZnVuY3Rpb24oZSl7aWYoXCJodHRwczovL1wiPT09ZS5zdWJzdHIoMCw4KSlyZXR1cm5cIndzczovL1wiK2Uuc3Vic3RyKDgpO2lmKFwiaHR0cDovL1wiPT09ZS5zdWJzdHIoMCw3KSlyZXR1cm5cIndzOi8vXCIrZS5zdWJzdHIoNyk7dGhyb3cgbmV3IEVycm9yKFwiV2Vic29ja2V0IHRyYW5zcG9ydCBjb25zdHJ1Y3RlZCB3aXRoIG5vbi1odHRwczovLyBvciBodHRwOi8vIGhvc3QuXCIpfShlLnVybCksYT1bXTtmdW5jdGlvbiBwKGUpe2lmKGU9PT1yLkZJTklTSF9TRU5EKXQuc2VuZChzKTtlbHNle3ZhciBvPWUsbj1uZXcgSW50OEFycmF5KG8uYnl0ZUxlbmd0aCsxKTtuLnNldChuZXcgVWludDhBcnJheShbMF0pKSxuLnNldChvLDEpLHQuc2VuZChuKX19cmV0dXJue3NlbmRNZXNzYWdlOmZ1bmN0aW9uKGUpe3QmJnQucmVhZHlTdGF0ZSE9PXQuQ09OTkVDVElORz9wKGUpOmEucHVzaChlKX0sZmluaXNoU2VuZDpmdW5jdGlvbigpe3QmJnQucmVhZHlTdGF0ZSE9PXQuQ09OTkVDVElORz9wKHIuRklOSVNIX1NFTkQpOmEucHVzaChyLkZJTklTSF9TRU5EKX0sc3RhcnQ6ZnVuY3Rpb24ocil7KHQ9bmV3IFdlYlNvY2tldChvLFtcImdycGMtd2Vic29ja2V0c1wiXSkpLmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLHQub25vcGVuPWZ1bmN0aW9uKCl7dmFyIG87ZS5kZWJ1ZyYmbi5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3Qub25vcGVuXCIpLHQuc2VuZCgobz1cIlwiLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtvKz1lK1wiOiBcIit0LmpvaW4oXCIsIFwiKStcIlxcclxcblwifSkpLGkuZW5jb2RlQVNDSUkobykpKSxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3AoZSl9KSl9LHQub25jbG9zZT1mdW5jdGlvbih0KXtlLmRlYnVnJiZuLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbmNsb3NlXCIsdCksZS5vbkVuZCgpfSx0Lm9uZXJyb3I9ZnVuY3Rpb24odCl7ZS5kZWJ1ZyYmbi5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3Qub25lcnJvclwiLHQpfSx0Lm9ubWVzc2FnZT1mdW5jdGlvbih0KXtlLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkodC5kYXRhKSl9fSxjYW5jZWw6ZnVuY3Rpb24oKXtlLmRlYnVnJiZuLmRlYnVnKFwid2Vic29ja2V0LmFib3J0XCIpLHQuY2xvc2UoKX19fShlKX19fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bygyKTt0Lmludm9rZT1mdW5jdGlvbihlLHQpe2lmKGUucmVxdWVzdFN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIuaW52b2tlIGNhbm5vdCBiZSB1c2VkIHdpdGggY2xpZW50LXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmNsaWVudCBpbnN0ZWFkLlwiKTt2YXIgbz1yLmNsaWVudChlLHtob3N0OnQuaG9zdCx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pO3JldHVybiB0Lm9uSGVhZGVycyYmby5vbkhlYWRlcnModC5vbkhlYWRlcnMpLHQub25NZXNzYWdlJiZvLm9uTWVzc2FnZSh0Lm9uTWVzc2FnZSksdC5vbkVuZCYmby5vbkVuZCh0Lm9uRW5kKSxvLnN0YXJ0KHQubWV0YWRhdGEpLG8uc2VuZCh0LnJlcXVlc3QpLG8uZmluaXNoU2VuZCgpLHtjbG9zZTpmdW5jdGlvbigpe28uY2xvc2UoKX19fX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZnJhbWVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VyaWFsaXplQmluYXJ5KCksbz1uZXcgQXJyYXlCdWZmZXIodC5ieXRlTGVuZ3RoKzUpO3JldHVybiBuZXcgRGF0YVZpZXcobywxLDQpLnNldFVpbnQzMigwLHQubGVuZ3RoLCExKSxuZXcgVWludDhBcnJheShvLDUpLnNldCh0KSxuZXcgVWludDhBcnJheShvKX19LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1vKDApLG49bygyKTt0LnVuYXJ5PWZ1bmN0aW9uKGUsdCl7aWYoZS5yZXNwb25zZVN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIudW5hcnkgY2Fubm90IGJlIHVzZWQgd2l0aCBzZXJ2ZXItc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuaW52b2tlIG9yIC5jbGllbnQgaW5zdGVhZC5cIik7aWYoZS5yZXF1ZXN0U3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIG89bnVsbCxpPW51bGwscz1uLmNsaWVudChlLHtob3N0OnQuaG9zdCx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pO3JldHVybiBzLm9uSGVhZGVycygoZnVuY3Rpb24oZSl7bz1lfSkpLHMub25NZXNzYWdlKChmdW5jdGlvbihlKXtpPWV9KSkscy5vbkVuZCgoZnVuY3Rpb24oZSxuLHMpe3Qub25FbmQoe3N0YXR1czplLHN0YXR1c01lc3NhZ2U6bixoZWFkZXJzOm98fG5ldyByLk1ldGFkYXRhLG1lc3NhZ2U6aSx0cmFpbGVyczpzfSl9KSkscy5zdGFydCh0Lm1ldGFkYXRhKSxzLnNlbmQodC5yZXF1ZXN0KSxzLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXtzLmNsb3NlKCl9fX19XSl9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM/dGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9LmNhbGwobnVsbCkscz1vKDE2KTtuLm9iamVjdC5leHRlbmQocHJvdG8scyksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucnBjLlN0YXR1c1wiLG51bGwsaSkscHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucnBjLlN0YXR1c1wiKSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5yZXBlYXRlZEZpZWxkc189WzNdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2NvZGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLG1lc3NhZ2U6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpLGRldGFpbHNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXREZXRhaWxzTGlzdCgpLHMuQW55LnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucnBjLlN0YXR1cztyZXR1cm4gcHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEludDMyKCk7ZS5zZXRDb2RlKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpO2Uuc2V0TWVzc2FnZShvKTticmVhaztjYXNlIDM6bz1uZXcgcy5Bbnk7dC5yZWFkTWVzc2FnZShvLHMuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGREZXRhaWxzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0Q29kZSgpKSYmdC53cml0ZUludDMyKDEsbyksKG89ZS5nZXRNZXNzYWdlKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyksKG89ZS5nZXREZXRhaWxzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLG8scy5Bbnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUuZ2V0Q29kZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5zZXRDb2RlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUuZ2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5zZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucnBjLlN0YXR1cy5wcm90b3R5cGUuZ2V0RGV0YWlsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscy5BbnksMyl9LHByb3RvLmdvb2dsZS5ycGMuU3RhdHVzLnByb3RvdHlwZS5zZXREZXRhaWxzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLmFkZERldGFpbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSx0KX0scHJvdG8uZ29vZ2xlLnJwYy5TdGF0dXMucHJvdG90eXBlLmNsZWFyRGV0YWlsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREZXRhaWxzTGlzdChbXSl9LG4ub2JqZWN0LmV4dGVuZCh0LHByb3RvLmdvb2dsZS5ycGMpfSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9bygwKSxuPXIsaT1mdW5jdGlvbigpe3JldHVybiB0aGlzP3RoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09aT9pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfS5jYWxsKG51bGwpLHM9bygxNSk7bi5vYmplY3QuZXh0ZW5kKHByb3RvLHMpO3ZhciBhPW8oMik7bi5vYmplY3QuZXh0ZW5kKHByb3RvLGEpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5UeXBlQ2FzZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLlR5cGVDYXNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVyc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3NcIixudWxsLGkpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVyc1wiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVyc1wiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3M9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3Msci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3NcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YVwiKSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtkYXRhOnQuZ2V0RGF0YV9hc0I2NCgpLGVvbTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkQnl0ZXMoKTtlLnNldERhdGEobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpO2Uuc2V0RW9tKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXREYXRhX2FzVTgoKSkubGVuZ3RoPjAmJnQud3JpdGVCeXRlcygxLG8pLChvPWUuZ2V0RW9tKCkpJiZ0LndyaXRlQm9vbCgyLG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLmdldERhdGFfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXREYXRhKCkpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLmdldERhdGFfYXNVOD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0RGF0YSgpKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5wcm90b3R5cGUuZ2V0RW9tPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UucHJvdG90eXBlLnNldEVvbT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW07cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRVaW50NjQoKTtlLnNldElkKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzswIT09KG89ZS5nZXRJZCgpKSYmdC53cml0ZVVpbnQ2NCgxLG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmVhbS5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5vbmVvZkdyb3Vwc189W1syLDNdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QuVHlwZUNhc2U9e1RZUEVfTk9UX1NFVDowLEhFQURFUlM6MixNRVNTQUdFOjN9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuZ2V0VHlwZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3Qub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtzdHJlYW06KG89dC5nZXRTdHJlYW0oKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnRvT2JqZWN0KGUsbyksaGVhZGVyczoobz10LmdldEhlYWRlcnMoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMudG9PYmplY3QoZSxvKSxtZXNzYWdlOihvPXQuZ2V0TWVzc2FnZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW07dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTdHJlYW0obyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnM7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEhlYWRlcnMobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE1lc3NhZ2Uobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldFN0cmVhbSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEhlYWRlcnMoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldE1lc3NhZ2UoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5nZXRTdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLnNldFN0cmVhbT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJTdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTdHJlYW0odm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5oYXNTdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXJzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SGVhZGVycyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLmhhc0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuZ2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZSwzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0LnByb3RvdHlwZS5zZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TWVzc2FnZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3QucHJvdG90eXBlLmhhc01lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bWV0aG9kOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxtZXRhZGF0YToobz10LmdldE1ldGFkYXRhKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnRvT2JqZWN0KGUsbyksdGltZW91dDoobz10LmdldFRpbWVvdXQoKSkmJnMuRHVyYXRpb24udG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TWV0aG9kKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRNZXRhZGF0YShvKTticmVhaztjYXNlIDM6bz1uZXcgcy5EdXJhdGlvbjt0LnJlYWRNZXNzYWdlKG8scy5EdXJhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VGltZW91dChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0TWV0aG9kKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRNZXRhZGF0YSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VGltZW91dCgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHMuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5nZXRNZXRob2Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5zZXRNZXRob2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLmdldE1ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5zZXRNZXRhZGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLmNsZWFyTWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXRhZGF0YSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RIZWFkZXJzLnByb3RvdHlwZS5oYXNNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuZ2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscy5EdXJhdGlvbiwzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdEhlYWRlcnMucHJvdG90eXBlLmNsZWFyVGltZW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFRpbWVvdXQodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0SGVhZGVycy5wcm90b3R5cGUuaGFzVGltZW91dD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtoYXNNZXNzYWdlOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDEsITEpLHBhY2tldE1lc3NhZ2U6KG89dC5nZXRQYWNrZXRNZXNzYWdlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UudG9PYmplY3QoZSxvKSxlb3M6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMywhMSl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRCb29sKCk7ZS5zZXRIYXNNZXNzYWdlKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0UGFja2V0TWVzc2FnZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCk7ZS5zZXRFb3Mobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldEhhc01lc3NhZ2UoKSkmJnQud3JpdGVCb29sKDEsbyksbnVsbCE9KG89ZS5nZXRQYWNrZXRNZXNzYWdlKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEVvcygpKSYmdC53cml0ZUJvb2woMyxvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuZ2V0SGFzTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxLCExKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuc2V0SGFzTWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UucHJvdG90eXBlLmdldFBhY2tldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuc2V0UGFja2V0TWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVxdWVzdE1lc3NhZ2UucHJvdG90eXBlLmNsZWFyUGFja2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhY2tldE1lc3NhZ2Uodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuaGFzUGFja2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuZ2V0RW9zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlcXVlc3RNZXNzYWdlLnByb3RvdHlwZS5zZXRFb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywzLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLm9uZW9mR3JvdXBzXz1bWzIsMyw0XV0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5UeXBlQ2FzZT17VFlQRV9OT1RfU0VUOjAsSEVBREVSUzoyLE1FU1NBR0U6MyxUUkFJTEVSUzo0fSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5nZXRUeXBlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtzdHJlYW06KG89dC5nZXRTdHJlYW0oKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnRvT2JqZWN0KGUsbyksaGVhZGVyczoobz10LmdldEhlYWRlcnMoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnRvT2JqZWN0KGUsbyksbWVzc2FnZToobz10LmdldE1lc3NhZ2UoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnRvT2JqZWN0KGUsbyksdHJhaWxlcnM6KG89dC5nZXRUcmFpbGVycygpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJlYW07dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTdHJlYW0obyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SGVhZGVycyhvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRNZXNzYWdlKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnM7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VHJhaWxlcnMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldFN0cmVhbSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEhlYWRlcnMoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRNZXNzYWdlKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VHJhaWxlcnMoKSkmJnQud3JpdGVNZXNzYWdlKDQsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyZWFtLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclN0cmVhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFN0cmVhbSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5oYXNTdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmdldEhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5zZXRIZWFkZXJzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRIZWFkZXJzKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmhhc0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmdldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5zZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5jbGVhck1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXNzYWdlKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmhhc01lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLmdldFRyYWlsZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMsNCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2UucHJvdG90eXBlLnNldFRyYWlsZXJzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw0LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclRyYWlsZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VHJhaWxlcnModm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZS5wcm90b3R5cGUuaGFzVHJhaWxlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17bWV0YWRhdGE6KG89dC5nZXRNZXRhZGF0YSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycztyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRNZXRhZGF0YShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRNZXRhZGF0YSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlSGVhZGVycy5wcm90b3R5cGUuZ2V0TWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnByb3RvdHlwZS5zZXRNZXRhZGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VIZWFkZXJzLnByb3RvdHlwZS5jbGVhck1ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TWV0YWRhdGEodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZUhlYWRlcnMucHJvdG90eXBlLmhhc01ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3BhY2tldE1lc3NhZ2U6KG89dC5nZXRQYWNrZXRNZXNzYWdlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5QYWNrZXRNZXNzYWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFBhY2tldE1lc3NhZ2Uobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0UGFja2V0TWVzc2FnZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUGFja2V0TWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnByb3RvdHlwZS5nZXRQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlBhY2tldE1lc3NhZ2UsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VNZXNzYWdlLnByb3RvdHlwZS5zZXRQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLmNsZWFyUGFja2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhY2tldE1lc3NhZ2Uodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZU1lc3NhZ2UucHJvdG90eXBlLmhhc1BhY2tldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17c3RhdHVzOihvPXQuZ2V0U3RhdHVzKCkpJiZhLlN0YXR1cy50b09iamVjdChlLG8pLG1ldGFkYXRhOihvPXQuZ2V0TWV0YWRhdGEoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycztyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IGEuU3RhdHVzO3QucmVhZE1lc3NhZ2UobyxhLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0U3RhdHVzKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRNZXRhZGF0YShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0U3RhdHVzKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8sYS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0TWV0YWRhdGEoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnByb3RvdHlwZS5nZXRTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLGEuU3RhdHVzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuY2xlYXJTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTdGF0dXModm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5SZXNwb25zZVRyYWlsZXJzLnByb3RvdHlwZS5oYXNTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuZ2V0TWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuUmVzcG9uc2VUcmFpbGVycy5wcm90b3R5cGUuc2V0TWV0YWRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLmNsZWFyTWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXRhZGF0YSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlJlc3BvbnNlVHJhaWxlcnMucHJvdG90eXBlLmhhc01ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3ZhbHVlc0xpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxKSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3M7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2UuYWRkVmFsdWVzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldFZhbHVlc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZFN0cmluZygxLG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MucHJvdG90eXBlLmdldFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnByb3RvdHlwZS5zZXRWYWx1ZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGV8fFtdKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnByb3RvdHlwZS5hZGRWYWx1ZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDEsZSx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnByb3RvdHlwZS5jbGVhclZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZXNMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXttZE1hcDoobz10LmdldE1kTWFwKCkpP28udG9PYmplY3QoZSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MudG9PYmplY3QpOltdfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGE7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89ZS5nZXRNZE1hcCgpO3QucmVhZE1lc3NhZ2UobywoZnVuY3Rpb24oZSx0KXtyLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShlLHQsci5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcsci5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuU3RyaW5ncy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsXCJcIixuZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzKX0pKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuTWV0YWRhdGEuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0TWRNYXAoITApKSYmby5nZXRMZW5ndGgoKT4wJiZvLnNlcmlhbGl6ZUJpbmFyeSgxLHQsci5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLHIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2UscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5TdHJpbmdzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5NZXRhZGF0YS5wcm90b3R5cGUuZ2V0TWRNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDEsZSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLlN0cmluZ3MpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk1ldGFkYXRhLnByb3RvdHlwZS5jbGVhck1kTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWRNYXAoKS5jbGVhcigpLHRoaXN9LG4ub2JqZWN0LmV4dGVuZCh0LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEpfSxmdW5jdGlvbihlLHQpe3ZhciBvO289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bz1vfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe1wib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJihvPXdpbmRvdyl9ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM/dGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9LmNhbGwobnVsbCkscz1vKDYpO24ub2JqZWN0LmV4dGVuZChwcm90byxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFsc1wiLG51bGwsaSkscHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzXCIpLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0XCIpLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZVwiKSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0XCIpLHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlXCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3R5cGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLHBheWxvYWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFR5cGUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQYXlsb2FkKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMudjEuQ3JlZGVudGlhbHMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRUeXBlKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRQYXlsb2FkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyl9LHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5wcm90b3R5cGUuZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5wcm90b3R5cGUuc2V0VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnByb3RvdHlwZS5nZXRQYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnByb3RvdHlwZS5zZXRQYXlsb2FkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2VudGl0eTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksY3JlZGVudGlhbHM6KG89dC5nZXRDcmVkZW50aWFscygpKSYmcHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRFbnRpdHkobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFsczt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLnYxLkNyZWRlbnRpYWxzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDcmVkZW50aWFscyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0RW50aXR5KCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRDcmVkZW50aWFscygpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRFbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuc2V0RW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q3JlZGVudGlhbHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy52MS5DcmVkZW50aWFscywyKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QucHJvdG90eXBlLnNldENyZWRlbnRpYWxzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDcmVkZW50aWFscyh2b2lkIDApfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2FjY2Vzc1Rva2VuOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVSZXNwb25zZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRBY2Nlc3NUb2tlbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRBY2Nlc3NUb2tlbigpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlUmVzcG9uc2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17ZW50aXR5OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0RW50aXR5KG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldEVudGl0eSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LnByb3RvdHlwZS5nZXRFbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXF1ZXN0LnByb3RvdHlwZS5zZXRFbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2FjY2Vzc1Rva2VuOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMudjEuQXV0aGVudGljYXRlVG9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEFjY2Vzc1Rva2VuKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLnYxLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldEFjY2Vzc1Rva2VuKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy52MS5BdXRoZW50aWNhdGVUb1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8ucHJvdG8ucnBjLnYxKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWk/aTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKSxzPW8oMjEpO24ub2JqZWN0LmV4dGVuZChwcm90byxzKTt2YXIgYT1vKDIyKTtuLm9iamVjdC5leHRlbmQocHJvdG8sYSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUuYXBpLmh0dHBcIixudWxsLGkpLHByb3RvLmdvb2dsZS5hcGkuaHR0cD1uZXcgci5FeHRlbnNpb25GaWVsZEluZm8oNzIyOTU3Mjgse2h0dHA6MH0scy5IdHRwUnVsZSxzLkh0dHBSdWxlLnRvT2JqZWN0LDApLGEuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5WzcyMjk1NzI4XT1uZXcgci5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8ocHJvdG8uZ29vZ2xlLmFwaS5odHRwLHIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkTWVzc2FnZSxyLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlLHMuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIscy5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsITEpLGEuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zWzcyMjk1NzI4XT1wcm90by5nb29nbGUuYXBpLmh0dHAsbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLmFwaSl9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM/dGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9LmNhbGwobnVsbCkscz1vKDYpO24ub2JqZWN0LmV4dGVuZChwcm90byxzKTt2YXIgYT1vKDIpO24ub2JqZWN0LmV4dGVuZChwcm90byxhKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuU3RhZ2VDYXNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UuU3RhZ2VDYXNlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5TdGFnZUNhc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0XCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QuVXBkYXRlQ2FzZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlclwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWdcIixudWxsLGkpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZVwiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0XCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlcixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXJcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWc9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZ1wiKSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0Lm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0XCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlXCIpLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Uub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3RcIikscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlXCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2NhbmRpZGF0ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksc2RwTWlkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxzZHBtTGluZUluZGV4OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMywwKSx1c2VybmFtZUZyYWdtZW50OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNCxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGU7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldENhbmRpZGF0ZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKTtlLnNldFNkcE1pZChvKTticmVhaztjYXNlIDM6bz10LnJlYWRVaW50MzIoKTtlLnNldFNkcG1MaW5lSW5kZXgobyk7YnJlYWs7Y2FzZSA0Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRVc2VybmFtZUZyYWdtZW50KG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRDYW5kaWRhdGUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVTdHJpbmcoMixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVVaW50MzIoMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0KSkmJnQud3JpdGVTdHJpbmcoNCxvKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLmdldENhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5zZXRDYW5kaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5nZXRTZHBNaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuc2V0U2RwTWlkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuY2xlYXJTZHBNaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuaGFzU2RwTWlkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuZ2V0U2RwbUxpbmVJbmRleD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5zZXRTZHBtTGluZUluZGV4PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuY2xlYXJTZHBtTGluZUluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLmhhc1NkcG1MaW5lSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5nZXRVc2VybmFtZUZyYWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUucHJvdG90eXBlLnNldFVzZXJuYW1lRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnByb3RvdHlwZS5jbGVhclVzZXJuYW1lRnJhZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCx2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5wcm90b3R5cGUuaGFzVXNlcm5hbWVGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17c2RwOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxkaXNhYmxlVHJpY2tsZTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0O3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0U2RwKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKTtlLnNldERpc2FibGVUcmlja2xlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRTZHAoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldERpc2FibGVUcmlja2xlKCkpJiZ0LndyaXRlQm9vbCgyLG8pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LnByb3RvdHlwZS5nZXRTZHA9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LnByb3RvdHlwZS5zZXRTZHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlcXVlc3QucHJvdG90eXBlLmdldERpc2FibGVUcmlja2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXF1ZXN0LnByb3RvdHlwZS5zZXREaXNhYmxlVHJpY2tsZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3NkcDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTZHAobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0U2RwKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlLnByb3RvdHlwZS5nZXRTZHA9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUuc2V0U2RwPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2NhbmRpZGF0ZToobz10LmdldENhbmRpZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldENhbmRpZGF0ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZVVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRDYW5kaWRhdGUoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLmdldENhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLnNldENhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLmNsZWFyQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q2FuZGlkYXRlKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLmhhc0NhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMiwzXV0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UuU3RhZ2VDYXNlPXtTVEFHRV9OT1RfU0VUOjAsSU5JVDoyLFVQREFURTozfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3RhZ2VDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXt1dWlkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxpbml0OihvPXQuZ2V0SW5pdCgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2UudG9PYmplY3QoZSxvKSx1cGRhdGU6KG89dC5nZXRVcGRhdGUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlVXBkYXRlU3RhZ2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFV1aWQobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlSW5pdFN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SW5pdChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VXBkYXRlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRVdWlkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRJbml0KCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VJbml0U3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VXBkYXRlKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5nZXRVdWlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLnNldFV1aWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5nZXRJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZUluaXRTdGFnZSwyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLnNldEluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SW5pdCh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuaGFzSW5pdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLmdldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2VVcGRhdGVTdGFnZSwzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsUmVzcG9uc2UucHJvdG90eXBlLnNldFVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwZGF0ZSh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxSZXNwb25zZS5wcm90b3R5cGUuaGFzVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzIsMyw0XV0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5VcGRhdGVDYXNlPXtVUERBVEVfTk9UX1NFVDowLENBTkRJREFURToyLERPTkU6MyxFUlJPUjo0fSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRVcGRhdGVDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3V1aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGNhbmRpZGF0ZToobz10LmdldENhbmRpZGF0ZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUudG9PYmplY3QoZSxvKSxkb25lOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMsITEpLGVycm9yOihvPXQuZ2V0RXJyb3IoKSkmJmEuU3RhdHVzLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdDtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFV1aWQobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2FuZGlkYXRlKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEJvb2woKTtlLnNldERvbmUobyk7YnJlYWs7Y2FzZSA0Om89bmV3IGEuU3RhdHVzO3QucmVhZE1lc3NhZ2UobyxhLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RXJyb3Iobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFV1aWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldENhbmRpZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVCb29sKDMsbyksbnVsbCE9KG89ZS5nZXRFcnJvcigpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLGEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0VXVpZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLnNldFV1aWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmdldENhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLnNldENhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDYW5kaWRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXREb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXREb25lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyRG9uZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzRG9uZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLGEuU3RhdHVzLDQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsNCxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQ2FsbFVwZGF0ZVJlc3BvbnNlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXt0LmdldEZpZWxkTnVtYmVyKCk7dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5DYWxsVXBkYXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkNhbGxVcGRhdGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe30scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3VybHNMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMSkpP3ZvaWQgMDpvLHVzZXJuYW1lOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxjcmVkZW50aWFsOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMyxcIlwiKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLmFkZFVybHMobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRVc2VybmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKTtlLnNldENyZWRlbnRpYWwobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFVybHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRTdHJpbmcoMSxvKSwobz1lLmdldFVzZXJuYW1lKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyksKG89ZS5nZXRDcmVkZW50aWFsKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDMsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5nZXRVcmxzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuc2V0VXJsc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZXx8W10pfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuYWRkVXJscz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMSxlLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuY2xlYXJVcmxzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVybHNMaXN0KFtdKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLmdldFVzZXJuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIucHJvdG90eXBlLnNldFVzZXJuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5wcm90b3R5cGUuZ2V0Q3JlZGVudGlhbD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyLnByb3RvdHlwZS5zZXRDcmVkZW50aWFsPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywzLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2FkZGl0aW9uYWxJY2VTZXJ2ZXJzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0QWRkaXRpb25hbEljZVNlcnZlcnNMaXN0KCkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIudG9PYmplY3QsZSksZGlzYWJsZVRyaWNrbGU6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMiwhMSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFU2VydmVyO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkQWRkaXRpb25hbEljZVNlcnZlcnMobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpO2Uuc2V0RGlzYWJsZVRyaWNrbGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldEFkZGl0aW9uYWxJY2VTZXJ2ZXJzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RGlzYWJsZVRyaWNrbGUoKSkmJnQud3JpdGVCb29sKDIsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnByb3RvdHlwZS5nZXRBZGRpdGlvbmFsSWNlU2VydmVyc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VTZXJ2ZXIsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnByb3RvdHlwZS5zZXRBZGRpdGlvbmFsSWNlU2VydmVyc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLnByb3RvdHlwZS5hZGRBZGRpdGlvbmFsSWNlU2VydmVycz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRVNlcnZlcix0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLmNsZWFyQWRkaXRpb25hbEljZVNlcnZlcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0QWRkaXRpb25hbEljZVNlcnZlcnNMaXN0KFtdKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcucHJvdG90eXBlLmdldERpc2FibGVUcmlja2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5wcm90b3R5cGUuc2V0RGlzYWJsZVRyaWNrbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywyLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3NkcDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksb3B0aW9uYWxDb25maWc6KG89dC5nZXRPcHRpb25hbENvbmZpZygpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTZHAobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9uYWxDb25maWcobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFNkcCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0T3B0aW9uYWxDb25maWcoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5wcm90b3R5cGUuZ2V0U2RwPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5zZXRTZHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5wcm90b3R5cGUuZ2V0T3B0aW9uYWxDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UucHJvdG90eXBlLnNldE9wdGlvbmFsQ29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5jbGVhck9wdGlvbmFsQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9uYWxDb25maWcodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0SW5pdFN0YWdlLnByb3RvdHlwZS5oYXNPcHRpb25hbENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtjYW5kaWRhdGU6KG89dC5nZXRDYW5kaWRhdGUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2FuZGlkYXRlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldENhbmRpZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UucHJvdG90eXBlLmdldENhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnByb3RvdHlwZS5zZXRDYW5kaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5wcm90b3R5cGUuY2xlYXJDYW5kaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDYW5kaWRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UucHJvdG90eXBlLmhhc0NhbmRpZGF0ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17fTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3QuZ2V0RmllbGROdW1iZXIoKTt0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3REb25lU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7fSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3N0YXR1czoobz10LmdldFN0YXR1cygpKSYmYS5TdGF0dXMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBhLlN0YXR1czt0LnJlYWRNZXNzYWdlKG8sYS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFN0YXR1cyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRTdGF0dXMoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxhLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsYS5TdGF0dXMsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UucHJvdG90eXBlLmNsZWFyU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3RhdHVzKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UucHJvdG90eXBlLmhhc1N0YXR1cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzIsMyw0LDVdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuU3RhZ2VDYXNlPXtTVEFHRV9OT1RfU0VUOjAsSU5JVDoyLFVQREFURTozLERPTkU6NCxFUlJPUjo1fSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmdldFN0YWdlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3V1aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGluaXQ6KG89dC5nZXRJbml0KCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UudG9PYmplY3QoZSxvKSx1cGRhdGU6KG89dC5nZXRVcGRhdGUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLnRvT2JqZWN0KGUsbyksZG9uZToobz10LmdldERvbmUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZS50b09iamVjdChlLG8pLGVycm9yOihvPXQuZ2V0RXJyb3IoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEVycm9yU3RhZ2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdDtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRVdWlkKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SW5pdChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdFVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGRhdGUobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdERvbmVTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXREb25lKG8pO2JyZWFrO2Nhc2UgNTpvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFcnJvcihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0VXVpZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0SW5pdCgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdEluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRVcGRhdGUoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RVcGRhdGVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXREb25lKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEVycm9yKCkpJiZ0LndyaXRlTWVzc2FnZSg1LG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuZ2V0VXVpZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0VXVpZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3RJbml0U3RhZ2UsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0SW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmNsZWFySW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluaXQodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5oYXNJbml0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmdldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0VXBkYXRlU3RhZ2UsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0VXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVcGRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5oYXNVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuZ2V0RG9uZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RG9uZVN0YWdlLDQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLnNldERvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDQscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckRvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREb25lKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVxdWVzdC5wcm90b3R5cGUuaGFzRG9uZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0RXJyb3JTdGFnZSw1KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsNSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmNsZWFyRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFcnJvcih2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlcXVlc3QucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtzZHA6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTZHAobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUluaXRTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0U2RwKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UucHJvdG90eXBlLmdldFNkcD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UucHJvdG90eXBlLnNldFNkcD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtjYW5kaWRhdGU6KG89dC5nZXRDYW5kaWRhdGUoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuSUNFQ2FuZGlkYXRlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5JQ0VDYW5kaWRhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldENhbmRpZGF0ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRDYW5kaWRhdGUoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuZ2V0Q2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLklDRUNhbmRpZGF0ZSwxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLnByb3RvdHlwZS5zZXRDYW5kaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UucHJvdG90eXBlLmNsZWFyQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q2FuZGlkYXRlKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5wcm90b3R5cGUuaGFzQ2FuZGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3QuZ2V0RmllbGROdW1iZXIoKTt0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7fSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS50b09iamVjdChlLHRoaXMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3N0YXR1czoobz10LmdldFN0YXR1cygpKSYmYS5TdGF0dXMudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2U7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgYS5TdGF0dXM7dC5yZWFkTWVzc2FnZShvLGEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTdGF0dXMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0U3RhdHVzKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8sYS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5wcm90b3R5cGUuZ2V0U3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxhLlN0YXR1cywxKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZUVycm9yU3RhZ2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnByb3RvdHlwZS5jbGVhclN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFN0YXR1cyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5wcm90b3R5cGUuaGFzU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLm9uZW9mR3JvdXBzXz1bWzIsMyw0LDVdXSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLlN0YWdlQ2FzZT17U1RBR0VfTk9UX1NFVDowLElOSVQ6MixVUERBVEU6MyxET05FOjQsRVJST1I6NX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3RhZ2VDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3V1aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGluaXQ6KG89dC5nZXRJbml0KCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnRvT2JqZWN0KGUsbyksdXBkYXRlOihvPXQuZ2V0VXBkYXRlKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UudG9PYmplY3QoZSxvKSxkb25lOihvPXQuZ2V0RG9uZSgpKSYmcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS50b09iamVjdChlLG8pLGVycm9yOihvPXQuZ2V0RXJyb3IoKSkmJnByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZTtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFV1aWQobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEluaXQobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZVVwZGF0ZVN0YWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGRhdGUobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VEb25lU3RhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERvbmUobyk7YnJlYWs7Y2FzZSA1Om89bmV3IHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RXJyb3Iobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFV1aWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldEluaXQoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlSW5pdFN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFVwZGF0ZSgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VVcGRhdGVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXREb25lKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZURvbmVTdGFnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRFcnJvcigpKSYmdC53cml0ZU1lc3NhZ2UoNSxvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VFcnJvclN0YWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0VXVpZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLnNldFV1aWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmdldEluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2VJbml0U3RhZ2UsMil9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLnNldEluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmNsZWFySW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluaXQodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuaGFzSW5pdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlVXBkYXRlU3RhZ2UsMyl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLnNldFVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVcGRhdGUodm9pZCAwKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuaGFzVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5nZXREb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRG9uZVN0YWdlLDQpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5zZXREb25lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw0LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckRvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREb25lKHZvaWQgMCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmhhc0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlRXJyb3JTdGFnZSw1KX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0RXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDUscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5BbnN3ZXJSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuQW5zd2VyUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFcnJvcih2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLkFuc3dlclJlc3BvbnNlLnByb3RvdHlwZS5oYXNFcnJvcj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17fTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVxdWVzdDtyZXR1cm4gcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7dC5nZXRGaWVsZE51bWJlcigpO3Quc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17Y29uZmlnOihvPXQuZ2V0Q29uZmlnKCkpJiZwcm90by5wcm90by5ycGMud2VicnRjLnYxLldlYlJUQ0NvbmZpZy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlO3JldHVybiBwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWc7dC5yZWFkTWVzc2FnZShvLHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuV2ViUlRDQ29uZmlnLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDb25maWcobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0Q29uZmlnKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5XZWJSVENDb25maWcsMSl9LHByb3RvLnByb3RvLnJwYy53ZWJydGMudjEuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MS5PcHRpb25hbFdlYlJUQ0NvbmZpZ1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENvbmZpZyh2b2lkIDApfSxwcm90by5wcm90by5ycGMud2VicnRjLnYxLk9wdGlvbmFsV2ViUlRDQ29uZmlnUmVzcG9uc2UucHJvdG90eXBlLmhhc0NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8ucHJvdG8ucnBjLndlYnJ0Yy52MSl9LGZ1bmN0aW9uKGUsdCxvKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRpYWxXZWJSVEM9dC5kaWFsRGlyZWN0PXZvaWQgMDt2YXIgcj1vKDkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiZGlhbERpcmVjdFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRpYWxEaXJlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkaWFsV2ViUlRDXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGlhbFdlYlJUQ319KX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO3ZhciByPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG89MSxyPWFyZ3VtZW50cy5sZW5ndGg7bzxyO28rKylmb3IodmFyIG4gaW4gdD1hcmd1bWVudHNbb10pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gbmV3KG98fChvPVByb21pc2UpKSgoZnVuY3Rpb24obixpKXtmdW5jdGlvbiBzKGUpe3RyeXtwKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cChyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBwKGUpe3ZhciB0O2UuZG9uZT9uKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG8/dDpuZXcgbygoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXAoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0saT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlLHQpe3ZhciBvLHIsbixpLHM9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmblswXSl0aHJvdyBuWzFdO3JldHVybiBuWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6YSgwKSx0aHJvdzphKDEpLHJldHVybjphKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gYShpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtzOyl0cnl7aWYobz0xLHImJihuPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobj1yLnJldHVybikmJm4uY2FsbChyKSwwKTpyLm5leHQpJiYhKG49bi5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG47c3dpdGNoKHI9MCxuJiYoaT1bMiZpWzBdLG4udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm49aTticmVhaztjYXNlIDQ6cmV0dXJuIHMubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6cy5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1zLm9wcy5wb3AoKSxzLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG49cy50cnlzLChuPW4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0pfHw2IT09aVswXSYmMiE9PWlbMF0pKXtzPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighbnx8aVsxXT5uWzBdJiZpWzFdPG5bM10pKXtzLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJnMubGFiZWw8blsxXSl7cy5sYWJlbD1uWzFdLG49aTticmVha31pZihuJiZzLmxhYmVsPG5bMl0pe3MubGFiZWw9blsyXSxzLm9wcy5wdXNoKGkpO2JyZWFrfW5bMl0mJnMub3BzLnBvcCgpLHMudHJ5cy5wb3AoKTtjb250aW51ZX1pPXQuY2FsbChlLHMpfWNhdGNoKGUpe2k9WzYsZV0scj0wfWZpbmFsbHl7bz1uPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLGFdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRpYWxXZWJSVEM9dC5kaWFsRGlyZWN0PXZvaWQgMDt2YXIgcz1vKDEpLGE9bygxMCkscD1vKDIwKSxnPW8oMiksbD1vKDUpLHU9bygyMyksYz1vKDcpLGQ9bygyNCksZj1vKDI1KTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBvO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKHIpe3JldHVybiBvPWZ1bmN0aW9uKGUpe3JldHVybiBzLmdycGMuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydCh7d2l0aENyZWRlbnRpYWxzOiExfSkoZSl9LChudWxsPT10P3ZvaWQgMDp0LmNyZWRlbnRpYWxzKT9bMixiKGUsbyx0KV06WzIsb119KSl9KSl9ZnVuY3Rpb24gYihlLHQsbyl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciByLGEscD10aGlzO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHI9XCJcIixbNCxmdW5jdGlvbigpe3JldHVybiBuKHAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbixhLHAsZyxjLGQsZixoLGIseSxtO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuXCJcIiE9cj9bMywzXTooKG49bmV3IGwuQXV0aGVudGljYXRlUmVxdWVzdCkuc2V0RW50aXR5KChudWxsPT1vP3ZvaWQgMDpvLmF1dGhFbnRpdHkpP28uYXV0aEVudGl0eTplLnJlcGxhY2UoL14oLio6XFwvXFwvKS8sXCJcIikpLChhPW5ldyBsLkNyZWRlbnRpYWxzKS5zZXRUeXBlKG51bGw9PT0oeT1udWxsPT1vP3ZvaWQgMDpvLmNyZWRlbnRpYWxzKXx8dm9pZCAwPT09eT92b2lkIDA6eS50eXBlKSxhLnNldFBheWxvYWQobnVsbD09PShtPW51bGw9PW8/dm9pZCAwOm8uY3JlZGVudGlhbHMpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnBheWxvYWQpLG4uc2V0Q3JlZGVudGlhbHMoYSksYz1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtwPWUsZz10fSkpLGQ9XCJcIixzLmdycGMuaW52b2tlKHUuQXV0aFNlcnZpY2UuQXV0aGVudGljYXRlLHtyZXF1ZXN0Om4saG9zdDoobnVsbD09bz92b2lkIDA6by5leHRlcm5hbEF1dGhBZGRyZXNzKT9vLmV4dGVybmFsQXV0aEFkZHJlc3M6ZSx0cmFuc3BvcnQ6dCxvbk1lc3NhZ2U6ZnVuY3Rpb24oZSl7ZD1lLmdldEFjY2Vzc1Rva2VuKCl9LG9uRW5kOmZ1bmN0aW9uKGUsdCxvKXtlPT1zLmdycGMuQ29kZS5PSz9wKGIpOmcodCl9fSksWzQsY10pO2Nhc2UgMTpyZXR1cm4gaS5zZW50KCkscj1kLChudWxsPT1vP3ZvaWQgMDpvLmV4dGVybmFsQXV0aEFkZHJlc3MpJiYobnVsbD09bz92b2lkIDA6by5leHRlcm5hbEF1dGhUb0VudGl0eSk/KChmPW5ldyBzLmdycGMuTWV0YWRhdGEpLnNldChcImF1dGhvcml6YXRpb25cIixcIkJlYXJlciBcIityKSxjPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3A9ZSxnPXR9KSksZD1cIlwiLChoPW5ldyBsLkF1dGhlbnRpY2F0ZVRvUmVxdWVzdCkuc2V0RW50aXR5KG8uZXh0ZXJuYWxBdXRoVG9FbnRpdHkpLHMuZ3JwYy5pbnZva2UodS5FeHRlcm5hbEF1dGhTZXJ2aWNlLkF1dGhlbnRpY2F0ZVRvLHtyZXF1ZXN0OmgsaG9zdDpvLmV4dGVybmFsQXV0aEFkZHJlc3MsdHJhbnNwb3J0OnQsbWV0YWRhdGE6Zixvbk1lc3NhZ2U6ZnVuY3Rpb24oZSl7ZD1lLmdldEFjY2Vzc1Rva2VuKCl9LG9uRW5kOmZ1bmN0aW9uKGUsdCxvKXtlPT1zLmdycGMuQ29kZS5PSz9wKGYpOmcodCl9fSksWzQsY10pOlszLDNdO2Nhc2UgMjppLnNlbnQoKSxyPWQsaS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4oYj1uZXcgcy5ncnBjLk1ldGFkYXRhKS5zZXQoXCJhdXRob3JpemF0aW9uXCIsXCJCZWFyZXIgXCIrciksWzIsYl19fSkpfSkpfSgpXTtjYXNlIDE6cmV0dXJuIGE9Zy5zZW50KCksWzIsZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUsdCxhKX1dfX0pKX0pKX10LmRpYWxEaXJlY3Q9aDt2YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG8pe3RoaXMub3B0cz1lLHRoaXMuZXh0cmFNZXRhZGF0YT1vLHRoaXMudHJhbnNwb3J0PXQoZSl9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5leHRyYU1ldGFkYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7ZS5zZXQodCxvKX0pKSx0aGlzLnRyYW5zcG9ydC5zdGFydChlKSxbMl19KSl9KSl9LGUucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMudHJhbnNwb3J0LnNlbmRNZXNzYWdlKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7dGhpcy50cmFuc3BvcnQuZmluaXNoU2VuZCgpfSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zcG9ydC5jYW5jZWwoKX0sZX0oKTt0LmRpYWxXZWJSVEM9ZnVuY3Rpb24oZSx0LG8pe3ZhciBsLHUsYix5LG0sUztyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIEUsdix3LF8sUixNLFQsTyxBLEYsQyxELEIsSSxQLGosVSxOLEwsVyx4LEgseixrPXRoaXM7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRT1udWxsPT1vP3ZvaWQgMDpvLndlYnJ0Y09wdGlvbnMsWzQsZi5uZXdQZWVyQ29ubmVjdGlvbkZvckNsaWVudCh2b2lkIDAhPT1FJiZFLmRpc2FibGVUcmlja2xlSUNFLG51bGw9PUU/dm9pZCAwOkUucnRjQ29uZmlnKV07Y2FzZSAxOnJldHVybiB2PUcuc2VudCgpLHc9di5wYyxfPXYuZGMsUj1vLG8mJigoUj1yKHt9LG8pKS5hdXRoRW50aXR5PW51bGw9PT0obD1udWxsPT1vP3ZvaWQgMDpvLndlYnJ0Y09wdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNpZ25hbGluZ0F1dGhFbnRpdHksUi5hdXRoRW50aXR5fHwoUi5leHRlcm5hbEF1dGhBZGRyZXNzP1IuYXV0aEVudGl0eT1udWxsPT09KHU9by5leHRlcm5hbEF1dGhBZGRyZXNzKXx8dm9pZCAwPT09dT92b2lkIDA6dS5yZXBsYWNlKC9eKC4qOlxcL1xcLykvLFwiXCIpOlIuYXV0aEVudGl0eT1lLnJlcGxhY2UoL14oLio6XFwvXFwvKS8sXCJcIikpLFIuY3JlZGVudGlhbHM9bnVsbD09PShiPW51bGw9PW8/dm9pZCAwOm8ud2VicnRjT3B0aW9ucyl8fHZvaWQgMD09PWI/dm9pZCAwOmIuc2lnbmFsaW5nQ3JlZGVudGlhbHMsUi5leHRlcm5hbEF1dGhBZGRyZXNzPW51bGw9PT0oeT1udWxsPT1vP3ZvaWQgMDpvLndlYnJ0Y09wdGlvbnMpfHx2b2lkIDA9PT15P3ZvaWQgMDp5LnNpZ25hbGluZ0V4dGVybmFsQXV0aEFkZHJlc3MsUi5leHRlcm5hbEF1dGhUb0VudGl0eT1udWxsPT09KG09bnVsbD09bz92b2lkIDA6by53ZWJydGNPcHRpb25zKXx8dm9pZCAwPT09bT92b2lkIDA6bS5zaWduYWxpbmdFeHRlcm5hbEF1dGhUb0VudGl0eSksWzQsaChlLFIpXTtjYXNlIDI6cmV0dXJuIE09Ry5zZW50KCksVD1zLmdycGMuY2xpZW50KGQuU2lnbmFsaW5nU2VydmljZS5DYWxsLHtob3N0OmUsdHJhbnNwb3J0Ok19KSwobnVsbD09bz92b2lkIDA6by5leHRlcm5hbEF1dGhBZGRyZXNzKXx8bnVsbD09PShTPW51bGw9PW8/dm9pZCAwOm8uY3JlZGVudGlhbHMpfHx2b2lkIDA9PT1TfHxTLnR5cGUsTz1cIlwiLEE9ITEsRj1mdW5jdGlvbihvKXtpZighQSl7QT0hMDt2YXIgcj1uZXcgYy5DYWxsVXBkYXRlUmVxdWVzdDtyLnNldFV1aWQoTyk7dmFyIG49bmV3IGcuU3RhdHVzO24uc2V0Q29kZShwLkNvZGUuVU5LTk9XTiksbi5zZXRNZXNzYWdlKG8pLHIuc2V0RXJyb3Iobikscy5ncnBjLnVuYXJ5KGQuU2lnbmFsaW5nU2VydmljZS5DYWxsVXBkYXRlLHtyZXF1ZXN0OnIsbWV0YWRhdGE6e1wicnBjLWhvc3RcIjp0fSxob3N0OmUsdHJhbnNwb3J0Ok0sb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0dXMsbz1lLnN0YXR1c01lc3NhZ2Uscj1lLm1lc3NhZ2U7dD09PXMuZ3JwYy5Db2RlLk9LJiZyfHxjb25zb2xlLmVycm9yKG8pfX0pfX0sQz1mdW5jdGlvbigpe2lmKCFBKXtBPSEwO3ZhciBvPW5ldyBjLkNhbGxVcGRhdGVSZXF1ZXN0O28uc2V0VXVpZChPKSxvLnNldERvbmUoITApLHMuZ3JwYy51bmFyeShkLlNpZ25hbGluZ1NlcnZpY2UuQ2FsbFVwZGF0ZSx7cmVxdWVzdDpvLG1ldGFkYXRhOntcInJwYy1ob3N0XCI6dH0saG9zdDplLHRyYW5zcG9ydDpNLG9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhdHVzLG89ZS5zdGF0dXNNZXNzYWdlLHI9ZS5tZXNzYWdlO3Q9PT1zLmdycGMuQ29kZS5PSyYmcnx8Y29uc29sZS5lcnJvcihvKX19KX19LEI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7RD1lLHR9KSksST0hMSwobnVsbD09RT92b2lkIDA6RS5kaXNhYmxlVHJpY2tsZUlDRSk/WzMsNV06WzQsdy5jcmVhdGVPZmZlcigpXTtjYXNlIDM6cmV0dXJuIFA9Ry5zZW50KCksaj0hMSx3Lm9uaWNlY2FuZGlkYXRlPWZ1bmN0aW9uKG8pe3JldHVybiBuKGssdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgcixuO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsQl07Y2FzZSAxOnJldHVybiBpLnNlbnQoKSxJP1syXTpudWxsPT09by5jYW5kaWRhdGU/KGo9ITAsQygpLFsyXSk6KHI9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGMuSUNFQ2FuZGlkYXRlO3Quc2V0Q2FuZGlkYXRlKGUuY2FuZGlkYXRlKSxlLnNkcE1pZCYmdC5zZXRTZHBNaWQoZS5zZHBNaWQpO2Uuc2RwTUxpbmVJbmRleCYmdC5zZXRTZHBtTGluZUluZGV4KGUuc2RwTUxpbmVJbmRleCk7ZS51c2VybmFtZUZyYWdtZW50JiZ0LnNldFVzZXJuYW1lRnJhZ21lbnQoZS51c2VybmFtZUZyYWdtZW50KTtyZXR1cm4gdH0oby5jYW5kaWRhdGUpLChuPW5ldyBjLkNhbGxVcGRhdGVSZXF1ZXN0KS5zZXRVdWlkKE8pLG4uc2V0Q2FuZGlkYXRlKHIpLHMuZ3JwYy51bmFyeShkLlNpZ25hbGluZ1NlcnZpY2UuQ2FsbFVwZGF0ZSx7cmVxdWVzdDpuLG1ldGFkYXRhOntcInJwYy1ob3N0XCI6dH0saG9zdDplLHRyYW5zcG9ydDpNLG9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhdHVzLG89ZS5zdGF0dXNNZXNzYWdlLHI9ZS5tZXNzYWdlO3Q9PT1zLmdycGMuQ29kZS5PSyYmcnx8SXx8anx8Y29uc29sZS5lcnJvcihcImVycm9yIHNlbmRpbmcgY2FuZGlkYXRlXCIsbyl9fSksWzJdKX19KSl9KSl9LFs0LHcuc2V0TG9jYWxEZXNjcmlwdGlvbihQKV07Y2FzZSA0Okcuc2VudCgpLEcubGFiZWw9NTtjYXNlIDU6cmV0dXJuIFU9ITEsVC5vbk1lc3NhZ2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuKGssdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxvLHIsbixzO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGUuaGFzSW5pdCgpP1U/KEYoXCJnb3QgaW5pdCBzdGFnZSBtb3JlIHRoYW4gb25jZVwiKSxbMl0pOih0PWUuZ2V0SW5pdCgpLFU9ITAsTz1lLmdldFV1aWQoKSxvPW5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oSlNPTi5wYXJzZShhdG9iKHQuZ2V0U2RwKCkpKSksdy5zZXRSZW1vdGVEZXNjcmlwdGlvbihvKSxEKCEwKSwobnVsbD09RT92b2lkIDA6RS5kaXNhYmxlVHJpY2tsZUlDRSk/KEk9ITAsQygpLFsyXSk6WzMsN10pOlszLDFdO2Nhc2UgMTppZighZS5oYXNVcGRhdGUoKSlyZXR1cm5bMyw2XTtpZighVSlyZXR1cm4gRihcImdvdCB1cGRhdGUgc3RhZ2UgYmVmb3JlIGluaXQgc3RhZ2VcIiksWzJdO2lmKGUuZ2V0VXVpZCgpIT09TylyZXR1cm4gRihcInV1aWQgbWlzbWF0Y2g7IGhhdmU9XCIrZS5nZXRVdWlkKCkrXCIgd2FudD1cIitPKSxbMl07cj1lLmdldFVwZGF0ZSgpLG49ZnVuY3Rpb24oZSl7dmFyIHQ9e2NhbmRpZGF0ZTplLmdldENhbmRpZGF0ZSgpfTtlLmhhc1NkcE1pZCgpJiYodC5zZHBNaWQ9ZS5nZXRTZHBNaWQoKSk7ZS5oYXNTZHBtTGluZUluZGV4KCkmJih0LnNkcE1MaW5lSW5kZXg9ZS5nZXRTZHBtTGluZUluZGV4KCkpO2UuaGFzVXNlcm5hbWVGcmFnbWVudCgpJiYodC51c2VybmFtZUZyYWdtZW50PWUuZ2V0VXNlcm5hbWVGcmFnbWVudCgpKTtyZXR1cm4gdH0oci5nZXRDYW5kaWRhdGUoKSksaS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gaS50cnlzLnB1c2goWzIsNCwsNV0pLFs0LHcuYWRkSWNlQ2FuZGlkYXRlKG4pXTtjYXNlIDM6cmV0dXJuIGkuc2VudCgpLFszLDVdO2Nhc2UgNDpyZXR1cm4gcz1pLnNlbnQoKSxGKHMpLFsyXTtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA2OnJldHVybiBGKFwidW5rbm93biBDYWxsUmVzcG9uc2Ugc3RhZ2VcIiksWzJdO2Nhc2UgNzpyZXR1cm5bMl19fSkpfSkpfSkpLFc9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7Tj1lLEw9dH0pKSxULm9uRW5kKChmdW5jdGlvbihlLHQsbyl7ZSE9PXMuZ3JwYy5Db2RlLk9LPyhjb25zb2xlLmVycm9yKHQpLEwodCkpOk4oKX0pKSxULnN0YXJ0KHtcInJwYy1ob3N0XCI6dH0pLHg9bmV3IGMuQ2FsbFJlcXVlc3QsSD1idG9hKEpTT04uc3RyaW5naWZ5KHcubG9jYWxEZXNjcmlwdGlvbikpLHguc2V0U2RwKEgpLEUmJkUuZGlzYWJsZVRyaWNrbGVJQ0UmJnguc2V0RGlzYWJsZVRyaWNrbGUoRS5kaXNhYmxlVHJpY2tsZUlDRSksVC5zZW5kKHgpLCh6PW5ldyBhLkNsaWVudENoYW5uZWwodyxfKSkucmVhZHkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTigpfSkpLFs0LFddO2Nhc2UgNjpyZXR1cm4gRy5zZW50KCksWzQsei5yZWFkeV07Y2FzZSA3OnJldHVybiBHLnNlbnQoKSxJPSEwLEMoKSxbMix7dHJhbnNwb3J0RmFjdG9yeTp6LnRyYW5zcG9ydEZhY3RvcnkoKSxwZWVyQ29ubmVjdGlvbjp3fV19fSkpfSkpfX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO3ZhciByLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIitTdHJpbmcodCkrXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihvLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbyl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNsaWVudENoYW5uZWw9dm9pZCAwO3ZhciBpPW8oMykscz1vKDE3KSxhPW8oMTgpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG8pe3ZhciByPWUuY2FsbCh0aGlzLHQsbyl8fHRoaXM7cmV0dXJuIHIuc3RyZWFtSURDb3VudGVyPTAsci5zdHJlYW1zPXt9LG8ub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLm9uQ2hhbm5lbE1lc3NhZ2UoZSl9LHJ9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS50cmFuc3BvcnRGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUubmV3U3RyZWFtKGUubmV4dFN0cmVhbUlEKCksdCl9fSx0LnByb3RvdHlwZS5vbkNoYW5uZWxNZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PWkuUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkoZS5kYXRhKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwiZXJyb3IgZGVzZXJpYWxpemluZyBtZXNzYWdlXCIsZSl9dmFyIG89dC5nZXRTdHJlYW0oKTtpZih2b2lkIDAhPT1vKXt2YXIgcj1vLmdldElkKCksbj10aGlzLnN0cmVhbXNbcl07dm9pZCAwIT09bj9uLmNzLm9uUmVzcG9uc2UodCk6Y29uc29sZS5lcnJvcihcIm5vIHN0cmVhbSBmb3IgaWQ7IGRpc2NhcmRpbmdcIixcImlkXCIscil9ZWxzZSBjb25zb2xlLmVycm9yKFwibm8gc3RyZWFtIGlkOyBkaXNjYXJkaW5nXCIpfSx0LnByb3RvdHlwZS5uZXh0U3RyZWFtSUQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgaS5TdHJlYW07cmV0dXJuIGUuc2V0SWQodGhpcy5zdHJlYW1JRENvdW50ZXIrKyksZX0sdC5wcm90b3R5cGUubmV3U3RyZWFtPWZ1bmN0aW9uKGUsdCl7dmFyIG89dGhpcyxyPXRoaXMuc3RyZWFtc1tlLmdldElkKCldO2lmKHZvaWQgMD09PXIpe2lmKE9iamVjdC5rZXlzKHRoaXMuc3RyZWFtcykubGVuZ3RoPjI1Nil0aHJvdyBuZXcgRXJyb3IoXCJzdHJlYW0gbGltaXQgaGl0XCIpO3I9e2NzOm5ldyBhLkNsaWVudFN0cmVhbSh0aGlzLGUsKGZ1bmN0aW9uKGUpe3JldHVybiBvLnJlbW92ZVN0cmVhbUJ5SUQoZSl9KSx0KX0sdGhpcy5zdHJlYW1zW2UuZ2V0SWQoKV09cn1yZXR1cm4gci5jc30sdC5wcm90b3R5cGUucmVtb3ZlU3RyZWFtQnlJRD1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5zdHJlYW1zW2VdfSx0LnByb3RvdHlwZS53cml0ZUhlYWRlcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uZXcgaS5SZXF1ZXN0O28uc2V0U3RyZWFtKGUpLG8uc2V0SGVhZGVycyh0KSx0aGlzLndyaXRlKG8pfSx0LnByb3RvdHlwZS53cml0ZU1lc3NhZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uZXcgaS5SZXF1ZXN0O28uc2V0U3RyZWFtKGUpLG8uc2V0TWVzc2FnZSh0KSx0aGlzLndyaXRlKG8pfSx0fShzLkJhc2VDaGFubmVsKTt0LkNsaWVudENoYW5uZWw9cH0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtcbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG52YXIgcj1vKDEyKSxuPW8oMTMpLGk9bygxNCk7ZnVuY3Rpb24gcygpe3JldHVybiBwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGEoZSx0KXtpZihzKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoXCIpO3JldHVybiBwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1wLnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBwKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHAoZSx0LG8pe2lmKCEocC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKGUsdCxvKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7cmV0dXJuIHUodGhpcyxlKX1yZXR1cm4gZyh0aGlzLGUsdCxvKX1mdW5jdGlvbiBnKGUsdCxvLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxvLHIpe2lmKHQuYnl0ZUxlbmd0aCxvPDB8fHQuYnl0ZUxlbmd0aDxvKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZih0LmJ5dGVMZW5ndGg8bysocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3Q9dm9pZCAwPT09byYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsbyk6bmV3IFVpbnQ4QXJyYXkodCxvLHIpO3AuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189cC5wcm90b3R5cGU6ZT1jKGUsdCk7cmV0dXJuIGV9KGUsdCxvLHIpOlwic3RyaW5nXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxvKXtcInN0cmluZ1wiPT10eXBlb2YgbyYmXCJcIiE9PW98fChvPVwidXRmOFwiKTtpZighcC5pc0VuY29kaW5nKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxmKHQsbyksbj0oZT1hKGUscikpLndyaXRlKHQsbyk7biE9PXImJihlPWUuc2xpY2UoMCxuKSk7cmV0dXJuIGV9KGUsdCxvKTpmdW5jdGlvbihlLHQpe2lmKHAuaXNCdWZmZXIodCkpe3ZhciBvPTB8ZCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1hKGUsbykpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG8pLGV9aWYodCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxcImxlbmd0aFwiaW4gdClyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj9hKGUsMCk6YyhlLHQpO2lmKFwiQnVmZmVyXCI9PT10LnR5cGUmJmkodC5kYXRhKSlyZXR1cm4gYyhlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC5cIil9KGUsdCl9ZnVuY3Rpb24gbChlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHUoZSx0KXtpZihsKHQpLGU9YShlLHQ8MD8wOjB8ZCh0KSksIXAuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG89MDtvPHQ7KytvKWVbb109MDtyZXR1cm4gZX1mdW5jdGlvbiBjKGUsdCl7dmFyIG89dC5sZW5ndGg8MD8wOjB8ZCh0Lmxlbmd0aCk7ZT1hKGUsbyk7Zm9yKHZhciByPTA7cjxvO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBkKGUpe2lmKGU+PXMoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitzKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGV9ZnVuY3Rpb24gZihlLHQpe2lmKHAuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVwiXCIrZSk7dmFyIG89ZS5sZW5ndGg7aWYoMD09PW8pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG87Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZSB2b2lkIDA6cmV0dXJuIHgoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm87Y2FzZVwiaGV4XCI6cmV0dXJuIG8+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBIKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIHgoZSkubGVuZ3RoO3Q9KFwiXCIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBoKGUsdCxvKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm5cIlwiO2lmKCh2b2lkIDA9PT1vfHxvPnRoaXMubGVuZ3RoKSYmKG89dGhpcy5sZW5ndGgpLG88PTApcmV0dXJuXCJcIjtpZigobz4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuXCJcIjtmb3IoZXx8KGU9XCJ1dGY4XCIpOzspc3dpdGNoKGUpe2Nhc2VcImhleFwiOnJldHVybiBGKHRoaXMsdCxvKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gVCh0aGlzLHQsbyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gTyh0aGlzLHQsbyk7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEEodGhpcyx0LG8pO2Nhc2VcImJhc2U2NFwiOnJldHVybiBNKHRoaXMsdCxvKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gQyh0aGlzLHQsbyk7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtlPShlK1wiXCIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gYihlLHQsbyl7dmFyIHI9ZVt0XTtlW3RdPWVbb10sZVtvXT1yfWZ1bmN0aW9uIHkoZSx0LG8scixuKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8/KHI9byxvPTApOm8+MjE0NzQ4MzY0Nz9vPTIxNDc0ODM2NDc6bzwtMjE0NzQ4MzY0OCYmKG89LTIxNDc0ODM2NDgpLG89K28saXNOYU4obykmJihvPW4/MDplLmxlbmd0aC0xKSxvPDAmJihvPWUubGVuZ3RoK28pLG8+PWUubGVuZ3RoKXtpZihuKXJldHVybi0xO289ZS5sZW5ndGgtMX1lbHNlIGlmKG88MCl7aWYoIW4pcmV0dXJuLTE7bz0wfWlmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1wLmZyb20odCxyKSkscC5pc0J1ZmZlcih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOm0oZSx0LG8scixuKTtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LHAuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9uP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbyk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbyk6bShlLFt0XSxvLHIsbik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBtKGUsdCxvLHIsbil7dmFyIGkscz0xLGE9ZS5sZW5ndGgscD10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoXCJ1Y3MyXCI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fFwidWNzLTJcIj09PXJ8fFwidXRmMTZsZVwiPT09cnx8XCJ1dGYtMTZsZVwiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIscC89MixvLz0yfWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKG4pe3ZhciBsPS0xO2ZvcihpPW87aTxhO2krKylpZihnKGUsaSk9PT1nKHQsLTE9PT1sPzA6aS1sKSl7aWYoLTE9PT1sJiYobD1pKSxpLWwrMT09PXApcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoaS09aS1sKSxsPS0xfWVsc2UgZm9yKG8rcD5hJiYobz1hLXApLGk9bztpPj0wO2ktLSl7Zm9yKHZhciB1PSEwLGM9MDtjPHA7YysrKWlmKGcoZSxpK2MpIT09Zyh0LGMpKXt1PSExO2JyZWFrfWlmKHUpcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gUyhlLHQsbyxyKXtvPU51bWJlcihvKXx8MDt2YXIgbj1lLmxlbmd0aC1vO3I/KHI9TnVtYmVyKHIpKT5uJiYocj1uKTpyPW47dmFyIGk9dC5sZW5ndGg7aWYoaSUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7cj5pLzImJihyPWkvMik7Zm9yKHZhciBzPTA7czxyOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW28rc109YX1yZXR1cm4gc31mdW5jdGlvbiBFKGUsdCxvLHIpe3JldHVybiB6KHgodCxlLmxlbmd0aC1vKSxlLG8scil9ZnVuY3Rpb24gdihlLHQsbyxyKXtyZXR1cm4geihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wO288ZS5sZW5ndGg7KytvKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG8pKTtyZXR1cm4gdH0odCksZSxvLHIpfWZ1bmN0aW9uIHcoZSx0LG8scil7cmV0dXJuIHYoZSx0LG8scil9ZnVuY3Rpb24gXyhlLHQsbyxyKXtyZXR1cm4geihIKHQpLGUsbyxyKX1mdW5jdGlvbiBSKGUsdCxvLHIpe3JldHVybiB6KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbixpPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpbz1lLmNoYXJDb2RlQXQocykscj1vPj44LG49byUyNTYsaS5wdXNoKG4pLGkucHVzaChyKTtyZXR1cm4gaX0odCxlLmxlbmd0aC1vKSxlLG8scil9ZnVuY3Rpb24gTShlLHQsbyl7cmV0dXJuIDA9PT10JiZvPT09ZS5sZW5ndGg/ci5mcm9tQnl0ZUFycmF5KGUpOnIuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHQsbykpfWZ1bmN0aW9uIFQoZSx0LG8pe289TWF0aC5taW4oZS5sZW5ndGgsbyk7Zm9yKHZhciByPVtdLG49dDtuPG87KXt2YXIgaSxzLGEscCxnPWVbbl0sbD1udWxsLHU9Zz4yMzk/NDpnPjIyMz8zOmc+MTkxPzI6MTtpZihuK3U8PW8pc3dpdGNoKHUpe2Nhc2UgMTpnPDEyOCYmKGw9Zyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoaT1lW24rMV0pKSYmKHA9KDMxJmcpPDw2fDYzJmkpPjEyNyYmKGw9cCk7YnJlYWs7Y2FzZSAzOmk9ZVtuKzFdLHM9ZVtuKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJnMpJiYocD0oMTUmZyk8PDEyfCg2MyZpKTw8Nnw2MyZzKT4yMDQ3JiYocDw1NTI5Nnx8cD41NzM0MykmJihsPXApO2JyZWFrO2Nhc2UgNDppPWVbbisxXSxzPWVbbisyXSxhPWVbbiszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYocD0oMTUmZyk8PDE4fCg2MyZpKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZwPDExMTQxMTImJihsPXApfW51bGw9PT1sPyhsPTY1NTMzLHU9MSk6bD42NTUzNSYmKGwtPTY1NTM2LHIucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLHIucHVzaChsKSxuKz11fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbz1cIlwiLHI9MDtmb3IoO3I8dDspbys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPTQwOTYpKTtyZXR1cm4gb30ocil9dC5CdWZmZXI9cCx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7K2UhPWUmJihlPTApO3JldHVybiBwLmFsbG9jKCtlKX0sdC5JTlNQRUNUX01BWF9CWVRFUz01MCxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09ZS5UWVBFRF9BUlJBWV9TVVBQT1JUP2UuVFlQRURfQVJSQVlfU1VQUE9SVDpmdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZS5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PWUuZm9vKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3ViYXJyYXkmJjA9PT1lLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksdC5rTWF4TGVuZ3RoPXMoKSxwLnBvb2xTaXplPTgxOTIscC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189cC5wcm90b3R5cGUsZX0scC5mcm9tPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZyhudWxsLGUsdCxvKX0scC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYocC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHAuX19wcm90b19fPVVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnBbU3ltYm9sLnNwZWNpZXNdPT09cCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHAuYWxsb2M9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBmdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gbCh0KSx0PD0wP2EoZSx0KTp2b2lkIDAhPT1vP1wic3RyaW5nXCI9PXR5cGVvZiByP2EoZSx0KS5maWxsKG8scik6YShlLHQpLmZpbGwobyk6YShlLHQpfShudWxsLGUsdCxvKX0scC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdShudWxsLGUpfSxwLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gdShudWxsLGUpfSxwLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX0scC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIXAuaXNCdWZmZXIoZSl8fCFwLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbz1lLmxlbmd0aCxyPXQubGVuZ3RoLG49MCxpPU1hdGgubWluKG8scik7bjxpOysrbilpZihlW25dIT09dFtuXSl7bz1lW25dLHI9dFtuXTticmVha31yZXR1cm4gbzxyPy0xOnI8bz8xOjB9LHAuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHAuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBwLmFsbG9jKDApO3ZhciBvO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxvPTA7bzxlLmxlbmd0aDsrK28pdCs9ZVtvXS5sZW5ndGg7dmFyIHI9cC5hbGxvY1Vuc2FmZSh0KSxuPTA7Zm9yKG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIHM9ZVtvXTtpZighcC5pc0J1ZmZlcihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtzLmNvcHkocixuKSxuKz1zLmxlbmd0aH1yZXR1cm4gcn0scC5ieXRlTGVuZ3RoPWYscC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHAucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWIodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWIodGhpcyx0LHQrMyksYih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxwLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OCliKHRoaXMsdCx0KzcpLGIodGhpcyx0KzEsdCs2KSxiKHRoaXMsdCsyLHQrNSksYih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxwLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/VCh0aGlzLDAsZSk6aC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHAucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighcC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1wLmNvbXBhcmUodGhpcyxlKX0scC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPVwiXCIsbz10LklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxvKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5vJiYoZSs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK2UrXCI+XCJ9LHAucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG8scixuKXtpZighcC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1vJiYobz1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW4mJihuPXRoaXMubGVuZ3RoKSx0PDB8fG8+ZS5sZW5ndGh8fHI8MHx8bj50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPj1uJiZ0Pj1vKXJldHVybiAwO2lmKHI+PW4pcmV0dXJuLTE7aWYodD49bylyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGk9KG4+Pj49MCktKHI+Pj49MCkscz0obz4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKGkscyksZz10aGlzLnNsaWNlKHIsbiksbD1lLnNsaWNlKHQsbyksdT0wO3U8YTsrK3UpaWYoZ1t1XSE9PWxbdV0pe2k9Z1t1XSxzPWxbdV07YnJlYWt9cmV0dXJuIGk8cz8tMTpzPGk/MTowfSxwLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG8pfSxwLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4geSh0aGlzLGUsdCxvLCEwKX0scC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB5KHRoaXMsZSx0LG8sITEpfSxwLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQsbyxyKXtpZih2b2lkIDA9PT10KXI9XCJ1dGY4XCIsbz10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1vJiZcInN0cmluZ1wiPT10eXBlb2YgdClyPXQsbz10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7dHw9MCxpc0Zpbml0ZShvKT8ob3w9MCx2b2lkIDA9PT1yJiYocj1cInV0ZjhcIikpOihyPW8sbz12b2lkIDApfXZhciBuPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW98fG8+bikmJihvPW4pLGUubGVuZ3RoPjAmJihvPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtyfHwocj1cInV0ZjhcIik7Zm9yKHZhciBpPSExOzspc3dpdGNoKHIpe2Nhc2VcImhleFwiOnJldHVybiBTKHRoaXMsZSx0LG8pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBFKHRoaXMsZSx0LG8pO2Nhc2VcImFzY2lpXCI6cmV0dXJuIHYodGhpcyxlLHQsbyk7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHcodGhpcyxlLHQsbyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIF8odGhpcyxlLHQsbyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIFIodGhpcyxlLHQsbyk7ZGVmYXVsdDppZihpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIityKTtyPShcIlwiK3IpLnRvTG93ZXJDYXNlKCksaT0hMH19LHAucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtmdW5jdGlvbiBPKGUsdCxvKXt2YXIgcj1cIlwiO289TWF0aC5taW4oZS5sZW5ndGgsbyk7Zm9yKHZhciBuPXQ7bjxvOysrbilyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBBKGUsdCxvKXt2YXIgcj1cIlwiO289TWF0aC5taW4oZS5sZW5ndGgsbyk7Zm9yKHZhciBuPXQ7bjxvOysrbilyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pO3JldHVybiByfWZ1bmN0aW9uIEYoZSx0LG8pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFvfHxvPDB8fG8+cikmJihvPXIpO2Zvcih2YXIgbj1cIlwiLGk9dDtpPG87KytpKW4rPVcoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gQyhlLHQsbyl7Zm9yKHZhciByPWUuc2xpY2UodCxvKSxuPVwiXCIsaT0wO2k8ci5sZW5ndGg7aSs9MiluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbaV0rMjU2KnJbaSsxXSk7cmV0dXJuIG59ZnVuY3Rpb24gRChlLHQsbyl7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoZSt0Pm8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEIoZSx0LG8scixuLGkpe2lmKCFwLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+bnx8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG8rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBJKGUsdCxvLHIpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIG49MCxpPU1hdGgubWluKGUubGVuZ3RoLW8sMik7bjxpOysrbillW28rbl09KHQmMjU1PDw4KihyP246MS1uKSk+Pj44KihyP246MS1uKX1mdW5jdGlvbiBQKGUsdCxvLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgbj0wLGk9TWF0aC5taW4oZS5sZW5ndGgtbyw0KTtuPGk7KytuKWVbbytuXT10Pj4+OCoocj9uOjMtbikmMjU1fWZ1bmN0aW9uIGooZSx0LG8scixuLGkpe2lmKG8rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihvPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gVShlLHQsbyxyLGkpe3JldHVybiBpfHxqKGUsMCxvLDQpLG4ud3JpdGUoZSx0LG8sciwyMyw0KSxvKzR9ZnVuY3Rpb24gTihlLHQsbyxyLGkpe3JldHVybiBpfHxqKGUsMCxvLDgpLG4ud3JpdGUoZSx0LG8sciw1Miw4KSxvKzh9cC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSkscC5UWVBFRF9BUlJBWV9TVVBQT1JUKShvPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPXAucHJvdG90eXBlO2Vsc2V7dmFyIG49dC1lO289bmV3IHAobix2b2lkIDApO2Zvcih2YXIgaT0wO2k8bjsrK2kpb1tpXT10aGlzW2krZV19cmV0dXJuIG99LHAucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG8pe2V8PTAsdHw9MCxvfHxEKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0sbj0xLGk9MDsrK2k8dCYmKG4qPTI1Nik7KXIrPXRoaXNbZStpXSpuO3JldHVybiByfSxwLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxvKXtlfD0wLHR8PTAsb3x8RChlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxuPTE7dD4wJiYobio9MjU2KTspcis9dGhpc1tlKy0tdF0qbjtyZXR1cm4gcn0scC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxwLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxwLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxwLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LHAucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0scC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxvKXtlfD0wLHR8PTAsb3x8RChlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLG49MSxpPTA7KytpPHQmJihuKj0yNTYpOylyKz10aGlzW2UraV0qbjtyZXR1cm4gcj49KG4qPTEyOCkmJihyLT1NYXRoLnBvdygyLDgqdCkpLHJ9LHAucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbyl7ZXw9MCx0fD0wLG98fEQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxuPTEsaT10aGlzW2UrLS1yXTtyPjAmJihuKj0yNTYpOylpKz10aGlzW2UrLS1yXSpuO3JldHVybiBpPj0obio9MTI4KSYmKGktPU1hdGgucG93KDIsOCp0KSksaX0scC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxwLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEQoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbz10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbz80Mjk0OTAxNzYwfG86b30scC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxEKGUsMix0aGlzLmxlbmd0aCk7dmFyIG89dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm8/NDI5NDkwMTc2MHxvOm99LHAucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHAucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHAucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyxlLCEwLDIzLDQpfSxwLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxEKGUsNCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsZSwhMSwyMyw0KX0scC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEQoZSw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxwLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RChlLDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITEsNTIsOCl9LHAucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxvLHIpeyhlPStlLHR8PTAsb3w9MCxyKXx8Qih0aGlzLGUsdCxvLE1hdGgucG93KDIsOCpvKS0xLDApO3ZhciBuPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxvJiYobio9MjU2KTspdGhpc1t0K2ldPWUvbiYyNTU7cmV0dXJuIHQrb30scC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG8scil7KGU9K2UsdHw9MCxvfD0wLHIpfHxCKHRoaXMsZSx0LG8sTWF0aC5wb3coMiw4Km8pLTEsMCk7dmFyIG49by0xLGk9MTtmb3IodGhpc1t0K25dPTI1NSZlOy0tbj49MCYmKGkqPTI1Nik7KXRoaXNbdCtuXT1lL2kmMjU1O3JldHVybiB0K299LHAucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCwxLDI1NSwwKSxwLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxwLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsMiw2NTUzNSwwKSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpJKHRoaXMsZSx0LCEwKSx0KzJ9LHAucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCwyLDY1NTM1LDApLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkkodGhpcyxlLHQsITEpLHQrMn0scC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6UCh0aGlzLGUsdCwhMCksdCs0fSxwLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHAuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpQKHRoaXMsZSx0LCExKSx0KzR9LHAucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG8scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgbj1NYXRoLnBvdygyLDgqby0xKTtCKHRoaXMsZSx0LG8sbi0xLC1uKX12YXIgaT0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytpPG8mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K2ktMV0mJihhPTEpLHRoaXNbdCtpXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtvfSxwLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIG49TWF0aC5wb3coMiw4Km8tMSk7Qih0aGlzLGUsdCxvLG4tMSwtbil9dmFyIGk9by0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K2krMV0mJihhPTEpLHRoaXNbdCtpXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtvfSxwLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlPStlLHR8PTAsb3x8Qih0aGlzLGUsdCwxLDEyNywtMTI4KSxwLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LHAucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpJKHRoaXMsZSx0LCEwKSx0KzJ9LHAucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpJKHRoaXMsZSx0LCExKSx0KzJ9LHAucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGU9K2UsdHw9MCxvfHxCKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCkscC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOlAodGhpcyxlLHQsITApLHQrNH0scC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZT0rZSx0fD0wLG98fEIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxwLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6UCh0aGlzLGUsdCwhMSksdCs0fSxwLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBVKHRoaXMsZSx0LCEwLG8pfSxwLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBVKHRoaXMsZSx0LCExLG8pfSxwLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gTih0aGlzLGUsdCwhMCxvKX0scC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIE4odGhpcyxlLHQsITEsbyl9LHAucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG8scil7aWYob3x8KG89MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxvJiYocj1vKSxyPT09bylyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKG88MHx8bz49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbyYmKHI9ZS5sZW5ndGgtdCtvKTt2YXIgbixpPXItbztpZih0aGlzPT09ZSYmbzx0JiZ0PHIpZm9yKG49aS0xO24+PTA7LS1uKWVbbit0XT10aGlzW24rb107ZWxzZSBpZihpPDFlM3x8IXAuVFlQRURfQVJSQVlfU1VQUE9SVClmb3Iobj0wO248aTsrK24pZVtuK3RdPXRoaXNbbitvXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShvLG8raSksdCk7cmV0dXJuIGl9LHAucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG8scil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0PyhyPXQsdD0wLG89dGhpcy5sZW5ndGgpOlwic3RyaW5nXCI9PXR5cGVvZiBvJiYocj1vLG89dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIG49ZS5jaGFyQ29kZUF0KDApO248MjU2JiYoZT1uKX1pZih2b2lkIDAhPT1yJiZcInN0cmluZ1wiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmIXAuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrcil9ZWxzZVwibnVtYmVyXCI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobzw9dClyZXR1cm4gdGhpczt2YXIgaTtpZih0Pj4+PTAsbz12b2lkIDA9PT1vP3RoaXMubGVuZ3RoOm8+Pj4wLGV8fChlPTApLFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihpPXQ7aTxvOysraSl0aGlzW2ldPWU7ZWxzZXt2YXIgcz1wLmlzQnVmZmVyKGUpP2U6eChuZXcgcChlLHIpLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKGk9MDtpPG8tdDsrK2kpdGhpc1tpK3RdPXNbaSVhXX1yZXR1cm4gdGhpc307dmFyIEw9L1teK1xcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFcoZSl7cmV0dXJuIGU8MTY/XCIwXCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24geChlLHQpe3ZhciBvO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxuPW51bGwsaT1bXSxzPTA7czxyOysrcyl7aWYoKG89ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmbzw1NzM0NCl7aWYoIW4pe2lmKG8+NTYzMTkpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1yKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bj1vO2NvbnRpbnVlfWlmKG88NTYzMjApeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KSxuPW87Y29udGludWV9bz02NTUzNisobi01NTI5Njw8MTB8by01NjMyMCl9ZWxzZSBuJiYodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7aWYobj1udWxsLG88MTI4KXtpZigodC09MSk8MClicmVhaztpLnB1c2gobyl9ZWxzZSBpZihvPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO2kucHVzaChvPj42fDE5Miw2MyZvfDEyOCl9ZWxzZSBpZihvPDY1NTM2KXtpZigodC09Myk8MClicmVhaztpLnB1c2gobz4+MTJ8MjI0LG8+PjYmNjN8MTI4LDYzJm98MTI4KX1lbHNle2lmKCEobzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKG8+PjE4fDI0MCxvPj4xMiY2M3wxMjgsbz4+NiY2M3wxMjgsNjMmb3wxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBIKGUpe3JldHVybiByLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfShlKS5yZXBsYWNlKEwsXCJcIikpLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz1cIj1cIjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIHooZSx0LG8scil7Zm9yKHZhciBuPTA7bjxyJiYhKG4rbz49dC5sZW5ndGh8fG4+PWUubGVuZ3RoKTsrK24pdFtuK29dPWVbbl07cmV0dXJuIG59fSkuY2FsbCh0aGlzLG8oNCkpfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dC5ieXRlTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0PWcoZSksbz10WzBdLHI9dFsxXTtyZXR1cm4gMyoobytyKS80LXJ9LHQudG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQsbyxyPWcoZSkscz1yWzBdLGE9clsxXSxwPW5ldyBpKGZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gMyoodCtvKS80LW99KDAscyxhKSksbD0wLHU9YT4wP3MtNDpzO2ZvcihvPTA7bzx1O28rPTQpdD1uW2UuY2hhckNvZGVBdChvKV08PDE4fG5bZS5jaGFyQ29kZUF0KG8rMSldPDwxMnxuW2UuY2hhckNvZGVBdChvKzIpXTw8NnxuW2UuY2hhckNvZGVBdChvKzMpXSxwW2wrK109dD4+MTYmMjU1LHBbbCsrXT10Pj44JjI1NSxwW2wrK109MjU1JnQ7Mj09PWEmJih0PW5bZS5jaGFyQ29kZUF0KG8pXTw8MnxuW2UuY2hhckNvZGVBdChvKzEpXT4+NCxwW2wrK109MjU1JnQpOzE9PT1hJiYodD1uW2UuY2hhckNvZGVBdChvKV08PDEwfG5bZS5jaGFyQ29kZUF0KG8rMSldPDw0fG5bZS5jaGFyQ29kZUF0KG8rMildPj4yLHBbbCsrXT10Pj44JjI1NSxwW2wrK109MjU1JnQpO3JldHVybiBwfSx0LmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG89ZS5sZW5ndGgsbj1vJTMsaT1bXSxzPTAsYT1vLW47czxhO3MrPTE2MzgzKWkucHVzaChsKGUscyxzKzE2MzgzPmE/YTpzKzE2MzgzKSk7MT09PW4/KHQ9ZVtvLTFdLGkucHVzaChyW3Q+PjJdK3JbdDw8NCY2M10rXCI9PVwiKSk6Mj09PW4mJih0PShlW28tMl08PDgpK2Vbby0xXSxpLnB1c2goclt0Pj4xMF0rclt0Pj40JjYzXStyW3Q8PDImNjNdK1wiPVwiKSk7cmV0dXJuIGkuam9pbihcIlwiKX07Zm9yKHZhciByPVtdLG49W10saT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LHM9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsYT0wLHA9cy5sZW5ndGg7YTxwOysrYSlyW2FdPXNbYV0sbltzLmNoYXJDb2RlQXQoYSldPWE7ZnVuY3Rpb24gZyhlKXt2YXIgdD1lLmxlbmd0aDtpZih0JTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciBvPWUuaW5kZXhPZihcIj1cIik7cmV0dXJuLTE9PT1vJiYobz10KSxbbyxvPT09dD8wOjQtbyU0XX1mdW5jdGlvbiBsKGUsdCxvKXtmb3IodmFyIG4saSxzPVtdLGE9dDthPG87YSs9MyluPShlW2FdPDwxNiYxNjcxMTY4MCkrKGVbYSsxXTw8OCY2NTI4MCkrKDI1NSZlW2ErMl0pLHMucHVzaChyWyhpPW4pPj4xOCY2M10rcltpPj4xMiY2M10rcltpPj42JjYzXStyWzYzJmldKTtyZXR1cm4gcy5qb2luKFwiXCIpfW5bXCItXCIuY2hhckNvZGVBdCgwKV09NjIsbltcIl9cIi5jaGFyQ29kZUF0KDApXT02M30sZnVuY3Rpb24oZSx0KXtcbi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG50LnJlYWQ9ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgaSxzLGE9OCpuLXItMSxwPSgxPDxhKS0xLGc9cD4+MSxsPS03LHU9bz9uLTE6MCxjPW8/LTE6MSxkPWVbdCt1XTtmb3IodSs9YyxpPWQmKDE8PC1sKS0xLGQ+Pj0tbCxsKz1hO2w+MDtpPTI1NippK2VbdCt1XSx1Kz1jLGwtPTgpO2ZvcihzPWkmKDE8PC1sKS0xLGk+Pj0tbCxsKz1yO2w+MDtzPTI1NipzK2VbdCt1XSx1Kz1jLGwtPTgpO2lmKDA9PT1pKWk9MS1nO2Vsc2V7aWYoaT09PXApcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLHIpLGktPWd9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLGktcil9LHQud3JpdGU9ZnVuY3Rpb24oZSx0LG8scixuLGkpe3ZhciBzLGEscCxnPTgqaS1uLTEsbD0oMTw8ZyktMSx1PWw+PjEsYz0yMz09PW4/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9cj8wOmktMSxmPXI/MTotMSxoPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1sKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihwPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHAqPTIpLCh0Kz1zK3U+PTE/Yy9wOmMqTWF0aC5wb3coMiwxLXUpKSpwPj0yJiYocysrLHAvPTIpLHMrdT49bD8oYT0wLHM9bCk6cyt1Pj0xPyhhPSh0KnAtMSkqTWF0aC5wb3coMixuKSxzKz11KTooYT10Kk1hdGgucG93KDIsdS0xKSpNYXRoLnBvdygyLG4pLHM9MCkpO24+PTg7ZVtvK2RdPTI1NSZhLGQrPWYsYS89MjU2LG4tPTgpO2ZvcihzPXM8PG58YSxnKz1uO2c+MDtlW28rZF09MjU1JnMsZCs9ZixzLz0yNTYsZy09OCk7ZVtvK2QtZl18PTEyOCpofX0sZnVuY3Rpb24oZSx0KXt2YXIgbz17fS50b1N0cmluZztlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1vLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9bygwKSxuPXIsaT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7bi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb25cIixudWxsLGkpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblwiKSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtzZWNvbmRzOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxuYW5vczpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsMCl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb247cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEludDY0KCk7ZS5zZXRTZWNvbmRzKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEludDMyKCk7ZS5zZXROYW5vcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOzAhPT0obz1lLmdldFNlY29uZHMoKSkmJnQud3JpdGVJbnQ2NCgxLG8pLDAhPT0obz1lLmdldE5hbm9zKCkpJiZ0LndyaXRlSW50MzIoMixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5nZXRTZWNvbmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5zZXRTZWNvbmRzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLmdldE5hbm9zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5zZXROYW5vcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixlKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmKX0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oMCksbj1yLGk9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO24uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueVwiLG51bGwsaSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnksci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueVwiKSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt0eXBlVXJsOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSx2YWx1ZTp0LmdldFZhbHVlX2FzQjY0KCl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueTtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFR5cGVVcmwobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQnl0ZXMoKTtlLnNldFZhbHVlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRUeXBlVXJsKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRWYWx1ZV9hc1U4KCkpLmxlbmd0aD4wJiZ0LndyaXRlQnl0ZXMoMixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VHlwZVVybD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNldFR5cGVVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRWYWx1ZSgpKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VmFsdWUoKSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIsZSl9LG4ub2JqZWN0LmV4dGVuZCh0LHByb3RvLmdvb2dsZS5wcm90b2J1ZikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUeXBlVXJsKCkuc3BsaXQoXCIvXCIpLnBvcCgpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKGUsdCxvKXtvfHwobz1cInR5cGUuZ29vZ2xlYXBpcy5jb20vXCIpLFwiL1wiIT1vLnN1YnN0cigtMSk/dGhpcy5zZXRUeXBlVXJsKG8rXCIvXCIrdCk6dGhpcy5zZXRUeXBlVXJsKG8rdCksdGhpcy5zZXRWYWx1ZShlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUudW5wYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0VHlwZU5hbWUoKT09dD9lKHRoaXMuZ2V0VmFsdWVfYXNVOCgpKTpudWxsfX0sZnVuY3Rpb24oZSx0LG8pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFzZUNoYW5uZWw9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBvPXRoaXM7dGhpcy5tYXhEYXRhQ2hhbm5lbFNpemU9MTYzODQsdGhpcy5wZWVyQ29ubj1lLHRoaXMuZGF0YUNoYW5uZWw9dCx0aGlzLnJlYWR5PW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtvLnBSZXNvbHZlPWV9KSksdC5vbm9wZW49ZnVuY3Rpb24oKXtyZXR1cm4gby5vbkNoYW5uZWxPcGVuKCl9LHQub25jbG9zZT1mdW5jdGlvbigpe3JldHVybiBvLm9uQ2hhbm5lbENsb3NlKCl9LHQub25lcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gby5vbkNoYW5uZWxFcnJvcihlKX0sZS5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmxvZyhlLmljZUNvbm5lY3Rpb25TdGF0ZSl9fXJldHVybiBlLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VXaXRoUmVhc29uKHZvaWQgMCl9LGUucHJvdG90eXBlLmlzQ2xvc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvc2VkfSxlLnByb3RvdHlwZS5pc0Nsb3NlZFJlYXNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb3NlZFJlYXNvbn0sZS5wcm90b3R5cGUuY2xvc2VXaXRoUmVhc29uPWZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VkfHwodGhpcy5jbG9zZWQ9ITAsdGhpcy5jbG9zZWRSZWFzb249ZSx0aGlzLnBlZXJDb25uLmNsb3NlKCkpfSxlLnByb3RvdHlwZS5vbkNoYW5uZWxPcGVuPWZ1bmN0aW9uKCl7dGhpcy5wUmVzb2x2ZSh2b2lkIDApfSxlLnByb3RvdHlwZS5vbkNoYW5uZWxDbG9zZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VXaXRoUmVhc29uKG5ldyBFcnJvcihcImRhdGEgY2hhbm5lbCBjbG9zZWRcIikpfSxlLnByb3RvdHlwZS5vbkNoYW5uZWxFcnJvcj1mdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKFwiY2hhbm5lbCBlcnJvclwiLGUpLHRoaXMuY2xvc2VXaXRoUmVhc29uKGUuZXJyb3IpfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXt0aGlzLmRhdGFDaGFubmVsLnNlbmQoZS5zZXJpYWxpemVCaW5hcnkoKSl9LGV9KCk7dC5CYXNlQ2hhbm5lbD1yfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG8ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBvKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZW5jb2RlQVNDSUk9dC5DbGllbnRTdHJlYW09dm9pZCAwO3ZhciBpPW8oMSkscz1vKDMpLGE9bygxOSkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbyxyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLG8scixuKXx8dGhpcztyZXR1cm4gaS5oZWFkZXJzUmVjZWl2ZWQ9ITEsaS50cmFpbGVyc1JlY2VpdmVkPSExLGkuY2hhbm5lbD10LGl9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD1cIi9cIit0aGlzLm9wdHMubWV0aG9kRGVmaW5pdGlvbi5zZXJ2aWNlLnNlcnZpY2VOYW1lK1wiL1wiK3RoaXMub3B0cy5tZXRob2REZWZpbml0aW9uLm1ldGhvZE5hbWUsbz1uZXcgcy5SZXF1ZXN0SGVhZGVycztvLnNldE1ldGhvZCh0KSxvLnNldE1ldGFkYXRhKGwoZSkpO3RyeXt0aGlzLmNoYW5uZWwud3JpdGVIZWFkZXJzKHRoaXMuc3RyZWFtLG8pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJlcnJvciB3cml0aW5nIGhlYWRlcnNcIixlKSx0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcihlKX19LHQucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe2U/dGhpcy53cml0ZU1lc3NhZ2UoITEsZS5zbGljZSg1KSk6dGhpcy53cml0ZU1lc3NhZ2UoITEsdm9pZCAwKX0sdC5wcm90b3R5cGUuZmluaXNoU2VuZD1mdW5jdGlvbigpe3RoaXMub3B0cy5tZXRob2REZWZpbml0aW9uLnJlcXVlc3RTdHJlYW0mJnRoaXMud3JpdGVNZXNzYWdlKCEwLHZvaWQgMCl9LHQucHJvdG90eXBlLndyaXRlTWVzc2FnZT1mdW5jdGlvbihlLHQpe3RyeXtpZighdHx8MD09dC5sZW5ndGgpcmV0dXJuKG89bmV3IHMuUGFja2V0TWVzc2FnZSkuc2V0RW9tKCEwKSwocj1uZXcgcy5SZXF1ZXN0TWVzc2FnZSkuc2V0SGFzTWVzc2FnZSghIXQpLHIuc2V0UGFja2V0TWVzc2FnZShvKSxyLnNldEVvcyhlKSx2b2lkIHRoaXMuY2hhbm5lbC53cml0ZU1lc3NhZ2UodGhpcy5zdHJlYW0scik7Zm9yKDswIT09dC5sZW5ndGg7KXt2YXIgbyxyLG49TWF0aC5taW4odC5sZW5ndGgsMTYzNzMpOyhvPW5ldyBzLlBhY2tldE1lc3NhZ2UpLnNldERhdGEodC5zbGljZSgwLG4pKSwwPT09KHQ9dC5zbGljZShuKSkubGVuZ3RoJiZvLnNldEVvbSghMCksKHI9bmV3IHMuUmVxdWVzdE1lc3NhZ2UpLnNldEhhc01lc3NhZ2UoISF0KSxyLnNldFBhY2tldE1lc3NhZ2Uobyksci5zZXRFb3MoZSksdGhpcy5jaGFubmVsLndyaXRlTWVzc2FnZSh0aGlzLnN0cmVhbSxyKX19Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcImVycm9yIHdyaXRpbmcgbWVzc2FnZVwiLGUpLHRoaXMuY2xvc2VXaXRoUmVjdkVycm9yKGUpfX0sdC5wcm90b3R5cGUub25SZXNwb25zZT1mdW5jdGlvbihlKXtzd2l0Y2goZS5nZXRUeXBlQ2FzZSgpKXtjYXNlIHMuUmVzcG9uc2UuVHlwZUNhc2UuSEVBREVSUzppZih0aGlzLmhlYWRlcnNSZWNlaXZlZClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcihuZXcgRXJyb3IoXCJoZWFkZXJzIGFscmVhZHkgcmVjZWl2ZWRcIikpO2lmKHRoaXMudHJhaWxlcnNSZWNlaXZlZClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcihuZXcgRXJyb3IoXCJoZWFkZXJzIHJlY2VpdmVkIGFmdGVyIHRyYWlsZXJzXCIpKTt0aGlzLnByb2Nlc3NIZWFkZXJzKGUuZ2V0SGVhZGVycygpKTticmVhaztjYXNlIHMuUmVzcG9uc2UuVHlwZUNhc2UuTUVTU0FHRTppZighdGhpcy5oZWFkZXJzUmVjZWl2ZWQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZVdpdGhSZWN2RXJyb3IobmV3IEVycm9yKFwiaGVhZGVycyBub3QgeWV0IHJlY2VpdmVkXCIpKTtpZih0aGlzLnRyYWlsZXJzUmVjZWl2ZWQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZVdpdGhSZWN2RXJyb3IobmV3IEVycm9yKFwiaGVhZGVycyByZWNlaXZlZCBhZnRlciB0cmFpbGVyc1wiKSk7dGhpcy5wcm9jZXNzTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7YnJlYWs7Y2FzZSBzLlJlc3BvbnNlLlR5cGVDYXNlLlRSQUlMRVJTOnRoaXMucHJvY2Vzc1RyYWlsZXJzKGUuZ2V0VHJhaWxlcnMoKSk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKFwidW5rbm93biByZXNwb25zZSB0eXBlXCIsZS5nZXRUeXBlQ2FzZSgpKX19LHQucHJvdG90eXBlLnByb2Nlc3NIZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMuaGVhZGVyc1JlY2VpdmVkPSEwLHRoaXMub3B0cy5vbkhlYWRlcnModShlLmdldE1ldGFkYXRhKCkpLDIwMCl9LHQucHJvdG90eXBlLnByb2Nlc3NNZXNzYWdlPWZ1bmN0aW9uKHQpe3ZhciBvPWUucHJvdG90eXBlLnByb2Nlc3NQYWNrZXRNZXNzYWdlLmNhbGwodGhpcyx0LmdldFBhY2tldE1lc3NhZ2UoKSk7aWYobyl7dmFyIHI9bmV3IEFycmF5QnVmZmVyKG8ubGVuZ3RoKzUpO25ldyBEYXRhVmlldyhyLDEsNCkuc2V0VWludDMyKDAsby5sZW5ndGgsITEpLG5ldyBVaW50OEFycmF5KHIsNSkuc2V0KG8pLHRoaXMub3B0cy5vbkNodW5rKG5ldyBVaW50OEFycmF5KHIpKX19LHQucHJvdG90eXBlLnByb2Nlc3NUcmFpbGVycz1mdW5jdGlvbihlKXt0aGlzLnRyYWlsZXJzUmVjZWl2ZWQ9ITA7dmFyIHQsbyxyPXUoZS5nZXRNZXRhZGF0YSgpKSxuPWUuZ2V0U3RhdHVzKCk7bj8odD1uLmdldENvZGUoKSxvPW4uZ2V0TWVzc2FnZSgpLHIuc2V0KFwiZ3JwYy1zdGF0dXNcIixcIlwiK24uZ2V0Q29kZSgpKSx2b2lkIDAhPT1vJiZyLnNldChcImdycGMtbWVzc2FnZVwiLG4uZ2V0TWVzc2FnZSgpKSk6KHQ9MCxyLnNldChcImdycGMtc3RhdHVzXCIsXCIwXCIpLG89XCJcIik7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLG8pe3QrPWUrXCI6IFwiK28uam9pbihcIiwgXCIpK1wiXFxyXFxuXCJ9KSksZyh0KX0ocikscz1uZXcgQXJyYXlCdWZmZXIoaS5sZW5ndGgrNSk7bmV3IERhdGFWaWV3KHMsMCwxKS5zZXRVaW50OCgwLDEyOCksbmV3IERhdGFWaWV3KHMsMSw0KS5zZXRVaW50MzIoMCxpLmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkocyw1KS5zZXQoaSksdGhpcy5vcHRzLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkocykpLDAhPT10P3RoaXMuY2xvc2VXaXRoUmVjdkVycm9yKG5ldyBFcnJvcihcIkNvZGU9XCIrdCtcIiBNZXNzYWdlPVwiK28pKTp0aGlzLmNsb3NlV2l0aFJlY3ZFcnJvcigpfSx0fShhLkJhc2VTdHJlYW0pO2Z1bmN0aW9uIGcoZSl7Zm9yKHZhciB0LG8scj1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj0wO24hPT1lLmxlbmd0aDsrK24pe3ZhciBpPWUuY2hhckNvZGVBdChuKTtpZighKDk9PT0odD1vPWkpfHwxMD09PXR8fDEzPT09dHx8bz49MzImJm88PTEyNikpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgY29udGFpbnMgaW52YWxpZCBBU0NJSVwiKTtyW25dPWl9cmV0dXJuIHJ9dC5DbGllbnRTdHJlYW09cCx0LmVuY29kZUFTQ0lJPWc7dmFyIGw9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9bmV3IHMuTWV0YWRhdGEsbz10LmdldE1kTWFwKCk7aWYoZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBzLlN0cmluZ3M7ci5zZXRWYWx1ZXNMaXN0KHQpLG8uc2V0KGUscil9KSksMCE9PXQuZ2V0TWRNYXAoKS5nZXRMZW5ndGgoKSlyZXR1cm4gdH19LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGkuZ3JwYy5NZXRhZGF0YTtyZXR1cm4gZSYmZS5nZXRNZE1hcCgpLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIHQuYXBwZW5kKG8sZS5nZXRWYWx1ZXNMaXN0KCkpfSkpLHR9fSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYXNlU3RyZWFtPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG8pe3RoaXMuY2xvc2VkPSExLHRoaXMucGFja2V0QnVmPVtdLHRoaXMucGFja2V0QnVmU2l6ZT0wLHRoaXMuc3RyZWFtPWUsdGhpcy5vbkRvbmU9dCx0aGlzLm9wdHM9b31yZXR1cm4gZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5vcHRzLmRlYnVnJiZjb25zb2xlLmRlYnVnKFwiY2FuY2VsXCIpfSxlLnByb3RvdHlwZS5jbG9zZVdpdGhSZWN2RXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZWR8fCh0aGlzLmNsb3NlZD0hMCx0aGlzLmVycj1lLHRoaXMuY2FuY2VsKCksdGhpcy5vbkRvbmUodGhpcy5zdHJlYW0uZ2V0SWQoKSksdGhpcy5vcHRzLm9uRW5kKHRoaXMuZXJyKSl9LGUucHJvdG90eXBlLnByb2Nlc3NQYWNrZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RGF0YV9hc1U4KCk7aWYodC5sZW5ndGgrdGhpcy5wYWNrZXRCdWZTaXplPjE8PDI1KXJldHVybiB0aGlzLnBhY2tldEJ1Zi5sZW5ndGg9MCx0aGlzLnBhY2tldEJ1ZlNpemU9MCx2b2lkIGNvbnNvbGUuZXJyb3IoXCJtZXNzYWdlIHNpemUgbGFyZ2VyIHRoYW4gbWF4IDMzNTU0NDMyOyBkaXNjYXJkaW5nXCIpO2lmKHRoaXMucGFja2V0QnVmLnB1c2godCksdGhpcy5wYWNrZXRCdWZTaXplKz10Lmxlbmd0aCxlLmdldEVvbSgpKXtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkodGhpcy5wYWNrZXRCdWZTaXplKSxyPTAsbj0wO248dGhpcy5wYWNrZXRCdWYubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5wYWNrZXRCdWZbbl07by5zZXQoaSxyKSxyKz1pLmxlbmd0aH1yZXR1cm4gdGhpcy5wYWNrZXRCdWYubGVuZ3RoPTAsdGhpcy5wYWNrZXRCdWZTaXplPTAsb319LGV9KCk7dC5CYXNlU3RyZWFtPXJ9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PW4/bjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0uY2FsbChudWxsKTtyLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5ycGMuQ29kZVwiLG51bGwsbikscHJvdG8uZ29vZ2xlLnJwYy5Db2RlPXtPSzowLENBTkNFTExFRDoxLFVOS05PV046MixJTlZBTElEX0FSR1VNRU5UOjMsREVBRExJTkVfRVhDRUVERUQ6NCxOT1RfRk9VTkQ6NSxBTFJFQURZX0VYSVNUUzo2LFBFUk1JU1NJT05fREVOSUVEOjcsVU5BVVRIRU5USUNBVEVEOjE2LFJFU09VUkNFX0VYSEFVU1RFRDo4LEZBSUxFRF9QUkVDT05ESVRJT046OSxBQk9SVEVEOjEwLE9VVF9PRl9SQU5HRToxMSxVTklNUExFTUVOVEVEOjEyLElOVEVSTkFMOjEzLFVOQVZBSUxBQkxFOjE0LERBVEFfTE9TUzoxNX0sci5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLnJwYyl9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM/dGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9LmNhbGwobnVsbCk7bi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5hcGkuSHR0cFwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuUGF0dGVybkNhc2VcIixudWxsLGkpLHByb3RvLmdvb2dsZS5hcGkuSHR0cD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUuYXBpLkh0dHAucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuSHR0cCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5hcGkuSHR0cC5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5hcGkuSHR0cFwiKSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucmVwZWF0ZWRGaWVsZHNfLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGVcIikscHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVyblwiKSxwcm90by5nb29nbGUuYXBpLkh0dHAucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtydWxlc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFJ1bGVzTGlzdCgpLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUudG9PYmplY3QsZSksZnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbjpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUuYXBpLkh0dHAuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cDtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUuYXBpLkh0dHAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU7dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFJ1bGVzKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKTtlLnNldEZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24obyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFJ1bGVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uKCkpJiZ0LndyaXRlQm9vbCgyLG8pfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmdldFJ1bGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLDEpfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnNldFJ1bGVzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5hZGRSdWxlcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLHQpfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmNsZWFyUnVsZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UnVsZXNMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5nZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnNldEZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnJlcGVhdGVkRmllbGRzXz1bMTFdLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfPVtbMiwzLDQsNSw2LDhdXSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLlBhdHRlcm5DYXNlPXtQQVRURVJOX05PVF9TRVQ6MCxHRVQ6MixQVVQ6MyxQT1NUOjQsREVMRVRFOjUsUEFUQ0g6NixDVVNUT006OH0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UGF0dGVybkNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17c2VsZWN0b3I6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGdldDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIikscHV0OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMyxcIlwiKSxwb3N0OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNCxcIlwiKSxwYl9kZWxldGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw1LFwiXCIpLHBhdGNoOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNixcIlwiKSxjdXN0b206KG89dC5nZXRDdXN0b20oKSkmJnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4udG9PYmplY3QoZSxvKSxib2R5OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNyxcIlwiKSxyZXNwb25zZUJvZHk6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxMixcIlwiKSxhZGRpdGlvbmFsQmluZGluZ3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0KCkscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlO3JldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0U2VsZWN0b3Iobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRHZXQobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQdXQobyk7YnJlYWs7Y2FzZSA0Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQb3N0KG8pO2JyZWFrO2Nhc2UgNTpvPXQucmVhZFN0cmluZygpO2Uuc2V0RGVsZXRlKG8pO2JyZWFrO2Nhc2UgNjpvPXQucmVhZFN0cmluZygpO2Uuc2V0UGF0Y2gobyk7YnJlYWs7Y2FzZSA4Om89bmV3IHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm47dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEN1c3RvbShvKTticmVhaztjYXNlIDc6bz10LnJlYWRTdHJpbmcoKTtlLnNldEJvZHkobyk7YnJlYWs7Y2FzZSAxMjpvPXQucmVhZFN0cmluZygpO2Uuc2V0UmVzcG9uc2VCb2R5KG8pO2JyZWFrO2Nhc2UgMTE6bz1uZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkQWRkaXRpb25hbEJpbmRpbmdzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRTZWxlY3RvcigpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZVN0cmluZygyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZVN0cmluZygzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZVN0cmluZyg0LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZVN0cmluZyg1LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDYpKSYmdC53cml0ZVN0cmluZyg2LG8pLG51bGwhPShvPWUuZ2V0Q3VzdG9tKCkpJiZ0LndyaXRlTWVzc2FnZSg4LG8scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRCb2R5KCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDcsbyksKG89ZS5nZXRSZXNwb25zZUJvZHkoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMTIsbyksKG89ZS5nZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDExLG8scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFNlbGVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0U2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldEdldD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEdldD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywyLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckdldD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDIscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzR2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRQdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMyxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJQdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywzLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc1B1dD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UG9zdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldFBvc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNCxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJQb3N0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNCxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNQb3N0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXREZWxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXREZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJEZWxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw1LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc0RlbGV0ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UGF0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRQYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw2LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhclBhdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNixwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNQYXRjaD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw2KX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0Q3VzdG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLDgpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRDdXN0b209ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDgscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyQ3VzdG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q3VzdG9tKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc0N1c3RvbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw4KX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0Qm9keT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsXCJcIil9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEJvZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFJlc3BvbnNlQm9keT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEyLFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRSZXNwb25zZUJvZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEyLGUpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsMTEpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMSxlKX0scHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuYWRkQWRkaXRpb25hbEJpbmRpbmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMTEsZSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLHQpfSxwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckFkZGl0aW9uYWxCaW5kaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17a2luZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIikscGF0aDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybjtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEtpbmQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQYXRoKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRLaW5kKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRQYXRoKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyl9LHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLmdldEtpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5zZXRLaW5kPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuc2V0UGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixlKX0sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uZ29vZ2xlLmFwaSl9LGZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vKDApLG49cixpPUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZVwiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXRcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGVcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWxcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNcIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zXCIsbnVsbCxpKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb1wiLG51bGwsaSksbi5leHBvcnRTeW1ib2woXCJwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb25cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25cIixudWxsLGkpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRcIixudWxsLGkpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldFwiKSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsNTAwLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnM9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5PXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVwiKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnM9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsNTAwLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5PXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnNcIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnM9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLDUwMCxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZXh0ZW5zaW9ucz17fSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeT17fSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCw1MDAscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zPXt9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnk9e30scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblwiKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFwiKSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm89ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGlzcGxheU5hbWU9XCJwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9cIikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRpc3BsYXlOYW1lPVwicHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb1wiKSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kaXNwbGF5TmFtZT1cInByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uXCIpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2ZpbGVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRGaWxlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0O3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRGaWxlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldEZpbGVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuZ2V0RmlsZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8sMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuc2V0RmlsZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuYWRkRmlsZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5jbGVhckZpbGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RmlsZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc189WzMsMTAsMTEsNCw1LDYsN10sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxwYl9wYWNrYWdlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDIpKT92b2lkIDA6byxkZXBlbmRlbmN5TGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDMpKT92b2lkIDA6byxwdWJsaWNEZXBlbmRlbmN5TGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDEwKSk/dm9pZCAwOm8sd2Vha0RlcGVuZGVuY3lMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMTEpKT92b2lkIDA6byxtZXNzYWdlVHlwZUxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldE1lc3NhZ2VUeXBlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksZW51bVR5cGVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFbnVtVHlwZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxzZXJ2aWNlTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0U2VydmljZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxleHRlbnNpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFeHRlbnNpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudG9PYmplY3QoZSxvKSxzb3VyY2VDb2RlSW5mbzoobz10LmdldFNvdXJjZUNvZGVJbmZvKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8udG9PYmplY3QoZSxvKSxzeW50YXg6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMTIpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQYWNrYWdlKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZFN0cmluZygpO2UuYWRkRGVwZW5kZW5jeShvKTticmVhaztjYXNlIDEwOmZvcih2YXIgcj10LmlzRGVsaW1pdGVkKCk/dC5yZWFkUGFja2VkSW50MzIoKTpbdC5yZWFkSW50MzIoKV0sbj0wO248ci5sZW5ndGg7bisrKWUuYWRkUHVibGljRGVwZW5kZW5jeShyW25dKTticmVhaztjYXNlIDExOmZvcihyPXQuaXNEZWxpbWl0ZWQoKT90LnJlYWRQYWNrZWRJbnQzMigpOlt0LnJlYWRJbnQzMigpXSxuPTA7bjxyLmxlbmd0aDtuKyspZS5hZGRXZWFrRGVwZW5kZW5jeShyW25dKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkTWVzc2FnZVR5cGUobyk7YnJlYWs7Y2FzZSA1Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRW51bVR5cGUobyk7YnJlYWs7Y2FzZSA2Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkU2VydmljZShvKTticmVhaztjYXNlIDc6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEV4dGVuc2lvbiQobyk7YnJlYWs7Y2FzZSA4Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2Nhc2UgOTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0U291cmNlQ29kZUluZm8obyk7YnJlYWs7Y2FzZSAxMjpvPXQucmVhZFN0cmluZygpO2Uuc2V0U3ludGF4KG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlU3RyaW5nKDIsbyksKG89ZS5nZXREZXBlbmRlbmN5TGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkU3RyaW5nKDMsbyksKG89ZS5nZXRQdWJsaWNEZXBlbmRlbmN5TGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkSW50MzIoMTAsbyksKG89ZS5nZXRXZWFrRGVwZW5kZW5jeUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZEludDMyKDExLG8pLChvPWUuZ2V0TWVzc2FnZVR5cGVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsbyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEVudW1UeXBlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0U2VydmljZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNixvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEV4dGVuc2lvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNyxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSg4LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFNvdXJjZUNvZGVJbmZvKCkpJiZ0LndyaXRlTWVzc2FnZSg5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxMikpJiZ0LndyaXRlU3RyaW5nKDEyLG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFBhY2thZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzUGFja2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldERlcGVuZGVuY3lMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXREZXBlbmRlbmN5TGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlfHxbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGREZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywzLGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckRlcGVuZGVuY3lMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RGVwZW5kZW5jeUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UHVibGljRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywxMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRQdWJsaWNEZXBlbmRlbmN5TGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTAsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkUHVibGljRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMTAsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUHVibGljRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRQdWJsaWNEZXBlbmRlbmN5TGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRXZWFrRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywxMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRXZWFrRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDExLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFdlYWtEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxMSxlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJXZWFrRGVwZW5kZW5jeUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRXZWFrRGVwZW5kZW5jeUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TWVzc2FnZVR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRNZXNzYWdlVHlwZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRNZXNzYWdlVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJNZXNzYWdlVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXNzYWdlVHlwZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RW51bVR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLDUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RW51bVR5cGVMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRW51bVR5cGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckVudW1UeXBlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVudW1UeXBlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRTZXJ2aWNlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byw2KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFNlcnZpY2VMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkU2VydmljZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDYsZSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU2VydmljZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTZXJ2aWNlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbnNpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byw3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEV4dGVuc2lvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFeHRlbnNpb24kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNyxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEV4dGVuc2lvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLDgpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDgsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDgpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U291cmNlQ29kZUluZm89ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyw5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFNvdXJjZUNvZGVJbmZvPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsOSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU291cmNlQ29kZUluZm89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTb3VyY2VDb2RlSW5mbyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU291cmNlQ29kZUluZm89ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRTeW50YXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFN5bnRheD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclN5bnRheD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU3ludGF4PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc189WzIsNiwzLDQsNSw4LDksMTBdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sZmllbGRMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRGaWVsZExpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksZXh0ZW5zaW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RXh0ZW5zaW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxuZXN0ZWRUeXBlTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0TmVzdGVkVHlwZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLGVudW1UeXBlTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RW51bVR5cGVMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksZXh0ZW5zaW9uUmFuZ2VMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFeHRlbnNpb25SYW5nZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnRvT2JqZWN0LGUpLG9uZW9mRGVjbExpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldE9uZW9mRGVjbExpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsZSksb3B0aW9uczoobz10LmdldE9wdGlvbnMoKSkmJnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy50b09iamVjdChlLG8pLHJlc2VydmVkUmFuZ2VMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRSZXNlcnZlZFJhbmdlTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS50b09iamVjdCxlKSxyZXNlcnZlZE5hbWVMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMTApKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEZpZWxkKG8pO2JyZWFrO2Nhc2UgNjpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXh0ZW5zaW9uJChvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkTmVzdGVkVHlwZShvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG87dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFbnVtVHlwZShvKTticmVhaztjYXNlIDU6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXh0ZW5zaW9uUmFuZ2Uobyk7YnJlYWs7Y2FzZSA4Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRPbmVvZkRlY2wobyk7YnJlYWs7Y2FzZSA3Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2Nhc2UgOTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUmVzZXJ2ZWRSYW5nZShvKTticmVhaztjYXNlIDEwOm89dC5yZWFkU3RyaW5nKCk7ZS5hZGRSZXNlcnZlZE5hbWUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldEZpZWxkTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEV4dGVuc2lvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNixvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXROZXN0ZWRUeXBlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRFbnVtVHlwZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEV4dGVuc2lvblJhbmdlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRPbmVvZkRlY2xMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDgsbyxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0T3B0aW9ucygpKSYmdC53cml0ZU1lc3NhZ2UoNyxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRSZXNlcnZlZFJhbmdlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFJlc2VydmVkTmFtZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZFN0cmluZygxMCxvKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzdGFydDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sZW5kOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDIpKT92b2lkIDA6byxvcHRpb25zOihvPXQuZ2V0T3B0aW9ucygpKSYmcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50MzIoKTtlLnNldFN0YXJ0KG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEludDMyKCk7ZS5zZXRFbmQobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnM7dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVJbnQzMigxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZUludDMyKDIsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmdldFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmNsZWFyU3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5oYXNTdGFydD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5jbGVhckVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmhhc0VuZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLmNsZWFyT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9wdGlvbnModm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzdGFydDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sZW5kOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDIpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZTtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50MzIoKTtlLnNldFN0YXJ0KG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEludDMyKCk7ZS5zZXRFbmQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVJbnQzMigxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZUludDMyKDIsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNldFN0YXJ0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmNsZWFyU3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmNsZWFyRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRGaWVsZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRGaWVsZExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJGaWVsZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaWVsZExpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbnNpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byw2KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRXh0ZW5zaW9uJD1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDYsZSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEV4dGVuc2lvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROZXN0ZWRUeXBlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROZXN0ZWRUeXBlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkTmVzdGVkVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5lc3RlZFR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TmVzdGVkVHlwZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFbnVtVHlwZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEVudW1UeXBlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRW51bVR5cGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRW51bVR5cGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RW51bVR5cGVMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uUmFuZ2VMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UsNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEV4dGVuc2lvblJhbmdlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRXh0ZW5zaW9uUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbnNpb25SYW5nZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFeHRlbnNpb25SYW5nZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPbmVvZkRlY2xMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byw4KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T25lb2ZEZWNsTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkT25lb2ZEZWNsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOCxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPbmVvZkRlY2xMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T25lb2ZEZWNsTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyw3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9wdGlvbnModm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLDkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRSZXNlcnZlZFJhbmdlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkUmVzZXJ2ZWRSYW5nZT1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDksZSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUmVzZXJ2ZWRSYW5nZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZXNlcnZlZFJhbmdlTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywxMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEwLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkUmVzZXJ2ZWROYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxMCxlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZXNlcnZlZE5hbWVMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc189Wzk5OV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17dW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9ucyxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sZSksZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnM7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDk5OTp2YXIgbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLDk5OSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxudW1iZXI6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMykpP3ZvaWQgMDpvLGxhYmVsOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDQpKT92b2lkIDA6byx0eXBlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDUpKT92b2lkIDA6byx0eXBlTmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw2KSk/dm9pZCAwOm8sZXh0ZW5kZWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLGRlZmF1bHRWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw3KSk/dm9pZCAwOm8sb25lb2ZJbmRleDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw5KSk/dm9pZCAwOm8sanNvbk5hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMTApKT92b2lkIDA6byxvcHRpb25zOihvPXQuZ2V0T3B0aW9ucygpKSYmcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50b09iamVjdChlLG8pLHByb3RvM09wdGlvbmFsOm51bGw9PShvPXIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQodCwxNykpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkSW50MzIoKTtlLnNldE51bWJlcihvKTticmVhaztjYXNlIDQ6bz10LnJlYWRFbnVtKCk7ZS5zZXRMYWJlbChvKTticmVhaztjYXNlIDU6bz10LnJlYWRFbnVtKCk7ZS5zZXRUeXBlKG8pO2JyZWFrO2Nhc2UgNjpvPXQucmVhZFN0cmluZygpO2Uuc2V0VHlwZU5hbWUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRFeHRlbmRlZShvKTticmVhaztjYXNlIDc6bz10LnJlYWRTdHJpbmcoKTtlLnNldERlZmF1bHRWYWx1ZShvKTticmVhaztjYXNlIDk6bz10LnJlYWRJbnQzMigpO2Uuc2V0T25lb2ZJbmRleChvKTticmVhaztjYXNlIDEwOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRKc29uTmFtZShvKTticmVhaztjYXNlIDg6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9ucyhvKTticmVhaztjYXNlIDE3Om89dC5yZWFkQm9vbCgpO2Uuc2V0UHJvdG8zT3B0aW9uYWwobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVJbnQzMigzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZUVudW0oNCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw1KSkmJnQud3JpdGVFbnVtKDUsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNikpJiZ0LndyaXRlU3RyaW5nKDYsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlU3RyaW5nKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNykpJiZ0LndyaXRlU3RyaW5nKDcsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsOSkpJiZ0LndyaXRlSW50MzIoOSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxMCkpJiZ0LndyaXRlU3RyaW5nKDEwLG8pLG51bGwhPShvPWUuZ2V0T3B0aW9ucygpKSYmdC53cml0ZU1lc3NhZ2UoOCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDE3KSkmJnQud3JpdGVCb29sKDE3LG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZT17VFlQRV9ET1VCTEU6MSxUWVBFX0ZMT0FUOjIsVFlQRV9JTlQ2NDozLFRZUEVfVUlOVDY0OjQsVFlQRV9JTlQzMjo1LFRZUEVfRklYRUQ2NDo2LFRZUEVfRklYRUQzMjo3LFRZUEVfQk9PTDo4LFRZUEVfU1RSSU5HOjksVFlQRV9HUk9VUDoxMCxUWVBFX01FU1NBR0U6MTEsVFlQRV9CWVRFUzoxMixUWVBFX1VJTlQzMjoxMyxUWVBFX0VOVU06MTQsVFlQRV9TRklYRUQzMjoxNSxUWVBFX1NGSVhFRDY0OjE2LFRZUEVfU0lOVDMyOjE3LFRZUEVfU0lOVDY0OjE4fSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWw9e0xBQkVMX09QVElPTkFMOjEsTEFCRUxfUkVRVUlSRUQ6MixMQUJFTF9SRVBFQVRFRDozfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE51bWJlcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldExhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRUeXBlTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw2KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbmRlZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5kZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJFeHRlbmRlZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzRXh0ZW5kZWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RGVmYXVsdFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNyxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJEZWZhdWx0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc0RlZmF1bHRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPbmVvZkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPbmVvZkluZGV4PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT25lb2ZJbmRleD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw5LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT25lb2ZJbmRleD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRKc29uTmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEwLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEpzb25OYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckpzb25OYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEwLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzSnNvbk5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDgsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UHJvdG8zT3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTcsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFByb3RvM09wdGlvbmFsPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclByb3RvM09wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE3LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzUHJvdG8zT3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTcpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9ucyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0T3B0aW9ucygpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXz1bMiw0LDVdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bmFtZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sdmFsdWVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRWYWx1ZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LGUpLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudG9PYmplY3QoZSxvKSxyZXNlcnZlZFJhbmdlTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS50b09iamVjdCxlKSxyZXNlcnZlZE5hbWVMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsNSkpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVmFsdWUobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFJlc2VydmVkUmFuZ2Uobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkU3RyaW5nKCk7ZS5hZGRSZXNlcnZlZE5hbWUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFZhbHVlTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFJlc2VydmVkUmFuZ2VMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsbyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRSZXNlcnZlZE5hbWVMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRTdHJpbmcoNSxvKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzdGFydDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwxKSk/dm9pZCAwOm8sZW5kOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDIpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRJbnQzMigpO2Uuc2V0U3RhcnQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkSW50MzIoKTtlLnNldEVuZChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUludDMyKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlSW50MzIoMixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNldFN0YXJ0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJTdGFydD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNTdGFydD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5jbGVhckVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFZhbHVlTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0VmFsdWVMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkVmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VmFsdWVMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkUmFuZ2VMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWRSYW5nZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZFJhbmdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJSZXNlcnZlZFJhbmdlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc2VydmVkUmFuZ2VMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcyw1KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsZXx8W10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkUmVzZXJ2ZWROYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcyw1LGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkTmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZXNlcnZlZE5hbWVMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxudW1iZXI6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEludDMyKCk7ZS5zZXROdW1iZXIobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0T3B0aW9ucyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZUludDMyKDIsbyksbnVsbCE9KG89ZS5nZXRPcHRpb25zKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck51bWJlcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc051bWJlcj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcHRpb25zKHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXz1bMl0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxtZXRob2RMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRNZXRob2RMaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by50b09iamVjdCxlKSxvcHRpb25zOihvPXQuZ2V0T3B0aW9ucygpKSYmcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRNZXRob2Qobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRPcHRpb25zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRNZXRob2RMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldE9wdGlvbnMoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRNZXRob2RMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8sMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRNZXRob2RMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkTWV0aG9kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck1ldGhvZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRNZXRob2RMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtuYW1lOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxpbnB1dFR5cGU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLG91dHB1dFR5cGU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMykpP3ZvaWQgMDpvLG9wdGlvbnM6KG89dC5nZXRPcHRpb25zKCkpJiZwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdChlLG8pLGNsaWVudFN0cmVhbWluZzpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCw1LCExKSxzZXJ2ZXJTdHJlYW1pbmc6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsNiwhMSl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJbnB1dFR5cGUobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRPdXRwdXRUeXBlKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uczt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldE9wdGlvbnMobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkQm9vbCgpO2Uuc2V0Q2xpZW50U3RyZWFtaW5nKG8pO2JyZWFrO2Nhc2UgNjpvPXQucmVhZEJvb2woKTtlLnNldFNlcnZlclN0cmVhbWluZyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZVN0cmluZygyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZVN0cmluZygzLG8pLG51bGwhPShvPWUuZ2V0T3B0aW9ucygpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw1KSkmJnQud3JpdGVCb29sKDUsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNikpJiZ0LndyaXRlQm9vbCg2LG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0SW5wdXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0SW5wdXRUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhcklucHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc0lucHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3V0cHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE91dHB1dFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3V0cHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc091dHB1dFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRDbGllbnRTdHJlYW1pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldENsaWVudFN0cmVhbWluZz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJDbGllbnRTdHJlYW1pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNDbGllbnRTdHJlYW1pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFNlcnZlclN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw2LCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U2VydmVyU3RyZWFtaW5nPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclNlcnZlclN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw2LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1NlcnZlclN0cmVhbWluZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw2KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2phdmFQYWNrYWdlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDEpKT92b2lkIDA6byxqYXZhT3V0ZXJDbGFzc25hbWU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsOCkpP3ZvaWQgMDpvLGphdmFNdWx0aXBsZUZpbGVzOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDEwLCExKSxqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOm51bGw9PShvPXIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQodCwyMCkpP3ZvaWQgMDpvLGphdmFTdHJpbmdDaGVja1V0Zjg6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMjcsITEpLG9wdGltaXplRm9yOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsOSwxKSxnb1BhY2thZ2U6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMTEpKT92b2lkIDA6byxjY0dlbmVyaWNTZXJ2aWNlczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwxNiwhMSksamF2YUdlbmVyaWNTZXJ2aWNlczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwxNywhMSkscHlHZW5lcmljU2VydmljZXM6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMTgsITEpLHBocEdlbmVyaWNTZXJ2aWNlczpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCw0MiwhMSksZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyMywhMSksY2NFbmFibGVBcmVuYXM6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMzEsITApLG9iamNDbGFzc1ByZWZpeDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzNikpP3ZvaWQgMDpvLGNzaGFycE5hbWVzcGFjZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzNykpP3ZvaWQgMDpvLHN3aWZ0UHJlZml4Om51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDM5KSk/dm9pZCAwOm8scGhwQ2xhc3NQcmVmaXg6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNDApKT92b2lkIDA6byxwaHBOYW1lc3BhY2U6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNDEpKT92b2lkIDA6byxwaHBNZXRhZGF0YU5hbWVzcGFjZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0NCkpP3ZvaWQgMDpvLHJ1YnlQYWNrYWdlOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDQ1KSk/dm9pZCAwOm8sdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxuLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRKYXZhUGFja2FnZShvKTticmVhaztjYXNlIDg6bz10LnJlYWRTdHJpbmcoKTtlLnNldEphdmFPdXRlckNsYXNzbmFtZShvKTticmVhaztjYXNlIDEwOm89dC5yZWFkQm9vbCgpO2Uuc2V0SmF2YU11bHRpcGxlRmlsZXMobyk7YnJlYWs7Y2FzZSAyMDpvPXQucmVhZEJvb2woKTtlLnNldEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gobyk7YnJlYWs7Y2FzZSAyNzpvPXQucmVhZEJvb2woKTtlLnNldEphdmFTdHJpbmdDaGVja1V0Zjgobyk7YnJlYWs7Y2FzZSA5Om89dC5yZWFkRW51bSgpO2Uuc2V0T3B0aW1pemVGb3Iobyk7YnJlYWs7Y2FzZSAxMTpvPXQucmVhZFN0cmluZygpO2Uuc2V0R29QYWNrYWdlKG8pO2JyZWFrO2Nhc2UgMTY6bz10LnJlYWRCb29sKCk7ZS5zZXRDY0dlbmVyaWNTZXJ2aWNlcyhvKTticmVhaztjYXNlIDE3Om89dC5yZWFkQm9vbCgpO2Uuc2V0SmF2YUdlbmVyaWNTZXJ2aWNlcyhvKTticmVhaztjYXNlIDE4Om89dC5yZWFkQm9vbCgpO2Uuc2V0UHlHZW5lcmljU2VydmljZXMobyk7YnJlYWs7Y2FzZSA0MjpvPXQucmVhZEJvb2woKTtlLnNldFBocEdlbmVyaWNTZXJ2aWNlcyhvKTticmVhaztjYXNlIDIzOm89dC5yZWFkQm9vbCgpO2Uuc2V0RGVwcmVjYXRlZChvKTticmVhaztjYXNlIDMxOm89dC5yZWFkQm9vbCgpO2Uuc2V0Q2NFbmFibGVBcmVuYXMobyk7YnJlYWs7Y2FzZSAzNjpvPXQucmVhZFN0cmluZygpO2Uuc2V0T2JqY0NsYXNzUHJlZml4KG8pO2JyZWFrO2Nhc2UgMzc6bz10LnJlYWRTdHJpbmcoKTtlLnNldENzaGFycE5hbWVzcGFjZShvKTticmVhaztjYXNlIDM5Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRTd2lmdFByZWZpeChvKTticmVhaztjYXNlIDQwOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQaHBDbGFzc1ByZWZpeChvKTticmVhaztjYXNlIDQxOm89dC5yZWFkU3RyaW5nKCk7ZS5zZXRQaHBOYW1lc3BhY2Uobyk7YnJlYWs7Y2FzZSA0NDpvPXQucmVhZFN0cmluZygpO2Uuc2V0UGhwTWV0YWRhdGFOYW1lc3BhY2Uobyk7YnJlYWs7Y2FzZSA0NTpvPXQucmVhZFN0cmluZygpO2Uuc2V0UnVieVBhY2thZ2Uobyk7YnJlYWs7Y2FzZSA5OTk6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsOCkpJiZ0LndyaXRlU3RyaW5nKDgsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTApKSYmdC53cml0ZUJvb2woMTAsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMjApKSYmdC53cml0ZUJvb2woMjAsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMjcpKSYmdC53cml0ZUJvb2woMjcsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsOSkpJiZ0LndyaXRlRW51bSg5LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDExKSkmJnQud3JpdGVTdHJpbmcoMTEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTYpKSYmdC53cml0ZUJvb2woMTYsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTcpKSYmdC53cml0ZUJvb2woMTcsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMTgpKSYmdC53cml0ZUJvb2woMTgsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNDIpKSYmdC53cml0ZUJvb2woNDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMjMpKSYmdC53cml0ZUJvb2woMjMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzEpKSYmdC53cml0ZUJvb2woMzEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzYpKSYmdC53cml0ZVN0cmluZygzNixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzNykpJiZ0LndyaXRlU3RyaW5nKDM3LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDM5KSkmJnQud3JpdGVTdHJpbmcoMzksbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNDApKSYmdC53cml0ZVN0cmluZyg0MCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0MSkpJiZ0LndyaXRlU3RyaW5nKDQxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQ0KSkmJnQud3JpdGVTdHJpbmcoNDQsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNDUpKSYmdC53cml0ZVN0cmluZyg0NSxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlPXtTUEVFRDoxLENPREVfU0laRToyLExJVEVfUlVOVElNRTozfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhUGFja2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhUGFja2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhT3V0ZXJDbGFzc25hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFPdXRlckNsYXNzbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsOCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFPdXRlckNsYXNzbmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw4LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YU91dGVyQ2xhc3NuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDgpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFNdWx0aXBsZUZpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDEwLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhTXVsdGlwbGVGaWxlcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTAsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhTXVsdGlwbGVGaWxlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFNdWx0aXBsZUZpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIwLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyMCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMjAsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhU3RyaW5nQ2hlY2tVdGY4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDI3LCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhU3RyaW5nQ2hlY2tVdGY4PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyNyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFTdHJpbmdDaGVja1V0Zjg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMjcsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhU3RyaW5nQ2hlY2tVdGY4PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDI3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRPcHRpbWl6ZUZvcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDksMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0T3B0aW1pemVGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJPcHRpbWl6ZUZvcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw5LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzT3B0aW1pemVGb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0R29QYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0R29QYWNrYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckdvUGFja2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0dvUGFja2FnZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0Q2NHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTYsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldENjR2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxNixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckNjR2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE2LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzQ2NHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTcsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDE3LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxNyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTcpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFB5R2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDE4LCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQeUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTgsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQeUdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxOCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1B5R2VuZXJpY1NlcnZpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDE4KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQaHBHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNDIsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFBocEdlbmVyaWNTZXJ2aWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBHZW5lcmljU2VydmljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjMsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMjMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldENjRW5hYmxlQXJlbmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMxLCEwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRDY0VuYWJsZUFyZW5hcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDY0VuYWJsZUFyZW5hcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0NjRW5hYmxlQXJlbmFzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRPYmpjQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzNixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRPYmpjQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM2LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyT2JqY0NsYXNzUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM2LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzT2JqY0NsYXNzUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDM2KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRDc2hhcnBOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzNyxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRDc2hhcnBOYW1lc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM3LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyQ3NoYXJwTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM3LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzQ3NoYXJwTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDM3KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRTd2lmdFByZWZpeD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDM5LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFN3aWZ0UHJlZml4PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzOSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclN3aWZ0UHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM5LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzU3dpZnRQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMzkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFBocENsYXNzUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNDAsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQwLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGhwQ2xhc3NQcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDAsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBDbGFzc1ByZWZpeD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0MCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNDEsXCJcIil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwTmFtZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0MSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclBocE5hbWVzcGFjZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0MSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocE5hbWVzcGFjZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0MSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwTWV0YWRhdGFOYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0NCxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBNZXRhZGF0YU5hbWVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBNZXRhZGF0YU5hbWVzcGFjZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0NCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1BocE1ldGFkYXRhTmFtZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQ0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRSdWJ5UGFja2FnZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQ1LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFJ1YnlQYWNrYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0NSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclJ1YnlQYWNrYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQ1LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUnVieVBhY2thZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNDUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLDk5OSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e21lc3NhZ2VTZXRXaXJlRm9ybWF0OnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDEsITEpLG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMiwhMSksZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKSxtYXBFbnRyeTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKHQsNykpP3ZvaWQgMDpvLHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LGUpfTtyZXR1cm4gci5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKHQsbixwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9ucyxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixlKSxlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnM7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEJvb2woKTtlLnNldE1lc3NhZ2VTZXRXaXJlRm9ybWF0KG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKTtlLnNldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3Iobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkQm9vbCgpO2Uuc2V0RGVwcmVjYXRlZChvKTticmVhaztjYXNlIDc6bz10LnJlYWRCb29sKCk7ZS5zZXRNYXBFbnRyeShvKTticmVhaztjYXNlIDk5OTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVCb29sKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlQm9vbCgyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZUJvb2woMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw3KSkmJnQud3JpdGVCb29sKDcsbyksKG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRNZXNzYWdlU2V0V2lyZUZvcm1hdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRNZXNzYWdlU2V0V2lyZUZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VTZXRXaXJlRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5oYXNNZXNzYWdlU2V0V2lyZUZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXROb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5oYXNOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0TWFwRW50cnk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0TWFwRW50cnk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJNYXBFbnRyeT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw3LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzTWFwRW50cnk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2N0eXBlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxwYWNrZWQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZCh0LDIpKT92b2lkIDA6byxqc3R5cGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw2LDApLGxhenk6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsNSwhMSksZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKSx3ZWFrOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDEwLCExKSx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG4scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixlKSxlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRFbnVtKCk7ZS5zZXRDdHlwZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRCb29sKCk7ZS5zZXRQYWNrZWQobyk7YnJlYWs7Y2FzZSA2Om89dC5yZWFkRW51bSgpO2Uuc2V0SnN0eXBlKG8pO2JyZWFrO2Nhc2UgNTpvPXQucmVhZEJvb2woKTtlLnNldExhenkobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkQm9vbCgpO2Uuc2V0RGVwcmVjYXRlZChvKTticmVhaztjYXNlIDEwOm89dC5yZWFkQm9vbCgpO2Uuc2V0V2VhayhvKTticmVhaztjYXNlIDk5OTpvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVFbnVtKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlQm9vbCgyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDYpKSYmdC53cml0ZUVudW0oNixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw1KSkmJnQud3JpdGVCb29sKDUsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlQm9vbCgzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEwKSkmJnQud3JpdGVCb29sKDEwLG8pLChvPWUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOTk5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLHIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZT17U1RSSU5HOjAsQ09SRDoxLFNUUklOR19QSUVDRToyfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZT17SlNfTk9STUFMOjAsSlNfU1RSSU5HOjEsSlNfTlVNQkVSOjJ9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEN0eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0Q3R5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyQ3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNDdHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGFja2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRQYWNrZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGFja2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuaGFzUGFja2VkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRKc3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRKc3R5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFySnN0eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuaGFzSnN0eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRMYXp5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRMYXp5PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhckxhenk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNMYXp5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXREZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRXZWFrPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDEwLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0V2Vhaz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMTAsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyV2Vhaz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxMCx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNXZWFrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixlKSxlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgOTk5OnZhciBvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24obyk7YnJlYWs7ZGVmYXVsdDpyLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOTk5LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLHIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfPVs5OTldLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17YWxsb3dBbGlhczpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKHQsMikpP3ZvaWQgMDpvLGRlcHJlY2F0ZWQ6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMywhMSksdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxuLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDI6dmFyIG89dC5yZWFkQm9vbCgpO2Uuc2V0QWxsb3dBbGlhcyhvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCk7ZS5zZXREZXByZWNhdGVkKG8pO2JyZWFrO2Nhc2UgOTk5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbihvKTticmVhaztkZWZhdWx0OnIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbil9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZUJvb2woMixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVCb29sKDMsbyksKG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRBbGxvd0FsaWFzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldEFsbG93QWxpYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJBbGxvd0FsaWFzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5oYXNBbGxvd0FsaWFzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyx2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sOTk5KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc189Wzk5OV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17ZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwxLCExKSx1bmludGVycHJldGVkT3B0aW9uTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCxlKX07cmV0dXJuIHIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbih0LG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9ucyxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnM7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRCb29sKCk7ZS5zZXREZXByZWNhdGVkKG8pO2JyZWFrO2Nhc2UgOTk5Om89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbihvKTticmVhaztkZWZhdWx0OnIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKGUsdCxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbil9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUJvb2woMSxvKSwobz1lLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDk5OSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxyLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhlLHQscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwhMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc189Wzk5OV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17ZGVwcmVjYXRlZDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzMywhMSksdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLGUpLGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDMzOnZhciBvPXQucmVhZEJvb2woKTtlLnNldERlcHJlY2F0ZWQobyk7YnJlYWs7Y2FzZSA5OTk6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzMpKSYmdC53cml0ZUJvb2woMzMsbyksKG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXREZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMzLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMzMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiw5OTkpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5OTksZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnJlcGVhdGVkRmllbGRzXz1bOTk5XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtkZXByZWNhdGVkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMzLCExKSxpZGVtcG90ZW5jeUxldmVsOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMzQsMCksdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsZSl9O3JldHVybiByLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24odCxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixlKSxlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDMzOnZhciBvPXQucmVhZEJvb2woKTtlLnNldERlcHJlY2F0ZWQobyk7YnJlYWs7Y2FzZSAzNDpvPXQucmVhZEVudW0oKTtlLnNldElkZW1wb3RlbmN5TGV2ZWwobyk7YnJlYWs7Y2FzZSA5OTk6bz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247dC5yZWFkTWVzc2FnZShvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRVbmludGVycHJldGVkT3B0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6ci5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24oZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzMpKSYmdC53cml0ZUJvb2woMzMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMzQpKSYmdC53cml0ZUVudW0oMzQsbyksKG89ZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5OTksbyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksci5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMoZSx0LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw9e0lERU1QT1RFTkNZX1VOS05PV046MCxOT19TSURFX0VGRkVDVFM6MSxJREVNUE9URU5UOjJ9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXREZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMzLCExKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldElkZW1wb3RlbmN5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzNCwwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldElkZW1wb3RlbmN5TGV2ZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM0LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJJZGVtcG90ZW5jeUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDM0LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5oYXNJZGVtcG90ZW5jeUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDM0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLDk5OSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOTk5LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDk5OSxlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucmVwZWF0ZWRGaWVsZHNfPVsyXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e25hbWVMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXROYW1lTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnRvT2JqZWN0LGUpLGlkZW50aWZpZXJWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzKSk/dm9pZCAwOm8scG9zaXRpdmVJbnRWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0KSk/dm9pZCAwOm8sbmVnYXRpdmVJbnRWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw1KSk/dm9pZCAwOm8sZG91YmxlVmFsdWU6bnVsbD09KG89ci5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkKHQsNikpP3ZvaWQgMDpvLHN0cmluZ1ZhbHVlOnQuZ2V0U3RyaW5nVmFsdWVfYXNCNjQoKSxhZ2dyZWdhdGVWYWx1ZTpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw4KSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDI6dmFyIG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0O3QucmVhZE1lc3NhZ2Uobyxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkTmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKTtlLnNldElkZW50aWZpZXJWYWx1ZShvKTticmVhaztjYXNlIDQ6bz10LnJlYWRVaW50NjQoKTtlLnNldFBvc2l0aXZlSW50VmFsdWUobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkSW50NjQoKTtlLnNldE5lZ2F0aXZlSW50VmFsdWUobyk7YnJlYWs7Y2FzZSA2Om89dC5yZWFkRG91YmxlKCk7ZS5zZXREb3VibGVWYWx1ZShvKTticmVhaztjYXNlIDc6bz10LnJlYWRCeXRlcygpO2Uuc2V0U3RyaW5nVmFsdWUobyk7YnJlYWs7Y2FzZSA4Om89dC5yZWFkU3RyaW5nKCk7ZS5zZXRBZ2dyZWdhdGVWYWx1ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0TmFtZUxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMixvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVTdHJpbmcoMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0KSkmJnQud3JpdGVVaW50NjQoNCxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw1KSkmJnQud3JpdGVJbnQ2NCg1LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDYpKSYmdC53cml0ZURvdWJsZSg2LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDcpKSYmdC53cml0ZUJ5dGVzKDcsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsOCkpJiZ0LndyaXRlU3RyaW5nKDgsbyl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17bmFtZVBhcnQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMSkpP3ZvaWQgMDpvLGlzRXh0ZW5zaW9uOm51bGw9PShvPXIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQodCwyKSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0O3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lUGFydChvKTticmVhaztjYXNlIDI6bz10LnJlYWRCb29sKCk7ZS5zZXRJc0V4dGVuc2lvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDIpKSYmdC53cml0ZUJvb2woMixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmdldE5hbWVQYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLnNldE5hbWVQYXJ0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuY2xlYXJOYW1lUGFydD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5oYXNOYW1lUGFydD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmdldElzRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuc2V0SXNFeHRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5jbGVhcklzRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmhhc0lzRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0TmFtZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQsMil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXROYW1lTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmFkZE5hbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhck5hbWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TmFtZUxpc3QoW10pfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0SWRlbnRpZmllclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMyxcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldElkZW50aWZpZXJWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFySWRlbnRpZmllclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDMsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0lkZW50aWZpZXJWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldFBvc2l0aXZlSW50VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0UG9zaXRpdmVJbnRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNCxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyUG9zaXRpdmVJbnRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5oYXNQb3NpdGl2ZUludFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0TmVnYXRpdmVJbnRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXROZWdhdGl2ZUludFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw1LGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuY2xlYXJOZWdhdGl2ZUludFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc05lZ2F0aXZlSW50VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXREb3VibGVWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0RG91YmxlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhckRvdWJsZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDYsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0RvdWJsZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw3LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRTdHJpbmdWYWx1ZSgpKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldFN0cmluZ1ZhbHVlX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFN0cmluZ1ZhbHVlKCkpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0U3RyaW5nVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhclN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDcsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc1N0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDcpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0QWdncmVnYXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0QWdncmVnYXRlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDgsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhckFnZ3JlZ2F0ZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDgsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0FnZ3JlZ2F0ZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDgpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtsb2NhdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldExvY2F0aW9uTGlzdCgpLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbztyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXtzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRMb2NhdGlvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRMb2NhdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5yZXBlYXRlZEZpZWxkc189WzEsMiw2XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3BhdGhMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMSkpP3ZvaWQgMDpvLHNwYW5MaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMikpP3ZvaWQgMDpvLGxlYWRpbmdDb21tZW50czpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCwzKSk/dm9pZCAwOm8sdHJhaWxpbmdDb21tZW50czpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQodCw0KSk/dm9pZCAwOm8sbGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsNikpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uO3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspe3N3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTpmb3IodmFyIG89dC5pc0RlbGltaXRlZCgpP3QucmVhZFBhY2tlZEludDMyKCk6W3QucmVhZEludDMyKCldLHI9MDtyPG8ubGVuZ3RoO3IrKyllLmFkZFBhdGgob1tyXSk7YnJlYWs7Y2FzZSAyOmZvcihvPXQuaXNEZWxpbWl0ZWQoKT90LnJlYWRQYWNrZWRJbnQzMigpOlt0LnJlYWRJbnQzMigpXSxyPTA7cjxvLmxlbmd0aDtyKyspZS5hZGRTcGFuKG9bcl0pO2JyZWFrO2Nhc2UgMzp2YXIgbj10LnJlYWRTdHJpbmcoKTtlLnNldExlYWRpbmdDb21tZW50cyhuKTticmVhaztjYXNlIDQ6bj10LnJlYWRTdHJpbmcoKTtlLnNldFRyYWlsaW5nQ29tbWVudHMobik7YnJlYWs7Y2FzZSA2Om49dC5yZWFkU3RyaW5nKCk7ZS5hZGRMZWFkaW5nRGV0YWNoZWRDb21tZW50cyhuKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9fXJldHVybiBlfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0UGF0aExpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVQYWNrZWRJbnQzMigxLG8pLChvPWUuZ2V0U3Bhbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVQYWNrZWRJbnQzMigyLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDMpKSYmdC53cml0ZVN0cmluZygzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZVN0cmluZyg0LG8pLChvPWUuZ2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRTdHJpbmcoNixvKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5nZXRQYXRoTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFBhdGhMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5hZGRQYXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxLGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJQYXRoTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhdGhMaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5nZXRTcGFuTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDIpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFNwYW5MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywyLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5hZGRTcGFuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywyLGUsdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJTcGFuTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFNwYW5MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5nZXRMZWFkaW5nQ29tbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldExlYWRpbmdDb21tZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMyxlKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhckxlYWRpbmdDb21tZW50cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuaGFzTGVhZGluZ0NvbW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldFRyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LFwiXCIpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFRyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJUcmFpbGluZ0NvbW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsdm9pZCAwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5oYXNUcmFpbGluZ0NvbW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldExlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDYpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldExlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNixlfHxbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuYWRkTGVhZGluZ0RldGFjaGVkQ29tbWVudHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDYsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhckxlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldExlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuZ2V0TG9jYXRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbiwxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5zZXRMb2NhdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuYWRkTG9jYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLHQpfSxwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLmNsZWFyTG9jYXRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TG9jYXRpb25MaXN0KFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YW5ub3RhdGlvbkxpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEFubm90YXRpb25MaXN0KCkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24udG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm87cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEFubm90YXRpb24obyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfX1yZXR1cm4gZX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0QW5ub3RhdGlvbkxpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi50b09iamVjdChlLHRoaXMpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3BhdGhMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsMSkpP3ZvaWQgMDpvLHNvdXJjZUZpbGU6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsMikpP3ZvaWQgMDpvLGJlZ2luOm51bGw9PShvPXIuTWVzc2FnZS5nZXRGaWVsZCh0LDMpKT92b2lkIDA6byxlbmQ6bnVsbD09KG89ci5NZXNzYWdlLmdldEZpZWxkKHQsNCkpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbjtyZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7c3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOmZvcih2YXIgbz10LmlzRGVsaW1pdGVkKCk/dC5yZWFkUGFja2VkSW50MzIoKTpbdC5yZWFkSW50MzIoKV0scj0wO3I8by5sZW5ndGg7cisrKWUuYWRkUGF0aChvW3JdKTticmVhaztjYXNlIDI6dmFyIG49dC5yZWFkU3RyaW5nKCk7ZS5zZXRTb3VyY2VGaWxlKG4pO2JyZWFrO2Nhc2UgMzpuPXQucmVhZEludDMyKCk7ZS5zZXRCZWdpbihuKTticmVhaztjYXNlIDQ6bj10LnJlYWRJbnQzMigpO2Uuc2V0RW5kKG4pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX19cmV0dXJuIGV9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRQYXRoTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVBhY2tlZEludDMyKDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlU3RyaW5nKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlSW50MzIoMyxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0KSkmJnQud3JpdGVJbnQzMig0LG8pfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuZ2V0UGF0aExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywxKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldFBhdGhMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywxLGV8fFtdKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmFkZFBhdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDEsZSx0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyUGF0aExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRQYXRoTGlzdChbXSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5nZXRTb3VyY2VGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldFNvdXJjZUZpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhclNvdXJjZUZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMix2b2lkIDApfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuaGFzU291cmNlRmlsZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldEJlZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldEJlZ2luPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLGUpfSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuY2xlYXJCZWdpbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywzLHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5oYXNCZWdpbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhckVuZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LHZvaWQgMCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5oYXNFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuZ2V0QW5ub3RhdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24sMSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuc2V0QW5ub3RhdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5wcm90b3R5cGUuYWRkQW5ub3RhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbix0KX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5jbGVhckFubm90YXRpb25MaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0QW5ub3RhdGlvbkxpc3QoW10pfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5nb29nbGUucHJvdG9idWYpfSxmdW5jdGlvbihlLHQsbyl7dmFyIHI9byg1KSxuPW8oMSkuZ3JwYyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5zZXJ2aWNlTmFtZT1cInByb3RvLnJwYy52MS5BdXRoU2VydmljZVwiLGV9KCk7ZnVuY3Rpb24gcyhlLHQpe3RoaXMuc2VydmljZUhvc3Q9ZSx0aGlzLm9wdGlvbnM9dHx8e319aS5BdXRoZW50aWNhdGU9e21ldGhvZE5hbWU6XCJBdXRoZW50aWNhdGVcIixzZXJ2aWNlOmkscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTpyLkF1dGhlbnRpY2F0ZVJlcXVlc3QscmVzcG9uc2VUeXBlOnIuQXV0aGVudGljYXRlUmVzcG9uc2V9LHQuQXV0aFNlcnZpY2U9aSxzLnByb3RvdHlwZS5hdXRoZW50aWNhdGU9ZnVuY3Rpb24oZSx0LG8pezI9PT1hcmd1bWVudHMubGVuZ3RoJiYobz1hcmd1bWVudHNbMV0pO3ZhciByPW4udW5hcnkoaS5BdXRoZW50aWNhdGUse3JlcXVlc3Q6ZSxob3N0OnRoaXMuc2VydmljZUhvc3QsbWV0YWRhdGE6dCx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydCxkZWJ1Zzp0aGlzLm9wdGlvbnMuZGVidWcsb25FbmQ6ZnVuY3Rpb24oZSl7aWYobylpZihlLnN0YXR1cyE9PW4uQ29kZS5PSyl7dmFyIHQ9bmV3IEVycm9yKGUuc3RhdHVzTWVzc2FnZSk7dC5jb2RlPWUuc3RhdHVzLHQubWV0YWRhdGE9ZS50cmFpbGVycyxvKHQsbnVsbCl9ZWxzZSBvKG51bGwsZS5tZXNzYWdlKX19KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bz1udWxsLHIuY2xvc2UoKX19fSx0LkF1dGhTZXJ2aWNlQ2xpZW50PXM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnNlcnZpY2VOYW1lPVwicHJvdG8ucnBjLnYxLkV4dGVybmFsQXV0aFNlcnZpY2VcIixlfSgpO2Z1bmN0aW9uIHAoZSx0KXt0aGlzLnNlcnZpY2VIb3N0PWUsdGhpcy5vcHRpb25zPXR8fHt9fWEuQXV0aGVudGljYXRlVG89e21ldGhvZE5hbWU6XCJBdXRoZW50aWNhdGVUb1wiLHNlcnZpY2U6YSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOnIuQXV0aGVudGljYXRlVG9SZXF1ZXN0LHJlc3BvbnNlVHlwZTpyLkF1dGhlbnRpY2F0ZVRvUmVzcG9uc2V9LHQuRXh0ZXJuYWxBdXRoU2VydmljZT1hLHAucHJvdG90eXBlLmF1dGhlbnRpY2F0ZVRvPWZ1bmN0aW9uKGUsdCxvKXsyPT09YXJndW1lbnRzLmxlbmd0aCYmKG89YXJndW1lbnRzWzFdKTt2YXIgcj1uLnVuYXJ5KGEuQXV0aGVudGljYXRlVG8se3JlcXVlc3Q6ZSxob3N0OnRoaXMuc2VydmljZUhvc3QsbWV0YWRhdGE6dCx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydCxkZWJ1Zzp0aGlzLm9wdGlvbnMuZGVidWcsb25FbmQ6ZnVuY3Rpb24oZSl7aWYobylpZihlLnN0YXR1cyE9PW4uQ29kZS5PSyl7dmFyIHQ9bmV3IEVycm9yKGUuc3RhdHVzTWVzc2FnZSk7dC5jb2RlPWUuc3RhdHVzLHQubWV0YWRhdGE9ZS50cmFpbGVycyxvKHQsbnVsbCl9ZWxzZSBvKG51bGwsZS5tZXNzYWdlKX19KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bz1udWxsLHIuY2xvc2UoKX19fSx0LkV4dGVybmFsQXV0aFNlcnZpY2VDbGllbnQ9cH0sZnVuY3Rpb24oZSx0LG8pe3ZhciByPW8oNyksbj1vKDEpLmdycGMsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuc2VydmljZU5hbWU9XCJwcm90by5ycGMud2VicnRjLnYxLlNpZ25hbGluZ1NlcnZpY2VcIixlfSgpO2Z1bmN0aW9uIHMoZSx0KXt0aGlzLnNlcnZpY2VIb3N0PWUsdGhpcy5vcHRpb25zPXR8fHt9fWkuQ2FsbD17bWV0aG9kTmFtZTpcIkNhbGxcIixzZXJ2aWNlOmkscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMCxyZXF1ZXN0VHlwZTpyLkNhbGxSZXF1ZXN0LHJlc3BvbnNlVHlwZTpyLkNhbGxSZXNwb25zZX0saS5DYWxsVXBkYXRlPXttZXRob2ROYW1lOlwiQ2FsbFVwZGF0ZVwiLHNlcnZpY2U6aSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOnIuQ2FsbFVwZGF0ZVJlcXVlc3QscmVzcG9uc2VUeXBlOnIuQ2FsbFVwZGF0ZVJlc3BvbnNlfSxpLkFuc3dlcj17bWV0aG9kTmFtZTpcIkFuc3dlclwiLHNlcnZpY2U6aSxyZXF1ZXN0U3RyZWFtOiEwLHJlc3BvbnNlU3RyZWFtOiEwLHJlcXVlc3RUeXBlOnIuQW5zd2VyUmVzcG9uc2UscmVzcG9uc2VUeXBlOnIuQW5zd2VyUmVxdWVzdH0saS5PcHRpb25hbFdlYlJUQ0NvbmZpZz17bWV0aG9kTmFtZTpcIk9wdGlvbmFsV2ViUlRDQ29uZmlnXCIsc2VydmljZTppLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6ci5PcHRpb25hbFdlYlJUQ0NvbmZpZ1JlcXVlc3QscmVzcG9uc2VUeXBlOnIuT3B0aW9uYWxXZWJSVENDb25maWdSZXNwb25zZX0sdC5TaWduYWxpbmdTZXJ2aWNlPWkscy5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbihlLHQpe3ZhciBvPXtkYXRhOltdLGVuZDpbXSxzdGF0dXM6W119LHI9bi5pbnZva2UoaS5DYWxsLHtyZXF1ZXN0OmUsaG9zdDp0aGlzLnNlcnZpY2VIb3N0LG1ldGFkYXRhOnQsdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnQsZGVidWc6dGhpcy5vcHRpb25zLmRlYnVnLG9uTWVzc2FnZTpmdW5jdGlvbihlKXtvLmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChlKX0pKX0sb25FbmQ6ZnVuY3Rpb24oZSx0LHIpe28uc3RhdHVzLmZvckVhY2goKGZ1bmN0aW9uKG8pe28oe2NvZGU6ZSxkZXRhaWxzOnQsbWV0YWRhdGE6cn0pfSkpLG8uZW5kLmZvckVhY2goKGZ1bmN0aW9uKG8pe28oe2NvZGU6ZSxkZXRhaWxzOnQsbWV0YWRhdGE6cn0pfSkpLG89bnVsbH19KTtyZXR1cm57b246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb1tlXS5wdXNoKHQpLHRoaXN9LGNhbmNlbDpmdW5jdGlvbigpe289bnVsbCxyLmNsb3NlKCl9fX0scy5wcm90b3R5cGUuY2FsbFVwZGF0ZT1mdW5jdGlvbihlLHQsbyl7Mj09PWFyZ3VtZW50cy5sZW5ndGgmJihvPWFyZ3VtZW50c1sxXSk7dmFyIHI9bi51bmFyeShpLkNhbGxVcGRhdGUse3JlcXVlc3Q6ZSxob3N0OnRoaXMuc2VydmljZUhvc3QsbWV0YWRhdGE6dCx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydCxkZWJ1Zzp0aGlzLm9wdGlvbnMuZGVidWcsb25FbmQ6ZnVuY3Rpb24oZSl7aWYobylpZihlLnN0YXR1cyE9PW4uQ29kZS5PSyl7dmFyIHQ9bmV3IEVycm9yKGUuc3RhdHVzTWVzc2FnZSk7dC5jb2RlPWUuc3RhdHVzLHQubWV0YWRhdGE9ZS50cmFpbGVycyxvKHQsbnVsbCl9ZWxzZSBvKG51bGwsZS5tZXNzYWdlKX19KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bz1udWxsLHIuY2xvc2UoKX19fSxzLnByb3RvdHlwZS5hbnN3ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9e2RhdGE6W10sZW5kOltdLHN0YXR1czpbXX0sbz1uLmNsaWVudChpLkFuc3dlcix7aG9zdDp0aGlzLnNlcnZpY2VIb3N0LG1ldGFkYXRhOmUsdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnR9KTtyZXR1cm4gby5vbkVuZCgoZnVuY3Rpb24oZSxvLHIpe3Quc3RhdHVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qoe2NvZGU6ZSxkZXRhaWxzOm8sbWV0YWRhdGE6cn0pfSkpLHQuZW5kLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qoe2NvZGU6ZSxkZXRhaWxzOm8sbWV0YWRhdGE6cn0pfSkpLHQ9bnVsbH0pKSxvLm9uTWVzc2FnZSgoZnVuY3Rpb24oZSl7dC5kYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoZSl9KSl9KSksby5zdGFydChlKSx7b246ZnVuY3Rpb24oZSxvKXtyZXR1cm4gdFtlXS5wdXNoKG8pLHRoaXN9LHdyaXRlOmZ1bmN0aW9uKGUpe3JldHVybiBvLnNlbmQoZSksdGhpc30sZW5kOmZ1bmN0aW9uKCl7by5maW5pc2hTZW5kKCl9LGNhbmNlbDpmdW5jdGlvbigpe3Q9bnVsbCxvLmNsb3NlKCl9fX0scy5wcm90b3R5cGUub3B0aW9uYWxXZWJSVENDb25maWc9ZnVuY3Rpb24oZSx0LG8pezI9PT1hcmd1bWVudHMubGVuZ3RoJiYobz1hcmd1bWVudHNbMV0pO3ZhciByPW4udW5hcnkoaS5PcHRpb25hbFdlYlJUQ0NvbmZpZyx7cmVxdWVzdDplLGhvc3Q6dGhpcy5zZXJ2aWNlSG9zdCxtZXRhZGF0YTp0LHRyYW5zcG9ydDp0aGlzLm9wdGlvbnMudHJhbnNwb3J0LGRlYnVnOnRoaXMub3B0aW9ucy5kZWJ1ZyxvbkVuZDpmdW5jdGlvbihlKXtpZihvKWlmKGUuc3RhdHVzIT09bi5Db2RlLk9LKXt2YXIgdD1uZXcgRXJyb3IoZS5zdGF0dXNNZXNzYWdlKTt0LmNvZGU9ZS5zdGF0dXMsdC5tZXRhZGF0YT1lLnRyYWlsZXJzLG8odCxudWxsKX1lbHNlIG8obnVsbCxlLm1lc3NhZ2UpfX0pO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtvPW51bGwsci5jbG9zZSgpfX19LHQuU2lnbmFsaW5nU2VydmljZUNsaWVudD1zfSxmdW5jdGlvbihlLHQsbyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKChmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIHMoZSl7dHJ5e3Aoci5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtwKHIudGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHAoZSl7dmFyIHQ7ZS5kb25lP24oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbz90Om5ldyBvKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9cCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfSxuPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIG8scixuLGkscz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZuWzBdKXRocm93IG5bMV07cmV0dXJuIG5bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gaT17bmV4dDphKDApLHRocm93OmEoMSkscmV0dXJuOmEoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBhKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO3M7KXRyeXtpZihvPTEsciYmKG49MiZpWzBdP3IucmV0dXJuOmlbMF0/ci50aHJvd3x8KChuPXIucmV0dXJuKSYmbi5jYWxsKHIpLDApOnIubmV4dCkmJiEobj1uLmNhbGwocixpWzFdKSkuZG9uZSlyZXR1cm4gbjtzd2l0Y2gocj0wLG4mJihpPVsyJmlbMF0sbi52YWx1ZV0pLGlbMF0pe2Nhc2UgMDpjYXNlIDE6bj1pO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcy5sYWJlbCsrLHt2YWx1ZTppWzFdLGRvbmU6ITF9O2Nhc2UgNTpzLmxhYmVsKysscj1pWzFdLGk9WzBdO2NvbnRpbnVlO2Nhc2UgNzppPXMub3BzLnBvcCgpLHMudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobj1zLnRyeXMsKG49bi5sZW5ndGg+MCYmbltuLmxlbmd0aC0xXSl8fDYhPT1pWzBdJiYyIT09aVswXSkpe3M9MDtjb250aW51ZX1pZigzPT09aVswXSYmKCFufHxpWzFdPm5bMF0mJmlbMV08blszXSkpe3MubGFiZWw9aVsxXTticmVha31pZig2PT09aVswXSYmcy5sYWJlbDxuWzFdKXtzLmxhYmVsPW5bMV0sbj1pO2JyZWFrfWlmKG4mJnMubGFiZWw8blsyXSl7cy5sYWJlbD1uWzJdLHMub3BzLnB1c2goaSk7YnJlYWt9blsyXSYmcy5vcHMucG9wKCkscy50cnlzLnBvcCgpO2NvbnRpbnVlfWk9dC5jYWxsKGUscyl9Y2F0Y2goZSl7aT1bNixlXSxyPTB9ZmluYWxseXtvPW49MH1pZig1JmlbMF0pdGhyb3cgaVsxXTtyZXR1cm57dmFsdWU6aVswXT9pWzFdOnZvaWQgMCxkb25lOiEwfX0oW2ksYV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQubmV3UGVlckNvbm5lY3Rpb25Gb3JDbGllbnQ9dm9pZCAwLHQubmV3UGVlckNvbm5lY3Rpb25Gb3JDbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG8saSxzLGEscCxnLGwsdT10aGlzO3JldHVybiBuKHRoaXMsKGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHR8fCh0PXtpY2VTZXJ2ZXJzOlt7dXJsczpcInN0dW46Z2xvYmFsLnN0dW4udHdpbGlvLmNvbTozNDc4P3RyYW5zcG9ydD11ZHBcIn1dfSksbz1uZXcgUlRDUGVlckNvbm5lY3Rpb24odCkscz1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7aT1lfSkpLChhPW8uY3JlYXRlRGF0YUNoYW5uZWwoXCJkYXRhXCIse2lkOjAsbmVnb3RpYXRlZDohMCxvcmRlcmVkOiEwfSkpLmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLChwPW8uY3JlYXRlRGF0YUNoYW5uZWwoXCJuZWdvdGlhdGlvblwiLHtpZDoxLG5lZ290aWF0ZWQ6ITAsb3JkZXJlZDohMH0pKS5iaW5hcnlUeXBlPVwiYXJyYXlidWZmZXJcIixwLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gcih1LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQscixpO3JldHVybiBuKHRoaXMsKGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG4udHJ5cy5wdXNoKFswLDQsLDVdKSx0PW5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oSlNPTi5wYXJzZShhdG9iKGUuZGF0YSkpKSxbNCxvLnNldFJlbW90ZURlc2NyaXB0aW9uKHQpXTtjYXNlIDE6cmV0dXJuIG4uc2VudCgpLFs0LG8uY3JlYXRlQW5zd2VyKCldO2Nhc2UgMjpyZXR1cm4gcj1uLnNlbnQoKSxbNCxvLnNldExvY2FsRGVzY3JpcHRpb24ocildO2Nhc2UgMzpyZXR1cm4gbi5zZW50KCkscC5zZW5kKGJ0b2EoSlNPTi5zdHJpbmdpZnkoby5sb2NhbERlc2NyaXB0aW9uKSkpLFszLDVdO2Nhc2UgNDpyZXR1cm4gaT1uLnNlbnQoKSxjb25zb2xlLmVycm9yKGkpLFszLDVdO2Nhc2UgNTpyZXR1cm5bMl19fSkpfSkpfSxlP1s0LG8uY3JlYXRlT2ZmZXIoKV06WzIsUHJvbWlzZS5yZXNvbHZlKHtwYzpvLGRjOmF9KV07Y2FzZSAxOmc9Yy5zZW50KCksYy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gYy50cnlzLnB1c2goWzIsNCwsNV0pLFs0LG8uc2V0TG9jYWxEZXNjcmlwdGlvbihnKV07Y2FzZSAzOnJldHVybiBjLnNlbnQoKSxbMyw1XTtjYXNlIDQ6cmV0dXJuIGw9Yy5zZW50KCksWzIsUHJvbWlzZS5yZWplY3QobCldO2Nhc2UgNTpyZXR1cm4gby5vbmljZWNhbmRpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gcih1LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1lLmNhbmRpZGF0ZXx8aSh7cGM6byxkYzphfSksWzJdfSkpfSkpfSxbMixzXX19KSl9KSl9fV0pfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5kbFluQmhZMnM2THk5eWNHTXZkMlZpY0dGamF5OTFibWwyWlhKellXeE5iMlIxYkdWRVpXWnBibWwwYVc5dUlpd2lkMlZpY0dGamF6b3ZMM0p3WXk5M1pXSndZV05yTDJKdmIzUnpkSEpoY0NJc0luZGxZbkJoWTJzNkx5OXljR012TGk5dWIyUmxYMjF2WkhWc1pYTXZaMjl2WjJ4bExYQnliM1J2WW5WbUwyZHZiMmRzWlMxd2NtOTBiMkoxWmk1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXViMlJsWDIxdlpIVnNaWE12UUdsdGNISnZZbUZpYkdVdFpXNW5MMmR5Y0dNdGQyVmlMMlJwYzNRdlozSndZeTEzWldJdFkyeHBaVzUwTG5WdFpDNXFjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdloyVnVMMmR2YjJkc1pTOXljR012YzNSaGRIVnpYM0JpTG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4dUwzTnlZeTluWlc0dmNISnZkRzh2Y25CakwzZGxZbkowWXk5Mk1TOW5jbkJqWDNCaUxtcHpJaXdpZDJWaWNHRmphem92TDNKd1l5OG9kMlZpY0dGamF5a3ZZblZwYkdScGJpOW5iRzlpWVd3dWFuTWlMQ0ozWldKd1lXTnJPaTh2Y25Cakx5NHZjM0pqTDJkbGJpOXdjbTkwYnk5eWNHTXZkakV2WVhWMGFGOXdZaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5emNtTXZaMlZ1TDJkdmIyZHNaUzloY0drdllXNXViM1JoZEdsdmJuTmZjR0l1YW5NaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmMzSmpMMmRsYmk5d2NtOTBieTl5Y0dNdmQyVmljblJqTDNZeEwzTnBaMjVoYkdsdVoxOXdZaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5emNtTXZhVzVrWlhndWRITWlMQ0ozWldKd1lXTnJPaTh2Y25Cakx5NHZjM0pqTDJScFlXd3VkSE1pTENKM1pXSndZV05yT2k4dmNuQmpMeTR2YzNKakwwTnNhV1Z1ZEVOb1lXNXVaV3d1ZEhNaUxDSjNaV0p3WVdOck9pOHZjbkJqTHk0dmJtOWtaVjl0YjJSMWJHVnpMMkoxWm1abGNpOXBibVJsZUM1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXViMlJsWDIxdlpIVnNaWE12WW1GelpUWTBMV3B6TDJsdVpHVjRMbXB6SWl3aWQyVmljR0ZqYXpvdkwzSndZeTh1TDI1dlpHVmZiVzlrZFd4bGN5OXBaV1ZsTnpVMEwybHVaR1Y0TG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4dUwyNXZaR1ZmYlc5a2RXeGxjeTlwYzJGeWNtRjVMMmx1WkdWNExtcHpJaXdpZDJWaWNHRmphem92TDNKd1l5OHVMMjV2WkdWZmJXOWtkV3hsY3k5bmIyOW5iR1V0Y0hKdmRHOWlkV1l2WjI5dloyeGxMM0J5YjNSdlluVm1MMlIxY21GMGFXOXVYM0JpTG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4dUwyNXZaR1ZmYlc5a2RXeGxjeTluYjI5bmJHVXRjSEp2ZEc5aWRXWXZaMjl2WjJ4bEwzQnliM1J2WW5WbUwyRnVlVjl3WWk1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXpjbU12UW1GelpVTm9ZVzV1Wld3dWRITWlMQ0ozWldKd1lXTnJPaTh2Y25Cakx5NHZjM0pqTDBOc2FXVnVkRk4wY21WaGJTNTBjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdlFtRnpaVk4wY21WaGJTNTBjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdloyVnVMMmR2YjJkc1pTOXljR012WTI5a1pWOXdZaTVxY3lJc0luZGxZbkJoWTJzNkx5OXljR012TGk5emNtTXZaMlZ1TDJkdmIyZHNaUzloY0drdmFIUjBjRjl3WWk1cWN5SXNJbmRsWW5CaFkyczZMeTl5Y0dNdkxpOXViMlJsWDIxdlpIVnNaWE12WjI5dloyeGxMWEJ5YjNSdlluVm1MMmR2YjJkc1pTOXdjbTkwYjJKMVppOWtaWE5qY21sd2RHOXlYM0JpTG1weklpd2lkMlZpY0dGamF6b3ZMM0p3WXk4dUwzTnlZeTluWlc0dmNISnZkRzh2Y25CakwzWXhMMkYxZEdoZmNHSmZjMlZ5ZG1salpTNXFjeUlzSW5kbFluQmhZMnM2THk5eWNHTXZMaTl6Y21NdloyVnVMM0J5YjNSdkwzSndZeTkzWldKeWRHTXZkakV2YzJsbmJtRnNhVzVuWDNCaVgzTmxjblpwWTJVdWFuTWlMQ0ozWldKd1lXTnJPaTh2Y25Cakx5NHZjM0pqTDNCbFpYSXVkSE1pWFN3aWJtRnRaWE1pT2xzaWNtOXZkQ0lzSW1aaFkzUnZjbmtpTENKbGVIQnZjblJ6SWl3aWJXOWtkV3hsSWl3aVpHVm1hVzVsSWl3aVlXMWtJaXdpZDJsdVpHOTNJaXdpYVc1emRHRnNiR1ZrVFc5a2RXeGxjeUlzSWw5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4aUxDSnRiMlIxYkdWSlpDSXNJbWtpTENKc0lpd2liVzlrZFd4bGN5SXNJbU5oYkd3aUxDSnRJaXdpWXlJc0ltUWlMQ0p1WVcxbElpd2laMlYwZEdWeUlpd2lieUlzSWs5aWFtVmpkQ0lzSW1SbFptbHVaVkJ5YjNCbGNuUjVJaXdpWlc1MWJXVnlZV0pzWlNJc0ltZGxkQ0lzSW5JaUxDSlRlVzFpYjJ3aUxDSjBiMU4wY21sdVoxUmhaeUlzSW5aaGJIVmxJaXdpZENJc0ltMXZaR1VpTENKZlgyVnpUVzlrZFd4bElpd2libk1pTENKamNtVmhkR1VpTENKclpYa2lMQ0ppYVc1a0lpd2liaUlzSW05aWFtVmpkQ0lzSW5CeWIzQmxjblI1SWl3aWNISnZkRzkwZVhCbElpd2lhR0Z6VDNkdVVISnZjR1Z5ZEhraUxDSndJaXdpY3lJc0lpUnFjMk52YlhBaUxDSnpZMjl3WlNJc0ltWnBibVJKYm5SbGNtNWhiQ0lzSW1FaUxDSmlJaXdpVTNSeWFXNW5JaXdpYkdWdVozUm9JaXdpWlNJc0ltWWlMQ0oySWl3aVFWTlRWVTFGWDBWVE5TSXNJa0ZUVTFWTlJWOU9UMTlPUVZSSlZrVmZUVUZRSWl3aVFWTlRWVTFGWDA1UFgwNUJWRWxXUlY5VFJWUWlMQ0pUU1UxUVRFVmZSbEpQVlU1RVgxQlBURmxHU1V4TUlpd2laR1ZtYVc1bFVISnZjR1Z5ZEdsbGN5SXNJa0Z5Y21GNUlpd2laMlYwUjJ4dlltRnNJaXdpWjJ4dlltRnNJaXdpZEdocGN5SXNJbkJ2YkhsbWFXeHNJaXdpYzNCc2FYUWlMQ0pqYjI1bWFXZDFjbUZpYkdVaUxDSjNjbWwwWVdKc1pTSXNJbU5vWldOclUzUnlhVzVuUVhKbmN5SXNJbFI1Y0dWRmNuSnZjaUlzSWxKbFowVjRjQ0lzSWsxaGRHZ2lMQ0p0WVhnaUxDSnRhVzRpTENKbklpd2lVbUZ1WjJWRmNuSnZjaUlzSWtOUFRWQkpURVZFSWl3aVoyOXZaeUlzSW5ObGJHWWlMQ0pwYzBSbFppSXNJbWx6VTNSeWFXNW5JaXdpYVhOQ2IyOXNaV0Z1SWl3aWFYTk9kVzFpWlhJaUxDSmxlSEJ2Y25SUVlYUm9YeUlzSW1WNFpXTlRZM0pwY0hRaUxDSnphR2xtZENJc0lrTk1UMU5WVWtWZlZVNURUMDFRU1V4RlJGOUVSVVpKVGtWVElpd2lRMHhQVTFWU1JWOUVSVVpKVGtWVElpd2libTlrWlZSNWNHVWlMQ0pHUlVGVVZWSkZVMFZVWDFsRlFWSWlMQ0pFUlVKVlJ5SXNJa3hQUTBGTVJTSXNJbFJTVlZOVVJVUmZVMGxVUlNJc0lsTlVVa2xEVkY5TlQwUkZYME5QVFZCQlZFbENURVVpTENKRVNWTkJURXhQVjE5VVJWTlVYMDlPVEZsZlEwOUVSU0lzSWtWT1FVSk1SVjlEU0ZKUFRVVmZRVkJRWDFOQlJrVmZVME5TU1ZCVVgweFBRVVJKVGtjaUxDSndjbTkyYVdSbElpd2lhWE5KYmsxdlpIVnNaVXh2WVdSbGNsOGlMQ0pGY25KdmNpSXNJbWx6VUhKdmRtbGtaV1JmSWl3aVkyOXVjM1J5ZFdOMFRtRnRaWE53WVdObFh5SXNJbWx0Y0d4cFkybDBUbUZ0WlhOd1lXTmxjMThpTENKemRXSnpkSEpwYm1jaUxDSnNZWE4wU1c1a1pYaFBaaUlzSW1kbGRFOWlhbVZqZEVKNVRtRnRaU0lzSW1kbGRGTmpjbWx3ZEU1dmJtTmxJaXdpWjJWMFUyTnlhWEIwVG05dVkyVmZJaXdpWkc5amRXMWxiblFpTENKamMzQk9iMjVqWlY4aUxDSk9UMDVEUlY5UVFWUlVSVkpPWHlJc0luRjFaWEo1VTJWc1pXTjBiM0lpTENKdWIyNWpaU0lzSW1kbGRFRjBkSEpwWW5WMFpTSXNJblJsYzNRaUxDSldRVXhKUkY5TlQwUlZURVZmVWtWZklpd2ljMlZoY21Ob0lpd2lhWE5KYmtkdmIyZE5iMlIxYkdWTWIyRmtaWEpmSWl3aWJXOWtkV3hsVEc5aFpHVnlVM1JoZEdWZklpd2liVzlrZFd4bFRtRnRaU0lzSW1kbGRFbHVkR1Z5Ym1Gc1h5SXNJbXh2WVdSbFpFMXZaSFZzWlhOZklpd2lUVzlrZFd4bFZIbHdaU0lzSWtWVE5pSXNJa2RQVDBjaUxDSnBjMGx1UlhNMlRXOWtkV3hsVEc5aFpHVnlYeUlzSW5SNWNHVWlMQ0puWlhSRGRYSnlaVzUwVFc5a2RXeGxVR0YwYUNJc0ltUmxZMnhoY21WTVpXZGhZM2xPWVcxbGMzQmhZMlVpTENKa1pXTnNZWEpsVFc5a2RXeGxTV1FpTENKeVpYRjFhWEpsSWl3aWMyVjBWR1Z6ZEU5dWJIa2lMQ0ptYjNKM1lYSmtSR1ZqYkdGeVpTSXNJbWx6UkdWbVFXNWtUbTkwVG5Wc2JDSXNJbWRzYjJKaGJHbDZaU0lzSW1Ga1pFUmxjR1Z1WkdWdVkza2lMQ0pFUlZCRlRrUkZUa05KUlZOZlJVNUJRa3hGUkNJc0ltUmxZblZuVEc5aFpHVnlYeUlzSWtWT1FVSk1SVjlFUlVKVlIxOU1UMEZFUlZJaUxDSnNiMmRVYjBOdmJuTnZiR1ZmSWl3aVkyOXVjMjlzWlNJc0ltVnljbTl5SWl3aWNtVnhkV1Z6ZEdWa0lpd2liRzloWkY4aUxDSnlaWEYxYVhKbFZIbHdaU0lzSW1KaGMyVlFZWFJvSWl3aWJuVnNiRVoxYm1OMGFXOXVJaXdpWVdKemRISmhZM1JOWlhSb2IyUWlMQ0poWkdSVGFXNW5iR1YwYjI1SFpYUjBaWElpTENKcGJuTjBZVzVqWlY4aUxDSm5aWFJKYm5OMFlXNWpaU0lzSW1sdWMzUmhiblJwWVhSbFpGTnBibWRzWlhSdmJuTmZJaXdpVEU5QlJGOU5UMFJWVEVWZlZWTkpUa2RmUlZaQlRDSXNJbE5GUVV4ZlRVOUVWVXhGWDBWWVVFOVNWRk1pTENKVVVrRk9VMUJKVEVVaUxDSkJVMU5WVFVWZlJWTmZUVTlFVlV4RlUxOVVVa0ZPVTFCSlRFVkVJaXdpVkZKQlRsTlFTVXhGWDFSUFgweEJUa2RWUVVkRklpd2lWRkpCVGxOUVNVeEZVaUlzSW1oaGMwSmhaRXhsZEZOamIzQnBibWNpTENKMWMyVlRZV1poY21reE1GZHZjbXRoY205MWJtUWlMQ0psZG1Gc0lpd2lkMjl5YTJGeWIzVnVaRk5oWm1GeWFURXdSWFpoYkVKMVp5SXNJbXh2WVdSTmIyUjFiR1VpTENKcGMwWjFibU4wYVc5dUlpd2liRzloWkUxdlpIVnNaVVp5YjIxVGIzVnlZMlZmSWl3aWMyVmhiQ0lzSW01dmNtMWhiR2w2WlZCaGRHaGZJaXdpYzNCc2FXTmxJaXdpYW05cGJpSXNJbXh2WVdSR2FXeGxVM2x1WTE4aUxDSkRURTlUVlZKRlgweFBRVVJmUmtsTVJWOVRXVTVESWl3aVdFMU1TSFIwY0ZKbGNYVmxjM1FpTENKdmNHVnVJaXdpYzJWdVpDSXNJbk4wWVhSMWN5SXNJbkpsYzNCdmJuTmxWR1Y0ZENJc0luUnlZVzV6Y0dsc1pWOGlMQ0owY21GdWMzQnBiR1VpTENJa1ozZDBSWGh3YjNKMElpd2lTbE5QVGlJc0luTjBjbWx1WjJsbWVTSXNJblI1Y0dWUFppSXNJblJ2VTNSeWFXNW5JaXdpY0hKdmNHVnlkSGxKYzBWdWRXMWxjbUZpYkdVaUxDSnBjMDUxYkd3aUxDSnBjMEZ5Y21GNUlpd2lhWE5CY25KaGVVeHBhMlVpTENKcGMwUmhkR1ZNYVd0bElpd2lhWE5QWW1wbFkzUWlMQ0puWlhSR2RXeHNXV1ZoY2lJc0ltZGxkRlZwWkNJc0lsVkpSRjlRVWs5UVJWSlVXVjhpTENKMWFXUkRiM1Z1ZEdWeVh5SXNJbWhoYzFWcFpDSXNJbkpsYlc5MlpWVnBaQ0lzSW5KbGJXOTJaVUYwZEhKcFluVjBaU0lzSW5KaGJtUnZiU0lzSW1kbGRFaGhjMmhEYjJSbElpd2ljbVZ0YjNabFNHRnphRU52WkdVaUxDSmpiRzl1WlU5aWFtVmpkQ0lzSW1Oc2IyNWxJaXdpWW1sdVpFNWhkR2wyWlY4aUxDSmhjSEJzZVNJc0ltRnlaM1Z0Wlc1MGN5SXNJbUpwYm1SS2MxOGlMQ0p6YkdsalpTSXNJblZ1YzJocFpuUWlMQ0pHZFc1amRHbHZiaUlzSW1sdVpHVjRUMllpTENKd1lYSjBhV0ZzSWl3aWNIVnphQ0lzSW0xcGVHbHVJaXdpYm05M0lpd2lSR0YwWlNJc0ltZHNiMkpoYkVWMllXd2lMQ0psZG1Gc1YyOXlhM05HYjNKSGJHOWlZV3h6WHlJc0lsOWxkbUZzVkdWemRGOGlMQ0pqY21WaGRHVkZiR1Z0Wlc1MElpd2laR1ZtWlhJaUxDSmhjSEJsYm1SRGFHbHNaQ0lzSW1OeVpXRjBaVlJsZUhST2IyUmxJaXdpYUdWaFpDSXNJbkpsYlc5MlpVTm9hV3hrSWl3aVoyVjBRM056VG1GdFpTSXNJbU5vWVhKQmRDSXNJbU56YzA1aGJXVk5ZWEJ3YVc1blh5SXNJbU56YzA1aGJXVk5ZWEJ3YVc1blUzUjViR1ZmSWl3aVEweFBVMVZTUlY5RFUxTmZUa0ZOUlY5TlFWQmZSazRpTENKelpYUkRjM05PWVcxbFRXRndjR2x1WnlJc0lrTk1UMU5WVWtWZlExTlRYMDVCVFVWZlRVRlFVRWxPUnlJc0ltZGxkRTF6WnlJc0ltaDBiV3dpTENKeVpYQnNZV05sSWl3aVoyVjBUWE5uVjJsMGFFWmhiR3hpWVdOcklpd2laWGh3YjNKMFUzbHRZbTlzSWl3aVpYaHdiM0owVUhKdmNHVnlkSGtpTENKcGJtaGxjbWwwY3lJc0luTjFjR1Z5UTJ4aGMzTmZJaXdpWTI5dWMzUnlkV04wYjNJaUxDSmlZWE5sSWl3aVkyRnNiR1ZsSWl3aVkyRnNiR1Z5SWl3aVoyVjBVSEp2ZEc5MGVYQmxUMllpTENKa1pXWnBibVZEYkdGemN5SXNJbk4wWVhScFkzTWlMQ0pqY21WaGRHVlRaV0ZzYVc1blEyOXVjM1J5ZFdOMGIzSmZJaXdpWVhCd2JIbFFjbTl3WlhKMGFXVnpYeUlzSWxORlFVeGZRMHhCVTFOZlNVNVRWRUZPUTBWVElpd2lhWE5WYm5ObFlXeGhZbXhsWHlJc0lsVk9VMFZCVEVGQ1RFVmZRMDlPVTFSU1ZVTlVUMUpmVUZKUFVFVlNWRmxmSWl3aVQwSktSVU5VWDFCU1QxUlBWRmxRUlY5R1NVVk1SRk5mSWl3aWRHRm5WVzV6WldGc1lXSnNaVU5zWVhOeklpd2lhVzVJZEcxc1JHOWpkVzFsYm5SZklpd2lhWE5FYjJOMWJXVnVkRXh2WVdScGJtZGZJaXdpWVhSMFlXTm9SWFpsYm5RaUxDSnlaV0ZrZVZOMFlYUmxJaXdpWm1sdVpFSmhjMlZRWVhSb1h5SXNJa05NVDFOVlVrVmZRa0ZUUlY5UVFWUklJaXdpWTNWeWNtVnVkRk5qY21sd2RDSXNJbWRsZEVWc1pXMWxiblJ6UW5sVVlXZE9ZVzFsSWl3aWMzSmpJaXdpYzNWaWMzUnlJaXdpVkhKaGJuTndhV3hsY2lJc0luSmxjWFZwY21WelZISmhibk53YVd4aGRHbHZibDhpTENKMGNtRnVjM0JwYkdGMGFXOXVWR0Z5WjJWMFh5SXNJbU55WldGMFpWSmxjWFZwY21WelZISmhibk53YVd4aGRHbHZibDhpTENKb0lpd2laWE16SWl3aWJtRjJhV2RoZEc5eUlpd2lkWE5sY2tGblpXNTBJaXdpYldGMFkyZ2lMQ0owWVhKblpYUWlMQ0p0WVhBaUxDSnVaV1ZrYzFSeVlXNXpjR2xzWlNJc0luUnlZVzV6Y0dsc1pYSmZJaXdpY0hKdmRHVmpkRk5qY21sd2RGUmhaMThpTENKRVpXSjFaMHh2WVdSbGNsOGlMQ0prWlhCbGJtUmxibU5wWlhOZklpd2lhV1JVYjFCaGRHaGZJaXdpZDNKcGRIUmxibDhpTENKc2IyRmthVzVuUkdWd2MxOGlMQ0prWlhCelZHOU1iMkZrWHlJc0luQmhkWE5sWkY4aUxDSm1ZV04wYjNKNVh5SXNJa1JsY0dWdVpHVnVZM2xHWVdOMGIzSjVJaXdpWkdWbVpYSnlaV1JEWVd4c1ltRmphM05mSWl3aVpHVm1aWEp5WldSUmRXVjFaVjhpTENKaWIyOTBjM1J5WVhBaUxDSnpaWFJVYVcxbGIzVjBJaXdpWjJWMFVHRjBhRVp5YjIxRVpYQnpYeUlzSW05dVRHOWhaQ0lzSW14dllXUkRiRzl6ZFhKbFJHVndjeUlzSW1OeVpXRjBaVVJsY0dWdVpHVnVZM2tpTENKc2IyRmtSR1Z3YzE4aUxDSmhjbVZFWlhCelRHOWhaR1ZrWHlJc0luSmxjWFZwY21Weklpd2ljMlYwUkdWd1pXNWtaVzVqZVVaaFkzUnZjbmtpTENKamIyNWpZWFFpTENKc2IyRmthVzVuWHlJc0luQmhkWE5sSWl3aWNtVnpkVzFsSWl3aWNtVnpkVzFsWHlJc0lteHZZV1JsWkNJc0lteHZZV1JsWkY4aUxDSndaVzVrYVc1bklpd2ljMlYwVFc5a2RXeGxVM1JoZEdVaUxDSnlaV2RwYzNSbGNrVnpOazF2WkhWc1pVVjRjRzl5ZEhNaUxDSnlaV2RwYzNSbGNrZHZiMmROYjJSMWJHVkZlSEJ2Y25Seklpd2lZMnhsWVhKTmIyUjFiR1ZUZEdGMFpTSXNJbVJsWm1WeVh5SXNJbUZ5WlVSbGNITk1iMkZrWldRaUxDSnNiMkZrSWl3aWNHRjFjMlZmSWl3aWNHRjBhQ0lzSWt4dllXUkRiMjUwY205c2JHVnlJaXdpUkdWd1pXNWtaVzVqZVNJc0luSmxiR0YwYVhabFVHRjBhQ0lzSW5CeWIzWnBaR1Z6SWl3aWJHOWhaRVpzWVdkeklpd2liRzloWkVOaGJHeGlZV05yYzE4aUxDSm5aWFJRWVhSb1RtRnRaU0lzSW1OaGJHeGlZV05yVFdGd1h5SXNJbkpsWjJsemRHVnlRMkZzYkdKaFkydGZJaXdpZFc1eVpXZHBjM1JsY2tOaGJHeGlZV05yWHlJc0ltTmhiR3hpWVdOclh5SXNJa05NVDFOVlVrVmZTVTFRVDFKVVgxTkRVa2xRVkNJc0lrbFRYMDlNUkY5SlJWOGlMQ0ozY21sMFpTSXNJbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHlJc0ltTnlaV0YwWlVoVVRVd2lMQ0poYzNsdVl5SXNJbk5sZEVGMGRISnBZblYwWlNJc0ltOXVjbVZoWkhsemRHRjBaV05vWVc1blpTSXNJbTl1Ykc5aFpDSXNJbU55WldGMFpWTmpjbWx3ZEZWU1RDSXNJa1Z6TmsxdlpIVnNaVVJsY0dWdVpHVnVZM2tpTENKMFpYaDBRMjl1ZEdWdWRDSXNJbU55WldGMFpWTmpjbWx3ZENJc0ltc2lMQ0pVY21GdWMyWnZjbTFsWkVSbGNHVnVaR1Z1WTNraUxDSmpiMjUwWlc1MGMxOGlMQ0pzWVhwNVJtVjBZMmhmSWl3aWRISmhibk5tYjNKdElpd2laVzV6ZFhKbElpd2lWSEpoYm5Od2FXeGxaRVJsY0dWdVpHVnVZM2tpTENKMGNtRnVjM0JwYkdWeUlpd2lVSEpsVkhKaGJuTndhV3hsWkVWek5rMXZaSFZzWlVSbGNHVnVaR1Z1WTNraUxDSkhiMjluVFc5a2RXeGxSR1Z3Wlc1a1pXNWplU0lzSW01bFpXUnpWSEpoYm5Od2FXeGxYeUlzSW1GMGIySWlMQ0poYkd3aUxDSnNZVzVuSWl3aVEweFBVMVZTUlY5T1QxOUVSVkJUSWl3aVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZUa0ZOUlNJc0ltbGtaVzUwYVhSNVh5SXNJbU55WldGMFpWUnlkWE4wWldSVWVYQmxjMUJ2YkdsamVTSXNJbFJ5ZFhOMFpXUlVlWEJsY3lJc0ltTnlaV0YwWlZCdmJHbGplU0lzSW1OeVpXRjBaVlZTVENJc0ltMWxjM05oWjJVaUxDSnBjeUlzSW1admNrVmhZMmdpTENKbWFXeDBaWElpTENKemIyMWxJaXdpWlhabGNua2lMQ0puWlhSRGIzVnVkQ0lzSW1kbGRFRnVlVXRsZVNJc0ltZGxkRUZ1ZVZaaGJIVmxJaXdpWTI5dWRHRnBibk1pTENKamIyNTBZV2x1YzFaaGJIVmxJaXdpWjJWMFZtRnNkV1Z6SWl3aVoyVjBTMlY1Y3lJc0ltZGxkRlpoYkhWbFFubExaWGx6SWl3aVkyOXVkR0ZwYm5OTFpYa2lMQ0ptYVc1a1MyVjVJaXdpWm1sdVpGWmhiSFZsSWl3aWFYTkZiWEIwZVNJc0ltTnNaV0Z5SWl3aWNtVnRiM1psSWl3aVlXUmtJaXdpYzJWMElpd2ljMlYwU1daVmJtUmxabWx1WldRaUxDSnpaWFJYYVhSb1VtVjBkWEp1Vm1Gc2RXVkpaazV2ZEZObGRDSXNJbVZ4ZFdGc2N5SXNJblZ1YzJGbVpVTnNiMjVsSWl3aWRISmhibk53YjNObElpd2lVRkpQVkU5VVdWQkZYMFpKUlV4RVUxOGlMQ0psZUhSbGJtUWlMQ0pqY21WaGRHVlRaWFFpTENKamNtVmhkR1ZKYlcxMWRHRmliR1ZXYVdWM0lpd2lhWE5HY205NlpXNGlMQ0ptY21WbGVtVWlMQ0pwYzBsdGJYVjBZV0pzWlZacFpYY2lMQ0puWlhSQmJHeFFjbTl3WlhKMGVVNWhiV1Z6SWl3aVoyVjBUM2R1VUhKdmNHVnlkSGxPWVcxbGN5SXNJbWRsZEZOMWNHVnlRMnhoYzNNaUxDSmtaV0oxWnlJc0ltTmhjSFIxY21WVGRHRmphMVJ5WVdObElpd2ljM1JoWTJzaUxDSnlaWEJ2Y25SRmNuSnZjbFJ2VTJWeWRtVnlJaXdpWkc5dElpd2lUbTlrWlZSNWNHVWlMQ0pGVEVWTlJVNVVJaXdpUVZSVVVrbENWVlJGSWl3aVZFVllWQ0lzSWtORVFWUkJYMU5GUTFSSlQwNGlMQ0pGVGxSSlZGbGZVa1ZHUlZKRlRrTkZJaXdpUlU1VVNWUlpJaXdpVUZKUFEwVlRVMGxPUjE5SlRsTlVVbFZEVkVsUFRpSXNJa05QVFUxRlRsUWlMQ0pFVDBOVlRVVk9WQ0lzSWtSUFExVk5SVTVVWDFSWlVFVWlMQ0pFVDBOVlRVVk9WRjlHVWtGSFRVVk9WQ0lzSWs1UFZFRlVTVTlPSWl3aVlYTnpaWEowY3lJc0lrVk9RVUpNUlY5QlUxTkZVbFJUSWl3aVFYTnpaWEowYVc5dVJYSnliM0lpTENKemRXSnpYeUlzSW0xbGMzTmhaMlZRWVhSMFpYSnVJaXdpUkVWR1FWVk1WRjlGVWxKUFVsOUlRVTVFVEVWU0lpd2laWEp5YjNKSVlXNWtiR1Z5WHlJc0ltUnZRWE56WlhKMFJtRnBiSFZ5WlY4aUxDSnpaWFJGY25KdmNraGhibVJzWlhJaUxDSmhjM05sY25RaUxDSmhjM05sY25SRmVHbHpkSE1pTENKbVlXbHNJaXdpWVhOelpYSjBUblZ0WW1WeUlpd2lZWE56WlhKMFUzUnlhVzVuSWl3aVlYTnpaWEowUm5WdVkzUnBiMjRpTENKaGMzTmxjblJQWW1wbFkzUWlMQ0poYzNObGNuUkJjbkpoZVNJc0ltRnpjMlZ5ZEVKdmIyeGxZVzRpTENKaGMzTmxjblJGYkdWdFpXNTBJaXdpWVhOelpYSjBTVzV6ZEdGdVkyVnZaaUlzSW1kbGRGUjVjR1ZmSWl3aVlYTnpaWEowUm1sdWFYUmxJaXdpYVhOR2FXNXBkR1VpTENKaGMzTmxjblJQWW1wbFkzUlFjbTkwYjNSNWNHVkpjMGx1ZEdGamRDSXNJbVJwYzNCc1lYbE9ZVzFsSWl3aWFuTndZaUlzSWtKcGJtRnllVU52Ym5OMFlXNTBjeUlzSWtOdmJuTjBRbWx1WVhKNVRXVnpjMkZuWlNJc0lrSnBibUZ5ZVUxbGMzTmhaMlVpTENKR2FXVnNaRlI1Y0dVaUxDSkpUbFpCVEVsRUlpd2lSRTlWUWt4Rklpd2lSa3hQUVZRaUxDSkpUbFEyTkNJc0lsVkpUbFEyTkNJc0lrbE9WRE15SWl3aVJrbFlSVVEyTkNJc0lrWkpXRVZFTXpJaUxDSkNUMDlNSWl3aVUxUlNTVTVISWl3aVIxSlBWVkFpTENKTlJWTlRRVWRGSWl3aVFsbFVSVk1pTENKVlNVNVVNeklpTENKRlRsVk5JaXdpVTBaSldFVkVNeklpTENKVFJrbFlSVVEyTkNJc0lsTkpUbFF6TWlJc0lsTkpUbFEyTkNJc0lrWklRVk5JTmpRaUxDSldTRUZUU0RZMElpd2lWMmx5WlZSNWNHVWlMQ0pXUVZKSlRsUWlMQ0pFUlV4SlRVbFVSVVFpTENKVFZFRlNWRjlIVWs5VlVDSXNJa1ZPUkY5SFVrOVZVQ0lzSWtacFpXeGtWSGx3WlZSdlYybHlaVlI1Y0dVaUxDSkpUbFpCVEVsRVgwWkpSVXhFWDA1VlRVSkZVaUlzSWtaTVQwRlVNekpmUlZCVElpd2lSa3hQUVZRek1sOU5TVTRpTENKR1RFOUJWRE15WDAxQldDSXNJa1pNVDBGVU5qUmZSVkJUSWl3aVJreFBRVlEyTkY5TlNVNGlMQ0pHVEU5QlZEWTBYMDFCV0NJc0lsUlhUMTlVVDE4eU1DSXNJbFJYVDE5VVQxOHlNeUlzSWxSWFQxOVVUMTh6TVNJc0lsUlhUMTlVVDE4ek1pSXNJbFJYVDE5VVQxODFNaUlzSWxSWFQxOVVUMTgyTXlJc0lsUlhUMTlVVDE4Mk5DSXNJbHBGVWs5ZlNFRlRTQ0lzSW1GeWNtRjVJaXdpVGtGVVNWWkZYMEZTVWtGWlgxQlNUMVJQVkZsUVJWTWlMQ0pCVTFOVlRVVmZUa0ZVU1ZaRlgwWlZUa05VU1U5T1V5SXNJbkJsWldzaUxDSnNZWE4wSWl3aVptOXlSV0ZqYUZKcFoyaDBJaXdpY21Wa2RXTmxJaXdpY21Wa2RXTmxVbWxuYUhRaUxDSmpiM1Z1ZENJc0ltWnBibVFpTENKbWFXNWtTVzVrWlhnaUxDSm1hVzVrVW1sbmFIUWlMQ0ptYVc1a1NXNWtaWGhTYVdkb2RDSXNJbWx1YzJWeWRDSXNJbWx1YzJWeWRFRjBJaXdpYVc1elpYSjBRWEp5WVhsQmRDSXNJbWx1YzJWeWRFSmxabTl5WlNJc0luSmxiVzkyWlVGMElpd2ljbVZ0YjNabFRHRnpkQ0lzSW5KbGJXOTJaVWxtSWl3aWNtVnRiM1psUVd4c1NXWWlMQ0owYjBGeWNtRjVJaXdpY21WdGIzWmxSSFZ3YkdsallYUmxjeUlzSW1KcGJtRnllVk5sWVhKamFDSXNJbUpwYm1GeWVWTmxZWEpqYUY4aUxDSmtaV1poZFd4MFEyOXRjR0Z5WlNJc0ltSnBibUZ5ZVZObGJHVmpkQ0lzSW5OdmNuUWlMQ0p6ZEdGaWJHVlRiM0owSWl3aWFXNWtaWGdpTENKemIzSjBRbmxMWlhraUxDSnpiM0owVDJKcVpXTjBjMEo1UzJWNUlpd2lhWE5UYjNKMFpXUWlMQ0prWldaaGRXeDBRMjl0Y0dGeVpVVnhkV0ZzYVhSNUlpd2lZMjl0Y0dGeVpUTWlMQ0pwYm5abGNuTmxSR1ZtWVhWc2RFTnZiWEJoY21VaUxDSmlhVzVoY25sSmJuTmxjblFpTENKaWFXNWhjbmxTWlcxdmRtVWlMQ0ppZFdOclpYUWlMQ0owYjA5aWFtVmpkQ0lzSW5KaGJtZGxJaXdpY21Wd1pXRjBJaXdpWm14aGRIUmxiaUlzSW5KdmRHRjBaU0lzSW0xdmRtVkpkR1Z0SWl3aWVtbHdJaXdpYzJoMVptWnNaU0lzSW1ac2IyOXlJaXdpWTI5d2VVSjVTVzVrWlhnaUxDSmpiMjVqWVhSTllYQWlMQ0pqY25sd2RDSXNJbk4wY21sdVoxUnZRbmwwWlVGeWNtRjVJaXdpWTJoaGNrTnZaR1ZCZENJc0ltSjVkR1ZCY25KaGVWUnZVM1J5YVc1bklpd2labkp2YlVOb1lYSkRiMlJsSWl3aVlubDBaVUZ5Y21GNVZHOUlaWGdpTENKb1pYaFViMEo1ZEdWQmNuSmhlU0lzSW5CaGNuTmxTVzUwSWl3aWMzUnlhVzVuVkc5VmRHWTRRbmwwWlVGeWNtRjVJaXdpZFhSbU9FSjVkR1ZCY25KaGVWUnZVM1J5YVc1bklpd2llRzl5UW5sMFpVRnljbUY1SWl3aVlYTnpaWEowU1hOTWIyTmhkR2x2YmlJc0ltZGxkRmRwYm1SdmQxOGlMQ0pNYjJOaGRHbHZiaUlzSWtWc1pXMWxiblFpTENKa1pXSjFaMU4wY21sdVowWnZjbFI1Y0dWZklpd2lZWE56WlhKMFNYTkZiR1Z0Wlc1MFZIbHdaVjhpTENKaGMzTmxjblJKYzBoVVRVeEJibU5vYjNKRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENJc0ltRnpjMlZ5ZEVselNGUk5URXhwYm10RmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1TVzFoWjJWRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1RWFZrYVc5RmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1WbWxrWlc5RmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1TVzV3ZFhSRmJHVnRaVzUwSWl3aVlYTnpaWEowU1hOSVZFMU1WR1Y0ZEVGeVpXRkZiR1Z0Wlc1MElpd2lZWE56WlhKMFNYTklWRTFNUTJGdWRtRnpSV3hsYldWdWRDSXNJbUZ6YzJWeWRFbHpTRlJOVEVWdFltVmtSV3hsYldWdWRDSXNJbUZ6YzJWeWRFbHpTRlJOVEVadmNtMUZiR1Z0Wlc1MElpd2lZWE56WlhKMFNYTklWRTFNUm5KaGJXVkZiR1Z0Wlc1MElpd2lZWE56WlhKMFNYTklWRTFNU1VaeVlXMWxSV3hsYldWdWRDSXNJbUZ6YzJWeWRFbHpTRlJOVEU5aWFtVmpkRVZzWlcxbGJuUWlMQ0poYzNObGNuUkpjMGhVVFV4VFkzSnBjSFJGYkdWdFpXNTBJaXdpYjNkdVpYSkViMk4xYldWdWRDSXNJbVJsWm1GMWJIUldhV1YzSWl3aWNHRnlaVzUwVjJsdVpHOTNJaXdpWm5WdVkzUnBiMjV6SWl3aVkyOXVjM1JoYm5RaUxDSkdRVXhUUlNJc0lsUlNWVVVpTENKT1ZVeE1JaXdpYVdSbGJuUnBkSGtpTENKc2IyTnJJaXdpYm5Sb0lpd2ljR0Z5ZEdsaGJGSnBaMmgwSWl3aWQybDBhRkpsZEhWeWJsWmhiSFZsSWl3aWMyVnhkV1Z1WTJVaUxDSmxjWFZoYkZSdklpd2lZMjl0Y0c5elpTSXNJbUZ1WkNJc0ltOXlJaXdpYm05MElpd2lRMEZEU0VWZlVrVlVWVkpPWDFaQlRGVkZJaXdpWTJGamFHVlNaWFIxY201V1lXeDFaU0lzSW05dVkyVWlMQ0prWldKdmRXNWpaU0lzSW1Oc1pXRnlWR2x0Wlc5MWRDSXNJblJvY205MGRHeGxJaXdpY21GMFpVeHBiV2wwSWl3aVNIUnRiRVZzWlcxbGJuUWlMQ0pVWVdkT1lXMWxJaXdpZEdGblRtRnRaVjhpTENKQklpd2lRVUpDVWlJc0lrRkRVazlPV1UwaUxDSkJSRVJTUlZOVElpd2lRVkJRVEVWVUlpd2lRVkpGUVNJc0lrRlNWRWxEVEVVaUxDSkJVMGxFUlNJc0lrRlZSRWxQSWl3aVFpSXNJa0pCVTBVaUxDSkNRVk5GUms5T1ZDSXNJa0pFU1NJc0lrSkVUeUlzSWtKSlJ5SXNJa0pNVDBOTFVWVlBWRVVpTENKQ1QwUlpJaXdpUWxJaUxDSkNWVlJVVDA0aUxDSkRRVTVXUVZNaUxDSkRRVkJVU1U5T0lpd2lRMFZPVkVWU0lpd2lRMGxVUlNJc0lrTlBSRVVpTENKRFQwd2lMQ0pEVDB4SFVrOVZVQ0lzSWtOUFRVMUJUa1FpTENKRVFWUkJJaXdpUkVGVVFVeEpVMVFpTENKRVJDSXNJa1JGVENJc0lrUkZWRUZKVEZNaUxDSkVSazRpTENKRVNVRk1UMGNpTENKRVNWSWlMQ0pFU1ZZaUxDSkVUQ0lzSWtSVUlpd2lSVTBpTENKRlRVSkZSQ0lzSWtaSlJVeEVVMFZVSWl3aVJrbEhRMEZRVkVsUFRpSXNJa1pKUjFWU1JTSXNJa1pQVGxRaUxDSkdUMDlVUlZJaUxDSkdUMUpOSWl3aVJsSkJUVVVpTENKR1VrRk5SVk5GVkNJc0lrZ3hJaXdpU0RJaUxDSklNeUlzSWtnMElpd2lTRFVpTENKSU5pSXNJa2hGUVVRaUxDSklSVUZFUlZJaUxDSklSMUpQVlZBaUxDSklVaUlzSWtoVVRVd2lMQ0pKSWl3aVNVWlNRVTFGSWl3aVNVMUhJaXdpU1U1UVZWUWlMQ0pKVGxNaUxDSkpVMGxPUkVWWUlpd2lTMEpFSWl3aVMwVlpSMFZPSWl3aVRFRkNSVXdpTENKTVJVZEZUa1FpTENKTVNTSXNJa3hKVGtzaUxDSk5RVWxPSWl3aVRVRlFJaXdpVFVGU1N5SXNJazFCVkVnaUxDSk5SVTVWSWl3aVRVVk9WVWxVUlUwaUxDSk5SVlJCSWl3aVRVVlVSVklpTENKT1FWWWlMQ0pPVDBaU1FVMUZVeUlzSWs1UFUwTlNTVkJVSWl3aVQwSktSVU5VSWl3aVQwd2lMQ0pQVUZSSFVrOVZVQ0lzSWs5UVZFbFBUaUlzSWs5VlZGQlZWQ0lzSWxBaUxDSlFRVkpCVFNJc0lsQkpRMVJWVWtVaUxDSlFVa1VpTENKUVVrOUhVa1ZUVXlJc0lsRWlMQ0pTVUNJc0lsSlVJaXdpVWxSRElpd2lVbFZDV1NJc0lsTWlMQ0pUUVUxUUlpd2lVME5TU1ZCVUlpd2lVMFZEVkVsUFRpSXNJbE5GVEVWRFZDSXNJbE5OUVV4TUlpd2lVMDlWVWtORklpd2lVMUJCVGlJc0lsTlVVa2xMUlNJc0lsTlVVazlPUnlJc0lsTlVXVXhGSWl3aVUxVkNJaXdpVTFWTlRVRlNXU0lzSWxOVlVDSXNJbE5XUnlJc0lsUkJRa3hGSWl3aVZFSlBSRmtpTENKVVJDSXNJbFJGVFZCTVFWUkZJaXdpVkVWWVZFRlNSVUVpTENKVVJrOVBWQ0lzSWxSSUlpd2lWRWhGUVVRaUxDSlVTVTFGSWl3aVZFbFVURVVpTENKVVVpSXNJbFJTUVVOTElpd2lWRlFpTENKVklpd2lWVXdpTENKV1FWSWlMQ0pXU1VSRlR5SXNJbGRDVWlJc0luUmhaM01pTENKV1QwbEVYMVJCUjFOZklpd2lZWEpsWVNJc0ltSnlJaXdpWTI5c0lpd2lZMjl0YldGdVpDSXNJbVZ0WW1Wa0lpd2lhSElpTENKcGJXY2lMQ0pwYm5CMWRDSXNJbXRsZVdkbGJpSXNJbXhwYm1zaUxDSnRaWFJoSWl3aWNHRnlZVzBpTENKemIzVnlZMlVpTENKMGNtRmpheUlzSW5kaWNpSXNJbWx6Vm05cFpGUmhaeUlzSW5SeWRYTjBaV1IwZVhCbGN5SXNJbEJTU1ZaQlZFVmZSRTlmVGs5VVgwRkRRMFZUVTE5UFVsOUZURk5GWDFCUFRFbERXU0lzSW5OMGNtbHVaeUlzSWxSNWNHVmtVM1J5YVc1bklpd2lRMjl1YzNRaUxDSnpkSEpwYm1kRGIyNXpkRlpoYkhWbFYybDBhRk5sWTNWeWFYUjVRMjl1ZEhKaFkzUmZYMmR2YjJkVGRISnBibWRUWldOMWNtbDBlVkJ5YVhaaGRHVmZJaXdpUjA5UFIxOVRWRkpKVGtkZlEwOU9VMVJTVlVOVVQxSmZWRTlMUlU1ZlVGSkpWa0ZVUlY4aUxDSlRWRkpKVGtkZlEwOU9VMVJmVkZsUVJWOU5RVkpMUlZKZlgwZFBUMGRmVTFSU1NVNUhYMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZJaXdpVkZsUVJWOU5RVkpMUlZKZklpd2lhVzF3YkdWdFpXNTBjMGR2YjJkVGRISnBibWRVZVhCbFpGTjBjbWx1WnlJc0ltZGxkRlI1Y0dWa1UzUnlhVzVuVm1Gc2RXVWlMQ0oxYm5keVlYQWlMQ0ptY205dElpd2lSVTFRVkZraUxDSlRZV1psVTJOeWFYQjBJaXdpY0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlZOamNtbHdkRmR5WVhCd1pXUldZV3gxWlY4aUxDSlRRVVpGWDFORFVrbFFWRjlVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY4aUxDSlVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjhpTENKbWNtOXRRMjl1YzNSaGJuUWlMQ0pqY21WaGRHVlRZV1psVTJOeWFYQjBVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVaUxDSm1jbTl0UTI5dWMzUmhiblJCYm1SQmNtZHpJaXdpYzNSeWFXNW5hV1o1WHlJc0ltWnliMjFLYzI5dUlpd2lkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkQ0lzSW1sdWFYUlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlY4aUxDSm1jeUlzSW5WeWJDSXNJbU55WldGMFpVOWlhbVZqZEZWeWJDSXNJbWRsZEZWeWJFOWlhbVZqZEY4aUxDSmpjbVZoZEdWUFltcGxZM1JWVWt3aUxDSnlaWFp2YTJWUFltcGxZM1JWY213aUxDSnlaWFp2YTJWUFltcGxZM1JWVWt3aUxDSm1hVzVrVlhKc1QySnFaV04wWHlJc0lsVlNUQ0lzSW5kbFltdHBkRlZTVENJc0ltSnliM2R6WlhKVGRYQndiM0owYzA5aWFtVmpkRlZ5YkhNaUxDSnBNVGh1SWl3aVltbGthU0lzSWtaUFVrTkZYMUpVVENJc0lrbFRYMUpVVENJc0luUnZURzkzWlhKRFlYTmxJaXdpUm05eWJXRjBJaXdpVEZKRklpd2lVa3hGSWl3aVVFUkdJaXdpVEZKTklpd2lVa3hOSWl3aVJHbHlJaXdpVEZSU0lpd2lVbFJNSWl3aVRrVlZWRkpCVENJc0lsSkpSMGhVSWl3aVRFVkdWQ0lzSWtreE9FNWZVa2xIU0ZRaUxDSkpNVGhPWDB4RlJsUWlMQ0owYjBScGNpSXNJbXgwY2tOb1lYSnpYeUlzSW5KMGJFTm9ZWEp6WHlJc0ltaDBiV3hUYTJsd1VtVm5YeUlzSW5OMGNtbHdTSFJ0YkVsbVRtVmxaR1ZrWHlJc0luSjBiRU5vWVhKU1pXZGZJaXdpYkhSeVEyaGhjbEpsWjE4aUxDSm9ZWE5CYm5sU2RHd2lMQ0pvWVhOU2RHeERhR0Z5SWl3aWFHRnpRVzU1VEhSeUlpd2liSFJ5VW1WZklpd2ljblJzVW1WZklpd2lhWE5TZEd4RGFHRnlJaXdpYVhOTWRISkRhR0Z5SWl3aWFYTk9aWFYwY21Gc1EyaGhjaUlzSW14MGNrUnBja05vWldOclVtVmZJaXdpY25Sc1JHbHlRMmhsWTJ0U1pWOGlMQ0p6ZEdGeWRITlhhWFJvVW5Sc0lpd2lhWE5TZEd4VVpYaDBJaXdpYzNSaGNuUnpWMmwwYUV4MGNpSXNJbWx6VEhSeVZHVjRkQ0lzSW1selVtVnhkV2x5WldSTWRISlNaVjhpTENKcGMwNWxkWFJ5WVd4VVpYaDBJaXdpYkhSeVJYaHBkRVJwY2tOb1pXTnJVbVZmSWl3aWNuUnNSWGhwZEVScGNrTm9aV05yVW1WZklpd2laVzVrYzFkcGRHaE1kSElpTENKcGMweDBja1Y0YVhSVVpYaDBJaXdpWlc1a2MxZHBkR2hTZEd3aUxDSnBjMUowYkVWNGFYUlVaWGgwSWl3aWNuUnNURzlqWVd4bGMxSmxYeUlzSW1selVuUnNUR0Z1WjNWaFoyVWlMQ0ppY21GamEyVjBSM1ZoY21SVVpYaDBVbVZmSWl3aVozVmhjbVJDY21GamEyVjBTVzVVWlhoMElpd2laVzVtYjNKalpWSjBiRWx1U0hSdGJDSXNJbVZ1Wm05eVkyVlNkR3hKYmxSbGVIUWlMQ0psYm1admNtTmxUSFJ5U1c1SWRHMXNJaXdpWlc1bWIzSmpaVXgwY2tsdVZHVjRkQ0lzSW1ScGJXVnVjMmx2Ym5OU1pWOGlMQ0pzWldaMFVtVmZJaXdpY21sbmFIUlNaVjhpTENKMFpXMXdVbVZmSWl3aWJXbHljbTl5UTFOVElpd2laRzkxWW14bFVYVnZkR1ZUZFdKemRHbDBkWFJsVW1WZklpd2ljMmx1WjJ4bFVYVnZkR1ZUZFdKemRHbDBkWFJsVW1WZklpd2libTl5YldGc2FYcGxTR1ZpY21WM1VYVnZkR1VpTENKM2IzSmtVMlZ3WVhKaGRHOXlVbVZmSWl3aWFHRnpUblZ0WlhKaGJITlNaVjhpTENKeWRHeEVaWFJsWTNScGIyNVVhSEpsYzJodmJHUmZJaXdpWlhOMGFXMWhkR1ZFYVhKbFkzUnBiMjRpTENKa1pYUmxZM1JTZEd4RWFYSmxZM1JwYjI1aGJHbDBlU0lzSW5ObGRFVnNaVzFsYm5SRWFYSkJibVJCYkdsbmJpSXNJbk4wZVd4bElpd2lkR1Y0ZEVGc2FXZHVJaXdpWkdseUlpd2ljMlYwUld4bGJXVnVkRVJwY2tKNVZHVjRkRVJwY21WamRHbHZibUZzYVhSNUlpd2lSR2x5WldOMGFXOXVZV3hUZEhKcGJtY2lMQ0pVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXdpTENKd2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhYY21Gd2NHVmtWbUZzZFdWZklpd2lkSEoxYzNSbFpGVlNURjhpTENKVVVsVlRWRVZFWDFKRlUwOVZVa05GWDFWU1RGOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjhpTENKcGJYQnNaVzFsYm5SelIyOXZaMGt4T0c1Q2FXUnBSR2x5WldOMGFXOXVZV3hUZEhKcGJtY2lMQ0puWlhSRWFYSmxZM1JwYjI0aUxDSmpiRzl1WlZkcGRHaFFZWEpoYlhNaUxDSlZVa3hmVUVGU1FVMWZVRUZTVTBWU1h5SXNJbVY0WldNaUxDSmpjbVZoZEdWVWNuVnpkR1ZrVW1WemIzVnlZMlZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU0lzSW5OMGNtbHVaMmxtZVZCaGNtRnRjMThpTENKMWJuZHlZWEJVY25WemRHVmtVMk55YVhCMFZWSk1JaXdpZFc1M2NtRndWSEoxYzNSbFpGVlNUQ0lzSW1admNtMWhkQ0lzSWtKQlUwVmZWVkpNWHlJc0lrWlBVazFCVkY5TlFWSkxSVkpmSWl3aVpXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MElpd2labTl5YldGMFYybDBhRkJoY21GdGN5SXNJbVp5YjIxRGIyNXpkR0Z1ZEhNaUxDSnBiblJsY201aGJDSXNJbk4wWVhKMGMxZHBkR2dpTENKbGJtUnpWMmwwYUNJc0ltTmhjMlZKYm5ObGJuTnBkR2wyWlZOMFlYSjBjMWRwZEdnaUxDSmpZWE5sU1c1elpXNXphWFJwZG1WRGIyMXdZWEpsSWl3aVkyRnpaVWx1YzJWdWMybDBhWFpsUlc1a2MxZHBkR2dpTENKallYTmxTVzV6Wlc1emFYUnBkbVZGY1hWaGJITWlMQ0pwYzBWdGNIUjVUM0pYYUdsMFpYTndZV05sSWl3aWRISnBiU0lzSW01bGQweHBibVZVYjBKeUlpd2lhSFJ0YkVWelkyRndaU0lzSWtGTlVGOVNSVjhpTENKTVZGOVNSVjhpTENKSFZGOVNSVjhpTENKUlZVOVVYMUpGWHlJc0lsTkpUa2RNUlY5UlZVOVVSVjlTUlY4aUxDSk9WVXhNWDFKRlh5SXNJa0ZNVEY5U1JWOGlMQ0ozYUdsMFpYTndZV05sUlhOallYQmxJaXdpWTJGelpVbHVjMlZ1YzJsMGFYWmxRMjl1ZEdGcGJuTWlMQ0pqYjIxd1lYSmxWbVZ5YzJsdmJuTWlMQ0pqYjIxd1lYSmxSV3hsYldWdWRITmZJaXdpVTJGbVpWVnliQ0lzSW5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmSWl3aVUwRkdSVjlWVWt4ZlZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZJaXdpU1U1T1QwTlZUMVZUWDFOVVVrbE9SeUlzSW1OeVpXRjBaVk5oWm1WVmNteFRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNJc0lsTkJSa1ZmVFVsTlJWOVVXVkJGWDFCQlZGUkZVazVmSWl3aWFYTlRZV1psVFdsdFpWUjVjR1VpTENKbWNtOXRRbXh2WWlJc0lrUkJWRUZmVlZKTVgxQkJWRlJGVWs1Zklpd2labkp2YlVSaGRHRlZjbXdpTENKbWNtOXRWR1ZzVlhKc0lpd2lVMGxRWDFWU1RGOVFRVlJVUlZKT1h5SXNJbVp5YjIxVGFYQlZjbXdpTENKa1pXTnZaR1ZWVWtsRGIyMXdiMjVsYm5RaUxDSm1jbTl0Um1GalpXSnZiMnROWlhOelpXNW5aWEpWY213aUxDSm1jbTl0VjJoaGRITkJjSEJWY213aUxDSm1jbTl0VTIxelZYSnNJaXdpYVhOVGJYTlZjbXhDYjJSNVZtRnNhV1JmSWl3aVpuSnZiVk56YUZWeWJDSXNJbk5oYm1sMGFYcGxRMmh5YjIxbFJYaDBaVzV6YVc5dVZYSnNJaXdpYzJGdWFYUnBlbVZGZUhSbGJuTnBiMjVWY214Zklpd2ljMkZ1YVhScGVtVkdhWEpsWm05NFJYaDBaVzV6YVc5dVZYSnNJaXdpYzJGdWFYUnBlbVZGWkdkbFJYaDBaVzV6YVc5dVZYSnNJaXdpWm5KdmJWUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDSXNJbE5CUmtWZlZWSk1YMUJCVkZSRlVrNWZJaXdpVTBGR1JWOVZVa3hmVUVGVVZFVlNUaUlzSW5OaGJtbDBhWHBsSWl3aWMyRnVhWFJwZW1WQmMzTmxjblJWYm1Ob1lXNW5aV1FpTENKQlFrOVZWRjlDVEVGT1N5SXNJbE5oWm1WVGRIbHNaU0lzSW5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVGRIbHNaVmR5WVhCd1pXUldZV3gxWlY4aUxDSlRRVVpGWDFOVVdVeEZYMVJaVUVWZlRVRlNTMFZTWDBkUFQwZGZTRlJOVEY5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHlJc0ltTnlaV0YwWlZOaFptVlRkSGxzWlZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxJaXdpYzJGdWFYUnBlbVZRY205d1pYSjBlVlpoYkhWbFh5SXNJbk5oYm1sMGFYcGxVSEp2Y0dWeWRIbFdZV3gxWlZOMGNtbHVaMThpTENKR1ZVNURWRWxQVGxOZlVrVmZJaXdpVlZKTVgxSkZYeUlzSWxaQlRGVkZYMUpGWHlJc0lrTlBUVTFGVGxSZlVrVmZJaXdpYUdGelFtRnNZVzVqWldSUmRXOTBaWE5mSWl3aWFHRnpRbUZzWVc1alpXUlRjWFZoY21WQ2NtRmphMlYwYzE4aUxDSnpZVzVwZEdsNlpWVnliRjhpTENKV1FVeFZSVjlCVEV4UFYwVkVYME5JUVZKVFh5SXNJbE5oWm1WVGRIbHNaVk5vWldWMElpd2ljSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFUyaGxaWFJYY21Gd2NHVmtWbUZzZFdWZklpd2lVMEZHUlY5VFZGbE1SVjlUU0VWRlZGOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjhpTENKamNtVmhkR1ZTZFd4bElpd2lhR0Z6UW1Gc1lXNWpaV1JDY21GamEyVjBjMThpTENKamNtVmhkR1ZUWVdabFUzUjViR1ZUYUdWbGRGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sSWl3aWNHOXdJaXdpYkdGaWN5SXNJblYwYVd3aUxDSm5aWFJPWVhScGRtVlZjMlZ5UVdkbGJuUlRkSEpwYm1kZklpd2laMlYwVG1GMmFXZGhkRzl5WHlJc0luVnpaWEpCWjJWdWRGOGlMQ0p6WlhSVmMyVnlRV2RsYm5RaUxDSm5aWFJWYzJWeVFXZGxiblFpTENKdFlYUmphRlZ6WlhKQloyVnVkQ0lzSW0xaGRHTm9WWE5sY2tGblpXNTBTV2R1YjNKbFEyRnpaU0lzSW1WNGRISmhZM1JXWlhKemFXOXVWSFZ3YkdWeklpd2lZbkp2ZDNObGNpSXNJbTFoZEdOb1QzQmxjbUZmSWl3aWJXRjBZMmhKUlY4aUxDSnRZWFJqYUVWa1oyVklkRzFzWHlJc0ltMWhkR05vUldSblpVTm9jbTl0YVhWdFh5SXNJbTFoZEdOb1QzQmxjbUZEYUhKdmJXbDFiVjhpTENKdFlYUmphRVpwY21WbWIzaGZJaXdpYldGMFkyaFRZV1poY21sZklpd2liV0YwWTJoRGFISnZiV1ZmSWl3aWJXRjBZMmhEYjJGemRGOGlMQ0pwYzFOcGJHc2lMQ0p0WVhSamFFbHZjMWRsWW5acFpYZGZJaXdpYldGMFkyaEJibVJ5YjJsa1FuSnZkM05sY2w4aUxDSnBjME5vY205dFpTSXNJbWx6Um1seVpXWnZlQ0lzSW1selQzQmxjbUVpTENKcGMwbEZJaXdpYVhORlpHZGxJaXdpYVhORlpHZGxRMmh5YjIxcGRXMGlMQ0pwYzA5d1pYSmhRMmh5YjIxcGRXMGlMQ0pwYzFOaFptRnlhU0lzSW1selEyOWhjM1FpTENKcGMwbHZjMWRsWW5acFpYY2lMQ0pwYzBGdVpISnZhV1JDY205M2MyVnlJaXdpWjJWMFZtVnljMmx2YmlJc0ltZGxkRWxGVm1WeWMybHZibDhpTENKcGMxWmxjbk5wYjI1UGNraHBaMmhsY2lJc0lsTmhabVZJZEcxc0lpd2ljSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVWgwYld4WGNtRndjR1ZrVm1Gc2RXVmZJaXdpVTBGR1JWOUlWRTFNWDFSWlVFVmZUVUZTUzBWU1gwZFBUMGRmU0ZSTlRGOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh5SXNJbVJwY2w4aUxDSjFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDSXNJbU55WldGMFpWTmhabVZJZEcxc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVpTENKb2RHMXNSWE5qWVhCbFVISmxjMlZ5ZG1sdVowNWxkMnhwYm1Weklpd2lhSFJ0YkVWelkyRndaVkJ5WlhObGNuWnBibWRPWlhkc2FXNWxjMEZ1WkZOd1lXTmxjeUlzSWxaQlRFbEVYMDVCVFVWVFgwbE9YMVJCUjE4aUxDSlZVa3hmUVZSVVVrbENWVlJGVTE4aUxDSmhZM1JwYjI0aUxDSmphWFJsSWl3aVpHRjBZU0lzSW1admNtMWhZM1JwYjI0aUxDSm9jbVZtSWl3aWJXRnVhV1psYzNRaUxDSndiM04wWlhJaUxDSk9UMVJmUVV4TVQxZEZSRjlVUVVkZlRrRk5SVk5mSWl3aWRtVnlhV1o1VkdGblRtRnRaU0lzSW1OeVpXRjBaVk5oWm1WSWRHMXNWR0ZuVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVWlMQ0owYjFWd2NHVnlRMkZ6WlNJc0ltTnlaV0YwWlVsbWNtRnRaU0lzSW5OeVkyUnZZeUlzSW1OdmJXSnBibVZCZEhSeWFXSjFkR1Z6SWl3aWMyRnVaR0p2ZUNJc0ltTnlaV0YwWlZOaGJtUmliM2hKWm5KaGJXVWlMQ0pqWVc1VmMyVlRZVzVrWW05NFNXWnlZVzFsSWl3aVNGUk5URWxHY21GdFpVVnNaVzFsYm5RaUxDSmpjbVZoZEdWVFkzSnBjSFJUY21NaUxDSmpjbVZoZEdWVGRIbHNaU0lzSW1OeVpXRjBaVTFsZEdGU1pXWnlaWE5vSWl3aVkyOXVkR1Z1ZENJc0ltZGxkRUYwZEhKT1lXMWxRVzVrVm1Gc2RXVmZJaXdpWjJWMFUzUjViR1ZXWVd4MVpWOGlMQ0pqY21WaGRHVlhhWFJvUkdseUlpd2lZMjl1WTJGMFYybDBhRVJwY2lJc0luTjBjbWx1WjJsbWVVRjBkSEpwWW5WMFpYTWlMQ0pFVDBOVVdWQkZYMGhVVFV3aUxDSjFibU5vWldOclpXUmpiMjUyWlhKemFXOXVjeUlzSW5OaFptVklkRzFzUm5KdmJWTjBjbWx1WjB0dWIzZHVWRzlUWVhScGMyWjVWSGx3WlVOdmJuUnlZV04wSWl3aWMyRm1aVk5qY21sd2RFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamRDSXNJbk5oWm1WVGRIbHNaVVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkQ0lzSW5OaFptVlRkSGxzWlZOb1pXVjBSbkp2YlZOMGNtbHVaMHR1YjNkdVZHOVRZWFJwYzJaNVZIbHdaVU52Ym5SeVlXTjBJaXdpYzJGbVpWVnliRVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkQ0lzSW5SeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkVaeWIyMVRkSEpwYm1kTGJtOTNibFJ2VTJGMGFYTm1lVlI1Y0dWRGIyNTBjbUZqZENJc0luTmhabVVpTENKSmJuTmxjblJCWkdwaFkyVnVkRWgwYld4UWIzTnBkR2x2YmlJc0lrRkdWRVZTUWtWSFNVNGlMQ0pCUmxSRlVrVk9SQ0lzSWtKRlJrOVNSVUpGUjBsT0lpd2lRa1ZHVDFKRlJVNUVJaXdpYVc1elpYSjBRV1JxWVdObGJuUklkRzFzSWl3aWFXNXpaWEowUVdScVlXTmxiblJJVkUxTUlpd2lVMFZVWDBsT1RrVlNYMGhVVFV4ZlJFbFRRVXhNVDFkRlJGOVVRVWRUWHlJc0ltbHpTVzV1WlhKSWRHMXNRMnhsWVc1MWNGSmxZM1Z5YzJsMlpWOGlMQ0ptYVhKemRFTm9hV3hrSWl3aWFXNXVaWEpJVkUxTUlpd2ljR0Z5Wlc1MFJXeGxiV1Z1ZENJc0luVnVjMkZtWlZObGRFbHVibVZ5U0hSdGJFUnZUbTkwVlhObFQzSkZiSE5sSWl3aWJHRnpkRU5vYVd4a0lpd2ljMlYwU1c1dVpYSklkRzFzSWl3aWRHRm5UbUZ0WlNJc0luTmxkRTkxZEdWeVNIUnRiQ0lzSW05MWRHVnlTRlJOVENJc0luTmxkRVp2Y20xRmJHVnRaVzUwUVdOMGFXOXVJaXdpYzJWMFFuVjBkRzl1Um05eWJVRmpkR2x2YmlJc0ltWnZjbTFCWTNScGIyNGlMQ0p6WlhSSmJuQjFkRVp2Y20xQlkzUnBiMjRpTENKelpYUlRkSGxzWlNJc0ltTnpjMVJsZUhRaUxDSmtiMk4xYldWdWRGZHlhWFJsSWl3aWMyVjBRVzVqYUc5eVNISmxaaUlzSW5ObGRFbHRZV2RsVTNKaklpd2ljMlYwUVhWa2FXOVRjbU1pTENKelpYUldhV1JsYjFOeVl5SXNJbk5sZEVWdFltVmtVM0pqSWl3aWMyVjBSbkpoYldWVGNtTWlMQ0p6WlhSSlpuSmhiV1ZUY21NaUxDSnpaWFJKWm5KaGJXVlRjbU5rYjJNaUxDSnpaWFJNYVc1clNISmxaa0Z1WkZKbGJDSXNJbkpsYkNJc0luTmxkRTlpYW1WamRFUmhkR0VpTENKelpYUlRZM0pwY0hSVGNtTWlMQ0p6WlhSVFkzSnBjSFJEYjI1MFpXNTBJaXdpZEdWNGRDSXNJbk5sZEV4dlkyRjBhVzl1U0hKbFppSXNJbUZ6YzJsbmJreHZZMkYwYVc5dUlpd2lZWE56YVdkdUlpd2ljbVZ3YkdGalpVeHZZMkYwYVc5dUlpd2liM0JsYmtsdVYybHVaRzkzSWl3aWNHRnljMlZHY205dFUzUnlhVzVuU0hSdGJDSXNJbkJoY25ObFJuSnZiVk4wY21sdVp5SXNJbU55WldGMFpVbHRZV2RsUm5KdmJVSnNiMklpTENKSmJXRm5aU0lzSWtSRlZFVkRWRjlFVDFWQ1RFVmZSVk5EUVZCSlRrY2lMQ0pHVDFKRFJWOU9UMDVmUkU5TlgwaFVUVXhmVlU1RlUwTkJVRWxPUnlJc0lsVnVhV052WkdVaUxDSk9RbE5RSWl3aWMzVmljeUlzSW1OdmJHeGhjSE5sVjJocGRHVnpjR0ZqWlNJc0ltbHpSVzF3ZEhsVGRISnBibWNpTENKcGMwVnRjSFI1VDNKWGFHbDBaWE53WVdObFUyRm1aU0lzSW0xaGEyVlRZV1psSWl3aWFYTkZiWEIwZVZOaFptVWlMQ0pwYzBKeVpXRnJhVzVuVjJocGRHVnpjR0ZqWlNJc0ltbHpRV3h3YUdFaUxDSnBjMDUxYldWeWFXTWlMQ0pwYzBGc2NHaGhUblZ0WlhKcFl5SXNJbWx6VTNCaFkyVWlMQ0pwYzFWdWFXTnZaR1ZEYUdGeUlpd2ljM1J5YVhCT1pYZHNhVzVsY3lJc0ltTmhibTl1YVdOaGJHbDZaVTVsZDJ4cGJtVnpJaXdpYm05eWJXRnNhWHBsVjJocGRHVnpjR0ZqWlNJc0ltNXZjbTFoYkdsNlpWTndZV05sY3lJc0ltTnZiR3hoY0hObFFuSmxZV3RwYm1kVGNHRmpaWE1pTENKMGNtbHRUR1ZtZENJc0luUnlhVzFTYVdkb2RDSXNJbTUxYldKbGNrRjNZWEpsUTI5dGNHRnlaVjhpTENKcGMwNWhUaUlzSW1sdWRFRjNZWEpsUTI5dGNHRnlaU0lzSW1ac2IyRjBRWGRoY21WRGIyMXdZWEpsSWl3aWJuVnRaWEpoZEdWRGIyMXdZWEpsSWl3aWRYSnNSVzVqYjJSbElpd2lkWEpzUkdWamIyUmxJaXdpUlY5U1JWOGlMQ0oxYm1WelkyRndaVVZ1ZEdsMGFXVnpJaXdpZFc1bGMyTmhjR1ZGYm5ScGRHbGxjMVZ6YVc1blJHOXRYeUlzSW5WdVpYTmpZWEJsVUhWeVpWaHRiRVZ1ZEdsMGFXVnpYeUlzSW5WdVpYTmpZWEJsUlc1MGFYUnBaWE5YYVhSb1JHOWpkVzFsYm5RaUxDSklWRTFNWDBWT1ZFbFVXVjlRUVZSVVJWSk9YeUlzSWs1MWJXSmxjaUlzSW01dlpHVldZV3gxWlNJc0luQnlaWE5sY25abFUzQmhZMlZ6SWl3aWMzUnlhWEJSZFc5MFpYTWlMQ0owY25WdVkyRjBaU0lzSW5SeWRXNWpZWFJsVFdsa1pHeGxJaXdpYzNCbFkybGhiRVZ6WTJGd1pVTm9ZWEp6WHlJc0ltcHpSWE5qWVhCbFEyRmphR1ZmSWl3aWNYVnZkR1VpTENKbGMyTmhjR1ZEYUdGeUlpd2laWE5qWVhCbFUzUnlhVzVuSWl3aVkyOTFiblJQWmlJc0luSmxiVzkyWlVGc2JDSXNJbkpsWjBWNGNFVnpZMkZ3WlNJc0luSmxjR3hoWTJWQmJHd2lMQ0p3WVdST2RXMWlaWElpTENKMGIwWnBlR1ZrSWl3aVluVnBiR1JUZEhKcGJtY2lMQ0puWlhSU1lXNWtiMjFUZEhKcGJtY2lMQ0poWW5NaUxDSm9ZWE5vUTI5a1pTSXNJblZ1YVhGMVpWTjBjbWx1WjBOdmRXNTBaWEpmSWl3aVkzSmxZWFJsVlc1cGNYVmxVM1J5YVc1bklpd2lkRzlPZFcxaVpYSWlMQ0pPWVU0aUxDSnBjMHh2ZDJWeVEyRnRaV3hEWVhObElpd2lhWE5WY0hCbGNrTmhiV1ZzUTJGelpTSXNJblJ2UTJGdFpXeERZWE5sSWl3aWRHOVRaV3hsWTNSdmNrTmhjMlVpTENKMGIxUnBkR3hsUTJGelpTSXNJbU5oY0dsMFlXeHBlbVVpTENKemNHeHBkRXhwYldsMElpd2liR0Z6ZEVOdmJYQnZibVZ1ZENJc0ltVmthWFJFYVhOMFlXNWpaU0lzSW1WdVoybHVaU0lzSW1selVISmxjM1J2SWl3aWFYTlVjbWxrWlc1MElpd2lhWE5YWldKTGFYUWlMQ0pwYzBkbFkydHZJaXdpWjJWMFJXNW5hVzVsVkhWd2JHVmZJaXdpWjJWMFZtVnljMmx2YmtadmNrdGxlVjhpTENKd2JHRjBabTl5YlNJc0ltbHpRVzVrY205cFpDSXNJbWx6U1hCdlpDSXNJbWx6U1hCb2IyNWxJaXdpYVhOSmNHRmtJaXdpYVhOSmIzTWlMQ0pwYzAxaFkybHVkRzl6YUNJc0ltbHpUR2x1ZFhnaUxDSnBjMWRwYm1SdmQzTWlMQ0pwYzBOb2NtOXRaVTlUSWl3aWFYTkRhSEp2YldWallYTjBJaXdpYVhOTFlXbFBVeUlzSW1selIyOHlVR2h2Ym1VaUxDSnlaV1pzWldOMElpd2liMkpxWldOMFVISnZjR1Z5ZEhraUxDSnphVzVyVm1Gc2RXVWlMQ0pqWVc1QlkyTmxjM05RY205d1pYSjBlU0lzSW1OaFkyaGxJaXdpUVZOVFZVMUZYMGxGSWl3aVFWTlRWVTFGWDBWRVIwVWlMQ0pCVTFOVlRVVmZSMFZEUzA4aUxDSkJVMU5WVFVWZlYwVkNTMGxVSWl3aVFWTlRWVTFGWDAxUFFrbE1SVjlYUlVKTFNWUWlMQ0pCVTFOVlRVVmZUMUJGVWtFaUxDSkJVMU5WVFVWZlFVNVpYMVpGVWxOSlQwNGlMQ0pDVWs5WFUwVlNYMHRPVDFkT1h5SXNJbWRsZEZWelpYSkJaMlZ1ZEZOMGNtbHVaeUlzSW1kbGRFNWhkbWxuWVhSdmNsUjVjR1ZrSWl3aVoyVjBUbUYyYVdkaGRHOXlJaXdpVDFCRlVrRWlMQ0pKUlNJc0lrVkVSMFVpTENKRlJFZEZYMDlTWDBsRklpd2lSMFZEUzA4aUxDSlhSVUpMU1ZRaUxDSnBjMDF2WW1sc1pWOGlMQ0pOVDBKSlRFVWlMQ0pUUVVaQlVra2lMQ0prWlhSbGNtMXBibVZRYkdGMFptOXliVjhpTENKUVRFRlVSazlTVFNJc0lrRlRVMVZOUlY5TlFVTWlMQ0pCVTFOVlRVVmZWMGxPUkU5WFV5SXNJa0ZUVTFWTlJWOU1TVTVWV0NJc0lrRlRVMVZOUlY5WU1URWlMQ0pCVTFOVlRVVmZRVTVFVWs5SlJDSXNJa0ZUVTFWTlJWOUpVRWhQVGtVaUxDSkJVMU5WVFVWZlNWQkJSQ0lzSWtGVFUxVk5SVjlKVUU5RUlpd2lRVk5UVlUxRlgwdEJTVTlUSWl3aVFWTlRWVTFGWDBkUE1sQklUMDVGSWl3aVVFeEJWRVpQVWsxZlMwNVBWMDVmSWl3aVRVRkRJaXdpVjBsT1JFOVhVeUlzSW1selRHVm5ZV041VEdsdWRYaGZJaXdpVEVsT1ZWZ2lMQ0pwYzFneE1WOGlMQ0poY0hCV1pYSnphVzl1SWl3aVdERXhJaXdpUVU1RVVrOUpSQ0lzSWtsUVNFOU9SU0lzSWtsUVFVUWlMQ0pKVUU5RUlpd2lTVTlUSWl3aVMwRkpUMU1pTENKSFR6SlFTRTlPUlNJc0ltUmxkR1Z5YldsdVpWWmxjbk5wYjI1Zklpd2laMlYwVm1WeWMybHZibEpsWjJWNFVtVnpkV3gwWHlJc0ltZGxkRVJ2WTNWdFpXNTBUVzlrWlY4aUxDSndZWEp6WlVac2IyRjBJaXdpWkc5amRXMWxiblJOYjJSbElpd2lWa1ZTVTBsUFRpSXNJbU52YlhCaGNtVWlMQ0pwYzFabGNuTnBiMjVQY2tocFoyaGxja05oWTJobFh5SXNJbWx6Vm1WeWMybHZiaUlzSW1selJHOWpkVzFsYm5STmIyUmxUM0pJYVdkb1pYSWlMQ0pFVDBOVlRVVk9WRjlOVDBSRklpd2lhWE5FYjJOMWJXVnVkRTF2WkdVaUxDSndjbTlrZFdOMElpd2lRVk5UVlUxRlgwWkpVa1ZHVDFnaUxDSkJVMU5WVFVWZlEwaFNUMDFGSWl3aVFWTlRWVTFGWDFOQlJrRlNTU0lzSWxCU1QwUlZRMVJmUzA1UFYwNWZJaXdpUmtsU1JVWlBXQ0lzSW1selNYQm9iMjVsVDNKSmNHOWtYeUlzSWtOSVVrOU5SU0lzSW1selUyRm1ZWEpwUkdWemEzUnZjRjhpTENKaVlYTmxOalFpTENKRVJVWkJWVXhVWDBGTVVFaEJRa1ZVWDBOUFRVMVBUbDhpTENKRlRrTlBSRVZFWDFaQlRGTWlMQ0pGVGtOUFJFVkVYMVpCVEZOZlYwVkNVMEZHUlNJc0lrRnNjR2hoWW1WMElpd2lSRVZHUVZWTVZDSXNJazVQWDFCQlJFUkpUa2NpTENKWFJVSlRRVVpGSWl3aVYwVkNVMEZHUlY5RVQxUmZVRUZFUkVsT1J5SXNJbGRGUWxOQlJrVmZUazlmVUVGRVJFbE9SeUlzSW5CaFpHUnBibWREYUdGeWMxOGlMQ0pwYzFCaFpHUnBibWRmSWl3aVlubDBaVlJ2UTJoaGNrMWhjSE5mSWl3aVkyaGhjbFJ2UW5sMFpVMWhjRjhpTENKQlUxTlZUVVZmVGtGVVNWWkZYMU5WVUZCUFVsUmZJaXdpU0VGVFgwNUJWRWxXUlY5RlRrTlBSRVZmSWl3aVluUnZZU0lzSWtoQlUxOU9RVlJKVmtWZlJFVkRUMFJGWHlJc0ltVnVZMjlrWlVKNWRHVkJjbkpoZVNJc0ltbHVhWFJmSWl3aVpXNWpiMlJsVTNSeWFXNW5JaXdpWkdWamIyUmxVM1J5YVc1bklpd2laR1ZqYjJSbFUzUnlhVzVuU1c1MFpYSnVZV3hmSWl3aVpHVmpiMlJsVTNSeWFXNW5WRzlDZVhSbFFYSnlZWGtpTENKa1pXTnZaR1ZUZEhKcGJtZFViMVZwYm5RNFFYSnlZWGtpTENKVmFXNTBPRUZ5Y21GNUlpd2ljM1ZpWVhKeVlYa2lMQ0oxZEdsc2N5SXNJbk53YkdsME5qUk1iM2NpTENKemNHeHBkRFkwU0dsbmFDSXNJbk53YkdsMFZXbHVkRFkwSWl3aWMzQnNhWFJKYm5RMk5DSXNJbk53YkdsMFdtbG5lbUZuTmpRaUxDSnpjR3hwZEVac2IyRjBNeklpTENKeWIzVnVaQ0lzSW5CdmR5SXNJbXh2WnlJc0lreE9NaUlzSW5Od2JHbDBSbXh2WVhRMk5DSXNJbk53YkdsMFNHRnphRFkwSWl3aWFtOXBibFZwYm5RMk5DSXNJbXB2YVc1SmJuUTJOQ0lzSW5SdldtbG5lbUZuTmpRaUxDSnFiMmx1V21sbmVtRm5OalFpTENKbWNtOXRXbWxuZW1Gbk5qUWlMQ0pxYjJsdVJteHZZWFF6TWlJc0lrbHVabWx1YVhSNUlpd2lhbTlwYmtac2IyRjBOalFpTENKcWIybHVTR0Z6YURZMElpd2lSRWxIU1ZSVElpd2lXa1ZTVDE5RFNFRlNYME5QUkVWZklpd2lRVjlEU0VGU1gwTlBSRVZmSWl3aWFtOXBibFZ1YzJsbmJtVmtSR1ZqYVcxaGJGTjBjbWx1WnlJc0ltcHZhVzVUYVdkdVpXUkVaV05wYldGc1UzUnlhVzVuSWl3aWFHRnphRFkwVkc5RVpXTnBiV0ZzVTNSeWFXNW5JaXdpYUdGemFEWTBRWEp5WVhsVWIwUmxZMmx0WVd4VGRISnBibWR6SWl3aVpHVmphVzFoYkZOMGNtbHVaMVJ2U0dGemFEWTBJaXdpYzNCc2FYUkVaV05wYldGc1UzUnlhVzVuSWl3aWRHOUlaWGhFYVdkcGRGOGlMQ0ptY205dFNHVjRRMmhoY2tOdlpHVmZJaXdpYUdGemFEWTBWRzlJWlhoVGRISnBibWNpTENKb1pYaFRkSEpwYm1kVWIwaGhjMmcyTkNJc0ltaGhjMmcyTkZSdlRuVnRZbVZ5SWl3aWJuVnRZbVZ5Vkc5SVlYTm9OalFpTENKamIzVnVkRlpoY21sdWRITWlMQ0pqYjNWdWRGWmhjbWx1ZEVacFpXeGtjeUlzSW1OdmRXNTBSbWw0WldSR2FXVnNaSE5mSWl3aVkyOTFiblJHYVhobFpETXlSbWxsYkdSeklpd2lZMjkxYm5SR2FYaGxaRFkwUm1sbGJHUnpJaXdpWTI5MWJuUkVaV3hwYldsMFpXUkdhV1ZzWkhNaUxDSmtaV0oxWjBKNWRHVnpWRzlVWlhoMFJtOXliV0YwSWl3aVlubDBaVk52ZFhKalpWUnZWV2x1ZERoQmNuSmhlU0lzSW1SbFluVm5VMk5oYkdGeVZHOVVaWGgwUm05eWJXRjBJaXdpUVhKeVlYbENkV1ptWlhJaUxDSkNkV1ptWlhJaUxDSkNhVzVoY25sRVpXTnZaR1Z5SWl3aVlubDBaWE5mSWl3aVkzVnljMjl5WHlJc0ltVnVaRjhpTENKemRHRnlkRjhpTENKbGNuSnZjbDhpTENKelpYUkNiRzlqYXlJc0ltbHVjM1JoYm1ObFEyRmphR1ZmSWl3aVlXeHNiMk1pTENKbWNtVmxJaXdpWjJWMFFuVm1abVZ5SWl3aVoyVjBSVzVrSWl3aWMyVjBSVzVrSWl3aWNtVnpaWFFpTENKblpYUkRkWEp6YjNJaUxDSnpaWFJEZFhKemIzSWlMQ0poWkhaaGJtTmxJaXdpWVhSRmJtUWlMQ0p3WVhOMFJXNWtJaXdpWjJWMFJYSnliM0lpTENKeVpXRmtVM0JzYVhSV1lYSnBiblEyTkNJc0luSmxZV1JUY0d4cGRGcHBaM3BoWjFaaGNtbHVkRFkwSWl3aWNtVmhaRk53YkdsMFJtbDRaV1EyTkNJc0luTnJhWEJXWVhKcGJuUWlMQ0oxYm5OcmFYQldZWEpwYm5RaUxDSnlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUXpNaUlzSW5KbFlXUlRhV2R1WldSV1lYSnBiblF6TWlJc0luSmxZV1JWYm5OcFoyNWxaRlpoY21sdWRETXlVM1J5YVc1bklpd2ljbVZoWkZOcFoyNWxaRlpoY21sdWRETXlVM1J5YVc1bklpd2ljbVZoWkZwcFozcGhaMVpoY21sdWRETXlJaXdpY21WaFpGVnVjMmxuYm1Wa1ZtRnlhVzUwTmpRaUxDSnlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUTJORk4wY21sdVp5SXNJbkpsWVdSVGFXZHVaV1JXWVhKcGJuUTJOQ0lzSW5KbFlXUlRhV2R1WldSV1lYSnBiblEyTkZOMGNtbHVaeUlzSW5KbFlXUmFhV2Q2WVdkV1lYSnBiblEyTkNJc0luSmxZV1JhYVdkNllXZFdZWEpwYm5SSVlYTm9OalFpTENKeVpXRmtXbWxuZW1GblZtRnlhVzUwTmpSVGRISnBibWNpTENKeVpXRmtWV2x1ZERnaUxDSnlaV0ZrVldsdWRERTJJaXdpY21WaFpGVnBiblF6TWlJc0luSmxZV1JWYVc1ME5qUWlMQ0p5WldGa1ZXbHVkRFkwVTNSeWFXNW5JaXdpY21WaFpFbHVkRGdpTENKeVpXRmtTVzUwTVRZaUxDSnlaV0ZrU1c1ME16SWlMQ0p5WldGa1NXNTBOalFpTENKeVpXRmtTVzUwTmpSVGRISnBibWNpTENKeVpXRmtSbXh2WVhRaUxDSnlaV0ZrUkc5MVlteGxJaXdpY21WaFpFSnZiMndpTENKeVpXRmtSVzUxYlNJc0luSmxZV1JUZEhKcGJtY2lMQ0p5WldGa1UzUnlhVzVuVjJsMGFFeGxibWQwYUNJc0luSmxZV1JDZVhSbGN5SXNJbkpsWVdSV1lYSnBiblJJWVhOb05qUWlMQ0p5WldGa1JtbDRaV1JJWVhOb05qUWlMQ0pDYVc1aGNubFNaV0ZrWlhJaUxDSmtaV052WkdWeVh5SXNJbVpwWld4a1EzVnljMjl5WHlJc0ltNWxlSFJHYVdWc1pGOGlMQ0p1WlhoMFYybHlaVlI1Y0dWZklpd2ljbVZoWkVOaGJHeGlZV05yYzE4aUxDSm5aWFJHYVdWc1pFTjFjbk52Y2lJc0ltZGxkRVpwWld4a1RuVnRZbVZ5SWl3aVoyVjBWMmx5WlZSNWNHVWlMQ0pwYzBSbGJHbHRhWFJsWkNJc0ltbHpSVzVrUjNKdmRYQWlMQ0p1WlhoMFJtbGxiR1FpTENKMWJuTnJhWEJJWldGa1pYSWlMQ0p6YTJsd1RXRjBZMmhwYm1kR2FXVnNaSE1pTENKemEybHdSbWxsYkdRaUxDSnphMmx3Vm1GeWFXNTBSbWxsYkdRaUxDSnphMmx3UkdWc2FXMXBkR1ZrUm1sbGJHUWlMQ0p6YTJsd1JtbDRaV1F6TWtacFpXeGtJaXdpYzJ0cGNFWnBlR1ZrTmpSR2FXVnNaQ0lzSW5OcmFYQkhjbTkxY0NJc0luSmxaMmx6ZEdWeVVtVmhaRU5oYkd4aVlXTnJJaXdpY25WdVVtVmhaRU5oYkd4aVlXTnJJaXdpY21WaFpFRnVlU0lzSW5KbFlXUkdhWGhsWkRZMElpd2ljbVZoWkVacGVHVmtNeklpTENKeVpXRmtVMlpwZUdWa016SWlMQ0p5WldGa1UyWnBlR1ZrTmpRaUxDSnlaV0ZrVTJsdWRETXlJaXdpY21WaFpGTnBiblEyTkNJc0luSmxZV1JOWlhOellXZGxJaXdpY21WaFpFZHliM1Z3SWl3aVoyVjBSbWxsYkdSRVpXTnZaR1Z5SWl3aWNtVmhaRWx1ZERNeVUzUnlhVzVuSWl3aWNtVmhaRlZwYm5Rek1sTjBjbWx1WnlJc0luSmxZV1JUYVc1ME5qUlRkSEpwYm1jaUxDSnlaV0ZrUm1sNFpXUTJORk4wY21sdVp5SXNJbkpsWVdSVFptbDRaV1F6TWxOMGNtbHVaeUlzSW5KbFlXUlRabWw0WldRMk5GTjBjbWx1WnlJc0luSmxZV1JUYVc1MFNHRnphRFkwSWl3aWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHlJc0luSmxZV1JRWVdOclpXUkpiblF6TWlJc0luSmxZV1JRWVdOclpXUkpiblF6TWxOMGNtbHVaeUlzSW5KbFlXUlFZV05yWldSSmJuUTJOQ0lzSW5KbFlXUlFZV05yWldSSmJuUTJORk4wY21sdVp5SXNJbkpsWVdSUVlXTnJaV1JWYVc1ME16SWlMQ0p5WldGa1VHRmphMlZrVldsdWRETXlVM1J5YVc1bklpd2ljbVZoWkZCaFkydGxaRlZwYm5RMk5DSXNJbkpsWVdSUVlXTnJaV1JWYVc1ME5qUlRkSEpwYm1jaUxDSnlaV0ZrVUdGamEyVmtVMmx1ZERNeUlpd2ljbVZoWkZCaFkydGxaRk5wYm5RMk5DSXNJbkpsWVdSUVlXTnJaV1JUYVc1ME5qUlRkSEpwYm1jaUxDSnlaV0ZrVUdGamEyVmtSbWw0WldRek1pSXNJbkpsWVdSUVlXTnJaV1JHYVhobFpEWTBJaXdpY21WaFpGQmhZMnRsWkVacGVHVmtOalJUZEhKcGJtY2lMQ0p5WldGa1VHRmphMlZrVTJacGVHVmtNeklpTENKeVpXRmtVR0ZqYTJWa1UyWnBlR1ZrTmpRaUxDSnlaV0ZrVUdGamEyVmtVMlpwZUdWa05qUlRkSEpwYm1jaUxDSnlaV0ZrVUdGamEyVmtSbXh2WVhRaUxDSnlaV0ZrVUdGamEyVmtSRzkxWW14bElpd2ljbVZoWkZCaFkydGxaRUp2YjJ3aUxDSnlaV0ZrVUdGamEyVmtSVzUxYlNJc0luSmxZV1JRWVdOclpXUldZWEpwYm5SSVlYTm9OalFpTENKeVpXRmtVR0ZqYTJWa1JtbDRaV1JJWVhOb05qUWlMQ0pDYVc1aGNubEZibU52WkdWeUlpd2lZblZtWm1WeVh5SXNJbVZ1WkNJc0luZHlhWFJsVTNCc2FYUldZWEpwYm5RMk5DSXNJbmR5YVhSbFUzQnNhWFJHYVhobFpEWTBJaXdpZDNKcGRHVlZhVzUwTXpJaUxDSjNjbWwwWlZWdWMybG5ibVZrVm1GeWFXNTBNeklpTENKM2NtbDBaVk5wWjI1bFpGWmhjbWx1ZERNeUlpd2lkM0pwZEdWVmJuTnBaMjVsWkZaaGNtbHVkRFkwSWl3aWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5RMk5DSXNJbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBNeklpTENKM2NtbDBaVnBwWjNwaFoxWmhjbWx1ZERZMElpd2lkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUTJORk4wY21sdVp5SXNJbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBTR0Z6YURZMElpd2lkM0pwZEdWVmFXNTBPQ0lzSW5keWFYUmxWV2x1ZERFMklpd2lkM0pwZEdWVmFXNTBOalFpTENKM2NtbDBaVWx1ZERnaUxDSjNjbWwwWlVsdWRERTJJaXdpZDNKcGRHVkpiblF6TWlJc0luZHlhWFJsU1c1ME5qUWlMQ0ozY21sMFpVbHVkRFkwVTNSeWFXNW5JaXdpZDNKcGRHVkdiRzloZENJc0luZHlhWFJsUkc5MVlteGxJaXdpZDNKcGRHVkNiMjlzSWl3aWQzSnBkR1ZGYm5WdElpd2lkM0pwZEdWQ2VYUmxjeUlzSW5keWFYUmxWbUZ5YVc1MFNHRnphRFkwSWl3aWQzSnBkR1ZHYVhobFpFaGhjMmcyTkNJc0luZHlhWFJsVTNSeWFXNW5JaXdpWVhKcGRHZ2lMQ0pWU1c1ME5qUWlMQ0pzYnlJc0ltaHBJaXdpWTIxd0lpd2ljbWxuYUhSVGFHbG1kQ0lzSW14bFpuUlRhR2xtZENJc0ltMXpZaUlzSW14ellpSXNJbnBsY204aUxDSnpkV0lpTENKdGRXd3pNbmd6TWlJc0ltMTFiQ0lzSW1ScGRpSXNJbVp5YjIxVGRISnBibWNpTENKSmJuUTJOQ0lzSWtKcGJtRnllVmR5YVhSbGNpSXNJbUpzYjJOcmMxOGlMQ0owYjNSaGJFeGxibWQwYUY4aUxDSmxibU52WkdWeVh5SXNJbUp2YjJ0dFlYSnJjMThpTENKaGNIQmxibVJWYVc1ME9FRnljbUY1WHlJc0ltSmxaMmx1UkdWc2FXMXBkR1ZrWHlJc0luZHlhWFJsUm1sbGJHUklaV0ZrWlhKZklpd2laVzVrUkdWc2FXMXBkR1ZrWHlJc0luZHlhWFJsVTJWeWFXRnNhWHBsWkUxbGMzTmhaMlVpTENKdFlYbGlaVmR5YVhSbFUyVnlhV0ZzYVhwbFpFMWxjM05oWjJVaUxDSm5aWFJTWlhOMWJIUkNkV1ptWlhJaUxDSm5aWFJTWlhOMWJIUkNZWE5sTmpSVGRISnBibWNpTENKaVpXZHBibE4xWWsxbGMzTmhaMlVpTENKbGJtUlRkV0pOWlhOellXZGxJaXdpZDNKcGRHVkJibmtpTENKM2NtbDBaVVpwZUdWa05qUWlMQ0ozY21sMFpVWnBlR1ZrTXpJaUxDSjNjbWwwWlZObWFYaGxaRE15SWl3aWQzSnBkR1ZUWm1sNFpXUTJOQ0lzSW5keWFYUmxVMmx1ZERNeUlpd2lkM0pwZEdWVGFXNTBOalFpTENKM2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SmZJaXdpZDNKcGRHVlRhV2R1WldSV1lYSnBiblF6TWw4aUxDSjNjbWwwWlZWdWMybG5ibVZrVm1GeWFXNTBOalJmSWl3aWQzSnBkR1ZUYVdkdVpXUldZWEpwYm5RMk5GOGlMQ0ozY21sMFpWcHBaM3BoWjFaaGNtbHVkRE15WHlJc0luZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME5qUmZJaXdpZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblEyTkZOMGNtbHVaMThpTENKM2NtbDBaVnBwWjNwaFoxWmhjbWx1ZEVoaGMyZzJORjhpTENKM2NtbDBaVWx1ZERNeVUzUnlhVzVuSWl3aWQzSnBkR1ZWYVc1ME16SlRkSEpwYm1jaUxDSjNjbWwwWlZWcGJuUTJORk4wY21sdVp5SXNJbmR5YVhSbFUybHVkRWhoYzJnMk5DSXNJbmR5YVhSbFUybHVkRFkwVTNSeWFXNW5JaXdpZDNKcGRHVkdhWGhsWkRZMFUzUnlhVzVuSWl3aWQzSnBkR1ZUWm1sNFpXUTJORk4wY21sdVp5SXNJbmR5YVhSbFRXVnpjMkZuWlNJc0luZHlhWFJsVFdWemMyRm5aVk5sZENJc0luZHlhWFJsUjNKdmRYQWlMQ0ozY21sMFpWTndiR2wwV21sbmVtRm5WbUZ5YVc1ME5qUWlMQ0ozY21sMFpWSmxjR1ZoZEdWa1NXNTBNeklpTENKM2NtbDBaVkpsY0dWaGRHVmtTVzUwTXpKVGRISnBibWNpTENKM2NtbDBaVkpsY0dWaGRHVmtTVzUwTmpRaUxDSjNjbWwwWlZKbGNHVmhkR1ZrVTNCc2FYUkdhWGhsWkRZMElpd2lkM0pwZEdWU1pYQmxZWFJsWkZOd2JHbDBWbUZ5YVc1ME5qUWlMQ0ozY21sMFpWSmxjR1ZoZEdWa1UzQnNhWFJhYVdkNllXZFdZWEpwYm5RMk5DSXNJbmR5YVhSbFVtVndaV0YwWldSSmJuUTJORk4wY21sdVp5SXNJbmR5YVhSbFVtVndaV0YwWldSVmFXNTBNeklpTENKM2NtbDBaVkpsY0dWaGRHVmtWV2x1ZERNeVUzUnlhVzVuSWl3aWQzSnBkR1ZTWlhCbFlYUmxaRlZwYm5RMk5DSXNJbmR5YVhSbFVtVndaV0YwWldSVmFXNTBOalJUZEhKcGJtY2lMQ0ozY21sMFpWSmxjR1ZoZEdWa1UybHVkRE15SWl3aWQzSnBkR1ZTWlhCbFlYUmxaRk5wYm5RMk5DSXNJbmR5YVhSbFVtVndaV0YwWldSVGFXNTBOalJUZEhKcGJtY2lMQ0ozY21sMFpWSmxjR1ZoZEdWa1UybHVkRWhoYzJnMk5DSXNJbmR5YVhSbFVtVndaV0YwWldSR2FYaGxaRE15SWl3aWQzSnBkR1ZTWlhCbFlYUmxaRVpwZUdWa05qUWlMQ0ozY21sMFpWSmxjR1ZoZEdWa1JtbDRaV1EyTkZOMGNtbHVaeUlzSW5keWFYUmxVbVZ3WldGMFpXUlRabWw0WldRek1pSXNJbmR5YVhSbFVtVndaV0YwWldSVFptbDRaV1EyTkNJc0luZHlhWFJsVW1Wd1pXRjBaV1JUWm1sNFpXUTJORk4wY21sdVp5SXNJbmR5YVhSbFVtVndaV0YwWldSR2JHOWhkQ0lzSW5keWFYUmxVbVZ3WldGMFpXUkViM1ZpYkdVaUxDSjNjbWwwWlZKbGNHVmhkR1ZrUW05dmJDSXNJbmR5YVhSbFVtVndaV0YwWldSRmJuVnRJaXdpZDNKcGRHVlNaWEJsWVhSbFpGTjBjbWx1WnlJc0luZHlhWFJsVW1Wd1pXRjBaV1JDZVhSbGN5SXNJbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsSWl3aWQzSnBkR1ZTWlhCbFlYUmxaRWR5YjNWd0lpd2lkM0pwZEdWU1pYQmxZWFJsWkVacGVHVmtTR0Z6YURZMElpd2lkM0pwZEdWU1pYQmxZWFJsWkZaaGNtbHVkRWhoYzJnMk5DSXNJbmR5YVhSbFVHRmphMlZrU1c1ME16SWlMQ0ozY21sMFpWQmhZMnRsWkVsdWRETXlVM1J5YVc1bklpd2lkM0pwZEdWUVlXTnJaV1JKYm5RMk5DSXNJbmR5YVhSbFVHRmphMlZrVTNCc2FYUkdhWGhsWkRZMElpd2lkM0pwZEdWUVlXTnJaV1JUY0d4cGRGWmhjbWx1ZERZMElpd2lkM0pwZEdWUVlXTnJaV1JUY0d4cGRGcHBaM3BoWjFaaGNtbHVkRFkwSWl3aWQzSnBkR1ZRWVdOclpXUkpiblEyTkZOMGNtbHVaeUlzSW5keWFYUmxVR0ZqYTJWa1ZXbHVkRE15SWl3aWQzSnBkR1ZRWVdOclpXUlZhVzUwTXpKVGRISnBibWNpTENKM2NtbDBaVkJoWTJ0bFpGVnBiblEyTkNJc0luZHlhWFJsVUdGamEyVmtWV2x1ZERZMFUzUnlhVzVuSWl3aWQzSnBkR1ZRWVdOclpXUlRhVzUwTXpJaUxDSjNjbWwwWlZCaFkydGxaRk5wYm5RMk5DSXNJbmR5YVhSbFVHRmphMlZrVTJsdWREWTBVM1J5YVc1bklpd2lkM0pwZEdWUVlXTnJaV1JUYVc1MFNHRnphRFkwSWl3aWQzSnBkR1ZRWVdOclpXUkdhWGhsWkRNeUlpd2lkM0pwZEdWUVlXTnJaV1JHYVhobFpEWTBJaXdpZDNKcGRHVlFZV05yWldSR2FYaGxaRFkwVTNSeWFXNW5JaXdpZDNKcGRHVlFZV05yWldSVFptbDRaV1F6TWlJc0luZHlhWFJsVUdGamEyVmtVMlpwZUdWa05qUWlMQ0ozY21sMFpWQmhZMnRsWkZObWFYaGxaRFkwVTNSeWFXNW5JaXdpZDNKcGRHVlFZV05yWldSR2JHOWhkQ0lzSW5keWFYUmxVR0ZqYTJWa1JHOTFZbXhsSWl3aWQzSnBkR1ZRWVdOclpXUkNiMjlzSWl3aWQzSnBkR1ZRWVdOclpXUkZiblZ0SWl3aWQzSnBkR1ZRWVdOclpXUkdhWGhsWkVoaGMyZzJOQ0lzSW5keWFYUmxVR0ZqYTJWa1ZtRnlhVzUwU0dGemFEWTBJaXdpVFdGd0lpd2lZWEp5WHlJc0luWmhiSFZsUTNSdmNsOGlMQ0p0WVhCZklpd2lZWEp5UTJ4bFlXNGlMQ0pzYjJGa1JuSnZiVUZ5Y21GNVh5SXNJa1Z1ZEhKNVh5SXNJblpoYkhWbFYzSmhjSEJsY2lJc0luTjBjbWx1WjB0bGVYTmZJaXdpZDNKaGNFVnVkSEo1WHlJc0ltWnliMjFQWW1wbFkzUWlMQ0pCY25KaGVVbDBaWEpoZEc5eVNYUmxjbUZpYkdWZklpd2lhV1I0WHlJc0ltNWxlSFFpTENKa2IyNWxJaXdpYVhSbGNtRjBiM0lpTENKblpYUk1aVzVuZEdnaUxDSmtaV3dpTENKblpYUkZiblJ5ZVV4cGMzUWlMQ0psYm5SeWFXVnpJaXdpYTJWNWN5SXNJblpoYkhWbGN5SXNJbWhoY3lJc0luTmxjbWxoYkdsNlpVSnBibUZ5ZVNJc0ltUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlpd2lSWGgwWlc1emFXOXVSbWxsYkdSSmJtWnZJaXdpWm1sbGJHUkpibVJsZUNJc0ltWnBaV3hrVG1GdFpTSXNJbU4wYjNJaUxDSjBiMDlpYW1WamRFWnVJaXdpYVhOU1pYQmxZWFJsWkNJc0lrVjRkR1Z1YzJsdmJrWnBaV3hrUW1sdVlYSjVTVzVtYnlJc0ltWnBaV3hrU1c1bWJ5SXNJbUpwYm1GeWVWSmxZV1JsY2tadUlpd2lZbWx1WVhKNVYzSnBkR1Z5Um00aUxDSmlhVzVoY25sTlpYTnpZV2RsVTJWeWFXRnNhWHBsUm00aUxDSmlhVzVoY25sTlpYTnpZV2RsUkdWelpYSnBZV3hwZW1WR2JpSXNJbWx6VUdGamEyVmtJaXdpYVhOTlpYTnpZV2RsVkhsd1pTSXNJazFsYzNOaFoyVWlMQ0pIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFpTENKSFJVNUZVa0ZVUlY5R1VrOU5YMDlDU2tWRFZDSXNJa2RGVGtWU1FWUkZYMVJQWDFOVVVrbE9SeUlzSWtGVFUxVk5SVjlNVDBOQlRGOUJVbEpCV1ZNaUxDSlRSVkpKUVV4SldrVmZSVTFRVkZsZlZGSkJTVXhKVGtkZlJrbEZURVJUSWl3aVUxVlFVRTlTVkZOZlZVbE9WRGhCVWxKQldWOGlMQ0puWlhSS2MxQmlUV1Z6YzJGblpVbGtJaXdpYldWemMyRm5aVWxrWHlJc0ltZGxkRWx1WkdWNFh5SXNJbUZ5Y21GNVNXNWtaWGhQWm1aelpYUmZJaXdpYUdsa1pHVnVSVk0yVUhKdmNHVnlkSGxmSWl3aVoyVjBSbWxsYkdST2RXMWlaWEpmSWl3aWFXNXBkR2xoYkdsNlpTSXNJbmR5WVhCd1pYSnpYeUlzSW1sdWFYUlFhWFp2ZEVGdVpFVjRkR1Z1YzJsdmJrOWlhbVZqZEY4aUxDSmpiMjUyWlhKMFpXUlFjbWx0YVhScGRtVkdhV1ZzWkhOZklpd2ljbVZ3WldGMFpXUkdhV1ZzWkhNaUxDSndhWFp2ZEY4aUxDSkZUVkJVV1Y5TVNWTlVYMU5GVGxSSlRrVk1YeUlzSW0xaGVXSmxTVzVwZEVWdGNIUjVSWGgwWlc1emFXOXVUMkpxWldOMFh5SXNJbVY0ZEdWdWMybHZiazlpYW1WamRGOGlMQ0pqYjIxd2RYUmxUMjVsYjJaRFlYTmxJaXdpYVhOQmNuSmhlVjhpTENKcGMwVjRkR1Z1YzJsdmJrOWlhbVZqZEY4aUxDSk5RVmhmVmtGTVZVVWlMQ0owYjA5aWFtVmpkRXhwYzNRaUxDSjBiMDlpYW1WamRFVjRkR1Z1YzJsdmJpSXNJbk5sY21saGJHbDZaVUpwYm1GeWVVVjRkR1Z1YzJsdmJuTWlMQ0p5WldGa1FtbHVZWEo1UlhoMFpXNXphVzl1SWl3aVoyVjBSbWxsYkdRaUxDSm5aWFJTWlhCbFlYUmxaRVpwWld4a0lpd2laMlYwVDNCMGFXOXVZV3hHYkc5aGRHbHVaMUJ2YVc1MFJtbGxiR1FpTENKblpYUkNiMjlzWldGdVJtbGxiR1FpTENKblpYUlNaWEJsWVhSbFpFWnNiMkYwYVc1blVHOXBiblJHYVdWc1pDSXNJbWRsZEZKbGNHVmhkR1ZrUW05dmJHVmhia1pwWld4a0lpd2lZbmwwWlhOQmMwSTJOQ0lzSW1KNWRHVnpRWE5WT0NJc0ltSjVkR1Z6VEdsemRFRnpRalkwSWl3aVlYTnpaWEowUTI5dWMybHpkR1Z1ZEZSNWNHVnpYeUlzSW1KNWRHVnpUR2x6ZEVGelZUZ2lMQ0puWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwSWl3aVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRaUxDSm5aWFJHYkc5aGRHbHVaMUJ2YVc1MFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENJc0ltZGxkRVpwWld4a1VISnZkRzh6SWl3aVoyVjBUV0Z3Um1sbGJHUWlMQ0p6WlhSR2FXVnNaQ0lzSW5ObGRGQnliM1J2TTBsdWRFWnBaV3hrSWl3aWMyVjBSbWxsYkdSSloyNXZjbWx1WjBSbFptRjFiSFJmSWl3aWMyVjBVSEp2ZEc4elJteHZZWFJHYVdWc1pDSXNJbk5sZEZCeWIzUnZNMEp2YjJ4bFlXNUdhV1ZzWkNJc0luTmxkRkJ5YjNSdk0xTjBjbWx1WjBacFpXeGtJaXdpYzJWMFVISnZkRzh6UW5sMFpYTkdhV1ZzWkNJc0luTmxkRkJ5YjNSdk0wVnVkVzFHYVdWc1pDSXNJbk5sZEZCeWIzUnZNMU4wY21sdVowbHVkRVpwWld4a0lpd2lZV1JrVkc5U1pYQmxZWFJsWkVacFpXeGtJaXdpYzJWMFQyNWxiMlpHYVdWc1pDSXNJbWRsZEZkeVlYQndaWEpHYVdWc1pDSXNJbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0lpd2lkM0poY0ZKbGNHVmhkR1ZrUm1sbGJHUmZJaXdpYzJWMFYzSmhjSEJsY2tacFpXeGtJaXdpYzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRaUxDSnpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNJc0ltRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRaUxDSjBiMDFoY0NJc0luTjVibU5OWVhCR2FXVnNaSE5mSWl3aVoyVjBSWGgwWlc1emFXOXVJaXdpYzJWMFJYaDBaVzV6YVc5dUlpd2laR2xtWm1WeVpXNWpaU0lzSW1OdmJYQmhjbVZHYVdWc1pITWlMQ0pqYjIxd1lYSmxSWGgwWlc1emFXOXVjeUlzSW1Oc2IyNWxUV1Z6YzJGblpTSXNJbU5zYjI1bFh5SXNJbU52Y0hsSmJuUnZJaXdpY21WbmFYTjBaWEpOWlhOellXZGxWSGx3WlNJc0ltMWxjM05oWjJWSlpDSXNJbTFsYzNOaFoyVlRaWFJGZUhSbGJuTnBiMjV6SWl3aWJXVnpjMkZuWlZObGRFVjRkR1Z1YzJsdmJuTkNhVzVoY25raUxDSkZlSEJ2Y25RaUxDSmtaV1poZFd4MElpd2lUV1YwWVdSaGRHRWlMQ0pDY205M2MyVnlTR1ZoWkdWeWN5SXNJblVpTENKamJHbGxiblFpTENKemRHRnlkR1ZrSWl3aWMyVnVkRVpwY25OMFRXVnpjMkZuWlNJc0ltTnZiWEJzWlhSbFpDSXNJbU5zYjNObFpDSXNJbVpwYm1semFHVmtVMlZ1WkdsdVp5SXNJbTl1U0dWaFpHVnljME5oYkd4aVlXTnJjeUlzSW05dVRXVnpjMkZuWlVOaGJHeGlZV05yY3lJc0ltOXVSVzVrUTJGc2JHSmhZMnR6SWl3aWNHRnljMlZ5SWl3aVEyaDFibXRRWVhKelpYSWlMQ0p0WlhSb2IyUkVaV1pwYm1sMGFXOXVJaXdpY0hKdmNITWlMQ0pqY21WaGRHVlVjbUZ1YzNCdmNuUWlMQ0pvYjNOMElpd2ljMlZ5ZG1salpTSXNJbk5sY25acFkyVk9ZVzFsSWl3aWJXVjBhRzlrVG1GdFpTSXNJbTl1U0dWaFpHVnljeUlzSW05dVZISmhibk53YjNKMFNHVmhaR1Z5Y3lJc0ltOXVRMmgxYm1zaUxDSnZibFJ5WVc1emNHOXlkRU5vZFc1cklpd2liMjVGYm1RaUxDSnZibFJ5WVc1emNHOXlkRVZ1WkNJc0luUnlZVzV6Y0c5eWRDSXNJbTFoYTJWRVpXWmhkV3gwVkhKaGJuTndiM0owSWl3aWNtVnpjRzl1YzJWSVpXRmtaWEp6SWl3aWFIUjBjRk4wWVhSMWMxUnZRMjlrWlNJc0luSmhkMDl1U0dWaFpHVnljeUlzSWtOdlpHVWlMQ0pQU3lJc0ltUmxZMjlrWlVkU1VFTlRkR0YwZFhNaUxDSnlZWGRQYmtWeWNtOXlJaXdpY0dGeWMyVWlMQ0pKYm5SbGNtNWhiQ0lzSW1Ob2RXNXJWSGx3WlNJc0lrTm9kVzVyVkhsd1pTSXNJbkpsYzNCdmJuTmxWSGx3WlNJc0luSmhkMDl1VFdWemMyRm5aU0lzSWxSU1FVbE1SVkpUSWl3aWNtVnpjRzl1YzJWVWNtRnBiR1Z5Y3lJc0luUnlZV2xzWlhKeklpd2ljbUYzVDI1RmJtUWlMQ0pWYm10dWIzZHVJaXdpYjI1TlpYTnpZV2RsSWl3aWMzUmhjblFpTENKeVpYRjFaWE4wVTNSeVpXRnRJaXdpWm5KaGJXVlNaWEYxWlhOMElpd2ljMlZ1WkUxbGMzTmhaMlVpTENKbWFXNXBjMmhUWlc1a0lpd2lZMnh2YzJVaUxDSmpZVzVqWld3aUxDSnpjR3hwZEZaaGJIVmxjeUlzSW1obFlXUmxjbk5OWVhBaUxDSklaV0ZrWlhKeklpd2laMlYwU0dWaFpHVnlTMlY1Y3lJc0ltZGxkRWhsWVdSbGNsWmhiSFZsY3lJc0ltRndjR1Z1WkNJc0luTndiR2wwU0dWaFpHVnlWbUZzZFdVaUxDSmhjSEJsYm1SR2NtOXRVM1J5YVc1bklpd2laR1ZzWlhSbElpd2libTl5YldGc2FYcGxUbUZ0WlNJc0ltNXZjbTFoYkdsNlpWWmhiSFZsSWl3aWRHOUlaV0ZrWlhKeklpd2lhWFJsY21GMFpVaGxZV1JsY25NaUxDSnBkR1Z5WVhSbFNHVmhaR1Z5YzB0bGVYTWlMQ0puWlhSQmJHd2lMQ0pEY205emMwSnliM2R6WlhKSWRIUndWSEpoYm5Od2IzSjBJaXdpZDJsMGFFTnlaV1JsYm5ScFlXeHpJaXdpYzJWMFJHVm1ZWFZzZEZSeVlXNXpjRzl5ZEVaaFkzUnZjbmtpTENKa1pYUmxZM1JHWlhSamFGTjFjSEJ2Y25RaUxDSmpjbVZrWlc1MGFXRnNjeUlzSWtabGRHTm9VbVZoWkdGaWJHVlRkSEpsWVcxVWNtRnVjM0J2Y25RaUxDSllhSEpVY21GdWMzQnZjblFpTENKZlgyRnpjMmxuYmlJc0ltTmhibU5sYkd4bFpDSXNJbU52Ym5SeWIyeHNaWElpTENKQlltOXlkRU52Ym5SeWIyeHNaWElpTENKdmNIUnBiMjV6SWl3aWFXNXBkQ0lzSW5CMWJYQWlMQ0p5WldGa1pYSWlMQ0p5WldGa0lpd2lkR2hsYmlJc0ltTmhkR05vSWl3aVptVjBZMmdpTENKb1pXRmtaWEp6SWl3aWJXVjBZV1JoZEdFaUxDSnRaWFJvYjJRaUxDSmliMlI1SWl3aWMybG5ibUZzSWl3aVoyVjBVbVZoWkdWeUlpd2lZV0p2Y25RaUxDSlNaWE53YjI1elpTSXNJbDlmWlhoMFpXNWtjeUlzSW5ObGRGQnliM1J2ZEhsd1pVOW1JaXdpWDE5d2NtOTBiMTlmSWl3aVpHVjBaV04wVFc5NldFaFNVM1Z3Y0c5eWRDSXNJbVJsZEdWamRGaElVazkyWlhKeWFXUmxUV2x0WlZSNWNHVlRkWEJ3YjNKMElpd2liMjVRY205bmNtVnpjMFYyWlc1MElpd2llR2h5SWl3aWNtVnpjRzl1YzJVaUxDSnZia3h2WVdSRmRtVnVkQ0lzSW05dVUzUmhkR1ZEYUdGdVoyVWlMQ0pJUlVGRVJWSlRYMUpGUTBWSlZrVkVJaXdpWjJWMFFXeHNVbVZ6Y0c5dWMyVklaV0ZrWlhKeklpd2lZMjl1Wm1sbmRYSmxXR2h5SWl3aWMyVjBVbVZ4ZFdWemRFaGxZV1JsY2lJc0lrSnZiMnhsWVc0aUxDSmhaR1JGZG1WdWRFeHBjM1JsYm1WeUlpd2liM1psY25KcFpHVk5hVzFsVkhsd1pTSXNJbGhJVWlJc0ltTnZaR1ZRYjJsdWRFRjBJaXdpVFc5NlEyaDFibXRsWkVGeWNtRjVRblZtWm1WeVdFaFNJaXdpYzNSeWFXNW5WRzlCY25KaGVVSjFabVpsY2lJc0ltZGxkRlZwYm5RNElpd2laMlYwVldsdWRETXlJaXdpWW5sMFpVeGxibWQwYUNJc0ltUmxZMjlrWlVGVFEwbEpJaXdpWlc1amIyUmxRVk5EU1VraUxDSmlkV1ptWlhJaUxDSndiM05wZEdsdmJpSXNJa1JoZEdGV2FXVjNJaXdpWW5sMFpVOW1abk5sZENJc0lua2lMQ0pEWVc1alpXeGxaQ0lzSWtsdWRtRnNhV1JCY21kMWJXVnVkQ0lzSWtSbFlXUnNhVzVsUlhoalpXVmtaV1FpTENKT2IzUkdiM1Z1WkNJc0lrRnNjbVZoWkhsRmVHbHpkSE1pTENKUVpYSnRhWE56YVc5dVJHVnVhV1ZrSWl3aVVtVnpiM1Z5WTJWRmVHaGhkWE4wWldRaUxDSkdZV2xzWldSUWNtVmpiMjVrYVhScGIyNGlMQ0pCWW05eWRHVmtJaXdpVDNWMFQyWlNZVzVuWlNJc0lsVnVhVzF3YkdWdFpXNTBaV1FpTENKVmJtRjJZV2xzWVdKc1pTSXNJa1JoZEdGTWIzTnpJaXdpVlc1aGRYUm9aVzUwYVdOaGRHVmtJaXdpYzJWMFJHVm1ZWFZzZEZSeVlXNXpjRzl5ZENJc0lsZGxZbk52WTJ0bGRGUnlZVzV6Y0c5eWRDSXNJbWx1ZG05clpTSXNJblZ1WVhKNUlpd2laM0p3WXlJc0luaG9jbE4xY0hCdmNuUnpVbVZ6Y0c5dWMyVlVlWEJsSWl3aVJrbE9TVk5JWDFORlRrUWlMQ0pKYm5RNFFYSnlZWGtpTENKRFQwNU9SVU5VU1U1SElpd2lWMlZpVTI5amEyVjBJaXdpWW1sdVlYSjVWSGx3WlNJc0ltOXViM0JsYmlJc0ltOXVZMnh2YzJVaUxDSnZibVZ5Y205eUlpd2liMjV0WlhOellXZGxJaXdpY21WeGRXVnpkQ0lzSW5ObGRGVnBiblF6TWlJc0luSmxjM0J2Ym5ObFUzUnlaV0Z0SWl3aWMzUmhkSFZ6VFdWemMyRm5aU0lzSW1kdmIyZHNaVjl3Y205MGIySjFabDloYm5sZmNHSWlMQ0p3Y205MGJ5SXNJbWR2YjJkc1pTSXNJbkp3WXlJc0lsTjBZWFIxY3lJc0ltOXdkRjlrWVhSaElpd2ljbVZ3WldGMFpXUkdhV1ZzWkhOZklpd2liM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0lzSW1sdVkyeDFaR1ZKYm5OMFlXNWpaU0lzSW0xelp5SXNJbTlpYWlJc0ltTnZaR1VpTENKa1pYUmhhV3h6VEdsemRDSXNJbWRsZEVSbGRHRnBiSE5NYVhOMElpd2lRVzU1SWl3aUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWlMQ0ppZVhSbGN5SXNJbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUlzSW5ObGRFTnZaR1VpTENKelpYUk5aWE56WVdkbElpd2lZV1JrUkdWMFlXbHNjeUlzSW5keWFYUmxjaUlzSW5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJaXdpZFc1a1pXWnBibVZrSWl3aVoyVjBRMjlrWlNJc0ltZGxkRTFsYzNOaFoyVWlMQ0p6WlhSRVpYUmhhV3h6VEdsemRDSXNJbTl3ZEY5MllXeDFaU0lzSW05d2RGOXBibVJsZUNJc0luQnliM1J2WW5WbUlpd2lZMnhsWVhKRVpYUmhhV3h6VEdsemRDSXNJbWR2YjJkc1pWOXdjbTkwYjJKMVpsOWtkWEpoZEdsdmJsOXdZaUlzSW1kdmIyZHNaVjl5Y0dOZmMzUmhkSFZ6WDNCaUlpd2lkMlZpY25Saklpd2lkakVpTENKUVlXTnJaWFJOWlhOellXZGxJaXdpVTNSeVpXRnRJaXdpVW1WeGRXVnpkQ0lzSW05dVpXOW1SM0p2ZFhCelh5SXNJbEpsY1hWbGMzUklaV0ZrWlhKeklpd2lVbVZ4ZFdWemRFMWxjM05oWjJVaUxDSlNaWE53YjI1elpVaGxZV1JsY25NaUxDSlNaWE53YjI1elpVMWxjM05oWjJVaUxDSlNaWE53YjI1elpWUnlZV2xzWlhKeklpd2lVM1J5YVc1bmN5SXNJbWRsZEVSaGRHRmZZWE5DTmpRaUxDSmxiMjBpTENKelpYUkVZWFJoSWl3aWMyVjBSVzl0SWl3aVoyVjBSR0YwWVY5aGMxVTRJaXdpWjJWMFJXOXRJaXdpWjJWMFJHRjBZU0lzSW1sa0lpd2ljMlYwU1dRaUxDSm5aWFJKWkNJc0lsUjVjR1ZEWVhObElpd2lWRmxRUlY5T1QxUmZVMFZVSWl3aVNFVkJSRVZTVXlJc0ltZGxkRlI1Y0dWRFlYTmxJaXdpYzNSeVpXRnRJaXdpWjJWMFUzUnlaV0Z0SWl3aVoyVjBTR1ZoWkdWeWN5SXNJbk5sZEZOMGNtVmhiU0lzSW5ObGRFaGxZV1JsY25NaUxDSmpiR1ZoY2xOMGNtVmhiU0lzSW1oaGMxTjBjbVZoYlNJc0ltTnNaV0Z5U0dWaFpHVnljeUlzSW1oaGMwaGxZV1JsY25NaUxDSmpiR1ZoY2sxbGMzTmhaMlVpTENKb1lYTk5aWE56WVdkbElpd2laMlYwVFdWMFlXUmhkR0VpTENKMGFXMWxiM1YwSWl3aVoyVjBWR2x0Wlc5MWRDSXNJa1IxY21GMGFXOXVJaXdpYzJWMFRXVjBhRzlrSWl3aWMyVjBUV1YwWVdSaGRHRWlMQ0puWlhSTlpYUm9iMlFpTENKamJHVmhjazFsZEdGa1lYUmhJaXdpYUdGelRXVjBZV1JoZEdFaUxDSm9ZWE5VYVcxbGIzVjBJaXdpY0dGamEyVjBUV1Z6YzJGblpTSXNJbWRsZEZCaFkydGxkRTFsYzNOaFoyVWlMQ0psYjNNaUxDSnpaWFJJWVhOTlpYTnpZV2RsSWl3aWMyVjBVR0ZqYTJWMFRXVnpjMkZuWlNJc0luTmxkRVZ2Y3lJc0ltZGxkRWhoYzAxbGMzTmhaMlVpTENKblpYUkZiM01pTENKamJHVmhjbEJoWTJ0bGRFMWxjM05oWjJVaUxDSm9ZWE5RWVdOclpYUk5aWE56WVdkbElpd2laMlYwVkhKaGFXeGxjbk1pTENKelpYUlVjbUZwYkdWeWN5SXNJbU5zWldGeVZISmhhV3hsY25NaUxDSm9ZWE5VY21GcGJHVnljeUlzSW1kbGRGTjBZWFIxY3lJc0luTmxkRk4wWVhSMWN5SXNJbU5zWldGeVUzUmhkSFZ6SWl3aWFHRnpVM1JoZEhWeklpd2lkbUZzZFdWelRHbHpkQ0lzSW1Ga1pGWmhiSFZsY3lJc0ltZGxkRlpoYkhWbGMweHBjM1FpTENKelpYUldZV3gxWlhOTWFYTjBJaXdpWTJ4bFlYSldZV3gxWlhOTWFYTjBJaXdpYldSTllYQWlMQ0puWlhSTlpFMWhjQ0lzSW05d2RGOXViMHhoZW5sRGNtVmhkR1VpTENKamJHVmhjazFrVFdGd0lpd2laMjl2WjJ4bFgyRndhVjloYm01dmRHRjBhVzl1YzE5d1lpSXNJa055WldSbGJuUnBZV3h6SWl3aVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRDSXNJa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sSWl3aVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBJaXdpUVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTSXNJbkJoZVd4dllXUWlMQ0p6WlhSVWVYQmxJaXdpYzJWMFVHRjViRzloWkNJc0ltZGxkRlI1Y0dVaUxDSm5aWFJRWVhsc2IyRmtJaXdpWlc1MGFYUjVJaXdpWjJWMFEzSmxaR1Z1ZEdsaGJITWlMQ0p6WlhSRmJuUnBkSGtpTENKelpYUkRjbVZrWlc1MGFXRnNjeUlzSW1kbGRFVnVkR2wwZVNJc0ltTnNaV0Z5UTNKbFpHVnVkR2xoYkhNaUxDSm9ZWE5EY21Wa1pXNTBhV0ZzY3lJc0ltRmpZMlZ6YzFSdmEyVnVJaXdpYzJWMFFXTmpaWE56Vkc5clpXNGlMQ0puWlhSQlkyTmxjM05VYjJ0bGJpSXNJbWR2YjJkc1pWOWhjR2xmYUhSMGNGOXdZaUlzSW1kdmIyZHNaVjl3Y205MGIySjFabDlrWlhOamNtbHdkRzl5WDNCaUlpd2lZWEJwSWl3aWFIUjBjQ0lzSWtoMGRIQlNkV3hsSWl3aVRXVjBhRzlrVDNCMGFXOXVjeUlzSW1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtpTENKbGVIUmxibk5wYjI1eklpd2lTVU5GUTJGdVpHbGtZWFJsSWl3aVEyRnNiRkpsY1hWbGMzUWlMQ0pEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJVaUxDSkRZV3hzVW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlNJc0lrTmhiR3hTWlhOd2IyNXpaU0lzSWtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wSWl3aVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObElpd2lTVU5GVTJWeWRtVnlJaXdpVjJWaVVsUkRRMjl1Wm1sbklpd2lRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlNJc0lrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlNJc0lrRnVjM2RsY2xKbGNYVmxjM1JFYjI1bFUzUmhaMlVpTENKQmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aU0lzSWtGdWMzZGxjbEpsY1hWbGMzUWlMQ0pCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpTSXNJa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVWlMQ0pCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpTSXNJa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTSXNJa0Z1YzNkbGNsSmxjM0J2Ym5ObElpd2lUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhGMVpYTjBJaXdpVDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlNJc0ltTmhibVJwWkdGMFpTSXNJbk5rY0UxcFpDSXNJbk5rY0cxTWFXNWxTVzVrWlhnaUxDSjFjMlZ5Ym1GdFpVWnlZV2R0Wlc1MElpd2ljMlYwUTJGdVpHbGtZWFJsSWl3aWMyVjBVMlJ3VFdsa0lpd2ljMlYwVTJSd2JVeHBibVZKYm1SbGVDSXNJbk5sZEZWelpYSnVZVzFsUm5KaFoyMWxiblFpTENKblpYUkRZVzVrYVdSaGRHVWlMQ0puWlhSVFpIQk5hV1FpTENKamJHVmhjbE5rY0UxcFpDSXNJbWhoYzFOa2NFMXBaQ0lzSW1kbGRGTmtjRzFNYVc1bFNXNWtaWGdpTENKamJHVmhjbE5rY0cxTWFXNWxTVzVrWlhnaUxDSm9ZWE5UWkhCdFRHbHVaVWx1WkdWNElpd2laMlYwVlhObGNtNWhiV1ZHY21GbmJXVnVkQ0lzSW1Oc1pXRnlWWE5sY201aGJXVkdjbUZuYldWdWRDSXNJbWhoYzFWelpYSnVZVzFsUm5KaFoyMWxiblFpTENKelpIQWlMQ0prYVhOaFlteGxWSEpwWTJ0c1pTSXNJbk5sZEZOa2NDSXNJbk5sZEVScGMyRmliR1ZVY21samEyeGxJaXdpWjJWMFUyUndJaXdpWjJWMFJHbHpZV0pzWlZSeWFXTnJiR1VpTENKamJHVmhja05oYm1ScFpHRjBaU0lzSW1oaGMwTmhibVJwWkdGMFpTSXNJbE4wWVdkbFEyRnpaU0lzSWxOVVFVZEZYMDVQVkY5VFJWUWlMQ0pKVGtsVUlpd2lWVkJFUVZSRklpd2laMlYwVTNSaFoyVkRZWE5sSWl3aWRYVnBaQ0lzSW1kbGRFbHVhWFFpTENKMWNHUmhkR1VpTENKblpYUlZjR1JoZEdVaUxDSnpaWFJWZFdsa0lpd2ljMlYwU1c1cGRDSXNJbk5sZEZWd1pHRjBaU0lzSW1kbGRGVjFhV1FpTENKamJHVmhja2x1YVhRaUxDSm9ZWE5KYm1sMElpd2lZMnhsWVhKVmNHUmhkR1VpTENKb1lYTlZjR1JoZEdVaUxDSlZjR1JoZEdWRFlYTmxJaXdpVlZCRVFWUkZYMDVQVkY5VFJWUWlMQ0pEUVU1RVNVUkJWRVVpTENKRVQwNUZJaXdpUlZKU1QxSWlMQ0puWlhSVmNHUmhkR1ZEWVhObElpd2ljMlYwUkc5dVpTSXNJbk5sZEVWeWNtOXlJaXdpWjJWMFJHOXVaU0lzSW1Oc1pXRnlSRzl1WlNJc0ltaGhjMFJ2Ym1VaUxDSmpiR1ZoY2tWeWNtOXlJaXdpYUdGelJYSnliM0lpTENKMWNteHpUR2x6ZENJc0luVnpaWEp1WVcxbElpd2lZM0psWkdWdWRHbGhiQ0lzSW1Ga1pGVnliSE1pTENKelpYUlZjMlZ5Ym1GdFpTSXNJbk5sZEVOeVpXUmxiblJwWVd3aUxDSm5aWFJWY214elRHbHpkQ0lzSW1kbGRGVnpaWEp1WVcxbElpd2laMlYwUTNKbFpHVnVkR2xoYkNJc0luTmxkRlZ5YkhOTWFYTjBJaXdpWTJ4bFlYSlZjbXh6VEdsemRDSXNJbUZrWkdsMGFXOXVZV3hKWTJWVFpYSjJaWEp6VEdsemRDSXNJbWRsZEVGa1pHbDBhVzl1WVd4SlkyVlRaWEoyWlhKelRHbHpkQ0lzSW1Ga1pFRmtaR2wwYVc5dVlXeEpZMlZUWlhKMlpYSnpJaXdpYzJWMFFXUmthWFJwYjI1aGJFbGpaVk5sY25abGNuTk1hWE4wSWl3aVkyeGxZWEpCWkdScGRHbHZibUZzU1dObFUyVnlkbVZ5YzB4cGMzUWlMQ0p2Y0hScGIyNWhiRU52Ym1acFp5SXNJbWRsZEU5d2RHbHZibUZzUTI5dVptbG5JaXdpYzJWMFQzQjBhVzl1WVd4RGIyNW1hV2NpTENKamJHVmhjazl3ZEdsdmJtRnNRMjl1Wm1sbklpd2lhR0Z6VDNCMGFXOXVZV3hEYjI1bWFXY2lMQ0pqYjI1bWFXY2lMQ0puWlhSRGIyNW1hV2NpTENKelpYUkRiMjVtYVdjaUxDSmpiR1ZoY2tOdmJtWnBaeUlzSW1oaGMwTnZibVpwWnlJc0ltUnBZV3hFYVhKbFkzUWlMQ0prYVdGc1YyVmlVbFJESWl3aVlXUmtjbVZ6Y3lJc0ltOXdkSE1pTENKa1pXWmhkV3gwUm1GamRHOXllU0lzSW0xaGEyVkJkWFJvWlc1MGFXTmhkR1ZrVkhKaGJuTndiM0owUm1GamRHOXllU0lzSW1GMWRHaEZiblJwZEhraUxDSmpjbVZrY3lJc0lsQnliMjFwYzJVaUxDSnlaWE52YkhabElpd2ljbVZxWldOMElpd2lRWFYwYUZObGNuWnBZMlVpTENKQmRYUm9aVzUwYVdOaGRHVWlMQ0psZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56SWl3aWJXUWlMQ0psZUhSbGNtNWhiRUYxZEdoVWIwVnVkR2wwZVNJc0lrVjRkR1Z5Ym1Gc1FYVjBhRk5sY25acFkyVWlMQ0pCZFhSb1pXNTBhV05oZEdWVWJ5SXNJbWRsZEVWNGRISmhUV1YwWVdSaGRHRWlMQ0psZUhSeVlVMWtJaXdpWVhWMGFHVnVkR2xqWVhSbFpGUnlZVzV6Y0c5eWRDSXNJbVY0ZEhKaFRXVjBZV1JoZEdFaUxDSnRjMmRDZVhSbGN5SXNJbk5wWjI1aGJHbHVaMEZrWkhKbGMzTWlMQ0ozWldKeWRHTlBjSFJ6SWl3aWQyVmljblJqVDNCMGFXOXVjeUlzSW01bGQxQmxaWEpEYjI1dVpXTjBhVzl1Um05eVEyeHBaVzUwSWl3aVpHbHpZV0pzWlZSeWFXTnJiR1ZKUTBVaUxDSnlkR05EYjI1bWFXY2lMQ0p3WXlJc0ltUmpJaXdpYjNCMGMwTnZjSGtpTENKemFXZHVZV3hwYm1kQmRYUm9SVzUwYVhSNUlpd2ljMmxuYm1Gc2FXNW5RM0psWkdWdWRHbGhiSE1pTENKemFXZHVZV3hwYm1kRmVIUmxjbTVoYkVGMWRHaEJaR1J5WlhOeklpd2ljMmxuYm1Gc2FXNW5SWGgwWlhKdVlXeEJkWFJvVkc5RmJuUnBkSGtpTENKa2FYSmxZM1JVY21GdWMzQnZjblFpTENKVGFXZHVZV3hwYm1kVFpYSjJhV05sSWl3aVEyRnNiQ0lzSW5ObGJuUkViMjVsVDNKRmNuSnZjazl1WTJVaUxDSnpaVzVrUlhKeWIzSWlMQ0psY25JaUxDSmpZV3hzVW1WeGRXVnpkRlZ3WkdGMFpTSXNJbFZPUzA1UFYwNGlMQ0pEWVd4c1ZYQmtZWFJsSWl3aWIzVjBjSFYwSWl3aWMyVnVaRVJ2Ym1VaUxDSnlaVzF2ZEdWRVpYTmpVMlYwSWl3aWNGSmxjMjlzZG1VaUxDSmxlR05vWVc1blpVUnZibVVpTENKamNtVmhkR1ZQWm1abGNpSXNJbTltWm1WeVJHVnpZeUlzSW05dWFXTmxZMkZ1Wkdsa1lYUmxJaXdpWlhabGJuUWlMQ0pwVUhKdmRHOGlMQ0p6WkhCTlRHbHVaVWx1WkdWNElpd2lhV05sUTJGdVpHbGtZWFJsVkc5UWNtOTBieUlzSW5ObGRFeHZZMkZzUkdWelkzSnBjSFJwYjI0aUxDSm9ZWFpsU1c1cGRDSXNJbkpsYlc5MFpWTkVVQ0lzSWxKVVExTmxjM05wYjI1RVpYTmpjbWx3ZEdsdmJpSXNJbk5sZEZKbGJXOTBaVVJsYzJOeWFYQjBhVzl1SWl3aVkyRnVaQ0lzSW1salpVTmhibVJwWkdGMFpVWnliMjFRY205MGJ5SXNJbUZrWkVsalpVTmhibVJwWkdGMFpTSXNJbU5zYVdWdWRFVnVaQ0lzSW1Oc2FXVnVkRVZ1WkZKbGMyOXNkbVVpTENKamJHbGxiblJGYm1SU1pXcGxZM1FpTENKallXeHNVbVZ4ZFdWemRDSXNJbVZ1WTI5a1pXUlRSRkFpTENKc2IyTmhiRVJsYzJOeWFYQjBhVzl1SWl3aVkyTWlMQ0pEYkdsbGJuUkRhR0Z1Ym1Wc0lpd2ljbVZoWkhraUxDSjBjbUZ1YzNCdmNuUkdZV04wYjNKNUlpd2ljR1ZsY2tOdmJtNWxZM1JwYjI0aUxDSnpkSEpsWVcxSlJFTnZkVzUwWlhJaUxDSnpkSEpsWVcxeklpd2liMjVEYUdGdWJtVnNUV1Z6YzJGblpTSXNJbTVsZDFOMGNtVmhiU0lzSW01bGVIUlRkSEpsWVcxSlJDSXNJbkpsYzNBaUxDSmhZM1JwZG1WVGRISmxZVzBpTENKamN5SXNJbTl1VW1WemNHOXVjMlVpTENKRGJHbGxiblJUZEhKbFlXMGlMQ0p5WlcxdmRtVlRkSEpsWVcxQ2VVbEVJaXdpZDNKcGRHVklaV0ZrWlhKeklpd2lRbUZ6WlVOb1lXNXVaV3dpTENKcFpXVmxOelUwSWl3aWEwMWhlRXhsYm1kMGFDSXNJbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFFpTENKamNtVmhkR1ZDZFdabVpYSWlMQ0owYUdGMElpd2lZWEpuSWl3aVpXNWpiMlJwYm1kUGNrOW1abk5sZENJc0ltRnNiRzlqVlc1ellXWmxJaXdpWm5KdmJVRnljbUY1VEdsclpTSXNJbVp5YjIxQmNuSmhlVUoxWm1abGNpSXNJbVZ1WTI5a2FXNW5JaXdpYVhORmJtTnZaR2x1WnlJc0ltRmpkSFZoYkNJc0ltbHpRblZtWm1WeUlpd2liR1Z1SWl3aVkyaGxZMnRsWkNJc0ltTnZjSGtpTENKMllXd2lMQ0poYzNObGNuUlRhWHBsSWl3aWMybDZaU0lzSW1selZtbGxkeUlzSW14dmQyVnlaV1JEWVhObElpd2lkWFJtT0ZSdlFubDBaWE1pTENKaVlYTmxOalJVYjBKNWRHVnpJaXdpYzJ4dmQxUnZVM1J5YVc1bklpd2lhR1Y0VTJ4cFkyVWlMQ0oxZEdZNFUyeHBZMlVpTENKaGMyTnBhVk5zYVdObElpd2liR0YwYVc0eFUyeHBZMlVpTENKaVlYTmxOalJUYkdsalpTSXNJblYwWmpFMmJHVlRiR2xqWlNJc0luTjNZWEFpTENKaWFXUnBjbVZqZEdsdmJtRnNTVzVrWlhoUFppSXNJbUZ5Y21GNVNXNWtaWGhQWmlJc0ltRnljaUlzSW1sdVpHVjRVMmw2WlNJc0ltRnlja3hsYm1kMGFDSXNJblpoYkV4bGJtZDBhQ0lzSW1KMVppSXNJbkpsWVdSVlNXNTBNVFpDUlNJc0ltWnZkVzVrU1c1a1pYZ2lMQ0ptYjNWdVpDSXNJbW9pTENKb1pYaFhjbWwwWlNJc0ltOW1abk5sZENJc0luSmxiV0ZwYm1sdVp5SXNJbk4wY2t4bGJpSXNJbkJoY25ObFpDSXNJblYwWmpoWGNtbDBaU0lzSW1Kc2FYUkNkV1ptWlhJaUxDSmhjMk5wYVZkeWFYUmxJaXdpYzNSeUlpd2lZbmwwWlVGeWNtRjVJaXdpWVhOamFXbFViMEo1ZEdWeklpd2liR0YwYVc0eFYzSnBkR1VpTENKaVlYTmxOalJYY21sMFpTSXNJblZqY3pKWGNtbDBaU0lzSW5WdWFYUnpJaXdpZFhSbU1UWnNaVlJ2UW5sMFpYTWlMQ0ptY205dFFubDBaVUZ5Y21GNUlpd2ljbVZ6SWl3aWMyVmpiMjVrUW5sMFpTSXNJblJvYVhKa1FubDBaU0lzSW1admRYSjBhRUo1ZEdVaUxDSjBaVzF3UTI5a1pWQnZhVzUwSWl3aVptbHljM1JDZVhSbElpd2lZMjlrWlZCdmFXNTBJaXdpWW5sMFpYTlFaWEpUWlhGMVpXNWpaU0lzSW1OdlpHVlFiMmx1ZEhNaUxDSmtaV052WkdWRGIyUmxVRzlwYm5SelFYSnlZWGtpTENKVGJHOTNRblZtWm1WeUlpd2lTVTVUVUVWRFZGOU5RVmhmUWxsVVJWTWlMQ0ptYjI4aUxDSjBlWEJsWkVGeWNtRjVVM1Z3Y0c5eWRDSXNJbkJ2YjJ4VGFYcGxJaXdpWDJGMVoyMWxiblFpTENKemNHVmphV1Z6SWl3aVptbHNiQ0lzSW1Gc2JHOWpWVzV6WVdabFUyeHZkeUlzSWw5cGMwSjFabVpsY2lJc0luZ2lMQ0pzYVhOMElpd2ljRzl6SWl3aWMzZGhjREUySWl3aWMzZGhjRE15SWl3aWMzZGhjRFkwSWl3aWFXNXpjR1ZqZENJc0luUm9hWE5UZEdGeWRDSXNJblJvYVhORmJtUWlMQ0owYUdselEyOXdlU0lzSW5SaGNtZGxkRU52Y0hraUxDSnBibU5zZFdSbGN5SXNJblJ2U2xOUFRpSXNJbDloY25JaUxDSnlaWFFpTENKdmRYUWlMQ0owYjBobGVDSXNJbU5vWldOclQyWm1jMlYwSWl3aVpYaDBJaXdpWTJobFkydEpiblFpTENKdlltcGxZM1JYY21sMFpWVkpiblF4TmlJc0lteHBkSFJzWlVWdVpHbGhiaUlzSW05aWFtVmpkRmR5YVhSbFZVbHVkRE15SWl3aVkyaGxZMnRKUlVWRk56VTBJaXdpYm05QmMzTmxjblFpTENKdVpYZENkV1lpTENKemJHbGpaVXhsYmlJc0luSmxZV1JWU1c1MFRFVWlMQ0p5WldGa1ZVbHVkRUpGSWl3aWNtVmhaRlZKYm5RNElpd2ljbVZoWkZWSmJuUXhOa3hGSWl3aWNtVmhaRlZKYm5Rek1reEZJaXdpY21WaFpGVkpiblF6TWtKRklpd2ljbVZoWkVsdWRFeEZJaXdpY21WaFpFbHVkRUpGSWl3aWNtVmhaRWx1ZERFMlRFVWlMQ0p5WldGa1NXNTBNVFpDUlNJc0luSmxZV1JKYm5Rek1reEZJaXdpY21WaFpFbHVkRE15UWtVaUxDSnlaV0ZrUm14dllYUk1SU0lzSW5KbFlXUkdiRzloZEVKRklpd2ljbVZoWkVSdmRXSnNaVXhGSWl3aWNtVmhaRVJ2ZFdKc1pVSkZJaXdpZDNKcGRHVlZTVzUwVEVVaUxDSjNjbWwwWlZWSmJuUkNSU0lzSW5keWFYUmxWVWx1ZERnaUxDSjNjbWwwWlZWSmJuUXhOa3hGSWl3aWQzSnBkR1ZWU1c1ME1UWkNSU0lzSW5keWFYUmxWVWx1ZERNeVRFVWlMQ0ozY21sMFpWVkpiblF6TWtKRklpd2lkM0pwZEdWSmJuUk1SU0lzSW14cGJXbDBJaXdpZDNKcGRHVkpiblJDUlNJc0luZHlhWFJsU1c1ME1UWk1SU0lzSW5keWFYUmxTVzUwTVRaQ1JTSXNJbmR5YVhSbFNXNTBNekpNUlNJc0luZHlhWFJsU1c1ME16SkNSU0lzSW5keWFYUmxSbXh2WVhSTVJTSXNJbmR5YVhSbFJteHZZWFJDUlNJc0luZHlhWFJsUkc5MVlteGxURVVpTENKM2NtbDBaVVJ2ZFdKc1pVSkZJaXdpZEdGeVoyVjBVM1JoY25RaUxDSkpUbFpCVEVsRVgwSkJVMFUyTkY5U1JTSXNJbXhsWVdSVGRYSnliMmRoZEdVaUxDSjBiMEo1ZEdWQmNuSmhlU0lzSW5OMGNtbHVaM1J5YVcwaUxDSmlZWE5sTmpSamJHVmhiaUlzSW1SemRDSXNJbUkyTkNJc0lteGxibk1pTENKblpYUk1aVzV6SWl3aWRtRnNhV1JNWlc0aUxDSndiR0ZqWlVodmJHUmxjbk5NWlc0aUxDSjBiWEFpTENKQmNuSWlMQ0pmWW5sMFpVeGxibWQwYUNJc0ltTjFja0o1ZEdVaUxDSnlaWFpNYjI5cmRYQWlMQ0oxYVc1ME9DSXNJbVY0ZEhKaFFubDBaWE1pTENKd1lYSjBjeUlzSW14bGJqSWlMQ0psYm1OdlpHVkRhSFZ1YXlJc0lteHZiMnQxY0NJc0ltNTFiU0lzSW1selRFVWlMQ0p0VEdWdUlpd2lia0o1ZEdWeklpd2laVXhsYmlJc0ltVk5ZWGdpTENKbFFtbGhjeUlzSW01Q2FYUnpJaXdpY25RaUxDSnpaV052Ym1Seklpd2libUZ1YjNNaUxDSnpaWFJUWldOdmJtUnpJaXdpYzJWMFRtRnViM01pTENKblpYUlRaV052Ym1Seklpd2laMlYwVG1GdWIzTWlMQ0owZVhCbFZYSnNJaXdpWjJWMFZtRnNkV1ZmWVhOQ05qUWlMQ0p6WlhSVWVYQmxWWEpzSWl3aWMyVjBWbUZzZFdVaUxDSm5aWFJVZVhCbFZYSnNJaXdpWjJWMFZtRnNkV1ZmWVhOVk9DSXNJbWRsZEZaaGJIVmxJaXdpWjJWMFZIbHdaVTVoYldVaUxDSndZV05ySWl3aWMyVnlhV0ZzYVhwbFpDSXNJbTl3ZEY5MGVYQmxWWEpzVUhKbFptbDRJaXdpZFc1d1lXTnJJaXdpWkdWelpYSnBZV3hwZW1VaUxDSndaV1Z5UTI5dWJpSXNJbVJoZEdGRGFHRnVibVZzSWl3aWJXRjRSR0YwWVVOb1lXNXVaV3hUYVhwbElpd2liMjVEYUdGdWJtVnNUM0JsYmlJc0ltOXVRMmhoYm01bGJFTnNiM05sSWl3aVpYWWlMQ0p2YmtOb1lXNXVaV3hGY25KdmNpSXNJbTl1YVdObFkyOXVibVZqZEdsdmJuTjBZWFJsWTJoaGJtZGxJaXdpYVdObFEyOXVibVZqZEdsdmJsTjBZWFJsSWl3aVkyeHZjMlZYYVhSb1VtVmhjMjl1SWl3aWFYTkRiRzl6WldRaUxDSnBjME5zYjNObFpGSmxZWE52YmlJc0ltTnNiM05sWkZKbFlYTnZiaUlzSW1Ob1lXNXVaV3dpTENKdmJrUnZibVVpTENKb1pXRmtaWEp6VW1WalpXbDJaV1FpTENKMGNtRnBiR1Z5YzFKbFkyVnBkbVZrSWl3aWNtVnhkV1Z6ZEVobFlXUmxjbk1pTENKbWNtOXRSMUpRUTAxbGRHRmtZWFJoSWl3aVkyeHZjMlZYYVhSb1VtVmpka1Z5Y205eUlpd2ljR0ZqYTJWMElpd2ljbVZ4ZFdWemRFMWxjM05oWjJVaUxDSmhiVzkxYm5SVWIxTmxibVFpTENKd2NtOWpaWE56U0dWaFpHVnljeUlzSW5CeWIyTmxjM05OWlhOellXZGxJaXdpY0hKdlkyVnpjMVJ5WVdsc1pYSnpJaXdpZEc5SFVsQkRUV1YwWVdSaGRHRWlMQ0p5WlhOMWJIUWlMQ0p3Y205alpYTnpVR0ZqYTJWMFRXVnpjMkZuWlNJc0ltTm9kVzVySWl3aWMzUmhkSFZ6UTI5a1pTSXNJbWhsWVdSbGNrSjVkR1Z6SWl3aVlYTlRkSEpwYm1jaUxDSm9aV0ZrWlhKelZHOUNlWFJsY3lJc0luTmxkRlZwYm5RNElpd2lRbUZ6WlZOMGNtVmhiU0lzSW1Ob1lYSWlMQ0psYm1OdlpHVmtJaXdpWTJoaGNrTnZaR1VpTENKemRISnBibWR6SWl3aVpXNTBjbmtpTENKd1lXTnJaWFJDZFdZaUxDSndZV05yWlhSQ2RXWlRhWHBsSWl3aWNHRnlkR2xoYkVSaGRHRWlMQ0pEUVU1RFJVeE1SVVFpTENKSlRsWkJURWxFWDBGU1IxVk5SVTVVSWl3aVJFVkJSRXhKVGtWZlJWaERSVVZFUlVRaUxDSk9UMVJmUms5VlRrUWlMQ0pCVEZKRlFVUlpYMFZZU1ZOVVV5SXNJbEJGVWsxSlUxTkpUMDVmUkVWT1NVVkVJaXdpVlU1QlZWUklSVTVVU1VOQlZFVkVJaXdpVWtWVFQxVlNRMFZmUlZoSVFWVlRWRVZFSWl3aVJrRkpURVZFWDFCU1JVTlBUa1JKVkVsUFRpSXNJa0ZDVDFKVVJVUWlMQ0pQVlZSZlQwWmZVa0ZPUjBVaUxDSlZUa2xOVUV4RlRVVk9WRVZFSWl3aVNVNVVSVkpPUVV3aUxDSlZUa0ZXUVVsTVFVSk1SU0lzSWtSQlZFRmZURTlUVXlJc0lraDBkSEFpTENKRGRYTjBiMjFJZEhSd1VHRjBkR1Z5YmlJc0luSjFiR1Z6VEdsemRDSXNJbWRsZEZKMWJHVnpUR2x6ZENJc0ltWjFiR3g1UkdWamIyUmxVbVZ6WlhKMlpXUkZlSEJoYm5OcGIyNGlMQ0poWkdSU2RXeGxjeUlzSW5ObGRFWjFiR3g1UkdWamIyUmxVbVZ6WlhKMlpXUkZlSEJoYm5OcGIyNGlMQ0puWlhSR2RXeHNlVVJsWTI5a1pWSmxjMlZ5ZG1Wa1JYaHdZVzV6YVc5dUlpd2ljMlYwVW5Wc1pYTk1hWE4wSWl3aVkyeGxZWEpTZFd4bGMweHBjM1FpTENKUVlYUjBaWEp1UTJGelpTSXNJbEJCVkZSRlVrNWZUazlVWDFORlZDSXNJa2RGVkNJc0lsQlZWQ0lzSWxCUFUxUWlMQ0pFUlV4RlZFVWlMQ0pRUVZSRFNDSXNJa05WVTFSUFRTSXNJbWRsZEZCaGRIUmxjbTVEWVhObElpd2ljMlZzWldOMGIzSWlMQ0p3ZFhRaUxDSndiM04wSWl3aWNHSmZaR1ZzWlhSbElpd2ljR0YwWTJnaUxDSmpkWE4wYjIwaUxDSm5aWFJEZFhOMGIyMGlMQ0p5WlhOd2IyNXpaVUp2WkhraUxDSmhaR1JwZEdsdmJtRnNRbWx1WkdsdVozTk1hWE4wSWl3aVoyVjBRV1JrYVhScGIyNWhiRUpwYm1ScGJtZHpUR2x6ZENJc0luTmxkRk5sYkdWamRHOXlJaXdpYzJWMFIyVjBJaXdpYzJWMFVIVjBJaXdpYzJWMFVHOXpkQ0lzSW5ObGRFUmxiR1YwWlNJc0luTmxkRkJoZEdOb0lpd2ljMlYwUTNWemRHOXRJaXdpYzJWMFFtOWtlU0lzSW5ObGRGSmxjM0J2Ym5ObFFtOWtlU0lzSW1Ga1pFRmtaR2wwYVc5dVlXeENhVzVrYVc1bmN5SXNJbWRsZEZObGJHVmpkRzl5SWl3aVoyVjBRbTlrZVNJc0ltZGxkRkpsYzNCdmJuTmxRbTlrZVNJc0ltZGxkRWRsZENJc0ltTnNaV0Z5UjJWMElpd2lhR0Z6UjJWMElpd2laMlYwVUhWMElpd2lZMnhsWVhKUWRYUWlMQ0pvWVhOUWRYUWlMQ0puWlhSUWIzTjBJaXdpWTJ4bFlYSlFiM04wSWl3aWFHRnpVRzl6ZENJc0ltZGxkRVJsYkdWMFpTSXNJbU5zWldGeVJHVnNaWFJsSWl3aWFHRnpSR1ZzWlhSbElpd2laMlYwVUdGMFkyZ2lMQ0pqYkdWaGNsQmhkR05vSWl3aWFHRnpVR0YwWTJnaUxDSmpiR1ZoY2tOMWMzUnZiU0lzSW1oaGMwTjFjM1J2YlNJc0luTmxkRUZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRaUxDSmpiR1ZoY2tGa1pHbDBhVzl1WVd4Q2FXNWthVzVuYzB4cGMzUWlMQ0pyYVc1a0lpd2ljMlYwUzJsdVpDSXNJbk5sZEZCaGRHZ2lMQ0puWlhSTGFXNWtJaXdpWjJWMFVHRjBhQ0lzSWtacGJHVkVaWE5qY21sd2RHOXlVMlYwSWl3aVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5SXNJa1JsYzJOeWFYQjBiM0pRY205MGJ5SXNJa1Y0ZEdWdWMybHZibEpoYm1kbElpd2lVbVZ6WlhKMlpXUlNZVzVuWlNJc0lrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeUlzSWtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdklpd2lUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzhpTENKRmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdklpd2lSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVWlMQ0pGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOGlMQ0pUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdklpd2lUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2SWl3aVJtbHNaVTl3ZEdsdmJuTWlMQ0pOWlhOellXZGxUM0IwYVc5dWN5SXNJa1pwWld4a1QzQjBhVzl1Y3lJc0lrOXVaVzltVDNCMGFXOXVjeUlzSWtWdWRXMVBjSFJwYjI1eklpd2lSVzUxYlZaaGJIVmxUM0IwYVc5dWN5SXNJbE5sY25acFkyVlBjSFJwYjI1eklpd2lWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUlzSWs1aGJXVlFZWEowSWl3aVUyOTFjbU5sUTI5a1pVbHVabThpTENKSFpXNWxjbUYwWldSRGIyUmxTVzVtYnlJc0lrRnVibTkwWVhScGIyNGlMQ0ptYVd4bFRHbHpkQ0lzSW1kbGRFWnBiR1ZNYVhOMElpd2lZV1JrUm1sc1pTSXNJbk5sZEVacGJHVk1hWE4wSWl3aVkyeGxZWEpHYVd4bFRHbHpkQ0lzSW5CaVgzQmhZMnRoWjJVaUxDSmtaWEJsYm1SbGJtTjVUR2x6ZENJc0luQjFZbXhwWTBSbGNHVnVaR1Z1WTNsTWFYTjBJaXdpZDJWaGEwUmxjR1Z1WkdWdVkzbE1hWE4wSWl3aWJXVnpjMkZuWlZSNWNHVk1hWE4wSWl3aVoyVjBUV1Z6YzJGblpWUjVjR1ZNYVhOMElpd2laVzUxYlZSNWNHVk1hWE4wSWl3aVoyVjBSVzUxYlZSNWNHVk1hWE4wSWl3aWMyVnlkbWxqWlV4cGMzUWlMQ0puWlhSVFpYSjJhV05sVEdsemRDSXNJbVY0ZEdWdWMybHZia3hwYzNRaUxDSm5aWFJGZUhSbGJuTnBiMjVNYVhOMElpd2laMlYwVDNCMGFXOXVjeUlzSW5OdmRYSmpaVU52WkdWSmJtWnZJaXdpWjJWMFUyOTFjbU5sUTI5a1pVbHVabThpTENKemVXNTBZWGdpTENKelpYUk9ZVzFsSWl3aWMyVjBVR0ZqYTJGblpTSXNJbUZrWkZCMVlteHBZMFJsY0dWdVpHVnVZM2tpTENKaFpHUlhaV0ZyUkdWd1pXNWtaVzVqZVNJc0ltRmtaRTFsYzNOaFoyVlVlWEJsSWl3aVlXUmtSVzUxYlZSNWNHVWlMQ0poWkdSVFpYSjJhV05sSWl3aVlXUmtSWGgwWlc1emFXOXVKQ0lzSW5ObGRFOXdkR2x2Ym5NaUxDSnpaWFJUYjNWeVkyVkRiMlJsU1c1bWJ5SXNJbk5sZEZONWJuUmhlQ0lzSW1kbGRFUmxjR1Z1WkdWdVkzbE1hWE4wSWl3aVoyVjBVSFZpYkdsalJHVndaVzVrWlc1amVVeHBjM1FpTENKblpYUlhaV0ZyUkdWd1pXNWtaVzVqZVV4cGMzUWlMQ0puWlhST1lXMWxJaXdpWTJ4bFlYSk9ZVzFsSWl3aWFHRnpUbUZ0WlNJc0ltZGxkRkJoWTJ0aFoyVWlMQ0pqYkdWaGNsQmhZMnRoWjJVaUxDSm9ZWE5RWVdOcllXZGxJaXdpYzJWMFJHVndaVzVrWlc1amVVeHBjM1FpTENKamJHVmhja1JsY0dWdVpHVnVZM2xNYVhOMElpd2ljMlYwVUhWaWJHbGpSR1Z3Wlc1a1pXNWplVXhwYzNRaUxDSmpiR1ZoY2xCMVlteHBZMFJsY0dWdVpHVnVZM2xNYVhOMElpd2ljMlYwVjJWaGEwUmxjR1Z1WkdWdVkzbE1hWE4wSWl3aVkyeGxZWEpYWldGclJHVndaVzVrWlc1amVVeHBjM1FpTENKelpYUk5aWE56WVdkbFZIbHdaVXhwYzNRaUxDSmpiR1ZoY2sxbGMzTmhaMlZVZVhCbFRHbHpkQ0lzSW5ObGRFVnVkVzFVZVhCbFRHbHpkQ0lzSW1Oc1pXRnlSVzUxYlZSNWNHVk1hWE4wSWl3aWMyVjBVMlZ5ZG1salpVeHBjM1FpTENKamJHVmhjbE5sY25acFkyVk1hWE4wSWl3aWMyVjBSWGgwWlc1emFXOXVUR2x6ZENJc0ltTnNaV0Z5UlhoMFpXNXphVzl1VEdsemRDSXNJbU5zWldGeVQzQjBhVzl1Y3lJc0ltaGhjMDl3ZEdsdmJuTWlMQ0pqYkdWaGNsTnZkWEpqWlVOdlpHVkpibVp2SWl3aWFHRnpVMjkxY21ObFEyOWtaVWx1Wm04aUxDSm5aWFJUZVc1MFlYZ2lMQ0pqYkdWaGNsTjViblJoZUNJc0ltaGhjMU41Ym5SaGVDSXNJbVpwWld4a1RHbHpkQ0lzSW1kbGRFWnBaV3hrVEdsemRDSXNJbTVsYzNSbFpGUjVjR1ZNYVhOMElpd2laMlYwVG1WemRHVmtWSGx3WlV4cGMzUWlMQ0psZUhSbGJuTnBiMjVTWVc1blpVeHBjM1FpTENKblpYUkZlSFJsYm5OcGIyNVNZVzVuWlV4cGMzUWlMQ0p2Ym1WdlprUmxZMnhNYVhOMElpd2laMlYwVDI1bGIyWkVaV05zVEdsemRDSXNJbkpsYzJWeWRtVmtVbUZ1WjJWTWFYTjBJaXdpWjJWMFVtVnpaWEoyWldSU1lXNW5aVXhwYzNRaUxDSnlaWE5sY25abFpFNWhiV1ZNYVhOMElpd2lZV1JrUm1sbGJHUWlMQ0poWkdST1pYTjBaV1JVZVhCbElpd2lZV1JrUlhoMFpXNXphVzl1VW1GdVoyVWlMQ0poWkdSUGJtVnZaa1JsWTJ3aUxDSmhaR1JTWlhObGNuWmxaRkpoYm1kbElpd2lZV1JrVW1WelpYSjJaV1JPWVcxbElpd2laMlYwVW1WelpYSjJaV1JPWVcxbFRHbHpkQ0lzSW5ObGRGTjBZWEowSWl3aVoyVjBVM1JoY25RaUxDSmpiR1ZoY2xOMFlYSjBJaXdpYUdGelUzUmhjblFpTENKamJHVmhja1Z1WkNJc0ltaGhjMFZ1WkNJc0luTmxkRVpwWld4a1RHbHpkQ0lzSW1Oc1pXRnlSbWxsYkdSTWFYTjBJaXdpYzJWMFRtVnpkR1ZrVkhsd1pVeHBjM1FpTENKamJHVmhjazVsYzNSbFpGUjVjR1ZNYVhOMElpd2ljMlYwUlhoMFpXNXphVzl1VW1GdVoyVk1hWE4wSWl3aVkyeGxZWEpGZUhSbGJuTnBiMjVTWVc1blpVeHBjM1FpTENKelpYUlBibVZ2WmtSbFkyeE1hWE4wSWl3aVkyeGxZWEpQYm1WdlprUmxZMnhNYVhOMElpd2ljMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FpTENKamJHVmhjbEpsYzJWeWRtVmtVbUZ1WjJWTWFYTjBJaXdpYzJWMFVtVnpaWEoyWldST1lXMWxUR2x6ZENJc0ltTnNaV0Z5VW1WelpYSjJaV1JPWVcxbFRHbHpkQ0lzSW5WdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBJaXdpWjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FpTENKaFpHUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVJaXdpYzJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FpTENKamJHVmhjbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElpd2liblZ0WW1WeUlpd2liR0ZpWld3aUxDSjBlWEJsVG1GdFpTSXNJbVY0ZEdWdVpHVmxJaXdpWkdWbVlYVnNkRlpoYkhWbElpd2liMjVsYjJaSmJtUmxlQ0lzSW1wemIyNU9ZVzFsSWl3aWNISnZkRzh6VDNCMGFXOXVZV3dpTENKelpYUk9kVzFpWlhJaUxDSnpaWFJNWVdKbGJDSXNJbk5sZEZSNWNHVk9ZVzFsSWl3aWMyVjBSWGgwWlc1a1pXVWlMQ0p6WlhSRVpXWmhkV3gwVm1Gc2RXVWlMQ0p6WlhSUGJtVnZaa2x1WkdWNElpd2ljMlYwU25OdmJrNWhiV1VpTENKelpYUlFjbTkwYnpOUGNIUnBiMjVoYkNJc0lsUjVjR1VpTENKVVdWQkZYMFJQVlVKTVJTSXNJbFJaVUVWZlJreFBRVlFpTENKVVdWQkZYMGxPVkRZMElpd2lWRmxRUlY5VlNVNVVOalFpTENKVVdWQkZYMGxPVkRNeUlpd2lWRmxRUlY5R1NWaEZSRFkwSWl3aVZGbFFSVjlHU1ZoRlJETXlJaXdpVkZsUVJWOUNUMDlNSWl3aVZGbFFSVjlUVkZKSlRrY2lMQ0pVV1ZCRlgwZFNUMVZRSWl3aVZGbFFSVjlOUlZOVFFVZEZJaXdpVkZsUVJWOUNXVlJGVXlJc0lsUlpVRVZmVlVsT1ZETXlJaXdpVkZsUVJWOUZUbFZOSWl3aVZGbFFSVjlUUmtsWVJVUXpNaUlzSWxSWlVFVmZVMFpKV0VWRU5qUWlMQ0pVV1ZCRlgxTkpUbFF6TWlJc0lsUlpVRVZmVTBsT1ZEWTBJaXdpVEdGaVpXd2lMQ0pNUVVKRlRGOVBVRlJKVDA1QlRDSXNJa3hCUWtWTVgxSkZVVlZKVWtWRUlpd2lURUZDUlV4ZlVrVlFSVUZVUlVRaUxDSm5aWFJPZFcxaVpYSWlMQ0pqYkdWaGNrNTFiV0psY2lJc0ltaGhjMDUxYldKbGNpSXNJbWRsZEV4aFltVnNJaXdpWTJ4bFlYSk1ZV0psYkNJc0ltaGhjMHhoWW1Wc0lpd2lZMnhsWVhKVWVYQmxJaXdpYUdGelZIbHdaU0lzSW1Oc1pXRnlWSGx3WlU1aGJXVWlMQ0pvWVhOVWVYQmxUbUZ0WlNJc0ltZGxkRVY0ZEdWdVpHVmxJaXdpWTJ4bFlYSkZlSFJsYm1SbFpTSXNJbWhoYzBWNGRHVnVaR1ZsSWl3aVoyVjBSR1ZtWVhWc2RGWmhiSFZsSWl3aVkyeGxZWEpFWldaaGRXeDBWbUZzZFdVaUxDSm9ZWE5FWldaaGRXeDBWbUZzZFdVaUxDSm5aWFJQYm1WdlprbHVaR1Y0SWl3aVkyeGxZWEpQYm1WdlprbHVaR1Y0SWl3aWFHRnpUMjVsYjJaSmJtUmxlQ0lzSW1kbGRFcHpiMjVPWVcxbElpd2lZMnhsWVhKS2MyOXVUbUZ0WlNJc0ltaGhjMHB6YjI1T1lXMWxJaXdpWjJWMFVISnZkRzh6VDNCMGFXOXVZV3dpTENKamJHVmhjbEJ5YjNSdk0wOXdkR2x2Ym1Gc0lpd2lhR0Z6VUhKdmRHOHpUM0IwYVc5dVlXd2lMQ0oyWVd4MVpVeHBjM1FpTENKblpYUldZV3gxWlV4cGMzUWlMQ0poWkdSV1lXeDFaU0lzSW5ObGRGWmhiSFZsVEdsemRDSXNJbU5zWldGeVZtRnNkV1ZNYVhOMElpd2liV1YwYUc5a1RHbHpkQ0lzSW1kbGRFMWxkR2h2WkV4cGMzUWlMQ0poWkdSTlpYUm9iMlFpTENKelpYUk5aWFJvYjJSTWFYTjBJaXdpWTJ4bFlYSk5aWFJvYjJSTWFYTjBJaXdpYVc1d2RYUlVlWEJsSWl3aWIzVjBjSFYwVkhsd1pTSXNJbU5zYVdWdWRGTjBjbVZoYldsdVp5SXNJbk5sY25abGNsTjBjbVZoYldsdVp5SXNJbk5sZEVsdWNIVjBWSGx3WlNJc0luTmxkRTkxZEhCMWRGUjVjR1VpTENKelpYUkRiR2xsYm5SVGRISmxZVzFwYm1jaUxDSnpaWFJUWlhKMlpYSlRkSEpsWVcxcGJtY2lMQ0puWlhSSmJuQjFkRlI1Y0dVaUxDSmpiR1ZoY2tsdWNIVjBWSGx3WlNJc0ltaGhjMGx1Y0hWMFZIbHdaU0lzSW1kbGRFOTFkSEIxZEZSNWNHVWlMQ0pqYkdWaGNrOTFkSEIxZEZSNWNHVWlMQ0pvWVhOUGRYUndkWFJVZVhCbElpd2laMlYwUTJ4cFpXNTBVM1J5WldGdGFXNW5JaXdpWTJ4bFlYSkRiR2xsYm5SVGRISmxZVzFwYm1jaUxDSm9ZWE5EYkdsbGJuUlRkSEpsWVcxcGJtY2lMQ0puWlhSVFpYSjJaWEpUZEhKbFlXMXBibWNpTENKamJHVmhjbE5sY25abGNsTjBjbVZoYldsdVp5SXNJbWhoYzFObGNuWmxjbE4wY21WaGJXbHVaeUlzSW1waGRtRlFZV05yWVdkbElpd2lhbUYyWVU5MWRHVnlRMnhoYzNOdVlXMWxJaXdpYW1GMllVMTFiSFJwY0d4bFJtbHNaWE1pTENKcVlYWmhSMlZ1WlhKaGRHVkZjWFZoYkhOQmJtUklZWE5vSWl3aWFtRjJZVk4wY21sdVowTm9aV05yVlhSbU9DSXNJbTl3ZEdsdGFYcGxSbTl5SWl3aVoyOVFZV05yWVdkbElpd2lZMk5IWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0pxWVhaaFIyVnVaWEpwWTFObGNuWnBZMlZ6SWl3aWNIbEhaVzVsY21salUyVnlkbWxqWlhNaUxDSndhSEJIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0prWlhCeVpXTmhkR1ZrSWl3aVkyTkZibUZpYkdWQmNtVnVZWE1pTENKdlltcGpRMnhoYzNOUWNtVm1hWGdpTENKamMyaGhjbkJPWVcxbGMzQmhZMlVpTENKemQybG1kRkJ5WldacGVDSXNJbkJvY0VOc1lYTnpVSEpsWm1sNElpd2ljR2h3VG1GdFpYTndZV05sSWl3aWNHaHdUV1YwWVdSaGRHRk9ZVzFsYzNCaFkyVWlMQ0p5ZFdKNVVHRmphMkZuWlNJc0luTmxkRXBoZG1GUVlXTnJZV2RsSWl3aWMyVjBTbUYyWVU5MWRHVnlRMnhoYzNOdVlXMWxJaXdpYzJWMFNtRjJZVTExYkhScGNHeGxSbWxzWlhNaUxDSnpaWFJLWVhaaFIyVnVaWEpoZEdWRmNYVmhiSE5CYm1SSVlYTm9JaXdpYzJWMFNtRjJZVk4wY21sdVowTm9aV05yVlhSbU9DSXNJbk5sZEU5d2RHbHRhWHBsUm05eUlpd2ljMlYwUjI5UVlXTnJZV2RsSWl3aWMyVjBRMk5IWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0p6WlhSS1lYWmhSMlZ1WlhKcFkxTmxjblpwWTJWeklpd2ljMlYwVUhsSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKelpYUlFhSEJIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0p6WlhSRVpYQnlaV05oZEdWa0lpd2ljMlYwUTJORmJtRmliR1ZCY21WdVlYTWlMQ0p6WlhSUFltcGpRMnhoYzNOUWNtVm1hWGdpTENKelpYUkRjMmhoY25CT1lXMWxjM0JoWTJVaUxDSnpaWFJUZDJsbWRGQnlaV1pwZUNJc0luTmxkRkJvY0VOc1lYTnpVSEpsWm1sNElpd2ljMlYwVUdod1RtRnRaWE53WVdObElpd2ljMlYwVUdod1RXVjBZV1JoZEdGT1lXMWxjM0JoWTJVaUxDSnpaWFJTZFdKNVVHRmphMkZuWlNJc0lrOXdkR2x0YVhwbFRXOWtaU0lzSWxOUVJVVkVJaXdpUTA5RVJWOVRTVnBGSWl3aVRFbFVSVjlTVlU1VVNVMUZJaXdpWjJWMFNtRjJZVkJoWTJ0aFoyVWlMQ0pqYkdWaGNrcGhkbUZRWVdOcllXZGxJaXdpYUdGelNtRjJZVkJoWTJ0aFoyVWlMQ0puWlhSS1lYWmhUM1YwWlhKRGJHRnpjMjVoYldVaUxDSmpiR1ZoY2twaGRtRlBkWFJsY2tOc1lYTnpibUZ0WlNJc0ltaGhjMHBoZG1GUGRYUmxja05zWVhOemJtRnRaU0lzSW1kbGRFcGhkbUZOZFd4MGFYQnNaVVpwYkdWeklpd2lZMnhsWVhKS1lYWmhUWFZzZEdsd2JHVkdhV3hsY3lJc0ltaGhjMHBoZG1GTmRXeDBhWEJzWlVacGJHVnpJaXdpWjJWMFNtRjJZVWRsYm1WeVlYUmxSWEYxWVd4elFXNWtTR0Z6YUNJc0ltTnNaV0Z5U21GMllVZGxibVZ5WVhSbFJYRjFZV3h6UVc1a1NHRnphQ0lzSW1oaGMwcGhkbUZIWlc1bGNtRjBaVVZ4ZFdGc2MwRnVaRWhoYzJnaUxDSm5aWFJLWVhaaFUzUnlhVzVuUTJobFkydFZkR1k0SWl3aVkyeGxZWEpLWVhaaFUzUnlhVzVuUTJobFkydFZkR1k0SWl3aWFHRnpTbUYyWVZOMGNtbHVaME5vWldOclZYUm1PQ0lzSW1kbGRFOXdkR2x0YVhwbFJtOXlJaXdpWTJ4bFlYSlBjSFJwYldsNlpVWnZjaUlzSW1oaGMwOXdkR2x0YVhwbFJtOXlJaXdpWjJWMFIyOVFZV05yWVdkbElpd2lZMnhsWVhKSGIxQmhZMnRoWjJVaUxDSm9ZWE5IYjFCaFkydGhaMlVpTENKblpYUkRZMGRsYm1WeWFXTlRaWEoyYVdObGN5SXNJbU5zWldGeVEyTkhaVzVsY21salUyVnlkbWxqWlhNaUxDSm9ZWE5EWTBkbGJtVnlhV05UWlhKMmFXTmxjeUlzSW1kbGRFcGhkbUZIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0pqYkdWaGNrcGhkbUZIWlc1bGNtbGpVMlZ5ZG1salpYTWlMQ0pvWVhOS1lYWmhSMlZ1WlhKcFkxTmxjblpwWTJWeklpd2laMlYwVUhsSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKamJHVmhjbEI1UjJWdVpYSnBZMU5sY25acFkyVnpJaXdpYUdGelVIbEhaVzVsY21salUyVnlkbWxqWlhNaUxDSm5aWFJRYUhCSFpXNWxjbWxqVTJWeWRtbGpaWE1pTENKamJHVmhjbEJvY0VkbGJtVnlhV05UWlhKMmFXTmxjeUlzSW1oaGMxQm9jRWRsYm1WeWFXTlRaWEoyYVdObGN5SXNJbWRsZEVSbGNISmxZMkYwWldRaUxDSmpiR1ZoY2tSbGNISmxZMkYwWldRaUxDSm9ZWE5FWlhCeVpXTmhkR1ZrSWl3aVoyVjBRMk5GYm1GaWJHVkJjbVZ1WVhNaUxDSmpiR1ZoY2tOalJXNWhZbXhsUVhKbGJtRnpJaXdpYUdGelEyTkZibUZpYkdWQmNtVnVZWE1pTENKblpYUlBZbXBqUTJ4aGMzTlFjbVZtYVhnaUxDSmpiR1ZoY2s5aWFtTkRiR0Z6YzFCeVpXWnBlQ0lzSW1oaGMwOWlhbU5EYkdGemMxQnlaV1pwZUNJc0ltZGxkRU56YUdGeWNFNWhiV1Z6Y0dGalpTSXNJbU5zWldGeVEzTm9ZWEp3VG1GdFpYTndZV05sSWl3aWFHRnpRM05vWVhKd1RtRnRaWE53WVdObElpd2laMlYwVTNkcFpuUlFjbVZtYVhnaUxDSmpiR1ZoY2xOM2FXWjBVSEpsWm1sNElpd2lhR0Z6VTNkcFpuUlFjbVZtYVhnaUxDSm5aWFJRYUhCRGJHRnpjMUJ5WldacGVDSXNJbU5zWldGeVVHaHdRMnhoYzNOUWNtVm1hWGdpTENKb1lYTlFhSEJEYkdGemMxQnlaV1pwZUNJc0ltZGxkRkJvY0U1aGJXVnpjR0ZqWlNJc0ltTnNaV0Z5VUdod1RtRnRaWE53WVdObElpd2lhR0Z6VUdod1RtRnRaWE53WVdObElpd2laMlYwVUdod1RXVjBZV1JoZEdGT1lXMWxjM0JoWTJVaUxDSmpiR1ZoY2xCb2NFMWxkR0ZrWVhSaFRtRnRaWE53WVdObElpd2lhR0Z6VUdod1RXVjBZV1JoZEdGT1lXMWxjM0JoWTJVaUxDSm5aWFJTZFdKNVVHRmphMkZuWlNJc0ltTnNaV0Z5VW5WaWVWQmhZMnRoWjJVaUxDSm9ZWE5TZFdKNVVHRmphMkZuWlNJc0ltMWxjM05oWjJWVFpYUlhhWEpsUm05eWJXRjBJaXdpYm05VGRHRnVaR0Z5WkVSbGMyTnlhWEIwYjNKQlkyTmxjM052Y2lJc0ltMWhjRVZ1ZEhKNUlpd2ljMlYwVFdWemMyRm5aVk5sZEZkcGNtVkdiM0p0WVhRaUxDSnpaWFJPYjFOMFlXNWtZWEprUkdWelkzSnBjSFJ2Y2tGalkyVnpjMjl5SWl3aWMyVjBUV0Z3Ulc1MGNua2lMQ0puWlhSTlpYTnpZV2RsVTJWMFYybHlaVVp2Y20xaGRDSXNJbU5zWldGeVRXVnpjMkZuWlZObGRGZHBjbVZHYjNKdFlYUWlMQ0pvWVhOTlpYTnpZV2RsVTJWMFYybHlaVVp2Y20xaGRDSXNJbWRsZEU1dlUzUmhibVJoY21SRVpYTmpjbWx3ZEc5eVFXTmpaWE56YjNJaUxDSmpiR1ZoY2s1dlUzUmhibVJoY21SRVpYTmpjbWx3ZEc5eVFXTmpaWE56YjNJaUxDSm9ZWE5PYjFOMFlXNWtZWEprUkdWelkzSnBjSFJ2Y2tGalkyVnpjMjl5SWl3aVoyVjBUV0Z3Ulc1MGNua2lMQ0pqYkdWaGNrMWhjRVZ1ZEhKNUlpd2lhR0Z6VFdGd1JXNTBjbmtpTENKamRIbHdaU0lzSW5CaFkydGxaQ0lzSW1wemRIbHdaU0lzSW14aGVua2lMQ0ozWldGcklpd2ljMlYwUTNSNWNHVWlMQ0p6WlhSUVlXTnJaV1FpTENKelpYUktjM1I1Y0dVaUxDSnpaWFJNWVhwNUlpd2ljMlYwVjJWaGF5SXNJa05VZVhCbElpd2lRMDlTUkNJc0lsTlVVa2xPUjE5UVNVVkRSU0lzSWtwVFZIbHdaU0lzSWtwVFgwNVBVazFCVENJc0lrcFRYMU5VVWtsT1J5SXNJa3BUWDA1VlRVSkZVaUlzSW1kbGRFTjBlWEJsSWl3aVkyeGxZWEpEZEhsd1pTSXNJbWhoYzBOMGVYQmxJaXdpWjJWMFVHRmphMlZrSWl3aVkyeGxZWEpRWVdOclpXUWlMQ0pvWVhOUVlXTnJaV1FpTENKblpYUktjM1I1Y0dVaUxDSmpiR1ZoY2twemRIbHdaU0lzSW1oaGMwcHpkSGx3WlNJc0ltZGxkRXhoZW5raUxDSmpiR1ZoY2t4aGVua2lMQ0pvWVhOTVlYcDVJaXdpWjJWMFYyVmhheUlzSW1Oc1pXRnlWMlZoYXlJc0ltaGhjMWRsWVdzaUxDSmhiR3h2ZDBGc2FXRnpJaXdpYzJWMFFXeHNiM2RCYkdsaGN5SXNJbWRsZEVGc2JHOTNRV3hwWVhNaUxDSmpiR1ZoY2tGc2JHOTNRV3hwWVhNaUxDSm9ZWE5CYkd4dmQwRnNhV0Z6SWl3aWFXUmxiWEJ2ZEdWdVkzbE1aWFpsYkNJc0luTmxkRWxrWlcxd2IzUmxibU41VEdWMlpXd2lMQ0pKWkdWdGNHOTBaVzVqZVV4bGRtVnNJaXdpU1VSRlRWQlBWRVZPUTFsZlZVNUxUazlYVGlJc0lrNVBYMU5KUkVWZlJVWkdSVU5VVXlJc0lrbEVSVTFRVDFSRlRsUWlMQ0puWlhSSlpHVnRjRzkwWlc1amVVeGxkbVZzSWl3aVkyeGxZWEpKWkdWdGNHOTBaVzVqZVV4bGRtVnNJaXdpYUdGelNXUmxiWEJ2ZEdWdVkzbE1aWFpsYkNJc0ltNWhiV1ZNYVhOMElpd2laMlYwVG1GdFpVeHBjM1FpTENKcFpHVnVkR2xtYVdWeVZtRnNkV1VpTENKd2IzTnBkR2wyWlVsdWRGWmhiSFZsSWl3aWJtVm5ZWFJwZG1WSmJuUldZV3gxWlNJc0ltUnZkV0pzWlZaaGJIVmxJaXdpYzNSeWFXNW5WbUZzZFdVaUxDSm5aWFJUZEhKcGJtZFdZV3gxWlY5aGMwSTJOQ0lzSW1GblozSmxaMkYwWlZaaGJIVmxJaXdpWVdSa1RtRnRaU0lzSW5ObGRFbGtaVzUwYVdacFpYSldZV3gxWlNJc0luTmxkRkJ2YzJsMGFYWmxTVzUwVm1Gc2RXVWlMQ0p6WlhST1pXZGhkR2wyWlVsdWRGWmhiSFZsSWl3aWMyVjBSRzkxWW14bFZtRnNkV1VpTENKelpYUlRkSEpwYm1kV1lXeDFaU0lzSW5ObGRFRm5aM0psWjJGMFpWWmhiSFZsSWl3aWJtRnRaVkJoY25RaUxDSnBjMFY0ZEdWdWMybHZiaUlzSW5ObGRFNWhiV1ZRWVhKMElpd2ljMlYwU1hORmVIUmxibk5wYjI0aUxDSm5aWFJPWVcxbFVHRnlkQ0lzSW1Oc1pXRnlUbUZ0WlZCaGNuUWlMQ0pvWVhOT1lXMWxVR0Z5ZENJc0ltZGxkRWx6UlhoMFpXNXphVzl1SWl3aVkyeGxZWEpKYzBWNGRHVnVjMmx2YmlJc0ltaGhjMGx6UlhoMFpXNXphVzl1SWl3aWMyVjBUbUZ0WlV4cGMzUWlMQ0pqYkdWaGNrNWhiV1ZNYVhOMElpd2laMlYwU1dSbGJuUnBabWxsY2xaaGJIVmxJaXdpWTJ4bFlYSkpaR1Z1ZEdsbWFXVnlWbUZzZFdVaUxDSm9ZWE5KWkdWdWRHbG1hV1Z5Vm1Gc2RXVWlMQ0puWlhSUWIzTnBkR2wyWlVsdWRGWmhiSFZsSWl3aVkyeGxZWEpRYjNOcGRHbDJaVWx1ZEZaaGJIVmxJaXdpYUdGelVHOXphWFJwZG1WSmJuUldZV3gxWlNJc0ltZGxkRTVsWjJGMGFYWmxTVzUwVm1Gc2RXVWlMQ0pqYkdWaGNrNWxaMkYwYVhabFNXNTBWbUZzZFdVaUxDSm9ZWE5PWldkaGRHbDJaVWx1ZEZaaGJIVmxJaXdpWjJWMFJHOTFZbXhsVm1Gc2RXVWlMQ0pqYkdWaGNrUnZkV0pzWlZaaGJIVmxJaXdpYUdGelJHOTFZbXhsVm1Gc2RXVWlMQ0puWlhSVGRISnBibWRXWVd4MVpTSXNJbWRsZEZOMGNtbHVaMVpoYkhWbFgyRnpWVGdpTENKamJHVmhjbE4wY21sdVoxWmhiSFZsSWl3aWFHRnpVM1J5YVc1blZtRnNkV1VpTENKblpYUkJaMmR5WldkaGRHVldZV3gxWlNJc0ltTnNaV0Z5UVdkbmNtVm5ZWFJsVm1Gc2RXVWlMQ0pvWVhOQloyZHlaV2RoZEdWV1lXeDFaU0lzSW14dlkyRjBhVzl1VEdsemRDSXNJbWRsZEV4dlkyRjBhVzl1VEdsemRDSXNJbUZrWkV4dlkyRjBhVzl1SWl3aWNHRjBhRXhwYzNRaUxDSnpjR0Z1VEdsemRDSXNJbXhsWVdScGJtZERiMjF0Wlc1MGN5SXNJblJ5WVdsc2FXNW5RMjl0YldWdWRITWlMQ0pzWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1FpTENKaFpHUlFZWFJvSWl3aVlXUmtVM0JoYmlJc0luTmxkRXhsWVdScGJtZERiMjF0Wlc1MGN5SXNJbk5sZEZSeVlXbHNhVzVuUTI5dGJXVnVkSE1pTENKaFpHUk1aV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwY3lJc0ltZGxkRkJoZEdoTWFYTjBJaXdpWjJWMFUzQmhia3hwYzNRaUxDSm5aWFJNWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1FpTENKelpYUlFZWFJvVEdsemRDSXNJbU5zWldGeVVHRjBhRXhwYzNRaUxDSnpaWFJUY0dGdVRHbHpkQ0lzSW1Oc1pXRnlVM0JoYmt4cGMzUWlMQ0puWlhSTVpXRmthVzVuUTI5dGJXVnVkSE1pTENKamJHVmhja3hsWVdScGJtZERiMjF0Wlc1MGN5SXNJbWhoYzB4bFlXUnBibWREYjIxdFpXNTBjeUlzSW1kbGRGUnlZV2xzYVc1blEyOXRiV1Z1ZEhNaUxDSmpiR1ZoY2xSeVlXbHNhVzVuUTI5dGJXVnVkSE1pTENKb1lYTlVjbUZwYkdsdVowTnZiVzFsYm5Seklpd2ljMlYwVEdWaFpHbHVaMFJsZEdGamFHVmtRMjl0YldWdWRITk1hWE4wSWl3aVkyeGxZWEpNWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGMweHBjM1FpTENKelpYUk1iMk5oZEdsdmJreHBjM1FpTENKamJHVmhja3h2WTJGMGFXOXVUR2x6ZENJc0ltRnVibTkwWVhScGIyNU1hWE4wSWl3aVoyVjBRVzV1YjNSaGRHbHZia3hwYzNRaUxDSmhaR1JCYm01dmRHRjBhVzl1SWl3aWMyOTFjbU5sUm1sc1pTSXNJbUpsWjJsdUlpd2ljMlYwVTI5MWNtTmxSbWxzWlNJc0luTmxkRUpsWjJsdUlpd2laMlYwVTI5MWNtTmxSbWxzWlNJc0ltTnNaV0Z5VTI5MWNtTmxSbWxzWlNJc0ltaGhjMU52ZFhKalpVWnBiR1VpTENKblpYUkNaV2RwYmlJc0ltTnNaV0Z5UW1WbmFXNGlMQ0pvWVhOQ1pXZHBiaUlzSW5ObGRFRnVibTkwWVhScGIyNU1hWE4wSWl3aVkyeGxZWEpCYm01dmRHRjBhVzl1VEdsemRDSXNJbkJ5YjNSdlgzSndZMTkyTVY5aGRYUm9YM0JpSWl3aVFYVjBhRk5sY25acFkyVkRiR2xsYm5RaUxDSnpaWEoyYVdObFNHOXpkQ0lzSW5KbGNYVmxjM1JVZVhCbElpd2lZWFYwYUdWdWRHbGpZWFJsSWl3aVkyRnNiR0poWTJzaUxDSkZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxRMnhwWlc1MElpd2lZWFYwYUdWdWRHbGpZWFJsVkc4aUxDSndjbTkwYjE5eWNHTmZkMlZpY25SalgzWXhYM05wWjI1aGJHbHVaMTl3WWlJc0lsTnBaMjVoYkdsdVoxTmxjblpwWTJWRGJHbGxiblFpTENKQmJuTjNaWElpTENKUGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFp5SXNJbXhwYzNSbGJtVnljeUlzSW5KbGMzQnZibk5sVFdWemMyRm5aU0lzSW1oaGJtUnNaWElpTENKa1pYUmhhV3h6SWl3aWIyNGlMQ0pqWVd4c1ZYQmtZWFJsSWl3aVlXNXpkMlZ5SWl3aWIzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXY2lMQ0pwWTJWVFpYSjJaWEp6SWl3aWRYSnNjeUlzSWxKVVExQmxaWEpEYjI1dVpXTjBhVzl1SWl3aVkzSmxZWFJsUkdGMFlVTm9ZVzV1Wld3aUxDSnVaV2R2ZEdsaGRHVmtJaXdpYjNKa1pYSmxaQ0lzSW01bFoyOTBhV0YwYVc5dVEyaGhibTVsYkNJc0ltTnlaV0YwWlVGdWMzZGxjaUlzSW1GdWMzZGxja1JsYzJNaVhTd2liV0Z3Y0dsdVozTWlPaUpEUVVGQkxGTkJRVEpEUVN4RlFVRk5ReXhIUVVNeFFpeHBRa0ZCV2tNc1UwRkJNRU1zYVVKQlFWaERMRTlCUTNoRFFTeFBRVUZQUkN4UlFVRlZSQ3hKUVVOUkxHMUNRVUZZUnl4UlFVRjVRa0VzVDBGQlQwTXNTVUZET1VORUxFOUJRVThzUjBGQlNVZ3NSMEZEWlN4cFFrRkJXa01zVVVGRFpFRXNVVUZCWVN4SlFVRkpSQ3hKUVVWcVFrUXNSVUZCVlN4SlFVRkpReXhKUVZKb1FpeERRVk5IU3l4UlFVRlJMRmRCUTFnc1R5eFpRMVJGTEVsQlFVbERMRVZCUVcxQ0xFZEJSM1pDTEZOQlFWTkRMRVZCUVc5Q1F5eEhRVWMxUWl4SFFVRkhSaXhGUVVGcFFrVXNSMEZEYmtJc1QwRkJUMFlzUlVGQmFVSkZMRWRCUVZWUUxGRkJSMjVETEVsQlFVbERMRVZCUVZOSkxFVkJRV2xDUlN4SFFVRlpMRU5CUTNwRFF5eEZRVUZIUkN4RlFVTklSU3hIUVVGSExFVkJRMGhVTEZGQlFWTXNTVUZWVml4UFFVNUJWU3hGUVVGUlNDeEhRVUZWU1N4TFFVRkxWaXhGUVVGUFJDeFJRVUZUUXl4RlFVRlJRU3hGUVVGUFJDeFJRVUZUVFN4SFFVY3ZSRXdzUlVGQlQxRXNSMEZCU1N4RlFVZEtVaXhGUVVGUFJDeFJRVEJFWml4UFFYSkVRVTBzUlVGQmIwSk5MRVZCUVVsR0xFVkJSM2hDU2l4RlFVRnZRazhzUlVGQlNWSXNSVUZIZUVKRExFVkJRVzlDVVN4RlFVRkpMRk5CUVZOa0xFVkJRVk5sTEVWQlFVMURMRWRCUXpORFZpeEZRVUZ2UWxjc1JVRkJSV3BDTEVWQlFWTmxMRWxCUTJ4RFJ5eFBRVUZQUXl4bFFVRmxia0lzUlVGQlUyVXNSVUZCVFN4RFFVRkZTeXhaUVVGWkxFVkJRVTFETEVsQlFVdE1MRXRCUzJoRlZpeEZRVUZ2UW1kQ0xFVkJRVWtzVTBGQlUzUkNMRWRCUTFnc2IwSkJRVmgxUWl4UlFVRXdRa0VzVDBGQlQwTXNZVUZETVVOT0xFOUJRVTlETEdWQlFXVnVRaXhGUVVGVGRVSXNUMEZCVDBNc1dVRkJZU3hEUVVGRlF5eE5RVUZQTEZkQlJUZEVVQ3hQUVVGUFF5eGxRVUZsYmtJc1JVRkJVeXhoUVVGakxFTkJRVVY1UWl4UFFVRlBMRXRCVVhaRWJrSXNSVUZCYjBKdlFpeEZRVUZKTEZOQlFWTkVMRVZCUVU5RkxFZEJSWFpETEVkQlJGVXNSVUZCVUVFc1NVRkJWVVlzUlVGQlVXNUNMRVZCUVc5Q2JVSXNTVUZETDBJc1JVRkJVRVVzUlVGQlZTeFBRVUZQUml4RlFVTndRaXhIUVVGWExFVkJRVkJGTEVkQlFUaENMR2xDUVVGV1JpeEhRVUZ6UWtFc1IwRkJVMEVzUlVGQlRVY3NWMEZCV1N4UFFVRlBTQ3hGUVVOb1JpeEpRVUZKU1N4RlFVRkxXQ3hQUVVGUFdTeFBRVUZQTEUxQlIzWkNMRWRCUmtGNFFpeEZRVUZ2UW1kQ0xFVkJRVVZQTEVkQlEzUkNXQ3hQUVVGUFF5eGxRVUZsVlN4RlFVRkpMRlZCUVZjc1EwRkJSVlFzV1VGQldTeEZRVUZOU3l4TlFVRlBRU3hKUVVOMFJDeEZRVUZRUlN4SFFVRTBRaXhwUWtGQlZFWXNSVUZCYlVJc1NVRkJTU3hKUVVGSlRTeExRVUZQVGl4RlFVRlBia0lzUlVGQmIwSlJMRVZCUVVWbExFVkJRVWxGTEVWQlFVc3NVMEZCVTBFc1IwRkJUeXhQUVVGUFRpeEZRVUZOVFN4SlFVRlJReXhMUVVGTExFdEJRVTFFTEVsQlF6bEpMRTlCUVU5R0xFZEJTVkoyUWl4RlFVRnZRakpDTEVWQlFVa3NVMEZCVTJoRExFZEJRMmhETEVsQlFVbGxMRVZCUVZObUxFZEJRVlZCTEVWQlFVOHlRaXhYUVVNM1FpeFhRVUYzUWl4UFFVRlBNMElzUlVGQlowSXNVMEZETDBNc1YwRkJPRUlzVDBGQlQwRXNSMEZGZEVNc1QwRkVRVXNzUlVGQmIwSlJMRVZCUVVWRkxFVkJRVkVzU1VGQlMwRXNSMEZETlVKQkxFZEJTVkpXTEVWQlFXOUNWeXhGUVVGSkxGTkJRVk5wUWl4RlFVRlJReXhIUVVGWkxFOUJRVTlxUWl4UFFVRlBhMElzVlVGQlZVTXNaVUZCWlRGQ0xFdEJRVXQxUWl4RlFVRlJReXhKUVVkNlJ6ZENMRVZCUVc5Q1owTXNSVUZCU1N4SFFVbHFRbWhETEVWQlFXOUNRU3hGUVVGdlFtbERMRVZCUVVrc1J5eG5SRU5zUm5KRUxHZEVRVUYzUWtNc1VVRkJVVU1zVFVGQlRTeEhRVUZIUkN4UlFVRlJSU3hoUVVGaExGTkJRVk5ETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZIT0VJc1lVRkJZVVVzVTBGQlUwWXNSVUZCUlVVc1QwRkJUMFlzU1VGQlNTeEpRVUZKTEVsQlFVazNRaXhGUVVGRk5rSXNSVUZCUlVjc1QwRkJUME1zUlVGQlJTeEZRVUZGUVN4RlFVRkZha01zUlVGQlJXbERMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGVEN4RlFVRkZTU3hIUVVGSExFZEJRVWRJTEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGYlVNc1JVRkJSVVFzUlVGQlJVb3NSMEZCUnl4TlFVRk5MRU5CUVVOdVF5eEZRVUZGZFVNc1JVRkJSVVVzUlVGQlJVUXNSMEZCUnl4TlFVRk5MRU5CUVVONFF5eEhRVUZITEVWQlFVVjVReXhQUVVGRkxFbEJRVk5VTEZGQlFWRlZMRmxCUVZjc1JVRkJSMVlzVVVGQlVWY3NjMEpCUVhGQ0xFVkJRVWRZTEZGQlFWRlpMSE5DUVVGeFFpeEZRVUZIV2l4UlFVRlJZU3gzUWtGQmRVSXNSVUZETTFWaUxGRkJRVkZ5UWl4bFFVRmxjVUlzVVVGQlVWVXNXVUZCV1N4dFFrRkJiVUpvUXl4UFFVRlBiME1zYVVKQlFXbENjRU1zVDBGQlQwTXNaVUZCWlN4VFFVRlRkMElzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWM0UWl4SFFVRkhXU3hOUVVGTmJrSXNWMEZCVjA4c1IwRkJSM3BDTEU5QlFVOXJRaXhaUVVGWlR5eEZRVUZGUXl4SFFVRkhMMElzUlVGQlJWa3NVVUZCVVdVc1VVRkJVV2RDTEZWQlFWVXNVMEZCVTJJc1IwRkJSeXhOUVVGTkxHOUNRVUZ2UW5aRExGRkJRVkZCTEZOQlFWTjFReXhGUVVGRlFTeFBRVUZGTEVsQlFXOUNZeXhSUVVGUkxFMUJRVTFCTEU5QlFVOUJMRTlCUVU5a0xFZEJRVWRJTEZGQlFWRnBRaXhQUVVGUGFrSXNVVUZCVVdkQ0xGVkJRVlZGTEUxQlEzUldiRUlzVVVGQlVXMUNMRk5CUVZNc1UwRkJVMmhDTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRWRCUVVjNFFpeEZRVUZGTEVOQlFXbERMRWxCUVdoREwwSXNSVUZCUlRKQ0xGRkJRVkZwUWl4UFFVRlBaQ3hGUVVGRlFTeEZRVUZGYVVJc1RVRkJUU3hMUVVGVE9VTXNSVUZCUlN4RlFVRkZRU3hGUVVGRk5rSXNSVUZCUlVjc1QwRkJUeXhGUVVGRmFFTXNTVUZCU1N4RFFVRkRMRWxCUVVscFF5eEZRVUZGU2l4RlFVRkZOMElzUjBGQlIybERMRXRCUVV0c1F5eEpRVUZKUVN4RlFVRkZhME1zUjBGQlJ5eEpRVUZKYkVNc1JVRkJSVUVzUlVGQlJXdERMRWxCUVRCQ1NDeEZRVUZGUVN4RlFVRlVPVUlzUlVGQlJVUXNSVUZCYkVJNFFpeEZRVUZGUVN4RlFVRkZRU3hGUVVGRlJ5eFBRVUZQTEU5QlFXOUNhRU1zUjBGQlJ5eE5RVUZOT0VJc1IwRkJSMG9zVVVGQlVYSkNMR1ZCUVdWT0xFVkJRVVU0UWl4RlFVRkZMRU5CUVVOclFpeGpRVUZoTEVWQlFVZERMRlZCUVZNc1JVRkJSM0pETEUxQlFVMXRRaXhOUVVGTlNpeFJRVUZSYlVJc1UwRkJVeXcyUWtGQk5FSXNVMEZCVTJoQ0xFZEJRVWNzVDBGQlQwRXNSMEZCU1N4VFFVRlRRU3hGUVVGRk9VSXNSMEZCUnl4UFFVRlBNa0lzVVVGQlVVVXNZVUZCWVdkQ0xFdEJRVXRtTEVWQlFVVTVRaXhIUVVGSFRDeExRVUZKTEUxQlFVMHNUMEZETVZoblF5eFJRVUZSZFVJc1owSkJRV2RDTEZOQlFWTndRaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhIUVVGSExFMUJRVTA0UWl4RlFVRkZMRTFCUVUwc1NVRkJTWEZDTEZWQlFWVXNlVU5CUVhsRGJrUXNSVUZCUlN4clEwRkJhME1zUjBGQlJ5dENMR0ZCUVdGeFFpeFBRVUZQTEUxQlFVMHNTVUZCU1VRc1ZVRkJWU3h6UTBGQmMwTnVSQ3hGUVVGRkxIRkRRVUZ4UXl4UFFVRlBPRUlzUlVGQlJTeEpRVU55VWtnc1VVRkJVVzFDTEZOQlFWTXNOa0pCUVRSQ0xGTkJRVk5vUWl4SFFVRkhMRTlCUVU5QkxFZEJRVWtzVTBGQlUwRXNSVUZCUlRsQ0xFZEJRVWNzU1VGQlNTdENMRVZCUVVWS0xGRkJRVkYxUWl4blFrRkJaMEpNTEV0QlFVdG1MRVZCUVVVc1dVRkJXVUVzUjBGQlJ5eFJRVUZITEVsQlFWTTVRaXhKUVVGSlFTeEZRVUZGSzBJc1JVRkJSVVVzVVVGQlVXcERMRVZCUVVWeFJDeExRVUZMUXl4SlFVRkpMRVZCUVVWRUxFdEJRVXRGTEVsQlFVMHNSVUZCUm5aRUxFVkJRVWtyUWl4RlFVRkZSU3hUUVVGVExFbEJRVWtzU1VGQlNVTXNSVUZCUlVvc1JVRkJSVWNzVDBGQlR5eEZRVUZGUXl4SFFVRkhMRVZCUVVWc1F5eEhRVUZITEVkQlFVY3JRaXhKUVVGSkwwSXNTVUZCU1RoQ0xFbEJRVWxKTEVkQlFVY3NUMEZCVFN4RlFVRkhMRTlCUVU4c1IwRkJSMEVzUzBGQlNTeE5RVUZOTEU5QlFVOVFMRkZCUVZGdFFpeFRRVUZUTEhkQ1FVRjFRaXhUUVVGVGFFSXNSMEZCUnl4UFFVRlBRU3hIUVVGSkxGTkJRVk5CTEVWQlFVVTVRaXhIUVVGSExFOUJRVTh5UWl4UlFVRlJSU3hoUVVGaFowSXNTMEZCUzJZc1JVRkJSVGxDTEVkQlFVZHZReXhMUVVGSkxFMUJRVTBzVDBGRGRscFVMRkZCUVZGdFFpeFRRVUZUTEN0Q1FVRTRRaXhUUVVGVGFFSXNSMEZCUnl4UFFVRlBRU3hIUVVGSkxGTkJRVk5CTEVWQlFVVTVRaXhIUVVGSExFbEJRVWtyUWl4RlFVRkZTaXhSUVVGUmRVSXNaMEpCUVdkQ1RDeExRVUZMWml4RlFVRkZMR05CUVdOQkxFZEJRVWNzUjBGQlJ5eEpRVUZKU1N4RlFVRkZTQ3hGUVVGRlJTeFBRVUZQUlN4RlFVRkZUQ3hGUVVGRlJ5eFBRVUZQYWtNc1JVRkJSWEZFTEV0QlFVdERMRWxCUVVrc1JVRkJSVVFzUzBGQlMwVXNTVUZCVFN4RlFVRkdka1FzUlVGQlNTdENMRVZCUVVWRkxGTkJRVk1zU1VGQlNTeEpRVUZKZFVJc1JVRkJSU3hGUVVGRlFTeEZRVUZGY2tJc1IwRkJSMjVETEVWQlFVVnJReXhIUVVGSExFZEJRVWRJTEVWQlFVVXZRaXhOUVVGTk9FSXNSVUZCUlRCQ0xFdEJRVXNzVDBGQlRTeEZRVUZITEU5QlFVOUJMRWRCUVVkeVFpeExRVUZKTEUxQlFVMHNUMEZEYWxKU0xGRkJRVkZ0UWl4VFFVRlRMREpDUVVFd1FpeFRRVUZUYUVJc1IwRkJSeXhQUVVGUFFTeEhRVUZKTEZOQlFWTkJMRWRCUVVjc1NVRkJTVU1zUlVGQlJVb3NVVUZCVVhWQ0xHZENRVUZuUWt3c1MwRkJTeXhMUVVGTExGVkJRVlVzUjBGQlJ5eEZRVUZGWml4SFFVRkhMRmRCUVZkQkxFVkJRVVVzVFVGQlRTeEpRVUZKTWtJc1YwRkJWeXgxUWtGQmRVSXpRaXhIUVVGSExFVkJRVVVzU1VGQlNTeEpRVUZKTjBJc1JVRkJSU3hIUVVGSE5rSXNSMEZCVVN4RlFVRkdRU3hKUVVGTk4wSXNSMEZCUnpoQ0xFbEJRVWRFTEV0QlFVc3NTMEZCUlVNc1IwRkJSMEVzUjBGQlJTeFBRVUZQT1VJc1MwRkJTU3hOUVVGTkxFOUJRVThzU1VGQlNYbEVMRlZCUVZNc1JVRkJSME1zUzBGQlMwRXNUVUZCVFN4SFFVRkhRU3hMUVVGTFppeFBRVUZQUXl4TlFVRk5aU3hMUVVGTFJDeExRVUZMUlN4TlFVRk5MRk5CUVZNdlFpeEhRVUZITEZsQlFVOHNTVUZCVTBFc1IwRkJSelpDTEV0QlFVdEhMRk5CUVZNc1UwRkJVMmhETEVkQlFVY3NUVUZCVFN4cFFrRkJhVUpCTEVkQlFVYzJRaXhMUVVGTFNTeFZRVUZWTEZOQlFWTnFReXhIUVVGSExFMUJRVTBzYTBKQlFXdENRU3hIUVVNdll6WkNMRXRCUVV0TExGTkJRVk1zVTBGQlUyeERMRWRCUVVjc1RVRkJUU3hwUWtGQmFVSkJMRWRCUVVjMlFpeExRVUZMVFN4WlFVRlpMRk5CUVZOdVF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ6aENMRVZCUVVWQkxFVkJRVVZwUWl4TlFVRk5MRXRCUVVzdlF5eEZRVUZGUVN4SFFVRkhNa1FzUzBGQlMyWXNUMEZCVDJRc1JVRkJSU3hMUVVGTE9VSXNVVUZCUnl4SlFVRnZRa0VzUlVGQlJXdEZMRmxCUVZsc1JTeEZRVUZGYTBVc1YwRkJWeXhQUVVGUGNFTXNSVUZCUlN4SlFVRkpMRWxCUVVrc1NVRkJTVGRDTEVWQlFVVTJRaXhGUVVGRlJ5eFRRVUZUYUVNc1JVRkJSVFpDTEVWQlFVVnhReXhYUVVGWGNrTXNSVUZCUlVjc1VVRkJVVEJDTEV0QlFVdEZMRTFCUVUwNVFpeEhRVUZITDBJc1JVRkJSVU1zUjBGQlJ6aENMRVZCUVVVdlFpeEZRVUZGUVN4RlFVRkZReXhKUVVGSlJDeEZRVUZGUXl4TFFVRkxTU3hQUVVGUGEwSXNWVUZCVlhSQ0xFZEJRVWRFTEVWQlFVVkRMRWRCUVVkRUxFVkJRVVZETEVkQlFVY3NTVUZETTFNd1JDeExRVUZMZEVVc1QwRkJUeXhUUVVGVGVVTXNSVUZCUlVNc1IwRkJSeXhKUVVGSk1rSXNVMEZCVXl4RFFVRkRMRWxCUVVreFJDeEZRVUZGTWtRc1MwRkJTMllzVDBGQlQzZENMREpDUVVFeVFtNUZMRVZCUVVVd1JDeExRVUZMWml4UFFVRlBlVUlzWjBKQlFXZENja1VzVVVGQlJ5eEpRVUZUUVN4RlFVRkZjMFVzVlVGQlZXcEZMRTlCUVU5clFpeFZRVUZWUXl4bFFVRmxNVUlzUzBGQlMwVXNSVUZCUlRoQ0xFZEJRVWRETEVWQlFVVXZRaXhGUVVGRk9FSXNSMEZCUnpkQ0xGRkJRVWNzU1VGQlUwRXNSVUZCUlhGRkxGVkJRVlZxUlN4UFFVRlBhMElzVlVGQlZVTXNaVUZCWlRGQ0xFdEJRVXRITEVWQlFVVTJRaXhMUVVGTFF5eEZRVUZGT1VJc1JVRkJSVFpDTEVsQlFVa3NUMEZCVDBNc1IwRkJSelJDTEV0QlFVdFpMR2RDUVVGblFpeExRVUZMV2l4TFFVRkxZU3hQUVVGTkxFVkJRVWRpTEV0QlFVdGpMRTlCUVU4c1MwRkJTMlFzUzBGQlMyVXNZMEZCWVN4RlFVRkhaaXhMUVVGTFowSXNkMEpCUVhWQ0xFVkJRVWRvUWl4TFFVRkxhVUlzZDBKQlFYZENiRUlzVjBGQlYwTXNTMEZCUzJFc1RVRkJUV0lzUzBGQlMydENMSFZEUVVGelF5eEZRVU0zWkd4Q0xFdEJRVXR0UWl4UlFVRlJMRk5CUVZOb1JDeEhRVUZITEVkQlFVYzJRaXhMUVVGTGIwSXNiMEpCUVc5Q0xFMUJRVTFETEUxQlFVMHNaMFJCUVdkRUxFbEJRVWwwUWl4VlFVRlZReXhMUVVGTGMwSXNXVUZCV1c1RUxFZEJRVWNzVFVGQlRXdEVMRTFCUVUwc1kwRkJZMnhFTEVWQlFVVXNkVUpCUVhWQ05rSXNTMEZCUzNWQ0xHOUNRVUZ2UW5CRUxFbEJRVWsyUWl4TFFVRkxkVUlzYjBKQlFXOUNMRk5CUVZOd1JDeEZRVUZGUXl4SFFVRkhMRWxCUVVreVFpeFRRVUZUTEZGQlFWRkRMRXRCUVV0M1FpeHZRa0ZCYjBKeVJDeEhRVUZITEVsQlFVa3NTVUZCU1RsQ0xFVkJRVVU0UWl4SFFVRkhPVUlzUlVGQlJVRXNSVUZCUlc5R0xGVkJRVlVzUlVGQlJYQkdMRVZCUVVWeFJpeFpRVUZaTEZOQlFWTXhRaXhMUVVGTE1rSXNaMEpCUVdkQ2RFWXNTVUZCU1RKRUxFdEJRVXQzUWl4dlFrRkJiMEp1Uml4SlFVRkhMRVZCUVVjeVJDeExRVUZMVFN4WlFVRlpia01zUlVGQlJVTXNTVUZETVdJMFFpeExRVUZMTkVJc1pVRkJaU3hUUVVGVGVrUXNSMEZCUnl4UFFVRkhRU3hIUVVGSFFTeEhRVUZITmtJc1MwRkJTMllzVDBGQlkyVXNTMEZCU3paQ0xHZENRVUZuUWpGRUxFVkJRVVV5UkN4WFFVRlZMRTlCUVU4NVFpeExRVUZMSzBJc1dVRkJXUzlDTEV0QlFVc3JRaXhWUVVGVkwwSXNTMEZCU3paQ0xHZENRVUZuUWpkQ0xFdEJRVXRtTEU5QlFVODJReXhYUVVGclFqbENMRXRCUVVzclFpeFpRVUZYTDBJc1MwRkJTMmRETEdWQlFXVXNjMEpCUVhOQ2FFTXNTMEZCU3l0Q0xGVkJRVlVzUzBGQlN5OUNMRXRCUVVzMlFpeG5Ra0ZCWjBJc1UwRkJVekZFTEVkQlFVY3NUMEZCVDBFc1JVRkJSVUVzUlVGQlJUaEVMR1ZCUVdVNVJDeEZRVUZGT0VRc1kwRkJZeXh2UWtGQmIwSTVSQ3hGUVVGRlFTeEZRVUZGSzBRc1QwRkJUeTlFTEVWQlFVVm5SU3hoUVVGaExGZEJRVmR1UXl4TFFVRkxaME1zWlVGQlpVa3NTMEZCUzJwRkxFZEJRVWRCTEVWQlFVVXNTVUZCU1RaQ0xFdEJRVXR4UXl4cFFrRkJhVUlzT0VKQlEycGpja01zUzBGQlMzWkZMRTlCUVU4c1UwRkJVekJETEVkQlFVY3NTVUZCU1RaQ0xFdEJRVXRITEZOQlFWTm9ReXhMUVVGTFFTeEpRVUZKTEVkQlFVZEJMRVZCUVVWdFJTeFBRVUZQZEVNc1MwRkJTM0ZETEd0Q1FVRnJRaXhOUVVGTmFFSXNUVUZCVFN3MlFrRkJOa0lzU1VGQlNYSkNMRXRCUVV0MVF5eDNRa0ZCZDBJc1RVRkJUV3hDTEUxQlFVMHNWVUZCVld4RUxFVkJRVVVzTkZoQlEzaE1MRWRCUVVjMlFpeExRVUZMZDBNc2JVSkJRVzFDUXl4WFFVRlhMRTFCUVUxd1FpeE5RVUZOTEcxRVFVRjNSaXhIUVVGeVEzSkNMRXRCUVV0M1F5eHRRa0ZCYlVKRExGZEJRVmQwUlN4SFFVRk5ORUlzVTBGQlV5eERRVUZETEVkQlFVZERMRXRCUVV0elFpeFpRVUZaYmtRc1IwRkJSeXhOUVVGTmEwUXNUVUZCVFN4alFVRmpiRVFzUlVGQlJTdzRRa0ZCT0VJMlFpeExRVUZMZDBJc2IwSkJRVzlDY2tRc1MwRkJTelpDTEV0QlFVdDJSU3hQUVVGUGIwSXNTVUZCU1N4VFFVRlRjMElzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTM1pGTEU5QlFVOXBTQ3hoUVVGaGRrVXNTVUZEYmxVMlFpeExRVUZMZGtVc1QwRkJUMmxJTEdGQlFXRXNVMEZCVTNaRkxFZEJRVWNzU1VGQlNUUkNMRk5CUVZNc1EwRkJReXhIUVVGSE5VSXNTMEZCU3paQ0xFdEJRVXN5UXl4bFFVRmxMRTlCUVU4elF5eExRVUZMTWtNc1pVRkJaWGhGTEVkQlFVY3pReXhSUVVGUkxFbEJRVWwzUlN4TFFVRkxkMElzYjBKQlFXOUNja1FzUjBGQlJ5eFBRVUZwUXl4UFFVRXhRa0VzUlVGQlJUWkNMRXRCUVVzeVFpeG5Ra0ZCWjBKNFJDeEpRVUZYUVN4RlFVRkZMRXRCUVVzc1QwRkJUeXhOUVVGTk5rSXNTMEZCU3pSRExGZEJRVmNzUTBGQlEwTXNTVUZCU1N4TlFVRk5ReXhMUVVGTExGRkJRVkU1UXl4TFFVRkxkME1zYlVKQlFXMUNMRXRCUVV0NFF5eExRVUZMYjBJc2EwSkJRV3RDTEZkQlFWY3NUMEZCVDNCQ0xFdEJRVXQxUXl4NVFrRkJlVUoyUXl4TFFVRkxLME1zZDBKQlFYZENMME1zUzBGQlMzVkRMSE5DUVVGelFpeFhRVUZYTEZGQlFWRjJReXhMUVVGTGQwTXNiMEpCUVc5Q2VFTXNTMEZCUzNkRExHMUNRVUZ0UWxFc1RVRkJUV2hFTEV0QlFVczBReXhYUVVGWFJTeE5RVU5vWmpsRExFdEJRVXNyUXl4eFFrRkJjVUlzVjBGQlZ5eEhRVUZITDBNc1MwRkJTM2RETEc5Q1FVRnZRbmhETEV0QlFVdDNReXh0UWtGQmJVSlJMRTFCUVUxb1JDeExRVUZMTkVNc1YwRkJWME1zU1VGQlNTeFBRVUZOTEVWQlFVY3NTVUZCU1RGRkxFVkJRVVUyUWl4TFFVRkxaaXhQUVVGUGFrSXNVVUZCVVN4UlFVRlBSeXhKUVVGRkxHMUNRVUZ0UWtFc1JVRkJSVGhGTEhkQ1FVRXdRamxGTEVWQlFVVTRSU3g1UWtGRGFFNXFSQ3hMUVVGTGRrVXNUMEZCVDNsSUxIVkNRVUYxUWl4WFFVRlhMRWxCUVVsdVJDeFhRVUZYUXl4TFFVRkxkVU1zZDBKQlFYZENMRTFCUVUxc1FpeE5RVUZOTEN0RlFVRXJSU3hKUVVGSmRFSXNWMEZCVjBNc1MwRkJTM2RETEcxQ1FVRnRRa01zVjBGQlZ5eE5RVUZOY0VJc1RVRkJUU3d5UlVGQk1rVnlRaXhMUVVGTGQwTXNiVUpCUVcxQ1ZTeDNRa0ZCZFVJc1IwRkROMWRzUkN4TFFVRkxiVVFzWjBKQlFXZENMRk5CUVZOb1JpeEhRVUZITEVsQlFVazBRaXhUUVVGVExFTkJRVU1zU1VGQlNVTXNTMEZCU3l0RExIVkNRVUYxUWl4TlFVRk5NVUlzVFVGQlRTeHhSVUZCY1VVc1IwRkJSM0pDTEV0QlFVdDNReXh2UWtGQmIwSjRReXhMUVVGTGQwTXNiVUpCUVcxQ1F5eFhRVUZYTEUxQlFVMXdRaXhOUVVGTkxEUkVRVUUwUkN4SFFVRkhiRVFzUzBGQlN6WkNMRXRCUVVzeVF5eGxRVUZsTEUxQlFVMTBRaXhOUVVGTkxEQkNRVUV3UW14RUxFVkJRVVVzY1VKQlFYTkNMRWRCUVVjMlFpeExRVUZMZDBNc2JVSkJRVzFDZUVNc1MwRkJTM2RETEcxQ1FVRnRRa01zVjBGQlYzUkZMRTFCUVUwc1EwRkJReXhKUVVGSlF5eEZRVUZGTkVJc1MwRkJTMllzVDBGQlQycENMRkZCUVZFc1NVRkJTVWtzUjBGQlJ5eHRRa0ZCYlVKQkxFVkJRVVUyUlN4eFFrRkJjVUlzVFVGQlRUVkNMRTFCUVUwc01FSkJRemRvUW14RUxFVkJRVVVzYTBOQlFXdERReXhGUVVGRlFTeEZRVUZGWjBZc1VVRkJVV2hHTEVWQlFVVTJSU3gzUWtGQmQwSnFSQ3hMUVVGTE1rTXNaVUZCWlhoRkxFZEJRVWNzUTBGQlF6TkRMRkZCUVZFMFF5eEZRVUZGTkVVc1MwRkJTMmhFTEV0QlFVczBReXhYUVVGWFF5eEpRVUZKT1Vjc1UwRkJVMjlETEV0QlFVczJRaXhMUVVGTGNVUXNXVUZCV1N4VFFVRlRiRVlzUjBGQlJ5eEhRVUZITmtJc1MwRkJTMmxDTEhkQ1FVRjNRaXhOUVVGTk9VTXNSVUZCUlVFc1IwRkJSeXhIUVVGSGEwUXNUVUZCVFN4MVJFRkJkVVJzUkN4RlFVRkZMRXRCUVV0QkxFVkJRVVVzVDBGQlVUWkNMRXRCUVV0elJDeGxRVUZsTEZOQlFWTnVSaXhMUVVONlZUUkNMRmRCUVZkRExFdEJRVXR6UWl4WlFVRlpMRk5CUVZOdVJDeEhRVUZITEU5QlFVOUJMRXRCUVVzMlFpeExRVUZMTWtNc2FVSkJRV2xDTTBNc1MwRkJTM2RDTEc5Q1FVRnZRbkpFTEVsQlFVazJRaXhMUVVGTGRVUXNaMEpCUVdkQ2RrUXNTMEZCU3pKQ0xHZENRVUZuUW5oRUxFdEJRVXMyUWl4TFFVRkxkMElzYjBKQlFXOUNMRU5CUVVNc1pVRkJZeXhKUVVGTGVFSXNTMEZCU3pKQ0xHZENRVUZuUWl4VFFVRlRlRVFzUlVGQlJVTXNSMEZCUjBRc1JVRkJSVUVzUlVGQlJXbENMRTFCUVUwc1MwRkJTMmhDTEVWQlFVVkJMRWRCUVVjMFFpeExRVUZMWml4UFFVRlBMRWxCUVVrc1NVRkJTVFZETEVWQlFVVXNSVUZCUlVFc1JVRkJSVGhDTEVWQlFVVkhMRTlCUVU5cVF5eEpRVUZKTEVkQlFVY3JRaXhGUVVGRlFTeEZRVUZGUkN4RlFVRkZPVUlzUzBGQlN6SkVMRXRCUVV0MVJDeG5Ra0ZCWjBKdVJpeEhRVUZITEU5QlFVOHNTMEZCU3l4UFFVRlBRU3hIUVVGSE5FSXNTMEZCUzNkRUxGVkJRVlVzVTBGQlUzSkdMRVZCUVVWRExFZEJRVzlDTEVsQlFVa3NTVUZCU1M5Q0xFdEJRWHBDSzBJc1JVRkJSVUVzUjBGQlJ6UkNMRXRCUVV0bUxFOUJRVzlDWkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpoQ0xFVkJRVVU1UWl4SlFVTnFZVEpFTEV0QlFVdDVSQ3hqUVVGakxGTkJRVk4wUml4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1NVRkJTWGxFTEZWQlFWVkRMRXRCUVVzd1JDeHpRa0ZCYzBJeFJDeExRVUZMTWtRc1lVRkJZVVlzWTBGQlkzUkdMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhKUVVGSk1FUXNTMEZCU3pSRUxIRkNRVUZ2UWl4RlFVRkhOVVFzUzBGQlN6WkVMR05CUVdNc1UwRkJVekZHTEVkQlFVYzJRaXhMUVVGTFppeFBRVUZQTmtVc1UwRkJVemxFTEV0QlFVdG1MRTlCUVU4MlJTeFJRVUZSUXl4TlFVRk5OVVlzU1VGREwwNDJRaXhMUVVGTGIwUXNVVUZCVVN4VFFVRlRha1lzUjBGQlJ5eEpRVUZKTkVJc1UwRkJVeXhEUVVFd1JDeEhRVUY2UkVNc1MwRkJTelJFTEhGQ1FVRnhRalZFTEV0QlFVc3lSQ3hoUVVGaFN5eFZRVUZWTjBZc1IwRkJUVFpDTEV0QlFVdHpRaXhaUVVGWmJrUXNTVUZCU1N4SFFVRkhOa0lzUzBGQlMyOUNMRzlDUVVGdlFpeFBRVUZQY0VJc1MwRkJTM1pGTEU5QlFVOXBTQ3hoUVVGaGRrVXNVVUZCVVN4SFFVRkhOa0lzUzBGQlN6UkVMRzlDUVVGdlFpeERRVUZETEVsQlFVbDRSaXhGUVVGRk5FSXNTMEZCUzNkRExHMUNRVUZ0UW5oRExFdEJRVXQzUXl4dFFrRkJiVUlzUzBGQlN5eEpRVUZKZUVNc1MwRkJTekpFTEdGQlFXRk5MRTFCUVUwNVJpeEhRVUZITEZGQlFWRTJRaXhMUVVGTGQwTXNiVUpCUVcxQ2NFVXNSMEZCUnl4UFFVRlBMRTlCUVU4MFFpeExRVUZMYTBVc1dVRkJXU3hUUVVGVEwwWXNSMEZCUnl4TlFVRk5MRWxCUVVrMlFpeExRVUZMYlVVc1UwRkJVeXhIUVVGSGJrVXNTMEZCUzI5RkxHRkJRV0VzWVVGRE9XRndSU3hMUVVGTGNVVXNaVUZCWlN4WFFVRlhMRTFCUVUxb1JDeE5RVUZOTEd0RFFVRnRRM0pDTEV0QlFVdHpSU3h0UWtGQmJVSXNVMEZCVTI1SExFZEJRVWRCTEVWQlFVVnZSeXhsUVVGVkxFVkJRVTl3Unl4RlFVRkZjVWNzV1VGQldTeFhRVUZYTEU5QlFVZHlSeXhGUVVGRmIwY3NWVUZCYVVKd1J5eEZRVUZGYjBjc1YwRkJWWFpGTEV0QlFVdGhMRkZCUVZGaUxFdEJRVXQ1UlN4M1FrRkJkMEo2UlN4TFFVRkxlVVVzZDBKQlFYZENia2NzVVVGQlVVZ3NSMEZCVlVFc1JVRkJSVzlITEZWQlFWVXNTVUZCU1hCSExFdEJRVWsyUWl4TFFVRkxlVVVzZDBKQlFYZENMRWRCUVVkNlJTeExRVUZMTUVVc2QwSkJRWFZDTEVWQlFVY3hSU3hMUVVGTE1rVXNiMEpCUVc5Q00wVXNTMEZCUzJFc1RVRkJUV0lzUzBGQlN6SkRMR1ZCUVdVc1IwRkJSek5ETEV0QlFVc3dSQ3h6UWtGQmMwSXpSQ3hWUVVGVlF5eExRVUZMTkVRc2IwSkJRVzlDTlVRc1MwRkJTelJGTEZWQlFWVXNVMEZEY0dZMVJTeExRVUZMTmtVc09FSkJRVFpDTEVWQlFVYzNSU3hMUVVGTE9FVXNjMEpCUVhOQ0xFZEJRVWM1UlN4TFFVRkxLMFVzVjBGQlZ5eGxRVUZsTDBVc1MwRkJTMmRHTEdsQ1FVRnBRaXhMUVVGTGFFWXNTMEZCUzJsR0xITkNRVUZ6UWl4WFFVRlhMRWRCUVVjc1RVRkJUV3BHTEV0QlFVdG5SaXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRWxCUVVrM1J5eEhRVUZISzBjc1MwRkJTeXc0UlVGQk9FVXNUVUZCVFRsSExFZEJRVWRFTEVkQlFVVXNSVUZCUnpaQ0xFdEJRVXRuUml4cFFrRkJhVUkzUnl4RlFVRkZMRTlCUVU4MlFpeExRVUZMWjBZc2EwSkJRV3RDYUVZc1MwRkJTMjFHTERCQ1FVRXdRaXhUUVVGVGFFZ3NSMEZCUnl4TlFVRk5MR1ZCUVdWQkxFVkJRVVVzWTBGRGRtRTJRaXhMUVVGTGIwWXNWMEZCVnl4VFFVRlRha2dzUjBGQlJ5eEpRVUZKUXl4RlFVRkZORUlzUzBGQlMzZERMRzFDUVVGdFFpeEpRVUZuUnl4SFFVRTFSbmhETEV0QlFVdDNReXh0UWtGQmJVSXNRMEZCUTBNc1YwRkJWeXhIUVVGSFV5eDNRa0ZCZFVJc1JVRkJSMFlzUzBGQlMyaEVMRXRCUVVzMFF5eFhRVUZYUlN4TlFVRlRPVU1zUzBGQlMzRkdMRmRCUVZkc1NDeEhRVUZITEVsQlFVazVRaXhGUVVGRk9FSXNSVUZCUldoRExGVkJRVXNzUlVGQlR5eFJRVUZUTEV0QlFVYzJSQ3hMUVVGTFJ5eFRRVUZUYUVNc1IwRkJkMGdzVFVGQlRXdEVMRTFCUVUwc05rSkJRV3BKY2tJc1MwRkJTMmxHTERCQ1FVRXdRamxITEVWQlFVVTJRaXhMUVVGTGJVWXNNRUpCUVRCQ2FFZ3NTVUZCU1RsQ0xFVkJRVVV5UkN4TFFVRkxjMFlzYzBKQlFYTkNia29zVlVGQlN5eEZRVUZQWjBNc1IwRkJhVVFzU1VGQlNUZENMRVZCUVVVd1JDeExRVUZMZDBNc2JVSkJRVzFDUXl4WFFVRlhMRWxCUVVkNlF5eExRVUZMUnl4VFFVRlROMFFzUzBGQlNVRXNSVUZEZWxBc1RVRkJUU3RGTEUxQlFVMHNkMEpCUVhkQ0wwVXNSVUZCUlN4TFFVUnhUakJFTEV0QlFVdDNReXh0UWtGQmJVSlZMSFZDUVVGMVFteEVMRXRCUVV0MVFpeHZRa0ZCYjBKcVJpeEZRVU4yWjBKRUxFZEJRVWN5UkN4TFFVRkxNa1VzY1VKQlFYRkNha2tzVDBGQlR6WkpMRTFCUVUwc2FVSkJRV2xDYkVvc1IwRkJSeXhOUVVGTlFTeEhRVUZIU3l4UFFVRlBOa2tzUzBGQlMyeEtMRWRCUVVjeVJDeExRVUZMTWtNc1pVRkJaWEpITEVkQlFVY3NRMEZCUTJRc1VVRkJVV0VzUlVGQlJUSkhMRXRCUVV0b1JDeExRVUZMTkVNc1YwRkJWMFVzUzBGQlN5OUhMRk5CUVZOcFJTeExRVUZMZDBNc2JVSkJRVzFDUXl4WlFVRTJSQ3hSUVVGUmVrTXNTMEZCUzNkRExHMUNRVUZ0UW5CRkxFbEJRVWswUWl4TFFVRkxjMFlzYzBKQlFYTkNMRk5CUVZOdVNDeEhRVUZYTEU5QlFWSXJSeXhMUVVGTEwwY3NSMEZCVXl4SlFVRkpOa0lzUzBGQlMzZEdMR1ZCUVdVc1UwRkJVM0pJTEVkQlFVZEJMRVZCUVVWQkxFVkJRVVZwUWl4TlFVRk5MRXRCUVVzc1NVRkJTU3hKUVVGSmFFSXNSVUZCUlN4RlFVRkZRU3hGUVVGRlJDeEZRVUZGUnl4UlFVRlJMRXRCUVV0SUxFVkJRVVZETEVkQlFVZEVMRVZCUVVWelNDeFBRVUZQY2tnc1JVRkJSU3hIUVVGSFFTeEhRVUZITEUxQlFVMUVMRVZCUVVWRExFbEJRVWxFTEVWQlFVVkRMRVZCUVVVc1NVRkJTU3hOUVVGTlJDeEZRVUZGUXl4RlFVRkZMRWRCUVVkRUxFVkJRVVZ6U0N4VFFVRlRja2dzUlVGQlJTeEhRVUZIUVN4SlFVRkpMRTlCUVU5RUxFVkJRVVYxU0N4TFFVRkxMRTFCUTJ4bU1VWXNTMEZCU3pKR0xHTkJRV01zVTBGQlUzaElMRWRCUVVjc1IwRkJSelpDTEV0QlFVdG1MRTlCUVU4eVJ5eDFRa0ZCZFVJc1QwRkJUelZHTEV0QlFVdG1MRTlCUVU4eVJ5eDFRa0ZCZFVKNlNDeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hKUVVGSk5FSXNTMEZCUzJZc1QwRkJUelJITEdWQlFUSkRMRTlCUVRWQ2VrZ3NSVUZCUlRCSUxFdEJRVXNzVFVGQlRUTklMRWRCUVVVc1IwRkJTVU1zUlVGQlJUSklMRTlCUVdNc1IwRkJSek5JTEVWQlFVVTBTQ3hSUVVGUkxFdEJRVXMxU0N4RlFVRkZORWdzVDBGQlR6VklMRVZCUVVVMlNDeGhRVUZoTEV0QlFVc3NUVUZCVFRWS0xFZEJRVWNzVDBGQlR5eFBRVU0zVURKRUxFdEJRVXRyUnl4WFFVRlhMRk5CUVZNdlNDeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKUXl4RlFVRkZNRVFzUzBGQlMyWXNUMEZCVDJwQ0xGRkJRVkV4UWl4SlFVRkpNRVFzUzBGQlMyWXNUMEZCVDJwQ0xGRkJRVkV4UWl4RlFVRkZMRWxCUVVrc1NVRkJTV2xETEVWQlFVVnFReXhGUVVGRk5rb3NWVUZCVlN4SlFVRkpOVWdzUlVGQlJTeERRVUZETEVsQlFVbERMRVZCUVVWM1FpeExRVUZMYlVVc1UwRkJVMjVGTEV0QlFVc3JSU3hYUVVGWGJFWXNSVUZCUlVjc1MwRkJTekpHTEdOQlFXTnVTQ3hIUVVGSExFZEJRVWR4UWl4RlFVRkZMRU5CUVd0RkxFZEJRV3BGTEZsQlFWa3NSVUZCUjNGR0xFMUJRVTF5Uml4RlFVRkZMRzFDUVVGdFFuSkNMRWxCUVV0eVF5eExRVUZMTmtRc1MwRkJTMllzVVVGQlYyVXNTMEZCUzJZc1QwRkJUMjFJTEZsQlFWbHdSeXhMUVVGTFppeFBRVUZQYlVnc1YwRkJWM0JKTEZWQlFWVm5ReXhMUVVGTFppeFBRVUZQYlVnc1YwRkJWM0JKTEZGQlFWRnRTU3hWUVVGVkxFMUJRVTA1UlN4TlFVRk5MRGhGUVVFNFJXZEdMRXRCUVV0RExGVkJRVlYwUnl4TFFVRkxaaXhQUVVGUGJVZ3NZVUZCWVhCSExFdEJRVXRtTEU5QlFVOXFRaXhSUVVGUmJVa3NWVUZETDJWdVJ5eExRVUZMWml4UFFVRlBiVWdzVjBGQlYzQkpMRkZCUVZGdFNTeFZRVUZuUXpWSUxFZEJRWFJDYWtNc1JVRkJSVEJFTEV0QlFVdG1MRTlCUVU5cVFpeFRRVUZaYlVrc1YwRkJiVWtzVDBGQmVFZzFTQ3hKUVVGSlFTeEZRVUZGYWtNc1JVRkJSVFpLTEZWQlFWVXNVMEZCVTJoSkxFVkJRVVZETEVkQlFXZEdMRTlCUVRkRk5FSXNTMEZCU3paRUxHTkJRV042Uml4RlFVRkZMSGRFUVVFclJFUXNTVUZCVjBrc1JVRkJSVW9zUlVGQlJVTXNSVUZCUlM5Q0xFbEJRMjVPTWtRc1MwRkJTM1ZITEU5QlFVOHNVMEZCVTNCSkxFZEJRVWNzU1VGQlNVTXNVMEZCVTBRc1JVRkJSU3hIUVVGSExGVkJRVlZETEVWQlFVVXNTMEZCUjBRc1JVRkJOR1FzVFVGQlRTeFBRVUV2WkN4SFFVRkhRU3hoUVVGaFdTeE5RVUZOTEUxQlFVMHNVVUZCVVN4SFFVRkhXaXhoUVVGaGVrSXNUMEZCVHl4UFFVRlBNRUlzUlVGQlJTeEpRVUZKTDBJc1JVRkJSVXNzVDBGQlQydENMRlZCUVZVMFNTeFRRVUZUY2tzc1MwRkJTMmRETEVkQlFVY3NSMEZCUnl4dFFrRkJiVUk1UWl4RlFVRkZMRTFCUVUwc1UwRkJVeXhIUVVGSExHdENRVUZyUWtFc1IwRkJSeXhwUWtGQmFVSTRRaXhGUVVGRlJ5eGhRVUZSTEVsQlFXOUNTQ3hGUVVGRmMwZ3NZVUZCVVN4SlFVRnZRblJJTEVWQlFVVnpTU3gxUWtGQmRVSjBTU3hGUVVGRmMwa3NjVUpCUVhGQ0xGVkJRVlVzVFVGQlRTeFJRVUZSTEVkQlFVY3NjVUpCUVhGQ2NFc3NVVUZCUnl4SlFVRnZRamhDTEVWQlFVVm9ReXhYUVVGTkxFbEJRVzlDWjBNc1JVRkJSWE5KTEhWQ1FVRjFRblJKTEVWQlFVVnpTU3h4UWtGQmNVSXNVVUZCVVN4TlFVRk5MR2RDUVVOb1owSXNSMEZCUnl4WlFVRlpja2tzVVVGQlJ5eEpRVUZ2UWtRc1JVRkJSV2hETEV0QlFVc3NUVUZCVFN4VFFVRlRMRTlCUVU5cFF5eEhRVUZITkVJc1MwRkJTekJITEU5QlFVOHNVMEZCVTNaSkxFZEJRVWNzVDBGQlR5eFBRVUZQUVN4SFFVRkhOa0lzUzBGQlMzVkVMR2RDUVVGblFpeFRRVUZUY0VZc1IwRkJSeXhQUVVGUExFMUJRVTFCTEVkQlFVYzJRaXhMUVVGTE1rY3NVVUZCVVN4VFFVRlRlRWtzUjBGQlJ5eE5RVUZOTEZOQlFWTTJRaXhMUVVGTGRVY3NUMEZCVDNCSkxFbEJRVWsyUWl4TFFVRkxORWNzV1VGQldTeFRRVUZUZWtrc1IwRkJSeXhKUVVGSlF5eEZRVUZGTkVJc1MwRkJTM1ZITEU5QlFVOXdTU3hIUVVGSExFMUJRVTBzVTBGQlUwTXNSMEZCUnl4VlFVRlZRU3hIUVVGSExHbENRVUZwUWtRc1JVRkJSVWNzVVVGQlVUQkNMRXRCUVVzMlJ5eFhRVUZYTEZOQlFWTXhTU3hIUVVGSExFOUJRVTgyUWl4TFFVRkxPRWNzVTBGQlV6TkpMRWxCUVVrc2JVSkJRVzFDUVN4RlFVRkZORWtzWVVGQllTOUhMRXRCUVV0eFJpeFhRVUZYTEZOQlFWTnNTQ3hIUVVGSExFMUJRVTBzV1VGQldUWkNMRXRCUVV0MVJ5eFBRVUZQY0Vrc1NVRkRNV1EyUWl4TFFVRkxPRWNzVTBGQlV5eFRRVUZUTTBrc1IwRkJSeXhKUVVGSlF5eFRRVUZUUkN4RlFVRkZMRTFCUVUwc1ZVRkJWVU1zUjBGQlJ5eE5RVUZOUkN4SFFVRkhMRmxCUVZsRExFZEJRVWMwUWl4TFFVRkxaMGdzVDBGQlR5eFRRVUZUTjBrc1IwRkJSeXhQUVVGUFFTeEZRVUZGTmtJc1MwRkJTMmxJTEdsQ1FVRnBRamxKTEVWQlFVVTJRaXhMUVVGTGFVZ3NhVUpCUVdsQ2FrZ3NTMEZCUzJ0SUxHTkJRV05zU0N4TFFVRkxiVWdzVDBGQlR5eFRRVUZUYUVvc1IwRkJSeXhSUVVGUlFTeEZRVUZGTmtJc1MwRkJTMmxJTEdkQ1FVRm5RbXBJTEV0QlFVdHZTQ3hWUVVGVkxGTkJRVk5xU2l4SFFVRkhMRTlCUVU5QkxFZEJRVWNzYjBKQlFXOUNRU3hIUVVGSFFTeEZRVUZGYTBvc1owSkJRV2RDY2tnc1MwRkJTMmxJTEdWQlFXVXNWMEZCVnpsSkxFVkJRVVUyUWl4TFFVRkxhVWdzWlVGQlpTeE5RVUZOTjBrc1RVRkJUVFJDTEV0QlFVdHBTQ3hqUVVGakxHZENRVUZuUWl4SlFVRkpka2dzUzBGQlN6UklMRmRCUVZjc1IwRkJSM1JJTEV0QlFVdHJTQ3haUVVGWkxFVkJRVVZzU0N4TFFVRkxkVWdzV1VGQldYWklMRXRCUVV0blNDeFBRVU12WkdoSUxFdEJRVXQzU0N4bFFVRmxlRWdzUzBGQlMyOUlMRlZCUVZWd1NDeExRVUZMZVVnc1dVRkJXU3hUUVVGVGRFb3NSMEZCUnl4SlFVRkpReXhGUVVGRk5FSXNTMEZCUzNWSExFOUJRVTl3U1N4SFFVRkhMRWRCUVVjc1ZVRkJWVU1zUjBGQlJ5eFRRVUZUUVN4RlFVRkZMRU5CUVVNc1IwRkJSeXh0UWtGQmIwSkVMRVZCUVVWMVNpeE5RVUZOTEU5QlFVOTJTaXhGUVVGRmRVb3NVVUZCTWtJc1NVRkJTU3hKUVVGSmNrd3NTMEZCTTBJclFpeEZRVUZGTEZOQlFWTkJMRVZCUVVVc1IwRkJSeXhIUVVGblFrUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3lSQ3hMUVVGTGVVZ3NXVUZCV1hSS0xFVkJRVVU1UWl4SlFVRkpMRTlCUVU4clFpeEZRVUZGTEU5QlFVOUVMRWRCUVVjMlFpeExRVUZMTWtnc1dVRkJXU3hUUVVGVGVFb3NSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVHpoQ0xFVkJRVVZvUXl4TFFVRkxlVXdzVFVGQlRYcEtMRVZCUVVWWUxFdEJRVXR4U3l4WlFVTTVVemRJTEV0QlFVczRTQ3hSUVVGUkxGTkJRVk16U2l4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpPRUlzUlVGQlJTeE5RVUZOYTBRc1VVRkJVU3hIUVVGSExFVkJRVVYzUnl4VlFVRlZka29zVDBGQlR5eERRVUZETEVsQlFVbG9ReXhGUVVGRmVVTXNUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1IwRkJSeXhQUVVGUExGZEJRVmNzU1VGQlNYaE1MRVZCUVVVd1F5eE5RVUZOYmtJc1ZVRkJWVzFMTEUxQlFVMDFUQ3hMUVVGTE1Fd3NWMEZCT0VNc1QwRkJia001U1N4TlFVRk5ia0lzVlVGQlZXOUxMRkZCUVZGS0xFMUJRVTEyVEN4RlFVRkZReXhIUVVGVk5rSXNSVUZCUlhsS0xFMUJRVTE0U2l4RlFVRkZMMElzU1VGQlNTeFBRVUZQTEZkQlFWY3NUMEZCVHpoQ0xFVkJRVVY1U2l4TlFVRk5lRW9zUlVGQlJYbEtMR0ZCUVdFM1NDeExRVUZMZUVNc1MwRkJTeXhUUVVGVFZ5eEZRVUZGUXl4RlFVRkZMMElzUjBGQk5Fa3NUMEZCZWtrMFRDeFRRVUZUY2tzc1ZVRkJWVW9zVDBGQlR5eEhRVUZIZVVzc1UwRkJVM0pMTEZWQlFWVktMRXRCUVV0blNpeFhRVUZYTUVJc1VVRkJVU3hsUVVGbGJFa3NTMEZCUzNoRExFdEJRVXQzUXl4TFFVRkxNa2dzV1VGQldUTklMRXRCUVV0NFF5eExRVUZMZDBNc1MwRkJTemhJTEZGQlFXVTVTQ3hMUVVGTGVFTXNTMEZCUzI5TExFMUJRVTBzUzBGQlMwTXNXVUZETTJRM1NDeExRVUZMYlVrc1VVRkJVU3hUUVVGVGFFc3NSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlRCRExFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFZRVUZWTEVkQlFVY3NUMEZCVHl4WFFVRlhMRWxCUVVsNlNpeEZRVUZGTDBJc1JVRkJSVEJNTEZGQlFXdERMRTlCUVRGQ00wb3NSVUZCUldkTExFdEJRVXRTTEUxQlFVMTRTaXhGUVVGRmVVb3NWMEZCYTBJeFNpeEZRVUZGZVVvc1RVRkJUVEZKTEV0QlFVdGtMRXRCUVVzMFFpeExRVUZMY1Vrc1RVRkJUU3hUUVVGVGJFc3NSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4TFFVRkxLMElzUlVGQlJVUXNSVUZCUlRsQ0xFZEJRVWNyUWl4RlFVRkZMMElzU1VGQlNUSkVMRXRCUVV0elNTeEpRVUZKZEVrc1MwRkJTMlVzWTBGQlkzZElMRXRCUVV0RUxFdEJRVXNzVjBGQlZ5eFBRVUZQTEVsQlFVbERMRTFCUXpkUmRra3NTMEZCUzNkSkxGZEJRVmNzVTBGQlUzSkxMRWRCUVVjc1IwRkJSelpDTEV0QlFVdG1MRTlCUVU5elFpeFhRVUZYVUN4TFFVRkxaaXhQUVVGUGMwSXNWMEZCVjNCRExFVkJRVVVzYTBKQlFXMUNMRXRCUVVjMlFpeExRVUZMWml4UFFVRlBhVWNzUzBGRGVrSXNUVUZCVFRkRUxFMUJRVTBzYVVOQlJHMUNMRWRCUVVjc1RVRkJUWEpDTEV0QlFVdDVTU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpla2tzUzBGQlMyWXNUMEZCVDJsSExFdEJRVXNzZFVKQlFYVkNMRTFCUVUwMVNTeEpRVUZKTEZGQlFVY3NTVUZCYjBJd1JDeExRVUZMWml4UFFVRlBlVW9zVjBGQlZ5eERRVUZETEZkQlFWY3hTU3hMUVVGTFppeFBRVUZQZVVvc1YwRkJWeXhOUVVGTmNFMHNTVUZCU1RCRUxFdEJRVXQ1U1N4elFrRkJjVUlzVDBGQlVYcEpMRXRCUVV0NVNTeHpRa0ZCY1VJc1JVRkJSeXhIUVVGSGVra3NTMEZCUzNsSkxIRkNRVUZ4UW5wSkxFdEJRVXRtTEU5QlFVOXBSeXhMUVVGTEwwY3NUMEZCVHl4RFFVRkRMRWxCUVVsRExFVkJRVVUwUWl4TFFVRkxaaXhQUVVGUE5rTXNVMEZCVTNwR0xFVkJRVVVyUWl4RlFVRkZkVXNzWTBGQll5eFZRVUZWZEUwc1JVRkJSVEpITEV0QlFVc3NhMEpCUVd0Q00wY3NSVUZCUlhWTkxFOUJRMjVtTEVWQlFVZDJUU3hGUVVGRmQwMHNXVUZCV1hwTExFVkJRVVV3U3l4bFFVRmxNMHNzU1VGQlNVTXNSVUZCUlRKTExFdEJRVXRHTEZsQlFWbDRUU3hIUVVGSEswSXNSVUZCUlRKTExFdEJRVXRETEZsQlFWa3pUU3hOUVVGM1JESkVMRXRCUVV0NVNTeHhRa0ZCY1VJc1MwRkRha3Q2U1N4TFFVRkxhVW9zVjBGQlZ5eFRRVUZUT1Vzc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEV0QlFVdERMRTlCUVU5R0xFZEJRVWNyU3l4UFFVRlBMRWRCUVVjc1RVRkJUVGRJTEUxQlFVMHNORVZCUVRSRmJFUXNSMEZCUnl4SlFVRkpPVUlzUlVGQlJTeFRRVUZUT0VJc1IwRkJSeXhQUVVGUE5rSXNTMEZCUzIxS0xHZENRVUZuUW1oTUxFbEJRVWxCTEVkQlFVYzNRaXhGUVVGRkxGTkJRVk0yUWl4SFFVRkhRU3hGUVVGRlFTeEZRVUZGYVVJc1RVRkJUU3hMUVVGTExFbEJRVWtzU1VGQlNXaENMRVZCUVVVc1IwRkJSemxDTEVWQlFVVXNSVUZCUlVFc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5b1F5eEpRVUZKT0VJc1JVRkJSV2RMTEV0QlFVc3ZUQ3hGUVVGRk9FSXNSVUZCUlRkQ0xFdEJRVXNzVDBGQlR6aENMRVZCUVVWelNDeExRVUZMTEUxQlFXbElMRTlCUVROSGNFb3NSVUZCUlRCRUxFdEJRVXR0U2l4blFrRkJaMElzV1VGQldXNUtMRXRCUVV0dlNpeHhRa0ZCY1VJdlRTeEZRVUZGUXl4RlFVRkZMRk5CUVZNMlFpeEhRVUZITEU5QlFVOUJMRWRCUVVkQkxFVkJRVVZETEVWQlFVVkVMRVZCUVVVc1NVRkJTVGRDTEVWQlFVVTRRaXhIUVVGSE9VSXNSVUZCUlRaQ0xFZEJRVlUyUWl4TFFVRkxaaXhQUVVGUGIwc3NkMEpCUVhkQ2Nrb3NTMEZCUzJZc1QwRkJUMjlMTEhkQ1FVRjNRbXhNTEVkQlFVZEJMRWRCUTNobE5rSXNTMEZCUzNOS0xHdENRVUZyUWl4VFFVRlRia3dzUlVGQlJVTXNSMEZCUnpSQ0xFdEJRVXR0U2l4blFrRkJaMEpvVEN4RlFVRkZOa0lzUzBGQlMyOUtMSEZDUVVGeFFtaE1MRWxCUVVreVFpeFZRVUZWUXl4TFFVRkxaaXhQUVVGUGMwc3NNa0pCUVRKQ2Rrb3NTMEZCUzIxS0xHZENRVUZuUW01S0xFdEJRVXRtTEU5QlFVOXpTeXd3UWtGQk1FSjJTaXhMUVVGTGQwb3NUMEZCVHl4VFFVRlRja3dzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRWGRJTEU5QlFYSklRU3hIUVVGSFFTeEZRVUZGYjA0c1QwRkJUM1JNTEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTEV0QlFVc3NVMEZCVTNSTUxFbEJRVWxFTEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTEdsQ1FVRm5RaXhUUVVGVGRrd3NSVUZCUlRsQ0xFZEJRVWNzVDBGQlR5eE5RVUZOSzBJc1IwRkJSeTlDTEV0QlFVc3JRaXhGUVVGRlFTeEZRVUZGTDBJc1IwRkJSemhDTEUxQlFWbEJMRWRCUVVjMlFpeExRVUZMTWtvc2JVSkJRVzFDTEZOQlFWTjRUQ3hGUVVGRlF5eEhRVUZITEU5QlFVOUVMRWRCUVVjMlFpeExRVUZMTkVvc1lVRkJZU3hUUVVGVGVrd3NSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3lSQ3hMUVVGTFRTeFpRVUZaYmtNc1JVRkJSVU1zUlVGQlJTOUNMRWxCUTNoak1rUXNTMEZCU3paS0xHVkJRV1VzVTBGQlV6Rk1MRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhPRUlzUlVGQlJVTXNSMEZCUnk5Q0xFZEJRVWN5UkN4TFFVRkxPRW9zVTBGQlV5eFRRVUZUTTB3c1JVRkJSVU1zUjBGQlJ5eFRRVUZUTDBJc1MwRkJTMEVzUlVGQlJYVkNMRlZCUVZWUkxFVkJRVVZTTEZWQlFWVlBMRVZCUVVVMFRDeFpRVUZaTTB3c1JVRkJSVklzVlVGQlZVOHNSVUZCUlZBc1ZVRkJWU3hKUVVGSmRrSXNSVUZCUlRoQ0xFVkJRVVZRTEZWQlFWVnZUU3haUVVGWk4wd3NSVUZCUlVFc1JVRkJSVGhNTEV0QlFVc3NVMEZCVXpsTUxFVkJRVVU1UWl4RlFVRkZiVU1zUjBGQlJ5eEpRVUZKTEVsQlFVbHNReXhGUVVGRmVVTXNUVUZCVFRoSkxGVkJRVlYyU2l4UFFVRlBMRWRCUVVkRExFVkJRVVVzUlVGQlJVRXNSVUZCUlhOS0xGVkJRVlYyU2l4UFFVRlBReXhKUVVGSmFrTXNSVUZCUldsRExFVkJRVVVzUjBGQlIzTktMRlZCUVZWMFNpeEhRVUZITEU5QlFVOUlMRVZCUVVWU0xGVkJRVlYyUWl4SFFVRkhkVXdzVFVGQlRYcEtMRVZCUVVVM1FpeExRVU0xVkRCRUxFdEJRVXRwU3l4TFFVRkxMRk5CUVZNNVRDeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKUXl4RlFVRkZkVXdzVlVGQlZYRkRMRTlCUVU5RExFOUJRVThzUjBGQlIyNUxMRXRCUVV0blFpeDNRa0ZCZDBKb1FpeExRVUZMWVN4UlFVRlJka1VzUlVGQlJTeE5RVUZOSzBVc1RVRkJUU3c0U1VGQk9Fa3NVVUZCUnl4SlFVRnhRaTlGTEVWQlFVVjVUaXhaUVVGWkxFTkJRVU1zU1VGQlNTeEpRVUZKZUV3c1JVRkJSVkVzVFVGQlRUaEpMRlZCUVZWMlNpeFBRVUZQTEVkQlFVZEZMRVZCUVVVc1JVRkJSVUVzUlVGQlJYRktMRlZCUVZWMlNpeFBRVUZQUlN4SlFVRkpSQ3hGUVVGRlF5eEZRVUZGTEVkQlFVZHhTaXhWUVVGVmNrb3NSMEZCUnl4UFFVRlBiRU1zUlVGQlJYbE9MRmxCUVZsRExGbEJRVmx3UXl4TlFVRk5la29zUlVGQlJVa3NSMEZCUnl4SFFVRkhMR2xDUVVGcFFrZ3NSMEZCUnl4cFFrRkJhVUpCTEVWQlFVVXNUVUZCVFdsRUxFMUJRVTBzYlVWQlEycGpMRWxCUVRWQ09VTXNSVUZCUlZFc1RVRkJUVGhKTEZWQlFWVjJTaXhQUVVGUExFZEJRVTlGTEVWQlFVVXNSVUZCUlVFc1JVRkJSWEZLTEZWQlFWVjJTaXhQUVVGUFJTeEpRVUZKUkN4RlFVRkZReXhGUVVGRkxFZEJRVWR4U2l4VlFVRlZja29zUjBGQlIwRXNSMEZCUlN4RlFVRkhMRWxCUVVrc1NVRkJTWEZDTEVWQlFVVXhRaXhGUVVGRk5rd3NXVUZCV1hCTkxGVkJRVlZwUXl4RlFVRkZRU3hGUVVGRmJrUXNUMEZCVHpCT0xHVkJRV1YyU3l4SFFVRkhMRWRCUVVkQkxFVkJRVVY2UWl4TFFVRkxPVUlzUlVGQlJXdERMRWRCUVVVc1QwRkJVU3hIUVVGSFFTeEZRVUZGTEU5QlFVOXhRaXhGUVVGRmVrSXNSMEZCUjNkS0xFMUJRVTE2U2l4RlFVRkZTU3hIUVVGSExFZEJRVWRLTEVWQlFVVkRMRXRCUVVzNVFpeEZRVUZGTEU5QlFVODJRaXhGUVVGRk5rd3NXVUZCV1hCTkxGVkJRVlZSTEVkQlFVZDNTaXhOUVVGTmVrb3NSVUZCUlVrc1IwRkJSeXhOUVVGTk9FTXNUVUZCVFN3clJVRkJaMFp5UWl4TFFVRkxMMElzVFVGQlRTeFRRVUZUUlN4SFFVRkhMRWRCUVVjMlFpeExRVUZMYjBJc2IwSkJRVzlDTEUxQlFVMURMRTFCUVUwc1owUkJRV2RFYkVRc1JVRkJSV2hETEV0QlFVczJSQ3hMUVVGTFppeFRRVU55WkdNc1YwRkJWME1zUzBGQlMyWXNUMEZCVDJNc1UwRkJVMEVzVlVGQlZVTXNTMEZCUzNGTExGbEJRVmtzVTBGQlUyeE5MRVZCUVVWRExFZEJRVWNzU1VGQlNTOUNMRVZCUVVVclFpeEZRVUZGTkV3c1dVRkJXVEZPTEVWQlFVVTRRaXhGUVVGRmEwMHNVVUZCYTFnc1QwRkJNVmRxVHl4SFFVRkhRU3hIUVVGSFN5eFBRVUZQYTBJc1ZVRkJWVzlOTEdOQlFXTXpUaXhGUVVGRkxGZEJRVmNzVFVGQlRXZEdMRTFCUVUwc0swUkJRV2RGYUVZc1JVRkJSVEpFTEV0QlFVdHhTeXhaUVVGWlJTd3dRa0ZCTUVKc1R5eEZRVUZGT0VJc1IwRkJSMEVzUjBGQlJ6WkNMRXRCUVVzNFNpeFRRVUZUZWs0c1JVRkJSVGhDTEZWQlFWVkRMRVZCUVVVMFRDeHRRa0ZCYlVJMVRDeEZRVUZGYTAwc1VVRkJVWFJMTEV0QlFVdHhTeXhaUVVGWlJ5eHBRa0ZCYVVKdVR5eEZRVUZGZFVJc1ZVRkJWVkVzUjBGQlJ5eE5RVUZOT1VJc1NVRkJTVUVzWVVGQllUSk1MRk5CUVZNelRDeEZRVUZGUkN4SFFVRkhNa1FzUzBGQlMzRkxMRmxCUVZsSExHbENRVUZwUW01UExFVkJRVVZETEVsQlFWZEVMRWRCUXpGa01rUXNTMEZCUzNGTExGbEJRVmxKTEhGQ1FVRnhRbnBMTEV0QlFVdGhMRTFCUVUxaUxFdEJRVXR4U3l4WlFVRlpSU3d3UWtGQk1FSXNVMEZCVTNCTkxFVkJRVVZETEVkQlFVY3NTVUZCU1RSQ0xFdEJRVXR4U3l4WlFVRlpTU3h4UWtGQmNVSXNUMEZCVDNSTkxFVkJRVVVzU1VGQlNUbENMRWRCUVVjeVJDeExRVUZMY1Vzc1dVRkJXVXNzWTBGQlkzUk5MRWRCUVVjNVFpeEZRVUZGTEZkQlFWY3NTVUZCU1RoQ0xFVkJRVVZFTEVWQlFVVjVTaXhOUVVGTk1Va3NTMEZCU3pKSkxGbEJRVmt6U1N4TFFVRXdTQ3hQUVVGeVNHUXNSVUZCUlRSQ0xFdEJRVXRwU0N4bFFVRmxOMGtzUlVGQlJUUkNMRXRCUVV0cFNDeGxRVUZsTDBnc1MwRkJTemhMTEdOQlFXTXhUaXhIUVVGSFJDeEhRVUZIU3l4UFFVRlBOa2tzWjBKQlFXZENNRU1zVlVGQlZYWk1MRTlCUVU4MlNTeExRVUZMYmtnc1IwRkJWVUVzUjBGQlJ5eFBRVUZQT1VJc1IwRkJSekJFTEV0QlFVdHhTeXhaUVVGWlN5eGpRVUZqTEZOQlFWTjJUU3hIUVVGSExFOUJRVTlCTEVkQlFVZEJMRVZCUVVWUUxGZEJRVmRQTEVWQlFVVlFMRlZCUVZWdlF5eExRVUZMTWtzc2JVTkJRMjVrTTBzc1MwRkJTM0ZMTEZsQlFWbFBMSGxDUVVGNVFpeG5SMEZCWjBkNFRDeE5RVUZOTEV0QlFVdFpMRXRCUVV0eFN5eFpRVUZaUnl4cFFrRkJhVUlzVTBGQlUzSk5MRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1MwRkJTeXRDTEVWQlFVVXhRaXhQUVVGUGEwSXNWVUZCVlVNc1pVRkJaVEZDTEV0QlFVdHBReXhGUVVGRkwwSXNTMEZCU3poQ0xFVkJRVVU1UWl4SFFVRkhLMElzUlVGQlJTOUNMRWxCUVVrc1NVRkJTU3hKUVVGSlF5eEZRVUZGTEVWQlFVVkJMRVZCUVVVd1JDeExRVUZMY1Vzc1dVRkJXVThzZVVKQlFYbENkRTBzVDBGQlQyaERMRWxCUVVsRUxFVkJRVVV5UkN4TFFVRkxjVXNzV1VGQldVOHNlVUpCUVhsQ2RFOHNSMEZCUjBrc1QwRkJUMnRDTEZWQlFWVkRMR1ZCUVdVeFFpeExRVUZMYVVNc1JVRkJSUzlDTEV0QlFVczRRaXhGUVVGRk9VSXNSMEZCUnl0Q0xFVkJRVVV2UWl4TFFVTm9ZakpFTEV0QlFVczJTeXh0UWtGQmJVSXNVMEZCVXpGTkxFbEJRVWswUWl4VlFVRlZReXhMUVVGTGNVc3NXVUZCV1Vrc2RVSkJRWFZDZEUwc1JVRkJSVkFzVlVGQlZXOURMRXRCUVVzeVN5eHRRMEZCYTBNc1NVRkJTek5MTEV0QlFVc3lTeXhwUTBGQmFVTXNjME5CUTNCTU5Vc3NWVUZCVlVNc1MwRkJTekJFTEhWQ1FVRjFRakZFTEV0QlFVczRTeXhuUWtGQlowSXNWMEZCVnl4SlFVRkpNMDBzUlVGQlJUWkNMRXRCUVV0bUxFOUJRVTgyUXl4VFFVRlRMRTlCUVU4c1RVRkJUVE5FTEVkQlFVY3NWVUZCVlVFc1IwRkJSelpDTEV0QlFVc3JTeXh0UWtGQmJVSXNWMEZCVnl4SlFVRkpOVTBzUlVGQlJUWkNMRXRCUVV0bUxFOUJRVTgyUXl4VFFVRlRMRTlCUVU4elJDeEZRVUZGTmswc1dVRkJXU3haUVVGWk4wMHNSVUZCUlRoTkxGZEJRVmNzVjBGQlZ6bE5MRVZCUVVVNFRTeFpRVUZaYWt3c1MwRkJTMnRNTEdOQlFXTXNWMEZCVnl4SFFVRkhiRXdzUzBGQlMwVXNUVUZCVFVZc1MwRkJTMllzVDBGQlQydE5MRzlDUVVGdlFtNU1MRXRCUVV0SExGTkJRVk5JTEV0QlFVdG1MRTlCUVU5clRTeHRRa0ZCYlVKdVRDeExRVUZMYlVVc1UwRkJVMjVGTEV0QlFVdG1MRTlCUVU5clRTeDFRa0ZCZFVJc1IwRkJSMjVNTEV0QlFVczRTeXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpNMDBzUlVGQlJUWkNMRXRCUVV0bUxFOUJRVTgyUXl4VFFVRlRNVVFzUlVGQlJVUXNSVUZCUldsT0xHTkJReTlpTEVsQlFVbG9UaXhIUVVFM1EwUXNSVUZCUlVNc1JVRkJSU3hEUVVGRFFTeEhRVUZIUkN4RlFVRkZhMDRzY1VKQlFYRkNMRmRCUVd0Q0wwMHNUMEZCVHl4RlFVRkZMRWRCUVVkR0xFbEJRVWxCTEVWQlFVVXNRMEZCUXl4SlFVRkpMMElzUlVGQlJUaENMRVZCUVVWRExFZEJRVWRyVGl4SlFVRkphRkFzUlVGQlJVUXNSVUZCUlhGR0xGbEJRVmtzUzBGQmQwSXNSMEZCYmtKd1JpeEhRVUZITEVkQlFVZEJMRVZCUVVWRUxFVkJRVVZwUXl4UFFVRlBhRU1zUlVGQlN5eFhRVUZYUkN4RlFVRkZhMUFzVDBGQlQycFFMRVZCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU13UkN4TFFVRkxiVVVzVTBGQlV6bElMRVZCUVVWclVDeFBRVUZQTEVWQlFVVnFVQ3hGUVVGRkxFZEJRVWNzVlVGQlZUQkVMRXRCUVV0clRDeG5Ra0ZCWjBKc1RDeExRVUZMZDB3c1YwRkJWeXhYUVVGWGRFMHNTMEZCUzNWTkxIVkNRVUYxUWl4TFFVRkxkazBzUzBGQlMzZE5MSEZDUVVGeFFqRk1MRXRCUVVzNFJTeDFRa0ZCZFVJNVJTeExRVUZMZDB3c1YwRkJWelZPTEZWQlFWVXJUaXcyUWtGQk5rSXNWMEZCVnl4VFFVRlRlRTRzUlVGQlJVRXNSVUZCUlVNc1IwRkJSMGNzUlVGQlJXcERMRVZCUVVVMlFpeEpRVUZITEVWQlFVZERMRXRCUVVzdlFpeEZRVUZGT0VJc1JVRkJSVGRDTEVWQlFVVTJRaXhKUVVGSExFZEJRVWxKTEVWQlFVVnFReXhGUVVGRk5rSXNTVUZCUnl4RlFVRkhMRk5CUVZORExFVkJRVVZFTEVkQlFVY3NTVUZCU1N4UlFVRlJLMGNzUzBGQlN5OUhMRWRCUVVjc1RVRkJUWGxPTEVkQlFVY3NUMEZCVFN4SFFVTnNaaXhKUVVGSmRsQXNSVUZCUlN4TlFVRk5ReXhGUVVGRkxFTkJRVU4xVUN4TFFVRkpMRWRCUVVsMFRpeEhRVUZGTEVWQlFVZERMRVZCUVVWM1FpeExRVUZMWml4UFFVRlBOazBzVjBGQlZ6bE1MRXRCUVV0bUxFOUJRVTgyVFN4VlFVRlZReXhWUVVGVkwwd3NTMEZCUzJZc1QwRkJUelpOTEZWQlFWVkRMRlZCUVZVc1IwRkRkVVVzVDBGRWNFVTFUaXhGUVVGRkxFOUJRVTBzVjBGQlZ5eFBRVUZQUXl4RlFVRkZMSEZDUVVGdlFrUXNSVUZCUlN4UFFVRk5MRmRCUVZjc1QwRkJUMHNzUlVGQlJYZE9MRTFCUVUwc2QwSkJRVEJDTlU0c1JVRkJSU3dyVWtGRGRFOUVMRVZCUVVVc1QwRkJUU3hYUVVGWExFOUJRVTlETEVWQlFVVXNhMEpCUVdsQ1JDeEZRVUZGTEU5QlFVMHNWMEZCVnl4UFFVRlBReXhGUVVGRkxEQkNRVUY1UWtRc1JVRkJSU3hQUVVGTkxGZEJRVmNzVDBGQlQwTXNSVUZCUlN3MlFrRkJORUpFTEVWQlFVVXNWMEZCVlN4WFFVRlhMRTlCUVUwc1MwRkJWeXhEUVVGRE9FNHNUMEZCVHpWUUxFVkJRVVUyVUN4SlFVRkpOVkFzU1VGQlNUQkVMRXRCUVV0M1RDeFhRVUZYTlU0c1ZVRkJWWFZQTEdWQlFXVXNVMEZCVTJoUExFVkJRVVZETEVkQlFVY3NSMEZCUnl4VlFVRlZORUlzUzBGQlN6UkZMRlZCUVZVc1QwRkJUU3hGUVVGSExFZEJRVWNzVTBGQlV6VkZMRXRCUVVzMFJTeFZRVUZWTEU5QlFVMHNSVUZCUnl4SlFVRkpNVVlzUzBGQlMzVk5MSFZDUVVGMVFpeERRVUZETEVsQlFVbHdVQ3hGUVVGRk5rTXNTMEZCUzNsTkxDdENRVUVyUW5wTkxFdEJRVXQxVFN4MVFrRkJkVUp3VUN4RlFVRkZObEFzU1VGQlNXaE9MRXRCUVV0M1RTeHhRa0ZCY1VKNFRTeExRVUZMZDAwc2MwSkJRMmhsY2xBc1JVRkJSVFJRTEU5QlFVOHNSMEZCUnpsT0xFdEJRVXRsTEV0QlFVdDFUU3gxUWtGQmRVSXNVVUZCVDNaTkxFdEJRVXQxVFN4MVFrRkJkVUowVGl4UFFVRlBOa0lzUzBGQlN6aExMRzFDUVVGdFFpeFBRVUZQTVUwc1IwRkJSeXhoUVVGaE5FSXNTMEZCUzJZc1QwRkJUelpETEZOQlFWTTJSeXhqUVVGakxGZEJRV2RDTEUxQlFVMTBTQ3hOUVVGTkxEQkNRVUV3UW14RUxFbEJRVXMyUWl4TFFVRkxkMHdzVjBGQlZ6Vk9MRlZCUVZWMVNTeFZRVUZWTEZOQlFWTm9TU3hGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTGEwY3NWMEZCVnk5SUxFVkJRVVZETEVWQlFVVmpMRXRCUVV0M1RTeDFRa0ZCZFVJeFRDeExRVUZMYjAwc1dVRkJXU3hKUVVGSmNFMHNTMEZCUzNkTUxGZEJRVmQ0VEN4TFFVRkxjVTBzYTBKQlFXdENMRk5CUVZOc1R5eEhRVUZITEU5QlFVOUJMRVZCUVVWMVRDeFJRVUZSTEdkQ1FVRm5RaXhoUVVGaE1Vb3NTMEZCUzNOTkxHRkJRV0VzVjBGQlYzQk9MRXRCUVV0eFRpeGpRVUZqTEVkQlEyNW1jazRzUzBGQlMzTk9MRlZCUVZVc1IwRkJSM1JPTEV0QlFVdDFUaXhUUVVGVExFZEJRVWQyVGl4TFFVRkxkMDRzWVVGQllTeEhRVUZIZUU0c1MwRkJTM2xPTEZsQlFWa3NSMEZCUjNwT0xFdEJRVXN3VGl4VFFVRlJMRVZCUVVjeFRpeExRVUZMTWs0c1UwRkJVeXhKUVVGSk4wMHNTMEZCU3poTkxHdENRVUZyUWpsTkxFdEJRVXR2VFN4aFFVRmhiRTRzUzBGQlN6Wk9MRzFDUVVGdFFpeEhRVUZITjA0c1MwRkJTemhPTEdWQlFXVXNTVUZCU1doT0xFdEJRVXR6VFN4aFFVRmhNVThzVlVGQlZYRlFMRlZCUVZVc1UwRkJVemxQTEVWQlFVVkRMRWRCUVVjc1UwRkJVeTlDTEVsQlFVbERMRWxCUVVrd1JDeExRVUZMWml4UFFVRlBhVThzVjBGQlZ6VlJMRVZCUVVVc1IwRkJSMEVzUlVGQlJTeE5RVUZOTEVsQlFVbEJMRVZCUVVVNFFpeEZRVUZGTEVkQlFVZEVMRVZCUVVWSExFOUJRVThzUTBGQlEwWXNSVUZCUlN4SFFVRkhMRWxCUVVrc1NVRkJTVWNzUlVGQlJTeEZRVUZGUVN4RlFVRkZTaXhGUVVGRlJ5eFBRVUZQUXl4SlFVRkpMRU5CUVVNc1NVRkJTVU1zUlVGQlJWVXNTMEZCUzJsUExHbENRVUZwUW1oUUxFVkJRVVZKTEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hOUVVGTk5rTXNUVUZCVFN3d1FrRkJNRUpzUkN4RlFVRkZTU3hKUVVGSlNDeEZRVUZGWjBzc1MwRkJTMnhLTEV0QlFVdHhUaXhqUVVGakwwNHNTVUZCU1VFc1JVRkJSWGRDTEV0QlFVdHZSQ3hSUVVGUkxFbEJRVWwyUkN4RlFVRkZMRVZCUVVVc1NVRkJTWFJDTEVWQlEzUm1MRVZCUVVWQkxFVkJRVVZLTEVWQlFVVkhMRTlCUVU5RExFbEJRVWxETEVWQlFVVk1MRVZCUVVWSkxFbEJRVWxJTEVWQlFVVkhMRWRCUVVjMlR5eFJRVUZQTEdGQlFXRjJUaXhIUVVGSE1VSXNSVUZCUlVjc1VVRkJVV3BETEZsQlFWZEJMRXRCUVVzeVJDeExRVUZMYzAwc1lVRkJZVEZQTEZWQlFWVjVVQ3huUWtGQlowSXNWMEZCVjI1UExFdEJRVXQ1VGl4WlFVRlpka1VzUzBGQlMyeEtMRXRCUVVzeVRpeFRRVUZUVXl4cFFrRkJhVUowVGl4TFFVRkxkMFlzWlVGQlpYaEdMRXRCUVV0dFJTeFRRVUZUTEZkQlFWY3NWVUZCVlN4SFFVRkhMRWRCUVVjc1NVRkJSeXhKUVVGTGFrWXNTMEZCUzNGUExHRkJRV0YyVGl4TFFVRkxjMDBzWVVGQllURlBMRlZCUVZWdlJ5eFZRVUZWTEZOQlFWTTNSaXhGUVVGRlF5eEpRVUZKUkN4RlFVRkZaU3hMUVVGTGFVOHNhVUpCUVdsQ2FGQXNUVUZCVFVNc1IwRkJSMk1zUzBGQlMzTlBMR1ZCUVdWMFR5eExRVUZMY1U0c1kwRkJZM0JQTEVkQlFVZHpVQ3hoUVVGaGNsQXNSVUZCUldNc1MwRkJTelpPTEcxQ1FVRnRRalZQTEdGQlFXRmxMRXRCUVVzMlRpeHRRa0ZCYlVJMVR5eEhRVUZIUXl4TlFVRk5ORUlzUzBGQlMzTk5MR0ZCUVdFeFR5eFZRVUZWT0ZBc2NVSkJRMjVuUWl4VFFVRlRkbEFzUjBGQlIyVXNTMEZCU3pKT0xGTkJRVk14VHl4SFFVRkhOa0lzUzBGQlMzTk5MR0ZCUVdFeFR5eFZRVUZWY1Vjc1RVRkJUU3hUUVVGVE9VWXNSMEZCUnl4SlFVRkhaU3hMUVVGTGFVOHNhVUpCUVdsQ2FGQXNSMEZCWjFrc1RVRkJUVUVzUlVGQlJTeG5RMEZETldWQkxFVkJRVVUyUWl4TFFVRkxOa1FzWTBGQll6RkdMRWRCUVVkclJDeE5RVUZOYkVRc1IwRkVNRVVzU1VGQlNVTXNSVUZCUldNc1MwRkJTemRETEVWQlFVVXNSMEZCUjBNc1JVRkJSU3hUUVVGVE5rSXNSMEZCUnl4SlFVRkpTU3hGUVVGRlNDeEZRVUZGSzA4c2FVSkJRV2xDYUZBc1IwRkJSeXhKUVVGSlNTeEZRVUZGTEUxQlFVMDRReXhOUVVGTkxHdERRVUZyUTJ4RUxFZEJRVWNzU1VGQlNVTXNSVUZCUlhGUExGTkJRVk5zVHl4SFFVRkhMRU5CUVhWRExFbEJRWFJEU0N4RlFVRkZjVThzVTBGQlUyeFBMRWxCUVVjc1JVRkJSMG9zUlVGQlJVTXNSVUZCUlcxUExHTkJRV05vVHl4SFFVRlBRU3hGUVVGRkxFVkJRVVZCTEVWQlFVVktMRVZCUVVWelVDeFRRVUZUYmxBc1QwRkJUME1zU1VGQlNYbENMRXRCUVV0elFpeFpRVUZaYmtRc1JVRkJSWE5RTEZOQlFWTnNVQ3hMUVVGTGFrTXNSVUZCUlRaQ0xFVkJRVVZ6VUN4VFFVRlRiRkFzU1VGQlNXeERMRVZCUVVVclRDeExRVUZMYWtzc1MwRkJTemRDTEVWQlFVVTJRaXhIUVVGSFFTeEpRVUZKWlN4TFFVRkxlVTRzV1VGQldYSlBMRTlCUVU5WkxFdEJRVXQ1VGl4WlFVRlplazRzUzBGQlMzbE9MRmxCUVZsblFpeFBRVUZQZEZJc1IwRkJSelpETEV0QlFVc3dUaXhUUVVGVGVrOHNSMEZCUjJVc1MwRkJTM0ZQTEdGQlEyaGlkazRzUzBGQlMzTk5MR0ZCUVdFeFR5eFZRVUZWTWxBc1ZVRkJWU3hYUVVGWExFbEJRVWtzU1VGQlNYQlFMRVZCUVVWbExFdEJRVXRrTEVWQlFVVmpMRXRCUVVzd1RpeFJRVUZSTVU0c1MwRkJTM2xPTEZsQlFWbHlUeXhUUVVGVFJpeEpRVUZITEZkQlFWa3NTVUZCU1M5Q0xFZEJRVVVzUlVGQlIwTXNSVUZCUlRaQ0xFVkJRVVYzVHl4WlFVRlpiazBzVVVGQlVXcERMRWRCUVVVc1JVRkJSMG9zUlVGQlJYbFFMRk5CUVZOMFVpeEhRVUZITEVsQlFVbHJReXhGUVVGRkxFTkJRVU54VUN4TlFVRk5MRmRCUVZjc1IwRkJSM2hTTEVWQlFVVXNUVUZCVFdkR0xFMUJRVTBzTmtOQlFUWkRha1FzUjBGQlJTeEhRVUZKTUZBc1QwRkJUeXhYUVVGWGVsSXNSVUZCUlRoQ0xFVkJRVVUwVUN4VlFVRlZNMUFzUjBGQlJTeEhRVUZKTkZBc1QwRkJUeXhYUVVGWExFZEJRVWQ2VUN4RlFVRkZMRTFCUVUwNFF5eE5RVUZOTERCQ1FVRXdRamxETEVkQlFVVXNSVUZCUjBvc1JVRkJSVGhRTEZGQlFWRXpVaXhKUVVGSk5GSXNVVUZCVVN4WFFVRlhMRWxCUVVrc1NVRkJTVGxRTEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVYxVHl4aFFVRmhjRThzVDBGQlQycERMRWxCUVVrclFpeEZRVUZGWjBzc1MwRkJTMnBMTEVWQlFVVjFUeXhoUVVGaGNsRXNTVUZEZG1Zc1QwRkJUeXRDTEVkQlFVY3JVQ3hsUVVGbExGTkJRVk5vVVN4SFFVRkhOa0lzUzBGQlMzZERMRzFDUVVGdFFpeERRVUZEVVN4TFFVRkxOMFVzUlVGQlJYTkZMRmRCUVZjc1IwRkJSMU1zZDBKQlFYVkNMRWxCUVV0clRDeDVRa0ZCZVVJc1UwRkJVMnBSTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZIUVN4SlFVRkpNa1FzUzBGQlN6SkRMR1ZCUVdWMFJ5eEhRVUZITEVOQlFVTmlMRkZCUVZFMFF5eEZRVUZGTkVVc1MwRkJTMmhFTEV0QlFVczBReXhYUVVGWFF5eEpRVUZKT1Vjc1UwRkJVMDBzUjBGQlJ5eE5RVUZOWjFNc01FSkJRVEJDTEZOQlFWTnNVU3hGUVVGRlF5eEhRVUZITkVJc1MwRkJTekpETEdWQlFXVjRSU3hIUVVGSExFTkJRVU16UXl4UlFVRlJORU1zUlVGQlJUUkZMRXRCUVV0b1JDeExRVUZMTkVNc1YwRkJWMFVzUzBGQlN5OUhMRk5CUVZOdlF5eEpRVUZKYlZFc2FVSkJRV2xDTEZkQlFWZDBUeXhMUVVGTGQwTXNiVUpCUVcxQ0xFMUJRVTF2Unl4TlFVRk5MRk5CUVZONFN5eEhRVUZITEVkQlFVY3ZRaXhGUVVGRkxFMUJRVTFuUml4TlFVRk5MSE5FUVVGelJHeEVMRVZCUVVWdlVTeFBRVUZQYWxNc1JVRkRkR1k0UWl4SlFVRkpiMUVzWTBGQll5eFhRVUZYTEU5QlFVOXlVU3hGUVVGRmNWQXNaVUZCWld4U0xFVkJRVVZ0VWl4WlFVRlpMRWxCUVVsdVVpeEZRVUZGYlZNc1MwRkJTMnBSTEVkQlFVY3NVVUZCVVc1RExFZEJRVVVzUjBGR2IwUXNSMEZGTlVNclFpeEhRVUZIWXl4TFFVRkxkMUFzVlVGQlZURlBMRXRCUVV0elRTeGhRVUZoTVU4c1ZVRkJWVGhSTEU5QlFVOHNWMEZCVjNoUUxFdEJRVXN3VGl4VFFVRlJMRWRCUVVrMVRTeExRVUZMYzAwc1lVRkJZVEZQTEZWQlFWVnRVU3hSUVVGUkxGZEJRVmMzVHl4TFFVRkxNRTRzVlVGQlZURk9MRXRCUVVzd1RpeFRRVUZSTEVWQlFVY3hUaXhMUVVGTGNVOHNZMEZCWTNaT0xFdEJRVXR6VFN4aFFVRmhNVThzVlVGQlZXZFJMRk5CUVZNc1UwRkJVM3BRTEVkQlFVZGxMRXRCUVV0M1RpeGhRVUZoZEVVc1MwRkJTMnBMTEVsQlFVazJRaXhMUVVGTGMwMHNZVUZCWVRGUExGVkJRVlZ4VVN4UlFVRlJMRk5CUVZNNVVDeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hGUVVGRlFTeEZRVUZGWXl4TFFVRkxkMDRzWVVGQllYQlBMRTlCUVU5R0xFbEJRVWtzUjBGQlIyTXNTMEZCUzNkT0xHRkJRV0YwVHl4SlFVRkpSQ3hGUVVGRkxFTkJRVU5sTEV0QlFVdDNUaXhoUVVGaGFrZ3NUMEZCVDNKSUxFVkJRVVVzUjBGRGJtWXNUVUZCVFN4SlFVRkpRU3hGUVVGRkxFVkJRVVZCTEVWQlFVVmpMRXRCUVVzNFRpeGxRVUZsTVU4c1QwRkJUMFlzU1VGQlNTeEhRVUZIWXl4TFFVRkxPRTRzWlVGQlpUVlBMRWxCUVVsRUxFVkJRVVYzVVN4TFFVRkxMRU5CUVVONlVDeExRVUZMT0U0c1pVRkJaWFpJTEU5QlFVOXlTQ3hGUVVGRkxFZEJRVWNzVFVGQlRTeEhRVUZIWXl4TFFVRkxkMDRzWVVGQllYQlBMRkZCUVZGWkxFdEJRVXM0VGl4bFFVRmxNVThzVTBGQlUxa3NTMEZCUzNsT0xGbEJRVmx5VHl4UFFVRlBMRXRCUVV0WkxFdEJRVXM0VGl4bFFVRmxNVThzVVVGQlVWa3NTMEZCU3poRkxGVkJRVlU1UlN4TFFVRkxPRTRzWlVGQlpYaE5MRk5CUVZFc1IwRkJTWEpETEVWQlFVVTJVQ3hWUVVGVmFFOHNTMEZCUzNOTkxHRkJRV0V4VHl4VlFVRlZORkFzWlVGQlpTeFRRVUZUY2xBc1IwRkJSeXhKUVVGSkxFbEJRVWxETEVWQlFVVXNSVUZCUlVFc1JVRkJSVVFzUlVGQlJVY3NUMEZCVDBZc1NVRkJTU3hEUVVGRExFbEJRVWt2UWl4RlFVRkZOa01zUzBGQlMybFBMR2xDUVVGcFFtaFFMRVZCUVVWRExFbEJRVWtzU1VGQlNTOUNMRXRCUVV0QkxFdEJRVXMyUXl4TFFVRkxOazRzYzBKQlFXOUNMMDBzUzBGQlMzTkNMRmxCUVZsdVJDeEZRVUZGUXl4SlFVRkxMRTlCUVUwc1JVRkJSeXhQUVVGTkxFZEJRVWswUWl4TFFVRkxjMDBzWVVGQllURlBMRlZCUVZWMVVDeHBRa0ZEZW1kQ0xGTkJRVk5vVUN4SFFVRkhMRTlCUVU5QkxFdEJRVXRsTEV0QlFVdHpUaXhWUVVGVmRFNHNTMEZCUzNOT0xGVkJRVlZ5VHl4SFFVRkhRU3hMUVVGTFpTeExRVUZMY1U0c1kwRkJZM0JQTEVWQlFVVXNUVUZCVFRaQ0xFdEJRVXR6VFN4aFFVRmhNVThzVlVGQlZUSlJMRTlCUVU4c1UwRkJVM0JSTEVWQlFVVkRMRWRCUVVkakxFdEJRVXMyVGl4dFFrRkJiVUkxVHl4RlFVRkZkMUVzVFVGQlRYWlJMRVZCUVVWakxFdEJRVXM0VGl4bFFVRmxOVVVzUzBGQlMycExMRVZCUVVWM1VTeFBRVUZQTTA4c1MwRkJTelJQTEdWQlFXVXNZVUZCWVRWUExFdEJRVXMwVHl4bFFVRmxhRklzVlVGQlZXbFJMRTFCUVUwc1lVRkJZVGRPTEV0QlFVczBUeXhsUVVGbGFGSXNWVUZCVld0UkxFOUJRVThzWVVGQllUbE9MRXRCUVVzMFR5eGxRVUZsYUZJc1ZVRkJWVzlSTEU5QlFVOHNZVUZCWVdoUExFdEJRVXMwVHl4bFFVRmxhRklzVlVGQlZYTlJMRkZCUVZFc1lVRkJZV3hQTEV0QlFVczBUeXhsUVVGbGFGSXNWVUZCVlhkUkxIbENRVUY1UWl4VFFVRlRhbEVzUlVGRGRtWkRMRVZCUVVVdlFpeExRVUZMTWtRc1MwRkJTelJQTEdWQlFXVm9VaXhWUVVGVmRWRXNaVUZCWlN4VFFVRlRhRkVzUzBGQlN6WkNMRXRCUVVzMFR5eGxRVUZsYUZJc1ZVRkJWVEJSTEdsQ1FVRnBRaXhoUVVGaGRFOHNTMEZCU3pSUExHVkJRV1ZvVWl4VlFVRlZaMHdzVFVGQlRTeFRRVUZUZWtzc1MwRkJTelpDTEV0QlFVczBUeXhsUVVGbGFGSXNWVUZCVlRSUkxHTkJRV01zWVVGQllYaFBMRXRCUVVzMlR5eFhRVUZYTEZOQlFWTXhVU3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUlVGQlJXbERMRWRCUVVkWExFdEJRVXQ1VUN4TFFVRkxlRkVzUlVGQlJXVXNTMEZCU3pSUUxHRkJRV0V4VVN4RlFVRkZZeXhMUVVGTE5sQXNVMEZCVXpGVExFVkJRVVUyUXl4TFFVRkxkVThzVTBGQlUyNVNMRVZCUVVVMFF5eExRVUZMT0ZBc1ZVRkJWWHBSTEVWQlFVVlhMRXRCUVVzclR5eFRRVUZSTEVWQlFVY3ZUeXhMUVVGTEsxQXNaVUZCWlN4SlFVRkphbEFzUzBGQlN6WlBMRmRCUVZkcVVpeFZRVUZWYzFJc1dVRkJXU3hYUVVGWExFbEJRVWt2VVN4RlFVRkZaU3hMUVVGTGVWQXNTMEZCUzNaUkxFVkJRVVZFTEVWQlFVVXJTaXhSUVVGUkxFOUJRM2hoTEU5QlJDdGhMRWRCUVVjNVNpeEpRVU01WXl4SlFVUnhaVUVzUjBGQmJrSkVMRVZCUVVWQkxFVkJRVVZ6UkN4VlFVRlZja1FzUlVGQlJTeEpRVU12WlRoS0xGRkJRVkVzVVVGQldTOUtMRVZCUVVWQkxFVkJRVVZ6UkN4VlFVRlZja1FzUlVGQlJTeExRVUZaUkN4SFFVRkhOa0lzUzBGQlN6WlBMRmRCUVZkcVVpeFZRVUZWZDFBc1QwRkJUeXhUUVVGVGFsQXNSMEZCUjJVc1MwRkJTeXRQTEZGQlFWRTVVQ3hKUVVGSlpTeExRVUZMSzFBc1pVRkJaVGRITEV0QlFVdHFTeXhKUVVGSk5rSXNTMEZCU3paUExGZEJRVmRxVWl4VlFVRlZiMUVzVDBGQlR5eFhRVUZYT1U4c1MwRkJTeXRQTEZOQlFWRXNSVUZCUnl4SlFVRkpPVkFzUlVGQlJXVXNTMEZCU3l0UUxHVkJRV1V2VUN4TFFVRkxLMUFzWlVGQlpTeEhRVUZITEVsQlFVa3NTVUZCU1RkUkxFVkJRVVVzUlVGQlJVRXNSVUZCUlVRc1JVRkJSVWNzVDBGQlQwWXNTVUZCU1VRc1JVRkJSVU1zVFVGQlRUUkNMRXRCUVVzMlR5eFhRVUZYVGl4UlFVRlBMRVZCUVVkMlR5eExRVUZMTms4c1YwRkJWMDBzWVVGQllTeEhRVUZIYmxBc1MwRkJTelpQTEZkQlFWZFBMR3RDUVVGclFpeFRRVUZUYWxJc1IwRkJSeXhKUVVGSlF5eEZRVUZGYzBJc1MwRkJTelJJTEZOQlFWTmtMRk5CUVZNc1NVRkJjME1zVDBGQmJFTjRSeXhMUVVGTE5rOHNWMEZCVjAwc1lVRkJZUzlSTEVkQlFVZEVMRVZCUVZORExFZEJRVWMwUWl4TFFVRkxOazhzVjBGQlYxRXNiMEpCUTNKbExGTkJRVk5zVWl4VlFVRlZOa0lzUzBGQlN6WlBMRmRCUVZkTkxHRkJRV0ZvVWl4SlFVRkpOa0lzUzBGQlN6WlBMRmRCUVZkVExGVkJRVlVzVTBGQlUyNVNMRVZCUVVWRExFZEJRVWNzUzBGQlIwUXNTMEZCU3paQ0xFdEJRVXMyVHl4WFFVRlhUU3hqUVVGdlNTeE5RVUZOT1U0c1RVRkJUU3huUWtGQlowSnNSQ3hGUVVGRkxIbEVRVUZ3U2l4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTWtRc1MwRkJTelpQTEZkQlFWZE5MR0ZCUVdGb1VpeEhRVUZITjBJc1JVRkJSU3hIUVVGSGFVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmMwb3NWVUZCVlhaS0xFOUJRVTlETEVsQlFVbHFReXhGUVVGRk9Fd3NTMEZCUzFBc1ZVRkJWWFJLTEVsQlFVbHNReXhGUVVGRmRVd3NWMEZCVFN4RlFVRlBkRXdzU1VGQmFVY3dSQ3hMUVVGTE5rOHNWMEZCVjJwU0xGVkJRVlUyVVN4TFFVRkxMRk5CUVZOMFVTeEhRVUZITEVkQlFVYzJRaXhMUVVGTFppeFBRVUZQYzFFc2MwSkJRWE5DZGxBc1MwRkJTMllzVDBGQlQzTlJMSE5DUVVGelFuSlJMRXRCUVV0NVVDeE5RVUZOZUZFc1JVRkJSVFpRTEZOQlFWTTNVQ3hGUVVGRk1GQXNZVUZCWVN4SFFVRkhOMDRzUzBGQlN6aExMR3RDUVVGclFpeERRVUZETEVsQlFVa3hUU3hGUVVOMlowSTBRaXhMUVVGTFppeFBRVUZQTmtNc1UwRkJVeXhIUVVGSExGbEJRVmt4UkN4RlFVRkZOazBzWVVGQllXcE1MRXRCUVV0clFpeHpRMEZCYzBNc1EwRkJReXhIUVVGSExHRkJRV0ZyUWl4TFFVRkxiRVFzUzBGQlMzbFFMRTFCUVd0Q0xGbEJRVmg0VVN4RlFVRkZObEFzVTBGQlowSXNUVUZCVFROTkxFMUJRVTBzYVVKQlFXbENia01zUzBGQlMzbFFMRXRCUVVzc2VVSkJRVEJDTEVsQlFVa3pUeXhMUVVGTGEwSXNkVU5CUVhWRGJFSXNTMEZCU3l0TExIRkNRVUZ4UWl4RFFVRkRMRWxCUVVreFR5eEZRVUZGTWtRc1MwRkJTelpQTEZkQlFWZFBMRzFDUVVGclFpeFRRVUZUYUZJc1IwRkJSelJDTEV0QlFVdHpUU3hoUVVGaGEwUXNXVUZCV1N4WlFVRlpjRklzUlVGQlJUWk5MR0ZCUVdGcVRDeExRVUZMTms4c1YwRkJWMUVzYjBKQlFXOUNhRlFzUjBGQlJ6aENMRVZCUVVVMlVDeGhRVUZaTVZJc1IwRkJSekJFTEV0QlFVdHpUU3hoUVVGaGEwUXNXVUZCV1hoUUxFdEJRVXMwUWl4cFFrRkRkR1VzVjBGQlZ6VkNMRXRCUVVzMFFpeHBRa0ZCYVVJc1NVRkJTU3hIUVVGSGRFWXNSVUZCUlN4blFrRkJaMEkwUXl4TFFVRkxlVkFzUzBGQlN5eE5RVUZOTTA4c1MwRkJTM05OTEdGQlFXRnJSQ3hYUVVGWExIRkNRVUZ4UWl4VlFVRlZMR2xEUVVGcFEyNVVMRVZCUVVVc2MwTkJRWE5ETWtRc1MwRkJTelpQTEZkQlFWZE9MRTlCUVU4c1VVRkJVU3hKUVVGSmFsTXNSVUZCUlN4alFVRm5RamhDTEVWQlFVVnhVaXhOUVVGTmVsQXNTMEZCU3pCUUxITkNRVUZ6UWpGUUxFdEJRVXN3VUN4elFrRkJjMEpETEZkQlFWZHlWQ3hIUVVGSFFTeFBRVUZQTEVOQlFVTXNTVUZCU1dsRExFVkJRVVZJTEVWQlFVVjFTeXhqUVVGakxGVkJRVlZ3U3l4RlFVRkZjVXNzVFVGQlRUVkpMRXRCUVVzMlR5eFhRVUZYVGl4UFFVRlBhRkVzUlVGQlJYRlNMRTlCUVUwc1JVRkJSM0pTTEVWQlFVVjVSU3hMUVVGTExHMUNRVUZ0UWpGSExFVkJRVVV3UkN4TFFVRkxORUlzYlVKQlFXMUNja1FzUlVGQlJYTlNMR0ZCUVdFc1VVRkJVWFpVTEVkQlFVY3dSQ3hMUVVGTGMwMHNZVUZCWVd0RUxGbEJRMnBuUW5KU0xFVkJRVVV3VUN4UlFVRlJkRkFzUlVGQlJYVlNMRzFDUVVGdFFpeFhRVUZqTEZWQlFWVjJVaXhGUVVGRk1FMHNXVUZCV1N4WlFVRlpNVTBzUlVGQlJUQk5MR0ZCUVZjNVRTeEZRVUZGTmxBc1UwRkJVemRRTEVWQlFVVXlVQ3haUVVGWGRsQXNSVUZCUlhkU0xFOUJRVThzVjBGQlYzaFNMRVZCUVVWM1VpeFBRVUZQTEV0QlFVczFVaXhGUVVGRk5sQXNWVUZCVlhwUUxFVkJRVVVyVFN4SlFVRkpkRXdzUzBGQlN6QlFMSE5DUVVGelFqRlFMRXRCUVVzd1VDeHpRa0ZCYzBKTkxHZENRVUZuUWpsUkxFdEJRVXQ1VUN4TlFVRk5lbEFzUzBGQlMzbFFMRXRCUVV0MlVTeEZRVUZGTWtzc1MwRkJTMFlzV1VGQldYUkxMRk5CUVZONVFpeExRVUZMTmtRc1kwRkJZeXc0UkVGQk9FUXNWMEZCVnpORkxFdEJRVXMwVUN4alFVRmpPVThzUzBGQlN6WkVMR05CUVdNc2MwZEJRM0JoTVVZc1JVRkJSVFpRTEZWQlFWVTNVQ3hGUVVGRk1GQXNVMEZCVXpkT0xFdEJRVXRwVVN4dlFrRkJiMElzVTBGQlV6bFNMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSMEZCUjNsQ0xFdEJRVXMyVHl4WFFVRlhNVk1zUzBGQlN5dERMRXRCUVV0bUxFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1NVRkJTWGxDTEV0QlFVczRTaXhUUVVGVE9Vb3NTMEZCUzJsUkxHOUNRVUZ2UW1wUkxFdEJRVXMyVHl4WlFVRlpOMDhzUzBGQlMybFJMRzlDUVVGdlFuSlRMRlZCUVZVMlVTeExRVUZMTEZOQlFWTjBVU3hIUVVNclJTeEhRVUZITmtJc1MwRkJTMllzVDBGQlQzTlJMSE5DUVVGelFuWlFMRXRCUVV0bUxFOUJRVTl6VVN4elFrRkJjMEp5VVN4TFFVRkxlVkFzVFVGQlRYaFJMRVZCUVVVMlVDeFRRVUZUTjFBc1JVRkJSVEJRTEdGQlFXRXNSMEZCUnpkT0xFdEJRVXM0U3l4clFrRkJhMElzUTBGQlF5eEpRVUZKZUU4c1JVRkJSVEJFTEV0QlFVdG1MRTlCUVU4MlF5eFRRVUZUZGtRc1JVRkJSVmNzUzBGQlN5eEhRVUZIWXl4TFFVRkxLMHNzY1VKQlFYRkNMRU5CUVVNc1NVRkJTWFpOTEVWQlJIWlNMRk5CUVZkTUxFVkJRVVZETEVkQlFVZEVMRVZCUVVWRExFVkJRVVVzY1VOQlFYRkRRU3hGUVVGRkxHRkJRV1VzTUVOQlFUQkRSQ3hGUVVGRkxHVkJRV2xDTjBJc1JVRkJSVzFVTEUxQlFVMTZVQ3hMUVVGTE1GQXNjMEpCUVhOQ01WQXNTMEZCU3pCUUxITkNRVUZ6UWtNc1YwRkJWM2hTTEVkQlFVZEJMRWxCUTNkRk5rSXNTMEZCU3paUExGZEJRVmRPTEZGQlEycG5RaXhQUVVGUkwxQXNSVUZHYjJFc1UwRkJWMHdzUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlJVTXNSVUZCUlhGTkxHTkJRV01zVlVGQlZYUk5MRVZCUVVWMVRTeFBRVUZOTEVWQlFVZDJUU3hGUVVGRmRWUXNUMEZCVFN4RlFVRkhkbFFzUlVGQlJUSkhMRXRCUTNCbUxGTkJRVk16Unl4RlFVRkZkMVFzWVVGQllTeGxRVUZqTEVkQlFVa3NTVUZCU1hSU0xFVkJRVVY1UWl4TFFVRkxORUlzYVVKQlFXbENja1FzUjBGQlIyeERMRVZCUVVWM1ZDeGhRVUZoTEZGQlFWRjBVaXhIUVVGSFNDeEZRVUZGTDBJc1JVRkJSVFpVTEZsQlFWbHNVU3hMUVVGTE1GQXNjMEpCUVhOQ01WQXNTMEZCU3pCUUxITkNRVUZ6UWxNc1lVRkJZUzlTTEVkQlFVZEJMRVZCUVVVdlFpeEZRVUZGYVZBc1NVRkJTWFJNTEV0QlFVc3dVQ3h6UWtGQmMwSXhVQ3hMUVVGTE1GQXNjMEpCUVhOQ1RTeG5Ra0ZCWjBJM1VpeEhRVUZIUVN4RlFVRkZOMElzUlVGQlJYbE5MRXRCUVV0R0xGbEJRVmw0VFN4SlFVTnVVaXhKUVVGSmQwUXNSVUZCUlVjc1MwRkJTelpQTEZkQlFWZFBMRzFDUVVGclFpeFhRVUZYY0ZBc1MwRkJTelpQTEZkQlFWZFJMRzlDUVVGdlFuaFFMRWRCUVVjeFFpeEZRVUZGWjFFc1pVRkJaVzVQTEV0QlFVczBReXhYUVVGWFF5eFJRVUZQY2tVc1QwRkJSU3hGUVVGUExEaENRVUU0UW5GQ0xFVkJRVVVzVFVGQlRYSkNMRVZCUVVWVkxFdEJRVXQ1VUN4VlFVRkxMRWRCUVZFc1NVRkJTUzlETEVWQlFVVTFUQ3hMUVVGTE5rOHNWMEZCVjA4c2JVSkJRV3RDTEZOQlFWTm9VaXhIUVVGSE5FSXNTMEZCU3paUExGZEJRVmRSTEc5Q1FVRnZRbnBFTEVkQlFVZDZUaXhGUVVGRmFWRXNlVUpCUVhsQ04xQXNSVUZCUlc5UkxFdEJRVXQyVVN4RlFVRkZORUlzUzBGQlMzZERMRzFDUVVGdFFrTXNaVUZCWTJwRkxFOUJRVVVzUlVGQlR5eDFRa0ZCZFVKVkxFdEJRVXQ1VUN4TFFVRkxMR2xEUVVGcFF5OURMRVZCUVVVc1UwRkJVeXhKUVVGSmQwVXNSVUZCUlhCUkxFdEJRVXMyVHl4WFFVRlhUeXh0UWtGQmEwSXNWMEZCVjNCUUxFdEJRVXMyVHl4WFFVRlhVU3h2UWtGQmIwSmxMRWRCUTI1cFFtcFRMRVZCUVVWdFVTeHRRa0ZCYlVKdVVTeEZRVUZGTmxBc1dVRkJWM2hRTEU5QlFVVXNSVUZCVHl3NFFrRkJPRUkwVWl4RlFVRkZMRmRCUVZkd1VTeExRVUZMTmtRc1kwRkJZeXc0UkVGQk9FUXhSaXhGUVVGRk1GQXNVMEZCVXpkT0xFdEJRVXR4VVN4elFrRkJjMElzVTBGQlUyeFRMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSMEZCUjNsQ0xFdEJRVXMyVHl4WFFVRlhNVk1zUzBGQlN5dERMRXRCUVV0bUxFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1IwRkJSMWNzUzBGQlMyOVNMRlZCUVZVc1MwRkJTM0JTTEV0QlFVdHhVaXhaUVVGWmRsRXNTMEZCU3poTExIRkNRVUZ4UWl4aFFVRmhPVXNzUzBGQlMyWXNUMEZCVHpaRExGTkJRVk0yUnl4alFVRmpMRmxCUVZrelNTeExRVUZMT0Vvc1UwRkJVemxLTEV0QlFVdHhVU3h6UWtGQmMwSnlVU3hMUVVGTE5rOHNXVUZCV1RkUExFdEJRVXR4VVN4elFrRkJjMEo2VXl4VlFVRlZObEVzUzBGQlN5eFRRVUZUZEZFc1IwRkJSeXhUUVVGVFF5eEpRVUZKUnl4RlFVRkZLMUlzVlVGRGFHZENkRkVzUzBGQlN6SkdMR05CUVdOd1NDeEZRVUZGYjFFc1RVRkJUWEJSTEVWQlFVVXJVaXhaUVVGWkwxSXNSVUZCUlN0U0xGVkJRVlV2VWl4RlFVRkZhVk1zVlVGQlZXcFRMRVZCUVVVclVpeFhRVUZYTDFJc1JVRkJSU3RTTEZsQlFWa3ZVaXhGUVVGRksxSXNWMEZCVnl4dFFrRkJiVUl2VWl4RlFVRkZiMUVzVDBGQlR5eFRRVUZUZEZNc1NVRkJjMElzUjBGQmJFSnJReXhGUVVGRloxTXNXVUZCV1c1VExFbEJRVTlITEVWQlFVVXJVaXhWUVVGVkxFTkJRVU01VWl4SFFVRkhUQ3hGUVVGRloxRXNaVUZCWlc1UExFdEJRVXMwUXl4WFFVRlhReXhMUVVGTExFbEJRVWtzU1VGQlNYaEhMRVZCUVVWclF5eEZRVUZGSzFJc1ZVRkJPRU1zUjBGQmNFTXZVaXhGUVVGRksxSXNWVUZCVlN4TFFVRkxkRkVzUzBGQlMzZEpMRmRCUVZkdVRTeEhRVUZOYlVNc1JVRkJSU3hKUVVGSmJFTXNSVUZCUlRCRUxFdEJRVXQzUXl4dFFrRkJiVUpETEZkQlFWY3NVVUZCVVdwRkxFZEJRVWRNTEVWQlFVVnRVU3h0UWtGQmJVSTVVQ3hIUVVGSGQwSXNTMEZCUzJZc1QwRkJUMnBDTEZGQlFWRnZSaXhSUVVGUmNVNHNUMEZCVHl4RFFVRkRiRk1zUlVGQlJUSlJMR2RDUVVGbExGZEJRVmN2VVN4RlFVRkZhVkVzZVVKQlFYbENOMUFzUlVGQlJXOVJMRXRCUVVzelR5eExRVUZMWml4UFFVRlBha0lzVVVGQlVXOUdMRkZCUVZFM1JTeEZRVUZGTWxFc1pVRkRlR1UxVXl4TlFVRkxOa0lzUlVGQlJUWlFMRlZCUVRoVkxFbEJRVWw2VUN4RlFVRkZWeXhMUVVGTExFZEJRVWRqTEV0QlFVdG1MRTlCUVU5elVTeHpRa0ZCYzBKdVVpeEpRVUZKWXl4TFFVRkxiMUlzVjBGQlYzUlJMRXRCUVV0bUxFOUJRVTl6VVN4elFrRkJjMElzUjBGQlIzSlJMRXRCUVV0dlVpeFpRVUZaY0ZJc1MwRkJTMjlTTEZWQlFWVXNTMEZCUzI1VExFVkJRVVUyVUN4VlFVRlZOMUFzUlVGQlJUQlFMRmxCUXpkbExFTkJRVU1zU1VGQlNYSlFMRVZCUVVWVkxFdEJRVXM0VUN4VlFVRlZkbFFzVVVGQlVYVkZMRXRCUVVzMFF5eFhRVUZYUXl4SlFVRkpNMFFzUzBGQlMzRlNMRmxCUVZsdVV5eEpRVUZKTEVsQlFVbDVRaXhGUVVGRkxFVkJRVVV4UWl4RlFVRkZLMUFzVlVGQlZUVlFMRTlCUVU5elRpeEZRVUZGTDB3c1IwRkJSMGNzUzBGQlMzTk5MR0ZCUVdGclJDeFhRVUZ2UlN4SFFVRjZSRE5RTEVWQlFVVkhMRXRCUVVzMlR5eFhRVUZYVGl4VFFVRlRNVThzUjBGQlIwY3NTMEZCU3l0TExITkNRVUY1UW1Fc1IwRkJSeTlNTEVWQlFVVXhRaXhGUVVGRmVVc3NUMEZCVFN4WFFVRlhkazBzVjBGQlZTeERRVUZETEVsQlFVa3JWQ3hGUVVGRmNGRXNTMEZCUzJZc1QwRkJUelpETEZOQlFXbEZMRWRCUVhoRU9Fb3NSVUZCUlRWTUxFdEJRVXM0U3l4dFFrRkJiVUlzYTBKQlFXdENPVXNzUzBGQlMyWXNUMEZCVlZRc1IwRkJSM2RDTEV0QlFVczRTeXh0UWtGQmJVSTVTeXhMUVVGTEswc3NkVUpCUVhWQ1lTeEZRVUZGTEVOQlFVTTFUQ3hMUVVGTE5rOHNWMEZCVjA0c1VVRkJUeXhGUVVGSGNGRXNSVUZCUlRCUUxGRkJRVkVzU1VGQlNUVlNMRVZCUVVWdFZTeEZRVUZGVGl4dFFrRkJiVUpOTEVWQlFVVk9MRzFDUVVGdFFpeFhRVUZYTEdWQlFXVk5MRVZCUVVWdVJpeGhRVUZoYlVZc1JVRkJSVTRzYlVKQlEzUm1OMVFzUlVGQlJVa3NTVUZCU1RoQ0xFVkJRVVV5VUN4VlFVRlZPVTRzUzBGQlMzRkdMRmRCUVZkd1NpeEpRVUZKUVN4RlFVRkZNa3dzVjBGQlRTeEZRVUZQUXl4cFFrRkJhVUkzU0N4TFFVRkxjMDBzWVVGQllXdEVMRmxCUVZsNFVDeExRVUZMT0Vzc2JVSkJRVzFDT1Vzc1MwRkJTeXRMTEhGQ1FVWm9TQ3hYUVVGaExFbEJRVWsxVFN4RlFVRkZOa0lzUzBGQlMyWXNUMEZCVHpaRExGTkJRVk14UkN4RlFVRkZORUlzUzBGQlN6WlBMRmRCUVZkUExHMUNRVUZyUWl4WFFVRlhjRkFzUzBGQlN6WlBMRmRCUVZkUkxHOUNRVUZ2UW1wU0xFZEJRVWN2UWl4UFFVRk5ReXhGUVVGRkxHdERRVUZyUXpCRUxFdEJRVXR4VFN4clFrRkJhMElzT0VKQlFUaENhazhzUlVGQlJTeFBRVUZQTEdGQlFXVkVMRVZCUVVWelVpeE5RVUZOZWxBc1MwRkJTekJRTEhOQ1FVRnpRakZRTEV0QlFVc3dVQ3h6UWtGQmMwSkRMRmRCUVZkeVZDeEhRVUZIUVN4SFFVVTFURUVzUjBGQlNVUXNUMEZCVHpKRUxFdEJRVXR4VVN4elFrRkJjMEo2VXl4VlFVRlZORk1zVlVGQlZTeFRRVUZUY2xNc1MwRkJTelpDTEV0QlFVc3dVU3h4UWtGQmNVSXNVMEZCVTNaVExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1JVRkJSVU1zUjBGQlIzZENMRXRCUVV0eFVTeHpRa0ZCYzBKc1ZTeExRVUZMSzBNc1MwRkJTMllzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVWQlFVVnBReXhIUVVGSFZ5eExRVUZMZVZJc1YwRkJWMjVUTEVkQlFVZDNRaXhMUVVGTE9Fb3NVMEZCVXpsS0xFdEJRVXN3VVN4eFFrRkJjVUl4VVN4TFFVRkxjVkVzZFVKQlFYVkNjbEVzUzBGQlN6QlJMSEZDUVVGeFFqbFRMRlZCUVZVMFV5eFZRVUZWTEZOQlFWTnlVeXhIUVVGSExFOUJRVTlsTEV0QlFVdDVVaXhYUVVGWGVFc3NWVUZCVldoSkxFVkJRVVZsTEV0QlFVdG5VU3huUWtGRGRtWnNVQ3hMUVVGTE5GRXNhVU5CUVdsRExGTkJRVk42VXl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVZDVRaXhMUVVGTGNWRXNjMEpCUVhOQ2JGVXNTMEZCU3l0RExFdEJRVXRtTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zU1VGQlNYbENMRXRCUVVzNFNpeFRRVUZUT1Vvc1MwRkJTelJSTEdsRFFVRnBRelZSTEV0QlFVdHhVU3gxUWtGQmRVSnlVU3hMUVVGTE5GRXNhVU5CUVdsRGFGUXNWVUZCVlRSVExGVkJRVlVzVTBGQlUzSlRMRWRCUVVjc1QwRkJUMEVzUjBGQlJ6WkNMRXRCUVVzMlVTeHhRa0ZCY1VJc1UwRkJVekZUTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUlVGQlJVTXNSVUZCUlhGQ0xFZEJRVWRITEV0QlFVdHhVU3h6UWtGQmMwSnNWU3hMUVVGTEswTXNTMEZCUzJZc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFVkJRVVZwUXl4SFFVRkhWeXhMUVVGTE5GSXNaMEpCUVdkQ2RGTXNSVUZCUlZVc1MwRkJTMnRPTEZsQlFWbDJUU3hIUVVGSFJ5eExRVUZMT0Vvc1UwRkJVemxLTEV0QlFVczJVU3h4UWtGQmNVSTNVU3hMUVVGTGNWRXNkVUpCUVhWQ2NsRXNTMEZCU3paUkxIRkNRVUZ4UW1wVUxGVkJRVlUwVXl4VlFVTm9aMElzVTBGQlUzSlRMRWRCUVRoRkxFOUJRVE5GWlN4TFFVRkxORklzYTBKQlFXdENNMU1zUlVGQlJXVXNTMEZCUzJ0T0xGbEJRVmxxUnl4VlFVRlZhRWtzUlVGQlJXVXNTMEZCUzJkUkxHZENRVUYxUW14UUxFdEJRVXN3UlN4M1FrRkJkMEl4UlN4TFFVRkxSU3hOUVVGTlJpeExRVUZMWml4UFFVRlBiMGdzVFVGQlRTeHRRa0ZCYlVKeVJ5eExRVUZMWml4UFFVRlBiMGdzUzBGQlMwTXNWVUZCVlc1SkxFVkJRVVVzYlVKQlFXMUNaU3hMUVVGTGVWQXNTMEZCU3l4TlFVRk5MRXRCUVVzc2JVUkJRVzFFZUZFc1JVRkJSU3gxUTBGQmRVTmxMRXRCUVV0NVVDeExRVUZMTEUxQlFVMHpUeXhMUVVGTGMwMHNZVUZCWVd0RUxHRkJRV0Y0VUN4TFFVRkxaaXhQUVVGUE9GSXNUMEZCVHk5UkxFdEJRVXRtTEU5QlFVODJReXhYUVVGWE9VSXNTMEZCUzJZc1QwRkJUelpETEZOQlFWTnJVQ3hMUVVGTGFGSXNTMEZCUzNOTkxHRkJRV0V4VHl4VlFVRlZOa1lzWTBGQll5eFRRVUZUZEVZc1JVRkJSVU1zUlVGRGNHWXZRaXhGUVVGRlF5eEhRVUZIT0VJc1JVRkJSVUVzUjBGQlJ5eEhRVUZIUkN4RlFVRkZRU3hGUVVGRmRVd3NVVUZCVVN4TlFVRk5MRXRCUVVzc1NVRkJTVzVNTEVWQlFVVjVRaXhMUVVGTGQwWXNaVUZCWlhoR0xFdEJRVXR0UlN4VFFVRlRhRWNzUjBGQkswd3NTVUZCTlV3M1FpeEhRVUZITEd0Q1FVRnRRa0VzU1VGQlNVRXNSVUZCUlVFc1JVRkJSU3hEUVVGRFlpeFBRVUZQZFVVc1MwRkJTelJETEZkQlFWZEZMRTFCUVUwc1NVRkJTWHBITEVWQlFVVTJReXhMUVVGTE1rNHNVMEZCVTFNc2FVSkJRV2xDTDA4c1JVRkJSVW9zUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVWQlFVVXdSQ3hMUVVGTGIwMHNXVUZCV1VRc1pVRkJaVGRRTEVWQlFVVXlWU3hOUVVGTkxFMUJRVTB6VlN4RlFVRkZZaXhUUVVGVGVVUXNTMEZCUzNGT0xHTkJRV05vVHl4SFFVRkhiRU1zUlVGQlRVRXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTGMwNHNWVUZCVlhCUExFVkJRVVV2UWl4SlFVRkphME1zUlVGQlJWY3NTMEZCUzNOT0xGVkJRVlZ5VHl4SFFVRkhTU3hIUVVGSGVVSXNTMEZCU3poTkxHdENRVUZyUWl4VFFVRlRNMDhzUjBGQlIyVXNTMEZCUzNsU0xGZEJRVmQ0VXl4SFFVRkhOa0lzUzBGQlN6aE5MR3RDUVVGclFteFFMRlZCUVZVd1VDeHBRa0ZCYVVJc1UwRkJVMjVRTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUlVGQlJVTXNSMEZCUnl4UFFVRlBSQ3hGUVVGRk9VTXNVVUZCVVhWRkxFdEJRVXMwUXl4WFFVRlhSU3hMUVVGTExFbEJRVWs1UXl4TFFVRkxObEVzY1VKQlFYRkNNVk1zUlVGRGFHaENReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVWQlFVVkRMRVZCUVVWVkxFdEJRVXQ1VWl4WlFVRlpibE1zUlVGQlJTeEpRVUZKZDBJc1MwRkJTekJSTEhGQ1FVRnhRblpUTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUlVGQlJWY3NTMEZCUzNsU0xGbEJRVmx3VXl4RlFVRkZPVU1zVVVGQlVYVkZMRXRCUVVzMFF5eFhRVUZYUXl4SlFVRkpMRk5CUVZNM1F5eExRVUZMTkVVc1YwRkJWelZGTEV0QlFVczJSU3cyUWtGQk5rSXNTVUZCU1RkRkxFdEJRVXMwVVN4cFEwRkJhVU42VXl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVY3NTVUZCU1hsQ0xFdEJRVXRwVVN4dlFrRkJiMEk1VWl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVkQlFVY3NTVUZCU1hsQ0xFdEJRVXMyVHl4WFFVRlhNVkVzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVWQlFVVnBReXhKUVVGSmVVSXNTMEZCU3pKRUxHRkJRV0VzU1VGQlNUTkVMRXRCUVV0elRTeGhRVUZoZEUwc1MwRkJTM0ZPTEdkQ1FVRm5RaXhYUVVGWGNrNHNTMEZCU3pKRUxHRkJRV0V3U2l4dFFrRkJiVUp5VGl4TFFVRkxNRTRzY1VKQlFYRkNMRk5CUVZOMlVDeEhRVUZITmtJc1MwRkJTekpFTEdGQlFXRXJTaXh4UWtGQmNVSjJVQ3hKUVVGSk5rSXNTMEZCUzJZc1QwRkJUMmxUTEdsQ1FVTjBabXhTTEV0QlFVc3lSQ3hoUVVGaE1Fb3NhMEpCUVd0Q2NrNHNTMEZCUzJsT0xGVkJRVlVzVTBGQlV6bFBMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxNa1FzWVVGQllYTktMRlZCUVZVNVR5eEZRVUZGUXl4TFFVRkxORUlzUzBGQlMyMVNMREJDUVVFd1FpeEhRVUZIYmxJc1MwRkJTMjlTTEZWQlFWVXNVMEZCVTJwVUxFZEJRVWNzVDBGQlQwRXNSMEZCUnpaQ0xFdEJRVXR4VWl4NVFrRkJlVUlzVTBGQlUyeFVMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeExRVUZMTEVkQlFVY3NiMEpCUVhGQ2ExUXNaVUZCWlVFc1lVRkJZVU1zWVVGQllTeFBRVUZQYmxRc1JVRkJSU3hKUVVGSlFTeEZRVUZGYTFRc1lVRkJZVU1zWVVGQllYQlVMRVZCUVVVc1EwRkJRM2RTTEZkQlFWY3pVQ3hMUVVGTGIxSXNWVUZCVldwQ0xHRkJRV0Z1VVN4TFFVRkxiMUlzVlVGQlZYQkNMR2RDUVVGblFtaFJMRXRCUVV0dlVpeFZRVUZWU1N4VlFVRlZlRklzUzBGQlMyOVNMRmxCUVZrc1RVRkJUUzlWTEVkQlFVY3lSQ3hMUVVGTE5rUXNZMEZCWTNoSUxFVkJRVVZ2Vml4VFFVRlRMRTlCUVU5eVZDeEhRVU16WlRSQ0xFdEJRVXN3VUN4elFrRkJjMEl4VUN4TFFVRkxiVklzTUVKQlFUQkNibElzUzBGQlMzRlNMSGxDUVVGNVFuSlNMRXRCUVV0dFVpd3dRa0ZCTUVJc1UwRkJVeXhMUVVGTGJsSXNTMEZCUzNSRExFOUJRVThzUjBGQlIzTkRMRXRCUVV0MFF5eFBRVUZQWjFVc1IwRkJSeXhUUVVGVGRsUXNSVUZCUlVNc1IwRkJSeXhQUVVGUFJDeEpRVUZKUXl4RlFVRkZMRWxCUVVsRUxFZEJRVWNzUlVGQlJVRXNSMEZCU1N4RlFVRkZReXhGUVVGRlJDeEhRVUZKUVN4SFFVRkhReXhIUVVGSlFTeEhRVUZITkVJc1MwRkJTM1JETEU5QlFVOXBWU3hSUVVGUkxGTkJRVk40VkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpMRWxCUVVsRExFdEJRVXMyUWl4RlFVRkZReXhGUVVGRmFrTXNTMEZCUzBVc1JVRkJSVGhDTEVWQlFVVTNRaXhIUVVGSFFTeEZRVUZGTmtJc1NVRkJTVFpDTEV0QlFVdDBReXhQUVVGUGExVXNUMEZCVHl4VFFVRlRlbFFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzU1VGQlUydERMRVZCUVV4cVF5eEZRVUZGTEVkQlFVc3NTVUZCU1dsRExFdEJRVXRLTEVWQlFVVkRMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZPRUlzUlVGQlJVa3NSMEZCUjBFc1JVRkJSVW9zUzBGQlN6ZENMRVZCUVVWcFF5eEhRVUZIU2l4RlFVRkZTU3hKUVVGSkxFOUJRVTlxUXl4SFFVRkhNRVFzUzBGQlMzUkRMRTlCUVU5M1R5eEpRVUZKTEZOQlFWTXZUaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGVGEwTXNSVUZCVEdwRExFVkJRVVVzUjBGQlN5eEpRVUZKYVVNc1MwRkJTMG9zUlVGQlJUZENMRVZCUVVWcFF5eEhRVUZIU0N4RlFVRkZha01zUzBGQlMwVXNSVUZCUlRoQ0xFVkJRVVZKTEVkQlFVZEJMRVZCUVVWS0xFZEJRVWNzVDBGQlR6ZENMRWRCUVVjd1JDeExRVUZMZEVNc1QwRkJUMjFWTEV0QlFVc3NVMEZCVXpGVUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNTMEZCU3paQ0xFVkJRVVVzUjBGQlIwTXNSVUZCUldwRExFdEJRVXRGTEVWQlFVVTRRaXhGUVVGRk4wSXNSMEZCUjBFc1JVRkJSVFpDTEVkQlFVY3NUMEZCVFN4RlFVRkhMRTlCUVUwc1IwRkRjR3BDTmtJc1MwRkJTM1JETEU5QlFVOXZWU3hOUVVGTkxGTkJRVk16VkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpMRWxCUVVsRExFdEJRVXMyUWl4RlFVRkZMRWxCUVVsRExFVkJRVVZxUXl4TFFVRkxSU3hGUVVGRk9FSXNSVUZCUlRkQ0xFZEJRVWRCTEVWQlFVVTJRaXhIUVVGSExFOUJRVTBzUlVGQlJ5eFBRVUZOTEVkQlFVazJRaXhMUVVGTGRFTXNUMEZCVDNGVkxGTkJRVk1zVTBGQlV6VlVMRWRCUVVjc1NVRkJVVGxDTEVWQlFVb3JRaXhGUVVGRkxFVkJRVWtzU1VGQlNTOUNMRXRCUVVzNFFpeEZRVUZGUXl4SlFVRkpMRTlCUVU5QkxFZEJRVWMwUWl4TFFVRkxkRU1zVDBGQlQzTlZMRlZCUVZVc1UwRkJVemRVTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTFJDeEZRVUZGTEU5QlFVOURMRWRCUVVjMFFpeExRVUZMZEVNc1QwRkJUM1ZWTEZsQlFWa3NVMEZCVXpsVUxFZEJRVWNzU1VGQlNTeEpRVUZKUXl4TFFVRkxSQ3hGUVVGRkxFOUJRVTlCTEVWQlFVVkRMRWxCUVVrMFFpeExRVUZMZEVNc1QwRkJUM2RWTEZOQlFWTXNVMEZCVXk5VUxFVkJRVVZETEVkQlFVY3NUMEZCVHpSQ0xFdEJRVXQwUXl4UFFVRlBlVlVzWTBGQlkyaFZMRVZCUVVWRExFbEJRVWswUWl4TFFVRkxkRU1zVDBGQlR6QlZMRlZCUVZVc1UwRkJVMnBWTEVkQlFVY3NTVUZCWVRkQ0xFVkJRVlE0UWl4RlFVRkZMRWRCUVVjdlFpeEZRVUZGTEVWQlFVa3NTVUZCU1VNc1MwRkJTelpDTEVWQlFVVkRMRVZCUVVVdlFpeExRVUZMT0VJc1JVRkJSVGRDTEVkQlFVY3NUMEZCVHpoQ0xFZEJRMjVpTkVJc1MwRkJTM1JETEU5QlFVOHlWU3hSUVVGUkxGTkJRVk5zVlN4SFFVRkhMRWxCUVdFM1FpeEZRVUZVT0VJc1JVRkJSU3hIUVVGSEwwSXNSVUZCUlN4RlFVRkpMRWxCUVVsRExFdEJRVXMyUWl4RlFVRkZReXhGUVVGRkwwSXNTMEZCUzBNc1JVRkJSU3hQUVVGUE9FSXNSMEZCUnpSQ0xFdEJRVXQwUXl4UFFVRlBORlVzWlVGQlpTeFRRVUZUYmxVc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSVEpFTEV0QlFVczBSeXhaUVVGWmVFa3NSMEZCUnpsQ0xFVkJRVVZFTEVWQlFVVXJRaXhGUVVGRmVVb3NWVUZCVlN4SlFVRkplRXdzUlVGQlJVRXNSVUZCUlN4RlFVRkZMRVZCUVVWQkxFVkJRVVZETEVWQlFVVm5ReXhQUVVGUGFrTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUVGhDTEVWQlFVVXNUMEZCVDBFc1JVRkJSVUVzUlVGQlJUZENMRVZCUVVWRUxFbEJRVWtzVDBGQlR6aENMRWRCUVVjMlFpeExRVUZMZEVNc1QwRkJUelpWTEZsQlFWa3NVMEZCVTNCVkxFVkJRVVZETEVkQlFVY3NUMEZCVHl4UFFVRlBSQ3hIUVVGSFF5eExRVUZMUkN4SFFVRkhOa0lzUzBGQlMzUkRMRTlCUVU5NVZTeGpRVUZqTEZOQlFWTm9WU3hGUVVGRlF5eEhRVUZITEVsQlFVa3NTVUZCU1M5Q0xFdEJRVXM0UWl4RlFVRkZMRWRCUVVkQkxFVkJRVVU1UWl4SlFVRkpLMElzUlVGQlJTeFBRVUZOTEVWQlFVY3NUMEZCVFN4SFFVRkpORUlzUzBGQlMzUkRMRTlCUVU4NFZTeFJRVUZSTEZOQlFWTnlWU3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSkxFbEJRVWxETEV0QlFVczJRaXhGUVVGRkxFZEJRVWRETEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGT0VJc1JVRkJSVGRDTEVkQlFVZEJMRVZCUVVVMlFpeEhRVUZITEU5QlFVODNRaXhIUVVOMFl6QkVMRXRCUVV0MFF5eFBRVUZQSzFVc1ZVRkJWU3hUUVVGVGRGVXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVHl0Q0xFVkJRVVUwUWl4TFFVRkxkRU1zVDBGQlR6aFZMRkZCUVZGeVZTeEZRVUZGUXl4RlFVRkZMMElzUzBGQlN6aENMRVZCUVVWRExFbEJRVWswUWl4TFFVRkxkRU1zVDBGQlQyZFdMRkZCUVZFc1UwRkJVM1pWTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTFJDeEZRVUZGTEU5QlFVMHNSVUZCUnl4UFFVRk5MRWRCUVVrMlFpeExRVUZMZEVNc1QwRkJUMmxXTEUxQlFVMHNVMEZCVTNoVkxFZEJRVWNzU1VGQlNTeEpRVUZKUXl4TFFVRkxSQ3hUUVVGVFFTeEZRVUZGUXl4SlFVRkpORUlzUzBGQlMzUkRMRTlCUVU5clZpeFBRVUZQTEZOQlFWTjZWU3hGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVFd1FpeFBRVUYyUWtFc1JVRkJSU3RDTEV0QlFVdEVMRmRCUVZkQkxFVkJRVVZETEVkQlFWVXZRaXhIUVVGSE1rUXNTMEZCUzNSRExFOUJRVTl0Vml4SlFVRkpMRk5CUVZNeFZTeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEhRVUZITEU5QlFVODRRaXhIUVVGSFF5eExRVUZMUkN4RlFVRkZMRTFCUVUxclJDeE5RVUZOTEhkRFFVRjNRMnBFTEVWQlFVVXNTMEZCU3pSQ0xFdEJRVXQwUXl4UFFVRlBiMVlzU1VGQlNUTlZMRVZCUVVWRExFVkJRVVV2UWl4SlFVRkpNa1FzUzBGQlMzUkRMRTlCUVU5aUxFbEJRVWtzVTBGQlUzTkNMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU4c1QwRkJUemhDTEVkQlFVZERMRXRCUVV0RUxFVkJRVVZCTEVWQlFVVkRMRWRCUVVjdlFpeEhRVU16WkRKRUxFdEJRVXQwUXl4UFFVRlBiMVlzU1VGQlNTeFRRVUZUTTFVc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjNFFpeEZRVUZGUXl4SFFVRkhMMElzUjBGQlJ6SkVMRXRCUVV0MFF5eFBRVUZQY1ZZc1pVRkJaU3hUUVVGVE5WVXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVHl0Q0xFdEJRVXRFTEVWQlFVVkJMRVZCUVVWRExFZEJRVWRFTEVWQlFVVkRMRWRCUVVjdlFpeEhRVUZITWtRc1MwRkJTM1JETEU5QlFVOXpWaXd5UWtGQk1rSXNVMEZCVXpkVkxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVWNyUWl4TFFVRkxSQ3hGUVVGVFFTeEZRVUZGUXl4SlFVRkhMMElzUlVGQlJVRXNTVUZCVnpoQ0xFVkJRVVZETEVkQlFVY3ZRaXhKUVVGSE1rUXNTMEZCUzNSRExFOUJRVTkxVml4UFFVRlBMRk5CUVZNNVZTeEZRVUZGUXl4SFFVRkhMRWxCUVVrc1NVRkJTUzlDTEV0QlFVczRRaXhGUVVGRkxFdEJRVXM1UWl4TFFVRkxLMElzU1VGQlNVUXNSVUZCUlRsQ0xFdEJRVXNyUWl4RlFVRkZMMElzUjBGQlJ5eFBRVUZOTEVWQlFVY3NTVUZCU1N4SlFVRkpReXhMUVVGTE9FSXNSVUZCUlN4TFFVRkxPVUlzUzBGQlN6WkNMRWRCUVVjc1QwRkJUU3hGUVVGSExFOUJRVTBzUjBGQlNUWkNMRXRCUVV0MFF5eFBRVUZQWjBzc1RVRkJUU3hUUVVGVGRrb3NSMEZCUnl4SlFVRlRPVUlzUlVGQlRDdENMRVZCUVVVc1IwRkJTeXhKUVVGSkwwSXNTMEZCU3poQ0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE9FSXNSVUZCUlRsQ0xFZEJRVWNzVDBGQlR5dENMRWRCUTNaYU5FSXNTMEZCUzNSRExFOUJRVTkzVml4WlFVRlpMRk5CUVZNdlZTeEhRVUZITEVsQlFVbERMRVZCUVVVMFFpeExRVUZMZFVjc1QwRkJUM0JKTEVkQlFVY3NSMEZCUnl4VlFVRlZReXhIUVVGSExGTkJRVk5CTEVWQlFVVXNRMEZCUXl4SFFVRkhORUlzUzBGQlMzRkdMRmRCUVZkc1NDeEZRVUZGZFVvc1QwRkJUeXhQUVVGUGRrb3NSVUZCUlhWS0xGRkJRVEpDTEVsQlFVa3NTVUZCU1hKTUxFdEJRVE5DSzBJc1JVRkJSU3hUUVVGVFFTeEZRVUZGTEVkQlFVY3NSMEZCWjBKRUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE1rUXNTMEZCUzNSRExFOUJRVTkzVml4WlFVRlpMMVVzUlVGQlJUbENMRWxCUVVrc1QwRkJUeXRDTEVWQlFVVXNUMEZCVDBRc1IwRkJSelpDTEV0QlFVdDBReXhQUVVGUGVWWXNWVUZCVlN4VFFVRlRhRllzUjBGQlJ5eEpRVUZUT1VJc1JVRkJUQ3RDTEVWQlFVVXNSMEZCU3l4SlFVRkpMMElzUzBGQlN6aENMRVZCUVVWRExFVkJRVVZFTEVWQlFVVTVRaXhKUVVGSlFTeEZRVUZGTEU5QlFVOHJRaXhIUVVGSE5FSXNTMEZCUzNSRExFOUJRVTh3Vml4clFrRkJhMElzWjBkQlFXZEhhRlVzVFVGQlRTeExRVU14WVZrc1MwRkJTM1JETEU5QlFVOHlWaXhQUVVGUExGTkJRVk5zVml4RlFVRkZReXhIUVVGSExFbEJRVWtzU1VGQlNTOUNMRVZCUVVWRExFVkJRVVZwUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZ6U2l4VlFVRlZka29zVDBGQlQwTXNTVUZCU1N4RFFVRm5RaXhKUVVGSmJFTXNTMEZCYmtKRExFVkJRVVYxVEN4VlFVRlZkRW9zUjBGQlkwb3NSVUZCUlRsQ0xFZEJRVWRETEVWQlFVVkVMRWRCUVVjc1NVRkJTU3hKUVVGSmJVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmQwSXNTMEZCUzNSRExFOUJRVTh3Vml4clFrRkJhMEk1VlN4UFFVRlBSU3hKUVVGSmJrTXNSVUZCUlRKRUxFdEJRVXQwUXl4UFFVRlBNRllzYTBKQlFXdENOVlVzUjBGQlJ6bENMRTlCUVU5clFpeFZRVUZWUXl4bFFVRmxNVUlzUzBGQlMwY3NSVUZCUlVRc1MwRkJTemhDTEVWQlFVVTVRaXhIUVVGSFF5eEZRVUZGUkN4TlFVTXhVREpFTEV0QlFVdDBReXhQUVVGUFNpeFBRVUZQTEZOQlFWTmhMRWRCUVVjc1NVRkJTVU1zUlVGQlJYbEtMRlZCUVZWMlNpeFBRVUZQTEVkQlFVY3NSMEZCUjBZc1IwRkJSelJDTEV0QlFVc3lSeXhSUVVGUmEwSXNWVUZCVlN4SlFVRkpMRTlCUVU4M1NDeExRVUZMZEVNc1QwRkJUMG9zVDBGQlQzTkxMRTFCUVUwc1MwRkJTME1zVlVGQlZTeEpRVUZKTEVkQlFVZDZTaXhGUVVGRkxFVkJRVVVzVFVGQlRXbEVMRTFCUVUwc09FSkJRVGhDTEVsQlFVa3NTVUZCU1doR0xFVkJRVVVzUjBGQlIwTXNSVUZCUlN4RlFVRkZRU3hGUVVGRk9FSXNSVUZCUlRsQ0xFZEJRVWNzUlVGQlJVUXNSVUZCUlhkTUxGVkJRVlYyVEN4SlFVRkpkVXdzVlVGQlZYWk1MRVZCUVVVc1IwRkJSeXhQUVVGUFJDeEhRVUZITWtRc1MwRkJTM1JETEU5QlFVODBWaXhWUVVGVkxGTkJRVk51Vml4SFFVRkhMRWxCUVVsRExFVkJRVVY1U2l4VlFVRlZka29zVDBGQlR5eEhRVUZITEVkQlFVZEdMRWRCUVVjMFFpeExRVUZMTWtjc1VVRkJVV3RDTEZWQlFWVXNTVUZCU1N4UFFVRlBOMGdzUzBGQlMzUkRMRTlCUVU4MFZpeFZRVUZWTVV3c1RVRkJUU3hMUVVGTFF5eFZRVUZWTEVsQlFVa3NTVUZCU1N4SlFVRkplRXdzUlVGQlJTeEhRVUZIUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZPVUlzU1VGQlNVUXNSVUZCUlhkTUxGVkJRVlYyVEN4TFFVRkpMRVZCUVVjc1QwRkJUMFFzUjBGRGRtTXlSQ3hMUVVGTGRFTXNUMEZCVHpaV0xHOUNRVUZ2UWl4VFFVRlRjRllzUjBGQlJ5eEpRVUZKUXl4RlFVRkZSQ3hGUVVFNFJTeFBRVUUxUlhwQ0xFOUJRVTg0Vnl4WFFVRlhPVmNzVDBGQlR6aFhMRk5CUVZOeVZpeExRVUZMUXl4RlFVRkZNVUlzVDBGQlQxa3NUMEZCVDJFc1IwRkJSM3BDTEU5QlFVOHJWeXhQUVVGUGNsWXNTVUZCVjBFc1IwRkJSelJDTEV0QlFVdDBReXhQUVVGUFoxY3NaMEpCUVdkQ0xGTkJRVk4yVml4SFFVRkhMRkZCUVZGNlFpeFBRVUZQT0Zjc1ZVRkJWVGxYTEU5QlFVODRWeXhUUVVGVGNsWXNTVUZETTA0MlFpeExRVUZMZEVNc1QwRkJUMmxYTEc5Q1FVRnZRaXhUUVVGVGVGWXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1RoQ0xFVkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVbDZRaXhQUVVGUGExZ3NjMEpCUVhOQ2JGZ3NUMEZCVHpCT0xHVkJRV1VzVDBGQlQzQkxMRXRCUVV0MFF5eFBRVUZQTWxVc1VVRkJVV3hWTEVkQlFVY3NTVUZCU1N4SlFVRkpOMElzUlVGQlJTeEhRVUZITmtJc1NVRkJTVUVzU1VGQlNYcENMRTlCUVU5clFpeFhRVUZYVVN4TFFVRkxSQ3hKUVVGSk9Fb3NVMEZCVTNKTExGZEJRVmQyUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSmEwTXNSVUZCUlRkQ0xFOUJRVTlyV0N4dlFrRkJiMEo2Vml4SFFVRkhTeXhGUVVGRkxFVkJRVVZCTEVWQlFVVkVMRVZCUVVWRUxFOUJRVTlGTEVsQlFVbHNReXhGUVVGRmFVTXNSVUZCUlVNc1MwRkJTU3hGUVVGSFRDeEZRVUZGZWtJc1QwRkJUekJPTEdWQlFXVnFUU3hIUVVGSExFOUJRVTgyUWl4TFFVRkxkRU1zVDBGQlR6SlZMRkZCUVZFdlZpeEpRVUZKTUVRc1MwRkJTM1JETEU5QlFVOXRWeXhqUVVGakxGTkJRVk14Vml4SFFVRkhMRTlCUVU5QkxFVkJRVVY2UWl4UFFVRlBNRTRzWlVGQlpXcE5MRVZCUVVWUUxHRkJRV0ZQTEVWQlFVVTJUQ3hoUVVGaGFFc3NTMEZCU3poVUxFMUJRVTBzUjBGQlJ6bFVMRXRCUVVzNFZDeE5RVUZOZWxNc1RVRkJUU3hUUVVGVGJFUXNSMEZCUnl4SFFVRkhhMFFzVFVGQlRUQlRMR3RDUVVGclFqRlRMRTFCUVUwd1V5eHJRa0ZCYTBJM1ZTeExRVUZMWXl4TFFVRkxPRlFzVFVGQlRYcFRMRmRCUVZjc1EwRkJReXhKUVVGSmFrUXNSVUZCUldsRUxGRkJRVkV5VXl4TlFVRk5OVllzU1VGQlNXTXNTMEZCU3poVkxFMUJRVTAxVml4SFFVRkhSQ3hKUVVGSlpTeExRVUZMZFZNc1VVRkJVWEJVTEU5QlFVOUdMRWxCUVVsbExFdEJRVXNyVlN4eFFrRkJiMElzUjBGQlNXcFZMRXRCUVVzNFNpeFRRVUZUT1Vvc1MwRkJTemhVTEUxQlFVMTZVeXhOUVVGTlFTeFBRVUZQY2tJc1MwRkJTemhVTEUxQlFVMTZVeXhOUVVGTmVrUXNWVUZCVlhKQ0xFdEJRVXNzWTBGQlkzbEVMRXRCUVV0clZTeEpRVUZKTEVkQlFVZHNWU3hMUVVGTGExVXNTVUZCU1VNc1UwRkJVeXhEUVVGRFF5eFJRVUZSTEVWQlFVVkRMRlZCUVZVc1JVRkJSVU1zUzBGQlN5eEZRVUZGUXl4alFVRmpMRVZCUVVWRExHbENRVUZwUWl4RlFVRkZReXhQUVVGUExFVkJRVVZETEhWQ1FVRjFRaXhGUVVGRlF5eFJRVUZSTEVWQlFVVkRMRk5CUVZNc1JVRkJSVU1zWTBGQll5eEhRVUZIUXl4clFrRkJhMElzUjBGQlIwTXNVMEZCVXl4SlFVRkpMMVVzUzBGQlMyZFdMRkZCUVZFc1IwRkJSMmhXTEV0QlFVdG5WaXhSUVVGUlF5eGxRVUZsYWxZc1MwRkJTMkVzVFVGQlRXSXNTMEZCUzJkV0xGRkJRVkZGTEdWQlFXVXNVMEZCVXk5WExFVkJRVVZETEVkQlFVYzBRaXhMUVVGTE9GUXNUVUZCVFhwVExFMUJRVTFzUml4TFFVRkxLME1zUzBGQlMyTXNTMEZCUzJkV0xGRkJRVkZITEUxQlFVMW9XQ3hGUVVGRlF5eEpRVUZKWXl4TFFVRkxhMWNzWlVGQlpXcFlMRWRCUVVjMlFpeExRVUZMT0Vvc1UwRkJVemxLTEV0QlFVdG5WaXhSUVVGUlJTeGxRVUZsYkZZc1MwRkJTemhVTEUxQlFVMTZVeXhQUVVGUGNrSXNTMEZCUzJkV0xGRkJRVkZGTEdWQlFXVjBXQ3hWUVVGVmNrSXNTMEZCU3l4cFFrRkJhVUo1UkN4TFFVRkxaMVlzVVVGQlVVc3NjMEpCUVhOQ0xGTkJRVk5zV0N4SFFVRkhMRTFCUVUxQkxFZEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVVMHNZMEZCWTNSV0xFdEJRVXRuVml4UlFVRlJTeXh6UWtGRE0zcERjbFlzUzBGQlMyZFdMRkZCUVZGSExFMUJRVTBzVTBGQlUyaFlMRVZCUVVWRExFZEJRVzFDTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUjBGQlIwTXNSMEZCTjBJMlFpeEZRVUZGUVN4RlFVRkZhVUlzVFVGQlRTeFBRVUYxUW1Rc1QwRkJUeXhGUVVGRlF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWcVF5eEZRVUZGYVVNc1NVRkJTV3hETEVkQlFVYzRRaXhGUVVGRlNTeEpRVUZKUVN4RlFVRkZTQ3hGUVVGRlJTeFBRVUZQUml4RlFVRkZSeXhIUVVGSExFMUJRVTBzVDBGQlQyeERMRVZCUVVVNFFpeEZRVUZGTjBJc1NVRkJTVEJFTEV0QlFVdG5WaXhSUVVGUlR5eHBRa0ZCYVVJc1UwRkJVM0JZTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRWxCUVVscFF5eEZRVUZGTEcxQ1FVRnRRaXhIUVVGSGJFTXNSVUZCUlN4RFFVRkRhME1zUjBGQlJ5eExRVUZMYkVNc1JVRkJSU3hKUVVGSmJVTXNSVUZCUld4RExFOUJRVTgyUWl4SlFVRkpTU3hIUVVGSExFdEJRVXRLTEVWQlFVVkxMRVZCUVVWS0xFZEJRVWRFTEVWQlFVVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJSU3hsUVVGbExFZEJRVWN6Vnl4RlFVRkZReXhIUVVGSExFbEJRVWwzUWl4TFFVRkxaMVlzVVVGQlVVMHNZMEZCWTI1WUxFbEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVWRXNaMEpCUVdkQ0xGTkJRVk55V0N4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGRExHbENRVUZwUW1wV0xFdEJRVXRuVml4UlFVRlJUU3hqUVVGamJsZ3NTVUZETjJFMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eFRRVUZUZEZnc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVhGSUxFOUJRV3hJTWtRc1MwRkJTMmRXTEZGQlFWRkRMR2xDUVVGcFFqbFhMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVThzYVVKQlFXbENMRWRCUVVjc1MwRkJTMjVZTEVWQlFVVlhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVc3dUQ3hWUVVGVkxFbEJRVmN4U2l4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVkxHRkJRV0VzVTBGQlUzWllMRVZCUVVWRExFVkJRVVV2UWl4SFFVRXJTU3hQUVVFMVNUSkVMRXRCUVV0blZpeFJRVUZSUXl4blFrRkJaMElzVFVGQlRUbFhMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVThzYVVKQlFXbENMSGxDUVVGNVFpeERRVUZEY0Znc1IwRkJSME1zUlVGQlJWY3NUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1NVRkJWekZLTEVkQlF6ZFdOa0lzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzVTBGQlUzaFlMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxaMVlzVVVGQlVVTXNaMEpCUVdkQ2FsWXNTMEZCUzJkV0xGRkJRVkZOTEdOQlFXTXNTVUZCU1hSV0xFdEJRVXRuVml4UlFVRlJSU3hsUVVGbExGZEJRVmN2Vnl4RlFVRkZMRXRCUVV0QkxFVkJRVVVzU1VGQlNWa3NUVUZCVFc1Q0xGVkJRVlZ0U3l4TlFVRk5OVXdzUzBGQlN6Qk1MRlZCUVZVc1RVRkJUVGRJTEV0QlFVdG5WaXhSUVVGUldTeGhRVUZoTEZOQlFWTjZXQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJhVXdzVDBGQk9Vc3lSQ3hMUVVGTFoxWXNVVUZCVVVNc2FVSkJRV2xDYWxZc1MwRkJTMHNzVTBGQlUyeERMRWxCUVVrMlFpeExRVUZMWjFZc1VVRkJVVThzYVVKQlFXbENMR3REUVVGclF5eERRVUZEZGxZc1MwRkJTM1ZITEU5QlFVOXdTU3hIUVVGSFFTeEhRVUZIUXl4RlFVRkZWeXhOUVVGTmJrSXNWVUZCVlcxTExFMUJRVTAxVEN4TFFVRkxNRXdzVlVGQlZTeEpRVUZYTVVvc1IwRkRNVm8yUWl4TFFVRkxaMVlzVVVGQlVXRXNZVUZCWVN4VFFVRlRNVmdzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRV2xNTEU5QlFUbExNa1FzUzBGQlMyZFdMRkZCUVZGRExHbENRVUZwUW1wV0xFdEJRVXRITEZOQlFWTm9ReXhKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZQTEdsQ1FVRnBRaXhyUTBGQmEwTXNRMEZCUTNaV0xFdEJRVXQxUnl4UFFVRlBjRWtzUjBGQlIwRXNSMEZCUjBNc1JVRkJSVmNzVFVGQlRXNUNMRlZCUVZWdFN5eE5RVUZOTlV3c1MwRkJTekJNTEZWQlFWVXNTVUZCVnpGS0xFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVXTXNaVUZCWlN4VFFVRlRNMWdzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRWEZNTEU5QlFXeE1Na1FzUzBGQlMyZFdMRkZCUVZGRExHbENRVUZwUW1wV0xFdEJRVXR4Uml4WFFVRlhiRWdzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVHl4cFFrRkJhVUlzYjBOQlFXOURMRU5CUVVOMlZpeExRVUZMZFVjc1QwRkJUM0JKTEVkQlFVZEJMRWRCUVVkRExFVkJRVVZYTEUxQlFVMXVRaXhWUVVGVmJVc3NUVUZCVFRWTUxFdEJRVXN3VEN4VlFVRlZMRWxCUVZjeFNpeEhRVU4yWXpaQ0xFdEJRVXRuVml4UlFVRlJaU3hoUVVGaExGTkJRVk0xV0N4RlFVRkZReXhGUVVGRkwwSXNSMEZCYVV3c1QwRkJPVXN5UkN4TFFVRkxaMVlzVVVGQlVVTXNhVUpCUVdsQ2FsWXNTMEZCU3poSExGTkJRVk16U1N4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGUExHbENRVUZwUWl4clEwRkJhME1zUTBGQlEzWldMRXRCUVV0MVJ5eFBRVUZQY0Vrc1IwRkJSMEVzUjBGQlIwTXNSVUZCUlZjc1RVRkJUVzVDTEZWQlFWVnRTeXhOUVVGTk5Vd3NTMEZCU3pCTUxGVkJRVlVzU1VGQlZ6RktMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVV2RDTEZsQlFWa3NVMEZCVXpkWUxFVkJRVVZETEVWQlFVVXZRaXhIUVVFclN5eFBRVUUxU3pKRUxFdEJRVXRuVml4UlFVRlJReXhwUWtGQmFVSnFWaXhMUVVGTE1rY3NVVUZCVVhoSkxFbEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVVOHNhVUpCUVdsQ0xHbERRVUZwUXl4RFFVRkRkbFlzUzBGQlMzVkhMRTlCUVU5d1NTeEhRVUZIUVN4SFFVRkhReXhGUVVGRlZ5eE5RVUZOYmtJc1ZVRkJWVzFMTEUxQlFVMDFUQ3hMUVVGTE1Fd3NWVUZCVlN4SlFVRlhNVW9zUjBGRE9XSTJRaXhMUVVGTFoxWXNVVUZCVVdsQ0xHTkJRV01zVTBGQlV6bFlMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnRUQ3hQUVVGb1RESkVMRXRCUVV0blZpeFJRVUZSUXl4cFFrRkJhVUpxVml4TFFVRkxTU3hWUVVGVmFrTXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJUeXhwUWtGQmFVSXNiVU5CUVcxRExFTkJRVU4yVml4TFFVRkxkVWNzVDBGQlQzQkpMRWRCUVVkQkxFZEJRVWRETEVWQlFVVlhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVc3dUQ3hWUVVGVkxFbEJRVmN4U2l4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGclFpeGpRVUZqTEZOQlFWTXZXQ3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJlVTRzVDBGQmNrNHlSQ3hMUVVGTFoxWXNVVUZCVVVNc1owSkJRV2RDYWxZc1MwRkJTemhITEZOQlFWTXpTU3hKUVVGSlFTeEZRVUZGZDBNc1ZVRkJWVmdzUzBGQlMydFZMRWxCUVVsRExGTkJRVk5ETEZOQlFWTndWU3hMUVVGTFoxWXNVVUZCVVU4c2FVSkJRV2xDTEcxRFFVRnRReXhEUVVGRGRsWXNTMEZCUzNWSExFOUJRVTl3U1N4SFFVRkhRU3hIUVVGSFF5eEZRVUZGVnl4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMTUV3c1ZVRkJWU3hKUVVGWE1Vb3NSMEZETjJVMlFpeExRVUZMWjFZc1VVRkJVVzFDTEdsQ1FVRnBRaXhUUVVGVGFGa3NSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVcxT0xFOUJRUzlOTUVRc1MwRkJTMmRXTEZGQlFWRkRMR2RDUVVGblFqbFhMR0ZCUVdGRExFZEJRVWMwUWl4TFFVRkxaMVlzVVVGQlVVOHNhVUpCUVdsQ0xIRkRRVUZ4UXl4RFFVRkRkbFlzUzBGQlMyZFdMRkZCUVZGdlFpeFRRVUZUYUZrc1IwRkJSelJDTEV0QlFVdG5WaXhSUVVGUmIwSXNVMEZCVTJwWkxFbEJRVWs1UWl4RlFVRkZNRU1zVFVGQlRXNUNMRlZCUVZWdFN5eE5RVUZOTlV3c1MwRkJTekJNTEZWQlFWVXNTVUZCVnpGS0xFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVYRkNMR0ZCUVdFc1UwRkJVMnhaTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZyVFN4UFFVRTVUREpFTEV0QlFVdG5WaXhSUVVGUlF5eG5Ra0ZCWjBJc2FVSkJRV2xDT1Zjc1IwRkJSMjFaTEZOQlFWTnVXU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZQTEdsQ1FVRnBRaXh0UkVGQmJVUXNRMEZCUTNCWUxFZEJRVWRETEVWQlFVVlhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVc3dUQ3hWUVVGVkxFbEJRVmN4U2l4SFFVTXhaalpDTEV0QlFVdG5WaXhSUVVGUmRVSXNPRUpCUVRoQ0xGZEJRVmNzU1VGQlNTeEpRVUZKY0Zrc1MwRkJTM3BDTEU5QlFVOXJRaXhWUVVGVmIwTXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVdDRXQ3hGUVVGRkxHMUVRVUZ0UkRaQ0xFdEJRVXRuVml4UlFVRlJiMElzVTBGQlV5eFRRVUZUYWxrc1IwRkJSeXhQUVVGUFFTeGhRVUZoT0Vvc1UwRkJVemxLTEVWQlFVVnhXU3hoUVVGaGNsa3NSVUZCUlRWQ0xFMUJRVTBzYjBKQlFXOUNORUlzWVVGQllYcENMRTlCUVU5NVFpeEZRVUZGTmt3c1dVRkJXWGROTEdGQlFXRnlXU3hGUVVGRk5rd3NXVUZCV1hwT0xFMUJRVTFITEU5QlFVOXJRaXhWUVVGVk5Fa3NVMEZCVTNKTExFdEJRVXRuUXl4SFFVRkhMRTlCUVU5QkxFVkJRVVVzWTBGQlkwRXNSMEZCUnl4SlFVRkpjMWtzUzBGQlN5eERRVUZEUXl4blFrRkJaMElzUjBGQlIwTXNiVUpCUVcxQ0xHRkJRV0ZETEdOQlFXTXNZMEZCWTBnc1MwRkJTME1zWjBKQlFXZENSeXhWUVVGVkxFTkJRVU5ETEZOQlFWTXNSVUZCUlVNc1QwRkJUeXhGUVVGRlF5eE5RVUZOTEVWQlFVVkRMRTFCUVUwc1JVRkJSVU1zVDBGQlR5eEZRVUZGUXl4TlFVRk5MRVZCUVVWRExGRkJRVkVzUlVGQlJVTXNVVUZCVVN4RlFVRkZReXhMUVVGTExFVkJRVVZETEU5QlFVOHNSVUZCUlVNc1RVRkJUU3hIUVVGSFF5eFJRVUZSTEVkQlFVZERMRTFCUVUwc1IwRkJSME1zVDBGQlR5eEhRVUZIUXl4TFFVRkxMRWRCUVVkRExGTkJRVk1zUjBGQlIwTXNVMEZCVXl4SFFVRkhReXhQUVVGUExFZEJRVWRETEU5QlFVOHNSMEZCUjBNc1VVRkJVU3hIUVVGSFF5eFJRVUZSTEVsQlFVbDZRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUTEVOQlFVTnlRaXhUUVVGVExFVkJRVVZ6UWl4UFFVRlBMRVZCUVVWb1FpeFJRVUZSTEVWQlFVVnBRaXhWUVVGVkxFVkJRVVZETEZsQlFWa3NSVUZCUlVNc1ZVRkJWU3hGUVVGRmJFSXNVVUZCVVN4SFFVTnVla0phTEV0QlFVdERMR2RDUVVGblFqaENMRzlDUVVGdlFpeFRRVUZUY21Fc1IwRkJSeXhKUVVGSlF5eEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENSeXhWUVVGVmVHRXNSVUZCUlc5aExFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTXNUMEZCVDJoaExFZEJRVWNzUzBGQlMwTXNSVUZCUlN0WkxFMUJRVTBzUzBGQlN5OVpMRVZCUVVVMldTeE5RVUZOTEV0QlFVczNXU3hGUVVGRmRWb3NUMEZCVHl4TFFVRkxkbG9zUlVGQlJUaFpMRTlCUVU4c1MwRkJTemxaTEVWQlFVVXlXaXhQUVVGUExFdEJRVXN6V2l4RlFVRkZORm9zVDBGQlR5eExRVUZMTlZvc1JVRkJSV3RhTEV0QlFVc3NTMEZCUzJ4YUxFVkJRVVYzV2l4TFFVRkxMRXRCUVV0NFdpeEZRVUZGT0Zvc1VVRkJVU3hQUVVGUE4ySXNSVUZCUlN0aUxFOUJRVThzUzBGQlMyaGhMRVZCUVVVeVdTeFBRVUZQTEV0QlFVc3pXU3hGUVVGRloxb3NVVUZCVVN4TFFVRkxhRm9zUlVGQlJUQmFMRk5CUVZNc1MwRkJTekZhTEVWQlFVVTJXaXhSUVVGUkxFOUJRVTgxWWl4RlFVRkZLMkVzVVVGQlVTeExRVUZMYUZvc1JVRkJSVzFhTEU5QlFVOHNTMEZCUzI1YUxFVkJRVVZ4V2l4UlFVRlJMRXRCUVV0eVdpeEZRVUZGYzFvc1RVRkJUU3hQUVVGUGNtSXNSVUZCUldkakxGVkJRVlVzUzBGQlMycGhMRVZCUVVVMFdTeE5RVUZOTEV0QlFVczFXU3hGUVVGRmFWb3NVVUZCVVN4TFFVRkxhbG9zUlVGQlJYbGFMRk5CUVZNc1QwRkJUM2hpTEVWQlFVVm5ZaXhSUVVGUkxGRkJRVkVzVDBGQlQyaGlMRVZCUVVWNVlTeFZRVU55WlV3c1MwRkJTME1zWjBKQlFXZENLMElzYzBKQlFYTkNMRVZCUVVWb1F5eExRVUZMUXl4blFrRkJaMEpuUXl4WlFVRlpMSEZDUVVGelFtcERMRXRCUVV0RExHZENRVUZuUW1sRExGbEJRVmtzYzBKQlFYVkNiRU1zUzBGQlMwTXNaMEpCUVdkQ2EwTXNXVUZCV1N4eFFrRkJjMEp1UXl4TFFVRkxReXhuUWtGQlowSnRReXhaUVVGWkxFOUJRVk53UXl4TFFVRkxReXhuUWtGQlowSnZReXhaUVVGWkxIVkNRVUYzUW5KRExFdEJRVXRETEdkQ1FVRm5RbkZETEZsQlFWa3NjMEpCUVhWQ2RFTXNTMEZCUzBNc1owSkJRV2RDYzBNc1ZVRkJWU3hSUVVGUmRrTXNTMEZCUzBNc1owSkJRV2RDZFVNc1ZVRkJWU3hSUVVGUmVFTXNTMEZCUzBNc1owSkJRV2RDZDBNc1ZVRkJWU3hYUVVNelpIcERMRXRCUVV0RExHZENRVUZuUW5sRExGVkJRVlVzVjBGQlZ6RkRMRXRCUVV0RExHZENRVUZuUWpCRExGVkJRVlVzYVVKQlFXbENNME1zUzBGQlMwTXNaMEpCUVdkQ01rTXNWVUZCVlN4dFFrRkJiVUkxUXl4TFFVRkxReXhuUWtGQlowSTBReXhWUVVGVkxHOUNRVUZ6UWpkRExFdEJRVXRETEdkQ1FVRm5RalpETEZWQlFWVXNiVUpCUVcxRGRsb3NTMEZCUzNkYUxFMUJRVTBzUjBGQlIzaGFMRXRCUVV0NVdpeDNRa0ZCZDBKNldpeExRVUZMWlN4aFFVRmhaaXhMUVVGTGQxb3NUVUZCVFVVc2QwSkJRWGRDTEV0QlFVc3hXaXhMUVVGTFdTeG5Ra0ZCWjBKYUxFdEJRVXQzV2l4TlFVRk5SeXhMUVVGTExGTkJRVk40WWl4SFFVRkhMRTlCUVU5QkxFVkJRVVZCTEVWQlFVVkhMRTlCUVU4c1NVRkJTVEJDTEV0QlFVdDNXaXhOUVVGTlNTeExRVUZMTlZvc1MwRkJTM2RhTEUxQlFVMUhMRXRCUXpGak0xb3NTMEZCUzNkYUxFMUJRVTEwVWl4UlFVRlJiRWtzUzBGQlMzbGFMREJDUVVFd1FucGFMRXRCUVV0M1dpeE5RVUZOUlN4NVFrRkJlVUl6WVN4TlFVRk5ia0lzVlVGQlZYTkxMRk5CUVZNc1UwRkJVeTlLTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUYxUXl4UFFVRndRekpFTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEUxQlFVMTBXQ3hGUVVGRlJ5eFJRVUZsVXl4TlFVRk5ia0lzVlVGQlZYTkxMRkZCUVZFdlRDeExRVUZMWjBNc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVVrc1UwRkJVemhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUUwUXl4SFFVRjZRMEVzUlVGQlJTeE5RVUZOUVN4RlFVRkZMRVZCUVVVc1JVRkJSVUVzUlVGQlJYRkVMRXRCUVV0RExFbEJRVWtzUlVGQlJYaENMRVZCUVVWSExFOUJRVTlxUXl4SFFVRkhRU3hGUVVGTE1rUXNTMEZCUzBjc1UwRkJVMmhETEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXRITEZOQlFWTXZRaXhKUVVGSkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU5SUxFVkJRVVVyU2l4UlFVRlJPVW9zUlVGQlJTOUNMRWxCUVVrc1JVRkJSU3hMUVVGTFFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQycERMRWxCUVVrc1IwRkJSMEVzUzBGQlN6aENMRWRCUVVkQkxFVkJRVVU1UWl4TFFVRkxLMElzUlVGQlJTeFBRVUZQTDBJc1JVRkJSU3hQUVVGUExFZEJRek5aTWtRc1MwRkJTM2RhTEUxQlFVMDVXQ3haUVVGWk1VSXNTMEZCUzNsYUxEQkNRVUV3UW5wYUxFdEJRVXQzV2l4TlFVRk5SU3g1UWtGQmVVSXpZU3hOUVVGTmJrSXNWVUZCVlRoRUxHRkJRV0VzVTBGQlUzWkVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRjFReXhQUVVGd1F6SkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVUxMFdDeEZRVUZGUnl4UlFVRmxVeXhOUVVGTmJrSXNWVUZCVlRoRUxGbEJRVmwyUml4TFFVRkxaME1zUlVGQlJVTXNSVUZCUlN4TlFVRk5MMElzUlVGQlJUaENMRVZCUVVWSExFOUJRVThzUlVGQlJXcERMRWxCUVVrc1UwRkJVemhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUV3UkN4SFFVRm9ReXhIUVVGMlFrRXNSVUZCUlN4TlFVRk5RU3hGUVVGRk9FSXNSVUZCUlVjc1QwRkJUeXhGUVVGRmFrTXNTMEZCVVVFc1JVRkJSWEZFTEV0QlFVdERMRWxCUVVrc1JVRkJSWGhDTEVWQlFVVkhMRTlCUVU5cVF5eEpRVUZQTWtRc1MwRkJTMGNzVTBGQlUyaERMRWRCUVVjc1QwRkJUelpDTEV0QlFVdEhMRk5CUVZNdlFpeEpRVUZKTEVkQlFVZEJMRVZCUVVWRkxFOUJRVTlJTEVWQlFVVjFSQ3haUVVGWmRFUXNSVUZCUlM5Q0xFbEJRVWtzUlVGQlJTeExRVUZMTEVkQlFVZEJMRVZCUVVWQkxFbEJRVWtzUjBGQlIwRXNTMEZCU3poQ0xFZEJRVWRCTEVWQlFVVTVRaXhMUVVGTEswSXNSVUZCUlN4UFFVRlBMMElzUlVGQlJTeFBRVUZQTEVkQlEzUmlNa1FzUzBGQlMzZGFMRTFCUVUwM1NDeFJRVUZSTTFJc1MwRkJTM2xhTERCQ1FVRXdRbnBhTEV0QlFVdDNXaXhOUVVGTlJTeDVRa0ZCZVVJellTeE5RVUZOYmtJc1ZVRkJWU3RVTEZOQlFWTXNVMEZCVTNoVUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE1rUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNUVUZCVFhSWUxFVkJRVVZITEZGQlFWRlRMRTFCUVUxdVFpeFZRVUZWSzFRc1VVRkJVWGhXTEV0QlFVdG5ReXhGUVVGRlF5eEZRVUZGTDBJc1NVRkJTU3hUUVVGVE9FSXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRk5rSXNSVUZCUlVjc1QwRkJUME1zUlVGQlJYbENMRXRCUVV0SExGTkJRVk5vUXl4SFFVRkhRU3hGUVVGRmFVSXNUVUZCVFN4SlFVRkpha0lzUlVGQlJVc3NSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUld0RExFbEJRVWxCTEV0QlFVdEVMRWRCUVVkSUxFVkJRVVZxUXl4TFFVRkxSU3hGUVVGRmEwTXNSVUZCUlVNc1IwRkJSMEVzUlVGQlJVd3NTVUZCU1RaQ0xFdEJRVXQzV2l4TlFVRk5TeXhoUVVGaExGTkJRVk14WWl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRk5rSXNSVUZCUlVjc1QwRkJUME1zUlVGQlJYbENMRXRCUVV0SExGTkJRVk5vUXl4SFFVRkhRU3hGUVVGRmFVSXNUVUZCVFN4SlFVRkpha0lzUlVGQlJTeE5RVUZOTjBJc1JVRkJSU3hIUVVGSFFTeEpRVUZKUVN4RlFVRkZRU3hMUVVGTGFVTXNSMEZCUjBnc1JVRkJSV3BETEV0QlFVdEZMRVZCUVVWclF5eEZRVUZGYWtNc1IwRkJSMEVzUlVGQlJUWkNMRWxCUTNKaU5rSXNTMEZCUzNkYUxFMUJRVTAxU0N4UFFVRlBOVklzUzBGQlMzbGFMREJDUVVFd1FucGFMRXRCUVV0M1dpeE5RVUZOUlN4NVFrRkJlVUl6WVN4TlFVRk5ia0lzVlVGQlZXZFZMRkZCUVZFc1UwRkJVM3BVTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUYxUXl4UFFVRndRekpFTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEUxQlFVMTBXQ3hGUVVGRlJ5eFJRVUZsVXl4TlFVRk5ia0lzVlVGQlZXZFZMRTlCUVU5NlZpeExRVUZMWjBNc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVVrc1UwRkJVemhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5RExFVkJRVVVzUjBGQlIwTXNSVUZCUlN4RlFVRkZjVUlzUlVGQlJVY3NTMEZCUzBjc1UwRkJVMmhETEVkQlFVZEJMRVZCUVVWcFFpeE5RVUZOTEVsQlFVbHFRaXhGUVVGRmVVNHNSVUZCUlN4RlFVRkZRU3hGUVVGRmRGQXNSVUZCUlhOUUxFbEJRVWtzUjBGQlIwRXNTMEZCU3k5TUxFVkJRVVVzUTBGQlF5eEpRVUZKZFZFc1JVRkJSWFpSTEVWQlFVVXJUQ3hIUVVGSGVFNHNSVUZCUldwRExFdEJRVXRGTEVWQlFVVXJWQ3hGUVVGRmVFVXNSVUZCUlhwT0xFdEJRVXRKTEVWQlFVVkRMRXRCUVVzMFVpeEhRVUZITEU5QlFVODNVaXhIUVVNNVZubENMRXRCUVV0M1dpeE5RVUZOZEU0c1NVRkJTV3hOTEV0QlFVdDVXaXd3UWtGQk1FSjZXaXhMUVVGTGQxb3NUVUZCVFVVc2VVSkJRWGxDTTJFc1RVRkJUVzVDTEZWQlFWVnpUeXhMUVVGTExGTkJRVk12VGl4RlFVRkZReXhGUVVGRkwwSXNSMEZCZFVNc1QwRkJjRU15UkN4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4TlFVRk5kRmdzUlVGQlJVY3NVVUZCWlZNc1RVRkJUVzVDTEZWQlFWVnpUeXhKUVVGSkwxQXNTMEZCUzJkRExFVkJRVVZETEVWQlFVVXZRaXhKUVVGSkxGTkJRVk00UWl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpMRWxCUVVsRExFVkJRVVUyUWl4RlFVRkZSeXhQUVVGUFF5eEZRVUZGVVN4TlFVRk5la01zUjBGQlIydERMRVZCUVVWM1FpeExRVUZMUnl4VFFVRlRhRU1zUjBGQlIwRXNSVUZCUldsQ0xFMUJRVTBzU1VGQlNXcENMRVZCUVVVd1FpeEZRVUZGTEVWQlFVVkJMRVZCUVVWMlJDeEZRVUZGZFVRc1NVRkJTVUVzUzBGQlMzSkNMRWxCUVVsRUxFVkJRVVZ6UWl4SFFVRkhla0lzUlVGQlJXcERMRXRCUVV0RkxFVkJRVVZ0UXl4RlFVRkZjVUlzUjBGQlIwRXNSVUZCUlRGQ0xFbEJRVWtzVDBGQlQwa3NSMEZEZGxWNVFpeExRVUZMZDFvc1RVRkJUVTBzVDBGQlR6bGFMRXRCUVV0NVdpd3dRa0ZCTUVKNldpeExRVUZMZDFvc1RVRkJUVVVzZVVKQlFYbENNMkVzVFVGQlRXNUNMRlZCUVZWcll5eFJRVUZSTEZOQlFWTXpZaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQk5rUXNUMEZCTVVRd1JDeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eE5RVUZOZEZnc1JVRkJSVWNzVVVGQlVXaERMRWxCUVVrNFFpeEZRVUZGTkVJc1MwRkJTM2hETEV0QlFVdFpMRVZCUVVVNVFpeEpRVUZYZVVNc1RVRkJUVzVDTEZWQlFWVnJZeXhQUVVGUE0yUXNTMEZCUzJkRExFVkJRVVZETEVWQlFVVXZRaXhKUVVGSkxGTkJRVk00UWl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJSeXhKUVVGSmFVTXNSVUZCUld4RExFVkJRVEpFTEU5QlFYcEVNa1FzUzBGQlMzZGFMRTFCUVUwM1NDeFJRVUZSZUZRc1IwRkJSU3hUUVVGVE9VSXNSVUZCUlhkRUxFZEJRVWQwUWl4RlFVRkZTQ3hGUVVGRmFrTXNTMEZCUzBjc1JVRkJSV2xETEVWQlFVVnNReXhGUVVGRmQwUXNSVUZCUlRGQ0xFMUJRVmxKTEVkQlF6bFVlVUlzUzBGQlMzZGFMRTFCUVUxUExGbEJRVmt2V2l4TFFVRkxlVm9zTUVKQlFUQkNlbG9zUzBGQlMzZGFMRTFCUVUxRkxIbENRVUY1UWpOaExFMUJRVTF1UWl4VlFVRlZiV01zWVVGQllTeFRRVUZUTldJc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVEJHTEU5QlFYWkdNRVFzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzVFVGQlRYUllMRVZCUVVWSExGRkJRVkV3UWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4TlFVRk5jbGdzUjBGQlJ6bENMRWxCUVVrNFFpeEZRVUZGTkVJc1MwRkJTM2hETEV0QlFVdFpMRVZCUVVVNVFpeEpRVUZYZVVNc1RVRkJUVzVDTEZWQlFWVnRZeXhaUVVGWk5XUXNTMEZCUzJkRExFVkJRVVZETEVWQlFVVXZRaXhKUVVGSkxGTkJRVk00UWl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJSeXhKUVVGSmFVTXNSVUZCUld4RExFVkJRV2RGTEU5QlFUbEVNa1FzUzBGQlMzZGFMRTFCUVUxTExHRkJRV0V4WWl4SFFVRkZMRk5CUVZNNVFpeEZRVUZGZDBRc1IwRkJSM1JDTEVWQlFVVklMRVZCUVVWcVF5eExRVUZMUnl4RlFVRkZhVU1zUlVGQlJXeERMRVZCUVVWM1JDeEZRVUZGTVVJc1RVRkJXVWtzUjBGREwxZDVRaXhMUVVGTGQxb3NUVUZCVFROSUxFdEJRVXMzVWl4TFFVRkxlVm9zTUVKQlFUQkNlbG9zUzBGQlMzZGFMRTFCUVUxRkxIbENRVUY1UWpOaExFMUJRVTF1UWl4VlFVRlZhVlVzVFVGQlRTeFRRVUZUTVZRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVhWRExFOUJRWEJETWtRc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1RVRkJUWFJZTEVWQlFVVkhMRkZCUVdWVExFMUJRVTF1UWl4VlFVRlZhVlVzUzBGQlN6RldMRXRCUVV0blF5eEZRVUZGUXl4RlFVRkZMMElzU1VGQlNTeFRRVUZUT0VJc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTmtJc1JVRkJSVWNzVDBGQlQwTXNSVUZCUlhsQ0xFdEJRVXRITEZOQlFWTm9ReXhIUVVGSFFTeEZRVUZGYVVJc1RVRkJUU3hKUVVGSmFrSXNSVUZCUlVzc1JVRkJSU3hGUVVGRlFTeEZRVUZGYkVNc1JVRkJSV3RETEVsQlFVa3NSMEZCUjBFc1MwRkJTMFFzUjBGQlIwZ3NSVUZCUldwRExFdEJRVXRGTEVWQlFVVnJReXhGUVVGRlF5eEhRVUZIUVN4RlFVRkZUQ3hIUVVGSExFOUJRVTBzUlVGQlJ5eFBRVUZOTEVkQlEyNVZOa0lzUzBGQlMzZGFMRTFCUVUweFNDeE5RVUZOT1ZJc1MwRkJTM2xhTERCQ1FVRXdRbnBhTEV0QlFVdDNXaXhOUVVGTlJTeDVRa0ZCZVVJellTeE5RVUZOYmtJc1ZVRkJWV3RWTEU5QlFVOHNVMEZCVXpOVUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGMVF5eFBRVUZ3UXpKRUxFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFMUJRVTEwV0N4RlFVRkZSeXhSUVVGbFV5eE5RVUZOYmtJc1ZVRkJWV3RWTEUxQlFVMHpWaXhMUVVGTFowTXNSVUZCUlVNc1JVRkJSUzlDTEVsQlFVa3NVMEZCVXpoQ0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOURMRVZCUVVWNVFpeExRVUZMUnl4VFFVRlRhRU1zUjBGQlIwRXNSVUZCUldsQ0xFMUJRVTBzU1VGQlNXcENMRVZCUVVWTExFVkJRVVVzUlVGQlJVRXNSVUZCUld4RExFVkJRVVZyUXl4SlFVRkpMRWRCUVVkQkxFdEJRVXRFTEVsQlFVbElMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZhME1zUlVGQlJVTXNSMEZCUjBFc1JVRkJSVXdzUjBGQlJ5eFBRVUZOTEVWQlFVY3NUMEZCVFN4SFFVRkpOa0lzUzBGQlMzZGFMRTFCUVUxUkxFMUJRVTBzVTBGQlV6ZGlMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVVsRExFVkJRVVVzUlVGQlowVXNUMEZCT1VRd1JDeExRVUZMZDFvc1RVRkJUVGRJTEZGQlFWRjRWQ3hIUVVGRkxGTkJRVk5CTEVWQlFVVkxMRVZCUVVWeFFpeEhRVUZIZWtJc1JVRkJSV3BETEV0QlFVdEZMRVZCUVVVNFFpeEZRVUZGU3l4RlFVRkZjVUlzVFVGQlRYWkVMRWxCUVVkRUxFZEJRVlZETEVkQlEzcGlNRVFzUzBGQlMzZGFMRTFCUVUxVExFdEJRVXNzVTBGQlV6bGlMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnBReXhQUVVGUExFZEJRWEpESzBJc1JVRkJSVFJDTEV0QlFVdDNXaXhOUVVGTlZTeFZRVUZWTDJJc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVdNc1MwRkJTekpFTEV0QlFVdEhMRk5CUVZOb1F5eEhRVUZIUVN4RlFVRkZLMHNzVDBGQlR6bExMRWRCUVVkRUxFVkJRVVZETEVsQlFVazBRaXhMUVVGTGQxb3NUVUZCVFZVc1ZVRkJWU3hUUVVGVEwySXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRk5rSXNSVUZCUlVjc1QwRkJUME1zUlVGQlJYbENMRXRCUVV0SExGTkJRVk5vUXl4SFFVRkhRU3hGUVVGRmFVSXNUVUZCVFN4SlFVRkpha0lzUlVGQlJVc3NSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUld0RExFbEJRVWtzUjBGQlIwRXNTMEZCUzBRc1IwRkJSMGdzUlVGQlJXcERMRXRCUVV0RkxFVkJRVVZyUXl4RlFVRkZReXhIUVVGSFFTeEZRVUZGVEN4SFFVRkhMRTlCUVU5TExFVkJRVVVzVDBGQlR5eEhRVUZIZDBJc1MwRkJTM2RhTEUxQlFVMVhMRlZCUVZVc1UwRkJVMmhqTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZ6UXl4UFFVRlBMRWRCUVRGREswSXNSVUZCUlRSQ0xFdEJRVXQzV2l4TlFVRk5XU3hsUVVGbGFtTXNSVUZCUlVNc1JVRkJSUzlDTEVsQlFXTXNTMEZCU3pKRUxFdEJRVXRITEZOQlFWTm9ReXhIUVVGSFFTeEZRVUZGSzBzc1QwRkJUemxMTEVkQlFVZEVMRVZCUVVWRExFbEJRemxZTkVJc1MwRkJTM2RhTEUxQlFVMVpMR1ZCUVdVc1UwRkJVMnBqTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVbERMRVZCUVVVMlFpeEZRVUZGUnl4UFFVRlBReXhGUVVGRmVVSXNTMEZCUzBjc1UwRkJVMmhETEVkQlFVZEJMRVZCUVVWcFFpeE5RVUZOTEVsQlFVbHFRaXhGUVVGRkxFMUJRVTAzUWl4RlFVRkZMRWRCUVVkQkxFVkJRVVZCTEVsQlFVa3NSMEZCUjBFc1MwRkJTMmxETEVkQlFVZElMRVZCUVVWcVF5eExRVUZMUlN4RlFVRkZhME1zUlVGQlJXcERMRWRCUVVkQkxFVkJRVVUyUWl4SFFVRkhMRTlCUVU4M1FpeEZRVUZGTEU5QlFVOHNSMEZCUnpCRUxFdEJRVXQzV2l4TlFVRk5kRWdzVTBGQlV5eFRRVUZUTDFRc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTEVkQlFVYzBRaXhMUVVGTGQxb3NUVUZCVFhSU0xGRkJRVkV2U2l4RlFVRkZReXhKUVVGSk5FSXNTMEZCUzNkYUxFMUJRVTA1Unl4UlFVRlJMRk5CUVZOMlZTeEhRVUZITEU5QlFVOHNSMEZCUjBFc1JVRkJSVWNzVVVGQlVUQkNMRXRCUVV0M1dpeE5RVUZOTjBjc1RVRkJUU3hUUVVGVGVGVXNSMEZCUnl4SlFVRkpOa0lzUzBGQlN6SkhMRkZCUVZGNFNTeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSVVFzUlVGQlJVY3NUMEZCVHl4RlFVRkZMRWRCUVVkR0xFVkJRVVZCTEZkQlFWZEVMRVZCUVVWRExFZEJRVWRFTEVWQlFVVkhMRTlCUVU4c1IwRkJSekJDTEV0QlFVdDNXaXhOUVVGTllTeFBRVUZQTEZOQlFWTnNZeXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTM2RhTEUxQlFVMTBTQ3hUUVVGVEwxUXNSVUZCUlVNc1NVRkJTVVFzUlVGQlJXbExMRXRCUVV0b1N5eEpRVU0xWWpSQ0xFdEJRVXQzV2l4TlFVRk5ZeXhUUVVGVExGTkJRVk51WXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpKRUxFdEJRVXQzV2l4TlFVRk5MMVFzVDBGQlQzUklMRVZCUVVVNVFpeEZRVUZGTEVWQlFVVXJRaXhKUVVGSk5FSXNTMEZCUzNkYUxFMUJRVTFsTEdOQlFXTXNVMEZCVTNCakxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE1rUXNTMEZCUzIxSkxGRkJRVkZ1U1N4TFFVRkxkMW9zVFVGQlRTOVVMRTlCUVU5MFNDeEZRVUZGT1VJc1JVRkJSU3hIUVVGSGRVd3NUVUZCVFN4TFFVRkxlRW9zU1VGQlNUUkNMRXRCUVV0M1dpeE5RVUZOWjBJc1lVRkJZU3hUUVVGVGNtTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hIUVVGSGRVd3NWVUZCVlhaS0xGRkJRVkVzUjBGQlIyaERMRVZCUVVVd1JDeExRVUZMZDFvc1RVRkJUWFJTTEZGQlFWRXZTaXhGUVVGRk9VSXNTVUZCU1RoQ0xFVkJRVVZwU3l4TFFVRkxhRXNzUjBGQlJ6UkNMRXRCUVV0M1dpeE5RVUZOWXl4VFFVRlRibU1zUlVGQlJVTXNSVUZCUlRsQ0xFbEJRVWt3UkN4TFFVRkxkMW9zVFVGQlRUVkhMRTlCUVU4c1UwRkJVM3BWTEVWQlFVVkRMRWRCUVRaQ0xFbEJRVWt2UWl4RlFVRnhReXhQUVVGc1EwRXNSVUZCUlN4SlFVRnVReXRDTEVWQlFVVTBRaXhMUVVGTGQxb3NUVUZCVFhSU0xGRkJRVkV2U2l4RlFVRkZReXhOUVVGdFFqUkNMRXRCUVV0M1dpeE5RVUZOYVVJc1UwRkJVM1JqTEVWQlFVVkRMRWRCUVZVdlFpeEhRVU12V1RKRUxFdEJRVXQzV2l4TlFVRk5hMElzVjBGQlZ5eFRRVUZUZG1Nc1JVRkJSVU1zUjBGQmFVTXNUMEZCVHl4SlFVRnlRMEVzUlVGQlJUUkNMRXRCUVV0M1dpeE5RVUZOT1Znc1dVRkJXWFpFTEVWQlFVVkRMRTFCUVdkQ05FSXNTMEZCUzNkYUxFMUJRVTFwUWl4VFFVRlRkR01zUlVGQlJVTXNTVUZCUnl4SlFVRlJORUlzUzBGQlMzZGFMRTFCUVUxcFFpeFRRVUZUTEZOQlFWTjBZeXhGUVVGRlF5eEhRVUYxUXl4UFFVRndRelJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEUxQlFVMTBXQ3hGUVVGRlJ5eFJRVUZsTEVkQlFVZFRMRTFCUVUxdVFpeFZRVUZWTmtnc1QwRkJUM1JLTEV0QlFVdG5ReXhGUVVGRlF5eEZRVUZGTEVkQlFVZEZMRkZCUVZFd1FpeExRVUZMZDFvc1RVRkJUVzFDTEZOQlFWTXNVMEZCVTNoakxFVkJRVVZETEVWQlFVVXZRaXhIUVVGcFF5eFBRVUZQTEVsQlFYSkRLMElzUlVGQlJUUkNMRXRCUVV0M1dpeE5RVUZOVlN4VlFVRlZMMklzUlVGQlJVTXNSVUZCUlM5Q0xFMUJRV2RDTWtRc1MwRkJTM2RhTEUxQlFVMXBRaXhUUVVGVGRHTXNSVUZCUlVNc1NVRkJSeXhKUVVGUk5FSXNTMEZCUzNkYUxFMUJRVTF2UWl4WlFVRlpMRk5CUVZONll5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKUXl4RlFVRkZMRVZCUVRKR0xFOUJRWHBHTUVRc1MwRkJTM2RhTEUxQlFVMUxMR0ZCUVdFeFlpeEhRVUZGTEZOQlFWTkpMRVZCUVVWRExFZEJRVWRLTEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGYTBNc1JVRkJSVU1zUlVGQlJVd3NTVUZCU1RaQ0xFdEJRVXQzV2l4TlFVRk5hVUlzVTBGQlUzUmpMRVZCUVVWTExFbEJRVWxzUXl4UFFVRmhRU3hIUVVNeFpUQkVMRXRCUVV0M1dpeE5RVUZOTjB3c1QwRkJUeXhUUVVGVGVGQXNSMEZCUnl4UFFVRlBXU3hOUVVGTmJrSXNWVUZCVlN0UUxFOUJRVTh2Uml4TlFVRk5MRWRCUVVkRExGbEJRVmszU0N4TFFVRkxkMW9zVFVGQlRUbFVMRXRCUVVzc1UwRkJVM1pJTEVkQlFVY3NUMEZCVDFrc1RVRkJUVzVDTEZWQlFWVXJVQ3hQUVVGUEwwWXNUVUZCVFN4SFFVRkhReXhaUVVGWk4wZ3NTMEZCUzNkYUxFMUJRVTF4UWl4UlFVRlJMRk5CUVZNeFl5eEhRVUZITEVsQlFVbERMRVZCUVVWRUxFVkJRVVZITEU5QlFVOHNSMEZCUnl4RlFVRkZSaXhGUVVGRkxFTkJRVU1zU1VGQlNTeEpRVUZKTDBJc1JVRkJSVEJETEUxQlFVMVlMRWRCUVVjNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVNFFpeEZRVUZGT1VJc1NVRkJTVVFzUlVGQlJVTXNSMEZCUnpaQ0xFVkJRVVUzUWl4SFFVRkhMRTlCUVU5RUxFVkJRVVVzVFVGQlRTeEpRVUZKTWtRc1MwRkJTM2RhTEUxQlFVMDVVaXhOUVVGTk1VZ3NTMEZCUzNkYUxFMUJRVTF4UWl4UlFVRlJOMkVzUzBGQlMzZGFMRTFCUVUxdVJ5eFBRVUZQTEZOQlFWTnNWaXhGUVVGRlF5eEhRVUZITEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlhkTUxGVkJRVlYyU2l4UFFVRlBha01zU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVWMVRDeFZRVUZWZUV3c1IwRkJSeXhIUVVGSE1rUXNTMEZCU3pSSExGbEJRVmwwU3l4SFFVRkhMRU5CUVVNc1NVRkJTV2xETEVWQlFVVktMRVZCUVVWSExGRkJRVkVzUlVGQlJVVXNSVUZCUld4RExFVkJRVVZuUXl4UlFVRlJMRVZCUVVWSUxFVkJRVVZITEU5QlFVOURMRVZCUVVWRExFVkJRVVVzU1VGQlNTeEpRVUZKY1VJc1JVRkJSU3hGUVVGRlFTeEZRVUZGY2tJc1JVRkJSWEZDTEVsQlFVa3hRaXhGUVVGRlNTeEZRVUZGYzBJc1IwRkJSM1pFTEVWQlFVVjFSQ3hSUVVGUk1VSXNSVUZCUldsTExFdEJRVXM1VEN4TFFVTTVaakJFTEV0QlFVdDNXaXhOUVVGTkwxUXNUMEZCVHl4VFFVRlRkRWdzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFYVkRMRTlCUVhCRE1FUXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNUVUZCVFhSWUxFVkJRVVZITEZGQlFXVlRMRTFCUVUxdVFpeFZRVUZWTmtnc1QwRkJUMjFETEUxQlFVMTZTaXhGUVVGRk5rSXNTMEZCUzNkYUxFMUJRVTE2VWl4TlFVRk5SaXhWUVVGVkxFdEJRVXMzU0N4TFFVRkxkMW9zVFVGQlRYcFNMRTFCUVUwc1UwRkJVelZLTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUYxUXl4UFFVRndRekpFTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEUxQlFVMTBXQ3hGUVVGRlJ5eFJRVUZsTEVkQlFVZDFTaXhWUVVGVmRrb3NUMEZCVDFNc1RVRkJUVzVDTEZWQlFWVnRTeXhOUVVGTk5Vd3NTMEZCUzJkRExFVkJRVVZETEVkQlFVZFhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVdG5ReXhGUVVGRlF5eEZRVUZGTDBJc1NVRkROMU15UkN4TFFVRkxkMW9zVFVGQlRYTkNMR2xDUVVGcFFpeFRRVUZUTTJNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjclFpeEZRVUZGUVN4SFFVRkhSQ3hGUVVGRkxFbEJRVWszUWl4RlFVRkZMRk5CUVZNMlFpeEhRVUZITEU5QlFVODJRaXhMUVVGTE9FY3NVMEZCVXpOSkxFZEJRVWNzU1VGQlNUWkNMRXRCUVV0blNDeFBRVUZQTjBrc1YwRkJWMEVzUjBGQlJ5dExMRTlCUVU4c1IwRkJSeTlMTEVkQlFVYzVRaXhGUVVGRlFTeEhRVUZIUXl4RlFVRkZRU3hGUVVGRkxFZEJRVWNzU1VGQlNTeEpRVUZKYVVNc1JVRkJSU3hGUVVGRlF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWTUxFVkJRVVZITEZGQlFWRXNRMEZCUXl4SlFVRkpkVUlzUlVGQlJURkNMRVZCUVVWTExFdEJRVXR2VGl4RlFVRkZkbEFzUlVGQlJYZEVMRWRCUVVkdVJDeFBRVUZQYTBJc1ZVRkJWVU1zWlVGQlpURkNMRXRCUVV0SExFVkJRVVZ6VUN4TFFVRkxkRkFzUlVGQlJYTlFMRWxCUVVjc1JVRkJSM2hPTEVWQlFVVkhMRXRCUVV0elFpeEhRVUZIZWtJc1JVRkJSVVVzVDBGQlQwTXNSMEZCUjNsQ0xFdEJRVXQzV2l4TlFVRk5kVUlzWVVGQllTeFRRVUZUTldNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUekpFTEV0QlFVdDNXaXhOUVVGTmQwSXNZMEZCWXpkakxFVkJRVVU1UWl4SFFVRkhNa1FzUzBGQlMzZGFMRTFCUVUxNVFpeG5Ra0ZCWlN4RlFVRkhOMk1zU1VGQlNUUkNMRXRCUVV0M1dpeE5RVUZOTUVJc1lVRkJZU3hUUVVGVEwyTXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NUMEZCVHpKRUxFdEJRVXQzV2l4TlFVRk5kMElzWTBGQll6ZGpMRVZCUVVWRExFZEJRVVVzVDBGQlJ5eEZRVUZQTDBJc1NVRkRibVF5UkN4TFFVRkxkMW9zVFVGQlRYZENMR05CUVdNc1UwRkJVemRqTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4RlFVRkZhVU1zUjBGQlJ5eEpRVUZKTEVsQlFXMUNjVTRzUlVGQlpuQk9MRVZCUVVVc1JVRkJSWEZDTEVWQlFVVXhRaXhGUVVGRlJ5eFBRVUZUUlN4RlFVRkZjVUlzUjBGQlJ5eERRVUZETEVsQlFVbDFVU3hGUVVGRk5WSXNSVUZCUlhGQ0xFZEJRVWNzUlVGQlRUVkVMRVZCUVVWSkxFVkJRVVVyUWl4RlFVRkZha01zUzBGQlMyOURMRVZCUVVWS0xFVkJRVVZwVXl4SFFVRkhRU3hGUVVGRmFsTXNSMEZCUjBNc1JVRkJSVGxDTEVWQlFVVTJRaXhGUVVGRmFWTXNTVUZCU1N4RlFVRkZibFVzUlVGQlJYVkRMRVZCUVVVMFVpeEZRVUZGTEVkQlFVZDJVU3hGUVVGRmRWRXNSVUZCUlhoRkxFZEJRVWN6VUN4SFFVRkhMRTlCUVU4eVVDeEZRVUZGY0U0c1IwRkJSMEVzUjBGQlIzZENMRXRCUVV0M1dpeE5RVUZOTWtJc1MwRkJTeXhUUVVGVGFHUXNSVUZCUlVNc1IwRkJSMFFzUlVGQlJXZGtMRXRCUVVzdll5eEhRVUZITkVJc1MwRkJTM2RhTEUxQlFVMTVRaXhwUWtGQmFVSnFZaXhMUVVGTGQxb3NUVUZCVFRSQ0xGZEJRVmNzVTBGQlUycGtMRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1JVRkJSVEJETEUxQlFVMWFMRVZCUVVWSExGRkJRVkZvUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVUyUWl4RlFVRkZSeXhQUVVGUGFFTXNTVUZCU1VRc1JVRkJSVU1zUjBGQlJ5eERRVUZESzJVc1RVRkJUUzlsTEVWQlFVVlhMRTFCUVUxclFpeEZRVUZGTjBJc1NVRkJTU3hKUVVGSmFVTXNSVUZCUlVnc1IwRkJSelJDTEV0QlFVdDNXaXhOUVVGTmVVSXNaVUZCTkVZc1NVRkJOMFZxWWl4TFFVRkxkMW9zVFVGQlRUSkNMRXRCUVVzNVpTeEhRVUZGTEZOQlFWTTRRaXhGUVVGRlF5eEhRVUZITEU5QlFVOUhMRVZCUVVWS0xFVkJRVVZzUWl4TlFVRk5iVUlzUlVGQlJXNUNMRkZCUVZGclFpeEZRVUZGYTJRc1RVRkJUV3BrTEVWQlFVVnBaQ3hUUVVGWkwyVXNSVUZCUlN4RlFVRkZRU3hGUVVGRk5rSXNSVUZCUlVjc1QwRkJUMmhETEVsQlFVazJRaXhGUVVGRk4wSXNSMEZCUjBRc1JVRkJSVU1zUjBGQlIxY3NUMEZEYkdVclF5eExRVUZMZDFvc1RVRkJUVGhDTEZWQlFWVXNVMEZCVTI1a0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWxETEVWQlFVVkVMRWRCUVVjeVJDeExRVUZMZDFvc1RVRkJUWGxDTEdWQlFXVnFZaXhMUVVGTGQxb3NUVUZCVFRKQ0xFdEJRVXRvWkN4SFFVRkZMRk5CUVZOQkxFVkJRVVU1UWl4SFFVRkhMRTlCUVU5RExFVkJRVVU0UWl4RlFVRkZSQ3hIUVVGSFF5eEZRVUZGTDBJc1VVRkJUekpFTEV0QlFVdDNXaXhOUVVGTkswSXNhVUpCUVdsQ0xGTkJRVk53WkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpKRUxFdEJRVXQzV2l4TlFVRk5PRUlzVlVGQlZXNWtMRWRCUVVVc1UwRkJVMEVzUjBGQlJ5eFBRVUZQUVN4RlFVRkZReXhMUVVGSkwwSXNTVUZCU1RKRUxFdEJRVXQzV2l4TlFVRk5aME1zVTBGQlV5eFRRVUZUY21Rc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjclFpeEZRVUZGUVN4SFFVRkhORUlzUzBGQlMzZGFMRTFCUVUxNVFpeGxRVUZsTEVsQlFVa3NTVUZCU1RObExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSkxFTkJRVU1zU1VGQlNXbERMRVZCUVVWSUxFVkJRVVZFTEVWQlFVVTNRaXhGUVVGRkxFZEJRVWMyUWl4RlFVRkZOMElzU1VGQlNTeEhRVUZITEVWQlFVVnBReXhIUVVGSExFZEJRVWRCTEVkQlFVZHNReXhGUVVGRkxFOUJRVTBzUlVGQlJ5eFBRVUZOTEVkQlEyeFlNa1FzUzBGQlMzZGFMRTFCUVUxMlJ5eFBRVUZQTEZOQlFWTTVWU3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhKUVVGSk1rUXNTMEZCU3pSSExGbEJRVmw2U1N4TFFVRkxOa0lzUzBGQlN6UkhMRmxCUVZsNFNTeEpRVUZKUkN4RlFVRkZSeXhSUVVGUlJpeEZRVUZGUlN4UFFVRlBMRTlCUVUwc1JVRkJSeXhKUVVGSmFFTXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOXFReXhGUVVGRlFTeEhRVUZITWtRc1MwRkJTM2RhTEUxQlFVMXBReXgxUWtGQmRVSXNTVUZCU1N4SlFVRkpiR1FzUlVGQlJTeEZRVUZGUVN4RlFVRkZha01zUlVGQlJXbERMRWxCUVVrc1NVRkJTV3hETEVWQlFVVTRRaXhGUVVGRlNTeEhRVUZIU0N4RlFVRkZSeXhKUVVGSkxFOUJRVTBzUlVGQlJ5eFBRVUZOTEVkQlFVbDVRaXhMUVVGTGQxb3NUVUZCVFd0RExGTkJRVk1zVTBGQlUzWmtMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhRU3hGUVVGRlFTeEhRVUZITWtRc1MwRkJTM2RhTEUxQlFVMTVRaXhsUVVGbExFbEJRVWtzU1VGQlNUTmxMRVZCUVVWdlJDeExRVUZMUlN4SlFVRkpla0lzUlVGQlJVY3NUMEZCVDBZc1JVRkJSVVVzVVVGQlVVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmFrTXNSVUZCUldsRExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZia01zUlVGQlJUaENMRVZCUVVWSkxFZEJRVWRJTEVWQlFVVkhMRWxCUVVrc1IwRkJSeXhIUVVGSFF5eEZRVUZGTEU5QlFVOUJMRVZCUVVVc1QwRkJUM2RDTEV0QlFVdDNXaXhOUVVGTmVVSXNaVUZCWlRsakxFVkJRVVZITEU5QlFVOUdMRVZCUVVWRkxGTkJRVk13UWl4TFFVRkxkMW9zVFVGQlRYbENMR1ZCUVdVc1UwRkJVemxqTEVWQlFVVkRMRWRCUVVjc1QwRkJUMFFzUlVGQlJVTXNSVUZCUlN4RlFVRkZSQ3hGUVVGRlF5eEhRVUZITEVWQlFVVXNSMEZEZEdVMFFpeExRVUZMZDFvc1RVRkJUVzFETEhOQ1FVRnpRaXhUUVVGVGVHUXNSVUZCUlVNc1IwRkJSeXhQUVVGUE5FSXNTMEZCUzNkYUxFMUJRVTE1UWl4bFFVRmxPV01zUlVGQlJVTXNTVUZCU1RSQ0xFdEJRVXQzV2l4TlFVRk5hVU1zZFVKQlFYVkNMRk5CUVZOMFpDeEZRVUZGUXl4SFFVRkhMRTlCUVU5RUxFbEJRVWxETEVkQlFVYzBRaXhMUVVGTGQxb3NUVUZCVFc5RExHRkJRV0VzVTBGQlUzcGtMRVZCUVVWRExFVkJRVVV2UWl4SFFVRnZReXhQUVVGUExFZEJRWGhEUVN4RlFVRkZNa1FzUzBGQlMzZGFMRTFCUVUxMVFpeGhRVUZoTldNc1JVRkJSVU1zUlVGQlJTOUNMRTFCUVdVeVJDeExRVUZMZDFvc1RVRkJUV01zVTBGQlUyNWpMRVZCUVVWRExFbEJRVWt2UWl4RlFVRkZMRXRCUVVrc1NVRkJVVEpFTEV0QlFVdDNXaXhOUVVGTmNVTXNZVUZCWVN4VFFVRlRNV1FzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVzlETEU5QlFVOHNTVUZCZUVNclFpeEZRVUZGTkVJc1MwRkJTM2RhTEUxQlFVMTFRaXhoUVVGaE5XTXNSVUZCUlVNc1JVRkJSUzlDTEV0QlFXVXlSQ3hMUVVGTGQxb3NUVUZCVFdsQ0xGTkJRVk4wWXl4RlFVRkZReXhKUVVNMVdEUkNMRXRCUVV0M1dpeE5RVUZOYzBNc1QwRkJUeXhUUVVGVE0yUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRkxFZEJRVWRwUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZLTEVWQlFVVkhMRTlCUVU5RExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZUQ3hGUVVGRlNTeEhRVUZIYzBJc1JVRkJSWHBDTEVWQlFVVnFReXhMUVVGTFJTeEZRVUZGYlVNc1JVRkJSVVFzUlVGQlJVb3NSMEZCUnpaQ0xFdEJRVXRGTEUxQlFVMU1MRXRCUVV0MlJDeEZRVUZGZFVRc1MwRkJTM1pFTEVWQlFVVjFSQ3hIUVVGSExFdEJRVXQxU1N4TFFVRkxOVW9zUjBGQlJ5eFBRVUZQYkVNc1IwRkJSekJFTEV0QlFVdDNXaXhOUVVGTmRVTXNVMEZCVXl4VFFVRlROV1FzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzU1VGQlNVTXNSVUZCUlN4SFFVRTJSQ3hQUVVFeFJEQkVMRXRCUVV0M1dpeE5RVUZOTjBnc1VVRkJVWGhVTEVkQlFVVXNVMEZCVTBrc1JVRkJSVU1zUjBGQlIyeERMRVZCUVVVNFFpeEZRVUZGYWtNc1MwRkJTMFVzUlVGQlJXdERMRVZCUVVWRExFVkJRVVZNTEVsQlFVbEpMRXRCUVZkcVF5eEhRVUZITUVRc1MwRkJTM2RhTEUxQlFVMTNReXhOUVVGTkxGTkJRVk0zWkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFZEJRVWRwUXl4RlFVRkZMRVZCUVVWRExFVkJRVVZNTEVWQlFTdENMRkZCUVhSQ0xFbEJRVk5ETEVsQlFVbEhMRVZCUVVWS0xFVkJRVVZMTEVWQlFVVktMRWRCUVUwc1IwRkJhRU12UWl4RlFVRkZRU3hIUVVGSExFbEJRV2REYlVNc1JVRkJSVVFzUjBGQlJ5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RlFVRkZiRU1zUlVGQlJTeEpRVUZKT0VJc1JVRkJSVWtzUlVGQlJVb3NSVUZCUlVzc1JVRkJSVXdzUjBGQlJ6bENMRVZCUVVWRExFVkJRVVU0VEN4TFFVRkxha3NzVVVGQlVTeEpRVUZKUVN4RlFVRkZTU3hGUVVGRlNpeEZRVUZGU3l4RlFVRkZUQ3hIUVVGSE9VSXNSVUZCUlVNc1JVRkJSVGhNTEV0QlFVdHFTeXhIUVVGSExFOUJRVTgzUWl4SFFVTnNZakJFTEV0QlFVdDNXaXhOUVVGTmVVTXNUMEZCVHl4VFFVRlRPV1FzUlVGQlJVTXNSMEZCUnl4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVkQlFVZERMRVZCUVVVc1JVRkJSVUVzUlVGQlJUaENMRVZCUVVVNVFpeEpRVUZKUkN4RlFVRkZReXhIUVVGSE5rSXNSVUZCUlN4UFFVRlBPVUlzUjBGQlJ6SkVMRXRCUVV0M1dpeE5RVUZOTUVNc1VVRkJVU3hUUVVGVEwyUXNSMEZCUnl4SlFVRkpMRWxCUVVsRExFVkJRVVVzUjBGQlJ5OUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJYZE1MRlZCUVZWMlNpeFBRVUZQYWtNc1NVRkJTU3hEUVVGRExFbEJRVWxETEVWQlFVVjFUQ3hWUVVGVmVFd3NSMEZCUnl4SFFVRkhNa1FzUzBGQlN6SkhMRkZCUVZGeVN5eEhRVUZITEVsQlFVa3NTVUZCU1dsRExFVkJRVVVzUlVGQlJVRXNSVUZCUldwRExFVkJRVVZuUXl4UFFVRlBReXhIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKUXl4RlFVRkZkMElzUzBGQlMzZGFMRTFCUVUxNlVpeE5RVUZOZWt3c1JVRkJSV2xETEVWQlFVVkJMRVZCUVVVc1RVRkJUVU1zUlVGQlJYZENMRXRCUVV0M1dpeE5RVUZOTUVNc1VVRkJVWFJWTEUxQlFVMHNTMEZCUzNCS0xFZEJRVWNzU1VGQlNTeEpRVUZKY1VJc1JVRkJSU3hGUVVGRlFTeEZRVUZGY2tJc1JVRkJSVVlzVDBGQlQzVkNMRWxCUVVsNlFpeEZRVUZGWjBzc1MwRkJTelZLTEVWQlFVVnhRaXhUUVVGVGVrSXNSVUZCUldkTExFdEJRVXM1VEN4SFFVRkhMRTlCUVU4NFFpeEhRVU0xVmpSQ0xFdEJRVXQzV2l4TlFVRk5Na01zVDBGQlR5eFRRVUZUYUdVc1JVRkJSVU1zUjBGQmNVc3NUMEZCYkVzMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eE5RVUZOZEZnc1JVRkJSVWNzVVVGQlVVZ3NSVUZCUlVjc1UwRkJjVUlzUjBGQldrWXNSMEZCUjBRc1JVRkJSVWNzVVVGQlYxTXNUVUZCVFc1Q0xGVkJRVlZ2U3l4UlFVRlJTaXhOUVVGTmVrb3NSVUZCUlVFc1JVRkJSWE5JTEZGQlFWRnlTQ3hGUVVGRlFTeEpRVUZKTEVWQlFVVkJMRWRCUVVkWExFMUJRVTF1UWl4VlFVRlZkMHNzUzBGQlMxSXNUVUZCVFhwS0xFVkJRVVZCTEVWQlFVVnpTQ3hQUVVGUExFZEJRVWR5U0N4TFFVRlpSQ3hIUVVGSE5rSXNTMEZCUzNkYUxFMUJRVTAwUXl4VFFVRlRMRk5CUVZOcVpTeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ6SkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkeVdDeEhRVUZIUVN4RlFVRkZSQ3hGUVVGRlJ5eFJRVUZSTUVJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1IwRkJSM0JhTEVkQlFVZEJMRVZCUVVVNFFpeEZRVUZGUnl4UlFVRlJSaXhGUVVGRlZ5eE5RVUZOYmtJc1ZVRkJWVFpJTEU5QlFVOTBTaXhMUVVGTFowTXNSVUZCUlVNc1JVRkJSU3hIUVVGSFZ5eE5RVUZOYmtJc1ZVRkJWVFpJTEU5QlFVOTBTaXhMUVVGTFowTXNSVUZCUlRsQ0xFVkJRVVVzUlVGQlJTdENMRVZCUVVVc1MwRkRjbGswUWl4TFFVRkxkMW9zVFVGQlRUWkRMRWxCUVVrc1UwRkJVMnhsTEVkQlFVY3NTVUZCU1RCS0xGVkJRVlYyU2l4UFFVRlBMRTFCUVUwc1IwRkJSeXhKUVVGSkxFbEJRVWxHTEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVYzVEN4VlFVRlZMRWRCUVVkMlNpeFBRVUZQYUVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGZFV3c1ZVRkJWWFpLTEU5QlFVOW9ReXhKUVVGSmRVd3NWVUZCVlhaTUxFZEJRVWRuUXl4UFFVRlBha01zU1VGQlNVRXNSVUZCUlhkTUxGVkJRVlYyVEN4SFFVRkhaME1zVVVGQlVTeEpRVUZKYUVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGUkN4RlFVRkZReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKYVVNc1JVRkJSU3hIUVVGSFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWeFNpeFZRVUZWZGtvc1QwRkJUMFVzU1VGQlNVUXNSVUZCUlRaS0xFdEJRVXRRTEZWQlFWVnlTaXhIUVVGSGJFTXNTVUZCU1RoQ0xFVkJRVVZuU3l4TFFVRkxOMG9zUjBGQlJ5eFBRVUZQU0N4SFFVRkhORUlzUzBGQlMzZGFMRTFCUVUwNFF5eFJRVUZSTEZOQlFWTnVaU3hGUVVGRlF5eEhRVUZIUVN4RlFVRkZRU3hIUVVGSGMwSXNTMEZCU3pSSUxFOUJRVThzU1VGQlNTeEpRVUZKYWt3c1JVRkJSVGhDTEVWQlFVVkhMRTlCUVU4c1JVRkJSU3hGUVVGRmFrTXNSVUZCUlVFc1NVRkJTU3hEUVVGRExFbEJRVWxETEVWQlFVVnZSQ3hMUVVGTE5tTXNUVUZCVFc1bExFdEJRVXN2UWl4RlFVRkZMRWxCUVVsclF5eEZRVUZGU2l4RlFVRkZPVUlzUjBGQlJ6aENMRVZCUVVVNVFpeEhRVUZIT0VJc1JVRkJSVGRDTEVkQlFVYzJRaXhGUVVGRk4wSXNSMEZCUjJsRExFbEJRVWw1UWl4TFFVRkxkMW9zVFVGQlRXZEVMRmxCUVZrc1UwRkJVM0psTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXNSMEZCYlVRc1QwRkJhRVF5UkN4TFFVRkxkMW9zVFVGQlRUZElMRkZCUVZGMlZDeEhRVUZGTEZOQlFWTkJMRWRCUVVjdlFpeEZRVUZGSzB3c1MwRkJTMnBMTEVWQlFVVkRMRTlCUVdFdlFpeEhRVU4wWmpKRUxFdEJRVXQzV2l4TlFVRk5hVVFzVlVGQlZTeFRRVUZUZEdVc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUekpFTEV0QlFVdDNXaXhOUVVGTk4wd3NUMEZCVHk5R0xFMUJRVTBzUjBGQlJ6VklMRXRCUVV0M1dpeE5RVUZOZEU0c1NVRkJTUzlPTEVWQlFVVkRMRVZCUVVVdlFpeExRVUZMTWtRc1MwRkJTekJqTEUxQlFVMHNSMEZCUnpGakxFdEJRVXN3WXl4TlFVRk5ReXhyUWtGQmEwSXNVMEZCVTNobExFZEJRVWNzU1VGQlNTeEpRVUZKUXl4RlFVRkZMRWRCUVVjdlFpeEZRVUZGTEVWQlFVVkRMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpMRU5CUVVNc1NVRkJTV2xETEVWQlFVVktMRVZCUVVWNVpTeFhRVUZYZEdkQ0xFZEJRVWNzU1VGQlNXbERMRWxCUVVsSUxFVkJRVVV2UWl4TFFVRlBMRWxCUVVaclF5eEZRVUZOUVN4SlFVRkpMRWRCUVVkSUxFVkJRVVV2UWl4TFFVRkxhME1zUlVGQlJTeFBRVUZQU0N4SFFVRkhORUlzUzBGQlN6QmpMRTFCUVUxSExHdENRVUZyUWl4VFFVRlRNV1VzUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVWSExFOUJRVThzVDBGQlQwUXNUMEZCVDNsbExHRkJRV0ZzVml4TlFVRk5MRXRCUVV0NlNpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hIUVVGSEwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRk9FSXNSVUZCUlVjc1QwRkJUMnBETEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVsRExFVkJRVVV3UkN4TFFVRkxkMW9zVFVGQlRYcFNMRTFCUVUwMVNpeEZRVUZGT1VJc1JVRkJSVUVzUlVGQlJTeE5RVUZOSzBJc1IwRkJSME1zVDBGQlQzbGxMR0ZCUVdGc1ZpeE5RVUZOTEV0QlFVdDBUQ3hIUVVGSExFOUJRVTg0UWl4SFFVTjRaRFJDTEV0QlFVc3dZeXhOUVVGTlN5eGxRVUZsTEZOQlFWTTFaU3hGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTGQxb3NUVUZCVFhST0xFbEJRVWt2VGl4SFFVRkZMRk5CUVZOQkxFZEJRVzlDTEU5QlFVOHNSMEZCZUVKQkxFVkJRVVZCTEVWQlFVVnhTU3hUUVVGVExFdEJRV1ZzU1N4UFFVRlBTQ3hGUVVGRkxFbEJRVWxCTEV0QlFVbDFTQ3hMUVVGTGRFZ3NSMEZCUnl4TFFVRkxORUlzUzBGQlN6QmpMRTFCUVUxTkxHVkJRV1VzVTBGQlV6ZGxMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIZEZnc1JVRkJSVWNzVDBGQlR5eEZRVUZGTERKRFFVRXlReXhKUVVGSkxFbEJRVWxHTEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVZITEU5QlFVOXFReXhIUVVGSExFVkJRVVVyUWl4RlFVRkZaMHNzUzBGQlN6WlZMRk5CUVZNNVpTeEZRVUZGYzBRc1ZVRkJWWEJHTEVWQlFVVkJMRVZCUVVVc1IwRkJSeXhMUVVGTExFOUJRVThyUWl4SFFVTjZWVFJDTEV0QlFVc3dZeXhOUVVGTlVTeHpRa0ZCYzBJc1UwRkJVeTlsTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRkxFZEJRVWN2UWl4RlFVRkZMRVZCUVVWRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSkxFTkJRVU1zU1VGQlNXbERMRVZCUVVWS0xFVkJRVVY1WlN4WFFVRlhkR2RDTEVkQlFVY3NTVUZCU1dsRExFVkJRVVZJTEVWQlFVVXZRaXhMUVVGTGEwTXNSMEZCUnl4TFFVRkxRU3hGUVVGRlNDeEZRVUZGTDBJc1MwRkJTMnRETEVkQlFVY3NSVUZCUlN4TFFVRkxMRkZCUVZVc1RVRkJSa0VzU1VGQlZXcERMRVZCUVVVc1JVRkJSVFpDTEVWQlFVVkhMRkZCUVZFc1VVRkJNRUlzVFVGQmJFSklMRVZCUVVWNVpTeFhRVUZYZEdkQ0xFVkJRVVVzUzBGQlYybERMRVZCUVVVc1VVRkJWU3hMUVVGR1FTeEpRVUZUTEV0QlFYVkNMRXRCUVd4Q1NpeEZRVUZGZVdVc1lVRkJZWFJuUWl4SlFVRlRPRUlzUlVGQlJTOUNMRXRCUVV0clF5eEhRVUZITEVkQlFVY3NTVUZCU1Vnc1JVRkJSUzlDTEV0QlFVdHJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMU0N4RlFVRkZMMElzUzBGQlMydERMRWRCUVVjc1IwRkJSeXhKUVVGSlNDeEZRVUZGTDBJc1MwRkJTMnRETEVkQlFVY3NSVUZCUlN4SFFVRkhMRXRCUVV0SUxFVkJRVVV2UWl4TFFVRlBMRWRCUVVaclF5eEZRVUZMTEV0QlFVc3NUMEZCVDBnc1IwRkRjbGMwUWl4TFFVRkxNR01zVFVGQlRWTXNjMEpCUVhOQ0xGTkJRVk5vWml4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEhRVUZITDBJc1JVRkJSU3hGUVVGRlF5eEZRVUZGTEVWQlFVVkVMRVZCUVVVNFFpeEZRVUZGUnl4UlFVRlJMRU5CUVVNc1NVRkJTVU1zUlVGQlJVb3NSVUZCUlRsQ0xFdEJRVXNzUjBGQlJ5eEpRVUZKYTBNc1JVRkJSVWdzUlVGQlJUbENMRXRCUVVzclFpeFBRVUZQZVdVc1lVRkJZWFpsTEZGQlFWRXNSMEZCUnl4SlFVRkpRU3hIUVVGSExFbEJRVWxCTEVWQlFVVXNRMEZCUXl4SlFVRkpReXhGUVVGRlRDeEZRVUZGT1VJc1MwRkJTeXRDTEVWQlFVVTVRaXhMUVVGTEswSXNUMEZCVDNsbExHTkJRV2RDTEVkQlFVWjJaU3hKUVVGUExFVkJRVWtzUjBGQlJrTXNVVUZCVnl4SFFVRkhMRWxCUVVsRUxFZEJRVWNzU1VGQlNVRXNSVUZCUlN4RFFVRkRReXhGUVVGRlRDeEZRVUZGT1VJc1MwRkJTeXhKUVVGSmQwUXNSVUZCUlRGQ0xFVkJRVVU1UWl4TFFVRmphME1zU1VGQlRTeEZRVUZHUVN4SlFVRk5MRWxCUVUwc1IwRkJSa01zU1VGQlR5eEpRVUZOTEVkQlFVWnhRaXhKUVVGUExFVkJRVWtzUjBGQk0wTXhRaXhGUVVGRk9VSXNUVUZCTmtNc1RVRkJUU3RDTEVWQlFVVTVRaXhMUVVGTEswSXNUMEZCVDNsbExHRkJRV0VzVDBGQlQzWmxMRWRCUVVjc1MwRkJTMGdzUlVGQlJUbENMRXRCUVVzclFpeFBRVUZQZVdVc1lVRkJZU3hQUVVGVExFdEJRVVoyWlN4VFFVRmpReXhGUVVGRlRDeEZRVUZGT1VJc1MwRkJTM2RFTEVWQlFVVXhRaXhGUVVGRk9VSXNTMEZCU3l0Q0xFVkJRVVU1UWl4TFFVRkxLMElzVDBGQlQzbGxMR05CUVdkQ0xFZEJRVVoyWlN4SlFVRlBMRWxCUVUwc1IwRkJSa01zU1VGQlR5eEZRVUZKTEVkQlFVWnhRaXhIUVVGTkxFOUJRVTk2UWl4RlFVRkZjMGdzUzBGQlN5eExRVU53WlRGR0xFdEJRVXN3WXl4TlFVRk5WU3hoUVVGaExGTkJRVk5xWml4RlFVRkZReXhIUVVGSE5FSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hGUVVGRlJ5eFJRVUZSUml4RlFVRkZSU3hQUVVGUExHZERRVUZuUXl4SlFVRkpMRWxCUVVscVF5eEZRVUZGTEVkQlFVZERMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpSQ3hGUVVGRkswd3NTMEZCUzJwTExFVkJRVVUzUWl4SFFVRkhPRUlzUlVGQlJUbENMRWxCUVVrc1QwRkJUMFFzUjBGQlJ6SkVMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJMRWRCUVVkb1ZpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYRkpMR2xDUVVGcFFpeFRRVUZUYkdZc1IwRkJSeXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZETEdWQlFXVXNRMEZCUXl4SlFVRkpOMWNzUlVGQlJUUkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJjMGtzVjBGQlYyNW1MRWRCUVVkRExFdEJRVXRFTEV0QlFVdEJMR0ZCUVdGRExFVkJRVVZ0Wml4WFFVRlhjR1lzWVVGQllVTXNSVUZCUlc5bUxGVkJRVlY0WkN4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l3NFJFRkJPRVF6Vml4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhsSkxHOUNRVUZ2UW5SbUxFbEJRVWtzVDBGQlQwRXNSMEZETjJVMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVUQkpMSEZDUVVGeFFpeFRRVUZUZG1Zc1JVRkJSVU1zUjBGQlJ5eEhRVUZITkVJc1MwRkJTMmRXTEZGQlFWRkRMR1ZCUVdVc1EwRkJReXhKUVVGSk5Wa3NSVUZCUlRKRUxFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUmMwa3NWMEZCVjI1bUxFZEJRVWM1UWl4UlFVRkhMRWxCUVc5Q1FTeEZRVUZGSzBJc1MwRkJTMFFzU1VGQlNVRXNZVUZCWVRsQ0xFVkJRVVVyUWl4TlFVRk5SQ3hoUVVGaE9VSXNSVUZCUld0b1FpeFZRVUZWY0dZc1lVRkJZVGxDTEVWQlFVVnRhRUlzVjBGQlYzaGtMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMSE5GUVVGelJYWllMRVZCUVVVMFFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYbEpMRzlDUVVGdlFuUm1MRXRCUVVzc1QwRkJUMEVzUjBGQlJ6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNa2tzTUVKQlFUQkNMRk5CUVZONFppeEhRVUZITEU5QlFVODJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVVEJKTEhGQ1FVRnhRblptTEVWQlFVVXNjMEpCUTNaa05rSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRTBTU3d3UWtGQk1FSXNVMEZCVTNwbUxFZEJRVWNzVDBGQlR6WkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJNRWtzY1VKQlFYRkNkbVlzUlVGQlJTeHpRa0ZCYzBJMlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVUWkpMSGRDUVVGM1FpeFRRVUZUTVdZc1IwRkJSeXhQUVVGUE5rSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRXdTU3h4UWtGQmNVSjJaaXhGUVVGRkxHOUNRVUZ2UWpaQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUk9Fa3NlVUpCUVhsQ0xGTkJRVk16Wml4SFFVRkhMRTlCUVU4MlFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVUQkpMSEZDUVVGeFFuWm1MRVZCUVVVc2NVSkJRWEZDTmtJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFclNTeDVRa0ZCZVVJc1UwRkJVelZtTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUk1Fa3NjVUpCUVhGQ2RtWXNSVUZCUlN4eFFrRkRibVEyUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVdkS0xIbENRVUY1UWl4VFFVRlROMllzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZFd1NTeHhRa0ZCY1VKMlppeEZRVUZGTEhGQ1FVRnhRalpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSYVVvc2VVSkJRWGxDTEZOQlFWTTVaaXhIUVVGSExFOUJRVTgyUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVRCSkxIRkNRVUZ4UW5abUxFVkJRVVVzY1VKQlFYRkNOa0lzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZyU2l3MFFrRkJORUlzVTBGQlV5OW1MRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3gzUWtGQmQwSTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVVzFLTERCQ1FVRXdRaXhUUVVGVGFHZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h6UWtGRE1XUTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVVzlLTEhsQ1FVRjVRaXhUUVVGVGFtZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h4UWtGQmNVSTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWEZLTEhkQ1FVRjNRaXhUUVVGVGJHZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h2UWtGQmIwSTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWE5LTEhsQ1FVRjVRaXhUUVVGVGJtZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h4UWtGQmNVSTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWFZLTERCQ1FVRXdRaXhUUVVGVGNHZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h6UWtGRGJHUTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWGRLTERCQ1FVRXdRaXhUUVVGVGNtZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h6UWtGQmMwSTJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWGxLTERCQ1FVRXdRaXhUUVVGVGRHZENMRWRCUVVjc1QwRkJUelpDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSTUVrc2NVSkJRWEZDZG1Zc1JVRkJSU3h6UWtGRGJFODJRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWGxKTEc5Q1FVRnZRaXhUUVVGVGRHWXNSMEZCUnl4SlFVRkhOa0lzUzBGQlN6aEhMRk5CUVZNelNTeEhRVUYxU2l4WlFVRlBMRWxCUVZOQkxFVkJRVVVzV1VGQldTeFBRVUZQUVN4RlFVRkZMR05CUVdOQkxFVkJRWHBOTEVsQlFVa3NUMEZCVDBFc1JVRkJSVFpNTEZsQlFWbDNUU3hoUVVGaGNsa3NSVUZCUlRaTUxGbEJRVmw2VGl4TlFVRk5SeXhQUVVGUGEwSXNWVUZCVlRSSkxGTkJRVk55U3l4TFFVRkxaME1zUjBGQlJ5eE5RVUZOUXl4SFFVRkhMRTFCUVUwc2MwTkJRV2xITkVJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZGelNTeFhRVUZYTEZOQlFWTnVaaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlVRc1IwRkJSMEVzUlVGQlJYVm5RaXhqUVVGamNtbENMRVZCUVVVclFpeEpRVUZKUVN4RlFVRkZkV2RDTEdGQlFXRjJaMElzUlVGQlJYZG5RaXhqUVVFclFpeEpRVUZxUW5acFFpeEZRVUZGUVN4SFFVRkhNa1FzUzBGQlMyWXNVVUZCV1hWbExGTkJRVk51YUVJc1JVRkJSV3RvUWl4VFFVRlRMRTlCUVU5c2FFSXNSVUZCUlN4TlFVRk5ReXhKUVVGSkxFOUJRVThzVFVGQlRUQkVMRXRCUVVzMlpTeFZRVUZWTEVkQlFVYzNaU3hMUVVGTE5tVXNWVUZCVlVNc1UwRkJVeXhUUVVGVE0yZENMRWRCUVVjc1QwRkJUeXhYUVVGWExFOUJRVTlCTEVsQlFVazJRaXhMUVVGTE5tVXNWVUZCVlVVc1RVRkJUU3hYUVVGWExFOUJRVTBzUjBGQlNTOWxMRXRCUVVzMlpTeFZRVUZWUnl4TFFVRkxMRmRCUVZjc1QwRkJUU3hIUVVGSmFHWXNTMEZCU3pabExGVkJRVlZKTEV0QlFVc3NWMEZCVnl4UFFVRlBMRTFCUVUxcVppeExRVUZMTm1Vc1ZVRkJWVXNzVTBGQlV5eFRRVUZUTDJkQ0xFVkJRVVZETEVkQlFVY3NUMEZCVDBRc1IwRkJSelpDTEV0QlFVczJaU3hWUVVGVk9XRXNUVUZCVFN4VFFVRlROVVlzUjBGQlJ5eFBRVUZQTEZkQlFWY3NUVUZCVFd0RUxFMUJRVTFzUkN4TFFVRk5Oa0lzUzBGQlN6WmxMRlZCUVZWc1NpeExRVUZMTEZOQlFWTjRXQ3hIUVVGSExFOUJRVThzVjBGQlZ5eE5RVUZOUVN4SlFVTndNRUkyUWl4TFFVRkxObVVzVlVGQlZVMHNTMEZCU3l4VFFVRlRhR2hDTEVWQlFVVkRMRWRCUVZVc1QwRkJVRUVzUlVGQlJVRXNSMEZCUnl4RlFVRlRMRmRCUVZjc1QwRkJUMFFzUlVGQlJYbEtMRTFCUVUweFNTeExRVUZMU0N4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMTUV3c1ZVRkJWU3hGUVVGRmVrb3NUVUZCVFRSQ0xFdEJRVXMyWlN4VlFVRlZUeXhKUVVGSkxGTkJRVk5xYUVJc1IwRkJSeXhQUVVGUExGZEJRVmNzVDBGQlR6QktMRlZCUVZVeFNpeExRVUZMTmtJc1MwRkJTelpsTEZWQlFWVlJMR0ZCUVdFc1UwRkJVMnhvUWl4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkZNRU1zVFVGQlRXNUNMRlZCUVZWdFN5eE5RVUZOTlV3c1MwRkJTekJNTEZWQlFWVXNSMEZCUnl4UFFVRlBMRmRCUVZjc1NVRkJTWHBLTEVWQlFVVlhMRTFCUVUxdVFpeFZRVUZWYlVzc1RVRkJUVFZNTEV0QlFVc3dUQ3hYUVVFMlFpeFBRVUZzUW5wS0xFVkJRVVZuU3l4TFFVRkxVaXhOUVVGTmVFb3NSVUZCUlM5Q0xFZEJRVlU0UWl4RlFVRkZlVW9zVFVGQlRURkpMRXRCUVV0a0xFdEJRVXMwUWl4TFFVRkxObVVzVlVGQlZWTXNaMEpCUVdkQ0xGTkJRVk51YUVJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTelpsTEZWQlFWVlZMRk5CUVZOd2FFSXNSVUZCUlRaQ0xFdEJRVXMyWlN4VlFVRlZReXhUUVVGVE1XZENMRXRCUXpGbE5FSXNTMEZCU3pabExGVkJRVlZYTEZGQlFWRXNVMEZCVTNKb1FpeEZRVUZGUXl4SFFVRkhMRTlCUVU4c1UwRkJVeTlDTEVkQlFVY3NUMEZCVHl0Q0xFVkJRVVZFTEVkQlFVYzVRaXhGUVVGRk9FSXNTVUZCU1RsQ0xFbEJRVWt5UkN4TFFVRkxObVVzVlVGQlZWa3NVVUZCVVN4VFFVRlRkR2hDTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVjNUQ3hWUVVGVmRrd3NSVUZCUlVRc1JVRkJSV2xETEU5QlFVOHNUMEZCVHl4WFFVRlhMRWxCUVVsSUxFVkJRVVUzUWl4SlFVRkpOa0lzUlVGQlJUbENMRVZCUVVWRExFVkJRVVVzUjBGQlIzTk1MRTFCUVUweFNTeExRVUZMTWtrc1dVRkJXU3hKUVVGSkxFbEJRVWw2U2l4RlFVRkZPVUlzUlVGQlJTeEZRVUZGTEVkQlFVYzRRaXhGUVVGRlFTeEpRVUZKUkN4RlFVRkZPVUlzUlVGQlJTdENMRWRCUVVkcVF5eExRVUZMSzBNc1MwRkJTMllzUjBGQlJ5eFBRVUZQUVN4SlFVRkpOa0lzUzBGQlN6WmxMRlZCUVZWVkxGTkJRVk1zVTBGQlUzQm9RaXhIUVVGSExFbEJRVWxETEVWQlFVVjVTaXhWUVVGVmVFd3NSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOHNUMEZCVHl4WFFVRlhMRWxCUVVrc1NVRkJTVWdzUlVGQlJVa3NSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUld0RExFbEJRVWxLTEVWQlFVVkRMRVZCUVVWSExFZEJRVWR4U2l4TlFVRk5NVWtzUzBGQlN6SkpMRmRCUVZjc1QwRkJUekZLTEVsQlF6TlpOa0lzUzBGQlN6WmxMRlZCUVZWaExFbEJRVWtzVTBGQlUzWm9RaXhIUVVGSExFbEJRVWxETEVWQlFVVjVTaXhWUVVGVmVFd3NSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOHNUMEZCVHl4WFFVRlhMRWxCUVVrc1NVRkJTVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZPVUlzUlVGQlJUaENMRWxCUVVrc1NVRkJTVU1zUlVGQlJVUXNSMEZCUjNsS0xFMUJRVTB4U1N4TFFVRkxNa2tzVjBGQlZ5eFBRVUZOTEVWQlFVY3NUMEZCVFN4SlFVRkxOMGdzUzBGQlN6WmxMRlZCUVZWakxFZEJRVWNzVTBGQlUzaG9RaXhIUVVGSExFbEJRVWxETEVWQlFVVjVTaXhWUVVGVmVFd3NSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOHNUMEZCVHl4WFFVRlhMRWxCUVVrc1NVRkJTVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZPVUlzUlVGQlJUaENMRWxCUVVrc1IwRkJSME1zUlVGQlJVUXNSMEZCUjNsS0xFMUJRVTB4U1N4TFFVRkxNa2tzVjBGQlZ5eFBRVUZOTEVWQlFVY3NUMEZCVFN4SlFVRkxOMGdzUzBGQlN6WmxMRlZCUVZWbExFbEJRVWtzVTBGQlUzcG9RaXhIUVVGSExFOUJRVThzVjBGQlZ5eFBRVUZQUVN4RlFVRkZlVW9zVFVGQlRURkpMRXRCUVVzeVNTeGhRVU42VnpkSUxFdEJRVXMyWlN4VlFVRlZkbWhDTEU5QlFVOHNVMEZCVTJFc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hoUVVGblJ5eFBRVUZ1UmtFc1JVRkJSWFZDTEZWQlFWVlBMRVZCUVVWUUxGVkJRVlYyUWl4RlFVRkZMRWxCUVVsQkxFVkJRVVU0UWl4RlFVRkZlVW9zVFVGQlRYWk1MRVZCUVVVd1F5eE5RVUZOYmtJc1ZVRkJWVzFMTEUxQlFVMDFUQ3hMUVVGTE1Fd3NWVUZCVlN4SlFVRlhlRXdzUjBGQlJ6SkVMRXRCUVVzMlpTeFZRVUZWWjBJc2IwSkJRVzFDTEVWQlFVYzNaaXhMUVVGTE5tVXNWVUZCVldsQ0xHbENRVUZwUWl4VFFVRlRNMmhDTEVkQlFVY3NTVUZCVXpsQ0xFVkJRVXdyUWl4SFFVRkZMRVZCUVVzc1QwRkJUeXhYUVVGWExFOUJRVWswUWl4TFFVRkxObVVzVlVGQlZXZENMRzlDUVVFNFFucG9RaXhKUVVGSkwwSXNSVUZCUlRoQ0xFbEJRVWxETEVkQlFVVXNSMEZCVnk5Q0xFZEJRVE5DT0VJc1RVRkJLMEkyUWl4TFFVRkxObVVzVlVGQlZXdENMRXRCUVVzc1UwRkJVelZvUWl4SFFVRkhMRWxCUVVsRExFVkJRVVZFTEVWQlFVVXNUMEZCVHl4WFFVRlhMRWRCUVVkRExFVkJRVVVzUTBGQlF5eEpRVUZKUkN4RlFVRkZReXhGUVVGRlFTeEZRVUZGTEV0QlFVdEVMRTlCUXpkYU5rSXNTMEZCU3pabExGVkJRVlZ0UWl4VFFVRlRMRk5CUVZNM2FFSXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hGUVVGRkxFOUJRVThzVTBGQlUybERMRWRCUVVkNVFpeExRVUZMWml4UFFVRlBaMmhDTEdGQlFXRXpha0lzUjBGQlJ5eEpRVUZKYTBNc1JVRkJSWEZLTEZWQlFWVjJUQ3hGUVVGRk1FUXNTMEZCUzJZc1QwRkJUMmxQTEZsQlFWY3NWMEZCVnk5UExFVkJRVVY1U2l4TlFVRk5ka3dzUlVGQlJXMURMRXRCUVVsS0xFdEJRVXMwUWl4TFFVRkxObVVzVlVGQlZYRkNMRk5CUVZNc1UwRkJVeTlvUWl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFVkJRVVZwUXl4SFFVRkZMRVZCUVVkRExFVkJRVVVzUjBGQlIzRkNMRVZCUVVVc1YwRkJWM1pFTEVWQlFVVXNSVUZCUldsRExFbEJRVWxCTEVkQlFVVXNSVUZCUjNGT0xFMUJRVTFCTEVWQlFVVXNWMEZCVjNSUUxFVkJRVVV3UkN4TFFVRkxaaXhQUVVGUGFVOHNWMEZCVjNKT0xFVkJRVVY2UWl4SFFVRkhSQ3hGUVVGRmVVb3NUVUZCVFhaTUxFVkJRVVZ0UXl4SlFVRkpMRTlCUVU4c1UwRkJVMHdzUjBGQlIwc3NSVUZCUlhGS0xGVkJRVlYyVEN4RlFVRkZhVU1zUjBGQlJTeEZRVUZIY1U0c1RVRkJUVFZNTEV0QlFVczJaU3hWUVVGVmMwSXNWVUZCVlN4VFFVRlRhR2xDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFVbERMRVZCUVVVc1JVRkJSV2xETEVWQlFVVXNWMEZCVjJwRExFVkJRVVVzUjBGQlJ5eFBRVUZQTEZOQlFWTnJReXhIUVVGSGJFTXNTVUZCU1VFc1JVRkJSVEJFTEV0QlFVdG1MRTlCUVU5cFR5eFhRVUZYTTA4c1JVRkJSVWdzUjBGQlIwUXNSVUZCUlhsS0xFMUJRVTEyVEN4RlFVRkZkMHdzWTBGQll6ZElMRXRCUVV0clZTeEpRVUZKYTAwc1dVRkJXU3hoUVVGaGNHZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGJHbENMRWRCUVVkbExFdEJRVXR2YUVJc1UwRkJVMjVwUWl4SFFVRkhOa0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSZW1sQ0xGVkJRVlUwU1N4VFFVRlRMRmRCUVZjc1QwRkJUM1JJTEV0QlFVdHZhRUlzVlVGQlZYUm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZGTEVWQlFVVXNTVUZCU1hablFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNTMEZCUzNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRkhMRXRCUVVzc1NVRkJTWGhuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1VVRkJVWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGSkxGRkJRVkVzU1VGQlNYcG5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVjBGQlYzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZMTEZGQlFWRXNTVUZCU1RGblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWMEZCVjNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRk5MRTlCUVU4c1NVRkJTVE5uUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGUExFdEJRVXNzU1VGQlNUVm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVVVGQlVYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZSTEZGQlFWRXNTVUZCU1RkblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWMEZEY0M5Q2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVk1zVFVGQlRTeEpRVUZKT1dkQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVWVXNUVUZCVFN4SlFVRkpMMmRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVZjc1JVRkJSU3hKUVVGSmFHaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hMUVVGTGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVmtzUzBGQlN5eEpRVUZKYW1oQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFJRVUZSY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXRXNVMEZCVXl4SlFVRkpiR2hDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4WlFVRlpjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdNc1NVRkJTU3hKUVVGSmJtaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hQUVVGUGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV1VzU1VGQlNTeEpRVUZKY0doQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFBRVUZQY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXZENMRWxCUVVrc1NVRkJTWEpvUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGcFFpeFhRVUZYTEVsQlFVbDBhRUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEdOQlFXTnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYTBJc1MwRkJTeXhKUVVGSmRtaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hSUVVOc1owSnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYlVJc1IwRkJSeXhKUVVGSmVHaENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hOUVVGTmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVzlDTEU5QlFVOHNTVUZCU1hwb1FpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZCVlhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnhRaXhQUVVGUExFbEJRVWt4YUVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmMwSXNVVUZCVVN4SlFVRkpNMmhDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4WFFVRlhjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhWQ0xFOUJRVThzU1VGQlNUVm9RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkYzUWl4TFFVRkxMRWxCUVVrM2FFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRkZCUVZGeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJlVUlzUzBGQlN5eEpRVUZKT1doQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFJRVUZSY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUQkNMRWxCUVVrc1NVRkJTUzlvUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFeVFpeFRRVUZUTEVsQlFVbG9hVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZsQlEyNWtjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRSQ0xGRkJRVkVzU1VGQlNXcHBRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVjBGQlYzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkUyUWl4TFFVRkxMRWxCUVVsc2FVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRkZCUVZGeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJPRUlzVTBGQlV5eEpRVUZKYm1sQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFpRVUZaY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTdENMRWRCUVVjc1NVRkJTWEJwUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkJUWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGblF5eEpRVUZKTEVsQlFVbHlhVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEU5QlFVOXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYVVNc1VVRkJVU3hKUVVGSmRHbENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hYUVVGWGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV3RETEVsQlFVa3NTVUZCU1hacFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZCVDNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnRReXhQUVVGUExFbEJRVWw0YVVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmIwTXNTVUZCU1N4SlFVRkplbWxDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UFFVRlBjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhGRExFbEJRVWtzU1VGQlNURnBRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGRGJtZENjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhORExFZEJRVWNzU1VGQlNUTnBRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVFVGQlRYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkYxUXl4SFFVRkhMRWxCUVVrMWFVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUVUxeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJkME1zUjBGQlJ5eEpRVUZKTjJsQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeE5RVUZOY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYbERMRTFCUVUwc1NVRkJTVGxwUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1UwRkJVM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFd1F5eFRRVUZUTEVsQlFVa3ZhVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZsQlFWbHlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTWtNc1YwRkJWeXhKUVVGSmFHcENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hqUVVGamNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVFJETEU5QlFVOHNTVUZCU1dwcVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZCVlhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTJReXhMUVVGTExFbEJRVWxzYWtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk9FTXNUMEZCVHl4SlFVRkpibXBDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VlFVRlZjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN0RExFdEJRVXNzU1VGQlNYQnFRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVVVGRGVHZENjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdkRUxFMUJRVTBzU1VGQlNYSnFRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVTBGQlUzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZwUkN4VFFVRlRMRWxCUVVsMGFrSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmxCUVZseVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJhMFFzUjBGQlJ5eEpRVUZKZG1wQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeE5RVUZOY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXMUVMRWRCUVVjc1NVRkJTWGhxUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1RVRkJUWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGdlJDeEhRVUZITEVsQlFVbDZha0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSY1VRc1IwRkJSeXhKUVVGSk1XcENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hOUVVGTmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWE5FTEVkQlFVY3NTVUZCU1ROcVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZCVFhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRjFSQ3hIUVVGSExFbEJRVWsxYWtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFMUJRVTF5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmQwUXNTMEZCU3l4SlFVRkpOMnBDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UlFVRlJjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhsRUxFOUJRVThzU1VGQlNUbHFRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGRE1XVnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTUVRc1QwRkJUeXhKUVVGSkwycENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hWUVVGVmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVEpFTEVkQlFVY3NTVUZCU1doclFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZCVFhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTBSQ3hMUVVGTExFbEJRVWxxYTBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk5rUXNSVUZCUlN4SlFVRkpiR3RDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4TFFVRkxjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRoRUxFOUJRVThzU1VGQlNXNXJRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVlVGQlZYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVyUkN4SlFVRkpMRWxCUVVsd2EwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTlCUVU5eVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJaMFVzVFVGQlRTeEpRVUZKY210Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXbEZMRWxCUVVrc1NVRkJTWFJyUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGclJTeFJRVUZSTEVsQlFVbDJhMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZkQlFWZHlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYlVVc1NVRkJTU3hKUVVGSmVHdENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hQUVVOMlpuSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZ2UlN4UFFVRlBMRWxCUVVsNmEwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRlZCUVZWeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJjVVVzVFVGQlRTeEpRVUZKTVd0Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFRRVUZUY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYTkZMRTlCUVU4c1NVRkJTVE5yUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGMVJTeEhRVUZITEVsQlFVazFhMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSZDBVc1MwRkJTeXhKUVVGSk4ydENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hSUVVGUmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWGxGTEV0QlFVc3NTVUZCU1RsclFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZCVVhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXdSU3hKUVVGSkxFbEJRVWt2YTBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFOUJRVTl5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk1rVXNTMEZCU3l4SlFVRkphR3hDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UlFVRlJjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRSRkxFdEJRVXNzU1VGQlNXcHNRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVVVGQlVYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkUyUlN4TFFVRkxMRWxCUVVsc2JFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRkZCUXpGbWNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVGhGTEZOQlFWTXNTVUZCU1c1c1FpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNXVUZCV1hKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXJSU3hMUVVGTExFbEJRVWx3YkVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUlowWXNUVUZCVFN4SlFVRkpjbXhDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVdsR0xFbEJRVWtzU1VGQlNYUnNRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZyUml4VFFVRlRMRWxCUVVsMmJFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmxCUVZseVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJiVVlzVTBGQlV5eEpRVUZKZUd4Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFpRVUZaY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXOUdMRTlCUVU4c1NVRkJTWHBzUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGeFJpeEhRVUZITEVsQlFVa3hiRUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYzBZc1UwRkJVeXhKUVVGSk0yeENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3haUVVNdlpISm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkYxUml4UFFVRlBMRWxCUVVrMWJFSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRlZCUVZWeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJkMFlzVDBGQlR5eEpRVUZKTjJ4Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFZRVUZWY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYbEdMRVZCUVVVc1NVRkJTVGxzUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1MwRkJTM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFd1JpeE5RVUZOTEVsQlFVa3ZiRUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZOQlFWTnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTWtZc1VVRkJVU3hKUVVGSmFHMUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hYUVVGWGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVFJHTEVsQlFVa3NTVUZCU1dwdFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZCVDNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTJSaXhUUVVGVExFbEJRVWxzYlVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGbEJRVmx5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk9FWXNSVUZCUlN4SlFVRkpibTFDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4TFFVRkxjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN0R0xFZEJRVWNzU1VGQlNYQnRRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVFVGQlRYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZuUnl4SFFVRkhMRWxCUVVseWJVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTFCUXpGbWNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVV2xITEVsQlFVa3NTVUZCU1hSdFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUMEZCVDNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnJSeXhMUVVGTExFbEJRVWwyYlVJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGRkJRVkZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmJVY3NSVUZCUlN4SlFVRkplRzFDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4TFFVRkxjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVc5SExFdEJRVXNzU1VGQlNYcHRRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVVVGQlVYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZ4Unl4UFFVRlBMRWxCUVVreGJVSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRlZCUVZWeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJjMGNzVVVGQlVTeEpRVUZKTTIxQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFhRVUZYY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVYVkhMRTlCUVU4c1NVRkJTVFZ0UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1ZVRkJWWEpuUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGM1J5eE5RVUZOTEVsQlFVazNiVUlzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZOQlFWTnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSZVVjc1QwRkJUeXhKUVVGSk9XMUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hWUVVGVmNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVEJITEV0QlFVc3NTVUZCU1M5dFFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNVVUZEYkdkQ2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVEpITEU5QlFVOHNTVUZCU1dodVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNWVUZCVlhKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRTBSeXhQUVVGUExFbEJRVWxxYmtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGVkJRVlZ5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUk5rY3NUVUZCVFN4SlFVRkpiRzVDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVRoSExFbEJRVWtzU1VGQlNXNXVRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVDBGQlQzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVyUnl4UlFVRlJMRWxCUVVsd2JrSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRmRCUVZkeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJaMGdzU1VGQlNTeEpRVUZKY201Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFBRVUZQY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVXbElMRWxCUVVrc1NVRkJTWFJ1UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1QwRkJUM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZGclNDeE5RVUZOTEVsQlFVbDJia0lzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEZOQlFWTnlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSYlVnc1RVRkJUU3hKUVVGSmVHNUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVzlJTEVkQlFVY3NTVUZCU1hwdVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZEYkdkQ2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVWEZJTEZOQlFWTXNTVUZCU1RGdVFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNXVUZCV1hKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRnpTQ3hUUVVGVExFbEJRVWt6YmtJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxGbEJRVmx5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmRVZ3NUVUZCVFN4SlFVRkpOVzVDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4VFFVRlRjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVhkSUxFZEJRVWNzU1VGQlNUZHVRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVFVGQlRYSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkY1U0N4TlFVRk5MRWxCUVVrNWJrSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRk5CUVZOeVowSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJNRWdzUzBGQlN5eEpRVUZKTDI1Q0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVTeFJRVUZSY21kQ0xFdEJRVXRyVlN4SlFVRkpiVTBzVVVGQlVUSklMRTFCUVUwc1NVRkJTV2h2UWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFc1UwRkJVM0puUWl4TFFVRkxhMVVzU1VGQlNXMU5MRkZCUVZFMFNDeEhRVUZITEVsQlFVbHFiMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTEUxQlFVMXlaMElzUzBGQlMydFZMRWxCUVVsdFRTeFJRVUZSTmtnc1RVRkJUU3hKUVVGSmJHOUNMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3hUUVVGVGNtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVVGhJTEVkQlFVY3NTVUZCU1c1dlFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNUVUZEY0dkQ2NtZENMRXRCUVV0clZTeEpRVUZKYlUwc1VVRkJVU3RJTEVWQlFVVXNTVUZCU1hCdlFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRXNTMEZCUzNKblFpeExRVUZMYTFVc1NVRkJTVzFOTEZGQlFWRm5TU3hIUVVGSExFbEJRVWx5YjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUkxFMUJRVTF5WjBJc1MwRkJTMnRWTEVsQlFVbHRUU3hSUVVGUmFVa3NTVUZCU1N4SlFVRkpkRzlDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVN4UFFVRlBjbWRDTEV0QlFVdHJWU3hKUVVGSmJVMHNVVUZCVVd0SkxFMUJRVTBzU1VGQlNYWnZRaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkVzVTBGQlUzSm5RaXhMUVVGTGExVXNTVUZCU1cxTkxGRkJRVkZ0U1N4SlFVRkpMRWxCUVVsNGIwSXNTMEZCUzJ0VkxFbEJRVWx0VFN4UlFVRlJMRTlCUVU5eVowSXNTMEZCUzJ0VkxFbEJRVWwxVlN4TFFVRkxMRWRCUVVkNmIwSXNTMEZCUzJ0VkxFbEJRVWwxVlN4TFFVRkxReXhYUVVGWExFTkJRVU5ETEUxQlFVc3NSVUZCUnpGbExFMUJRVXNzUlVGQlJ6SmxMRWxCUVVjc1JVRkJSME1zUzBGQlNTeEZRVUZIUXl4VFFVRlJMRVZCUVVkRExFOUJRVTBzUlVGQlIwTXNTVUZCUnl4RlFVRkhReXhMUVVGSkxFVkJRVWRETEU5QlFVMHNSVUZCUjBNc1VVRkJUeXhGUVVGSFF5eE5RVUZMTEVWQlFVZERMRTFCUVVzc1JVRkJSME1zVDBGQlRTeEZRVUZIUXl4UlFVRlBMRVZCUVVkRExFOUJRVTBzUlVGQlIwTXNTMEZCU1N4SFFVRkplbkJDTEV0QlFVdHJWU3hKUVVGSmRWVXNTMEZCUzJsQ0xGVkJRVlVzVTBGQlUzWnlRaXhIUVVGSExFOUJRVTBzU1VGQlN6WkNMRXRCUVV0clZTeEpRVUZKZFZVc1MwRkJTME1zVjBGQlYzWnhRaXhKUVVGSk5rSXNTMEZCUzNsS0xFdEJRVXNzUjBGQlIzcEtMRXRCUVV0NVNpeExRVUZMYTJkQ0xHRkJRV0VzUjBGQlJ6TndRaXhMUVVGTGVVb3NTMEZCUzJ0blFpeGhRVUZoUXl4eFEwRkJjVU0xY0VJc1MwRkJTMjFTTERCQ1FVRXdRbTVTTEV0QlFVdHhVaXg1UWtGQmVVSnlVaXhMUVVGTGJWSXNNRUpCUVRCQ0xGTkJRVk1zUzBGQlMyNVNMRXRCUVVzMmNFSXNUMEZCVHl4SFFVRkhOM0JDTEV0QlFVczJjRUlzVDBGQlQwTXNXVUZCV1N4aFFVRmhPWEJDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFN4VFFVRlROWEpDTEVWQlFVVkRMRWRCUVVkakxFdEJRVXM0Y1VJc2FVVkJRV2xGTjNKQ0xFbEJRVWsyUWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxRkxIZERRVUYzUXpkeVFpeEhRVUZITEVkQlFVZGpMRXRCUVV0bmNrSXNkMFJCUVhkRWJIRkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVWtzWTBGQlkyNXhRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTF1YzBJc1ZVRkJWWGR6UWl4cFEwRkJaME1zUlVGQlIzQnhRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTF1YzBJc1ZVRkJWWGx6UWl4dlFrRkJiMElzVjBGQlZ5eFBRVUZQYm5KQ0xFdEJRVXM0Y1VJc2EwVkJRemR1UTJoeFFpeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMXVjMElzVlVGQlZUUkpMRk5CUVZNc1YwRkJWeXhOUVVGTkxGTkJRVk4wU0N4TFFVRkxPSEZDTEdsRlFVRnBSU3hMUVVGTGFIRkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlR5eFRRVUZUYm5OQ0xFZEJRVWNzVDBGQlIwRXNZVUZCWVRaQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVDBGQlR6VnlRaXhGUVVGRk5rd3NZMEZCWTJoTExFdEJRVXMyY0VJc1QwRkJUMFVzVDBGQlR6VnlRaXhGUVVGRkszSkNMREJFUVVFd1JHeHhRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFKTEdGQlFXOUNhSE5DTEVWQlFVVTJja0lzYTBWQlFXbEZhSEZDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEhWRFFVRjFRM2hZTEVWQlFVVXNTMEZCVnl4eFFrRkRhR1UyUWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxUkxFdEJRVXNzVTBGQlUzQnpRaXhIUVVGSExFOUJRVThzU1VGQlNUWkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUUzl3UWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxRkxIVkRRVUYxUXpseVFpeEpRVUZKTmtJc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTlNTeGhRVUZoTEVkQlFVZHVjVUlzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOUlN4MVEwRkJkVU1zUjBGQlIycHhRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFUTEUxQlFVMTRjVUlzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOVVN4TFFVRkxMRWxCUVVsMmNVSXNTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWeXhYUVVGWGRuSkNMRXRCUVV0M2NrSXNaMFJCUVdkRUxFZEJRVWQ0Y2tJc1MwRkJTM2x5UWl4dlJFRkJiMFF6Y1VJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwY3NlVU5CUVhsRE5YRkNMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmMzYzBJc1ZVRkJWWGR6UWl4cFEwRkJaME1zUlVGQlIzQnhRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYUnl4M1EwRkJkME1zUjBGQlJ6VnhRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYU1N4aFFVRmhMRk5CUVZNeGMwSXNSMEZCYVVNc1QwRkJUeXhMUVVGeVEwRXNSVUZCUlRaQ0xFdEJRVXMyY0VJc1QwRkJUMFVzVFVGQlRVOHNUMEZCVDI1elFpeEpRVUZuUWtjc1QwRkJUekJDTEV0QlFVdDVTaXhMUVVGTFoyaENMRmRCUVZkRUxFMUJRVTE0Y1VJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwc3NhVVJCUVdsRU0zTkNMRWxCUTJoNVFqWkNMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmROTEc5Q1FVRnZRaXhUUVVGVE5YTkNMRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hIUVVGSFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWMVRDeFZRVUZWZGtvc1QwRkJUMmhETEVsQlFVbEVMRVZCUVVVclRDeExRVUZMY0Vrc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwOHNWMEZCVjI1cVFpeFZRVUZWZGt3c1MwRkJTeXhQUVVGUE1FUXNTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWMHNzYVVSQlFXbEVMRWxCUVVrNWNVSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5UeXhQUVVGUGJuTkNMRWRCUVVjc1MwRkJTemxDTEVWQlFVVnhTaXhMUVVGTExFMUJRVTBzVDBGQlR6RkdMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmRSTEZOQlFWTXNVMEZCVXpselFpeEhRVUZITEU5QlFVODJRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYU3l4cFJFRkJhVVE1Y1VJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlYwOHNWMEZCVnpkelFpeExRVUZMTmtJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlZ6ZHpRaXhWUVVGVmVYTkNMRzlDUVVGdlFpeFhRVUZYTEU5QlFVOXVja0lzUzBGQlMzZHlRaXhuUkVGQlowUnNhMElzV1VGRGFtcENlRWNzUzBGQlMyRXNVVUZCVVdJc1MwRkJTM2xLTEV0QlFVdG5hRUlzVjBGQlZ6ZHpRaXhWUVVGVk5Fa3NVMEZCVXl4WFFVRlhMRTFCUVUwc1kwRkJZM1JJTEV0QlFVdDNja0lzWjBSQlFXZEVMRTFCUVUweGNVSXNTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWMGdzVDBGQlR5eFRRVUZUYm5OQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmRUTEc5Q1FVRnZRaTl6UWl4SFFVRkhjVWtzV1VGRE1VOTRSeXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYVXl4dlFrRkJiMElzVTBGQlV5OXpRaXhIUVVGSExFOUJRVWRCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFpRVUZaZEhOQ0xFVkJRVVUyVEN4alFVRmphRXNzUzBGQlMzbEtMRXRCUVV0bmFFSXNXVUZCV1hSelFpeEZRVUZGZDNOQ0xITkVRVUZ6UkROeFFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WFFVRlhSeXgzUTBGQkswTjZjMElzUlVGQlJYVnpRaXhwUkVGQlowUXhjVUlzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzTkVOQlFUUkRlRmdzUlVGQlJTeGhRVUZoTmtJc1MwRkJTM1ZITEU5QlFVOXdTU3hKUVVGVkxEQkNRVU5zV2paQ0xFdEJRVXQ1U2l4TFFVRkxaMmhDTEZkQlFWZFBMRmRCUVZjc1UwRkJVemR6UWl4SFFVRkhMRTlCUVU5clNTeExRVUZMUXl4VlFVRlZia2tzUjBGQlIzVk1MRkZCUVZFc1MwRkJTeXhWUVVGVk1Vb3NTMEZCUzNsS0xFdEJRVXRuYUVJc1YwRkJWMHNzYVVSQlFXbEVMRk5CUVZNemMwSXNSMEZCUnl4UFFVRk5MRWxCUVVzMlFpeExRVUZMZVVvc1MwRkJTMmRvUWl4WlFVRlpWU3h6UTBGQmMwTm9kRUlzU1VGRGNsQTJRaXhMUVVGTGVVb3NTMEZCUzJkb1FpeFhRVUZYTjNOQ0xGVkJRVlYxZEVJc2MwTkJRWE5ETEZOQlFWTm9kRUlzUjBGQmEwMHNUMEZCTDB4bExFdEJRVXQzY2tJc1owUkJRV2RFTVhGQ0xFdEJRVXQ1U2l4TFFVRkxhMmRDTEdGQlFXRkRMSEZEUVVGeFF6VndRaXhMUVVGTGVVb3NTMEZCUzJ0blFpeGhRVUZoUXl4eFEwRkJjVU42V2l4aFFVRmhhRk1zUjBGQlIwRXNSVUZCVTJVc1RVRkJUV01zUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjBRc1RVRkJUWGh4UWl4TFFVRkxlVW9zUzBGQlMyZG9RaXhYUVVGWFN5eHBSRUZCYVVRc1NVRkJTVGx4UWl4TFFVRkxiM0pDTEVkQlFVY3NSMEZCUjNCeVFpeExRVUZMYjNKQ0xFZEJRVWRETEVsQlFVa3NSMEZCUjNKeVFpeExRVUZMYjNKQ0xFZEJRVWRETEVsQlFVbERMR2RDUVVGblFpeFRRVUZUYm5SQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVV0dmNrSXNSMEZCUjBNc1NVRkJTVVVzWjBKQlFXZENReXhuUWtGQlowSnlkRUlzU1VGQlNUWkNMRXRCUVV0dmNrSXNSMEZCUjBNc1NVRkJTVWtzWjBKQlFXZENMRk5CUVZOMGRFSXNSMEZCUnpaQ0xFdEJRVXR2Y2tJc1IwRkJSME1zU1VGQlNVVXNaMEpCUVdkQ1J5eG5Ra0ZCWjBKMmRFSXNTVUZCU1RaQ0xFdEJRVXR2Y2tJc1IwRkJSME1zU1VGQlNVVXNZMEZCWXl4WFFVRlhMRWxCUVVsd2RFSXNSVUZCUlRaQ0xFdEJRVXR2Y2tJc1IwRkJSME1zU1VGQlNVMHNhVUpCUVdsQ0xFZEJRVWNzVFVGQlRYaDBRaXhGUVVGRkxFOUJRVTlCTEVWQlFVVXNUVUZCVFd0RUxFMUJRVTBzYlVSQlF6TnlRbkpDTEV0QlFVdHZja0lzUjBGQlIwTXNTVUZCU1Uwc1pVRkJaU3hYUVVGWExFOUJRVTh6Y2tJc1MwRkJTMFVzVFVGQlRVWXNTMEZCUzJZc1QwRkJUekp6UWl4TlFVRk5OWEpDTEV0QlFVdEZMRTFCUVUxR0xFdEJRVXRtTEU5QlFVOHljMElzU1VGQlNVb3NhVUpCUVdsQ2VISkNMRXRCUVV0bUxFOUJRVTh5YzBJc1NVRkJTVFZ5UWl4TFFVRkxSU3hOUVVGTlJpeExRVUZMWml4UFFVRlBOSE5DTEZsQlFWazNja0lzUzBGQlMwVXNUVUZCVFVZc1MwRkJTMllzVDBGQlR6UnpRaXhWUVVGVlRDeHBRa0ZCYVVKNGNrSXNTMEZCUzJZc1QwRkJUelJ6UWl4VlFVRlZOM0pDTEV0QlFVdEZMRTFCUVUxR0xFdEJRVXRtTEU5QlFVOTFjMElzYVVKQlFXbENlSEpDTEV0QlFVdG1MRTlCUVU4c1RVRkJUV1VzUzBGQlMyOXlRaXhIUVVGSFF5eEpRVUZKVXl3d1FrRkJNRUlzVjBGQlZ5eFBRVUZQTEUxQlFVMDVja0lzUzBGQlMyOXlRaXhIUVVGSFF5eEpRVUZKVFN4clFrRkJhMEl6Y2tJc1MwRkJTeXR5UWl4TFFVRkxMRWRCUVVjdmNrSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxMRWRCUVVkb2MwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxReXhYUVVGVkxFVkJReTlpYW5OQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMwVXNUMEZCVDJ4elFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdERMRmxCUVZrc1RVRkJUV3B6UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNSMEZCUnpCeFFpeGxRVUZsTEUxQlFVMXVjMElzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFZEJRVWN3Y1VJc1pVRkJaU3hOUVVGTmJuTkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SFFVRkhNSEZDTEdWQlFXVXNUVUZCVFc1elFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzUjBGQlJ6QnhRaXhsUVVGbExFMUJRVTF1YzBJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaVUZCWlN4TlFVRk5ibk5DTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEhRVUZITUhGQ0xHVkJRV1VzVFVGQlRXNXpRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1IwRkJSekJ4UWl4bFFVRmxMRTFCUVUxdWMwSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVUZGTEVkQlFVY3djVUlzWlVGQlpTeE5RVUZOYm5OQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hIUVVGSE1IRkNMR2xDUVVGcFFpeEhRVUZIYm5OQ0xFdEJRVXRqTEU5QlFVOTRReXhSUVVOc1ppeExRVUZMTUVJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWxCUVVrc1MwRkJTM3BDTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeExRVUZMTEVkQlFVZDZRaXhMUVVGTFl5eFBRVUZQZUVNc1VVRkJVU3hQUVVGUE1FSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVUZGTEVkQlFVY3djVUlzWjBKQlFXZENMRWRCUVVkdWMwSXNTMEZCUzJNc1QwRkJUM2hETEZGQlFWRXNTMEZCU3pCQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hKUVVGSkxFdEJRVXQ2UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNTMEZCU3l4SFFVRkhla0lzUzBGQlMyTXNUMEZCVDNoRExGTkJRVk1zUzBGQlN6QkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SlFVRkpMRXRCUVV0NlFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzVFVGQlRTeFJRVUZSZWtJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaVUZCWlN4UlFVRlJibk5DTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEhRVUZITUhGQ0xHVkJRV1VzVVVGQlVXNXpRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1IwRkJSekJ4UWl4bFFVRmxMRkZCUVZGdWMwSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVU4wWml4SFFVRkhNSEZDTEdWQlFXVXNVVUZCVVc1elFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzUjBGQlJ6QnhRaXhsUVVGbExGRkJRVkZ1YzBJc1MwRkJTMk1zVDBGQlQxY3NWVUZCVlN4RlFVRkZMRWRCUVVjd2NVSXNaMEpCUVdkQ0xFZEJRVWR1YzBJc1MwRkJTMk1zVDBGQlQzaERMRk5CUVZNc1MwRkJTekJDTEV0QlFVdGpMRTlCUVU5WExGVkJRVlVzUlVGQlJTeEpRVUZKTEV0QlFVdDZRaXhMUVVGTFl5eFBRVUZQVnl4VlFVRlZMRVZCUVVVc1RVRkJUU3hSUVVGUmVrSXNTMEZCUzJNc1QwRkJUMWNzVlVGQlZTeEZRVUZGTEVkQlFVY3djVUlzWlVGQlpTeFJRVUZSYm5OQ0xFdEJRVXRqTEU5QlFVOVhMRlZCUVZVc1JVRkJSU3hIUVVGSE1IRkNMR1ZCUVdVc1VVRkJVVzV6UWl4TFFVRkxZeXhQUVVGUFZ5eFZRVUZWTEVWQlFVVXNSMEZCUnpCeFFpeGxRVUZsTEZGQlFWRnVjMElzUzBGQlMyTXNUMEZCVDFjc1ZVRkJWU3hGUVVGRkxFZEJRVWN3Y1VJc1pVRkJaU3hSUVVGUmJuTkNMRXRCUVV0akxFOUJRVTlYTEZWQlFWVXNSVUZCUlN4SFFVRkhNSEZDTEdWQlFXVXNVVUZCVVc1elFpeExRVUZMWXl4UFFVRlBWeXhWUVVGVkxFVkJRVVVzUjBGQlJ6QnhRaXhsUVVOb1ptNXpRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRKTEU5QlFVOHNRMEZCUTBNc1NVRkJTU3hKUVVGVFF5eEpRVUZKTEVsQlFWTkRMRWxCUVVrc1NVRkJVME1zU1VGQlNTeEpRVUZUUXl4SlFVRkpMRXRCUVZWNmMwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxWU3hKUVVGSkxFTkJRVU5ETEVsQlFVa3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVkQlFVYzNjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMWXl4TlFVRk5MRkZCUVZFNWMwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxaU3hMUVVGTExFOUJRVTh2YzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFowSXNWMEZCVjJoMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdEZMRTlCUVU5c2MwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxaU3hMUVVGTEwzTkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMk1zVFVGQlRUbHpRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRwUWl4VlFVRlZhblJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzBVc1QwRkJUMnh6UWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0akxFMUJRVTA1YzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFpTeExRVU42Vnk5elFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHJRaXhOUVVGTkxGTkJRVk12ZFVJc1JVRkJSVU1zUjBGQlJ5eE5RVUZOTEdsQ1FVRnBRa1FzUlVGQlJTeEZRVUZGUVN4RlFVRkZOa0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMVlN4SlFVRkpReXhKUVVGSkxFVkJRVVY0ZFVJc1JVRkJSVFpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzFVc1NVRkJTVVVzU1VGQlNYaDFRaXhGUVVGRkxFdEJRVXMwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0VkxFbEJRVWxITEZGQlFWRXNUVUZCVFRGMVFpeEZRVUZGTEV0QlFVdEJMRVZCUVVVMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRkxFbEJRVWsxYzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKUXl4TFFVRkxNM05DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzIxQ0xGVkJRVlVzYjBWQlFUaEtiblJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzI5Q0xGVkJRVlVzTUVOQlEyeGhjSFJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNGQ0xHRkJRV0VzYlVKQlFXMUNjblJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNOQ0xHMUNRVUZ0UWl4VFFVRlRiblpDTEVWQlFVVkRMRWRCUVVjc1QwRkJUMEVzUlVGQlJVUXNSVUZCUlhWTUxGRkJRVkV4U2l4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0eFFpeGhRVUZoTEVsQlFVbHNka0lzUjBGQlJ6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM1ZDTEZsQlFWa3NTVUZCU1RsMFFpeFBRVUZQTEVsQlFVbFBMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjlDTEZWQlFWVXNTMEZCUzNCMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdDNRaXhaUVVGWkxFbEJRVWt2ZEVJc1QwRkJUeXhKUVVGSlR5eExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHRRaXhWUVVGVkxFdEJRVXR1ZEVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGVVSXNWVUZCVlN4VFFVRlRkSFpDTEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNWQ0xGbEJRVmx1Y2tJc1MwRkJTM0JETEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNOQ0xHMUNRVUZ0UW01MlFpeEZRVUZGUXl4TFFVRkxORUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMTUVJc1YwRkJWekYwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0NVFpeFZRVU55WTNwMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVc3lRaXhWUVVGVkxGTkJRVk40ZGtJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGQwSXNXVUZCV1hCeVFpeExRVUZMY0VNc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGMwSXNiVUpCUVcxQ2JuWkNMRVZCUVVWRExFdEJRVXMwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzMFFpeFBRVUZQTEVsQlFVbHVkVUlzVDBGQlR5eExRVUZMVHl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0dFFpeFZRVUZWTEV0QlFVdHVkRUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMTmtJc1QwRkJUeXhKUVVGSmNIVkNMRTlCUVU4c1MwRkJTMDhzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYjBJc1ZVRkJWU3hMUVVGTGNIUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTemhDTEZWQlFWVXNVMEZCVXpOMlFpeEhRVUZITEU5QlFVODJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXMyUWl4UFFVRlBlbkpDTEV0QlFVdHFSU3hKUVVGSk5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxLMElzVlVGQlZTeFRRVUZUTlhaQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTelJDTEU5QlFVOTRja0lzUzBGQlMycEZMRWxCUVVrMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdG5ReXhqUVVGakxGTkJRVk0zZGtJc1IwRkJSeXhQUVVGUE5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxLMElzVlVGQlZUVjJRaXhMUVVGTE5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxPRUlzVlVGQlZUTjJRaXhKUVVNMVpqWkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMmxETEdWQlFXVXNTVUZCU1hoMVFpeFBRVUZQTEUxQlFVMVBMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjlDTEZWQlFWVXNUVUZCVFhCMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHRRaXhWUVVGVkxFdEJRVXR1ZEVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGEwTXNaVUZCWlN4SlFVRkplblZDTEU5QlFVOHNUVUZCVFU4c1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGJVSXNWVUZCVlN4TlFVRk5iblJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzI5Q0xGVkJRVlVzUzBGQlMzQjBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR0UXl4alFVRmpMRk5CUVZOb2QwSXNSVUZCUlVNc1IwRkJSeXhQUVVGUE5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxhME1zWlVGQlpUbHlRaXhMUVVGTGNFTXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxjMElzYlVKQlFXMUNiblpDTEVWQlFVVkRMRXRCUVVzMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdHZReXhWUVVGVmNIVkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjFETEdOQlF6bFliblZDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNGRExHTkJRV01zVTBGQlUyeDNRaXhGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRwUXl4bFFVRmxOM0pDTEV0QlFVdHdReXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR6UWl4dFFrRkJiVUp1ZGtJc1JVRkJSVU1zUzBGQlN6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM05ETEZWQlFWVjBkVUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMY1VNc1kwRkJZM0oxUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0MVF5eHBRa0ZCYVVJc1pVRkJaWFoxUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0M1F5eGpRVUZqTEZOQlFWTnlkMElzUlVGQlJVTXNSMEZCTkVNc1QwRkJla05FTEVWQlFVVTJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR6UWl4dFFrRkJiVUp1ZGtJc1JVRkJSVU1zUjBGQlZUUkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM1ZETEdsQ1FVRnBRbTV6UWl4TFFVRkxha1VzUzBGQlN6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTekpDTEZWQlFWVjRka0lzUzBGQlN6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM2xDTEZWQlFWVjBka0lzU1VGREwxbzJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXQ1UXl4dFFrRkJiVUlzU1VGQlNXaDJRaXhQUVVGUExFbEJRVWxQTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzIxQ0xGVkJRVlVzVFVGQlRXNTBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR2UWl4VlFVRlZMRTlCUVU5d2RFSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxNRU1zYlVKQlFXMUNMRWxCUVVscWRrSXNUMEZCVHl4SlFVRkpUeXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR2UWl4VlFVRlZMRTFCUVUxd2RFSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxiVUlzVlVGQlZTeFBRVUZQYm5SQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6SkRMRmxCUVZrc1UwRkJVM2gzUWl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0NVF5eHRRa0ZCYlVKeWMwSXNTMEZCUzNCRExFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzTkNMRzFDUVVGdFFtNTJRaXhGUVVGRlF5eExRVUZMTkVJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTE5FTXNZMEZCWXpWMVFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVc3lReXhaUVVNMVdUTjFRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXMyUXl4WlFVRlpMRk5CUVZNeGQwSXNSVUZCUlVNc1IwRkJSeXhQUVVGUE5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxNRU1zYlVKQlFXMUNkSE5DTEV0QlFVdHdReXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXR6UWl4dFFrRkJiVUp1ZGtJc1JVRkJSVU1zUzBGQlN6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTemhETEdOQlFXTTVkVUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMTmtNc1dVRkJXVGQxUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzclF5eGpRVUZqTEhGSVFVRnhTQzkxUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0blJDeGpRVUZqTEZOQlFWTTNkMElzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTEswTXNZMEZCWXpOelFpeExRVUZMYWtVc1NVRkJTVFpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzJsRUxHOUNRVUZ2UWl3MlEwRkRibU5xZGtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGEwUXNiVUpCUVcxQ0xGTkJRVk12ZDBJc1JVRkJSVU1zUjBGQmIwY3NUMEZCYWtkQkxGRkJRVWNzU1VGQlUwRXNSVUZCUlRSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzbENMRlZCUVZWMGRrSXNSMEZCUjBNc1IwRkJSelJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzBrc1QwRkJUMHNzU1VGQlNYcHpRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRKTEU5QlFVOUpMRWxCUVZkeWRVSXNSVUZCUlhWTUxGRkJRVkV4U2l4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0cFJDeHZRa0ZCYjBJM2QwSXNSVUZCUlN4TFFVRkxRU3hKUVVGSk5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxiVVFzYVVKQlFXbENMRk5CUVZOb2VFSXNSMEZCUnl4TlFVRk5MRXRCUVV0QkxFVkJRVVVyU3l4UFFVRlBMRWRCUVVjdlN5eEZRVUZGZFV3c1VVRkJVU3hQUVVGUExHTkJRV01zYlVKQlFXMUNka3dzUlVGQlJTeFhRVUZYTmtJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGIwUXNhVUpCUVdsQ0xGTkJRVk5xZUVJc1IwRkJSeXhQUVVGUE5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxTU3hQUVVGUFJTeEpRVUZKYm5WQ0xFVkJRVVUyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0SkxFOUJRVTlITEV0QlEzWmlkbk5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNGRUxHbENRVUZwUWl4VFFVRlRiSGhDTEVkQlFVY3NUVUZCVFN4TFFVRkxRU3hGUVVGRkswc3NUMEZCVHl4SFFVRkhMMHNzUlVGQlJYVk1MRkZCUVZFc1QwRkJUeXhqUVVGakxHMUNRVUZ0UW5aTUxFVkJRVVVzVjBGQlZ6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM05FTEdsQ1FVRnBRaXhUUVVGVGJuaENMRWRCUVVjc1QwRkJUelpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzBrc1QwRkJUME1zU1VGQlNXeDFRaXhGUVVGRk5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxTU3hQUVVGUFJ5eExRVUZMZG5OQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzVkVMR05CUVdNc2NVVkJRWEZGZG5aQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzZEVMRkZCUVZFc1UwRkJVM2gyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0NVJDeFRRVUZUTEZWQlFWVjZka0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMTUVRc1VVRkJVU3hSUVVOMllURjJRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXN5UkN4VlFVRlZMRk5CUVZONGVFSXNSMEZCUnl4UFFVRlBRU3hGUVVGRmRVd3NVVUZCVVRGS0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMzVkVMR05CUVdNc1owSkJRV2RDTjJ4Q0xGRkJRVkV4U2l4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0M1JDeFJRVUZSTEZGQlFWRTViRUlzVVVGQlVURktMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTM2xFTEZOQlFWTjZka0lzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMWlN4TlFVRk5jbXBDTEZGQlFWRXhTaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXN3UkN4UlFVRlJNWFpDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzJNc1VVRkJVVGx6UWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzMFJDeDVRa0ZCZVVJc2MwSkJRWE5DTlhaQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6WkVMSGxDUVVGNVFpeHpRa0ZETTFZM2RrSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxPRVFzY1VKQlFYRkNMRk5CUVZNemVFSXNSMEZCUnl4UFFVRlBRU3hGUVVGRmRVd3NVVUZCVVRGS0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6UkVMSGxDUVVGNVFpeFBRVUZaYkcxQ0xGRkJRVkV4U2l4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzMlJDeDVRa0ZCZVVJc1VVRkJZVGQyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzclJDeHBRa0ZCYVVJc1RVRkJUUzkyUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0blJTeGxRVUZsTEc5Q1FVRnZRbWgzUWl4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0cFJTeDFRa0ZCZFVJc1IwRkRhRlJxZDBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTGEwVXNhMEpCUVd0Q0xGTkJRVk12ZUVJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hGUVVGRlF5eEZRVUZGTEVWQlFVVnBReXhIUVVGRkxFVkJRVzFHTEVsQlFXaEdTaXhGUVVGRk5rSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxjMElzYlVKQlFXMUNiblpDTEVWQlFVVkRMRWRCUVVkblFpeE5RVUZOV1N4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVVzclJDeHJRa0ZCYzBJemVFSXNSVUZCUlN4RlFVRkZRU3hGUVVGRlJDeEZRVUZGUnl4UFFVRlBSaXhKUVVGSkxFTkJRVU1zU1VGQlNVa3NSVUZCUlV3c1JVRkJSVU1zUjBGQlJ6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMjFETEdOQlFXTXpka0lzU1VGQlNXNURMRWxCUVVsRExFdEJRVXN3UkN4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0MVF5eHBRa0ZCYVVKdWMwSXNTMEZCU3pWRUxFZEJRVWRFTEVkQlFVVXNSVUZCUjNsQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlN6SkNMRlZCUVZWdWRrSXNSMEZCUjJ4RExFbEJRVWt3UkN4TFFVRkxLM0pDTEV0QlFVdERMRXRCUVV0blJTeGxRVUZsTlhSQ0xFdEJRVXMxUkN4TFFVRkxSQ3hIUVVGRkxFZEJRVWtzVDBGQlR5eEhRVUZIYWtNc1JVRkJSV2xETEVWQlFVVjVRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRWTEVsQlFVbERMRWxCUVVremMwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxWU3hKUVVGSlJ5eFJRVUZSZUhkQ0xFVkJRVVZETEVWQlFVVXdSQ3hMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRwUlN4MVFrRkJkVUpxZDBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKUlN4SlFVRkpOWE5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzFVc1NVRkJTVU1zUzBGRE5XVXpjMElzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYlVVc2QwSkJRWGRDTEZOQlFWTm9lVUlzUlVGQlJVTXNSMEZCUnl4UFFVRlBORUlzUzBGQlN5dHlRaXhMUVVGTFF5eExRVUZMYTBVc2EwSkJRV3RDTDNoQ0xFVkJRVVZETEVsQlFVazBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRWTEVsQlFVbEZMRXRCUVVzMWMwSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxiMFVzYzBKQlFYTkNMRk5CUVZOcWVVSXNSVUZCUlVNc1IwRkJSMFFzU1VGQlNVTXNSVUZCUlRSQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMydENMRTFCUVUwNWRVSXNUVUZCVFVRc1JVRkJSV3Q1UWl4TlFVRk5ReXhWUVVGVmJIbENMRWRCUVVjMFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsRkxFbEJRVWsxYzBJc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFl5eE5RVUZOT1hOQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMyVXNTMEZCU3pWMVFpeEZRVUZGYjNsQ0xFbEJRVWx1ZVVJc1IwRkJSelJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzFVc1NVRkJTVVVzU1VGQlNTeE5RVUZOTEZGQlF6RlZOWE5DTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzNkRkxHdERRVUZyUXl4VFFVRlRjbmxDTEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzJ0RkxHdENRVUZyUWpsNFFpeEpRVUZKTEV0QlFVczBRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRWTEVsQlFVbERMRWxCUVVsNGRVSXNSVUZCUlc5NVFpeEpRVUZKTEUxQlFVMHNUVUZCVFN4TFFVRkxkbmRDTEV0QlFVc3Jja0lzUzBGQlMwTXNTMEZCUzFVc1NVRkJTVVVzU1VGQlNYcDFRaXhGUVVGRmIzbENMRWxCUVVrc1RVRkJUU3hOUVVGTkxGRkJRVkZ3ZVVJc1JVRkJSV3RLTEdkQ1FVRm5RaXhUUVVGVGNrZ3NTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxlVVVzYTBKQlFXdENMR0ZCUVdGNmQwSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDTEZkQlFWZDRlRUlzUzBGQlMzbDRRaXgzUkVGQmQwUXNSMEZCUjNwNFFpeExRVUZMTUhoQ0xGbEJRVmtzUzBGQlN6RjRRaXhMUVVGTE1uaENMRFpFUVVFMlJEZDNRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVJNVJpeDVRMEZCZVVNMWNVSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDT1hsQ0xGVkJRVlYzYzBJc2FVTkJRV2RETEVWQlFVZHdjVUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ09YbENMRlZCUVZWNWMwSXNiMEpCUVc5Q0xGZEJRVmNzVDBGQlQyNXlRaXhMUVVGTGVYaENMSGRFUVVGM1JHNXhRaXhaUVVOc2RrSjRSeXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVJNWVVSXNWVUZCVld0NlFpeDVRMEZCZDBNc1JVRkJSemwzUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSTVlVUlzVlVGQlZXMTZRaXhoUVVGaExGZEJRVmNzVDBGQlR5OTNRaXhMUVVGTEszSkNMRXRCUVV0RExFdEJRVXRWTEVsQlFVbERMRXRCUXpOTE0zTkNMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWpsNVFpeFZRVUZWYjNwQ0xHZENRVUZuUWl4VFFVRlROM2xDTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXlSQ3hMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKd1J5eFBRVUZQY0hKQ0xFMUJRVzFGTlVNc1IwRkJOMFJFTEVWQlFVVXlSQ3hMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKUExHdENRVUZyUWtNc1MwRkJTemN3UWl4SlFVRlhMRWxCUVVrc1IwRkJSeXhQUVVGUE1rUXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDVXl4NVJFRkJlVVE1TUVJc1JVRkJSU3hIUVVGSE1rUXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDVlN4cFFrRkJhVUlzU1VGQlNTOHdRaXhGUVVGRkxFbEJRVWtzUjBGQlJ6aENMRWRCUVVjMlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpWTEdsQ1FVRnBRaXhKUVVGSk9UQkNMRVZCUVVVNFFpeExRVU5xV2pSQ0xFdEJRVXRoTEZGQlFWRmlMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWpsNVFpeFZRVUZWTkVrc1UwRkJVeXhYUVVGWExFMUJRVTBzYzBKQlFYTkNkRWdzUzBGQlMzbDRRaXgzUkVGQmQwUXNUVUZCVFROM1FpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUp3Unl4UFFVRlBMRk5CUVZOdWMwSXNSMEZCUnl4UFFVRlBOa0lzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1Z5eDFRa0ZCZFVKc2VrSXNSMEZCUjNGSkxGbEJRM0pTZUVjc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNWeXgxUWtGQmRVSXNVMEZCVTJ4NlFpeEhRVUZITEU5QlFVZEJMR0ZCUVdFMlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dlFrRkJiMEoyZVVJc1JVRkJSVFpNTEdOQlFXTm9TeXhMUVVGTGVVb3NTMEZCUzJsdVFpeHZRa0ZCYjBKMmVVSXNSVUZCUlRCNVFpd3JSRUZCSzBRM2QwSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDT1VZc2QwTkJRU3REZW5OQ0xFVkJRVVYzZVVJc2VVUkJRWGRFTTNkQ0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExHOUVRVUZ2UkhoWUxFVkJRVVVzWVVGQllUWkNMRXRCUVV0MVJ5eFBRVUZQY0Vrc1NVRkJWU3hyUTBGRE9XTTJRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKWkxHbENRVUZwUWl4VFFVRlRibnBDTEVkQlFVY3NUMEZCVDBFc1JVRkJSWGw1UWl4WlFVRlplbmxDTEVWQlFVVjVlVUlzV1VGQldUVjNRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKd1J5eFBRVUZQYm5OQ0xFbEJRMnBKTmtJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNZU3hQUVVGUExGTkJRVk53ZWtJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSVEpFTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SFFVRkhMRWxCUVVrMlFpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpqTEZWQlFWVndka0lzUzBGQlN5OUdMRWRCUVVjc1RVRkJUV2RHTEUxQlFVMHNjME5CUVhORGFFWXNSMEZEZWtvc1QwRkVORW80UWl4RlFVRkZPVUlzUlVGQlJYRk9MRkZCUVZFeFNpeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpsTEdkQ1FVRmxMRk5CUVZOMGVrSXNSVUZCUlVrc1IwRkJSeXhKUVVGSk4wSXNUMEZCVDJ0Q0xGVkJRVlZETEdWQlFXVXhRaXhMUVVGTGFVTXNSVUZCUlVjc1IwRkJSeXhOUVVGTk9FTXNUVUZCVFN4clFrRkJhMEk1UXl4RlFVRkZMSGxDUVVGNVFteERMRVZCUVVVc1owUkJRV2RFWjBzc1MwRkJTME1zVlVGQlZXeEpMRWxCUVZjc1QwRkJVRVFzUlVGQlJVTXNSVUZCUlVjc1kwRkJkVUo1UWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUwdmNFSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5UeXhQUVVGUGJuTkNMRWRCUTNCbWRYcENMRzFDUVVGdFFuSjZRaXhQUVVGUFJpeFBRVUZoTmtJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNVeXg1UkVGQmVVUm9la0lzU1VGQlNUWkNMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UW1Vc1pVRkJaU3haUVVGWmVuaENMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UW1Nc1ZVRkJWU3h4UmtGQmNVWjRlRUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1R5eHJRa0ZCYTBJc2FVTkJRM0JYYW5oQ0xFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbWxDTEdsQ1FVRnBRaXhUUVVGVGVIcENMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVGSExFOUJRVTh3UkN4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSmhMRTlCUVU5d2VrSXNSVUZCUlVNc1IwRkJSelI1UWl4blFrRkJaMEl6TUVJc1JVRkJSVU1zU1VGQlNUQkVMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWpkR0xHRkJRV0VzVTBGQlV6RnpRaXhIUVVGSExFOUJRVTgyUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSlRMSGxFUVVGNVJHNTRRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFQTEU5QlFVOXVjMElzUzBGQlN6WkNMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UW10Q0xHTkJRV01zVTBGQlUzcDZRaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SFFVRkhMMElzUlVGQlJTeEZRVUZGUVN4RlFVRkZPRUlzUlVGQlJVY3NUMEZCVDJwRExFbEJRVWtyUWl4SFFVRkhORUlzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOVHl4UFFVRlBibk5DTEVWQlFVVTVRaXhKUVVGSkxFOUJRVTh5UkN4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSlRMSGxFUVVGNVJDOTVRaXhKUVVNM1owSTBRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVJNVJpeDNRMEZCZDBNc1IwRkRja1UxY1VJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNVeXg1UkVGQmVVUXNVMEZCVTJoNlFpeEhRVUZITEVsQlFVbERMRVZCUVVVc1NVRkJTVFJDTEV0QlFVdDVTaXhMUVVGTGFXNUNMRzFDUVVGbldDeFBRVUUzVm5SNVFpeEZRVUZGZFhsQ0xIZEVRVUYzUkROM1FpeExRVUZMZVVvc1MwRkJTMnRuUWl4aFFVRmhReXh4UTBGQmNVTTFjRUlzUzBGQlMzbEtMRXRCUVV0clowSXNZVUZCWVVNc2NVTkJRWEZETlZvc1owSkJRV2RDTjFJc1IwRkJSMEVzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMYTJkQ0xHRkJRV0ZETEhWRFFVRjFRM2h5UWl4RlFVRkZkM2xDTEZsQlFWazFkMElzUzBGQlMzbEtMRXRCUVV0clowSXNZVUZCWVVNc2NVTkJRWEZEY0Zrc1ZVRkJWWEpVTEVsQlFWZERMRWRCUXpkbE5FSXNTMEZCUzNsS0xFdEJRVXRwYmtJc2JVSkJRVzFDVlN4cFFrRkJhVUlzVTBGQlUycDZRaXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhIUVVGSExFMUJRVTFCTEVWQlFVVXNUMEZCVHl0Q0xFVkJRVVVzUjBGQlJ6UkNMRXRCUVV0SExGTkJRVk01UkN4SFFVRkhMRTlCUVU5QkxFVkJRVVU0UWl4RlFVRkZkWHBDTEcxQ1FVRnRRbkl4UWl4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eExRVUZMUkN4RlFVRkZMRU5CUVVNc1NVRkJTV3RETEVWQlFVVnNReXhGUVVGRlF5eEhRVUZIYVVNc1JVRkJSWGxDTEV0QlFVc3lSeXhSUVVGUmNFa3NSMEZCUjBFc1JVRkJSU3hEUVVGRFFTeEhRVUZITEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hGUVVGRlFTeEZRVUZGUkN4RlFVRkZSQ3hQUVVGUFJTeEpRVUZKTEVOQlFVTXNTVUZCU1hGQ0xFVkJRVVYwUWl4RlFVRkZReXhIUVVGSExFMUJRVTF4UWl4SlFVRkpla0lzU1VGQlNVRXNSVUZCUlVRc1IwRkJSME1zU1VGQlNVRXNSVUZCUlVVc1QwRkJUMGdzUlVGQlJVY3NUMEZCVHl4SlFVRkpMRWxCUVVsdmVrSXNiVUpCUVcxQ2NERkNMRWRCUVVjc1NVRkJTVzh4UWl4dFFrRkJiVUp5ZWtJc1QwRkJUM2RDTEUxQlFVMHNUMEZCVDNwQ0xFZEJRVWMwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVExFZEJRVWMzZUVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwTXNWMEZCVnl4VFFVRlRNM3BDTEVWQlFVVkRMRWRCUVVjc1QwRkJUeXhIUVVGSFJDeEZRVUZGZFVRc1dVRkJXWFJFTEVWQlFVVXNTVUZCU1RSQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTkZMRk5CUVZNc1UwRkJVelY2UWl4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkZPRUlzUlVGQlJVY3NUMEZCVDBZc1JVRkJSVVVzVDBGQlR5eFBRVUZQTEVkQlFVZHFReXhIUVVGSE9FSXNSVUZCUlN0S0xGRkJRVkU1U2l4RlFVRkZMMElzU1VGQlNVRXNSMEZCUnpKRUxFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTkhMREJDUVVFd1FpeFRRVUZUTjNwQ0xFVkJRVVZETEVkQlFVY3NUMEZCVHl4SFFVRkhORUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTBrc2RVSkJRWFZDTjNwQ0xFVkJRVVZFTEVWQlFVVnZUaXhQUVVGUExFVkJRVVZ1VGl4RlFVRkZSU3hWUVVGVk1FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMHNzZDBKQlFYZENMRk5CUVZNdmVrSXNSVUZCUlVNc1IwRkJSeXhQUVVGUExFZEJRVWMwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFNTeDFRa0ZCZFVJM2VrSXNSVUZCUlVRc1JVRkJSVzlPTEU5QlFVOXdUaXhGUVVGRlJ5eFBRVUZQUml4RlFVRkZSU3hQUVVGUFJpeEZRVUZGUlN4VlFVTTNla0l3UWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFRTeHpRa0ZCYzBJc1UwRkJVMmd3UWl4RlFVRkZReXhIUVVGSExFOUJRVTlFTEVWQlFVVm5kVUlzWlVGQlpTOTBRaXhGUVVGRkszUkNMR1ZCUVdWdWMwSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNMRk5CUVZOcU1FSXNSMEZCUnl4TlFVRk5MR05CUVdOcFJTeExRVUZMYWtVc1NVRkJTVFpDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOUkxFdEJRVXR5ZVVJc1MwRkJTMlVzWTBGQll6RkRMRTlCUVU5VUxGVkJRVlY1TUVJc1MwRkJTeXhUUVVGVGJEQkNMRWRCUVVjc1QwRkJUMEVzUlVGQlJXc3dRaXhSUVVGUkxGTkJRVk5zTUVJc1IwRkJSeXhOUVVGTkxHbERRVUZwUXl0NVFpeExRVUZMTDNsQ0xFZEJRVWNzU1VGQlNUWkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5KTEhWQ1FVRjFRaXhUUVVGVE9YcENMRVZCUVVWRExFZEJRWFZFTEU5QlFYQkVSQ3hGUVVGRlJTeFBRVUZQUml4SFFVRkhaM1ZDTEdkQ1FVRmpMM1JDTEVWQlFVVkRMRTlCUVU5RUxFZEJRVWNyZEVJc1owSkJRVEJDTEVWQlFVVm9kVUlzUjBGQlIwTXNSVUZCUlN4RlFVRkZMRWRCUTNSa05FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMU1zV1VGQldTeFRRVUZUYmpCQ0xFVkJRVVZETEVkQlFVY3NUMEZCVDBRc1JVRkJSWFZNTEZGQlFWRXNaMEpCUVdkQ2RFd3NSVUZCUlN4VFFVRlRMRk5CUXpOR05FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMVVzVjBGQlZ5eFRRVUZUY0RCQ0xFVkJRVVZETEVkQlFVY3NSMEZCUjBFc1JVRkJSVVFzUlVGQlJVRXNSVUZCUlhWTUxGRkJRVkV4U2l4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFZ5eFJRVUZSTEZOQlFWTTViMElzVVVGQlVURktMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5aTEU5QlFVOHNVVUZCVVM5dlFpeFJRVUZSTVVvc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyRXNUMEZCVHl4UlFVRlJhSEJDTEZGQlFWRXhTaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUWXl4VFFVRlRMRlZCUVZWcWNFSXNVVUZCVVRGS0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTmxMR2xDUVVGcFFpeFRRVUZUYkhCQ0xGRkJRVkV4U2l4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFowSXNVMEZCVXl4WlFVRlpMRU5CUVVNc1NVRkJTVGQ1UWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVGFVSXNVVUZCVVRGM1FpeExRVUZMYWtVc1IwRkJSeXhQUVVGUFFTeEhRVUZITEVkQlFVZEJMRVZCUVVVclNpeFJRVUZSTEU5QlFVOHZTaXhGUVVGRlFTeEZRVUZGZFV3c1VVRkJVVEZLTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOWExGRkJRVkVzVjBGQlZ5eEhRVUZIY2pCQ0xFVkJRVVVyU2l4UlFVRlJMRTlCUVU4dlNpeEZRVUZGUVN4RlFVRkZkVXdzVVVGQlVURktMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5aTEU5QlEzWm5RaXhWUVVGVkxFZEJRVWQwTUVJc1JVRkJSU3RLTEZGQlFWRXNUMEZCVHk5S0xFVkJRVVZCTEVWQlFVVjFUQ3hSUVVGUk1Vb3NTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMkVzVDBGQlR5eFZRVUZWTEVkQlFVZDJNRUlzUlVGQlJTdEtMRkZCUVZFc1QwRkJUeTlLTEVWQlFVVkJMRVZCUVVWMVRDeFJRVUZSTVVvc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyTXNVMEZCVXl4WlFVRlpMRWRCUVVkNE1FSXNSVUZCUlN0S0xGRkJRVkVzVDBGQlR5OUtMRVZCUVVWQkxFVkJRVVYxVEN4UlFVRlJNVW9zUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTJVc2FVSkJRV2xDTEZkQlFWY3NSMEZCUjNvd1FpeEZRVUZGSzBvc1VVRkJVU3hSUVVGVkwwb3NSVUZCUlVFc1JVRkJSWFZNTEZGQlFWRXhTaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUWjBJc1UwRkJVeXhUUVVGVExFOUJRVTh4TUVJc1IwRkJSelpDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOWExGRkJRVkVzUzBGQlMzaDVRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUV1N4UFFVRlBMRXRCUVV0NmVVSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMkVzVDBGQlR5eExRVUZMTVhsQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTmpMRk5CUVZNc1MwRkJTek41UWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFpTeHBRa0ZCYVVJc1MwRkROV1UxZVVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUyZENMRk5CUVZNc1VVRkJVVGQ1UWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVGFVSXNVVUZCVVN4alFVRmpPWGxDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOclFpeHBRa0ZCYVVJc1UwRkJVelV3UWl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFV5eFpRVUZaYmpCQ0xFVkJRVVYxVEN4UlFVRlJMRTFCUVUwc1YwRkJWM1JNTEVsQlFVazBRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUTTJZc1UwRkJVeXhUUVVGVEwxUXNSVUZCUlVNc1IwRkJSeXhQUVVGUExFZEJRVWRFTEVWQlFVVXJTaXhSUVVGUk9Vb3NTVUZCU1RSQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTnRRaXgzUWtGQmQwSXNVMEZCVXpjd1FpeEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRNMllzVTBGQlV5OVVMRVZCUVVWbmRVSXNZMEZCWXk5MFFpeEZRVUZGSzNSQ0xHZENRVU5zV1c1elFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRiMElzWjBKQlFXZENMRk5CUVZNNU1FSXNSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlN4RlFVRkZPRUlzUlVGQlJUWkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5STEV0QlFVdG9NRUlzVDBGQlQwWXNTVUZCU1dsQ0xFMUJRVTBzUzBGQlMyaENMRVZCUVVVMFFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRVU3hMUVVGTGFEQkNMRTlCUVU5RUxFbEJRVWxuUWl4TlFVRk5MRXRCUVVzc1NVRkJTU3hKUVVGSk9VTXNSVUZCUlc5RUxFdEJRVXRETEVsQlFVbDRRaXhGUVVGRlJ5eFBRVUZQUml4RlFVRkZSU3hSUVVGUlF5eEZRVUZGTEVWQlFVVXNSMEZCUjJ4RExFZEJRVWRyUXl4RlFVRkZha01zUlVGQlJXbERMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGVEN4RlFVRkZTU3hKUVVGSkxFZEJRVWR6UWl4RlFVRkZla0lzUlVGQlJVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJjVVlzUjBGQmNFWkRMRVZCUVVVc2FVSkJRV2xDTUhsQ0xFdEJRVXN4ZVVJc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVsQlFVbHhRaXhGUVVGRkxHbENRVUZwUW5GNFFpeExRVUZMY25oQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4SlFVRlBMRWRCUVVkeVFpeEZRVUZGTEVkQlFVZEdMRkZCUVZFc1IwRkJSM1ZDTEVWQlFVVXNSMEZCUjNaQ0xFOUJRVThzVFVGQlRXcERMRVZCUVVVc1IwRkJSMjFETEVWQlFVVXNSMEZCUjBZc1QwRkJUeXhGUVVGRk1tVXNVMEZCVTNwbExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVsQlFVbHZUaXhGUVVGRkxFZEJRVWN2VEN4RlFVRkZMRWRCUVVkMlFpeFBRVUZQTEVWQlFVVXlaU3hUUVVGVGNHUXNSVUZCUlN4SFFVRkhMRWxCUVVsNFJDeEZRVUZGTWtRc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUzRkNMR2xDUVVGcFFqY3lRaXhGUVVGRmRWQXNTVUZCU1RWTUxFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTnhRaXhwUWtGQmFVSXNSMEZEYm1oQ01UQkNMRVZCUVVVc1IwRkJSMFlzVDBGQlR5eEhRVUZIZFVJc1JVRkJSU3hIUVVGSGRrSXNVMEZCVXpCQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTnhRaXhwUWtGQmFVSXhNRUlzUlVGQlJTeEhRVUZIY1VJc1JVRkJSU3hKUVVGSmNrSXNSVUZCUlVFc1JVRkJSU3hIUVVGSGNVSXNSVUZCUlVFc1JVRkJSU3hUUVVGVExFZEJRVWQ0UkN4SFFVRkhMRTlCUVU5QkxFZEJRVWN5UkN4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVGNVSXNhVUpCUVdsQ0xGTkJRVk12TUVJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQUkN4RlFVRkZReXhIUVVGSExFVkJRVVZFTEVWQlFVVkRMRVZCUVVVc1JVRkJSU3hIUVVGSE5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVU3hYUVVGWGFqQkNMRXRCUVV0ck1FSXNOa05CUVRaRExFZEJRVWRzTUVJc1MwRkJTMjB3UWl4cFJFRkJhVVJ5ZWtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVYWkpMSGxEUVVGNVF6VnhRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSUnl4cFFrRkJhVUlzTUVKQlFUQkNkSHBDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGMk1VSXNWVUZCVlhkelFpeHBRMEZCWjBNc1JVRkJSM0J4UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUmRqRkNMRlZCUVZWNWMwSXNiMEpCUVc5Q0xGZEJRVmNzVDBGQlQyNXlRaXhMUVVGTGF6QkNMRFpEUVVFMlF6VnpRaXhaUVVOb2JrSjRSeXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSZGpGQ0xGVkJRVlZyZWtJc2VVTkJRWGRETEVWQlFVYzVkMElzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVhZeFFpeFZRVUZWYlhwQ0xHRkJRV0VzVjBGQlZ5eFBRVUZQTDNkQ0xFdEJRVXNyY2tJc1MwRkJTME1zUzBGQlMxVXNTVUZCU1VNc1MwRkJTek56UWl4TFFVRkxZU3hSUVVGUllpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJkakZDTEZWQlFWVTBTU3hUUVVGVExGZEJRVmNzVFVGQlRTeFhRVUZYZEVnc1MwRkJTMnN3UWl3MlEwRkJOa01zVFVGQlRYQjZRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBrc1QwRkJUeXhUUVVGVGJuTkNMRWRCUVVjc1QwRkJUelpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFM1FpeHBRa0ZCYVVKdWVrSXNSMEZCUjNGSkxGbEJRMnhZZUVjc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUZENMR2xDUVVGcFFpeFRRVUZUYm5wQ0xFZEJRVWNzVDBGQlIwRXNZVUZCWVRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZOQlFWTm9NVUlzUlVGQlJUWk1MR05CUVdOb1N5eExRVUZMZVVvc1MwRkJTekJ3UWl4VFFVRlRhREZDTEVWQlFVVnJNVUlzYlVSQlFXMUVjbnBDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGMlNTeDNRMEZCSzBONmMwSXNSVUZCUldreFFpdzRRMEZCTmtOd2VrSXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NlVU5CUVhsRGVGZ3NSVUZCUlN4aFFVRmhOa0lzUzBGQlMzVkhMRTlCUVU5d1NTeEpRVUZWTEhWQ1FVRnpRalpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGMFNTeGhRVUZoTEZOQlFWTXhjMElzUjBGQlJ5eFBRVUZQTmtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVVa3NPRU5CUVRoRGRucENMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhMUVVNemFFSTJRaXhMUVVGTGVVb3NTMEZCU3l0d1FpeDNRa0ZCZDBJc2QwNUJRWGRPZUhwQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRk5MR1ZCUVdVc1UwRkJVM1F4UWl4SFFVRkhMRTlCUVU4MlFpeExRVUZMZVVvc1MwRkJTeXR3UWl4M1FrRkJkMEp3ZUVJc1MwRkJTMnBGTEVsQlFVazJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSVHl4VFFVRlRMRk5CUVZOMk1VSXNSMEZCYzBnc1QwRkJia2hCTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCU3l0d1FpeDNRa0ZCZDBKd2VFSXNTMEZCUzJwRkxFVkJRVVUyUlN4TlFVRk5hRVFzUzBGQlMyOXlRaXhIUVVGSFF5eEpRVUZKUXl4blFrRkJaMEp1ZEVJc1IwRkJSelpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHbENRVUYzUW5SNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTndNVUlzU1VGRE1XcENOa0lzUzBGQlMzbEtMRXRCUVV0cmNVSXNhMEpCUVd0Q0xIZERRVUYzUXpONlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJVeXhaUVVGWkxGTkJRVk42TVVJc1IwRkJaME1zU1VGQlNVTXNSMEZCYWtORUxFVkJRVVZCTEVWQlFVVjFUQ3hSUVVGUkxHRkJRV0VzUzBGQldYTkRMRTFCUVUxb1RTeExRVUZMZVVvc1MwRkJTMnR4UWl4dFFrRkJjVVVzVDBGQmJFUjJNVUlzUlVGQlJVRXNSMEZCUnpSQ0xFdEJRVXQ1U2l4TFFVRkxLM0JDTEhkQ1FVRjNRbkI0UWl4TFFVRkxhRVVzUlVGQlJTeEpRVUZYTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVVa3NPRU5CUVRoRGJqRkNMRVZCUVVWRUxFVkJRVVUyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlJ5eHRRa0ZCYlVKMGVrSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVlVzVjBGQlZ5eFRRVUZUTVRGQ0xFZEJRVzlITEU5QlFXcEhOa0lzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTBjc01FSkJRVEJDTjNwQ0xFVkJRVVVzVlVGQlZVRXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkhMR3RDUVVGNVFuUjZRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSU1N3NFEwRkJPRU53TVVJc1NVRkRlbWxDTmtJc1MwRkJTM2xLTEV0QlFVdHhjVUlzYVVKQlFXbENMSGRGUVVGM1JUbDZRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSV1N4WFFVRlhMRk5CUVZNMU1VSXNSMEZCYTBjc1QwRkJMMFkyUWl4TFFVRkxlVW9zUzBGQlMzRnhRaXhwUWtGQmFVSXhlRUlzUzBGQlN6UjRRaXh0UWtGQmJVSTNNVUlzVFVGQlRVRXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkhMR3RDUVVGNVFuUjZRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSU1N3NFEwRkJPRU53TVVJc1NVRkJTVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGakxIbENRVUY1UWl4VFFVRlRPVEZDTEVkQlFXOUlMRTlCUVdwSU5rSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMGNzTUVKQlFUQkNOM3BDTEVWQlFVVXNNRUpCUVRCQ1FTeEZRVUZGTmtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVVY3NhMEpCUVhsQ2RIcENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZKTERoRFFVRTRRM0F4UWl4SlFVTnlhVUkyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUlpTeG5Ra0ZCWjBJc1UwRkJVeTh4UWl4SFFVRXJSeXhQUVVFMVJ6WkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk5ITERCQ1FVRXdRamQ2UWl4RlFVRkZMSEZDUVVGeFFrRXNSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkhMR3RDUVVGNVFuUjZRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSU1N3NFEwRkJPRU53TVVJc1NVRkJTVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGblFpeFhRVUZYTEZOQlFWTm9Na0lzUjBGQk5ra3NUMEZCTVVrMlFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRSeXd3UWtGQk1FSTNla0lzUlVGQlJTeFRRVUZUTmtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVXbENMRzFDUVVGdFFtb3lRaXhMUVVGTFFTeEZRVUZGTmtJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVVY3NhMEpCUVhsQ2RIcENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZKTERoRFFVRTRRM0F4UWl4SlFVTXZaRFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGcFFpeHRRa0ZCYlVJc1UwRkJVMm95UWl4SFFVRkhMRWxCUVVsRExFVkJRVVZFTEVWQlFVVXJTaXhSUVVGUkxFdEJRWGRFTEVkQlFXNUVMRVZCUVVVNVNpeEpRVUZKUkN4RlFVRkZRU3hGUVVGRmMwUXNWVUZCVlN4RlFVRkZja1FzVFVGQlNVRXNSVUZCUlVRc1JVRkJSVFpPTEUxQlFVMHNaMEpCUVhGQ0xFOUJRVTBzUlVGQlJ5eEhRVUZITEVWQlFVVTFUaXhGUVVGRlJTeFBRVUZQTEU5QlFVMHNSVUZCYjBNc1MwRkJha05JTEVWQlFVVkJMRVZCUVVVMlRpeE5RVUZOTEc5Q1FVRnZRaXhKUVVGVExFOUJRVTBzUlVGQlJ5eEpRVUZKWjI5Q0xHMUNRVUZ0UWpjeFFpeEhRVUZITEUxQlFVMDVRaXhIUVVGSExFOUJRVTBzUlVGQlJ5eE5RVUZOTEhGRFFVRnhReXRHTEV0QlFVdHFSU3hKUVVGSk5rSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVV3RDTEZkQlFWY3NVMEZCVTJ3eVFpeEhRVUZ6Unl4UFFVRnVSelpDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOSExEQkNRVUV3UWpkNlFpeEZRVUZGTEZsQlFWbEJMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJSeXhyUWtGQmVVSjBla0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVrc09FTkJRVGhEY0RGQ0xFbEJRMnhuUWpaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRnRRaXd5UWtGQk1rSXNVMEZCVTI0eVFpeEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJiMElzYzBKQlFYTkNMRzFEUVVGdFEzQXlRaXhGUVVGRlF5eEpRVUZKTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVYRkNMRFJDUVVFMFFpeFRRVUZUY2pKQ0xFVkJRVVZETEVkQlFVY3NUMEZCVHpSQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRnZRaXh6UWtGQmMwSXNaME5CUVdkRGNESkNMRVZCUVVWRExFbEJRVWswUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUmMwSXNlVUpCUVhsQ0xGTkJRVk4wTWtJc1JVRkJSVU1zUjBGQlJ5eFBRVUZQTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVXOUNMSE5DUVVGelFpeDFRMEZCZFVOd01rSXNSVUZCUlVNc1NVRkRjbUkwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUmIwSXNjMEpCUVhOQ0xGTkJRVk53TWtJc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVRSUExFOUJRWGhQT0VJc1JVRkJSVUVzUlVGQlJTdDVRaXhMUVVGTE9YbENMRXRCUVV0RUxFVkJRVVZCTEVWQlFVVXNTVUZCU1N4SlFVRkpPVUlzWVVGQllUSkVMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUU3hEUVVGREwzQkNMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQycDFRaXhKUVVGSlFTeEZRVUZGTmxBc1MwRkJTU3hUUVVGVEwwNHNSMEZCUnl4UFFVRlBOa0lzUzBGQlN6WndRaXhQUVVGUFJTeE5RVUZOVHl4UFFVRlBibk5DTEU5QlFVMHJTaXhSUVVGUkwwb3NTMEZCUzBNc1JVRkJSVFJDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHMUNRVUZ0UW13eFFpeEZRVUZGTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVVY3NhVUpCUVhkQ2RIcENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZKTERoRFFVRTRRMjR4UWl4SlFVRkpORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVhWQ0xIVkNRVUYxUWl4VFFVRlRkakpDTEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEzWjZRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKd1J5eFBRVUZQYm5OQ0xFdEJRelZuUWpaQ0xFdEJRVXQ1U2l4TFFVRkxhM0pDTEd0Q1FVRnJRaXh0UkVGQmJVUXpNRUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVhsQ0xHbENRVUZwUWpVd1FpeExRVUZMZVVvc1MwRkJTMnR5UWl4clFrRkJhMEl6TUVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUQkNMRk5CUVZNc1UwRkJVekV5UWl4SFFVRkhMRTlCUVVkQkxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGbGFERkNMRWRCUVVWQkxFVkJRVVVzYVVKQlFXbENRU3hIUVVGSFFTeEZRVUZGYVhOQ0xHZERRVUZuUTJwelFpeEZRVUZGYTNOQ0xITkNRVUZ6UW1oelFpeFBRVUZQUml4SFFVRkhOa0lzUzBGQlMzbEtMRXRCUVV0cmNrSXNhMEpCUVd0Q2RubENMRXRCUVV0cVJTeExRVUZMUVN4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVjc2EwSkJRWGxDZEhwQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRkpMRGhEUVVFNFEzQXhRaXhMUVVNM1l6WkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkV5UWl4M1FrRkJkMElzVTBGQlV6TXlRaXhGUVVGRlF5eEhRVUZITEU5QlFVZEVMR0ZCUVdFMlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRmxhREZDTEVkQlFVVkJMRVZCUVVVc2FVSkJRV2xDUVN4SFFVRkhRU3hGUVVGRmFYTkNMR2REUVVGblEycHpRaXhGUVVGRmEzTkNMSE5DUVVGelFtaHpRaXhQUVVGUFJpeEhRVUZOUXl4SFFVRkhMRlZCUVZWblJTeExRVUZMYWtVc1MwRkJTME1zUlVGQlJUUkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZUTEZsQlFWbDZNVUlzU1VGQlMydHpRaXgxUWtGQmRVSnNjMElzUlVGQlZVTXNSMEZCUlRSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGVsWXNTMEZCUzNsS0xFdEJRVXRyY2tJc2EwSkJRV3RDZG5sQ0xFdEJRVXRxUlN4SFFVRkhMSGxEUVVGNVEwRXNTMEZCUzBFc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGSExHdENRVUY1UW5SNlFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJTU3c0UTBGQk9FTndNVUlzVFVGRGJHWTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSZGtrc2QwTkJRWGRETEVkQlFVYzFjVUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVVrc09FTkJRVGhETEZOQlFWTndNVUlzUjBGQlJ5eEpRVUZKUXl4RlFVRkZMRWxCUVVrMFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRTRUQ3hQUVVGMFRDOHdRaXhGUVVGRlp6RkNMRFpEUVVFMlEzQjZRaXhMUVVGTGVVb3NTMEZCUzJ0blFpeGhRVUZoUXl4eFEwRkJjVU0xY0VJc1MwRkJTM2xLTEV0QlFVdHJaMElzWVVGQllVTXNjVU5CUVhGRGNGa3NWVUZCVlhKVUxFZEJRVWRCTEVWQlFWTkRMRWRCUVVjMFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJORUlzV1VGQldTOHdRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSU1N3NFEwRkJPRU1zWlVGQlpYWjZRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWTEZkQlFWYzVNVUlzUzBGQlN5c3hRaXdyUTBGQkswTXNSMEZCUnk4eFFpeExRVUZMWnpKQ0xHMUVRVUZ0Ukd3eFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZjRXNzZVVOQlFYbEROWEZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWd00wSXNWVUZCVlhkelFpeHBRMEZCWjBNc1JVRkJSM0J4UWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVmNFc3NkME5CUVhkRExFZEJRekY0UWpWeFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZia3NzWVVGQllTeFRRVUZUTVhOQ0xFZEJRV2xETEU5QlFVY3NTMEZCYWtOQkxFVkJRVVUyUWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxUExFOUJRVTl1YzBJc1NVRkJXVWNzVDBGQll6QkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlY0U3l4UFFVRk5lSEZDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwVXNVMEZCVXpWNlFpeEZRVUZGTEV0QlFVc3NPRU5CUVRoRFFTeEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5NlZpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRNMllzVTBGQlV5OVVMRVZCUVVVc1MwRkJTeXhyUmtGQmEwWkJMRWRCUVZVMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZSeXhuUkVGQlowUm9NMElzUzBGREwySTJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWY0ROQ0xGVkJRVlY1YzBJc2IwSkJRVzlDTEZkQlFWY3NUMEZCVDI1eVFpeExRVUZMS3pGQ0xHZEVRVUZuUkdveFFpeExRVUZMWVN4UlFVRlJZaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWY0ROQ0xGVkJRVlUwU1N4VFFVRlRMRmRCUVZjc1RVRkJUU3hoUVVGaGRFZ3NTMEZCU3lzeFFpd3JRMEZCSzBNc1RVRkRMMUJxTVVJc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZURkxMRTlCUVU4c1UwRkJVMjV6UWl4SFFVRkhMRTlCUVVkQkxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhYUVVGWE56SkNMRVZCUVVVMlRDeGpRVUZqYUVzc1MwRkJTM2xLTEV0QlFVdDFja0lzVjBGQlZ6Y3lRaXhGUVVGRkt6SkNMSEZFUVVGeFJHd3hRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWY0Vzc2QwTkJRU3REZW5OQ0xFVkJRVVU0TWtJc1owUkJRU3REYWpGQ0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExESkRRVUV5UTNoWUxFVkJRVVVzWVVGQllUWkNMRXRCUVV0MVJ5eFBRVUZQY0Vrc1NVRkJWU3g1UWtGQmQwSTJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWUnl4blJFRkJaMFFzVTBGQlUyZ3pRaXhIUVVGSExFOUJRVTBzU1VGQlN6WkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGZEJRVmMzU2l4elEwRkJjME5vZEVJc1NVRkROV2xDTmtJc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZYQXpRaXhWUVVGVmRYUkNMSE5EUVVGelF5eFRRVUZUYUhSQ0xFZEJRWGxFTEU5QlFYUkVaU3hMUVVGTEt6RkNMQ3REUVVFclF6a3lRaXhGUVVGVFpTeE5RVUZOWXl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVmVFc3NUVUZCVFhoeFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZSeXhuUkVGQlowUXNTVUZCU1c0eFFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZNVUlzYVVKQlFXbENMRmxCUXpGU2RIcENMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlV4TTBJc1QwRkJUeXhUUVVGVFlTeEhRVUZITEVsQlFWTTVRaXhGUVVGTUswSXNSVUZCUlN4SFFVRkxMRWxCUVVrdlFpeExRVUZMT0VJc1JVRkJSU3hEUVVGRExFbEJRVWtzYlVKQlFXMUNhVVVzUzBGQlN5OUdMRWRCUVVjc1RVRkJUV2RHTEUxQlFVMHNkME5CUVhkRGFFWXNSMEZCUnl4SlFVRkpReXhGUVVGRk5rSXNSVUZCUlRsQ0xFZEJRVWNzVFVGQlRVTXNTVUZCTWtrNFFpeEhRVUZITDBJc1JVRkJSU3hMUVVFMVNVTXNSVUZCUlRCRUxFdEJRVXN5Unl4UlFVRlJja3NzUjBGQlJ6QkVMRXRCUVV0M1dpeE5RVUZOZEU0c1NVRkJTVFZRTEVWQlFVVXdSQ3hMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWU1N4M1FrRkJkMEl4ZGtJc1MwRkJTeXhMUVVGTE1VWXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVWtzZFVKQlFYVkNPVFJDTEVsQlFXTXNTMEZCU3l4UFFVRlBPRUlzUlVGQlJUUkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZITEdkRVFVRm5SQzh5UWl4SFFVRkhORUlzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlhoTExFOUJRM0JoZUhGQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVkpMSFZDUVVGMVFpeFRRVUZUYWpOQ0xFZEJRVWNzUjBGQlIwRXNZVUZCWVRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRXNUVUZCVFN4UlFVRlJibnBDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFM1NTeFBRVUZQYm5OQ0xFZEJRVWQxVEN4UlFVRlJMRXRCUVVzc1QwRkJUMEVzVVVGQlVTeFRRVUZUTEZGQlFWRXNTMEZCT0Vnc1IwRkJla2gyVEN4RlFVRkZRU3hoUVVGaE5rSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5MM0JDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SFFVRkhOa0lzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlVzc05rSkJRVFpDYUROQ0xFOUJRVTlHTEVsQlFVOHNVVUZCVVdsRkxFdEJRVXRxUlN4SFFVRkhMRTFCUVUwc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlJTeGxRVUZsTEhWRFFVRjFReXhEUVVGREwxY3NTVUZCU1N4UFFVRlBRU3hIUVVNeFdqWkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZMTERaQ1FVRTJRaXhUUVVGVGJETkNMRWRCUVVjc1NVRkJTVU1zUlVGQlJVUXNSVUZCUlhWTUxGRkJRVkV4U2l4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlRTeGpRVUZqTEUxQlFVMDFja0lzVVVGQlVURktMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZOTEdOQlFXTXNUVUZCVFRWeVFpeFJRVUZSTVVvc1MwRkJTM2xLTEV0QlFVdDFja0lzVlVGQlZVOHNVVUZCVVN4UFFVRlBMRTlCUVVkMk1VSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVkVzVlVGQlZYQjZRaXhMUVVGTGFFVXNSMEZCVHpSQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVlRMRmxCUVZseWVrSXNTMEZCUzJwRkxFbEJRVlUyUWl4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4NVEwRkJlVU40V0N4SFFVRkhOa0lzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlRGQ0xHdENRVUZ4UW5SNlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZWU3h0UWtGQmJVSjJNMElzUjBGRE9WazJRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWVnl3eVFrRkJNa0o0TTBJc1IwRkJjVlkyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVldTeGhRVUZoZWpOQ0xFbEJRVFZYTmtJc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc1owZEJRV2RIZUZnc1IwRkJSelpDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZVeFFpeHRRa0ZFYzA1MGVrSXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NLME5CUTNSa2VGZ3NSMEZCUnpaQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVXhRaXh0UWtGQmIxQjBla0lzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzTkVKQlFUUkNNMVlzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVldFc2NVSkJRWEZDTEN0Q1FVRXJRakV6UWl4SFFVRkhOa0lzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlRGQ0xHMUNRVU40V25SNlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZWU3h0UWtGQmJVSXNVMEZCVTNZelFpeEhRVUZITEVsQlFVa3NTVUZCU1VNc1IwRkJSU3hGUVVGSEwwSXNSMEZCUlN4RlFVRkhReXhGUVVGRkxFVkJRVVZCTEVWQlFVVTJRaXhGUVVGRlJ5eFBRVUZQYUVNc1NVRkJTU3hEUVVGRExFbEJRVWxwUXl4RlFVRkZTaXhGUVVGRkswc3NUMEZCVHpWTkxFZEJRVWNzUzBGQlMybERMRWRCUVVkc1F5eEZRVUZGSzBJc1IwRkJSMEVzUlVGQlJTeExRVUZMUnl4SFFVRkhTQ3hKUVVGSkwwSXNSMEZCUjBFc1IwRkJSeXhQUVVGUEswSXNSMEZCUnk5Q0xFZEJRVWN5UkN4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlZ5d3lRa0ZCTWtJc1UwRkJVM2d6UWl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUjBGQlJTeEZRVUZITDBJc1JVRkJSU3hyUWtGQmEwSkRMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpMRU5CUVVNc1NVRkJTV2xETEVWQlFVVktMRVZCUVVVclN5eFBRVUZQTlUwc1IwRkJSeXhIUVVGSExFdEJRVXRwUXl4RlFVRkZMRU5CUVVNc1IwRkJSMGdzUlVGQlJTeFBRVUZOTEVWQlFVZEJMRWRCUVVVc1QwRkJVU3hIUVVGSExFdEJRVXRITEVWQlFVVXNRMEZCUXl4SlFVRkpTQ3hGUVVGRkxFOUJRVTBzUlVGQlIwRXNSMEZCUlN4UFFVRlJMRWxCUVVsQkxFbEJRVWt2UWl4RlFVRkZLMFlzUzBGQlN6ZEVMRWRCUVVjc1QwRkJUU3hGUVVGSExFOUJRVTlJTEVkQlFVYzBRaXhMUVVGTGVVb3NTMEZCUzNWeVFpeFZRVUZWWVN4eFFrRkJjVUlzSzBKQlEyaGlOekZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWUkxGVkJRVlVzU1VGQlNTOHhRaXhQUVVGUExFbEJRVWxQTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWaExIRkNRVUZ4UWl4TlFVRk5OekZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWUExGRkJRVkVzYlVaQlFXMUdkakZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWTkxHTkJRV01zTkVoQlFUUklkREZDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWVExGbEJRVmtzVDBGRGVsbDZNVUlzUzBGQlMzbEtMRXRCUVV0MWNrSXNWVUZCVlZrc1lVRkJZU3hUUVVGVGVqTkNMRWRCUVVjc1QwRkJUMEVzUlVGQlJYVk1MRkZCUVZFeFNpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZUeXhUUVVGUkxGTkJRVk53TTBJc1JVRkJSVGxDTEVWQlFVVkRMRVZCUVVWcFF5eEhRVUZITEVsQlFVbElMRVZCUVVVc1IwRkJjVWdzVDBGQmJFZzVRaXhGUVVGRlFTeEZRVUZGYjA0c1VVRkJVU3hyUWtGQmFVSXNVMEZCVTNaTUxFVkJRVVU1UWl4RlFVRkZReXhIUVVGUExFOUJRVW80UWl4RlFVRkZMMElzUlVGQlUwTXNTMEZCU1RaQ0xFVkJRVVUyUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1FSXNVMEZCVTNZMFFpeEhRVUZISzNSQ0xITkNRVUUyUW1oMVFpeEZRVUZGSzBJc1JVRkJSVVFzUlVGQlJVTXNSVUZCUlVjc1RVRkJTM2xDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZWeWJrSXNUMEZCVHl4VFFVRlRlRkFzUjBGQlJ5eEpRVUZKUXl4RlFVRkZMRWRCUVVjdlFpeEZRVUZGTEZOQlFWTTRRaXhIUVVGSE5rSXNTMEZCU3pKSExGRkJRVkY0U1N4SFFVRkhOa0lzUzBGQlMzZGFMRTFCUVUwM1NDeFJRVUZSZUZRc1JVRkJSVGxDTEVkQlFVY3JRaXhIUVVGSE5FSXNTMEZCUzNsS0xFdEJRVXQxY2tJc1ZVRkJWVEZMTEU5QlFVOXVjMElzU1VGQmIwTXNUMEZCYUVNMlFpeExRVUZMZDFvc1RVRkJUVGRJTEZGQlFWRTVTaXhWUVVGVmVFd3NSMEZCVlN0Q0xFVkJRVVUwUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVlJ5eG5SRUZCWjBRdk1rSXNSMEZCUnpSQ0xFdEJRVXQ1U2l4TFFVRkxkWEpDTEZWQlFWVjRTeXhQUVVGUGVIRkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHVkJRV1VzVjBGQlZ6VXlRaXhMUVVGTE5qSkNMRzlFUVVGdlJDeEhRVUZITnpKQ0xFdEJRVXM0TWtJc2VVUkJRWGxFYURKQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVnNUQ3g1UTBGQmVVTTFjVUlzUzBGQlMzbEtMRXRCUVV0eGMwSXNaVUZCWld3MFFpeFZRVUZWZDNOQ0xHbERRVUZuUXl4RlFVRkhjSEZDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR1ZCUVdWc1RDeDNRMEZCZDBNc1IwRkRjak5DTlhGQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVkhMRmRCUVZjc1UwRkJVemt6UWl4RlFVRkZReXhIUVVGSExFZEJRVWMwUWl4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVE0yWXNVMEZCVXk5VUxFVkJRVVVzUzBGQlN5eE5RVUZOYTBRc1RVRkJUU3h4UTBGQmNVTnNSQ3hIUVVGSExFbEJRVWs1UWl4RlFVRkZPRUlzUlVGQlJYVk1MRkZCUVZFc2QwTkJRWGRETEVsQlFVa3NTVUZCU1N4eFEwRkJjVU4wU0N4TFFVRkxMMFlzUjBGQlJ5eE5RVUZOWjBZc1RVRkJUU3d5UlVGQk1rVnNSQ3hIUVVGSExFbEJRVWsyUWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbFNTeHhRa0ZCY1VJM05VSXNSMEZCUnl4TlFVRk5aMFlzVFVGQlRTeG5SRUZCWjBSc1JDeEhRVU4wV1N4UFFVUjVXVU1zWVVGQllUUkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGbEJRVmsxTWtJc1JVRkJSVFJDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZVeE0wSXNUMEZCVDJNc1NVRkRlbWRDUkN4RlFVRkZRU3hGUVVGRkxFbEJRVWsyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhWUVVGVk1Vc3NUMEZCVDJ4elFpeEhRVUZIYzB3c1VVRkJVU3hMUVVGTExGTkJRVk1zU1VGQlZ6RktMRXRCUVV0NVNpeExRVUZMY1hOQ0xHVkJRV1ZMTEhGRVFVRnhSR2cwUWl4SlFVRkpOa0lzUzBGQlMzbEtMRXRCUVV0eGMwSXNaVUZCWlVrc2NVSkJRWEZDTEZOQlFWTXZNMElzUjBGQlJ5eEpRVUZKTEVsQlFVbERMRVZCUVVVc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeExRVUZMTDBJc1JVRkJSU3hIUVVGSFF5eEZRVUZGTEVWQlFVVkJMRVZCUVVVMlFpeEZRVUZGUnl4UFFVRlBhRU1zU1VGQlNTeERRVUZETEVsQlFVbHBReXhGUVVGRlNpeEZRVUZGTjBJc1IwRkJSeXhIUVVGSE9FSXNSVUZCUlVjc1IwRkJSMnhETEVWQlFVVXJUQ3hMUVVGTGFFc3NSVUZCUlVjc1UwRkJVeXhIUVVGSGVVSXNTMEZCUzNSRExFOUJRVTkzVlN4VFFVRlRPVlFzUlVGQlJVY3NTVUZCU1d4RExFVkJRVVVyTlVJc1QwRkJUemN6UWl4RlFVRkZMRTlCUVUwc1JVRkJSeXhQUVVGUExFZEJRVWRzUXl4RlFVRkZhVU1zVVVGRE0xY3dRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsYm05Q0xFOUJRVThzVTBGQlUzaFFMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeEhRVUZITDBJc1JVRkJSU3hUUVVGVE9FSXNSMEZCUnpaQ0xFdEJRVXN5Unl4UlFVRlJlRWtzUjBGQlJ6WkNMRXRCUVV0M1dpeE5RVUZOTjBnc1VVRkJVWGhVTEVWQlFVVTVRaXhIUVVGSEswSXNSMEZCUnpSQ0xFdEJRVXQ1U2l4TFFVRkxjWE5DTEdWQlFXVjRUQ3hQUVVGUGJuTkNMRWxCUVc5RExFOUJRV2hETmtJc1MwRkJTM2RhTEUxQlFVMDNTQ3hSUVVGUk9Vb3NWVUZCVlhoTUxFZEJRVlV5UkN4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbFN5eHhSRUZCY1VRdk0wSXNTVUZEZGxFMFFpeExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxha3dzWVVGQllTeFRRVUZUTVhOQ0xFZEJRV2xETEU5QlFVY3NTMEZCYWtOQkxFVkJRVVUyUWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxUExFOUJRVTl1YzBJc1NVRkJXVWNzVDBGQll6QkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHVkJRV1YwVEN4UFFVRk5lSEZDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSZWxZc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlV6Tm1MRk5CUVZNdlZDeEZRVUZGTEV0QlFVc3NhMFJCUVd0RVFTeEhRVUZWTmtJc1MwRkJTM2xLTEV0QlFVdHhjMElzWlVGQlpVc3NjVVJCUVhGRWFEUkNMRXRCUVVrMlFpeExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxiRFJDTEZWQlFWVjVjMElzYjBKQlFXOUNMRmRCUVZjc1QwRkJUMjV5UWl4TFFVRkxOakpDTEhGRVFVTTFXaTh4UWl4TFFVRkxZU3hSUVVGUllpeExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxiRFJDTEZWQlFWVTBTU3hUUVVGVExGZEJRVmNzVFVGQlRTeHJRa0ZCYTBKMFNDeExRVUZMTmpKQ0xHOUVRVUZ2UkN4TlFVTnlTaTh4UWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGVFd3NUMEZCVHl4VFFVRlRibk5DTEVkQlFVY3NUMEZCUjBFc1lVRkJZVFpDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR2RDUVVGblFqTXpRaXhGUVVGRk5rd3NZMEZCWTJoTExFdEJRVXQ1U2l4TFFVRkxjWE5DTEdkQ1FVRm5Rak16UWl4RlFVRkZOak5DTERKRVFVRXlSR2d5UWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbGJFd3NkME5CUVN0RGVuTkNMRVZCUVVVME0wSXNjVVJCUVc5RUx6RkNMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMR2RFUVVGblJIaFlMRVZCUVVVc1lVRkJZVFpDTEV0QlFVdDFSeXhQUVVGUGNFa3NTVUZCVlN3NFFrRkRiR0UyUWl4TFFVRkxlVW9zUzBGQlMzRnpRaXhsUVVGbFN5eHhSRUZCY1VRc1UwRkJVMmcwUWl4SFFVRkhMRTlCUVUwc1NVRkJTelpDTEV0QlFVdDVTaXhMUVVGTGNYTkNMR2RDUVVGblFqTkxMSE5EUVVGelEyaDBRaXhKUVVGSk5rSXNTMEZCUzNsS0xFdEJRVXR4YzBJc1pVRkJaV3cwUWl4VlFVRlZkWFJDTEhORFFVRnpReXhUUVVGVGFIUkNMRWRCUVRoRUxFOUJRVE5FWlN4TFFVRkxOakpDTEc5RVFVRnZSRFV6UWl4RlFVRlRaU3hOUVVGTll5eExRVUZMZVVvc1MwRkJTM0Z6UWl4bFFVRmxkRXdzVFVGQlRYaHhRaXhMUVVGTGVVb3NTMEZCUzNGelFpeGxRVUZsU3l4eFJFRkJjVVFzU1VGQlNXNHlRaXhMUVVGTGNUSkNMRXRCUVVzc1IwRkJSM0l5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTeEhRVUZITDB3c1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlN5eEhRVUZIZERKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdERMREJDUVVFd1FpeFhRVUZYTEVsQlFVbHdORUlzUlVGQlJUWkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRGTEdkQ1FVRm5RaXhQUVVGUGNqUkNMRWxCUVVsQkxFVkJRVVZCTEVWQlFVVTBUaXhYUVVGWE5VNHNSVUZCUlN4SlFVRkpOa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzBVc1kwRkJZeXhYUVVGWExFOUJRVTk0TWtJc1MwRkJTMllzVDBGQlR6Wk5MRmRCUVZjNVRDeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxSeXhYUVVGWGVqSkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRETERSQ1FVRTBRbll5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFNTeGhRVUZoTEZOQlFWTjJORUlzUjBGQlJ6WkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRITEZkQlFWZDBORUlzUjBGQlJ6WkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRETERaQ1FVTXZOVUoyTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwc3NZVUZCWVN4WFFVRlhMRTlCUVU4ek1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMGNzV1VGQldYb3lRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRk5CUVZONk5FSXNSMEZCUnl4SlFVRkpReXhGUVVGRk5FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMHNzWlVGQlpTeFBRVUZQTXpKQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTXpaaXhUUVVGVE9WUXNSVUZCUlVRc1NVRkJTVFpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0UExIbENRVUY1UWl4VFFVRlRNVFJDTEVkQlFVY3NTVUZCU1VNc1JVRkJSVFJDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TExHVkJRV1VzVDBGQlR6TXlRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUYlVJc2QwSkJRWGRDTlRCQ0xFVkJRVVZFTEVsQlF6VlpOa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzFFc2NVSkJRWEZDTEZOQlFWTXpORUlzUjBGQlJ5eEpRVUZKTEVsQlFXOUVOMElzUlVGQmFFUTRRaXhGUVVGRkxIbERRVUY1UXk5Q0xFVkJRVVVzUjBGQlMwTXNSVUZCUlRoQ0xFVkJRVVU0ZVVJc1MwRkJTeTk1UWl4SlFVRkpPVUlzUlVGQlJTdE1MRXRCUVVzc1EwRkJRemxNTEVWQlFVVXNSMEZCUjBFc1JVRkJSU3hIUVVGSFFTeEZRVUZGTEZOQlFVa3NTVUZCVXl4UFFVRlBSQ3hIUVVGSE1rUXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVU3hIUVVGSEx6SkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZETEZsQlFWa3NWMEZCVnl4UFFVRlBhRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVlVGQlZUVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSUlN4VFFVRlRMRmRCUVZjc1QwRkJUMm96UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEZsQlFWazFNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hUUVVGVE5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZITEdWQlFXVXNWMEZCVnl4UFFVRlBiRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVTBGQlV6VXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSU1N4dFFrRkJiVUlzVjBGQlZ5eFBRVUZQYmpOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1UwRkRNWEZDTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRkxMRzlDUVVGdlFpeFhRVUZYTEU5QlFVOXdNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hSUVVGUk5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZOTEdOQlFXTXNWMEZCVnl4UFFVRlBjak5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzV1VGQldUVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRlZCUXpGUk5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZQTEdGQlFXRXNWMEZCVnl4UFFVRlBkRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzWVVGQllUVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSVVN4blFrRkJaMEoyTTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVWTXNaVUZCWlhnelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJReXhsUVVGbGFETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZITEd0Q1FVRnJRbXd6UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUlNTeHpRa0ZCYzBKdU0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVXNzZFVKQlFYVkNjRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGTkxHbENRVUZwUW5JelFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJWU3hWUVVGVmVqTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNZVUZEYUdkQ05USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZUTEZsQlFWa3NWMEZCVnl4UFFVRlBlRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVlVGQlZUVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSVnl4cFFrRkJhVUlzVjBGQlZ5eFBRVUZQTVROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1UwRkJVelV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFRTeGxRVUZsTEdGQlFXRTFNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVU4c2FVSkJRV2xDZEROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlJMR2xDUVVGcFFuWXpRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSVXl4blFrRkJaMEo0TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVMHNhVUpCUVdsQ2NqTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNaMEpCUXpWbE5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZSTEdGQlFXRXNWMEZCVnl4UFFVRlBkak5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzVjBGQlZ6VXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRmxCUVZrMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVWNzYTBKQlFXdENiRE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGWkxIRkNRVUZ4UWl4WFFVRlhMRTlCUVU4ek0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeGpRVUZqTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRmhMRmxCUVZrMU0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV01zWVVGQllUY3pRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSWlN4WFFVRlhPVE5DTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGVkxGZEJRemRrZWpOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRmxMRkZCUVZFNU0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVU1zV1VGQldXZ3pRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSWjBJc1MwRkJTeTh6UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUlJTeFRRVUZUYWpOQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRnBRaXhQUVVGUGFEUkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZITEdWQlFXVnNNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVd0Q0xHVkJRV1ZxTkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVa3NiVUpCUVcxQ2JqTkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZ0UWl4blFrRkJaMEpzTkVJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVVc3NiMEpCUVc5Q2NETkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZqTEZWQlFWVTNNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVUwc1kwRkRlR1J5TTBJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXOUNMRk5CUVZOdU5FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVThzWVVGQllYUXpRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSY1VJc1VVRkJVWEEwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUlV5eFpRVUZaZUROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRnpRaXhoUVVGaGNqUkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkZYTEdsQ1FVRnBRakV6UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUllTeFRRVUZUTlROQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRlJMR0ZCUVdGMk0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVWFZDTEdsQ1FVRnBRblEwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUldTeHhRa0ZCY1VJek0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVVlVzVDBGQlR5eFhRVUZYTEU5QlFVOTZNMElzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hUUVVONlpqVXlRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSZDBJc1YwRkJWeXhYUVVGWExGTkJRVk53TmtJc1JVRkJSVUVzUjBGQk1FSXNUMEZCZGtKQkxFVkJRVVUyUWl4TFFVRkxkMW9zVFVGQlRWTXNTMEZCU3psaUxFVkJRVVUzUWl4SFFVRlZSQ3hGUVVGRk9FSXNTVUZCU1N4SFFVRkhMRWxCUVVsRExFVkJRVVUwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFN5eGxRVUZsTEVkQlFVY3pNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVdkQ0xFOUJRVThzVDBGQlR5OHpRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVldkeVFpeFJRVUZSZVVJc1kwRkJZM0EyUWl4SFFVRkhRU3hGUVVGRk5FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMUVzY1VKQlFYRkNNVFJDTEVkQlFVY3NTVUZCU1M5Q0xFVkJRVVVzUjBGQlJ6SkVMRXRCUVV0M1dpeE5RVUZOTjBnc1VVRkJVWFpVTEVkQlFVVXNVMEZCVTBRc1IwRkJSemxDTEVWQlFVVTRRaXhGUVVGRkxFbEJRVWxCTEVWQlFVVXNUVUZCU3l4SlFVRkpOMElzUlVGQlJUQkVMRXRCUVV0dFNTeFJRVUZSYmtrc1MwRkJTM1JETEU5QlFVODJWU3haUVVGWmJGY3NSMEZCUnl4UFFVRlBNa1FzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVdVc1ZVRkJWVE0xUWl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hWUVVGVk5rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV2xDTEZOQlFWTTNOVUlzUlVGQlJTeERRVUZETEZOQlEzSm1Oa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVd0Q0xHbENRVUZwUWprMVFpeEZRVUZGTEVOQlFVTXNVVUZCVVRaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRmhMRmRCUVZkNk5VSXNSVUZCUlN4RFFVRkRMRk5CUVZNc1YwRkJWME1zUlVGQlJVRXNSVUZCUlN4TFFVRkxRU3hGUVVGRkxFbEJRVWtzU1VGQlNUUkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWWjNKQ0xGRkJRVkV3UWl4clFrRkJhMElzVTBGQlUzUTJRaXhIUVVGSExFOUJRVThzUjBGQlJ6WkNMRXRCUVVzMmNFSXNUMEZCVDJkSkxGTkJRVk52UWl4blFrRkJaMEpxZWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVYZENMR0ZCUVdGd05rSXNTVUZETTFJMlFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWV2R5UWl4UlFVRlJlVUlzWTBGQll5eFRRVUZUY2paQ0xFZEJRVWNzU1VGQlNVTXNSVUZCUlN4cFFrRkJhVUk0ZVVJc1MwRkJTeTk1UWl4SFFVRkhMRWRCUVVkRExFZEJRVWRCTEVWQlFVVXNSMEZCUnl4UFFVRlBRU3hGUVVGRkxFZEJRVWRCTEVWQlFVVXNSMEZCUnl4SlFVRkpMMElzUlVGQlJTeHJRa0ZCYTBJMk1FSXNTMEZCU3k5NVFpeEhRVUZITEVkQlFVYzVRaXhIUVVGSFFTeEZRVUZGTEVkQlFVY3NSMEZCUnpoQ0xFVkJRVVVzYlVKQlFXMUNLM2xDTEV0QlFVc3ZlVUlzUjBGQlJ5eFBRVUZQT1VJc1JVRkJSU3hIUVVGSExFZEJRVWM0UWl4SFFVRkhRU3hGUVVGRkxFZEJRVWNzVDBGQlQwRXNSVUZCUlN4SlFVRkpMRWxCUVVzc1RVRkJUVU1zUlVGQlJTeE5RVUZOTEUxQlFVMHNTVUZCU3l4TlFVRk5RU3hGUVVGRkxFMUJRVTBzVFVGQlRTeEpRVUZMTEUxQlFVMUJMRVZCUVVVc1QwRkJUeXhOUVVGTkxFbEJRVXNzVFVGQlRVRXNSVUZCUlN4WlFVRlpRU3hGUVVGRkxGZEJRVmRCTEVWQlFVVXZRaXhGUVVGRkxFZEJRVWNzVDBGQlR5dENMRWRCUVVjMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRMRmRCUVZkNE5VSXNTMEZCUzNrMVFpdzRRMEZCT0VNc1IwRkJSM28xUWl4TFFVRkxNRFZDTEd0RVFVRnJSRFUwUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVE9VNHNkME5CUVhkRE1YSkNMRXRCUVVzeU5VSXNTMEZCU3l4TlFVRk5OelJDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZNNU5rSXNWVUZCVld0NlFpeDVRMEZCZDBNc1JVRkJSemwzUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVE9UWkNMRlZCUVZWdGVrSXNZVUZCWVN4WFFVRlhMRTlCUVU4M2VFSXNTMEZCU3pJMVFpeE5RVUZOTnpSQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTTVOa0lzVlVGQlZYZHpRaXhwUTBGQlowTXNSVUZCUjNCeFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRPVFpDTEZWQlFWVjVjMElzYjBKQlFXOUNMRmRCUVZjc1QwRkJUMjV5UWl4TFFVRkxlVFZDTERoRFFVRTRRMjU1UWl4WlFVTTVNMEo0Unl4TFFVRkxZU3hSUVVGUllpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRPVFpDTEZWQlFWVTBTU3hUUVVGVExGZEJRVmNzVFVGQlRTeFpRVUZaZEVnc1MwRkJTM2sxUWl3NFEwRkJPRU1zVFVGQlRUTTBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUY0U4c1QwRkJUeXhUUVVGVGJuTkNMRWRCUVVjc1QwRkJUelpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOSkxHdENRVUZyUWpNMlFpeEhRVUZIY1Vrc1dVRkRPVTU0Unl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFNTeHJRa0ZCYTBJc1UwRkJVek0yUWl4SFFVRkhMRTlCUVVkQkxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhWUVVGVmRqWkNMRVZCUVVVMlRDeGpRVUZqYUVzc1MwRkJTM2xLTEV0QlFVdHBka0lzVlVGQlZYWTJRaXhGUVVGRmVUWkNMRzlFUVVGdlJEVTBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUT1U0c2QwTkJRU3REZW5OQ0xFVkJRVVYzTmtJc0swTkJRVGhETXpSQ0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExEQkRRVUV3UTNoWUxFVkJRVVVzWVVGQllUWkNMRXRCUVV0MVJ5eFBRVUZQY0Vrc1NVRkJWU3gzUWtGRGJGazJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYmtjc1YwRkJWeXhUUVVGVGNEQkNMRWRCUVVjc1IwRkJSMEVzWVVGQllUWkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk1zVDBGQlQzWTJRaXhGUVVGRkxFbEJRVWxETEVWQlFVVXNhVUpCUVdsQ1JDeEZRVUZGT1VJc1JVRkJSU3hMUVVGcFNpeFBRVUUxU1N0Q0xFZEJRVWRFTEVWQlFVVXllVUlzTUVOQlFUQkRlakJDTEVWQlFVVTRRaXhGUVVGRk5IbENMR2RDUVVGblFqVjVRaXhGUVVGRlF5eEhRVUZIUkN4RlFVRkZhWE5DTEdkRFFVRm5RMnB6UWl4RlFVRkZhM05DTEhOQ1FVRnpRbWh6UWl4UFFVRlBSaXhIUVVGVk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMHNzSzBOQlFTdERMelJDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOVkxGZEJRVmR3TUVJc1IwRkJSemxDTEVsQlF6bFhNa1FzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTAwc05rSkJRVFpDTEZOQlFWTTNOa0lzUjBGQlJ5eFBRVUZIUVN4aFFVRmhOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCWjBKMk5rSXNSMEZCUlVFc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOdVJ5eFhRVUZYY0RCQ0xFZEJRVlUyUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFN5d3JRMEZCSzBNdk5FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMU1zV1VGQldYUjVRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUY0U4c1QwRkJUMjV6UWl4SlFVRkpRU3hGUVVGRk5IbENMR3RDUVVOeVVpOTNRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUVHl4elEwRkJjME1zVTBGQlV6azJRaXhIUVVGSExFOUJRVWRCTEdGQlFXRTJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZuUW5ZMlFpeEhRVUZGUVN4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTI1SExGZEJRVmR3TUVJc1IwRkJWVFpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOTExDdERRVUVyUXk4MFFpeExRVUZMTm5CQ0xFOUJRVTluU1N4VFFVRlRhMElzYVVKQlFXbENMM2xDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOd1R5eFBRVUZQYm5OQ0xFbEJRVWxCTEVWQlFVVTBlVUlzYTBKQlFXbENMM2RDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOdVR5eExRVUZMZG5GQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTnVSeXhYUVVGWGRubENMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5STEc5Q1FVRnZRaXhyUWtGRGFscHNOVUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTFNc1owSkJRV2RDTEVOQlFVTkRMRkZCUVU4c1JVRkJSME1zVFVGQlN5eEZRVUZIUXl4TlFVRkxMRVZCUVVkRExGbEJRVmNzUlVGQlIwTXNUVUZCU3l4RlFVRkhReXhWUVVGVExFVkJRVWRETEZGQlFVOHNSVUZCUjNCMVFpeExRVUZKTEVkQlFVbDBUQ3hMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYVVJc2RVSkJRWFZDTEVOQlFVTm9XaXhSUVVGUExFVkJRVWROTEUxQlFVc3NSVUZCUnpaQ0xFOUJRVTBzUlVGQlIzRkNMRkZCUVU4c1JVRkJSMVVzVFVGQlN5eEZRVUZIU1N4TlFVRkxMRVZCUVVkSExFMUJRVXNzUlVGQlIwc3NVVUZCVHl4RlFVRkhhVUlzVVVGQlR5eEZRVUZIVVN4UFFVRk5MRVZCUVVkSkxFdEJRVWtzUlVGQlIwa3NWVUZCVXl4SFFVRkpNVzVDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOd04wSXNUMEZCVHl4VFFVRlRZU3hGUVVGRlF5eEZRVUZGTDBJc1IwRkJLME1zVDBGQk5VTXlSQ3hMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYTBJc1kwRkJZM1kzUWl4UFFVRlBSaXhKUVVGWE5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMjFDTEd0RVFVRnJSSGczUWl4UFFVRlBSaXhIUVVGSFF5eEZRVUZGTDBJc1NVRkRlbUl5UkN4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGEwSXNZMEZCWXl4VFFVRlRlamRDTEVkQlFVY3NTVUZCU1RaQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTlJMRzlDUVVGdlFqa3lRaXhMUVVGTGFrVXNSMEZCUnl4TlFVRk5hMFFzVFVGQlRTeHhRa0ZCY1VKc1JDeEZRVUZGTEUxQlFVMHNSMEZCUjBFc1JVRkJSVEkzUWl4blFrRkJaMEk1TlVJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUybENMSFZDUVVGMVFpeE5RVUZOZERSQ0xFMUJRVTBzWVVGQllXeEVMRVZCUVVVc2JVTkJRMjVQTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUzRkNMR0ZCUVdFc1UwRkJVelUzUWl4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJSelpDTEVkQlFVYzJRaXhMUVVGTGVVb3NTMEZCUzJsdVFpeHRRa0ZCYlVKd1J5eFBRVUZQYm5OQ0xFZEJRVWNzU1VGQlNVa3NSVUZCUlN4SFFVRnRTQ3hQUVVGb1NFRXNSVUZCUlN0TkxFbEJRVWx1VGl4SFFVRkhMRXRCUVV0SkxFVkJRVVY1TjBJc1QwRkJUelUzUWl4SFFVRkhORUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNCUExFOUJRVTlzYzBJc1IwRkJSMFFzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk4xUWl4clFrRkJhMEl4TjBJc1JVRkJSU3hEUVVGRE1qZENMRkZCUVZFc1NVRkJTVGM1UWl4SFFVRlZNa1FzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTIxQ0xHdEVRVUZyUkN4VFFVRlRNVGRDTEVWQlFVVTNRaXhKUVVNMVV6QkVMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk41UWl4dlFrRkJiMElzVTBGQlUyZzRRaXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTUVRc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlV6QkNMSE5DUVVGelFpeE5RVUZOTHpSQ0xFMUJRVTBzYlVSQlFXMUVMRWxCUVVrNVF5eEZRVUZGTEVkQlFYRktMRTlCUVd4S1FTeEZRVUZGSzAwc1NVRkJTVzVPTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBrc1QwRkJUM1J4UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1FSXNVMEZCVXpFeVFpeEpRVUZKTEV0QlFVdEpMRVZCUVVWNU4wSXNUMEZCVHpVM1FpeEhRVUZITEV0QlFVdEhMRVZCUVVVeU4wSXNVVUZCVVN4SFFVRkhMemRDTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUZFVJc2EwSkJRV3RDTVRkQ0xFVkJRVVVzUjBGQlIyeERMRWRCUVZVeVJDeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRiVUlzYTBSQlFXdEVMRk5CUVZNeE4wSXNSVUZCUlRkQ0xFbEJRM1phTUVRc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlV6QkNMRzlDUVVGdlFpeFhRVUZYTEU5QlFVOXdOa0lzUzBGQlMyWXNUMEZCVDI4M1FpeHRRa0ZCYlVJc1dVRkJXWEkyUWl4TFFVRkxaaXhQUVVGUGJ6ZENMR3RDUVVGclFubzRRaXhYUVVGWGIwTXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVelJDTEdkQ1FVRm5RaXhUUVVGVGJqaENMRVZCUVVWRExFZEJRU3RHTEU5QlFUVkdORUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ2NFY3NUMEZCVDI1elFpeEhRVUZIUVN4RlFVRkZOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNWQ0xHdENRVUZyUWl4RFFVRkRNM1ZDTEVsQlFVbHVUaXhIUVVGSExFZEJRVWRETEVkQlFWVTBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYlVJc2EwUkJRV3RFTEZOQlFWTXhOMElzU1VGREwxYzJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUZG05Q0xHRkJRV0VzVTBGQlUyaFRMRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1MwRkJTeXRDTEVWQlFVVXNRMEZCUXl4SlFVRkpPVUlzUlVGQlJVUXNSVUZCUlRoMlFpeGpRVUZqTEVkQlFVY3NXVUZCV1RkMlFpeEhRVUZITEU5QlFVOUJMRWRCUVVjc1VVRkJVVUVzUjBGQlJ5eFJRVUZSUVN4RlFVRkZMRTFCUVUwclJTeE5RVUZOTEdWQlFXVXZSU3hGUVVGRkxHVkJRVFJETEVsQlFUVkNSQ3hGUVVGRkxFZEJRVWM0UWl4RlFVRkZOa0lzUzBGQlMzZGFMRTFCUVUwM1RDeFBRVUZQZUZBc1IwRkJUemRDTEVWQlFVVXNSVUZCUlVFc1JVRkJSVFpDTEVWQlFVVkhMRTlCUVU5b1F5eEpRVUZKUkN4SFFVRkhNa1FzUzBGQlMzbEtMRXRCUVV0bmFFSXNWMEZCVjBnc1QwRkJUMjV6UWl4RlFVRkZOMElzU1VGQmMwY3NUMEZCYkVjMlFpeEZRVUZGTmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0RE1UaENMRVZCUVVVeVJDeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsSExGTkJRV2RDTjNOQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTnRRaXhyUkVGQmEwUXNVMEZCVTNvM1FpeEZRVUZGUkN4SlFVTnVZelpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZNMlFpeFpRVUZaTEZOQlFWTndPRUlzUlVGQlJVTXNSMEZCUjBFc1JVRkJSVFJDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOMVFpeHJRa0ZCYTBJc1EwRkJRMm96UWl4TFFVRkxMRmxCUVZrc1IwRkJSelZGTEVkQlFVY3NTVUZCU1M5Q0xFVkJRVVVzUjBGQlJ6aENMRVZCUVVVMlFpeExRVUZMZDFvc1RVRkJUVGRNTEU5QlFVOTRVQ3hIUVVGSExFbEJRVWtzU1VGQlNUZENMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SlFVRkpSQ3hIUVVGSE1rUXNTMEZCUzNsS0xFdEJRVXR4YzBJc1pVRkJaWGhNTEU5QlFVOXVjMElzUlVGQlJUZENMRWxCUVhOSExFOUJRV3hITmtJc1JVRkJSVFpDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOTExDdERRVUVyUXpFNFFpeEZRVUZGTWtRc1MwRkJTeXR5UWl4TFFVRkxReXhMUVVGTFZTeEpRVUZKUnl4VFFVRm5RamR6UWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGJVSXNhMFJCUVd0RUxGRkJRVkY2TjBJc1JVRkJSVVFzU1VGRGVGazJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUT0VJc2EwSkJRV3RDTEZOQlFWTnlPRUlzUlVGQlJVTXNSMEZCYVU0c1QwRkJPVTFFTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBrc1QwRkJUM1J4UWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1FSXNVMEZCVXpFeVFpeExRVUZMTmtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXZENMRkZCUVZFdk0wSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV2xDTEZkQlFWZG9ORUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVXpObUxGTkJRVk12VkN4RlFVRkZMRTlCUVU5QkxFVkJRVVVzU1VGQlNVRXNSVUZCUlhWTUxGRkJRVkVzUzBGQlN5eFBRVUZQTEV0QlFWa3hTaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYlVJc2EwUkJRV3RFTEU5QlFVOHNRMEZCUXl4aFFVRmhMRlZCUVZWWkxGTkJRVk55T0VJc1IwRkJSeXhIUVVGSExGTkJRVk5FTEV0QlEzQlpOa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJkRExIRkNRVUZ4UWl4VFFVRlRkamhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVkQlFVZEJMR0ZCUVdFeVJDeExRVUZMTm5CQ0xFOUJRVTlGTEUxQlFVMHhkRUlzUlVGQlJUSkVMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQycDFRaXhSUVVGUkxFZEJRVWNzVTBGQlV5dENMRVZCUVVVcmRFSXNZMEZCWXpsMlFpeEZRVUZGTWtRc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUybERMR1ZCUVdWMEswSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1QwRkJUeXRHTEV0QlFVdG9SU3hIUVVGSExFMUJRVTFwUkN4TlFVRk5MR05CUVdOcVJDeEZRVUZGTEhkRFFVRjNReTlDTEVWQlFVVXNXVUZCV1N4SFFVRkhLMElzUlVGQlJTdDBRaXhuUWtGQlowSnVjMElzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTFNc1owSkJRV2RDTEVkQlFVYzVPRUlzWVVGQllUSkVMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UW5Jd1FpeEZRVUZGTWtRc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNjRWNzVDBGQlQycDFRaXhSUVVGUkxFZEJRVWRCTEdGQlFXRXlSQ3hMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZST1RKQ0xFVkJRVVV5UkN4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk4wa3NUMEZCVDJwMVFpeFBRVU53Wml4TFFVRkhNa1FzUzBGQlMwY3NVMEZCVXpsRUxFZEJRVGhFTEUxQlFVMW5SaXhOUVVGTkxHTkJRV05xUkN4RlFVRkZMR0ZCUVdGRUxFVkJRVVVzYzBWQlFYTkZPVUlzUlVGQlJTeFpRVUU1UzBFc1JVRkJSVEpFTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFd1FpeFRRVUZUZURSQ0xFZEJRVWRuZFVJc2RVSkJRWEZXTEU5QlFURk1hSFZDTEVWQlFVVXJkRUlzYTBOQlFXdERMM1JDTEVWQlFVVkJMRVZCUVVWbmRVSXNkVUpCUVhWQ2NuRkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBlbFlzUzBGQlMwY3NVMEZCVXpsRUxFbEJRVWt5UkN4TFFVRkxTeXhUUVVGVGFFVXNSMEZCUnl3clEwRkJLME5CTEVWQlFVVXNaMEpCUVdkQ1FTeEhRVUZWSzBJc1JVRkJSU3hMUVVGTE5FSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMVVzVjBGQlYyd3dRaXhQUVVGUGFFTXNTVUZCU1N4TFFVTjJZekpFTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOcFF5eGxRVUZsTEZOQlFWTjRPRUlzUjBGQlJ5eEpRVUZKTmtJc1MwRkJTemhITEZOQlFWTXpTU3hIUVVGSExFMUJRVTFyUkN4TlFVRk5MSGxHUVVGNVJteEVMRVZCUVVVc1YwRkJWMEVzUjBGQmRVVXNUMEZCY0VWQkxHRkJRV0UyUWl4TFFVRkxlVW9zUzBGQlMzVnlRaXhaUVVGWk56SkNMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZNVE5DTEU5QlFVOWhMRWxCUVZjMlFpeExRVUZMZVVvc1MwRkJTM1Z5UWl4VlFVRlZNVXNzVDBGQlQyNXpRaXhKUVVGSk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMnRETEdOQlFXTXNVMEZCVTNvNFFpeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCSzBNc1QwRkJOVU00UWl4RlFVRkZORUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNBM1FpeFBRVUZQWXl4RlFVRkZMMElzUlVGQlJVTXNTVUZCUzNVNFFpeExRVUZMTVRaQ0xFVkJRVk5ETEVkQlEzaFpORUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJoNlFpeExRVUZMTEZOQlFWTjJTQ3hGUVVGRlF5eEhRVUZ6UXl4SlFVRkpMMElzUjBGQmRrTTRRaXhGUVVGRk5rSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMjVITEZkQlFWZHdNRUlzU1VGQlZ6UjVRaXhsUVVGbGVqQkNMRVZCUVVVc1IwRkJSMmxETEVWQlFVVXNVMEZCVTBvc1IwRkJSelpDTEV0QlFVc3lSeXhSUVVGUmVFa3NSMEZCUnpaQ0xFdEJRVXQzV2l4TlFVRk5OMGdzVVVGQlVYaFVMRVZCUVVWSkxFbEJRVWxLTEVWQlFVVTJRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFRRVUZUYmtjc1YwRkJWM0F3UWl4SFFVRkhOMElzUlVGQlJUaE1MRXRCUVV0d1NTeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRjRThzVDBGQlQyNXpRaXhKUVVGSlFTeEZRVUZGUVN4RlFVRkZOSGxDTEdWQlFXVXhNRUlzUjBGQlJ6SkVMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVY3NVVUZCVVhoM1FpeEZRVUZGT0VJc1JVRkJSVUVzUjBGQlJ6WkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVY3NVMEZCVTNoM1FpeEhRVUZIT0VJc1NVRkJTVGxDTEVWQlFVVXNVVUZCWjBNc1QwRkJlRUl5UkN4TFFVRkxkMW9zVFVGQlRUZElMRkZCUVZGMlZDeEZRVUZGUnl4SFFVRlZlVUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3REZWpoQ0xFVkJRVVZ2U2l4TFFVRkxNVVlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNCUExFOUJRVTl1YzBJc1NVRkJTVGxDTEVsQlF5OWpNa1FzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVXk5eFFpeFBRVUZQTEZOQlFWTjRVQ3hIUVVGSExFOUJRVTgyUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVGFIcENMRXRCUVVzeFJpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRiRThzVFVGQlRYcHlRaXhOUVVGTmJrSXNWVUZCVlcxTExFMUJRVTAxVEN4TFFVRkxNRXdzWVVGQllUZElMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk50UXl4alFVRmpMRk5CUVZNeE9FSXNSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlRKRUxFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTXZjVUlzVDBGQlR6Tk9MRXRCUVV0M1dpeE5RVUZOZWxJc1RVRkJUVVlzVlVGQlZTeEpRVUZoTEU5QlFWUjRUQ3hGUVVGRmR6aENMRXRCUVVzeE5rSXNSVUZCVXpsQ0xFZEJRVWN5UkN4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVE9VNHNkME5CUVhkRExFZEJRVWMxY1VJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0RExGTkJRVk0xTmtJc1JVRkJSVU1zUjBGQlJ5eFBRVUZOTEVsQlFVczBRaXhMUVVGTGVVb3NTMEZCUzJsMlFpeFZRVUZWZGs0c2MwTkJRWE5EYUhSQ0xFVkJRVVZETEVsQlF6VmtORUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVXprMlFpeFZRVUZWZFhSQ0xITkRRVUZ6UXl4VFFVRlRhSFJDTEVWQlFVVkRMRWRCUVRCTkxFOUJRWFpOWXl4TFFVRkxlVFZDTERoRFFVRTRRek0wUWl4TFFVRkxlVW9zUzBGQlMydG5RaXhoUVVGaFF5eHhRMEZCY1VNMWNFSXNTMEZCUzNsS0xFdEJRVXRyWjBJc1lVRkJZVU1zY1VOQlFYRkRhbUVzVjBGQlYzaFNMRWRCUVVkQkxFVkJRVVZsTEV0QlFVc3lOVUlzUzBGQlMzbzJRaXhGUVVGVFl5eE5RVU12VW1Nc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUyMUNMR3RFUVVGclJDeFRRVUZUTVRkQ0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFbEJRVWxETEVWQlFVVXNTMEZCVTJsRExFVkJRVVVzU1VGQlNVb3NSVUZCUlRaQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTnZReXh2UWtGQmIwSXpPRUlzUlVGQlJVTXNSMEZETDBrc1QwRkVhMG8wUWl4TFFVRkxkVVFzWjBKQlFXZENiRWdzUjBGQlJ6SkVMRXRCUVVzeVJ5eFJRVUZSZEVzc1MwRkJTMEVzUlVGQlJTeERRVUZEUVN4SlFVRkpRU3hGUVVGRkxFZEJRVWN5UkN4TFFVRkxhMVVzU1VGQlNYVlZMRXRCUVV0cFFpeFZRVUZWZG5KQ0xFVkJRVVZuZFVJc1owSkJRV2RDYm5OQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmNGb3NSVUZCUldsRExFOUJRVThzWVVGQllVZ3NSVUZCUlN3MlFrRkJOa0pKTEVkQlFVY3NUVUZCVFdwRExFVkJRVVV3UkN4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVEwzRkNMRTlCUVU5MFVpeEhRVUZIYTBNc1IwRkJSeXhKUVVGSmVVSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVM0JQTEU5QlFVOW9kVUlzUjBGQlJ5eExRVUZMTmtJc1JVRkJSU3hKUVVGSk4wSXNSVUZCUlVFc1JVRkJSWGt3UWl4cFFrRkJhVUkxZVVJc1JVRkJSVU1zUjBGQlIwRXNSVUZCUlcxNVFpeFBRVUZQYWpCQ0xFVkJRVVVzYjBKQlFXOUNPRVlzUzBGQlMycEZMRWRCUVVjMlFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsSExGRkJRemRsTEUxQlFXRTNjMElzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBzc0swTkJRU3REZURaQ0xFVkJRVVZxUXl4SlFVRkpNRVFzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTI5RExHOUNRVUZ2UWl4VFFVRlRNemhDTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVXNSMEZCUnl4SFFVRkhLMElzUlVGQlJTeEpRVUZKTEVsQlFVazVRaXhMUVVGTE9FSXNSVUZCUlN4RFFVRkRMRWxCUVVrMFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRVU3h2UWtGQmIwSTVNa0lzUzBGQlN6bEdMRWRCUVVjc1RVRkJUU3RGTEUxQlFVMHNNa0pCUVRKQ0wwVXNSVUZCUlN4TlFVRk5MRWxCUVVscFF5eEZRVUZGU0N4RlFVRkZPVUlzUjBGQlJ6QkVMRXRCUVV0MVJDeG5Ra0ZCWjBKb1JpeExRVUZMYkVNc1IwRkJSeXhKUVVGSk1rUXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMmRETEhGQ1FVRnhRblk0UWl4RlFVRkZOMElzUlVGQlJXbERMRWxCUVVrc1QwRkJUMnhETEVkQlF6ZFhNa1FzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNWQ0xHdENRVUZyUWl4VFFVRlRPVGRDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVsQlFWTnJReXhGUVVGTWFrTXNSVUZCUlN4SFFVRkxMRWxCUVVscFF5eExRVUZMU2l4RlFVRkZOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTlzV0N4RlFVRkZOSFJDTEdWQlFXVTFkRUlzUlVGQlJTeHpRa0ZCYzBKcVF5eEZRVUZGYVVNc1IwRkJSMG9zUlVGQlJVa3NSMEZCUnl4SlFVRkpRU3hMUVVGTFNDeEZRVUZGTkVJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5c1dDeEZRVUZGTkhSQ0xHVkJRV1UxZEVJc1JVRkJSU3h6UWtGQmMwSnFReXhGUVVGRmFVTXNSMEZCUjBnc1JVRkJSVWNzUjBGQlJ5eEpRVUZKUVN4TFFVRkxiRU1zUlVGQlJTeERRVUZETEVsQlFVbHRReXhGUVVGRlJDeEZRVUZGTkhSQ0xHTkJRV01zUjBGQlJ6TjBRaXhMUVVGTFRDeEZRVUZGTEUxQlFVMXJSQ3hOUVVGTkxHOUNRVUZ2UWpkRExFVkJRVVVzY1VKQlFYRkNSQ3hGUVVGRkxHbENRVUZwUW14RExFVkJRVVZyUXl4SFFVRkhMRXRCUVV0RExFdEJRVXRLTEZWQlFWVTVRaXhGUVVGRmEwTXNSMEZCUjJ4RExFVkJRVVZwUXl4SFFVRkhiRU1zUlVGQlJXdERMRWRCUVVjc1QwRkJUMnBETEVkQlEzcFpNRVFzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTNGRExHRkJRV0V2TmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0RExHdENRVUZyUWk4MFFpeExRVUZMSzNKQ0xFdEJRVXRETEV0QlFVdFZMRWxCUVVsSExGTkJRVk0zYzBJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUyeFBMRTFCUVUxNGNVSXNTMEZCUzNsS0xFdEJRVXRwZGtJc1UwRkJVMHNzSzBOQlFTdERMRWRCUVVjdk5FSXNTMEZCU3l0eVFpeExRVUZMUXl4TFFVRkxWU3hKUVVGSlJ5eFRRVUZUTjNOQ0xFdEJRVXQ1U2l4TFFVRkxhWFpDTEZOQlFWTnNXQ3hIUVVGSGVHaENMRXRCUVV0NVNpeExRVUZMYVhaQ0xGTkJRVk5MTEN0RFFVRXJReXhQUVVGUEx6UkNMRXRCUVVzcmNrSXNTMEZCUzBNc1MwRkJTMVVzU1VGQlNVY3NVMEZCVXpkelFpeExRVUZMZVVvc1MwRkJTM1Y0UWl4eFFrRkJjVUlzUjBGQlIyZzNRaXhMUVVGTGVVb3NTMEZCUzNWNFFpeHhRa0ZCY1VKRExEWkRRVUUyUXl4VFFVRlRPVGhDTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUV3VGl4UFFVRjJUakpFTEV0QlFVdG5WaXhSUVVGUllTeGhRVUZoTjFZc1MwRkJTelp3UWl4UFFVRlBSU3hOUVVGTlR5eFBRVUZQYm5OQ0xFZEJRVWNzT0VKQlFUaENOa0lzUzBGQlMyZFdMRkZCUVZGVExGRkJRVkY2Vml4TFFVRkxObkJDTEU5QlFVOW5TU3hUUVVGVFR5eHZRa0ZCYjBKd2VVSXNTMEZCU3pad1FpeFBRVUZQUlN4TlFVRk5UeXhQUVVGUGJuTkNMRWxCUVVrc2QwTkJRU3RETmtJc1MwRkJTM2xLTEV0QlFVdHBka0lzVTBGQlUwc3NLME5CUVN0RE16WkNMRVZCUVVVdlFpeEhRVUZITEU5QlEzaDVRakpFTEV0QlFVdDVTaXhMUVVGTGRYaENMSEZDUVVGeFFrVXNLME5CUVN0RExGTkJRVk12T0VJc1JVRkJSVU1zUjBGQk1FNHNUMEZCZGs0MFFpeExRVUZMWjFZc1VVRkJVV0VzWVVGQllUZFdMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExEaENRVUU0UWpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNjSGxDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRkpMSGREUVVFclF6WkNMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmRMTEdsRVFVRnBSREZ6UWl4SlFVTm9XVFJDTEV0QlFVdDVTaXhMUVVGTGRYaENMSEZDUVVGeFFrY3NPRU5CUVRoRExGTkJRVk5vT1VJc1JVRkJSVU1zUjBGQk1FNHNUMEZCZGs0MFFpeExRVUZMWjFZc1VVRkJVV0VzWVVGQllUZFdMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExEaENRVUU0UWpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNjSGxDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRkpMSGREUVVFclF6WkNMRXRCUVV0NVNpeExRVUZMZFhKQ0xGVkJRVlZITEdkRVFVRm5SQzh5UWl4SlFVTTNXRFJDTEV0QlFVdDVTaXhMUVVGTGRYaENMSEZDUVVGeFFra3NiVVJCUVcxRUxGTkJRVk5xT1VJc1JVRkJSVU1zUjBGQk1FNHNUMEZCZGs0MFFpeExRVUZMWjFZc1VVRkJVV0VzWVVGQllUZFdMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExEaENRVUU0UWpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNjSGxDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRkpMSGREUVVFclF6WkNMRXRCUVV0NVNpeExRVUZMY1hOQ0xHVkJRV1ZMTEhGRVFVRnhSQzh6UWl4SlFVTTFXVFJDTEV0QlFVdDVTaXhMUVVGTGRYaENMSEZDUVVGeFFrc3NORU5CUVRSRExGTkJRVk5zT1VJc1JVRkJSVU1zUjBGQk1FNHNUMEZCZGs0MFFpeExRVUZMWjFZc1VVRkJVV0VzWVVGQllUZFdMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExEaENRVUU0UWpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNjSGxDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRkpMSGREUVVFclF6WkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkZKTERoRFFVRTRRMjR4UWl4SlFVTjJXRFJDTEV0QlFVdDVTaXhMUVVGTGRYaENMSEZDUVVGeFFrMHNkVVJCUVhWRUxGTkJRVk51T1VJc1JVRkJSVU1zUjBGQk1FNHNUMEZCZGs0MFFpeExRVUZMWjFZc1VVRkJVV0VzWVVGQllUZFdMRXRCUVVzMmNFSXNUMEZCVDBVc1RVRkJUVThzVDBGQlQyNXpRaXhIUVVGSExEaENRVUU0UWpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMDhzYjBKQlFXOUNjSGxDTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMjV6UWl4SlFVRkpMSGREUVVFclF6WkNMRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWxNc2VVUkJRWGxFTDNsQ0xFbEJRVWswUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTExFZEJRVWQyTjBJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMwTXNNa0pCUVRKQ0xFTkJRVU5ETEZkQlFWY3NZVUZCWVVNc1UwRkJVeXhYUVVGWFF5eFpRVUZaTEdOQlFXTkRMRlZCUVZVc1lVRkJZVFUzUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFRTeHRRa0ZCYlVJc1UwRkJVekU1UWl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpoQ0xFVkJRVVV5T1VJc2JVSkJRVzFDTVRsQ0xFVkJRVVUwUWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFNTeHJRa0ZCYTBKNk9FSXNTMEZCU3pKRUxFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVdFJMR2REUVVGblF5eERRVUZET1Zjc1RVRkJTeXhGUVVGSGVVSXNVVUZCVHl4RlFVRkhVU3hQUVVGTkxFVkJRVWRKTEV0QlFVa3NSVUZCUjBrc1ZVRkJVeXhIUVVOb2QwSXhia0lzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzFNc05rSkJRVFpDYURoQ0xFdEJRVXMyWlN4VlFVRlZhVUlzYTBKQlFXbENMRmRCUVZjc1IwRkJSemxtTEV0QlFVdGhMRTlCUVU4c2IwSkJRWEZDYVVJc1UwRkJVeXhQUVVGTkxFVkJRVWNzU1VGQlNUTkVMRVZCUVVVeVJDeFRRVUZUTmtjc1kwRkJZeXhQUVVGUGRrc3NSVUZCUlRCRUxGTkJRVk0yUnl4alFVRmpMRTlCUVhGRkxFOUJRVGxFZGtzc1JVRkJSWGxMTEZsQlFWa3ZSeXhUUVVGVE5rY3NZMEZCWXl4UlFVRlJlRXNzUlVGQlJUQkxMRmxCUVZsNlN5eExRVUZOTkVJc1MwRkJTMkVzVVVGQlVURkRMRVZCUVVVNE9VSXNZMEZCYjBJM09VSXNSVUZCUlVRc1JVRkJSVGc1UWl4WFFVRlhRU3hYUVVGWE9UbENMRVZCUVVVck9VSXNWVUZCVld3NFFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRTU3hyUWtGQmEwSTVORUlzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTJ4UExGRkJRV053YzBJc1JVRkJSU3M1UWl4clFrRkRiR0Z1T0VJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMyRXNhVU5CUVdsRExGTkJRVk5xSzBJc1JVRkJSVU1zUjBGQlJ5eEhRVUZITkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMxTXNLMEpCUVN0Q0xFdEJRVXMzT1VJc1JVRkJSV3NyUWl4WFFVRlhiQ3RDTEVWQlFVVTJTeXhaUVVGWk4wc3NSVUZCUldzclFpeFhRVUZYYkN0Q0xFVkJRVVVyT1VJc1ZVRkJWV3c0UWl4TFFVRkxlVW9zUzBGQlMybDJRaXhUUVVGVFNTeHJRa0ZCYTBJeE5rSXNTVUZETTAwMFFpeExRVUZMYTFVc1NVRkJTWEZ1UWl4TFFVRkxaU3hoUVVGaExGTkJRVk51SzBJc1JVRkJSVU1zUjBGQlJ5eEhRVUZITkVJc1MwRkJTMmRXTEZGQlFWRkRMR1ZCUVdVc1EwRkJReXhKUVVGSk5Wa3NSVUZCUlRoQ0xFVkJRVVZ2SzBJc1VVRkJVWHBETEdOQlFXTXNSMEZCUnprMVFpeExRVUZMYTFVc1NVRkJTWEZ1UWl4TFFVRkxVU3huUTBGQlowTXhMMElzUjBGQlJ5eE5RVUZOWjBZc1RVRkJUU3dyUkVGQkswUnNSQ3hGUVVGRmJ5dENMRkZCUVZFc1MwRkJUWFk0UWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFlTeHBRMEZCYVVOcUswSXNSVUZCUlVNc1NVRkJTVFJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0cFFpeGhRVUZoTEZOQlFWTnlLMElzUlVGQlJVTXNSMEZCUjBRc1JVRkJSWE1yUWl4VlFVRlZlamhDTEV0QlFVdDVTaXhMUVVGTGFYWkNMRk5CUVZOSkxHdENRVUZyUWpFMlFpeEpRVU55V1RSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVdHRRaXh4UWtGQmNVSXNVMEZCVTNZclFpeEZRVUZGUXl4SFFVRkhRU3hGUVVGRlFTeGhRVUZoTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVTOHdRaXhGUVVGRk5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVEpDTEhkQ1FVRjNRakV5UWl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZ4U2l4M1FrRkJkMEpzWjBJc1IwRkJSMmszUWl4UFFVRlBjRFZDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFM1FpeHBRa0ZCYVVKc2VrSXNTVUZCU1RSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVdHZRaXh2UWtGQmIwSXNVMEZCVTNnclFpeEZRVUZGUXl4SFFVRkhRU3hGUVVGRlFTeGhRVUZoTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVTOHdRaXhGUVVGRk5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVEpDTEhkQ1FVRjNRakV5UWl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkUwU1N3d1FrRkJNRUo2Wml4SFFVRkhlU3RDTEZkQlFWYzFPRUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW14NlFpeEpRVU4yWWpSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVdHpRaXh0UWtGQmJVSXNVMEZCVXpFclFpeEZRVUZGUXl4SFFVRkhRU3hGUVVGRlFTeGhRVUZoTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVTOHdRaXhGUVVGRk5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVEpDTEhkQ1FVRjNRakV5UWl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkZwU2l4NVFrRkJlVUk1Wml4SFFVRkhlU3RDTEZkQlFWYzFPRUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW14NlFpeEpRVUZKTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMzVkNMRk5CUVZNc1UwRkJVek1yUWl4RlFVRkZReXhIUVVGSFJDeEZRVUZGYTNsQ0xFMUJRVTB3VFN4UlFVRlJMemhDTEV0QlFVdDVTaXhMUVVGTGRYSkNMRlZCUVZVeFN5eFBRVUZQYkhOQ0xFbEJRVWswUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTGVVSXNZMEZCWXl4VFFVRlROeXRDTEVWQlFVVkRMRWRCUVVkRUxFVkJRVVZ6VWl4TlFVRk5lbEFzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBrc2EwSkJRV3RDTVRaQ0xFdEJRM3BaTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlN6QkNMR05CUVdNc1UwRkJVemtyUWl4RlFVRkZReXhIUVVGSE5FSXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRXlTU3d3UWtGQk1FSjRaaXhIUVVGSFF5eEZRVUZGUVN4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVM4d1FpeEZRVUZGTkVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUSkNMSGRDUVVGM1FqRXlRaXhIUVVGSFJDeEZRVUZGY1RkQ0xFdEJRVXQ0TlVJc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUZENMR2xDUVVGcFFteDZRaXhKUVVGSk5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTekpDTEZsQlFWa3NVMEZCVXk4clFpeEZRVUZGUXl4SFFVRm5SQ3hIUVVFM1F6UkNMRXRCUVV0clZTeEpRVUZKWXl4UlFVRlJPRWtzZVVKQlFYbENNMllzUzBGQlVVTXNZVUZCWVRSQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZOQlFWTXNRMEZCUXl4SlFVRkpPVEpDTEVWQlFVVXNhVUpCUVdsQ0swWXNTMEZCUzJoRkxFZEJRVWRCTEVWQlFVVTBRaXhMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTWtJc2QwSkJRWGRDTVRKQ0xFVkJRVVV2UWl4SFFVRkhPRUlzUlVGQlJXMU9MRWxCUVVsMFRDeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMElzYVVKQlFXbENiSHBDTEVsQlF6RmpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCU3pSQ0xGbEJRVmtzVTBGQlUyZ3ZRaXhGUVVGRlF5eEhRVUZuUkN4SFFVRTNRelJDTEV0QlFVdHJWU3hKUVVGSll5eFJRVUZSSzBrc2VVSkJRWGxDTldZc1MwRkJVVU1zWVVGQllUUkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGTkJRVk1zUTBGQlF5eEpRVUZKT1RKQ0xFVkJRVVVzYVVKQlFXbENLMFlzUzBGQlMyaEZMRWRCUVVkQkxFVkJRVVUwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk1rSXNkMEpCUVhkQ01USkNMRVZCUVVVdlFpeEhRVUZIT0VJc1JVRkJSVzFPTEVsQlFVbDBUQ3hMUVVGTGVVb3NTMEZCU3pCd1FpeFJRVUZSTjBJc2FVSkJRV2xDYkhwQ0xFbEJRVWswUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTE5rSXNXVUZCV1N4VFFVRlRhaTlDTEVWQlFVVkRMRWRCUVdkRUxFZEJRVGRETkVJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZGblNpeDVRa0ZCZVVJM1ppeExRVUZSUXl4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVMEZCVXl4RFFVRkRMRWxCUVVrNU1rSXNSVUZCUlN4cFFrRkJhVUlyUml4TFFVRkxhRVVzUjBGQlIwRXNSVUZCUlRSQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRXlRaXgzUWtGQmQwSXhNa0lzUlVGQlJTOUNMRWRCUVVjNFFpeEZRVUZGYlU0c1NVRkJTWFJNTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZFM1FpeHBRa0ZCYVVKc2VrSXNTVUZETldVMFFpeExRVUZMYTFVc1NVRkJTWEZ1UWl4TFFVRkxPRUlzV1VGQldTeFRRVUZUYkM5Q0xFVkJRVVZETEVkQlFVYzBRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVVzlLTEhsQ1FVRjVRbXBuUWl4SFFVRkhRU3hGUVVGRmJVNHNTVUZCU1hSTUxFdEJRVXQ1U2l4TFFVRkxhVzVDTEcxQ1FVRnRRbGNzZFVKQlFYVkNhbnBDTEVsQlFVazBRaXhMUVVGTGExVXNTVUZCU1hGdVFpeExRVUZMSzBJc1dVRkJXU3hUUVVGVGJpOUNMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhOS0xIbENRVUY1UW01blFpeEhRVUZIUVN4RlFVRkZiVTRzU1VGQlNYUk1MRXRCUVV0NVNpeExRVUZMYVc1Q0xHMUNRVUZ0UWxrc2FVSkJRV2xDYkhwQ0xFbEJRVWswUWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFowTXNZVUZCWVN4VFFVRlRjQzlDTEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMYTFVc1NVRkJTV01zVVVGQlVYVktMREJDUVVFd1FuQm5RaXhIUVVGSFFTeEZRVUZGYlU0c1NVRkJTWFJNTEV0QlFVdDVTaXhMUVVGTGFXNUNMRzFDUVVGdFFsa3NhVUpCUVdsQ2JIcENMRWxCUXpOaE5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTMmxETEdkQ1FVRm5RaXhUUVVGVGNpOUNMRVZCUVVWRExFZEJRVWMwUWl4TFFVRkxhMVVzU1VGQlNXTXNVVUZCVVhWS0xEQkNRVUV3UW5CblFpeEhRVUZIUVN4RlFVRkZOamRDTEU5QlFVOW9Oa0lzUzBGQlMzbEtMRXRCUVV0cGRrSXNVMEZCVTBrc2EwSkJRV3RDTVRaQ0xFbEJRM2hKTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMydERMR3RDUVVGclFpeFRRVUZUZEM5Q0xFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE1rUXNTMEZCUzJ0VkxFbEJRVWxqTEZGQlFWRTJTU3gzUWtGQmQwSXhaaXhIUVVGSFFTeEZRVUZGZFM5Q0xFbEJRVWx5YUVNc1JVRkJSVEpFTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOdFFpeDNRa0ZCZDBJek1rSXNSVUZCUlN4bFFVRmxNa1FzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTl5V0N4aFFVRmhORUlzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ0xITkZRVUZ6UlhaNVFpeEZRVUZGY1RkQ0xFdEJRVXQ0TlVJc1MwRkJTM2xLTEV0QlFVdHBia0lzYlVKQlFXMUNXU3hwUWtGQmFVSnNla0lzU1VGQlNVUXNSVUZCUlhFM1FpeExRVUZMY0RkQ0xHRkJRV0UwUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSXhkMElzUzBGQlMzbEtMRXRCUVV0cGJrSXNiVUpCUVcxQ1dTeHBRa0ZCYVVKc2VrSXNSMEZCUjBFc1lVRkJZVFJDTEV0QlFVdDVTaXhMUVVGTE1IQkNMRkZCUVZGdWVrSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVVGRDTEdsQ1FVRnBRbXg2UWl4SFFVTnVaMEkwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUk4wSXNhVUpCUVdsQ2RIaENMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkV5UWl4M1FrRkJkMEl4TWtJc1MwRkJTelJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVV0dlF5eGpRVUZqTEZOQlFWTjRMMElzUlVGQlJVTXNSMEZCUnpSQ0xFdEJRVXRyVlN4SlFVRkpZeXhSUVVGUmQwb3NNRUpCUVRCQ2NtZENMRWRCUVVkQkxFVkJRVVZ0TjBJc1MwRkJTM1ExUWl4TFFVRkxlVW9zUzBGQlMybHVRaXh0UWtGQmJVSlhMSFZDUVVGMVFtcDZRaXhKUVVGSk5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTM0ZETEdGQlFXRXNVMEZCVTNvdlFpeEZRVUZGUXl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkY1U2l3d1FrRkJNRUowWjBJc1IwRkJSMEVzUlVGQlJXMU9MRWxCUVVsMFRDeExRVUZMZVVvc1MwRkJTMmx1UWl4dFFrRkJiVUpYTEhWQ1FVRjFRbXA2UWl4SlFVRkpRU3hGUVVGRk5FSXNTMEZCU3pSQ0xHMUNRVUZ0UW5wRUxFVkJRVVV3VWl4aFFVRmhMRkZCUVZGNlVpeEpRVU12WVRSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVdHpReXhwUWtGQmFVSXNVMEZCVXpFdlFpeEZRVUZGUXl4SFFVRkhORUlzUzBGQlMydFZMRWxCUVVsakxGRkJRVkY1U2l3d1FrRkJNRUowWjBJc1IwRkJSMEVzUlVGQlJUSXZRaXhMUVVGTE9UbENMRXRCUVV0NVNpeExRVUZMWjJoQ0xGZEJRVmRUTEc5Q1FVRnZRamx6UWl4SlFVRkpRU3hGUVVGRk5FSXNTMEZCU3pSQ0xHMUNRVUZ0UW5wRUxFVkJRVVV3VWl4aFFVRmhMRkZCUVZGNlVpeEpRVUZKTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlMzZERMR2RDUVVGblFpeFRRVUZUTlM5Q0xFVkJRVVZETEVkQlFVYzBRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWEZKTEdsQ1FVRnBRbXhtTEVkQlFVZERMRVZCUVVWQkxHRkJRV0UwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUkx6QkNMRVZCUVVVMFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJNa0lzZDBKQlFYZENNVEpDTEVkQlFVZEVMRVZCUVVWeE4wSXNTMEZCUzNnMVFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJOMElzYVVKQlFXbENiSHBDTEVsQlF5OVpORUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCUzNsRExHVkJRV1VzVTBGQlV6Y3ZRaXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTMnRWTEVsQlFVbGpMRkZCUVZGeFNTeHBRa0ZCYVVKc1ppeEhRVUZIUXl4RlFVRkZRU3hoUVVGaE5FSXNTMEZCUzNsS0xFdEJRVXN3Y0VJc1VVRkJVUzh3UWl4RlFVRkZORUlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRKQ0xIZENRVUYzUWpFeVFpeEhRVUZIUkN4RlFVRkZPQzlDTEU5QlFVOXFLMElzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW14NlFpeExRVUZMTkVJc1MwRkJTMnRWTEVsQlFVbHhia0lzUzBGQlN6SkRMR2RDUVVGblFpeFRRVUZUTHk5Q0xFVkJRVVZETEVkQlFVYzBRaXhMUVVGTGExVXNTVUZCU1dNc1VVRkJVWEZKTEdsQ1FVRnBRbXhtTEVkQlFVZERMRVZCUVVWQkxHRkJRV0UwUWl4TFFVRkxlVW9zUzBGQlN6QndRaXhSUVVGUkx6QkNMRVZCUVVVMFFpeExRVUZMZVVvc1MwRkJTekJ3UWl4UlFVRlJNa0lzZDBKQlFYZENNVEpDTEVkQlFVZEVMRVZCUVVWMVRDeFJRVUZSTVVvc1MwRkJTM2xLTEV0QlFVc3djRUlzVVVGQlVUZENMR2xDUVVGcFFteDZRaXhMUVVNdldqUkNMRXRCUVV0clZTeEpRVUZKY1c1Q0xFdEJRVXMwUXl4aFFVRmhMRk5CUVZOb1owTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRVZCUVVWcFF5eEhRVUZ0Uml4UFFVRm9Sa29zUlVGQlJVRXNZVUZCWVRaQ0xFdEJRVXQ1U2l4TFFVRkxNSEJDTEZGQlFWRm9NVUlzUlVGQlJUWkNMRXRCUVV0NVNpeExRVUZMTUhCQ0xGRkJRVkV5UWl4M1FrRkJkMEl6TWtJc1NVRkJWVU1zUjBGQlJ6UkNMRXRCUVV0bUxGRkJRVkUyUnl4TFFVRkxPVVlzUzBGQlMzbEtMRXRCUVVzd2NFSXNVVUZCVVRkQ0xHbENRVUZwUW01NlFpeEhRVUZIT1VJc1JVRkJSVEpFTEV0QlFVczJjRUlzVDBGQlQwVXNUVUZCVFU4c1QwRkJUMnAxUWl4SFFVRkhMRWRCUVVkRExFVkJRVVZwUXl4SlFVRkplVUlzUzBGQlMydFZMRWxCUVVseGJrSXNTMEZCU3paRExHOUNRVUZ2UWl4VFFVRlRhbWRETEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVdHJWU3hKUVVGSmNXNUNMRXRCUVVzNFF5eG5Ra0ZCWjBKc1owTXNSVUZCUlVNc1JVRkJSU3hqUVVGak5FSXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTemhETEdkQ1FVRm5RaXhUUVVGVGJHZERMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU4NFFpeEZRVUZGYTJkRExHZENRVUZuUW5JclFpeExRVUZMZVVvc1MwRkJTMmwyUWl4VFFVRlRTU3hyUWtGQmEwSXhOa0lzUjBGQlJ5OUNMRWxCUXpsaU1rUXNTMEZCUzJ0VkxFbEJRVWx4YmtJc1MwRkJTeXRETEc5Q1FVRnZRaXhUUVVGVGJtZERMRWRCUVVjc1NVRkJTU3hqUVVGamFVVXNTMEZCUzJwRkxFVkJRVVUyUlN4TlFVRk5MRTFCUVUwelFpeE5RVUZOTEhORlFVRnpSU3hKUVVGSmFrUXNSVUZCUlRSQ0xFdEJRVXRtTEU5QlFVOHljMElzU1VGQlNVb3NaMEpCUVdkQ2NuUkNMRWRCUVhkUExFOUJRWEpQUVN4RlFVRkZMRWxCUVVrMlFpeExRVUZMWml4UFFVRlBjeTlDTEU5QlFWRjRkVUlzVDBGQlR5eFhRVUZYTDFBc1MwRkJTMllzVDBGQlR6SnpRaXhKUVVGSlJpeG5Ra0ZCWjBKMGRFSXNTVUZCU1RSQ0xFdEJRVXRyVlN4SlFVRkpjVzVDTEV0QlFVc3lRaXhaUVVGWkx5dENMRVZCUVVVMlFpeExRVUZMZVVvc1MwRkJTM1Y0UWl4eFFrRkJjVUpMTERSRFFVRTBRM0kzUWl4TFFVRkxObkJDTEU5QlFVOUZMRTFCUVUxUkxFdEJRVXNzYlVKQlFXMUNibk5DTEVsQlFWZEVMRWRCUVVjMlFpeExRVUZMTm5CQ0xFOUJRVTh5VlN4M1FrRkJkVUlzUlVGQlIzZ3JRaXhMUVVGTE5uQkNMRTlCUVU4MFZTd3JRa0ZCT0VJc1JVRkJSM29yUWl4TFFVRkxObkJDTEU5QlFVODJWU3hSUVVGUkxFTkJRVU5ETEV0QlFVc3NTMEZCVlRNclFpeExRVUZMTm5CQ0xFOUJRVTlwU1N4WFFVRlhPWGhDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZORExGZEJRVmM1ZUVJc1MwRkJTelp3UWl4UFFVRlBhMGtzVTBGQlV5OTRRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUUlN4VFFVRlRMM2hDTEV0QlFVczJjRUlzVDBGQlQyMUpMREJDUVVFd1FtaDVRaXhMUVVGTE5uQkNMRTlCUVU5blNTeFRRVUZUUnl3d1FrRkJNRUpvZVVJc1MwRkJTelp3UWl4UFFVRlBjVWtzZDBKQlFYZENiSGxDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOTExIZENRVUYzUW14NVFpeExRVUZMTm5CQ0xFOUJRVTl6U1N4elFrRkJjMEp1ZVVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwMHNjMEpCUTNJelFtNTVRaXhMUVVGTE5uQkNMRTlCUVU4clZTeExRVUZMTEZOQlFWTjZaME1zUlVGQlJVTXNSMEZCUnl4SlFVRkpMRWxCUVVrdlFpeEZRVUZGT0VJc1JVRkJSV2xDTEUxQlFVMHNUVUZCVFRsRExFVkJRVVVzUjBGQlIybERMRVZCUVVWUkxFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVVzd1RDeFZRVUZWTEVkQlFVZDBTaXhGUVVGRlJDeFJRVUZSTEVWQlFVVnFReXhGUVVGRmFVTXNVVUZCVVdoRExFZEJRVWRFTEVWQlFVVnRSU3hSUVVGUmFrTXNSVUZCUldsRExGRkJRVkVzVDBGQlQyeEZMRVZCUVVWRUxFVkJRVVZ4U2l4TFFVRkxMRTlCUVU4eFJpeExRVUZMTm5CQ0xFOUJRVTluVml4dFFrRkJiVUlzVTBGQlV6Rm5ReXhIUVVGSExFOUJRVTlCTEVWQlFVVjFUQ3hSUVVGUkxHRkJRV0VzUzBGQlMwRXNVVUZCVVN4aFFVRmhMRXRCUVVzeFNpeExRVUZMTm5CQ0xFOUJRVTkxU1N4dlFrRkJiMEp3ZVVJc1MwRkJTelp3UWl4UFFVRlBaMGtzVTBGQlUwOHNiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDJsV0xHTkJRV01zVTBGQlV6Tm5ReXhIUVVGSExFOUJRVThzUjBGQlIwRXNSVUZCUlVjc1VVRkJVVEJDTEV0QlFVczJjRUlzVDBGQlQyNVlMRkZCUVZFeFV5eExRVUZMTm5CQ0xFOUJRVTkxU1N4dlFrRkJiMEp3ZVVJc1MwRkJTelp3UWl4UFFVRlBhMVlzZDBKQlFYZENMRk5CUVZNMVowTXNSMEZCUnl4UFFVRlBOa0lzUzBGQlN6WndRaXhQUVVGUGRVa3NiMEpCUVc5Q2NIbENMRXRCUVVzMmNFSXNUMEZCVDIxV0xGTkJRVk0zWjBNc1MwRkRjbXBDTmtJc1MwRkJTelp3UWl4UFFVRlBiMVlzV1VGQldXb3ZRaXhMUVVGTE5uQkNMRTlCUVU5clZpeDNRa0ZCZDBJdkswSXNTMEZCU3pad1FpeFBRVUZQY1ZZc2NVSkJRWEZDTEZOQlFWTXZaME1zUjBGQlJ5eFBRVUZQTEdGQlFXRnBSU3hMUVVGTGFrVXNTVUZCU1RaQ0xFdEJRVXMyY0VJc1QwRkJUM05XTEZGQlFWRXNVMEZCVTJob1F5eEhRVUZITEU5QlFVOHNXVUZCV1dsRkxFdEJRVXRxUlN4SlFVRkpOa0lzUzBGQlN6WndRaXhQUVVGUGRWWXNWVUZCVlN4VFFVRlRhbWhETEVkQlFVY3NUMEZCVHl4VFFVRlRhVVVzUzBGQlMycEZMRWxCUVVrMlFpeExRVUZMTm5CQ0xFOUJRVTkzVml4bFFVRmxMRk5CUVZOc2FFTXNSMEZCUnl4UFFVRlBMR1ZCUVdWcFJTeExRVUZMYWtVc1NVRkJTVFpDTEV0QlFVczJjRUlzVDBGQlQzbFdMRkZCUVZFc1UwRkJVMjVvUXl4SFFVRkhMRTFCUVUwc1MwRkJTMEVzUjBGQlJ6WkNMRXRCUVVzMmNFSXNUMEZCVHpCV0xHTkJRV01zVTBGQlUzQm9ReXhIUVVGSExFOUJRVThzUjBGQlIwRXNSVUZCUlVjc1VVRkJVU3hMUVVGTFNDeEhRVUZITEV0QlFVdEJMRWRCUVVjc1MwRkJWVUVzUjBGQlJ5eExRVUZWUVN4SFFVTnNaRFpDTEV0QlFVczJjRUlzVDBGQlR6SldMR05CUVdNc1UwRkJVM0pvUXl4SFFVRkhMRTlCUVU5QkxFVkJRVVYxVEN4UlFVRlJMR2xDUVVGcFFpeE5RVUZOTVVvc1MwRkJTelp3UWl4UFFVRlBORllzY1VKQlFYRkNMRk5CUVZOMGFFTXNSMEZCUnl4UFFVRlBRU3hGUVVGRmRVd3NVVUZCVVN4blFrRkJaMElzVDBGQlR6RktMRXRCUVVzMmNFSXNUMEZCVHpaV0xHOUNRVUZ2UWl4VFFVRlRkbWhETEVkQlFVY3NUMEZCVDBFc1JVRkJSWFZNTEZGQlFWRXNWMEZCVnl4TlFVRk5NVW9zUzBGQlN6WndRaXhQUVVGUE9GWXNaMEpCUVdkQ0xGTkJRVk40YUVNc1IwRkJSeXhQUVVGUFFTeEZRVUZGZFV3c1VVRkJVU3hsUVVGbExFMUJRVTB4U2l4TFFVRkxObkJDTEU5QlFVOHJWaXgxUWtGQmRVSXNVMEZCVTNwb1F5eEhRVUZITEU5QlFVOUJMRVZCUVVWMVRDeFJRVUZSTEdOQlFXTXNTMEZCUzBFc1VVRkJVU3d5UWtGQk1rSXNTMEZCU3pGS0xFdEJRVXMyY0VJc1QwRkJUM2RKTEV0QlFVdHllVUlzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTFFc1MwRkRhR1Z5ZVVJc1MwRkJTelp3UWl4UFFVRlBaMWNzVTBGQlV5eFRRVUZUTVdoRExFZEJRVWNzVDBGQlQwRXNSVUZCUlhWTUxGRkJRVkVzWVVGQllTeExRVUZMTVVvc1MwRkJTelp3UWl4UFFVRlBhVmNzVlVGQlZTeFRRVUZUTTJoRExFZEJRVWNzVDBGQlQwRXNSVUZCUlhWTUxGRkJRVkVzWVVGQllTeExRVUZMTVVvc1MwRkJTelp3UWl4UFFVRlBiMGtzZFVKQlFYVkNhbmxDTEV0QlFVczJjRUlzVDBGQlQyZEpMRk5CUVZOSkxIVkNRVU5xVFdwNVFpeExRVUZMTm5CQ0xFOUJRVTlyVnl4dlFrRkJiMElzVTBGQlV6Vm9ReXhGUVVGRlF5eEZRVUZGTDBJc1IwRkJSeXhIUVVGSE9FSXNSMEZCUjBNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNVUXNSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4SlFVRkpPVUlzUlVGQlJUWkNMRVZCUVVWbmRVSXNZMEZCWTI1blFpeE5RVUZOTTFBc1IwRkJSMnRETEVWQlFVVklMRVZCUVVVcmRFSXNZMEZCWTI1blFpeE5RVUZOTTFBc1IwRkJSMjFETEVWQlFVVnJRaXhMUVVGTFJTeEpRVUZKZEVRc1JVRkJSV2RETEU5QlFVOURMRVZCUVVWRUxGRkJRVkYxUWl4RlFVRkZMRVZCUVVWQkxFVkJRVVZ5UWl4RlFVRkZjVUlzU1VGQlNTeERRVUZEZUVRc1JVRkJSVU1zUlVGQlJYVkVMRWRCUVVjc1NVRkJTU3RNTEVWQlFVVnlUaXhGUVVGRmMwSXNSMEZCUnl4SFFVRkhlRVFzUjBGQlIzVlFMRVZCUVVVc1QwRkJUM3BPTEVWQlFVVTRaU3hUUVVGVE5XZENMRVZCUVVVc1MwRkJTekpxUXl4TlFVRk5OMmhETEV0QlFVdERMRVZCUVVVMlpTeFRRVUZUY2xJc1JVRkJSU3hMUVVGTGJ6QkNMRTFCUVUwMWFFTXNTVUZCU1VRc1JVRkJSVU1zUjBGQlIwUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVjFVQ3hIUVVGSExFVkJRVVVzUlVGQlJTeFBRVUZQZEZBc1JVRkJSV2RETEZGQlFWRkRMRVZCUVVWRUxFOUJRVTlvUXl4RlFVRkZaME1zVDBGQlQwTXNSVUZCUlVRc1QwRkJUMGdzUlVGQlJVTXNSMEZCUnl4RlFVRkZMRWRCUVVjMFFpeExRVUZMTm5CQ0xFOUJRVTl2Vnl4blFrRkJaMElzVTBGQlV6bG9ReXhGUVVGRlF5eEhRVUZITEU5QlFVODBRaXhMUVVGTE5uQkNMRTlCUVU5clZ5eHZRa0ZCYjBJMWFFTXNSVUZCUlVNc1JVRkJSU3hoUVVNdllqUkNMRXRCUVVzMmNFSXNUMEZCVDNGWExHdENRVUZyUWl4VFFVRlRMMmhETEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVczJjRUlzVDBGQlQydFhMRzlDUVVGdlFqVm9ReXhGUVVGRlF5eEZRVUZGTEcxQ1FVRnRRalJDTEV0QlFVczJjRUlzVDBGQlQzTlhMR2RDUVVGblFtNW5ReXhMUVVGTE5uQkNMRTlCUVU5eFZ5eHJRa0ZCYTBKc1owTXNTMEZCU3pad1FpeFBRVUZQZFZjc1ZVRkJWU3hUUVVGVGFtbERMRWRCUVVjc1QwRkJUM1Y2UWl4dFFrRkJiVUp5ZWtJc1QwRkJUMFlzUzBGQlN6WkNMRXRCUVVzMmNFSXNUMEZCVDNkWExGVkJRVlVzVTBGQlUyeHBReXhIUVVGSExFOUJRVTgyTVVJc2JVSkJRVzFDTnpGQ0xFVkJRVVYxVEN4UlFVRlJMRTFCUVUwc1QwRkJUekZLTEV0QlFVczJjRUlzVDBGQlQzbEpMRmxCUVZsMGVVSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMU1zV1VGRE5WZDBlVUlzUzBGQlN6WndRaXhQUVVGUE1Fa3NWMEZCVnl4VFFVRlRjREJDTEVWQlFVVkRMRWRCUVhkSUxFOUJRWEpJUkN4RlFVRkZOa0lzUzBGQlN6WndRaXhQUVVGUFowa3NVMEZCVTFVc1YwRkJWM0F3UWl4RlFVRkZReXhIUVVGSE5FSXNTMEZCU3pad1FpeFBRVUZQTWxVc2VVSkJRWGxDY21kRExFVkJRVVZCTEVWQlFVVjFUQ3hSUVVGUk1Vb3NTMEZCU3pad1FpeFBRVUZQZVZjc1RVRkJUU3hYUVVGclFtNXBReXhIUVVGSE5rSXNTMEZCU3pad1FpeFBRVUZQZVZjc1RVRkJUU3hMUVVGTGRHZERMRXRCUVVzMmNFSXNUMEZCVHpCWExHbENRVUZwUWl4VFFVRlRjR2xETEVkQlFVY3NUMEZCVHpaQ0xFdEJRVXMyY0VJc1QwRkJUek5ZTEZOQlFWTXZWQ3hGUVVGRkxFMUJRVTAyUWl4TFFVRkxObkJDTEU5QlFVODBWU3dyUWtGQkswSXNZVUZCWVhvclFpeExRVUZMWml4UFFVRlBaU3hMUVVGTE5uQkNMRTlCUVU4eVZ5d3dRa0ZCTUVKeWFVTXNSMEZCUnpaQ0xFdEJRVXMyY0VJc1QwRkJUelJYTEhsQ1FVRjVRblJwUXl4SFFVRkhRU3hIUVVNM1dqWkNMRXRCUVVzMmNFSXNUMEZCVHpaWExEWkNRVUUyUWl4VFFVRlRkbWxETEVWQlFVVkRMRWRCUVVjc1QwRkJUelJDTEV0QlFVczJjRUlzVDBGQlR6TllMRk5CUVZNdlZDeEZRVUZGTEV0QlFVczJRaXhMUVVGTE5uQkNMRTlCUVU4eVZ5d3dRa0ZCTUVKeWFVTXNSVUZCUlVNc1IwRkJSMFFzUjBGRGNrazJRaXhMUVVGTE5uQkNMRTlCUVU4eVZ5d3dRa0ZCTUVJc1UwRkJVM0pwUXl4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkZMRU5CUVVNc1VVRkJVU3hKUVVGSkxFOUJRVThzU1VGQlNTeFBRVUZQTEVsQlFVa3NVMEZCVXl4TFFVRlRReXhGUVVGRk9FSXNSVUZCUlVFc1JVRkJSWFZMTEdOQlFXTXNUMEZCVHpOSkxFdEJRVXRtTEU5QlFVODJReXhUUVVGVE5rY3NZMEZCWXl4UFFVRlBMRTlCUVU5NFN5eEZRVUZGZFV3c1VVRkJVVEZLTEV0QlFVczJjRUlzVDBGQlR6aFhMSE5DUVVGeFFpeFRRVUZUZUdsRExFVkJRVVZETEVkQlFVY3NTVUZCU1Vjc1JVRkJSV3hETEVWQlFVVTRRaXhIUVVGSExFOUJRVWRKTEVsQlFWY3NTMEZCUzBnc1JVRkJSVGhMTEU5QlFVOHNTMEZCU3psTExFVkJRVVYzYVVNc1QwRkJUeXhKUVVGSmVHbERMRVZCUVVWdFRpeFBRVUZQTEVsQlFVbDVNRUlzVFVGQlRUVm9ReXhMUVVGTFJ5eEZRVUZGUml4UFFVRlBlV1VzWVVGQllURmxMRXRCUVV0SExFbEJRVWw1UWl4TFFVRkxhMVVzU1VGQlNYRnVRaXhMUVVGTFpTeGhRVUZoYUdkRExFVkJRVVV3UkN4TFFVRkxlVW9zUzBGQlMzVjRRaXh4UWtGQmNVSkRMRFpEUVVFMlEybzNRaXhMUVVGTE5uQkNMRTlCUVU5RkxFMUJRVTFSTEV0QlFVc3NkVUpCUTNCbGNITkNMRVZCUVVVc1RVRkJUVWtzUlVGQlJXcERMRVZCUVVVeUwwSXNWMEZCVnpSRkxGVkJRVlU1TkVJc1RVRkJUU3hIUVVGSExFbEJRVmN4VEN4RlFVRkZPRUlzUjBGQlIwa3NUMEZCUzNsQ0xFdEJRVXMyY0VJc1QwRkJUelJYTEhsQ1FVRjVRaXhUUVVGVGRHbERMRWRCUVVjc1QwRkJUMEVzUlVGQlJYVk1MRkZCUVZFc1kwRkJZU3hUUVVGVGRrd3NSVUZCUlRsQ0xFZEJRVWNzVDBGQlQwRXNSMEZCUnl4SlFVRkxMRTFCUVUwc1RVRkJUU3hKUVVGSkxFbEJRVXNzUzBGQlN5eE5RVUZOTEVsQlFVa3NTVUZCU3l4TFFVRkxMRTFCUVUwc1NVRkJTU3hKUVVGTExFOUJRVThzVFVGQlRTeEpRVUZKTEZGQlFWRXNUVUZCVFN4TFFVRkxRU3hGUVVGRk5rMHNUMEZCVHl4TFFVRkxOMDBzUlVGQlJYVnJReXhQUVVGUExFbEJRVWwyYTBNc1JVRkJSV3RRTEU5QlFVOHNTVUZCU1hrd1FpeE5RVUZOTTJwRExFbEJRVWs0UWl4RlFVRkZSU3hQUVVGUGVXVXNZVUZCWVhwblFpeFJRVUZQTWtRc1MwRkJTelp3UWl4UFFVRlBPRmNzY1VKQlFYRkNMR3RDUVVGclFqTm5ReXhMUVVGTE5uQkNMRTlCUVU5clNpeHBRa0ZCYVVJc1UwRkJVelV3UWl4RlFVRkZReXhIUVVGSExFOUJRVTgwUWl4TFFVRkxObkJDTEU5QlFVOTVTU3haUVVGWmJqQkNMRVZCUVVWMVRDeFJRVUZSTEUxQlFVMHNWMEZCVjNSTUxFbEJRMjVtTkVJc1MwRkJTelp3UWl4UFFVRlBhVmdzWlVGQlpTeFRRVUZUTTJsRExFZEJRVWNzVDBGQlQwRXNSVUZCUlhWTUxGRkJRVkVzWTBGQll5eExRVUZMTVVvc1MwRkJTelp3UWl4UFFVRlBObFVzVVVGQlVVTXNUMEZCVHpNclFpeExRVUZMTm5CQ0xFOUJRVTlyV0N4WlFVRlpMRk5CUVZNMWFVTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWt2UWl4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJoRExFVkJRVVVzUlVGQlJVRXNSVUZCUlVRc1JVRkJSVU1zU1VGQlNTeERRVUZETEVsQlFVbHBReXhGUVVGRkxFZEJRVWRzUXl4RlFVRkZLMElzUlVGQlJVRXNSVUZCUlRoTExFOUJRVTgxVFN4SFFVRkhMRWRCUVVjMlFpeEZRVUZGSzBzc1QwRkJUeXhKUVVGSk0wc3NSMEZCUjBvc1JVRkJSU3RMTEU5QlFVOHZTeXhGUVVGRlJ5eFBRVUZQTEVsQlFVbERMRVZCUVVVc1QwRkJUMG9zUlVGQlJYTkVMRlZCUVZVc1JVRkJSWFJFTEVWQlFVVkhMRTlCUVU4c1IwRkJSeXhQUVVGUFNDeEhRVUZITmtJc1MwRkJTelp3UWl4UFFVRlBiVmdzVTBGQlV5eFRRVUZUTjJsRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGdlNDeFBRVUZxU0VFc1NVRkJTVGhDTEVWQlFVVTJRaXhMUVVGTE5uQkNMRTlCUVU4d1Z5eHBRa0ZCYVVKd2FVTXNTVUZCU1VFc1JVRkJSVWNzVDBGQlQwWXNTVUZCU1VRc1JVRkJSVUVzUlVGQlJYTkVMRlZCUVZVc1JVRkJSWEpFTEVWQlFVVXNSMEZCUnl4UFFVRlBMMElzU1VGQlNUaENMRVZCUVVVMlFpeExRVUZMTm5CQ0xFOUJRVTh3U1N4WFFVRlhjREJDTEVsQlFWZEJMRWRCUTNoaU5rSXNTMEZCU3pad1FpeFBRVUZQYjFnc1pVRkJaU3hUUVVGVE9XbERMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhIUVVFd1F5eEhRVUYyUTBRc1NVRkJTVGhDTEVWQlFVVTJRaXhMUVVGTE5uQkNMRTlCUVU4d1Z5eHBRa0ZCYVVKd2FVTXNTVUZCVHpkQ0xFZEJRVWMyUWl4RlFVRkZSeXhQUVVGUFJpeEZRVUZGTEVOQlFVTTVRaXhGUVVGRk9FSXNTVUZCU1RsQ0xFVkJRVVU0UWl4SFFVRkhMRWxCUVVsSExFVkJRVVZLTEVWQlFVVkhMRTlCUVU5b1F5eEZRVUZGTmtJc1JVRkJSVUVzUlVGQlJYTkVMRlZCUVZVc1JVRkJSWEpFTEVWQlFVVTVRaXhIUVVGSExFMUJRVTAyUWl4RlFVRkZjMFFzVlVGQlZXeEVMRkZCUVZGS0xFVkJRVVZITEU5QlFVOUdMRWxCUVVrNVFpeEZRVUZGYjBRc1MwRkJTelpqTEUxQlFVMXVaU3hGUVVGRkxFZEJRVWRITEVWQlFVVktMRVZCUVVWSExFOUJRVTlvUXl4RlFVRkZOa0lzUlVGQlJVRXNSVUZCUlhORUxGVkJRVlVzUlVGQlJXNUdMRVZCUVVVNFFpeEZRVUZGTEVkQlFVY3NUVUZCVFVRc1JVRkJSWE5FTEZWQlFWVnNSQ3hKUVVGeFF5eFBRVUZxUTJ4RExFbEJRVWs0UWl4RlFVRkZOa0lzUzBGQlN6WndRaXhQUVVGUE1Fa3NWMEZCVjNBd1FpeEpRVUZYUVN4SFFVRkhOa0lzUzBGQlN6WndRaXhQUVVGUGNWZ3NiMEpCUVc5Q0xFTkJRVU1zUzBGQlR5eE5RVUZOTEV0QlFVc3NUVUZCVFN4TFFVRkxMRTFCUVUwc1MwRkJTeXhOUVVGTkxFdEJRVXNzVFVGQlRTeExRVUZMTEUxQlFVMHNTMEZCVHl4UlFVRlJMRWxCUVVrc1RVRkJUU3hMUVVGTExFOUJRVThzU1VGQlNTeFhRVUZYYkdoRExFdEJRVXMyY0VJc1QwRkJUM05ZTEdWQlFXVXNRMEZCUXl4SlFVRkpMRTlCUXpsbGJtaERMRXRCUVVzMmNFSXNUMEZCVDNWWUxFMUJRVTBzVTBGQlUycHFReXhIUVVGSFFTeEZRVUZGUlN4UFFVRlBSaXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4RFFVRkRMRXRCUVVzdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVNFFpeEZRVUZGUnl4UFFVRlBha01zU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVVMlFpeEZRVUZGSzBzc1QwRkJUemROTEVkQlFVZHJReXhGUVVGRmFrTXNSVUZCUlhOblFpeFhRVUZYTEVkQlFVZDRaU3hGUVVGRkwwSXNSVUZCUlN4SFFVRkhNa1FzUzBGQlN6WndRaXhQUVVGUGNWZ3NiMEpCUVc5Q05XdERMRXRCUVVzc1IwRkJSMmxETEVkQlFVY3NTVUZCU1VFc1JVRkJSV3BETEVWQlFVVXdSQ3hMUVVGTE5uQkNMRTlCUVU5M1dDeFhRVUZYTDJ0RExFbEJRV2RDTEU5QlFWbzRRaXhGUVVGRlowc3NTMEZCU3l4TFFVRlphRXNzUlVGQlJYTklMRXRCUVVzc1MwRkJTekZHTEV0QlFVczJjRUlzVDBGQlQzbFlMR0ZCUVdFc1UwRkJVMjVxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEhRVUZITDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQycERMRWxCUVVrclFpeEZRVUZGTDBJc1IwRkJSekpFTEV0QlFVczJjRUlzVDBGQlQzZFlMRmRCUVZkc2FrTXNSVUZCUlN0TExFOUJRVTgzVFN4SlFVRkpMRTlCUVU4clFpeEZRVUZGYzBnc1MwRkJTeXhMUVVOc1Z6RkdMRXRCUVVzMmNFSXNUMEZCVDNkWUxGZEJRVmNzVTBGQlUyeHFReXhIUVVGSExFZEJRVWRCTEV0QlFVczJRaXhMUVVGTE5uQkNMRTlCUVU5eldDeGxRVUZsTEU5QlFVOXVhRU1zUzBGQlN6WndRaXhQUVVGUGMxZ3NaVUZCWldocVF5eEhRVUZITEVkQlFVZEJMRXRCUVVzMlFpeExRVUZMTm5CQ0xFOUJRVTl4V0N4dlFrRkJiMElzVDBGQlQyeG9ReXhMUVVGTE5uQkNMRTlCUVU5eldDeGxRVUZsYUdwRExFZEJRVWMyUWl4TFFVRkxObkJDTEU5QlFVOXhXQ3h2UWtGQmIwSXZhVU1zUjBGQlJ5eEpRVUZKUXl4RlFVRkZSQ3hGUVVGRmVXVXNWMEZCVnl4SFFVRkhMRWRCUVVjc1IwRkJSM2hsTEVkQlFVY3NTVUZCU1VFc1JVRkJSU3hKUVVGSkwwSXNSVUZCUlRoQ0xFOUJRVlVzU1VGQlNVTXNSMEZCVFM5Q0xFVkJRVVVzVDBGQlRTeEhRVUZISzBJc1IwRkJSeXhKUVVGSlFTeExRVUZGTDBJc1IwRkJSeXhQUVVGVFFTeEZRVUZGTEUxQlFVMHNTMEZCU3l0Q0xFbEJRVWt2UWl4SFFVRkhMRTFCUVV0QkxFZEJRVWNyUWl4RlFVRkZiMGtzVTBGQlV5eEpRVUZKYzNwQ0xHTkJRV01zVDBGQlR6azFRaXhMUVVGTE5uQkNMRTlCUVU5eldDeGxRVUZsYUdwRExFZEJRVWM1UWl4SFFVRkhNa1FzUzBGQlN6WndRaXhQUVVGUE0xZ3NVMEZCVTJ4VExFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTXpaaXhUUVVGVGJGTXNTMEZCU3pad1FpeFBRVUZQYlVvc2QwSkJRWGRDYUhwQ0xFdEJRVXMyY0VJc1QwRkJUMmRKTEZOQlFWTnRRaXgzUWtGRGRtZENhSHBDTEV0QlFVczJjRUlzVDBGQlR6QllMRkZCUVZFc1UwRkJVM0JxUXl4RlFVRkZReXhIUVVGSExFOUJRVTlFTEVkQlFVZERMRVZCUVVWRUxFVkJRVVZwUWl4TlFVRk5hRUlzUjBGQlIwVXNUMEZCVHl4RlFVRkZMRWRCUVVjd1FpeExRVUZMTm5CQ0xFOUJRVTl3VUN4VFFVRlRMRk5CUVZOMFl5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKUXl4RlFVRkZOa0lzUlVGQmMwVXNUMEZCY0VVc1IwRkJSME1zUjBGQlIwRXNSVUZCUlVRc1JVRkJSVWNzVVVGQlVTeEZRVUZGYWtNc1NVRkJTVU1zUlVGQlJUWkNMRVZCUVVWdlRpeFBRVUZQTEVWQlFVVnVUaXhIUVVGSFJDeEZRVUZGYjA0c1QwRkJUMjVPTEVWQlFVVXZRaXhGUVVGRk9FSXNSVUZCUlVjc1QwRkJUMFlzUlVGQlJTOUNMRWxCUVZkRExFZEJRVWN3UkN4TFFVRkxObkJDTEU5QlFVOXFXQ3hQUVVGUExGTkJRVk42VlN4RlFVRkZReXhIUVVGSExFOUJRVTlFTEVWQlFVVjFUQ3hSUVVGUmRFd3NSVUZCUlN4TFFVRkxORUlzUzBGQlN6WndRaXhQUVVGUE1sZ3NWVUZCVlN4VFFVRlRjbXBETEVWQlFVVkRMRWRCUVdsRUxFOUJRVGxEUVN4RlFVRkZMRWxCUVVseFFpeFBRVUZQVHl4TFFVRkxObkJDTEU5QlFVODBXQ3hoUVVGaGNtcERMRWRCUVVjc1MwRkJXVVFzUlVGQlJYVk1MRkZCUVZGMFRDeEZRVUZGTEV0QlFVczBRaXhMUVVGTE5uQkNMRTlCUVU4MldDeFhRVUZYTEZOQlFWTjJha01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRV2xFTEU5QlFUbERLMElzUlVGQlJTeEpRVUZKY1VJc1QwRkJUMDhzUzBGQlN6WndRaXhQUVVGUE5GZ3NZVUZCWVhKcVF5eEhRVUZITEV0QlFWbEVMRVZCUVVWMVRDeFJRVUZSZEV3c1JVRkJSUzlDTEVWQlFVVnhUaXhSUVVGUkxFMUJRVTBzVlVGRE0yUXhTaXhMUVVGTE5uQkNMRTlCUVU4MFdDeGhRVUZoTEZOQlFWTjBha01zUjBGQlJ5eFBRVUZQUlN4UFFVRlBSaXhIUVVGSGRVd3NVVUZCVVN4blEwRkJaME1zVVVGQlVVRXNVVUZCVVN4UlFVRlJMRlZCUVZVeFNpeExRVUZMTm5CQ0xFOUJRVTgxVGl4UFFVRlBOV1FzVDBGQlQxUXNWVUZCVlhGbExFOUJRVThzVTBGQlV6bGtMRVZCUVVWRExFZEJRVWNzVDBGQlQwUXNSVUZCUlRoa0xFOUJRVTgzWkN4SlFVRkpMRk5CUVZORUxFVkJRVVZETEVkQlFVY3NUMEZCVDFjc1RVRkJUVmdzUlVGQlJTeEhRVUZIYzBnc1MwRkJTM1pJTEVsQlFVazJRaXhMUVVGTE5uQkNMRTlCUVU4NFdDeFZRVUZWTEZOQlFWTjRha01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRU3RGTEU5QlFXNUNMRWxCUVd4Q1FTeEhRVUYyUXpoQ0xFVkJRVVUyUWl4TFFVRkxSU3hOUVVGTk4wUXNSMEZCUnpoQ0xFVkJRVVY1YWtNc1VVRkJVWFpzUXl4SFFVRkhaME1zVDBGQlQwWXNTVUZCVHl0S0xGRkJRVkVzVVVGQllUZE1MRVZCUVVVNFFpeEZRVUZGUnl4UlFVRmxNRUlzUzBGQlN6WndRaXhQUVVGUE5VNHNUMEZCVHl4SlFVRkpkbU1zUzBGQlMwTXNTVUZCU1N4RlFVRkZka0lzUlVGQlJTOUNMRWxCUVVrNFFpeEhRVUZITmtJc1MwRkJTelp3UWl4UFFVRlBiVllzVTBGQlV5eFRRVUZUTjJkRExFZEJRVWNzVDBGQlR5eE5RVUZOUVN4RlFVRkZMRWRCUVVkRkxFOUJRVTlHTEVsQlEzQmtOa0lzUzBGQlN6WndRaXhQUVVGUFoxa3NXVUZCV1N4VFFVRlRNV3BETEVkQlFVY3NUMEZCVDFrc1RVRkJUVzVDTEZWQlFWVTRTQ3hMUVVGTGRrb3NTMEZCU3pCTUxGVkJRVlVzUzBGQlN6ZElMRXRCUVVzMmNFSXNUMEZCVDJsWkxHZENRVUZuUWl4WFFVRlhMRTlCUVU5d2FVTXNTMEZCU3paakxFMUJRVTBzVjBGQlZ6ZGpMRXRCUVVzMFNDeFZRVUZWWkN4VFFVRlRMRWxCUVVrNVJ5eExRVUZMY1dsRExFbEJRVWx5YVVNc1MwRkJTelpqTEUxQlFVMHNWMEZCVnpkakxFdEJRVXMwU0N4VlFVRlZkRWdzUzBGQlMzTkpMRTlCUVU4NVFpeFRRVUZUTEV0QlFVdDRSeXhMUVVGTE5uQkNMRTlCUVU5dlNpeG5Ra0ZCWjBKcWVrSXNTMEZCU3pad1FpeFBRVUZQWjBrc1UwRkJVMjlDTEdkQ1FVRm5RbXA2UWl4TFFVRkxObkJDTEU5QlFVOXRXU3hUUVVGVExGTkJRVk0zYWtNc1IwRkJSeXhKUVVGSkxFbEJRVWxETEVWQlFVVXNSVUZCUlM5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVZITEZOQlFWTnFReXhGUVVGRkswSXNSVUZCUlN4SFFVRkhRU3hGUVVGRlJDeEZRVUZGZVdVc1YwRkJWM1puUWl4TFFVRkxMRVZCUVVVc1QwRkJUeXRDTEVkQlFVYzBRaXhMUVVGTE5uQkNMRTlCUVU5dldTeHhRa0ZCY1VJc1YwRkJWM1pwUXl4TFFVRkxORWdzVTBGQlV5eEZRVU0xWkhSSUxFdEJRVXMyY0VJc1QwRkJUM0ZaTEcxQ1FVRnRRaXhYUVVGWExFMUJRVTBzVVVGQlVXeHBReXhMUVVGTE5uQkNMRTlCUVU5dldTeDNRa0ZCZDBKcWFVTXNTMEZCU3pad1FpeFBRVUZQYzFrc1UwRkJVeXhUUVVGVGFHdERMRWRCUVVjc1NVRkJTVU1zUlVGQlJYZHBReXhQUVVGUGVtbERMRWRCUVVjc1QwRkJUeXhIUVVGSFF5eEhRVUZITkVJc1MwRkJTelp3UWl4UFFVRlBkVWtzYjBKQlFXOUNhakJDTEVkQlFVZHBhME1zU1VGQlNXaHJReXhIUVVGSE5FSXNTMEZCU3pad1FpeFBRVUZQZDFrc2FVSkJRV2xDTEZOQlFWTnNhME1zUjBGQlJ5eE5RVUZOTEhsQ1FVRjVRbWxGTEV0QlFVdHFSU3hKUVVGSk5rSXNTMEZCU3pad1FpeFBRVUZQZVZrc2FVSkJRV2xDTEZOQlFWTnVhME1zUjBGQlJ5eE5RVUZOTEcxQ1FVRnRRbWxGTEV0QlFVdHFSU3hKUVVGSk5rSXNTMEZCU3pad1FpeFBRVUZQTUZrc1dVRkJXU3hUUVVGVGNHdERMRWRCUVVjc1QwRkJUMFVzVDBGQlQwWXNSMEZCUjNWTUxGRkJRVkVzWTBGQllTeFRRVUZUZGt3c1JVRkJSVGxDTEVkQlFVY3NUMEZCVDBFc1JVRkJSWGs1UWl4clFrRkRhbU01TlVJc1MwRkJTelp3UWl4UFFVRlBNbGtzWlVGQlpTeFRRVUZUY210RExFZEJRVWNzVDBGQlQwVXNUMEZCVDBZc1IwRkJSM1ZNTEZGQlFWRXNWMEZCVnl4UFFVRlBlV2xDTEdWQlFXVnVjMElzUzBGQlN6WndRaXhQUVVGUE5Ga3NXVUZCV1N4VFFVRlRkR3RETEVWQlFVVkRMRWRCUVhkRUxFOUJRWEpFUVN4RlFVRkZORUlzUzBGQlMwY3NVMEZCVXk5Q0xFZEJRVWMwUWl4TFFVRkxObkJDTEU5QlFVODBXQ3hoUVVGaGNtcERMRWRCUVVjc1RVRkJZVVFzUlVGQlJYVk1MRkZCUVZFc1NVRkJTV3BMTEU5QlFVOHNUVUZCVFhKQ0xFVkJRVVVzUzBGQlMwRXNSVUZCUlN4TFFVRkxMRWxCUVVrc1YwRkJWeXhOUVVGTExGTkJRVk5FTEVWQlFVVkRMRVZCUVVWSExFZEJRVWNzVDBGQlQwZ3NSVUZCUlVjc1JVRkJSWFUzUWl4clFrRkJhVUk1TlVJc1MwRkJTelp3UWl4UFFVRlBObGtzVjBGQlZ5eFRRVUZUZG10RExFZEJRVWNzVDBGQlQwVXNUMEZCVDBZc1JVRkJSU3RMTEU5QlFVOHNTVUZCU1RSM1FpeGpRVUZqZWpkQ0xFOUJRVTlHTEVWQlFVVnZUaXhQUVVGUExFbEJRVWswWjBJc1pVRkROVmx1YzBJc1MwRkJTelp3UWl4UFFVRlBOVTBzVTBGQlV5eFRRVUZUT1dVc1IwRkJPRUlzVDBGQk0wSnRXU3hUUVVGVGJsa3NTMEZCUzBFc1JVRkJSVVVzVDBGQlQwWXNTVUZCVnpaQ0xFdEJRVXRITEZOQlFWTm9ReXhIUVVGSExGbEJRVmxwUlN4TFFVRkxha1VzUjBGQlJ6aGxMRk5CUVZNNVpTeEZRVUZGTEVsQlFVazRaU3hUUVVGVE9XVXNSVUZCUlN4SlFVRkphV3RETEV0QlFVdHdhVU1zUzBGQlN6WndRaXhQUVVGUE9Ga3NWMEZCVnl4VFFVRlRlR3RETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZIT0VJc1JVRkJSVUVzUlVGQlJXbENMRTFCUVUxb1FpeEhRVUZITEVsQlFVa3NTVUZCU1RsQ0xFVkJRVVVzUjBGQlJ5eEZRVUZGUkN4SFFVRkhPRUlzUlVGQlJVY3NVVUZCVVdoRExFVkJRVVU0VEN4TFFVRkxha3NzUlVGQlJYRkRMRk5CUVZOdVJTeEpRVUZuUXl4UFFVRTFRamhDTEVWQlFVVkhMRkZCUVZGb1F5eEZRVUZGT0V3c1MwRkJTMnBMTEVWQlFVVjFTQ3hMUVVGTGRFZ3NTVUZCVnpsQ0xFZEJRVWN3UkN4TFFVRkxObkJDTEU5QlFVOHJXU3hqUVVGakxGTkJRVk42YTBNc1JVRkJSVU1zUjBGQlJ5eEpRVUZIUVN4RlFVRnRReXhQUVVGUFJDeEZRVUY0UXl4cFFrRkJhVUpETEVsQlFVbEJMRVZCUVVVc1EwRkJRMEVzU1VGQmEwSXNTVUZCU1N4SlFVRkpMMElzUjBGQlJ5eEZRVUZGUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZSU3hQUVVGUGFFTXNTVUZCU1N4SFFVRkhMRWxCUVVrNFFpeEZRVUZGT1VJc1IwRkJSeXhEUVVGRExFbEJRVWxwUXl4RlFVRkZTaXhGUVVGRmRVUXNXVUZCV1hSRUxFVkJRVVU1UWl4SlFVRkphVU1zUlVGQlJXeERMRWxCUVVsQkxFVkJRVVZyUXl4SFFVRkhMRTlCUVU4c1IwRkJSMnhETEVWQlFVVTRRaXhGUVVGRlFTeEZRVUZGTkVvc1RVRkJUVEZNTEVWQlFVVXNTVUZEZUdReVJDeExRVUZMTm5CQ0xFOUJRVTluV2l4aFFVRmhMRk5CUVZNeGEwTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlN4SFFVRkhReXhGUVVGRkxFZEJRVWNzUjBGQlJ6WkNMRWRCUVVkRExFVkJRVVVzVDBGQlR5eEZRVUZGTEVsQlFVbEVMRVZCUVVWSExGTkJRVk5HTEVWQlFVVkZMRTlCUVU4c1QwRkJUMjlDTEV0QlFVdERMRWxCUVVsNFFpeEZRVUZGUnl4UFFVRlBSaXhGUVVGRlJTeFJRVUZSTEVsQlFVa3NTVUZCU1VNc1JVRkJSU3hGUVVGRlFTeEZRVUZGU0N4RlFVRkZSU3hQUVVGUExFVkJRVVZETEVsQlFVbHNReXhGUVVGRmEwTXNSMEZCUjBFc1JVRkJSU3hKUVVGSlFTeEZRVUZGTEVWQlFVVkJMRVZCUVVWS0xFVkJRVVZITEU5QlFVOURMRWxCUVVrc1EwRkJRMnBETEVWQlFVVXNSMEZCUjJsRExFVkJRVVVzUlVGQlJTeEpRVUZKTEVsQlFVbERMRVZCUVVVc1JVRkJSVUVzUlVGQlJVb3NSVUZCUlVVc1QwRkJUMFVzU1VGQlNXeERMRVZCUVVWclF5eEZRVUZGTEVkQlFVZHJRaXhMUVVGTFJTeEpRVUZKZEVRc1JVRkJSV3RETEVkQlFVY3NSVUZCUlc1RExFVkJRVVZ0UXl4RlFVRkZMRWRCUVVjc1JVRkJSVzVETEVWQlFVVnRReXhIUVVGSGIybERMRTlCUVU5NmFVTXNSVUZCUlVrc1NVRkJTVWdzUlVGQlJVa3NTMEZCU3l4SlFVRkpRU3hGUVVGRkxFVkJRVVZCTEVWQlFVVnVReXhGUVVGRmFVTXNUMEZCVDBVc1NVRkJTVzVETEVWQlFVVnRReXhIUVVGSGJFTXNSVUZCUld0RExFZEJRVWNzVDBGQlQyeERMRVZCUVVVNFFpeEZRVUZGUlN4VFFVRlRNRUlzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZVck1rSXNUMEZCVHl4SFFVRkhPV2xETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVkt6SkNMRTlCUVU5RExGTkJRVk1zVjBGQlZ5eFBRVUZQTDJsRExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1YwRkJWelV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUFJTeFZRVUZWTEZkQlFWY3NUMEZCVDJocVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGbEJRVmsxTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwMHNaVUZCWlN4VFFVRlROVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVkt6SkNMRTlCUVU4NVN5eFBRVUZQTEZkQlFWY3NUMEZCVDJnMFFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGTkJRemx6UWpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWU3N5UWl4UFFVRlBSeXhUUVVGVExGZEJRVmNzVDBGQlQycHFReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVHl4NVFrRkJlVUlzV1VGQldUY3lRaXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlNzeVFpeFBRVUZQT1Vzc1ZVRkJWV2cwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUFNTeFJRVUZSTEZkQlFWY3NUMEZCVDJ4cVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGZEJRVmMxTWtJc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVXJNa0lzVDBGQlQwY3NZVUZCWVdwcVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWU3N5UWl4UFFVRlBSU3hqUVVGamFHcERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTg1U3l4VlFVTTNWMmcwUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUGRrc3NWMEZCVnl4WFFVRlhMRWxCUVVsd05rSXNSVUZCUlRaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdExMR1ZCUVdVc1IwRkJSM2cwUWl4RlFVRkZMRU5CUVVOQkxFVkJRVVUyUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFVTeHhRa0ZCY1VJek5FSXNSMEZCUnl4SlFVRjFTamxDTEVWQlFXNUtLMElzUlVGQlJUUkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTlMTEdkQ1FVRm5RbWhzUXl4SFFVRkhMRWRCUVVkRExFVkJRVVVzVFVGQlRTeFRRVUZUUVN4RlFVRkZMRWRCUVVjMFFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWU3N5UWl4UFFVRlBUU3hyUWtGQmEwSnFiRU1zUlVGQlJTeFhRVUZYUXl4RlFVRkZMRWRCUVdkQ0xFbEJRV0pFTEVWQlFVVkJMRVZCUVVVc1RVRkJaMEk1UWl4RlFVRkZPRUlzUlVGQlJTeE5RVUZOT1VJc1JVRkJSU3h4UWtGQmNVSTJNRUlzUzBGQlN6Y3dRaXhKUVVGSkxFOUJRVTlCTEVWQlFVVXNSMEZCUnl4TlFVRk5MRWxCUTNCWU1rUXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlVyTWtJc1QwRkJUMHNzWjBKQlFXZENMRk5CUVZOb2JFTXNSMEZCUnl4SlFVRkpOa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZVck1rSXNUMEZCVHpsTExGTkJRVk1zVDBGQlR6YzFRaXhGUVVGRkxFZEJRVWNzU1VGQlNTeEpRVUZKUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZFTEVWQlFVVkhMRTlCUVU5R0xFbEJRVWtzUTBGQlF5eEpRVUZKTDBJc1JVRkJSVGhDTEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhSUVVGUkwwSXNSVUZCUlN4SFFVRkhMRTlCUVU5QkxFbEJRVWt5UkN4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZTc3lRaXhQUVVGUGNrc3NhMEpCUVd0Q0xGTkJRVk4wTmtJc1IwRkJSeXhQUVVGUExFZEJRVWMyUWl4TFFVRkxObkJDTEU5QlFVOXZTaXhuUWtGQlowSnFla0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZVck1rSXNUMEZCVDNaTExHRkJRV0Z3TmtJc1NVRkJTVFpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVkt6SkNMRTlCUVU5TkxHdENRVUZyUWl4VFFVRlRhbXhETEVWQlFVVkRMRWRCUVVjc1QwRkJUMFFzUlVGQlJUWkNMRXRCUVV0M1dpeE5RVUZOVXl4TFFVRkxPV0lzUjBGQlJTeFRRVUZUUVN4SFFVRkhMRTlCUVU5RExFZEJRVWRFTEVWQlFVVXNVVUZCVDBFc1JVRkJSU3hKUVVGSkxFbEJRVWsyUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVExFZEJRVWR5YWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwTXNWVUZCVlN4WFFVRlhMRTlCUVU5MGFrTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFpRVUZaTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTkZMRTlCUVU4c1YwRkJWeXhQUVVGUGRtcERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXROTEdWQlFXVXNVMEZCVXpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRSeXhUUVVGVExGZEJRVmNzVDBGQlQzaHFReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRmxCUVZrMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlYxY1VJc1MwRkJTMDBzWlVGQlpTeFZRVUZWTlRKQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1UwRkJVelV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFNTeFBRVUZQTEZkQlFWY3NUMEZCVDNwcVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUU3hsUVVGbExGTkJRM2c1UWpVeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRTeXhOUVVGTkxGZEJRVmNzVDBGQlR6RnFReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhNelFpeFRRVUZUUnl4WlFVRlplR3BETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOSkxGVkJRVlY2YWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwVXNWVUZCVlhacVF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRUU3haUVVGWkxGZEJRVmNzVDBGQlR6TnFReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMR05CUVdNMU1rSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMDhzVVVGQlVTeFhRVUZYTEU5QlFVODFha01zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWMWNVSXNTMEZCUzAwc1pVRkJaU3hWUVVGVk5USkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5STEZWQlFWVXNWMEZCVnl4UFFVRlBOMnBETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmRYRkNMRXRCUVV0TkxHVkJRV1VzV1VGRGRtVTFNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTFNc1YwRkJWeXhYUVVGWExFOUJRVTg1YWtNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVjFjVUlzUzBGQlMwMHNaVUZCWlN4VFFVRlROVEpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOVkxHRkJRV0VzVjBGQlZ5eFBRVUZQTDJwRExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZkWEZDTEV0QlFVdE5MR1ZCUVdVc1ZVRkJWVFV5UWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYTXpRaXhUUVVGVFZ5eFJRVUZSTEZkQlFWY3NUMEZCVDJoclF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWFZ4UWl4TFFVRkxUeXg1UWtGQmVVSXNWVUZCVlRjeVFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRXU3hYUVVGWExGZEJRVmNzVDBGQlQycHJReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVHl4NVFrRkJlVUlzVTBGRGVHSTNNa0lzUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVXpsTExGZEJRVmNzVjBGQlZ5eEpRVUZKY0RaQ0xFVkJRVVUyUWl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZYVnhRaXhMUVVGTFN5eGxRVUZsZGpSQ0xFVkJRVVVzUjBGRGFVa3NUMEZFT1VnMFFpeExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRVU3haUVVGblJIcHNReXhIUVVGSFJDeEhRVUYwUTBNc1JVRkJSU3hyUTBGQmQwTTRlVUlzUzBGQlN5OTVRaXhKUVVGSlFTeEZRVUZGTEVkQlFVY3NUVUZCVHpaQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTkxMRkZCUVcxRWRHeERMRWRCUVVkRUxFZEJRVGREUXl4RlFVRkZMSGxEUVVFclF6aDVRaXhMUVVGTEwzbENMRXRCUVV0QkxFVkJRVVVzUjBGQlIzVk1MRkZCUVZFc1MwRkJTeXhMUVVGTk1Vb3NTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMDBzWTBGQmRVTjJiRU1zUjBGQlIwUXNSMEZCTTBKRExFVkJRVVVzZFVKQlFUWkNPSGxDTEV0QlFVc3ZlVUlzU1VGQlNVRXNSVUZCUlN4SFFVRkhkVXdzVVVGQlVTeExRVUZMTEV0QlFVc3NTMEZCVFRGS0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTlhMRlZCUTNSa05XeERMRWRCUVVkRUxFZEJSRGhrUXl4RlFVRkZMSEZDUVVNMVpEaDVRaXhMUVVGTEwzbENMRXRCUVV0QkxFVkJRVVVzUjBGQlNUWkNMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWY3pOQ0xGTkJRVk5ETEZsQlFUSkRiR3hETEVkQlFVZEVMRWRCUVdwRFF5eEZRVUZGTERaQ1FVRnRRemg1UWl4TFFVRkxMM2xDTEV0QlFVdEJMRVZCUVVVc1IwRkJTVFpDTEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOVExHVkJRVEJFTVd4RExFZEJRVWRFTEVkQlFUbERReXhGUVVGRkxEQkRRVUZuUkRoNVFpeExRVUZMTDNsQ0xFdEJRVXRCTEVWQlFVVXNTVUZCVjBNc1IwRkJSeXhKUVVGSk5FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVelZMTEd0Q1FVRnJRaXhUUVVGVGREWkNMRWRCUVVjc1QwRkJUeXhIUVVGSE5rSXNTMEZCU3pad1FpeFBRVUZQYjBvc1owSkJRV2RDYW5wQ0xFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTTVTeXhoUVVGaGNEWkNMRWxCUVVrMlFpeExRVUZMYTJ0RExGRkJRVkVzUjBGQlIyeHJReXhMUVVGTGEydERMRkZCUVZGNGJVTXNUMEZCVHl4VFFVRlRVeXhGUVVGRlF5eEhRVUZITEU5QlFVOUJMRWRCUVVjMFFpeExRVUZMYTJ0RExGRkJRVkZETEdWQlFXVXNVMEZCVTJodFF5eEZRVUZGUXl4SFFVRkhMRTlCUVU5RUxFZEJRVWMyUWl4TFFVRkxhMnRETEZGQlFWRkZMRlZCUVZVc1UwRkJVMnB0UXl4SFFVRnJReXhQUVVFdlFqWkNMRXRCUVV0cmEwTXNVVUZCVVVVc1ZVRkJWU3hMUVVGTGFtMURMRWRCUVZWQkxFZEJRVWMyUWl4TFFVRkxhMnRETEZGQlFWRkZMRlZCUVZVc1MwRkJTM0JyUXl4TFFVRkxiMFVzWVVGQllYQkZMRXRCUVV0cmEwTXNVVUZCVVVjc2EwSkJRV3RDTEZOQlFWTnNiVU1zUlVGQlJVTXNSMEZCUnl4SlFVRkpMRTlCUVU4MFFpeExRVUZMYTJ0RExGRkJRVkZGTEZWQlFWVnFiVU1zUlVGQlJVTXNTMEZCU1N4RlFVRkhMRTFCUVUwdlFpeEpRVUZKTEU5QlFVMHNSMEZCU1RKRUxFdEJRVXRyYTBNc1VVRkJVVWtzVFVGQlRTeFRRVUZUYm0xRExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEhRVUZqTEU5QlFWaEJMRVZCUVVWQkxFVkJRVVZCTEVWQlFVVTRRaXhIUVVGSFFTeEZRVUZUTVVJc1QwRkJUMnRDTEZWQlFWVkRMR1ZCUVdVeFFpeExRVUZMWjBNc1JVRkJSVGRDTEVkQlFVYzJRaXhGUVVGRk4wSXNSMEZCUnpaQ0xFVkJRVVUzUWl4SFFVRkhSQ3hGUVVGRkswSXNTVUZCU1RSQ0xFdEJRVXNyVEN4VlFVRlZMRWRCUVVjdlRDeExRVUZMSzB3c1ZVRkJWWGMwUWl4WFFVRlZMRVZCUVVkMmEwTXNTMEZCU3l0TUxGVkJRVlY1TkVJc1lVRkJXU3hGUVVGSGVHdERMRXRCUVVzclRDeFZRVUZWTURSQ0xHTkJRV0VzUlVGQlIzcHJReXhMUVVGTEswd3NWVUZCVlRJMFFpeGxRVUZqTEVWQlFVY3hhME1zUzBGQlN5dE1MRlZCUVZVME5FSXNjMEpCUVhGQ0xFVkJRVWN6YTBNc1MwRkJTeXRNTEZWQlFWVTJORUlzWTBGQllTeEZRVUZITld0RExFdEJRVXNyVEN4VlFVRlZPRFJDTEc5Q1FVRnRRaXhGUVVGSE4ydERMRXRCUVVzclRDeFZRVUZWS3pSQ0xHVkJRV1U1YTBNc1MwRkJTeXRNTEZWQlFWVjNORUlzVjBGQlYzWnJReXhMUVVGTEswd3NWVUZCVlhrMFFpeGhRVUZoZUd0RExFdEJRVXNyVEN4VlFVRlZNRFJDTEdOQlFXTjZhME1zUzBGQlN5dE1MRlZCUVZVME5FSXNjMEpCUVhOQ00ydERMRXRCUVVzclRDeFZRVUZWTWpSQ0xHVkJRV1V4YTBNc1MwRkJTeXRNTEZWQlFWVTJORUlzWVVGQllUVnJReXhMUVVGTEswd3NWVUZCVldjMVFpeHRRa0ZCYlVJc1YwRkJWeXhQUVVGUEwydERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWZFhGQ0xFdEJRVXRMTEdkQ1FVTXpNVU16TWtJc1MwRkJTeXRNTEZWQlFWVnBOVUlzYTBKQlFXdENMRmRCUVZjc1QwRkJUMmhzUXl4TFFVRkxaaXhQUVVGUE5rMHNWMEZCVnl4TlFVRk5PVXdzUzBGQlN5dE1MRlZCUVZWck5VSXNZVUZCWVN4WFFVRlhMRTlCUVU5cWJFTXNTMEZCU3l0TUxGVkJRVlZwTlVJc2NVSkJRWEZDYUd4RExFdEJRVXNyVEN4VlFVRlZiVFZDTEUxQlFVMXNiRU1zUzBGQlN5dE1MRlZCUVZVck5FSXNaVUZCWlRsclF5eExRVUZMSzB3c1ZVRkJWVFkwUWl4aFFVRmhOV3RETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVlozSkNMRkZCUVZGbExGVkJRVlU1TTBJc1MwRkJTeXRNTEZWQlFWVnZOVUlzUjBGQlIyNXNReXhMUVVGTEswd3NWVUZCVlNzMFFpeGxRVUZsT1d0RExFdEJRVXNyVEN4VlFVRlZkelJDTEZWQlFWVjJhME1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWbmNrSXNVVUZCVVdkQ0xFOUJRVTh2TTBJc1MwRkJTeXRNTEZWQlFWVnhOVUlzUzBGQlMzQnNReXhMUVVGTEswd3NWVUZCVlNzMFFpeGxRVUZsT1d0RExFdEJRVXNyVEN4VlFVRlZlVFJDTEZsQlFWbDRhME1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZVck1rSXNUMEZCVHpsTExGTkJRek5sYURSQ0xFdEJRVXNyVEN4VlFVRlZjelZDTEZkQlFWZHliRU1zUzBGQlN5dE1MRlZCUVZWeE5VSXNUVUZCVFhCc1F5eExRVUZMSzB3c1ZVRkJWVzgxUWl4SFFVRkhibXhETEV0QlFVc3JUQ3hWUVVGVmRUVkNMRTFCUVUxMGJFTXNTMEZCU3l0TUxGVkJRVlVyTkVJc1pVRkJaVGxyUXl4TFFVRkxLMHdzVlVGQlZUQTBRaXhoUVVGaGVtdERMRXRCUVV0eE1rSXNTMEZCUzNSeFFpeFZRVUZWS3pKQ0xFOUJRVTlKTEZWQlFWVnNha01zUzBGQlN5dE1MRlZCUVZWM05VSXNUMEZCVDNac1F5eExRVUZMSzB3c1ZVRkJWU3MwUWl4bFFVRmxPV3RETEV0QlFVc3JUQ3hWUVVGVk1qUkNMR1ZCUVdVeGEwTXNTMEZCU3l0TUxGVkJRVlUwTkVJc2NVSkJRWEZDTTJ0RExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZLekpDTEU5QlFVOUhMRmRCUVZkcWFrTXNTMEZCU3l0TUxGVkJRVlY1TlVJc1ZVRkJWU3hYUVVGWExFOUJRVTk0YkVNc1MwRkJTeXRNTEZWQlFWVjNOVUlzVVVGQlVYWnNReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhWeFFpeExRVUZMVFN4bFFVRmxMRmRCUXpOaU5USkNMRXRCUVVzclRDeFZRVUZWTURWQ0xFOUJRVTk2YkVNc1MwRkJTeXRNTEZWQlFWVTBORUlzYzBKQlFYTkNNMnRETEV0QlFVc3JUQ3hWUVVGVmVUVkNMRmxCUVZsNGJFTXNTMEZCU3l0TUxGVkJRVlV5TlVJc1QwRkJUekZzUXl4TFFVRkxLMHdzVlVGQlZYYzFRaXhQUVVGUGRteERMRXRCUVVzclRDeFZRVUZWTkRWQ0xHMUNRVUZ0UWl4WFFVRlhMRWxCUVVsNGJrTXNSVUZCUlRaQ0xFdEJRVXNyVEN4VlFVRlZhVFZDTEc5Q1FVRnZRaXhQUVVGUE4yMURMRWRCUVVkQkxFVkJRVVZyYkVNc1ZVRkJWU3hKUVVGSmNtcERMRXRCUVVzclRDeFZRVUZWTmpWQ0xGTkJRVk0xYkVNc1MwRkJTeXRNTEZWQlFWVTBOVUlzY1VKQlFYRkNNMnhETEV0QlFVc3JUQ3hWUVVGVk9EVkNMRmxCUVZjc1JVRkJSemRzUXl4TFFVRkxLMHdzVlVGQlZTczFRaXhuUWtGQlpTeEZRVUZIT1d4RExFdEJRVXNyVEN4VlFVRlZaelpDTEdOQlFXRXNSVUZCUnk5c1F5eExRVUZMSzB3c1ZVRkJWV2syUWl4WlFVRlhMRVZCUVVkb2JVTXNTMEZCU3l0TUxGVkJRVlZyTmtJc1owSkJRV1VzUlVGQlIycHRReXhMUVVGTEswd3NWVUZCVlcwMlFpeGxRVUZqTEVWQlEzUmxiRzFETEV0QlFVc3JUQ3hWUVVGVmJ6WkNMR0ZCUVZrc1JVRkJSMjV0UXl4TFFVRkxLMHdzVlVGQlZYRTJRaXhoUVVGWkxFVkJRVWR3YlVNc1MwRkJTeXRNTEZWQlFWVnpOa0lzWTBGQllTeEZRVUZIY20xRExFdEJRVXNyVEN4VlFVRlZkVFpDTEdsQ1FVRm5RaXhGUVVGSGRHMURMRXRCUVVzclRDeFZRVUZWZHpaQ0xHZENRVUZuUW5adFF5eExRVUZMSzB3c1ZVRkJWVGcxUWl4WlFVRlpOMnhETEV0QlFVc3JUQ3hWUVVGVkt6VkNMR2RDUVVGblFqbHNReXhMUVVGTEswd3NWVUZCVldjMlFpeGpRVUZqTDJ4RExFdEJRVXNyVEN4VlFVRlZhVFpDTEZsQlFWbG9iVU1zUzBGQlN5dE1MRlZCUVZWck5rSXNaMEpCUVdkQ2FtMURMRXRCUVVzclRDeFZRVUZWYlRaQ0xHVkJRV1ZzYlVNc1MwRkJTeXRNTEZWQlFWVnZOa0lzWVVGQllXNXRReXhMUVVGTEswd3NWVUZCVlhFMlFpeFpRVUZaY0cxRExFdEJRVXNyVEN4VlFVRlZlVFpDTEVsQlFVbDRiVU1zUzBGQlN5dE1MRlZCUVZWM05rSXNaMEpCUVdkQ2RtMURMRXRCUVVzclRDeFZRVUZWT0RWQ0xGZEJRVmMzYkVNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwMHNZMEZETTJVemFrTXNTMEZCU3l0TUxGVkJRVlV3TmtJc1VVRkJVWHB0UXl4TFFVRkxLMHdzVlVGQlZYYzJRaXhuUWtGQlowSjJiVU1zUzBGQlN5dE1MRlZCUVZVck5VSXNaVUZCWlRsc1F5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRVU3haUVVGWk4ycERMRXRCUVVzclRDeFZRVUZWTWpaQ0xHVkJRV1VzVjBGQlZ5eFBRVUZQTVcxRExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTlBMRmRCUVZjMWFrTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMU1zWTBGQll6bHFReXhMUVVGTEswd3NWVUZCVlRRMlFpeE5RVUZOTTIxRExFdEJRVXNyVEN4VlFVRlZkelpDTEdkQ1FVRm5Rblp0UXl4TFFVRkxLMHdzVlVGQlZXYzJRaXhoUVVGaEwyeERMRXRCUVVzclRDeFZRVUZWTWpaQ0xHbENRVUZwUWpGdFF5eExRVUZMSzB3c1ZVRkJWVFkyUWl4UFFVRlBMRmRCUVZjc1NVRkJTWHB2UXl4RlFVRkZOa0lzUzBGQlN5dE1MRlZCUVZWcE5VSXNiMEpCUVc5Q0xGRkJRVkUzYlVNc1IwRkJSelpDTEV0QlFVczJjRUlzVDBGQlR6TllMRk5CUVZNdlZDeEZRVUZGTUc5RExGbEJRVmtzUjBGQlJ5eFJRVU16WlRkdFF5eExRVUZMSzB3c1ZVRkJWU3MyUWl4SlFVRkpPVzFETEV0QlFVc3JUQ3hWUVVGVmR6WkNMR2RDUVVGblFuWnRReXhMUVVGTEswd3NWVUZCVldrMlFpeFhRVUZYYUcxRExFdEJRVXNyVEN4VlFVRlZOalpDTEZOQlFWTTFiVU1zUzBGQlN5dE1MRlZCUVZWbk4wSXNVVUZCVVM5dFF5eExRVUZMSzB3c1ZVRkJWWGMyUWl4blFrRkJaMEoyYlVNc1MwRkJTeXRNTEZWQlFWVnJOa0lzWlVGQlpXcHRReXhMUVVGTGNUSkNMRXRCUVV0MGNVSXNWVUZCVlhNelFpeFRRVUZUUXl4WlFVRlpkR3BETEV0QlFVc3JUQ3hWUVVGVmFUZENMRTlCUVU5b2JrTXNTMEZCU3l0TUxGVkJRVlYzTmtJc1owSkJRV2RDZG0xRExFdEJRVXNyVEN4VlFVRlZiVFpDTEdOQlFXTnNiVU1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTBjc1YwRkJWM2hxUXl4TFFVRkxLMHdzVlVGQlZXczNRaXhMUVVGTGFtNURMRXRCUVVzclRDeFZRVUZWZHpaQ0xHZENRVUZuUW5adFF5eExRVUZMSzB3c1ZVRkJWVzgyUWl4WlFVRlpibTFETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOSkxGTkJRM1JqZW1wRExFdEJRVXNyVEN4VlFVRlZiVGRDTEV0QlFVdHNia01zUzBGQlN5dE1MRlZCUVZWM05rSXNaMEpCUVdkQ2RtMURMRXRCUVVzclRDeFZRVUZWY1RaQ0xGbEJRVmx3YlVNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVnpNMElzVTBGQlUwVXNVMEZCVTNacVF5eExRVUZMSzB3c1ZVRkJWVzgzUWl4SlFVRkpibTVETEV0QlFVc3JUQ3hWUVVGVmR6WkNMR2RDUVVGblFuWnRReXhMUVVGTEswd3NWVUZCVlcwMlFpeGxRVUZsYkcxRExFdEJRVXNyVEN4VlFVRlZielpDTEdGQlFXRnViVU1zUzBGQlN5dE1MRlZCUVZWeE5rSXNXVUZCV1hCdFF5eExRVUZMY1RKQ0xFdEJRVXQwY1VJc1ZVRkJWWE16UWl4VFFVRlRTeXhSUVVGUk1XcERMRXRCUVVzclRDeFZRVUZWY1RkQ0xFMUJRVTF3YmtNc1MwRkJTeXRNTEZWQlFWVjNOa0lzWjBKQlFXZENkbTFETEV0QlFVc3JUQ3hWUVVGVmN6WkNMR0ZCUVdGeWJVTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMWNzVlVGQlZXaHJReXhMUVVGTEswd3NWVUZCVlhNM1FpeFRRVUZUY201RExFdEJRVXNyVEN4VlFVRlZkelpDTEdkQ1FVRm5Rblp0UXl4TFFVRkxLMHdzVlVGQlZYVTJRaXhuUWtGQlowSjBiVU1zUzBGQlMzRXlRaXhMUVVGTGRIRkNMRlZCUVZWek0wSXNVMEZCVTFrc1lVRkRNV2RDYW10RExFdEJRVXNyVEN4VlFVRlZkVGRDTEd0Q1FVRnJRaXhYUVVGWExFbEJRVWx1Y0VNc1JVRkJSU3hIUVVGSFF5eEZRVUZGTkVJc1MwRkJTeXRNTEZWQlFWVjNOMElzZVVKQlFUQkRMRTlCUVdwQ2JuQkRMRWxCUVVsRUxFVkJRVVZETEVWQlFVVkJMRVZCUVVVc1IwRkJSeXhKUVVGWE5FSXNTMEZCU3l0TUxGVkJRVlZ2TlVJc1MwRkJlVU1zVDBGQmNFTXZiVU1zUlVGQlJUUkNMRXRCUVVzclRDeFZRVUZWZVRkQ0xIRkNRVUUwUW5Cd1F5eEZRVUZGY1hCRExGZEJRVmQwY0VNc1NVRkJTVVVzVDBGQlQwUXNSMEZCUjBRc1IwRkRiazQyUWl4TFFVRkxLMHdzVlVGQlZYYzNRaXgxUWtGQmRVSXNWMEZCVnl4SlFVRkpjSEJETEVWQlFVVTJRaXhMUVVGTEswd3NWVUZCVldjMVFpeHhRa0ZCY1VJc1QwRkJSeTlyUXl4TFFVRkxLMHdzVlVGQlZYVTFRaXhOUVVGWkxIRkNRVUZ4UW5CVkxFdEJRVXN2ZVVJc1IwRkJUVFpDTEV0QlFVc3JUQ3hWUVVGVmNUVkNMRXRCUVZjc2EwSkJRV3RDYkZVc1MwRkJTeTk1UWl4SFFVRk5Oa0lzUzBGQlN5dE1MRlZCUVZWdk5VSXNSMEZCVXl4dFEwRkJiVU5xVlN4TFFVRkxMM2xDTEVkQlFVMDJRaXhMUVVGTEswd3NWVUZCVlhjMVFpeFBRVUZoTEdkQ1FVRm5RbkpWTEV0QlFVc3ZlVUlzUjBGQlRUWkNMRXRCUVVzclRDeFZRVUZWYlRWQ0xFMUJRVmtzZVVKQlFYbENhRlVzUzBGQlN5OTVRaXhSUVVFMVJDeEhRVUZuUlRaQ0xFdEJRVXNyVEN4VlFVRlZlVGRDTEdsQ1FVRnBRaXhYUVVGWExFbEJRVWx5Y0VNc1JVRkJSVFpDTEV0QlFVdG1MRTlCUVU4MlF5eFRRVUZUTEU5QlFVOHpSQ3hGUVVGRlFTeEZRVUZGZFhCRExHdENRVUZoTEVkQlEzaGxNVzVETEV0QlFVc3JUQ3hWUVVGVk5EZENMRkZCUVZFemJrTXNTMEZCU3l0TUxGVkJRVlYxTjBJc2IwSkJRVzlDZEc1RExFdEJRVXNyVEN4VlFVRlZOamRDTEZGQlFWRXNVMEZCVTNwd1F5eEZRVUZGUXl4SFFVRkhMRTlCUVU4MFFpeExRVUZMTm5CQ0xFOUJRVTl2U2l4blFrRkJaMEk1TUVJc1JVRkJSVU1zU1VGQlNUUkNMRXRCUVVzclRDeFZRVUZWT0RkQ0xIZENRVUYzUWl4SFFVRkhOMjVETEV0QlFVc3JUQ3hWUVVGVk1ITkNMR3RDUVVGclFpeFRRVUZUZERaQ0xFZEJRVWNzVDBGQlR6WkNMRXRCUVVzclRDeFZRVUZWT0RSQ0xHOUNRVUZ2UWpkclF5eExRVUZMYTJ0RExGRkJRVkZKTEUxQlFVMTBhME1zUzBGQlN5dE1MRlZCUVZVNE4wSXNkMEpCUVhkQ01YQkRMRWRCUVVVc1YwRkJWeXhQUVVGUExFZEJRVWMyUWl4TFFVRkxObkJDTEU5QlFVOXZTaXhuUWtGQlowSnFla0lzUzBGQlN5dE1MRlZCUVZVME4wSXNVVUZCVVhod1F5eFBRVUZOTmtJc1MwRkJTeXRNTEZWQlFWVXJOMElzVlVGQlZUbHVReXhMUVVGTEswd3NWVUZCVlRCelFpeHJRa0ZETTJKNk5FSXNTMEZCU3l0TUxGVkJRVlZuT0VJc2RVSkJRWFZDTEZOQlFWTTFjRU1zUjBGQlJ5eFBRVUZQZVdsRExFOUJRVTgxWjBNc1MwRkJTeXRNTEZWQlFWVnBPRUlzWjBKQlFXZENOM0JETEVkQlFVYzJRaXhMUVVGTEswd3NWVUZCVldzNFFpeGxRVUZsYW05RExFdEJRVXNyVEN4VlFVRlZaemhDTEhWQ1FVRjFRaTl1UXl4TFFVRkxLMHdzVlVGQlZXazRRaXhqUVVGakxGZEJRVmNzUjBGQlIyaHZReXhMUVVGTFppeFBRVUZQTmtNc1ZVRkJWVGxDTEV0QlFVc3JUQ3hWUVVGVmJ6VkNMRWRCUVVjc1QwRkJUMjVzUXl4TFFVRkxLMHdzVlVGQlZYazNRaXh0UWtGQk5VVXNSMEZCYTBkNGJrTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVU3hIUVVGSGJHOURMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZETEdkQ1FVRmxMRVZCUVVkdWIwTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVV2hETEdWQlFXTXNSVUZCUjJ4dFF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJMMElzWVVGQldTeEZRVUZIYm0xRExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRnFReXhuUWtGQlpTeEZRVUZIYW0xRExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRkZMR1ZCUVdNc1JVRkJSM0J2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlJ5eGxRVUZqTEVWQlF6VnBRbkp2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlNTeGxRVUZsZEc5RExFdEJRVXNyVEN4VlFVRlZkelJDTEZkQlFWZDJhME1zUzBGQlN5dE1MRlZCUVZWNU5FSXNZVUZCWVhoclF5eExRVUZMSzB3c1ZVRkJWVFkwUWl4alFVRmpOV3RETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZGRExHZENRVUZuUW01dlF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJhRU1zWlVGQlpXeHRReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSTDBJc1lVRkJZVzV0UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUmFrTXNaMEpCUVdkQ2FtMURMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZGTEdWQlFXVndiME1zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVVjc1kwRkJZM0p2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUmFFUXNUVUZCVFd4c1F5eExRVUZMSzB3c1ZVRkJWVzAxUWl4TlFVRk5iR3hETEV0QlFVc3JUQ3hWUVVGVmJUaENMRkZCUVZFdlF5eEhRVUZIYm14RExFdEJRVXNyVEN4VlFVRlZielZDTEVkQlFVZHViRU1zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVRsRExFdEJRVXR3YkVNc1MwRkJTeXRNTEZWQlFWVnhOVUlzUzBGRGNtVndiRU1zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVVzc1VVRkJVWFp2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlNTeGxRVUZsZEc5RExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRkRMR1ZCUVdWdWIwTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZuY2tJc1VVRkJVV01zV1VGQldUY3pRaXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSVFN4blFrRkJaMElzVjBGQlZ5eFBRVUZQZUc5RExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZjek5DTEZOQlFWTkhMRmxCUVZsNGFrTXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMFVzVlVGQlZYWnFReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSYkVJc1QwRkJUMmh1UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlNTeGxRVUZsZEc5RExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRm9ReXhqUVVGamJHMURMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZOTEd0Q1FVTTFXbmh2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUmFrSXNTMEZCUzJwdVF5eExRVUZMSzB3c1ZVRkJWVzA0UWl4UlFVRlJTU3hsUVVGbGRHOURMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkV2UWl4WlFVRlpibTFETEV0QlFVdHhNa0lzUzBGQlMzUnhRaXhWUVVGVmN6TkNMRk5CUVZOSkxGTkJRVk42YWtNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVXNUNMRkZCUVZFdmJVTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVWtzWlVGQlpYUnZReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSYWtNc1pVRkJaV3B0UXl4TFFVRkxjVEpDTEV0QlFVdDBjVUlzVlVGQlZXZHlRaXhSUVVGUmRVSXNiVUpCUVcxQ2REUkNMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZQTEU5QlFVOTZiME1zUzBGQlN5dE1MRlZCUVZWdE9FSXNVVUZCVVVrc1pVRkJaWFJ2UXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlJTeGpRVUZqY0c5RExFdEJRVXR4TWtJc1MwRkJTM1J4UWl4VlFVRlZaM0pDTEZGQlFWRmhMRmRCUXpGaE5UTkNMRXRCUVVzclRDeFZRVUZWYlRoQ0xGRkJRVkZSTEdsQ1FVRnBRaXhYUVVGWExFOUJRVTh4YjBNc1MwRkJTM0V5UWl4TFFVRkxkSEZDTEZWQlFWVm5ja0lzVVVGQlVXOUNMR0ZCUVdGdU5FSXNTMEZCUzNFeVFpeExRVUZMZEhGQ0xGVkJRVlZ6TTBJc1UwRkJVMHNzVTBGQlV6RnFReXhMUVVGTEswd3NWVUZCVlcwNFFpeFJRVUZSZUVNc1QwRkJUekZzUXl4TFFVRkxLMHdzVlVGQlZXMDRRaXhSUVVGUlNTeGxRVUZsZEc5RExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRkhMR05CUVdOeWIwTXNTMEZCU3l0TUxGVkJRVlZ0T0VJc1VVRkJVVkVzYlVKQlFXMUNNVzlETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU4c1IwRkJSek52UXl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUFF5eDVRa0ZCZVVJc2FVVkJRV2xGTlc5RExFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOUZMR0ZCUVdFM2IwTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUME1zZVVKQlFYbENMRTFCUVUwMWIwTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMGNzY1VKQlFYRkNPVzlETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5RExIbENRVUY1UWl4TlFVRk5OVzlETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5SkxGTkJRVk1zUTBGQlEwTXNVVUZCVVN4RlFVRkZReXhYUVVGWExFVkJRVVZETEZGQlFWRXNSVUZCUlVNc2IwSkJRVzlDTEVWQlFVVkRMRzFDUVVGdFFpeEhRVUZIY0hCRExFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOVZMR05CUVdNc1MwRkRPWE5DY25CRExFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOVhMRmRCUVZjc1UwRkJVMjV5UXl4SFFVRkhMRTlCUVU4MlFpeExRVUZMTm5CQ0xFOUJRVTh6V0N4VFFVRlRiRk1zUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDFVc1kwRkJZMnh5UXl4SlFVRkpOa0lzUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDFrc1owSkJRV2RDTEVkQlFVZDJjRU1zUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJFc1pVRkJaU3hMUVVGTGVIQkRMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTlqTEhWQ1FVRjFRbnB3UXl4TFFVRkxLMHdzVlVGQlZYVTFRaXhQUVVGUGRHeERMRXRCUVVzclRDeFZRVUZWZHpWQ0xGTkJRVk4yYkVNc1MwRkJTeXRNTEZWQlFWVnRPRUlzVVVGQlVYaERMRkZCUVZFeGJFTXNTMEZCU3l0TUxGVkJRVlZ0TlVJc1RVRkJUV3hzUXl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUFpTeHRRa0ZCYlVJeGNFTXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMk1zZDBKQlFYZENMRzFDUVVGdFFucHdReXhMUVVGTFppeFBRVUZQTUhGRExFdEJRemRoTTNCRExFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXBRaXh0UWtGQmJVSTFjRU1zUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJNc2VVSkJRWGxDZW5CRExFdEJRVXNyVEN4VlFVRlZiVGhDTEZGQlFWRjRReXhUUVVGVE1XeERMRXRCUVVzclRDeFZRVUZWYnpWQ0xFbEJRVWtzYlVKQlFXMUNibXhETEV0QlFVdG1MRTlCUVU4NFVpeExRVU5zU3k5UkxFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXJRaXhuUWtGQlowSXNVMEZCVXpGeVF5eEZRVUZGUXl4SFFVRkhORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTk2Vml4TFFVRkxORWNzV1VGQldYcEpMRWRCUVVjc2MwUkJRV2xFTEVsQlFWTkRMRWxCUVVsQkxFVkJRVVUwUWl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUFNTeFRRVUZUUXl4VFFVRlRhSEJETEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5dFFpeFJRVUZSTVhKRExFVkJRVVUwUWl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUFdTeG5Ra0ZCWjBKdWNrTXNSMEZCUnl4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVkQlFVZERMRVZCUVVVc1JVRkJSVUVzUlVGQlJUWkNMRVZCUVVWSExFOUJRVTlvUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSmFVTXNSVUZCUlVvc1JVRkJSVGRDTEVkQlFVZHJReXhGUVVGRmJFTXNSVUZCUlN4RlFVRkZOa0lzUlVGQlJVY3NUMEZCVDNWQ0xFVkJRVVZ5UWl4RlFVRkZUQ3hGUVVGRk4wSXNSVUZCUlN4SFFVRkhMRVZCUVVWelVDeEZRVUZGZEZBc1JVRkJSU3hGUVVGRk5rSXNSVUZCUlVjc1QwRkJUemhTTEVWQlFVVjRSU3hGUVVGRmVrNHNSVUZCUlRkQ0xFVkJRVVVzUjBGQlJ5eEZRVUZGVEN4RlFVRkZjME1zUjBGQlJ5eEZRVUZGUVN4SFFVRkxMRVZCUVVaQkxFbEJRVTBzUlVGQlJYTkNMRWRCUVVjc1JVRkJSVUVzUjBGQlN5eEhRVUZHUVN4SlFVRlBMRVZCUVVWMVVTeEhRVUZITEVWQlFVVkJMRWRCUVVjc1IwRkJSM2hGTEVsQlFVbDNSU3hGUVVGRkxFZEJRVWMxVWl4SlFVRkpjVUlzUlVGQlJTeExRVUZMZUVRc1JVRkJSU3RNTEV0QlFVdG9TeXhGUVVGRmJrTXNSMEZCUjIxRExFVkJRVVZITEVkQlFVZElMRVZCUVVWNVFpeEpRVUZKTEVkQlFVZDZRaXhGUVVGRloxTXNTVUZCU1N4SlFVRkpMRTlCUVU4dlZDeEZRVUZGY1Vvc1MwRkJTeXhMUVVOMFpERkdMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTl2UWl4aFFVRmhMRk5CUVZNMWNrTXNSVUZCUlVNc1IwRkJSeXhQUVVGUE5FSXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUMlVzY1VKQlFYRkNkSEpETEVWQlFVVTBRaXhMUVVGTFppeFBRVUZQTUhGRExFdEJRVXQ0Y2tNc1IwRkJSelpDTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5clFpeG5Ra0ZCWjBJM2NFTXNTMEZCU3pCakxFMUJRVTFETEd0Q1FVRnJRbmhsTEVkQlFVZERMRWxCUVVrMFFpeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBjVUlzWVVGQllTeFRRVUZUTjNKRExFVkJRVVZETEVkQlFVY3NSMEZCUnpSQ0xFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXBRaXh4UWtGQmNVSjRja01zUlVGQlJTeFBRVUZQTkVJc1MwRkJTMllzVDBGQlR6aFNMRXRCUVVzMVV5eEhRVUZITEVsQlFVazVRaXhGUVVGRkxFZEJRWEZHTEU5QlFXeEdNa1FzUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDNOQ0xITkNRVUZ6UWpseVF5eEhRVUZGTEZOQlFWTkJMRWRCUVVjNVFpeEhRVUZIWjBNc1QwRkJUM2xsTEdGQlFXRXpaU3hOUVVGWk9VSXNSMEZETjFreVJDeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBkVUlzZDBKQlFYZENMRk5CUVZNdmNrTXNSVUZCUlVNc1IwRkJSeXhKUVVGSkwwSXNSVUZCUlN4SFFVRnhSU3hQUVVGc1JUSkVMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTl6UWl4elFrRkJjMEk1Y2tNc1IwRkJSU3hUUVVGVFFTeEhRVUZIT1VJc1JVRkJSU3RNTEV0QlFVdHFTeXhOUVVGWk9VSXNSMEZETVVreVJDeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBkMElzZVVKQlFYbENMRk5CUVZOb2MwTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUmVsWXNTMEZCU3l0TUxGVkJRVlZ2TlVJc1NVRkJTVzVzUXl4TFFVRkxLMHdzVlVGQlZUQnpRaXhyUWtGQmEwSXNUVUZCVFN4NVEwRkJlVU1zU1VGQlNYSTJRaXhGUVVGRlJDeEZRVUZGUnl4UFFVRlBha01zUlVGQlJTeEZRVUZGSzBJc1JVRkJSU3hGUVVGRkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRmNVUXNTMEZCU3paakxFMUJRVTFzWjBJc1IwRkJSekpFTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5WExGZEJRVmR1Y2tNc1JVRkJSVU1zUlVGQlJTeE5RVUZOTDBJc1JVRkJSVEpFTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5WExGZEJRVmR1Y2tNc1JVRkJSVU1zUlVGQlJTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGTEVkQlFVY3NTVUZCU1VNc1JVRkJSU3hKUVVGSk9IUkRMRmRCUVZjdmRFTXNSMEZCUjJ0RExFVkJRVVVzUlVGQmJVVXNUMEZCYWtWNVFpeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBjMElzYzBKQlFYTkNPWEpETEVkQlFVVXNVMEZCVTBFc1IwRkJSemRDTEVWQlFVVnBReXhMUVVGTFNpeExRVUZYTjBJc1JVRkJSU3QwUXl4VFFVRlRMRVZCUVVVNWNrTXNTVUZEYkdGNVFpeExRVUZMTUdNc1RVRkJUV2x6UWl4UFFVRlBjMElzYzBKQlFYTkNMRk5CUVZNNWNrTXNSVUZCUlVNc1IwRkJSeXhUUVVGVEwwSXNSVUZCUlN0Q0xFZEJRVWNzUzBGQlN6bENMRVZCUVVVMlFpeEZRVUZGUnl4UlFVRlJMRU5CUVVNc1NVRkJTV3BETEVWQlFVVTRRaXhGUVVGRkswc3NUMEZCVHpWTkxFdEJRVXRwUXl4RlFVRkZlVUlzUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJFc1pVRkJaVzUwUXl4SFFVRkhMRWRCUVVjc1RVRkJUV3RETEVWQlFVVXNUMEZCVDBFc1JVRkJSU3hKUVVGSmVVSXNTMEZCU3pad1FpeFBRVUZQZFVrc2IwSkJRVzlDTHpGQ0xFZEJRVWNzVFVGQlRXZEdMRTFCUVUwc2IwTkJRVzlEYUVZc1IwRkJTU3hQUVVGUEswSXNSVUZCUlRSQ0xFdEJRVXN3WXl4TlFVRk5hWE5DTEU5QlFVOXRRaXhSUVVGUkxFbEJRVWtzU1VGQlNYaDBReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKYVVNc1JVRkJSV3hETEVkQlFVY3NSMEZCUjIxRExFVkJRVVZ1UXl4RlFVRkZMRWRCUVVkM1JDeEZRVUZGZUVRc1JVRkJSU3hKUVVGSmRWQXNSVUZCUlhaUUxFVkJRVVVzU1VGQlNTeEhRVUZITEV0QlFVdDFVQ3hKUVVGSkxFbEJRVWx5VGl4RlFVRkZMRTFCUVUxSUxFVkJRVVZITEVkQlFVY3NSVUZCUlVNc1IwRkJSeXhIUVVGSExFbEJRVWx4UWl4SlFVRkpla0lzUlVGQlJVa3NSMEZCUnl4RlFVRkZMRWxCUVVseFFpeEhRVUZITEVkQlFVY3NTVUZCU1N0TUxFZEJRVWQ0VGl4RlFVRkZlVUlzUjBGQlJ5eEZRVUZGTEVsQlFVa3JUQ3hOUVVOd1lUVk1MRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTl0UWl4TlFVRk5MRmRCUVZjc1NVRkJTVGx3UXl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUFlTeGxRVUZsTEVOQlFVTjRjRU1zUzBGQlN6QmpMRTFCUVUxcGMwSXNUMEZCVDJFc1pVRkJaU3hIUVVGSExFbEJRVWtzU1VGQlNYSnlReXhGUVVGRk5rSXNTMEZCU3pCakxFMUJRVTFwYzBJc1QwRkJUME1zZVVKQlFYbENlSEJETEUxQlFVMHNTVUZCU1doQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEV0QlFVc3NUVUZCVFN4TlFVRk5MRTFCUVUwdlFpeEZRVUZGTEVWQlFVVXNSVUZCUlVFc1JVRkJSVUVzU1VGQlNTeERRVUZETEVsQlFVbERMRVZCUVVVMlFpeEZRVUZGZDFBc1QwRkJUM1pRTEVWQlFVVXZRaXhIUVVGSEswTXNUVUZCVFN4TFFVRkxXU3hMUVVGTE1HTXNUVUZCVFdselFpeFBRVUZQV1N4blFrRkJaMEpzZEVNc1IwRkJSME1zUlVGQlJTeEpRVUZKTEVsQlFVbHBReXhGUVVGRkxFVkJRVVZCTEVWQlFVVnFReXhGUVVGRlowTXNUMEZCVDBNc1NVRkJTU3hEUVVGRExFbEJRVWxETEVWQlFVVnNReXhGUVVGRmFVTXNSMEZCUjNOQ0xFVkJRVVZITEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5aExHVkJRV1ZvY2tNc1VVRkJSeXhKUVVGVGNVSXNSVUZCUlVjc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQyRXNaVUZCWldoeVF5eEhRVUZIUkN4RlFVRkZlVUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTgxVml4SlFVRkpkRUlzVDBGQlQydFpMRXRCUVVzMmVrSXNUVUZCVFN4SFFVRkhOM3BDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4RlFVRkZPWHBDTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4RlFVRkZMM3BDTEV0QlFVczJla0lzVFVGQlRVY3NXVUZCV1N4VFFVRlRkSE5ETEVkQlFVY3NTVUZCU1VNc1JVRkJSVVFzU1VGQlNTeEZRVUZGUVN4RlFVRkZkVUlzUzBGQlN6WmpMRTlCUVU5d1pTeEZRVUZGUXl4SFFVRkhjVmtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNZVUZCWVN4RlFVRkZNVU1zUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYYm5ORExFVkJRVVZ4V1N4TFFVRkxObnBDTEUxQlFVMUZMRmxCUVZseWMwTXNSMEZCUjNOWkxFdEJRVXMyZWtJc1RVRkJUVWtzVjBGQlZ5eFRRVUZUZG5ORExFZEJRVWNzU1VGQlNVTXNSVUZCUlN4RlFVRkZSQ3hGUVVGdlFqbENMRWRCUVd4Q09FSXNSVUZCUlhWQ0xFdEJRVXR4YVVNc1NVRkJTVFZxUXl4TlFVRmhMRVZCUVVWQkxFVkJRVVYxUWl4TFFVRkxObU1zVDBGQlQzQmxMRVZCUVVVNVFpeEhRVUZIYjJFc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQlYyaGlMRXRCUVVzc1JVRkJSVU1zU1VGQlNVUXNSMEZCUjBFc1NVRkJTU3hGUVVGbExGbEJRV0k1UWl4RlFVRlhMRWxCUVZCQkxFbEJRVWtzVFVGQmIwSkJMRVZCUVVVc1JVRkJUU3hoUVVGS09FSXNTVUZCYlVKQkxFVkJRVVVzUzBGQlMzTlpMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWMngxUXl4RlFVRkZiMkVzUzBGQlN6WjZRaXhOUVVGTlJTeFpRVUZaY25ORExFZEJRM28wUW5OWkxFdEJRVXMyZWtJc1RVRkJUVXNzWTBGQll5eFRRVUZUZUhORExFZEJRVWNzU1VGQlNVTXNSVUZCUlN4RlFVRkZSQ3hGUVVGRlFTeEZRVUZGTEVWQlFVVjFRaXhMUVVGTGNXbERMRWxCUVVrMWFrTXNSMEZCUjNOWkxFdEJRVXMyZWtJc1RVRkJUVWNzV1VGQldYUnpReXhIUVVGSFFTeEZRVUZGYzFrc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWExFbEJRVWxzZFVNc1JVRkJSVzloTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1hCelF5eEpRVUZKTEVkQlFVZEVMRVZCUVVVc1IwRkJSemxDTEVWQlFVVkJMRVZCUVVVNFFpeEZRVUZGTEZsQlFWazVRaXhKUVVGSk9FSXNSVUZCUlN4WlFVRlpRU3hMUVVGTGMxa3NTMEZCU3paNlFpeE5RVUZOUXl4WFFVRlhjSE5ETEVWQlFVVnpXU3hMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmx1ZFVNc1IwRkRiRkJ2WVN4TFFVRkxObnBDTEUxQlFVMU5MR0ZCUVdFc1UwRkJVM3B6UXl4SFFVRkhMRWxCUVVsRExFVkJRVVVzUlVGQlJVUXNSVUZCUlN4RlFVRkZMRVZCUVZjc1IwRkJSeXhMUVVGYVFTeEZRVUZGUXl4SFFVRkhSQ3hGUVVGRlFTeEhRVUZYTEVWQlFVVXNSVUZCUlVFc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4RlFVRkZMM3BDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4SlFVRkpPWHBDTEV0QlFVczJla0lzVFVGQlRVVXNXVUZCV1N4RlFVRkZMM3BDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnl4cFFrRkJhVUlzUjBGQlIzWkxMRTFCUVUwM2FFTXNSMEZCUjNOWkxFdEJRVXMyZWtJc1RVRkJUVVVzV1VGQldTeEZRVUZGTDNwQ0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ5eG5Ra0ZCWjBJc1IwRkJSM0J6UXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2EwTXNXVUZCV1c1RExFdEJRVXMyZWtJc1RVRkJUVVVzV1VGQldTeEZRVUZGTDNwQ0xFdEJRVXMyZWtJc1RVRkJUVU1zV1VGQldXNXpReXhIUVVGSExFZEJRVWNzWTBGQll5eFBRVUZQTEVkQlFVZEVMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEpwUXl4WlFVRlplR0VzUlVGQlJYVkNMRXRCUVV0dGNrTXNUVUZCVFRGelF5eEZRVUZGZFVJc1MwRkJTMjl5UXl4SlFVRkpMRWRCUVVjc1RVRkJUWEl3UWl4TFFVRkxObnBDTEUxQlFVMUZMRmxCUVZrc1JVRkJSUzk2UWl4TFFVRkxObnBDTEUxQlFVMURMRmxCUVZsdWMwTXNSMEZCUnl4SFFVTndaa1FzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1RsQ0xFVkJRVVZ4UkN4TFFVRkxObU1zVFVGQlRUZGpMRXRCUVV0eGNrTXNTVUZCU1RWelF5eEhRVUZIZFVJc1MwRkJTM055UXl4TFFVRkxOM05ETEVkQlFVZDFRaXhMUVVGTGIzSkRMRWxCUVVrc1IwRkJSM3AxUXl4SFFVRkhPRUlzUlVGQkswTXNVVUZCTjBOMVFpeExRVUZMYlhKRExFMUJRVTB4YzBNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFuVkRMRmRCUVcxQ2VFTXNTMEZCU3paNlFpeE5RVUZOUlN4WlFVRlpMRVZCUVVVdmVrSXNTMEZCU3paNlFpeE5RVUZOUXl4WlFVRlpibk5ETEVkQlFVY3NSMEZCUnk5Q0xFVkJRVVVzUzBGQlN5eEhRVUZIT0VJc1MwRkJTeXhKUVVOcVRYTlpMRXRCUVVzMmVrSXNUVUZCVFZjc1lVRkJZU3hUUVVGVE9YTkRMRWRCUVVjc1NVRkJTVU1zUlVGQlJTeEZRVUZGUkN4RlFVRkZMRVZCUVVVc1JVRkJWeXhIUVVGSExFdEJRVnBCTEVWQlFVVkRMRWRCUVVkRUxFVkJRVVZCTEVkQlFWZHpXU3hMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmtzUlVGQlJTeEZRVUZGY25ORExFVkJRVVVzUlVGQlJTeFhRVUZYYzFrc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWExFOUJRVThzUjBGQlIzWkxMRTFCUVUwM2FFTXNSMEZCUjNOWkxFdEJRVXMyZWtJc1RVRkJUVVVzV1VGQldTeFhRVUZYTDNwQ0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ5eG5Ra0ZCWjBJc1IwRkJSM0J6UXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2NVTXNXVUZCV1hSRExFdEJRVXMyZWtJc1RVRkJUVVVzWVVGQllYQnpReXhIUVVGSExFZEJRVWNzWTBGQll5eEZRVUZGY1Zrc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWExFOUJRVThzUjBGQlIzQnpReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDYjBNc1dVRkJXU3hEUVVGRExFbEJRVWw2WXl4RlFVRkZPRUlzUlVGQlJYVkNMRXRCUVV0dmNrTXNTVUZCU1N4SFFVRkhMRTFCUVUwemMwTXNSVUZCUlRsQ0xFVkJRVVZ2WVN4TFFVRkxReXhuUWtGQlowSjVReXhWUVVGVk1VTXNTMEZCU3paNlFpeE5RVUZOUlN4aFFVRmhjSE5ETEVkQlFVY3NSMEZCUjBRc1MwRkJTeXhGUVVGRmMxa3NTMEZCU3paNlFpeE5RVUZOUXl4WFFVRlhiSFZETEVsQlFVa3NUVUZCVFN4RFFVTjJaaXhKUVVGSlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVUTJaVVFzUlVGRE1XWTRRaXhIUVVGclFpeExRVUZMTEVkQlFVYzVRaXhIUVVGSExFdEJRVXRETEVkQlFVZEJMRWxCUVVsRUxFZEJRVWNzVDBGQlR5eExRVUZMTEVWQlFVVkJMRWxCUVVrc1MwRkJTME1zUjBGQlIwUXNSMEZCUnl4RlFVRkZReXhKUVVGMVFqWkNMRWRCUVc1Q09VSXNSVUZCUlRoQ0xFVkJRVVYxUWl4TFFVRkxiM0pETEVsQlFVa3NSMEZCUjNoMVF5eEpRVUZQYldFc1MwRkJTME1zWjBKQlFXZENjME1zVlVGQlZTeFJRVUZSTTJNc1JVRkJSVUVzUlVGQlJXOWhMRXRCUVV0RExHZENRVUZuUWpCRExGbEJRVmtzUlVGQlJUTkRMRXRCUVVzMmVrSXNUVUZCVFVVc1lVRkJZWEJ6UXl4SFFVRkhMRWRCUVVjNVFpeEZRVUZGTEUxQlFVMHNSMEZCUnpaQ0xFdEJRVXNzUlVGQlJYTlpMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWMngxUXl4SlFVTXhVRzloTEV0QlFVczJla0lzVFVGQlRWa3NXVUZCV1N4VFFVRlRMM05ETEVkQlFVY3NTVUZCU1VNc1JVRkJSVVFzUlVGQlJYbGxMRmRCUVZjc1IwRkJSM1puUWl4RlFVRkZPRUlzUlVGQlJYbGxMRmRCUVZjc1IwRkJSM1JuUWl4RlFVRkZOa0lzUlVGQlJYbGxMRmRCUVZjc1IwRkJSM0psTEVWQlFVVktMRVZCUVVWNVpTeFhRVUZYTEVkQlFVZHdaU3hGUVVGRlRDeEZRVUZGZVdVc1YwRkJWeXhIUVVGSEwyTXNSVUZCUlRGQ0xFVkJRVVY1WlN4WFFVRlhMRWRCUVVkb1VpeEZRVUZGZWs0c1JVRkJSWGxsTEZkQlFWY3NSMEZCUjNwbExFVkJRVVZCTEVWQlFVVjVaU3hYUVVGWExFZEJRVWR1Unl4TFFVRkxObnBDTEUxQlFVMURMRmRCUVZkdWMwTXNSMEZCUnk5Q0xFZEJRVWNzU1VGQlNVTXNSMEZCUnl4TFFVRkxhVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVnJXU3hMUVVGTE5ucENMRTFCUVUxRkxGbEJRVmxvYzBNc1IwRkJSM0ZDTEVkQlFVY3NTVUZCU1N0TUxFZEJRVWNzUzBGQlMzcE9MRWRCUVVjc1RVRkJUU3hIUVVGSGMxa3NTMEZCU3paNlFpeE5RVUZOWVN4WFFVRlhMRk5CUVZOb2RFTXNSVUZCUlVNc1IwRkJSeXhQUVVGUFFTeEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQlYyaGlMRWxCUVVrc1NVRkRhRmh6V1N4TFFVRkxObnBDTEUxQlFVMWpMRlZCUVZVc1UwRkJVMnAwUXl4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkpMRmRCUVVZclFpeEZRVUZ4Uml4UFFVRjRSUzlDTEVsQlFXVXJRaXhIUVVGSFFTeEpRVUZKTEVWQlFVVXNTVUZCY0VKRUxFVkJRVXNzUjBGQlJrRXNTVUZCVFN4TFFVRnJRa01zUlVGQlJVRXNSVUZCUlN4SlFVRkpMRWxCUVVsRUxFVkJRVVZ6V1N4TFFVRkxObnBDTEUxQlFVMWhMRmRCUVZkb2RFTXNSVUZCUlVNc1IwRkJWUzlDTEVkQlFVYzRRaXhGUVVGRlFTeEhRVUZIYzFrc1MwRkJTelo2UWl4TlFVRk5aU3hYUVVGWExGTkJRVk5zZEVNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1NVRkJTVU1zUlVGQlJUaENMRWRCUVVjc1IwRkJSeXhQUVVGUEwwSXNSVUZCUlRoQ0xFZEJRVWNzUlVGQlJUZENMRWRCUVVjNFFpeEhRVUZITEVWQlFVVkVMRWxCUVVrc1NVRkJTVGRDTEVsQlFVbHRZU3hMUVVGTE5ucENMRTFCUVUxblFpeGhRVUZoTEZOQlFWTnVkRU1zUlVGQlJVTXNSMEZCUnl4UFFVRlBjVmtzUzBGQlN6WjZRaXhOUVVGTmFVSXNZVUZCWVhCMFF5eEZRVUZGUXl4RlFVRkZjVmtzUzBGQlN6WjZRaXhOUVVGTll5eFpRVUZaTXpCQ0xFdEJRVXMyZWtJc1RVRkJUV2xDTEdGQlFXRXNVMEZCVTNCMFF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eEpRVUZKUXl4SlFVRk5MRVZCUVVZMlFpeEhRVUZMTEU5QlFVODVRaXhIUVVGSE9FSXNTVUZCU1N4RlFVRkZReXhIUVVGSExFbEJRVWs1UWl4RlFVRkZPRUlzU1VGQlNTeEZRVUZGT1VJc1NVRkRjbHB0WVN4TFFVRkxObnBDTEUxQlFVMXJRaXhaUVVGWkxGTkJRVk55ZEVNc1JVRkJSVU1zUjBGQlIwRXNSVUZCUlN4SFFVRkhSQ3hIUVVGSExFbEJRVWtzUlVGQlJTeEpRVUZKT1VJc1JVRkJSVGhDTEVsQlFVa3NSMEZCUnl4SlFVRmxMRTlCUVZoQkxFZEJRVWNzVVVGQlpTeExRVUZMT1VJc1JVRkJSVGhDTEVWQlFVVnBhME1zU1VGQlNYRktMRWxCUVZOeWRFTXNSVUZCUlN4SFFVRkhMMElzUlVGQlJTdENMRVZCUVVWelFpeExRVUZMYjNKRExFbEJRVWtzUjBGQlJ5eExRVUZMTTNORExFVkJRVVZETEVWQlFVVnpRaXhMUVVGTGIzSkRMRWxCUVVrc1JVRkJSWHAxUXl4RlFVRkZMRTFCUVUwNFFpeEZRVUZGZFVJc1MwRkJTMjl5UXl4SlFVRkpMRVZCUVVVc1RVRkJUWEl3UWl4TFFVRkxObnBDTEUxQlFVMXZRaXhaUVVGWkxGTkJRVk4yZEVNc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSU3hIUVVGSEswSXNSMEZCUnl4SlFVRkpMRVZCUVVVNVFpeEZRVUZGT0VJc1NVRkJTU3hIUVVGSExFdEJRVzlFTEU5QlFTOURSQ3hGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVNc1YwRkJZU3hSUVVGR0wyRXNSMEZCVjBRc1JVRkJVeXhOUVVGTk4wSXNSVUZCUlRaQ0xFVkJRVVZwYTBNc1NVRkJTWEZLTEVsQlFWTndka01zUlVGQlJTeEhRVUZIUXl4RlFVRkZSQ3hGUVVGRmNVUXNTMEZCUzI5eVF5eEpRVUZKTEVkQlFVY3NUVUZCVFROelF5eEZRVUZGT1VJc1JVRkJSWEZFTEV0QlFVdHZja01zU1VGQlNTeEZRVUZGZUhWRExFVkJRVVVzVDBGQlR6WkNMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEl3UXl4WlFVTTFXVE5ETEV0QlFVczJla0lzVFVGQlRYRkNMRmRCUVZjc1UwRkJVM2gwUXl4RlFVRkZReXhIUVVGSExFOUJRVTlETEU5QlFVOTVaU3hoUVVGaE0yVXNTVUZCU1N4RlFVRkZMRWxCUVVsQkxFbEJRVWtzUlVGQlJTeEpRVUZKUVN4SlFVRkpMRWRCUVVjc1NVRkJTVUVzU1VGQlNTeEhRVUZITEVsQlFVbERMRWxCUVVrc1JVRkJSU3hKUVVGSlFTeEpRVUZKTEVWQlFVVXNTVUZCU1VFc1NVRkJTU3hIUVVGSExFbEJRVWxCTEVsQlFVa3NSMEZCUnl4TlFVRk5jVmtzUzBGQlN6WjZRaXhOUVVGTmMwSXNUMEZCVHl4dFFrRkJiVUo0YzBNc1RVRkJUU3hKUVVGSmNWZ3NTMEZCU3paNlFpeE5RVUZOZFVJc1owSkJRV2RDTEVkQlFVZHdNVUlzUzBGQlN6WjZRaXhOUVVGTmQwSXNZVUZCWVN4SFFVTXhVSEl4UWl4TFFVRkxObnBDTEUxQlFVMTVRaXd3UWtGQk1FSXNVMEZCVXpWMFF5eEZRVUZGUXl4SFFVRkhMRk5CUVZNdlFpeEZRVUZGT0VJc1JVRkJSVU1zUjBGQmIwSXNUMEZCYWtKRUxFVkJRVVZCTEVWQlFVVkZMRTlCUVU5R0xFZEJRVWNzUjBGQlZVTXNSVUZCUlN4VlFVRlZNa29zVFVGQlRUVktMRVZCUVVWSExGRkJRVkZJTEVWQlFVVkJMRVZCUVVVc1IwRkJSeXhUUVVGVFF5eEZRVUZGTEUxQlFVMHNSMEZCUjNGWkxFdEJRVXMyZWtJc1RVRkJUV0VzVjBGQlYyaDBReXhGUVVGRlF5eEhRVUZITEVsQlFVazVRaXhIUVVGSE5rSXNTVUZCU1N4SFFVRkhReXhIUVVGSExFdEJRVXNzUlVGQlJTeFRRVUYzU2l4UFFVRnFTVVFzUjBGQlN5eFRRVUZHUVN4SFFVRlpMRkZCUVZFM1FpeEZRVUZGTEZOQlFYWkRPRUlzUlVGQlJVRXNSMEZCUnl4SFFVRkhMRTlCUVhsRE9VSXNSMEZCUnl4UlFVRlJPRUlzUlVGQlJVRXNSMEZCUnl4RlFVRkZMRXRCUVV0RUxFbEJRVWszUWl4SFFVRkhiMFFzUzBGQlN6WmpMRTFCUVUxd1pTeEZRVUZGTEV0QlFVdEJMRWRCUVVjc1MwRkJTeXhMUVVGTE4wSXNTVUZCU1RoQ0xFZEJRVWR6UWl4TFFVRkxObU1zVFVGQlRXcG5RaXhGUVVGRkxFdEJRVXRCTEVkQlFVY3NTMEZCV1VRc1JVRkJSU3RDTEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVZETEVWQlFVVTRRaXhIUVVGSEwwSXNSVUZCUlRoQ0xFVkJRVVVzU1VGRGRGaHpXU3hMUVVGTE5ucENMRTFCUVUwd1FpeDNRa0ZCZDBJc1UwRkJVemQwUXl4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkpMRmRCUVVZclFpeEZRVUUyUml4UFFVRm9SaTlDTEVsQlFXVXJRaXhIUVVGSFFTeEhRVUZITEVsQlFXcENSQ3hGUVVGTExFZEJRVVpCTEVsQlFVMHNSMEZCWVN4RlFVRkZMRXRCUVVzc1IwRkJSMEVzUlVGQlJYTlpMRXRCUVVzMmVrSXNUVUZCVFhsQ0xEQkNRVUV3UWpWMFF5eEZRVUZGUXl4SFFVRlZMMElzUlVGQlJTeEpRVUZKT0VJc1JVRkJSVUVzUjBGQlIzTlpMRXRCUVVzMmVrSXNUVUZCVFRKQ0xITkNRVUZ6UWl4VFFVRlRPWFJETEVWQlFVVkRMRWRCUVVkeFdTeExRVUZMTm5wQ0xFMUJRVTFaTEZsQlFWa3ZjME1zUjBGQlIwRXNSVUZCUlhOWkxFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ5eEpRVUZKYkhWRExFVkJRVVZ2WVN4TFFVRkxObnBDTEUxQlFVMUZMRmxCUVZrc1QwRkJUM0J6UXl4RlFVRkZjVmtzUzBGQlN6WjZRaXhOUVVGTk1FSXNkMEpCUVhkQ04zUkRMRVZCUVVVNVFpeEhRVUZIYjJFc1MwRkJTelo2UWl4TlFVRk5lVUlzTUVKQlFUQkNOWFJETEVWQlFVVTVRaXhKUVVNMVdHOWhMRXRCUVVzMmVrSXNUVUZCVFRSQ0xEUkNRVUUwUWl4VFFVRlRMM1JETEVWQlFVVkRMRWRCUVVjc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlRCRExFMUJRVTFhTEVWQlFVVkhMRkZCUVZGb1F5eEZRVUZGTEVWQlFVVkJMRVZCUVVVMlFpeEZRVUZGUnl4UFFVRlBhRU1zU1VGQlNVUXNSVUZCUlVNc1IwRkJSMjFoTEV0QlFVczJla0lzVFVGQlRUSkNMSE5DUVVGelFqbDBReXhGUVVGRk4wSXNSMEZCUnpoQ0xFZEJRVWNzVDBGQlR5OUNMRWRCUTNaS2IyRXNTMEZCU3paNlFpeE5RVUZOTmtJc2MwSkJRWE5DTEZOQlFWTm9kVU1zUjBGQlJ5eFRRVUZUUXl4RlFVRkZSQ3hGUVVGRlF5eEhRVUZITEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJTeEZRVUZGUVN4SlFVRkpMRWxCUVVrNFFpeEhRVUZITEVWQlFVVkRMRWRCUVVjdlFpeEpRVUZKSzBJc1JVRkJSVVFzUlVGQlJVa3NSVUZCUld4RExFZEJRVWNyUWl4RlFVRkZSeXhGUVVGRmJFTXNSMEZCU3l4SlFVRkdLMElzUlVGQlRVRXNTMEZCU3l4RlFVRnJSRFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEVWQlFVVjBXQ3hGUVVGRlJ5eFJRVUZSTEVsQlFVbG9ReXhIUVVGRkxFVkJRVWNzVFVGQlRUWkNMRVZCUVVVc1MwRkJTemRDTEVkQlFVVXNSVUZCUnpaQ0xFVkJRVVZCTEVWQlFVVTBTaXhOUVVGTkxFbEJRVWtzU1VGQlNTeEpRVUZKZUVvc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1IwRkJSME1zUlVGQlJTeEZRVUZGUVN4RlFVRkZUQ3hGUVVGRlJ5eFBRVUZQUlN4SlFVRkpTaXhGUVVGRkxFZEJRVWRFTEVWQlFVVjVaU3hYUVVGWGNHVXNSMEZCUjJsWkxFdEJRVXMyZWtJc1RVRkJUWFZDTEdsQ1FVRnBReXhQUVVGb1FuWjJReXhKUVVGNlRpeFhRVUZoTEVsQlFVa3NTVUZCU1RaQ0xFVkJRVVVzUlVGQlJTeEZRVUZGUVN4RlFVRkZRU3hKUVVGSlNTeEZRVUZGU2l4SFFVRlRMRXRCUVV4SkxFVkJRVVZLTEVkQlFXOU1PVUlzUjBGQlNTdENMRVZCUVVVc1JVRkJSU3hKUVVGWE5FSXNTMEZCU3pCakxFMUJRVTFITEd0Q1FVRnJRblJsTEVsQlFVbHJXU3hMUVVGTE5ucENMRTFCUVUwNFFpeHRRa0ZCYlVJc1UwRkJVMnAxUXl4SFFVRkhjMWtzUzBGQlN6WjZRaXhOUVVGTldTeFpRVUZaZWpCQ0xFdEJRVXMyZWtJc1RVRkJUVFpDTEhOQ1FVRnpRbWgxUXl4TFFVTXZaWE5aTEV0QlFVczJla0lzVFVGQlRTdENMRmxCUVZrc1UwRkJVMngxUXl4SFFVRkhMRTlCUVU5RkxFOUJRVTk1WlN4aFFVRmhMRWRCUVVjelpTeEZRVUZGYzFrc1MwRkJTelo2UWl4TlFVRk5kVUlzWjBKQlFXZENNWFJETEVWQlFVVnpXU3hMUVVGTE5ucENMRTFCUVUxM1FpeGhRVUZoTEVkQlFVY3pkRU1zU1VGQlNYTlpMRXRCUVVzMmVrSXNUVUZCVFdkRExHbENRVUZwUWl4VFFVRlRiblZETEVkQlFVY3NUMEZCVDBFc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRYZENMR0ZCUVdFemRFTXNSVUZCUlhOWkxFdEJRVXMyZWtJc1RVRkJUWGRDTEdGQlFXRXNSMEZCUnpOMFF5eEZRVUZGYzFrc1MwRkJTelo2UWl4TlFVRk5kVUlzYVVKQlFXbENjREZDTEV0QlFVczJla0lzVFVGQlRXbERMR3RDUVVGclFpeFRRVUZUY0hWRExFZEJRVWNzU1VGQlNVTXNSVUZCUlZjc1RVRkJUU3hKUVVGSldDeEZRVUZGTEVkQlFVY3NTVUZCU1VFc1JVRkJSU3hIUVVGSExFbEJRVWtzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRkxFVkJRVVZCTEVWQlFVVkJMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGTmtJc1JVRkJSWGxsTEZkQlFWY3NSVUZCUlhablFpeEhRVUZISzBJc1JVRkJSU3hGUVVGRkwwSXNSVUZCUlN4SFFVRkhiMkVzUzBGQlN6WjZRaXhOUVVGTkswSXNXVUZCV1M5MlF5eEhRVUZITEVkQlFVYzRRaXhGUVVGRkxFVkJRVVV2UWl4RlFVRkZMRWRCUVVkdllTeExRVUZMTm5wQ0xFMUJRVTByUWl4WlFVRmpMRWRCUVVZdmRrTXNSMEZCVFN4UFFVRlBPRUlzUlVGQlJYTklMRXRCUVVzc1MwRkRkR1FyVVN4TFFVRkxObnBDTEUxQlFVMXJReXhyUWtGQmEwSXNVMEZCVTNKMVF5eEhRVUZIUVN4RlFVRkZRU3hGUVVGRlozVkNMR05CUVdOdWMwSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNTVUZCU1hSWUxFVkJRVVZITEZGQlFWRXdRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhMUVVGTGRGZ3NSVUZCUlN4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUzBGQlMzUllMRVZCUVVVc1NVRkJTU3hKUVVGSkxFbEJRVWxETEVWQlFVVXNSMEZCUnk5Q0xFVkJRVVVzUlVGQlJTeEZRVUZGUVN4RlFVRkZRU3hKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlcxaExFdEJRVXMyZWtJc1RVRkJUV2RETEdsQ1FVRnBRbTUxUXl4RlFVRkZlV1VzVjBGQlZ5eEZRVUZGZG1kQ0xFVkJRVVVzU1VGQlNXdERMRVZCUVVWcldTeExRVUZMTm5wQ0xFMUJRVTFuUXl4cFFrRkJhVUp1ZFVNc1JVRkJSWGxsTEZkQlFWY3NSVUZCUlhablFpeEZRVUZGTEVsQlFVa3JRaXhGUVVGRlF5eFBRVUZQZVdVc1lVRkJZU3hIUVVGSGVHZENMRVZCUVVWcFF5eEhRVUZIU0N4RlFVRkZMRTlCUVU5QkxFZEJRM1JWY1Zrc1MwRkJTelo2UWl4TlFVRk5iVU1zWlVGQlpTeFRRVUZUZEhWRExFVkJRVVZETEVkQlFVZHhXU3hMUVVGTE5ucENMRTFCUVUxWkxGbEJRVmt2YzBNc1IwRkJSMEVzUlVGQlJYTlpMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWeXhKUVVGSmJIVkRMRVZCUVVWdllTeExRVUZMTm5wQ0xFMUJRVTFGTEZsQlFWa3NUMEZCVDNCelF5eEZRVUZGY1Zrc1MwRkJTelo2UWl4TlFVRk5ZeXhWUVVGVmFuUkRMRVZCUVVVNVFpeEhRVUZIYjJFc1MwRkJTelo2UWl4TlFVRk5ZU3hYUVVGWGFIUkRMRVZCUVVVNVFpeEpRVUZKYjJFc1MwRkJTelo2UWl4TlFVRk5iME1zWlVGQlpTeFRRVUZUZG5WRExFZEJRVFJDTEU5QlFYcENjMWtzUzBGQlN6WjZRaXhOUVVGTlNTeFhRVUZYZG5ORExFZEJRVlZ6V1N4TFFVRkxObnBDTEUxQlFVMXhRaXhYUVVGWGJERkNMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWemw2UWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUVdNdmVrSXNTMEZCU3paNlFpeE5RVUZOY1VNc1lVRkJZU3hUUVVGVGVIVkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEZRVUZGYVVNc1JVRkJSVWdzUlVGQlJVY3NSVUZCUld4RExFVkJRVVZyUXl4SlFVRkpha01zUjBGQlJ6WkNMRVZCUVVWSkxFbEJRVWtzUlVGQlJTeFBRVUZQYkVNc1JVRkJSU3RDTEVWQlFVVTVRaXhIUVVOMldtMWhMRXRCUVVzMmVrSXNUVUZCVFhORExHdENRVUZyUWl4VFFVRlRlblZETEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRWxCUVVscFF5eEZRVUZGTEVWQlFUWkRMRWRCUVVjc1MwRkJPVU5xUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZ0WVN4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZuUWl4TFFVRkxhR0VzUlVGQlJTOUNMRWRCUVVjNFFpeEZRVUZGUXl4TlFVRk5PVUlzUjBGQlJ5eEpRVUZKYVVNc1RVRkJUU3hEUVVGRExFbEJRVWxETEVWQlFVVk1MRVZCUVVWRExFdEJRVXNzUjBGQlJ5eEpRVUZOTEVsQlFVWkpMRWRCUVU4c1YwRkJWeXhMUVVGTFNpeEZRVUZGTDBJc1IwRkJSeXhEUVVGRExFbEJRVWx0UXl4RlFVRkZiRU1zUlVGQlJTeEpRVUZKYTBNc1IwRkJSeXhEUVVGRExFZEJRVWRNTEVWQlFVVkRMRXRCUVU4c1NVRkJSa2tzUlVGQlRTeExRVUZMTEU5QlFVOUVMRVZCUVVWSUxFbEJRVWxKTEVsQlFVa3NSVUZCUlN4SFFVRkhUQ3hGUVVGRlF5eE5RVUZOU1N4RlFVRkZMRTFCUVUwc1NVRkJTVVFzU1VGQllTeEpRVUZOTEV0QlFXWkRMRVZCUVVWTUxFVkJRVVZETEZWQlFXMUNMRTlCUVU5SExFZEJRVWRyV1N4TFFVRkxObnBDTEUxQlFVMTFReXhyUWtGQmEwSXNVMEZCVXpGMVF5eEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSVUZCUldsRExFZEJRVWNzU1VGQlNVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTV3hETEVWQlFVVXNTMEZCU3poQ0xFVkJRVVV2UWl4SFFVRkhPRUlzUlVGQlJVTXNUVUZCVFRsQ0xFZEJRVWRyUXl4SlFVRkpTaXhIUVVGSFJ5eFBRVUZQTEV0QlFVdElMRVZCUVVVdlFpeEhRVUZITEVOQlFVTXNTVUZCU1N4SlFVRkpkMFFzUlVGQlJYWkVMRVZCUVVVc1NVRkJTWFZFTEVkQlFVY3NRMEZCUXl4SFFVRkhNVUlzUlVGQlJVTXNUMEZCVXl4SlFVRkdlVUlzUlVGQlRTeExRVUZMTEU5QlFVOXlRaXhGUVVGRmNVSXNTVUZCU1N4RlFVRkZMRWRCUVVjeFFpeEZRVUZGUXl4TlFVRk5lVUlzUlVGQlJTeE5RVUZOY2tJc1NVRkJTVW9zUjBGQlIwY3NSVUZCUlN4UFFVRlBReXhIUVVNM1ptbFpMRXRCUVVzMmVrSXNUVUZCVFhkRExHMUNRVUZ0UWl4VFFVRlRNM1ZETEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRkhMRTlCUVU5dFlTeExRVUZMTm5wQ0xFMUJRVTExUXl4clFrRkJhMEl4ZFVNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVVc1JVRkJSVU1zUlVGQlJXMWhMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5rTEZGQlFWRXNTVUZCU1Zvc1MwRkJTelo2UWl4TlFVRk5lVU1zYlVKQlFXMUNMRk5CUVZNMWRVTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVVjc1QwRkJUMjFoTEV0QlFVczJla0lzVFVGQlRYVkRMR3RDUVVGclFqRjFReXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSU3hGUVVGRlF5eEZRVUZGYldFc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyWXNVVUZCVVN4SlFVTTFVVmdzUzBGQlN6WjZRaXhOUVVGTk1FTXNjVUpCUVhGQ0xGTkJRVk0zZFVNc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFZEJRVWNzU1VGQlNXbERMRVZCUVVVc1JVRkJSU3hKUVVGSmFrTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmJXRXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVlVGQlZXcGhMRVZCUVVVdlFpeEhRVUZITEVOQlFVTXNTVUZCU1N4SlFVRkpiVU1zUlVGQlJXeERMRVZCUVVVc1NVRkJTV3RETEVkQlFVY3NRMEZCUXl4SFFVRkhUQ3hGUVVGRlF5eFBRVUZUTEVsQlFVWkpMRVZCUVUwc1MwRkJTeXhQUVVGUFJDeEZRVUZGUXl4SlFVRkpMRVZCUVVVc1IwRkJSMHdzUlVGQlJVTXNUVUZCVFVrc1JVRkJSU3hOUVVGTlJDeEpRVUZKTEVsQlFVa3NTVUZCU1hOQ0xFVkJRVVVzUlVGQlJTdE1MRVZCUVVVc1JVRkJWeTlNTEVsQlFVMHNTMEZCWm5KQ0xFVkJRVVZNTEVWQlFVVkRMRTlCUVdkQ2QwNHNSVUZCUlVFc1IwRkJSeXhKUVVGSkxFbEJRVTBzU1VGQlJuQk9MRXRCUVZOS0xFZEJRVWQ1UWl4RlFVRkZMRTlCUVU5MFFpeEhRVUZIYTFrc1MwRkJTelo2UWl4TlFVRk5Na01zZFVKQlFYVkNMRk5CUVZNNWRVTXNSMEZCUnl4SlFVRkpReXhGUVVGRkxFbEJRVWtzUjBGQlIwUXNSVUZCUlN4RFFVRkRRU3hGUVVGRmMxa3NTMEZCU3paNlFpeE5RVUZOTkVNc2RVSkJRWFZDTDNWRExFZEJRVWNzU1VGQlNTeEpRVUZKT1VJc1JVRkJSU3hGUVVGRlFTeEZRVUZGT0VJc1JVRkJSVWNzVDBGQlQycERMRWxCUVVrclFpeEhRVUZITEUxQlFVMHNSMEZCUjBRc1JVRkJSVGxDTEV0QlFVc3JRaXhIUVVGSExFdEJRVXRCTEVkQlFVZEVMRVZCUVVVNVFpeEhRVUZIYlVzc1UwRkJVeXhKUVVGSkxFOUJRVTl3U1N4RlFVRkZMRXRCUTNKamNWa3NTMEZCU3paNlFpeE5RVUZOTmtNc2QwSkJRWGRDTEZOQlFWTm9ka01zUjBGQlJ5eE5RVUZOTEdsQ1FVRnJRa0VzUlVGQlJUWkNMRXRCUVVzMmNFSXNUMEZCVDNWWUxFMUJRVTFxYWtNc1IwRkJSMEVzUlVGQlJYRkpMRmxCUVZscFVTeExRVUZMTm5wQ0xFMUJRVTB6ZEVJc2EwSkJRV3RDTEZOQlFWTjRaU3hIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SlFVRkpaM05ETEZkQlFWZHFjME1zUlVGQlJVY3NVVUZCVVdwRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRoQ0xFVkJRVVZITEU5QlFVOXFReXhKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlRaQ0xFVkJRVVY1WlN4WFFVRlhkbWRDTEVkQlFVY3NSMEZCUnl4SlFVRkpReXhGUVVGRkxFMUJRVTByUlN4TlFVRk5MSEZGUVVGeFJXcEVMRVZCUVVVdlFpeEhRVUZIUXl4RlFVRkZMRTlCUVU4NFFpeEhRVU14VlhGWkxFdEJRVXMyZWtJc1RVRkJUVFJETEhWQ1FVRjFRaXhUUVVGVEwzVkRMRWRCUVVjc1QwRkJSMEVzUlVGQlJUWk1MR05CUVdOdlowTXNWMEZCYTBKcWMwTXNSVUZCUzBFc1JVRkJSVFpNTEdOQlFXTnZha01zYTBKQlFXRXNTVUZCYjBKRExGRkJRVkZzZGtNc1JVRkJSVFpNTEdOQlFXTnhha01zVVVGQlVXeDJReXhGUVVGRk5rd3NZMEZCWTJwTUxFMUJRV0VzU1VGQlNYRnlReXhYUVVGWGFuTkRMRWRCUVUxQkxFVkJRVVUyVEN4alFVRmpNMHdzVDBGQll6SkNMRXRCUVVzd1l5eE5RVUZOYVhOQ0xFOUJRVTkzUWl4NVFrRkJlVUpvYzBNc1NVRkJSelpDTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEhWRFFVRTRReXhKUVVGSmVUQkNMRmRCUVZjc1MwRkJTVE42UWl4TFFVRkxOakpDTEdOQlFXTXNVMEZCVTI1MlF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ6WkRMRXRCUVV0eGRVTXNUMEZCVHl4TFFVRkxjblZETEV0QlFVdHpkVU1zVVVGQlVYUjFReXhMUVVGTGRYVkRMRXRCUVV0MmRVTXNTMEZCUzNkMVF5eFBRVUZQTEVWQlFVVjRkVU1zUzBGQlMzbDFReXhSUVVGUExFVkJRVWQ0ZGtNc1IwRkJSMlVzUzBGQlN6QjFReXhUUVVGVGVuWkRMRVZCUVVWRExFVkJRVVV2UWl4SlFVRkpiMkVzUzBGQlN6WXlRaXhqUVVGalR5eGxRVUZsTEVkQlFVZHdNMElzUzBGQlN6WXlRaXhqUVVGalVTeE5RVUZOTEZOQlFWTXpka01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzUjBGQlIyOWhMRXRCUVVzMk1rSXNZMEZCWTA4c1pVRkJaWFoyUXl4UFFVRlBMRU5CUVVNc1NVRkJTV2hETEVWQlFVVnRZU3hMUVVGTE5qSkNMR05CUVdOUExHVkJRV1Y2V0N4TlFVRXlRaXhQUVVGeVFtbzBRaXhIUVVGSE4wSXNSVUZCUlhONFF5eFRRVUZUZW5aRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGVlF5eEZRVUZGTEU5QlFVOHNTVUZCU1cxaExFdEJRVXMyTWtJc1kwRkJZMjUyUXl4RlFVRkZReXhGUVVGRkwwSXNTVUZCU1c5aExFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZiWGRETEV0QlFVc3NWMEZCVnpkMVF5eExRVUZMZVZRc1VVRkJVU3hKUVVGSk9FUXNTMEZCU3pZeVFpeGpRVUZqVHl4bFFVRmxkblpETEZGQlFWRnRXU3hMUVVGTE5qSkNMR05CUVdOUExHVkJRV1Y2YkVNc1MwRkJTMnhLTEU5QlEzWXpRblZZTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVk9Fb3NUVUZCVFN4WFFVRlhMRTlCUVU4clR5eExRVUZMTmpKQ0xHTkJRV05STEUxQlFVMDFkVU1zUzBGQlMzRjFReXhQUVVGUGNuVkRMRXRCUVV0M2RVTXNUMEZCVDNoMVF5eExRVUZMZFhWRExFdEJRVXQyZFVNc1MwRkJTM2QxUXl4VFFVRlRhak5DTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVksxVXNUVUZCVFN4WFFVRlhlbFFzUzBGQlMzRjFReXhQUVVGUExFdEJRVXR5ZFVNc1MwRkJTM04xUXl4UlFVRlJkSFZETEV0QlFVdDFkVU1zUzBGQlMzWjFReXhMUVVGTGQzVkRMRTlCUVU4c1JVRkJSWGgxUXl4TFFVRkxlWFZETEZGQlFVOHNSMEZCU1d3elFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWVzkzUXl4VlFVRlZMRmRCUVZjc1QwRkJUemwxUXl4TFFVRkxjWFZETEZGQlEyaFVPVEpDTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVlozZERMRk5CUVZNc1UwRkJVM3AyUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnpaRExFdEJRVXR4ZFVNc1QwRkJUemt5UWl4TFFVRkxObnBDTEUxQlFVMDBReXgxUWtGQmRVSXZkVU1zUjBGQlIyVXNTMEZCUzNkMVF5eFpRVUZQTEVsQlFWTjBka01zUlVGQlJVRXNSVUZCUlN4RlFVRkZZeXhMUVVGTGRYVkRMRlZCUVVzc1NVRkJVM0I0UXl4RlFVRkZOa01zUzBGQlMzZDFReXhQUVVGUGNuaERMRVZCUVVVMlF5eExRVUZMY1hWRExFOUJRVTlxZGtNc1QwRkJUMWtzUzBGQlMzTjFReXhSUVVGUmRIVkRMRXRCUVV0M2RVTXNVVUZCVVdvelFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWWEYzUXl4UFFVRlBMRmRCUVZjc1QwRkJUeTkxUXl4TFFVRkxkWFZETEUxQlFVMW9NMElzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWemQwTXNUMEZCVHl4VFFVRlRMM1pETEVkQlFVZGxMRXRCUVV0MWRVTXNTMEZCUzNSMlF5eEhRVUZIYzFrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVjFkME1zVFVGQlRTeFhRVUZYYW5aRExFdEJRVXR6ZFVNc1VVRkJVWFIxUXl4TFFVRkxkM1ZETEZGQlFWRnFNMElzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWM2QwTXNWVUZCVlN4WFFVRlhMRTlCUVU5c2RrTXNTMEZCUzNOMVF5eFRRVU4wWkM4eVFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWWGwzUXl4VlFVRlZMRk5CUVZOc2QwTXNSMEZCUjJVc1MwRkJTM04xUXl4UlFVRlJjblpETEVkQlFVZHpXU3hMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlRCM1F5eFJRVUZSTEZOQlFWTnVkME1zUjBGQlIyVXNTMEZCUzNOMVF5eFRRVUZUY25aRExFVkJRVVUyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXR6ZFVNc1UwRkJVM1IxUXl4TFFVRkxkWFZETEU5QlFVOW9NMElzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZVeWQwTXNUVUZCVFN4WFFVRlhMRTlCUVU5eWRrTXNTMEZCUzNOMVF5eFRRVUZUZEhWRExFdEJRVXQxZFVNc1RVRkJUV2d6UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZUUjNReXhSUVVGUkxGZEJRVmNzVDBGQlQzUjJReXhMUVVGTGMzVkRMRkZCUVZGMGRVTXNTMEZCUzNWMVF5eE5RVUZOYUROQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZObmRETEZOQlFWTXNWMEZCVnl4UFFVRlBkblpETEV0QlFVdDVkVU1zVVVGQlVTeEZRVUZGZW5WRExFdEJRVXR6ZFVNc1UwRkJVM1IxUXl4TFFVRkxjM1ZETEZGQlFWRjBkVU1zUzBGQlMzVjFReXhOUVVOMFltZ3pRaXhMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlRoM1F5eHJRa0ZCYTBJc1UwRkJVM1ozUXl4SFFVRkhMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlF5eEZRVUZGTEVWQlFVVnBReXhGUVVGRkxFVkJRVVVzUlVGQlJVRXNSMEZCUnl4TFFVRkxTQ3hGUVVGRlJ5eEpRVUZyUTJ4RExFbEJRVTBzUzBGQmNFTXJRaXhGUVVGRll5eExRVUZMY1hWRExFOUJRVTl5ZFVNc1MwRkJTM04xUXl4alFVRjFRaXhGUVVGRmFuWkRMRVZCUVhWRkxFZEJRWEpGTEV0QlFVdElMRWxCUVd0REwwSXNTVUZCVFN4TFFVRndReXRDTEVWQlFVVmpMRXRCUVV0eGRVTXNUMEZCVDNKMVF5eExRVUZMYzNWRExHTkJRWFZDTEVkQlFVZHNlRU1zU1VGQlRTeEpRVUZHT0VJc1NVRkJVU3hIUVVGTkxFdEJRVXRCTEVWQlFVVXNTVUZCU1Vjc1JVRkJSU3hGUVVGRkxFVkJRVVZCTEVkQlFVY3NTMEZCUzBnc1JVRkJSVWNzU1VGQmEwTnFReXhKUVVGTkxFdEJRWEJET0VJc1JVRkJSV01zUzBGQlMzRjFReXhQUVVGUGNuVkRMRXRCUVV0emRVTXNZMEZCZFVJc1JVRkJSV3AyUXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhKUVVGSlNDeEZRVUZGTEU5QlFVOUVMRVZCUVVVNVFpeEpRVUZKTEVWQlFVVkRMRWxCUVVrc1IwRkJSekJFTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTEN0RFFVRXJRM3BYTEV0QlFVdDVkVU1zVVVGQlR5eEhRVU4wV213elFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWU3QzUXl4M1FrRkJkMElzVTBGQlUzaDNReXhIUVVGSExFOUJRVTlsTEV0QlFVdDNka01zYlVKQlFXdENMRk5CUVZOMGQwTXNSVUZCUlM5Q0xFZEJRVWNzVDBGQlQyOWhMRXRCUVVzMmVrSXNUVUZCVFdsQ0xHRkJRV0Z1ZEVNc1JVRkJSUzlDTEVWQlFVVTRRaXhQUVVGTmMxa3NTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZuZUVNc2FVSkJRV2xDTEZOQlFWTjZkME1zUjBGQlJ5eEpRVUZKUXl4RlFVRkZZeXhMUVVGTGNYVkRMRTlCUVU5c2VFTXNSVUZCUlRaRExFdEJRVXR6ZFVNc1VVRkJVWFIxUXl4TFFVRkxjM1ZETEZOQlFWTXNSVUZCUlN4SlFVRkpMRWxCUVVsc2VFTXNSVUZCUlN4RlFVRkZhVU1zUlVGQlJTeEZRVUZGUXl4RlFVRkZia01zUlVGQlJTeEZRVUZGYlVNc1IwRkJSMjVETEVWQlFVVnRReXhKUVVGSmJFTXNSVUZCUlVFc1IwRkJSeXhGUVVGRk9FSXNSVUZCUlVrc1IwRkJSMFFzUlVGQlJVRXNSMEZCUnl4RlFVRkZTQ3hGUVVGRlNTeEZRVUZGTEVkQlFVY3NUMEZCVDB3c1JVRkJSVGRDTEVWQlFVVnBReXhKUVVGSmExa3NTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZwZUVNc1YwRkJWeXhYUVVGWExFdEJRU3RDTEVsQlFURkNNM1pETEV0QlFVdHhkVU1zVDBGQlQzSjFReXhMUVVGTGMzVkRMRlZCUVdOMGRVTXNTMEZCUzNOMVF5eFZRVUZWZEhWRExFdEJRVXR6ZFVNc1YwRkRjR0l2TWtJc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVnJlRU1zWVVGQllTeFRRVUZUTTNkRExFZEJRVWNzUzBGQlN5eEpRVUZKUVN4SFFVRkhaU3hMUVVGTGMzVkRMRlZCUVZWeWRrTXNTMEZCU3l4RlFVRkZaU3hMUVVGTGMzVkRMRmRCUXpkR0x6SkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWYlhoRExIRkNRVUZ4UWl4WFFVRlhMRWxCUVVrMWQwTXNSVUZCUldVc1MwRkJTM0YxUXl4UFFVRlhiblpETEVWQlFVVkVMRVZCUVVWbExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGUGJuaERMRVZCUVVrc1NVRkJSaXRDTEVWQlFVMHNUMEZCUnl4SlFVRkpRU3hIUVVGVFl5eExRVUZMYzNWRExGTkJRVk1zUlVGQlJYaDBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGRYVkRMRTFCUVUxd2VFTXNTVUZCYzBKQkxFbEJRVTBzUzBGQk1VSXJRaXhGUVVGRlJDeEZRVUZGWlN4TFFVRkxjM1ZETEZGQlFWRXNUVUZCWlN4RlFVRkxMRWxCUVVsd2RrTXNSMEZCVTJNc1MwRkJTM04xUXl4VFFVRlRMRVZCUVVWNGRFTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTGMzVkRMRk5CUVZOMGRVTXNTMEZCUzNWMVF5eE5RVUZOY0hoRExFbEJRWE5DUVN4SlFVRk5MRXRCUVRGQ0swSXNSVUZCUlVRc1JVRkJSV1VzUzBGQlMzTjFReXhSUVVGUkxFMUJRV1VzUjBGQlRTeEpRVUZKY0haRExFZEJRVk5qTEV0QlFVdHpkVU1zVTBGQlV5eEZRVUZGZUhSRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzNOMVF5eFRRVUZUZEhWRExFdEJRVXQxZFVNc1RVRkJUWEI0UXl4SlFVRnpRa0VzU1VGQlRTeExRVUV4UWl0Q0xFVkJRVVZFTEVWQlFVVmxMRXRCUVV0emRVTXNVVUZCVVN4TlFVRmxMRWRCUVUwc1NVRkJTWEIyUXl4SFFVRlRZeXhMUVVGTGMzVkRMRk5CUVZNc1JVRkJSWGgwUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXR6ZFVNc1UwRkRhbWRDZEhWRExFdEJRVXQxZFVNc1RVRkJUWEI0UXl4SlFVRnpRa0VzU1VGQlRTeEpRVUV4UWl0Q0xFVkJRVVZFTEVWQlFVVmxMRXRCUVV0emRVTXNVVUZCVVN4TlFVRmpMRWRCUVUwc1NVRkJTWEIyUXl4SFFVRlRZeXhMUVVGTGMzVkRMRk5CUVZNc1JVRkJSWGgwUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXR6ZFVNc1UwRkJVM1IxUXl4TFFVRkxkWFZETEUxQlFVMXdlRU1zU1VGQlNTeEpRVUZGTmtNc1MwRkJTM04xUXl4VFFVRlRMRVZCUVVVc1MwRkJTM0oyUXl4RlFVRkZaU3hMUVVGTGMzVkRMRmxCUVZrc1MwRkJTM0oyUXl4RlFVRkZaU3hMUVVGTGMzVkRMRmxCUVZrc1MwRkJTM0oyUXl4RlFVRkZaU3hMUVVGTGMzVkRMRmxCUVZrc1MwRkJTM0oyUXl4RlFVRkZaU3hMUVVGTGMzVkRMRmxCUVZrc1MwRkJTM0oyUXl4RlFVRkZaU3hMUVVGTGMzVkRMRmxCUVZsNGRFTXNTMEZCUzJkV0xGRkJRVkZUTEZGQlFVOHNSMEZCU1hwV0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzNOMVF5eFRRVUZUZEhWRExFdEJRVXQxZFVNc1RVRkJZWEI0UXl4UlFVRkhiMkVzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWdmVFTXNiVUpCUVcxQ2RqUkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWYlhoRExIRkNRVUZ4UW5RMFFpeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWWEY0UXl3eVFrRkJNa0lzVjBGQlZ5eFBRVUZQTDNaRExFdEJRVXMyZGtNc2RVSkJRWFZDZG05RExGbEJRMnBwUW1sUkxFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZjM2hETEhsQ1FVRjVRaXhYUVVGWExFOUJRVTlvZDBNc1MwRkJTemgyUXl4eFFrRkJjVUo0YjBNc1dVRkJXV2xSTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVmRYaERMRzFDUVVGdFFpeFhRVUZYTEVsQlFVbG9lRU1zUlVGQlJXVXNTMEZCU3paMlF5eDFRa0ZCZFVJc1QwRkJUelYzUXl4SlFVRkpMRWxCUVUwc1JVRkJSa0VzU1VGQlRYTlpMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWZDNoRExIRkNRVUZ4UWl4WFFVRlhMRTlCUVU5c2QwTXNTMEZCUzNkMlF5eHJRa0ZCYTBKcU5FSXNTMEZCU3paNlFpeE5RVUZOWVN4aFFVRmhNVEJDTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVmVYaERMREpDUVVFeVFpeFhRVUZYTEU5QlFVOXVkME1zUzBGQlMzZDJReXhyUWtGQmEwSnFORUlzUzBGQlN6WjZRaXhOUVVGTmVVSXNORUpCUXk5aWRERkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWTUhoRExHMUNRVUZ0UWl4WFFVRlhMRTlCUVU5d2QwTXNTMEZCUzNkMlF5eHJRa0ZCYTBKcU5FSXNTMEZCU3paNlFpeE5RVUZOWXl4WlFVRlpNekJDTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVk1uaERMSGxDUVVGNVFpeFhRVUZYTEU5QlFVOXlkME1zUzBGQlMzZDJReXhyUWtGQmEwSnFORUlzUzBGQlN6WjZRaXhOUVVGTk1FSXNNRUpCUVRCQ2RqRkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWTkhoRExHMUNRVUZ0UWl4WFFVRlhMRTlCUVU5MGQwTXNTMEZCUzNkMlF5eHJRa0ZCYTBKcU5FSXNTMEZCU3paNlFpeE5RVUZOWjBJc1pVRkJaVGN3UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZUWjRReXgxUWtGQmRVSXNWMEZCVnl4UFFVRlBkbmRETEV0QlFVdDVka01zZDBKQlFYZENiRFJDTEV0QlFVczJla0lzVFVGQlRYRkNMR0ZCUTNKa2JERkNMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWT0hoRExIbENRVUY1UWl4WFFVRlhMRTlCUVU5NGQwTXNTMEZCUzNsMlF5eDNRa0ZCZDBKc05FSXNTMEZCU3paNlFpeE5RVUZOTUVJc01FSkJRVEJDZGpGQ0xFdEJRVXMyTWtJc1kwRkJZekYyUXl4VlFVRlZLM2hETEZWQlFWVXNWMEZCVnl4SlFVRkplSGhETEVWQlFVVmxMRXRCUVV0eGRVTXNUMEZCVDNKMVF5eExRVUZMYzNWRExGRkJRVkVzUjBGQlowVXNUMEZCTjBSMGRVTXNTMEZCUzNOMVF5eFRRVUZUTEVWQlFVVjRkRU1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxjM1ZETEZOQlFWTjBkVU1zUzBGQlMzVjFReXhOUVVGaGRIWkRMRWRCUVVkeldTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWV2Q1UXl4WFFVRlhMRmRCUVZjc1NVRkJTWHA0UXl4RlFVRkZaU3hMUVVGTGNYVkRMRTlCUVU5eWRVTXNTMEZCUzNOMVF5eFJRVUZSTEVkQlFVZHdka01zUlVGQlJXTXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGblJTeFBRVUUzUkhSMVF5eExRVUZMYzNWRExGTkJRVk1zUlVGQlJYaDBReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdHpkVU1zVTBGQlUzUjFReXhMUVVGTGRYVkRMRTFCUVdGMGRrTXNSMEZCUnl4RlFVRkZReXhIUVVGSExFZEJRM0JsY1Zrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVnBlVU1zVjBGQlZ5eFhRVUZYTEVsQlFVa3hlRU1zUlVGQlJXVXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGSGNIWkRMRVZCUVVWakxFdEJRVXR4ZFVNc1QwRkJUM0oxUXl4TFFVRkxjM1ZETEZGQlFWRXNSMEZCUjI1NFF5eEZRVUZGTmtNc1MwRkJTM0YxUXl4UFFVRlBjblZETEV0QlFVdHpkVU1zVVVGQlVTeEhRVUZIYkhoRExFVkJRVVUwUXl4TFFVRkxjWFZETEU5QlFVOXlkVU1zUzBGQlMzTjFReXhSUVVGUkxFZEJRV2RGTEU5QlFUZEVkSFZETEV0QlFVdHpkVU1zVTBGQlV5eEZRVUZGZUhSRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzNOMVF5eFRRVUZUZEhWRExFdEJRVXQxZFVNc1QwRkJZWFIyUXl4SFFVRkhMRVZCUVVWRExFZEJRVWNzUlVGQlJTOUNMRWRCUVVjc1IwRkJSME1zUjBGQlJ5eE5RVUZOTEVkQlFVZHRZU3hMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVld0NVF5eFhRVUZYTEZkQlFWY3NTVUZCU1RONFF5eEZRVUZGWlN4TFFVRkxNbmRETEdGQlFXRjZlRU1zUlVGQlJXTXNTMEZCU3pKM1F5eGhRVUZoTEU5QlFVOXdOVUlzUzBGQlN6WjZRaXhOUVVGTllTeFhRVUZYYUhSRExFVkJRVVZETEVsQlF6ZFpjVmtzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZWdGVVTXNhVUpCUVdsQ0xGZEJRVmNzU1VGQlNUVjRReXhGUVVGRlpTeExRVUZMTW5kRExHRkJRV0Y2ZUVNc1JVRkJSV01zUzBGQlN6SjNReXhoUVVGaExFOUJRVTl3TlVJc1MwRkJTelo2UWl4TlFVRk5lVUlzTUVKQlFUQkNOWFJETEVWQlFVVkRMRWxCUVVseFdTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWVzk1UXl4VFFVRlRMRmRCUVZjc1NVRkJTVGQ0UXl4RlFVRkZaU3hMUVVGTGNYVkRMRTlCUVU5eWRVTXNTMEZCUzNOMVF5eFJRVUZSTEVkQlFXZEZMRTlCUVRkRWRIVkRMRXRCUVV0emRVTXNVMEZCVXl4RlFVRkZlSFJETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTM04xUXl4VFFVRlRkSFZETEV0QlFVdDFkVU1zVFVGQllYUjJReXhIUVVGSExFbEJRVWtzU1VGRGNsUnpXU3hMUVVGTE5qSkNMR05CUVdNeGRrTXNWVUZCVlhGNVF5eFZRVUZWTEZkQlFWY3NTVUZCU1RsNFF5eEZRVUZGWlN4TFFVRkxjWFZETEU5QlFVOXlkVU1zUzBGQlMzTjFReXhSUVVGUkxFZEJRVWR3ZGtNc1JVRkJSV01zUzBGQlMzRjFReXhQUVVGUGNuVkRMRXRCUVV0emRVTXNVVUZCVVN4SFFVRm5SU3hQUVVFM1JIUjFReXhMUVVGTGMzVkRMRk5CUVZNc1JVRkJSWGgwUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNaWExFdEJRVXR6ZFVNc1UwRkJVM1IxUXl4TFFVRkxkWFZETEU5QlFXRjBka01zUjBGQlJ5eEZRVUZGUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hKUVVGSmNWa3NTMEZCU3pZeVFpeGpRVUZqTVhaRExGVkJRVlZ6ZVVNc1ZVRkJWU3hYUVVGWExFbEJRVWt2ZUVNc1JVRkJSV1VzUzBGQlMzRjFReXhQUVVGUGNuVkRMRXRCUVV0emRVTXNVVUZCVVN4SFFVRkhjSFpETEVWQlFVVmpMRXRCUVV0eGRVTXNUMEZCVDNKMVF5eExRVUZMYzNWRExGRkJRVkVzUjBGQlIyNTRReXhGUVVGRk5rTXNTMEZCUzNGMVF5eFBRVUZQY25WRExFdEJRVXR6ZFVNc1VVRkJVU3hIUVVGSGJIaERMRVZCUVVVMFF5eExRVUZMY1hWRExFOUJRVTl5ZFVNc1MwRkJTM04xUXl4UlFVRlJMRWRCUVdkRkxFOUJRVGRFZEhWRExFdEJRVXR6ZFVNc1UwRkJVeXhGUVVGRmVIUkRMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMzTjFReXhUUVVGVGRIVkRMRXRCUVV0MWRVTXNUVUZCWVhSMlF5eEhRVUZITEVWQlFVVkRMRWRCUVVjc1JVRkJSUzlDTEVkQlFVY3NSMEZCUjBNc1IwRkJSeXhKUVVNdlkyMWhMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWZFhsRExGVkJRVlVzVjBGQlZ5eEpRVUZKYUhsRExFVkJRVVZsTEV0QlFVc3lkME1zWVVGQllYcDRReXhGUVVGRll5eExRVUZMTW5kRExHRkJRV0VzVDBGQlQzQTFRaXhMUVVGTE5ucENMRTFCUVUxakxGVkJRVlZxZEVNc1JVRkJSVU1zU1VGQlNYRlpMRXRCUVVzMk1rSXNZMEZCWXpGMlF5eFZRVUZWZDNsRExHZENRVUZuUWl4WFFVRlhMRWxCUVVscWVVTXNSVUZCUldVc1MwRkJTekozUXl4aFFVRmhlbmhETEVWQlFVVmpMRXRCUVVzeWQwTXNZVUZCWVN4UFFVRlBjRFZDTEV0QlFVczJla0lzVFVGQlRUQkNMSGRDUVVGM1FqZDBReXhGUVVGRlF5eEpRVUZKY1Zrc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVjVlVU1zVlVGQlZTeFhRVUZYTEVsQlFVbHNlVU1zUlVGQlJXVXNTMEZCU3pKM1F5eGhRVUZoTEU5QlFVOXdOVUlzUzBGQlN6WjZRaXhOUVVGTmEwSXNXVUZCV1hKMFF5eEZRVUZGTEVsQlF6bFljMWtzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZVd2VVTXNWMEZCVnl4WFFVRlhMRWxCUVVsdWVVTXNSVUZCUldVc1MwRkJTekozUXl4aFFVRmhlbmhETEVWQlFVVmpMRXRCUVVzeWQwTXNZVUZCWVN4UFFVRlBjRFZDTEV0QlFVczJla0lzVFVGQlRXOUNMRmxCUVZsMmRFTXNSVUZCUlVNc1NVRkJTWEZaTEV0QlFVczJNa0lzWTBGQll6RjJReXhWUVVGVk1ubERMRk5CUVZNc1YwRkJWeXhSUVVGUmNuaERMRXRCUVV0eGRVTXNUMEZCVDNKMVF5eExRVUZMYzNWRExGbEJRVmt2TWtJc1MwRkJTell5UWl4alFVRmpNWFpETEZWQlFWVTBlVU1zVTBGQlV5eFhRVUZYTEU5QlFVOTBlRU1zUzBGQlN6aDJReXh6UWtGRGRGSjJORUlzUzBGQlN6WXlRaXhqUVVGak1YWkRMRlZCUVZVMmVVTXNWMEZCVnl4VFFVRlRkSGxETEVkQlFVY3NTVUZCU1VNc1JVRkJSV01zUzBGQlMzRjFReXhQUVVGUGJIaERMRVZCUVVVMlF5eExRVUZMYzNWRExGRkJRVkZ5ZGtNc1JVRkJSVGxDTEVWQlFVVTRRaXhGUVVGRkxFbEJRVWtzU1VGQlNUZENMRVZCUVVVc1IwRkJSMmxETEVWQlFVVXNSMEZCUjJ4RExFVkJRVVU0UWl4SFFVRkhMRU5CUVVNc1NVRkJTVXNzUlVGQlJVb3NSVUZCUlM5Q0xFdEJRVXNzUjBGQlJ5eEpRVUZKYlVNc1JVRkJSV3hETEVWQlFVVTRUQ3hMUVVGTE5Vb3NUMEZCVVN4SlFVRkhMRWxCUVVsQkxFVkJRVVVzVTBGQll5eEhRVUZITEVsQlFVbEJMRVZCUVVVc1EwRkJReXhKUVVGSmNVSXNSVUZCUlhwQ0xFVkJRVVV2UWl4TFFVRkxReXhGUVVGRk9Fd3NUVUZCVVN4SFFVRkdOVW9zU1VGQlR5eEZRVUZKTEVkQlFVWnhRaXhSUVVGWExFZEJRVWNzU1VGQlNYSkNMRVZCUVVVc1EwRkJRM0ZDTEVWQlFVVjZRaXhGUVVGRkwwSXNTMEZCU3l4SlFVRkpkVkFzUlVGQlJYaE9MRVZCUVVVdlFpeExRVUZMUXl4RlFVRkZPRXdzVFVGQlVTeEhRVUZHTlVvc1NVRkJUeXhKUVVGTkxFZEJRVVp4UWl4SlFVRlBMRVZCUVVrc1IwRkJSaXRNTEZGQlFWY3NSMEZCUnl4SlFVRkpjRTRzUlVGQlJTeERRVUZuUTBFc1IwRkJTeXhGUVVGR1FTeEpRVUZOTEVsQlFVMHNTVUZCT1VOeFFpeEZRVUZGZWtJc1JVRkJSUzlDTEZGQlFTdERMRWxCUVUwc1NVRkJhRVIxVUN4RlFVRkZlRTRzUlVGQlJTOUNMRkZCUVdsRUxFVkJRVWtzUjBGQk1VTXJRaXhGUVVGRkwwSXNTMEZCTWtOdFF5eEhRVUZITEUxQlFVMXNReXhGUVVGRk9Fd3NTMEZCYTBJc1QwRkJXalZLTEVkQlFVY3NSMEZCUnl4TlFVRnhRaXhQUVVGT0xFdEJRVVpCTEV0QlFXVXNUVUZCVFd4RExFVkJRVVZuUXl4VFFVRlRReXhIUVVGSFJpeFBRVUZQZVdVc1lVRkJZV3hXTEUxQlFVMHNTMEZCUzNSTUxFZEJRVWRCTEVWQlFVVm5ReXhQUVVGUExFZEJRek5rTEU5QlJEaGtReXhIUVVGSGVVSXNTMEZCU3pCakxFMUJRVTFITEd0Q1FVRnJRblpuUWl4SFFVTTNaMEkwUXl4TFFVRkxjM1ZETEZGQlFWRnVlRU1zUlVGQlUydERMRWRCUVVkcldTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWVGg1UXl4eFFrRkJjVUlzVjBGQlZ5eEpRVUZKZG5sRExFVkJRVVZsTEV0QlFVczJka01zZFVKQlFYVkNMRTlCUVU4M2RrTXNTMEZCUzNWNFF5eFhRVUZYZEhsRExFbEJRVWx6V1N4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZTdDVReXhWUVVGVkxGTkJRVk40ZVVNc1IwRkJSeXhIUVVGSExFVkJRVVZCTEVkQlFVZGxMRXRCUVV0emRVTXNVVUZCVVhKMlF5eEZRVUZGWlN4TFFVRkxjWFZETEU5QlFVOXFka01zVDBGQlR5eFBRVUZQV1N4TFFVRkxlWFZETEZGQlFVOHNSVUZCUnpOMFF5eExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eDNRa0ZCZDBJc1NVRkJTWGt3UWl4WFFVRlhMRWRCUVVjc1NVRkJTV2h6UXl4RlFVRkZZeXhMUVVGTGNYVkRMRTlCUVU5c1JDeFRRVUZUYm5KRExFdEJRVXR6ZFVNc1VVRkJVWFIxUXl4TFFVRkxjM1ZETEZGQlFWRnlka01zUjBGQlowVXNUMEZCTjBSbExFdEJRVXR6ZFVNc1UwRkJVM0oyUXl4RlFVRkZOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxjM1ZETEZOQlFWTjBkVU1zUzBGQlMzVjFReXhOUVVGaGNuWkRMRWRCUVVkeFdTeExRVUZMTmpKQ0xHTkJRV014ZGtNc1ZVRkJWV2Q2UXl4cFFrRkJhVUlzVjBGQlZ5eFBRVUZQTVhoRExFdEJRVXQzZGtNc2EwSkJRV3RDYWpSQ0xFdEJRVXMyZWtJc1RVRkJUWEZDTEdGQlEyNXBRbXd4UWl4TFFVRkxOakpDTEdOQlFXTXhka01zVlVGQlZXbDZReXhuUWtGQlowSXNWMEZCVnl4SlFVRkpNWGxETEVWQlFVVmxMRXRCUVV0eGRVTXNUMEZCVDI1MlF5eEZRVUZGWXl4TFFVRkxjM1ZETEZGQlFWRnVlRU1zUlVGQlJUaENMRVZCUVVWRExFVkJRVVVzUjBGQlJ6bENMRVZCUVVVMlFpeEZRVUZGUXl4RlFVRkZMRWRCUVVkSExFVkJRVVZLTEVWQlFVVkRMRVZCUVVVc1IwRkJSMGtzUlVGQlJVd3NSVUZCUlVNc1JVRkJSU3hIUVVGSGVVSXNSVUZCUlRGQ0xFVkJRVVZETEVWQlFVVXNSMEZCUjNkT0xFVkJRVVY2VGl4RlFVRkZReXhGUVVGRkxFZEJRVWRuVXl4RlFVRkZhbE1zUlVGQlJVTXNSVUZCUlN4SFFVRTBRaXhQUVVGNlFrUXNSVUZCUlVFc1JVRkJSVU1zUlVGQlJTeEhRVUZIWXl4TFFVRkxjM1ZETEZOQlFWTXNSVUZCVTI1MlF5eFBRVUZQZVdVc1lVRkJZWHBuUWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlVNc1JVRkJSWEZDTEVWQlFVVXJUQ3hGUVVGRmQwVXNSVUZCUldwVExFbEJRVWx6V1N4TFFVRkxjVFpDTEdGQlFXRXNVMEZCVXpONVF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ6WkRMRXRCUVVzMmVFTXNVMEZCVTNRMlFpeExRVUZMTmpKQ0xHTkJRV05STEUxQlFVMHpka01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWMyUXl4TFFVRkxPSGhETEdGQlFXRTVlRU1zUzBGQlN6WjRReXhUUVVGVE0wTXNXVUZCV1d4MlF5eExRVUZMSzNoRExGZEJRVmQ0TmtJc1MwRkJTME1zWjBKQlFXZENLMElzY1VKQlFYRkNkbG9zUzBGQlMyZDVReXhqUVVGamVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk55UWl4UlFVRlJOVmdzUzBGQlMzbDFReXhSUVVGUExFVkJRVWQ2ZFVNc1MwRkJTMmw1UXl4bFFVRmxMRTFCUVUweE5rSXNTMEZCUzNFMlFpeGhRVUZoYWtRc1pVRkJaU3hIUVVOMmFFSndNMElzUzBGQlMzRTJRaXhoUVVGaGFFUXNUVUZCVFN4VFFVRlRNM1pETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEVkQlFVZHZZU3hMUVVGTGNUWkNMR0ZCUVdGcVJDeGxRVUZsZG5aRExFOUJRVThzUTBGQlF5eEpRVUZKYUVNc1JVRkJSVzFoTEV0QlFVdHhOa0lzWVVGQllXcEVMR1ZCUVdWNldDeE5RVUZ2UXl4UFFVRTVRbW8wUWl4SFFVRkhOMElzUlVGQlJYa3dReXhUUVVGVGJrUXNVMEZCVTNwMlF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlZVTXNSVUZCUlN4UFFVRlBMRWxCUVVsdFlTeExRVUZMY1RaQ0xHRkJRV0V6ZVVNc1JVRkJSVU1zUlVGQlJTOUNMRWxCUVVsdllTeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWV3QzUXl4TlFVRk5jak5DTEV0QlFVdHhOa0lzWVVGQllXaEVMRTFCUTJwUmNqTkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYlhkRExFdEJRVXNzVjBGQlZ6ZDFReXhMUVVGTE5uaERMRk5CUVZOd0swSXNVVUZCVVhwVUxFdEJRVXNyZUVNc1YwRkJWM2cyUWl4TFFVRkxReXhuUWtGQlowSXJRaXh4UWtGQmNVSjJXaXhMUVVGTFozbERMR05CUVdONk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVM0pDTEZGQlFWRTFXQ3hMUVVGTGVYVkRMRkZCUVU4c1JVRkJSM3AxUXl4TFFVRkxhWGxETEdWQlFXVXNTMEZCU3l4SlFVRkpNVFpDTEV0QlFVdHhOa0lzWVVGQllXcEVMR1ZCUVdWMmRrTXNVVUZCVVcxWkxFdEJRVXR4TmtJc1lVRkJZV3BFTEdWQlFXVjZiRU1zUzBGQlMyeEtMRTlCUVU5MVdDeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWWGQ2UXl4bFFVRmxMRmRCUVZjc1QwRkJUMng1UXl4TFFVRkxPSGhETEdOQlFXTjJOa0lzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWM2QwTXNWVUZCVlN4WFFVRlhMRTlCUVU5c2RrTXNTMEZCU3paNFF5eFRRVUZUTTBNc1lVRkROMk16TTBJc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVnZkME1zVlVGQlZTeFhRVUZYTEU5QlFVODVkVU1zUzBGQlN6WjRReXhUUVVGVEwwTXNZVUZCWVhZelFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWWGw2UXl4bFFVRmxMRmRCUVZjc1QwRkJUMjU1UXl4TFFVRkxLM2hETEZsQlFWbDROa0lzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVd2VrTXNXVUZCV1N4WFFVRlhMRTlCUVU5d2VVTXNTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZNbnBETEZsQlFWa3NWMEZCVnl4UFFVRlBjbmxETEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhOVUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVMGVrTXNWMEZCVnl4WFFVRlhMRTlCUVU5MGVVTXNTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkpMRmRCUTJwa09VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlUyZDBNc1UwRkJVeXhYUVVGWExFOUJRVTkyZGtNc1MwRkJTM2wxUXl4UlFVRlJlblZETEV0QlFVczJlRU1zVTBGQlUzUkRMRmxCUVZsb05FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZuZDBNc1UwRkJVeXhUUVVGVGVuWkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhOa01zUzBGQlN6WjRReXhUUVVGVGJrUXNVMEZCVTNwMlF5eEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ6WkRMRXRCUVVzcmVFTXNWMEZCVjNnMlFpeExRVUZMUXl4blFrRkJaMElyUWl4eFFrRkJjVUoyV2l4TFFVRkxaM2xETEdOQlFXTjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTNKQ0xGTkJRVk5NTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmRYZERMRTFCUVUwc1YwRkJWMnAyUXl4TFFVRkxObmhETEZOQlFWTTFReXhSUVVGUmFuWkRMRXRCUVVzcmVFTXNWMEZCVjNnMlFpeExRVUZMUXl4blFrRkJaMElyUWl4eFFrRkJjVUoyV2l4TFFVRkxaM2xETEdOQlFXTjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTNKQ0xGTkJRMjVrVEN4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZUQjNReXhSUVVGUkxGTkJRVk51ZDBNc1IwRkJSMlVzUzBGQlN6WjRReXhUUVVGVGVrTXNVVUZCVVc1M1F5eEpRVU4wUlhOWkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZObnBETEZWQlFWVXNWMEZCVnl4SFFVRkhkbmxETEV0QlFVczJlRU1zVTBGQlUzaERMRkZCUVZFc1QwRkJUU3hGUVVGSExFZEJRVWR5ZGtNc1MwRkJTM1YyUXl4WFFVRlhMRTlCUVU5NmRVTXNTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NlVUpCUVhkQ0xFVkJRVWQ2Vnl4TFFVRkxPSGhETEdGQlFXRTVlRU1zUzBGQlN6WjRReXhUUVVGVE0wTXNXVUZCV1N4SlFVRkphbmRETEVWQlFVVmxMRXRCUVVzMmVFTXNVMEZCVTJoRExIVkNRVUYxUWpOM1F5eEZRVUZGUkN4SlFVRkpMRVZCUVU4c1QwRkJURUVzUjBGQlJ5eEpRVUZSYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCVVdwaExFZEJRVWR6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFpDeFRRVUZUYkZvc1IwRkJSM05aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRVk5xV2l4SFFVRkhjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWMnhoTEVkQlFVZHpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUnl4aFFVRmhibUVzUjBGQlIzTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5KTEZkQlFXbENkbGtzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzZVVOQlF6Vm9RbmhZTEVWQlFVVmxMRXRCUVVzNGVFTXNZMEZCWXpsNFF5eExRVUZMZVhWRExGRkJRVThzUjBGQlJ5eEpRVUZIZW5WRExFdEJRVXNyZUVNc1YwRkJWemQ1UXl4RlFVRkZZeXhMUVVGTFozbERMR05CUVdNdmVVTXNSMEZCVVN4SlFVRkpjMWtzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVNGVrTXNZVUZCWVN4WFFVRlhlSGxETEV0QlFVczJlRU1zVTBGQlUycERMR0ZCUVdFMWRrTXNTMEZCU3l0NFF5eFpRVUZaTEVWQlFVVXZlRU1zUzBGQlMyZDVReXhuUWtGQlowSjZOa0lzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVcmVrTXNiVUpCUVcxQ0xGZEJRVmNzU1VGQlNYaDZReXhGUVVGRlpTeExRVUZMSzNoRExGZEJRVmNzU1VGQlNTOTRReXhMUVVGTGQzbERMR1ZCUVdWNGVVTXNTMEZCUzNWNVF5eGhRVUZoZG5sRExFdEJRVXR0ZVVNc2EwSkJRV3RDYkhwRExFZEJRVWRsTEV0QlFVc3dlVU1zV1VGQldURjVReXhMUVVGTE5uaERMRk5CUVZONFF5eFRRVUZUY25aRExFdEJRVXQzZVVNc1owSkJRMmhhYWpkQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZhVEJETEdkQ1FVRm5RaXhYUVVGWE0zbERMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGUmNGa3NTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NlVU5CUVhsRGVsY3NTMEZCU3pCNVF5eGhRVUZoTVhsRExFdEJRVXMyZUVNc1UwRkJVMnhETEdOQlFXTndORUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWck1FTXNiVUpCUVcxQ0xGZEJRVmNzUjBGQlJ6VjVReXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMFVzVlVGQlZYSlpMRXRCUVV0blZpeFJRVUZSVnl4TFFVRkxMRFJEUVVFMFEzcFhMRXRCUVVzd2VVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNYcDZReXhGUVVGRlpTeExRVUZMTm5oRExGTkJRVk5vUXl4MVFrRkJkVUkzZGtNc1MwRkJTelo0UXl4VFFVRlRla01zVVVGQlVXNTNReXhMUVVONFpYTlpMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYlRCRExHbENRVUZwUWl4WFFVRlhOM2xETEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWkN4VFFVRlRjbGdzUzBGQlMyZFdMRkZCUVZGWExFdEJRVXNzTUVOQlFUQkRlbGNzUzBGQlN6QjVReXhoUVVGaE1YbERMRXRCUVVzMmVFTXNVMEZCVTNwRExGRkJRVkVzU1VGQlNUY3pRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlc4d1F5eHBRa0ZCYVVJc1YwRkJWemw1UXl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJZc1UwRkJVM0JZTEV0QlFVdG5WaXhSUVVGUlZ5eExRVUZMTERCRFFVRXdRM3BYTEV0QlFVc3dlVU1zWVVGQllURjVReXhMUVVGTE5uaERMRk5CUVZONlF5eFJRVUZSTEVsQlEyeGlOek5DTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmNUQkRMRlZCUVZVc1YwRkJhVU1zU1VGQmRFSXNTVUZCU1RsNlF5eEZRVUZGWlN4TFFVRkxLM2hETEdGQlFXRXNRMEZCUXl4SlFVRkpMM2hETEV0QlFVdDFlVU1zV1VGQldTeERRVUZEZW5oRExFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExIbERRVUY1UTNwWExFdEJRVXQ1ZFVNc1VVRkJUeXhGUVVGSExFMUJRVTBzUjBGQlIzcDFReXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMGtzVlVGQlZTeERRVUZEY2xvc1MwRkJTeXQ0UXl4WlFVRlpPWGxETEVsQlFVazJRaXhMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXd5UWtGQk1rSjZWeXhMUVVGTGVYVkRMRkZCUVU4c1IwRkJTU3hOUVVGTmVuVkRMRXRCUVVzd2VVTXNZMEZETjFWdU4wSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZuTUVNc1ZVRkJWU3hYUVVGWExFOUJRVTh4ZVVNc1MwRkJTMmQ1UXl4bFFVRmxMRXRCUVV0Nk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVDBGQlQyeGFMRXRCUVVzeWVVTXNhMEpCUVd0Q0xFMUJRVTBzUzBGQlMzQTNRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWml4UlFVRlJiRmtzUzBGQlN6aDVReXh0UWtGQmJVSXNUVUZCVFN4TFFVRkxkamRDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORkxGVkJRVlZ1V2l4TFFVRkxOSGxETEhGQ1FVRnhRaXhOUVVGTkxFdEJRVXR5TjBJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyUXNVVUZCVVc1WkxFdEJRVXMyZVVNc2JVSkJRVzFDTEUxQlFVMHNTMEZCUzNRM1FpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSeXhaUVVGWmNGb3NTMEZCU3l0NVF5eFpRVUZaTEUxQlFVMHNVVUZCVVdwNVF5eExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eHpRMEZEYkdSakxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZjekJETEhGQ1FVRnhRaXhUUVVGVEwzcERMRVZCUVVWRExFZEJRVWNzVDBGQlQyTXNTMEZCUzJsNVF5eHBRa0ZCYVVKcWVVTXNTMEZCUzJsNVF5eGxRVUZsTEVsQlFVbHVlRU1zUzBGQlMyZFdMRkZCUVZGVExGRkJRVkYyVnl4TFFVRkxhWGxETEdWQlFXVm9la01zU1VGQlNXVXNTMEZCUzJsNVF5eGxRVUZsYUhwRExFZEJRVWRETEVkQlFVZHhXU3hMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlhVd1F5eG5Ra0ZCWjBJc1UwRkJVMmd3UXl4SFFVRnRSeXhQUVVGb1J6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTlCUVU5MlZ5eExRVUZMYVhsRExHZENRVUZuUW1oNlF5eEZRVUZGWlN4TFFVRkxhWGxETEdWQlFXVm9la01zUjBGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzUjBGQlZVRXNSVUZCUldVc1QwRkROVloxV0N4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZYY3dReXhSUVVGUkxGTkJRVk5xTUVNc1IwRkJSMlVzUzBGQlMyZDVReXhqUVVGamVqWkNMRXRCUVV0RExHZENRVUZuUWpoQ0xHOUNRVUZ2UW5KaExFZEJRVWNzU1VGQlNVTXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5Ra2NzVlVGQlZTeFBRVUZQTVZrc1IwRkJSeXhMUVVGTFF5eEZRVUZGTWxrc1QwRkJUeXhQUVVGUE4xZ3NTMEZCUzI5NFF5eGhRVUZoTEV0QlFVdHNlVU1zUlVGQlJUUlpMRTFCUVUwc1QwRkJUemxZTEV0QlFVdHRlRU1zV1VGQldTeExRVUZMYW5sRExFVkJRVVUyV1N4TlFVRk5MRTlCUVU4dldDeExRVUZMYVhoRExGbEJRVmtzUzBGQlN5OTRReXhGUVVGRk9Ga3NUMEZCVHl4UFFVRlBhRmtzUzBGQlN6UjNReXhoUVVGaExFdEJRVXN4ZUVNc1JVRkJSU3RaTEUxQlFVMHNUMEZCVDJwWkxFdEJRVXRuZUVNc1dVRkJXU3hMUVVGTE9YaERMRVZCUVVWbldpeFJRVUZSTEU5QlFVOXNXU3hMUVVGTGJYcERMR05CUVdNc1MwRkJTMm93UXl4RlFVRkZhVm9zVVVGQlVTeFBRVUZQYmxrc1MwRkJTMjk2UXl4alFVRmpMRXRCUVV0c01FTXNSVUZCUld0YUxFdEJRVXNzVDBGQlQzQlpMRXRCUVV0eGVFTXNWMEZCVnl4TFFVRkxibmxETEVWQlFVVnRXaXhQUVVGUExFOUJRVTl5V1N4TFFVRkxkWGhETEdGQlF6RmxMRXRCUVV0eWVVTXNSVUZCUlc5YUxFMUJRVTE0V0N4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l3clEwRkJLME1zUzBGQlMzWllMRVZCUVVWeFdpeFJRVUZSZWxnc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2FVUkJRV2xFTEV0QlFVdDJXQ3hGUVVGRmMxb3NUVUZCVFN4UFFVRlBlRmtzUzBGQlMzbDRReXhaUVVGWkxFdEJRVXQyZVVNc1JVRkJSWFZhTEU5QlFVOHNUMEZCVDNwWkxFdEJRVXN5ZDBNc1lVRkJZU3hMUVVGTGVuaERMRVZCUVVWM1dpeExRVUZMTEU5QlFVOHhXU3hMUVVGTGMzaERMRmRCUVZjc1MwRkJTM0I1UXl4RlFVRkZlVm9zVTBGQlV5eFBRVUZQTTFrc1MwRkJTM0Y2UXl4bFFVRmxMRXRCUVV0dU1FTXNSVUZCUlRCYUxGTkJRVk1zVDBGQlR6VlpMRXRCUVV0emVrTXNaVUZCWlN4TFFVRkxjREJETEVWQlFVVXlXaXhQUVVGUExFOUJRVTgzV1N4TFFVRkxkWHBETEdGQlFXRXNTMEZCUzNJd1F5eEZRVUZGTkZvc1QwRkJUeXhQUVVGUE9Wa3NTMEZCUzNkNlF5eGhRVUZoTEV0QlFVdDBNRU1zUlVGQlJUWmFMRkZCUVZFc1QwRkJUeTlaTEV0QlFVc3llRU1zYTBKQlFXdENMRXRCUVV0NmVVTXNSVUZCUlRoYUxGRkJRVkVzVDBGQlQyaGFMRXRCUVVzd2VFTXNiVUpCUXpObUxGRkJRVkUxZDBNc1MwRkJTMmRXTEZGQlFWRlhMRXRCUVVzc2JVTkJRVzFETEU5QlFVOHNSMEZCUjJNc1MwRkJTM0UyUWl4aFFVRmhiSHBETEZWQlFWVXJNRU1zV1VGQldTeFRRVUZUZURCRExFVkJRVVZETEVkQlFVYzBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhMRWxCUVVsb1l5eEZRVUZGTmtNc1MwRkJTelo0UXl4VFFVRlRPVU1zVTBGQlV6TjRReXhGUVVGRk5FTXNTMEZCU3paNFF5eFRRVUZUYUVNc2RVSkJRWFZDZW5sRExFVkJRVVUwUXl4TFFVRkxObmhETEZOQlFWTXpReXhaUVVGWk9YaERMRVZCUVVVMFF5eExRVUZMTm5oRExGTkJRVk0zUXl4UFFVRlBOWGhETEVkQlFVYzRRaXhGUVVGRlJDeEZRVUZGWlN4TlFVRk5RU3hMUVVGTE5uaERMRk5CUVZNeFF5eFZRVUZWTDNoRExFZEJRVWMwUXl4TFFVRkxObmhETEZOQlFWTTNReXhQUVVGUE4zaERMRWxCUTJ4WmIyRXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZuTVVNc1ZVRkJWU3hUUVVGVGVqQkRMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhNa1FzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBjc1lVRkJZWFJaTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTeXQ0UXl4WlFVRlpPWGxETEVkQlFVYzVRaXhGUVVGRkswSXNSVUZCUldNc1RVRkJUVUVzUzBGQlMzbDFReXhSUVVGUmVuVkRMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRTU3haUVVGWmRsa3NTMEZCUzJkV0xGRkJRVkZYTEV0QlFVc3NjMFJCUVhORWVsY3NTMEZCUzNsMVF5eFJRVUZQTEVsQlF6RldiRE5DTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmFURkRMR2RDUVVGblFpeFhRVUZYTjNsRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkZMRmRCUVZjc1NVRkJTV3hoTEVWQlFVVmxMRXRCUVVzMmVFTXNVMEZCVTJoRExIVkNRVUYxUWpOM1F5eEZRVUZGWXl4TFFVRkxObmhETEZOQlFWTXpReXhaUVVGWkwzaERMRVZCUVVVclFpeEZRVUZGUkN4RlFVRjFSaXhQUVVGeVJrRXNSVUZCUlhOWkxFdEJRVXMyTWtJc1kwRkJZMUVzVFVGQlRUVjFReXhMUVVGTE5uaERMRk5CUVZNdlF5eFpRVUZaTlhaRExFVkJRVVZFTEVkQlFVZGxMRXRCUVVzMmVFTXNVMEZCVXpGRExGVkJRVlZvZVVNc1IwRkJWVGhDTEVkQlFVZHpXU3hMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlhONVF5eFZRVUZWTEZkQlFYbEdMRTlCUVRsRmJIZERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZNdlFpeHpRa0ZEZUdOMk5FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZyTVVNc1owSkJRV2RDTEZkQlFYbEdMRTlCUVRsRk9YbERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZNM1FpdzBRa0ZCTkVKNk5FSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlYxZVVNc1ZVRkJWU3hYUVVGNVJpeFBRVUU1Ulc1M1F5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGbGJGb3NTMEZCU3paNFF5eFRRVUZUZWtJc2MwSkJRWE5DTnpSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZkM2xETEdkQ1FVRm5RaXhYUVVGNVJpeFBRVUU1UlhCM1F5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGbGJGb3NTMEZCU3paNFF5eFRRVUZUZUVJc05FSkJRekZtT1RSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZhWGxETEZkQlFWY3NWMEZCZVVZc1QwRkJPVVUzZGtNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCWld4YUxFdEJRVXMyZUVNc1UwRkJVMmhETEhkQ1FVRjNRblEwUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZXMHhReXhwUWtGQmFVSXNWMEZCZVVZc1QwRkJPVVV2ZVVNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCWld4YUxFdEJRVXMyZUVNc1UwRkJVemxDTERoQ1FVRTRRbmcwUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZXdDVReXhYUVVGWExGZEJRWGxHTEU5QlFUbEZPWFpETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRV1ZzV2l4TFFVRkxObmhETEZOQlFWTXpRaXgzUWtGRE0yWXpORUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWdGVVTXNhVUpCUVdsQ0xGZEJRWGxHTEU5QlFUbEZMM1pETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRV1ZzV2l4TFFVRkxObmhETEZOQlFWTXhRaXc0UWtGQk9FSTFORUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZVMk1FTXNWMEZCVnl4WFFVRjVSaXhQUVVFNVJYcDVReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUXl4UlFVRmxiRm9zUzBGQlN6WjRReXhUUVVGVE5VSXNjMEpCUVhOQ01UUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWT0RCRExGZEJRVmNzVjBGQmVVWXNUMEZCT1VVeGVVTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlpXeGFMRXRCUVVzMmVFTXNVMEZCVTNaQ0xITkNRVU42Wmk4MFFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVzh4UXl4cFFrRkJhVUlzVjBGQmVVWXNUMEZCT1VWb2VrTXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlpXeGFMRXRCUVVzMmVFTXNVMEZCVTNKQ0xEUkNRVUUwUW1vMVFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVEF3UXl4WlFVRlpMRmRCUVRCR0xFOUJRUzlGZEhsRExFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRsY3NTMEZCUzJkNVF5eGxRVUZsZWpaQ0xFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTmtMRk5CUVdkQ2Jsa3NTMEZCU3paNFF5eFRRVUZUYkVJc1kwRkJZM0ExUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZYa3dReXhaUVVGWkxGZEJRVEJHTEU5QlFTOUZjbmxETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRV2RDYkZrc1MwRkJTelo0UXl4VFFVRlRha0lzWTBGRGJtWnlOVUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWeE1VTXNhMEpCUVd0Q0xGZEJRVEJHTEU5QlFTOUZhbnBETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRV2RDYkZrc1MwRkJTelo0UXl4VFFVRlRhRUlzYjBKQlFXOUNkRFZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk1qQkRMR0ZCUVdFc1YwRkJNRVlzVDBGQkwwVjJlVU1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTJRc1UwRkJaMEp1V1N4TFFVRkxObmhETEZOQlFWTmlMR0ZCUVdGNk5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZ6TVVNc2JVSkJRVzFDTEZkQlFUQkdMRTlCUVM5RmJIcERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5rTEZOQlFXZENibGtzUzBGQlN6WjRReXhUUVVGVFlpeFpRVUZaTVhCRExGbEJRMmhuUW1sUkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZOREJETEdGQlFXRXNWMEZCTUVZc1QwRkJMMFY0ZVVNc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyWXNVMEZCWjBKc1dTeExRVUZMTm5oRExGTkJRVk5hTEdGQlFXRXhOVUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWMU1VTXNiVUpCUVcxQ0xGZEJRVEJHTEU5QlFTOUZibnBETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRV2RDYkZrc1MwRkJTelo0UXl4VFFVRlRXQ3h0UWtGQmJVSXpOVUlzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWNWVVTXNWVUZCVlN4WFFVRXdSaXhQUVVFdlJYSjNReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWkN4VFFVRm5RbTVaTEV0QlFVczJlRU1zVTBGQlUxWXNZVUZETTJVMU5VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlV3ZVVNc1YwRkJWeXhYUVVFd1JpeFBRVUV2UlhSM1F5eExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaaXhUUVVGblFteFpMRXRCUVVzMmVFTXNVMEZCVTFRc1kwRkJZemMxUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZUSjVReXhUUVVGVExGZEJRWGxHTEU5QlFUbEZkbmRETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGVkJRV2RDYkZvc1MwRkJTelo0UXl4VFFVRlRhRU1zZDBKQlFYZENkRFJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk5IbERMRk5CUVZNc1YwRkJlVVlzVDBGQk9VVjRkME1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJaV3hhTEV0QlFVczJlRU1zVTBGQlUzcENMSE5DUVVOdVpUYzBRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlRaNVF5eFhRVUZYTEZkQlFWZDZkME1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWeXhKUVVGSmJHRXNSVUZCUldVc1MwRkJTelo0UXl4VFFVRlRhRU1zZFVKQlFYVkNMRTlCUVU4M2RrTXNTMEZCU3paNFF5eFRRVUZUVGl4WFFVRlhkSGxETEVsQlFVbHpXU3hMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlN0NVF5eFZRVUZWTEZkQlFWY3pkME1zUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkyVnl4TFFVRkxaM2xETEdWQlFXVjZOa0lzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWeXhKUVVGSmJHRXNSVUZCUldVc1MwRkJTelo0UXl4VFFVRlRhRU1zZFVKQlFYVkNMRTlCUVU4M2RrTXNTMEZCU3paNFF5eFRRVUZUU2l4VlFVRlZlSGxETEVsQlF6bGFjMWtzUzBGQlMzRTJRaXhoUVVGaGJIcERMRlZCUVZWbmVrTXNhVUpCUVdsQ0xGZEJRWGxHTEU5QlFUbEZOWGRETEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZGxjc1MwRkJTMmQ1UXl4bFFVRmxlalpDTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRV1ZzV2l4TFFVRkxObmhETEZOQlFWTklMRzlDUVVGdlFtNDJRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlhjeFF5eGxRVUZsTEZkQlFYbEdMRTlCUVRsRmNIcERMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkbGNzUzBGQlMyZDVReXhsUVVGbGVqWkNMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFXVnNXaXhMUVVGTE5uaERMRk5CUVZOMFFpd3dRa0ZCTUVKb05VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlU0ZDBNc2EwSkJRV3RDTEZOQlFWTjJkME1zUjBGQmFVWXNUMEZCT1VVMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGbGJGb3NTMEZCU3paNFF5eFRRVUZUY2tNc2EwSkJRV3RDZG5kRExFbEJRMnBvUW5OWkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZLM2RETEhkQ1FVRjNRaXhUUVVGVGVIZERMRWRCUVdsR0xFOUJRVGxGTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MlZ5eExRVUZMWjNsRExHVkJRV1Y2TmtJc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCWld4YUxFdEJRVXMyZUVNc1UwRkJVM0pETEcxQ1FVRnJRaXhUUVVGVGRIZERMRVZCUVVVdlFpeEhRVUZITEU5QlFVOXZZU3hMUVVGTE5ucENMRTFCUVUxcFFpeGhRVUZoYm5SRExFVkJRVVV2UWl4RlFVRkZPRUlzVDBGQlRYTlpMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYVhwRExHZENRVUZuUWl4WFFVRXdSaXhQUVVFdlJUZDNReXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1pYTEV0QlFVdG5lVU1zWlVGQlpYbzJRaXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUWml4VFFVRm5RbXhaTEV0QlFVczJlRU1zVTBGQlUwWXNiVUpCUTNaWmNEWkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWWjNoRExHbENRVUZwUWl4VFFVRlRlbmRETEVkQlFXdEdMRTlCUVM5Rk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTJWeXhMUVVGTFozbERMR1ZCUVdWNk5rSXNTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMllzVTBGQlowSnNXU3hMUVVGTE5uaERMRk5CUVZOdVF5eHBRa0ZCYVVKNmQwTXNTVUZCU1hOWkxFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZlVEZETEdsQ1FVRnBRaXhUUVVGVGJERkRMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzWlhMRXRCUVV0bmVVTXNaVUZCWlhvMlFpeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWExFbEJRVWxxWVN4RlFVRkZZeXhMUVVGTE5uaERMRk5CUVZOb1F5eDFRa0ZCZFVJemQwTXNSVUZCUldNc1MwRkJTelo0UXl4VFFVRlRNME1zV1VGQldXaDNReXhGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1IwRkJSelpETEV0QlFVczJlRU1zVTBGQlV6TkRMRmxCUVZsb2QwTXNSMEZCUnk5Q0xFVkJRVVVyVEN4TFFVRkxha3NzUlVGQlJXaERMRXRCUVVzclF5eExRVUZMTm5oRExGZEJRVmNzVDBGQlR6RXdReXhIUVVOd1pHOWhMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTURGRExHZENRVUZuUWl4WFFVRlhMRTlCUVU5d01FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUTDBJc2NVSkJRWEZDZGpSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZNakZETEhOQ1FVRnpRaXhYUVVGWExFOUJRVTl5TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlROMElzTWtKQlFUSkNlalJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk5ERkRMR2RDUVVGblFpeFhRVUZYTEU5QlFVOTBNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVGVrSXNjVUpCUVhGQ056UkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTmpGRExITkNRVUZ6UWl4WFFVRlhMRTlCUVU5Mk1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUZUVJc01rSkJRM3BrT1RSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZPREZETEdsQ1FVRnBRaXhYUVVGWExFOUJRVTk0TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRhRU1zZFVKQlFYVkNkRFJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVkt6RkRMSFZDUVVGMVFpeFhRVUZYTEU5QlFVOTZNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVE9VSXNOa0pCUVRaQ2VEUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWWnpKRExHbENRVUZwUWl4WFFVRlhMRTlCUVU4eE1FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUTTBJc2RVSkJRWFZDTXpSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZhVEpETEhWQ1FVRjFRaXhYUVVGWExFOUJRVTh6TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRNVUlzTmtKQlEyNWxOVFJDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmF6SkRMR2xDUVVGcFFpeFhRVUZYTEU5QlFVODFNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVE5VSXNjVUpCUVhGQ01UUkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWYlRKRExHbENRVUZwUWl4WFFVRlhMRTlCUVU4M01FTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUZGtJc2NVSkJRWEZDTHpSQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZiekpETEhWQ1FVRjFRaXhYUVVGWExFOUJRVTg1TUVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRja0lzTWtKQlFUSkNhalZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmNUSkRMR3RDUVVGclFpeFhRVUZYTEU5QlFVOHZNRU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVGJFSXNZVUZEZUdSd05VSXNTMEZCUzNFMlFpeGhRVUZoYkhwRExGVkJRVlZ6TWtNc2EwSkJRV3RDTEZkQlFWY3NUMEZCVDJneFF5eExRVUZMYlRCRExHbENRVUZwUW00d1F5eExRVUZMTm5oRExGTkJRVk5xUWl4aFFVRmhjalZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmRUSkRMSGRDUVVGM1FpeFhRVUZYTEU5QlFVOXFNVU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVGFFSXNiVUpCUVcxQ2REVkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWZHpKRExHMUNRVUZ0UWl4WFFVRlhMRTlCUVU5c01VTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUWWl4WlFVRlplalZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVmVUSkRMRzFDUVVGdFFpeFhRVUZYTEU5QlFVOXVNVU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVFdpeFpRVU53WXpFMVFpeExRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVEF5UXl4NVFrRkJlVUlzVjBGQlZ5eFBRVUZQY0RGRExFdEJRVXR0TUVNc2FVSkJRV2xDYmpCRExFdEJRVXMyZUVNc1UwRkJVMWdzYTBKQlFXdENNelZDTEV0QlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVk1qSkRMR2RDUVVGblFpeFhRVUZYTEU5QlFVOXlNVU1zUzBGQlMyMHdReXhwUWtGQmFVSnVNRU1zUzBGQlN6WjRReXhUUVVGVFZpeFpRVUZaTlRWQ0xFdEJRVXR4TmtJc1lVRkJZV3g2UXl4VlFVRlZOREpETEdsQ1FVRnBRaXhYUVVGWExFOUJRVTkwTVVNc1MwRkJTMjB3UXl4cFFrRkJhVUp1TUVNc1MwRkJTelo0UXl4VFFVRlRWQ3hoUVVGaE56VkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWTmpKRExHVkJRV1VzVjBGQlZ5eFBRVUZQZGpGRExFdEJRVXR0TUVNc2FVSkJRV2xDYmpCRExFdEJRVXMyZUVNc1UwRkJVMUlzVjBGQlZ6azFRaXhMUVVGTGNUWkNMR0ZCUVdGc2VrTXNWVUZCVlRneVF5eGxRVUZsTEZkQlFWY3NUMEZCVDNneFF5eExRVUZMYlRCRExHbENRVUZwUW00d1F5eExRVUZMTm5oRExGTkJRVk5RTEZkQlEzaHBRaTgxUWl4TFFVRkxjVFpDTEdGQlFXRnNla01zVlVGQlZTc3lReXgxUWtGQmRVSXNWMEZCVnl4UFFVRlBlakZETEV0QlFVdHRNRU1zYVVKQlFXbENiakJETEV0QlFVczJlRU1zVTBGQlUwZ3NiVUpCUVcxQ2JqWkNMRXRCUVV0eE5rSXNZVUZCWVd4NlF5eFZRVUZWWnpORExITkNRVUZ6UWl4WFFVRlhMRTlCUVU4eE1VTXNTMEZCUzIwd1F5eHBRa0ZCYVVKdU1FTXNTMEZCU3paNFF5eFRRVUZUUml4clFrRkJhMEp3TmtJc1MwRkJTMjhyUWl4alFVRmpMRmRCUVZjek1VTXNTMEZCU3pReFF5eFJRVUZSTEVsQlFVbHlLMElzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZWVkxFOUJRVThzVjBGQlZ5eFBRVUZQV1N4TFFVRkxOREZETEZGQlFWRjRNa01zVVVGQlVXMVpMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWYlRORExFbEJRVWtzVjBGQlZ5eEpRVUZKTlRKRExFVkJRVVZsTEV0QlFVczBNVU1zVVVGQmQwSXNUMEZCYUVJMU1VTXNTMEZCU3pReFF5eFJRVUZSTEVkQlFWVXpNa01zUjBGRGRHTnpXU3hMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVlc4elF5eHRRa0ZCYlVJc1UwRkJVemN5UXl4RlFVRkZReXhIUVVFeVNTeEpRVUY0U1RSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBjbGdzUjBGQlIzTkNMRXRCUVVzMll5eE5RVUZOYm1Vc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEVkQlFVZDBXQ3hIUVVGSFFTeEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQlpXNWFMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkeVdDeEhRVUZIUVN4RlFVRkZjVmtzUzBGQlMwTXNaMEpCUVdkQ2VVTXNWMEZCVnl4RlFVRkZMMkVzUjBGQlJ5eEpRVUZKUkN4SFFVRkhaU3hMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCVHl4SlFVRkdha3NzUlVGQlRTeExRVUZMUVN4SFFVRkhRU3hKUVVGSkxFVkJRVVZETEVkQlFVY3NUVUZCVFN4RlFVRkZRU3hMUVVGTExFVkJRVVZqTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZETlZaeldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWWEV6UXl4clFrRkJhMElzVTBGQlV6a3lReXhGUVVGRlF5eEhRVUZITkVJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEhRVUZIZFVJc1MwRkJTelpqTEUxQlFVMXdaU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOXlXQ3hIUVVGSGMwSXNTMEZCU3paakxFMUJRVTF1WlN4SlFVRkpORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzUllMRWRCUVVkQkxFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVReXhYUVVGWGJsb3NTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNSMEZCUjNKWUxFZEJRVWRCTEVWQlFVVnhXU3hMUVVGTFF5eG5Ra0ZCWjBKNVF5eFhRVUZYYW1Fc1MwRkJTMmN5UXl4WlFVRlpMekpETEVkQlFVZGxMRXRCUVV0bk1rTXNXVUZCV1RreVF5eEpRVU4wVTNGWkxFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZkVE5ETEhOQ1FVRnpRaXhUUVVGVGFETkRMRWRCUVhsRExFbEJRWFJETmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEhRVUZIZFVJc1MwRkJTelpqTEUxQlFVMXdaU3hKUVVGUk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOHNSMEZCUjNSWUxFZEJRVWRCTEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVF5eFhRVUZYTEVsQlFVbG9ZaXhIUVVGSFpTeExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJUeXhKUVVGR2Frc3NSVUZCVFN4TFFVRkxRU3hMUVVGTExFVkJRVVZsTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZEYkU5eldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWWGN6UXl4dlFrRkJiMElzVTBGQlUyb3pReXhIUVVGdFNTeEhRVUZvU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzU1VGQlNYTlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmN2WVN4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2QwTXNWMEZCWXl4SFFVRkhMMkVzUlVGQlJXVXNTMEZCUzJreVF5eHpRa0ZCYzBKb00wTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1NVRkJTVU1zUlVGQlJTeEZRVUZGTEVWQlFVVkJMRVZCUVVWQkxFbEJRVWxqTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGUExFbEJRVVpxU3l4RlFVRk5MRXRCUVV0QkxFbEJRVWtzUlVGQlJXVXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXNzUzBGRGFsUnhUeXhMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVlhrelF5eHpRa0ZCYzBJc1UwRkJVMnd6UXl4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SFFVRkhkVUlzUzBGQlN6WmpMRTFCUVUxd1pTeEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1IwRkJSM1JZTEVkQlFVZEJMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEkwUXl4WFFVRlhOME1zUzBGQlN6WjZRaXhOUVVGTlNTeFhRVUZYZG5ORExFZEJRVWRsTEV0QlFVczRNVU1zYlVKQlFXMUNkaXRDTEV0QlFVczJla0lzVFVGQlRVTXNWMEZCVnpsNlFpeExRVUZMTm5wQ0xFMUJRVTFGTEdOQlEyNVFMM3BDTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVk1ETkRMRzlDUVVGdlFpeFRRVUZUYmpORExFZEJRVWMyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNSWUxFZEJRVWQxUWl4TFFVRkxObU1zVFVGQlRYQmxMRWxCUVVrMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzUllMRWxCUVVseldTeExRVUZMUXl4blFrRkJaMEl5UXl4WFFVRlhiR0lzUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUWpKRExGZEJRVmMxUXl4TFFVRkxObnBDTEUxQlFVMUpMRmRCUVZkMmMwTXNSMEZCUjJVc1MwRkJTemd4UXl4dFFrRkJiVUoySzBJc1MwRkJTelo2UWl4TlFVRk5ReXhYUVVGWE9YcENMRXRCUVVzMmVrSXNUVUZCVFVVc1kwRkRMMUV2ZWtJc1MwRkJTMjhyUWl4alFVRmphak5ETEZWQlFWVXlNME1zYjBKQlFXOUNMRk5CUVZOd00wTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzU1VGQlNYTlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmN2WVN4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2QwTXNWMEZCVjJoaExFdEJRVXRwTWtNc2RVSkJRWFZDYURORExFZEJRVWNzUlVGQlJVRXNSMEZCUnl4TlFVRk5MRWxCUVVseldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWVFF6UXl4dlFrRkJiMElzVTBGQlUzSXpReXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hIUVVGSGRVSXNTMEZCU3paakxFMUJRVTF3WlN4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SlFVRkpjMWtzUzBGQlMwTXNaMEpCUVdkQ01rTXNWMEZCVjJ4aUxFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSXlReXhYUVVGWE5VTXNTMEZCU3paNlFpeE5RVUZOU3l4alFVRmplSE5ETEVkQlFVZGxMRXRCUVVzNE1VTXNiVUpCUVcxQ2RpdENMRXRCUVVzMmVrSXNUVUZCVFVNc1YwRkJWemw2UWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUXpkbUwzcENMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWTmpORExEQkNRVUV3UWl4VFFVRlRkRE5ETEVkQlFVZGxMRXRCUVV0M01rTXNkMEpCUVhkQ2FpOUNMRXRCUVVzMmVrSXNUVUZCVFRaQ0xITkNRVUZ6UW1oMVF5eExRVUZMYzFrc1MwRkJTMjhyUWl4alFVRmphak5ETEZWQlFWVTRNME1zZDBKQlFYZENMRk5CUVZOMk0wTXNSMEZCUnl4SlFVRkpReXhGUVVGRll5eExRVUZMZFZnc1MwRkJTelo2UWl4TlFVRk5XU3haUVVGWkwzTkRMRWRCUVVkeldTeExRVUZMTm5wQ0xFMUJRVTFsTEZkQlFWYzFNRUlzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYT1hwQ0xFdEJRVXMyZWtJc1RVRkJUVVVzWVVGQldTeFRRVUZUY25ORExFVkJRVVUzUWl4SFFVRkhPRUlzUlVGQlJUUXlReXh0UWtGQmJVSTNNa01zU1VGQlNTeEZRVUZGTjBJc1NVRkJTU3hQUVVNMVZtMWhMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWS3pORExGZEJRVmNzVTBGQlUzZ3pReXhIUVVGSE5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hIUVVGSGRVSXNTMEZCU3paakxFMUJRVTF3WlN4SlFVRkpOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzUllMRWRCUVVjc1NVRkJTVUVzUjBGQlIyVXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXRxU3l4SlFVRkpMRVZCUVVVc1RVRkJUWE5aTEV0QlFVdHZLMElzWTBGQlkyb3pReXhWUVVGVlp6UkRMRmxCUVZrc1UwRkJVM296UXl4SFFVRkhOa0lzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTkwV0N4SFFVRkhkVUlzUzBGQlN6WmpMRTFCUVUxd1pTeEpRVUZKTmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1IwRkJSM1JZTEVkQlFVY3NUVUZCVFVFc1IwRkJSMlVzUzBGQlN6UXhReXhSUVVGUk1YTkRMRXRCUVV0cVN5eEpRVUZKTEVWQlFVVXNTMEZCUzJVc1MwRkJTelF4UXl4UlFVRlJNWE5ETEV0QlFVdHFTeXhKUVVGSkxFVkJRVVVzVFVGRE5WVnpXU3hMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVlhNelF5eFpRVUZaTEZOQlFWTXZNa01zUjBGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzUjBGQlIzVkNMRXRCUVVzMll5eE5RVUZOY0dVc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEVkQlFVZDBXQ3hIUVVGSFFTeEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQlYycGhMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkJTU3hGUVVGRkxFdEJRVXRsTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZCU1N4RlFVRkZMRXRCUVV0bExFdEJRVXMwTVVNc1VVRkJVVEZ6UXl4TFFVRkxha3NzU1VGQlNTeEhRVUZITEV0QlFVdGxMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkJTU3hIUVVGSExFMUJRVTF6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZXazBReXhaUVVGWkxGTkJRVk14TTBNc1IwRkJSelpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExFZEJRVWQwV0N4SFFVRkhRU3hGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDTkVNc1YwRkJWemRETEV0QlFVczJla0lzVFVGQlRVY3NXVUZCV1hSelF5eEhRVUZIWlN4TFFVRkxaekpETEZsQlFWbDZLMElzUzBGQlN6WjZRaXhOUVVGTlF5eFpRVUZaY25KRExFdEJRVXRuTWtNc1dVRkJXWG9yUWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUTI1blFpOTZRaXhMUVVGTGJ5dENMR05CUVdOcU0wTXNWVUZCVldzMFF5eFZRVUZWTEZOQlFWTXpNME1zUjBGQlJ6WkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzUjBGQlIzVkNMRXRCUVVzMll5eE5RVUZOY0dVc1NVRkJTVFpDTEV0QlFVdG5WaXhSUVVGUlV5eFJRVUZSTEV0QlFVdDBXQ3hIUVVGSExFbEJRVWxCTEVkQlFVZGxMRXRCUVVzME1VTXNVVUZCVVRGelF5eExRVUZMYWtzc1NVRkJTU3hGUVVGRkxFMUJRVTF6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZXMDBReXhYUVVGWExGTkJRVk0xTTBNc1IwRkJSelpDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQZEZnc1IwRkJSM1ZDTEV0QlFVczJZeXhOUVVGTmNHVXNTVUZCU1RaQ0xFdEJRVXRuVml4UlFVRlJVeXhSUVVGUkxFOUJRVTkwV0N4SFFVRkhMRTFCUVUxQkxFZEJRVWRsTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTGFrc3NTVUZCU1N4RlFVRkZMRXRCUVV0bExFdEJRVXMwTVVNc1VVRkJVVEZ6UXl4TFFVRkxha3NzU1VGQlNTeEZRVUZGTEUxQlEyeFdjMWtzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZWdk5FTXNWMEZCVnl4VFFVRlROek5ETEVkQlFVYzJRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM1JZTEVkQlFVZDFRaXhMUVVGTE5tTXNUVUZCVFhCbExFbEJRVWsyUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDNSWUxFbEJRVWx6V1N4TFFVRkxReXhuUWtGQlowSjNReXhYUVVGWEwyRXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWZG9ZU3hMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCUzJwTExFbEJRVWtzUlVGQlJTeExRVUZMWlN4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlMycExMRWxCUVVrc1JVRkJSU3hMUVVGTFpTeExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJTMnBMTEVsQlFVa3NSMEZCUnl4TFFVRkxaU3hMUVVGTE5ERkRMRkZCUVZFeGMwTXNTMEZCUzJwTExFbEJRVWtzUjBGQlJ5eE5RVU55VTNOWkxFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZjVFJETEZkQlFWY3NVMEZCVXprelF5eEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEhRVUZIZFVJc1MwRkJTelpqTEUxQlFVMXdaU3hKUVVGSk5rSXNTMEZCUzJkV0xGRkJRVkZUTEU5QlFVOTBXQ3hKUVVGSmMxa3NTMEZCUzBNc1owSkJRV2RDTWtNc1YwRkJWMnhpTEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBJeVF5eFhRVUZYTlVNc1MwRkJTelo2UWl4TlFVRk5TU3hYUVVGWGRuTkRMRWRCUVVkbExFdEJRVXNyTVVNc2EwSkJRV3RDZUN0Q0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ6bDZRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRM0pSTDNwQ0xFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZjelJETEdsQ1FVRnBRaXhUUVVGVEx6TkRMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzUllMRWRCUVVkMVFpeExRVUZMTm1Nc1RVRkJUWEJsTEVsQlFVazJRaXhMUVVGTFoxWXNVVUZCVVZNc1VVRkJVWFJZTEVsQlFVbHpXU3hMUVVGTFF5eG5Ra0ZCWjBJeVF5eFpRVUZaYkdJc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFqSkRMRmRCUVZjMVF5eExRVUZMTm5wQ0xFMUJRVTFaTEZsQlFWbDZNRUlzUzBGQlN6WjZRaXhOUVVGTk5rSXNjMEpCUVhOQ2FIVkRMRWxCUVVsbExFdEJRVXNyTVVNc2EwSkJRV3RDZUN0Q0xFdEJRVXMyZWtJc1RVRkJUVU1zVjBGQlZ6bDZRaXhMUVVGTE5ucENMRTFCUVUxRkxHTkJRMmhVTDNwQ0xFdEJRVXR2SzBJc1kwRkJZMm96UXl4VlFVRlZkVFJETEZkQlFWY3NVMEZCVTJnMFF5eEhRVUZITmtJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5bk1rSXNUVUZCVjNSMFF5eEpRVUZKYzNSRExFMUJRVmQwZEVNc1IwRkJSelpvUXl4TlFVRk5OMmhETEVsQlFVbEJMRWxCUVVseldTeExRVUZMUXl4blFrRkJaMEpyUXl4aFFVRmhlbUVzUjBGQlIzTlpMRXRCUVV0RExHZENRVUZuUW10RExHRkJRV0Z1UXl4TFFVRkxObnBDTEUxQlFVMU5MR0ZCUVdGNmMwTXNSMEZCUjJVc1MwRkJTMmN5UXl4WlFVRlplaXRDTEV0QlFVczJla0lzVFVGQlRVTXNZVUZEYWxBNWVrSXNTMEZCUzI4clFpeGpRVUZqYWpORExGVkJRVlYzTkVNc1dVRkJXU3hUUVVGVGFqUkRMRWRCUVVjMlFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQyY3lRaXhOUVVGWGRIUkRMRWxCUVVsemRFTXNUVUZCVjNSMFF5eEhRVUZITm1oRExFMUJRVTAzYUVNc1NVRkJTVUVzU1VGQlNYTlpMRXRCUVV0RExHZENRVUZuUW5GRExHRkJRV0UxWVN4SFFVRkhjMWtzUzBGQlMwTXNaMEpCUVdkQ2NVTXNZVUZCWVhSRExFdEJRVXMyZWtJc1RVRkJUVmNzWVVGQllUbHpReXhIUVVGSFpTeExRVUZMWnpKRExGbEJRVmw2SzBJc1MwRkJTelo2UWl4TlFVRk5ReXhaUVVGWmNuSkRMRXRCUVV0bk1rTXNXVUZCV1hvclFpeExRVUZMTm5wQ0xFMUJRVTFGTEdOQlFXTXZla0lzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZWNU5FTXNWVUZCVlN4VFFVRlRiRFJETEVkQlFVYzJRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhyUWtGQmJVSjBXQ3hIUVVGSExHbENRVUZyUWtFc1IwRkJSMlVzUzBGQlN6UXhReXhSUVVGUk1YTkRMRXRCUVV0cVN5eEZRVUZGTEVWQlFVVXNTVUZEYUdKeldTeExRVUZMYnl0Q0xHTkJRV05xTTBNc1ZVRkJWVEEwUXl4VlFVRlZMRk5CUVZOdU5FTXNSMEZCUnpaQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGRGZ3NSMEZCUjNWQ0xFdEJRVXMyWXl4TlFVRk5jR1VzU1VGQlNUWkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBkRmdzU1VGQlNYTlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmN2WVN4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2QwTXNWMEZCVjJoaExFdEJRVXRyTWtNc2IwSkJRVzlDYWpORExFbEJRVWx6V1N4TFFVRkxieXRDTEdOQlFXTnFNME1zVlVGQlZUSTBReXhYUVVGWExGTkJRVk53TkVNc1IwRkJSMlVzUzBGQlN6UXhReXhSUVVGUk1YTkRMRXRCUVV0U0xFMUJRVTB4U1N4TFFVRkxOREZETEZGQlFWRXpNa01zU1VGQlNYTlpMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWTkRSRExHdENRVUZyUWl4VFFVRlRjalJETEVkQlFVZHpXU3hMUVVGTE5ucENMRTFCUVUxWkxGbEJRVmt2YzBNc1IwRkJSMlVzUzBGQlN6Z3hReXh0UWtGQmJVSjJLMElzUzBGQlN6WjZRaXhOUVVGTlF5eFhRVUZYT1hwQ0xFdEJRVXMyZWtJc1RVRkJUVVVzWTBGRE0ySXZla0lzUzBGQlMyOHJRaXhqUVVGamFqTkRMRlZCUVZVMk5FTXNhVUpCUVdsQ0xGTkJRVk4wTkVNc1IwRkJSM05aTEV0QlFVczJla0lzVFVGQlRWa3NXVUZCV1M5elF5eEhRVUZIWlN4TFFVRkxaekpETEZsQlFWbDZLMElzUzBGQlN6WjZRaXhOUVVGTlF5eFpRVUZaY25KRExFdEJRVXRuTWtNc1dVRkJXWG9yUWl4TFFVRkxObnBDTEUxQlFVMUZMR05CUTNoS0wzcENMRXRCUVV0dkswSXNZMEZCWTJvelF5eFZRVUZWT0RSRExGbEJRVmtzVTBGQlUzWTBReXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUldNc1MwRkJTelF4UXl4UlFVRlJlREpETEU5QlFVOXFReXhGUVVGRkxFVkJRVVZCTEVWQlFVVTRRaXhGUVVGRlJ5eFBRVUZQYWtNc1NVRkJTU3hEUVVGRExFbEJRVWxETEVWQlFVVTJRaXhGUVVGRmVXVXNWMEZCVjNablFpeEhRVUZITEVkQlFVY3NTVUZCU1VNc1JVRkJSVFJETEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTE9Vd3NVVUZCVVN4SFFVRkhMRXRCUVV0QkxFVkJRVVUwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlN6bE1MRWRCUVVjc1JVRkJSU3hMUVVGTE5FTXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVThzUjBGQlJqbE1MRVZCUVVzc1ZVRkJWU3hIUVVGSExFMUJRVTFCTEVWQlFVVXNSMEZCUnl4UFFVRlBRU3hIUVVGSExFOUJRVTlCTEVkQlFVZEVMRVZCUVVVc1JVRkJSVGhDTEVWQlFVVkhMRTlCUVU4c1EwRkJReXhKUVVGSlF5eEZRVUZGU2l4RlFVRkZlV1VzVjBGQlYzWm5RaXhGUVVGRkxFZEJRVWNzVDBGQlQydERMRWRCUVVjc1QwRkJUMEVzU1VGQlNXcERMRVZCUVVVc1RVRkJUVUVzUlVGQlJTeFBRVUZQYVVNc1JVRkJSU3hOUVVGTkxFMUJRVTFYTEV0QlFVczBNVU1zVVVGQlVURnpReXhMUVVGTE9Vd3NSMEZCUnl4SFFVRkhMRXRCUVVzMFF5eExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJTemxNTEVkQlFVY3NSMEZCUnl4SFFVRkhMRXRCUVVzMFF5eExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJTemxNTEVkQlFVY3NSVUZCUlN4SFFVRkhMRXRCUVVzMFF5eExRVUZMTkRGRExGRkJRVkV4YzBNc1MwRkJUeXhIUVVGR09Vd3NSVUZCU3l4TFFVRkxSQ3hWUVVGVk5rTXNTMEZCU3pReFF5eFJRVUZSTVhORExFdEJRVXM1VEN4SFFVTjJaaXhIUVVGSExFdEJRVXMwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlN6bE1MRWRCUVVjc1JVRkJSU3hIUVVGSExFdEJRVXMwUXl4TFFVRkxOREZETEZGQlFWRXhjME1zUzBGQlR5eEhRVUZHT1V3c1JVRkJTeXhMUVVGTExFOUJRVTgwUXl4TFFVRkxOREZETEZGQlFWRjRNa01zVDBGQlQwWXNSMEZCUjNGWkxFdEJRVXRyWjBNc1RVRkJUU3hIUVVGSGJHZERMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUeXhUUVVGVGVqUkRMRVZCUVVWRExFZEJRVWRqTEV0QlFVc3lNME1zUjBGQlJ6RTBReXhGUVVGRlpTeExRVUZMTkRORExFZEJRVWN4TkVNc1IwRkJSM0ZaTEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVDJnMVF5eFZRVUZWYlRWRExFbEJRVWtzVTBGQlV6VTBReXhIUVVGSExFOUJRVTlsTEV0QlFVczBNME1zUjBGQlJ6TTBReXhGUVVGRk1qUkRMRWxCUVVrMU0wTXNTMEZCU3pRelF5eEpRVUZKTXpSRExFVkJRVVV5TkVNc1NVRkJTVFV6UXl4TFFVRkxNak5ETEVkQlFVY3hORU1zUlVGQlJUQTBReXhKUVVGSkxFVkJRVVV6TTBNc1MwRkJTelF6UXl4SlFVRkpNelJETEVWQlFVVXlORU1zU1VGQlNUVXpReXhMUVVGTE1qTkRMRWxCUVVreE5FTXNSVUZCUlRBMFF5eEhRVUZITEVWQlFVVXNSMEZCUjNCblF5eExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZXODFReXhYUVVGWExGZEJRVmNzVDBGQlR5eEpRVUZKZG1kRExFdEJRVXRyWjBNc1RVRkJUVU1zVVVGQlVURXpReXhMUVVGTE1qTkRMRXRCUVVzc1IwRkJWeXhGUVVGU016TkRMRXRCUVVzME0wTXNTMEZCVHl4TlFVRk5MRVZCUVVVMU0wTXNTMEZCU3pRelF5eExRVUZMTEVsQlFVa3NTVUZCU1hKblF5eExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZYRTFReXhWUVVGVkxGZEJRVmNzVDBGQlR5eEpRVUZKZUdkRExFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlR6RXpReXhMUVVGTE1qTkRMRWxCUVVrc1NVRkJTU3hIUVVGSE16TkRMRXRCUVVzME0wTXNTVUZCU1N4RlFVRkZOVE5ETEV0QlFVc3lNME1zUzBGQlN5eE5RVUZOTEVsQlEyeHBRbkJuUXl4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5b05VTXNWVUZCVlhNMVF5eEpRVUZKTEZkQlFWY3NVMEZCYVVJc1YwRkJVbWcwUXl4TFFVRkxORE5ETEV0QlFXZENjbWRETEV0QlFVdHJaME1zVFVGQlRVTXNUMEZCVDJnMVF5eFZRVUZWZFRWRExFbEJRVWtzVjBGQlZ5eFRRVUZwUWl4RlFVRlNhalJETEV0QlFVc3lNME1zUzBGQlQzQm5ReXhMUVVGTGEyZERMRTFCUVUxRExFOUJRVTlvTlVNc1ZVRkJWWGMxUXl4TFFVRkxMRmRCUVZjc1QwRkJUeXhIUVVGSGJEUkRMRXRCUVVzeU0wTXNTVUZCU1N4SFFVRkhNek5ETEV0QlFVczBNME1zU1VGQlNYSm5ReXhMUVVGTGEyZERMRTFCUVUxRExFOUJRVTlvTlVNc1ZVRkJWV2xXTEVsQlFVa3NVMEZCVXpGVkxFZEJRVWNzVDBGQlR5eEpRVUZKYzFrc1MwRkJTMnRuUXl4TlFVRk5ReXhSUVVGUk1UTkRMRXRCUVVzeU0wTXNSMEZCUnpFMFF5eEZRVUZGTURSRExFZEJRVWNzWTBGQll5eEpRVUZKTEVsQlFVa3pNME1zUzBGQlN6UXpReXhIUVVGSE16UkRMRVZCUVVVeU5FTXNSMEZCUnl4alFVRmpMRWxCUVVrc1dVRkJXVFV6UXl4TFFVRkxNak5ETEVkQlFVY3hORU1zUlVGQlJUQTBReXhIUVVGSExFVkJRVVVzUzBGQlN5eEpRVU5vV1hCblF5eExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZYazFReXhKUVVGSkxGTkJRVk5zTlVNc1IwRkJSeXhQUVVGUExFbEJRVWx6V1N4TFFVRkxhMmRETEUxQlFVMURMRkZCUVZFeE0wTXNTMEZCU3pJelF5eEhRVUZITVRSRExFVkJRVVV3TkVNc1IwRkJSeXhqUVVGakxFbEJRVWtzU1VGQlNUTXpReXhMUVVGTE5ETkRMRWRCUVVjek5FTXNSVUZCUlRJMFF5eEhRVUZITEdOQlFXTXNTVUZCU1N4RlFVRkZOVE5ETEV0QlFVc3lNME1zUjBGQlJ6RTBReXhGUVVGRk1EUkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFbEJRVWx3WjBNc1MwRkJTMnRuUXl4TlFVRk5ReXhQUVVGUFZTeFRRVUZUTEZOQlFWTnVOVU1zUlVGQlJVTXNSMEZCUnl4SlFVRkpMMElzUlVGQlNTeE5RVUZHT0VJc1JVRkJiMEkzUWl4RlFVRkpMRTFCUVVZNFFpeEZRVUZSUnl4RlFVRkZTQ3hKUVVGSkxFZEJRVFpETEVsQlFURkRRU3hGUVVGRkwwSXNSVUZCUlVNc1JVRkJSU3hQUVVGUFJDeEZRVUZGYTBNc1JVRkJSU3hQUVVGUExGRkJRWFpFU2l4TFFVRkxMRWxCUVRKRU4wSXNSVUZCUlN4UFFVRlhSQ3hGUVVGRk9FSXNSVUZCUlVrc1IwRkJSMnhETEVWQlFVVnJReXhKUVVGSkxFdEJRVXRLTEVWQlFVVTNRaXhKUVVGSkxFbEJRVWtzV1VGQldUaENMRWRCUVVkQkxFZEJRVWNzVjBGQlZ5OUNMRWRCUVVjc1JVRkJSU3hQUVVGUExFbEJRVWx2WVN4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5NE5FTXNTVUZCU1N4RlFVRkZMMElzU1VGQlNTeEpRVU12V1c5aExFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlQyZzFReXhWUVVGVk1qVkRMRWxCUVVrc1UwRkJVM0ExUXl4SFFVRkhMRWxCUVVsRExFVkJRVVZ4V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5VkxGTkJRVk53TkVNc1MwRkJTekl6UXl4SFFVRkhNVFJETEVkQlFUUkVMRTlCUVhwRVFTeEZRVUZGYzFrc1MwRkJTMnRuUXl4TlFVRk5ReXhQUVVGUFZTeFRRVUZUY0RSRExFdEJRVXMwTTBNc1IwRkJSek0wUXl4SlFVRkxNalJETEVkQlFVY3pORU1zUlVGQlJUQTBReXhIUVVGSE1UUkRMRVZCUVVVd05FTXNSMEZCUnl4RlFVRlRlalJETEVWQlFVVjVWU3hKUVVGSk1WVXNTVUZET1VweldTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZUUTFReXhKUVVGSkxGTkJRVk55TlVNc1IwRkJSeXhIUVVGSExFZEJRVWRCTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVsRExFVkJRVVVzU1VGQlNYRlpMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUeXhGUVVGRkxFZEJRVWQyTmtNc1JVRkJSU3hKUVVGSmIyRXNTMEZCUzJ0blF5eE5RVUZOUXl4UFFVRlBNVE5ETEV0QlFVc3lNME1zUjBGQlJ6TXpReXhMUVVGTE5ETkRMRWxCUVVrek5FTXNSVUZCUlN4SlFVRkpjMWtzUzBGQlMydG5ReXhOUVVGTlF5eFBRVUZQZWpSRExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVsQlFVazNRaXhGUVVGRkxFbEJRVWx0WVN4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU4c1JVRkJSU3hKUVVGSmVqUkRMRVZCUVVVck5FTXNUMEZCVHk4MFF5eEZRVUZGUVN4RlFVRkZPRFJETEZsQlFWa3pOa01zUlVGQlJVRXNSVUZCUlRJMlF5eFpRVUZaTEUxQlFVMHpOa01zUlVGQlJUZzJReXhSUVVGUkxFZEJRVWRxTlVNc1JVRkJSVFEwUXl4SlFVRkpNVFpETEV0QlFVc3JRaXhGUVVGRlFTeEZRVUZGZVZVc1NVRkJTWFpYTEVkQlFVZEVMRVZCUVVWQkxFVkJRVVZuTjBNc1NVRkJTV3cxUXl4SlFVRkpRU3hGUVVGRlFTeEZRVUZGTmpSRExHRkJRV0V4TmtNc1JVRkJSVUVzUlVGQlJUQTJReXhoUVVGaExFMUJRVTBzUTBGQlF6VTBReXhGUVVGRkwwSXNTVUZCU1c5aExFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlQyZzFReXhWUVVGVk5Fa3NVMEZCVXl4WFFVRlhMRWxCUVVrc1NVRkJTWEpKTEVWQlFVVXNSMEZCUjBNc1JVRkJSV01zVFVGQlRXUXNSVUZCUldjMVF5eFJRVUZSTEVOQlFXRXNTVUZCU1M4MlF5eEhRVUZvUWl0Q0xFVkJRVVZCTEVWQlFVVnZOVU1zU1VGQlNTeExRVUZaTEVkQlFVZHlOVU1zUlVGQlJVTXNSVUZCUlN4SFFVRkhlVFJETEVkQlFVY3hORU1zUlVGQlJVTXNSVUZCUlM5Q0xFVkJRV2xDTEUxQlFXWXNTVUZCU1RoQ0xFbEJRVWxCTEVWQlFVVXNTMEZCV1VFc1IwRkRjR1Z6V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU5aExGZEJRVmNzVTBGQlUzUTFReXhIUVVGSExFbEJRVWtzU1VGQlNVTXNSVUZCUlN4SlFVRkpjVmtzUzBGQlMydG5ReXhOUVVGTlF5eFBRVUZQTEVWQlFVVXNSMEZCUjNZMlF5eEZRVUZGTEVsQlFVbHZZU3hMUVVGTGEyZERMRTFCUVUxRExFOUJRVThzUlVGQlJTeEhRVUZIZERaRExFVkJRVVVzUlVGQlJVRXNSVUZCUlRaQ0xFVkJRVVZITEU5QlFVOW9ReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTmtJc1JVRkJSVGRDTEVsQlFVa3NTVUZCU1RaQ0xFVkJRVVUzUWl4SFFVRkhMRTlCUVU4c1MwRkJTeXhKUVVGSmFVTXNSVUZCUlRCbExGTkJRVk01WlN4RlFVRkZOMElzUjBGQlJ5eEpRVUZKUkN4RlFVRkZkelpETEVkQlFVZDBORU1zUlVGQlJVZ3NSVUZCUlVFc1JVRkJSVzAxUXl4SlFVRkpMRWxCUVVreGEwTXNTVUZCU1hoWExFZEJRVWNzVDBGQlR5dENMRWRCUVVkeFdTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOW9OVU1zVlVGQlZUaEtMRTFCUVUwc1YwRkJWeXhQUVVGUExFbEJRVWtyVHl4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU4eE0wTXNTMEZCU3pJelF5eEhRVUZITXpORExFdEJRVXMwTTBNc1MwRkJTM0puUXl4TFFVRkxhMmRETEUxQlFVMWxMRTFCUVUwc1UwRkJVM1kxUXl4RlFVRkZReXhIUVVGSFl5eExRVUZMTWpORExFZEJRVWN4TkVNc1JVRkJSV1VzUzBGQlN6UXpReXhIUVVGSE1UUkRMRWRCUXpGWGNWa3NTMEZCUzJ0blF5eE5RVUZOWlN4TlFVRk5PVFZETEZWQlFWVnBWaXhKUVVGSkxGTkJRVk14VlN4SFFVRkhMRTlCUVU4c1NVRkJTWE5aTEV0QlFVdHJaME1zVFVGQlRXVXNUMEZCVDNnMFF5eExRVUZMTWpORExFZEJRVWN4TkVNc1JVRkJSVEEwUXl4SFFVRkhMR05CUVdNc1NVRkJTU3hKUVVGSk16TkRMRXRCUVVzME0wTXNSMEZCUnpNMFF5eEZRVUZGTWpSRExFZEJRVWNzWTBGQll5eEpRVUZKTEZsQlFWazFNME1zUzBGQlN6SXpReXhIUVVGSE1UUkRMRVZCUVVVd05FTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1NVRkJTWEJuUXl4TFFVRkxhMmRETEUxQlFVMWxMRTFCUVUwNU5VTXNWVUZCVlhrMVF5eEpRVUZKTEZOQlFWTnNOVU1zUjBGQlJ5eFBRVUZQTEVsQlFVbHpXU3hMUVVGTGEyZERMRTFCUVUxbExFOUJRVTk0TkVNc1MwRkJTekl6UXl4SFFVRkhNVFJETEVWQlFVVXdORU1zUjBGQlJ5eGpRVUZqTEVsQlFVa3NTVUZCU1RNelF5eExRVUZMTkRORExFZEJRVWN6TkVNc1JVRkJSVEkwUXl4SFFVRkhMR05CUVdNc1NVRkJTU3hGUVVGRk5UTkRMRXRCUVVzeU0wTXNSMEZCUnpFMFF5eEZRVUZGTURSRExFZEJRVWNzUlVGQlJTeExRVUZMTEVsQlFVbHdaME1zUzBGQlMydG5ReXhOUVVGTlpTeE5RVUZOT1RWRExGVkJRVlU0U2l4TlFVRk5MRmRCUVZjc1QwRkJUeXhKUVVGSkswOHNTMEZCUzJ0blF5eE5RVUZOWlN4TlFVRk5lRFJETEV0QlFVc3lNME1zUjBGQlJ6TXpReXhMUVVGTE5ETkRMRXRCUTNaaGNtZERMRXRCUVV0clowTXNUVUZCVFdVc1RVRkJUVGsxUXl4VlFVRlZORWtzVTBGQlV5eFhRVUZYTEVsQlFVbHlTU3hGUVVGRkxFbEJRVmtzVjBGQlVtVXNTMEZCU3pRelF5eEpRVUZsTVRSRExFVkJRVVVzU1VGQlNYRlpMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUekV6UXl4TFFVRkxNak5ETEVkQlFVY3pNME1zUzBGQlN6UXpReXhKUVVFclF5eFBRVUV6UXpNMFF5eEpRVUZKUXl4RlFVRkZMRWxCUVV0eFdTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOHNSVUZCUlN4SFFVRkpVeXhKUVVGSmFqVkRMRXRCUVZkRUxFVkJRVVVzU1VGQlNTeEpRVUZKUXl4RlFVRkZiMGtzV1VGQldXbFJMRXRCUVV0clowTXNUVUZCVFdVc1RVRkJUVVFzVjBGQlZ5eFRRVUZUZERWRExFZEJRVWNzU1VGQlNVTXNSVUZCUlN4RlFVRkZSQ3hGUVVGRlJ5eFJRVUZSTEV0QlFVdElMRVZCUVVVc1IwRkJNa1FzVDBGQmVFUkRMRWxCUVVsRUxFVkJRVVZCTEVWQlFVVnpSQ3hWUVVGVkxFbEJRWGxETEZGQlFYSkRkRVFzUlVGQlJYTlpMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUMkVzVjBGQlYzUTFReXhKUVVGelFpeE5RVUZMUXl4SlFVRkpSQ3hGUVVGRkxFbEJRVXR6V1N4TFFVRkxhMmRETEUxQlFVMURMRTlCUVU4c1JVRkJSU3hIUVVGSlV5eEpRVUZKYkRWRExFbEJRVmNzU1VGQlNYTlpMRXRCUVV0clowTXNUVUZCVFdVc1RVRkJUWFkxUXl4RlFVRkZNRFJETEVkQlFVY3hORU1zUlVGQlJUSTBReXhOUVVGTGNtZERMRXRCUVV0cmFFTXNZVUZCWVN4WFFVRlhlalJETEV0QlFVc3dORU1zVVVGQlVTeEhRVUZITVRSRExFdEJRVXN5TkVNc1lVRkJZU3hGUVVGRk16UkRMRXRCUVVzME5FTXNVMEZCVXl4SlFVRkpjbWhETEV0QlFVdHZLMElzWTBGQll6TXhReXhMUVVGTE5qUkRMRmRCUVZjc1NVRkJTWFJvUXl4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXODJReXhyUWtGQmEwSXNVMEZCVXpjMVF5eEhRVUZITEVsQlFVbERMRVZCUVVWakxFdEJRVXMwTkVNc1UwRkJVeTlETEUxQlFVMDNNVU1zUzBGQlN6QTBReXhSUVVGUmVIWkRMRXRCUVV0b1N5eEhRVUZIWXl4TFFVRkxNRFJETEZGQlFWRjRka01zUzBGQlMycExMRWRCUVVkbExFdEJRVXN5TkVNc1kwRkJZM28xUXl4RlFVRkZSU3hQUVVGUFNDeEZRVUZGUnl4UlFVTTNja0p0V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYRTJReXhuUWtGQlowSXNVMEZCVXprMVF5eEhRVUZ6U3l4UFFVRnVTMlVzUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5GTEZkQlFWZHNZU3hGUVVGRlpTeExRVUZMTkRSRExGTkJRVk12UXl4TlFVRk5OekZETEV0QlFVc3dORU1zVVVGQlVYaDJReXhMUVVGTGFrc3NSMEZCUjJVc1MwRkJTekkwUXl4alFVRmpNVFZETEVWQlFVVkhMRTlCUVU5SUxFVkJRVVZwU3l4TFFVRkxiRW9zUzBGQlN6STBReXhqUVVGeFFqRTFReXhIUVVGSGMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlYxTmtNc1kwRkJZeXhUUVVGVGFEWkRMRWRCUVVjc1NVRkJTVU1zUlVGQlJVUXNSVUZCUldrMFFpeE5RVUZ0UkN4SlFVRTNRMmcwUWl4RlFVRkZZeXhMUVVGTE1qUkRMR0ZCUVdFek5FTXNTMEZCU3pRMFF5eFRRVUZUZURWRExGTkJRVk5HTEVWQlFVMDBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGNsZ3NSMEZCUnl4SlFVRkpRU3hIUVVGSFJDeEZRVUZGYVVzc1MwRkJUeXhKUVVGR2FFc3NSVUZCVFN4TFFVRkxRU3hMUVVGTExFVkJRVVZqTEV0QlFVc3lORU1zWlVGQlpURTFReXhGUVVGRmFVc3NTMEZCUzJoTExFZEJRVWRqTEV0QlFVc3lORU1zWjBKQlEzWmljR2hETEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmR6WkRMSFZDUVVGMVFpeFRRVUZUYWpaRExFVkJRVVZETEVWQlFVVXZRaXhIUVVGSE5rTXNTMEZCU3pnMFF5eHJRa0ZCYTBJM05VTXNSVUZCUld0elF5eFRRVUZUYW5ORExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWNU5rTXNORUpCUVRSQ0xGTkJRVk5zTmtNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1RVRkJUVGhDTEVkQlFVY3NUVUZCVFVNc1IwRkJSeXhOUVVGTkwwSXNSMEZCUnpaRExFdEJRVXRyTlVNc2RVSkJRWFZDYWpaRExFVkJRVVZETEVWQlFVVXZRaXhKUVVGSmIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlYxZDBNc1RVRkJUU3hYUVVGWGFuWkRMRXRCUVVzd05FTXNVVUZCVVN4SFFVRkhNVFJETEV0QlFVczBORU1zVTBGQlV5OURMRTFCUVUwM01VTXNTMEZCU3pJMFF5eGhRVUZoTEVWQlFVVXpORU1zUzBGQlN6WTBReXhYUVVGWExFbEJRM2hYZEdoRExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZNRFpETEdkQ1FVRm5RaXhYUVVGWGREUkRMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRWRCUVVkMlZ5eExRVUZMTmpSRExGZEJRVmQ2TlVNc1VVRkJVU3hKUVVGSkxFbEJRVWxJTEVWQlFVVXNTVUZCU1dselF5eFhRVUZYYkhKRExFdEJRVXN5TkVNc1lVRkJZVE0wUXl4TFFVRkxORFJETEZOQlFWTjROVU1zVlVGQlZVWXNSVUZCUldNc1MwRkJTekEwUXl4UlFVRlJkamRETEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYUVNc1JVRkJSU3hGUVVGRmFVTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUld0RExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZTaXhGUVVGRlJ5eEhRVUZIU2l4RlFVRkZNbFVzU1VGQlNYUlZMRVZCUVVWc1F5eEhRVUZIUVN4SFFVRkhhME1zUlVGQlJVWXNUMEZCYzBjc1QwRkJMMFpHTEVWQlFVVmpMRXRCUVVzME5FTXNVMEZCVXk5RExFMUJRVTAxTWtNc1JVRkJSVEpWTEVsQlFVa3hWU3hGUVVGRk9VSXNSMEZCUjBFc1IwRkJSemhDTEVWQlFVVkZMRTlCUVU4d1FpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQyNWFMRWRCUVVjMlFpeEZRVUZGUnl4UlFVRlJXU3hMUVVGTE1EUkRMRkZCUVZFc1EwRkJRM28xUXl4SFFVRlZRU3hIUVVGSGMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlV5TmtNc2MwSkJRWE5DTEZOQlFWTndOa01zUjBGQlJ5eFBRVUZQTmtJc1MwRkJTekJqTEUxQlFVMXBjMElzVDBGQlQydENMR2RDUVVGblFqTnhReXhMUVVGTGJ6VkRMR3RDUVVGclFtNDJReXhKUVVNM1pITlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTkRaRExHZENRVUZuUWl4VFFVRlRjalpETEVkQlFVZGxMRXRCUVVzMk5FTXNWMEZCVnpOMlF5eExRVUZMYkVvc1MwRkJTeXMwUXl4blFrRkJaMEk1TlVNc1MwRkJTM05aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk5qWkRMR05CUVdNc1YwRkJWM28wUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhkbGNzUzBGQlN6WTBReXhYUVVGWGVqVkRMRkZCUVZGWkxFdEJRVXRwTlVNc1kwRkJZMm8xUXl4TFFVRkxOalJETEZkQlFWY3phRUlzVVVGQlVUTm1MRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWY3paRExHdENRVUZyUWl4VFFVRlRMelZETEVWQlFVVkRMRWRCUVVjMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIZEZnc1IwRkJSMEVzUjBGQlIzVkNMRXRCUVVzMll5eE5RVUZOY0dVc1NVRkJTV1VzUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0xFVkJRVVZvTTBNc1JVRkJSVU1zU1VGRGRGbHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRnMlF5eFRRVUZUTEZOQlFWTjJOa01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzU1VGQlNVTXNSVUZCUlcxaExFdEJRVXRETEdkQ1FVRm5Ra2NzVlVGQlZTeFBRVUZQTVZrc1IwRkJSeXhMUVVGTE4wSXNSVUZCUlhsaExFOUJRVTgzV0N4TFFVRkxhek5ETEZsQlFWbG9ORU1zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3hMUVVGTFF5eEZRVUZGTUdFc1RVRkJUVGxZTEV0QlFVdHBNME1zVjBGQlZ5OHpReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5MRXRCUVV0RExFVkJRVVV5WVN4TlFVRk5MMWdzUzBGQlN5c3lReXhYUVVGWE56TkRMRVZCUVVVdlFpeEhRVUZITEUxQlFVMHNTMEZCUzBNc1JVRkJSVFJoTEU5QlFVOW9XU3hMUVVGTE1qSkRMRmxCUVZsNk0wTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTeExRVUZMUXl4RlFVRkZObUVzVFVGQlRXcFpMRXRCUVVzNE1rTXNWMEZCVnpVelF5eEZRVUZGTDBJc1IwRkJSeXhOUVVGTkxFdEJRVXRETEVWQlFVVTRZU3hSUVVGUmJGa3NTMEZCUzNrMVF5eGhRVUZoZGpaRExFVkJRVVV2UWl4SFFVRkhMRTFCUVUwc1MwRkJTME1zUlVGQlJTdGhMRkZCUVZGdVdTeExRVUZMTURWRExHRkJRV0Y0TmtNc1JVRkJSUzlDTEVkQlFVY3NUVUZCVFN4TFFVRkxReXhGUVVGRloySXNTMEZCUzNCWkxFdEJRVXR0TTBNc1ZVRkJWV28wUXl4RlFVRkZMMElzUjBGQlJ5eE5RVUZOTEV0QlFVdERMRVZCUVVWcFlpeFBRVUZQY2xrc1MwRkJTM2N6UXl4WlFVRlpkRFJETEVWQlFVVXZRaXhIUVVGSExFMUJRVTBzUzBGQlMwTXNSVUZCUld0aUxFMUJRVTE0V0N4TFFVRkxaMVlzVVVGQlVWY3NTMEZCU3l4blJFRkRkbVlzVFVGQlRTeExRVUZMY2xvc1JVRkJSVzFpTEZGQlFWRjZXQ3hMUVVGTFoxWXNVVUZCVVZjc1MwRkJTeXhyUkVGQmEwUXNUVUZCVFN4TFFVRkxjbG9zUlVGQlJXOWlMRTFCUVUxNFdTeExRVUZMY1RORExGZEJRVmR1TkVNc1JVRkJSUzlDTEVkQlFVY3NUVUZCVFN4TFFVRkxReXhGUVVGRmNXSXNUMEZCVDNwWkxFdEJRVXRuTWtNc1dVRkJXVGt5UXl4RlFVRkZMMElzUjBGQlJ5eE5RVUZOTEV0QlFVdERMRVZCUVVWellpeExRVUZMTVZrc1MwRkJTMjh6UXl4VlFVRlZiRFJETEVWQlFVVXZRaXhIUVVGSExFMUJRVTBzUzBGQlMwTXNSVUZCUlhWaUxGTkJRVk16V1N4TFFVRkxNalZETEdOQlFXTjZOa01zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3hMUVVGTFF5eEZRVUZGZDJJc1UwRkJVelZaTEV0QlFVczBOVU1zWTBGQll6RTJReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5MRXRCUVV0RExFVkJRVVY1WWl4UFFVRlBOMWtzUzBGQlN6WTFReXhaUVVGWk16WkRMRVZCUVVVdlFpeEhRVUZITEUxQlFVMHNTMEZCUzBNc1JVRkJSVEJpTEU5QlFVODVXU3hMUVVGTE9EVkRMRmxCUVZrMU5rTXNSVUZCUlM5Q0xFZEJRVWNzVFVGQlRTeExRVUZMUXl4RlFVRkZNbUlzVVVGQlVTOVpMRXRCUVV0MU0wTXNhVUpCUVdsQ2NqUkRMRVZCUVVVdlFpeEhRVUZITEUxQlFVMHNTMEZCUzBNc1JVRkJSVFJpTEZGQlFWRm9XaXhMUVVGTGN6TkRMR3RDUVVGclFuQTBReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5MRkZCUVZFeVJDeExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eHpRMEZEYkdkQ1l5eExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWEUzUXl4MVFrRkJkVUlzVTBGQlV6azJReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsakxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFF5eFJRVUZSYkZvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMekpETEV0QlFVdHhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhNM1F5eHhRa0ZCY1VJc1UwRkJVeTgyUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVbGpMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRReXhSUVVGUmJGb3NTMEZCU3pRMFF5eFRRVUZUTVVNc2IwSkJRVzlDYURORExFdEJRVXR4V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYVTNReXgxUWtGQmRVSXNVMEZCVTJnM1F5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxqTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUXl4UlFVRlJiRm9zUzBGQlN6UTBReXhUUVVGVGVrTXNjMEpCUVhOQ2FqTkRMRXRCUTJob1FuRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZHpkRExIRkNRVUZ4UWl4VFFVRlRhamRETEVWQlFVVkRMRWRCUVVjc1RVRkJUVUVzU1VGQlNXTXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkRMRkZCUVZGc1dpeExRVUZMTkRSRExGTkJRVk40UXl4dlFrRkJiMEpzTTBNc1MwRkJTM0ZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmVUZERMSEZDUVVGeFFpeFRRVUZUYkRkRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTV01zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFWRnNXaXhMUVVGTE5EUkRMRk5CUVZOMlF5eHZRa0ZCYjBKdU0wTXNTMEZCUzNGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZNRGRETEhGQ1FVRnhRaXhUUVVGVGJqZERMRVZCUVVWRExFZEJRVWNzVFVGQlRVRXNTVUZCU1dNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRVkZzV2l4TFFVRkxORFJETEZOQlFWTjBReXh2UWtGQmIwSndNME1zUzBGRGVHZENjVmtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVeU4wTXNNa0pCUVRKQ0xGTkJRVk53TjBNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SlFVRkpZeXhMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVME1zVVVGQlVXeGFMRXRCUVVzME5FTXNVMEZCVTNKRExEQkNRVUV3UW5JelF5eExRVUZMY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVTBOME1zZVVKQlFYbENMRk5CUVZOeU4wTXNSVUZCUlVNc1IwRkJSeXhOUVVGTlFTeEpRVUZKWXl4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlUzQkRMSGRDUVVGM1FuUXpReXhMUVVNM1YzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYnpSRExGZEJRVmNzVTBGQlV6Y3pReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzSllMRWxCUVVseFdTeExRVUZMUXl4blFrRkJaMEozUXl4WFFVRlhPV0VzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmRvWVN4TFFVRkxaelpETEhGQ1FVRnhRaTgyUXl4RlFVRkZReXhMUVVGTGNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlUyTjBNc2FVSkJRV2xDTEZOQlFWTjBOME1zUlVGQlJVTXNSMEZCUnl4TlFVRk5RU3hKUVVGSlFTeEZRVUZGTm1Vc1UwRkJVemRsTEVWQlFVVXNTVUZCU1RSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGNsZ3NTVUZCU1hGWkxFdEJRVXRETEdkQ1FVRm5RbmRETEZkQlFWYzVZU3hGUVVGRmNWa3NTMEZCUzBNc1owSkJRV2RDZDBNc1YwRkJWMmhoTEV0QlFVdG5Oa01zY1VKQlFYRkNMelpETEVWQlFVVkRMRXRCUTNSWmNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ4TkVNc1YwRkJWeXhUUVVGVE9UTkRMRVZCUVVWRExFZEJRVWNzVFVGQlRVRXNTVUZCU1RSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUGNsZ3NTVUZCU1hGWkxFdEJRVXRETEdkQ1FVRm5RakpETEZkQlFWZHFZaXhGUVVGRmNWa3NTMEZCUzBNc1owSkJRV2RDTWtNc1YwRkJWMjVoTEV0QlFVdHJOa01zY1VKQlFYRkNhamRETEVWQlFVVkRMRXRCUVV0eFdTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWE0wUXl4cFFrRkJhVUlzVTBGQlV5OHpReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsQkxFVkJRVVZ4V1N4TFFVRkxhMmRETEUxQlFVMWxMRTFCUVUxRUxGZEJRVmR5TlVNc1IwRkJSMk1zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFWRnNXaXhMUVVGTE5EUkRMRk5CUVZNNVF5eHRRa0ZCYlVJMU1rTXNSVUZCUlhrMFF5eEhRVUZIZWpSRExFVkJRVVV3TkVNc1RVRkRkbGx5WjBNc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnpNME1zV1VGQldTeFRRVUZUTHpKRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQTEVkQlFVZHlXQ3hIUVVGSFFTeEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENlVU1zVjBGQlYycGhMRXRCUVVzck5VTXNkVUpCUVhWQ09UWkRMRVZCUVVWRExFdEJRVXR4V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUZzNReXhyUWtGQmEwSXNVMEZCVTNZM1F5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWxCTEVWQlFVVTJaU3hUUVVGVE4yVXNSVUZCUlN4SlFVRkpORUlzUzBGQlMyZFdMRkZCUVZGVExFOUJRVThzUjBGQlIzSllMRWRCUVVkQkxFVkJRVVZ4V1N4TFFVRkxReXhuUWtGQlowSjVReXhYUVVGWGFtRXNTMEZCU3lzMVF5eDFRa0ZCZFVJNU5rTXNSVUZCUlVNc1MwRkJTM0ZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmFUUkRMRmxCUVZrc1UwRkJVekV6UXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVazBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGNsZ3NSMEZCUjBFc1JVRkJSWEZaTEV0QlFVdERMR2RDUVVGblFqUkRMRmRCUVZkd1lTeExRVUZMYVRaRExIVkNRVUYxUW1nM1F5eEZRVUZGUXl4TFFVTXZaWEZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVkt6ZERMR3RDUVVGclFpeFRRVUZUZURkRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTVUVzUlVGQlJYRlpMRXRCUVV0clowTXNUVUZCVFVNc1QwRkJUMkVzVjBGQlYzSTFReXhIUVVGSFl5eExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCVVd4YUxFdEJRVXMwTkVNc1UwRkJVemxETEcxQ1FVRnRRalV5UXl4RlFVRkZlVFJETEVkQlFVZDZORU1zUlVGQlJUQTBReXhOUVVGTmNtZERMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYlRkRExGbEJRVmtzVTBGQlV6VTJReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzSllMRWxCUVVseFdTeExRVUZMUXl4blFrRkJaMEozUXl4WFFVRlhPV0VzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmRvWVN4TFFVRkxiVFpETEhGQ1FVRnhRbXczUXl4RlFVRkZReXhMUVVNeldYRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYnpkRExGbEJRVmtzVTBGQlV6YzJReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzSllMRWxCUVVseFdTeExRVUZMUXl4blFrRkJaMEl5UXl4WFFVRlhhbUlzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUWpKRExGZEJRVmR1WVN4TFFVRkxielpETEhGQ1FVRnhRbTQzUXl4RlFVRkZReXhMUVVGTGNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZuT0VNc1owSkJRV2RDTEZOQlFWTjZOME1zUlVGQlJVTXNSMEZCUnl4TlFVRk5RU3hIUVVGSFl5eExRVUZMY3paRExIbENRVUY1UW5JM1F5eEZRVUZGUXl4SlFVRkpjVmtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWcE9FTXNhMEpCUVd0Q0xGTkJRVk14TjBNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SFFVRkhZeXhMUVVGTGNUWkRMREpDUVVFeVFuQTNReXhGUVVGRlF5eEpRVU42V1hGWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZaemRETEdGQlFXRXNVMEZCVTNvMlF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhjbGdzUjBGQlIwRXNSVUZCUlhGWkxFdEJRVXRETEdkQ1FVRm5RbmxETEZkQlFWZHFZU3hMUVVGTFp6VkRMR3RDUVVGclFpODFReXhGUVVGRmMxa3NTMEZCUzBNc1owSkJRV2RDZVVJc1UwRkJVMlFzVTBGQlUyNVpMRXRCUVVzME5FTXNVMEZCVXpWRExGbEJRVms1TWtNc1MwRkJTM0ZaTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVkt6WkRMR0ZCUVdFc1UwRkJVM2cyUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVazBRaXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUeXhIUVVGSGNsZ3NSMEZCUjBFc1JVRkJSWEZaTEV0QlFVdERMR2RDUVVGblFqUkRMRmRCUVZkd1lTeExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUyWXNVMEZCVTJ4WkxFdEJRVXMwTkVNc1UwRkJVMnBETEZsQlFWbDZNME1zUzBGRGJtSnhXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVldzNFF5eHRRa0ZCYlVJc1UwRkJVek0zUXl4RlFVRkZReXhIUVVGSExFMUJRVTFCTEVsQlFVbEJMRVZCUVVWeFdTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOWhMRmRCUVZkeU5VTXNSMEZCUjJNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRVk5zV1N4TFFVRkxORFJETEZOQlFWTTNReXhyUWtGQmEwSTNNa01zUlVGQlJYazBReXhIUVVGSGVqUkRMRVZCUVVVd05FTXNUVUZCVFhKblF5eExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2szUXl4alFVRmpMRk5CUVZNeE5rTXNSVUZCUlVNc1IwRkJSeXhOUVVGTlFTeEpRVUZKTkVJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5eVdDeEpRVUZKY1Zrc1MwRkJTME1zWjBKQlFXZENkME1zVjBGQlZ6bGhMRVZCUVVWeFdTeExRVUZMUXl4blFrRkJaMEozUXl4WFFVRlhhR0VzUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5rTEZOQlFWTnVXU3hMUVVGTE5EUkRMRk5CUVZNNVFpeFhRVUZYTlRORExFdEJRek5qY1Zrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnJOME1zWTBGQll5eFRRVUZUTXpaRExFVkJRVVZETEVkQlFVY3NUVUZCVFVFc1NVRkJTVFJDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQY2xnc1NVRkJTWEZaTEV0QlFVdERMR2RDUVVGblFqSkRMRmRCUVZkcVlpeEZRVUZGY1Zrc1MwRkJTME1zWjBKQlFXZENNa01zVjBGQlYyNWhMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRaaXhUUVVGVGJGa3NTMEZCU3pRMFF5eFRRVUZUTjBJc1YwRkJWemN6UXl4TFFVRkxjVmtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWdE9FTXNiMEpCUVc5Q0xGTkJRVk0xTjBNc1JVRkJSVU1zUjBGQlJ5eE5RVUZOUVN4SlFVRkpRU3hGUVVGRmNWa3NTMEZCUzJ0blF5eE5RVUZOWlN4TlFVRk5SQ3hYUVVGWGNqVkRMRWRCUVVkakxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFppeFRRVUZUYkZrc1MwRkJTelEwUXl4VFFVRlROME1zYTBKQlFXdENOekpETEVWQlFVVjVORU1zUjBGQlIzbzBReXhGUVVGRk1EUkRMRTFCUXpGamNtZERMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZFRSRExGZEJRVmNzVTBGQlUyZzBReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsakxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFpDeFRRVUZUYmxrc1MwRkJTelEwUXl4VFFVRlRNMElzVjBGQlZ5OHpReXhMUVVGTGNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlYzTkVNc1dVRkJXU3hUUVVGVGFqUkRMRVZCUVVWRExFZEJRVWNzVFVGQlRVRXNTVUZCU1dNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRVk5zV1N4TFFVRkxORFJETEZOQlFWTXhRaXhaUVVGWmFEUkRMRXRCUTNaVWNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlY1TkVNc1ZVRkJWU3hUUVVGVGJEUkRMRVZCUVVWRExFZEJRVWNzVFVGQlRVRXNTVUZCU1RSQ0xFdEJRVXRuVml4UlFVRlJVeXhQUVVGUExHdENRVUZ0UW5KWUxFZEJRVWNzYVVKQlFXdENRU3hIUVVGSFl5eExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwTXNVVUZCVVd4YUxFdEJRVXMwTkVNc1UwRkJVM3BDTEZWQlFWVnFORU1zUzBGQlMzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWTURSRExGVkJRVlVzVTBGQlUyNDBReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlQzSllMRWxCUVVseFdTeExRVUZMUXl4blFrRkJaMEozUXl4WFFVRlhPV0VzUlVGQlJYRlpMRXRCUVV0RExHZENRVUZuUW5kRExGZEJRVmRvWVN4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlV6RkRMRzlDUVVGdlFtZ3pReXhMUVVOc1pIRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWT0RSRExGbEJRVmtzVTBGQlUzWTBReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVsRUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVZGxMRXRCUVVzME5FTXNVMEZCVTNCQ0xGbEJRVmwwTkVNc1IwRkJSMk1zUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUVV0eldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVEkwUXl4WFFVRlhMRk5CUVZOd05FTXNSVUZCUlVNc1IwRkJSeXhOUVVGTlFTeEpRVUZKUVN4RlFVRkZjVmtzUzBGQlN6WjZRaXhOUVVGTk5FTXNkVUpCUVhWQ09YVkRMRWRCUVVkakxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYYmxvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMekpETEVWQlFVVkZMRkZCUVZGWkxFdEJRVXM0TkVNc2EwSkJRV3RDTlRWRExFdEJRVXR4V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXODRReXhoUVVGaExGTkJRVk0zTjBNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3RDTEVsQlFVbEVMRVZCUVVWbExFdEJRVXNyTkVNc1owSkJRV2RDT1RWRExFZEJRVWM1UWl4RlFVRkZLMElzUlVGQlJXTXNUVUZCVFVFc1MwRkJTMmsxUXl4alFVRmphRFpETEV0QlF6Tm1jMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWeE9FTXNaMEpCUVdkQ0xGTkJRVk01TjBNc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1RVRkJUU3RDTEVsQlFVbGpMRXRCUVV0bk5VTXNhMEpCUVd0Q0xFVkJRVVY2YUVNc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwY3NZVUZCWVhCYUxFdEJRVXRuTlVNc2EwSkJRV3RDTEVWQlFVVjZhRU1zUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlV6RkRMRzlDUVVGdlFtb3pReXhIUVVGSFFTeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RaXhIUVVGSE5UZERMRVZCUVVVclFpeEZRVUZGWXl4TlFVRk5RU3hMUVVGTGFUVkRMR05CUVdOb05rTXNSMEZCUjJVc1MwRkJTMmMxUXl4clFrRkJhMElzUlVGQlJYcG9ReXhMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUU1N4aFFVTXZWamxDTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmN6aERMRmRCUVZjc1UwRkJVeTgzUXl4RlFVRkZReXhGUVVGRkwwSXNSMEZCUnl4TlFVRk5LMElzU1VGQlNXTXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkhMR0ZCUVdGcVl5eEZRVUZGSzBJc1JVRkJSV01zVFVGQlRVRXNTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTkpMR0ZCUVdFNVFpeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVFkwUXl4cFFrRkJhVUlzVTBGQlUzUTBReXhGUVVGRlF5eEhRVUZITEUxQlFVMUJMRWxCUVVrMFFpeExRVUZMWjFZc1VVRkJVVk1zVDBGQlR5eEhRVUZIY2xnc1JVRkJSVVVzVVVGQlVWa3NTMEZCUzJjMVF5eHJRa0ZCYTBJdk5VTXNSVUZCUlhOWkxFdEJRVXRETEdkQ1FVRm5RbmxDTEZOQlFWTm1MRk5CUVZOc1dTeExRVUZMTkRSRExGTkJRVk55UWl4cFFrRkJhVUp5TkVNc1MwRkRlRnB4V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUUTBReXhyUWtGQmEwSXNVMEZCVTNJMFF5eEZRVUZGUXl4SFFVRkhMRTFCUVUxQkxFbEJRVWswUWl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVHl4SFFVRkhjbGdzUlVGQlJVVXNVVUZCVVZrc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORExGRkJRVkZzV2l4TFFVRkxORFJETEZOQlFWTjBRaXhyUWtGQmEwSndORU1zUzBGQlMzRlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWY1RORExHdENRVUZyUWl4VFFVRlRPVEpETEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITmtNc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZObUxGTkJRVk5zV1N4TFFVRkxORFJETEZOQlFWTTNReXhyUWtGQmEwSTNNa01zUlVGQlJTOUNMRWxCUXpOWGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ2TTBNc2JVSkJRVzFDTEZOQlFWTTNNa01zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWMyUXl4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBNc1VVRkJVV3hhTEV0QlFVczBORU1zVTBGQlV6bERMRzFDUVVGdFFqVXlReXhGUVVGRkwwSXNTVUZCU1c5aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZkVGhETEhsQ1FVRjVRaXhUUVVGVGFEaERMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhOa01zUzBGQlMyYzFReXhyUWtGQmEwSXZOVU1zUlVGQlJYTlpMRXRCUVV0RExHZENRVUZuUW5sQ0xGTkJRVk5ETEZGQlFWRXNTVUZCU1RsaUxFVkJRVVUwUXl4TFFVRkxORFJETEZOQlFWTnlhRU1zUzBGQlN6WjZRaXhOUVVGTlpTeFhRVUZYYW5SRExFVkJRVVV2UWl4SFFVRkZMRk5CUVZNNFFpeEZRVUZGUXl4SFFVRkhPVUlzUlVGQlJUQTBReXh0UWtGQmJVSTNNa01zU1VGQlNTeEZRVUZGUXl4SlFVRkpMRTlCUTNCWmNWa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlYzT0VNc2JVSkJRVzFDTEZOQlFWTnFPRU1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFVkJRVVVzU1VGQlNTeEpRVUZKTDBJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrMlF5eExRVUZMWnpaRExIRkNRVUZ4UWk4MlF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZVRoRExIbENRVUY1UWl4VFFVRlRiRGhETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzNVMlF5eHBRa0ZCYVVKME4wTXNSVUZCUlVNc1JVRkJSUzlDTEV0QlFVdHZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRBNFF5eHRRa0ZCYlVJc1UwRkJVMjQ0UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0ck5rTXNjVUpCUVhGQ2FqZERMRVZCUVVWRExFVkJRVVV2UWl4TFFVTXZXVzloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1qaERMREJDUVVFd1FpeFRRVUZUY0RoRExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFRoQ0xFVkJRVVVzU1VGQlNTeEpRVUZKUnl4RlFVRkZMRVZCUVVWQkxFVkJRVVZJTEVWQlFVVkZMRTlCUVU5RExFbEJRVWxYTEV0QlFVc3JNVU1zYTBKQlFXdENPVEpETEVWQlFVVTVRaXhGUVVGRkswSXNSVUZCUlVjc1NVRkJTV3BETEVWQlFVVTRRaXhGUVVGRlJ5eE5RVUZOYTFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVTBPRU1zTWtKQlFUSkNMRk5CUVZOeU9FTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTk9FSXNSVUZCUlN4SlFVRkpMRWxCUVVsSExFVkJRVVVzUlVGQlJVRXNSVUZCUlVnc1JVRkJSVVVzVDBGQlQwTXNTVUZCU1Zjc1MwRkJTemd4UXl4dFFrRkJiVUkzTWtNc1JVRkJSVGxDTEVWQlFVVXJRaXhGUVVGRlJ5eEpRVUZKYWtNc1JVRkJSVGhDTEVWQlFVVkhMRTFCUVUxcldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVFk0UXl4cFEwRkJhVU1zVTBGQlUzUTRReXhGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMDRRaXhGUVVGRkxFbEJRVWtzU1VGQlNVY3NSVUZCUlN4RlFVRkZRU3hGUVVGRlNDeEZRVUZGUlN4UFFVRlBReXhKUVVGSlZ5eExRVUZMYVRkRExIbENRVUY1UW1nNFF5eEZRVUZGT1VJc1JVRkJSU3RDTEVWQlFVVkhMRWxCUVVscVF5eEZRVUZGT0VJc1JVRkJSVWNzVFVGRGNtUnJXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlRnNFF5eDVRa0ZCZVVJc1UwRkJVM1k0UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0bk0wTXNhVUpCUVdsQ0x6TkRMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVck9FTXNiMEpCUVc5Q0xGTkJRVk40T0VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTEt6VkRMSFZDUVVGMVFqazJReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTMjloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVlp6bERMREJDUVVFd1FpeFRRVUZUZWpoRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlMzYzJReXhyUWtGQmEwSjJOME1zUlVGQlJVTXNSVUZCUlM5Q0xFdEJRM1JhYjJFc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVnBPVU1zYjBKQlFXOUNMRk5CUVZNeE9FTXNSVUZCUlVNc1IwRkJSeXhIUVVGSExFMUJRVTFCTEVWQlFVVXNTVUZCU1N4SlFVRkpMMElzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxhVFpETEhWQ1FVRjFRbWczUXl4RlFVRkZReXhGUVVGRkwwSXNTMEZCUzI5aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZhemxETERCQ1FVRXdRaXhUUVVGVE16aERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4RlFVRkZMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTM2syUXl4clFrRkJhMEo0TjBNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVV0dllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWVzA1UXl4dlFrRkJiMElzVTBGQlV6VTRReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1JVRkJSU3hKUVVGSkxFbEJRVWt2UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RaRExFdEJRVXR0TmtNc2NVSkJRWEZDYkRkRExFVkJRVVZETEVWQlFVVXZRaXhMUVVOeVdtOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYnpsRExHOUNRVUZ2UWl4VFFVRlROemhETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzI4MlF5eHhRa0ZCY1VKdU4wTXNSVUZCUlVNc1JVRkJSUzlDTEV0QlFVdHZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhFNVF5d3dRa0ZCTUVJc1UwRkJVems0UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0eE5rTXNNa0pCUVRKQ2NEZERMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWek9VTXNkMEpCUVhkQ0xGTkJRVk12T0VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTGN6WkRMSGxDUVVGNVFuSTNReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkRjR0Z2WVN4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYVTVReXh4UWtGQmNVSXNVMEZCVTJnNVF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUlVGQlJTeEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVc3dOVU1zWVVGQllYbzJReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTMjloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmR6bERMSEZDUVVGeFFpeFRRVUZUYWpsRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlMzazFReXhoUVVGaGVEWkRMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWNU9VTXNNa0pCUVRKQ0xGTkJRVk5zT1VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5EWkRMRzFDUVVGdFFqTTNReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkRkbGx2WVN4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUQTVReXh6UWtGQmMwSXNVMEZCVTI0NVF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUlVGQlJTeEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVc3lOVU1zWTBGQll6RTJReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTMjloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1qbERMSE5DUVVGelFpeFRRVUZUY0RsRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlN6UTFReXhqUVVGak16WkRMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVME9VTXNORUpCUVRSQ0xGTkJRVk55T1VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTE5qWkRMRzlDUVVGdlFqVTNReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkROMWx2WVN4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUWTVReXh0UWtGQmJVSXNVMEZCVTNRNVF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUlVGQlJTeEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVdHBNME1zVjBGQlYyZzBReXhGUVVGRlF5eEZRVUZGTDBJc1MwRkJTMjloTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk9EbERMRzlDUVVGdlFpeFRRVUZUZGpsRExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hGUVVGRkxFbEJRVWtzU1VGQlNTOUNMRVZCUVVVc1JVRkJSVUVzUlVGQlJTdENMRVZCUVVWRkxFOUJRVTlxUXl4SlFVRkpOa01zUzBGQlMyc3pReXhaUVVGWmFqUkRMRVZCUVVWRExFVkJRVVV2UWl4TFFVRkxiMkVzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVck9VTXNhMEpCUVd0Q0xGTkJRVk40T1VNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRVZCUVVVc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazJReXhMUVVGTGJUTkRMRlZCUVZWc05FTXNSVUZCUlVNc1JVRkJSUzlDTEV0QlFVdHZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVldjclF5eHJRa0ZCYTBJc1UwRkJVM281UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0dk0wTXNWVUZCVlc0MFF5eEZRVUZGUXl4RlFVRkZMMElzUzBGRGVtVnZZU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVldrclF5eHZRa0ZCYjBJc1UwRkJVekU1UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4SlFVRkpMRWxCUVVrdlFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVV0M00wTXNXVUZCV1hZMFF5eEZRVUZGUXl4RlFVRkZMMElzUzBGQlMyOWhMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYXl0RExHMUNRVUZ0UWl4VFFVRlRNemxETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEZRVUZGTEVsQlFVa3NTVUZCU1M5Q0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCUzNFelF5eFhRVUZYY0RSRExFVkJRVVZETEVWQlFVVXZRaXhMUVVGTGIyRXNTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ0SzBNc2NVSkJRWEZDTEZOQlFWTTFPVU1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzUjBGQlJ5eE5RVUZOSzBJc1JVRkJSU3hKUVVGSkxFbEJRVWs1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZSU3hQUVVGUGFFTXNTVUZCU1N4RFFVRkRMRWxCUVVscFF5eEZRVUZGVnl4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhPVUlzUlVGQlJTdENMRVZCUVVVNVFpeEhRVUZITkVNc1RVRkJUVUVzUzBGQlMyazFReXhqUVVGak5UVkRMRXRCUTJoaGExa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlZ2SzBNc2JVSkJRVzFDTEZOQlFWTTNPVU1zUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzUjBGQlJ5eE5RVUZOSzBJc1JVRkJSU3hKUVVGSkxFbEJRVWs1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVU0UWl4RlFVRkZSU3hQUVVGUGFFTXNTVUZCU1RSRExFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJ5eGhRVUZoYW1Nc1JVRkJSU3RDTEVWQlFVVTVRaXhIUVVGSE5FTXNUVUZCVFVFc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZOSkxGbEJRVms1UWl4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZYRXJReXg1UWtGQmVVSXNVMEZCVXprNVF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUlVGQlJTeEpRVUZKTEVsQlFVa3ZRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVdDFNME1zYVVKQlFXbENkRFJETEVWQlFVVkRMRVZCUVVVdlFpeExRVU0xV0c5aExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZjeXRETERCQ1FVRXdRaXhUUVVGVEx6bERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4RlFVRkZMRWxCUVVrc1NVRkJTUzlDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTM016UXl4clFrRkJhMEp5TkVNc1JVRkJSVU1zUlVGQlJTOUNMRXRCUVV0dllTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWWFVyUXl4cFFrRkJhVUlzVTBGQlUyZ3JReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1IwRkJSMEVzUlVGQlJVVXNUMEZCVHl4RFFVRkRTQ3hGUVVGRlpTeExRVUZMS3pSRExHZENRVUZuUWprMVF5eEhRVUZITEVsQlFVa3NTVUZCU1RsQ0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCU3pRMFF5eFRRVUZUTVVNc2IwSkJRVzlDYURORExFVkJRVVV2UWl4SlFVRkpOa01zUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUXpOVmMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlYzSzBNc2RVSkJRWFZDTEZOQlFWTnFLME1zUlVGQlJVTXNSMEZCUnl4SFFVRkhMRTFCUVUxQkxFZEJRVWRCTEVWQlFVVkZMRTlCUVU4c1EwRkJRMGdzUlVGQlJXVXNTMEZCU3lzMFF5eG5Ra0ZCWjBJNU5VTXNSMEZCUnl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVVclFpeEZRVUZGUlN4UFFVRlBha01zU1VGQlNUWkRMRXRCUVVzME5FTXNVMEZCVXpGRExHOUNRVUZ2UW00MFFpeFRRVUZUTjJVc1JVRkJSUzlDTEVkQlFVY3NTMEZCU3paRExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVRkxjMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWNUswTXNhVUpCUVdsQ0xGTkJRVk5zSzBNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRWRCUVVkQkxFVkJRVVZGTEU5QlFVOHNRMEZCUTBnc1JVRkJSV1VzUzBGQlN5czBReXhuUWtGQlowSTVOVU1zUjBGQlJ5eEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVczBORU1zVTBGQlUzaERMRzlDUVVGdlFtd3pReXhGUVVGRkwwSXNTVUZCU1RaRExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVTXhXbk5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1DdERMSGRDUVVGM1FpeFRRVUZUYml0RExFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFRoQ0xFVkJRVVVzUTBGQlEwUXNSVUZCUldVc1MwRkJTeXMwUXl4blFrRkJaMEk1TlVNc1IwRkJSeXhKUVVGSkxFbEJRVWxKTEVWQlFVVXNSVUZCUlVFc1JVRkJSVWdzUlVGQlJVVXNUMEZCVDBNc1NVRkJTVmNzUzBGQlN6UTBReXhUUVVGVE4wTXNhMEpCUVd0Q05UUkRMRVZCUVVVclFpeEZRVUZGUnl4SlFVRkpha01zUlVGQlJUaENMRVZCUVVWSExFdEJRVXRYTEV0QlFVdHBOVU1zWTBGQlkyZzJReXhMUVVGTGMxa3NTMEZCUzJ0b1F5eGhRVUZoTHpWRExGVkJRVlV5SzBNc2VVSkJRWGxDTEZOQlFWTndLME1zUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5PRUlzUlVGQlJTeERRVUZEUkN4RlFVRkZaU3hMUVVGTEt6UkRMR2RDUVVGblFqazFReXhIUVVGSExFbEJRVWtzU1VGQlNVa3NSVUZCUlN4RlFVRkZRU3hGUVVGRlNDeEZRVUZGUlN4UFFVRlBReXhKUVVGSlZ5eExRVUZMTkRSRExGTkJRVk01UXl4dFFrRkJiVUl6TkVNc1JVRkJSU3RDTEVWQlFVVkhMRWxCUVVscVF5eEZRVUZGT0VJc1JVRkJSVWNzUzBGQlMxY3NTMEZCUzJrMVF5eGpRVUZqYURaRExFdEJRemRhYzFrc1MwRkJTMnRvUXl4aFFVRmhMelZETEZWQlFWVTBLME1zSzBKQlFTdENMRk5CUVZOeUswTXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTk9FSXNSVUZCUlN4RFFVRkRSQ3hGUVVGRlpTeExRVUZMS3pSRExHZENRVUZuUWprMVF5eEhRVUZITEVsQlFVa3NTVUZCU1Vrc1JVRkJSVmNzUzBGQlN6UTBReXhUUVVGVGREVkRMRVZCUVVVc1JVRkJSVUVzUlVGQlJVb3NSVUZCUlVVc1QwRkJUMFVzU1VGQlNXbFpMRXRCUVVzMmVrSXNUVUZCVFdVc1YwRkJWMmgyUXl4RlFVRkZLMElzUlVGQlJVa3NTVUZCU1d4RExFVkJRVVU0UWl4RlFVRkZTU3hMUVVGSkxGTkJRVk5NTEVWQlFVVkRMRWRCUVVkSExFVkJRVVY1TWtNc2JVSkJRVzFDTnpKRExFbEJRVWtzUlVGQlJVTXNTVUZCU1N4TlFVRkxZeXhMUVVGTGFUVkRMR05CUVdOb05rTXNTMEZCUzNOWkxFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZOaXRETEhWQ1FVRjFRaXhUUVVGVGRDdERMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4SFFVRkhRU3hGUVVGRlJTeFBRVUZQTEVOQlFVTklMRVZCUVVWbExFdEJRVXNyTkVNc1owSkJRV2RDT1RWRExFZEJRVWNzU1VGQlNTeEpRVUZKT1VJc1JVRkJSU3hGUVVGRlFTeEZRVUZGSzBJc1JVRkJSVVVzVDBGQlQycERMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGYldFc1MwRkJTMnRuUXl4TlFVRk5aU3hOUVVGTlJDeFhRVUZYY2pWRExFVkJRVVV2UWl4SlFVRkpOa01zUzBGQlN6UTBReXhUUVVGVE9VTXNiVUpCUVcxQ01UUkRMRVZCUVVWMU5rTXNSMEZCUjNZMlF5eEZRVUZGZHpaRExFbEJRVWsxTTBNc1MwRkJTMmsxUXl4alFVRmphRFpETEV0QlEyeG5Rbk5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk9DdERMR3RDUVVGclFpeFRRVUZUZGl0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxORFJETEZOQlFWTXpReXh6UWtGQmMwSXZNa01zUlVGQlJTOUNMRWxCUVVrMlF5eExRVUZMYVRWRExHTkJRV05vTmtNc1MwRkJTM05aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVkt5dERMSGRDUVVGM1FpeFRRVUZUZUN0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxORFJETEZOQlFWTXpReXh6UWtGQmMwSnNORUlzVTBGQlV6ZGxMRVZCUVVVdlFpeEhRVUZITEV0QlFVczJReXhMUVVGTGFUVkRMR05CUVdOb05rTXNTMEZEYUdGeldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2N2UXl4clFrRkJhMElzVTBGQlUzb3JReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1IwRkJSMEVzUlVGQlJVVXNUMEZCVHl4RFFVRkRTQ3hGUVVGRlpTeExRVUZMS3pSRExHZENRVUZuUWprMVF5eEhRVUZITEVsQlFVa3NTVUZCU1RsQ0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSk5rTXNTMEZCU3pRMFF5eFRRVUZUZWtNc2MwSkJRWE5DYWpORExFVkJRVVV2UWl4SlFVRkpOa01zUzBGQlMyazFReXhqUVVGamFEWkRMRXRCUVV0eldTeExRVUZMYTJoRExHRkJRV0V2TlVNc1ZVRkJWV2t2UXl4M1FrRkJkMElzVTBGQlV6RXJReXhGUVVGRlF5eEhRVUZITEVkQlFVY3NUVUZCVFVFc1IwRkJSMEVzUlVGQlJVVXNUMEZCVHl4RFFVRkRTQ3hGUVVGRlpTeExRVUZMS3pSRExHZENRVUZuUWprMVF5eEhRVUZITEVsQlFVa3NTVUZCU1RsQ0xFVkJRVVVzUlVGQlJVRXNSVUZCUlN0Q0xFVkJRVVZGTEU5QlFVOXFReXhKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlcxaExFdEJRVXRyWjBNc1RVRkJUVU1zVDBGQlQyRXNWMEZCVjNJMVF5eEZRVUZGTDBJc1NVRkJTVFpETEV0QlFVczBORU1zVTBGQlV6bERMRzFDUVVGdFFqRTBReXhGUVVGRmRUWkRMRWRCUVVkMk5rTXNSVUZCUlhjMlF5eEpRVUZKTlRORExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVTXZZbk5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmF5OURMR3RDUVVGclFpeFRRVUZUTXl0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxORFJETEZOQlFWTjJReXh2UWtGQmIwSnVNME1zUlVGQlJTOUNMRWxCUVVrMlF5eExRVUZMYVRWRExHTkJRV05vTmtNc1MwRkJTM05aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmJTOURMR3RDUVVGclFpeFRRVUZUTlN0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxORFJETEZOQlFWTjBReXh2UWtGQmIwSndNME1zUlVGQlJTOUNMRWxCUVVrMlF5eExRVUZMYVRWRExHTkJRV05vTmtNc1MwRkRlbGx6V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZXOHZReXgzUWtGQmQwSXNVMEZCVXpjclF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUjBGQlIwRXNSVUZCUlVVc1QwRkJUeXhEUVVGRFNDeEZRVUZGWlN4TFFVRkxLelJETEdkQ1FVRm5RamsxUXl4SFFVRkhMRWxCUVVrc1NVRkJTVGxDTEVWQlFVVXNSVUZCUlVFc1JVRkJSU3RDTEVWQlFVVkZMRTlCUVU5cVF5eEpRVUZKTmtNc1MwRkJTelEwUXl4VFFVRlRjRU1zZDBKQlFYZENhaTlDTEV0QlFVczJla0lzVFVGQlRUWkNMSE5DUVVGelFpOTBReXhGUVVGRkwwSXNTMEZCU3paRExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVRkxjMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWeEwwTXNjMEpCUVhOQ0xGTkJRVk01SzBNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRWRCUVVkQkxFVkJRVVZGTEU5QlFVOHNRMEZCUTBnc1JVRkJSV1VzUzBGQlN5czBReXhuUWtGQlowSTVOVU1zUjBGQlJ5eEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVczBORU1zVTBGQlUzQkRMSGRDUVVGM1FuUXpReXhGUVVGRkwwSXNTVUZCU1RaRExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVTTNZbk5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVmN5OURMRzFDUVVGdFFpeFRRVUZUTHl0RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRWxCUVVsWkxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYYmxvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMRVZCUVVVdk1rTXNSVUZCUlVVc1VVRkJVVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZReXhGUVVGRlJTeFBRVUZQU0N4SlFVRkpaU3hMUVVGTE5EUkRMRk5CUVZNMVF5eFpRVUZaT1RKRExFVkJRVVZFTEV0QlFVdHpXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVlhVdlF5eHRRa0ZCYlVJc1UwRkJVMmd2UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSMEZCUjBFc1JVRkJSVVVzVDBGQlR5eEpRVUZKV1N4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWMjVhTEV0QlFVczBORU1zVTBGQlV6TkRMSE5DUVVGelFpeEZRVUZGTHpKRExFVkJRVVZGTEZGQlFWRklMRVZCUVVVc1JVRkJSVUVzUlVGQlJVTXNSVUZCUlVVc1QwRkJUMGdzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUYWtNc1dVRkJXWG96UXl4RlFVRkZSQ3hMUVVOdVpuTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWZHk5RExIbENRVUY1UWl4VFFVRlRhaTlETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFbEJRVWxaTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0xFVkJRVVV2TWtNc1JVRkJSVVVzVVVGQlVVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRlF5eEZRVUZGUlN4UFFVRlBTQ3hKUVVGSkxFTkJRVU1zU1VGQlNUbENMRVZCUVVWdllTeExRVUZMYTJkRExFMUJRVTFETEU5QlFVOWhMRmRCUVZkeU5VTXNSVUZCUlVRc1NVRkJTV1VzUzBGQlN6UTBReXhUUVVGVE4wTXNhMEpCUVd0Q05UUkRMRVZCUVVWM05rTXNSMEZCUjNnMlF5eEZRVUZGZVRaRExFMUJRMnhVY21kRExFdEJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZlUzlETEc5Q1FVRnZRaXhUUVVGVGJDOURMRVZCUVVWRExFZEJRVWNzUjBGQlJ5eE5RVUZOUVN4SFFVRkhRU3hGUVVGRlJTeFBRVUZQTEVsQlFVbFpMRXRCUVV0bk5VTXNhMEpCUVd0Q0x6VkRMRVZCUVVWeldTeExRVUZMUXl4blFrRkJaMEo1UWl4VFFVRlRSU3hYUVVGWGJsb3NTMEZCU3pRMFF5eFRRVUZUTTBNc2MwSkJRWE5DTEVWQlFVVXZNa01zUlVGQlJVVXNVVUZCVVVnc1JVRkJSU3hGUVVGRlFTeEZRVUZGUXl4RlFVRkZSU3hQUVVGUFNDeEpRVUZKWlN4TFFVRkxORFJETEZOQlFWTTVRaXhYUVVGWE5UTkRMRVZCUVVWRUxFdEJRVXR6V1N4TFFVRkxhMmhETEdGQlFXRXZOVU1zVlVGQlZUQXZReXh2UWtGQmIwSXNVMEZCVTI0dlF5eEZRVUZGUXl4SFFVRkhMRWRCUVVjc1RVRkJUVUVzUjBGQlIwRXNSVUZCUlVVc1QwRkJUeXhKUVVGSldTeExRVUZMWnpWRExHdENRVUZyUWk4MVF5eEZRVUZGYzFrc1MwRkJTME1zWjBKQlFXZENlVUlzVTBGQlUwVXNWMEZCVjI1YUxFdEJRVXMwTkVNc1UwRkJVek5ETEhOQ1FVRnpRaXhGUVVGRkx6SkRMRVZCUVVWRkxGRkJRVkZJTEVWQlFVVXNSVUZCUlVFc1JVRkJSVU1zUlVGQlJVVXNUMEZCVDBnc1NVRkJTV1VzUzBGQlN6UTBReXhUUVVGVE4wSXNWMEZCVnpjelF5eEZRVUZGUkN4TFFVTnVabk5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk1pOURMREJDUVVFd1FpeFRRVUZUY0M5RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRWxCUVVsWkxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYYmxvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMRVZCUVVVdk1rTXNSVUZCUlVVc1VVRkJVVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZReXhGUVVGRlJTeFBRVUZQU0N4SlFVRkpaU3hMUVVGTE5EUkRMRk5CUVZNMVFpeHBRa0ZCYVVJNU0wTXNSVUZCUlVRc1MwRkJTM05aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVk5DOURMR2xDUVVGcFFpeFRRVUZUY2k5RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRWxCUVVsWkxFdEJRVXRuTlVNc2EwSkJRV3RDTHpWRExFVkJRVVZ6V1N4TFFVRkxReXhuUWtGQlowSjVRaXhUUVVGVFJTeFhRVUZYYmxvc1MwRkJTelEwUXl4VFFVRlRNME1zYzBKQlFYTkNMRVZCUVVVdk1rTXNSVUZCUlVVc1VVRkJVVWdzUlVGQlJTeEZRVUZGUVN4RlFVRkZReXhGUVVGRlJTeFBRVUZQU0N4SlFVRkpaU3hMUVVGTE5EUkRMRk5CUVZNelFpeFhRVUZYTHpORExFVkJRVVZFTEV0QlF6Vm1jMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZVMkwwTXNhMEpCUVd0Q0xGTkJRVk4wTDBNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRWRCUVVkQkxFVkJRVVZGTEU5QlFVOHNTVUZCU1Zrc1MwRkJTMmMxUXl4clFrRkJhMEl2TlVNc1JVRkJSWE5aTEV0QlFVdERMR2RDUVVGblFubENMRk5CUVZORkxGZEJRVmR1V2l4TFFVRkxORFJETEZOQlFWTXpReXh6UWtGQmMwSXNSVUZCUlM4eVF5eEZRVUZGUlN4UlFVRlJTQ3hGUVVGRkxFVkJRVVZCTEVWQlFVVkRMRVZCUVVWRkxFOUJRVTlJTEVsQlFVbGxMRXRCUVVzME5FTXNVMEZCVXpGQ0xGbEJRVmxvTkVNc1JVRkJSVVFzUzBGQlMzTlpMRXRCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWT0M5RExHZENRVUZuUWl4VFFVRlRkaTlETEVWQlFVVkRMRWRCUVVjc1IwRkJSeXhOUVVGTlFTeEhRVUZIUVN4RlFVRkZSU3hQUVVGUExFbEJRVWxaTEV0QlFVdG5OVU1zYTBKQlFXdENMelZETEVWQlFVVnpXU3hMUVVGTFF5eG5Ra0ZCWjBKNVFpeFRRVUZUUlN4WFFVRlhibG9zUzBGQlN6UTBReXhUUVVGVE0wTXNjMEpCUVhOQ0x6SkRMRVZCUVVWRkxGRkJRVkZJTEVWQlFVVXNSVUZCUlVFc1JVRkJSVU1zUlVGQlJVVXNUMEZCVDBnc1NVRkJTV1VzUzBGQlN6UTBReXhUUVVGVGVrSXNWVUZCVldvMFF5eEZRVUZGUkN4TFFVTXpaWE5aTEV0QlFVdHJhRU1zWVVGQllTODFReXhWUVVGVkt5OURMR2RDUVVGblFpeFRRVUZUZUM5RExFVkJRVVZETEVkQlFVY3NSMEZCUnl4TlFVRk5RU3hIUVVGSFFTeEZRVUZGUlN4UFFVRlBMRU5CUVVOSUxFVkJRVVZsTEV0QlFVc3JORU1zWjBKQlFXZENPVFZETEVkQlFVY3NTVUZCU1N4SlFVRkpPVUlzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWsyUXl4TFFVRkxORFJETEZOQlFWTjRRaXhWUVVGVmJEUkRMRVZCUVVVdlFpeEpRVUZKTmtNc1MwRkJTMmsxUXl4alFVRmphRFpETEV0QlFVdHpXU3hMUVVGTGEyaERMR0ZCUVdFdk5VTXNWVUZCVldkblJDeDFRa0ZCZFVJc1UwRkJVM292UXl4RlFVRkZReXhIUVVGSExFZEJRVWNzVFVGQlRVRXNSMEZCUjBFc1JVRkJSVVVzVDBGQlR5eEpRVUZKV1N4TFFVRkxaelZETEd0Q1FVRnJRaTgxUXl4RlFVRkZjMWtzUzBGQlMwTXNaMEpCUVdkQ2VVSXNVMEZCVTBVc1YwRkJWMjVhTEV0QlFVczBORU1zVTBGQlV6TkRMSE5DUVVGelFpeEZRVUZGTHpKRExFVkJRVVZGTEZGQlFWRklMRVZCUVVVc1JVRkJSVUVzUlVGQlJVTXNSVUZCUlVVc1QwRkJUMGdzU1VGQlNXVXNTMEZCU3pRMFF5eFRRVUZUY2tJc2FVSkJRV2xDY2pSRExFVkJRVVZFTEV0QlF6TmljMWtzUzBGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWcFowUXNkMEpCUVhkQ0xGTkJRVk14TDBNc1JVRkJSVU1zUjBGQlJ5eEhRVUZITEUxQlFVMUJMRWRCUVVkQkxFVkJRVVZGTEU5QlFVOHNRMEZCUTBnc1JVRkJSV1VzUzBGQlN5czBReXhuUWtGQlowSTVOVU1zUjBGQlJ5eEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVXJRaXhGUVVGRlJTeFBRVUZQYWtNc1NVRkJTVFpETEV0QlFVczBORU1zVTBGQlUzUkNMR3RDUVVGclFuQTBReXhGUVVGRkwwSXNTVUZCU1RaRExFdEJRVXRwTlVNc1kwRkJZMmcyUXl4TFFVRkxjMWtzUzBGQlMzRnVReXhKUVVGSkxGTkJRVk16TDBNc1JVRkJSVU1zUjBGQlIyTXNTMEZCU3pZclF5eExRVUZMTlM5RExFVkJRVVZsTEV0QlFVczRLME1zVjBGQlZ6VXZReXhGUVVGRll5eExRVUZMS3l0RExFdEJRVXNzUjBGQlJ5OHJReXhMUVVGTFp5OURMRlZCUVZNc1JVRkJSeXhGUVVGRmFDOURMRXRCUVVzMkswTXNTMEZCUzNvdlF5eFJRVUZSV1N4TFFVRkxhUzlETEd0Q1FVRnJRakZ1UXl4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZYVm5SQ3hsUVVGbExGZEJRVmNzU1VGQlNTeEpRVUZKYUdkRUxFVkJRVVVzUlVGQlJVRXNSVUZCUldVc1MwRkJTellyUXl4TFFVRkxlaTlETEU5QlFVOUlMRWxCUVVrc1EwRkJReXhKUVVGSlF5eEZRVUZGWXl4TFFVRkxOaXRETEV0QlFVczFMME1zUjBGQlJ6bENMRVZCUVVVclFpeEZRVUZGTEVkQlFVZGpMRXRCUVVzckswTXNTMEZCU3pWb1JDeEZRVUZGYlVzc1dVRkJXU3hKUVVGSmFWRXNTMEZCUzNGdVF5eEpRVUZKVFN4UFFVRlBMMmhFTEVWQlFVVXJRaXhGUVVGRkxFbEJRVWxqTEV0QlFVdG5MME1zVlVGQlV5eEhRVU4wWm5wdVF5eExRVUZMY1c1RExFbEJRVWxzWjBRc1ZVRkJWV2xrTEZGQlFWRXNWMEZCVnl4SFFVRkhNMklzUzBGQlMyY3ZReXhWUVVGVkxFZEJRVWRvTDBNc1MwRkJTemdyUXl4WFFVRlhMRU5CUVVNc1NVRkJaMEkxTDBNc1JVRkJXa1FzUlVGQlJXVXNTMEZCU3lzclF5eExRVUZQTEVsQlFVazNMME1zUzBGQlMwUXNSVUZCUlN4SFFVRkhla0lzVDBGQlQydENMRlZCUVZWRExHVkJRV1V4UWl4TFFVRkxaME1zUlVGQlJVTXNSMEZCUnl4RFFVRkRMRWxCUVVrdlFpeEZRVUZGT0VJc1JVRkJSVU1zUjBGQlIybG5SQ3hoUVVGaGFHbEVMRWRCUVVkQkxFVkJRVVYzWlN4blFrRkJaMElzUTBGQmEwUXNTVUZCYWtRellpeExRVUZMTml0RExFdEJRVXQ2TDBNc1QwRkJUeXhIUVVGRlNDeEZRVUZGWlN4TFFVRkxieTlETEdWQlFXZENibXBETEU5QlFWY3ZZeXhGUVVGRkxFVkJRVVZCTEVWQlFVVkVMRVZCUVVWSExFOUJRVTlHTEVsQlFVa3NRMEZCUXl4SlFVRkpPVUlzUlVGQlJUUkRMRXRCUVVzckswTXNTMEZCU3prdlF5eEZRVUZGUXl4TFFVRkxMMElzUlVGQlJVTXNSVUZCUlN0b1JDeGxRVUZsYUdsRUxFVkJRVVYzWlN4VlFVRlZNMklzUzBGQlN6WXJReXhMUVVGTE16RkRMRXRCUVVzc1EwRkJRemxNTEVWQlFVVnBRaXhKUVVGSmFrSXNSVUZCUlZjc1VVRkJVV2xETEV0QlFVdG5MME1zVlVGQlV5eEZRVUZITEU5QlFVOW9MME1zUzBGQlN6WXJReXhOUVVOcVdYUnVReXhMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlcxbExGTkJRVk1zVTBGQlV6VmtMRVZCUVVWRExFZEJRVWNzU1VGQlNTeEpRVUZKTDBJc1JVRkJSVFpETEV0QlFVc3lZaXhWUVVGVmRtVXNSVUZCUlN4SFFVRkhhVU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZiRU1zUlVGQlJXbERMRTlCUVU5RExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZWU3hMUVVGTEt5dERMRXRCUVVzMWFFUXNSVUZCUld0RExFZEJRVWNzUjBGQlIybEpMRmxCUVZsMFNDeExRVUZMY1M5RExGZEJRVmN2TDBNc1IwRkJSeXhKUVVGSmNVSXNSVUZCUlhKQ0xFVkJRVVUyTDBNc1lVRkJZWGdyUXl4SFFVRkhSeXhMUVVGTFoxWXNVVUZCVVZNc1QwRkJUM0pZTEVkQlFVYzVRaXhGUVVGRk9Fd3NTMEZCU3l4RFFVRkROVW9zUlVGQlJXcENMRWxCUVVsaExFVkJRVVZFTEVWQlFVVXdRaXhOUVVGTmRrUXNSVUZCUlRoTUxFdEJRVXNzUTBGQlF6VktMRVZCUVVWcVFpeEpRVUZKYVVJc1JVRkJSWFpDTEZGQlFWRXNUMEZCVDFnc1IwRkJSMjFoTEV0QlFVdHhia01zU1VGQlNWVXNWMEZCVnl4VFFVRlRjbWRFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZISzBJc1JVRkJSU3hKUVVGSmNWa3NTMEZCUzNGdVF5eEpRVUZKTEVkQlFVY3hMME1zUjBGQlJ5eEpRVUZKTEVsQlFVazVRaXhGUVVGRkxFVkJRVVZCTEVWQlFVVTJRaXhGUVVGRlJ5eFBRVUZQYUVNc1NVRkJTU3hEUVVGRExFbEJRVWxwUXl4RlFVRkZTaXhGUVVGRk4wSXNSMEZCUnl4SFFVRkhhME1zUlVGQlJXNURMRVZCUVVVNFFpeEZRVUZGTjBJc1IwRkJSeXhKUVVGSk9FSXNSVUZCUlRCVkxFbEJRVWwyVlN4RlFVRkZReXhIUVVGSExFOUJRVTlLTEVkQlFVZHhXU3hMUVVGTGNXNURMRWxCUVVsWExIVkNRVUYxUWl4VFFVRlRkR2RFTEVkQlFVZGxMRXRCUVV0M0wwTXNTMEZCU3l4RlFVRkZlQzlETEV0QlFVczJLME1zUzBGQlN6VXZReXhIUVVOdVkzTlpMRXRCUVV0eGJrTXNTVUZCU1Zjc2RVSkJRWFZDTjJkRUxGVkJRVlVyWjBRc1MwRkJTeXhYUVVGWExFOUJRVTk2TDBNc1MwRkJTM2N2UXl4TFFVRkxlQzlETEV0QlFVczJLME1zUzBGQlMzb3ZReXhQUVVGUExFTkJRVU56WjBRc1RVRkJTeXhGUVVGSE0yaEVMRTFCUVUxcFF5eExRVUZMTml0RExFdEJRVXMzSzBNc1MwRkJTM2N2UXl4VFFVRlRMRU5CUVVORkxFMUJRVXNzUlVGQlJ6Tm9SQ3hYUVVGTkxFbEJRVk1zYjBKQlFXOUNSaXhUUVVGVE1Gb3NTMEZCUzNGdVF5eEpRVUZKVnl4MVFrRkJkVUkzWjBRc1ZVRkJWV0lzVDBGQlR6aG9SQ3hWUVVGVkxGZEJRVmNzVDBGQlR6TXZReXhQUVVGUGRWZ3NTMEZCUzNGdVF5eEpRVUZKYkdkRUxGVkJRVlZyYUVRc1ZVRkJWU3hYUVVGWExFOUJRVTgxTDBNc1MwRkJTMjh2UXl4alFVRmphR2RFTEZGQlFWRnRXU3hMUVVGTGNXNURMRWxCUVVsc1owUXNWVUZCVlN0VkxFMUJRVTBzVjBGQlYzcFVMRXRCUVVzckswTXNTMEZCU3l4SFFVRkhMeXRETEV0QlFVdG5MME1zVlVGQlV5eEhRVU55V25wdVF5eExRVUZMY1c1RExFbEJRVWxzWjBRc1ZVRkJWVzFvUkN4SlFVRkpMRk5CUVZNMVowUXNSMEZCUjBFc1JVRkJSVUVzUlVGQlJYRkpMRmRCUVZjc1NVRkJTWEJKTEVWQlFVVmpMRXRCUVVzckswTXNTMEZCUzNCblJDeGxRVUZsVFN4SFFVRjNReXhqUVVFNVFtVXNTMEZCU3lzclF5eExRVUZMT1M5RExFZEJRVWRsTEV0QlFVdG5MME1zVlVGQlV5eEZRVUZWT1M5RExFZEJRVWR4V1N4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZXOW9SQ3hoUVVGaExGZEJRVmNzU1VGQlNUZG5SQ3hGUVVGRkxFZEJRVWRETEVWQlFVVmpMRXRCUVV0dkwwTXNZMEZCWTJ4blJDeEZRVUZGSzJNc1QwRkJUeXhKUVVGSkxFbEJRVWs1WlN4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1N4RFFVRkRMRWxCUVVsRExFVkJRVVUwUXl4TFFVRkxLeXRETEV0QlFVczNMME1zUlVGQlJTOUNMRWxCUVVrNFFpeEZRVUZGYVVzc1MwRkJTeXhEUVVGRE9Vd3NSVUZCUldsQ0xFbEJRVWxxUWl4RlFVRkZWeXhSUVVGUkxFOUJRVTlyUWl4SFFVRkhjMWtzUzBGQlMzRnVReXhKUVVGSmJHZEVMRlZCUVZWeGFFUXNVVUZCVVN4WFFVRlhMRWxCUVVrNVowUXNSVUZCUlN4SFFVRkhReXhGUVVGRll5eExRVUZMYnk5RExHTkJRV05zWjBRc1JVRkJSU3RqTEU5QlFVOHNTVUZCU1N4SlFVRkpPV1VzUlVGQlJTeEZRVUZGUVN4RlFVRkZLMElzUlVGQlJVVXNUMEZCVDJwRExFbEJRVWtzUTBGQlF5eEpRVUZKUXl4RlFVRkZORU1zUzBGQlN5c3JReXhMUVVGTE55OURMRVZCUVVVdlFpeEpRVUZKT0VJc1JVRkJSV2xMTEV0QlFVc3NRMEZCUXpsTUxFVkJRVVZwUWl4SlFVRkpNa0lzUzBGQlMzRXZReXhYUVVGWGFtbEVMRXRCUVVzc1QwRkJUeXhKUVVGSmJXRXNTMEZCUzNGdVF5eEpRVUZKVnl4MVFrRkJkVUowWjBRc1NVRkRkR1p6V1N4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZYTm9SQ3hMUVVGTExGZEJRVmNzU1VGQlNTOW5SQ3hGUVVGRkxFZEJRVWRETEVWQlFVVmpMRXRCUVV0dkwwTXNZMEZCWTJ4blJDeEZRVUZGSzJNc1QwRkJUeXhKUVVGSkxFbEJRVWs1WlN4RlFVRkZMRVZCUVVWQkxFVkJRVVVyUWl4RlFVRkZSU3hQUVVGUGFrTXNTVUZCU1RoQ0xFVkJRVVZwU3l4TFFVRkxiRW9zUzBGQlN5c3JReXhMUVVGTE55OURMRVZCUVVVdlFpeEpRVUZKYTBJc1MwRkJTeXhQUVVGUExFbEJRVWxyV2l4TFFVRkxjVzVETEVsQlFVbFhMSFZDUVVGMVFuUm5SQ3hKUVVGSmMxa3NTMEZCUzNGdVF5eEpRVUZKYkdkRUxGVkJRVlYxYUVRc1QwRkJUeXhYUVVGWExFbEJRVWxvYUVRc1JVRkJSU3hIUVVGSFF5eEZRVUZGWXl4TFFVRkxieTlETEdOQlFXTnNaMFFzUlVGQlJTdGpMRTlCUVU4c1NVRkJTU3hKUVVGSk9XVXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVazRRaXhGUVVGRmFVc3NTMEZCUzJ4S0xFdEJRVXR4TDBNc1YwRkJWM0l2UXl4TFFVRkxLeXRETEV0QlFVczNMME1zUlVGQlJTOUNMRTFCUVUwc1QwRkJUeXhKUVVGSmIyRXNTMEZCUzNGdVF5eEpRVUZKVnl4MVFrRkJkVUowWjBRc1NVRkRNMWR6V1N4TFFVRkxjVzVETEVsQlFVbHNaMFFzVlVGQlZTdFVMRkZCUVZFc1UwRkJVM2hVTEVWQlFVVkRMRWRCUVVjc1NVRkJTUzlDTEVWQlFVVTJReXhMUVVGTGJ5OURMR05CUVdOcWFVUXNSVUZCUlRobExFOUJRVThzU1VGQlNTeEpRVUZKTjJVc1JVRkJSU3hGUVVGRlFTeEZRVUZGUkN4RlFVRkZhVU1zVDBGQlQyaERMRWxCUVVrc1EwRkJReXhKUVVGSmFVTXNSVUZCUlZjc1MwRkJTeXNyUXl4TFFVRkxOV2hFTEVWQlFVVkRMRWxCUVVrMlFpeEZRVUZGYUVNc1MwRkJTMmxETEVWQlFVVmpMRXRCUVV0eEwwTXNWMEZCVjJoblJDeEhRVUZIUVN4RlFVRkZhRUlzU1VGQlNUSkNMRkZCUVZGMVdDeExRVUZMY1c1RExFbEJRVWxzWjBRc1ZVRkJWV3RXTEVsQlFVa3NVMEZCVXpOVkxFVkJRVVZETEVkQlFVY3NTVUZCU1M5Q0xFVkJRVVVzU1VGQlNXOWhMRXRCUVV0eGJrTXNTVUZCU1Uwc1QwRkJUMnBuUkN4SFFVRXJSeXhQUVVFMVIyVXNTMEZCU3pnclF5eFpRVUZaTTJoRUxFVkJRVVZuYVVRc1lVRkJZV3BuUkN4RlFVRkZMMElzUlVGQlJWa3NUVUZCVFcxQ0xFVkJRVVY1WXl4WFFVRlhlR1VzUlVGQlJWa3NUVUZCVFcxQ0xFVkJRVVZqTEV0QlFVc3JLME1zUzBGQlN6a3ZReXhGUVVGRmNVa3NXVUZCV1c1TExFVkJRVVUyUXl4TFFVRkxaeTlETEZWQlFWTXNSVUZCVldndlF5eE5RVUZOZFZnc1MwRkJTM0Z1UXl4SlFVRkpiR2RFTEZWQlFWVXlaMFFzVjBGQlZ5eFRRVUZUY0dkRUxFZEJRVWNzVDBGQlQyVXNTMEZCU3pnclF5eFpRVUZaTnk5RExFVkJRVVZyWjBRc1pVRkJaV3huUkN4RlFVRkZhMmRFTEdGQlFXRXNTVUZCU1c0dlF5eExRVUZMT0N0RExGZEJRVmMzTDBNc1JVRkJSV3hDTEZGQlFWRnJRaXhGUVVGRmEyZEVMR05CUVdOc1owUXNSVUZCUld4Q0xFOUJRM0JtZDFvc1MwRkJTM0Z1UXl4SlFVRkpiR2RFTEZWQlFWVm1MRWxCUVVrc1UwRkJVM05DTEVkQlFVY3NSMEZCUjBFc1JVRkJSV1VzUzBGQlN5c3JReXhMUVVGTE9TOURMRVZCUVVWeFNTeFpRVUZaTEU5QlFVOTBTQ3hMUVVGTGNTOURMRmRCUVZkd1owUXNTVUZCU1hOWkxFdEJRVXR4YmtNc1NVRkJTV3huUkN4VlFVRlZkMmhFTEVsQlFVa3NVMEZCVTJwb1JDeEhRVUZITEU5QlFVOUJMRVZCUVVWeFNTeGhRVUZoZEVnc1MwRkJTeXNyUXl4TlFVRk5lRzVETEV0QlFVdHhia01zU1VGQlNXeG5SQ3hWUVVGVmVXaEVMR2RDUVVGblFpeFRRVUZUYkdoRUxFVkJRVVZETEVWQlFVVXZRaXhGUVVGRlF5eEZRVUZGYVVNc1IwRkJSeXhKUVVGSlF5eEZRVUZGVlN4TFFVRkxieTlETEdOQlFXTTVMME1zUlVGQlJUSmpMRTlCUVU4c1NVRkJTU3hKUVVGSmRHSXNSVUZCUlN4RlFVRkZRU3hGUVVGRmNrSXNSVUZCUlVZc1QwRkJUM1ZDTEVsQlFVa3NRMEZCUXl4SlFVRkpLMHdzUlVGQlJURk5MRXRCUVVzckswTXNTMEZCUzNvdlF5eEZRVUZGY1VJc1NVRkJTWHBDTEVWQlFVVnZOa01zWjBKQlFXZENjalpETEVkQlFVYzVRaXhGUVVGRlJpeExRVUZMYVVNc1JVRkJSU3hGUVVGRmQwNHNSVUZCUlhKUExFdEJRVXN5UWl4TFFVRkxPQ3RETEZkQlFWY3hhRVFzUlVGQlJVZ3NTMEZCUzJsRExFVkJRVVVzUlVGQlJXTXNTMEZCUzNFdlF5eFhRVUZYTTNsRExFZEJRVWR5VGl4SFFVRkhha01zUlVGQlJVZ3NTMEZCUzJsRExFVkJRVVVzUlVGQlJYZE9MRVZCUVVVelR5eFBRVUZQYlVJc1JVRkJSWEUyUXl4clFrRkRlRnBvYVVNc1MwRkJTM0Z1UXl4SlFVRkpkMElzYTBKQlFXdENMRk5CUVZOdWFFUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVkRMRVZCUVVWcFF5eEZRVUZGUXl4RlFVRkZjVUlzUjBGQlJ5eExRVUZMZWtJc1JVRkJSWEY2UXl4alFVRmpjbnBETEVWQlFVVnZla01zWTBGQll5eERRVUZETEVsQlFVazFiRU1zUlVGQlJYaE9MRVZCUVVWcGVrTXNhVUpCUVdsQ0xFZEJRVWQ2YkVNc1JVRkJSWEJPTEVWQlFVVnVReXhGUVVGRlJpeExRVUZMYVVNc1IwRkJSeXhIUVVGSGQwNHNTVUZCU1hwT0xFVkJRVVUyTDBNc1dVRkJXV2dyUXl4TFFVRkxaMVlzVVVGQlVWTXNUMEZCVDJ4WUxFZEJRVWR6UWl4SlFVRkpRU3hGUVVGRkxFbEJRVWt4UWl4RlFVRkZOaTlETEZsQlFWa3hhRVFzUlVGQlJVZ3NTMEZCUzJsRExFVkJRVVY1UWl4RlFVRkZkRUlzU1VGQlNYTkNMRVZCUVVWMlJDeEZRVUZGU0N4TFFVRkxhVU1zU1VGQlNUUkNMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBMRTFCUVZGcVdDeEhRVUZIZDBJc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU4c1RVRkJVVFZXTEVkQlFVY3hRaXhGUVVGRk1sVXNTVUZCU1hSVkxFVkJRVVZ4UWl4SlFVRkpORmNzUzBGQlMzRnVReXhKUVVGSmJHZEVMRlZCUVZVd1owUXNXVUZCV1N4WFFVRlhMRWxCUVhGQ2FtbEVMRVZCUVdwQ09FSXNSVUZCUldVc1MwRkJTeXNyUXl4TFFVRkxOeTlETEVWQlFVVXNSMEZCU3l4SlFVRkpMMElzUzBGQlN6aENMRVZCUVVWNlFpeFBRVUZQYTBJc1ZVRkJWVU1zWlVGQlpURkNMRXRCUVV0blF5eEZRVUZGT1VJc1NVRkJTU3RDTEVWQlFVVm5TeXhMUVVGTEwwd3NSMEZCUnl4UFFVRlBLMElzUjBGRGNtSnhXU3hMUVVGTGNXNURMRWxCUVVsTkxFOUJRVThzVTBGQlUycG5SQ3hGUVVGRlF5eEhRVUZIWXl4TFFVRkxNMElzU1VGQlNWa3NSVUZCUldVc1MwRkJTMnBETEUxQlFVMXRRaXhGUVVGRll5eExRVUZMYlM5RExHdENRVUZoTEVkQlFWRTFia01zUzBGQlN6aHZReXh0UWtGQmJVSXNVMEZCVTNCb1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSVUZCUldsRExFZEJRVWRYTEV0QlFVdHpaMFFzVjBGQlYzSm9SQ3hGUVVGRlpTeExRVUZMZFdkRUxGVkJRVlZ5YUVRc1JVRkJSV01zUzBGQlMzZG5SQ3hMUVVGTGNtcEVMRVZCUVVVMlF5eExRVUZMZVdkRUxGZEJRVmR5YWtRc1JVRkJSVFJETEV0QlFVc3daMFFzVjBGQlYzSm9SQ3hIUVVGSGExa3NTMEZCUzI5d1F5eDVRa0ZCZVVJc1UwRkJVekZvUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1JVRkJSV2xETEVWQlFVVkRMRWRCUVVkVkxFdEJRVXMwWjBRc1ZVRkJWVE5vUkN4RlFVRkZaU3hMUVVGTE5tZEVMR1ZCUVdVemFFUXNSVUZCUldNc1MwRkJTemhuUkN4bFFVRmxNMnBFTEVWQlFVVTJReXhMUVVGTEsyZEVMSGxDUVVGNVFqTnFSQ3hGUVVGRk5FTXNTMEZCUzJkb1JDd3lRa0ZCTWtJemFFUXNSVUZCUlZjc1MwRkJTMmxvUkN4VFFVRlRNMmhFTEVkQlFVZHBXU3hMUVVGTE9HOURMRzFDUVVGdFFqTm9SQ3hWUVVGVmQybEVMR05CUVdNc1YwRkJWeXhSUVVGUmJHaEVMRXRCUVV0M1owUXNUVUZCVFdwd1F5eExRVUZMTkhCRExGRkJRVkVzWVVGQllUVndReXhMUVVGTE5IQkRMRkZCUVZGRExHOUNRVUZ0UWl4RlFVRkhOM0JETEV0QlFVczBjRU1zVVVGQlVVVXNjMEpCUVhOQ2RtZEVMRXRCUVV0cFFpeDNRa0ZEZG10Q2QxWXNTMEZCU3pSd1F5eFJRVUZSUnl4dlFrRkJiVUlzUlVGQlJ5OXdReXhMUVVGTE5IQkRMRkZCUVZGSkxIRkNRVUZ2UWl4RlFVRkhhSEZETEV0QlFVczBjRU1zVVVGQlVVc3NhVU5CUVdkRExFVkJRVWRxY1VNc1MwRkJTelJ3UXl4UlFVRlJUU3h4UWtGQmNVSXNiVUpCUVcxQ2RsY3NWMEZCVnpONlFpeExRVUZMTkhCRExGRkJRVkY2YVVRc1ZVRkJWV2RxUkN4cFFrRkJhVUlzVjBGQlZ5eFBRVUZQTVdoRUxFdEJRVXN5YUVRc1dVRkJXWEJ4UXl4TFFVRkxOSEJETEZGQlFWRlRMRlZCUVZVc1UwRkJVek5wUkN4RlFVRkZReXhIUVVGSExFOUJRVTlCTEVWQlFVVkVMRVZCUVVVMGFVUXNiVUpCUVcxQ2RIRkRMRXRCUVVzMGNFTXNVVUZCVVZjc2JVSkJRVzFDTEdGQlFXRjJjVU1zUzBGQlN6UndReXhSUVVGUldTeG5Ra0ZCWjBJc1UwRkJVemxwUkN4RlFVRkZReXhIUVVGSExFOUJRVTlCTEVWQlFVVkVMRVZCUVVVMGFVUXNiVUpCUTNoaGRIRkRMRXRCUVVzMGNFTXNVVUZCVVdFc1YwRkJWeXhUUVVGVEwybEVMRVZCUVVWRExFVkJRVVV2UWl4RlFVRkZReXhGUVVGRmFVTXNSVUZCUlVNc1IwRkJPRkFzUjBGQk0xQk1MRVZCUVVWbmFrUXNWVUZCVlN4TFFVRkxMMmxFTEVsQlFVbEJMRVZCUVVVdlFpeEZRVUZGTEVOQlFVTkJMRWRCUVVjc1NVRkJTVGhDTEVWQlFVVXdhVVFzVjBGQlYzaHJSQ3hGUVVGRlowTXNUMEZCVDJoRExGRkJRVWNzUlVGQlR6aENMRVZCUVVVMGFVUXNhMEpCUVd0Q0xFbEJRVWt4YTBRc1IwRkJSeXhGUVVGRkxFVkJRVVU0UWl4RlFVRkZjV0lzVFVGQlRYQmlMRVZCUVVWeFdTeExRVUZMTkhCRExGRkJRVkZsTERaQ1FVRTJRbXBxUkN4RlFVRkZOMElzUjBGQlJ6WkNMRVZCUVVWcmFrUXNNRUpCUVRCQ0xFZEJRVWMxY1VNc1MwRkJTelJ3UXl4UlFVRlJTeXhyUTBGQmEwTjJhVVFzUlVGQlJXMXFSQ3hsUVVGbEwybEVMRWRCUVUxQkxFVkJRVVVzU1VGQlNVZ3NSVUZCUlN4RlFVRkZRU3hGUVVGRlJ5eEZRVUZGUkN4UFFVRlBSaXhMUVVGSkwwSXNSVUZCUld0RExFVkJRVVZJTEVsQlFVdEVMRVZCUVVWdmFrUXNVVUZCVVd4c1JDeEZRVUZGYjJFc1MwRkJTelJ3UXl4UlFVRlJVeXhWUVVGVk0ybEVMRVZCUVVVNVFpeEhRVUZIT0VJc1JVRkJSWEZpTEUxQlFVMXVaQ3hIUVVGSE9FSXNSVUZCUlhGaUxFMUJRVTF1WkN4SlFVRkpiMkVzUzBGQlN6UndReXhSUVVGUmJVSXNkVUpCUVhWQ0wzRkRMRXRCUVVzMGNFTXNVVUZCVVc5Q0xDdENRVUVyUW5ScVJDeEhRVUZIUVN4RlFVRkZkV3BFTEdsQ1FVRnBRbkpzUkN4SFFVTnVaamhDTEVWQlFVVjFha1FzYVVKQlFXbENjbXhFTEVsQlFVbHZZU3hMUVVGTE5IQkRMRkZCUVZGdFFpeHpRa0ZCYzBJc1IwRkJSMmhxUkN4SFFVRkhRU3hGUVVGRlJpeFBRVUZQTEVsQlFVbEdMRVZCUVVVc1JVRkJSVUVzUlVGQlJVa3NSVUZCUlVZc1QwRkJUMFlzU1VGQlNYRlpMRXRCUVVzMGNFTXNVVUZCVVhOQ0xHbENRVUZwUW5ocVJDeEZRVUZGU3l4RlFVRkZTaXhMUVVGTGNWa3NTMEZCU3pSd1F5eFJRVUZSYlVJc2NVSkJRWEZDZUdoRUxFdEJRVXRoTEU5QlFVOXVSU3hQUVVGUEsxY3NUMEZCVHk5WExFOUJRVThyVnl4UFFVRlBMRWxCUVVrc1IwRkJSMmRFTEV0QlFVczBjRU1zVVVGQlVYVkNMRk5CUVZNc1UwRkJVM3BxUkN4SFFVRkhMRTlCUVU5eldTeExRVUZMTkhCRExGRkJRVkZKTEc5Q1FVRnZRblJwUkN4aFFVRmhXU3hOUVVGTlFTeE5RVUZOTkVnc1VVRkJVWGhKTEVsQlFVbHpXU3hMUVVGTE5IQkRMRkZCUVZGM1FpeHRRa0ZCYlVJc1UwRkJVekZxUkN4SFFVRkhMRkZCUVU4c1QwRkJUMEVzUjBGQlJ5eHBRa0ZCYVVKQkxFZEJRVWx6V1N4TFFVRkxOSEJETEZGQlFWRjFRaXhUUVVGVGVtcEVMRWxCUVUxeldTeExRVUZMTkhCRExGRkJRVkZOTEhOQ1FVRnpRbmhwUkN4aFFVRmhhWE5ETEdGQlEzSmxNM3BDTEV0QlFVczBjRU1zVVVGQlVXVXNOa0pCUVRaQ0xGTkJRVk5xYWtRc1JVRkJSVU1zUjBGQlJ5eEpRVUZKTDBJc1JVRkJSVGhDTEVWQlFVVnhZaXhOUVVGTmJHSXNUMEZCVDJoRExFZEJRVWNzUlVGQlJTeEhRVUZIUkN4SlFVRkpReXhGUVVGRlJDeEZRVUZGTEVWQlFVVkJMRVZCUVVVNFFpeEZRVUZGY1dJc1RVRkJUV3hrTEVkQlFVZHRZU3hMUVVGTE5IQkRMRkZCUVZGM1FpeHRRa0ZCYlVKNGJFUXNTVUZCY1VVc1QwRkJhRVU0UWl4RlFVRkZiMnBFTEU5QlFVODVjVU1zUzBGQlN6UndReXhSUVVGUldTeG5Ra0ZCWjBJNWFVUXNSVUZCUlRkQ0xGRkJRVWMyUWl4RlFVRkZkV3BFTEdsQ1FVRnBRbkpzUkN4SlFVRlZMRVZCUVVVclFpeEhRVUZIUkN4RlFVRkZiMnBFTEU5QlFVODNhRVFzUzBGQlMwTXNTVUZCU1haQ0xFVkJRVVZ4V1N4TFFVRkxOSEJETEZGQlFWRlpMR2RDUVVGblFqbHBSQ3hGUVVGRk4wSXNSVUZCUlN4SlFVRkpOa0lzUlVGQlJYVnFSQ3hwUWtGQmFVSXNUVUZCVFhacVJDeEZRVUZGYjJwRUxFOUJRVTh6WjBJc1QwRkJUMnRvUWl4WFFVRlhjbkpETEV0QlFVczBjRU1zVVVGQlVXOUNMQ3RDUVVFclFpeFRRVUZUZEdwRUxFZEJRVWNzU1VGQlNVTXNSVUZCUlhGWkxFdEJRVXMwY0VNc1VVRkJVVk1zVlVGQlZUTnBSQ3hGUVVGRlFTeEZRVUZGYjJwRUxGRkJRVkZ3YWtRc1JVRkJSWEZpTEUxQlFVMXdZaXhMUVVGTFJDeEZRVUZGZFdwRUxHbENRVUZwUW5acVJDeEZRVUZGY1dJc1RVRkJUWEJpTEVkQlFVY3NTMEZEZG1SeFdTeExRVUZMTkhCRExGRkJRVkV3UWl4aFFVRmhMRk5CUVZNMWFrUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3NTVUZCU1N4SlFVRkpReXhGUVVGRkxFZEJRVWRwUXl4RlFVRkZMRVZCUVVWQkxFVkJRVVZLTEVWQlFVVkhMRTlCUVU5RExFbEJRVWxxUXl4RlFVRkZhVU1zUjBGQlIwZ3NSVUZCUldwRExFdEJRVXRuUXl4RlFVRkZTU3hIUVVGSGJFTXNSVUZCUlRoQ0xFVkJRVVZKTEVsQlFVa3NUMEZCVDJwRExFZEJRVWR0WVN4TFFVRkxOSEJETEZGQlFWRXlRaXhyUWtGQmEwSXNVMEZCVXpkcVJDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSVUZCUldsRExFZEJRVWNzU1VGQlNTeEpRVUZKUXl4TFFVRkxia01zUlVGQlJTeERRVUZETEVsQlFVbDNSQ3hGUVVGRmVFUXNSVUZCUlcxRExFZEJRVWR2VGl4RlFVRkZkRkFzUlVGQlJVZ3NTMEZCUzJkRExFVkJRVVV3UWl4SFFVRkhMRWRCUVVjc1RVRkJUU3RNTEVWQlFVVXNRMEZCUXl4SlFVRkpMRWxCUVVsM1JTeExRVUZMZGxFc1JVRkJSVFF2UXl4VlFVRlZMRWRCUVVjMUwwTXNSVUZCUlRRdlF5eFZRVUZWTldoRUxHVkJRV1YxVXl4SFFVRkhMRTFCUVUxb1V5eEZRVUZGWjFNc1IwRkJSM1pSTEVWQlFVVTRMME1zVjBGQlZ6a3ZReXhGUVVGRkt5OURMRmRCUVZkdWNFTXNTMEZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZVzR5UXl4RlFVRkZMMHdzUlVGQlJUZ3ZReXhYUVVGWGNHaEVMRWRCUVVkelFpeEZRVUZGT0M5RExGZEJRVmR3YUVRc1JVRkJSWEZPTEVkQlFVZEJMRXRCUTJ4WU5rc3NTMEZCU3pSd1F5eFJRVUZSTkVJc01FSkJRVEJDTEZOQlFWTTVha1FzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFVY3NTVUZCU1N4SlFVRkphVU1zUzBGQlMyeERMRVZCUVVVc1EwRkJReXhKUVVGSmJVTXNSVUZCUlc1RExFVkJRVVZyUXl4SFFVRkhjMElzUlVGQlJYSkNMRVZCUVVWemFFUXNWVUZCVlN4SlFVRkpkR2hFTEVWQlFVVjNhRVFzWlVGQlpTeE5RVUZOTXl0RExFMUJRVTBzY1VaQlFYRkdMRWxCUVVsMVN5eEZRVUZGZEZBc1JVRkJSVWdzUzBGQlMyZERMRVZCUVVVd1FpeEhRVUZITEVkQlFVY3NUVUZCVFN0TUxFVkJRVVVzUjBGQlJ5OU1MRVZCUVVWMVowUXNaMEpCUVdkQ0xFdEJRVWMxYUVRc1JVRkJSWGxvUkN4NVFrRkJhVWNzVFVGQlRUVXJReXhOUVVGTkxHbEpRVUZ3UmpkRExFVkJRVVYzYUVRc1pVRkJaVGRxUkN4TFFVRkxhVU1zUlVGQlJYbENMRVZCUVVVeUwwTXNWMEZCVnpWNlF5eEZRVUZGY0U0c1JVRkJSWGxvUkN3clFrRkROVlY2YUVRc1JVRkJSWGRvUkN4bFFVRmxOMnBFTEV0QlFVdHBReXhGUVVGRmVVSXNSVUZCUlRJdlF5eFhRVUZYTlhwRExFdEJRVXMyU3l4TFFVRkxOSEJETEZGQlFWRTJRaXh2UWtGQmIwSXNVMEZCVXk5cVJDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSVUZCUldsRExFZEJRVWNzU1VGQlNVTXNSVUZCUlc1RExFVkJRVVVyUWl4RlFVRkZhWHBETEd0Q1FVRnJRaXhIUVVGSE4zbERMRVZCUVVVc1EwRkJaU3hIUVVGa2JrTXNSVUZCUlcxRExFVkJRVVZ6YUVRc1YwRkJZM1JvUkN4RlFVRkZkV2hFTEdWQlFXVXNUVUZCVFRFclF5eE5RVUZOTEN0RlFVRXJSU3hIUVVGSGFFWXNSVUZCUlN0cVJDeG5Ra0ZCWjBJc1EwRkJReXhKUVVGSmRtZEVMRVZCUVVVc1NVRkJTWGhFTEVWQlFVVnhha1FzUzBGQlMyeG9SQ3hGUVVGRmRXaEVMR1ZCUVdVMWFrUXNTMEZCUzJsRExFVkJRVVY1UWl4RlFVRkZja0lzUlVGQlJUQm9SQ3hwUTBGQmFVTnlaMFFzUlVGQlJYSkNMRVZCUVVWMWFFUXNaVUZCWlRWcVJDeExRVUZMYVVNc1IwRkJSeTlDTEVWQlFVVjFha1FzWVVGQllYQm9SQ3hGUVVGRk1taEVMRlZCUVZVdmFFUXNSVUZCUlRsQ0xFVkJRVVZJTEV0QlFVdG5ReXhGUVVGRk9VSXNTVUZCU1N0Q0xFVkJRVVZuU3l4TFFVRkxka2tzUjBGQlIzUkNMRVZCUVVWd1F5eExRVUZMWjBNc1JVRkJSVGxDTEVWQlFVVXNRMEZCUTNkRUxFbEJRVWwwUWl4RlFVRkZjRU1zUzBGQlMyZERMRVZCUVVVNVFpeEZRVUZGZDBRc1VVRkJVWHBDTEVWQlFVVjNla01zWVVGRE5XUnVOMElzUzBGQlN6UndReXhSUVVGUk9FSXNVMEZCVXl4VFFVRlRhR3RFTEVWQlFVVkRMRWRCUVVjc1IwRkJSMEVzUlVGQlJVUXNSVUZCUlc5cVJDeFBRVUZQTEVOQlFVTnVha1FzUlVGQlJYRlpMRXRCUVVzMGNFTXNVVUZCVVZNc1ZVRkJWVE5wUkN4RlFVRkZReXhIUVVGSExFbEJRVWt2UWl4RlFVRkZPRUlzUlVGQlJYRmlMRTFCUVUxd1lpeEhRVUZITEU5QlFVOHZRaXhKUVVGSmIyRXNTMEZCU3pSd1F5eFJRVUZSYlVJc2NVSkJRWEZDY21wRUxFVkJRVVZ4WWl4TlFVRk5jR0lzUjBGQlJ5eEhRVUZITDBJc1JVRkJSU3hIUVVGSE9FSXNSVUZCUlhWcVJDeHBRa0ZCYVVJc1QwRkJUM0pzUkN4RlFVRkZPRUlzUlVGQlJYVnFSQ3hwUWtGQmFVSjBha1FzVFVGQlQzRlpMRXRCUVVzMGNFTXNVVUZCVVcxQ0xIRkNRVUZ4UW5KcVJDeEZRVUZGZFdwRUxHbENRVUZwUW5ScVJDeEhRVUZITEVkQlFVY3ZRaXhIUVVGSGIyRXNTMEZCU3pSd1F5eFJRVUZSSzBJc2FVSkJRV2xDTEZOQlFWTnFhMFFzUlVGQlJVTXNSMEZCUnl4UFFVRlBjVmtzUzBGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJoclJDeEZRVUZGUXl4SlFVRkpjVmtzUzBGQlN6UndReXhSUVVGUlowTXNPRUpCUVRoQ0xGTkJRVk5zYTBRc1JVRkJSVU1zUjBGQlowTXNUMEZCVHl4UFFVRndRMFFzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5vYTBRc1JVRkJSVU1zU1VGQmEwSkVMRWRCUVVkQkxFZEJRemRqYzFrc1MwRkJTelJ3UXl4UlFVRlJhVU1zWjBKQlFXZENMRk5CUVZOdWEwUXNSVUZCUlVNc1IwRkJaME1zVDBGQlR5eFBRVUZ3UTBRc1JVRkJSWE5aTEV0QlFVczBjRU1zVVVGQlVUaENMRk5CUVZOb2EwUXNSVUZCUlVNc1NVRkJhMEpFTEVsQlFVbEJMRWRCUVVkeldTeExRVUZMTkhCRExGRkJRVkZyUXl3NFFrRkJPRUlzVTBGQlUzQnJSQ3hGUVVGRlF5eEhRVUZITEVsQlFVa3ZRaXhGUVVGRmIyRXNTMEZCU3pSd1F5eFJRVUZSSzBJc2FVSkJRV2xDYW10RUxFVkJRVVZETEVkQlFXbEZMRWRCUVRsRVJDeEZRVUZGYTJwRUxEUkNRVUUwUW14cVJDeEZRVUZGYTJwRUxEQkNRVUV3UWl4TFFVRlJiR3BFTEVWQlFVVnJha1FzTUVKQlFUQkNhbXBFTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWxCUVVrNVFpeEZRVUZGTEVWQlFVVkJMRVZCUVVWRUxFVkJRVVZwUXl4UFFVRlBhRU1zU1VGQlNVUXNSVUZCUlVNc1NVRkJTVVFzUlVGQlJVTXNSMEZCUnpaQ0xFVkJRVVZyYWtRc01FSkJRVEJDYW1wRUxFbEJRVWNzUlVGQlJ5eFBRVUZQTDBJc1IwRkRhbGh2WVN4TFFVRkxOSEJETEZGQlFWRnRReXgzUWtGQmQwSXNVMEZCVTNKclJDeEZRVUZGUXl4SFFVRkhMRWxCUVVrdlFpeEZRVUZGYjJFc1MwRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENhbXRFTEVWQlFVVkRMRWRCUVdsRkxFZEJRVGxFUkN4RlFVRkZhMnBFTERSQ1FVRTBRbXhxUkN4RlFVRkZhMnBFTERCQ1FVRXdRaXhMUVVGUmJHcEVMRVZCUVVWcmFrUXNNRUpCUVRCQ2FtcEVMRWRCUVVjc1EwRkJReXhKUVVGSkxFbEJRVWs1UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVZFTEVWQlFVVnBReXhQUVVGUGFFTXNTVUZCU1VRc1JVRkJSVU1zUzBGQlMwUXNSVUZCUlVNc1IwRkJSelpDTEVWQlFVVnJha1FzTUVKQlFUQkNhbXBFTEVsQlFVY3NSVUZCUnl4UFFVRlBMMElzUjBGRE9WRnZZU3hMUVVGTE5IQkRMRkZCUVZGdlF5eFhRVUZYTEZOQlFWTjBhMFFzUjBGQlJ5eFBRVUZITEUxQlFVMUJMRWRCUVVjc2FVSkJRV3RDUVN4RlFVRlRRU3hGUVVGTGMxa3NTMEZCU3pSd1F5eFJRVUZSVFN4elFrRkJjMEo0YVVRc1lVRkJZV2x6UXl4WFFVRnJRbkJ4UXl4TFFVRkxNR01zVFVGQlRXbHpRaXhQUVVGUGEwSXNaMEpCUVdkQ01YSkRMRWxCUVVjMlFpeExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eG5RMEZCWjBNelZpeExRVUZMZFVjc1QwRkJUM0JKTEVsQlFWY3NUMEZCVFhOWkxFdEJRVXMwY0VNc1VVRkJVWEZETEZWQlFWVXNVMEZCVTNaclJDeEhRVUZITEU5QlFVY3NUVUZCVFVFc1IwRkJSMEVzWVVGQllXbHpReXhYUVVGclFtcHpReXhGUVVGTExHbENRVUZyUWtFc1JVRkJVelpDTEV0QlFVc3dZeXhOUVVGTmFYTkNMRTlCUVU5M1FpeDVRa0ZCZVVKb2MwTXNTVUZCUnpaQ0xFdEJRVXRuVml4UlFVRlJWeXhMUVVGTExHZERRVUZuUXpOV0xFdEJRVXQxUnl4UFFVRlBjRWtzU1VGQlZ5eFBRVU16WlhOWkxFdEJRVXMwY0VNc1VVRkJVWE5ETEdWQlFXVXNVMEZCVTNoclJDeEhRVUV3UXl4UFFVRjJRM05aTEV0QlFVczBjRU1zVVVGQlVYVkRMSFZDUVVGMVFucHJSQ3hIUVVGVlFTeEZRVUZGUnl4UlFVRlJMR2xDUVVGclFrZ3NSVUZCUlN4SFFVRkhOa0lzUzBGQlMzZGFMRTFCUVUxMFRpeEpRVUZKTDA0c1JVRkJSWE5aTEV0QlFVczBjRU1zVVVGQlVXOURMRmxCUVZsMGEwUXNSMEZCUjNOWkxFdEJRVXMwY0VNc1VVRkJVWGRETEdOQlFXTXNVMEZCVXpGclJDeEhRVUV3UXl4UFFVRjJRM05aTEV0QlFVczBjRU1zVVVGQlVYVkRMSFZDUVVGMVFucHJSQ3hKUVVGVlFTeEZRVUZGUnl4UlFVRlJTQ3hGUVVGRkxHRkJRV0ZwYzBNc1YwRkJWMnB6UXl4RlFVRkZOa0lzUzBGQlMzZGFMRTFCUVUxMFRpeEpRVUZKTDA0c1JVRkJSWE5aTEV0QlFVczBjRU1zVVVGQlVYRkRMRmxCUXpkVWFuTkRMRXRCUVVzMGNFTXNVVUZCVVhWRExIVkNRVUYxUWl4VFFVRlRlbXRFTEVkQlFVY3NSMEZCUnpaQ0xFdEJRVXRoTEU5QlFVOHhReXhIUVVGSExFVkJRVVZCTEVWQlFVVkhMRTlCUVU4c1EwRkJReXhKUVVGSlJpeEZRVUZGTkVJc1MwRkJTM1ZITEU5QlFVOXdTU3hGUVVGRkxFbEJRVWsyUWl4TFFVRkxkMW9zVFVGQlRUZElMRkZCUVZGNFZDeEhRVUZGTEZOQlFWTkJMRWRCUVVjMlFpeExRVUZMZFVjc1QwRkJUM0JKTEVsQlFVbERMRWRCUVVjMFFpeExRVUZMWjFZc1VVRkJVVmNzUzBGQlN5eDFSRUZCZFVRelZpeExRVUZMZFVjc1QwRkJUM0JKTEVkQlFVY3NZVUZCWVVNc1VVRkJUM0ZaTEV0QlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFpeFRRVUZUTTJ0RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGblF5eFBRVUZQTEU5QlFYQkRPRUlzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5vYTBRc1JVRkJSVU1zU1VGQmEwSXZRaXhGUVVGRk9FSXNSMEZCUjNOWkxFdEJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRaXhUUVVGVE5XdEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRjFReXhQUVVGUExFOUJRVE5ET0VJc1JVRkJSWE5aTEV0QlFVczBjRU1zVVVGQlVXbERMR2RDUVVGblFtNXJSQ3hGUVVGRlF5eEpRVUZyUWk5Q0xFVkJRVVU0UWl4SFFVTnlaSE5aTEV0QlFVczBjRU1zVVVGQlVUSkRMR2xEUVVGcFF5eFRRVUZUTjJ0RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGeFJDeFBRVUZQTEU5QlFYcEVPRUlzUlVGQlJYTlpMRXRCUVVzMGNFTXNVVUZCVVdkRExEaENRVUU0UW14clJDeEZRVUZGUXl4SlFVRnJRaTlDTEVWQlFVVTRRaXhIUVVGSGMxa3NTMEZCU3pSd1F5eFJRVUZSTkVNc1pVRkJaWGh6UXl4TFFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnljME1zUzBGQlN6UndReXhSUVVGUk5rTXNXVUZCV1N4VFFVRlRMMnRFTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGUXl4SFFVRnBReXhIUVVFNVFqWkNMRVZCUVVWbmFrUXNXVUZCV1docVJDeEZRVUZGWjJwRUxGVkJRVlVzU1VGQlR5OXBSQ3hMUVVGTFJDeEZRVUZGWjJwRUxGVkJRVlVzVDBGQlQyaHFSQ3hGUVVGRloycEVMRlZCUVZVdmFVUXNSMEZCUnl4SlFVRkpSeXhGUVVGRmExa3NTMEZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMmhyUkN4RlFVRkZReXhIUVVGSExFbEJRVWxITEVWQlFVVXNRMEZCUXl4SFFVRkhiRU1zUlVGQlJTeFBRVUZQYTBNc1JVRkJSU3hIUVVGSGExa3NTMEZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMmhzUkN4RlFVRkZReXhGUVVGRlJ5eEhRVUZITEU5QlFVOUtMRVZCUVVWbmFrUXNWVUZCVlM5cFJDeEhRVUZITEVsQlFVbHhXU3hMUVVGTGNXNURMRWxCUVVsMkwwTXNSVUZCUldwRExFbEJReTloYldFc1MwRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlV5eFRRVUZUYUd4RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVFMFN5eFBRVUY2U3pKRUxFdEJRVXRuVml4UlFVRlJiVUlzYVVKQlFXbENhRmtzUlVGQlJYTlpMRXRCUVVzMGNFTXNVMEZCVTJwcFJDeEZRVUZGUkN4RlFVRkZiMnBFTEU5QlFVOXdha1FzUlVGQlJYRmlMRTFCUVUwdlF5eExRVUZMTkhCRExGRkJRVkZUTEZWQlFWVXphVVFzUlVGQlJVTXNTVUZCU1M5Q0xFZEJRVWR2WVN4TFFVRkxOSEJETEZGQlFWRnZRaXdyUWtGQkswSjBha1FzUjBGQlIwRXNSVUZCUlhWcVJDeHBRa0ZCYVVKMGFrUXNSMEZCUnk5Q0xFZEJRVlU0UWl4SFFVRkhjMWtzUzBGQlN6UndReXhSUVVGUkswTXNhMEpCUVd0Q0xGTkJRVk5xYkVRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVjc1QwRkJUMjloTEV0QlFVczBjRU1zVVVGQlVXZEVMSGxDUVVGNVFteHNSQ3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSU3hKUVVGSmIyRXNTMEZCU3pSd1F5eFJRVUZSYVVRc2IwSkJRVzlDTEZOQlFWTnViRVFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNzVDBGQlQyOWhMRXRCUVVzMGNFTXNVVUZCVVdkRUxIbENRVUY1UW14c1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJTeEpRVU51WVc5aExFdEJRVXMwY0VNc1VVRkJVV3RFTEhOQ1FVRnpRaXhUUVVGVGNHeEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU5dllTeExRVUZMTkhCRExGRkJRVkZuUkN4NVFrRkJlVUpzYkVRc1JVRkJSVU1zUlVGQlJTOUNMRWRCUVVVc1NVRkJTMjloTEV0QlFVczBjRU1zVVVGQlVXMUVMSEZDUVVGeFFpeFRRVUZUY214RUxFVkJRVVZETEVWQlFVVXZRaXhIUVVGSExFOUJRVTl2WVN4TFFVRkxOSEJETEZGQlFWRm5SQ3g1UWtGQmVVSnNiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVVzUzBGQlMyOWhMRXRCUVVzMGNFTXNVVUZCVVc5RUxHOUNRVUZ2UWl4VFFVRlRkR3hFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITEU5QlFVOXZZU3hMUVVGTE5IQkRMRkZCUVZGblJDeDVRa0ZCZVVKc2JFUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVXNTMEZCUzI5aExFdEJRVXMwY0VNc1VVRkJVWEZFTEcxQ1FVRnRRaXhUUVVGVGRteEVMRVZCUVVWRExFVkJRVVV2UWl4SFFVRkhMRTlCUVU5dllTeExRVUZMTkhCRExGRkJRVkZuUkN4NVFrRkJlVUpzYkVRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVVc1NVRkRhbUZ2WVN4TFFVRkxOSEJETEZGQlFWRnpSQ3gzUWtGQmQwSXNVMEZCVTNoc1JDeEZRVUZGUXl4RlFVRkZMMElzUjBGQlJ5eFBRVUZQYjJFc1MwRkJTelJ3UXl4UlFVRlJaMFFzZVVKQlFYbENiR3hFTEVWQlFVVkRMRVZCUVVVdlFpeEZRVUZGTEUxQlFVMXZZU3hMUVVGTE5IQkRMRkZCUVZGblJDeDVRa0ZCZVVJc1UwRkJVMnhzUkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJkVTRzVDBGQmNFNHdSQ3hMUVVGTFoxWXNVVUZCVVcxQ0xHbENRVUZwUW1oWkxFVkJRVVZ6V1N4TFFVRkxOSEJETEZOQlFWTm9hMFFzU1VGQlNVTXNSVUZCUlcxaExFdEJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTm9iRVFzUlVGQlJVTXNSVUZCUlM5Q0xFZEJRVWNyUWl4RlFVRkZSQ3hGUVVGRmIycEVMRTlCUVU5d2FrUXNSVUZCUlhGaUxFMUJRVTB2UXl4TFFVRkxOSEJETEZGQlFWRlRMRlZCUVZVemFVUXNSVUZCUlVNc1NVRkJTU3hOUVVGTmNWa3NTMEZCU3pSd1F5eFJRVUZSYjBJc0swSkJRU3RDZEdwRUxGVkJRVlZCTEVWQlFVVjFha1FzYVVKQlFXbENkR3BFTEVsQlFWZEVMRWRCUTJwWmMxa3NTMEZCU3pSd1F5eFJRVUZSZFVRc2JVSkJRVzFDTEZOQlFWTjZiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFVkJRVVZETEVkQlFUQklMRTlCUVhaSU1FUXNTMEZCUzJkV0xGRkJRVkZ0UWl4cFFrRkJhVUpvV1N4RlFVRkZjMWtzUzBGQlN6UndReXhUUVVGVGFtbEVMRVZCUVVWeFdTeExRVUZMTkhCRExGRkJRVkVyUWl4cFFrRkJhVUpxYTBRc1JVRkJSVU1zUjBGQlJ5eE5RVUZST1VJc1JVRkJSVGhDTEVWQlFVVnhTQ3hQUVVGUGJrb3NSVUZCUlN4RlFVRkZSQ3hIUVVGSEswSXNSVUZCUldkTExFdEJRVXN2VEN4SFFVRlZPRUlzUjBGQlIzTlpMRXRCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV01zVTBGQlV6RnNSQ3hGUVVGRlF5eEZRVUZGTDBJc1JVRkJSVU1zUjBGQmRVMHNUMEZCY0Uwd1JDeExRVUZMWjFZc1VVRkJVVzFDTEdsQ1FVRnBRbWhaTEVWQlFVVnpXU3hMUVVGTE5IQkRMRlZCUVZWb2EwUXNSVUZCUlc5aExFdEJRVXMwY0VNc1VVRkJVWE5DTEdsQ1FVRnBRbmhxUkN4RlFVRkZPVUlzUzBGQlMwRXNTVUZCU1N0Q0xGRkJRVWNzU1VGQlV6bENMRWxCUVVrMlFpeEZRVUZGWjJwRUxGZEJRVmM1YTBRc1MwRkJTemhDTEVWQlFVVm5ha1FzV1VGQldXaHFSQ3hGUVVGRloycEVMRlZCUVZVNWEwUXNVVUZCUnl4SFFVRlJiMkVzUzBGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJoc1JDeEZRVUZGT1VJc1QwRkJSU3hKUVVGblFtOWhMRXRCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5vYkVRc1JVRkJSVU1zUlVGQlJUbENMRWxCUTNKamJXRXNTMEZCU3pSd1F5eFJRVUZSYzBJc2FVSkJRV2xDTEZOQlFWTjRha1FzUlVGQlJVTXNSMEZCUnl4SlFVRkpMRWxCUVVrdlFpeEZRVUZGUXl4RlFVRkZhVU1zUlVGQlJTeEZRVUZGUVN4RlFVRkZTQ3hGUVVGRlJTeFBRVUZQUXl4SlFVRkpMRU5CUVVNc1NVRkJTVU1zUlVGQlJVb3NSVUZCUlVjc1IwRkJSM05DTEVWQlFVVTBWeXhMUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYUd0RUxFVkJRVVZMTEVkQlFVY3NUVUZCVFhGQ0xFbEJRVWw0UkN4RlFVRkZiVU1zUlVGQlJXeERMRVZCUVVWMVJDeEZRVUZGTkZjc1MwRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUyaHNSQ3hGUVVGRlN5eFBRVUZGTEVsQlFWTXNUMEZCVDI1RExFZEJRVWR2WVN4TFFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFHeEVMRVZCUVVVNVFpeEZRVUZGUXl4SFFVRkhSQ3hIUVVGSExFZEJRVWR2WVN4TFFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSXNVMEZCVXpOc1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCYVVNc1IwRkJPVUkyUWl4RlFVRkZaMnBFTEZsQlFWbG9ha1FzUlVGQlJXZHFSQ3hWUVVGVkxFdEJRVkZvYWtRc1JVRkJSV2RxUkN4VlFVRlZPV3RFTEVkQlFVY3NRMEZCUXl4SlFVRkphME1zUlVGQlJXdFpMRXRCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5vYTBRc1JVRkJSVGxDTEVsQlFVMURMRWRCUVVkcFF5eExRVUZGU2l4RlFVRkZaMnBFTEZWQlFWVTVhMFFzUjBGQlJ5eEpRVUZKSzBJc1JVRkJSVWNzU1VGQlJ5eFBRVUZQU2l4RlFVRkZaMnBFTEZWQlFWVTVhMFFzU1VGRE0xbHZZU3hMUVVGTE5IQkRMRkZCUVZFd1JDeDNRa0ZCZDBJc1UwRkJVelZzUkN4RlFVRkZReXhGUVVGRkwwSXNSMEZCZFVnc1QwRkJjRWh2WVN4TFFVRkxOSEJETEZGQlFWRXlSQ3h0UWtGQmJVSTNiRVFzUlVGQlJVTXNSVUZCUlM5Q0xFbEJRVWNyUWl4RlFVRkZSQ3hGUVVGRloycEVMRlZCUVZVNWEwUXNTMEZCVFc5aExFdEJRVXMwY0VNc1VVRkJVVzFDTEhWQ1FVRjFRbkJxUkN4RlFVRkZSQ3hGUVVGRloycEVMRlZCUVZVNWEwUXNSMEZCUnl4SlFVRlhLMElzUjBGQlIzRlpMRXRCUVVzMGNFTXNVVUZCVVRKRUxHMUNRVUZ0UWl4VFFVRlROMnhFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZwUXl4SFFVRTVRamhDTEVWQlFVVm5ha1FzV1VGQldXaHFSQ3hGUVVGRloycEVMRlZCUVZVc1MwRkJVV2hxUkN4RlFVRkZaMnBFTEZWQlFWVTVhMFFzUjBGQlJ5eERRVUZETEVsQlFVa3NTVUZCU1VNc1JVRkJSVzFoTEV0QlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFtcHJSQ3hGUVVGRk9VSXNSMEZCUjJ0RExFVkJRVVVzUjBGQlIwTXNSVUZCUlN4RlFVRkZRU3hGUVVGRmJFTXNSVUZCUldkRExFOUJRVTlGTEVsQlFVbEVMRVZCUVVWRExFZEJRVWNzU1VGQlNVb3NSVUZCUlRsQ0xFVkJRVVZyUXl4SlFVRkpUQ3hGUVVGRloycEVMRlZCUVZVNWEwUXNSMEZCUjJ0RExFbEJRekZZYTFrc1MwRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMRk5CUVZNNWJFUXNSVUZCUlVNc1JVRkJSUzlDTEVkQlFVY3lSQ3hMUVVGTFoxWXNVVUZCVVcxQ0xHbENRVUZwUW1oWkxFVkJRVVZ6V1N4TFFVRkxOSEJETEZOQlFWTnNhVVFzUlVGQlJXZHFSQ3haUVVGWmFHcEVMRVZCUVVWbmFrUXNWVUZCVlN4SlFVRkpMRWxCUVVrM2EwUXNSVUZCUlVRc1JVRkJSVUVzUlVGQlJYZGxMRlZCUVZWNFpTeEZRVUZ0UWl4UFFVRnFRamhDTEVWQlFVVm5ha1FzVlVGQlZTOXBSQ3hIUVVGSEwwSXNSVUZCVTI5aExFdEJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTm9iRVFzUlVGQlJVTXNSVUZCUlRsQ0xFbEJRVWx0WVN4TFFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSXNVMEZCVXk5c1JDeEZRVUZGUXl4RlFVRkZMMElzUlVGQlJVTXNSMEZCUnpCRUxFdEJRVXRuVml4UlFVRlJiVUlzYVVKQlFXbENhRmtzUlVGQlJYTlpMRXRCUVVzMGNFTXNVMEZCVTJ4cFJDeEZRVUZGWjJwRUxGbEJRVmxvYWtRc1JVRkJSV2RxUkN4VlFVRlZMRWxCUVVrc1NVRkJTVFZwUkN4RlFVRkZha01zUlVGQlJVRXNSVUZCUlhWbExGVkJRVlYyWlN4RlFVRnRRaXhQUVVGcVFqWkNMRVZCUVVWbmFrUXNWVUZCVlM5cFJDeEhRVUZIT1VJc1JVRkJVMjFoTEV0QlFVczBjRU1zVVVGQlVYZEVMR05CUVdNeGJFUXNSVUZCUlVNc1JVRkJSUzlDTEVWQlFVVnJReXhKUVVOd1dtdFpMRXRCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUWl4VFFVRlRhRzFFTEVWQlFVVkRMRVZCUVVVdlFpeEhRVUZITWtRc1MwRkJTMmRXTEZGQlFWRnRRaXhwUWtGQmFVSm9XU3hGUVVGRmMxa3NTMEZCU3pSd1F5eFRRVUZUYkdsRUxFVkJRVVZuYWtRc1dVRkJXV2hxUkN4RlFVRkZaMnBFTEZWQlFWVXNTVUZCU1RsclJDeEZRVUZGUVN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSlF5eEZRVUZGTEVkQlFVZHBReXhGUVVGRkxFVkJRVVZCTEVWQlFVVnNReXhGUVVGRmFVTXNUMEZCVDBNc1NVRkJTV3BETEVWQlFVVnBReXhIUVVGSGJFTXNSVUZCUld0RExFZEJRVWR6WXl4VlFVRXlRaXhQUVVGcVFqRmpMRVZCUVVWbmFrUXNWVUZCVlM5cFJDeEhRVUZITDBJc1JVRkJVMjloTEV0QlFVczBjRU1zVVVGQlVUaERMRk5CUVZOb2JFUXNSVUZCUlVNc1JVRkJSVGxDTEVsQlF5OVBiV0VzUzBGQlN6UndReXhSUVVGUkswUXNNRUpCUVRCQ0xGTkJRVk5xYlVRc1JVRkJSVU1zUlVGQlJTOUNMRVZCUVVWRExFVkJRVVZwUXl4SFFVRkhhMWtzUzBGQlN6UndReXhSUVVGUk1rUXNiVUpCUVcxQ04yeEVMRVZCUVVVM1FpeEZRVUZGT0VJc1IwRkJSeXhKUVVGSlNTeEZRVUZGVEN4RlFVRkZaMnBFTEZWQlFWVXZhVVFzUjBGQmJVc3NUMEZCYUV0SkxFbEJRVWxCTEVWQlFVVk1MRVZCUVVWbmFrUXNWVUZCVlM5cFJDeEhRVUZITEVsQlFVa3ZRaXhGUVVGRlFTeEhRVUZKTEVsQlFVbERMRVZCUVVVMlFpeEZRVUZGYzFrc1MwRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENhbXRFTEVWQlFVVkRMRWRCUVVjc1RVRkJVVWNzUjBGQlIwTXNSVUZCUldsSUxFOUJRVTlzU0N4RlFVRkZMRVZCUVVWc1F5eEhRVUZIT0VJc1JVRkJSWE5JTEU5QlFVOXNTQ3hGUVVGRkxFVkJRVVZzUXl4RlFVRkZkMlVzWVVGQllYSmpMRVZCUVVVMFNpeExRVUZMTDB3c1IwRkJSemhDTEVWQlFVVnBTeXhMUVVGTEwwd3NSVUZCUlhkbExGbEJRVzFDZUdVc1IwRkJSMjloTEV0QlFVczBjRU1zVVVGQlVXZEZMRTFCUVUwc1UwRkJVMnh0UkN4RlFVRkZReXhGUVVGRkwwSXNSVUZCUlVNc1IwRkJSeXhKUVVGSkxFbEJRVWxwUXl4RlFVRkZMRWRCUVVkRExFVkJRVVVzUlVGQlJVRXNSVUZCUlV3c1JVRkJSVWNzVDBGQlQwVXNTVUZCU1VRc1JVRkJSVWdzUlVGQlJXcERMRXRCUVV0blF5eEZRVUZGU3l4TFFVRkxia01zUlVGQlJVRXNSVUZCUlVZc1MwRkJTMmRETEVWQlFVVkxMRWRCUVVkc1F5eEZRVUZGTmtJc1JVRkJSVXNzU1VGQlNVd3NSVUZCUlVzc1IwRkJSeXhQUVVGUFJDeEhRVU40V210WkxFdEJRVXMwY0VNc1VVRkJVWHBwUkN4VlFVRlZNRzFFTEdWQlFXVXNWMEZCVnl4SFFVRkhjR3hFTEV0QlFVdHBhVVFzVlVGQlZTeEpRVUZKTEVsQlFVbG9ha1FzUzBGQlMyVXNTMEZCUzJscFJDeFZRVUZWTEVOQlFVTXNTVUZCU1M5cFJDeEZRVUZGWXl4TFFVRkxhV2xFTEZWQlFWVm9ha1FzUjBGQlJ5eEhRVUZIV1N4TlFVRk5ORWdzVVVGQlVYWkpMRWRCUVVjc1NVRkJTU3hKUVVGSkwwSXNSVUZCUlN4RlFVRkZRU3hGUVVGRkswSXNSVUZCUlVVc1QwRkJUMnBETEVsQlFVa3JRaXhGUVVGRkwwSXNTVUZCU1N0Q0xFVkJRVVV2UWl4SFFVRkhkMlVzWlVGQlpYcGpMRWRCUVVkQkxFVkJRVVY1WXl4WlFVRlpjRVVzUzBGQlN6UndReXhSUVVGUmVtbEVMRlZCUVZWcFpDeFJRVUZSTEZkQlFXbERMRTlCUVhSQ00ySXNTMEZCUzI5c1JDeHBRa0ZCZDBKd2JFUXNTMEZCUzNOaExFOUJRVTh2UXl4TFFVRkxOSEJETEZGQlFWRkhMSEZDUVVGeFFpOXdReXhMUVVGTE5IQkRMRkZCUVZGNmFVUXNWVUZCVlRSSkxGTkJRVk1zVjBGQmFVTXNUMEZCZEVKMFNDeExRVUZMYjJ4RUxHbENRVUYzUW5Cc1JDeExRVUZMYzJFc1RVRkJUV2hVTEdGQlF6RmFhVkVzUzBGQlN6UndReXhSUVVGUmVtbEVMRlZCUVZVeWJVUXNZVUZCWVN4VFFVRlRjRzFFTEVkQlFVY3NSMEZCUjJVc1MwRkJTM2RwUkN4cFFrRkJhVUlzUTBGQlEzaHBSQ3hMUVVGTGFXbEVMRmxCUVZscWFVUXNTMEZCUzJscFJDeFZRVUZWTEVsQlFVa3NTVUZCU1M5cFJDeEZRVUZGUkN4RlFVRkZjV2hFTEZkQlFWY3NSMEZCUjNKb1JDeEZRVUZGZVdoRUxGbEJRVmtzUjBGQlIzcG9SQ3hGUVVGRmFXbEVMR2RDUVVGblFpeFBRVUZQYkdoRUxFdEJRVXRwYVVRc1ZVRkJWUzlwUkN4TFFVRkxZeXhMUVVGTGFXbEVMRlZCUVZVdmFVUXNSMEZCUnpSQ0xFdEJRVXQzV2l4TlFVRk5kRTRzU1VGQlNXaE9MRXRCUVV0M2FVUXNhVUpCUVdsQ2RHcEVMRWxCUVVrc1NVRkJSeXhUUVVGVFFTeEhRVUZITEU5QlFVOHNTVUZCU1VRc1JVRkJSWFZvUkN4TFFVRkxkR2hFTEU5QlFVMWpMRXRCUVV0cGFVUXNWVUZCVlM5cFJDeFJRVUZSTEVkQlFVZEVMRVZCUVVWcGFVUXNaMEpCUVdkQ0xFOUJRVTlzYUVRc1MwRkJTMmxwUkN4VlFVRlZMMmxFTEVsQlFVbGpMRXRCUVV0M2FVUXNhVUpCUVdsQ2RHcEVMRXRCUVV0akxFdEJRVXRwYVVRc1ZVRkJWUzlwUkN4SFFVRkhMRWxCUVVsRUxFVkJRVVYxYUVRc1MwRkJTM2huUkN4TFFVRkxkMmxFTEdsQ1FVRnBRblJxUkN4TFFVRkxZeXhMUVVGTGFXbEVMRlZCUVZVdmFVUXNSMEZCUnl4UFFVRlBZeXhMUVVGTGQybEVMR2xDUVVGcFFuUnFSQ3hMUVVNMVpYRlpMRXRCUVVzMGNFTXNVVUZCVVhwcFJDeFZRVUZWTkcxRUxHRkJRV0VzVTBGQlUzSnRSQ3hGUVVGRlF5eEhRVUZIWXl4TFFVRkxhV2xFTEZsQlFWbHFhVVFzUzBGQlMybHBSQ3hWUVVGVkxFbEJRVWt4Y1VNc1MwRkJTelJ3UXl4UlFVRlJiMElzSzBKQlFTdENkbWxFTEUxQlFVMHNTVUZCU1RkRExFVkJRVVU0UWl4RlFVRkZjV2hFTEZkQlFUUlNMRTlCUVdwU2NtaEVMRVZCUVVWNWFFUXNXVUZCV1hob1JDeEZRVUZGUVN4SFFVRkhMRWRCUVVkRUxFVkJRVVZwYVVRc2FVSkJRV2xDYkdoRUxFdEJRVXRwYVVRc1ZVRkJWVGxyUkN4SFFVRkhLMElzUlVGQlJXTXNTMEZCUzNkcFJDeHBRa0ZCYVVKeWJFUXNSMEZCUnpKRUxFdEJRVXQzV2l4TlFVRk5kRTRzU1VGQlNUbE9MRWRCUVVVc1UwRkJVMFFzUjBGQlJ5eFBRVUZQUVN4RlFVRkZNR01zWTBGQllUTmlMRXRCUVV0M2FVUXNhVUpCUVdsQ2NteEVMRWRCUVVjclFpeEhRVUZIUkN4RlFVRkZhV2xFTEdsQ1FVRnBRbXhvUkN4TFFVRkxhV2xFTEZWQlFWVTVhMFFzUjBGQlJ5dENMRVZCUVVWakxFdEJRVXQzYVVRc2FVSkJRV2xDY214RUxFZEJRVWNyUWl4RlFVRkZRU3hGUVVGRmVXTXNWVUZCVlhwakxFZEJRVWRqTEV0QlFVdDNhVVFzYVVKQlFXbENjbXhFTEVkQlFVY3JRaXhGUVVGVFl5eE5RVU51WW5WWUxFdEJRVXMwY0VNc1VVRkJVVzlGTEZkQlFWY3NVMEZCVTNSdFJDeEZRVUZGUXl4SFFVRkhMRXRCUVV0RUxHRkJRV0ZETEVWQlFVVTBUQ3hoUVVGaExFMUJRVTB6U1N4TlFVRk5MR3REUVVGclF5eEpRVUZKYUVZc1JVRkJSVGhDTEVWQlFVVXdZeXhWUVVGVmVtTXNSVUZCUlVFc1JVRkJSWGxqTEZWQlFWVXNTVUZCU1habExFVkJRVVVzUjBGQlIybERMRVZCUVVVc1JVRkJSVU1zUlVGQlJXNURMRVZCUVVWcFF5eFBRVUZQUml4RlFVRkZSU3hQUVVGUGFrTXNSVUZCUldsRExFOUJRVTlHTEVWQlFVVkZMRTlCUVRaRUxFbEJRWFJFU0N4RlFVRkZlV2xFTEhGQ1FVRnhRblJyUkN4RlFVRkZMRWRCUVVjMlFpeEZRVUZGZVdsRUxHMUNRVUZ0UW5KcFJDeEZRVUZGTEVkQlFWRkJMRVZCUVVWRExFVkJRVVZFTEVsQlFVbHJXU3hMUVVGTE5IQkRMRkZCUVZGeFJTeGpRVUZqY205RUxFVkJRVVZyUXl4SFFVRkhTQ3hGUVVGRlJ5eE5RVUZOYWtNc1JVRkJSV2xETEVkQlFVZElMRVZCUVVWSExFbEJRVWtzVDBGQlR5eEpRVUZKU2l4RlFVRkZOa3dzV1VGQldURk9MRWxCUVVsdFlTeExRVUZMTkhCRExGRkJRVkZ3ZEVNc1QwRkJUeXhUUVVGVE9WVXNSVUZCUlVNc1IwRkJSeXhQUVVGUFJDeEhRVUZIUXl4TlFVRk5SQ3hKUVVGSlF5eEpRVUZKUkN4aFFVRmhReXhGUVVGRk5Fd3NZVUZCWVhsTkxFdEJRVXMwY0VNc1VVRkJVWEZGTEdOQlFXTjJiVVFzUlVGQlJUQmpMRlZCUVZWNll5eEZRVUZGZVdNc1dVRkRNV1J3UlN4TFFVRkxOSEJETEZGQlFWRnpSU3hyUWtGQmEwSXNVMEZCVTNodFJDeEZRVUZGUXl4SFFVRkhSQ3hGUVVGRlFTeEhRVUZITEVkQlFVZERMRVZCUVVWQkxFZEJRVWNzUjBGQlJ5eEpRVUZUT1VJc1JVRkJURVFzUlVGQlJTeEhRVUZMTEVsQlFVbERMRXRCUVVzMlFpeEZRVUZGT1VJc1JVRkJSVU1zUjBGQlJ5eEZRVUZGTEVsQlFVbEJMRXRCUVVzNFFpeEZRVUZGTDBJc1JVRkJSVU1zUjBGQlJ5eEZRVUZGTEVsQlFVbEJMRXRCUVV0RUxFVkJRVVVzU1VGQlNXOWhMRXRCUVVzMGNFTXNVVUZCVVhGRkxHTkJRV04yYlVRc1JVRkJSVGRDTEVkQlFVYzRRaXhGUVVGRk9VSXNTVUZCU1N4UFFVRk5MRVZCUVVjc1QwRkJUU3hIUVVOb1RHMWhMRXRCUVVzMGNFTXNVVUZCVVhGRkxHTkJRV01zVTBGQlUzWnRSQ3hGUVVGRlF5eEhRVUZITEVkQlFVZEVMRWRCUVVkRExFVkJRVVVzVDBGQlRTeEZRVUZITEVsQlFVazBRaXhMUVVGTE9FY3NVMEZCVXpOSkxFdEJRVXMyUWl4TFFVRkxPRWNzVTBGQlV6RkpMRWRCUVVjc1UwRkJUU3hwUWtGQmEwSkVMRWRCUVVjMmFFTXNUVUZCVFRkb1F5eEpRVUZKTEdsQ1FVRnJRa01zUjBGQlJ6Um9ReXhOUVVGTk5XaERMRXRCUVVkRExFOUJRVTlHTEVsQlFVbEZMRTlCUVU5RUxFZEJRVTBzUjBGQlIwUXNSVUZCUlRaTUxHRkJRV0UxVEN4RlFVRkZORXdzV1VGQldTeFBRVUZOTEVWQlFVY3NSMEZCUjNsTkxFdEJRVXMwY0VNc1VVRkJVVTBzYzBKQlFYTkNlR2xFTEVWQlFVVTJUQ3hqUVVGamIyZERMRmRCUVZjc1EwRkJReXhIUVVGSGFuTkRMRVZCUVVWSExGRkJRVkZHTEVWQlFVVkZMRTlCUVU4c1QwRkJUU3hGUVVGSExFbEJRVWtzU1VGQlNXcERMRVZCUVVVc1JVRkJSVUVzUlVGQlJUaENMRVZCUVVWSExFOUJRVTlxUXl4SlFVRkpMRWRCUVVjNFFpeEZRVUZGT1VJc1NVRkJTU3RDTEVWQlFVVXZRaXhIUVVGSExFOUJRVTBzUlVGQlJ5eFBRVUZOTEVWQlFVY3NSMEZCUnpoQ0xFVkJRVVUyVEN4alFVRmpha3dzVFVGQlRTeERRVUZETEVsQlFVbDZReXhQUVVGRkxFVkJRVTlwUXl4UFFVRkZMRVZCUVU5RExFVkJRVVZyUWl4TFFVRkxReXhKUVVGSmVFSXNSVUZCUlVjc1QwRkJUMFlzUlVGQlJVVXNVVUZCVVN4SlFVRkpha01zUlVGQlJTeEZRVUZGUVN4RlFVRkZiVU1zUlVGQlJXNURMRWxCUVVrc1EwRkJReXhKUVVGSmQwUXNSVUZCUlRGQ0xFVkJRVVU1UWl4SFFVRkhkVkFzUlVGQlJYaE9MRVZCUVVVdlFpeEhRVU42VWl4SFFVUTBVbmRFTEVkQlEyNW1RU3hGUVVGRmJVc3NZVUZCWVhST0xGTkJRVk56UkN4TFFVRkxaMVlzVVVGQlVWTXNXVUZCVHl4SlFVRlRibG9zUjBGQlJ6QkVMRXRCUVV0blZpeFJRVUZSVXl4UFFVRlBjRm9zU1VGQlNUaENMRVZCUVVWSExFOUJRVThzUjBGQlIyaERMRVZCUVVWMVJDeEZRVUZGUVN4UFFVRkZMRWRCUVZFclRDeEhRVUZIUVN4RlFVRkZOVUlzWVVGQllYUk9MRk5CUVZOelJDeExRVUZMWjFZc1VVRkJVVk1zV1VGQlR5eEpRVUZUYkZnc1IwRkJSM2xDTEV0QlFVdG5WaXhSUVVGUlV5eFBRVUZQY0Zvc1NVRkJTU3RDTEVWQlFVVkZMRTlCUVU4c1IwRkJSME1zUlVGQlJYRk9MRVZCUVVWQkxFOUJRVVVzU1VGQldUWkxMRXRCUVVzMGNFTXNVVUZCVVhGRkxHTkJRV00zYTBRc1JVRkJSU3RNTEVkQlFVY3NUMEZCVFN4RlFVRkhMRTlCUVU5MFVDeEpRVUZIYVVNc1NVRkJSMnBETEVWQlFVVkJMRWRCUVVjc1IwRkJSMmxETEVWQlFVVkJMRWRCUVVjc1IwRkJSMnRaTEV0QlFVczBjRU1zVVVGQlVYTkZMR3RDUVVGclFuSnZSQ3hGUVVGRmFVTXNTVUZCVHl4SFFVRkhTaXhGUVVGRk5rd3NZMEZCWTNST0xFOUJRVThzVDBGQlR5dGFMRXRCUVVzMGNFTXNVVUZCVVhORkxHdENRVUZyUW5odFJDeEZRVUZGUXl4SFFVRkhMRTFCUVUxcFJDeE5RVUZOTEN0Q1FVRm5RMjlXTEV0QlFVczBjRU1zVVVGQlVYcHBSQ3hWUVVGVloyNUVMR0ZCUVdFc1YwRkJWeXhQUVVGUGJuVkRMRXRCUVVzMGNFTXNVVUZCVVhWRkxHRkJRV0V4YkVRc1QwRkRNV2RDZFZnc1MwRkJTelJ3UXl4UlFVRlJlbWxFTEZWQlFWVTRTaXhOUVVGTkxGZEJRVmNzVDBGQlR5dFBMRXRCUVVzMGNFTXNVVUZCVVhWRkxHRkJRV0V4YkVRc1QwRkJUM1ZZTEV0QlFVczBjRU1zVVVGQlVUTTBReXhOUVVGTkxGTkJRVk4yU2l4SFFVRkhMRTlCUVU5eldTeExRVUZMTkhCRExGRkJRVkYxUlN4aFFVRmhlbTFFTEVsQlFVbHpXU3hMUVVGTE5IQkRMRkZCUVZGMVJTeGhRVUZoTEZOQlFWTjZiVVFzUjBGQlJ5eFBRVUZQTEVsQlFVbEJMRVZCUVVVMlRDeFpRVUZaZVUwc1MwRkJTelJ3UXl4UlFVRlJkMFVzVDBGQlR6RnRSQ3hGUVVGRk1HTXNZVUZEZWs5d1JTeExRVUZMTkhCRExGRkJRVkY1UlN4VFFVRlRMRk5CUVZNemJVUXNSVUZCUlVNc1IwRkJSelJDTEV0QlFVdG5WaXhSUVVGUmJVSXNhVUpCUVdsQ2FGa3NSVUZCUlhOWkxFdEJRVXMwY0VNc1UwRkJVM0puUkN4TFFVRkxaMVlzVVVGQlVXMUNMR2xDUVVGcFFpOVlMRVZCUVVWeFdTeExRVUZMTkhCRExGTkJRVk55WjBRc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5MFdDeEZRVUZGTmt3c1lVRkJZVFZNTEVWQlFVVTBUQ3haUVVGWkxEWkVRVUUyUkRkTUxFVkJRVVZ6V1N4TFFVRkxOSEJETEZGQlFWRXpORU1zVFVGQlRYWktMRWRCUVVjc1NVRkJTU3hKUVVGSk9VSXNSVUZCUlN0Q0xFVkJRVVY1WXl4VlFVRlZkbVVzUlVGQlJUWkNMRVZCUVVVd1l5eFZRVUZWZEdNc1JVRkJSV3hETEVWQlFVVnBReXhQUVVGUExFVkJRVVZETEVWQlFVVnFReXhGUVVGRlowTXNUMEZCVDBNc1NVRkJTV3hETEVWQlFVVnJReXhIUVVGSGFrTXNSVUZCUldsRExFZEJRVWRJTEVWQlFVVXJhVVFzVlVGQlZXaHFSQ3hGUVVGRloycEVMRlZCUVZVdmFVUXNSVUZCUlhOcVJDeHBRa0ZCYVVKMmFrUXNSVUZCUlhWcVJDeHJRa0ZETjFocWNrTXNTMEZCU3pSd1F5eFJRVUZSZDBVc1QwRkJUeXhUUVVGVE1XMUVMRWRCUVVjc1IwRkJSMWtzVFVGQlRUUklMRkZCUVZGNFNTeEhRVUZITEVOQlFVTXNTVUZCU1N4SlFVRkpReXhGUVVGRlZ5eE5RVUZOV2l4RlFVRkZSeXhSUVVGUmFrTXNSVUZCUlN4RlFVRkZRU3hGUVVGRk9FSXNSVUZCUlVjc1QwRkJUMnBETEVsQlFVa3NRMEZCUXl4SlFVRkpReXhGUVVGRk5rSXNSVUZCUlRsQ0xFZEJRVWNzVFVGQlRVTXNTVUZCU1RoQ0xFVkJRVVV2UWl4SFFVRkhMR2xDUVVGcFFrTXNSVUZCUlcxaExFdEJRVXMwY0VNc1VVRkJVWGRGTEU5QlFVODNhMFFzUzBGQlMyZFdMRkZCUVZGVExFOUJRVTl1V2l4SlFVRkpRU3hIUVVGSExFOUJRVTg0UWl4RlFVRkZMRWRCUVVkeFdTeExRVUZMTkhCRExGRkJRVkZOTEhOQ1FVRnpRbmhwUkN4aFFVRmhhWE5ETEZkQlFWY3NUMEZCVHl4SlFVRkpRU3hYUVVGWGFuTkRMRWRCUVZFc1NVRkJTVGxDTEV0QlFWUXJRaXhGUVVGRkxFZEJRVmxFTEVWQlFWTXNUMEZCVURkQ0xFVkJRVVUyUWl4RlFVRkZPVUlzVFVGQllTdENMRVZCUVVVdlFpeEhRVUZITEdsQ1FVRnBRa01zUlVGQlJXMWhMRXRCUVVzMGNFTXNVVUZCVVhkRkxFOUJRVTgzYTBRc1MwRkJTMmRXTEZGQlFWRlRMRTlCUVU5dVdpeEpRVUZKUVN4SFFVRkhMRTlCUVU4NFFpeEhRVUZIY1Zrc1MwRkJTelJ3UXl4UlFVRlJNRVVzYjBKQlFXOUNMRk5CUVZNMWJVUXNSVUZCUlVNc1IwRkJSMEVzUlVGQlJUUnRSQ3hWUVVGVk4yMUVMRWRCUVVkeldTeExRVUZMTkhCRExGRkJRVkUwUlN4eFFrRkJjVUlzUjBGRGFtWjRkVU1zUzBGQlN6UndReXhSUVVGUk5rVXNNa0pCUVRKQ0xFZEJRVWQ2ZFVNc1MwRkJTekIxUXl4UFFVRlBMRWRCUVVjemNFUXNVVUZCVVhOcFJDeEpRVUZKY201RExFdEJRVXR4YmtNc1NVRkJTWFJwUkN4UlFVRlJObXRFTEZGQlFWRTFjRU1zUzBGQlN6UndReXhSUVVGUk4ydEVMRkZCUVZGek1VTXNZVUZCWVhJMlFpeExRVUZMY1RaQ0xHRkJRV0YwTVVNc1VVRkJVVzA0UXl4aFFVRmhiR2hETEV0QlFVdHJhRU1zWVVGQllXNDRReXhSUVVGUksycEVMRzFDUVVGdFFqbHZReXhMUVVGTE9HOURMRzFDUVVGdFFpOXFSQ3hSUVVGUmNXdEVMSGxDUVVGNVFuQndReXhMUVVGTGIzQkRMSGxDUVVGNVFuSnJSQ3hSUVVGUmIwOHNZVUZCWVRWS0xFdEJRVXMwU2l4aFFVRmhjRThzVVVGQlVYTlBMRk5CUVZNNVNpeExRVUZMT0Vvc1UwRkJVM1JQTEZGQlFWRnJReXhQUVVGUExFTkJRVU15Vml4UFFVRlBjbFFzUzBGQlMzUkRMRTlCUVU4eVZpeFJRVUZSTjFnc1VVRkJVU3RMTEU5QlFVOTJSeXhMUVVGTGRVY3NVeXhyUmtNeFowSTNWemxMTEVWQlFVOUVMRkZCUVRKTExGTkJRVk1yUXl4SFFVRkhMRWxCUVVseVFpeEZRVUZGTEVkQlFVY3NVMEZCVTBvc1JVRkJSVmNzUjBGQlJ5eEhRVUZIVUN4RlFVRkZUeXhIUVVGSExFOUJRVTlRTEVWQlFVVlBMRWRCUVVkcVF5eFJRVUZSTEVsQlFVbHBRaXhGUVVGRlV5eEZRVUZGVHl4SFFVRkhMRU5CUVVONlFpeEZRVUZGZVVJc1JVRkJSWGhDTEVkQlFVVXNSVUZCUjFRc1VVRkJVU3hKUVVGSkxFOUJRVThyUXl4RlFVRkZaQ3hIUVVGSGRFSXNTMEZCUzAwc1JVRkJSV3BDTEZGQlFWRnBRaXhGUVVGRlFTeEZRVUZGYWtJc1VVRkJVWE5DTEVkQlFVZE1MRVZCUVVWU0xFZEJRVVVzUlVGQlIxRXNSVUZCUldwQ0xGRkJRVkVzVDBGQlQzTkNMRVZCUVVWV0xFVkJRVVZ0UXl4RlFVRkZla0lzUlVGQlJWUXNSVUZCUldFc1JVRkJSVW9zUlVGQlJWSXNSVUZCUlN4VFFVRlRhVU1zUlVGQlJYSkNMRVZCUVVWUExFZEJRVWRZTEVWQlFVVk1MRVZCUVVVNFFpeEZRVUZGY2tJc1NVRkJTVklzVDBGQlQwTXNaVUZCWlRSQ0xFVkJRVVZ5UWl4RlFVRkZMRU5CUVVOT0xGbEJRVmNzUlVGQlIwTXNTVUZCU1Zrc1MwRkJTMWdzUlVGQlJVRXNSVUZCUlN4VFFVRlRlVUlzUjBGQlJ5eHZRa0ZCYjBKNFFpeFJRVUZSUVN4UFFVRlBReXhoUVVGaFRpeFBRVUZQUXl4bFFVRmxORUlzUlVGQlJYaENMRTlCUVU5RExGbEJRVmtzUTBGQlEwTXNUVUZCVFN4WFFVRlhVQ3hQUVVGUFF5eGxRVUZsTkVJc1JVRkJSU3hoUVVGaExFTkJRVU4wUWl4UFFVRk5MRXRCUVUxSUxFVkJRVVZKTEVWQlFVVXNVMEZCVTNGQ0xFVkJRVVZ5UWl4SFFVRkhMRWRCUVVjc1JVRkJSVUVzU1VGQlNYRkNMRVZCUVVWNlFpeEZRVUZGZVVJc1NVRkJTU3hGUVVGRmNrSXNSVUZCUlN4UFFVRlBjVUlzUlVGQlJTeEhRVUZITEVWQlFVVnlRaXhIUVVGSExHbENRVUZwUW5GQ0xFZEJRVWRCTEVkQlFVZEJMRVZCUVVWdVFpeFhRVUZYTEU5QlFVOXRRaXhGUVVGRkxFbEJRVWxrTEVWQlFVVm1MRTlCUVU5WkxFOUJRVThzVFVGQlRTeEhRVUZIVWl4RlFVRkZRU3hGUVVGRlZ5eEhRVUZIWml4UFFVRlBReXhsUVVGbFl5eEZRVUZGTEZWQlFWVXNRMEZCUTJJc1dVRkJWeXhGUVVGSFN5eE5RVUZOYzBJc1NVRkJTU3hGUVVGRmNrSXNSMEZCUnl4cFFrRkJhVUp4UWl4RlFVRkZMRWxCUVVrc1NVRkJTVGxDTEV0QlFVczRRaXhGUVVGRmVrSXNSVUZCUlZJc1JVRkJSVzFDTEVWQlFVVm9RaXhGUVVGRkxGTkJRVk5UTEVkQlFVY3NUMEZCVDNGQ0xFVkJRVVZ5UWl4SlFVRkpUU3hMUVVGTExFdEJRVXRtTEVsQlFVa3NUMEZCVDJkQ0xFZEJRVWRZTEVWQlFVVlhMRVZCUVVVc1UwRkJVMk1zUjBGQlJ5eEpRVUZKY2tJc1JVRkJSWEZDTEVkQlFVZEJMRVZCUVVWdVFpeFhRVUZYTEZkQlFWY3NUMEZCVDIxQ0xFVkJRVVUyYlVRc1UwRkJVeXhYUVVGWExFOUJRVTgzYlVRc1IwRkJSeXhQUVVGUGVrSXNSVUZCUlZJc1JVRkJSVmtzUlVGQlJTeEpRVUZKUVN4SFFVRkhRU3hIUVVGSFNpeEZRVUZGVEN4RlFVRkZMRk5CUVZNNFFpeEZRVUZGY2tJc1IwRkJSeXhQUVVGUFVpeFBRVUZQYTBJc1ZVRkJWVU1zWlVGQlpURkNMRXRCUVV0dlF5eEZRVUZGY2tJc1NVRkJTVW9zUlVGQlJXZENMRVZCUVVVc1IwRkJSMmhDTEVWQlFVVkJMRVZCUVVWcFFpeEZRVUZGTEVsQlFXbzFRaXhEUVVGek5VSXNRMEZCUXl4VFFVRlRVU3hGUVVGRmNrSXNSVUZCUlVvc1IwRkJSeXhoUVVGaFNpeFBRVUZQUXl4bFFVRmxUeXhGUVVGRkxHRkJRV0VzUTBGQlEwUXNUMEZCVFN4SlFVRkxMRWxCUVVsUkxFVkJRVVZZTEVWQlFVVXNSMEZCUjBrc1JVRkJSVzF2UkN4VFFVRlROVzVFTEVWQlFVVTJia1FzWjBKQlFXZENMRk5CUVZNdmJVUXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NZVUZCWVVvc1QwRkJUME1zWlVGQlpVOHNSVUZCUlN4aFFVRmhMRU5CUVVORUxFOUJRVTBzU1VGQlMwTXNSVUZCUlRSWExFMUJRVTBzVjBGQlZ5eEpRVUZKTEVsQlFVbDJWaXhGUVVGRkxFZEJRVWR5UWl4RlFVRkZMRVZCUVVWQkxFVkJRVVV5U3l4VlFVRlZka29zVDBGQlQzQkNMRWxCUVVseFFpeEZRVUZGY2tJc1IwRkJSekpMTEZWQlFWVXpTeXhIUVVGSE5FY3NVVUZCVVdkUkxFMUJRVTFvVVN4UlFVRlJaMUVzVFVGQlRXeE5MRTFCUVUwc1MwRkJTM0pLTEVkQlFVZDFSaXhSUVVGUmFXNURMRWxCUVVsdWFrTXNUVUZCVFN4TFFVRkxja29zUzBGQlN5eFRRVUZUUVN4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhTaXhQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFJMRVZCUVVWWUxFVkJRVVVzUjBGQlIwd3NSVUZCUlVzc1JVRkJSU3hIUVVGSGFVSXNSVUZCUldwQ0xFVkJRVVVzUjBGQlIyUXNSVUZCUldNc1JVRkJSU3hIUVVGSGNVSXNSVUZCUlhKQ0xFVkJRVVVzUjBGQlIzbHZSQ3hGUVVGRmVtOUVMRVZCUVVVc1NVRkJTVWtzUlVGQlJYTnZSQ3hQUVVGUExGTkJRVk5xYmtRc1JVRkJSWEpDTEVkQlFVY3NUMEZCVHl4SlFVRkpXaXhGUVVGRmFVTXNSVUZCUlhKQ0xFbEJRVWtzU1VGQlNWb3NSVUZCUlN4WFFVRlhMRk5CUVZOcFF5eEZRVUZGUVN4RlFVRkZja0lzUjBGQlIyZERMRXRCUVV0MWJVUXNVMEZCVVN4RlFVRkhkbTFFTEV0QlFVdDNiVVFzYTBKQlFXbENMRVZCUVVkNGJVUXNTMEZCUzNsdFJDeFhRVUZWTEVWQlFVZDZiVVFzUzBGQlN6QnRSQ3hSUVVGUExFVkJRVWN4YlVRc1MwRkJTekp0UkN4cFFrRkJaMElzUlVGQlJ6TnRSQ3hMUVVGTE5HMUVMRzFDUVVGdFFpeEhRVUZITlcxRUxFdEJRVXMyYlVRc2JVSkJRVzFDTEVkQlFVYzNiVVFzUzBGQlN6aHRSQ3hsUVVGbExFZEJRVWM1YlVRc1MwRkJTeXR0UkN4UFFVRlBMRWxCUVVsNGNFUXNSVUZCUlhsd1JDeFpRVUZaYUc1RUxFdEJRVXRwYmtRc2FVSkJRV2xDTlc1RUxFVkJRVVZYTEV0QlFVdHJia1FzVFVGQlRXeHdSQ3hGUVVGRlowTXNTMEZCUzIxdVJDeHJRa0ZCYTBJc1QwRkJUemx1UkN4RlFVRkZXQ3hWUVVGVmVXOUVMR2RDUVVGblFpeFhRVUZYTEVsQlFVazVia1FzUlVGQlJWY3NTMEZCUzJ0dVJDeE5RVUZOUlN4TFFVRkxMRWxCUVVsd2JrUXNTMEZCUzJsdVJDeHBRa0ZCYVVKSkxGRkJRVkZETEZsQlFWa3NTVUZCU1hSdVJDeExRVUZMYVc1RUxHbENRVUZwUWswc1YwRkJWM1p3UkN4RlFVRkZMRU5CUVVOcGNFUXNhVUpCUVdsQ2FtNUVMRXRCUVV0cGJrUXNhVUpCUVdsQ2NubERMRTFCUVUwMVZTeExRVUZMYTI1RUxFMUJRVTEwZVVNc1VVRkJUeXhGUVVGSGRWZ3NTVUZCU1RselFpeEZRVUZGYlc5RUxGVkJRVlY0YmtRc1MwRkJTM2x1UkN4dFFrRkJiVUp1Y0VRc1MwRkJTekJDTEUxQlFVMHdia1FzVVVGQlVURnVSQ3hMUVVGTE1tNUVMR2xDUVVGcFFuSndSQ3hMUVVGTE1FSXNUVUZCVFRSdVJDeE5RVUZOTlc1RUxFdEJRVXMyYmtRc1pVRkJaWFp3UkN4TFFVRkxNRUlzVDBGQlQwRXNTMEZCUzJ0dVJDeE5RVUZOV1N4VlFVRlZPVzVFTEV0QlFVczRia1FzVlVGQlZUbHVSQ3hMUVVGTGEyNUVMRTFCUVUxWkxGVkJRVlU1Y0VRc1IwRkJSMmRETEV0QlFVczRia1FzVlVGQlZUZHZSQ3hGUVVGRk9HOUVMSEZDUVVGeFFpOXdSQ3hKUVVGSmNVSXNSVUZCUlZnc1ZVRkJWU3R2UkN4dFFrRkJiVUlzVTBGQlUzQnZSQ3hGUVVGRmNrSXNSMEZCUnl4SFFVRkhaME1zUzBGQlMydHVSQ3hOUVVGTmRIbERMRTlCUVU4NVdDeEZRVUZGT0Znc1RVRkJUU3haUVVGWmRsWXNSVUZCUlhKQ0xFZEJRVWRuUXl4TFFVRkxNRzFFTEU5QlFVOHhiVVFzUzBGQlMydHVSQ3hOUVVGTmRIbERMRTlCUVU4NVdDeEZRVUZGT0Znc1RVRkJUU3h2UlVGQmIwVXNSMEZCUnl4SlFVRkpOVmNzVDBGQlR5eERRVUZEWjBNc1MwRkJTMmR2UkN4blFrRkJaMEl6YjBRc1JVRkJSVmNzUzBGQlMydHVSQ3hOUVVGTmRIbERMRTlCUVU4NVdDeEZRVUZGT0Znc1RVRkJUU3cwUWtGQk5FSjZUaXhMUVVGTFF5eFZRVUZWY0Vnc1MwRkJTMmR2UkN4blFrRkJaMElzUzBGQlN5eEpRVUZKTEVsQlFVbHdjVVFzUlVGQlJWUXNSVUZCUld0RExFZEJRVWRYTEV0QlFVdHJia1FzVFVGQlRYUjVReXhQUVVGUE9WZ3NSVUZCUlRoWUxFMUJRVTBzZFVKQlFYVkNhRmdzUjBGQlJ5eEpRVUZKVnl4RlFVRkZXQ3hIUVVGSFFTeEhRVUZITEVWQlFVVkJMRVZCUVVWcFFpeEZRVUZGYjNCRUxHbENRVUZwUW1weFJDeEhRVUZIWjBNc1MwRkJTMnR1UkN4TlFVRk5kSGxETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN4cFFrRkJhVUp5Vnl4SFFVRkhMRWxCUVVsb1FpeEZRVUZGT0VJc1JVRkJSVEZDTEVsQlFVa3NhVUpCUVdsQ0xFZEJRVWNzUjBGQlIzRkRMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNkMEpCUVhkQ2NsZ3NSMEZCUjNsRExFdEJRVXRyYjBRc1lVRkJZVGR2UkN4SFFVRkhaQ3hKUVVGSlRTeEZRVUZGYzNCRUxFdEJRVXRETEVkQlFVY3NRMEZCUXl4SlFVRkpibkJFTEVWQlFVVmxMRXRCUVV0eGIwUXNhVUpCUVdsQ09YRkVMRVZCUVVVc1NVRkJTWGxETEV0QlFVdHpiMFFzVjBGQlZ5OXdSQ3hGUVVGRlZTeEZRVUZGU1N4TlFVRk5RU3hGUVVGRldDeFZRVUZWYVhCRUxHbENRVUZwUWl4VFFVRlRkRzlFTEVkQlFVY3NTVUZCU1hKQ0xFVkJRVVZuUXl4TFFVRkxMRWRCUVVkQkxFdEJRVXN3YlVRc1QwRkJUekZ0UkN4TFFVRkxhMjVFTEUxQlFVMTBlVU1zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEdsRlFVRnBSU3hEUVVGRExFbEJRVWxvV0N4RlFVRkZMRWRCUVVjc1NVRkJTVUVzUlVGQlJXOURMRXRCUVVzcmJVUXNUMEZCVDNkQ0xFMUJRVTFzY0VRc1IwRkJSeXhOUVVGTlFTeEhRVUZITEU5QlFVOVhMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNkMEpCUVhkQ2RsWXNSVUZCUlVFc1JVRkJSV3RVTEdOQlFXTjJVeXhMUVVGTGMyOUVMRmRCUVZkNmNFUXNSVUZCUlhOd1JDeExRVUZMU3l4VFFVRlRMR3RDUVVGclFtNXdSQ3hGUVVGRmExUXNVMEZCVXpOVkxFVkJRVVUyVlN4VFFVRlJMRk5CUVZOd1ZDeEhRVUZITEVkQlFVZEJMRVZCUVVWdmNFUXNXVUZCV1d4eVJDeEZRVUZGYlhKRUxGVkJRVlZ1ZDBNc1VVRkJVU3hEUVVGRExFbEJRVWt6WVN4RlFVRkZTU3hGUVVGRmFYQkVMR2xDUVVGcFFqQkNMR0ZCUVdGMlNTeHJRa0ZCYTBJdlowUXNSVUZCUlNzMlFpeE5RVUZOY0RoQ0xFVkJRVVUwY1VRc1lVRkJZV2h5UkN4UlFVRlJlVUlzUlVGQlJXOXdSQ3haUVVGWmJISkVMRVZCUVVWdGNrUXNWVUZCVlVjc1YwRkJWemR4UkN4RlFVRkZaM0ZFTEdsQ1FVRnBRbWh4UkN4RlFVRkZPSEZFTEdsQ1FVRnBRaXhKUVVGSmRuRkVMRVZCUVVVMGJrUXNVMEZCVXpsdFJDeEZRVUZGTUhCRUxGVkJRVlV2Y1VRc1JVRkJSV3R3UkN4TlFVRk5kSGxETEU5QlFVODVXQ3hGUVVGRk9GZ3NUVUZCVFN4dFFrRkJiVUkxVnl4RlFVRkZPSEZFTEc5Q1FVRnZRamx4UkN4RlFVRkZaM0ZFTEdkQ1FVRm5RaXhKUVVGSmVuQkVMRVZCUVVVMGJrUXNVMEZCVXpsdFJDeEZRVUZGTUhCRUxGVkJRVlV2Y1VRc1JVRkJSV3R4UkN4aFFVRmhiSEZFTEVWQlFVVm5jVVFzZDBKQlFYVkNNMjlFTEVWQlFVVllMRlZCUVZWdGNFUXNaVUZCWlN4WFFVRlhMRWRCUVVjM2JrUXNTMEZCUzJ0dVJDeE5RVUZOZEhsRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTeGpRVUZqTlZVc1MwRkJTekJ0UkN4UFFVRlBNVzFFTEV0QlFVdHJia1FzVFVGQlRYUjVReXhQUVVGUE9WZ3NSVUZCUlRoWUxFMUJRVTBzWjBWQlFXZEZMRkZCUVVjc1NVRkJVelZWTEV0QlFVczRiMFFzYVVKQlFXbENMRU5CUVVNc1NVRkJTWHB3UkN4RlFVRkZiRU1zUlVGQlJUWkRMRXRCUVVzNGIwUXNhMEpCUVd0Q0xFZEJRVWNzVDBGQlQzcHdSQ3hGUVVGRkxFTkJRVU1zU1VGQlNYSkNMRVZCUVVWblF5eExRVUZMT0c5RUxHbENRVUZwUW01eVJDeEpRVUZKTEdkQ1FVRm5Ra01zUlVGQlJXOURMRXRCUVV0eGIwUXNhVUpCUVdsQ2NuRkVMRVZCUVVVc1NVRkJTV2RETEV0QlFVdG5jRVFzVTBGQlV6TndSQ3hGUVVGRmVrSXNSVUZCUlc5RExFdEJRVXM0YjBRc2RVSkJRWFZDT1c5RUxFdEJRVXR6YjBRc1YwRkJWM3B3UkN4RlFVRkZjM0JFTEV0QlFVdExMRk5CUVZNc0swUkJRU3RFTEVOQlFVTXNVVUZCUnl4SlFVRlRlRzlFTEV0QlFVdG5iMFFzWjBKQlFXZENMRmxCUVZsb2IwUXNTMEZCUzNOdlJDeFhRVUZYZW5CRUxFVkJRVVZ6Y0VRc1MwRkJTMk1zVVVGQlVTeHRRMEZCYlVNc1NVRkJTVEZ4UkN4RlFVRkZjRUlzUlVGQlJUWkRMRXRCUVV0bmIwUXNhVUpCUVdsQ2VuRkVMRVZCUVVWNVF5eExRVUZMWjI5RUxHZENRVUZuUW5KeFJDeEpRVUZKTEdkQ1FVRm5RaXhIUVVGSGNVTXNTMEZCUzJ0dVJDeE5RVUZOZEhsRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTdzRRa0ZCT0VKeVZ5eEZRVUZGYUVJc1IwRkJSeXhQUVVGUFowSXNSVUZCUlN4WlFVRlplVUlzUzBGQlMyZHdSQ3hUUVVGVGJuRkVMRVZCUVVWemNFUXNTMEZCUzJNc1VVRkJVU3h4UkVGQmNVUnFjRVFzUzBGQlMyZHZSQ3hwUWtGQmFVSXNTVUZCU1M5dlJDeEZRVUZGWlN4TFFVRkxjVzlFTEdsQ1FVRnBRamx4UkN4RlFVRkZMRWxCUVVsNVF5eExRVUZMWjNCRUxGTkJRVk42Y1VRc1JVRkJSVlVzUlVGQlJXVXNTMEZCUzJkdlJDeHRRa0ZCYlVJemIwUXNSVUZCUlZnc1ZVRkJWVEp3UkN4cFFrRkJhVUlzVTBGQlUyaHdSQ3hIUVVGSExFbEJRVWxCTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrc1QwRkJUM2t4UWl4dFFrRkJiVUo2TVVJc1IwRkJSeXhOUVVGTmNrSXNSMEZCUnl4UFFVRlBjVUlzU1VGQlNVRXNSVUZCUlZnc1ZVRkJWWE54UkN4VFFVRlRMRk5CUVZNemNFUXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NTVUZCU1Zjc1JVRkJSWGxDTEV0QlFVdEJMRXRCUVV0cmJrUXNUVUZCVFhSNVF5eFBRVUZQT1Znc1JVRkJSVGhZTEUxQlFVMHNWMEZCVjNaV0xFVkJRVVZ5UWl4RlFVRkZTaXhIUVVGSGIwTXNTMEZCUzNsdFJDeFpRVUZaZW0xRUxFdEJRVXQ1YlVRc1YwRkJWU3hGUVVGSGVtMUVMRXRCUVVzNGJVUXNaVUZCWlhJd1F5eFRRVUZSTEZOQlFWTnNWaXhIUVVGSExFbEJRVWxuUWl4RlFVRkZiVzlFTEU5QlFVOHNTVUZCU1c1d1JDeEZRVUZGT0VJc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1RVRkJUWGxDTEVkQlFVY3lUeXhaUVVGWExGZEJRVmNzVFVGQlRUTlBMRmRCUVZOQkxFVkJRVVZZTEZWQlFWVjNjRVFzWVVGQllTeFRRVUZUTjI5RUxFZEJRVWRYTEV0QlFVdHJia1FzVFVGQlRYUjVReXhQUVVGUE9WZ3NSVUZCUlRoWUxFMUJRVTBzWlVGQlpYWldMRWRCUVVkWExFdEJRVXQ1YlVRc1YwRkJWM3B0UkN4TFFVRkxORzFFTEcxQ1FVRnRRbTR3UXl4VFFVRlJMRk5CUVZONlZTeEhRVUZITEVsQlFVbEJMRVZCUVVWeFFpeEhRVUZITEUxQlFVMUJMRWRCUVVjeVR5eFpRVUZYTEZkQlFWY3NUVUZCVFROUExGVkJRVkZCTEVWQlFVVllMRlZCUVZVMGNFUXNWMEZCVnl4VFFVRlRhbkJFTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEVsQlFVbE1MRVZCUVVWNVF5eFZRVUZMTEVsQlFWTndReXhKUVVGSlFTeEZRVUZGTEVsQlFVbFhMRVZCUVVVMGJrUXNWVUZCVlc1dFJDeExRVUZMYTI1RUxFMUJRVTEwZVVNc1QwRkJUemxZTEVWQlFVVTRXQ3hOUVVGTkxHRkJRV0YyVml4RlFVRkZja0lzUjBGQlIyZERMRXRCUVV0NWJVUXNXVUZCV1hwdFJDeExRVUZMZVcxRUxGZEJRVlVzUlVGQlIzcHRSQ3hMUVVGTE9HMUVMR1ZCUVdWeU1FTXNVMEZCVVN4VFFVRlRiRlVzUjBGQlJ5eEpRVUZKYUVJc1JVRkJSVzF3UkN4UFFVRlBMRWxCUVVsdWIwUXNSVUZCUldNc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1RVRkJUWGxDTEVkQlFVY3lUeXhaUVVGWExGZEJRVmNzVFVGQlRUTlBMRmRCUVZOQkxFVkJRVVZZTEZWQlFWVnJjVVFzWVVGQllTeFRRVUZUZG5CRUxFZEJRVWNzU1VGQlNYSkNMRVZCUVVWblF5eExRVUZMUVN4TFFVRkxhMjVFTEUxQlFVMTBlVU1zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEdWQlFXVjJWaXhGUVVGRmQyUXNXVUZCV1RkakxFdEJRVXQ1YlVRc1YwRkJWM3B0UkN4TFFVRkxNRzFFTEZGQlFWRXhiVVFzUzBGQlN6WnRSQ3h0UWtGQmJVSndNRU1zVTBGQlVTeFRRVUZUTjFVc1IwRkJSeXhKUVVGSlNTeEZRVUZGTUc5RUxFOUJRVThzU1VGQlNUbHZSQ3hGUVVGRmVVSXNSMEZCUnl4TlFVRk5RU3hIUVVGSE1rOHNXVUZCVnl4WFFVRlhMRTFCUVUwelR5eFZRVUZSUVN4RlFVRkZXQ3hWUVVGVk9HOUVMRlZCUVZVc1UwRkJVMjV2UkN4SFFVRkhWeXhMUVVGTE5HMUVMRzFDUVVGdFFqRTVReXhMUVVGTE4wb3NTVUZCU1VFc1JVRkJSVmdzVlVGQlZYZHhSQ3hWUVVGVkxGTkJRVk0zY0VRc1IwRkJSMWNzUzBGQlN6WnRSQ3h0UWtGQmJVSXpPVU1zUzBGQlN6ZEtMRWxCUVVsQkxFVkJRVVZZTEZWQlFWVnJjRVFzVFVGQlRTeFRRVUZUZG05RUxFZEJRVWRYTEV0QlFVczRiVVFzWlVGQlpUVTVReXhMUVVGTE4wb3NTVUZCU1VFc1JVRkJSVmdzVlVGQlZYbHhSQ3hOUVVGTkxGTkJRVk01Y0VRc1IwRkJSeXhIUVVGSFZ5eExRVUZMZFcxRUxGRkJRVkVzVFVGQlRTeEpRVUZKY0d0RUxFMUJRVTBzTkVOQlFUUkRia01zUzBGQlMzVnRSQ3hUUVVGUkxFVkJRVWNzU1VGQlNYWnZSQ3hGUVVGRkxFbEJRVWxQTEVWQlFVVTBia1FzVTBGQlV6bHRSQ3hIUVVGSExFbEJRVWx5UWl4RlFVRkZORllzU1VGQlNTeGxRVUZsTERoQ1FVRTRRalZXTEVWQlFVVTBWaXhKUVVGSkxHRkJRV0VzUzBGQlN6VlVMRXRCUVVzNGJrUXNWVUZCVlhGQ0xFMUJRVTF1Y2tRc1NVRkJTWEZDTEVWQlFVVllMRlZCUVZWdFNTeExRVUZMTEZOQlFWTjRTQ3hIUVVGSExFbEJRVWxYTEV0QlFVdDFiVVFzVVVGQlVTeE5RVUZOTEVsQlFVbHdhMFFzVFVGQlRTd3JSRUZCSzBRc1IwRkJSMjVETEV0QlFVc3diVVFzVDBGQlR5eE5RVUZOTEVsQlFVbDJhMFFzVFVGQlRTd3dRMEZCTUVNc1IwRkJSMjVETEV0QlFVc3liVVFzWjBKQlFXZENMRTFCUVUwc1NVRkJTWGhyUkN4TlFVRk5MRzlFUVVGdlJDeEpRVUZKYmtNc1MwRkJTMmx1UkN4cFFrRkJhVUp0UXl4bFFVRmxjSEJFTEV0QlFVdDNiVVFzYVVKQlFXbENMRTFCUVUwc1NVRkJTWEpyUkN4TlFVRk5MSGxGUVVGNVJXNURMRXRCUVV0M2JVUXNhMEpCUVdsQ0xFVkJRVWNzU1VGQlNYaHZSQ3hGUVVGRmNXOUVMRVZCUVVWblJDeGhRVUZoYUhGRUxFZEJRVWRYTEV0QlFVczRia1FzVlVGQlZYZENMRmxCUVZsMGNrUXNTVUZCU1hGQ0xFVkJRVVZZTEZWQlFWVTJjVVFzVjBGQlZ5eFhRVUZYTEVsQlFVbDJjRVFzUzBGQlMzVnRSQ3hSUVVGUkxFMUJRVTBzU1VGQlNYQnJSQ3hOUVVGTkxIRkZRVUZ4UlN4SFFVRkhia01zUzBGQlN6QnRSQ3hQUVVGUExFMUJRVTBzU1VGQlNYWnJSQ3hOUVVGTkxEQkRRVUV3UXl4SFFVRkhia01zUzBGQlN6SnRSQ3huUWtGQlowSXNUVUZCVFN4SlFVRkplR3RFTEUxQlFVMHNNRVJCUVRCRWJrTXNTMEZCU3pKdFJDeHBRa0ZCWjBJc1JVRkJSek50UkN4TFFVRkxPRzVFTEZWQlFWVjVRaXhqUVVGamJIRkVMRVZCUVVWWUxGVkJRVlU0Y1VRc1RVRkJUU3hYUVVGWExFbEJRVWw0Y0VRc1MwRkJTM1Z0UkN4UlFVRlJMRTFCUVUwc1NVRkJTWEJyUkN4TlFVRk5MR2RGUVVGblJTeEhRVUZIYmtNc1MwRkJTekJ0UkN4UFFVRlBMRTFCUVUwc1NVRkJTWFpyUkN4TlFVRk5MREpEUVVFeVEyNURMRXRCUVVzd2JVUXNVVUZCVHl4RlFVRkhNVzFFTEV0QlFVdHJia1FzVFVGQlRYUjVReXhQUVVGUE9WZ3NSVUZCUlRoWUxFMUJRVTBzYTBOQlFXdEROVlVzUzBGQlN6aHVSQ3hWUVVGVk1rSXNWVUZCVlhCeFJDeEZRVUZxYjB3c1IwRkJjMjlNTEZOQlFWTnNReXhGUVVGRmEwTXNSMEZCUnl4SlFVRkpja0lzUlVGQlJYRkNMRVZCUVVVeFFpeEpRVUZKTEdkQ1FVRm5RaXhIUVVGSExFZEJRVWRMTEVWQlFVVnZRaXhQUVVGUExFVkJRVVVzU1VGQlNTeEpRVUZKZUVJc1JVRkJSVWtzUlVGQlJTeEhRVUZITEU5QlFVOHJaaXhUUVVGVGJtZENMRVZCUVVVc1NVRkJTU3hOUVVGTmVVSXNSMEZCUnl4UFFVRlBMRXRCUVVzc1QwRkJUeXhQUVVGUExGTkJRVk5CTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEVsQlFVbFhMRVZCUVVWQkxFVkJRVVVzVjBGQlZ5eFBRVUZQTEZOQlFWTmpMRWRCUVVjc1NVRkJTWEpDTEVWQlFVVXNSMEZCUnl4VFFVRlRTaXhGUVVGRlZ5eEhRVUZITEVkQlFVZFFMRVZCUVVWUExFZEJRVWNzVDBGQlQxQXNSVUZCUlU4c1IwRkJSMnBETEZGQlFWRXNTVUZCU1dsQ0xFVkJRVVZUTEVWQlFVVlBMRWRCUVVjc1EwRkJRM3BDTEVWQlFVVjVRaXhGUVVGRmVFSXNSMEZCUlN4RlFVRkhWQ3hSUVVGUkxFbEJRVWtzVDBGQlR5dERMRVZCUVVWa0xFZEJRVWQwUWl4TFFVRkxUU3hGUVVGRmFrSXNVVUZCVVdsQ0xFVkJRVVZCTEVWQlFVVnFRaXhSUVVGUmMwSXNSMEZCUjB3c1JVRkJSVklzUjBGQlJTeEZRVUZIVVN4RlFVRkZha0lzVVVGQlVTeFBRVUZQYzBJc1JVRkJSVllzUlVGQlJXMURMRVZCUVVWNlFpeEZRVUZGVkN4RlFVRkZZU3hGUVVGRlNpeEZRVUZGWkN4RlFVRkZMRk5CUVZOMVF5eEhRVUZITEU5QlFVOUJMRWRCUVVkNlFpeEZRVUZGVWl4RlFVRkZMRk5CUVZOcFF5eEZRVUZGY2tJc1JVRkJSVThzUjBGQlIxZ3NSVUZCUlV3c1JVRkJSVGhDTEVWQlFVVnlRaXhKUVVGSlVpeFBRVUZQUXl4bFFVRmxORUlzUlVGQlJYSkNMRVZCUVVVc1EwRkJRMjFETEdOQlFXRXNSVUZCUjNwRExGbEJRVmNzUlVGQlIwTXNTVUZCU1Zrc1MwRkJTMWdzUlVGQlJWY3NSVUZCUlN4VFFVRlRZeXhIUVVGSExFbEJRVWx5UWl4RlFVRkZjVUlzUjBGQlIwRXNSVUZCUlc1Q0xGZEJRVmNzVjBGQlZ5eFBRVUZQYlVJc1JVRkJSVFp0UkN4VFFVRlRMRmRCUVZjc1QwRkJUemR0UkN4SFFVRkhMRTlCUVU5NlFpeEZRVUZGVWl4RlFVRkZXU3hGUVVGRkxFbEJRVWxCTEVkQlFVZEJMRWRCUVVkS0xFVkJRVVZNTEVWQlFVVXNVMEZCVXpoQ0xFVkJRVVZ5UWl4SFFVRkhMRTlCUVU5U0xFOUJRVTlyUWl4VlFVRlZReXhsUVVGbE1VSXNTMEZCUzI5RExFVkJRVVZ5UWl4SlFVRkpTaXhGUVVGRlowSXNSVUZCUlN4SFFVRkhhRUlzUlVGQlJVRXNSVUZCUldsQ0xFVkJRVVVzUjBGQmVHVXNRMEZCTkdVc1EwRkJReXhUUVVGVFVTeEZRVUZGY2tJc1JVRkJSVW9zUjBGQlJ5eGhRVUZoU2l4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxSTEVWQlFVVllMRVZCUVVVc1IwRkJUMHdzUlVGQlJTeFhRVUZYTEZOQlFWTTRRaXhGUVVGRlFTeEZRVUZGY2tJc1VVRkJSeXhKUVVGVGNVSXNTVUZCU1VFc1JVRkJSU3hUUVVGSkxFbEJRVk55UWl4SlFVRkpRU3hGUVVGRkxFTkJRVU13Y2tRc1lVRkJXU3hKUVVGTExFbEJRVWs1Y2tRc1JVRkJSVXdzUlVGQlJYbERMRXRCUVZGQkxFdEJRVXN5Y0VRc1YwRkJWeXhIUVVGSGRIRkVMRWxCUVVzc2IwSkJRVzlDZFhGRUxGTkJRVk4yY1VRc1lVRkJZWFZ4UkN4UlFVRlJjbkpFTEVWQlFVVnpja1FzWTBGQlkzaHhSQ3hIUVVGSGIxUXNVMEZCVVN4VFFVRlROMVVzUjBGQlIxY3NSVUZCUlhWeVJDeG5Ra0ZCWjBKNmNVUXNSVUZCUlhwQ0xFZEJRVWMyVlN4VFFVRlJMRk5CUVZOd1ZDeEhRVUZIY2tJc1JVRkJSVEJ5UkN4WlFVRlpibk5FTEVWQlFVVjNjMFFzVDBGQlQyNXpSQ3hGUVVGRlZ5eEZRVUZGZVhKRUxHbENRVUZwUWpOeFJDeEpRVUZKT1VJc1JVRkJSWGR6UkN4UFFVRlBibk5FTEVWQlFVVjVRaXhUUVVGbExHbENRVUZwUW5wQ0xFVkJRVVY1UWl4SlFVRkpMR2xDUVVGcFFucENMRVZCUVVVcmNrUXNXVUZCV1N4dFFrRkJiVUl2Y2tRc1JVRkJSVFpWTEZGQlFWRndWQ3hGUVVGRmIxUXNVMEZCVVN4VFFVRlRjRlFzUlVGQlJYSkNMRWRCUVVkVUxFVkJRVVYzYzBRc1QwRkJUekZ4UkN4RlFVRkZja0lzVFVGQllTeHZRa0ZCYjBJMFowUXNTMEZCUzNZdlF5eGhRVUZoZFM5RExFbEJRVXQyTDBNc1JVRkJSVzlVTEZOQlFWRXNVMEZCVTNCVUxFVkJRVVZ5UWl4SFFVRkhWQ3hGUVVGRmQzTkVMRTlCUVU4dmNrUXNSVUZCUlhGQ0xFMUJRVk1zYVVKQlFXbENRU3hGUVVGRlZ5eExRVUZMYVhGRUxHbENRVUZwUWpWeFJDeEhRVUZITEdsQ1FVRnBRa0VzUjBGQlJ6ZENMRTlCUVU5cldDeHZRa0ZCYjBKeVZpeEhRVUZIYjFRc1UwRkJVU3hUUVVGVGVsVXNSMEZCUnl4SlFVRkpTaXhGUVVGRmVVSXNSVUZCUlhKQ0xFZEJRVWMyUWl4TlFVRk5ORWdzVVVGQlVUZEtMRWRCUVVkQkxFVkJRVVUyVlN4VFFVRlJMRk5CUVZOd1ZDeEhRVUZIT1VJc1JVRkJSWGR6UkN4UFFVRlBMM0pFTEVWQlFVVnhRaXhOUVVGTE9VSXNSVUZCUlhkelJDeFBRVUZQTDNKRUxFVkJRVVZLTEU5QlFVc3NUMEZCVDNsQ0xFVkJRVVZZTEZWQlFWVjFja1FzYVVKQlFXbENMRk5CUVZNMWNVUXNSMEZCUnl4SlFVRkpMRWxCUVVseVFpeEZRVUZGY1VJc1JVRkJSV0VzVFVGQlRTeFJRVUZSZEVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGU1N4RlFVRkZiMElzVDBGQlQzaENMRWxCUVVrc1EwRkJReXhKUVVGSlZ5eEZRVUZGVUN4RlFVRkZTaXhIUVVGSFRDeEZRVUZGWjBJc1JVRkJSWGxMTEZGQlFWRXNTMEZCU3l4SFFVRkhla3dzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1hOQ0xFVkJRVVZPTEVWQlFVVm5SU3hWUVVGVkxFVkJRVVZvUml4SFFVRkhOREZDTEU5QlFVOXlNa0lzUlVGQlJYbENMRVZCUVVWblJTeFZRVUZWYUVZc1JVRkJSU3hIUVVGSE5ERkNMRTlCUVU5dWVrSXNTMEZCU3l0d1JDeFBRVUZQYkhKRUxFVkJRVVV2UWl4TlFVRk5kVU1zUlVGQlJWZ3NWVUZCVlhkeVJDeFBRVUZQTEZOQlFWTTNjVVFzUlVGQlJYSkNMRWRCUVVjc1NVRkJTVW9zUlVGQlJWY3NSVUZCUlRSeVJDeGpRVUZqT1hGRUxFZEJRVWNzVVVGQlJ5eEpRVUZUY2tJc1UwRkJVMmRETEV0QlFVc3ljRVFzVjBGQlZ5OXlSQ3hQUVVGUExFTkJRVU1zU1VGQlNVd3NSVUZCUlhsRExFdEJRVXN5Y0VRc1YwRkJWeTl5UkN4SFFVRkhMRWRCUVVkTUxFVkJRVVVzUTBGQlF5eEpRVUZKYzBJc1JVRkJSWFJDTEVWQlFVVjVUQ3hSUVVGUmFFd3NSMEZCUjJFc1IwRkJSeXhIUVVGSGRFSXNSVUZCUldkS0xFOUJRVTh4U0N4RlFVRkZMRWRCUVVjc1NVRkJTWFJDTEVWQlFVVTJRaXhsUVVGbFdTeExRVUZMTW5CRUxGZEJRVmN2Y2tRc1RVRkJUWGxDTEVWQlFVVllMRlZCUVZWeGNrUXNUMEZCVHl4VFFVRlRNWEZFTEVWQlFVVnlRaXhIUVVGSExFbEJRVWxLTEVWQlFVVnZReXhMUVVGTGVrTXNSVUZCUldkQ0xFVkJRVVUwY2tRc1kwRkJZemx4UkN4SFFVRkhVU3hOUVVGTk5FZ3NVVUZCVVhwSUxFdEJRVXN5Y0VRc1YwRkJWM0J6UkN4TlFVRk5lVU1zUzBGQlN6SndSQ3hYUVVGWGNITkVMRWRCUVVjc1NVRkJTWE5ETEUxQlFVMDBTQ3hSUVVGUmVrb3NSMEZCUjBFc1JVRkJSWGxWTEZOQlFWRXNVMEZCVTNCVUxFZEJRVWQ2UWl4RlFVRkZLM0pFTEZkQlFWZHdjMFFzUjBGQlJ6Sk1MRXRCUVVzelN5eEZRVUZGTm5KRUxHVkJRV1V2Y1VRc1QwRkJUVmNzUzBGQlN6SndSQ3hYUVVGWGNITkVMRWRCUVVjeVRDeExRVUZMTTBzc1JVRkJSVFp5UkN4bFFVRmxjSE5FTEV0QlFVdHhRaXhGUVVGRldDeFZRVUZWYTFZc1NVRkJTU3hUUVVGVGRsVXNSVUZCUlhKQ0xFZEJRVWNzU1VGQlNVb3NSVUZCUlZjc1JVRkJSVFJ5UkN4alFVRmpPWEZFTEVkQlFVY3NSMEZCUjFFc1RVRkJUVFJJTEZGQlFWRjZTaXhIUVVGSExFTkJRVU1zU1VGQlNWUXNSVUZCUlN4SFFVRkhVeXhGUVVGRmVWVXNVMEZCVVN4VFFVRlRjRlFzUjBGQlJ6bENMRVZCUVVVeVRDeExRVUZMTTBzc1JVRkJSVFp5UkN4bFFVRmxMM0ZFTEU5QlFVMVhMRXRCUVVzeWNFUXNWMEZCVnk5eVJDeEhRVUZIVEN4UFFVRlBlVU1zUzBGQlN6SndSQ3hYUVVGWEwzSkVMRWRCUVVjc1EwRkJRMWNzUlVGQlJUWnlSQ3hsUVVGbGNITkVMRXRCUVV0eFFpeEZRVUZGV0N4VlFVRlZkMmhFTEVsQlFVa3NVMEZCVXpkblJDeEZRVUZGY2tJc1IwRkJSeXhKUVVGSlNpeEZRVUZGYjBNc1MwRkJTekp3UkN4WFFVRlhjSEpFTEVWQlFVVTBja1FzWTBGQll6bHhSQ3hKUVVGSkxFbEJRVWxSTEUxQlFVMDBTQ3hSUVVGUk4wb3NSMEZCUnl4UFFVRk5MRVZCUVVjc1VVRkJSeXhKUVVGVFNTeEZRVUZGTEVOQlFVTXNTVUZCU1ZRc1JVRkJSV2RDTEVWQlFVVTJja1FzWlVGQlpYQnpSQ3hIUVVGSExFOUJRVTlLTEVWQlFVVnZUQ3hSUVVGUmVrd3NTVUZCU1N4RlFVRkZMRTlCUVUwc1IwRkJTVGhDTEVWQlFVVllMRlZCUVZWbUxFbEJRVWtzVTBGQlV6QkNMRWRCUVVjc1NVRkJTWEpDTEVWQlFVVm5ReXhMUVVGTE1uQkVMRmRCUVZkd2NrUXNSVUZCUlRSeVJDeGpRVUZqT1hGRUxFbEJRVWtzV1VGQlR5eEpRVUZUY2tJc1JVRkJSVUVzUlVGQlJYbFJMRk5CUVZNc1NVRkJTWEJRTEVWQlFVVllMRlZCUVZVclZDeFJRVUZSTEZOQlFWTndWQ3hIUVVGSExFbEJRVWx5UWl4RlFVRkZaME1zUzBGQlMzaERMRTlCUVU5cldDeHZRa0ZCYjBJeFZTeExRVUZMTW5CRUxGbEJRVmxzTTBNc1UwRkJVU3hUUVVGVE4xVXNSMEZCUjNsQ0xFVkJRVVY2UWl4RlFVRkZTU3hGUVVGRk1uSkVMRmRCUVZjdmNrUXNUVUZCUzI5RExFOUJRVTlZTEVWQlFVVllMRlZCUVZVeWNrUXNWVUZCVlN4WFFVRlhMRWRCUVVjc2IwSkJRVzlDVkN4UlFVRlJMRU5CUVVNc1NVRkJTWFp4UkN4RlFVRkZMRWxCUVVsMWNVUXNVVUZCVVN4UFFVRlBOWEJFTEV0QlFVdDVVeXhUUVVGUkxGTkJRVk42VlN4RlFVRkZTaXhIUVVGSFFTeEZRVUZGTmxVc1UwRkJVU3hUUVVGVE4xVXNSMEZCUjNsQ0xFVkJRVVV3Y1VRc1QwRkJUeTl5UkN4RlFVRkZTaXhUUVVGUGVVSXNSVUZCUlN4TlFVRk5MRWxCUVVrNFF5eE5RVUZOTEdsRFFVRnBRemxETEVWQlFXeHpSU3hIUVVGMWMwVnlRaXhGUVVGRmIyOUVMR1ZCUVdVM2IwUXNSMEZCUnl4VFFVRlRPRUlzUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzWVVGQllVb3NUMEZCVDBNc1pVRkJaVThzUlVGQlJTeGhRVUZoTEVOQlFVTkVMRTlCUVUwc1NVRkJTeXhKUVVGSlVTeEZRVUZGV0N4RlFVRkZMRWRCUVVkSkxFVkJRVVZ2YjBRc1pVRkJaVGR1UkN4RlFVRkZObTVFTEdkQ1FVRm5RaXhUUVVGVEwyMUVMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMR0ZCUVdGS0xFOUJRVTlETEdWQlFXVlBMRVZCUVVVc1lVRkJZU3hEUVVGRFJDeFBRVUZOTEVsQlFVdERMRVZCUVVWemMwUXNaVUZCWlN4VFFVRlRhbkpFTEVWQlFVVnlRaXhIUVVGSExFbEJRVWtzU1VGQlNVb3NSVUZCUlhsQ0xFVkJRVVY0UWl4UFFVRlBPR2hFTEZsQlFWbHdhRVFzUlVGQlJWZ3NSVUZCUlRab1JDeFJRVUZSYkdoRUxFVkJRVVZ0YUVRc1RVRkJUVEZvUkN4RlFVRkZUeXhGUVVGRlVpeE5RVUZOTEVsQlFVbFJMRVZCUVVWWUxFVkJRVVUyYUVRc1VVRkJVWHBvUkN4RlFVRkZkWE5FTEcxQ1FVRnRRaXhUUVVGVGJISkVMRVZCUVVWeVFpeEhRVUZITEVsQlFVa3NTVUZCU1Vvc1JVRkJSWGxDTEVWQlFVVXlaMFFzVDBGQlQzcG9SQ3hGUVVGRldDeEZRVUZGTm1oRUxGRkJRVkZzYUVRc1JVRkJSVzFvUkN4TlFVRk5NV2hFTEVWQlFVVlBMRVZCUVVWU0xFOUJRVTlSTEVWQlFVVllMRVZCUVVVMmFFUXNVMEZCVXl4VFFVRlRjR2RFTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEdGQlFXRktMRTlCUVU5RExHVkJRV1ZQTEVWQlFVVXNZVUZCWVN4RFFVRkRSQ3hQUVVGTkxFbEJRVXNzU1VGQlNWRXNSVUZCUlZnc1JVRkJSU3hIUVVFd1Fra3NSVUZCUlcxelJDeGpRVUZqTEZOQlFWTTVjVVFzUjBGQlJ5eEhRVUZITEdsQ1FVRnBRa0VzU1VGQlNVRXNSVUZCUlVZc1QwRkJUMFVzU1VGQlNTdzJRa0ZCTmtJMlJDeExRVUZMTjBRc1IwRkJSeXhOUVVGTkxFbEJRVWxwUWl4VlFVRlZMREJEUVVFd1F5eFBRVUZQYWtJc1JVRkJSVFIwUWl4bFFVRmxhblpDTEVWQlFVVnZjMFFzWlVGQlpTeFRRVUZUTDNGRUxFZEJRVWNzVFVGQlRTeHBRa0ZCYVVKQkxFbEJRVWxCTEVWQlFVVkdMRTlCUVU5RkxFbEJRVWxCTEVkQlFVZHlRaXhGUVVGRk9ISkVMR2RDUVVGblFpeFRRVUZUZW5GRUxFVkJRVVZ5UWl4SFFVRkhMRWxCUVVsS0xFVkJRVWw1UWl4RlFVRkhMRWRCUVVkNlFpeGhRVUZoWjNORUxGTkJRVk5vYzBRc1JVRkJSVFJ6UkN4UFFVRlBMRTlCUVU4MWMwUXNSVUZCUlRSelJDeFBRVUZQZUhORUxFZEJRVWNzU1VGQlNVOHNSVUZCUlZnc1JVRkJSVVFzU1VGQlNVc3NSMEZCUnl4UFFVRlBUeXhIUVVGSExHbENRVUZwUWtFc1JVRkJSU3hEUVVGRFFTeEhRVUZIUVN4SFFVRkhVQ3hGUVVGRk5uSkVMR05CUVdNc1UwRkJVM2h4UkN4SFFVRkhMRWxCUVVseVFpeEZRVUZKY1VJc1JVRkJSM3BDTEVWQlFVVXNSMEZCUjJsQ0xFVkJRVVVzUjBGQlJ5eFBRVUZQWWl4RlFVRkZaMmxFTEV0QlFVdDZhRVFzUlVGQlJXZHpSQ3h0UWtGQmJVSjJjMFFzUjBGQlJTeFRRVUZUY1VJc1IwRkJSM3BDTEVWQlFVVjVRaXhMUVVGTGVrSXNSVUZCUlhsQ0xFbEJRVWNzUlVGQlIxSXNSVUZCUlhGTExFdEJRVXMzU2l4UFFVRk5ja0lzUlVGQlJYbFZMRkZCUVZGNlZTeEZRVUZGZVZVc1UwRkJVU3hUUVVGVGNGUXNSVUZCUlhKQ0xFZEJRVWRLTEVWQlFVVkpMRXRCUVV0S0xFVkJRVVZKTEVsQlFVY3NSVUZCUjJFc1JVRkJSWEZMTEV0QlFVdHNUQ3hQUVVGTlR5eEZRVUZGSzNKRUxHVkJRV1YwYzBRc1IwRkJSU3hUUVVGVGNVSXNSMEZCUnl4SlFVRkpja0lzUlVGQlJYRkNMRVZCUVVVc1IwRkJSM3BDTEVWQlFVVkpMRXRCUVV0S0xFVkJRVVZKTEVsQlFVY3NSVUZCUjJFc1JVRkJSWEZMTEV0QlFVdHNUQ3hQUVVGTllTeEhRVUZIWWl4RlFVRkZaM05FTEdsQ1FVRnBRaXhUUVVGVE0zRkVMRWRCUVVjc1NVRkJTWEpDTEVWQlFVVXNSMEZCUnl4UFFVRlBjVUlzUlVGQlJXRXNUVUZCVFN4TlFVRk5kVk1zVTBGQlVTeFRRVUZUY0ZRc1IwRkJSMEVzUlVGQlJXRXNUVUZCVFN4TFFVRkxkVk1zVTBGQlVTeFRRVUZUY0ZRc1IwRkJSM0pDTEVWQlFVVnJUQ3hMUVVGTE4wb3NVMEZCVDNKQ0xFOUJRVTl4UWl4RlFVRkZMME1zVVVGQlVXbERMRXRCUVVzc1UwRkJVMk1zUlVGQlJYSkNMRVZCUVVWS0xFZEJRVWNzWVVGQllVb3NUMEZCVDBNc1pVRkJaVThzUlVGQlJTeGhRVUZoTEVOQlFVTkVMRTlCUVUwc1NVRkJTeXhKUVVGSlVTeEZRVUZGV0N4RlFVRkZMRWRCUVVkTUxFVkJRVVVzVTBGQlV6aENMRWRCUVVjc1QwRkJUMlFzUlVGQlJXdHpSQ3d3UWtGQk1FSXNRMEZCUTBNc2FVSkJRV2RDTEVkQlFUZERibk5FTEVOQlFXdEVZeXhKUVVGSmNrSXNSVUZCUlRKelJDd3lRa0ZCTWtJc1UwRkJVM1J5UkN4SFFVRkhPVUlzUlVGQlJUaENMRWRCUVVkeVFpeEZRVUZGSzNCRUxIRkNRVUZ4UWl4VFFVRlRNVzlFTEVkQlFVY3NUMEZCVHpsQ0xFVkJRVVU0UWl4TFFVRkxMRk5CUVZOQkxFVkJRVVZ5UWl4RlFVRkZTaXhIUVVGSExHRkJRV0ZLTEU5QlFVOURMR1ZCUVdWUExFVkJRVVVzWVVGQllTeERRVUZEUkN4UFFVRk5MRWxCUVVzc1NVRkJTVkVzUlVGQlJWZ3NSVUZCUlN4SFFVRkhUQ3hGUVVGRlN5eEZRVUZGTEVkQlFVZEpMRVZCUVVWNWMwUXNNRUpCUVRCQ0xGTkJRVk53Y2tRc1IwRkJSeXhIUVVGSFpDeEZRVUZGY1hORUxIRkNRVUZ4UWl4RFFVRkRMRWxCUVVrMWMwUXNSVUZCUlN4RFFVRkRObk5FTEZsQlFWbDRja1FzUlVGQlJYRnlSQ3huUWtGQlowSXNWVUZCVlN4bFFVRmxMRTlCUVU5dWMwUXNSVUZCUlhWelJDdzJRa0ZCTmtJNWMwUXNSMEZCUnl4UFFVRlBWQ3hGUVVGRmQzUkVMR0ZCUVdFc1EwRkJRMHdzWjBKQlFXZENjbkpFTEVWQlFVVnhja1FzYjBKQlFXOUNMRk5CUVZOeWNrUXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NZVUZCWVN4SlFVRkpWeXhGUVVGRmVVSXNUVUZCVFVFc1MwRkJTMmR5UkN4VlFVRlZMRmRCUVZjc1QwRkJUM3B6UkN4RlFVRkZaaXhQUVVGUGRXaERMRkZCUVZFc1UwRkJVekV2UWl4SFFVRkhMRWxCUVVrc1NVRkJTWEpDTEVWQlFVVktMRVZCUVVVc1JVRkJSVmNzUlVGQlJXOUxMRlZCUVZWMlNpeFBRVUZQZUVJc1JVRkJSVmNzUlVGQlJWZ3NTVUZCU1N4SlFVRkpMRWxCUVVsTUxFdEJRVXRUTEVWQlFVVXlTeXhWUVVGVkwwc3NSMEZCUjBvc1QwRkJUMnRDTEZWQlFWVkRMR1ZCUVdVeFFpeExRVUZMWlN4RlFVRkZWQ3hMUVVGTE9FSXNSVUZCUlRsQ0xFZEJRVWRUTEVWQlFVVlVMRWxCUVVrc1QwRkJUemhDTEVsQlFVbHhTaXhOUVVGTk1Va3NTMEZCU3pKSkxGbEJRVmx1VEN4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxTTEVWQlFVVkxMRVZCUVVVc1IwRkJSMmxDTEVWQlFVVnFRaXhGUVVGRkxFZEJRVWRKTEVWQlFVVTRjMFFzTmtKQlFUWkNMRk5CUVZONmNrUXNSMEZCUnl4UFFVRlBMRk5CUVZOeVFpeEhRVUZITEU5QlFVOHNVMEZCVTNGQ0xFVkJRVVZ5UWl4SFFVRkhMRTlCUVU5eFFpeEZRVUZGZFZZc1QwRkJUeTlXTEVWQlFVVXJWaXhOUVVGTkxHVkJRV1YyVml4SFFVRkhMRWxCUVVsMlF5eEZRVUZGZFVNc1JVRkJSWEpDTEVkQlFXaEZMRU5CUVc5RlFTeEZRVUZGY1VJc1MwRkJTeXhKUVVGSmRrTXNSVUZCUlN4WFFVRlhMRk5CUVZOMVF5eEZRVUZGUVN4RlFVRkZja0lzUjBGQlIyZERMRXRCUVV0cGNrUXNWMEZCVlN4RlFVRkhhbkpFTEV0QlFVdHJja1FzVjBGQlYyNXhSQ3hMUVVGTGIzRkVMR2xDUVVGcFFpeEpRVUZKUVN4blFrRkJaMEp1Y2tRc1MwRkJTMjl5UkN4UlFVRlJMM0pFTEVWQlFVVlhMRXRCUVV0eGNrUXNTMEZCUzNKMFJDeEZRVUZGTEU5QlFVOXhRaXhGUVVGRldDeFZRVUZWTkhORUxFdEJRVXNzVTBGQlUycHpSQ3hGUVVGRmNrSXNSMEZCUnl4SlFVRkpTaXhGUVVGRmIwTXNTMEZCU3l4SFFVRkhRU3hMUVVGTGRYSkVMRTlCUVU5c2MwUXNSVUZCUlZjc1MwRkJTMmx5UkN4VlFVRlZMRTlCUVU5cWNrUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTh2Vml4RlFVRkZLMVlzVFVGQlRTeDNRMEZCZDBNMVZTeExRVUZMZFhKRUxFOUJRVTg1UWl4VFFVRlRlbkJFTEV0QlFVdDFja1FzVDBGQlQwTXNUMEZCVDBNc1RVRkJTeXhUUVVGVGNITkVMRWRCUVVjc1IwRkJSMEVzUlVGQlJYRm5SQ3hMUVVGTExFOUJRVTg1YUVRc1JVRkJSWGQwUkN4UlFVRlJlRVFzVVVGQlVUVndSQ3hGUVVGRlNpeEZRVUZGZDNSRUxGRkJRVkV4UkN4UlFVRlJjbTlFTEVWQlFVVjBRaXhQUVVGUFNDeEZRVUZGTUhSRUxFdEJRVXN4ZEVRc1JVRkJSVEowUkN4UFFVRlBkblJFTEUxQlFVc3dkRVFzVDBGQlRTeFRRVUZUY25ORUxFZEJRVWQ2UWl4RlFVRkZjWFJFTEZWQlFWVnlkRVFzUlVGQlJYZDBSQ3hSUVVGUmVESkRMRTlCUVU4dlZpeEZRVUZGSzFZc1RVRkJUU3h2UTBGQmIwTm9XQ3hGUVVGRmNYUkVMRmRCUVZVc1JVRkJSM0owUkN4RlFVRkZkM1JFTEZGQlFWRjRNa01zVDBGQlR5OVdMRVZCUVVVclZpeE5RVUZOTEdOQlFXTjJWaXhGUVVGRmExUXNVMEZCVXpOVkxFVkJRVVYzZEVRc1VVRkJVWGhFTEUxQlFVMTJiMFFzVVVGQlQwRXNSVUZCUlZnc1ZVRkJWVzFKTEV0QlFVc3NVMEZCVTNoSUxFZEJRVWNzU1VGQlNYSkNMRVZCUVVWblF5eExRVUZMTW5KRUxFMUJRVTB6Y2tRc1MwRkJTMjl5UkN4UlFVRlJhaTlDTEVsQlFVazFkRUlzUlVGQlJTeEhRVUZIZVVJc1MwRkJTM0Z5UkN4TFFVRkxMRU5CUVVOUExGRkJRVkUxY2tRc1MwRkJTelp5UkN4VFFVRlRlRUlzV1VGQldYbENMRTlCUVU4c1QwRkJUME1zUzBGQlN6RnpSQ3hGUVVGRk1uTkVMRTlCUVU5b2MwUXNTMEZCUzJ0eVJDeFpRVUZaYkhKRUxFdEJRVXRyY2tRc1YwRkJWMk1zVlVGQlZWQXNUVUZCU3l4VFFVRlRjSE5FTEVkQlFVY3NSMEZCUjNKQ0xFVkJRVVZ2ZEVRc1VVRkJVWGd5UXl4UFFVRlBMMVlzUlVGQlJTdFdMRTFCUVUwc2FVSkJRV2xDZGxZc1IwRkJSM0pDTEVWQlFVVnZkRVFzVVVGQlVUVkVMRlZCUVZVc1NVRkJTV3B4UkN4RlFVRkZORzlFTEZOQlFWTTViVVFzUlVGQlJYVnpSQ3hUUVVGVGRuTkVMRVZCUVVWNVNDeFRRVUZUZWtnc1JVRkJSVEJ6UkN4TFFVRkxMRTlCUVU4eGMwUXNSVUZCUlhKQ0xFVkJRVVZ6ZEVRc1MwRkJTMnB6UkN4RlFVRkZNSE5FTEV0QlFVdEZMRmxCUVZrMWMwUXNUVUZCUzNGelJDeFBRVUZOTEZOQlFWTnljMFFzUjBGQlIzSkNMRVZCUVVWcGRFUXNWVUZCVldwMFJDeEZRVUZGYjNSRUxGRkJRVkY0TWtNc1QwRkJUeTlXTEVWQlFVVXJWaXhOUVVGTkxHOURRVUZ2UXpWWExFVkJRVVZwZEVRc1YwRkJWU3hGUVVGSGFuUkVMRVZCUVVWdmRFUXNVVUZCVVhneVF5eFBRVUZQTDFZc1JVRkJSU3RXTEUxQlFVMHNZMEZCWTNaV0xFVkJRVVZyVkN4VFFVRlRkbFVzUlVGQlJXOTBSQ3hSUVVGUmVFUXNUVUZCVFhadlJDeFJRVUZQUVN4RlFVRkZXQ3hWUVVGVk5IRkVMRmxCUVZrc1UwRkJVMnB4UkN4SFFVRkhWeXhMUVVGTE5rY3NTMEZCUzNoSUxFbEJRVWxCTEVWQlFVVllMRlZCUVZVMmNVUXNWMEZCVnl4aFFVRmhiSEZFTEVWQlFVVllMRlZCUVZWNWNVUXNUVUZCVFN4VFFVRlRPWEJFTEVkQlFVZFhMRXRCUVVzMmNrUXNVMEZCVTNoelJDeEhRVUZIUVN4RlFVRkZXQ3hWUVVGVkszRkVMRTlCUVU4c1YwRkJWM3B3UkN4TFFVRkxhWEpFTEZWQlFWVnFja1FzUzBGQlMyOXlSQ3hSUVVGUmVESkRMRTlCUVU4dlZpeEZRVUZGSzFZc1RVRkJUU3g1UTBGQmVVTTFWU3hMUVVGTGFYSkVMRmRCUVZVc1JVRkJSMnB5UkN4TFFVRkxkWEpFTEZGQlFWRjJja1FzUzBGQlMyOXlSQ3hSUVVGUmVESkRMRTlCUVU4dlZpeEZRVUZGSzFZc1RVRkJUU3h6UWtGQmMwSTFWU3hMUVVGTGRYSkVMRTlCUVU4NVFpeFZRVUZWZW5CRUxFdEJRVXR2Y2tRc1VVRkJVWGd5UXl4UFFVRlBMMVlzUlVGQlJTdFdMRTFCUVUwc2IwTkJRVzlETlZVc1MwRkJTMnR5UkN4WlFVRlpiSEpFTEV0QlFVdHJja1FzVjBGQlYyZENMRlZCUVZVM2MwUXNSVUZCTldwRUxFZEJRV2xyUkhKQ0xFVkJRVVUwYzBRc2JVSkJRVzFDTEZkQlFWY3NUVUZCVFN4dlFrRkJiMEoxUWl4VlFVRlZRU3hUUVVGVGVuUkVMRlZCUVZWRExHVkJRV1VzVTBGQlV5eHRRa0ZCYlVKcGNrUXNWVUZCVlN4VFFVRlRkbkZFTEVWQlFVVnlRaXhGUVVGRlNpeEhRVUZITEdGQlFXRXNTVUZCU1Zjc1JVRkJSV2hDTEVWQlFVVjVReXhOUVVGTlFTeExRVUZMYjNORUxGbEJRVmszZEVRc1JVRkJSU3hUUVVGVFl5eEZRVUZGY2tJc1IwRkJSeXhQUVVGUFR5eEZRVUZGWml4UFFVRlBOblZFTEdkQ1FVRm5RaXhEUVVGRFF5eFZRVUZWTEdOQlFXTjZjMFFzVDBGQlR5eFRRVUZUVWl4RlFVRkZja0lzUjBGQlIzRkNMRVZCUVVWcGRFUXNWVUZCVlhSMVJDeEpRVUZKTEZOQlFWTnhRaXhGUVVGRmNrSXNSMEZCUnl4SlFVRkpMRWxCUVVsS0xFdEJRVXRKTEVWQlFVVkJMRVZCUVVWWExHVkJRV1ZtTEV0QlFVdDVRaXhGUVVGRmVrSXNSMEZCUjBrc1JVRkJSVW9zVFVGQlRYbENMRVZCUVVWeVFpeEpRVUZKTEZOQlFWTnhRaXhGUVVGRmNrSXNSMEZCUnl4VFFVRlRTaXhKUVVGSmIwTXNTMEZCU3poTExGbEJRVmw2VEN4RlFVRkZaQ3hGUVVGRll5eEZRVUZGY2tJc1IwRkJSM0ZDTEVWQlFVVllMRlZCUVZVc1QwRkJUMVlzUlVGQlJWSXNUMEZCVDFrc1QwRkJUMG9zU1VGQlNVb3NSVUZCUldNc1ZVRkJWVllzUlVGQlJWVXNWVUZCVlN4SlFVRkpaQ3hMUVVGTFNpeFBRVUZQUXl4bFFVRmxUeXhGUVVGRkxHRkJRV0VzUTBGQlEwUXNUMEZCVFN4SlFVRkxMRWxCUVVsakxFVkJRVVZxUWl4RlFVRkZMRWRCUVVka0xFVkJRVVZqTEVWQlFVVXNSMEZCUjNGQ0xFVkJRVVZ5UWl4RlFVRkZMRWxCUVVsSkxFVkJRVVVyYzBRc1lVRkJZU3hUUVVGVE1YSkVMRWRCUVVjc1QwRkJUeXhUUVVGVGNrSXNSMEZCUnl4SFFVRkhhVUlzUlVGQlJYTjBSQ3h6UWtGQmMwSXNUMEZCVHl4SlFVRkpiblpFTEVWQlFVVlpMRVZCUVVWeFFpeEhRVUZITEVkQlFVZEtMRVZCUVVWMWRFUXNiVU5CUVcxRExFOUJRVThzU1VGQlNXNUhMRVZCUVVWeWIwUXNSVUZCUlhGQ0xFZEJRVWNzVFVGQlRTeEpRVUZKT0VNc1RVRkJUU3d5UlVGQk1rVXNTVUZCU1d0clJDeEZRVUZGTEZkQlFWY3NVMEZCVTJodVJDeEZRVUZGUVN4RlFVRkZja0lzUjBGQlIyZERMRXRCUVV0dmNrUXNVVUZCVVM5eVJDeEZRVUZGVnl4TFFVRkxjWEpFTEV0QlFVdHlkRVFzUlVGQlJTeFBRVUZQY1VJc1JVRkJSVmdzVlVGQlZTdDBSQ3huUWtGQlowSXNWMEZCVjNwelJDeExRVUZMYjNKRUxGRkJRVkY0TWtNc1QwRkJUemxZTEVWQlFVVTRXQ3hOUVVGTkxDdENRVUVyUWpWVkxFdEJRVXN3YzBRc1NVRkJTVU1zVTBGQlUzWjBSQ3hSUVVGUkxFbEJRVWxETEVWQlFVVlhMRXRCUVVzd2MwUXNTVUZCU1VNc1UwRkJVM1JuUkN4UFFVRlBjazBzUzBGQlMyMWpMRTlCUVU5dVl5eExRVUZMYldNc1RVRkJUVzVqTEV0QlFVc3djMFFzU1VGQlNVTXNVMEZCVTNaMFJDeFBRVUZQTEVsQlFVbHdRaXhGUVVGRldTeEZRVUZGVXl4SFFVRkhWeXhMUVVGTGIzSkVMRkZCUVZFeFJDeFJRVUZSTVhCRUxFbEJRVWx4UWl4RlFVRkZXQ3hWUVVGVmEzVkVMRmxCUVZrc1YwRkJWelZ6UkN4TFFVRkxiM0pFTEZGQlFWRjRNa01zVDBGQlR6bFlMRVZCUVVVNFdDeE5RVUZOTEcxQ1FVRnRRalZWTEV0QlFVdHZja1FzVVVGQlVYaEVMRk5CUVZOMmIwUXNSVUZCUlZnc1ZVRkJWVzExUkN4alFVRmpMRmRCUVZjM2MwUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTeHZRa0ZCYjBJMVZTeExRVUZMTUhORUxFbEJRVWt6WjBRc1dVRkJXUzlNTEV0QlFVc3djMFFzU1VGQlNUTm5SQ3hoUVVGaGNFWXNaVUZCWlcxdFJDeHJRa0ZCYTBJNWMwUXNTMEZCUzI5eVJDeFJRVUZSTlVRc1ZVRkJWU3hKUVVGSk0yOUVMRVZCUVVWemJrUXNVMEZCVTI1dFJDeExRVUZMTUhORUxFbEJRVWxMTEhsQ1FVRjVRaTl6UkN4TFFVRkxNSE5FTEVsQlFVazFiRVFzVTBGQlUzcElMRVZCUVVWWUxGVkJRVlUwY1VRc1dVRkJXU3hUUVVGVGFuRkVMRWRCUVVkWExFdEJRVXN3YzBRc1NVRkJTVGRzUkN4TFFVRkxlRWdzU1VGQlNVRXNSVUZCUlZnc1ZVRkJWVFp4UkN4WFFVRlhMR0ZCUVdGc2NVUXNSVUZCUlZnc1ZVRkJWWGx4UkN4TlFVRk5MRk5CUVZNNWNFUXNSMEZCUnl4SlFVRkpja0lzUlVGQlJXZERMRXRCUVV0QkxFdEJRVXMyY2tRc1UwRkJVM2h6UkN4RlFVRkZMRWxCUVVsNlFpeEZRVUZGTEVsQlFVa3JTU3hsUVVGbE0wY3NTMEZCU3pCelJDeEpRVUZKT1hWRUxFVkJRVVZCTEVWQlFVVm5TaXhMUVVGTExFOUJRVTgxUnl4TFFVRkxiM0pFTEZGQlFWRnFMMElzUzBGQlMyNXpRaXhMUVVGTFozUkVMR1ZCUVdWb2RFUXNTMEZCU3paeVJDeFRRVUZUY0RWRExGTkJRVkVzVTBGQlUzQlVMRVZCUVVWeVFpeEhRVUZIU2l4RlFVRkZjWFpFTEdsQ1FVRnBRalYwUkN4RlFVRkZja0lzUlVGQlJYZEpMRXRCUVVzc1ZVRkJVelZKTEVWQlFVVTRjMFFzWjBKQlFXZENkME1zVVVGQlVXeDBSQ3hMUVVGTGNYSkVMRXRCUVV0WUxHbENRVUZwUWpselJDeEZRVUZGZFhaRUxHbENRVUZwUWl4dFFrRkJiVUp1ZEVRc1MwRkJTelp6UkN4alFVRmpkblZFTEV0QlFVc3dRaXhQUVVGUGNFTXNSVUZCUlhWMlJDeHBRa0ZCYVVJc1YwRkJWMjUwUkN4TFFVRkxlWE5FTEdkQ1FVRm5RbTUxUkN4TFFVRkxNRUlzVDBGQlQzQkRMRVZCUVVWMWRrUXNhVUpCUVdsQ0xGVkJRVlZ1ZEVRc1MwRkJTelJ6UkN4WlFVRlpkSFZFTEV0QlFVc3dRaXhQUVVGUGNFTXNSVUZCUlhWMlJDeHBRa0ZCYVVJc1UwRkJVU3hUUVVGVE9YUkVMRWRCUVVkeVFpeEZRVUZGYjNSRUxGRkJRVkY0TWtNc1QwRkJUemxZTEVWQlFVVTRXQ3hOUVVGTkxGbEJRVmwyVml4SFFVRkhja0lzUlVGQlJXOTBSQ3hSUVVGUmVFUXNUVUZCVFhadlJDeEZRVUZGZDBZc1YwRkJWWGhHTEVWQlFVVllMRlZCUVZWemRVUXNZVUZCWVN4WFFVRlhhSFJFTEV0QlFVc3djMFFzU1VGQlNTOUVMR0ZCUVdFc1QwRkJUek52UkN4TFFVRkxNSE5FTEVsQlFVbFZMR2xDUVVGcFFpeDFRMEZCZFVNdmRFUXNSVUZCUlZnc1ZVRkJWU3R4UkN4UFFVRlBMRmRCUVZkNmNFUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTeGhRVUZoTlZVc1MwRkJTekJ6UkN4SlFVRkpVaXhUUVVGVE4zTkVMRVZCUVRVdlF5eEhRVUZwWjBSeVFpeEZRVUZGY1haRUxFbEJRVWxvU0N4RlFVRkZMRWxCUVVscWNFUXNSVUZCUlN4VFFVRlRhVU1zUjBGQlJ5eFRRVUZUY2tJc1NVRkJTU3hQUVVGUExFOUJRVTl4UWl4SFFVRkhRU3hGUVVGRmNVb3NUVUZCVFRGSkxFdEJRVXN5U1N4WlFVRlpNMGtzUzBGQlN5eFBRVUZQZWtNc1JVRkJSVk1zUlVGQlJYRkNMRWRCUVVkeVFpeEZRVUZGVlN4VlFVRlZjM1ZFTEdGQlFXRXNWMEZCVjJoMFJDeExRVUZMYjNKRUxGRkJRVkY0TWtNc1QwRkJUemxZTEVWQlFVVTRXQ3hOUVVGTkxEQkZRVUV3UlRWVkxFdEJRVXN3YzBRc1NVRkJTUzlFTEdGQlFXRXNNa0pCUVRKQ00zRkVMRVZCUVVWVkxGVkJRVlVyZEVRc1owSkJRV2RDTEZkQlFWY3NTVUZCU1hCMFJDeEZRVUZGVnl4TFFVRkxNSE5FTEVsQlFVbERMRk5CUVZNemMwUXNTMEZCUzI5eVJDeFJRVUZSZURKRExFOUJRVTg1V0N4RlFVRkZPRmdzVFVGQlRTd3lRa0ZCTWtJc1NVRkJTWE15UWl4WFFVRlhOM0pETEVsQlFVbFhMRXRCUVV0dmNrUXNVVUZCVVRGRUxGRkJRVkVzU1VGQlNYaGpMRmRCUVZjM2NrTXNTMEZCUzNKQ0xFVkJRVzVqTEVOQlFYTmpjVzlFTEVkQlFVY3NVMEZCVTJ4d1JDeEZRVUZGYTBNc1JVRkJSWEpDTEVkQlFVY3NTVUZCU1Vvc1JVRkJSWGxDTEVWQlFVVnhaU3hYUVVGWE1XWXNSMEZCUnl4SFFVRkhTaXhIUVVGSExFOUJRVTlCTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVsWExFVkJRVVZqTEVWQlFVVnhaU3hYUVVGWE1XWXNSVUZCUlN4SFFVRkhUeXhIUVVGSExFOUJRVTlCTEVkQlFVY3NVVUZCVVZnc1JVRkJSU3hQUVVGUFFTeEZRVUZGTEU5QlFVOHNTMEZCUzFjc1JVRkJSU3hSUVVGUkxFOUJRVTlZTEVWQlFVVXNVMEZCVTJkQ0xFVkJRVVZUTEVkQlFVY3NTVUZCU1N4SlFVRkpja0lzUlVGQlJTeEpRVUZKYTNSRExGZEJRVmMzY2tNc1JVRkJSVVFzVVVGQlVYaENMRVZCUVVVc1JVRkJSVmNzUlVGQlJTeEZRVUZGUVN4RlFVRkZZeXhGUVVGRlJDeFBRVUZQWWl4SlFVRkpMRU5CUVVNc1NVRkJTV2hDTEVWQlFVVTBRaXhQUVVGUFZDeFZRVUZWTkhWRUxGbEJRVmxxZFVRc1JVRkJSV2wxUkN4WlFVRlpMM1ZFTEVkQlFVZHdRaXhGUVVGRmEwTXNSVUZCUldRc1IwRkJSMUFzUlVGQlJVb3NTMEZCU3l4SlFVRkpUQ3hGUVVGRkxFOUJRVTlUTEVWQlFVVkJMRVZCUVVWMWRrUXNlVUpCUVhsQ2JuZEVMRVZCUVVWWkxFVkJRVVYzZGtRc2IwSkJRVzlDTlhWRUxFZEJRVWNzVTBGQlUxTXNSVUZCUlhKQ0xFVkJRVVZLTEVkQlFVY3NZVUZCWVVvc1QwRkJUME1zWlVGQlpVOHNSVUZCUlN4aFFVRmhMRU5CUVVORUxFOUJRVTBzU1VGQlN5eEpRVUZKVVN4RlFVRkZhRUlzUlVGQlJVc3NSVUZCUlN4SFFVRXJReXhUUVVGVFpDeEZRVUZGZFVNc1IwRkJSeXhQUVVGNFJDeFRRVUZUUVN4SFFVRkhMRTlCUVU4c1NVRkJTVUVzUjBGQlJ5eExRVUZMUVN4SFFVRkhMRXRCUVV0QkxFVkJRWGRDVWl4RFFVRkZVU3hKUVVGSlFTeEhRVUZITEVsQlFVbEJMRWRCUVVjc1NVRkJTU3hUUVVGVFNpeEZRVUZGU1N4SFFVRkhMRWxCUVVrc1NVRkJTWEpDTEVWQlFVVXNSVUZCUlVFc1NVRkJTWEZDTEVWQlFVVkVMRk5CUVZOd1FpeEZRVUZGTEVsQlFVbHNRaXhGUVVGRmRVTXNSVUZCUlhKQ0xFbEJRVWtzVFVGQlRTeEpRVUZKYlVVc1RVRkJUU3d5UTBGQk1rTXNUMEZCVDJoRUxFOUJRVTk1WlN4aFFVRmhiRllzVFVGQlRYWktMRTlCUVU5VkxFMUJRVTF1UWl4VlFVRlZiVXNzVFVGQlRUVk1MRXRCUVV0dlF5eEpRVUZKTEZOQlFWTm5ia1FzUlVGQlJXaHVSQ3hIUVVGSExFOUJRVThzVFVGQlRTeEpRVUZKUVN4RlFVRkZiM1ZFTEZOQlFWTXNTVUZCU1N4VFFVRlRjbmRFTEVWQlFVVnBReXhIUVVGSExFOUJRVTlCTEVWQlFVVnhkVVFzVlVGQlZTeEhRVUZGTEVkQlFVa3NVMEZCVTNaM1JDeEZRVUZGYTBNc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1QwRkJUM2xDTEVWQlFVVnpkVVFzVjBGQlZ6TjJSQ3hIUVVGSFNpeEZRVUZGTEZOQlFWTm5RaXhGUVVGRlV5eEZRVUZGY2tJc1JVRkJSVW9zUjBGQlJ5eEhRVUZIZVVJc1JVRkJSWGRLTEUxQlFVMHNUMEZCVDNoS0xFVkJRVVYzU2l4TlFVRk5OMHNzUlVGQlJVb3NSMEZCUnl4SlFVRkpWeXhGUVVGRll5eEZRVUZGUkN4WlFVRlBMRWxCUVZONFFpeEpRVUZKVnl4RlFVRkZXQ3hIUVVGSExFbEJRVWtzU1VGQlNVd3NSVUZCUlN4SlFVRkpNblJETEZkQlFWY3pjME1zUlVGQlJWQXNSMEZCUjJFc1JVRkJSU3hGUVVGRkwwSXNSVUZCUld0Q0xFVkJRVVZzUWl4RlFVRkZlVUlzUlVGQlJYcENMRWxCUVVsVExFVkJRVVZ6UWl4TFFVRkxVU3hGUVVGRmRrTXNSMEZCUnl4UFFVRlBVeXhGUVVGRlV5eEZRVUZGTkhaRUxGbEJRVmt6ZFVRc1JVRkJSV3BDTEVWQlFVVTJka1FzV1VGQldTeFRRVUZUZUhWRUxFZEJRVWNzU1VGQlNTeEpRVUZKY2tJc1JVRkJSU3hKUVVGSmEzUkRMRmRCUVZjM2NrTXNSVUZCUlVRc1VVRkJVWGhDTEVWQlFVVXNSVUZCUlVFc1NVRkJTWGxDTEVWQlFVVkVMRk5CUVZONFFpeEZRVUZGTEVOQlFVTXNTVUZCU1Zjc1JVRkJSV01zUlVGQlJYRmxMRmRCUVZjNVppeEhRVUZITEVsQlFVbGtMRVZCUVVWNVFpeEhRVUZITEUxQlFVMHNTVUZCU1RSRUxFMUJRVTBzYlVOQlFXMURia1VzUlVGQlJVb3NSMEZCUjFjc1JVRkJSU3hQUVVGUFVDeEhRVUZITEZOQlFWTnhRaXhIUVVGSFFTeEZRVUZGUVN4RlFVRkZhMW9zVVVGQlVTeEhRVUZITEZWQlFWVnNXaXhGUVVGRlFTeEZRVUZGZDNCRUxGTkJRVk1zUjBGQlJ5eFhRVUZ5UkN4RFFVRnBSWFJ4UkN4RlFVRkZVQ3hGUVVGRk1IRkVMRmxCUVZreGNVUXNSVUZCUlRCeFJDeFZRVUZWTEV0QlFVc3NTVUZCU1dnNFF5eEZRVUZGTEZkQlFWY3NVMEZCVTNKT0xFbEJRVWxYTEV0QlFVczRkRVFzVDBGQlR5eExRVUZMT1hSRUxFdEJRVXNyZEVRc1UwRkJVeXhGUVVGRkxFOUJRVTh4ZFVRc1JVRkJSVmdzVlVGQlZUWndSQ3hOUVVGTkxGTkJRVk5zY0VRc1JVRkJSWEpDTEVkQlFVY3NSMEZCUnl4SlFVRkpjVUlzUlVGQlJVUXNVVUZCVVhCQ0xFVkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVbEtMRVZCUVVWcFFpeEZRVUZGTEVkQlFVY3NSMEZCUnl4TlFVRk5iVUlzUzBGQlN6aDBSQ3hQUVVGUE9YUkVMRXRCUVVzNGRFUXNUMEZCVDNwMVJDeEZRVUZGVnl4TFFVRkxLM1JFTEZOQlFWTXNUMEZCVHl4SFFVRkhMM1JFTEV0QlFVc3JkRVFzVjBGQlZ5OTBSQ3hMUVVGTE9IUkVMRTlCUVU5SUxGZEJRVmN6ZEVRc1MwRkJTemgwUkN4UFFVRlBlblZFTEVWQlFVVlhMRXRCUVVzcmRFUXNVMEZCVXl4TlFVRk5MRU5CUVVNc1NVRkJTV3A0UkN4RlFVRkZhMFFzUzBGQlN6aDBSQ3hQUVVGUFNDeFhRVUZYTTNSRUxFdEJRVXNyZEVRc1UwRkJVM0pvUkN4RlFVRkZMRWxCUVVsM0swSXNWMEZCVjNCMVF5eEZRVUZGZFVNc1JVRkJSWE4xUkN4WlFVRlpjblZFTEVWQlFVVldMRVZCUVVWdlFpeExRVUZMT0hSRUxFOUJRVTg1ZEVRc1MwRkJTeXQwUkN4VlFVRlZjbWhFTEVWQlFVVnJTQ3hKUVVGSmRGVXNSVUZCUlN4SFFVRkhMRWxCUVVsMlF5eEZRVUZGTEVsQlFVbHRkVU1zVjBGQlZ6ZHlReXhIUVVGSGNVNHNSVUZCUld0SUxFbEJRVWszVnl4RlFVRkZSQ3hIUVVGSGEwUXNTMEZCU3poMFJDeFBRVUZQY0doRUxFVkJRVVV4VFN4TFFVRkxLM1JFTEZOQlFWTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1NVRkJTVFYzUkN4RlFVRkZOa01zUzBGQlN6aDBSQ3hQUVVGUE9YUkVMRXRCUVVzcmRFUXNVMEZCVXl4SFFVRkhMRTlCUVU5c2RrUXNSVUZCUlN4SlFVRkpPRUlzUlVGQlJTOUNMRVZCUVVWdlFpeExRVUZMT0hSRUxFOUJRVTg1ZEVRc1MwRkJTeXQwUkN4VFFVRlRMM1JFTEV0QlFVc3JkRVFzVTBGQlV5eEhRVUZITjNWRUxFVkJRVVVzU1VGQlNUaDFSQ3hUUVVGVGNuUkVMRVZCUVVWdGRFUXNUMEZCVDI1MFJDeEZRVUZGYzNSRUxGZEJRVmQwZEVRc1JVRkJSV2QwUkN4WlFVRlpUeXhGUVVGRk9YZEVMRVZCUVVVNFFpeEhRVUZITEVsQlFVa3ZRaXhGUVVGRk5rTXNTMEZCU3poMFJDeFBRVUZQT1hSRUxFdEJRVXNyZEVRc1UwRkJVeXhGUVVGRlJ5eEhRVUZITEU5QlFVOXlka1FzUlVGQlJTeEpRVUZKVlN4RlFVRkZXQ3hGUVVGRmIwSXNTMEZCU3poMFJDeFBRVUZQT1hSRUxFdEJRVXNyZEVRc1UwRkJVeXhGUVVGRkwzUkVMRXRCUVVzcmRFUXNVMEZCVXl4RlFVRkZSeXhIUVVGSExFZEJRVWRzZFVRc1MwRkJTeXQwUkN4VlFVRlZMRVZCUVVWSExFVkJRVVUzU0N4RlFVRkZibTVFTEVkQlFVY3NUMEZCVDB3c1JVRkJSWEZMTEV0QlFVc3NRMEZCUTNVdlF5eFZRVUZWYkhGRUxFVkJRVVZ6Y1VRc1UwRkJVMFVzVlVGQlZXNXlSQ3hGUVVGRk1rSXNSVUZCUlN4SlFVRkphRU1zUlVGQlJUUnZSQ3hUUVVGVGJHNUVMRVZCUVVWeVFpeFBRVUZQYVVJc1JVRkJSVUVzUlVGQlJYRkxMRXRCUVVzc1EwRkJRM1V2UXl4VlFVRlZiSEZFTEVWQlFVVm5ZU3hSUVVGUk5taENMRXRCUVVzM05rSXNUVUZCVFVZc1JVRkJkakZDTEVkQlFUUXhRbkpDTEVWQlFVVm5jRVFzV1VGQldYUTJReXhIUVVGSExGTkJRVk55VGl4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhMRWxCUVVsWExFVkJRVVZtTEU5QlFVOURMR1ZCUVdWUExFVkJRVVVzWVVGQllTeERRVUZEUkN4UFFVRk5MRWxCUVVzc1UwRkJVM05DTEVkQlFVZEJMRVZCUVVWQkxFVkJRVVVyYjBRc1IwRkJSeXhIUVVGSExFdEJRVXN2YjBRc1JVRkJSVUVzUlVGQlJUaDFSQ3hUUVVGVExFZEJRVWNzVjBGQlZ6bDFSQ3hGUVVGRlFTeEZRVUZGTkhCRUxGRkJRVkVzUjBGQlJ5eFZRVUZWTlhCRUxFVkJRVVZCTEVWQlFVVXJkVVFzWjBKQlFXZENMRWRCUVVjc2EwSkJRV3RDTDNWRUxFVkJRVVZCTEVWQlFVVm5ka1FzYVVKQlFXbENMRWRCUVVjc2JVSkJRVzFDYUhaRUxFVkJRVVZCTEVWQlFVVnBka1FzVTBGQlV5eEhRVUZITEZkQlFWZHFka1FzUlVGQlJVRXNSVUZCUld0MlJDeGpRVUZqTEVkQlFVY3NaMEpCUVdkQ2JIWkVMRVZCUVVWQkxFVkJRVVZ0ZGtRc2FVSkJRV2xDTEVkQlFVY3NiVUpCUVcxQ2JuWkVMRVZCUVVWQkxFVkJRVVZ2ZGtRc2EwSkJRV3RDTEVkQlFVY3NiMEpCUVc5Q2NIWkVMRVZCUVVWQkxFVkJRVVZ4ZGtRc2JVSkJRVzFDTEVkQlFVY3NjVUpCUVhGQ2NuWkVMRVZCUVVWQkxFVkJRVVZ6ZGtRc1VVRkJVU3hKUVVGSkxGVkJRVlYwZGtRc1JVRkJSVUVzUlVGQlJYVjJSQ3hYUVVGWExFbEJRVWtzWVVGQllYWjJSQ3hGUVVGRlFTeEZRVUZGZDNaRUxHTkJRV01zU1VGQlNTeG5Ra0ZCWjBKNGRrUXNSVUZCUlVFc1JVRkJSVzF3UkN4VFFVRlRMRWxCUVVrc1YwRkJWMjV3UkN4RlFVRkZRU3hGUVVGRmVYWkVMRmxCUVZrc1NVRkJTU3hqUVVGamVuWkVMRVZCUVVWQkxFVkJRVVV3ZGtRc1UwRkJVeXhKUVVGSkxGZEJRVmN4ZGtRc1JVRkJSVUVzUlVGQlJUSjJSQ3huUWtGQlowSXNTVUZCU1N4clFrRkJOV3BDTEVOQlFTdHJRbnAzUkN4RlFVRkZVQ3hGUVVGRmJYRkVMRTlCUVU5dWNVUXNSVUZCUlcxeFJDeExRVUZMTEV0QlFVdHVjVVFzUlVGQlJXbHhSQ3hwUWtGQmFVSXNVMEZCVXpWdlJDeEhRVUZITEU5QlFVOUJMRWRCUVVjc1MwRkJTeXhGUVVGRkxFOUJRVTlrTEVWQlFVVnBjVVFzVTBGQlV5eExRVUZMTEVsQlFVa3NUMEZCVDJweFJDeEZRVUZGTm5CRUxFZEJRVWNzUzBGQlN5eEpRVUZKTEU5QlFVODNjRVFzUlVGQlJUWjJSQ3huUWtGQlowSXNTMEZCU3l4SlFVRkpMRTlCUVU4M2RrUXNSVUZCUlhsM1JDeG5Ra0ZCWjBJc1MwRkJTeXhKUVVGSkxFOUJRVTk2ZDBRc1JVRkJSV2wzUkN4cFFrRkJhVUlzUzBGQlN5eEpRVUZKTEU5QlFVOXFkMFFzUlVGQlJTdDJSQ3hUUVVGVExFdEJRVXNzU1VGQlNTeFBRVUZQTDNaRUxFVkJRVVZ2ZDBRc1VVRkJVU3hMUVVGTExFbEJRVWtzVDBGQlQzQjNSQ3hGUVVGRmJYZEVMRzFDUVVGdFFpeExRVUZMTEVsQlFVa3NUMEZCVDI1M1JDeEZRVUZGYTNkRUxHdENRVUZyUWl4TFFVRkxMRWxCUVVrc1QwRkJUMngzUkN4RlFVRkZOSFpFTEZOQlFWTXNTMEZCU3l4SlFVRkpMRTlCUVU4MWRrUXNSVUZCUlRCeFJDeFJRVUZSTEV0QlFVc3NTVUZCU1N4UFFVRlBNWEZFTEVWQlFVVnpkMFFzWTBGQll5eExRVUZMTEVsQlFVa3NUMEZCVDNSM1JDeEZRVUZGZFhkRUxGbEJRVmtzUzBGQlN5eEpRVUZKTEU5QlFVOTJkMFFzUlVGQlJUaDJSQ3hwUWtGQmFVSXNVVUZCVVN4UFFVRlBPWFpFTEVWQlFVVXdjVVFzVjBGQlZ5eFRRVUZUTlhCRUxFVkJRVVZ5UWl4RlFVRkZTaXhIUVVGSExHRkJRV0ZLTEU5QlFVOURMR1ZCUVdWUExFVkJRVVVzWVVGQllTeERRVUZEUkN4UFFVRk5MRWxCUVVzc1NVRkJTVkVzUlVGQlJWZ3NSVUZCUlN4SFFVRkhUQ3hGUVVGRlN5eEZRVUZGTEVkQlFVZHBRaXhGUVVGRmFrSXNSVUZCUlN4SFFVRkhaQ3hGUVVGRll5eEZRVUZGTEVsQlFVbHhRaXhGUVVGRmNrSXNSVUZCUlN4SFFVRkhlVzlFTEVWQlFVVjZiMFFzUlVGQlJTeEhRVUZIVWl4RlFVRkZVU3hGUVVGRkxFZEJRVWRVTEVWQlFVVlRMRVZCUVVVc1NVRkJTV2RDTEVWQlFVVm9RaXhGUVVGRkxFbEJRVWs0VHl4RlFVRkZPVThzUlVGQlJTeEpRVUZKTEZOQlFWTjVRaXhIUVVGSFFTeEZRVUZGTkhaRUxHOUNRVUZ2UWpGNFJDeEZRVUZGYjNSRUxESkNRVUV5UW5SeVJDeEZRVUZGYjNKRUxEQkNRVUV3UW5CRkxFVkJRVVZ2UlN3d1FrRkJNRUp3Y2tRc1JVRkJSWGx5UkN3MlFrRkJOa0pxYzBRc1JVRkJSV2x6UkN3MlFrRkJOa0o2Y2tRc1JVRkJSVEJ5UkN4aFFVRmhPWEpFTEVWQlFVVTRja1FzWVVGQllURnlSQ3hGUVVGRk5uWkVMRzFDUVVGdFFuQjVSQ3hGUVVGRmIzbEVMRzFDUVVGdFFqZDJSQ3hGUVVGRk9HOUVMRXRCUVVzdmNVUXNSVUZCUlN0eFJDeExRVUZMT1c5RUxFVkJRVVU0YlVRc1UwRkJVelZ1UkN4RlFVRkZObTVFTEdWQlFXVXZiVVFzUlVGQlJXbHVSQ3hQUVVGUExGTkJRVk5xYmtRc1JVRkJSWEpDTEVkQlFVY3NUMEZCVHpCUExFVkJRVVUwTlVNc1QwRkJUMnB1UkN4RlFVRkZja0lzU1VGQlNYRkNMRVZCUVVVNGRrUXNUMEZCVDJoNVJDeEZRVUZGWjNsRUxFOUJRVTg1ZGtRc1JVRkJSU3QyUkN4TlFVRk5lSGRFTEVWQlFVVjNkMFFzVFVGQmFGZ3NRMEZCZFZod2VFUXNSVUZCUlhGNFJDeFBRVUZQY25oRUxFVkJRVVZ4ZUVRc1MwRkJTeXhOUVVGTkxGTkJRVk5vZDBRc1JVRkJSWEpDTEVWQlFVVktMRWRCUVVjc1lVRkJZU3hKUVVGSlZ5eEZRVUYzU1N4VFFVRlRUU3hGUVVGRlVTeEhRVUZITEVsQlFVbHlRaXhGUVVGNFNpeFhRVUZoTEZGQlFVY3NTVUZCVTA4c1JVRkJSU3hQUVVGUFFTeEZRVUZGTEVkQlFVZHZTU3hsUVVGbExFTkJRVU53U1N4RlFVRkZMRWxCUVVsdlNTeGxRVUZsTEVsQlFVbHdTU3hGUVVGRmNVa3NTMEZCU3l4TlFVRk5MSEZDUVVGeFFpeE5RVUZOZGtnc1MwRkJTeXhQUVVGUFpDeEZRVUZ6UW1oQ0xFZEJRVWtzU1VGQlNWTXNSVUZCUlN4UFFVRk5MRVZCUVVjc1NVRkJTU3hQUVVGUFFTeEZRVUZGTW5GRUxHRkJRV0YwY0VRc1JVRkJSWEpDTEVWQlFVVXljVVFzWlVGQlpYUndSQ3hGUVVGRkxFMUJRVTFCTEVsQlFVa3NUMEZCVFN4RlFVRkhOMElzVDBGQlQwTXNaVUZCWlU4c1JVRkJSU3hoUVVGaExFTkJRVU5FTEU5QlFVMHNTVUZCUzBNc1JVRkJSWE40UkN4M1FrRkJkMEo2ZDBRc1JVRkJSV0lzUlVGQlJYVjFSQ3h2UWtGQmIwSXNWMEZCVnl4TlFVRk5MRzlDUVVGdlFqVnNSQ3huUWtGQlowSTVTQ3hGUVVGRkxEUkNRVUUwUW1Jc1JVRkJSWGQxUkN4cFEwRkJhVU1zVjBGQlZ5eE5RVUZOTEc5Q1FVRnZRamRzUkN4blFrRkJaMEpCTEdWQlFXVnFTU3hWUVVGVlF5eGxRVUZsTEhOQ1FVRnpRaXhUUVVGVFZTeEZRVUZGY2tJc1JVRkJSVW9zUjBGQlJ5eGhRVUZoU2l4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxSTEVWQlFVVm9RaXhGUVVGRlN5eEZRVUZGTEVkQlFVZHBRaXhGUVVGRmFrSXNSVUZCUlN4SlFVRkpMRk5CUVZONVFpeEhRVUZIUVN4RlFVRkZRU3hGUVVGRmEzZEVMRmxCUVZrc1IwRkJSeXhqUVVFdlFpeERRVUU0UTJoNFJDeEpRVUZKUVN4RlFVRkZMRXRCUVVzc1NVRkJTWHBDTEVWQlFVVXNTVUZCU1c5MVF5eFhRVUZYTEVOQlFVTXNTVUZCU1d4MFF5eEZRVUZGYTNoRUxHMUNRVUZ0UWl4WFFVRlhMRTlCUVU4c1UwRkJVemQyUkN4SFFVRkhMRTlCUVU4c1UwRkJVMEVzUjBGQlIwRXNSVUZCUlhWV0xFOUJRVTl5V0N4RlFVRkZjVmdzVFVGQlRTeHRRa0ZCYlVKMlZpeEhRVUZITEVsQlFVbHlRaXhGUVVGRlNpeEZRVUZGTEZOQlFWTjVRaXhIUVVGSExFZEJRVWNzWVVGQllVRXNSVUZCUldkT0xFOUJRVThzUlVGQlJTeEhRVUZITEUxQlFVMHNVMEZCVTJoT0xFVkJRVVZuVGl4UFFVRlBMRWRCUVVjc1IwRkJSeXhaUVVGWmFFNHNSVUZCUldkT0xFOUJRVThzUlVGQlJTeEhRVUZITEUxQlFVMHNVVUZCVVdoT0xFVkJRVVZuVGl4UFFVRlBMRWRCUVVjc1RVRkJUU3hKUVVGSmJFc3NUVUZCVFN4elJVRkJOVWtzUTBGQmJVNDVReXhGUVVGRk9ITkNMRXRCUVV0c2RFSXNSVUZCUlN4SFFVRkhMRk5CUVZOdmJrUXNSVUZCUldodVJDeEhRVUZITEVkQlFVZEJMRWxCUVVsa0xFVkJRVVZuZUVRc1dVRkJXWFo0UkN4RlFVRkZOa2tzUzBGQlN5OUtMRTlCUVU4c1EwRkJReXhKUVVGSll5eEZRVUZGZVVJc1JVRkJSVGxDTEVWQlFVVXNTVUZCU1dsNVJDeFZRVUZWTlhoRUxFVkJRVVVyZGtRc1YwRkJWeXhIUVVGSGNIZEVMRVZCUVVWeFZ5eEpRVUZKTEVsQlFVbHpNMElzVjBGQlZ5eERRVUZETEV0QlFVc3pkRU1zUlVGQlJYRlhMRWxCUVVsb1Z5eEZRVUZGTEVkQlFVZEpMRVZCUVVVMlNTeExRVUZMZEVvc1NVRkJTU3hOUVVGTkxFTkJRVU1yY2tRc1dVRkJXU3hUUVVGVGFuRkVMRWRCUVVkeVFpeEhRVUZIUVN4RlFVRkZLMDRzWVVGQllTOU9MRVZCUVVWNWVFUXNWMEZCVjNCS0xFVkJRVVZvYmtRc1IwRkJSMG9zUlVGQlJXbExMRXRCUVVzM1NpeEpRVUZKYTNGRUxGZEJRVmNzVjBGQlYzWnlSQ3hIUVVGSFFTeEZRVUZGSzA0c1lVRkJZUzlPTEVWQlFVVjVlRVFzVjBGQlYzQktMRVZCUVVVNWJrUXNSVUZCUldkNFJDeGhRVUZoZEhkRUxFVkJRVVZwU3l4TFFVRkxNMHNzUlVGQlJXZDRSQ3hqUVVGamNFY3NUVUZCVFN4VFFVRlROWEZFTEVsQlFVbFFMRVZCUVVVc1NVRkJTVEI0UkN4VlFVRlZPWGhFTEVWQlFVVXNRMEZCUXl4eFFrRkJjVUlyZUVRc1YwRkJWeXhqUVVGak0zaEVMRVZCUVVVMGVFUXNUMEZCVHl4WFFVRlhMRWxCUVVsb2VVUXNSVUZCUlhsQ0xFVkJRVVYxVml4UFFVRlBjbGdzUlVGQlJYRllMRTFCUVUwc01rSkJRVEpDTlZjc1JVRkJSVFpKTEUxQlFVMXFTaXhGUVVGRkxFZEJRVWRYTEVWQlFVVnJWU3hUUVVGUkxGTkJRVk53VkN4RlFVRkZja0lzUjBGQlIwb3NSMEZCUjNsQ0xFVkJRVVVzUzBGQlMzSkNMRVZCUVVWM1NTeExRVUZMTEUxQlFVMHNWVUZCVXpOSUxFVkJRVVZuZGtRc1dVRkJXV3AzUkN4TFFVRkxjVUlzUlVGQlJYZFVMRk5CUVZFc1UwRkJVM0JVTEVkQlFVZG5ia1FzUlVGQlJXaHVSQ3hQUVVGTmNrSXNSVUZCUlRaNFJDeFJRVUZSTEZOQlFWTTNlRVFzUjBGQlIzRkNMRVZCUVVWMVZpeFBRVUZQY2xnc1JVRkJSWEZZTEUxQlFVMHNNa0pCUVRKQ05WY3NSMEZCUjNGQ0xFVkJRVVYxYjBRc1UwRkJVelZ3UkN4RlFVRkZPSGhFTEZGQlFWRXNVMEZCVXpsNFJDeEhRVUZIY1VJc1JVRkJSWFZXTEU5QlFVOXlXQ3hGUVVGRmNWZ3NUVUZCVFN3eVFrRkJNa0kxVnl4SlFVRkpRU3hGUVVGRkszaEVMRlZCUVZVc1UwRkJVeTk0UkN4SFFVRkhjVUlzUlVGQlJYRnZSQ3hSUVVGUkxFbEJRVWw0WXl4WFFVRlhiSFJETEVWQlFVVnZPRUlzVTBGQlUzRjJRaXhQUVVGUExGZEJRVmR3Y1VRc1JVRkJSWFZXTEU5QlFVOXlXQ3hGUVVGRmNWZ3NUVUZCVFN4dFFrRkJiVUkxVnl4RlFVRkZkM0pFTEZWQlFURnRReXhEUVVGeGJrTnVjVVFzVFVGQlRTeFRRVUZUUVN4RlFVRkZja0lzUlVGQlJVb3NSMEZCUnl4aFFVRmhTaXhQUVVGUFF5eGxRVUZsVHl4RlFVRkZMR0ZCUVdFc1EwRkJRMFFzVDBGQlRTeEpRVUZMTEVsQlFVbFJMRVZCUVVWWUxFVkJRVVVzUjBGQlIwa3NSVUZCUlcxNFJDeFBRVUZQTEZOQlFWTTVka1FzUlVGQlJYSkNMRWRCUVVjc1IwRkJSM0ZDTEVWQlFVVXJjRVFzWTBGQll5eE5RVUZOTEVsQlFVbHFia1FzVFVGQlRTdzRSVUZCT0VVc1NVRkJTWFpGTEVWQlFVVlhMRVZCUVVVcmJrUXNUMEZCVDJwdVJDeEZRVUZGTEVOQlFVTXJia1FzUzBGQlMzQndSQ3hGUVVGRmIzQkVMRXRCUVV0VkxGVkJRVlU1Y0VRc1JVRkJSVGh3UkN4VlFVRlZiSHBETEUxQlFVMDFWeXhGUVVGRk5GY3NVVUZCVVN4UFFVRlBOVmNzUlVGQlJYZHdSQ3hYUVVGWE5YQkVMRVZCUVVVMGNFUXNWVUZCVlhod1JDeEZRVUZGZDNCRUxGZEJRVmQ0Y0VRc1JVRkJSV3R5UkN4WFFVRlhkSEpFTEVWQlFVVnpja1FzVlVGQlZXeHlSQ3hGUVVGRmEzSkVMRmRCUVZkc2NrUXNSVUZCUlRSd1JDeFBRVUZQYUhGRUxFVkJRVVZuY1VRc1RVRkJUVFZ3UkN4RlFVRkZOSEJFTEU5QlFVOW9jVVFzUlVGQlJYVnlSQ3hOUVVGTmJuSkVMRVZCUVVVMmRFUXNWVUZCVldwMVJDeEZRVUZGYVVvc1MwRkJTemRKTEVWQlFVVm5lVVFzVTBGQlUzQjVSQ3hGUVVGRk1uSkVMR0ZCUVdFc1EwRkJRME1zVFVGQlRTeFhRVUZYTlhKRUxFVkJRVVUwY2tRc1dVRkJXU3hUUVVGVGJuRkVMRVZCUVVWeVFpeEZRVUZGU2l4SFFVRkhMR0ZCUVdGS0xFOUJRVTlETEdWQlFXVlBMRVZCUVVVc1lVRkJZU3hEUVVGRFJDeFBRVUZOTEVsQlFVdERMRVZCUVVWeGNrUXNZVUZCWVN4VFFVRlRhSEZFTEVkQlFVY3NTVUZCU1hKQ0xFVkJRVVZ4UWl4RlFVRkZPR2RFTEd0Q1FVRnJRblpwUkN4RlFVRkZMRWxCUVVsemQwTXNXVUZCV1d4M1F5eEZRVUZGTW5aRUxGZEJRVmNzUjBGQlJ5eFBRVUZQTEVsQlFVbExMRk5CUVZOd2QwUXNSVUZCUlN4RlFVRkZMRWRCUVVkeGVVUXNWVUZCVlN4RlFVRkZhbmxFTEVWQlFVVnZRaXhSUVVGUExFZEJRVWtzU1VGQlNUaHlReXhYUVVGWGRIUkRMRVZCUVVVc1IwRkJSMmRYTEVsQlFVazFWaXhIUVVGSExFbEJRVWxyZEVNc1YwRkJWM1IwUXl4TFFVRkxMRk5CUVZONVFpeEZRVUZGY2tJc1JVRkJSVW9zUjBGQlJ5eGhRVUZoU2l4UFFVRlBReXhsUVVGbFR5eEZRVUZGTEdGQlFXRXNRMEZCUTBRc1QwRkJUU3hKUVVGTExFbEJRVWxSTEVWQlFVVllMRVZCUVVVc1IwRkJSMHdzUlVGQlJVc3NSVUZCUlN4SFFVRkhTU3hGUVVGRmIzaEVMRTFCUVUwc1UwRkJVeTkyUkN4RlFVRkZja0lzUjBGQlJ5eEhRVUZIY1VJc1JVRkJSVFozUkN4bFFVRmxMRTFCUVUwc1NVRkJTUzkwUkN4TlFVRk5MSGRHUVVGM1JpeEhRVUZIT1VNc1JVRkJSU3R3UkN4alFVRmpMRTFCUVUwc1NVRkJTV3B1UkN4TlFVRk5MRFpGUVVFMlJTeEpRVUZKZGtVc1JVRkJSU3hMUVVGTGFVSXNSVUZCUlN4TFFVRkxMMElzUlVGQlJWTXNSVUZCUlN0dlJDeFBRVUZQYW01RUxFVkJRVVVzUTBGQlF5dHVSQ3hMUVVGTGNIQkVMRVZCUVVWdmNFUXNTMEZCUzFVc1ZVRkJWVGx3UkN4RlFVRkZPSEJFTEZWQlFWVnNla01zVFVGQlRUVlhMRVZCUVVVMFZ5eFJRVUZSTEU5QlFVODVXQ3hGUVVGRk1IRkVMRmRCUVZVc1UwRkJVMjV2UkN4SFFVRkhla0lzUlVGQlJYbENMRXRCUVVsMlF5eEZRVUZGYjNORUxGZEJRVlVzVTBGQlV6ZHdSQ3hIUVVGSFVpeEZRVUZGVVN4TFFVRkpka01zUlVGQlJUaHhSQ3hQUVVGTkxGTkJRVk4yYjBRc1JVRkJSVGxDTEVWQlFVVlVMRWRCUVVkclFpeEZRVUZGTkhCRUxFMUJRVTBzUTBGQlF6bG5SQ3hQUVVGUGVrZ3NSVUZCUlRoM1JDeGpRVUZqTlhsRUxFVkJRVVZ4ZFVRc1VVRkJVV2gxUkN4SFFVRkhMRWxCUVVsWExFVkJRVVUwYmtRc1UwRkJVelY2UXl4UlFVRlJNVlFzUlVGQlJXdHhSQ3hUUVVGVGFuTkVMRTlCUVUxQkxFVkJRVVZ4YzBRc1RVRkJUVzV5UkN4RlFVRkZOblJFTEZWQlFWVXZkVVFzUlVGQlJTdEtMRXRCUVVzM1NTeEZRVUZGWjNsRUxGTkJRVk5zZWtRc1JVRkJSWGx6UkN4aFFVRmhMRU5CUVVORExFMUJRVTBzVjBGQlZ6RnpSQ3hGUVVGRk1ITkVMR1VzWjBKRFlXNXNkMElzU1VGQlNXcDVReXhGUVVGUExFVkJRVkVzUjBGRFpucFhMRVZCUVU5NVZ5eEZRVU5RZUZnc1JVRkJWU3hYUVVOYUxFOUJRVWxETEV0QlFXVkJMRXRCUTBjc2IwSkJRVmgwUkN4UFFVRnBRMEVzV1VGRGRFSXNTVUZCV0hGRUxFVkJRV2xEUVN4RlFVTjRRaXh2UWtGQlZHZENMRXRCUVN0Q1FTeExRVU51UTJkSkxGTkJRVk1zWTBGQlZFRXNTVUZEVURsTUxFdEJRVXNzVFVGRlNHMTZSQ3hGUVVGNVFpeEZRVUZSTEVsQlEzSkRkSFpFTEVWQlFVdDBReXhQUVVGUE1sWXNUMEZCVDJzNFF5eE5RVUZQUkN4SFFVTXhRblIyUkN4RlFVRkxORW9zWVVGQllTd3dRa0ZCTWtJc1MwRkJUVE5MTEVkQlYyNUVjM2RFTEUxQlFVMURMRTlCUVU5RExFbEJRVWxETEU5QlFWTXNVMEZCVTBNc1IwRkRha05zTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVkS0xFMUJRVTFETEU5QlFVOURMRWxCUVVsRExFOUJRVTlGTEdkQ1FVRnBRaXhQUVVVeFJqVjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBReXhKUVVGSlF5eFBRVUZSYWpWRExFVkJRVXMwY0VNc1UwRkRlRU55WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUME1zU1VGQlNVTXNUMEZCVDJ3MVF5eFpRVUZqTERKQ1FWRjRReXMwUXl4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBSU3huUWtGQmEwSXNRMEZCUXl4SFFVbDJRMjQxUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTlETEVsQlFVbERMRTlCUVU4NWVFUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOd1JDeFBRVUZQVGl4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBNM3BETEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaEwwUnhkMFFzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGQlR6TjZReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF6TkVMRWxCUVU5RExFVkJRVTBzUTBGRFdFTXNTMEZCVFhnMVF5eEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1IwRkRMME4wSzBNc1VVRkJVMmRHTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhKUVVOc1JFY3NXVUZCWVhvMVF5eEZRVUZMTkhCRExGRkJRVkV3UWl4aFFVRmhaMDhzUlVGQlNVa3NhVUpCUXpORFlpeEZRVUYxUW1Nc1NVRkJTWEl3UXl4VFFVRlZLM3BETEVsQlRYWkRMRTlCU0VsQkxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU5RExFbEJRVWxETEU5QlFVOXdVU3hyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMjVFTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGREwwSXNUMEZCVDBnc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1VNc1QwRkJUMkVzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYYkVVNFJTeE5RVUZOUXl4UFFVRlBReXhKUVVGSlF5eFBRVUZQWVN3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRMnhGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDNaaExGbEJRekZETm1Zc1JVRkJTVk1zVVVGQlVYWjZSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSlZTeFhRVUZYZUhwRUxFZEJRMllzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWEY1UkN4RlFVRjFRbU1zU1VGRGRrTXpSaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOY1hsRUxFVkJRWFZDWXl4SlFVRkpSeXcyUWtGRGNFUlNMRVZCUVVsWExGZEJRVmQ2ZWtRc1IwRkRaaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU5RExFbEJRVWxETEU5QlFVODVlRVFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYkVRc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUGEwSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETDBOQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBhMElzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU5zUlN4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlJTeExRVVJXY25sRUxFVkJRVWxwVkN4RlFVRlJjUzlETEZsQlJWWklMRVZCUVU4ellTeFhRVU5NTEVWQlEwRjRNME1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkZ6TDBNc1kwRkRUbnA1UkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVEFyUXl4clFrRkRUamQ0UkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVWQlEwRjJPVU1zUlVGRFFUaDNSQ3hGUVVGMVFtTXNTVUZCU1ZFc01FSkJWV3BEY2tJc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1VNc1QwRkJUemw0UkN4VlFVRlZhM3BFTEZGQlFWVXNWMEZETVVNc1QwRkJPRUp5TmtNc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBPWGhFTEZWQlFWVTBlVVFzVVVGQlZTeFRRVUZUZG5wRUxFZEJRMjVFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFclF5eHJRa0ZCYTBKc2EwUXNTMEZCVFN4RlFVRkhha01zU1VGUmFrUnplVVFzVFVGQlRVTXNUMEZCVDBNc1NVRkJTVU1zVDBGQlR6bDRSQ3hWUVVGVmJYcEVMRmRCUVdFc1YwRkROME1zVDBGQk9FSjBOa01zUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQUXl4SlFVRkpReXhQUVVGUE9YaEVMRlZCUVZVMmVVUXNWMEZCWVN4VFFVRlRlSHBFTEVkQlEzUkVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSY0VSemVVUXNUVUZCVFVNc1QwRkJUME1zU1VGQlNVTXNUMEZCVHpsNFJDeFZRVUZWZFhsRUxHVkJRV2xDTEZkQlEycEVMRTlCUTBVeE5VTXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF2ZDBRc1JVRkJkVUpqTEVsQlFVc3NTVUZSTTBWaUxFMUJRVTFETEU5QlFVOURMRWxCUVVsRExFOUJRVTg1ZUVRc1ZVRkJWVzk2UkN4bFFVRnBRaXhUUVVGVEwzcEVMRWRCUXpGRUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEZRVUZIYWtNc1NVRlRka1J6ZVVRc1RVRkJUVU1zVDBGQlQwTXNTVUZCU1VNc1QwRkJUemw0UkN4VlFVRlZPSGxFTEZkQlFXRXNVMEZCVTA4c1JVRkJWME1zUjBGRGFrVXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCUzJNc1NVRlJMMFl6UWl4TlFVRk5ReXhQUVVGUFF5eEpRVUZKUXl4UFFVRlBPWGhFTEZWQlFWVjNla1FzYVVKQlFXMUNMRmRCUTI1RUxFOUJRVTlzZVVRc1MwRkJTemg0UkN4bFFVRmxMRXRCU1RkQ2FIaEVMRVZCUVV0MFF5eFBRVUZQTWxZc1QwRkJUemRZTEVWQlFWTXJla1FzVFVGQlRVTXNUMEZCVDBNc1RTeG5Ra001VUhwRExFbEJRVWxvTlVNc1JVRkJUeXhGUVVGUkxFZEJRMlo2Vnl4RlFVRlBlVmNzUlVGRFVIaFlMRVZCUVZVc1YwRkRXaXhQUVVGSlF5eExRVUZsUVN4TFFVTkhMRzlDUVVGWWRFUXNUMEZCYVVOQkxGbEJRM1JDTEVsQlFWaHhSQ3hGUVVGcFEwRXNSVUZEZUVJc2IwSkJRVlJuUWl4TFFVRXJRa0VzUzBGRGJrTm5TU3hUUVVGVExHTkJRVlJCTEVsQlExQTVUQ3hMUVVGTExFMUJSVWhyTVVRc1JVRkJPRUlzUlVGQlVTeEpRVU14UTNKNFJDeEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVOXJPRU1zVFVGQlR6aENMRWRCUXpGQ0xFbEJRVWxETEVWQlFYVkNMRVZCUVZFc1IwRkRia04wZUVRc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUGF6aERMRTFCUVU4clFpeEhRVU14UW5SNFJDeEZRVUZMTkVvc1lVRkJZU3h4UTBGQmMwTXNTMEZCVFROTExFZEJRemxFWlN4RlFVRkxORW9zWVVGQllTd3dRMEZCTWtNc1MwRkJUVE5MTEVkQlEyNUZaU3hGUVVGTE5Fb3NZVUZCWVN4dlEwRkJjVU1zUzBGQlRUTkxMRWRCUXpkRVpTeEZRVUZMTkVvc1lVRkJZU3cyUTBGQk9FTXNTMEZCVFROTExFZEJRM1JGWlN4RlFVRkxORW9zWVVGQllTd3lRMEZCTkVNc1MwRkJUVE5MTEVkQlEzQkZaU3hGUVVGTE5Fb3NZVUZCWVN3eVEwRkJORU1zUzBGQlRUTkxMRWRCUTNCRlpTeEZRVUZMTkVvc1lVRkJZU3h4UTBGQmMwTXNTMEZCVFROTExFZEJRemxFWlN4RlFVRkxORW9zWVVGQllTdzRRMEZCSzBNc1MwRkJUVE5MTEVkQlEzWkZaU3hGUVVGTE5Fb3NZVUZCWVN3MFEwRkJOa01zUzBGQlRUTkxMRWRCUTNKRlpTeEZRVUZMTkVvc1lVRkJZU3cwUTBGQk5rTXNTMEZCVFROTExFZEJRM0pGWlN4RlFVRkxORW9zWVVGQllTdzJRMEZCT0VNc1MwRkJUVE5MTEVkQlEzUkZaU3hGUVVGTE5Fb3NZVUZCWVN4dFEwRkJiME1zUzBGQlRUTkxMRWRCUXpWRVpTeEZRVUZMTkVvc1lVRkJZU3h2UTBGQmNVTXNTMEZCVFROTExFZEJWemRFYzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhReXhqUVVGblFpeFRRVUZUT1VJc1IwRkRha1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlpXZzNReXhGUVVGTE5IQkRMRk5CUTNoRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZqYWpkRExGbEJRV01zTWtOQldYaEVLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZUTEZOQlFWTXZRaXhIUVVNeFEydzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZSYWpkRExFVkJRVXMwY0VNc1UwRkRha1J5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVOXNOME1zV1VGQll5eHZRMEZaYWtRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRITEZGQlFWVXNVMEZCVTJoRExFZEJRek5EYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTFLTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSUXl4bFFVVjZSalY0UkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVMnczUXl4RlFVRkxOSEJETEZOQlEyeEVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUmJqZERMRmxCUVdNc2NVTkJXV3hFS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhTeXhsUVVGcFFpeFRRVUZUYkVNc1IwRkRiRVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGQlowSndOME1zUlVGQlN6UndReXhUUVVONlJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZCWlhJM1F5eFpRVUZqTERSRFFWbDZSQ3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCYVVJc1UwRkJVMjVETEVkQlEyeEViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMHNUMEZGZGtRemRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZE5MR1ZCUVdkQ2NqZERMRVZCUVVzMGNFTXNVMEZEZWtSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTkxHVkJRV1YwTjBNc1dVRkJZeXcwUTBGWmVrUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZYTEZOQlFWTnpSU3hIUVVNMVEydzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTlNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjFSeXhsUVVVeFJqVjRSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWVTFNRU1zUlVGQlN6UndReXhUUVVOdVJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZNM01FTXNXVUZCWXl4elEwRlpia1FyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGclFpeFRRVUZUY0VNc1IwRkRia1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXbENkRGRETEVWQlFVczBjRU1zVTBGRE1VUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFuWTNReXhaUVVGakxEWkRRVmt4UkNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXdENMRk5CUVZOeVF5eEhRVU51Ukd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVVN4blFrRkJhVUoyTjBNc1JVRkJTelJ3UXl4VFFVTXhSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENlRGRETEZsQlFXTXNOa05CV1RGRUt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJiVUlzVTBGQlUzUkRMRWRCUTNCRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZyUW5nM1F5eEZRVUZMTkhCRExGTkJRek5FY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJhVUo2TjBNc1dVRkJZeXc0UTBGWk0wUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVkxGRkJRVlVzVTBGQlUzWkRMRWRCUXpORGJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFVc1VVRkJVWFJETEdkQ1FVRnBRaXhQUVVWd1J6VjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzVVVGQlUzbzNReXhGUVVGTE5IQkRMRk5CUTJ4RWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSTVRkRExGbEJRV01zY1VOQldXeEVLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrMHNVMEZCVnl4VFFVRlRjMHNzUjBGRE5VTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZVMWRVTXNSVUZCU3pSd1F5eFRRVU51UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVk0zZFVNc1dVRkJZeXh6UTBGTEwwTkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdNM2VrUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOd1JTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZCWXpFeFF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZUzlGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhReXhqUVVGak1URkRMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE0wVXNTVUZCVDBNc1JVRkJUU3hEUVVOWU1USkNMRXRCUVUxNU1rSXNSVUZCU1c5RExHZENRVU5XUXl4SlFVRkxNemRETEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1IwRkJSeXhKUVUxMlJDeFBRVWhKUkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkJZMjVUTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEYmtVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZEZUVNc1QwRkJUMnhETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZqYkVJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGJFWTRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkJZMnhDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRiRVlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZ2UTNkMFJDeEZRVUZQT1Zvc1dVRkRMME52Wml4RlFVRkpjME1zVVVGQlVYQXhSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSmRVTXNUMEZCVDNJeFJDeEhRVU5ZTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdNM2VrUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRiRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlkySXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETDBSQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwTXNZMEZCWTJJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOc1JpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVUaG5SQ3huUWtGRFRtb3dSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUM0JoTEZkQlEwd3NSVUZEUVM4elF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVTdG5SQ3hYUVVWV04wSXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmpOM3BFTEZWQlFWVTJNRVFzVVVGQlZTeFhRVU14UkN4UFFVRTRRbWc0UXl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlV6RkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZqTjNwRUxGVkJRVlYxTUVRc1kwRkJaMElzVjBGRGFFVXNUMEZCT0VJeE4wTXNSVUZCU3pSd1F5eFJRVUZSYjBNc1YwRkRka04yYWtRc1MwRkJTM1Y2UkN4WlFWZFliRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV00zZWtRc1ZVRkJWVEl3UkN4aFFVRmxMRmRCUXk5RUxFOUJRVzFET1RkRExFVkJRVXMwY0VNc1VVRkJVWEZETEZWQlF6VkRlR3BFTEV0QlFVdDFla1FzV1VGUldHeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUXl4alFVRmpOM3BFTEZWQlFWVjVNRVFzVVVGQlZTeFRRVUZUY0RGRUxFZEJRMjVGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdlJDeHZRa0ZCYjBKMmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmJrUnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV00zZWtRc1ZVRkJWVFF3UkN4UFFVRlRMRmRCUTNwRUxFOUJRU3RDTHpkRExFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWRCUVVjc1NVRlJiRVp4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdNM2VrUXNWVUZCVlRBd1JDeFBRVUZUTEZOQlFWTnlNVVFzUjBGRGJFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVV3RFTEhOQ1FVRnpRbkpyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVTlxUkhkYUxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRVTg1ZWtRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU0zUkN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJUek14UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllYaEZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZQTXpGRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEY0VVc1NVRkJUME1zUlVGQlRTeERRVU5ZTUVNc1IwRkJTV280UXl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzU1VGTkwwTXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRVTl3VXl4clFrRkJiMElzVTBGQlUyZFNMRWRCUXpWRUxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEZMRTlCUTNoRExFOUJRVTl1UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwVXNUMEZCVDI1Q0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6TkZPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRVTl1UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRek5GTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVHpOaExHRkJRekZEYVdkQ0xFVkJRVWswUXl4TlFVRk5NVEZFTEVkQlExWXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJUemw2UkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNelJDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZQWkN4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTjRSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBaQ3gzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRek5GTEVsQlFVbHVlVVFzUlVGRlRTeExRVVJXUVN4RlFVRkphVlFzUlVGQlVXMW9SQ3hWUVVWV2FrTXNSVUZCVHpsaExGbEJRMHdzUlVGRFFYSXpReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBPWHBFTEZWQlFWVm5NVVFzVFVGQlVTeFhRVU5xUkN4UFFVRTRRbTQ0UXl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVUZQT1hwRUxGVkJRVlVyTUVRc1RVRkJVU3hUUVVGVE1URkVMRWRCUXpGRUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRXJReXhyUWtGQmEwSnNhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRmhha1J6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZGRExHRkJRV1VzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZMY2tSeVF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVXdENMRk5CUVZjc1EwRkRNME5ETEdGQlFXTXNSVUZEWkVNc1VVRkJVeXhGUVVOVWREZERMRkZCUVZNc1IwRk5XRGd6UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWYnpGRUxGbEJRV01zVjBGRGVFUXNUMEZCYVVWMk9FTXNSVUZCU3pSd1F5eFJRVUZSYzBJc2FVSkJRV2xDZW1sRUxFdEJRVTF4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZGRExHRkJRV0VzUzBGTGJFcHVOME1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVTOTZSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlF6bEVMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUk5URkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoZWtWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRITEZGQlFWRTFNVU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTnlSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllhVVFzVVVGQlUzb3dSQ3hGUVVGSmRYaEVMRVZCUVVsdFJDeGpRVUZuUWpORUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSU3hQUVVGUE16RkRMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNSMEZETlVaemMwUXNVMEZCVlhSelJDeEZRVUZKZFhoRUxFVkJRVWx2UkN4bFFVRnBRalZFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsT1RGRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRkRWRwVkN4VFFVRlZhbFFzUlVGQlNYVjRSQ3hGUVVGSlowSXNaVUZCYVVKNFFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpTOHhReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFhoSExFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkZ5VXl4clFrRkJiMElzVTBGQlUyZFNMRWRCUXpkRUxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUTNoRExFOUJRVTl3UXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVhCQ0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6VkZPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkSExGRkJRVkZ3UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRelZGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJTeFBRVU14UTJwSUxFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRkxFOUJRVTl1UWl3MlFrRkRNVVJTTEVWQlFVbHhSQ3hWUVVGVmJqSkVMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGRE1VTndTQ3hGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhTeXhsUVVGbGRFSXNOa0pCUTJ4RlVpeEZRVUZKYzBRc1YwRkJWM0F5UkN4SFFVTm1MRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTkxHVkJRekZEY2tnc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJaWFpDTERaQ1FVTnNSVklzUlVGQlNWVXNWMEZCVjNoNlJDeEhRVU5tTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFdmVrUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkROVVFzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVXWXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEZWtSQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVdZc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNMVJTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVVscFZDeEZRVUZSZVdoRUxHTkJSVloyUXl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEZMRTlCUVU5a0xIbENRVWsxUWl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk1HaEVMR1ZCUlZaNFF5eEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFRaXg1UWtGSmNFTXNUMEZFVkhCNVJDeEZRVUZKYVZRc1JVRkJVWE12UXl4bFFVVldTaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTkxHVkJRV1ZzUWl3d1FrRlZMME55UWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWY3pGRUxGVkJRVmtzVjBGRGRFUXNUMEZEUlhvNFF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwVXNUMEZCVVN4SlFWRjZSVzVETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFJ5eFJRVUZSTDNwRUxGVkJRVlYzTVVRc1ZVRkJXU3hUUVVGVGJqSkVMRWRCUXk5RUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFdmVrUXNWVUZCVlRBeFJDeFpRVUZqTEZkQlEzaEVMRTlCUVU5d01FUXNTMEZCUzJzd1JDeGxRVUZWZGtNc1NVRlJlRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwY3NVVUZCVVM5NlJDeFZRVUZWTWpGRUxGVkJRVmtzVjBGRGRFUXNUMEZCZVVNc1RVRkJiRU01T0VNc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUkwzcEVMRlZCUVZWMU1VUXNWMEZCWVN4WFFVTjJSQ3hQUVVORk1UaERMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhTeXhsUVVGblFpeEpRVkZxUm5SRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUkwzcEVMRlZCUVZWNU1VUXNWMEZCWVN4VFFVRlRjREpFTEVkQlEyaEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUyUkN4eFFrRkJjVUpvYkVRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUnl4UlFVRlJReXhoUVVGaExFZEJRVWt6TUVRc1NVRlJka2R6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFdmVrUXNWVUZCVlRReFJDeGhRVUZsTEZkQlEzcEVMRTlCUVU5ME1FUXNTMEZCUzIwd1JDeG5Ra0ZCVjNoRExFbEJVWHBDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFdmVrUXNWVUZCVlRZeFJDeFhRVUZoTEZkQlEzWkVMRTlCUVhsRExFMUJRV3hEYURsRExFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVTOTZSQ3hWUVVGVmJYcEVMRmRCUVdFc1YwRkRka1FzVDBGRFJYUTJReXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlowSXNTVUZSYWtaMlF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMGNzVVVGQlVTOTZSQ3hWUVVGVk5ubEVMRmRCUVdFc1UwRkJVM2g2UkN4SFFVTm9SU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTmtRc2NVSkJRWEZDYUd4RUxFdEJRVTBzUlVGQlIzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBjc1VVRkJVVU1zWVVGQllTeEhRVUZKTXpCRUxFbEJVWFpIYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhSeXhSUVVGUkwzcEVMRlZCUVZVNE1VUXNZVUZCWlN4WFFVTjZSQ3hQUVVGUGVEQkVMRXRCUVV0MWVFUXNaMEpCUVZkSkxFbEJVWHBDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEhMRkZCUVZFdmVrUXNWVUZCVlNzeFJDeFhRVUZoTEZkQlEzWkVMRTlCUVhsRExFMUJRV3hEYkRsRExFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVTlxUTNWWUxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxTUVRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU55UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBzc1pVRkJaVGt4UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXaEdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsT1RGRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETlVVc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0doR0xFOUJRVkYyTUVNc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlEycEVhRVlzVlVGQlYzWnpSQ3hGUVVGSmRYaEVMRVZCUVVrMlJDeG5Ra0ZCYTBKeVJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWTjBjRU1zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hIUVVOc1IzRXhSQ3hUUVVGVmNqRkVMRVZCUVVsMWVFUXNSVUZCU1N0RUxHVkJRV2xDZWtNc1JVRkJORUl3UXl4VFFVRlRhRFJETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzU1VGTmNFY3NUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZCWlhaVExHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGNFVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGRGVFTXNUMEZCVDNSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhTeXhsUVVGbGRFSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhia1k0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwc3NaVUZCWlhSQ0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEYmtZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKYVVVc1ZVRkJWUzh5UkN4SFFVTmtMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVU14UTI5R0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUYTB3c05rSkJRelZFVWl4RlFVRkphMFVzV1VGQldXZ3pSQ3hIUVVOb1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmJ6QkVMRVZCUVRSQ01FTXNVMEZETlVOMFNpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5iekJFTEVWQlFUUkNNRU1zVTBGQlUzaEVMRFpDUVVNNVJGSXNSVUZCU1RkcFJDeFhRVUZYYWxFc1IwRkRaaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsYWpCRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEyNUZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZExMR1ZCUVdWcVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU5vUlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsYWtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOdVJpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVYbHBSQ3hoUVVOT05URkVMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkZ0YVVRc1owSkJSVlpxUkN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGRVd3NlVUpCU1RsQ0xFOUJSRlJ3ZVVRc1JVRkJTV2xVTEVWQlFWRnhhVVFzWlVGRlZtNUVMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFUWjVSQ3hGUVVFMFFqQkRMRk5CUVZOdVJDd3dRa0ZWTTBOeVFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMHNzWlVGQlpXb3dSQ3hWUVVGVmN6SkVMRlZCUVZrc1YwRkROMFFzVDBGQk9FSjZPVU1zUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBzc1pVRkJaV293UkN4VlFVRlZiekpFTEZWQlFWa3NVMEZCVXk4eVJDeEhRVU4wUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYQkVjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsYWpCRUxGVkJRVlZuTWtRc1dVRkJZeXhYUVVNdlJDeFBRVU5GYmpsRExFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrMHNVMEZCVlN4SlFWRXpSV3RMTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFN5eGxRVUZsYWpCRUxGVkJRVlZ4TWtRc1dVRkJZeXhUUVVGVGFETkVMRWRCUTNoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZExMR1ZCUVdWcU1FUXNWVUZCVlhVeVJDeGpRVUZuUWl4WFFVTnFSU3hQUVVGUGFqRkVMRXRCUVVzck1FUXNhVUpCUVZsd1JDeEpRVkV4UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhTeXhsUVVGbGFqQkVMRlZCUVZWM01rUXNXVUZCWXl4WFFVTXZSQ3hQUVVGNVF5eE5RVUZzUXpNNVF5eEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRMTEdWQlFXVnFNRVFzVlVGQlZXc3lSQ3hYUVVGaExGZEJRemxFTEU5QlEwVnlPVU1zUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxdGVVUXNSVUZCTkVJd1F5eFRRVUZWTEVsQlVUZEZlRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxTUVRc1ZVRkJWWE5RTEZkQlFXRXNVMEZCVTJwUkxFZEJRM1pGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxTUVRc1ZVRkJWWEZwUWl4aFFVRmxMRmRCUTJoRkxFOUJRVTh2WjBJc1MwRkJTMmRQTEdkQ1FVRlhNbXBFTEVsQlVYcENkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTExHVkJRV1ZxTUVRc1ZVRkJWWGt5UkN4WFFVRmhMRmRCUXpsRUxFOUJRWGxETEUxQlFXeEROVGxETEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFVOXFRM1ZZTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWROTEdWQlFXVnNNRVFzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTnlSU3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpTOHhReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVdoR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVFN4bFFVRmxMekZETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkROVVVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXREpFTEZkQlFWbHNPVU1zUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SFFVRkhMRWRCUXpWRWRVVXNaVUZCWjBJNU1VUXNSVUZCU1hWNFJDeEZRVUZKZDBVc2NVSkJRWFZDYUVZc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdNeE1VTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEhRVU5xU0djeVJDeEpRVUZMTHpsRExFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRbWRPTEVWQlFVc3NSMEZCUnl4SlFVMTJSQ3hQUVVoSlJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWlhoVExHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGNFVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGRGVFTXNUMEZCVDNaRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUU3hsUVVGbGRrSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhia1k0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWlhaQ0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEYmtZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKTUVVc1kwRkJZM2d6UkN4SFFVTnNRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVU14UTJoSUxFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkRExHTkJRV05zUWl3MlFrRkRha1ZTTEVWQlFVa3lSU3hwUWtGQmFVSjZNMFFzUjBGRGNrSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVazBSU3hQUVVGUE1UTkVMRWRCUTFnc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpXd3dSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU51UlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVFN4bFFVRmxiRUlzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFFVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpXeENMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRia1lzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRWRCUTFKeWVVUXNSVUZCU1dsVUxFVkJRVkZ0YWtRc2EwSkJSVlpxUlN4RlFVRlBkR0VzVlVGRFRDeEZRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkU0YVVRc2NVSkJSVlkxUkN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdOaUxEQkNRVWMxUTNCNVJDeEZRVUZKYVZRc1JVRkJVVzlxUkN4WFFVVldiRVVzUlVGQlQzUmhMRlZCUTB3c1JVRkRRVGN6UXl4SlFWVk9LM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFRTeGxRVUZsYkRCRUxGVkJRVlZuTTBRc1kwRkJaMElzVjBGRGFrVXNUMEZCSzBKdUswTXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpXd3dSQ3hWUVVGVk5qSkVMR05CUVdkQ0xGTkJRVk40TTBRc1IwRkRNVVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVd0RUxITkNRVUZ6UW5KclJDeExRVUZOTEVWQlFVZHFReXhKUVZGeVJITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjAwc1pVRkJaV3d3UkN4VlFVRlZNakpFTEdsQ1FVRnRRaXhYUVVOd1JTeFBRVU5GT1RsRExFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFF5eGpRVUZsTEVsQlVXaEdiRU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkTkxHVkJRV1ZzTUVRc1ZVRkJWVGd5UkN4cFFrRkJiVUlzVTBGQlUzb3pSQ3hIUVVNM1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUU3hsUVVGbGJEQkVMRlZCUVZWck0wUXNiVUpCUVhGQ0xGZEJRM1JGTEU5QlFVODFNVVFzUzBGQlMzY3hSQ3h6UWtGQmFVSTNSQ3hKUVZFdlFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVFN4bFFVRmxiREJFTEZWQlFWVnRNMFFzYVVKQlFXMUNMRmRCUTNCRkxFOUJRWGxETEUxQlFXeERkQ3RETEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwMHNaVUZCWld3d1JDeFZRVUZWYVRORUxFOUJRVk1zVjBGRE1VUXNUMEZCSzBKd0swTXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzUjBGQlJ5eEpRVkZzUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDBzWlVGQlpXd3dSQ3hWUVVGVkt6SkVMRTlCUVZNc1UwRkJVekV6UkN4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYTBRc2MwSkJRWE5DY210RUxFdEJRVTBzUlVGQlIycERMRWxCWVhKRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM1ZITEdGQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hKUVV0NFJISkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM2RJTEZOQlFWY3NRMEZETlVORExHRkJRV01zUlVGRFpFTXNVVUZCVXl4RlFVTlVkRGRETEZGQlFWTXNSVUZEVkhOM1F5eFRRVUZWTEVkQlRWcDNTQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRVk42ZEVRc1ZVRkJWVzh4UkN4WlFVRmpMRmRCUTNwRUxFOUJRV3RGZGpoRExFVkJRVXMwY0VNc1VVRkJVWE5DTEdsQ1FVRnBRbnBwUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNWSExHRkJRV0VzUzBGTGNFcHVOME1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjZkRVFzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTXZSQ3hQUVVGUFRpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjBka01zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRVk4wZGtNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU4wUlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZYVVRc1VVRkJVM293UkN4RlFVRkpkWGhFTEVWQlFVbHRSQ3hqUVVGblFqTkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIUlN4UFFVRlBNekZETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRE5VWnpjMFFzVTBGQlZYUnpSQ3hGUVVGSmRYaEVMRVZCUVVsdlJDeGxRVUZwUWpWRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUeXhuUWtGQlowSm9Na01zVTBGQlV5dDZReXhGUVVGcFFuUjRSQ3hIUVVOMlIybFVMRk5CUVZWcVZDeEZRVUZKZFhoRUxFVkJRVWxuUWl4bFFVRnBRbmhDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCWjBKcU1rTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEhRVU4yUjNsd1JDeFZRVUZYZW5CRUxFVkJRVWwxZUVRc1JVRkJTV2xHTEdkQ1FVRnJRbnBHTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFV5eHBRa0ZCYVVKc01rTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTAxUnl4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVeTlNTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZET1VRc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUTNoRExFOUJRVTlyUlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNUhMRk5CUVZOclJpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzNSVGhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTJ0R0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZETjBVc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZEZMRTlCUXpGRGFrZ3NSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIwVXNUMEZCVDI1Q0xEWkNRVU14UkZJc1JVRkJTWEZFTEZWQlFWVnVNa1FzUjBGRFpDeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVHl4blFrRkRNVU4wU0N4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVHl4blFrRkJaMEo0UWl3MlFrRkRia1ZTTEVWQlFVbHpSQ3hYUVVGWGNESkVMRWRCUTJZc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlF6RkRka2dzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENla0lzTmtKQlEyNUZVaXhGUVVGSlZTeFhRVUZYZUhwRUxFZEJRMllzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUXpGRGVFZ3NSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVdsQ01VSXNOa0pCUTNCRlVpeEZRVUZKYTBZc1dVRkJXV2cwUkN4SFFVTm9RaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNwMFJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTTNSQ3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzVkdMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpGRVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVSeXhUUVVGVGRVWXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTTNSU3hKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFVbHBWQ3hGUVVGUmVXaEVMR05CUlZaMlF5eEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRGTEU5QlFVOWtMSGxDUVVrMVFpeFBRVVJVY0hsRUxFVkJRVWxwVkN4RlFVRlJNR2hFTEdWQlJWWjRReXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUExHZENRVUZuUW01Q0xIbENRVWx5UXl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUmN5OURMR1ZCUlZaS0xFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENjRUlzZVVKQlNYSkRMRTlCUkZSd2VVUXNSVUZCU1dsVUxFVkJRVkYxYWtRc1owSkJSVlp5UlN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFRMR2xDUVVGcFFuSkNMREJDUVZWcVJISkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZjekZFTEZWQlFWa3NWMEZEZGtRc1QwRkRSWG80UXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBVc1QwRkJVU3hKUVZGNlJXNURMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZkekZFTEZWQlFWa3NVMEZCVTI0eVJDeEhRVU5vUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNwMFJDeFZRVUZWTURGRUxGbEJRV01zVjBGRGVrUXNUMEZCVDNBd1JDeExRVUZMYXpCRUxHVkJRVlYyUXl4SlFWRjRRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNwMFJDeFZRVUZWTWpGRUxGVkJRVmtzVjBGRGRrUXNUMEZCZVVNc1RVRkJiRU01T0VNc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhia2NzVTBGQlUzcDBSQ3hWUVVGVmRURkVMRmRCUVdFc1YwRkRlRVFzVDBGRFJURTRReXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXbENMRWxCVVd4R2VFTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1Unl4VFFVRlRlblJFTEZWQlFWVjVNVVFzVjBGQllTeFRRVUZUY0RKRUxFZEJRMnBGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VKb2JFUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNWSExHRkJRV0VzUjBGQlNUTXdSQ3hKUVZGNFIzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1SExGTkJRVk42ZEVRc1ZVRkJWVFF4UkN4aFFVRmxMRmRCUXpGRUxFOUJRVTkwTUVRc1MwRkJTMjB3UkN4blFrRkJWM2hETEVsQlVYcENkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZUZW5SRUxGVkJRVlUyTVVRc1YwRkJZU3hYUVVONFJDeFBRVUY1UXl4TlFVRnNRMmc1UXl4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVSeXhUUVVGVGVuUkVMRlZCUVZWdGVrUXNWMEZCWVN4WFFVTjRSQ3hQUVVORmREWkRMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQmFVSXNTVUZSYkVaNlF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjZkRVFzVlVGQlZUWjVSQ3hYUVVGaExGTkJRVk40ZWtRc1IwRkRha1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRaRUxIRkNRVUZ4UW1oc1JDeExRVUZOTEVWQlFVZHhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVJ5eFRRVUZUZFVjc1lVRkJZU3hIUVVGSk16QkVMRWxCVVhoSGMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZPREZFTEdGQlFXVXNWMEZETVVRc1QwRkJUM2d3UkN4TFFVRkxkWGhFTEdkQ1FVRlhTU3hKUVZGNlFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZLekZFTEZkQlFXRXNWMEZEZUVRc1QwRkJlVU1zVFVGQmJFTnNPVU1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrY3NVMEZCVTNwMFJDeFZRVUZWYnpORUxGbEJRV01zVjBGRGVrUXNUMEZEUlhZclF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVd0Q0xFbEJVVzVHTVVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVSeXhUUVVGVGVuUkVMRlZCUVZWeE0wUXNXVUZCWXl4VFFVRlRhRFJFTEVkQlEyeEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUyUkN4eFFrRkJjVUpvYkVRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM1ZITEdGQlFXRXNSMEZCU1RNd1JDeEpRVkY0UjNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVITEZOQlFWTjZkRVFzVlVGQlZYTXpSQ3hqUVVGblFpeFhRVU16UkN4UFFVRlBhREpFTEV0QlFVc3JNVVFzYVVKQlFWbHdSU3hKUVZFeFFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmtjc1UwRkJVM3AwUkN4VlFVRlZkVE5FTEZsQlFXTXNWMEZEZWtRc1QwRkJlVU1zVFVGQmJFTXhLME1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlQycERkVmdzUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMDhzWjBKQlFXZENiakJFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRkRVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRQTEdkQ1FVRm5RbWd5UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXcEdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFR5eG5Ra0ZCWjBKb01rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNM1JTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWFrWXNWVUZCVjNaelJDeEZRVUZKZFhoRUxFVkJRVWsyUkN4blFrRkJhMEp5UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZOMGNFTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTF3Unl4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVHl4blFrRkJaMEo2VXl4clFrRkJiMElzVTBGQlUyZFNMRWRCUTNKRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVONFF5eFBRVUZQZUVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFuaENMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWM0JHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFuaENMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGNFWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVTXhRMjlHTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRhMHdzTmtKQlF6VkVVaXhGUVVGSmEwVXNXVUZCV1dnelJDeEhRVU5vUWl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhUeXhuUWtGQlowSnVNRVFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEY0VVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjA4c1owSkJRV2RDYmtJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRha1ZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjA4c1owSkJRV2RDYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOd1JpeEpRVUZKYm5sRUxFVkJSVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkZ0YVVRc1owSkJSVlpxUkN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGRVd3NNRUpCVlhwRGNrSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRQTEdkQ1FVRm5RbTR3UkN4VlFVRlZaekpFTEZsQlFXTXNWMEZEYUVVc1QwRkRSVzQ1UXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVlVzU1VGUk0wVnJTeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjA4c1owSkJRV2RDYmpCRUxGVkJRVlZ4TWtRc1dVRkJZeXhUUVVGVGFETkVMRWRCUTNwRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFBMR2RDUVVGblFtNHdSQ3hWUVVGVmRUSkVMR05CUVdkQ0xGZEJRMnhGTEU5QlFVOXFNVVFzUzBGQlN5c3dSQ3hwUWtGQldYQkVMRWxCVVRGQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRQTEdkQ1FVRm5RbTR3UkN4VlFVRlZkekpFTEZsQlFXTXNWMEZEYUVVc1QwRkJlVU1zVFVGQmJFTXpPVU1zUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlQycERkVmdzUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMUVzWjBKQlFXZENjREJFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRkRVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRSTEdkQ1FVRm5RbW95UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXcEdjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFVTeG5Ra0ZCWjBKcU1rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNM1JTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWMwVXNaVUZCWjBJNU1VUXNSVUZCU1hWNFJDeEZRVUZKZDBVc2NVSkJRWFZDYUVZc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdNeE1VTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTF1U0N4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVVN4blFrRkJaMEl4VXl4clFrRkJiMElzVTBGQlUyZFNMRWRCUTNKRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFJMR2RDUVVONFF5eFBRVUZQZWtNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFJMR2RDUVVGblFucENMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWM0JHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFJMR2RDUVVGblFucENMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGNFWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRETEdOQlF6RkRhRWdzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSME1zWTBGQlkyeENMRFpDUVVOcVJWSXNSVUZCU1RKRkxHbENRVUZwUW5velJDeEhRVU55UWl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQlowSndNRVFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEY0VVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFFc1owSkJRV2RDY0VJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRha1ZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFFc1owSkJRV2RDY0VJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOd1JpeEpRVUZKYm5sRUxFVkJSVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkU0YVVRc2NVSkJSVlkxUkN4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZERMR05CUVdOaUxEQkNRVlU1UTNKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQlowSndNRVFzVlVGQlZUSXlSQ3hwUWtGQmJVSXNWMEZEY2tVc1QwRkRSVGs1UXl4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjBNc1kwRkJaU3hKUVZGb1JteERMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVVN4blFrRkJaMEp3TUVRc1ZVRkJWVGd5UkN4cFFrRkJiVUlzVTBGQlUzb3pSQ3hIUVVNNVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVU3huUWtGQlowSndNRVFzVlVGQlZXc3pSQ3h0UWtGQmNVSXNWMEZEZGtVc1QwRkJUelV4UkN4TFFVRkxkekZFTEhOQ1FVRnBRamRFTEVsQlVTOUNkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkUkxHZENRVUZuUW5Bd1JDeFZRVUZWYlRORUxHbENRVUZ0UWl4WFFVTnlSU3hQUVVGNVF5eE5RVUZzUTNRclF5eEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZQYWtOMVdDeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFV5eHBRa0ZCYVVKeU1FUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOMlJTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVdsQ2JESkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoYkVaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRbXd5UXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRemxGTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWhvY1VRc1VVRkJVM2hJTEVWQlFVbDFlRVFzUlVGQlNYRkdMR05CUVdkQ09VUXNSVUZCY1VJMVFpeFBRVUZQTTNwRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRka1oxYzBRc1ZVRkJWM1p6UkN4RlFVRkpkWGhFTEVWQlFVazJSQ3huUWtGQmEwSnlSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVk4wY0VNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMXdSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmFVSXpVeXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRM1JGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVU40UXl4UFFVRlBNVU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUWpGQ0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYzSkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUWpGQ0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEY2tZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx4TUVRc1JVRkJjVUkxUWl4UFFVTnlRMnBHTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxeE1FUXNSVUZCY1VJMVFpeFBRVUZQWVN3MlFrRkRja1JTTEVWQlFVbHpSaXhWUVVGVmNEUkVMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlF6RkRiMFlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjVOTEZOQlFWTnJUQ3cyUWtGRE5VUlNMRVZCUVVsclJTeFpRVUZaYURORUxFZEJRMmhDTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFRMR2xDUVVGcFFuSXdSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU55UlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJhVUp5UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTnNSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVXl4cFFrRkJhVUp5UWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTNKR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4RlFVVkRMRTlCUkZSeWVVUXNSVUZCU1dsVUxFVkJRVkV5YWtRc1kwRkZWbnBGTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRVGg1UkN4RlFVRnhRalZDTEU5QlFVOXJRaXg1UWtGSmRrSXNUMEZFVkhCNVJDeEZRVUZKYVZRc1JVRkJVVzFwUkN4blFrRkZWbXBFTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZOMVRDd3dRa0ZWZWtOeVFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMU1zYVVKQlFXbENjakJFTEZWQlFWVjNNMFFzVlVGQldTeFhRVU12UkN4UFFVTkZNeXRETEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmIzbEVMRVZCUVhGQ05VSXNUMEZCVVN4SlFWRndSVWdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUW5Jd1JDeFZRVUZWZVRORUxGVkJRVmtzVTBGQlUzQTBSQ3hIUVVONFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhVeXhwUWtGQmFVSnlNRVFzVlVGQlZUQXpSQ3haUVVGakxGZEJRMnBGTEU5QlFVOXdNa1FzUzBGQlMyMHlSQ3hsUVVGVmVFVXNTVUZSZUVKMFFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMU1zYVVKQlFXbENjakJFTEZWQlFWVXlNMFFzVlVGQldTeFhRVU12UkN4UFFVRjVReXhOUVVGc1F6a3JReXhGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUW5Jd1JDeFZRVUZWWnpKRUxGbEJRV01zVjBGRGFrVXNUMEZEUlc0NVF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyNU5MRk5CUVZVc1NVRlJNMFZyU3l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxTXNhVUpCUVdsQ2NqQkVMRlZCUVZWeE1rUXNXVUZCWXl4VFFVRlRhRE5FTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRUTEdsQ1FVRnBRbkl3UkN4VlFVRlZkVEpFTEdOQlFXZENMRmRCUTI1RkxFOUJRVTlxTVVRc1MwRkJTeXN3UkN4cFFrRkJXWEJFTEVsQlVURkNkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkVExHbENRVUZwUW5Jd1JDeFZRVUZWZHpKRUxGbEJRV01zVjBGRGFrVXNUMEZCZVVNc1RVRkJiRU16T1VNc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJWWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUmRFTXNaMEpCUVd0Q0xFTkJRVU1zUjBGSmFrUnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzVVVGQlVYUXdSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlF6bEVMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUmJqSkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoZWtWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRWTEZGQlFWRnVNa01zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTnlSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllkMFlzVjBGQk1rUXNUMEZCT1VOb00wUXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRakpPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4SFFVMW9SaXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUk5WTXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTTNSQ3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIVlN4UlFVTjRReXhQUVVGUE0wTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRWTEZGQlFWRXpRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmMxUlRoRkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUk0wSXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNMVJTeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrd1JpeFZRVUZWZURSRUxFZEJRMlFzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVVhRd1JDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTTFSQ3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUmRFSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEZWtSQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIxVXNVVUZCVVhSQ0xIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE5VVXNTVUZCU1c1NVJDeEhRVU5LUVN4RlFVRkphVlFzUlVGQlVXbHJSQ3hwUWtGRFRuQXpSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUemxWTEc5Q1FVTk1MRVZCUTBGeU9VTXNTVUZWVGl0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzVVVGQlVYUXdSQ3hWUVVGVk9ETkVMR05CUVdkQ0xGZEJRekZFTEU5QlFYTkRhaTlETEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFbEJVVFZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUmREQkVMRlZCUVZVck0wUXNZMEZCWjBJc1UwRkJVekUwUkN4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEhRVUZUTEV0QlUycEVjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZERCRUxGVkJRVlUyTTBRc1ZVRkJXU3hUUVVGVGVEUkVMRVZCUVU5cE1FUXNSMEZEZEVVc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRjFSQ3h0UWtGQmJVSXhhMFFzUzBGQlRTeEZRVUZIYWtNc1JVRkJUMmt3UkN4SlFWRjZSRE5DTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSFZTeFJRVUZSZERCRUxGVkJRVlZuTkVRc1owSkJRV3RDTEZkQlF6VkVMRTlCUVU4eE1rUXNTMEZCUzNreVJDeGpRVUZqTEV0QlQzaENiQzlETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRlbTVFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRMMFFzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRkSEJETEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaE1VVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUZEhCRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZEVVc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0RaR0xFOUJRVkZ5TTBRc1JVRkJTWFY0UkN4RlFVRkpLMFlzV1VGQlkzUXpSQ3hGUVVGRmRXUXNVMEZCVXl0NlF5eEZRVUZwUWxBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZFZMRkZCUVZGdU1rTXNWVUZCV1N4SlFVMHhSeXhQUVVoSkszcERMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiazBzVTBGQlV5OUdMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRPVVFzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRM2hETEU5QlFVOXJTeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI1TkxGTkJRVk5yVEN3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjM1JUaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYmswc1UwRkJVMnRNTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkROMFVzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUZST0hsRUxFVkJRVWtyUml4WFFVTm9RbkpNTEVWQlFVODVXQ3haUVVGWk1URkRMRWRCUVU4c1UwRkJVM2RWTEVWQlFWTm5OVU1zUjBGRE1VTm9NRU1zUlVGQlMzRnVReXhKUVVGSmQwSXNhMEpCUVd0Q04zUkRMRVZCUVZObk5VTXNSVUZCVVdnd1F5eEZRVUZMY1RaQ0xHRkJRV0ZzZWtNc1ZVRkJWVFo1UXl4WFFVRlphRFpDTEVWQlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVkt6QkRMRmxCUVdFMFl5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMVVzVVVGQlVUTkNMRFJDUVVFMlFpeEhRVUZKTEVsQlFVbG9RaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjFVc1dVRkZhRThzVFVGRFJpeFJRVU5GZWtnc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJrMHNVMEZCVTNwdVJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTTNSQ3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiazBzVTBGQlUzVk1MSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpGRVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHVUU3hUUVVGVGRVd3NkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTTNSU3hKUVVGSmJubEVMRTlCUVVseGVVUXNSMEZEVW5KNVJDeEZRVUZKYVZRc1JVRkJVWEZyUkN4VlFVRlRMRXRCUTFwME0wUXNSVUZCUlhOblJDeFpRVUZqTEVkQlEzWkNkR2RFTEVWQlFVVTJaMFFzWjBKQlFXZENMRVZCUVVkelVpeEZRVUZSYkRaRExFVkJRVXRyYUVNc1lVRkJZUzgxUXl4VlFVRlZPRFJETEZsQlFXRnFaME1zUlVGQlMydG9ReXhoUVVGaEx6VkRMRlZCUVZWdk9FTXNZVUZCWTNWV0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhWU3hSUVVGUmRFSXNNRUpCVjNSS2NrSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR1VFN4VFFVRlRlbTVFTEZWQlFWVnJORVFzVTBGQlZ5eFRRVUZUUXl4SFFVTXZSQ3hQUVVOSmRDOURMRVZCUVVzMGNFTXNVVUZCVVRaRExGbEJRVmxvYTBRc1MwRkJUU3hGUVVGSE5qSkVMRVZCUTJ4RGVFY3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRWTEZWQlVXaERNME1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdVRTeFRRVUZUZW01RUxGVkJRVlZ2TkVRc1YwRkJZU3hYUVVWNFJDeFBRVVJCT1RKRUxFdEJRVXMwTWtRc1YwRkJWMjVxUkN4UlFVTlVlbFFzVFVGSFZHTXNSVUZCUzNSRExFOUJRVTh5Vml4UFFVRlBOMWdzUlVGQlV5dDZSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNTeXhqUXk4elJXNUVMRWxCUVVremVFUXNSVUZIU2tFc1JVRkJTU3hYUVVOSUxFOUJRVTlZTEV0QlJFb3NSMEZKU2l4SlFVVkRWeXhGUVVGSlFTeEhRVUZMTEVsQlFVbHZTU3hUUVVGVExHTkJRV0lzUjBGRFVpeE5RVUZQTVVvc1IwRkZZeXhwUWtGQldETkRMRk5CUVhGQ2FVVXNSVUZCU1dwRkxGRkJUM0pEU0N4RlFVRlBSQ3hSUVVGVmNVVXNSeXhuUWtOT2FrSXNTVUZCU1RSWExFVkJRVThzUlVGQlVTeEhRVU5tZWxjc1JVRkJUM2xYTEVWQlExQjRXQ3hGUVVGVkxGZEJRMW9zVDBGQlNVTXNTMEZCWlVFc1MwRkRSeXh2UWtGQldIUkVMRTlCUVdsRFFTeFpRVU4wUWl4SlFVRlljVVFzUlVGQmFVTkJMRVZCUTNoQ0xHOUNRVUZVWjBJc1MwRkJLMEpCTEV0QlEyNURaMGtzVTBGQlV5eGpRVUZVUVN4SlFVTlFPVXdzUzBGQlN5eE5RVVZJT0RWRUxFVkJRVFJDTEVWQlFWRXNSMEZEZUVOcU1rUXNSVUZCUzNSRExFOUJRVTh5Vml4UFFVRlBhemhETEUxQlFVOHdSeXhIUVVNeFFtb3lSQ3hGUVVGTE5Fb3NZVUZCWVN4NVEwRkJNRU1zUzBGQlRUTkxMRWRCUTJ4RlpTeEZRVUZMTkVvc1lVRkJZU3d3UTBGQk1rTXNTMEZCVFROTExFZEJRMjVGWlN4RlFVRkxORW9zWVVGQllTd3lRMEZCTkVNc1MwRkJUVE5MTEVkQlEzQkZaU3hGUVVGTE5Fb3NZVUZCWVN3MFEwRkJOa01zUzBGQlRUTkxMRWRCUTNKRlpTeEZRVUZMTkVvc1lVRkJZU3hwUTBGQmEwTXNTMEZCVFROTExFZEJWekZFYzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITUVVc1dVRkJZeXhUUVVGVGRrY3NSMEZEZUVOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVdGNkwwTXNSVUZCU3pSd1F5eFRRVU12UTNKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZreEwwTXNXVUZCWXl4clEwRlpMME1yTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN5UlN4dlFrRkJjMElzVTBGQlUzaEhMRWRCUTJoRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3lSU3h2UWtGQmNVSXhMME1zUlVGQlN6UndReXhUUVVOMlJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekpGTEc5Q1FVRnZRak12UXl4WlFVRmpMREJEUVZsMlJDczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6UkZMSEZDUVVGMVFpeFRRVUZUZWtjc1IwRkRha1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpSRkxIRkNRVUZ6UWpNdlF5eEZRVUZMTkhCRExGTkJRM2hFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5FVXNjVUpCUVhGQ05TOURMRmxCUVdNc01rTkJXWGhFS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITmtVc2MwSkJRWGRDTEZOQlFWTXhSeXhIUVVOc1JHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlFYVkNOUzlETEVWQlFVczBjRU1zVTBGRGVrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMyUlN4elFrRkJjMEkzTDBNc1dVRkJZeXcwUTBGWmVrUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzRSU3gxUWtGQmVVSXNVMEZCVXpOSExFZEJRMjVFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZDBJM0wwTXNSVUZCU3pSd1F5eFRRVU14UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6aEZMSFZDUVVGMVFqa3ZReXhaUVVGakxEWkRRVXQwUkVNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsME5FUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNelJDeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlFWbHVOa01zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGMFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsdU5rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOc1JTeEpRVUZQUXl4RlFVRk5MRU5CUTFob2RFUXNTMEZCVFhsVUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRbWxPTEVWQlFVc3NSVUZCUnl4SlFVTXZRM2RITEZGQlFWTTVMME1zUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRXRCVFhCRUxFOUJTRWxFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1FVXNXVUZCV1RWWExHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE1VUXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRMnBETEU5QlFVOHpSeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZrelJpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZDZSVGhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhNRVVzV1VGQldUTkdMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGVrVXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmVVY3NVVUZCVVhZMVJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKTUVjc1YwRkJWM2cxUkN4SFFVTm1MRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3dSU3haUVVGWmREUkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRM3BFTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjd1JTeFpRVUZaZEVZc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRkRVJCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsMFJpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEzcEZMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEhRVU5TY25sRUxFVkJRVWxwVkN4RlFVRlJhV3hFTEZkQlEwNXdORVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRnJiRVFzWTBGRFRuSTBSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVlZPSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITUVVc1dVRkJXWFEwUkN4VlFVRlZPRFJFTEZGQlFWVXNWMEZEYWtRc1QwRkJPRUpxWjBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlFWbDBORVFzVlVGQlZUUTBSQ3hSUVVGVkxGTkJRVk4yTlVRc1IwRkRNVVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UW5SclJDeExRVUZOTEVWQlFVZHFReXhKUVZGd1JITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZsME5FUXNWVUZCVlNzMFJDeFhRVUZoTEZkQlEzQkVMRTlCUVRoQ2JHZEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjd1JTeFpRVUZaZERSRUxGVkJRVlUyTkVRc1YwRkJZU3hUUVVGVGVEVkVMRWRCUXpkRUxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRnRSQ3h4UWtGQmNVSjBhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlBhRVIzV2l4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1rVXNiMEpCUVc5Q2RqUkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGJrVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN5UlN4dlFrRkJiMEp3TmtNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRTVSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekpGTEc5Q1FVRnZRbkEyUXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRekZGTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWcwUnl4UFFVRlJibWRFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhKUVVOcVJHaEhMR0ZCUVdOMmNrUXNSVUZCU1hWNFJDeEZRVUZKT0Vjc2JVSkJRWEZDZEVnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN3UlN4WlFVRlpialpETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzU1VGTmRFY3NUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekpGTEc5Q1FVRnZRamRYTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEYkVVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekpGTEc5Q1FVTnFReXhQUVVGUE5VY3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjeVJTeHZRa0ZCYjBJMVJpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZHFSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhNa1VzYjBKQlFXOUNOVVlzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnFSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVa3JSeXhWUVVGVk56VkVMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRMjVEZWt3c1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6QkZMRmxCUVZrelJpdzJRa0ZEZUVSU0xFVkJRVWxuU0N4bFFVRmxPVFZFTEVkQlEyNUNMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVY3lSU3h2UWtGQmIwSjJORVFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYWtVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuWkdMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpsRVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWN5UlN4dlFrRkJiMEoyUml4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTJwR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUmRXeEVMR0ZCUTA0eE5FUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVVzlzUkN4dFFrRkZWbXhITEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSekJGTEZsQlFWbDBSaXd3UWtGVmNrTnlRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuWTBSQ3hWUVVGVmJ6VkVMRlZCUVZrc1YwRkRNMFFzVDBGQk9FSjJaMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuWTBSQ3hWUVVGVmF6VkVMRlZCUVZrc1UwRkJVemMxUkN4SFFVTndSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVVhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1rVXNiMEpCUVc5Q2RqUkVMRlZCUVZWcE5VUXNaVUZCYVVJc1YwRkRhRVVzVDBGRFJYQm5SQ3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpCRkxGbEJRV0VzU1VGUmRrVXpSeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuWTBSQ3hWUVVGVmJUVkVMR1ZCUVdsQ0xGTkJRVk01TlVRc1IwRkRla1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRSRUxHZENRVUZuUWk5clJDeExRVUZOTEVWQlFVZHFReXhKUVZFdlEzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6SkZMRzlDUVVGdlFuWTBSQ3hWUVVGVmNUVkVMR2xDUVVGdFFpeFhRVU5zUlN4UFFVRlBMek5FTEV0QlFVczJNMFFzYjBKQlFXVnNSeXhKUVZFM1FuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE1rVXNiMEpCUVc5Q2RqUkVMRlZCUVZWek5VUXNaVUZCYVVJc1YwRkRhRVVzVDBGQmVVTXNUVUZCYkVONlowUXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVDJwRGRWZ3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSelJGTEhGQ1FVRnhRbmcwUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRM0JGTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5FVXNjVUpCUVhGQ2NqWkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTDBWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMFJTeHhRa0ZCY1VKeU5rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNelJTeEpRVUZQUXl4RlFVRk5MRU5CUTFodFNDeFpRVUZoTVdkRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRbWxPTEVWQlFVc3NSVUZCUnl4TFFVMTRSQ3hQUVVoSlJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSelJGTEhGQ1FVRnhRamxYTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEYmtVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSelJGTEhGQ1FVTnFReXhQUVVGUE4wY3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMFJTeHhRa0ZCY1VJM1JpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZHNSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhORVVzY1VKQlFYRkNOMFlzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnNSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbHhTQ3hsUVVGbGJqWkVMRWRCUTI1Q0xFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMFJTeHhRa0ZCY1VKNE5FUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRiRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpSRkxIRkNRVUZ4UW5oR0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJReTlFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzBSU3h4UWtGQmNVSjRSaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRMnhHTEVsQlFVbHVlVVFzUjBGRFNrRXNSVUZCU1dsVUxFVkJRVkUwYkVRc2EwSkJRMDR2TkVRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zU1VGVlRpdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6UkZMSEZDUVVGeFFuZzBSQ3hWUVVGVmVUVkVMR1ZCUVdsQ0xGZEJRMnBGTEU5QlFUaENOV2RFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzBSU3h4UWtGQmNVSjRORVFzVlVGQlZYYzFSQ3hsUVVGcFFpeFRRVUZUYmpaRUxFZEJRekZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGUGFFUjNXaXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITmtVc2MwSkJRWE5DZWpSRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEY2tVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzJSU3h6UWtGQmMwSjBOa01zVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGb1JuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6WkZMSE5DUVVGelFuUTJReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF6VkZMRWxCUVU5RExFVkJRVTBzUTBGRFdEUkhMRTlCUVZGdVowUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFdEJUVzVFTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITmtVc2MwSkJRWE5DTDFjc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOd1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrclFpeEhRVUZITmtVc2MwSkJRMnBETEU5QlFVODVSeXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6WkZMSE5DUVVGelFqbEdMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWMjVHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1N0Q0xFZEJRVWMyUlN4elFrRkJjMEk1Uml3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRMjVHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTU3RITEZWQlFWVTNOVVFzUjBGRFpDeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE5rVXNjMEpCUVhOQ2VqUkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRMjVGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjMlJTeHpRa0ZCYzBKNlJpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU5vUlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhOa1VzYzBKQlFYTkNla1lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU51Uml4SlFVRkpibmxFTEVkQlEwcEJMRVZCUVVscFZDeEZRVUZSZFd4RUxHRkJRMDR4TkVRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zU1VGVlRpdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6WkZMSE5DUVVGelFubzBSQ3hWUVVGVmJ6VkVMRlZCUVZrc1YwRkROMFFzVDBGQk9FSjJaMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6WkZMSE5DUVVGelFubzBSQ3hWUVVGVmF6VkVMRlZCUVZrc1UwRkJVemMxUkN4SFFVTjBSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVDJoRWQxb3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSemhGTEhWQ1FVRjFRakUwUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRM1JGTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVa3JRaXhIUVVGSE9FVXNkVUpCUVhWQ2RqWkRMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoYWtaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZFVKMk5rTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNM1JTeEpRVUZQUXl4RlFVRk5MRU5CUTFodFNDeFpRVUZoTVdkRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRbWxPTEVWQlFVc3NSVUZCUnl4TFFVMTRSQ3hQUVVoSlJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSemhGTEhWQ1FVRjFRbWhZTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEY2tVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKSzBJc1IwRkJSemhGTEhWQ1FVTnFReXhQUVVGUEwwY3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZFVJdlJpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZHdSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4SFFVRkhPRVVzZFVKQlFYVkNMMFlzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTndSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbHhTQ3hsUVVGbGJqWkVMRWRCUTI1Q0xFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNTdENMRWRCUVVjNFJTeDFRa0ZCZFVJeE5FUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRjRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSkswSXNSMEZCUnpoRkxIVkNRVUYxUWpGR0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRMnBGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzRSU3gxUWtGQmRVSXhSaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRM0JHTEVsQlFVbHVlVVFzUjBGRFNrRXNSVUZCU1dsVUxFVkJRVkUwYkVRc2EwSkJRMDR2TkVRc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zU1VGVlRpdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpLMElzUjBGQlJ6aEZMSFZDUVVGMVFqRTBSQ3hWUVVGVmVUVkVMR1ZCUVdsQ0xGZEJRMjVGTEU5QlFUaENOV2RFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTU3RDTEVkQlFVYzRSU3gxUWtGQmRVSXhORVFzVlVGQlZYYzFSQ3hsUVVGcFFpeFRRVUZUYmpaRUxFZEJRelZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGSmNFUXJReXhGUVVGTGRFTXNUMEZCVHpKV0xFOUJRVTgzV0N4RlFVRlRLM3BFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWtyUWl4TExHZENRM0l4UWpWRExFbEJRVWt2TmtNc1JVRkJUeXhGUVVGUkxFZEJRMlo2Vnl4RlFVRlBlVmNzUlVGRFVIaFlMRVZCUVZVc1YwRkRXaXhQUVVGSlF5eExRVUZsUVN4TFFVTkhMRzlDUVVGWWRFUXNUMEZCYVVOQkxGbEJRM1JDTEVsQlFWaHhSQ3hGUVVGcFEwRXNSVUZEZUVJc2IwSkJRVlJuUWl4TFFVRXJRa0VzUzBGRGJrTm5TU3hUUVVGVExHTkJRVlJCTEVsQlExQTVUQ3hMUVVGTExFMUJSVWh0TjBRc1JVRkJjVUlzUlVGQlVTeEpRVU5xUTNRelJDeEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVOXJPRU1zVFVGQlR5dElMRWRCUXpGQ0xFbEJRVWxETEVWQlFXZERMRVZCUVZFc1NVRkROVU4yTTBRc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUGF6aERMRTFCUVU5blNTeEhRVU14UW5ZelJDeEZRVUZMTkVvc1lVRkJZU3gzUWtGQmVVSXNTMEZCVFROTExFZEJUMnBFYzNkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlF5eExRVUZQTEVsQlFVbG9hRVFzUlVGQlN6aHZReXh0UWtGRE4wSXNVMEZEUVN4RFFVRkRhMWtzUzBGQlRTeEhRVU5RU0N4RlFVRnRRa2tzVTBGRlpFb3NSVUZCYlVKSkxGTkJRV2xDTEZOQlEzcERMRWRCUlVwSUxFVkJRVGhDU1N4alFVRmpReXhwUWtGQmFVSXNWVUZCV1N4SlFVRkpibWhFTEVWQlFVdHZjRU1zZVVKQlF6bEZNRkFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxETEV0QlEycENhR2hFTEVWQlFVdHhOa0lzWVVGQllXeDZReXhWUVVGVkt6QkRMRmxCUXpWQ2JEaENMRVZCUVV0cmFFTXNZVUZCWVM4MVF5eFZRVUZWYnpoRExHRkJRelZDYzJRc1JVRkJiVUpKTEZOQlFWTTVSeXgzUWtGRE5VSXdSeXhGUVVGdFFra3NVMEZCVTI1SUxEWkNRVU0xUWl4SFFVZEtaMGdzUlVGQk9FSkpMR05CUVdORkxGZEJRVmNzVlVGQldYUkpMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpReXhMUVVWd1Jub3pSQ3hGUVVGTGRFTXNUMEZCVHpKV0xFOUJRVTgzV0N4RlFVRlRLM3BFTEUxQlFVMURMRTlCUVU5blNTeE5MR2RDUTNoRGVrTXNTVUZCU1M5blJDeEZRVUZQTEVWQlFWRXNSMEZEWm5wWExFVkJRVTk1Vnl4RlFVTlFlRmdzUlVGQlZTeFhRVU5hTEU5QlFVbERMRXRCUVdWQkxFdEJRMGNzYjBKQlFWaDBSQ3hQUVVGcFEwRXNXVUZEZEVJc1NVRkJXSEZFTEVWQlFXbERRU3hGUVVONFFpeHZRa0ZCVkdkQ0xFdEJRU3RDUVN4TFFVTnVRMmRKTEZOQlFWTXNZMEZCVkVFc1NVRkRVRGxNTEV0QlFVc3NUVUZGU0RnMVJDeEZRVUUwUWl4RlFVRlJMRWRCUTNoRGFqSkVMRVZCUVV0MFF5eFBRVUZQTWxZc1QwRkJUMnM0UXl4TlFVRlBNRWNzUjBGRE1VSXNTVUZCU1RORkxFVkJRWFZDTEVWQlFWRXNSMEZEYmtOMGVFUXNSVUZCUzNSRExFOUJRVTh5Vml4UFFVRlBhemhETEUxQlFVOHJRaXhIUVVNeFFuUjRSQ3hGUVVGTE5Fb3NZVUZCWVN3d1EwRkJNa01zUzBGQlRUTkxMRWRCUTI1RlpTeEZRVUZMTkVvc1lVRkJZU3h2UkVGQmNVUXNTMEZCVFROTExFZEJRemRGWlN4RlFVRkxORW9zWVVGQllTeHRSRUZCYjBRc1MwRkJUVE5MTEVkQlF6VkZaU3hGUVVGTE5Fb3NZVUZCWVN4dlJFRkJjVVFzUzBGQlRUTkxMRWRCUXpkRlpTeEZRVUZMTkVvc1lVRkJZU3h0UkVGQmIwUXNTMEZCVFROTExFZEJRelZGWlN4RlFVRkxORW9zWVVGQllTeHhSRUZCYzBRc1MwRkJUVE5MTEVkQlF6bEZaU3hGUVVGTE5Fb3NZVUZCWVN3eVEwRkJORU1zUzBGQlRUTkxMRWRCUTNCRlpTeEZRVUZMTkVvc1lVRkJZU3h4UkVGQmMwUXNTMEZCVFROTExFZEJRemxGWlN4RlFVRkxORW9zWVVGQllTeHZSRUZCY1VRc1MwRkJUVE5MTEVkQlF6ZEZaU3hGUVVGTE5Fb3NZVUZCWVN4eFJFRkJjMFFzUzBGQlRUTkxMRWRCUXpsRlpTeEZRVUZMTkVvc1lVRkJZU3h2UkVGQmNVUXNTMEZCVFROTExFZEJRemRGWlN4RlFVRkxORW9zWVVGQllTeHpSRUZCZFVRc1MwRkJUVE5MTEVkQlF5OUZaU3hGUVVGTE5Fb3NZVUZCWVN4M1EwRkJlVU1zUzBGQlRUTkxMRWRCUTJwRlpTeEZRVUZMTkVvc1lVRkJZU3g1UTBGQk1FTXNTMEZCVFROTExFZEJRMnhGWlN4RlFVRkxORW9zWVVGQllTeHRSRUZCYjBRc1MwRkJUVE5MTEVkQlF6VkZaU3hGUVVGTE5Fb3NZVUZCWVN4clJFRkJiVVFzUzBGQlRUTkxMRWRCUXpORlpTeEZRVUZMTkVvc1lVRkJZU3h2UkVGQmNVUXNTMEZCVFROTExFZEJRemRGWlN4RlFVRkxORW9zWVVGQllTdzRRMEZCSzBNc1MwRkJUVE5MTEVkQlEzWkZaU3hGUVVGTE5Fb3NZVUZCWVN4NVJFRkJNRVFzUzBGQlRUTkxMRWRCUTJ4R1pTeEZRVUZMTkVvc1lVRkJZU3dyUTBGQlowUXNTMEZCVFROTExFZEJRM2hGWlN4RlFVRkxORW9zWVVGQllTeDVRMEZCTUVNc1MwRkJUVE5MTEVkQlEyeEZaU3hGUVVGTE5Fb3NZVUZCWVN4elEwRkJkVU1zUzBGQlRUTkxMRWRCUXk5RVpTeEZRVUZMTkVvc1lVRkJZU3gzUkVGQmVVUXNTMEZCVFROTExFZEJRMnBHWlN4RlFVRkxORW9zWVVGQllTeDVSRUZCTUVRc1MwRkJUVE5MTEVkQlEyeEdaU3hGUVVGTE5Fb3NZVUZCWVN4NVEwRkJNRU1zUzBGQlRUTkxMRWRCVjJ4RmMzZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJaU3hUUVVGVGJra3NSMEZEYUVSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV055YUVRc1JVRkJTelJ3UXl4VFFVTjJSSEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXRjBhRVFzV1VGQll5d3dRMEZaZGtRck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxUnl4WlFVRmpMRk5CUVZOd1NTeEhRVU12UTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJZWFJvUkN4RlFVRkxOSEJETEZOQlEzUkVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldYWm9SQ3haUVVGakxIbERRVmwwUkNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RITEhOQ1FVRjNRaXhUUVVGVGNra3NSMEZEZWtSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSExITkNRVUYxUW5ab1JDeEZRVUZMTkhCRExGTkJRMmhGY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBjc2MwSkJRWE5DZUdoRUxGbEJRV01zYlVSQldXaEZLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVRCQ0xGTkJRVk4wU1N4SFFVTXpSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYbENlR2hFTEVWQlFVczBjRU1zVTBGRGJFVnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVSeXgzUWtGQmQwSjZhRVFzV1VGQll5eHhSRUZaYkVVck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3Unl4aFFVRmxMRk5CUVZOMlNTeEhRVU5vUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOU2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGMFJ5eGxRVVU1UmpWNFJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdONmFFUXNSVUZCU3pSd1F5eFRRVU4yUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0V4YUVRc1dVRkJZeXd3UTBGWmRrUXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYjBJc1UwRkJVM2hKTEVkQlEzSkViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMUtMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITWtjc2EwSkJRV3RDZGtjc1pVRkZia2MxZUVRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYlVJeGFFUXNSVUZCU3pSd1F5eFRRVU0xUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUWpOb1JDeFpRVUZqTEN0RFFWazFSQ3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6UkhMRzFDUVVGeFFpeFRRVUZUZWtrc1IwRkRkRVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelJITEcxQ1FVRnZRak5vUkN4RlFVRkxOSEJETEZOQlF6ZEVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhORWNzYlVKQlFXMUNOV2hFTEZsQlFXTXNaMFJCV1RkRUt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJXU3hUUVVGVE1Va3NSMEZETjBOc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVZEtMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWWHBKTEdkQ1FVRnBRaXhQUVVWMFJ6VjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlFWYzFhRVFzUlVGQlN6UndReXhUUVVOd1JISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZVM2FFUXNXVUZCWXl4MVEwRlpjRVFyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGbExGTkJRVk16U1N4SFFVTm9SR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUjBvc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaE1Va3NaMEpCUVdsQ0xFOUJSWHBITlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWXpkb1JDeEZRVUZMTkhCRExGTkJRM1pFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZVGxvUkN4WlFVRmpMREJEUVZsMlJDczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUY1UWl4VFFVRlROVWtzUjBGRE1VUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ5dEhMSFZDUVVGM1FqbG9SQ3hGUVVGTE5IQkRMRk5CUTJwRmNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSEswY3NkVUpCUVhWQ0wyaEVMRmxCUVdNc2IwUkJXV3BGS3pSRExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFUSkNMRk5CUVZNM1NTeEhRVU0xUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIWjBnc2VVSkJRVEJDTDJoRUxFVkJRVXMwY0VNc1UwRkRia1Z5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJlVUpvYVVRc1dVRkJZeXh6UkVGWmJrVXJORU1zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkcFNDeDFRa0ZCZVVJc1UwRkJVemxKTEVkQlF6RkViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMHNUMEZGZGtRemRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHBTQ3gxUWtGQmQwSm9hVVFzUlVGQlN6UndReXhUUVVOcVJYSm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGMVFtcHBSQ3haUVVGakxHOUVRVmxxUlNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRXdRaXhUUVVGVEwwa3NSMEZETTBSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJ0SUxIZENRVUY1UW1wcFJDeEZRVUZMTkhCRExGTkJRMnhGY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYTBnc2QwSkJRWGRDYkdsRUxGbEJRV01zY1VSQldXeEZLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWjBJc1UwRkJVMmhLTEVkQlEycEViRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZITEV0QlFVMUtMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTlITEdWQlJTOUdOWGhFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJaV3hwUkN4RlFVRkxOSEJETEZOQlEzaEVjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQlkyNXBSQ3haUVVGakxESkRRVmw0UkNzMFF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjlJTEhkQ1FVRXdRaXhUUVVGVGFrb3NSMEZETTBSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI5SUxIZENRVUY1UW01cFJDeEZRVUZMTkhCRExGTkJRMnhGY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYjBnc2QwSkJRWGRDY0dsRUxGbEJRV01zY1VSQldXeEZLelJETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGNVZ3NNRUpCUVRSQ0xGTkJRVk5zU2l4SFFVTTNSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjVWdzTUVKQlFUSkNjR2xFTEVWQlFVczBjRU1zVTBGRGNFVnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHhTQ3d3UWtGQk1FSnlhVVFzV1VGQll5eDFSRUZaY0VVck5FTXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkJNRUlzVTBGQlUyNUtMRWRCUXpORWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelNDeDNRa0ZCZVVKeWFVUXNSVUZCU3pSd1F5eFRRVU5zUlhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSUxIZENRVUYzUW5ScFJDeFpRVUZqTEhGRVFWbHNSU3MwUXl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVFeVFpeFRRVUZUY0Vvc1IwRkROVVJzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVjc1MwRkJUU3hQUVVWMlJETjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM1ZJTEhsQ1FVRXdRblJwUkN4RlFVRkxOSEJETEZOQlEyNUZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlFYbENkbWxFTEZsQlFXTXNjMFJCV1c1Rkt6UkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJhVUlzVTBGQlUzSktMRWRCUTJ4RWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUxS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQklMR1ZCUldoSE5YaEVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlowSjJhVVFzUlVGQlN6UndReXhUUVVONlJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWNGFVUXNXVUZCWXl3MFEwRlpla1FyTkVNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVTQ3cwUWtGQk9FSXNVMEZCVTNSS0xFZEJReTlFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1U0N3MFFrRkJOa0o0YVVRc1JVRkJTelJ3UXl4VFFVTjBSWEpuUkN4RlFVRkxZU3hSUVVGVlpDeFhRVXRxUW5kMlJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xJTERSQ1FVRTBRbnBwUkN4WlFVRmpMSGxFUVZsMFJTczBReXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUVyUWl4VFFVRlRka29zUjBGRGFFVnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QklMRFpDUVVFNFFucHBSQ3hGUVVGTE5IQkRMRk5CUTNaRmNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FZ3NOa0pCUVRaQ01XbEVMRmxCUVdNc01FUkJTMjVGUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMjVGTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZUzgzUXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllUbEZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVM4M1F5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXpGRkxFbEJRVTlETEVWQlFVMHNRMEZEV0cxS0xGVkJRVmN4YVVRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlEzQkVjVW9zVDBGQlVUTnBSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZEYWtSelNpeGpRVUZsTldsRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRbWxPTEVWQlFVc3NSVUZCUnl4SFFVTjRSSFZLTEdsQ1FVRnJRamRwUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzUzBGTk4wUXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoZUZrc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOc1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGRGVFTXNUMEZCVDNaSkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllYWklMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWMnBHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGRrZ3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOcVJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsM1NpeGhRVUZoZERoRUxFZEJRMnBDTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKZVVvc1ZVRkJWWFk0UkN4SFFVTmtMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQTldFc1lVRkRNVU5yWjBJc1JVRkJTVEJLTEdsQ1FVRnBRbmc0UkN4SFFVTnlRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTVEpLTEc5Q1FVRnZRbm80UkN4SFFVTjRRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd3MlJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTnFSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXeElMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpsRVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGJFZ3NkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTnFSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSMEZEVW5KNVJDeEZRVUZKYVZRc1JVRkJVV3R2UkN4blFrRkRUbkkzUkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQZW1Jc1dVRkRUQ3hGUVVOQk1USkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFWVk9LM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd3MlJDeFZRVUZWS3pkRUxHRkJRV1VzVjBGRE9VUXNUMEZCT0VKc2FrUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXRnNOa1FzVlVGQlZUSTNSQ3hoUVVGbExGTkJRVk4wT0VRc1IwRkRka1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UW5SclJDeExRVUZOTEVWQlFVZHFReXhKUVZGd1JITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0ZzTmtRc1ZVRkJWV2M0UkN4VlFVRlpMRmRCUXpORUxFOUJRVGhDYm1wRUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGJEWkVMRlZCUVZVME4wUXNWVUZCV1N4VFFVRlRkamhFTEVkQlEzQkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllXdzJSQ3hWUVVGVmFUaEVMRmxCUVdNc1YwRkROMFFzVDBGQlQzQnFSQ3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZhemhFTEZWQlFWa3NWMEZETTBRc1QwRkJlVU1zVFVGQmJFTnlha1FzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd3MlJDeFZRVUZWYlRoRUxHbENRVUZ0UWl4WFFVTnNSU3hQUVVFNFFuUnFSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZOamRFTEdsQ1FVRnRRaXhUUVVGVGVEaEVMRWRCUXpORkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd3MlJDeFZRVUZWYnpoRUxHMUNRVUZ4UWl4WFFVTndSU3hQUVVGUGRtcEVMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6Unl4aFFVRmhiRFpFTEZWQlFWVnhPRVFzYVVKQlFXMUNMRmRCUTJ4RkxFOUJRWGxETEUxQlFXeERlR3BFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdGc05rUXNWVUZCVlhNNFJDeHZRa0ZCYzBJc1YwRkRja1VzVDBGQk9FSjZha1FzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNOSExHRkJRV0ZzTmtRc1ZVRkJWVGczUkN4dlFrRkJjMElzVTBGQlUzbzRSQ3hIUVVNNVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdGc05rUXNWVUZCVlhVNFJDeHpRa0ZCZDBJc1YwRkRka1VzVDBGQlR6RnFSQ3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZV3cyUkN4VlFVRlZkemhFTEc5Q1FVRnpRaXhYUVVOeVJTeFBRVUY1UXl4TlFVRnNRek5xUkN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlBha04xV0N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXVzQyUkN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMnhGTEU5QlFVOU9MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXV2c0UXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllUZEZjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVY3NXVUZCV1dnNFF5eFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTNwRkxFbEJRVTlETEVWQlFVMHNRMEZEV0hGTExFbEJRVXMxYWtRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlF6bERkVXNzWlVGQlowSTNha1FzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SFFVRkhMRWxCVFd4RkxFOUJTRWxFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXWHBaTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEYWtVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVkhMRmxCUTNoRExFOUJRVTk0U1N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVkhMRmxCUVZsNFNDdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZG9SamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVY3NXVUZCV1hoSUxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEYUVZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKZDBzc1QwRkJUM1E1UkN4SFFVTllMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkplVXNzYTBKQlFXdENkamxFTEVkQlEzUkNMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVJ5eFpRVUZaYmpaRUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEyaEZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFSeXhaUVVGWmJrZ3NkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETjBSQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVkhMRmxCUVZsdVNDeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEyaEdMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEhRVU5TY25sRUxFVkJRVWxwVkN4RlFVRlJaM0JFTEZWQlEwNXVPRVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRnBjRVFzYzBKQlJWWXZTaXhGUVVGUGRHRXNWVUZEVEN4RlFVTkJOek5ETEVsQlZVNHJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVJ5eFpRVUZaYmpaRUxGVkJRVlUyT0VRc1QwRkJVeXhYUVVOMlJDeFBRVUU0UW1oclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldXNDJSQ3hWUVVGVk1qaEVMRTlCUVZNc1UwRkJVM1E1UkN4SFFVTm9SU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVVhCRWMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVjc1dVRkJXVzQyUkN4VlFVRlZPRGhFTEd0Q1FVRnZRaXhYUVVOc1JTeFBRVUVyUW1wclJDeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hIUVVGSExFbEJVV3hHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWNzV1VGQldXNDJSQ3hWUVVGVk5EaEVMR3RDUVVGdlFpeFRRVUZUZGpsRUxFZEJRek5GTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGclJDeHpRa0ZCYzBKeWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUGFrUjNXaXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGNzYzBKQlFYTkNjRFpFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkROVVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzUnl4elFrRkJjMEpxT0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRjJSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGelFtbzRReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEyNUdMRWxCUVU5RExFVkJRVTBzUTBGRFdIRkxMRWxCUVVzMWFrUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFdEJUV2hFTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGNzYzBKQlFYTkNNVmtzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU16UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwY3NjMEpCUTNoRExFOUJRVTk2U1N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGelFucElMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWekZHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNSeXh6UWtGQmMwSjZTQ3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6RkdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNYZExMRTlCUVU5ME9VUXNSMEZEV0N4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGNzYzBKQlFYTkNjRFpFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXpGRkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1J5eHpRa0ZCYzBKd1NDeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU4yUlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwY3NjMEpCUVhOQ2NFZ3NkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTXhSaXhKUVVGSmJubEVMRWRCUTBwQkxFVkJRVWxwVkN4RlFVRlJaM0JFTEZWQlEwNXVPRVFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZWVGl0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RITEhOQ1FVRnpRbkEyUkN4VlFVRlZOamhFTEU5QlFWTXNWMEZEYWtVc1QwRkJPRUpvYTBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGelFuQTJSQ3hWUVVGVk1qaEVMRTlCUVZNc1UwRkJVM1E1UkN4SFFVTXhSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUlVGQlIycERMRWxCVDJoRWQxb3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbEhMSGRDUVVGM1FuSTJSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlF6bEZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENiRGhETEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaGVrWnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVJ5eDNRa0ZCZDBKc09FTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOeVJpeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWJVb3NWMEZCV1RNMlJDeEZRVUZKZFhoRUxFVkJRVWswU2l4cFFrRkJiVUp3U3l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdFdk4wTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTB4Unl4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRWGRDTTFrc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNM1JTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlEzaERMRTlCUVU4eFNTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xITEhkQ1FVRjNRakZJTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpWR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1Unl4M1FrRkJkMEl4U0N3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRelZHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZETVVOeVRpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVhaSUxEWkNRVU5vUlZJc1JVRkJTWGRLTEdGQlFXRjBPRVFzUjBGRGFrSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNsSExIZENRVUYzUW5JMlJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTTFSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENja2dzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGVrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xITEhkQ1FVRjNRbkpJTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETlVZc1NVRkJTVzU1UkN4RlFVVkxMRTlCUkZSQkxFVkJRVWxwVkN4RlFVRlJhMjlFTEdsQ1FVVldhRW9zUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd4SUxEQkNRVlUzUTNKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhlVWNzZDBKQlFYZENjalpFTEZWQlFWVXJOMFFzWVVGQlpTeFhRVU42UlN4UFFVTkZiR3BFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZeXhKUVZFdlJYWkpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRWGRDY2paRUxGVkJRVlV5TjBRc1lVRkJaU3hUUVVGVGREaEVMRWRCUTJ4R0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVSeXgzUWtGQmQwSnlOa1FzVlVGQlZTczRSQ3hsUVVGcFFpeFhRVU16UlN4UFFVRlBlamRFTEV0QlFVdHhOa1FzYTBKQlFXRXhTU3hKUVZFelFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRWGRDY2paRUxGVkJRVlZuT1VRc1lVRkJaU3hYUVVONlJTeFBRVUY1UXl4TlFVRnNRMjVyUkN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRmhja054ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaGRFY3NZVUZCWlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVzeFJISkRMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZVEpETEZWQlFWa3NRMEZEYWtSRExHTkJRV1VzUlVGRFprTXNTMEZCVFN4RlFVTk9ReXhQUVVGUkxFZEJUVlo2VEN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGME5rUXNWVUZCVlhFNVJDeGhRVUZsTEZkQlF6bEVMRTlCUVhWRmVHdEVMRVZCUVVzMGNFTXNVVUZCVVhOQ0xHbENRVUZwUW5wcFJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllYUkhMR0ZCUVdFc1MwRkxOMHB1TjBNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0YwTmtRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU51UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0Z1T0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRTVSWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QkhMR0ZCUVdGdU9FTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNeFJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWEwd3NTMEZCVFhwclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1NVRkRMME40Uml4TlFVRlBMM0pFTEVWQlFVbDFlRVFzUlVGQlNXOU1MRmxCUVdNMVRDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RITEhOQ1FVRnpRbW80UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlEzWkhORGhFTEZGQlFWTTFPRVFzUlVGQlNYVjRSQ3hGUVVGSmMwd3NZMEZCWjBJNVRDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xITEhkQ1FVRjNRbXc0UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVsQlRTOUhMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaE5Wa3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnNSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkRlRU1zVDBGQlR6TkpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZVE5JTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjJwR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3Unl4aFFVRmhNMGdzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnFSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDFUQ3hSUVVGUmNpdEVMRWRCUTFvc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RITEhOQ1FVTXhRM1pPTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzUnl4elFrRkJjMEo2U0N3MlFrRkRla1ZTTEVWQlFVbDNUQ3hSUVVGUmRDdEVMRWRCUTFvc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xITEhkQ1FVTXhRM2hPTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1Unl4M1FrRkJkMEl4U0N3MlFrRkRNMFZTTEVWQlFVbDVUQ3hWUVVGVmRpdEVMRWRCUTJRc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBOa1FzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYWtVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0YwU0N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTTVSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZWFJJTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEYWtZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZGbmNVUXNWMEZEVG00NVJDeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVWxwVkN4RlFVRlJNSEJFTEZsQlJWWjRTeXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1J5eHpRa0ZCYzBKd1NDeDVRa0ZKTTBNc1QwRkVWSEI1UkN4RlFVRkphVlFzUlVGQlVUUndSQ3hqUVVWV01Vc3NSVUZCVHpOWExHRkJRMHdzUlVGRFFYZzNReXhGUVVOQkszZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZVVjc2QwSkJRWGRDY2tnc01FSkJWWGhFY2tJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaGREWkVMRlZCUVZVMk9VUXNVVUZCVlN4WFFVTjZSQ3hQUVVFNFFtaHNSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVVRGRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZWFEyUkN4VlFVRlZNRGxFTEZGQlFWVXNVMEZCVTNJclJDeEhRVU5zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYQkVjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FY3NZVUZCWVhRMlJDeFZRVUZWZFRsRUxGRkJRVlVzVjBGRGVrUXNUMEZEUlRGclJDeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZEhMSE5DUVVGMVFpeEpRVkY0Um5wSkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNRWNzWVVGQllYUTJSQ3hWUVVGVk1qbEVMRkZCUVZVc1UwRkJVM1FyUkN4SFFVTnNSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTmtRc2NVSkJRWEZDYUd4RUxFdEJRVTBzUlVGQlIzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSExHRkJRV0YwUnl4aFFVRmhMRWRCUVVrek1FUXNTVUZSTlVkemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3Unl4aFFVRmhkRFpFTEZWQlFWVTRPVVFzVlVGQldTeFhRVU16UkN4UFFVRlBlRGhFTEV0QlFVdHhPRVFzWVVGQlVURkxMRWxCVVhSQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3Unl4aFFVRmhkRFpFTEZWQlFWVXJPVVFzVVVGQlZTeFhRVU42UkN4UFFVRjVReXhOUVVGc1EyeHNSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1J5eGhRVUZoZERaRUxGVkJRVlY1T1VRc1ZVRkJXU3hYUVVNelJDeFBRVU5GTld0RUxFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVY3NkMEpCUVhsQ0xFbEJVVEZHTVVrc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dSeXhoUVVGaGREWkVMRlZCUVZVME9VUXNWVUZCV1N4VFFVRlRkaXRFTEVkQlEzQkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUyUkN4eFFrRkJjVUpvYkVRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVjc1lVRkJZWFJITEdGQlFXRXNSMEZCU1RNd1JDeEpRVkUxUjNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBOa1FzVlVGQlZXY3JSQ3haUVVGakxGZEJRemRFTEU5QlFVOHhPRVFzUzBGQlMzTTRSQ3hsUVVGVk0wc3NTVUZSZUVKMFFpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekJITEdGQlFXRjBOa1FzVlVGQlZXa3JSQ3hWUVVGWkxGZEJRek5FTEU5QlFYbERMRTFCUVd4RGNHeEVMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVdGeVEzRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5aSExHRkJRV1VzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4SlFVdHFSWEpETEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1rY3NhMEpCUVd0Q01rUXNWMEZCWVN4RFFVTjJSRU1zWlVGQlowSXNSVUZEYUVKRExGVkJRVmNzUlVGRFdFTXNTMEZCVFN4RlFVTk9ReXhOUVVGUExFZEJUVlF6VFN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVmRTdEVMR05CUVdkQ0xGZEJRM0JGTEU5QlFUWkZNV3hFTEVWQlFVczBjRU1zVVVGQlVYTkNMR2xDUVVGcFFucHBSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITWtjc2EwSkJRV3RDZGtjc1lVRkJZU3hMUVV0NFMyNDNReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENkalpFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRlRVVzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEp3T0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRnVSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuQTRReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF5OUZMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaHJUQ3hMUVVGTmVtdEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UW1sT0xFVkJRVXNzUlVGQlJ5eEpRVU12UTI5S0xGZEJRVmt6TmtRc1JVRkJTWFY0UkN4RlFVRkpORW9zYVVKQlFXMUNjRXNzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZoTHpkRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRlRWR2WjBRc1MwRkJUVzV2UXl4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzUjBGRGRFUm9jMFFzVDBGQlVYWkdMRVZCUVVsMWVFUXNSVUZCU1hSb1FpeGhRVUZsTm1sQ0xFVkJRWEZDTlVJc1QwRkJUek42UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVsQlRYWkdMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSTNXU3hyUWtGQmIwSXNVMEZCVTJkU0xFZEJRM1pGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZEZUVNc1QwRkJUelZKTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1rY3NhMEpCUVd0Q05VZ3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhkRVk0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFqVklMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGRFWXNTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmRVd3NVVUZCVVhJclJDeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVNeFEzSk9MRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGRrZ3NOa0pCUTJoRlVpeEZRVUZKZDBvc1lVRkJZWFE0UkN4SFFVTnFRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCWjBOM2RFUXNSVUZCVDJ4aExGZEJRek5EZDJZc1JVRkJTWEZOTEZGQlFWRnVMMFFzUjBGRFdpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmNUQkVMRVZCUVhGQ05VSXNUMEZEY2tOcVJpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jVEJFTEVWQlFYRkNOVUlzVDBGQlQyRXNOa0pCUTNKRVVpeEZRVUZKYzAwc1UwRkJVM0F2UkN4SFFVTmlMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBKMk5rUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRkRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekpITEd0Q1FVRnJRblpJTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlEyNUZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyU0N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTNSR0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUlozRkVMRmRCUTA1dU9VUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVV3R2UkN4cFFrRkZWbWhLTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdGc1NDeDVRa0ZKYkVNc1QwRkVWSEI1UkN4RlFVRTBRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjZSR3N2UXl4RlFVRlBkR0VzVlVGRFRDeEZRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkZuT1VJc1lVRkZWbXRwUWl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEU0ZVVRc1JVRkJjVUkxUWl4UFFVRlBhMElzTUVKQlZXeERja0lzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBKMk5rUXNWVUZCVlRZNVJDeFJRVUZWTEZkQlF6bEVMRTlCUVRoQ2FHeEVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWVEE1UkN4UlFVRlZMRk5CUVZOeUswUXNSMEZEZGtVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVXMUVMSEZDUVVGeFFuUnJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRndSSE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVkt6ZEVMR0ZCUVdVc1YwRkRia1VzVDBGRFJXeHFSQ3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM05ITEdGQlFXTXNTVUZSTDBWMlNTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSekpITEd0Q1FVRnJRblkyUkN4VlFVRlZNamRFTEdGQlFXVXNVMEZCVTNRNFJDeEhRVU0xUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5rUXNjVUpCUVhGQ2FHeEVMRXRCUVUwc1JVRkJSM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWkhMR0ZCUVdFc1IwRkJTVE13UkN4SlFWRnFTSE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVkt6aEVMR1ZCUVdsQ0xGZEJRM0pGTEU5QlFVOTZOMFFzUzBGQlMzRTJSQ3hyUWtGQllURkpMRWxCVVROQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWV2M1UkN4aFFVRmxMRmRCUTI1RkxFOUJRWGxETEUxQlFXeERibXRFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVk1DdEVMRkZCUVZVc1YwRkRPVVFzVDBGQkswSTNiRVFzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpKSExHdENRVUZyUW5ZMlJDeFZRVUZWZHl0RUxGRkJRVlVzVTBGQlUyNHZSQ3hIUVVOMlJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJkMFFzWTBGQll6TnJSQ3hMUVVGTkxFVkJRVWR4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJSeXhoUVVGaExFZEJRVWt6TUVRc1NVRlJNVWR6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3lSeXhyUWtGQmEwSjJOa1FzVlVGQlZUSXJSQ3hWUVVGWkxGZEJRMmhGTEU5QlFVODViRVFzUlVGQlN6UndReXhSUVVGUmQwUXNZMEZCWXpOclJDeExRVUZOTEVWQlFVZHhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjeVJ5eHJRa0ZCYTBKMlJ5eGhRVUZoTEZGQlFVbG1MRWxCVVRGSGRFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWVFFyUkN4UlFVRlZMRmRCUXpsRUxFOUJRWGxETEUxQlFXeERMMnhFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6SkhMR3RDUVVGclFuWTJSQ3hWUVVGVk5uZERMRk5CUVZjc1YwRkRMMFFzVDBGRFJXZzBRaXhGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFc5NVJDeEZRVUZ4UWpWQ0xFOUJRVkVzU1VGUmNFVklMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITWtjc2EwSkJRV3RDZGpaRUxGVkJRVlY1SzBRc1UwRkJWeXhUUVVGVGNDOUVMRWRCUTNoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENka2NzWVVGQllTeEhRVUZKTXpCRUxFbEJVV3BJYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhNa2NzYTBKQlFXdENkalpFTEZWQlFWVTJLMFFzVjBGQllTeFhRVU5xUlN4UFFVRlBkamxFTEV0QlFVdHRPVVFzWTBGQlUzaE1MRWxCVVhaQ2RFSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN5Unl4clFrRkJhMEoyTmtRc1ZVRkJWVGdyUkN4VFFVRlhMRmRCUXk5RUxFOUJRWGxETEUxQlFXeERhbTFFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFVOXFRM1ZZTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMwUnl4dFFrRkJiVUo0TmtRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU42UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpSSExHMUNRVUZ0UW5JNFF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZWEJHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhORWNzYlVKQlFXMUNjamhETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRhRVlzU1VGQlQwTXNSVUZCVFN4SFFVOWlMRTlCU0VsR0xFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5FY3NiVUpCUVcxQ09Wa3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTjRSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITkVjc2JVSkJRM2hETEU5QlFVODNTU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpSSExHMUNRVUZ0UWpkSUxEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYzWkdPRVVzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMFJ5eHRRa0ZCYlVJM1NDdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTNaR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGSlltbGFMRVZCUVU5d1dpeHBRa0ZIYWtKdldpeEZRVUZQTjFrc1dVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzBSeXh0UWtGQmJVSjROa1FzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEZGtVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpSSExHMUNRVUZ0UW5oSUxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRM0JGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMFJ5eHRRa0ZCYlVKNFNDeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEV0QlYzcEdjRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjMlJ5eFZRVUZWZWtrc1owSkJRV3RDTEVOQlFVTXNSMEZKYmtSdU5VTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZWNk5rUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOb1JTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZWME9FTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0V6UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlFWVjBPRU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTjJSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllNazBzVTBGQmVVUXNUMEZCT1VOdUswUXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRakpPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTTFSVzhyUkN4VFFVRlZibTFFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhKUVVOdVJEaE5MRmRCUVZsd2JVUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFdEJUWFpFTEU5QlNFbEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZTOVpMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRMMFFzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRM2hETEU5QlFVODVTU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlU1U0N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjNVJUaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWVGxJTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRPVVVzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpLMDBzVVVGQlVUY3ZSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSlowNHNXVUZCV1RrdlJDeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1dsT0xHTkJRV012TDBRc1IwRkRiRUlzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6WkhMRlZCUVZWNk5rUXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRPVVFzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSelpITEZWQlFWVjZTQ3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNelJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZYcElMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1IwRkRPVVVzU1VGQlNXNTVSQ3hQUVVGSmNYbEVMRWRCUTFKeWVVUXNSVUZCU1dsVUxFVkJRVkYzY2tRc1pVRkRUak1yUkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpsVkxHOUNRVU5NTEVWQlEwRnlPVU1zU1VGSFNrRXNSVUZCU1dsVUxFVkJRVkY1Y2tRc1pVRkRUalVyUkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVVkS1FTeEZRVUZKYVZRc1JVRkJVVEJ5UkN4cFFrRkRUamNyUkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWWG8yUkN4VlFVRlZjUzlFTEZsQlFXTXNWMEZETVVRc1QwRkJjME40YlVRc1JVRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENiR3BFTEV0QlFVMHNTVUZSTlVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMyUnl4VlFVRlZlalpFTEZWQlFWVjNMMFFzV1VGQll5eFRRVUZUYm1kRkxFZEJRMjVGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWRCUVZNc1MwRlRha1J6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmVqWkVMRlZCUVZWckwwUXNVVUZCVlN4VFFVRlROeTlFTEVWQlFVOXBNRVFzUjBGRGRFVXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkYxUkN4dFFrRkJiVUl4YTBRc1MwRkJUU3hGUVVGSGFrTXNSVUZCVDJrd1JDeEpRVkY2UkROQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhOa2NzVlVGQlZYbzJSQ3hWUVVGVmVTOUVMR05CUVdkQ0xGZEJRelZFTEU5QlFVOXVLMFFzUzBGQlMyc3JSQ3haUVVGWkxFdEJVVEZDTjA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmVqWkVMRlZCUVZWekwwUXNXVUZCWXl4WFFVTXhSQ3hQUVVFNFFucHRSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVVRGRmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWWG8yUkN4VlFVRlZiUzlFTEZsQlFXTXNVMEZCVXprdlJDeEhRVU51UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYQkVjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5rY3NWVUZCVlhvMlJDeFZRVUZWZFM5RUxHTkJRV2RDTEZkQlF6VkVMRTlCUVRoQ01XMUVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMyUnl4VlFVRlZlalpFTEZWQlFWVnZMMFFzWTBGQlowSXNVMEZCVXk4dlJDeEhRVU55UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUmJVUXNjVUpCUVhGQ2RHdEVMRXRCUVUwc1JVRkJSMnBETEVsQlZYQkVjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWVRGSkxHZENRVUZyUWl4RFFVRkRMRWRCU1hSRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaE1UWkVMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGJrVXNUMEZCVDA0c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaGRqaERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoT1VWeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhkamhETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRNVVVzU1VGQlQwTXNSVUZCVFN4RFFVTlljMDRzZVVKQlFUQkNOMjFFTEVWQlFVczBjRU1zVVVGQlVUQkNMR0ZCUVdGblR5eEZRVUZKZDA0c09FSkJRM2hFYUU4c1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzJSeXhWUVVGVmREaERMRk5CUVZVcmVrTXNSMEZET1VOM1N5eGxRVUZuUWpkcVJDeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWRCUVVjc1NVRk5iRVVzVDBGSVNVUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVYzRSeXhoUVVGaGFGb3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnNSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkRlRU1zVDBGQlR5OUpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZUzlJTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjJwR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhMMGdzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTnFSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRekZETlU0c1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpaSExGVkJRVlU1U0N3MlFrRkROMFJTTEVWQlFVbDVUaXgzUWtGQmQwSjJaMFVzUjBGRE5VSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVbDVTeXhyUWtGQmEwSjJPVVFzUjBGRGRFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRV0V4TmtRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGFrVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6aEhMR0ZCUVdFeFNDeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU01UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWVRGSUxIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRGFrWXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRTRja1FzSzBKQlEwNXFMMFFzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTgxVlN4eFFrRkRUQ3hGUVVOQmRqbERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWMyUnl4VlFVRlZla2dzTUVKQlIzaERjSGxFTEVWQlFVbHBWQ3hGUVVGUmFYQkVMSE5DUVVWV0wwb3NSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZVEUyUkN4VlFVRlZNaTlFTERSQ1FVRTRRaXhYUVVNM1JTeFBRVU5GT1cxRUxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE5rY3NWVUZCVnl4SlFWRndSamxKTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWVRFMlJDeFZRVUZWTmk5RUxEUkNRVUU0UWl4VFFVRlRlR2RGTEVkQlEzUkdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhNVFpFTEZWQlFWVTBMMFFzZDBKQlFUQkNMRk5CUVZOMlRTeEZRVUZYUXl4SFFVTTNSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITmtjc1ZVRkJWMjVJTEVsQlVYcEhNMElzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjNFJ5eGhRVUZoTVRaRUxGVkJRVlU0TDBRc09FSkJRV2RETEZkQlF5OUZMRTlCUVU5NEswUXNTMEZCUzNVclJDdzBRa0ZCTkVJc1MwRlJNVU5zVHl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6aEhMR0ZCUVdFeE5rUXNWVUZCVlRnNFJDeHJRa0ZCYjBJc1YwRkRia1VzVDBGQkswSnFhMFFzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpoSExHRkJRV0V4TmtRc1ZVRkJWVFE0UkN4clFrRkJiMElzVTBGQlUzWTVSQ3hIUVVNMVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJhMFFzYzBKQlFYTkNjbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJUMnBFZDFvc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYxUWpNMlJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXpkRkxFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSEswY3NkVUpCUVhWQ2VEaERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoZUVaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWNyUnl4MVFrRkJkVUo0T0VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU53Uml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZY1Vzc1NVRkJTelZxUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzU1VGRE9VTTBUaXhuUWtGQmFVSnVMMFFzUlVGQlNYVjRSQ3hGUVVGSk5rNHNjMEpCUVhkQ2NrOHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhkamhETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzU1VGTmNFZ3NUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ5dEhMSFZDUVVGMVFtcGFMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkROVVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVU40UXl4UFFVRlBhRW9zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjclJ5eDFRa0ZCZFVKb1NTdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWY3pSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSEswY3NkVUpCUVhWQ2FFa3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNelJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsM1N5eFBRVUZQZERsRUxFZEJRMWdzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6aEhMR0ZCUXpGRE4wNHNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6aEhMR0ZCUVdFdlNDdzJRa0ZEYUVWU0xFVkJRVWs0VGl4clFrRkJhMEkxWjBVc1IwRkRkRUlzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ5dEhMSFZDUVVGMVFqTTJSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU16UlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWFZDTTBnc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRlRVZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYxUWpOSUxIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE0wWXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRm5jRVFzVlVGRFRtNDRSQ3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVVscFZDeEZRVUZSYlhORUxITkNRVVZXYWs0c1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllURklMREJDUVZVM1EzSkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWFZDTXpaRUxGVkJRVlUyT0VRc1QwRkJVeXhYUVVOc1JTeFBRVUU0UW1oclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhLMGNzZFVKQlFYVkNNelpFTEZWQlFWVXlPRVFzVDBGQlV5eFRRVUZUZERsRUxFZEJRek5GTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmNFUnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjclJ5eDFRa0ZCZFVJek5rUXNWVUZCVldkblJTeHJRa0ZCYjBJc1YwRkROMFVzVDBGRFJXNXVSQ3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSemhITEdGQlFXTXNTVUZSTDBVdlNTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjFRak0yUkN4VlFVRlZhV2RGTEd0Q1FVRnZRaXhUUVVGVE5XZEZMRWRCUTNSR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3JSeXgxUWtGQmRVSXpOa1FzVlVGQlZXdG5SU3h2UWtGQmMwSXNWMEZETDBVc1QwRkJUelVyUkN4TFFVRkxNaXRFTEhWQ1FVRnJRbWhPTEVsQlVXaERkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjclJ5eDFRa0ZCZFVJek5rUXNWVUZCVlcxblJTeHJRa0ZCYjBJc1YwRkROMFVzVDBGQmVVTXNUVUZCYkVOMGJrUXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVDJwRGRWZ3NSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyZElMSGxDUVVGNVFqVTJSQ3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlF5OUZMRTlCUVU5T0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENlamhETEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaE1VWnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkblNDeDVRa0ZCZVVKNk9FTXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOMFJpeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWJVb3NWMEZCV1RNMlJDeEZRVUZKZFhoRUxFVkJRVWswU2l4cFFrRkJiVUp3U3l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTkhMR0ZCUVdFdk4wTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTB4Unl4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIWjBnc2VVSkJRWGxDYkZvc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNNVJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlEzaERMRTlCUVU5cVNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmRJTEhsQ1FVRjVRbXBKTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpkR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJlVUpxU1N3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRemRHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZETVVOeVRpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVhaSUxEWkNRVU5vUlZJc1JVRkJTWGRLTEdGQlFXRjBPRVFzUjBGRGFrSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJkSUxIbENRVUY1UWpVMlJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTTNSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENOVWdzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRE1VVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmRJTEhsQ1FVRjVRalZJTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETjBZc1NVRkJTVzU1UkN4RlFVVkxMRTlCUkZSQkxFVkJRVWxwVkN4RlFVRlJhMjlFTEdsQ1FVVldhRW9zUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwY3NZVUZCWVd4SUxEQkNRVlUzUTNKQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlFYbENOVFpFTEZWQlFWVXJOMFFzWVVGQlpTeFhRVU14UlN4UFFVTkZiR3BFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBjc1lVRkJZeXhKUVZFdlJYWkpMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIWjBnc2VVSkJRWGxDTlRaRUxGVkJRVlV5TjBRc1lVRkJaU3hUUVVGVGREaEVMRWRCUTI1R0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTBSQ3huUWtGQlowSXZhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJMME56ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZG5TQ3g1UWtGQmVVSTFOa1FzVlVGQlZTczRSQ3hsUVVGcFFpeFhRVU0xUlN4UFFVRlBlamRFTEV0QlFVdHhOa1FzYTBKQlFXRXhTU3hKUVZFelFuUkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIWjBnc2VVSkJRWGxDTlRaRUxGVkJRVlZuT1VRc1lVRkJaU3hYUVVNeFJTeFBRVUY1UXl4TlFVRnNRMjVyUkN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlBha04xV0N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYVVnc2RVSkJRWFZDTnpaRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZETjBVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkcFNDeDFRa0ZCZFVJeE9FTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0Y0Um5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmxJTEhWQ1FVRjFRakU0UXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM0JHTEVsQlFVOURMRVZCUVUwc1IwRlBZaXhQUVVoSlJpeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIybElMSFZDUVVGMVFtNWFMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkROVVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJsSUxIVkNRVU40UXl4UFFVRlBiRW9zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkcFNDeDFRa0ZCZFVKc1NTdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWY3pSamhGTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGFVZ3NkVUpCUVhWQ2JFa3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNelJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlNXSnBXaXhGUVVGUGNGb3NhVUpCUjJwQ2Ixb3NSVUZCVHpkWkxGbEJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhVWdzZFVKQlFYVkNOelpFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUXpORkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkcFNDeDFRa0ZCZFVJM1NDeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU40UlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGFVZ3NkVUpCUVhWQ04wZ3NkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4TFFWRjZSbXcyUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYTBnc2QwSkJRWGRDT1RaRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZET1VVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkclNDeDNRa0ZCZDBJek9FTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0Y2Um5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRjNRak00UXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM0pHTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWhvY1VRc1VVRkJVM2hJTEVWQlFVbDFlRVFzUlVGQlNYRkdMR05CUVdkQ09VUXNSVUZCY1VJMVFpeFBRVUZQTTNwRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1NVRk5la1lzVDBGSVNYTjRSQ3hKUVVOR1JTeEZRVUZKU3l4eFFrRkJkVUpPTEVkQlJYUkNReXhKUVZWVVZDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRjNRbkJhTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZETjBVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVONFF5eFBRVUZQYmtvc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHJTQ3gzUWtGQmQwSnVTU3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmMxUmpoRkxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENia2tzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTTFSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRVkVzU1VGQlNYRXdSQ3hGUVVGeFFqVkNMRTlCUTNKRGFrWXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWEV3UkN4RlFVRnhRalZDTEU5QlFVOWhMRFpDUVVOeVJGSXNSVUZCU1hOR0xGVkJRVlZ3TkVRc1IwRkRaQ3hOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGEwZ3NkMEpCUVhkQ09UWkVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRelZGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRyU0N4M1FrRkJkMEk1U0N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTjZSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYTBnc2QwSkJRWGRDT1Vnc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNMVJpeEpRVUZKYm5sRUxFVkJSVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkV5YWtRc1kwRkZWbnBGTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRVGg1UkN4RlFVRnhRalZDTEU5QlFVOXJRaXd3UWtGVmJFTnlRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjJ0SUxIZENRVUYzUWprMlJDeFZRVUZWZHpORUxGVkJRVmtzVjBGRGRFVXNUMEZEUlRNclF5eEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUVzk1UkN4RlFVRnhRalZDTEU5QlFWRXNTVUZSY0VWSUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENPVFpFTEZWQlFWVjVNMFFzVlVGQldTeFRRVUZUY0RSRUxFZEJReTlGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkclNDeDNRa0ZCZDBJNU5rUXNWVUZCVlRBelJDeFpRVUZqTEZkQlEzaEZMRTlCUVU5d01rUXNTMEZCUzIweVJDeGxRVUZWZUVVc1NVRlJlRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIydElMSGRDUVVGM1FqazJSQ3hWUVVGVk1qTkVMRlZCUVZrc1YwRkRkRVVzVDBGQmVVTXNUVUZCYkVNNUswTXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCWVhKRGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTlITEdGQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJTeTlFY2tNc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGamEwTXNWVUZCV1N4RFFVTnNSRU1zWTBGQlpTeEZRVU5tUXl4TFFVRk5MRVZCUTA1RExFOUJRVkVzUlVGRFVtbENMRXRCUVUwc1JVRkRUa01zVFVGQlR5eEhRVTFVTTAwc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakx6WkVMRlZCUVZWeE9VUXNZVUZCWlN4WFFVTXZSQ3hQUVVGM1JYaHJSQ3hGUVVGTE5IQkRMRkZCUVZGelFpeHBRa0ZCYVVKNmFVUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZSeXhoUVVGaExFdEJTeTlLYmpkRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEY0VVc1QwRkJUMDRzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTlRoRExGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhMMFZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGak5UaERMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE0wVXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdHdE1MRXRCUVUxNmEwUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFbEJReTlEZUVZc1RVRkJUeTl5UkN4RlFVRkpkWGhFTEVWQlFVbHZUQ3haUVVGak5Vd3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWNyUnl4MVFrRkJkVUo0T0VNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTjRSelE0UkN4UlFVRlROVGhFTEVWQlFVbDFlRVFzUlVGQlNYTk1MR05CUVdkQ09Vd3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJlVUo2T0VNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTTVSMjluUkN4TlFVRlBjR2RFTEVWQlFVbDFlRVFzUlVGQlNYVk5MRmxCUVdNdlRTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmxJTEhWQ1FVRjFRakU0UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlEzaEhkVVlzVDBGQlVYWkdMRVZCUVVsMWVFUXNSVUZCU1hSb1FpeGhRVUZsT0dkQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYZENNemhETEZOQlFWTXJla01zUlVGQmFVSjBlRVFzU1VGTk4wY3NUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdOeVdpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEyNUZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVTjRReXhQUVVGUGNFb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpjRWtzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYYkVZNFJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTndTU3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEyeEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNYVk1MRkZCUVZGeUswUXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhLMGNzZFVKQlF6RkRPVTRzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSeXRITEhWQ1FVRjFRbWhKTERaQ1FVTXhSVklzUlVGQlNYZE1MRkZCUVZGMEswUXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhaMGdzZVVKQlF6RkRMMDRzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmRJTEhsQ1FVRjVRbXBKTERaQ1FVTTFSVklzUlVGQlNYbE1MRlZCUVZWMkswUXNSMEZEWkN4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhVWdzZFVKQlF6RkRhRThzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmxJTEhWQ1FVRjFRbXhKTERaQ1FVTXhSVklzUlVGQlNYRk5MRkZCUVZGdUwwUXNSMEZEV2l4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlF6RkRhazhzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMnRJTEhkQ1FVRjNRbTVKTERaQ1FVTXpSVklzUlVGQlNYTk5MRk5CUVZOd0wwUXNSMEZEWWl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5ODJSQ3hWUVVGVmVXaEVMR2RDUVVGclFpeFhRVU5zUlN4SlFVRkpjMUlzUlVGQlV5eEpRVUZKYkRaRExFVkJRVXRyYUVNc1lVRkZkRUlzVDBGRVFUUllMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTlJTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlF5OUVRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMMGdzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU5zUml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUjBGRFVuSjVSQ3hGUVVGSmFWUXNSVUZCVVdkeFJDeFhRVU5PYmpsRUxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRXdjRVFzV1VGRlZuaExMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnl0SExIVkNRVUYxUWpOSUxIbENRVWsxUXl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk5IQkVMR05CUlZZeFN5eEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJlVUkxU0N4NVFrRkpPVU1zVDBGRVZIQjVSQ3hGUVVGSmFWUXNSVUZCVVRaeFJDeFpRVVZXTTB3c1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhVWdzZFVKQlFYVkNOMGdzZVVKQlNUVkRMRTlCUkZSd2VVUXNSVUZCU1dsVUxFVkJRVkZuT1VJc1lVRkZWbXRwUWl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHJTQ3gzUWtGQmQwSTVTQ3d3UWtGVmVFUnlRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWVFk1UkN4UlFVRlZMRmRCUXpGRUxFOUJRVGhDYUd4RUxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakx6WkVMRlZCUVZVd09VUXNVVUZCVlN4VFFVRlRjaXRFTEVkQlEyNUZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ0UkN4eFFrRkJjVUowYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSY0VSemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVjFPVVFzVVVGQlZTeFhRVU14UkN4UFFVTkZNV3RFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZISzBjc2RVSkJRWGRDTEVsQlVYcEdhRW9zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlV5T1VRc1VVRkJWU3hUUVVGVGRDdEVMRWRCUTI1RkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5OUhMR0ZCUVdFc1IwRkJTVE13UkN4SlFWRTNSM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdNdk5rUXNWVUZCVlRnNVJDeFZRVUZaTEZkQlF6VkVMRTlCUVU5NE9FUXNTMEZCUzNFNFJDeGhRVUZSTVVzc1NVRlJkRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdNdk5rUXNWVUZCVlNzNVJDeFJRVUZWTEZkQlF6RkVMRTlCUVhsRExFMUJRV3hEYkd4RUxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjFJTEdOQlFXTXZOa1FzVlVGQlZYazVSQ3hWUVVGWkxGZEJRelZFTEU5QlEwVTFhMFFzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWRuU0N4NVFrRkJNRUlzU1VGUk0wWnFTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWVFE1UkN4VlFVRlpMRk5CUVZOMkswUXNSMEZEY2tVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUWkVMSEZDUVVGeFFtaHNSQ3hMUVVGTkxFVkJRVWR4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakwwY3NZVUZCWVN4SFFVRkpNekJFTEVsQlVUZEhjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk4MlJDeFZRVUZWWnl0RUxGbEJRV01zVjBGRE9VUXNUMEZCVHpFNFJDeExRVUZMY3poRUxHVkJRVlV6U3l4SlFWRjRRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk4MlJDeFZRVUZWYVN0RUxGVkJRVmtzVjBGRE5VUXNUMEZCZVVNc1RVRkJiRU53YkVRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiVWdzWTBGQll5ODJSQ3hWUVVGVk1DdEVMRkZCUVZVc1YwRkRNVVFzVDBGRFJUZHNSQ3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMmxJTEhWQ1FVRjNRaXhKUVZGNlJteEtMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYlVnc1kwRkJZeTgyUkN4VlFVRlZkeXRFTEZGQlFWVXNVMEZCVTI0dlJDeEhRVU51UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5rUXNjVUpCUVhGQ2FHeEVMRXRCUVUwc1JVRkJSM0YzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyMUlMR05CUVdNdlJ5eGhRVUZoTEVkQlFVa3pNRVFzU1VGUk4wZHplVVFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlV5SzBRc1ZVRkJXU3hYUVVNMVJDeFBRVUZQY2psRUxFdEJRVXRyT1VRc1lVRkJVWFpNTEVsQlVYUkNkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdFNDeGpRVUZqTHpaRUxGVkJRVlUwSzBRc1VVRkJWU3hYUVVNeFJDeFBRVUY1UXl4TlFVRnNReTlzUkN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHRTQ3hqUVVGakx6WkVMRlZCUVZVMmQwTXNVMEZCVnl4WFFVTXpSQ3hQUVVORmFEUkNMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhhMGdzZDBKQlFYbENMRWxCVVRGR2Jrb3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR0U0N4alFVRmpMelpFTEZWQlFWVjVLMFFzVTBGQlZ5eFRRVUZUY0M5RUxFZEJRM0JGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMlJDeHhRa0ZCY1VKb2JFUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGJVZ3NZMEZCWXk5SExHRkJRV0VzUjBGQlNUTXdSQ3hKUVZFM1IzTjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWVFlyUkN4WFFVRmhMRmRCUXpkRUxFOUJRVTkyT1VRc1MwRkJTMjA1UkN4alFVRlRlRXdzU1VGUmRrSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjIxSUxHTkJRV012TmtRc1ZVRkJWVGdyUkN4VFFVRlhMRmRCUXpORUxFOUJRWGxETEUxQlFXeERhbTFFTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFVOXFRM1ZZTEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR2U0N4M1FrRkJkMEpvTjBRc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU01UlN4UFFVRlBUaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI5SUxIZENRVUYzUWpjNFF5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZWHBHY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENOemhETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRja1lzU1VGQlQwTXNSVUZCVFN4RFFVTlljVXNzU1VGQlN6VnFSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTMEZOYUVRc1QwRklTVVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR2U0N4M1FrRkJkMEowV2l4clFrRkJiMElzVTBGQlUyZFNMRWRCUXpkRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGRGVFTXNUMEZCVDNKS0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENja2tzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYTlVZNFJTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSMjlJTEhkQ1FVRjNRbkpKTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkROVVlzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpkMHNzVDBGQlQzUTVSQ3hIUVVOWUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR2U0N4M1FrRkJkMEpvTjBRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE5VVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIyOUlMSGRDUVVGM1FtaEpMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUTNwRlFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHZTQ3gzUWtGQmQwSm9TU3gzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRelZHTEVsQlFVbHVlVVFzUjBGRFNrRXNSVUZCU1dsVUxFVkJRVkZuY0VRc1ZVRkRUbTQ0UkN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhKUVZWT0szZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYjBnc2QwSkJRWGRDYURkRUxGVkJRVlUyT0VRc1QwRkJVeXhYUVVOdVJTeFBRVUU0UW1oclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhiMGdzZDBKQlFYZENhRGRFTEZWQlFWVXlPRVFzVDBGQlV5eFRRVUZUZERsRUxFZEJRelZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGUGFFUjNXaXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjVWdzTUVKQlFUQkNhamRFTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRhRVlzVDBGQlQwNHNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUk1T0VNc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRXpSbkYzUkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzRklMREJDUVVFd1FqazRReXhUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzWkdMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaHRTaXhYUVVGWk16WkVMRVZCUVVsMWVFUXNSVUZCU1RSS0xHbENRVUZ0UW5CTExFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGNzWVVGQllTODNReXhUUVVGVEszcERMRVZCUVdsQ2RIaEVMRWxCVFRGSExFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkeFNDd3dRa0ZCTUVKMldpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlF5OUZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkRlRU1zVDBGQlQzUktMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIY1Vnc01FSkJRVEJDZEVrc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWE9VWTRSU3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNGSUxEQkNRVUV3UW5SSkxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZET1VZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVNeFEzSk9MRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGRrZ3NOa0pCUTJoRlVpeEZRVUZKZDBvc1lVRkJZWFE0UkN4SFFVTnFRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGNVZ3NNRUpCUVRCQ2FqZEVMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRemxGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUpxU1N4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTXpSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIY1Vnc01FSkJRVEJDYWtrc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNNVJpeEpRVUZKYm5sRUxFVkJSVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkZyYjBRc2FVSkJSVlpvU2l4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpSeXhoUVVGaGJFZ3NNRUpCVlRkRGNrSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkJNRUpxTjBRc1ZVRkJWU3MzUkN4aFFVRmxMRmRCUXpORkxFOUJRMFZzYWtRc1JVRkJTelJ3UXl4UlFVRlJlVVFzWjBKQlFXZENOV3RFTEV0QlFVMXhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelJ5eGhRVUZqTEVsQlVTOUZka2tzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkeFNDd3dRa0ZCTUVKcU4wUXNWVUZCVlRJM1JDeGhRVUZsTEZOQlFWTjBPRVFzUjBGRGNFWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVFJFTEdkQ1FVRm5RaTlyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkV2UTNONVJDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM0ZJTERCQ1FVRXdRbW8zUkN4VlFVRlZLemhFTEdWQlFXbENMRmRCUXpkRkxFOUJRVTk2TjBRc1MwRkJTM0UyUkN4clFrRkJZVEZKTEVsQlVUTkNkRUlzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkeFNDd3dRa0ZCTUVKcU4wUXNWVUZCVldjNVJDeGhRVUZsTEZkQlF6TkZMRTlCUVhsRExFMUJRV3hEYm10RUxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVTlxUTNWWUxFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkelNDeDNRa0ZCZDBKc04wUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNNVJTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTklMSGRDUVVGM1FpODRReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVhwR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBnc2QwSkJRWGRDTHpoRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEY2tZc1NVRkJUME1zUlVGQlRTeEhRVTlpTEU5QlNFbEdMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhjMGdzZDBKQlFYZENlRm9zYTBKQlFXOUNMRk5CUVZOblVpeEhRVU0zUlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGMwZ3NkMEpCUTNoRExFOUJRVTkyU2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTklMSGRDUVVGM1FuWkpMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWelZHT0VVc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGQmQwSjJTU3cwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6VkdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkpZbWxhTEVWQlFVOXdXaXhwUWtGSGFrSnZXaXhGUVVGUE4xa3NXVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkJkMEpzTjBRc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE5VVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzTklMSGRDUVVGM1FteEpMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUTNwRlFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZHpTQ3gzUWtGQmQwSnNTU3gzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFdEJVVEZHYkRaRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVNDeDVRa0ZCZVVKdU4wUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNdlJTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVGNVFtZzVReXhUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRGR2NYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVnc2VVSkJRWGxDYURsRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZEVZc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0doeFJDeFJRVUZUZUVnc1JVRkJTWFY0UkN4RlFVRkpjVVlzWTBGQlowSTVSQ3hGUVVGeFFqVkNMRTlCUVU4emVrTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTE2Uml4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVnc2VVSkJRWGxDZWxvc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNNVJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlEzaERMRTlCUVU5NFNpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM1ZJTEhsQ1FVRjVRbmhKTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnpkR09FVXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJlVUo0U1N3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRemRHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjVEJFTEVWQlFYRkNOVUlzVDBGRGNrTnFSaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOY1RCRUxFVkJRWEZDTlVJc1QwRkJUMkVzTmtKQlEzSkVVaXhGUVVGSmMwWXNWVUZCVlhBMFJDeEhRVU5rTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDFTQ3g1UWtGQmVVSnVOMFFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETjBVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNWSUxIbENRVUY1UW01SkxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkMVNDeDVRa0ZCZVVKdVNTeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlF6ZEdMRWxCUVVsdWVVUXNSVUZGU3l4UFFVUlVRU3hGUVVGSmFWUXNSVUZCVVRKcVJDeGpRVVZXZWtVc1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CT0hsRUxFVkJRWEZDTlVJc1QwRkJUMnRDTERCQ1FWVnNRM0pDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGRVZ3NlVUpCUVhsQ2JqZEVMRlZCUVZWM00wUXNWVUZCV1N4WFFVTjJSU3hQUVVORk15dERMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOYjNsRUxFVkJRWEZDTlVJc1QwRkJVU3hKUVZGd1JVZ3NUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJlVUp1TjBRc1ZVRkJWWGt6UkN4VlFVRlpMRk5CUVZOd05FUXNSMEZEYUVZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUUkVMR2RDUVVGblFpOXJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRXZRM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzVklMSGxDUVVGNVFtNDNSQ3hWUVVGVk1ETkVMRmxCUVdNc1YwRkRla1VzVDBGQlQzQXlSQ3hMUVVGTGJUSkVMR1ZCUVZWNFJTeEpRVkY0UW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkVWdzZVVKQlFYbENiamRFTEZWQlFWVXlNMFFzVlVGQldTeFhRVU4yUlN4UFFVRjVReXhOUVVGc1F6a3JReXhGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGaGNrTnhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0Vnc1lVRkJaU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZMYUVWeVF5eE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVTJRaXhWUVVGWkxFTkJRMjVFUXl4alFVRmxMRVZCUTJaRExFdEJRVTBzUlVGRFRrTXNUMEZCVVN4RlFVTlNhVUlzUzBGQlRTeEZRVU5PUXl4TlFVRlBMRWRCVFZRelRTeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndOMFFzVlVGQlZYRTVSQ3hoUVVGbExGZEJRMmhGTEU5QlFYbEZlR3RFTEVWQlFVczBjRU1zVVVGQlVYTkNMR2xDUVVGcFFucHBSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEJJTEdGQlFXRXNTMEZMYWt0dU4wTXNSVUZCU3pSd1F5eFJRVUZSUXl4eFFrRmhha0pwVUN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOeVJTeFBRVUZQVGl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWcU9VTXNVMEZCVXpoNlF5eEZRVUZ4UWpOM1JDeFBRV0ZvUm5GM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVnFPVU1zVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTTFSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTllhMHdzUzBGQlRYcHJSQ3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZETDBONFJpeE5RVUZQTDNKRUxFVkJRVWwxZUVRc1JVRkJTVzlNTEZsQlFXTTFUQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjI5SUxIZENRVUYzUWpjNFF5eFRRVUZUSzNwRExFVkJRV2xDZEhoRUxFZEJRM3BITkRoRUxGRkJRVk0xT0VRc1JVRkJTWFY0UkN4RlFVRkpjMHdzWTBGQlowSTVUQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNGSUxEQkNRVUV3UWprNFF5eFRRVUZUSzNwRExFVkJRV2xDZEhoRUxFZEJReTlIYjJkRUxFMUJRVTl3WjBRc1JVRkJTWFY0UkN4RlFVRkpkVTBzV1VGQll5OU5MRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBnc2QwSkJRWGRDTHpoRExGTkJRVk1yZWtNc1JVRkJhVUowZUVRc1IwRkRla2QxUml4UFFVRlJka1lzUlVGQlNYVjRSQ3hGUVVGSmRHaENMR0ZCUVdVNFowSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJlVUpvT1VNc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SlFVMDVSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpURmFMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRjRVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRM2hETEU5QlFVOTZTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Y2U1N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkdVJqaEZMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWHBKTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRia1lzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpkVXdzVVVGQlVYSXJSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR2U0N4M1FrRkRNVU51VHl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYjBnc2QwSkJRWGRDY2trc05rSkJRek5GVWl4RlFVRkpkMHdzVVVGQlVYUXJSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR4U0N3d1FrRkRNVU53VHl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIY1Vnc01FSkJRVEJDZEVrc05rSkJRemRGVWl4RlFVRkplVXdzVlVGQlZYWXJSQ3hIUVVOa0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkRNVU55VHl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBnc2QwSkJRWGRDZGtrc05rSkJRek5GVWl4RlFVRkpjVTBzVVVGQlVXNHZSQ3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkRNVU4wVHl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZFVnc2VVSkJRWGxDZUVrc05rSkJRelZGVWl4RlFVRkpjMDBzVTBGQlUzQXZSQ3hIUVVOaUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRGRFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUTI1RkxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0Vrc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRhRVZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3U1N4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTI1R0xFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUlozRkVMRmRCUTA1dU9VUXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVVEJ3UkN4WlFVVldlRXNzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGIwZ3NkMEpCUVhkQ2FFa3NlVUpCU1RkRExFOUJSRlJ3ZVVRc1JVRkJTV2xVTEVWQlFWRTBjRVFzWTBGRlZqRkxMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNGSUxEQkNRVUV3UW1wSkxIbENRVWt2UXl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk5uRkVMRmxCUlZZelRDeEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWR6U0N4M1FrRkJkMEpzU1N4NVFrRkpOME1zVDBGRVZIQjVSQ3hGUVVGSmFWUXNSVUZCVVdjNVFpeGhRVVZXYTJsQ0xFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM1ZJTEhsQ1FVRjVRbTVKTERCQ1FWVjZSSEpDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWTmpsRUxGRkJRVlVzVjBGRE0wUXNUMEZCT0VKb2JFUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndOMFFzVlVGQlZUQTVSQ3hSUVVGVkxGTkJRVk55SzBRc1IwRkRjRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UW5SclJDeExRVUZOTEVWQlFVZHFReXhKUVZGd1JITjVSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWWFU1UkN4UlFVRlZMRmRCUXpORUxFOUJRMFV4YTBRc1JVRkJTelJ3UXl4UlFVRlJlVVFzWjBKQlFXZENOV3RFTEV0QlFVMXhkMFFzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkdlNDeDNRa0ZCZVVJc1NVRlJNVVp5U2l4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlRJNVJDeFJRVUZWTEZOQlFWTjBLMFFzUjBGRGNFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVFpFTEhGQ1FVRnhRbWhzUkN4TFFVRk5MRVZCUVVkeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRWdzWVVGQllTeEhRVUZKTXpCRUxFbEJVVGxIYzNsRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQTNSQ3hWUVVGVk9EbEVMRlZCUVZrc1YwRkROMFFzVDBGQlQzZzRSQ3hMUVVGTGNUaEVMR0ZCUVZFeFN5eEpRVkYwUW5SQ0xFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQTNSQ3hWUVVGVkt6bEVMRkZCUVZVc1YwRkRNMFFzVDBGQmVVTXNUVUZCYkVOc2JFUXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIZDBnc1pVRkJaWEEzUkN4VlFVRlZlVGxFTEZWQlFWa3NWMEZETjBRc1QwRkRSVFZyUkN4RlFVRkxOSEJETEZGQlFWRjVSQ3huUWtGQlowSTFhMFFzUzBGQlRYRjNSQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNGSUxEQkNRVUV5UWl4SlFWRTFSblJLTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWTkRsRUxGVkJRVmtzVTBGQlUzWXJSQ3hIUVVOMFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJOa1FzY1VKQlFYRkNhR3hFTEV0QlFVMHNSVUZCUjNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndTQ3hoUVVGaExFZEJRVWt6TUVRc1NVRlJPVWR6ZVVRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNEZEVMRlZCUVZWbkswUXNXVUZCWXl4WFFVTXZSQ3hQUVVGUE1UaEVMRXRCUVV0ek9FUXNaVUZCVlROTExFbEJVWGhDZEVJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNEZEVMRlZCUVZWcEswUXNWVUZCV1N4WFFVTTNSQ3hQUVVGNVF5eE5RVUZzUTNCc1JDeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQzU0N4bFFVRmxjRGRFTEZWQlFWVXdLMFFzVVVGQlZTeFhRVU16UkN4UFFVTkZOMnhFTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIYzBnc2QwSkJRWGxDTEVsQlVURkdka29zVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkM1NDeGxRVUZsY0RkRUxGVkJRVlYzSzBRc1VVRkJWU3hUUVVGVGJpOUVMRWRCUTNCRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTJSQ3h4UWtGQmNVSm9iRVFzUzBGQlRTeEZRVUZIY1hkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhkMGdzWlVGQlpYQklMR0ZCUVdFc1IwRkJTVE13UkN4SlFWRTVSM041UkN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlRJclJDeFZRVUZaTEZkQlF6ZEVMRTlCUVU5eU9VUXNTMEZCUzJzNVJDeGhRVUZSZGt3c1NVRlJkRUowUWl4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzZElMR1ZCUVdWd04wUXNWVUZCVlRRclJDeFJRVUZWTEZkQlF6TkVMRTlCUVhsRExFMUJRV3hETDJ4RUxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2RJTEdWQlFXVndOMFFzVlVGQlZUWjNReXhUUVVGWExGZEJRelZFTEU5QlEwVm9ORUlzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQxU0N4NVFrRkJNRUlzU1VGUk0wWjRTaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNkSUxHVkJRV1Z3TjBRc1ZVRkJWWGtyUkN4VFFVRlhMRk5CUVZOd0wwUXNSMEZEY2tVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUWkVMSEZDUVVGeFFtaHNSQ3hMUVVGTkxFVkJRVWR4ZDBRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDNTQ3hsUVVGbGNFZ3NZVUZCWVN4SFFVRkpNekJFTEVsQlVUbEhjM2xFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWTml0RUxGZEJRV0VzVjBGRE9VUXNUMEZCVDNZNVJDeExRVUZMYlRsRUxHTkJRVk40VEN4SlFWRjJRblJDTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGQwZ3NaVUZCWlhBM1JDeFZRVUZWT0N0RUxGTkJRVmNzVjBGRE5VUXNUMEZCZVVNc1RVRkJiRU5xYlVRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJUMnBEZFZnc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUjNsSUxEUkNRVUUwUW5JM1JDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTJ4R0xFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVZ3NORUpCUVRSQ2JEbERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTjBaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWQ1U0N3MFFrRkJORUpzT1VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU42Uml4SlFVRlBReXhGUVVGTkxFZEJUMklzVDBGSVNVWXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVZDVTQ3cwUWtGQk5FSXpXaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMnBHTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVkNVNDdzBRa0ZEZUVNc1QwRkJUekZLTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVZ3NORUpCUVRSQ01Va3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhhRWM0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbElMRFJDUVVFMFFqRkpMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGFFY3NTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVbGlhVm9zUlVGQlQzQmFMR2xDUVVkcVFtOWFMRVZCUVU4M1dTeFpRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUVN4TlFVRk5SU3hKUVVGSk9FSXNUMEZCVDBNc1IwRkJSM2xJTERSQ1FVRTBRbkkzUkN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOb1JpeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSGVVZ3NORUpCUVRSQ2Nra3NkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZETjBWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlIzbElMRFJDUVVFMFFuSkpMSGRDUVVFd1FpeFRRVUZUYmk5RExFVkJRVk5yTDBNc1MwRlJPVVpzTmtNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUUyUW5RM1JDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTI1R0xFOUJRVTlPTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FZ3NOa0pCUVRaQ2JqbERMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoT1VaeGQwUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3U0N3MlFrRkJOa0p1T1VNc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU14Uml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZWjA4c1VVRkJVM2d2UkN4RlFVRkpkWGhFTEVWQlFVbHJUeXhqUVVGblFqRlBMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZIT0Vjc1lVRkJZWFk0UXl4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVsQlRYQkhMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dTQ3cyUWtGQk5rSTFXaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMnhHTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1NDdzJRa0ZEZUVNc1QwRkJUek5LTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FZ3NOa0pCUVRaQ00wa3NORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhha2M0UlN4TlFVRk5RU3hOUVVGTlJTeEpRVUZKT0VJc1QwRkJUME1zUjBGQlJ6QklMRFpDUVVFMlFqTkpMRFJDUVVFNFFpeFRRVUZUVWl4RlFVRkxkRVlzUjBGRGFrY3NTMEZCVDBFc1JVRkJUMmhhTEdOQlExSm5XaXhGUVVGUGFsb3NZMEZFWXl4RFFVdDZRaXhQUVVSWmFWb3NSVUZCVDNCYUxHdENRVVZ1UWl4TFFVRkxMRVZCUTBnc1NVRkJTWEF3UXl4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVTXhRemRPTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWM0Unl4aFFVRmhMMGdzTmtKQlEyaEZVaXhGUVVGSmJVOHNWVUZCVldwb1JTeEhRVU5rTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVUVzVFVGQlRVVXNTVUZCU1RoQ0xFOUJRVTlETEVkQlFVY3dTQ3cyUWtGQk5rSjBOMFFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYWtZc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUUyUW5SSkxIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRemxGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVRXNUVUZCVFVVc1NVRkJTVGhDTEU5QlFVOURMRWRCUVVjd1NDdzJRa0ZCTmtKMFNTeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEycEhMRWxCUVVsdWVVUXNSVUZGU3l4UFFVUlVRU3hGUVVGSmFWUXNSVUZCVVhkelJDeGpRVVZXZEU0c1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CSzNkRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4SFFVRkhPRWNzWVVGQllURklMREJDUVZVM1EzSkNMRTFCUVUxQkxFMUJRVTFGTEVsQlFVazRRaXhQUVVGUFF5eEhRVUZITUVnc05rSkJRVFpDZERkRUxGVkJRVlZ4WjBVc1ZVRkJXU3hYUVVNelJTeFBRVU5GZUc1RUxFVkJRVXMwY0VNc1VVRkJVWGxFTEdkQ1FVRm5RalZyUkN4TFFVRk5jWGRFTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE9FY3NZVUZCWXl4SlFWRXZSUzlKTEUxQlFVMUJMRTFCUVUxRkxFbEJRVWs0UWl4UFFVRlBReXhIUVVGSE1FZ3NOa0pCUVRaQ2REZEVMRlZCUVZWelowVXNWVUZCV1N4VFFVRlRhbWhGTEVkQlEzQkdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVFc1RVRkJUVVVzU1VGQlNUaENMRTlCUVU5RExFZEJRVWN3U0N3MlFrRkJOa0owTjBRc1ZVRkJWWFZuUlN4WlFVRmpMRmRCUXpkRkxFOUJRVTlxTDBRc1MwRkJTMmN2UkN4bFFVRlZjazRzU1VGUmVFSjBRaXhOUVVGTlFTeE5RVUZOUlN4SlFVRkpPRUlzVDBGQlQwTXNSMEZCUnpCSUxEWkNRVUUyUW5RM1JDeFZRVUZWZDJkRkxGVkJRVmtzVjBGRE0wVXNUMEZCZVVNc1RVRkJiRU16YmtRc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJTWEpEWXl4RlFVRkxkRU1zVDBGQlR6SldMRTlCUVU4M1dDeEZRVUZUSzNwRUxFMUJRVTFCTEUxQlFVMUZMRWxCUVVrNFFpeFBRVUZQUXl4TExDdEhRM0o0U1c1RUxGZEJSME1zTUVWQlNGRXNSVUZCUVRaTkxHTkJTVklzTUVWQlNtOUNMRVZCUVVGRExHVXNhM1JFUTBGeVFpeFhRVU5CTEZGQlEwRXNVVUZEUVN4UFFVTkJMRTlCUTBFc1VVRkRRU3hQUVVOQkxGRkJRMEVzVVVGeFEwRXNVMEZCYzBKRUxFVkJRVmRGTEVWQlFXbENReXhITEhsRlFVbHFSQ3hQUVVoTlF5eEZRVUZwUWl4VFFVRkRSQ3hIUVVOMlFpeFBRVUZQTEVWQlFVRnFVU3hMUVVGTE5VVXNNRUpCUVRCQ0xFTkJRVVZETEdsQ1FVRnBRaXhIUVVGc1JDeERRVUV5UkRSVkxFdEJSVGxFUVN4aFFVRkpMRVZCUVVwQkxFVkJRVTE2VlN4aFFVZEtMRU5CUVZBc1JVRkJUekpWTEVWQlFXdERTQ3hGUVVGVFJTeEZRVUZuUWtRc1NVRkdNVVFzUTBGQlVDeEZRVUZQUXl4VFFVdFVMRk5CUVdWRExFVkJRV3REU0N4RlFVRnBRa1VzUlVGQmRVTkVMRWNzZVVkQmVVVjRSaXhQUVhoRlduSklMRVZCUVdNc1IwRjNSVVlzUjBGMlJWTXNaMFFzYTBaQlJVd3NTVUZCWmtFc1JVRkJRU3hSUVVOSGFra3NSVUZCVlN4SlFVRkpMRVZCUVVGcFNDeHhRa0ZEV2xjc1YwRkJWVEJJTEdGQlFVa3NSVUZCU2tFc1JVRkJUVWNzV1VGQllVZ3NSVUZCUzBjc1YwRkJZVW9zUlVGQlVUY3dSQ3hSUVVGUkxHRkJRV01zVFVGREwwVnJNVVFzUlVGQlVTeEpRVUZKTEdWQlExcHdTU3hSUVVGNVFpeFJRVUZxUWl4RlFVRkJaMGtzWVVGQlNTeEZRVUZLUVN4RlFVRk5lbFVzYlVKQlFWY3NaVUZCUlM5dFJDeE5RVU5xUXpRM1JDeEZRVUZOYmtrc1YwRkJORUlzVVVGQmFrSXNSVUZCUVN0SUxHRkJRVWtzUlVGQlNrRXNSVUZCVFhwVkxHMUNRVUZYTEdWQlFVVjNUU3hUUVVOd1EzSklMRVZCUVZFMlNDeGxRVUZsTmtnc1IwRkpia0pvWjBJc1JVRkJUeXhKUVVGSmFXZENMRk5CUVhWQ0xGTkJRVU5ETEVWQlFWTkRMRWRCUXk5RExFVkJRVmRFTEVWQlExZ3NSVUZCVlVNc1MwRkZVQ3hGUVVGclFpeEhRVU4wUWl4RlFVRkJlRkVzUzBGQlMwWXNUMEZCVHl4RlFVRkJNbEVzV1VGQldVTXNZVUZCWXl4RFFVTnlReTlRTEZGQlFWTkJMRVZCUTFRMVNTeE5RVUZOYTFrc1lVRkJTU3hGUVVGS1FTeEZRVUZOVlN4eFFrRkJjMEpXTEVWQlFVdFZMRzlDUVVGelFsZ3NSVUZETjBSMldDeFZRVUZYZVZnc1JVRkRXSEpYTEZWQlFWY3NVMEZCUXpNeVF5eEhRVU5ZTEVWQlFXdENRU3hGUVVGUk5HeEVMR3RDUVVVelFuWlJMRTFCUVU4c1UwRkJRMjFLTEVWQlFXbENSaXhGUVVGNVFqbElMRWRCUXpkRFowa3NSMEZCVVN4RlFVRkJNVUlzUzBGQlMyeElMRXRCUVV0RExFZEJRM0pDTEVWQlFWTTJXQ3hIUVVWVUxFVkJRVkZ3VUN4TlFVbFlMRWRCUVUxdVVpeEpMR05CUVU0c1UwRkRRWFZaTEVWQlFXTXNSMEZGVm5GSUxHRkJRVWtzUlVGQlNrRXNSVUZCVFZVc2RVSkJRWFZDVml4aFFVRkpMRVZCUVVwQkxFVkJRVTFaTEhkQ1FVTm9ReXhGUVVGTExFbEJRVWtzUlVGQlFUZFJMRXRCUVV0c1NpeFZRVU5xUW5aNVF5eEpRVUZKTEdkQ1FVRnBRaXhWUVVGVmNXdEVMRWRCUld4RGRsa3NSVUZCVHl4SlFVRkphV2RDTEZOQlFYVkNMRk5CUVVORExFVkJRVk5ETEVkQlF6TkRMRVZCUVZkRUxFVkJRMWdzUlVGQlZVTXNTMEZGV0N4RlFVRnJRaXhKUVVWYUxFVkJRVlVzU1VGQlNTeEZRVUZCTVVrc2RVSkJRMXBUTEZWQlFWVXdTQ3hGUVVGTFdTeHpRa0ZEZGtJc1JVRkJRVGRSTEV0QlFVdEdMRTlCUVU4c1JVRkJRV2RTTEc5Q1FVRnZRa01zWlVGQlowSXNRMEZETDBOd1VTeFJRVUZUTEVWQlExUTFTU3hMUVVGTmExa3NSVUZCUzFVc2IwSkJRMWhzV1N4VlFVRlhlVmdzUlVGRFdERlVMRk5CUVZVc1JVRkRWak5ETEZWQlFWY3NVMEZCUXpNeVF5eEhRVU5ZTEVWQlFXdENRU3hGUVVGUk5HeEVMR3RDUVVVelFuWlJMRTFCUVU4c1UwRkJRMjFLTEVWQlFXbENSaXhGUVVGNVFqbElMRWRCUXpkRFowa3NSMEZCVVN4RlFVRkJNVUlzUzBGQlMyeElMRXRCUVV0RExFZEJRM0pDTEVWQlFWTXNSMEZGVkN4RlFVRlJlVWtzVFVGSldDeEhRVUZOYmxJc1NVRTFRa2dzVFN4UFFUUkNTQ3hUUVVOQmRWa3NSVUZCWXl4RkxHbENRVXRvUWl4UFFVWk5aMGtzUlVGQlN5eEpRVUZKTEVWQlFVRTFVU3hMUVVGTGJFb3NWVUZEYWtKMmVVTXNTVUZCU1N4blFrRkJhVUlzVlVGQlZYRnJSQ3hIUVVNelFpeERRVUZRTEVWQlFVOW5TU3hWUVVWalNTeEpMRTlCUTNSQ0xFOUJSRTFETEVWQlFWVXNVMEZEVkN4RFFVRlFMRVZCUVU4c1UwRkJRMmhDTEVkQlExQXNUMEZCVHl4SlFVRkphVUlzUlVGQmRVSnFRaXhGUVVGTlF5eEZRVUZuUW1Vc1dVRnlSakZFTEdWQmVVWkJMR2xDUVV0RExGZEJRVmxvUWl4RlFVRTJRa01zUlVGQmRVTnBRaXhIUVVNdlJYaG5SU3hMUVVGTGN5OUVMRXRCUVU5QkxFVkJRMXAwTDBRc1MwRkJTM2RuUlN4alFVRm5Ra0VzUlVGRGNrSjRaMFVzUzBGQlN6aHVSQ3hWUVVGWmVWZ3NSVUZCWlVRc1IwRnhRbXhETEU5QmJFSmpMRmxCUVVGdVZ5eE5RVUZpTEZOQlFXMUNNRU1zUnl3d1JVRkRiRUkzY2tRc1MwRkJTM2RuUlN4alFVRmpMM1JFTEZOQlFWRXNVMEZCUTNCVkxFVkJRVXMwYUVRc1IwRkRhRU0wVEN4RlFVRlRhalJETEVsQlFVbDJWaXhGUVVGTE5HaEVMRTFCUlc1Q2FtZEVMRXRCUVVzNGJrUXNWVUZCVlhGQ0xFMUJRVTB3UXl4SExGZEJSMllzV1VGQlFYWkRMRmxCUVZBc1UwRkJiVUp0V0N4SFFVTnNRbnBuUlN4TFFVRkxPRzVFTEZWQlFWVjNRaXhaUVVGWmJWZ3NTVUZIY2tJc1dVRkJRV3hZTEZkQlFWQXNWMEZEUTNad1JDeExRVUZMT0c1RUxGVkJRVlY1UWl4alFVZFVMRmxCUVVGRkxFOUJRVkFzVjBGRFEzcHdSQ3hMUVVGTE9HNUVMRlZCUVZVeVFpeFZRVVZxUWl4RlFUZENRU3hIUVhsRFFTeHpRa0ZCYVVOcFdDeEZRVUV3UW5SYUxFVkJRV05yV1N4SExHMUxRVVZ5UkN4UFFVUmljVUlzUlVGQllYSkNMR0ZCUVVrc1JVRkJTa0VzUlVGQlRYTkNMR05CUTA0c1IwRkJUU3hGUVVGQlF5eG5RMEZCTUVOc1VDeEpRVUZtWjFBc1IwRkJORUpCTEVWQlFWZEhMR3RDUVVGdFFrZ3NZVUZCVlN4RlFVRldRU3hGUVVGWlNTeFpMRTlCYjBKc1J5eFBRWEJDYkVJc1JVRkJZU3hUUVVGWVF5eEZRVUZGTEV0QlFVVkRMRVZCUVVVc1MwRkhWa01zUlVGQlZ6VkNMRVZCUTFoQkxFdEJRMGcwUWl4RlFVRlhMRXRCUVVzMVFpeEpRVVZRUnl4WFFVRm5ReXhSUVVGdVFpeEZRVUZCU0N4aFFVRkpMRVZCUVVwQkxFVkJRVTF6UWl4eFFrRkJZU3hsUVVGRlR5eHZRa0ZEZEVORUxFVkJRVk42UWl4aFFVTlVlVUlzUlVGQlUyeENMRzlDUVVOYWEwSXNSVUZCVTNwQ0xGZEJRWEZETEZGQlFYaENMRVZCUVVGSUxFVkJRVXRWTERKQ1FVRnRRaXhsUVVGRmVERkVMRkZCUVZFc1lVRkJZeXhKUVVWMFJUQXlSQ3hGUVVGVGVrSXNWMEZCWVdsQ0xFVkJRV2xDYkRKRUxGRkJRVkVzWVVGQll5eExRVWN2UkRBeVJDeEZRVUZUY2xjc1dVRkJhVU1zVVVGQmJrSXNSVUZCUVhsVkxHRkJRVWtzUlVGQlNrRXNSVUZCVFhOQ0xIRkNRVUZoTEdWQlFVVlJMSEZDUVVNMVEwWXNSVUZCVTJ4Q0xHOUNRVUY1UXl4UlFVRnVRaXhGUVVGQlZpeGhRVUZKTEVWQlFVcEJMRVZCUVUxelFpeHhRa0ZCWVN4bFFVRkZVeXcyUWtGRGNFUklMRVZCUVZOb1FpeHhRa0ZCTUVNc1VVRkJia0lzUlVGQlFWb3NZVUZCU1N4RlFVRktRU3hGUVVGTmMwSXNjVUpCUVdFc1pVRkJSVlVzSzBKQlJ6bENMRWRCUVUxdVF5eEZRVUZYZFVJc1JVRkJhMEpSTEVrc1kwRkJja1JMTEVWQlFXdENMRk5CUTJ4Q2FtSXNSVUZCVXl4RlFVRkJLMGtzUzBGQlN5OUpMRTlCUVU4c1JVRkJRV3RpTEdsQ1FVRnBRa01zUzBGQlRTeERRVU5xUkhKaExFdEJRVTF6V2l4RlFVTk9OVmtzVlVGQlYzbGFMRXRCUjFKcVF5eGhRVUZKTEVWQlFVcEJMRVZCUVUxVkxITkNRVWRyUWl4UlFVRnFRaXhGUVVGQlZpeGhRVUZKTEVWQlFVcEJMRVZCUVUxNlZTeHRRa0ZCVnl4VFFVRkZMMjFFTEV0QlN6RkNhelJFTEVWQlFVOHNSMEZGVURCR0xFZEJRWE5DTEVWQlEzQkNReXhGUVVGWkxGTkJRVU5ETEVkQlEyeENMRWxCUVVsR0xFVkJRVW9zUTBGSFFVRXNSMEZCYzBJc1JVRkRkRUlzU1VGQlRVY3NSVUZCYjBJc1NVRkJTU3hGUVVGQk5Va3NhMEpCUXpsQ05Fa3NSVUZCYTBKNlJpeFJRVUZSU2l4SFFVTXhRaXhKUVVGTmJERkVMRVZCUVZNc1NVRkJTU3hGUVVGQk1IQkVMRTlCUTI1Q01YQkVMRVZCUVU5M2NVUXNVVUZCVVN4RlFVRkJia29zUzBGQlN6SmFMRk5CUTNCQ2FEZEVMRVZCUVU5NWNVUXNWMEZCVjNGUkxFZEJRMnhDUXl4RlFVRnJRakZGTEZOQlFWTnlNa1FzUjBGRE0wSXNSVUZCUVhWdlJDeExRVUZMUkN4TlFVRk5MRVZCUVVGdlV5eHBRa0ZCYVVKUExGZEJRVmtzUTBGRGRrTXZVaXhSUVVGVE5sSXNSVUZEVkdoWExGTkJRVlVzUTBGRFZDeFhRVUZaZWtVc1IwRkZZa0VzUzBGQlRYTmFMRVZCUTA0MVdTeFZRVUZYZVZvc1JVRkRXRE5hTEUxQlFVOHNVMEZCUTI5aExFZEJRME1zU1VGQlFXdzNSQ3hGUVVGdFEyczNSQ3hGUVVGTkxFOUJRV3BETjFJc1JVRkJNa0kyVWl4RlFVRk5MR05CUVd4Q2VuWkVMRVZCUVZsNWRrUXNSVUZCVFN4UlFVTTNRMnczUkN4SlFVRlhMRVZCUVVGMWIwUXNTMEZCUzJ4SUxFdEJRVXRETEVsQlFVMDNNVU1zUjBGSEwwSXpUaXhSUVVGUlF5eE5RVUZOYzNKRUxGRkJTVmc0VWl4RlFVRlhMRmRCUTJoQ0xFbEJRVWxRTEVWQlFVb3NRMEZIUVVFc1IwRkJjMElzUlVGRGRFSXNTVUZCVFVjc1JVRkJiMElzU1VGQlNTeEZRVUZCTlVrc2EwSkJRemxDTkVrc1JVRkJhMEo2Uml4UlFVRlJTaXhIUVVNeFFqWkdMRVZCUVd0Q00wVXNVMEZCVVN4SFFVTXhRaXhGUVVGQk4wNHNTMEZCUzBRc1RVRkJUU3hGUVVGQmIxTXNhVUpCUVdsQ1R5eFhRVUZaTEVOQlEzWkRMMUlzVVVGQlV6WlNMRVZCUTFSb1Z5eFRRVUZWTEVOQlExUXNWMEZCV1hwRkxFZEJSV0pCTEV0QlFVMXpXaXhGUVVOT05Wa3NWVUZCVjNsYUxFVkJRMWd6V2l4TlFVRlBMRk5CUVVOdllTeEhRVU5ETEVsQlFVRnNOMFFzUlVGQmJVTnJOMFFzUlVGQlRTeFBRVUZxUXpkU0xFVkJRVEpDTmxJc1JVRkJUU3hqUVVGc1FucDJSQ3hGUVVGWmVYWkVMRVZCUVUwc1VVRkROME5zTjBRc1NVRkJWeXhGUVVGQmRXOUVMRXRCUVV0c1NDeExRVUZMUXl4SlFVRk5OekZETEVkQlJ5OUNNMDRzVVVGQlVVTXNUVUZCVFhOeVJDeFJRVTlpSzFJc1JVRkJaMElzU1VGQlNYWkRMRk5CUVdFc1UwRkJRME1zUlVGQlUwTXNSMEZET1VOelF5eEZRVUZYZGtNc1JVRkRSRU1zUzBGRlVIVkRMRWRCUVdVc1IwRkRaSHBDTEdGQlFWVXNSVUZCVmtFc1JVRkJXVWNzYlVKQlFXSXNUVUZGWlN4SFFVRk5SU3hGUVVGSGNVSXNaU3hQUVhWRE0wSXNUMEYyUTAxRExFVkJRVmtzVTBGRlpDeEhRVUZqTEVWQlEyeENkRUlzUlVGQlIzVkNMR1ZCUVdsQ0xGTkJRVTFETEVkQlFVc3NjVU1zTUVSQlF6bENMRk5CUVUxT0xFY3NUMEZEVGl4UFFVUkJMRk5CUTBsRkxFVkJRMGdzU1VGSGRVSXNUMEZCY0VKSkxFVkJRVTEyU1N4WFFVTlVMRWRCUVdNc1JVRkRaR2RKTEVsQlEwRXNUVUZIUzFFc1JVRjNTRlFzVTBGQk5rSXpiRVVzUjBGRE5VSXNTVUZCU1cwNVJDeEZRVUZaTEVsQlFVa3NSVUZCUVhKQ0xHRkJRM0JDY1VJc1JVRkJWVWtzWVVGQllYWTVSQ3hGUVVGRmJUbEVMRmRCUTNKQ2JqbEVMRVZCUVVWdk9VUXNVVUZEVEVRc1JVRkJWVXNzVlVGQlZYZzVSQ3hGUVVGRmJ6bEVMRkZCUlc1Q2NEbEVMRVZCUVVVMGJFVXNaVUZEVEhwSkxFVkJRVlZOTEdsQ1FVRnBRbm81UkN4RlFVRkZOR3hGTEdWQlJURkNOV3hGTEVWQlFVVnpPVVFzYTBKQlEweElMRVZCUVZWUExHOUNRVUZ2UWpFNVJDeEZRVUZGY3psRUxHdENRVVZxUXl4UFFVRlBTQ3hGUVhCSlZUQkpMRU5CUVc5Q1NDeEZRVUZOZGtrc1dVRkRia00wU0N4RlFVRnZRaXhKUVVGSkxFVkJRVUUxU1N4dFFrRkRXbTFFTEZGQlFWRktMRWRCUXpGQ05rWXNSVUZCYTBKNFNDeGhRVUZoYjBrc1IwRkRMMElzUlVGQlFYQlVMRXRCUVV0RUxFMUJRVTBzUlVGQlFXOVRMR2xDUVVGcFFrOHNWMEZCV1N4RFFVTjJReTlTTEZGQlFWTTJVaXhGUVVOVWFGY3NVMEZCVlN4RFFVTlVMRmRCUVZsNlJTeEhRVVZpUVN4TFFVRk5jMW9zUlVGRFRqVlpMRlZCUVZkNVdpeEZRVU5ZTTFvc1RVRkJUeXhUUVVGRGIyRXNSMEZEUXl4SlFVRkJiRGRFTEVWQlFXMURhemRFTEVWQlFVMHNUMEZCYWtNM1VpeEZRVUV5UWpaU0xFVkJRVTBzWTBGQmJFSjZka1FzUlVGQldYbDJSQ3hGUVVGTkxGRkJRemREYkRkRUxFbEJRVmNzUlVGQlFYVnZSQ3hMUVVGTGJFZ3NTMEZCUzBNc1NVRkJUVGN4UXl4SFFVY3pRaloyUkN4SFFVRm5RaXhIUVVkd1FuZzVSQ3hSUVVGUlF5eE5RVUZOTERCQ1FVRXlRbk55UkN4TkxHRkJTelZETEVkQlFVMDJVU3hGUVVGSE5FSXNiMEpCUVc5Q1RpeEpMRTlCUVRkQ0xGTXNhVUpCZVVWRUxFOUJkRVZKVHl4SFFVRlhMRVZCUTJaMll5eEZRVUZQTkVNc1YwRkJWU3hUUVVGUE16SkRMRWRCUVhGQ0xIRkRMSFZGUVVONFEwRXNSVUZCVVd0eFJDeFZRVU5RYjBjc1IwRkRTR3hDTEVWQlFWVXNhVU5CUTFZc1RVRkZTM1JYTEVWQlFVODVORU1zUlVGQlVUQndSQ3hWUVVOeVFqUkhMRWRCUVZjc1JVRkRXRGRITEVWQlFVOTZjRVFzUlVGQlVXZHhSQ3hWUVVWVWRVY3NSVUZCV1N4SlFVRkpReXh6UWtGQmMwSTFOMFFzUzBGQlMyOW9SQ3hOUVVGTk1USkRMRXRCUVV0M05VTXNSVUZCUzJ0UkxGbEJRMnBGZVVZc1JVRkJSMmRETEhGQ1FVRnhRa1lzUjBGRmVFSllMRWRCUVZNc1NVRkZUSGhDTEdGQlFWVXNSVUZCVmtFc1JVRkJXVWNzYjBKQlEyWnpRaXhIUVVGbExFVkJRMlpJTEVsQlEwRXNTeXhQUVdwQ1JTeE5MRmRCYlVKUE1YWkVMRVZCUVZGdmNVUXNXVUZCVWl4WlFVTldMRWxCUVV0clJ5eEZRVVZLTEU5QlJFRnNRaXhGUVVGVkxITkRRVU5XTEVsQlJVUXNSMEZCU1hCMlJDeEZRVUZSWjNGRUxGbEJRV05RTEVWQlJYcENMRTlCUkVFeVJpeEZRVUZWTEhWQ1FVRjFRbkIyUkN4RlFVRlJaM0ZFTEZWQlFWTXNVMEZCVTFBc1IwRkRNMFFzU1VGRlMwVXNSVUZCVXpOd1JDeEZRVUZSTkhCRUxGbEJRMnBDT0Vjc1JVRTRRMVFzVTBGQkswSnViVVVzUjBGRE9VSXNTVUZCU1cwNVJDeEZRVUZwUXl4RFFVTndRMEVzVlVGQlYyNDVSQ3hGUVVGRk1qbEVMR2RDUVVWV016bEVMRVZCUVVVNE9VUXNZMEZEVEZnc1JVRkJWVU1zVDBGQlUzQTVSQ3hGUVVGRk5EbEVMR0ZCUld4Q05UbEVMRVZCUVVWcEswUXNjVUpCUTB4a0xFVkJRVlY1U1N4alFVRm5RalZzUlN4RlFVRkZLemxFTEc5Q1FVVjZRaTg1UkN4RlFVRkZieXRFTEhkQ1FVTk1ha0lzUlVGQlZVY3NhVUpCUVcxQ2REbEVMRVZCUVVWckswUXNkVUpCUldoRExFOUJRVTltTEVWQk0wUlJhVW9zUTBGQmMwSm9TQ3hGUVVGUGVrSXNaMElzYVVKQlJYcERMRThzYzBKQlFVRXNSMEZCVFhWSExFVkJRVWR0UXl4blFrRkJaMEpHTEVrc1kwRkJla0lzVXl4aFFVZEJMRThzVjBGRVFYUkNMRVZCUVZVc1IwRkRWaXhKTERCQ1FVbEVMRTlCUkVGQkxFVkJRVlVzT0VKQlExWXNTU3d5UWtGTlJYbENMRVZCUVZrc1NVRkJTWHBFTEZOQlFXTXNVMEZCUTBNc1JVRkJVME1zUjBGRE0wTjNSQ3hGUVVGdFFucEVMRVZCUTI1Q01FUXNSVUZCYTBKNlJDeExRVVZ1UW5aYUxFVkJRVTl6UWl4UFFVRk5MRk5CUVVNNVowUXNSVUZCYlVKeGNFUXNSVUZCZFVKd1NDeEhRVU51UkdwcFJDeEpRVUZYTEVWQlFVRjFiMFFzUzBGQlMyeElMRXRCUVV0RExFbEJTWHBDZUdwRUxGRkJRVkZETEUxQlFVMXpja1FzUjBGRFpHMVVMRVZCUVdkQ2JsUXNTVUZLWm10VUxFOUJUVVl2WXl4RlFVRlBOa01zVFVGQlRTeERRVUZGTEZkQlFWa3ZRaXhKUVVWeVFtMWpMRVZCUVdNc1NVRkJTU3hGUVVGQk1Vc3NXVUZEYkVJeVN5eEZRVUZoTHpSQ0xFdEJRVXQwYWtNc1MwRkJTME1zVlVGQlZUUTFSQ3hGUVVGSGVVTXNiVUpCUXpGRFJpeEZRVUZaYkVrc1QwRkJUMjFKTEVkQlEyWTNReXhIUVVGalFTeEZRVUZYUnl4dFFrRkROVUo1UXl4RlFVRlpha2tzYTBKQlFXdENjVVlzUlVGQlYwY3NiVUpCUlRGRGVHRXNSVUZCVDNvdlF5eExRVUZMTURoRUxFbEJSVTVITEVWQlFVc3NTVUZCU1N4RlFVRkJReXhqUVVGak0wTXNSVUZCU1VNc1NVRkRPVUl5UXl4TlFVRk5ibGtzVFVGQlN5eFhRVUZOTEU5QlFVRTBXQ3hQUVVOd1FpeEhRVUZOUkN4SExFOUJRMDRzVDBGRVFTeFRRVU5CTEVkQlFVMU5MRVZCUVVkRkxFOHNUMEZIVkN4UFFVaEJMRk5CUTBGNFFpeEhRVUZsTEVWQlEyWklMRWxCUTA4c1EwRkJVQ3hGUVVGUExFTkJRVVUwUWl4cFFrRkJhMEpJTEVWQlFVZEhMRzFDUVVGdlFrTXNaVUZCWjBJNVF5eGhMRzFyUWtOMFdXNUZMRmRCUTBFc1VVRkRRU3hSUVZOQkxHTkJTVU1zVjBGQldVRXNSVUZCZFVKRExFZEJRVzVETEUxQlEwTXNXVUZCVFVRc1JVRkJTVU1zU1VGQlJ5eExMRTlCU2s0c1JVRkJRVGhETEdkQ1FVRnJRaXhGUVVOVUxFVkJRVUZETEZGQlFUWkRMRWRCU1RkRUwwTXNSVUZCUjJ4U0xGVkJRVmtzVTBGQlEzbFRMRWRCUVRaQ0xGTkJRVXQ1UWl4cFFrRkJhVUo2UWl4SkxFVkJjVVZ5UlN4UFFUTkZiVU1zVDBGVE0wSXNXVUZCUVhGQ0xHbENRVUZRTEhOQ1FVTkRMRTlCUVU4c1UwRkJRM1pGTEVkQlExQXNUMEZCVHl4RlFVRkxORVVzVlVGQlZTeEZRVUZMUXl4bFFVRm5RamRGTEV0QlNYSkRMRmxCUVVFeVJTeHBRa0ZCVWl4VFFVRjVRbnBDTEVkQlEzaENMRWxCUVVrMFFpeEZRVU5LTEVsQlEwTkJMRVZCUVU4c1JVRkJRV3BaTEZOQlFWTXZUQ3hyUWtGQmEwSnZhVUlzUlVGQlRYQnZReXhOUVVOMlF5eE5RVUZQTHpaQ0xFZEJSVklzV1VGRVFYVkdMRkZCUVZGRExFMUJRVTBzT0VKQlFTdENlRVlzUjBGSk9VTXNTVUZCVFRBd1JDeEZRVUZUY1ZFc1JVRkJTM0JSTEZsQlEzQkNMRkZCUVdWeVF5eEpRVUZZYjBNc1JVRkJTaXhEUVV0QkxFbEJRVTFRTEVWQlFVdFBMRVZCUVU5TUxGRkJRMW95VVN4RlFVRmxjbXRGTEV0QlFVdG5hMFVzVVVGQlVYaFJMRkZCUTJJM1FpeEpRVUZxUWpCVExFVkJTVXBCTEVWQlFXRkRMRWRCUVVkRExGZEJRVmRJTEVkQlNERkNlQzlFTEZGQlFWRkRMRTFCUVUwc0swSkJRV2RETEV0QlFVMHlkVVFzVVVGUWNFUTFkVVFzVVVGQlVVTXNUVUZCVFN3MlFrRmhVaXhaUVVGQmN5OUVMR0ZCUVZJc1YwRkRReXhKUVVGTmNGRXNSVUZCVXl4SlFVRkpMRVZCUVVGMlFpeFBRVVZ1UWl4UFFVUkJkVUlzUlVGQlQwNHNUVUZCVFhwNlJDeExRVUZMSzJwRkxHMUNRVU5ZYUZFc1IwRkhRU3haUVVGQmJWRXNWVUZCVWl4VFFVRnJRbTVSTEVWQlFXZENkVXdzUjBGQmJFTXNWMEZEU3l0RkxFVkJRV1Z5YTBVc1MwRkJTMmRyUlN4UlFVRlJhbEVzUlVGQlQwd3NVMEZEZGtNc1VVRkJjVUl2UWl4SlFVRnFRakJUTEVWQlFUUkNMRU5CUXk5Q0xFZEJRVWszYlVVc1QwRkJUM2RwUkN4TFFVRkxhR2RFTEV0QlFVdG5hMFVzVTBGQlV6VnJSU3hQUVhSRVdpeEpRWFZFYWtJc1RVRkJUU3hKUVVGSkswTXNUVUZCVFN4dlFrRkhha0pyYVVVc1JVRkJaU3hEUVVGRlF5eEhRVVJKTEVsQlFVa3NSVUZCUVVVc1lVRkJZWGhyUlN4TFFVRk5LM3BFTEVkQlFWRXNVMEZCUTFBc1IwRkJaU3hUUVVGTGFWSXNhVUpCUVdsQ2FsSXNTMEZCU3poTUxFbEJSUzlHZEM5RUxFdEJRVXRuYTBVc1VVRkJVV3BSTEVWQlFVOU1MRk5CUVZjeVVTeEZRVVZvUXl4UFFVRlBRU3hGUVVGaFF5eEpRVWRpTEZsQlFVRkhMR2xDUVVGU0xGTkJRWGxDYWxJc1ZVRkRha0o0ZWtRc1MwRkJTMmRyUlN4UlFVRlJlRkVzU1VGSFpDeFpRVUZCYTFJc1lVRkJVQ3hUUVVGdlFqTlJMRVZCUVdkQ2Jra3NSMEZEYmtNc1NVRkJUVzlGTEVWQlFWVXNTVUZCU1N4RlFVRkJlVU1zVVVGRGNFSjZReXhGUVVGUmEwVXNWVUZCVlVnc1IwRkRiRUl2UkN4RlFVRlJiVVVzVjBGQlYzWkpMRWRCUTI1Q05YSkVMRXRCUVV0MVVTeE5RVUZOZVM5RExFbEJSMHdzV1VGQlFXeFdMR0ZCUVZBc1UwRkJiMEpwV2l4RlFVRm5RbXhFTEVkQlEyNURMRWxCUVUxaUxFVkJRVlVzU1VGQlNTeEZRVUZCZVVNc1VVRkRjRUo2UXl4RlFVRlJhMFVzVlVGQlZVZ3NSMEZEYkVJdlJDeEZRVUZSZFVJc1YwRkJWMVlzUjBGRGJrSTNkMFFzUzBGQlMzVlJMRTFCUVUxNUwwTXNTVUZGWWl4RlFUTkZRU3hEUVVGdFF5eEZRVUZCTWxVc1lVRkJkRUlzUlVGQlFXaENMR2xDTERoQ1ExcGlPenM3T3pzN08wRkJWVUVzU1VGQlNXdzJRaXhGUVVGVExFVkJRVkVzU1VGRGFrSnROMElzUlVGQlZTeEZRVUZSTEVsQlEyeENiamxFTEVWQlFWVXNSVUZCVVN4SlFXMUVkRUlzVTBGQlUyODVSQ3hKUVVOUUxFOUJRVTh4TWtJc1JVRkJUekl5UWl4dlFrRkRWaXhYUVVOQkxGZEJSMDRzVTBGQlUwTXNSVUZCWTBNc1JVRkJUVFZzUlN4SFFVTXpRaXhIUVVGSmVXeEZMRWxCUVdWNmJFVXNSVUZEYWtJc1RVRkJUU3hKUVVGSmQwSXNWMEZCVnl3NFFrRmpka0lzVDBGYVNYVjBReXhGUVVGUE1qSkNMSEZDUVVWVVJTeEZRVUZQTEVsQlFVazVOVUlzVjBGQlZ6bHlReXhKUVVOcVFtdDBSQ3hWUVVGWmJtVXNSVUZCVDNwMlF5eFhRVWRZTEU5QlFWUnpiVVVzU1VGRFJrRXNSVUZCVHl4SlFVRkpOekpDTEVWQlFVOHZkVU1zU1VGRmNFSTBiRVVzUlVGQlN6VnNSU3hQUVVGVFFTeEhRVWRVTkd4RkxFVkJZVlFzVTBGQlV6Y3lRaXhGUVVGUk9ESkNMRVZCUVV0RExFVkJRV3RDT1d4RkxFZEJRM1JETEV0QlFVc3JkVU1zUlVGQlR6SXlRaXh4UWtGQmVVSTVhMFVzWjBKQlFXZENiWFZETEVkQlEyNUVMRTlCUVU4c1NVRkJTVUVzUlVGQlR6Z3lRaXhGUVVGTFF5eEZRVUZyUWpsc1JTeEhRVWt6UXl4SFFVRnRRaXhwUWtGQlVqWnNSU3hGUVVGclFpeERRVU16UWl4SFFVRm5ReXhwUWtGQmNrSkRMRVZCUTFRc1RVRkJUU3hKUVVGSkwybEZMRTFCUTFJc2NVVkJSMG9zVDBGQlQyZHFSU3hGUVVGWmJteEZMRXRCUVUxcGJFVXNSMEZGTTBJc1QwRkJUelUxUXl4RlFVRkxjbkpDTEV0QlFVMXBiRVVzUlVGQlMwTXNSVUZCYTBJNWJFVXNSMEZYTTBNc1UwRkJVMmx6UWl4RlFVRk5NalZETEVWQlFVMXFia1VzUlVGQlQyMXVSU3hGUVVGclFqbHNSU3hIUVVNMVF5eEhRVUZ4UWl4cFFrRkJWbkpDTEVWQlExUXNUVUZCVFN4SlFVRkpkVU1zVlVGQlZTeDVRMEZIZEVJc1RVRkJNa0lzYjBKQlFXaENOSFJETEdGQlFTdENibmRETEdGQlFXbENiWGRETEZsQk5rZzNSQ3hUUVVFd1FqZ3lRaXhGUVVGTk1YRkVMRVZCUVU4eWVrTXNSVUZCV1RkMVJDeEhRVWRxUkN4SFFVWkJhMklzUlVGQlRYRjZReXhYUVVWR1RTeEZRVUZoTEVkQlFVc3pla01zUlVGQlRYRjZReXhYUVVGaFRTeEZRVU4yUXl4TlFVRk5MRWxCUVVseWRFUXNWMEZCVnl3MlFrRkhka0lzUjBGQlNUQmFMRVZCUVUxeGVrTXNWMEZCWVUwc1IwRkJZemQxUkN4SFFVRlZMRWRCUXpkRExFMUJRVTBzU1VGQlNYZENMRmRCUVZjc05rSkJTWEpDTUZvc1QwRkVhVUp4TTBNc1NVRkJaakZFTEZGQlFYVkRNRVFzU1VGQldIWjVSQ3hGUVVOMFFpeEpRVUZKT0hKRExGZEJRVmMxZDBJc1VVRkRTSEV6UXl4SlFVRllkbmxFTEVWQlEwUXNTVUZCU1RoeVF5eFhRVUZYTlhkQ0xFVkJRVTh5ZWtNc1IwRkZkRUlzU1VGQlNTOXBRaXhYUVVGWE5YZENMRVZCUVU4eWVrTXNSVUZCV1RkMVJDeEhRVWQ0UXl0MVF5eEZRVUZQTWpKQ0xIRkNRVVZVUlN4RlFVRlBNWEZFTEVkQlEwWm5lVU1zVlVGQldXNWxMRVZCUVU5NmRrTXNWVUZIZUVKemJVVXNSVUZCVDBrc1JVRkJZMG9zUlVGQlRURnhSQ3hIUVVVM1FpeFBRVUZQTUhGRUxFVkJka3BGU3l4RFFVRm5Ra3dzUlVGQlRXcHVSU3hGUVVGUGJXNUZMRVZCUVd0Q09XeEZMRWRCUjI1RExHbENRVUZXY2tJc1JVRjNSbUlzVTBGQmNVSnBia1VzUlVGQlRYSTJReXhGUVVGUk1qWkRMRWRCUTFRc2FVSkJRV0pCTEVkQlFYTkRMRXRCUVdKQkxFbEJRMnhEUVN4RlFVRlhMRkZCUjJJc1NVRkJTMjR6UWl4RlFVRlBiek5DTEZkQlFWZEVMRWRCUTNKQ0xFMUJRVTBzU1VGQlNXaHNSU3hWUVVGVkxEaERRVWQwUWl4SlFVRkpiRUlzUlVGQmQwTXNSVUZCTDBKMWRVUXNSVUZCVjJocVF5eEZRVUZSTWpaRExFZEJSelZDUlN4SFFVWktVaXhGUVVGUFJDeEZRVUZoUXl4RlFVRk5OV3hGTEVsQlJWSnRVaXhOUVVGTmIyRXNSVUZCVVRJMlF5eEhRVVUxUWtVc1NVRkJWM0J0UlN4SlFVbGlOR3hGTEVWQlFVOUJMRVZCUVV0dU9FUXNUVUZCVFN4RlFVRkhNamhFTEVsQlIzWkNMRTlCUVU5U0xFVkJOVWRGZW5OQ0xFTkJRVmQ1YzBJc1JVRkJUV3B1UlN4RlFVRlBiVzVGTEVkQmMwcHVReXhUUVVGeFFrWXNSVUZCVFd4VkxFZEJRM3BDTEVkQlFVa3phVUlzUlVGQlQzTXpRaXhUUVVGVE0xVXNSMEZCVFN4RFFVTjRRaXhKUVVGSk5GVXNSVUZCTkVJc1JVRkJkRUpETEVWQlFWRTNWU3hGUVVGSk1YaEVMRkZCUjNSQ0xFOUJRVzlDTEV0QlJuQkNOR3hGTEVWQlFVOUVMRVZCUVdGRExFVkJRVTFWTEVsQlJXcENkRzFGTEZGQlNWUXdlRVFzUlVGQlNUaFZMRXRCUVV0YUxFVkJRVTBzUlVGQlJ5eEZRVUZIVlN4SFFVaGFWaXhGUVU5WUxFZEJRVWxzVlN4RlFVRkxMRU5CUTFBc1IwRkJORUlzYjBKQlFXaENOV2xDTEdGQlExSTBhVUlzUlVGQlNXaEVMR3RDUVVGclFqVm1MR0ZCUVdkQ0xGZEJRVmswYVVJc1JVRkRjRVFzVFVGQk1FSXNhVUpCUVdaQkxFVkJRVWt4ZUVRc1UwRXJPRU5NZVcxRkxFVkJMemhEYTBNdlZTeEZRVUZKTVhoRUxGTkJaemxEY2tONWJVVXNSVUV2T0VOR1pDeEZRVUZoUXl4RlFVRk5MRWRCUlhKQ1NTeEZRVUZqU2l4RlFVRk5iRlVzUjBGSE4wSXNSMEZCYVVJc1YwRkJZa0VzUlVGQlNXaDBSQ3hOUVVGeFFqSkVMRVZCUVZGeGNFUXNSVUZCU1RFeVFpeE5RVU4yUXl4UFFVRlBaM0pETEVWQlFXTktMRVZCUVUxc1ZTeEZRVUZKTVRKQ0xFMUJkemhEY2tNc1NVRkJaMEo1Y2tNc1JVRndPRU5rTEUxQlFVMHNTVUZCU1hac1JTeFZRVUZWTEhOR1FUbExZbWN2UXl4RFFVRlhNR3hDTEVWQlFVMXFia1VzUjBFMFFqRkNMRk5CUVZNcmJrVXNSVUZCV1VNc1IwRkRia0lzUjBGQmIwSXNhVUpCUVZSQkxFVkJRMVFzVFVGQlRTeEpRVUZKZW14RkxGVkJRVlVzYjBOQlEyWXNSMEZCU1hsc1JTeEZRVUZQTEVWQlEyaENMRTFCUVUwc1NVRkJTVzVzUlN4WFFVRlhMSGREUVRSQ2VrSXNVMEZCVTNWclJTeEZRVUZoU0N4RlFVRk5aU3hIUVVjeFFpeEhRVVpCUkN4RlFVRlhReXhIUVVOWVppeEZRVUZQUkN4RlFVRmhReXhGUVVGTlpTeEZRVUZQTEVWQlFVa3NSVUZCYjBJc1JVRkJhRUpLTEVWQlFWRkpMRXRCUXpWRE5UTkNMRVZCUVU4eU1rSXNiMEpCUTFZc1NVRkJTeXhKUVVGSmFHOUZMRVZCUVVrc1JVRkJSMEVzUlVGQlNXbHdSU3hKUVVGUmFuQkZMRVZCUXpGQ2EyOUZMRVZCUVV0c2IwVXNSMEZCU3l4RlFVZGtMRTlCUVU5cmIwVXNSVUYzUTFRc1UwRkJVMGtzUlVGQlpVb3NSVUZCVFRGeFJDeEhRVU0xUWl4SlFVRkpiR0lzUlVGQlUydGlMRVZCUVUxc1lpeFBRVUZUTEVWQlFVa3NSVUZCTkVJc1JVRkJlRUoxYlVVc1JVRkJVWEp5UkN4RlFVRk5iR0lzVVVGRGJFUTBiRVVzUlVGQlQwUXNSVUZCWVVNc1JVRkJUVFZzUlN4SFFVTXhRaXhKUVVGTExFbEJRVWwwUXl4RlFVRkpMRVZCUVVkQkxFVkJRVWx6UXl4RlFVRlJkRU1zUjBGQlN5eEZRVU12UW10dlJTeEZRVUZMYkc5RkxFZEJRV2RDTEVsQlFWaDNaQ3hGUVVGTmVHUXNSMEZGYkVJc1QwRkJUMnR2UlN4RlFTdEVWQ3hUUVVGVFZ5eEZRVUZUZG0xRkxFZEJSMmhDTEVkQlFVbEJMRWRCUVZWNWJFVXNTVUZEV2l4TlFVRk5MRWxCUVVscWEwVXNWMEZCVnl3d1JFRkRZV2xyUlN4SlFVRmhkamxFTEZOQlFWTXNTVUZCVFN4VlFVVm9SU3hQUVVGblFpeEZRVUZVYkVrc1JVRnpSbFFzVTBGQlUzVjFSQ3hGUVVGWmFHcERMRVZCUVZFeU5rTXNSMEZETTBJc1IwRkJTVzR6UWl4RlFVRlBjek5DTEZOQlFWTTVOa01zUjBGRGJFSXNUMEZCVDBFc1JVRkJUM1p5UWl4UFFVVm9RaXhIUVVFeVFpeHZRa0ZCYUVJNGRVTXNZVUZCTmtRc2JVSkJRWFpDUVN4WlFVRlpPRE5DTEZOQlEzaEVPVE5DTEZsQlFWazRNMElzVDBGQlQzSTNReXhKUVVGWFFTeGhRVUZyUW5WcVFpeGhRVU51UkN4UFFVRlBkbXBDTEVWQlFVOW5ha01zVjBGRlRTeHBRa0ZCV0docVF5eEpRVU5VUVN4RlFVRlRMRWRCUVV0QkxFZEJSMmhDTEVsQlFVa3JOa01zUlVGQlRTODJReXhGUVVGUGRuSkNMRTlCUTJwQ0xFZEJRVmtzU1VGQlVuTnRSU3hGUVVGWExFOUJRVThzUlVGSmRFSXNTVUZFUVN4SlFVRkpUeXhIUVVGakxFbEJSV2hDTEU5QlFWRllMRWRCUTA0c1NVRkJTeXhSUVVOTUxFbEJRVXNzVTBGRFRDeEpRVUZMTEZOQlEwZ3NUMEZCVDBrc1JVRkRWQ3hKUVVGTExFOUJRMHdzU1VGQlN5eFJRVU5NTEZWQlFVc3ZWQ3hGUVVOSUxFOUJRVTkxVlN4RlFVRlpkamRETEVkQlFWRjJja0lzVDBGRE4wSXNTVUZCU3l4UFFVTk1MRWxCUVVzc1VVRkRUQ3hKUVVGTExGVkJRMHdzU1VGQlN5eFhRVU5JTEU5QlFXRXNSVUZCVG5OdFJTeEZRVU5VTEVsQlFVc3NUVUZEU0N4UFFVRlBRU3hKUVVGUkxFVkJRMnBDTEVsQlFVc3NVMEZEU0N4UFFVRlBVeXhGUVVGamVEZERMRWRCUVZGMmNrSXNUMEZETDBJc1VVRkRSU3hIUVVGSk5tMUZMRVZCUVdFc1QwRkJUME1zUlVGQldYWTNReXhIUVVGUmRuSkNMRTlCUXpWRGEyMUZMRWRCUVZrc1IwRkJTMEVzUjBGQlZYSTBReXhqUVVNelFtYzFReXhIUVVGakxFZEJUWFJDTEZOQlFWTkhMRVZCUVdOa0xFVkJRVlZ1WXl4RlFVRlBkRlFzUjBGRGRFTXNTVUZCU1c5M1FpeEhRVUZqTEVWQlkyeENMRk5CVEdOMFZTeEpRVUZXZUVrc1IwRkJkVUpCTEVWQlFWRXNTMEZEYWtOQkxFVkJRVkVzUjBGSlRrRXNSVUZCVVc1d1JDeExRVUZMV2l4UFFVTm1MRTFCUVU4c1IwRlBWQ3hUUVVwWmRYbEVMRWxCUVZJNVlpeEhRVUZ4UWtFc1JVRkJUVGN4UXl4TFFVRkxXaXhWUVVOc1Eza3lReXhGUVVGTk56RkRMRXRCUVV0YUxGRkJSMVI1TWtNc1IwRkJUeXhGUVVOVUxFMUJRVThzUjBGUFZDeEpRVWhCUVN4TFFVRlRMRXRCUTFSelZDeExRVUZYTEVkQlIxUXNUVUZCVHl4SFFVdFVMRWxCUmt0dFl5eEpRVUZWUVN4RlFVRlhMRlZCUjNoQ0xFOUJRVkZCTEVkQlEwNHNTVUZCU3l4TlFVTklMRTlCUVU5bExFVkJRVk55YlVVc1MwRkJUVzF3UkN4RlFVRlBkRlFzUjBGRkwwSXNTVUZCU3l4UFFVTk1MRWxCUVVzc1VVRkRTQ3hQUVVGUGVYZENMRVZCUVZWMGJVVXNTMEZCVFcxd1JDeEZRVUZQZEZRc1IwRkZhRU1zU1VGQlN5eFJRVU5JTEU5QlFVOHdkMElzUlVGQlYzWnRSU3hMUVVGTmJYQkVMRVZCUVU5MFZDeEhRVVZxUXl4SlFVRkxMRk5CUTB3c1NVRkJTeXhUUVVOSUxFOUJRVTh5ZDBJc1JVRkJXWGh0UlN4TFFVRk5iWEJFTEVWQlFVOTBWQ3hIUVVWc1F5eEpRVUZMTEZOQlEwZ3NUMEZCVHpSM1FpeEZRVUZaZW0xRkxFdEJRVTF0Y0VRc1JVRkJUM1JVTEVkQlJXeERMRWxCUVVzc1QwRkRUQ3hKUVVGTExGRkJRMHdzU1VGQlN5eFZRVU5NTEVsQlFVc3NWMEZEU0N4UFFVRlBObmRDTEVWQlFXRXhiVVVzUzBGQlRXMXdSQ3hGUVVGUGRGUXNSMEZGYmtNc1VVRkRSU3hIUVVGSmIzZENMRVZCUVdFc1RVRkJUU3hKUVVGSk0yeEZMRlZCUVZVc2NVSkJRWFZDWjJ4RkxFZEJRelZFUVN4SFFVRlpRU3hGUVVGWExFbEJRVWx5TkVNc1kwRkRNMEpuTlVNc1IwRkJZeXhIUVZOMFFpeFRRVUZUVlN4RlFVRk5lbTVGTEVWQlFVZFlMRVZCUVVkeVFpeEhRVU51UWl4SlFVRkpTaXhGUVVGSmIwTXNSVUZCUlZnc1IwRkRWbGNzUlVGQlJWZ3NSMEZCUzFjc1JVRkJSV2hETEVkQlExUm5ReXhGUVVGRmFFTXNSMEZCUzBvc1JVRnRTVlFzVTBGQlV6aHdSU3hGUVVGelFqbFpMRVZCUVZFcldDeEZRVUZMTlZnc1JVRkJXWEZZTEVWQlFWVnFNRU1zUjBGRmFFVXNSMEZCYzBJc1NVRkJiRUo1T0VJc1JVRkJUekYxUkN4UFFVRmpMRTlCUVZFc1JVRnRRbXBETEVkQmFFSXdRaXhwUWtGQlpqWjFSQ3hIUVVOVWNWZ3NSVUZCVjNKWUxFVkJRMWhCTEVWQlFXRXNSMEZEU2tFc1JVRkJZU3hYUVVOMFFrRXNSVUZCWVN4WFFVTktRU3hIUVVGakxHRkJRM1pDUVN4SFFVRmpMRmxCUldoQ1FTeEhRVUZqUVN4RlFVTldiblJDTEUxQlFVMXRkRUlzUzBGRlVrRXNSVUZCWVRVNFFpeEZRVUZOTEVWQlFVdDVPRUlzUlVGQlR6RjFSQ3hQUVVGVExFZEJTWFJETm5WRUxFVkJRV0VzU1VGQlIwRXNSVUZCWVVnc1JVRkJUekYxUkN4UFFVRlROblZFTEVkQlF6ZERRU3hIUVVGalNDeEZRVUZQTVhWRUxFOUJRVkVzUTBGREwwSXNSMEZCU1dsNVFpeEZRVUZMTEU5QlFWRXNSVUZEV2pRNFFpeEZRVUZoU0N4RlFVRlBNWFZFTEU5QlFWTXNUMEZETjBJc1IwRkJTVFoxUkN4RlFVRmhMRVZCUVVjc1EwRkRla0lzU1VGQlNUVTRRaXhGUVVORExFOUJRVkVzUlVGRVNqUTRRaXhGUVVGaExFVkJWWGhDTEVkQlRHMUNMR2xDUVVGU05GZ3NTVUZEVkVFc1JVRkJUVEV6UWl4RlFVRlBPV2xDTEV0QlFVdDNOa01zUlVGQlMxQXNTVUZKY2tKdU0wSXNSVUZCVDNNelFpeFRRVUZUU1N4SFFVVnNRaXhQUVVGdFFpeEpRVUZtUVN4RlFVRkplbTFGTEZGQlEwVXNSVUZGU0hsdVJTeEZRVUZoTDFrc1JVRkJVU3RZTEVWQlFVczFXQ3hGUVVGWmNWZ3NSVUZCVldvd1F5eEhRVU5zUkN4SFFVRnRRaXhwUWtGQlVuY3dReXhGUVVWb1FpeFBRVVJCUVN4SFFVRlpMRWxCUTFJeE0wSXNSVUZCVHpJeVFpeHhRa0ZEYVVNc2JVSkJRV3BETlRWQ0xGZEJRVmQ0YzBNc1ZVRkJWWE5MTEZGQlF6RkNjVzlDTEVWQlEwczJXaXhYUVVGWGVITkRMRlZCUVZWelN5eFJRVUZSTDB3c1MwRkJTelozUkN4RlFVRlJLMWdzUlVGQlN6VllMRWRCUlM5REwybENMRmRCUVZkNGMwTXNWVUZCVlRoRUxGbEJRVmwyUml4TFFVRkxObmRFTEVWQlFWRXJXQ3hGUVVGTE5WZ3NSMEZIZGtRMFdTeEZRVUZoTDFrc1JVRkJVU3hEUVVGRksxZ3NSMEZCVHpWWUxFVkJRVmx4V0N4RlFVRlZhakJETEVkQlJ6ZEVMRTFCUVUwc1NVRkJTUzkzUWl4VlFVRlZMSGREUVVkMFFpeFRRVUZUZFcxRkxFVkJRV05ETEVWQlFVdHFRaXhGUVVGTE5WZ3NSVUZCV1hGWUxFVkJRVlZxTUVNc1IwRkRja1FzU1VFd1FrbDJNRUlzUlVFeFFrRnBjVVVzUlVGQldTeEZRVU5hUXl4RlFVRlpSaXhGUVVGSk1XNUZMRTlCUTJoQ05tNUZMRVZCUVZsd1FpeEZRVUZKZW0xRkxFOUJSWEJDTEZGQlFXbENkWGxFTEVsQlFXSXlWQ3hKUVVWbExGVkJSR3BDUVN4RlFVRlhibTFGTEU5QlFVOXRiVVVzUjBGQlZYSTBReXhuUWtGRFdTeFZRVUZpY1RSRExFZEJRMVlzV1VGQllrRXNSMEZCZFVNc1lVRkJZa0VzUjBGQmVVSXNRMEZEY2tRc1IwRkJTWGRDTEVWQlFVa3hia1VzVDBGQlV5eEhRVUZMZVcxRkxFVkJRVWw2YlVVc1QwRkJVeXhGUVVOcVF5eFBRVUZSTEVWQlJWWXlia1VzUlVGQldTeEZRVU5hUXl4SFFVRmhMRVZCUTJKRExFZEJRV0VzUlVGRFltaGFMRWRCUVdNc1JVRkpiRUlzVTBGQlUzcERMRVZCUVUwd1lpeEZRVUZMY0hGRkxFZEJRMnhDTEU5QlFXdENMRWxCUVdScGNVVXNSVUZEUzBjc1JVRkJTWEJ4UlN4SFFVVktiM0ZGTEVWQlFVbERMR0ZCUVdGeWNVVXNSVUZCU1dseFJTeEhRVXRvUXl4SFFVRkpNVEZETEVWQlFVc3NRMEZEVUN4SlFVRkpLekZETEVkQlFXTXNSVUZEYkVJc1NVRkJTM1J4UlN4RlFVRkpiWGhFTEVWQlFWbHVlRVFzUlVGQlNXdHhSU3hGUVVGWGJIRkZMRWxCUTJ4RExFZEJRVWt3ZFVRc1JVRkJTM05pTEVWQlFVdG9jVVVzUzBGQlR6QjFSQ3hGUVVGTGNXRXNSMEZCY1VJc1NVRkJhRUoxUWl4RlFVRnZRaXhGUVVGSmRIRkZMRVZCUVVsemNVVXNTVUZGZWtRc1NVRkViMElzU1VGQmFFSkJMRWxCUVcxQ1FTeEZRVUZoZEhGRkxFZEJRMmhEUVN4RlFVRkpjM0ZGTEVWQlFXRXNTVUZCVFVnc1JVRkJWeXhQUVVGUFJ5eEZRVUZoVEN4UFFVVjBReXhKUVVGb1Frc3NTVUZCYlVKMGNVVXNSMEZCUzBFc1JVRkJTWE54UlN4SFFVTm9RMEVzUjBGQll5eFBRVXRzUWl4SlFVUkpibG9zUlVGQllXZGFMRVZCUVZsRUxFbEJRVmN2V1N4RlFVRmhLMWtzUlVGQldVTXNSMEZETlVSdWNVVXNSVUZCU1cxNFJDeEZRVUZaYm5oRUxFZEJRVXNzUlVGQlIwRXNTVUZCU3l4RFFVVm9ReXhKUVVSQkxFbEJRVWwxY1VVc1IwRkJVU3hGUVVOSVF5eEZRVUZKTEVWQlFVZEJMRVZCUVVsTUxFVkJRVmRMTEVsQlF6ZENMRWRCUVVrNVlpeEZRVUZMYzJJc1JVRkJTMmh4UlN4RlFVRkpkM0ZGTEV0QlFVODVZaXhGUVVGTGNXRXNSVUZCUzNsQ0xFZEJRVWtzUTBGRGNrTkVMRWRCUVZFc1JVRkRVaXhOUVVkS0xFZEJRVWxCTEVWQlFVOHNUMEZCVDNaeFJTeEZRVWwwUWl4UFFVRlJMRVZCWlZZc1UwRkJVM2x4UlN4RlFVRlZUQ3hGUVVGTGRqaERMRVZCUVZFMk9FTXNSVUZCVVhCdlJTeEhRVU4wUTI5dlJTeEZRVUZUT1d4RExFOUJRVTg0YkVNc1NVRkJWeXhGUVVNelFpeEpRVUZKUXl4RlFVRlpVQ3hGUVVGSk9XNUZMRTlCUVZOdmIwVXNSVUZEZUVKd2IwVXNSMEZIU0VFc1JVRkJVM05wUXl4UFFVRlBkR2xETEVsQlEwaHhiMFVzU1VGRFdISnZSU3hGUVVGVGNXOUZMRWRCU2xoeWIwVXNSVUZCVTNGdlJTeEZRVk5ZTEVsQlFVbERMRVZCUVZNdk9FTXNSVUZCVDNaeVFpeFBRVU53UWl4SFFVRkpjMjlGTEVWQlFWTXNSMEZCVFN4RlFVRkhMRTFCUVUwc1NVRkJTWEJ1UlN4VlFVRlZMSE5DUVVWMFEyeENMRVZCUVZOemIwVXNSVUZCVXl4SlFVTndRblJ2UlN4RlFVRlRjMjlGTEVWQlFWTXNSMEZGY0VJc1NVRkJTeXhKUVVGSk5YRkZMRVZCUVVrc1JVRkJSMEVzUlVGQlNYTkRMRWxCUVZWMFF5eEZRVUZITEVOQlF5OUNMRWxCUVVrMmNVVXNSVUZCVXpWd1JDeFRRVUZUTkUwc1JVRkJUM1JsTEU5QlFWY3NSVUZCU25aUUxFVkJRVThzUjBGQlNTeEpRVU12UXl4SFFVRkpaMnRETEUxQlFVMDJiVU1zUjBGQlV5eFBRVUZQTjNGRkxFVkJRekZDYjNGRkxFVkJRVWxOTEVWQlFWTXhjVVVzUjBGQlN6WnhSU3hGUVVWd1FpeFBRVUZQTjNGRkxFVkJSMVFzVTBGQlV6aHhSU3hGUVVGWFZpeEZRVUZMZGpoRExFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVTjJReXhQUVVGUGVXOUZMRVZCUVZjelFpeEZRVUZaZGpkRExFVkJRVkYxT0VNc1JVRkJTVGx1UlN4UFFVRlRiMjlGTEVkQlFWTk9MRVZCUVV0TkxFVkJRVkZ3YjBVc1IwRkhNMFVzVTBGQlV6QnZSU3hGUVVGWldpeEZRVUZMZGpoRExFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVTjRReXhQUVVGUGVXOUZMRVZCY1RaQ1ZDeFRRVUYxUWtVc1IwRkZja0lzU1VGRVFTeEpRVUZKUXl4RlFVRlpMRWRCUTFCc2NrVXNSVUZCU1N4RlFVRkhRU3hGUVVGSmFYSkZMRVZCUVVremIwVXNVMEZCVlhSRExFVkJSV2hEYTNKRkxFVkJRVlU1SzBRc1MwRkJlVUlzU1VGQmNFSTJLMFFzUlVGQlNYSnhSQ3hYUVVGWE5XZENMRWxCUldoRExFOUJRVTlyY2tVc1JVRXpOa0pYUXl4RFFVRmhkRGxETEVkQlFWTjFPRU1zUlVGQlMwMHNSVUZCVVhCdlJTeEhRVWQyUkN4VFFVRlRPRzlGTEVWQlFXRm9RaXhGUVVGTGRqaERMRVZCUVZFMk9FTXNSVUZCVVhCdlJTeEhRVU42UXl4UFFVRlBNRzlGTEVWQlFWZGFMRVZCUVV0Mk9FTXNSVUZCVVRZNFF5eEZRVUZSY0c5RkxFZEJSM3BETEZOQlFWTXJiMFVzUlVGQllXcENMRVZCUVV0Mk9FTXNSVUZCVVRZNFF5eEZRVUZSY0c5RkxFZEJRM3BETEU5QlFVOTViMFVzUlVGQlZ6RkNMRVZCUVdONE4wTXNSMEZCVTNVNFF5eEZRVUZMVFN4RlFVRlJjRzlGTEVkQlIzaEVMRk5CUVZObmNFVXNSVUZCVjJ4Q0xFVkJRVXQyT0VNc1JVRkJVVFk0UXl4RlFVRlJjRzlGTEVkQlEzWkRMRTlCUVU5NWIwVXNSVUZyTmtKVUxGTkJRWGxDUlN4RlFVRkxUU3hIUVVjMVFpeEpRVVpCTEVsQlFVbHNja1VzUlVGQlIzazJReXhGUVVGSlJDeEZRVU5RY1hkQ0xFVkJRVmtzUjBGRFVHeHlSU3hGUVVGSkxFVkJRVWRCTEVWQlFVbHBja1VzUlVGQlNUTnZSU3hYUVVOcVFtbHdSU3hIUVVGVExFZEJRVXNzUzBGRVlYWnlSU3hGUVVkb1Ewc3NSVUZCU1RSeFJTeEZRVUZKY25GRUxGZEJRVmMxWjBJc1IwRkRia0k0TmtNc1JVRkJTM28yUXl4SFFVRkxMRVZCUTFaM05rTXNSVUZCUzNnMlF5eEZRVUZKTEVsQlExUTJjVVVzUlVGQlZUa3JSQ3hMUVVGTGVYVkRMRWRCUTJaeGQwSXNSVUZCVlRrclJDeExRVUZMTUhWRExFZEJSMnBDTEU5QlFVOXZkMElzUlVFdk5rSlhUU3hEUVVGbE16bERMRVZCUVZGMU9FTXNSVUZCU1RsdVJTeFBRVUZUYjI5RkxFZEJRVk5PTEVWQlFVdE5MRVZCUVZGd2IwVXNSMEZyUmpsRkxGTkJRVk54YmtVc1JVRkJZVk1zUlVGQlN5OWtMRVZCUVU5MFZDeEhRVU5vUXl4UFFVRmpMRWxCUVZaelZDeEhRVUZsZEZRc1NVRkJVWEY0UWl4RlFVRkpPVzVGTEU5QlEzUkNjWEZETEVWQlFVODRLMElzWTBGQlkzSkNMRWRCUlhKQ2VqbENMRVZCUVU4NEswSXNZMEZCWTNKQ0xFVkJRVWx5SzBRc1RVRkJUWE5uUkN4RlFVRlBkRlFzU1VGSmFrUXNVMEZCVTNsM1FpeEZRVUZYV1N4RlFVRkxMMlFzUlVGQlQzUlVMRWRCUXpsQ1FTeEZRVUZOY2pGRExFdEJRVXRGTEVsQlFVbDNiVVVzUlVGQlNUbHVSU3hQUVVGUmVUSkRMRWRCU1ROQ0xFbEJTRUVzU1VGQlNUSjVRaXhGUVVGTkxFZEJSVTR4Y2tVc1JVRkJTWEZ6UkN4RlFVTkVjbk5FTEVWQlFVa3JORU1zUjBGQlN5eERRVU5rTEVsQlVVMDBlVUlzUlVGQldVTXNSVUZCVjBNc1JVRkJXVU1zUlVGU2NrTkRMRVZCUVZrelFpeEZRVUZKY0hGRkxFZEJRMmhDWjNORkxFVkJRVmtzUzBGRFdrTXNSVUZCYjBKR0xFVkJRVmtzU1VGQlVTeEZRVU4yUTBFc1JVRkJXU3hKUVVGUkxFVkJRM0JDUVN4RlFVRlpMRWxCUVZFc1JVRkRja0lzUlVGRlNpeEhRVUZKTDNKRkxFVkJRVWxwYzBVc1IwRkJiMEpzZWtJc1JVRkhNVUlzVDBGQlVXdDZRaXhIUVVOT0xFdEJRVXNzUlVGRFEwWXNSVUZCV1N4TlFVTmtReXhGUVVGWlJDeEhRVVZrTEUxQlEwWXNTMEZCU3l4RlFVVjVRaXhOUVVGV0xFdEJSR3hDU2l4RlFVRmhka0lzUlVGQlNYQnhSU3hGUVVGSkxFOUJSVzVDT0hKRkxFZEJRVFpDTEVkQlFWcERMRWxCUVhGQ0xFVkJRVzlDTEVkQlFXSktMRWRCUTNwQ0xFMUJRMnhDU3l4RlFVRlpSaXhIUVVkb1FpeE5RVU5HTEV0QlFVc3NSVUZEU0Vnc1JVRkJZWFpDTEVWQlFVbHdjVVVzUlVGQlNTeEhRVU55UWpSeVJTeEZRVUZaZUVJc1JVRkJTWEJ4UlN4RlFVRkpMRWRCUTFFc1RVRkJWaXhKUVVGaU1uSkZMRWxCUVhORUxFMUJRVllzU1VGQldrTXNTMEZEYmtORkxFZEJRVFpDTEVkQlFWcERMRWxCUVc5Q0xFbEJRVzlDTEVkQlFXSktMRWxCUVhOQ0xFVkJRVzFDTEVkQlFWcERMRWRCUTNKRUxFOUJRVlZGTEVWQlFXZENMRTlCUVZWQkxFVkJRV2RDTEZOQlEzUkZSU3hGUVVGWlJpeEhRVWRvUWl4TlFVTkdMRXRCUVVzc1JVRkRTRWdzUlVGQllYWkNMRVZCUVVsd2NVVXNSVUZCU1N4SFFVTnlRalJ5UlN4RlFVRlplRUlzUlVGQlNYQnhSU3hGUVVGSkxFZEJRM0JDTm5KRkxFVkJRV0Y2UWl4RlFVRkpjSEZGTEVWQlFVa3NSMEZEVHl4TlFVRldMRWxCUVdJeWNrVXNTVUZCYzBRc1RVRkJWaXhKUVVGYVF5eEpRVUZ6UkN4TlFVRldMRWxCUVdKRExFdEJRMnhGUXl4SFFVRTJRaXhIUVVGYVF5eEpRVUZ2UWl4SlFVRnhRaXhIUVVGaVNpeEpRVUZ6UWl4SlFVRnRRaXhIUVVGYVF5eEpRVUZ4UWl4RlFVRnZRaXhIUVVGaVF5eEhRVU5zUml4UFFVRlZReXhGUVVGblFpeFZRVU0xUTBVc1JVRkJXVVlzUjBGTlNpeFBRVUZrUlN4SFFVZEdRU3hGUVVGWkxFMUJRMXBETEVWQlFXMUNMRWRCUTFaRUxFVkJRVmtzVVVGRmNrSkJMRWRCUVdFc1RVRkRZazRzUlVGQlNYUXZSQ3hMUVVGTE5DOUVMRWxCUVdNc1IwRkJTeXhMUVVGUkxFOUJRM0JEUVN4RlFVRlpMRTFCUVhGQ0xFdEJRVnBCTEVkQlIzWkNUaXhGUVVGSmRDOUVMRXRCUVVzMEwwUXNSMEZEVkdoelJTeEhRVUZMYVhORkxFVkJSMUFzVDBGUlJpeFRRVUZuUTBNc1IwRkRPVUlzU1VGQlNYUkVMRVZCUVUxelJDeEZRVUZYTlhCRkxFOUJRM0pDTEVkQlFVbHpiVVVzUjBGS2NVSXNTMEZMZGtJc1QwRkJUM1p0UlN4UFFVRlBlV1VzWVVGQllXeFdMRTFCUVUxMlNpeFBRVUZSTm5CRkxFZEJTVE5ETEVsQlFVbFNMRVZCUVUwc1IwRkRUakZ5UlN4RlFVRkpMRVZCUTFJc1MwRkJUMEVzUlVGQlNUUnZSU3hIUVVOVU9FTXNSMEZCVDNKd1JTeFBRVUZQZVdVc1lVRkJZV3hXTEUxQlEzcENka29zVDBGRFFUWndSU3hGUVVGWGJtZEZMRTFCUVUwdlRDeEZRVUZIUVN4SFFXUkRMRTlCYVVKNlFpeFBRVUZQTUhKRkxFVkJka0pCVXl4RFFVRnpRbFFzUjBFNU9FSXZRbXh6UlN4RlFVRlJObmhETEU5QlFWTkJMRVZCUTJwQ04zaERMRVZCUVZFMGMwVXNWMEZ2VkZJc1UwRkJjVUk1Y0VVc1NVRkRaRUVzUjBGQlZVRXNTVUZEWWtFc1JVRkJVeXhIUVVWWUxFOUJRVThyZFVNc1JVRkJUMU1zVDBGQlQzaDJReXhKUVhaVWRrSTVReXhGUVVGUk5uTkZMR3RDUVVGdlFpeEhRVEJDTlVKb04wSXNSVUZCVHpJeVFpeDVRa0ZCY1VSdVZDeEpRVUV2UWpWNFJDeEZRVUZQSzJ0RkxHOUNRVU5vUXk5clJTeEZRVUZQSzJ0RkxHOUNRVkZZTEZkQlEwVXNTVUZEUlN4SlFVRkpaME1zUlVGQlRTeEpRVUZKTlRkQ0xGZEJRVmNzUjBGRmVrSXNUMEZFUVRRM1FpeEZRVUZKZUdFc1ZVRkJXU3hEUVVGRFFTeFZRVUZYY0doQ0xGZEJRVmQ0YzBNc1ZVRkJWekJ4UlN4SlFVRkxMRmRCUVdNc1QwRkJUeXhMUVVOMlJDeExRVUZrZEVNc1JVRkJTWE5ETEU5QlEybENMRzFDUVVGcVFuUkRMRVZCUVVrek4wSXNWVUZEZFVJc1NVRkJiRU15TjBJc1JVRkJTVE0zUWl4VFFVRlRMRVZCUVVjc1IwRkJSM2RwUWl4WFFVTjJRaXhOUVVGUGRIVkVMRWRCUTFBc1QwRkJUeXhIUVdaUVozRkZMRWRCUzBvdmMwVXNSVUZCVVhWdlJTeFhRVUZoUVN4SlFXdEZja0l4TWtJc1JVRkJUMjAzUWl4VFFVRlhMRXRCUjJ4Q2JqZENMRVZCUVU5dk4wSXNVMEZCVnl4VFFVRlZla01zUjBGRk1VSXNUMEZFUVVFc1JVRkJTWGhoTEZWQlFWbHVaU3hGUVVGUGVuWkRMRlZCUTJoQ2IyOUZMRWRCTWtKVU16UkNMRVZCUVU4NWFVSXNTMEZCVHl4VFFVRlZkSFJDTEVWQlFVOXRia1VzUlVGQmEwSTViRVVzUjBGREwwTXNUMEZCVDJselFpeEZRVUZMTEV0QlFVMTBkRUlzUlVGQlQyMXVSU3hGUVVGclFqbHNSU3hKUVVkNlF5dDFReXhGUVVGUE1qSkNMSE5DUVVOVU16SkNMRVZCUVU5NmRrTXNWVUZCVlRSMFJDeFZRVUZaY0doQ0xGZEJRVmQ0YzBNc1ZVRkRlRU41ZGtNc1JVRkJUMjFsTEZWQlFWbHdhRUlzVjBGRFJ5eHZRa0ZCV0hKMFF5eFJRVUV3UWtFc1QwRkJUekp5UlN4VFFVTjRRM0kzUWl4RlFVRlBkSGRETEU5QlFVOHlja1VzVjBGQllYSTNRaXhIUVVVM1FqTjNReXhQUVVGUFF5eGxRVUZsTUhkRExFVkJRVkYwZDBNc1QwRkJUekp5UlN4UlFVRlRMRU5CUXpWRGVuSkZMRTFCUVU4c1MwRkRVRzlETEdOQlFXTXNTMEZwUTNCQ1ozVkRMRVZCUVU5VExFMUJRVkVzVTBGQlZXMHpRaXhGUVVGTk1FUXNSVUZCVFc1RkxFZEJRMjVETEU5QmNrSkdMRk5CUVdkQ1RpeEZRVUZOWlN4RlFVRk5NRVFzUlVGQlRXNUZMRWRCUldoRExFOUJSRUZSTEVWQlFWZERMRWRCUTFCQkxFZEJRVkVzUlVGRFNHaENMRVZCUVdGRExFVkJRVTFsTEZGQlJXWndWU3hKUVVGVU9GZ3NSVUZKZVVJc2FVSkJRV0p1UlN4RlFVTldVQ3hGUVVGaFF5eEZRVUZOWlN4SFFVRk5NRVFzUzBGQlMwRXNSVUZCVFc1RkxFZEJRM0JEVUN4RlFVRmhReXhGUVVGTlpTeEhRVUZOTUVRc1MwRkJTMEVzUjBGRk4wSXhSU3hGUVVGaFF5eEZRVUZOWlN4SFFWRnVRbTR6UWl4RFFVRk5MRXRCUVUxdE0wSXNSVUZCVFRCRUxFVkJRVTF1UlN4SlFXbENha051TTBJc1JVRkJUMmN6UWl4WlFVRmpMRk5CUVZWWkxFZEJRemRDTEU5QlFVOWFMRVZCUVZrc1MwRkJUVmtzU1VGTE0wSTFNMElzUlVGQlQzVTNRaXhuUWtGQmEwSXNVMEZCVlRORUxFZEJRMnBETEU5QlFVOWFMRVZCUVZrc1MwRkJUVmtzU1VGcFNETkNOVE5DTEVWQlFVOXpNMElzVTBGQlZ5eFRRVUZ0UW5adFJTeEhRVU51UXl4UlFVRmxMRTFCUVV4QkxFbEJRV0ZCTEVWQlFVVjVjVVVzV1VGSE0wSjROMElzUlVGQlQzcEdMRkZCUVZVc1UwRkJhMEo2Y0VNc1JVRkJSME1zUjBGRGNFTXNTVUZCUzJsMlF5eEZRVUZQY3pOQ0xGTkJRVk40YlVVc1MwRkJUMnQyUXl4RlFVRlBjek5DTEZOQlFWTjJiVVVzUjBGRE1VTXNUVUZCVFN4SlFVRkpiMElzVlVGQlZTdzJRa0ZIZEVJc1IwRkJTWEpDTEVsQlFVMURMRVZCUVVjc1QwRkJUeXhGUVV0d1FpeEpRVWhCTEVsQlFVa3djVVVzUlVGQlNUTnhSU3hGUVVGRlJ5eFBRVU5PT0hWRUxFVkJRVWxvZGtRc1JVRkJSVVVzVDBGRlJIUkRMRVZCUVVrc1JVRkJSelJ2UlN4RlFVRk5iR3hGTEV0QlFVdEZMRWxCUVVscmNFVXNSVUZCUnpGaUxFZEJRVWx3ZUVRc1JVRkJTVFJ2UlN4SlFVRlBOVzlGTEVWQlF5OURMRWRCUVVsdFF5eEZRVUZGYmtNc1MwRkJUMjlETEVWQlFVVndReXhIUVVGSkxFTkJRMnBDT0hORkxFVkJRVWt6Y1VVc1JVRkJSVzVETEVkQlEwNXZlRVFzUlVGQlNXaDJSQ3hGUVVGRmNFTXNSMEZEVGl4TlFVbEtMRTlCUVVrNGMwVXNSVUZCU1RGaUxFZEJRVmNzUlVGRFprRXNSVUZCU1RCaUxFVkJRVlVzUlVGRFdDeEhRVWRVZWpkQ0xFVkJRVTl2TTBJc1YwRkJZU3hUUVVGeFFrUXNSMEZEZGtNc1QwRkJVVzV0UlN4UFFVRlBiVzFGTEVkQlFWVnlORU1zWlVGRGRrSXNTVUZCU3l4TlFVTk1MRWxCUVVzc1QwRkRUQ3hKUVVGTExGRkJRMHdzU1VGQlN5eFJRVU5NTEVsQlFVc3NVMEZEVEN4SlFVRkxMRk5CUTB3c1NVRkJTeXhUUVVOTUxFbEJRVXNzVDBGRFRDeEpRVUZMTEZGQlEwd3NTVUZCU3l4VlFVTk1MRWxCUVVzc1YwRkRTQ3hQUVVGUExFVkJRMVFzVVVGRFJTeFBRVUZQTEVsQlNXSnJhRUlzUlVGQlR6RXZRaXhQUVVGVExGTkJRV2xDYnpkRUxFVkJRVTE2Y1VVc1IwRkRja01zU1VGQlMzRkpMRVZCUVZGdmFVVXNSMEZEV0N4TlFVRk5MRWxCUVVsMmNFVXNWVUZCVlN3clEwRkhkRUlzUjBGQmIwSXNTVUZCYUVKMWNFVXNSVUZCUzNweFJTeFBRVU5RTEU5QlFVOHJkVU1zUlVGQlQxTXNUVUZCVFN4SFFVZDBRaXhKUVVGSk9YaERMRVZCUTBvc1VVRkJaVFl3UkN4SlFVRllkbmxFTEVWQlJVWXNTVUZFUVVFc1JVRkJVeXhGUVVOS2RFTXNSVUZCU1N4RlFVRkhRU3hGUVVGSkszTkZMRVZCUVV0NmNVVXNVMEZCVlhSRExFVkJRemRDYzBNc1IwRkJWWGx4UlN4RlFVRkxMM05GTEVkQlFVZHpReXhQUVVsMFFpeEpRVUZKTUhWRUxFVkJRVk16Wml4RlFVRlBaek5DTEZsQlFWa3ZiRVVzUjBGRE5VSXdjVVVzUlVGQlRTeEZRVU5XTEVsQlFVdG9kRVVzUlVGQlNTeEZRVUZIUVN4RlFVRkpLM05GTEVWQlFVdDZjVVVzVTBGQlZYUkRMRVZCUVVjc1EwRkRhRU1zU1VGQlNXOXhSU3hGUVVGTk1rTXNSVUZCU3k5elJTeEhRVU5tTEVsQlFVdHhlRU1zUlVGQlQzTXpRaXhUUVVGVGVVSXNSMEZEYmtJc1RVRkJUU3hKUVVGSk5XMUZMRlZCUVZVc0swTkJSWFJDTkcxRkxFVkJRVWwwUWl4TFFVRkxPVmdzUlVGQlVXZGpMRWRCUTJwQ1FTeEhRVUZQTlVNc1JVRkJTVGx1UlN4UFFVVmlMRTlCUVU4d2RVUXNSMEU0UTFRelppeEZRVUZQZDJZc1YwRkJZVUVzUlVFd1JYQkNlR1lzUlVGQlQzcDJReXhWUVVGVmFYSkZMRmRCUVZrc1JVRlJOMEo0TjBJc1JVRkJUM3AyUXl4VlFVRlZjWEpGTEU5QlFWTXNWMEZEZUVJc1NVRkJTWEpGTEVWQlFVMHhiRVVzUzBGQlMxb3NUMEZEWml4SFFVRkpjMjFGTEVWQlFVMHNSMEZCVFN4RlFVTmtMRTFCUVUwc1NVRkJTVGxyUlN4WFFVRlhMRFpEUVVWMlFpeEpRVUZMTEVsQlFVazVSQ3hGUVVGSkxFVkJRVWRCTEVWQlFVazBiMFVzUlVGQlN6VnZSU3hIUVVGTExFVkJRelZDTm5CRkxFVkJRVXN6YlVVc1MwRkJUV3hFTEVWQlFVZEJMRVZCUVVrc1IwRkZjRUlzVDBGQlQydEVMRTFCUjFSdGRVTXNSVUZCVDNwMlF5eFZRVUZWYzNKRkxFOUJRVk1zVjBGRGVFSXNTVUZCU1hSRkxFVkJRVTB4YkVVc1MwRkJTMW9zVDBGRFppeEhRVUZKYzIxRkxFVkJRVTBzUjBGQlRTeEZRVU5rTEUxQlFVMHNTVUZCU1RsclJTeFhRVUZYTERaRFFVVjJRaXhKUVVGTExFbEJRVWs1UkN4RlFVRkpMRVZCUVVkQkxFVkJRVWswYjBVc1JVRkJTelZ2UlN4SFFVRkxMRVZCUXpWQ05uQkZMRVZCUVVzemJVVXNTMEZCVFd4RUxFVkJRVWRCTEVWQlFVa3NSMEZEYkVJMmNFVXNSVUZCU3pOdFJTeExRVUZOYkVRc1JVRkJTU3hGUVVGSFFTeEZRVUZKTEVkQlJYaENMRTlCUVU5clJDeE5RVWRVYlhWRExFVkJRVTk2ZGtNc1ZVRkJWWFZ5UlN4UFFVRlRMRmRCUTNoQ0xFbEJRVWwyUlN4RlFVRk5NV3hGTEV0QlFVdGFMRTlCUTJZc1IwRkJTWE50UlN4RlFVRk5MRWRCUVUwc1JVRkRaQ3hOUVVGTkxFbEJRVWs1YTBVc1YwRkJWeXcyUTBGRmRrSXNTVUZCU3l4SlFVRkpPVVFzUlVGQlNTeEZRVUZIUVN4RlFVRkpORzlGTEVWQlFVczFiMFVzUjBGQlN5eEZRVU0xUWpad1JTeEZRVUZMTTIxRkxFdEJRVTFzUkN4RlFVRkhRU3hGUVVGSkxFZEJRMnhDTm5CRkxFVkJRVXN6YlVVc1MwRkJUV3hFTEVWQlFVa3NSVUZCUjBFc1JVRkJTU3hIUVVOMFFqWndSU3hGUVVGTE0yMUZMRXRCUVUxc1JDeEZRVUZKTEVWQlFVZEJMRVZCUVVrc1IwRkRkRUkyY0VVc1JVRkJTek50UlN4TFFVRk5iRVFzUlVGQlNTeEZRVUZIUVN4RlFVRkpMRWRCUlhoQ0xFOUJRVTlyUkN4TlFVZFViWFZETEVWQlFVOTZka01zVlVGQlZUUkpMRk5CUVZjc1YwRkRNVUlzU1VGQlNXeEpMRVZCUVhWQ0xFVkJRV1JaTEV0QlFVdGFMRTlCUTJ4Q0xFOUJRV1VzU1VGQldFRXNSVUZCY1VJc1IwRkRRU3hKUVVGeVFuVktMRlZCUVZWMlNpeFBRVUZ4UW10dVJTeEZRVUZWZEcxRkxFdEJRVTBzUlVGQlIxb3NSMEZETDBObmJrVXNSVUZCWVRFNVJDeE5RVUZOTVVrc1MwRkJUVEpKTEZsQlIyeERkMnhETEVWQlFVOTZka01zVlVGQlZYRldMRTlCUVZNc1UwRkJhVUkzVlN4SFFVTjZReXhKUVVGTGFYWkRMRVZCUVU5ek0wSXNVMEZCVTNadFJTeEhRVUZKTEUxQlFVMHNTVUZCU1c5Q0xGVkJRVlVzTmtKQlF6ZERMRTlCUVVsT0xFOUJRVk5rTEVkQlEzTkNMRWxCUVRWQ2FYWkRMRVZCUVU5NlJpeFJRVUZSTVc5RExFdEJRVTFrTEVsQlJ6bENhWFpETEVWQlFVOTZka01zVlVGQlZYZHlSU3hSUVVGVkxGZEJRM3BDTEVsQlFVbHVReXhGUVVGTkxFZEJRMDUwYmtVc1JVRkJUVzVGTEVWQlFWRTJjMFVzYTBKQlMyeENMRTlCU2tsdWNFVXNTMEZCUzFvc1QwRkJVeXhKUVVOb1FqSnZSU3hGUVVGTkwyNUZMRXRCUVV0elNDeFRRVUZUTEUxQlFVOHNSVUZCUnpkSExFZEJRVXR4VFN4TlFVRk5MRk5CUVZOMFJ5eExRVUZMTEV0QlEyNUVlRWNzUzBGQlMxb3NUMEZCVTNGQ0xFbEJRVXR6YmtVc1IwRkJUeXhWUVVWNlFpeFhRVUZoUVN4RlFVRk5MRXRCUnpWQ05UVkNMRVZCUVU5NmRrTXNWVUZCVldkeFF5eFJRVUZWTEZOQlFXdENNemRDTEVWQlFWRnZPRU1zUlVGQlQzUlVMRVZCUVV0ek1FSXNSVUZCVjBNc1IwRkRNVVVzU1VGQlMybzRRaXhGUVVGUGN6TkNMRk5CUVZNeE5FUXNSMEZEYmtJc1RVRkJUU3hKUVVGSmVrMHNWVUZCVlN3MlFrRm5RblJDTEZGQlltTnhlRVFzU1VGQlZuaEpMRWxCUTBaQkxFVkJRVkVzVVVGRlJYZEpMRWxCUVZJNVlpeEpRVU5HUVN4RlFVRk5PVzlETEVWQlFWTkJMRVZCUVU4elRpeFBRVUZUTEZGQlJXWjFlVVFzU1VGQlpIZFpMRWxCUTBaQkxFVkJRVmtzVVVGRlJYaFpMRWxCUVZwNVdTeEpRVU5HUVN4RlFVRlZjSEZGTEV0QlFVdGFMRkZCUjJJcmNFUXNSVUZCVVN4SFFVRkxkRlFzUlVGQlRUbHZReXhGUVVGUE0wNHNVVUZCVlN0eFJTeEZRVUZaTEVkQlFVdERMRVZCUVZWd2NVVXNTMEZCUzFvc1QwRkRkRVVzVFVGQlRTeEpRVUZKZDBJc1YwRkJWeXh6UWtGSGRrSXNSMEZCU1hWd1JTeEhRVUZoUXl4SFFVRlhhbWhDTEVkQlFWTjBWQ3hGUVVOdVF5eFBRVUZQTEVWQlJWUXNSMEZCU1hNd1FpeEhRVUZoUXl4RlFVTm1MRTlCUVZFc1JVRkZWaXhIUVVGSmFtaENMRWRCUVZOMFZDeEZRVU5ZTEU5QlFVOHNSVUZSVkN4SFFVRkpOekZETEU5QlFWTXJUU3hGUVVGUkxFOUJRVThzUlVGVE5VSXNTVUZRUVN4SlFVRkpOamhFTEVkQlNrcFJMRXRCUVdFc1NVRkVZa1FzUzBGQlpTeEhRVTFZYW1Nc1IwRlFTbkpaTEV0QlFWTXNTVUZFVkhOVUxFdEJRVmNzUjBGVFVIVmpMRVZCUVUxc2JFVXNTMEZCUzBVc1NVRkJTV3R3UlN4RlFVRkhNV0lzUjBGRmJFSnRZeXhGUVVGWGNuRkZMRXRCUVVzMlNTeE5RVUZOYzJoRkxFVkJRVmRETEVkQlEycERSU3hGUVVGaGRqbEVMRVZCUVU5c1JTeE5RVUZOYzJkRUxFVkJRVTkwVkN4SFFVVTFRaTgwUXl4RlFVRkpMRVZCUVVkQkxFVkJRVWswYjBVc1NVRkJUelZ2UlN4RlFVTjZRaXhIUVVGSmRYUkZMRVZCUVZOMmRFVXNTMEZCVDNkMFJTeEZRVUZYZUhSRkxFZEJRVWtzUTBGRGFrTTRjMFVzUlVGQlNWTXNSVUZCVTNaMFJTeEhRVU5pYjNoRUxFVkJRVWx2WXl4RlFVRlhlSFJGTEVkQlEyWXNUVUZKU2l4UFFVRkpPSE5GTEVWQlFVa3hZaXhIUVVGWExFVkJRMlpCTEVWQlFVa3dZaXhGUVVGVkxFVkJRMWdzUjBFMlNGUjZOMElzUlVGQlQzcDJReXhWUVVGVk5uSkZMRk5CUVZjc1UwRkJiVUl4UlN4RlFVRkxOVmdzUlVGQldYRllMRWRCUXpsRUxFOUJRVzlFTEVsQlFUZERkR3hGTEV0QlFVdG5TaXhSUVVGUk5qaEVMRVZCUVVzMVdDeEZRVUZaY1Znc1NVRkhka051TTBJc1JVRkJUM3AyUXl4VlFVRlZjMHNzVVVGQlZTeFRRVUZyUWpZNFJDeEZRVUZMTlZnc1JVRkJXWEZZTEVkQlF6VkVMRTlCUVU5elFpeEZRVUZ4UWpWdFJTeExRVUZOTm14RkxFVkJRVXMxV0N4RlFVRlpjVmdzUjBGQlZTeEpRVWN2Ukc0elFpeEZRVUZQZW5aRExGVkJRVlU0UkN4WlFVRmpMRk5CUVhOQ2NXcEZMRVZCUVVzMVdDeEZRVUZaY1Znc1IwRkRjRVVzVDBGQlQzTkNMRVZCUVhGQ05XMUZMRXRCUVUwMmJFVXNSVUZCU3pWWUxFVkJRVmx4V0N4SFFVRlZMRWxCYTBRdlJHNHpRaXhGUVVGUGVuWkRMRlZCUVZVMlVpeE5RVUZSTEZOQlFXZENiMkVzUlVGQlVUWTRReXhGUVVGUmNHOUZMRVZCUVZGcmJVVXNSMEZGTDBRc1VVRkJaVE5VTEVsQlFWZzJWaXhGUVVOR2JFTXNSVUZCVnl4UFFVTlliRzFGTEVWQlFWTlpMRXRCUVV0YUxFOUJRMlJ2YjBVc1JVRkJVeXhQUVVWS0xGRkJRV1UzVml4SlFVRllkbmxFTEVkQlFUQkRMR2xDUVVGWWIyOUZMRVZCUTNoRGJFTXNSVUZCVjJ0RExFVkJRMWh3YjBVc1JVRkJVMWtzUzBGQlMxb3NUMEZEWkc5dlJTeEZRVUZUTEUxQlJVb3NTMEZCU1hCM1JDeFRRVUZUYjNkRUxFZEJWMnhDTEUxQlFVMHNTVUZCU1hKc1JTeE5RVU5TTERKRlFWaEdjV3hGTEVkQlFXdENMRVZCUTJSd2QwUXNVMEZCVTJoWkxFbEJRMWhCTEVkQlFXdENMRTlCUTBSMWVVUXNTVUZCWWpKVUxFbEJRWGRDUVN4RlFVRlhMRlZCUlhaRFFTeEZRVUZYYkcxRkxFVkJRMWhCTEU5QlFWTjFlVVFzUjBGVFlpeEpRVUZKT0ZZc1JVRkJXWHB1UlN4TFFVRkxXaXhQUVVGVGIyOUZMRVZCUnpsQ0xGTkJSbVUzVml4SlFVRllkbmxFTEVkQlFYZENRU3hGUVVGVGNXOUZMRXRCUVZkeWIwVXNSVUZCVTNGdlJTeEhRVVZ3UkRrNFF5eEZRVUZQZG5KQ0xFOUJRVk1zU1VGQlRVRXNSVUZCVXl4SFFVRkxiMjlGTEVWQlFWTXNTVUZCVDBFc1JVRkJVM2h1UlN4TFFVRkxXaXhQUVVOeVJTeE5RVUZOTEVsQlFVbDNRaXhYUVVGWExEQkRRVWRzUWpCclJTeEpRVUZWUVN4RlFVRlhMRkZCUnpGQ0xFbEJSRUVzU1VGQlNWY3NSMEZCWXl4SlFVVm9RaXhQUVVGUldDeEhRVU5PTEVsQlFVc3NUVUZEU0N4UFFVRlBhVU1zUlVGQlUzWnVSU3hMUVVGTk1uRkNMRVZCUVZFMk9FTXNSVUZCVVhCdlJTeEhRVVY0UXl4SlFVRkxMRTlCUTB3c1NVRkJTeXhSUVVOSUxFOUJRVTkzYjBVc1JVRkJWVFZ1UlN4TFFVRk5NbkZDTEVWQlFWRTJPRU1zUlVGQlVYQnZSU3hIUVVWNlF5eEpRVUZMTEZGQlEwZ3NUMEZCVHpCdlJTeEZRVUZYT1c1RkxFdEJRVTB5Y1VJc1JVRkJVVFk0UXl4RlFVRlJjRzlGTEVkQlJURkRMRWxCUVVzc1UwRkRUQ3hKUVVGTExGTkJRMGdzVDBGQlR6aHZSU3hGUVVGWmJHOUZMRXRCUVUweWNVSXNSVUZCVVRZNFF5eEZRVUZSY0c5RkxFZEJSVE5ETEVsQlFVc3NVMEZGU0N4UFFVRlBLMjlGTEVWQlFWbHViMFVzUzBGQlRUSnhRaXhGUVVGUk5qaERMRVZCUVZGd2IwVXNSMEZGTTBNc1NVRkJTeXhQUVVOTUxFbEJRVXNzVVVGRFRDeEpRVUZMTEZWQlEwd3NTVUZCU3l4WFFVTklMRTlCUVU5bmNFVXNSVUZCVlhCdlJTeExRVUZOTW5GQ0xFVkJRVkUyT0VNc1JVRkJVWEJ2UlN4SFFVVjZReXhSUVVORkxFZEJRVWsyYlVVc1JVRkJZU3hOUVVGTkxFbEJRVWt6YkVVc1ZVRkJWU3h4UWtGQmRVSm5iRVVzUjBGRE5VUkJMRWRCUVZrc1IwRkJTMEVzUjBGQlZYSTBReXhqUVVNelFtYzFReXhIUVVGakxFbEJTM1JDT1ROQ0xFVkJRVTk2ZGtNc1ZVRkJWVGh5UlN4UFFVRlRMRmRCUTNoQ0xFMUJRVThzUTBGRFRERnRSU3hMUVVGTkxGTkJRMDV6TWtJc1MwRkJUWFkyUWl4TlFVRk5ia0lzVlVGQlZXMUxMRTFCUVUwMVRDeExRVUZMSzBNc1MwRkJTM2x4UlN4TlFVRlJlbkZGTEV0QlFVMHNTMEUwUjNoRUxGTkJRVk4xYlVVc1JVRkJXVmNzUlVGQlN5OWtMRVZCUVU5MFZDeEhRVU12UWl4SlFVRkpOakJDTEVWQlFVMHNSMEZEVmpjd1FpeEZRVUZOY2pGRExFdEJRVXRGTEVsQlFVbDNiVVVzUlVGQlNUbHVSU3hQUVVGUmVUSkRMRWRCUlROQ0xFbEJRVXNzU1VGQlNTODBReXhGUVVGSmNYTkVMRVZCUVU5eWMwUXNSVUZCU1NzMFF5eEpRVUZQTHpSRExFVkJRemRDTkhSRkxFZEJRVTkyY2tVc1QwRkJUM2xsTEdGQlFYTkNMRWxCUVZSemNFUXNSVUZCU1hCeFJTeEpRVVZxUXl4UFFVRlBOSFJGTEVWQlIxUXNVMEZCVTJ4RkxFVkJRV0ZWTEVWQlFVc3ZaQ3hGUVVGUGRGUXNSMEZEYUVNc1NVRkJTVFl3UWl4RlFVRk5MRWRCUTFZM01FSXNSVUZCVFhJeFF5eExRVUZMUlN4SlFVRkpkMjFGTEVWQlFVazVia1VzVDBGQlVYa3lReXhIUVVVelFpeEpRVUZMTEVsQlFVa3ZORU1zUlVGQlNYRnpSQ3hGUVVGUGNuTkVMRVZCUVVrck5FTXNTVUZCVHk4MFF5eEZRVU0zUWpSMFJTeEhRVUZQZG5KRkxFOUJRVTk1WlN4aFFVRmhjM0JFTEVWQlFVbHdjVVVzU1VGRmFrTXNUMEZCVHpSMFJTeEZRVWRVTEZOQlFWTnlSU3hGUVVGVllTeEZRVUZMTDJRc1JVRkJUM1JVTEVkQlF6ZENMRWxCUVVrMmRrSXNSVUZCVFhkQ0xFVkJRVWs1YmtVc1UwRkZWQ3R3UkN4SFFVRlRRU3hGUVVGUkxFdEJRVWRCTEVWQlFWRXNTMEZETlVKMFZDeEhRVUZQUVN4RlFVRk5MRWRCUVV0QkxFVkJRVTAyZGtJc1MwRkJTemQyUWl4RlFVRk5OblpDTEVkQlIzaERMRWxCUkVFc1NVRkJTV2xHTEVWQlFVMHNSMEZEUkRkMFJTeEZRVUZKY1hORUxFVkJRVTl5YzBRc1JVRkJTU3MwUXl4SlFVRlBMelJETEVWQlF6ZENOblJGTEVkQlFVOURMRVZCUVUweFJDeEZRVUZKY0hGRkxFbEJSVzVDTEU5QlFVODJkRVVzUlVGSFZDeFRRVUZUYWtVc1JVRkJZMUVzUlVGQlN5OWtMRVZCUVU5MFZDeEhRVWRxUXl4SlFVWkJMRWxCUVVsMVlpeEZRVUZST0ZZc1JVRkJTWElyUkN4TlFVRk5jMmRFTEVWQlFVOTBWQ3hIUVVONlFqSjVRaXhGUVVGTkxFZEJRMFF4Y2tVc1JVRkJTU3hGUVVGSFFTeEZRVUZKY3pCRUxFVkJRVTFvZVVRc1QwRkJVWFJETEVkQlFVc3NSVUZEY2tNd2NrVXNSMEZCVDNKd1JTeFBRVUZQZVdVc1lVRkJZWGQ2UXl4RlFVRk5kREJFTEVkQlFXOUNMRWxCUVdaek1FUXNSVUZCVFhRd1JDeEZRVUZKTEVsQlJXeEVMRTlCUVU4d2NrVXNSVUV3UTFRc1UwRkJVM0ZETEVWQlFXRnlSQ3hGUVVGUmMwUXNSVUZCU3pGeVJTeEhRVU5xUXl4SFFVRkxiMjlGTEVWQlFWTXNSMEZCVHl4SFFVRkxRU3hGUVVGVExFVkJRVWNzVFVGQlRTeEpRVUZKTlcxRkxGZEJRVmNzYzBKQlF6TkVMRWRCUVVrMGJVVXNSVUZCVTNORUxFVkJRVTB4Y2tVc1JVRkJVU3hOUVVGTkxFbEJRVWwzUWl4WFFVRlhMSGxEUVN0S2JFUXNVMEZCVTIxeFJTeEZRVUZWTjBRc1JVRkJTMjV3UlN4RlFVRlBlWEJGTEVWQlFWRnpSQ3hGUVVGTGNuRkZMRVZCUVV0RExFZEJReTlETEVsQlFVdDVkRU1zUlVGQlQzTXpRaXhUUVVGVGVVSXNSMEZCVFN4TlFVRk5MRWxCUVVrMWJVVXNWVUZCVlN3clEwRkRMME1zUjBGQlNYWkRMRVZCUVZFd1F5eEhRVUZQTVVNc1JVRkJVVEpETEVWQlFVc3NUVUZCVFN4SlFVRkpSU3hYUVVGWExIRkRRVU55UkN4SFFVRkpORzFGTEVWQlFWTnpSQ3hGUVVGTk5VUXNSVUZCU1RsdVJTeFBRVUZSTEUxQlFVMHNTVUZCU1hkQ0xGZEJRVmNzYzBKQmEwUjBSQ3hUUVVGVGIzRkZMRVZCUVcxQ09VUXNSVUZCUzI1d1JTeEZRVUZQZVhCRkxFVkJRVkY1UkN4SFFVTXhRMngwUlN4RlFVRlJMRWxCUVVkQkxFVkJRVkVzVFVGQlUwRXNSVUZCVVN4SFFVTjRReXhKUVVGTExFbEJRVWxxUWl4RlFVRkpMRVZCUVVkM2NVVXNSVUZCU1RsdFJTeExRVUZMUlN4SlFVRkpkMjFGTEVWQlFVazVia1VzVDBGQlUyOXZSU3hGUVVGUkxFZEJRVWt4Y1VVc1JVRkJTWGR4UlN4SlFVRkxlSEZGTEVWQlF6ZEViM0ZGTEVWQlFVbE5MRVZCUVZNeGNVVXNTVUZCVFdsQ0xFVkJRVk1zUzBGQlV5eEhRVUZMYTNSRkxFVkJRV1Z1ZFVVc1JVRkJTU3hGUVVGSlFTeE5RVU5zUXl4SFFVRTFRbTExUlN4RlFVRmxiblZGTEVWQlFVa3NSVUZCU1VFc1IwRTRRamxDTEZOQlFWTnZkVVVzUlVGQmJVSm9SU3hGUVVGTGJuQkZMRVZCUVU5NWNFVXNSVUZCVVhsRUxFZEJRekZEYkhSRkxFVkJRVkVzU1VGQlIwRXNSVUZCVVN4WFFVRmhRU3hGUVVGUkxFZEJRelZETEVsQlFVc3NTVUZCU1dwQ0xFVkJRVWtzUlVGQlIzZHhSU3hGUVVGSk9XMUZMRXRCUVV0RkxFbEJRVWwzYlVVc1JVRkJTVGx1UlN4UFFVRlRiMjlGTEVWQlFWRXNSMEZCU1RGeFJTeEZRVUZKZDNGRkxFbEJRVXQ0Y1VVc1JVRkROMFJ2Y1VVc1JVRkJTVTBzUlVGQlV6RnhSU3hIUVVGTmFVSXNTVUZCZFVNc1IwRkJOVUpyZEVVc1JVRkJaVzUxUlN4RlFVRkpMRVZCUVVsQkxFZEJRVlVzU1VGdFNtNUZMRk5CUVZOeGRVVXNSVUZCWTJwRkxFVkJRVXR1Y0VVc1JVRkJUM2x3UlN4RlFVRlJjMFFzUlVGQlMzSnhSU3hGUVVGTFF5eEhRVU51UkN4SFFVRkpPRzFGTEVWQlFWTnpSQ3hGUVVGTk5VUXNSVUZCU1RsdVJTeFBRVUZSTEUxQlFVMHNTVUZCU1hkQ0xGZEJRVmNzYzBKQlEzQkVMRWRCUVVrMGJVVXNSVUZCVXl4RlFVRkhMRTFCUVUwc1NVRkJTVFZ0UlN4WFFVRlhMSE5DUVVkMlF5eFRRVUZUY1RKRExFVkJRVmxwZDBJc1JVRkJTMjV3UlN4RlFVRlBlWEJGTEVWQlFWRjVSQ3hGUVVGalJ5eEhRVXR5UkN4UFFVcExRU3hIUVVOSVJDeEZRVUZoYWtVc1JVRkJTMjV3UlN4RlFVRlBlWEJGTEVWQlFWRXNSMEZGYmtNMVF5eEZRVUZSY2pCRUxFMUJRVTB5TWtRc1JVRkJTMjV3UlN4RlFVRlBlWEJGTEVWQlFWRjVSQ3hGUVVGakxFZEJRVWtzUjBGRE4wTjZSQ3hGUVVGVExFVkJWMnhDTEZOQlFWTjBkMElzUlVGQllXZDNRaXhGUVVGTGJuQkZMRVZCUVU5NWNFVXNSVUZCVVhsRUxFVkJRV05ITEVkQlMzUkVMRTlCU2t0QkxFZEJRMGhFTEVWQlFXRnFSU3hGUVVGTGJuQkZMRVZCUVU5NWNFVXNSVUZCVVN4SFFVVnVRelZETEVWQlFWRnlNRVFzVFVGQlRUSXlSQ3hGUVVGTGJuQkZMRVZCUVU5NWNFVXNSVUZCVVhsRUxFVkJRV01zUjBGQlNTeEhRVU0zUTNwRUxFVkJRVk1zUlVFdlkyeENjalZDTEVWQlFVOTZka01zVlVGQlZXMUxMRTFCUVZFc1UwRkJaMEp6WjBRc1JVRkJUM1JVTEVkQlF6bERMRWxCYjBKSmR6RkNMRVZCY0VKQk0wWXNSVUZCVFRGc1JTeExRVUZMV2l4UFFYRkNaaXhKUVhCQ1FTdHdSQ3hKUVVGVlFTeEhRVWRGTEVkQlExWkJMRWRCUVZOMVl5eEhRVU5ITEVsQlFVZDJZeXhGUVVGUkxFZEJRMlJCTEVWQlFWRjFZeXhKUVVOcVFuWmpMRVZCUVZGMVl5eEpRVTVXTjNaQ0xFOUJRV000WWl4SlFVRlNPV0lzUlVGQmIwSTJka0lzU1VGQlVUZDJRaXhIUVZONFFpeEhRVU5TUVN4SFFVRlBOblpDTEVkQlEwY3NTVUZCUnpkMlFpeEZRVUZOTEVkQlExWkJMRVZCUVUwMmRrSXNTVUZEWmpkMlFpeEZRVUZOTm5aQ0xFZEJSMG8zZGtJc1JVRkJUWE5VTEVsQlFVOTBWQ3hGUVVGTmMxUXNSMEZIYmtKb1lpeEZRVUZQTWpKQ0xIRkNRVU5VZFVjc1JVRkJVM0p5UlN4TFFVRkxiWEpETEZOQlFWTm5aU3hGUVVGUGRGUXNTVUZEZGtKNVZ5eFZRVUZaYm1Vc1JVRkJUM3AyUXl4alFVTnlRaXhEUVVOTUxFbEJRVWswYzBVc1JVRkJWM294UWl4RlFVRk5jMVFzUlVGRGNrSnJhVUlzUlVGQlV5eEpRVUZKYkRsQ0xFVkJRVTl0T1VJc1QwRkJWVE5hTEVkQlF6bENMRWxCUVVzc1NVRkJTVGN3UkN4RlFVRkpMRVZCUVVkQkxFVkJRVWwzZFVVc1NVRkJXWGgxUlN4RlFVTTVRblYxUlN4RlFVRlBkblZGTEVkQlFVdHJSQ3hMUVVGTGJFUXNSVUZCU1hGelJDeEhRVWw2UWl4UFFVRlBhMmxDTEVkQlYxUnNPVUlzUlVGQlQzcDJReXhWUVVGVk5uTkZMRmRCUVdFc1UwRkJjVUl2UkN4RlFVRlJOMW9zUlVGQldYbGtMRWRCUTNKRk5VUXNSMEZCYTBJc1JVRkRiRUkzV2l4SFFVRXdRaXhGUVVOeVFubGtMRWRCUVZWUUxFVkJRVmx5UkN4RlFVRlJOMW9zUlVGQldUTjBSQ3hMUVVGTFdpeFJRVXR3UkN4SlFVaEJMRWxCUVVsNWJVVXNSVUZCVFRkc1JTeExRVUZMZDI1RkxFZEJRMWh1ZGtJc1JVRkJUU3hGUVVOT2RqZERMRVZCUVVrc1NVRkRRMEVzUlVGQlNUWjNSQ3hKUVVGbGRGWXNSMEZCVHl4TlFVTnFRM2QwUWl4SFFVRlBOMnhGTEV0QlFVdDNia1VzUlVGQlV6RnhSU3hIUVVGTGRUZERMRVZCUnpWQ0xFOUJRVTkzZEVJc1IwRkhWREV6UWl4RlFVRlBlblpETEZWQlFWVTRjMFVzVjBGQllTeFRRVUZ4UW1oRkxFVkJRVkUzV2l4RlFVRlplV1FzUjBGRGNrVTFSQ3hIUVVGclFpeEZRVU5zUWpkYUxFZEJRVEJDTEVWQlEzSkNlV1FzUjBGRFNGQXNSVUZCV1hKRUxFVkJRVkUzV2l4RlFVRlpNM1JFTEV0QlFVdGFMRkZCUzNaRExFbEJSa0VzU1VGQlNYbHRSU3hGUVVGTk4yeEZMRXRCUVV0M2JrVXNTVUZCVnpkYUxFZEJRM1JDZEZZc1JVRkJUU3hGUVVOSWMxWXNSVUZCWVN4SlFVRk5kRllzUjBGQlR5eE5RVU12UW5kMFFpeEhRVUZQTjJ4RkxFdEJRVXQzYmtVc1NVRkJWemRhTEVkQlFXTjBWaXhGUVVkMlF5eFBRVUZQZDNSQ0xFZEJSMVF4TTBJc1JVRkJUM3AyUXl4VlFVRlZLM05GTEZWQlFWa3NVMEZCYjBKcVJTeEZRVUZSTkVRc1IwRkZka1FzVDBGRVMwRXNSMEZCVlZBc1JVRkJXWEpFTEVWQlFWRXNSVUZCUjNodVJTeExRVUZMV2l4UlFVTndRMWtzUzBGQlMzZHVSU3hKUVVka2NqVkNMRVZCUVU5NmRrTXNWVUZCVldkMFJTeGhRVUZsTEZOQlFYVkNiRVVzUlVGQlVUUkVMRWRCUlRkRUxFOUJSRXRCTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTEVWQlFVZDRia1VzUzBGQlMxb3NVVUZEY0VOWkxFdEJRVXQzYmtVc1IwRkJWM2h1UlN4TFFVRkxkMjVGTEVWQlFWTXNTVUZCVFN4SFFVYzNRM0kxUWl4RlFVRlBlblpETEZWQlFWVjViMFVzWVVGQlpTeFRRVUYxUWtzc1JVRkJVVFJFTEVkQlJUZEVMRTlCUkV0QkxFZEJRVlZRTEVWQlFWbHlSQ3hGUVVGUkxFVkJRVWQ0YmtVc1MwRkJTMW9zVVVGRGJrTlpMRXRCUVV0M2JrVXNTVUZCVnl4RlFVRkxlRzVGTEV0QlFVdDNia1VzUlVGQlV5eEpRVWMzUTNJMVFpeEZRVUZQZW5aRExGVkJRVlZwZEVVc1lVRkJaU3hUUVVGMVFtNUZMRVZCUVZFMFJDeEhRVWMzUkN4UFFVWkxRU3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVU3hGUVVGSGVHNUZMRXRCUVV0YUxGTkJSV3hEV1N4TFFVRkxkMjVGTEVkQlExUjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUlVGRGNFSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzU1VGRFJDeFRRVUZ1UW5odVJTeExRVUZMZDI1RkxFVkJRVk1zU1VGSGNrSnlOVUlzUlVGQlQzcDJReXhWUVVGVmEzUkZMR0ZCUVdVc1UwRkJkVUp3UlN4RlFVRlJORVFzUjBGSE4wUXNUMEZHUzBFc1IwRkJWVkFzUlVGQldYSkVMRVZCUVZFc1JVRkJSM2h1UlN4TFFVRkxXaXhSUVVWd1FpeFRRVUZtV1N4TFFVRkxkMjVGTEVsQlExUjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUjBGRGNrSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUlVGRGNrSjRia1VzUzBGQlMzZHVSU3hGUVVGVExFdEJSMnhDY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWVzEwUlN4VlFVRlpMRk5CUVc5Q2NrVXNSVUZCVVRkYUxFVkJRVmw1WkN4SFFVTnVSVFZFTEVkQlFXdENMRVZCUTJ4Q04xb3NSMEZCTUVJc1JVRkRja0o1WkN4SFFVRlZVQ3hGUVVGWmNrUXNSVUZCVVRkYUxFVkJRVmt6ZEVRc1MwRkJTMW9zVVVGTGNFUXNTVUZJUVN4SlFVRkplVzFGTEVWQlFVMDNiRVVzUzBGQlMzZHVSU3hIUVVOWWJuWkNMRVZCUVUwc1JVRkRUblkzUXl4RlFVRkpMRWxCUTBOQkxFVkJRVWsyZDBRc1NVRkJaWFJXTEVkQlFVOHNUVUZEYWtOM2RFSXNSMEZCVHpkc1JTeExRVUZMZDI1RkxFVkJRVk14Y1VVc1IwRkJTM1UzUXl4RlFVMDFRaXhQUVVaSmQzUkNMRWxCUmtwNGRFSXNSMEZCVHl4UFFVVlRkM1JDTEVkQlFVOXliRVVzUzBGQlMyOXlReXhKUVVGSkxFVkJRVWNzUlVGQlNTdG9RaXhKUVVWb1EydFpMRWRCUjFReE0wSXNSVUZCVDNwMlF5eFZRVUZWYjNSRkxGVkJRVmtzVTBGQmIwSjBSU3hGUVVGUk4xb3NSVUZCV1hsa0xFZEJRMjVGTlVRc1IwRkJhMElzUlVGRGJFSTNXaXhIUVVFd1FpeEZRVU55UW5sa0xFZEJRVlZRTEVWQlFWbHlSQ3hGUVVGUk4xb3NSVUZCV1ROMFJDeExRVUZMV2l4UlFVdHdSQ3hKUVVoQkxFbEJRVWwwUXl4RlFVRkpObmRFTEVWQlEwcDBWaXhGUVVGTkxFVkJRMDUzZEVJc1JVRkJUVGRzUlN4TFFVRkxkMjVGTEVsQlFWY3hjVVVzUjBGRGJrSkJMRVZCUVVrc1NVRkJUWFUzUXl4SFFVRlBMRTFCUTNSQ2QzUkNMRWRCUVU4M2JFVXNTMEZCUzNkdVJTeEpRVUZYTVhGRkxFZEJRVXQxTjBNc1JVRk5PVUlzVDBGR1NYZDBRaXhKUVVaS2VIUkNMRWRCUVU4c1QwRkZVM2QwUWl4SFFVRlBjbXhGTEV0QlFVdHZja01zU1VGQlNTeEZRVUZITEVWQlFVa3JhRUlzU1VGRmFFTnJXU3hIUVVkVU1UTkNMRVZCUVU5NmRrTXNWVUZCVlc5NVF5eFRRVUZYTEZOQlFXMUNNREpDTEVWQlFWRTBSQ3hIUVVWeVJDeFBRVVJMUVN4SFFVRlZVQ3hGUVVGWmNrUXNSVUZCVVN4RlFVRkhlRzVGTEV0QlFVdGFMRkZCUTNSQ0xFbEJRV1paTEV0QlFVdDNia1VzU1VGRE1FSXNSMEZCTlVJc1NVRkJUM2h1UlN4TFFVRkxkMjVGTEVkQlFWVXNSMEZFUzNodVJTeExRVUZMZDI1RkxFbEJTVE5EY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWWEYwUlN4WlFVRmpMRk5CUVhOQ2RrVXNSVUZCVVRSRUxFZEJRM1JFUVN4SFFVRlZVQ3hGUVVGWmNrUXNSVUZCVVN4RlFVRkhlRzVGTEV0QlFVdGFMRkZCUXpORExFbEJRVWw1YlVVc1JVRkJUVGRzUlN4TFFVRkxkMjVGTEVkQlFWZDRia1VzUzBGQlMzZHVSU3hGUVVGVExFbEJRVTBzUlVGRE9VTXNUMEZCWXl4TlFVRk9NMElzUlVGQmMwSXNWMEZCVGtFc1JVRkJiVUpCTEVkQlJ6ZERNVE5DTEVWQlFVOTZka01zVlVGQlZYTjBSU3haUVVGakxGTkJRWE5DZUVVc1JVRkJVVFJFTEVkQlEzUkVRU3hIUVVGVlVDeEZRVUZaY2tRc1JVRkJVU3hGUVVGSGVHNUZMRXRCUVV0YUxGRkJRek5ETEVsQlFVbDViVVVzUlVGQlRUZHNSU3hMUVVGTGQyNUZMRVZCUVZNc1IwRkJUWGh1UlN4TFFVRkxkMjVGTEVsQlFWY3NSVUZET1VNc1QwRkJZeXhOUVVGT00wSXNSVUZCYzBJc1YwRkJUa0VzUlVGQmJVSkJMRWRCUnpkRE1UTkNMRVZCUVU5NmRrTXNWVUZCVlhWMFJTeFpRVUZqTEZOQlFYTkNla1VzUlVGQlVUUkVMRWRCUnpORUxFOUJSa3RCTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTEVWQlFVZDRia1VzUzBGQlMxb3NVVUZGYmtOWkxFdEJRVXQzYmtVc1IwRkRWbmh1UlN4TFFVRkxkMjVGTEVWQlFWTXNTVUZCVFN4RlFVTndRbmh1UlN4TFFVRkxkMjVGTEVWQlFWTXNTVUZCVFN4SFFVTndRbmh1UlN4TFFVRkxkMjVGTEVWQlFWTXNTVUZCVFN4SlFVZDZRbkkxUWl4RlFVRlBlblpETEZWQlFWVjNkRVVzV1VGQll5eFRRVUZ6UWpGRkxFVkJRVkUwUkN4SFFVY3pSQ3hQUVVaTFFTeEhRVUZWVUN4RlFVRlpja1FzUlVGQlVTeEZRVUZIZUc1RkxFdEJRVXRhTEZGQlJXNURXU3hMUVVGTGQyNUZMRWxCUVZjc1IwRkRja0o0YmtVc1MwRkJTM2R1UlN4RlFVRlRMRWxCUVUwc1IwRkRjRUo0YmtVc1MwRkJTM2R1UlN4RlFVRlRMRWxCUVUwc1JVRkRjRUo0YmtVc1MwRkJTM2R1UlN4RlFVRlRMRWxCUjI1Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVlhsMFJTeFpRVUZqTEZOQlFYTkNNMFVzUlVGQlVUUkVMRWRCUlRORUxFOUJSRXRCTEVkQlFWVlFMRVZCUVZseVJDeEZRVUZSTEVWQlFVZDRia1VzUzBGQlMxb3NVVUZEY0VOM2JFVXNSVUZCVVhCYUxFdEJRVXQ0Y2tRc1MwRkJUWGR1UlN4SFFVRlJMRVZCUVUwc1IwRkJTU3hKUVVjNVEzSTFRaXhGUVVGUGVuWkRMRlZCUVZVd2RFVXNXVUZCWXl4VFFVRnpRalZGTEVWQlFWRTBSQ3hIUVVVelJDeFBRVVJMUVN4SFFVRlZVQ3hGUVVGWmNrUXNSVUZCVVN4RlFVRkhlRzVGTEV0QlFVdGFMRkZCUTNCRGQyeEZMRVZCUVZGd1dpeExRVUZMZUhKRUxFdEJRVTEzYmtVc1IwRkJVU3hGUVVGUExFZEJRVWtzU1VGSEwwTnlOVUlzUlVGQlQzcDJReXhWUVVGVk1uUkZMR0ZCUVdVc1UwRkJkVUkzUlN4RlFVRlJORVFzUjBGRk4wUXNUMEZFUzBFc1IwRkJWVkFzUlVGQldYSkVMRVZCUVZFc1JVRkJSM2h1UlN4TFFVRkxXaXhSUVVOd1EzZHNSU3hGUVVGUmNGb3NTMEZCUzNoeVJDeExRVUZOZDI1RkxFZEJRVkVzUlVGQlRTeEhRVUZKTEVsQlJ6bERjalZDTEVWQlFVOTZka01zVlVGQlZUUjBSU3hoUVVGbExGTkJRWFZDT1VVc1JVRkJVVFJFTEVkQlJUZEVMRTlCUkV0QkxFZEJRVlZRTEVWQlFWbHlSQ3hGUVVGUkxFVkJRVWQ0YmtVc1MwRkJTMW9zVVVGRGNFTjNiRVVzUlVGQlVYQmFMRXRCUVV0NGNrUXNTMEZCVFhkdVJTeEhRVUZSTEVWQlFVOHNSMEZCU1N4SlFWTXZRM0kxUWl4RlFVRlBlblpETEZWQlFWVTJkRVVzV1VGQll5eFRRVUZ6UW5oMVJTeEZRVUZQZVhCRkxFVkJRVkUzV2l4RlFVRlplV1FzU1VGRE9VVnlkRVVzUjBGQlUwRXNSVUZEVkhsd1JTeEhRVUZyUWl4RlFVTnNRamRhTEVkQlFUQkNMRVZCUTNKQ2VXUXNTVUZGU0V3c1JVRkJVeTl4UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hGUVVGUk4xb3NSVUZFWm01MFJDeExRVUZMYjNKRExFbEJRVWtzUlVGQlJ5eEZRVUZKSzJoQ0xFZEJRV01zUlVGRFR5eEhRVWQwUkN4SlFVRkpkRllzUlVGQlRTeEZRVU5PZGpkRExFVkJRVWtzUlVGRlVpeEpRVVJCYTBRc1MwRkJTM2R1UlN4SFFVRnJRaXhKUVVGU2VuQkZMRWxCUTA1cVFpeEZRVUZKTm5kRUxFbEJRV1YwVml4SFFVRlBMRTFCUTJwRGNqUkRMRXRCUVV0M2JrVXNSVUZCVXpGeFJTeEhRVUZOYVVJc1JVRkJVWE0yUXl4RlFVRlBMRWxCUjNKRExFOUJRVTl0ZGtJc1JVRkJVemRhTEVkQlIyeENlR1lzUlVGQlQzcDJReXhWUVVGVk9IUkZMRmxCUVdNc1UwRkJjMEo2ZFVVc1JVRkJUM2x3UlN4RlFVRlJOMW9zUlVGQldYbGtMRWxCUXpsRmNuUkZMRWRCUVZOQkxFVkJRMVI1Y0VVc1IwRkJhMElzUlVGRGJFSTNXaXhIUVVFd1FpeEZRVU55UW5sa0xFbEJSVWhNTEVWQlFWTXZjVVVzUzBGQlRXcERMRVZCUVU5NWNFVXNSVUZCVVRkYUxFVkJSR1p1ZEVRc1MwRkJTMjl5UXl4SlFVRkpMRVZCUVVjc1JVRkJTU3RvUWl4SFFVRmpMRVZCUTA4c1IwRkhkRVFzU1VGQlNUZDNSQ3hGUVVGSk5uZEVMRVZCUVdFc1JVRkRha0owVml4RlFVRk5MRVZCUlZZc1NVRkVRWEkwUXl4TFFVRkxkMjVGTEVWQlFWTXhjVVVzUjBGQllTeEpRVUZTYVVJc1NVRkRWbXBDTEVkQlFVc3NTVUZCVFhVM1F5eEhRVUZQTEUxQlEzcENjalJETEV0QlFVdDNia1VzUlVGQlV6RnhSU3hIUVVGTmFVSXNSVUZCVVhNMlF5eEZRVUZQTEVsQlIzSkRMRTlCUVU5dGRrSXNSVUZCVXpkYUxFZEJSMnhDZUdZc1JVRkJUM3AyUXl4VlFVRlZLM1JGTEZkQlFXRXNVMEZCY1VJeGRVVXNSVUZCVDNsd1JTeEZRVUZSTkVRc1IwRk5hRVVzVDBGTVFYSjBSU3hIUVVGVFFTeEZRVU5VZVhCRkxFZEJRV3RDTEVWQlEySTBSQ3hIUVVGVlRDeEZRVUZUTDNGRkxFdEJRVTFxUXl4RlFVRlBlWEJGTEVWQlFWRXNSVUZCUnl4SlFVRk5MRWRCUTJwRWNqVkNMRVZCUVU4eU1rSXNjMEpCUVhGQ0wyMUZMRVZCUVZGNVF5eExRVUZMTm1Nc1RVRkJUWFJtTEVsQlEzQkVhVU1zUzBGQlMzZHVSU3hIUVVGdFFpeEpRVUZTZW5CRkxFVkJRMVI1Y0VVc1JVRkJVeXhIUVZkc1FuSTFRaXhGUVVGUGVuWkRMRlZCUVZWbmRVVXNZMEZCWjBJc1UwRkJkMEl6ZFVVc1JVRkJUM2x3UlN4RlFVRlJORVFzUjBGVmRFVXNUMEZVUVhKMFJTeEhRVUZUUVN4RlFVTlVlWEJGTEVkQlFXdENMRVZCUTJJMFJDeEhRVUZWVEN4RlFVRlRMM0ZGTEV0QlFVMXFReXhGUVVGUGVYQkZMRVZCUVZFc1JVRkJSeXhOUVVGUkxFZEJRM0JFY2pWQ0xFVkJRVTh5TWtJc2NVSkJRMVE1YTBVc1MwRkJTM2R1UlN4SFFVRnRRaXhKUVVGU2VuQkZMRVZCUTJoQ2FVTXNTMEZCUzNkdVJTeEZRVUZUTEVkQlFVMTZjRVVzU1VGQlZTeEhRVVU1UW1sMFJTeEZRVUZyUW1oeVJTeExRVUZOYWtNc1JVRkJUM2x3UlN4SFFVRlJMRWRCUld4RFFTeEZRVUZUTEVkQlIyeENjalZDTEVWQlFVOTZka01zVlVGQlZXbDFSU3hqUVVGblFpeFRRVUYzUWpWMVJTeEZRVUZQZVhCRkxFVkJRVkUwUkN4SFFWVjBSU3hQUVZSQmNuUkZMRWRCUVZOQkxFVkJRMVI1Y0VVc1IwRkJhMElzUlVGRFlqUkVMRWRCUVZWTUxFVkJRVk12Y1VVc1MwRkJUV3BETEVWQlFVOTVjRVVzUlVGQlVTeEZRVUZITEUxQlFWRXNSMEZEY0VSeU5VSXNSVUZCVHpJeVFpeHhRa0ZEVkRsclJTeExRVUZMZDI1RkxFZEJRVmQ2Y0VVc1NVRkJWU3hGUVVNeFFtbERMRXRCUVV0M2JrVXNSVUZCVXl4SFFVRmpMRWxCUVZKNmNFVXNSMEZGY0VKcGRFVXNSVUZCYTBKb2NrVXNTMEZCVFdwRExFVkJRVTk1Y0VVc1IwRkJVU3hIUVVWc1EwRXNSVUZCVXl4SFFWVnNRbkkxUWl4RlFVRlBlblpETEZWQlFWVnJkVVVzWTBGQlowSXNVMEZCZDBJM2RVVXNSVUZCVDNsd1JTeEZRVUZSTkVRc1IwRlpkRVVzVDBGWVFYSjBSU3hIUVVGVFFTeEZRVU5VZVhCRkxFZEJRV3RDTEVWQlEySTBSQ3hIUVVGVlRDeEZRVUZUTDNGRkxFdEJRVTFxUXl4RlFVRlBlWEJGTEVWQlFWRXNSVUZCUnl4WFFVRlpMRWRCUTNoRWNqVkNMRVZCUVU4eU1rSXNjVUpCUTFRNWEwVXNTMEZCUzNkdVJTeEZRVUZUTEVkQlFVMTZjRVVzU1VGQlZTeEhRVU01UW1sRExFdEJRVXQzYmtVc1JVRkJVeXhIUVVGTmVuQkZMRWxCUVZVc1IwRkRPVUpwUXl4TFFVRkxkMjVGTEVWQlFWTXNSMEZCVFhwd1JTeEpRVUZWTEVWQlF6bENhVU1zUzBGQlMzZHVSU3hIUVVGdFFpeEpRVUZTZW5CRkxFZEJSV2hDYlhSRkxFVkJRV3RDYkhKRkxFdEJRVTFxUXl4RlFVRlBlWEJGTEVkQlFWRXNSMEZGYkVOQkxFVkJRVk1zUjBGSGJFSnlOVUlzUlVGQlQzcDJReXhWUVVGVmJYVkZMR05CUVdkQ0xGTkJRWGRDT1hWRkxFVkJRVTk1Y0VVc1JVRkJVVFJFTEVkQldYUkZMRTlCV0VGeWRFVXNSMEZCVTBFc1JVRkRWSGx3UlN4SFFVRnJRaXhGUVVOaU5FUXNSMEZCVlV3c1JVRkJVeTl4UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hGUVVGUkxFVkJRVWNzVjBGQldTeEhRVU40UkhJMVFpeEZRVUZQTWpKQ0xIRkNRVU5VT1d0RkxFdEJRVXQzYmtVc1IwRkJWM3B3UlN4SlFVRlZMRWRCUXpGQ2FVTXNTMEZCUzNkdVJTeEZRVUZUTEVkQlFVMTZjRVVzU1VGQlZTeEhRVU01UW1sRExFdEJRVXQzYmtVc1JVRkJVeXhIUVVGTmVuQkZMRWxCUVZVc1JVRkRPVUpwUXl4TFFVRkxkMjVGTEVWQlFWTXNSMEZCWXl4SlFVRlNlbkJGTEVkQlJYQkNiWFJGTEVWQlFXdENiSEpGTEV0QlFVMXFReXhGUVVGUGVYQkZMRWRCUVZFc1IwRkZiRU5CTEVWQlFWTXNSMEZIYkVKeU5VSXNSVUZCVDNwMlF5eFZRVUZWYjNWRkxGZEJRV0VzVTBGQmNVSXZkVVVzUlVGQlQzbHdSU3hGUVVGUk4xb3NSVUZCV1hsa0xFZEJSelZGTEVkQlJrRnlkRVVzUjBGQlUwRXNSVUZEVkhsd1JTeEhRVUZyUWl4SFFVTmlORVFzUlVGQlZTeERRVU5pTEVsQlFVa3lRaXhGUVVGUmRuTkZMRXRCUVV0dmNrTXNTVUZCU1N4RlFVRkhMRVZCUVVrcmFFSXNSVUZCWVN4SFFVVjZRMjlrTEVWQlFWTXZjVVVzUzBGQlRXcERMRVZCUVU5NWNFVXNSVUZCVVRkYUxFVkJRVmx2Wml4RlFVRlJMRWRCUVVsQkxFZEJSM2hFTEVsQlFVbHFkMFVzUlVGQlNTeEZRVU5LZFRkRExFVkJRVTBzUlVGRFRrWXNSVUZCVFN4RlFVVldMRWxCUkVGdU5FTXNTMEZCUzNkdVJTeEhRVUZyUWl4SlFVRlNlbkJGTEVsQlEwNXFRaXhGUVVGSk5uZEVMRWxCUVdWMFZpeEhRVUZQTEUxQlF6ZENkRFpETEVWQlFWRXNSMEZCWVN4SlFVRlNielpETEVkQlFYTkRMRWxCUVhwQ2JqUkRMRXRCUVV0M2JrVXNSVUZCVXpGeFJTeEZRVUZKTEV0QlF6bERjVGRETEVWQlFVMHNSMEZGVW00MFF5eExRVUZMZDI1RkxFVkJRVk14Y1VVc1NVRkJUMmxDTEVWQlFWRnpOa01zUjBGQlVTeEhRVUZMUml4RlFVRk5MRWxCUjJ4RUxFOUJRVTl4ZGtJc1JVRkJVemRhTEVkQlIyeENlR1lzUlVGQlQzcDJReXhWUVVGVmMzVkZMRmRCUVdFc1UwRkJjVUpxZGtVc1JVRkJUM2x3UlN4RlFVRlJOMW9zUlVGQldYbGtMRWRCUnpWRkxFZEJSa0Z5ZEVVc1IwRkJVMEVzUlVGRFZIbHdSU3hIUVVGclFpeEhRVU5pTkVRc1JVRkJWU3hEUVVOaUxFbEJRVWt5UWl4RlFVRlJkbk5GTEV0QlFVdHZja01zU1VGQlNTeEZRVUZITEVWQlFVa3JhRUlzUlVGQllTeEhRVVY2UTI5a0xFVkJRVk12Y1VVc1MwRkJUV3BETEVWQlFVOTVjRVVzUlVGQlVUZGFMRVZCUVZsdlppeEZRVUZSTEVkQlFVbEJMRWRCUjNoRUxFbEJRVWxxZDBVc1JVRkJTVFozUkN4RlFVRmhMRVZCUTJwQ2RGWXNSVUZCVFN4RlFVTk9SaXhGUVVGTkxFVkJSVllzU1VGRVFXNDBReXhMUVVGTGQyNUZMRVZCUVZNeGNVVXNSMEZCWVN4SlFVRlNhVUlzU1VGRFZtcENMRWRCUVVzc1NVRkJUWFUzUXl4SFFVRlBMRTFCUTNKQ2REWkRMRVZCUVZFc1IwRkJZU3hKUVVGU2J6WkRMRWRCUVhORExFbEJRWHBDYmpSRExFdEJRVXQzYmtVc1JVRkJVekZ4UlN4RlFVRkpMRXRCUXpsRGNUZERMRVZCUVUwc1IwRkZVbTQwUXl4TFFVRkxkMjVGTEVWQlFWTXhjVVVzU1VGQlQybENMRVZCUVZGek5rTXNSMEZCVVN4SFFVRkxSaXhGUVVGTkxFbEJSMnhFTEU5QlFVOXhka0lzUlVGQlV6ZGFMRWRCUjJ4Q2VHWXNSVUZCVDNwMlF5eFZRVUZWYXpSRExGVkJRVmtzVTBGQmIwSTNORU1zUlVGQlQzbHdSU3hGUVVGUk5FUXNSMEZQT1VRc1QwRk9RWEowUlN4SFFVRlRRU3hGUVVOVWVYQkZMRWRCUVd0Q0xFVkJRMkkwUkN4SFFVRlZUQ3hGUVVGVEwzRkZMRXRCUVUxcVF5eEZRVUZQZVhCRkxFVkJRVkVzUlVGQlJ5eExRVUZQTEV0QlEyeEVjalZDTEVWQlFVOHlNa0lzYzBKQlFYRkNMMjFGTEVWQlFWRjVReXhMUVVGTE5tTXNUVUZCVFhSbUxFbEJRMmhFUVN4RlFVRlJMRWxCUVVkQkxFVkJRVkVzU1VGQlQwRXNSVUZCVVN4SFFVTjBRMmxETEV0QlFVdDNia1VzUjBGQmJVSXNTVUZCVW5wd1JTeEZRVU5VZVhCRkxFVkJRVk1zUjBGSGJFSnlOVUlzUlVGQlQzcDJReXhWUVVGVmRYVkZMR0ZCUVdVc1UwRkJkVUpzZGtVc1JVRkJUM2x3UlN4RlFVRlJORVFzUjBGVmNFVXNUMEZVUVhKMFJTeEhRVUZUUVN4RlFVTlVlWEJGTEVkQlFXdENMRVZCUTJJMFJDeEhRVUZWVEN4RlFVRlRMM0ZGTEV0QlFVMXFReXhGUVVGUGVYQkZMRVZCUVZFc1JVRkJSeXhQUVVGVExFOUJRM0pFY2pWQ0xFVkJRVTh5TWtJc2NVSkJRMVE1YTBVc1MwRkJTM2R1UlN4SFFVRnRRaXhKUVVGU2VuQkZMRVZCUTJoQ2FVTXNTMEZCUzNkdVJTeEZRVUZUTEVkQlFVMTZjRVVzU1VGQlZTeEhRVVU1UW1sMFJTeEZRVUZyUW1oeVJTeExRVUZOYWtNc1JVRkJUM2x3UlN4SFFVRlJMRWRCUld4RFFTeEZRVUZUTEVkQlIyeENjalZDTEVWQlFVOTZka01zVlVGQlZYZDFSU3hoUVVGbExGTkJRWFZDYm5aRkxFVkJRVTk1Y0VVc1JVRkJVVFJFTEVkQlZYQkZMRTlCVkVGeWRFVXNSMEZCVTBFc1JVRkRWSGx3UlN4SFFVRnJRaXhGUVVOaU5FUXNSMEZCVlV3c1JVRkJVeTl4UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hGUVVGUkxFVkJRVWNzVDBGQlV5eFBRVU55UkhJMVFpeEZRVUZQTWpKQ0xIRkNRVU5VT1d0RkxFdEJRVXQzYmtVc1IwRkJWM3B3UlN4SlFVRlZMRVZCUXpGQ2FVTXNTMEZCUzNkdVJTeEZRVUZUTEVkQlFXTXNTVUZCVW5wd1JTeEhRVVZ3UW1sMFJTeEZRVUZyUW1oeVJTeExRVUZOYWtNc1JVRkJUM2x3UlN4SFFVRlJMRWRCUld4RFFTeEZRVUZUTEVkQlIyeENjalZDTEVWQlFVOTZka01zVlVGQlZYbDFSU3hoUVVGbExGTkJRWFZDY0haRkxFVkJRVTk1Y0VVc1JVRkJVVFJFTEVkQldYQkZMRTlCV0VGeWRFVXNSMEZCVTBFc1JVRkRWSGx3UlN4SFFVRnJRaXhGUVVOaU5FUXNSMEZCVlV3c1JVRkJVeTl4UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hGUVVGUkxFVkJRVWNzV1VGQllTeFpRVU42UkhJMVFpeEZRVUZQTWpKQ0xIRkNRVU5VT1d0RkxFdEJRVXQzYmtVc1IwRkJiVUlzU1VGQlVucHdSU3hGUVVOb1FtbERMRXRCUVV0M2JrVXNSVUZCVXl4SFFVRk5lbkJGTEVsQlFWVXNSVUZET1VKcFF5eExRVUZMZDI1RkxFVkJRVk1zUjBGQlRYcHdSU3hKUVVGVkxFZEJRemxDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SlFVVTVRbTEwUlN4RlFVRnJRbXh5UlN4TFFVRk5ha01zUlVGQlQzbHdSU3hIUVVGUkxFZEJSV3hEUVN4RlFVRlRMRWRCUjJ4Q2NqVkNMRVZCUVU5NmRrTXNWVUZCVlRCMVJTeGhRVUZsTEZOQlFYVkNjblpGTEVWQlFVOTVjRVVzUlVGQlVUUkVMRWRCWVhCRkxFOUJXa0Z5ZEVVc1IwRkJVMEVzUlVGRFZIbHdSU3hIUVVGclFpeEZRVU5pTkVRc1IwRkJWVXdzUlVGQlV5OXhSU3hMUVVGTmFrTXNSVUZCVDNsd1JTeEZRVUZSTEVWQlFVY3NXVUZCWVN4WlFVTjZSSHB3UlN4RlFVRlJMRWxCUVVkQkxFVkJRVkVzVjBGQllVRXNSVUZCVVN4SFFVTjRRMjkzUXl4RlFVRlBNakpDTEhGQ1FVTlVPV3RGTEV0QlFVdDNia1VzUjBGQlYzcHdSU3hKUVVGVkxFZEJRekZDYVVNc1MwRkJTM2R1UlN4RlFVRlRMRWRCUVUxNmNFVXNTVUZCVlN4SFFVTTVRbWxETEV0QlFVdDNia1VzUlVGQlV5eEhRVUZOZW5CRkxFbEJRVlVzUlVGRE9VSnBReXhMUVVGTGQyNUZMRVZCUVZNc1IwRkJZeXhKUVVGU2VuQkZMRWRCUlhCQ2JYUkZMRVZCUVd0Q2JISkZMRXRCUVUxcVF5eEZRVUZQZVhCRkxFZEJRVkVzUjBGRmJFTkJMRVZCUVZNc1IwRm5RbXhDY2pWQ0xFVkJRVTk2ZGtNc1ZVRkJWVEoxUlN4aFFVRmxMRk5CUVhWQ2RIWkZMRVZCUVU5NWNFVXNSVUZCVVRSRUxFZEJRM0JGTEU5QlFVOXVNRUlzUlVGQlYyb3pReXhMUVVGTmFrTXNSVUZCVDNsd1JTeEhRVUZSTEVWQlFVMDBSQ3hKUVVjdlEybzVRaXhGUVVGUGVuWkRMRlZCUVZVMGRVVXNZVUZCWlN4VFFVRjFRbloyUlN4RlFVRlBlWEJGTEVWQlFWRTBSQ3hIUVVOd1JTeFBRVUZQYmpCQ0xFVkJRVmRxTTBNc1MwRkJUV3BETEVWQlFVOTVjRVVzUjBGQlVTeEZRVUZQTkVRc1NVRlhhRVJxT1VJc1JVRkJUM3AyUXl4VlFVRlZOblZGTEdOQlFXZENMRk5CUVhkQ2VIWkZMRVZCUVU5NWNFVXNSVUZCVVRSRUxFZEJRM1JGTEU5QlFVOXNNRUlzUlVGQldXd3pReXhMUVVGTmFrTXNSVUZCVDNsd1JTeEhRVUZSTEVWQlFVMDBSQ3hKUVVkb1JHbzVRaXhGUVVGUGVuWkRMRlZCUVZVNGRVVXNZMEZCWjBJc1UwRkJkMEo2ZGtVc1JVRkJUM2x3UlN4RlFVRlJORVFzUjBGRGRFVXNUMEZCVDJ3d1FpeEZRVUZaYkRORExFdEJRVTFxUXl4RlFVRlBlWEJGTEVkQlFWRXNSVUZCVHpSRUxFbEJTV3BFYWpsQ0xFVkJRVTk2ZGtNc1ZVRkJWV3R1UlN4TFFVRlBMRk5CUVdVM05FUXNSVUZCVVRCblJTeEZRVUZoZEd0Q0xFVkJRVTkwVkN4SFFWRnFSU3hIUVZCTGMxUXNTVUZCVDBFc1JVRkJVU3hIUVVObWRGUXNSMEZCWlN4SlFVRlNRU3hKUVVGWFFTeEZRVUZOTnpGRExFdEJRVXRhTEZGQlF6bENjWFZGTEVkQlFXVXhaMFVzUlVGQlR6Tk9MRk5CUVZGeGRVVXNSVUZCWXpGblJTeEZRVUZQTTA0c1VVRkRiRVJ4ZFVVc1NVRkJZVUVzUlVGQll5eEhRVU0xUWpVelFpeEZRVUZOTEVkQlFVdEJMRVZCUVUxelZDeEpRVUZQZEZRc1JVRkJUWE5VTEVkQlJ6bENkRlFzU1VGQlVYTlVMRVZCUVU4c1QwRkJUeXhGUVVNeFFpeEhRVUZ6UWl4SlFVRnNRbkE0UXl4RlFVRlBNMDRzVVVGQlowTXNTVUZCYUVKWkxFdEJRVXRhTEU5QlFXTXNUMEZCVHl4RlFVZHlSQ3hIUVVGSmNYVkZMRVZCUVdNc1JVRkRhRUlzVFVGQlRTeEpRVUZKTjNORkxGZEJRVmNzTmtKQlJYWkNMRWRCUVVsMWIwUXNSVUZCVVN4SFFVRkxRU3hIUVVGVGJuQkVMRXRCUVV0YUxFOUJRVkVzVFVGQlRTeEpRVUZKZDBJc1YwRkJWeXcyUWtGRE5VUXNSMEZCU1dreFF5eEZRVUZOTEVWQlFVY3NUVUZCVFN4SlFVRkphakZETEZkQlFWY3NNa0pCUnpsQ2FURkRMRVZCUVUwM01VTXNTMEZCUzFvc1UwRkJVWGt5UXl4RlFVRk5OekZETEV0QlFVdGFMRkZCUXpsQ01rNHNSVUZCVHpOT0xFOUJRVk54ZFVVc1JVRkJZelV6UWl4RlFVRk5jMVFzU1VGRGRFTjBWQ3hGUVVGTk9XOURMRVZCUVU4elRpeFBRVUZUY1hWRkxFVkJRV04wYTBJc1IwRkhkRU1zU1VGRFNYSnpSQ3hGUVVSQk5HOUZMRVZCUVUwM2RrSXNSVUZCVFhOVUxFVkJSMmhDTEVkQlFVbHVjRVFzVDBGQlV5dE5MRWRCUVZWdk9FTXNSVUZCVVhOclFpeEhRVUZsUVN4RlFVRmpOVE5DTEVWQlJURkVMRWxCUVVzdk5FTXNSVUZCU1RSdlJTeEZRVUZOTEVWQlFVYzFiMFVzUjBGQlN5eEpRVUZMUVN4RlFVTXhRbWxSTEVWQlFVOXFVU3hGUVVGSk1uZEZMRWRCUVdWNmRFVXNTMEZCUzJ4RUxFVkJRVWx4YzBRc1VVRkZhRU1zUjBGQlNYVmpMRVZCUVUwc1RVRkJVM1l6UWl4RlFVRlBNakpDTEc5Q1FVVXZRaXhKUVVGTGFHOUZMRVZCUVVrc1JVRkJSMEVzUlVGQlNUUnZSU3hKUVVGUE5XOUZMRVZCUTNKQ2FWRXNSVUZCVDJwUkxFVkJRVWt5ZDBVc1IwRkJaWHAwUlN4TFFVRkxiRVFzUlVGQlNYRnpSQ3hSUVVkeVEycGxMRmRCUVZkNGMwTXNWVUZCVld0V0xFbEJRVWt6Vnl4TFFVTjJRamhRTEVWQlEwRXZUU3hMUVVGTGJYSkRMRk5CUVZOblpTeEZRVUZQUVN4RlFVRlJkV01zUjBGRE4wSXJTQ3hIUVVsS0xFOUJRVTh2U0N4SFFVOVVkak5DTEVWQlFVOTZka01zVlVGQlZTdHhSU3hMUVVGUExGTkJRV1UxUkN4RlFVRkxNV01zUlVGQlQzUlVMRVZCUVV0NWRrSXNSMEZGZEVRc1IwRkJiVUlzYVVKQlFWSlBMRVZCUVd0Q0xFTkJVek5DTEVkQlVuRkNMR2xDUVVGV01XTXNSMEZEVkcxakxFVkJRVmR1WXl4RlFVTllRU3hGUVVGUkxFVkJRMUowVkN4RlFVRk5OekZETEV0QlFVdGFMRkZCUTJFc2FVSkJRVko1TWtNc1NVRkRhRUo1ZGtJc1JVRkJWM3AyUWl4RlFVTllRU3hGUVVGTk56RkRMRXRCUVV0YUxGRkJSVTBzU1VGQlpubHRSU3hGUVVGSmVtMUZMRTlCUVdNc1EwRkRjRUlzU1VGQlNUSjRSQ3hGUVVGUE9GVXNSVUZCU1c1dlJDeFhRVUZYTEVkQlEzUkNjWHBETEVWQlFVOHNUVUZEVkRoVkxFVkJRVTA1VlN4SFFVZFdMRkZCUVdsQ1dTeEpRVUZpTWxRc1IwRkJPRU1zYVVKQlFXSkJMRVZCUTI1RExFMUJRVTBzU1VGQlNXaHNSU3hWUVVGVkxEWkNRVVYwUWl4SFFVRjNRaXhwUWtGQlltZHNSU3hKUVVFd1FtNHpRaXhGUVVGUGJ6TkNMRmRCUVZkRUxFZEJRM0pFTEUxQlFVMHNTVUZCU1doc1JTeFZRVUZWTEhGQ1FVRjFRbWRzUlN4UFFVVnlRaXhwUWtGQlVrOHNTVUZEYUVKQkxFZEJRVmtzUzBGSlpDeEhRVUZKTVdNc1JVRkJVU3hIUVVGTGJuQkVMRXRCUVV0YUxFOUJRVk1yY0VRc1IwRkJVMjV3UkN4TFFVRkxXaXhQUVVGVGVUSkRMRVZCUTNCRUxFMUJRVTBzU1VGQlNXb3hReXhYUVVGWExITkNRVWQyUWl4SFFVRkphVEZETEVkQlFVOXpWQ3hGUVVOVUxFOUJRVTl1Y0VRc1MwRlJWQ3hKUVVGSmJFUXNSVUZEU2l4SFFVNUJjWE5FTEV0QlFXdENMRVZCUTJ4Q2RGUXNUMEZCWXpoaUxFbEJRVkk1WWl4RlFVRnZRamN4UXl4TFFVRkxXaXhQUVVGVGVUSkRMRWxCUVZFc1JVRkZNME5uZDBJc1NVRkJTMEVzUlVGQlRTeEhRVWRITEdsQ1FVRlNRU3hGUVVOVUxFbEJRVXN2YjBVc1JVRkJTWEZ6UkN4RlFVRlBjbk5FTEVWQlFVa3JORU1zU1VGQlR5ODBReXhGUVVONlFtdEVMRXRCUVV0c1JDeEhRVUZMSzI5RkxFMUJSVkFzUTBGRFRDeEpRVUZKZWxVc1JVRkJVV3BxUWl4RlFVRlBjek5DTEZOQlFWTkpMRWRCUTNoQ1FTeEZRVU5CU3l4RlFVRlpMRWxCUVVrdk0wSXNSVUZCVHpBelFpeEZRVUZMVUN4SFFVRlZhQ3RFTEZsQlEzUkRieXRFTEVWQlFVMTBWU3hGUVVGTmFIbEVMRTlCUTJoQ0xFbEJRVXQwUXl4RlFVRkpMRVZCUVVkQkxFVkJRVWtyTkVNc1JVRkJUWE5VTEVsQlFWTnljMFFzUlVGRE4wSnJSQ3hMUVVGTGJFUXNSVUZCU1hGelJDeEhRVUZUYVVrc1JVRkJUWFF3UkN4RlFVRkpORzlGTEVkQlNXaERMRTlCUVU4eGJFVXNUVUZOVkN4SlFVRkpNSFJGTEVWQlFXOUNMSEZDUVcxQ2VFSXNVMEZCVXpsRExFVkJRVTl5YzBVc1IwRkRaQ3hQUVVGSlFTeEZRVUZKTEVkQlFWY3NTVUZCVFVFc1JVRkJSU3RKTEZOQlFWTXNTVUZETjBJdlNTeEZRVUZGSzBrc1UwRkJVeXhKUVVkd1FpeFRRVUZUTkN0RUxFVkJRV0YyTjBNc1JVRkJVVEE1UXl4SFFVVTFRaXhKUVVGSlV5eEZRVVJLVkN4RlFVRlJRU3hIUVVGVE9UZENMRWxCVFdwQ0xFbEJTa0VzU1VGQlNXNTBReXhGUVVGVGRYSkNMRVZCUVU5MmNrSXNUMEZEYUVKMWRVVXNSVUZCWjBJc1MwRkRhRUoyWXl4RlFVRlJMRWRCUlVoME1FUXNSVUZCU1N4RlFVRkhRU3hGUVVGSmMwTXNTVUZCVlhSRExFVkJRVWNzUTBGSkwwSXNTVUZJUVdkelJTeEZRVUZaYml0RExFVkJRVTlxVGl4WFFVRlhOV2RDTEVsQlIyUXNUMEZCVldkelJTeEZRVUZaTEUxQlFWRXNRMEZGTlVNc1NVRkJTelpGTEVWQlFXVXNRMEZGYkVJc1IwRkJTVGRGTEVWQlFWa3NUVUZCVVN4RlFVVnFRbFFzUjBGQlV5eEpRVUZOTEVkQlFVZHFXQ3hGUVVGTmJHOUVMRXRCUVVzc1NVRkJUU3hKUVVGTkxFdEJRemxETEZOQlEwc3NSMEZCU1hCTkxFVkJRVWtzU1VGQlRYTkRMRVZCUVZFc1JVRkZkRUpwY0VVc1IwRkJVeXhKUVVGTkxFZEJRVWRxV0N4RlFVRk5iRzlFTEV0QlFVc3NTVUZCVFN4SlFVRk5MRXRCUXpsRExGTkJTVVo1YTBVc1JVRkJaMEkzUlN4RlFVVm9RaXhUUVVsR0xFZEJRVWxCTEVWQlFWa3NUVUZCVVN4RlFVTnFRbFFzUjBGQlV5eEpRVUZOTEVkQlFVZHFXQ3hGUVVGTmJHOUVMRXRCUVVzc1NVRkJUU3hKUVVGTkxFdEJRemxEZVd0RkxFVkJRV2RDTjBVc1JVRkRhRUlzVTBGSlJrRXNSVUZCYTBVc1QwRkJja1EyUlN4RlFVRm5RaXhQUVVGVkxFZEJRVXMzUlN4RlFVRlpMRmxCUXk5RE5rVXNTVUZGU25SR0xFZEJRVk1zU1VGQlRTeEhRVUZIYWxnc1JVRkJUV3h2UkN4TFFVRkxMRWxCUVUwc1NVRkJUU3hMUVUxb1JDeEhRVWhCZVd0RkxFVkJRV2RDTEV0QlIxbzNSU3hGUVVGWkxFbEJRVTBzUTBGRGNFSXNTVUZCUzFRc1IwRkJVeXhIUVVGTExFVkJRVWNzVFVGRGRFSnFXQ3hGUVVGTmJHOUVMRXRCUVVzMEwwUXNVVUZEVGl4SFFVRkpRU3hGUVVGWkxFdEJRVThzUTBGRE5VSXNTVUZCUzFRc1IwRkJVeXhIUVVGTExFVkJRVWNzVFVGRGRFSnFXQ3hGUVVGTmJHOUVMRXRCUTBvMEwwUXNSMEZCWVN4RlFVRk5MRWxCUTFBc1IwRkJXa0VzUlVGQmJVSXNWVUZGYUVJc1IwRkJTVUVzUlVGQldTeE5RVUZUTEVOQlF6bENMRWxCUVV0VUxFZEJRVk1zUjBGQlN5eEZRVUZITEUxQlEzUkNhbGdzUlVGQlRXeHZSQ3hMUVVOS05DOUVMRWRCUVdFc1IwRkJUU3hKUVVOdVFrRXNSMEZCWVN4RlFVRk5MRWRCUVU4c1NVRkRaQ3hIUVVGYVFTeEZRVUZ0UWl4VFFVVm9RaXhOUVVGSlFTeEZRVUZaTEZOQlUzSkNMRTFCUVUwc1NVRkJTVE50UlN4TlFVRk5MSE5DUVZKb1FpeEpRVUZMYTIxRkxFZEJRVk1zUjBGQlN5eEZRVUZITEUxQlEzUkNhbGdzUlVGQlRXeHZSQ3hMUVVOS05DOUVMRWRCUVdFc1IwRkJUeXhKUVVOd1FrRXNSMEZCWVN4SFFVRk5MRWRCUVU4c1NVRkRNVUpCTEVkQlFXRXNSVUZCVFN4SFFVRlBMRWxCUTJRc1IwRkJXa0VzUlVGQmJVSXNUVUZQZWtJc1QwRkJUekZZTEVWQk5FSlVMRk5CUVZNclZTeEZRVUZsTkVJc1IwRkRkRUlzVDBGQlQzUXJRaXhGUVVGUGJXdERMRmxCYUVsb1FpeFRRVUZ6UWpkR0xFZEJTWEJDTEVsQlJrRkJMRVZCVlVZc1UwRkJjVUpCTEVkQlEyNUNMRTlCUVVsQkxFVkJRVWsxTUVNc1MwRkJZVFF3UXl4RlFVRkpOVEJETEU5QlEyeENOREJETEVWQlFVbDJPVVFzVVVGQlVTeGhRVUZqTEVsQldqTkNjV3BGTEVOQlFWYzVSaXhIUVVGTGRqbEVMRkZCUVZGcmFrVXNSVUZCYlVJc1MwRkZla04wZFVVc1QwRkJVeXhGUVVGSExFMUJRVThzUjBGRk0wSXNTMEZCVHpKdlJTeEZRVUZKTTI5RkxFOUJRVk1zUjBGQlRTeEhRVU40UWpKdlJTeEhRVUZaTEVsQlJXUXNUMEZCVDBFc1JVRjFTRzFDSzBZc1EwRkJXUzlHTEVsQlIzaERMRk5CUVZOR0xFVkJRVmw2TjBRc1JVRkJTekpvUlN4RlFVRkxka2NzUlVGQlVYQnZSU3hIUVVOeVF5eEpRVUZMTEVsQlFVbDBReXhGUVVGSkxFVkJRVWRCTEVWQlFVbHpReXhMUVVOaWRFTXNSVUZCU1RCeFJTeEhRVUZWZFVjc1JVRkJTVE4xUlN4UlFVRlpkRU1zUjBGQlMzTlFMRVZCUVVsb1RpeFZRVVJvUW5SRExFVkJSVFZDYVhoRkxFVkJRVWxxZUVVc1JVRkJTVEJ4UlN4SFFVRlZjRGRFTEVWQlFVbDBVQ3hIUVVWNFFpeFBRVUZQUVN4TExEaERRM0oyUkZSU0xFVkJRVkZ4ZUVRc1YwRjFRMUlzVTBGQmNVSnhaMElzUjBGRGJrSXNTVUZCU1VNc1JVRkJUME1zUlVGQlVVWXNSMEZEWmtjc1JVRkJWMFlzUlVGQlN5eEhRVU5vUWtjc1JVRkJhMEpJTEVWQlFVc3NSMEZETTBJc1QwRkJkVU1zUjBGQk9VSkZMRVZCUVZkRExFZEJRWFZDTEVWQlFVdEJMRWRCTVVOc1JEbDRSU3hGUVVGUmMzaEZMRmxCYVVSU0xGTkJRWE5DU1N4SFFVTndRaXhKUVVGSlN5eEZRV05CZG5oRkxFVkJZa0Z0ZUVVc1JVRkJUME1zUlVGQlVVWXNSMEZEWmtjc1JVRkJWMFlzUlVGQlN5eEhRVU5vUWtjc1JVRkJhMEpJTEVWQlFVc3NSMEZGZGtKdVNDeEZRVUZOTEVsQlFVbDNTQ3hGUVZab1FpeFRRVUZ6UWs0c1JVRkJTMGNzUlVGQlZVTXNSMEZEYmtNc1QwRkJkVU1zUjBGQk9VSkVMRVZCUVZkRExFZEJRWFZDTEVWQlFVdEJMRVZCVXpsQ1J5eERRVUZaVUN4RlFVRkxSeXhGUVVGVlF5eEpRVVY2UTBrc1JVRkJWU3hGUVVkV09Va3NSVUZCVFRCSkxFVkJRV3RDTEVWQlEzaENSQ3hGUVVGWExFVkJRMWhCTEVWQlIwb3NTVUZCUzNKNFJTeEZRVUZKTEVWQlFVZEJMRVZCUVVrMGIwVXNSVUZCU3pWdlJTeEhRVUZMTEVWQlEzaENkWGhGTEVWQlEwZEpMRVZCUVZWVUxFVkJRVWwwZDBRc1YwRkJWelZuUWl4TFFVRlBMRWRCUTJoRE1uaEZMRVZCUVZWVUxFVkJRVWwwZDBRc1YwRkJWelZuUWl4RlFVRkpMRXRCUVU4c1IwRkRjRU15ZUVVc1JVRkJWVlFzUlVGQlNYUjNSQ3hYUVVGWE5XZENMRVZCUVVrc1MwRkJUeXhGUVVOeVF6SjRSU3hGUVVGVlZDeEZRVUZKZEhkRUxGZEJRVmMxWjBJc1JVRkJTU3hKUVVNdlFtZHhSU3hGUVVGSk1FZ3NTMEZCWTBnc1IwRkJUeXhIUVVGTkxFbEJReTlDZGtnc1JVRkJTVEJJTEV0QlFXTklMRWRCUVU4c1JVRkJTeXhKUVVNNVFuWklMRVZCUVVrd1NDeExRVUZ0UWl4SlFVRk9TQ3hGUVVkTExFbEJRWEJDUkN4SlFVTkdReXhGUVVOSFNTeEZRVUZWVkN4RlFVRkpkSGRFTEZkQlFWYzFaMElzUzBGQlR5eEZRVU5vUXpKNFJTeEZRVUZWVkN4RlFVRkpkSGRFTEZkQlFWYzFaMElzUlVGQlNTeExRVUZQTEVWQlEzWkRaM0ZGTEVWQlFVa3dTQ3hMUVVGdFFpeEpRVUZPU0N4SFFVZExMRWxCUVhCQ1JDeEpRVU5HUXl4RlFVTkhTU3hGUVVGVlZDeEZRVUZKZEhkRUxGZEJRVmMxWjBJc1MwRkJUeXhIUVVOb1F6SjRSU3hGUVVGVlZDeEZRVUZKZEhkRUxGZEJRVmMxWjBJc1JVRkJTU3hMUVVGUExFVkJRM0JETW5oRkxFVkJRVlZVTEVWQlFVbDBkMFFzVjBGQlZ6Vm5RaXhGUVVGSkxFdEJRVThzUlVGRGRrTm5jVVVzUlVGQlNUQklMRXRCUVdOSUxFZEJRVThzUlVGQlN5eEpRVU01UW5aSUxFVkJRVWt3U0N4TFFVRnRRaXhKUVVGT1NDeEhRVWR1UWl4UFFVRlBka2dzUjBFelJsUjRjVVVzUlVGQlVXbHpSU3hqUVd0SVVpeFRRVUYzUW0xSExFZEJVWFJDTEVsQlVFRXNTVUZCU1V3c1JVRkRRVE5KTEVWQlFVMW5TaXhGUVVGTmRIWkZMRTlCUTFwMWRrVXNSVUZCWVdwS0xFVkJRVTBzUlVGRGJrSnJTaXhGUVVGUkxFZEJTVWc1ZUVVc1JVRkJTU3hGUVVGSEszaEZMRVZCUVU5dVNpeEZRVUZOYVVvc1JVRkJXVGQ0UlN4RlFVRkpLM2hGTEVWQlFVMHZlRVVzUjBGSU9VSXNUVUZKYmtJNGVFVXNSVUZCVFRGc1JTeExRVUZMTkd4RkxFVkJRVmxLTEVWQlFVODFlRVVzUlVGQlNVRXNSVUZLWml4TlFVbHhReXQ0UlN4RlFVRlBRU3hGUVVGUkwzaEZMRVZCU25CRUxGRkJVVVlzU1VGQlpqWjRSU3hIUVVOR1RpeEZRVUZOU3l4RlFVRk5hRW9zUlVGQlRTeEhRVU5zUW10S0xFVkJRVTB4YkVVc1MwRkRTalpzUlN4RlFVRlBWaXhIUVVGUExFZEJRMlJWTEVWQlFWRldMRWRCUVU4c1JVRkJTeXhKUVVOd1FpeFBRVVZ6UWl4SlFVRm1UU3hKUVVOVVRpeEhRVUZQU3l4RlFVRk5hRW9zUlVGQlRTeEpRVUZOTEVkQlFVdG5TaXhGUVVGTmFFb3NSVUZCVFN4SFFVTXhRMnRLTEVWQlFVMHhiRVVzUzBGRFNqWnNSU3hGUVVGUFZpeEhRVUZQTEVsQlEyUlZMRVZCUVZGV0xFZEJRVThzUlVGQlN5eEpRVU53UWxVc1JVRkJVVllzUjBGQlR5eEZRVUZMTEVsQlEzQkNMRTFCU1Vvc1QwRkJUMDhzUlVGQlRYQnZSU3hMUVVGTExFdEJla2x3UWl4SlFVeEJMRWxCUVVsMWIwVXNSVUZCVXl4SFFVTlVUaXhGUVVGWkxFZEJRMXBJTEVWQlFUUkNMRzlDUVVGbWNHcERMRmRCUVRaQ1FTeFhRVUZoY25KRExFMUJSWFpFYTNoRUxFVkJRVThzYlVWQlEwWnFNRVFzUlVGQlNTeEZRVUZITkc5RkxFVkJRVTB6VlN4RlFVRkxNM2hFTEU5QlFWRjBReXhGUVVGSk5HOUZMRWxCUVU4MWIwVXNSVUZETlVOcGVVVXNSVUZCVDJwNVJTeEhRVUZMYVRCRUxFVkJRVXRxTUVRc1IwRkRha0l5ZUVVc1JVRkJWVEZrTEVWQlFVdHlla01zVjBGQlZ6Vm5RaXhKUVVGTlFTeEZRVkZzUXl4VFFVRlRiM2hGTEVWQlFWTkdMRWRCUTJoQ0xFbEJRVWwwU1N4RlFVRk5jMGtzUlVGQlNUVjFSU3hQUVVWa0xFZEJRVWx6YlVVc1JVRkJUU3hGUVVGSkxFVkJRMW9zVFVGQlRTeEpRVUZKZG1wRkxFMUJRVTBzYTBSQlMyeENMRWxCUVVsbmMwVXNSVUZCVjBnc1JVRkJTV2hzUlN4UlFVRlJMRXRCVHpOQ0xFOUJUbXRDTEVsQlFXUnRiRVVzU1VGQmFVSkJMRVZCUVZkNlNTeEhRVTE2UWl4RFFVRkRlVWtzUlVGS1kwRXNTVUZCWVhwSkxFVkJReTlDTEVWQlEwRXNSVUZCUzNsSkxFVkJRVmNzUjBGelJYUkNMRk5CUVZOWExFVkJRV0ZLTEVWQlFVOTJiRUlzUlVGQlQzUlVMRWRCUjJ4RExFbEJSa0VzU1VGQlNYYzBRaXhGUVZKdlFsY3NSVUZUY0VKb1RpeEZRVUZUTEVkQlEwcHNiRVVzUlVGQlNYRnpSQ3hGUVVGUGNuTkVMRVZCUVVrck5FTXNSVUZCU3k4MFF5eEhRVUZMTEVWQlEyaERkWGhGTEVkQlEwbExMRVZCUVUwMWVFVXNTVUZCVFN4SFFVRk5MRmRCUTJ4Q05IaEZMRVZCUVUwMWVFVXNSVUZCU1N4SlFVRk5MRVZCUVVzc1VVRkRVQ3hKUVVGbU5IaEZMRVZCUVUwMWVFVXNSVUZCU1N4SlFVTmlhMnhGTEVWQlFVODVORVFzUzBGa1JqWnNSU3hIUVVScFFrTXNSVUZsVFZnc1NVRmtWQ3hIUVVGTExFbEJRM2hDVlN4RlFVRlBReXhIUVVGUExFZEJRVXNzU1VGRGJrSkVMRVZCUVU5RExFZEJRVThzUlVGQlNTeEpRVU5zUWtRc1JVRkJZU3hIUVVGT1F5eEpRV0ZVTEU5QlFVOW9UaXhGUVVGUGVEZEVMRXRCUVVzc1NVRnFSM0pDYVc5RkxFVkJRVlVzU1VGQlNTOTNSQ3hYUVVGWExFbEJRVTBzUjBGREwwSXJkMFFzUlVGQlZTeEpRVUZKTDNkRUxGZEJRVmNzU1VGQlRTeEpPenRCUTJ4Q0wwSndhRUlzUlVGQlVXdDJSQ3hMUVVGUExGTkJRVlZ6UXl4RlFVRlJNRm9zUlVGQlVYbElMRVZCUVUxRExFVkJRVTFETEVkQlEyNUVMRWxCUVVrNWRrVXNSVUZCUjI1RExFVkJRMGhyZVVVc1JVRkJhVUlzUlVGQlZFUXNSVUZCWTBRc1JVRkJUeXhGUVVNM1FrY3NSMEZCVVN4SFFVRkxSQ3hIUVVGUkxFVkJRM0pDUlN4RlFVRlJSQ3hIUVVGUkxFVkJRMmhDUlN4SFFVRlRMRVZCUTFSNmVVVXNSVUZCU1cxNVJTeEZRVUZSUlN4RlFVRlRMRVZCUVVzc1JVRkRNVUl2ZUVVc1JVRkJTVFo0UlN4SFFVRlJMRVZCUVVrc1JVRkRhRUp3ZDBVc1JVRkJTV2wyUkN4RlFVRlBNRm9zUlVGQlV6RnhSU3hIUVU5NFFpeEpRVXhCUVN4SFFVRkxUU3hGUVVWTWFVTXNSVUZCU1ZJc1IwRkJUU3hKUVVGUE1IZEZMRWRCUVZVc1JVRkRNMEl4ZDBVc1MwRkJVVEIzUlN4RlFVTlNRU3hIUVVGVFNDeEZRVU5HUnl4RlFVRlJMRVZCUVVkc2QwVXNSVUZCVXl4SlFVRktRU3hGUVVGWGVYVkVMRVZCUVU4d1dpeEZRVUZUTVhGRkxFZEJRVWxCTEVkQlFVdE5MRVZCUVVkdGVVVXNSMEZCVXl4SFFVdDJSU3hKUVVoQmNubEZMRVZCUVVsdFF5eEhRVUZOTEVsQlFVOXJkMFVzUjBGQlZTeEZRVU16UW14M1JTeExRVUZSYTNkRkxFVkJRMUpCTEVkQlFWTk1MRVZCUTBaTExFVkJRVkVzUlVGQlIzSjVSU3hGUVVGVExFbEJRVXBCTEVWQlFWYzBkMFFzUlVGQlR6QmFMRVZCUVZNeGNVVXNSMEZCU1VFc1IwRkJTMDBzUlVGQlIyMTVSU3hIUVVGVExFZEJSWFpGTEVkQlFWVXNTVUZCVG14M1JTeEZRVU5HUVN4RlFVRkpMRVZCUVVscGQwVXNUVUZEU0N4SlFVRkphbmRGTEVsQlFVMW5kMFVzUlVGRFppeFBRVUZQYm5sRkxFVkJRVWxuYlVNc1NVRkJjMEp4U2l4TFFVRmtNWFJETEVkQlFVc3NSVUZCU1N4SFFVVTFRak5DTEVkQlFWRnpSQ3hMUVVGTGIzSkRMRWxCUVVrc1JVRkJSM05xUXl4SFFVTndRamQyUlN4SFFVRlJhWGRGTEVWQlJWWXNUMEZCVVhwM1JTeEhRVUZMTEVWQlFVa3NSMEZCU3pOQ0xFVkJRVWx6UkN4TFFVRkxiM0pETEVsQlFVa3NSVUZCUjNaelF5eEZRVUZKTm5aRkxFbEJSelZETlhsRkxFVkJRVkZwVlN4TlFVRlJMRk5CUVZWMU9VTXNSVUZCVVM5MlJDeEZRVUZQZVhCRkxFVkJRVkY1U0N4RlFVRk5ReXhGUVVGTlF5eEhRVU16UkN4SlFVRkpPWFpGTEVWQlFVZHVReXhGUVVGSFF5eEZRVU5PYVhsRkxFVkJRV2xDTEVWQlFWUkVMRVZCUVdORUxFVkJRVThzUlVGRE4wSkhMRWRCUVZFc1IwRkJTMFFzUjBGQlVTeEZRVU55UWtVc1JVRkJVVVFzUjBGQlVTeEZRVU5vUWtjc1JVRkJaU3hMUVVGVVRpeEZRVUZqTVhWRkxFdEJRVXR2Y2tNc1NVRkJTU3hIUVVGSkxFbEJRVTF3Y2tNc1MwRkJTMjl5UXl4SlFVRkpMRWRCUVVrc1NVRkJUU3hGUVVNeFJEbDFReXhGUVVGSmJYbEZMRVZCUVU4c1JVRkJTMFVzUlVGQlV5eEZRVU42UWk5NFJTeEZRVUZKTm5oRkxFVkJRVThzUjBGQlN5eEZRVU5vUW5CM1JTeEZRVUZKWkN4RlFVRlJMRWRCUVdkQ0xFbEJRVlpCTEVkQlFXVXNSVUZCU1VFc1JVRkJVU3hGUVVGTExFVkJRVWtzUlVGdFF6RkVMRWxCYWtOQlFTeEZRVUZSZVVNc1MwRkJTM0ZwUXl4SlFVRkpPV3RETEVkQlJXSXJhVU1zVFVGQlRTOXBReXhKUVVGVlFTeEpRVUZWZDNWRExFdEJRelZDY25aRExFVkJRVWswYWtNc1RVRkJUUzlwUXl4SFFVRlRMRVZCUVVrc1JVRkRka0p6UWl4RlFVRkpaM2RGTEVsQlJVcG9kMFVzUlVGQlNXMUNMRXRCUVVzMll5eE5RVUZOTjJNc1MwRkJTM0Z5UXl4SlFVRkpPWFJETEVkQlFWTjVReXhMUVVGTGMzSkRMRXRCUTJ4REwzUkRMRWRCUVZOYUxFVkJRVWx4UkN4TFFVRkxiM0pETEVsQlFVa3NSMEZCU1haelF5eEpRVUZOTEVsQlEyeERRU3hKUVVOQmJFTXNSMEZCU3l4SlFVZE1XU3hIUVVSRmMwSXNSVUZCU1dsM1JTeEhRVUZUTEVWQlEwNUZMRVZCUVV0eWVVVXNSVUZGVEhGNVJTeEZRVUZMYUhaRkxFdEJRVXR2Y2tNc1NVRkJTU3hGUVVGSExFVkJRVWt3YWtNc1NVRkZjRUp1ZVVVc1IwRkJTeXhKUVVObWEwTXNTVUZEUVd4RExFZEJRVXNzUjBGSFNHdERMRVZCUVVscGQwVXNSMEZCVTBRc1IwRkRabTU1UlN4RlFVRkpMRVZCUTBwdFF5eEZRVUZKWjNkRkxFZEJRMHRvZDBVc1JVRkJTV2wzUlN4SFFVRlRMRWRCUTNSQ2NIbEZMRWRCUVUxaExFVkJRVkZhTEVWQlFVc3NSMEZCUzNGRUxFdEJRVXR2Y2tNc1NVRkJTU3hGUVVGSGMycERMRWRCUTNCRE4zWkZMRWRCUVZGcGQwVXNTVUZGVW5CNVJTeEZRVUZKWVN4RlFVRlJlVU1zUzBGQlMyOXlReXhKUVVGSkxFVkJRVWN3YWtNc1JVRkJVU3hIUVVGTE9YVkZMRXRCUVV0dmNrTXNTVUZCU1N4RlFVRkhjMnBETEVkQlEycEVOM1pGTEVWQlFVa3NTVUZKUkRaMlJTeEhRVUZSTEVWQlFVZHdhRUlzUlVGQlR6QmFMRVZCUVZNeGNVVXNSMEZCVXl4SlFVRktTU3hGUVVGVlNpeEhRVUZMVFN4RlFVRkhSaXhIUVVGTExFbEJRVXRuZVVVc1IwRkJVU3hIUVVrelJTeEpRVVpCTjNaRkxFVkJRVXRCTEVkQlFVczJka1VzUlVGQlVXaDVSU3hGUVVOc1FtdDVSU3hIUVVGUlJpeEZRVU5FUlN4RlFVRlBMRVZCUVVkMGFFSXNSVUZCVHpCYUxFVkJRVk14Y1VVc1IwRkJVeXhKUVVGS2RVTXNSVUZCVlhaRExFZEJRVXROTEVWQlFVZHBReXhIUVVGTExFbEJRVXNyZGtVc1IwRkJVU3hIUVVVeFJYUm9RaXhGUVVGUE1Gb3NSVUZCVXpGeFJTeEZRVUZKVFN4SlFVRlZMRWxCUVVwNVFpeEpMR05EYmtZMVFpeEpRVUZKZVVrc1JVRkJWeXhIUVVGSFFTeFRRVVZzUWk5TExFVkJRVTlFTEZGQlFWVjFSQ3hOUVVGTk5FZ3NVMEZCVnl4VFFVRlZjUzlFTEVkQlF6RkRMRTFCUVRaQ0xHdENRVUYwUW5ndlJDeEZRVUZUY2tzc1MwRkJTelp3UlN4TExHZENRMVYyUWl4SlFVRkpkblpFTEVWQlFVOHNSVUZCVVN4SFFVTm1lbGNzUlVGQlQzbFhMRVZCUTFCNFdDeEZRVUZUWjBvc1UwRkJVeXhqUVVGVVFTeEhRVVZpYWtrc1JVRkJTelJLTEdGQlFXRXNhVU5CUVd0RExFdEJRVTB6U3l4SFFWY3hSSE4zUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSRExGTkJRVmNzVTBGQlUzQkZMRWRCUTNoRGJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wUXl4VFFVRlZkRGxETEVWQlFVczBjRU1zVTBGREwwTnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMFF5eFRRVUZUZGpsRExGbEJRV01zYTBOQlN6TkRReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5FTXNVMEZCVTI0eVJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXpORUxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMmcwUXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllYUkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVMmcwUXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRMnhGTEVsQlFVOURMRVZCUVUwc1EwRkRXREpsTEZGQlFWTnNORVFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWRCUTJ4RU5tVXNUVUZCVDI0MFJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1NVRk5iRVFzVDBGSVNVUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMFF5eFRRVUZUZWxVc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNeFJDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5FTXNVMEZEY0VNc1QwRkJUM2hGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkVNc1UwRkJVM2hFTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjNwRk9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBReXhUUVVGVGVFUXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVONlJTeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOTBZU3haUVVNeFF6Um1MRVZCUVVrNFpTeFhRVUZYTlhoRkxFZEJRMllzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5MllTeFpRVU14UXpabUxFVkJRVWtyWlN4VFFVRlROM2hGTEVkQlEySXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJETEZOQlFWTnVNa1FzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEZWtRc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJETEZOQlFWTnVSQ3gzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVOMFJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5FTXNVMEZCVTI1RUxIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRGVrVXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFVkJSVVVzUzBGRVZuSjVSQ3hGUVVGSmFWUXNSVUZCVVhNNVJDeGxRVVZXY0dVc1JVRkJUekZoTEZkQlEwd3NSVUZEUVhvelF5eEhRVWxOTEV0QlJGWkJMRVZCUVVscFZDeEZRVUZSZFRsRUxHRkJSVlp5WlN4RlFVRlBNMkVzVjBGRFRDeEZRVU5CZURORExFbEJWVTRyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMFF5eFRRVUZUYmpKRUxGVkJRVlZ0ZUVVc1YwRkJZU3hYUVVOd1JDeFBRVUU0UW5RMFJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5FTXNVMEZCVTI0eVJDeFZRVUZWYVhoRkxGZEJRV0VzVTBGQlV6VjRSU3hIUVVNM1JDeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJLME1zYTBKQlFXdENiR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJVV3BFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5FTXNVMEZCVTI0eVJDeFZRVUZWYjNoRkxGTkJRVmNzVjBGRGJFUXNUMEZCT0VKMk5FUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eEpRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UkRMRk5CUVZOdU1rUXNWVUZCVld0NFJTeFRRVUZYTEZOQlFWTTNlRVVzUjBGRE0wUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVU3RETEd0Q1FVRnJRbXhyUkN4TFFVRk5MRVZCUVVkcVF5eEpRVWxxUkN0RExFVkJRVXQwUXl4UFFVRlBNbFlzVDBGQlR6ZFlMRVZCUVZNcmVrUXNUVUZCVFVNc1QwRkJUekpDTEZjc1owSkRNVXg2UXl4SlFVRkpNVFpETEVWQlFVOHNSVUZCVVN4SFFVTm1lbGNzUlVGQlQzbFhMRVZCUTFCNFdDeEZRVUZUWjBvc1UwRkJVeXhqUVVGVVFTeEhRVVZpYWtrc1JVRkJTelJLTEdGQlFXRXNORUpCUVRaQ0xFdEJRVTB6U3l4SFFWZHlSSE4zUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJUU3hUUVVGVFZDeEhRVU51UTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlJ5eExRVUZOTEU5QlJYWkVNM1pFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGTE16VkRMRVZCUVVzMGNFTXNVMEZETVVOeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5tTEVsQlFVazFOVU1zV1VGQll5dzJRa0ZMZEVORExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5tTEVsQlFVbDRlVVFzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTjBSQ3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCU1hJd1F5eFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZV3BGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKY2pCRExGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETjBRc1NVRkJUME1zUlVGQlRTeERRVU5ZYVdZc1VVRkJVM2cwUkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzU1VGRGJFUTVlVVFzVFVGQlR6aDVSQ3hGUVVGSmJXWXNhMEpCVFdJc1QwRklTWEJtTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGSk9WRXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnlSQ3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVOd1F5eFBRVUZQWWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTVWNzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYY0VVNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCU1Vjc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU53UlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWx2Wml4WFFVRlhiSGxGTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVzlEZDNSRUxFVkJRVTg1V2l4WlFVTXZRMjltTEVWQlFVbHhaaXhUUVVGVGJubEZMRWRCUTJJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCU1hoNVJDeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTndSQ3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKVVN4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTnFSRUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGSlVTeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEzQkZMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEhRVU5TY25sRUxFVkJRVWxwVkN4RlFVRlJORGxFTEdOQlEwNHZkMFVzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRTJPVVFzYVVKQlEwNW9lRVVzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTl3WVN4WFFVTk1MRVZCUTBFdk0wTXNTVUZWVGl0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCU1hoNVJDeFZRVUZWZVhoRkxGZEJRV0VzVjBGREwwTXNUMEZCT0VJMU5FUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyWXNTVUZCU1hoNVJDeFZRVUZWZFhoRkxGZEJRV0VzVTBGQlUyeDVSU3hIUVVONFJDeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJVWEJFYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKZUhsRUxGVkJRVlV5ZUVVc1UwRkJWeXhYUVVNM1F5eFBRVUUwUXprMFJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVM2hHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFppeEpRVUZKZUhsRUxGVkJRVlZ6ZUVVc1pVRkJhVUlzVjBGRGJrUXNUMEZCT0VKNk5FUXNSVUZCU3pSd1F5eFJRVUZSYjBNc1YwRkRka04yYWtRc1MwRkJTM0YzUlN4aFFWZFlhR2RDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkplSGxFTEZWQlFWVXdlRVVzWTBGQlowSXNWMEZEYkVRc1QwRkJiVU0zTkVRc1JVRkJTelJ3UXl4UlFVRlJjVU1zVlVGRE5VTjRha1FzUzBGQlMzRjNSU3hoUVZGWWFHZENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaaXhKUVVGSmVIbEVMRlZCUVZWM2VFVXNVMEZCVnl4VFFVRlRibmxGTEVkQlEzUkVMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkZ2UkN4dlFrRkJiMEoyYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZKYmtRclF5eEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVODNXQ3hGUVVGVEszcEVMRTFCUVUxRExFOUJRVTh5UWl4VlFWRjZRelZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWml4SlFVRkplSGxFTEZWQlFWVTBlRVVzV1VGQll5eFhRVU5vUkN4UFFVRlBkSGRGTEV0QlFVdHRkMFVzWVVGQllXcDNSU3hOUVVGTkxFdEJRVXRuTTBJc1QwRlhkRU50TlVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObUxFbEJRVWw0ZVVRc1ZVRkJWVFo0UlN4TFFVRlBMRk5CUVZORExFVkJRVmx1ZWtVc1JVRkRXbTk2UlN4SFFVTTNRMEVzU1VGRFNFRXNSVUZCYjBJc2QwSkJSMk1zUzBGQmFFTkJMRVZCUVd0Q2NHdEZMRkZCUVZFc1IwRkROVUp5VFN4TFFVRkxhWGRGTEZkQlFWZFJMRVZCUVc5Q0xFbEJRVTF3ZWtVc1IwRkZNVU15UXl4TFFVRkxhWGRGTEZkQlFWZFJMRVZCUVc5Q2NIcEZMRWRCUjNSRE1rTXNTMEZCUzJ0M1JTeFRRVUZUVFN4SlFXRm9RbTVuUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJZc1NVRkJTWGg1UkN4VlFVRlZaM2xGTEU5QlFWTXNVMEZCVTBNc1JVRkJZWFI2UlN4SFFVTnFSU3hQUVVGSk1rTXNTMEZCUzNOM1JTeGxRVUZwUW1wNlJTeEZRVU5xUW5ONlJTeEZRVUZaTTNkRkxFdEJRVXR2ZDBVc2FVSkJSV3BDTEU4c2JVZERPVkZZTEdsQ1FWbERMRmRCUVZsUkxFVkJRVFpDUXl4SFFVRjZReXhYUVVaVkxFdEJRVUZETEcxQ1FVRnhRaXhOUVVjNVFqbDNSU3hMUVVGTE5IZEZMRk5CUVZkQkxFVkJRMmhDTlhkRkxFdEJRVXMyZDBVc1dVRkJZMEVzUlVGRmJrSTNkMFVzUzBGQlN6UnFSU3hOUVVGUkxFbEJRVWxxUlN4VFFVRmhMRk5CUVVGRExFZEJRemRDTEVWQlFVdDFReXhUUVVGWGRrTXNTMEZIYWtKcFVpeEZRVUZaYW1oQ0xFOUJRVk1zVjBGQlRTeFRRVUZMYldoQ0xHbENRVU5vUTBZc1JVRkJXV2hvUWl4UlFVRlZMRmRCUVUwc1UwRkJTMjFvUWl4clFrRkRha05JTEVWQlFWa3ZaMElzVVVGQlZTeFRRVUZEYldoQ0xFZEJRWE5DTEZOQlFVdERMR1ZCUVdWRUxFbEJSV3BGVEN4RlFVRlRUeXd5UWtGQk5rSXNWMEZCVFN4UFFVRkJkbk5GTEZGQlFWRnBia01zU1VGQlNTdHJReXhGUVVGVFVTeHhRa0YzUTI1RkxFOUJja05STEZsQlFVRTFia0lzVFVGQlVDeFhRVU5EZUhCRUxFdEJRVXR4ZUVVc2NVSkJRV2RDTVdZc1NVRkhaaXhaUVVGQk1tWXNVMEZCVUN4WFFVTkRMRTlCUVU5MGVFVXNTMEZCU3pCdFJDeFJRVWRPTEZsQlFVRTJjVUlzWlVGQlVDeFhRVU5ETEU5QlFVOTJlRVVzUzBGQlMzZDRSU3hqUVVkTUxGbEJRVUZJTEdkQ1FVRlNMRk5CUVhkQ2VsQXNSMEZEYmtJMWFFVXNTMEZCU3pCdFJDeFRRVWRVTVcxRUxFdEJRVXN3YlVRc1VVRkJVeXhGUVVOa01XMUVMRXRCUVV0M2VFVXNZVUZCWlRWUUxFVkJRM0JDTldoRkxFdEJRVXMwZDBVc1UwRkJVM0J1UWl4VlFVZFFMRmxCUVVGMWJrSXNZMEZCVWl4WFFVTkRMM2RGTEV0QlFVdHRhVVVzWTBGQlUzaFJMRWxCUjFBc1dVRkJRWEZtTEdWQlFWSXNWMEZEUTJoNFJTeExRVUZMY1hoRkxHZENRVUZuUWl4SlFVRkpiSFpGTEUxQlFVMHNlVUpCUjNoQ0xGbEJRVUVyZFVVc1pVRkJVaXhUUVVGMVFrUXNSMEZEZEVKeWMwVXNVVUZCVVVNc1RVRkJUU3huUWtGQmFVSnZjMFVzUjBGREwwSnFlRVVzUzBGQlMzRjRSU3huUWtGQlowSktMRVZCUVVkd2MwVXNVVUZIWml4WlFVRkJNRXdzVFVGQlZpeFRRVUZuUW5OblJDeEhRVU5tTjNkRUxFdEJRVXMyZDBVc1dVRkJXV2h4UlN4TFFVRkxaM0ZFTEVWQlFVa3hVU3h2UWtGRk5VSXNSVUZvUlVFc1IwRkJZU3hGUVVGQmQydENMR1VzWjJ4Q1EwWmlMRmRCUTBFc1QwRkRRU3hSUVUxQkxHTkJTME1zVjBGQldUaE5MRVZCUVhkQ01XUXNSVUZCWjBJeVpDeEZRVUU0UW5CVExFZEJRV3hHTEUxQlEwTXNXVUZCVFhaTUxFVkJRVkV5WkN4RlFVRlJjRk1zU1VGQlN5eExMRTlCU25CQ0xFVkJRVUZ4VXl4cFFrRkJNa0lzUlVGRE0wSXNSVUZCUVVNc2EwSkJRVFJDTEVWQlNXNURMRVZCUVV0SUxGRkJRVlZCTEVVc1JVRnBTbXBDTEU5QmVFcHJReXhQUVZVeFFpeFpRVUZCZEc5Q0xFMUJRVkFzVTBGQllUQkRMRWRCUTFvc1NVRkJUVU1zUlVGQlV5eEpRVUZKT1hKRUxFdEJRVXR6TDBRc1MwRkJTM0paTEdsQ1FVRnBRa2tzVVVGQlVVTXNXVUZCVnl4SlFVRkpkRzVFTEV0QlFVdHpMMFFzUzBGQlMzSlpMR2xDUVVGcFFrMHNWMEZETVVaemNVSXNSVUZCYVVJc1NVRkJTU3hGUVVGQmJHWXNaVUZETTBKclppeEZRVUZsTDJNc1ZVRkJWV2hLTEVkQlEzcENLMnhDTEVWQlFXVTVZeXhaUVVGWksyTXNSVUZCYVVKcWJVSXNTVUZGTlVNc1NVRkRRemR5UkN4TFFVRkxlWGhGTEZGQlFWRXZUU3hoUVVGaE1XdEZMRXRCUVVzcmVrUXNUMEZCVVRoa0xFZEJRM1JETEUxQlFVOTRlVVVzUjBGRFVuVkdMRkZCUVZGRExFMUJRVTBzZDBKQlFYbENlRVlzUjBGRGRrTlhMRXRCUVVzcmVFVXNiVUpCUVcxQ01YbEZMRXRCU1c1Q0xGbEJRVUZwY1VRc1dVRkJVQ3hUUVVGdFFtMVlMRWRCUldSQkxFVkJRMGg2WjBVc1MwRkJTemcyUXl4alFVRmhMRVZCUVU4eWJFSXNSVUZCVXpVelJDeE5RVUZOTEVsQlIzcEROMGtzUzBGQlN6ZzJReXhqUVVGaExFOUJRVTgyVnl4SlFVZHVRaXhaUVVGQmNFa3NWMEZCVUN4WFFVTk5kbkJFTEV0QlFVdHpMMFFzUzBGQlMzSlpMR2xDUVVGcFFtMURMR1ZCUjJoRGNIQkVMRXRCUVVzNE5rTXNZMEZCWVN4UFFVRk5ObGNzU1VGSGFrSXNXVUZCUVRkWExHRkJRVklzVTBGQmNVSjNZU3hGUVVGamJVd3NSMEZEYkVNc1NVRkRReXhKUVVGTFFTeEhRVUVyUWl4SFFVRnVRa0VzUlVGQlUzSm9SU3hQUVZGNlFpeFBRVkJOTkhsRkxFVkJRVk1zU1VGQlNTeEZRVUZCZW1Zc1pVRkRXbUVzVVVGQlR5eEpRVU5TTm1Vc1JVRkJhVUlzU1VGQlNTeEZRVUZCY21Zc1owSkJRMW95UXl4blFrRkJaMEpyVEN4SFFVTXZRbmRTTEVWQlFXVjZZeXhwUWtGQmFVSjNZeXhIUVVOb1EwTXNSVUZCWlhoakxFOUJRVTlJTEZGQlEzUkNkREZFTEV0QlFVdDVlRVVzVVVGQlVUTXlRaXhoUVVGaE9UWkRMRXRCUVVzcmVrUXNUMEZCVVd0bExFZEJTWGhETEV0QlFUSkNMRWxCUVhCQ2VGSXNSVUZCVTNKb1JTeFJRVUZqTEVOQlF6ZENMRWxCUTAwMGVVVXNSVUZOUVVNc1JVRlFRVU1zUlVGQlpURjRSU3hMUVVGTFJTeEpRVUZKS3k5RUxFVkJRVk55YUVVc1QwRjRSRWdzVVVGNVJEbENOSGxGTEVWQlFWTXNTVUZCU1N4RlFVRkJlbVlzWlVGRFdsa3NVVUZCVVhOT0xFVkJRVk0xTTBRc1RVRkJUU3hGUVVGSGNYQkZMRWxCUlZRc1MwRkVlRUo2VWl4RlFVRlhRU3hGUVVGVE5UTkVMRTFCUVUxeGNFVXNTVUZEWWpsNVJTeFJRVU5hTkhsRkxFVkJRVTgxWlN4UlFVRlBMRWxCUlZRMlpTeEZRVUZwUWl4SlFVRkpMRVZCUVVGeVppeG5Ra0ZEV2pKRExHZENRVUZuUW10TUxFZEJReTlDZDFJc1JVRkJaWHBqTEdsQ1FVRnBRbmRqTEVkQlEyaERReXhGUVVGbGVHTXNUMEZCVDBnc1IwRkRkRUowTVVRc1MwRkJTM2w0UlN4UlFVRlJNekpDTEdGQlFXRTVOa01zUzBGQlN5dDZSQ3hQUVVGUmEyVXNTVUZGZGtNc1RVRkJUelY1UlN4SFFVTlNkVVlzVVVGQlVVTXNUVUZCVFN4M1FrRkJlVUo0Uml4SFFVTjJRMWNzUzBGQlN5dDRSU3h0UWtGQmJVSXhlVVVzUzBGSmJrSXNXVUZCUVd0c1JTeFhRVUZRTEZOQlFXdENTQ3hIUVVOcVFpeFBRVUZSUVN4RlFVRkxkRkVzWlVGRFdpeExRVUZMTEVWQlFVRXpTQ3hUUVVGVGQwZ3NVMEZCVTBVc1VVRkRkRUlzUjBGQlNUZDZSQ3hMUVVGTE1uaEZMR2RDUVVWU0xGbEJSRUV6ZUVVc1MwRkJTeXQ0UlN4dFFrRkJiVUlzU1VGQlNUVjJSU3hOUVVGTkxEWkNRVWR1UXl4SFFVRkpia01zUzBGQlN6UjRSU3hwUWtGRlVpeFpRVVJCTlhoRkxFdEJRVXNyZUVVc2JVSkJRVzFDTEVsQlFVazFka1VzVFVGQlRTeHZRMEZIYmtOdVF5eExRVUZMYlhsRkxHVkJRV1V2VGl4RlFVRkxibEVzWTBGRGVrSXNUVUZEUkN4TFFVRkxMRVZCUVVFNVNDeFRRVUZUZDBnc1UwRkJVM0EzUXl4UlFVTjBRaXhKUVVGTGRsa3NTMEZCU3pKNFJTeG5Ra0ZGVkN4WlFVUkJNM2hGTEV0QlFVc3JlRVVzYlVKQlFXMUNMRWxCUVVrMWRrVXNUVUZCVFN3MlFrRkhia01zUjBGQlNXNURMRXRCUVVzMGVFVXNhVUpCUlZJc1dVRkVRVFY0UlN4TFFVRkxLM2hGTEcxQ1FVRnRRaXhKUVVGSk5YWkZMRTFCUVUwc2IwTkJSMjVEYmtNc1MwRkJTMjk1UlN4bFFVRmxhRThzUlVGQlMzWlRMR05CUTNwQ0xFMUJRMFFzUzBGQlN5eEZRVUZCTVVZc1UwRkJVM2RJTEZOQlFWTTVTeXhUUVVOMFFqZHZSQ3hMUVVGTGNYbEZMR2RDUVVGblFtcFBMRVZCUVV0MFR5eGxRVU14UWl4TlFVTkVMRkZCUTBOc2VFUXNVVUZCVVVNc1RVRkJUU3gzUWtGQmVVSjFMMFFzUlVGQlMzUlJMR2xDUVV0MlF5eFpRVUZCY1dVc1pVRkJVaXhUUVVGMVFuWnRRaXhIUVVOMFFqVnlSQ3hMUVVGTE1uaEZMR2xDUVVGclFpeEZRVU4yUWpONFJTeExRVUZMY3k5RUxFdEJRVXM1V0N4VlFVRlZPSEZDTEVWQlFXVXhiVUlzUlVGQlVUaEpMR1ZCUVdkQ0xFMUJSM0JFTEZsQlFVRXdaQ3hsUVVGU0xGTkJRWFZDZG1oQ0xFZEJRM1JDTEVsQlFVMHdhRUlzUlVGQlV5eFpRVUZOUXl4eFFrRkJiMElzVlVGQlF6Tm9RaXhGUVVGSmQwVXNiMEpCUXpsRExFZEJRVXRyWkN4RlFVRk1MRU5CUjBFc1NVRkJUVVVzUlVGQlVTeEpRVUZKZG10RExGbEJRVmx4YTBNc1JVRkJUMjU2UlN4UFFVRlRMRWRCUXpsRExFbEJRVWswZFVRc1UwRkJVM2xyUWl4RlFVRlBMRVZCUVVjc1IwRkJSM2hwUWl4VlFVRlZMRVZCUVVkemFVSXNSVUZCVDI1NlJTeFJRVUZSTEVkQlEzUkVMRWxCUVVrNGNrTXNWMEZCVjNWdVF5eEZRVUZQTEVkQlFVYzNLMFFzU1VGQlNUSXJSQ3hIUVVNM1FuWjVSU3hMUVVGTGN5OUVMRXRCUVVzMVdDeFJRVUZSTEVsQlFVbDRZeXhYUVVGWGRXNURMRTFCUnpGQ0xGbEJRVUZLTEdkQ1FVRlNMRk5CUVhkQ2RIQkNMRWRCUTNaQ0wyOUVMRXRCUVVzMGVFVXNhMEpCUVcxQ0xFVkJRM2hDTEVsQlEwbGpMRVZCUVZsMmFVSXNSVUZFVm5aRkxFVkJRVlV3YlVJc1JVRkJaWFp3UWl4RlFVRlRNa3dzWlVGRmJFTTFkRVFzUlVGQlUybHBSQ3hGUVVGVGJVNHNXVUZEY0VKd2RrUXNSMEZEU0RSeVJTeEZRVUZoTlhKRkxFVkJRVTg0Y1VRc1ZVRkRjRUo2UWl4RlFVRm5Rbkp3UkN4RlFVRlBLM0ZFTEdGQlEzWkNha2NzUlVGQlVXZzBReXhKUVVGSkxHTkJRV1VzUjBGQlJ6bE5MRVZCUVU4NGNVUXNaMEpCUTJaRUxFbEJRV3hDZUVJc1IwRkRTSFpGTEVWQlFWRm9ORU1zU1VGQlNTeGxRVUZuUWpsTkxFVkJRVThyY1VRc1owSkJSM0JETm1kQ0xFVkJRV0VzUlVGRFlqbHRRaXhGUVVGUmFEUkRMRWxCUVVrc1kwRkJaU3hMUVVNelFuVTRReXhGUVVGblFpeEpRVWRxUWl4SlFVRk5kMmxDTEVWQmFVTlNMRk5CUVhkQ0wyMUNMRWRCUTNaQ0xFbEJRVWxuYmtJc1JVRkJWeXhIUVVsbUxFOUJTRUZvYmtJc1JVRkJVVzQxUXl4VFFVRlJMRk5CUVVOd1ZTeEZRVUZMTkdoRUxFZEJRM0pDTW5sQ0xFZEJRV1YyTUVVc1JVRkJSeXhMUVVGTE5HaEVMRVZCUVU5Nk5VTXNTMEZCU3l4TlFVRkxMRlZCUld4RGNXNUVMRVZCUVZrcmEwSXNSMEYwUTBWRExFTkJRV1ZxYmtJc1IwRkROMEkyYlVJc1JVRkJVU3hKUVVGSmRtdERMRmxCUVZsNWEwTXNSVUZCV1haNlJTeFBRVUZUTEVkQlEyNUVMRWxCUVVrMGRVUXNVMEZCVTNsclFpeEZRVUZQTEVWQlFVY3NSMEZCUjBzc1UwRkJVeXhGUVVGSExFdEJRM1JETEVsQlFVazVhMElzVTBGQlUzbHJRaXhGUVVGUExFVkJRVWNzUjBGQlIzaHBRaXhWUVVGVkxFVkJRVWN3YVVJc1JVRkJXWFo2UlN4UlFVRlJMRWRCUXpORUxFbEJRVWs0Y2tNc1YwRkJWM1Z1UXl4RlFVRlBMRWRCUVVjM0swUXNTVUZCU1NzclJDeEhRVU0zUWpONVJTeExRVUZMY3k5RUxFdEJRVXMxV0N4UlFVRlJMRWxCUVVsNFl5eFhRVUZYZFc1RExFbEJRMlFzU1VGQlprTXNSVUZKU2pGNVJTeExRVUZMSzNoRkxHMUNRVUZ0UWl4SlFVRkpOWFpGTEUxQlFVMHNVVUZCVVhWM1JTeEZRVUZWTEZsQlFWbDJhVUlzU1VGSUwwUnVkMFFzUzBGQlN5dDRSU3h6UWtGTFVpeEZRWGhLUVN4RFFVRnJReXhGUVVGQlowSXNXVUV5U214RExGTkJRV2RDYkd4Q0xFVkJRVmszYWtNc1IwRkZNMElzU1VGRVFTeEpRVmM0UW1kd1JDeEZRVVZJYms0c1JVRmlja0p2VGl4RlFVRlZMRWxCUVVrdmJrTXNWMEZCVjJ4b1FpeEZRVUZOTlhGQ0xGRkJRelZDZEVNc1JVRkJTU3hGUVVGSFFTeEpRVUZOYTNSQ0xFVkJRVTAxY1VJc1UwRkJWWFJETEVWQlFVY3NRMEZEZUVNc1NVRkJUVzh5UlN4RlFVRlhiSEJFTEVWQlFVMTBUU3hYUVVGWE5XZENMRWRCUTJ4RExFdEJVWFZFTEV0QlFURkNhekpGTEVWQlJVaHVUaXhGUVZaR2NVNHNTVUZSSzBNc1MwRkJWRVlzUjBGQmVVSXNTMEZCVkVFc1IwRkhla051VGl4SFFVRlBMRWxCUVZGQkxFZEJRVThzUzBGV01VUXNUVUZCVFN4SlFVRkpNV3BGTEUxQlFVMHNiVU5CUldwQ09IZEZMRVZCUVZGdU1rVXNSMEZCUzI4eVJTeEZRVVZrTEU5QlFVOUVMRVZCY0V0TExFVkJRVUY2VHl4bFFUSktZaXhuUWtFeVFrRXNTVUZCVFhOT0xFVkJRVzFDTEZOQlFVTnFiVUlzUjBGRGVrSXNSMEZCUzBFc1JVRkJUQ3hEUVVkQkxFbEJRVTB3YlVJc1JVRkJVeXhKUVVGSkxFVkJRVUZ3YzBJc1UwRkRZamhhTEVWQlFVdHpVeXhGUVVGUE0ySXNWMEZOYkVJc1IwRk1RUzlMTEVWQlFWTndOVU1zVTBGQlVTeFRRVUZEY0ZVc1JVRkJTelJvUkN4SFFVTjBRaXhKUVVGTmEzcENMRVZCUVZVc1NVRkJTU3hGUVVGQmJtZENMRkZCUTNCQ2JXZENMRVZCUVZFeFl5eGpRVUZqZUZjc1IwRkRkRUpuWjBJc1JVRkJSM0p6UkN4SlFVRkpkbFlzUlVGQlN6Z3dSU3hOUVVWNVFpeEpRVUZzUTFvc1JVRkJUek5pTEZkQlFWZG9XQ3haUVVkMFFpeFBRVUZQTW5sQ0xFbEJSMFpFTEVWQlFXbENMRk5CUVVONmJVSXNSMEZEZGtJc1NVRkJUVEJ0UWl4RlFVRlRMRWxCUVVrc1JVRkJRV3hxUWl4TFFVRkxiRW9zVTBGTmVFSXNUMEZNU1RCR0xFZEJRMGhCTEVWQlFWTXJTeXhYUVVGWGJtdEVMRk5CUVZFc1UwRkJRekpuUlN4RlFVRlpMekJGTEVkQlEzaERMRTlCUVVGck1FVXNSVUZCVDNodlFpeFBRVUZQTVhKRUxFVkJRVXNyTUVVc1JVRkJUVFZqTEc5Q1FVZHdRaXRpTEVrc2EwZERiRTVTTEVsQlJVRXNZVUZUUXl4WFFVRlplR1VzUlVGQlowSXlaQ3hGUVVFNFFuQlRMRWRCVEd4RUxFdEJRVUUxV1N4UlFVRnJRaXhGUVVOVUxFdEJRVUV5YzBJc1ZVRkJLMElzUjBGRGVFTXNTMEZCUVVNc1kwRkJaMElzUlVGSmRrSjBla1VzUzBGQlN5dDZSQ3hQUVVGVFFTeEZRVU5rTDNwRUxFdEJRVXN3ZUVVc1QwRkJVMEVzUlVGRFpERjRSU3hMUVVGTGN5OUVMRXRCUVU5QkxFVkJOa05rTEU5Qk1VTlJMRmxCUVVFM1ZpeFBRVUZRTEZkQlEwdDZjRVFzUzBGQlMzTXZSQ3hMUVVGTE1YRkVMRTlCUTJKb1VTeFJRVUZSWjFFc1RVRkJUU3hYUVVsT0xGbEJRVUZ0T1VRc2JVSkJRVllzVTBGQk5rSnVVU3hIUVVONFFqVm9SU3hMUVVGTE1HMUVMRk5CUjFReGJVUXNTMEZCU3pCdFJDeFJRVUZUTEVWQlEyUXhiVVFzUzBGQlN6Um9SU3hKUVVGTlFTeEZRVU5ZTldoRkxFdEJRVXQ1Y0VRc1UwRkRUSHB3UkN4TFFVRkxNSGhGTEU5QlFVOHhlRVVzUzBGQlN5dDZSQ3hQUVVGUFRDeFRRVVY0UWpGNlJDeExRVUZMY3k5RUxFdEJRVXN4V0N4TlFVRk5OVzVFTEV0QlFVczBhRVVzVDBGSFdpeFpRVUZCTkZFc2NVSkJRVllzVTBGQkswSXphRUlzUjBGRE9VSXNTVUZCVFhveVFpeEZRVUZQZVRKQ0xFVkJRVWwzUXl4bFFVTnFRaXhIUVVGSmFqVkNMRVZCUVV0b04wSXNUMEZCVTFrc1MwRkJTM042UlN4alFYSkRTaXhIUVVGTExFZEJlVU4yUWl4UFFVaEJkSHBGTEV0QlFVdHhla1VzVlVGQlZXb3dSU3hQUVVGVExFVkJRM2hDV1N4TFFVRkxjM3BGTEdOQlFXZENMRTlCUTNKQ01YVkZMRkZCUVZGRExFMUJRVTBzY1VSQlMyWXNSMEZHUVRkRkxFdEJRVXR4ZWtVc1ZVRkJWVzV4UlN4TFFVRkxhM2hDTEVkQlEzQkNjRFpDTEV0QlFVdHpla1VzWlVGQmFVSnNOVU1zUlVGQlMyZzNRaXhQUVVOMlFubDRSQ3hGUVVGSmVVTXNVMEZCVlN4RFFVZHFRaXhKUVVaQkxFbEJRVTBzUlVGQlR5eEpRVUZKY0c5Q0xGZEJRVmRzY2tNc1MwRkJTM042UlN4bFFVTTNRblpzUWl4RlFVRlhMRVZCUTA1cWVFUXNSVUZCU1N4RlFVRkhRU3hGUVVGSmEwUXNTMEZCUzNGNlJTeFZRVUZWYWpCRkxFOUJRVkYwUXl4SlFVRkxMRU5CUXk5RExFbEJRVTE1TWtVc1JVRkJZM1o2UlN4TFFVRkxjWHBGTEZWQlFWVjJNa1VzUjBGRGJrTXNSVUZCU3poWExFbEJRVWt5TDBRc1JVRkJZWGhzUWl4SFFVTjBRa0VzUjBGQldYZHNRaXhGUVVGWmJqQkZMRTlCU1hwQ0xFOUJSa0ZaTEV0QlFVdHhla1VzVlVGQlZXb3dSU3hQUVVGVExFVkJRM2hDV1N4TFFVRkxjM3BGTEdOQlFXZENMRVZCUTJRc1NVRkpWaXhGUVhwRVFTeEhRVUZoTEVWQlFVRlFMR01zWjBKRFQySXNTVUZEU1dwNVJTeEZRVVJQTEVWQlFWRXNSMEZGWm1Zc1JVRkJWU3hYUVVOYUxFOUJRVWxETEV0QlFXVkJMRXRCUTBjc2IwSkJRVmgwUkN4UFFVRnBRMEVzV1VGRGRFSXNTVUZCV0hGRUxFVkJRV2xEUVN4RlFVTjRRaXh2UWtGQlZHZENMRXRCUVN0Q1FTeExRVU51UTJkSkxGTkJRVk1zWTBGQlZFRXNTVUZEVURsTUxFdEJRVXNzVFVGRlVEWkVMRVZCUVVzMFNpeGhRVUZoTEhkQ1FVRjVRaXhMUVVGTk0wc3NSMEZKYWtSemQwUXNUVUZCVFVNc1QwRkJUME1zU1VGQlNYQkpMRXRCUVU4c1EwRkRkRUpETEVkQlFVa3NSVUZEU205eVFpeFZRVUZYTEVWQlExZ3hVaXhSUVVGVExFVkJRMVF5VWl4cFFrRkJhMElzUlVGRGJFSkRMR3RDUVVGdFFpeEZRVU51UWtNc1ZVRkJWeXhGUVVOWVF5eGxRVUZuUWl4RlFVTm9Ra01zYTBKQlFXMUNMRVZCUTI1Q1F5eG5Ra0ZCYVVJc1IwRkRha0pETEcxQ1FVRnZRaXhGUVVOd1FrTXNiMEpCUVhGQ0xFVkJRM0pDUXl4UlFVRlRMRWRCUTFSRExHRkJRV01zUjBGRFpFTXNZMEZCWlN4SFFVTm1ReXhUUVVGVkxFZEJRMVpETEZsQlFXRXNSMEZEWWtNc1ZVRkJWeXhKUVVkaWVIcEZMRVZCUVV0MFF5eFBRVUZQTWxZc1QwRkJUemRZTEVWQlFWTXJla1FzVFVGQlRVTXNUMEZCVDBNc1RTeG5Ra05zUTNwRExFbEJRVWxvTlVNc1JVRkJUeXhGUVVGUkxFZEJRMlo2Vnl4RlFVRlBlVmNzUlVGRFVIaFlMRVZCUVZVc1YwRkRXaXhQUVVGSlF5eExRVUZsUVN4TFFVTkhMRzlDUVVGWWRFUXNUMEZCYVVOQkxGbEJRM1JDTEVsQlFWaHhSQ3hGUVVGcFEwRXNSVUZEZUVJc2IwSkJRVlJuUWl4TFFVRXJRa0VzUzBGRGJrTm5TU3hUUVVGVExHTkJRVlJCTEVsQlExQTVUQ3hMUVVGTExFMUJSVkEyUkN4RlFVRkxORW9zWVVGQllTeHhRMEZCYzBNc1MwRkJUVE5MTEVkQlF6bEVaU3hGUVVGTE5Fb3NZVUZCWVN4M1FrRkJlVUlzUzBGQlRUTkxMRWRCUTJwRVpTeEZRVUZMTkVvc1lVRkJZU3cwUWtGQk5rSXNTMEZCVFROTExFZEJRM0pFWlN4RlFVRkxORW9zWVVGQllTeDNRMEZCZVVNc1MwRkJUVE5MTEVkQlYycEZjM2RFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJUeXhUUVVGVE9XcENMRWRCUXk5Q2JEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhTaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV2xqTEV0QlFVczNha0lzWjBKQlFXbENMRTlCUlhoR05YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCVFdnNVJDeEZRVUZMTkhCRExGTkJRM1JEY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphV01zUzBGQlMybzVSQ3haUVVGakxIbENRVmwwUXlzMFF5eE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVnl4VFFVRlRMMGdzUjBGRGJrTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVWdzWjBKQlFXbENUQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6bEdMR1ZCUlhSSU5YaEVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZWYW1oRUxFVkJRVXMwY0VNc1UwRkRNVU55WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZOc2FFUXNXVUZCWXl3MlFrRlpNVU1yTkVNc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYjBJc1UwRkJVeTlxUWl4SFFVTTFRMncxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmEyTXNhMEpCUVcxQ2FqbEVMRVZCUVVzMGNFTXNVMEZEYmtSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEpzT1VRc1dVRkJZeXh6UTBGUmJrUXJORU1zVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxwWXl4TFFVRkxOMnBDTEdkQ1FVRnJRaXhEUVVGRExFZEJTWEpEYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxwWXl4TFFVRkxOekZGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRiRVFzVDBGQlQwNHNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE1UTkVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoTjBSeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE1UTkVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGVrUXNTVUZCVDBNc1JVRkJUU3hEUVVOWU1tcENMRlZCUVZkc09VUXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVazJha0lzWlVGRGVrTnlhMElzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTXpOME1zVTBGQlZTdDZReXhIUVVOd1F5dHFRaXcyUWtGQk9FSndPVVFzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SFFVRkhMRWxCVFdoR0xFOUJTRWxFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphV01zUzBGQlMyNHdRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMnBFTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxwWXl4TFFVTXZRaXhQUVVGUGJHdENMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphV01zUzBGQlMyeHFRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmRvUlRoRkxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCUzJ4cVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTJoRkxFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVU5xUTJwT0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTnVTQ3cyUWtGRGJrUlNMRVZCUVVrcmFrSXNVMEZCVXpjeVJTeEhRVU5pTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKWjJ0Q0xHZERRVUZuUXpreVJTeEhRVU53UXl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCU3pjeFJTeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTm9SQ3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmFXTXNTMEZCU3pkcFFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU0zUTBFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYVdNc1MwRkJTemRwUWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUTJoRkxFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4SFFVTlNjbmxFTEVWQlFVbHBWQ3hGUVVGUmJXbEZMR2RDUVVOT2RERkZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1Vjc01FSkJSemxDY0hsRUxFVkJRVWxwVkN4RlFVRlJkV2xGTEc5RFFVVldjbXBDTEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1NVRlZUaXQzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1dsakxFdEJRVXMzTVVVc1ZVRkJWV2N5UlN4aFFVRmxMRmRCUXpkRExFOUJRMFZ1T1VRc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWVXNTVUZSTVVWdVNTeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNXbGpMRXRCUVVzM01VVXNWVUZCVlhFeVJTeGhRVUZsTEZOQlFWTm9NMFVzUjBGRGRFUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRVZCUVVkcVF5eEpRVk4yUkhONVJDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNXbGpMRXRCUVVzM01VVXNWVUZCVldzeVJTeFRRVUZYTEZOQlFWTTNhVUlzUlVGQlYwTXNSMEZETjBRc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJWWGhITEVsQlVTOUdNMElzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxwWXl4TFFVRkxOekZGTEZWQlFWVnpNa1VzWlVGQmFVSXNWMEZETDBNc1QwRkJUMmd4UlN4TFFVRkxLekJGTEdGQlFXRXNTMEZSTTBJeGEwSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHBZeXhMUVVGTE56RkZMRlZCUVZWdk1rVXNaME5CUVd0RExGZEJRMmhGTEU5QlFTdENkamxFTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFZEJRVWNzU1VGUmJFWnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxwWXl4TFFVRkxOekZGTEZWQlFWVnRNa1VzWjBOQlFXdERMRk5CUVZNNU1rVXNSMEZEZWtVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVXdEVMSE5DUVVGelFuSnJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWVnlSSE41UkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemxJTEdkQ1FVRnJRaXhEUVVGRExFbEJWVGREVEN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemxHTEdGQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEpRVXR5UkhKRExFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUZVdNc1dVRkJZeXhEUVVOMFEwTXNaMEpCUVdsQ0xFVkJRMnBDUXl4SlFVRkxMRVZCUTB4RExFbEJRVXNzUlVGRFRFTXNTMEZCVFN4RlFVTk9ReXhQUVVGUkxFVkJRMUpETEUxQlFVOHNSVUZEVUVNc1QwRkJVU3hIUVUxV2JteENMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZVck1rVXNaVUZCYVVJc1YwRkRia1FzVDBGQk5FUnNLMFFzUlVGQlN6UndReXhSUVVGUmMwSXNhVUpCUVdsQ2VtbEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNVJpeGhRVUZoTEV0QlMzSkpiamRETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVOMFJDeFBRVUZQVGl4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVek0zUXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXcEZjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRNemRETEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkROMFFzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXRFJyUWl4VFFVRlZiaXRFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFtbE9MRVZCUVVzc1JVRkJSeXhKUVVOdVJHeDZSQ3hKUVVGTE5Gb3NSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFbEJRemxET0d0Q0xFbEJRVXR3SzBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlF6bERLMnRDTEV0QlFVMXlLMFFzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4RlFVRkhMRWxCUXk5RFoyeENMRlZCUVZkMEswUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFbEJRM0JFYVd4Q0xFMUJRVTkySzBRc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNhVTRzUlVGQlN5eEZRVUZITEVsQlEyaEVhMnhDTEZGQlFWTjZNa1VzUlVGQlNYVjRSQ3hGUVVGSmJXeENMR05CUVdkQ00yeENMRTFCUVUxRExFOUJRVTluU1N4SlFVRkphMk1zYTBKQlFXdENNek5FTEZOQlFWTXJla01zUlVGQmFVSjBlRVFzUjBGRE9VWjVjMFFzUzBGQlRYZ3dReXhGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBKcFRpeEZRVUZMTEVWQlFVY3NTVUZETDBOdmJFSXNZVUZCWXpFclJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRWRCUVVrc1NVRkRlRVJ4YkVJc2RVSkJRWGRDTXl0RUxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmMyeENMRFJDUVVOMFJEbHNRaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6TTNReXhUUVVGVkszcERMRWxCVFhSRExFOUJTRWxCTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVGNGa3NhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnlSQ3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVNdlFpeFBRVUZQYmtrc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk51U0N3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkd1JUaEZMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVGJrZ3NORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOd1JTeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsMWJFSXNXVUZCV1hJMFJTeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1hkc1FpeFBRVUZQZERSRkxFZEJRMWdzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWw1YkVJc1QwRkJUM1kwUlN4SFFVTllMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNR3hDTEZGQlFWRjRORVVzUjBGRFdpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUSnNRaXhWUVVGVmVqUkZMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrMGJFSXNVMEZCVXpFMFJTeEhRVU5pTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZEYWtOcWNFSXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUW01cVFpdzJRa0ZETlVSU0xFVkJRVWsyYkVJc1ZVRkJWVE0wUlN4SFFVTmtMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpPR3hDTEZGQlFWRTFORVVzUjBGRFdpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNTdHNRaXhuUWtGQlowSTNORVVzUjBGRGNFSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGRGFrTnFUaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUYmtnc05rSkJRMjVFVWl4RlFVRkpaMjFDTEhOQ1FVRnpRamswUlN4SFFVTXhRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVjVhRVFzWjBKQlFXdENMRmRCUTNCRUxFbEJRVWx6VWl4RlFVRlRMRWxCUVVsc05rTXNSVUZCUzJ0b1F5eGhRVVYwUWl4UFFVUkJORmdzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVSeXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVOcVJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1Vjc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOd1JTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1IwRkRVbko1UkN4RlFVRkphVlFzUlVGQlVYVnJSU3hsUVVOT01UTkZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVDJwaExGbEJRMHdzUlVGRFFXdzBReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFVkJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVGSmFWUXNSVUZCVVhscVJTeGpRVVZXZG10Q0xFVkJRVTh6Vnl4aFFVTk1MRVZCUTBGNE4wTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNXdGpMR3RDUVVGclFqbHBRaXd3UWtGSGRrTndlVVFzUlVGQlNXbFVMRVZCUVZGM2EwVXNWMEZEVGpNelJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVhsclJTeHRRa0ZEVGpVelJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQycGhMRmxCUTB3c1IwRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVRScVJTdzJRa0ZEVGk4eVJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFZEJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemxITERCQ1FWVm9RM0pDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnZORVVzV1VGQll5eFhRVU5vUkN4UFFVRTRRbll2UkN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEV0QlVURkZjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVXdNMFVzV1VGQll5eFRRVUZUY2pSRkxFZEJRM3BFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZGdFJDeHhRa0ZCY1VKMGEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmNFUnplVVFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZYVTBSU3hQUVVGVExGZEJRek5ETEU5QlFUaENNUzlFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUSXpSU3hQUVVGVExGTkJRVk4wTkVVc1IwRkRjRVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYaEdjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVjNORVVzVTBGQlZ5eFhRVU0zUXl4UFFVRlBNeTlFTEVWQlFVczBjRU1zVVVGQlVYZEVMR05CUVdNemEwUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVVlzWVVGQllTeFJRVUZKWml4SlFWRjRSblJDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVjVORVVzVDBGQlV5eFhRVU16UXl4UFFVRjVReXhOUVVGc1F6VXZSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUQTBSU3hQUVVGVExGZEJRek5ETEU5QlFUaENOeTlFTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUUXpSU3hQUVVGVExGTkJRVk4yTkVVc1IwRkRjRVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYaEdjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVXlORVVzVTBGQlZ5eFhRVU0zUXl4UFFVRlBPUzlFTEVWQlFVczBjRU1zVVVGQlVYZEVMR05CUVdNemEwUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVVlzWVVGQllTeFJRVUZKWml4SlFWRjRSblJDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVTBORVVzVDBGQlV5eFhRVU16UXl4UFFVRjVReXhOUVVGc1F5OHZSQ3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUWTBSU3hSUVVGVkxGZEJRelZETEU5QlFUaENhR2RGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUWXpSU3hSUVVGVkxGTkJRVk40TkVVc1IwRkRja1FzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYaEdjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVTRORVVzVlVGQldTeFhRVU01UXl4UFFVRlBhbWRGTEVWQlFVczBjRU1zVVVGQlVYZEVMR05CUVdNemEwUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVVlzWVVGQllTeFJRVUZKWml4SlFWRjRSblJDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVXJORVVzVVVGQlZTeFhRVU0xUXl4UFFVRjVReXhOUVVGc1EyeG5SU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZXYzFSU3hWUVVGWkxGZEJRemxETEU5QlFUaENibWRGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZUZ3pSU3hWUVVGWkxGTkJRVk42TkVVc1IwRkRka1FzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYaEdjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnBOVVVzV1VGQll5eFhRVU5vUkN4UFFVRlBjR2RGTEVWQlFVczBjRU1zVVVGQlVYZEVMR05CUVdNemEwUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVVlzWVVGQllTeFJRVUZKWml4SlFWRjRSblJDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnJOVVVzVlVGQldTeFhRVU01UXl4UFFVRjVReXhOUVVGc1EzSm5SU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZXMDFSU3hUUVVGWExGZEJRemRETEU5QlFUaENkR2RGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZTc3pSU3hUUVVGWExGTkJRVk14TkVVc1IwRkRkRVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVhkRUxHTkJRV016YTBRc1MwRkJUU3hGUVVGSGNYZEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9VWXNZVUZCWVN4SFFVRkpNekJFTEVsQlVYaEdjM2xFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnZOVVVzVjBGQllTeFhRVU12UXl4UFFVRlBkbWRGTEVWQlFVczBjRU1zVVVGQlVYZEVMR05CUVdNemEwUXNTMEZCVFN4RlFVRkhjWGRFTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVVlzWVVGQllTeFJRVUZKWml4SlFWRjRSblJDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlRPVFZFTEZWQlFWVnhOVVVzVTBGQlZ5eFhRVU0zUXl4UFFVRjVReXhOUVVGc1EzaG5SU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZYTXpSU3hWUVVGWkxGZEJRemxETEU5QlEwVjZLMFFzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHJZeXhyUWtGQmJVSXNTVUZSTTBWdWEwSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVldjMFJTeFZRVUZaTEZOQlFWTXpORVVzUjBGRGRrUXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVFpFTEhGQ1FVRnhRbWhzUkN4TFFVRk5MRVZCUVVkeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNVJpeGhRVUZoTEVkQlFVa3pNRVFzU1VGUkwwWnplVVFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxGTEZOQlFWTTVOVVFzVlVGQlZYTTFSU3haUVVGakxGZEJRMmhFTEU5QlFVOW9ORVVzUzBGQlN6QXlSU3hsUVVGVkwydENMRWxCVVhoQ2RFSXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVlhVMVJTeFZRVUZaTEZkQlF6bERMRTlCUVhsRExFMUJRV3hETVdkRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVXprMVJDeFZRVUZWY1RSRkxGRkJRVlVzVjBGRE5VTXNUMEZCT0VKNEwwUXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBaMGtzU1VGQlNVVXNVMEZCVXprMVJDeFZRVUZWYVRSRkxGRkJRVlVzVTBGQlV6VTBSU3hIUVVOeVJDeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJVWEJFYzNsRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSlJTeFRRVUZUT1RWRUxGVkJRVlZ6TkVVc1owSkJRV3RDTEZkQlEzQkVMRTlCUVRoQ2VpOUVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVkQlFVa3NTMEZSTTBWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZNNU5VUXNWVUZCVldzMFJTeG5Ra0ZCYTBJc1UwRkJVemMwUlN4SFFVTTNSQ3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSYlVRc2NVSkJRWEZDZEd0RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhKRWMzbEVMRTFCUVUxRExFOUJRVTluU1N4SlFVRkpSU3hUUVVGVE9UVkVMRlZCUVZWNU0wVXNNRUpCUVRSQ0xGZEJRemxFTEU5QlEwVTFLMFFzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbEZMRk5CUVZVc1MwRlJNVVZ1U1N4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1VVc1UwRkJVemsxUkN4VlFVRlZkelZGTERCQ1FVRTBRaXhUUVVGVGJqWkZMRWRCUTNaRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRSQ3gzUWtGQmQwSnFiRVFzUzBGQlRTeEhRVUZKYWtNc1NVRlRlRVJ6ZVVRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVsRkxGTkJRVk01TlVRc1ZVRkJWVzAwUlN4elFrRkJkMElzVTBGQlV6bHJRaXhGUVVGWFF5eEhRVU01UlN4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFZEJRVWtyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKUlN4VFFVRlZlRWNzU1VGUmFFY3pRaXhOUVVGTlF5eFBRVUZQWjBrc1NVRkJTVVVzVTBGQlV6azFSQ3hWUVVGVmVUVkZMRFJDUVVFNFFpeFhRVU5vUlN4UFFVRlBialJGTEV0QlFVdHJORVVzTUVKQlFUQkNMRXRCVDNCRE0yZEZMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYTBJNU1VVXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNdlJDeFBRVUZQVGl4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUWpNelJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVEZGY1hkRUxFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmEyTXNhMEpCUVd0Q016TkVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRGRFVXNTVUZCVDBNc1JVRkJUU3hEUVVOWWMyNUNMRXRCUVUwM1owVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFbEJReTlEY0doRUxFdEJRVTA0U0N4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzUzBGTmFrUXNUMEZJU1VRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEp3TUVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNNVJDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOW5TU3hKUVVGSmEyTXNhMEpCUXk5Q0xFOUJRVTl1YTBJc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYTBKdWFrSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhOMFU0UlN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUW01cVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXpkRkxFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1hkdVFpeFJRVUZSZERaRkxFZEJRMW9zVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWw1YmtJc1VVRkJVWFkyUlN4SFFVTmFMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVTXNUMEZCVDJkSkxFbEJRVWxyWXl4clFrRkJhMEk1TVVVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE4wUXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUWpscFFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU14UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU5blNTeEpRVUZKYTJNc2EwSkJRV3RDT1dsQ0xIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE4wVXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRm5iVVVzVjBGRFRtNDFSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVXbHRSU3hYUVVOT2NEVkZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFbEJWVTRyZDBRc1RVRkJUVU1zVDBGQlQyZEpMRWxCUVVscll5eHJRa0ZCYTBJNU1VVXNWVUZCVlRZMVJTeFJRVUZWTEZkQlEzSkVMRTlCUVRoQ2FHaEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUMmRKTEVsQlFVbHJZeXhyUWtGQmEwSTVNVVVzVlVGQlZUSTFSU3hSUVVGVkxGTkJRVk4wTmtVc1IwRkRPVVFzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVcxRUxIRkNRVUZ4UW5SclJDeExRVUZOTEVWQlFVZHFReXhKUVZGd1JITjVSQ3hOUVVGTlF5eFBRVUZQWjBrc1NVRkJTV3RqTEd0Q1FVRnJRamt4UlN4VlFVRlZPRFZGTEZGQlFWVXNWMEZEY2tRc1QwRkJPRUpxYUVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUFowa3NTVUZCU1d0akxHdENRVUZyUWpreFJTeFZRVUZWTkRWRkxGRkJRVlVzVTBGQlUzWTJSU3hIUVVNNVJDeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJiVVFzY1VKQlFYRkNkR3RFTEV0QlFVMHNSVUZCUjJwRExFbEJTWEJFSzBNc1JVRkJTM1JETEU5QlFVOHlWaXhQUVVGUE4xZ3NSVUZCVXl0NlJDeE5RVUZOUXl4UFFVRlBaMGtzVFN4blFrTjBLMEo2UXl4SlFVRkpMMmRFTEVWQlFVOHNSVUZCVVN4SFFVTm1lbGNzUlVGQlQzbFhMRVZCUTFCNFdDeEZRVUZUWjBvc1UwRkJVeXhqUVVGVVFTeEhRVVZpYWtrc1JVRkJTelJLTEdGQlFXRXNkME5CUVhsRExFdEJRVTB6U3l4SFFVTnFSV1VzUlVGQlN6UktMR0ZCUVdFc2RVUkJRWGRFTEV0QlFVMHpTeXhIUVVOb1JtVXNSVUZCU3pSS0xHRkJRV0VzYzBSQlFYVkVMRXRCUVUwelN5eEhRVU12UldVc1JVRkJTelJLTEdGQlFXRXNORU5CUVRaRExFdEJRVTB6U3l4SFFVTnlSV1VzUlVGQlN6UktMR0ZCUVdFc09FUkJRU3RFTEV0QlFVMHpTeXhIUVVOMlJtVXNSVUZCU3pSS0xHRkJRV0VzYjBOQlFYRkRMRXRCUVUwelN5eEhRVU0zUkdVc1JVRkJTelJLTEdGQlFXRXNhVVJCUVd0RUxFdEJRVTB6U3l4SFFVTXhSV1VzUlVGQlN6UktMR0ZCUVdFc2VVTkJRVEJETEV0QlFVMHpTeXhIUVVOc1JXVXNSVUZCU3pSS0xHRkJRV0VzT0VOQlFTdERMRXRCUVUwelN5eEhRVU4yUldVc1JVRkJTelJLTEdGQlFXRXNOa05CUVRoRExFdEJRVTB6U3l4SFFVTjBSV1VzUlVGQlN6UktMR0ZCUVdFc2JVUkJRVzlFTEV0QlFVMHpTeXhIUVVNMVJXVXNSVUZCU3pSS0xHRkJRV0VzYTBSQlFXMUVMRXRCUVUwelN5eEhRVU16UldVc1JVRkJTelJLTEdGQlFXRXNjVU5CUVhORExFdEJRVTB6U3l4SFFVTTVSR1VzUlVGQlN6UktMR0ZCUVdFc01rTkJRVFJETEV0QlFVMHpTeXhIUVVOd1JXVXNSVUZCU3pSS0xHRkJRV0VzTkVOQlFUWkRMRXRCUVUwelN5eEhRVU55UldVc1JVRkJTelJLTEdGQlFXRXNORU5CUVRaRExFdEJRVTB6U3l4SFFVTnlSV1VzUlVGQlN6UktMR0ZCUVdFc01FTkJRVEpETEV0QlFVMHpTeXhIUVVOdVJXVXNSVUZCU3pSS0xHRkJRV0VzYjBOQlFYRkRMRXRCUVUwelN5eEhRVU0zUkdVc1JVRkJTelJLTEdGQlFXRXNhVVJCUVd0RUxFdEJRVTB6U3l4SFFVTXhSV1VzUlVGQlN6UktMR0ZCUVdFc01FTkJRVEpETEV0QlFVMHpTeXhIUVVOdVJXVXNSVUZCU3pSS0xHRkJRV0VzY1VSQlFYTkVMRXRCUVUwelN5eEhRVU01UldVc1JVRkJTelJLTEdGQlFXRXNkVU5CUVhkRExFdEJRVTB6U3l4SFFVTm9SV1VzUlVGQlN6UktMR0ZCUVdFc09FTkJRU3RETEV0QlFVMHpTeXhIUVVOMlJXVXNSVUZCU3pSS0xHRkJRV0VzYzBOQlFYVkRMRXRCUVUwelN5eEhRVU12UkdVc1JVRkJTelJLTEdGQlFXRXNkVVJCUVhkRUxFdEJRVTB6U3l4SFFVTm9SbVVzUlVGQlN6UktMR0ZCUVdFc05rTkJRVGhETEV0QlFVMHpTeXhIUVVOMFJXVXNSVUZCU3pSS0xHRkJRV0VzY1VOQlFYTkRMRXRCUVUwelN5eEhRVU01UkdVc1JVRkJTelJLTEdGQlFXRXNLME5CUVdkRUxFdEJRVTB6U3l4SFFVTjRSV1VzUlVGQlN6UktMR0ZCUVdFc2RVTkJRWGRETEV0QlFVMHpTeXhIUVVOb1JXVXNSVUZCU3pSS0xHRkJRV0VzZFVOQlFYZERMRXRCUVUwelN5eEhRVU5vUldVc1JVRkJTelJLTEdGQlFXRXNaMFJCUVdsRUxFdEJRVTB6U3l4SFFVTjZSV1VzUlVGQlN6UktMR0ZCUVdFc05FTkJRVFpETEV0QlFVMHpTeXhIUVVOeVJXVXNSVUZCU3pSS0xHRkJRV0VzY1VSQlFYTkVMRXRCUVUwelN5eEhRVmM1UlhOM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmIwSXNVMEZCVTJodlFpeEhRVU5xUkd3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFZEJRVWtzUlVGQlIwb3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNiVUlzYTBKQlFXdENMMjVDTEdkQ1FVRnBRaXhQUVVVeFJ6VjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmJVSnNhRVVzUlVGQlN6UndReXhUUVVONFJISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdFFpeHJRa0ZCYTBKdWFFVXNXVUZCWXl3eVEwRlplRVFyTkVNc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVhOQ0xGTkJRVk5xYjBJc1IwRkRia1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVkS0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtaHZRaXhuUWtGQmFVSXNUMEZGTlVjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVhGQ2JtaEZMRVZCUVVzMGNFTXNVMEZETVVSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDY0doRkxGbEJRV01zTmtOQldURkVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZyUWl4VFFVRlRiRzlDTEVkQlF5OURiRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUjBGQlNTeEZRVUZIU2l4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcWIwSXNaMEpCUVdsQ0xFOUJSWGhITlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZwUW5Cb1JTeEZRVUZMTkhCRExGTkJRM1JFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbkpvUlN4WlFVRmpMSGxEUVZsMFJDczBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXbENMRk5CUVZOdWIwSXNSMEZET1VSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXZENjbWhGTEVWQlFVczBjRU1zVTBGRGNrVnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1F5eGxRVUZsZEdoRkxGbEJRV01zZDBSQldYSkZLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJaMElzVTBGQlUzQnZRaXhIUVVNM1JHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSeXhMUVVGTkxFOUJSWFpFTTNaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJaWFJvUlN4RlFVRkxOSEJETEZOQlEzQkZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrVXNZMEZCWTNab1JTeFpRVUZqTEhWRVFWbHdSU3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCZDBJc1UwRkJVM0p2UWl4SFFVTnlSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVWQlFVY3NTVUZCUzBvc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMmJVSXNjMEpCUVhOQ2NHOUNMR2RDUVVGcFFpeFBRVVV2UnpWMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCZFVKMmFFVXNSVUZCU3pSd1F5eFRRVU0xUkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEo0YUVVc1dVRkJZeXdyUTBGbE5VUXJORU1zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRWE5DYm1kQ0xGZEJRV0VzUjBGbGVrUjBTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3WjBJc2FVSkJRVzFDTEVkQldTOUVja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWFZDTEZOQlFWTjBiMElzUjBGRGNFUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCYzBKNGFFVXNSVUZCU3pSd1F5eFRRVU16UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUo2YUVVc1dVRkJZeXc0UTBGWk0wUXJORU1zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWFZDTEZOQlFWTjJiMElzUjBGRGNFUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWNzUzBGQlRTeFBRVVYyUkROMlJDeEZRVUZMT0Vvc1UwRkJVM2xzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dFFpeHhRa0ZCYzBKNmFFVXNSVUZCU3pSd1F5eFRRVU16UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUl4YUVVc1dVRkJZeXc0UTBGWk0wUXJORU1zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRWE5DTEZOQlFWTjRiMElzUjBGRGJrUnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5adlFpeG5Ra0ZCYVVJc1QwRkZOVWMxZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRWEZDTVdoRkxFVkJRVXMwY0VNc1UwRkRNVVJ5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNNMmhGTEZsQlFXTXNOa05CV1RGRUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXOUNMRk5CUVZONmIwSXNSMEZEY2tWc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEhRVUZKTEVWQlFVY3NTMEZCVFN4UFFVVjJSRE4yUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEpETEd0Q1FVRnRRak5vUlN4RlFVRkxOSEJETEZOQlF6VkZjbWRFTEVWQlFVdGhMRkZCUVZWa0xGZEJTMnBDZDNaRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q05XaEZMRmxCUVdNc0swUkJXVFZGS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVFeVFpeFRRVUZUTVc5Q0xFZEJRM2hFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSExFdEJRVTBzVDBGRmRrUXpka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFUQkNOV2hGTEVWQlFVczBjRU1zVTBGREwwUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ04yaEZMRmxCUVdNc2EwUkJXUzlFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGNVFpeFRRVUZUTTI5Q0xFZEJRM1JFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSFNpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyMXVRaXgxUWtGQmRVSXhiMElzWjBKQlFXbENMRTlCUlM5SE5YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGM1FqZG9SU3hGUVVGTE5IQkRMRk5CUXpkRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpsb1JTeFpRVUZqTEdkRVFWazNSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCZDBJc1UwRkJVelZ2UWl4SFFVTnlSR3cxUXl4RlFVRkxOSEJETEZGQlFWRmhMRmRCUVZkb2FVUXNTMEZCVFhsM1JDeEZRVUZWTEVkQlFVa3NSVUZCUnl4TFFVRk5MRTlCUlhaRU0zWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGMVFqbG9SU3hGUVVGTE5IQkRMRk5CUXpWRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWk5b1JTeFpRVUZqTEN0RFFWazFSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZqTEZOQlFWTTNiMElzUjBGRE0wTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hGUVVGSExFbEJRVXRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxYjBJc1owSkJRV2xDTEU5QlJYSkhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFXRXZhRVVzUlVGQlN6UndReXhUUVVOc1JISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaYUdsRkxGbEJRV01zY1VOQlpXeEVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmt6WjBJc1YwRkJZU3hIUVdVdlEzUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFaMElzYVVKQlFXMUNMRWRCV1hKRWNra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQmFVSXNVMEZCVXpsdlFpeEhRVU01UTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFVkJRVWNzU1VGQlMwb3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUZHZRaXhuUWtGQmFVSXNUMEZGZUVjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWjBKb2FVVXNSVUZCU3pSd1F5eFRRVU55UkhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxhbWxGTEZsQlFXTXNkME5CWlhKRUt6UkRMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTFaMElzVjBGQllTeEhRV1ZzUkhSSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM1owSXNhVUpCUVcxQ0xFZEJXWGhFY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWlN4VFFVRlRMMjlDTEVkQlF6VkRiRFZETEVWQlFVczBjRU1zVVVGQlVXRXNWMEZCVjJocFJDeExRVUZOZVhkRUxFVkJRVlVzUlVGQlJ5eEpRVUZMU2l4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1c5Q0xHZENRVUZwUWl4UFFVVjBSelYyUkN4RlFVRkxPRW9zVTBGQlUzbHNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmphbWxGTEVWQlFVczBjRU1zVTBGRGJrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVd4cFJTeFpRVUZqTEhORFFXVnVSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoTjJkQ0xGZEJRV0VzUjBGbGFFUjBTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPV2RDTEdsQ1FVRnRRaXhIUVZsMFJISkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMjVDTEdGQlFXVXNVMEZCVTJod1FpeEhRVU0xUTJ3MVF5eEZRVUZMTkhCRExGRkJRVkZoTEZkQlFWZG9hVVFzUzBGQlRYbDNSQ3hGUVVGVkxFVkJRVWNzU1VGQlMwb3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllTOXZRaXhuUWtGQmFVSXNUMEZGZEVjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWTJ4cFJTeEZRVUZMTkhCRExGTkJRMjVFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMjVDTEdGQlFXRnVhVVVzV1VGQll5eHpRMEZsYmtRck5FTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNia0lzWVVGQllUbG5RaXhYUVVGaExFZEJaV2hFZEVrc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWVM5blFpeHBRa0ZCYlVJc1IwRlpkRVJ5U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZqTEZOQlFWTnFjRUlzUjBGRE0wTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hGUVVGSExFbEJRVXRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvY0VJc1owSkJRV2xDTEU5QlJYSkhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFXRnVhVVVzUlVGQlN6UndReXhUUVVOc1JISm5SQ3hGUVVGTFlTeFJRVUZWWkN4WFFVdHFRbmQyUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaY0dsRkxGbEJRV01zY1VOQlpXeEVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmt2WjBJc1YwRkJZU3hIUVdVdlEzUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9hRUlzYVVKQlFXMUNMRWRCV1hKRWNra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXMUNMRk5CUVZOc2NFSXNSMEZEYUVSc05VTXNSVUZCU3pSd1F5eFJRVUZSWVN4WFFVRlhhR2xFTEV0QlFVMTVkMFFzUlVGQlZTeEZRVUZITEVsQlFVdEtMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzVDTEdsQ1FVRnBRbXB3UWl4blFrRkJhVUlzVDBGRk1VYzFka1FzUlVGQlN6aEtMRk5CUVZONWJFUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXdENjR2xGTEVWQlFVczBjRU1zVTBGRGRrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2NtbEZMRmxCUVdNc01FTkJaWFpFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtaG9RaXhYUVVGaExFZEJaWEJFZEVrc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2FtaENMR2xDUVVGdFFpeEhRVmt4UkhKSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdsQ0xGTkJRVk51Y0VJc1IwRkRPVU5zTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4RlFVRkhMRWxCUVV0S0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc2NFSXNaMEpCUVdsQ0xFOUJSWGhITlhaRUxFVkJRVXM0U2l4VFFVRlRlV3hFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV2RDY21sRkxFVkJRVXMwY0VNc1UwRkRja1J5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpYUnBSU3haUVVGakxIZERRV1Z5UkNzMFF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6SnVRaXhsUVVGbGFtaENMRmRCUVdFc1IwRmxiRVIwU1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpKdVFpeGxRVUZsYkdoQ0xHbENRVUZ0UWl4SFFWbDRSSEpKTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJaMElzVTBGQlUyaEpMRWRCUXpkRGJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSVUZCUnl4SlFVRkxTaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZTQ3huUWtGQmFVSXNUMEZGZGtjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZsYkdoRUxFVkJRVXMwY0VNc1UwRkRjRVJ5WjBRc1JVRkJTMkVzVVVGQlZXUXNWMEZMYWtKM2RrUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGamJtaEVMRmxCUVdNc2RVTkJaWEJFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWTBVc1YwRkJZU3hIUVdWcVJIUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQlkwTXNhVUpCUVcxQ0xFZEJXWFpFY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVhOQ0xGTkJRVk53Y0VJc1IwRkRia1JzTlVNc1JVRkJTelJ3UXl4UlFVRlJZU3hYUVVGWGFHbEVMRXRCUVUxNWQwUXNSVUZCVlN4SFFVRkpMRVZCUVVkS0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNXdRaXhuUWtGQmFVSXNUMEZGTlVjMWRrUXNSVUZCU3poS0xGTkJRVk41YkVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVhGQ2RHbEZMRVZCUVVzMGNFTXNVMEZETVVSeVowUXNSVUZCUzJFc1VVRkJWV1FzVjBGTGFrSjNka1FzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDZG1sRkxGbEJRV01zTmtOQldURkVLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UWtNc1UwRkJWeXhUUVVGVGNuQkNMRWRCUXpWRWJEVkRMRVZCUVVzMGNFTXNVVUZCVVdFc1YwRkJWMmhwUkN4TFFVRk5lWGRFTEVWQlFWVXNSMEZCU1N4RlFVRkhMRXRCUVUwc1QwRkZka1F6ZGtRc1JVRkJTemhLTEZOQlFWTjViRVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlZkbWxGTEVWQlFVczBjRU1zVTBGRGJrVnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q1F5eFRRVUZUZUdsRkxGbEJRV01zYzBSQldXNUZLelJETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV2xDTEZOQlFWTjBjRUlzUjBGRE9VTnNOVU1zUlVGQlN6UndReXhSUVVGUllTeFhRVUZYYUdsRUxFdEJRVTE1ZDBRc1JVRkJWU3hIUVVGSkxFVkJRVWRLTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1Z5Y0VJc1owSkJRV2xDTEU5QlJYWkhOWFpFTEVWQlFVczRTaXhUUVVGVGVXeEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXZENlR2xGTEVWQlFVczBjRU1zVTBGRGNrUnlaMFFzUlVGQlMyRXNVVUZCVldRc1YwRkxha0ozZGtRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlhwcFJTeFpRVUZqTEhkRFFWbHlSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVmNzVTBGQlUyOTVReXhIUVVOMlJHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSMG9zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRjWGxETEdkQ1FVRnBRaXhQUVVWb1NEVjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZVNVJ5eEZRVUZMTkhCRExGTkJRemxFY21kRUxFVkJRVXRoTEZGQlFWVmtMRmRCUzJwQ2QzWkVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlV5OUhMRmxCUVdNc2FVUkJXVGxFS3pSRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGdlFpeFRRVUZUZG5CQ0xFZEJRMnBFYkRWRExFVkJRVXMwY0VNc1VVRkJVV0VzVjBGQlYyaHBSQ3hMUVVGTmVYZEVMRVZCUVZVc1IwRkJTU3hGUVVGSFNpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSjBjRUlzWjBKQlFXbENMRTlCUlRGSE5YWkVMRVZCUVVzNFNpeFRRVUZUZVd4RUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGdFFucHBSU3hGUVVGTE5IQkRMRk5CUTNoRWNtZEVMRVZCUVV0aExGRkJRVlZrTEZkQlMycENkM1pFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWpGcFJTeFpRVUZqTERKRFFWbDRSQ3MwUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRV0VzVTBGQlUzaHdRaXhIUVVNMVJHdzFReXhGUVVGTE5IQkRMRkZCUVZGaExGZEJRVmRvYVVRc1MwRkJUWGwzUkN4RlFVRlZMRWRCUVVrc1JVRkJSMG9zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDUXl4WFFVRlhkbkJDTEdkQ1FVRnBRaXhQUVVWeVNEVjJSQ3hGUVVGTE9Fb3NVMEZCVTNsc1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZreGFVVXNSVUZCU3pSd1F5eFRRVU51UlhKblJDeEZRVUZMWVN4UlFVRlZaQ3hYUVV0cVFuZDJSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWY3phVVVzV1VGQll5eHpSRUZSYmtVck5FTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNiVUlzYTBKQlFXdENMMjVDTEdkQ1FVRnJRaXhEUVVGRExFZEJTWFpFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYlVJc2EwSkJRV3RDTHpWRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEY0VVc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYlVJc2EwSkJRV3RDTlRkRUxGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhMMFZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JVSXNhMEpCUVd0Q05UZEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE0wVXNTVUZCVDBNc1JVRkJUU3hEUVVOWWIzQkNMRk5CUVZVemFVVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVbHpjRUlzWTBGRGVFTTVjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDTnpkRUxGTkJRVlVyZWtNc1NVRk5kRVFzVDBGSVNVRXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JVSXNhMEpCUVd0Q2NqUkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRia1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkRjRU1zVDBGQlQzQnZRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkJhMEp3YmtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGJFWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkJhMEp3YmtJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU5zUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZEZEVOdWRFSXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKeWJrSXNOa0pCUTI1RlVpeEZRVUZKZFhCQ0xGRkJRVkZ5T0VVc1IwRkRXaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDIxQ0xHdENRVUZyUWk4MVJTeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTnNSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyMUNMR3RDUVVGclFpOXRRaXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNdlJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyMUNMR3RDUVVGclFpOXRRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRMnhHTEVsQlFVbHVlVVFzUjBGRFNrRXNSVUZCU1dsVUxFVkJRVkUwYmtVc1pVRkRUaTgyUlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVWQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvYmtJc01FSkJWV2hFY2tJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JVSXNhMEpCUVd0Q0x6VkZMRlZCUVZWNU4wVXNXVUZCWXl4WFFVTTVSQ3hQUVVORk5XbEZMRVZCUVVzMGNFTXNVVUZCVVRCRUxIZENRVUYzUWpkclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGeFFpeEpRVkV4Um5KdlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHRRaXhyUWtGQmEwSXZOVVVzVlVGQlZUSTNSU3haUVVGakxGTkJRVk4wT0VVc1IwRkRka1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVWQlFVZHFReXhKUVZOMlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R0UWl4clFrRkJhMEl2TlVVc1ZVRkJWVEEzUlN4UlFVRlZMRk5CUVZOeWIwSXNSVUZCVjBNc1IwRkRPVVVzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJjVUl4YlVJc1NVRlJMMGN6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdFFpeHJRa0ZCYTBJdk5VVXNWVUZCVlRRM1JTeGpRVUZuUWl4WFFVTm9SU3hQUVVGUGREWkZMRXRCUVV0eE5rVXNXVUZCV1N4TFFWVXhRbWh4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb2IwSXNaMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NSVUZCUlN4RlFVRkZMRVZCUVVVc1IwRkpka1Z1TlVNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU4wUlN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEkzTjBRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRnFSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBJM04wUXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVNM1JTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWVucEVMRXRCUVRaRExFOUJRWFJEYVVNc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEYUVWcE4wVXNWMEZCYlVRc1QwRkJkRU5xTjBVc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEZEVWck4wVXNaVUZCSzBRc1QwRkJPVU5zTjBVc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFqSk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOc1JtMDNSU3h4UWtGQmMwVXNUMEZCTDBOdU4wVXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRakpPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTjZSbTgzUlN4dFFrRkJiMFVzVDBGQkwwTndOMFVzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVN0Q0xHbENRVUZwUWpKT0xFVkJRVXNzVlVGQlpXTXNSVUZCV1hKNVJDeEZRVU4yUm5FM1JTeG5Ra0ZCYVVKd2FrVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVa3JjRUlzY1VKQlF5OURkbkZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWprM1JDeFRRVUZWSzNwRExFZEJRMmhFYVhGQ0xHRkJRV04wYWtVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVscGNVSXNhMEpCUXpWRGVuRkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRbkE0UkN4VFFVRlZLM3BETEVkQlEzQkViWEZDTEZsQlFXRjRha1VzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWx0Y1VJc2FVSkJRek5ETTNGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFuWTRSQ3hUUVVGVkszcERMRWRCUTNaRWNYRkNMR05CUVdVeGFrVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVbHhjVUlzYlVKQlF6ZEROM0ZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW13NFJDeFRRVUZWSzNwRExFZEJRM0pFZUVZc1UwRkJWVGx5UkN4RlFVRkpkWGhFTEVWQlFVbHpjVUlzWlVGQmFVSTVjVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXWG80UkN4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlF5OUdPRGRGTEdkQ1FVRnBRamszUlN4RlFVRkpkWGhFTEVWQlFVbDNjVUlzYzBKQlFYZENhSEpDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1ZzT1VRc1UwRkJVeXQ2UXl4RlFVRnBRblI0UkN4SFFVTm9TR2M0UlN4UFFVRm5SQ3hQUVVGMlEyZzRSU3hGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4SFFVMXlSU3hQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFuUTBRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRM0pGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRM0JETEU5QlFVOXliMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDY201Q0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlYzQkdPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDY201Q0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZEY0VZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKTUhGQ0xGRkJRVkY0T1VVc1IwRkRXaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTVEp4UWl4WFFVRlhlamxGTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDBjMFFzWTBGQlkzaEhMRWRCUTJ4Q0xFMUJRMFlzUzBGQlN5eEhRVVZJTEVsQlJFRXNTVUZCU1d0cFJDeEZRVUYzUTNOTUxFVkJRVTlzV2l4alFVRm5RbXRhTEVWQlFVOXVXQ3hyUWtGQmIwSXNRMEZCUTIxWUxFVkJRVTkyWVN4aFFVTTNSbXd3UXl4RlFVRkpMRVZCUVVkQkxFVkJRVWx0YWtRc1JVRkJUemRuUkN4UFFVRlJkRU1zU1VGRGFrTXJla1FzUlVGQlNUUnhRaXh2UWtGQmIwSjROMElzUlVGQlQyNXFSQ3hKUVVWcVF5eE5RVU5HTEV0QlFVc3NSMEZGU0N4SlFVUkpiV3BFTEVWQlFYZERjMHdzUlVGQlQyeGFMR05CUVdkQ2Exb3NSVUZCVDI1WUxHdENRVUZ2UWl4RFFVRkRiVmdzUlVGQlQzWmhMR0ZCUXpkR2JEQkRMRVZCUVVrc1JVRkJSMEVzUlVGQlNXMXFSQ3hGUVVGUE4yZEVMRTlCUVZGMFF5eEpRVU5xUXl0NlJDeEZRVUZKTm5GQ0xHdENRVUZyUW5vM1FpeEZRVUZQYm1wRUxFbEJSUzlDTEUxQlEwWXNTMEZCU3l4RlFVTkRhVUlzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVOMFEzQjBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFuUnVRaXcyUWtGREwwUlNMRVZCUVVrNGNVSXNaVUZCWlRVNVJTeEhRVU51UWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVOMFF6RjBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFqVnVRaXcyUWtGRGJrVlNMRVZCUVVrcmNVSXNXVUZCV1RjNVJTeEhRVU5vUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVOMFF6ZDBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFpOXVRaXcyUWtGRGRFVlNMRVZCUVVsbmNrSXNWMEZCVnprNVJTeEhRVU5tTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUTNSRGVIUkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ01XNUNMRFpDUVVOd1JWSXNSVUZCU1dseVFpeGpRVUZqTHpsRkxFZEJRMnhDTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZEZEVNdmRFSXNSVUZCVHpsWUxGbEJRVmt4TVVNc1JVRkJUWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaYW05Q0xEWkNRVU16UkZJc1JVRkJTV3R5UWl4WFFVRlhhQ3RGTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVTjBRM2gxUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhiMElzTmtKQlF6bEVVaXhGUVVGSmJYSkNMR3RDUVVGclFtb3JSU3hIUVVOMFFpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNXOXlRaXhWUVVGVmJDdEZMRWRCUTJRc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEY0VVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvYmtJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRha1ZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOd1JpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFbEJSMHBCTEVWQlFVbHBWQ3hGUVVGUk1uQkZMSEZDUVVOT09UaEZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBPVlVzYjBKQlEwd3NSVUZEUVhJNVF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVUUndSU3d5UWtGRFRpODRSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUM1pYTEcxQ1FVTk1MRWRCUTBFMU4wTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRTJjRVVzZVVKQlEwNW9PVVVzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTkyVnl4dFFrRkRUQ3hIUVVOQk5UZERMRWxCUjBwQkxFVkJRVWxwVkN4RlFVRlJjVzlGTEhOQ1FVTk9lRGRGTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbXB1UWl3d1FrRkhNVU53ZVVRc1JVRkJTV2xVTEVWQlFWRjFiMFVzYlVKQlEwNHhOMFVzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTgxVlN4eFFrRkRUQ3hGUVVOQmRqbERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkbTVDTERCQ1FVYzVRM0I1UkN4RlFVRkphVlFzUlVGQlVYbHZSU3hyUWtGRFRqVTNSU3hQUVVGVExFZEJRMkp4ZVVRc1JVRkJUelZWTEhGQ1FVTk1MRVZCUTBGMk9VTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyMXVRaXgxUWtGQmRVSXhia0lzTUVKQlIycEVjSGxFTEVWQlFVbHBWQ3hGUVVGUk1tOUZMRzlDUVVOT09UZEZMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSnVRaXg1UWtGSmRFTXNUMEZFVkhCNVJDeEZRVUZKYVZRc1JVRkJVVFJ2UlN4bFFVVldNWEJDTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlc1Q0xIbENRVWszUWl4UFFVUlVjSGxFTEVWQlFVbHBWQ3hGUVVGUk9HOUZMSE5DUVVWV05YQkNMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxjbTlDTEhsQ1FVbG9ReXhQUVVSVWNIbEVMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVkQlEwRnNORU1zU1VGVlRpdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWVEk1UlN4UlFVRlZMRmRCUXpWRUxFOUJRVGhDT1d0RkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVMk9FVXNVVUZCVlN4VFFVRlRlRGxGTEVkQlEzSkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVk5EbEZMRlZCUVZrc1YwRkRPVVFzVDBGQlR5OXJSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZOamxGTEZGQlFWVXNWMEZETlVRc1QwRkJlVU1zVFVGQmJFTm9iRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWT0RsRkxGZEJRV0VzVjBGREwwUXNUMEZCT0VKcWJFVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZUZzRSU3hYUVVGaExGTkJRVk42T1VVc1IwRkRlRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVXJPVVVzWVVGQlpTeFhRVU5xUlN4UFFVRlBiR3hGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZuSzBVc1YwRkJZU3hYUVVNdlJDeFBRVUY1UXl4TlFVRnNRMjVzUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWM09VVXNhMEpCUVc5Q0xGZEJRM1JGTEU5QlFYTkRNMnRGTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFbEJVVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmFTdEZMR3RDUVVGdlFpeFRRVUZUTlN0RkxFZEJReTlGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWRCUVZNc1MwRlRha1J6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVMlJpeGpRVUZuUWl4VFFVRlRlRWNzUlVGQlQya3dSQ3hIUVVOc1JpeFBRVUZQZWpaRExFVkJRVXMwY0VNc1VVRkJVWFZFTEcxQ1FVRnRRakZyUkN4TFFVRk5MRVZCUVVkcVF5eEZRVUZQYVRCRUxFbEJVWHBFTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWckswVXNiMEpCUVhOQ0xGZEJRM2hGTEU5QlFVODFPRVVzUzBGQlN6STRSU3hyUWtGQmEwSXNTMEZSYUVOMGMwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVjVPVVVzZDBKQlFUQkNMRmRCUXpWRkxFOUJRWE5ETld0RkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRbXhxUkN4TFFVRk5MRXRCVVRWRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZiU3RGTEhkQ1FVRXdRaXhUUVVGVE9TdEZMRWRCUTNKR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVkQlFWTXNTMEZUYkVSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVXJPRVVzYjBKQlFYTkNMRk5CUVZNeE9VVXNSVUZCVDJrd1JDeEhRVU40Uml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVYVkVMRzFDUVVGdFFqRnJSQ3hMUVVGTkxFZEJRVWxxUXl4RlFVRlBhVEJFTEVsQlVURkVNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZ2SzBVc01FSkJRVFJDTEZkQlF6bEZMRTlCUVU4NU9FVXNTMEZCU3pZNFJTeDNRa0ZCZDBJc1MwRlJkRU40YzBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVd09VVXNjMEpCUVhkQ0xGZEJRekZGTEU5QlFYTkROMnRGTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFdEJVVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmNTdEZMSE5DUVVGM1FpeFRRVUZUYUM5RkxFZEJRMjVHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWRCUVZNc1MwRlRiRVJ6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWbk9VVXNhMEpCUVc5Q0xGTkJRVk16T1VVc1JVRkJUMmt3UkN4SFFVTjBSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVhWRUxHMUNRVUZ0UWpGclJDeExRVUZOTEVkQlFVbHFReXhGUVVGUGFUQkVMRWxCVVRGRU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnpLMFVzZDBKQlFUQkNMRmRCUXpWRkxFOUJRVTlvT1VVc1MwRkJTeXM0UlN4elFrRkJjMElzUzBGUmNFTXhjMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZyT0VVc2JVSkJRWEZDTEZkQlEzWkZMRTlCUTBWeWFrVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdsQ0xFbEJVWFJHZEc5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmRTdEZMRzFDUVVGeFFpeFRRVUZUYkM5RkxFZEJRMmhHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4RlFVRkhha01zU1VGVGRrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZwT1VVc1pVRkJhVUlzVTBGQlV6VndRaXhGUVVGWFF5eEhRVU4yUml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFVkJRVWNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZwUWpOdFFpeEpRVkV6UnpOQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmR5dEZMSEZDUVVGMVFpeFhRVU42UlN4UFFVRlBiRGxGTEV0QlFVdHBPVVVzYlVKQlFXMUNMRXRCVVdwRE5YTkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZiemhGTEdkQ1FVRnJRaXhYUVVOd1JTeFBRVU5GZG1wRkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ4UWl4SlFWRXhSalZ2UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlhrclJTeG5Ra0ZCYTBJc1UwRkJVM0F2UlN4SFFVTTNSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzUlVGQlIycERMRWxCVTNaRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZhemxGTEZsQlFXTXNVMEZCVXpkd1FpeEZRVUZYUXl4SFFVTndSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnhRbXB1UWl4SlFWRXZSek5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWTUN0RkxHdENRVUZ2UWl4WFFVTjBSU3hQUVVGUGNEbEZMRXRCUVV0dE9VVXNaMEpCUVdkQ0xFdEJVVGxDT1hOQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmN6aEZMR1ZCUVdsQ0xGZEJRMjVGTEU5QlEwVjZha1VzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYZENMRWxCVVRkR0wyOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZNaXRGTEdWQlFXbENMRk5CUVZOMEwwVXNSMEZETlVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWTjJSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlcwNVJTeFhRVUZoTEZOQlFWTTVjRUlzUlVGQlYwTXNSMEZEYmtZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZDBKd2JrSXNTVUZSYkVnelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHRRaXh2UWtGQmIwSm9Oa1VzVlVGQlZUUXJSU3hwUWtGQmJVSXNWMEZEY2tVc1QwRkJUM1E1UlN4TFFVRkxjVGxGTEdWQlFXVXNTMEZSTjBKb2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVjNPRVVzYVVKQlFXMUNMRmRCUTNKRkxFOUJRMFV6YWtVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWE5DTEVsQlVUTkdNVzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWTml0RkxHbENRVUZ0UWl4VFFVRlRlQzlGTEVkQlF6bEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnZPVVVzWTBGQlowSXNVMEZCVXk5d1FpeEZRVUZYUXl4SFFVTjBSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnpRaTl0UWl4SlFWRm9TRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVcxQ0xHOUNRVUZ2UW1nMlJTeFZRVUZWT0N0RkxHMUNRVUZ4UWl4WFFVTjJSU3hQUVVGUGVEbEZMRXRCUVV0MU9VVXNhVUpCUVdsQ0xFdEJVUzlDYkhSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmVUaEZMRmRCUVdFc1YwRkRMMFFzVDBGRFJUVnFSU3hGUVVGTE5IQkRMRkZCUVZGNVJDeG5Ra0ZCWjBJMWEwUXNTMEZCVFhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGaExFbEJVVEZGYW5CQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXMUNMRzlDUVVGdlFtZzJSU3hWUVVGVmNUbEZMRmRCUVdFc1UwRkJVMmdyUlN4SFFVTjRSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTkVRc1owSkJRV2RDTDJ0RUxFdEJRVTBzUlVGQlIycERMRWxCVVM5RGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZLeXRGTEdGQlFXVXNWMEZEYWtVc1QwRkJUM281UlN4TFFVRkxLemRGTEdkQ1FVRlhjSEZDTEVsQlVYcENkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YlVJc2IwSkJRVzlDYURaRkxGVkJRVlZuTDBVc1YwRkJZU3hYUVVNdlJDeFBRVUY1UXl4TlFVRnNRMjV0UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZVeU9FVXNhMEpCUVc5Q0xGZEJRM1JGTEU5QlEwVTVha1VzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlowSXNTVUZSTjBVeGNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjViVUlzYjBKQlFXOUNhRFpGTEZWQlFWVnpPVVVzYTBKQlFXOUNMRk5CUVZOcUswVXNSMEZETDBVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUUkVMR2RDUVVGblFpOXJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRXZRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVldrdlJTeHZRa0ZCYzBJc1YwRkRlRVVzVDBGQlR6TTVSU3hMUVVGTFp6aEZMSFZDUVVGclFuSnhRaXhKUVZGb1EzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZheTlGTEd0Q1FVRnZRaXhYUVVOMFJTeFBRVUY1UXl4TlFVRnNRM0p0UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJVSXNiMEpCUVc5Q2FEWkZMRlZCUVZWdEwwVXNWVUZCV1N4WFFVTTVSQ3hQUVVFNFFuUnRSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4SFFVRkpMRXRCVVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzFDTEc5Q1FVRnZRbWcyUlN4VlFVRlZkVGxGTEZWQlFWa3NVMEZCVTJ3clJTeEhRVU4yUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVkQlFVbHFReXhKUVZGNlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x0UWl4dlFrRkJiMEpvTmtVc1ZVRkJWVzh2UlN4WlFVRmpMRmRCUTJoRkxFOUJRVTkyYlVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdFFpeHZRa0ZCYjBKb05rVXNWVUZCVlhFdlJTeFZRVUZaTEZkQlF6bEVMRTlCUVRCRExFMUJRVzVEZUcxRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVlZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFiMElzWjBKQlFXdENMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4SlFVbHVSVzQxUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMnhGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RamszUkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllUZEZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWprM1JDeFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTNwRkxFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFoNmVrUXNTMEZCTmtNc1QwRkJkRU5wUXl4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5vUlRBclJTeFZRVUZYZW0xRkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmIzUkNMR1ZCUTNwRE5YUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbXc0UkN4VFFVRlZLM3BETEVkQlEzSkVjWEZDTEdOQlFXVXhha1VzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWx4Y1VJc2JVSkJRemRETjNGQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFtdzRSQ3hUUVVGVkszcERMRWRCUTNKRWMzUkNMR1ZCUVdkQ00yMUZMRVZCUVVzMGNFTXNVVUZCVVRCQ0xHRkJRV0ZuVHl4RlFVRkpjM1JDTEc5Q1FVTTVRemwwUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBJNU4wUXNVMEZCVlN0NlF5eEhRVU5vUkdseFFpeGhRVUZqZEdwRkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmFYRkNMR3RDUVVNMVEzcHhRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEp3T0VRc1UwRkJWU3Q2UXl4SFFVTndSSGQwUWl4dFFrRkJiMEkzYlVVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVsM2RFSXNkMEpCUTJ4RWFIVkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpTODNSQ3hUUVVGVkszcERMRWRCUXk5RU1IUkNMR05CUVdVdmJVVXNSVUZCU3pSd1F5eFJRVUZSTUVJc1lVRkJZV2RQTEVWQlFVa3dkRUlzYlVKQlF6ZERiSFZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzIxQ0xIRkNRVUZ4UW00NFJDeFRRVUZWSzNwRExFZEJRM0pFZUVZc1UwRkJWVGx5UkN4RlFVRkpkWGhFTEVWQlFVbHpjVUlzWlVGQmFVSTVjVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVEU0UkN4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVkQlEyeEhheTlGTEd0Q1FVRnRRbXB1UlN4RlFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaFowOHNSVUZCU1RSMFFpeDFRa0ZEYWtSd2RVSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGamFEaEVMRk5CUVZVcmVrTXNSMEZET1VRNGRFSXNhVUpCUVd0RkxFOUJRUzlEY0M5RkxFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRXJRaXhwUWtGQmFVSXlUaXhGUVVGTExGVkJRV1ZqTEVWQlFWbHllVVFzUjBGTmRrWXNUMEZJU1hONFJDeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKMk5FSXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnFSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVTndReXhQUVVGUGRHOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RblJ1UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkb1JqaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RblJ1UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRMmhHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTVEJ4UWl4UlFVRlJlRGxGTEVkQlExb3NUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkRkRU40ZEVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUl4YmtJc05rSkJRM0JGVWl4RlFVRkpPSFJDTEZOQlFWTTFaMFlzUjBGRFlpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVTjBRM2gwUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRakZ1UWl3MlFrRkRjRVZTTEVWQlFVbHBja0lzWTBGQll5ODVSU3hIUVVOc1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVTjBRM0IwUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RblJ1UWl3MlFrRkRMMFJTTEVWQlFVa3JkRUlzWTBGQll6ZG5SaXhIUVVOc1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVTjBRekYwUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRalZ1UWl3MlFrRkRia1ZTTEVWQlFVa3JjVUlzV1VGQldUYzVSU3hIUVVOb1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGRGRFUnlkRUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWMmJrSXNOa0pCUXpsRlVpeEZRVUZKWjNWQ0xHdENRVUZyUWpsblJpeEhRVU4wUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyMUNMSEZDUVVOMFEzcDBRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyMUNMSEZDUVVGeFFqTnVRaXcyUWtGRGNFVlNMRVZCUVVscGRVSXNZVUZCWVM5blJpeEhRVU5xUWl4TlFVTkdMRXRCUVVzc1JVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUTNSRGFIVkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWld4dlFpdzJRa0ZET1VSU0xFVkJRVWxyY2tJc1YwRkJWMmdyUlN4SFFVTm1MRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVTjBSSFIwUWl4RlFVRlBPVmdzV1VGQldURXhReXhGUVVGTmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkzaHVRaXcyUWtGRE4wVlNMRVZCUVVscmRVSXNhVUpCUVdsQ2FHaEdMRWRCUTNKQ0xFMUJRMFlzUzBGQlN5eEhRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBhR0VzWVVGRE1VTnpaaXhGUVVGSmJYVkNMR2RDUVVGblFtcG9SaXhIUVVOd1FpeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOb1JTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1wdVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU0zUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1wdVFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEyaEdMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEZRVVZETEU5QlJGUnllVVFzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVRCeVJTeG5Ra0ZEVGpjclJTeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFVkJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeWJrSXNNRUpCUnk5RGNIbEVMRVZCUVVscFZDeEZRVUZSTW05RkxHOUNRVU5PT1RkRkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5KdVFpd3dRa0ZITDBOd2VVUXNSVUZCU1dsVUxFVkJRVkUwY2tVc2NVSkJRMDR2SzBVc1QwRkJVeXhIUVVOaWNYbEVMRVZCUVU4MVZTeHhRa0ZEVEN4RlFVTkJkamxETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYW01Q0xEQkNRVWN4UTNCNVJDeEZRVUZKYVZRc1JVRkJVWFZ2UlN4dFFrRkRUakUzUlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpWVkxIRkNRVU5NTEVWQlEwRjJPVU1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyYmtJc01FSkJSemxEY0hsRUxFVkJRVWxwVkN4RlFVRlJPSEpGTEhsQ1FVTk9haTlGTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXeHVRaXd3UWtGSGVrUndlVVFzUlVGQlNXbFVMRVZCUVZGbmMwVXNiMEpCUTA1dUwwVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEZRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ2RHNUNMSGxDUVVsMFF5eFBRVVJVY0hsRUxFVkJRVWxwVkN4RlFVRlJORzlGTEdWQlJWWXhjRUlzUlVGQlR6TlhMR0ZCUTB3c1JVRkRRWGczUXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzYmtJc01FSkJSM3BEY0hsRUxFVkJRVWxwVkN4RlFVRlJhM05GTEhkQ1FVTk9jaTlGTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyNXVRaXd3UWtGSGVFUndlVVFzUlVGQlNXbFVMRVZCUVZFd2MwVXNkVUpCUTA0M0wwVXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODVWU3h2UWtGRFRDeEhRVU5CY2psRExFbEJVMFpwV1N4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXdzJSU3hWUVVGVmJXVXNVMEZCVnl4VFFVRlRPSHBETEVkQlEycEdMRTlCUVU5T0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlM4M1JDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVFZHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlM4M1JDeFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUTNoR0xFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFnelNDeE5RVUU0UXl4UFFVRjBRemR3UkN4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU5xUlhVeVF5eEpRVUUwUXl4UFFVRjBRM1l5UXl4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpST0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU12UkRoeVJDeFRRVUZWT1hKRUxFVkJRVWwxZUVRc1JVRkJTWE54UWl4bFFVRnBRamx4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKcU9FUXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEpRVTB6Unl4UFFVaEpjM2hFTEVsQlEwWkZMRVZCUVVsTExIRkNRVUYxUWs0c1IwRkZkRUpETEVsQlZWUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpYZzBRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMmhHTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUXl4bFFVTndSQ3hQUVVGUGRtOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpYWnVRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmN2UmpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFrTXNaVUZCWlhadVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUXk5R0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQzWmhMRmxCUXpGRE5tWXNSVUZCU1hGMVFpeFRRVUZUYm1oR0xFZEJRMklzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5MllTeFpRVU14UXpabUxFVkJRVWszYUVJc1QwRkJUMnA0UXl4SFFVTllMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRM1JEZG5SQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRWE5DZW01Q0xEWkNRVU55UlZJc1JVRkJTV3R5UWl4WFFVRlhhQ3RGTEVkQlEyWXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNOa1VzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZETDBVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRE5VVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdWc2JrSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTXZSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYaEVheTlETEVWQlFVOHpZU3hYUVVOTUxFVkJRMEY0TTBNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQTTJFc1YwRkRUQ3hGUVVOQmVETkRMRWRCU1Vzc1QwRkVWRUVzUlVGQlNXbFVMRVZCUVZFMGIwVXNaVUZGVmpGd1FpeEZRVUZQTTFjc1lVRkRUQ3hGUVVOQmVEZERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYTkNjRzVDTERCQ1FWVnNSSEpDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtNc1pVRkJaV3cyUlN4VlFVRlZlV2RHTEZOQlFWY3NWMEZEZUVVc1QwRkJPRUkxYmtVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRExHVkJRV1ZzTmtVc1ZVRkJWWGRuUml4VFFVRlhMRk5CUVZOdWFFWXNSMEZEYWtZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUXl4bFFVRmxiRFpGTEZWQlFWVXdaMFlzVjBGQllTeFhRVU14UlN4UFFVRlBOMjVGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUXl4bFFVRmxiRFpGTEZWQlFWVXlaMFlzVTBGQlZ5eFhRVU40UlN4UFFVRjVReXhOUVVGc1F6bHVSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUXl4bFFVRmxiRFpGTEZWQlFWVnhkME1zVDBGQlV5eFhRVU4wUlN4UFFVRTRRbmd6UWl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtNc1pVRkJaV3cyUlN4VlFVRlZjM2RETEU5QlFWTXNVMEZCVTJwNFF5eEhRVU12UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNOa1VzVlVGQlZUUm5SaXhUUVVGWExGZEJRM2hGTEU5QlFVOHZia1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNOa1VzVlVGQlZUWm5SaXhQUVVGVExGZEJRM1JGTEU5QlFYbERMRTFCUVd4RGFHOUZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpETEdWQlFXVnNOa1VzVlVGQlZYazRSU3hYUVVGaExGZEJRekZGTEU5QlEwVTFha1VzUlVGQlN6UndReXhSUVVGUmVVUXNaMEpCUVdkQ05XdEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYVkNMRWxCVVhCR2VtOUNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXdzJSU3hWUVVGVmNUbEZMRmRCUVdFc1UwRkJVMmdyUlN4SFFVTnVSaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTkVRc1owSkJRV2RDTDJ0RUxFdEJRVTBzUlVGQlIycERMRWxCVVM5RGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra01zWlVGQlpXdzJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkROVVVzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENReXhsUVVGbGJEWkZMRlZCUVZWbkwwVXNWMEZCWVN4WFFVTXhSU3hQUVVGNVF5eE5RVUZzUTI1dFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZQYWtOMVdDeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZMjQyUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRMmhHTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyZzRSQ3hUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVROR2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkyZzRSQ3hUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlEzWkdMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExZ3pTQ3hOUVVFNFF5eFBRVUYwUXpkd1JDeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOcVJYVXlReXhKUVVFMFF5eFBRVUYwUTNZeVF5eEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hIUVUxcVJTeFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZM28wUWl4clFrRkJiMElzVTBGQlUyZFNMRWRCUXk5RkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1JTeGpRVU53UkN4UFFVRlBlRzlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZM2h1UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZjNVJqaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5Ra1VzWTBGQlkzaHVRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF6bEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUM1poTEZsQlF6RkRObVlzUlVGQlNYRjFRaXhUUVVGVGJtaEdMRWRCUTJJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOTJZU3haUVVNeFF6Wm1MRVZCUVVrM2FFSXNUMEZCVDJwNFF5eEhRVU5ZTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1JTeGpRVUZqYmpaRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF6bEZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ1JTeGpRVUZqYm01Q0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRek5GUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpibTVDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZET1VZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVTXNUMEZFVkhKNVJDeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQTTJFc1YwRkRUQ3hGUVVOQmVETkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlR6TmhMRmRCUTB3c1JVRkRRWGd6UXl4SlFWVk9LM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZMjQyUlN4VlFVRlZlV2RHTEZOQlFWY3NWMEZEZGtVc1QwRkJPRUkxYmtVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRkxHTkJRV051TmtVc1ZVRkJWWGRuUml4VFFVRlhMRk5CUVZOdWFFWXNSMEZEYUVZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpialpGTEZWQlFWVXdaMFlzVjBGQllTeFhRVU42UlN4UFFVRlBOMjVGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpialpGTEZWQlFWVXlaMFlzVTBGQlZ5eFhRVU4yUlN4UFFVRjVReXhOUVVGc1F6bHVSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDUlN4alFVRmpialpGTEZWQlFWVnhkME1zVDBGQlV5eFhRVU55UlN4UFFVRTRRbmd6UWl4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUWtVc1kwRkJZMjQyUlN4VlFVRlZjM2RETEU5QlFWTXNVMEZCVTJwNFF5eEhRVU01UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpGTEdOQlFXTnVOa1VzVlVGQlZUUm5SaXhUUVVGWExGZEJRM1pGTEU5QlFVOHZia1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpGTEdOQlFXTnVOa1VzVlVGQlZUWm5SaXhQUVVGVExGZEJRM0pGTEU5QlFYbERMRTFCUVd4RGFHOUZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWVEk1UlN4UlFVRlZMRmRCUTNoRUxFOUJRVGhDT1d0RkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1MwRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZVMk9FVXNVVUZCVlN4VFFVRlRlRGxGTEVkQlEycEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVk5EbEZMRlZCUVZrc1YwRkRNVVFzVDBGQlR5OXJSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZOamxGTEZGQlFWVXNWMEZEZUVRc1QwRkJlVU1zVFVGQmJFTm9iRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWZFM5RkxHRkJRV1VzVjBGRE4wUXNUMEZEUlRGdFJTeEZRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMEkzYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCYzBJc1NVRlJNMFl4YjBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZVNFowWXNZVUZCWlN4VFFVRlRlbWhHTEVkQlEzUkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnBaMFlzVTBGQlZ5eFRRVUZUTlhOQ0xFVkJRVmRETEVkQlF6ZEZMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSSzBRc01FSkJRVEJDYkd4RUxFdEJRVTBzUlVGQlJ5dDRSQ3hGUVVGWE1VSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYTkNMMjFDTEVsQlVXaElNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlVyWjBZc1pVRkJhVUlzVjBGREwwUXNUMEZCVDNvdlJTeExRVUZMZHk5RkxHRkJRV0VzUzBGUk0wSnVka0lzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlYzT0VVc2FVSkJRVzFDTEZkQlEycEZMRTlCUTBVemFrVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhOQ0xFbEJVVE5HTVc5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVk5pdEZMR2xDUVVGdFFpeFRRVUZUZUM5RkxFZEJRekZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4RlFVRkhha01zU1VGVGRrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZ2T1VVc1kwRkJaMElzVTBGQlV5OXdRaXhGUVVGWFF5eEhRVU5zUml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFVkJRVWNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ6UWk5dFFpeEpRVkZvU0ROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVk9DdEZMRzFDUVVGeFFpeFhRVU51UlN4UFFVRlBlRGxGTEV0QlFVdDFPVVVzYVVKQlFXbENMRXRCVVM5Q2JIUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZlUzlGTEd0Q1FVRnZRaXhYUVVOc1JTeFBRVU5GTlcxRkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZwUWl4SlFWRjBSblJ2UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVldkb1JpeHJRa0ZCYjBJc1UwRkJVek5vUml4SFFVTXpSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzUlVGQlIycERMRWxCVTNaRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZhMmRHTEdOQlFXZENMRk5CUVZNM2MwSXNSVUZCVjBNc1IwRkRiRVlzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4RlFVRkhLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJhVUl6YlVJc1NVRlJNMGN6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVldsb1JpeHZRa0ZCYzBJc1YwRkRjRVVzVDBGQlR6TXZSU3hMUVVGTE1DOUZMR3RDUVVGclFpeExRVkZvUTNKMlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZXODRSU3huUWtGQmEwSXNWMEZEYUVVc1QwRkRSWFpxUlN4RlFVRkxOSEJETEZGQlFWRXdSQ3gzUWtGQmQwSTNhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJjVUlzU1VGUk1VWTFiMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlY1SzBVc1owSkJRV3RDTEZOQlFWTndMMFVzUjBGRGVrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRVZCUVVkcVF5eEpRVk4yUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZXczVSU3haUVVGakxGTkJRVk0zY0VJc1JVRkJWME1zUjBGRGFFWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmNVSnFia0lzU1VGUkwwY3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWVEFyUlN4clFrRkJiMElzVjBGRGJFVXNUMEZCVDNBNVJTeExRVUZMYlRsRkxHZENRVUZuUWl4TFFWRTVRamx6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVlRJdlJTeHpRa0ZCZDBJc1YwRkRkRVVzVDBGRFJUbHRSU3hGUVVGTE5IQkRMRkZCUVZFd1JDeDNRa0ZCZDBJM2EwUXNTMEZCVFhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSkRMR1ZCUVdkQ0xFbEJVWEpIZG05Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmEyaEdMSE5DUVVGM1FpeFRRVUZUTjJoR0xFZEJReTlGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4RlFVRkhha01zU1VGVGRrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZ0WjBZc2EwSkJRVzlDTEZOQlFWTTVjMElzUlVGQlYwTXNSMEZEZEVZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRExHVkJRV2RDTlcxQ0xFbEJVVEZJTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZWdGFFWXNkMEpCUVRCQ0xGZEJRM2hGTEU5QlFVODNMMFVzUzBGQlN6UXZSU3h6UWtGQmMwSXNTMEZSY0VOMmRrSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVTJMMFVzYVVKQlFXMUNMRmRCUTJwRkxFOUJRMFZvYmtVc1JVRkJTelJ3UXl4UlFVRlJNRVFzZDBKQlFYZENOMnRFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWE5DTEVsQlVUTkdNMjlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUcxQ0xHZENRVUZuUW1vMlJTeFZRVUZWYjJoR0xHbENRVUZ0UWl4VFFVRlRMMmhHTEVkQlF6RkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UkN4M1FrRkJkMEpxYkVRc1MwRkJUU3hGUVVGSGFrTXNTVUZUZGtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVnZaMFlzWVVGQlpTeFRRVUZUTDNOQ0xFVkJRVmRETEVkQlEycEdMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSSzBRc01FSkJRVEJDYkd4RUxFdEJRVTBzUlVGQlJ5dDRSQ3hGUVVGWE1VSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYTkNhRzVDTEVsQlVXaElNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZ4YUVZc2JVSkJRWEZDTEZkQlEyNUZMRTlCUVU4dkwwVXNTMEZCU3pndlJTeHBRa0ZCYVVJc1MwRlJMMEo2ZGtJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZWNU9FVXNWMEZCWVN4WFFVTXpSQ3hQUVVORk5XcEZMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdkQ0xFbEJVVGRGYkhCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmNUbEZMRmRCUVdFc1UwRkJVMmdyUlN4SFFVTndSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZSTkVRc1owSkJRV2RDTDJ0RUxFdEJRVTBzUlVGQlIycERMRWxCVVM5RGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzFDTEdkQ1FVRm5RbW8yUlN4VlFVRlZLeXRGTEdGQlFXVXNWMEZETjBRc1QwRkJUM281UlN4TFFVRkxLemRGTEdkQ1FVRlhjSEZDTEVsQlVYcENkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZuTDBVc1YwRkJZU3hYUVVNelJDeFBRVUY1UXl4TlFVRnNRMjV0UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JVSXNaMEpCUVdkQ2FqWkZMRlZCUVZVckwwVXNjVUpCUVhWQ0xGZEJRM0pGTEU5QlEwVnNia1VzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENSU3hqUVVGbExFbEJVWEJIZUc5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HMUNMR2RDUVVGblFtbzJSU3hWUVVGVmMyaEdMSEZDUVVGMVFpeFRRVUZUYW1sR0xFZEJRemxGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4RlFVRkhha01zU1VGVGRrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YlVJc1owSkJRV2RDYWpaRkxGVkJRVlZ4WjBZc2FVSkJRVzFDTEZOQlFWTm9kRUlzUlVGQlYwTXNSMEZEY2tZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKRkxHTkJRV1UzYlVJc1NVRlJla2d6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdFFpeG5Ra0ZCWjBKcU5rVXNWVUZCVlhWb1JpeDFRa0ZCZVVJc1YwRkRka1VzVDBGQlQycG5SaXhMUVVGTFoyZEdMSEZDUVVGeFFpeExRVkZ1UXpOMlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZYVm5SaXh2UWtGQmMwSXNWMEZEY0VVc1QwRkJjME14YmtVc1JVRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENiR3BFTEV0QlFVMHNTMEZSTlVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdiVUlzWjBKQlFXZENhalpGTEZWQlFWVjNhRVlzYjBKQlFYTkNMRk5CUVZOdWFVWXNSMEZETjBVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zUjBGQlV5eExRVk5zUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnRRaXhuUWtGQlowSnFOa1VzVlVGQlZYTm5SaXhuUWtGQmEwSXNVMEZCVTJwb1JpeEZRVUZQYVRCRUxFZEJRMmhHTEU5QlFVOTZOa01zUlVGQlN6UndReXhSUVVGUmRVUXNiVUpCUVcxQ01XdEVMRXRCUVUwc1IwRkJTV3BETEVWQlFVOXBNRVFzU1VGUk1VUXpRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ0UWl4blFrRkJaMEpxTmtVc1ZVRkJWWGxvUml4elFrRkJkMElzVjBGRGRFVXNUMEZCVDI1blJpeExRVUZMYTJkR0xHOUNRVUZ2UWl4TFFWVnNRemQyUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd2IwSXNaMEpCUVd0Q0xFTkJRVU1zUzBGSk0wUnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndOa1VzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTjRSU3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSnFPRVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGdVJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEpxT0VRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU12UlN4SlFVRlBReXhGUVVGTkxFTkJRMWh6ZGtJc2QwSkJRWGxDTjI5RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmQzWkNMRFpDUVVOMlJHaDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpvT1VRc1UwRkJWU3Q2UXl4SlFWTjBSQ3hQUVU1QmNqVkRMRVZCUVVzMGNFTXNVVUZCVVRKQ0xHdENRVUVyUXl4RlFVRlBaMDhzUlVGREwwUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVRnpRbTVuUWl4WFFVRlpkRWtzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0yYlVJc2MwSkJRWE5DY0RaRkxGVkJRVlV5YlVRc1lVRkRPVWQxVEN4SFFVTkJRU3hKUVVOR1JTeEZRVUZKU3l4eFFrRkJkVUpPTEVkQlJYUkNReXhKUVZWVVZDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSXhORUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU4yUlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTm0xQ0xITkNRVU53UXl4UFFVRlBlbTlDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTm0xQ0xITkNRVUZ6UW5wdVFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZDBSamhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTm0xQ0xITkNRVUZ6UW5wdVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTNSR0xFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEpRVU5JTEVsQlFVbHdNRU1zUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVOMFEzUjFRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFuaHZRaXcyUWtGRGJrVlNMRVZCUVVsNWRrSXNkVUpCUVhWQ2RtbEdMRWRCUXpOQ0xFMUJRMFlzVVVGRFJYZGFMRVZCUVVzMGNFTXNVVUZCVVRaQ0xHOUNRVUZ2UWpaT0xFVkJRVXQwUml4RlFVTndRemhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTm0xQ0xITkNRVUZ6UW5CblFpeHBRa0ZETlVOeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndOa1VzVlVGQlZUSnRSQ3hoUVVOMFJHZE1MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRObTFDTEhOQ1FVRnpRbkEyUlN4VlFVRlZORzFFTEdWQlNUVkVMRTlCUVU5MVRDeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd05rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRkRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGJrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6WnRRaXh6UWtGQmMwSndia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU4wUml4SlFVRkpibmxFTEVkQlEwcEJMRVZCUVVscFZDeEZRVUZST0hSRkxEaENRVU5PYW1oR0xFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1NVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW01dlFpeDVRa0ZIT1VOdU5rTXNSVUZCU3pSd1F5eFJRVUZSTkVJc01FSkJRVEJDZUhkRExFVkJRVk5yTDBNc1JVRkRPVU53UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpadFFpeHpRa0ZCYzBKd1owSXNhVUpCUVd0Q2Nra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTJiVUlzYzBKQlFYTkNjRFpGTEZWQlFWVXliVVFzWlVGUmVFaG5UQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3TmtVc1ZVRkJWVEpvUml3eVFrRkJOa0lzVjBGRGFrWXNUMEZEUlRsdlJTeEZRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMEkzYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCY1VJc1RVRlJNVVo0Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMmJVSXNjMEpCUVhOQ2NEWkZMRlZCUVZVMmFFWXNNa0pCUVRaQ0xGTkJRVk40YVVZc1IwRkRNVVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVsQlFVdHFReXhKUVZONlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelp0UWl4elFrRkJjMEp3TmtVc1ZVRkJWVFJvUml4MVFrRkJlVUlzVTBGQlUzWjFRaXhGUVVGWFF5eEhRVU5xUnl4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFbEJRVXNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWpkdVFpeEpRVkZxU0ROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5tMUNMSE5DUVVGelFuQTJSU3hWUVVGVk9HaEdMRFpDUVVFclFpeFhRVU51Uml4UFFVRlBlR2RHTEV0QlFVdDFaMFlzTWtKQlFUSkNMRXRCVDNKRGFIQkZMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGRrVXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2JEaEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoYkVaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNiRGhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRPVVVzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXSHA2UkN4TFFVRTJReXhQUVVGMFEybERMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEyaEZiV2hHTEU5QlFTdERMRTlCUVhSRGJtaEdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEyeEZiMmhHTEUxQlFUaERMRTlCUVhSRGNHaEdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEycEZkMFVzUzBGQk5rTXNUMEZCZEVONFJTeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOb1JYRm9SaXhUUVVGcFJDeFBRVUYwUTNKb1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOd1JYTm9SaXhUUVVGcFJDeFBRVUYwUTNSb1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOd1JYVm9SaXhoUVVGeFJDeFBRVUYwUTNab1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVONFJYZG9SaXhYUVVGdFJDeFBRVUYwUTNob1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOMFJYbG9SaXhUUVVGclJDeFBRVUYyUTNwb1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hGUVVOeVJUaHlSQ3hUUVVGVk9YSkVMRVZCUVVsMWVFUXNSVUZCU1hOeFFpeGxRVUZwUWpseFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE16aEVMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNSMEZEYUVjd2FFWXNaVUZCSzBRc1QwRkJPVU14YUVZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVXbERMR2RDUVVGblFubE9MRVZCUVVzc1ZVRkJaV01zUlVGQldYSjVSQ3hIUVUxd1JpeFBRVWhKYzNoRUxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UWpNMFFpeHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEzUkZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlEzQkRMRTlCUVU4eGIwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNNVzVDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVjNKR09FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNNVzVDTERSQ1FVRTRRaXhUUVVGVFVpeEZRVUZMZEVZc1IwRkRja1lzUzBGQlQwRXNSVUZCVDJoYUxHTkJRMUpuV2l4RlFVRlBhbG9zWTBGRVl5eERRVXQ2UWl4UFFVUlphVm9zUlVGQlQzQmFMR3RDUVVWdVFpeExRVUZMTEVWQlEwZ3NTVUZCU1hBd1F5eEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNSEZDTEZGQlFWRjRPVVVzUjBGRFdpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUM1poTEZsQlF6RkRObVlzUlVGQlNXOTNRaXhWUVVGVmJHcEdMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFUQkZkM1JFTEVWQlFVOXFZU3hYUVVOeVJuVm1MRVZCUVVseGQwSXNVMEZCVTI1cVJpeEhRVU5pTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGNVJYZDBSQ3hGUVVGUGFtRXNWMEZEY0VaMVppeEZRVUZKZVVjc1VVRkJVWFkxUkN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpjM2RDTEZsQlFWbHdha1lzUjBGRGFFSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVbDFkMElzV1VGQldYSnFSaXhIUVVOb1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNYZDNRaXhuUWtGQlowSjBha1lzUjBGRGNFSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkyWVN4WlFVTXhRelptTEVWQlFVbDVkMElzWTBGQlkzWnFSaXhIUVVOc1FpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUQjNRaXhaUVVGWmVHcEdMRWRCUTJoQ0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGRGRFTnFkVUlzUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaGJtOUNMRFpDUVVNMVJGSXNSVUZCU1d0eVFpeFhRVUZYYUN0RkxFZEJRMllzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWt5ZDBJc2EwSkJRV3RDZW1wR0xFZEJRM1JDTEUxQlEwWXNVVUZEUlhkMFJDeEZRVUZQTjFrc1lVRkpXQ3hQUVVGUGJXVXNSMEZSVkZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRM0pGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjbTVDTEhkQ1FVRjNRakY0UkN4TFFVRk5lWGhFTEVkQlEyeEZRU3hGUVVGUGNsa3NiVUpCVjJoQ2FWZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjbTVDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEY2tZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVTXNUMEZFVkhKNVJDeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlR6TmhMRmRCUTB3c1JVRkRRWGd6UXl4SFFVbExMRTlCUkZSQkxFVkJRWE5GYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSVzVIYXk5RExFVkJRVTl5WVN4VlFVTk1MRVZCUTBFNU0wTXNSMEZKU3l4UFFVUlVRU3hGUVVGeFJXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWc1Iyc3ZReXhGUVVGUGNtRXNWVUZEVEN4RlFVTkJPVE5ETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTWtKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZUVSckwwTXNSVUZCVHpOaExGZEJRMHdzUlVGRFFYZ3pReXhIUVVsTExFOUJSRlJCTEVWQlFUSkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYaEVheTlETEVWQlFVOXFZU3haUVVOTUxFZEJRMEZzTkVNc1IwRkpTeXhQUVVSVVFTeEZRVUZKYVZRc1JVRkJVVFJ2UlN4bFFVVldNWEJDTEVWQlFVOHpWeXhoUVVOTUxFVkJRMEY0TjBNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1c1Q0xIbENRVWs1UWl4UFFVUlVjSGxFTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFZEJRMEUzTTBNc1NVRlRUaXQzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VJd1NTeExRVUZQTEVOQlEyaEVReXhaUVVGaExFVkJRMkpETEZkQlFWa3NSVUZEV2tNc1YwRkJXU3hGUVVOYVF5eFpRVUZoTEVWQlEySkRMRmRCUVZrc1JVRkRXa01zWVVGQll5eEZRVU5rUXl4aFFVRmpMRVZCUTJSRExGVkJRVmNzUlVGRFdFTXNXVUZCWVN4RlFVTmlReXhYUVVGWkxFZEJRMXBETEdGQlFXTXNSMEZEWkVNc1YwRkJXU3hIUVVOYVF5eFpRVUZoTEVkQlEySkRMRlZCUVZjc1IwRkRXRU1zWTBGQlpTeEhRVU5tUXl4alFVRmxMRWRCUTJaRExGbEJRV0VzUjBGRFlrTXNXVUZCWVN4SlFVMW1kSGxDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UWpaS0xFMUJRVkVzUTBGRGFrUkRMR1ZCUVdkQ0xFVkJRMmhDUXl4bFFVRm5RaXhGUVVOb1FrTXNaVUZCWjBJc1IwRlBiRUl4ZVVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZVeU9VVXNVVUZCVlN4WFFVTTNSQ3hQUVVFNFFqbHJSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZOamhGTEZGQlFWVXNVMEZCVTNnNVJTeEhRVU4wUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVFE1UlN4VlFVRlpMRmRCUXk5RUxFOUJRVTh2YTBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRZNVJTeFJRVUZWTEZkQlF6ZEVMRTlCUVhsRExFMUJRV3hEYUd4RkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZYTnJSaXhWUVVGWkxGZEJReTlFTEU5QlFUaENlbkpGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzU1VGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlYxYVVZc1ZVRkJXU3hUUVVGVGJHcEdMRWRCUTNoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWZFd0R0xGbEJRV01zVjBGRGFrVXNUMEZCVHpGeVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVmQydEdMRlZCUVZrc1YwRkRMMFFzVDBGQmVVTXNUVUZCYkVNemNrVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZlV3RHTEZOQlFWY3NWMEZET1VRc1QwRkJlVVUxY2tVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4SlFWRnlTSEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlhkcFJpeFRRVUZYTEZOQlFWTnVha1lzUjBGRGRrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZVd2EwWXNWMEZCWVN4WFFVTm9SU3hQUVVGUE4zSkZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVXlhMFlzVTBGQlZ5eFhRVU01UkN4UFFVRjVReXhOUVVGc1F6bHlSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlU0TkVRc1VVRkJWU3hYUVVNM1JDeFBRVUYzUldwblJDeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVWEJJY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVk5EUkVMRkZCUVZVc1UwRkJVM1kxUkN4SFFVTjBSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUUnJSaXhWUVVGWkxGZEJReTlFTEU5QlFVOHZja1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVFpyUml4UlFVRlZMRmRCUXpkRUxFOUJRWGxETEUxQlFXeERhSE5GTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRSNFJTeFpRVUZqTEZkQlEycEZMRTlCUVRoQ0x6UkVMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVjVhVVlzV1VGQll5eFRRVUZUY0dwR0xFZEJRekZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZPR3RHTEdOQlFXZENMRmRCUTI1RkxFOUJRVTlxYzBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlN0clJpeFpRVUZqTEZkQlEycEZMRTlCUVhsRExFMUJRV3hEYkhORkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZXZHNSaXhaUVVGakxGZEJRMnBGTEU5QlFUaENibk5GTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlV3YVVZc1dVRkJZeXhUUVVGVGNtcEdMRWRCUXpGRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWYVd4R0xHTkJRV2RDTEZkQlEyNUZMRTlCUVU5d2MwVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZXdHNSaXhaUVVGakxGZEJRMnBGTEU5QlFYbERMRTFCUVd4RGNuTkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVzFzUml4blFrRkJhMElzVjBGRGNrVXNUMEZCT0VKMGMwVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUSnBSaXhuUWtGQmEwSXNVMEZCVTNScVJpeEhRVU01UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh0UWl4eFFrRkJjVUp5TmtVc1ZVRkJWVzlzUml4clFrRkJiMElzVjBGRGRrVXNUMEZCVDNaelJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVmNXeEdMR2RDUVVGclFpeFhRVU55UlN4UFFVRjVReXhOUVVGc1EzaHpSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlZ6YkVZc1kwRkJaMElzVjBGRGJrVXNUMEZCT0VKNmMwVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eEpRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUUnBSaXhqUVVGblFpeFRRVUZUZG1wR0xFZEJRelZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZkV3hHTEdkQ1FVRnJRaXhYUVVOeVJTeFBRVUZQTVhORkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZWM2JFWXNZMEZCWjBJc1YwRkRia1VzVDBGQmVVTXNUVUZCYkVNemMwVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZlV3hHTEZsQlFXTXNWMEZEYWtVc1QwRkJPRUkxYzBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSMEZCU1N4TFFWRXpSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodFFpeHhRa0ZCY1VKeU5rVXNWVUZCVlRacFJpeFpRVUZqTEZOQlFWTjRha1lzUjBGRE1VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJVSXNjVUpCUVhGQ2NqWkZMRlZCUVZVd2JFWXNZMEZCWjBJc1YwRkRia1VzVDBGQlR6ZHpSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVVVGQlNUSjRSQ3hKUVZGNlEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzFDTEhGQ1FVRnhRbkkyUlN4VlFVRlZNbXhHTEZsQlFXTXNWMEZEYWtVc1QwRkJNRU1zVFVGQmJrTTVjMFVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEV0QlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWZVRoRkxGZEJRV0VzVjBGRGFFVXNUMEZEUlRWcVJTeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZqTEVsQlVUTkZibkJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0cxQ0xIRkNRVUZ4UW5JMlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVONlJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HMUNMSEZDUVVGeFFuSTJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkRiRVVzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVm5MMFVzVjBGQllTeFhRVU5vUlN4UFFVRjVReXhOUVVGc1EyNXRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlUwYkVZc2EwSkJRVzlDTEZkQlEzWkZMRTlCUVN0Q0wzTkZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVsQlFVa3NTVUZSYmtaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRiVUlzY1VKQlFYRkNjalpGTEZWQlFWVTRhVVlzYTBKQlFXOUNMRk5CUVZONmFrWXNSMEZEYUVZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YlVJc2NVSkJRWEZDY2paRkxGVkJRVlUyYkVZc2IwSkJRWE5DTEZkQlEzcEZMRTlCUVU5b2RFVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRkZCUVVreWVFUXNTVUZSZWtOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHRRaXh4UWtGQmNVSnlOa1VzVlVGQlZUaHNSaXhyUWtGQmIwSXNWMEZEZGtVc1QwRkJNRU1zVFVGQmJrTnFkRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEV0QlQycERkVmdzUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBOa1VzVlVGQlZXMWxMRk5CUVZjc1UwRkJVemg2UXl4SFFVTjJSU3hQUVVGUFRpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSnVPRVFzVTBGQlV6aDZReXhGUVVGeFFqTjNSQ3hQUVdGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUp1T0VRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU01UlN4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZZW5wRUxFdEJRVFpETEU5QlFYUkRhVU1zUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRk5CUVdOakxFVkJRVmx5ZVVRc1JVRkRhRVU0Y2tRc1UwRkJWVGx5UkN4RlFVRkpkWGhFTEVWQlFVbHpjVUlzWlVGQmFVSTVjVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZVFU0UkN4VFFVRlRLM3BETEVWQlFXbENkSGhFTEVsQlRXeEhMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ05UUkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRkRVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkRjRU1zVDBGQlR6TnZRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUl6YmtJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGNrWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUl6YmtJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU55Uml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWt3Y1VJc1VVRkJVWGc1UlN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkRkRU5zZFVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhjRzlDTERaQ1FVTTFSRklzUlVGQlNXdHlRaXhYUVVGWGFDdEZMRWRCUTJZc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBOa1VzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEY2tVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUowYmtJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRiRVZCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUowYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOeVJpeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRkphVlFzUlVGQlVUUnZSU3hsUVVWV01YQkNMRVZCUVU4elZ5eGhRVU5NTEVWQlEwRjROME1zUlVGRFFTdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMMjVDTERCQ1FWVjZRM0pDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzIxQ0xIRkNRVUZ4UW5RMlJTeFZRVUZWTWpsRkxGRkJRVlVzVjBGRE4wUXNUMEZCT0VJNWEwVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHRRaXh4UWtGQmNVSjBOa1VzVlVGQlZUWTRSU3hSUVVGVkxGTkJRVk40T1VVc1IwRkRkRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYRkNkRFpGTEZWQlFWVTBPVVVzVlVGQldTeFhRVU12UkN4UFFVRlBMMnRGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYlVJc2NVSkJRWEZDZERaRkxGVkJRVlUyT1VVc1VVRkJWU3hYUVVNM1JDeFBRVUY1UXl4TlFVRnNRMmhzUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ2REWkZMRlZCUVZWNU9FVXNWMEZCWVN4WFFVTm9SU3hQUVVORk5XcEZMRVZCUVVzMGNFTXNVVUZCVVhsRUxHZENRVUZuUWpWclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdNc1NVRlJNMFZ3Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJVSXNjVUpCUVhGQ2REWkZMRlZCUVZWeE9VVXNWMEZCWVN4VFFVRlRhQ3RGTEVkQlEzcEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkUwUkN4blFrRkJaMEl2YTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSTDBOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJiVUlzY1VKQlFYRkNkRFpGTEZWQlFWVXJLMFVzWVVGQlpTeFhRVU5zUlN4UFFVRlBlamxGTEV0QlFVc3JOMFVzWjBKQlFWZHdjVUlzU1VGUmVrSjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR0UWl4eFFrRkJjVUowTmtVc1ZVRkJWV2N2UlN4WFFVRmhMRmRCUTJoRkxFOUJRWGxETEUxQlFXeERibTFGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWVnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMmIwSXNaMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlNUZEVialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRkRVVzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNjRGhFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaGFrWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDY0RoRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETjBVc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0hwNlJDeExRVUUyUXl4UFFVRjBRMmxETEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTkU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFVkJRMmhGYld4R0xGVkJRVmRzZEVVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVrMmVrSXNaVUZEZWtOeU1FSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENkRGhFTEZOQlFWVXJla01zUjBGRGVrUjRSaXhUUVVGVk9YSkVMRVZCUVVsMWVFUXNSVUZCU1hOeFFpeGxRVUZwUWpseFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWk56aEVMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNSMEZETDBackwwVXNhMEpCUVcxQ2FtNUZMRVZCUVVzMGNFTXNVVUZCVVRCQ0xHRkJRV0ZuVHl4RlFVRkpOSFJDTEhWQ1FVTnFSSEIxUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5JNFJDeFRRVUZWSzNwRExFZEJRM1JGT0hSQ0xHbENRVUZwUlN4UFFVRTVRM0F2UlN4RlFVRkphVmtzUlVGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ01rNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRWRCVFhSR0xFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDTnpSQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRGNrVXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGRGNFTXNUMEZCVHpWdlFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSTFia0lzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYY0VZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSTFia0lzTkVKQlFUaENMRk5CUVZOU0xFVkJRVXQwUml4SFFVTndSaXhMUVVGUFFTeEZRVUZQYUZvc1kwRkRVbWRhTEVWQlFVOXFXaXhqUVVSakxFTkJTM3BDTEU5QlJGbHBXaXhGUVVGUGNGb3NhMEpCUlc1Q0xFdEJRVXNzUlVGRFNDeEpRVUZKY0RCRExFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVa3djVUlzVVVGQlVYZzVSU3hIUVVOYUxFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRlJMRWxCUVVsemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlEzUkROWFJDTEVWQlFVODVXQ3haUVVGWk1URkRMRVZCUVUxemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENPVzVDTERaQ1FVTjRSVklzUlVGQlNUaDZRaXhUUVVGVE5XMUdMRWRCUTJJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFWRXNTVUZCU1hONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVOMFEyNTFRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZseWIwSXNOa0pCUXpORVVpeEZRVUZKYTNKQ0xGZEJRVmRvSzBVc1IwRkRaaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRekZFTTNSQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEkzYmtJc05rSkJRM0pHVWl4RlFVRkphM1ZDTEdsQ1FVRnBRbWhvUml4SFFVTnlRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTVzExUWl4blFrRkJaMEpxYUVZc1IwRkRjRUlzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMk5rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRjRVVzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGFrVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU53Uml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNTVUZIU2tFc1JVRkJTV2xVTEVWQlFWRnRlVVVzWjBKQlEwNTBiRVlzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTgxVlN4eFFrRkRUQ3hGUVVOQmRqbERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENlbTVDTEhsQ1FVa3hReXhQUVVSVWNIbEVMRVZCUVVscFZDeEZRVUZSTkc5RkxHVkJSVll4Y0VJc1JVRkJUek5YTEdGQlEwd3NSVUZEUVhnM1F5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb2IwSXNNRUpCUjNSRGNIbEVMRVZCUVVscFZDeEZRVUZSYTNORkxIZENRVU5PY2k5RkxFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1JVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRV3RDZUc1Q0xEQkNRVWRvUlhCNVJDeEZRVUZKYVZRc1JVRkJVVEJ6UlN4MVFrRkRUamN2UlN4UFFVRlRMRWRCUTJKeGVVUXNSVUZCVHpsVkxHOUNRVU5NTEVWQlEwRnlPVU1zU1VGVFJtbFpMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q1F5eHJRa0ZCYTBKNE5rVXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVONFJpeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5JNFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVzVIY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q2NqaEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGREwwWXNTVUZCU1haNFJDeEZRVUZIZDNoRUxFVkJRVTBzUTBGRFdETklMRTFCUVRoRExFOUJRWFJETjNCRUxFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUTJwRmRUSkRMRWxCUVRSRExFOUJRWFJEZGpKRExFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRWRCVFdwRkxFOUJTRWx6ZUVRc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEk1TkVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVOMlJpeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUTNoRUxFOUJRVTgzYjBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q1F5eHJRa0ZCYTBJM2JrSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhkRWM0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUWpkdVFpdzBRa0ZCT0VJc1UwRkJVMUlzUlVGQlMzUkdMRWRCUTNSSExFdEJRVTlCTEVWQlFVOW9XaXhqUVVOU1oxb3NSVUZCVDJwYUxHTkJSR01zUTBGTGVrSXNUMEZFV1dsYUxFVkJRVTl3V2l4clFrRkZia0lzUzBGQlN5eEZRVU5JTEVsQlFVbHdNRU1zUlVGQkswSjNkRVFzUlVGQlQzWmhMRmxCUXpGRE5tWXNSVUZCU1hGMVFpeFRRVUZUYm1oR0xFZEJRMklzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5MllTeFpRVU14UXpabUxFVkJRVWszYUVJc1QwRkJUMnA0UXl4SFFVTllMRTFCUTBZc1VVRkRSWGQwUkN4RlFVRlBOMWtzWVVGSldDeFBRVUZQYldVc1IwRlJWRklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEo0TmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGRFWXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5odVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU51UmtFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRV3RDZUc1Q0xIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRGRFY3NTVUZCU1c1NVJDeFBRVUZKY1hsRUxFVkJSVU1zVDBGRVZISjVSQ3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUE0yRXNWMEZEVEN4RlFVTkJlRE5ETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUek5oTEZkQlEwd3NSVUZEUVhnelF5eEpRVlZPSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFrTXNhMEpCUVd0Q2VEWkZMRlZCUVZWNVowWXNVMEZCVnl4WFFVTXZSU3hQUVVFNFFqVnVSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXdENlRFpGTEZWQlFWVjNaMFlzVTBGQlZ5eFRRVUZUYm1oR0xFZEJRM2hHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXdENlRFpGTEZWQlFWVXdaMFlzVjBGQllTeFhRVU5xUml4UFFVRlBOMjVGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDUXl4clFrRkJhMEo0TmtVc1ZVRkJWVEpuUml4VFFVRlhMRmRCUXk5RkxFOUJRWGxETEUxQlFXeERPVzVGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKRExHdENRVUZyUW5nMlJTeFZRVUZWY1hkRExFOUJRVk1zVjBGRE4wVXNUMEZCT0VKNE0wSXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eEpRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSkRMR3RDUVVGclFuZzJSU3hWUVVGVmMzZERMRTlCUVZNc1UwRkJVMnA0UXl4SFFVTjBSaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSkRMR3RDUVVGclFuZzJSU3hWUVVGVk5HZEdMRk5CUVZjc1YwRkRMMFVzVDBGQlR5OXVSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRa01zYTBKQlFXdENlRFpGTEZWQlFWVTJaMFlzVDBGQlV5eFhRVU0zUlN4UFFVRjVReXhOUVVGc1EyaHZSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDZGpaRkxGVkJRVlV5T1VVc1VVRkJWU3hYUVVNMVJDeFBRVUU0UWpsclJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuWTJSU3hWUVVGVk5qaEZMRkZCUVZVc1UwRkJVM2c1UlN4SFFVTnlSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyZHVRaXh2UWtGQmIwSjJOa1VzVlVGQlZUUTVSU3hWUVVGWkxGZEJRemxFTEU5QlFVOHZhMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyTmtVc1ZVRkJWVFk1UlN4UlFVRlZMRmRCUXpWRUxFOUJRWGxETEUxQlFXeERhR3hGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJkdVFpeHZRa0ZCYjBKMk5rVXNWVUZCVldkdFJpeGhRVUZsTEZkQlEycEZMRTlCUTBWdWRFVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVRCQ0xFbEJVUzlHT1c5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuWTJSU3hWUVVGVmEyMUdMR0ZCUVdVc1UwRkJVemR0Uml4SFFVTXhSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzUlVGQlIycERMRWxCVTNaRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblkyUlN4VlFVRlZhVzFHTEZOQlFWY3NVMEZCVXpWNVFpeEZRVUZYUXl4SFFVTnFSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVWQlFVY3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRhMjVDTEhsQ1FVRXdRbTV1UWl4SlFWRndTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWYlcxR0xHVkJRV2xDTEZkQlEyNUZMRTlCUVU4M2EwWXNTMEZCU3pSclJpeGhRVUZoTEV0QlVUTkNkakJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWZVRoRkxGZEJRV0VzVjBGREwwUXNUMEZEUlRWcVJTeEZRVUZMTkhCRExGRkJRVkY1UkN4blFrRkJaMEkxYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZoTEVsQlVURkZjbkJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UW5ZMlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVONFJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVFoyNUNMRzlDUVVGdlFuWTJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkRha1VzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVm5MMFVzVjBGQllTeFhRVU12UkN4UFFVRjVReXhOUVVGc1EyNXRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDZGpaRkxGVkJRVlVyTDBVc2NVSkJRWFZDTEZkQlEzcEZMRTlCUTBWc2JrVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q1F5eHJRa0ZCYlVJc1NVRlJOVWMzYjBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWemFFWXNjVUpCUVhWQ0xGTkJRVk5xYVVZc1IwRkRiRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVWQlFVZHFReXhKUVZOMlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMmR1UWl4dlFrRkJiMEoyTmtVc1ZVRkJWWEZuUml4cFFrRkJiVUlzVTBGQlUyaDBRaXhGUVVGWFF5eEhRVU42Uml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFVkJRVWNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUWjI1Q0xHOUNRVUZ2UWtNc2EwSkJRVzFDYkc1Q0xFbEJVV3BKTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZObmJrSXNiMEpCUVc5Q2RqWkZMRlZCUVZWMWFFWXNkVUpCUVhsQ0xGZEJRek5GTEU5QlFVOXFaMFlzUzBGQlMyZG5SaXh4UWtGQmNVSXNTMEZSYmtNemRrSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVjFaMFlzYjBKQlFYTkNMRmRCUTNoRkxFOUJRWE5ETVc1RkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRbXhxUkN4TFFVRk5MRWxCVVRWRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRaMjVDTEc5Q1FVRnZRblkyUlN4VlFVRlZkMmhHTEc5Q1FVRnpRaXhUUVVGVGJtbEdMRWRCUTJwR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVkQlFWTXNTMEZUYWtSemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTm5ia0lzYjBKQlFXOUNkalpGTEZWQlFWVnpaMFlzWjBKQlFXdENMRk5CUVZOcWFFWXNSVUZCVDJrd1JDeEhRVU53Uml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVYVkVMRzFDUVVGdFFqRnJSQ3hMUVVGTkxFVkJRVWRxUXl4RlFVRlBhVEJFTEVsQlVYcEVNMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5uYmtJc2IwSkJRVzlDZGpaRkxGVkJRVlY1YUVZc2MwSkJRWGRDTEZkQlF6RkZMRTlCUVU5dVowWXNTMEZCUzJ0blJpeHZRa0ZCYjBJc1MwRlBPVUl6YjBVc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUo2TmtVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU16UlN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUowT0VRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRjBSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKME9FUXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOc1JpeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWWVucEVMRXRCUVRaRExFOUJRWFJEYVVNc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEYUVWdGFFWXNUMEZCSzBNc1QwRkJkRU51YUVZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEYkVVNGNrUXNVMEZCVlRseVJDeEZRVUZKZFhoRUxFVkJRVWx6Y1VJc1pVRkJhVUk1Y1VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ09UaEVMRk5CUVZNcmVrTXNSVUZCYVVKMGVFUXNTVUZOZEVjc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUl2TkVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNeFJTeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVOd1F5eFBRVUZQT1c5Q0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVGNVFqbHVRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmQ2UmpoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVGNVFqbHVRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlEzcEdMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUQnhRaXhSUVVGUmVEbEZMRWRCUTFvc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOTJZU3haUVVNeFF6Wm1MRVZCUVVsdmQwSXNWVUZCVld4cVJpeEhRVU5rTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUTNSRGNIVkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2RHOUNMRFpDUVVOb1JWSXNSVUZCU1d0eVFpeFhRVUZYYUN0RkxFZEJRMllzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKNk5rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkRla1VzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZia0lzZDBKQlFYZENNWGhFTEV0QlFVMTVlRVFzUjBGRGRFVkJMRVZCUVU5eVdTeHRRa0ZYYUVKcFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZia0lzZDBKQlFUQkNMRk5CUVZOdUwwTXNSVUZCVTJzdlF5eEhRVU42Uml4SlFVRkpibmxFTEU5QlFVbHhlVVFzUlVGRlF5eFBRVVJVY25sRUxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRVZCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUE0yRXNWMEZEVEN4RlFVTkJlRE5ETEVkQlNVc3NUMEZFVkVFc1JVRkJTV2xVTEVWQlFWRTBiMFVzWlVGRlZqRndRaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDYW05Q0xEQkNRVlUzUTNKQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVGNVFubzJSU3hWUVVGVk1qbEZMRkZCUVZVc1YwRkRha1VzVDBGQk9FSTVhMFVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhMUVZFeFJYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUo2TmtVc1ZVRkJWVFk0UlN4UlFVRlZMRk5CUVZONE9VVXNSMEZETVVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk5yYmtJc2VVSkJRWGxDZWpaRkxGVkJRVlUwT1VVc1ZVRkJXU3hYUVVOdVJTeFBRVUZQTDJ0RkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOcmJrSXNlVUpCUVhsQ2VqWkZMRlZCUVZVMk9VVXNVVUZCVlN4WFFVTnFSU3hQUVVGNVF5eE5RVUZzUTJoc1JTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENlalpGTEZWQlFWVnphMFlzVlVGQldTeFhRVU51UlN4UFFVRTRRbnB5UlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEZRVUZITEVsQlVURkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UW5vMlJTeFZRVUZWZFdsR0xGVkJRVmtzVTBGQlUyeHFSaXhIUVVNMVJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTJ0dVFpeDVRa0ZCZVVKNk5rVXNWVUZCVlhWclJpeFpRVUZqTEZkQlEzSkZMRTlCUVU4eGNrVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUydHVRaXg1UWtGQmVVSjZOa1VzVlVGQlZYZHJSaXhWUVVGWkxGZEJRMjVGTEU5QlFYbERMRTFCUVd4RE0zSkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMnR1UWl4NVFrRkJlVUo2TmtVc1ZVRkJWWGs0UlN4WFFVRmhMRmRCUTNCRkxFOUJRMFUxYWtVc1JVRkJTelJ3UXl4UlFVRlJlVVFzWjBKQlFXZENOV3RFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV3RDTEVsQlVTOUZkSEJDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYTI1Q0xIbENRVUY1UW5vMlJTeFZRVUZWY1RsRkxGZEJRV0VzVTBGQlUyZ3JSU3hIUVVNM1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJORVFzWjBKQlFXZENMMnRFTEV0QlFVMHNSVUZCUjJwRExFbEJVUzlEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGEyNUNMSGxDUVVGNVFubzJSU3hWUVVGVkt5dEZMR0ZCUVdVc1YwRkRkRVVzVDBGQlQzbzVSU3hMUVVGTEt6ZEZMR2RDUVVGWGNIRkNMRWxCVVhwQ2RFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnJia0lzZVVKQlFYbENlalpGTEZWQlFWVm5MMFVzVjBGQllTeFhRVU53UlN4UFFVRjVReXhOUVVGc1EyNXRSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGVmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk50YmtJc2RVSkJRWFZDTVc5Q0xHZENRVUZyUWl4RFFVRkRMRWRCU1RWRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ01UWkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGRGVrVXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ2RqaEVMRk5CUVZNNGVrTXNSVUZCY1VJemQwUXNUMEZoY0VaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYVkNkamhFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRhRVlzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXSHA2UkN4TFFVRTJReXhQUVVGMFEybERMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEyaEZkMnhHTEZkQlFWbDJkRVVzUlVGQlN6UndReXhSUVVGUk1FSXNZVUZCWVdkUExFVkJRVWxyTUVJc1owSkJRekZETVRCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFuZzRSQ3hUUVVGVkszcERMRWRCUTNSRWVFWXNVMEZCVlRseVJDeEZRVUZKZFhoRUxFVkJRVWx6Y1VJc1pVRkJhVUk1Y1VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWlM4NFJDeFRRVUZUSzNwRExFVkJRV2xDZEhoRUxFbEJUWEJITEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYVkNhRFZDTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZEZUVVc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZEY0VNc1QwRkJUeTl2UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJdmJrSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhka1k0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJdmJrSXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVOMlJpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZEU0N4SlFVRkpjREJETEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVrd2NVSXNVVUZCVVhnNVJTeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUTNSRE9YUkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ2FHOUNMRFpDUVVOeVJWSXNSVUZCU1cwd1FpeFZRVUZWYW01R0xFZEJRMlFzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpKdVFpeGxRVU4wUTNKMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1YyYjBJc05rSkJRemxFVWl4RlFVRkphM0pDTEZkQlFWZG9LMFVzUjBGRFppeE5RVU5HTEZGQlEwVjNkRVFzUlVGQlR6ZFpMR0ZCU1Znc1QwRkJUMjFsTEVkQlVWUlNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVOMlJTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpGdVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU53UlVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpGdVFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlEzWkdMRWxCUVVsdWVVUXNUMEZCU1hGNVJDeEZRVVZETEU5QlJGUnllVVFzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVhkNVJTeHBRa0ZEVGpOc1JpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFVkJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJemJrSXNlVUpCU1haRExFOUJSRlJ3ZVVRc1JVRkJTV2xVTEVWQlFWRTBiMFVzWlVGRlZqRndRaXhGUVVGUE0xY3NZVUZEVEN4RlFVTkJlRGRETEVWQlEwRXJkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3h2UWl3d1FrRlZNME55UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJeE5rVXNWVUZCVlRJNVJTeFJRVUZWTEZkQlF5OUVMRTlCUVRoQ09XdEZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYVkNNVFpGTEZWQlFWVTJPRVVzVVVGQlZTeFRRVUZUZURsRkxFZEJRM2hGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZORGxGTEZWQlFWa3NWMEZEYWtVc1QwRkJUeTlyUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpFMlJTeFZRVUZWTmpsRkxGRkJRVlVzVjBGREwwUXNUMEZCZVVNc1RVRkJiRU5vYkVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGJXNUNMSFZDUVVGMVFqRTJSU3hWUVVGVmNXMUdMR05CUVdkQ0xGZEJRM0pGTEU5QlEwVjRkRVVzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYVkNMRWxCVVRWR2FIQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZkVzFHTEdOQlFXZENMRk5CUVZOc2JrWXNSMEZET1VVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWTjJSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTIxdVFpeDFRa0ZCZFVJeE5rVXNWVUZCVlhOdFJpeFZRVUZaTEZOQlFWTnFla0lzUlVGQlYwTXNSMEZEY2tZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCZFVKeWJrSXNTVUZSYWtnelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyMXVRaXgxUWtGQmRVSXhOa1VzVlVGQlZYZHRSaXhuUWtGQmEwSXNWMEZEZGtVc1QwRkJUMnhzUml4TFFVRkxhV3hHTEdOQlFXTXNTMEZSTlVJMU1FSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnRia0lzZFVKQlFYVkNNVFpGTEZWQlFWVjVPRVVzVjBGQllTeFhRVU5zUlN4UFFVTkZOV3BGTEVWQlFVczBjRU1zVVVGQlVYbEVMR2RDUVVGblFqVnJSQ3hMUVVGTmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXZENMRWxCVVRkRmRuQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiVzVDTEhWQ1FVRjFRakUyUlN4VlFVRlZjVGxGTEZkQlFXRXNVMEZCVTJnclJTeEhRVU16UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk5FUXNaMEpCUVdkQ0wydEVMRXRCUVUwc1JVRkJSMnBETEVsQlVTOURjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYlc1Q0xIVkNRVUYxUWpFMlJTeFZRVUZWS3l0RkxHRkJRV1VzVjBGRGNFVXNUMEZCVDNvNVJTeExRVUZMS3pkRkxHZENRVUZYY0hGQ0xFbEJVWHBDZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdGJrSXNkVUpCUVhWQ01UWkZMRlZCUVZWbkwwVXNWMEZCWVN4WFFVTnNSU3hQUVVGNVF5eE5RVUZzUTI1dFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZQYWtOMVdDeEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTNoRkxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UW5nNFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVzVHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFuZzRSQ3hUUVVGWExGTkJRVk1yZWtNc1JVRkJhVUpETEVkQlF5OUZMRWxCUVVsMmVFUXNSVUZCUjNkNFJDeEZRVUZOTEVOQlExaDZla1FzUzBGQk5rTXNUMEZCZEVOcFF5eEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOb1JUWnNSaXhWUVVGclJDeFBRVUYwUXpkc1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOeVJUaHNSaXhYUVVGdFJDeFBRVUYwUXpsc1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVOMFJUaHlSQ3hUUVVGVk9YSkVMRVZCUVVsMWVFUXNSVUZCU1hOeFFpeGxRVUZwUWpseFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNMU4wTXNVMEZCVXl0NlF5eEZRVUZwUW5SNFJDeEhRVU5xUnl0c1JpeG5Ra0ZCYVVJNWRFVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhIUVVGSExFZEJRMnBGZVRCQ0xHZENRVUZwUWk5MFJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWRCUVVjc1NVRk5ia1VzVDBGSVNVUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ2FqVkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRka1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkRjRU1zVDBGQlQyaHdRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEpvYjBJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGRFWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEpvYjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU4wUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWt3Y1VJc1VVRkJVWGc1UlN4SFFVTmFMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpNREJDTEdGQlFXRjRia1lzUjBGRGFrSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVa3lNRUlzWTBGQlkzcHVSaXhIUVVOc1FpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGRGRFTnNUaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWTNCSUxEWkNRVU0zUkZJc1JVRkJTV3R5UWl4WFFVRlhhQ3RGTEVkQlEyWXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRV2REZDNSRUxFVkJRVTlzWVN4WFFVTXpRM2RtTEVWQlFVazBNRUlzYlVKQlFXMUNNVzVHTEVkQlEzWkNMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkpOakJDTEcxQ1FVRnRRak51Uml4SFFVTjJRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWZVdoRUxHZENRVUZyUWl4WFFVTjBSU3hKUVVGSmMxSXNSVUZCVXl4SlFVRkpiRFpETEVWQlFVdHJhRU1zWVVGRmRFSXNUMEZFUVRSWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTnVRaXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVOdVJVRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTnVRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRM1JHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hGUVVWRExFOUJSRlJ5ZVVRc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCU1dsVUxFVkJRVkUwYjBVc1pVRkZWakZ3UWl4RlFVRlBNMWNzWVVGRFRDeEZRVU5CZURkRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM1J5eGpRVUZqTDBjc2VVSkJTUzlDTEU5QlJGUndlVVFzUlVGQk5FSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVrUnJMME1zUlVGQlQzUmhMRlZCUTB3c1JVRkRRVGN6UXl4SFFVbExMRTlCUkZSQkxFVkJRVFJDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWHBFYXk5RExFVkJRVTkwWVN4VlFVTk1MRVZCUTBFM00wTXNTVUZWVGl0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSXpOa1VzVlVGQlZUSTVSU3hSUVVGVkxGZEJRemxFTEU5QlFUaENPV3RGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DTXpaRkxGVkJRVlUyT0VVc1VVRkJWU3hUUVVGVGVEbEZMRWRCUTNaRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWTkRsRkxGVkJRVmtzVjBGRGFFVXNUMEZCVHk5clJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTTJSU3hWUVVGVk5qbEZMRkZCUVZVc1YwRkRPVVFzVDBGQmVVTXNUVUZCYkVOb2JFVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZhVzVHTEdGQlFXVXNWMEZEYmtVc1QwRkJPRUp3ZFVVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlRadFJpeGhRVUZsTEZOQlFWTjRia1lzUjBGRE5VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZWcmJrWXNaVUZCYVVJc1YwRkRja1VzVDBGQlQzSjFSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRiMjVDTEhOQ1FVRnpRak0yUlN4VlFVRlZiVzVHTEdGQlFXVXNWMEZEYmtVc1QwRkJlVU1zVFVGQmJFTjBkVVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWYjI1R0xHTkJRV2RDTEZkQlEzQkZMRTlCUVRoQ2RuVkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTMEZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVTRiVVlzWTBGQlowSXNVMEZCVTNwdVJpeEhRVU0zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWWEZ1Uml4blFrRkJhMElzVjBGRGRFVXNUMEZCVDNoMVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGIyNUNMSE5DUVVGelFqTTJSU3hWUVVGVmMyNUdMR05CUVdkQ0xGZEJRM0JGTEU5QlFYbERMRTFCUVd4RGVuVkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVMjl1UWl4elFrRkJjMEl6TmtVc1ZVRkJWWGs0UlN4WFFVRmhMRmRCUTJwRkxFOUJRMFUxYWtVc1JVRkJTelJ3UXl4UlFVRlJlVVFzWjBKQlFXZENOV3RFTEV0QlFVMXhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmxMRWxCVVRWRmNFa3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVnhPVVVzVjBGQllTeFRRVUZUYUN0RkxFZEJRekZGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFMFJDeG5Ra0ZCWjBJdmEwUXNTMEZCVFN4RlFVRkhha01zU1VGUkwwTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk52YmtJc2MwSkJRWE5DTXpaRkxGVkJRVlVySzBVc1lVRkJaU3hYUVVOdVJTeFBRVUZQZWpsRkxFdEJRVXNyTjBVc1owSkJRVmR3Y1VJc1NVRlJla0owUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVldjdlJTeFhRVUZoTEZkQlEycEZMRTlCUVhsRExFMUJRV3hEYm0xRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSXpOa1VzVlVGQlZYVnVSaXh0UWtGQmNVSXNWMEZEZWtVc1QwRkJLMEl4ZFVVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNSMEZCUnl4SlFWRnNSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlN0dFJpeHRRa0ZCY1VJc1UwRkJVekZ1Uml4SFFVTnNSaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUyOXVRaXh6UWtGQmMwSXpOa1VzVlVGQlZYZHVSaXh4UWtGQmRVSXNWMEZETTBVc1QwRkJUek4xUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYjI1Q0xITkNRVUZ6UWpNMlJTeFZRVUZWZVc1R0xHMUNRVUZ4UWl4WFFVTjZSU3hQUVVGNVF5eE5RVUZzUXpWMVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVXdia1lzYlVKQlFYRkNMRmRCUTNwRkxFOUJRU3RDTjNWRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWRCUVVjc1NVRlJiRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOdmJrSXNjMEpCUVhOQ016WkZMRlZCUVZWbmJrWXNiVUpCUVhGQ0xGTkJRVk16YmtZc1IwRkRiRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnZia0lzYzBKQlFYTkNNelpGTEZWQlFWVXlia1lzY1VKQlFYVkNMRmRCUXpORkxFOUJRVTg1ZFVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTI5dVFpeHpRa0ZCYzBJek5rVXNWVUZCVlRSdVJpeHRRa0ZCY1VJc1YwRkRla1VzVDBGQmVVTXNUVUZCYkVNdmRVVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVlhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFiMElzWjBKQlFXdENMRU5CUVVNc1MwRkpha1J1TlVNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRPVVFzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldYbzRSQ3hUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVhwRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWbDZPRVFzVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTnlSU3hKUVVGSmRuaEVMRVZCUVVkM2VFUXNSVUZCVFN4RFFVTlllVEZDTEZsQlFXOUVMRTlCUVhSRGFtNUdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlEzWkZhMjVHTEcxQ1FVRXlSQ3hQUVVGMFEyeHVSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTTVSVzF1Uml4clFrRkJiVUpzZGtVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNaMDRzUlVGQlN5eEpRVUZKTEVkQlEzQkZOakZDTERCQ1FVRXdSU3hQUVVFNVEzQnVSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZSYVVNc1owSkJRV2RDZVU0c1JVRkJTeXhWUVVGbFl5eEZRVUZaY25sRUxFVkJRemRHY1c1R0xHOUNRVUZ4UW5CMlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWxCUVVrc1IwRkRkRVVyTVVJc1dVRkJZWEoyUlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSnBUaXhGUVVGTExFVkJRVWNzUjBGRGRFUm5Na0lzVlVGQmJVUXNUMEZCZGtOMmJrWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTTBUaXhGUVVGTExGVkJRV1ZqTEVWQlFWbHllVVFzUlVGRGRFVjNia1lzYTBKQlFXMUNkblpGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1NVRkJTU3hIUVVOd1JXc3lRaXh2UWtGQmNVSjRka1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ1owNHNSVUZCU3l4SlFVRkpMRWRCUTNSRmJUSkNMR3RDUVVGdFFucDJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVsQlFVa3NSMEZEY0VWdk1rSXNiVUpCUVc5Q01YWkZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UW1kT0xFVkJRVXNzU1VGQlNTeEhRVU55UlhFeVFpeFhRVUZaTTNaRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRbWRPTEVWQlFVc3NTVUZCU1N4SFFVTTNSSE15UWl4bFFVRm5RalYyUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFbEJRVWtzUjBGRGFrVjFNa0lzWjBKQlFYbEVMRTlCUVhaRE9XNUdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFZRVUZsWXl4RlFVRlpjbmxFTEVWQlF6VkZLMjVHTEdkQ1FVRjVSQ3hQUVVGMlF5OXVSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTTFSV2R2Uml4WlFVRnhSQ3hQUVVGMlEyaHZSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTjRSV2x2Uml4bFFVRjNSQ3hQUVVGMlEycHZSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTXpSV3R2Uml4aFFVRnpSQ3hQUVVGMlEyeHZSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NWVUZCWldNc1JVRkJXWEo1UkN4RlFVTjZSVzF2Uml4eFFrRkJPRVFzVDBGQmRrTnViMFlzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRlZCUVdWakxFVkJRVmx5ZVVRc1JVRkRha1p2YjBZc1dVRkJjVVFzVDBGQmRrTndiMFlzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk0wVGl4RlFVRkxMRlZCUVdWakxFVkJRVmx5ZVVRc1JVRkRlRVU0WjBZc2QwSkJRWGxDTjI5RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmQzWkNMRFpDUVVOMlJHaDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpvT1VRc1UwRkJWU3Q2UXl4SlFWTjBSQ3hQUVU1QmNqVkRMRVZCUVVzMGNFTXNVVUZCVVRKQ0xHdENRVUVyUXl4RlFVRlBaMDhzUlVGREwwUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWa3paMElzVjBGQldYUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUSnRSQ3hoUVVNeFJuVk1MRWRCUTBGQkxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmxzTlVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNM1JDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUTNCRExFOUJRVTlxY0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1dwdlFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzFSVGhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmxxYjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU0xUlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWs0TWtJc1pVRkJaVFZ3Uml4SFFVTnVRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTU3N5UWl4elFrRkJjMEkzY0VZc1IwRkRNVUlzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWxuTTBJc2NVSkJRWEZDT1hCR0xFZEJRM3BDTEUxQlEwWXNTMEZCU3l4SFFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKYVROQ0xEWkNRVUUyUWk5d1JpeEhRVU5xUXl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQlowTjNkRVFzUlVGQlQyeGhMRmRCUXpORGQyWXNSVUZCU1dzelFpeDFRa0ZCZFVKb2NVWXNSMEZETTBJc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFYZEZkM1JFTEVWQlFVOXFZU3hYUVVOdVJuVm1MRVZCUVVsdE0wSXNaVUZCWldweFJpeEhRVU51UWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQkswSjNkRVFzUlVGQlQyaGhMR0ZCUXpGRGMyWXNSVUZCU1c4elFpeGhRVUZoYkhGR0xFZEJRMnBDTEUxQlEwWXNTMEZCU3l4SFFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKY1ROQ0xIRkNRVUZ4UW01eFJpeEhRVU42UWl4TlFVTkdMRXRCUVVzc1IwRkRRMEVzUlVGQlowTjNkRVFzUlVGQlQyeGhMRmRCUXpORGQyWXNSVUZCU1hNelFpeDFRa0ZCZFVKd2NVWXNSMEZETTBJc1RVRkRSaXhMUVVGTExFZEJRME5CTEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVsMU0wSXNjVUpCUVhGQ2NuRkdMRWRCUTNwQ0xFMUJRMFlzUzBGQlN5eEhRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSmR6TkNMSE5DUVVGelFuUnhSaXhIUVVNeFFpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJaME4zZEVRc1JVRkJUMnhoTEZkQlF6TkRkMllzUlVGQlNYa3pRaXhqUVVGamRuRkdMRWRCUTJ4Q0xFMUJRMFlzUzBGQlN5eEhRVU5EUVN4RlFVRm5RM2QwUkN4RlFVRlBiR0VzVjBGRE0wTjNaaXhGUVVGSk1ETkNMR3RDUVVGclFuaHhSaXhIUVVOMFFpeE5RVU5HTEV0QlFVc3NSMEZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUSXpRaXh0UWtGQmJVSjZjVVlzUjBGRGRrSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVazBNMElzYlVKQlFXMUNNWEZHTEVkQlEzWkNMRTFCUTBZc1MwRkJTeXhIUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpOak5DTEdWQlFXVXpjVVlzUjBGRGJrSXNUVUZEUml4TFFVRkxMRWRCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTlvWVN4aFFVTXhRM05tTEVWQlFVazRNMElzYTBKQlFXdENOWEZHTEVkQlEzUkNMRTFCUTBZc1MwRkJTeXhIUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYUdFc1lVRkRNVU56Wml4RlFVRkpLek5DTEdkQ1FVRm5RamR4Uml4SFFVTndRaXhOUVVOR0xFdEJRVXNzUjBGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTV2MwUWl4M1FrRkJkMEk1Y1VZc1IwRkROVUlzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWxwTkVJc1pVRkJaUzl4Uml4SFFVTnVRaXhOUVVOR0xFdEJRVXNzU1VGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVU4wUTNSMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW5odlFpdzJRa0ZEYmtWU0xFVkJRVWw1ZGtJc2RVSkJRWFZDZG1sR0xFZEJRek5DTEUxQlEwWXNVVUZEUlhkYUxFVkJRVXMwY0VNc1VVRkJVVFpDTEc5Q1FVRnZRalpPTEVWQlFVdDBSaXhGUVVOd1F6aEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFaMElzYVVKQlEyeERja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZNbTFFTEdGQlF6VkRaMHdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZORzFFTEdWQlNXeEVMRTlCUVU5MVRDeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF6VkVMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RWdVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU42UkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNMVJTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEZRVU5CYkRSRExFZEJTVXNzVDBGRVZFRXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNUVUZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUjBGRFFUY3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFZEJRMEUzTTBNc1IwRkpTeXhQUVVSVVFTeEZRVUUwUW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY2UkdzdlF5eEZRVUZQZEdFc1ZVRkRUQ3hIUVVOQk56TkRMRWRCU1Vzc1QwRkVWRUVzUlVGQmIwVnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmFrZHJMME1zUlVGQlQzSmhMRlZCUTB3c1JVRkRRVGt6UXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFMUJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRWRCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4SFFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJORUpwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1RVRkZla1JyTDBNc1JVRkJUM1JoTEZWQlEwd3NSMEZEUVRjelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVkQlEwRTNNME1zUjBGSlN5eFBRVVJVUVN4RlFVRTBRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TlFVVjZSR3N2UXl4RlFVRlBkR0VzVlVGRFRDeEhRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNUVUZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUjBGRFFUY3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFZEJRMEUzTTBNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eE5RVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hIUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zVFVGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1IwRkRRV3cwUXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFMUJSWGhFYXk5RExFVkJRVTlxWVN4WlFVTk1MRWRCUTBGc05FTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4SFFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1RVRkZlRVJyTDBNc1JVRkJUMnBoTEZsQlEwd3NSMEZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRTFCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVkQlEwRnNORU1zUjBGSlN5eFBRVVJVUVN4RlFVRXlRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TlFVVjRSR3N2UXl4RlFVRlBhbUVzV1VGRFRDeEhRVU5CYkRSRExFbEJSMHBCTEVWQlFVbHBWQ3hGUVVGUk9IUkZMRGhDUVVOT2FtaEdMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NTVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNXZRaXg1UWtGSE9VTnVOa01zUlVGQlN6UndReXhSUVVGUk5FSXNNRUpCUVRCQ2VIZERMRVZCUVZOckwwTXNSVUZET1VOd1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5XZENMR2xDUVVGclFuSkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUSnRSQ3hsUVU5d1IyZE1MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWbDVVQ3hoUVVGbExFTkJReTlEUXl4TlFVRlBMRVZCUTFCRExGVkJRVmNzUlVGRFdFTXNZVUZCWXl4SFFVOW9RamMwUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlY1Y1VZc1pVRkJhVUlzVjBGRE0wUXNUMEZCT0VJMWVFVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWcGNFWXNaVUZCYVVJc1UwRkJVelZ3Uml4SFFVTndSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVd2NVWXNhVUpCUVcxQ0xGZEJRemRFTEU5QlFVODNlRVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXljVVlzWlVGQmFVSXNWMEZETTBRc1QwRkJlVU1zVFVGQmJFTTVlRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVFJ4Uml4elFrRkJkMElzVjBGRGJFVXNUMEZCT0VJdmVFVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWcmNFWXNjMEpCUVhkQ0xGTkJRVk0zY0VZc1IwRkRNMFVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk5uRkdMSGRDUVVFd1FpeFhRVU53UlN4UFFVRlBhSGxGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UFFVRkhNbmhFTEVsQlVYaERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZPSEZHTEhOQ1FVRjNRaXhYUVVOc1JTeFBRVUY1UXl4TlFVRnNRMnA1UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWSzNGR0xIRkNRVUYxUWl4WFFVTnFSU3hQUVVFclFteDVSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SlFVRkpMRWxCVVc1R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXMXdSaXh4UWtGQmRVSXNVMEZCVXpsd1JpeEhRVU14UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVkQlFVbHFReXhKUVZGNlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVm5ja1lzZFVKQlFYbENMRmRCUTI1RkxFOUJRVTl1ZVVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZwY2tZc2NVSkJRWFZDTEZkQlEycEZMRTlCUVRCRExFMUJRVzVEY0hsRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWcmNrWXNOa0pCUVN0Q0xGZEJRM3BGTEU5QlFTdENjbmxGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFbEJRVWtzU1VGUmJrWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZiM0JHTERaQ1FVRXJRaXhUUVVGVEwzQkdMRWRCUTJ4R0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVzF5Uml3clFrRkJhVU1zVjBGRE0wVXNUMEZCVDNSNVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlc5eVJpdzJRa0ZCSzBJc1YwRkRla1VzVDBGQk1FTXNUVUZCYmtOMmVVVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZYRnlSaXgxUWtGQmVVSXNWMEZEYmtVc1QwRkJLMEo0ZVVVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNTVUZCU1N4SlFWRnVSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZ4Y0VZc2RVSkJRWGxDTEZOQlFWTm9jVVlzUjBGRE5VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYzNKR0xIbENRVUV5UWl4WFFVTnlSU3hQUVVGUGVubEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmRYSkdMSFZDUVVGNVFpeFhRVU51UlN4UFFVRXdReXhOUVVGdVF6RjVSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzUzBGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZkM0pHTEdWQlFXbENMRmRCUXpORUxFOUJRWFZGTTNsRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1NVRlJia2h4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYzNCR0xHVkJRV2xDTEZOQlFWTnFjVVlzUjBGRGNFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWZVhKR0xHbENRVUZ0UWl4WFFVTTNSQ3hQUVVGUE5YbEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk1ISkdMR1ZCUVdsQ0xGZEJRek5FTEU5QlFYbERMRTFCUVd4RE4zbEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXlja1lzWVVGQlpTeFhRVU42UkN4UFFVRTRRamw1UlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEhRVUZKTEV0QlVUTkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWWFZ3Uml4aFFVRmxMRk5CUVZOc2NVWXNSMEZEYkVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZOSEpHTEdWQlFXbENMRmRCUXpORUxFOUJRVTh2ZVVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlUyY2tZc1lVRkJaU3hYUVVONlJDeFBRVUV3UXl4TlFVRnVRMmg2UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1MwRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWT0hKR0xIRkNRVUYxUWl4WFFVTnFSU3hQUVVFclFtcDZSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SlFVRkpMRWxCVVc1R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZYZHdSaXh4UWtGQmRVSXNVMEZCVTI1eFJpeEhRVU14UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVkQlFVbHFReXhKUVZGNlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVXJja1lzZFVKQlFYbENMRmRCUTI1RkxFOUJRVTlzZWtVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZuYzBZc2NVSkJRWFZDTEZkQlEycEZMRTlCUVRCRExFMUJRVzVEYm5wRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWcGMwWXNkVUpCUVhsQ0xGZEJRMjVGTEU5QlFTdENjSHBGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFbEJRVWtzU1VGUmJrWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZlWEJHTEhWQ1FVRjVRaXhUUVVGVGNIRkdMRWRCUXpWRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWV3R6Uml4NVFrRkJNa0lzVjBGRGNrVXNUMEZCVDNKNlJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlcxelJpeDFRa0ZCZVVJc1YwRkRia1VzVDBGQk1FTXNUVUZCYmtOMGVrVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZXOXpSaXh4UWtGQmRVSXNWMEZEYWtVc1QwRkJLMEoyZWtVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNTVUZCU1N4SlFWRnVSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV3Y0VZc2NVSkJRWFZDTEZOQlFWTnljVVlzUjBGRE1VVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEhRVUZKYWtNc1NVRlJla056ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWY1hOR0xIVkNRVUY1UWl4WFFVTnVSU3hQUVVGUGVIcEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmMzTkdMSEZDUVVGMVFpeFhRVU5xUlN4UFFVRXdReXhOUVVGdVEzcDZSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzUzBGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZkWE5HTEhOQ1FVRjNRaXhYUVVOc1JTeFBRVUVyUWpGNlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hKUVVGSkxFbEJVVzVHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRKd1JpeHpRa0ZCZDBJc1UwRkJVM1J4Uml4SFFVTXpSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWM2MwWXNkMEpCUVRCQ0xGZEJRM0JGTEU5QlFVOHpla1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVjVjMFlzYzBKQlFYZENMRmRCUTJ4RkxFOUJRVEJETEUxQlFXNUROWHBGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV3YzBZc1kwRkJaMElzVjBGRE1VUXNUMEZCSzBJM2VrVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzU1VGQlNTeEpRVkZ1Um5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVMGNFWXNZMEZCWjBJc1UwRkJVM1p4Uml4SFFVTnVSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRWRCUVVscVF5eEpRVkY2UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVeWMwWXNaMEpCUVd0Q0xGZEJRelZFTEU5QlFVODVla1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEZGQlFVa3llRVFzU1VGUmVrTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVTBjMFlzWTBGQlowSXNWMEZETVVRc1QwRkJNRU1zVFVGQmJrTXZla1VzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEV0QlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVFp6Uml4clFrRkJiMElzVjBGRE9VUXNUMEZCSzBKb01FVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDTjJwRUxFdEJRVTBzU1VGQlNTeEpRVkZ1Um5GM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVMmNFWXNhMEpCUVc5Q0xGTkJRVk40Y1VZc1IwRkRka1VzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVk9ITkdMRzlDUVVGelFpeFhRVU5vUlN4UFFVRlBhakJGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UlFVRkpNbmhFTEVsQlVYcERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZLM05HTEd0Q1FVRnZRaXhYUVVNNVJDeFBRVUV3UXl4TlFVRnVRMnd3UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1MwRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWWjNSR0xHMUNRVUZ4UWl4WFFVTXZSQ3hQUVVFNFFtNHdSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4SFFVRkpMRXRCVVRORmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUaHdSaXh0UWtGQmNVSXNVMEZCVTNweFJpeEhRVU40UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVkQlFVbHFReXhKUVZGNlEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVnBkRVlzY1VKQlFYVkNMRmRCUTJwRkxFOUJRVTl3TUVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxGRkJRVWt5ZUVRc1NVRlJla04wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlZyZEVZc2JVSkJRWEZDTEZkQlF5OUVMRTlCUVRCRExFMUJRVzVEY2pCRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWdGRFWXNiVUpCUVhGQ0xGZEJReTlFTEU5QlFUaENkREJGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFZEJRVWtzUzBGUk0wVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZLM0JHTEcxQ1FVRnhRaXhUUVVGVE1YRkdMRWRCUTNoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVzkwUml4eFFrRkJkVUlzVjBGRGFrVXNUMEZCVDNZd1JTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlhGMFJpeHRRa0ZCY1VJc1YwRkRMMFFzVDBGQk1FTXNUVUZCYmtONE1FVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRXRCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZYTjBSaXhsUVVGcFFpeFhRVU16UkN4UFFVRTRRbm93UlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEhRVUZKTEV0QlVUTkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWV2R4Uml4bFFVRnBRaXhUUVVGVE0zRkdMRWRCUTNCRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1IwRkJTV3BETEVsQlVYcERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWWFYwUml4cFFrRkJiVUlzVjBGRE4wUXNUMEZCVHpFd1JTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNVVUZCU1RKNFJDeEpRVkY2UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlhkMFJpeGxRVUZwUWl4WFFVTXpSQ3hQUVVFd1F5eE5RVUZ1UXpNd1JTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTMEZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmVYUkdMR3RDUVVGdlFpeFhRVU01UkN4UFFVRTRRalV3UlN4RlFVRkxOSEJETEZGQlFWRjVReXh2UWtGQmIwSTFha1FzUzBGQlRTeEhRVUZKTEV0QlVUTkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWV2x4Uml4clFrRkJiMElzVTBGQlV6VnhSaXhIUVVOMlJTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFZEJRVWxxUXl4SlFWRjZRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV3ZEVZc2IwSkJRWE5DTEZkQlEyaEZMRTlCUVU4M01FVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRkZCUVVreWVFUXNTVUZSZWtOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZVeWRFWXNhMEpCUVc5Q0xGZEJRemxFTEU5QlFUQkRMRTFCUVc1RE9UQkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hMUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM0Z1UWl4WlFVRlpOVFpGTEZWQlFWVTBkRVlzWjBKQlFXdENMRmRCUXpWRUxFOUJRVGhDTHpCRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRWRCUVVrc1MwRlJNMFZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYTNGR0xHZENRVUZyUWl4VFFVRlROM0ZHTEVkQlEzSkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSMEZCU1dwRExFbEJVWHBEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRaMFJpeHJRa0ZCYjBJc1YwRkRPVVFzVDBGQlQyZ3hSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVVVGQlNUSjRSQ3hKUVZGNlEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUaDBSaXhuUWtGQmEwSXNWMEZETlVRc1QwRkJNRU1zVFVGQmJrTnFNVVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEV0QlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWU3QwUml4M1FrRkJNRUlzVjBGRGNFVXNUMEZCT0VKc01VVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUjBGQlNTeExRVkV6UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzRnVRaXhaUVVGWk5UWkZMRlZCUVZWdGNVWXNkMEpCUVRCQ0xGTkJRVk01Y1VZc1IwRkROMFVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVlozVkdMREJDUVVFMFFpeFhRVU4wUlN4UFFVRlBiakZGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UlFVRkpNbmhFTEVsQlVYcERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZhWFZHTEhkQ1FVRXdRaXhYUVVOd1JTeFBRVUV3UXl4TlFVRnVRM0F4UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1MwRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOeGJrSXNXVUZCV1RVMlJTeFZRVUZWYTNWR0xHVkJRV2xDTEZkQlF6TkVMRTlCUVRoQ2NqRkZMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVkQlFVa3NTMEZSTTBWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmIzRkdMR1ZCUVdsQ0xGTkJRVk12Y1VZc1IwRkRjRVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hIUVVGSmFrTXNTVUZSZWtOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnhia0lzV1VGQldUVTJSU3hWUVVGVmJYVkdMR2xDUVVGdFFpeFhRVU0zUkN4UFFVRlBkREZGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UlFVRkpNbmhFTEVsQlVYcERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk54YmtJc1dVRkJXVFUyUlN4VlFVRlZiM1ZHTEdWQlFXbENMRmRCUXpORUxFOUJRVEJETEUxQlFXNURkakZGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNGdVFpeFpRVUZaTlRaRkxGVkJRVlV5YUVZc01rSkJRVFpDTEZkQlEzWkZMRTlCUTBVNWIwVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVhGQ0xFMUJVVEZHZUhCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGNXNUNMRmxCUVZrMU5rVXNWVUZCVlRab1Jpd3lRa0ZCTmtJc1UwRkJVM2hwUml4SFFVTm9SaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzU1VGQlMycERMRWxCVTNwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjVzVDTEZsQlFWazFOa1VzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTjJSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUY1c1Q0xGbEJRVmsxTmtVc1ZVRkJWVGhvUml3MlFrRkJLMElzVjBGRGVrVXNUMEZCVDNoblJpeExRVUZMZFdkR0xESkNRVUV5UWl4TFFWVjZRMngzUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTjI5Q0xHZENRVUZyUWl4RFFVRkRMRXRCU1hCRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTJwRkxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1V4T0VRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRTFSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTVRoRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZUVVc1NVRkJTWFo0UkN4RlFVRkhkM2hFTEVWQlFVMHNRMEZEV0drNFFpeHhRa0ZCYzBKNE1VVXNSVUZCU3pSd1F5eFJRVUZSTUVNc01rSkJRVEpDWjA0c1JVRkJTeXhIUVVGSExFZEJRM1JGYlRoQ0xEWkNRVUU0UW5veFJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWRCUVVjc1IwRkRPVVZ4TWtJc1YwRkJXVE4yUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzUjBGRE5VUnZPRUlzVTBGQmQwUXNUMEZCTjBNemRFWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVV2xETEdkQ1FVRm5RbmxPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTXpSVGhuUml4M1FrRkJlVUkzYjBVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVsM2RrSXNOa0pCUTNaRWFIZENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbWc1UkN4VFFVRlZLM3BETEVsQlUzUkVMRTlCVGtGeU5VTXNSVUZCU3pSd1F5eFJRVUZSTWtJc2EwSkJRU3RETEVWQlFVOW5UeXhGUVVNdlJGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUVm5RaXhYUVVGWmRFa3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk1tMUVMR0ZCUTJoSGRVd3NSMEZEUVVFc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVzQxUWl4clFrRkJiMElzVTBGQlUyZFNMRWRCUTJoRkxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZEY0VNc1QwRkJUMnh3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsYkc5Q0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ5OUZPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaV3h2UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJReTlGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCWjBOM2RFUXNSVUZCVDJ4aExGZEJRek5EZDJZc1JVRkJTWEU0UWl4M1FrRkJkMEp1ZGtZc1IwRkROVUlzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWx6T0VJc1owTkJRV2REY0haR0xFZEJRM0JETEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKZVROQ0xHTkJRV04yY1VZc1IwRkRiRUlzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWwxT0VJc1dVRkJXWEoyUml4SFFVTm9RaXhOUVVOR0xFdEJRVXNzU1VGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVU4wUTNSMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW5odlFpdzJRa0ZEYmtWU0xFVkJRVWw1ZGtJc2RVSkJRWFZDZG1sR0xFZEJRek5DTEUxQlEwWXNVVUZEUlhkYUxFVkJRVXMwY0VNc1VVRkJVVFpDTEc5Q1FVRnZRalpPTEVWQlFVdDBSaXhGUVVOd1F6aEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNaMElzYVVKQlEzSkRja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZNbTFFTEdGQlF5OURaMHdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZORzFFTEdWQlNYSkVMRTlCUVU5MVRDeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTnpaRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF5OUVMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRkdVFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU0xUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzYmtJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNdlJTeEpRVUZKYm5sRUxFOUJRVWx4ZVVRc1JVRkZReXhQUVVSVWNubEVMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zUjBGSlN5eFBRVVJVUVN4RlFVRTBRbWxaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNeGQwTXNSVUZCVXl4TFFVVjZSR3N2UXl4RlFVRlBkR0VzVlVGRFRDeEZRVU5CTnpORExFZEJTVXNzVDBGRVZFRXNSVUZCTkVKcFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGZWtSckwwTXNSVUZCVDNSaExGVkJRMHdzUlVGRFFUY3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZFNGRFVXNPRUpCUTA1cWFFWXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEpRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JtOUNMSGxDUVVjNVEyNDJReXhGUVVGTE5IQkRMRkZCUVZFMFFpd3dRa0ZCTUVKNGQwTXNSVUZCVTJzdlF5eEZRVU01UTNCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM1owSXNhVUpCUVd0Q2Nra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk1tMUVMR1ZCVVRGSFowd3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk1uVkdMSGRDUVVFd1FpeFhRVU4yUlN4UFFVRXJRamt4UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEhRVUZITEVsQlVXeEdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWWGQxUml4M1FrRkJNRUlzVTBGQlUyNTJSaXhIUVVOb1JpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SlFWRjRRM041UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTnpaRkxGVkJRVlUwZFVZc01FSkJRVFJDTEZkQlEzcEZMRTlCUVU4dk1VVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzTnVRaXhsUVVGbE56WkZMRlZCUVZVMmRVWXNkMEpCUVRCQ0xGZEJRM1pGTEU5QlFYbERMRTFCUVd4RGFESkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM051UWl4bFFVRmxOelpGTEZWQlFWVTRkVVlzWjBOQlFXdERMRmRCUXk5RkxFOUJRU3RDYWpKRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWRCUVVjc1NVRlJiRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWZVhWR0xHZERRVUZyUXl4VFFVRlRjSFpHTEVkQlEzaEdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVlN0MVJpeHJRMEZCYjBNc1YwRkRha1lzVDBGQlQyd3lSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNOa1VzVlVGQlZXZDJSaXhuUTBGQmEwTXNWMEZETDBVc1QwRkJlVU1zVFVGQmJFTnVNa1VzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWVEJ6Uml4alFVRm5RaXhYUVVNM1JDeFBRVUVyUWpkNlJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0kzYWtRc1MwRkJUU3hIUVVGSExFbEJVV3hHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVlRSd1JpeGpRVUZuUWl4VFFVRlRkbkZHTEVkQlEzUkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVlRKelJpeG5Ra0ZCYTBJc1YwRkRMMFFzVDBGQlR6bDZSU3hGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzVDBGQlJ6SjRSQ3hKUVZGNFEzUkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRjMjVDTEdWQlFXVTNOa1VzVlVGQlZUUnpSaXhqUVVGblFpeFhRVU0zUkN4UFFVRjVReXhOUVVGc1F5OTZSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZhWFpHTEZsQlFXTXNWMEZETTBRc1QwRkJLMEp3TWtVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNSMEZCUnl4SlFWRnNSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNOdVFpeGxRVUZsTnpaRkxGVkJRVlV3ZFVZc1dVRkJZeXhUUVVGVGNuWkdMRWRCUTNCRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUYzI1Q0xHVkJRV1UzTmtVc1ZVRkJWV3QyUml4alFVRm5RaXhYUVVNM1JDeFBRVUZQY2pKRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWYlhaR0xGbEJRV01zVjBGRE0wUXNUMEZCZVVNc1RVRkJiRU4wTWtVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGMyNUNMR1ZCUVdVM05rVXNWVUZCVlRKb1Jpd3lRa0ZCTmtJc1YwRkRNVVVzVDBGRFJUbHZSU3hGUVVGTE5IQkRMRkZCUVZFd1JDeDNRa0ZCZDBJM2EwUXNTMEZCVFhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmNVSXNUVUZSTVVaNGNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTnpia0lzWlVGQlpUYzJSU3hWUVVGVk5taEdMREpDUVVFMlFpeFRRVUZUZUdsR0xFZEJRMjVHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFJDeDNRa0ZCZDBKcWJFUXNTMEZCVFN4SlFVRkxha01zU1VGVGVrUnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk56YmtJc1pVRkJaVGMyUlN4VlFVRlZOR2hHTEhWQ1FVRjVRaXhUUVVGVGRuVkNMRVZCUVZkRExFZEJRekZHTEU5QlFVOTZOa01zUlVGQlN6UndReXhSUVVGUkswUXNNRUpCUVRCQ2JHeEVMRXRCUVUwc1NVRkJTeXQ0UkN4RlFVRlhNVUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRWEZDTjI1Q0xFbEJVV3BJTTBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOemJrSXNaVUZCWlRjMlJTeFZRVUZWT0doR0xEWkNRVUVyUWl4WFFVTTFSU3hQUVVGUGVHZEdMRXRCUVV0MVowWXNNa0pCUVRKQ0xFdEJWWHBEYkhkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNWIwSXNaMEpCUVd0Q0xFTkJRVU1zUzBGSmJFUnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZWdFpTeFRRVUZYTEZOQlFWTTRla01zUjBGREwwUXNUMEZCVDA0c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRNNFJDeFRRVUZUT0hwRExFVkJRWEZDTTNkRUxFOUJZVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFek9FUXNVMEZCVnl4VFFVRlRLM3BETEVWQlFXbENReXhIUVVOMFJTeEpRVUZKZG5oRUxFVkJRVWQzZUVRc1JVRkJUU3hEUVVOWVp6bENMRTFCUVU5Mk1rVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDYVU0c1JVRkJTeXhGUVVGSExFZEJRMmhFYXpsQ0xFOUJRWE5FTEU5QlFUZERlblZHTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZGcFF5eG5Ra0ZCWjBKNVRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEZWtVd2RVWXNUMEZCVVhveVJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEpwVGl4RlFVRkxMRVZCUVVjc1IwRkRha1J2T1VJc1MwRkJUVEV5UlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSm5UaXhGUVVGTExFZEJRVWNzUjBGRGRFUnhNa0lzVjBGQldUTjJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVkQlFVY3NSMEZETlVSeE9VSXNTMEZCVFRNeVJTeEZRVUZMTkhCRExGRkJRVkV3UXl3eVFrRkJNa0puVGl4RlFVRkxMRWxCUVVrc1IwRkRka1IxZGtJc2QwSkJRWGxDTjI5RkxFVkJRVXMwY0VNc1VVRkJVVEJDTEdGQlFXRm5UeXhGUVVGSmQzWkNMRFpDUVVOMlJHaDNRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpvT1VRc1UwRkJWU3Q2UXl4SlFWTjBSQ3hQUVU1QmNqVkRMRVZCUVVzMGNFTXNVVUZCVVRKQ0xHdENRVUVyUXl4RlFVRlBaMDhzUlVGREwwUlVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTNaMElzVjBGQldYUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZUSnRSQ3hoUVVNMVJuVk1MRWRCUTBGQkxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0Z3TlVJc2EwSkJRVzlDTEZOQlFWTm5VaXhIUVVNNVJDeEpRVUZKTjBZc1JVRkJVeXhKUVVGSmFEQkRMRVZCUVV0eE5rSXNZVUZCWVhkbUxFZEJReTlDVUN4RlFVRk5MRWxCUVVsU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUTNCRExFOUJRVTl1Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVc1dlFpdzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWYzNSVGhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0Z1YjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU0zUlN4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVd0RmQzUkVMRVZCUVU5cVlTeFhRVU0zUlhWbUxFVkJRVWx6T1VJc1UwRkJVM0IzUml4SFFVTmlMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkpkVGxDTEZWQlFWVnlkMFlzUjBGRFpDeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJiVVYzZEVRc1JVRkJUMnBoTEZkQlF6bEZkV1lzUlVGQlNYYzVRaXhWUVVGVmRIZEdMRWRCUTJRc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVsNU9VSXNVVUZCVVhaM1JpeEhRVU5hTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKZVROQ0xHTkJRV04yY1VZc1IwRkRiRUlzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWt3T1VJc1VVRkJVWGgzUml4SFFVTmFMRTFCUTBZc1MwRkJTeXhKUVVORFFTeEZRVUZSTEVsQlFVbHplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRM1JEZEhWQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDZUc5Q0xEWkNRVU51UlZJc1JVRkJTWGwyUWl4MVFrRkJkVUoyYVVZc1IwRkRNMElzVFVGRFJpeFJRVU5GZDFvc1JVRkJTelJ3UXl4UlFVRlJOa0lzYjBKQlFXOUNOazRzUlVGQlMzUkdMRVZCUTNCRE9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUbG5RaXhwUWtGRGJrTnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVXliVVFzWVVGRE4wTm5UQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVTBiVVFzWlVGSmJrUXNUMEZCVDNWTUxFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRE4wUXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1c1Q0xIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRekZFUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGx1UWl4M1FrRkJNRUlzVTBGQlUyNHZReXhGUVVGVGF5OURMRWRCUXpkRkxFbEJRVWx1ZVVRc1QwRkJTWEY1UkN4RlFVVkRMRTlCUkZSeWVVUXNSVUZCT0VScFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRNWGRETEVWQlFWTXNTMEZGTTBackwwTXNSVUZCVDNKaExGVkJRMHdzUlVGRFFUa3pReXhIUVVsTExFOUJSRlJCTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1IwRkpTeXhQUVVSVVFTeEZRVUVyUkdsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVUxUm1zdlF5eEZRVUZQY21Fc1ZVRkRUQ3hGUVVOQk9UTkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk5FSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVrUnJMME1zUlVGQlQzUmhMRlZCUTB3c1JVRkRRVGN6UXl4SFFVbExMRTlCUkZSQkxFVkJRVFJDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWHBFYXk5RExFVkJRVTkwWVN4VlFVTk1MRVZCUTBFM00wTXNSMEZKU3l4UFFVUlVRU3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4SFFVTkJOek5ETEVsQlIwcEJMRVZCUVVscFZDeEZRVUZST0hSRkxEaENRVU5PYW1oR0xFOUJRVk1zUjBGRFluRjVSQ3hGUVVGUE5WVXNjVUpCUTB3c1NVRkRRWFk1UXl4RlFVTkJLM2RFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW01dlFpeDVRa0ZIT1VOdU5rTXNSVUZCU3pSd1F5eFJRVUZSTkVJc01FSkJRVEJDZUhkRExFVkJRVk5yTDBNc1JVRkRPVU53UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1dkQ0xHbENRVUZyUW5KSkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlRKdFJDeGxRVTkwUjJkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdGblZpeE5RVUZSTEVOQlEzcERiakpGTEU5QlFWRXNSVUZEVW04eVJTeExRVUZOTEVWQlEwNURMR0ZCUVdNc1IwRk5hRUp5SzBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVcxV0xFOUJRVk1zUTBGRE1VTkRMRlZCUVZjc1JVRkRXRU1zVlVGQlZ5eEZRVU5ZUXl4VlFVRlhMRWRCVDJKNkswSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVmNYZEdMRk5CUVZjc1YwRkRkRVFzVDBGQmFVVjRNMFVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q05XcEVMRXRCUVUwc1JVRkJSeXhKUVZFM1IzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVjVka1lzVTBGQlZ5eFRRVUZUY0hkR0xFZEJReTlFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZYTjNSaXhYUVVGaExGZEJRM2hFTEU5QlFVOTZNMFVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVjFkMFlzVTBGQlZ5eFhRVU4wUkN4UFFVRjVReXhOUVVGc1F6RXpSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZkM2RHTEZWQlFWa3NWMEZEZGtRc1QwRkJLMEl6TTBVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNOMnBFTEV0QlFVMHNSMEZCUnl4SlFWRnNSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlV3ZGtZc1ZVRkJXU3hUUVVGVGNuZEdMRWRCUTJoRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWWGwzUml4WlFVRmpMRmRCUTNwRUxFOUJRVTgxTTBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlV3ZDBZc1ZVRkJXU3hYUVVOMlJDeFBRVUY1UXl4TlFVRnNRemN6UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWTW5kR0xGVkJRVmtzVjBGRGRrUXNUMEZCYTBVNU0wVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eEpRVkU1UjNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZVeWRrWXNWVUZCV1N4VFFVRlRkSGRHTEVkQlEyaEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlRSM1JpeFpRVUZqTEZkQlEzcEVMRTlCUVU4dk0wVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzVnVRaXhoUVVGaE9UWkZMRlZCUVZVMmQwWXNWVUZCV1N4WFFVTjJSQ3hQUVVGNVF5eE5RVUZzUTJnMFJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVk9IZEdMRkZCUVZVc1YwRkRja1FzVDBGQkswSnFORVVzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVTBka1lzVVVGQlZTeFRRVUZUZG5kR0xFZEJRemxFTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZTdDNSaXhWUVVGWkxGZEJRM1pFTEU5QlFVOXNORVVzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVm5lRVlzVVVGQlZTeFhRVU55UkN4UFFVRjVReXhOUVVGc1EyNDBSU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUYW1wRUxFdEJRVTBzU1VGUmNrTnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZNSE5HTEdOQlFXZENMRmRCUXpORUxFOUJRU3RDTjNwRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRamRxUkN4TFFVRk5MRWRCUVVjc1NVRlJiRVp4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWTkhCR0xHTkJRV2RDTEZOQlFWTjJjVVlzUjBGRGNFVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOMWJrSXNZVUZCWVRrMlJTeFZRVUZWTW5OR0xHZENRVUZyUWl4WFFVTTNSQ3hQUVVGUE9YcEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjFia0lzWVVGQllUazJSU3hWUVVGVk5ITkdMR05CUVdkQ0xGZEJRek5FTEU5QlFYbERMRTFCUVd4REwzcEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM1Z1UWl4aFFVRmhPVFpGTEZWQlFWVnBlRVlzVVVGQlZTeFhRVU55UkN4UFFVRXJRbkEwUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEpRVUZKTEVsQlVXNUdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVFoyUml4UlFVRlZMRk5CUVZONGQwWXNSMEZET1VRc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4xYmtJc1lVRkJZVGsyUlN4VlFVRlZhM2hHTEZWQlFWa3NWMEZEZGtRc1QwRkJUM0kwUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1VVRkJTVEo0UkN4SlFWRjZRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVzE0Uml4UlFVRlZMRmRCUTNKRUxFOUJRVEJETEUxQlFXNURkRFJGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4TFFWRnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNWdVFpeGhRVUZoT1RaRkxGVkJRVlV5YUVZc01rSkJRVFpDTEZkQlEzaEZMRTlCUTBVNWIwVXNSVUZCU3pSd1F5eFJRVUZSTUVRc2QwSkJRWGRDTjJ0RUxFdEJRVTF4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVhGQ0xFMUJVVEZHZUhCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGRXNUNMR0ZCUVdFNU5rVXNWVUZCVlRab1Jpd3lRa0ZCTmtJc1UwRkJVM2hwUml4SFFVTnFSaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzU1VGQlMycERMRWxCVTNwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkVzVDTEdGQlFXRTVOa1VzVlVGQlZUUm9SaXgxUWtGQmVVSXNVMEZCVTNaMVFpeEZRVUZYUXl4SFFVTjRSaXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVN0RUxEQkNRVUV3UW14c1JDeExRVUZOTEVsQlFVc3JlRVFzUlVGQlZ6RkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnhRamR1UWl4SlFWRnFTRE5DTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZFc1Q0xHRkJRV0U1TmtVc1ZVRkJWVGhvUml3MlFrRkJLMElzVjBGRE1VVXNUMEZCVDNoblJpeExRVUZMZFdkR0xESkNRVUV5UWl4TFFWVjZRMngzUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTDI5Q0xHZENRVUZyUWl4RFFVRkRMRXRCU1d4RWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWVM4MlJTeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUXk5RUxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDI1Q0xHRkJRV0UxT0VRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTlRoRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZEVVc1NVRkJUME1zUlVGQlRTeERRVU5ZYzNaQ0xIZENRVUY1UWpkdlJTeEZRVUZMTkhCRExGRkJRVkV3UWl4aFFVRmhaMDhzUlVGQlNYZDJRaXcyUWtGRGRrUm9kMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDYURsRUxGTkJRVlVyZWtNc1NVRlRkRVFzVDBGT1FYSTFReXhGUVVGTE5IQkRMRkZCUVZFeVFpeHJRa0ZCSzBNc1JVRkJUMmRQTEVWQlF5OUVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhPV2RDTEZkQlFWbDBTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMelpGTEZWQlFWVXliVVFzWVVGRE5VWjFUQ3hIUVVOQlFTeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoY2pWQ0xHdENRVUZ2UWl4VFFVRlRaMUlzUjBGRE9VUXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXZ3dReXhGUVVGTGNUWkNMR0ZCUVdGM1ppeEhRVU12UWxBc1JVRkJUU3hKUVVGSlVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVOd1F5eFBRVUZQY0hCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdGd2IwSXNORUpCUVRSQ1VpeEZRVUZMZEVZc1NVRlhOMFU0UlN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoY0c5Q0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZETjBVc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFbEJRMGdzU1VGQlNYQXdReXhGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUTNSRGRIVkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2VHOUNMRFpDUVVOdVJWSXNSVUZCU1hsMlFpeDFRa0ZCZFVKMmFVWXNSMEZETTBJc1RVRkRSaXhSUVVORmQxb3NSVUZCU3pSd1F5eFJRVUZSTmtJc2IwSkJRVzlDTms0c1JVRkJTM1JHTEVWQlEzQkRPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzluUWl4cFFrRkRia055U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTHpaRkxGVkJRVlV5YlVRc1lVRkROME5uVEN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTHpaRkxGVkJRVlUwYlVRc1pVRkpia1FzVDBGQlQzVk1MRWRCVVZSU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQyNUNMR0ZCUVdFdk5rVXNWVUZCVlhsb1JDeG5Ra0ZCYTBJc1YwRkROMFFzU1VGQlNYTlNMRVZCUVZNc1NVRkJTV3cyUXl4RlFVRkxhMmhETEdGQlJYUkNMRTlCUkVFMFdDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaEwyNUNMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpGRVFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZOM2JrSXNZVUZCWVM5dVFpeDNRa0ZCTUVJc1UwRkJVMjR2UXl4RlFVRlRheTlETEVkQlF6ZEZMRWxCUVVsdWVVUXNSMEZEU2tFc1JVRkJTV2xVTEVWQlFWRTRkRVVzT0VKQlEwNXFhRVlzVDBGQlV5eEhRVU5pY1hsRUxFVkJRVTgxVlN4eFFrRkRUQ3hKUVVOQmRqbERMRVZCUTBFcmQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNibTlDTEhsQ1FVYzVRMjQyUXl4RlFVRkxOSEJETEZGQlFWRTBRaXd3UWtGQk1FSjRkME1zUlVGQlUyc3ZReXhGUVVNNVEzQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMjVDTEdGQlFXRXZaMElzYVVKQlFXdENja2tzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzgyUlN4VlFVRlZNbTFFTEdWQlVYUkhaMHdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zYmtJc1lVRkJZUzgyUlN4VlFVRlZNbWhHTERKQ1FVRTJRaXhYUVVONFJTeFBRVU5GT1c5RkxFVkJRVXMwY0VNc1VVRkJVVEJFTEhkQ1FVRjNRamRyUkN4TFFVRk5jWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWl4TlFWRXhSbmh3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkdVFpeGhRVUZoTHpaRkxGVkJRVlUyYUVZc01rSkJRVFpDTEZOQlFWTjRhVVlzUjBGRGFrWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRWxCUVV0cVF5eEpRVk42UkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZHVRaXhoUVVGaEx6WkZMRlZCUVZVMGFFWXNkVUpCUVhsQ0xGTkJRVk4yZFVJc1JVRkJWME1zUjBGRGVFWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hKUVVGTEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmNVSTNia0lzU1VGUmFrZ3pRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2R1UWl4aFFVRmhMelpGTEZWQlFWVTRhRVlzTmtKQlFTdENMRmRCUXpGRkxFOUJRVTk0WjBZc1MwRkJTM1ZuUml3eVFrRkJNa0lzUzBGVmVrTnNkMElzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXV2h3UWl4blFrRkJhMElzUTBGQlF5eExRVWxxUkc0MVF5eEZRVUZMTkhCRExGRkJRVkZETEhGQ1FXRnFRbWxRTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvTjBVc1ZVRkJWVzFsTEZOQlFWY3NVMEZCVXpoNlF5eEhRVU01UkN4UFFVRlBUaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlpOemhFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaGVrVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXVGM0UkN4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM0pGTEVsQlFVbDJlRVFzUlVGQlIzZDRSQ3hGUVVGTkxFTkJRMWhuTDBJc1YwRkJNRVFzVDBGQk4wTjRkMFlzUlVGQlNXbFpMRVZCUVVzMGNFTXNVVUZCVVdsRExHZENRVUZuUW5sT0xFVkJRVXNzVTBGQlkyTXNSVUZCV1hKNVJDeEZRVU0zUlRSdVJpeFhRVUZaTTNaRkxFVkJRVXMwY0VNc1VVRkJVVEJETERKQ1FVRXlRbWRPTEVWQlFVc3NSMEZCUnl4SFFVTTFSSFYyUWl4M1FrRkJlVUkzYjBVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVsM2RrSXNOa0pCUTNaRWFIZENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbWc1UkN4VFFVRlZLM3BETEVsQlUzUkVMRTlCVGtGeU5VTXNSVUZCU3pSd1F5eFJRVUZSTWtJc2EwSkJRU3RETEVWQlFVOW5UeXhGUVVNdlJGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldTOW5RaXhYUVVGWmRFa3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjVia0lzV1VGQldXZzNSU3hWUVVGVk1tMUVMR0ZCUXpGR2RVd3NSMEZEUVVFc1NVRkRSa1VzUlVGQlNVc3NjVUpCUVhWQ1RpeEhRVVYwUWtNc1NVRlZWRlFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXWFExUWl4clFrRkJiMElzVTBGQlUyZFNMRWRCUXpkRUxFbEJRVWszUml4RlFVRlRMRWxCUVVsb01FTXNSVUZCUzNFMlFpeGhRVUZoZDJZc1IwRkRMMEpRTEVWQlFVMHNTVUZCU1ZJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJrSXNXVUZEY0VNc1QwRkJUM0p3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaY205Q0xEUkNRVUUwUWxJc1JVRkJTM1JHTEVsQlZ6VkZPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXWEp2UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRelZGTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCWjBOM2RFUXNSVUZCVDJ4aExGZEJRek5EZDJZc1JVRkJTV3N2UWl4alFVRmphSGxHTEVkQlEyeENMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUZuUTNkMFJDeEZRVUZQYkdFc1YwRkRNME4zWml4RlFVRkplVE5DTEdOQlFXTjJjVVlzUjBGRGJFSXNUVUZEUml4TFFVRkxMRWxCUTBOQkxFVkJRVkVzU1VGQlNYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkRkRU4wZFVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEo0YjBJc05rSkJRMjVGVWl4RlFVRkplWFpDTEhWQ1FVRjFRblpwUml4SFFVTXpRaXhOUVVOR0xGRkJRMFYzV2l4RlFVRkxOSEJETEZGQlFWRTJRaXh2UWtGQmIwSTJUaXhGUVVGTGRFWXNSVUZEY0VNNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFHaENMR2xDUVVOc1EzSkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZUSnRSQ3hoUVVNMVEyZE1MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZUUnRSQ3hsUVVsc1JDeFBRVUZQZFV3c1IwRlJWRklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk41YmtJc1dVRkJXV2czUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNMVJDeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvYjBJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRla1JCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRzlDTEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZETlVVc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVWQlJVTXNUMEZFVkhKNVJDeEZRVUUwUW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY2UkdzdlF5eEZRVUZQZEdFc1ZVRkRUQ3hGUVVOQk56TkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk5FSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVrUnJMME1zUlVGQlQzUmhMRlZCUTB3c1JVRkRRVGN6UXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVRoMFJTdzRRa0ZEVG1wb1JpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6VlZMSEZDUVVOTUxFbEJRMEYyT1VNc1JVRkRRU3QzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdWIwSXNlVUpCUnpsRGJqWkRMRVZCUVVzMGNFTXNVVUZCVVRSQ0xEQkNRVUV3UW5oM1F5eEZRVUZUYXk5RExFVkJRemxEY0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJrSXNXVUZCV1dob1FpeHBRa0ZCYTBKeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZVeWJVUXNaVUZSY0VkblRDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZWemVFWXNZMEZCWjBJc1YwRkRNVVFzVDBGQkswSjZORVVzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1IwRkJSeXhKUVZGc1JuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRGRGTEZWQlFWVnhlRVlzWTBGQlowSXNVMEZCVTJoNVJpeEhRVU51UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRGRGTEZWQlFWVjFlRVlzWjBKQlFXdENMRmRCUXpWRUxFOUJRVTh4TkVVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYURkRkxGVkJRVlYzZUVZc1kwRkJaMElzVjBGRE1VUXNUMEZCZVVNc1RVRkJiRU16TkVVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGVXNUNMRmxCUVZsb04wVXNWVUZCVlRCelJpeGpRVUZuUWl4WFFVTXhSQ3hQUVVFclFqZDZSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtJM2FrUXNTMEZCVFN4SFFVRkhMRWxCVVd4R2NYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZUUndSaXhqUVVGblFpeFRRVUZUZG5GR0xFZEJRMjVGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRlVzVDTEZsQlFWbG9OMFVzVlVGQlZUSnpSaXhuUWtGQmEwSXNWMEZETlVRc1QwRkJUemw2UlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZVc1Q0xGbEJRVmxvTjBVc1ZVRkJWVFJ6Uml4alFVRm5RaXhYUVVNeFJDeFBRVUY1UXl4TlFVRnNReTk2UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZONWJrSXNXVUZCV1dnM1JTeFZRVUZWTW1oR0xESkNRVUUyUWl4WFFVTjJSU3hQUVVORk9XOUZMRVZCUVVzMGNFTXNVVUZCVVRCRUxIZENRVUYzUWpkclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGeFFpeE5RVkV4Um5od1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzbHVRaXhaUVVGWmFEZEZMRlZCUVZVMmFFWXNNa0pCUVRaQ0xGTkJRVk40YVVZc1IwRkRhRVlzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVsQlFVdHFReXhKUVZONlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2x1UWl4WlFVRlphRGRGTEZWQlFWVTBhRVlzZFVKQlFYbENMRk5CUVZOMmRVSXNSVUZCVjBNc1IwRkRka1lzVDBGQlQzbzJReXhGUVVGTE5IQkRMRkZCUVZFclJDd3dRa0ZCTUVKc2JFUXNTMEZCVFN4SlFVRkxLM2hFTEVWQlFWY3hRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJjVUkzYmtJc1NVRlJha2d6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNsdVFpeFpRVUZaYURkRkxGVkJRVlU0YUVZc05rSkJRU3RDTEZkQlEzcEZMRTlCUVU5NFowWXNTMEZCUzNWblJpd3lRa0ZCTWtJc1MwRlZla05zZDBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2FuQkNMR2RDUVVGclFpeERRVUZETEV0QlNYUkVialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXbENhamRGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRia1VzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXbENPVGhFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaE9VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk13YmtJc2FVSkJRV2xDT1RoRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZETVVVc1NVRkJUME1zUlVGQlRTeERRVU5ZYnpKQ0xGZEJRVmt6ZGtVc1JVRkJTelJ3UXl4UlFVRlJNRU1zTWtKQlFUSkNaMDRzUlVGQlN5eEhRVUZITEVkQlF6VkVkWFpDTEhkQ1FVRjVRamR2UlN4RlFVRkxOSEJETEZGQlFWRXdRaXhoUVVGaFowOHNSVUZCU1hkMlFpdzJRa0ZEZGtSb2QwSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNhRGxFTEZOQlFWVXJla01zU1VGVGRFUXNUMEZPUVhJMVF5eEZRVUZMTkhCRExGRkJRVkV5UWl4clFrRkJLME1zUlVGQlQyZFBMRVZCUXk5RVZDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6QnVRaXhwUWtGQmFVSm9hRUlzVjBGQldYUkpMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzVDTEdsQ1FVRnBRbW8zUlN4VlFVRlZNbTFFTEdGQlEzQkhkVXdzUjBGRFFVRXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2RqVkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRiRVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkRjRU1zVDBGQlQzUndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUowYjBJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGFrWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUowYjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU5xUml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWw1TTBJc1kwRkJZM1p4Uml4SFFVTnNRaXhOUVVOR0xFdEJRVXNzU1VGRFEwRXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVU4wUTNSMVFpeEZRVUZQT1Znc1dVRkJXVEV4UXl4RlFVRk5jM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW5odlFpdzJRa0ZEYmtWU0xFVkJRVWw1ZGtJc2RVSkJRWFZDZG1sR0xFZEJRek5DTEUxQlEwWXNVVUZEUlhkYUxFVkJRVXMwY0VNc1VVRkJVVFpDTEc5Q1FVRnZRalpPTEVWQlFVdDBSaXhGUVVOd1F6aEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNRzVDTEdsQ1FVRnBRbXBvUWl4cFFrRkRka055U1N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdVFpeHBRa0ZCYVVKcU4wVXNWVUZCVlRKdFJDeGhRVU5xUkdkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtbzNSU3hWUVVGVk5HMUVMR1ZCU1haRUxFOUJRVTkxVEN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGFrVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdVFpeHBRa0ZCYVVKcWIwSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZET1VSQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpCdVFpeHBRa0ZCYVVKcWIwSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTnFSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEV0QlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFVkJRMEUzTTBNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZFNGRFVXNPRUpCUTA1cWFFWXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEpRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JtOUNMSGxDUVVjNVEyNDJReXhGUVVGTE5IQkRMRkZCUVZFMFFpd3dRa0ZCTUVKNGQwTXNSVUZCVTJzdlF5eEZRVU01UTNCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtcG9RaXhwUWtGQmEwSnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWVEp0UkN4bFFWRTVSMmRNTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTUc1Q0xHbENRVUZwUW1vM1JTeFZRVUZWTUhOR0xHTkJRV2RDTEZkQlF5OUVMRTlCUVN0Q04zcEZMRVZCUVVzMGNFTXNVVUZCVVRCRExESkNRVUV5UWpkcVJDeExRVUZOTEVkQlFVY3NTVUZSYkVaeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXdia0lzYVVKQlFXbENhamRGTEZWQlFWVTBjRVlzWTBGQlowSXNVMEZCVTNaeFJpeEhRVU40UlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEVWQlFVZHFReXhKUVZGNFEzTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWVEp6Uml4blFrRkJhMElzVjBGRGFrVXNUMEZCVHpsNlJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtbzNSU3hWUVVGVk5ITkdMR05CUVdkQ0xGZEJReTlFTEU5QlFYbERMRTFCUVd4REwzcEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWVEpvUml3eVFrRkJOa0lzVjBGRE5VVXNUMEZEUlRsdlJTeEZRVUZMTkhCRExGRkJRVkV3UkN4M1FrRkJkMEkzYTBRc1MwRkJUWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCY1VJc1RVRlJNVVo0Y0VJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNd2JrSXNhVUpCUVdsQ2FqZEZMRlZCUVZVMmFFWXNNa0pCUVRaQ0xGTkJRVk40YVVZc1IwRkRja1lzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRUxIZENRVUYzUW1wc1JDeExRVUZOTEVsQlFVdHFReXhKUVZONlJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekJ1UWl4cFFrRkJhVUpxTjBVc1ZVRkJWVFJvUml4MVFrRkJlVUlzVTBGQlUzWjFRaXhGUVVGWFF5eEhRVU0xUml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFbEJRVXNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWpkdVFpeEpRVkZxU0ROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1HNUNMR2xDUVVGcFFtbzNSU3hWUVVGVk9HaEdMRFpDUVVFclFpeFhRVU01UlN4UFFVRlBlR2RHTEV0QlFVdDFaMFlzTWtKQlFUSkNMRXRCVlhwRGJIZENMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnNjRUlzWjBKQlFXdENMRU5CUVVNc1MwRkpjRVJ1TlVNc1JVRkJTelJ3UXl4UlFVRlJReXh4UWtGaGFrSnBVQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVekp1UWl4bFFVRmxiRGRGTEZWQlFWVnRaU3hUUVVGWExGTkJRVk00ZWtNc1IwRkRha1VzVDBGQlQwNHNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpTODRSQ3hUUVVGVE9IcERMRVZCUVhGQ00zZEVMRTlCWVRWRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVXZPRVFzVTBGQlZ5eFRRVUZUSzNwRExFVkJRV2xDUXl4SFFVTjRSU3hKUVVGUFF5eEZRVUZOTEVOQlExaHZNa0lzVjBGQldUTjJSU3hGUVVGTE5IQkRMRkZCUVZFd1F5d3lRa0ZCTWtKblRpeEZRVUZMTEVsQlFVa3NSMEZETjBSMWRrSXNkMEpCUVhsQ04yOUZMRVZCUVVzMGNFTXNVVUZCVVRCQ0xHRkJRV0ZuVHl4RlFVRkpkM1pDTERaQ1FVTjJSR2gzUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKb09VUXNVMEZCVlN0NlF5eEpRVk4wUkN4UFFVNUJjalZETEVWQlFVczBjRU1zVVVGQlVUSkNMR3RDUVVFclF5eEZRVUZQWjA4c1JVRkRMMFJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZxYUVJc1YwRkJXWFJKTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzTjBVc1ZVRkJWVEp0UkN4aFFVTm9SM1ZNTEVkQlEwRkJMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWNE5VSXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTm9SU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlEzQkRMRTlCUVU5MmNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpYWnZRaXcwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmN2UlRoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWMmIwSXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNdlJTeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSMEZEU0N4SlFVRkpjREJETEVWQlFXZERkM1JFTEVWQlFVOXNZU3hYUVVNelEzZG1MRVZCUVVsNU0wSXNZMEZCWTNaeFJpeEhRVU5zUWl4TlFVTkdMRXRCUVVzc1NVRkRRMEVzUlVGQlVTeEpRVUZKYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVOMFEzUjFRaXhGUVVGUE9WZ3NXVUZCV1RFeFF5eEZRVUZOYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFuaHZRaXcyUWtGRGJrVlNMRVZCUVVsNWRrSXNkVUpCUVhWQ2RtbEdMRWRCUXpOQ0xFMUJRMFlzVVVGRFJYZGFMRVZCUVVzMGNFTXNVVUZCVVRaQ0xHOUNRVUZ2UWpaT0xFVkJRVXQwUml4RlFVTndRemhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzYUVJc2FVSkJRM0pEY2trc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld3M1JTeFZRVUZWTW0xRUxHRkJReTlEWjB3c1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld3M1JTeFZRVUZWTkcxRUxHVkJTWEpFTEU5QlFVOTFUQ3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6SnVRaXhsUVVGbGJEZEZMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJReTlFTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXeHZRaXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNMVJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc2IwSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTXZSU3hKUVVGSmJubEVMRTlCUVVseGVVUXNSVUZGUXl4UFFVUlVjbmxFTEVWQlFUUkNhVmtzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVXpGM1F5eEZRVUZUTEUxQlJYcEVheTlETEVWQlFVOTBZU3hWUVVOTUxFZEJRMEUzTTBNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZFNGRFVXNPRUpCUTA1cWFFWXNUMEZCVXl4SFFVTmljWGxFTEVWQlFVODFWU3h4UWtGRFRDeEpRVU5CZGpsRExFVkJRMEVyZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JtOUNMSGxDUVVjNVEyNDJReXhGUVVGTE5IQkRMRkZCUVZFMFFpd3dRa0ZCTUVKNGQwTXNSVUZCVTJzdlF5eEZRVU01UTNCQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc2FFSXNhVUpCUVd0Q2Nra3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXdzNSU3hWUVVGVk1tMUVMR1ZCVVRGSFowd3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXlia0lzWlVGQlpXdzNSU3hWUVVGVk1ITkdMR05CUVdkQ0xGZEJRemRFTEU5QlFTdENOM3BGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFqZHFSQ3hMUVVGTkxFbEJRVWtzU1VGUmJrWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3czUlN4VlFVRlZOSEJHTEdOQlFXZENMRk5CUVZOMmNVWXNSMEZEZEVVc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4SFFVRkpha01zU1VGUmVrTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk15YmtJc1pVRkJaV3czUlN4VlFVRlZNbk5HTEdkQ1FVRnJRaXhYUVVNdlJDeFBRVUZQT1hwRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFJRVUZKTW5oRUxFbEJVWHBEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNeWJrSXNaVUZCWld3M1JTeFZRVUZWTkhOR0xHTkJRV2RDTEZkQlF6ZEVMRTlCUVRCRExFMUJRVzVETDNwRkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeExRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6SnVRaXhsUVVGbGJEZEZMRlZCUVZVeWFFWXNNa0pCUVRaQ0xGZEJRekZGTEU5QlEwVTViMFVzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFYRkNMRTFCVVRGR2VIQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRNbTVDTEdWQlFXVnNOMFVzVlVGQlZUWm9SaXd5UWtGQk5rSXNVMEZCVTNocFJpeEhRVU51Uml4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FUXNkMEpCUVhkQ2FteEVMRXRCUVUwc1NVRkJTMnBETEVsQlUzcEVjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTW01Q0xHVkJRV1ZzTjBVc1ZVRkJWVFJvUml4MVFrRkJlVUlzVTBGQlUzWjFRaXhGUVVGWFF5eEhRVU14Uml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFbEJRVXNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWpkdVFpeEpRVkZxU0ROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE1tNUNMR1ZCUVdWc04wVXNWVUZCVlRob1JpdzJRa0ZCSzBJc1YwRkROVVVzVDBGQlQzaG5SaXhMUVVGTGRXZEdMREpDUVVFeVFpeExRVlY2UTJ4M1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdlNDeG5Ra0ZCYTBJc1EwRkJReXhMUVVsdVJHNDFReXhGUVVGTE5IQkRMRkZCUVZGRExIRkNRV0ZxUW1sUUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTJoRkxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZelUzUXl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllUTkZjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZelUzUXl4VFFVRlhMRk5CUVZNcmVrTXNSVUZCYVVKRExFZEJRM1pGTEVsQlFVOURMRVZCUVUwc1EwRkRXRzh5UWl4WFFVRlpNM1pGTEVWQlFVczBjRU1zVVVGQlVUQkRMREpDUVVFeVFtZE9MRVZCUVVzc1NVRkJTU3hIUVVNM1JITXZRaXhwUWtGQmEwSTFORVVzUlVGQlN6UndReXhSUVVGUmVVTXNiMEpCUVc5Q2FVNHNSVUZCU3l4SFFVRkpMRWRCUXpWRWRYWkNMSGRDUVVGNVFqZHZSU3hGUVVGTE5IQkRMRkZCUVZFd1FpeGhRVUZoWjA4c1JVRkJTWGQyUWl3MlFrRkRka1JvZDBJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2FEbEVMRk5CUVZVcmVrTXNTVUZUZEVRc1QwRk9RWEkxUXl4RlFVRkxOSEJETEZGQlFWRXlRaXhyUWtGQkswTXNSVUZCVDJkUExFVkJReTlFVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRV05GTEZkQlFWbDBTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZUSnRSQ3hoUVVNNVJuVk1MRWRCUTBGQkxFbEJRMFpGTEVWQlFVbExMSEZDUVVGMVFrNHNSMEZGZEVKRExFbEJWVlJVTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZM0paTEd0Q1FVRnZRaXhUUVVGVFoxSXNSMEZETDBRc1NVRkJTVGRHTEVWQlFWTXNTVUZCU1dnd1F5eEZRVUZMY1RaQ0xHRkJRV0YzWml4SFFVTXZRbEFzUlVGQlRTeEpRVUZKVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRM0JETEU5QlFVOXdTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTndTQ3cwUWtGQk5FSlNMRVZCUVV0MFJpeEpRVmM1UlRoRkxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWTNCSUxEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZET1VVc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFZEJRMGdzU1VGQlNYQXdReXhGUVVGblEzZDBSQ3hGUVVGUGJHRXNWMEZETTBOM1ppeEZRVUZKZVROQ0xHTkJRV04yY1VZc1IwRkRiRUlzVFVGRFJpeExRVUZMTEVkQlEwTkJMRVZCUVRoRmQzUkVMRVZCUVU5cVlTeFhRVU42Um5WbUxFVkJRVWwxTDBJc2IwSkJRVzlDY25sR0xFZEJRM2hDTEUxQlEwWXNTMEZCU3l4SlFVTkRRU3hGUVVGUkxFbEJRVWx6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUTNSRGRIVkNMRVZCUVU4NVdDeFpRVUZaTVRGRExFVkJRVTF6ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2VHOUNMRFpDUVVOdVJWSXNSVUZCU1hsMlFpeDFRa0ZCZFVKMmFVWXNSMEZETTBJc1RVRkRSaXhSUVVORmQxb3NSVUZCU3pSd1F5eFJRVUZSTmtJc2IwSkJRVzlDTms0c1JVRkJTM1JHTEVWQlEzQkRPRVVzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmpReXhwUWtGRGNFTnlTU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZUSnRSQ3hoUVVNNVEyZE1MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQll5ODFSQ3hWUVVGVk5HMUVMR1ZCU1hCRUxFOUJRVTkxVEN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZET1VRc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZSeXgzUWtGQmQwSXhlRVFzUzBGQlRYbDRSQ3hIUVVNelJFRXNSVUZCVDNKWkxHMUNRVmRvUW1sWUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk5SExIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE9VVXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFVkJSVU1zVDBGRVZISjVSQ3hGUVVFMFFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhOUVVWNlJHc3ZReXhGUVVGUGRHRXNWVUZEVEN4SFFVTkJOek5ETEVkQlNVc3NUMEZFVkVFc1JVRkJNRVZwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1RVRkZka2RyTDBNc1JVRkJUM0poTEZWQlEwd3NSMEZEUVRrelF5eEpRVWRLUVN4RlFVRkphVlFzUlVGQlVUaDBSU3c0UWtGRFRtcG9SaXhQUVVGVExFZEJRMkp4ZVVRc1JVRkJUelZWTEhGQ1FVTk1MRWxCUTBGMk9VTXNSVUZEUVN0M1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnViMElzZVVKQlJ6bERialpETEVWQlFVczBjRU1zVVVGQlVUUkNMREJDUVVFd1FuaDNReXhGUVVGVGF5OURMRVZCUXpsRGNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGalF5eHBRa0ZCYTBKeVNTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlUzZEhMR05CUVdNdk5VUXNWVUZCVlRKdFJDeGxRVTk0UjJkTUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXpRelFpeHBRa0ZCYlVJc1EwRkRja1JETEc5Q1FVRnhRaXhGUVVOeVFrTXNaMEpCUVdsQ0xFVkJRMnBDUXl4WFFVRlpMRWRCVDJSdVowTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGakx6VkVMRlZCUVZVd2MwWXNZMEZCWjBJc1YwRkROVVFzVDBGQkswSTNla1VzUlVGQlN6UndReXhSUVVGUk1FTXNNa0pCUVRKQ04ycEVMRXRCUVUwc1NVRkJTU3hKUVZGdVJuRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZUUndSaXhqUVVGblFpeFRRVUZUZG5GR0xFZEJRM0pGTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUjBGQlNXcERMRWxCVVhwRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRkMGNzWTBGQll5ODFSQ3hWUVVGVk1uTkdMR2RDUVVGclFpeFhRVU01UkN4UFFVRlBPWHBGTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4UlFVRkpNbmhFTEVsQlVYcERkRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmpMelZFTEZWQlFWVTBjMFlzWTBGQlowSXNWMEZETlVRc1QwRkJNRU1zVFVGQmJrTXZla1VzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEV0QlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUZDBjc1kwRkJZeTgxUkN4VlFVRlZLM2hHTEc5Q1FVRnpRaXhYUVVOc1JTeFBRVUUyUld3MVJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hIUVVGSkxFbEJVVEZJY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWTUhoR0xHOUNRVUZ6UWl4VFFVRlRjbmxHTEVkQlF6TkZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSMEZCU1dwRExFbEJVWHBEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWWjNsR0xITkNRVUYzUWl4WFFVTndSU3hQUVVGUGJqVkZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hSUVVGSk1uaEVMRWxCVVhwRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTjNSeXhqUVVGakx6VkVMRlZCUVZWcGVVWXNiMEpCUVhOQ0xGZEJRMnhGTEU5QlFUQkRMRTFCUVc1RGNEVkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hMUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVM2RITEdOQlFXTXZOVVFzVlVGQlZUSm9SaXd5UWtGQk5rSXNWMEZEZWtVc1QwRkRSVGx2UlN4RlFVRkxOSEJETEZGQlFWRXdSQ3gzUWtGQmQwSTNhMFFzUzBGQlRYRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJjVUlzVFVGUk1VWjRjRUlzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk4zUnl4alFVRmpMelZFTEZWQlFWVTJhRVlzTWtKQlFUWkNMRk5CUVZONGFVWXNSMEZEYkVZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaEVMSGRDUVVGM1FtcHNSQ3hMUVVGTkxFbEJRVXRxUXl4SlFWTjZSSE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVTNkSExHTkJRV012TlVRc1ZVRkJWVFJvUml4MVFrRkJlVUlzVTBGQlUzWjFRaXhGUVVGWFF5eEhRVU42Uml4UFFVRlBlalpETEVWQlFVczBjRU1zVVVGQlVTdEVMREJDUVVFd1FteHNSQ3hMUVVGTkxFbEJRVXNyZUVRc1JVRkJWekZDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ4UWpkdVFpeEpRVkZxU0ROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVGQwY3NZMEZCWXk4MVJDeFZRVUZWT0doR0xEWkNRVUVyUWl4WFFVTXpSU3hQUVVGUGVHZEdMRXRCUVV0MVowWXNNa0pCUVRKQ0xFdEJWWHBEYkhkQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNXdRaXhuUWtGQmEwSXNRMEZCUXl4SFFVbDZSRzQxUXl4RlFVRkxOSEJETEZGQlFWRkRMSEZDUVdGcVFtbFFMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZiV1VzVTBGQlZ5eFRRVUZUT0hwRExFZEJRM1JGTEU5QlFVOU9MRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbWc1UkN4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllXcEdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW1nNVJDeFRRVUZYTEZOQlFWTXJla01zUlVGQmFVSkRMRWRCUXpkRkxFbEJRVWwyZUVRc1JVRkJSM2Q0UkN4RlFVRk5MRU5CUTFnNEwwSXNVMEZCVlhJMVJTeEZRVUZMTkhCRExGRkJRVkV3UWl4aFFVRmhaMDhzUlVGQlNXZG5ReXhqUVVONFEzaG5ReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlFWTnFPVVFzVTBGQlZTdDZReXhIUVVNM1JHdG5ReXhuUWtGQmQwUXNUMEZCZEVONGVFWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTTBUaXhGUVVGTExGTkJRV05qTEVWQlFWbHllVVFzUlVGRE0wVjVlRVlzYVVKQlFYbEVMRTlCUVhSRGVuaEdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVWQlF6VkZNSGhHTEdsQ1FVRjVSQ3hQUVVGMFF6RjRSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTTFSVEo0Uml4WlFVRjVSU3hQUVVFelJETjRSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZSWjBNc09FSkJRVGhDTUU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFVkJRelZHTkhoR0xGbEJRV0Z5WjBNc1JVRkJTWE5uUXl4MVFrRkRha0pETEdWQlFYVkVMRTlCUVhSRE9YaEdMRVZCUVVscFdTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRORTRzUlVGQlN5eFRRVUZqWXl4RlFVRlpjbmxFTEVkQlRUVkZMRTlCU0VsemVFUXNTVUZEUmtVc1JVRkJTVXNzY1VKQlFYVkNUaXhIUVVWMFFrTXNTVUZWVkZRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2VqVkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRja1VzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkRjRU1zVDBGQlQzaHdRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEo0YjBJc05FSkJRVFJDVWl4RlFVRkxkRVlzU1VGWGNFWTRSU3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEo0YjBJc05FSkJRVGhDTEZOQlFWTlNMRVZCUVV0MFJpeEhRVU53Uml4TFFVRlBRU3hGUVVGUGFGb3NZMEZEVW1kYUxFVkJRVTlxV2l4alFVUmpMRU5CUzNwQ0xFOUJSRmxwV2l4RlFVRlBjRm9zYTBKQlJXNUNMRXRCUVVzc1JVRkRTQ3hKUVVGSmNEQkRMRVZCUVZFc1NVRkJTWE41UkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKRExGTkJRekZFZG5WQ0xFVkJRVTg1V0N4WlFVRlpNVEZETEVWQlFVMXplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRlbTlDTERaQ1FVTTFSVklzUlVGQlNYZG5ReXhSUVVGUmRIcEdMRWRCUTFvc1RVRkRSaXhMUVVGTExFVkJRME5CTEVWQlFTdENkM1JFTEVWQlFVOW9ZU3hoUVVNeFEzTm1MRVZCUVVsNVowTXNiVUpCUVcxQ2RucEdMRWRCUTNaQ0xFMUJRMFlzUzBGQlN5eEZRVU5EUVN4RlFVRXJRbmQwUkN4RlFVRlBNMkVzWVVGRE1VTnBaMElzUlVGQlNUQm5ReXh2UWtGQmIwSjRla1lzUjBGRGVFSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkwWVN4WlFVTXhRelJtTEVWQlFVa3laME1zYjBKQlFXOUNlbnBHTEVkQlEzaENMRTFCUTBZc1MwRkJTeXhGUVVORFFTeEZRVUVyUW5kMFJDeEZRVUZQYm1Fc1lVRkRNVU41Wml4RlFVRkpOR2RETEdWQlFXVXhla1lzUjBGRGJrSXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRVzlEZDNSRUxFVkJRVTg1V2l4WlFVTXZRMjltTEVWQlFVazJaME1zWlVGQlpUTjZSaXhIUVVOdVFpeE5RVU5HTEV0QlFVc3NSVUZEUTBFc1JVRkJLMEozZEVRc1JVRkJUMmhoTEdGQlF6RkRjMllzUlVGQlNUaG5ReXhyUWtGQmEwSTFla1lzUjBGRGRFSXNUVUZEUml4UlFVTkZkM1JFTEVWQlFVODNXU3hoUVVsWUxFOUJRVTl0WlN4SFFWRlVVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWWGxvUkN4blFrRkJhMElzVjBGRGNFVXNTVUZCU1hOU0xFVkJRVk1zU1VGQlNXdzJReXhGUVVGTGEyaERMR0ZCUlhSQ0xFOUJSRUUwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdWIwSXNkMEpCUVhkQ01YaEVMRXRCUVUxNWVFUXNSMEZEYWtWQkxFVkJRVTl5V1N4dFFrRlhhRUpwV0N4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdWIwSXNkMEpCUVRCQ0xGTkJRVk51TDBNc1JVRkJVMnN2UXl4SFFVTndSaXhKUVVGSmJubEVMRTlCUVVseGVVUXNSMEZEVW5KNVJDeEZRVUZKYVZRc1JVRkJVWE1yUlN4bFFVTk9lbmhHTEU5QlFWTXNSMEZEWW5GNVJDeEZRVUZQTlZVc2NVSkJRMHdzUlVGRFFYWTVReXhGUVVOQkszZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQnZRaXg1UWtGSk9VTXNUMEZFVkhCNVJDeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlR6bGhMRmxCUTB3c1JVRkRRWEl6UXl4SFFVbExMRTlCUkZSQkxFVkJRVEpDYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6RjNReXhGUVVGVExFdEJSWGhFYXk5RExFVkJRVTh4WVN4WFFVTk1MRVZCUTBGNk0wTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGRtRXNXVUZEVEN4RlFVTkJOVE5ETEVkQlNVc3NUMEZFVkVFc1JVRkJlVU5wV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZkRVZyTDBNc1JVRkJUM0JoTEZkQlEwd3NSVUZEUVM4elF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU5cVlTeFpRVU5NTEVWQlEwRnNORU1zU1VGVFJtbFpMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q1F5eFRRVUZUY0RkRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZETDBVc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRhamxFTEZOQlFWTTRla01zUlVGQmNVSXpkMFFzVDBGaE1VWnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRhamxFTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRkRVlzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXRGhuUXl4VFFVRnBSQ3hQUVVGMFEzUjVSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVelJPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4RlFVTndSWFY1Uml4WlFVRXlSQ3hQUVVFM1EzWjVSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZSYVVNc1owSkJRV2RDZVU0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFZEJUV2hHTEU5QlNFbHplRVFzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVE1UVkNMR3RDUVVGdlFpeFRRVUZUWjFJc1IwRkRPVVVzU1VGQlNUZEdMRVZCUVZNc1NVRkJTV2d3UXl4RlFVRkxjVFpDTEdGQlFXRjNaaXhIUVVNdlFsQXNSVUZCVFN4SlFVRkpVaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlEzaEVMRTlCUVU5NmNFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNReXhUUVVGVGVtOUNMRFJDUVVFMFFsSXNSVUZCUzNSR0xFbEJWemRHT0VVc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q1F5eFRRVUZUZW05Q0xEUkNRVUU0UWl4VFFVRlRVaXhGUVVGTGRFWXNSMEZETjBZc1MwRkJUMEVzUlVGQlQyaGFMR05CUTFKbldpeEZRVUZQYWxvc1kwRkVZeXhEUVV0NlFpeFBRVVJaYVZvc1JVRkJUM0JhTEd0Q1FVVnVRaXhMUVVGTExFVkJRMGdzU1VGQlNYQXdReXhGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKYVdoRExGbEJRVmt2ZWtZc1IwRkRhRUlzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVdkRGQzUkVMRVZCUVU5c1lTeFhRVU16UTNkbUxFVkJRVWxyYUVNc1pVRkJaV2d3Uml4SFFVTnVRaXhOUVVOR0xGRkJRMFYzZEVRc1JVRkJUemRaTEdGQlNWZ3NUMEZCVDIxbExFZEJVVlJTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UWtNc1UwRkJVM0EzUlN4VlFVRlZlV2hFTEdkQ1FVRnJRaXhYUVVNM1JTeEpRVUZKYzFJc1JVRkJVeXhKUVVGSmJEWkRMRVZCUVV0cmFFTXNZVUZGZEVJc1QwRkVRVFJZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UWtNc1UwRkJVM0J2UWl4M1FrRkJkMEl4ZUVRc1MwRkJUWGw0UkN4SFFVTXhSVUVzUlVGQlQzSlpMRzFDUVZkb1FtbFlMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQnZRaXgzUWtGQk1FSXNVMEZCVTI0dlF5eEZRVUZUYXk5RExFZEJRemRHTEVsQlFVbHVlVVFzVDBGQlNYRjVSQ3hGUVVWRExFOUJSRlJ5ZVVRc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUMnBoTEZsQlEwd3NSVUZEUVd3MFF5eEhRVWxMTEU5QlJGUkJMRVZCUVRSQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhwRWF5OURMRVZCUVU5MFlTeFZRVU5NTEVWQlEwRTNNME1zU1VGVlRpdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlFWTndOMFVzVlVGQlZYTjZSaXhaUVVGakxGZEJRM3BGTEU5QlFUaENlalpGTEVWQlFVczBjRU1zVVVGQlVYbERMRzlDUVVGdlFqVnFSQ3hMUVVGTkxFVkJRVWNzUzBGUk1VVnhkMFFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRjRGRGTEZWQlFWVnZla1lzV1VGQll5eFRRVUZUTDNwR0xFZEJRMnhHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRa01zVTBGQlUzQTNSU3hWUVVGVmRYcEdMR05CUVdkQ0xGZEJRek5GTEU5QlFVOHhOa1VzUlVGQlN6UndReXhSUVVGUk9FTXNVMEZCVTJwclJDeExRVUZOTEU5QlFVY3llRVFzU1VGUmVFTjBRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlFWTndOMFVzVlVGQlZYZDZSaXhaUVVGakxGZEJRM3BGTEU5QlFYbERMRTFCUVd4RE16WkZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEpETEZOQlFWTndOMFVzVlVGQlZYbDZSaXhsUVVGcFFpeFhRVU0xUlN4UFFVRXJRalUyUlN4RlFVRkxOSEJETEZGQlFWRXdReXd5UWtGQk1rSTNha1FzUzBGQlRTeEhRVUZITEVsQlVXeEdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UWtNc1UwRkJVM0EzUlN4VlFVRlZjWHBHTEdWQlFXbENMRk5CUVZOb01FWXNSMEZEY2tZc1QwRkJUM2RhTEVWQlFVczBjRU1zVVVGQlVUaERMRk5CUVZOcWEwUXNTMEZCVFN4RlFVRkhha01zU1VGUmVFTnplVVFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk0wYmtJc2IwSkJRVzlDUXl4VFFVRlRjRGRGTEZWQlFWVXdla1lzYVVKQlFXMUNMRmRCUXpsRkxFOUJRVTgzTmtVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKRExGTkJRVk53TjBVc1ZVRkJWVEo2Uml4bFFVRnBRaXhYUVVNMVJTeFBRVUY1UXl4TlFVRnNRemsyUlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWdGVVWXNXVUZCWXl4WFFVTm9SU3hQUVVORmREVkZMRVZCUVVzMGNFTXNVVUZCVVRCRUxIZENRVUYzUWpkclJDeExRVUZOY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFrTXNVMEZCVlN4SlFWRnVSM3B3UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRSNlJpeFpRVUZqTEZOQlFWTjJNRVlzUjBGRGVrVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhFTEhkQ1FVRjNRbXBzUkN4TFFVRk5MRVZCUVVkcVF5eEpRVk4yUkhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZUSjVSaXhSUVVGVkxGTkJRVk4wTDBJc1JVRkJWME1zUjBGRGFFWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSkRMRk5CUVZVNWJrSXNTVUZSZUVnelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZUWjZSaXhqUVVGblFpeFhRVU5zUlN4UFFVRlBkbmxHTEV0QlFVdHplVVlzV1VGQldTeExRVkV4UW1wcFF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZUaDZSaXh0UWtGQmNVSXNWMEZEZGtVc1QwRkJPRUpxTjBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlRSNVJpeHRRa0ZCY1VJc1UwRkJVM1o2Uml4SFFVTm9SaXhQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZTdDZSaXh4UWtGQmRVSXNWMEZEZWtVc1QwRkJUMnczUlN4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1QwRkJSeko0UkN4SlFWRjRRM1JDTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWWnpCR0xHMUNRVUZ4UWl4WFFVTjJSU3hQUVVGNVF5eE5RVUZzUTI0M1JTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVnBNRVlzYjBKQlFYTkNMRmRCUTNoRkxFOUJRVGhDY0RkRkxFVkJRVXMwY0VNc1VVRkJVWGxETEc5Q1FVRnZRalZxUkN4TFFVRk5MRVZCUVVjc1NVRlJNVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZVMmVVWXNiMEpCUVhOQ0xGTkJRVk40ZWtZc1IwRkRha1lzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVnJNRVlzYzBKQlFYZENMRmRCUXpGRkxFOUJRVTl5TjBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlcwd1JpeHZRa0ZCYzBJc1YwRkRlRVVzVDBGQmVVTXNUVUZCYkVOME4wVXNSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVMnBxUkN4TFFVRk5MRWxCVVhKRGNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZiekJHTEc5Q1FVRnpRaXhYUVVONFJTeFBRVUU0UW5ZM1JTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFbEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVk9IbEdMRzlDUVVGelFpeFRRVUZUZW5wR0xFZEJRMnBHTEU5QlFVOTNXaXhGUVVGTE5IQkRMRkZCUVZFNFF5eFRRVUZUYW10RUxFdEJRVTBzUlVGQlIycERMRWxCVVhoRGMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZjVEJHTEhOQ1FVRjNRaXhYUVVNeFJTeFBRVUZQZURkRkxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeFBRVUZITW5oRUxFbEJVWGhEZEVJc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNMGJrSXNiMEpCUVc5Q2JqZEZMRlZCUVZWek1FWXNiMEpCUVhOQ0xGZEJRM2hGTEU5QlFYbERMRTFCUVd4RGVqZEZMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk5xYWtRc1MwRkJUU3hKUVZGeVEzRjNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWWFV3Uml4bFFVRnBRaXhYUVVOdVJTeFBRVUU0UWpFM1JTeEZRVUZMTkhCRExGRkJRVkV5UXl4cFEwRkJhVU01YWtRc1MwRkJUU3hGUVVGSExFbEJVWFpHY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE5HNUNMRzlDUVVGdlFtNDNSU3hWUVVGVkszbEdMR1ZCUVdsQ0xGTkJRVk14ZWtZc1IwRkROVVVzVDBGQlQzZGFMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hGUVVGSGFrTXNTVUZSZUVOemVVUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVjNNRVlzYVVKQlFXMUNMRmRCUTNKRkxFOUJRVTh6TjBVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlhrd1JpeGxRVUZwUWl4WFFVTnVSU3hQUVVGNVF5eE5RVUZzUXpVM1JTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVXdNRVlzWlVGQmFVSXNWMEZEYmtVc1QwRkJORU0zTjBVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWTjRSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpSdVFpeHZRa0ZCYjBKdU4wVXNWVUZCVlhsNVJpeHhRa0ZCZFVJc1YwRkRla1VzVDBGQk9FSTFOVVVzUlVGQlN6UndReXhSUVVGUmIwTXNWMEZEZGtOMmFrUXNTMEZCUzI5NlJpeHRRa0ZYV0M5cFF5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6UnVRaXh2UWtGQmIwSnVOMFVzVlVGQlZUSXdSaXh2UWtGQmMwSXNWMEZEZUVVc1QwRkJiVU01TjBVc1JVRkJTelJ3UXl4UlFVRlJjVU1zVlVGRE5VTjRha1FzUzBGQlMyOTZSaXh0UWtGUldDOXBReXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVelJ1UWl4dlFrRkJiMEp1TjBVc1ZVRkJWV2Q2Uml4bFFVRnBRaXhUUVVGVE0zcEdMRWRCUXpWRkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWTkRCR0xHbENRVUZ0UWl4WFFVTnlSU3hQUVVGUEx6ZEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVTJNRVlzWlVGQmFVSXNWMEZEYmtVc1QwRkJlVU1zVFVGQmJFTm9PRVVzUlVGQlN6UndReXhSUVVGUk9FSXNVMEZCVTJwcVJDeExRVUZOTEVsQlVYSkRjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWT0RCR0xHdENRVUZ2UWl4WFFVTjBSU3hQUVVFNFFtbzRSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRXRCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRORzVDTEc5Q1FVRnZRbTQzUlN4VlFVRlZhWHBHTEd0Q1FVRnZRaXhUUVVGVE5YcEdMRWRCUXk5RkxFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUTkc1Q0xHOUNRVUZ2UW00M1JTeFZRVUZWS3pCR0xHOUNRVUZ6UWl4WFFVTjRSU3hQUVVGUGJEaEZMRVZCUVVzMGNFTXNVVUZCVVRoRExGTkJRVk5xYTBRc1MwRkJUU3hQUVVGSE1uaEVMRWxCVVhoRGRFSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTBia0lzYjBKQlFXOUNiamRGTEZWQlFWVm5NVVlzYTBKQlFXOUNMRmRCUTNSRkxFOUJRWGxETEUxQlFXeERiamhGTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZOcWFrUXNTMEZCVFN4SlFWVnlRM0YzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsY25CQ0xHZENRVUZyUWl4RFFVRkRMRWRCU1hCRWJqVkRMRVZCUVVzMGNFTXNVVUZCVVVNc2NVSkJZV3BDYVZBc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlhJM1JTeFZRVUZWYldVc1UwRkJWeXhUUVVGVE9IcERMRWRCUTJwRkxFOUJRVTlPTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1ZzT1VRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRTFSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsYkRsRUxGTkJRVmNzVTBGQlV5dDZReXhGUVVGcFFrTXNSMEZEZUVVc1NVRkJUME1zUlVGQlRTeERRVU5ZTm1sRExHRkJRV053T0VVc1JVRkJTelJ3UXl4UlFVRlJNRUlzWVVGQllXZFBMRVZCUVVrcmFVTXNhMEpCUXpWRGRtcERMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlUzaENMRk5CUVZVcmVrTXNTVUZOTVVRc1QwRklTVUVzU1VGRFJrVXNSVUZCU1Vzc2NVSkJRWFZDVGl4SFFVVjBRa01zU1VGVlZGUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpUTTFRaXhyUWtGQmIwSXNVMEZCVTJkU0xFZEJRMmhGTEVsQlFVazNSaXhGUVVGVExFbEJRVWxvTUVNc1JVRkJTM0UyUWl4aFFVRmhkMllzUjBGREwwSlFMRVZCUVUwc1NVRkJTVklzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkRjRU1zVDBGQlR6RndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVzlDTERSQ1FVRTBRbElzUlVGQlMzUkdMRWxCVnk5Rk9FVXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURnZRaXcwUWtGQk9FSXNVMEZCVTFJc1JVRkJTM1JHTEVkQlF5OUZMRXRCUVU5QkxFVkJRVTlvV2l4alFVTlNaMW9zUlVGQlQycGFMR05CUkdNc1EwRkxla0lzVDBGRVdXbGFMRVZCUVU5d1dpeHJRa0ZGYmtJc1MwRkJTeXhGUVVOSUxFbEJRVWx3TUVNc1JVRkJVU3hKUVVGSmMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGRGNrUnJkRU1zUlVGQlR6bFlMRmxCUVZreE1VTXNSVUZCVFhONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZObmVrTXNOa0pCUTNaRlVpeEZRVUZKWjJwRExGbEJRVms1TVVZc1IwRkRhRUlzVFVGRFJpeFJRVU5GZDNSRUxFVkJRVTgzV1N4aFFVbFlMRTlCUVU5dFpTeEhRVkZVVWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsY2pkRkxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlF5OUVMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlhKdlFpeDNRa0ZCZDBJeGVFUXNTMEZCVFhsNFJDeEhRVU0xUkVFc1JVRkJUM0paTEcxQ1FWZG9RbWxZTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1Z5YjBJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVNdlJTeEpRVUZKYm5sRUxFZEJRMHBCTEVWQlFVbHBWQ3hGUVVGUmNXaEdMRzFDUVVOT2VEQkdMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVTNGNlF5d3dRa0ZaY0VSeVFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZOeGVVTXNaMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlNXcEZialZETEVWQlFVczBjRU1zVVVGQlVVTXNjVUpCWVdwQ2FWQXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVE0yWXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNeFJTeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk40UWl4VFFVRlRPSHBETEVWQlFYRkNNM2RFTEU5QllYSkdjWGRFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVM2hDTEZOQlFWY3NVMEZCVXl0NlF5eEZRVUZwUWtNc1IwRkRha1lzU1VGQlNYWjRSQ3hGUVVGSGQzaEVMRVZCUVUwc1EwRkRXR2RxUXl4VFFVRjVSQ3hQUVVFNVEzZ3dSaXhGUVVGSmFWa3NSVUZCU3pSd1F5eFJRVUZSSzBJc2FVSkJRV2xDTWs0c1JVRkJTeXhUUVVGall5eEZRVUZaY25sRUxFVkJRelZGZVRCR0xGTkJRWGxFTEU5QlFUbERlakJHTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFclFpeHBRa0ZCYVVJeVRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZETlVVd01FWXNaMEpCUVhkRUxFOUJRWFJETVRCR0xFVkJRVWxwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE5FNHNSVUZCU3l4VFFVRmpZeXhGUVVGWmNubEVMRVZCUXpORk1qQkdMR2xDUVVGNVJDeFBRVUYwUXpNd1JpeEZRVUZKYVZrc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlV6Uk9MRVZCUVVzc1UwRkJZMk1zUlVGQldYSjVSQ3hGUVVNMVJUUXdSaXcwUWtGQk5FVXNUMEZCT1VNMU1FWXNSVUZCU1dsWkxFVkJRVXMwY0VNc1VVRkJVU3RDTEdsQ1FVRnBRakpPTEVWQlFVc3NVMEZCWTJNc1JVRkJXWEo1UkN4SFFVMXFSeXhQUVVoSmMzaEVMRWxCUTBaRkxFVkJRVWxMTEhGQ1FVRjFRazRzUjBGRmRFSkRMRWxCVlZSVUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXl0b1F5eHJRa0ZCYjBJc1UwRkJVMmRTTEVkQlEzcEZMRWxCUVVrM1JpeEZRVUZUTEVsQlFVbG9NRU1zUlVGQlMzRTJRaXhoUVVGaGQyWXNSMEZETDBKUUxFVkJRVTBzU1VGQlNWSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVOdVJDeFBRVUZQWjNsRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVTJkNlF5dzBRa0ZCTkVKU0xFVkJRVXQwUml4SlFWZDRSamhGTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVMmQ2UXl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRM2hHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVVklMRWxCUkVFc1NVRkJTVGhPTEVWQlFYZERjMHdzUlVGQlQyeGFMR05CUVdkQ2Exb3NSVUZCVDI1WUxHdENRVUZ2UWl4RFFVRkRiVmdzUlVGQlQzWmhMR0ZCUXpkR2JEQkRMRVZCUVVrc1JVRkJSMEVzUlVGQlNXMXFSQ3hGUVVGUE4yZEVMRTlCUVZGMFF5eEpRVU5xUXl0NlJDeEZRVUZKYzJwRExGRkJRVkZzTUVNc1JVRkJUMjVxUkN4SlFVVnlRaXhOUVVOR0xFdEJRVXNzUlVGRlNDeEpRVVJKYldwRUxFVkJRWGREYzB3c1JVRkJUMnhhTEdOQlFXZENhMW9zUlVGQlQyNVlMR3RDUVVGdlFpeERRVUZEYlZnc1JVRkJUM1poTEdGQlF6ZEdiREJETEVWQlFVa3NSVUZCUjBFc1JVRkJTVzFxUkN4RlFVRlBOMmRFTEU5QlFWRjBReXhKUVVOcVF5dDZSQ3hGUVVGSmRXcERMRkZCUVZGdU1FTXNSVUZCVDI1cVJDeEpRVVZ5UWl4TlFVTkdMRXRCUVVzc1JVRkRTQ3hKUVVGSmFVSXNSVUZCSzBKM2RFUXNSVUZCVDJoaExHRkJRekZEYzJZc1JVRkJTWGRxUXl4dFFrRkJiVUowTWtZc1IwRkRka0lzVFVGRFJpeExRVUZMTEVWQlEwTkJMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWw1YWtNc2IwSkJRVzlDZGpKR0xFZEJRM2hDTEUxQlEwWXNTMEZCU3l4RlFVTkRRU3hGUVVFclFuZDBSQ3hGUVVGUGFHRXNZVUZETVVOelppeEZRVUZKTUdwRExESkNRVUV5UW5neVJpeEhRVU12UWl4TlFVTkdMRkZCUTBWM2RFUXNSVUZCVHpkWkxHRkJTVmdzVDBGQlQyMWxMRWRCVVZSU0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXpObUxGVkJRVlY1YUVRc1owSkJRV3RDTEZkQlEzaEZMRWxCUVVselVpeEZRVUZUTEVsQlFVbHNOa01zUlVGQlMydG9ReXhoUVVWMFFpeFBRVVJCTkZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUY1hwRExIZENRVUYzUWpGNFJDeExRVUZOZVhoRUxFZEJRM0pGUVN4RlFVRlBjbGtzYlVKQlYyaENhVmdzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRjWHBETEhkQ1FVRXdRaXhUUVVGVGJpOURMRVZCUVZOckwwTXNSMEZEZUVZc1NVRkJTVzU1UkN4UFFVRkpjWGxFTEVkQlExSnllVVFzUlVGQlNXbFVMRVZCUVZGcGFVWXNaVUZEVG5BeFJpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQzaFZMR2xDUVVOTUxFVkJRMEV6T1VNc1NVRkhTa0VzUlVGQlNXbFVMRVZCUVZGcmFVWXNaVUZEVG5JeFJpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlQzaFZMR2xDUVVOTUxFVkJRMEV6T1VNc1IwRkpTeXhQUVVSVVFTeEZRVUV5UW1sWkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTXhkME1zUlVGQlV5eExRVVY0UkdzdlF5eEZRVUZQYW1Fc1dVRkRUQ3hGUVVOQmJEUkRMRWRCU1Vzc1QwRkVWRUVzUlVGQk1rSnBXU3hGUVVGTE5IQkRMRkZCUVZFNFFpeFRRVUZUTVhkRExFVkJRVk1zUzBGRmVFUnJMME1zUlVGQlQycGhMRmxCUTB3c1JVRkRRV3cwUXl4SlFVZEtRU3hGUVVGSmFWUXNSVUZCVVcxcFJpeHJRMEZEVG5ReFJpeFBRVUZUTEVkQlEySnhlVVFzUlVGQlR6bFZMRzlDUVVOTUxFVkJRMEZ5T1VNc1NVRlZUaXQzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZPREZHTEZsQlFXTXNWMEZEY0VVc1QwRkJjME5xT1VVc1JVRkJTelJ3UXl4UlFVRlJLMElzYVVKQlFXbENiR3BFTEV0QlFVMHNTVUZSTlVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVE0yWXNWVUZCVldreVJpeFpRVUZqTEZOQlFWTTFNa1lzUjBGRE4wVXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1IwRkJVeXhMUVZOcVJITjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVemh1UWl4bFFVRmxNVGRFTEZOQlFWTXpaaXhWUVVGVmVURkdMRkZCUVZVc1UwRkJVM0F5Uml4RlFVRlBhVEJFTEVkQlEyaEdMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSZFVRc2JVSkJRVzFDTVd0RUxFdEJRVTBzUlVGQlIycERMRVZCUVU5cE1FUXNTVUZSZWtRelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZNelppeFZRVUZWYXpKR0xHTkJRV2RDTEZkQlEzUkZMRTlCUVU4MU1FWXNTMEZCU3pJd1JpeFpRVUZaTEV0QlVURkNkR3RETEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVek5tTEZWQlFWVXJNVVlzV1VGQll5eFhRVU53UlN4UFFVRnpRMnc1UlN4RlFVRkxOSEJETEZGQlFWRXJRaXhwUWtGQmFVSnNha1FzUzBGQlRTeEpRVkUxUlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZNelppeFZRVUZWYlRKR0xGbEJRV01zVTBGQlV6a3lSaXhIUVVNM1JTeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SFFVRlRMRXRCVTJwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlV6Tm1MRlZCUVZVd01VWXNVVUZCVlN4VFFVRlRjakpHTEVWQlFVOXBNRVFzUjBGRGFFWXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkYxUkN4dFFrRkJiVUl4YTBRc1MwRkJUU3hGUVVGSGFrTXNSVUZCVDJrd1JDeEpRVkY2UkROQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXpObUxGVkJRVlZ2TWtZc1kwRkJaMElzVjBGRGRFVXNUMEZCVHprd1JpeExRVUZMTmpCR0xGbEJRVmtzUzBGUk1VSjRhME1zVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk00YmtJc1pVRkJaVEUzUkN4VFFVRlRNMllzVlVGQlZYRXlSaXh0UWtGQmNVSXNWMEZETTBVc1QwRkJPRUo0T1VVc1JVRkJTelJ3UXl4UlFVRlJlVU1zYjBKQlFXOUNOV3BFTEV0QlFVMHNSVUZCUnl4TFFWRXhSWEYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZNakZHTEcxQ1FVRnhRaXhUUVVGVGRESkdMRWRCUTNCR0xFOUJRVTkzV2l4RlFVRkxOSEJETEZGQlFWRTRReXhUUVVGVGFtdEVMRXRCUVUwc1JVRkJSMnBETEVsQlVYaERjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUT0c1Q0xHVkJRV1V4TjBRc1UwRkJVek5tTEZWQlFWVnpNa1lzY1VKQlFYVkNMRmRCUXpkRkxFOUJRVTk2T1VVc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFOUJRVWN5ZUVRc1NVRlJlRU4wUWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXpodVFpeGxRVUZsTVRkRUxGTkJRVk16Wml4VlFVRlZkVEpHTEcxQ1FVRnhRaXhYUVVNelJTeFBRVUY1UXl4TlFVRnNRekU1UlN4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVGFtcEVMRXRCUVUwc1NVRlJja054ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWWGN5Uml4dlFrRkJjMElzVjBGRE5VVXNUMEZCT0VJek9VVXNSVUZCU3pSd1F5eFJRVUZSZVVNc2IwSkJRVzlDTldwRUxFdEJRVTBzUlVGQlJ5eExRVkV4UlhGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZNelppeFZRVUZWTkRGR0xHOUNRVUZ6UWl4VFFVRlRkakpHTEVkQlEzSkdMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdVeE4wUXNVMEZCVXpObUxGVkJRVlY1TWtZc2MwSkJRWGRDTEZkQlF6bEZMRTlCUVU4MU9VVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZNelppeFZRVUZWTURKR0xHOUNRVUZ6UWl4WFFVTTFSU3hQUVVGNVF5eE5RVUZzUXpjNVJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVE0yWXNWVUZCVldjeVJpd3JRa0ZCYVVNc1YwRkRka1lzVDBGQmMwTnVPVVVzUlVGQlN6UndReXhSUVVGUkswSXNhVUpCUVdsQ2JHcEVMRXRCUVUwc1NVRlJOVVZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNNGJrSXNaVUZCWlRFM1JDeFRRVUZUTTJZc1ZVRkJWVEl5Uml3clFrRkJhVU1zVTBGQlUzUXpSaXhIUVVOb1J5eFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SFFVRlRMRXRCVTJwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVXhOMFFzVTBGQlV6Tm1MRlZCUVZVMk1VWXNNa0pCUVRaQ0xGTkJRVk40TWtZc1JVRkJUMmt3UkN4SFFVTnVSeXhQUVVGUGVqWkRMRVZCUVVzMGNFTXNVVUZCVVhWRUxHMUNRVUZ0UWpGclJDeExRVUZOTEVWQlFVZHFReXhGUVVGUGFUQkVMRWxCVVhwRU0wSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVE0yWXNWVUZCVlRReVJpeHBRMEZCYlVNc1YwRkRla1lzVDBGQlQzUXhSaXhMUVVGTGNURkdMQ3RDUVVFclFpeExRVkUzUTJoc1F5eE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbGNqZEZMRlZCUVZWck1VWXNaMEpCUVd0Q0xGZEJReTlFTEU5QlEwVnlPRVVzUlVGQlN6UndReXhSUVVGUk1FUXNkMEpCUVhkQ04ydEVMRXRCUVUxeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTTRia0lzWlVGQlpURTNSQ3hUUVVGVkxFbEJVVGxHWjNsRExFMUJRVTFETEU5QlFVOHlRaXhUUVVGVE9HNUNMR1ZCUVdWeU4wVXNWVUZCVlRZeVJpeG5Ra0ZCYTBJc1UwRkJVM2d6Uml4SFFVTjRSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VRc2QwSkJRWGRDYW14RUxFdEJRVTBzUlVGQlIycERMRWxCVTNaRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRPRzVDTEdWQlFXVnlOMFVzVlVGQlZXMHhSaXhaUVVGakxGTkJRVk01YUVNc1JVRkJWME1zUjBGREwwVXNUMEZCVDNvMlF5eEZRVUZMTkhCRExGRkJRVkVyUkN3d1FrRkJNRUpzYkVRc1MwRkJUU3hGUVVGSEszaEVMRVZCUVZjeFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbE1UZEVMRk5CUVZVeWVrTXNTVUZSYmtnelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV6aHVRaXhsUVVGbGNqZEZMRlZCUVZVNE1rWXNhMEpCUVc5Q0xGZEJRMnBGTEU5QlFVOTRNVVlzUzBGQlMzVXhSaXhuUWtGQlowSXNTMEZWT1VKc2JFTXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENkSEJDTEdkQ1FVRnJRaXhEUVVGRExFZEJTWFpFYmpWRExFVkJRVXMwY0VNc1VVRkJVVU1zY1VKQllXcENhVkFzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDZERkRkxGVkJRVlZ0WlN4VFFVRlhMRk5CUVZNNGVrTXNSMEZEY0VVc1QwRkJUMDRzVFVGQlRVTXNUMEZCVHpKQ0xGTkJRVk1yYmtJc2EwSkJRV3RDYmpsRUxGTkJRVk00ZWtNc1JVRkJjVUl6ZDBRc1QwRmhMMFZ4ZDBRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q2JqbEVMRk5CUVZjc1UwRkJVeXQ2UXl4RlFVRnBRa01zUjBGRE0wVXNTVUZCVDBNc1JVRkJUU3hEUVVOWU1tdERMR1ZCUVdkQ2JDdEZMRVZCUVVzMGNFTXNVVUZCVVRCQ0xHRkJRV0ZuVHl4RlFVRkpObXRETEc5Q1FVTTVRM0pzUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmR3T1VRc1UwRkJWU3Q2UXl4SlFVMHZSQ3hQUVVoSlFTeEpRVU5HUlN4RlFVRkpTeXh4UWtGQmRVSk9MRWRCUlhSQ1F5eEpRVlZVVkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBJMU5VSXNhMEpCUVc5Q0xGTkJRVk5uVWl4SFFVTnVSU3hKUVVGSk4wWXNSVUZCVXl4SlFVRkphREJETEVWQlFVdHhOa0lzWVVGQllYZG1MRWRCUXk5Q1VDeEZRVUZOTEVsQlFVbFNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVTndReXhQUVVGUE0zQkNMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRak52UWl3MFFrRkJORUpTTEVWQlFVdDBSaXhKUVZkc1JqaEZMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRak52UWl3MFFrRkJPRUlzVTBGQlUxSXNSVUZCUzNSR0xFZEJRMnhHTEV0QlFVOUJMRVZCUVU5b1dpeGpRVU5TWjFvc1JVRkJUMnBhTEdOQlJHTXNRMEZMZWtJc1QwRkVXV2xhTEVWQlFVOXdXaXhyUWtGRmJrSXNTMEZCU3l4RlFVTklMRWxCUVVsd01FTXNSVUZCVVN4SlFVRkpjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkRlRVF4ZFVJc1JVRkJUemxZTEZsQlFWa3hNVU1zUlVGQlRYTjVSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWYzFiMElzTmtKQlF6VkZVaXhGUVVGSk9HdERMR05CUVdNMU0wWXNSMEZEYkVJc1RVRkRSaXhSUVVORmQzUkVMRVZCUVU4M1dTeGhRVWxZTEU5QlFVOXRaU3hIUVZGVVVpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSjBOMFVzVlVGQlZYbG9SQ3huUWtGQmEwSXNWMEZEYkVVc1NVRkJTWE5TTEVWQlFWTXNTVUZCU1d3MlF5eEZRVUZMYTJoRExHRkJSWFJDTEU5QlJFRTBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEowYjBJc2QwSkJRWGRDTVhoRUxFdEJRVTE1ZUVRc1IwRkRMMFJCTEVWQlFVOXlXU3h0UWtGWGFFSnBXQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEowYjBJc2QwSkJRVEJDTEZOQlFWTnVMME1zUlVGQlUyc3ZReXhIUVVOc1JpeEpRVUZKYm5sRUxFZEJRMHBCTEVWQlFVbHBWQ3hGUVVGUmJXcEdMSEZDUVVOT2RESkdMRTlCUVZNc1IwRkRZbkY1UkN4RlFVRlBOVlVzY1VKQlEwd3NSVUZEUVhZNVF5eEZRVU5CSzNkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNadlFpd3dRa0ZaZWtSeVFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMmNFSXNaMEpCUVd0Q0xFTkJRVU1zUjBGSmJFVnVOVU1zUlVGQlN6UndReXhSUVVGUlF5eHhRa0ZoYWtKcFVDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlcxbExGTkJRVmNzVTBGQlV6aDZReXhIUVVNdlJTeFBRVUZQVGl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmR3T1VRc1UwRkJVemg2UXl4RlFVRnhRak4zUkN4UFFXRXhSbkYzUkN4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmR3T1VRc1UwRkJWeXhUUVVGVEszcERMRVZCUVdsQ1F5eEhRVU4wUml4SlFVRkpkbmhFTEVWQlFVZDNlRVFzUlVGQlRTeERRVU5ZWjJwRExGTkJRWGxFTEU5QlFUbERlREJHTEVWQlFVbHBXU3hGUVVGTE5IQkRMRkZCUVZFclFpeHBRa0ZCYVVJeVRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZETlVWek1rWXNWMEZCYlVRc1QwRkJkRU4wTWtZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEZEVWMU1rWXNUVUZCT0VNc1QwRkJkRU4yTWtZc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSVUZEYWtWMU1rTXNTVUZCTkVNc1QwRkJkRU4yTWtNc1JVRkJTV2xaTEVWQlFVczBjRU1zVVVGQlVUaENMRk5CUVZNMFRpeEZRVUZMTEZOQlFXTmpMRVZCUVZseWVVUXNSMEZOYWtVc1QwRklTWE40UkN4SlFVTkdSU3hGUVVGSlN5eHhRa0ZCZFVKT0xFZEJSWFJDUXl4SlFWVlVWQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWYzNOVUlzYTBKQlFXOUNMRk5CUVZOblVpeEhRVU01UlN4SlFVRkpOMFlzUlVGQlV5eEpRVUZKYURCRExFVkJRVXR4TmtJc1lVRkJZWGRtTEVkQlF5OUNVQ3hGUVVGTkxFbEJRVWxTTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUWtNc1YwRkRkRVFzVDBGQlR6VndRaXhOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWYzFiMElzTkVKQlFUUkNVaXhGUVVGTGRFWXNTVUZYTjBZNFJTeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZjMWIwSXNORUpCUVRoQ0xGTkJRVk5TTEVWQlFVdDBSaXhIUVVNM1JpeExRVUZQUVN4RlFVRlBhRm9zWTBGRFVtZGFMRVZCUVU5cVdpeGpRVVJqTEVOQlMzcENMRTlCUkZscFdpeEZRVUZQY0Zvc2EwSkJSVzVDTEV0QlFVc3NSVUZGU0N4SlFVUkJMRWxCUVVrNFRpeEZRVUYzUTNOTUxFVkJRVTlzV2l4alFVRm5RbXRhTEVWQlFVOXVXQ3hyUWtGQmIwSXNRMEZCUTIxWUxFVkJRVTkyWVN4aFFVTTNSbXd3UXl4RlFVRkpMRVZCUVVkQkxFVkJRVWx0YWtRc1JVRkJUemRuUkN4UFFVRlJkRU1zU1VGRGFrTXJla1FzUlVGQlNYTnFReXhSUVVGUmJEQkRMRVZCUVU5dWFrUXNTVUZGY2tJc1RVRkRSaXhMUVVGTExFVkJRMGdzU1VGQlNXbENMRVZCUVN0Q2QzUkVMRVZCUVU5b1lTeGhRVU14UTNObUxFVkJRVWxwYkVNc1kwRkJZeTh6Uml4SFFVTnNRaXhOUVVOR0xFdEJRVXNzUlVGRFEwRXNSVUZCSzBKM2RFUXNSVUZCVDNaaExGbEJRekZETm1Zc1JVRkJTV3RzUXl4VFFVRlRhRFJHTEVkQlEySXNUVUZEUml4TFFVRkxMRVZCUTBOQkxFVkJRU3RDZDNSRUxFVkJRVTkyWVN4WlFVTXhRelptTEVWQlFVazNhRUlzVDBGQlQycDRReXhIUVVOWUxFMUJRMFlzVVVGRFJYZDBSQ3hGUVVGUE4xa3NZVUZKV0N4UFFVRlBiV1VzUjBGUlZGSXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENReXhYUVVGWGRqZEZMRlZCUVZWNWFFUXNaMEpCUVd0Q0xGZEJRemRGTEVsQlFVbHpVaXhGUVVGVExFbEJRVWxzTmtNc1JVRkJTMnRvUXl4aFFVVjBRaXhQUVVSQk5GZ3NUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENReXhYUVVGWGRtOUNMSGRDUVVGM1FqRjRSQ3hMUVVGTmVYaEVMRWRCUXpGRlFTeEZRVUZQY2xrc2JVSkJWMmhDYVZnc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZG05Q0xIZENRVUV3UWl4VFFVRlRiaTlETEVWQlFWTnJMME1zUjBGRE4wWXNTVUZCU1c1NVJDeFBRVUZKY1hsRUxFZEJRMUp5ZVVRc1JVRkJTV2xVTEVWQlFWRnBhVVlzWlVGRFRuQXhSaXhQUVVGVExFZEJRMkp4ZVVRc1JVRkJUM2hWTEdsQ1FVTk1MRVZCUTBFek9VTXNSMEZKU3l4UFFVUlVRU3hGUVVFeVFtbFpMRVZCUVVzMGNFTXNVVUZCVVRoQ0xGTkJRVk14ZDBNc1JVRkJVeXhMUVVWNFJHc3ZReXhGUVVGUGFtRXNXVUZEVEN4RlFVTkJiRFJETEVkQlNVc3NUMEZFVkVFc1JVRkJNa0pwV1N4RlFVRkxOSEJETEZGQlFWRTRRaXhUUVVGVE1YZERMRVZCUVZNc1MwRkZlRVJyTDBNc1JVRkJUek5oTEZkQlEwd3NSVUZEUVhnelF5eEhRVWxMTEU5QlJGUkJMRVZCUVRKQ2FWa3NSVUZCU3pSd1F5eFJRVUZST0VJc1UwRkJVekYzUXl4RlFVRlRMRXRCUlhoRWF5OURMRVZCUVU4ellTeFhRVU5NTEVWQlEwRjRNME1zU1VGVlRpdDNSQ3hOUVVGTlF5eFBRVUZQTWtJc1UwRkJVeXR1UWl4clFrRkJhMEpETEZkQlFWZDJOMFVzVlVGQlZUZ3hSaXhaUVVGakxGZEJRM3BGTEU5QlFYTkRhamxGTEVWQlFVczBjRU1zVVVGQlVTdENMR2xDUVVGcFFteHFSQ3hMUVVGTkxFbEJVVFZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWYVRKR0xGbEJRV01zVTBGQlV6VXlSaXhIUVVOc1JpeFBRVUZQZDFvc1JVRkJTelJ3UXl4UlFVRlJPRU1zVTBGQlUycHJSQ3hMUVVGTkxFVkJRVWRxUXl4SFFVRlRMRXRCVTJwRWMzbEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRa01zVjBGQlYzWTNSU3hWUVVGVmVURkdMRkZCUVZVc1UwRkJVM0F5Uml4RlFVRlBhVEJFTEVkQlEzSkdMRTlCUVU5Nk5rTXNSVUZCU3pSd1F5eFJRVUZSZFVRc2JVSkJRVzFDTVd0RUxFdEJRVTBzUlVGQlIycERMRVZCUVU5cE1FUXNTVUZSZWtRelFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVldzeVJpeGpRVUZuUWl4WFFVTXpSU3hQUVVGUE5UQkdMRXRCUVVzeU1FWXNXVUZCV1N4TFFWRXhRblJyUXl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmQyTjBVc1ZVRkJWWE16Uml4alFVRm5RaXhYUVVNelJTeFBRVUU0UW5vclJTeEZRVUZMTkhCRExGRkJRVkY1UXl4dlFrRkJiMEkxYWtRc1MwRkJUU3hGUVVGSExFdEJVVEZGY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWYnpOR0xHTkJRV2RDTEZOQlFWTXZNMFlzUjBGRGNFWXNUMEZCVDNkYUxFVkJRVXMwY0VNc1VVRkJVVGhETEZOQlFWTnFhMFFzUzBGQlRTeEZRVUZIYWtNc1NVRlJlRU56ZVVRc1RVRkJUVU1zVDBGQlR6SkNMRk5CUVZNcmJrSXNhMEpCUVd0Q1F5eFhRVUZYZGpkRkxGVkJRVlYxTTBZc1owSkJRV3RDTEZkQlF6ZEZMRTlCUVU4eEswVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlhjelJpeGpRVUZuUWl4WFFVTXpSU3hQUVVGNVF5eE5RVUZzUXpNclJTeEZRVUZMTkhCRExGRkJRVkU0UWl4VFFVRlRhbXBFTEV0QlFVMHNTVUZSY2tOeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENReXhYUVVGWGRqZEZMRlZCUVZWNU0wWXNVMEZCVnl4WFFVTjBSU3hQUVVFNFFqVXJSU3hGUVVGTE5IQkRMRkZCUVZGNVF5eHZRa0ZCYjBJMWFrUXNTMEZCVFN4RlFVRkhMRWxCVVRGRmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRa01zVjBGQlYzWTNSU3hWUVVGVmNUTkdMRk5CUVZjc1UwRkJVMmcwUml4SFFVTXZSU3hQUVVGUGQxb3NSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRVZCUVVkcVF5eEpRVkY0UTNONVJDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlRBelJpeFhRVUZoTEZkQlEzaEZMRTlCUVU4M0swVXNSVUZCU3pSd1F5eFJRVUZST0VNc1UwRkJVMnByUkN4TFFVRk5MRTlCUVVjeWVFUXNTVUZSZUVOMFFpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlRJelJpeFRRVUZYTEZkQlEzUkZMRTlCUVhsRExFMUJRV3hET1N0RkxFVkJRVXMwY0VNc1VVRkJVVGhDTEZOQlFWTnFha1FzUzBGQlRTeEpRVkZ5UTNGM1JDeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSkRMRmRCUVZkMk4wVXNWVUZCVlhGM1F5eFBRVUZUTEZkQlEzQkZMRTlCUVRoQ2VETkNMRVZCUVVzMGNFTXNVVUZCVVhsRExHOUNRVUZ2UWpWcVJDeExRVUZOTEVWQlFVY3NTVUZSTVVWeGQwUXNUVUZCVFVNc1QwRkJUekpDTEZOQlFWTXJia0lzYTBKQlFXdENReXhYUVVGWGRqZEZMRlZCUVZWemQwTXNUMEZCVXl4VFFVRlRhbmhETEVkQlF6ZEZMRTlCUVU5M1dpeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNSVUZCUjJwRExFbEJVWGhEYzNsRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWTkdkR0xGTkJRVmNzVjBGRGRFVXNUMEZCVHk5dVJTeEZRVUZMTkhCRExGRkJRVkU0UXl4VFFVRlRhbXRFTEV0QlFVMHNUMEZCUnpKNFJDeEpRVkY0UTNSQ0xFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFrTXNWMEZCVjNZM1JTeFZRVUZWTm1kR0xFOUJRVk1zVjBGRGNFVXNUMEZCZVVNc1RVRkJiRU5vYjBVc1JVRkJTelJ3UXl4UlFVRlJPRUlzVTBGQlUycHFSQ3hMUVVGTkxFbEJVWEpEY1hkRUxFMUJRVTFETEU5QlFVOHlRaXhUUVVGVEsyNUNMR3RDUVVGclFuUTNSU3hWUVVGVlp6TkdMR3RDUVVGdlFpeFhRVU53UlN4UFFVTkZiaXRGTEVWQlFVczBjRU1zVVVGQlVUQkVMSGRDUVVGM1FqZHJSQ3hMUVVGTmNYZEVMRTFCUVUxRExFOUJRVTh5UWl4VFFVRlRLMjVDTEd0Q1FVRnJRa01zVjBGQldTeEpRVkZ1UnpWd1FpeE5RVUZOUXl4UFFVRlBNa0lzVTBGQlV5dHVRaXhyUWtGQmEwSjBOMFVzVlVGQlZUUXpSaXhyUWtGQmIwSXNVMEZCVTNZMFJpeEhRVU0zUlN4UFFVRlBkMW9zUlVGQlN6UndReXhSUVVGUk9FUXNkMEpCUVhkQ2FteEVMRXRCUVUwc1JVRkJSMnBETEVsQlUzWkVjM2xFTEUxQlFVMURMRTlCUVU4eVFpeFRRVUZUSzI1Q0xHdENRVUZyUW5RM1JTeFZRVUZWYVROR0xHTkJRV2RDTEZOQlFWTTFha01zUlVGQlYwTXNSMEZEY0VZc1QwRkJUM28yUXl4RlFVRkxOSEJETEZGQlFWRXJSQ3d3UWtGQk1FSnNiRVFzUzBGQlRTeEZRVUZISzNoRUxFVkJRVmN4UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKRExGZEJRVmxxYjBJc1NVRlJlRWd6UWl4TlFVRk5ReXhQUVVGUE1rSXNVMEZCVXl0dVFpeHJRa0ZCYTBKME4wVXNWVUZCVlRZelJpeHZRa0ZCYzBJc1YwRkRkRVVzVDBGQlQzWXlSaXhMUVVGTGN6SkdMR3RDUVVGclFpeExRVWxvUTNneFJpeEZRVUZMZEVNc1QwRkJUekpXTEU5QlFVODNXQ3hGUVVGVEszcEVMRTFCUVUxRExFOUJRVTh5UWl4WExHZENRMnd4VkhwRExFbEJRVWwxYTBNc1JVRkJkVUlzUlVGQlVTeEhRVU12UW01dVF5eEZRVUZQTEVWQlFWRXNSMEZCTkVKQkxFdEJSVE5EZVZFc1JVRkJaU3hYUVVOcVFpeFRRVUZUUVN4TFFVVlVMRTlCUkVGQkxFVkJRVmw0V1N4WlFVRmpMREpDUVVOdVFuZFpMRVZCU0ZNc1IwRnBRbXhDTEZOQlFWTXlNa0lzUlVGQmEwSkRMRVZCUVdGMGNrTXNSMEZEZEVOd2NrUXNTMEZCU3pBeVJpeFpRVUZqUVN4RlFVTnVRakV5Uml4TFFVRkxiM0pFTEZGQlFWVkJMRWRCUVZjc1IwRmlOVUl3VlN4RlFVRlpReXhoUVVGbExFTkJRM3BDZUZrc1YwRkJXU3hsUVVOYVJpeFJRVUZUZVZrc1JVRkRWREZYTEdWQlFXVXNSVUZEWmpoSExHZENRVUZuUWl4RlFVTm9Rbmx0UXl4WlFVRmhTQ3hGUVVGeFFuWXZRaXh2UWtGRGJFTjBUeXhoUVVGak5uUkRMRVZCUVhGQ2RDOUNMSE5DUVVkeVF6VTJSQ3hGUVVGUmQycEZMRmxCUVdOQkxFVkJUM1JDTWpKQ0xFVkJRV3RDTHpOR0xGVkJRVlZyTkVZc1lVRkJaU3hUUVVGelFqTnJRaXhGUVVGblFuQnRRaXhGUVVGVlozSkRMRWRCUTJoRkxFbEJRWEpDYkhWR0xGVkJRVlYyU2l4VFFVTmFlVE5HTEVWQlFWZHNkVVlzVlVGQlZTeEpRVVYyUWl4SlFVRkpNamxETEVWQlFWTXJTU3hGUVVGTFJDeE5RVUZOTUZFc1JVRkJXVU1zWVVGQll5eERRVU5vUkM5UUxGRkJRVk5wYVVJc1JVRkRWRGR4UWl4TFFVRk5jRzVFTEV0QlFVc3dNa1lzV1VGRFdEZHhReXhUUVVGVlFTeEZRVU5XTDBRc1ZVRkJWemx1UkN4TFFVRkxiM0pFTEZGQlFWRjBSQ3hWUVVONFFteDZReXhOUVVGUE5WVXNTMEZCUzI5eVJDeFJRVUZSZURKRExFMUJRM0JDWjNwRExFMUJRVThzVTBGQlZTdEZMRWRCUTJZc1IwRkJTV3R4UXl4RlFVTkdMRWRCUVVsc2NVTXNSVUZCVXpkc1JDeFRRVUZYZFc5RUxFVkJRVXRzU0N4TFFVRkxReXhIUVVGSkxFTkJRM0JETEVsQlFVbDNXaXhGUVVGTkxFbEJRVWw2TDBRc1RVRkJUWGR4UkN4RlFVRlRkMFFzWlVGRE4wSjVVaXhGUVVGSk4xRXNTMEZCVDNCRkxFVkJRVk0zYkVRc1QwRkRjRUk0TmtRc1JVRkJTUzlXTEZOQlFWZGpMRVZCUVZNMVJDeFRRVU40UWpoMFF5eEZRVUZUYWpGQ0xFVkJRVXNzVjBGRlpHa3hRaXhGUVVGVExFdEJRVTFzY1VNc1JVRkJVM0EyUXl4WlFVdG9ReXhOUVVGUExFTkJRMHhyTTBNc1QwRkJVU3hYUVVOT2IzUkRMRVZCUVZjc1MwRkRXSFozUXl4RlFVRlBhMFFzVjBGTFlteDBSQ3hGUVVGUmJUWkdMR3RDUVVGdlFrRXNSVUZGTlVJc1NVRkJTWFF5UWl4RlFVRjFRaXhYUVVONlFpeFRRVUZUUVN4TFFVVlVMRTlCUkVGQkxFVkJRVzlDTjFrc1dVRkJZeXh0UTBGRE0wSTJXU3hGUVVocFFpeEhRV2xDTVVJc1UwRkJVekl5UWl4RlFVRXdRa29zUlVGQllYUnlReXhIUVVNNVEzQnlSQ3hMUVVGTE1ESkdMRmxCUVdOQkxFVkJRMjVDTVRKR0xFdEJRVXR2Y2tRc1VVRkJWVUVzUjBGQlZ5eEhRV0kxUWl0VkxFVkJRVzlDUXl4bFFVRnBRaXhEUVVOdVF6ZFpMRmRCUVZrc2FVSkJRMXBHTEZGQlFWTTRXU3hGUVVOVUwxY3NaVUZCWlN4RlFVTm1PRWNzWjBKQlFXZENMRVZCUTJoQ2VXMURMRmxCUVdGSUxFVkJRWEZDY2k5Q0xITkNRVU5zUTNoUExHRkJRV00yZEVNc1JVRkJjVUp3TDBJc2QwSkJSM0pET1RaRUxFVkJRVkUyYWtVc2IwSkJRWE5DUVN4RlFVODVRakl5UWl4RlFVRXdRbkEwUml4VlFVRlZjVFJHTEdWQlFXbENMRk5CUVhkQ09XdENMRVZCUVdkQ2NHMUNMRVZCUVZWbmNrTXNSMEZETlVVc1NVRkJja0pzZFVZc1ZVRkJWWFpLTEZOQlExcDVNMFlzUlVGQlYyeDFSaXhWUVVGVkxFbEJSWFpDTEVsQlFVa3lPVU1zUlVGQlV5dEpMRVZCUVV0RUxFMUJRVTByVVN4RlFVRnZRa01zWlVGQlowSXNRMEZETVVSd1VTeFJRVUZUYVdsQ0xFVkJRMVEzY1VJc1MwRkJUWEJ1UkN4TFFVRkxNREpHTEZsQlExZzNjVU1zVTBGQlZVRXNSVUZEVmk5RUxGVkJRVmM1YmtRc1MwRkJTMjl5UkN4UlFVRlJkRVFzVlVGRGVFSnNla01zVFVGQlR6VlZMRXRCUVV0dmNrUXNVVUZCVVhneVF5eE5RVU53UW1kNlF5eE5RVUZQTEZOQlFWVXJSU3hIUVVObUxFZEJRVWxyY1VNc1JVRkRSaXhIUVVGSmJIRkRMRVZCUVZNM2JFUXNVMEZCVjNWdlJDeEZRVUZMYkVnc1MwRkJTME1zUjBGQlNTeERRVU53UXl4SlFVRkpkMW9zUlVGQlRTeEpRVUZKZWk5RUxFMUJRVTEzY1VRc1JVRkJVM2RFTEdWQlF6ZENlVklzUlVGQlNUZFJMRXRCUVU5d1JTeEZRVUZUTjJ4RUxFOUJRM0JDT0RaRUxFVkJRVWt2Vml4VFFVRlhZeXhGUVVGVE5VUXNVMEZEZUVJNGRFTXNSVUZCVTJveFFpeEZRVUZMTEZkQlJXUnBNVUlzUlVGQlV5eExRVUZOYkhGRExFVkJRVk53TmtNc1dVRkxhRU1zVFVGQlR5eERRVU5NYXpORExFOUJRVkVzVjBGRFRtOTBReXhGUVVGWExFdEJRMWgyZDBNc1JVRkJUMnRFTEZkQlMySnNkRVFzUlVGQlVYYzJSaXd3UWtGQk5FSkJMRWNzWjBKREwwZHdReXhKUVVGSlJTeEZRVUZ0UXl4RlFVRlJMRWRCUXpORE0yNURMRVZCUVU4c1JVRkJVU3hIUVVFMFFrRXNTMEZGTTBOdFV5eEZRVUZ2UWl4WFFVTjBRaXhUUVVGVFFTeExRVVZVTEU5QlJFRkJMRVZCUVdsQ2JHRXNXVUZCWXl4MVEwRkRlRUpyWVN4RlFVaGpMRWRCTkVOMlFpeFRRVUZUZVRGQ0xFVkJRWFZDVUN4RlFVRmhkSEpETEVkQlF6TkRjSEpFTEV0QlFVc3dNa1lzV1VGQlkwRXNSVUZEYmtJeE1rWXNTMEZCUzI5eVJDeFJRVUZWUVN4SFFVRlhMRWRCZUVNMVFtOVhMRVZCUVdsQ1F5eExRVUZQTEVOQlEzUkNiR0VzVjBGQldTeFBRVU5hUml4UlFVRlRiV0VzUlVGRFZIQlpMR1ZCUVdVc1JVRkRaamhITEdkQ1FVRm5RaXhGUVVOb1FubHRReXhaUVVGaFN5eEZRVUZwUTI0clFpeFpRVU01UTJ4UkxHRkJRV054ZFVNc1JVRkJhVU5vSzBJc1kwRkhha1IzU1N4RlFVRnBRazhzVjBGQllTeERRVU0xUW5oaExGZEJRVmtzWVVGRFdrWXNVVUZCVTIxaExFVkJRMVJ3V1N4bFFVRmxMRVZCUTJZNFJ5eG5Ra0ZCWjBJc1JVRkRhRUo1YlVNc1dVRkJZVXNzUlVGQmFVTXZPVUlzYTBKQlF6bERkRkVzWVVGQlkzRjFReXhGUVVGcFF6azVRaXh2UWtGSGFrUnpTU3hGUVVGcFFqQXhRaXhQUVVGVExFTkJRM2hDTTNaRExGZEJRVmtzVTBGRFdrWXNVVUZCVTIxaExFVkJRMVJ3V1N4bFFVRmxMRVZCUTJZNFJ5eG5Ra0ZCWjBJc1JVRkRhRUo1YlVNc1dVRkJZVXNzUlVGQmFVTnNPVUlzWlVGRE9VTnVVaXhoUVVGamNYVkRMRVZCUVdsRGRqbENMR1ZCUjJwRUswZ3NSVUZCYVVJeU1VSXNjVUpCUVhWQ0xFTkJRM1JETlhaRExGZEJRVmtzZFVKQlExcEdMRkZCUVZOdFlTeEZRVU5VY0Zrc1pVRkJaU3hGUVVObU9FY3NaMEpCUVdkQ0xFVkJRMmhDZVcxRExGbEJRV0ZMTEVWQlFXbERhamxDTERSQ1FVTTVRM0JTTEdGQlFXTnhkVU1zUlVGQmFVTm9PVUlzT0VKQlIycEVNVGxFTEVWQlFWRnJiRVVzYVVKQlFXMUNRU3hGUVU4elFua3hRaXhGUVVGMVFuWTBSaXhWUVVGVmVrSXNTMEZCVHl4VFFVRmpaekZGTEVWQlFXZENjRzFDTEVkQlEzQkZMRWxCUVVsMWNrTXNSVUZCV1N4RFFVTmthRGxFTEV0QlFVMHNSMEZEVG5saUxFbEJRVXNzUjBGRFRDOTFReXhQUVVGUkxFbEJSVTUzTDBNc1JVRkJVeXRKTEVWQlFVdEdMRTlCUVU5eFV5eEZRVUZwUWtNc1MwRkJUU3hEUVVNNVEzcFNMRkZCUVZOcGFVSXNSVUZEVkRkeFFpeExRVUZOY0c1RUxFdEJRVXN3TWtZc1dVRkRXRGR4UXl4VFFVRlZRU3hGUVVOV0wwUXNWVUZCVnpsdVJDeExRVUZMYjNKRUxGRkJRVkYwUkN4VlFVTjRRbXg2UXl4TlFVRlBOVlVzUzBGQlMyOXlSQ3hSUVVGUmVESkRMRTFCUTNCQ2N6QkRMRlZCUVZjc1UwRkJWVzExUXl4SFFVTnVRa1FzUlVGQlZXZzVSQ3hMUVVGTE0yNUNMRk5CUVZFc1UwRkJWVFpyUml4SFFVTXZRa0VzUlVGQlVVUXNUMEZIV25wMlF5eE5RVUZQTEZOQlFWVTVaMFFzUlVGQlVYRndSQ3hGUVVGbGNFZ3NSMEZEZEVOeGRVTXNSVUZCVlhSM1JpeFBRVUZQTWt3c1UwRkJVU3hUUVVGVk5tdEdMRWRCUTJwRFFTeEZRVUZSTEVOQlFVVjJiVU1zUzBGQlRXcHhSQ3hGUVVGUmVYZEdMRkZCUVZOd2JrTXNSVUZCWlhSRkxGTkJRVlU1UXl4UFFVVTFSSEYxUXl4RlFVRlZkbWhFTEVsQlFVbHdha01zVTBGQlVTeFRRVUZWTm10R0xFZEJRemxDUVN4RlFVRlJMRU5CUVVWMmJVTXNTMEZCVFdweFJDeEZRVUZSZVhkR0xGRkJRVk53YmtNc1JVRkJaWFJGTEZOQlFWVTVReXhQUVVVMVJIRjFReXhGUVVGWkxGRkJSMmhDTEUxQlFVOHNRMEZEVEVrc1IwRkJTU3hUUVVGVk1YcEdMRVZCUVUxM2VrWXNSMEZGYkVJc1QwRkVRVVlzUlVGQlZYUjZSaXhIUVVGTmIwWXNTMEZCUzI5MVJpeEhRVU5rZEROR0xFMUJSVlI1Y0VRc1QwRkJVU3hYUVVOT01uUkRMRVZCUVZrc1MwRkRXamwzUXl4RlFVRlBhMFFzVjBGTFlubDBReXhGUVVGMVFuWTBSaXhWUVVGVkt6UkdMRmRCUVdFc1UwRkJiMEo0YkVJc1JVRkJaMEp3YlVJc1JVRkJWV2R5UXl4SFFVTnFSU3hKUVVGeVFteDFSaXhWUVVGVmRrb3NVMEZEV25relJpeEZRVUZYYkhWR0xGVkJRVlVzU1VGRmRrSXNTVUZCU1RJNVF5eEZRVUZUSzBrc1JVRkJTMFFzVFVGQlRXOVRMRVZCUVdsQ1R5eFhRVUZaTEVOQlEyNUVMMUlzVVVGQlUybHBRaXhGUVVOVU4zRkNMRXRCUVUxd2JrUXNTMEZCU3pBeVJpeFpRVU5ZTjNGRExGTkJRVlZCTEVWQlExWXZSQ3hWUVVGWE9XNUVMRXRCUVV0dmNrUXNVVUZCVVhSRUxGVkJRM2hDYkhwRExFMUJRVTgxVlN4TFFVRkxiM0pFTEZGQlFWRjRNa01zVFVGRGNFSm5la01zVFVGQlR5eFRRVUZWSzBVc1IwRkRaaXhIUVVGSmEzRkRMRVZCUTBZc1IwRkJTV3h4UXl4RlFVRlROMnhFTEZOQlFWZDFiMFFzUlVGQlMyeElMRXRCUVV0RExFZEJRVWtzUTBGRGNFTXNTVUZCU1hkYUxFVkJRVTBzU1VGQlNYb3ZSQ3hOUVVGTmQzRkVMRVZCUVZOM1JDeGxRVU0zUW5sU0xFVkJRVWszVVN4TFFVRlBjRVVzUlVGQlV6ZHNSQ3hQUVVOd1FqZzJSQ3hGUVVGSkwxWXNVMEZCVjJNc1JVRkJVelZFTEZOQlEzaENPSFJETEVWQlFWTnFNVUlzUlVGQlN5eFhRVVZrYVRGQ0xFVkJRVk1zUzBGQlRXeHhReXhGUVVGVGNEWkRMRmxCUzJoRExFMUJRVThzUTBGRFRHc3pReXhQUVVGUkxGZEJRMDV2ZEVNc1JVRkJWeXhMUVVOWWRuZERMRVZCUVU5clJDeFhRVXRpZVhSRExFVkJRWFZDZGpSR0xGVkJRVlZuTlVZc1QwRkJVeXhUUVVGblFqZHlReXhIUVVONFJDeEpRVUZKZFhKRExFVkJRVmtzUTBGRFpHZzVSQ3hMUVVGTkxFZEJRMDU1WWl4SlFVRkxMRWRCUTB3dmRVTXNUMEZCVVN4SlFVVk9keTlETEVWQlFWTXJTU3hGUVVGTEwwa3NUMEZCVDJ0aUxFVkJRV2xDTURGQ0xFOUJRVkVzUTBGRGFFUTVka01zUzBGQlRYQnVSQ3hMUVVGTE1ESkdMRmxCUTFnM2NVTXNVMEZCVlVFc1JVRkRWaTlFTEZWQlFWYzVia1FzUzBGQlMyOXlSQ3hSUVVGUmRFUXNXVUZwUWpGQ0xFOUJaa0Y0UWl4RlFVRlBjMElzVDBGQlRTeFRRVUZWT1dkRUxFVkJRVkZ4Y0VRc1JVRkJaWEJJTEVkQlF6VkRjWFZETEVWQlFWVjBkMFlzVDBGQlR6Sk1MRk5CUVZFc1UwRkJWVFpyUml4SFFVTnFRMEVzUlVGQlVTeERRVUZGZG0xRExFdEJRVTFxY1VRc1JVRkJVWGwzUml4UlFVRlRjRzVETEVWQlFXVjBSU3hUUVVGVk9VTXNUMEZGTlVSeGRVTXNSVUZCVlhab1JDeEpRVUZKY0dwRExGTkJRVkVzVTBGQlZUWnJSaXhIUVVNNVFrRXNSVUZCVVN4RFFVRkZkbTFETEV0QlFVMXFjVVFzUlVGQlVYbDNSaXhSUVVGVGNHNURMRVZCUVdWMFJTeFRRVUZWT1VNc1QwRkZOVVJ4ZFVNc1JVRkJXU3hSUVVWa09YZERMRVZCUVU4MFF5eFhRVUZWTEZOQlFWVXpNa01zUjBGRGVrSTJhMFlzUlVGQlZXZzVSQ3hMUVVGTE0yNUNMRk5CUVZFc1UwRkJWVFpyUml4SFFVTXZRa0VzUlVGQlVTOXJSaXhUUVVkYUszcERMRVZCUVU4MlF5eE5RVUZOTUVNc1IwRkRUaXhEUVVOTU1uSkRMRWRCUVVrc1UwRkJWVEY2Uml4RlFVRk5kM3BHTEVkQlJXeENMRTlCUkVGR0xFVkJRVlYwZWtZc1IwRkJUVzlHTEV0QlFVdHZkVVlzUjBGRFpIUXpSaXhOUVVWVWRWRXNUVUZCVHl4VFFVRlZNR2hGTEVkQlJXWXNUMEZFUVROeVFpeEZRVUZQZWk5RExFdEJRVXR2Y2tVc1IwRkRUR3A1UlN4TlFVVlVOakZETEVsQlFVc3NWMEZEU0hsUkxFVkJRVTlwUkN4alFVVlVSU3hQUVVGUkxGZEJRMDR5ZEVNc1JVRkJXU3hMUVVOYU9YZERMRVZCUVU5clJDeFhRVXRpZVhSRExFVkJRWFZDZGpSR0xGVkJRVlZwTlVZc2NVSkJRWFZDTEZOQlFUaENNV3hDTEVWQlFXZENjRzFDTEVWQlFWVm5ja01zUjBGRGNrWXNTVUZCY2tKc2RVWXNWVUZCVlhaS0xGTkJRMXA1TTBZc1JVRkJWMngxUml4VlFVRlZMRWxCUlhaQ0xFbEJRVWt5T1VNc1JVRkJVeXRKTEVWQlFVdEVMRTFCUVUxdlV5eEZRVUZwUWpJeFFpeHhRa0ZCYzBJc1EwRkROMFJ1YmtNc1VVRkJVMmxwUWl4RlFVTlVOM0ZDTEV0QlFVMXdia1FzUzBGQlN6QXlSaXhaUVVOWU4zRkRMRk5CUVZWQkxFVkJRMVl2UkN4VlFVRlhPVzVFTEV0QlFVdHZja1FzVVVGQlVYUkVMRlZCUTNoQ2JIcERMRTFCUVU4MVZTeExRVUZMYjNKRUxGRkJRVkY0TWtNc1RVRkRjRUpuZWtNc1RVRkJUeXhUUVVGVkswVXNSMEZEWml4SFFVRkphM0ZETEVWQlEwWXNSMEZCU1d4eFF5eEZRVUZUTjJ4RUxGTkJRVmQxYjBRc1JVRkJTMnhJTEV0QlFVdERMRWRCUVVrc1EwRkRjRU1zU1VGQlNYZGFMRVZCUVUwc1NVRkJTWG92UkN4TlFVRk5kM0ZFTEVWQlFWTjNSQ3hsUVVNM1FubFNMRVZCUVVrM1VTeExRVUZQY0VVc1JVRkJVemRzUkN4UFFVTndRamcyUkN4RlFVRkpMMVlzVTBGQlYyTXNSVUZCVXpWRUxGTkJRM2hDT0hSRExFVkJRVk5xTVVJc1JVRkJTeXhYUVVWa2FURkNMRVZCUVZNc1MwRkJUV3h4UXl4RlFVRlRjRFpETEZsQlMyaERMRTFCUVU4c1EwRkRUR3N6UXl4UFFVRlJMRmRCUTA1dmRFTXNSVUZCVnl4TFFVTllkbmRETEVWQlFVOXJSQ3hYUVV0aWJIUkVMRVZCUVZFeU5rWXNkVUpCUVhsQ1FTeEhMR2t2UTBOd1RXcERMSE5EUVVGcFJEYzNRaXhGUVVGNVFqSkdMRWNzYlVoQmVVTjZSU3hQUVhoRFMwRXNTVUZEU2tFc1JVRkJXU3hEUVVOWU5qSkNMRmRCUVZrc1EwRkRXQ3hEUVVORFF5eExRVUZOTEhGRVFVdEtMM3BDTEVWQlFXbENMRWxCUVVsbk1FSXNhMEpCUVd0Q0x6SkNMRWRCUjNaRGQxSXNSVUZCVXl4SlFVRkpOVk1zVTBGQmJVSXNVMEZCUVVNc1IwRkRja04xUXl4RlFVRlhka01zVFVGRlRtbFNMRVZCUVdNdlRTeEZRVUZsYVRCQ0xHdENRVUZyUWl4UFFVRlJMRU5CUXpWRWRtdERMRWRCUVVrc1JVRkRTbmRyUXl4WlFVRlpMRVZCUTFwRExGTkJRVk1zUzBGRlJYUnZReXhYUVVGaExHVkJSVzVDZFc5RExFVkJRWEZDY0RCQ0xFVkJRV1ZwTUVJc2EwSkJRV3RDTEdOQlFXVXNRMEZETVVWMmEwTXNSMEZCU1N4RlFVTktkMnRETEZsQlFWa3NSVUZEV2tNc1UwRkJVeXhMUVVWVGRHOURMRmRCUVdFc1kwRkRhRU4xYjBNc1JVRkJiVUp1YjBNc1ZVRkJXU3hUUVVGUGVWTXNSMEZCZDBJc2NVTXNORVJCUnpWRUxFOHNjMEpCUkUxTkxFVkJRVmtzU1VGQlNVTXNjMEpCUVhOQ05UZEVMRXRCUVV0dmFFUXNUVUZCVFRFeVF5eExRVUZMTW5kRUxFVkJRVTF3YjBNc1VVRkRiRVVzUjBGQlRUQndReXhGUVVGbFpDeHhRa0ZCY1VKR0xFa3NUMEZEZGtJc1QwRkVia0lzVTBGRGJVSXNSMEZCVFdkQ0xFVkJRV1Z4TUVJc1owSXNUMEZEZUVNc1QwRkVUVU1zUlVGQllTeFRRVU51UWl4SFFVRk5kREJDTEVWQlFXVnNRaXh2UWtGQmIwSjNNVUlzU1N4alFVRjZReXhUUVVOQlJpeEZRVUZ0UW5KNFJpeExRVUZMTkdwRExFdEJRVXQwYWtNc1MwRkJTME1zVlVGQlZUQTRSQ3hGUVVGbFRDeHZRaXdyUWtGRk0wUTNLMFFzVVVGQlVVTXNUVUZCVFN4SExDdENRVWxZZFRKRUxFVkJTV0VzUjBGQlRUQkpMRVZCUVdWNlFpeGxRVWd2UWl4RFFVRlFMRVZCUVU4eFF5eFJRVUZSUXl4UlFVRlJMRU5CUVVWdlFpeEhRVUZKT0VNc1JVRkJaMEkzUXl4SFFVRkpORkFzU3l4UFFVYzFRM1pQTEVWQlFWa3NVeXhwUWtGRmFrSXNUeXh6UWtGQlFTeEhRVUZOZDBJc1JVRkJaV3hDTEc5Q1FVRnZRazRzU1N4alFVRjZReXhUTEdGQlJVRXNUeXhYUVVGUExFTkJRVkFzUlVGQlR6TkRMRkZCUVZGRkxFOUJRVThzU1N4UFFWVjJRaXhQUVZCQmFVVXNSVUZCWlhaQ0xHVkJRV2xDTEZOQlFVMURMRWRCUVVzc2NVTXNNa0pCUXpGRExFOUJRWGRDTEU5QlFYQkNRU3hGUVVGTmRra3NWMEZIVm10SkxFVkJRVk1zUTBGQlJXNUNMRWRCUVVrNFF5eEZRVUZuUWpkRExFZEJRVWswVUN4SlFVWnNReXhYUVV0TExFTkJRVkFzUlVGQlR6QkNJaXdpWm1sc1pTSTZJbTFoYVc0dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUlvWm5WdVkzUnBiMjRnZDJWaWNHRmphMVZ1YVhabGNuTmhiRTF2WkhWc1pVUmxabWx1YVhScGIyNG9jbTl2ZEN3Z1ptRmpkRzl5ZVNrZ2UxeHVYSFJwWmloMGVYQmxiMllnWlhod2IzSjBjeUE5UFQwZ0oyOWlhbVZqZENjZ0ppWWdkSGx3Wlc5bUlHMXZaSFZzWlNBOVBUMGdKMjlpYW1WamRDY3BYRzVjZEZ4MGJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCbVlXTjBiM0o1S0NrN1hHNWNkR1ZzYzJVZ2FXWW9kSGx3Wlc5bUlHUmxabWx1WlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmlCa1pXWnBibVV1WVcxa0tWeHVYSFJjZEdSbFptbHVaU2hiWFN3Z1ptRmpkRzl5ZVNrN1hHNWNkR1ZzYzJVZ2FXWW9kSGx3Wlc5bUlHVjRjRzl5ZEhNZ1BUMDlJQ2R2WW1wbFkzUW5LVnh1WEhSY2RHVjRjRzl5ZEhOYlhDSnljR05jSWwwZ1BTQm1ZV04wYjNKNUtDazdYRzVjZEdWc2MyVmNibHgwWEhSeWIyOTBXMXdpY25CalhDSmRJRDBnWm1GamRHOXllU2dwTzF4dWZTa29kMmx1Wkc5M0xDQm1kVzVqZEdsdmJpZ3BJSHRjYm5KbGRIVnliaUFpTENJZ1hIUXZMeUJVYUdVZ2JXOWtkV3hsSUdOaFkyaGxYRzRnWEhSMllYSWdhVzV6ZEdGc2JHVmtUVzlrZFd4bGN5QTlJSHQ5TzF4dVhHNGdYSFF2THlCVWFHVWdjbVZ4ZFdseVpTQm1kVzVqZEdsdmJseHVJRngwWm5WdVkzUnBiMjRnWDE5M1pXSndZV05yWDNKbGNYVnBjbVZmWHlodGIyUjFiR1ZKWkNrZ2UxeHVYRzRnWEhSY2RDOHZJRU5vWldOcklHbG1JRzF2WkhWc1pTQnBjeUJwYmlCallXTm9aVnh1SUZ4MFhIUnBaaWhwYm5OMFlXeHNaV1JOYjJSMWJHVnpXMjF2WkhWc1pVbGtYU2tnZTF4dUlGeDBYSFJjZEhKbGRIVnliaUJwYm5OMFlXeHNaV1JOYjJSMWJHVnpXMjF2WkhWc1pVbGtYUzVsZUhCdmNuUnpPMXh1SUZ4MFhIUjlYRzRnWEhSY2RDOHZJRU55WldGMFpTQmhJRzVsZHlCdGIyUjFiR1VnS0dGdVpDQndkWFFnYVhRZ2FXNTBieUIwYUdVZ1kyRmphR1VwWEc0Z1hIUmNkSFpoY2lCdGIyUjFiR1VnUFNCcGJuTjBZV3hzWldSTmIyUjFiR1Z6VzIxdlpIVnNaVWxrWFNBOUlIdGNiaUJjZEZ4MFhIUnBPaUJ0YjJSMWJHVkpaQ3hjYmlCY2RGeDBYSFJzT2lCbVlXeHpaU3hjYmlCY2RGeDBYSFJsZUhCdmNuUnpPaUI3ZlZ4dUlGeDBYSFI5TzF4dVhHNGdYSFJjZEM4dklFVjRaV04xZEdVZ2RHaGxJRzF2WkhWc1pTQm1kVzVqZEdsdmJseHVJRngwWEhSdGIyUjFiR1Z6VzIxdlpIVnNaVWxrWFM1allXeHNLRzF2WkhWc1pTNWxlSEJ2Y25SekxDQnRiMlIxYkdVc0lHMXZaSFZzWlM1bGVIQnZjblJ6TENCZlgzZGxZbkJoWTJ0ZmNtVnhkV2x5WlY5ZktUdGNibHh1SUZ4MFhIUXZMeUJHYkdGbklIUm9aU0J0YjJSMWJHVWdZWE1nYkc5aFpHVmtYRzRnWEhSY2RHMXZaSFZzWlM1c0lEMGdkSEoxWlR0Y2JseHVJRngwWEhRdkx5QlNaWFIxY200Z2RHaGxJR1Y0Y0c5eWRITWdiMllnZEdobElHMXZaSFZzWlZ4dUlGeDBYSFJ5WlhSMWNtNGdiVzlrZFd4bExtVjRjRzl5ZEhNN1hHNGdYSFI5WEc1Y2JseHVJRngwTHk4Z1pYaHdiM05sSUhSb1pTQnRiMlIxYkdWeklHOWlhbVZqZENBb1gxOTNaV0p3WVdOclgyMXZaSFZzWlhOZlh5bGNiaUJjZEY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4dWJTQTlJRzF2WkhWc1pYTTdYRzVjYmlCY2RDOHZJR1Y0Y0c5elpTQjBhR1VnYlc5a2RXeGxJR05oWTJobFhHNGdYSFJmWDNkbFluQmhZMnRmY21WeGRXbHlaVjlmTG1NZ1BTQnBibk4wWVd4c1pXUk5iMlIxYkdWek8xeHVYRzRnWEhRdkx5QmtaV1pwYm1VZ1oyVjBkR1Z5SUdaMWJtTjBhVzl1SUdadmNpQm9ZWEp0YjI1NUlHVjRjRzl5ZEhOY2JpQmNkRjlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMTh1WkNBOUlHWjFibU4wYVc5dUtHVjRjRzl5ZEhNc0lHNWhiV1VzSUdkbGRIUmxjaWtnZTF4dUlGeDBYSFJwWmlnaFgxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NXZLR1Y0Y0c5eWRITXNJRzVoYldVcEtTQjdYRzRnWEhSY2RGeDBUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0dWNGNHOXlkSE1zSUc1aGJXVXNJSHNnWlc1MWJXVnlZV0pzWlRvZ2RISjFaU3dnWjJWME9pQm5aWFIwWlhJZ2ZTazdYRzRnWEhSY2RIMWNiaUJjZEgwN1hHNWNiaUJjZEM4dklHUmxabWx1WlNCZlgyVnpUVzlrZFd4bElHOXVJR1Y0Y0c5eWRITmNiaUJjZEY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4dWNpQTlJR1oxYm1OMGFXOXVLR1Y0Y0c5eWRITXBJSHRjYmlCY2RGeDBhV1lvZEhsd1pXOW1JRk41YldKdmJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ0ppWWdVM2x0WW05c0xuUnZVM1J5YVc1blZHRm5LU0I3WEc0Z1hIUmNkRngwVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtHVjRjRzl5ZEhNc0lGTjViV0p2YkM1MGIxTjBjbWx1WjFSaFp5d2dleUIyWVd4MVpUb2dKMDF2WkhWc1pTY2dmU2s3WEc0Z1hIUmNkSDFjYmlCY2RGeDBUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0dWNGNHOXlkSE1zSUNkZlgyVnpUVzlrZFd4bEp5d2dleUIyWVd4MVpUb2dkSEoxWlNCOUtUdGNiaUJjZEgwN1hHNWNiaUJjZEM4dklHTnlaV0YwWlNCaElHWmhhMlVnYm1GdFpYTndZV05sSUc5aWFtVmpkRnh1SUZ4MEx5OGdiVzlrWlNBbUlERTZJSFpoYkhWbElHbHpJR0VnYlc5a2RXeGxJR2xrTENCeVpYRjFhWEpsSUdsMFhHNGdYSFF2THlCdGIyUmxJQ1lnTWpvZ2JXVnlaMlVnWVd4c0lIQnliM0JsY25ScFpYTWdiMllnZG1Gc2RXVWdhVzUwYnlCMGFHVWdibk5jYmlCY2RDOHZJRzF2WkdVZ0ppQTBPaUJ5WlhSMWNtNGdkbUZzZFdVZ2QyaGxiaUJoYkhKbFlXUjVJRzV6SUc5aWFtVmpkRnh1SUZ4MEx5OGdiVzlrWlNBbUlEaDhNVG9nWW1Wb1lYWmxJR3hwYTJVZ2NtVnhkV2x5WlZ4dUlGeDBYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeTUwSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VzSUcxdlpHVXBJSHRjYmlCY2RGeDBhV1lvYlc5a1pTQW1JREVwSUhaaGJIVmxJRDBnWDE5M1pXSndZV05yWDNKbGNYVnBjbVZmWHloMllXeDFaU2s3WEc0Z1hIUmNkR2xtS0cxdlpHVWdKaUE0S1NCeVpYUjFjbTRnZG1Gc2RXVTdYRzRnWEhSY2RHbG1LQ2h0YjJSbElDWWdOQ2tnSmlZZ2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmIySnFaV04wSnlBbUppQjJZV3gxWlNBbUppQjJZV3gxWlM1ZlgyVnpUVzlrZFd4bEtTQnlaWFIxY200Z2RtRnNkV1U3WEc0Z1hIUmNkSFpoY2lCdWN5QTlJRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2s3WEc0Z1hIUmNkRjlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMTh1Y2lodWN5azdYRzRnWEhSY2RFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2h1Y3l3Z0oyUmxabUYxYkhRbkxDQjdJR1Z1ZFcxbGNtRmliR1U2SUhSeWRXVXNJSFpoYkhWbE9pQjJZV3gxWlNCOUtUdGNiaUJjZEZ4MGFXWW9iVzlrWlNBbUlESWdKaVlnZEhsd1pXOW1JSFpoYkhWbElDRTlJQ2R6ZEhKcGJtY25LU0JtYjNJb2RtRnlJR3RsZVNCcGJpQjJZV3gxWlNrZ1gxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NWtLRzV6TENCclpYa3NJR1oxYm1OMGFXOXVLR3RsZVNrZ2V5QnlaWFIxY200Z2RtRnNkV1ZiYTJWNVhUc2dmUzVpYVc1a0tHNTFiR3dzSUd0bGVTa3BPMXh1SUZ4MFhIUnlaWFIxY200Z2JuTTdYRzRnWEhSOU8xeHVYRzRnWEhRdkx5Qm5aWFJFWldaaGRXeDBSWGh3YjNKMElHWjFibU4wYVc5dUlHWnZjaUJqYjIxd1lYUnBZbWxzYVhSNUlIZHBkR2dnYm05dUxXaGhjbTF2Ym5rZ2JXOWtkV3hsYzF4dUlGeDBYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeTV1SUQwZ1puVnVZM1JwYjI0b2JXOWtkV3hsS1NCN1hHNGdYSFJjZEhaaGNpQm5aWFIwWlhJZ1BTQnRiMlIxYkdVZ0ppWWdiVzlrZFd4bExsOWZaWE5OYjJSMWJHVWdQMXh1SUZ4MFhIUmNkR1oxYm1OMGFXOXVJR2RsZEVSbFptRjFiSFFvS1NCN0lISmxkSFZ5YmlCdGIyUjFiR1ZiSjJSbFptRjFiSFFuWFRzZ2ZTQTZYRzRnWEhSY2RGeDBablZ1WTNScGIyNGdaMlYwVFc5a2RXeGxSWGh3YjNKMGN5Z3BJSHNnY21WMGRYSnVJRzF2WkhWc1pUc2dmVHRjYmlCY2RGeDBYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeTVrS0dkbGRIUmxjaXdnSjJFbkxDQm5aWFIwWlhJcE8xeHVJRngwWEhSeVpYUjFjbTRnWjJWMGRHVnlPMXh1SUZ4MGZUdGNibHh1SUZ4MEx5OGdUMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNYRzRnWEhSZlgzZGxZbkJoWTJ0ZmNtVnhkV2x5WlY5ZkxtOGdQU0JtZFc1amRHbHZiaWh2WW1wbFkzUXNJSEJ5YjNCbGNuUjVLU0I3SUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYjJKcVpXTjBMQ0J3Y205d1pYSjBlU2s3SUgwN1hHNWNiaUJjZEM4dklGOWZkMlZpY0dGamExOXdkV0pzYVdOZmNHRjBhRjlmWEc0Z1hIUmZYM2RsWW5CaFkydGZjbVZ4ZFdseVpWOWZMbkFnUFNCY0lsd2lPMXh1WEc1Y2JpQmNkQzh2SUV4dllXUWdaVzUwY25rZ2JXOWtkV3hsSUdGdVpDQnlaWFIxY200Z1pYaHdiM0owYzF4dUlGeDBjbVYwZFhKdUlGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOG9YMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeTV6SUQwZ09DazdYRzRpTENKMllYSWdKR3B6WTI5dGNEMGthbk5qYjIxd2ZIeDdmVHNrYW5OamIyMXdMbk5qYjNCbFBYdDlPeVJxYzJOdmJYQXVabWx1WkVsdWRHVnlibUZzUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRoSUdsdWMzUmhibU5sYjJZZ1UzUnlhVzVuSmlZb1lUMVRkSEpwYm1jb1lTa3BPMlp2Y2loMllYSWdaRDFoTG14bGJtZDBhQ3hsUFRBN1pUeGtPMlVyS3lsN2RtRnlJR1k5WVZ0bFhUdHBaaWhpTG1OaGJHd29ZeXhtTEdVc1lTa3BjbVYwZFhKdWUyazZaU3gyT21aOWZYSmxkSFZ5Ym50cE9pMHhMSFk2ZG05cFpDQXdmWDA3SkdwelkyOXRjQzVCVTFOVlRVVmZSVk0xUFNFeE95UnFjMk52YlhBdVFWTlRWVTFGWDA1UFgwNUJWRWxXUlY5TlFWQTlJVEU3SkdwelkyOXRjQzVCVTFOVlRVVmZUazlmVGtGVVNWWkZYMU5GVkQwaE1Uc2thbk5qYjIxd0xsTkpUVkJNUlY5R1VrOVZUa1JmVUU5TVdVWkpURXc5SVRFN1hHNGthbk5qYjIxd0xtUmxabWx1WlZCeWIzQmxjblI1UFNScWMyTnZiWEF1UVZOVFZVMUZYMFZUTlh4OFhDSm1kVzVqZEdsdmJsd2lQVDEwZVhCbGIyWWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblJwWlhNL1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVPbVoxYm1OMGFXOXVLR0VzWWl4aktYdGhJVDFCY25KaGVTNXdjbTkwYjNSNWNHVW1KbUVoUFU5aWFtVmpkQzV3Y205MGIzUjVjR1VtSmloaFcySmRQV011ZG1Gc2RXVXBmVHNrYW5OamIyMXdMbWRsZEVkc2IySmhiRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTVjSW5WdVpHVm1hVzVsWkZ3aUlUMTBlWEJsYjJZZ2QybHVaRzkzSmlaM2FXNWtiM2M5UFQxaFAyRTZYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUdkc2IySmhiQ1ltYm5Wc2JDRTlaMnh2WW1Gc1AyZHNiMkpoYkRwaGZUc2thbk5qYjIxd0xtZHNiMkpoYkQwa2FuTmpiMjF3TG1kbGRFZHNiMkpoYkNoMGFHbHpLVHRjYmlScWMyTnZiWEF1Y0c5c2VXWnBiR3c5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ2w3YVdZb1lpbDdZejBrYW5OamIyMXdMbWRzYjJKaGJEdGhQV0V1YzNCc2FYUW9YQ0l1WENJcE8yWnZjaWhrUFRBN1pEeGhMbXhsYm1kMGFDMHhPMlFyS3lsN2RtRnlJR1U5WVZ0a1hUdGxJR2x1SUdOOGZDaGpXMlZkUFh0OUtUdGpQV05iWlYxOVlUMWhXMkV1YkdWdVozUm9MVEZkTzJROVkxdGhYVHRpUFdJb1pDazdZaUU5WkNZbWJuVnNiQ0U5WWlZbUpHcHpZMjl0Y0M1a1pXWnBibVZRY205d1pYSjBlU2hqTEdFc2UyTnZibVpwWjNWeVlXSnNaVG9oTUN4M2NtbDBZV0pzWlRvaE1DeDJZV3gxWlRwaWZTbDlmVHNrYW5OamIyMXdMbkJ2YkhsbWFXeHNLRndpUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVpwYm1SSmJtUmxlRndpTEdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCaFAyRTZablZ1WTNScGIyNG9ZU3hqS1h0eVpYUjFjbTRnSkdwelkyOXRjQzVtYVc1a1NXNTBaWEp1WVd3b2RHaHBjeXhoTEdNcExtbDlmU3hjSW1Wek5sd2lMRndpWlhNelhDSXBPMXh1SkdwelkyOXRjQzVqYUdWamExTjBjbWx1WjBGeVozTTlablZ1WTNScGIyNG9ZU3hpTEdNcGUybG1LRzUxYkd3OVBXRXBkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWhjSWxSb1pTQW5kR2hwY3ljZ2RtRnNkV1VnWm05eUlGTjBjbWx1Wnk1d2NtOTBiM1I1Y0dVdVhDSXJZeXRjSWlCdGRYTjBJRzV2ZENCaVpTQnVkV3hzSUc5eUlIVnVaR1ZtYVc1bFpGd2lLVHRwWmloaUlHbHVjM1JoYm1ObGIyWWdVbVZuUlhod0tYUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9YQ0pHYVhKemRDQmhjbWQxYldWdWRDQjBieUJUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMbHdpSzJNclhDSWdiWFZ6ZENCdWIzUWdZbVVnWVNCeVpXZDFiR0Z5SUdWNGNISmxjM05wYjI1Y0lpazdjbVYwZFhKdUlHRXJYQ0pjSW4wN1hHNGthbk5qYjIxd0xuQnZiSGxtYVd4c0tGd2lVM1J5YVc1bkxuQnliM1J2ZEhsd1pTNWxibVJ6VjJsMGFGd2lMR1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJoUDJFNlpuVnVZM1JwYjI0b1lTeGpLWHQyWVhJZ1lqMGthbk5qYjIxd0xtTm9aV05yVTNSeWFXNW5RWEpuY3loMGFHbHpMR0VzWENKbGJtUnpWMmwwYUZ3aUtUdGhLejFjSWx3aU8zWnZhV1FnTUQwOVBXTW1KaWhqUFdJdWJHVnVaM1JvS1R0alBVMWhkR2d1YldGNEtEQXNUV0YwYUM1dGFXNG9ZM3d3TEdJdWJHVnVaM1JvS1NrN1ptOXlLSFpoY2lCbFBXRXViR1Z1WjNSb096QThaU1ltTUR4ak95bHBaaWhpV3kwdFkxMGhQV0ZiTFMxbFhTbHlaWFIxY200aE1UdHlaWFIxY200Z01ENDlaWDE5TEZ3aVpYTTJYQ0lzWENKbGN6TmNJaWs3SkdwelkyOXRjQzV3YjJ4NVptbHNiQ2hjSWtGeWNtRjVMbkJ5YjNSdmRIbHdaUzVtYVc1a1hDSXNablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0UvWVRwbWRXNWpkR2x2YmloaExHTXBlM0psZEhWeWJpQWthbk5qYjIxd0xtWnBibVJKYm5SbGNtNWhiQ2gwYUdsekxHRXNZeWt1ZG4xOUxGd2laWE0yWENJc1hDSmxjek5jSWlrN1hHNGthbk5qYjIxd0xuQnZiSGxtYVd4c0tGd2lVM1J5YVc1bkxuQnliM1J2ZEhsd1pTNXpkR0Z5ZEhOWGFYUm9YQ0lzWm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdFL1lUcG1kVzVqZEdsdmJpaGhMR01wZTNaaGNpQmlQU1JxYzJOdmJYQXVZMmhsWTJ0VGRISnBibWRCY21kektIUm9hWE1zWVN4Y0luTjBZWEowYzFkcGRHaGNJaWs3WVNzOVhDSmNJanQyWVhJZ1pUMWlMbXhsYm1kMGFDeG1QV0V1YkdWdVozUm9PMk05VFdGMGFDNXRZWGdvTUN4TllYUm9MbTFwYmloamZEQXNZaTVzWlc1bmRHZ3BLVHRtYjNJb2RtRnlJR2M5TUR0blBHWW1KbU04WlRzcGFXWW9ZbHRqS3l0ZElUMWhXMmNySzEwcGNtVjBkWEp1SVRFN2NtVjBkWEp1SUdjK1BXWjlmU3hjSW1Wek5sd2lMRndpWlhNelhDSXBPMXh1SkdwelkyOXRjQzV3YjJ4NVptbHNiQ2hjSWxOMGNtbHVaeTV3Y205MGIzUjVjR1V1Y21Wd1pXRjBYQ0lzWm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdFL1lUcG1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMGthbk5qYjIxd0xtTm9aV05yVTNSeWFXNW5RWEpuY3loMGFHbHpMRzUxYkd3c1hDSnlaWEJsWVhSY0lpazdhV1lvTUQ1aGZId3hNelF5TVRjM01qYzVQR0VwZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb1hDSkpiblpoYkdsa0lHTnZkVzUwSUhaaGJIVmxYQ0lwTzJGOFBUQTdabTl5S0haaGNpQmtQVndpWENJN1lUc3BhV1lvWVNZeEppWW9aQ3M5WWlrc1lUNCtQajB4S1dJclBXSTdjbVYwZFhKdUlHUjlmU3hjSW1Wek5sd2lMRndpWlhNelhDSXBPM1poY2lCRFQwMVFTVXhGUkQwaE1DeG5iMjluUFdkdmIyZDhmSHQ5TzJkdmIyY3VaMnh2WW1Gc1BYUm9hWE44ZkhObGJHWTdaMjl2Wnk1cGMwUmxaajFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnZG05cFpDQXdJVDA5WVgwN1oyOXZaeTVwYzFOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTVjSW5OMGNtbHVaMXdpUFQxMGVYQmxiMllnWVgwN1oyOXZaeTVwYzBKdmIyeGxZVzQ5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1WENKaWIyOXNaV0Z1WENJOVBYUjVjR1Z2WmlCaGZUdGNibWR2YjJjdWFYTk9kVzFpWlhJOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdVhDSnVkVzFpWlhKY0lqMDlkSGx3Wlc5bUlHRjlPMmR2YjJjdVpYaHdiM0owVUdGMGFGODlablZ1WTNScGIyNG9ZU3hpTEdNcGUyRTlZUzV6Y0d4cGRDaGNJaTVjSWlrN1l6MWpmSHhuYjI5bkxtZHNiMkpoYkR0aFd6QmRhVzRnWTN4OFhDSjFibVJsWm1sdVpXUmNJajA5ZEhsd1pXOW1JR011WlhobFkxTmpjbWx3ZEh4OFl5NWxlR1ZqVTJOeWFYQjBLRndpZG1GeUlGd2lLMkZiTUYwcE8yWnZjaWgyWVhJZ1pEdGhMbXhsYm1kMGFDWW1LR1E5WVM1emFHbG1kQ2dwS1RzcElXRXViR1Z1WjNSb0ppWm5iMjluTG1selJHVm1LR0lwUDJOYlpGMDlZanBqUFdOYlpGMG1KbU5iWkYwaFBUMVBZbXBsWTNRdWNISnZkRzkwZVhCbFcyUmRQMk5iWkYwNlkxdGtYVDE3ZlgwN1hHNW5iMjluTG1SbFptbHVaVDFtZFc1amRHbHZiaWhoTEdJcGUybG1LQ0ZEVDAxUVNVeEZSQ2w3ZG1GeUlHTTlaMjl2Wnk1bmJHOWlZV3d1UTB4UFUxVlNSVjlWVGtOUFRWQkpURVZFWDBSRlJrbE9SVk1zWkQxbmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwUkZSa2xPUlZNN1l5WW1kbTlwWkNBd1BUMDlZeTV1YjJSbFZIbHdaU1ltVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0dNc1lTay9ZajFqVzJGZE9tUW1Kblp2YVdRZ01EMDlQV1F1Ym05a1pWUjVjR1VtSms5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoa0xHRXBKaVlvWWoxa1cyRmRLWDF5WlhSMWNtNGdZbjA3WjI5dlp5NUdSVUZVVlZKRlUwVlVYMWxGUVZJOU1qQXhNanRuYjI5bkxrUkZRbFZIUFNFd08yZHZiMmN1VEU5RFFVeEZQVndpWlc1Y0lqdG5iMjluTGxSU1ZWTlVSVVJmVTBsVVJUMGhNRHRuYjI5bkxsTlVVa2xEVkY5TlQwUkZYME5QVFZCQlZFbENURVU5SVRFN1oyOXZaeTVFU1ZOQlRFeFBWMTlVUlZOVVgwOU9URmxmUTA5RVJUMURUMDFRU1V4RlJDWW1JV2R2YjJjdVJFVkNWVWM3WjI5dlp5NUZUa0ZDVEVWZlEwaFNUMDFGWDBGUVVGOVRRVVpGWDFORFVrbFFWRjlNVDBGRVNVNUhQU0V4TzF4dVoyOXZaeTV3Y205MmFXUmxQV1oxYm1OMGFXOXVLR0VwZTJsbUtHZHZiMmN1YVhOSmJrMXZaSFZzWlV4dllXUmxjbDhvS1NsMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdWNISnZkbWxrWlNCallXNXViM1FnWW1VZ2RYTmxaQ0IzYVhSb2FXNGdZU0J0YjJSMWJHVXVYQ0lwTzJsbUtDRkRUMDFRU1V4RlJDWW1aMjl2Wnk1cGMxQnliM1pwWkdWa1h5aGhLU2wwYUhKdmR5QkZjbkp2Y2lnblRtRnRaWE53WVdObElGd2lKeXRoS3lkY0lpQmhiSEpsWVdSNUlHUmxZMnhoY21Wa0xpY3BPMmR2YjJjdVkyOXVjM1J5ZFdOMFRtRnRaWE53WVdObFh5aGhLWDA3WjI5dlp5NWpiMjV6ZEhKMVkzUk9ZVzFsYzNCaFkyVmZQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9JVU5QVFZCSlRFVkVLWHRrWld4bGRHVWdaMjl2Wnk1cGJYQnNhV05wZEU1aGJXVnpjR0ZqWlhOZlcyRmRPMlp2Y2loMllYSWdZejFoT3loalBXTXVjM1ZpYzNSeWFXNW5LREFzWXk1c1lYTjBTVzVrWlhoUFppaGNJaTVjSWlrcEtTWW1JV2R2YjJjdVoyVjBUMkpxWldOMFFubE9ZVzFsS0dNcE95bG5iMjluTG1sdGNHeHBZMmwwVG1GdFpYTndZV05sYzE5YlkxMDlJVEI5WjI5dlp5NWxlSEJ2Y25SUVlYUm9YeWhoTEdJcGZUdGNibWR2YjJjdVoyVjBVMk55YVhCMFRtOXVZMlU5Wm5WdVkzUnBiMjRvWVNsN2FXWW9ZU1ltWVNFOVoyOXZaeTVuYkc5aVlXd3BjbVYwZFhKdUlHZHZiMmN1WjJWMFUyTnlhWEIwVG05dVkyVmZLR0V1Wkc5amRXMWxiblFwTzI1MWJHdzlQVDFuYjI5bkxtTnpjRTV2Ym1ObFh5WW1LR2R2YjJjdVkzTndUbTl1WTJWZlBXZHZiMmN1WjJWMFUyTnlhWEIwVG05dVkyVmZLR2R2YjJjdVoyeHZZbUZzTG1SdlkzVnRaVzUwS1NrN2NtVjBkWEp1SUdkdmIyY3VZM053VG05dVkyVmZmVHRuYjI5bkxrNVBUa05GWDFCQlZGUkZVazVmUFM5ZVcxeGNkeXN2WHkxZEsxczlYWHN3TERKOUpDODdaMjl2Wnk1amMzQk9iMjVqWlY4OWJuVnNiRHRuYjI5bkxtZGxkRk5qY21sd2RFNXZibU5sWHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200b1lUMWhMbkYxWlhKNVUyVnNaV04wYjNJbUptRXVjWFZsY25sVFpXeGxZM1J2Y2loY0luTmpjbWx3ZEZ0dWIyNWpaVjFjSWlrcEppWW9ZVDFoTG01dmJtTmxmSHhoTG1kbGRFRjBkSEpwWW5WMFpTaGNJbTV2Ym1ObFhDSXBLU1ltWjI5dlp5NU9UMDVEUlY5UVFWUlVSVkpPWHk1MFpYTjBLR0VwUDJFNlhDSmNJbjA3WjI5dlp5NVdRVXhKUkY5TlQwUlZURVZmVWtWZlBTOWVXMkV0ZWtFdFdsOGtYVnRoTFhwQkxWb3dMVGt1WHlSZEtpUXZPMXh1WjI5dlp5NXRiMlIxYkdVOVpuVnVZM1JwYjI0b1lTbDdhV1lvSVdkdmIyY3VhWE5UZEhKcGJtY29ZU2w4ZkNGaGZId3RNVDA5WVM1elpXRnlZMmdvWjI5dlp5NVdRVXhKUkY5TlQwUlZURVZmVWtWZktTbDBhSEp2ZHlCRmNuSnZjaWhjSWtsdWRtRnNhV1FnYlc5a2RXeGxJR2xrWlc1MGFXWnBaWEpjSWlrN2FXWW9JV2R2YjJjdWFYTkpia2R2YjJkTmIyUjFiR1ZNYjJGa1pYSmZLQ2twZEdoeWIzY2dSWEp5YjNJb1hDSk5iMlIxYkdVZ1hDSXJZU3RjSWlCb1lYTWdZbVZsYmlCc2IyRmtaV1FnYVc1amIzSnlaV04wYkhrdUlFNXZkR1VzSUcxdlpIVnNaWE1nWTJGdWJtOTBJR0psSUd4dllXUmxaQ0JoY3lCdWIzSnRZV3dnYzJOeWFYQjBjeTRnVkdobGVTQnlaWEYxYVhKbElITnZiV1VnYTJsdVpDQnZaaUJ3Y21VdGNISnZZMlZ6YzJsdVp5QnpkR1Z3TGlCWmIzVW5jbVVnYkdsclpXeDVJSFJ5ZVdsdVp5QjBieUJzYjJGa0lHRWdiVzlrZFd4bElIWnBZU0JoSUhOamNtbHdkQ0IwWVdjZ2IzSWdZWE1nWVNCd1lYSjBJRzltSUdFZ1kyOXVZMkYwWlc1aGRHVmtJR0oxYm1Sc1pTQjNhWFJvYjNWMElISmxkM0pwZEdsdVp5QjBhR1VnYlc5a2RXeGxMaUJHYjNJZ2JXOXlaU0JwYm1adklITmxaVG9nYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJkdmIyZHNaUzlqYkc5emRYSmxMV3hwWW5KaGNua3ZkMmxyYVM5bmIyOW5MbTF2WkhWc1pUb3RZVzR0UlZNMkxXMXZaSFZzWlMxc2FXdGxMV0ZzZEdWeWJtRjBhWFpsTFhSdkxXZHZiMmN1Y0hKdmRtbGtaUzVjSWlrN1hHNXBaaWhuYjI5bkxtMXZaSFZzWlV4dllXUmxjbE4wWVhSbFh5NXRiMlIxYkdWT1lXMWxLWFJvY205M0lFVnljbTl5S0Z3aVoyOXZaeTV0YjJSMWJHVWdiV0Y1SUc5dWJIa2dZbVVnWTJGc2JHVmtJRzl1WTJVZ2NHVnlJRzF2WkhWc1pTNWNJaWs3WjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHViVzlrZFd4bFRtRnRaVDFoTzJsbUtDRkRUMDFRU1V4RlJDbDdhV1lvWjI5dlp5NXBjMUJ5YjNacFpHVmtYeWhoS1NsMGFISnZkeUJGY25KdmNpZ25UbUZ0WlhOd1lXTmxJRndpSnl0aEt5ZGNJaUJoYkhKbFlXUjVJR1JsWTJ4aGNtVmtMaWNwTzJSbGJHVjBaU0JuYjI5bkxtbHRjR3hwWTJsMFRtRnRaWE53WVdObGMxOWJZVjE5ZlR0bmIyOW5MbTF2WkhWc1pTNW5aWFE5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3ViVzlrZFd4bExtZGxkRWx1ZEdWeWJtRnNYeWhoS1gwN1hHNW5iMjluTG0xdlpIVnNaUzVuWlhSSmJuUmxjbTVoYkY4OVpuVnVZM1JwYjI0b1lTbDdhV1lvSVVOUFRWQkpURVZFS1h0cFppaGhJR2x1SUdkdmIyY3ViRzloWkdWa1RXOWtkV3hsYzE4cGNtVjBkWEp1SUdkdmIyY3ViRzloWkdWa1RXOWtkV3hsYzE5YllWMHVaWGh3YjNKMGN6dHBaaWdoWjI5dlp5NXBiWEJzYVdOcGRFNWhiV1Z6Y0dGalpYTmZXMkZkS1hKbGRIVnliaUJoUFdkdmIyY3VaMlYwVDJKcVpXTjBRbmxPWVcxbEtHRXBMRzUxYkd3aFBXRS9ZVHB1ZFd4c2ZYSmxkSFZ5YmlCdWRXeHNmVHRuYjI5bkxrMXZaSFZzWlZSNWNHVTllMFZUTmpwY0ltVnpObHdpTEVkUFQwYzZYQ0puYjI5blhDSjlPMmR2YjJjdWJXOWtkV3hsVEc5aFpHVnlVM1JoZEdWZlBXNTFiR3c3WjI5dlp5NXBjMGx1VFc5a2RXeGxURzloWkdWeVh6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG1selNXNUhiMjluVFc5a2RXeGxURzloWkdWeVh5Z3BmSHhuYjI5bkxtbHpTVzVGY3paTmIyUjFiR1ZNYjJGa1pYSmZLQ2w5TzJkdmIyY3VhWE5KYmtkdmIyZE5iMlIxYkdWTWIyRmtaWEpmUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SVNGbmIyOW5MbTF2WkhWc1pVeHZZV1JsY2xOMFlYUmxYeVltWjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHVkSGx3WlQwOVoyOXZaeTVOYjJSMWJHVlVlWEJsTGtkUFQwZDlPMXh1WjI5dlp5NXBjMGx1UlhNMlRXOWtkV3hsVEc5aFpHVnlYejFtZFc1amRHbHZiaWdwZTJsbUtHZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmSmlabmIyOW5MbTF2WkhWc1pVeHZZV1JsY2xOMFlYUmxYeTUwZVhCbFBUMW5iMjluTGsxdlpIVnNaVlI1Y0dVdVJWTTJLWEpsZEhWeWJpRXdPM1poY2lCaFBXZHZiMmN1WjJ4dlltRnNMaVJxYzJOdmJYQTdjbVYwZFhKdUlHRS9YQ0ptZFc1amRHbHZibHdpSVQxMGVYQmxiMllnWVM1blpYUkRkWEp5Wlc1MFRXOWtkV3hsVUdGMGFEOGhNVG9oSVdFdVoyVjBRM1Z5Y21WdWRFMXZaSFZzWlZCaGRHZ29LVG9oTVgwN1hHNW5iMjluTG0xdlpIVnNaUzVrWldOc1lYSmxUR1ZuWVdONVRtRnRaWE53WVdObFBXWjFibU4wYVc5dUtDbDdhV1lvSVVOUFRWQkpURVZFSmlZaFoyOXZaeTVwYzBsdVIyOXZaMDF2WkhWc1pVeHZZV1JsY2w4b0tTbDBhSEp2ZHlCRmNuSnZjaWhjSW1kdmIyY3ViVzlrZFd4bExtUmxZMnhoY21WTVpXZGhZM2xPWVcxbGMzQmhZMlVnYlhWemRDQmlaU0JqWVd4c1pXUWdabkp2YlNCM2FYUm9hVzRnWVNCbmIyOW5MbTF2WkhWc1pWd2lLVHRwWmlnaFEwOU5VRWxNUlVRbUppRm5iMjluTG0xdlpIVnNaVXh2WVdSbGNsTjBZWFJsWHk1dGIyUjFiR1ZPWVcxbEtYUm9jbTkzSUVWeWNtOXlLRndpWjI5dlp5NXRiMlIxYkdVZ2JYVnpkQ0JpWlNCallXeHNaV1FnY0hKcGIzSWdkRzhnWjI5dlp5NXRiMlIxYkdVdVpHVmpiR0Z5WlV4bFoyRmplVTVoYldWemNHRmpaUzVjSWlrN1oyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjh1WkdWamJHRnlaVXhsWjJGamVVNWhiV1Z6Y0dGalpUMGhNSDA3WEc1bmIyOW5MbVJsWTJ4aGNtVk5iMlIxYkdWSlpEMW1kVzVqZEdsdmJpaGhLWHRwWmlnaFEwOU5VRWxNUlVRcGUybG1LQ0ZuYjI5bkxtbHpTVzVGY3paTmIyUjFiR1ZNYjJGa1pYSmZLQ2twZEdoeWIzY2dSWEp5YjNJb1hDSm5iMjluTG1SbFkyeGhjbVZOYjJSMWJHVkpaQ0J0WVhrZ2IyNXNlU0JpWlNCallXeHNaV1FnWm5KdmJTQjNhWFJvYVc0Z1lXNGdSVk0ySUcxdlpIVnNaVndpS1R0cFppaG5iMjluTG0xdlpIVnNaVXh2WVdSbGNsTjBZWFJsWHlZbVoyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjh1Ylc5a2RXeGxUbUZ0WlNsMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdVpHVmpiR0Z5WlUxdlpIVnNaVWxrSUcxaGVTQnZibXg1SUdKbElHTmhiR3hsWkNCdmJtTmxJSEJsY2lCdGIyUjFiR1V1WENJcE8ybG1LR0VnYVc0Z1oyOXZaeTVzYjJGa1pXUk5iMlIxYkdWelh5bDBhSEp2ZHlCRmNuSnZjaWduVFc5a2RXeGxJSGRwZEdnZ2JtRnRaWE53WVdObElGd2lKeXRoS3lkY0lpQmhiSEpsWVdSNUlHVjRhWE4wY3k0bktUdDlhV1lvWjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHBaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4dWJXOWtkV3hsVG1GdFpUMWhPMlZzYzJWN2RtRnlJR0k5WjI5dlp5NW5iRzlpWVd3dUpHcHpZMjl0Y0R0cFppZ2hZbng4WENKbWRXNWpkR2x2Ymx3aUlUMTBlWEJsYjJZZ1lpNW5aWFJEZFhKeVpXNTBUVzlrZFd4bFVHRjBhQ2wwYUhKdmR5QkZjbkp2Y2lnblRXOWtkV3hsSUhkcGRHZ2dibUZ0WlhOd1lXTmxJRndpSnl0Y2JtRXJKMXdpSUdoaGN5QmlaV1Z1SUd4dllXUmxaQ0JwYm1OdmNuSmxZM1JzZVM0bktUdGlQV0l1Y21WeGRXbHlaU2hpTG1kbGRFTjFjbkpsYm5STmIyUjFiR1ZRWVhSb0tDa3BPMmR2YjJjdWJHOWhaR1ZrVFc5a2RXeGxjMTliWVYwOWUyVjRjRzl5ZEhNNllpeDBlWEJsT21kdmIyY3VUVzlrZFd4bFZIbHdaUzVGVXpZc2JXOWtkV3hsU1dRNllYMTlmVHRuYjI5bkxuTmxkRlJsYzNSUGJteDVQV1oxYm1OMGFXOXVLR0VwZTJsbUtHZHZiMmN1UkVsVFFVeE1UMWRmVkVWVFZGOVBUa3haWDBOUFJFVXBkR2h5YjNjZ1lUMWhmSHhjSWx3aUxFVnljbTl5S0Z3aVNXMXdiM0owYVc1bklIUmxjM1F0YjI1c2VTQmpiMlJsSUdsdWRHOGdibTl1TFdSbFluVm5JR1Z1ZG1seWIyNXRaVzUwWENJcktHRS9YQ0k2SUZ3aUsyRTZYQ0l1WENJcEtUdDlPMmR2YjJjdVptOXlkMkZ5WkVSbFkyeGhjbVU5Wm5WdVkzUnBiMjRvWVNsN2ZUdGNia05QVFZCSlRFVkVmSHdvWjI5dlp5NXBjMUJ5YjNacFpHVmtYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVNCcGJpQm5iMjluTG14dllXUmxaRTF2WkhWc1pYTmZmSHdoWjI5dlp5NXBiWEJzYVdOcGRFNWhiV1Z6Y0dGalpYTmZXMkZkSmlabmIyOW5MbWx6UkdWbVFXNWtUbTkwVG5Wc2JDaG5iMjluTG1kbGRFOWlhbVZqZEVKNVRtRnRaU2hoS1NsOUxHZHZiMmN1YVcxd2JHbGphWFJPWVcxbGMzQmhZMlZ6WHoxN1hDSm5iMjluTG0xdlpIVnNaVndpT2lFd2ZTazdaMjl2Wnk1blpYUlBZbXBsWTNSQ2VVNWhiV1U5Wm5WdVkzUnBiMjRvWVN4aUtYdGhQV0V1YzNCc2FYUW9YQ0l1WENJcE8ySTlZbng4WjI5dlp5NW5iRzlpWVd3N1ptOXlLSFpoY2lCalBUQTdZenhoTG14bGJtZDBhRHRqS3lzcGFXWW9ZajFpVzJGYlkxMWRMQ0ZuYjI5bkxtbHpSR1ZtUVc1a1RtOTBUblZzYkNoaUtTbHlaWFIxY200Z2JuVnNiRHR5WlhSMWNtNGdZbjA3WjI5dlp5NW5iRzlpWVd4cGVtVTlablZ1WTNScGIyNG9ZU3hpS1h0aVBXSjhmR2R2YjJjdVoyeHZZbUZzTzJadmNpaDJZWElnWXlCcGJpQmhLV0piWTEwOVlWdGpYWDA3WEc1bmIyOW5MbUZrWkVSbGNHVnVaR1Z1WTNrOVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN0lVTlBUVkJKVEVWRUppWm5iMjluTGtSRlVFVk9SRVZPUTBsRlUxOUZUa0ZDVEVWRUppWm5iMjluTG1SbFluVm5URzloWkdWeVh5NWhaR1JFWlhCbGJtUmxibU41S0dFc1lpeGpMR1FwZlR0bmIyOW5Ma1ZPUVVKTVJWOUVSVUpWUjE5TVQwRkVSVkk5SVRBN1oyOXZaeTVzYjJkVWIwTnZibk52YkdWZlBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVoyeHZZbUZzTG1OdmJuTnZiR1VtSm1kdmIyY3VaMnh2WW1Gc0xtTnZibk52YkdVdVpYSnliM0lvWVNsOU8xeHVaMjl2Wnk1eVpYRjFhWEpsUFdaMWJtTjBhVzl1S0dFcGUybG1LQ0ZEVDAxUVNVeEZSQ2w3WjI5dlp5NUZUa0ZDVEVWZlJFVkNWVWRmVEU5QlJFVlNKaVpuYjI5bkxtUmxZblZuVEc5aFpHVnlYeTV5WlhGMVpYTjBaV1FvWVNrN2FXWW9aMjl2Wnk1cGMxQnliM1pwWkdWa1h5aGhLU2w3YVdZb1oyOXZaeTVwYzBsdVRXOWtkV3hsVEc5aFpHVnlYeWdwS1hKbGRIVnliaUJuYjI5bkxtMXZaSFZzWlM1blpYUkpiblJsY201aGJGOG9ZU2w5Wld4elpTQnBaaWhuYjI5bkxrVk9RVUpNUlY5RVJVSlZSMTlNVDBGRVJWSXBlM1poY2lCaVBXZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmTzJkdmIyY3ViVzlrZFd4bFRHOWhaR1Z5VTNSaGRHVmZQVzUxYkd3N2RISjVlMmR2YjJjdVpHVmlkV2RNYjJGa1pYSmZMbXh2WVdSZktHRXBmV1pwYm1Gc2JIbDdaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4OVluMTljbVYwZFhKdUlHNTFiR3g5ZlR0bmIyOW5MbkpsY1hWcGNtVlVlWEJsUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5Ym50OWZUdG5iMjluTG1KaGMyVlFZWFJvUFZ3aVhDSTdaMjl2Wnk1dWRXeHNSblZ1WTNScGIyNDlablZ1WTNScGIyNG9LWHQ5TzF4dVoyOXZaeTVoWW5OMGNtRmpkRTFsZEdodlpEMW1kVzVqZEdsdmJpZ3BlM1JvY205M0lFVnljbTl5S0Z3aWRXNXBiWEJzWlcxbGJuUmxaQ0JoWW5OMGNtRmpkQ0J0WlhSb2IyUmNJaWs3ZlR0bmIyOW5MbUZrWkZOcGJtZHNaWFJ2YmtkbGRIUmxjajFtZFc1amRHbHZiaWhoS1h0aExtbHVjM1JoYm1ObFh6MTJiMmxrSURBN1lTNW5aWFJKYm5OMFlXNWpaVDFtZFc1amRHbHZiaWdwZTJsbUtHRXVhVzV6ZEdGdVkyVmZLWEpsZEhWeWJpQmhMbWx1YzNSaGJtTmxYenRuYjI5bkxrUkZRbFZISmlZb1oyOXZaeTVwYm5OMFlXNTBhV0YwWldSVGFXNW5iR1YwYjI1elgxdG5iMjluTG1sdWMzUmhiblJwWVhSbFpGTnBibWRzWlhSdmJuTmZMbXhsYm1kMGFGMDlZU2s3Y21WMGRYSnVJR0V1YVc1emRHRnVZMlZmUFc1bGR5QmhmWDA3WjI5dlp5NXBibk4wWVc1MGFXRjBaV1JUYVc1bmJHVjBiMjV6WHoxYlhUdG5iMjluTGt4UFFVUmZUVTlFVlV4RlgxVlRTVTVIWDBWV1FVdzlJVEE3WjI5dlp5NVRSVUZNWDAxUFJGVk1SVjlGV0ZCUFVsUlRQV2R2YjJjdVJFVkNWVWM3WjI5dlp5NXNiMkZrWldSTmIyUjFiR1Z6WHoxN2ZUdG5iMjluTGtSRlVFVk9SRVZPUTBsRlUxOUZUa0ZDVEVWRVBTRkRUMDFRU1V4RlJDWW1aMjl2Wnk1RlRrRkNURVZmUkVWQ1ZVZGZURTlCUkVWU08yZHZiMmN1VkZKQlRsTlFTVXhGUFZ3aVpHVjBaV04wWENJN1hHNW5iMjluTGtGVFUxVk5SVjlGVTE5TlQwUlZURVZUWDFSU1FVNVRVRWxNUlVROUlURTdaMjl2Wnk1VVVrRk9VMUJKVEVWZlZFOWZURUZPUjFWQlIwVTlYQ0pjSWp0bmIyOW5MbFJTUVU1VFVFbE1SVkk5WENKMGNtRnVjM0JwYkdVdWFuTmNJanRuYjI5bkxtaGhjMEpoWkV4bGRGTmpiM0JwYm1jOWJuVnNiRHRuYjI5bkxuVnpaVk5oWm1GeWFURXdWMjl5YTJGeWIzVnVaRDFtZFc1amRHbHZiaWdwZTJsbUtHNTFiR3c5UFdkdmIyY3VhR0Z6UW1Ga1RHVjBVMk52Y0dsdVp5bDdkSEo1ZTNaaGNpQmhQU0ZsZG1Gc0tDZGNJblZ6WlNCemRISnBZM1JjSWp0c1pYUWdlQ0E5SURFN0lHWjFibU4wYVc5dUlHWW9LU0I3SUhKbGRIVnliaUIwZVhCbGIyWWdlRHNnZlR0bUtDa2dQVDBnWENKdWRXMWlaWEpjSWpzbktYMWpZWFJqYUNoaUtYdGhQU0V4ZldkdmIyY3VhR0Z6UW1Ga1RHVjBVMk52Y0dsdVp6MWhmWEpsZEhWeWJpQm5iMjluTG1oaGMwSmhaRXhsZEZOamIzQnBibWQ5TzJkdmIyY3VkMjl5YTJGeWIzVnVaRk5oWm1GeWFURXdSWFpoYkVKMVp6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNWNJaWhtZFc1amRHbHZiaWdwZTF3aUsyRXJYQ0pjWEc0N2ZTa29LVHRjWEc1Y0luMDdYRzVuYjI5bkxteHZZV1JOYjJSMWJHVTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4N2RISjVlMmR2YjJjdWJXOWtkV3hsVEc5aFpHVnlVM1JoZEdWZlBYdHRiMlIxYkdWT1lXMWxPbHdpWENJc1pHVmpiR0Z5WlV4bFoyRmplVTVoYldWemNHRmpaVG9oTVN4MGVYQmxPbWR2YjJjdVRXOWtkV3hsVkhsd1pTNUhUMDlIZlR0cFppaG5iMjluTG1selJuVnVZM1JwYjI0b1lTa3BkbUZ5SUdNOVlTNWpZV3hzS0hadmFXUWdNQ3g3ZlNrN1pXeHpaU0JwWmlobmIyOW5MbWx6VTNSeWFXNW5LR0VwS1dkdmIyY3VkWE5sVTJGbVlYSnBNVEJYYjNKcllYSnZkVzVrS0NrbUppaGhQV2R2YjJjdWQyOXlhMkZ5YjNWdVpGTmhabUZ5YVRFd1JYWmhiRUoxWnloaEtTa3NZejFuYjI5bkxteHZZV1JOYjJSMWJHVkdjbTl0VTI5MWNtTmxYeTVqWVd4c0tIWnZhV1FnTUN4aEtUdGxiSE5sSUhSb2NtOTNJRVZ5Y205eUtGd2lTVzUyWVd4cFpDQnRiMlIxYkdVZ1pHVm1hVzVwZEdsdmJsd2lLVHQyWVhJZ1pEMW5iMjluTG0xdlpIVnNaVXh2WVdSbGNsTjBZWFJsWHk1dGIyUjFiR1ZPWVcxbE8ybG1LR2R2YjJjdWFYTlRkSEpwYm1jb1pDa21KbVFwWjI5dlp5NXRiMlIxYkdWTWIyRmtaWEpUZEdGMFpWOHVaR1ZqYkdGeVpVeGxaMkZqZVU1aGJXVnpjR0ZqWlQ5bmIyOW5MbU52Ym5OMGNuVmpkRTVoYldWemNHRmpaVjhvWkN4Y2JtTXBPbWR2YjJjdVUwVkJURjlOVDBSVlRFVmZSVmhRVDFKVVV5WW1UMkpxWldOMExuTmxZV3dtSmx3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCakppWnVkV3hzSVQxakppWlBZbXBsWTNRdWMyVmhiQ2hqS1N4bmIyOW5MbXh2WVdSbFpFMXZaSFZzWlhOZlcyUmRQWHRsZUhCdmNuUnpPbU1zZEhsd1pUcG5iMjluTGsxdlpIVnNaVlI1Y0dVdVIwOVBSeXh0YjJSMWJHVkpaRHBuYjI5bkxtMXZaSFZzWlV4dllXUmxjbE4wWVhSbFh5NXRiMlIxYkdWT1lXMWxmVHRsYkhObElIUm9jbTkzSUVWeWNtOXlLQ2RKYm5aaGJHbGtJRzF2WkhWc1pTQnVZVzFsSUZ3aUp5dGtLeWRjSWljcE8zMW1hVzVoYkd4NWUyZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmUFdKOWZUdG5iMjluTG14dllXUk5iMlIxYkdWR2NtOXRVMjkxY21ObFh6MW1kVzVqZEdsdmJpaGhLWHRsZG1Gc0tHRXBPM0psZEhWeWJudDlmVHRuYjI5bkxtNXZjbTFoYkdsNlpWQmhkR2hmUFdaMWJtTjBhVzl1S0dFcGUyRTlZUzV6Y0d4cGRDaGNJaTljSWlrN1ptOXlLSFpoY2lCaVBUQTdZanhoTG14bGJtZDBhRHNwWENJdVhDSTlQV0ZiWWwwL1lTNXpjR3hwWTJVb1lpd3hLVHBpSmlaY0lpNHVYQ0k5UFdGYllsMG1KbUZiWWkweFhTWW1YQ0l1TGx3aUlUMWhXMkl0TVYwL1lTNXpjR3hwWTJVb0xTMWlMRElwT21Jckt6dHlaWFIxY200Z1lTNXFiMmx1S0Z3aUwxd2lLWDA3WEc1bmIyOW5MbXh2WVdSR2FXeGxVM2x1WTE4OVpuVnVZM1JwYjI0b1lTbDdhV1lvWjI5dlp5NW5iRzlpWVd3dVEweFBVMVZTUlY5TVQwRkVYMFpKVEVWZlUxbE9ReWx5WlhSMWNtNGdaMjl2Wnk1bmJHOWlZV3d1UTB4UFUxVlNSVjlNVDBGRVgwWkpURVZmVTFsT1F5aGhLVHQwY25sN2RtRnlJR0k5Ym1WM0lHZHZiMmN1WjJ4dlltRnNMbGhOVEVoMGRIQlNaWEYxWlhOME8ySXViM0JsYmloY0ltZGxkRndpTEdFc0lURXBPMkl1YzJWdVpDZ3BPM0psZEhWeWJpQXdQVDFpTG5OMFlYUjFjM3g4TWpBd1BUMWlMbk4wWVhSMWN6OWlMbkpsYzNCdmJuTmxWR1Y0ZERwdWRXeHNmV05oZEdOb0tHTXBlM0psZEhWeWJpQnVkV3hzZlgwN1hHNW5iMjluTG5SeVlXNXpjR2xzWlY4OVpuVnVZM1JwYjI0b1lTeGlMR01wZTNaaGNpQmtQV2R2YjJjdVoyeHZZbUZzTGlScWMyTnZiWEE3Wkh4OEtHZHZiMmN1WjJ4dlltRnNMaVJxYzJOdmJYQTlaRDE3ZlNrN2RtRnlJR1U5WkM1MGNtRnVjM0JwYkdVN2FXWW9JV1VwZTNaaGNpQm1QV2R2YjJjdVltRnpaVkJoZEdncloyOXZaeTVVVWtGT1UxQkpURVZTTEdjOVoyOXZaeTVzYjJGa1JtbHNaVk41Ym1OZktHWXBPMmxtS0djcGV5aG1kVzVqZEdsdmJpZ3BleWd3TEdWMllXd3BLR2NyWENKY1hHNHZMeU1nYzI5MWNtTmxWVkpNUFZ3aUsyWXBmU2t1WTJGc2JDaG5iMjluTG1kc2IySmhiQ2s3YVdZb1oyOXZaeTVuYkc5aVlXd3VKR2QzZEVWNGNHOXlkQ1ltWjI5dlp5NW5iRzlpWVd3dUpHZDNkRVY0Y0c5eWRDNGthbk5qYjIxd0ppWWhaMjl2Wnk1bmJHOWlZV3d1SkdkM2RFVjRjRzl5ZEM0a2FuTmpiMjF3TG5SeVlXNXpjR2xzWlNsMGFISnZkeUJGY25KdmNpZ25WR2hsSUhSeVlXNXpjR2xzWlhJZ1pHbGtJRzV2ZENCd2NtOXdaWEpzZVNCbGVIQnZjblFnZEdobElGd2lkSEpoYm5Od2FXeGxYQ0lnYldWMGFHOWtMaUFrWjNkMFJYaHdiM0owT2lBbkswcFRUMDR1YzNSeWFXNW5hV1o1S0dkdmIyY3VaMnh2WW1Gc0xpUm5kM1JGZUhCdmNuUXBLVHRuYjI5bkxtZHNiMkpoYkM0a2FuTmpiMjF3TG5SeVlXNXpjR2xzWlQxY2JtZHZiMmN1WjJ4dlltRnNMaVJuZDNSRmVIQnZjblF1SkdwelkyOXRjQzUwY21GdWMzQnBiR1U3WkQxbmIyOW5MbWRzYjJKaGJDNGthbk5qYjIxd08yVTlaQzUwY21GdWMzQnBiR1Y5ZldWOGZDaGxQV1F1ZEhKaGJuTndhV3hsUFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1c2IyZFViME52Ym5OdmJHVmZLR0lyWENJZ2NtVnhkV2x5WlhNZ2RISmhibk53YVd4aGRHbHZiaUJpZFhRZ2JtOGdkSEpoYm5Od2FXeGxjaUIzWVhNZ1ptOTFibVF1WENJcE8zSmxkSFZ5YmlCaGZTazdjbVYwZFhKdUlHVW9ZU3hpTEdNcGZUdGNibWR2YjJjdWRIbHdaVTltUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFhSNWNHVnZaaUJoTzJsbUtGd2liMkpxWldOMFhDSTlQV0lwYVdZb1lTbDdhV1lvWVNCcGJuTjBZVzVqWlc5bUlFRnljbUY1S1hKbGRIVnlibHdpWVhKeVlYbGNJanRwWmloaElHbHVjM1JoYm1ObGIyWWdUMkpxWldOMEtYSmxkSFZ5YmlCaU8zWmhjaUJqUFU5aWFtVmpkQzV3Y205MGIzUjVjR1V1ZEc5VGRISnBibWN1WTJGc2JDaGhLVHRwWmloY0lsdHZZbXBsWTNRZ1YybHVaRzkzWFZ3aVBUMWpLWEpsZEhWeWJsd2liMkpxWldOMFhDSTdhV1lvWENKYmIySnFaV04wSUVGeWNtRjVYVndpUFQxamZIeGNJbTUxYldKbGNsd2lQVDEwZVhCbGIyWWdZUzVzWlc1bmRHZ21KbHdpZFc1a1pXWnBibVZrWENJaFBYUjVjR1Z2WmlCaExuTndiR2xqWlNZbVhDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JR0V1Y0hKdmNHVnlkSGxKYzBWdWRXMWxjbUZpYkdVbUppRmhMbkJ5YjNCbGNuUjVTWE5GYm5WdFpYSmhZbXhsS0Z3aWMzQnNhV05sWENJcEtYSmxkSFZ5Ymx3aVlYSnlZWGxjSWp0cFppaGNJbHR2WW1wbFkzUWdSblZ1WTNScGIyNWRYQ0k5UFdOOGZGd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJoTG1OaGJHd21KbHdpZFc1a1pXWnBibVZrWENJaFBYUjVjR1Z2WmlCaExuQnliM0JsY25SNVNYTkZiblZ0WlhKaFlteGxKaVloWVM1d2NtOXdaWEowZVVselJXNTFiV1Z5WVdKc1pTaGNJbU5oYkd4Y0lpa3BjbVYwZFhKdVhDSm1kVzVqZEdsdmJsd2lmV1ZzYzJVZ2NtVjBkWEp1WENKdWRXeHNYQ0k3WEc1bGJITmxJR2xtS0Z3aVpuVnVZM1JwYjI1Y0lqMDlZaVltWENKMWJtUmxabWx1WldSY0lqMDlkSGx3Wlc5bUlHRXVZMkZzYkNseVpYUjFjbTVjSW05aWFtVmpkRndpTzNKbGRIVnliaUJpZlR0bmIyOW5MbWx6VG5Wc2JEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdiblZzYkQwOVBXRjlPMmR2YjJjdWFYTkVaV1pCYm1ST2IzUk9kV3hzUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCdWRXeHNJVDFoZlR0bmIyOW5MbWx6UVhKeVlYazlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVYQ0poY25KaGVWd2lQVDFuYjI5bkxuUjVjR1ZQWmloaEtYMDdaMjl2Wnk1cGMwRnljbUY1VEdsclpUMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMW5iMjluTG5SNWNHVlBaaWhoS1R0eVpYUjFjbTVjSW1GeWNtRjVYQ0k5UFdKOGZGd2liMkpxWldOMFhDSTlQV0ltSmx3aWJuVnRZbVZ5WENJOVBYUjVjR1Z2WmlCaExteGxibWQwYUgwN1oyOXZaeTVwYzBSaGRHVk1hV3RsUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5MbWx6VDJKcVpXTjBLR0VwSmlaY0ltWjFibU4wYVc5dVhDSTlQWFI1Y0dWdlppQmhMbWRsZEVaMWJHeFpaV0Z5ZlR0bmIyOW5MbWx6Um5WdVkzUnBiMjQ5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1WENKbWRXNWpkR2x2Ymx3aVBUMW5iMjluTG5SNWNHVlBaaWhoS1gwN1hHNW5iMjluTG1selQySnFaV04wUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFhSNWNHVnZaaUJoTzNKbGRIVnlibHdpYjJKcVpXTjBYQ0k5UFdJbUptNTFiR3doUFdGOGZGd2lablZ1WTNScGIyNWNJajA5WW4wN1oyOXZaeTVuWlhSVmFXUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0ZiWjI5dlp5NVZTVVJmVUZKUFVFVlNWRmxmWFh4OEtHRmJaMjl2Wnk1VlNVUmZVRkpQVUVWU1ZGbGZYVDBySzJkdmIyY3VkV2xrUTI5MWJuUmxjbDhwZlR0bmIyOW5MbWhoYzFWcFpEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGhJV0ZiWjI5dlp5NVZTVVJmVUZKUFVFVlNWRmxmWFgwN1oyOXZaeTV5WlcxdmRtVlZhV1E5Wm5WdVkzUnBiMjRvWVNsN2JuVnNiQ0U5UFdFbUpsd2ljbVZ0YjNabFFYUjBjbWxpZFhSbFhDSnBiaUJoSmlaaExuSmxiVzkyWlVGMGRISnBZblYwWlNobmIyOW5MbFZKUkY5UVVrOVFSVkpVV1Y4cE8zUnllWHRrWld4bGRHVWdZVnRuYjI5bkxsVkpSRjlRVWs5UVJWSlVXVjlkZldOaGRHTm9LR0lwZTMxOU8yZHZiMmN1VlVsRVgxQlNUMUJGVWxSWlh6MWNJbU5zYjNOMWNtVmZkV2xrWDF3aUt5Z3hSVGtxVFdGMGFDNXlZVzVrYjIwb0tUNCtQakFwTzJkdmIyY3VkV2xrUTI5MWJuUmxjbDg5TUR0bmIyOW5MbWRsZEVoaGMyaERiMlJsUFdkdmIyY3VaMlYwVldsa08xeHVaMjl2Wnk1eVpXMXZkbVZJWVhOb1EyOWtaVDFuYjI5bkxuSmxiVzkyWlZWcFpEdG5iMjluTG1Oc2IyNWxUMkpxWldOMFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXZHZiMmN1ZEhsd1pVOW1LR0VwTzJsbUtGd2liMkpxWldOMFhDSTlQV0o4ZkZ3aVlYSnlZWGxjSWowOVlpbDdhV1lvWENKbWRXNWpkR2x2Ymx3aVBUMDlkSGx3Wlc5bUlHRXVZMnh2Ym1VcGNtVjBkWEp1SUdFdVkyeHZibVVvS1R0aVBWd2lZWEp5WVhsY0lqMDlZajliWFRwN2ZUdG1iM0lvZG1GeUlHTWdhVzRnWVNsaVcyTmRQV2R2YjJjdVkyeHZibVZQWW1wbFkzUW9ZVnRqWFNrN2NtVjBkWEp1SUdKOWNtVjBkWEp1SUdGOU8yZHZiMmN1WW1sdVpFNWhkR2wyWlY4OVpuVnVZM1JwYjI0b1lTeGlMR01wZTNKbGRIVnliaUJoTG1OaGJHd3VZWEJ3Ykhrb1lTNWlhVzVrTEdGeVozVnRaVzUwY3lsOU8xeHVaMjl2Wnk1aWFXNWtTbk5mUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRwWmlnaFlTbDBhSEp2ZHlCRmNuSnZjaWdwTzJsbUtESThZWEpuZFcxbGJuUnpMbXhsYm1kMGFDbDdkbUZ5SUdROVFYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxESXBPM0psZEhWeWJpQm1kVzVqZEdsdmJpZ3BlM1poY2lCalBVRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5azdRWEp5WVhrdWNISnZkRzkwZVhCbExuVnVjMmhwWm5RdVlYQndiSGtvWXl4a0tUdHlaWFIxY200Z1lTNWhjSEJzZVNoaUxHTXBmWDF5WlhSMWNtNGdablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdZUzVoY0hCc2VTaGlMR0Z5WjNWdFpXNTBjeWw5ZlR0bmIyOW5MbUpwYm1ROVpuVnVZM1JwYjI0b1lTeGlMR01wZTBaMWJtTjBhVzl1TG5CeWIzUnZkSGx3WlM1aWFXNWtKaVl0TVNFOVJuVnVZM1JwYjI0dWNISnZkRzkwZVhCbExtSnBibVF1ZEc5VGRISnBibWNvS1M1cGJtUmxlRTltS0Z3aWJtRjBhWFpsSUdOdlpHVmNJaWsvWjI5dlp5NWlhVzVrUFdkdmIyY3VZbWx1WkU1aGRHbDJaVjg2WjI5dlp5NWlhVzVrUFdkdmIyY3VZbWx1WkVwelh6dHlaWFIxY200Z1oyOXZaeTVpYVc1a0xtRndjR3g1S0c1MWJHd3NZWEpuZFcxbGJuUnpLWDA3WEc1bmIyOW5MbkJoY25ScFlXdzlablZ1WTNScGIyNG9ZU3hpS1h0MllYSWdZejFCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zTVNrN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0NsN2RtRnlJR0k5WXk1emJHbGpaU2dwTzJJdWNIVnphQzVoY0hCc2VTaGlMR0Z5WjNWdFpXNTBjeWs3Y21WMGRYSnVJR0V1WVhCd2JIa29kR2hwY3l4aUtYMTlPMmR2YjJjdWJXbDRhVzQ5Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTWdhVzRnWWlsaFcyTmRQV0piWTExOU8yZHZiMmN1Ym05M1BXZHZiMmN1VkZKVlUxUkZSRjlUU1ZSRkppWkVZWFJsTG01dmQzeDhablZ1WTNScGIyNG9LWHR5WlhSMWNtNHJibVYzSUVSaGRHVjlPMXh1WjI5dlp5NW5iRzlpWVd4RmRtRnNQV1oxYm1OMGFXOXVLR0VwZTJsbUtHZHZiMmN1WjJ4dlltRnNMbVY0WldOVFkzSnBjSFFwWjI5dlp5NW5iRzlpWVd3dVpYaGxZMU5qY21sd2RDaGhMRndpU21GMllWTmpjbWx3ZEZ3aUtUdGxiSE5sSUdsbUtHZHZiMmN1WjJ4dlltRnNMbVYyWVd3cGUybG1LRzUxYkd3OVBXZHZiMmN1WlhaaGJGZHZjbXR6Um05eVIyeHZZbUZzYzE4cGUzUnllWHRuYjI5bkxtZHNiMkpoYkM1bGRtRnNLRndpZG1GeUlGOWxkbUZzVkdWemRGOGdQU0F4TzF3aUtYMWpZWFJqYUNoa0tYdDlhV1lvWENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlHZHZiMmN1WjJ4dlltRnNMbDlsZG1Gc1ZHVnpkRjhwZTNSeWVYdGtaV3hsZEdVZ1oyOXZaeTVuYkc5aVlXd3VYMlYyWVd4VVpYTjBYMzFqWVhSamFDaGtLWHQ5WjI5dlp5NWxkbUZzVjI5eWEzTkdiM0pIYkc5aVlXeHpYejBoTUgxbGJITmxJR2R2YjJjdVpYWmhiRmR2Y210elJtOXlSMnh2WW1Gc2MxODlJVEY5YVdZb1oyOXZaeTVsZG1Gc1YyOXlhM05HYjNKSGJHOWlZV3h6WHlsbmIyOW5MbWRzYjJKaGJDNWxkbUZzS0dFcE8yVnNjMlY3ZG1GeUlHSTlaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblFzWXoxaUxtTnlaV0YwWlVWc1pXMWxiblFvWENKVFExSkpVRlJjSWlrN1l5NTBlWEJsUFZ3aWRHVjRkQzlxWVhaaGMyTnlhWEIwWENJN1l5NWtaV1psY2oxY2JpRXhPMk11WVhCd1pXNWtRMmhwYkdRb1lpNWpjbVZoZEdWVVpYaDBUbTlrWlNoaEtTazdZaTVvWldGa0xtRndjR1Z1WkVOb2FXeGtLR01wTzJJdWFHVmhaQzV5WlcxdmRtVkRhR2xzWkNoaktYMTlaV3h6WlNCMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdVoyeHZZbUZzUlhaaGJDQnViM1FnWVhaaGFXeGhZbXhsWENJcE8zMDdaMjl2Wnk1bGRtRnNWMjl5YTNOR2IzSkhiRzlpWVd4elh6MXVkV3hzTzF4dVoyOXZaeTVuWlhSRGMzTk9ZVzFsUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvWENJdVhDSTlQVk4wY21sdVp5aGhLUzVqYUdGeVFYUW9NQ2twZEdoeWIzY2dSWEp5YjNJb0oyTnNZWE56VG1GdFpTQndZWE56WldRZ2FXNGdaMjl2Wnk1blpYUkRjM05PWVcxbElHMTFjM1FnYm05MElITjBZWEowSUhkcGRHZ2dYQ0l1WENJdUlGbHZkU0J3WVhOelpXUTZJQ2NyWVNrN2RtRnlJR005Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VZM056VG1GdFpVMWhjSEJwYm1kZlcyRmRmSHhoZlN4a1BXWjFibU4wYVc5dUtHRXBlMkU5WVM1emNHeHBkQ2hjSWkxY0lpazdabTl5S0haaGNpQmlQVnRkTEdROU1EdGtQR0V1YkdWdVozUm9PMlFyS3lsaUxuQjFjMmdvWXloaFcyUmRLU2s3Y21WMGRYSnVJR0l1YW05cGJpaGNJaTFjSWlsOU8yUTlaMjl2Wnk1amMzTk9ZVzFsVFdGd2NHbHVaMTgvWENKQ1dWOVhTRTlNUlZ3aVBUMW5iMjluTG1OemMwNWhiV1ZOWVhCd2FXNW5VM1I1YkdWZlAyTTZaRHBtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVgwN1lUMWlQMkVyWENJdFhDSXJaQ2hpS1Rwa0tHRXBPM0psZEhWeWJpQm5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYME5UVTE5T1FVMUZYMDFCVUY5R1RqOW5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYME5UVTE5T1FVMUZYMDFCVUY5R1RpaGhLVHBoZlR0Y2JtZHZiMmN1YzJWMFEzTnpUbUZ0WlUxaGNIQnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdG5iMjluTG1OemMwNWhiV1ZOWVhCd2FXNW5YejFoTzJkdmIyY3VZM056VG1GdFpVMWhjSEJwYm1kVGRIbHNaVjg5WW4wN0lVTlBUVkJKVEVWRUppWm5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYME5UVTE5T1FVMUZYMDFCVUZCSlRrY21KaWhuYjI5bkxtTnpjMDVoYldWTllYQndhVzVuWHoxbmIyOW5MbWRzYjJKaGJDNURURTlUVlZKRlgwTlRVMTlPUVUxRlgwMUJVRkJKVGtjcE8yZHZiMmN1WjJWMFRYTm5QV1oxYm1OMGFXOXVLR0VzWWl4aktYdGpKaVpqTG1oMGJXd21KaWhoUFdFdWNtVndiR0ZqWlNndlBDOW5MRndpSm14ME8xd2lLU2s3WWlZbUtHRTlZUzV5WlhCc1lXTmxLQzljWEh0Y1hDUW9XMTU5WFNzcGZTOW5MR1oxYm1OMGFXOXVLR0VzWXlsN2NtVjBkWEp1SUc1MWJHd2hQV0ltSm1NZ2FXNGdZajlpVzJOZE9tRjlLU2s3Y21WMGRYSnVJR0Y5TzJkdmIyY3VaMlYwVFhOblYybDBhRVpoYkd4aVlXTnJQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdGOU8yZHZiMmN1Wlhod2IzSjBVM2x0WW05c1BXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbVY0Y0c5eWRGQmhkR2hmS0dFc1lpeGpLWDA3WEc1bmIyOW5MbVY0Y0c5eWRGQnliM0JsY25SNVBXWjFibU4wYVc5dUtHRXNZaXhqS1h0aFcySmRQV045TzJkdmIyY3VhVzVvWlhKcGRITTlablZ1WTNScGIyNG9ZU3hpS1h0bWRXNWpkR2x2YmlCaktDbDdmV011Y0hKdmRHOTBlWEJsUFdJdWNISnZkRzkwZVhCbE8yRXVjM1Z3WlhKRGJHRnpjMTg5WWk1d2NtOTBiM1I1Y0dVN1lTNXdjbTkwYjNSNWNHVTlibVYzSUdNN1lTNXdjbTkwYjNSNWNHVXVZMjl1YzNSeWRXTjBiM0k5WVR0aExtSmhjMlU5Wm5WdVkzUnBiMjRvWVN4akxHWXBlMlp2Y2loMllYSWdaRDFCY25KaGVTaGhjbWQxYldWdWRITXViR1Z1WjNSb0xUSXBMR1U5TWp0bFBHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnN1pTc3JLV1JiWlMweVhUMWhjbWQxYldWdWRITmJaVjA3Y21WMGRYSnVJR0l1Y0hKdmRHOTBlWEJsVzJOZExtRndjR3g1S0dFc1pDbDlmVHRjYm1kdmIyY3VZbUZ6WlQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlZWEpuZFcxbGJuUnpMbU5oYkd4bFpTNWpZV3hzWlhJN2FXWW9aMjl2Wnk1VFZGSkpRMVJmVFU5RVJWOURUMDFRUVZSSlFreEZmSHhuYjI5bkxrUkZRbFZISmlZaFpDbDBhSEp2ZHlCRmNuSnZjaWhjSW1GeVozVnRaVzUwY3k1allXeHNaWElnYm05MElHUmxabWx1WldRdUlDQm5iMjluTG1KaGMyVW9LU0JqWVc1dWIzUWdZbVVnZFhObFpDQjNhWFJvSUhOMGNtbGpkQ0J0YjJSbElHTnZaR1V1SUZObFpTQm9kSFJ3T2k4dmQzZDNMbVZqYldFdGFXNTBaWEp1WVhScGIyNWhiQzV2Y21jdlpXTnRZUzB5TmpJdk5TNHhMeU56WldNdFExd2lLVHRwWmloY0luVnVaR1ZtYVc1bFpGd2lJVDA5ZEhsd1pXOW1JR1F1YzNWd1pYSkRiR0Z6YzE4cGUyWnZjaWgyWVhJZ1pUMUJjbkpoZVNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvTFRFcExHWTlNVHRtUEdGeVozVnRaVzUwY3k1c1pXNW5kR2c3WmlzcktXVmJaaTB4WFQxaGNtZDFiV1Z1ZEhOYlpsMDdjbVYwZFhKdUlHUXVjM1Z3WlhKRGJHRnpjMTh1WTI5dWMzUnlkV04wYjNJdVlYQndiSGtvWVN4bEtYMXBaaWhjSW5OMGNtbHVaMXdpSVQxMGVYQmxiMllnWWlZbVhDSnplVzFpYjJ4Y0lpRTlkSGx3Wlc5bUlHSXBkR2h5YjNjZ1JYSnliM0lvWENKdFpYUm9iMlFnYm1GdFpYTWdjSEp2ZG1sa1pXUWdkRzhnWjI5dlp5NWlZWE5sSUcxMWMzUWdZbVVnWVNCemRISnBibWNnYjNJZ1lTQnplVzFpYjJ4Y0lpazdYRzVsUFVGeWNtRjVLR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ3RNaWs3Wm05eUtHWTlNanRtUEdGeVozVnRaVzUwY3k1c1pXNW5kR2c3WmlzcktXVmJaaTB5WFQxaGNtZDFiV1Z1ZEhOYlpsMDdaajBoTVR0bWIzSW9kbUZ5SUdjOVlTNWpiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1U3Wnp0blBVOWlhbVZqZEM1blpYUlFjbTkwYjNSNWNHVlBaaWhuS1NscFppaG5XMkpkUFQwOVpDbG1QU0V3TzJWc2MyVWdhV1lvWmlseVpYUjFjbTRnWjF0aVhTNWhjSEJzZVNoaExHVXBPMmxtS0dGYllsMDlQVDFrS1hKbGRIVnliaUJoTG1OdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pWdGlYUzVoY0hCc2VTaGhMR1VwTzNSb2NtOTNJRVZ5Y205eUtGd2laMjl2Wnk1aVlYTmxJR05oYkd4bFpDQm1jbTl0SUdFZ2JXVjBhRzlrSUc5bUlHOXVaU0J1WVcxbElIUnZJR0VnYldWMGFHOWtJRzltSUdFZ1pHbG1abVZ5Wlc1MElHNWhiV1ZjSWlrN2ZUdG5iMjluTG5OamIzQmxQV1oxYm1OMGFXOXVLR0VwZTJsbUtHZHZiMmN1YVhOSmJrMXZaSFZzWlV4dllXUmxjbDhvS1NsMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdWMyTnZjR1VnYVhNZ2JtOTBJSE4xY0hCdmNuUmxaQ0IzYVhSb2FXNGdZU0J0YjJSMWJHVXVYQ0lwTzJFdVkyRnNiQ2huYjI5bkxtZHNiMkpoYkNsOU8xeHVRMDlOVUVsTVJVUjhmQ2huYjI5bkxtZHNiMkpoYkM1RFQwMVFTVXhGUkQxRFQwMVFTVXhGUkNrN1oyOXZaeTVrWldacGJtVkRiR0Z6Y3oxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBXSXVZMjl1YzNSeWRXTjBiM0lzWkQxaUxuTjBZWFJwWTNNN1l5WW1ZeUU5VDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVqYjI1emRISjFZM1J2Y254OEtHTTlablZ1WTNScGIyNG9LWHQwYUhKdmR5QkZjbkp2Y2loY0ltTmhibTV2ZENCcGJuTjBZVzUwYVdGMFpTQmhiaUJwYm5SbGNtWmhZMlVnS0c1dklHTnZibk4wY25WamRHOXlJR1JsWm1sdVpXUXBMbHdpS1R0OUtUdGpQV2R2YjJjdVpHVm1hVzVsUTJ4aGMzTXVZM0psWVhSbFUyVmhiR2x1WjBOdmJuTjBjblZqZEc5eVh5aGpMR0VwTzJFbUptZHZiMmN1YVc1b1pYSnBkSE1vWXl4aEtUdGtaV3hsZEdVZ1lpNWpiMjV6ZEhKMVkzUnZjanRrWld4bGRHVWdZaTV6ZEdGMGFXTnpPMmR2YjJjdVpHVm1hVzVsUTJ4aGMzTXVZWEJ3YkhsUWNtOXdaWEowYVdWelh5aGpMbkJ5YjNSdmRIbHdaU3hpS1R0dWRXeHNJVDFrSmlZb1pDQnBibk4wWVc1alpXOW1JRVoxYm1OMGFXOXVQMlFvWXlrNloyOXZaeTVrWldacGJtVkRiR0Z6Y3k1aGNIQnNlVkJ5YjNCbGNuUnBaWE5mS0dNc1pDa3BPM0psZEhWeWJpQmpmVHRjYm1kdmIyY3VaR1ZtYVc1bFEyeGhjM011VTBWQlRGOURURUZUVTE5SlRsTlVRVTVEUlZNOVoyOXZaeTVFUlVKVlJ6dG5iMjluTG1SbFptbHVaVU5zWVhOekxtTnlaV0YwWlZObFlXeHBibWREYjI1emRISjFZM1J2Y2w4OVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlnaFoyOXZaeTVrWldacGJtVkRiR0Z6Y3k1VFJVRk1YME5NUVZOVFgwbE9VMVJCVGtORlV5bHlaWFIxY200Z1lUdDJZWElnWXowaFoyOXZaeTVrWldacGJtVkRiR0Z6Y3k1cGMxVnVjMlZoYkdGaWJHVmZLR0lwTEdROVpuVnVZM1JwYjI0b0tYdDJZWElnWWoxaExtRndjR3g1S0hSb2FYTXNZWEpuZFcxbGJuUnpLWHg4ZEdocGN6dGlXMmR2YjJjdVZVbEVYMUJTVDFCRlVsUlpYMTA5WWx0bmIyOW5MbFZKUkY5UVVrOVFSVkpVV1Y5ZE8zUm9hWE11WTI5dWMzUnlkV04wYjNJOVBUMWtKaVpqSmlaUFltcGxZM1F1YzJWaGJDQnBibk4wWVc1alpXOW1JRVoxYm1OMGFXOXVKaVpQWW1wbFkzUXVjMlZoYkNoaUtUdHlaWFIxY200Z1luMDdjbVYwZFhKdUlHUjlPMmR2YjJjdVpHVm1hVzVsUTJ4aGMzTXVhWE5WYm5ObFlXeGhZbXhsWHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTWW1ZUzV3Y205MGIzUjVjR1VtSm1FdWNISnZkRzkwZVhCbFcyZHZiMmN1VlU1VFJVRk1RVUpNUlY5RFQwNVRWRkpWUTFSUFVsOVFVazlRUlZKVVdWOWRmVHRjYm1kdmIyY3VaR1ZtYVc1bFEyeGhjM011VDBKS1JVTlVYMUJTVDFSUFZGbFFSVjlHU1VWTVJGTmZQVndpWTI5dWMzUnlkV04wYjNJZ2FHRnpUM2R1VUhKdmNHVnlkSGtnYVhOUWNtOTBiM1I1Y0dWUFppQndjbTl3WlhKMGVVbHpSVzUxYldWeVlXSnNaU0IwYjB4dlkyRnNaVk4wY21sdVp5QjBiMU4wY21sdVp5QjJZV3gxWlU5bVhDSXVjM0JzYVhRb1hDSWdYQ0lwTzJkdmIyY3VaR1ZtYVc1bFEyeGhjM011WVhCd2JIbFFjbTl3WlhKMGFXVnpYejFtZFc1amRHbHZiaWhoTEdJcGUyWnZjaWgyWVhJZ1l5QnBiaUJpS1U5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoaUxHTXBKaVlvWVZ0alhUMWlXMk5kS1R0bWIzSW9kbUZ5SUdROU1EdGtQR2R2YjJjdVpHVm1hVzVsUTJ4aGMzTXVUMEpLUlVOVVgxQlNUMVJQVkZsUVJWOUdTVVZNUkZOZkxteGxibWQwYUR0a0t5c3BZejFuYjI5bkxtUmxabWx1WlVOc1lYTnpMazlDU2tWRFZGOVFVazlVVDFSWlVFVmZSa2xGVEVSVFgxdGtYU3hQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvWWl4aktTWW1LR0ZiWTEwOVlsdGpYU2w5TzF4dVoyOXZaeTUwWVdkVmJuTmxZV3hoWW14bFEyeGhjM005Wm5WdVkzUnBiMjRvWVNsN0lVTlBUVkJKVEVWRUppWm5iMjluTG1SbFptbHVaVU5zWVhOekxsTkZRVXhmUTB4QlUxTmZTVTVUVkVGT1EwVlRKaVlvWVM1d2NtOTBiM1I1Y0dWYloyOXZaeTVWVGxORlFVeEJRa3hGWDBOUFRsTlVVbFZEVkU5U1gxQlNUMUJGVWxSWlgxMDlJVEFwZlR0bmIyOW5MbFZPVTBWQlRFRkNURVZmUTA5T1UxUlNWVU5VVDFKZlVGSlBVRVZTVkZsZlBWd2laMjl2WjE5a1pXWnBibVZEYkdGemMxOXNaV2RoWTNsZmRXNXpaV0ZzWVdKc1pWd2lPMXh1SVVOUFRWQkpURVZFSmlabmIyOW5Ma1JGVUVWT1JFVk9RMGxGVTE5RlRrRkNURVZFSmlZb1oyOXZaeTVwYmtoMGJXeEViMk4xYldWdWRGODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG1kc2IySmhiQzVrYjJOMWJXVnVkRHR5WlhSMWNtNGdiblZzYkNFOVlTWW1YQ0ozY21sMFpWd2lhVzRnWVgwc1oyOXZaeTVwYzBSdlkzVnRaVzUwVEc5aFpHbHVaMTg5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDFuYjI5bkxtZHNiMkpoYkM1a2IyTjFiV1Z1ZER0eVpYUjFjbTRnWVM1aGRIUmhZMmhGZG1WdWREOWNJbU52YlhCc1pYUmxYQ0loUFdFdWNtVmhaSGxUZEdGMFpUcGNJbXh2WVdScGJtZGNJajA5WVM1eVpXRmtlVk4wWVhSbGZTeG5iMjluTG1acGJtUkNZWE5sVUdGMGFGODlablZ1WTNScGIyNG9LWHRwWmlobmIyOW5MbWx6UkdWbUtHZHZiMmN1WjJ4dlltRnNMa05NVDFOVlVrVmZRa0ZUUlY5UVFWUklLU1ltWjI5dlp5NXBjMU4wY21sdVp5aG5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYMEpCVTBWZlVFRlVTQ2twWjI5dlp5NWlZWE5sVUdGMGFEMW5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYMEpCVTBWZlVFRlVTRHRsYkhObElHbG1LR2R2YjJjdWFXNUlkRzFzUkc5amRXMWxiblJmS0NrcGUzWmhjaUJoUFdkdmIyY3VaMnh2WW1Gc0xtUnZZM1Z0Wlc1MExHSTlZUzVqZFhKeVpXNTBVMk55YVhCME8xeHVZVDFpUDF0aVhUcGhMbWRsZEVWc1pXMWxiblJ6UW5sVVlXZE9ZVzFsS0Z3aVUwTlNTVkJVWENJcE8yWnZjaWhpUFdFdWJHVnVaM1JvTFRFN01EdzlZanN0TFdJcGUzWmhjaUJqUFdGYllsMHVjM0pqTEdROVl5NXNZWE4wU1c1a1pYaFBaaWhjSWo5Y0lpazdaRDB0TVQwOVpEOWpMbXhsYm1kMGFEcGtPMmxtS0Z3aVltRnpaUzVxYzF3aVBUMWpMbk4xWW5OMGNpaGtMVGNzTnlrcGUyZHZiMmN1WW1GelpWQmhkR2c5WXk1emRXSnpkSElvTUN4a0xUY3BPMkp5WldGcmZYMTlmU3huYjI5bkxtWnBibVJDWVhObFVHRjBhRjhvS1N4bmIyOW5MbFJ5WVc1emNHbHNaWEk5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbkpsY1hWcGNtVnpWSEpoYm5Od2FXeGhkR2x2Ymw4OWJuVnNiRHQwYUdsekxuUnlZVzV6Y0dsc1lYUnBiMjVVWVhKblpYUmZQV2R2YjJjdVZGSkJUbE5RU1V4RlgxUlBYMHhCVGtkVlFVZEZmU3huYjI5bkxsUnlZVzV6Y0dsc1pYSXVjSEp2ZEc5MGVYQmxMbU55WldGMFpWSmxjWFZwY21WelZISmhibk53YVd4aGRHbHZibDg5Wm5WdVkzUnBiMjRvS1h0bWRXNWpkR2x2YmlCaEtHRXNZaWw3WlQ5a1cyRmRQU0V3T21Jb0tUOG9ZejFoTEdSYllWMDlJVEVwT21VOVpGdGhYVDBoTUgxbWRXNWpkR2x2YmlCaUtHRXBlM1J5ZVh0eVpYUjFjbTRoSVdWMllXd29ZU2w5WTJGMFkyZ29hQ2w3Y21WMGRYSnVJVEY5ZlZ4dWRtRnlJR005WENKbGN6TmNJaXhrUFh0bGN6TTZJVEY5TEdVOUlURXNaajFuYjI5bkxtZHNiMkpoYkM1dVlYWnBaMkYwYjNJbUptZHZiMmN1WjJ4dlltRnNMbTVoZG1sbllYUnZjaTUxYzJWeVFXZGxiblEvWjI5dlp5NW5iRzlpWVd3dWJtRjJhV2RoZEc5eUxuVnpaWEpCWjJWdWREcGNJbHdpTzJFb1hDSmxjelZjSWl4bWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCaUtGd2lXekVzWFM1c1pXNW5kR2c5UFRGY0lpbDlLVHRoS0Z3aVpYTTJYQ0lzWm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWmk1dFlYUmphQ2d2UldSblpWeGNMeWhjWEdRcktTaGNYQzVjWEdRcEtpOXBLVDhoTVRwaUtDY29LQ2s5UG50Y0luVnpaU0J6ZEhKcFkzUmNJanRqYkdGemN5QlllMk52Ym5OMGNuVmpkRzl5S0NsN2FXWW9ibVYzTG5SaGNtZGxkQ0U5VTNSeWFXNW5LWFJvY205M0lERTdkR2hwY3k1NFBUUXlmWDFzWlhRZ2NUMVNaV1pzWldOMExtTnZibk4wY25WamRDaFlMRnRkTEZOMGNtbHVaeWs3YVdZb2NTNTRJVDAwTW54OElTaHhJR2x1YzNSaGJtTmxiMllnVTNSeWFXNW5LU2wwYUhKdmR5QXhPMlp2Y2loamIyNXpkQ0JoSUc5bVd6SXNNMTBwZTJsbUtHRTlQVElwWTI5dWRHbHVkV1U3Wm5WdVkzUnBiMjRnWmloNlBYdGhmU2w3YkdWMElHRTlNRHR5WlhSMWNtNGdlaTVoZlh0bWRXNWpkR2x2YmlCbUtDbDdjbVYwZFhKdUlEQTdmWDF5WlhSMWNtNGdaaWdwUFQwemZYMHBLQ2tuS1gwcE8xeHVZU2hjSW1Wek4xd2lMR1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR0lvWENJeUlDb3FJRElnUFQwZ05Gd2lLWDBwTzJFb1hDSmxjemhjSWl4bWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCaUtGd2lZWE41Ym1NZ0tDa2dQVDRnTVN3Z2RISjFaVndpS1gwcE8yRW9YQ0psY3psY0lpeG1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQmlLRndpS0hzdUxpNXlaWE4wZlNBOUlIdDlLU3dnZEhKMVpWd2lLWDBwTzJFb1hDSmxjMTl1WlhoMFhDSXNablZ1WTNScGIyNG9LWHR5WlhSMWNtNGhNWDBwTzNKbGRIVnlibnQwWVhKblpYUTZZeXh0WVhBNlpIMTlMR2R2YjJjdVZISmhibk53YVd4bGNpNXdjbTkwYjNSNWNHVXVibVZsWkhOVWNtRnVjM0JwYkdVOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmloY0ltRnNkMkY1YzF3aVBUMW5iMjluTGxSU1FVNVRVRWxNUlNseVpYUjFjbTRoTUR0cFppaGNJbTVsZG1WeVhDSTlQV2R2YjJjdVZGSkJUbE5RU1V4RktYSmxkSFZ5YmlFeE8ybG1LQ0YwYUdsekxuSmxjWFZwY21WelZISmhibk53YVd4aGRHbHZibDhwZTNaaGNpQmpQWFJvYVhNdVkzSmxZWFJsVW1WeGRXbHlaWE5VY21GdWMzQnBiR0YwYVc5dVh5Z3BPM1JvYVhNdWNtVnhkV2x5WlhOVWNtRnVjM0JwYkdGMGFXOXVYejFqTG0xaGNEdDBhR2x6TG5SeVlXNXpjR2xzWVhScGIyNVVZWEpuWlhSZlBYUm9hWE11ZEhKaGJuTndhV3hoZEdsdmJsUmhjbWRsZEY5OGZGeHVZeTUwWVhKblpYUjlhV1lvWVNCcGJpQjBhR2x6TG5KbGNYVnBjbVZ6VkhKaGJuTndhV3hoZEdsdmJsOHBjbVYwZFhKdUlIUm9hWE11Y21WeGRXbHlaWE5VY21GdWMzQnBiR0YwYVc5dVgxdGhYVDhoTURvaFoyOXZaeTVwYmtoMGJXeEViMk4xYldWdWRGOG9LWHg4WENKbGN6WmNJaUU5WW54OFhDSnViMDF2WkhWc1pWd2lhVzRnWjI5dlp5NW5iRzlpWVd3dVpHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2hjSW5OamNtbHdkRndpS1Q4aE1Ub2hNRHQwYUhKdmR5QkZjbkp2Y2loY0lsVnVhMjV2ZDI0Z2JHRnVaM1ZoWjJVZ2JXOWtaVG9nWENJcllTazdmU3huYjI5bkxsUnlZVzV6Y0dsc1pYSXVjSEp2ZEc5MGVYQmxMblJ5WVc1emNHbHNaVDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCbmIyOW5MblJ5WVc1emNHbHNaVjhvWVN4aUxIUm9hWE11ZEhKaGJuTndhV3hoZEdsdmJsUmhjbWRsZEY4cGZTeG5iMjluTG5SeVlXNXpjR2xzWlhKZlBXNWxkeUJuYjI5bkxsUnlZVzV6Y0dsc1pYSXNaMjl2Wnk1d2NtOTBaV04wVTJOeWFYQjBWR0ZuWHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTNXlaWEJzWVdObEtDODhYRnd2S0ZORFVrbFFWQ2t2YVdjc1hDSmNYRnhjZUROakx5UXhYQ0lwZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHoxbWRXNWpkR2x2YmlncGUzUm9hWE11WkdWd1pXNWtaVzVqYVdWelh6MTdmVHRjYm5Sb2FYTXVhV1JVYjFCaGRHaGZQWHQ5TzNSb2FYTXVkM0pwZEhSbGJsODllMzA3ZEdocGN5NXNiMkZrYVc1blJHVndjMTg5VzEwN2RHaHBjeTVrWlhCelZHOU1iMkZrWHoxYlhUdDBhR2x6TG5CaGRYTmxaRjg5SVRFN2RHaHBjeTVtWVdOMGIzSjVYejF1WlhjZ1oyOXZaeTVFWlhCbGJtUmxibU41Um1GamRHOXllU2huYjI5bkxuUnlZVzV6Y0dsc1pYSmZLVHQwYUdsekxtUmxabVZ5Y21Wa1EyRnNiR0poWTJ0elh6MTdmVHQwYUdsekxtUmxabVZ5Y21Wa1VYVmxkV1ZmUFZ0ZGZTeG5iMjluTGtSbFluVm5URzloWkdWeVh5NXdjbTkwYjNSNWNHVXVZbTl2ZEhOMGNtRndQV1oxYm1OMGFXOXVLR0VzWWlsN1puVnVZM1JwYjI0Z1l5Z3BlMlFtSmlobmIyOW5MbWRzYjJKaGJDNXpaWFJVYVcxbGIzVjBLR1FzTUNrc1pEMXVkV3hzS1gxMllYSWdaRDFpTzJsbUtHRXViR1Z1WjNSb0tYdGlQVnRkTzJadmNpaDJZWElnWlQwd08yVThZUzVzWlc1bmRHZzdaU3NyS1h0MllYSWdaajEwYUdsekxtZGxkRkJoZEdoR2NtOXRSR1Z3YzE4b1lWdGxYU2s3YVdZb0lXWXBkR2h5YjNjZ1JYSnliM0lvWENKVmJuSmxaMjl1YVhwbFpDQnVZVzFsYzNCaFkyVTZJRndpSzJGYlpWMHBPMkl1Y0hWemFDaDBhR2x6TG1SbGNHVnVaR1Z1WTJsbGMxOWJabDBwZldZOVoyOXZaeTV5WlhGMWFYSmxPM1poY2lCblBUQTdabTl5S0dVOVhHNHdPMlU4WVM1c1pXNW5kR2c3WlNzcktXWW9ZVnRsWFNrc1lsdGxYUzV2Ymt4dllXUW9ablZ1WTNScGIyNG9LWHNySzJjOVBXRXViR1Z1WjNSb0ppWmpLQ2w5S1gxbGJITmxJR01vS1gwc1oyOXZaeTVFWldKMVoweHZZV1JsY2w4dWNISnZkRzkwZVhCbExteHZZV1JEYkc5emRYSmxSR1Z3Y3oxbWRXNWpkR2x2YmlncGUzUm9hWE11WkdWd2MxUnZURzloWkY4dWNIVnphQ2gwYUdsekxtWmhZM1J2Y25sZkxtTnlaV0YwWlVSbGNHVnVaR1Z1WTNrb1oyOXZaeTV1YjNKdFlXeHBlbVZRWVhSb1h5aG5iMjluTG1KaGMyVlFZWFJvSzF3aVpHVndjeTVxYzF3aUtTeGNJbVJsY0hNdWFuTmNJaXhiWFN4YlhTeDdmU3doTVNrcE8zUm9hWE11Ykc5aFpFUmxjSE5mS0NsOUxHZHZiMmN1UkdWaWRXZE1iMkZrWlhKZkxuQnliM1J2ZEhsd1pTNXlaWEYxWlhOMFpXUTlablZ1WTNScGIyNG9ZU3hpS1hzb1lUMTBhR2x6TG1kbGRGQmhkR2hHY205dFJHVndjMThvWVNrcEppWW9Zbng4ZEdocGN5NWhjbVZFWlhCelRHOWhaR1ZrWHloMGFHbHpMbVJsY0dWdVpHVnVZMmxsYzE5YllWMHVjbVZ4ZFdseVpYTXBLU1ltS0dJOWRHaHBjeTVrWldabGNuSmxaRU5oYkd4aVlXTnJjMTliWVYwcEppWW9aR1ZzWlhSbElIUm9hWE11WkdWbVpYSnlaV1JEWVd4c1ltRmphM05mVzJGZExHSW9LU2w5TEdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTG5CeWIzUnZkSGx3WlM1elpYUkVaWEJsYm1SbGJtTjVSbUZqZEc5eWVUMWNibVoxYm1OMGFXOXVLR0VwZTNSb2FYTXVabUZqZEc5eWVWODlZWDBzWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1Y0hKdmRHOTBlWEJsTG14dllXUmZQV1oxYm1OMGFXOXVLR0VwZTJsbUtIUm9hWE11WjJWMFVHRjBhRVp5YjIxRVpYQnpYeWhoS1NsN2RtRnlJR0k5ZEdocGN5eGpQVnRkTEdROVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdVOVlpNW5aWFJRWVhSb1JuSnZiVVJsY0hOZktHRXBPMmxtS0NGbEtYUm9jbTkzSUVWeWNtOXlLRndpUW1Ga0lHUmxjR1Z1WkdWdVkza2djR0YwYUNCdmNpQnplVzFpYjJ3NklGd2lLMkVwTzJsbUtDRmlMbmR5YVhSMFpXNWZXMlZkS1h0aUxuZHlhWFIwWlc1ZlcyVmRQU0V3TzJFOVlpNWtaWEJsYm1SbGJtTnBaWE5mVzJWZE8yWnZjaWhsUFRBN1pUeGhMbkpsY1hWcGNtVnpMbXhsYm1kMGFEdGxLeXNwWjI5dlp5NXBjMUJ5YjNacFpHVmtYeWhoTG5KbGNYVnBjbVZ6VzJWZEtYeDhaQ2hoTG5KbGNYVnBjbVZ6VzJWZEtUdGpMbkIxYzJnb1lTbDlmVHRrS0dFcE8yRTlJU0YwYUdsekxtUmxjSE5VYjB4dllXUmZMbXhsYm1kMGFEdDBhR2x6TG1SbGNITlViMHh2WVdSZlBYUm9hWE11WkdWd2MxUnZURzloWkY4dVkyOXVZMkYwS0dNcE8zUm9hWE11Y0dGMWMyVmtYM3g4WVh4OGRHaHBjeTVzYjJGa1JHVndjMThvS1gxbGJITmxJSFJvY205M0lHRTlYQ0puYjI5bkxuSmxjWFZwY21VZ1kyOTFiR1FnYm05MElHWnBibVE2SUZ3aUsxeHVZU3huYjI5bkxteHZaMVJ2UTI5dWMyOXNaVjhvWVNrc1JYSnliM0lvWVNrN2ZTeG5iMjluTGtSbFluVm5URzloWkdWeVh5NXdjbTkwYjNSNWNHVXViRzloWkVSbGNITmZQV1oxYm1OMGFXOXVLQ2w3Wm05eUtIWmhjaUJoUFhSb2FYTXNZajEwYUdsekxuQmhkWE5sWkY4N2RHaHBjeTVrWlhCelZHOU1iMkZrWHk1c1pXNW5kR2dtSmlGaU95a29ablZ1WTNScGIyNG9LWHQyWVhJZ1l6MGhNU3hrUFdFdVpHVndjMVJ2VEc5aFpGOHVjMmhwWm5Rb0tTeGxQU0V4TzJFdWJHOWhaR2x1WjE4b1pDazdkbUZ5SUdZOWUzQmhkWE5sT21aMWJtTjBhVzl1S0NsN2FXWW9ZeWwwYUhKdmR5QkZjbkp2Y2loY0lrTmhibTV2ZENCallXeHNJSEJoZFhObElHRm1kR1Z5SUhSb1pTQmpZV3hzSUhSdklHeHZZV1F1WENJcE8ySTlJVEI5TEhKbGMzVnRaVHBtZFc1amRHbHZiaWdwZTJNL1lTNXlaWE4xYldWZktDazZZajBoTVgwc2JHOWhaR1ZrT21aMWJtTjBhVzl1S0NsN2FXWW9aU2wwYUhKdmR5QkZjbkp2Y2loY0lrUnZkV0pzWlNCallXeHNJSFJ2SUd4dllXUmxaQzVjSWlrN1pUMGhNRHRoTG14dllXUmxaRjhvWkNsOUxIQmxibVJwYm1jNlpuVnVZM1JwYjI0b0tYdG1iM0lvZG1GeUlHSTlXMTBzWXowd08yTThZUzVzYjJGa2FXNW5SR1Z3YzE4dWJHVnVaM1JvTzJNckt5bGlMbkIxYzJnb1lTNXNiMkZrYVc1blJHVndjMTliWTEwcE8xeHVjbVYwZFhKdUlHSjlMSE5sZEUxdlpIVnNaVk4wWVhSbE9tWjFibU4wYVc5dUtHRXBlMmR2YjJjdWJXOWtkV3hsVEc5aFpHVnlVM1JoZEdWZlBYdDBlWEJsT21Fc2JXOWtkV3hsVG1GdFpUcGNJbHdpTEdSbFkyeGhjbVZNWldkaFkzbE9ZVzFsYzNCaFkyVTZJVEY5ZlN4eVpXZHBjM1JsY2tWek5rMXZaSFZzWlVWNGNHOXlkSE02Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMk1tSmlobmIyOW5MbXh2WVdSbFpFMXZaSFZzWlhOZlcyTmRQWHRsZUhCdmNuUnpPbUlzZEhsd1pUcG5iMjluTGsxdlpIVnNaVlI1Y0dVdVJWTTJMRzF2WkhWc1pVbGtPbU44ZkZ3aVhDSjlLWDBzY21WbmFYTjBaWEpIYjI5blRXOWtkV3hsUlhod2IzSjBjenBtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Ykc5aFpHVmtUVzlrZFd4bGMxOWJZVjA5ZTJWNGNHOXlkSE02WWl4MGVYQmxPbWR2YjJjdVRXOWtkV3hsVkhsd1pTNUhUMDlITEcxdlpIVnNaVWxrT21GOWZTeGpiR1ZoY2sxdlpIVnNaVk4wWVhSbE9tWjFibU4wYVc5dUtDbDdaMjl2Wnk1dGIyUjFiR1ZNYjJGa1pYSlRkR0YwWlY4OWJuVnNiSDBzWkdWbVpYSTZablZ1WTNScGIyNG9ZaWw3YVdZb1l5bDBhSEp2ZHlCRmNuSnZjaWhjSWtOaGJtNXZkQ0J5WldkcGMzUmxjaUIzYVhSb0lHUmxabVZ5SUdGbWRHVnlJSFJvWlNCallXeHNJSFJ2SUd4dllXUXVYQ0lwTzJFdVpHVm1aWEpmS0dRc1hHNWlLWDBzWVhKbFJHVndjMHh2WVdSbFpEcG1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQmhMbUZ5WlVSbGNITk1iMkZrWldSZktHUXVjbVZ4ZFdseVpYTXBmWDA3ZEhKNWUyUXViRzloWkNobUtYMW1hVzVoYkd4NWUyTTlJVEI5ZlNrb0tUdGlKaVowYUdsekxuQmhkWE5sWHlncGZTeG5iMjluTGtSbFluVm5URzloWkdWeVh5NXdjbTkwYjNSNWNHVXVjR0YxYzJWZlBXWjFibU4wYVc5dUtDbDdkR2hwY3k1d1lYVnpaV1JmUFNFd2ZTeG5iMjluTGtSbFluVm5URzloWkdWeVh5NXdjbTkwYjNSNWNHVXVjbVZ6ZFcxbFh6MW1kVzVqZEdsdmJpZ3BlM1JvYVhNdWNHRjFjMlZrWHlZbUtIUm9hWE11Y0dGMWMyVmtYejBoTVN4MGFHbHpMbXh2WVdSRVpYQnpYeWdwS1gwc1oyOXZaeTVFWldKMVoweHZZV1JsY2w4dWNISnZkRzkwZVhCbExteHZZV1JwYm1kZlBXWjFibU4wYVc5dUtHRXBlM1JvYVhNdWJHOWhaR2x1WjBSbGNITmZMbkIxYzJnb1lTbDlMR2R2YjJjdVJHVmlkV2RNYjJGa1pYSmZMbkJ5YjNSdmRIbHdaUzVzYjJGa1pXUmZQV1oxYm1OMGFXOXVLR0VwZTJadmNpaDJZWElnWWowd08ySThkR2hwY3k1c2IyRmthVzVuUkdWd2MxOHViR1Z1WjNSb08ySXJLeWxwWmloMGFHbHpMbXh2WVdScGJtZEVaWEJ6WDF0aVhUMDlZU2w3ZEdocGN5NXNiMkZrYVc1blJHVndjMTh1YzNCc2FXTmxLR0lzTVNrN1hHNWljbVZoYTMxbWIzSW9ZajB3TzJJOGRHaHBjeTVrWldabGNuSmxaRkYxWlhWbFh5NXNaVzVuZEdnN1lpc3JLV2xtS0hSb2FYTXVaR1ZtWlhKeVpXUlJkV1YxWlY5YllsMDlQV0V1Y0dGMGFDbDdkR2hwY3k1a1pXWmxjbkpsWkZGMVpYVmxYeTV6Y0d4cFkyVW9ZaXd4S1R0aWNtVmhhMzFwWmloMGFHbHpMbXh2WVdScGJtZEVaWEJ6WHk1c1pXNW5kR2c5UFhSb2FYTXVaR1ZtWlhKeVpXUlJkV1YxWlY4dWJHVnVaM1JvSmlZaGRHaHBjeTVrWlhCelZHOU1iMkZrWHk1c1pXNW5kR2dwWm05eUtEdDBhR2x6TG1SbFptVnljbVZrVVhWbGRXVmZMbXhsYm1kMGFEc3BkR2hwY3k1eVpYRjFaWE4wWldRb2RHaHBjeTVrWldabGNuSmxaRkYxWlhWbFh5NXphR2xtZENncExDRXdLVHRoTG14dllXUmxaQ2dwZlN4bmIyOW5Ma1JsWW5WblRHOWhaR1Z5WHk1d2NtOTBiM1I1Y0dVdVlYSmxSR1Z3YzB4dllXUmxaRjg5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLSFpoY2lCaVBUQTdZanhoTG14bGJtZDBhRHRpS3lzcGUzWmhjaUJqUFhSb2FYTXVaMlYwVUdGMGFFWnliMjFFWlhCelh5aGhXMkpkS1R0cFppZ2hZM3g4SVNoaklHbHVJSFJvYVhNdVpHVm1aWEp5WldSRFlXeHNZbUZqYTNOZmZIeG5iMjluTG1selVISnZkbWxrWldSZktHRmJZbDBwS1NseVpYUjFjbTRoTVgxeVpYUjFjbTRoTUgwc1oyOXZaeTVFWldKMVoweHZZV1JsY2w4dWNISnZkRzkwZVhCbExtZGxkRkJoZEdoR2NtOXRSR1Z3YzE4OVhHNW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZU0JwYmlCMGFHbHpMbWxrVkc5UVlYUm9YejkwYUdsekxtbGtWRzlRWVhSb1gxdGhYVHBoSUdsdUlIUm9hWE11WkdWd1pXNWtaVzVqYVdWelh6OWhPbTUxYkd4OUxHZHZiMmN1UkdWaWRXZE1iMkZrWlhKZkxuQnliM1J2ZEhsd1pTNWtaV1psY2w4OVpuVnVZM1JwYjI0b1lTeGlLWHQwYUdsekxtUmxabVZ5Y21Wa1EyRnNiR0poWTJ0elgxdGhMbkJoZEdoZFBXSTdkR2hwY3k1a1pXWmxjbkpsWkZGMVpYVmxYeTV3ZFhOb0tHRXVjR0YwYUNsOUxHZHZiMmN1VEc5aFpFTnZiblJ5YjJ4c1pYSTlablZ1WTNScGIyNG9LWHQ5TEdkdmIyY3VURzloWkVOdmJuUnliMnhzWlhJdWNISnZkRzkwZVhCbExuQmhkWE5sUFdaMWJtTjBhVzl1S0NsN2ZTeG5iMjluTGt4dllXUkRiMjUwY205c2JHVnlMbkJ5YjNSdmRIbHdaUzV5WlhOMWJXVTlablZ1WTNScGIyNG9LWHQ5TEdkdmIyY3VURzloWkVOdmJuUnliMnhzWlhJdWNISnZkRzkwZVhCbExteHZZV1JsWkQxbWRXNWpkR2x2YmlncGUzMHNaMjl2Wnk1TWIyRmtRMjl1ZEhKdmJHeGxjaTV3Y205MGIzUjVjR1V1Y0dWdVpHbHVaejFtZFc1amRHbHZiaWdwZTMwc1oyOXZaeTVNYjJGa1EyOXVkSEp2Ykd4bGNpNXdjbTkwYjNSNWNHVXVjbVZuYVhOMFpYSkZjelpOYjJSMWJHVkZlSEJ2Y25SelBXWjFibU4wYVc5dUtHRXNYRzVpTEdNcGUzMHNaMjl2Wnk1TWIyRmtRMjl1ZEhKdmJHeGxjaTV3Y205MGIzUjVjR1V1YzJWMFRXOWtkV3hsVTNSaGRHVTlablZ1WTNScGIyNG9ZU2w3ZlN4bmIyOW5Ma3h2WVdSRGIyNTBjbTlzYkdWeUxuQnliM1J2ZEhsd1pTNWpiR1ZoY2sxdlpIVnNaVk4wWVhSbFBXWjFibU4wYVc5dUtDbDdmU3huYjI5bkxreHZZV1JEYjI1MGNtOXNiR1Z5TG5CeWIzUnZkSGx3WlM1a1pXWmxjajFtZFc1amRHbHZiaWhoS1h0OUxHZHZiMmN1VEc5aFpFTnZiblJ5YjJ4c1pYSXVjSEp2ZEc5MGVYQmxMbUZ5WlVSbGNITk1iMkZrWldROVpuVnVZM1JwYjI0b0tYdDlMR2R2YjJjdVJHVndaVzVrWlc1amVUMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0xHVXBlM1JvYVhNdWNHRjBhRDFoTzNSb2FYTXVjbVZzWVhScGRtVlFZWFJvUFdJN2RHaHBjeTV3Y205MmFXUmxjejFqTzNSb2FYTXVjbVZ4ZFdseVpYTTlaRHQwYUdsekxteHZZV1JHYkdGbmN6MWxPM1JvYVhNdWJHOWhaR1ZrWHowaE1UdDBhR2x6TG14dllXUkRZV3hzWW1GamEzTmZQVnRkZlN4bmIyOW5Ma1JsY0dWdVpHVnVZM2t1Y0hKdmRHOTBlWEJsTG1kbGRGQmhkR2hPWVcxbFBXWjFibU4wYVc5dUtDbDdkbUZ5SUdFOWRHaHBjeTV3WVhSb0xHSTlZUzVwYm1SbGVFOW1LRndpT2k4dlhDSXBPekE4UFdJbUppaGhQV0V1YzNWaWMzUnlhVzVuS0dJck15a3NZajFjYm1FdWFXNWtaWGhQWmloY0lpOWNJaWtzTUR3OVlpWW1LR0U5WVM1emRXSnpkSEpwYm1jb1lpc3hLU2twTzNKbGRIVnliaUJoZlN4bmIyOW5Ma1JsY0dWdVpHVnVZM2t1Y0hKdmRHOTBlWEJsTG05dVRHOWhaRDFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbXh2WVdSbFpGOC9ZU2dwT25Sb2FYTXViRzloWkVOaGJHeGlZV05yYzE4dWNIVnphQ2hoS1gwc1oyOXZaeTVFWlhCbGJtUmxibU41TG5CeWIzUnZkSGx3WlM1c2IyRmtaV1E5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbXh2WVdSbFpGODlJVEE3ZG1GeUlHRTlkR2hwY3k1c2IyRmtRMkZzYkdKaFkydHpYenQwYUdsekxteHZZV1JEWVd4c1ltRmphM05mUFZ0ZE8yWnZjaWgyWVhJZ1lqMHdPMkk4WVM1c1pXNW5kR2c3WWlzcktXRmJZbDBvS1gwc1oyOXZaeTVFWlhCbGJtUmxibU41TG1SbFptVnlYejBoTVN4bmIyOW5Ma1JsY0dWdVpHVnVZM2t1WTJGc2JHSmhZMnROWVhCZlBYdDlMR2R2YjJjdVJHVndaVzVrWlc1amVTNXlaV2RwYzNSbGNrTmhiR3hpWVdOclh6MW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMU5ZWFJvTG5KaGJtUnZiU2dwTG5SdlUzUnlhVzVuS0RNeUtUdG5iMjluTGtSbGNHVnVaR1Z1WTNrdVkyRnNiR0poWTJ0TllYQmZXMkpkUFdFN2NtVjBkWEp1SUdKOUxHZHZiMmN1UkdWd1pXNWtaVzVqZVM1MWJuSmxaMmx6ZEdWeVEyRnNiR0poWTJ0ZlBWeHVablZ1WTNScGIyNG9ZU2w3WkdWc1pYUmxJR2R2YjJjdVJHVndaVzVrWlc1amVTNWpZV3hzWW1GamEwMWhjRjliWVYxOUxHZHZiMmN1UkdWd1pXNWtaVzVqZVM1allXeHNZbUZqYTE4OVpuVnVZM1JwYjI0b1lTeGlLWHRwWmloaElHbHVJR2R2YjJjdVJHVndaVzVrWlc1amVTNWpZV3hzWW1GamEwMWhjRjhwZTJadmNpaDJZWElnWXoxbmIyOW5Ma1JsY0dWdVpHVnVZM2t1WTJGc2JHSmhZMnROWVhCZlcyRmRMR1E5VzEwc1pUMHhPMlU4WVhKbmRXMWxiblJ6TG14bGJtZDBhRHRsS3lzcFpDNXdkWE5vS0dGeVozVnRaVzUwYzF0bFhTazdZeTVoY0hCc2VTaDJiMmxrSURBc1pDbDlaV3h6WlNCMGFISnZkeUJGY25KdmNpaGNJa05oYkd4aVlXTnJJR3RsZVNCY0lpdGhLMXdpSUdSdlpYTWdibTkwSUdWNGFYTjBJQ2gzWVhNZ1ltRnpaUzVxY3lCc2IyRmtaV1FnYlc5eVpTQjBhR0Z1SUc5dVkyVS9LUzVjSWlrN2ZTeG5iMjluTGtSbGNHVnVaR1Z1WTNrdWNISnZkRzkwZVhCbExteHZZV1E5Wm5WdVkzUnBiMjRvWVNsN2FXWW9aMjl2Wnk1bmJHOWlZV3d1UTB4UFUxVlNSVjlKVFZCUFVsUmZVME5TU1ZCVUtXZHZiMmN1WjJ4dlltRnNMa05NVDFOVlVrVmZTVTFRVDFKVVgxTkRVa2xRVkNoMGFHbHpMbkJoZEdncFAyRXViRzloWkdWa0tDazZZUzV3WVhWelpTZ3BPMlZzYzJVZ2FXWW9aMjl2Wnk1cGJraDBiV3hFYjJOMWJXVnVkRjhvS1NsN2RtRnlJR0k5WEc1bmIyOW5MbWRzYjJKaGJDNWtiMk4xYldWdWREdHBaaWhjSW1OdmJYQnNaWFJsWENJOVBXSXVjbVZoWkhsVGRHRjBaU1ltSVdkdmIyY3VSVTVCUWt4RlgwTklVazlOUlY5QlVGQmZVMEZHUlY5VFExSkpVRlJmVEU5QlJFbE9SeWw3YVdZb0wxeGNZbVJsY0hNdWFuTWtMeTUwWlhOMEtIUm9hWE11Y0dGMGFDa3BlMkV1Ykc5aFpHVmtLQ2s3Y21WMGRYSnVmWFJvY205M0lFVnljbTl5S0NkRFlXNXViM1FnZDNKcGRHVWdYQ0luSzNSb2FYTXVjR0YwYUNzblhDSWdZV1owWlhJZ1pHOWpkVzFsYm5RZ2JHOWhaQ2NwTzMxcFppZ2haMjl2Wnk1RlRrRkNURVZmUTBoU1QwMUZYMEZRVUY5VFFVWkZYMU5EVWtsUVZGOU1UMEZFU1U1SEppWm5iMjluTG1selJHOWpkVzFsYm5STWIyRmthVzVuWHlncEtYdDJZWElnWXoxbmIyOW5Ma1JsY0dWdVpHVnVZM2t1Y21WbmFYTjBaWEpEWVd4c1ltRmphMThvWm5WdVkzUnBiMjRvWWlsN1oyOXZaeTVFWldKMVoweHZZV1JsY2w4dVNWTmZUMHhFWDBsRlh5WW1YQ0pqYjIxd2JHVjBaVndpSVQxaUxuSmxZV1I1VTNSaGRHVjhmQ2huYjI5bkxrUmxjR1Z1WkdWdVkza3VkVzV5WldkcGMzUmxja05oYkd4aVlXTnJYeWhqS1N4aExteHZZV1JsWkNncEtYMHBMR1E5SVdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTGtsVFgwOU1SRjlKUlY4bUptZHZiMmN1WjJWMFUyTnlhWEIwVG05dVkyVW9LVDljYmljZ2JtOXVZMlU5WENJbksyZHZiMmN1WjJWMFUyTnlhWEIwVG05dVkyVW9LU3NuWENJbk9sd2lYQ0k3WkQwblBITmpjbWx3ZENCemNtTTlYQ0luSzNSb2FYTXVjR0YwYUNzblhDSWdKeXNvWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1U1ZOZlQweEVYMGxGWHo5Y0ltOXVjbVZoWkhsemRHRjBaV05vWVc1blpWd2lPbHdpYjI1c2IyRmtYQ0lwSzF3aVBWeGNYQ0puYjI5bkxrUmxjR1Z1WkdWdVkza3VZMkZzYkdKaFkydGZLQ2RjSWl0akt5ZGNYQ2NzSUhSb2FYTXBYQ0lnZEhsd1pUMWNJblJsZUhRdmFtRjJZWE5qY21sd2RGd2lJQ2NyS0dkdmIyY3VSR1Z3Wlc1a1pXNWplUzVrWldabGNsOC9YQ0prWldabGNsd2lPbHdpWENJcEsyUXJYQ0krWEZ4NE0yTXZjMk55YVhCMFBsd2lPMkl1ZDNKcGRHVW9aMjl2Wnk1VVVsVlRWRVZFWDFSWlVFVlRYMUJQVEVsRFdWOC9aMjl2Wnk1VVVsVlRWRVZFWDFSWlVFVlRYMUJQVEVsRFdWOHVZM0psWVhSbFNGUk5UQ2hrS1Rwa0tYMWxiSE5sZTNaaGNpQmxQV0l1WTNKbFlYUmxSV3hsYldWdWRDaGNJbk5qY21sd2RGd2lLVHRsTG1SbFptVnlQV2R2YjJjdVJHVndaVzVrWlc1amVTNWtaV1psY2w4N1pTNWhjM2x1WXowaE1UdGxMblI1Y0dVOVhDSjBaWGgwTDJwaGRtRnpZM0pwY0hSY0lqc29aRDFuYjI5bkxtZGxkRk5qY21sd2RFNXZibU5sS0NrcEppWmxMbk5sZEVGMGRISnBZblYwWlNoY0ltNXZibU5sWENJc1pDazdaMjl2Wnk1RVpXSjFaMHh2WVdSbGNsOHVTVk5mVDB4RVgwbEZYejljYmloaExuQmhkWE5sS0Nrc1pTNXZibkpsWVdSNWMzUmhkR1ZqYUdGdVoyVTlablZ1WTNScGIyNG9LWHRwWmloY0lteHZZV1JsWkZ3aVBUMWxMbkpsWVdSNVUzUmhkR1Y4ZkZ3aVkyOXRjR3hsZEdWY0lqMDlaUzV5WldGa2VWTjBZWFJsS1dFdWJHOWhaR1ZrS0Nrc1lTNXlaWE4xYldVb0tYMHBPbVV1YjI1c2IyRmtQV1oxYm1OMGFXOXVLQ2w3WlM1dmJteHZZV1E5Ym5Wc2JEdGhMbXh2WVdSbFpDZ3BmVHRsTG5OeVl6MW5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlh6OW5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlh5NWpjbVZoZEdWVFkzSnBjSFJWVWt3b2RHaHBjeTV3WVhSb0tUcDBhR2x6TG5CaGRHZzdZaTVvWldGa0xtRndjR1Z1WkVOb2FXeGtLR1VwZlgxbGJITmxJR2R2YjJjdWJHOW5WRzlEYjI1emIyeGxYeWhjSWtOaGJtNXZkQ0IxYzJVZ1pHVm1ZWFZzZENCa1pXSjFaeUJzYjJGa1pYSWdiM1YwYzJsa1pTQnZaaUJJVkUxTUlHUnZZM1Z0Wlc1MGN5NWNJaWtzWENKa1pYQnpMbXB6WENJOVBYUm9hWE11Y21Wc1lYUnBkbVZRWVhSb1B5aG5iMjluTG14dloxUnZRMjl1YzI5c1pWOG9YQ0pEYjI1emFXUmxjaUJ6WlhSMGFXNW5JRU5NVDFOVlVrVmZTVTFRVDFKVVgxTkRVa2xRVkNCaVpXWnZjbVVnYkc5aFpHbHVaeUJpWVhObExtcHpMQ0J2Y2lCelpYUjBhVzVuSUVOTVQxTlZVa1ZmVGs5ZlJFVlFVeUIwYnlCMGNuVmxMbHdpS1N4Y2JtRXViRzloWkdWa0tDa3BPbUV1Y0dGMWMyVW9LWDBzWjI5dlp5NUZjelpOYjJSMWJHVkVaWEJsYm1SbGJtTjVQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXNaU2w3WjI5dlp5NUVaWEJsYm1SbGJtTjVMbU5oYkd3b2RHaHBjeXhoTEdJc1l5eGtMR1VwZlN4bmIyOW5MbWx1YUdWeWFYUnpLR2R2YjJjdVJYTTJUVzlrZFd4bFJHVndaVzVrWlc1amVTeG5iMjluTGtSbGNHVnVaR1Z1WTNrcExHZHZiMmN1UlhNMlRXOWtkV3hsUkdWd1pXNWtaVzVqZVM1d2NtOTBiM1I1Y0dVdWJHOWhaRDFtZFc1amRHbHZiaWhoS1h0bWRXNWpkR2x2YmlCaUtHRXNZaWw3WVQxaVB5YzhjMk55YVhCMElIUjVjR1U5WENKdGIyUjFiR1ZjSWlCamNtOXpjMjl5YVdkcGJqNG5LMklyWENKY1hIZ3pZeTl6WTNKcGNIUStYQ0k2Snp4elkzSnBjSFFnZEhsd1pUMWNJbTF2WkhWc1pWd2lJR055YjNOemIzSnBaMmx1SUhOeVl6MWNJaWNyWVNzblhDSStYRng0TTJNdmMyTnlhWEIwUGljN1pDNTNjbWwwWlNobmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHo5bmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHk1amNtVmhkR1ZJVkUxTUtHRXBPbUVwZldaMWJtTjBhVzl1SUdNb1lTeGlLWHQyWVhJZ1l6MWtMbU55WldGMFpVVnNaVzFsYm5Rb1hDSnpZM0pwY0hSY0lpazdZeTVrWldabGNqMGhNRHRqTG1GemVXNWpQU0V4TzJNdWRIbHdaVDFjYmx3aWJXOWtkV3hsWENJN1l5NXpaWFJCZEhSeWFXSjFkR1VvWENKamNtOXpjMjl5YVdkcGJsd2lMQ0V3S1R0MllYSWdaVDFuYjI5bkxtZGxkRk5qY21sd2RFNXZibU5sS0NrN1pTWW1ZeTV6WlhSQmRIUnlhV0oxZEdVb1hDSnViMjVqWlZ3aUxHVXBPMkkvWXk1MFpYaDBRMjl1ZEdWdWREMW5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlh6OW5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlh5NWpjbVZoZEdWVFkzSnBjSFFvWWlrNllqcGpMbk55WXoxbmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHo5bmIyOW5MbFJTVlZOVVJVUmZWRmxRUlZOZlVFOU1TVU5aWHk1amNtVmhkR1ZUWTNKcGNIUlZVa3dvWVNrNllUdGtMbWhsWVdRdVlYQndaVzVrUTJocGJHUW9ZeWw5YVdZb1oyOXZaeTVuYkc5aVlXd3VRMHhQVTFWU1JWOUpUVkJQVWxSZlUwTlNTVkJVS1dkdmIyY3VaMnh2WW1Gc0xrTk1UMU5WVWtWZlNVMVFUMUpVWDFORFVrbFFWQ2gwYUdsekxuQmhkR2dwUDJFdWJHOWhaR1ZrS0NrNllTNXdZWFZ6WlNncE8yVnNjMlVnYVdZb1oyOXZaeTVwYmtoMGJXeEViMk4xYldWdWRGOG9LU2w3ZG1GeUlHUTlaMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblFzWlQxMGFHbHpPMmxtS0dkdmIyY3VhWE5FYjJOMWJXVnVkRXh2WVdScGJtZGZLQ2twZTNaaGNpQm1QV0k3WjI5dlp5NUVaWEJsYm1SbGJtTjVMbVJsWm1WeVh6MWNiaUV3ZldWc2MyVWdaajFqTzNaaGNpQm5QV2R2YjJjdVJHVndaVzVrWlc1amVTNXlaV2RwYzNSbGNrTmhiR3hpWVdOclh5aG1kVzVqZEdsdmJpZ3BlMmR2YjJjdVJHVndaVzVrWlc1amVTNTFibkpsWjJsemRHVnlRMkZzYkdKaFkydGZLR2NwTzJFdWMyVjBUVzlrZFd4bFUzUmhkR1VvWjI5dlp5NU5iMlIxYkdWVWVYQmxMa1ZUTmlsOUtUdG1LSFp2YVdRZ01Dd25aMjl2Wnk1RVpYQmxibVJsYm1ONUxtTmhiR3hpWVdOclh5aGNJaWNyWnlzblhDSXBKeWs3WmloMGFHbHpMbkJoZEdnc2RtOXBaQ0F3S1R0MllYSWdhRDFuYjI5bkxrUmxjR1Z1WkdWdVkza3VjbVZuYVhOMFpYSkRZV3hzWW1GamExOG9ablZ1WTNScGIyNG9ZaWw3WjI5dlp5NUVaWEJsYm1SbGJtTjVMblZ1Y21WbmFYTjBaWEpEWVd4c1ltRmphMThvYUNrN1lTNXlaV2RwYzNSbGNrVnpOazF2WkhWc1pVVjRjRzl5ZEhNb1pTNXdZWFJvTEdJc1oyOXZaeTV0YjJSMWJHVk1iMkZrWlhKVGRHRjBaVjh1Ylc5a2RXeGxUbUZ0WlNsOUtUdG1LSFp2YVdRZ01Dd25hVzF3YjNKMElDb2dZWE1nYlNCbWNtOXRJRndpSnl0MGFHbHpMbkJoZEdnckoxd2lPeUJuYjI5bkxrUmxjR1Z1WkdWdVkza3VZMkZzYkdKaFkydGZLRndpSnl0b0t5ZGNJaXdnYlNrbktUdDJZWElnYXoxbmIyOW5Ma1JsY0dWdVpHVnVZM2t1Y21WbmFYTjBaWEpEWVd4c1ltRmphMThvWm5WdVkzUnBiMjRvS1h0bmIyOW5Ma1JsY0dWdVpHVnVZM2t1ZFc1eVpXZHBjM1JsY2tOaGJHeGlZV05yWHlocktUdGNibUV1WTJ4bFlYSk5iMlIxYkdWVGRHRjBaU2dwTzJFdWJHOWhaR1ZrS0NsOUtUdG1LSFp2YVdRZ01Dd25aMjl2Wnk1RVpYQmxibVJsYm1ONUxtTmhiR3hpWVdOclh5aGNJaWNyYXlzblhDSXBKeWw5Wld4elpTQm5iMjluTG14dloxUnZRMjl1YzI5c1pWOG9YQ0pEWVc1dWIzUWdkWE5sSUdSbFptRjFiSFFnWkdWaWRXY2diRzloWkdWeUlHOTFkSE5wWkdVZ2IyWWdTRlJOVENCa2IyTjFiV1Z1ZEhNdVhDSXBMR0V1Y0dGMWMyVW9LWDBzWjI5dlp5NVVjbUZ1YzJadmNtMWxaRVJsY0dWdVpHVnVZM2s5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsS1h0bmIyOW5Ma1JsY0dWdVpHVnVZM2t1WTJGc2JDaDBhR2x6TEdFc1lpeGpMR1FzWlNrN2RHaHBjeTVqYjI1MFpXNTBjMTg5Ym5Wc2JEdDBhR2x6TG14aGVubEdaWFJqYUY4OUlXZHZiMmN1YVc1SWRHMXNSRzlqZFcxbGJuUmZLQ2w4ZkNFb1hDSnViMDF2WkhWc1pWd2lhVzRnWjI5dlp5NW5iRzlpWVd3dVpHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2hjSW5OamNtbHdkRndpS1NsOUxHZHZiMmN1YVc1b1pYSnBkSE1vWjI5dlp5NVVjbUZ1YzJadmNtMWxaRVJsY0dWdVpHVnVZM2tzWjI5dlp5NUVaWEJsYm1SbGJtTjVLU3huYjI5bkxsUnlZVzV6Wm05eWJXVmtSR1Z3Wlc1a1pXNWplUzV3Y205MGIzUjVjR1V1Ykc5aFpEMW1kVzVqZEdsdmJpaGhLWHRtZFc1amRHbHZiaUJpS0NsN1pTNWpiMjUwWlc1MGMxODlYRzVuYjI5bkxteHZZV1JHYVd4bFUzbHVZMThvWlM1d1lYUm9LVHRsTG1OdmJuUmxiblJ6WHlZbUtHVXVZMjl1ZEdWdWRITmZQV1V1ZEhKaGJuTm1iM0p0S0dVdVkyOXVkR1Z1ZEhOZktTeGxMbU52Ym5SbGJuUnpYeVltS0dVdVkyOXVkR1Z1ZEhOZkt6MWNJbHhjYmk4dkl5QnpiM1Z5WTJWVlVrdzlYQ0lyWlM1d1lYUm9LU2w5Wm5WdVkzUnBiMjRnWXlncGUyVXViR0Y2ZVVabGRHTm9YeVltWWlncE8ybG1LR1V1WTI5dWRHVnVkSE5mS1h0bUppWmhMbk5sZEUxdlpIVnNaVk4wWVhSbEtHZHZiMmN1VFc5a2RXeGxWSGx3WlM1RlV6WXBPM1J5ZVh0MllYSWdZejFsTG1OdmJuUmxiblJ6WHp0bExtTnZiblJsYm5Selh6MXVkV3hzTzJkdmIyY3VaMnh2WW1Gc1JYWmhiQ2hqS1R0cFppaG1LWFpoY2lCa1BXZHZiMmN1Ylc5a2RXeGxURzloWkdWeVUzUmhkR1ZmTG0xdlpIVnNaVTVoYldWOVptbHVZV3hzZVh0bUppWmhMbU5zWldGeVRXOWtkV3hsVTNSaGRHVW9LWDFtSmlabmIyOW5MbWRzYjJKaGJDNGthbk5qYjIxd0xuSmxjWFZwY21VdVpXNXpkWEpsS0Z0bExtZGxkRkJoZEdoT1lXMWxLQ2xkTEdaMWJtTjBhVzl1S0NsN1lTNXlaV2RwYzNSbGNrVnpOazF2WkhWc1pVVjRjRzl5ZEhNb1pTNXdZWFJvTEdkdmIyY3VaMnh2WW1Gc0xpUnFjMk52YlhBdWNtVnhkV2x5WlNobExtZGxkRkJoZEdoT1lXMWxLQ2twTEZ4dVpDbDlLVHRoTG14dllXUmxaQ2dwZlgxbWRXNWpkR2x2YmlCa0tDbDdkbUZ5SUdFOVoyOXZaeTVuYkc5aVlXd3VaRzlqZFcxbGJuUXNZajFuYjI5bkxrUmxjR1Z1WkdWdVkza3VjbVZuYVhOMFpYSkRZV3hzWW1GamExOG9ablZ1WTNScGIyNG9LWHRuYjI5bkxrUmxjR1Z1WkdWdVkza3VkVzV5WldkcGMzUmxja05oYkd4aVlXTnJYeWhpS1R0aktDbDlLU3hrUFNjOGMyTnlhWEIwSUhSNWNHVTlYQ0owWlhoMEwycGhkbUZ6WTNKcGNIUmNJajRuSzJkdmIyY3VjSEp2ZEdWamRGTmpjbWx3ZEZSaFoxOG9KMmR2YjJjdVJHVndaVzVrWlc1amVTNWpZV3hzWW1GamExOG9YQ0luSzJJckoxd2lLVHNuS1N0Y0lseGNlRE5qTDNOamNtbHdkRDVjSWp0aExuZHlhWFJsS0dkdmIyY3VWRkpWVTFSRlJGOVVXVkJGVTE5UVQweEpRMWxmUDJkdmIyY3VWRkpWVTFSRlJGOVVXVkJGVTE5UVQweEpRMWxmTG1OeVpXRjBaVWhVVFV3b1pDazZaQ2w5ZG1GeUlHVTlkR2hwY3p0cFppaG5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYMGxOVUU5U1ZGOVRRMUpKVUZRcFlpZ3BMSFJvYVhNdVkyOXVkR1Z1ZEhOZkppWm5iMjluTG1kc2IySmhiQzVEVEU5VFZWSkZYMGxOVUU5U1ZGOVRRMUpKVUZRb1hDSmNJaXgwYUdsekxtTnZiblJsYm5Selh5ay9LSFJvYVhNdVkyOXVkR1Z1ZEhOZlBXNTFiR3dzWVM1c2IyRmtaV1FvS1NrNllTNXdZWFZ6WlNncE8xeHVaV3h6Wlh0MllYSWdaajEwYUdsekxteHZZV1JHYkdGbmN5NXRiMlIxYkdVOVBXZHZiMmN1VFc5a2RXeGxWSGx3WlM1RlV6WTdkR2hwY3k1c1lYcDVSbVYwWTJoZmZIeGlLQ2s3ZG1GeUlHYzlNVHhoTG5CbGJtUnBibWNvS1M1c1pXNW5kR2dzYUQxbkppWm5iMjluTGtSbFluVm5URzloWkdWeVh5NUpVMTlQVEVSZlNVVmZPMmM5WjI5dlp5NUVaWEJsYm1SbGJtTjVMbVJsWm1WeVh5WW1LR2Q4ZkdkdmIyY3VhWE5FYjJOMWJXVnVkRXh2WVdScGJtZGZLQ2twTzJsbUtHaDhmR2NwWVM1a1pXWmxjaWhtZFc1amRHbHZiaWdwZTJNb0tYMHBPMlZzYzJWN2RtRnlJR3M5WjI5dlp5NW5iRzlpWVd3dVpHOWpkVzFsYm5RN2FEMW5iMjluTG1sdVNIUnRiRVJ2WTNWdFpXNTBYeWdwSmlaY0lrRmpkR2wyWlZoUFltcGxZM1JjSW1sdUlHZHZiMmN1WjJ4dlltRnNPMmxtS0dZbUptZHZiMmN1YVc1SWRHMXNSRzlqZFcxbGJuUmZLQ2ttSm1kdmIyY3VhWE5FYjJOMWJXVnVkRXh2WVdScGJtZGZLQ2ttSmlGb0tYdG5iMjluTGtSbGNHVnVaR1Z1WTNrdVpHVm1aWEpmUFNFd08yRXVjR0YxYzJVb0tUdDJZWElnYkQxckxtOXVjbVZoWkhsemRHRjBaV05vWVc1blpUdHJMbTl1Y21WaFpIbHpkR0YwWldOb1lXNW5aVDFtZFc1amRHbHZiaWdwZTF3aWFXNTBaWEpoWTNScGRtVmNJajA5YXk1eVpXRmtlVk4wWVhSbEppWW9heTV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlU5WEc1c0xHTW9LU3hoTG5KbGMzVnRaU2dwS1R0bmIyOW5MbWx6Um5WdVkzUnBiMjRvYkNrbUptd3VZWEJ3Ykhrb2RtOXBaQ0F3TEdGeVozVnRaVzUwY3lsOWZXVnNjMlVoWjI5dlp5NUVaV0oxWjB4dllXUmxjbDh1U1ZOZlQweEVYMGxGWHlZbVoyOXZaeTVwYmtoMGJXeEViMk4xYldWdWRGOG9LU1ltWjI5dlp5NXBjMFJ2WTNWdFpXNTBURzloWkdsdVoxOG9LVDlrS0NrNll5Z3BmWDE5TEdkdmIyY3VWSEpoYm5ObWIzSnRaV1JFWlhCbGJtUmxibU41TG5CeWIzUnZkSGx3WlM1MGNtRnVjMlp2Y20wOVpuVnVZM1JwYjI0b1lTbDdmU3huYjI5bkxsUnlZVzV6Y0dsc1pXUkVaWEJsYm1SbGJtTjVQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXNaU3htS1h0bmIyOW5MbFJ5WVc1elptOXliV1ZrUkdWd1pXNWtaVzVqZVM1allXeHNLSFJvYVhNc1lTeGlMR01zWkN4bEtUdDBhR2x6TG5SeVlXNXpjR2xzWlhJOVpuMHNaMjl2Wnk1cGJtaGxjbWwwY3lobmIyOW5MbFJ5WVc1emNHbHNaV1JFWlhCbGJtUmxibU41TEdkdmIyY3VWSEpoYm5ObWIzSnRaV1JFWlhCbGJtUmxibU41S1N4bmIyOW5MbFJ5WVc1emNHbHNaV1JFWlhCbGJtUmxibU41TG5CeWIzUnZkSGx3WlM1MGNtRnVjMlp2Y20wOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlIUm9hWE11ZEhKaGJuTndhV3hsY2k1MGNtRnVjM0JwYkdVb1lTeDBhR2x6TG1kbGRGQmhkR2hPWVcxbEtDa3BmU3hjYm1kdmIyY3VVSEpsVkhKaGJuTndhV3hsWkVWek5rMXZaSFZzWlVSbGNHVnVaR1Z1WTNrOVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bEtYdG5iMjluTGxSeVlXNXpabTl5YldWa1JHVndaVzVrWlc1amVTNWpZV3hzS0hSb2FYTXNZU3hpTEdNc1pDeGxLWDBzWjI5dlp5NXBibWhsY21sMGN5aG5iMjluTGxCeVpWUnlZVzV6Y0dsc1pXUkZjelpOYjJSMWJHVkVaWEJsYm1SbGJtTjVMR2R2YjJjdVZISmhibk5tYjNKdFpXUkVaWEJsYm1SbGJtTjVLU3huYjI5bkxsQnlaVlJ5WVc1emNHbHNaV1JGY3paTmIyUjFiR1ZFWlhCbGJtUmxibU41TG5CeWIzUnZkSGx3WlM1MGNtRnVjMlp2Y20wOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRjlMR2R2YjJjdVIyOXZaMDF2WkhWc1pVUmxjR1Z1WkdWdVkzazlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxMR1lzWnlsN1oyOXZaeTVVY21GdWMyWnZjbTFsWkVSbGNHVnVaR1Z1WTNrdVkyRnNiQ2gwYUdsekxHRXNZaXhqTEdRc1pTazdkR2hwY3k1dVpXVmtjMVJ5WVc1emNHbHNaVjg5Wmp0MGFHbHpMblJ5WVc1emNHbHNaWEpmUFdkOUxHZHZiMmN1YVc1b1pYSnBkSE1vWjI5dlp5NUhiMjluVFc5a2RXeGxSR1Z3Wlc1a1pXNWplU3huYjI5bkxsUnlZVzV6Wm05eWJXVmtSR1Z3Wlc1a1pXNWplU2tzWjI5dlp5NUhiMjluVFc5a2RXeGxSR1Z3Wlc1a1pXNWplUzV3Y205MGIzUjVjR1V1ZEhKaGJuTm1iM0p0UFZ4dVpuVnVZM1JwYjI0b1lTbDdkR2hwY3k1dVpXVmtjMVJ5WVc1emNHbHNaVjhtSmloaFBYUm9hWE11ZEhKaGJuTndhV3hsY2w4dWRISmhibk53YVd4bEtHRXNkR2hwY3k1blpYUlFZWFJvVG1GdFpTZ3BLU2s3Y21WMGRYSnVJR2R2YjJjdVRFOUJSRjlOVDBSVlRFVmZWVk5KVGtkZlJWWkJUQ1ltWjI5dlp5NXBjMFJsWmlobmIyOW5MbWRzYjJKaGJDNUtVMDlPS1Q5Y0ltZHZiMmN1Ykc5aFpFMXZaSFZzWlNoY0lpdG5iMjluTG1kc2IySmhiQzVLVTA5T0xuTjBjbWx1WjJsbWVTaGhLMXdpWEZ4dUx5OGpJSE52ZFhKalpWVlNURDFjSWl0MGFHbHpMbkJoZEdnclhDSmNYRzVjSWlrclhDSXBPMXdpT2lkbmIyOW5MbXh2WVdSTmIyUjFiR1VvWm5WdVkzUnBiMjRvWlhod2IzSjBjeWtnZTF3aWRYTmxJSE4wY21samRGd2lPeWNyWVN0Y0lseGNianR5WlhSMWNtNGdaWGh3YjNKMGMzMHBPMXhjYmk4dkl5QnpiM1Z5WTJWVlVrdzlYQ0lyZEdocGN5NXdZWFJvSzF3aVhGeHVYQ0o5TEdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTGtsVFgwOU1SRjlKUlY4OUlTaG5iMjluTG1kc2IySmhiQzVoZEc5aWZId2haMjl2Wnk1bmJHOWlZV3d1Wkc5amRXMWxiblI4ZkNGbmIyOW5MbWRzYjJKaGJDNWtiMk4xYldWdWRDNWhiR3dwTEdkdmIyY3VSR1ZpZFdkTWIyRmtaWEpmTG5CeWIzUnZkSGx3WlM1aFpHUkVaWEJsYm1SbGJtTjVQV1oxYm1OMGFXOXVLR0VzWWl4Y2JtTXNaQ2w3WWoxaWZIeGJYVHRoUFdFdWNtVndiR0ZqWlNndlhGeGNYQzluTEZ3aUwxd2lLVHQyWVhJZ1pUMW5iMjluTG01dmNtMWhiR2w2WlZCaGRHaGZLR2R2YjJjdVltRnpaVkJoZEdncllTazdaQ1ltWENKaWIyOXNaV0Z1WENJaFBUMTBlWEJsYjJZZ1pIeDhLR1E5WkQ5N2JXOWtkV3hsT21kdmIyY3VUVzlrZFd4bFZIbHdaUzVIVDA5SGZUcDdmU2s3WXoxMGFHbHpMbVpoWTNSdmNubGZMbU55WldGMFpVUmxjR1Z1WkdWdVkza29aU3hoTEdJc1l5eGtMR2R2YjJjdWRISmhibk53YVd4bGNsOHVibVZsWkhOVWNtRnVjM0JwYkdVb1pDNXNZVzVuZkh4Y0ltVnpNMXdpTEdRdWJXOWtkV3hsS1NrN2RHaHBjeTVrWlhCbGJtUmxibU5wWlhOZlcyVmRQV003Wm05eUtHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG1sa1ZHOVFZWFJvWDF0aVcyTmRYVDFsTzNSb2FYTXVhV1JVYjFCaGRHaGZXMkZkUFdWOUxHZHZiMmN1UkdWd1pXNWtaVzVqZVVaaFkzUnZjbms5Wm5WdVkzUnBiMjRvWVNsN2RHaHBjeTUwY21GdWMzQnBiR1Z5UFdGOUxHZHZiMmN1UkdWd1pXNWtaVzVqZVVaaFkzUnZjbmt1Y0hKdmRHOTBlWEJsTG1OeVpXRjBaVVJsY0dWdVpHVnVZM2s5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsTEdZcGUzSmxkSFZ5YmlCbExtMXZaSFZzWlQwOVoyOXZaeTVOYjJSMWJHVlVlWEJsTGtkUFQwYy9ibVYzSUdkdmIyY3VSMjl2WjAxdlpIVnNaVVJsY0dWdVpHVnVZM2tvWVN4Y2JtSXNZeXhrTEdVc1ppeDBhR2x6TG5SeVlXNXpjR2xzWlhJcE9tWS9ibVYzSUdkdmIyY3VWSEpoYm5Od2FXeGxaRVJsY0dWdVpHVnVZM2tvWVN4aUxHTXNaQ3hsTEhSb2FYTXVkSEpoYm5Od2FXeGxjaWs2WlM1dGIyUjFiR1U5UFdkdmIyY3VUVzlrZFd4bFZIbHdaUzVGVXpZL1hDSnVaWFpsY2x3aVBUMW5iMjluTGxSU1FVNVRVRWxNUlNZbVoyOXZaeTVCVTFOVlRVVmZSVk5mVFU5RVZVeEZVMTlVVWtGT1UxQkpURVZFUDI1bGR5Qm5iMjluTGxCeVpWUnlZVzV6Y0dsc1pXUkZjelpOYjJSMWJHVkVaWEJsYm1SbGJtTjVLR0VzWWl4akxHUXNaU2s2Ym1WM0lHZHZiMmN1UlhNMlRXOWtkV3hsUkdWd1pXNWtaVzVqZVNoaExHSXNZeXhrTEdVcE9tNWxkeUJuYjI5bkxrUmxjR1Z1WkdWdVkza29ZU3hpTEdNc1pDeGxLWDBzWjI5dlp5NWtaV0oxWjB4dllXUmxjbDg5Ym1WM0lHZHZiMmN1UkdWaWRXZE1iMkZrWlhKZkxHZHZiMmN1Ykc5aFpFTnNiM04xY21WRVpYQnpQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWtaV0oxWjB4dllXUmxjbDh1Ykc5aFpFTnNiM04xY21WRVpYQnpLQ2w5TEdkdmIyY3VjMlYwUkdWd1pXNWtaVzVqZVVaaFkzUnZjbms5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVrWldKMVoweHZZV1JsY2w4dWMyVjBSR1Z3Wlc1a1pXNWplVVpoWTNSdmNua29ZU2w5TEdkdmIyY3VaMnh2WW1Gc0xrTk1UMU5WVWtWZlRrOWZSRVZRVTN4OFhHNW5iMjluTG1SbFluVm5URzloWkdWeVh5NXNiMkZrUTJ4dmMzVnlaVVJsY0hNb0tTeG5iMjluTG1KdmIzUnpkSEpoY0QxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHVmlkV2RNYjJGa1pYSmZMbUp2YjNSemRISmhjQ2hoTEdJcGZTazdaMjl2Wnk1VVVsVlRWRVZFWDFSWlVFVlRYMUJQVEVsRFdWOU9RVTFGUFZ3aVhDSTdaMjl2Wnk1cFpHVnVkR2wwZVY4OVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRjlPMmR2YjJjdVkzSmxZWFJsVkhKMWMzUmxaRlI1Y0dWelVHOXNhV041UFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFc1MWJHdzdhV1lvWENKMWJtUmxabWx1WldSY0lqMDlQWFI1Y0dWdlppQlVjblZ6ZEdWa1ZIbHdaWE44ZkNGVWNuVnpkR1ZrVkhsd1pYTXVZM0psWVhSbFVHOXNhV041S1hKbGRIVnliaUJpTzNSeWVYdGlQVlJ5ZFhOMFpXUlVlWEJsY3k1amNtVmhkR1ZRYjJ4cFkza29ZU3g3WTNKbFlYUmxTRlJOVERwbmIyOW5MbWxrWlc1MGFYUjVYeXhqY21WaGRHVlRZM0pwY0hRNloyOXZaeTVwWkdWdWRHbDBlVjhzWTNKbFlYUmxVMk55YVhCMFZWSk1PbWR2YjJjdWFXUmxiblJwZEhsZkxHTnlaV0YwWlZWU1REcG5iMjluTG1sa1pXNTBhWFI1WDMwcGZXTmhkR05vS0dNcGUyZHZiMmN1Ykc5blZHOURiMjV6YjJ4bFh5aGpMbTFsYzNOaFoyVXBmWEpsZEhWeWJpQmlmVHRjYm1kdmIyY3VWRkpWVTFSRlJGOVVXVkJGVTE5UVQweEpRMWxmUFdkdmIyY3VWRkpWVTFSRlJGOVVXVkJGVTE5UVQweEpRMWxmVGtGTlJUOW5iMjluTG1OeVpXRjBaVlJ5ZFhOMFpXUlVlWEJsYzFCdmJHbGplU2huYjI5bkxsUlNWVk5VUlVSZlZGbFFSVk5mVUU5TVNVTlpYMDVCVFVVclhDSWpZbUZ6WlZ3aUtUcHVkV3hzTzJkdmIyY3ViMkpxWldOMFBYdDlPMmR2YjJjdWIySnFaV04wTG1selBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0U5UFQxaVB6QWhQVDFoZkh3eEwyRTlQVDB4TDJJNllTRTlQV0VtSm1JaFBUMWlmVHRuYjI5bkxtOWlhbVZqZEM1bWIzSkZZV05vUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRtYjNJb2RtRnlJR1FnYVc0Z1lTbGlMbU5oYkd3b1l5eGhXMlJkTEdRc1lTbDlPMmR2YjJjdWIySnFaV04wTG1acGJIUmxjajFtZFc1amRHbHZiaWhoTEdJc1l5bDdkbUZ5SUdROWUzMHNaVHRtYjNJb1pTQnBiaUJoS1dJdVkyRnNiQ2hqTEdGYlpWMHNaU3hoS1NZbUtHUmJaVjA5WVZ0bFhTazdjbVYwZFhKdUlHUjlPMmR2YjJjdWIySnFaV04wTG0xaGNEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5ZTMwc1pUdG1iM0lvWlNCcGJpQmhLV1JiWlYwOVlpNWpZV3hzS0dNc1lWdGxYU3hsTEdFcE8zSmxkSFZ5YmlCa2ZUdG5iMjluTG05aWFtVmpkQzV6YjIxbFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0bWIzSW9kbUZ5SUdRZ2FXNGdZU2xwWmloaUxtTmhiR3dvWXl4aFcyUmRMR1FzWVNrcGNtVjBkWEp1SVRBN2NtVjBkWEp1SVRGOU8xeHVaMjl2Wnk1dlltcGxZM1F1WlhabGNuazlablZ1WTNScGIyNG9ZU3hpTEdNcGUyWnZjaWgyWVhJZ1pDQnBiaUJoS1dsbUtDRmlMbU5oYkd3b1l5eGhXMlJkTEdRc1lTa3BjbVYwZFhKdUlURTdjbVYwZFhKdUlUQjlPMmR2YjJjdWIySnFaV04wTG1kbGRFTnZkVzUwUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFRBc1l6dG1iM0lvWXlCcGJpQmhLV0lyS3p0eVpYUjFjbTRnWW4wN1oyOXZaeTV2WW1wbFkzUXVaMlYwUVc1NVMyVjVQV1oxYm1OMGFXOXVLR0VwZTJadmNpaDJZWElnWWlCcGJpQmhLWEpsZEhWeWJpQmlmVHRuYjI5bkxtOWlhbVZqZEM1blpYUkJibmxXWVd4MVpUMW1kVzVqZEdsdmJpaGhLWHRtYjNJb2RtRnlJR0lnYVc0Z1lTbHlaWFIxY200Z1lWdGlYWDA3WjI5dlp5NXZZbXBsWTNRdVkyOXVkR0ZwYm5NOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdaMjl2Wnk1dlltcGxZM1F1WTI5dWRHRnBibk5XWVd4MVpTaGhMR0lwZlR0bmIyOW5MbTlpYW1WamRDNW5aWFJXWVd4MVpYTTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlXMTBzWXowd0xHUTdabTl5S0dRZ2FXNGdZU2xpVzJNcksxMDlZVnRrWFR0eVpYUjFjbTRnWW4wN1hHNW5iMjluTG05aWFtVmpkQzVuWlhSTFpYbHpQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQVnRkTEdNOU1DeGtPMlp2Y2loa0lHbHVJR0VwWWx0akt5dGRQV1E3Y21WMGRYSnVJR0o5TzJkdmIyY3ViMkpxWldOMExtZGxkRlpoYkhWbFFubExaWGx6UFdaMWJtTjBhVzl1S0dFc1lpbDdkbUZ5SUdNOVoyOXZaeTVwYzBGeWNtRjVUR2xyWlNoaUtTeGtQV00vWWpwaGNtZDFiV1Z1ZEhNN1ptOXlLR005WXo4d09qRTdZenhrTG14bGJtZDBhRHRqS3lzcGUybG1LRzUxYkd3OVBXRXBjbVYwZFhKdU8yRTlZVnRrVzJOZFhYMXlaWFIxY200Z1lYMDdaMjl2Wnk1dlltcGxZM1F1WTI5dWRHRnBibk5MWlhrOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdiblZzYkNFOVBXRW1KbUlnYVc0Z1lYMDdaMjl2Wnk1dlltcGxZM1F1WTI5dWRHRnBibk5XWVd4MVpUMW1kVzVqZEdsdmJpaGhMR0lwZTJadmNpaDJZWElnWXlCcGJpQmhLV2xtS0dGYlkxMDlQV0lwY21WMGRYSnVJVEE3Y21WMGRYSnVJVEY5TzJkdmIyY3ViMkpxWldOMExtWnBibVJMWlhrOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJadmNpaDJZWElnWkNCcGJpQmhLV2xtS0dJdVkyRnNiQ2hqTEdGYlpGMHNaQ3hoS1NseVpYUjFjbTRnWkgwN1hHNW5iMjluTG05aWFtVmpkQzVtYVc1a1ZtRnNkV1U5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM0psZEhWeWJpaGlQV2R2YjJjdWIySnFaV04wTG1acGJtUkxaWGtvWVN4aUxHTXBLU1ltWVZ0aVhYMDdaMjl2Wnk1dlltcGxZM1F1YVhORmJYQjBlVDFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJZ2FXNGdZU2x5WlhSMWNtNGhNVHR5WlhSMWNtNGhNSDA3WjI5dlp5NXZZbXBsWTNRdVkyeGxZWEk5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLSFpoY2lCaUlHbHVJR0VwWkdWc1pYUmxJR0ZiWWwxOU8yZHZiMmN1YjJKcVpXTjBMbkpsYlc5MlpUMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpPeWhqUFdJZ2FXNGdZU2ttSm1SbGJHVjBaU0JoVzJKZE8zSmxkSFZ5YmlCamZUdG5iMjluTG05aWFtVmpkQzVoWkdROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJsbUtHNTFiR3doUFQxaEppWmlJR2x1SUdFcGRHaHliM2NnUlhKeWIzSW9KMVJvWlNCdlltcGxZM1FnWVd4eVpXRmtlU0JqYjI1MFlXbHVjeUIwYUdVZ2EyVjVJRndpSnl0aUt5ZGNJaWNwTzJkdmIyY3ViMkpxWldOMExuTmxkQ2hoTEdJc1l5bDlPMmR2YjJjdWIySnFaV04wTG1kbGREMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUc1MWJHd2hQVDFoSmlaaUlHbHVJR0UvWVZ0aVhUcGpmVHRjYm1kdmIyY3ViMkpxWldOMExuTmxkRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdZVnRpWFQxamZUdG5iMjluTG05aWFtVmpkQzV6WlhSSlpsVnVaR1ZtYVc1bFpEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdJZ2FXNGdZVDloVzJKZE9tRmJZbDA5WTMwN1oyOXZaeTV2WW1wbFkzUXVjMlYwVjJsMGFGSmxkSFZ5YmxaaGJIVmxTV1pPYjNSVFpYUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUybG1LR0lnYVc0Z1lTbHlaWFIxY200Z1lWdGlYVHRqUFdNb0tUdHlaWFIxY200Z1lWdGlYVDFqZlR0bmIyOW5MbTlpYW1WamRDNWxjWFZoYkhNOVpuVnVZM1JwYjI0b1lTeGlLWHRtYjNJb2RtRnlJR01nYVc0Z1lTbHBaaWdoS0dNZ2FXNGdZaWw4ZkdGYlkxMGhQVDFpVzJOZEtYSmxkSFZ5YmlFeE8yWnZjaWgyWVhJZ1pDQnBiaUJpS1dsbUtDRW9aQ0JwYmlCaEtTbHlaWFIxY200aE1UdHlaWFIxY200aE1IMDdaMjl2Wnk1dlltcGxZM1F1WTJ4dmJtVTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTllMzBzWXp0bWIzSW9ZeUJwYmlCaEtXSmJZMTA5WVZ0alhUdHlaWFIxY200Z1luMDdYRzVuYjI5bkxtOWlhbVZqZEM1MWJuTmhabVZEYkc5dVpUMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMW5iMjluTG5SNWNHVlBaaWhoS1R0cFppaGNJbTlpYW1WamRGd2lQVDFpZkh4Y0ltRnljbUY1WENJOVBXSXBlMmxtS0dkdmIyY3VhWE5HZFc1amRHbHZiaWhoTG1Oc2IyNWxLU2x5WlhSMWNtNGdZUzVqYkc5dVpTZ3BPMkk5WENKaGNuSmhlVndpUFQxaVAxdGRPbnQ5TzJadmNpaDJZWElnWXlCcGJpQmhLV0piWTEwOVoyOXZaeTV2WW1wbFkzUXVkVzV6WVdabFEyeHZibVVvWVZ0alhTazdjbVYwZFhKdUlHSjljbVYwZFhKdUlHRjlPMmR2YjJjdWIySnFaV04wTG5SeVlXNXpjRzl6WlQxbWRXNWpkR2x2YmloaEtYdDJZWElnWWoxN2ZTeGpPMlp2Y2loaklHbHVJR0VwWWx0aFcyTmRYVDFqTzNKbGRIVnliaUJpZlR0bmIyOW5MbTlpYW1WamRDNVFVazlVVDFSWlVFVmZSa2xGVEVSVFh6MWNJbU52Ym5OMGNuVmpkRzl5SUdoaGMwOTNibEJ5YjNCbGNuUjVJR2x6VUhKdmRHOTBlWEJsVDJZZ2NISnZjR1Z5ZEhsSmMwVnVkVzFsY21GaWJHVWdkRzlNYjJOaGJHVlRkSEpwYm1jZ2RHOVRkSEpwYm1jZ2RtRnNkV1ZQWmx3aUxuTndiR2wwS0Z3aUlGd2lLVHRjYm1kdmIyY3ViMkpxWldOMExtVjRkR1Z1WkQxbWRXNWpkR2x2YmloaExHSXBlMlp2Y2loMllYSWdZeXhrTEdVOU1UdGxQR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdaU3NyS1h0a1BXRnlaM1Z0Wlc1MGMxdGxYVHRtYjNJb1l5QnBiaUJrS1dGYlkxMDlaRnRqWFR0bWIzSW9kbUZ5SUdZOU1EdG1QR2R2YjJjdWIySnFaV04wTGxCU1QxUlBWRmxRUlY5R1NVVk1SRk5mTG14bGJtZDBhRHRtS3lzcFl6MW5iMjluTG05aWFtVmpkQzVRVWs5VVQxUlpVRVZmUmtsRlRFUlRYMXRtWFN4UFltcGxZM1F1Y0hKdmRHOTBlWEJsTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b1pDeGpLU1ltS0dGYlkxMDlaRnRqWFNsOWZUdGNibWR2YjJjdWIySnFaV04wTG1OeVpXRjBaVDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajFoY21kMWJXVnVkSE11YkdWdVozUm9PMmxtS0RFOVBXSW1KbWR2YjJjdWFYTkJjbkpoZVNoaGNtZDFiV1Z1ZEhOYk1GMHBLWEpsZEhWeWJpQm5iMjluTG05aWFtVmpkQzVqY21WaGRHVXVZWEJ3Ykhrb2JuVnNiQ3hoY21kMWJXVnVkSE5iTUYwcE8ybG1LR0lsTWlsMGFISnZkeUJGY25KdmNpaGNJbFZ1WlhabGJpQnVkVzFpWlhJZ2IyWWdZWEpuZFcxbGJuUnpYQ0lwTzJadmNpaDJZWElnWXoxN2ZTeGtQVEE3WkR4aU8yUXJQVElwWTF0aGNtZDFiV1Z1ZEhOYlpGMWRQV0Z5WjNWdFpXNTBjMXRrS3pGZE8zSmxkSFZ5YmlCamZUdG5iMjluTG05aWFtVmpkQzVqY21WaGRHVlRaWFE5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5WVhKbmRXMWxiblJ6TG14bGJtZDBhRHRwWmlneFBUMWlKaVpuYjI5bkxtbHpRWEp5WVhrb1lYSm5kVzFsYm5Seld6QmRLU2x5WlhSMWNtNGdaMjl2Wnk1dlltcGxZM1F1WTNKbFlYUmxVMlYwTG1Gd2NHeDVLRzUxYkd3c1lYSm5kVzFsYm5Seld6QmRLVHRtYjNJb2RtRnlJR005ZTMwc1pEMHdPMlE4WWp0a0t5c3BZMXRoY21kMWJXVnVkSE5iWkYxZFBTRXdPM0psZEhWeWJpQmpmVHRjYm1kdmIyY3ViMkpxWldOMExtTnlaV0YwWlVsdGJYVjBZV0pzWlZacFpYYzlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlZVHRQWW1wbFkzUXVhWE5HY205NlpXNG1KaUZQWW1wbFkzUXVhWE5HY205NlpXNG9ZU2ttSmloaVBVOWlhbVZqZEM1amNtVmhkR1VvWVNrc1QySnFaV04wTG1aeVpXVjZaU2hpS1NrN2NtVjBkWEp1SUdKOU8yZHZiMmN1YjJKcVpXTjBMbWx6U1cxdGRYUmhZbXhsVm1sbGR6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGhJVTlpYW1WamRDNXBjMFp5YjNwbGJpWW1UMkpxWldOMExtbHpSbkp2ZW1WdUtHRXBmVHRjYm1kdmIyY3ViMkpxWldOMExtZGxkRUZzYkZCeWIzQmxjblI1VG1GdFpYTTlablZ1WTNScGIyNG9ZU3hpTEdNcGUybG1LQ0ZoS1hKbGRIVnlibHRkTzJsbUtDRlBZbXBsWTNRdVoyVjBUM2R1VUhKdmNHVnlkSGxPWVcxbGMzeDhJVTlpYW1WamRDNW5aWFJRY205MGIzUjVjR1ZQWmlseVpYUjFjbTRnWjI5dlp5NXZZbXBsWTNRdVoyVjBTMlY1Y3loaEtUdG1iM0lvZG1GeUlHUTllMzA3WVNZbUtHRWhQVDFQWW1wbFkzUXVjSEp2ZEc5MGVYQmxmSHhpS1NZbUtHRWhQVDFHZFc1amRHbHZiaTV3Y205MGIzUjVjR1Y4ZkdNcE95bDdabTl5S0haaGNpQmxQVTlpYW1WamRDNW5aWFJQZDI1UWNtOXdaWEowZVU1aGJXVnpLR0VwTEdZOU1EdG1QR1V1YkdWdVozUm9PMllyS3lsa1cyVmJabDFkUFNFd08yRTlUMkpxWldOMExtZGxkRkJ5YjNSdmRIbHdaVTltS0dFcGZYSmxkSFZ5YmlCbmIyOW5MbTlpYW1WamRDNW5aWFJMWlhsektHUXBmVHRuYjI5bkxtOWlhbVZqZEM1blpYUlRkWEJsY2tOc1lYTnpQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaWhoUFU5aWFtVmpkQzVuWlhSUWNtOTBiM1I1Y0dWUFppaGhMbkJ5YjNSdmRIbHdaU2twSmlaaExtTnZibk4wY25WamRHOXlmVHRuYjI5bkxtUmxZblZuUFh0OU8yZHZiMmN1WkdWaWRXY3VSWEp5YjNJOVpuVnVZM1JwYjI0b1lTbDdhV1lvUlhKeWIzSXVZMkZ3ZEhWeVpWTjBZV05yVkhKaFkyVXBSWEp5YjNJdVkyRndkSFZ5WlZOMFlXTnJWSEpoWTJVb2RHaHBjeXhuYjI5bkxtUmxZblZuTGtWeWNtOXlLVHRsYkhObGUzWmhjaUJpUFVWeWNtOXlLQ2t1YzNSaFkyczdZaVltS0hSb2FYTXVjM1JoWTJzOVlpbDlZU1ltS0hSb2FYTXViV1Z6YzJGblpUMVRkSEpwYm1jb1lTa3BPM1JvYVhNdWNtVndiM0owUlhKeWIzSlViMU5sY25abGNqMGhNSDA3WjI5dlp5NXBibWhsY21sMGN5aG5iMjluTG1SbFluVm5Ma1Z5Y205eUxFVnljbTl5S1R0bmIyOW5MbVJsWW5WbkxrVnljbTl5TG5CeWIzUnZkSGx3WlM1dVlXMWxQVndpUTNWemRHOXRSWEp5YjNKY0lqdG5iMjluTG1SdmJUMTdmVHRuYjI5bkxtUnZiUzVPYjJSbFZIbHdaVDE3UlV4RlRVVk9WRG94TEVGVVZGSkpRbFZVUlRveUxGUkZXRlE2TXl4RFJFRlVRVjlUUlVOVVNVOU9PalFzUlU1VVNWUlpYMUpGUmtWU1JVNURSVG8xTEVWT1ZFbFVXVG8yTEZCU1QwTkZVMU5KVGtkZlNVNVRWRkpWUTFSSlQwNDZOeXhEVDAxTlJVNVVPamdzUkU5RFZVMUZUbFE2T1N4RVQwTlZUVVZPVkY5VVdWQkZPakV3TEVSUFExVk5SVTVVWDBaU1FVZE5SVTVVT2pFeExFNVBWRUZVU1U5T09qRXlmVHRuYjI5bkxtRnpjMlZ5ZEhNOWUzMDdaMjl2Wnk1aGMzTmxjblJ6TGtWT1FVSk1SVjlCVTFORlVsUlRQV2R2YjJjdVJFVkNWVWM3WjI5dlp5NWhjM05sY25SekxrRnpjMlZ5ZEdsdmJrVnljbTl5UFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1a1pXSjFaeTVGY25KdmNpNWpZV3hzS0hSb2FYTXNaMjl2Wnk1aGMzTmxjblJ6TG5OMVluTmZLR0VzWWlrcE8zUm9hWE11YldWemMyRm5aVkJoZEhSbGNtNDlZWDA3WjI5dlp5NXBibWhsY21sMGN5aG5iMjluTG1GemMyVnlkSE11UVhOelpYSjBhVzl1UlhKeWIzSXNaMjl2Wnk1a1pXSjFaeTVGY25KdmNpazdaMjl2Wnk1aGMzTmxjblJ6TGtGemMyVnlkR2x2YmtWeWNtOXlMbkJ5YjNSdmRIbHdaUzV1WVcxbFBWd2lRWE56WlhKMGFXOXVSWEp5YjNKY0lqdG5iMjluTG1GemMyVnlkSE11UkVWR1FWVk1WRjlGVWxKUFVsOUlRVTVFVEVWU1BXWjFibU4wYVc5dUtHRXBlM1JvY205M0lHRTdmVHRuYjI5bkxtRnpjMlZ5ZEhNdVpYSnliM0pJWVc1a2JHVnlYejFuYjI5bkxtRnpjMlZ5ZEhNdVJFVkdRVlZNVkY5RlVsSlBVbDlJUVU1RVRFVlNPMXh1WjI5dlp5NWhjM05sY25SekxuTjFZbk5mUFdaMWJtTjBhVzl1S0dFc1lpbDdZVDFoTG5Od2JHbDBLRndpSlhOY0lpazdabTl5S0haaGNpQmpQVndpWENJc1pEMWhMbXhsYm1kMGFDMHhMR1U5TUR0bFBHUTdaU3NyS1dNclBXRmJaVjByS0dVOFlpNXNaVzVuZEdnL1lsdGxYVHBjSWlWelhDSXBPM0psZEhWeWJpQmpLMkZiWkYxOU8yZHZiMmN1WVhOelpYSjBjeTVrYjBGemMyVnlkRVpoYVd4MWNtVmZQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlM1poY2lCbFBWd2lRWE56WlhKMGFXOXVJR1poYVd4bFpGd2lPMmxtS0dNcGUyVXJQVndpT2lCY0lpdGpPM1poY2lCbVBXUjlaV3h6WlNCaEppWW9aU3M5WENJNklGd2lLMkVzWmoxaUtUdGhQVzVsZHlCbmIyOW5MbUZ6YzJWeWRITXVRWE56WlhKMGFXOXVSWEp5YjNJb1hDSmNJaXRsTEdaOGZGdGRLVHRuYjI5bkxtRnpjMlZ5ZEhNdVpYSnliM0pJWVc1a2JHVnlYeWhoS1gwN1oyOXZaeTVoYzNObGNuUnpMbk5sZEVWeWNtOXlTR0Z1Wkd4bGNqMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1tSmlobmIyOW5MbUZ6YzJWeWRITXVaWEp5YjNKSVlXNWtiR1Z5WHoxaEtYMDdYRzVuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1tSmlGaEppWm5iMjluTG1GemMyVnlkSE11Wkc5QmMzTmxjblJHWVdsc2RYSmxYeWhjSWx3aUxHNTFiR3dzWWl4QmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoaGNtZDFiV1Z1ZEhNc01pa3BPM0psZEhWeWJpQmhmVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowUlhocGMzUnpQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KbTUxYkd3OVBXRW1KbWR2YjJjdVlYTnpaWEowY3k1a2IwRnpjMlZ5ZEVaaGFXeDFjbVZmS0Z3aVJYaHdaV04wWldRZ2RHOGdaWGhwYzNRNklDVnpMbHdpTEZ0aFhTeGlMRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd5S1NrN2NtVjBkWEp1SUdGOU8xeHVaMjl2Wnk1aGMzTmxjblJ6TG1aaGFXdzlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbUZ6YzJWeWRITXVSVTVCUWt4RlgwRlRVMFZTVkZNbUptZHZiMmN1WVhOelpYSjBjeTVsY25KdmNraGhibVJzWlhKZktHNWxkeUJuYjI5bkxtRnpjMlZ5ZEhNdVFYTnpaWEowYVc5dVJYSnliM0lvWENKR1lXbHNkWEpsWENJcktHRS9YQ0k2SUZ3aUsyRTZYQ0pjSWlrc1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxERXBLU2w5TzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25ST2RXMWlaWEk5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMmR2YjJjdVlYTnpaWEowY3k1RlRrRkNURVZmUVZOVFJWSlVVeVltSVdkdmIyY3VhWE5PZFcxaVpYSW9ZU2ttSm1kdmIyY3VZWE56WlhKMGN5NWtiMEZ6YzJWeWRFWmhhV3gxY21WZktGd2lSWGh3WldOMFpXUWdiblZ0WW1WeUlHSjFkQ0JuYjNRZ0pYTTZJQ1Z6TGx3aUxGdG5iMjluTG5SNWNHVlBaaWhoS1N4aFhTeGlMRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd5S1NrN2NtVjBkWEp1SUdGOU8xeHVaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVoYzNObGNuUnpMa1ZPUVVKTVJWOUJVMU5GVWxSVEppWWhaMjl2Wnk1cGMxTjBjbWx1WnloaEtTWW1aMjl2Wnk1aGMzTmxjblJ6TG1SdlFYTnpaWEowUm1GcGJIVnlaVjhvWENKRmVIQmxZM1JsWkNCemRISnBibWNnWW5WMElHZHZkQ0FsY3pvZ0pYTXVYQ0lzVzJkdmIyY3VkSGx3WlU5bUtHRXBMR0ZkTEdJc1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxESXBLVHR5WlhSMWNtNGdZWDA3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZEVaMWJtTjBhVzl1UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1tSmlGbmIyOW5MbWx6Um5WdVkzUnBiMjRvWVNrbUptZHZiMmN1WVhOelpYSjBjeTVrYjBGemMyVnlkRVpoYVd4MWNtVmZLRndpUlhod1pXTjBaV1FnWm5WdVkzUnBiMjRnWW5WMElHZHZkQ0FsY3pvZ0pYTXVYQ0lzVzJkdmIyY3VkSGx3WlU5bUtHRXBMR0ZkTEdJc1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxESXBLVHR5WlhSMWNtNGdZWDA3WEc1bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFQySnFaV04wUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVJVNUJRa3hGWDBGVFUwVlNWRk1tSmlGbmIyOW5MbWx6VDJKcVpXTjBLR0VwSmlabmIyOW5MbUZ6YzJWeWRITXVaRzlCYzNObGNuUkdZV2xzZFhKbFh5aGNJa1Y0Y0dWamRHVmtJRzlpYW1WamRDQmlkWFFnWjI5MElDVnpPaUFsY3k1Y0lpeGJaMjl2Wnk1MGVYQmxUMllvWVNrc1lWMHNZaXhCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zTWlrcE8zSmxkSFZ5YmlCaGZUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBRWEp5WVhrOVpuVnVZM1JwYjI0b1lTeGlMR01wZTJkdmIyY3VZWE56WlhKMGN5NUZUa0ZDVEVWZlFWTlRSVkpVVXlZbUlXZHZiMmN1YVhOQmNuSmhlU2hoS1NZbVoyOXZaeTVoYzNObGNuUnpMbVJ2UVhOelpYSjBSbUZwYkhWeVpWOG9YQ0pGZUhCbFkzUmxaQ0JoY25KaGVTQmlkWFFnWjI5MElDVnpPaUFsY3k1Y0lpeGJaMjl2Wnk1MGVYQmxUMllvWVNrc1lWMHNZaXhCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zTWlrcE8zSmxkSFZ5YmlCaGZUdGNibWR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJDYjI5c1pXRnVQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11UlU1QlFreEZYMEZUVTBWU1ZGTW1KaUZuYjI5bkxtbHpRbTl2YkdWaGJpaGhLU1ltWjI5dlp5NWhjM05sY25SekxtUnZRWE56WlhKMFJtRnBiSFZ5WlY4b1hDSkZlSEJsWTNSbFpDQmliMjlzWldGdUlHSjFkQ0JuYjNRZ0pYTTZJQ1Z6TGx3aUxGdG5iMjluTG5SNWNHVlBaaWhoS1N4aFhTeGlMRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd5S1NrN2NtVjBkWEp1SUdGOU8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUkZiR1Z0Wlc1MFBXWjFibU4wYVc5dUtHRXNZaXhqS1hzaFoyOXZaeTVoYzNObGNuUnpMa1ZPUVVKTVJWOUJVMU5GVWxSVGZIeG5iMjluTG1selQySnFaV04wS0dFcEppWmhMbTV2WkdWVWVYQmxQVDFuYjI5bkxtUnZiUzVPYjJSbFZIbHdaUzVGVEVWTlJVNVVmSHhuYjI5bkxtRnpjMlZ5ZEhNdVpHOUJjM05sY25SR1lXbHNkWEpsWHloY0lrVjRjR1ZqZEdWa0lFVnNaVzFsYm5RZ1luVjBJR2R2ZENBbGN6b2dKWE11WENJc1cyZHZiMmN1ZEhsd1pVOW1LR0VwTEdGZExHSXNRWEp5WVhrdWNISnZkRzkwZVhCbExuTnNhV05sTG1OaGJHd29ZWEpuZFcxbGJuUnpMRElwS1R0eVpYUjFjbTRnWVgwN1hHNW5iMjluTG1GemMyVnlkSE11WVhOelpYSjBTVzV6ZEdGdVkyVnZaajFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHNoWjI5dlp5NWhjM05sY25SekxrVk9RVUpNUlY5QlUxTkZVbFJUZkh4aElHbHVjM1JoYm1ObGIyWWdZbng4WjI5dlp5NWhjM05sY25SekxtUnZRWE56WlhKMFJtRnBiSFZ5WlY4b1hDSkZlSEJsWTNSbFpDQnBibk4wWVc1alpXOW1JQ1Z6SUdKMWRDQm5iM1FnSlhNdVhDSXNXMmR2YjJjdVlYTnpaWEowY3k1blpYUlVlWEJsWHloaUtTeG5iMjluTG1GemMyVnlkSE11WjJWMFZIbHdaVjhvWVNsZExHTXNRWEp5WVhrdWNISnZkRzkwZVhCbExuTnNhV05sTG1OaGJHd29ZWEpuZFcxbGJuUnpMRE1wS1R0eVpYUjFjbTRnWVgwN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRFWnBibWwwWlQxbWRXNWpkR2x2YmloaExHSXNZeWw3SVdkdmIyY3VZWE56WlhKMGN5NUZUa0ZDVEVWZlFWTlRSVkpVVTN4OFhDSnVkVzFpWlhKY0lqMDlkSGx3Wlc5bUlHRW1KbWx6Um1sdWFYUmxLR0VwZkh4bmIyOW5MbUZ6YzJWeWRITXVaRzlCYzNObGNuUkdZV2xzZFhKbFh5aGNJa1Y0Y0dWamRHVmtJQ1Z6SUhSdklHSmxJR0VnWm1sdWFYUmxJRzUxYldKbGNpQmlkWFFnYVhRZ2FYTWdibTkwTGx3aUxGdGhYU3hpTEVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0dGeVozVnRaVzUwY3l3eUtTazdjbVYwZFhKdUlHRjlPMXh1WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZEU5aWFtVmpkRkJ5YjNSdmRIbHdaVWx6U1c1MFlXTjBQV1oxYm1OMGFXOXVLQ2w3Wm05eUtIWmhjaUJoSUdsdUlFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVcFoyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1lTdGNJaUJ6YUc5MWJHUWdibTkwSUdKbElHVnVkVzFsY21GaWJHVWdhVzRnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVjSWlsOU8yZHZiMmN1WVhOelpYSjBjeTVuWlhSVWVYQmxYejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVNCcGJuTjBZVzVqWlc5bUlFWjFibU4wYVc5dVAyRXVaR2x6Y0d4aGVVNWhiV1Y4ZkdFdWJtRnRaWHg4WENKMWJtdHViM2R1SUhSNWNHVWdibUZ0WlZ3aU9tRWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUS9ZUzVqYjI1emRISjFZM1J2Y2k1a2FYTndiR0Y1VG1GdFpYeDhZUzVqYjI1emRISjFZM1J2Y2k1dVlXMWxmSHhQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b1lTazZiblZzYkQwOVBXRS9YQ0p1ZFd4c1hDSTZkSGx3Wlc5bUlHRjlPM1poY2lCcWMzQmlQWHRDYVc1aGNubERiMjV6ZEdGdWRITTZlMzBzUTI5dWMzUkNhVzVoY25sTlpYTnpZV2RsT21aMWJtTjBhVzl1S0NsN2ZTeENhVzVoY25sTlpYTnpZV2RsT21aMWJtTjBhVzl1S0NsN2ZYMDdhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11Um1sbGJHUlVlWEJsUFh0SlRsWkJURWxFT2kweExFUlBWVUpNUlRveExFWk1UMEZVT2pJc1NVNVVOalE2TXl4VlNVNVVOalE2TkN4SlRsUXpNam8xTEVaSldFVkVOalE2Tml4R1NWaEZSRE15T2pjc1FrOVBURG80TEZOVVVrbE9Sem81TEVkU1QxVlFPakV3TEUxRlUxTkJSMFU2TVRFc1FsbFVSVk02TVRJc1ZVbE9WRE15T2pFekxFVk9WVTA2TVRRc1UwWkpXRVZFTXpJNk1UVXNVMFpKV0VWRU5qUTZNVFlzVTBsT1ZETXlPakUzTEZOSlRsUTJORG94T0N4R1NFRlRTRFkwT2pNd0xGWklRVk5JTmpRNk16RjlPMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsUFh0SlRsWkJURWxFT2kweExGWkJVa2xPVkRvd0xFWkpXRVZFTmpRNk1TeEVSVXhKVFVsVVJVUTZNaXhUVkVGU1ZGOUhVazlWVURvekxFVk9SRjlIVWs5VlVEbzBMRVpKV0VWRU16STZOWDA3WEc1cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NUdhV1ZzWkZSNWNHVlViMWRwY21WVWVYQmxQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtacFpXeGtWSGx3WlN4alBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxPM04zYVhSamFDaGhLWHRqWVhObElHSXVTVTVVTXpJNlkyRnpaU0JpTGtsT1ZEWTBPbU5oYzJVZ1lpNVZTVTVVTXpJNlkyRnpaU0JpTGxWSlRsUTJORHBqWVhObElHSXVVMGxPVkRNeU9tTmhjMlVnWWk1VFNVNVVOalE2WTJGelpTQmlMa0pQVDB3NlkyRnpaU0JpTGtWT1ZVMDZZMkZ6WlNCaUxsWklRVk5JTmpRNmNtVjBkWEp1SUdNdVZrRlNTVTVVTzJOaGMyVWdZaTVFVDFWQ1RFVTZZMkZ6WlNCaUxrWkpXRVZFTmpRNlkyRnpaU0JpTGxOR1NWaEZSRFkwT21OaGMyVWdZaTVHU0VGVFNEWTBPbkpsZEhWeWJpQmpMa1pKV0VWRU5qUTdZMkZ6WlNCaUxsTlVVa2xPUnpwallYTmxJR0l1VFVWVFUwRkhSVHBqWVhObElHSXVRbGxVUlZNNmNtVjBkWEp1SUdNdVJFVk1TVTFKVkVWRU8yTmhjMlVnWWk1R1RFOUJWRHBqWVhObElHSXVSa2xZUlVRek1qcGpZWE5sSUdJdVUwWkpXRVZFTXpJNmNtVjBkWEp1SUdNdVJrbFlSVVF6TWp0a1pXWmhkV3gwT25KbGRIVnliaUJqTGtsT1ZrRk1TVVI5ZlR0Y2JtcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa2xPVmtGTVNVUmZSa2xGVEVSZlRsVk5Ra1ZTUFMweE8ycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa1pNVDBGVU16SmZSVkJUUFRFdU5EQXhNams0TkRZME16STBPREUzUlMwME5UdHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZETXlYMDFKVGoweExqRTNOVFE1TkRNMU1EZ3lNakk0TnpWRkxUTTRPMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtaTVQwRlVNekpmVFVGWVBUTXVOREF5T0RJek5EWTJNemcxTWpnNE5rVXpPRHRxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1R1RFOUJWRFkwWDBWUVV6MDBMamxGTFRNeU5EdHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZEWTBYMDFKVGoweUxqSXlOVEEzTXpnMU9EVXdOekl3TVRSRkxUTXdPRHRxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1R1RFOUJWRFkwWDAxQldEMHhMamM1TnpZNU16RXpORGcyTWpNeE5UZEZNekE0TzJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4eU1EMHhNRFE0TlRjMk8ycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxOHlNejA0TXpnNE5qQTRPMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVQweU1UUTNORGd6TmpRNE8xeHVhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek15UFRReU9UUTVOamN5T1RZN2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6VXlQVFExTURNMU9UazJNamN6TnpBME9UWTdhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYell6UFRCNE4yWm1abVptWm1abVptWm1abVptWmp0cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk5qUTlNUzQ0TkRRMk56UTBNRGN6TnpBNU5UVXlSVEU1TzJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxscEZVazlmU0VGVFNEMWNJbHhjZURBd1hGeDRNREJjWEhnd01GeGNlREF3WEZ4NE1EQmNYSGd3TUZ4Y2VEQXdYRng0TURCY0lqdG5iMjluTG1GeWNtRjVQWHQ5TzJkdmIyY3VUa0ZVU1ZaRlgwRlNVa0ZaWDFCU1QxUlBWRmxRUlZNOVoyOXZaeTVVVWxWVFZFVkVYMU5KVkVVN1oyOXZaeTVoY25KaGVTNUJVMU5WVFVWZlRrRlVTVlpGWDBaVlRrTlVTVTlPVXoweU1ERXlQR2R2YjJjdVJrVkJWRlZTUlZORlZGOVpSVUZTTzJkdmIyY3VZWEp5WVhrdWNHVmxhejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVZ0aExteGxibWQwYUMweFhYMDdaMjl2Wnk1aGNuSmhlUzVzWVhOMFBXZHZiMmN1WVhKeVlYa3VjR1ZsYXp0Y2JtZHZiMmN1WVhKeVlYa3VhVzVrWlhoUFpqMW5iMjluTGs1QlZFbFdSVjlCVWxKQldWOVFVazlVVDFSWlVFVlRKaVlvWjI5dlp5NWhjbkpoZVM1QlUxTlZUVVZmVGtGVVNWWkZYMFpWVGtOVVNVOU9VM3g4UVhKeVlYa3VjSEp2ZEc5MGVYQmxMbWx1WkdWNFQyWXBQMloxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLRzUxYkd3aFBXRXViR1Z1WjNSb0tUdHlaWFIxY200Z1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG1sdVpHVjRUMll1WTJGc2JDaGhMR0lzWXlsOU9tWjFibU4wYVc5dUtHRXNZaXhqS1h0alBXNTFiR3c5UFdNL01Eb3dQbU0vVFdGMGFDNXRZWGdvTUN4aExteGxibWQwYUN0aktUcGpPMmxtS0dkdmIyY3VhWE5UZEhKcGJtY29ZU2twY21WMGRYSnVJR2R2YjJjdWFYTlRkSEpwYm1jb1lpa21KakU5UFdJdWJHVnVaM1JvUDJFdWFXNWtaWGhQWmloaUxHTXBPaTB4TzJadmNpZzdZenhoTG14bGJtZDBhRHRqS3lzcGFXWW9ZeUJwYmlCaEppWmhXMk5kUFQwOVlpbHlaWFIxY200Z1l6dHlaWFIxY200dE1YMDdYRzVuYjI5bkxtRnljbUY1TG14aGMzUkpibVJsZUU5bVBXZHZiMmN1VGtGVVNWWkZYMEZTVWtGWlgxQlNUMVJQVkZsUVJWTW1KaWhuYjI5bkxtRnljbUY1TGtGVFUxVk5SVjlPUVZSSlZrVmZSbFZPUTFSSlQwNVRmSHhCY25KaGVTNXdjbTkwYjNSNWNHVXViR0Z6ZEVsdVpHVjRUMllwUDJaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0c1MWJHd2hQV0V1YkdWdVozUm9LVHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExteGhjM1JKYm1SbGVFOW1MbU5oYkd3b1lTeGlMRzUxYkd3OVBXTS9ZUzVzWlc1bmRHZ3RNVHBqS1gwNlpuVnVZM1JwYjI0b1lTeGlMR01wZTJNOWJuVnNiRDA5WXo5aExteGxibWQwYUMweE9tTTdNRDVqSmlZb1l6MU5ZWFJvTG0xaGVDZ3dMR0V1YkdWdVozUm9LMk1wS1R0cFppaG5iMjluTG1selUzUnlhVzVuS0dFcEtYSmxkSFZ5YmlCbmIyOW5MbWx6VTNSeWFXNW5LR0lwSmlZeFBUMWlMbXhsYm1kMGFEOWhMbXhoYzNSSmJtUmxlRTltS0dJc1l5azZMVEU3Wm05eUtEc3dQRDFqTzJNdExTbHBaaWhqSUdsdUlHRW1KbUZiWTEwOVBUMWlLWEpsZEhWeWJpQmpPM0psZEhWeWJpMHhmVHRjYm1kdmIyY3VZWEp5WVhrdVptOXlSV0ZqYUQxbmIyOW5MazVCVkVsV1JWOUJVbEpCV1Y5UVVrOVVUMVJaVUVWVEppWW9aMjl2Wnk1aGNuSmhlUzVCVTFOVlRVVmZUa0ZVU1ZaRlgwWlZUa05VU1U5T1UzeDhRWEp5WVhrdWNISnZkRzkwZVhCbExtWnZja1ZoWTJncFAyWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFdFdWJHVnVaM1JvS1R0QmNuSmhlUzV3Y205MGIzUjVjR1V1Wm05eVJXRmphQzVqWVd4c0tHRXNZaXhqS1gwNlpuVnVZM1JwYjI0b1lTeGlMR01wZTJadmNpaDJZWElnWkQxaExteGxibWQwYUN4bFBXZHZiMmN1YVhOVGRISnBibWNvWVNrL1lTNXpjR3hwZENoY0lsd2lLVHBoTEdZOU1EdG1QR1E3WmlzcktXWWdhVzRnWlNZbVlpNWpZV3hzS0dNc1pWdG1YU3htTEdFcGZUdG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyaFNhV2RvZEQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZG1GeUlHUTlZUzVzWlc1bmRHZ3NaVDFuYjI5bkxtbHpVM1J5YVc1bktHRXBQMkV1YzNCc2FYUW9YQ0pjSWlrNllUdG1iM0lvTFMxa096QThQV1E3TFMxa0tXUWdhVzRnWlNZbVlpNWpZV3hzS0dNc1pWdGtYU3hrTEdFcGZUdGNibWR2YjJjdVlYSnlZWGt1Wm1sc2RHVnlQV2R2YjJjdVRrRlVTVlpGWDBGU1VrRlpYMUJTVDFSUFZGbFFSVk1tSmlobmIyOW5MbUZ5Y21GNUxrRlRVMVZOUlY5T1FWUkpWa1ZmUmxWT1ExUkpUMDVUZkh4QmNuSmhlUzV3Y205MGIzUjVjR1V1Wm1sc2RHVnlLVDltZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdjbVYwZFhKdUlFRnljbUY1TG5CeWIzUnZkSGx3WlM1bWFXeDBaWEl1WTJGc2JDaGhMR0lzWXlsOU9tWjFibU4wYVc5dUtHRXNZaXhqS1h0bWIzSW9kbUZ5SUdROVlTNXNaVzVuZEdnc1pUMWJYU3htUFRBc1p6MW5iMjluTG1selUzUnlhVzVuS0dFcFAyRXVjM0JzYVhRb1hDSmNJaWs2WVN4b1BUQTdhRHhrTzJnckt5bHBaaWhvSUdsdUlHY3BlM1poY2lCclBXZGJhRjA3WWk1allXeHNLR01zYXl4b0xHRXBKaVlvWlZ0bUt5dGRQV3NwZlhKbGRIVnliaUJsZlR0Y2JtZHZiMmN1WVhKeVlYa3ViV0Z3UFdkdmIyY3VUa0ZVU1ZaRlgwRlNVa0ZaWDFCU1QxUlBWRmxRUlZNbUppaG5iMjluTG1GeWNtRjVMa0ZUVTFWTlJWOU9RVlJKVmtWZlJsVk9RMVJKVDA1VGZIeEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWJXRndLVDltZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdjbVYwZFhKdUlFRnljbUY1TG5CeWIzUnZkSGx3WlM1dFlYQXVZMkZzYkNoaExHSXNZeWw5T21aMWJtTjBhVzl1S0dFc1lpeGpLWHRtYjNJb2RtRnlJR1E5WVM1c1pXNW5kR2dzWlQxQmNuSmhlU2hrS1N4bVBXZHZiMmN1YVhOVGRISnBibWNvWVNrL1lTNXpjR3hwZENoY0lsd2lLVHBoTEdjOU1EdG5QR1E3WnlzcktXY2dhVzRnWmlZbUtHVmJaMTA5WWk1allXeHNLR01zWmx0blhTeG5MR0VwS1R0eVpYUjFjbTRnWlgwN1hHNW5iMjluTG1GeWNtRjVMbkpsWkhWalpUMW5iMjluTGs1QlZFbFdSVjlCVWxKQldWOVFVazlVVDFSWlVFVlRKaVlvWjI5dlp5NWhjbkpoZVM1QlUxTlZUVVZmVGtGVVNWWkZYMFpWVGtOVVNVOU9VM3g4UVhKeVlYa3VjSEp2ZEc5MGVYQmxMbkpsWkhWalpTay9ablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdaQ1ltS0dJOVoyOXZaeTVpYVc1a0tHSXNaQ2twTzNKbGRIVnliaUJCY25KaGVTNXdjbTkwYjNSNWNHVXVjbVZrZFdObExtTmhiR3dvWVN4aUxHTXBmVHBtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHQyWVhJZ1pUMWpPMmR2YjJjdVlYSnlZWGt1Wm05eVJXRmphQ2hoTEdaMWJtTjBhVzl1S0dNc1p5bDdaVDFpTG1OaGJHd29aQ3hsTEdNc1p5eGhLWDBwTzNKbGRIVnliaUJsZlR0Y2JtZHZiMmN1WVhKeVlYa3VjbVZrZFdObFVtbG5hSFE5WjI5dlp5NU9RVlJKVmtWZlFWSlNRVmxmVUZKUFZFOVVXVkJGVXlZbUtHZHZiMmN1WVhKeVlYa3VRVk5UVlUxRlgwNUJWRWxXUlY5R1ZVNURWRWxQVGxOOGZFRnljbUY1TG5CeWIzUnZkSGx3WlM1eVpXUjFZMlZTYVdkb2RDay9ablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWlLVHRrSmlZb1lqMW5iMjluTG1KcGJtUW9ZaXhrS1NrN2NtVjBkWEp1SUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV5WldSMVkyVlNhV2RvZEM1allXeHNLR0VzWWl4aktYMDZablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdkbUZ5SUdVOVl6dG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyaFNhV2RvZENoaExHWjFibU4wYVc5dUtHTXNaeWw3WlQxaUxtTmhiR3dvWkN4bExHTXNaeXhoS1gwcE8zSmxkSFZ5YmlCbGZUdGNibWR2YjJjdVlYSnlZWGt1YzI5dFpUMW5iMjluTGs1QlZFbFdSVjlCVWxKQldWOVFVazlVVDFSWlVFVlRKaVlvWjI5dlp5NWhjbkpoZVM1QlUxTlZUVVZmVGtGVVNWWkZYMFpWVGtOVVNVOU9VM3g4UVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk52YldVcFAyWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFdFdWJHVnVaM1JvS1R0eVpYUjFjbTRnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk52YldVdVkyRnNiQ2hoTEdJc1l5bDlPbVoxYm1OMGFXOXVLR0VzWWl4aktYdG1iM0lvZG1GeUlHUTlZUzVzWlc1bmRHZ3NaVDFuYjI5bkxtbHpVM1J5YVc1bktHRXBQMkV1YzNCc2FYUW9YQ0pjSWlrNllTeG1QVEE3Wmp4a08yWXJLeWxwWmlobUlHbHVJR1VtSm1JdVkyRnNiQ2hqTEdWYlpsMHNaaXhoS1NseVpYUjFjbTRoTUR0eVpYUjFjbTRoTVgwN1hHNW5iMjluTG1GeWNtRjVMbVYyWlhKNVBXZHZiMmN1VGtGVVNWWkZYMEZTVWtGWlgxQlNUMVJQVkZsUVJWTW1KaWhuYjI5bkxtRnljbUY1TGtGVFUxVk5SVjlPUVZSSlZrVmZSbFZPUTFSSlQwNVRmSHhCY25KaGVTNXdjbTkwYjNSNWNHVXVaWFpsY25rcFAyWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFdFdWJHVnVaM1JvS1R0eVpYUjFjbTRnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVYyWlhKNUxtTmhiR3dvWVN4aUxHTXBmVHBtZFc1amRHbHZiaWhoTEdJc1l5bDdabTl5S0haaGNpQmtQV0V1YkdWdVozUm9MR1U5WjI5dlp5NXBjMU4wY21sdVp5aGhLVDloTG5Od2JHbDBLRndpWENJcE9tRXNaajB3TzJZOFpEdG1LeXNwYVdZb1ppQnBiaUJsSmlZaFlpNWpZV3hzS0dNc1pWdG1YU3htTEdFcEtYSmxkSFZ5YmlFeE8zSmxkSFZ5YmlFd2ZUdG5iMjluTG1GeWNtRjVMbU52ZFc1MFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MllYSWdaRDB3TzJkdmIyY3VZWEp5WVhrdVptOXlSV0ZqYUNoaExHWjFibU4wYVc5dUtHRXNaaXhuS1h0aUxtTmhiR3dvWXl4aExHWXNaeWttSmlzclpIMHNZeWs3Y21WMGRYSnVJR1I5TzF4dVoyOXZaeTVoY25KaGVTNW1hVzVrUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRpUFdkdmIyY3VZWEp5WVhrdVptbHVaRWx1WkdWNEtHRXNZaXhqS1R0eVpYUjFjbTRnTUQ1aVAyNTFiR3c2WjI5dlp5NXBjMU4wY21sdVp5aGhLVDloTG1Ob1lYSkJkQ2hpS1RwaFcySmRmVHRuYjI5bkxtRnljbUY1TG1acGJtUkpibVJsZUQxbWRXNWpkR2x2YmloaExHSXNZeWw3Wm05eUtIWmhjaUJrUFdFdWJHVnVaM1JvTEdVOVoyOXZaeTVwYzFOMGNtbHVaeWhoS1Q5aExuTndiR2wwS0Z3aVhDSXBPbUVzWmowd08yWThaRHRtS3lzcGFXWW9aaUJwYmlCbEppWmlMbU5oYkd3b1l5eGxXMlpkTEdZc1lTa3BjbVYwZFhKdUlHWTdjbVYwZFhKdUxURjlPMmR2YjJjdVlYSnlZWGt1Wm1sdVpGSnBaMmgwUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRpUFdkdmIyY3VZWEp5WVhrdVptbHVaRWx1WkdWNFVtbG5hSFFvWVN4aUxHTXBPM0psZEhWeWJpQXdQbUkvYm5Wc2JEcG5iMjluTG1selUzUnlhVzVuS0dFcFAyRXVZMmhoY2tGMEtHSXBPbUZiWWwxOU8xeHVaMjl2Wnk1aGNuSmhlUzVtYVc1a1NXNWtaWGhTYVdkb2REMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5WVM1c1pXNW5kR2dzWlQxbmIyOW5MbWx6VTNSeWFXNW5LR0VwUDJFdWMzQnNhWFFvWENKY0lpazZZVHRtYjNJb0xTMWtPekE4UFdRN1pDMHRLV2xtS0dRZ2FXNGdaU1ltWWk1allXeHNLR01zWlZ0a1hTeGtMR0VwS1hKbGRIVnliaUJrTzNKbGRIVnliaTB4ZlR0bmIyOW5MbUZ5Y21GNUxtTnZiblJoYVc1elBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJREE4UFdkdmIyY3VZWEp5WVhrdWFXNWtaWGhQWmloaExHSXBmVHRuYjI5bkxtRnljbUY1TG1selJXMXdkSGs5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SURBOVBXRXViR1Z1WjNSb2ZUdG5iMjluTG1GeWNtRjVMbU5zWldGeVBXWjFibU4wYVc5dUtHRXBlMmxtS0NGbmIyOW5MbWx6UVhKeVlYa29ZU2twWm05eUtIWmhjaUJpUFdFdWJHVnVaM1JvTFRFN01EdzlZanRpTFMwcFpHVnNaWFJsSUdGYllsMDdZUzVzWlc1bmRHZzlNSDA3WjI5dlp5NWhjbkpoZVM1cGJuTmxjblE5Wm5WdVkzUnBiMjRvWVN4aUtYdG5iMjluTG1GeWNtRjVMbU52Ym5SaGFXNXpLR0VzWWlsOGZHRXVjSFZ6YUNoaUtYMDdYRzVuYjI5bkxtRnljbUY1TG1sdWMyVnlkRUYwUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnljbUY1TG5Od2JHbGpaU2hoTEdNc01DeGlLWDA3WjI5dlp5NWhjbkpoZVM1cGJuTmxjblJCY25KaGVVRjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdG5iMjluTG5CaGNuUnBZV3dvWjI5dlp5NWhjbkpoZVM1emNHeHBZMlVzWVN4akxEQXBMbUZ3Y0d4NUtHNTFiR3dzWWlsOU8yZHZiMmN1WVhKeVlYa3VhVzV6WlhKMFFtVm1iM0psUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHQyWVhJZ1pEc3lQVDFoY21kMWJXVnVkSE11YkdWdVozUm9mSHd3UGloa1BXZHZiMmN1WVhKeVlYa3VhVzVrWlhoUFppaGhMR01wS1Q5aExuQjFjMmdvWWlrNloyOXZaeTVoY25KaGVTNXBibk5sY25SQmRDaGhMR0lzWkNsOU8yZHZiMmN1WVhKeVlYa3VjbVZ0YjNabFBXWjFibU4wYVc5dUtHRXNZaWw3WWoxbmIyOW5MbUZ5Y21GNUxtbHVaR1Y0VDJZb1lTeGlLVHQyWVhJZ1l6c29ZejB3UEQxaUtTWW1aMjl2Wnk1aGNuSmhlUzV5WlcxdmRtVkJkQ2hoTEdJcE8zSmxkSFZ5YmlCamZUdGNibWR2YjJjdVlYSnlZWGt1Y21WdGIzWmxUR0Z6ZEQxbWRXNWpkR2x2YmloaExHSXBlMkk5WjI5dlp5NWhjbkpoZVM1c1lYTjBTVzVrWlhoUFppaGhMR0lwTzNKbGRIVnliaUF3UEQxaVB5aG5iMjluTG1GeWNtRjVMbkpsYlc5MlpVRjBLR0VzWWlrc0lUQXBPaUV4ZlR0bmIyOW5MbUZ5Y21GNUxuSmxiVzkyWlVGMFBXWjFibU4wYVc5dUtHRXNZaWw3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENodWRXeHNJVDFoTG14bGJtZDBhQ2s3Y21WMGRYSnVJREU5UFVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6Y0d4cFkyVXVZMkZzYkNoaExHSXNNU2t1YkdWdVozUm9mVHRuYjI5bkxtRnljbUY1TG5KbGJXOTJaVWxtUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRpUFdkdmIyY3VZWEp5WVhrdVptbHVaRWx1WkdWNEtHRXNZaXhqS1R0eVpYUjFjbTRnTUR3OVlqOG9aMjl2Wnk1aGNuSmhlUzV5WlcxdmRtVkJkQ2hoTEdJcExDRXdLVG9oTVgwN1oyOXZaeTVoY25KaGVTNXlaVzF2ZG1WQmJHeEpaajFtZFc1amRHbHZiaWhoTEdJc1l5bDdkbUZ5SUdROU1EdG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyaFNhV2RvZENoaExHWjFibU4wYVc5dUtHVXNaaWw3WWk1allXeHNLR01zWlN4bUxHRXBKaVpuYjI5bkxtRnljbUY1TG5KbGJXOTJaVUYwS0dFc1ppa21KbVFySzMwcE8zSmxkSFZ5YmlCa2ZUdGNibWR2YjJjdVlYSnlZWGt1WTI5dVkyRjBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJCY25KaGVTNXdjbTkwYjNSNWNHVXVZMjl1WTJGMExtRndjR3g1S0Z0ZExHRnlaM1Z0Wlc1MGN5bDlPMmR2YjJjdVlYSnlZWGt1YW05cGJqMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdRWEp5WVhrdWNISnZkRzkwZVhCbExtTnZibU5oZEM1aGNIQnNlU2hiWFN4aGNtZDFiV1Z1ZEhNcGZUdG5iMjluTG1GeWNtRjVMblJ2UVhKeVlYazlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlZUzVzWlc1bmRHZzdhV1lvTUR4aUtYdG1iM0lvZG1GeUlHTTlRWEp5WVhrb1lpa3NaRDB3TzJROFlqdGtLeXNwWTF0a1hUMWhXMlJkTzNKbGRIVnliaUJqZlhKbGRIVnlibHRkZlR0bmIyOW5MbUZ5Y21GNUxtTnNiMjVsUFdkdmIyY3VZWEp5WVhrdWRHOUJjbkpoZVR0bmIyOW5MbUZ5Y21GNUxtVjRkR1Z1WkQxbWRXNWpkR2x2YmloaExHSXBlMlp2Y2loMllYSWdZejB4TzJNOFlYSm5kVzFsYm5SekxteGxibWQwYUR0akt5c3BlM1poY2lCa1BXRnlaM1Z0Wlc1MGMxdGpYVHRwWmlobmIyOW5MbWx6UVhKeVlYbE1hV3RsS0dRcEtYdDJZWElnWlQxaExteGxibWQwYUh4OE1DeG1QV1F1YkdWdVozUm9mSHd3TzJFdWJHVnVaM1JvUFdVclpqdG1iM0lvZG1GeUlHYzlNRHRuUEdZN1p5c3JLV0ZiWlN0blhUMWtXMmRkZldWc2MyVWdZUzV3ZFhOb0tHUXBmWDA3WEc1bmIyOW5MbUZ5Y21GNUxuTndiR2xqWlQxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFdFdWJHVnVaM1JvS1R0eVpYUjFjbTRnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk53YkdsalpTNWhjSEJzZVNoaExHZHZiMmN1WVhKeVlYa3VjMnhwWTJVb1lYSm5kVzFsYm5SekxERXBLWDA3WjI5dlp5NWhjbkpoZVM1emJHbGpaVDFtZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2h1ZFd4c0lUMWhMbXhsYm1kMGFDazdjbVYwZFhKdUlESStQV0Z5WjNWdFpXNTBjeTVzWlc1bmRHZy9RWEp5WVhrdWNISnZkRzkwZVhCbExuTnNhV05sTG1OaGJHd29ZU3hpS1RwQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoaExHSXNZeWw5TzF4dVoyOXZaeTVoY25KaGVTNXlaVzF2ZG1WRWRYQnNhV05oZEdWelBXWjFibU4wYVc5dUtHRXNZaXhqS1h0aVBXSjhmR0U3ZG1GeUlHUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWFYTlBZbXBsWTNRb1lTay9YQ0p2WENJcloyOXZaeTVuWlhSVmFXUW9ZU2s2S0hSNWNHVnZaaUJoS1M1amFHRnlRWFFvTUNrcllYMDdZejFqZkh4a08yUTllMzA3Wm05eUtIWmhjaUJsUFRBc1pqMHdPMlk4WVM1c1pXNW5kR2c3S1h0MllYSWdaejFoVzJZcksxMHNhRDFqS0djcE8wOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaGtMR2dwZkh3b1pGdG9YVDBoTUN4aVcyVXJLMTA5WnlsOVlpNXNaVzVuZEdnOVpYMDdaMjl2Wnk1aGNuSmhlUzVpYVc1aGNubFRaV0Z5WTJnOVpuVnVZM1JwYjI0b1lTeGlMR01wZTNKbGRIVnliaUJuYjI5bkxtRnljbUY1TG1KcGJtRnllVk5sWVhKamFGOG9ZU3hqZkh4bmIyOW5MbUZ5Y21GNUxtUmxabUYxYkhSRGIyMXdZWEpsTENFeExHSXBmVHRuYjI5bkxtRnljbUY1TG1KcGJtRnllVk5sYkdWamREMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdkdmIyY3VZWEp5WVhrdVltbHVZWEo1VTJWaGNtTm9YeWhoTEdJc0lUQXNkbTlwWkNBd0xHTXBmVHRjYm1kdmIyY3VZWEp5WVhrdVltbHVZWEo1VTJWaGNtTm9YejFtZFc1amRHbHZiaWhoTEdJc1l5eGtMR1VwZTJadmNpaDJZWElnWmowd0xHYzlZUzVzWlc1bmRHZ3NhRHRtUEdjN0tYdDJZWElnYXoxbUsyYytQakU3ZG1GeUlHdzlZejlpTG1OaGJHd29aU3hoVzJ0ZExHc3NZU2s2WWloa0xHRmJhMTBwT3pBOGJEOW1QV3NyTVRvb1p6MXJMR2c5SVd3cGZYSmxkSFZ5YmlCb1AyWTZmbVo5TzJkdmIyY3VZWEp5WVhrdWMyOXlkRDFtZFc1amRHbHZiaWhoTEdJcGUyRXVjMjl5ZENoaWZIeG5iMjluTG1GeWNtRjVMbVJsWm1GMWJIUkRiMjF3WVhKbEtYMDdaMjl2Wnk1aGNuSmhlUzV6ZEdGaWJHVlRiM0owUFdaMWJtTjBhVzl1S0dFc1lpbDdabTl5S0haaGNpQmpQVUZ5Y21GNUtHRXViR1Z1WjNSb0tTeGtQVEE3WkR4aExteGxibWQwYUR0a0t5c3BZMXRrWFQxN2FXNWtaWGc2WkN4MllXeDFaVHBoVzJSZGZUdDJZWElnWlQxaWZIeG5iMjluTG1GeWNtRjVMbVJsWm1GMWJIUkRiMjF3WVhKbE8yZHZiMmN1WVhKeVlYa3VjMjl5ZENoakxHWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR1VvWVM1MllXeDFaU3hpTG5aaGJIVmxLWHg4WVM1cGJtUmxlQzFpTG1sdVpHVjRmU2s3Wm05eUtHUTlNRHRrUEdFdWJHVnVaM1JvTzJRckt5bGhXMlJkUFdOYlpGMHVkbUZzZFdWOU8xeHVaMjl2Wnk1aGNuSmhlUzV6YjNKMFFubExaWGs5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BXTjhmR2R2YjJjdVlYSnlZWGt1WkdWbVlYVnNkRU52YlhCaGNtVTdaMjl2Wnk1aGNuSmhlUzV6YjNKMEtHRXNablZ1WTNScGIyNG9ZU3hqS1h0eVpYUjFjbTRnWkNoaUtHRXBMR0lvWXlrcGZTbDlPMmR2YjJjdVlYSnlZWGt1YzI5eWRFOWlhbVZqZEhOQ2VVdGxlVDFtZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGNuSmhlUzV6YjNKMFFubExaWGtvWVN4bWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lWdGlYWDBzWXlsOU8yZHZiMmN1WVhKeVlYa3VhWE5UYjNKMFpXUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUySTlZbng4WjI5dlp5NWhjbkpoZVM1a1pXWmhkV3gwUTI5dGNHRnlaVHRtYjNJb2RtRnlJR1E5TVR0a1BHRXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlZaWhoVzJRdE1WMHNZVnRrWFNrN2FXWW9NRHhsZkh3d1BUMWxKaVpqS1hKbGRIVnliaUV4ZlhKbGRIVnliaUV3ZlR0Y2JtZHZiMmN1WVhKeVlYa3VaWEYxWVd4elBXWjFibU4wYVc5dUtHRXNZaXhqS1h0cFppZ2haMjl2Wnk1cGMwRnljbUY1VEdsclpTaGhLWHg4SVdkdmIyY3VhWE5CY25KaGVVeHBhMlVvWWlsOGZHRXViR1Z1WjNSb0lUMWlMbXhsYm1kMGFDbHlaWFIxY200aE1UdDJZWElnWkQxaExteGxibWQwYUR0alBXTjhmR2R2YjJjdVlYSnlZWGt1WkdWbVlYVnNkRU52YlhCaGNtVkZjWFZoYkdsMGVUdG1iM0lvZG1GeUlHVTlNRHRsUEdRN1pTc3JLV2xtS0NGaktHRmJaVjBzWWx0bFhTa3BjbVYwZFhKdUlURTdjbVYwZFhKdUlUQjlPMmR2YjJjdVlYSnlZWGt1WTI5dGNHRnlaVE05Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMk05WTN4OFoyOXZaeTVoY25KaGVTNWtaV1poZFd4MFEyOXRjR0Z5WlR0bWIzSW9kbUZ5SUdROVRXRjBhQzV0YVc0b1lTNXNaVzVuZEdnc1lpNXNaVzVuZEdncExHVTlNRHRsUEdRN1pTc3JLWHQyWVhJZ1pqMWpLR0ZiWlYwc1lsdGxYU2s3YVdZb01DRTlaaWx5WlhSMWNtNGdabjF5WlhSMWNtNGdaMjl2Wnk1aGNuSmhlUzVrWldaaGRXeDBRMjl0Y0dGeVpTaGhMbXhsYm1kMGFDeGlMbXhsYm1kMGFDbDlPMmR2YjJjdVlYSnlZWGt1WkdWbVlYVnNkRU52YlhCaGNtVTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWVQ1aVB6RTZZVHhpUHkweE9qQjlPMXh1WjI5dlp5NWhjbkpoZVM1cGJuWmxjbk5sUkdWbVlYVnNkRU52YlhCaGNtVTlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTR0WjI5dlp5NWhjbkpoZVM1a1pXWmhkV3gwUTI5dGNHRnlaU2hoTEdJcGZUdG5iMjluTG1GeWNtRjVMbVJsWm1GMWJIUkRiMjF3WVhKbFJYRjFZV3hwZEhrOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdZVDA5UFdKOU8yZHZiMmN1WVhKeVlYa3VZbWx1WVhKNVNXNXpaWEowUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRqUFdkdmIyY3VZWEp5WVhrdVltbHVZWEo1VTJWaGNtTm9LR0VzWWl4aktUdHlaWFIxY200Z01ENWpQeWhuYjI5bkxtRnljbUY1TG1sdWMyVnlkRUYwS0dFc1lpd3RLR01yTVNrcExDRXdLVG9oTVgwN1oyOXZaeTVoY25KaGVTNWlhVzVoY25sU1pXMXZkbVU5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkk5WjI5dlp5NWhjbkpoZVM1aWFXNWhjbmxUWldGeVkyZ29ZU3hpTEdNcE8zSmxkSFZ5YmlBd1BEMWlQMmR2YjJjdVlYSnlZWGt1Y21WdGIzWmxRWFFvWVN4aUtUb2hNWDA3WEc1bmIyOW5MbUZ5Y21GNUxtSjFZMnRsZEQxbWRXNWpkR2x2YmloaExHSXNZeWw3Wm05eUtIWmhjaUJrUFh0OUxHVTlNRHRsUEdFdWJHVnVaM1JvTzJVckt5bDdkbUZ5SUdZOVlWdGxYU3huUFdJdVkyRnNiQ2hqTEdZc1pTeGhLVHRuYjI5bkxtbHpSR1ZtS0djcEppWW9aRnRuWFh4OEtHUmJaMTA5VzEwcEtTNXdkWE5vS0dZcGZYSmxkSFZ5YmlCa2ZUdG5iMjluTG1GeWNtRjVMblJ2VDJKcVpXTjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDJZWElnWkQxN2ZUdG5iMjluTG1GeWNtRjVMbVp2Y2tWaFkyZ29ZU3htZFc1amRHbHZiaWhsTEdZcGUyUmJZaTVqWVd4c0tHTXNaU3htTEdFcFhUMWxmU2s3Y21WMGRYSnVJR1I5TzJkdmIyY3VZWEp5WVhrdWNtRnVaMlU5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BWdGRMR1U5TUN4bVBXRTdZejFqZkh3eE8zWnZhV1FnTUNFOVBXSW1KaWhsUFdFc1pqMWlLVHRwWmlnd1BtTXFLR1l0WlNrcGNtVjBkWEp1VzEwN2FXWW9NRHhqS1dadmNpaGhQV1U3WVR4bU8yRXJQV01wWkM1d2RYTm9LR0VwTzJWc2MyVWdabTl5S0dFOVpUdGhQbVk3WVNzOVl5bGtMbkIxYzJnb1lTazdjbVYwZFhKdUlHUjlPMXh1WjI5dlp5NWhjbkpoZVM1eVpYQmxZWFE5Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTTlXMTBzWkQwd08yUThZanRrS3lzcFkxdGtYVDFoTzNKbGRIVnliaUJqZlR0bmIyOW5MbUZ5Y21GNUxtWnNZWFIwWlc0OVpuVnVZM1JwYjI0b1lTbDdabTl5S0haaGNpQmlQVnRkTEdNOU1EdGpQR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdZeXNyS1h0MllYSWdaRDFoY21kMWJXVnVkSE5iWTEwN2FXWW9aMjl2Wnk1cGMwRnljbUY1S0dRcEtXWnZjaWgyWVhJZ1pUMHdPMlU4WkM1c1pXNW5kR2c3WlNzOU9ERTVNaWw3ZG1GeUlHWTlaMjl2Wnk1aGNuSmhlUzV6YkdsalpTaGtMR1VzWlNzNE1Ua3lLVHRtUFdkdmIyY3VZWEp5WVhrdVpteGhkSFJsYmk1aGNIQnNlU2h1ZFd4c0xHWXBPMlp2Y2loMllYSWdaejB3TzJjOFppNXNaVzVuZEdnN1p5c3JLV0l1Y0hWemFDaG1XMmRkS1gxbGJITmxJR0l1Y0hWemFDaGtLWDF5WlhSMWNtNGdZbjA3WEc1bmIyOW5MbUZ5Y21GNUxuSnZkR0YwWlQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvYm5Wc2JDRTlZUzVzWlc1bmRHZ3BPMkV1YkdWdVozUm9KaVlvWWlVOVlTNXNaVzVuZEdnc01EeGlQMEZ5Y21GNUxuQnliM1J2ZEhsd1pTNTFibk5vYVdaMExtRndjR3g1S0dFc1lTNXpjR3hwWTJVb0xXSXNZaWtwT2pBK1lpWW1RWEp5WVhrdWNISnZkRzkwZVhCbExuQjFjMmd1WVhCd2JIa29ZU3hoTG5Od2JHbGpaU2d3TEMxaUtTa3BPM0psZEhWeWJpQmhmVHRuYjI5bkxtRnljbUY1TG0xdmRtVkpkR1Z0UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXSW1KbUk4WVM1c1pXNW5kR2dwTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb01EdzlZeVltWXp4aExteGxibWQwYUNrN1lqMUJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMzQnNhV05sTG1OaGJHd29ZU3hpTERFcE8wRnljbUY1TG5CeWIzUnZkSGx3WlM1emNHeHBZMlV1WTJGc2JDaGhMR01zTUN4aVd6QmRLWDA3WEc1bmIyOW5MbUZ5Y21GNUxucHBjRDFtZFc1amRHbHZiaWhoS1h0cFppZ2hZWEpuZFcxbGJuUnpMbXhsYm1kMGFDbHlaWFIxY201YlhUdG1iM0lvZG1GeUlHSTlXMTBzWXoxaGNtZDFiV1Z1ZEhOYk1GMHViR1Z1WjNSb0xHUTlNVHRrUEdGeVozVnRaVzUwY3k1c1pXNW5kR2c3WkNzcktXRnlaM1Z0Wlc1MGMxdGtYUzVzWlc1bmRHZzhZeVltS0dNOVlYSm5kVzFsYm5SelcyUmRMbXhsYm1kMGFDazdabTl5S0dROU1EdGtQR003WkNzcktYdG1iM0lvZG1GeUlHVTlXMTBzWmowd08yWThZWEpuZFcxbGJuUnpMbXhsYm1kMGFEdG1LeXNwWlM1d2RYTm9LR0Z5WjNWdFpXNTBjMXRtWFZ0a1hTazdZaTV3ZFhOb0tHVXBmWEpsZEhWeWJpQmlmVHRuYjI5bkxtRnljbUY1TG5Ob2RXWm1iR1U5Wm5WdVkzUnBiMjRvWVN4aUtYdGlQV0o4ZkUxaGRHZ3VjbUZ1Wkc5dE8yWnZjaWgyWVhJZ1l6MWhMbXhsYm1kMGFDMHhPekE4WXp0akxTMHBlM1poY2lCa1BVMWhkR2d1Wm14dmIzSW9ZaWdwS2loakt6RXBLU3hsUFdGYlkxMDdZVnRqWFQxaFcyUmRPMkZiWkYwOVpYMTlPMmR2YjJjdVlYSnlZWGt1WTI5d2VVSjVTVzVrWlhnOVpuVnVZM1JwYjI0b1lTeGlLWHQyWVhJZ1l6MWJYVHRuYjI5bkxtRnljbUY1TG1admNrVmhZMmdvWWl4bWRXNWpkR2x2YmloaUtYdGpMbkIxYzJnb1lWdGlYU2w5S1R0eVpYUjFjbTRnWTMwN1hHNW5iMjluTG1GeWNtRjVMbU52Ym1OaGRFMWhjRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdjbVYwZFhKdUlHZHZiMmN1WVhKeVlYa3VZMjl1WTJGMExtRndjR3g1S0Z0ZExHZHZiMmN1WVhKeVlYa3ViV0Z3S0dFc1lpeGpLU2w5TzJkdmIyY3VZM0o1Y0hROWUzMDdaMjl2Wnk1amNubHdkQzV6ZEhKcGJtZFViMEo1ZEdWQmNuSmhlVDFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJOVcxMHNZejB3TEdROU1EdGtQR0V1YkdWdVozUm9PMlFyS3lsN2RtRnlJR1U5WVM1amFHRnlRMjlrWlVGMEtHUXBPekkxTlR4bEppWW9ZbHRqS3l0ZFBXVW1NalUxTEdVK1BqMDRLVHRpVzJNcksxMDlaWDF5WlhSMWNtNGdZbjA3WjI5dlp5NWpjbmx3ZEM1aWVYUmxRWEp5WVhsVWIxTjBjbWx1WnoxbWRXNWpkR2x2YmloaEtYdHBaaWc0TVRreVBqMWhMbXhsYm1kMGFDbHlaWFIxY200Z1UzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTNWhjSEJzZVNodWRXeHNMR0VwTzJadmNpaDJZWElnWWoxY0lsd2lMR005TUR0alBHRXViR1Z1WjNSb08yTXJQVGd4T1RJcGUzWmhjaUJrUFdkdmIyY3VZWEp5WVhrdWMyeHBZMlVvWVN4akxHTXJPREU1TWlrN1lpczlVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaUzVoY0hCc2VTaHVkV3hzTEdRcGZYSmxkSFZ5YmlCaWZUdGNibWR2YjJjdVkzSjVjSFF1WW5sMFpVRnljbUY1Vkc5SVpYZzlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NWhjbkpoZVM1dFlYQW9ZU3htZFc1amRHbHZiaWhoS1h0aFBXRXVkRzlUZEhKcGJtY29NVFlwTzNKbGRIVnliaUF4UEdFdWJHVnVaM1JvUDJFNlhDSXdYQ0lyWVgwcExtcHZhVzRvWW54OFhDSmNJaWw5TzJkdmIyY3VZM0o1Y0hRdWFHVjRWRzlDZVhSbFFYSnlZWGs5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ3dQVDFoTG14bGJtZDBhQ1V5TEZ3aVMyVjVJSE4wY21sdVp5QnNaVzVuZEdnZ2JYVnpkQ0JpWlNCdGRXeDBhWEJzWlNCdlppQXlYQ0lwTzJadmNpaDJZWElnWWoxYlhTeGpQVEE3WXp4aExteGxibWQwYUR0akt6MHlLV0l1Y0hWemFDaHdZWEp6WlVsdWRDaGhMbk4xWW5OMGNtbHVaeWhqTEdNck1pa3NNVFlwS1R0eVpYUjFjbTRnWW4wN1hHNW5iMjluTG1OeWVYQjBMbk4wY21sdVoxUnZWWFJtT0VKNWRHVkJjbkpoZVQxbWRXNWpkR2x2YmloaEtYdG1iM0lvZG1GeUlHSTlXMTBzWXowd0xHUTlNRHRrUEdFdWJHVnVaM1JvTzJRckt5bDdkbUZ5SUdVOVlTNWphR0Z5UTI5a1pVRjBLR1FwT3pFeU9ENWxQMkpiWXlzclhUMWxPaWd5TURRNFBtVS9ZbHRqS3l0ZFBXVStQalo4TVRreU9pZzFOVEk1TmowOUtHVW1OalExTVRJcEppWmtLekU4WVM1c1pXNW5kR2dtSmpVMk16SXdQVDBvWVM1amFHRnlRMjlrWlVGMEtHUXJNU2ttTmpRMU1USXBQeWhsUFRZMU5UTTJLeWdvWlNZeE1ESXpLVHc4TVRBcEt5aGhMbU5vWVhKRGIyUmxRWFFvS3l0a0tTWXhNREl6S1N4aVcyTXJLMTA5WlQ0K01UaDhNalF3TEdKYll5c3JYVDFsUGo0eE1pWTJNM3d4TWpncE9tSmJZeXNyWFQxbFBqNHhNbnd5TWpRc1lsdGpLeXRkUFdVK1BqWW1Oak44TVRJNEtTeGlXMk1ySzEwOVpTWTJNM3d4TWpncGZYSmxkSFZ5YmlCaWZUdGNibWR2YjJjdVkzSjVjSFF1ZFhSbU9FSjVkR1ZCY25KaGVWUnZVM1J5YVc1blBXWjFibU4wYVc5dUtHRXBlMlp2Y2loMllYSWdZajFiWFN4alBUQXNaRDB3TzJNOFlTNXNaVzVuZEdnN0tYdDJZWElnWlQxaFcyTXJLMTA3YVdZb01USTRQbVVwWWx0a0t5dGRQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvWlNrN1pXeHpaU0JwWmlneE9URThaU1ltTWpJMFBtVXBlM1poY2lCbVBXRmJZeXNyWFR0aVcyUXJLMTA5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNnb1pTWXpNU2s4UERaOFppWTJNeWw5Wld4elpTQnBaaWd5TXprOFpTWW1NelkxUG1VcGUyWTlZVnRqS3l0ZE8zWmhjaUJuUFdGYll5c3JYU3hvUFdGYll5c3JYVHRsUFNnb1pTWTNLVHc4TVRoOEtHWW1Oak1wUER3eE1ud29aeVkyTXlrOFBEWjhhQ1kyTXlrdE5qVTFNelk3WWx0a0t5dGRQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvTlRVeU9UWXJLR1UrUGpFd0tTazdZbHRrS3l0ZFBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9OVFl6TWpBcktHVW1NVEF5TXlrcGZXVnNjMlVnWmoxaFcyTXJLMTBzWnoxaFcyTXJLMTBzWWx0a0t5dGRQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvS0dVbU1UVXBQRHd4TW53b1ppWTJNeWs4UERaOFp5WTJNeWw5Y21WMGRYSnVJR0l1YW05cGJpaGNJbHdpS1gwN1hHNW5iMjluTG1OeWVYQjBMbmh2Y2tKNWRHVkJjbkpoZVQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVM1c1pXNW5kR2c5UFdJdWJHVnVaM1JvTEZ3aVdFOVNJR0Z5Y21GNUlHeGxibWQwYUhNZ2JYVnpkQ0J0WVhSamFGd2lLVHRtYjNJb2RtRnlJR005VzEwc1pEMHdPMlE4WVM1c1pXNW5kR2c3WkNzcktXTXVjSFZ6YUNoaFcyUmRYbUpiWkYwcE8zSmxkSFZ5YmlCamZUdG5iMjluTG1SdmJTNWhjM05sY25SelBYdDlPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTk1iMk5oZEdsdmJqMW1kVzVqZEdsdmJpaGhLWHRwWmlobmIyOW5MbUZ6YzJWeWRITXVSVTVCUWt4RlgwRlRVMFZTVkZNcGUzWmhjaUJpUFdkdmIyY3VaRzl0TG1GemMyVnlkSE11WjJWMFYybHVaRzkzWHloaEtUdGlKaVlvSVdGOGZDRW9ZU0JwYm5OMFlXNWpaVzltSUdJdVRHOWpZWFJwYjI0cEppWmhJR2x1YzNSaGJtTmxiMllnWWk1RmJHVnRaVzUwS1NZbVoyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkJjbWQxYldWdWRDQnBjeUJ1YjNRZ1lTQk1iMk5oZEdsdmJpQW9iM0lnWVNCdWIyNHRSV3hsYldWdWRDQnRiMk5yS1RzZ1oyOTBPaUFsYzF3aUxHZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVpHVmlkV2RUZEhKcGJtZEdiM0pVZVhCbFh5aGhLU2w5Y21WMGRYSnVJR0Y5TzF4dVoyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh6MW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHZHZiMmN1WVhOelpYSjBjeTVGVGtGQ1RFVmZRVk5UUlZKVVV5bDdkbUZ5SUdNOVoyOXZaeTVrYjIwdVlYTnpaWEowY3k1blpYUlhhVzVrYjNkZktHRXBPMk1tSmx3aWRXNWtaV1pwYm1Wa1hDSWhQWFI1Y0dWdlppQmpXMkpkSmlZb1lTWW1LR0VnYVc1emRHRnVZMlZ2WmlCalcySmRmSHdoS0dFZ2FXNXpkR0Z1WTJWdlppQmpMa3h2WTJGMGFXOXVmSHhoSUdsdWMzUmhibU5sYjJZZ1l5NUZiR1Z0Wlc1MEtTbDhmR2R2YjJjdVlYTnpaWEowY3k1bVlXbHNLRndpUVhKbmRXMWxiblFnYVhNZ2JtOTBJR0VnSlhNZ0tHOXlJR0VnYm05dUxVVnNaVzFsYm5Rc0lHNXZiaTFNYjJOaGRHbHZiaUJ0YjJOcktUc2daMjkwT2lBbGMxd2lMR0lzWjI5dlp5NWtiMjB1WVhOelpYSjBjeTVrWldKMVoxTjBjbWx1WjBadmNsUjVjR1ZmS0dFcEtTbDljbVYwZFhKdUlHRjlPMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNUVc1amFHOXlSV3hsYldWdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwVnNaVzFsYm5SVWVYQmxYeWhoTEZ3aVNGUk5URUZ1WTJodmNrVnNaVzFsYm5SY0lpbDlPMXh1WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4Q2RYUjBiMjVGYkdWdFpXNTBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpSV3hsYldWdWRGUjVjR1ZmS0dFc1hDSklWRTFNUW5WMGRHOXVSV3hsYldWdWRGd2lLWDA3WjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMGhVVFV4TWFXNXJSV3hsYldWdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwVnNaVzFsYm5SVWVYQmxYeWhoTEZ3aVNGUk5URXhwYm10RmJHVnRaVzUwWENJcGZUdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URWx0WVdkbFJXeGxiV1Z1ZEQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh5aGhMRndpU0ZSTlRFbHRZV2RsUld4bGJXVnVkRndpS1gwN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeEJkV1JwYjBWc1pXMWxiblE5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5GYkdWdFpXNTBWSGx3WlY4b1lTeGNJa2hVVFV4QmRXUnBiMFZzWlcxbGJuUmNJaWw5TzF4dVoyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeFdhV1JsYjBWc1pXMWxiblE5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5GYkdWdFpXNTBWSGx3WlY4b1lTeGNJa2hVVFV4V2FXUmxiMFZzWlcxbGJuUmNJaWw5TzJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVNXNXdkWFJGYkdWdFpXNTBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpSV3hsYldWdWRGUjVjR1ZmS0dFc1hDSklWRTFNU1c1d2RYUkZiR1Z0Wlc1MFhDSXBmVHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEZSbGVIUkJjbVZoUld4bGJXVnVkRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMFZzWlcxbGJuUlVlWEJsWHloaExGd2lTRlJOVEZSbGVIUkJjbVZoUld4bGJXVnVkRndpS1gwN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeERZVzUyWVhORmJHVnRaVzUwUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6Uld4bGJXVnVkRlI1Y0dWZktHRXNYQ0pJVkUxTVEyRnVkbUZ6Uld4bGJXVnVkRndpS1gwN1hHNW5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URVZ0WW1Wa1JXeGxiV1Z1ZEQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBWc1pXMWxiblJVZVhCbFh5aGhMRndpU0ZSTlRFVnRZbVZrUld4bGJXVnVkRndpS1gwN1oyOXZaeTVrYjIwdVlYTnpaWEowY3k1aGMzTmxjblJKYzBoVVRVeEdiM0p0Uld4bGJXVnVkRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NWtiMjB1WVhOelpYSjBjeTVoYzNObGNuUkpjMFZzWlcxbGJuUlVlWEJsWHloaExGd2lTRlJOVEVadmNtMUZiR1Z0Wlc1MFhDSXBmVHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEVaeVlXMWxSV3hsYldWdWREMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwVnNaVzFsYm5SVWVYQmxYeWhoTEZ3aVNGUk5URVp5WVcxbFJXeGxiV1Z1ZEZ3aUtYMDdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwaFVUVXhKUm5KaGJXVkZiR1Z0Wlc1MFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselJXeGxiV1Z1ZEZSNWNHVmZLR0VzWENKSVZFMU1TVVp5WVcxbFJXeGxiV1Z1ZEZ3aUtYMDdYRzVuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEU5aWFtVmpkRVZzWlcxbGJuUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTkZiR1Z0Wlc1MFZIbHdaVjhvWVN4Y0lraFVUVXhQWW1wbFkzUkZiR1Z0Wlc1MFhDSXBmVHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEZOamNtbHdkRVZzWlcxbGJuUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTkZiR1Z0Wlc1MFZIbHdaVjhvWVN4Y0lraFVUVXhUWTNKcGNIUkZiR1Z0Wlc1MFhDSXBmVHRjYm1kdmIyY3VaRzl0TG1GemMyVnlkSE11WkdWaWRXZFRkSEpwYm1kR2IzSlVlWEJsWHoxbWRXNWpkR2x2YmloaEtYdHBaaWhuYjI5bkxtbHpUMkpxWldOMEtHRXBLWFJ5ZVh0eVpYUjFjbTRnWVM1amIyNXpkSEoxWTNSdmNpNWthWE53YkdGNVRtRnRaWHg4WVM1amIyNXpkSEoxWTNSdmNpNXVZVzFsZkh4UFltcGxZM1F1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29ZU2w5WTJGMFkyZ29ZaWw3Y21WMGRYSnVYQ0k4YjJKcVpXTjBJR052ZFd4a0lHNXZkQ0JpWlNCemRISnBibWRwWm1sbFpENWNJbjFsYkhObElISmxkSFZ5YmlCMmIybGtJREE5UFQxaFAxd2lkVzVrWldacGJtVmtYQ0k2Ym5Wc2JEMDlQV0UvWENKdWRXeHNYQ0k2ZEhsd1pXOW1JR0Y5TzJkdmIyY3VaRzl0TG1GemMyVnlkSE11WjJWMFYybHVaRzkzWHoxbWRXNWpkR2x2YmloaEtYdDBjbmw3ZG1GeUlHSTlZU1ltWVM1dmQyNWxja1J2WTNWdFpXNTBMR005WWlZbUtHSXVaR1ZtWVhWc2RGWnBaWGQ4ZkdJdWNHRnlaVzUwVjJsdVpHOTNLVHRqUFdOOGZHZHZiMmN1WjJ4dlltRnNPMmxtS0dNdVJXeGxiV1Z1ZENZbVl5NU1iMk5oZEdsdmJpbHlaWFIxY200Z1kzMWpZWFJqYUNoa0tYdDljbVYwZFhKdUlHNTFiR3g5TzJkdmIyY3VablZ1WTNScGIyNXpQWHQ5TzJkdmIyY3VablZ1WTNScGIyNXpMbU52Ym5OMFlXNTBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJoZlgwN1oyOXZaeTVtZFc1amRHbHZibk11UmtGTVUwVTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGhNWDA3WjI5dlp5NW1kVzVqZEdsdmJuTXVWRkpWUlQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlFd2ZUdG5iMjluTG1aMWJtTjBhVzl1Y3k1T1ZVeE1QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJRzUxYkd4OU8yZHZiMmN1Wm5WdVkzUnBiMjV6TG1sa1pXNTBhWFI1UFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHRjlPMmR2YjJjdVpuVnVZM1JwYjI1ekxtVnljbTl5UFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbWRXNWpkR2x2YmlncGUzUm9jbTkzSUVWeWNtOXlLR0VwTzMxOU8yZHZiMmN1Wm5WdVkzUnBiMjV6TG1aaGFXdzlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR1oxYm1OMGFXOXVLQ2w3ZEdoeWIzY2dZVHQ5ZlR0Y2JtZHZiMmN1Wm5WdVkzUnBiMjV6TG14dlkyczlablZ1WTNScGIyNG9ZU3hpS1h0aVBXSjhmREE3Y21WMGRYSnVJR1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR0V1WVhCd2JIa29kR2hwY3l4QmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoaGNtZDFiV1Z1ZEhNc01DeGlLU2w5ZlR0bmIyOW5MbVoxYm1OMGFXOXVjeTV1ZEdnOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHRnlaM1Z0Wlc1MGMxdGhYWDE5TzJkdmIyY3VablZ1WTNScGIyNXpMbkJoY25ScFlXeFNhV2RvZEQxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBVRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHRnlaM1Z0Wlc1MGN5d3hLVHR5WlhSMWNtNGdablZ1WTNScGIyNG9LWHQyWVhJZ1lqMUJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXBPMkl1Y0hWemFDNWhjSEJzZVNoaUxHTXBPM0psZEhWeWJpQmhMbUZ3Y0d4NUtIUm9hWE1zWWlsOWZUdG5iMjluTG1aMWJtTjBhVzl1Y3k1M2FYUm9VbVYwZFhKdVZtRnNkV1U5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTVtZFc1amRHbHZibk11YzJWeGRXVnVZMlVvWVN4bmIyOW5MbVoxYm1OMGFXOXVjeTVqYjI1emRHRnVkQ2hpS1NsOU8xeHVaMjl2Wnk1bWRXNWpkR2x2Ym5NdVpYRjFZV3hVYnoxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQm1kVzVqZEdsdmJpaGpLWHR5WlhSMWNtNGdZajloUFQxak9tRTlQVDFqZlgwN1oyOXZaeTVtZFc1amRHbHZibk11WTI5dGNHOXpaVDFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFdGeVozVnRaVzUwY3l4a1BXTXViR1Z1WjNSb08zSmxkSFZ5YmlCbWRXNWpkR2x2YmlncGUzWmhjaUJoTzJRbUppaGhQV05iWkMweFhTNWhjSEJzZVNoMGFHbHpMR0Z5WjNWdFpXNTBjeWtwTzJadmNpaDJZWElnWWoxa0xUSTdNRHc5WWp0aUxTMHBZVDFqVzJKZExtTmhiR3dvZEdocGN5eGhLVHR5WlhSMWNtNGdZWDE5TzJkdmIyY3VablZ1WTNScGIyNXpMbk5sY1hWbGJtTmxQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQV0Z5WjNWdFpXNTBjeXhqUFdJdWJHVnVaM1JvTzNKbGRIVnliaUJtZFc1amRHbHZiaWdwZTJadmNpaDJZWElnWVN4bFBUQTdaVHhqTzJVckt5bGhQV0piWlYwdVlYQndiSGtvZEdocGN5eGhjbWQxYldWdWRITXBPM0psZEhWeWJpQmhmWDA3WEc1bmIyOW5MbVoxYm1OMGFXOXVjeTVoYm1ROVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVlYSm5kVzFsYm5SekxHTTlZaTVzWlc1bmRHZzdjbVYwZFhKdUlHWjFibU4wYVc5dUtDbDdabTl5S0haaGNpQmhQVEE3WVR4ak8yRXJLeWxwWmlnaFlsdGhYUzVoY0hCc2VTaDBhR2x6TEdGeVozVnRaVzUwY3lrcGNtVjBkWEp1SVRFN2NtVjBkWEp1SVRCOWZUdG5iMjluTG1aMWJtTjBhVzl1Y3k1dmNqMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMWhjbWQxYldWdWRITXNZejFpTG14bGJtZDBhRHR5WlhSMWNtNGdablZ1WTNScGIyNG9LWHRtYjNJb2RtRnlJR0U5TUR0aFBHTTdZU3NyS1dsbUtHSmJZVjB1WVhCd2JIa29kR2hwY3l4aGNtZDFiV1Z1ZEhNcEtYSmxkSFZ5YmlFd08zSmxkSFZ5YmlFeGZYMDdaMjl2Wnk1bWRXNWpkR2x2Ym5NdWJtOTBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJtZFc1amRHbHZiaWdwZTNKbGRIVnliaUZoTG1Gd2NHeDVLSFJvYVhNc1lYSm5kVzFsYm5SektYMTlPMXh1WjI5dlp5NW1kVzVqZEdsdmJuTXVZM0psWVhSbFBXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTlablZ1WTNScGIyNG9LWHQ5TzJNdWNISnZkRzkwZVhCbFBXRXVjSEp2ZEc5MGVYQmxPMk05Ym1WM0lHTTdZUzVoY0hCc2VTaGpMRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd4S1NrN2NtVjBkWEp1SUdOOU8yZHZiMmN1Wm5WdVkzUnBiMjV6TGtOQlEwaEZYMUpGVkZWU1RsOVdRVXhWUlQwaE1EdG5iMjluTG1aMWJtTjBhVzl1Y3k1allXTm9aVkpsZEhWeWJsWmhiSFZsUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFNFeExHTTdjbVYwZFhKdUlHWjFibU4wYVc5dUtDbDdhV1lvSVdkdmIyY3VablZ1WTNScGIyNXpMa05CUTBoRlgxSkZWRlZTVGw5V1FVeFZSU2x5WlhSMWNtNGdZU2dwTzJKOGZDaGpQV0VvS1N4aVBTRXdLVHR5WlhSMWNtNGdZMzE5TzJkdmIyY3VablZ1WTNScGIyNXpMbTl1WTJVOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVlUdHlaWFIxY200Z1puVnVZM1JwYjI0b0tYdHBaaWhpS1h0MllYSWdZVDFpTzJJOWJuVnNiRHRoS0NsOWZYMDdYRzVuYjI5bkxtWjFibU4wYVc5dWN5NWtaV0p2ZFc1alpUMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5TUR0eVpYUjFjbTRnWm5WdVkzUnBiMjRvWlNsN1oyOXZaeTVuYkc5aVlXd3VZMnhsWVhKVWFXMWxiM1YwS0dRcE8zWmhjaUJtUFdGeVozVnRaVzUwY3p0a1BXZHZiMmN1WjJ4dlltRnNMbk5sZEZScGJXVnZkWFFvWm5WdVkzUnBiMjRvS1h0aExtRndjR3g1S0dNc1ppbDlMR0lwZlgwN1oyOXZaeTVtZFc1amRHbHZibk11ZEdoeWIzUjBiR1U5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BUQXNaVDBoTVN4bVBWdGRMR2M5Wm5WdVkzUnBiMjRvS1h0a1BUQTdaU1ltS0dVOUlURXNhQ2dwS1gwc2FEMW1kVzVqZEdsdmJpZ3BlMlE5WjI5dlp5NW5iRzlpWVd3dWMyVjBWR2x0Wlc5MWRDaG5MR0lwTzJFdVlYQndiSGtvWXl4bUtYMDdjbVYwZFhKdUlHWjFibU4wYVc5dUtHRXBlMlk5WVhKbmRXMWxiblJ6TzJRL1pUMGhNRHBvS0NsOWZUdG5iMjluTG1aMWJtTjBhVzl1Y3k1eVlYUmxUR2x0YVhROVpuVnVZM1JwYjI0b1lTeGlMR01wZTNaaGNpQmtQVEFzWlQxbWRXNWpkR2x2YmlncGUyUTlNSDA3Y21WMGRYSnVJR1oxYm1OMGFXOXVLR1lwZTJSOGZDaGtQV2R2YjJjdVoyeHZZbUZzTG5ObGRGUnBiV1Z2ZFhRb1pTeGlLU3hoTG1Gd2NHeDVLR01zWVhKbmRXMWxiblJ6S1NsOWZUdG5iMjluTG1SdmJTNUlkRzFzUld4bGJXVnVkRDFtZFc1amRHbHZiaWdwZTMwN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlQxbWRXNWpkR2x2YmloaEtYdDBhR2x6TG5SaFowNWhiV1ZmUFdGOU8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11ZEdGblRtRnRaVjk5TzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UVQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa0ZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1QlFrSlNQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVFVSkNVbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtGRFVrOU9XVTA5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkJRMUpQVGxsTlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRVVJFVWtWVFV6MXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtGRVJGSkZVMU5jSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1QlVGQk1SVlE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkJVRkJNUlZSY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUJVa1ZCUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRVkpGUVZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrRlNWRWxEVEVVOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pCVWxSSlEweEZYQ0lwTzF4dVoyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1QlUwbEVSVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrRlRTVVJGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFWVkVTVTg5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkJWVVJKVDF3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKQ1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRa0ZUUlQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa0pCVTBWY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUNRVk5GUms5T1ZEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtKQlUwVkdUMDVVWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFrUkpQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVFrUkpYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UWtSUFBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUWtSUFhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRa2xIUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRa2xIWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVFreFBRMHRSVlU5VVJUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtKTVQwTkxVVlZQVkVWY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUNUMFJaUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRazlFV1Z3aUtUdGNibWR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRbEk5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkNVbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtKVlZGUlBUajF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrSlZWRlJQVGx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrTkJUbFpCVXoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa05CVGxaQlUxd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa05CVUZSSlQwNDlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKRFFWQlVTVTlPWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVEwVk9WRVZTUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRMFZPVkVWU1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVRMGxVUlQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa05KVkVWY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNURUMFJGUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRMDlFUlZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrTlBURDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrTlBURndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtOUFRFZFNUMVZRUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lRMDlNUjFKUFZWQmNJaWs3WEc1bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtOUFRVMUJUa1E5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkRUMDFOUVU1RVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRUZVUVQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa1JCVkVGY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUVRVlJCVEVsVFZEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtSQlZFRk1TVk5VWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJFUTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKRVJGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa1JGVEQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa1JGVEZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrUkZWRUZKVEZNOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pFUlZSQlNVeFRYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UkVaT1BXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUkVaT1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRWxCVEU5SFBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUkVsQlRFOUhYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UkVsU1BXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpUkVsU1hDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSRWxXUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lSRWxXWENJcE8xeHVaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUVURDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrUk1YQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UkZROWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pFVkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrVk5QVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVJVMWNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVGVFVKRlJEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtWTlFrVkVYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UmtsRlRFUlRSVlE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkdTVVZNUkZORlZGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa1pKUjBOQlVGUkpUMDQ5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkdTVWREUVZCVVNVOU9YQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1UmtsSFZWSkZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVJrbEhWVkpGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVJrOU9WRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrWlBUbFJjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1R1QwOVVSVkk5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSkdUMDlVUlZKY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUdUMUpOUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lSazlTVFZ3aUtUdGNibWR2YjJjdVpHOXRMbFJoWjA1aGJXVXVSbEpCVFVVOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pHVWtGTlJWd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa1pTUVUxRlUwVlVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVJsSkJUVVZUUlZSY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUlNVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrZ3hYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1U0RJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pJTWx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrZ3pQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVNETmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVJTkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa2cwWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVNEVTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKSU5Wd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa2cyUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lTRFpjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1SVJVRkVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVNFVkJSRndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGtoRlFVUkZVajF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lraEZRVVJGVWx3aUtUdGNibWR2YjJjdVpHOXRMbFJoWjA1aGJXVXVTRWRTVDFWUVBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpU0VkU1QxVlFYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1U0ZJOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pJVWx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExraFVUVXc5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSklWRTFNWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVNUMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWtsY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUpSbEpCVFVVOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pKUmxKQlRVVmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVKVFVjOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pKVFVkY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNUpUbEJWVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa2xPVUZWVVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVTVTVUUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lTVTVUWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVNWTkpUa1JGV0QxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJa2xUU1U1RVJWaGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVMUWtROWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pMUWtSY0lpazdYRzVuYjI5bkxtUnZiUzVVWVdkT1lXMWxMa3RGV1VkRlRqMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWt0RldVZEZUbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGt4QlFrVk1QVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVRFRkNSVXhjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1TVJVZEZUa1E5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSk1SVWRGVGtSY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNU1TVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lreEpYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VEVsT1N6MXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWt4SlRrdGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVOUVVsT1BXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVFVGSlRsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazFCVUQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJazFCVUZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrMUJVa3M5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSk5RVkpMWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVRVRlVTRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrMUJWRWhjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1TlJVNVZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVRVVk9WVndpS1R0Y2JtZHZiMmN1Wkc5dExsUmhaMDVoYldVdVRVVk9WVWxVUlUwOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pOUlU1VlNWUkZUVndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGsxRlZFRTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKTlJWUkJYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VFVWVVJWSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKTlJWUkZVbHdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGs1QlZqMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWs1QlZsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMazVQUmxKQlRVVlRQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVRrOUdVa0ZOUlZOY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNU9UMU5EVWtsUVZEMXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWs1UFUwTlNTVkJVWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVQwSktSVU5VUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lUMEpLUlVOVVhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVUMHc5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlBURndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGs5UVZFZFNUMVZRUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lUMUJVUjFKUFZWQmNJaWs3WEc1bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGs5UVZFbFBUajF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lrOVFWRWxQVGx3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExrOVZWRkJWVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJazlWVkZCVlZGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbEE5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlFYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VUVGU1FVMDlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKUVFWSkJUVndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxCSlExUlZVa1U5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlFTVU5VVlZKRlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVVRkpGUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lVRkpGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVVGSlBSMUpGVTFNOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pRVWs5SFVrVlRVMXdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxFOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pSWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVVsQTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKU1VGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbEpVUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lVbFJjSWlrN1hHNW5iMjluTG1SdmJTNVVZV2RPWVcxbExsSlVRejF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsSlVRMXdpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxKVlFsazlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKU1ZVSlpYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VXoxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbE5jSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VFFVMVFQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVUwRk5VRndpS1R0bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxORFVrbFFWRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsTkRVa2xRVkZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsTkZRMVJKVDA0OWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pUUlVOVVNVOU9YQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VTBWTVJVTlVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVUwVk1SVU5VWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVUwMUJURXc5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRUVUZNVEZ3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsTlBWVkpEUlQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbE5QVlZKRFJWd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbE5RUVU0OWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pUVUVGT1hDSXBPMXh1WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVUVkZKSlMwVTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVFZGSkpTMFZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VFZGSlBUa2M5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRWRkpQVGtkY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVRWRmxNUlQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbE5VV1V4RlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVVMVZDUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lVMVZDWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVUxVk5UVUZTV1QxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbE5WVFUxQlVsbGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVUVlZBOWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pUVlZCY0lpazdaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVRWa2M5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlRWa2RjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VVFVSk1SVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUkJRa3hGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVZFSlBSRms5Ym1WM0lHZHZiMmN1Wkc5dExsUmhaMDVoYldVb1hDSlVRazlFV1Z3aUtUdG5iMjluTG1SdmJTNVVZV2RPWVcxbExsUkVQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVZFUmNJaWs3WEc1bmIyOW5MbVJ2YlM1VVlXZE9ZVzFsTGxSRlRWQk1RVlJGUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lWRVZOVUV4QlZFVmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVVUlZoVVFWSkZRVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUkZXRlJCVWtWQlhDSXBPMmR2YjJjdVpHOXRMbFJoWjA1aGJXVXVWRVpQVDFROWJtVjNJR2R2YjJjdVpHOXRMbFJoWjA1aGJXVW9YQ0pVUms5UFZGd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbFJJUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lWRWhjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VVNFVkJSRDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUklSVUZFWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVZFbE5SVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUkpUVVZjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1VVNWUk1SVDF1WlhjZ1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlNoY0lsUkpWRXhGWENJcE8yZHZiMmN1Wkc5dExsUmhaMDVoYldVdVZGSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKVVVsd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbFJTUVVOTFBXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVkZKQlEwdGNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVVVkQxdVpYY2daMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTaGNJbFJVWENJcE8xeHVaMjl2Wnk1a2IyMHVWR0ZuVG1GdFpTNVZQVzVsZHlCbmIyOW5MbVJ2YlM1VVlXZE9ZVzFsS0Z3aVZWd2lLVHRuYjI5bkxtUnZiUzVVWVdkT1lXMWxMbFZNUFc1bGR5Qm5iMjluTG1SdmJTNVVZV2RPWVcxbEtGd2lWVXhjSWlrN1oyOXZaeTVrYjIwdVZHRm5UbUZ0WlM1V1FWSTlibVYzSUdkdmIyY3VaRzl0TGxSaFowNWhiV1VvWENKV1FWSmNJaWs3WjI5dlp5NWtiMjB1VkdGblRtRnRaUzVXU1VSRlR6MXVaWGNnWjI5dlp5NWtiMjB1VkdGblRtRnRaU2hjSWxaSlJFVlBYQ0lwTzJkdmIyY3VaRzl0TGxSaFowNWhiV1V1VjBKU1BXNWxkeUJuYjI5bkxtUnZiUzVVWVdkT1lXMWxLRndpVjBKU1hDSXBPMmR2YjJjdVpHOXRMblJoWjNNOWUzMDdaMjl2Wnk1a2IyMHVkR0ZuY3k1V1QwbEVYMVJCUjFOZlBYdGhjbVZoT2lFd0xHSmhjMlU2SVRBc1luSTZJVEFzWTI5c09pRXdMR052YlcxaGJtUTZJVEFzWlcxaVpXUTZJVEFzYUhJNklUQXNhVzFuT2lFd0xHbHVjSFYwT2lFd0xHdGxlV2RsYmpvaE1DeHNhVzVyT2lFd0xHMWxkR0U2SVRBc2NHRnlZVzA2SVRBc2MyOTFjbU5sT2lFd0xIUnlZV05yT2lFd0xIZGljam9oTUgwN1oyOXZaeTVrYjIwdWRHRm5jeTVwYzFadmFXUlVZV2M5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SVRBOVBUMW5iMjluTG1SdmJTNTBZV2R6TGxaUFNVUmZWRUZIVTE5YllWMTlPMmR2YjJjdWFIUnRiRDE3ZlR0bmIyOW5MbWgwYld3dWRISjFjM1JsWkhSNWNHVnpQWHQ5TzJkdmIyY3VhSFJ0YkM1MGNuVnpkR1ZrZEhsd1pYTXVVRkpKVmtGVVJWOUVUMTlPVDFSZlFVTkRSVk5UWDA5U1gwVk1VMFZmVUU5TVNVTlpQV2R2YjJjdVZGSlZVMVJGUkY5VVdWQkZVMTlRVDB4SlExbGZUa0ZOUlQ5bmIyOW5MbU55WldGMFpWUnlkWE4wWldSVWVYQmxjMUJ2YkdsamVTaG5iMjluTGxSU1ZWTlVSVVJmVkZsUVJWTmZVRTlNU1VOWlgwNUJUVVVyWENJamFIUnRiRndpS1RwdWRXeHNPMmR2YjJjdWMzUnlhVzVuUFh0OU8yZHZiMmN1YzNSeWFXNW5MbFI1Y0dWa1UzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2ZUdG5iMjluTG5OMGNtbHVaeTVEYjI1emREMW1kVzVqZEdsdmJpaGhMR0lwZTNSb2FYTXVjM1J5YVc1blEyOXVjM1JXWVd4MVpWZHBkR2hUWldOMWNtbDBlVU52Ym5SeVlXTjBYMTluYjI5blUzUnlhVzVuVTJWamRYSnBkSGxRY21sMllYUmxYejFoUFQwOVoyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdVIwOVBSMTlUVkZKSlRrZGZRMDlPVTFSU1ZVTlVUMUpmVkU5TFJVNWZVRkpKVmtGVVJWOG1KbUo4ZkZ3aVhDSTdkR2hwY3k1VFZGSkpUa2RmUTA5T1UxUmZWRmxRUlY5TlFWSkxSVkpmWDBkUFQwZGZVMVJTU1U1SFgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBXZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExsUlpVRVZmVFVGU1MwVlNYMzA3WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1Y0hKdmRHOTBlWEJsTG1sdGNHeGxiV1Z1ZEhOSGIyOW5VM1J5YVc1blZIbHdaV1JUZEhKcGJtYzlJVEE3WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1Y0hKdmRHOTBlWEJsTG1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV6ZEhKcGJtZERiMjV6ZEZaaGJIVmxWMmwwYUZObFkzVnlhWFI1UTI5dWRISmhZM1JmWDJkdmIyZFRkSEpwYm1kVFpXTjFjbWwwZVZCeWFYWmhkR1ZmZlR0Y2JtZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExuQnliM1J2ZEhsd1pTNTBiMU4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJsd2lRMjl1YzNSN1hDSXJkR2hwY3k1emRISnBibWREYjI1emRGWmhiSFZsVjJsMGFGTmxZM1Z5YVhSNVEyOXVkSEpoWTNSZlgyZHZiMmRUZEhKcGJtZFRaV04xY21sMGVWQnlhWFpoZEdWZksxd2lmVndpZlR0bmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEE5Wm5WdVkzUnBiMjRvWVNsN2FXWW9ZU0JwYm5OMFlXNWpaVzltSUdkdmIyY3VjM1J5YVc1bkxrTnZibk4wSmlaaExtTnZibk4wY25WamRHOXlQVDA5WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1FtSm1FdVUxUlNTVTVIWDBOUFRsTlVYMVJaVUVWZlRVRlNTMFZTWDE5SFQwOUhYMU5VVWtsT1IxOVRSVU5WVWtsVVdWOVFVa2xXUVZSRlh6MDlQV2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBMbFJaVUVWZlRVRlNTMFZTWHlseVpYUjFjbTRnWVM1emRISnBibWREYjI1emRGWmhiSFZsVjJsMGFGTmxZM1Z5YVhSNVEyOXVkSEpoWTNSZlgyZHZiMmRUZEhKcGJtZFRaV04xY21sMGVWQnlhWFpoZEdWZk8yZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2laWGh3WldOMFpXUWdiMkpxWldOMElHOW1JSFI1Y0dVZ1EyOXVjM1FzSUdkdmRDQW5YQ0lyWVN0Y0lpZGNJaWs3Y21WMGRYSnVYQ0owZVhCbFgyVnljbTl5T2tOdmJuTjBYQ0o5TzF4dVoyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdVpuSnZiVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnYm1WM0lHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMEtHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExrZFBUMGRmVTFSU1NVNUhYME5QVGxOVVVsVkRWRTlTWDFSUFMwVk9YMUJTU1ZaQlZFVmZMR0VwZlR0bmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1VVdWQkZYMDFCVWt0RlVsODllMzA3WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1UjA5UFIxOVRWRkpKVGtkZlEwOU9VMVJTVlVOVVQxSmZWRTlMUlU1ZlVGSkpWa0ZVUlY4OWUzMDdaMjl2Wnk1emRISnBibWN1UTI5dWMzUXVSVTFRVkZrOVoyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdVpuSnZiU2hjSWx3aUtUdG5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkRDFtZFc1amRHbHZiaWdwZTNSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk5qY21sd2RGZHlZWEJ3WldSV1lXeDFaVjg5WENKY0lqdDBhR2x6TGxOQlJrVmZVME5TU1ZCVVgxUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejFuYjI5bkxtaDBiV3d1VTJGbVpWTmpjbWx3ZEM1VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOTlPMmR2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTG5CeWIzUnZkSGx3WlM1cGJYQnNaVzFsYm5SelIyOXZaMU4wY21sdVoxUjVjR1ZrVTNSeWFXNW5QU0V3TzJkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejE3ZlR0bmIyOW5MbWgwYld3dVUyRm1aVk5qY21sd2RDNW1jbTl0UTI5dWMzUmhiblE5Wm5WdVkzUnBiMjRvWVNsN1lUMW5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTazdjbVYwZFhKdUlEQTlQVDFoTG14bGJtZDBhRDluYjI5bkxtaDBiV3d1VTJGbVpWTmpjbWx3ZEM1RlRWQlVXVHBuYjI5bkxtaDBiV3d1VTJGbVpWTmpjbWx3ZEM1amNtVmhkR1ZUWVdabFUyTnlhWEIwVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9ZU2w5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZUWTNKcGNIUXVabkp2YlVOdmJuTjBZVzUwUVc1a1FYSm5jejFtZFc1amRHbHZiaWhoTEdJcGUyWnZjaWgyWVhJZ1l6MWJYU3hrUFRFN1pEeGhjbWQxYldWdWRITXViR1Z1WjNSb08yUXJLeWxqTG5CMWMyZ29aMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1YzNSeWFXNW5hV1o1WHloaGNtZDFiV1Z1ZEhOYlpGMHBLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1WTNKbFlYUmxVMkZtWlZOamNtbHdkRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtGd2lLRndpSzJkdmIyY3VjM1J5YVc1bkxrTnZibk4wTG5WdWQzSmhjQ2hoS1N0Y0lpa29YQ0lyWXk1cWIybHVLRndpTENCY0lpa3JYQ0lwTzF3aUtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1Wm5KdmJVcHpiMjQ5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExtTnlaV0YwWlZOaFptVlRZM0pwY0hSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2huYjI5bkxtaDBiV3d1VTJGbVpWTmpjbWx3ZEM1emRISnBibWRwWm5sZktHRXBLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlRZM0pwY0hRdWNISnZkRzkwZVhCbExtZGxkRlI1Y0dWa1UzUnlhVzVuVm1Gc2RXVTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFUyTnlhWEIwVjNKaGNIQmxaRlpoYkhWbFh5NTBiMU4wY21sdVp5Z3BmVHRjYm1kdmIyY3VSRVZDVlVjbUppaG5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzV3Y205MGIzUjVjR1V1ZEc5VGRISnBibWM5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTVjSWxOaFptVlRZM0pwY0hSN1hDSXJkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFUyTnlhWEIwVjNKaGNIQmxaRlpoYkhWbFh5dGNJbjFjSW4wcE8yZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMblZ1ZDNKaGNEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1ZFc1M2NtRndWSEoxYzNSbFpGTmpjbWx3ZENoaEtTNTBiMU4wY21sdVp5Z3BmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExuVnVkM0poY0ZSeWRYTjBaV1JUWTNKcGNIUTlablZ1WTNScGIyNG9ZU2w3YVdZb1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwSmlaaExtTnZibk4wY25WamRHOXlQVDA5WjI5dlp5NW9kRzFzTGxOaFptVlRZM0pwY0hRbUptRXVVMEZHUlY5VFExSkpVRlJmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZktYSmxkSFZ5YmlCaExuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVlRZM0pwY0hSWGNtRndjR1ZrVm1Gc2RXVmZPMmR2YjJjdVlYTnpaWEowY3k1bVlXbHNLRndpWlhod1pXTjBaV1FnYjJKcVpXTjBJRzltSUhSNWNHVWdVMkZtWlZOamNtbHdkQ3dnWjI5MElDZGNJaXRoSzF3aUp5QnZaaUIwZVhCbElGd2lLMmR2YjJjdWRIbHdaVTltS0dFcEtUdHlaWFIxY201Y0luUjVjR1ZmWlhKeWIzSTZVMkZtWlZOamNtbHdkRndpZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMbk4wY21sdVoybG1lVjg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUVwVFQwNHVjM1J5YVc1bmFXWjVLR0VwTG5KbGNHeGhZMlVvTHp3dlp5eGNJbHhjWEZ4NE0yTmNJaWw5TzJkdmIyY3VhSFJ0YkM1VFlXWmxVMk55YVhCMExtTnlaV0YwWlZOaFptVlRZM0pwY0hSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRvYm1WM0lHZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBLUzVwYm1sMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZmS0dFcGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFUyTnlhWEIwTG5CeWIzUnZkSGx3WlM1cGJtbDBVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWZlBXWjFibU4wYVc5dUtHRXBlM1JvYVhNdWNISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sVTJGbVpWTmpjbWx3ZEZkeVlYQndaV1JXWVd4MVpWODlaMjl2Wnk1b2RHMXNMblJ5ZFhOMFpXUjBlWEJsY3k1UVVrbFdRVlJGWDBSUFgwNVBWRjlCUTBORlUxTmZUMUpmUlV4VFJWOVFUMHhKUTFrL1oyOXZaeTVvZEcxc0xuUnlkWE4wWldSMGVYQmxjeTVRVWtsV1FWUkZYMFJQWDA1UFZGOUJRME5GVTFOZlQxSmZSVXhUUlY5UVQweEpRMWt1WTNKbFlYUmxVMk55YVhCMEtHRXBPbUU3Y21WMGRYSnVJSFJvYVhOOU8yZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMa1ZOVUZSWlBXZHZiMmN1YUhSdGJDNVRZV1psVTJOeWFYQjBMbU55WldGMFpWTmhabVZUWTNKcGNIUlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoY0lsd2lLVHRuYjI5bkxtWnpQWHQ5TzJkdmIyY3Vabk11ZFhKc1BYdDlPMmR2YjJjdVpuTXVkWEpzTG1OeVpXRjBaVTlpYW1WamRGVnliRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NW1jeTUxY213dVoyVjBWWEpzVDJKcVpXTjBYeWdwTG1OeVpXRjBaVTlpYW1WamRGVlNUQ2hoS1gwN1oyOXZaeTVtY3k1MWNtd3VjbVYyYjJ0bFQySnFaV04wVlhKc1BXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVpuTXVkWEpzTG1kbGRGVnliRTlpYW1WamRGOG9LUzV5WlhadmEyVlBZbXBsWTNSVlVrd29ZU2w5TzJkdmIyY3Vabk11ZFhKc0xtZGxkRlZ5YkU5aWFtVmpkRjg5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDFuYjI5bkxtWnpMblZ5YkM1bWFXNWtWWEpzVDJKcVpXTjBYeWdwTzJsbUtHNTFiR3doUFdFcGNtVjBkWEp1SUdFN2RHaHliM2NnUlhKeWIzSW9YQ0pVYUdseklHSnliM2R6WlhJZ1pHOWxjMjRuZENCelpXVnRJSFJ2SUhOMWNIQnZjblFnWW14dllpQlZVa3h6WENJcE8zMDdYRzVuYjI5bkxtWnpMblZ5YkM1bWFXNWtWWEpzVDJKcVpXTjBYejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxtbHpSR1ZtS0dkdmIyY3VaMnh2WW1Gc0xsVlNUQ2ttSm1kdmIyY3VhWE5FWldZb1oyOXZaeTVuYkc5aVlXd3VWVkpNTG1OeVpXRjBaVTlpYW1WamRGVlNUQ2svWjI5dlp5NW5iRzlpWVd3dVZWSk1PbWR2YjJjdWFYTkVaV1lvWjI5dlp5NW5iRzlpWVd3dWQyVmlhMmwwVlZKTUtTWW1aMjl2Wnk1cGMwUmxaaWhuYjI5bkxtZHNiMkpoYkM1M1pXSnJhWFJWVWt3dVkzSmxZWFJsVDJKcVpXTjBWVkpNS1Q5bmIyOW5MbWRzYjJKaGJDNTNaV0pyYVhSVlVrdzZaMjl2Wnk1cGMwUmxaaWhuYjI5bkxtZHNiMkpoYkM1amNtVmhkR1ZQWW1wbFkzUlZVa3dwUDJkdmIyY3VaMnh2WW1Gc09tNTFiR3g5TzJkdmIyY3Vabk11ZFhKc0xtSnliM2R6WlhKVGRYQndiM0owYzA5aWFtVmpkRlZ5YkhNOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2JuVnNiQ0U5WjI5dlp5NW1jeTUxY213dVptbHVaRlZ5YkU5aWFtVmpkRjhvS1gwN1oyOXZaeTVwTVRodVBYdDlPMmR2YjJjdWFURTRiaTVpYVdScFBYdDlPMmR2YjJjdWFURTRiaTVpYVdScExrWlBVa05GWDFKVVREMGhNVHRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMa2xUWDFKVVREMW5iMjluTG1reE9HNHVZbWxrYVM1R1QxSkRSVjlTVkV4OGZDaGNJbUZ5WENJOVBXZHZiMmN1VEU5RFFVeEZMbk4xWW5OMGNtbHVaeWd3TERJcExuUnZURzkzWlhKRFlYTmxLQ2w4ZkZ3aVptRmNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktEQXNNaWt1ZEc5TWIzZGxja05oYzJVb0tYeDhYQ0pvWlZ3aVBUMW5iMjluTGt4UFEwRk1SUzV6ZFdKemRISnBibWNvTUN3eUtTNTBiMHh2ZDJWeVEyRnpaU2dwZkh4Y0ltbDNYQ0k5UFdkdmIyY3VURTlEUVV4RkxuTjFZbk4wY21sdVp5Z3dMRElwTG5SdlRHOTNaWEpEWVhObEtDbDhmRndpY0hOY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RBc01pa3VkRzlNYjNkbGNrTmhjMlVvS1h4OFhDSnpaRndpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NQ3d5S1M1MGIweHZkMlZ5UTJGelpTZ3BmSHhjSW5WblhDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1Wnlnd0xESXBMblJ2VEc5M1pYSkRZWE5sS0NsOGZGd2lkWEpjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LREFzTWlrdWRHOU1iM2RsY2tOaGMyVW9LWHg4WENKNWFWd2lQVDFuYjI5bkxreFBRMEZNUlM1emRXSnpkSEpwYm1jb01Dd3lLUzUwYjB4dmQyVnlRMkZ6WlNncEtTWW1LREk5UFdkdmIyY3VURTlEUVV4RkxteGxibWQwYUh4OFhHNWNJaTFjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRElzTXlsOGZGd2lYMXdpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NaXd6S1NsOGZETThQV2R2YjJjdVRFOURRVXhGTG14bGJtZDBhQ1ltWENKamEySmNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktEQXNNeWt1ZEc5TWIzZGxja05oYzJVb0tTWW1LRE05UFdkdmIyY3VURTlEUVV4RkxteGxibWQwYUh4OFhDSXRYQ0k5UFdkdmIyY3VURTlEUVV4RkxuTjFZbk4wY21sdVp5Z3pMRFFwZkh4Y0lsOWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktETXNOQ2twZkh3M1BEMW5iMjluTGt4UFEwRk1SUzVzWlc1bmRHZ21KaWhjSWkxY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RJc015bDhmRndpWDF3aVBUMW5iMjluTGt4UFEwRk1SUzV6ZFdKemRISnBibWNvTWl3ektTa21KaWhjSW1Ga2JHMWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktETXNOeWt1ZEc5TWIzZGxja05oYzJVb0tYeDhYQ0poY21GaVhDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1WnlnekxEY3BMblJ2VEc5M1pYSkRZWE5sS0NsOGZGd2lhR1ZpY2x3aVBUMW5iMjluTGt4UFEwRk1SUzV6ZFdKemRISnBibWNvTXl3M0tTNTBiMHh2ZDJWeVEyRnpaU2dwZkh4Y0ltNXJiMjljSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRE1zWEc0M0tTNTBiMHh2ZDJWeVEyRnpaU2dwZkh4Y0luSnZhR2RjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRE1zTnlrdWRHOU1iM2RsY2tOaGMyVW9LWHg4WENKMGFHRmhYQ0k5UFdkdmIyY3VURTlEUVV4RkxuTjFZbk4wY21sdVp5Z3pMRGNwTG5SdlRHOTNaWEpEWVhObEtDa3BmSHc0UEQxbmIyOW5Ma3hQUTBGTVJTNXNaVzVuZEdnbUppaGNJaTFjSWowOVoyOXZaeTVNVDBOQlRFVXVjM1ZpYzNSeWFXNW5LRE1zTkNsOGZGd2lYMXdpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29NeXcwS1NrbUppaGNJbUZrYkcxY0lqMDlaMjl2Wnk1TVQwTkJURVV1YzNWaWMzUnlhVzVuS0RRc09Da3VkRzlNYjNkbGNrTmhjMlVvS1h4OFhDSmhjbUZpWENJOVBXZHZiMmN1VEU5RFFVeEZMbk4xWW5OMGNtbHVaeWcwTERncExuUnZURzkzWlhKRFlYTmxLQ2w4ZkZ3aWFHVmljbHdpUFQxbmIyOW5Ma3hQUTBGTVJTNXpkV0p6ZEhKcGJtY29OQ3c0S1M1MGIweHZkMlZ5UTJGelpTZ3BmSHhjSW01cmIyOWNJajA5WjI5dlp5NU1UME5CVEVVdWMzVmljM1J5YVc1bktEUXNPQ2t1ZEc5TWIzZGxja05oYzJVb0tYeDhYQ0p5YjJoblhDSTlQV2R2YjJjdVRFOURRVXhGTG5OMVluTjBjbWx1WnlnMExEZ3BMblJ2VEc5M1pYSkRZWE5sS0NsOGZGd2lkR2hoWVZ3aVBUMW5iMjluTGt4UFEwRk1SUzV6ZFdKemRISnBibWNvTkN3NEtTNTBiMHh2ZDJWeVEyRnpaU2dwS1R0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTGtadmNtMWhkRDE3VEZKRk9sd2lYRngxTWpBeVlWd2lMRkpNUlRwY0lseGNkVEl3TW1KY0lpeFFSRVk2WENKY1hIVXlNREpqWENJc1RGSk5PbHdpWEZ4MU1qQXdaVndpTEZKTVRUcGNJbHhjZFRJd01HWmNJbjA3WjI5dlp5NXBNVGh1TG1KcFpHa3VSR2x5UFh0TVZGSTZNU3hTVkV3NkxURXNUa1ZWVkZKQlREb3dmVHRuYjI5bkxta3hPRzR1WW1sa2FTNVNTVWRJVkQxY0luSnBaMmgwWENJN1oyOXZaeTVwTVRodUxtSnBaR2t1VEVWR1ZEMWNJbXhsWm5SY0lqdG5iMjluTG1reE9HNHVZbWxrYVM1Sk1UaE9YMUpKUjBoVVBXZHZiMmN1YVRFNGJpNWlhV1JwTGtsVFgxSlVURDluYjI5bkxta3hPRzR1WW1sa2FTNU1SVVpVT21kdmIyY3VhVEU0Ymk1aWFXUnBMbEpKUjBoVU8yZHZiMmN1YVRFNGJpNWlhV1JwTGtreE9FNWZURVZHVkQxbmIyOW5MbWt4T0c0dVltbGthUzVKVTE5U1ZFdy9aMjl2Wnk1cE1UaHVMbUpwWkdrdVVrbEhTRlE2WjI5dlp5NXBNVGh1TG1KcFpHa3VURVZHVkR0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG5SdlJHbHlQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1WENKdWRXMWlaWEpjSWowOWRIbHdaVzltSUdFL01EeGhQMmR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVNVkZJNk1ENWhQMmR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVTVkV3NllqOXVkV3hzT21kdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1T1JWVlVVa0ZNT201MWJHdzlQV0UvYm5Wc2JEcGhQMmR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVTVkV3NloyOXZaeTVwTVRodUxtSnBaR2t1UkdseUxreFVVbjA3WjI5dlp5NXBNVGh1TG1KcFpHa3ViSFJ5UTJoaGNuTmZQVndpUVMxYVlTMTZYRngxTURCak1DMWNYSFV3TUdRMlhGeDFNREJrT0MxY1hIVXdNR1kyWEZ4MU1EQm1PQzFjWEhVd01tSTRYRngxTURNd01DMWNYSFV3TlRrd1hGeDFNRGt3TUMxY1hIVXhabVptWEZ4MU1qQXdaVnhjZFRKak1EQXRYRngxWkRnd01WeGNkV1E0TURRdFhGeDFaRGd6T1Z4Y2RXUTRNMk10WEZ4MVpHSm1abHhjZFdZNU1EQXRYRngxWm1JeFkxeGNkV1psTURBdFhGeDFabVUyWmx4Y2RXWmxabVF0WEZ4MVptWm1abHdpTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkVOb1lYSnpYejFjSWx4Y2RUQTFPVEV0WEZ4MU1EWmxabHhjZFRBMlptRXRYRngxTURobVpseGNkVEl3TUdaY1hIVmtPREF5TFZ4Y2RXUTRNRE5jWEhWa09ETmhMVnhjZFdRNE0ySmNYSFZtWWpGa0xWeGNkV1prWm1aY1hIVm1aVGN3TFZ4Y2RXWmxabU5jSWp0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG1oMGJXeFRhMmx3VW1Wblh6MHZQRnRlUGwwcVBud21XMTQ3WFNzN0wyYzdaMjl2Wnk1cE1UaHVMbUpwWkdrdWMzUnlhWEJJZEcxc1NXWk9aV1ZrWldSZlBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0kvWVM1eVpYQnNZV05sS0dkdmIyY3VhVEU0Ymk1aWFXUnBMbWgwYld4VGEybHdVbVZuWHl4Y0lsd2lLVHBoZlR0bmIyOW5MbWt4T0c0dVltbGthUzV5ZEd4RGFHRnlVbVZuWHoxdVpYY2dVbVZuUlhod0tGd2lXMXdpSzJkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkVOb1lYSnpYeXRjSWwxY0lpazdaMjl2Wnk1cE1UaHVMbUpwWkdrdWJIUnlRMmhoY2xKbFoxODlibVYzSUZKbFowVjRjQ2hjSWx0Y0lpdG5iMjluTG1reE9HNHVZbWxrYVM1c2RISkRhR0Z5YzE4clhDSmRYQ0lwTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbWhoYzBGdWVWSjBiRDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCbmIyOW5MbWt4T0c0dVltbGthUzV5ZEd4RGFHRnlVbVZuWHk1MFpYTjBLR2R2YjJjdWFURTRiaTVpYVdScExuTjBjbWx3U0hSdGJFbG1UbVZsWkdWa1h5aGhMR0lwS1gwN1oyOXZaeTVwTVRodUxtSnBaR2t1YUdGelVuUnNRMmhoY2oxbmIyOW5MbWt4T0c0dVltbGthUzVvWVhOQmJubFNkR3c3WEc1bmIyOW5MbWt4T0c0dVltbGthUzVvWVhOQmJubE1kSEk5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVEyaGhjbEpsWjE4dWRHVnpkQ2huYjI5bkxta3hPRzR1WW1sa2FTNXpkSEpwY0VoMGJXeEpaazVsWldSbFpGOG9ZU3hpS1NsOU8yZHZiMmN1YVRFNGJpNWlhV1JwTG14MGNsSmxYejF1WlhjZ1VtVm5SWGh3S0Z3aVhsdGNJaXRuYjI5bkxta3hPRzR1WW1sa2FTNXNkSEpEYUdGeWMxOHJYQ0pkWENJcE8yZHZiMmN1YVRFNGJpNWlhV1JwTG5KMGJGSmxYejF1WlhjZ1VtVm5SWGh3S0Z3aVhsdGNJaXRuYjI5bkxta3hPRzR1WW1sa2FTNXlkR3hEYUdGeWMxOHJYQ0pkWENJcE8yZHZiMmN1YVRFNGJpNWlhV1JwTG1selVuUnNRMmhoY2oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1Y25Sc1VtVmZMblJsYzNRb1lTbDlPMmR2YjJjdWFURTRiaTVpYVdScExtbHpUSFJ5UTJoaGNqMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1cE1UaHVMbUpwWkdrdWJIUnlVbVZmTG5SbGMzUW9ZU2w5TzJkdmIyY3VhVEU0Ymk1aWFXUnBMbWx6VG1WMWRISmhiRU5vWVhJOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlXZHZiMmN1YVRFNGJpNWlhV1JwTG1selRIUnlRMmhoY2loaEtTWW1JV2R2YjJjdWFURTRiaTVpYVdScExtbHpVblJzUTJoaGNpaGhLWDA3WEc1bmIyOW5MbWt4T0c0dVltbGthUzVzZEhKRWFYSkRhR1ZqYTFKbFh6MXVaWGNnVW1WblJYaHdLRndpWGx0ZVhDSXJaMjl2Wnk1cE1UaHVMbUpwWkdrdWNuUnNRMmhoY25OZksxd2lYU3BiWENJcloyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVEyaGhjbk5mSzF3aVhWd2lLVHRuYjI5bkxta3hPRzR1WW1sa2FTNXlkR3hFYVhKRGFHVmphMUpsWHoxdVpYY2dVbVZuUlhod0tGd2lYbHRlWENJcloyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVEyaGhjbk5mSzF3aVhTcGJYQ0lyWjI5dlp5NXBNVGh1TG1KcFpHa3VjblJzUTJoaGNuTmZLMXdpWFZ3aUtUdG5iMjluTG1reE9HNHVZbWxrYVM1emRHRnlkSE5YYVhSb1VuUnNQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkVScGNrTm9aV05yVW1WZkxuUmxjM1FvWjI5dlp5NXBNVGh1TG1KcFpHa3VjM1J5YVhCSWRHMXNTV1pPWldWa1pXUmZLR0VzWWlrcGZUdG5iMjluTG1reE9HNHVZbWxrYVM1cGMxSjBiRlJsZUhROVoyOXZaeTVwTVRodUxtSnBaR2t1YzNSaGNuUnpWMmwwYUZKMGJEdGNibWR2YjJjdWFURTRiaTVpYVdScExuTjBZWEowYzFkcGRHaE1kSEk5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVJHbHlRMmhsWTJ0U1pWOHVkR1Z6ZENobmIyOW5MbWt4T0c0dVltbGthUzV6ZEhKcGNFaDBiV3hKWms1bFpXUmxaRjhvWVN4aUtTbDlPMmR2YjJjdWFURTRiaTVpYVdScExtbHpUSFJ5VkdWNGREMW5iMjluTG1reE9HNHVZbWxrYVM1emRHRnlkSE5YYVhSb1RIUnlPMmR2YjJjdWFURTRiaTVpYVdScExtbHpVbVZ4ZFdseVpXUk1kSEpTWlY4OUwxNW9kSFJ3T2x4Y0wxeGNMeTRxTHp0bmIyOW5MbWt4T0c0dVltbGthUzVwYzA1bGRYUnlZV3hVWlhoMFBXWjFibU4wYVc5dUtHRXNZaWw3WVQxbmIyOW5MbWt4T0c0dVltbGthUzV6ZEhKcGNFaDBiV3hKWms1bFpXUmxaRjhvWVN4aUtUdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1YVhOU1pYRjFhWEpsWkV4MGNsSmxYeTUwWlhOMEtHRXBmSHdoWjI5dlp5NXBNVGh1TG1KcFpHa3VhR0Z6UVc1NVRIUnlLR0VwSmlZaFoyOXZaeTVwTVRodUxtSnBaR2t1YUdGelFXNTVVblJzS0dFcGZUdGNibWR2YjJjdWFURTRiaTVpYVdScExteDBja1Y0YVhSRWFYSkRhR1ZqYTFKbFh6MXVaWGNnVW1WblJYaHdLRndpVzF3aUsyZHZiMmN1YVRFNGJpNWlhV1JwTG14MGNrTm9ZWEp6WHl0Y0lsMWJYbHdpSzJkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkVOb1lYSnpYeXRjSWwwcUpGd2lLVHRuYjI5bkxta3hPRzR1WW1sa2FTNXlkR3hGZUdsMFJHbHlRMmhsWTJ0U1pWODlibVYzSUZKbFowVjRjQ2hjSWx0Y0lpdG5iMjluTG1reE9HNHVZbWxrYVM1eWRHeERhR0Z5YzE4clhDSmRXMTVjSWl0bmIyOW5MbWt4T0c0dVltbGthUzVzZEhKRGFHRnljMThyWENKZEtpUmNJaWs3WjI5dlp5NXBNVGh1TG1KcFpHa3VaVzVrYzFkcGRHaE1kSEk5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTVwTVRodUxtSnBaR2t1YkhSeVJYaHBkRVJwY2tOb1pXTnJVbVZmTG5SbGMzUW9aMjl2Wnk1cE1UaHVMbUpwWkdrdWMzUnlhWEJJZEcxc1NXWk9aV1ZrWldSZktHRXNZaWtwZlR0bmIyOW5MbWt4T0c0dVltbGthUzVwYzB4MGNrVjRhWFJVWlhoMFBXZHZiMmN1YVRFNGJpNWlhV1JwTG1WdVpITlhhWFJvVEhSeU8xeHVaMjl2Wnk1cE1UaHVMbUpwWkdrdVpXNWtjMWRwZEdoU2RHdzlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NXBNVGh1TG1KcFpHa3VjblJzUlhocGRFUnBja05vWldOclVtVmZMblJsYzNRb1oyOXZaeTVwTVRodUxtSnBaR2t1YzNSeWFYQklkRzFzU1daT1pXVmtaV1JmS0dFc1lpa3BmVHRuYjI5bkxta3hPRzR1WW1sa2FTNXBjMUowYkVWNGFYUlVaWGgwUFdkdmIyY3VhVEU0Ymk1aWFXUnBMbVZ1WkhOWGFYUm9VblJzTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbkowYkV4dlkyRnNaWE5TWlY4OUwxNG9ZWEo4WTJ0aWZHUjJmR2hsZkdsM2ZHWmhmRzV4YjN4d2MzeHpaSHgxWjN4MWNueDVhWHd1S2xzdFgxMG9RV1JzYlh4QmNtRmlmRWhsWW5KOFRtdHZiM3hTYjJobmZGUm9ZV0VwS1NnL0lTNHFXeTFmWFNoTVlYUnVmRU41Y213cEtDUjhMWHhmS1Nrb0pId3RmRjhwTDJrN1oyOXZaeTVwTVRodUxtSnBaR2t1YVhOU2RHeE1ZVzVuZFdGblpUMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1cE1UaHVMbUpwWkdrdWNuUnNURzlqWVd4bGMxSmxYeTUwWlhOMEtHRXBmVHRuYjI5bkxta3hPRzR1WW1sa2FTNWljbUZqYTJWMFIzVmhjbVJVWlhoMFVtVmZQUzhvWEZ3b0xpby9YRndwS3lsOEtGeGNXeTRxUDF4Y1hTc3BmQ2hjWEhzdUtqOWNYSDByS1h3b1BDNHFQejRyS1M5bk8xeHVaMjl2Wnk1cE1UaHVMbUpwWkdrdVozVmhjbVJDY21GamEyVjBTVzVVWlhoMFBXWjFibU4wYVc5dUtHRXNZaWw3WWowb2RtOXBaQ0F3UFQwOVlqOW5iMjluTG1reE9HNHVZbWxrYVM1b1lYTkJibmxTZEd3b1lTazZZaWsvWjI5dlp5NXBNVGh1TG1KcFpHa3VSbTl5YldGMExsSk1UVHBuYjI5bkxta3hPRzR1WW1sa2FTNUdiM0p0WVhRdVRGSk5PM0psZEhWeWJpQmhMbkpsY0d4aFkyVW9aMjl2Wnk1cE1UaHVMbUpwWkdrdVluSmhZMnRsZEVkMVlYSmtWR1Y0ZEZKbFh5eGlLMXdpSkNaY0lpdGlLWDA3WjI5dlp5NXBNVGh1TG1KcFpHa3VaVzVtYjNKalpWSjBiRWx1U0hSdGJEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNWNJanhjSWowOVlTNWphR0Z5UVhRb01Day9ZUzV5WlhCc1lXTmxLQzg4WEZ4M0t5OHNYQ0lrSmlCa2FYSTljblJzWENJcE9sd2lYRnh1UEhOd1lXNGdaR2x5UFhKMGJENWNJaXRoSzF3aVBDOXpjR0Z1UGx3aWZUdG5iMjluTG1reE9HNHVZbWxrYVM1bGJtWnZjbU5sVW5Sc1NXNVVaWGgwUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5MbWt4T0c0dVltbGthUzVHYjNKdFlYUXVVa3hGSzJFcloyOXZaeTVwTVRodUxtSnBaR2t1Um05eWJXRjBMbEJFUm4wN1hHNW5iMjluTG1reE9HNHVZbWxrYVM1bGJtWnZjbU5sVEhSeVNXNUlkRzFzUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5Ymx3aVBGd2lQVDFoTG1Ob1lYSkJkQ2d3S1Q5aExuSmxjR3hoWTJVb0x6eGNYSGNyTHl4Y0lpUW1JR1JwY2oxc2RISmNJaWs2WENKY1hHNDhjM0JoYmlCa2FYSTliSFJ5UGx3aUsyRXJYQ0k4TDNOd1lXNCtYQ0o5TzJkdmIyY3VhVEU0Ymk1aWFXUnBMbVZ1Wm05eVkyVk1kSEpKYmxSbGVIUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWFURTRiaTVpYVdScExrWnZjbTFoZEM1TVVrVXJZU3RuYjI5bkxta3hPRzR1WW1sa2FTNUdiM0p0WVhRdVVFUkdmVHRuYjI5bkxta3hPRzR1WW1sa2FTNWthVzFsYm5OcGIyNXpVbVZmUFM4NlhGeHpLaWhiTGx4Y1pGMWJMbHhjZDEwcUtWeGNjeXNvV3k1Y1hHUmRXeTVjWEhkZEtpbGNYSE1yS0ZzdVhGeGtYVnN1WEZ4M1hTb3BYRnh6S3loYkxseGNaRjFiTGx4Y2QxMHFLUzluTzJkdmIyY3VhVEU0Ymk1aWFXUnBMbXhsWm5SU1pWODlMMnhsWm5RdloyazdaMjl2Wnk1cE1UaHVMbUpwWkdrdWNtbG5hSFJTWlY4OUwzSnBaMmgwTDJkcE8yZHZiMmN1YVRFNGJpNWlhV1JwTG5SbGJYQlNaVjg5THlVbEpTVXZaenRjYm1kdmIyY3VhVEU0Ymk1aWFXUnBMbTFwY25KdmNrTlRVejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0dkdmIyY3VhVEU0Ymk1aWFXUnBMbVJwYldWdWMybHZibk5TWlY4c1hDSTZKREVnSkRRZ0pETWdKREpjSWlrdWNtVndiR0ZqWlNobmIyOW5MbWt4T0c0dVltbGthUzVzWldaMFVtVmZMRndpSlNVbEpWd2lLUzV5WlhCc1lXTmxLR2R2YjJjdWFURTRiaTVpYVdScExuSnBaMmgwVW1WZkxHZHZiMmN1YVRFNGJpNWlhV1JwTGt4RlJsUXBMbkpsY0d4aFkyVW9aMjl2Wnk1cE1UaHVMbUpwWkdrdWRHVnRjRkpsWHl4bmIyOW5MbWt4T0c0dVltbGthUzVTU1VkSVZDbDlPMmR2YjJjdWFURTRiaTVpYVdScExtUnZkV0pzWlZGMWIzUmxVM1ZpYzNScGRIVjBaVkpsWHowdktGdGNYSFV3TlRreExWeGNkVEExWmpKZEtWd2lMMmM3WjI5dlp5NXBNVGh1TG1KcFpHa3VjMmx1WjJ4bFVYVnZkR1ZUZFdKemRHbDBkWFJsVW1WZlBTOG9XMXhjZFRBMU9URXRYRngxTURWbU1sMHBKeTluTzF4dVoyOXZaeTVwTVRodUxtSnBaR2t1Ym05eWJXRnNhWHBsU0dWaWNtVjNVWFZ2ZEdVOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTaG5iMjluTG1reE9HNHVZbWxrYVM1a2IzVmliR1ZSZFc5MFpWTjFZbk4wYVhSMWRHVlNaVjhzWENJa01WeGNkVEExWmpSY0lpa3VjbVZ3YkdGalpTaG5iMjluTG1reE9HNHVZbWxrYVM1emFXNW5iR1ZSZFc5MFpWTjFZbk4wYVhSMWRHVlNaVjhzWENJa01WeGNkVEExWmpOY0lpbDlPMmR2YjJjdWFURTRiaTVpYVdScExuZHZjbVJUWlhCaGNtRjBiM0pTWlY4OUwxeGNjeXN2TzJkdmIyY3VhVEU0Ymk1aWFXUnBMbWhoYzA1MWJXVnlZV3h6VW1WZlBTOWJYRnhrWEZ4MU1EWm1NQzFjWEhVd05tWTVYUzg3WjI5dlp5NXBNVGh1TG1KcFpHa3VjblJzUkdWMFpXTjBhVzl1VkdoeVpYTm9iMnhrWHowdU5EdGNibWR2YjJjdWFURTRiaTVpYVdScExtVnpkR2x0WVhSbFJHbHlaV04wYVc5dVBXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTlNQ3hrUFRBc1pUMGhNVHRoUFdkdmIyY3VhVEU0Ymk1aWFXUnBMbk4wY21sd1NIUnRiRWxtVG1WbFpHVmtYeWhoTEdJcExuTndiR2wwS0dkdmIyY3VhVEU0Ymk1aWFXUnBMbmR2Y21SVFpYQmhjbUYwYjNKU1pWOHBPMlp2Y2loaVBUQTdZanhoTG14bGJtZDBhRHRpS3lzcGUzWmhjaUJtUFdGYllsMDdaMjl2Wnk1cE1UaHVMbUpwWkdrdWMzUmhjblJ6VjJsMGFGSjBiQ2htS1Q4b1l5c3JMR1FyS3lrNloyOXZaeTVwTVRodUxtSnBaR2t1YVhOU1pYRjFhWEpsWkV4MGNsSmxYeTUwWlhOMEtHWXBQMlU5SVRBNloyOXZaeTVwTVRodUxtSnBaR2t1YUdGelFXNTVUSFJ5S0dZcFAyUXJLenBuYjI5bkxta3hPRzR1WW1sa2FTNW9ZWE5PZFcxbGNtRnNjMUpsWHk1MFpYTjBLR1lwSmlZb1pUMGhNQ2w5Y21WMGRYSnVJREE5UFdRL1pUOW5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVURlJTT21kdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1T1JWVlVVa0ZNT21NdlpENW5iMjluTG1reE9HNHVZbWxrYVM1eWRHeEVaWFJsWTNScGIyNVVhSEpsYzJodmJHUmZQMmR2YjJjdWFURTRiaTVpYVdScExrUnBjaTVTVkV3NloyOXZaeTVwTVRodUxtSnBaR2t1UkdseUxreFVVbjA3WEc1bmIyOW5MbWt4T0c0dVltbGthUzVrWlhSbFkzUlNkR3hFYVhKbFkzUnBiMjVoYkdsMGVUMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxta3hPRzR1WW1sa2FTNWxjM1JwYldGMFpVUnBjbVZqZEdsdmJpaGhMR0lwUFQxbmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVVsUk1mVHRuYjI5bkxta3hPRzR1WW1sa2FTNXpaWFJGYkdWdFpXNTBSR2x5UVc1a1FXeHBaMjQ5Wm5WdVkzUnBiMjRvWVN4aUtYdGhKaVlvWWoxbmIyOW5MbWt4T0c0dVltbGthUzUwYjBScGNpaGlLU2ttSmloaExuTjBlV3hsTG5SbGVIUkJiR2xuYmoxaVBUMW5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVVbFJNUDJkdmIyY3VhVEU0Ymk1aWFXUnBMbEpKUjBoVU9tZHZiMmN1YVRFNGJpNWlhV1JwTGt4RlJsUXNZUzVrYVhJOVlqMDlaMjl2Wnk1cE1UaHVMbUpwWkdrdVJHbHlMbEpVVEQ5Y0luSjBiRndpT2x3aWJIUnlYQ0lwZlR0Y2JtZHZiMmN1YVRFNGJpNWlhV1JwTG5ObGRFVnNaVzFsYm5SRWFYSkNlVlJsZUhSRWFYSmxZM1JwYjI1aGJHbDBlVDFtZFc1amRHbHZiaWhoTEdJcGUzTjNhWFJqYUNobmIyOW5MbWt4T0c0dVltbGthUzVsYzNScGJXRjBaVVJwY21WamRHbHZiaWhpS1NsN1kyRnpaU0JuYjI5bkxta3hPRzR1WW1sa2FTNUVhWEl1VEZSU09tRXVaR2x5UFZ3aWJIUnlYQ0k3WW5KbFlXczdZMkZ6WlNCbmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVVsUk1PbUV1WkdseVBWd2ljblJzWENJN1luSmxZV3M3WkdWbVlYVnNkRHBoTG5KbGJXOTJaVUYwZEhKcFluVjBaU2hjSW1ScGNsd2lLWDE5TzJkdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY21WamRHbHZibUZzVTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3ZlR0bmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1BXWjFibU4wYVc5dUtDbDdkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhYY21Gd2NHVmtWbUZzZFdWZlBWd2lYQ0k3ZEdocGN5NTBjblZ6ZEdWa1ZWSk1YejF1ZFd4c08zUm9hWE11VkZKVlUxUkZSRjlTUlZOUFZWSkRSVjlWVWt4ZlZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZQV2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZmZUdG5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbkJ5YjNSdmRIbHdaUzVwYlhCc1pXMWxiblJ6UjI5dloxTjBjbWx1WjFSNWNHVmtVM1J5YVc1blBTRXdPMmR2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1Y0hKdmRHOTBlWEJsTG1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteFhjbUZ3Y0dWa1ZtRnNkV1ZmTG5SdlUzUnlhVzVuS0NsOU8xeHVaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzV3Y205MGIzUjVjR1V1YVcxd2JHVnRaVzUwYzBkdmIyZEpNVGh1UW1sa2FVUnBjbVZqZEdsdmJtRnNVM1J5YVc1blBTRXdPMmR2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1Y0hKdmRHOTBlWEJsTG1kbGRFUnBjbVZqZEdsdmJqMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVURlJTZlR0Y2JtZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VjSEp2ZEc5MGVYQmxMbU5zYjI1bFYybDBhRkJoY21GdGN6MW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQV2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1ZFc1M2NtRndLSFJvYVhNcE8yTTlaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzVWVWt4ZlVFRlNRVTFmVUVGU1UwVlNYeTVsZUdWaktHTXBPM1poY2lCa1BXTmJNMTE4ZkZ3aVhDSTdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VZM0psWVhSbFZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWTFzeFhTdG5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbk4wY21sdVoybG1lVkJoY21GdGMxOG9YQ0kvWENJc1kxc3lYWHg4WENKY0lpeGhLU3RuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG5OMGNtbHVaMmxtZVZCaGNtRnRjMThvWENJalhDSXNaQ3hpS1NsOU8xeHVaMjl2Wnk1RVJVSlZSeVltS0dkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dWNISnZkRzkwZVhCbExuUnZVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdVhDSlVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNteDdYQ0lyZEdocGN5NXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVWNuVnpkR1ZrVW1WemIzVnlZMlZWY214WGNtRndjR1ZrVm1Gc2RXVmZLMXdpZlZ3aWZTazdaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGTmpjbWx3ZEZWU1RDaGhLUzUwYjFOMGNtbHVaeWdwZlR0Y2JtZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VkVzUzY21Gd1ZISjFjM1JsWkZOamNtbHdkRlZTVEQxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDWW1ZUzVqYjI1emRISjFZM1J2Y2owOVBXZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd21KbUV1VkZKVlUxUkZSRjlTUlZOUFZWSkRSVjlWVWt4ZlZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZQVDA5WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOHBjbVYwZFhKdUlHRXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1YzSmhjSEJsWkZaaGJIVmxYenRuYjI5bkxtRnpjMlZ5ZEhNdVptRnBiQ2hjSW1WNGNHVmpkR1ZrSUc5aWFtVmpkQ0J2WmlCMGVYQmxJRlJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQ3dnWjI5MElDZGNJaXRoSzF3aUp5QnZaaUIwZVhCbElGd2lLMmR2YjJjdWRIbHdaVTltS0dFcEtUdHlaWFIxY201Y0luUjVjR1ZmWlhKeWIzSTZWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNYQ0o5TzF4dVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTVBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhMblJ5ZFhOMFpXUlZVa3hmUDJFdWRISjFjM1JsWkZWU1RGODZaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQW9ZU2w5TzF4dVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNW1iM0p0WVhROVpuVnVZM1JwYjI0b1lTeGlLWHQyWVhJZ1l6MW5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTazdhV1lvSVdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dVFrRlRSVjlWVWt4ZkxuUmxjM1FvWXlrcGRHaHliM2NnUlhKeWIzSW9YQ0pKYm5aaGJHbGtJRlJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQ0JtYjNKdFlYUTZJRndpSzJNcE8yRTlZeTV5WlhCc1lXTmxLR2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1Ums5U1RVRlVYMDFCVWt0RlVsOHNablZ1WTNScGIyNG9ZU3hsS1h0cFppZ2hUMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLR0lzWlNrcGRHaHliM2NnUlhKeWIzSW9KMFp2ZFc1a0lHMWhjbXRsY2l3Z1hDSW5LMlVySjF3aUxDQnBiaUJtYjNKdFlYUWdjM1J5YVc1bkxDQmNJaWNyWXlzblhDSXNJR0oxZENCdWJ5QjJZV3hwWkNCc1lXSmxiQ0J0WVhCd2FXNW5JR1p2ZFc1a0lHbHVJR0Z5WjNNNklDY3JTbE5QVGk1emRISnBibWRwWm5rb1lpa3BPMkU5WWx0bFhUdHlaWFIxY200Z1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBQMmR2YjJjdWMzUnlhVzVuTGtOdmJuTjBMblZ1ZDNKaGNDaGhLVHBjYm1WdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZENoVGRISnBibWNvWVNrcGZTazdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VZM0psWVhSbFZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWVNsOU8yZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3VSazlTVFVGVVgwMUJVa3RGVWw4OUx5VjdLRnhjZHlzcGZTOW5PMmR2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1UWtGVFJWOVZVa3hmUFM5ZUtDaG9kSFJ3Y3pvcFAxeGNMMXhjTDFzd0xUbGhMWG91T2x0Y1hGMHRYU3RjWEM5OFhGd3ZXMTR2WEZ4Y1hGMThXMTQ2TDF4Y1hGd2xYU3RjWEM5OFcxNDZMMXhjWEZ3bFhTcGJQeU5kZkdGaWIzVjBPbUpzWVc1ckl5a3ZhVHRuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTGxWU1RGOVFRVkpCVFY5UVFWSlRSVkpmUFM5ZUtGdGVQeU5kS2lrb1hGdy9XMTRqWFNvcFB5Z2pXMXhjYzF4Y1UxMHFLVDh2TzF4dVoyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNW1iM0p0WVhSWGFYUm9VR0Z5WVcxelBXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUzSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xtWnZjbTFoZENoaExHSXBMbU5zYjI1bFYybDBhRkJoY21GdGN5aGpMR1FwZlR0bmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xtWnliMjFEYjI1emRHRnVkRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1amNtVmhkR1ZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BmVHRuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG1aeWIyMURiMjV6ZEdGdWRITTlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFZ3aVhDSXNZejB3TzJNOFlTNXNaVzVuZEdnN1l5c3JLV0lyUFdkdmIyY3VjM1J5YVc1bkxrTnZibk4wTG5WdWQzSmhjQ2hoVzJOZEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNWpjbVZoZEdWVWNuVnpkR1ZrVW1WemIzVnlZMlZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hpS1gwN1hHNW5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbFJaVUVWZlRVRlNTMFZTWDBkUFQwZGZTRlJOVEY5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHoxN2ZUdGNibWR2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1WTNKbFlYUmxWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVOVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOWJtVjNJR2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXc3WWk1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXhYY21Gd2NHVmtWbUZzZFdWZlBXZHZiMmN1YUhSdGJDNTBjblZ6ZEdWa2RIbHdaWE11VUZKSlZrRlVSVjlFVDE5T1QxUmZRVU5EUlZOVFgwOVNYMFZNVTBWZlVFOU1TVU5aUDJkdmIyY3VhSFJ0YkM1MGNuVnpkR1ZrZEhsd1pYTXVVRkpKVmtGVVJWOUVUMTlPVDFSZlFVTkRSVk5UWDA5U1gwVk1VMFZmVUU5TVNVTlpMbU55WldGMFpWTmpjbWx3ZEZWU1RDaGhLVHBoTzJkdmIyY3VhSFJ0YkM1MGNuVnpkR1ZrZEhsd1pYTXVVRkpKVmtGVVJWOUVUMTlPVDFSZlFVTkRSVk5UWDA5U1gwVk1VMFZmVUU5TVNVTlpKaVlvWWk1MGNuVnpkR1ZrVlZKTVh6MW5iMjluTG1oMGJXd3VkSEoxYzNSbFpIUjVjR1Z6TGxCU1NWWkJWRVZmUkU5ZlRrOVVYMEZEUTBWVFUxOVBVbDlGVEZORlgxQlBURWxEV1M1amNtVmhkR1ZWVWt3b1lTa3BPM0psZEhWeWJpQmlmVHRjYm1kdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dWMzUnlhVzVuYVdaNVVHRnlZVzF6WHoxbWRXNWpkR2x2YmloaExHSXNZeWw3YVdZb2JuVnNiRDA5WXlseVpYUjFjbTRnWWp0cFppaG5iMjluTG1selUzUnlhVzVuS0dNcEtYSmxkSFZ5YmlCalAyRXJaVzVqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLR01wT2x3aVhDSTdabTl5S0haaGNpQmtJR2x1SUdNcGUzWmhjaUJsUFdOYlpGMDdaVDFuYjI5bkxtbHpRWEp5WVhrb1pTay9aVHBiWlYwN1ptOXlLSFpoY2lCbVBUQTdaanhsTG14bGJtZDBhRHRtS3lzcGUzWmhjaUJuUFdWYlpsMDdiblZzYkNFOVp5WW1LR0o4ZkNoaVBXRXBMR0lyUFNoaUxteGxibWQwYUQ1aExteGxibWQwYUQ5Y0lpWmNJanBjSWx3aUtTdGxibU52WkdWVlVrbERiMjF3YjI1bGJuUW9aQ2tyWENJOVhDSXJaVzVqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLRk4wY21sdVp5aG5LU2twZlgxeVpYUjFjbTRnWW4wN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXdzllMzA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWMzUmhjblJ6VjJsMGFEMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUF3UFQxaExteGhjM1JKYm1SbGVFOW1LR0lzTUNsOU8yZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbVZ1WkhOWGFYUm9QV1oxYm1OMGFXOXVLR0VzWWlsN2RtRnlJR005WVM1c1pXNW5kR2d0WWk1c1pXNW5kR2c3Y21WMGRYSnVJREE4UFdNbUptRXVhVzVrWlhoUFppaGlMR01wUFQxamZUdG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqWVhObFNXNXpaVzV6YVhScGRtVlRkR0Z5ZEhOWGFYUm9QV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SURBOVBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVTnZiWEJoY21Vb1lpeGhMbk4xWW5OMGNpZ3dMR0l1YkdWdVozUm9LU2w5TzJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlVWdVpITlhhWFJvUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlEQTlQV2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OaGMyVkpibk5sYm5OcGRHbDJaVU52YlhCaGNtVW9ZaXhoTG5OMVluTjBjaWhoTG14bGJtZDBhQzFpTG14bGJtZDBhQ3hpTG14bGJtZDBhQ2twZlR0Y2JtZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVVnhkV0ZzY3oxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQmhMblJ2VEc5M1pYSkRZWE5sS0NrOVBXSXVkRzlNYjNkbGNrTmhjMlVvS1gwN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VhWE5GYlhCMGVVOXlWMmhwZEdWemNHRmpaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTR2WGx0Y1hITmNYSGhoTUYwcUpDOHVkR1Z6ZENoaEtYMDdaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1ZEhKcGJUMW5iMjluTGxSU1ZWTlVSVVJmVTBsVVJTWW1VM1J5YVc1bkxuQnliM1J2ZEhsd1pTNTBjbWx0UDJaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCaExuUnlhVzBvS1gwNlpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUwxNWJYRnh6WEZ4NFlUQmRLaWhiWEZ4elhGeFRYU28vS1Z0Y1hITmNYSGhoTUYwcUpDOHVaWGhsWXloaEtWc3hYWDA3WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyRnpaVWx1YzJWdWMybDBhWFpsUTI5dGNHRnlaVDFtZFc1amRHbHZiaWhoTEdJcGUyRTlVM1J5YVc1bktHRXBMblJ2VEc5M1pYSkRZWE5sS0NrN1lqMVRkSEpwYm1jb1lpa3VkRzlNYjNkbGNrTmhjMlVvS1R0eVpYUjFjbTRnWVR4aVB5MHhPbUU5UFdJL01Eb3hmVHRjYm1kdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtNWxkMHhwYm1WVWIwSnlQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdFdWNtVndiR0ZqWlNndktGeGNjbHhjYm54Y1hISjhYRnh1S1M5bkxHSS9YQ0k4WW5JZ0x6NWNJanBjSWp4aWNqNWNJaWw5TzF4dVoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VhSFJ0YkVWelkyRndaVDFtZFc1amRHbHZiaWhoTEdJcGUybG1LR0lwWVQxaExuSmxjR3hoWTJVb1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VRVTFRWDFKRlh5eGNJaVpoYlhBN1hDSXBMbkpsY0d4aFkyVW9aMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1VEZSZlVrVmZMRndpSm14ME8xd2lLUzV5WlhCc1lXTmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTGtkVVgxSkZYeXhjSWlabmREdGNJaWt1Y21Wd2JHRmpaU2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1UlZVOVVYMUpGWHl4Y0lpWnhkVzkwTzF3aUtTNXlaWEJzWVdObEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbE5KVGtkTVJWOVJWVTlVUlY5U1JWOHNYQ0ltSXpNNU8xd2lLUzV5WlhCc1lXTmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTGs1VlRFeGZVa1ZmTEZ3aUppTXdPMXdpS1R0bGJITmxlMmxtS0NGbmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNUJURXhmVWtWZkxuUmxjM1FvWVNrcGNtVjBkWEp1SUdFN0xURWhQV0V1YVc1a1pYaFBaaWhjSWlaY0lpa21KaWhoUFdFdWNtVndiR0ZqWlNobmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNUJUVkJmVWtWZkxGd2lKbUZ0Y0R0Y0lpa3BPeTB4SVQxaExtbHVaR1Y0VDJZb1hDSThYQ0lwSmlZb1lUMWhMbkpsY0d4aFkyVW9aMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1VEZSZlVrVmZMRnh1WENJbWJIUTdYQ0lwS1RzdE1TRTlZUzVwYm1SbGVFOW1LRndpUGx3aUtTWW1LR0U5WVM1eVpYQnNZV05sS0dkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xrZFVYMUpGWHl4Y0lpWm5kRHRjSWlrcE95MHhJVDFoTG1sdVpHVjRUMllvSjF3aUp5a21KaWhoUFdFdWNtVndiR0ZqWlNobmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNVJWVTlVWDFKRlh5eGNJaVp4ZFc5ME8xd2lLU2s3TFRFaFBXRXVhVzVrWlhoUFppaGNJaWRjSWlrbUppaGhQV0V1Y21Wd2JHRmpaU2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1VFNVNUhURVZmVVZWUFZFVmZVa1ZmTEZ3aUppTXpPVHRjSWlrcE95MHhJVDFoTG1sdVpHVjRUMllvWENKY1hIZ3dNRndpS1NZbUtHRTlZUzV5WlhCc1lXTmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTGs1VlRFeGZVa1ZmTEZ3aUppTXdPMXdpS1NsOWNtVjBkWEp1SUdGOU8yZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMa0ZOVUY5U1JWODlMeVl2Wnp0bmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNU1WRjlTUlY4OUx6d3ZaenRuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1SFZGOVNSVjg5THo0dlp6dG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVSVlU5VVgxSkZYejB2WENJdlp6dG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVUU1U1SFRFVmZVVlZQVkVWZlVrVmZQUzhuTDJjN1hHNW5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVPVlV4TVgxSkZYejB2WEZ4NE1EQXZaenRuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1QlRFeGZVa1ZmUFM5YlhGeDRNREFtUEQ1Y0lpZGRMenRuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1M2FHbDBaWE53WVdObFJYTmpZWEJsUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbTVsZDB4cGJtVlViMEp5S0dFdWNtVndiR0ZqWlNndklDQXZaeXhjSWlBbUl6RTJNRHRjSWlrc1lpbDlPMmR2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OdmJuUmhhVzV6UFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUxURWhQV0V1YVc1a1pYaFBaaWhpS1gwN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMkZ6WlVsdWMyVnVjMmwwYVhabFEyOXVkR0ZwYm5NOVpuVnVZM1JwYjI0b1lTeGlLWHR5WlhSMWNtNGdaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dWRHRnBibk1vWVM1MGIweHZkMlZ5UTJGelpTZ3BMR0l1ZEc5TWIzZGxja05oYzJVb0tTbDlPMXh1WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyOXRjR0Z5WlZabGNuTnBiMjV6UFdaMWJtTjBhVzl1S0dFc1lpbDdkbUZ5SUdNOU1EdGhQV2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG5SeWFXMG9VM1J5YVc1bktHRXBLUzV6Y0d4cGRDaGNJaTVjSWlrN1lqMW5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzUwY21sdEtGTjBjbWx1WnloaUtTa3VjM0JzYVhRb1hDSXVYQ0lwTzJadmNpaDJZWElnWkQxTllYUm9MbTFoZUNoaExteGxibWQwYUN4aUxteGxibWQwYUNrc1pUMHdPekE5UFdNbUptVThaRHRsS3lzcGUzWmhjaUJtUFdGYlpWMThmRndpWENJc1p6MWlXMlZkZkh4Y0lsd2lPMlJ2ZTJZOUx5aGNYR1FxS1NoY1hFUXFLU2d1S2lrdkxtVjRaV01vWmlsOGZGdGNJbHdpTEZ3aVhDSXNYQ0pjSWl4Y0lsd2lYVHRuUFM4b1hGeGtLaWtvWEZ4RUtpa29MaW9wTHk1bGVHVmpLR2NwZkh4YlhDSmNJaXhjSWx3aUxGd2lYQ0lzWENKY0lsMDdhV1lvTUQwOVpsc3dYUzVzWlc1bmRHZ21KakE5UFdkYk1GMHViR1Z1WjNSb0tXSnlaV0ZyTzJNOU1EMDlabHN4WFM1c1pXNW5kR2cvTURwd1lYSnpaVWx1ZENobVd6RmRMREV3S1R0MllYSWdhRDB3UFQxbld6RmRMbXhsYm1kMGFEOHdPbkJoY25ObFNXNTBLR2RiTVYwc01UQXBPMk05WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dVkyOXRjR0Z5WlVWc1pXMWxiblJ6WHloakxHZ3BmSHhuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1amIyMXdZWEpsUld4bGJXVnVkSE5mS0RBOVBWeHVabHN5WFM1c1pXNW5kR2dzTUQwOVoxc3lYUzVzWlc1bmRHZ3BmSHhuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1amIyMXdZWEpsUld4bGJXVnVkSE5mS0daYk1sMHNaMXN5WFNrN1pqMW1Xek5kTzJjOVoxc3pYWDEzYUdsc1pTZ3dQVDFqS1gxeVpYUjFjbTRnWTMwN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMjl0Y0dGeVpVVnNaVzFsYm5Selh6MW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJoUEdJL0xURTZZVDVpUHpFNk1IMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtdzlablZ1WTNScGIyNG9LWHQwYUdsekxuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVlZjbXhYY21Gd2NHVmtWbUZzZFdWZlBWd2lYQ0k3ZEdocGN5NVRRVVpGWDFWU1RGOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjg5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZmZUdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNUpUazVQUTFWUFZWTmZVMVJTU1U1SFBWd2lZV0p2ZFhRNmFXNTJZV3hwWkNONlEyeHZjM1Z5WlhwY0lqdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXdjbTkwYjNSNWNHVXVhVzF3YkdWdFpXNTBjMGR2YjJkVGRISnBibWRVZVhCbFpGTjBjbWx1WnowaE1EdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXdjbTkwYjNSNWNHVXVaMlYwVkhsd1pXUlRkSEpwYm1kV1lXeDFaVDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVlZjbXhYY21Gd2NHVmtWbUZzZFdWZkxuUnZVM1J5YVc1bktDbDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1Y0hKdmRHOTBlWEJsTG1sdGNHeGxiV1Z1ZEhOSGIyOW5TVEU0YmtKcFpHbEVhWEpsWTNScGIyNWhiRk4wY21sdVp6MGhNRHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV3Y205MGIzUjVjR1V1WjJWMFJHbHlaV04wYVc5dVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNU1WRko5TzJkdmIyY3VSRVZDVlVjbUppaG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXdjbTkwYjNSNWNHVXVkRzlUZEhKcGJtYzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNWNJbE5oWm1WVmNteDdYQ0lyZEdocGN5NXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVFlXWmxWWEpzVjNKaGNIQmxaRlpoYkhWbFh5dGNJbjFjSW4wcE8yZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0QxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dWRXNTNjbUZ3VkhKMWMzUmxaRlZTVENoaEtTNTBiMU4wY21sdVp5Z3BmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3c5Wm5WdVkzUnBiMjRvWVNsN2FXWW9ZU0JwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzSmlaaExtTnZibk4wY25WamRHOXlQVDA5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXdtSm1FdVUwRkdSVjlWVWt4ZlZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZQVDA5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZktYSmxkSFZ5YmlCaExuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVlZjbXhYY21Gd2NHVmtWbUZzZFdWZk8yZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2laWGh3WldOMFpXUWdiMkpxWldOMElHOW1JSFI1Y0dVZ1UyRm1aVlZ5YkN3Z1oyOTBJQ2RjSWl0aEsxd2lKeUJ2WmlCMGVYQmxJRndpSzJkdmIyY3VkSGx3WlU5bUtHRXBLVHR5WlhSMWNtNWNJblI1Y0dWZlpYSnliM0k2VTJGbVpWVnliRndpZlR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1bWNtOXRRMjl1YzNSaGJuUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2huYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2twZlR0Y2JtZHZiMmN1YUhSdGJDNVRRVVpGWDAxSlRVVmZWRmxRUlY5UVFWUlVSVkpPWHowdlhpZy9PbUYxWkdsdlhGd3ZLRDg2TTJkd2NESjhNMmR3Y0h4aFlXTjhUREUyZkcxcFpHbDhiWEF6Zkcxd05IeHRjR1ZuZkc5bllYeHZaMmQ4YjNCMWMzeDRMVzAwWVh4NExYZGhkbngzWVhaOGQyVmliU2w4YVcxaFoyVmNYQzhvUHpwaWJYQjhaMmxtZkdwd1pXZDhhbkJuZkhCdVozeDBhV1ptZkhkbFluQjhlQzFwWTI5dUtYeDBaWGgwWEZ3dlkzTjJmSFpwWkdWdlhGd3ZLRDg2YlhCbFozeHRjRFI4YjJkbmZIZGxZbTE4Y1hWcFkydDBhVzFsS1Nrb1B6bzdYRngzS3owb1B6cGNYSGNyZkZ3aVcxeGNkenM5WFN0Y0lpa3BLaVF2YVR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1cGMxTmhabVZOYVcxbFZIbHdaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOQlJrVmZUVWxOUlY5VVdWQkZYMUJCVkZSRlVrNWZMblJsYzNRb1lTbDlPMmR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbVp5YjIxQ2JHOWlQV1oxYm1OMGFXOXVLR0VwZTJFOVoyOXZaeTVvZEcxc0xsTkJSa1ZmVFVsTlJWOVVXVkJGWDFCQlZGUkZVazVmTG5SbGMzUW9ZUzUwZVhCbEtUOW5iMjluTG1aekxuVnliQzVqY21WaGRHVlBZbXBsWTNSVmNtd29ZU2s2WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1U1U1T1QwTlZUMVZUWDFOVVVrbE9SenR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VZM0psWVhSbFUyRm1aVlZ5YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR0VwZlR0Y2JtZHZiMmN1YUhSdGJDNUVRVlJCWDFWU1RGOVFRVlJVUlZKT1h6MHZYbVJoZEdFNktGdGVMRjBxS1R0aVlYTmxOalFzVzJFdGVqQXRPU3RjWEM5ZEt6MHFKQzlwTzJkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG1aeWIyMUVZWFJoVlhKc1BXWjFibU4wYVc5dUtHRXBlMkU5WVM1eVpYQnNZV05sS0M4b0pUQkJmQ1V3UkNrdlp5eGNJbHdpS1R0MllYSWdZajFoTG0xaGRHTm9LR2R2YjJjdWFIUnRiQzVFUVZSQlgxVlNURjlRUVZSVVJWSk9YeWs3WWoxaUppWm5iMjluTG1oMGJXd3VVMEZHUlY5TlNVMUZYMVJaVUVWZlVFRlVWRVZTVGw4dWRHVnpkQ2hpV3pGZEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVkzSmxZWFJsVTJGbVpWVnliRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHSS9ZVHBuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVKVGs1UFExVlBWVk5mVTFSU1NVNUhLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1Wm5KdmJWUmxiRlZ5YkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqWVhObFNXNXpaVzV6YVhScGRtVlRkR0Z5ZEhOWGFYUm9LR0VzWENKMFpXdzZYQ0lwZkh3b1lUMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNUpUazVQUTFWUFZWTmZVMVJTU1U1SEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVkzSmxZWFJsVTJGbVpWVnliRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHRXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFNWQmZWVkpNWDFCQlZGUkZVazVmUFM5ZWMybHdXM05kUHpwYksyRXRlakF0T1Y4dUlTUWxKaWNxWEZ3dlBWNWdlM3g5ZmkxZEswQW9XMkV0ZWpBdE9TMWRLMXhjTGlrclcyRXRlakF0T1YxN01pdzJNMzBrTDJrN1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVpuSnZiVk5wY0ZWeWJEMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtaDBiV3d1VTBsUVgxVlNURjlRUVZSVVJWSk9YeTUwWlhOMEtHUmxZMjlrWlZWU1NVTnZiWEJ2Ym1WdWRDaGhLU2w4ZkNoaFBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xrbE9UazlEVlU5VlUxOVRWRkpKVGtjcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1amNtVmhkR1ZUWVdabFZYSnNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lTbDlPMmR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbVp5YjIxR1lXTmxZbTl2YTAxbGMzTmxibWRsY2xWeWJEMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1allYTmxTVzV6Wlc1emFYUnBkbVZUZEdGeWRITlhhWFJvS0dFc1hDSm1ZaTF0WlhOelpXNW5aWEk2THk5emFHRnlaVndpS1h4OEtHRTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VTVTVPVDBOVlQxVlRYMU5VVWtsT1J5azdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xtTnlaV0YwWlZOaFptVlZjbXhUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGhLWDA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1bWNtOXRWMmhoZEhOQmNIQlZjbXc5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VZMkZ6WlVsdWMyVnVjMmwwYVhabFUzUmhjblJ6VjJsMGFDaGhMRndpZDJoaGRITmhjSEE2THk5elpXNWtYQ0lwZkh3b1lUMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNUpUazVQUTFWUFZWTmZVMVJTU1U1SEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVkzSmxZWFJsVTJGbVpWVnliRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHRXBmVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVtY205dFUyMXpWWEpzUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpWTjBZWEowYzFkcGRHZ29ZU3hjSW5OdGN6cGNJaWttSm1kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG1selUyMXpWWEpzUW05a2VWWmhiR2xrWHloaEtYeDhLR0U5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1U1U1T1QwTlZUMVZUWDFOVVVrbE9SeWs3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hoS1gwN1hHNW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXBjMU50YzFWeWJFSnZaSGxXWVd4cFpGODlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlZUzVwYm1SbGVFOW1LRndpSTF3aUtUc3dQR0ltSmloaFBXRXVjM1ZpYzNSeWFXNW5LREFzWWlrcE8ySTlZUzV0WVhSamFDZ3ZXejhtWFdKdlpIazlMMmRwS1R0cFppZ2hZaWx5WlhSMWNtNGhNRHRwWmlneFBHSXViR1Z1WjNSb0tYSmxkSFZ5YmlFeE8yRTlZUzV0WVhSamFDZ3ZXejhtWFdKdlpIazlLRnRlSmwwcUtTOHBXekZkTzJsbUtDRmhLWEpsZEhWeWJpRXdPM1J5ZVh0a1pXTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb1lTbDlZMkYwWTJnb1l5bDdjbVYwZFhKdUlURjljbVYwZFhKdUwxNG9QenBiWVMxNk1DMDVYRnd0WHk1K1hYd2xXekF0T1dFdFpsMTdNbjBwS3lRdmFTNTBaWE4wS0dFcGZUdG5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNW1jbTl0VTNOb1ZYSnNQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTmhjMlZKYm5ObGJuTnBkR2wyWlZOMFlYSjBjMWRwZEdnb1lTeGNJbk56YURvdkwxd2lLWHg4S0dFOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dVNVNU9UME5WVDFWVFgxTlVVa2xPUnlrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG1OeVpXRjBaVk5oWm1WVmNteFRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVU5vY205dFpVVjRkR1Z1YzJsdmJsVnliRDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlVWNGRHVnVjMmx2YmxWeWJGOG9MMTVqYUhKdmJXVXRaWGgwWlc1emFXOXVPbHhjTDF4Y0x5aGJYbHhjTDEwcktWeGNMeThzWVN4aUtYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjMkZ1YVhScGVtVkdhWEpsWm05NFJYaDBaVzV6YVc5dVZYSnNQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUlhoMFpXNXphVzl1VlhKc1h5Z3ZYbTF2ZWkxbGVIUmxibk5wYjI0NlhGd3ZYRnd2S0Z0ZVhGd3ZYU3NwWEZ3dkx5eGhMR0lwZlR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlVWa1oyVkZlSFJsYm5OcGIyNVZjbXc5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1WRmVIUmxibk5wYjI1VmNteGZLQzllYlhNdFluSnZkM05sY2kxbGVIUmxibk5wYjI0NlhGd3ZYRnd2S0Z0ZVhGd3ZYU3NwWEZ3dkx5eGhMR0lwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuTmhibWwwYVhwbFJYaDBaVzV6YVc5dVZYSnNYejFtZFc1amRHbHZiaWhoTEdJc1l5bDdLR0U5WVM1bGVHVmpLR0lwS1Q4b1lUMWhXekZkTEMweFBUMG9ZeUJwYm5OMFlXNWpaVzltSUdkdmIyY3VjM1J5YVc1bkxrTnZibk4wUDF0bmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWXlsZE9tTXViV0Z3S0daMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNsOUtTa3VhVzVrWlhoUFppaGhLU1ltS0dJOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dVNVNU9UME5WVDFWVFgxTlVVa2xPUnlrcE9tSTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VTVTVPVDBOVlQxVlRYMU5VVWtsT1J6dHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZWY213dVkzSmxZWFJsVTJGbVpWVnliRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtHSXBmVHRuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVtY205dFZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc1BXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNWpjbVZoZEdWVFlXWmxWWEpzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9aMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQW9ZU2twZlR0Y2JtZHZiMmN1YUhSdGJDNVRRVVpGWDFWU1RGOVFRVlJVUlZKT1h6MHZYaWcvT2lnL09taDBkSEJ6UDN4dFlXbHNkRzk4Wm5Sd0tUcDhXMTQ2THo4alhTb29QenBiTHo4alhYd2tLU2t2YVR0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1VFFVWkZYMVZTVEY5UVFWUlVSVkpPUFdkdmIyY3VhSFJ0YkM1VFFVWkZYMVZTVEY5UVFWUlVSVkpPWHp0bmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlQxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZWY213cGNtVjBkWEp1SUdFN1lUMWNJbTlpYW1WamRGd2lQVDEwZVhCbGIyWWdZU1ltWVM1cGJYQnNaVzFsYm5SelIyOXZaMU4wY21sdVoxUjVjR1ZrVTNSeWFXNW5QMkV1WjJWMFZIbHdaV1JUZEhKcGJtZFdZV3gxWlNncE9sTjBjbWx1WnloaEtUdG5iMjluTG1oMGJXd3VVMEZHUlY5VlVreGZVRUZVVkVWU1RsOHVkR1Z6ZENoaEtYeDhLR0U5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1U1U1T1QwTlZUMVZUWDFOVVVrbE9SeWs3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hoS1gwN1hHNW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXpZVzVwZEdsNlpVRnpjMlZ5ZEZWdVkyaGhibWRsWkQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0dFZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJDbHlaWFIxY200Z1lUdGhQVndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJoSmlaaExtbHRjR3hsYldWdWRITkhiMjluVTNSeWFXNW5WSGx3WldSVGRISnBibWMvWVM1blpYUlVlWEJsWkZOMGNtbHVaMVpoYkhWbEtDazZVM1J5YVc1bktHRXBPMmxtS0dJbUppOWVaR0YwWVRvdmFTNTBaWE4wS0dFcEppWW9ZajFuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzVtY205dFJHRjBZVlZ5YkNoaEtTeGlMbWRsZEZSNWNHVmtVM1J5YVc1blZtRnNkV1VvS1QwOVlTa3BjbVYwZFhKdUlHSTdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2huYjI5bkxtaDBiV3d1VTBGR1JWOVZVa3hmVUVGVVZFVlNUbDh1ZEdWemRDaGhLU3hjSWlWeklHUnZaWE1nYm05MElHMWhkR05vSUhSb1pTQnpZV1psSUZWU1RDQndZWFIwWlhKdVhDSXNZU2w4ZkNoaFBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xrbE9UazlEVlU5VlUxOVRWRkpKVGtjcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1amNtVmhkR1ZUWVdabFZYSnNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lTbDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBYdDlPMmR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbU55WldGMFpWTmhabVZWY214VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajF1WlhjZ1oyOXZaeTVvZEcxc0xsTmhabVZWY213N1lpNXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVFlXWmxWWEpzVjNKaGNIQmxaRlpoYkhWbFh6MW5iMjluTG1oMGJXd3VkSEoxYzNSbFpIUjVjR1Z6TGxCU1NWWkJWRVZmUkU5ZlRrOVVYMEZEUTBWVFUxOVBVbDlGVEZORlgxQlBURWxEV1Q5bmIyOW5MbWgwYld3dWRISjFjM1JsWkhSNWNHVnpMbEJTU1ZaQlZFVmZSRTlmVGs5VVgwRkRRMFZUVTE5UFVsOUZURk5GWDFCUFRFbERXUzVqY21WaGRHVlZVa3dvWVNrNllUdHlaWFIxY200Z1luMDdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VRVUpQVlZSZlFreEJUa3M5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1WTNKbFlYUmxVMkZtWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aVlXSnZkWFE2WW14aGJtdGNJaWs3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlQxbWRXNWpkR2x2YmlncGUzUm9hWE11Y0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlZOMGVXeGxWM0poY0hCbFpGWmhiSFZsWHoxY0lsd2lPM1JvYVhNdVUwRkdSVjlUVkZsTVJWOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjg5WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWOTlPMmR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1Y0hKdmRHOTBlWEJsTG1sdGNHeGxiV1Z1ZEhOSGIyOW5VM1J5YVc1blZIbHdaV1JUZEhKcGJtYzlJVEE3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWODllMzA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExtWnliMjFEYjI1emRHRnVkRDFtZFc1amRHbHZiaWhoS1h0aFBXZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExuVnVkM0poY0NoaEtUdHBaaWd3UFQwOVlTNXNaVzVuZEdncGNtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVJVMVFWRms3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENobmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNWxibVJ6VjJsMGFDaGhMRndpTzF3aUtTeGNJa3hoYzNRZ1kyaGhjbUZqZEdWeUlHOW1JSE4wZVd4bElITjBjbWx1WnlCcGN5QnViM1FnSnpzbk9pQmNJaXRoS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU52Ym5SaGFXNXpLR0VzWENJNlhDSXBMRndpVTNSNWJHVWdjM1J5YVc1bklHMTFjM1FnWTI5dWRHRnBiaUJoZENCc1pXRnpkQ0J2Ym1VZ0p6b25MQ0IwYnlCemNHVmphV1o1SUdFZ1hGeGNJbTVoYldVNklIWmhiSFZsWEZ4Y0lpQndZV2x5T2lCY0lpdGhLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVqY21WaGRHVlRZV1psVTNSNWJHVlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG5CeWIzUnZkSGx3WlM1blpYUlVlWEJsWkZOMGNtbHVaMVpoYkhWbFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlZOMGVXeGxWM0poY0hCbFpGWmhiSFZsWDMwN1oyOXZaeTVFUlVKVlJ5WW1LR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1WENKVFlXWmxVM1I1YkdWN1hDSXJkR2hwY3k1d2NtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZUWVdabFUzUjViR1ZYY21Gd2NHVmtWbUZzZFdWZksxd2lmVndpZlNrN1hHNW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMblZ1ZDNKaGNEMW1kVzVqZEdsdmJpaGhLWHRwWmloaElHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaU1ltWVM1amIyNXpkSEoxWTNSdmNqMDlQV2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1VtSm1FdVUwRkdSVjlUVkZsTVJWOVVXVkJGWDAxQlVrdEZVbDlIVDA5SFgwaFVUVXhmVTBWRFZWSkpWRmxmVUZKSlZrRlVSVjg5UFQxbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYeWx5WlhSMWNtNGdZUzV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlRZV1psVTNSNWJHVlhjbUZ3Y0dWa1ZtRnNkV1ZmTzJkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVpYaHdaV04wWldRZ2IySnFaV04wSUc5bUlIUjVjR1VnVTJGbVpWTjBlV3hsTENCbmIzUWdKMXdpSzJFclhDSW5JRzltSUhSNWNHVWdYQ0lyWjI5dlp5NTBlWEJsVDJZb1lTa3BPM0psZEhWeWJsd2lkSGx3WlY5bGNuSnZjanBUWVdabFUzUjViR1ZjSW4wN1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNWpjbVZoZEdWVFlXWmxVM1I1YkdWVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRvYm1WM0lHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXBMbWx1YVhSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVjhvWVNsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzV3Y205MGIzUjVjR1V1YVc1cGRGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sWHoxbWRXNWpkR2x2YmloaEtYdDBhR2x6TG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WVGRIbHNaVmR5WVhCd1pXUldZV3gxWlY4OVlUdHlaWFIxY200Z2RHaHBjMzA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1RlRWQlVXVDFuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG1OeVpXRjBaVk5oWm1WVGRIbHNaVk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObEtGd2lYQ0lwTzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVNVNU9UME5WVDFWVFgxTlVVa2xPUnoxY0lucERiRzl6ZFhKbGVsd2lPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1amNtVmhkR1U5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5WENKY0lpeGpPMlp2Y2loaklHbHVJR0VwZTJsbUtDRXZYbHN0WDJFdGVrRXRXakF0T1YwckpDOHVkR1Z6ZENoaktTbDBhSEp2ZHlCRmNuSnZjaWhjSWs1aGJXVWdZV3hzYjNkeklHOXViSGtnV3kxZllTMTZRUzFhTUMwNVhTd2daMjkwT2lCY0lpdGpLVHQyWVhJZ1pEMWhXMk5kTzI1MWJHd2hQV1FtSmloa1BXZHZiMmN1YVhOQmNuSmhlU2hrS1Q5bmIyOW5MbUZ5Y21GNUxtMWhjQ2hrTEdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdWMyRnVhWFJwZW1WUWNtOXdaWEowZVZaaGJIVmxYeWt1YW05cGJpaGNJaUJjSWlrNloyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNXpZVzVwZEdsNlpWQnliM0JsY25SNVZtRnNkV1ZmS0dRcExHSXJQV01yWENJNlhDSXJaQ3RjSWp0Y0lpbDljbVYwZFhKdUlHSS9aMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVqY21WaGRHVlRZV1psVTNSNWJHVlRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoaUtUcG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMa1ZOVUZSWmZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1YzJGdWFYUnBlbVZRY205d1pYSjBlVlpoYkhWbFh6MW1kVzVqZEdsdmJpaGhLWHRwWmloaElHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3BjbVYwZFhKdUozVnliQ2hjSWljcloyOXZaeTVvZEcxc0xsTmhabVZWY213dWRXNTNjbUZ3S0dFcExuSmxjR3hoWTJVb0x6d3ZaeXhjSWlVelkxd2lLUzV5WlhCc1lXTmxLQzliWEZ4Y1hGd2lYUzluTEZ3aVhGeGNYQ1FtWENJcEt5ZGNJaWtuTzJFOVlTQnBibk4wWVc1alpXOW1JR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBQMmR2YjJjdWMzUnlhVzVuTGtOdmJuTjBMblZ1ZDNKaGNDaGhLVHBuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTG5OaGJtbDBhWHBsVUhKdmNHVnlkSGxXWVd4MVpWTjBjbWx1WjE4b1UzUnlhVzVuS0dFcEtUdHBaaWd2VzNzN2ZWMHZMblJsYzNRb1lTa3BkR2h5YjNjZ2JtVjNJR2R2YjJjdVlYTnpaWEowY3k1QmMzTmxjblJwYjI1RmNuSnZjaWhjSWxaaGJIVmxJR1J2WlhNZ2JtOTBJR0ZzYkc5M0lGdDdPMzFkTENCbmIzUTZJQ1Z6TGx3aUxGdGhYU2s3Y21WMGRYSnVJR0Y5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNXpZVzVwZEdsNlpWQnliM0JsY25SNVZtRnNkV1ZUZEhKcGJtZGZQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQV0V1Y21Wd2JHRmpaU2huYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTGtaVlRrTlVTVTlPVTE5U1JWOHNYQ0lrTVZ3aUtTNXlaWEJzWVdObEtHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVSbFZPUTFSSlQwNVRYMUpGWHl4Y0lpUXhYQ0lwTG5KbGNHeGhZMlVvWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1VlVreGZVa1ZmTEZ3aWRYSnNYQ0lwTzJsbUtHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVWa0ZNVlVWZlVrVmZMblJsYzNRb1lpa3BlMmxtS0dkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVEwOU5UVVZPVkY5U1JWOHVkR1Z6ZENoaEtTbHlaWFIxY200Z1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSlRkSEpwYm1jZ2RtRnNkV1VnWkdsellXeHNiM2R6SUdOdmJXMWxiblJ6TENCbmIzUTZJRndpSzJFcExHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVTVTVPVDBOVlQxVlRYMU5VVWtsT1J6dHBaaWdoWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1b1lYTkNZV3hoYm1ObFpGRjFiM1JsYzE4b1lTa3BjbVYwZFhKdUlHZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lVM1J5YVc1bklIWmhiSFZsSUhKbGNYVnBjbVZ6SUdKaGJHRnVZMlZrSUhGMWIzUmxjeXdnWjI5ME9pQmNJaXRjYm1FcExHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVTVTVPVDBOVlQxVlRYMU5VVWtsT1J6dHBaaWdoWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1b1lYTkNZV3hoYm1ObFpGTnhkV0Z5WlVKeVlXTnJaWFJ6WHloaEtTbHlaWFIxY200Z1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSlRkSEpwYm1jZ2RtRnNkV1VnY21WeGRXbHlaWE1nWW1Gc1lXNWpaV1FnYzNGMVlYSmxJR0p5WVdOclpYUnpJR0Z1WkNCdmJtVWdhV1JsYm5ScFptbGxjaUJ3WlhJZ2NHRnBjaUJ2WmlCaWNtRmphMlYwY3l3Z1oyOTBPaUJjSWl0aEtTeG5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMa2xPVGs5RFZVOVZVMTlUVkZKSlRrZDlaV3h6WlNCeVpYUjFjbTRnWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKVGRISnBibWNnZG1Gc2RXVWdZV3hzYjNkeklHOXViSGtnWENJcloyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNVdRVXhWUlY5QlRFeFBWMFZFWDBOSVFWSlRYeXRjSWlCaGJtUWdjMmx0Y0d4bElHWjFibU4wYVc5dWN5d2daMjkwT2lCY0lpdGhLU3huYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTGtsT1RrOURWVTlWVTE5VFZGSkpUa2M3Y21WMGRYSnVJR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1YzJGdWFYUnBlbVZWY214ZktHRXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdWFHRnpRbUZzWVc1alpXUlJkVzkwWlhOZlBXWjFibU4wYVc5dUtHRXBlMlp2Y2loMllYSWdZajBoTUN4alBTRXdMR1E5TUR0a1BHRXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlZUzVqYUdGeVFYUW9aQ2s3WENJblhDSTlQV1VtSm1NL1lqMGhZam9uWENJblBUMWxKaVppSmlZb1l6MGhZeWw5Y21WMGRYSnVJR0ltSm1OOU8yZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVhR0Z6UW1Gc1lXNWpaV1JUY1hWaGNtVkNjbUZqYTJWMGMxODlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFNFd0xHTTlMMTViTFY5aExYcEJMVm93TFRsZEpDOHNaRDB3TzJROFlTNXNaVzVuZEdnN1pDc3JLWHQyWVhJZ1pUMWhMbU5vWVhKQmRDaGtLVHRwWmloY0lsMWNJajA5WlNsN2FXWW9ZaWx5WlhSMWNtNGhNVHRpUFNFd2ZXVnNjMlVnYVdZb1hDSmJYQ0k5UFdVcGUybG1LQ0ZpS1hKbGRIVnliaUV4TzJJOUlURjlaV3h6WlNCcFppZ2hZaVltSVdNdWRHVnpkQ2hsS1NseVpYUjFjbTRoTVgxeVpYUjFjbTRnWW4wN1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNVdRVXhWUlY5QlRFeFBWMFZFWDBOSVFWSlRYejFjSWxzdExDNWNYRndpSnlWZklTTWdZUzE2UVMxYU1DMDVYRnhjWEZ0Y1hGeGNYVjFjSWp0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVWa0ZNVlVWZlVrVmZQVzVsZHlCU1pXZEZlSEFvWENKZVhDSXJaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaUzVXUVV4VlJWOUJURXhQVjBWRVgwTklRVkpUWHl0Y0lpc2tYQ0lwTzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVZWSk1YMUpGWHowdlhGeGlLSFZ5YkZ4Y0tGc2dYRngwWEZ4dVhTb3BLQ2RiSUMwbUtDMWNYRnRjWEYwdGZsMHFKM3hjSWxzZ0lTTXRYRnhiWEZ4ZExYNWRLbHdpZkZzaEl5MG1LaTFjWEZ0Y1hGMHRmbDBxS1NoYklGeGNkRnhjYmwwcVhGd3BLUzluTzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVJsVk9RMVJKVDA1VFgxSkZYejB2WEZ4aUtHaHpiSHhvYzJ4aGZISm5Zbnh5WjJKaGZHMWhkSEpwZUh4allXeGpmRzFwYm0xaGVIeG1hWFF0WTI5dWRHVnVkSHh5WlhCbFlYUjhLSEp2ZEdGMFpYeHpZMkZzWlh4MGNtRnVjMnhoZEdVcEtGaDhXWHhhZkROa0tUOHBYRndvV3kwcktpOHdMVGxoTFhvdUpWeGNXMXhjWFN3Z1hTdGNYQ2t2Wnp0bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExrTlBUVTFGVGxSZlVrVmZQUzljWEM5Y1hDb3ZPMXh1WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1ellXNXBkR2w2WlZWeWJGODlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0V1Y21Wd2JHRmpaU2huYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsTGxWU1RGOVNSVjhzWm5WdVkzUnBiMjRvWVN4akxHUXNaU2w3ZG1GeUlHSTlYQ0pjSWp0a1BXUXVjbVZ3YkdGalpTZ3ZYaWhiSjF3aVhTa29MaW9wWEZ3eEpDOHNablZ1WTNScGIyNG9ZU3hqTEdRcGUySTlZenR5WlhSMWNtNGdaSDBwTzJFOVoyOXZaeTVvZEcxc0xsTmhabVZWY213dWMyRnVhWFJwZW1Vb1pDa3VaMlYwVkhsd1pXUlRkSEpwYm1kV1lXeDFaU2dwTzNKbGRIVnliaUJqSzJJcllTdGlLMlY5S1gwN1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTNWpiMjVqWVhROVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOVhDSmNJaXhqUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1YVhOQmNuSmhlU2hoS1Q5bmIyOW5MbUZ5Y21GNUxtWnZja1ZoWTJnb1lTeGpLVHBpS3oxbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExuVnVkM0poY0NoaEtYMDdaMjl2Wnk1aGNuSmhlUzVtYjNKRllXTm9LR0Z5WjNWdFpXNTBjeXhqS1R0eVpYUjFjbTRnWWo5bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExtTnlaV0YwWlZOaFptVlRkSGxzWlZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR0lwT21kdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdVdVJVMVFWRmw5TzJkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWVGFHVmxkRDFtZFc1amRHbHZiaWdwZTNSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFUyaGxaWFJYY21Gd2NHVmtWbUZzZFdWZlBWd2lYQ0k3ZEdocGN5NVRRVVpGWDFOVVdVeEZYMU5JUlVWVVgxUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYejFuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVWRmxRUlY5TlFWSkxSVkpmUjA5UFIxOUlWRTFNWDFORlExVlNTVlJaWDFCU1NWWkJWRVZmZlR0bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bFUyaGxaWFF1Y0hKdmRHOTBlWEJsTG1sdGNHeGxiV1Z1ZEhOSGIyOW5VM1J5YVc1blZIbHdaV1JUZEhKcGJtYzlJVEE3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBMbFJaVUVWZlRVRlNTMFZTWDBkUFQwZGZTRlJOVEY5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHoxN2ZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFUzUjViR1ZUYUdWbGRDNWpjbVZoZEdWU2RXeGxQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9aMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dWRHRnBibk1vWVN4Y0lqeGNJaWtwZEdoeWIzY2dSWEp5YjNJb1hDSlRaV3hsWTNSdmNpQmtiMlZ6SUc1dmRDQmhiR3h2ZHlBblBDY3NJR2R2ZERvZ1hDSXJZU2s3ZG1GeUlHTTlZUzV5WlhCc1lXTmxLQzhvSjN4Y0lpa29LRDhoWEZ3eEtWdGVYRnh5WEZ4dVhGeG1YRnhjWEYxOFhGeGNYRnRjWEhOY1hGTmRLU3BjWERFdlp5eGNJbHdpS1R0cFppZ2hMMTViTFY5aExYcEJMVm93TFRrakxqb3FJQ3crSzM1YlhGeGRLQ2s5WGlSOFhTc2tMeTUwWlhOMEtHTXBLWFJvY205M0lFVnljbTl5S0Z3aVUyVnNaV04wYjNJZ1lXeHNiM2R6SUc5dWJIa2dXeTFmWVMxNlFTMWFNQzA1SXk0NktpQXNQaXQrVzF4Y1hGeGRLQ2s5WGlSOFhTQmhibVFnYzNSeWFXNW5jeXdnWjI5ME9pQmNJaXRoS1R0cFppZ2haMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExtaGhjMEpoYkdGdVkyVmtRbkpoWTJ0bGRITmZLR01wS1hSb2NtOTNJRVZ5Y205eUtGd2lLQ2tnWVc1a0lGdGRJR2x1SUhObGJHVmpkRzl5SUcxMWMzUWdZbVVnWW1Gc1lXNWpaV1FzSUdkdmREb2dYQ0lyWVNrN1lpQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1Y4ZkNoaVBXZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVXVZM0psWVhSbEtHSXBLVHRjYm1FOVlTdGNJbnRjSWl0bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExuVnVkM0poY0NoaUtTNXlaWEJzWVdObEtDODhMMmNzWENKY1hGeGNNME1nWENJcEsxd2lmVndpTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVZM0psWVhSbFUyRm1aVk4wZVd4bFUyaGxaWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGhLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBMbWhoYzBKaGJHRnVZMlZrUW5KaFkydGxkSE5mUFdaMWJtTjBhVzl1S0dFcGUyWnZjaWgyWVhJZ1lqMTdYQ0lvWENJNlhDSXBYQ0lzWENKYlhDSTZYQ0pkWENKOUxHTTlXMTBzWkQwd08yUThZUzVzWlc1bmRHZzdaQ3NyS1h0MllYSWdaVDFoVzJSZE8ybG1LR0piWlYwcFl5NXdkWE5vS0dKYlpWMHBPMlZzYzJVZ2FXWW9aMjl2Wnk1dlltcGxZM1F1WTI5dWRHRnBibk1vWWl4bEtTWW1ZeTV3YjNBb0tTRTlaU2x5WlhSMWNtNGhNWDF5WlhSMWNtNGdNRDA5WXk1c1pXNW5kR2g5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pWTm9aV1YwTG1OdmJtTmhkRDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajFjSWx3aUxHTTlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NXBjMEZ5Y21GNUtHRXBQMmR2YjJjdVlYSnlZWGt1Wm05eVJXRmphQ2hoTEdNcE9tSXJQV2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1ZUYUdWbGRDNTFibmR5WVhBb1lTbDlPMmR2YjJjdVlYSnlZWGt1Wm05eVJXRmphQ2hoY21kMWJXVnVkSE1zWXlrN2NtVjBkWEp1SUdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWVGFHVmxkQzVqY21WaGRHVlRZV1psVTNSNWJHVlRhR1ZsZEZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR0lwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVlRhR1ZsZEM1bWNtOXRRMjl1YzNSaGJuUTlablZ1WTNScGIyNG9ZU2w3WVQxbmIyOW5Mbk4wY21sdVp5NURiMjV6ZEM1MWJuZHlZWEFvWVNrN2FXWW9NRDA5UFdFdWJHVnVaM1JvS1hKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVSVTFRVkZrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ2haMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dWRHRnBibk1vWVN4Y0lqeGNJaWtzWENKR2IzSmlhV1JrWlc0Z0p6d25JR05vWVhKaFkzUmxjaUJwYmlCemRIbHNaU0J6YUdWbGRDQnpkSEpwYm1jNklGd2lLMkVwTzNKbGRIVnliaUJuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVZM0psWVhSbFUyRm1aVk4wZVd4bFUyaGxaWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGhLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBMbkJ5YjNSdmRIbHdaUzVuWlhSVWVYQmxaRk4wY21sdVoxWmhiSFZsUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFUyRm1aVk4wZVd4bFUyaGxaWFJYY21Gd2NHVmtWbUZzZFdWZmZUdGNibWR2YjJjdVJFVkNWVWNtSmlobmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bFUyaGxaWFF1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1WENKVFlXWmxVM1I1YkdWVGFHVmxkSHRjSWl0MGFHbHpMbkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpWTmhabVZUZEhsc1pWTm9aV1YwVjNKaGNIQmxaRlpoYkhWbFh5dGNJbjFjSW4wcE8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExuVnVkM0poY0QxbWRXNWpkR2x2YmloaEtYdHBaaWhoSUdsdWMzUmhibU5sYjJZZ1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pWTm9aV1YwSmlaaExtTnZibk4wY25WamRHOXlQVDA5WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBKaVpoTGxOQlJrVmZVMVJaVEVWZlUwaEZSVlJmVkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZlBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WVGRIbHNaVk5vWldWMExsUlpVRVZmVFVGU1MwVlNYMGRQVDBkZlNGUk5URjlUUlVOVlVrbFVXVjlRVWtsV1FWUkZYeWx5WlhSMWNtNGdZUzV3Y21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVlRZV1psVTNSNWJHVlRhR1ZsZEZkeVlYQndaV1JXWVd4MVpWODdaMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0psZUhCbFkzUmxaQ0J2WW1wbFkzUWdiMllnZEhsd1pTQlRZV1psVTNSNWJHVlRhR1ZsZEN3Z1oyOTBJQ2RjSWl0aEsxd2lKeUJ2WmlCMGVYQmxJRndpSzJkdmIyY3VkSGx3WlU5bUtHRXBLVHR5WlhSMWNtNWNJblI1Y0dWZlpYSnliM0k2VTJGbVpWTjBlV3hsVTJobFpYUmNJbjA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bFUyaGxaWFF1WTNKbFlYUmxVMkZtWlZOMGVXeGxVMmhsWlhSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRvYm1WM0lHZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVlRhR1ZsZENrdWFXNXBkRk5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFh5aGhLWDA3WjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlZOb1pXVjBMbkJ5YjNSdmRIbHdaUzVwYm1sMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZmUFdaMWJtTjBhVzl1S0dFcGUzUm9hWE11Y0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlZOMGVXeGxVMmhsWlhSWGNtRndjR1ZrVm1Gc2RXVmZQV0U3Y21WMGRYSnVJSFJvYVhOOU8yZHZiMmN1YUhSdGJDNVRZV1psVTNSNWJHVlRhR1ZsZEM1RlRWQlVXVDFuYjI5bkxtaDBiV3d1VTJGbVpWTjBlV3hsVTJobFpYUXVZM0psWVhSbFUyRm1aVk4wZVd4bFUyaGxaWFJUWldOMWNtbDBlVkJ5YVhaaGRHVkViMDV2ZEVGalkyVnpjMDl5Uld4elpTaGNJbHdpS1R0bmIyOW5MbXhoWW5NOWUzMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkRDE3ZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3c5ZTMwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG1kbGRFNWhkR2wyWlZWelpYSkJaMlZ1ZEZOMGNtbHVaMTg5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3VaMlYwVG1GMmFXZGhkRzl5WHlncE8zSmxkSFZ5YmlCaEppWW9ZVDFoTG5WelpYSkJaMlZ1ZENrL1lUcGNJbHdpZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1WjJWMFRtRjJhV2RoZEc5eVh6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG1kc2IySmhiQzV1WVhacFoyRjBiM0o5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzUxYzJWeVFXZGxiblJmUFdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzVuWlhST1lYUnBkbVZWYzJWeVFXZGxiblJUZEhKcGJtZGZLQ2s3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbk5sZEZWelpYSkJaMlZ1ZEQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWRYTmxja0ZuWlc1MFh6MWhmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3VaMlYwVG1GMGFYWmxWWE5sY2tGblpXNTBVM1J5YVc1blh5Z3BmVHRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzVuWlhSVmMyVnlRV2RsYm5ROVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG5WelpYSkJaMlZ1ZEY5OU8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkRDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3VaMlYwVlhObGNrRm5aVzUwS0NrN2NtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTnZiblJoYVc1ektHSXNZU2w5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRFbG5ibTl5WlVOaGMyVTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtZGxkRlZ6WlhKQloyVnVkQ2dwTzNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1allYTmxTVzV6Wlc1emFYUnBkbVZEYjI1MFlXbHVjeWhpTEdFcGZUdGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNWxlSFJ5WVdOMFZtVnljMmx2YmxSMWNHeGxjejFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJOUx5aGNYSGRiWEZ4M0lGMHJLVnhjTHloYlhseGNjMTByS1Z4Y2N5b29QenBjWENnb0xpby9LVnhjS1NrL0wyY3NZejFiWFN4a08yUTlZaTVsZUdWaktHRXBPeWxqTG5CMWMyZ29XMlJiTVYwc1pGc3lYU3hrV3pOZGZIeDJiMmxrSURCZEtUdHlaWFIxY200Z1kzMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlQWHQ5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRTl3WlhKaFh6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKUGNHVnlZVndpS1gwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vU1VWZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWxSeWFXUmxiblJjSWlsOGZHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSWsxVFNVVmNJaWw5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRVZrWjJWSWRHMXNYejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkZaR2RsWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoRlpHZGxRMmh5YjIxcGRXMWZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lrVmtaeTljSWlsOU8xeHVaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1QzQmxjbUZEYUhKdmJXbDFiVjg5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbTFoZEdOb1ZYTmxja0ZuWlc1MEtGd2lUMUJTWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoR2FYSmxabTk0WHoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pHYVhKbFptOTRYQ0lwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pHZUdsUFUxd2lLWDA3WEc1bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhUWVdaaGNtbGZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lsTmhabUZ5YVZ3aUtTWW1JU2huYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaERhSEp2YldWZktDbDhmR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFTnZZWE4wWHlncGZIeG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoUGNHVnlZVjhvS1h4OFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vUldSblpVaDBiV3hmS0NsOGZHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVWa1oyVkRhSEp2YldsMWJWOG9LWHg4WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9UM0JsY21GRGFISnZiV2wxYlY4b0tYeDhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1JtbHlaV1p2ZUY4b0tYeDhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbWx6VTJsc2F5Z3BmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkJibVJ5YjJsa1hDSXBLWDA3WEc1bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhEYjJGemRGODlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtMWhkR05vVlhObGNrRm5aVzUwS0Z3aVEyOWhjM1JjSWlsOU8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVsdmMxZGxZblpwWlhkZlBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUtHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkQ2hjSW1sUVlXUmNJaWw4ZkdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJbWxRYUc5dVpWd2lLU2ttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhUWVdaaGNtbGZLQ2ttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhEYUhKdmJXVmZLQ2ttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhEYjJGemRGOG9LU1ltSVdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1dFlYUmphRVpwY21WbWIzaGZLQ2ttSm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJa0Z3Y0d4bFYyVmlTMmwwWENJcGZUdGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFTm9jbTl0WlY4OVpuVnVZM1JwYjI0b0tYdHlaWFIxY200b1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG0xaGRHTm9WWE5sY2tGblpXNTBLRndpUTJoeWIyMWxYQ0lwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pEY21sUFUxd2lLU2ttSmlGbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhGWkdkbFNIUnRiRjhvS1gwN1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtMWhkR05vUVc1a2NtOXBaRUp5YjNkelpYSmZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lrRnVaSEp2YVdSY0lpa21KaUVvWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selEyaHliMjFsS0NsOGZHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMFpwY21WbWIzZ29LWHg4WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selQzQmxjbUVvS1h4OFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpVMmxzYXlncEtYMDdYRzVuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhOUGNHVnlZVDFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaFBjR1Z5WVY4N1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpTVVU5WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9TVVZmTzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMwVmtaMlU5WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG0xaGRHTm9SV1JuWlVoMGJXeGZPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBWa1oyVkRhSEp2YldsMWJUMW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXViV0YwWTJoRlpHZGxRMmh5YjIxcGRXMWZPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzA5d1pYSmhRMmh5YjIxcGRXMDlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbTFoZEdOb1QzQmxjbUZEYUhKdmJXbDFiVjg3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1aWNtOTNjMlZ5TG1selJtbHlaV1p2ZUQxbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhHYVhKbFptOTRYenRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVluSnZkM05sY2k1cGMxTmhabUZ5YVQxbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWJXRjBZMmhUWVdaaGNtbGZPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBOdllYTjBQV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFTnZZWE4wWHp0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdWFYTkpiM05YWldKMmFXVjNQV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTV0WVhSamFFbHZjMWRsWW5acFpYZGZPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBOb2NtOXRaVDFuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YldGMFkyaERhSEp2YldWZk8yZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMEZ1WkhKdmFXUkNjbTkzYzJWeVBXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXRZWFJqYUVGdVpISnZhV1JDY205M2MyVnlYenRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhOVGFXeHJQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lsTnBiR3RjSWlsOU8xeHVaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVpY205M2MyVnlMbWRsZEZabGNuTnBiMjQ5Wm5WdVkzUnBiMjRvS1h0bWRXNWpkR2x2YmlCaEtHRXBlMkU5WjI5dlp5NWhjbkpoZVM1bWFXNWtLR0VzWkNrN2NtVjBkWEp1SUdOYllWMThmRndpWENKOWRtRnlJR0k5WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbWRsZEZWelpYSkJaMlZ1ZENncE8ybG1LR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBsRktDa3BjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNW5aWFJKUlZabGNuTnBiMjVmS0dJcE8ySTlaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtVjRkSEpoWTNSV1pYSnphVzl1VkhWd2JHVnpLR0lwTzNaaGNpQmpQWHQ5TzJkdmIyY3VZWEp5WVhrdVptOXlSV0ZqYUNoaUxHWjFibU4wYVc5dUtHRXBlMk5iWVZzd1hWMDlZVnN4WFgwcE8zWmhjaUJrUFdkdmIyY3VjR0Z5ZEdsaGJDaG5iMjluTG05aWFtVmpkQzVqYjI1MFlXbHVjMHRsZVN4aktUdHlaWFIxY200Z1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpUM0JsY21Fb0tUOWhLRnRjSWxabGNuTnBiMjVjSWl4Y0lrOXdaWEpoWENKZEtUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5GWkdkbEtDay9ZU2hiWENKRlpHZGxYQ0pkS1RwY2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMFZrWjJWRGFISnZiV2wxYlNncFAyRW9XMXdpUldSblhDSmRLVHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhORGFISnZiV1VvS1Q5aEtGdGNJa05vY205dFpWd2lMRndpUTNKcFQxTmNJbDBwT2loaVBXSmJNbDBwSmlaaVd6RmRmSHhjSWx3aWZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5XWlhKemFXOXVUM0pJYVdkb1pYSTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJREE4UFdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtTnZiWEJoY21WV1pYSnphVzl1Y3lobmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtSnliM2R6WlhJdVoyVjBWbVZ5YzJsdmJpZ3BMR0VwZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNW5aWFJKUlZabGNuTnBiMjVmUFdaMWJtTjBhVzl1S0dFcGUzWmhjaUJpUFM5eWRqb2dLaWhiWEZ4a1hGd3VYU29wTHk1bGVHVmpLR0VwTzJsbUtHSW1KbUpiTVYwcGNtVjBkWEp1SUdKYk1WMDdZajFjSWx3aU8zWmhjaUJqUFM5TlUwbEZJQ3NvVzF4Y1pGeGNMbDByS1M4dVpYaGxZeWhoS1R0cFppaGpKaVpqV3pGZEtXbG1LR0U5TDFSeWFXUmxiblJjWEM4b1hGeGtMbHhjWkNrdkxtVjRaV01vWVNrc1hDSTNMakJjSWowOVkxc3hYU2xwWmloaEppWmhXekZkS1hOM2FYUmphQ2hoV3pGZEtYdGpZWE5sSUZ3aU5DNHdYQ0k2WWoxY0lqZ3VNRndpTzJKeVpXRnJPMk5oYzJVZ1hDSTFMakJjSWpwaVBWd2lPUzR3WENJN1luSmxZV3M3WTJGelpTQmNJall1TUZ3aU9tSTlYQ0l4TUM0d1hDSTdZbkpsWVdzN1kyRnpaU0JjSWpjdU1Gd2lPbUk5WENJeE1TNHdYQ0o5Wld4elpTQmlQVndpTnk0d1hDSTdaV3h6WlNCaVBXTmJNVjA3Y21WMGRYSnVJR0o5TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkQxbWRXNWpkR2x2YmlncGUzUm9hWE11Y0hKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxVMkZtWlVoMGJXeFhjbUZ3Y0dWa1ZtRnNkV1ZmUFZ3aVhDSTdkR2hwY3k1VFFVWkZYMGhVVFV4ZlZGbFFSVjlOUVZKTFJWSmZSMDlQUjE5SVZFMU1YMU5GUTFWU1NWUlpYMUJTU1ZaQlZFVmZQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVVV1ZCRlgwMUJVa3RGVWw5SFQwOUhYMGhVVFV4ZlUwVkRWVkpKVkZsZlVGSkpWa0ZVUlY4N2RHaHBjeTVrYVhKZlBXNTFiR3g5TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1d2NtOTBiM1I1Y0dVdWFXMXdiR1Z0Wlc1MGMwZHZiMmRKTVRodVFtbGthVVJwY21WamRHbHZibUZzVTNSeWFXNW5QU0V3TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1d2NtOTBiM1I1Y0dVdVoyVjBSR2x5WldOMGFXOXVQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVpHbHlYMzA3WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5CeWIzUnZkSGx3WlM1cGJYQnNaVzFsYm5SelIyOXZaMU4wY21sdVoxUjVjR1ZrVTNSeWFXNW5QU0V3TzJkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1d2NtOTBiM1I1Y0dVdVoyVjBWSGx3WldSVGRISnBibWRXWVd4MVpUMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5CeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVk5oWm1WSWRHMXNWM0poY0hCbFpGWmhiSFZsWHk1MGIxTjBjbWx1WnlncGZUdGNibWR2YjJjdVJFVkNWVWNtSmlobmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dWNISnZkRzkwZVhCbExuUnZVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdVhDSlRZV1psU0hSdGJIdGNJaXQwYUdsekxuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVklkRzFzVjNKaGNIQmxaRlpoYkhWbFh5dGNJbjFjSW4wcE8yZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhBOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDaGhLUzUwYjFOMGNtbHVaeWdwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlREMW1kVzVqZEdsdmJpaGhLWHRwWmloaElHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNKaVpoTG1OdmJuTjBjblZqZEc5eVBUMDlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNKaVpoTGxOQlJrVmZTRlJOVEY5VVdWQkZYMDFCVWt0RlVsOUhUMDlIWDBoVVRVeGZVMFZEVlZKSlZGbGZVRkpKVmtGVVJWODlQVDFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1VkZsUVJWOU5RVkpMUlZKZlIwOVBSMTlJVkUxTVgxTkZRMVZTU1ZSWlgxQlNTVlpCVkVWZktYSmxkSFZ5YmlCaExuQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlZOaFptVklkRzFzVjNKaGNIQmxaRlpoYkhWbFh6dG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJbVY0Y0dWamRHVmtJRzlpYW1WamRDQnZaaUIwZVhCbElGTmhabVZJZEcxc0xDQm5iM1FnSjF3aUsyRXJYQ0luSUc5bUlIUjVjR1VnWENJcloyOXZaeTUwZVhCbFQyWW9ZU2twTzNKbGRIVnlibHdpZEhsd1pWOWxjbkp2Y2pwVFlXWmxTSFJ0YkZ3aWZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVvZEcxc1JYTmpZWEJsUFdaMWJtTjBhVzl1S0dFcGUybG1LR0VnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3cGNtVjBkWEp1SUdFN2RtRnlJR0k5WENKdlltcGxZM1JjSWowOWRIbHdaVzltSUdFc1l6MXVkV3hzTzJJbUptRXVhVzF3YkdWdFpXNTBjMGR2YjJkSk1UaHVRbWxrYVVScGNtVmpkR2x2Ym1Gc1UzUnlhVzVuSmlZb1l6MWhMbWRsZEVScGNtVmpkR2x2YmlncEtUdGhQV0ltSm1FdWFXMXdiR1Z0Wlc1MGMwZHZiMmRUZEhKcGJtZFVlWEJsWkZOMGNtbHVaejloTG1kbGRGUjVjR1ZrVTNSeWFXNW5WbUZzZFdVb0tUcFRkSEpwYm1jb1lTazdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1oMGJXeEZjMk5oY0dVb1lTa3NZeWw5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtaDBiV3hGYzJOaGNHVlFjbVZ6WlhKMmFXNW5UbVYzYkdsdVpYTTlablZ1WTNScGIyNG9ZU2w3YVdZb1lTQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQ2x5WlhSMWNtNGdZVHRoUFdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1b2RHMXNSWE5qWVhCbEtHRXBPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZM0psWVhSbFUyRm1aVWgwYld4VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2huYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1dVpYZE1hVzVsVkc5Q2NpaG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VkVzUzY21Gd0tHRXBLU3hoTG1kbGRFUnBjbVZqZEdsdmJpZ3BLWDA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dWFIUnRiRVZ6WTJGd1pWQnlaWE5sY25acGJtZE9aWGRzYVc1bGMwRnVaRk53WVdObGN6MW1kVzVqZEdsdmJpaGhLWHRwWmloaElHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNLWEpsZEhWeWJpQmhPMkU5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1oMGJXeEZjMk5oY0dVb1lTazdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG5kb2FYUmxjM0JoWTJWRmMyTmhjR1VvWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5WdWQzSmhjQ2hoS1Nrc1lTNW5aWFJFYVhKbFkzUnBiMjRvS1NsOU8yZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNW1jbTl0UFdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1b2RHMXNSWE5qWVhCbE8yZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNVdRVXhKUkY5T1FVMUZVMTlKVGw5VVFVZGZQUzllVzJFdGVrRXRXakF0T1MxZEt5UXZPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTGxWU1RGOUJWRlJTU1VKVlZFVlRYejE3WVdOMGFXOXVPaUV3TEdOcGRHVTZJVEFzWkdGMFlUb2hNQ3htYjNKdFlXTjBhVzl1T2lFd0xHaHlaV1k2SVRBc2JXRnVhV1psYzNRNklUQXNjRzl6ZEdWeU9pRXdMSE55WXpvaE1IMDdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMazVQVkY5QlRFeFBWMFZFWDFSQlIxOU9RVTFGVTE4OWUwRlFVRXhGVkRvaE1DeENRVk5GT2lFd0xFVk5Ra1ZFT2lFd0xFbEdVa0ZOUlRvaE1DeE1TVTVMT2lFd0xFMUJWRWc2SVRBc1RVVlVRVG9oTUN4UFFrcEZRMVE2SVRBc1UwTlNTVkJVT2lFd0xGTlVXVXhGT2lFd0xGTldSem9oTUN4VVJVMVFURUZVUlRvaE1IMDdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpUMW1kVzVqZEdsdmJpaGhMR0lzWXlsN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xuWmxjbWxtZVZSaFowNWhiV1VvVTNSeWFXNW5LR0VwS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNWR0ZuVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9VM1J5YVc1bktHRXBMR0lzWXlsOU8xeHVaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMblpsY21sbWVWUmhaMDVoYldVOVpuVnVZM1JwYjI0b1lTbDdhV1lvSVdkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1V1FVeEpSRjlPUVUxRlUxOUpUbDlVUVVkZkxuUmxjM1FvWVNrcGRHaHliM2NnUlhKeWIzSW9YQ0pKYm5aaGJHbGtJSFJoWnlCdVlXMWxJRHhjSWl0aEsxd2lQaTVjSWlrN2FXWW9ZUzUwYjFWd2NHVnlRMkZ6WlNncGFXNGdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMazVQVkY5QlRFeFBWMFZFWDFSQlIxOU9RVTFGVTE4cGRHaHliM2NnUlhKeWIzSW9YQ0pVWVdjZ2JtRnRaU0E4WENJcllTdGNJajRnYVhNZ2JtOTBJR0ZzYkc5M1pXUWdabTl5SUZOaFptVklkRzFzTGx3aUtUdDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVWxtY21GdFpUMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdGhKaVpuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG5WdWQzSmhjQ2hoS1R0MllYSWdaVDE3ZlR0bExuTnlZejFoZkh4dWRXeHNPMlV1YzNKalpHOWpQV0ltSm1kdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1MWJuZHlZWEFvWWlrN1lUMW5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZMjl0WW1sdVpVRjBkSEpwWW5WMFpYTW9aU3g3YzJGdVpHSnZlRHBjSWx3aWZTeGpLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpWTmhabVZJZEcxc1ZHRm5VMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1hDSnBabkpoYldWY0lpeGhMR1FwZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXNWtZbTk0U1daeVlXMWxQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlMmxtS0NGbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkyRnVWWE5sVTJGdVpHSnZlRWxtY21GdFpTZ3BLWFJvY205M0lFVnljbTl5S0Z3aVZHaGxJR0p5YjNkelpYSWdaRzlsY3lCdWIzUWdjM1Z3Y0c5eWRDQnpZVzVrWW05NFpXUWdhV1p5WVcxbGN5NWNJaWs3ZG1GeUlHVTllMzA3WlM1emNtTTlZVDluYjI5bkxtaDBiV3d1VTJGbVpWVnliQzUxYm5keVlYQW9aMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjMkZ1YVhScGVtVW9ZU2twT201MWJHdzdaUzV6Y21Oa2IyTTlZbng4Ym5Wc2JEdGxMbk5oYm1SaWIzZzlYQ0pjSWp0aFBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpiMjFpYVc1bFFYUjBjbWxpZFhSbGN5aGxMSHQ5TEdNcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkzSmxZWFJsVTJGbVpVaDBiV3hVWVdkVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hjSW1sbWNtRnRaVndpTEdFc1pDbDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OaGJsVnpaVk5oYm1SaWIzaEpabkpoYldVOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1oyOXZaeTVuYkc5aVlXd3VTRlJOVEVsR2NtRnRaVVZzWlcxbGJuUW1KbHdpYzJGdVpHSnZlRndpYVc0Z1oyOXZaeTVuYkc5aVlXd3VTRlJOVEVsR2NtRnRaVVZzWlcxbGJuUXVjSEp2ZEc5MGVYQmxmVHRuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTNKbFlYUmxVMk55YVhCMFUzSmpQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVvZEcxc0xsUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJDNTFibmR5WVhBb1lTazdZVDFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTI5dFltbHVaVUYwZEhKcFluVjBaWE1vZTNOeVl6cGhmU3g3ZlN4aUtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVkdGblUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWENKelkzSnBjSFJjSWl4aEtYMDdYRzVuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTNKbFlYUmxVMk55YVhCMFBXWjFibU4wYVc5dUtHRXNZaWw3Wm05eUtIWmhjaUJqSUdsdUlHSXBlM1poY2lCa1BXTXVkRzlNYjNkbGNrTmhjMlVvS1R0cFppaGNJbXhoYm1kMVlXZGxYQ0k5UFdSOGZGd2ljM0pqWENJOVBXUjhmRndpZEdWNGRGd2lQVDFrZkh4Y0luUjVjR1ZjSWowOVpDbDBhSEp2ZHlCRmNuSnZjaWduUTJGdWJtOTBJSE5sZENCY0lpY3JaQ3NuWENJZ1lYUjBjbWxpZFhSbEp5azdmV005WENKY0lqdGhQV2R2YjJjdVlYSnlZWGt1WTI5dVkyRjBLR0VwTzJadmNpaGtQVEE3WkR4aExteGxibWQwYUR0a0t5c3BZeXM5WjI5dlp5NW9kRzFzTGxOaFptVlRZM0pwY0hRdWRXNTNjbUZ3S0dGYlpGMHBPMkU5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1l5eG5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVUa1ZWVkZKQlRDazdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZSaFoxTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aWMyTnlhWEIwWENJc1lpeGhLWDA3WEc1bmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkzSmxZWFJsVTNSNWJHVTlablZ1WTNScGIyNG9ZU3hpS1h0aVBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpiMjFpYVc1bFFYUjBjbWxpZFhSbGN5aDdkSGx3WlRwY0luUmxlSFF2WTNOelhDSjlMSHQ5TEdJcE8zWmhjaUJqUFZ3aVhDSTdZVDFuYjI5bkxtRnljbUY1TG1OdmJtTmhkQ2hoS1R0bWIzSW9kbUZ5SUdROU1EdGtQR0V1YkdWdVozUm9PMlFyS3lsakt6MW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxVMmhsWlhRdWRXNTNjbUZ3S0dGYlpGMHBPMkU5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OeVpXRjBaVk5oWm1WSWRHMXNVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1l5eG5iMjluTG1reE9HNHVZbWxrYVM1RWFYSXVUa1ZWVkZKQlRDazdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWVFlXWmxTSFJ0YkZSaFoxTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aWMzUjViR1ZjSWl4aUxHRXBmVHRjYm1kdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1amNtVmhkR1ZOWlhSaFVtVm1jbVZ6YUQxbWRXNWpkR2x2YmloaExHSXBlMkU5WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1ZFc1M2NtRndLR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxLR0VwS1Rzb1oyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpTVVVvS1h4OFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWljbTkzYzJWeUxtbHpSV1JuWlNncEtTWW1aMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTI5dWRHRnBibk1vWVN4Y0lqdGNJaWttSmloaFBWd2lKMXdpSzJFdWNtVndiR0ZqWlNndkp5OW5MRndpSlRJM1hDSXBLMXdpSjF3aUtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVkdGblUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWENKdFpYUmhYQ0lzZTF3aWFIUjBjQzFsY1hWcGRsd2lPbHdpY21WbWNtVnphRndpTEdOdmJuUmxiblE2S0dKOGZEQXBLMXdpT3lCMWNtdzlYQ0lyWVgwcGZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVuWlhSQmRIUnlUbUZ0WlVGdVpGWmhiSFZsWHoxbWRXNWpkR2x2YmloaExHSXNZeWw3YVdZb1l5QnBibk4wWVc1alpXOW1JR2R2YjJjdWMzUnlhVzVuTGtOdmJuTjBLV005WjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR01wTzJWc2MyVWdhV1lvWENKemRIbHNaVndpUFQxaUxuUnZURzkzWlhKRFlYTmxLQ2twWXoxbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVoyVjBVM1I1YkdWV1lXeDFaVjhvWXlrN1pXeHpaWHRwWmlndlhtOXVMMmt1ZEdWemRDaGlLU2wwYUhKdmR5QkZjbkp2Y2lnblFYUjBjbWxpZFhSbElGd2lKeXRpS3lkY0lpQnlaWEYxYVhKbGN5Qm5iMjluTG5OMGNtbHVaeTVEYjI1emRDQjJZV3gxWlN3Z1hDSW5LMk1ySjF3aUlHZHBkbVZ1TGljcE8ybG1LR0l1ZEc5TWIzZGxja05oYzJVb0tXbHVJR2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVWVWt4ZlFWUlVVa2xDVlZSRlUxOHBhV1lvWXlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3BZejFuYjI5bkxtaDBiV3d1VkhKMWMzUmxaRkpsYzI5MWNtTmxWWEpzTG5WdWQzSmhjQ2hqS1R0bGJITmxJR2xtS0dNZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJDbGpQV2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMblZ1ZDNKaGNDaGpLVHRjYm1Wc2MyVWdhV1lvWjI5dlp5NXBjMU4wY21sdVp5aGpLU2xqUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsS0dNcExtZGxkRlI1Y0dWa1UzUnlhVzVuVm1Gc2RXVW9LVHRsYkhObElIUm9jbTkzSUVWeWNtOXlLQ2RCZEhSeWFXSjFkR1VnWENJbksySXJKMXdpSUc5dUlIUmhaeUJjSWljcllTc25YQ0lnY21WeGRXbHlaWE1nWjI5dlp5NW9kRzFzTGxOaFptVlZjbXdzSUdkdmIyY3VjM1J5YVc1bkxrTnZibk4wTENCdmNpQnpkSEpwYm1jc0lIWmhiSFZsSUZ3aUp5dGpLeWRjSWlCbmFYWmxiaTRuS1R0OVl5NXBiWEJzWlcxbGJuUnpSMjl2WjFOMGNtbHVaMVI1Y0dWa1UzUnlhVzVuSmlZb1l6MWpMbWRsZEZSNWNHVmtVM1J5YVc1blZtRnNkV1VvS1NrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaG5iMjluTG1selUzUnlhVzVuS0dNcGZIeG5iMjluTG1selRuVnRZbVZ5S0dNcExGd2lVM1J5YVc1bklHOXlJRzUxYldKbGNpQjJZV3gxWlNCbGVIQmxZM1JsWkN3Z1oyOTBJRndpSzNSNWNHVnZaaUJqSzF3aUlIZHBkR2dnZG1Gc2RXVTZJRndpSzJNcE8zSmxkSFZ5YmlCaUt5YzlYQ0luSzJkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtaDBiV3hGYzJOaGNHVW9VM1J5YVc1bktHTXBLU3NuWENJbmZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVuWlhSVGRIbHNaVlpoYkhWbFh6MW1kVzVqZEdsdmJpaGhLWHRwWmlnaFoyOXZaeTVwYzA5aWFtVmpkQ2hoS1NsMGFISnZkeUJGY25KdmNpZ25WR2hsSUZ3aWMzUjViR1ZjSWlCaGRIUnlhV0oxZEdVZ2NtVnhkV2x5WlhNZ1oyOXZaeTVvZEcxc0xsTmhabVZUZEhsc1pTQnZjaUJ0WVhBZ2IyWWdjM1I1YkdVZ2NISnZjR1Z5ZEdsbGN5d2dKeXQwZVhCbGIyWWdZU3RjSWlCbmFYWmxiam9nWENJcllTazdZU0JwYm5OMFlXNWpaVzltSUdkdmIyY3VhSFJ0YkM1VFlXWmxVM1I1YkdWOGZDaGhQV2R2YjJjdWFIUnRiQzVUWVdabFUzUjViR1V1WTNKbFlYUmxLR0VwS1R0eVpYUjFjbTRnWjI5dlp5NW9kRzFzTGxOaFptVlRkSGxzWlM1MWJuZHlZWEFvWVNsOU8yZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpjbVZoZEdWWGFYUm9SR2x5UFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJJOVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlNoaUxHTXNaQ2s3WWk1a2FYSmZQV0U3Y21WMGRYSnVJR0o5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtcHZhVzQ5Wm5WdVkzUnBiMjRvWVN4aUtYdGhQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVvZEcxc1JYTmpZWEJsS0dFcE8zWmhjaUJqUFdFdVoyVjBSR2x5WldOMGFXOXVLQ2tzWkQxYlhTeGxQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VhWE5CY25KaGVTaGhLVDluYjI5bkxtRnljbUY1TG1admNrVmhZMmdvWVN4bEtUb29ZVDFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1YUhSdGJFVnpZMkZ3WlNoaEtTeGtMbkIxYzJnb1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xuVnVkM0poY0NoaEtTa3NZVDFoTG1kbGRFUnBjbVZqZEdsdmJpZ3BMR005UFdkdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1T1JWVlVVa0ZNUDJNOVlUcGhJVDFuYjI5bkxta3hPRzR1WW1sa2FTNUVhWEl1VGtWVlZGSkJUQ1ltWXlFOVlTWW1LR005Ym5Wc2JDa3BmVHRuYjI5bkxtRnljbUY1TG1admNrVmhZMmdvWWl4bEtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9aQzVxYjJsdUtHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhBb1lTa3BMR01wZlR0Y2JtZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNWpiMjVqWVhROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNXFiMmx1S0dkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1RlRWQlVXU3hCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1wS1gwN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnZibU5oZEZkcGRHaEVhWEk5Wm5WdVkzUnBiMjRvWVN4aUtYdDJZWElnWXoxbmIyOW5MbWgwYld3dVUyRm1aVWgwYld3dVkyOXVZMkYwS0dkdmIyY3VZWEp5WVhrdWMyeHBZMlVvWVhKbmRXMWxiblJ6TERFcEtUdGpMbVJwY2w4OVlUdHlaWFIxY200Z1kzMDdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbFJaVUVWZlRVRlNTMFZTWDBkUFQwZGZTRlJOVEY5VFJVTlZVa2xVV1Y5UVVrbFdRVlJGWHoxN2ZUdG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VZM0psWVhSbFUyRm1aVWgwYld4VFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaVDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlodVpYY2daMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNLUzVwYm1sMFUyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlZmS0dFc1lpbDlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5CeWIzUnZkSGx3WlM1cGJtbDBVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWZlBXWjFibU4wYVc5dUtHRXNZaWw3ZEdocGN5NXdjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJWVFlXWmxTSFJ0YkZkeVlYQndaV1JXWVd4MVpWODlaMjl2Wnk1b2RHMXNMblJ5ZFhOMFpXUjBlWEJsY3k1UVVrbFdRVlJGWDBSUFgwNVBWRjlCUTBORlUxTmZUMUpmUlV4VFJWOVFUMHhKUTFrL1oyOXZaeTVvZEcxc0xuUnlkWE4wWldSMGVYQmxjeTVRVWtsV1FWUkZYMFJQWDA1UFZGOUJRME5GVTFOZlQxSmZSVXhUUlY5UVQweEpRMWt1WTNKbFlYUmxTRlJOVENoaEtUcGhPM1JvYVhNdVpHbHlYejFpTzNKbGRIVnliaUIwYUdsemZUdGNibWR2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVqY21WaGRHVlRZV1psU0hSdGJGUmhaMU5sWTNWeWFYUjVVSEpwZG1GMFpVUnZUbTkwUVdOalpYTnpUM0pGYkhObFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MllYSWdaRDF1ZFd4c08zWmhjaUJsUFZ3aVBGd2lLMkVyWjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5OMGNtbHVaMmxtZVVGMGRISnBZblYwWlhNb1lTeGlLVHRuYjI5bkxtbHpSR1ZtUVc1a1RtOTBUblZzYkNoaktUOW5iMjluTG1selFYSnlZWGtvWXlsOGZDaGpQVnRqWFNrNll6MWJYVHRuYjI5bkxtUnZiUzUwWVdkekxtbHpWbTlwWkZSaFp5aGhMblJ2VEc5M1pYSkRZWE5sS0NrcFB5aG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLQ0ZqTG14bGJtZDBhQ3hjSWxadmFXUWdkR0ZuSUR4Y0lpdGhLMXdpUGlCa2IyVnpJRzV2ZENCaGJHeHZkeUJqYjI1MFpXNTBMbHdpS1N4bEt6MWNJajVjSWlrNktHUTlaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU52Ym1OaGRDaGpLU3hsS3oxY0lqNWNJaXRuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1ZFc1M2NtRndLR1FwSzF3aVBDOWNJaXRoSzF3aVBsd2lMR1E5WkM1blpYUkVhWEpsWTNScGIyNG9LU2s3S0dFOVlpWW1ZaTVrYVhJcEppWW9aRDB2WGloc2RISjhjblJzZkdGMWRHOHBKQzlwTG5SbGMzUW9ZU2svWjI5dlp5NXBNVGh1TG1KcFpHa3VSR2x5TGs1RlZWUlNRVXc2WEc1dWRXeHNLVHR5WlhSMWNtNGdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbU55WldGMFpWTmhabVZJZEcxc1UyVmpkWEpwZEhsUWNtbDJZWFJsUkc5T2IzUkJZMk5sYzNOUGNrVnNjMlVvWlN4a0tYMDdaMjl2Wnk1b2RHMXNMbE5oWm1WSWRHMXNMbk4wY21sdVoybG1lVUYwZEhKcFluVjBaWE05Wm5WdVkzUnBiMjRvWVN4aUtYdDJZWElnWXoxY0lsd2lPMmxtS0dJcFptOXlLSFpoY2lCa0lHbHVJR0lwZTJsbUtDRm5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VWa0ZNU1VSZlRrRk5SVk5mU1U1ZlZFRkhYeTUwWlhOMEtHUXBLWFJvY205M0lFVnljbTl5S0NkSmJuWmhiR2xrSUdGMGRISnBZblYwWlNCdVlXMWxJRndpSnl0a0t5ZGNJaTRuS1R0MllYSWdaVDFpVzJSZE8yZHZiMmN1YVhORVpXWkJibVJPYjNST2RXeHNLR1VwSmlZb1l5czlYQ0lnWENJcloyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtZGxkRUYwZEhKT1lXMWxRVzVrVm1Gc2RXVmZLR0VzWkN4bEtTbDljbVYwZFhKdUlHTjlPMXh1WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG1OdmJXSnBibVZCZEhSeWFXSjFkR1Z6UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHQyWVhJZ1pEMTdmU3hsTzJadmNpaGxJR2x1SUdFcFoyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGxMblJ2VEc5M1pYSkRZWE5sS0NrOVBXVXNYQ0pOZFhOMElHSmxJR3h2ZDJWeUlHTmhjMlZjSWlrc1pGdGxYVDFoVzJWZE8yWnZjaWhsSUdsdUlHSXBaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hsTG5SdlRHOTNaWEpEWVhObEtDazlQV1VzWENKTmRYTjBJR0psSUd4dmQyVnlJR05oYzJWY0lpa3NaRnRsWFQxaVcyVmRPMlp2Y2lobElHbHVJR01wZTNaaGNpQm1QV1V1ZEc5TWIzZGxja05oYzJVb0tUdHBaaWhtSUdsdUlHRXBkR2h5YjNjZ1JYSnliM0lvSjBOaGJtNXZkQ0J2ZG1WeWNtbGtaU0JjSWljclppc25YQ0lnWVhSMGNtbGlkWFJsTENCbmIzUWdYQ0luSzJVckoxd2lJSGRwZEdnZ2RtRnNkV1VnWENJbksyTmJaVjBySjF3aUp5azdaaUJwYmlCaUppWmtaV3hsZEdVZ1pGdG1YVHRrVzJWZFBXTmJaVjE5Y21WMGRYSnVJR1I5TzF4dVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xrUlBRMVJaVUVWZlNGUk5URDFuYjI5bkxtaDBiV3d1VTJGbVpVaDBiV3d1WTNKbFlYUmxVMkZtWlVoMGJXeFRaV04xY21sMGVWQnlhWFpoZEdWRWIwNXZkRUZqWTJWemMwOXlSV3h6WlNoY0lqd2hSRTlEVkZsUVJTQm9kRzFzUGx3aUxHZHZiMmN1YVRFNGJpNWlhV1JwTGtScGNpNU9SVlZVVWtGTUtUdG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VSVTFRVkZrOVoyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9YQ0pjSWl4bmIyOW5MbWt4T0c0dVltbGthUzVFYVhJdVRrVlZWRkpCVENrN1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xrSlNQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzVqY21WaGRHVlRZV1psU0hSdGJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0Z3aVBHSnlQbHdpTEdkdmIyY3VhVEU0Ymk1aWFXUnBMa1JwY2k1T1JWVlVVa0ZNS1R0bmIyOW5MbWgwYld3dWRXNWphR1ZqYTJWa1kyOXVkbVZ5YzJsdmJuTTllMzA3WjI5dlp5NW9kRzFzTG5WdVkyaGxZMnRsWkdOdmJuWmxjbk5wYjI1ekxuTmhabVZJZEcxc1JuSnZiVk4wY21sdVowdHViM2R1Vkc5VFlYUnBjMlo1Vkhsd1pVTnZiblJ5WVdOMFBXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFUzUnlhVzVuS0dkdmIyY3VjM1J5YVc1bkxrTnZibk4wTG5WdWQzSmhjQ2hoS1N4Y0ltMTFjM1FnY0hKdmRtbGtaU0JxZFhOMGFXWnBZMkYwYVc5dVhDSXBPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvSVdkdmIyY3VjM1J5YVc1bkxtbHVkR1Z5Ym1Gc0xtbHpSVzF3ZEhsUGNsZG9hWFJsYzNCaFkyVW9aMjl2Wnk1emRISnBibWN1UTI5dWMzUXVkVzUzY21Gd0tHRXBLU3hjSW0xMWMzUWdjSEp2ZG1sa1pTQnViMjR0Wlcxd2RIa2dhblZ6ZEdsbWFXTmhkR2x2Ymx3aUtUdHlaWFIxY200Z1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xtTnlaV0YwWlZOaFptVklkRzFzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9ZaXhqZkh4dWRXeHNLWDA3WEc1bmIyOW5MbWgwYld3dWRXNWphR1ZqYTJWa1kyOXVkbVZ5YzJsdmJuTXVjMkZtWlZOamNtbHdkRVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkRDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUlRkSEpwYm1jb1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdWRXNTNjbUZ3S0dFcExGd2liWFZ6ZENCd2NtOTJhV1JsSUdwMWMzUnBabWxqWVhScGIyNWNJaWs3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnaFoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VhWE5GYlhCMGVVOXlWMmhwZEdWemNHRmpaU2huYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2twTEZ3aWJYVnpkQ0J3Y205MmFXUmxJRzV2YmkxbGJYQjBlU0JxZFhOMGFXWnBZMkYwYVc5dVhDSXBPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZOamNtbHdkQzVqY21WaGRHVlRZV1psVTJOeWFYQjBVMlZqZFhKcGRIbFFjbWwyWVhSbFJHOU9iM1JCWTJObGMzTlBja1ZzYzJVb1lpbDlPMXh1WjI5dlp5NW9kRzFzTG5WdVkyaGxZMnRsWkdOdmJuWmxjbk5wYjI1ekxuTmhabVZUZEhsc1pVWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamREMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SVGRISnBibWNvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR0VwTEZ3aWJYVnpkQ0J3Y205MmFXUmxJR3AxYzNScFptbGpZWFJwYjI1Y0lpazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2doWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BMRndpYlhWemRDQndjbTkyYVdSbElHNXZiaTFsYlhCMGVTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bExtTnlaV0YwWlZOaFptVlRkSGxzWlZObFkzVnlhWFI1VUhKcGRtRjBaVVJ2VG05MFFXTmpaWE56VDNKRmJITmxLR0lwZlR0Y2JtZHZiMmN1YUhSdGJDNTFibU5vWldOclpXUmpiMjUyWlhKemFXOXVjeTV6WVdabFUzUjViR1ZUYUdWbGRFWnliMjFUZEhKcGJtZExibTkzYmxSdlUyRjBhWE5tZVZSNWNHVkRiMjUwY21GamREMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SVGRISnBibWNvWjI5dlp5NXpkSEpwYm1jdVEyOXVjM1F1ZFc1M2NtRndLR0VwTEZ3aWJYVnpkQ0J3Y205MmFXUmxJR3AxYzNScFptbGpZWFJwYjI1Y0lpazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2doWjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpTaG5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1lTa3BMRndpYlhWemRDQndjbTkyYVdSbElHNXZiaTFsYlhCMGVTQnFkWE4wYVdacFkyRjBhVzl1WENJcE8zSmxkSFZ5YmlCbmIyOW5MbWgwYld3dVUyRm1aVk4wZVd4bFUyaGxaWFF1WTNKbFlYUmxVMkZtWlZOMGVXeGxVMmhsWlhSVFpXTjFjbWwwZVZCeWFYWmhkR1ZFYjA1dmRFRmpZMlZ6YzA5eVJXeHpaU2hpS1gwN1hHNW5iMjluTG1oMGJXd3VkVzVqYUdWamEyVmtZMjl1ZG1WeWMybHZibk11YzJGbVpWVnliRVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkRDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUlRkSEpwYm1jb1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdWRXNTNjbUZ3S0dFcExGd2liWFZ6ZENCd2NtOTJhV1JsSUdwMWMzUnBabWxqWVhScGIyNWNJaWs3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnaFoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VhWE5GYlhCMGVVOXlWMmhwZEdWemNHRmpaU2huYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2twTEZ3aWJYVnpkQ0J3Y205MmFXUmxJRzV2YmkxbGJYQjBlU0JxZFhOMGFXWnBZMkYwYVc5dVhDSXBPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNWpjbVZoZEdWVFlXWmxWWEpzVTJWamRYSnBkSGxRY21sMllYUmxSRzlPYjNSQlkyTmxjM05QY2tWc2MyVW9ZaWw5TzF4dVoyOXZaeTVvZEcxc0xuVnVZMmhsWTJ0bFpHTnZiblpsY25OcGIyNXpMblJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliRVp5YjIxVGRISnBibWRMYm05M2JsUnZVMkYwYVhObWVWUjVjR1ZEYjI1MGNtRmpkRDFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUlRkSEpwYm1jb1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdWRXNTNjbUZ3S0dFcExGd2liWFZ6ZENCd2NtOTJhV1JsSUdwMWMzUnBabWxqWVhScGIyNWNJaWs3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnaFoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VhWE5GYlhCMGVVOXlWMmhwZEdWemNHRmpaU2huYjI5bkxuTjBjbWx1Wnk1RGIyNXpkQzUxYm5keVlYQW9ZU2twTEZ3aWJYVnpkQ0J3Y205MmFXUmxJRzV2YmkxbGJYQjBlU0JxZFhOMGFXWnBZMkYwYVc5dVhDSXBPM0psZEhWeWJpQm5iMjluTG1oMGJXd3VWSEoxYzNSbFpGSmxjMjkxY21ObFZYSnNMbU55WldGMFpWUnlkWE4wWldSU1pYTnZkWEpqWlZWeWJGTmxZM1Z5YVhSNVVISnBkbUYwWlVSdlRtOTBRV05qWlhOelQzSkZiSE5sS0dJcGZUdG5iMjluTG1SdmJTNXpZV1psUFh0OU8yZHZiMmN1Wkc5dExuTmhabVV1U1c1elpYSjBRV1JxWVdObGJuUklkRzFzVUc5emFYUnBiMjQ5ZTBGR1ZFVlNRa1ZIU1U0NlhDSmhablJsY21KbFoybHVYQ0lzUVVaVVJWSkZUa1E2WENKaFpuUmxjbVZ1WkZ3aUxFSkZSazlTUlVKRlIwbE9PbHdpWW1WbWIzSmxZbVZuYVc1Y0lpeENSVVpQVWtWRlRrUTZYQ0ppWldadmNtVmxibVJjSW4wN1oyOXZaeTVrYjIwdWMyRm1aUzVwYm5ObGNuUkJaR3BoWTJWdWRFaDBiV3c5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkV1YVc1elpYSjBRV1JxWVdObGJuUklWRTFNS0dJc1oyOXZaeTVvZEcxc0xsTmhabVZJZEcxc0xuVnVkM0poY0ZSeWRYTjBaV1JJVkUxTUtHTXBLWDA3WjI5dlp5NWtiMjB1YzJGbVpTNVRSVlJmU1U1T1JWSmZTRlJOVEY5RVNWTkJURXhQVjBWRVgxUkJSMU5mUFh0TlFWUklPaUV3TEZORFVrbFFWRG9oTUN4VFZGbE1SVG9oTUN4VFZrYzZJVEFzVkVWTlVFeEJWRVU2SVRCOU8xeHVaMjl2Wnk1a2IyMHVjMkZtWlM1cGMwbHVibVZ5U0hSdGJFTnNaV0Z1ZFhCU1pXTjFjbk5wZG1WZlBXZHZiMmN1Wm5WdVkzUnBiMjV6TG1OaFkyaGxVbVYwZFhKdVZtRnNkV1VvWm5WdVkzUnBiMjRvS1h0cFppaG5iMjluTGtSRlFsVkhKaVpjSW5WdVpHVm1hVzVsWkZ3aVBUMDlkSGx3Wlc5bUlHUnZZM1Z0Wlc1MEtYSmxkSFZ5YmlFeE8zWmhjaUJoUFdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9YQ0prYVhaY0lpa3NZajFrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtGd2laR2wyWENJcE8ySXVZWEJ3Wlc1a1EyaHBiR1FvWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDaGNJbVJwZGx3aUtTazdZUzVoY0hCbGJtUkRhR2xzWkNoaUtUdHBaaWhuYjI5bkxrUkZRbFZISmlZaFlTNW1hWEp6ZEVOb2FXeGtLWEpsZEhWeWJpRXhPMkk5WVM1bWFYSnpkRU5vYVd4a0xtWnBjbk4wUTJocGJHUTdZUzVwYm01bGNraFVUVXc5WjI5dlp5NW9kRzFzTGxOaFptVklkRzFzTG5WdWQzSmhjRlJ5ZFhOMFpXUklWRTFNS0dkdmIyY3VhSFJ0YkM1VFlXWmxTSFJ0YkM1RlRWQlVXU2s3Y21WMGRYSnVJV0l1Y0dGeVpXNTBSV3hsYldWdWRIMHBPMXh1WjI5dlp5NWtiMjB1YzJGbVpTNTFibk5oWm1WVFpYUkpibTVsY2toMGJXeEViMDV2ZEZWelpVOXlSV3h6WlQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0dkdmIyY3VaRzl0TG5OaFptVXVhWE5KYm01bGNraDBiV3hEYkdWaGJuVndVbVZqZFhKemFYWmxYeWdwS1dadmNpZzdZUzVzWVhOMFEyaHBiR1E3S1dFdWNtVnRiM1psUTJocGJHUW9ZUzVzWVhOMFEyaHBiR1FwTzJFdWFXNXVaWEpJVkUxTVBXZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDaGlLWDA3WEc1bmIyOW5MbVJ2YlM1ellXWmxMbk5sZEVsdWJtVnlTSFJ0YkQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0dkdmIyY3VZWE56WlhKMGN5NUZUa0ZDVEVWZlFWTlRSVkpVVXlsN2RtRnlJR005WVM1MFlXZE9ZVzFsTG5SdlZYQndaWEpEWVhObEtDazdhV1lvWjI5dlp5NWtiMjB1YzJGbVpTNVRSVlJmU1U1T1JWSmZTRlJOVEY5RVNWTkJURXhQVjBWRVgxUkJSMU5mVzJOZEtYUm9jbTkzSUVWeWNtOXlLRndpWjI5dlp5NWtiMjB1YzJGbVpTNXpaWFJKYm01bGNraDBiV3dnWTJGdWJtOTBJR0psSUhWelpXUWdkRzhnYzJWMElHTnZiblJsYm5RZ2IyWWdYQ0lyWVM1MFlXZE9ZVzFsSzF3aUxsd2lLVHQ5WjI5dlp5NWtiMjB1YzJGbVpTNTFibk5oWm1WVFpYUkpibTVsY2toMGJXeEViMDV2ZEZWelpVOXlSV3h6WlNoaExHSXBmVHRuYjI5bkxtUnZiUzV6WVdabExuTmxkRTkxZEdWeVNIUnRiRDFtZFc1amRHbHZiaWhoTEdJcGUyRXViM1YwWlhKSVZFMU1QV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzUxYm5keVlYQlVjblZ6ZEdWa1NGUk5UQ2hpS1gwN1hHNW5iMjluTG1SdmJTNXpZV1psTG5ObGRFWnZjbTFGYkdWdFpXNTBRV04wYVc5dVBXWjFibU4wYVc5dUtHRXNZaWw3WWoxaUlHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtdy9ZanBuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVUZ6YzJWeWRGVnVZMmhoYm1kbFpDaGlLVHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEVadmNtMUZiR1Z0Wlc1MEtHRXBMbUZqZEdsdmJqMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBmVHRuYjI5bkxtUnZiUzV6WVdabExuTmxkRUoxZEhSdmJrWnZjbTFCWTNScGIyNDlablZ1WTNScGIyNG9ZU3hpS1h0aVBXSWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliRDlpT21kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUVhOelpYSjBWVzVqYUdGdVoyVmtLR0lwTzJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ2hoS1M1bWIzSnRRV04wYVc5dVBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0ZSeWRYTjBaV1JWVWt3b1lpbDlPMXh1WjI5dlp5NWtiMjB1YzJGbVpTNXpaWFJKYm5CMWRFWnZjbTFCWTNScGIyNDlablZ1WTNScGIyNG9ZU3hpS1h0aVBXSWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliRDlpT21kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUVhOelpYSjBWVzVqYUdGdVoyVmtLR0lwTzJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVNXNXdkWFJGYkdWdFpXNTBLR0VwTG1admNtMUJZM1JwYjI0OVoyOXZaeTVvZEcxc0xsTmhabVZWY213dWRXNTNjbUZ3VkhKMWMzUmxaRlZTVENoaUtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUlRkSGxzWlQxbWRXNWpkR2x2YmloaExHSXBlMkV1YzNSNWJHVXVZM056VkdWNGREMW5iMjluTG1oMGJXd3VVMkZtWlZOMGVXeGxMblZ1ZDNKaGNDaGlLWDA3WjI5dlp5NWtiMjB1YzJGbVpTNWtiMk4xYldWdWRGZHlhWFJsUFdaMWJtTjBhVzl1S0dFc1lpbDdZUzUzY21sMFpTaG5iMjluTG1oMGJXd3VVMkZtWlVoMGJXd3VkVzUzY21Gd1ZISjFjM1JsWkVoVVRVd29ZaWtwZlR0Y2JtZHZiMmN1Wkc5dExuTmhabVV1YzJWMFFXNWphRzl5U0hKbFpqMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVFXNWphRzl5Uld4bGJXVnVkQ2hoS1R0aVBXSWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliRDlpT21kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUVhOelpYSjBWVzVqYUdGdVoyVmtLR0lwTzJFdWFISmxaajFuYjI5bkxtaDBiV3d1VTJGbVpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1ZWSk1LR0lwZlR0bmIyOW5MbVJ2YlM1ellXWmxMbk5sZEVsdFlXZGxVM0pqUFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwaFVUVXhKYldGblpVVnNaVzFsYm5Rb1lTazdhV1lvSVNoaUlHbHVjM1JoYm1ObGIyWWdaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3BLWHQyWVhJZ1l6MHZYbVJoZEdFNmFXMWhaMlZjWEM4dmFTNTBaWE4wS0dJcE8ySTlaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjMkZ1YVhScGVtVkJjM05sY25SVmJtTm9ZVzVuWldRb1lpeGpLWDFoTG5OeVl6MW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBmVHRjYm1kdmIyY3VaRzl0TG5OaFptVXVjMlYwUVhWa2FXOVRjbU05Wm5WdVkzUnBiMjRvWVN4aUtYdG5iMjluTG1SdmJTNWhjM05sY25SekxtRnpjMlZ5ZEVselNGUk5URUYxWkdsdlJXeGxiV1Z1ZENoaEtUdHBaaWdoS0dJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJDa3BlM1poY2lCalBTOWVaR0YwWVRwaGRXUnBiMXhjTHk5cExuUmxjM1FvWWlrN1lqMW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNXpZVzVwZEdsNlpVRnpjMlZ5ZEZWdVkyaGhibWRsWkNoaUxHTXBmV0V1YzNKalBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0ZSeWRYTjBaV1JWVWt3b1lpbDlPMmR2YjJjdVpHOXRMbk5oWm1VdWMyVjBWbWxrWlc5VGNtTTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6U0ZSTlRGWnBaR1Z2Uld4bGJXVnVkQ2hoS1R0cFppZ2hLR0lnYVc1emRHRnVZMlZ2WmlCbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkNrcGUzWmhjaUJqUFM5ZVpHRjBZVHAyYVdSbGIxeGNMeTlwTG5SbGMzUW9ZaWs3WWoxbmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1ellXNXBkR2w2WlVGemMyVnlkRlZ1WTJoaGJtZGxaQ2hpTEdNcGZXRXVjM0pqUFdkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3dvWWlsOU8xeHVaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkZiV0psWkZOeVl6MW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5JVkUxTVJXMWlaV1JGYkdWdFpXNTBLR0VwTzJFdWMzSmpQV2R2YjJjdWFIUnRiQzVVY25WemRHVmtVbVZ6YjNWeVkyVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGTmpjbWx3ZEZWU1RDaGlLWDA3WjI5dlp5NWtiMjB1YzJGbVpTNXpaWFJHY21GdFpWTnlZejFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOSVZFMU1SbkpoYldWRmJHVnRaVzUwS0dFcE8yRXVjM0pqUFdkdmIyY3VhSFJ0YkM1VWNuVnpkR1ZrVW1WemIzVnlZMlZWY213dWRXNTNjbUZ3VkhKMWMzUmxaRlZTVENoaUtYMDdaMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkpabkpoYldWVGNtTTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbVJ2YlM1aGMzTmxjblJ6TG1GemMyVnlkRWx6U0ZSTlRFbEdjbUZ0WlVWc1pXMWxiblFvWVNrN1lTNXpjbU05WjI5dlp5NW9kRzFzTGxSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNS0dJcGZUdGNibWR2YjJjdVpHOXRMbk5oWm1VdWMyVjBTV1p5WVcxbFUzSmpaRzlqUFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMwaFVUVXhKUm5KaGJXVkZiR1Z0Wlc1MEtHRXBPMkV1YzNKalpHOWpQV2R2YjJjdWFIUnRiQzVUWVdabFNIUnRiQzUxYm5keVlYQlVjblZ6ZEdWa1NGUk5UQ2hpS1gwN1hHNW5iMjluTG1SdmJTNXpZV1psTG5ObGRFeHBibXRJY21WbVFXNWtVbVZzUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtUnZiUzVoYzNObGNuUnpMbUZ6YzJWeWRFbHpTRlJOVEV4cGJtdEZiR1Z0Wlc1MEtHRXBPMkV1Y21Wc1BXTTdaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTJGelpVbHVjMlZ1YzJsMGFYWmxRMjl1ZEdGcGJuTW9ZeXhjSW5OMGVXeGxjMmhsWlhSY0lpay9LR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWWlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtd3NKMVZTVENCdGRYTjBJR0psSUZSeWRYTjBaV1JTWlhOdmRYSmpaVlZ5YkNCaVpXTmhkWE5sSUZ3aWNtVnNYQ0lnWTI5dWRHRnBibk1nWENKemRIbHNaWE5vWldWMFhDSW5LU3hoTG1oeVpXWTlaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1ZWSk1LR0lwS1RwaExtaHlaV1k5WWlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVVjblZ6ZEdWa1VtVnpiM1Z5WTJWVmNtdy9aMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1ZWSk1LR0lwT21JZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOW5iMjluTG1oMGJXd3VVMkZtWlZWeWJDNTFibmR5WVhCVWNuVnpkR1ZrVlZKTUtHSXBPbHh1WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1ZFc1M2NtRndWSEoxYzNSbFpGVlNUQ2huYjI5bkxtaDBiV3d1VTJGbVpWVnliQzV6WVc1cGRHbDZaVUZ6YzJWeWRGVnVZMmhoYm1kbFpDaGlLU2w5TzJkdmIyY3VaRzl0TG5OaFptVXVjMlYwVDJKcVpXTjBSR0YwWVQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNVDJKcVpXTjBSV3hsYldWdWRDaGhLVHRoTG1SaGRHRTlaMjl2Wnk1b2RHMXNMbFJ5ZFhOMFpXUlNaWE52ZFhKalpWVnliQzUxYm5keVlYQlVjblZ6ZEdWa1UyTnlhWEIwVlZKTUtHSXBmVHRuYjI5bkxtUnZiUzV6WVdabExuTmxkRk5qY21sd2RGTnlZejFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1Wkc5dExtRnpjMlZ5ZEhNdVlYTnpaWEowU1hOSVZFMU1VMk55YVhCMFJXeGxiV1Z1ZENoaEtUdGhMbk55WXoxbmIyOW5MbWgwYld3dVZISjFjM1JsWkZKbGMyOTFjbU5sVlhKc0xuVnVkM0poY0ZSeWRYTjBaV1JUWTNKcGNIUlZVa3dvWWlrN0tHSTlaMjl2Wnk1blpYUlRZM0pwY0hST2IyNWpaU2dwS1NZbVlTNXpaWFJCZEhSeWFXSjFkR1VvWENKdWIyNWpaVndpTEdJcGZUdGNibWR2YjJjdVpHOXRMbk5oWm1VdWMyVjBVMk55YVhCMFEyOXVkR1Z1ZEQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTklWRTFNVTJOeWFYQjBSV3hsYldWdWRDaGhLVHRoTG5SbGVIUTlaMjl2Wnk1b2RHMXNMbE5oWm1WVFkzSnBjSFF1ZFc1M2NtRndWSEoxYzNSbFpGTmpjbWx3ZENoaUtUc29ZajFuYjI5bkxtZGxkRk5qY21sd2RFNXZibU5sS0NrcEppWmhMbk5sZEVGMGRISnBZblYwWlNoY0ltNXZibU5sWENJc1lpbDlPMmR2YjJjdVpHOXRMbk5oWm1VdWMyVjBURzlqWVhScGIyNUljbVZtUFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1a2IyMHVZWE56WlhKMGN5NWhjM05sY25SSmMweHZZMkYwYVc5dUtHRXBPMkk5WWlCcGJuTjBZVzVqWlc5bUlHZHZiMmN1YUhSdGJDNVRZV1psVlhKc1AySTZaMjl2Wnk1b2RHMXNMbE5oWm1WVmNtd3VjMkZ1YVhScGVtVkJjM05sY25SVmJtTm9ZVzVuWldRb1lpazdZUzVvY21WbVBXZHZiMmN1YUhSdGJDNVRZV1psVlhKc0xuVnVkM0poY0ZSeWRYTjBaV1JWVWt3b1lpbDlPMXh1WjI5dlp5NWtiMjB1YzJGbVpTNWhjM05wWjI1TWIyTmhkR2x2YmoxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVpHOXRMbUZ6YzJWeWRITXVZWE56WlhKMFNYTk1iMk5oZEdsdmJpaGhLVHRpUFdJZ2FXNXpkR0Z1WTJWdlppQm5iMjluTG1oMGJXd3VVMkZtWlZWeWJEOWlPbWR2YjJjdWFIUnRiQzVUWVdabFZYSnNMbk5oYm1sMGFYcGxRWE56WlhKMFZXNWphR0Z1WjJWa0tHSXBPMkV1WVhOemFXZHVLR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNMblZ1ZDNKaGNGUnlkWE4wWldSVlVrd29ZaWtwZlR0bmIyOW5MbVJ2YlM1ellXWmxMbkpsY0d4aFkyVk1iMk5oZEdsdmJqMW1kVzVqZEdsdmJpaGhMR0lwZTJkdmIyY3VaRzl0TG1GemMyVnlkSE11WVhOelpYSjBTWE5NYjJOaGRHbHZiaWhoS1R0aVBXSWdhVzV6ZEdGdVkyVnZaaUJuYjI5bkxtaDBiV3d1VTJGbVpWVnliRDlpT21kdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5OaGJtbDBhWHBsUVhOelpYSjBWVzVqYUdGdVoyVmtLR0lwTzJFdWNtVndiR0ZqWlNobmIyOW5MbWgwYld3dVUyRm1aVlZ5YkM1MWJuZHlZWEJVY25WemRHVmtWVkpNS0dJcEtYMDdYRzVuYjI5bkxtUnZiUzV6WVdabExtOXdaVzVKYmxkcGJtUnZkejFtZFc1amRHbHZiaWhoTEdJc1l5eGtMR1VwZTJFOVlTQnBibk4wWVc1alpXOW1JR2R2YjJjdWFIUnRiQzVUWVdabFZYSnNQMkU2WjI5dlp5NW9kRzFzTGxOaFptVlZjbXd1YzJGdWFYUnBlbVZCYzNObGNuUlZibU5vWVc1blpXUW9ZU2s3Y21WMGRYSnVLR0o4ZkdkdmIyY3VaMnh2WW1Gc0tTNXZjR1Z1S0dkdmIyY3VhSFJ0YkM1VFlXWmxWWEpzTG5WdWQzSmhjRlJ5ZFhOMFpXUlZVa3dvWVNrc1l6OW5iMjluTG5OMGNtbHVaeTVEYjI1emRDNTFibmR5WVhBb1l5azZYQ0pjSWl4a0xHVXBmVHRuYjI5bkxtUnZiUzV6WVdabExuQmhjbk5sUm5KdmJWTjBjbWx1WjBoMGJXdzlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnWjI5dlp5NWtiMjB1YzJGbVpTNXdZWEp6WlVaeWIyMVRkSEpwYm1jb1lTeGlMRndpZEdWNGRDOW9kRzFzWENJcGZUdG5iMjluTG1SdmJTNXpZV1psTG5CaGNuTmxSbkp2YlZOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJc1l5bDdjbVYwZFhKdUlHRXVjR0Z5YzJWR2NtOXRVM1J5YVc1bktHZHZiMmN1YUhSdGJDNVRZV1psU0hSdGJDNTFibmR5WVhCVWNuVnpkR1ZrU0ZSTlRDaGlLU3hqS1gwN1hHNW5iMjluTG1SdmJTNXpZV1psTG1OeVpXRjBaVWx0WVdkbFJuSnZiVUpzYjJJOVpuVnVZM1JwYjI0b1lTbDdhV1lvSVM5ZWFXMWhaMlZjWEM4dUtpOW5MblJsYzNRb1lTNTBlWEJsS1NsMGFISnZkeUJGY25KdmNpaGNJbWR2YjJjdVpHOXRMbk5oWm1VdVkzSmxZWFJsU1cxaFoyVkdjbTl0UW14dllpQnZibXg1SUdGalkyVndkSE1nVFVsTlJTQjBlWEJsSUdsdFlXZGxMeTRxTGx3aUtUdDJZWElnWWoxbmIyOW5MbWRzYjJKaGJDNVZVa3d1WTNKbFlYUmxUMkpxWldOMFZWSk1LR0VwTzJFOWJtVjNJR2R2YjJjdVoyeHZZbUZzTGtsdFlXZGxPMkV1YjI1c2IyRmtQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NW5iRzlpWVd3dVZWSk1MbkpsZG05clpVOWlhbVZqZEZWU1RDaGlLWDA3WjI5dlp5NWtiMjB1YzJGbVpTNXpaWFJKYldGblpWTnlZeWhoTEdkdmIyY3VhSFJ0YkM1MWJtTm9aV05yWldSamIyNTJaWEp6YVc5dWN5NXpZV1psVlhKc1JuSnZiVk4wY21sdVowdHViM2R1Vkc5VFlYUnBjMlo1Vkhsd1pVTnZiblJ5WVdOMEtHZHZiMmN1YzNSeWFXNW5Ma052Ym5OMExtWnliMjBvWENKSmJXRm5aU0JpYkc5aUlGVlNUQzVjSWlrc1lpa3BPM0psZEhWeWJpQmhmVHRuYjI5bkxuTjBjbWx1Wnk1RVJWUkZRMVJmUkU5VlFreEZYMFZUUTBGUVNVNUhQU0V4TzJkdmIyY3VjM1J5YVc1bkxrWlBVa05GWDA1UFRsOUVUMDFmU0ZSTlRGOVZUa1ZUUTBGUVNVNUhQU0V4TzJkdmIyY3VjM1J5YVc1bkxsVnVhV052WkdVOWUwNUNVMUE2WENKY1hIVXdNR0V3WENKOU8yZHZiMmN1YzNSeWFXNW5Mbk4wWVhKMGMxZHBkR2c5WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWMzUmhjblJ6VjJsMGFEdG5iMjluTG5OMGNtbHVaeTVsYm1SelYybDBhRDFuYjI5bkxuTjBjbWx1Wnk1cGJuUmxjbTVoYkM1bGJtUnpWMmwwYUR0bmIyOW5Mbk4wY21sdVp5NWpZWE5sU1c1elpXNXphWFJwZG1WVGRHRnlkSE5YYVhSb1BXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpWTjBZWEowYzFkcGRHZzdaMjl2Wnk1emRISnBibWN1WTJGelpVbHVjMlZ1YzJsMGFYWmxSVzVrYzFkcGRHZzlaMjl2Wnk1emRISnBibWN1YVc1MFpYSnVZV3d1WTJGelpVbHVjMlZ1YzJsMGFYWmxSVzVrYzFkcGRHZzdaMjl2Wnk1emRISnBibWN1WTJGelpVbHVjMlZ1YzJsMGFYWmxSWEYxWVd4elBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVVnhkV0ZzY3p0Y2JtZHZiMmN1YzNSeWFXNW5Mbk4xWW5NOVpuVnVZM1JwYjI0b1lTeGlLWHRtYjNJb2RtRnlJR005WVM1emNHeHBkQ2hjSWlWelhDSXBMR1E5WENKY0lpeGxQVUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLR0Z5WjNWdFpXNTBjeXd4S1R0bExteGxibWQwYUNZbU1UeGpMbXhsYm1kMGFEc3BaQ3M5WXk1emFHbG1kQ2dwSzJVdWMyaHBablFvS1R0eVpYUjFjbTRnWkN0akxtcHZhVzRvWENJbGMxd2lLWDA3WjI5dlp5NXpkSEpwYm1jdVkyOXNiR0Z3YzJWWGFHbDBaWE53WVdObFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhMbkpsY0d4aFkyVW9MMXRjWEhOY1hIaGhNRjByTDJjc1hDSWdYQ0lwTG5KbGNHeGhZMlVvTDE1Y1hITXJmRnhjY3lza0wyY3NYQ0pjSWlsOU8yZHZiMmN1YzNSeWFXNW5MbWx6Ulcxd2RIbFBjbGRvYVhSbGMzQmhZMlU5WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWFYTkZiWEIwZVU5eVYyaHBkR1Z6Y0dGalpUdG5iMjluTG5OMGNtbHVaeTVwYzBWdGNIUjVVM1J5YVc1blBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQXdQVDFoTG14bGJtZDBhSDA3WjI5dlp5NXpkSEpwYm1jdWFYTkZiWEIwZVQxbmIyOW5Mbk4wY21sdVp5NXBjMFZ0Y0hSNVQzSlhhR2wwWlhOd1lXTmxPMmR2YjJjdWMzUnlhVzVuTG1selJXMXdkSGxQY2xkb2FYUmxjM0JoWTJWVFlXWmxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1cGMwVnRjSFI1VDNKWGFHbDBaWE53WVdObEtHZHZiMmN1YzNSeWFXNW5MbTFoYTJWVFlXWmxLR0VwS1gwN1hHNW5iMjluTG5OMGNtbHVaeTVwYzBWdGNIUjVVMkZtWlQxbmIyOW5Mbk4wY21sdVp5NXBjMFZ0Y0hSNVQzSlhhR2wwWlhOd1lXTmxVMkZtWlR0bmIyOW5Mbk4wY21sdVp5NXBjMEp5WldGcmFXNW5WMmhwZEdWemNHRmpaVDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRoTDF0ZVhGeDBYRnh1WEZ4eUlGMHZMblJsYzNRb1lTbDlPMmR2YjJjdWMzUnlhVzVuTG1selFXeHdhR0U5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SVM5YlhtRXRla0V0V2wwdkxuUmxjM1FvWVNsOU8yZHZiMmN1YzNSeWFXNW5MbWx6VG5WdFpYSnBZejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRoTDF0ZU1DMDVYUzh1ZEdWemRDaGhLWDA3WjI5dlp5NXpkSEpwYm1jdWFYTkJiSEJvWVU1MWJXVnlhV005Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SVM5YlhtRXRla0V0V2pBdE9WMHZMblJsYzNRb1lTbDlPMmR2YjJjdWMzUnlhVzVuTG1selUzQmhZMlU5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1WENJZ1hDSTlQV0Y5TzJkdmIyY3VjM1J5YVc1bkxtbHpWVzVwWTI5a1pVTm9ZWEk5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SURFOVBXRXViR1Z1WjNSb0ppWmNJaUJjSWp3OVlTWW1YQ0orWENJK1BXRjhmRndpWEZ4MU1EQTRNRndpUEQxaEppWmNJbHhjZFdabVptUmNJajQ5WVgwN1hHNW5iMjluTG5OMGNtbHVaeTV6ZEhKcGNFNWxkMnhwYm1WelBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhMbkpsY0d4aFkyVW9MeWhjWEhKY1hHNThYRnh5ZkZ4Y2Jpa3JMMmNzWENJZ1hDSXBmVHRuYjI5bkxuTjBjbWx1Wnk1allXNXZibWxqWVd4cGVtVk9aWGRzYVc1bGN6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdZUzV5WlhCc1lXTmxLQzhvWEZ4eVhGeHVmRnhjY254Y1hHNHBMMmNzWENKY1hHNWNJaWw5TzJkdmIyY3VjM1J5YVc1bkxtNXZjbTFoYkdsNlpWZG9hWFJsYzNCaFkyVTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0V1Y21Wd2JHRmpaU2d2WEZ4NFlUQjhYRnh6TDJjc1hDSWdYQ0lwZlR0bmIyOW5Mbk4wY21sdVp5NXViM0p0WVd4cGVtVlRjR0ZqWlhNOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTZ3ZYRng0WVRCOFd5QmNYSFJkS3k5bkxGd2lJRndpS1gwN1oyOXZaeTV6ZEhKcGJtY3VZMjlzYkdGd2MyVkNjbVZoYTJsdVoxTndZV05sY3oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTNXlaWEJzWVdObEtDOWJYRngwWEZ4eVhGeHVJRjByTDJjc1hDSWdYQ0lwTG5KbGNHeGhZMlVvTDE1YlhGeDBYRnh5WEZ4dUlGMHJmRnRjWEhSY1hISmNYRzRnWFNza0wyY3NYQ0pjSWlsOU8yZHZiMmN1YzNSeWFXNW5MblJ5YVcwOVoyOXZaeTV6ZEhKcGJtY3VhVzUwWlhKdVlXd3VkSEpwYlR0Y2JtZHZiMmN1YzNSeWFXNW5MblJ5YVcxTVpXWjBQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJoTG5KbGNHeGhZMlVvTDE1YlhGeHpYRng0WVRCZEt5OHNYQ0pjSWlsOU8yZHZiMmN1YzNSeWFXNW5MblJ5YVcxU2FXZG9kRDFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0M5YlhGeHpYRng0WVRCZEt5UXZMRndpWENJcGZUdG5iMjluTG5OMGNtbHVaeTVqWVhObFNXNXpaVzV6YVhScGRtVkRiMjF3WVhKbFBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU5oYzJWSmJuTmxibk5wZEdsMlpVTnZiWEJoY21VN1hHNW5iMjluTG5OMGNtbHVaeTV1ZFcxaVpYSkJkMkZ5WlVOdmJYQmhjbVZmUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRwWmloaFBUMWlLWEpsZEhWeWJpQXdPMmxtS0NGaEtYSmxkSFZ5YmkweE8ybG1LQ0ZpS1hKbGRIVnliaUF4TzJadmNpaDJZWElnWkQxaExuUnZURzkzWlhKRFlYTmxLQ2t1YldGMFkyZ29ZeWtzWlQxaUxuUnZURzkzWlhKRFlYTmxLQ2t1YldGMFkyZ29ZeWtzWmoxTllYUm9MbTFwYmloa0xteGxibWQwYUN4bExteGxibWQwYUNrc1p6MHdPMmM4Wmp0bkt5c3BlMk05WkZ0blhUdDJZWElnYUQxbFcyZGRPMmxtS0dNaFBXZ3BjbVYwZFhKdUlHRTljR0Z5YzJWSmJuUW9ZeXd4TUNrc0lXbHpUbUZPS0dFcEppWW9ZajF3WVhKelpVbHVkQ2hvTERFd0tTd2hhWE5PWVU0b1lpa21KbUV0WWlrL1lTMWlPbU04YUQ4dE1Ub3hmWEpsZEhWeWJpQmtMbXhsYm1kMGFDRTlaUzVzWlc1bmRHZy9aQzVzWlc1bmRHZ3RaUzVzWlc1bmRHZzZZVHhpUHkweE9qRjlPMmR2YjJjdWMzUnlhVzVuTG1sdWRFRjNZWEpsUTI5dGNHRnlaVDFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCbmIyOW5Mbk4wY21sdVp5NXVkVzFpWlhKQmQyRnlaVU52YlhCaGNtVmZLR0VzWWl3dlhGeGtLM3hjWEVRckwyY3BmVHRjYm1kdmIyY3VjM1J5YVc1bkxtWnNiMkYwUVhkaGNtVkRiMjF3WVhKbFBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR2R2YjJjdWMzUnlhVzVuTG01MWJXSmxja0YzWVhKbFEyOXRjR0Z5WlY4b1lTeGlMQzljWEdRcmZGeGNMbHhjWkN0OFhGeEVLeTluS1gwN1oyOXZaeTV6ZEhKcGJtY3ViblZ0WlhKaGRHVkRiMjF3WVhKbFBXZHZiMmN1YzNSeWFXNW5MbVpzYjJGMFFYZGhjbVZEYjIxd1lYSmxPMmR2YjJjdWMzUnlhVzVuTG5WeWJFVnVZMjlrWlQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1pXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtGTjBjbWx1WnloaEtTbDlPMmR2YjJjdWMzUnlhVzVuTG5WeWJFUmxZMjlrWlQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1pHVmpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtHRXVjbVZ3YkdGalpTZ3ZYRndyTDJjc1hDSWdYQ0lwS1gwN1oyOXZaeTV6ZEhKcGJtY3VibVYzVEdsdVpWUnZRbkk5WjI5dlp5NXpkSEpwYm1jdWFXNTBaWEp1WVd3dWJtVjNUR2x1WlZSdlFuSTdYRzVuYjI5bkxuTjBjbWx1Wnk1b2RHMXNSWE5qWVhCbFBXWjFibU4wYVc5dUtHRXNZaWw3WVQxbmIyOW5Mbk4wY21sdVp5NXBiblJsY201aGJDNW9kRzFzUlhOallYQmxLR0VzWWlrN1oyOXZaeTV6ZEhKcGJtY3VSRVZVUlVOVVgwUlBWVUpNUlY5RlUwTkJVRWxPUnlZbUtHRTlZUzV5WlhCc1lXTmxLR2R2YjJjdWMzUnlhVzVuTGtWZlVrVmZMRndpSmlNeE1ERTdYQ0lwS1R0eVpYUjFjbTRnWVgwN1oyOXZaeTV6ZEhKcGJtY3VSVjlTUlY4OUwyVXZaenRuYjI5bkxuTjBjbWx1Wnk1MWJtVnpZMkZ3WlVWdWRHbDBhV1Z6UFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCbmIyOW5Mbk4wY21sdVp5NWpiMjUwWVdsdWN5aGhMRndpSmx3aUtUOGhaMjl2Wnk1emRISnBibWN1Ums5U1EwVmZUazlPWDBSUFRWOUlWRTFNWDFWT1JWTkRRVkJKVGtjbUpsd2laRzlqZFcxbGJuUmNJbWx1SUdkdmIyY3VaMnh2WW1Gc1AyZHZiMmN1YzNSeWFXNW5MblZ1WlhOallYQmxSVzUwYVhScFpYTlZjMmx1WjBSdmJWOG9ZU2s2WjI5dlp5NXpkSEpwYm1jdWRXNWxjMk5oY0dWUWRYSmxXRzFzUlc1MGFYUnBaWE5mS0dFcE9tRjlPMXh1WjI5dlp5NXpkSEpwYm1jdWRXNWxjMk5oY0dWRmJuUnBkR2xsYzFkcGRHaEViMk4xYldWdWREMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1amIyNTBZV2x1Y3loaExGd2lKbHdpS1Q5bmIyOW5Mbk4wY21sdVp5NTFibVZ6WTJGd1pVVnVkR2wwYVdWelZYTnBibWRFYjIxZktHRXNZaWs2WVgwN1hHNW5iMjluTG5OMGNtbHVaeTUxYm1WelkyRndaVVZ1ZEdsMGFXVnpWWE5wYm1kRWIyMWZQV1oxYm1OMGFXOXVLR0VzWWlsN2RtRnlJR005ZTF3aUptRnRjRHRjSWpwY0lpWmNJaXhjSWlac2REdGNJanBjSWp4Y0lpeGNJaVpuZER0Y0lqcGNJajVjSWl4Y0lpWnhkVzkwTzF3aU9pZGNJaWQ5TzNaaGNpQmtQV0kvWWk1amNtVmhkR1ZGYkdWdFpXNTBLRndpWkdsMlhDSXBPbWR2YjJjdVoyeHZZbUZzTG1SdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9YQ0prYVhaY0lpazdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTaG5iMjluTG5OMGNtbHVaeTVJVkUxTVgwVk9WRWxVV1Y5UVFWUlVSVkpPWHl4bWRXNWpkR2x2YmloaExHSXBlM1poY2lCbFBXTmJZVjA3YVdZb1pTbHlaWFIxY200Z1pUdGNJaU5jSWowOVlpNWphR0Z5UVhRb01Da21KaWhpUFU1MWJXSmxjaWhjSWpCY0lpdGlMbk4xWW5OMGNpZ3hLU2tzYVhOT1lVNG9ZaWw4ZkNobFBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9ZaWtwS1R0bGZId29aMjl2Wnk1a2IyMHVjMkZtWlM1elpYUkpibTVsY2toMGJXd29aQ3huYjI5bkxtaDBiV3d1ZFc1amFHVmphMlZrWTI5dWRtVnljMmx2Ym5NdWMyRm1aVWgwYld4R2NtOXRVM1J5YVc1blMyNXZkMjVVYjFOaGRHbHpabmxVZVhCbFEyOXVkSEpoWTNRb1oyOXZaeTV6ZEhKcGJtY3VRMjl1YzNRdVpuSnZiU2hjSWxOcGJtZHNaU0JJVkUxTUlHVnVkR2wwZVM1Y0lpa3NYRzVoSzF3aUlGd2lLU2tzWlQxa0xtWnBjbk4wUTJocGJHUXVibTlrWlZaaGJIVmxMbk5zYVdObEtEQXNMVEVwS1R0eVpYUjFjbTRnWTF0aFhUMWxmU2w5TzJkdmIyY3VjM1J5YVc1bkxuVnVaWE5qWVhCbFVIVnlaVmh0YkVWdWRHbDBhV1Z6WHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTNXlaWEJzWVdObEtDOG1LRnRlTzEwcktUc3ZaeXhtZFc1amRHbHZiaWhoTEdNcGUzTjNhWFJqYUNoaktYdGpZWE5sSUZ3aVlXMXdYQ0k2Y21WMGRYSnVYQ0ltWENJN1kyRnpaU0JjSW14MFhDSTZjbVYwZFhKdVhDSThYQ0k3WTJGelpTQmNJbWQwWENJNmNtVjBkWEp1WENJK1hDSTdZMkZ6WlNCY0luRjFiM1JjSWpweVpYUjFjbTRuWENJbk8yUmxabUYxYkhRNmNtVjBkWEp1WENJalhDSWhQV011WTJoaGNrRjBLREFwZkh3b1l6MU9kVzFpWlhJb1hDSXdYQ0lyWXk1emRXSnpkSElvTVNrcExHbHpUbUZPS0dNcEtUOWhPbE4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvWXlsOWZTbDlPMmR2YjJjdWMzUnlhVzVuTGtoVVRVeGZSVTVVU1ZSWlgxQkJWRlJGVWs1ZlBTOG1LRnRlTzF4Y2N6d21YU3NwT3o4dlp6dG5iMjluTG5OMGNtbHVaeTUzYUdsMFpYTndZV05sUlhOallYQmxQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtNWxkMHhwYm1WVWIwSnlLR0V1Y21Wd2JHRmpaU2d2SUNBdlp5eGNJaUFtSXpFMk1EdGNJaWtzWWlsOU8xeHVaMjl2Wnk1emRISnBibWN1Y0hKbGMyVnlkbVZUY0dGalpYTTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJR0V1Y21Wd2JHRmpaU2d2S0Y1OFcxeGNiaUJkS1NBdlp5eGNJaVF4WENJcloyOXZaeTV6ZEhKcGJtY3VWVzVwWTI5a1pTNU9RbE5RS1gwN1oyOXZaeTV6ZEhKcGJtY3VjM1J5YVhCUmRXOTBaWE05Wm5WdVkzUnBiMjRvWVN4aUtYdG1iM0lvZG1GeUlHTTlZaTVzWlc1bmRHZ3NaRDB3TzJROFl6dGtLeXNwZTNaaGNpQmxQVEU5UFdNL1lqcGlMbU5vWVhKQmRDaGtLVHRwWmloaExtTm9ZWEpCZENnd0tUMDlaU1ltWVM1amFHRnlRWFFvWVM1c1pXNW5kR2d0TVNrOVBXVXBjbVYwZFhKdUlHRXVjM1ZpYzNSeWFXNW5LREVzWVM1c1pXNW5kR2d0TVNsOWNtVjBkWEp1SUdGOU8yZHZiMmN1YzNSeWFXNW5MblJ5ZFc1allYUmxQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGpKaVlvWVQxbmIyOW5Mbk4wY21sdVp5NTFibVZ6WTJGd1pVVnVkR2wwYVdWektHRXBLVHRoTG14bGJtZDBhRDVpSmlZb1lUMWhMbk4xWW5OMGNtbHVaeWd3TEdJdE15a3JYQ0l1TGk1Y0lpazdZeVltS0dFOVoyOXZaeTV6ZEhKcGJtY3VhSFJ0YkVWelkyRndaU2hoS1NrN2NtVjBkWEp1SUdGOU8xeHVaMjl2Wnk1emRISnBibWN1ZEhKMWJtTmhkR1ZOYVdSa2JHVTlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdZeVltS0dFOVoyOXZaeTV6ZEhKcGJtY3VkVzVsYzJOaGNHVkZiblJwZEdsbGN5aGhLU2s3YVdZb1pDWW1ZUzVzWlc1bmRHZytZaWw3WkQ1aUppWW9aRDFpS1R0MllYSWdaVDFoTG14bGJtZDBhQzFrTzJFOVlTNXpkV0p6ZEhKcGJtY29NQ3hpTFdRcEsxd2lMaTR1WENJcllTNXpkV0p6ZEhKcGJtY29aU2w5Wld4elpTQmhMbXhsYm1kMGFENWlKaVlvWkQxTllYUm9MbVpzYjI5eUtHSXZNaWtzWlQxaExteGxibWQwYUMxa0xHRTlZUzV6ZFdKemRISnBibWNvTUN4a0sySWxNaWtyWENJdUxpNWNJaXRoTG5OMVluTjBjbWx1WnlobEtTazdZeVltS0dFOVoyOXZaeTV6ZEhKcGJtY3VhSFJ0YkVWelkyRndaU2hoS1NrN2NtVjBkWEp1SUdGOU8yZHZiMmN1YzNSeWFXNW5Mbk53WldOcFlXeEZjMk5oY0dWRGFHRnljMTg5ZTF3aVhGeDRNREJjSWpwY0lseGNYRnd3WENJc1hDSmNYR0pjSWpwY0lseGNYRnhpWENJc1hDSmNYR1pjSWpwY0lseGNYRnhtWENJc1hDSmNYRzVjSWpwY0lseGNYRnh1WENJc1hDSmNYSEpjSWpwY0lseGNYRnh5WENJc1hDSmNYSFJjSWpwY0lseGNYRngwWENJc1hDSmNYSGd3UWx3aU9sd2lYRnhjWEhnd1Fsd2lMQ2RjSWljNkoxeGNYRnhjSWljc1hDSmNYRnhjWENJNlhDSmNYRnhjWEZ4Y1hGd2lMRndpUEZ3aU9sd2lYRnhjWEhVd01ETkRYQ0o5TzJkdmIyY3VjM1J5YVc1bkxtcHpSWE5qWVhCbFEyRmphR1ZmUFh0Y0lpZGNJanBjSWx4Y1hGd25YQ0o5TzF4dVoyOXZaeTV6ZEhKcGJtY3VjWFZ2ZEdVOVpuVnVZM1JwYjI0b1lTbDdZVDFUZEhKcGJtY29ZU2s3Wm05eUtIWmhjaUJpUFZzblhDSW5YU3hqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwZTNaaGNpQmtQV0V1WTJoaGNrRjBLR01wTEdVOVpDNWphR0Z5UTI5a1pVRjBLREFwTzJKYll5c3hYVDFuYjI5bkxuTjBjbWx1Wnk1emNHVmphV0ZzUlhOallYQmxRMmhoY25OZlcyUmRmSHdvTXpFOFpTWW1NVEkzUG1VL1pEcG5iMjluTG5OMGNtbHVaeTVsYzJOaGNHVkRhR0Z5S0dRcEtYMWlMbkIxYzJnb0oxd2lKeWs3Y21WMGRYSnVJR0l1YW05cGJpaGNJbHdpS1gwN1oyOXZaeTV6ZEhKcGJtY3VaWE5qWVhCbFUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFcGUyWnZjaWgyWVhJZ1lqMWJYU3hqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwWWx0alhUMW5iMjluTG5OMGNtbHVaeTVsYzJOaGNHVkRhR0Z5S0dFdVkyaGhja0YwS0dNcEtUdHlaWFIxY200Z1lpNXFiMmx1S0Z3aVhDSXBmVHRjYm1kdmIyY3VjM1J5YVc1bkxtVnpZMkZ3WlVOb1lYSTlablZ1WTNScGIyNG9ZU2w3YVdZb1lTQnBiaUJuYjI5bkxuTjBjbWx1Wnk1cWMwVnpZMkZ3WlVOaFkyaGxYeWx5WlhSMWNtNGdaMjl2Wnk1emRISnBibWN1YW5ORmMyTmhjR1ZEWVdOb1pWOWJZVjA3YVdZb1lTQnBiaUJuYjI5bkxuTjBjbWx1Wnk1emNHVmphV0ZzUlhOallYQmxRMmhoY25OZktYSmxkSFZ5YmlCbmIyOW5Mbk4wY21sdVp5NXFjMFZ6WTJGd1pVTmhZMmhsWDF0aFhUMW5iMjluTG5OMGNtbHVaeTV6Y0dWamFXRnNSWE5qWVhCbFEyaGhjbk5mVzJGZE8zWmhjaUJpUFdFdVkyaGhja052WkdWQmRDZ3dLVHRwWmlnek1UeGlKaVl4TWpjK1lpbDJZWElnWXoxaE8yVnNjMlY3YVdZb01qVTJQbUlwZTJsbUtHTTlYQ0pjWEZ4Y2VGd2lMREUyUG1KOGZESTFOanhpS1dNclBWd2lNRndpZldWc2MyVWdZejFjSWx4Y1hGeDFYQ0lzTkRBNU5qNWlKaVlvWXlzOVhDSXdYQ0lwTzJNclBXSXVkRzlUZEhKcGJtY29NVFlwTG5SdlZYQndaWEpEWVhObEtDbDljbVYwZFhKdUlHZHZiMmN1YzNSeWFXNW5MbXB6UlhOallYQmxRMkZqYUdWZlcyRmRQV045TzJkdmIyY3VjM1J5YVc1bkxtTnZiblJoYVc1elBXZHZiMmN1YzNSeWFXNW5MbWx1ZEdWeWJtRnNMbU52Ym5SaGFXNXpPMmR2YjJjdWMzUnlhVzVuTG1OaGMyVkpibk5sYm5OcGRHbDJaVU52Ym5SaGFXNXpQV2R2YjJjdWMzUnlhVzVuTG1sdWRHVnlibUZzTG1OaGMyVkpibk5sYm5OcGRHbDJaVU52Ym5SaGFXNXpPMXh1WjI5dlp5NXpkSEpwYm1jdVkyOTFiblJQWmoxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQmhKaVppUDJFdWMzQnNhWFFvWWlrdWJHVnVaM1JvTFRFNk1IMDdaMjl2Wnk1emRISnBibWN1Y21WdGIzWmxRWFE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1poY2lCa1BXRTdNRHc5WWlZbVlqeGhMbXhsYm1kMGFDWW1NRHhqSmlZb1pEMWhMbk4xWW5OMGNpZ3dMR0lwSzJFdWMzVmljM1J5S0dJcll5eGhMbXhsYm1kMGFDMWlMV01wS1R0eVpYUjFjbTRnWkgwN1oyOXZaeTV6ZEhKcGJtY3VjbVZ0YjNabFBXWjFibU4wYVc5dUtHRXNZaWw3Y21WMGRYSnVJR0V1Y21Wd2JHRmpaU2hpTEZ3aVhDSXBmVHRuYjI5bkxuTjBjbWx1Wnk1eVpXMXZkbVZCYkd3OVpuVnVZM1JwYjI0b1lTeGlLWHRpUFc1bGR5QlNaV2RGZUhBb1oyOXZaeTV6ZEhKcGJtY3VjbVZuUlhod1JYTmpZWEJsS0dJcExGd2laMXdpS1R0eVpYUjFjbTRnWVM1eVpYQnNZV05sS0dJc1hDSmNJaWw5TzJkdmIyY3VjM1J5YVc1bkxuSmxjR3hoWTJWQmJHdzlablZ1WTNScGIyNG9ZU3hpTEdNcGUySTlibVYzSUZKbFowVjRjQ2huYjI5bkxuTjBjbWx1Wnk1eVpXZEZlSEJGYzJOaGNHVW9ZaWtzWENKblhDSXBPM0psZEhWeWJpQmhMbkpsY0d4aFkyVW9ZaXhqTG5KbGNHeGhZMlVvTDF4Y0pDOW5MRndpSkNRa0pGd2lLU2w5TzF4dVoyOXZaeTV6ZEhKcGJtY3VjbVZuUlhod1JYTmpZWEJsUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCVGRISnBibWNvWVNrdWNtVndiR0ZqWlNndktGc3RLQ2xjWEZ0Y1hGMTdmU3MvS2k0a1hGeGVmQ3c2SXp3aFhGeGNYRjBwTDJjc1hDSmNYRnhjSkRGY0lpa3VjbVZ3YkdGalpTZ3ZYRng0TURndlp5eGNJbHhjWEZ4NE1EaGNJaWw5TzJkdmIyY3VjM1J5YVc1bkxuSmxjR1ZoZEQxVGRISnBibWN1Y0hKdmRHOTBlWEJsTG5KbGNHVmhkRDltZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCaExuSmxjR1ZoZENoaUtYMDZablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRnUVhKeVlYa29ZaXN4S1M1cWIybHVLR0VwZlR0bmIyOW5Mbk4wY21sdVp5NXdZV1JPZFcxaVpYSTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyRTlaMjl2Wnk1cGMwUmxaaWhqS1Q5aExuUnZSbWw0WldRb1l5azZVM1J5YVc1bktHRXBPMk05WVM1cGJtUmxlRTltS0Z3aUxsd2lLVHN0TVQwOVl5WW1LR005WVM1c1pXNW5kR2dwTzNKbGRIVnliaUJuYjI5bkxuTjBjbWx1Wnk1eVpYQmxZWFFvWENJd1hDSXNUV0YwYUM1dFlYZ29NQ3hpTFdNcEtTdGhmVHRuYjI5bkxuTjBjbWx1Wnk1dFlXdGxVMkZtWlQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2JuVnNiRDA5WVQ5Y0lsd2lPbE4wY21sdVp5aGhLWDA3WEc1bmIyOW5Mbk4wY21sdVp5NWlkV2xzWkZOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0eVpYUjFjbTRnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbXB2YVc0dVkyRnNiQ2hoY21kMWJXVnVkSE1zWENKY0lpbDlPMmR2YjJjdWMzUnlhVzVuTG1kbGRGSmhibVJ2YlZOMGNtbHVaejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJOWVhSb0xtWnNiMjl5S0RJeE5EYzBPRE0yTkRncVRXRjBhQzV5WVc1a2IyMG9LU2t1ZEc5VGRISnBibWNvTXpZcEswMWhkR2d1WVdKektFMWhkR2d1Wm14dmIzSW9NakUwTnpRNE16WTBPQ3BOWVhSb0xuSmhibVJ2YlNncEtWNW5iMjluTG01dmR5Z3BLUzUwYjFOMGNtbHVaeWd6TmlsOU8yZHZiMmN1YzNSeWFXNW5MbU52YlhCaGNtVldaWEp6YVc5dWN6MW5iMjluTG5OMGNtbHVaeTVwYm5SbGNtNWhiQzVqYjIxd1lYSmxWbVZ5YzJsdmJuTTdaMjl2Wnk1emRISnBibWN1YUdGemFFTnZaR1U5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLSFpoY2lCaVBUQXNZejB3TzJNOFlTNXNaVzVuZEdnN0t5dGpLV0k5TXpFcVlpdGhMbU5vWVhKRGIyUmxRWFFvWXlrK1BqNHdPM0psZEhWeWJpQmlmVHRuYjI5bkxuTjBjbWx1Wnk1MWJtbHhkV1ZUZEhKcGJtZERiM1Z1ZEdWeVh6MHlNVFEzTkRnek5qUTRLazFoZEdndWNtRnVaRzl0S0NsOE1EdGNibWR2YjJjdWMzUnlhVzVuTG1OeVpXRjBaVlZ1YVhGMVpWTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5Ymx3aVoyOXZaMTljSWl0bmIyOW5Mbk4wY21sdVp5NTFibWx4ZFdWVGRISnBibWREYjNWdWRHVnlYeXNyZlR0bmIyOW5Mbk4wY21sdVp5NTBiMDUxYldKbGNqMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMU9kVzFpWlhJb1lTazdjbVYwZFhKdUlEQTlQV0ltSm1kdmIyY3VjM1J5YVc1bkxtbHpSVzF3ZEhsUGNsZG9hWFJsYzNCaFkyVW9ZU2svVG1GT09tSjlPMmR2YjJjdWMzUnlhVzVuTG1selRHOTNaWEpEWVcxbGJFTmhjMlU5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1TDE1YllTMTZYU3NvVzBFdFdsMWJZUzE2WFNvcEtpUXZMblJsYzNRb1lTbDlPMmR2YjJjdWMzUnlhVzVuTG1selZYQndaWEpEWVcxbGJFTmhjMlU5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1TDE0b1cwRXRXbDFiWVMxNlhTb3BLeVF2TG5SbGMzUW9ZU2w5TzJkdmIyY3VjM1J5YVc1bkxuUnZRMkZ0Wld4RFlYTmxQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJUZEhKcGJtY29ZU2t1Y21Wd2JHRmpaU2d2WEZ3dEtGdGhMWHBkS1M5bkxHWjFibU4wYVc5dUtHRXNZeWw3Y21WMGRYSnVJR011ZEc5VmNIQmxja05oYzJVb0tYMHBmVHRjYm1kdmIyY3VjM1J5YVc1bkxuUnZVMlZzWldOMGIzSkRZWE5sUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCVGRISnBibWNvWVNrdWNtVndiR0ZqWlNndktGdEJMVnBkS1M5bkxGd2lMU1F4WENJcExuUnZURzkzWlhKRFlYTmxLQ2w5TzJkdmIyY3VjM1J5YVc1bkxuUnZWR2wwYkdWRFlYTmxQV1oxYm1OMGFXOXVLR0VzWWlsN1lqMW5iMjluTG1selUzUnlhVzVuS0dJcFAyZHZiMmN1YzNSeWFXNW5MbkpsWjBWNGNFVnpZMkZ3WlNoaUtUcGNJbHhjWEZ4elhDSTdjbVYwZFhKdUlHRXVjbVZ3YkdGalpTaHVaWGNnVW1WblJYaHdLRndpS0Y1Y0lpc29ZajljSW54YlhDSXJZaXRjSWwwclhDSTZYQ0pjSWlrclhDSXBLRnRoTFhwZEtWd2lMRndpWjF3aUtTeG1kVzVqZEdsdmJpaGhMR0lzWlNsN2NtVjBkWEp1SUdJclpTNTBiMVZ3Y0dWeVEyRnpaU2dwZlNsOU8yZHZiMmN1YzNSeWFXNW5MbU5oY0dsMFlXeHBlbVU5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUZOMGNtbHVaeWhoTG1Ob1lYSkJkQ2d3S1NrdWRHOVZjSEJsY2tOaGMyVW9LU3RUZEhKcGJtY29ZUzV6ZFdKemRISW9NU2twTG5SdlRHOTNaWEpEWVhObEtDbDlPMXh1WjI5dlp5NXpkSEpwYm1jdWNHRnljMlZKYm5ROVpuVnVZM1JwYjI0b1lTbDdhWE5HYVc1cGRHVW9ZU2ttSmloaFBWTjBjbWx1WnloaEtTazdjbVYwZFhKdUlHZHZiMmN1YVhOVGRISnBibWNvWVNrL0wxNWNYSE1xTFQ4d2VDOXBMblJsYzNRb1lTay9jR0Z5YzJWSmJuUW9ZU3d4TmlrNmNHRnljMlZKYm5Rb1lTd3hNQ2s2VG1GT2ZUdG5iMjluTG5OMGNtbHVaeTV6Y0d4cGRFeHBiV2wwUFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRoUFdFdWMzQnNhWFFvWWlrN1ptOXlLSFpoY2lCa1BWdGRPekE4WXlZbVlTNXNaVzVuZEdnN0tXUXVjSFZ6YUNoaExuTm9hV1owS0NrcExHTXRMVHRoTG14bGJtZDBhQ1ltWkM1d2RYTm9LR0V1YW05cGJpaGlLU2s3Y21WMGRYSnVJR1I5TzJkdmIyY3VjM1J5YVc1bkxteGhjM1JEYjIxd2IyNWxiblE5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWhpS1Z3aWMzUnlhVzVuWENJOVBYUjVjR1Z2WmlCaUppWW9ZajFiWWwwcE8yVnNjMlVnY21WMGRYSnVJR0U3Wm05eUtIWmhjaUJqUFMweExHUTlNRHRrUEdJdWJHVnVaM1JvTzJRckt5bHBaaWhjSWx3aUlUMWlXMlJkS1h0MllYSWdaVDFoTG14aGMzUkpibVJsZUU5bUtHSmJaRjBwTzJVK1l5WW1LR005WlNsOWNtVjBkWEp1TFRFOVBXTS9ZVHBoTG5Oc2FXTmxLR01yTVNsOU8xeHVaMjl2Wnk1emRISnBibWN1WldScGRFUnBjM1JoYm1ObFBXWjFibU4wYVc5dUtHRXNZaWw3ZG1GeUlHTTlXMTBzWkQxYlhUdHBaaWhoUFQxaUtYSmxkSFZ5YmlBd08ybG1LQ0ZoTG14bGJtZDBhSHg4SVdJdWJHVnVaM1JvS1hKbGRIVnliaUJOWVhSb0xtMWhlQ2hoTG14bGJtZDBhQ3hpTG14bGJtZDBhQ2s3Wm05eUtIWmhjaUJsUFRBN1pUeGlMbXhsYm1kMGFDc3hPMlVyS3lsalcyVmRQV1U3Wm05eUtHVTlNRHRsUEdFdWJHVnVaM1JvTzJVckt5bDdaRnN3WFQxbEt6RTdabTl5S0haaGNpQm1QVEE3Wmp4aUxteGxibWQwYUR0bUt5c3BaRnRtS3pGZFBVMWhkR2d1YldsdUtHUmJabDByTVN4alcyWXJNVjByTVN4alcyWmRLMDUxYldKbGNpaGhXMlZkSVQxaVcyWmRLU2s3Wm05eUtHWTlNRHRtUEdNdWJHVnVaM1JvTzJZckt5bGpXMlpkUFdSYlpsMTljbVYwZFhKdUlHUmJZaTVzWlc1bmRHaGRmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1WdVoybHVaVDE3ZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMxQnlaWE4wYnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pRY21WemRHOWNJaWw5TzJkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdVpXNW5hVzVsTG1selZISnBaR1Z1ZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pVY21sa1pXNTBYQ0lwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pOVTBsRlhDSXBmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1WdVoybHVaUzVwYzBWa1oyVTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtMWhkR05vVlhObGNrRm5aVzUwS0Z3aVJXUm5aVndpS1gwN1hHNW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNXBjMWRsWWt0cGREMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblJKWjI1dmNtVkRZWE5sS0Z3aVYyVmlTMmwwWENJcEppWWhaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVsYm1kcGJtVXVhWE5GWkdkbEtDbDlPMmR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Wlc1bmFXNWxMbWx6UjJWamEyODlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzUxZEdsc0xtMWhkR05vVlhObGNrRm5aVzUwS0Z3aVIyVmphMjljSWlrbUppRm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNXBjMWRsWWt0cGRDZ3BKaVloWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1bGJtZHBibVV1YVhOVWNtbGtaVzUwS0NrbUppRm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNXBjMFZrWjJVb0tYMDdYRzVuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1WdVoybHVaUzVuWlhSV1pYSnphVzl1UFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbWRsZEZWelpYSkJaMlZ1ZENncE8ybG1LR0VwZTJFOVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG1WNGRISmhZM1JXWlhKemFXOXVWSFZ3YkdWektHRXBPM1poY2lCaVBXZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVaVzVuYVc1bExtZGxkRVZ1WjJsdVpWUjFjR3hsWHloaEtUdHBaaWhpS1hKbGRIVnlibHdpUjJWamEyOWNJajA5WWxzd1hUOW5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNW5aWFJXWlhKemFXOXVSbTl5UzJWNVh5aGhMRndpUm1seVpXWnZlRndpS1RwaVd6RmRPMkU5WVZzd1hUdDJZWElnWXp0cFppaGhKaVlvWXoxaFd6SmRLU1ltS0dNOUwxUnlhV1JsYm5SY1hDOG9XMTVjWEhNN1hTc3BMeTVsZUdWaktHTXBLU2x5WlhSMWNtNGdZMXN4WFgxeVpYUjFjbTVjSWx3aWZUdGNibWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Wlc1bmFXNWxMbWRsZEVWdVoybHVaVlIxY0d4bFh6MW1kVzVqZEdsdmJpaGhLWHRwWmlnaFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWxibWRwYm1VdWFYTkZaR2RsS0NrcGNtVjBkWEp1SUdGYk1WMDdabTl5S0haaGNpQmlQVEE3WWp4aExteGxibWQwYUR0aUt5c3BlM1poY2lCalBXRmJZbDA3YVdZb1hDSkZaR2RsWENJOVBXTmJNRjBwY21WMGRYSnVJR045ZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExtVnVaMmx1WlM1cGMxWmxjbk5wYjI1UGNraHBaMmhsY2oxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z01EdzlaMjl2Wnk1emRISnBibWN1WTI5dGNHRnlaVlpsY25OcGIyNXpLR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Wlc1bmFXNWxMbWRsZEZabGNuTnBiMjRvS1N4aEtYMDdaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzVsYm1kcGJtVXVaMlYwVm1WeWMybHZia1p2Y2t0bGVWODlablZ1WTNScGIyNG9ZU3hpS1h0eVpYUjFjbTRvWVQxbmIyOW5MbUZ5Y21GNUxtWnBibVFvWVN4bWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lqMDlZVnN3WFgwcEtTWW1ZVnN4WFh4OFhDSmNJbjA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlQxN2ZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6UVc1a2NtOXBaRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkJibVJ5YjJsa1hDSXBmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNYQnZaRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSnBVRzlrWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1hCb2IyNWxQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0ltbFFhRzl1WlZ3aUtTWW1JV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0ltbFFiMlJjSWlrbUppRm5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMblYwYVd3dWJXRjBZMmhWYzJWeVFXZGxiblFvWENKcFVHRmtYQ0lwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTWEJoWkQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pwVUdGa1hDSXBmVHRjYm1kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWNHeGhkR1p2Y20wdWFYTkpiM005Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMwbHdhRzl1WlNncGZIeG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6U1hCaFpDZ3BmSHhuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNYQnZaQ2dwZlR0bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpUV0ZqYVc1MGIzTm9QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNXRZWFJqYUZWelpYSkJaMlZ1ZENoY0lrMWhZMmx1ZEc5emFGd2lLWDA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMweHBiblY0UFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRDaGNJa3hwYm5WNFhDSXBmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selYybHVaRzkzY3oxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pYYVc1a2IzZHpYQ0lwZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVhWE5EYUhKdmJXVlBVejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUJuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5WMGFXd3ViV0YwWTJoVmMyVnlRV2RsYm5Rb1hDSkRjazlUWENJcGZUdG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6UTJoeWIyMWxZMkZ6ZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuVjBhV3d1YldGMFkyaFZjMlZ5UVdkbGJuUW9YQ0pEY2t0bGVWd2lLWDA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMwdGhhVTlUUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdkdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWRYUnBiQzV0WVhSamFGVnpaWEpCWjJWdWRFbG5ibTl5WlVOaGMyVW9YQ0pMWVdsUFUxd2lLWDA3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMwZHZNbEJvYjI1bFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVkWFJwYkM1dFlYUmphRlZ6WlhKQloyVnVkRWxuYm05eVpVTmhjMlVvWENKSFFVWlFYQ0lwZlR0Y2JtZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVjR3hoZEdadmNtMHVaMlYwVm1WeWMybHZiajFtZFc1amRHbHZiaWdwZTNaaGNpQmhQV2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1ZFhScGJDNW5aWFJWYzJWeVFXZGxiblFvS1N4aVBWd2lYQ0k3WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMxZHBibVJ2ZDNNb0tUOG9ZajB2VjJsdVpHOTNjeUFvUHpwT1ZIeFFhRzl1WlNrZ0tGc3dMVGt1WFNzcEx5eGlQU2hoUFdJdVpYaGxZeWhoS1NrL1lWc3hYVHBjSWpBdU1Gd2lLVHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNXOXpLQ2svS0dJOUx5Zy9PbWxRYUc5dVpYeHBVRzlrZkdsUVlXUjhRMUJWS1Z4Y2N5dFBVMXhjY3lzb1hGeFRLeWt2TEdJOUtHRTlZaTVsZUdWaktHRXBLU1ltWVZzeFhTNXlaWEJzWVdObEtDOWZMMmNzWENJdVhDSXBLVHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selRXRmphVzUwYjNOb0tDay9LR0k5TDAxaFl5QlBVeUJZSUNoYk1DMDVYeTVkS3lrdkxHSTlLR0U5WWk1bGVHVmpLR0VwS1Q5aFd6RmRMbkpsY0d4aFkyVW9MMTh2Wnl4Y0lpNWNJaWs2WENJeE1Gd2lLVHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selMyRnBUMU1vS1Q4b1lqMHZLRDg2UzJGcFQxTXBYRnd2S0Z4Y1V5c3BMMmtzWEc1aVBTaGhQV0l1WlhobFl5aGhLU2ttSm1GYk1WMHBPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOQmJtUnliMmxrS0NrL0tHSTlMMEZ1WkhKdmFXUmNYSE1yS0Z0ZVhGd3BPMTByS1NoY1hDbDhPeWt2TEdJOUtHRTlZaTVsZUdWaktHRXBLU1ltWVZzeFhTazZaMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVwYzBOb2NtOXRaVTlUS0NrbUppaGlQUzhvUHpwRGNrOVRYRnh6S3lnL09tazJPRFo4ZURnMlh6WTBLVnhjY3lzb1d6QXRPUzVkS3lrcEx5eGlQU2hoUFdJdVpYaGxZeWhoS1NrbUptRmJNVjBwTzNKbGRIVnliaUJpZkh4Y0lsd2lmVHRuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selZtVnljMmx2Yms5eVNHbG5hR1Z5UFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlBd1BEMW5iMjluTG5OMGNtbHVaeTVqYjIxd1lYSmxWbVZ5YzJsdmJuTW9aMjl2Wnk1c1lXSnpMblZ6WlhKQloyVnVkQzV3YkdGMFptOXliUzVuWlhSV1pYSnphVzl1S0Nrc1lTbDlPMmR2YjJjdWNtVm1iR1ZqZEQxN2ZUdG5iMjluTG5KbFpteGxZM1F1YjJKcVpXTjBQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdKOU8yZHZiMmN1Y21WbWJHVmpkQzV2WW1wbFkzUlFjbTl3WlhKMGVUMW1kVzVqZEdsdmJpaGhMR0lwZTNKbGRIVnliaUJoZlR0bmIyOW5MbkpsWm14bFkzUXVjMmx1YTFaaGJIVmxQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VjbVZtYkdWamRDNXphVzVyVm1Gc2RXVmJYQ0lnWENKZEtHRXBPM0psZEhWeWJpQmhmVHRuYjI5bkxuSmxabXhsWTNRdWMybHVhMVpoYkhWbFcxd2lJRndpWFQxbmIyOW5MbTUxYkd4R2RXNWpkR2x2Ymp0bmIyOW5MbkpsWm14bFkzUXVZMkZ1UVdOalpYTnpVSEp2Y0dWeWRIazlablZ1WTNScGIyNG9ZU3hpS1h0MGNubDdjbVYwZFhKdUlHZHZiMmN1Y21WbWJHVmpkQzV6YVc1clZtRnNkV1VvWVZ0aVhTa3NJVEI5WTJGMFkyZ29ZeWw3ZlhKbGRIVnliaUV4ZlR0bmIyOW5MbkpsWm14bFkzUXVZMkZqYUdVOVpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN1pEMWtQMlFvWWlrNllqdHlaWFIxY200Z1QySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tHRXNaQ2svWVZ0a1hUcGhXMlJkUFdNb1lpbDlPMmR2YjJjdWRYTmxja0ZuWlc1MFBYdDlPMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlJUMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlJVUkhSVDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZSMFZEUzA4OUlURTdaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDFkRlFrdEpWRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZUVTlDU1V4RlgxZEZRa3RKVkQwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmVDFCRlVrRTlJVEU3WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwRk9XVjlXUlZKVFNVOU9QU0V4TzJkdmIyY3VkWE5sY2tGblpXNTBMa0pTVDFkVFJWSmZTMDVQVjA1ZlBXZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlKUlh4OFoyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMFZFUjBWOGZHZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlIUlVOTFQzeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDAxUFFrbE1SVjlYUlVKTFNWUjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5WFJVSkxTVlI4ZkdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOVBVRVZTUVR0bmIyOW5MblZ6WlhKQloyVnVkQzVuWlhSVmMyVnlRV2RsYm5SVGRISnBibWM5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1MWRHbHNMbWRsZEZWelpYSkJaMlZ1ZENncGZUdGNibWR2YjJjdWRYTmxja0ZuWlc1MExtZGxkRTVoZG1sbllYUnZjbFI1Y0dWa1BXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHZHZiMmN1WjJ4dlltRnNMbTVoZG1sbllYUnZjbng4Ym5Wc2JIMDdaMjl2Wnk1MWMyVnlRV2RsYm5RdVoyVjBUbUYyYVdkaGRHOXlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWRYTmxja0ZuWlc1MExtZGxkRTVoZG1sbllYUnZjbFI1Y0dWa0tDbDlPMmR2YjJjdWRYTmxja0ZuWlc1MExrOVFSVkpCUFdkdmIyY3VkWE5sY2tGblpXNTBMa0pTVDFkVFJWSmZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlQVUVWU1FUcG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbUp5YjNkelpYSXVhWE5QY0dWeVlTZ3BPMmR2YjJjdWRYTmxja0ZuWlc1MExrbEZQV2R2YjJjdWRYTmxja0ZuWlc1MExrSlNUMWRUUlZKZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpSVHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhOSlJTZ3BPMmR2YjJjdWRYTmxja0ZuWlc1MExrVkVSMFU5WjI5dlp5NTFjMlZ5UVdkbGJuUXVRbEpQVjFORlVsOUxUazlYVGw4L1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMFZFUjBVNloyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNWxibWRwYm1VdWFYTkZaR2RsS0NrN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1RlJFZEZYMDlTWDBsRlBXZHZiMmN1ZFhObGNrRm5aVzUwTGtWRVIwVjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrbEZPMmR2YjJjdWRYTmxja0ZuWlc1MExrZEZRMHRQUFdkdmIyY3VkWE5sY2tGblpXNTBMa0pTVDFkVFJWSmZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlIUlVOTFR6cG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbVZ1WjJsdVpTNXBjMGRsWTJ0dktDazdaMjl2Wnk1MWMyVnlRV2RsYm5RdVYwVkNTMGxVUFdkdmIyY3VkWE5sY2tGblpXNTBMa0pTVDFkVFJWSmZTMDVQVjA1ZlAyZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlYUlVKTFNWUjhmR2R2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5TlQwSkpURVZmVjBWQ1MwbFVPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Wlc1bmFXNWxMbWx6VjJWaVMybDBLQ2s3WjI5dlp5NTFjMlZ5UVdkbGJuUXVhWE5OYjJKcGJHVmZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWRYTmxja0ZuWlc1MExsZEZRa3RKVkNZbVoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNTFkR2xzTG0xaGRHTm9WWE5sY2tGblpXNTBLRndpVFc5aWFXeGxYQ0lwZlR0Y2JtZHZiMmN1ZFhObGNrRm5aVzUwTGsxUFFrbE1SVDFuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlRVOUNTVXhGWDFkRlFrdEpWSHg4WjI5dlp5NTFjMlZ5UVdkbGJuUXVhWE5OYjJKcGJHVmZLQ2s3WjI5dlp5NTFjMlZ5UVdkbGJuUXVVMEZHUVZKSlBXZHZiMmN1ZFhObGNrRm5aVzUwTGxkRlFrdEpWRHRuYjI5bkxuVnpaWEpCWjJWdWRDNWtaWFJsY20xcGJtVlFiR0YwWm05eWJWODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG5WelpYSkJaMlZ1ZEM1blpYUk9ZWFpwWjJGMGIzSlVlWEJsWkNncE8zSmxkSFZ5YmlCaEppWmhMbkJzWVhSbWIzSnRmSHhjSWx3aWZUdG5iMjluTG5WelpYSkJaMlZ1ZEM1UVRFRlVSazlTVFQxbmIyOW5MblZ6WlhKQloyVnVkQzVrWlhSbGNtMXBibVZRYkdGMFptOXliVjhvS1R0bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZUVUZEUFNFeE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlYU1U1RVQxZFRQU0V4TzJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOU1TVTVWV0QwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmV0RFeFBTRXhPMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5QlRrUlNUMGxFUFNFeE8yZHZiMmN1ZFhObGNrRm5aVzUwTGtGVFUxVk5SVjlKVUVoUFRrVTlJVEU3WEc1bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZTVkJCUkQwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmU1ZCUFJEMGhNVHRuYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlMwRkpUMU05SVRFN1oyOXZaeTUxYzJWeVFXZGxiblF1UVZOVFZVMUZYMGRQTWxCSVQwNUZQU0V4TzJkdmIyY3VkWE5sY2tGblpXNTBMbEJNUVZSR1QxSk5YMHRPVDFkT1h6MW5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmVFVGRGZIeG5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmVjBsT1JFOVhVM3g4WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgweEpUbFZZZkh4bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZXREV4Zkh4bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZRVTVFVWs5SlJIeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBsUVNFOU9SWHg4WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwbFFRVVI4ZkdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpVRTlFTzJkdmIyY3VkWE5sY2tGblpXNTBMazFCUXoxbmIyOW5MblZ6WlhKQloyVnVkQzVRVEVGVVJrOVNUVjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDAxQlF6cG5iMjluTG14aFluTXVkWE5sY2tGblpXNTBMbkJzWVhSbWIzSnRMbWx6VFdGamFXNTBiM05vS0NrN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1WFNVNUVUMWRUUFdkdmIyY3VkWE5sY2tGblpXNTBMbEJNUVZSR1QxSk5YMHRPVDFkT1h6OW5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmVjBsT1JFOVhVenBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selYybHVaRzkzY3lncE8yZHZiMmN1ZFhObGNrRm5aVzUwTG1selRHVm5ZV041VEdsdWRYaGZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOTWFXNTFlQ2dwZkh4bmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpRMmh5YjIxbFQxTW9LWDA3WjI5dlp5NTFjMlZ5UVdkbGJuUXVURWxPVlZnOVoyOXZaeTUxYzJWeVFXZGxiblF1VUV4QlZFWlBVazFmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5TVNVNVZXRHBuYjI5bkxuVnpaWEpCWjJWdWRDNXBjMHhsWjJGamVVeHBiblY0WHlncE8yZHZiMmN1ZFhObGNrRm5aVzUwTG1seldERXhYejFtZFc1amRHbHZiaWdwZTNaaGNpQmhQV2R2YjJjdWRYTmxja0ZuWlc1MExtZGxkRTVoZG1sbllYUnZjbFI1Y0dWa0tDazdjbVYwZFhKdUlTRmhKaVpuYjI5bkxuTjBjbWx1Wnk1amIyNTBZV2x1Y3loaExtRndjRlpsY25OcGIyNThmRndpWENJc1hDSllNVEZjSWlsOU8xeHVaMjl2Wnk1MWMyVnlRV2RsYm5RdVdERXhQV2R2YjJjdWRYTmxja0ZuWlc1MExsQk1RVlJHVDFKTlgwdE9UMWRPWHo5bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZXREV4T21kdmIyY3VkWE5sY2tGblpXNTBMbWx6V0RFeFh5Z3BPMmR2YjJjdWRYTmxja0ZuWlc1MExrRk9SRkpQU1VROVoyOXZaeTUxYzJWeVFXZGxiblF1VUV4QlZFWlBVazFmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5QlRrUlNUMGxFT21kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWNHeGhkR1p2Y20wdWFYTkJibVJ5YjJsa0tDazdaMjl2Wnk1MWMyVnlRV2RsYm5RdVNWQklUMDVGUFdkdmIyY3VkWE5sY2tGblpXNTBMbEJNUVZSR1QxSk5YMHRPVDFkT1h6OW5iMjluTG5WelpYSkJaMlZ1ZEM1QlUxTlZUVVZmU1ZCSVQwNUZPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOSmNHaHZibVVvS1R0bmIyOW5MblZ6WlhKQloyVnVkQzVKVUVGRVBXZHZiMmN1ZFhObGNrRm5aVzUwTGxCTVFWUkdUMUpOWDB0T1QxZE9YejluYjI5bkxuVnpaWEpCWjJWdWRDNUJVMU5WVFVWZlNWQkJSRHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG5Cc1lYUm1iM0p0TG1selNYQmhaQ2dwTzF4dVoyOXZaeTUxYzJWeVFXZGxiblF1U1ZCUFJEMW5iMjluTG5WelpYSkJaMlZ1ZEM1UVRFRlVSazlTVFY5TFRrOVhUbDgvWjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwbFFUMFE2WjI5dlp5NXNZV0p6TG5WelpYSkJaMlZ1ZEM1d2JHRjBabTl5YlM1cGMwbHdiMlFvS1R0bmIyOW5MblZ6WlhKQloyVnVkQzVKVDFNOVoyOXZaeTUxYzJWeVFXZGxiblF1VUV4QlZFWlBVazFmUzA1UFYwNWZQMmR2YjJjdWRYTmxja0ZuWlc1MExrRlRVMVZOUlY5SlVFaFBUa1Y4ZkdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpVRUZFZkh4bmIyOW5MblZ6WlhKQloyVnVkQzVCVTFOVlRVVmZTVkJQUkRwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTVzl6S0NrN1oyOXZaeTUxYzJWeVFXZGxiblF1UzBGSlQxTTlaMjl2Wnk1MWMyVnlRV2RsYm5RdVVFeEJWRVpQVWsxZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUxRVWxQVXpwbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTMkZwVDFNb0tUdG5iMjluTG5WelpYSkJaMlZ1ZEM1SFR6SlFTRTlPUlQxbmIyOW5MblZ6WlhKQloyVnVkQzVRVEVGVVJrOVNUVjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBkUE1sQklUMDVGT21kdmIyY3ViR0ZpY3k1MWMyVnlRV2RsYm5RdWNHeGhkR1p2Y20wdWFYTkhiekpRYUc5dVpTZ3BPMXh1WjI5dlp5NTFjMlZ5UVdkbGJuUXVaR1YwWlhKdGFXNWxWbVZ5YzJsdmJsODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMWNJbHdpTEdJOVoyOXZaeTUxYzJWeVFXZGxiblF1WjJWMFZtVnljMmx2YmxKbFoyVjRVbVZ6ZFd4MFh5Z3BPMkltSmloaFBXSS9ZbHN4WFRwY0lsd2lLVHR5WlhSMWNtNGdaMjl2Wnk1MWMyVnlRV2RsYm5RdVNVVW1KaWhpUFdkdmIyY3VkWE5sY2tGblpXNTBMbWRsZEVSdlkzVnRaVzUwVFc5a1pWOG9LU3h1ZFd4c0lUMWlKaVppUG5CaGNuTmxSbXh2WVhRb1lTa3BQMU4wY21sdVp5aGlLVHBoZlR0Y2JtZHZiMmN1ZFhObGNrRm5aVzUwTG1kbGRGWmxjbk5wYjI1U1pXZGxlRkpsYzNWc2RGODlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMW5iMjluTG5WelpYSkJaMlZ1ZEM1blpYUlZjMlZ5UVdkbGJuUlRkSEpwYm1jb0tUdHBaaWhuYjI5bkxuVnpaWEpCWjJWdWRDNUhSVU5MVHlseVpYUjFjbTR2Y25ZNktGdGVYRndwTzEwcktTaGNYQ2w4T3lrdkxtVjRaV01vWVNrN2FXWW9aMjl2Wnk1MWMyVnlRV2RsYm5RdVJVUkhSU2x5WlhSMWNtNHZSV1JuWlZ4Y0x5aGJYRnhrWEZ3dVhTc3BMeTVsZUdWaktHRXBPMmxtS0dkdmIyY3VkWE5sY2tGblpXNTBMa2xGS1hKbGRIVnliaTljWEdJb1B6cE5VMGxGZkhKMktWczZJRjBvVzE1Y1hDazdYU3NwS0Z4Y0tYdzdLUzh1WlhobFl5aGhLVHRwWmlobmIyOW5MblZ6WlhKQloyVnVkQzVYUlVKTFNWUXBjbVYwZFhKdUwxZGxZa3RwZEZ4Y0x5aGNYRk1yS1M4dVpYaGxZeWhoS1R0cFppaG5iMjluTG5WelpYSkJaMlZ1ZEM1UFVFVlNRU2x5WlhSMWNtNHZLRDg2Vm1WeWMybHZiaWxiSUZ4Y0wxMC9LRnhjVXlzcEx5NWxlR1ZqS0dFcGZUdG5iMjluTG5WelpYSkJaMlZ1ZEM1blpYUkViMk4xYldWdWRFMXZaR1ZmUFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5WjI5dlp5NW5iRzlpWVd3dVpHOWpkVzFsYm5RN2NtVjBkWEp1SUdFL1lTNWtiMk4xYldWdWRFMXZaR1U2ZG05cFpDQXdmVHRjYm1kdmIyY3VkWE5sY2tGblpXNTBMbFpGVWxOSlQwNDlaMjl2Wnk1MWMyVnlRV2RsYm5RdVpHVjBaWEp0YVc1bFZtVnljMmx2Ymw4b0tUdG5iMjluTG5WelpYSkJaMlZ1ZEM1amIyMXdZWEpsUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHZHZiMmN1YzNSeWFXNW5MbU52YlhCaGNtVldaWEp6YVc5dWN5aGhMR0lwZlR0bmIyOW5MblZ6WlhKQloyVnVkQzVwYzFabGNuTnBiMjVQY2tocFoyaGxja05oWTJobFh6MTdmVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXBjMVpsY25OcGIyNVBja2hwWjJobGNqMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdaMjl2Wnk1MWMyVnlRV2RsYm5RdVFWTlRWVTFGWDBGT1dWOVdSVkpUU1U5T2ZIeG5iMjluTG5KbFpteGxZM1F1WTJGamFHVW9aMjl2Wnk1MWMyVnlRV2RsYm5RdWFYTldaWEp6YVc5dVQzSklhV2RvWlhKRFlXTm9aVjhzWVN4bWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlBd1BEMW5iMjluTG5OMGNtbHVaeTVqYjIxd1lYSmxWbVZ5YzJsdmJuTW9aMjl2Wnk1MWMyVnlRV2RsYm5RdVZrVlNVMGxQVGl4aEtYMHBmVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXBjMVpsY25OcGIyNDlaMjl2Wnk1MWMyVnlRV2RsYm5RdWFYTldaWEp6YVc5dVQzSklhV2RvWlhJN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1cGMwUnZZM1Z0Wlc1MFRXOWtaVTl5U0dsbmFHVnlQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJPZFcxaVpYSW9aMjl2Wnk1MWMyVnlRV2RsYm5RdVJFOURWVTFGVGxSZlRVOUVSU2srUFdGOU8yZHZiMmN1ZFhObGNrRm5aVzUwTG1selJHOWpkVzFsYm5STmIyUmxQV2R2YjJjdWRYTmxja0ZuWlc1MExtbHpSRzlqZFcxbGJuUk5iMlJsVDNKSWFXZG9aWEk3WjI5dlp5NTFjMlZ5UVdkbGJuUXVSRTlEVlUxRlRsUmZUVTlFUlQxbWRXNWpkR2x2YmlncGUybG1LR2R2YjJjdVoyeHZZbUZzTG1SdlkzVnRaVzUwSmlabmIyOW5MblZ6WlhKQloyVnVkQzVKUlNseVpYUjFjbTRnWjI5dlp5NTFjMlZ5UVdkbGJuUXVaMlYwUkc5amRXMWxiblJOYjJSbFh5Z3BmU2dwTzJkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUTllMzA3WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNUJVMU5WVFVWZlJrbFNSVVpQV0QwaE1UdG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtGVFUxVk5SVjlKVUVoUFRrVTlJVEU3WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNUJVMU5WVFVWZlNWQkJSRDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa0ZUVTFWTlJWOUJUa1JTVDBsRVBTRXhPMmR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdVFWTlRWVTFGWDBOSVVrOU5SVDBoTVR0bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa0ZUVTFWTlJWOVRRVVpCVWtrOUlURTdYRzVuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExsQlNUMFJWUTFSZlMwNVBWMDVmUFdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOUpSWHg4WjI5dlp5NTFjMlZ5UVdkbGJuUXVRVk5UVlUxRlgwVkVSMFY4ZkdkdmIyY3VkWE5sY2tGblpXNTBMa0ZUVTFWTlJWOVBVRVZTUVh4OFoyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVCVTFOVlRVVmZSa2xTUlVaUFdIeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmU1ZCSVQwNUZmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5SlVFRkVmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5QlRrUlNUMGxFZkh4bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa0ZUVTFWTlJWOURTRkpQVFVWOGZHZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1UVZOVFZVMUZYMU5CUmtGU1NUdG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGs5UVJWSkJQV2R2YjJjdWRYTmxja0ZuWlc1MExrOVFSVkpCTzJkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVTVVU5WjI5dlp5NTFjMlZ5UVdkbGJuUXVTVVU3WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNUZSRWRGUFdkdmIyY3VkWE5sY2tGblpXNTBMa1ZFUjBVN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtaSlVrVkdUMWc5WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNVFVazlFVlVOVVgwdE9UMWRPWHo5bmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMa0ZUVTFWTlJWOUdTVkpGUms5WU9tZHZiMmN1YkdGaWN5NTFjMlZ5UVdkbGJuUXVZbkp2ZDNObGNpNXBjMFpwY21WbWIzZ29LVHRuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExtbHpTWEJvYjI1bFQzSkpjRzlrWHoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbmIyOW5MbXhoWW5NdWRYTmxja0ZuWlc1MExuQnNZWFJtYjNKdExtbHpTWEJvYjI1bEtDbDhmR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOSmNHOWtLQ2w5TzJkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVTVkJJVDA1RlBXZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1VUZKUFJGVkRWRjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmU1ZCSVQwNUZPbWR2YjJjdWRYTmxja0ZuWlc1MExuQnliMlIxWTNRdWFYTkpjR2h2Ym1WUGNrbHdiMlJmS0NrN1hHNW5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGtsUVFVUTlaMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1UVVrOUVWVU5VWDB0T1QxZE9YejluYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExrRlRVMVZOUlY5SlVFRkVPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1Y0d4aGRHWnZjbTB1YVhOSmNHRmtLQ2s3WjI5dlp5NTFjMlZ5UVdkbGJuUXVjSEp2WkhWamRDNUJUa1JTVDBsRVBXZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1VUZKUFJGVkRWRjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmUVU1RVVrOUpSRHBuYjI5bkxteGhZbk11ZFhObGNrRm5aVzUwTG1KeWIzZHpaWEl1YVhOQmJtUnliMmxrUW5KdmQzTmxjaWdwTzJkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVRMGhTVDAxRlBXZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1VUZKUFJGVkRWRjlMVGs5WFRsOC9aMjl2Wnk1MWMyVnlRV2RsYm5RdWNISnZaSFZqZEM1QlUxTlZUVVZmUTBoU1QwMUZPbWR2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzBOb2NtOXRaU2dwTzF4dVoyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVwYzFOaFptRnlhVVJsYzJ0MGIzQmZQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR2R2YjJjdWJHRmljeTUxYzJWeVFXZGxiblF1WW5KdmQzTmxjaTVwYzFOaFptRnlhU2dwSmlZaFoyOXZaeTVzWVdKekxuVnpaWEpCWjJWdWRDNXdiR0YwWm05eWJTNXBjMGx2Y3lncGZUdG5iMjluTG5WelpYSkJaMlZ1ZEM1d2NtOWtkV04wTGxOQlJrRlNTVDFuYjI5bkxuVnpaWEpCWjJWdWRDNXdjbTlrZFdOMExsQlNUMFJWUTFSZlMwNVBWMDVmUDJkdmIyY3VkWE5sY2tGblpXNTBMbkJ5YjJSMVkzUXVRVk5UVlUxRlgxTkJSa0ZTU1RwbmIyOW5MblZ6WlhKQloyVnVkQzV3Y205a2RXTjBMbWx6VTJGbVlYSnBSR1Z6YTNSdmNGOG9LVHRuYjI5bkxtTnllWEIwTG1KaGMyVTJORDE3ZlR0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1RVJVWkJWVXhVWDBGTVVFaEJRa1ZVWDBOUFRVMVBUbDg5WENKQlFrTkVSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV21GaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2TURFeU16UTFOamM0T1Z3aU8yZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExrVk9RMDlFUlVSZlZrRk1VejFuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVFUlVaQlZVeFVYMEZNVUVoQlFrVlVYME5QVFUxUFRsOHJYQ0lyTHoxY0lqdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUZUa05QUkVWRVgxWkJURk5mVjBWQ1UwRkdSVDFuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVFUlVaQlZVeFVYMEZNVUVoQlFrVlVYME5QVFUxUFRsOHJYQ0l0WHk1Y0lqdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUJiSEJvWVdKbGREMTdSRVZHUVZWTVZEb3dMRTVQWDFCQlJFUkpUa2M2TVN4WFJVSlRRVVpGT2pJc1YwVkNVMEZHUlY5RVQxUmZVRUZFUkVsT1J6b3pMRmRGUWxOQlJrVmZUazlmVUVGRVJFbE9Sem8wZlR0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1d1lXUmthVzVuUTJoaGNuTmZQVndpUFM1Y0lqdGNibWR2YjJjdVkzSjVjSFF1WW1GelpUWTBMbWx6VUdGa1pHbHVaMTg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdkdmIyY3VjM1J5YVc1bkxtTnZiblJoYVc1ektHZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExuQmhaR1JwYm1kRGFHRnljMThzWVNsOU8yZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtSjVkR1ZVYjBOb1lYSk5ZWEJ6WHoxN2ZUdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNWphR0Z5Vkc5Q2VYUmxUV0Z3WHoxdWRXeHNPMmR2YjJjdVkzSjVjSFF1WW1GelpUWTBMa0ZUVTFWTlJWOU9RVlJKVmtWZlUxVlFVRTlTVkY4OVoyOXZaeTUxYzJWeVFXZGxiblF1UjBWRFMwOThmR2R2YjJjdWRYTmxja0ZuWlc1MExsZEZRa3RKVkNZbUlXZHZiMmN1ZFhObGNrRm5aVzUwTG5CeWIyUjFZM1F1VTBGR1FWSkpmSHhuYjI5bkxuVnpaWEpCWjJWdWRDNVBVRVZTUVR0bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1SVFWTmZUa0ZVU1ZaRlgwVk9RMDlFUlY4OVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVFWTlRWVTFGWDA1QlZFbFdSVjlUVlZCUVQxSlVYM3g4WENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1oyOXZaeTVuYkc5aVlXd3VZblJ2WVR0Y2JtZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExraEJVMTlPUVZSSlZrVmZSRVZEVDBSRlh6MW5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUJVMU5WVFVWZlRrRlVTVlpGWDFOVlVGQlBVbFJmZkh3aFoyOXZaeTUxYzJWeVFXZGxiblF1Y0hKdlpIVmpkQzVUUVVaQlVra21KaUZuYjI5bkxuVnpaWEpCWjJWdWRDNUpSU1ltWENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1oyOXZaeTVuYkc5aVlXd3VZWFJ2WWp0Y2JtZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtVnVZMjlrWlVKNWRHVkJjbkpoZVQxbWRXNWpkR2x2YmloaExHSXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWjI5dlp5NXBjMEZ5Y21GNVRHbHJaU2hoS1N4Y0ltVnVZMjlrWlVKNWRHVkJjbkpoZVNCMFlXdGxjeUJoYmlCaGNuSmhlU0JoY3lCaElIQmhjbUZ0WlhSbGNsd2lLVHQyYjJsa0lEQTlQVDFpSmlZb1lqMW5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNUJiSEJvWVdKbGRDNUVSVVpCVlV4VUtUdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNXBibWwwWHlncE8ySTlaMjl2Wnk1amNubHdkQzVpWVhObE5qUXVZbmwwWlZSdlEyaGhjazFoY0hOZlcySmRPMlp2Y2loMllYSWdZejFiWFN4a1BUQTdaRHhoTG14bGJtZDBhRHRrS3owektYdDJZWElnWlQxaFcyUmRMR1k5WkNzeFBHRXViR1Z1WjNSb0xHYzlaajloVzJRck1WMDZNQ3hvUFdRck1qeGhMbXhsYm1kMGFDeHJQV2cvWVZ0a0t6SmRPakFzYkQxbFBqNHlPMlU5S0dVbU15azhQRFI4Wno0K05EdG5QU2huSmpFMUtUdzhNbnhyUGo0Mk8yc21QVFl6TzJoOGZDaHJQVFkwTEdaOGZDaG5QVFkwS1NrN1l5NXdkWE5vS0dKYmJGMHNZbHRsWFN4aVcyZGRmSHhjSWx3aUxHSmJhMTE4ZkZ3aVhDSXBmWEpsZEhWeWJpQmpMbXB2YVc0b1hDSmNJaWw5TzF4dVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdVpXNWpiMlJsVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdkdmIyY3VZM0o1Y0hRdVltRnpaVFkwTGtoQlUxOU9RVlJKVmtWZlJVNURUMFJGWHlZbUlXSS9aMjl2Wnk1bmJHOWlZV3d1WW5SdllTaGhLVHBuYjI5bkxtTnllWEIwTG1KaGMyVTJOQzVsYm1OdlpHVkNlWFJsUVhKeVlYa29aMjl2Wnk1amNubHdkQzV6ZEhKcGJtZFViMEo1ZEdWQmNuSmhlU2hoS1N4aUtYMDdaMjl2Wnk1amNubHdkQzVpWVhObE5qUXVaR1ZqYjJSbFUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvWjI5dlp5NWpjbmx3ZEM1aVlYTmxOalF1U0VGVFgwNUJWRWxXUlY5RVJVTlBSRVZmSmlZaFlpbHlaWFIxY200Z1oyOXZaeTVuYkc5aVlXd3VZWFJ2WWloaEtUdDJZWElnWXoxY0lsd2lPMmR2YjJjdVkzSjVjSFF1WW1GelpUWTBMbVJsWTI5a1pWTjBjbWx1WjBsdWRHVnlibUZzWHloaExHWjFibU4wYVc5dUtHRXBlMk1yUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1lTbDlLVHR5WlhSMWNtNGdZMzA3WEc1bmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1a1pXTnZaR1ZUZEhKcGJtZFViMEo1ZEdWQmNuSmhlVDFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFZ0ZE8yZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtUmxZMjlrWlZOMGNtbHVaMGx1ZEdWeWJtRnNYeWhoTEdaMWJtTjBhVzl1S0dFcGUyTXVjSFZ6YUNoaEtYMHBPM0psZEhWeWJpQmpmVHRjYm1kdmIyY3VZM0o1Y0hRdVltRnpaVFkwTG1SbFkyOWtaVk4wY21sdVoxUnZWV2x1ZERoQmNuSmhlVDFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtDRm5iMjluTG5WelpYSkJaMlZ1ZEM1SlJYeDhaMjl2Wnk1MWMyVnlRV2RsYm5RdWFYTldaWEp6YVc5dVQzSklhV2RvWlhJb1hDSXhNRndpS1N4Y0lrSnliM2R6WlhJZ1pHOWxjeUJ1YjNRZ2MzVndjRzl5ZENCMGVYQmxaQ0JoY25KaGVYTmNJaWs3ZG1GeUlHSTlZUzVzWlc1bmRHZ3NZejB6S21Jdk5EdGpKVE0vWXoxTllYUm9MbVpzYjI5eUtHTXBPbWR2YjJjdVkzSjVjSFF1WW1GelpUWTBMbWx6VUdGa1pHbHVaMThvWVZ0aUxURmRLU1ltS0dNOVoyOXZaeTVqY25sd2RDNWlZWE5sTmpRdWFYTlFZV1JrYVc1blh5aGhXMkl0TWwwcFAyTXRNanBqTFRFcE8zWmhjaUJrUFc1bGR5QlZhVzUwT0VGeWNtRjVLR01wTEdVOU1EdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNWtaV052WkdWVGRISnBibWRKYm5SbGNtNWhiRjhvWVN4bWRXNWpkR2x2YmloaEtYdGtXMlVySzEwOVlYMHBPM0psZEhWeWJpQmtMbk4xWW1GeWNtRjVLREFzWlNsOU8xeHVaMjl2Wnk1amNubHdkQzVpWVhObE5qUXVaR1ZqYjJSbFUzUnlhVzVuU1c1MFpYSnVZV3hmUFdaMWJtTjBhVzl1S0dFc1lpbDdablZ1WTNScGIyNGdZeWhpS1h0bWIzSW9PMlE4WVM1c1pXNW5kR2c3S1h0MllYSWdZejFoTG1Ob1lYSkJkQ2hrS3lzcExHVTlaMjl2Wnk1amNubHdkQzVpWVhObE5qUXVZMmhoY2xSdlFubDBaVTFoY0Y5YlkxMDdhV1lvYm5Wc2JDRTlaU2x5WlhSMWNtNGdaVHRwWmlnaFoyOXZaeTV6ZEhKcGJtY3VhWE5GYlhCMGVVOXlWMmhwZEdWemNHRmpaU2hqS1NsMGFISnZkeUJGY25KdmNpaGNJbFZ1YTI1dmQyNGdZbUZ6WlRZMElHVnVZMjlrYVc1bklHRjBJR05vWVhJNklGd2lLMk1wTzMxeVpYUjFjbTRnWW4xbmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1cGJtbDBYeWdwTzJadmNpaDJZWElnWkQwd096c3BlM1poY2lCbFBXTW9MVEVwTEdZOVl5Z3dLU3huUFdNb05qUXBMR2c5WXlnMk5DazdhV1lvTmpROVBUMW9KaVl0TVQwOVBXVXBZbkpsWVdzN1lpaGxQRHd5ZkdZK1BqUXBPelkwSVQxbkppWW9ZaWhtUER3MEpqSTBNSHhuUGo0eUtTdzJOQ0U5YUNZbVlpaG5QRHcySmpFNU1ueG9LU2w5ZlR0Y2JtZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtbHVhWFJmUFdaMWJtTjBhVzl1S0NsN2FXWW9JV2R2YjJjdVkzSjVjSFF1WW1GelpUWTBMbU5vWVhKVWIwSjVkR1ZOWVhCZktYdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNWphR0Z5Vkc5Q2VYUmxUV0Z3WHoxN2ZUdG1iM0lvZG1GeUlHRTlaMjl2Wnk1amNubHdkQzVpWVhObE5qUXVSRVZHUVZWTVZGOUJURkJJUVVKRlZGOURUMDFOVDA1ZkxuTndiR2wwS0Z3aVhDSXBMR0k5VzF3aUt5ODlYQ0lzWENJckwxd2lMRndpTFY4OVhDSXNYQ0l0WHk1Y0lpeGNJaTFmWENKZExHTTlNRHMxUG1NN1l5c3JLWHQyWVhJZ1pEMWhMbU52Ym1OaGRDaGlXMk5kTG5Od2JHbDBLRndpWENJcEtUdG5iMjluTG1OeWVYQjBMbUpoYzJVMk5DNWllWFJsVkc5RGFHRnlUV0Z3YzE5YlkxMDlaRHRtYjNJb2RtRnlJR1U5TUR0bFBHUXViR1Z1WjNSb08yVXJLeWw3ZG1GeUlHWTlaRnRsWFN4blBXZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtTm9ZWEpVYjBKNWRHVk5ZWEJmVzJaZE8zWnZhV1FnTUQwOVBXYy9aMjl2Wnk1amNubHdkQzVpWVhObE5qUXVZMmhoY2xSdlFubDBaVTFoY0Y5YlpsMDlaVHBuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0djOVBUMWxLWDE5ZlgwN2FuTndZaTUxZEdsc2N6MTdmVHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjOU1EdHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvUFRBN2FuTndZaTUxZEdsc2N5NXpjR3hwZEZWcGJuUTJORDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajFoUGo0K01EdGhQVTFoZEdndVpteHZiM0lvS0dFdFlpa3Zhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek15S1Q0K1BqQTdhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzUFdJN2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hRDFoZlR0cWMzQmlMblYwYVd4ekxuTndiR2wwU1c1ME5qUTlablZ1WTNScGIyNG9ZU2w3ZG1GeUlHSTlNRDVoTzJFOVRXRjBhQzVoWW5Nb1lTazdkbUZ5SUdNOVlUNCtQakE3WVQxTllYUm9MbVpzYjI5eUtDaGhMV01wTDJwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1pazdZVDQrUGowd08ySW1KaWhoUFg1aFBqNCtNQ3hqUFNoK1l6NCtQakFwS3pFc05ESTVORGsyTnpJNU5UeGpKaVlvWXowd0xHRXJLeXcwTWprME9UWTNNamsxUEdFbUppaGhQVEFwS1NrN2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQV003YW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFEMWhmVHRjYm1wemNHSXVkWFJwYkhNdWMzQnNhWFJhYVdkNllXYzJORDFtZFc1amRHbHZiaWhoS1h0MllYSWdZajB3UG1FN1lUMHlLazFoZEdndVlXSnpLR0VwTzJwemNHSXVkWFJwYkhNdWMzQnNhWFJWYVc1ME5qUW9ZU2s3WVQxcWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzYzdkbUZ5SUdNOWFuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hRHRpSmlZb01EMDlZVDh3UFQxalAyTTlZVDAwTWprME9UWTNNamsxT2loakxTMHNZVDAwTWprME9UWTNNamsxS1RwaExTMHBPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHoxaE8ycHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc5WTMwN1hHNXFjM0JpTG5WMGFXeHpMbk53YkdsMFJteHZZWFF6TWoxbWRXNWpkR2x2YmloaEtYdDJZWElnWWowd1BtRS9NVG93TzJFOVlqOHRZVHBoTzJsbUtEQTlQVDFoS1RBOE1TOWhQeWhxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb1BUQXNhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzUFRBcE9paHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvUFRBc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQVEl4TkRjME9ETTJORGdwTzJWc2MyVWdhV1lvYVhOT1lVNG9ZU2twYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwU0dsbmFEMHdMR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHoweU1UUTNORGd6TmpRM08yVnNjMlVnYVdZb1lUNXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZETXlYMDFCV0NscWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9QVEFzYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BTaGlQRHd6TVh3eU1UTTVNRGsxTURRd0tUNCtQakE3Wld4elpTQnBaaWhoUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrWk1UMEZVTXpKZlRVbE9LV0U5VFdGMGFDNXliM1Z1WkNoaEwwMWhkR2d1Y0c5M0tESXNMVEUwT1NrcExHcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc5TUN4cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzYzlLR0k4UERNeGZGeHVZU2srUGo0d08yVnNjMlY3ZG1GeUlHTTlUV0YwYUM1bWJHOXZjaWhOWVhSb0xteHZaeWhoS1M5TllYUm9Ma3hPTWlrN1lTbzlUV0YwYUM1d2IzY29NaXd0WXlrN1lUMU5ZWFJvTG5KdmRXNWtLR0VxYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpJektTWTRNemc0TmpBM08ycHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc5TUR0cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzYzlLR0k4UERNeGZHTXJNVEkzUER3eU0zeGhLVDQrUGpCOWZUdGNibXB6Y0dJdWRYUnBiSE11YzNCc2FYUkdiRzloZERZMFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBUQStZVDh4T2pBN1lUMWlQeTFoT21FN2FXWW9NRDA5UFdFcGFuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hRDB3UERFdllUOHdPakl4TkRjME9ETTJORGdzYW5Od1lpNTFkR2xzY3k1emNHeHBkRFkwVEc5M1BUQTdaV3h6WlNCcFppaHBjMDVoVGloaEtTbHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvUFRJeE5EYzBPRE0yTkRjc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQVFF5T1RRNU5qY3lPVFU3Wld4elpTQnBaaWhoUG1wemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrWk1UMEZVTmpSZlRVRllLV3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORWhwWjJnOUtHSThQRE14ZkRJeE5EWTBNelV3TnpJcFBqNCtNQ3hxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjOU1EdGxiSE5sSUdsbUtHRThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11Umt4UFFWUTJORjlOU1U0cGUzWmhjaUJqUFdFdlRXRjBhQzV3YjNjb01pd3RNVEEzTkNrN1lUMWpMMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWp0cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9QU2hpUER3ek1YeGhLVDQrUGpBN2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNQV00rUGo0d2ZXVnNjMlY3WXoxY2JtRTdkbUZ5SUdROU1EdHBaaWd5UEQxaktXWnZjaWc3TWp3OVl5WW1NVEF5TXo1a095bGtLeXNzWXk4OU1qdGxiSE5sSUdadmNpZzdNVDVqSmlZdE1UQXlNanhrT3lsaktqMHlMR1F0TFR0alBXRXFUV0YwYUM1d2IzY29NaXd0WkNrN1lUMWpLbXB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh5TUNZeE1EUTROVGMxTzJNOVl5cHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZOVEkrUGo0d08ycHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc5S0dJOFBETXhmR1FyTVRBeU16dzhNakI4WVNrK1BqNHdPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHoxamZYMDdYRzVxYzNCaUxuVjBhV3h6TG5Od2JHbDBTR0Z6YURZMFBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRXVZMmhoY2tOdlpHVkJkQ2d3S1N4alBXRXVZMmhoY2tOdlpHVkJkQ2d4S1N4a1BXRXVZMmhoY2tOdlpHVkJkQ2d5S1N4bFBXRXVZMmhoY2tOdlpHVkJkQ2d6S1N4bVBXRXVZMmhoY2tOdlpHVkJkQ2cwS1N4blBXRXVZMmhoY2tOdlpHVkJkQ2cxS1N4b1BXRXVZMmhoY2tOdlpHVkJkQ2cyS1R0aFBXRXVZMmhoY2tOdlpHVkJkQ2czS1R0cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzYzlZaXNvWXp3OE9Da3JLR1E4UERFMktTc29aVHc4TWpRcFBqNCtNRHRxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb1BXWXJLR2M4UERncEt5aG9QRHd4TmlrcktHRThQREkwS1Q0K1BqQjlPMnB6Y0dJdWRYUnBiSE11YW05cGJsVnBiblEyTkQxbWRXNWpkR2x2YmloaExHSXBlM0psZEhWeWJpQmlLbXB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlzb1lUNCtQakFwZlR0Y2JtcHpjR0l1ZFhScGJITXVhbTlwYmtsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2RtRnlJR005WWlZeU1UUTNORGd6TmpRNE8yTW1KaWhoUFg1aEt6RStQajR3TEdJOWZtSStQajR3TERBOVBXRW1KaWhpUFdJck1UNCtQakFwS1R0aFBXcHpjR0l1ZFhScGJITXVhbTlwYmxWcGJuUTJOQ2hoTEdJcE8zSmxkSFZ5YmlCalB5MWhPbUY5TzJwemNHSXVkWFJwYkhNdWRHOWFhV2Q2WVdjMk5EMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5WWo0K016RTdjbVYwZFhKdUlHTW9ZVHc4TVY1a0xDaGlQRHd4ZkdFK1BqNHpNU2xlWkNsOU8ycHpjR0l1ZFhScGJITXVhbTlwYmxwcFozcGhaelkwUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHcHpjR0l1ZFhScGJITXVabkp2YlZwcFozcGhaelkwS0dFc1lpeHFjM0JpTG5WMGFXeHpMbXB2YVc1SmJuUTJOQ2w5TzJwemNHSXVkWFJwYkhNdVpuSnZiVnBwWjNwaFp6WTBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDJZWElnWkQwdEtHRW1NU2s3Y21WMGRYSnVJR01vS0dFK1BqNHhmR0k4UERNeEtWNWtMR0krUGo0eFhtUXBmVHRjYm1wemNHSXVkWFJwYkhNdWFtOXBia1pzYjJGME16STlablZ1WTNScGIyNG9ZU3hpS1h0aVBUSXFLR0UrUGpNeEtTc3hPM1poY2lCalBXRStQajR5TXlZeU5UVTdZU1k5T0RNNE9EWXdOenR5WlhSMWNtNGdNalUxUFQxalAyRS9UbUZPT2tsdVptbHVhWFI1S21JNk1EMDlZejlpS2sxaGRHZ3VjRzkzS0RJc0xURTBPU2txWVRwaUtrMWhkR2d1Y0c5M0tESXNZeTB4TlRBcEtpaGhLMDFoZEdndWNHOTNLRElzTWpNcEtYMDdhbk53WWk1MWRHbHNjeTVxYjJsdVJteHZZWFEyTkQxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBUSXFLR0krUGpNeEtTc3hMR1E5WWo0K1BqSXdKakl3TkRjN1lUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNeklxS0dJbU1UQTBPRFUzTlNrcllUdHlaWFIxY200Z01qQTBOejA5WkQ5aFAwNWhUanBKYm1acGJtbDBlU3BqT2pBOVBXUS9ZeXBOWVhSb0xuQnZkeWd5TEMweE1EYzBLU3BoT21NcVRXRjBhQzV3YjNjb01peGtMVEV3TnpVcEtpaGhLMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTgxTWlsOU8xeHVhbk53WWk1MWRHbHNjeTVxYjJsdVNHRnphRFkwUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlGTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9ZVDQrUGpBbU1qVTFMR0UrUGo0NEpqSTFOU3hoUGo0K01UWW1NalUxTEdFK1BqNHlOQ1l5TlRVc1lqNCtQakFtTWpVMUxHSStQajQ0SmpJMU5TeGlQajQrTVRZbU1qVTFMR0krUGo0eU5DWXlOVFVwZlR0cWMzQmlMblYwYVd4ekxrUkpSMGxVVXoxY0lqQXhNak0wTlRZM09EbGhZbU5rWldaY0lpNXpjR3hwZENoY0lsd2lLVHRxYzNCaUxuVjBhV3h6TGxwRlVrOWZRMGhCVWw5RFQwUkZYejAwT0R0cWMzQmlMblYwYVd4ekxrRmZRMGhCVWw5RFQwUkZYejA1Tnp0Y2JtcHpjR0l1ZFhScGJITXVhbTlwYmxWdWMybG5ibVZrUkdWamFXMWhiRk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lwZTJaMWJtTjBhVzl1SUdNb1lTeGlLWHRoUFdFL1UzUnlhVzVuS0dFcE9sd2lYQ0k3Y21WMGRYSnVJR0kvWENJd01EQXdNREF3WENJdWMyeHBZMlVvWVM1c1pXNW5kR2dwSzJFNllYMXBaaWd5TURrM01UVXhQajFpS1hKbGRIVnlibHdpWENJcmFuTndZaTUxZEdsc2N5NXFiMmx1VldsdWREWTBLR0VzWWlrN2RtRnlJR1E5S0dFK1BqNHlOSHhpUER3NEtUNCtQakFtTVRZM056Y3lNVFU3WWoxaVBqNHhOaVkyTlRVek5UdGhQU2hoSmpFMk56YzNNakUxS1NzMk56YzNNakUyS21Rck5qY3hNRFkxTmlwaU8yUXJQVGd4TkRjME9UY3FZanRpS2oweU96RkZOenc5WVNZbUtHUXJQVTFoZEdndVpteHZiM0lvWVM4eFJUY3BMR0VsUFRGRk55azdNVVUzUEQxa0ppWW9ZaXM5VFdGMGFDNW1iRzl2Y2loa0x6RkZOeWtzWkNVOU1VVTNLVHR5WlhSMWNtNGdZeWhpTERBcEsyTW9aQ3hpS1N0aktHRXNNU2w5TzF4dWFuTndZaTUxZEdsc2N5NXFiMmx1VTJsbmJtVmtSR1ZqYVcxaGJGTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBXSW1NakUwTnpRNE16WTBPRHRqSmlZb1lUMStZU3N4UGo0K01DeGlQWDVpS3lnd1BUMWhQekU2TUNrK1BqNHdLVHRoUFdwemNHSXVkWFJwYkhNdWFtOXBibFZ1YzJsbmJtVmtSR1ZqYVcxaGJGTjBjbWx1WnloaExHSXBPM0psZEhWeWJpQmpQMXdpTFZ3aUsyRTZZWDA3YW5Od1lpNTFkR2xzY3k1b1lYTm9OalJVYjBSbFkybHRZV3hUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0cWMzQmlMblYwYVd4ekxuTndiR2wwU0dGemFEWTBLR0VwTzJFOWFuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNPM1poY2lCalBXcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FaHBaMmc3Y21WMGRYSnVJR0kvYW5Od1lpNTFkR2xzY3k1cWIybHVVMmxuYm1Wa1JHVmphVzFoYkZOMGNtbHVaeWhoTEdNcE9tcHpjR0l1ZFhScGJITXVhbTlwYmxWdWMybG5ibVZrUkdWamFXMWhiRk4wY21sdVp5aGhMR01wZlR0Y2JtcHpjR0l1ZFhScGJITXVhR0Z6YURZMFFYSnlZWGxVYjBSbFkybHRZV3hUZEhKcGJtZHpQV1oxYm1OMGFXOXVLR0VzWWlsN1ptOXlLSFpoY2lCalBVRnljbUY1S0dFdWJHVnVaM1JvS1N4a1BUQTdaRHhoTG14bGJtZDBhRHRrS3lzcFkxdGtYVDFxYzNCaUxuVjBhV3h6TG1oaGMyZzJORlJ2UkdWamFXMWhiRk4wY21sdVp5aGhXMlJkTEdJcE8zSmxkSFZ5YmlCamZUdGNibXB6Y0dJdWRYUnBiSE11WkdWamFXMWhiRk4wY21sdVoxUnZTR0Z6YURZMFBXWjFibU4wYVc5dUtHRXBlMloxYm1OMGFXOXVJR0lvWVN4aUtYdG1iM0lvZG1GeUlHTTlNRHM0UG1NbUppZ3hJVDA5WVh4OE1EeGlLVHRqS3lzcFlqMWhLbVZiWTEwcllpeGxXMk5kUFdJbU1qVTFMR0krUGo0OU9IMW1kVzVqZEdsdmJpQmpLQ2w3Wm05eUtIWmhjaUJoUFRBN09ENWhPMkVyS3lsbFcyRmRQWDVsVzJGZEpqSTFOWDFuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFlTNXNaVzVuZEdncE8zWmhjaUJrUFNFeE8xd2lMVndpUFQwOVlWc3dYU1ltS0dROUlUQXNZVDFoTG5Oc2FXTmxLREVwS1R0bWIzSW9kbUZ5SUdVOVd6QXNNQ3d3TERBc01Dd3dMREFzTUYwc1pqMHdPMlk4WVM1c1pXNW5kR2c3WmlzcktXSW9NVEFzWVM1amFHRnlRMjlrWlVGMEtHWXBMV3B6Y0dJdWRYUnBiSE11V2tWU1QxOURTRUZTWDBOUFJFVmZLVHRrSmlZb1l5Z3BMR0lvTVN3eEtTazdjbVYwZFhKdUlHZHZiMmN1WTNKNWNIUXVZbmwwWlVGeWNtRjVWRzlUZEhKcGJtY29aU2w5TzJwemNHSXVkWFJwYkhNdWMzQnNhWFJFWldOcGJXRnNVM1J5YVc1blBXWjFibU4wYVc5dUtHRXBlMnB6Y0dJdWRYUnBiSE11YzNCc2FYUklZWE5vTmpRb2FuTndZaTUxZEdsc2N5NWtaV05wYldGc1UzUnlhVzVuVkc5SVlYTm9OalFvWVNrcGZUdGNibXB6Y0dJdWRYUnBiSE11ZEc5SVpYaEVhV2RwZEY4OVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlGTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9NVEErWVQ5cWMzQmlMblYwYVd4ekxscEZVazlmUTBoQlVsOURUMFJGWHl0aE9tcHpjR0l1ZFhScGJITXVRVjlEU0VGU1gwTlBSRVZmTFRFd0syRXBmVHRxYzNCaUxuVjBhV3h6TG1aeWIyMUlaWGhEYUdGeVEyOWtaVjg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUdFK1BXcHpjR0l1ZFhScGJITXVRVjlEU0VGU1gwTlBSRVZmUDJFdGFuTndZaTUxZEdsc2N5NUJYME5JUVZKZlEwOUVSVjhyTVRBNllTMXFjM0JpTG5WMGFXeHpMbHBGVWs5ZlEwaEJVbDlEVDBSRlgzMDdhbk53WWk1MWRHbHNjeTVvWVhOb05qUlViMGhsZUZOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0MllYSWdZajFCY25KaGVTZ3hPQ2s3WWxzd1hUMWNJakJjSWp0aVd6RmRQVndpZUZ3aU8yWnZjaWgyWVhJZ1l6MHdPemcrWXp0akt5c3BlM1poY2lCa1BXRXVZMmhoY2tOdlpHVkJkQ2czTFdNcE8ySmJNaXBqS3pKZFBXcHpjR0l1ZFhScGJITXVkRzlJWlhoRWFXZHBkRjhvWkQ0K05DazdZbHN5S21Nck0xMDlhbk53WWk1MWRHbHNjeTUwYjBobGVFUnBaMmwwWHloa0pqRTFLWDF5WlhSMWNtNGdZaTVxYjJsdUtGd2lYQ0lwZlR0Y2JtcHpjR0l1ZFhScGJITXVhR1Y0VTNSeWFXNW5WRzlJWVhOb05qUTlablZ1WTNScGIyNG9ZU2w3WVQxaExuUnZURzkzWlhKRFlYTmxLQ2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENneE9EMDlZUzVzWlc1bmRHZ3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWENJd1hDSTlQV0ZiTUYwcE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9YQ0o0WENJOVBXRmJNVjBwTzJadmNpaDJZWElnWWoxY0lsd2lMR005TURzNFBtTTdZeXNyS1h0MllYSWdaRDFxYzNCaUxuVjBhV3h6TG1aeWIyMUlaWGhEYUdGeVEyOWtaVjhvWVM1amFHRnlRMjlrWlVGMEtESXFZeXN5S1Nrc1pUMXFjM0JpTG5WMGFXeHpMbVp5YjIxSVpYaERhR0Z5UTI5a1pWOG9ZUzVqYUdGeVEyOWtaVUYwS0RJcVl5c3pLU2s3WWoxVGRISnBibWN1Wm5KdmJVTm9ZWEpEYjJSbEtERTJLbVFyWlNrclluMXlaWFIxY200Z1luMDdYRzVxYzNCaUxuVjBhV3h6TG1oaGMyZzJORlJ2VG5WdFltVnlQV1oxYm1OMGFXOXVLR0VzWWlsN2FuTndZaTUxZEdsc2N5NXpjR3hwZEVoaGMyZzJOQ2hoS1R0aFBXcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkenQyWVhJZ1l6MXFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvTzNKbGRIVnliaUJpUDJwemNHSXVkWFJwYkhNdWFtOXBia2x1ZERZMEtHRXNZeWs2YW5Od1lpNTFkR2xzY3k1cWIybHVWV2x1ZERZMEtHRXNZeWw5TzJwemNHSXVkWFJwYkhNdWJuVnRZbVZ5Vkc5SVlYTm9OalE5Wm5WdVkzUnBiMjRvWVNsN2FuTndZaTUxZEdsc2N5NXpjR3hwZEVsdWREWTBLR0VwTzNKbGRIVnliaUJxYzNCaUxuVjBhV3h6TG1wdmFXNUlZWE5vTmpRb2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFRHOTNMR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORWhwWjJncGZUdHFjM0JpTG5WMGFXeHpMbU52ZFc1MFZtRnlhVzUwY3oxbWRXNWpkR2x2YmloaExHSXNZeWw3Wm05eUtIWmhjaUJrUFRBc1pUMWlPMlU4WXp0bEt5c3BaQ3M5WVZ0bFhUNCtOenR5WlhSMWNtNGdZeTFpTFdSOU8xeHVhbk53WWk1MWRHbHNjeTVqYjNWdWRGWmhjbWx1ZEVacFpXeGtjejFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHQyWVhJZ1pUMHdPMlE5T0Nwa0sycHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZEdHBaaWd4TWpnK1pDbG1iM0lvTzJJOFl5WW1ZVnRpS3l0ZFBUMWtPeWxtYjNJb1pTc3JPenNwZTNaaGNpQm1QV0ZiWWlzclhUdHBaaWd3UFQwb1ppWXhNamdwS1dKeVpXRnJmV1ZzYzJVZ1ptOXlLRHRpUEdNN0tYdG1iM0lvWmoxa096RXlPRHhtT3lsN2FXWW9ZVnRpWFNFOUtHWW1NVEkzZkRFeU9Da3BjbVYwZFhKdUlHVTdZaXNyTzJZK1BqMDNmV2xtS0dGYllpc3JYU0U5WmlsaWNtVmhhenRtYjNJb1pTc3JPMlk5WVZ0aUt5dGRMREFoUFNobUpqRXlPQ2s3S1R0OWNtVjBkWEp1SUdWOU8ycHpjR0l1ZFhScGJITXVZMjkxYm5SR2FYaGxaRVpwWld4a2MxODlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxLWHQyWVhJZ1pqMHdPMmxtS0RFeU9ENWtLV1p2Y2lnN1lqeGpKaVpoVzJJcksxMDlQV1E3S1dZckt5eGlLejFsTzJWc2MyVWdabTl5S0R0aVBHTTdLWHRtYjNJb2RtRnlJR2M5WkRzeE1qZzhaenNwZTJsbUtHRmJZaXNyWFNFOUtHY21NVEkzZkRFeU9Da3BjbVYwZFhKdUlHWTdaejQrUFRkOWFXWW9ZVnRpS3l0ZElUMW5LV0p5WldGck8yWXJLenRpS3oxbGZYSmxkSFZ5YmlCbWZUdGNibXB6Y0dJdWRYUnBiSE11WTI5MWJuUkdhWGhsWkRNeVJtbGxiR1J6UFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTNKbGRIVnliaUJxYzNCaUxuVjBhV3h6TG1OdmRXNTBSbWw0WldSR2FXVnNaSE5mS0dFc1lpeGpMRGdxWkN0cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUdTVmhGUkRNeUxEUXBmVHRxYzNCaUxuVjBhV3h6TG1OdmRXNTBSbWw0WldRMk5FWnBaV3hrY3oxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0eVpYUjFjbTRnYW5Od1lpNTFkR2xzY3k1amIzVnVkRVpwZUdWa1JtbGxiR1J6WHloaExHSXNZeXc0S21RcmFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5DdzRLWDA3WEc1cWMzQmlMblYwYVd4ekxtTnZkVzUwUkdWc2FXMXBkR1ZrUm1sbGJHUnpQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlM1poY2lCbFBUQTdabTl5S0dROU9DcGtLMnB6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkR0aVBHTTdLWHRtYjNJb2RtRnlJR1k5WkRzeE1qZzhaanNwZTJsbUtHRmJZaXNyWFNFOUtHWW1NVEkzZkRFeU9Da3BjbVYwZFhKdUlHVTdaajQrUFRkOWFXWW9ZVnRpS3l0ZElUMW1LV0p5WldGck8yVXJLenRtYjNJb2RtRnlJR2M5TUN4b1BURTdaajFoVzJJcksxMHNaeXM5S0dZbU1USTNLU3BvTEdncVBURXlPQ3d3SVQwb1ppWXhNamdwT3lrN1lpczlaMzF5WlhSMWNtNGdaWDA3YW5Od1lpNTFkR2xzY3k1a1pXSjFaMEo1ZEdWelZHOVVaWGgwUm05eWJXRjBQV1oxYm1OMGFXOXVLR0VwZTNaaGNpQmlQU2RjSWljN2FXWW9ZU2w3WVQxcWMzQmlMblYwYVd4ekxtSjVkR1ZUYjNWeVkyVlViMVZwYm5RNFFYSnlZWGtvWVNrN1ptOXlLSFpoY2lCalBUQTdZenhoTG14bGJtZDBhRHRqS3lzcFlpczlYQ0pjWEZ4Y2VGd2lMREUyUG1GYlkxMG1KaWhpS3oxY0lqQmNJaWtzWWlzOVlWdGpYUzUwYjFOMGNtbHVaeWd4TmlsOWNtVjBkWEp1SUdJckoxd2lKMzA3WEc1cWMzQmlMblYwYVd4ekxtUmxZblZuVTJOaGJHRnlWRzlVWlhoMFJtOXliV0YwUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5Ymx3aWMzUnlhVzVuWENJOVBUMTBlWEJsYjJZZ1lUOW5iMjluTG5OMGNtbHVaeTV4ZFc5MFpTaGhLVHBoTG5SdlUzUnlhVzVuS0NsOU8ycHpjR0l1ZFhScGJITXVjM1J5YVc1blZHOUNlWFJsUVhKeVlYazlablZ1WTNScGIyNG9ZU2w3Wm05eUtIWmhjaUJpUFc1bGR5QlZhVzUwT0VGeWNtRjVLR0V1YkdWdVozUm9LU3hqUFRBN1l6eGhMbXhsYm1kMGFEdGpLeXNwZTNaaGNpQmtQV0V1WTJoaGNrTnZaR1ZCZENoaktUdHBaaWd5TlRVOFpDbDBhSEp2ZHlCRmNuSnZjaWhjSWtOdmJuWmxjbk5wYjI0Z1pYSnliM0k2SUhOMGNtbHVaeUJqYjI1MFlXbHVjeUJqYjJSbGNHOXBiblFnYjNWMGMybGtaU0J2WmlCaWVYUmxJSEpoYm1kbFhDSXBPMkpiWTEwOVpIMXlaWFIxY200Z1luMDdYRzVxYzNCaUxuVjBhV3h6TG1KNWRHVlRiM1Z5WTJWVWIxVnBiblE0UVhKeVlYazlablZ1WTNScGIyNG9ZU2w3YVdZb1lTNWpiMjV6ZEhKMVkzUnZjajA5UFZWcGJuUTRRWEp5WVhrcGNtVjBkWEp1SUdFN2FXWW9ZUzVqYjI1emRISjFZM1J2Y2owOVBVRnljbUY1UW5WbVptVnlmSHhjSW5WdVpHVm1hVzVsWkZ3aUlUMTBlWEJsYjJZZ1FuVm1abVZ5SmlaaExtTnZibk4wY25WamRHOXlQVDA5UW5WbVptVnlmSHhoTG1OdmJuTjBjblZqZEc5eVBUMDlRWEp5WVhrcGNtVjBkWEp1SUc1bGR5QlZhVzUwT0VGeWNtRjVLR0VwTzJsbUtHRXVZMjl1YzNSeWRXTjBiM0k5UFQxVGRISnBibWNwY21WMGRYSnVJR2R2YjJjdVkzSjVjSFF1WW1GelpUWTBMbVJsWTI5a1pWTjBjbWx1WjFSdlZXbHVkRGhCY25KaGVTaGhLVHRuYjI5bkxtRnpjMlZ5ZEhNdVptRnBiQ2hjSWxSNWNHVWdibTkwSUdOdmJuWmxjblJwWW14bElIUnZJRlZwYm5RNFFYSnlZWGt1WENJcE8zSmxkSFZ5YmlCdVpYY2dWV2x1ZERoQmNuSmhlU2d3S1gwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeVBXWjFibU4wYVc5dUtHRXNZaXhqS1h0MGFHbHpMbUo1ZEdWelh6MXVkV3hzTzNSb2FYTXVZM1Z5YzI5eVh6MTBhR2x6TG1WdVpGODlkR2hwY3k1emRHRnlkRjg5TUR0MGFHbHpMbVZ5Y205eVh6MGhNVHRoSmlaMGFHbHpMbk5sZEVKc2IyTnJLR0VzWWl4aktYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbWx1YzNSaGJtTmxRMkZqYUdWZlBWdGRPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTVoYkd4dll6MW1kVzVqZEdsdmJpaGhMR0lzWXlsN2FXWW9hbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbWx1YzNSaGJtTmxRMkZqYUdWZkxteGxibWQwYUNsN2RtRnlJR1E5YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG1sdWMzUmhibU5sUTJGamFHVmZMbkJ2Y0NncE8yRW1KbVF1YzJWMFFteHZZMnNvWVN4aUxHTXBPM0psZEhWeWJpQmtmWEpsZEhWeWJpQnVaWGNnYW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5S0dFc1lpeGpLWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1bWNtVmxQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NWpiR1ZoY2lncE96RXdNRDVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1YVc1emRHRnVZMlZEWVdOb1pWOHViR1Z1WjNSb0ppWnFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVhVzV6ZEdGdVkyVkRZV05vWlY4dWNIVnphQ2gwYUdsektYMDdYRzVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG1Oc2IyNWxQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJR3B6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTVoYkd4dll5aDBhR2x6TG1KNWRHVnpYeXgwYUdsekxuTjBZWEowWHl4MGFHbHpMbVZ1WkY4dGRHaHBjeTV6ZEdGeWRGOHBmVHRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NWllWFJsYzE4OWJuVnNiRHQwYUdsekxtTjFjbk52Y2w4OWRHaHBjeTVsYm1SZlBYUm9hWE11YzNSaGNuUmZQVEE3ZEdocGN5NWxjbkp2Y2w4OUlURjlPMnB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1WjJWMFFuVm1abVZ5UFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVZbmwwWlhOZmZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1YzJWMFFteHZZMnM5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlM1JvYVhNdVlubDBaWE5mUFdwemNHSXVkWFJwYkhNdVlubDBaVk52ZFhKalpWUnZWV2x1ZERoQmNuSmhlU2hoS1R0MGFHbHpMbk4wWVhKMFh6MTJiMmxrSURBaFBUMWlQMkk2TUR0MGFHbHpMbVZ1WkY4OWRtOXBaQ0F3SVQwOVl6OTBhR2x6TG5OMFlYSjBYeXRqT25Sb2FYTXVZbmwwWlhOZkxteGxibWQwYUR0MGFHbHpMbU4xY25OdmNsODlkR2hwY3k1emRHRnlkRjk5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdVoyVjBSVzVrUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVaVzVrWDMwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXpaWFJGYm1ROVpuVnVZM1JwYjI0b1lTbDdkR2hwY3k1bGJtUmZQV0Y5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVnpaWFE5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbU4xY25OdmNsODlkR2hwY3k1emRHRnlkRjk5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdVoyVjBRM1Z5YzI5eVBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11WTNWeWMyOXlYMzA3WEc1cWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdWNISnZkRzkwZVhCbExuTmxkRU4xY25OdmNqMW1kVzVqZEdsdmJpaGhLWHQwYUdsekxtTjFjbk52Y2w4OVlYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzVoWkhaaGJtTmxQV1oxYm1OMGFXOXVLR0VwZTNSb2FYTXVZM1Z5YzI5eVh5czlZVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVZM1Z5YzI5eVh6dzlkR2hwY3k1bGJtUmZLWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1aGRFVnVaRDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxtTjFjbk52Y2w4OVBYUm9hWE11Wlc1a1gzMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV3WVhOMFJXNWtQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVkzVnljMjl5WHo1MGFHbHpMbVZ1WkY5OU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVaMlYwUlhKeWIzSTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1bGNuSnZjbDk4ZkRBK2RHaHBjeTVqZFhKemIzSmZmSHgwYUdsekxtTjFjbk52Y2w4K2RHaHBjeTVsYm1SZmZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTndiR2wwVm1GeWFXNTBOalE5Wm5WdVkzUnBiMjRvWVNsN1ptOXlLSFpoY2lCaVBURXlPQ3hqUFRBc1pEMHdMR1U5TURzMFBtVW1KakV5T0R3OVlqdGxLeXNwWWoxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhySzEwc1kzdzlLR0ltTVRJM0tUdzhOeXBsT3pFeU9EdzlZaVltS0dJOWRHaHBjeTVpZVhSbGMxOWJkR2hwY3k1amRYSnpiM0pmS3l0ZExHTjhQU2hpSmpFeU55azhQREk0TEdSOFBTaGlKakV5TnlrK1BqUXBPMmxtS0RFeU9EdzlZaWxtYjNJb1pUMHdPelUrWlNZbU1USTRQRDFpTzJVckt5bGlQWFJvYVhNdVlubDBaWE5mVzNSb2FYTXVZM1Z5YzI5eVh5c3JYU3hrZkQwb1lpWXhNamNwUER3M0ttVXJNenRwWmlneE1qZytZaWx5WlhSMWNtNGdZU2hqUGo0K01DeGtQajQrTUNrN1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkdZV2xzWldRZ2RHOGdjbVZoWkNCMllYSnBiblFzSUdWdVkyOWthVzVuSUdseklHbHVkbUZzYVdRdVhDSXBPM1JvYVhNdVpYSnliM0pmUFNFd2ZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTndiR2wwV21sbmVtRm5WbUZ5YVc1ME5qUTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk53YkdsMFZtRnlhVzUwTmpRb1puVnVZM1JwYjI0b1lpeGpLWHR5WlhSMWNtNGdhbk53WWk1MWRHbHNjeTVtY205dFdtbG5lbUZuTmpRb1lpeGpMR0VwZlNsOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOd2JHbDBSbWw0WldRMk5EMW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMTBhR2x6TG1KNWRHVnpYeXhqUFhSb2FYTXVZM1Z5YzI5eVh6dDBhR2x6TG1OMWNuTnZjbDhyUFRnN1ptOXlLSFpoY2lCa1BUQXNaVDB3TEdZOVl5czNPMlkrUFdNN1ppMHRLV1E5WkR3OE9IeGlXMlpkTEdVOVpUdzhPSHhpVzJZck5GMDdjbVYwZFhKdUlHRW9aQ3hsS1gwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXphMmx3Vm1GeWFXNTBQV1oxYm1OMGFXOXVLQ2w3Wm05eUtEdDBhR2x6TG1KNWRHVnpYMXQwYUdsekxtTjFjbk52Y2w5ZEpqRXlPRHNwZEdocGN5NWpkWEp6YjNKZkt5czdkR2hwY3k1amRYSnpiM0pmS3l0OU8xeHVhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzUxYm5OcmFYQldZWEpwYm5ROVpuVnVZM1JwYjI0b1lTbDdabTl5S0RzeE1qZzhZVHNwZEdocGN5NWpkWEp6YjNKZkxTMHNZVDQrUGowM08zUm9hWE11WTNWeWMyOXlYeTB0ZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNekk5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxtSjVkR1Z6WHp0MllYSWdZajFoVzNSb2FYTXVZM1Z5YzI5eVh5c3dYVHQyWVhJZ1l6MWlKakV5Tnp0cFppZ3hNamcrWWlseVpYUjFjbTRnZEdocGN5NWpkWEp6YjNKZkt6MHhMR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NWpkWEp6YjNKZlBEMTBhR2x6TG1WdVpGOHBMR003WWoxaFczUm9hWE11WTNWeWMyOXlYeXN4WFR0amZEMG9ZaVl4TWpjcFBEdzNPMmxtS0RFeU9ENWlLWEpsZEhWeWJpQjBhR2x6TG1OMWNuTnZjbDhyUFRJc1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG1OMWNuTnZjbDg4UFhSb2FYTXVaVzVrWHlrc1l6dGlQV0ZiZEdocGN5NWpkWEp6YjNKZkt6SmRPMk44UFNoaUpqRXlOeWs4UERFME8ybG1LREV5T0Q1aUtYSmxkSFZ5YmlCMGFHbHpMbU4xY25OdmNsOHJQVE1zWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbU4xY25OdmNsODhQWFJvYVhNdVpXNWtYeWtzWXp0aVBXRmJkR2hwY3k1amRYSnpiM0pmS3pOZE8yTjhQU2hpSmpFeU55azhQREl4TzJsbUtERXlPRDVpS1hKbGRIVnliaUIwYUdsekxtTjFjbk52Y2w4clBUUXNaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtTjFjbk52Y2w4OFBWeHVkR2hwY3k1bGJtUmZLU3hqTzJJOVlWdDBhR2x6TG1OMWNuTnZjbDhyTkYwN1kzdzlLR0ltTVRVcFBEd3lPRHRwWmlneE1qZytZaWx5WlhSMWNtNGdkR2hwY3k1amRYSnpiM0pmS3owMUxHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1amRYSnpiM0pmUEQxMGFHbHpMbVZ1WkY4cExHTStQajR3TzNSb2FYTXVZM1Z5YzI5eVh5czlOVHN4TWpnOFBXRmJkR2hwY3k1amRYSnpiM0pmS3l0ZEppWXhNamc4UFdGYmRHaHBjeTVqZFhKemIzSmZLeXRkSmlZeE1qZzhQV0ZiZEdocGN5NWpkWEp6YjNKZkt5dGRKaVl4TWpnOFBXRmJkR2hwY3k1amRYSnpiM0pmS3l0ZEppWXhNamc4UFdGYmRHaHBjeTVqZFhKemIzSmZLeXRkSmlabmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtDRXhLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVZM1Z5YzI5eVh6dzlkR2hwY3k1bGJtUmZLVHR5WlhSMWNtNGdZMzA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVMmxuYm1Wa1ZtRnlhVzUwTXpJOWFuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUXpNanRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZibk5wWjI1bFpGWmhjbWx1ZERNeVUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNeklvS1M1MGIxTjBjbWx1WnlncGZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTnBaMjVsWkZaaGNtbHVkRE15VTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk5wWjI1bFpGWmhjbWx1ZERNeUtDa3VkRzlUZEhKcGJtY29LWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtXbWxuZW1GblZtRnlhVzUwTXpJOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxMGFHbHpMbkpsWVdSVmJuTnBaMjVsWkZaaGNtbHVkRE15S0NrN2NtVjBkWEp1SUdFK1BqNHhYaTBvWVNZeEtYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1ZXNXphV2R1WldSV1lYSnBiblEyTkQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSVGNHeHBkRlpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YW05cGJsVnBiblEyTkNsOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVM0JzYVhSV1lYSnBiblEyTkNocWMzQmlMblYwYVd4ekxtcHZhVzVWYm5OcFoyNWxaRVJsWTJsdFlXeFRkSEpwYm1jcGZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTnBaMjVsWkZaaGNtbHVkRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZOd2JHbDBWbUZ5YVc1ME5qUW9hbk53WWk1MWRHbHNjeTVxYjJsdVNXNTBOalFwZlR0cWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JUYVdkdVpXUldZWEpwYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSVGNHeHBkRlpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YW05cGJsTnBaMjVsWkVSbFkybHRZV3hUZEhKcGJtY3BmVHRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUmFhV2Q2WVdkV1lYSnBiblEyTkQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSVGNHeHBkRlpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YW05cGJscHBaM3BoWnpZMEtYMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1dtbG5lbUZuVm1GeWFXNTBTR0Z6YURZMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGTndiR2wwV21sbmVtRm5WbUZ5YVc1ME5qUW9hbk53WWk1MWRHbHNjeTVxYjJsdVNHRnphRFkwS1gwN1hHNXFjM0JpTGtKcGJtRnllVVJsWTI5a1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSYWFXZDZZV2RXWVhKcGJuUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5KbFlXUlRjR3hwZEZwcFozcGhaMVpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YW05cGJsTnBaMjVsWkVSbFkybHRZV3hUZEhKcGJtY3BmVHRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZhVzUwT0QxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFhSb2FYTXVZbmwwWlhOZlczUm9hWE11WTNWeWMyOXlYeXN3WFR0MGFHbHpMbU4xY25OdmNsOHJQVEU3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbU4xY25OdmNsODhQWFJvYVhNdVpXNWtYeWs3Y21WMGRYSnVJR0Y5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRlZwYm5ReE5qMW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBYUm9hWE11WW5sMFpYTmZXM1JvYVhNdVkzVnljMjl5WHlzd1hTeGlQWFJvYVhNdVlubDBaWE5mVzNSb2FYTXVZM1Z5YzI5eVh5c3hYVHQwYUdsekxtTjFjbk52Y2w4clBUSTdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtTjFjbk52Y2w4OFBYUm9hWE11Wlc1a1h5azdjbVYwZFhKdUlHRThQREI4WWp3OE9IMDdYRzVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZhVzUwTXpJOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhyTUYwc1lqMTBhR2x6TG1KNWRHVnpYMXQwYUdsekxtTjFjbk52Y2w4ck1WMHNZejEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJNbDBzWkQxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhyTTEwN2RHaHBjeTVqZFhKemIzSmZLejAwTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTVqZFhKemIzSmZQRDEwYUdsekxtVnVaRjhwTzNKbGRIVnliaWhoUER3d2ZHSThQRGg4WXp3OE1UWjhaRHc4TWpRcFBqNCtNSDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtWV2x1ZERZMFBXWjFibU4wYVc5dUtDbDdkbUZ5SUdFOWRHaHBjeTV5WldGa1ZXbHVkRE15S0Nrc1lqMTBhR2x6TG5KbFlXUlZhVzUwTXpJb0tUdHlaWFIxY200Z2FuTndZaTUxZEdsc2N5NXFiMmx1VldsdWREWTBLR0VzWWlsOU8xeHVhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1ZXbHVkRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlkR2hwY3k1eVpXRmtWV2x1ZERNeUtDa3NZajEwYUdsekxuSmxZV1JWYVc1ME16SW9LVHR5WlhSMWNtNGdhbk53WWk1MWRHbHNjeTVxYjJsdVZXNXphV2R1WldSRVpXTnBiV0ZzVTNSeWFXNW5LR0VzWWlsOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVsdWREZzlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG1KNWRHVnpYMXQwYUdsekxtTjFjbk52Y2w4ck1GMDdkR2hwY3k1amRYSnpiM0pmS3oweE8yZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1amRYSnpiM0pmUEQxMGFHbHpMbVZ1WkY4cE8zSmxkSFZ5YmlCaFBEd3lORDQrTWpSOU8xeHVhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1NXNTBNVFk5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxtSjVkR1Z6WDF0MGFHbHpMbU4xY25OdmNsOHJNRjBzWWoxMGFHbHpMbUo1ZEdWelgxdDBhR2x6TG1OMWNuTnZjbDhyTVYwN2RHaHBjeTVqZFhKemIzSmZLejB5TzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTVqZFhKemIzSmZQRDEwYUdsekxtVnVaRjhwTzNKbGRIVnliaWhoUER3d2ZHSThQRGdwUER3eE5qNCtNVFo5TzJwemNHSXVRbWx1WVhKNVJHVmpiMlJsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRWx1ZERNeVBXWjFibU4wYVc5dUtDbDdkbUZ5SUdFOWRHaHBjeTVpZVhSbGMxOWJkR2hwY3k1amRYSnpiM0pmS3pCZExHSTlkR2hwY3k1aWVYUmxjMTliZEdocGN5NWpkWEp6YjNKZkt6RmRMR005ZEdocGN5NWllWFJsYzE5YmRHaHBjeTVqZFhKemIzSmZLekpkTEdROWRHaHBjeTVpZVhSbGMxOWJkR2hwY3k1amRYSnpiM0pmS3pOZE8zUm9hWE11WTNWeWMyOXlYeXM5TkR0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11WTNWeWMyOXlYenc5ZEdocGN5NWxibVJmS1R0eVpYUjFjbTRnWVR3OE1IeGlQRHc0ZkdNOFBERTJmR1E4UERJMGZUdGNibXB6Y0dJdVFtbHVZWEo1UkdWamIyUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFbHVkRFkwUFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5ZEdocGN5NXlaV0ZrVldsdWRETXlLQ2tzWWoxMGFHbHpMbkpsWVdSVmFXNTBNeklvS1R0eVpYUjFjbTRnYW5Od1lpNTFkR2xzY3k1cWIybHVTVzUwTmpRb1lTeGlLWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtTVzUwTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxuSmxZV1JWYVc1ME16SW9LU3hpUFhSb2FYTXVjbVZoWkZWcGJuUXpNaWdwTzNKbGRIVnliaUJxYzNCaUxuVjBhV3h6TG1wdmFXNVRhV2R1WldSRVpXTnBiV0ZzVTNSeWFXNW5LR0VzWWlsOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVac2IyRjBQV1oxYm1OMGFXOXVLQ2w3ZG1GeUlHRTlkR2hwY3k1eVpXRmtWV2x1ZERNeUtDazdjbVYwZFhKdUlHcHpjR0l1ZFhScGJITXVhbTlwYmtac2IyRjBNeklvWVN3d0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkViM1ZpYkdVOVpuVnVZM1JwYjI0b0tYdDJZWElnWVQxMGFHbHpMbkpsWVdSVmFXNTBNeklvS1N4aVBYUm9hWE11Y21WaFpGVnBiblF6TWlncE8zSmxkSFZ5YmlCcWMzQmlMblYwYVd4ekxtcHZhVzVHYkc5aGREWTBLR0VzWWlsOU8ycHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVKdmIydzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGhJWFJvYVhNdVlubDBaWE5mVzNSb2FYTXVZM1Z5YzI5eVh5c3JYWDA3YW5Od1lpNUNhVzVoY25sRVpXTnZaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtSVzUxYlQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSVGFXZHVaV1JXWVhKcGJuUXpNaWdwZlR0Y2JtcHpjR0l1UW1sdVlYSjVSR1ZqYjJSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0MllYSWdZajEwYUdsekxtSjVkR1Z6WHl4alBYUm9hWE11WTNWeWMyOXlYenRoUFdNcllUdG1iM0lvZG1GeUlHUTlXMTBzWlQxY0lsd2lPMk04WVRzcGUzWmhjaUJtUFdKYll5c3JYVHRwWmlneE1qZytaaWxrTG5CMWMyZ29aaWs3Wld4elpTQnBaaWd4T1RJK1ppbGpiMjUwYVc1MVpUdGxiSE5sSUdsbUtESXlORDVtS1h0MllYSWdaejFpVzJNcksxMDdaQzV3ZFhOb0tDaG1Kak14S1R3OE5ueG5Kall6S1gxbGJITmxJR2xtS0RJME1ENW1LWHRuUFdKYll5c3JYVHQyWVhJZ2FEMWlXMk1ySzEwN1pDNXdkWE5vS0NobUpqRTFLVHc4TVRKOEtHY21Oak1wUER3MmZHZ21Oak1wZldWc2MyVWdhV1lvTWpRNFBtWXBlMmM5WWx0akt5dGRPMmc5WWx0akt5dGRPM1poY2lCclBXSmJZeXNyWFR0bVBTaG1KamNwUER3eE9Id29aeVkyTXlrOFBERXlmQ2hvSmpZektUdzhObnhySmpZek8yWXRQVFkxTlRNMk8yUXVjSFZ6YUNnb1pqNCtNVEFtTVRBeU15a3JOVFV5T1RZc0tHWW1NVEF5TXlrck5UWXpNakFwZlRneE9USThQV1F1YkdWdVozUm9KaVlvWlNzOVUzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTNWhjSEJzZVNodWRXeHNMR1FwTEdRdWJHVnVaM1JvUFRBcGZXVXJQV2R2YjJjdVkzSjVjSFF1WW5sMFpVRnljbUY1Vkc5VGRISnBibWNvWkNrN1hHNTBhR2x6TG1OMWNuTnZjbDg5WXp0eVpYUjFjbTRnWlgwN2FuTndZaTVDYVc1aGNubEVaV052WkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVTNSeWFXNW5WMmwwYUV4bGJtZDBhRDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQWFJvYVhNdWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9LVHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVM1J5YVc1bktHRXBmVHRxYzNCaUxrSnBibUZ5ZVVSbFkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkNlWFJsY3oxbWRXNWpkR2x2YmloaEtYdHBaaWd3UG1GOGZIUm9hWE11WTNWeWMyOXlYeXRoUG5Sb2FYTXVZbmwwWlhOZkxteGxibWQwYUNseVpYUjFjbTRnZEdocGN5NWxjbkp2Y2w4OUlUQXNaMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0pKYm5aaGJHbGtJR0o1ZEdVZ2JHVnVaM1JvSVZ3aUtTeHVaWGNnVldsdWREaEJjbkpoZVNnd0tUdDJZWElnWWoxMGFHbHpMbUo1ZEdWelh5NXpkV0poY25KaGVTaDBhR2x6TG1OMWNuTnZjbDhzZEdocGN5NWpkWEp6YjNKZksyRXBPM1JvYVhNdVkzVnljMjl5WHlzOVlUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdVkzVnljMjl5WHp3OWRHaHBjeTVsYm1SZktUdHlaWFIxY200Z1luMDdhbk53WWk1Q2FXNWhjbmxFWldOdlpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1ZtRnlhVzUwU0dGemFEWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk53YkdsMFZtRnlhVzUwTmpRb2FuTndZaTUxZEdsc2N5NXFiMmx1U0dGemFEWTBLWDA3WEc1cWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JHYVhobFpFaGhjMmcyTkQxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFhSb2FYTXVZbmwwWlhOZkxHSTlkR2hwY3k1amRYSnpiM0pmTEdNOVlWdGlLekJkTEdROVlWdGlLekZkTEdVOVlWdGlLekpkTEdZOVlWdGlLek5kTEdjOVlWdGlLelJkTEdnOVlWdGlLelZkTEdzOVlWdGlLelpkTzJFOVlWdGlLemRkTzNSb2FYTXVZM1Z5YzI5eVh5czlPRHR5WlhSMWNtNGdVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU2hqTEdRc1pTeG1MR2NzYUN4ckxHRXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjajFtZFc1amRHbHZiaWhoTEdJc1l5bDdkR2hwY3k1a1pXTnZaR1Z5WHoxcWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdVlXeHNiMk1vWVN4aUxHTXBPM1JvYVhNdVptbGxiR1JEZFhKemIzSmZQWFJvYVhNdVpHVmpiMlJsY2w4dVoyVjBRM1Z5YzI5eUtDazdkR2hwY3k1dVpYaDBSbWxsYkdSZlBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa2xPVmtGTVNVUmZSa2xGVEVSZlRsVk5Ra1ZTTzNSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHoxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUpUbFpCVEVsRU8zUm9hWE11WlhKeWIzSmZQU0V4TzNSb2FYTXVjbVZoWkVOaGJHeGlZV05yYzE4OWJuVnNiSDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1YVc1emRHRnVZMlZEWVdOb1pWODlXMTA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1aGJHeHZZejFtZFc1amRHbHZiaWhoTEdJc1l5bDdhV1lvYW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1YVc1emRHRnVZMlZEWVdOb1pWOHViR1Z1WjNSb0tYdDJZWElnWkQxcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1cGJuTjBZVzVqWlVOaFkyaGxYeTV3YjNBb0tUdGhKaVprTG1SbFkyOWtaWEpmTG5ObGRFSnNiMk5yS0dFc1lpeGpLVHR5WlhSMWNtNGdaSDF5WlhSMWNtNGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dFc1lpeGpLWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG1Gc2JHOWpQV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbUZzYkc5ak8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbVp5WldVOVpuVnVZM1JwYjI0b0tYdDBhR2x6TG1SbFkyOWtaWEpmTG1Oc1pXRnlLQ2s3ZEdocGN5NXVaWGgwUm1sbGJHUmZQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGtsT1ZrRk1TVVJmUmtsRlRFUmZUbFZOUWtWU08zUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVKVGxaQlRFbEVPM1JvYVhNdVpYSnliM0pmUFNFeE8zUm9hWE11Y21WaFpFTmhiR3hpWVdOcmMxODliblZzYkRzeE1EQSthbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVhVzV6ZEdGdVkyVkRZV05vWlY4dWJHVnVaM1JvSmlacWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1cGJuTjBZVzVqWlVOaFkyaGxYeTV3ZFhOb0tIUm9hWE1wZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdVoyVjBSbWxsYkdSRGRYSnpiM0k5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NW1hV1ZzWkVOMWNuTnZjbDk5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1blpYUkRkWEp6YjNJOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTVrWldOdlpHVnlYeTVuWlhSRGRYSnpiM0lvS1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVaMlYwUW5WbVptVnlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dVoyVjBRblZtWm1WeUtDbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzVuWlhSR2FXVnNaRTUxYldKbGNqMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG01bGVIUkdhV1ZzWkY5OU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNW5aWFJYYVhKbFZIbHdaVDFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjk5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1cGMwUmxiR2x0YVhSbFpEMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkgwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExtbHpSVzVrUjNKdmRYQTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RlRrUmZSMUpQVlZCOU8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbWRsZEVWeWNtOXlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdVpYSnliM0pmZkh4MGFHbHpMbVJsWTI5a1pYSmZMbWRsZEVWeWNtOXlLQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1elpYUkNiRzlqYXoxbWRXNWpkR2x2YmloaExHSXNZeWw3ZEdocGN5NWtaV052WkdWeVh5NXpaWFJDYkc5amF5aGhMR0lzWXlrN2RHaHBjeTV1WlhoMFJtbGxiR1JmUFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxrbE9Wa0ZNU1VSZlJrbEZURVJmVGxWTlFrVlNPM1JvYVhNdWJtVjRkRmRwY21WVWVYQmxYejFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1SlRsWkJURWxFZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVnpaWFE5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbVJsWTI5a1pYSmZMbkpsYzJWMEtDazdkR2hwY3k1dVpYaDBSbWxsYkdSZlBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa2xPVmtGTVNVUmZSa2xGVEVSZlRsVk5Ra1ZTTzNSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHoxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUpUbFpCVEVsRWZUdGNibXB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzVoWkhaaGJtTmxQV1oxYm1OMGFXOXVLR0VwZTNSb2FYTXVaR1ZqYjJSbGNsOHVZV1IyWVc1alpTaGhLWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWJtVjRkRVpwWld4a1BXWjFibU4wYVc5dUtDbDdhV1lvZEdocGN5NWtaV052WkdWeVh5NWhkRVZ1WkNncEtYSmxkSFZ5YmlFeE8ybG1LSFJvYVhNdVoyVjBSWEp5YjNJb0tTbHlaWFIxY200Z1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkVaV052WkdWeUlHaHBkQ0JoYmlCbGNuSnZjbHdpS1N3aE1UdDBhR2x6TG1acFpXeGtRM1Z5YzI5eVh6MTBhR2x6TG1SbFkyOWtaWEpmTG1kbGRFTjFjbk52Y2lncE8zWmhjaUJoUFhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNeklvS1N4aVBXRStQajR6TzJFbVBUYzdhV1lvWVNFOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUppWmhJVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1R1NWaEZSRE15SmlaaElUMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVHU1ZoRlJEWTBKaVpoSVQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUVSVXhKVFVsVVJVUW1KbUVoUFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsTlVRVkpVWDBkU1QxVlFKaVpoSVQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUZUa1JmUjFKUFZWQXBjbVYwZFhKdUlHZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lTVzUyWVd4cFpDQjNhWEpsSUhSNWNHVTZJQ1Z6SUNoaGRDQndiM05wZEdsdmJpQWxjeWxjSWl4Y2JtRXNkR2hwY3k1bWFXVnNaRU4xY25OdmNsOHBMSFJvYVhNdVpYSnliM0pmUFNFd0xDRXhPM1JvYVhNdWJtVjRkRVpwWld4a1h6MWlPM1JvYVhNdWJtVjRkRmRwY21WVWVYQmxYejFoTzNKbGRIVnliaUV3ZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWRXNXphMmx3U0dWaFpHVnlQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NWtaV052WkdWeVh5NTFibk5yYVhCV1lYSnBiblFvZEdocGN5NXVaWGgwUm1sbGJHUmZQRHd6ZkhSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHlsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXphMmx3VFdGMFkyaHBibWRHYVdWc1pITTlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMTBhR2x6TG01bGVIUkdhV1ZzWkY4N1ptOXlLSFJvYVhNdWRXNXphMmx3U0dWaFpHVnlLQ2s3ZEdocGN5NXVaWGgwUm1sbGJHUW9LU1ltZEdocGN5NW5aWFJHYVdWc1pFNTFiV0psY2lncFBUMWhPeWwwYUdsekxuTnJhWEJHYVdWc1pDZ3BPM1JvYVhNdVpHVmpiMlJsY2w4dVlYUkZibVFvS1h4OGRHaHBjeTUxYm5OcmFYQklaV0ZrWlhJb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1YzJ0cGNGWmhjbWx1ZEVacFpXeGtQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmSVQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRL0tHZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lTVzUyWVd4cFpDQjNhWEpsSUhSNWNHVWdabTl5SUhOcmFYQldZWEpwYm5SR2FXVnNaRndpS1N4MGFHbHpMbk5yYVhCR2FXVnNaQ2dwS1RwMGFHbHpMbVJsWTI5a1pYSmZMbk5yYVhCV1lYSnBiblFvS1gwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuTnJhWEJFWld4cGJXbDBaV1JHYVdWc1pEMW1kVzVqZEdsdmJpZ3BlMmxtS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHlFOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLV2R2YjJjdVlYTnpaWEowY3k1bVlXbHNLRndpU1c1MllXeHBaQ0IzYVhKbElIUjVjR1VnWm05eUlITnJhWEJFWld4cGJXbDBaV1JHYVdWc1pGd2lLU3gwYUdsekxuTnJhWEJHYVdWc1pDZ3BPMlZzYzJWN2RtRnlJR0U5ZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUXpNaWdwTzNSb2FYTXVaR1ZqYjJSbGNsOHVZV1IyWVc1alpTaGhLWDE5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuTnJhWEJHYVhobFpETXlSbWxsYkdROVpuVnVZM1JwYjI0b0tYdDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWOGhQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVNekkvS0dkdmIyY3VZWE56WlhKMGN5NW1ZV2xzS0Z3aVNXNTJZV3hwWkNCM2FYSmxJSFI1Y0dVZ1ptOXlJSE5yYVhCR2FYaGxaRE15Um1sbGJHUmNJaWtzZEdocGN5NXphMmx3Um1sbGJHUW9LU2s2ZEdocGN5NWtaV052WkdWeVh5NWhaSFpoYm1ObEtEUXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1YzJ0cGNFWnBlR1ZrTmpSR2FXVnNaRDFtZFc1amRHbHZiaWdwZTNSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHlFOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5EOG9aMjl2Wnk1aGMzTmxjblJ6TG1aaGFXd29YQ0pKYm5aaGJHbGtJSGRwY21VZ2RIbHdaU0JtYjNJZ2MydHBjRVpwZUdWa05qUkdhV1ZzWkZ3aUtTeDBhR2x6TG5OcmFYQkdhV1ZzWkNncEtUcDBhR2x6TG1SbFkyOWtaWEpmTG1Ga2RtRnVZMlVvT0NsOU8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbk5yYVhCSGNtOTFjRDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQWFJvYVhNdWJtVjRkRVpwWld4a1h6dGtiM3RwWmlnaGRHaHBjeTV1WlhoMFJtbGxiR1FvS1NsN1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSlZibTFoZEdOb1pXUWdjM1JoY25RdFozSnZkWEFnZEdGbk9pQnpkSEpsWVcwZ1JVOUdYQ0lwTzNSb2FYTXVaWEp5YjNKZlBTRXdPMkp5WldGcmZXbG1LSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJVNUVYMGRTVDFWUUtYdDBhR2x6TG01bGVIUkdhV1ZzWkY4aFBXRW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVptRnBiQ2hjSWxWdWJXRjBZMmhsWkNCbGJtUXRaM0p2ZFhBZ2RHRm5YQ0lwTEhSb2FYTXVaWEp5YjNKZlBTRXdLVHRpY21WaGEzMTBhR2x6TG5OcmFYQkdhV1ZzWkNncGZYZG9hV3hsS0RFcGZUdGNibXB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV6YTJsd1JtbGxiR1E5Wm5WdVkzUnBiMjRvS1h0emQybDBZMmdvZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmS1h0allYTmxJR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WRHAwYUdsekxuTnJhWEJXWVhKcGJuUkdhV1ZzWkNncE8ySnlaV0ZyTzJOaGMyVWdhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUTJORHAwYUdsekxuTnJhWEJHYVhobFpEWTBSbWxsYkdRb0tUdGljbVZoYXp0allYTmxJR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkRwMGFHbHpMbk5yYVhCRVpXeHBiV2wwWldSR2FXVnNaQ2dwTzJKeVpXRnJPMk5oYzJVZ2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1qcDBhR2x6TG5OcmFYQkdhWGhsWkRNeVJtbGxiR1FvS1R0aWNtVmhhenRqWVhObElHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbE5VUVZKVVgwZFNUMVZRT25Sb2FYTXVjMnRwY0VkeWIzVndLQ2s3WW5KbFlXczdaR1ZtWVhWc2REcG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJa2x1ZG1Gc2FXUWdkMmx5WlNCbGJtTnZaR2x1WnlCbWIzSWdabWxsYkdRdVhDSXBmWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVm5hWE4wWlhKU1pXRmtRMkZzYkdKaFkyczlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNQVDA5ZEdocGN5NXlaV0ZrUTJGc2JHSmhZMnR6WHlZbUtIUm9hWE11Y21WaFpFTmhiR3hpWVdOcmMxODllMzBwTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb0lYUm9hWE11Y21WaFpFTmhiR3hpWVdOcmMxOWJZVjBwTzNSb2FYTXVjbVZoWkVOaGJHeGlZV05yYzE5YllWMDlZbjA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KMWJsSmxZV1JEWVd4c1ltRmphejFtZFc1amRHbHZiaWhoS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHNTFiR3doUFQxMGFHbHpMbkpsWVdSRFlXeHNZbUZqYTNOZktUdGhQWFJvYVhNdWNtVmhaRU5oYkd4aVlXTnJjMTliWVYwN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhLVHR5WlhSMWNtNGdZU2gwYUdsektYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFRnVlVDFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVSbWxsYkdSVWVYQmxWRzlYYVhKbFZIbHdaU2hoS1R0MllYSWdZajFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1R2FXVnNaRlI1Y0dVN2MzZHBkR05vS0dFcGUyTmhjMlVnWWk1RVQxVkNURVU2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRVJ2ZFdKc1pTZ3BPMk5oYzJVZ1lpNUdURTlCVkRweVpYUjFjbTRnZEdocGN5NXlaV0ZrUm14dllYUW9LVHRqWVhObElHSXVTVTVVTmpRNmNtVjBkWEp1SUhSb2FYTXVjbVZoWkVsdWREWTBLQ2s3WTJGelpTQmlMbFZKVGxRMk5EcHlaWFIxY200Z2RHaHBjeTV5WldGa1ZXbHVkRFkwS0NrN1kyRnpaU0JpTGtsT1ZETXlPbkpsZEhWeWJpQjBhR2x6TG5KbFlXUkpiblF6TWlncE8yTmhjMlVnWWk1R1NWaEZSRFkwT25KbGRIVnliaUIwYUdsekxuSmxZV1JHYVhobFpEWTBLQ2s3WTJGelpTQmlMa1pKV0VWRU16STZjbVYwZFhKdUlIUm9hWE11Y21WaFpFWnBlR1ZrTXpJb0tUdGpZWE5sSUdJdVFrOVBURHB5WlhSMWNtNGdkR2hwY3k1eVpXRmtRbTl2YkNncE8yTmhjMlVnWWk1VFZGSkpUa2M2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk4wY21sdVp5Z3BPMXh1WTJGelpTQmlMa2RTVDFWUU9tZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lSM0p2ZFhBZ1ptbGxiR1FnZEhsd1pTQnViM1FnYzNWd2NHOXlkR1ZrSUdsdUlISmxZV1JCYm5rb0tWd2lLVHRqWVhObElHSXVUVVZUVTBGSFJUcG5iMjluTG1GemMyVnlkSE11Wm1GcGJDaGNJazFsYzNOaFoyVWdabWxsYkdRZ2RIbHdaU0J1YjNRZ2MzVndjRzl5ZEdWa0lHbHVJSEpsWVdSQmJua29LVndpS1R0allYTmxJR0l1UWxsVVJWTTZjbVYwZFhKdUlIUm9hWE11Y21WaFpFSjVkR1Z6S0NrN1kyRnpaU0JpTGxWSlRsUXpNanB5WlhSMWNtNGdkR2hwY3k1eVpXRmtWV2x1ZERNeUtDazdZMkZ6WlNCaUxrVk9WVTA2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRVZ1ZFcwb0tUdGpZWE5sSUdJdVUwWkpXRVZFTXpJNmNtVjBkWEp1SUhSb2FYTXVjbVZoWkZObWFYaGxaRE15S0NrN1kyRnpaU0JpTGxOR1NWaEZSRFkwT25KbGRIVnliaUIwYUdsekxuSmxZV1JUWm1sNFpXUTJOQ2dwTzJOaGMyVWdZaTVUU1U1VU16STZjbVYwZFhKdUlIUm9hWE11Y21WaFpGTnBiblF6TWlncE8yTmhjMlVnWWk1VFNVNVVOalE2Y21WMGRYSnVJSFJvYVhNdWNtVmhaRk5wYm5RMk5DZ3BPMk5oYzJVZ1lpNUdTRUZUU0RZME9uSmxkSFZ5YmlCMGFHbHpMbkpsWVdSR2FYaGxaRWhoYzJnMk5DZ3BPMk5oYzJVZ1lpNVdTRUZUU0RZME9uSmxkSFZ5YmlCMGFHbHpMbkpsWVdSV1lYSnBiblJJWVhOb05qUW9LVHRjYm1SbFptRjFiSFE2WjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKSmJuWmhiR2xrSUdacFpXeGtJSFI1Y0dVZ2FXNGdjbVZoWkVGdWVTZ3BYQ0lwZlhKbGRIVnliaUF3ZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRTFsYzNOaFoyVTlablZ1WTNScGIyNG9ZU3hpS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1R0MllYSWdZejEwYUdsekxtUmxZMjlrWlhKZkxtZGxkRVZ1WkNncExHUTlkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWVzV6YVdkdVpXUldZWEpwYm5Rek1pZ3BPMlE5ZEdocGN5NWtaV052WkdWeVh5NW5aWFJEZFhKemIzSW9LU3RrTzNSb2FYTXVaR1ZqYjJSbGNsOHVjMlYwUlc1a0tHUXBPMklvWVN4MGFHbHpLVHQwYUdsekxtUmxZMjlrWlhKZkxuTmxkRU4xY25OdmNpaGtLVHQwYUdsekxtUmxZMjlrWlhKZkxuTmxkRVZ1WkNoaktYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFZHliM1Z3UFdaMWJtTjBhVzl1S0dFc1lpeGpLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVVMVJCVWxSZlIxSlBWVkFwTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb2RHaHBjeTV1WlhoMFJtbGxiR1JmUFQxaEtUdGpLR0lzZEdocGN5azdkR2hwY3k1bGNuSnZjbDk4ZkhSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSVTVFWDBkU1QxVlFmSHdvWjI5dlp5NWhjM05sY25SekxtWmhhV3dvWENKSGNtOTFjQ0J6ZFdKdFpYTnpZV2RsSUdScFpDQnViM1FnWlc1a0lIZHBkR2dnWVc0Z1JVNUVYMGRTVDFWUUlIUmhaMXdpS1N4MGFHbHpMbVZ5Y205eVh6MGhNQ2w5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExtZGxkRVpwWld4a1JHVmpiMlJsY2oxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RVJVeEpUVWxVUlVRcE8zWmhjaUJoUFhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNeklvS1N4aVBYUm9hWE11WkdWamIyUmxjbDh1WjJWMFEzVnljMjl5S0Nrc1l6MWlLMkU3WVQxcWMzQmlMa0pwYm1GeWVVUmxZMjlrWlhJdVlXeHNiMk1vZEdocGN5NWtaV052WkdWeVh5NW5aWFJDZFdabVpYSW9LU3hpTEdFcE8zUm9hWE11WkdWamIyUmxjbDh1YzJWMFEzVnljMjl5S0dNcE8zSmxkSFZ5YmlCaGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVsdWRETXlQV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGTnBaMjVsWkZaaGNtbHVkRE15S0NsOU8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSSmJuUXpNbE4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmUFQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVGFXZHVaV1JXWVhKcGJuUXpNbE4wY21sdVp5Z3BmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFbHVkRFkwUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRk5wWjI1bFpGWmhjbWx1ZERZMEtDbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1NXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtUdHlaWFIxY200Z2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1UybG5ibVZrVm1GeWFXNTBOalJUZEhKcGJtY29LWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRlZwYm5Rek1qMW1kVzVqZEdsdmJpZ3BlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmUFQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVmJuTnBaMjVsWkZaaGNtbHVkRE15S0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVldsdWRETXlVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNekpUZEhKcGJtY29LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlZhVzUwTmpROVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVlc1emFXZHVaV1JXWVhKcGJuUTJOQ2dwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVldsdWREWTBVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBOalJUZEhKcGJtY29LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlRhVzUwTXpJOVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrV21sbmVtRm5WbUZ5YVc1ME16SW9LWDA3YW5Od1lpNUNhVzVoY25sU1pXRmtaWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUlRhVzUwTmpROVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrV21sbmVtRm5WbUZ5YVc1ME5qUW9LWDA3WEc1cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk5wYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JhYVdkNllXZFdZWEpwYm5RMk5GTjBjbWx1WnlncGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkVacGVHVmtNekk5Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUXpNaWs3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZwYm5Rek1pZ3BmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFWnBlR1ZrTmpROVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVEyTkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWcGJuUTJOQ2dwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrUm1sNFpXUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmUFQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUdTVmhGUkRZMEtUdHlaWFIxY200Z2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXbHVkRFkwVTNSeWFXNW5LQ2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVMlpwZUdWa016STlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1pazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFbHVkRE15S0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVTJacGVHVmtNekpUZEhKcGJtYzlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1pazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFbHVkRE15S0NrdWRHOVRkSEpwYm1jb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTm1hWGhsWkRZMFBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrWkpXRVZFTmpRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSSmJuUTJOQ2dwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRk5tYVhobFpEWTBVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrWkpXRVZFTmpRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSSmJuUTJORk4wY21sdVp5Z3BmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFWnNiMkYwUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVNeklwTzNKbGRIVnliaUIwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JHYkc5aGRDZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtSRzkxWW14bFBXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrWkpXRVZFTmpRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSRWIzVmliR1VvS1gwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JDYjI5c1BXWjFibU4wYVc5dUtDbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrN2NtVjBkWEp1SVNGMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVmJuTnBaMjVsWkZaaGNtbHVkRE15S0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrUlc1MWJUMW1kVzVqZEdsdmJpZ3BlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvZEdocGN5NXVaWGgwVjJseVpWUjVjR1ZmUFQxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVGFXZHVaV1JXWVhKcGJuUTJOQ2dwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoMGFHbHpMbTVsZUhSWGFYSmxWSGx3WlY4OVBXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1JGVEVsTlNWUkZSQ2s3ZG1GeUlHRTlkR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWVzV6YVdkdVpXUldZWEpwYm5Rek1pZ3BPM0psZEhWeWJpQjBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUlRkSEpwYm1jb1lTbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1FubDBaWE05Wm5WdVkzUnBiMjRvS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtIUm9hWE11Ym1WNGRGZHBjbVZVZVhCbFh6MDlhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1R0MllYSWdZVDEwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JWYm5OcFoyNWxaRlpoY21sdWRETXlLQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRUo1ZEdWektHRXBmVHRjYm1wemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtWbUZ5YVc1MFNHRnphRFkwUFdaMWJtTjBhVzl1S0NsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDBhR2x6TG01bGVIUlhhWEpsVkhsd1pWODlQV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2s3Y21WMGRYSnVJSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlpoY21sdWRFaGhjMmcyTkNncGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOcGJuUklZWE5vTmpROVpuVnVZM1JwYjI0b0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFJvYVhNdWJtVjRkRmRwY21WVWVYQmxYejA5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1R0eVpYUjFjbTRnZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrV21sbmVtRm5WbUZ5YVc1MFNHRnphRFkwS0NsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVTNCc2FYUldZWEpwYm5RMk5EMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtUdHlaWFIxY200Z2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1UzQnNhWFJXWVhKcGJuUTJOQ2hoS1gwN1hHNXFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZOd2JHbDBXbWxuZW1GblZtRnlhVzUwTmpROVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExsWkJVa2xPVkNrN2NtVjBkWEp1SUhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZOd2JHbDBWbUZ5YVc1ME5qUW9ablZ1WTNScGIyNG9ZaXhqS1h0eVpYUjFjbTRnYW5Od1lpNTFkR2xzY3k1bWNtOXRXbWxuZW1Gbk5qUW9ZaXhqTEdFcGZTbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1JtbDRaV1JJWVhOb05qUTlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hSb2FYTXVibVY0ZEZkcGNtVlVlWEJsWHowOWFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRMk5DazdjbVYwZFhKdUlIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFWnBlR1ZrU0dGemFEWTBLQ2w5TzF4dWFuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JUY0d4cGRFWnBlR1ZrTmpROVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gwYUdsekxtNWxlSFJYYVhKbFZIbHdaVjg5UFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrWkpXRVZFTmpRcE8zSmxkSFZ5YmlCMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVGNHeHBkRVpwZUdWa05qUW9ZU2w5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9kR2hwY3k1dVpYaDBWMmx5WlZSNWNHVmZQVDFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RVJVeEpUVWxVUlVRcE8zWmhjaUJpUFhSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNeklvS1R0aVBYUm9hWE11WkdWamIyUmxjbDh1WjJWMFEzVnljMjl5S0NrcllqdG1iM0lvZG1GeUlHTTlXMTA3ZEdocGN5NWtaV052WkdWeVh5NW5aWFJEZFhKemIzSW9LVHhpT3lsakxuQjFjMmdvWVM1allXeHNLSFJvYVhNdVpHVmpiMlJsY2w4cEtUdHlaWFIxY200Z1kzMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVsdWRETXlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSVGFXZHVaV1JXWVhKcGJuUXpNaWw5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1NXNTBNekpUZEhKcGJtYzlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmS0hSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZOcFoyNWxaRlpoY21sdWRETXlVM1J5YVc1bktYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSUVlXTnJaV1JKYm5RMk5EMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5KbFlXUlFZV05yWldSR2FXVnNaRjhvZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrVTJsbmJtVmtWbUZ5YVc1ME5qUXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVsdWREWTBVM1J5YVc1blBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JUYVdkdVpXUldZWEpwYm5RMk5GTjBjbWx1WnlsOU8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSUVlXTnJaV1JWYVc1ME16STlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdkR2hwY3k1eVpXRmtVR0ZqYTJWa1JtbGxiR1JmS0hSb2FYTXVaR1ZqYjJSbGNsOHVjbVZoWkZWdWMybG5ibVZrVm1GeWFXNTBNeklwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRkJoWTJ0bFpGVnBiblF6TWxOMGNtbHVaejFtZFc1amRHbHZiaWdwZTNKbGRIVnliaUIwYUdsekxuSmxZV1JRWVdOclpXUkdhV1ZzWkY4b2RHaHBjeTVrWldOdlpHVnlYeTV5WldGa1ZXNXphV2R1WldSV1lYSnBiblF6TWxOMGNtbHVaeWw5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1ZXbHVkRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUlZibk5wWjI1bFpGWmhjbWx1ZERZMEtYMDdhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSUVlXTnJaV1JWYVc1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2RHaHBjeTV5WldGa1VHRmphMlZrUm1sbGJHUmZLSFJvYVhNdVpHVmpiMlJsY2w4dWNtVmhaRlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUlRkSEpwYm1jcGZUdGNibXB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrVTJsdWRETXlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSYWFXZDZZV2RXWVhKcGJuUXpNaWw5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1UybHVkRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUmFhV2Q2WVdkV1lYSnBiblEyTkNsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVUdGamEyVmtVMmx1ZERZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUmFhV2Q2WVdkV1lYSnBiblEyTkZOMGNtbHVaeWw5TzJwemNHSXVRbWx1WVhKNVVtVmhaR1Z5TG5CeWIzUnZkSGx3WlM1eVpXRmtVR0ZqYTJWa1JtbDRaV1F6TWoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSUVlXTnJaV1JHYVdWc1pGOG9kR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWV2x1ZERNeUtYMDdYRzVxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkVacGVHVmtOalE5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXlaV0ZrVUdGamEyVmtSbWxsYkdSZktIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpGVnBiblEyTkNsOU8ycHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVUdGamEyVmtSbWw0WldRMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCMGFHbHpMbkpsWVdSUVlXTnJaV1JHYVdWc1pGOG9kR2hwY3k1a1pXTnZaR1Z5WHk1eVpXRmtWV2x1ZERZMFUzUnlhVzVuS1gwN2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JRWVdOclpXUlRabWw0WldRek1qMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5KbFlXUlFZV05yWldSR2FXVnNaRjhvZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrU1c1ME16SXBmVHRxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGQmhZMnRsWkZObWFYaGxaRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUkpiblEyTkNsOU8xeHVhbk53WWk1Q2FXNWhjbmxTWldGa1pYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSUVlXTnJaV1JUWm1sNFpXUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5KbFlXUlFZV05yWldSR2FXVnNaRjhvZEdocGN5NWtaV052WkdWeVh5NXlaV0ZrU1c1ME5qUlRkSEpwYm1jcGZUdHFjM0JpTGtKcGJtRnllVkpsWVdSbGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZCaFkydGxaRVpzYjJGMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11Y21WaFpGQmhZMnRsWkVacFpXeGtYeWgwYUdsekxtUmxZMjlrWlhKZkxuSmxZV1JHYkc5aGRDbDlPMnB6Y0dJdVFtbHVZWEo1VW1WaFpHVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1VHRmphMlZrUkc5MVlteGxQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSRWIzVmliR1VwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRkJoWTJ0bFpFSnZiMnc5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXlaV0ZrVUdGamEyVmtSbWxsYkdSZktIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFSnZiMndwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRkJoWTJ0bFpFVnVkVzA5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NXlaV0ZrVUdGamEyVmtSbWxsYkdSZktIUm9hWE11WkdWamIyUmxjbDh1Y21WaFpFVnVkVzBwZlR0Y2JtcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVUdGamEyVmtWbUZ5YVc1MFNHRnphRFkwUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUhSb2FYTXVjbVZoWkZCaFkydGxaRVpwWld4a1h5aDBhR2x6TG1SbFkyOWtaWEpmTG5KbFlXUldZWEpwYm5SSVlYTm9OalFwZlR0cWMzQmlMa0pwYm1GeWVWSmxZV1JsY2k1d2NtOTBiM1I1Y0dVdWNtVmhaRkJoWTJ0bFpFWnBlR1ZrU0dGemFEWTBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJSFJvYVhNdWNtVmhaRkJoWTJ0bFpFWnBaV3hrWHloMGFHbHpMbVJsWTI5a1pYSmZMbkpsWVdSR2FYaGxaRWhoYzJnMk5DbDlPMnB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjajFtZFc1amRHbHZiaWdwZTNSb2FYTXVZblZtWm1WeVh6MWJYWDA3YW5Od1lpNUNhVzVoY25sRmJtTnZaR1Z5TG5CeWIzUnZkSGx3WlM1c1pXNW5kR2c5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnZEdocGN5NWlkV1ptWlhKZkxteGxibWQwYUgwN2FuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNWxibVE5Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDEwYUdsekxtSjFabVpsY2w4N2RHaHBjeTVpZFdabVpYSmZQVnRkTzNKbGRIVnliaUJoZlR0Y2JtcHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQVDFOWVhSb0xtWnNiMjl5S0dFcEtUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0k5UFUxaGRHZ3VabXh2YjNJb1lpa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVlTWW1ZVHhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpJcE8yWnZjaWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXSW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeUtUc3dQR0o4ZkRFeU56eGhPeWwwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hoSmpFeU4zd3hNamdwTEdFOUtHRStQajQzZkdJOFBESTFLVDQrUGpBc1lqNCtQajAzTzNSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dFcGZUdGNibXB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlRjR3hwZEVacGVHVmtOalE5Wm5WdVkzUnBiMjRvWVN4aUtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWWowOVRXRjBhQzVtYkc5dmNpaGlLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BEMWhKaVpoUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1pazdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2d3UEQxaUppWmlQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TWlrN2RHaHBjeTUzY21sMFpWVnBiblF6TWloaEtUdDBhR2x6TG5keWFYUmxWV2x1ZERNeUtHSXBmVHRjYm1wemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZWYm5OcFoyNWxaRlpoY21sdWRETXlQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lUMDlUV0YwYUM1bWJHOXZjaWhoS1NrN1ptOXlLR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVlTWW1ZVHhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpJcE96RXlOenhoT3lsMGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoaEpqRXlOM3d4TWpncExHRStQajQ5Tnp0MGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoaEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVVWdVkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTXpJOVpuVnVZM1JwYjI0b1lTbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hoUFQxTllYUm9MbVpzYjI5eUtHRXBLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dFK1BTMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVtSm1FOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXhLVHRwWmlnd1BEMWhLWFJvYVhNdWQzSnBkR1ZWYm5OcFoyNWxaRlpoY21sdWRETXlLR0VwTzJWc2MyVjdabTl5S0haaGNpQmlQVEE3T1Q1aU8ySXJLeWwwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hoSmpFeU4zd3hNamdwTEdFK1BqMDNPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LREVwZlgwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblEyTkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVlTWW1ZVHhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpRcE8ycHpjR0l1ZFhScGJITXVjM0JzYVhSSmJuUTJOQ2hoS1R0MGFHbHpMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjc2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hQ2w5TzF4dWFuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZOcFoyNWxaRlpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lUMDlUV0YwYUM1bWJHOXZjaWhoS1NrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQajB0YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZekppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTgyTXlrN2FuTndZaTUxZEdsc2N5NXpjR3hwZEVsdWREWTBLR0VwTzNSb2FYTXVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBLR3B6Y0dJdWRYUnBiSE11YzNCc2FYUTJORXh2ZHl4cWMzQmlMblYwYVd4ekxuTndiR2wwTmpSSWFXZG9LWDA3WEc1cWMzQmlMa0pwYm1GeWVVVnVZMjlrWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME16STlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBUMU5ZWFJvTG1ac2IyOXlLR0VwS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHRStQUzFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpFbUptRThhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VkZkUFgxUlBYek14S1R0MGFHbHpMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblF6TWlnb1lUdzhNVjVoUGo0ek1TaytQajR3S1gwN2FuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZwcFozcGhaMVpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lUMDlUV0YwYUM1bWJHOXZjaWhoS1NrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQajB0YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZekppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTgyTXlrN2FuTndZaTUxZEdsc2N5NXpjR3hwZEZwcFozcGhaelkwS0dFcE8zUm9hWE11ZDNKcGRHVlRjR3hwZEZaaGNtbHVkRFkwS0dwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkV4dmR5eHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU2w3ZEdocGN5NTNjbWwwWlZwcFozcGhaMVpoY21sdWRFaGhjMmcyTkNocWMzQmlMblYwYVd4ekxtUmxZMmx0WVd4VGRISnBibWRVYjBoaGMyZzJOQ2hoS1NsOU8ycHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUklZWE5vTmpROVpuVnVZM1JwYjI0b1lTbDdkbUZ5SUdJOWRHaHBjenRxYzNCaUxuVjBhV3h6TG5Od2JHbDBTR0Z6YURZMEtHRXBPMnB6Y0dJdWRYUnBiSE11ZEc5YWFXZDZZV2MyTkNocWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzY3Nhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBTR2xuYUN4bWRXNWpkR2x2YmloaExHUXBlMkl1ZDNKcGRHVlRjR3hwZEZaaGNtbHVkRFkwS0dFK1BqNHdMR1ErUGo0d0tYMHBmVHRjYm1wemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZWYVc1ME9EMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dFOVBVMWhkR2d1Wm14dmIzSW9ZU2twTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb01EdzlZU1ltTWpVMlBtRXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0d0pqSTFOU2w5TzJwemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZWYVc1ME1UWTlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBUMU5ZWFJvTG1ac2IyOXlLR0VwS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtEQThQV0VtSmpZMU5UTTJQbUVwTzNSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dFK1BqNHdKakkxTlNrN2RHaHBjeTVpZFdabVpYSmZMbkIxYzJnb1lUNCtQamdtTWpVMUtYMDdYRzVxYzNCaUxrSnBibUZ5ZVVWdVkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxWV2x1ZERNeVBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BEMWhKaVpoUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1pazdkR2hwY3k1aWRXWm1aWEpmTG5CMWMyZ29ZVDQrUGpBbU1qVTFLVHQwYUdsekxtSjFabVpsY2w4dWNIVnphQ2hoUGo0K09DWXlOVFVwTzNSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dFK1BqNHhOaVl5TlRVcE8zUm9hWE11WW5WbVptVnlYeTV3ZFhOb0tHRStQajR5TkNZeU5UVXBmVHRxYzNCaUxrSnBibUZ5ZVVWdVkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxWV2x1ZERZMFBXWjFibU4wYVc5dUtHRXBlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQwOVRXRjBhQzVtYkc5dmNpaGhLU2s3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BEMWhKaVpoUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4Mk5Dazdhbk53WWk1MWRHbHNjeTV6Y0d4cGRGVnBiblEyTkNoaEtUdDBhR2x6TG5keWFYUmxWV2x1ZERNeUtHcHpjR0l1ZFhScGJITXVjM0JzYVhRMk5FeHZkeWs3ZEdocGN5NTNjbWwwWlZWcGJuUXpNaWhxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJJYVdkb0tYMDdYRzVxYzNCaUxrSnBibUZ5ZVVWdVkyOWtaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxTVzUwT0QxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTFRFeU9EdzlZU1ltTVRJNFBtRXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0d0pqSTFOU2w5TzJwemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZKYm5ReE5qMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dFOVBVMWhkR2d1Wm14dmIzSW9ZU2twTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb0xUTXlOelk0UEQxaEppWXpNamMyT0Q1aEtUdDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhQajQrTUNZeU5UVXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0NEpqSTFOU2w5TzF4dWFuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVsdWRETXlQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lUMDlUV0YwYUM1bWJHOXZjaWhoS1NrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQajB0YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeEppWmhQR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVNrN2RHaHBjeTVpZFdabVpYSmZMbkIxYzJnb1lUNCtQakFtTWpVMUtUdDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhQajQrT0NZeU5UVXBPM1JvYVhNdVluVm1abVZ5WHk1d2RYTm9LR0UrUGo0eE5pWXlOVFVwTzNSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dFK1BqNHlOQ1l5TlRVcGZUdGNibXB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkpiblEyTkQxbWRXNWpkR2x2YmloaEtYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0U5UFUxaGRHZ3VabXh2YjNJb1lTa3BPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvWVQ0OUxXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxODJNeVltWVR4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk5qTXBPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUkpiblEyTkNoaEtUdDBhR2x6TG5keWFYUmxVM0JzYVhSR2FYaGxaRFkwS0dwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkV4dmR5eHFjM0JpTG5WMGFXeHpMbk53YkdsME5qUklhV2RvS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFNXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU2w3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENoaFBUMU5ZWFJvTG1ac2IyOXlLR0VwS1R0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtDdGhQajB0YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZekppWXJZVHhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpNcE8ycHpjR0l1ZFhScGJITXVjM0JzYVhSSVlYTm9OalFvYW5Od1lpNTFkR2xzY3k1a1pXTnBiV0ZzVTNSeWFXNW5WRzlJWVhOb05qUW9ZU2twTzNSb2FYTXVkM0pwZEdWVGNHeHBkRVpwZUdWa05qUW9hbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzTEdwemNHSXVkWFJwYkhNdWMzQnNhWFEyTkVocFoyZ3BmVHRjYm1wemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZHYkc5aGREMW1kVzVqZEdsdmJpaGhLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0VsdVptbHVhWFI1UFQwOVlYeDhMVWx1Wm1sdWFYUjVQVDA5WVh4OGFYTk9ZVTRvWVNsOGZHRStQUzFxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1R1RFOUJWRE15WDAxQldDWW1ZVHc5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVJreFBRVlF6TWw5TlFWZ3BPMnB6Y0dJdWRYUnBiSE11YzNCc2FYUkdiRzloZERNeUtHRXBPM1JvYVhNdWQzSnBkR1ZWYVc1ME16SW9hbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBURzkzS1gwN1hHNXFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFJHOTFZbXhsUFdaMWJtTjBhVzl1S0dFcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9TVzVtYVc1cGRIazlQVDFoZkh3dFNXNW1hVzVwZEhrOVBUMWhmSHhwYzA1aFRpaGhLWHg4WVQ0OUxXcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMa1pNVDBGVU5qUmZUVUZZSmlaaFBEMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVHVEU5QlZEWTBYMDFCV0NrN2FuTndZaTUxZEdsc2N5NXpjR3hwZEVac2IyRjBOalFvWVNrN2RHaHBjeTUzY21sMFpWVnBiblF6TWlocWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzY3BPM1JvYVhNdWQzSnBkR1ZWYVc1ME16SW9hbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBTR2xuYUNsOU8ycHpjR0l1UW1sdVlYSjVSVzVqYjJSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWQ2IyOXNQV1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1hDSmliMjlzWldGdVhDSTlQVDEwZVhCbGIyWWdZWHg4WENKdWRXMWlaWEpjSWowOVBYUjVjR1Z2WmlCaEtUdDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGhQekU2TUNsOU8xeHVhbk53WWk1Q2FXNWhjbmxGYm1OdlpHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVVnVkVzA5Wm5WdVkzUnBiMjRvWVNsN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGhQVDFOWVhSb0xtWnNiMjl5S0dFcEtUdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0UrUFMxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk16RW1KbUU4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeEtUdDBhR2x6TG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTXpJb1lTbDlPMnB6Y0dJdVFtbHVZWEo1Ulc1amIyUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkNlWFJsY3oxbWRXNWpkR2x2YmloaEtYdDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDNWhjSEJzZVNoMGFHbHpMbUoxWm1abGNsOHNZU2w5TzJwemNHSXVRbWx1WVhKNVJXNWpiMlJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZXWVhKcGJuUklZWE5vTmpROVpuVnVZM1JwYjI0b1lTbDdhbk53WWk1MWRHbHNjeTV6Y0d4cGRFaGhjMmcyTkNoaEtUdDBhR2x6TG5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNocWMzQmlMblYwYVd4ekxuTndiR2wwTmpSTWIzY3Nhbk53WWk1MWRHbHNjeTV6Y0d4cGREWTBTR2xuYUNsOU8xeHVhbk53WWk1Q2FXNWhjbmxGYm1OdlpHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVWnBlR1ZrU0dGemFEWTBQV1oxYm1OMGFXOXVLR0VwZTJwemNHSXVkWFJwYkhNdWMzQnNhWFJJWVhOb05qUW9ZU2s3ZEdocGN5NTNjbWwwWlZWcGJuUXpNaWhxYzNCaUxuVjBhV3h6TG5Od2JHbDBOalJNYjNjcE8zUm9hWE11ZDNKcGRHVlZhVzUwTXpJb2FuTndZaTUxZEdsc2N5NXpjR3hwZERZMFNHbG5hQ2w5TzF4dWFuTndZaTVDYVc1aGNubEZibU52WkdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJOWRHaHBjeTVpZFdabVpYSmZMbXhsYm1kMGFDeGpQVEE3WXp4aExteGxibWQwYUR0akt5c3BlM1poY2lCa1BXRXVZMmhoY2tOdlpHVkJkQ2hqS1R0cFppZ3hNamcrWkNsMGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoa0tUdGxiSE5sSUdsbUtESXdORGcrWkNsMGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoa1BqNDJmREU1TWlrc2RHaHBjeTVpZFdabVpYSmZMbkIxYzJnb1pDWTJNM3d4TWpncE8yVnNjMlVnYVdZb05qVTFNelkrWkNscFppZzFOVEk1Tmp3OVpDWW1OVFl6TVRrK1BXUW1KbU1yTVR4aExteGxibWQwYUNsN2RtRnlJR1U5WVM1amFHRnlRMjlrWlVGMEtHTXJNU2s3TlRZek1qQThQV1VtSmpVM016UXpQajFsSmlZb1pEMHhNREkwS2loa0xUVTFNamsyS1N0bExUVTJNekl3S3pZMU5UTTJMSFJvYVhNdVluVm1abVZ5WHk1d2RYTm9LR1ErUGpFNGZESTBNQ2tzZEdocGN5NWlkV1ptWlhKZkxuQjFjMmdvWkQ0K01USW1Oak44TVRJNEtTeDBhR2x6TG1KMVptWmxjbDh1Y0hWemFDaGtQajQySmpZemZERXlPQ2tzZEdocGN5NWlkV1ptWlhKZkxuQjFjMmdvWkNZMk0zd3hNamdwTEdNckt5bDlaV3h6WlNCMGFHbHpMbUoxWm1abGNsOHVjSFZ6YUNoa1BqNWNiakV5ZkRJeU5Da3NkR2hwY3k1aWRXWm1aWEpmTG5CMWMyZ29aRDQrTmlZMk0zd3hNamdwTEhSb2FYTXVZblZtWm1WeVh5NXdkWE5vS0dRbU5qTjhNVEk0S1gxeVpYUjFjbTRnZEdocGN5NWlkV1ptWlhKZkxteGxibWQwYUMxaWZUdHFjM0JpTG1GeWFYUm9QWHQ5TzJwemNHSXVZWEpwZEdndVZVbHVkRFkwUFdaMWJtTjBhVzl1S0dFc1lpbDdkR2hwY3k1c2J6MWhPM1JvYVhNdWFHazlZbjA3YW5Od1lpNWhjbWwwYUM1VlNXNTBOalF1Y0hKdmRHOTBlWEJsTG1OdGNEMW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdkR2hwY3k1b2FUeGhMbWhwZkh4MGFHbHpMbWhwUFQxaExtaHBKaVowYUdsekxteHZQR0V1Ykc4L0xURTZkR2hwY3k1b2FUMDlZUzVvYVNZbWRHaHBjeTVzYnowOVlTNXNiejh3T2pGOU8ycHpjR0l1WVhKcGRHZ3VWVWx1ZERZMExuQnliM1J2ZEhsd1pTNXlhV2RvZEZOb2FXWjBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJRzVsZHlCcWMzQmlMbUZ5YVhSb0xsVkpiblEyTkNnb2RHaHBjeTVzYno0K1BqRjhLSFJvYVhNdWFHa21NU2s4UERNeEtUNCtQakFzZEdocGN5NW9hVDQrUGpFK1BqNHdLWDA3YW5Od1lpNWhjbWwwYUM1VlNXNTBOalF1Y0hKdmRHOTBlWEJsTG14bFpuUlRhR2xtZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCdVpYY2dhbk53WWk1aGNtbDBhQzVWU1c1ME5qUW9kR2hwY3k1c2J6dzhNVDQrUGpBc0tIUm9hWE11YUdrOFBERjhkR2hwY3k1c2J6NCtQak14S1Q0K1BqQXBmVHRjYm1wemNHSXVZWEpwZEdndVZVbHVkRFkwTG5CeWIzUnZkSGx3WlM1dGMySTlablZ1WTNScGIyNG9LWHR5WlhSMWNtNGhJU2gwYUdsekxtaHBKakl4TkRjME9ETTJORGdwZlR0cWMzQmlMbUZ5YVhSb0xsVkpiblEyTkM1d2NtOTBiM1I1Y0dVdWJITmlQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJU0VvZEdocGN5NXNieVl4S1gwN2FuTndZaTVoY21sMGFDNVZTVzUwTmpRdWNISnZkRzkwZVhCbExucGxjbTg5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnTUQwOWRHaHBjeTVzYnlZbU1EMDlkR2hwY3k1b2FYMDdhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVjSEp2ZEc5MGVYQmxMbUZrWkQxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2JtVjNJR3B6Y0dJdVlYSnBkR2d1VlVsdWREWTBLQ2gwYUdsekxteHZLMkV1Ykc4bU5ESTVORGsyTnpJNU5TaytQajR3UGo0K01Dd29LSFJvYVhNdWFHa3JZUzVvYVNZME1qazBPVFkzTWprMUtUNCtQakFwS3lnME1qazBPVFkzTWprMlBEMTBhR2x6TG14dksyRXViRzgvTVRvd0tUNCtQakFwZlR0Y2JtcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMExuQnliM1J2ZEhsd1pTNXpkV0k5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUc1bGR5QnFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DZ29kR2hwY3k1c2J5MWhMbXh2SmpReU9UUTVOamN5T1RVcFBqNCtNRDQrUGpBc0tDaDBhR2x6TG1ocExXRXVhR2ttTkRJNU5EazJOekk1TlNrK1BqNHdLUzBvTUQ1MGFHbHpMbXh2TFdFdWJHOC9NVG93S1Q0K1BqQXBmVHRxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQzV0ZFd3ek1uZ3pNajFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFdFbU5qVTFNelU3WVQ0K1BqMHhOanQyWVhJZ1pEMWlKalkxTlRNMUxHVTlZajQrUGpFMk8ySTlZeXBrS3pZMU5UTTJLaWhqS21VbU5qVTFNelVwS3pZMU5UTTJLaWhoS21RbU5qVTFNelVwTzJadmNpaGpQV0VxWlNzb1l5cGxQajQrTVRZcEt5aGhLbVErUGo0eE5pazdOREk1TkRrMk56STVOanc5WWpzcFlpMDlOREk1TkRrMk56STVOaXhqS3oweE8zSmxkSFZ5YmlCdVpYY2dhbk53WWk1aGNtbDBhQzVWU1c1ME5qUW9ZajQrUGpBc1l6NCtQakFwZlR0Y2JtcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMExuQnliM1J2ZEhsd1pTNXRkV3c5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5YW5Od1lpNWhjbWwwYUM1VlNXNTBOalF1YlhWc016SjRNeklvZEdocGN5NXNieXhoS1R0aFBXcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMExtMTFiRE15ZURNeUtIUm9hWE11YUdrc1lTazdZUzVvYVQxaExteHZPMkV1Ykc4OU1EdHlaWFIxY200Z1lpNWhaR1FvWVNsOU8xeHVhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVjSEp2ZEc5MGVYQmxMbVJwZGoxbWRXNWpkR2x2YmloaEtYdHBaaWd3UFQxaEtYSmxkSFZ5Ymx0ZE8zWmhjaUJpUFc1bGR5QnFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DZ3dMREFwTEdNOWJtVjNJR3B6Y0dJdVlYSnBkR2d1VlVsdWREWTBLSFJvYVhNdWJHOHNkR2hwY3k1b2FTazdZVDF1WlhjZ2FuTndZaTVoY21sMGFDNVZTVzUwTmpRb1lTd3dLVHRtYjNJb2RtRnlJR1E5Ym1WM0lHcHpjR0l1WVhKcGRHZ3VWVWx1ZERZMEtERXNNQ2s3SVdFdWJYTmlLQ2s3S1dFOVlTNXNaV1owVTJocFpuUW9LU3hrUFdRdWJHVm1kRk5vYVdaMEtDazdabTl5S0RzaFpDNTZaWEp2S0NrN0tUQStQV0V1WTIxd0tHTXBKaVlvWWoxaUxtRmtaQ2hrS1N4alBXTXVjM1ZpS0dFcEtTeGhQV0V1Y21sbmFIUlRhR2xtZENncExHUTlaQzV5YVdkb2RGTm9hV1owS0NrN2NtVjBkWEp1VzJJc1kxMTlPMnB6Y0dJdVlYSnBkR2d1VlVsdWREWTBMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaejFtZFc1amRHbHZiaWdwZTJadmNpaDJZWElnWVQxY0lsd2lMR0k5ZEdocGN6c2hZaTU2WlhKdktDazdLWHRpUFdJdVpHbDJLREV3S1R0MllYSWdZejFpV3pCZE8yRTlZbHN4WFM1c2J5dGhPMkk5WTMxY0lsd2lQVDFoSmlZb1lUMWNJakJjSWlrN2NtVjBkWEp1SUdGOU8xeHVhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVabkp2YlZOMGNtbHVaejFtZFc1amRHbHZiaWhoS1h0bWIzSW9kbUZ5SUdJOWJtVjNJR3B6Y0dJdVlYSnBkR2d1VlVsdWREWTBLREFzTUNrc1l6MXVaWGNnYW5Od1lpNWhjbWwwYUM1VlNXNTBOalFvTUN3d0tTeGtQVEE3WkR4aExteGxibWQwYUR0a0t5c3BlMmxtS0Z3aU1Gd2lQbUZiWkYxOGZGd2lPVndpUEdGYlpGMHBjbVYwZFhKdUlHNTFiR3c3ZG1GeUlHVTljR0Z5YzJWSmJuUW9ZVnRrWFN3eE1DazdZeTVzYnoxbE8ySTlZaTV0ZFd3b01UQXBMbUZrWkNoaktYMXlaWFIxY200Z1luMDdhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVjSEp2ZEc5MGVYQmxMbU5zYjI1bFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHNWxkeUJxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQ2gwYUdsekxteHZMSFJvYVhNdWFHa3BmVHRxYzNCaUxtRnlhWFJvTGtsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2RHaHBjeTVzYnoxaE8zUm9hWE11YUdrOVluMDdYRzVxYzNCaUxtRnlhWFJvTGtsdWREWTBMbkJ5YjNSdmRIbHdaUzVoWkdROVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHNWxkeUJxYzNCaUxtRnlhWFJvTGtsdWREWTBLQ2gwYUdsekxteHZLMkV1Ykc4bU5ESTVORGsyTnpJNU5TaytQajR3UGo0K01Dd29LSFJvYVhNdWFHa3JZUzVvYVNZME1qazBPVFkzTWprMUtUNCtQakFwS3lnME1qazBPVFkzTWprMlBEMTBhR2x6TG14dksyRXViRzgvTVRvd0tUNCtQakFwZlR0cWMzQmlMbUZ5YVhSb0xrbHVkRFkwTG5CeWIzUnZkSGx3WlM1emRXSTlablZ1WTNScGIyNG9ZU2w3Y21WMGRYSnVJRzVsZHlCcWMzQmlMbUZ5YVhSb0xrbHVkRFkwS0NoMGFHbHpMbXh2TFdFdWJHOG1OREk1TkRrMk56STVOU2srUGo0d1BqNCtNQ3dvS0hSb2FYTXVhR2t0WVM1b2FTWTBNamswT1RZM01qazFLVDQrUGpBcExTZ3dQblJvYVhNdWJHOHRZUzVzYno4eE9qQXBQajQrTUNsOU8ycHpjR0l1WVhKcGRHZ3VTVzUwTmpRdWNISnZkRzkwZVhCbExtTnNiMjVsUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUc1bGR5QnFjM0JpTG1GeWFYUm9Ma2x1ZERZMEtIUm9hWE11Ykc4c2RHaHBjeTVvYVNsOU8xeHVhbk53WWk1aGNtbDBhQzVKYm5RMk5DNXdjbTkwYjNSNWNHVXVkRzlUZEhKcGJtYzlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMHdJVDBvZEdocGN5NW9hU1l5TVRRM05EZ3pOalE0S1N4aVBXNWxkeUJxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQ2gwYUdsekxteHZMSFJvYVhNdWFHa3BPMkVtSmloaVBTaHVaWGNnYW5Od1lpNWhjbWwwYUM1VlNXNTBOalFvTUN3d0tTa3VjM1ZpS0dJcEtUdHlaWFIxY200b1lUOWNJaTFjSWpwY0lsd2lLU3RpTG5SdlUzUnlhVzVuS0NsOU8ycHpjR0l1WVhKcGRHZ3VTVzUwTmpRdVpuSnZiVk4wY21sdVp6MW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMHdQR0V1YkdWdVozUm9KaVpjSWkxY0lqMDlZVnN3WFR0aUppWW9ZVDFoTG5OMVluTjBjbWx1WnlneEtTazdZVDFxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQzVtY205dFUzUnlhVzVuS0dFcE8ybG1LRzUxYkd3OVBUMWhLWEpsZEhWeWJpQnVkV3hzTzJJbUppaGhQU2h1WlhjZ2FuTndZaTVoY21sMGFDNVZTVzUwTmpRb01Dd3dLU2t1YzNWaUtHRXBLVHR5WlhSMWNtNGdibVYzSUdwemNHSXVZWEpwZEdndVNXNTBOalFvWVM1c2J5eGhMbWhwS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJOVpuVnVZM1JwYjI0b0tYdDBhR2x6TG1Kc2IyTnJjMTg5VzEwN2RHaHBjeTUwYjNSaGJFeGxibWQwYUY4OU1EdDBhR2x6TG1WdVkyOWtaWEpmUFc1bGR5QnFjM0JpTGtKcGJtRnllVVZ1WTI5a1pYSTdkR2hwY3k1aWIyOXJiV0Z5YTNOZlBWdGRmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1WVhCd1pXNWtWV2x1ZERoQmNuSmhlVjg5Wm5WdVkzUnBiMjRvWVNsN2RtRnlJR0k5ZEdocGN5NWxibU52WkdWeVh5NWxibVFvS1R0MGFHbHpMbUpzYjJOcmMxOHVjSFZ6YUNoaUtUdDBhR2x6TG1Kc2IyTnJjMTh1Y0hWemFDaGhLVHQwYUdsekxuUnZkR0ZzVEdWdVozUm9YeXM5WWk1c1pXNW5kR2dyWVM1c1pXNW5kR2g5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExtSmxaMmx1UkdWc2FXMXBkR1ZrWHoxbWRXNWpkR2x2YmloaEtYdDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLVHRoUFhSb2FYTXVaVzVqYjJSbGNsOHVaVzVrS0NrN2RHaHBjeTVpYkc5amEzTmZMbkIxYzJnb1lTazdkR2hwY3k1MGIzUmhiRXhsYm1kMGFGOHJQV0V1YkdWdVozUm9PMkV1Y0hWemFDaDBhR2x6TG5SdmRHRnNUR1Z1WjNSb1h5azdjbVYwZFhKdUlHRjlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzVsYm1SRVpXeHBiV2wwWldSZlBXWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRXVjRzl3S0NrN1lqMTBhR2x6TG5SdmRHRnNUR1Z1WjNSb1h5dDBhR2x6TG1WdVkyOWtaWEpmTG14bGJtZDBhQ2dwTFdJN1ptOXlLR2R2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OVlpazdNVEkzUEdJN0tXRXVjSFZ6YUNoaUpqRXlOM3d4TWpncExHSStQajQ5Tnl4MGFHbHpMblJ2ZEdGc1RHVnVaM1JvWHlzck8yRXVjSFZ6YUNoaUtUdDBhR2x6TG5SdmRHRnNUR1Z1WjNSb1h5c3JmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVk5sY21saGJHbDZaV1JOWlhOellXZGxQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDBhR2x6TG1Gd2NHVnVaRlZwYm5RNFFYSnlZWGxmS0dFdWMzVmlZWEp5WVhrb1lpeGpLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1dFlYbGlaVmR5YVhSbFUyVnlhV0ZzYVhwbFpFMWxjM05oWjJVOVpuVnVZM1JwYjI0b1lTeGlMR01wZTI1MWJHd2hQV0VtSm01MWJHd2hQV0ltSm01MWJHd2hQV01tSm5Sb2FYTXVkM0pwZEdWVFpYSnBZV3hwZW1Wa1RXVnpjMkZuWlNoaExHSXNZeWw5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1eVpYTmxkRDFtZFc1amRHbHZiaWdwZTNSb2FYTXVZbXh2WTJ0elh6MWJYVHQwYUdsekxtVnVZMjlrWlhKZkxtVnVaQ2dwTzNSb2FYTXVkRzkwWVd4TVpXNW5kR2hmUFRBN2RHaHBjeTVpYjI5cmJXRnlhM05mUFZ0ZGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzVuWlhSU1pYTjFiSFJDZFdabVpYSTlablZ1WTNScGIyNG9LWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOVBYUm9hWE11WW05dmEyMWhjbXR6WHk1c1pXNW5kR2dwTzJadmNpaDJZWElnWVQxdVpYY2dWV2x1ZERoQmNuSmhlU2gwYUdsekxuUnZkR0ZzVEdWdVozUm9YeXQwYUdsekxtVnVZMjlrWlhKZkxteGxibWQwYUNncEtTeGlQWFJvYVhNdVlteHZZMnR6WHl4alBXSXViR1Z1WjNSb0xHUTlNQ3hsUFRBN1pUeGpPMlVyS3lsN2RtRnlJR1k5WWx0bFhUdGhMbk5sZENobUxHUXBPMlFyUFdZdWJHVnVaM1JvZldJOWRHaHBjeTVsYm1OdlpHVnlYeTVsYm1Rb0tUdGhMbk5sZENoaUxHUXBPMlFyUFdJdWJHVnVaM1JvTzJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1pEMDlZUzVzWlc1bmRHZ3BPM1JvYVhNdVlteHZZMnR6WHoxYllWMDdjbVYwZFhKdUlHRjlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzVuWlhSU1pYTjFiSFJDWVhObE5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlHZHZiMmN1WTNKNWNIUXVZbUZ6WlRZMExtVnVZMjlrWlVKNWRHVkJjbkpoZVNoMGFHbHpMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BMR0VwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNWlaV2RwYmxOMVlrMWxjM05oWjJVOVpuVnVZM1JwYjI0b1lTbDdkR2hwY3k1aWIyOXJiV0Z5YTNOZkxuQjFjMmdvZEdocGN5NWlaV2RwYmtSbGJHbHRhWFJsWkY4b1lTa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1Wlc1a1UzVmlUV1Z6YzJGblpUMW1kVzVqZEdsdmJpZ3BlMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblFvTUR3OWRHaHBjeTVpYjI5cmJXRnlhM05mTG14bGJtZDBhQ2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0hSb2FYTXVZbTl2YTIxaGNtdHpYeTV3YjNBb0tTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVWnBaV3hrU0dWaFpHVnlYejFtZFc1amRHbHZiaWhoTEdJcGUyZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9NVHc5WVNZbVlUMDlUV0YwYUM1bWJHOXZjaWhoS1NrN2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpJb09DcGhLMklwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVGdWVUMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2RtRnlJR1E5YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVJtbGxiR1JVZVhCbE8zTjNhWFJqYUNoaEtYdGpZWE5sSUdRdVJFOVZRa3hGT25Sb2FYTXVkM0pwZEdWRWIzVmliR1VvWWl4aktUdGljbVZoYXp0allYTmxJR1F1Umt4UFFWUTZkR2hwY3k1M2NtbDBaVVpzYjJGMEtHSXNZeWs3WW5KbFlXczdZMkZ6WlNCa0xrbE9WRFkwT25Sb2FYTXVkM0pwZEdWSmJuUTJOQ2hpTEdNcE8ySnlaV0ZyTzJOaGMyVWdaQzVWU1U1VU5qUTZkR2hwY3k1M2NtbDBaVlZwYm5RMk5DaGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNUpUbFF6TWpwMGFHbHpMbmR5YVhSbFNXNTBNeklvWWl4aktUdGljbVZoYXp0allYTmxJR1F1UmtsWVJVUTJORHAwYUdsekxuZHlhWFJsUm1sNFpXUTJOQ2hpTEdNcE8ySnlaV0ZyTzJOaGMyVWdaQzVHU1ZoRlJETXlPblJvYVhNdWQzSnBkR1ZHYVhobFpETXlLR0lzWXlrN1luSmxZV3M3WTJGelpTQmtMa0pQVDB3NmRHaHBjeTUzY21sMFpVSnZiMndvWWl4aktUdGljbVZoYXp0allYTmxJR1F1VTFSU1NVNUhPblJvYVhNdWQzSnBkR1ZUZEhKcGJtY29ZaXhqS1R0aWNtVmhhenRqWVhObElHUXVSMUpQVlZBNloyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkhjbTkxY0NCbWFXVnNaQ0IwZVhCbElHNXZkQ0J6ZFhCd2IzSjBaV1FnYVc0Z2QzSnBkR1ZCYm5rb0tWd2lLVHRjYm1KeVpXRnJPMk5oYzJVZ1pDNU5SVk5UUVVkRk9tZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lUV1Z6YzJGblpTQm1hV1ZzWkNCMGVYQmxJRzV2ZENCemRYQndiM0owWldRZ2FXNGdkM0pwZEdWQmJua29LVndpS1R0aWNtVmhhenRqWVhObElHUXVRbGxVUlZNNmRHaHBjeTUzY21sMFpVSjVkR1Z6S0dJc1l5azdZbkpsWVdzN1kyRnpaU0JrTGxWSlRsUXpNanAwYUdsekxuZHlhWFJsVldsdWRETXlLR0lzWXlrN1luSmxZV3M3WTJGelpTQmtMa1ZPVlUwNmRHaHBjeTUzY21sMFpVVnVkVzBvWWl4aktUdGljbVZoYXp0allYTmxJR1F1VTBaSldFVkVNekk2ZEdocGN5NTNjbWwwWlZObWFYaGxaRE15S0dJc1l5azdZbkpsWVdzN1kyRnpaU0JrTGxOR1NWaEZSRFkwT25Sb2FYTXVkM0pwZEdWVFptbDRaV1EyTkNoaUxHTXBPMkp5WldGck8yTmhjMlVnWkM1VFNVNVVNekk2ZEdocGN5NTNjbWwwWlZOcGJuUXpNaWhpTEdNcE8ySnlaV0ZyTzJOaGMyVWdaQzVUU1U1VU5qUTZkR2hwY3k1M2NtbDBaVk5wYm5RMk5DaGlMR01wTzJKeVpXRnJPMk5oYzJVZ1pDNUdTRUZUU0RZME9uUm9hWE11ZDNKcGRHVkdhWGhsWkVoaGMyZzJOQ2hpTEdNcE8ySnlaV0ZyTzJOaGMyVWdaQzVXU0VGVFNEWTBPblJvYVhNdWQzSnBkR1ZXWVhKcGJuUklZWE5vTmpRb1lpeGpLVHRpY21WaGF6dGtaV1poZFd4ME9tZHZiMmN1WVhOelpYSjBjeTVtWVdsc0tGd2lTVzUyWVd4cFpDQm1hV1ZzWkNCMGVYQmxJR2x1SUhkeWFYUmxRVzU1S0NsY0lpbDlmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SmZQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtIUm9hWE11ZDNKcGRHVkdhV1ZzWkVobFlXUmxjbDhvWVN4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtHSXBLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTXpKZlBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNaWhpS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZWdWMybG5ibVZrVm1GeWFXNTBOalJmUFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LSFJvYVhNdWQzSnBkR1ZHYVdWc1pFaGxZV1JsY2w4b1lTeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVYYVhKbFZIbHdaUzVXUVZKSlRsUXBMSFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZWYm5OcFoyNWxaRlpoY21sdWREWTBLR0lwS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUTJORjg5Wm5WdVkzUnBiMjRvWVN4aUtYdHVkV3hzSVQxaUppWW9kR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbFpCVWtsT1ZDa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVk5wWjI1bFpGWmhjbWx1ZERZMEtHSXBLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxXbWxuZW1GblZtRnlhVzUwTXpKZlBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUXpNaWhpS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZwcFozcGhaMVpoY21sdWREWTBYejFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxXbWxuZW1GblZtRnlhVzUwTmpRb1lpa3BmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVnBwWjNwaFoxWmhjbWx1ZERZMFUzUnlhVzVuWHoxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWgwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1VmtGU1NVNVVLU3gwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME5qUlRkSEpwYm1jb1lpa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblJJWVhOb05qUmZQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtIUm9hWE11ZDNKcGRHVkdhV1ZzWkVobFlXUmxjbDhvWVN4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNVdRVkpKVGxRcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblJJWVhOb05qUW9ZaWtwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVsdWRETXlQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZajQ5TFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1TWW1ZanhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpFcExIUm9hWE11ZDNKcGRHVlRhV2R1WldSV1lYSnBiblF6TWw4b1lTeGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERNeVUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LR0k5Y0dGeWMyVkpiblFvWWl3eE1Da3NaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2hpUGowdGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXhKaVppUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1Ta3NkR2hwY3k1M2NtbDBaVk5wWjI1bFpGWmhjbWx1ZERNeVh5aGhMR0lwS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWSmJuUTJORDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0krUFMxcWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVVWMDlmVkU5Zk5qTW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZektTeDBhR2x6TG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTmpSZktHRXNZaWtwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZKYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWhpUFdwemNHSXVZWEpwZEdndVNXNTBOalF1Wm5KdmJWTjBjbWx1WnloaUtTeDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNoaUxteHZMR0l1YUdrcEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlZhVzUwTXpJOVpuVnVZM1JwYjI0b1lTeGlLWHR1ZFd4c0lUMWlKaVlvWjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZENnd1BEMWlKaVppUEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1pa3NkR2hwY3k1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SmZLR0VzWWlrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVmFXNTBNekpUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb1lqMXdZWEp6WlVsdWRDaGlMREV3S1N4bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtEQThQV0ltSm1JOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXlLU3gwYUdsekxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNbDhvWVN4aUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWVnBiblEyTkQxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXSW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpZMEtTeDBhR2x6TG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5RMk5GOG9ZU3hpS1NsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZXbHVkRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHSTlhbk53WWk1aGNtbDBhQzVWU1c1ME5qUXVabkp2YlZOMGNtbHVaeWhpS1N4MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVZrRlNTVTVVS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUzQnNhWFJXWVhKcGJuUTJOQ2hpTG14dkxHSXVhR2twS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVTJsdWRETXlQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZajQ5TFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4ek1TWW1ZanhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTXpFcExIUm9hWE11ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblF6TWw4b1lTeGlLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVTJsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2JuVnNiQ0U5WWlZbUtHZHZiMmN1WVhOelpYSjBjeTVoYzNObGNuUW9ZajQ5TFdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsUlhUMTlVVDE4Mk15WW1ZanhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1VVYwOWZWRTlmTmpNcExIUm9hWE11ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblEyTkY4b1lTeGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVk5wYm5SSVlYTm9OalE5Wm5WdVkzUnBiMjRvWVN4aUtYdHVkV3hzSVQxaUppWjBhR2x6TG5keWFYUmxXbWxuZW1GblZtRnlhVzUwU0dGemFEWTBYeWhoTEdJcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGFXNTBOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlaMGFHbHpMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBOalJUZEhKcGJtZGZLR0VzWWlsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFJtbDRaV1F6TWoxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0RBOFBXSW1KbUk4YW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVZGZFBYMVJQWHpNeUtTeDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSa2xZUlVRek1pa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVlZwYm5Rek1paGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVVpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZ3dQRDFpSmlaaVBHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbFJYVDE5VVQxODJOQ2tzZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVmFXNTBOalFvWWlrcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVWnBlR1ZrTmpSVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHVkV3hzSVQxaUppWW9ZajFxYzNCaUxtRnlhWFJvTGxWSmJuUTJOQzVtY205dFUzUnlhVzVuS0dJcExIUm9hWE11ZDNKcGRHVkdhV1ZzWkVobFlXUmxjbDhvWVN4cWMzQmlMa0pwYm1GeWVVTnZibk4wWVc1MGN5NVhhWEpsVkhsd1pTNUdTVmhGUkRZMEtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxVM0JzYVhSR2FYaGxaRFkwS0dJdWJHOHNZaTVvYVNrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVFptbDRaV1F6TWoxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dJK1BTMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVtSm1JOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6TXhLU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUXpNaWtzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVsdWRETXlLR0lwS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVFptbDRaV1EyTkQxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dJK1BTMXFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZOak1tSm1JOGFuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWRmRQWDFSUFh6WXpLU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUTJOQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVsdWREWTBLR0lwS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVTJacGVHVmtOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb1lqMXFjM0JpTG1GeWFYUm9Ma2x1ZERZMExtWnliMjFUZEhKcGJtY29ZaWtzZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGNHeHBkRVpwZUdWa05qUW9ZaTVzYnl4aUxtaHBLU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsUm14dllYUTlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrWkpXRVZFTXpJcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVkdiRzloZENoaUtTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVUnZkV0pzWlQxbWRXNWpkR2x2YmloaExHSXBlMjUxYkd3aFBXSW1KaWgwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UmtsWVJVUTJOQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVSdmRXSnNaU2hpS1NsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFFtOXZiRDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLRndpWW05dmJHVmhibHdpUFQwOWRIbHdaVzltSUdKOGZGd2liblZ0WW1WeVhDSTlQVDEwZVhCbGIyWWdZaWtzZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVKdmIyd29ZaWtwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZGYm5WdFBXWjFibU4wYVc5dUtHRXNZaWw3Ym5Wc2JDRTlZaVltS0dkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1lqNDlMV3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxSWFQxOVVUMTh6TVNZbVlqeHFjM0JpTGtKcGJtRnllVU52Ym5OMFlXNTBjeTVVVjA5ZlZFOWZNekVwTEhSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNaWhpS1NsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFc1lpbDdiblZzYkNFOVlpWW1LR0U5ZEdocGN5NWlaV2RwYmtSbGJHbHRhWFJsWkY4b1lTa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVk4wY21sdVp5aGlLU3gwYUdsekxtVnVaRVJsYkdsdGFYUmxaRjhvWVNrcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWQ2VYUmxjejFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaGlQV3B6Y0dJdWRYUnBiSE11WW5sMFpWTnZkWEpqWlZSdlZXbHVkRGhCY25KaGVTaGlLU3gwYUdsekxuZHlhWFJsUm1sbGJHUklaV0ZrWlhKZktHRXNhbk53WWk1Q2FXNWhjbmxEYjI1emRHRnVkSE11VjJseVpWUjVjR1V1UkVWTVNVMUpWRVZFS1N4MGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFZXNXphV2R1WldSV1lYSnBiblF6TWloaUxteGxibWQwYUNrc2RHaHBjeTVoY0hCbGJtUlZhVzUwT0VGeWNtRjVYeWhpS1NsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlUxbGMzTmhaMlU5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMjUxYkd3aFBXSW1KaWhoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBMR01vWWl4MGFHbHpLU3gwYUdsekxtVnVaRVJsYkdsdGFYUmxaRjhvWVNrcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpVMWxjM05oWjJWVFpYUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUyNTFiR3doUFdJbUppaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0RFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVVMVJCVWxSZlIxSlBWVkFwTEhSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9NaXhxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1V1FWSkpUbFFwTEhSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNaWhoS1N4aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLRE1wTEdNb1lpeDBhR2x6S1N4MGFHbHpMbVZ1WkVSbGJHbHRhWFJsWkY4b1lTa3NkR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHlneExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMa1ZPUkY5SFVrOVZVQ2twZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVkeWIzVndQV1oxYm1OMGFXOXVLR0VzWWl4aktYdHVkV3hzSVQxaUppWW9kR2hwY3k1M2NtbDBaVVpwWld4a1NHVmhaR1Z5WHloaExHcHpjR0l1UW1sdVlYSjVRMjl1YzNSaGJuUnpMbGRwY21WVWVYQmxMbE5VUVZKVVgwZFNUMVZRS1N4aktHSXNkR2hwY3lrc2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrVk9SRjlIVWs5VlVDa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkdhWGhsWkVoaGMyZzJORDFtZFc1amRHbHZiaWhoTEdJcGUyNTFiR3doUFdJbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLRGc5UFdJdWJHVnVaM1JvS1N4MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJrbFlSVVEyTkNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpVWnBlR1ZrU0dGemFEWTBLR0lwS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWV1lYSnBiblJJWVhOb05qUTlablZ1WTNScGIyNG9ZU3hpS1h0dWRXeHNJVDFpSmlZb1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDZzRQVDFpTG14bGJtZDBhQ2tzZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGxaQlVrbE9WQ2tzZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlZaaGNtbHVkRWhoYzJnMk5DaGlLU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVk53YkdsMFJtbDRaV1EyTkQxbWRXNWpkR2x2YmloaExHSXNZeWw3ZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtaSldFVkVOalFwTzNSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGNHeHBkRVpwZUdWa05qUW9ZaXhqS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtUdDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNoaUxHTXBmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlRjR3hwZEZwcFozcGhaMVpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVWa0ZTU1U1VUtUdDJZWElnWkQxMGFHbHpMbVZ1WTI5a1pYSmZPMnB6Y0dJdWRYUnBiSE11ZEc5YWFXZDZZV2MyTkNoaUxHTXNablZ1WTNScGIyNG9ZU3hpS1h0a0xuZHlhWFJsVTNCc2FYUldZWEpwYm5RMk5DaGhQajQrTUN4aVBqNCtNQ2w5S1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkVsdWRETXlQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTXpKZktHRXNZbHRqWFNsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrU1c1ME16SlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWSmJuUXpNbE4wY21sdVp5aGhMR0piWTEwcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkVsdWREWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTmpSZktHRXNZbHRqWFNsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVGNHeHBkRVpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR1U5TUR0bFBHSXViR1Z1WjNSb08yVXJLeWwwYUdsekxuZHlhWFJsVTNCc2FYUkdhWGhsWkRZMEtHRXNZeWhpVzJWZEtTeGtLR0piWlYwcEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVGNHeHBkRlpoY21sdWREWTBQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJsUFRBN1pUeGlMbXhsYm1kMGFEdGxLeXNwZEdocGN5NTNjbWwwWlZOd2JHbDBWbUZ5YVc1ME5qUW9ZU3hqS0dKYlpWMHBMR1FvWWx0bFhTa3BmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlNaWEJsWVhSbFpGTndiR2wwV21sbmVtRm5WbUZ5YVc1ME5qUTlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR1U5TUR0bFBHSXViR1Z1WjNSb08yVXJLeWwwYUdsekxuZHlhWFJsVTNCc2FYUmFhV2Q2WVdkV1lYSnBiblEyTkNoaExHTW9ZbHRsWFNrc1pDaGlXMlZkS1NsOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSSmJuUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJcFptOXlLSFpoY2lCalBUQTdZenhpTG14bGJtZDBhRHRqS3lzcGRHaHBjeTUzY21sMFpVbHVkRFkwVTNSeWFXNW5LR0VzWWx0alhTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWSmxjR1ZoZEdWa1ZXbHVkRE15UFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNbDhvWVN4aVcyTmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUlZhVzUwTXpKVGRISnBibWM5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZWYVc1ME16SlRkSEpwYm1jb1lTeGlXMk5kS1gwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWU1pYQmxZWFJsWkZWcGJuUTJORDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSXBabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BkR2hwY3k1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME5qUmZLR0VzWWx0alhTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWSmxjR1ZoZEdWa1ZXbHVkRFkwVTNSeWFXNW5QV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxWV2x1ZERZMFUzUnlhVzVuS0dFc1lsdGpYU2w5TzJwemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkpsY0dWaGRHVmtVMmx1ZERNeVBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBNekpmS0dFc1lsdGpYU2w5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JUYVc1ME5qUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11ZDNKcGRHVmFhV2Q2WVdkV1lYSnBiblEyTkY4b1lTeGlXMk5kS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVW1Wd1pXRjBaV1JUYVc1ME5qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWYWFXZDZZV2RXWVhKcGJuUTJORk4wY21sdVoxOG9ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSVGFXNTBTR0Z6YURZMFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFdtbG5lbUZuVm1GeWFXNTBTR0Z6YURZMFh5aGhMR0piWTEwcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWSmxjR1ZoZEdWa1JtbDRaV1F6TWoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NTNjbWwwWlVacGVHVmtNeklvWVN4aVcyTmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUkdhWGhsWkRZMFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbmR5YVhSbFJtbDRaV1EyTkNoaExHSmJZMTBwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZTWlhCbFlYUmxaRVpwZUdWa05qUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWR2FYaGxaRFkwVTNSeWFXNW5LR0VzWWx0alhTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUlRabWw0WldRek1qMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJcFptOXlLSFpoY2lCalBUQTdZenhpTG14bGJtZDBhRHRqS3lzcGRHaHBjeTUzY21sMFpWTm1hWGhsWkRNeUtHRXNZbHRqWFNsOU8ycHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZKbGNHVmhkR1ZrVTJacGVHVmtOalE5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZUWm1sNFpXUTJOQ2hoTEdKYlkxMHBmVHRxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlNaWEJsWVhSbFpGTm1hWGhsWkRZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsVTJacGVHVmtOalJUZEhKcGJtY29ZU3hpVzJOZEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlNaWEJsWVhSbFpFWnNiMkYwUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaWxtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxuZHlhWFJsUm14dllYUW9ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSRWIzVmliR1U5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZFYjNWaWJHVW9ZU3hpVzJOZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSQ2IyOXNQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpbG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG5keWFYUmxRbTl2YkNoaExHSmJZMTBwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZTWlhCbFlYUmxaRVZ1ZFcwOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWRmJuVnRLR0VzWWx0alhTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUlRkSEpwYm1jOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpS1dadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVkM0pwZEdWVGRISnBibWNvWVN4aVcyTmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUkNlWFJsY3oxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0lwWm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NTNjbWwwWlVKNWRHVnpLR0VzWWx0alhTbDlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlQxbWRXNWpkR2x2YmloaExHSXNZeWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdROU1EdGtQR0l1YkdWdVozUm9PMlFyS3lsN2RtRnlJR1U5ZEdocGN5NWlaV2RwYmtSbGJHbHRhWFJsWkY4b1lTazdZeWhpVzJSZExIUm9hWE1wTzNSb2FYTXVaVzVrUkdWc2FXMXBkR1ZrWHlobEtYMTlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUkhjbTkxY0QxbWRXNWpkR2x2YmloaExHSXNZeWw3YVdZb2JuVnNiQ0U5WWlsbWIzSW9kbUZ5SUdROU1EdGtQR0l1YkdWdVozUm9PMlFyS3lsMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVUxUkJVbFJmUjFKUFZWQXBMR01vWWx0a1hTeDBhR2x6S1N4MGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJVNUVYMGRTVDFWUUtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVtVndaV0YwWldSR2FYaGxaRWhoYzJnMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJcFptOXlLSFpoY2lCalBUQTdZenhpTG14bGJtZDBhRHRqS3lzcGRHaHBjeTUzY21sMFpVWnBlR1ZrU0dGemFEWTBLR0VzWWx0alhTbDlPMXh1YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVbVZ3WldGMFpXUldZWEpwYm5SSVlYTm9OalE5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlLV1p2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdWQzSnBkR1ZXWVhKcGJuUklZWE5vTmpRb1lTeGlXMk5kS1gwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtTVzUwTXpJOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpSmlaaUxteGxibWQwYUNsN1lUMTBhR2x6TG1KbFoybHVSR1ZzYVcxcGRHVmtYeWhoS1R0bWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFUybG5ibVZrVm1GeWFXNTBNeklvWWx0alhTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JKYm5Rek1sTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGFXZHVaV1JXWVhKcGJuUXpNaWh3WVhKelpVbHVkQ2hpVzJOZExERXdLU2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrU1c1ME5qUTlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUppWmlMbXhsYm1kMGFDbDdZVDEwYUdsekxtSmxaMmx1UkdWc2FXMXBkR1ZrWHloaEtUdG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxVMmxuYm1Wa1ZtRnlhVzUwTmpRb1lsdGpYU2s3ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdYRzVxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlFZV05yWldSVGNHeHBkRVpwZUdWa05qUTlablZ1WTNScGIyNG9ZU3hpTEdNc1pDbDdhV1lvYm5Wc2JDRTlZaWw3WVQxMGFHbHpMbUpsWjJsdVJHVnNhVzFwZEdWa1h5aGhLVHRtYjNJb2RtRnlJR1U5TUR0bFBHSXViR1Z1WjNSb08yVXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVTNCc2FYUkdhWGhsWkRZMEtHTW9ZbHRsWFNrc1pDaGlXMlZkS1NrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1UzQnNhWFJXWVhKcGJuUTJORDFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRwWmlodWRXeHNJVDFpS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWlQwd08yVThZaTVzWlc1bmRHZzdaU3NyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBLR01vWWx0bFhTa3NaQ2hpVzJWZEtTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JUY0d4cGRGcHBaM3BoWjFaaGNtbHVkRFkwUFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJsbUtHNTFiR3doUFdJcGUyRTlkR2hwY3k1aVpXZHBia1JsYkdsdGFYUmxaRjhvWVNrN1ptOXlLSFpoY2lCbFBYUm9hWE11Wlc1amIyUmxjbDhzWmowd08yWThZaTVzWlc1bmRHZzdaaXNyS1dwemNHSXVkWFJwYkhNdWRHOWFhV2Q2WVdjMk5DaGpLR0piWmwwcExHUW9ZbHRtWFNrc1puVnVZM1JwYjI0b1lTeGlLWHRsTG5keWFYUmxVM0JzYVhSV1lYSnBiblEyTkNoaFBqNCtNQ3hpUGo0K01DbDlLVHQwYUdsekxtVnVaRVJsYkdsdGFYUmxaRjhvWVNsOWZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JKYm5RMk5GTjBjbWx1WnoxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1h0MllYSWdaRDFxYzNCaUxtRnlhWFJvTGtsdWREWTBMbVp5YjIxVGRISnBibWNvWWx0alhTazdkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVk53YkdsMFZtRnlhVzUwTmpRb1pDNXNieXhrTG1ocEtYMTBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2w5ZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRlZwYm5Rek1qMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tYdGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtHSmJZMTBwTzNSb2FYTXVaVzVrUkdWc2FXMXBkR1ZrWHloaEtYMTlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWQmhZMnRsWkZWcGJuUXpNbE4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tYdGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtIQmhjbk5sU1c1MEtHSmJZMTBzTVRBcEtUdDBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2w5ZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRlZwYm5RMk5EMW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tYdGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERZMEtHSmJZMTBwTzNSb2FYTXVaVzVrUkdWc2FXMXBkR1ZrWHloaEtYMTlPMnB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWQmhZMnRsWkZWcGJuUTJORk4wY21sdVp6MW1kVzVqZEdsdmJpaGhMR0lwZTJsbUtHNTFiR3doUFdJbUptSXViR1Z1WjNSb0tYdGhQWFJvYVhNdVltVm5hVzVFWld4cGJXbDBaV1JmS0dFcE8yWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktYdDJZWElnWkQxcWMzQmlMbUZ5YVhSb0xsVkpiblEyTkM1bWNtOXRVM1J5YVc1bktHSmJZMTBwTzNSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWVGNHeHBkRlpoY21sdWREWTBLR1F1Ykc4c1pDNW9hU2w5ZEdocGN5NWxibVJFWld4cGJXbDBaV1JmS0dFcGZYMDdYRzVxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlFZV05yWldSVGFXNTBNekk5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlKaVppTG14bGJtZDBhQ2w3WVQxMGFHbHpMbUpsWjJsdVJHVnNhVzFwZEdWa1h5aGhLVHRtYjNJb2RtRnlJR005TUR0alBHSXViR1Z1WjNSb08yTXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsV21sbmVtRm5WbUZ5YVc1ME16SW9ZbHRqWFNrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1UybHVkRFkwUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaVltWWk1c1pXNW5kR2dwZTJFOWRHaHBjeTVpWldkcGJrUmxiR2x0YVhSbFpGOG9ZU2s3Wm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlZwcFozcGhaMVpoY21sdWREWTBLR0piWTEwcE8zUm9hWE11Wlc1a1JHVnNhVzFwZEdWa1h5aGhLWDE5TzF4dWFuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtVMmx1ZERZMFUzUnlhVzVuUFdaMWJtTjBhVzl1S0dFc1lpbDdhV1lvYm5Wc2JDRTlZaVltWWk1c1pXNW5kR2dwZTJFOWRHaHBjeTVpWldkcGJrUmxiR2x0YVhSbFpGOG9ZU2s3Wm05eUtIWmhjaUJqUFRBN1l6eGlMbXhsYm1kMGFEdGpLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlZwcFozcGhaMVpoY21sdWRFaGhjMmcyTkNocWMzQmlMblYwYVd4ekxtUmxZMmx0WVd4VGRISnBibWRVYjBoaGMyZzJOQ2hpVzJOZEtTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVUdGamEyVmtVMmx1ZEVoaGMyZzJORDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LWHRoUFhSb2FYTXVZbVZuYVc1RVpXeHBiV2wwWldSZktHRXBPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZhYVdkNllXZFdZWEpwYm5SSVlYTm9OalFvWWx0alhTazdkR2hwY3k1bGJtUkVaV3hwYldsMFpXUmZLR0VwZlgwN1hHNXFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JHYVhobFpETXlQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpWW1ZaTVzWlc1bmRHZ3BabTl5S0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RVJVeEpUVWxVUlVRcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtEUXFZaTVzWlc1bmRHZ3BMR0U5TUR0aFBHSXViR1Z1WjNSb08yRXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVldsdWRETXlLR0piWVYwcGZUdHFjM0JpTGtKcGJtRnllVmR5YVhSbGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWUVlXTnJaV1JHYVhobFpEWTBQV1oxYm1OMGFXOXVLR0VzWWlsN2FXWW9iblZzYkNFOVlpWW1ZaTVzWlc1bmRHZ3BabTl5S0hSb2FYTXVkM0pwZEdWR2FXVnNaRWhsWVdSbGNsOG9ZU3hxYzNCaUxrSnBibUZ5ZVVOdmJuTjBZVzUwY3k1WGFYSmxWSGx3WlM1RVJVeEpUVWxVUlVRcExIUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlZibk5wWjI1bFpGWmhjbWx1ZERNeUtEZ3FZaTVzWlc1bmRHZ3BMR0U5TUR0aFBHSXViR1Z1WjNSb08yRXJLeWwwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVldsdWREWTBLR0piWVYwcGZUdGNibXB6Y0dJdVFtbHVZWEo1VjNKcGRHVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpWQmhZMnRsWkVacGVHVmtOalJUZEhKcGJtYzlablZ1WTNScGIyNG9ZU3hpS1h0cFppaHVkV3hzSVQxaUppWmlMbXhsYm1kMGFDbG1iM0lvZEdocGN5NTNjbWwwWlVacFpXeGtTR1ZoWkdWeVh5aGhMR3B6Y0dJdVFtbHVZWEo1UTI5dWMzUmhiblJ6TGxkcGNtVlVlWEJsTGtSRlRFbE5TVlJGUkNrc2RHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpWVnVjMmxuYm1Wa1ZtRnlhVzUwTXpJb09DcGlMbXhsYm1kMGFDa3NZVDB3TzJFOFlpNXNaVzVuZEdnN1lTc3JLWHQyWVhJZ1l6MXFjM0JpTG1GeWFYUm9MbFZKYm5RMk5DNW1jbTl0VTNSeWFXNW5LR0piWVYwcE8zUm9hWE11Wlc1amIyUmxjbDh1ZDNKcGRHVlRjR3hwZEVacGVHVmtOalFvWXk1c2J5eGpMbWhwS1gxOU8xeHVhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrVTJacGVHVmtNekk5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlKaVppTG14bGJtZDBhQ2xtYjNJb2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrUkZURWxOU1ZSRlJDa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9OQ3BpTG14bGJtZDBhQ2tzWVQwd08yRThZaTVzWlc1bmRHZzdZU3NyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWSmJuUXpNaWhpVzJGZEtYMDdhbk53WWk1Q2FXNWhjbmxYY21sMFpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFVHRmphMlZrVTJacGVHVmtOalE5Wm5WdVkzUnBiMjRvWVN4aUtYdHBaaWh1ZFd4c0lUMWlKaVppTG14bGJtZDBhQ2xtYjNJb2RHaHBjeTUzY21sMFpVWnBaV3hrU0dWaFpHVnlYeWhoTEdwemNHSXVRbWx1WVhKNVEyOXVjM1JoYm5SekxsZHBjbVZVZVhCbExrUkZURWxOU1ZSRlJDa3NkR2hwY3k1bGJtTnZaR1Z5WHk1M2NtbDBaVlZ1YzJsbmJtVmtWbUZ5YVc1ME16SW9PQ3BpTG14bGJtZDBhQ2tzWVQwd08yRThZaTVzWlc1bmRHZzdZU3NyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWSmJuUTJOQ2hpVzJGZEtYMDdYRzVxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlFZV05yWldSVFptbDRaV1EyTkZOMGNtbHVaejFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LV1p2Y2loMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1pZzRLbUl1YkdWdVozUm9LU3hoUFRBN1lUeGlMbXhsYm1kMGFEdGhLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVsdWREWTBVM1J5YVc1bktHSmJZVjBwZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkdiRzloZEQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1dadmNpaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLU3gwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNaWcwS21JdWJHVnVaM1JvS1N4aFBUQTdZVHhpTG14bGJtZDBhRHRoS3lzcGRHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpVWnNiMkYwS0dKYllWMHBmVHRjYm1wemNHSXVRbWx1WVhKNVYzSnBkR1Z5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVkJoWTJ0bFpFUnZkV0pzWlQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1dadmNpaDBhR2x6TG5keWFYUmxSbWxsYkdSSVpXRmtaWEpmS0dFc2FuTndZaTVDYVc1aGNubERiMjV6ZEdGdWRITXVWMmx5WlZSNWNHVXVSRVZNU1UxSlZFVkVLU3gwYUdsekxtVnVZMjlrWlhKZkxuZHlhWFJsVlc1emFXZHVaV1JXWVhKcGJuUXpNaWc0S21JdWJHVnVaM1JvS1N4aFBUQTdZVHhpTG14bGJtZDBhRHRoS3lzcGRHaHBjeTVsYm1OdlpHVnlYeTUzY21sMFpVUnZkV0pzWlNoaVcyRmRLWDA3YW5Od1lpNUNhVzVoY25sWGNtbDBaWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxVR0ZqYTJWa1FtOXZiRDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LV1p2Y2loMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1paGlMbXhsYm1kMGFDa3NZVDB3TzJFOFlpNXNaVzVuZEdnN1lTc3JLWFJvYVhNdVpXNWpiMlJsY2w4dWQzSnBkR1ZDYjI5c0tHSmJZVjBwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRVZ1ZFcwOVpuVnVZM1JwYjI0b1lTeGlLWHRwWmlodWRXeHNJVDFpSmlaaUxteGxibWQwYUNsN1lUMTBhR2x6TG1KbFoybHVSR1ZzYVcxcGRHVmtYeWhoS1R0bWIzSW9kbUZ5SUdNOU1EdGpQR0l1YkdWdVozUm9PMk1yS3lsMGFHbHpMbVZ1WTI5a1pYSmZMbmR5YVhSbFJXNTFiU2hpVzJOZEtUdDBhR2x6TG1WdVpFUmxiR2x0YVhSbFpGOG9ZU2w5ZlR0cWMzQmlMa0pwYm1GeWVWZHlhWFJsY2k1d2NtOTBiM1I1Y0dVdWQzSnBkR1ZRWVdOclpXUkdhWGhsWkVoaGMyZzJORDFtZFc1amRHbHZiaWhoTEdJcGUybG1LRzUxYkd3aFBXSW1KbUl1YkdWdVozUm9LV1p2Y2loMGFHbHpMbmR5YVhSbFJtbGxiR1JJWldGa1pYSmZLR0VzYW5Od1lpNUNhVzVoY25sRGIyNXpkR0Z1ZEhNdVYybHlaVlI1Y0dVdVJFVk1TVTFKVkVWRUtTeDBhR2x6TG1WdVkyOWtaWEpmTG5keWFYUmxWVzV6YVdkdVpXUldZWEpwYm5Rek1pZzRLbUl1YkdWdVozUm9LU3hoUFRBN1lUeGlMbXhsYm1kMGFEdGhLeXNwZEdocGN5NWxibU52WkdWeVh5NTNjbWwwWlVacGVHVmtTR0Z6YURZMEtHSmJZVjBwZlR0Y2JtcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZCaFkydGxaRlpoY21sdWRFaGhjMmcyTkQxbWRXNWpkR2x2YmloaExHSXBlMmxtS0c1MWJHd2hQV0ltSm1JdWJHVnVaM1JvS1h0aFBYUm9hWE11WW1WbmFXNUVaV3hwYldsMFpXUmZLR0VwTzJadmNpaDJZWElnWXowd08yTThZaTVzWlc1bmRHZzdZeXNyS1hSb2FYTXVaVzVqYjJSbGNsOHVkM0pwZEdWV1lYSnBiblJJWVhOb05qUW9ZbHRqWFNrN2RHaHBjeTVsYm1SRVpXeHBiV2wwWldSZktHRXBmWDA3YW5Od1lpNU5ZWEE5Wm5WdVkzUnBiMjRvWVN4aUtYdDBhR2x6TG1GeWNsODlZVHQwYUdsekxuWmhiSFZsUTNSdmNsODlZanQwYUdsekxtMWhjRjg5ZTMwN2RHaHBjeTVoY25KRGJHVmhiajBoTURzd1BIUm9hWE11WVhKeVh5NXNaVzVuZEdnbUpuUm9hWE11Ykc5aFpFWnliMjFCY25KaGVWOG9LWDA3YW5Od1lpNU5ZWEF1Y0hKdmRHOTBlWEJsTG14dllXUkdjbTl0UVhKeVlYbGZQV1oxYm1OMGFXOXVLQ2w3Wm05eUtIWmhjaUJoUFRBN1lUeDBhR2x6TG1GeWNsOHViR1Z1WjNSb08yRXJLeWw3ZG1GeUlHSTlkR2hwY3k1aGNuSmZXMkZkTEdNOVlsc3dYVHQwYUdsekxtMWhjRjliWXk1MGIxTjBjbWx1WnlncFhUMXVaWGNnYW5Od1lpNU5ZWEF1Ulc1MGNubGZLR01zWWxzeFhTbDlkR2hwY3k1aGNuSkRiR1ZoYmowaE1IMDdYRzVxYzNCaUxrMWhjQzV3Y205MGIzUjVjR1V1ZEc5QmNuSmhlVDFtZFc1amRHbHZiaWdwZTJsbUtIUm9hWE11WVhKeVEyeGxZVzRwZTJsbUtIUm9hWE11ZG1Gc2RXVkRkRzl5WHlsN2RtRnlJR0U5ZEdocGN5NXRZWEJmTEdJN1ptOXlLR0lnYVc0Z1lTbHBaaWhQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvWVN4aUtTbDdkbUZ5SUdNOVlWdGlYUzUyWVd4MVpWZHlZWEJ3WlhJN1l5WW1ZeTUwYjBGeWNtRjVLQ2w5ZlgxbGJITmxlM1JvYVhNdVlYSnlYeTVzWlc1bmRHZzlNRHRoUFhSb2FYTXVjM1J5YVc1blMyVjVjMThvS1R0aExuTnZjblFvS1R0bWIzSW9ZajB3TzJJOFlTNXNaVzVuZEdnN1lpc3JLWHQyWVhJZ1pEMTBhR2x6TG0xaGNGOWJZVnRpWFYwN0tHTTlaQzUyWVd4MVpWZHlZWEJ3WlhJcEppWmpMblJ2UVhKeVlYa29LVHQwYUdsekxtRnljbDh1Y0hWemFDaGJaQzVyWlhrc1pDNTJZV3gxWlYwcGZYUm9hWE11WVhKeVEyeGxZVzQ5SVRCOWNtVjBkWEp1SUhSb2FYTXVZWEp5WDMwN1hHNXFjM0JpTGsxaGNDNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUTlablZ1WTNScGIyNG9ZU3hpS1h0bWIzSW9kbUZ5SUdNOWRHaHBjeTUwYjBGeWNtRjVLQ2tzWkQxYlhTeGxQVEE3WlR4akxteGxibWQwYUR0bEt5c3BlM1poY2lCbVBYUm9hWE11YldGd1gxdGpXMlZkV3pCZExuUnZVM1J5YVc1bktDbGRPM1JvYVhNdWQzSmhjRVZ1ZEhKNVh5aG1LVHQyWVhJZ1p6MW1MblpoYkhWbFYzSmhjSEJsY2p0blB5aG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR0lwTEdRdWNIVnphQ2hiWmk1clpYa3NZaWhoTEdjcFhTa3BPbVF1Y0hWemFDaGJaaTVyWlhrc1ppNTJZV3gxWlYwcGZYSmxkSFZ5YmlCa2ZUdHFjM0JpTGsxaGNDNW1jbTl0VDJKcVpXTjBQV1oxYm1OMGFXOXVLR0VzWWl4aktYdGlQVzVsZHlCcWMzQmlMazFoY0NoYlhTeGlLVHRtYjNJb2RtRnlJR1E5TUR0a1BHRXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlZVnRrWFZzd1hTeG1QV01vWVZ0a1hWc3hYU2s3WWk1elpYUW9aU3htS1gxeVpYUjFjbTRnWW4wN2FuTndZaTVOWVhBdVFYSnlZWGxKZEdWeVlYUnZja2wwWlhKaFlteGxYejFtZFc1amRHbHZiaWhoS1h0MGFHbHpMbWxrZUY4OU1EdDBhR2x6TG1GeWNsODlZWDA3WEc1cWMzQmlMazFoY0M1QmNuSmhlVWwwWlhKaGRHOXlTWFJsY21GaWJHVmZMbkJ5YjNSdmRIbHdaUzV1WlhoMFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11YVdSNFh6eDBhR2x6TG1GeWNsOHViR1Z1WjNSb1AzdGtiMjVsT2lFeExIWmhiSFZsT25Sb2FYTXVZWEp5WDF0MGFHbHpMbWxrZUY4cksxMTlPbnRrYjI1bE9pRXdMSFpoYkhWbE9uWnZhV1FnTUgxOU8xd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJUZVcxaWIyd21KaWhxYzNCaUxrMWhjQzVCY25KaGVVbDBaWEpoZEc5eVNYUmxjbUZpYkdWZkxuQnliM1J2ZEhsd1pWdFRlVzFpYjJ3dWFYUmxjbUYwYjNKZFBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE45S1R0cWMzQmlMazFoY0M1d2NtOTBiM1I1Y0dVdVoyVjBUR1Z1WjNSb1BXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11YzNSeWFXNW5TMlY1YzE4b0tTNXNaVzVuZEdoOU8ycHpjR0l1VFdGd0xuQnliM1J2ZEhsd1pTNWpiR1ZoY2oxbWRXNWpkR2x2YmlncGUzUm9hWE11YldGd1h6MTdmVHQwYUdsekxtRnlja05zWldGdVBTRXhmVHRjYm1wemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1a1pXdzlablZ1WTNScGIyNG9ZU2w3WVQxaExuUnZVM1J5YVc1bktDazdkbUZ5SUdJOWRHaHBjeTV0WVhCZkxtaGhjMDkzYmxCeWIzQmxjblI1S0dFcE8yUmxiR1YwWlNCMGFHbHpMbTFoY0Y5YllWMDdkR2hwY3k1aGNuSkRiR1ZoYmowaE1UdHlaWFIxY200Z1luMDdhbk53WWk1TllYQXVjSEp2ZEc5MGVYQmxMbWRsZEVWdWRISjVUR2x6ZEQxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFZ0ZExHSTlkR2hwY3k1emRISnBibWRMWlhselh5Z3BPMkl1YzI5eWRDZ3BPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLWHQyWVhJZ1pEMTBhR2x6TG0xaGNGOWJZbHRqWFYwN1lTNXdkWE5vS0Z0a0xtdGxlU3hrTG5aaGJIVmxYU2w5Y21WMGRYSnVJR0Y5TzJwemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1bGJuUnlhV1Z6UFdaMWJtTjBhVzl1S0NsN2RtRnlJR0U5VzEwc1lqMTBhR2x6TG5OMGNtbHVaMHRsZVhOZktDazdZaTV6YjNKMEtDazdabTl5S0haaGNpQmpQVEE3WXp4aUxteGxibWQwYUR0akt5c3BlM1poY2lCa1BYUm9hWE11YldGd1gxdGlXMk5kWFR0aExuQjFjMmdvVzJRdWEyVjVMSFJvYVhNdWQzSmhjRVZ1ZEhKNVh5aGtLVjBwZlhKbGRIVnliaUJ1WlhjZ2FuTndZaTVOWVhBdVFYSnlZWGxKZEdWeVlYUnZja2wwWlhKaFlteGxYeWhoS1gwN1hHNXFjM0JpTGsxaGNDNXdjbTkwYjNSNWNHVXVhMlY1Y3oxbWRXNWpkR2x2YmlncGUzWmhjaUJoUFZ0ZExHSTlkR2hwY3k1emRISnBibWRMWlhselh5Z3BPMkl1YzI5eWRDZ3BPMlp2Y2loMllYSWdZejB3TzJNOFlpNXNaVzVuZEdnN1l5c3JLV0V1Y0hWemFDaDBhR2x6TG0xaGNGOWJZbHRqWFYwdWEyVjVLVHR5WlhSMWNtNGdibVYzSUdwemNHSXVUV0Z3TGtGeWNtRjVTWFJsY21GMGIzSkpkR1Z5WVdKc1pWOG9ZU2w5TzJwemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1MllXeDFaWE05Wm5WdVkzUnBiMjRvS1h0MllYSWdZVDFiWFN4aVBYUm9hWE11YzNSeWFXNW5TMlY1YzE4b0tUdGlMbk52Y25Rb0tUdG1iM0lvZG1GeUlHTTlNRHRqUEdJdWJHVnVaM1JvTzJNckt5bGhMbkIxYzJnb2RHaHBjeTUzY21Gd1JXNTBjbmxmS0hSb2FYTXViV0Z3WDF0aVcyTmRYU2twTzNKbGRIVnliaUJ1WlhjZ2FuTndZaTVOWVhBdVFYSnlZWGxKZEdWeVlYUnZja2wwWlhKaFlteGxYeWhoS1gwN1hHNXFjM0JpTGsxaGNDNXdjbTkwYjNSNWNHVXVabTl5UldGamFEMW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQWFJvYVhNdWMzUnlhVzVuUzJWNWMxOG9LVHRqTG5OdmNuUW9LVHRtYjNJb2RtRnlJR1E5TUR0a1BHTXViR1Z1WjNSb08yUXJLeWw3ZG1GeUlHVTlkR2hwY3k1dFlYQmZXMk5iWkYxZE8yRXVZMkZzYkNoaUxIUm9hWE11ZDNKaGNFVnVkSEo1WHlobEtTeGxMbXRsZVN4MGFHbHpLWDE5TzJwemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1elpYUTlablZ1WTNScGIyNG9ZU3hpS1h0MllYSWdZejF1WlhjZ2FuTndZaTVOWVhBdVJXNTBjbmxmS0dFcE8zUm9hWE11ZG1Gc2RXVkRkRzl5WHo4b1l5NTJZV3gxWlZkeVlYQndaWEk5WWl4akxuWmhiSFZsUFdJdWRHOUJjbkpoZVNncEtUcGpMblpoYkhWbFBXSTdkR2hwY3k1dFlYQmZXMkV1ZEc5VGRISnBibWNvS1YwOVl6dDBhR2x6TG1GeWNrTnNaV0Z1UFNFeE8zSmxkSFZ5YmlCMGFHbHpmVHRxYzNCaUxrMWhjQzV3Y205MGIzUjVjR1V1ZDNKaGNFVnVkSEo1WHoxbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z2RHaHBjeTUyWVd4MVpVTjBiM0pmUHloaExuWmhiSFZsVjNKaGNIQmxjbng4S0dFdWRtRnNkV1ZYY21Gd2NHVnlQVzVsZHlCMGFHbHpMblpoYkhWbFEzUnZjbDhvWVM1MllXeDFaU2twTEdFdWRtRnNkV1ZYY21Gd2NHVnlLVHBoTG5aaGJIVmxmVHRjYm1wemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1blpYUTlablZ1WTNScGIyNG9ZU2w3YVdZb1lUMTBhR2x6TG0xaGNGOWJZUzUwYjFOMGNtbHVaeWdwWFNseVpYUjFjbTRnZEdocGN5NTNjbUZ3Ulc1MGNubGZLR0VwZlR0cWMzQmlMazFoY0M1d2NtOTBiM1I1Y0dVdWFHRnpQV1oxYm1OMGFXOXVLR0VwZTNKbGRIVnliaUJoTG5SdlUzUnlhVzVuS0NscGJpQjBhR2x6TG0xaGNGOTlPMnB6Y0dJdVRXRndMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNuazlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxLWHQyWVhJZ1pqMTBhR2x6TG5OMGNtbHVaMHRsZVhOZktDazdaaTV6YjNKMEtDazdabTl5S0haaGNpQm5QVEE3Wnp4bUxteGxibWQwYUR0bkt5c3BlM1poY2lCb1BYUm9hWE11YldGd1gxdG1XMmRkWFR0aUxtSmxaMmx1VTNWaVRXVnpjMkZuWlNoaEtUdGpMbU5oYkd3b1lpd3hMR2d1YTJWNUtUdDBhR2x6TG5aaGJIVmxRM1J2Y2w4L1pDNWpZV3hzS0dJc01peDBhR2x6TG5keVlYQkZiblJ5ZVY4b2FDa3NaU2s2WkM1allXeHNLR0lzTWl4b0xuWmhiSFZsS1R0aUxtVnVaRk4xWWsxbGMzTmhaMlVvS1gxOU8xeHVhbk53WWk1TllYQXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNuazlablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxMR1lzWnlsN1ptOXlLRHRpTG01bGVIUkdhV1ZzWkNncEppWWhZaTVwYzBWdVpFZHliM1Z3S0NrN0tYdDJZWElnYUQxaUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN01UMDlhRDltUFdNdVkyRnNiQ2hpS1RveVBUMW9KaVlvWVM1MllXeDFaVU4wYjNKZlB5aG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLR1VwTEdkOGZDaG5QVzVsZHlCaExuWmhiSFZsUTNSdmNsOHBMR1F1WTJGc2JDaGlMR2NzWlNrcE9tYzlaQzVqWVd4c0tHSXBLWDFuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0hadmFXUWdNQ0U5WmlrN1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaDJiMmxrSURBaFBXY3BPMkV1YzJWMEtHWXNaeWw5TzJwemNHSXVUV0Z3TG5CeWIzUnZkSGx3WlM1emRISnBibWRMWlhselh6MW1kVzVqZEdsdmJpZ3BlM1poY2lCaFBYUm9hWE11YldGd1h5eGlQVnRkTEdNN1ptOXlLR01nYVc0Z1lTbFBZbXBsWTNRdWNISnZkRzkwZVhCbExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29ZU3hqS1NZbVlpNXdkWE5vS0dNcE8zSmxkSFZ5YmlCaWZUdGNibXB6Y0dJdVRXRndMa1Z1ZEhKNVh6MW1kVzVqZEdsdmJpaGhMR0lwZTNSb2FYTXVhMlY1UFdFN2RHaHBjeTUyWVd4MVpUMWlPM1JvYVhNdWRtRnNkV1ZYY21Gd2NHVnlQWFp2YVdRZ01IMDdhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRWx1Wm04OVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bEtYdDBhR2x6TG1acFpXeGtTVzVrWlhnOVlUdDBhR2x6TG1acFpXeGtUbUZ0WlQxaU8zUm9hWE11WTNSdmNqMWpPM1JvYVhNdWRHOVBZbXBsWTNSR2JqMWtPM1JvYVhNdWFYTlNaWEJsWVhSbFpEMWxmVHRxYzNCaUxrVjRkR1Z1YzJsdmJrWnBaV3hrUW1sdVlYSjVTVzVtYnoxbWRXNWpkR2x2YmloaExHSXNZeXhrTEdVc1ppbDdkR2hwY3k1bWFXVnNaRWx1Wm04OVlUdDBhR2x6TG1KcGJtRnllVkpsWVdSbGNrWnVQV0k3ZEdocGN5NWlhVzVoY25sWGNtbDBaWEpHYmoxak8zUm9hWE11WW1sdVlYSjVUV1Z6YzJGblpWTmxjbWxoYkdsNlpVWnVQV1E3ZEdocGN5NWlhVzVoY25sTlpYTnpZV2RsUkdWelpYSnBZV3hwZW1WR2JqMWxPM1JvYVhNdWFYTlFZV05yWldROVpuMDdhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRWx1Wm04dWNISnZkRzkwZVhCbExtbHpUV1Z6YzJGblpWUjVjR1U5Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRoSVhSb2FYTXVZM1J2Y24wN2FuTndZaTVOWlhOellXZGxQV1oxYm1OMGFXOXVLQ2w3ZlR0cWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVQU0V3TzJwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOUdVazlOWDA5Q1NrVkRWRDBoWjI5dlp5NUVTVk5CVEV4UFYxOVVSVk5VWDA5T1RGbGZRMDlFUlR0Y2JtcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5VFZGSkpUa2M5SVRBN2FuTndZaTVOWlhOellXZGxMa0ZUVTFWTlJWOU1UME5CVEY5QlVsSkJXVk05SVRFN2FuTndZaTVOWlhOellXZGxMbE5GVWtsQlRFbGFSVjlGVFZCVVdWOVVVa0ZKVEVsT1IxOUdTVVZNUkZNOUlUQTdhbk53WWk1TlpYTnpZV2RsTGxOVlVGQlBVbFJUWDFWSlRsUTRRVkpTUVZsZlBWd2lablZ1WTNScGIyNWNJajA5ZEhsd1pXOW1JRlZwYm5RNFFYSnlZWGs3YW5Od1lpNU5aWE56WVdkbExuQnliM1J2ZEhsd1pTNW5aWFJLYzFCaVRXVnpjMkZuWlVsa1BXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlIUm9hWE11YldWemMyRm5aVWxrWDMwN2FuTndZaTVOWlhOellXZGxMbWRsZEVsdVpHVjRYejFtZFc1amRHbHZiaWhoTEdJcGUzSmxkSFZ5YmlCaUsyRXVZWEp5WVhsSmJtUmxlRTltWm5ObGRGOTlPMnB6Y0dJdVRXVnpjMkZuWlM1b2FXUmtaVzVGVXpaUWNtOXdaWEowZVY4OVpuVnVZM1JwYjI0b0tYdDlPMnB6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkU1MWJXSmxjbDg5Wm5WdVkzUnBiMjRvWVN4aUtYdHlaWFIxY200Z1lpMWhMbUZ5Y21GNVNXNWtaWGhQWm1aelpYUmZmVHRjYm1wemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxQV1oxYm1OMGFXOXVLR0VzWWl4akxHUXNaU3htS1h0aExuZHlZWEJ3WlhKelh6MXVkV3hzTzJKOGZDaGlQV00vVzJOZE9sdGRLVHRoTG0xbGMzTmhaMlZKWkY4OVl6OVRkSEpwYm1jb1l5azZkbTlwWkNBd08yRXVZWEp5WVhsSmJtUmxlRTltWm5ObGRGODlNRDA5UFdNL0xURTZNRHRoTG1GeWNtRjVQV0k3YW5Od1lpNU5aWE56WVdkbExtbHVhWFJRYVhadmRFRnVaRVY0ZEdWdWMybHZiazlpYW1WamRGOG9ZU3hrS1R0aExtTnZiblpsY25SbFpGQnlhVzFwZEdsMlpVWnBaV3hrYzE4OWUzMDdhbk53WWk1TlpYTnpZV2RsTGxORlVrbEJURWxhUlY5RlRWQlVXVjlVVWtGSlRFbE9SMTlHU1VWTVJGTjhmQ2hoTG5KbGNHVmhkR1ZrUm1sbGJHUnpQV1VwTzJsbUtHVXBabTl5S0dJOU1EdGlQR1V1YkdWdVozUm9PMklyS3lsalBXVmJZbDBzWXp4aExuQnBkbTkwWHo4b1l6MXFjM0JpTGsxbGMzTmhaMlV1WjJWMFNXNWtaWGhmS0dFc1l5a3NZUzVoY25KaGVWdGpYVDFoTG1GeWNtRjVXMk5kZkh4cWMzQmlMazFsYzNOaFoyVXVSVTFRVkZsZlRFbFRWRjlUUlU1VVNVNUZURjhwT2locWMzQmlMazFsYzNOaFoyVXViV0Y1WW1WSmJtbDBSVzF3ZEhsRmVIUmxibk5wYjI1UFltcGxZM1JmS0dFcExHRXVaWGgwWlc1emFXOXVUMkpxWldOMFgxdGpYVDFjYm1FdVpYaDBaVzV6YVc5dVQySnFaV04wWDF0alhYeDhhbk53WWk1TlpYTnpZV2RsTGtWTlVGUlpYMHhKVTFSZlUwVk9WRWxPUlV4ZktUdHBaaWhtSmlabUxteGxibWQwYUNsbWIzSW9ZajB3TzJJOFppNXNaVzVuZEdnN1lpc3JLV3B6Y0dJdVRXVnpjMkZuWlM1amIyMXdkWFJsVDI1bGIyWkRZWE5sS0dFc1psdGlYU2w5TzJwemNHSXVUV1Z6YzJGblpTNUZUVkJVV1Y5TVNWTlVYMU5GVGxSSlRrVk1YejFuYjI5bkxrUkZRbFZISmlaUFltcGxZM1F1Wm5KbFpYcGxQMDlpYW1WamRDNW1jbVZsZW1Vb1cxMHBPbHRkTzJwemNHSXVUV1Z6YzJGblpTNXBjMEZ5Y21GNVh6MW1kVzVqZEdsdmJpaGhLWHR5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTGtGVFUxVk5SVjlNVDBOQlRGOUJVbEpCV1ZNL1lTQnBibk4wWVc1alpXOW1JRUZ5Y21GNU9rRnljbUY1TG1selFYSnlZWGtvWVNsOU8ycHpjR0l1VFdWemMyRm5aUzVwYzBWNGRHVnVjMmx2Yms5aWFtVmpkRjg5Wm5WdVkzUnBiMjRvWVNsN2NtVjBkWEp1SUc1MWJHd2hQVDFoSmlaY0ltOWlhbVZqZEZ3aVBUMTBlWEJsYjJZZ1lTWW1JV3B6Y0dJdVRXVnpjMkZuWlM1cGMwRnljbUY1WHloaEtTWW1JU2hxYzNCaUxrMWxjM05oWjJVdVUxVlFVRTlTVkZOZlZVbE9WRGhCVWxKQldWOG1KbUVnYVc1emRHRnVZMlZ2WmlCVmFXNTBPRUZ5Y21GNUtYMDdYRzVxYzNCaUxrMWxjM05oWjJVdWFXNXBkRkJwZG05MFFXNWtSWGgwWlc1emFXOXVUMkpxWldOMFh6MW1kVzVqZEdsdmJpaGhMR0lwZTNaaGNpQmpQV0V1WVhKeVlYa3ViR1Z1WjNSb0xHUTlMVEU3YVdZb1l5WW1LR1E5WXkweExHTTlZUzVoY25KaGVWdGtYU3hxYzNCaUxrMWxjM05oWjJVdWFYTkZlSFJsYm5OcGIyNVBZbXBsWTNSZktHTXBLU2w3WVM1d2FYWnZkRjg5YW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1RuVnRZbVZ5WHloaExHUXBPMkV1WlhoMFpXNXphVzl1VDJKcVpXTjBYejFqTzNKbGRIVnlibjB0TVR4aVB5aGhMbkJwZG05MFh6MU5ZWFJvTG0xaGVDaGlMR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkU1MWJXSmxjbDhvWVN4a0t6RXBLU3hoTG1WNGRHVnVjMmx2Yms5aWFtVmpkRjg5Ym5Wc2JDazZZUzV3YVhadmRGODlUblZ0WW1WeUxrMUJXRjlXUVV4VlJYMDdhbk53WWk1TlpYTnpZV2RsTG0xaGVXSmxTVzVwZEVWdGNIUjVSWGgwWlc1emFXOXVUMkpxWldOMFh6MW1kVzVqZEdsdmJpaGhLWHQyWVhJZ1lqMXFjM0JpTGsxbGMzTmhaMlV1WjJWMFNXNWtaWGhmS0dFc1lTNXdhWFp2ZEY4cE8yRXVZWEp5WVhsYllsMThmQ2hoTG1WNGRHVnVjMmx2Yms5aWFtVmpkRjg5WVM1aGNuSmhlVnRpWFQxN2ZTbDlPMXh1YW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdabTl5S0haaGNpQmtQVnRkTEdVOU1EdGxQR0V1YkdWdVozUm9PMlVyS3lsa1cyVmRQV0l1WTJGc2JDaGhXMlZkTEdNc1lWdGxYU2s3Y21WMGRYSnVJR1I5TzJwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFVjRkR1Z1YzJsdmJqMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0xHVXBlMlp2Y2loMllYSWdaaUJwYmlCaktYdDJZWElnWnoxalcyWmRMR2c5WkM1allXeHNLR0VzWnlrN2FXWW9iblZzYkNFOWFDbDdabTl5S0haaGNpQnJJR2x1SUdjdVptbGxiR1JPWVcxbEtXbG1LR2N1Wm1sbGJHUk9ZVzFsTG1oaGMwOTNibEJ5YjNCbGNuUjVLR3NwS1dKeVpXRnJPMkpiYTEwOVp5NTBiMDlpYW1WamRFWnVQMmN1YVhOU1pYQmxZWFJsWkQ5cWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0dnc1p5NTBiMDlpYW1WamRFWnVMR1VwT21jdWRHOVBZbXBsWTNSR2JpaGxMR2dwT21oOWZYMDdYRzVxYzNCaUxrMWxjM05oWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1UlhoMFpXNXphVzl1Y3oxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0bWIzSW9kbUZ5SUdVZ2FXNGdZeWw3ZG1GeUlHWTlZMXRsWFN4blBXWXVabWxsYkdSSmJtWnZPMmxtS0NGbUxtSnBibUZ5ZVZkeWFYUmxja1p1S1hSb2NtOTNJRVZ5Y205eUtGd2lUV1Z6YzJGblpTQmxlSFJsYm5OcGIyNGdjSEpsYzJWdWRDQjBhR0YwSUhkaGN5Qm5aVzVsY21GMFpXUWdkMmwwYUc5MWRDQmlhVzVoY25rZ2MyVnlhV0ZzYVhwaGRHbHZiaUJ6ZFhCd2IzSjBYQ0lwTzNaaGNpQm9QV1F1WTJGc2JDaGhMR2NwTzJsbUtHNTFiR3doUFdncGFXWW9aeTVwYzAxbGMzTmhaMlZVZVhCbEtDa3BhV1lvWmk1aWFXNWhjbmxOWlhOellXZGxVMlZ5YVdGc2FYcGxSbTRwWmk1aWFXNWhjbmxYY21sMFpYSkdiaTVqWVd4c0tHSXNaeTVtYVdWc1pFbHVaR1Y0TEdnc1ppNWlhVzVoY25sTlpYTnpZV2RsVTJWeWFXRnNhWHBsUm00cE8yVnNjMlVnZEdoeWIzY2dSWEp5YjNJb1hDSk5aWE56WVdkbElHVjRkR1Z1YzJsdmJpQndjbVZ6Wlc1MElHaHZiR1JwYm1jZ2MzVmliV1Z6YzJGblpTQjNhWFJvYjNWMElHSnBibUZ5ZVNCemRYQndiM0owSUdWdVlXSnNaV1FzSUdGdVpDQnRaWE56WVdkbElHbHpJR0psYVc1bklITmxjbWxoYkdsNlpXUWdkRzhnWW1sdVlYSjVJR1p2Y20xaGRGd2lLVHRjYm1Wc2MyVWdaaTVpYVc1aGNubFhjbWwwWlhKR2JpNWpZV3hzS0dJc1p5NW1hV1ZzWkVsdVpHVjRMR2dwZlgwN2FuTndZaTVOWlhOellXZGxMbkpsWVdSQ2FXNWhjbmxGZUhSbGJuTnBiMjQ5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ3hsS1h0MllYSWdaajFqVzJJdVoyVjBSbWxsYkdST2RXMWlaWElvS1YwN2FXWW9aaWw3WXoxbUxtWnBaV3hrU1c1bWJ6dHBaaWdoWmk1aWFXNWhjbmxTWldGa1pYSkdiaWwwYUhKdmR5QkZjbkp2Y2loY0lrUmxjMlZ5YVdGc2FYcHBibWNnWlhoMFpXNXphVzl1SUhkb2IzTmxJR2RsYm1WeVlYUmxaQ0JqYjJSbElHUnZaWE1nYm05MElITjFjSEJ2Y25RZ1ltbHVZWEo1SUdadmNtMWhkRndpS1R0cFppaGpMbWx6VFdWemMyRm5aVlI1Y0dVb0tTbDdkbUZ5SUdjOWJtVjNJR011WTNSdmNqdG1MbUpwYm1GeWVWSmxZV1JsY2tadUxtTmhiR3dvWWl4bkxHWXVZbWx1WVhKNVRXVnpjMkZuWlVSbGMyVnlhV0ZzYVhwbFJtNHBmV1ZzYzJVZ1p6MW1MbUpwYm1GeWVWSmxZV1JsY2tadUxtTmhiR3dvWWlrN1l5NXBjMUpsY0dWaGRHVmtKaVloWmk1cGMxQmhZMnRsWkQ4b1lqMWtMbU5oYkd3b1lTeGpLU2svWWk1d2RYTm9LR2NwT21VdVkyRnNiQ2hoTEdNc1cyZGRLVHBsTG1OaGJHd29ZU3hqTEdjcGZXVnNjMlVnWWk1emEybHdSbWxsYkdRb0tYMDdYRzVxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlLWHRwWmloaVBHRXVjR2wyYjNSZktYdGlQV3B6Y0dJdVRXVnpjMkZuWlM1blpYUkpibVJsZUY4b1lTeGlLVHQyWVhJZ1l6MWhMbUZ5Y21GNVcySmRPM0psZEhWeWJpQmpQVDA5YW5Od1lpNU5aWE56WVdkbExrVk5VRlJaWDB4SlUxUmZVMFZPVkVsT1JVeGZQMkV1WVhKeVlYbGJZbDA5VzEwNlkzMXBaaWhoTG1WNGRHVnVjMmx2Yms5aWFtVmpkRjhwY21WMGRYSnVJR005WVM1bGVIUmxibk5wYjI1UFltcGxZM1JmVzJKZExHTTlQVDFxYzNCaUxrMWxjM05oWjJVdVJVMVFWRmxmVEVsVFZGOVRSVTVVU1U1RlRGOC9ZUzVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkUFZ0ZE9tTjlPMnB6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpFWnBaV3hrUFdaMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2hoTEdJcGZUdHFjM0JpTGsxbGMzTmhaMlV1WjJWMFQzQjBhVzl1WVd4R2JHOWhkR2x1WjFCdmFXNTBSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlLWHRoUFdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaGhMR0lwTzNKbGRIVnliaUJ1ZFd4c1BUMWhQMkU2SzJGOU8xeHVhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJcGUyRTlhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0dFc1lpazdjbVYwZFhKdUlHNTFiR3c5UFdFL1lUb2hJV0Y5TzJwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRVpzYjJGMGFXNW5VRzlwYm5SR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJcGUzWmhjaUJqUFdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRVpwWld4a0tHRXNZaWs3WVM1amIyNTJaWEowWldSUWNtbHRhWFJwZG1WR2FXVnNaSE5mZkh3b1lTNWpiMjUyWlhKMFpXUlFjbWx0YVhScGRtVkdhV1ZzWkhOZlBYdDlLVHRwWmlnaFlTNWpiMjUyWlhKMFpXUlFjbWx0YVhScGRtVkdhV1ZzWkhOZlcySmRLWHRtYjNJb2RtRnlJR1E5TUR0a1BHTXViR1Z1WjNSb08yUXJLeWxqVzJSZFBTdGpXMlJkTzJFdVkyOXVkbVZ5ZEdWa1VISnBiV2wwYVhabFJtbGxiR1J6WDF0aVhUMGhNSDF5WlhSMWNtNGdZMzA3WEc1cWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JDYjI5c1pXRnVSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlLWHQyWVhJZ1l6MXFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2hoTEdJcE8yRXVZMjl1ZG1WeWRHVmtVSEpwYldsMGFYWmxSbWxsYkdSelgzeDhLR0V1WTI5dWRtVnlkR1ZrVUhKcGJXbDBhWFpsUm1sbGJHUnpYejE3ZlNrN2FXWW9JV0V1WTI5dWRtVnlkR1ZrVUhKcGJXbDBhWFpsUm1sbGJHUnpYMXRpWFNsN1ptOXlLSFpoY2lCa1BUQTdaRHhqTG14bGJtZDBhRHRrS3lzcFkxdGtYVDBoSVdOYlpGMDdZUzVqYjI1MlpYSjBaV1JRY21sdGFYUnBkbVZHYVdWc1pITmZXMkpkUFNFd2ZYSmxkSFZ5YmlCamZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1aWVYUmxjMEZ6UWpZMFBXWjFibU4wYVc5dUtHRXBlMmxtS0c1MWJHdzlQV0Y4ZkZ3aWMzUnlhVzVuWENJOVBUMTBlWEJsYjJZZ1lTbHlaWFIxY200Z1lUdHBaaWhxYzNCaUxrMWxjM05oWjJVdVUxVlFVRTlTVkZOZlZVbE9WRGhCVWxKQldWOG1KbUVnYVc1emRHRnVZMlZ2WmlCVmFXNTBPRUZ5Y21GNUtYSmxkSFZ5YmlCbmIyOW5MbU55ZVhCMExtSmhjMlUyTkM1bGJtTnZaR1ZDZVhSbFFYSnlZWGtvWVNrN1oyOXZaeTVoYzNObGNuUnpMbVpoYVd3b1hDSkRZVzV1YjNRZ1kyOWxjbU5sSUhSdklHSTJOQ0J6ZEhKcGJtYzZJRndpSzJkdmIyY3VkSGx3WlU5bUtHRXBLVHR5WlhSMWNtNGdiblZzYkgwN2FuTndZaTVOWlhOellXZGxMbUo1ZEdWelFYTlZPRDFtZFc1amRHbHZiaWhoS1h0cFppaHVkV3hzUFQxaGZIeGhJR2x1YzNSaGJtTmxiMllnVldsdWREaEJjbkpoZVNseVpYUjFjbTRnWVR0cFppaGNJbk4wY21sdVoxd2lQVDA5ZEhsd1pXOW1JR0VwY21WMGRYSnVJR2R2YjJjdVkzSjVjSFF1WW1GelpUWTBMbVJsWTI5a1pWTjBjbWx1WjFSdlZXbHVkRGhCY25KaGVTaGhLVHRuYjI5bkxtRnpjMlZ5ZEhNdVptRnBiQ2hjSWtOaGJtNXZkQ0JqYjJWeVkyVWdkRzhnVldsdWREaEJjbkpoZVRvZ1hDSXJaMjl2Wnk1MGVYQmxUMllvWVNrcE8zSmxkSFZ5YmlCdWRXeHNmVHRjYm1wemNHSXVUV1Z6YzJGblpTNWllWFJsYzB4cGMzUkJjMEkyTkQxbWRXNWpkR2x2YmloaEtYdHFjM0JpTGsxbGMzTmhaMlV1WVhOelpYSjBRMjl1YzJsemRHVnVkRlI1Y0dWelh5aGhLVHR5WlhSMWNtNGdZUzVzWlc1bmRHZ21KbHdpYzNSeWFXNW5YQ0loUFQxMGVYQmxiMllnWVZzd1hUOW5iMjluTG1GeWNtRjVMbTFoY0NoaExHcHpjR0l1VFdWemMyRm5aUzVpZVhSbGMwRnpRalkwS1RwaGZUdHFjM0JpTGsxbGMzTmhaMlV1WW5sMFpYTk1hWE4wUVhOVk9EMW1kVzVqZEdsdmJpaGhLWHRxYzNCaUxrMWxjM05oWjJVdVlYTnpaWEowUTI5dWMybHpkR1Z1ZEZSNWNHVnpYeWhoS1R0eVpYUjFjbTRoWVM1c1pXNW5kR2g4ZkdGYk1GMXBibk4wWVc1alpXOW1JRlZwYm5RNFFYSnlZWGsvWVRwbmIyOW5MbUZ5Y21GNUxtMWhjQ2hoTEdwemNHSXVUV1Z6YzJGblpTNWllWFJsYzBGelZUZ3BmVHRjYm1wemNHSXVUV1Z6YzJGblpTNWhjM05sY25SRGIyNXphWE4wWlc1MFZIbHdaWE5mUFdaMWJtTjBhVzl1S0dFcGUybG1LR2R2YjJjdVJFVkNWVWNtSm1FbUpqRThZUzVzWlc1bmRHZ3BlM1poY2lCaVBXZHZiMmN1ZEhsd1pVOW1LR0ZiTUYwcE8yZHZiMmN1WVhKeVlYa3VabTl5UldGamFDaGhMR1oxYm1OMGFXOXVLR0VwZTJkdmIyY3VkSGx3WlU5bUtHRXBJVDFpSmlabmIyOW5MbUZ6YzJWeWRITXVabUZwYkNoY0lrbHVZMjl1YzJsemRHVnVkQ0IwZVhCbElHbHVJRXBUVUVJZ2NtVndaV0YwWldRZ1ptbGxiR1FnWVhKeVlYa3VJRWR2ZENCY0lpdG5iMjluTG5SNWNHVlBaaWhoS1N0Y0lpQmxlSEJsWTNSbFpDQmNJaXRpS1gwcGZYMDdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJFOWFuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLR0VzWWlrN2NtVjBkWEp1SUc1MWJHdzlQV0UvWXpwaGZUdHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFE5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkU5YW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkNoaExHSXBPM0psZEhWeWJpQnVkV3hzUFQxaFAyTTZZWDA3WEc1cWMzQmlMazFsYzNOaFoyVXVaMlYwUm14dllYUnBibWRRYjJsdWRFWnBaV3hrVjJsMGFFUmxabUYxYkhROVpuVnVZM1JwYjI0b1lTeGlMR01wZTJFOWFuTndZaTVOWlhOellXZGxMbWRsZEU5d2RHbHZibUZzUm14dllYUnBibWRRYjJsdWRFWnBaV3hrS0dFc1lpazdjbVYwZFhKdUlHNTFiR3c5UFdFL1l6cGhmVHRxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSUWNtOTBiek05YW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUTdhbk53WWk1TlpYTnpZV2RsTG1kbGRFMWhjRVpwWld4a1BXWjFibU4wYVc5dUtHRXNZaXhqTEdRcGUyRXVkM0poY0hCbGNuTmZmSHdvWVM1M2NtRndjR1Z5YzE4OWUzMHBPMmxtS0dJZ2FXNGdZUzUzY21Gd2NHVnljMThwY21WMGRYSnVJR0V1ZDNKaGNIQmxjbk5mVzJKZE8zWmhjaUJsUFdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaGhMR0lwTzJsbUtDRmxLWHRwWmloaktYSmxkSFZ5Ymp0bFBWdGRPMnB6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoaExHSXNaU2w5Y21WMGRYSnVJR0V1ZDNKaGNIQmxjbk5mVzJKZFBXNWxkeUJxYzNCaUxrMWhjQ2hsTEdRcGZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkQxbWRXNWpkR2x2YmloaExHSXNZeWw3WjI5dlp5NWhjM05sY25SekxtRnpjMlZ5ZEVsdWMzUmhibU5sYjJZb1lTeHFjM0JpTGsxbGMzTmhaMlVwTzJJOFlTNXdhWFp2ZEY4L1lTNWhjbkpoZVZ0cWMzQmlMazFsYzNOaFoyVXVaMlYwU1c1a1pYaGZLR0VzWWlsZFBXTTZLR3B6Y0dJdVRXVnpjMkZuWlM1dFlYbGlaVWx1YVhSRmJYQjBlVVY0ZEdWdWMybHZiazlpYW1WamRGOG9ZU2tzWVM1bGVIUmxibk5wYjI1UFltcGxZM1JmVzJKZFBXTXBPM0psZEhWeWJpQmhmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elNXNTBSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlMR01wZTNKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdSSloyNXZjbWx1WjBSbFptRjFiSFJmS0dFc1lpeGpMREFwZlR0cWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpSbXh2WVhSR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaRWxuYm05eWFXNW5SR1ZtWVhWc2RGOG9ZU3hpTEdNc01DbDlPMXh1YW5Od1lpNU5aWE56WVdkbExuTmxkRkJ5YjNSdk0wSnZiMnhsWVc1R2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaRWxuYm05eWFXNW5SR1ZtWVhWc2RGOG9ZU3hpTEdNc0lURXBmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elUzUnlhVzVuUm1sbGJHUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUzSmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUkpaMjV2Y21sdVowUmxabUYxYkhSZktHRXNZaXhqTEZ3aVhDSXBmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elFubDBaWE5HYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pFbG5ibTl5YVc1blJHVm1ZWFZzZEY4b1lTeGlMR01zWENKY0lpbDlPMnB6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpORmJuVnRSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlMR01wZTNKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdSSloyNXZjbWx1WjBSbFptRjFiSFJmS0dFc1lpeGpMREFwZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEpiblJHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXlsN2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pFbG5ibTl5YVc1blJHVm1ZWFZzZEY4b1lTeGlMR01zWENJd1hDSXBmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdSSloyNXZjbWx1WjBSbFptRjFiSFJmUFdaMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJkdmIyY3VZWE56WlhKMGN5NWhjM05sY25SSmJuTjBZVzVqWlc5bUtHRXNhbk53WWk1TlpYTnpZV2RsS1R0aklUMDlaRDlxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb1lTeGlMR01wT21JOFlTNXdhWFp2ZEY4L1lTNWhjbkpoZVZ0cWMzQmlMazFsYzNOaFoyVXVaMlYwU1c1a1pYaGZLR0VzWWlsZFBXNTFiR3c2S0dwemNHSXVUV1Z6YzJGblpTNXRZWGxpWlVsdWFYUkZiWEIwZVVWNGRHVnVjMmx2Yms5aWFtVmpkRjhvWVNrc1pHVnNaWFJsSUdFdVpYaDBaVzV6YVc5dVQySnFaV04wWDF0aVhTazdjbVYwZFhKdUlHRjlPMXh1YW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JHYVdWc1pEMW1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBTVzV6ZEdGdVkyVnZaaWhoTEdwemNHSXVUV1Z6YzJGblpTazdZajFxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNoaExHSXBPM1p2YVdRZ01DRTlaRDlpTG5Od2JHbGpaU2hrTERBc1l5azZZaTV3ZFhOb0tHTXBPM0psZEhWeWJpQmhmVHRxYzNCaUxrMWxjM05oWjJVdWMyVjBUMjVsYjJaR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowU1c1emRHRnVZMlZ2WmloaExHcHpjR0l1VFdWemMyRm5aU2s3S0dNOWFuTndZaTVOWlhOellXZGxMbU52YlhCMWRHVlBibVZ2WmtOaGMyVW9ZU3hqS1NrbUptTWhQVDFpSmlaMmIybGtJREFoUFQxa0ppWW9ZUzUzY21Gd2NHVnljMThtSm1NZ2FXNGdZUzUzY21Gd2NHVnljMThtSmloaExuZHlZWEJ3WlhKelgxdGpYVDEyYjJsa0lEQXBMR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoaExHTXNkbTlwWkNBd0tTazdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2hoTEdJc1pDbDlPMXh1YW5Od1lpNU5aWE56WVdkbExtTnZiWEIxZEdWUGJtVnZaa05oYzJVOVpuVnVZM1JwYjI0b1lTeGlLWHRtYjNJb2RtRnlJR01zWkN4bFBUQTdaVHhpTG14bGJtZDBhRHRsS3lzcGUzWmhjaUJtUFdKYlpWMHNaejFxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb1lTeG1LVHR1ZFd4c0lUMW5KaVlvWXoxbUxHUTlaeXhxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb1lTeG1MSFp2YVdRZ01Da3BmWEpsZEhWeWJpQmpQeWhxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb1lTeGpMR1FwTEdNcE9qQjlPMnB6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1E5Wm5WdVkzUnBiMjRvWVN4aUxHTXNaQ2w3WVM1M2NtRndjR1Z5YzE5OGZDaGhMbmR5WVhCd1pYSnpYejE3ZlNrN2FXWW9JV0V1ZDNKaGNIQmxjbk5mVzJOZEtYdDJZWElnWlQxcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9ZU3hqS1R0cFppaGtmSHhsS1dFdWQzSmhjSEJsY25OZlcyTmRQVzVsZHlCaUtHVXBmWEpsZEhWeWJpQmhMbmR5WVhCd1pYSnpYMXRqWFgwN1hHNXFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUTlablZ1WTNScGIyNG9ZU3hpTEdNcGUycHpjR0l1VFdWemMyRm5aUzUzY21Gd1VtVndaV0YwWldSR2FXVnNaRjhvWVN4aUxHTXBPMkk5WVM1M2NtRndjR1Z5YzE5YlkxMDdZajA5YW5Od1lpNU5aWE56WVdkbExrVk5VRlJaWDB4SlUxUmZVMFZPVkVsT1JVeGZKaVlvWWoxaExuZHlZWEJ3WlhKelgxdGpYVDFiWFNrN2NtVjBkWEp1SUdKOU8ycHpjR0l1VFdWemMyRm5aUzUzY21Gd1VtVndaV0YwWldSR2FXVnNaRjg5Wm5WdVkzUnBiMjRvWVN4aUxHTXBlMkV1ZDNKaGNIQmxjbk5mZkh3b1lTNTNjbUZ3Y0dWeWMxODllMzBwTzJsbUtDRmhMbmR5WVhCd1pYSnpYMXRqWFNsN1ptOXlLSFpoY2lCa1BXcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkVacFpXeGtLR0VzWXlrc1pUMWJYU3htUFRBN1pqeGtMbXhsYm1kMGFEdG1LeXNwWlZ0bVhUMXVaWGNnWWloa1cyWmRLVHRoTG5keVlYQndaWEp6WDF0alhUMWxmWDA3WEc1cWMzQmlMazFsYzNOaFoyVXVjMlYwVjNKaGNIQmxja1pwWld4a1BXWjFibU4wYVc5dUtHRXNZaXhqS1h0bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMFNXNXpkR0Z1WTJWdlppaGhMR3B6Y0dJdVRXVnpjMkZuWlNrN1lTNTNjbUZ3Y0dWeWMxOThmQ2hoTG5keVlYQndaWEp6WHoxN2ZTazdkbUZ5SUdROVl6OWpMblJ2UVhKeVlYa29LVHBqTzJFdWQzSmhjSEJsY25OZlcySmRQV003Y21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoaExHSXNaQ2w5TzJwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlpsZHlZWEJ3WlhKR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5eGtLWHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowU1c1emRHRnVZMlZ2WmloaExHcHpjR0l1VFdWemMyRm5aU2s3WVM1M2NtRndjR1Z5YzE5OGZDaGhMbmR5WVhCd1pYSnpYejE3ZlNrN2RtRnlJR1U5WkQ5a0xuUnZRWEp5WVhrb0tUcGtPMkV1ZDNKaGNIQmxjbk5mVzJKZFBXUTdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZaa1pwWld4a0tHRXNZaXhqTEdVcGZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaRDFtZFc1amRHbHZiaWhoTEdJc1l5bDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRWx1YzNSaGJtTmxiMllvWVN4cWMzQmlMazFsYzNOaFoyVXBPMkV1ZDNKaGNIQmxjbk5mZkh3b1lTNTNjbUZ3Y0dWeWMxODllMzBwTzJNOVkzeDhXMTA3Wm05eUtIWmhjaUJrUFZ0ZExHVTlNRHRsUEdNdWJHVnVaM1JvTzJVckt5bGtXMlZkUFdOYlpWMHVkRzlCY25KaGVTZ3BPMkV1ZDNKaGNIQmxjbk5mVzJKZFBXTTdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2hoTEdJc1pDbDlPMXh1YW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdROVpuVnVZM1JwYjI0b1lTeGlMR01zWkN4bEtYdHFjM0JpTGsxbGMzTmhaMlV1ZDNKaGNGSmxjR1ZoZEdWa1JtbGxiR1JmS0dFc1pDeGlLVHQyWVhJZ1pqMWhMbmR5WVhCd1pYSnpYMXRpWFR0bWZId29aajFoTG5keVlYQndaWEp6WDF0aVhUMWJYU2s3WXoxalAyTTZibVYzSUdRN1lUMXFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSR2FXVnNaQ2hoTEdJcE8zWnZhV1FnTUNFOVpUOG9aaTV6Y0d4cFkyVW9aU3d3TEdNcExHRXVjM0JzYVdObEtHVXNNQ3hqTG5SdlFYSnlZWGtvS1NrcE9paG1MbkIxYzJnb1l5a3NZUzV3ZFhOb0tHTXVkRzlCY25KaGVTZ3BLU2s3Y21WMGRYSnVJR045TzJwemNHSXVUV1Z6YzJGblpTNTBiMDFoY0QxbWRXNWpkR2x2YmloaExHSXNZeXhrS1h0bWIzSW9kbUZ5SUdVOWUzMHNaajB3TzJZOFlTNXNaVzVuZEdnN1ppc3JLV1ZiWWk1allXeHNLR0ZiWmwwcFhUMWpQMk11WTJGc2JDaGhXMlpkTEdRc1lWdG1YU2s2WVZ0bVhUdHlaWFIxY200Z1pYMDdYRzVxYzNCaUxrMWxjM05oWjJVdWNISnZkRzkwZVhCbExuTjVibU5OWVhCR2FXVnNaSE5mUFdaMWJtTjBhVzl1S0NsN2FXWW9kR2hwY3k1M2NtRndjR1Z5YzE4cFptOXlLSFpoY2lCaElHbHVJSFJvYVhNdWQzSmhjSEJsY25OZktYdDJZWElnWWoxMGFHbHpMbmR5WVhCd1pYSnpYMXRoWFR0cFppaEJjbkpoZVM1cGMwRnljbUY1S0dJcEtXWnZjaWgyWVhJZ1l6MHdPMk04WWk1c1pXNW5kR2c3WXlzcktXSmJZMTBtSm1KYlkxMHVkRzlCY25KaGVTZ3BPMlZzYzJVZ1lpWW1ZaTUwYjBGeWNtRjVLQ2w5ZlR0cWMzQmlMazFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMblJ2UVhKeVlYazlablZ1WTNScGIyNG9LWHQwYUdsekxuTjVibU5OWVhCR2FXVnNaSE5mS0NrN2NtVjBkWEp1SUhSb2FYTXVZWEp5WVhsOU8ycHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5VFZGSkpUa2NtSmlocWMzQmlMazFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5QV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NXplVzVqVFdGd1JtbGxiR1J6WHlncE8zSmxkSFZ5YmlCMGFHbHpMbUZ5Y21GNUxuUnZVM1J5YVc1bktDbDlLVHRjYm1wemNHSXVUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1UFdaMWJtTjBhVzl1S0dFcGUybG1LSFJvYVhNdVpYaDBaVzV6YVc5dVQySnFaV04wWHlsN2RHaHBjeTUzY21Gd2NHVnljMTk4ZkNoMGFHbHpMbmR5WVhCd1pYSnpYejE3ZlNrN2RtRnlJR0k5WVM1bWFXVnNaRWx1WkdWNE8ybG1LR0V1YVhOU1pYQmxZWFJsWkNsN2FXWW9ZUzVwYzAxbGMzTmhaMlZVZVhCbEtDa3BjbVYwZFhKdUlIUm9hWE11ZDNKaGNIQmxjbk5mVzJKZGZId29kR2hwY3k1M2NtRndjR1Z5YzE5YllsMDlaMjl2Wnk1aGNuSmhlUzV0WVhBb2RHaHBjeTVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkZkh4YlhTeG1kVzVqZEdsdmJpaGlLWHR5WlhSMWNtNGdibVYzSUdFdVkzUnZjaWhpS1gwcEtTeDBhR2x6TG5keVlYQndaWEp6WDF0aVhYMWxiSE5sSUdsbUtHRXVhWE5OWlhOellXZGxWSGx3WlNncEtYSmxkSFZ5YmlGMGFHbHpMbmR5WVhCd1pYSnpYMXRpWFNZbWRHaHBjeTVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkSmlZb2RHaHBjeTUzY21Gd2NHVnljMTliWWwwOWJtVjNJR0V1WTNSdmNpaDBhR2x6TG1WNGRHVnVjMmx2Yms5aWFtVmpkRjliWWwwcEtTeDBhR2x6TG5keVlYQndaWEp6WDF0aVhUdHlaWFIxY200Z2RHaHBjeTVsZUhSbGJuTnBiMjVQWW1wbFkzUmZXMkpkZlgwN1hHNXFjM0JpTGsxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG5ObGRFVjRkR1Z1YzJsdmJqMW1kVzVqZEdsdmJpaGhMR0lwZTNSb2FYTXVkM0poY0hCbGNuTmZmSHdvZEdocGN5NTNjbUZ3Y0dWeWMxODllMzBwTzJwemNHSXVUV1Z6YzJGblpTNXRZWGxpWlVsdWFYUkZiWEIwZVVWNGRHVnVjMmx2Yms5aWFtVmpkRjhvZEdocGN5azdkbUZ5SUdNOVlTNW1hV1ZzWkVsdVpHVjRPMkV1YVhOU1pYQmxZWFJsWkQ4b1lqMWlmSHhiWFN4aExtbHpUV1Z6YzJGblpWUjVjR1VvS1Q4b2RHaHBjeTUzY21Gd2NHVnljMTliWTEwOVlpeDBhR2x6TG1WNGRHVnVjMmx2Yms5aWFtVmpkRjliWTEwOVoyOXZaeTVoY25KaGVTNXRZWEFvWWl4bWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1lTNTBiMEZ5Y21GNUtDbDlLU2s2ZEdocGN5NWxlSFJsYm5OcGIyNVBZbXBsWTNSZlcyTmRQV0lwT21FdWFYTk5aWE56WVdkbFZIbHdaU2dwUHloMGFHbHpMbmR5WVhCd1pYSnpYMXRqWFQxaUxIUm9hWE11WlhoMFpXNXphVzl1VDJKcVpXTjBYMXRqWFQxaVAySXVkRzlCY25KaGVTZ3BPbUlwT25Sb2FYTXVaWGgwWlc1emFXOXVUMkpxWldOMFgxdGpYVDFpTzNKbGRIVnliaUIwYUdsemZUdGNibXB6Y0dJdVRXVnpjMkZuWlM1a2FXWm1aWEpsYm1ObFBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb0lTaGhJR2x1YzNSaGJtTmxiMllnWWk1amIyNXpkSEoxWTNSdmNpa3BkR2h5YjNjZ1JYSnliM0lvWENKTlpYTnpZV2RsY3lCb1lYWmxJR1JwWm1abGNtVnVkQ0IwZVhCbGN5NWNJaWs3ZG1GeUlHTTlZUzUwYjBGeWNtRjVLQ2s3WWoxaUxuUnZRWEp5WVhrb0tUdDJZWElnWkQxYlhTeGxQVEFzWmoxakxteGxibWQwYUQ1aUxteGxibWQwYUQ5akxteGxibWQwYURwaUxteGxibWQwYUR0aExtZGxkRXB6VUdKTlpYTnpZV2RsU1dRb0tTWW1LR1JiTUYwOVlTNW5aWFJLYzFCaVRXVnpjMkZuWlVsa0tDa3NaVDB4S1R0bWIzSW9PMlU4Wmp0bEt5c3Bhbk53WWk1TlpYTnpZV2RsTG1OdmJYQmhjbVZHYVdWc1pITW9ZMXRsWFN4aVcyVmRLWHg4S0dSYlpWMDlZbHRsWFNrN2NtVjBkWEp1SUc1bGR5QmhMbU52Ym5OMGNuVmpkRzl5S0dRcGZUdHFjM0JpTGsxbGMzTmhaMlV1WlhGMVlXeHpQV1oxYm1OMGFXOXVLR0VzWWlsN2NtVjBkWEp1SUdFOVBXSjhmQ0VvSVdGOGZDRmlLU1ltWVNCcGJuTjBZVzVqWlc5bUlHSXVZMjl1YzNSeWRXTjBiM0ltSm1wemNHSXVUV1Z6YzJGblpTNWpiMjF3WVhKbFJtbGxiR1J6S0dFdWRHOUJjbkpoZVNncExHSXVkRzlCY25KaGVTZ3BLWDA3WEc1cWMzQmlMazFsYzNOaFoyVXVZMjl0Y0dGeVpVVjRkR1Z1YzJsdmJuTTlablZ1WTNScGIyNG9ZU3hpS1h0aFBXRjhmSHQ5TzJJOVlueDhlMzA3ZG1GeUlHTTllMzBzWkR0bWIzSW9aQ0JwYmlCaEtXTmJaRjA5TUR0bWIzSW9aQ0JwYmlCaUtXTmJaRjA5TUR0bWIzSW9aQ0JwYmlCaktXbG1LQ0ZxYzNCaUxrMWxjM05oWjJVdVkyOXRjR0Z5WlVacFpXeGtjeWhoVzJSZExHSmJaRjBwS1hKbGRIVnliaUV4TzNKbGRIVnliaUV3ZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzVqYjIxd1lYSmxSbWxsYkdSelBXWjFibU4wYVc5dUtHRXNZaWw3YVdZb1lUMDlZaWx5WlhSMWNtNGhNRHRwWmlnaFoyOXZaeTVwYzA5aWFtVmpkQ2hoS1h4OElXZHZiMmN1YVhOUFltcGxZM1FvWWlrcGNtVjBkWEp1WENKdWRXMWlaWEpjSWowOVBYUjVjR1Z2WmlCaEppWnBjMDVoVGloaEtYeDhYQ0p1ZFcxaVpYSmNJajA5UFhSNWNHVnZaaUJpSmlacGMwNWhUaWhpS1Q5VGRISnBibWNvWVNrOVBWTjBjbWx1WnloaUtUb2hNVHRwWmloaExtTnZibk4wY25WamRHOXlJVDFpTG1OdmJuTjBjblZqZEc5eUtYSmxkSFZ5YmlFeE8ybG1LR3B6Y0dJdVRXVnpjMkZuWlM1VFZWQlFUMUpVVTE5VlNVNVVPRUZTVWtGWlh5WW1ZUzVqYjI1emRISjFZM1J2Y2owOVBWVnBiblE0UVhKeVlYa3BlMmxtS0dFdWJHVnVaM1JvSVQxaUxteGxibWQwYUNseVpYUjFjbTRoTVR0bWIzSW9kbUZ5SUdNOU1EdGpQR0V1YkdWdVozUm9PMk1yS3lscFppaGhXMk5kSVQxaVcyTmRLWEpsZEhWeWJpRXhPM0psZEhWeWJpRXdmV2xtS0dFdVkyOXVjM1J5ZFdOMGIzSTlQVDFCY25KaGVTbDdkbUZ5SUdROWRtOXBaQ0F3TEdVOWRtOXBaQ0F3TEdZOVRXRjBhQzV0WVhnb1lTNXNaVzVuZEdnc1lpNXNaVzVuZEdncE8yWnZjaWhqUFRBN1l6eG1PMk1yS3lsN2RtRnlJR2M5WVZ0alhTeG9QV0piWTEwN1p5WW1YRzVuTG1OdmJuTjBjblZqZEc5eVBUMVBZbXBsWTNRbUppaG5iMjluTG1GemMyVnlkSE11WVhOelpYSjBLSFp2YVdRZ01EMDlQV1FwTEdkdmIyY3VZWE56WlhKMGN5NWhjM05sY25Rb1l6MDlQV0V1YkdWdVozUm9MVEVwTEdROVp5eG5QWFp2YVdRZ01DazdhQ1ltYUM1amIyNXpkSEoxWTNSdmNqMDlUMkpxWldOMEppWW9aMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkQ2gyYjJsa0lEQTlQVDFsS1N4bmIyOW5MbUZ6YzJWeWRITXVZWE56WlhKMEtHTTlQVDFpTG14bGJtZDBhQzB4S1N4bFBXZ3NhRDEyYjJsa0lEQXBPMmxtS0NGcWMzQmlMazFsYzNOaFoyVXVZMjl0Y0dGeVpVWnBaV3hrY3lobkxHZ3BLWEpsZEhWeWJpRXhmWEpsZEhWeWJpQmtmSHhsUHloa1BXUjhmSHQ5TEdVOVpYeDhlMzBzYW5Od1lpNU5aWE56WVdkbExtTnZiWEJoY21WRmVIUmxibk5wYjI1ektHUXNaU2twT2lFd2ZXbG1LR0V1WTI5dWMzUnlkV04wYjNJOVBUMVBZbXBsWTNRcGNtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWpiMjF3WVhKbFJYaDBaVzV6YVc5dWN5aGhMR0lwTzNSb2NtOTNJRVZ5Y205eUtGd2lTVzUyWVd4cFpDQjBlWEJsSUdsdUlFcFRVRUlnWVhKeVlYbGNJaWs3ZlR0cWMzQmlMazFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMbU5zYjI1bFRXVnpjMkZuWlQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZMnh2Ym1WTlpYTnpZV2RsS0hSb2FYTXBmVHRjYm1wemNHSXVUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVZMnh2Ym1VOVpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbU5zYjI1bFRXVnpjMkZuWlNoMGFHbHpLWDA3YW5Od1lpNU5aWE56WVdkbExtTnNiMjVsUFdaMWJtTjBhVzl1S0dFcGUzSmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZMnh2Ym1WTlpYTnpZV2RsS0dFcGZUdHFjM0JpTGsxbGMzTmhaMlV1WTJ4dmJtVk5aWE56WVdkbFBXWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQnVaWGNnWVM1amIyNXpkSEoxWTNSdmNpaHFjM0JpTGsxbGMzTmhaMlV1WTJ4dmJtVmZLR0V1ZEc5QmNuSmhlU2dwS1NsOU8xeHVhbk53WWk1TlpYTnpZV2RsTG1OdmNIbEpiblJ2UFdaMWJtTjBhVzl1S0dFc1lpbDdaMjl2Wnk1aGMzTmxjblJ6TG1GemMyVnlkRWx1YzNSaGJtTmxiMllvWVN4cWMzQmlMazFsYzNOaFoyVXBPMmR2YjJjdVlYTnpaWEowY3k1aGMzTmxjblJKYm5OMFlXNWpaVzltS0dJc2FuTndZaTVOWlhOellXZGxLVHRuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dFdVkyOXVjM1J5ZFdOMGIzSTlQV0l1WTI5dWMzUnlkV04wYjNJc1hDSkRiM0I1SUhOdmRYSmpaU0JoYm1RZ2RHRnlaMlYwSUcxbGMzTmhaMlVnYzJodmRXeGtJR2hoZG1VZ2RHaGxJSE5oYldVZ2RIbHdaUzVjSWlrN1lUMXFjM0JpTGsxbGMzTmhaMlV1WTJ4dmJtVW9ZU2s3Wm05eUtIWmhjaUJqUFdJdWRHOUJjbkpoZVNncExHUTlZUzUwYjBGeWNtRjVLQ2tzWlQxakxteGxibWQwYUQwd08yVThaQzVzWlc1bmRHZzdaU3NyS1dOYlpWMDlaRnRsWFR0aUxuZHlZWEJ3WlhKelh6MWhMbmR5WVhCd1pYSnpYenRpTG1WNGRHVnVjMmx2Yms5aWFtVmpkRjg5WVM1bGVIUmxibk5wYjI1UFltcGxZM1JmZlR0Y2JtcHpjR0l1VFdWemMyRm5aUzVqYkc5dVpWODlablZ1WTNScGIyNG9ZU2w3YVdZb1FYSnlZWGt1YVhOQmNuSmhlU2hoS1NsN1ptOXlLSFpoY2lCaVBVRnljbUY1S0dFdWJHVnVaM1JvS1N4alBUQTdZenhoTG14bGJtZDBhRHRqS3lzcGUzWmhjaUJrUFdGYlkxMDdiblZzYkNFOVpDWW1LR0piWTEwOVhDSnZZbXBsWTNSY0lqMDlkSGx3Wlc5bUlHUS9hbk53WWk1TlpYTnpZV2RsTG1Oc2IyNWxYeWhuYjI5bkxtRnpjMlZ5ZEhNdVlYTnpaWEowS0dRcEtUcGtLWDF5WlhSMWNtNGdZbjFwWmlocWMzQmlMazFsYzNOaFoyVXVVMVZRVUU5U1ZGTmZWVWxPVkRoQlVsSkJXVjhtSm1FZ2FXNXpkR0Z1WTJWdlppQlZhVzUwT0VGeWNtRjVLWEpsZEhWeWJpQnVaWGNnVldsdWREaEJjbkpoZVNoaEtUdGlQWHQ5TzJadmNpaGpJR2x1SUdFcFpEMWhXMk5kTEc1MWJHd2hQV1FtSmloaVcyTmRQVndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJrUDJwemNHSXVUV1Z6YzJGblpTNWpiRzl1WlY4b1oyOXZaeTVoYzNObGNuUnpMbUZ6YzJWeWRDaGtLU2s2WkNrN2NtVjBkWEp1SUdKOU8ycHpjR0l1VFdWemMyRm5aUzV5WldkcGMzUmxjazFsYzNOaFoyVlVlWEJsUFdaMWJtTjBhVzl1S0dFc1lpbDdZaTV0WlhOellXZGxTV1E5WVgwN2FuTndZaTVOWlhOellXZGxMbTFsYzNOaFoyVlRaWFJGZUhSbGJuTnBiMjV6UFh0OU8xeHVhbk53WWk1TlpYTnpZV2RsTG0xbGMzTmhaMlZUWlhSRmVIUmxibk5wYjI1elFtbHVZWEo1UFh0OU8ycHpjR0l1Ulhod2IzSjBQWHQ5TzJWNGNHOXlkSE11VFdGd1BXcHpjR0l1VFdGd08yVjRjRzl5ZEhNdVRXVnpjMkZuWlQxcWMzQmlMazFsYzNOaFoyVTdaWGh3YjNKMGN5NUNhVzVoY25sU1pXRmtaWEk5YW5Od1lpNUNhVzVoY25sU1pXRmtaWEk3Wlhod2IzSjBjeTVDYVc1aGNubFhjbWwwWlhJOWFuTndZaTVDYVc1aGNubFhjbWwwWlhJN1pYaHdiM0owY3k1RmVIUmxibk5wYjI1R2FXVnNaRWx1Wm04OWFuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTg3Wlhod2IzSjBjeTVGZUhSbGJuTnBiMjVHYVdWc1pFSnBibUZ5ZVVsdVptODlhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRUpwYm1GeWVVbHVabTg3Wlhod2IzSjBjeTVsZUhCdmNuUlRlVzFpYjJ3OVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3N1pYaHdiM0owY3k1cGJtaGxjbWwwY3oxbmIyOW5MbWx1YUdWeWFYUnpPMlY0Y0c5eWRITXViMkpxWldOMFBYdGxlSFJsYm1RNloyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a2ZUdGxlSEJ2Y25SekxuUjVjR1ZQWmoxbmIyOW5MblI1Y0dWUFpqdGNiaUlzSWlGbWRXNWpkR2x2YmlobExIUXBlMmxtS0Z3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCbGVIQnZjblJ6SmlaY0ltOWlhbVZqZEZ3aVBUMTBlWEJsYjJZZ2JXOWtkV3hsS1cxdlpIVnNaUzVsZUhCdmNuUnpQWFFvS1R0bGJITmxJR2xtS0Z3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlHUmxabWx1WlNZbVpHVm1hVzVsTG1GdFpDbGtaV1pwYm1Vb1cxMHNkQ2s3Wld4elpYdDJZWElnY2oxMEtDazdabTl5S0haaGNpQnVJR2x1SUhJcEtGd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQmxlSEJ2Y25SelAyVjRjRzl5ZEhNNlpTbGJibDA5Y2x0dVhYMTlLSFJvYVhNc1puVnVZM1JwYjI0b0tYdHlaWFIxY200Z1puVnVZM1JwYjI0b1pTbDdkbUZ5SUhROWUzMDdablZ1WTNScGIyNGdjaWh1S1h0cFppaDBXMjVkS1hKbGRIVnliaUIwVzI1ZExtVjRjRzl5ZEhNN2RtRnlJRzg5ZEZ0dVhUMTdhVHB1TEd3NklURXNaWGh3YjNKMGN6cDdmWDA3Y21WMGRYSnVJR1ZiYmwwdVkyRnNiQ2h2TG1WNGNHOXlkSE1zYnl4dkxtVjRjRzl5ZEhNc2Npa3NieTVzUFNFd0xHOHVaWGh3YjNKMGMzMXlaWFIxY200Z2NpNXRQV1VzY2k1alBYUXNjaTVrUFdaMWJtTjBhVzl1S0dVc2RDeHVLWHR5TG04b1pTeDBLWHg4VDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtHVXNkQ3g3Wlc1MWJXVnlZV0pzWlRvaE1DeG5aWFE2Ym4wcGZTeHlMbkk5Wm5WdVkzUnBiMjRvWlNsN1hDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JRk41YldKdmJDWW1VM2x0WW05c0xuUnZVM1J5YVc1blZHRm5KaVpQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1pTeFRlVzFpYjJ3dWRHOVRkSEpwYm1kVVlXY3NlM1poYkhWbE9sd2lUVzlrZFd4bFhDSjlLU3hQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1pTeGNJbDlmWlhOTmIyUjFiR1ZjSWl4N2RtRnNkV1U2SVRCOUtYMHNjaTUwUFdaMWJtTjBhVzl1S0dVc2RDbDdhV1lvTVNaMEppWW9aVDF5S0dVcEtTdzRKblFwY21WMGRYSnVJR1U3YVdZb05DWjBKaVpjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnWlNZbVpTWW1aUzVmWDJWelRXOWtkV3hsS1hKbGRIVnliaUJsTzNaaGNpQnVQVTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2s3YVdZb2NpNXlLRzRwTEU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHVMRndpWkdWbVlYVnNkRndpTEh0bGJuVnRaWEpoWW14bE9pRXdMSFpoYkhWbE9tVjlLU3d5Sm5RbUpsd2ljM1J5YVc1blhDSWhQWFI1Y0dWdlppQmxLV1p2Y2loMllYSWdieUJwYmlCbEtYSXVaQ2h1TEc4c1puVnVZM1JwYjI0b2RDbDdjbVYwZFhKdUlHVmJkRjE5TG1KcGJtUW9iblZzYkN4dktTazdjbVYwZFhKdUlHNTlMSEl1YmoxbWRXNWpkR2x2YmlobEtYdDJZWElnZEQxbEppWmxMbDlmWlhOTmIyUjFiR1UvWm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnWlM1a1pXWmhkV3gwZlRwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbGZUdHlaWFIxY200Z2NpNWtLSFFzWENKaFhDSXNkQ2tzZEgwc2NpNXZQV1oxYm1OMGFXOXVLR1VzZENsN2NtVjBkWEp1SUU5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNobExIUXBmU3h5TG5BOVhDSmNJaXh5S0hJdWN6MHhNQ2w5S0Z0bWRXNWpkR2x2YmlobExIUXNjaWw3WENKMWMyVWdjM1J5YVdOMFhDSTdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hRc1hDSmZYMlZ6VFc5a2RXeGxYQ0lzZTNaaGJIVmxPaUV3ZlNrN2RtRnlJRzQ5Y2lnektUdDBMazFsZEdGa1lYUmhQVzR1UW5KdmQzTmxja2hsWVdSbGNuTjlMR1oxYm1OMGFXOXVLR1VzZEN4eUtYdGNJblZ6WlNCemRISnBZM1JjSWp0UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kQ3hjSWw5ZlpYTk5iMlIxYkdWY0lpeDdkbUZzZFdVNklUQjlLU3gwTG1SbFluVm5QV1oxYm1OMGFXOXVLQ2w3Wm05eUtIWmhjaUJsUFZ0ZExIUTlNRHQwUEdGeVozVnRaVzUwY3k1c1pXNW5kR2c3ZENzcktXVmJkRjA5WVhKbmRXMWxiblJ6VzNSZE8yTnZibk52YkdVdVpHVmlkV2MvWTI5dWMyOXNaUzVrWldKMVp5NWhjSEJzZVNodWRXeHNMR1VwT21OdmJuTnZiR1V1Ykc5bkxtRndjR3g1S0c1MWJHd3NaU2w5ZlN4bWRXNWpkR2x2YmlobExIUXNjaWw3WENKMWMyVWdjM1J5YVdOMFhDSTdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hRc1hDSmZYMlZ6VFc5a2RXeGxYQ0lzZTNaaGJIVmxPaUV3ZlNrN2RtRnlJRzQ5Y2lnd0tTeHZQWElvT0Nrc2N6MXlLRGtwTEdrOWNpZ3hLU3hoUFhJb05Da3NkVDF5S0RFMEtUdDBMbU5zYVdWdWREMW1kVzVqZEdsdmJpaGxMSFFwZTNKbGRIVnliaUJ1WlhjZ1pDaGxMSFFwZlR0MllYSWdaRDFtZFc1amRHbHZiaWdwZTJaMWJtTjBhVzl1SUdVb1pTeDBLWHQwYUdsekxuTjBZWEowWldROUlURXNkR2hwY3k1elpXNTBSbWx5YzNSTlpYTnpZV2RsUFNFeExIUm9hWE11WTI5dGNHeGxkR1ZrUFNFeExIUm9hWE11WTJ4dmMyVmtQU0V4TEhSb2FYTXVabWx1YVhOb1pXUlRaVzVrYVc1blBTRXhMSFJvYVhNdWIyNUlaV0ZrWlhKelEyRnNiR0poWTJ0elBWdGRMSFJvYVhNdWIyNU5aWE56WVdkbFEyRnNiR0poWTJ0elBWdGRMSFJvYVhNdWIyNUZibVJEWVd4c1ltRmphM005VzEwc2RHaHBjeTV3WVhKelpYSTlibVYzSUc4dVEyaDFibXRRWVhKelpYSXNkR2hwY3k1dFpYUm9iMlJFWldacGJtbDBhVzl1UFdVc2RHaHBjeTV3Y205d2N6MTBMSFJvYVhNdVkzSmxZWFJsVkhKaGJuTndiM0owS0NsOWNtVjBkWEp1SUdVdWNISnZkRzkwZVhCbExtTnlaV0YwWlZSeVlXNXpjRzl5ZEQxbWRXNWpkR2x2YmlncGUzWmhjaUJsUFhSb2FYTXVjSEp2Y0hNdWFHOXpkQ3RjSWk5Y0lpdDBhR2x6TG0xbGRHaHZaRVJsWm1sdWFYUnBiMjR1YzJWeWRtbGpaUzV6WlhKMmFXTmxUbUZ0WlN0Y0lpOWNJaXQwYUdsekxtMWxkR2h2WkVSbFptbHVhWFJwYjI0dWJXVjBhRzlrVG1GdFpTeDBQWHR0WlhSb2IyUkVaV1pwYm1sMGFXOXVPblJvYVhNdWJXVjBhRzlrUkdWbWFXNXBkR2x2Yml4a1pXSjFaenAwYUdsekxuQnliM0J6TG1SbFluVm5mSHdoTVN4MWNtdzZaU3h2YmtobFlXUmxjbk02ZEdocGN5NXZibFJ5WVc1emNHOXlkRWhsWVdSbGNuTXVZbWx1WkNoMGFHbHpLU3h2YmtOb2RXNXJPblJvYVhNdWIyNVVjbUZ1YzNCdmNuUkRhSFZ1YXk1aWFXNWtLSFJvYVhNcExHOXVSVzVrT25Sb2FYTXViMjVVY21GdWMzQnZjblJGYm1RdVltbHVaQ2gwYUdsektYMDdkR2hwY3k1d2NtOXdjeTUwY21GdWMzQnZjblEvZEdocGN5NTBjbUZ1YzNCdmNuUTlkR2hwY3k1d2NtOXdjeTUwY21GdWMzQnZjblFvZENrNmRHaHBjeTUwY21GdWMzQnZjblE5WVM1dFlXdGxSR1ZtWVhWc2RGUnlZVzV6Y0c5eWRDaDBLWDBzWlM1d2NtOTBiM1I1Y0dVdWIyNVVjbUZ1YzNCdmNuUklaV0ZrWlhKelBXWjFibU4wYVc5dUtHVXNkQ2w3YVdZb2RHaHBjeTV3Y205d2N5NWtaV0oxWnlZbWFTNWtaV0oxWnloY0ltOXVTR1ZoWkdWeWMxd2lMR1VzZENrc2RHaHBjeTVqYkc5elpXUXBkR2hwY3k1d2NtOXdjeTVrWldKMVp5WW1hUzVrWldKMVp5aGNJbWR5Y0dNdWIyNUlaV0ZrWlhKeklISmxZMlZwZG1Wa0lHRm1kR1Z5SUhKbGNYVmxjM1FnZDJGeklHTnNiM05sWkNBdElHbG5ibTl5YVc1blhDSXBPMlZzYzJVZ2FXWW9NRDA5UFhRcE8yVnNjMlY3ZEdocGN5NXlaWE53YjI1elpVaGxZV1JsY25NOVpTeDBhR2x6TG5CeWIzQnpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2liMjVJWldGa1pYSnpMbkpsYzNCdmJuTmxTR1ZoWkdWeWMxd2lMRXBUVDA0dWMzUnlhVzVuYVdaNUtIUm9hWE11Y21WemNHOXVjMlZJWldGa1pYSnpMRzUxYkd3c01pa3BPM1poY2lCeVBXTW9aU2s3ZEdocGN5NXdjbTl3Y3k1a1pXSjFaeVltYVM1a1pXSjFaeWhjSW05dVNHVmhaR1Z5Y3k1blVsQkRVM1JoZEhWelhDSXNjaWs3ZG1GeUlHNDljaVltY2o0OU1EOXlPbk11YUhSMGNGTjBZWFIxYzFSdlEyOWtaU2gwS1R0MGFHbHpMbkJ5YjNCekxtUmxZblZuSmlacExtUmxZblZuS0Z3aWIyNUlaV0ZrWlhKekxtTnZaR1ZjSWl4dUtUdDJZWElnYnoxbExtZGxkQ2hjSW1keWNHTXRiV1Z6YzJGblpWd2lLWHg4VzEwN2FXWW9kR2hwY3k1d2NtOXdjeTVrWldKMVp5WW1hUzVrWldKMVp5aGNJbTl1U0dWaFpHVnljeTVuVWxCRFRXVnpjMkZuWlZ3aUxHOHBMSFJvYVhNdWNtRjNUMjVJWldGa1pYSnpLR1VwTEc0aFBUMXpMa052WkdVdVQwc3BlM1poY2lCaFBYUm9hWE11WkdWamIyUmxSMUpRUTFOMFlYUjFjeWh2V3pCZEtUdDBhR2x6TG5KaGQwOXVSWEp5YjNJb2JpeGhMR1VwZlgxOUxHVXVjSEp2ZEc5MGVYQmxMbTl1VkhKaGJuTndiM0owUTJoMWJtczlablZ1WTNScGIyNG9aU2w3ZG1GeUlIUTlkR2hwY3p0cFppaDBhR2x6TG1Oc2IzTmxaQ2wwYUdsekxuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpWjNKd1l5NXZia05vZFc1cklISmxZMlZwZG1Wa0lHRm1kR1Z5SUhKbGNYVmxjM1FnZDJGeklHTnNiM05sWkNBdElHbG5ibTl5YVc1blhDSXBPMlZzYzJWN2RtRnlJSEk5VzEwN2RISjVlM0k5ZEdocGN5NXdZWEp6WlhJdWNHRnljMlVvWlNsOVkyRjBZMmdvWlNsN2NtVjBkWEp1SUhSb2FYTXVjSEp2Y0hNdVpHVmlkV2NtSm1rdVpHVmlkV2NvWENKdmJrTm9kVzVyTG5CaGNuTnBibWNnWlhKeWIzSmNJaXhsTEdVdWJXVnpjMkZuWlNrc2RtOXBaQ0IwYUdsekxuSmhkMDl1UlhKeWIzSW9jeTVEYjJSbExrbHVkR1Z5Ym1Gc0xGd2ljR0Z5YzJsdVp5Qmxjbkp2Y2pvZ1hDSXJaUzV0WlhOellXZGxLWDF5TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWlNsN2FXWW9aUzVqYUhWdWExUjVjR1U5UFQxdkxrTm9kVzVyVkhsd1pTNU5SVk5UUVVkRktYdDJZWElnY2oxMExtMWxkR2h2WkVSbFptbHVhWFJwYjI0dWNtVnpjRzl1YzJWVWVYQmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVLR1V1WkdGMFlTazdkQzV5WVhkUGJrMWxjM05oWjJVb2NpbDlaV3h6WlNCbExtTm9kVzVyVkhsd1pUMDlQVzh1UTJoMWJtdFVlWEJsTGxSU1FVbE1SVkpUSmlZb2RDNXlaWE53YjI1elpVaGxZV1JsY25NL0tIUXVjbVZ6Y0c5dWMyVlVjbUZwYkdWeWN6MXVaWGNnYmk1TlpYUmhaR0YwWVNobExuUnlZV2xzWlhKektTeDBMbkJ5YjNCekxtUmxZblZuSmlacExtUmxZblZuS0Z3aWIyNURhSFZ1YXk1MGNtRnBiR1Z5YzF3aUxIUXVjbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5a3BPaWgwTG5KbGMzQnZibk5sU0dWaFpHVnljejF1WlhjZ2JpNU5aWFJoWkdGMFlTaGxMblJ5WVdsc1pYSnpLU3gwTG5KaGQwOXVTR1ZoWkdWeWN5aDBMbkpsYzNCdmJuTmxTR1ZoWkdWeWN5a3BLWDBwZlgwc1pTNXdjbTkwYjNSNWNHVXViMjVVY21GdWMzQnZjblJGYm1ROVpuVnVZM1JwYjI0b0tYdHBaaWgwYUdsekxuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpWjNKd1l5NXZia1Z1WkZ3aUtTeDBhR2x6TG1Oc2IzTmxaQ2wwYUdsekxuQnliM0J6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpWjNKd1l5NXZia1Z1WkNCeVpXTmxhWFpsWkNCaFpuUmxjaUJ5WlhGMVpYTjBJSGRoY3lCamJHOXpaV1FnTFNCcFoyNXZjbWx1WjF3aUtUdGxiSE5sSUdsbUtIWnZhV1FnTUNFOVBYUm9hWE11Y21WemNHOXVjMlZVY21GcGJHVnljeWw3ZG1GeUlHVTlZeWgwYUdsekxuSmxjM0J2Ym5ObFZISmhhV3hsY25NcE8ybG1LRzUxYkd3aFBUMWxLWHQyWVhJZ2REMTBhR2x6TG5KbGMzQnZibk5sVkhKaGFXeGxjbk11WjJWMEtGd2laM0p3WXkxdFpYTnpZV2RsWENJcExISTlkR2hwY3k1a1pXTnZaR1ZIVWxCRFUzUmhkSFZ6S0hSYk1GMHBPM1JvYVhNdWNtRjNUMjVGYm1Rb1pTeHlMSFJvYVhNdWNtVnpjRzl1YzJWVWNtRnBiR1Z5Y3lsOVpXeHpaU0IwYUdsekxuSmhkMDl1UlhKeWIzSW9jeTVEYjJSbExrbHVkR1Z5Ym1Gc0xGd2lVbVZ6Y0c5dWMyVWdZMnh2YzJWa0lIZHBkR2h2ZFhRZ1ozSndZeTF6ZEdGMGRYTWdLRlJ5WVdsc1pYSnpJSEJ5YjNacFpHVmtLVndpS1gxbGJITmxlMmxtS0hadmFXUWdNRDA5UFhSb2FYTXVjbVZ6Y0c5dWMyVklaV0ZrWlhKektYSmxkSFZ5YmlCMmIybGtJSFJvYVhNdWNtRjNUMjVGY25KdmNpaHpMa052WkdVdVZXNXJibTkzYml4Y0lsSmxjM0J2Ym5ObElHTnNiM05sWkNCM2FYUm9iM1YwSUdobFlXUmxjbk5jSWlrN2RtRnlJRzQ5WXloMGFHbHpMbkpsYzNCdmJuTmxTR1ZoWkdWeWN5a3NiejEwYUdsekxuSmxjM0J2Ym5ObFNHVmhaR1Z5Y3k1blpYUW9YQ0puY25CakxXMWxjM05oWjJWY0lpazdhV1lvZEdocGN5NXdjbTl3Y3k1a1pXSjFaeVltYVM1a1pXSjFaeWhjSW1keWNHTXVhR1ZoWkdWeWN5QnZibXg1SUhKbGMzQnZibk5sSUZ3aUxHNHNieWtzYm5Wc2JEMDlQVzRwY21WMGRYSnVJSFp2YVdRZ2RHaHBjeTV5WVhkUGJrVnVaQ2h6TGtOdlpHVXVWVzVyYm05M2JpeGNJbEpsYzNCdmJuTmxJR05zYjNObFpDQjNhWFJvYjNWMElHZHljR010YzNSaGRIVnpJQ2hJWldGa1pYSnpJRzl1YkhrcFhDSXNkR2hwY3k1eVpYTndiMjV6WlVobFlXUmxjbk1wTzNaaGNpQmhQWFJvYVhNdVpHVmpiMlJsUjFKUVExTjBZWFIxY3lodld6QmRLVHQwYUdsekxuSmhkMDl1Ulc1a0tHNHNZU3gwYUdsekxuSmxjM0J2Ym5ObFNHVmhaR1Z5Y3lsOWZTeGxMbkJ5YjNSdmRIbHdaUzVrWldOdlpHVkhVbEJEVTNSaGRIVnpQV1oxYm1OMGFXOXVLR1VwZTJsbUtDRmxLWEpsZEhWeWJsd2lYQ0k3ZEhKNWUzSmxkSFZ5YmlCa1pXTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb1pTbDlZMkYwWTJnb2RDbDdjbVYwZFhKdUlHVjlmU3hsTG5CeWIzUnZkSGx3WlM1eVlYZFBia1Z1WkQxbWRXNWpkR2x2YmlobExIUXNjaWw3ZG1GeUlHNDlkR2hwY3p0MGFHbHpMbkJ5YjNCekxtUmxZblZuSmlacExtUmxZblZuS0Z3aWNtRjNUMjVGYm1SY0lpeGxMSFFzY2lrc2RHaHBjeTVqYjIxd2JHVjBaV1I4ZkNoMGFHbHpMbU52YlhCc1pYUmxaRDBoTUN4MGFHbHpMbTl1Ulc1a1EyRnNiR0poWTJ0ekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2J5bDdhV1lvSVc0dVkyeHZjMlZrS1hSeWVYdHZLR1VzZEN4eUtYMWpZWFJqYUNobEtYdHpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVLQ2w3ZEdoeWIzY2daWDBwZlgwcEtYMHNaUzV3Y205MGIzUjVjR1V1Y21GM1QyNUlaV0ZrWlhKelBXWjFibU4wYVc5dUtHVXBlM1JvYVhNdWNISnZjSE11WkdWaWRXY21KbWt1WkdWaWRXY29YQ0p5WVhkUGJraGxZV1JsY25OY0lpeGxLU3gwYUdsekxtTnZiWEJzWlhSbFpIeDhkR2hwY3k1dmJraGxZV1JsY25ORFlXeHNZbUZqYTNNdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloMEtYdDBjbmw3ZENobEtYMWpZWFJqYUNobEtYdHpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVLQ2w3ZEdoeWIzY2daWDBwZlgwcGZTeGxMbkJ5YjNSdmRIbHdaUzV5WVhkUGJrVnljbTl5UFdaMWJtTjBhVzl1S0dVc2RDeHlLWHQyWVhJZ2J6MTBhR2x6TzNadmFXUWdNRDA5UFhJbUppaHlQVzVsZHlCdUxrMWxkR0ZrWVhSaEtTeDBhR2x6TG5CeWIzQnpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2ljbUYzVDI1RmNuSnZjbHdpTEdVc2RDa3NkR2hwY3k1amIyMXdiR1YwWldSOGZDaDBhR2x6TG1OdmJYQnNaWFJsWkQwaE1DeDBhR2x6TG05dVJXNWtRMkZzYkdKaFkydHpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9iaWw3YVdZb0lXOHVZMnh2YzJWa0tYUnllWHR1S0dVc2RDeHlLWDFqWVhSamFDaGxLWHR6WlhSVWFXMWxiM1YwS0daMWJtTjBhVzl1S0NsN2RHaHliM2NnWlgwcGZYMHBLWDBzWlM1d2NtOTBiM1I1Y0dVdWNtRjNUMjVOWlhOellXZGxQV1oxYm1OMGFXOXVLR1VwZTNaaGNpQjBQWFJvYVhNN2RHaHBjeTV3Y205d2N5NWtaV0oxWnlZbWFTNWtaV0oxWnloY0luSmhkMDl1VFdWemMyRm5aVndpTEdVdWRHOVBZbXBsWTNRb0tTa3NkR2hwY3k1amIyMXdiR1YwWldSOGZIUm9hWE11WTJ4dmMyVmtmSHgwYUdsekxtOXVUV1Z6YzJGblpVTmhiR3hpWVdOcmN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtISXBlMmxtS0NGMExtTnNiM05sWkNsMGNubDdjaWhsS1gxallYUmphQ2hsS1h0elpYUlVhVzFsYjNWMEtHWjFibU4wYVc5dUtDbDdkR2h5YjNjZ1pYMHBmWDBwZlN4bExuQnliM1J2ZEhsd1pTNXZia2hsWVdSbGNuTTlablZ1WTNScGIyNG9aU2w3ZEdocGN5NXZia2hsWVdSbGNuTkRZV3hzWW1GamEzTXVjSFZ6YUNobEtYMHNaUzV3Y205MGIzUjVjR1V1YjI1TlpYTnpZV2RsUFdaMWJtTjBhVzl1S0dVcGUzUm9hWE11YjI1TlpYTnpZV2RsUTJGc2JHSmhZMnR6TG5CMWMyZ29aU2w5TEdVdWNISnZkRzkwZVhCbExtOXVSVzVrUFdaMWJtTjBhVzl1S0dVcGUzUm9hWE11YjI1RmJtUkRZV3hzWW1GamEzTXVjSFZ6YUNobEtYMHNaUzV3Y205MGIzUjVjR1V1YzNSaGNuUTlablZ1WTNScGIyNG9aU2w3YVdZb2RHaHBjeTV6ZEdGeWRHVmtLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJa05zYVdWdWRDQmhiSEpsWVdSNUlITjBZWEowWldRZ0xTQmpZVzV1YjNRZ0xuTjBZWEowS0NsY0lpazdkR2hwY3k1emRHRnlkR1ZrUFNFd08zWmhjaUIwUFc1bGR5QnVMazFsZEdGa1lYUmhLR1Y4Zkh0OUtUdDBMbk5sZENoY0ltTnZiblJsYm5RdGRIbHdaVndpTEZ3aVlYQndiR2xqWVhScGIyNHZaM0p3WXkxM1pXSXJjSEp2ZEc5Y0lpa3NkQzV6WlhRb1hDSjRMV2R5Y0dNdGQyVmlYQ0lzWENJeFhDSXBMSFJvYVhNdWRISmhibk53YjNKMExuTjBZWEowS0hRcGZTeGxMbkJ5YjNSdmRIbHdaUzV6Wlc1a1BXWjFibU4wYVc5dUtHVXBlMmxtS0NGMGFHbHpMbk4wWVhKMFpXUXBkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2lRMnhwWlc1MElHNXZkQ0J6ZEdGeWRHVmtJQzBnTG5OMFlYSjBLQ2tnYlhWemRDQmlaU0JqWVd4c1pXUWdZbVZtYjNKbElDNXpaVzVrS0NsY0lpazdhV1lvZEdocGN5NWpiRzl6WldRcGRHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVEyeHBaVzUwSUdGc2NtVmhaSGtnWTJ4dmMyVmtJQzBnWTJGdWJtOTBJQzV6Wlc1a0tDbGNJaWs3YVdZb2RHaHBjeTVtYVc1cGMyaGxaRk5sYm1ScGJtY3BkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2lRMnhwWlc1MElHRnNjbVZoWkhrZ1ptbHVhWE5vWldRZ2MyVnVaR2x1WnlBdElHTmhibTV2ZENBdWMyVnVaQ2dwWENJcE8ybG1LQ0YwYUdsekxtMWxkR2h2WkVSbFptbHVhWFJwYjI0dWNtVnhkV1Z6ZEZOMGNtVmhiU1ltZEdocGN5NXpaVzUwUm1seWMzUk5aWE56WVdkbEtYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lrMWxjM05oWjJVZ1lXeHlaV0ZrZVNCelpXNTBJR1p2Y2lCdWIyNHRZMnhwWlc1MExYTjBjbVZoYldsdVp5QnRaWFJvYjJRZ0xTQmpZVzV1YjNRZ0xuTmxibVFvS1Z3aUtUdDBhR2x6TG5ObGJuUkdhWEp6ZEUxbGMzTmhaMlU5SVRBN2RtRnlJSFE5ZFM1bWNtRnRaVkpsY1hWbGMzUW9aU2s3ZEdocGN5NTBjbUZ1YzNCdmNuUXVjMlZ1WkUxbGMzTmhaMlVvZENsOUxHVXVjSEp2ZEc5MGVYQmxMbVpwYm1semFGTmxibVE5Wm5WdVkzUnBiMjRvS1h0cFppZ2hkR2hwY3k1emRHRnlkR1ZrS1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtOc2FXVnVkQ0J1YjNRZ2MzUmhjblJsWkNBdElDNW1hVzVwYzJoVFpXNWtLQ2tnYlhWemRDQmlaU0JqWVd4c1pXUWdZbVZtYjNKbElDNWpiRzl6WlNncFhDSXBPMmxtS0hSb2FYTXVZMnh2YzJWa0tYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lrTnNhV1Z1ZENCaGJISmxZV1I1SUdOc2IzTmxaQ0F0SUdOaGJtNXZkQ0F1YzJWdVpDZ3BYQ0lwTzJsbUtIUm9hWE11Wm1sdWFYTm9aV1JUWlc1a2FXNW5LWFJvY205M0lHNWxkeUJGY25KdmNpaGNJa05zYVdWdWRDQmhiSEpsWVdSNUlHWnBibWx6YUdWa0lITmxibVJwYm1jZ0xTQmpZVzV1YjNRZ0xtWnBibWx6YUZObGJtUW9LVndpS1R0MGFHbHpMbVpwYm1semFHVmtVMlZ1WkdsdVp6MGhNQ3gwYUdsekxuUnlZVzV6Y0c5eWRDNW1hVzVwYzJoVFpXNWtLQ2w5TEdVdWNISnZkRzkwZVhCbExtTnNiM05sUFdaMWJtTjBhVzl1S0NsN2FXWW9JWFJvYVhNdWMzUmhjblJsWkNsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKRGJHbGxiblFnYm05MElITjBZWEowWldRZ0xTQXVjM1JoY25Rb0tTQnRkWE4wSUdKbElHTmhiR3hsWkNCaVpXWnZjbVVnTG1Oc2IzTmxLQ2xjSWlrN2FXWW9kR2hwY3k1amJHOXpaV1FwZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpUTJ4cFpXNTBJR0ZzY21WaFpIa2dZMnh2YzJWa0lDMGdZMkZ1Ym05MElDNWpiRzl6WlNncFhDSXBPM1JvYVhNdVkyeHZjMlZrUFNFd0xIUm9hWE11Y0hKdmNITXVaR1ZpZFdjbUpta3VaR1ZpZFdjb1hDSnlaWEYxWlhOMExtRmliM0owSUdGaWIzSjBhVzVuSUhKbGNYVmxjM1JjSWlrc2RHaHBjeTUwY21GdWMzQnZjblF1WTJGdVkyVnNLQ2w5TEdWOUtDazdablZ1WTNScGIyNGdZeWhsS1h0MllYSWdkRDFsTG1kbGRDaGNJbWR5Y0dNdGMzUmhkSFZ6WENJcGZIeGJYVHRwWmloMExteGxibWQwYUQ0d0tYUnllWHQyWVhJZ2NqMTBXekJkTzNKbGRIVnliaUJ3WVhKelpVbHVkQ2h5TERFd0tYMWpZWFJqYUNobEtYdHlaWFIxY200Z2JuVnNiSDF5WlhSMWNtNGdiblZzYkgxOUxHWjFibU4wYVc5dUtHVXNkQ3h5S1h0MllYSWdianR1UFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwUFh0OU8yWjFibU4wYVc5dUlISW9iaWw3YVdZb2RGdHVYU2x5WlhSMWNtNGdkRnR1WFM1bGVIQnZjblJ6TzNaaGNpQnZQWFJiYmwwOWUyazZiaXhzT2lFeExHVjRjRzl5ZEhNNmUzMTlPM0psZEhWeWJpQmxXMjVkTG1OaGJHd29ieTVsZUhCdmNuUnpMRzhzYnk1bGVIQnZjblJ6TEhJcExHOHViRDBoTUN4dkxtVjRjRzl5ZEhOOWNtVjBkWEp1SUhJdWJUMWxMSEl1WXoxMExISXVhVDFtZFc1amRHbHZiaWhsS1h0eVpYUjFjbTRnWlgwc2NpNWtQV1oxYm1OMGFXOXVLR1VzZEN4dUtYdHlMbThvWlN4MEtYeDhUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0dVc2RDeDdZMjl1Wm1sbmRYSmhZbXhsT2lFeExHVnVkVzFsY21GaWJHVTZJVEFzWjJWME9tNTlLWDBzY2k1dVBXWjFibU4wYVc5dUtHVXBlM1poY2lCMFBXVW1KbVV1WDE5bGMwMXZaSFZzWlQ5bWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbExtUmxabUYxYkhSOU9tWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlHVjlPM0psZEhWeWJpQnlMbVFvZEN4Y0ltRmNJaXgwS1N4MGZTeHlMbTg5Wm5WdVkzUnBiMjRvWlN4MEtYdHlaWFIxY200Z1QySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tHVXNkQ2w5TEhJdWNEMWNJbHdpTEhJb2NpNXpQVEVwZlNoYlpuVnVZM1JwYjI0b1pTeDBMSElwZTF3aWRYTmxJSE4wY21samRGd2lPMDlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMExGd2lYMTlsYzAxdlpIVnNaVndpTEh0MllXeDFaVG9oTUgwcE8zWmhjaUJ1UFhJb015azdkbUZ5SUc4OVpuVnVZM1JwYjI0b0tYdG1kVzVqZEdsdmJpQmxLR1VzZENsN2RtOXBaQ0F3UFQwOVpTWW1LR1U5ZTMwcExIWnZhV1FnTUQwOVBYUW1KaWgwUFh0emNHeHBkRlpoYkhWbGN6b2hNWDBwTzNaaGNpQnlMRzg5ZEdocGN6dHBaaWgwYUdsekxtaGxZV1JsY25OTllYQTllMzBzWlNscFppaGNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnU0dWaFpHVnljeVltWlNCcGJuTjBZVzVqWlc5bUlFaGxZV1JsY25NcGJpNW5aWFJJWldGa1pYSkxaWGx6S0dVcExtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2NpbDdiaTVuWlhSSVpXRmtaWEpXWVd4MVpYTW9aU3h5S1M1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dVcGUzUXVjM0JzYVhSV1lXeDFaWE0vYnk1aGNIQmxibVFvY2l4dUxuTndiR2wwU0dWaFpHVnlWbUZzZFdVb1pTa3BPbTh1WVhCd1pXNWtLSElzWlNsOUtYMHBPMlZzYzJVZ2FXWW9YQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1LSEk5WlNrbUpsd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQnlMbWhsWVdSbGNuTk5ZWEFtSmx3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlISXVabTl5UldGamFDbGxMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aU3gwS1h0dkxtRndjR1Z1WkNobExIUXBmU2s3Wld4elpTQnBaaWhjSW5WdVpHVm1hVzVsWkZ3aUlUMTBlWEJsYjJZZ1RXRndKaVpsSUdsdWMzUmhibU5sYjJZZ1RXRndLWHRsTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWlN4MEtYdHZMbUZ3Y0dWdVpDaDBMR1VwZlNsOVpXeHpaVndpYzNSeWFXNW5YQ0k5UFhSNWNHVnZaaUJsUDNSb2FYTXVZWEJ3Wlc1a1JuSnZiVk4wY21sdVp5aGxLVHBjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnWlNZbVQySnFaV04wTG1kbGRFOTNibEJ5YjNCbGNuUjVUbUZ0WlhNb1pTa3VabTl5UldGamFDaG1kVzVqZEdsdmJpaDBLWHQyWVhJZ2NqMWxXM1JkTzBGeWNtRjVMbWx6UVhKeVlYa29jaWsvY2k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dVcGUyOHVZWEJ3Wlc1a0tIUXNaU2w5S1RwdkxtRndjR1Z1WkNoMExISXBmU2w5Y21WMGRYSnVJR1V1Y0hKdmRHOTBlWEJsTG1Gd2NHVnVaRVp5YjIxVGRISnBibWM5Wm5WdVkzUnBiMjRvWlNsN1ptOXlLSFpoY2lCMFBXVXVjM0JzYVhRb1hDSmNYSEpjWEc1Y0lpa3NjajB3TzNJOGRDNXNaVzVuZEdnN2Npc3JLWHQyWVhJZ2JqMTBXM0pkTEc4OWJpNXBibVJsZUU5bUtGd2lPbHdpS1R0cFppaHZQakFwZTNaaGNpQnpQVzR1YzNWaWMzUnlhVzVuS0RBc2J5a3VkSEpwYlNncExHazliaTV6ZFdKemRISnBibWNvYnlzeEtTNTBjbWx0S0NrN2RHaHBjeTVoY0hCbGJtUW9jeXhwS1gxOWZTeGxMbkJ5YjNSdmRIbHdaUzVrWld4bGRHVTlablZ1WTNScGIyNG9aU3gwS1h0MllYSWdjajF1TG01dmNtMWhiR2w2WlU1aGJXVW9aU2s3YVdZb2RtOXBaQ0F3UFQwOWRDbGtaV3hsZEdVZ2RHaHBjeTVvWldGa1pYSnpUV0Z3VzNKZE8yVnNjMlY3ZG1GeUlHODlkR2hwY3k1b1pXRmtaWEp6VFdGd1czSmRPMmxtS0c4cGUzWmhjaUJ6UFc4dWFXNWtaWGhQWmloMEtUdHpQajB3SmladkxuTndiR2xqWlNoekxERXBMREE5UFQxdkxteGxibWQwYUNZbVpHVnNaWFJsSUhSb2FYTXVhR1ZoWkdWeWMwMWhjRnR5WFgxOWZTeGxMbkJ5YjNSdmRIbHdaUzVoY0hCbGJtUTlablZ1WTNScGIyNG9aU3gwS1h0MllYSWdjajEwYUdsekxHODliaTV1YjNKdFlXeHBlbVZPWVcxbEtHVXBPMEZ5Y21GNUxtbHpRWEp5WVhrb2RHaHBjeTVvWldGa1pYSnpUV0Z3VzI5ZEtYeDhLSFJvYVhNdWFHVmhaR1Z5YzAxaGNGdHZYVDFiWFNrc1FYSnlZWGt1YVhOQmNuSmhlU2gwS1Q5MExtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1pTbDdjaTVvWldGa1pYSnpUV0Z3VzI5ZExuQjFjMmdvYmk1dWIzSnRZV3hwZW1WV1lXeDFaU2hsS1NsOUtUcDBhR2x6TG1obFlXUmxjbk5OWVhCYmIxMHVjSFZ6YUNodUxtNXZjbTFoYkdsNlpWWmhiSFZsS0hRcEtYMHNaUzV3Y205MGIzUjVjR1V1YzJWMFBXWjFibU4wYVc5dUtHVXNkQ2w3ZG1GeUlISTliaTV1YjNKdFlXeHBlbVZPWVcxbEtHVXBPMmxtS0VGeWNtRjVMbWx6UVhKeVlYa29kQ2twZTNaaGNpQnZQVnRkTzNRdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobEtYdHZMbkIxYzJnb2JpNXViM0p0WVd4cGVtVldZV3gxWlNobEtTbDlLU3gwYUdsekxtaGxZV1JsY25OTllYQmJjbDA5YjMxbGJITmxJSFJvYVhNdWFHVmhaR1Z5YzAxaGNGdHlYVDFiYmk1dWIzSnRZV3hwZW1WV1lXeDFaU2gwS1YxOUxHVXVjSEp2ZEc5MGVYQmxMbWhoY3oxbWRXNWpkR2x2YmlobExIUXBlM1poY2lCeVBYUm9hWE11YUdWaFpHVnljMDFoY0Z0dUxtNXZjbTFoYkdsNlpVNWhiV1VvWlNsZE8ybG1LQ0ZCY25KaGVTNXBjMEZ5Y21GNUtISXBLWEpsZEhWeWJpRXhPMmxtS0hadmFXUWdNQ0U5UFhRcGUzWmhjaUJ2UFc0dWJtOXliV0ZzYVhwbFZtRnNkV1VvZENrN2NtVjBkWEp1SUhJdWFXNWtaWGhQWmlodktUNDlNSDF5WlhSMWNtNGhNSDBzWlM1d2NtOTBiM1I1Y0dVdVoyVjBQV1oxYm1OMGFXOXVLR1VwZTNaaGNpQjBQWFJvYVhNdWFHVmhaR1Z5YzAxaGNGdHVMbTV2Y20xaGJHbDZaVTVoYldVb1pTbGRPM0psZEhWeWJpQjJiMmxrSURBaFBUMTBQM1F1WTI5dVkyRjBLQ2s2VzExOUxHVXVjSEp2ZEc5MGVYQmxMbVp2Y2tWaFkyZzlablZ1WTNScGIyNG9aU2w3ZG1GeUlIUTlkR2hwY3p0UFltcGxZM1F1WjJWMFQzZHVVSEp2Y0dWeWRIbE9ZVzFsY3loMGFHbHpMbWhsWVdSbGNuTk5ZWEFwTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvY2lsN1pTaHlMSFF1YUdWaFpHVnljMDFoY0Z0eVhTbDlMSFJvYVhNcGZTeGxMbkJ5YjNSdmRIbHdaUzUwYjBobFlXUmxjbk05Wm5WdVkzUnBiMjRvS1h0cFppaGNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnU0dWaFpHVnljeWw3ZG1GeUlHVTlibVYzSUVobFlXUmxjbk03Y21WMGRYSnVJSFJvYVhNdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloMExISXBlM0l1Wm05eVJXRmphQ2htZFc1amRHbHZiaWh5S1h0bExtRndjR1Z1WkNoMExISXBmU2w5S1N4bGZYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lraGxZV1JsY25NZ1kyeGhjM01nYVhNZ2JtOTBJR1JsWm1sdVpXUmNJaWw5TEdWOUtDazdkQzVDY205M2MyVnlTR1ZoWkdWeWN6MXZmU3htZFc1amRHbHZiaWhsTEhRc2NpbDdYQ0oxYzJVZ2MzUnlhV04wWENJN1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSFFzWENKZlgyVnpUVzlrZFd4bFhDSXNlM1poYkhWbE9pRXdmU2s3ZG1GeUlHNDljaWd3S1R0MExrSnliM2R6WlhKSVpXRmtaWEp6UFc0dVFuSnZkM05sY2tobFlXUmxjbk45TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHRjSW5WelpTQnpkSEpwWTNSY0lqdFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1N4MExtbDBaWEpoZEdWSVpXRmtaWEp6UFdaMWJtTjBhVzl1S0dVc2RDbDdabTl5S0haaGNpQnlQV1ZiVTNsdFltOXNMbWwwWlhKaGRHOXlYU2dwTEc0OWNpNXVaWGgwS0NrN0lXNHVaRzl1WlRzcGRDaHVMblpoYkhWbFd6QmRLU3h1UFhJdWJtVjRkQ2dwZlN4MExtbDBaWEpoZEdWSVpXRmtaWEp6UzJWNWN6MW1kVzVqZEdsdmJpaGxMSFFwZTJadmNpaDJZWElnY2oxbExtdGxlWE1vS1N4dVBYSXVibVY0ZENncE95RnVMbVJ2Ym1VN0tYUW9iaTUyWVd4MVpTa3NiajF5TG01bGVIUW9LWDE5TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHRjSW5WelpTQnpkSEpwWTNSY0lqdFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1R0MllYSWdiajF5S0RJcE8yWjFibU4wYVc5dUlHOG9aU2w3Y21WMGRYSnVJR1Y5ZEM1dWIzSnRZV3hwZW1WT1lXMWxQV1oxYm1OMGFXOXVLR1VwZTJsbUtGd2ljM1J5YVc1blhDSWhQWFI1Y0dWdlppQmxKaVlvWlQxVGRISnBibWNvWlNrcExDOWJYbUV0ZWpBdE9WeGNMU01rSlNZbktpc3VYRnhlWDJCOGZsMHZhUzUwWlhOMEtHVXBLWFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWENKSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQm9aV0ZrWlhJZ1ptbGxiR1FnYm1GdFpWd2lLVHR5WlhSMWNtNGdaUzUwYjB4dmQyVnlRMkZ6WlNncGZTeDBMbTV2Y20xaGJHbDZaVlpoYkhWbFBXWjFibU4wYVc5dUtHVXBlM0psZEhWeWJsd2ljM1J5YVc1blhDSWhQWFI1Y0dWdlppQmxKaVlvWlQxVGRISnBibWNvWlNrcExHVjlMSFF1WjJWMFNHVmhaR1Z5Vm1Gc2RXVnpQV1oxYm1OMGFXOXVLR1VzZENsN2RtRnlJSEk5YnlobEtUdHBaaWh5SUdsdWMzUmhibU5sYjJZZ1NHVmhaR1Z5Y3lZbWNpNW5aWFJCYkd3cGNtVjBkWEp1SUhJdVoyVjBRV3hzS0hRcE8zWmhjaUJ1UFhJdVoyVjBLSFFwTzNKbGRIVnliaUJ1SmlaY0luTjBjbWx1WjF3aVBUMTBlWEJsYjJZZ2JqOWJibDA2Ym4wc2RDNW5aWFJJWldGa1pYSkxaWGx6UFdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwUFc4b1pTa3NjajE3ZlN4elBWdGRPM0psZEhWeWJpQjBMbXRsZVhNL2JpNXBkR1Z5WVhSbFNHVmhaR1Z5YzB0bGVYTW9kQ3htZFc1amRHbHZiaWhsS1h0eVcyVmRmSHdvY2x0bFhUMGhNQ3h6TG5CMWMyZ29aU2twZlNrNmRDNW1iM0pGWVdOb1AzUXVabTl5UldGamFDaG1kVzVqZEdsdmJpaGxMSFFwZTNKYmRGMThmQ2h5VzNSZFBTRXdMSE11Y0hWemFDaDBLU2w5S1RwdUxtbDBaWEpoZEdWSVpXRmtaWEp6S0hRc1puVnVZM1JwYjI0b1pTbDdkbUZ5SUhROVpWc3dYVHR5VzNSZGZId29jbHQwWFQwaE1DeHpMbkIxYzJnb2RDa3BmU2tzYzMwc2RDNXpjR3hwZEVobFlXUmxjbFpoYkhWbFBXWjFibU4wYVc5dUtHVXBlM1poY2lCMFBWdGRPM0psZEhWeWJpQmxMbk53YkdsMEtGd2lMQ0JjSWlrdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobEtYdGxMbk53YkdsMEtGd2lMRndpS1M1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dVcGUzUXVjSFZ6YUNobEtYMHBmU2tzZEgxOVhTbDlMR1V1Wlhod2IzSjBjejF1S0NsOUxHWjFibU4wYVc5dUtHVXNkQ3h5S1h0Y0luVnpaU0J6ZEhKcFkzUmNJanRQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2RDeGNJbDlmWlhOTmIyUjFiR1ZjSWl4N2RtRnNkV1U2SVRCOUtUdDJZWElnYmoxeUtEVXBMRzg5Wm5WdVkzUnBiMjRvWlNsN2NtVjBkWEp1SUc0dVEzSnZjM05DY205M2MyVnlTSFIwY0ZSeVlXNXpjRzl5ZENoN2QybDBhRU55WldSbGJuUnBZV3h6T2lFeGZTa29aU2w5TzNRdWMyVjBSR1ZtWVhWc2RGUnlZVzV6Y0c5eWRFWmhZM1J2Y25rOVpuVnVZM1JwYjI0b1pTbDdiejFsZlN4MExtMWhhMlZFWldaaGRXeDBWSEpoYm5Od2IzSjBQV1oxYm1OMGFXOXVLR1VwZTNKbGRIVnliaUJ2S0dVcGZYMHNablZ1WTNScGIyNG9aU3gwTEhJcGUxd2lkWE5sSUhOMGNtbGpkRndpTzA5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBMRndpWDE5bGMwMXZaSFZzWlZ3aUxIdDJZV3gxWlRvaE1IMHBPM1poY2lCdVBYSW9OaWtzYnoxeUtEY3BPM1F1UTNKdmMzTkNjbTkzYzJWeVNIUjBjRlJ5WVc1emNHOXlkRDFtZFc1amRHbHZiaWhsS1h0cFppaHVMbVJsZEdWamRFWmxkR05vVTNWd2NHOXlkQ2dwS1h0MllYSWdkRDE3WTNKbFpHVnVkR2xoYkhNNlpTNTNhWFJvUTNKbFpHVnVkR2xoYkhNL1hDSnBibU5zZFdSbFhDSTZYQ0p6WVcxbExXOXlhV2RwYmx3aWZUdHlaWFIxY200Z2JpNUdaWFJqYUZKbFlXUmhZbXhsVTNSeVpXRnRWSEpoYm5Od2IzSjBLSFFwZlhKbGRIVnliaUJ2TGxob2NsUnlZVzV6Y0c5eWRDaDdkMmwwYUVOeVpXUmxiblJwWVd4ek9tVXVkMmwwYUVOeVpXUmxiblJwWVd4emZTbDlmU3htZFc1amRHbHZiaWhsTEhRc2NpbDdYQ0oxYzJVZ2MzUnlhV04wWENJN2RtRnlJRzQ5ZEdocGN5WW1kR2hwY3k1ZlgyRnpjMmxuYm54OFpuVnVZM1JwYjI0b0tYdHlaWFIxY200b2JqMVBZbXBsWTNRdVlYTnphV2R1Zkh4bWRXNWpkR2x2YmlobEtYdG1iM0lvZG1GeUlIUXNjajB4TEc0OVlYSm5kVzFsYm5SekxteGxibWQwYUR0eVBHNDdjaXNyS1dadmNpaDJZWElnYnlCcGJpQjBQV0Z5WjNWdFpXNTBjMXR5WFNsUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b2RDeHZLU1ltS0dWYmIxMDlkRnR2WFNrN2NtVjBkWEp1SUdWOUtTNWhjSEJzZVNoMGFHbHpMR0Z5WjNWdFpXNTBjeWw5TzA5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBMRndpWDE5bGMwMXZaSFZzWlZ3aUxIdDJZV3gxWlRvaE1IMHBPM1poY2lCdlBYSW9NQ2tzY3oxeUtERXBPM1F1Um1WMFkyaFNaV0ZrWVdKc1pWTjBjbVZoYlZSeVlXNXpjRzl5ZEQxbWRXNWpkR2x2YmlobEtYdHlaWFIxY200Z1puVnVZM1JwYjI0b2RDbDdjbVYwZFhKdUlHWjFibU4wYVc5dUtHVXNkQ2w3Y21WMGRYSnVJR1V1WkdWaWRXY21Kbk11WkdWaWRXY29YQ0ptWlhSamFGSmxjWFZsYzNSY0lpeGxLU3h1WlhjZ2FTaGxMSFFwZlNoMExHVXBmWDA3ZG1GeUlHazlablZ1WTNScGIyNG9LWHRtZFc1amRHbHZiaUJsS0dVc2RDbDdkR2hwY3k1allXNWpaV3hzWldROUlURXNkR2hwY3k1amIyNTBjbTlzYkdWeVBYTmxiR1l1UVdKdmNuUkRiMjUwY205c2JHVnlKaVp1WlhjZ1FXSnZjblJEYjI1MGNtOXNiR1Z5TEhSb2FYTXViM0IwYVc5dWN6MWxMSFJvYVhNdWFXNXBkRDEwZlhKbGRIVnliaUJsTG5CeWIzUnZkSGx3WlM1d2RXMXdQV1oxYm1OMGFXOXVLR1VzZENsN2RtRnlJSEk5ZEdocGN6dHBaaWgwYUdsekxuSmxZV1JsY2oxbExIUm9hWE11WTJGdVkyVnNiR1ZrS1hKbGRIVnliaUIwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NtSm5NdVpHVmlkV2NvWENKR1pYUmphQzV3ZFcxd0xtTmhibU5sYkNCaGRDQm1hWEp6ZENCd2RXMXdYQ0lwTEhadmFXUWdkR2hwY3k1eVpXRmtaWEl1WTJGdVkyVnNLQ2s3ZEdocGN5NXlaV0ZrWlhJdWNtVmhaQ2dwTG5Sb1pXNG9ablZ1WTNScGIyNG9aU2w3YVdZb1pTNWtiMjVsS1hKbGRIVnliaUJ5TG05d2RHbHZibk11YjI1RmJtUW9LU3gwTzNJdWIzQjBhVzl1Y3k1dmJrTm9kVzVyS0dVdWRtRnNkV1VwTEhJdWNIVnRjQ2h5TG5KbFlXUmxjaXgwS1gwcExtTmhkR05vS0daMWJtTjBhVzl1S0dVcGUzSXVZMkZ1WTJWc2JHVmtQM0l1YjNCMGFXOXVjeTVrWldKMVp5WW1jeTVrWldKMVp5aGNJa1psZEdOb0xtTmhkR05vSUMwZ2NtVnhkV1Z6ZENCallXNWpaV3hzWldSY0lpazZLSEl1WTJGdVkyVnNiR1ZrUFNFd0xISXViM0IwYVc5dWN5NWtaV0oxWnlZbWN5NWtaV0oxWnloY0lrWmxkR05vTG1OaGRHTm9YQ0lzWlM1dFpYTnpZV2RsS1N4eUxtOXdkR2x2Ym5NdWIyNUZibVFvWlNrcGZTbDlMR1V1Y0hKdmRHOTBlWEJsTG5ObGJtUTlablZ1WTNScGIyNG9aU2w3ZG1GeUlIUTlkR2hwY3p0bVpYUmphQ2gwYUdsekxtOXdkR2x2Ym5NdWRYSnNMRzRvZTMwc2RHaHBjeTVwYm1sMExIdG9aV0ZrWlhKek9uUm9hWE11YldWMFlXUmhkR0V1ZEc5SVpXRmtaWEp6S0Nrc2JXVjBhRzlrT2x3aVVFOVRWRndpTEdKdlpIazZaU3h6YVdkdVlXdzZkR2hwY3k1amIyNTBjbTlzYkdWeUppWjBhR2x6TG1OdmJuUnliMnhzWlhJdWMybG5ibUZzZlNrcExuUm9aVzRvWm5WdVkzUnBiMjRvWlNsN2FXWW9kQzV2Y0hScGIyNXpMbVJsWW5WbkppWnpMbVJsWW5WbktGd2lSbVYwWTJndWNtVnpjRzl1YzJWY0lpeGxLU3gwTG05d2RHbHZibk11YjI1SVpXRmtaWEp6S0c1bGR5QnZMazFsZEdGa1lYUmhLR1V1YUdWaFpHVnljeWtzWlM1emRHRjBkWE1wTENGbExtSnZaSGtwY21WMGRYSnVJR1U3ZEM1d2RXMXdLR1V1WW05a2VTNW5aWFJTWldGa1pYSW9LU3hsS1gwcExtTmhkR05vS0daMWJtTjBhVzl1S0dVcGUzUXVZMkZ1WTJWc2JHVmtQM1F1YjNCMGFXOXVjeTVrWldKMVp5WW1jeTVrWldKMVp5aGNJa1psZEdOb0xtTmhkR05vSUMwZ2NtVnhkV1Z6ZENCallXNWpaV3hzWldSY0lpazZLSFF1WTJGdVkyVnNiR1ZrUFNFd0xIUXViM0IwYVc5dWN5NWtaV0oxWnlZbWN5NWtaV0oxWnloY0lrWmxkR05vTG1OaGRHTm9YQ0lzWlM1dFpYTnpZV2RsS1N4MExtOXdkR2x2Ym5NdWIyNUZibVFvWlNrcGZTbDlMR1V1Y0hKdmRHOTBlWEJsTG5ObGJtUk5aWE56WVdkbFBXWjFibU4wYVc5dUtHVXBlM1JvYVhNdWMyVnVaQ2hsS1gwc1pTNXdjbTkwYjNSNWNHVXVabWx1YVhOb1UyVnVaRDFtZFc1amRHbHZiaWdwZTMwc1pTNXdjbTkwYjNSNWNHVXVjM1JoY25ROVpuVnVZM1JwYjI0b1pTbDdkR2hwY3k1dFpYUmhaR0YwWVQxbGZTeGxMbkJ5YjNSdmRIbHdaUzVqWVc1alpXdzlablZ1WTNScGIyNG9LWHQwYUdsekxtTmhibU5sYkd4bFpEOTBhR2x6TG05d2RHbHZibk11WkdWaWRXY21Kbk11WkdWaWRXY29YQ0pHWlhSamFDNWhZbTl5ZEM1allXNWpaV3dnWVd4eVpXRmtlU0JqWVc1alpXeHNaV1JjSWlrNktIUm9hWE11WTJGdVkyVnNiR1ZrUFNFd0xIUm9hWE11Y21WaFpHVnlQeWgwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NtSm5NdVpHVmlkV2NvWENKR1pYUmphQzVoWW05eWRDNWpZVzVqWld4Y0lpa3NkR2hwY3k1eVpXRmtaWEl1WTJGdVkyVnNLQ2twT25Sb2FYTXViM0IwYVc5dWN5NWtaV0oxWnlZbWN5NWtaV0oxWnloY0lrWmxkR05vTG1GaWIzSjBMbU5oYm1ObGJDQmlaV1p2Y21VZ2NtVmhaR1Z5WENJcExIUm9hWE11WTI5dWRISnZiR3hsY2lZbWRHaHBjeTVqYjI1MGNtOXNiR1Z5TG1GaWIzSjBLQ2twZlN4bGZTZ3BPM1F1WkdWMFpXTjBSbVYwWTJoVGRYQndiM0owUFdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1WENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlGSmxjM0J2Ym5ObEppWlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1hDSmliMlI1WENJcEppWmNJbVoxYm1OMGFXOXVYQ0k5UFhSNWNHVnZaaUJJWldGa1pYSnpmWDBzWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8zWmhjaUJ1TEc4OWRHaHBjeVltZEdocGN5NWZYMlY0ZEdWdVpITjhmQ2h1UFdaMWJtTjBhVzl1S0dVc2RDbDdjbVYwZFhKdUtHNDlUMkpxWldOMExuTmxkRkJ5YjNSdmRIbHdaVTltZkh4N1gxOXdjbTkwYjE5Zk9sdGRmV2x1YzNSaGJtTmxiMllnUVhKeVlYa21KbVoxYm1OMGFXOXVLR1VzZENsN1pTNWZYM0J5YjNSdlgxODlkSDE4ZkdaMWJtTjBhVzl1S0dVc2RDbDdabTl5S0haaGNpQnlJR2x1SUhRcGRDNW9ZWE5QZDI1UWNtOXdaWEowZVNoeUtTWW1LR1ZiY2wwOWRGdHlYU2w5S1NobExIUXBmU3htZFc1amRHbHZiaWhsTEhRcGUyWjFibU4wYVc5dUlISW9LWHQwYUdsekxtTnZibk4wY25WamRHOXlQV1Y5YmlobExIUXBMR1V1Y0hKdmRHOTBlWEJsUFc1MWJHdzlQVDEwUDA5aWFtVmpkQzVqY21WaGRHVW9kQ2s2S0hJdWNISnZkRzkwZVhCbFBYUXVjSEp2ZEc5MGVYQmxMRzVsZHlCeUtYMHBPMDlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMExGd2lYMTlsYzAxdlpIVnNaVndpTEh0MllXeDFaVG9oTUgwcE8zWmhjaUJ6UFhJb01Da3NhVDF5S0RFcExHRTljaWd4TVNrN2RDNVlhSEpVY21GdWMzQnZjblE5Wm5WdVkzUnBiMjRvWlNsN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0hRcGUybG1LR0V1WkdWMFpXTjBUVzk2V0VoU1UzVndjRzl5ZENncEtYSmxkSFZ5YmlCdVpYY2daQ2gwTEdVcE8ybG1LR0V1WkdWMFpXTjBXRWhTVDNabGNuSnBaR1ZOYVcxbFZIbHdaVk4xY0hCdmNuUW9LU2x5WlhSMWNtNGdibVYzSUhVb2RDeGxLVHQwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0pVYUdseklHVnVkbWx5YjI1dFpXNTBKM01nV0VoU0lHbHRjR3hsYldWdWRHRjBhVzl1SUdOaGJtNXZkQ0J6ZFhCd2IzSjBJR0pwYm1GeWVTQjBjbUZ1YzJabGNpNWNJaWw5ZlR0MllYSWdkVDFtZFc1amRHbHZiaWdwZTJaMWJtTjBhVzl1SUdVb1pTeDBLWHQwYUdsekxtOXdkR2x2Ym5NOVpTeDBhR2x6TG1sdWFYUTlkSDF5WlhSMWNtNGdaUzV3Y205MGIzUjVjR1V1YjI1UWNtOW5jbVZ6YzBWMlpXNTBQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NXZjSFJwYjI1ekxtUmxZblZuSmlacExtUmxZblZuS0Z3aVdFaFNMbTl1VUhKdlozSmxjM05GZG1WdWRDNXNaVzVuZEdnNklGd2lMSFJvYVhNdWVHaHlMbkpsYzNCdmJuTmxMbXhsYm1kMGFDazdkbUZ5SUdVOWRHaHBjeTU0YUhJdWNtVnpjRzl1YzJVdWMzVmljM1J5S0hSb2FYTXVhVzVrWlhncE8zUm9hWE11YVc1a1pYZzlkR2hwY3k1NGFISXVjbVZ6Y0c5dWMyVXViR1Z1WjNSb08zWmhjaUIwUFhBb1pTazdkR2hwY3k1dmNIUnBiMjV6TG05dVEyaDFibXNvZENsOUxHVXVjSEp2ZEc5MGVYQmxMbTl1VEc5aFpFVjJaVzUwUFdaMWJtTjBhVzl1S0NsN2RHaHBjeTV2Y0hScGIyNXpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2lXRWhTTG05dVRHOWhaRVYyWlc1MFhDSXBMSFJvYVhNdWIzQjBhVzl1Y3k1dmJrVnVaQ2dwZlN4bExuQnliM1J2ZEhsd1pTNXZibE4wWVhSbFEyaGhibWRsUFdaMWJtTjBhVzl1S0NsN2RHaHBjeTV2Y0hScGIyNXpMbVJsWW5WbkppWnBMbVJsWW5WbktGd2lXRWhTTG05dVUzUmhkR1ZEYUdGdVoyVmNJaXgwYUdsekxuaG9jaTV5WldGa2VWTjBZWFJsS1N4MGFHbHpMbmhvY2k1eVpXRmtlVk4wWVhSbFBUMDlXRTFNU0hSMGNGSmxjWFZsYzNRdVNFVkJSRVZTVTE5U1JVTkZTVlpGUkNZbWRHaHBjeTV2Y0hScGIyNXpMbTl1U0dWaFpHVnljeWh1WlhjZ2N5NU5aWFJoWkdGMFlTaDBhR2x6TG5ob2NpNW5aWFJCYkd4U1pYTndiMjV6WlVobFlXUmxjbk1vS1Nrc2RHaHBjeTU0YUhJdWMzUmhkSFZ6S1gwc1pTNXdjbTkwYjNSNWNHVXVjMlZ1WkUxbGMzTmhaMlU5Wm5WdVkzUnBiMjRvWlNsN2RHaHBjeTU0YUhJdWMyVnVaQ2hsS1gwc1pTNXdjbTkwYjNSNWNHVXVabWx1YVhOb1UyVnVaRDFtZFc1amRHbHZiaWdwZTMwc1pTNXdjbTkwYjNSNWNHVXVjM1JoY25ROVpuVnVZM1JwYjI0b1pTbDdkbUZ5SUhROWRHaHBjenQwYUdsekxtMWxkR0ZrWVhSaFBXVTdkbUZ5SUhJOWJtVjNJRmhOVEVoMGRIQlNaWEYxWlhOME8zUm9hWE11ZUdoeVBYSXNjaTV2Y0dWdUtGd2lVRTlUVkZ3aUxIUm9hWE11YjNCMGFXOXVjeTUxY213cExIUm9hWE11WTI5dVptbG5kWEpsV0doeUtDa3NkR2hwY3k1dFpYUmhaR0YwWVM1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dVc2RDbDdjaTV6WlhSU1pYRjFaWE4wU0dWaFpHVnlLR1VzZEM1cWIybHVLRndpTENCY0lpa3BmU2tzY2k1M2FYUm9RM0psWkdWdWRHbGhiSE05UW05dmJHVmhiaWgwYUdsekxtbHVhWFF1ZDJsMGFFTnlaV1JsYm5ScFlXeHpLU3h5TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvWENKeVpXRmtlWE4wWVhSbFkyaGhibWRsWENJc2RHaHBjeTV2YmxOMFlYUmxRMmhoYm1kbExtSnBibVFvZEdocGN5a3BMSEl1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWhjSW5CeWIyZHlaWE56WENJc2RHaHBjeTV2YmxCeWIyZHlaWE56UlhabGJuUXVZbWx1WkNoMGFHbHpLU2tzY2k1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0Z3aWJHOWhaR1Z1WkZ3aUxIUm9hWE11YjI1TWIyRmtSWFpsYm5RdVltbHVaQ2gwYUdsektTa3NjaTVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLRndpWlhKeWIzSmNJaXhtZFc1amRHbHZiaWhsS1h0MExtOXdkR2x2Ym5NdVpHVmlkV2NtSm1rdVpHVmlkV2NvWENKWVNGSXVaWEp5YjNKY0lpeGxLU3gwTG05d2RHbHZibk11YjI1RmJtUW9aUzVsY25KdmNpbDlLWDBzWlM1d2NtOTBiM1I1Y0dVdVkyOXVabWxuZFhKbFdHaHlQV1oxYm1OMGFXOXVLQ2w3ZEdocGN5NTRhSEl1Y21WemNHOXVjMlZVZVhCbFBWd2lkR1Y0ZEZ3aUxIUm9hWE11ZUdoeUxtOTJaWEp5YVdSbFRXbHRaVlI1Y0dVb1hDSjBaWGgwTDNCc1lXbHVPeUJqYUdGeWMyVjBQWGd0ZFhObGNpMWtaV1pwYm1Wa1hDSXBmU3hsTG5CeWIzUnZkSGx3WlM1allXNWpaV3c5Wm5WdVkzUnBiMjRvS1h0MGFHbHpMbTl3ZEdsdmJuTXVaR1ZpZFdjbUpta3VaR1ZpZFdjb1hDSllTRkl1WVdKdmNuUmNJaWtzZEdocGN5NTRhSEl1WVdKdmNuUW9LWDBzWlgwb0tUdDBMbGhJVWoxMU8zWmhjaUJrUFdaMWJtTjBhVzl1S0dVcGUyWjFibU4wYVc5dUlIUW9LWHR5WlhSMWNtNGdiblZzYkNFOVBXVW1KbVV1WVhCd2JIa29kR2hwY3l4aGNtZDFiV1Z1ZEhNcGZIeDBhR2x6ZlhKbGRIVnliaUJ2S0hRc1pTa3NkQzV3Y205MGIzUjVjR1V1WTI5dVptbG5kWEpsV0doeVBXWjFibU4wYVc5dUtDbDdkR2hwY3k1dmNIUnBiMjV6TG1SbFluVm5KaVpwTG1SbFluVm5LRndpVFc5NldFaFNMbU52Ym1acFozVnlaVmhvY2pvZ2MyVjBkR2x1WnlCeVpYTndiMjV6WlZSNWNHVWdkRzhnSjIxdmVpMWphSFZ1YTJWa0xXRnljbUY1WW5WbVptVnlKMXdpS1N4MGFHbHpMbmhvY2k1eVpYTndiMjV6WlZSNWNHVTlYQ0p0YjNvdFkyaDFibXRsWkMxaGNuSmhlV0oxWm1abGNsd2lmU3gwTG5CeWIzUnZkSGx3WlM1dmJsQnliMmR5WlhOelJYWmxiblE5Wm5WdVkzUnBiMjRvS1h0MllYSWdaVDEwYUdsekxuaG9jaTV5WlhOd2IyNXpaVHQwYUdsekxtOXdkR2x2Ym5NdVpHVmlkV2NtSm1rdVpHVmlkV2NvWENKTmIzcFlTRkl1YjI1UWNtOW5jbVZ6YzBWMlpXNTBPaUJjSWl4dVpYY2dWV2x1ZERoQmNuSmhlU2hsS1Nrc2RHaHBjeTV2Y0hScGIyNXpMbTl1UTJoMWJtc29ibVYzSUZWcGJuUTRRWEp5WVhrb1pTa3BmU3gwZlNoMUtUdG1kVzVqZEdsdmJpQmpLR1VzZENsN2RtRnlJSEk5WlM1amFHRnlRMjlrWlVGMEtIUXBPMmxtS0hJK1BUVTFNamsySmlaeVBEMDFOak14T1NsN2RtRnlJRzQ5WlM1amFHRnlRMjlrWlVGMEtIUXJNU2s3Ymo0OU5UWXpNakFtSm00OFBUVTNNelF6SmlZb2NqMDJOVFV6Tmlzb2NpMDFOVEk1Tmp3OE1UQXBLeWh1TFRVMk16SXdLU2w5Y21WMGRYSnVJSEo5Wm5WdVkzUnBiMjRnY0NobEtYdG1iM0lvZG1GeUlIUTlibVYzSUZWcGJuUTRRWEp5WVhrb1pTNXNaVzVuZEdncExISTlNQ3h1UFRBN2JqeGxMbXhsYm1kMGFEdHVLeXNwZTNaaGNpQnZQVk4wY21sdVp5NXdjbTkwYjNSNWNHVXVZMjlrWlZCdmFXNTBRWFEvWlM1amIyUmxVRzlwYm5SQmRDaHVLVHBqS0dVc2JpazdkRnR5S3l0ZFBUSTFOU1p2ZlhKbGRIVnliaUIwZlhRdVRXOTZRMmgxYm10bFpFRnljbUY1UW5WbVptVnlXRWhTUFdRc2RDNXpkSEpwYm1kVWIwRnljbUY1UW5WbVptVnlQWEI5TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHRjSW5WelpTQnpkSEpwWTNSY0lqdFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1R0MllYSWdiaXh2UFhJb01Da3NjejFtZFc1amRHbHZiaWhsS1h0eVpYUjFjbTRnT1QwOVBXVjhmREV3UFQwOVpYeDhNVE05UFQxbGZUdG1kVzVqZEdsdmJpQnBLR1VwZTNKbGRIVnliaUJ6S0dVcGZIeGxQajB6TWlZbVpUdzlNVEkyZldaMWJtTjBhVzl1SUdFb1pTbDdabTl5S0haaGNpQjBQVEE3ZENFOVBXVXViR1Z1WjNSb095c3JkQ2xwWmlnaGFTaGxXM1JkS1NsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKTlpYUmhaR0YwWVNCcGN5QnViM1FnZG1Gc2FXUWdLSEJ5YVc1MFlXSnNaU2tnUVZORFNVbGNJaWs3Y21WMGRYSnVJRk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1V1WVhCd2JIa29VM1J5YVc1bkxFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tHVXBLWDFtZFc1amRHbHZiaUIxS0dVcGUzSmxkSFZ5YmlBeE1qZzlQU2d4TWpnbVpTNW5aWFJWYVc1ME9DZ3dLU2w5Wm5WdVkzUnBiMjRnWkNobEtYdHlaWFIxY200Z1pTNW5aWFJWYVc1ME16SW9NU3doTVNsOVpuVnVZM1JwYjI0Z1l5aGxMSFFzY2lsN2NtVjBkWEp1SUdVdVlubDBaVXhsYm1kMGFDMTBQajF5ZldaMWJtTjBhVzl1SUhBb1pTeDBMSElwZTJsbUtHVXVjMnhwWTJVcGNtVjBkWEp1SUdVdWMyeHBZMlVvZEN4eUtUdDJZWElnYmoxbExteGxibWQwYUR0MmIybGtJREFoUFQxeUppWW9iajF5S1R0bWIzSW9kbUZ5SUc4OWJtVjNJRlZwYm5RNFFYSnlZWGtvYmkxMEtTeHpQVEFzYVQxME8yazhianRwS3lzcGIxdHpLeXRkUFdWYmFWMDdjbVYwZFhKdUlHOTlkQzVrWldOdlpHVkJVME5KU1QxaExIUXVaVzVqYjJSbFFWTkRTVWs5Wm5WdVkzUnBiMjRvWlNsN1ptOXlLSFpoY2lCMFBXNWxkeUJWYVc1ME9FRnljbUY1S0dVdWJHVnVaM1JvS1N4eVBUQTdjaUU5UFdVdWJHVnVaM1JvT3lzcmNpbDdkbUZ5SUc0OVpTNWphR0Z5UTI5a1pVRjBLSElwTzJsbUtDRnBLRzRwS1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWsxbGRHRmtZWFJoSUdOdmJuUmhhVzV6SUdsdWRtRnNhV1FnUVZORFNVbGNJaWs3ZEZ0eVhUMXVmWEpsZEhWeWJpQjBmU3htZFc1amRHbHZiaWhsS1h0bFcyVXVUVVZUVTBGSFJUMHhYVDFjSWsxRlUxTkJSMFZjSWl4bFcyVXVWRkpCU1V4RlVsTTlNbDA5WENKVVVrRkpURVZTVTF3aWZTaHVQWFF1UTJoMWJtdFVlWEJsZkh3b2RDNURhSFZ1YTFSNWNHVTllMzBwS1R0MllYSWdhRDFtZFc1amRHbHZiaWdwZTJaMWJtTjBhVzl1SUdVb0tYdDBhR2x6TG1KMVptWmxjajF1ZFd4c0xIUm9hWE11Y0c5emFYUnBiMjQ5TUgxeVpYUjFjbTRnWlM1d2NtOTBiM1I1Y0dVdWNHRnljMlU5Wm5WdVkzUnBiMjRvWlN4MEtYdHBaaWd3UFQwOVpTNXNaVzVuZEdnbUpuUXBjbVYwZFhKdVcxMDdkbUZ5SUhJc2N6MWJYVHRwWmlodWRXeHNQVDEwYUdsekxtSjFabVpsY2lsMGFHbHpMbUoxWm1abGNqMWxMSFJvYVhNdWNHOXphWFJwYjI0OU1EdGxiSE5sSUdsbUtIUm9hWE11Y0c5emFYUnBiMjQ5UFQxMGFHbHpMbUoxWm1abGNpNWllWFJsVEdWdVozUm9LWFJvYVhNdVluVm1abVZ5UFdVc2RHaHBjeTV3YjNOcGRHbHZiajB3TzJWc2MyVjdkbUZ5SUdrOWRHaHBjeTVpZFdabVpYSXVZbmwwWlV4bGJtZDBhQzEwYUdsekxuQnZjMmwwYVc5dUxHZzlibVYzSUZWcGJuUTRRWEp5WVhrb2FTdGxMbUo1ZEdWTVpXNW5kR2dwTEdZOWNDaDBhR2x6TG1KMVptWmxjaXgwYUdsekxuQnZjMmwwYVc5dUtUdG9Mbk5sZENobUxEQXBPM1poY2lCc1BXNWxkeUJWYVc1ME9FRnljbUY1S0dVcE8yZ3VjMlYwS0d3c2FTa3NkR2hwY3k1aWRXWm1aWEk5YUN4MGFHbHpMbkJ2YzJsMGFXOXVQVEI5Wm05eUtEczdLWHRwWmlnaFl5aDBhR2x6TG1KMVptWmxjaXgwYUdsekxuQnZjMmwwYVc5dUxEVXBLWEpsZEhWeWJpQnpPM1poY2lCblBYQW9kR2hwY3k1aWRXWm1aWElzZEdocGN5NXdiM05wZEdsdmJpeDBhR2x6TG5CdmMybDBhVzl1S3pVcExHSTlibVYzSUVSaGRHRldhV1YzS0djdVluVm1abVZ5TEdjdVlubDBaVTltWm5ObGRDeG5MbUo1ZEdWTVpXNW5kR2dwTEhrOVpDaGlLVHRwWmlnaFl5aDBhR2x6TG1KMVptWmxjaXgwYUdsekxuQnZjMmwwYVc5dUxEVXJlU2twY21WMGRYSnVJSE03ZG1GeUlIWTljQ2gwYUdsekxtSjFabVpsY2l4MGFHbHpMbkJ2YzJsMGFXOXVLelVzZEdocGN5NXdiM05wZEdsdmJpczFLM2twTzJsbUtIUm9hWE11Y0c5emFYUnBiMjRyUFRVcmVTeDFLR0lwS1hKbGRIVnliaUJ6TG5CMWMyZ29lMk5vZFc1clZIbHdaVHB1TGxSU1FVbE1SVkpUTEhSeVlXbHNaWEp6T2loeVBYWXNibVYzSUc4dVRXVjBZV1JoZEdFb1lTaHlLU2twZlNrc2N6dHpMbkIxYzJnb2UyTm9kVzVyVkhsd1pUcHVMazFGVTFOQlIwVXNaR0YwWVRwMmZTbDlmU3hsZlNncE8zUXVRMmgxYm10UVlYSnpaWEk5YUgwc1puVnVZM1JwYjI0b1pTeDBMSElwZTF3aWRYTmxJSE4wY21samRGd2lPM1poY2lCdU8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTEdaMWJtTjBhVzl1S0dVcGUyVmJaUzVQU3owd1hUMWNJazlMWENJc1pWdGxMa05oYm1ObGJHVmtQVEZkUFZ3aVEyRnVZMlZzWldSY0lpeGxXMlV1Vlc1cmJtOTNiajB5WFQxY0lsVnVhMjV2ZDI1Y0lpeGxXMlV1U1c1MllXeHBaRUZ5WjNWdFpXNTBQVE5kUFZ3aVNXNTJZV3hwWkVGeVozVnRaVzUwWENJc1pWdGxMa1JsWVdSc2FXNWxSWGhqWldWa1pXUTlORjA5WENKRVpXRmtiR2x1WlVWNFkyVmxaR1ZrWENJc1pWdGxMazV2ZEVadmRXNWtQVFZkUFZ3aVRtOTBSbTkxYm1SY0lpeGxXMlV1UVd4eVpXRmtlVVY0YVhOMGN6MDJYVDFjSWtGc2NtVmhaSGxGZUdsemRITmNJaXhsVzJVdVVHVnliV2x6YzJsdmJrUmxibWxsWkQwM1hUMWNJbEJsY20xcGMzTnBiMjVFWlc1cFpXUmNJaXhsVzJVdVVtVnpiM1Z5WTJWRmVHaGhkWE4wWldROU9GMDlYQ0pTWlhOdmRYSmpaVVY0YUdGMWMzUmxaRndpTEdWYlpTNUdZV2xzWldSUWNtVmpiMjVrYVhScGIyNDlPVjA5WENKR1lXbHNaV1JRY21WamIyNWthWFJwYjI1Y0lpeGxXMlV1UVdKdmNuUmxaRDB4TUYwOVhDSkJZbTl5ZEdWa1hDSXNaVnRsTGs5MWRFOW1VbUZ1WjJVOU1URmRQVndpVDNWMFQyWlNZVzVuWlZ3aUxHVmJaUzVWYm1sdGNHeGxiV1Z1ZEdWa1BURXlYVDFjSWxWdWFXMXdiR1Z0Wlc1MFpXUmNJaXhsVzJVdVNXNTBaWEp1WVd3OU1UTmRQVndpU1c1MFpYSnVZV3hjSWl4bFcyVXVWVzVoZG1GcGJHRmliR1U5TVRSZFBWd2lWVzVoZG1GcGJHRmliR1ZjSWl4bFcyVXVSR0YwWVV4dmMzTTlNVFZkUFZ3aVJHRjBZVXh2YzNOY0lpeGxXMlV1Vlc1aGRYUm9aVzUwYVdOaGRHVmtQVEUyWFQxY0lsVnVZWFYwYUdWdWRHbGpZWFJsWkZ3aWZTaHVQWFF1UTI5a1pYeDhLSFF1UTI5a1pUMTdmU2twTEhRdWFIUjBjRk4wWVhSMWMxUnZRMjlrWlQxbWRXNWpkR2x2YmlobEtYdHpkMmwwWTJnb1pTbDdZMkZ6WlNBd09uSmxkSFZ5YmlCdUxrbHVkR1Z5Ym1Gc08yTmhjMlVnTWpBd09uSmxkSFZ5YmlCdUxrOUxPMk5oYzJVZ05EQXdPbkpsZEhWeWJpQnVMa2x1ZG1Gc2FXUkJjbWQxYldWdWREdGpZWE5sSURRd01UcHlaWFIxY200Z2JpNVZibUYxZEdobGJuUnBZMkYwWldRN1kyRnpaU0EwTURNNmNtVjBkWEp1SUc0dVVHVnliV2x6YzJsdmJrUmxibWxsWkR0allYTmxJRFF3TkRweVpYUjFjbTRnYmk1T2IzUkdiM1Z1WkR0allYTmxJRFF3T1RweVpYUjFjbTRnYmk1QlltOXlkR1ZrTzJOaGMyVWdOREV5T25KbGRIVnliaUJ1TGtaaGFXeGxaRkJ5WldOdmJtUnBkR2x2Ymp0allYTmxJRFF5T1RweVpYUjFjbTRnYmk1U1pYTnZkWEpqWlVWNGFHRjFjM1JsWkR0allYTmxJRFE1T1RweVpYUjFjbTRnYmk1RFlXNWpaV3hsWkR0allYTmxJRFV3TURweVpYUjFjbTRnYmk1VmJtdHViM2R1TzJOaGMyVWdOVEF4T25KbGRIVnliaUJ1TGxWdWFXMXdiR1Z0Wlc1MFpXUTdZMkZ6WlNBMU1ETTZjbVYwZFhKdUlHNHVWVzVoZG1GcGJHRmliR1U3WTJGelpTQTFNRFE2Y21WMGRYSnVJRzR1UkdWaFpHeHBibVZGZUdObFpXUmxaRHRrWldaaGRXeDBPbkpsZEhWeWJpQnVMbFZ1YTI1dmQyNTlmWDBzWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTzNaaGNpQnVQWElvTXlrc2J6MXlLRFFwTEhNOWNpZzJLU3hwUFhJb01USXBMR0U5Y2lnM0tTeDFQWElvTlNrc1pEMXlLRGtwTEdNOWNpZ3hNeWtzY0QxeUtERTFLU3hvUFhJb01pazdJV1oxYm1OMGFXOXVLR1VwZTJVdWMyVjBSR1ZtWVhWc2RGUnlZVzV6Y0c5eWREMXZMbk5sZEVSbFptRjFiSFJVY21GdWMzQnZjblJHWVdOMGIzSjVMR1V1UTNKdmMzTkNjbTkzYzJWeVNIUjBjRlJ5WVc1emNHOXlkRDExTGtOeWIzTnpRbkp2ZDNObGNraDBkSEJVY21GdWMzQnZjblFzWlM1R1pYUmphRkpsWVdSaFlteGxVM1J5WldGdFZISmhibk53YjNKMFBYTXVSbVYwWTJoU1pXRmtZV0pzWlZOMGNtVmhiVlJ5WVc1emNHOXlkQ3hsTGxob2NsUnlZVzV6Y0c5eWREMWhMbGhvY2xSeVlXNXpjRzl5ZEN4bExsZGxZbk52WTJ0bGRGUnlZVzV6Y0c5eWREMXBMbGRsWW5OdlkydGxkRlJ5WVc1emNHOXlkQ3hsTGtOdlpHVTlaQzVEYjJSbExHVXVUV1YwWVdSaGRHRTliaTVDY205M2MyVnlTR1ZoWkdWeWN5eGxMbU5zYVdWdWREMW1kVzVqZEdsdmJpaGxMSFFwZTNKbGRIVnliaUJvTG1Oc2FXVnVkQ2hsTEhRcGZTeGxMbWx1ZG05clpUMWpMbWx1ZG05clpTeGxMblZ1WVhKNVBYQXVkVzVoY25sOUtIUXVaM0p3WTN4OEtIUXVaM0p3WXoxN2ZTa3BmU3htZFc1amRHbHZiaWhsTEhRc2NpbDdYQ0oxYzJVZ2MzUnlhV04wWENJN2RtRnlJRzQ3Wm5WdVkzUnBiMjRnYnlncGUybG1LSFp2YVdRZ01DRTlQVzRwY21WMGRYSnVJRzQ3YVdZb1dFMU1TSFIwY0ZKbGNYVmxjM1FwZTI0OWJtVjNJRmhOVEVoMGRIQlNaWEYxWlhOME8zUnllWHR1TG05d1pXNG9YQ0pIUlZSY0lpeGNJbWgwZEhCek9pOHZiRzlqWVd4b2IzTjBYQ0lwZldOaGRHTm9LR1VwZTMxOWNtVjBkWEp1SUc1OVpuVnVZM1JwYjI0Z2N5aGxLWHQyWVhJZ2REMXZLQ2s3YVdZb0lYUXBjbVYwZFhKdUlURTdkSEo1ZTNKbGRIVnliaUIwTG5KbGMzQnZibk5sVkhsd1pUMWxMSFF1Y21WemNHOXVjMlZVZVhCbFBUMDlaWDFqWVhSamFDaGxLWHQ5Y21WMGRYSnVJVEY5VDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUXNYQ0pmWDJWelRXOWtkV3hsWENJc2UzWmhiSFZsT2lFd2ZTa3NkQzU0YUhKVGRYQndiM0owYzFKbGMzQnZibk5sVkhsd1pUMXpMSFF1WkdWMFpXTjBUVzk2V0VoU1UzVndjRzl5ZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5Ymx3aWRXNWtaV1pwYm1Wa1hDSWhQWFI1Y0dWdlppQllUVXhJZEhSd1VtVnhkV1Z6ZENZbWN5aGNJbTF2ZWkxamFIVnVhMlZrTFdGeWNtRjVZblZtWm1WeVhDSXBmU3gwTG1SbGRHVmpkRmhJVWs5MlpYSnlhV1JsVFdsdFpWUjVjR1ZUZFhCd2IzSjBQV1oxYm1OMGFXOXVLQ2w3Y21WMGRYSnVYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUZoTlRFaDBkSEJTWlhGMVpYTjBKaVpZVFV4SWRIUndVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1hDSnZkbVZ5Y21sa1pVMXBiV1ZVZVhCbFhDSXBmWDBzWm5WdVkzUnBiMjRvWlN4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8wOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2gwTEZ3aVgxOWxjMDF2WkhWc1pWd2lMSHQyWVd4MVpUb2hNSDBwTzNaaGNpQnVMRzg5Y2lneEtTeHpQWElvT0NrN0lXWjFibU4wYVc5dUtHVXBlMlZiWlM1R1NVNUpVMGhmVTBWT1JEMHhYVDFjSWtaSlRrbFRTRjlUUlU1RVhDSjlLRzU4ZkNodVBYdDlLU2s3ZG1GeUlHazlibVYzSUZWcGJuUTRRWEp5WVhrb1d6RmRLVHQwTGxkbFluTnZZMnRsZEZSeVlXNXpjRzl5ZEQxbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCbWRXNWpkR2x2YmlobEtYdHlaWFIxY200Z1puVnVZM1JwYjI0b1pTbDdaUzVrWldKMVp5WW1ieTVrWldKMVp5aGNJbmRsWW5OdlkydGxkRkpsY1hWbGMzUmNJaXhsS1R0MllYSWdkQ3h5UFdaMWJtTjBhVzl1S0dVcGUybG1LRndpYUhSMGNITTZMeTljSWowOVBXVXVjM1ZpYzNSeUtEQXNPQ2twY21WMGRYSnVYQ0ozYzNNNkx5OWNJaXRsTG5OMVluTjBjaWc0S1R0cFppaGNJbWgwZEhBNkx5OWNJajA5UFdVdWMzVmljM1J5S0RBc055a3BjbVYwZFhKdVhDSjNjem92TDF3aUsyVXVjM1ZpYzNSeUtEY3BPM1JvY205M0lHNWxkeUJGY25KdmNpaGNJbGRsWW5OdlkydGxkQ0IwY21GdWMzQnZjblFnWTI5dWMzUnlkV04wWldRZ2QybDBhQ0J1YjI0dGFIUjBjSE02THk4Z2IzSWdhSFIwY0Rvdkx5Qm9iM04wTGx3aUtYMG9aUzUxY213cExHRTlXMTA3Wm5WdVkzUnBiMjRnZFNobEtYdHBaaWhsUFQwOWJpNUdTVTVKVTBoZlUwVk9SQ2wwTG5ObGJtUW9hU2s3Wld4elpYdDJZWElnY2oxbExHODlibVYzSUVsdWREaEJjbkpoZVNoeUxtSjVkR1ZNWlc1bmRHZ3JNU2s3Ynk1elpYUW9ibVYzSUZWcGJuUTRRWEp5WVhrb1d6QmRLU2tzYnk1elpYUW9jaXd4S1N4MExuTmxibVFvYnlsOWZYSmxkSFZ5Ym50elpXNWtUV1Z6YzJGblpUcG1kVzVqZEdsdmJpaGxLWHQwSmlaMExuSmxZV1I1VTNSaGRHVWhQVDEwTGtOUFRrNUZRMVJKVGtjL2RTaGxLVHBoTG5CMWMyZ29aU2w5TEdacGJtbHphRk5sYm1RNlpuVnVZM1JwYjI0b0tYdDBKaVowTG5KbFlXUjVVM1JoZEdVaFBUMTBMa05QVGs1RlExUkpUa2MvZFNodUxrWkpUa2xUU0Y5VFJVNUVLVHBoTG5CMWMyZ29iaTVHU1U1SlUwaGZVMFZPUkNsOUxITjBZWEowT21aMWJtTjBhVzl1S0c0cGV5aDBQVzVsZHlCWFpXSlRiMk5yWlhRb2NpeGJYQ0puY25CakxYZGxZbk52WTJ0bGRITmNJbDBwS1M1aWFXNWhjbmxVZVhCbFBWd2lZWEp5WVhsaWRXWm1aWEpjSWl4MExtOXViM0JsYmoxbWRXNWpkR2x2YmlncGUzWmhjaUJ5TzJVdVpHVmlkV2NtSm04dVpHVmlkV2NvWENKM1pXSnpiMk5yWlhSU1pYRjFaWE4wTG05dWIzQmxibHdpS1N4MExuTmxibVFvS0hJOVhDSmNJaXh1TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWlN4MEtYdHlLejFsSzF3aU9pQmNJaXQwTG1wdmFXNG9YQ0lzSUZ3aUtTdGNJbHhjY2x4Y2Jsd2lmU2tzY3k1bGJtTnZaR1ZCVTBOSlNTaHlLU2twTEdFdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobEtYdDFLR1VwZlNsOUxIUXViMjVqYkc5elpUMW1kVzVqZEdsdmJpaDBLWHRsTG1SbFluVm5KaVp2TG1SbFluVm5LRndpZDJWaWMyOWphMlYwVW1WeGRXVnpkQzV2Ym1Oc2IzTmxYQ0lzZENrc1pTNXZia1Z1WkNncGZTeDBMbTl1WlhKeWIzSTlablZ1WTNScGIyNG9kQ2w3WlM1a1pXSjFaeVltYnk1a1pXSjFaeWhjSW5kbFluTnZZMnRsZEZKbGNYVmxjM1F1YjI1bGNuSnZjbHdpTEhRcGZTeDBMbTl1YldWemMyRm5aVDFtZFc1amRHbHZiaWgwS1h0bExtOXVRMmgxYm1zb2JtVjNJRlZwYm5RNFFYSnlZWGtvZEM1a1lYUmhLU2w5ZlN4allXNWpaV3c2Wm5WdVkzUnBiMjRvS1h0bExtUmxZblZuSmladkxtUmxZblZuS0Z3aWQyVmljMjlqYTJWMExtRmliM0owWENJcExIUXVZMnh2YzJVb0tYMTlmU2hsS1gxOWZTeG1kVzVqZEdsdmJpaGxMSFFzY2lsN1hDSjFjMlVnYzNSeWFXTjBYQ0k3VDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUXNYQ0pmWDJWelRXOWtkV3hsWENJc2UzWmhiSFZsT2lFd2ZTazdkbUZ5SUc0OWNpZ3lLVHQwTG1sdWRtOXJaVDFtZFc1amRHbHZiaWhsTEhRcGUybG1LR1V1Y21WeGRXVnpkRk4wY21WaGJTbDBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSXVhVzUyYjJ0bElHTmhibTV2ZENCaVpTQjFjMlZrSUhkcGRHZ2dZMnhwWlc1MExYTjBjbVZoYldsdVp5QnRaWFJvYjJSekxpQlZjMlVnTG1Oc2FXVnVkQ0JwYm5OMFpXRmtMbHdpS1R0MllYSWdjajF1TG1Oc2FXVnVkQ2hsTEh0b2IzTjBPblF1YUc5emRDeDBjbUZ1YzNCdmNuUTZkQzUwY21GdWMzQnZjblFzWkdWaWRXYzZkQzVrWldKMVozMHBPM0psZEhWeWJpQjBMbTl1U0dWaFpHVnljeVltY2k1dmJraGxZV1JsY25Nb2RDNXZia2hsWVdSbGNuTXBMSFF1YjI1TlpYTnpZV2RsSmlaeUxtOXVUV1Z6YzJGblpTaDBMbTl1VFdWemMyRm5aU2tzZEM1dmJrVnVaQ1ltY2k1dmJrVnVaQ2gwTG05dVJXNWtLU3h5TG5OMFlYSjBLSFF1YldWMFlXUmhkR0VwTEhJdWMyVnVaQ2gwTG5KbGNYVmxjM1FwTEhJdVptbHVhWE5vVTJWdVpDZ3BMSHRqYkc5elpUcG1kVzVqZEdsdmJpZ3BlM0l1WTJ4dmMyVW9LWDE5Zlgwc1puVnVZM1JwYjI0b1pTeDBMSElwZTF3aWRYTmxJSE4wY21samRGd2lPMDlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMExGd2lYMTlsYzAxdlpIVnNaVndpTEh0MllXeDFaVG9oTUgwcExIUXVabkpoYldWU1pYRjFaWE4wUFdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwUFdVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1S0Nrc2NqMXVaWGNnUVhKeVlYbENkV1ptWlhJb2RDNWllWFJsVEdWdVozUm9LelVwTzNKbGRIVnliaUJ1WlhjZ1JHRjBZVlpwWlhjb2Npd3hMRFFwTG5ObGRGVnBiblF6TWlnd0xIUXViR1Z1WjNSb0xDRXhLU3h1WlhjZ1ZXbHVkRGhCY25KaGVTaHlMRFVwTG5ObGRDaDBLU3h1WlhjZ1ZXbHVkRGhCY25KaGVTaHlLWDE5TEdaMWJtTjBhVzl1S0dVc2RDeHlLWHRjSW5WelpTQnpkSEpwWTNSY0lqdFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEN4Y0lsOWZaWE5OYjJSMWJHVmNJaXg3ZG1Gc2RXVTZJVEI5S1R0MllYSWdiajF5S0RBcExHODljaWd5S1R0MExuVnVZWEo1UFdaMWJtTjBhVzl1S0dVc2RDbDdhV1lvWlM1eVpYTndiMjV6WlZOMGNtVmhiU2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0l1ZFc1aGNua2dZMkZ1Ym05MElHSmxJSFZ6WldRZ2QybDBhQ0J6WlhKMlpYSXRjM1J5WldGdGFXNW5JRzFsZEdodlpITXVJRlZ6WlNBdWFXNTJiMnRsSUc5eUlDNWpiR2xsYm5RZ2FXNXpkR1ZoWkM1Y0lpazdhV1lvWlM1eVpYRjFaWE4wVTNSeVpXRnRLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJaTUxYm1GeWVTQmpZVzV1YjNRZ1ltVWdkWE5sWkNCM2FYUm9JR05zYVdWdWRDMXpkSEpsWVcxcGJtY2diV1YwYUc5a2N5NGdWWE5sSUM1amJHbGxiblFnYVc1emRHVmhaQzVjSWlrN2RtRnlJSEk5Ym5Wc2JDeHpQVzUxYkd3c2FUMXZMbU5zYVdWdWRDaGxMSHRvYjNOME9uUXVhRzl6ZEN4MGNtRnVjM0J2Y25RNmRDNTBjbUZ1YzNCdmNuUXNaR1ZpZFdjNmRDNWtaV0oxWjMwcE8zSmxkSFZ5YmlCcExtOXVTR1ZoWkdWeWN5aG1kVzVqZEdsdmJpaGxLWHR5UFdWOUtTeHBMbTl1VFdWemMyRm5aU2htZFc1amRHbHZiaWhsS1h0elBXVjlLU3hwTG05dVJXNWtLR1oxYm1OMGFXOXVLR1VzYnl4cEtYdDBMbTl1Ulc1a0tIdHpkR0YwZFhNNlpTeHpkR0YwZFhOTlpYTnpZV2RsT204c2FHVmhaR1Z5Y3pweWZIeHVaWGNnYmk1TlpYUmhaR0YwWVN4dFpYTnpZV2RsT25Nc2RISmhhV3hsY25NNmFYMHBmU2tzYVM1emRHRnlkQ2gwTG0xbGRHRmtZWFJoS1N4cExuTmxibVFvZEM1eVpYRjFaWE4wS1N4cExtWnBibWx6YUZObGJtUW9LU3g3WTJ4dmMyVTZablZ1WTNScGIyNG9LWHRwTG1Oc2IzTmxLQ2w5ZlgxOVhTbDlLVHNpTENJdkx5QnpiM1Z5WTJVNklHZHZiMmRzWlM5eWNHTXZjM1JoZEhWekxuQnliM1J2WEc0dktpcGNiaUFxSUVCbWFXeGxiM1psY25acFpYZGNiaUFxSUVCbGJtaGhibU5sWVdKc1pWeHVJQ29nUUhOMWNIQnlaWE56SUh0dGFYTnphVzVuVW1WeGRXbHlaWDBnY21Wd2IzSjBjeUJsY25KdmNpQnZiaUJwYlhCc2FXTnBkQ0IwZVhCbElIVnpZV2RsY3k1Y2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldWemMyRm5aVU52Ym5abGJuUnBiMjV6ZlNCS1V5QkRiMjF3YVd4bGNpQnlaWEJ2Y25SeklHRnVJR1Z5Y205eUlHbG1JR0VnZG1GeWFXRmliR1VnYjNKY2JpQXFJQ0FnSUNCbWFXVnNaQ0J6ZEdGeWRITWdkMmwwYUNBblRWTkhYeWNnWVc1a0lHbHpiaWQwSUdFZ2RISmhibk5zWVhSaFlteGxJRzFsYzNOaFoyVXVYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNiaTh2SUVkRlRrVlNRVlJGUkNCRFQwUkZJQzB0SUVSUElFNVBWQ0JGUkVsVUlWeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdLaTljYmk4dklFQjBjeTF1YjJOb1pXTnJYRzVjYm5aaGNpQnFjM0JpSUQwZ2NtVnhkV2x5WlNnbloyOXZaMnhsTFhCeWIzUnZZblZtSnlrN1hHNTJZWElnWjI5dlp5QTlJR3B6Y0dJN1hHNTJZWElnWjJ4dlltRnNJRDBnS0daMWJtTjBhVzl1S0NrZ2UxeHVJQ0JwWmlBb2RHaHBjeWtnZXlCeVpYUjFjbTRnZEdocGN6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUhkcGJtUnZkenNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc2djbVYwZFhKdUlHZHNiMkpoYkRzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhObGJHWWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQnpaV3htT3lCOVhHNGdJSEpsZEhWeWJpQkdkVzVqZEdsdmJpZ25jbVYwZFhKdUlIUm9hWE1uS1NncE8xeHVmUzVqWVd4c0tHNTFiR3dwS1R0Y2JseHVkbUZ5SUdkdmIyZHNaVjl3Y205MGIySjFabDloYm5sZmNHSWdQU0J5WlhGMWFYSmxLQ2RuYjI5bmJHVXRjSEp2ZEc5aWRXWXZaMjl2WjJ4bEwzQnliM1J2WW5WbUwyRnVlVjl3WWk1cWN5Y3BPMXh1WjI5dlp5NXZZbXBsWTNRdVpYaDBaVzVrS0hCeWIzUnZMQ0JuYjI5bmJHVmZjSEp2ZEc5aWRXWmZZVzU1WDNCaUtUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeXdnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN5d2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6Snp0Y2JuMWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6TmRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3k1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdZMjlrWlRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0F3S1N4Y2JpQWdJQ0J0WlhOellXZGxPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURJc0lGd2lYQ0lwTEZ4dUlDQWdJR1JsZEdGcGJITk1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJFWlhSaGFXeHpUR2x6ZENncExGeHVJQ0FnSUdkdmIyZHNaVjl3Y205MGIySjFabDloYm5sZmNHSXVRVzU1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxYzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRWx1ZERNeUtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFTnZaR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUk5aWE56WVdkbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJuYjI5bmJHVmZjSEp2ZEc5aWRXWmZZVzU1WDNCaUxrRnVlVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeG5iMjluYkdWZmNISnZkRzlpZFdaZllXNTVYM0JpTGtGdWVTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pFUmxkR0ZwYkhNb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y25CakxsTjBZWFIxY3k1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhNdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjMzBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUTI5a1pTZ3BPMXh1SUNCcFppQW9aaUFoUFQwZ01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVWx1ZERNeUtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEUxbGMzTmhaMlVvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRVpYUmhhV3h6VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTXl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCbmIyOW5iR1ZmY0hKdmRHOWlkV1pmWVc1NVgzQmlMa0Z1ZVM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJqYjJSbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTXVjSEp2ZEc5MGVYQmxMbWRsZEVOdlpHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTXVjSEp2ZEc5MGVYQmxMbk5sZEVOdlpHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkJ5YjNSdk0wbHVkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYldWemMyRm5aU0E5SURJN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6TG5CeWIzUnZkSGx3WlM1blpYUk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpMbkJ5YjNSdmRIbHdaUzV6WlhSTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnWjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVNCa1pYUmhhV3h6SUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlVDU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWekxuQnliM1J2ZEhsd1pTNW5aWFJFWlhSaGFXeHpUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlVDU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnWjI5dloyeGxYM0J5YjNSdlluVm1YMkZ1ZVY5d1lpNUJibmtzSURNcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVQ1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5NVRkR0YwZFhOOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6TG5CeWIzUnZkSGx3WlM1elpYUkVaWFJoYVd4elRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibms5ZlNCdmNIUmZkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTXVjSEp2ZEc5MGVYQmxMbUZrWkVSbGRHRnBiSE1nUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSR1YwWVdsc2MweHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBSR1YwWVdsc2MweHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9aWGh3YjNKMGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5Kd1l5azdYRzRpTENJdkx5QnpiM1Z5WTJVNklIQnliM1J2TDNKd1l5OTNaV0p5ZEdNdmRqRXZaM0p3WXk1d2NtOTBiMXh1THlvcVhHNGdLaUJBWm1sc1pXOTJaWEoyYVdWM1hHNGdLaUJBWlc1b1lXNWpaV0ZpYkdWY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldsemMybHVaMUpsY1hWcGNtVjlJSEpsY0c5eWRITWdaWEp5YjNJZ2IyNGdhVzF3YkdsamFYUWdkSGx3WlNCMWMyRm5aWE11WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlMjFsYzNOaFoyVkRiMjUyWlc1MGFXOXVjMzBnU2xNZ1EyOXRjR2xzWlhJZ2NtVndiM0owY3lCaGJpQmxjbkp2Y2lCcFppQmhJSFpoY21saFlteGxJRzl5WEc0Z0tpQWdJQ0FnWm1sbGJHUWdjM1JoY25SeklIZHBkR2dnSjAxVFIxOG5JR0Z1WkNCcGMyNG5kQ0JoSUhSeVlXNXpiR0YwWVdKc1pTQnRaWE56WVdkbExseHVJQ29nUUhCMVlteHBZMXh1SUNvdlhHNHZMeUJIUlU1RlVrRlVSVVFnUTA5RVJTQXRMU0JFVHlCT1QxUWdSVVJKVkNGY2JpOHFJR1Z6YkdsdWRDMWthWE5oWW14bElDb3ZYRzR2THlCQWRITXRibTlqYUdWamExeHVYRzUyWVhJZ2FuTndZaUE5SUhKbGNYVnBjbVVvSjJkdmIyZHNaUzF3Y205MGIySjFaaWNwTzF4dWRtRnlJR2R2YjJjZ1BTQnFjM0JpTzF4dWRtRnlJR2RzYjJKaGJDQTlJQ2htZFc1amRHbHZiaWdwSUh0Y2JpQWdhV1lnS0hSb2FYTXBJSHNnY21WMGRYSnVJSFJvYVhNN0lIMWNiaUFnYVdZZ0tIUjVjR1Z2WmlCM2FXNWtiM2NnSVQwOUlDZDFibVJsWm1sdVpXUW5LU0I3SUhKbGRIVnliaUIzYVc1a2IzYzdJSDFjYmlBZ2FXWWdLSFI1Y0dWdlppQm5iRzlpWVd3Z0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCbmJHOWlZV3c3SUgxY2JpQWdhV1lnS0hSNWNHVnZaaUJ6Wld4bUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2V5QnlaWFIxY200Z2MyVnNaanNnZlZ4dUlDQnlaWFIxY200Z1JuVnVZM1JwYjI0b0ozSmxkSFZ5YmlCMGFHbHpKeWtvS1R0Y2JuMHVZMkZzYkNodWRXeHNLU2s3WEc1Y2JuWmhjaUJuYjI5bmJHVmZjSEp2ZEc5aWRXWmZaSFZ5WVhScGIyNWZjR0lnUFNCeVpYRjFhWEpsS0NkbmIyOW5iR1V0Y0hKdmRHOWlkV1l2WjI5dloyeGxMM0J5YjNSdlluVm1MMlIxY21GMGFXOXVYM0JpTG1wekp5azdYRzVuYjI5bkxtOWlhbVZqZEM1bGVIUmxibVFvY0hKdmRHOHNJR2R2YjJkc1pWOXdjbTkwYjJKMVpsOWtkWEpoZEdsdmJsOXdZaWs3WEc1MllYSWdaMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0lnUFNCeVpYRjFhWEpsS0NjdUxpOHVMaTh1TGk4dUxpOW5iMjluYkdVdmNuQmpMM04wWVhSMWMxOXdZaTVxY3ljcE8xeHVaMjl2Wnk1dlltcGxZM1F1WlhoMFpXNWtLSEJ5YjNSdkxDQm5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaWs3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNVVlWEJsUTJGelpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3ljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzVVZVhCbFEyRnpaU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25NbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM01uTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0Snp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOHBPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3k1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlVzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25NdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTW5PMXh1ZlZ4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWldRZ1lua2dTbk5RWWtOdlpHVkhaVzVsY21GMGIzSXVYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVQWDBnYjNCMFgyUmhkR0VnVDNCMGFXOXVZV3dnYVc1cGRHbGhiQ0JrWVhSaElHRnljbUY1TENCMGVYQnBZMkZzYkhrZ1puSnZiU0JoWEc0Z0tpQnpaWEoyWlhJZ2NtVnpjRzl1YzJVc0lHOXlJR052Ym5OMGNuVmpkR1ZrSUdScGNtVmpkR3g1SUdsdUlFcGhkbUZ6WTNKcGNIUXVJRlJvWlNCaGNuSmhlU0JwY3lCMWMyVmtYRzRnS2lCcGJpQndiR0ZqWlNCaGJtUWdZbVZqYjIxbGN5QndZWEowSUc5bUlIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1F1SUVsMElHbHpJRzV2ZENCamJHOXVaV1F1WEc0Z0tpQkpaaUJ1YnlCa1lYUmhJR2x6SUhCeWIzWnBaR1ZrTENCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBJSGRwYkd3Z1ltVWdaVzF3ZEhrc0lHSjFkQ0J6ZEdsc2JGeHVJQ29nZG1Gc2FXUXVYRzRnS2lCQVpYaDBaVzVrY3lCN2FuTndZaTVOWlhOellXZGxmVnh1SUNvZ1FHTnZibk4wY25WamRHOXlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlVuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk1zSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25NdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3k1eVpYQmxZWFJsWkVacFpXeGtjMThzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5YVc1bmN5YzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhKenRjYm4xY2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCa1lYUmhPaUJ0YzJjdVoyVjBSR0YwWVY5aGMwSTJOQ2dwTEZ4dUlDQWdJR1Z2YlRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01pd2dabUZzYzJVcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVRWVdOclpYUk5aWE56WVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3SVZWcGJuUTRRWEp5WVhsOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKNWRHVnpLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVJoZEdFb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F5T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSQ2IyOXNLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVZ2YlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUkdGMFlWOWhjMVU0S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZDZVhSbGN5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRmIyMG9LVHRjYmlBZ2FXWWdLR1lwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWQ2IyOXNLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1lubDBaWE1nWkdGMFlTQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVaMlYwUkdGMFlTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1lubDBaWE1nWkdGMFlTQTlJREU3WEc0Z0tpQlVhR2x6SUdseklHRWdkSGx3WlMxamIyNTJaWEp6YVc5dUlIZHlZWEJ3WlhJZ1lYSnZkVzVrSUdCblpYUkVZWFJoS0NsZ1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1WjJWMFJHRjBZVjloYzBJMk5DQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVlubDBaWE5CYzBJMk5DaGNiaUFnSUNBZ0lIUm9hWE11WjJWMFJHRjBZU2dwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1lubDBaWE1nWkdGMFlTQTlJREU3WEc0Z0tpQk9iM1JsSUhSb1lYUWdWV2x1ZERoQmNuSmhlU0JwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtJRzl1SUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxSUVCelpXVWdhSFIwY0RvdkwyTmhibWwxYzJVdVkyOXRMMVZwYm5RNFFYSnlZWGxjYmlBcUlGUm9hWE1nYVhNZ1lTQjBlWEJsTFdOdmJuWmxjbk5wYjI0Z2QzSmhjSEJsY2lCaGNtOTFibVFnWUdkbGRFUmhkR0VvS1dCY2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVdWNISnZkRzkwZVhCbExtZGxkRVJoZEdGZllYTlZPQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoVldsdWREaEJjbkpoZVgwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1aWVYUmxjMEZ6VlRnb1hHNGdJQ0FnSUNCMGFHbHpMbWRsZEVSaGRHRW9LU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVNoemRISnBibWQ4VldsdWREaEJjbkpoZVNsOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UVlXTnJaWFJOWlhOellXZGxMbkJ5YjNSdmRIbHdaUzV6WlhSRVlYUmhJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNlWFJsYzBacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmliMjlzSUdWdmJTQTlJREk3WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMbWRsZEVWdmJTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVjMlYwUlc5dElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOQ2IyOXNaV0Z1Um1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0TG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzE5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCcFpEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F4TENBd0tWeHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKbFlXMTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzA3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcwdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVmFXNTBOalFvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwU1dRb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcwdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwU1dRb0tUdGNiaUFnYVdZZ0tHWWdJVDA5SURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlZhVzUwTmpRb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0IxYVc1ME5qUWdhV1FnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlM1d2NtOTBiM1I1Y0dVdVoyVjBTV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISmxZVzB1Y0hKdmRHOTBlWEJsTG5ObGRFbGtJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkpiblJHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQlBibVZ2WmlCbmNtOTFjQ0JrWldacGJtbDBhVzl1Y3lCbWIzSWdkR2hwY3lCdFpYTnpZV2RsTGlCRllXTm9JR2R5YjNWd0lHUmxabWx1WlhNZ2RHaGxJR1pwWld4a1hHNGdLaUJ1ZFcxaVpYSnpJR0psYkc5dVoybHVaeUIwYnlCMGFHRjBJR2R5YjNWd0xpQlhhR1Z1SUc5bUlIUm9aWE5sSUdacFpXeGtjeWNnZG1Gc2RXVWdhWE1nYzJWMExDQmhiR3hjYmlBcUlHOTBhR1Z5SUdacFpXeGtjeUJwYmlCMGFHVWdaM0p2ZFhBZ1lYSmxJR05zWldGeVpXUXVJRVIxY21sdVp5QmtaWE5sY21saGJHbDZZWFJwYjI0c0lHbG1JRzExYkhScGNHeGxYRzRnS2lCbWFXVnNaSE1nWVhKbElHVnVZMjkxYm5SbGNtVmtJR1p2Y2lCaElHZHliM1Z3TENCdmJteDVJSFJvWlNCc1lYTjBJSFpoYkhWbElITmxaVzRnZDJsc2JDQmlaU0JyWlhCMExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHdoUVhKeVlYazhiblZ0WW1WeVBqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYeUE5SUZ0Yk1pd3pYVjA3WEc1Y2JpOHFLbHh1SUNvZ1FHVnVkVzBnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExsUjVjR1ZEWVhObElEMGdlMXh1SUNCVVdWQkZYMDVQVkY5VFJWUTZJREFzWEc0Z0lFaEZRVVJGVWxNNklESXNYRzRnSUUxRlUxTkJSMFU2SUROY2JuMDdYRzVjYmk4cUtseHVJQ29nUUhKbGRIVnliaUI3Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbFI1Y0dWRFlYTmxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRlI1Y0dWRFlYTmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNVVlWEJsUTJGelpYMGdLaThvYW5Od1lpNU5aWE56WVdkbExtTnZiWEIxZEdWUGJtVnZaa05oYzJVb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTa3BPMXh1ZlR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQnpkSEpsWVcwNklDaG1JRDBnYlhObkxtZGxkRk4wY21WaGJTZ3BLU0FtSmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwTEZ4dUlDQWdJR2hsWVdSbGNuTTZJQ2htSUQwZ2JYTm5MbWRsZEVobFlXUmxjbk1vS1NrZ0ppWWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3k1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcExGeHVJQ0FnSUcxbGMzTmhaMlU2SUNobUlEMGdiWE5uTG1kbGRFMWxjM05oWjJVb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemREdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxuTmxkRk4wY21WaGJTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTR1ZoWkdWeWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUV1Z6YzJGblpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVM1J5WldGdEtDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBTR1ZoWkdWeWN5Z3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBTR1ZoWkdWeWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBUV1Z6YzJGblpTZ3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJRE1zWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQlRkSEpsWVcwZ2MzUnlaV0Z0SUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJUZEhKbFlXMGdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcxOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlaV0Z0TENBeEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcxOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNXpaWFJUZEhKbFlXMGdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xOMGNtVmhiU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlRkSEpsWVcwb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtaGhjMU4wY21WaGJTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dVbVZ4ZFdWemRFaGxZV1JsY25NZ2FHVmhaR1Z5Y3lBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljMzFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJJWldGa1pYSnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25OOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEVobFlXUmxjbk1zSURJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVjBTR1ZoWkdWeWN5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBUMjVsYjJaWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01pd2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVZMnhsWVhKSVpXRmtaWEp6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRWhsWVdSbGNuTW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWhoYzBobFlXUmxjbk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUZKbGNYVmxjM1JOWlhOellXZGxJRzFsYzNOaFoyVWdQU0F6TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1WjJWMFRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExDQXpLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpYeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sZEUxbGMzTmhaMlVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1WM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUV1Z6YzJGblpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSTlpYTnpZV2RsS0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1b1lYTk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0J0WlhSb2IyUTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWtzWEc0Z0lDQWdiV1YwWVdSaGRHRTZJQ2htSUQwZ2JYTm5MbWRsZEUxbGRHRmtZWFJoS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LU3hjYmlBZ0lDQjBhVzFsYjNWME9pQW9aaUE5SUcxelp5NW5aWFJVYVcxbGIzVjBLQ2twSUNZbUlHZHZiMmRzWlY5d2NtOTBiMkoxWmw5a2RYSmhkR2x2Ymw5d1lpNUVkWEpoZEdsdmJpNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljenRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5YzMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKemZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFMWxkR2h2WkNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVFdWMFlXUmhkR0VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lHZHZiMmRzWlY5d2NtOTBiMkoxWmw5a2RYSmhkR2x2Ymw5d1lpNUVkWEpoZEdsdmJqdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4bmIyOW5iR1ZmY0hKdmRHOWlkV1pmWkhWeVlYUnBiMjVmY0dJdVJIVnlZWFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSVWFXMWxiM1YwS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25OOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFRXVjBhRzlrS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFRXVjBZV1JoZEdFb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRlJwYldWdmRYUW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUdkdmIyZHNaVjl3Y205MGIySjFabDlrZFhKaGRHbHZibDl3WWk1RWRYSmhkR2x2Ymk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYldWMGFHOWtJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1WjJWMFRXVjBhRzlrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKemZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFNHVmhaR1Z5Y3k1d2NtOTBiM1I1Y0dVdWMyVjBUV1YwYUc5a0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1RXVjBZV1JoZEdFZ2JXVjBZV1JoZEdFZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdGOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTXVjSEp2ZEc5MGVYQmxMbWRsZEUxbGRHRmtZWFJoSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0Y5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0VzSURJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaGZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKemZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG5CeWIzUnZkSGx3WlM1elpYUk5aWFJoWkdGMFlTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1WTJ4bFlYSk5aWFJoWkdGMFlTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSTlpYUmhaR0YwWVNoMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEVobFlXUmxjbk11Y0hKdmRHOTBlWEJsTG1oaGMwMWxkR0ZrWVhSaElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQm5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0Z2RHbHRaVzkxZENBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6TG5CeWIzUnZkSGx3WlM1blpYUlVhVzFsYjNWMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFZFhKaGRHbHZibjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnWjI5dloyeGxYM0J5YjNSdlluVm1YMlIxY21GMGFXOXVYM0JpTGtSMWNtRjBhVzl1TENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSSVpXRmtaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JJWldGa1pYSnpMbkJ5YjNSdmRIbHdaUzV6WlhSVWFXMWxiM1YwSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRWhsWVdSbGNuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUklaV0ZrWlhKekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xScGJXVnZkWFFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBWR2x0Wlc5MWRDaDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFaGxZV1JsY25NdWNISnZkRzkwZVhCbExtaGhjMVJwYldWdmRYUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXpLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnhkV1Z6ZEUxbGMzTmhaMlY5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRTFsYzNOaFoyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUdoaGMwMWxjM05oWjJVNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXNJR1poYkhObEtTeGNiaUFnSUNCd1lXTnJaWFJOWlhOellXZGxPaUFvWmlBOUlHMXpaeTVuWlhSUVlXTnJaWFJOWlhOellXZGxLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwTEZ4dUlDQWdJR1Z2Y3pvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z015d2dabUZzYzJVcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwU0dGelRXVnpjMkZuWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZCaFkydGxkRTFsYzNOaFoyVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkNiMjlzS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWdmN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ4ZFdWemRFMWxjM05oWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRWhoYzAxbGMzTmhaMlVvS1R0Y2JpQWdhV1lnS0dZcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRkJoWTJ0bGRFMWxjM05oWjJVb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFJXOXpLQ2s3WEc0Z0lHbG1JQ2htS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRE1zWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnYUdGelgyMWxjM05oWjJVZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhGMVpYTjBUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVaMlYwU0dGelRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WeGRXVnpkRTFsYzNOaFoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNXpaWFJJWVhOTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5DYjI5c1pXRnVSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUZCaFkydGxkRTFsYzNOaFoyVWdjR0ZqYTJWMFgyMWxjM05oWjJVZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBVR0ZqYTJWMFRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlN3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1YzJWMFVHRmphMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWEYxWlhOMFRXVnpjMkZuWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpRWVdOclpYUk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZCaFkydGxkRTFsYzNOaFoyVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsY1hWbGMzUk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNW9ZWE5RWVdOclpYUk5aWE56WVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmliMjlzSUdWdmN5QTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGNYVmxjM1JOWlhOellXZGxMbkJ5YjNSdmRIbHdaUzVuWlhSRmIzTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBekxDQm1ZV3h6WlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjWFZsYzNSTlpYTnpZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYRjFaWE4wVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1YzJWMFJXOXpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNiMjlzWldGdVJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVDI1bGIyWWdaM0p2ZFhBZ1pHVm1hVzVwZEdsdmJuTWdabTl5SUhSb2FYTWdiV1Z6YzJGblpTNGdSV0ZqYUNCbmNtOTFjQ0JrWldacGJtVnpJSFJvWlNCbWFXVnNaRnh1SUNvZ2JuVnRZbVZ5Y3lCaVpXeHZibWRwYm1jZ2RHOGdkR2hoZENCbmNtOTFjQzRnVjJobGJpQnZaaUIwYUdWelpTQm1hV1ZzWkhNbklIWmhiSFZsSUdseklITmxkQ3dnWVd4c1hHNGdLaUJ2ZEdobGNpQm1hV1ZzWkhNZ2FXNGdkR2hsSUdkeWIzVndJR0Z5WlNCamJHVmhjbVZrTGlCRWRYSnBibWNnWkdWelpYSnBZV3hwZW1GMGFXOXVMQ0JwWmlCdGRXeDBhWEJzWlZ4dUlDb2dabWxsYkdSeklHRnlaU0JsYm1OdmRXNTBaWEpsWkNCbWIzSWdZU0JuY205MWNDd2diMjVzZVNCMGFHVWdiR0Z6ZENCMllXeDFaU0J6WldWdUlIZHBiR3dnWW1VZ2EyVndkQzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOElVRnljbUY1UEc1MWJXSmxjajQrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1YjI1bGIyWkhjbTkxY0hOZklEMGdXMXN5TERNc05GMWRPMXh1WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdVZIbHdaVU5oYzJVZ1BTQjdYRzRnSUZSWlVFVmZUazlVWDFORlZEb2dNQ3hjYmlBZ1NFVkJSRVZTVXpvZ01peGNiaUFnVFVWVFUwRkhSVG9nTXl4Y2JpQWdWRkpCU1V4RlVsTTZJRFJjYm4wN1hHNWNiaThxS2x4dUlDb2dRSEpsZEhWeWJpQjdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNVVlWEJsUTJGelpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBWSGx3WlVOaGMyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNVVlWEJsUTJGelpYMGdLaThvYW5Od1lpNU5aWE56WVdkbExtTnZiWEIxZEdWUGJtVnZaa05oYzJVb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHBLVHRjYm4wN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUhOMGNtVmhiVG9nS0dZZ1BTQnRjMmN1WjJWMFUzUnlaV0Z0S0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5WldGdExuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppa3NYRzRnSUNBZ2FHVmhaR1Z5Y3pvZ0tHWWdQU0J0YzJjdVoyVjBTR1ZoWkdWeWN5Z3BLU0FtSmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljeTUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwTEZ4dUlDQWdJRzFsYzNOaFoyVTZJQ2htSUQwZ2JYTm5MbWRsZEUxbGMzTmhaMlVvS1NrZ0ppWWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJVdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtTeGNiaUFnSUNCMGNtRnBiR1Z5Y3pvZ0tHWWdQU0J0YzJjdVoyVjBWSEpoYVd4bGNuTW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlZSeVlXbHNaWEp6TG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtVmhiVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZOMGNtVmhiU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk03WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSSVpXRmtaWEp6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFMWxjM05oWjJVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EwT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJVY21GcGJHVnljeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGTjBjbVZoYlNncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpsWVcwdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFaGxZV1JsY25Nb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUk5aWE56WVdkbEtDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWSEpoYVd4bGNuTW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0EwTEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JUZEhKbFlXMGdjM1J5WldGdElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbVZoYlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WjJWMFUzUnlaV0Z0SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21WaGJTd2dNU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeVpXRnRmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUlRkSEpsWVcwZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtTnNaV0Z5VTNSeVpXRnRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGTjBjbVZoYlNoMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtaGhjMU4wY21WaGJTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lERXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dVbVZ6Y0c5dWMyVklaV0ZrWlhKeklHaGxZV1JsY25NZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVuWlhSSVpXRmtaWEp6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5d2dNaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUklaV0ZrWlhKeklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmxkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNraGxZV1JsY25NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwU0dWaFpHVnljeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1oaGMwaGxZV1JsY25NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lGSmxjM0J2Ym5ObFRXVnpjMkZuWlNCdFpYTnpZV2RsSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVaMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJVc0lETXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpYeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFRXVnpjMkZuWlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRTFsYzNOaFoyVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVvWVhOTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCU1pYTndiMjV6WlZSeVlXbHNaWEp6SUhSeVlXbHNaWEp6SUQwZ05EdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk45WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWRsZEZSeVlXbHNaWEp6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMQ0EwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlZSeVlXbHNaWEp6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObGZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNXpaWFJVY21GcGJHVnljeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVDI1bGIyWlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dOQ3dnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpVY21GcGJHVnljeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlVjbUZwYkdWeWN5aDFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWhoYzFSeVlXbHNaWEp6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTkNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYldWMFlXUmhkR0U2SUNobUlEMGdiWE5uTG1kbGRFMWxkR0ZrWVhSaEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25OOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVWhsWVdSbGNuTTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5YzMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxTR1ZoWkdWeWMzMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaE8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJOWlhSaFpHRjBZU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZJWldGa1pYSnpMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sU0dWaFpHVnljeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVklaV0ZrWlhKemZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUk5aWFJoWkdGMFlTZ3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JOWlhSaFpHRjBZU0J0WlhSaFpHRjBZU0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVaGxZV1JsY25NdWNISnZkRzkwZVhCbExtZGxkRTFsZEdGa1lYUmhJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXNJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11Y0hKdmRHOTBlWEJsTG5ObGRFMWxkR0ZrWVhSaElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWSVpXRmtaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlVobFlXUmxjbk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUV1YwWVdSaGRHRWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRXVjBZV1JoZEdFb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFNHVmhaR1Z5Y3k1d2NtOTBiM1I1Y0dVdWFHRnpUV1YwWVdSaGRHRWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXhLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQndZV05yWlhSTlpYTnpZV2RsT2lBb1ppQTlJRzF6Wnk1blpYUlFZV05yWlhSTlpYTnpZV2RsS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVk5aWE56WVdkbGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVR0ZqYTJWMFRXVnpjMkZuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEJoWTJ0bGRFMWxjM05oWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUVlXTnJaWFJOWlhOellXZGxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZOWlhOellXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpVMWxjM05oWjJWOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGQmhZMnRsZEUxbGMzTmhaMlVvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVHRmphMlYwVFdWemMyRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JRWVdOclpYUk5aWE56WVdkbElIQmhZMnRsZEY5dFpYTnpZV2RsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxCaFkydGxkRTFsYzNOaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWTlpYTnpZV2RsTG5CeWIzUnZkSGx3WlM1blpYUlFZV05yWlhSTlpYTnpZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VUdGamEyVjBUV1Z6YzJGblpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsTENBeEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVFZV05yWlhSTlpYTnpZV2RsZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFRXVnpjMkZuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlUxbGMzTmhaMlV1Y0hKdmRHOTBlWEJsTG5ObGRGQmhZMnRsZEUxbGMzTmhaMlVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVTFsYzNOaFoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxUV1Z6YzJGblpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKUVlXTnJaWFJOWlhOellXZGxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGQmhZMnRsZEUxbGMzTmhaMlVvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVFdWemMyRm5aUzV3Y205MGIzUjVjR1V1YUdGelVHRmphMlYwVFdWemMyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljMzBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCemRHRjBkWE02SUNobUlEMGdiWE5uTG1kbGRGTjBZWFIxY3lncEtTQW1KaUJuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWk1VGRHRjBkWE11ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0J0WlhSaFpHRjBZVG9nS0dZZ1BTQnRjMmN1WjJWMFRXVjBZV1JoZEdFb0tTa2dKaVlnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsSmxjM0J2Ym5ObFZISmhhV3hsY25OOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljenRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlZSeVlXbHNaWEp6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCbmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpNVRkR0YwZFhNN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzWjI5dloyeGxYM0p3WTE5emRHRjBkWE5mY0dJdVUzUmhkSFZ6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTNSaGRIVnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUk5aWFJoWkdGMFlTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVNaWE53YjI1elpWUnlZV2xzWlhKemZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVM1JoZEhWektDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0JuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWk1VGRHRjBkWE11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEUxbGRHRmtZWFJoS0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrMWxkR0ZrWVhSaExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHZHZiMmRzWlM1eWNHTXVVM1JoZEhWeklITjBZWFIxY3lBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE45WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVbVZ6Y0c5dWMyVlVjbUZwYkdWeWN5NXdjbTkwYjNSNWNHVXVaMlYwVTNSaGRIVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQm5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXNJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTVuYjI5bmJHVXVjbkJqTGxOMFlYUjFjM3gxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1U1pYTndiMjV6WlZSeVlXbHNaWEp6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk11Y0hKdmRHOTBlWEJsTG5ObGRGTjBZWFIxY3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxKbGMzQnZibk5sVkhKaGFXeGxjbk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVM1JoZEhWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZOMFlYUjFjeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTV3Y205MGIzUjVjR1V1YUdGelUzUmhkSFZ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCTlpYUmhaR0YwWVNCdFpYUmhaR0YwWVNBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpMbkJ5YjNSdmRIbHdaUzVuWlhSTlpYUmhaR0YwWVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTENBeUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlYeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVTWlhOd2IyNXpaVlJ5WVdsc1pYSnpmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbEpsYzNCdmJuTmxWSEpoYVd4bGNuTXVjSEp2ZEc5MGVYQmxMbk5sZEUxbGRHRmtZWFJoSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z01pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VW1WemNHOXVjMlZVY21GcGJHVnljeTV3Y205MGIzUjVjR1V1WTJ4bFlYSk5aWFJoWkdGMFlTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSTlpYUmhaR0YwWVNoMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVVtVnpjRzl1YzJWVWNtRnBiR1Z5Y3k1d2NtOTBiM1I1Y0dVdWFHRnpUV1YwWVdSaGRHRWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVVM1J5YVc1bmN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJNVjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM045SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2RtRnNkV1Z6VEdsemREb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JHYVdWc1pDaHRjMmNzSURFcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWmx4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kemZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM003WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxOMGNtbHVaM011WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuYzMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pGWmhiSFZsY3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3k1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VTNSeWFXNW5jeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZtRnNkV1Z6VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQnpkSEpwYm1jZ2RtRnNkV1Z6SUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHh6ZEhKcGJtYytmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdWNISnZkRzkwZVhCbExtZGxkRlpoYkhWbGMweHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3SVVGeWNtRjVQSE4wY21sdVp6NTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JHYVdWc1pDaDBhR2x6TENBeEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOGMzUnlhVzVuUG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNOOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdWNISnZkRzkwZVhCbExuTmxkRlpoYkhWbGMweHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kemZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVRkSEpwYm1kekxuQnliM1J2ZEhsd1pTNWhaR1JXWVd4MVpYTWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuYzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpXWVd4MVpYTk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRlpoYkhWbGMweHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUcxa1RXRndPaUFvWmlBOUlHMXpaeTVuWlhSTlpFMWhjQ2dwS1NBL0lHWXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdWRHOVBZbXBsWTNRcElEb2dXMTFjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdGOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1TlpYUmhaR0YwWVM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUV1YwWVdSaGRHRjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHMXpaeTVuWlhSTlpFMWhjQ2dwTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMQ0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0J5WldGa1pYSXBJSHRjYmlBZ0lDQWdJQ0FnYW5Od1lpNU5ZWEF1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtvYldWemMyRm5aU3dnY21WaFpHVnlMQ0JxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGTjBjbWx1Wnl3Z2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JOWlhOellXZGxMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbE4wY21sdVozTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlMQ0JjSWx3aUxDQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpLQ2twTzF4dUlDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVRXVjBZV1JoZEdFdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGsxbGRHRmtZWFJoZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VFdWMFlXUmhkR0V1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFMWtUV0Z3S0hSeWRXVXBPMXh1SUNCcFppQW9aaUFtSmlCbUxtZGxkRXhsYm1kMGFDZ3BJRDRnTUNrZ2UxeHVJQ0FnSUdZdWMyVnlhV0ZzYVhwbFFtbHVZWEo1S0RFc0lIZHlhWFJsY2l3Z2FuTndZaTVDYVc1aGNubFhjbWwwWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVTNSeWFXNW5MQ0JxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVk5aWE56WVdkbExDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsTjBjbWx1WjNNdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diV0Z3UEhOMGNtbHVaeXdnVTNSeWFXNW5jejRnYldRZ1BTQXhPMXh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMjV2VEdGNmVVTnlaV0YwWlNCRWJ5QnViM1FnWTNKbFlYUmxJSFJvWlNCdFlYQWdhV1pjYmlBcUlHVnRjSFI1TENCcGJuTjBaV0ZrSUhKbGRIVnlibWx1WnlCZ2RXNWtaV1pwYm1Wa1lGeHVJQ29nUUhKbGRIVnliaUI3SVdwemNHSXVUV0Z3UEhOMGNtbHVaeXdoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVUZEhKcGJtZHpQbjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNU5aWFJoWkdGMFlTNXdjbTkwYjNSNWNHVXVaMlYwVFdSTllYQWdQU0JtZFc1amRHbHZiaWh2Y0hSZmJtOU1ZWHA1UTNKbFlYUmxLU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RnFjM0JpTGsxaGNEeHpkSEpwYm1jc0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVUzUnlhVzVuY3o1OUlDb3ZJQ2hjYmlBZ0lDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUk5ZWEJHYVdWc1pDaDBhR2x6TENBeExDQnZjSFJmYm05TVlYcDVRM0psWVhSbExGeHVJQ0FnSUNBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGRISnBibWR6S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhaaGJIVmxjeUJtY205dElIUm9aU0J0WVhBdUlGUm9aU0J0WVhBZ2QybHNiQ0JpWlNCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazFsZEdGa1lYUmhmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVOWlhSaFpHRjBZUzV3Y205MGIzUjVjR1V1WTJ4bFlYSk5aRTFoY0NBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMGFHbHpMbWRsZEUxa1RXRndLQ2t1WTJ4bFlYSW9LVHRjYmlBZ2NtVjBkWEp1SUhSb2FYTTdmVHRjYmx4dVhHNW5iMjluTG05aWFtVmpkQzVsZUhSbGJtUW9aWGh3YjNKMGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TazdYRzRpTENKMllYSWdaenRjYmx4dUx5OGdWR2hwY3lCM2IzSnJjeUJwYmlCdWIyNHRjM1J5YVdOMElHMXZaR1ZjYm1jZ1BTQW9ablZ1WTNScGIyNG9LU0I3WEc1Y2RISmxkSFZ5YmlCMGFHbHpPMXh1ZlNrb0tUdGNibHh1ZEhKNUlIdGNibHgwTHk4Z1ZHaHBjeUIzYjNKcmN5QnBaaUJsZG1Gc0lHbHpJR0ZzYkc5M1pXUWdLSE5sWlNCRFUxQXBYRzVjZEdjZ1BTQm5JSHg4SUc1bGR5QkdkVzVqZEdsdmJpaGNJbkpsZEhWeWJpQjBhR2x6WENJcEtDazdYRzU5SUdOaGRHTm9JQ2hsS1NCN1hHNWNkQzh2SUZSb2FYTWdkMjl5YTNNZ2FXWWdkR2hsSUhkcGJtUnZkeUJ5WldabGNtVnVZMlVnYVhNZ1lYWmhhV3hoWW14bFhHNWNkR2xtSUNoMGVYQmxiMllnZDJsdVpHOTNJRDA5UFNCY0ltOWlhbVZqZEZ3aUtTQm5JRDBnZDJsdVpHOTNPMXh1ZlZ4dVhHNHZMeUJuSUdOaGJpQnpkR2xzYkNCaVpTQjFibVJsWm1sdVpXUXNJR0oxZENCdWIzUm9hVzVuSUhSdklHUnZJR0ZpYjNWMElHbDBMaTR1WEc0dkx5QlhaU0J5WlhSMWNtNGdkVzVrWldacGJtVmtMQ0JwYm5OMFpXRmtJRzltSUc1dmRHaHBibWNnYUdWeVpTd2djMjhnYVhRbmMxeHVMeThnWldGemFXVnlJSFJ2SUdoaGJtUnNaU0IwYUdseklHTmhjMlV1SUdsbUtDRm5iRzlpWVd3cElIc2dMaTR1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlHYzdYRzRpTENJdkx5QnpiM1Z5WTJVNklIQnliM1J2TDNKd1l5OTJNUzloZFhSb0xuQnliM1J2WEc0dktpcGNiaUFxSUVCbWFXeGxiM1psY25acFpYZGNiaUFxSUVCbGJtaGhibU5sWVdKc1pWeHVJQ29nUUhOMWNIQnlaWE56SUh0dGFYTnphVzVuVW1WeGRXbHlaWDBnY21Wd2IzSjBjeUJsY25KdmNpQnZiaUJwYlhCc2FXTnBkQ0IwZVhCbElIVnpZV2RsY3k1Y2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldWemMyRm5aVU52Ym5abGJuUnBiMjV6ZlNCS1V5QkRiMjF3YVd4bGNpQnlaWEJ2Y25SeklHRnVJR1Z5Y205eUlHbG1JR0VnZG1GeWFXRmliR1VnYjNKY2JpQXFJQ0FnSUNCbWFXVnNaQ0J6ZEdGeWRITWdkMmwwYUNBblRWTkhYeWNnWVc1a0lHbHpiaWQwSUdFZ2RISmhibk5zWVhSaFlteGxJRzFsYzNOaFoyVXVYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNiaTh2SUVkRlRrVlNRVlJGUkNCRFQwUkZJQzB0SUVSUElFNVBWQ0JGUkVsVUlWeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdLaTljYmk4dklFQjBjeTF1YjJOb1pXTnJYRzVjYm5aaGNpQnFjM0JpSUQwZ2NtVnhkV2x5WlNnbloyOXZaMnhsTFhCeWIzUnZZblZtSnlrN1hHNTJZWElnWjI5dlp5QTlJR3B6Y0dJN1hHNTJZWElnWjJ4dlltRnNJRDBnS0daMWJtTjBhVzl1S0NrZ2UxeHVJQ0JwWmlBb2RHaHBjeWtnZXlCeVpYUjFjbTRnZEdocGN6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUhkcGJtUnZkenNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc2djbVYwZFhKdUlHZHNiMkpoYkRzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhObGJHWWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQnpaV3htT3lCOVhHNGdJSEpsZEhWeWJpQkdkVzVqZEdsdmJpZ25jbVYwZFhKdUlIUm9hWE1uS1NncE8xeHVmUzVqWVd4c0tHNTFiR3dwS1R0Y2JseHVkbUZ5SUdkdmIyZHNaVjloY0dsZllXNXViM1JoZEdsdmJuTmZjR0lnUFNCeVpYRjFhWEpsS0NjdUxpOHVMaTh1TGk5bmIyOW5iR1V2WVhCcEwyRnVibTkwWVhScGIyNXpYM0JpTG1wekp5azdYRzVuYjI5bkxtOWlhbVZqZEM1bGVIUmxibVFvY0hKdmRHOHNJR2R2YjJkc1pWOWhjR2xmWVc1dWIzUmhkR2x2Ym5OZmNHSXBPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlVuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsY1hWbGMzUW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRM0psWkdWdWRHbGhiSE1uTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2N5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WeGRXVnpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WeGRXVnpkQ3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhGMVpYTjBMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhGMVpYTjBKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYTndiMjV6WlNjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkQzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYRjFaWE4wSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhOd2IyNXpaU3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObEp6dGNibjFjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjMzBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0IwZVhCbE9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREVzSUZ3aVhDSXBMRnh1SUNBZ0lIQmhlV3h2WVdRNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNaXdnWENKY0lpbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2MzMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ek8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1RGNtVmtaVzUwYVdGc2MzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlVlWEJsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVR0Y1Ykc5aFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzY3k1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4emZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZIbHdaU2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZCaGVXeHZZV1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUIwZVhCbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4ekxuQnliM1J2ZEhsd1pTNW5aWFJVZVhCbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhNdWNISnZkRzkwZVhCbExuTmxkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnY0dGNWJHOWhaQ0E5SURJN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTV3Y205MGIzUjVjR1V1WjJWMFVHRjViRzloWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F5TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtOeVpXUmxiblJwWVd4emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa055WldSbGJuUnBZV3h6TG5CeWIzUnZkSGx3WlM1elpYUlFZWGxzYjJGa0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1F1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WeGRXVnpkSDBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNRdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJR1Z1ZEdsMGVUb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F4TENCY0lsd2lLU3hjYmlBZ0lDQmpjbVZrWlc1MGFXRnNjem9nS0dZZ1BTQnRjMmN1WjJWMFEzSmxaR1Z1ZEdsaGJITW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhGMVpYTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOME8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1F1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNSOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjWFZsYzNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWdWRHbDBlU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrTnlaV1JsYm5ScFlXeHpPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNURjbVZrWlc1MGFXRnNjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxuTmxkRU55WldSbGJuUnBZV3h6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1F1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFVnVkR2wwZVNncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFTnlaV1JsYm5ScFlXeHpLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHVnVkR2wwZVNBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUkZiblJwZEhrZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGRFVnVkR2wwZVNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6VTNSeWFXNW5SbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUVOeVpXUmxiblJwWVd4eklHTnlaV1JsYm5ScFlXeHpJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UTNKbFpHVnVkR2xoYkhOOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJEY21Wa1pXNTBhV0ZzY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVEzSmxaR1Z1ZEdsaGJITjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzY3l3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVEY21Wa1pXNTBhV0ZzYzN4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNXpaWFJEY21Wa1pXNTBhV0ZzY3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1amJHVmhja055WldSbGJuUnBZV3h6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRU55WldSbGJuUnBZV3h6S0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWhoYzBOeVpXUmxiblJwWVd4eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjM0J2Ym5ObExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjM0J2Ym5ObGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlV1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHRmpZMlZ6YzFSdmEyVnVPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURFc0lGd2lYQ0lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlNaWE53YjI1elpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFVtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUVdOalpYTnpWRzlyWlc0b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWU1pYTndiMjV6WlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxVbVZ6Y0c5dWMyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVGalkyVnpjMVJ2YTJWdUtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1lXTmpaWE56WDNSdmEyVnVJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVuWlhSQlkyTmxjM05VYjJ0bGJpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVkpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNXpaWFJCWTJObGMzTlViMnRsYmlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6VTNSeWFXNW5SbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjWFZsYzNSOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGNYVmxjM1F1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHVnVkR2wwZVRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0JjSWx3aUtWeHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsY1hWbGMzUTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWEYxWlhOMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGNYVmxjM1I5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRmJuUnBkSGtvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZEgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRmJuUnBkSGtvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJsYm5ScGRIa2dQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSRmJuUnBkSGtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1elpYUkZiblJwZEhrZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZGpFdVFYVjBhR1Z1ZEdsallYUmxWRzlTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsYzNCdmJuTmxmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkakV1UVhWMGFHVnVkR2xqWVhSbFZHOVNaWE53YjI1elpTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnWVdOalpYTnpWRzlyWlc0NklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUyTVM1QmRYUm9aVzUwYVdOaGRHVlViMUpsYzNCdmJuTmxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVGalkyVnpjMVJ2YTJWdUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuWXhMa0YxZEdobGJuUnBZMkYwWlZSdlVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTJNUzVCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4TGtGMWRHaGxiblJwWTJGMFpWUnZVbVZ6Y0c5dWMyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVGalkyVnpjMVJ2YTJWdUtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1lXTmpaWE56WDNSdmEyVnVJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1kbGRFRmpZMlZ6YzFSdmEyVnVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWRqRXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1Mk1TNUJkWFJvWlc1MGFXTmhkR1ZVYjFKbGMzQnZibk5sTG5CeWIzUnZkSGx3WlM1elpYUkJZMk5sYzNOVWIydGxiaUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVuYjI5bkxtOWlhbVZqZEM1bGVIUmxibVFvWlhod2IzSjBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbll4S1R0Y2JpSXNJaTh2SUhOdmRYSmpaVG9nWjI5dloyeGxMMkZ3YVM5aGJtNXZkR0YwYVc5dWN5NXdjbTkwYjF4dUx5b3FYRzRnS2lCQVptbHNaVzkyWlhKMmFXVjNYRzRnS2lCQVpXNW9ZVzVqWldGaWJHVmNiaUFxSUVCemRYQndjbVZ6Y3lCN2JXbHpjMmx1WjFKbGNYVnBjbVY5SUhKbGNHOXlkSE1nWlhKeWIzSWdiMjRnYVcxd2JHbGphWFFnZEhsd1pTQjFjMkZuWlhNdVhHNGdLaUJBYzNWd2NISmxjM01nZTIxbGMzTmhaMlZEYjI1MlpXNTBhVzl1YzMwZ1NsTWdRMjl0Y0dsc1pYSWdjbVZ3YjNKMGN5QmhiaUJsY25KdmNpQnBaaUJoSUhaaGNtbGhZbXhsSUc5eVhHNGdLaUFnSUNBZ1ptbGxiR1FnYzNSaGNuUnpJSGRwZEdnZ0owMVRSMThuSUdGdVpDQnBjMjRuZENCaElIUnlZVzV6YkdGMFlXSnNaU0J0WlhOellXZGxMbHh1SUNvZ1FIQjFZbXhwWTF4dUlDb3ZYRzR2THlCSFJVNUZVa0ZVUlVRZ1EwOUVSU0F0TFNCRVR5Qk9UMVFnUlVSSlZDRmNiaThxSUdWemJHbHVkQzFrYVhOaFlteGxJQ292WEc0dkx5QkFkSE10Ym05amFHVmphMXh1WEc1MllYSWdhbk53WWlBOUlISmxjWFZwY21Vb0oyZHZiMmRzWlMxd2NtOTBiMkoxWmljcE8xeHVkbUZ5SUdkdmIyY2dQU0JxYzNCaU8xeHVkbUZ5SUdkc2IySmhiQ0E5SUNobWRXNWpkR2x2YmlncElIdGNiaUFnYVdZZ0tIUm9hWE1wSUhzZ2NtVjBkWEp1SUhSb2FYTTdJSDFjYmlBZ2FXWWdLSFI1Y0dWdlppQjNhVzVrYjNjZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN0lISmxkSFZ5YmlCM2FXNWtiM2M3SUgxY2JpQWdhV1lnS0hSNWNHVnZaaUJuYkc5aVlXd2dJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQm5iRzlpWVd3N0lIMWNiaUFnYVdZZ0tIUjVjR1Z2WmlCelpXeG1JQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5a2dleUJ5WlhSMWNtNGdjMlZzWmpzZ2ZWeHVJQ0J5WlhSMWNtNGdSblZ1WTNScGIyNG9KM0psZEhWeWJpQjBhR2x6Snlrb0tUdGNibjB1WTJGc2JDaHVkV3hzS1NrN1hHNWNiblpoY2lCbmIyOW5iR1ZmWVhCcFgyaDBkSEJmY0dJZ1BTQnlaWEYxYVhKbEtDY3VMaTh1TGk5bmIyOW5iR1V2WVhCcEwyaDBkSEJmY0dJdWFuTW5LVHRjYm1kdmIyY3ViMkpxWldOMExtVjRkR1Z1WkNod2NtOTBieXdnWjI5dloyeGxYMkZ3YVY5b2RIUndYM0JpS1R0Y2JuWmhjaUJuYjI5bmJHVmZjSEp2ZEc5aWRXWmZaR1Z6WTNKcGNIUnZjbDl3WWlBOUlISmxjWFZwY21Vb0oyZHZiMmRzWlMxd2NtOTBiMkoxWmk5bmIyOW5iR1V2Y0hKdmRHOWlkV1l2WkdWelkzSnBjSFJ2Y2w5d1lpNXFjeWNwTzF4dVoyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a0tIQnliM1J2TENCbmIyOW5iR1ZmY0hKdmRHOWlkV1pmWkdWelkzSnBjSFJ2Y2w5d1lpazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVvZEhSd0p5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JseHVMeW9xWEc0Z0tpQkJJSFIxY0d4bElHOW1JSHRtYVdWc1pDQnVkVzFpWlhJc0lHTnNZWE56SUdOdmJuTjBjblZqZEc5eWZTQm1iM0lnZEdobElHVjRkR1Z1YzJsdmJseHVJQ29nWm1sbGJHUWdibUZ0WldRZ1lHaDBkSEJnTGx4dUlDb2dRSFI1Y0dVZ2V5RnFjM0JpTGtWNGRHVnVjMmx2YmtacFpXeGtTVzVtYnp3aGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlQ1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1YUhSMGNDQTlJRzVsZHlCcWMzQmlMa1Y0ZEdWdWMybHZia1pwWld4a1NXNW1ieWhjYmlBZ0lDQTNNakk1TlRjeU9DeGNiaUFnSUNCN2FIUjBjRG9nTUgwc1hHNGdJQ0FnWjI5dloyeGxYMkZ3YVY5b2RIUndYM0JpTGtoMGRIQlNkV3hsTEZ4dUlDQWdJQ0F2S2lvZ1FIUjVjR1VnZXo5bWRXNWpkR2x2Ymlnb1ltOXZiR1ZoYm54MWJtUmxabWx1WldRcExDRnFjM0JpTGsxbGMzTmhaMlU5S1RvZ0lVOWlhbVZqZEgwZ0tpOGdLRnh1SUNBZ0lDQWdJQ0FnWjI5dloyeGxYMkZ3YVY5b2RIUndYM0JpTGtoMGRIQlNkV3hsTG5SdlQySnFaV04wS1N4Y2JpQWdJQ0F3S1R0Y2JseHVaMjl2WjJ4bFgzQnliM1J2WW5WbVgyUmxjMk55YVhCMGIzSmZjR0l1VFdWMGFHOWtUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNVd6Y3lNamsxTnpJNFhTQTlJRzVsZHlCcWMzQmlMa1Y0ZEdWdWMybHZia1pwWld4a1FtbHVZWEo1U1c1bWJ5aGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVZWEJwTG1oMGRIQXNYRzRnSUNBZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJdWNISnZkRzkwZVhCbExuSmxZV1JOWlhOellXZGxMRnh1SUNBZ0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlUxbGMzTmhaMlVzWEc0Z0lDQWdaMjl2WjJ4bFgyRndhVjlvZEhSd1gzQmlMa2gwZEhCU2RXeGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUxGeHVJQ0FnSUdkdmIyZHNaVjloY0dsZmFIUjBjRjl3WWk1SWRIUndVblZzWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJc1hHNGdJQ0FnWm1Gc2MyVXBPMXh1THk4Z1ZHaHBjeUJ5WldkcGMzUmxjbk1nZEdobElHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCM2FYUm9JSFJvWlNCbGVIUmxibVJsWkNCamJHRnpjeXdnYzI4Z2RHaGhkRnh1THk4Z2RHOVBZbXBsWTNRb0tTQjNhV3hzSUdaMWJtTjBhVzl1SUdOdmNuSmxZM1JzZVM1Y2JtZHZiMmRzWlY5d2NtOTBiMkoxWmw5a1pYTmpjbWx3ZEc5eVgzQmlMazFsZEdodlpFOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWMxczNNakk1TlRjeU9GMGdQU0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMbWgwZEhBN1hHNWNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaQ2hsZUhCdmNuUnpMQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBLVHRjYmlJc0lpOHZJSE52ZFhKalpUb2djSEp2ZEc4dmNuQmpMM2RsWW5KMFl5OTJNUzl6YVdkdVlXeHBibWN1Y0hKdmRHOWNiaThxS2x4dUlDb2dRR1pwYkdWdmRtVnlkbWxsZDF4dUlDb2dRR1Z1YUdGdVkyVmhZbXhsWEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlMjFwYzNOcGJtZFNaWEYxYVhKbGZTQnlaWEJ2Y25SeklHVnljbTl5SUc5dUlHbHRjR3hwWTJsMElIUjVjR1VnZFhOaFoyVnpMbHh1SUNvZ1FITjFjSEJ5WlhOeklIdHRaWE56WVdkbFEyOXVkbVZ1ZEdsdmJuTjlJRXBUSUVOdmJYQnBiR1Z5SUhKbGNHOXlkSE1nWVc0Z1pYSnliM0lnYVdZZ1lTQjJZWEpwWVdKc1pTQnZjbHh1SUNvZ0lDQWdJR1pwWld4a0lITjBZWEowY3lCM2FYUm9JQ2ROVTBkZkp5QmhibVFnYVhOdUozUWdZU0IwY21GdWMyeGhkR0ZpYkdVZ2JXVnpjMkZuWlM1Y2JpQXFJRUJ3ZFdKc2FXTmNiaUFxTDF4dUx5OGdSMFZPUlZKQlZFVkVJRU5QUkVVZ0xTMGdSRThnVGs5VUlFVkVTVlFoWEc0dktpQmxjMnhwYm5RdFpHbHpZV0pzWlNBcUwxeHVMeThnUUhSekxXNXZZMmhsWTJ0Y2JseHVkbUZ5SUdwemNHSWdQU0J5WlhGMWFYSmxLQ2RuYjI5bmJHVXRjSEp2ZEc5aWRXWW5LVHRjYm5aaGNpQm5iMjluSUQwZ2FuTndZanRjYm5aaGNpQm5iRzlpWVd3Z1BTQW9ablZ1WTNScGIyNG9LU0I3WEc0Z0lHbG1JQ2gwYUdsektTQjdJSEpsZEhWeWJpQjBhR2x6T3lCOVhHNGdJR2xtSUNoMGVYQmxiMllnZDJsdVpHOTNJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5a2dleUJ5WlhSMWNtNGdkMmx1Wkc5M095QjlYRzRnSUdsbUlDaDBlWEJsYjJZZ1oyeHZZbUZzSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZXlCeVpYUjFjbTRnWjJ4dlltRnNPeUI5WEc0Z0lHbG1JQ2gwZVhCbGIyWWdjMlZzWmlBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUhObGJHWTdJSDFjYmlBZ2NtVjBkWEp1SUVaMWJtTjBhVzl1S0NkeVpYUjFjbTRnZEdocGN5Y3BLQ2s3WEc1OUxtTmhiR3dvYm5Wc2JDa3BPMXh1WEc1MllYSWdaMjl2WjJ4bFgyRndhVjloYm01dmRHRjBhVzl1YzE5d1lpQTlJSEpsY1hWcGNtVW9KeTR1THk0dUx5NHVMeTR1TDJkdmIyZHNaUzloY0drdllXNXViM1JoZEdsdmJuTmZjR0l1YW5NbktUdGNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaQ2h3Y205MGJ5d2daMjl2WjJ4bFgyRndhVjloYm01dmRHRjBhVzl1YzE5d1lpazdYRzUyWVhJZ1oyOXZaMnhsWDNKd1kxOXpkR0YwZFhOZmNHSWdQU0J5WlhGMWFYSmxLQ2N1TGk4dUxpOHVMaTh1TGk5bmIyOW5iR1V2Y25CakwzTjBZWFIxYzE5d1lpNXFjeWNwTzF4dVoyOXZaeTV2WW1wbFkzUXVaWGgwWlc1a0tIQnliM1J2TENCbmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1F1VTNSaFoyVkRZWE5sSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkViMjVsVTNSaFoyVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1VTNSaFoyVkRZWE5sSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSRzl1WlZOMFlXZGxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsSnl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWEYxWlhOMEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdVUzUmhaMlZEWVhObEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNVZjR1JoZEdWRFlYTmxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRDY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWEYxWlhOMExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZEM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlVuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sSUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCdWRXeHNMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1dmJtVnZaa2R5YjNWd2MxOHBPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVc0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlNjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMThwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZENjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYTndiMjV6WlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaU2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlMbkpsY0dWaGRHVmtSbWxsYkdSelh5d2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeUE5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjdWNtVndaV0YwWldSR2FXVnNaSE5mTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjdVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXNJR3B6Y0dJdVRXVnpjMkZuWlNrN1hHNXBaaUFvWjI5dlp5NUVSVUpWUnlBbUppQWhRMDlOVUVsTVJVUXBJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ29nUUc5MlpYSnlhV1JsWEc0Z0lDQXFMMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBTVzVwZEZOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSVmNHUmhkR1ZUZEdGblpTd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRlZ3WkdGMFpWTjBZV2RsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRWIyNWxVM1JoWjJVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpTYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aU0E5SUdaMWJtTjBhVzl1S0c5d2RGOWtZWFJoS1NCN1hHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1cGJtbDBhV0ZzYVhwbEtIUm9hWE1zSUc5d2RGOWtZWFJoTENBd0xDQXRNU3dnYm5Wc2JDd2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE4cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZENjN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJRzUxYkd3c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aU2M3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbExDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpTNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSRzl1WlZOMFlXZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbTl1Wlc5bVIzSnZkWEJ6WHlrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObEp6dGNibjFjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZENBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkQ3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWEYxWlhOMExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYRjFaWE4wSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlVnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObExtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlNjN1hHNTlYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCallXNWthV1JoZEdVNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpa3NYRzRnSUNBZ2MyUndUV2xrT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lESXNJRndpWENJcExGeHVJQ0FnSUhOa2NHMU1hVzVsU1c1a1pYZzZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTXl3Z01Da3NYRzRnSUNBZ2RYTmxjbTVoYldWR2NtRm5iV1Z1ZERvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQTBMQ0JjSWx3aUtWeHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1U3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBRMkZ1Wkdsa1lYUmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUyUndUV2xrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JWYVc1ME16SW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVMlJ3YlV4cGJtVkpibVJsZUNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRlZ6WlhKdVlXMWxSbkpoWjIxbGJuUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUTJGdVpHbGtZWFJsS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURJcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxWV2x1ZERNeUtGeHVJQ0FnSUNBZ015eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0EwS1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBMExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2dZMkZ1Wkdsa1lYUmxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVXVjSEp2ZEc5MGVYQmxMbWRsZEVOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV3Y205MGIzUjVjR1V1YzJWMFEyRnVaR2xrWVhSbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhOa2NGOXRhV1FnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV3Y205MGIzUjVjR1V1WjJWMFUyUndUV2xrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMbkJ5YjNSdmRIbHdaUzV6WlhSVFpIQk5hV1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpUWkhCTmFXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuQnliM1J2ZEhsd1pTNW9ZWE5UWkhCTmFXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSFZwYm5Rek1pQnpaSEJ0WDJ4cGJtVmZhVzVrWlhnZ1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1d2NtOTBiM1I1Y0dVdVoyVjBVMlJ3YlV4cGJtVkpibVJsZUNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F6TENBd0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXdjbTkwYjNSNWNHVXVjMlYwVTJSd2JVeHBibVZKYm1SbGVDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsTmtjRzFNYVc1bFNXNWtaWGdnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMbkJ5YjNSdmRIbHdaUzVvWVhOVFpIQnRUR2x1WlVsdVpHVjRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2dkWE5sY201aGJXVmZabkpoWjIxbGJuUWdQU0EwTzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXdjbTkwYjNSNWNHVXVaMlYwVlhObGNtNWhiV1ZHY21GbmJXVnVkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQTBMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXdjbTkwYjNSNWNHVXVjMlYwVlhObGNtNWhiV1ZHY21GbmJXVnVkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05Dd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5CeWIzUnZkSGx3WlM1amJHVmhjbFZ6WlhKdVlXMWxSbkpoWjIxbGJuUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuQnliM1J2ZEhsd1pTNW9ZWE5WYzJWeWJtRnRaVVp5WVdkdFpXNTBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOQ2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjWFZsYzNRdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYRjFaWE4wZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWEYxWlhOMExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0J6WkhBNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpa3NYRzRnSUNBZ1pHbHpZV0pzWlZSeWFXTnJiR1U2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURJc0lHWmhiSE5sS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjWFZsYzNRN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhGMVpYTjBMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1I5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlRaSEFvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFUnBjMkZpYkdWVWNtbGphMnhsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnhkV1Z6ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjWFZsYzNSOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRDNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVTJSd0tDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBSR2x6WVdKc1pWUnlhV05yYkdVb0tUdGNiaUFnYVdZZ0tHWXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZDYjI5c0tGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSE5rY0NBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1kbGRGTmtjQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WeGRXVnpkSDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxkRk5rY0NBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVISnZkRzh6VTNSeWFXNW5SbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2daR2x6WVdKc1pWOTBjbWxqYTJ4bElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRVJwYzJGaWJHVlVjbWxqYTJ4bElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTWl3Z1ptRnNjMlVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGRFUnBjMkZpYkdWVWNtbGphMnhsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5DYjI5c1pXRnVSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQnpaSEE2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGTmtjQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSVFpIQW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnpaSEFnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aUzV3Y205MGIzUjVjR1V1WjJWMFUyUndJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVWx1YVhSVGRHRm5aWDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWFJUWkhBZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmpZVzVrYVdSaGRHVTZJQ2htSUQwZ2JYTm5MbWRsZEVOaGJtUnBaR0YwWlNncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRFlXNWthV1JoZEdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkRZVzVrYVdSaGRHVW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFbERSVU5oYm1ScFpHRjBaU0JqWVc1a2FXUmhkR1VnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzVuWlhSRFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTENBeEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y4ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbk5sZEVOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKRFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwUTJGdVpHbGtZWFJsS0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aUzV3Y205MGIzUjVjR1V1YUdGelEyRnVaR2xrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRTl1Wlc5bUlHZHliM1Z3SUdSbFptbHVhWFJwYjI1eklHWnZjaUIwYUdseklHMWxjM05oWjJVdUlFVmhZMmdnWjNKdmRYQWdaR1ZtYVc1bGN5QjBhR1VnWm1sbGJHUmNiaUFxSUc1MWJXSmxjbk1nWW1Wc2IyNW5hVzVuSUhSdklIUm9ZWFFnWjNKdmRYQXVJRmRvWlc0Z2IyWWdkR2hsYzJVZ1ptbGxiR1J6SnlCMllXeDFaU0JwY3lCelpYUXNJR0ZzYkZ4dUlDb2diM1JvWlhJZ1ptbGxiR1J6SUdsdUlIUm9aU0JuY205MWNDQmhjbVVnWTJ4bFlYSmxaQzRnUkhWeWFXNW5JR1JsYzJWeWFXRnNhWHBoZEdsdmJpd2dhV1lnYlhWc2RHbHdiR1ZjYmlBcUlHWnBaV3hrY3lCaGNtVWdaVzVqYjNWdWRHVnlaV1FnWm05eUlHRWdaM0p2ZFhBc0lHOXViSGtnZEdobElHeGhjM1FnZG1Gc2RXVWdjMlZsYmlCM2FXeHNJR0psSUd0bGNIUXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UENGQmNuSmhlVHh1ZFcxaVpYSStQbjFjYmlBcUlFQmpiMjV6ZEZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1dmJtVnZaa2R5YjNWd2MxOGdQU0JiV3pJc00xMWRPMXh1WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxMbE4wWVdkbFEyRnpaU0E5SUh0Y2JpQWdVMVJCUjBWZlRrOVVYMU5GVkRvZ01DeGNiaUFnU1U1SlZEb2dNaXhjYmlBZ1ZWQkVRVlJGT2lBelhHNTlPMXh1WEc0dktpcGNiaUFxSUVCeVpYUjFjbTRnZTNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObExsTjBZV2RsUTJGelpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWRsZEZOMFlXZGxRMkZ6WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNVRkR0ZuWlVOaGMyVjlJQ292S0dwemNHSXVUV1Z6YzJGblpTNWpiMjF3ZFhSbFQyNWxiMlpEWVhObEtIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObExtOXVaVzltUjNKdmRYQnpYMXN3WFNrcE8xeHVmVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpYMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lIVjFhV1E2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlrc1hHNGdJQ0FnYVc1cGREb2dLR1lnUFNCdGMyY3VaMlYwU1c1cGRDZ3BLU0FtSmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpVbHVhWFJUZEdGblpTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lIVndaR0YwWlRvZ0tHWWdQU0J0YzJjdVoyVjBWWEJrWVhSbEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVkRzlQWW1wbFkzUW9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQm1LVnh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVlhWcFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSSmJtbDBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJWY0dSaGRHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVlhWcFpDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRWx1YVhRb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSVmNHUmhkR1VvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBekxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSFYxYVdRZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBWWFZwWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFZYVnBaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRU5oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlNCcGJtbDBJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlVsdWFYUlRkR0ZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtZGxkRWx1YVhRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZKbGMzQnZibk5sU1c1cGRGTjBZV2RsTENBeUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlZKYm1sMFUzUmhaMlY4ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWMyVjBTVzVwZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTWl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WTJ4bFlYSkpibWwwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRWx1YVhRb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YUdGelNXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRElwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnUTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVWdkWEJrWVhSbElEMGdNenRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4U1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBWWEJrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRkpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlY5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXNJRE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFNaWE53YjI1elpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGRGVndaR0YwWlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTXl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1WTJ4bFlYSlZjR1JoZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVlhCa1lYUmxLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1VtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtaGhjMVZ3WkdGMFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJQYm1WdlppQm5jbTkxY0NCa1pXWnBibWwwYVc5dWN5Qm1iM0lnZEdocGN5QnRaWE56WVdkbExpQkZZV05vSUdkeWIzVndJR1JsWm1sdVpYTWdkR2hsSUdacFpXeGtYRzRnS2lCdWRXMWlaWEp6SUdKbGJHOXVaMmx1WnlCMGJ5QjBhR0YwSUdkeWIzVndMaUJYYUdWdUlHOW1JSFJvWlhObElHWnBaV3hrY3ljZ2RtRnNkV1VnYVhNZ2MyVjBMQ0JoYkd4Y2JpQXFJRzkwYUdWeUlHWnBaV3hrY3lCcGJpQjBhR1VnWjNKdmRYQWdZWEpsSUdOc1pXRnlaV1F1SUVSMWNtbHVaeUJrWlhObGNtbGhiR2w2WVhScGIyNHNJR2xtSUcxMWJIUnBjR3hsWEc0Z0tpQm1hV1ZzWkhNZ1lYSmxJR1Z1WTI5MWJuUmxjbVZrSUdadmNpQmhJR2R5YjNWd0xDQnZibXg1SUhSb1pTQnNZWE4wSUhaaGJIVmxJSE5sWlc0Z2QybHNiQ0JpWlNCclpYQjBMbHh1SUNvZ1FIQnlhWFpoZEdVZ2V5RkJjbkpoZVR3aFFYSnlZWGs4Ym5WdFltVnlQajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzV2Ym1WdlprZHliM1Z3YzE4Z1BTQmJXeklzTXl3MFhWMDdYRzVjYmk4cUtseHVJQ29nUUdWdWRXMGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1VmNHUmhkR1ZEWVhObElEMGdlMXh1SUNCVlVFUkJWRVZmVGs5VVgxTkZWRG9nTUN4Y2JpQWdRMEZPUkVsRVFWUkZPaUF5TEZ4dUlDQkVUMDVGT2lBekxGeHVJQ0JGVWxKUFVqb2dORnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFjbVYwZFhKdUlIdHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExsVndaR0YwWlVOaGMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRlZ3WkdGMFpVTmhjMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzVWY0dSaGRHVkRZWE5sZlNBcUx5aHFjM0JpTGsxbGMzTmhaMlV1WTI5dGNIVjBaVTl1Wlc5bVEyRnpaU2gwYUdsekxDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFNrcE8xeHVmVHRjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdkWFZwWkRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0JjSWx3aUtTeGNiaUFnSUNCallXNWthV1JoZEdVNklDaG1JRDBnYlhObkxtZGxkRU5oYm1ScFpHRjBaU2dwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwTEZ4dUlDQWdJR1J2Ym1VNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lETXNJR1poYkhObEtTeGNiaUFnSUNCbGNuSnZjam9nS0dZZ1BTQnRjMmN1WjJWMFJYSnliM0lvS1NrZ0ppWWdaMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0l1VTNSaGRIVnpMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWxjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVlhWcFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRFlXNWthV1JoZEdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F6T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSQ2IyOXNLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVJ2Ym1Vb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EwT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJR2R2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpTGxOMFlYUjFjenRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeG5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkZjbkp2Y2loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRlYxYVdRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkRZVzVrYVdSaGRHVW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlEyRnVaR2xrWVhSbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXpMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFJYSnliM0lvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBMExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2RYVnBaQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtZGxkRlYxYVdRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1elpYUlZkV2xrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5UZEhKcGJtZEdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnU1VORlEyRnVaR2xrWVhSbElHTmhibVJwWkdGMFpTQTlJREk3WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1Y5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWRsZEVOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1VzSURJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWHgxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVjBRMkZ1Wkdsa1lYUmxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlpsZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXlMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1amJHVmhja05oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkRZVzVrYVdSaGRHVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVvWVhORFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnWkc5dVpTQTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUkViMjVsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNeXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkSDBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UTJGc2JGVndaR0YwWlZKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5ObGRFUnZibVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1SbWxsYkdRb2RHaHBjeXdnTXl3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVJHOXVaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltUm1sbGJHUW9kR2hwY3l3Z015d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVhR0Z6Ukc5dVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2daMjl2WjJ4bExuSndZeTVUZEdGMGRYTWdaWEp5YjNJZ1BTQTBPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSRmNuSnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWMzMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2daMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0l1VTNSaGRIVnpMQ0EwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkp3WXk1VGRHRjBkWE44ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRdWNISnZkRzkwZVhCbExuTmxkRVZ5Y205eUlEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlBibVZ2WmxkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMExDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrTmhiR3hWY0dSaGRHVlNaWEYxWlhOMExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JXVnpjMkZuWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrVnljbTl5SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVZ5Y205eUtIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVhR0Z6UlhKeWIzSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTBLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsYzNCdmJuTmxMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnpjRzl1YzJWOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JseHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRMkZzYkZWd1pHRjBaVkpsYzNCdmJuTmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlU3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtOaGJHeFZjR1JoZEdWU1pYTndiMjV6WlgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa05oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNURZV3hzVlhCa1lYUmxVbVZ6Y0c5dWMyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVEyRnNiRlZ3WkdGMFpWSmxjM0J2Ym5ObExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnpjRzl1YzJWOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1RFlXeHNWWEJrWVhSbFVtVnpjRzl1YzJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSXVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXekZkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2k1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY2k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2RYSnNjMHhwYzNRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2JYTm5MQ0F4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdkWE5sY201aGJXVTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTWl3Z1hDSmNJaWtzWEc0Z0lDQWdZM0psWkdWdWRHbGhiRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBekxDQmNJbHdpS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjbjBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVlhKc2N5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZWelpYSnVZVzFsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBRM0psWkdWdWRHbGhiQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeWZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJWY214elRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVlhObGNtNWhiV1VvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRGNtVmtaVzUwYVdGc0tDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQnpkSEpwYm1jZ2RYSnNjeUE5SURFN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhjM1J5YVc1blBuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJdWNISnZkRzkwZVhCbExtZGxkRlZ5YkhOTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdleUZCY25KaGVUeHpkSEpwYm1jK2ZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTVNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UEhOMGNtbHVaejU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhKOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpNXdjbTkwYjNSNWNHVXVjMlYwVlhKc2MweHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTV3Y205MGIzUjVjR1V1WVdSa1ZYSnNjeUE5SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlZObGNuWmxjaTV3Y205MGIzUjVjR1V1WTJ4bFlYSlZjbXh6VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVmNteHpUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklIVnpaWEp1WVcxbElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1Y0hKdmRHOTBlWEJsTG1kbGRGVnpaWEp1WVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJWTmxjblpsY24wZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxuQnliM1J2ZEhsd1pTNXpaWFJWYzJWeWJtRnRaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QmpjbVZrWlc1MGFXRnNJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJdWNISnZkRzkwZVhCbExtZGxkRU55WldSbGJuUnBZV3dnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNeXdnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWVFpYSjJaWEl1Y0hKdmRHOTBlWEJsTG5ObGRFTnlaV1JsYm5ScFlXd2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkJ5YjNSdk0xTjBjbWx1WjBacFpXeGtLSFJvYVhNc0lETXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaeTV5WlhCbFlYUmxaRVpwWld4a2MxOGdQU0JiTVYwN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5MbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2Q5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JoWkdScGRHbHZibUZzU1dObFUyVnlkbVZ5YzB4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRFRmtaR2wwYVc5dVlXeEpZMlZUWlhKMlpYSnpUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwTEZ4dUlDQWdJR1JwYzJGaWJHVlVjbWxqYTJ4bE9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXlMQ0JtWVd4elpTbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3VaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2Q5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2Q5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVlRaWEoyWlhJdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTVoWkdSQlpHUnBkR2x2Ym1Gc1NXTmxVMlZ5ZG1WeWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUkdsellXSnNaVlJ5YVdOcmJHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWjMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUVdSa2FYUnBiMjVoYkVsalpWTmxjblpsY25OTWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkVhWE5oWW14bFZISnBZMnRzWlNncE8xeHVJQ0JwWmlBb1ppa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0JKUTBWVFpYSjJaWElnWVdSa2FYUnBiMjVoYkY5cFkyVmZjMlZ5ZG1WeWN5QTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOElYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZVMlZ5ZG1WeVBuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3VjSEp2ZEc5MGVYQmxMbWRsZEVGa1pHbDBhVzl1WVd4SlkyVlRaWEoyWlhKelRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZUWlhKMlpYSStmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVYWldKU1ZFTkRiMjVtYVdjdWNISnZkRzkwZVhCbExuTmxkRUZrWkdsMGFXOXVZV3hKWTJWVFpYSjJaWEp6VEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GVTJWeWRtVnlQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1U1VORlUyVnlkbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1d2NtOTBiM1I1Y0dVdVlXUmtRV1JrYVhScGIyNWhiRWxqWlZObGNuWmxjbk1nUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTVN3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVk5sY25abGNpd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExsZGxZbEpVUTBOdmJtWnBaMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2tGa1pHbDBhVzl1WVd4SlkyVlRaWEoyWlhKelRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkJaR1JwZEdsdmJtRnNTV05sVTJWeWRtVnljMHhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z1pHbHpZV0pzWlY5MGNtbGphMnhsSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5CeWIzUnZkSGx3WlM1blpYUkVhWE5oWW14bFZISnBZMnRzWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1Y0hKdmRHOTBlWEJsTG5ObGRFUnBjMkZpYkdWVWNtbGphMnhsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5DYjI5c1pXRnVSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYzJSd09pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREVzSUZ3aVhDSXBMRnh1SUNBZ0lHOXdkR2x2Ym1Gc1EyOXVabWxuT2lBb1ppQTlJRzF6Wnk1blpYUlBjSFJwYjI1aGJFTnZibVpwWnlncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWnk1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFbHVhWFJUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFUyUndLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFOXdkR2x2Ym1Gc1EyOXVabWxuS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBTVzVwZEZOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJUWkhBb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlBjSFJwYjI1aGJFTnZibVpwWnlncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVhaV0pTVkVORGIyNW1hV2N1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSE5rY0NBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBVMlJ3SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlV1Y0hKdmRHOTBlWEJsTG5ObGRGTmtjQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRmRsWWxKVVEwTnZibVpwWnlCdmNIUnBiMjVoYkY5amIyNW1hV2NnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWRsZEU5d2RHbHZibUZzUTI5dVptbG5JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFp5d2dNaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbmZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSSmJtbDBVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWMFQzQjBhVzl1WVd4RGIyNW1hV2NnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsTG5CeWIzUnZkSGx3WlM1amJHVmhjazl3ZEdsdmJtRnNRMjl1Wm1sbklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEU5d2RHbHZibUZzUTI5dVptbG5LSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFNXNXBkRk4wWVdkbExuQnliM1J2ZEhsd1pTNW9ZWE5QY0hScGIyNWhiRU52Ym1acFp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHTmhibVJwWkdGMFpUb2dLR1lnUFNCdGMyY3VaMlYwUTJGdVpHbGtZWFJsS0NrcElDWW1JSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVTVU5GUTJGdVpHbGtZWFJsTG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEZWd1pHRjBaVk4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRGVndaR0YwWlZOMFlXZGxPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRlZ3WkdGMFpWTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1U3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUpRMFZEWVc1a2FXUmhkR1V1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJEWVc1a2FXUmhkR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSVmNHUmhkR1ZUZEdGblpYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBRMkZ1Wkdsa1lYUmxLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkpRMFZEWVc1a2FXUmhkR1VnWTJGdVpHbGtZWFJsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtsRFJVTmhibVJwWkdGMFpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1Y0hKdmRHOTBlWEJsTG1kbGRFTmhibVJwWkdGMFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdVc0lERXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRlZ3WkdGMFpWTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYUkRZVzVrYVdSaGRHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpEWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBRMkZ1Wkdsa1lYUmxLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWhoYzBOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNibHh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JFYjI1bFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkViMjVsVTNSaFoyVTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRWIyNWxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVJ2Ym1WVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVJ2Ym1WVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUkc5dVpWTjBZV2RsZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbExuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCemRHRjBkWE02SUNobUlEMGdiWE5uTG1kbGRGTjBZWFIxY3lncEtTQW1KaUJuYjI5bmJHVmZjbkJqWDNOMFlYUjFjMTl3WWk1VGRHRjBkWE11ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJVN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFVnljbTl5VTNSaFoyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSWEp5YjNKVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJR2R2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpTGxOMFlYUjFjenRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeG5iMjluYkdWZmNuQmpYM04wWVhSMWMxOXdZaTVUZEdGMGRYTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlRkR0YwZFhNb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlRkR0YwZFhNb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJR2R2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpTGxOMFlYUjFjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JuYjI5bmJHVXVjbkJqTGxOMFlYUjFjeUJ6ZEdGMGRYTWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxtZHZiMmRzWlM1eWNHTXVVM1JoZEhWemZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbkJ5YjNSdmRIbHdaUzVuWlhSVGRHRjBkWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVaMjl2WjJ4bExuSndZeTVUZEdGMGRYTjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJR2R2YjJkc1pWOXljR05mYzNSaGRIVnpYM0JpTGxOMFlYUjFjeXdnTVNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AzQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkZjbkp2Y2xOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhSVGRHRjBkWE1nUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJYSnliM0pUZEdGblpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJVdWNISnZkRzkwZVhCbExtTnNaV0Z5VTNSaGRIVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGTjBZWFIxY3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlV1Y0hKdmRHOTBlWEJsTG1oaGMxTjBZWFIxY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQlBibVZ2WmlCbmNtOTFjQ0JrWldacGJtbDBhVzl1Y3lCbWIzSWdkR2hwY3lCdFpYTnpZV2RsTGlCRllXTm9JR2R5YjNWd0lHUmxabWx1WlhNZ2RHaGxJR1pwWld4a1hHNGdLaUJ1ZFcxaVpYSnpJR0psYkc5dVoybHVaeUIwYnlCMGFHRjBJR2R5YjNWd0xpQlhhR1Z1SUc5bUlIUm9aWE5sSUdacFpXeGtjeWNnZG1Gc2RXVWdhWE1nYzJWMExDQmhiR3hjYmlBcUlHOTBhR1Z5SUdacFpXeGtjeUJwYmlCMGFHVWdaM0p2ZFhBZ1lYSmxJR05zWldGeVpXUXVJRVIxY21sdVp5QmtaWE5sY21saGJHbDZZWFJwYjI0c0lHbG1JRzExYkhScGNHeGxYRzRnS2lCbWFXVnNaSE1nWVhKbElHVnVZMjkxYm5SbGNtVmtJR1p2Y2lCaElHZHliM1Z3TENCdmJteDVJSFJvWlNCc1lYTjBJSFpoYkhWbElITmxaVzRnZDJsc2JDQmlaU0JyWlhCMExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHdoUVhKeVlYazhiblZ0WW1WeVBqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelh5QTlJRnRiTWl3ekxEUXNOVjFkTzF4dVhHNHZLaXBjYmlBcUlFQmxiblZ0SUh0dWRXMWlaWEo5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1VGRHRm5aVU5oYzJVZ1BTQjdYRzRnSUZOVVFVZEZYMDVQVkY5VFJWUTZJREFzWEc0Z0lFbE9TVlE2SURJc1hHNGdJRlZRUkVGVVJUb2dNeXhjYmlBZ1JFOU9SVG9nTkN4Y2JpQWdSVkpTVDFJNklEVmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FISmxkSFZ5YmlCN2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbE4wWVdkbFEyRnpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1blpYUlRkR0ZuWlVOaGMyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTGxOMFlXZGxRMkZ6WlgwZ0tpOG9hbk53WWk1TlpYTnpZV2RsTG1OdmJYQjFkR1ZQYm1WdlprTmhjMlVvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG05dVpXOW1SM0p2ZFhCelgxc3dYU2twTzF4dWZUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRIMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQjFkV2xrT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lERXNJRndpWENJcExGeHVJQ0FnSUdsdWFYUTZJQ2htSUQwZ2JYTm5MbWRsZEVsdWFYUW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBTVzVwZEZOMFlXZGxMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWtzWEc0Z0lDQWdkWEJrWVhSbE9pQW9aaUE5SUcxelp5NW5aWFJWY0dSaGRHVW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0JrYjI1bE9pQW9aaUE5SUcxelp5NW5aWFJFYjI1bEtDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpTNTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lHVnljbTl5T2lBb1ppQTlJRzF6Wnk1blpYUkZjbkp2Y2lncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbExuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOME8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRIMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlZkV2xrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlU3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wU1c1cGRGTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwU1c1cGRDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBWWEJrWVhSbFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJWY0dSaGRHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpUdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkViMjVsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkViMjVsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsTzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRmNuSnZjaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWWFZwWkNncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFbHVhWFFvS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVlhCa1lYUmxLQ2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTXl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUlZjR1JoZEdWVGRHRm5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUkc5dVpTZ3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJRFFzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkZjbkp2Y2lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEVXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wUlhKeWIzSlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnZFhWcFpDQTlJREU3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVaMlYwVlhWcFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNXpaWFJWZFdsa0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1FXNXpkMlZ5VW1WeGRXVnpkRWx1YVhSVGRHRm5aU0JwYm1sMElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JKYm1sMFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdVoyVjBTVzVwZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUkpibWwwVTNSaFoyVjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlN3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVsdWFYUlRkR0ZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbk5sZEVsdWFYUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lESXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVNXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkpibWwwS0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVvWVhOSmJtbDBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JCYm5OM1pYSlNaWEYxWlhOMFZYQmtZWFJsVTNSaFoyVWdkWEJrWVhSbElEMGdNenRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JWY0dSaGRHVlRkR0ZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWEYxWlhOMExuQnliM1J2ZEhsd1pTNW5aWFJWY0dSaGRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRlZ3WkdGMFpWTjBZV2RsTENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYRjFaWE4wVlhCa1lYUmxVM1JoWjJWOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzV6WlhSVmNHUmhkR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1WM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRE1zSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHMWxjM05oWjJVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlWWEJrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZWd1pHRjBaU2gxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVhR0Z6VlhCa1lYUmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JCYm5OM1pYSlNaWEYxWlhOMFJHOXVaVk4wWVdkbElHUnZibVVnUFNBME8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRFUnZibVZUZEdGblpYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbkJ5YjNSdmRIbHdaUzVuWlhSRWIyNWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVSdmJtVlRkR0ZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxMQ0EwS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBSRzl1WlZOMFlXZGxmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVjBSRzl1WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTkN3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhGMVpYTjBMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRIMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFYjI1bElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVSdmJtVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNRdWNISnZkRzkwZVhCbExtaGhjMFJ2Ym1VZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBMEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsSUdWeWNtOXlJRDBnTlR0Y2JpQXFJRUJ5WlhSMWNtNGdlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjWFZsYzNSRmNuSnZjbE4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbWRsZEVWeWNtOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEVWeWNtOXlVM1JoWjJWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WeGRXVnpkRVZ5Y205eVUzUmhaMlVzSURVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1JGY25KdmNsTjBZV2RsZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ4ZFdWemRDNXdjbTkwYjNSNWNHVXVjMlYwUlhKeWIzSWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEVXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnhkV1Z6ZEM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1I5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsY1hWbGMzUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVJYSnliM0lnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBSWEp5YjNJb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG1oaGMwVnljbTl5SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTlNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sU1c1cGRGTjBZV2RsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQnpaSEE2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTJSd0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBVMlJ3S0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYzJSd0lEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpTNXdjbTkwYjNSNWNHVXVaMlYwVTJSd0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxTVzVwZEZOMFlXZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpTNXdjbTkwYjNSNWNHVXVjMlYwVTJSd0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5CeWIzUnZkSGx3WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmpZVzVrYVdSaGRHVTZJQ2htSUQwZ2JYTm5MbWRsZEVOaGJtUnBaR0YwWlNncEtTQW1KaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa2xEUlVOaGJtUnBaR0YwWlM1MGIwOWlhbVZqZENocGJtTnNkV1JsU1c1emRHRnVZMlVzSUdZcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlY5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxWWEJrWVhSbFUzUmhaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaVHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxuTmxkRU5oYm1ScFpHRjBaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUTJGdVpHbGtZWFJsS0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JKUTBWRFlXNWthV1JoZEdVZ1kyRnVaR2xrWVhSbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrbERSVU5oYm1ScFpHRjBaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExuQnliM1J2ZEhsd1pTNW5aWFJEWVc1a2FXUmhkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVKUTBWRFlXNWthV1JoZEdWOUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVNVTkZRMkZ1Wkdsa1lYUmxMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1SlEwVkRZVzVrYVdSaGRHVjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVlZjR1JoZEdWVGRHRm5aWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbkJ5YjNSdmRIbHdaUzV6WlhSRFlXNWthV1JoZEdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVlZ3WkdGMFpWTjBZV2RsTG5CeWIzUnZkSGx3WlM1amJHVmhja05oYm1ScFpHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkRZVzVrYVdSaGRHVW9kVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFZYQmtZWFJsVTNSaFoyVXVjSEp2ZEc5MGVYQmxMbWhoYzBOaGJtUnBaR0YwWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aUzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpYMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc1Y2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJWOVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSRzl1WlZOMFlXZGxmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZFYjI1bFUzUmhaMlY5WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRWIyNWxVM1JoWjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVSdmJtVlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2MzUmhkSFZ6T2lBb1ppQTlJRzF6Wnk1blpYUlRkR0YwZFhNb0tTa2dKaVlnWjI5dloyeGxYM0p3WTE5emRHRjBkWE5mY0dJdVUzUmhkSFZ6TG5SdlQySnFaV04wS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnWmlsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbGZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSWEp5YjNKVGRHRm5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJWOUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2daMjl2WjJ4bFgzSndZMTl6ZEdGMGRYTmZjR0l1VTNSaGRIVnpPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExHZHZiMmRzWlY5eWNHTmZjM1JoZEhWelgzQmlMbE4wWVhSMWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGTjBZWFIxY3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkZjbkp2Y2xOMFlXZGxmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJUZEdGMGRYTW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUdkdmIyZHNaVjl5Y0dOZmMzUmhkSFZ6WDNCaUxsTjBZWFIxY3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCbmIyOW5iR1V1Y25CakxsTjBZWFIxY3lCemRHRjBkWE1nUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbWR2YjJkc1pTNXljR011VTNSaGRIVnpmVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVoyVjBVM1JoZEhWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN1AzQnliM1J2TG1kdmIyZHNaUzV5Y0dNdVUzUmhkSFZ6ZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCbmIyOW5iR1ZmY25CalgzTjBZWFIxYzE5d1lpNVRkR0YwZFhNc0lERXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejl3Y205MGJ5NW5iMjluYkdVdWNuQmpMbE4wWVhSMWMzeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWRmNuSnZjbE4wWVdkbExuQnliM1J2ZEhsd1pTNXpaWFJUZEdGMGRYTWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpUZEdGMGRYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFUzUmhkSFZ6S0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlV1Y0hKdmRHOTBlWEJsTG1oaGMxTjBZWFIxY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQlBibVZ2WmlCbmNtOTFjQ0JrWldacGJtbDBhVzl1Y3lCbWIzSWdkR2hwY3lCdFpYTnpZV2RsTGlCRllXTm9JR2R5YjNWd0lHUmxabWx1WlhNZ2RHaGxJR1pwWld4a1hHNGdLaUJ1ZFcxaVpYSnpJR0psYkc5dVoybHVaeUIwYnlCMGFHRjBJR2R5YjNWd0xpQlhhR1Z1SUc5bUlIUm9aWE5sSUdacFpXeGtjeWNnZG1Gc2RXVWdhWE1nYzJWMExDQmhiR3hjYmlBcUlHOTBhR1Z5SUdacFpXeGtjeUJwYmlCMGFHVWdaM0p2ZFhBZ1lYSmxJR05zWldGeVpXUXVJRVIxY21sdVp5QmtaWE5sY21saGJHbDZZWFJwYjI0c0lHbG1JRzExYkhScGNHeGxYRzRnS2lCbWFXVnNaSE1nWVhKbElHVnVZMjkxYm5SbGNtVmtJR1p2Y2lCaElHZHliM1Z3TENCdmJteDVJSFJvWlNCc1lYTjBJSFpoYkhWbElITmxaVzRnZDJsc2JDQmlaU0JyWlhCMExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHdoUVhKeVlYazhiblZ0WW1WeVBqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1dmJtVnZaa2R5YjNWd2MxOGdQU0JiV3pJc015dzBMRFZkWFR0Y2JseHVMeW9xWEc0Z0tpQkFaVzUxYlNCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExsTjBZV2RsUTJGelpTQTlJSHRjYmlBZ1UxUkJSMFZmVGs5VVgxTkZWRG9nTUN4Y2JpQWdTVTVKVkRvZ01peGNiaUFnVlZCRVFWUkZPaUF6TEZ4dUlDQkVUMDVGT2lBMExGeHVJQ0JGVWxKUFVqb2dOVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFjbVYwZFhKdUlIdHdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTGxOMFlXZGxRMkZ6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVaMlYwVTNSaFoyVkRZWE5sSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVVM1JoWjJWRFlYTmxmU0FxTHlocWMzQmlMazFsYzNOaFoyVXVZMjl0Y0hWMFpVOXVaVzltUTJGelpTaDBhR2x6TENCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTa3BPMXh1ZlR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpYMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdkWFZwWkRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0JjSWx3aUtTeGNiaUFnSUNCcGJtbDBPaUFvWmlBOUlHMXpaeTVuWlhSSmJtbDBLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZKYm1sMFUzUmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0IxY0dSaGRHVTZJQ2htSUQwZ2JYTm5MbWRsZEZWd1pHRjBaU2dwS1NBbUppQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtTeGNiaUFnSUNCa2IyNWxPaUFvWmlBOUlHMXpaeTVuWlhSRWIyNWxLQ2twSUNZbUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZFYjI1bFUzUmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0JsY25KdmNqb2dLR1lnUFNCdGMyY3VaMlYwUlhKeWIzSW9LU2tnSmlZZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlV1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVjlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJZ1BTQm1kVzVqZEdsdmJpaHRjMmNzSUhKbFlXUmxjaWtnZTF4dUlDQjNhR2xzWlNBb2NtVmhaR1Z5TG01bGVIUkdhV1ZzWkNncEtTQjdYRzRnSUNBZ2FXWWdLSEpsWVdSbGNpNXBjMFZ1WkVkeWIzVndLQ2twSUh0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdabWxsYkdRZ1BTQnlaV0ZrWlhJdVoyVjBSbWxsYkdST2RXMWlaWElvS1R0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1pwWld4a0tTQjdYRzRnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJWZFdsa0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbE8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkpibWwwS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sVlhCa1lYUmxVM1JoWjJVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWWEJrWVhSbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTkRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbE8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkViMjVsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJYSnliM0pUZEdGblpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFVnljbTl5S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZYVnBaQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVsdWFYUW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRlZ3WkdGMFpTZ3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVFdWemMyRm5aU2hjYmlBZ0lDQWdJRE1zWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJFYjI1bEtDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdOQ3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkZjbkp2Y2lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEVXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVWeWNtOXlVM1JoWjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhWMWFXUWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVuWlhSVmRXbGtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFZYVnBaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRUZ1YzNkbGNsSmxjM0J2Ym5ObFNXNXBkRk4wWVdkbElHbHVhWFFnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3UDNCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVkpibWwwVTNSaFoyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1kbGRFbHVhWFFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVbHVhWFJUZEdGblpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlVsdWFYUlRkR0ZuWlN3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWSmJtbDBVM1JoWjJWOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5ObGRFbHVhWFFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1WM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRElzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtTnNaV0Z5U1c1cGRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSSmJtbDBLSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVhR0Z6U1c1cGRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpTQjFjR1JoZEdVZ1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZWY0dSaGRHVlRkR0ZuWlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVaMlYwVlhCa1lYUmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJWVmNHUmhkR1ZUZEdGblpYMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlZWd1pHRjBaVk4wWVdkbExDQXpLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpWVndaR0YwWlZOMFlXZGxmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNXpaWFJWY0dSaGRHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVYzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lETXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlWWEJrWVhSbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZWd1pHRjBaU2gxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWhoYzFWd1pHRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnUVc1emQyVnlVbVZ6Y0c5dWMyVkViMjVsVTNSaFoyVWdaRzl1WlNBOUlEUTdYRzRnS2lCQWNtVjBkWEp1SUhzL2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVJ2Ym1WVGRHRm5aWDFjYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdVoyVjBSRzl1WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxSRzl1WlZOMFlXZGxmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObFJHOXVaVk4wWVdkbExDQTBLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpVUnZibVZUZEdGblpYeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWMyVjBSRzl1WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTkN3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJRzFsYzNOaFoyVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpTNXdjbTkwYjNSNWNHVXVZMnhsWVhKRWIyNWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFUnZibVVvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVvWVhORWIyNWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOQ2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JCYm5OM1pYSlNaWE53YjI1elpVVnljbTl5VTNSaFoyVWdaWEp5YjNJZ1BTQTFPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVFXNXpkMlZ5VW1WemNHOXVjMlZGY25KdmNsTjBZV2RsZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMa0Z1YzNkbGNsSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNW5aWFJGY25KdmNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlgwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaVVZ5Y205eVUzUmhaMlVzSURVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrRnVjM2RsY2xKbGMzQnZibk5sUlhKeWIzSlRkR0ZuWlh4MWJtUmxabWx1WldSOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNUJibk4zWlhKU1pYTndiMjV6WlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1QmJuTjNaWEpTWlhOd2IyNXpaUzV3Y205MGIzUjVjR1V1YzJWMFJYSnliM0lnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1WM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRFVzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1UVc1emQyVnlVbVZ6Y0c5dWMyVXViMjVsYjJaSGNtOTFjSE5mV3pCZExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnRaWE56WVdkbElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVCYm5OM1pYSlNaWE53YjI1elpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVRVzV6ZDJWeVVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExtTnNaV0Z5UlhKeWIzSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFJYSnliM0lvZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGtGdWMzZGxjbEpsYzNCdmJuTmxMbkJ5YjNSdmRIbHdaUzVvWVhORmNuSnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dVhHNWNibWxtSUNocWMzQmlMazFsYzNOaFoyVXVSMFZPUlZKQlZFVmZWRTlmVDBKS1JVTlVLU0I3WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVc0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdjSEp2ZEc4dVhHNGdLaUJHYVdWc1pDQnVZVzFsY3lCMGFHRjBJR0Z5WlNCeVpYTmxjblpsWkNCcGJpQktZWFpoVTJOeWFYQjBJR0Z1WkNCM2FXeHNJR0psSUhKbGJtRnRaV1FnZEc4Z2NHSmZibUZ0WlM1Y2JpQXFJRTl3ZEdsdmJtRnNJR1pwWld4a2N5QjBhR0YwSUdGeVpTQnViM1FnYzJWMElIZHBiR3dnWW1VZ2MyVjBJSFJ2SUhWdVpHVm1hVzVsWkM1Y2JpQXFJRlJ2SUdGalkyVnpjeUJoSUhKbGMyVnlkbVZrSUdacFpXeGtJSFZ6WlN3Z1ptOXZMbkJpWHp4dVlXMWxQaXdnWldjc0lHWnZieTV3WWw5a1pXWmhkV3gwTGx4dUlDb2dSbTl5SUhSb1pTQnNhWE4wSUc5bUlISmxjMlZ5ZG1Wa0lHNWhiV1Z6SUhCc1pXRnpaU0J6WldVNlhHNGdLaUFnSUNBZ2JtVjBMM0J5YjNSdk1pOWpiMjF3YVd4bGNpOXFjeTlwYm5SbGNtNWhiQzluWlc1bGNtRjBiM0l1WTJNamEwdGxlWGR2Y21RdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNDlmU0J2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlIZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pTQjBhR1ZjYmlBcUlDQWdJQ0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGNYVmxjM1F1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGNYVmxjM1F1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRIMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZEgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGNYVmxjM1F1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZER0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWEYxWlhOMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWEYxWlhOMGZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYRjFaWE4wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WeGRXVnpkQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnhkV1Z6ZEM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRIMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ4ZFdWemRDNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlV1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHTnZibVpwWnpvZ0tHWWdQU0J0YzJjdVoyVjBRMjl1Wm1sbktDa3BJQ1ltSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlgxY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObE8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dWNISnZkRzh1Y25CakxuZGxZbkowWXk1Mk1TNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsYzNCdmJuTmxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVUM0IwYVc5dVlXeFhaV0pTVkVORGIyNW1hV2RTWlhOd2IyNXpaWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVjlYRzRnS2k5Y2JuQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWE53YjI1elpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbk8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VjJWaVVsUkRRMjl1Wm1sbkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFEyOXVabWxuS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1UGNIUnBiMjVoYkZkbFlsSlVRME52Ym1acFoxSmxjM0J2Ym5ObExuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlY5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkRiMjVtYVdjb0tUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXVWMlZpVWxSRFEyOXVabWxuTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUZkbFlsSlVRME52Ym1acFp5QmpiMjVtYVdjZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG5CeWIzUnZMbkp3WXk1M1pXSnlkR011ZGpFdVYyVmlVbFJEUTI5dVptbG5mVnh1SUNvdlhHNXdjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVXVjSEp2ZEc5MGVYQmxMbWRsZEVOdmJtWnBaeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxlejl3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMbGRsWWxKVVEwTnZibVpwWjMwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1Y0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1WFpXSlNWRU5EYjI1bWFXY3NJREVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo5d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGxkbFlsSlVRME52Ym1acFozeDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVjSEp2ZEc4dWNuQmpMbmRsWW5KMFl5NTJNUzVQY0hScGIyNWhiRmRsWWxKVVEwTnZibVpwWjFKbGMzQnZibk5sZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTV3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4TGs5d2RHbHZibUZzVjJWaVVsUkRRMjl1Wm1sblVtVnpjRzl1YzJVdWNISnZkRzkwZVhCbExuTmxkRU52Ym1acFp5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1d2NtOTBieTV5Y0dNdWQyVmljblJqTG5ZeExrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5VbVZ6Y0c5dWMyVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NXdjbTkwYnk1eWNHTXVkMlZpY25SakxuWXhMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuVW1WemNHOXVjMlV1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlRMjl1Wm1sbklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVOdmJtWnBaeWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbkJ5YjNSdkxuSndZeTUzWldKeWRHTXVkakV1VDNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdkU1pYTndiMjV6WlM1d2NtOTBiM1I1Y0dVdWFHRnpRMjl1Wm1sbklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVaMjl2Wnk1dlltcGxZM1F1WlhoMFpXNWtLR1Y0Y0c5eWRITXNJSEJ5YjNSdkxuQnliM1J2TG5Kd1l5NTNaV0p5ZEdNdWRqRXBPMXh1SWl3aWFXMXdiM0owSUhzZ1pHbGhiRVJwY21WamRDd2daR2xoYkZkbFlsSlVReXdnUTNKbFpHVnVkR2xoYkhNZ2ZTQm1jbTl0SUZ3aUxpOWthV0ZzWENJN1hHNWNibVY0Y0c5eWRDQjdYRzVjZEdScFlXeEVhWEpsWTNRc1hHNWNkR1JwWVd4WFpXSlNWRU1zWEc1Y2RFTnlaV1JsYm5ScFlXeHpMRnh1ZlR0Y2JpSXNJbWx0Y0c5eWRDQjdJR2R5Y0dNZ2ZTQm1jbTl0SUZ3aVFHbHRjSEp2WW1GaWJHVXRaVzVuTDJkeWNHTXRkMlZpWENJN1hHNXBiWEJ2Y25RZ2V5QkRiR2xsYm5SRGFHRnVibVZzSUgwZ1puSnZiU0JjSWk0dlEyeHBaVzUwUTJoaGJtNWxiRndpTzF4dWFXMXdiM0owSUhzZ1EyOWtaU0I5SUdaeWIyMGdYQ0l1TDJkbGJpOW5iMjluYkdVdmNuQmpMMk52WkdWZmNHSmNJanRjYm1sdGNHOXlkQ0I3SUZOMFlYUjFjeUI5SUdaeWIyMGdYQ0l1TDJkbGJpOW5iMjluYkdVdmNuQmpMM04wWVhSMWMxOXdZbHdpTzF4dWFXMXdiM0owSUhzZ1FYVjBhR1Z1ZEdsallYUmxVbVZ4ZFdWemRDd2dRWFYwYUdWdWRHbGpZWFJsVW1WemNHOXVjMlVzSUVGMWRHaGxiblJwWTJGMFpWUnZVbVZ4ZFdWemRDd2dRWFYwYUdWdWRHbGpZWFJsVkc5U1pYTndiMjV6WlN3Z1EzSmxaR1Z1ZEdsaGJITWdZWE1nVUVKRGNtVmtaVzUwYVdGc2N5QjlJR1p5YjIwZ1hDSXVMMmRsYmk5d2NtOTBieTl5Y0dNdmRqRXZZWFYwYUY5d1lsd2lPMXh1YVcxd2IzSjBJSHNnUVhWMGFGTmxjblpwWTJVc0lFVjRkR1Z5Ym1Gc1FYVjBhRk5sY25acFkyVWdmU0JtY205dElGd2lMaTluWlc0dmNISnZkRzh2Y25CakwzWXhMMkYxZEdoZmNHSmZjMlZ5ZG1salpWd2lPMXh1YVcxd2IzSjBJSHNnUTJGc2JGSmxjWFZsYzNRc0lFTmhiR3hTWlhOd2IyNXpaU3dnUTJGc2JGVndaR0YwWlZKbGNYVmxjM1FzSUVOaGJHeFZjR1JoZEdWU1pYTndiMjV6WlN3Z1NVTkZRMkZ1Wkdsa1lYUmxJSDBnWm5KdmJTQmNJaTR2WjJWdUwzQnliM1J2TDNKd1l5OTNaV0p5ZEdNdmRqRXZjMmxuYm1Gc2FXNW5YM0JpWENJN1hHNXBiWEJ2Y25RZ2V5QlRhV2R1WVd4cGJtZFRaWEoyYVdObElIMGdabkp2YlNCY0lpNHZaMlZ1TDNCeWIzUnZMM0p3WXk5M1pXSnlkR012ZGpFdmMybG5ibUZzYVc1blgzQmlYM05sY25acFkyVmNJanRjYm1sdGNHOXlkQ0I3SUc1bGQxQmxaWEpEYjI1dVpXTjBhVzl1Um05eVEyeHBaVzUwSUgwZ1puSnZiU0JjSWk0dmNHVmxjbHdpTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFUnBZV3hQY0hScGIyNXpJSHRjYmx4MFlYVjBhRVZ1ZEdsMGVUODZJSE4wY21sdVp6dGNibHgwWTNKbFpHVnVkR2xoYkhNL09pQkRjbVZrWlc1MGFXRnNjenRjYmx4MGQyVmljblJqVDNCMGFXOXVjejg2SUVScFlXeFhaV0pTVkVOUGNIUnBiMjV6TzF4dVhIUmxlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpQem9nYzNSeWFXNW5PMXh1WEhSbGVIUmxjbTVoYkVGMWRHaFViMFZ1ZEdsMGVUODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCRWFXRnNWMlZpVWxSRFQzQjBhVzl1Y3lCN1hHNWNkR1JwYzJGaWJHVlVjbWxqYTJ4bFNVTkZPaUJpYjI5c1pXRnVPMXh1WEhSeWRHTkRiMjVtYVdjL09pQlNWRU5EYjI1bWFXZDFjbUYwYVc5dU8xeHVYRzVjZEM4dklITnBaMjVoYkdsdVowRjFkR2hGYm5ScGRIa2dhWE1nZEdobElHVnVkR2wwZVNCMGJ5QmhkWFJvWlc1MGFXTmhkR1VnWVhNZ2RHOGdkR2hsSUhOcFoyNWhiR1Z5TGx4dVhIUnphV2R1WVd4cGJtZEJkWFJvUlc1MGFYUjVQem9nYzNSeWFXNW5PMXh1WEc1Y2RDOHZJSE5wWjI1aGJHbHVaMFY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM01nYVhNZ2RHaGxJR0ZrWkhKbGMzTWdkRzhnY0dWeVptOXliU0JsZUhSbGNtNWhiQ0JoZFhSb0lIbGxkQzVjYmx4MEx5OGdWR2hwY3lCcGN5QjFibXhwYTJWc2VTQjBieUJpWlNCdVpXVmtaV1FnYzJsdVkyVWdkR2hsSUhOcFoyNWhiR1Z5SUdseklIUjVjR2xqWVd4c2VTQnBiaUIwYUdVZ2MyRnRaVnh1WEhRdkx5QndiR0ZqWlNCM2FHVnlaU0JoZFhSb1pXNTBhV05oZEdsdmJpQm9ZWEJ3Wlc1ekxseHVYSFJ6YVdkdVlXeHBibWRGZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56UHpvZ2MzUnlhVzVuTzF4dVhHNWNkQzh2SUhOcFoyNWhiR2x1WjBWNGRHVnlibUZzUVhWMGFGUnZSVzUwYVhSNUlHbHpJSFJvWlNCbGJuUnBkSGtnZEc4Z1lYVjBhR1Z1ZEdsallYUmxJR1p2Y2lCaFpuUmxjbHh1WEhRdkx5QmxlSFJsY201aGJHeDVJR0YxZEdobGJuUnBZMkYwYVc1bkxseHVYSFF2THlCVWFHbHpJR2x6SUhWdWJHbHJaV3g1SUhSdklHSmxJRzVsWldSbFpDQnphVzVqWlNCMGFHVWdjMmxuYm1Gc1pYSWdhWE1nZEhsd2FXTmhiR3g1SUdsdUlIUm9aU0J6WVcxbFhHNWNkQzh2SUhCc1lXTmxJSGRvWlhKbElHRjFkR2hsYm5ScFkyRjBhVzl1SUdoaGNIQmxibk11WEc1Y2RITnBaMjVoYkdsdVowVjRkR1Z5Ym1Gc1FYVjBhRlJ2Ulc1MGFYUjVQem9nYzNSeWFXNW5PMXh1WEc1Y2RDOHZJSE5wWjI1aGJHbHVaME55WldSbGJuUnBZV3h6SUdGeVpTQjFjMlZrSUhSdklHRjFkR2hsYm5ScFkyRjBaU0IwYUdVZ2NtVnhkV1Z6ZENCMGJ5QjBhR1VnYzJsbmJtRnNhVzVuSUhObGNuWmxjaTVjYmx4MGMybG5ibUZzYVc1blEzSmxaR1Z1ZEdsaGJITS9PaUJEY21Wa1pXNTBhV0ZzY3p0Y2JuMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEY21Wa1pXNTBhV0ZzY3lCN1hHNWNkSFI1Y0dVNklITjBjbWx1Wnp0Y2JseDBjR0Y1Ykc5aFpEb2djM1J5YVc1bk8xeHVmVnh1WEc1bGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdaR2xoYkVScGNtVmpkQ2hoWkdSeVpYTnpPaUJ6ZEhKcGJtY3NJRzl3ZEhNL09pQkVhV0ZzVDNCMGFXOXVjeWs2SUZCeWIyMXBjMlU4WjNKd1l5NVVjbUZ1YzNCdmNuUkdZV04wYjNKNVBpQjdYRzVjZEdOdmJuTjBJR1JsWm1GMWJIUkdZV04wYjNKNUlEMGdLRzl3ZEhNNklHZHljR011VkhKaGJuTndiM0owVDNCMGFXOXVjeWs2SUdkeWNHTXVWSEpoYm5Od2IzSjBJRDArSUh0Y2JseDBYSFJ5WlhSMWNtNGdaM0p3WXk1RGNtOXpjMEp5YjNkelpYSklkSFJ3VkhKaGJuTndiM0owS0hzZ2QybDBhRU55WldSbGJuUnBZV3h6T2lCbVlXeHpaU0I5S1NodmNIUnpLVHRjYmx4MGZUdGNibHgwYVdZZ0tDRnZjSFJ6UHk1amNtVmtaVzUwYVdGc2N5a2dlMXh1WEhSY2RISmxkSFZ5YmlCa1pXWmhkV3gwUm1GamRHOXllVHRjYmx4MGZWeHVYSFJ5WlhSMWNtNGdiV0ZyWlVGMWRHaGxiblJwWTJGMFpXUlVjbUZ1YzNCdmNuUkdZV04wYjNKNUtHRmtaSEpsYzNNc0lHUmxabUYxYkhSR1lXTjBiM0o1TENCdmNIUnpLVHRjYm4xY2JseHVZWE41Ym1NZ1puVnVZM1JwYjI0Z2JXRnJaVUYxZEdobGJuUnBZMkYwWldSVWNtRnVjM0J2Y25SR1lXTjBiM0o1S0dGa1pISmxjM002SUhOMGNtbHVaeXdnWkdWbVlYVnNkRVpoWTNSdmNuazZJR2R5Y0dNdVZISmhibk53YjNKMFJtRmpkRzl5ZVN3Z2IzQjBjejg2SUVScFlXeFBjSFJwYjI1ektUb2dVSEp2YldselpUeG5jbkJqTGxSeVlXNXpjRzl5ZEVaaFkzUnZjbmsrSUh0Y2JseDBiR1YwSUdGalkyVnpjMVJ2YTJWdUlEMGdYQ0pjSWp0Y2JseDBZMjl1YzNRZ1oyVjBSWGgwY21GTlpYUmhaR0YwWVNBOUlHRnplVzVqSUNncE9pQlFjbTl0YVhObFBHZHljR011VFdWMFlXUmhkR0UrSUQwK0lIdGNibHgwWEhRdkx5QlVUMFJQS0doMGRIQnpPaTh2WjJsMGFIVmlMbU52YlM5MmFXRnRjbTlpYjNScFkzTXZaMjkxZEdsc2N5OXBjM04xWlhNdk1UTXBPaUJvWVc1a2JHVWdaWGh3YVhKaGRHbHZibHh1WEhSY2RHbG1JQ2hoWTJObGMzTlViMnRsYmlBOVBTQmNJbHdpS1NCN1hHNWNkRngwWEhSamIyNXpkQ0J5WlhGMVpYTjBJRDBnYm1WM0lFRjFkR2hsYm5ScFkyRjBaVkpsY1hWbGMzUW9LVHRjYmx4MFhIUmNkSEpsY1hWbGMzUXVjMlYwUlc1MGFYUjVLRzl3ZEhNL0xtRjFkR2hGYm5ScGRIa2dQeUJ2Y0hSekxtRjFkR2hGYm5ScGRIa2dPaUJoWkdSeVpYTnpMbkpsY0d4aFkyVW9MMTRvTGlvNlhGd3ZYRnd2S1M4c0lDY25LU2s3WEc1Y2RGeDBYSFJqYjI1emRDQmpjbVZrY3lBOUlHNWxkeUJRUWtOeVpXUmxiblJwWVd4ektDazdYRzVjZEZ4MFhIUmpjbVZrY3k1elpYUlVlWEJsS0c5d2RITS9MbU55WldSbGJuUnBZV3h6UHk1MGVYQmxJU2s3WEc1Y2RGeDBYSFJqY21Wa2N5NXpaWFJRWVhsc2IyRmtLRzl3ZEhNL0xtTnlaV1JsYm5ScFlXeHpQeTV3WVhsc2IyRmtJU2s3WEc1Y2RGeDBYSFJ5WlhGMVpYTjBMbk5sZEVOeVpXUmxiblJwWVd4ektHTnlaV1J6S1R0Y2JseHVYSFJjZEZ4MGJHVjBJSEJTWlhOdmJIWmxPaUFvZG1Gc2RXVTZJR2R5Y0dNdVRXVjBZV1JoZEdFcElEMCtJSFp2YVdRN1hHNWNkRngwWEhSc1pYUWdjRkpsYW1WamREb2dLSEpsWVhOdmJqODZJR0Z1ZVNrZ1BUNGdkbTlwWkR0Y2JseDBYSFJjZEd4bGRDQmtiMjVsSUQwZ2JtVjNJRkJ5YjIxcGMyVThaM0p3WXk1TlpYUmhaR0YwWVQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RGeDBYSFJ3VW1WemIyeDJaU0E5SUhKbGMyOXNkbVU3WEc1Y2RGeDBYSFJjZEhCU1pXcGxZM1FnUFNCeVpXcGxZM1E3WEc1Y2RGeDBYSFI5S1R0Y2JseDBYSFJjZEd4bGRDQjBhR2x6UVdOalpYTnpWRzlyWlc0Z1BTQmNJbHdpTzF4dVhIUmNkRngwWjNKd1l5NXBiblp2YTJVb1FYVjBhRk5sY25acFkyVXVRWFYwYUdWdWRHbGpZWFJsTENCN1hHNWNkRngwWEhSY2RISmxjWFZsYzNRNklISmxjWFZsYzNRc1hHNWNkRngwWEhSY2RHaHZjM1E2SUc5d2RITS9MbVY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM01nUHlCdmNIUnpMbVY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM01nT2lCaFpHUnlaWE56TEZ4dVhIUmNkRngwWEhSMGNtRnVjM0J2Y25RNklHUmxabUYxYkhSR1lXTjBiM0o1TEZ4dVhIUmNkRngwWEhSdmJrMWxjM05oWjJVNklDaHRaWE56WVdkbE9pQkJkWFJvWlc1MGFXTmhkR1ZTWlhOd2IyNXpaU2tnUFQ0Z2UxeHVYSFJjZEZ4MFhIUmNkSFJvYVhOQlkyTmxjM05VYjJ0bGJpQTlJRzFsYzNOaFoyVXVaMlYwUVdOalpYTnpWRzlyWlc0b0tUdGNibHgwWEhSY2RGeDBmU3hjYmx4MFhIUmNkRngwYjI1RmJtUTZJQ2hqYjJSbE9pQm5jbkJqTGtOdlpHVXNJRzF6WnpvZ2MzUnlhVzVuSUh3Z2RXNWtaV1pwYm1Wa0xDQjBjbUZwYkdWeWN6b2daM0p3WXk1TlpYUmhaR0YwWVNrZ1BUNGdlMXh1WEhSY2RGeDBYSFJjZEdsbUlDaGpiMlJsSUQwOUlHZHljR011UTI5a1pTNVBTeWtnZTF4dVhIUmNkRngwWEhSY2RGeDBjRkpsYzI5c2RtVW9iV1FwTzF4dVhIUmNkRngwWEhSY2RIMGdaV3h6WlNCN1hHNWNkRngwWEhSY2RGeDBYSFJ3VW1WcVpXTjBLRzF6WnlrN1hHNWNkRngwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5S1R0Y2JseDBYSFJjZEdGM1lXbDBJR1J2Ym1VN1hHNWNkRngwWEhSaFkyTmxjM05VYjJ0bGJpQTlJSFJvYVhOQlkyTmxjM05VYjJ0bGJqdGNibHh1WEhSY2RGeDBhV1lnS0c5d2RITS9MbVY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM01nSmlZZ2IzQjBjejh1WlhoMFpYSnVZV3hCZFhSb1ZHOUZiblJwZEhrcElIdGNibHgwWEhSY2RGeDBZMjl1YzNRZ2JXUWdQU0J1WlhjZ1ozSndZeTVOWlhSaFpHRjBZU2dwTzF4dVhIUmNkRngwWEhSdFpDNXpaWFFvWENKaGRYUm9iM0pwZW1GMGFXOXVYQ0lzSUdCQ1pXRnlaWElnSkh0aFkyTmxjM05VYjJ0bGJuMWdLVHRjYmx4dVhIUmNkRngwWEhSa2IyNWxJRDBnYm1WM0lGQnliMjFwYzJVOFozSndZeTVOWlhSaFpHRjBZVDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEZ4MFhIUmNkSEJTWlhOdmJIWmxJRDBnY21WemIyeDJaVHRjYmx4MFhIUmNkRngwWEhSd1VtVnFaV04wSUQwZ2NtVnFaV04wTzF4dVhIUmNkRngwWEhSOUtUdGNibHgwWEhSY2RGeDBkR2hwYzBGalkyVnpjMVJ2YTJWdUlEMGdYQ0pjSWp0Y2JseHVYSFJjZEZ4MFhIUmpiMjV6ZENCeVpYRjFaWE4wSUQwZ2JtVjNJRUYxZEdobGJuUnBZMkYwWlZSdlVtVnhkV1Z6ZENncE8xeHVYSFJjZEZ4MFhIUnlaWEYxWlhOMExuTmxkRVZ1ZEdsMGVTaHZjSFJ6TG1WNGRHVnlibUZzUVhWMGFGUnZSVzUwYVhSNUtUdGNibHgwWEhSY2RGeDBaM0p3WXk1cGJuWnZhMlVvUlhoMFpYSnVZV3hCZFhSb1UyVnlkbWxqWlM1QmRYUm9aVzUwYVdOaGRHVlVieXdnZTF4dVhIUmNkRngwWEhSY2RISmxjWFZsYzNRNklISmxjWFZsYzNRc1hHNWNkRngwWEhSY2RGeDBhRzl6ZERvZ2IzQjBjeTVsZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56SVN4Y2JseDBYSFJjZEZ4MFhIUjBjbUZ1YzNCdmNuUTZJR1JsWm1GMWJIUkdZV04wYjNKNUxGeHVYSFJjZEZ4MFhIUmNkRzFsZEdGa1lYUmhPaUJ0WkN4Y2JseDBYSFJjZEZ4MFhIUnZiazFsYzNOaFoyVTZJQ2h0WlhOellXZGxPaUJCZFhSb1pXNTBhV05oZEdWVWIxSmxjM0J2Ym5ObEtTQTlQaUI3WEc1Y2RGeDBYSFJjZEZ4MFhIUjBhR2x6UVdOalpYTnpWRzlyWlc0Z1BTQnRaWE56WVdkbExtZGxkRUZqWTJWemMxUnZhMlZ1S0NrN1hHNWNkRngwWEhSY2RGeDBmU3hjYmx4MFhIUmNkRngwWEhSdmJrVnVaRG9nS0dOdlpHVTZJR2R5Y0dNdVEyOWtaU3dnYlhObk9pQnpkSEpwYm1jZ2ZDQjFibVJsWm1sdVpXUXNJSFJ5WVdsc1pYSnpPaUJuY25CakxrMWxkR0ZrWVhSaEtTQTlQaUI3WEc1Y2RGeDBYSFJjZEZ4MFhIUnBaaUFvWTI5a1pTQTlQU0JuY25CakxrTnZaR1V1VDBzcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MGNGSmxjMjlzZG1Vb2JXUXBPMXh1WEhSY2RGeDBYSFJjZEZ4MGZTQmxiSE5sSUh0Y2JseDBYSFJjZEZ4MFhIUmNkRngwY0ZKbGFtVmpkQ2h0YzJjcE8xeHVYSFJjZEZ4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSY2RIMWNibHgwWEhSY2RGeDBmU2s3WEc1Y2RGeDBYSFJjZEdGM1lXbDBJR1J2Ym1VN1hHNWNkRngwWEhSY2RHRmpZMlZ6YzFSdmEyVnVJRDBnZEdocGMwRmpZMlZ6YzFSdmEyVnVPMXh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHgwWEhSamIyNXpkQ0J0WkNBOUlHNWxkeUJuY25CakxrMWxkR0ZrWVhSaEtDazdYRzVjZEZ4MGJXUXVjMlYwS0Z3aVlYVjBhRzl5YVhwaGRHbHZibHdpTENCZ1FtVmhjbVZ5SUNSN1lXTmpaWE56Vkc5clpXNTlZQ2s3WEc1Y2RGeDBjbVYwZFhKdUlHMWtPMXh1WEhSOVhHNWNkR052Ym5OMElHVjRkSEpoVFdRZ1BTQmhkMkZwZENCblpYUkZlSFJ5WVUxbGRHRmtZWFJoS0NrN1hHNWNkSEpsZEhWeWJpQW9iM0IwY3pvZ1ozSndZeTVVY21GdWMzQnZjblJQY0hScGIyNXpLVG9nWjNKd1l5NVVjbUZ1YzNCdmNuUWdQVDRnZTF4dVhIUmNkSEpsZEhWeWJpQnVaWGNnWVhWMGFHVnVkR2xqWVhSbFpGUnlZVzV6Y0c5eWRDaHZjSFJ6TENCa1pXWmhkV3gwUm1GamRHOXllU3dnWlhoMGNtRk5aQ2s3WEc1Y2RIMDdYRzU5WEc1Y2JtTnNZWE56SUdGMWRHaGxiblJwWTJGMFpXUlVjbUZ1YzNCdmNuUWdhVzF3YkdWdFpXNTBjeUJuY25CakxsUnlZVzV6Y0c5eWRDQjdYRzVjZEhCeWIzUmxZM1JsWkNCeVpXRmtiMjVzZVNCdmNIUnpPaUJuY25CakxsUnlZVzV6Y0c5eWRFOXdkR2x2Ym5NN1hHNWNkSEJ5YjNSbFkzUmxaQ0J5WldGa2IyNXNlU0IwY21GdWMzQnZjblE2SUdkeWNHTXVWSEpoYm5Od2IzSjBPMXh1WEhSd2NtOTBaV04wWldRZ2NtVmhaRzl1YkhrZ1pYaDBjbUZOWlhSaFpHRjBZVG9nWjNKd1l5NU5aWFJoWkdGMFlUdGNibHh1WEhSamIyNXpkSEoxWTNSdmNpaHZjSFJ6T2lCbmNuQmpMbFJ5WVc1emNHOXlkRTl3ZEdsdmJuTXNJR1JsWm1GMWJIUkdZV04wYjNKNU9pQm5jbkJqTGxSeVlXNXpjRzl5ZEVaaFkzUnZjbmtzSUdWNGRISmhUV1YwWVdSaGRHRTZJR2R5Y0dNdVRXVjBZV1JoZEdFcElIdGNibHgwWEhSMGFHbHpMbTl3ZEhNZ1BTQnZjSFJ6TzF4dVhIUmNkSFJvYVhNdVpYaDBjbUZOWlhSaFpHRjBZU0E5SUdWNGRISmhUV1YwWVdSaGRHRTdYRzVjZEZ4MGRHaHBjeTUwY21GdWMzQnZjblFnUFNCa1pXWmhkV3gwUm1GamRHOXllU2h2Y0hSektUdGNibHgwZlZ4dVhHNWNkSEIxWW14cFl5QmhjM2x1WXlCemRHRnlkQ2h0WlhSaFpHRjBZVG9nWjNKd1l5NU5aWFJoWkdGMFlTa2dlMXh1WEhSY2RIUm9hWE11WlhoMGNtRk5aWFJoWkdGMFlTNW1iM0pGWVdOb0tDaHJaWGtzSUhaaGJIVmxjeWtnUFQ0Z2UxeHVYSFJjZEZ4MGJXVjBZV1JoZEdFdWMyVjBLR3RsZVN3Z2RtRnNkV1Z6S1R0Y2JseDBYSFI5S1R0Y2JseDBYSFIwYUdsekxuUnlZVzV6Y0c5eWRDNXpkR0Z5ZENodFpYUmhaR0YwWVNrN1hHNWNkSDFjYmx4dVhIUndkV0pzYVdNZ2MyVnVaRTFsYzNOaFoyVW9iWE5uUW5sMFpYTTZJRlZwYm5RNFFYSnlZWGtwSUh0Y2JseDBYSFIwYUdsekxuUnlZVzV6Y0c5eWRDNXpaVzVrVFdWemMyRm5aU2h0YzJkQ2VYUmxjeWs3WEc1Y2RIMWNibHh1WEhSd2RXSnNhV01nWm1sdWFYTm9VMlZ1WkNncElIdGNibHgwWEhSMGFHbHpMblJ5WVc1emNHOXlkQzVtYVc1cGMyaFRaVzVrS0NrN1hHNWNkSDFjYmx4dVhIUndkV0pzYVdNZ1kyRnVZMlZzS0NrZ2UxeHVYSFJjZEhSb2FYTXVkSEpoYm5Od2IzSjBMbU5oYm1ObGJDZ3BPMXh1WEhSOVhHNTlYRzVjYm1sdWRHVnlabUZqWlNCWFpXSlNWRU5EYjI1dVpXTjBhVzl1SUh0Y2JseDBkSEpoYm5Od2IzSjBSbUZqZEc5eWVUb2daM0p3WXk1VWNtRnVjM0J2Y25SR1lXTjBiM0o1TzF4dVhIUndaV1Z5UTI5dWJtVmpkR2x2YmpvZ1VsUkRVR1ZsY2tOdmJtNWxZM1JwYjI0N1hHNTlYRzVjYmk4dklHUnBZV3hYWldKU1ZFTWdiV0ZyWlhNZ1lTQmpiMjV1WldOMGFXOXVJSFJ2SUdkcGRtVnVJR2h2YzNRZ1lua2djMmxuYm1Gc2FXNW5JSGRwZEdnZ2RHaGxJR0ZrWkhKbGMzTWdjSEp2ZG1sa1pXUXVJRUVnVUhKdmJXbHpaU0JwY3lCeVpYUjFjbTVsWkZ4dUx5OGdkWEJ2YmlCemRXTmpaWE56Wm5Wc0lHTnZibTVsWTNScGIyNGdkR2hoZENCamIyNTBZV2x1Y3lCaElIUnlZVzV6Y0c5eWRDQm1ZV04wYjNKNUlIUnZJSFZ6WlNCM2FYUm9JR2RTVUVNZ1kyeHBaVzUwSUdGeklIZGxiR3dnWVhNZ2RHaGxJRmRsWWxKVVExeHVMeThnVUdWbGNrTnZibTVsWTNScGIyNGdhWFJ6Wld4bUxpQkRZWEpsSUhOb2IzVnNaQ0JpWlNCMFlXdGxiaUIzYVhSb0lIUm9aU0JRWldWeVEyOXVibVZqZEdsdmJpQmhibVFnYVhNZ1kzVnljbVZ1ZEd4NUlISmxkSFZ5Ym1Wa0lHWnZjaUJsZUhCbGNtbHRaVzUwWVd4Y2JpOHZJSFZ6WlM1Y2JpOHZJRlJQUkU4b2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwzWnBZVzF5YjJKdmRHbGpjeTlqYjNKbEwybHpjM1ZsY3k4eE1URXBPaUJtYVdkMWNtVWdiM1YwSUdSbFkyVnVkQ0IzWVhrZ2RHOGdhR0Z1Wkd4bElISmxZMjl1Ym1WamRDQnZiaUJqYjI1dVpXTjBhVzl1SUhSbGNtMXBibUYwYVc5dVhHNWxlSEJ2Y25RZ1lYTjVibU1nWm5WdVkzUnBiMjRnWkdsaGJGZGxZbEpVUXloemFXZHVZV3hwYm1kQlpHUnlaWE56T2lCemRISnBibWNzSUdodmMzUTZJSE4wY21sdVp5d2diM0IwY3o4NklFUnBZV3hQY0hScGIyNXpLVG9nVUhKdmJXbHpaVHhYWldKU1ZFTkRiMjV1WldOMGFXOXVQaUI3WEc1Y2RHTnZibk4wSUhkbFluSjBZMDl3ZEhNZ1BTQnZjSFJ6UHk1M1pXSnlkR05QY0hScGIyNXpPMXh1WEhSamIyNXpkQ0I3SUhCakxDQmtZeUI5SUQwZ1lYZGhhWFFnYm1WM1VHVmxja052Ym01bFkzUnBiMjVHYjNKRGJHbGxiblFvZDJWaWNuUmpUM0IwY3lBaFBUMGdkVzVrWldacGJtVmtJQ1ltSUhkbFluSjBZMDl3ZEhNdVpHbHpZV0pzWlZSeWFXTnJiR1ZKUTBVc0lIZGxZbkowWTA5d2RITS9MbkowWTBOdmJtWnBaeWs3WEc1Y2JseDBMeThnY21Wd2JHRmpaU0JoZFhSb0lHVnVkR2wwZVNCaGJtUWdZM0psWkhOY2JseDBiR1YwSUc5d2RITkRiM0I1SUQwZ2IzQjBjenRjYmx4MGFXWWdLRzl3ZEhNcElIdGNibHgwWEhSdmNIUnpRMjl3ZVNBOUlIc2dMaTR1YjNCMGN5QjlJR0Z6SUVScFlXeFBjSFJwYjI1ek8xeHVYRzVjZEZ4MGIzQjBjME52Y0hrdVlYVjBhRVZ1ZEdsMGVTQTlJRzl3ZEhNL0xuZGxZbkowWTA5d2RHbHZibk0vTG5OcFoyNWhiR2x1WjBGMWRHaEZiblJwZEhsY2JseDBYSFJwWmlBb0lXOXdkSE5EYjNCNUxtRjFkR2hGYm5ScGRIa3BJSHRjYmx4MFhIUmNkR2xtSUNodmNIUnpRMjl3ZVM1bGVIUmxjbTVoYkVGMWRHaEJaR1J5WlhOektTQjdYRzVjZEZ4MFhIUmNkRzl3ZEhORGIzQjVMbUYxZEdoRmJuUnBkSGtnUFNCdmNIUnpMbVY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM00vTG5KbGNHeGhZMlVvTDE0b0xpbzZYRnd2WEZ3dktTOHNJQ2NuS1R0Y2JseDBYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFJjZEc5d2RITkRiM0I1TG1GMWRHaEZiblJwZEhrZ1BTQnphV2R1WVd4cGJtZEJaR1J5WlhOekxuSmxjR3hoWTJVb0wxNG9MaW82WEZ3dlhGd3ZLUzhzSUNjbktUdGNibHgwWEhSY2RIMWNibHgwWEhSOVhHNWNkRngwYjNCMGMwTnZjSGt1WTNKbFpHVnVkR2xoYkhNZ1BTQnZjSFJ6UHk1M1pXSnlkR05QY0hScGIyNXpQeTV6YVdkdVlXeHBibWREY21Wa1pXNTBhV0ZzYzF4dVhIUmNkRzl3ZEhORGIzQjVMbVY0ZEdWeWJtRnNRWFYwYUVGa1pISmxjM01nUFNCdmNIUnpQeTUzWldKeWRHTlBjSFJwYjI1elB5NXphV2R1WVd4cGJtZEZlSFJsY201aGJFRjFkR2hCWkdSeVpYTnpYRzVjZEZ4MGIzQjBjME52Y0hrdVpYaDBaWEp1WVd4QmRYUm9WRzlGYm5ScGRIa2dQU0J2Y0hSelB5NTNaV0p5ZEdOUGNIUnBiMjV6UHk1emFXZHVZV3hwYm1kRmVIUmxjbTVoYkVGMWRHaFViMFZ1ZEdsMGVWeHVYSFI5WEc1Y2JseDBZMjl1YzNRZ1pHbHlaV04wVkhKaGJuTndiM0owSUQwZ1lYZGhhWFFnWkdsaGJFUnBjbVZqZENoemFXZHVZV3hwYm1kQlpHUnlaWE56TENCdmNIUnpRMjl3ZVNrN1hHNWNkR052Ym5OMElHTnNhV1Z1ZENBOUlHZHljR011WTJ4cFpXNTBLRk5wWjI1aGJHbHVaMU5sY25acFkyVXVRMkZzYkN3Z2UxeHVYSFJjZEdodmMzUTZJSE5wWjI1aGJHbHVaMEZrWkhKbGMzTXNYRzVjZEZ4MGRISmhibk53YjNKME9pQmthWEpsWTNSVWNtRnVjM0J2Y25Rc1hHNWNkSDBwTzF4dVhHNWNkR2xtSUNodmNIUnpQeTVsZUhSbGNtNWhiRUYxZEdoQlpHUnlaWE56S1NCN1hHNWNkRngwTHk4Z1ZFOUVUeWhvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2ZG1saGJYSnZZbTkwYVdOekwyZHZkWFJwYkhNdmFYTnpkV1Z6THpFeUtUb2djSEpsY0dGeVpTQkJkWFJvWlc1MGFXTmhkR1ZVYnlCb1pYSmxYRzVjZEZ4MEx5OGdabTl5SUdOc2FXVnVkQ0JqYUdGdWJtVnNMbHh1WEhSOUlHVnNjMlVnYVdZZ0tHOXdkSE0vTG1OeVpXUmxiblJwWVd4elB5NTBlWEJsS1NCN1hHNWNkRngwTHk4Z1ZFOUVUeWhvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2ZG1saGJYSnZZbTkwYVdOekwyZHZkWFJwYkhNdmFYTnpkV1Z6THpFeUtUb2djSEpsY0dGeVpTQkJkWFJvWlc1MGFXTmhkR1VnYUdWeVpWeHVYSFJjZEM4dklHWnZjaUJqYkdsbGJuUWdZMmhoYm01bGJGeHVYSFI5WEc1Y2JseDBiR1YwSUhWMWFXUWdQU0FuSnp0Y2JseDBMeThnYjI1c2VTQnpaVzVrSUc5dVkyVWdjMmx1WTJVZ1pYaGphR0Z1WjJVZ2JXRjVJR1Z1WkNCdmNpQkpRMFVnYldGNUlHVnVaRnh1WEhSc1pYUWdjMlZ1ZEVSdmJtVlBja1Z5Y205eVQyNWpaU0E5SUdaaGJITmxPMXh1WEhSamIyNXpkQ0J6Wlc1a1JYSnliM0lnUFNBb1pYSnlPaUJ6ZEhKcGJtY3BJRDArSUh0Y2JseDBYSFJwWmlBb2MyVnVkRVJ2Ym1WUGNrVnljbTl5VDI1alpTa2dlMXh1WEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEgxY2JseDBYSFJ6Wlc1MFJHOXVaVTl5UlhKeWIzSlBibU5sSUQwZ2RISjFaVHRjYmx4MFhIUmpiMjV6ZENCallXeHNVbVZ4ZFdWemRGVndaR0YwWlNBOUlHNWxkeUJEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQ2dwTzF4dVhIUmNkR05oYkd4U1pYRjFaWE4wVlhCa1lYUmxMbk5sZEZWMWFXUW9kWFZwWkNrN1hHNWNkRngwWTI5dWMzUWdjM1JoZEhWeklEMGdibVYzSUZOMFlYUjFjeWdwTzF4dVhIUmNkSE4wWVhSMWN5NXpaWFJEYjJSbEtFTnZaR1V1VlU1TFRrOVhUaWs3WEc1Y2RGeDBjM1JoZEhWekxuTmxkRTFsYzNOaFoyVW9aWEp5S1R0Y2JseDBYSFJqWVd4c1VtVnhkV1Z6ZEZWd1pHRjBaUzV6WlhSRmNuSnZjaWh6ZEdGMGRYTXBPMXh1WEhSY2RHZHljR011ZFc1aGNua29VMmxuYm1Gc2FXNW5VMlZ5ZG1salpTNURZV3hzVlhCa1lYUmxMQ0I3WEc1Y2RGeDBYSFJ5WlhGMVpYTjBPaUJqWVd4c1VtVnhkV1Z6ZEZWd1pHRjBaU3hjYmx4MFhIUmNkRzFsZEdGa1lYUmhPaUI3WEc1Y2RGeDBYSFJjZENkeWNHTXRhRzl6ZENjNklHaHZjM1FzWEc1Y2RGeDBYSFI5TEZ4dVhIUmNkRngwYUc5emREb2djMmxuYm1Gc2FXNW5RV1JrY21WemN5eGNibHgwWEhSY2RIUnlZVzV6Y0c5eWREb2daR2x5WldOMFZISmhibk53YjNKMExGeHVYSFJjZEZ4MGIyNUZibVE2SUNodmRYUndkWFE2SUdkeWNHTXVWVzVoY25sUGRYUndkWFE4UTJGc2JGVndaR0YwWlZKbGMzQnZibk5sUGlrZ1BUNGdlMXh1WEhSY2RGeDBYSFJqYjI1emRDQjdJSE4wWVhSMWN5d2djM1JoZEhWelRXVnpjMkZuWlN3Z2JXVnpjMkZuWlNCOUlEMGdiM1YwY0hWME8xeHVYSFJjZEZ4MFhIUnBaaUFvYzNSaGRIVnpJRDA5UFNCbmNuQmpMa052WkdVdVQwc2dKaVlnYldWemMyRm5aU2tnZTF4dVhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUmpiMjV6YjJ4bExtVnljbTl5S0hOMFlYUjFjMDFsYzNOaFoyVXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZTazdYRzVjZEgxY2JseDBZMjl1YzNRZ2MyVnVaRVJ2Ym1VZ1BTQW9LU0E5UGlCN1hHNWNkRngwYVdZZ0tITmxiblJFYjI1bFQzSkZjbkp2Y2s5dVkyVXBJSHRjYmx4MFhIUmNkSEpsZEhWeWJqdGNibHgwWEhSOVhHNWNkRngwYzJWdWRFUnZibVZQY2tWeWNtOXlUMjVqWlNBOUlIUnlkV1U3WEc1Y2RGeDBZMjl1YzNRZ1kyRnNiRkpsY1hWbGMzUlZjR1JoZEdVZ1BTQnVaWGNnUTJGc2JGVndaR0YwWlZKbGNYVmxjM1FvS1R0Y2JseDBYSFJqWVd4c1VtVnhkV1Z6ZEZWd1pHRjBaUzV6WlhSVmRXbGtLSFYxYVdRcE8xeHVYSFJjZEdOaGJHeFNaWEYxWlhOMFZYQmtZWFJsTG5ObGRFUnZibVVvZEhKMVpTazdYRzVjZEZ4MFozSndZeTUxYm1GeWVTaFRhV2R1WVd4cGJtZFRaWEoyYVdObExrTmhiR3hWY0dSaGRHVXNJSHRjYmx4MFhIUmNkSEpsY1hWbGMzUTZJR05oYkd4U1pYRjFaWE4wVlhCa1lYUmxMRnh1WEhSY2RGeDBiV1YwWVdSaGRHRTZJSHRjYmx4MFhIUmNkRngwSjNKd1l5MW9iM04wSnpvZ2FHOXpkQ3hjYmx4MFhIUmNkSDBzWEc1Y2RGeDBYSFJvYjNOME9pQnphV2R1WVd4cGJtZEJaR1J5WlhOekxGeHVYSFJjZEZ4MGRISmhibk53YjNKME9pQmthWEpsWTNSVWNtRnVjM0J2Y25Rc1hHNWNkRngwWEhSdmJrVnVaRG9nS0c5MWRIQjFkRG9nWjNKd1l5NVZibUZ5ZVU5MWRIQjFkRHhEWVd4c1ZYQmtZWFJsVW1WemNHOXVjMlUrS1NBOVBpQjdYRzVjZEZ4MFhIUmNkR052Ym5OMElIc2djM1JoZEhWekxDQnpkR0YwZFhOTlpYTnpZV2RsTENCdFpYTnpZV2RsSUgwZ1BTQnZkWFJ3ZFhRN1hHNWNkRngwWEhSY2RHbG1JQ2h6ZEdGMGRYTWdQVDA5SUdkeWNHTXVRMjlrWlM1UFN5QW1KaUJ0WlhOellXZGxLU0I3WEc1Y2RGeDBYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkRngwWEhSOVhHNWNkRngwWEhSY2RHTnZibk52YkdVdVpYSnliM0lvYzNSaGRIVnpUV1Z6YzJGblpTbGNibHgwWEhSY2RIMWNibHgwWEhSOUtUdGNibHgwZlZ4dVhHNWNkR3hsZENCd1VtVnpiMngyWlRvZ0tIWmhiSFZsT2lCaGJua3BJRDArSUhadmFXUTdYRzVjZEd4bGRDQndVbVZxWldOME9pQW9jbVZoYzI5dVB6b2dZVzU1S1NBOVBpQjJiMmxrTzF4dVhIUnNaWFFnY21WdGIzUmxSR1Z6WTFObGRDQTlJRzVsZHlCUWNtOXRhWE5sUEdGdWVUNG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkSEJTWlhOdmJIWmxJRDBnY21WemIyeDJaVHRjYmx4MFhIUndVbVZxWldOMElEMGdjbVZxWldOME8xeHVYSFI5S1R0Y2JseDBiR1YwSUdWNFkyaGhibWRsUkc5dVpTQTlJR1poYkhObE8xeHVYSFJwWmlBb0lYZGxZbkowWTA5d2RITS9MbVJwYzJGaWJHVlVjbWxqYTJ4bFNVTkZLU0I3WEc1Y2RGeDBMeThnYzJWMElIVndJRzltWm1WeVhHNWNkRngwWTI5dWMzUWdiMlptWlhKRVpYTmpJRDBnWVhkaGFYUWdjR011WTNKbFlYUmxUMlptWlhJb0tUdGNibHh1WEhSY2RHeGxkQ0JwWTJWRGIyMXdiR1YwWlNBOUlHWmhiSE5sTzF4dVhIUmNkSEJqTG05dWFXTmxZMkZ1Wkdsa1lYUmxJRDBnWVhONWJtTWdaWFpsYm5RZ1BUNGdlMXh1WEhSY2RGeDBZWGRoYVhRZ2NtVnRiM1JsUkdWelkxTmxkRHRjYmx4MFhIUmNkR2xtSUNobGVHTm9ZVzVuWlVSdmJtVXBJSHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFJwWmlBb1pYWmxiblF1WTJGdVpHbGtZWFJsSUQwOVBTQnVkV3hzS1NCN1hHNWNkRngwWEhSY2RHbGpaVU52YlhCc1pYUmxJRDBnZEhKMVpUdGNibHgwWEhSY2RGeDBjMlZ1WkVSdmJtVW9LVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFJqYjI1emRDQnBVSEp2ZEc4Z1BTQnBZMlZEWVc1a2FXUmhkR1ZVYjFCeWIzUnZLR1YyWlc1MExtTmhibVJwWkdGMFpTazdYRzVjZEZ4MFhIUmpiMjV6ZENCallXeHNVbVZ4ZFdWemRGVndaR0YwWlNBOUlHNWxkeUJEWVd4c1ZYQmtZWFJsVW1WeGRXVnpkQ2dwTzF4dVhIUmNkRngwWTJGc2JGSmxjWFZsYzNSVmNHUmhkR1V1YzJWMFZYVnBaQ2gxZFdsa0tUdGNibHgwWEhSY2RHTmhiR3hTWlhGMVpYTjBWWEJrWVhSbExuTmxkRU5oYm1ScFpHRjBaU2hwVUhKdmRHOHBPMXh1WEhSY2RGeDBaM0p3WXk1MWJtRnllU2hUYVdkdVlXeHBibWRUWlhKMmFXTmxMa05oYkd4VmNHUmhkR1VzSUh0Y2JseDBYSFJjZEZ4MGNtVnhkV1Z6ZERvZ1kyRnNiRkpsY1hWbGMzUlZjR1JoZEdVc1hHNWNkRngwWEhSY2RHMWxkR0ZrWVhSaE9pQjdYRzVjZEZ4MFhIUmNkRngwSjNKd1l5MW9iM04wSnpvZ2FHOXpkQ3hjYmx4MFhIUmNkRngwZlN4Y2JseDBYSFJjZEZ4MGFHOXpkRG9nYzJsbmJtRnNhVzVuUVdSa2NtVnpjeXhjYmx4MFhIUmNkRngwZEhKaGJuTndiM0owT2lCa2FYSmxZM1JVY21GdWMzQnZjblFzWEc1Y2RGeDBYSFJjZEc5dVJXNWtPaUFvYjNWMGNIVjBPaUJuY25CakxsVnVZWEo1VDNWMGNIVjBQRU5oYkd4VmNHUmhkR1ZTWlhOd2IyNXpaVDRwSUQwK0lIdGNibHgwWEhSY2RGeDBYSFJqYjI1emRDQjdJSE4wWVhSMWN5d2djM1JoZEhWelRXVnpjMkZuWlN3Z2JXVnpjMkZuWlNCOUlEMGdiM1YwY0hWME8xeHVYSFJjZEZ4MFhIUmNkR2xtSUNoemRHRjBkWE1nUFQwOUlHZHljR011UTI5a1pTNVBTeUFtSmlCdFpYTnpZV2RsS1NCN1hHNWNkRngwWEhSY2RGeDBYSFJ5WlhSMWNtNDdYRzVjZEZ4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSY2RHbG1JQ2hsZUdOb1lXNW5aVVJ2Ym1VZ2ZId2dhV05sUTI5dGNHeGxkR1VwSUh0Y2JseDBYSFJjZEZ4MFhIUmNkSEpsZEhWeWJqdGNibHgwWEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEZ4MFkyOXVjMjlzWlM1bGNuSnZjaWhjSW1WeWNtOXlJSE5sYm1ScGJtY2dZMkZ1Wkdsa1lYUmxYQ0lzSUhOMFlYUjFjMDFsYzNOaFoyVXBYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkSDBwTzF4dVhIUmNkSDFjYmx4dVhIUmNkR0YzWVdsMElIQmpMbk5sZEV4dlkyRnNSR1Z6WTNKcGNIUnBiMjRvYjJabVpYSkVaWE5qS1R0Y2JseDBmVnh1WEc1Y2RHeGxkQ0JvWVhabFNXNXBkQ0E5SUdaaGJITmxPMXh1WEhSamJHbGxiblF1YjI1TlpYTnpZV2RsS0dGemVXNWpJQ2h0WlhOellXZGxPaUJEWVd4c1VtVnpjRzl1YzJVcElEMCtJSHRjYmx4MFhIUnBaaUFvYldWemMyRm5aUzVvWVhOSmJtbDBLQ2twSUh0Y2JseDBYSFJjZEdsbUlDaG9ZWFpsU1c1cGRDa2dlMXh1WEhSY2RGeDBYSFJ6Wlc1a1JYSnliM0lvWENKbmIzUWdhVzVwZENCemRHRm5aU0J0YjNKbElIUm9ZVzRnYjI1alpWd2lLVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEhSY2RGeDBZMjl1YzNRZ2FXNXBkQ0E5SUcxbGMzTmhaMlV1WjJWMFNXNXBkQ2dwSVR0Y2JseDBYSFJjZEdoaGRtVkpibWwwSUQwZ2RISjFaVHRjYmx4MFhIUmNkSFYxYVdRZ1BTQnRaWE56WVdkbExtZGxkRlYxYVdRb0tUdGNibHh1WEhSY2RGeDBZMjl1YzNRZ2NtVnRiM1JsVTBSUUlEMGdibVYzSUZKVVExTmxjM05wYjI1RVpYTmpjbWx3ZEdsdmJpaEtVMDlPTG5CaGNuTmxLR0YwYjJJb2FXNXBkQzVuWlhSVFpIQW9LU2twS1R0Y2JseDBYSFJjZEhCakxuTmxkRkpsYlc5MFpVUmxjMk55YVhCMGFXOXVLSEpsYlc5MFpWTkVVQ2s3WEc1Y2JseDBYSFJjZEhCU1pYTnZiSFpsS0hSeWRXVXBPMXh1WEc1Y2RGeDBYSFJwWmlBb2QyVmljblJqVDNCMGN6OHVaR2x6WVdKc1pWUnlhV05yYkdWSlEwVXBJSHRjYmx4MFhIUmNkRngwWlhoamFHRnVaMlZFYjI1bElEMGdkSEoxWlR0Y2JseDBYSFJjZEZ4MGMyVnVaRVJ2Ym1Vb0tUdGNibHgwWEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEZ4MGZWeHVYSFJjZEgwZ1pXeHpaU0JwWmlBb2JXVnpjMkZuWlM1b1lYTlZjR1JoZEdVb0tTa2dlMXh1WEhSY2RGeDBhV1lnS0NGb1lYWmxTVzVwZENrZ2UxeHVYSFJjZEZ4MFhIUnpaVzVrUlhKeWIzSW9YQ0puYjNRZ2RYQmtZWFJsSUhOMFlXZGxJR0psWm05eVpTQnBibWwwSUhOMFlXZGxYQ0lwTzF4dVhIUmNkRngwWEhSeVpYUjFjbTQ3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJwWmlBb2JXVnpjMkZuWlM1blpYUlZkV2xrS0NrZ0lUMDlJSFYxYVdRcElIdGNibHgwWEhSY2RGeDBjMlZ1WkVWeWNtOXlLR0IxZFdsa0lHMXBjMjFoZEdOb095Qm9ZWFpsUFNSN2JXVnpjMkZuWlM1blpYUlZkV2xrS0NsOUlIZGhiblE5Skh0MWRXbGtmV0FwTzF4dVhIUmNkRngwWEhSeVpYUjFjbTQ3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJqYjI1emRDQjFjR1JoZEdVZ1BTQnRaWE56WVdkbExtZGxkRlZ3WkdGMFpTZ3BJVHRjYmx4MFhIUmNkR052Ym5OMElHTmhibVFnUFNCcFkyVkRZVzVrYVdSaGRHVkdjbTl0VUhKdmRHOG9kWEJrWVhSbExtZGxkRU5oYm1ScFpHRjBaU2dwSVNrN1hHNWNkRngwWEhSMGNua2dlMXh1WEhSY2RGeDBYSFJoZDJGcGRDQndZeTVoWkdSSlkyVkRZVzVrYVdSaGRHVW9ZMkZ1WkNrN1hHNWNkRngwWEhSOUlHTmhkR05vSUNobEtTQjdYRzVjZEZ4MFhIUmNkSE5sYm1SRmNuSnZjaWhsS1R0Y2JseDBYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkRngwZlZ4dVhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUnpaVzVrUlhKeWIzSW9YQ0oxYm10dWIzZHVJRU5oYkd4U1pYTndiMjV6WlNCemRHRm5aVndpS1R0Y2JseDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUjlYRzVjZEgwcE8xeHVYRzVjZEd4bGRDQmpiR2xsYm5SRmJtUlNaWE52YkhabE9pQW9LU0E5UGlCMmIybGtPMXh1WEhSc1pYUWdZMnhwWlc1MFJXNWtVbVZxWldOME9pQW9jbVZoYzI5dVB6b2dZVzU1S1NBOVBpQjJiMmxrTzF4dVhIUnNaWFFnWTJ4cFpXNTBSVzVrSUQwZ2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RHTnNhV1Z1ZEVWdVpGSmxjMjlzZG1VZ1BTQnlaWE52YkhabE8xeHVYSFJjZEdOc2FXVnVkRVZ1WkZKbGFtVmpkQ0E5SUhKbGFtVmpkRHRjYmx4MGZTazdYRzVjZEdOc2FXVnVkQzV2YmtWdVpDZ29jM1JoZEhWek9pQm5jbkJqTGtOdlpHVXNJSE4wWVhSMWMwMWxjM05oWjJVNklITjBjbWx1Wnl3Z2RISmhhV3hsY25NNklHZHljR011VFdWMFlXUmhkR0VwSUQwK0lIdGNibHgwWEhScFppQW9jM1JoZEhWeklEMDlQU0JuY25CakxrTnZaR1V1VDBzcElIdGNibHgwWEhSY2RHTnNhV1Z1ZEVWdVpGSmxjMjlzZG1Vb0tUdGNibHgwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFI5WEc1Y2RGeDBZMjl1YzI5c1pTNWxjbkp2Y2loemRHRjBkWE5OWlhOellXZGxLVHRjYmx4MFhIUmpiR2xsYm5SRmJtUlNaV3BsWTNRb2MzUmhkSFZ6VFdWemMyRm5aU2s3WEc1Y2RIMHBPMXh1WEhSamJHbGxiblF1YzNSaGNuUW9leUFuY25CakxXaHZjM1FuT2lCb2IzTjBJSDBwWEc1Y2JseDBZMjl1YzNRZ1kyRnNiRkpsY1hWbGMzUWdQU0J1WlhjZ1EyRnNiRkpsY1hWbGMzUW9LVHRjYmx4MFkyOXVjM1FnWlc1amIyUmxaRk5FVUNBOUlHSjBiMkVvU2xOUFRpNXpkSEpwYm1kcFpua29jR011Ykc5allXeEVaWE5qY21sd2RHbHZiaWtwTzF4dVhIUmpZV3hzVW1WeGRXVnpkQzV6WlhSVFpIQW9aVzVqYjJSbFpGTkVVQ2s3WEc1Y2RHbG1JQ2gzWldKeWRHTlBjSFJ6SUNZbUlIZGxZbkowWTA5d2RITXVaR2x6WVdKc1pWUnlhV05yYkdWSlEwVXBJSHRjYmx4MFhIUmpZV3hzVW1WeGRXVnpkQzV6WlhSRWFYTmhZbXhsVkhKcFkydHNaU2gzWldKeWRHTlBjSFJ6TG1ScGMyRmliR1ZVY21samEyeGxTVU5GS1R0Y2JseDBmVnh1WEhSamJHbGxiblF1YzJWdVpDaGpZV3hzVW1WeGRXVnpkQ2s3WEc1Y2JseDBZMjl1YzNRZ1kyTWdQU0J1WlhjZ1EyeHBaVzUwUTJoaGJtNWxiQ2h3WXl3Z1pHTXBPMXh1WEhSall5NXlaV0ZrZVM1MGFHVnVLQ2dwSUQwK0lHTnNhV1Z1ZEVWdVpGSmxjMjlzZG1Vb0tTazdYRzVjZEdGM1lXbDBJR05zYVdWdWRFVnVaRHRjYmx4MFlYZGhhWFFnWTJNdWNtVmhaSGs3WEc1Y2RHVjRZMmhoYm1kbFJHOXVaU0E5SUhSeWRXVTdYRzVjZEhObGJtUkViMjVsS0NrN1hHNWNkSEpsZEhWeWJpQjdJSFJ5WVc1emNHOXlkRVpoWTNSdmNuazZJR05qTG5SeVlXNXpjRzl5ZEVaaFkzUnZjbmtvS1N3Z2NHVmxja052Ym01bFkzUnBiMjQ2SUhCaklIMDdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHbGpaVU5oYm1ScFpHRjBaVVp5YjIxUWNtOTBieWhwT2lCSlEwVkRZVzVrYVdSaGRHVXBPaUJTVkVOSlkyVkRZVzVrYVdSaGRHVkpibWwwSUh0Y2JseDBiR1YwSUdOaGJtUnBaR0YwWlRvZ1VsUkRTV05sUTJGdVpHbGtZWFJsU1c1cGRDQTlJSHRjYmx4MFhIUmpZVzVrYVdSaGRHVTZJR2t1WjJWMFEyRnVaR2xrWVhSbEtDa3NYRzVjZEgxY2JseDBhV1lnS0drdWFHRnpVMlJ3VFdsa0tDa3BJSHRjYmx4MFhIUmpZVzVrYVdSaGRHVXVjMlJ3VFdsa0lEMGdhUzVuWlhSVFpIQk5hV1FvS1R0Y2JseDBmVnh1WEhScFppQW9hUzVvWVhOVFpIQnRUR2x1WlVsdVpHVjRLQ2twSUh0Y2JseDBYSFJqWVc1a2FXUmhkR1V1YzJSd1RVeHBibVZKYm1SbGVDQTlJR2t1WjJWMFUyUndiVXhwYm1WSmJtUmxlQ2dwTzF4dVhIUjlYRzVjZEdsbUlDaHBMbWhoYzFWelpYSnVZVzFsUm5KaFoyMWxiblFvS1NrZ2UxeHVYSFJjZEdOaGJtUnBaR0YwWlM1MWMyVnlibUZ0WlVaeVlXZHRaVzUwSUQwZ2FTNW5aWFJWYzJWeWJtRnRaVVp5WVdkdFpXNTBLQ2s3WEc1Y2RIMWNibHgwY21WMGRYSnVJR05oYm1ScFpHRjBaVHRjYm4xY2JseHVablZ1WTNScGIyNGdhV05sUTJGdVpHbGtZWFJsVkc5UWNtOTBieWhwT2lCU1ZFTkpZMlZEWVc1a2FXUmhkR1ZKYm1sMEtUb2dTVU5GUTJGdVpHbGtZWFJsSUh0Y2JseDBiR1YwSUdOaGJtUnBaR0YwWlNBOUlHNWxkeUJKUTBWRFlXNWthV1JoZEdVb0tUdGNibHgwWTJGdVpHbGtZWFJsTG5ObGRFTmhibVJwWkdGMFpTaHBMbU5oYm1ScFpHRjBaU0VwTzF4dVhIUnBaaUFvYVM1elpIQk5hV1FwSUh0Y2JseDBYSFJqWVc1a2FXUmhkR1V1YzJWMFUyUndUV2xrS0drdWMyUndUV2xrS1R0Y2JseDBmVnh1WEhScFppQW9hUzV6WkhCTlRHbHVaVWx1WkdWNEtTQjdYRzVjZEZ4MFkyRnVaR2xrWVhSbExuTmxkRk5rY0cxTWFXNWxTVzVrWlhnb2FTNXpaSEJOVEdsdVpVbHVaR1Y0S1R0Y2JseDBmVnh1WEhScFppQW9hUzUxYzJWeWJtRnRaVVp5WVdkdFpXNTBLU0I3WEc1Y2RGeDBZMkZ1Wkdsa1lYUmxMbk5sZEZWelpYSnVZVzFsUm5KaFoyMWxiblFvYVM1MWMyVnlibUZ0WlVaeVlXZHRaVzUwS1R0Y2JseDBmVnh1WEhSeVpYUjFjbTRnWTJGdVpHbGtZWFJsTzF4dWZWeHVYRzRpTENKcGJYQnZjblFnZXlCbmNuQmpJSDBnWm5KdmJTQmNJa0JwYlhCeWIySmhZbXhsTFdWdVp5OW5jbkJqTFhkbFlsd2lPMXh1YVcxd2IzSjBJSHNnVW1WeGRXVnpkQ3dnVW1WeGRXVnpkRWhsWVdSbGNuTXNJRkpsY1hWbGMzUk5aWE56WVdkbExDQlNaWE53YjI1elpTd2dVM1J5WldGdElIMGdabkp2YlNCY0lpNHZaMlZ1TDNCeWIzUnZMM0p3WXk5M1pXSnlkR012ZGpFdlozSndZMTl3WWx3aU8xeHVhVzF3YjNKMElIc2dRbUZ6WlVOb1lXNXVaV3dnZlNCbWNtOXRJRndpTGk5Q1lYTmxRMmhoYm01bGJGd2lPMXh1YVcxd2IzSjBJSHNnUTJ4cFpXNTBVM1J5WldGdElIMGdabkp2YlNCY0lpNHZRMnhwWlc1MFUzUnlaV0Z0WENJN1hHNWNiaTh2SUUxaGVGTjBjbVZoYlVOdmRXNTBJR2x6SUhSb1pTQnRZWGdnYm5WdFltVnlJRzltSUhOMGNtVmhiWE1nWVNCamFHRnVibVZzSUdOaGJpQm9ZWFpsTGx4dWJHVjBJRTFoZUZOMGNtVmhiVU52ZFc1MElEMGdNalUyTzF4dVhHNXBiblJsY21aaFkyVWdZV04wYVhabFEyeHBaVzVUZEhKbFlXMGdlMXh1WEhSamN6b2dRMnhwWlc1MFUzUnlaV0Z0TzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1EyeHBaVzUwUTJoaGJtNWxiQ0JsZUhSbGJtUnpJRUpoYzJWRGFHRnVibVZzSUh0Y2JseDBjSEpwZG1GMFpTQnpkSEpsWVcxSlJFTnZkVzUwWlhJZ1BTQXdPMXh1WEhSd2NtbDJZWFJsSUhKbFlXUnZibXg1SUhOMGNtVmhiWE02SUZKbFkyOXlaRHh1ZFcxaVpYSXNJR0ZqZEdsMlpVTnNhV1Z1VTNSeVpXRnRQaUE5SUh0OU95QmNibHh1WEhSamIyNXpkSEoxWTNSdmNpaHdZem9nVWxSRFVHVmxja052Ym01bFkzUnBiMjRzSUdSak9pQlNWRU5FWVhSaFEyaGhibTVsYkNrZ2UxeHVYSFJjZEhOMWNHVnlLSEJqTENCa1l5azdYRzVjZEZ4MFpHTXViMjV0WlhOellXZGxJRDBnS0dWMlpXNTBPaUJOWlhOellXZGxSWFpsYm5ROFlXNTVQaWtnUFQ0Z2RHaHBjeTV2YmtOb1lXNXVaV3hOWlhOellXZGxLR1YyWlc1MEtUdGNibHgwZlZ4dVhHNWNkSEIxWW14cFl5QjBjbUZ1YzNCdmNuUkdZV04wYjNKNUtDazZJR2R5Y0dNdVZISmhibk53YjNKMFJtRmpkRzl5ZVNCN1hHNWNkRngwY21WMGRYSnVJQ2h2Y0hSek9pQm5jbkJqTGxSeVlXNXpjRzl5ZEU5d2RHbHZibk1wSUQwK0lIdGNibHgwWEhSY2RISmxkSFZ5YmlCMGFHbHpMbTVsZDFOMGNtVmhiU2gwYUdsekxtNWxlSFJUZEhKbFlXMUpSQ2dwTENCdmNIUnpLVHRjYmx4MFhIUjlYRzVjZEgxY2JseHVYSFJ3Y21sMllYUmxJRzl1UTJoaGJtNWxiRTFsYzNOaFoyVW9aWFpsYm5RNklFMWxjM05oWjJWRmRtVnVkRHhoYm5rK0tTQjdYRzVjZEZ4MGJHVjBJSEpsYzNBNklGSmxjM0J2Ym5ObE8xeHVYSFJjZEhSeWVTQjdYRzVjZEZ4MFhIUnlaWE53SUQwZ1VtVnpjRzl1YzJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rb1pYWmxiblF1WkdGMFlTazdYRzVjZEZ4MGZTQmpZWFJqYUNBb1pTa2dlMXh1WEhSY2RGeDBZMjl1YzI5c1pTNWxjbkp2Y2loY0ltVnljbTl5SUdSbGMyVnlhV0ZzYVhwcGJtY2diV1Z6YzJGblpWd2lMQ0JsS1R0Y2JseDBYSFJjZEhKbGRIVnlianRjYmx4MFhIUjlYRzVjYmx4MFhIUmpiMjV6ZENCemRISmxZVzBnUFNCeVpYTndMbWRsZEZOMGNtVmhiU2dwTzF4dVhIUmNkR2xtSUNoemRISmxZVzBnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1WEhSY2RGeDBZMjl1YzI5c1pTNWxjbkp2Y2loY0ltNXZJSE4wY21WaGJTQnBaRHNnWkdselkyRnlaR2x1WjF3aUtUdGNibHgwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFI5WEc1Y2JseDBYSFJqYjI1emRDQnBaQ0E5SUhOMGNtVmhiUzVuWlhSSlpDZ3BPMXh1WEhSY2RHTnZibk4wSUdGamRHbDJaVk4wY21WaGJTQTlJSFJvYVhNdWMzUnlaV0Z0YzF0cFpGMDdYRzVjZEZ4MGFXWWdLR0ZqZEdsMlpWTjBjbVZoYlNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc1Y2RGeDBYSFJqYjI1emIyeGxMbVZ5Y205eUtGd2libThnYzNSeVpXRnRJR1p2Y2lCcFpEc2daR2x6WTJGeVpHbHVaMXdpTENCY0ltbGtYQ0lzSUdsa0tUdGNibHgwWEhSY2RISmxkSFZ5Ymp0Y2JseDBYSFI5WEc1Y2RGeDBZV04wYVhabFUzUnlaV0Z0TG1OekxtOXVVbVZ6Y0c5dWMyVW9jbVZ6Y0NrN1hHNWNkSDFjYmx4dVhIUndjbWwyWVhSbElHNWxlSFJUZEhKbFlXMUpSQ2dwT2lCVGRISmxZVzBnZTF4dVhIUmNkR052Ym5OMElITjBjbVZoYlNBOUlHNWxkeUJUZEhKbFlXMG9LVHRjYmx4MFhIUnpkSEpsWVcwdWMyVjBTV1FvZEdocGN5NXpkSEpsWVcxSlJFTnZkVzUwWlhJckt5azdYRzVjZEZ4MGNtVjBkWEp1SUhOMGNtVmhiVHRjYmx4MGZWeHVYRzVjZEhCeWFYWmhkR1VnYm1WM1UzUnlaV0Z0S0hOMGNtVmhiVG9nVTNSeVpXRnRMQ0J2Y0hSek9pQm5jbkJqTGxSeVlXNXpjRzl5ZEU5d2RHbHZibk1wT2lCRGJHbGxiblJUZEhKbFlXMGdlMXh1WEhSY2RHeGxkQ0JoWTNScGRtVlRkSEpsWVcwZ1BTQjBhR2x6TG5OMGNtVmhiWE5iYzNSeVpXRnRMbWRsZEVsa0tDbGRPMXh1WEhSY2RHbG1JQ2hoWTNScGRtVlRkSEpsWVcwZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dVhIUmNkRngwYVdZZ0tFOWlhbVZqZEM1clpYbHpLSFJvYVhNdWMzUnlaV0Z0Y3lrdWJHVnVaM1JvSUQ0Z1RXRjRVM1J5WldGdFEyOTFiblFwSUh0Y2JseDBYSFJjZEZ4MGRHaHliM2NnYm1WM0lFVnljbTl5S0Z3aWMzUnlaV0Z0SUd4cGJXbDBJR2hwZEZ3aUtUdGNibHgwWEhSY2RIMWNibHgwWEhSY2RHTnZibk4wSUdOc2FXVnVkRk4wY21WaGJTQTlJRzVsZHlCRGJHbGxiblJUZEhKbFlXMG9kR2hwY3l3Z2MzUnlaV0Z0TENBb2FXUTZJRzUxYldKbGNpa2dQVDRnZEdocGN5NXlaVzF2ZG1WVGRISmxZVzFDZVVsRUtHbGtLU3dnYjNCMGN5azdYRzVjZEZ4MFhIUmhZM1JwZG1WVGRISmxZVzBnUFNCN0lHTnpPaUJqYkdsbGJuUlRkSEpsWVcwZ2ZUdGNibHgwWEhSY2RIUm9hWE11YzNSeVpXRnRjMXR6ZEhKbFlXMHVaMlYwU1dRb0tWMGdQU0JoWTNScGRtVlRkSEpsWVcwN1hHNWNkRngwZlZ4dVhIUmNkSEpsZEhWeWJpQmhZM1JwZG1WVGRISmxZVzB1WTNNN1hHNWNkSDFjYmx4dVhIUndjbWwyWVhSbElISmxiVzkyWlZOMGNtVmhiVUo1U1VRb2FXUTZJRzUxYldKbGNpa2dlMXh1WEhSY2RHUmxiR1YwWlNCMGFHbHpMbk4wY21WaGJYTmJhV1JkTzF4dVhIUjlYRzVjYmx4MGNIVmliR2xqSUhkeWFYUmxTR1ZoWkdWeWN5aHpkSEpsWVcwNklGTjBjbVZoYlN3Z2FHVmhaR1Z5Y3pvZ1VtVnhkV1Z6ZEVobFlXUmxjbk1wSUh0Y2JseDBYSFJqYjI1emRDQnlaWEYxWlhOMElEMGdibVYzSUZKbGNYVmxjM1FvS1R0Y2JseDBYSFJ5WlhGMVpYTjBMbk5sZEZOMGNtVmhiU2h6ZEhKbFlXMHBPMXh1WEhSY2RISmxjWFZsYzNRdWMyVjBTR1ZoWkdWeWN5aG9aV0ZrWlhKektUdGNibHgwWEhSMGFHbHpMbmR5YVhSbEtISmxjWFZsYzNRcE8xeHVYSFI5WEc1Y2JseDBjSFZpYkdsaklIZHlhWFJsVFdWemMyRm5aU2h6ZEhKbFlXMDZJRk4wY21WaGJTd2diWE5uT2lCU1pYRjFaWE4wVFdWemMyRm5aU2tnZTF4dVhIUmNkR052Ym5OMElISmxjWFZsYzNRZ1BTQnVaWGNnVW1WeGRXVnpkQ2dwTzF4dVhIUmNkSEpsY1hWbGMzUXVjMlYwVTNSeVpXRnRLSE4wY21WaGJTazdYRzVjZEZ4MGNtVnhkV1Z6ZEM1elpYUk5aWE56WVdkbEtHMXpaeWs3WEc1Y2RGeDBkR2hwY3k1M2NtbDBaU2h5WlhGMVpYTjBLVHRjYmx4MGZWeHVmVnh1SWl3aUx5b2hYRzRnS2lCVWFHVWdZblZtWm1WeUlHMXZaSFZzWlNCbWNtOXRJRzV2WkdVdWFuTXNJR1p2Y2lCMGFHVWdZbkp2ZDNObGNpNWNiaUFxWEc0Z0tpQkFZWFYwYUc5eUlDQWdSbVZ5YjNOeklFRmliM1ZyYUdGa2FXcGxhQ0E4YUhSMGNEb3ZMMlpsY205emN5NXZjbWMrWEc0Z0tpQkFiR2xqWlc1elpTQWdUVWxVWEc0Z0tpOWNiaThxSUdWemJHbHVkQzFrYVhOaFlteGxJRzV2TFhCeWIzUnZJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKMXh1WEc1MllYSWdZbUZ6WlRZMElEMGdjbVZ4ZFdseVpTZ25ZbUZ6WlRZMExXcHpKeWxjYm5aaGNpQnBaV1ZsTnpVMElEMGdjbVZ4ZFdseVpTZ25hV1ZsWlRjMU5DY3BYRzUyWVhJZ2FYTkJjbkpoZVNBOUlISmxjWFZwY21Vb0oybHpZWEp5WVhrbktWeHVYRzVsZUhCdmNuUnpMa0oxWm1abGNpQTlJRUoxWm1abGNseHVaWGh3YjNKMGN5NVRiRzkzUW5WbVptVnlJRDBnVTJ4dmQwSjFabVpsY2x4dVpYaHdiM0owY3k1SlRsTlFSVU5VWDAxQldGOUNXVlJGVXlBOUlEVXdYRzVjYmk4cUtseHVJQ29nU1dZZ1lFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVVlEcGNiaUFxSUNBZ1BUMDlJSFJ5ZFdVZ0lDQWdWWE5sSUZWcGJuUTRRWEp5WVhrZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnS0daaGMzUmxjM1FwWEc0Z0tpQWdJRDA5UFNCbVlXeHpaU0FnSUZWelpTQlBZbXBsWTNRZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnS0cxdmMzUWdZMjl0Y0dGMGFXSnNaU3dnWlhabGJpQkpSVFlwWEc0Z0tseHVJQ29nUW5KdmQzTmxjbk1nZEdoaGRDQnpkWEJ3YjNKMElIUjVjR1ZrSUdGeWNtRjVjeUJoY21VZ1NVVWdNVEFyTENCR2FYSmxabTk0SURRckxDQkRhSEp2YldVZ055c3NJRk5oWm1GeWFTQTFMakVyTEZ4dUlDb2dUM0JsY21FZ01URXVOaXNzSUdsUFV5QTBMaklyTGx4dUlDcGNiaUFxSUVSMVpTQjBieUIyWVhKcGIzVnpJR0p5YjNkelpYSWdZblZuY3l3Z2MyOXRaWFJwYldWeklIUm9aU0JQWW1wbFkzUWdhVzF3YkdWdFpXNTBZWFJwYjI0Z2QybHNiQ0JpWlNCMWMyVmtJR1YyWlc1Y2JpQXFJSGRvWlc0Z2RHaGxJR0p5YjNkelpYSWdjM1Z3Y0c5eWRITWdkSGx3WldRZ1lYSnlZWGx6TGx4dUlDcGNiaUFxSUU1dmRHVTZYRzRnS2x4dUlDb2dJQ0F0SUVacGNtVm1iM2dnTkMweU9TQnNZV05yY3lCemRYQndiM0owSUdadmNpQmhaR1JwYm1jZ2JtVjNJSEJ5YjNCbGNuUnBaWE1nZEc4Z1lGVnBiblE0UVhKeVlYbGdJR2x1YzNSaGJtTmxjeXhjYmlBcUlDQWdJQ0JUWldVNklHaDBkSEJ6T2k4dlluVm5lbWxzYkdFdWJXOTZhV3hzWVM1dmNtY3ZjMmh2ZDE5aWRXY3VZMmRwUDJsa1BUWTVOVFF6T0M1Y2JpQXFYRzRnS2lBZ0lDMGdRMmh5YjIxbElEa3RNVEFnYVhNZ2JXbHpjMmx1WnlCMGFHVWdZRlI1Y0dWa1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5OMVltRnljbUY1WUNCbWRXNWpkR2x2Ymk1Y2JpQXFYRzRnS2lBZ0lDMGdTVVV4TUNCb1lYTWdZU0JpY205clpXNGdZRlI1Y0dWa1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5OMVltRnljbUY1WUNCbWRXNWpkR2x2YmlCM2FHbGphQ0J5WlhSMWNtNXpJR0Z5Y21GNWN5QnZabHh1SUNvZ0lDQWdJR2x1WTI5eWNtVmpkQ0JzWlc1bmRHZ2dhVzRnYzI5dFpTQnphWFIxWVhScGIyNXpMbHh1WEc0Z0tpQlhaU0JrWlhSbFkzUWdkR2hsYzJVZ1luVm5aM2tnWW5KdmQzTmxjbk1nWVc1a0lITmxkQ0JnUW5WbVptVnlMbFJaVUVWRVgwRlNVa0ZaWDFOVlVGQlBVbFJnSUhSdklHQm1ZV3h6WldBZ2MyOGdkR2hsZVZ4dUlDb2daMlYwSUhSb1pTQlBZbXBsWTNRZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRzSUhkb2FXTm9JR2x6SUhOc2IzZGxjaUJpZFhRZ1ltVm9ZWFpsY3lCamIzSnlaV04wYkhrdVhHNGdLaTljYmtKMVptWmxjaTVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVSUQwZ1oyeHZZbUZzTGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRZ0lUMDlJSFZ1WkdWbWFXNWxaRnh1SUNBL0lHZHNiMkpoYkM1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVVhHNGdJRG9nZEhsd1pXUkJjbkpoZVZOMWNIQnZjblFvS1Z4dVhHNHZLbHh1SUNvZ1JYaHdiM0owSUd0TllYaE1aVzVuZEdnZ1lXWjBaWElnZEhsd1pXUWdZWEp5WVhrZ2MzVndjRzl5ZENCcGN5QmtaWFJsY20xcGJtVmtMbHh1SUNvdlhHNWxlSEJ2Y25SekxtdE5ZWGhNWlc1bmRHZ2dQU0JyVFdGNFRHVnVaM1JvS0NsY2JseHVablZ1WTNScGIyNGdkSGx3WldSQmNuSmhlVk4xY0hCdmNuUWdLQ2tnZTF4dUlDQjBjbmtnZTF4dUlDQWdJSFpoY2lCaGNuSWdQU0J1WlhjZ1ZXbHVkRGhCY25KaGVTZ3hLVnh1SUNBZ0lHRnljaTVmWDNCeWIzUnZYMThnUFNCN1gxOXdjbTkwYjE5Zk9pQlZhVzUwT0VGeWNtRjVMbkJ5YjNSdmRIbHdaU3dnWm05dk9pQm1kVzVqZEdsdmJpQW9LU0I3SUhKbGRIVnliaUEwTWlCOWZWeHVJQ0FnSUhKbGRIVnliaUJoY25JdVptOXZLQ2tnUFQwOUlEUXlJQ1ltSUM4dklIUjVjR1ZrSUdGeWNtRjVJR2x1YzNSaGJtTmxjeUJqWVc0Z1ltVWdZWFZuYldWdWRHVmtYRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQmhjbkl1YzNWaVlYSnlZWGtnUFQwOUlDZG1kVzVqZEdsdmJpY2dKaVlnTHk4Z1kyaHliMjFsSURrdE1UQWdiR0ZqYXlCZ2MzVmlZWEp5WVhsZ1hHNGdJQ0FnSUNBZ0lHRnljaTV6ZFdKaGNuSmhlU2d4TENBeEtTNWllWFJsVEdWdVozUm9JRDA5UFNBd0lDOHZJR2xsTVRBZ2FHRnpJR0p5YjJ0bGJpQmdjM1ZpWVhKeVlYbGdYRzRnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNCeVpYUjFjbTRnWm1Gc2MyVmNiaUFnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJyVFdGNFRHVnVaM1JvSUNncElIdGNiaUFnY21WMGRYSnVJRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVYRzRnSUNBZ1B5QXdlRGRtWm1abVptWm1YRzRnSUNBZ09pQXdlRE5tWm1abVptWm1YRzU5WEc1Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlVKMVptWmxjaUFvZEdoaGRDd2diR1Z1WjNSb0tTQjdYRzRnSUdsbUlDaHJUV0Y0VEdWdVozUm9LQ2tnUENCc1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVW1GdVoyVkZjbkp2Y2lnblNXNTJZV3hwWkNCMGVYQmxaQ0JoY25KaGVTQnNaVzVuZEdnbktWeHVJQ0I5WEc0Z0lHbG1JQ2hDZFdabVpYSXVWRmxRUlVSZlFWSlNRVmxmVTFWUVVFOVNWQ2tnZTF4dUlDQWdJQzh2SUZKbGRIVnliaUJoYmlCaGRXZHRaVzUwWldRZ1lGVnBiblE0UVhKeVlYbGdJR2x1YzNSaGJtTmxMQ0JtYjNJZ1ltVnpkQ0J3WlhKbWIzSnRZVzVqWlZ4dUlDQWdJSFJvWVhRZ1BTQnVaWGNnVldsdWREaEJjbkpoZVNoc1pXNW5kR2dwWEc0Z0lDQWdkR2hoZEM1ZlgzQnliM1J2WDE4Z1BTQkNkV1ptWlhJdWNISnZkRzkwZVhCbFhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ0x5OGdSbUZzYkdKaFkyczZJRkpsZEhWeWJpQmhiaUJ2WW1wbFkzUWdhVzV6ZEdGdVkyVWdiMllnZEdobElFSjFabVpsY2lCamJHRnpjMXh1SUNBZ0lHbG1JQ2gwYUdGMElEMDlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQjBhR0YwSUQwZ2JtVjNJRUoxWm1abGNpaHNaVzVuZEdncFhHNGdJQ0FnZlZ4dUlDQWdJSFJvWVhRdWJHVnVaM1JvSUQwZ2JHVnVaM1JvWEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnZEdoaGRGeHVmVnh1WEc0dktpcGNiaUFxSUZSb1pTQkNkV1ptWlhJZ1kyOXVjM1J5ZFdOMGIzSWdjbVYwZFhKdWN5QnBibk4wWVc1alpYTWdiMllnWUZWcGJuUTRRWEp5WVhsZ0lIUm9ZWFFnYUdGMlpTQjBhR1ZwY2x4dUlDb2djSEp2ZEc5MGVYQmxJR05vWVc1blpXUWdkRzhnWUVKMVptWmxjaTV3Y205MGIzUjVjR1ZnTGlCR2RYSjBhR1Z5Ylc5eVpTd2dZRUoxWm1abGNtQWdhWE1nWVNCemRXSmpiR0Z6Y3lCdlpseHVJQ29nWUZWcGJuUTRRWEp5WVhsZ0xDQnpieUIwYUdVZ2NtVjBkWEp1WldRZ2FXNXpkR0Z1WTJWeklIZHBiR3dnYUdGMlpTQmhiR3dnZEdobElHNXZaR1VnWUVKMVptWmxjbUFnYldWMGFHOWtjMXh1SUNvZ1lXNWtJSFJvWlNCZ1ZXbHVkRGhCY25KaGVXQWdiV1YwYUc5a2N5NGdVM0YxWVhKbElHSnlZV05yWlhRZ2JtOTBZWFJwYjI0Z2QyOXlhM01nWVhNZ1pYaHdaV04wWldRZ0xTMGdhWFJjYmlBcUlISmxkSFZ5Ym5NZ1lTQnphVzVuYkdVZ2IyTjBaWFF1WEc0Z0tseHVJQ29nVkdobElHQlZhVzUwT0VGeWNtRjVZQ0J3Y205MGIzUjVjR1VnY21WdFlXbHVjeUIxYm0xdlpHbG1hV1ZrTGx4dUlDb3ZYRzVjYm1aMWJtTjBhVzl1SUVKMVptWmxjaUFvWVhKbkxDQmxibU52WkdsdVowOXlUMlptYzJWMExDQnNaVzVuZEdncElIdGNiaUFnYVdZZ0tDRkNkV1ptWlhJdVZGbFFSVVJmUVZKU1FWbGZVMVZRVUU5U1ZDQW1KaUFoS0hSb2FYTWdhVzV6ZEdGdVkyVnZaaUJDZFdabVpYSXBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJDZFdabVpYSW9ZWEpuTENCbGJtTnZaR2x1WjA5eVQyWm1jMlYwTENCc1pXNW5kR2dwWEc0Z0lIMWNibHh1SUNBdkx5QkRiMjF0YjI0Z1kyRnpaUzVjYmlBZ2FXWWdLSFI1Y0dWdlppQmhjbWNnUFQwOUlDZHVkVzFpWlhJbktTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmxibU52WkdsdVowOXlUMlptYzJWMElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuU1dZZ1pXNWpiMlJwYm1jZ2FYTWdjM0JsWTJsbWFXVmtJSFJvWlc0Z2RHaGxJR1pwY25OMElHRnlaM1Z0Wlc1MElHMTFjM1FnWW1VZ1lTQnpkSEpwYm1jblhHNGdJQ0FnSUNBcFhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmhiR3h2WTFWdWMyRm1aU2gwYUdsekxDQmhjbWNwWEc0Z0lIMWNiaUFnY21WMGRYSnVJR1p5YjIwb2RHaHBjeXdnWVhKbkxDQmxibU52WkdsdVowOXlUMlptYzJWMExDQnNaVzVuZEdncFhHNTlYRzVjYmtKMVptWmxjaTV3YjI5c1UybDZaU0E5SURneE9USWdMeThnYm05MElIVnpaV1FnWW5rZ2RHaHBjeUJwYlhCc1pXMWxiblJoZEdsdmJseHVYRzR2THlCVVQwUlBPaUJNWldkaFkza3NJRzV2ZENCdVpXVmtaV1FnWVc1NWJXOXlaUzRnVW1WdGIzWmxJR2x1SUc1bGVIUWdiV0ZxYjNJZ2RtVnljMmx2Ymk1Y2JrSjFabVpsY2k1ZllYVm5iV1Z1ZENBOUlHWjFibU4wYVc5dUlDaGhjbklwSUh0Y2JpQWdZWEp5TGw5ZmNISnZkRzlmWHlBOUlFSjFabVpsY2k1d2NtOTBiM1I1Y0dWY2JpQWdjbVYwZFhKdUlHRnljbHh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm1jbTl0SUNoMGFHRjBMQ0IyWVd4MVpTd2daVzVqYjJScGJtZFBjazltWm5ObGRDd2diR1Z1WjNSb0tTQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHVkVzFpWlhJbktTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25YQ0oyWVd4MVpWd2lJR0Z5WjNWdFpXNTBJRzExYzNRZ2JtOTBJR0psSUdFZ2JuVnRZbVZ5SnlsY2JpQWdmVnh1WEc0Z0lHbG1JQ2gwZVhCbGIyWWdRWEp5WVhsQ2RXWm1aWElnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUhaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYbENkV1ptWlhJcElIdGNiaUFnSUNCeVpYUjFjbTRnWm5KdmJVRnljbUY1UW5WbVptVnlLSFJvWVhRc0lIWmhiSFZsTENCbGJtTnZaR2x1WjA5eVQyWm1jMlYwTENCc1pXNW5kR2dwWEc0Z0lIMWNibHh1SUNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lISmxkSFZ5YmlCbWNtOXRVM1J5YVc1bktIUm9ZWFFzSUhaaGJIVmxMQ0JsYm1OdlpHbHVaMDl5VDJabWMyVjBLVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR1p5YjIxUFltcGxZM1FvZEdoaGRDd2dkbUZzZFdVcFhHNTlYRzVjYmk4cUtseHVJQ29nUm5WdVkzUnBiMjVoYkd4NUlHVnhkV2wyWVd4bGJuUWdkRzhnUW5WbVptVnlLR0Z5Wnl3Z1pXNWpiMlJwYm1jcElHSjFkQ0IwYUhKdmQzTWdZU0JVZVhCbFJYSnliM0pjYmlBcUlHbG1JSFpoYkhWbElHbHpJR0VnYm5WdFltVnlMbHh1SUNvZ1FuVm1abVZ5TG1aeWIyMG9jM1J5V3l3Z1pXNWpiMlJwYm1kZEtWeHVJQ29nUW5WbVptVnlMbVp5YjIwb1lYSnlZWGtwWEc0Z0tpQkNkV1ptWlhJdVpuSnZiU2hpZFdabVpYSXBYRzRnS2lCQ2RXWm1aWEl1Wm5KdmJTaGhjbkpoZVVKMVptWmxjbHNzSUdKNWRHVlBabVp6WlhSYkxDQnNaVzVuZEdoZFhTbGNiaUFxS2k5Y2JrSjFabVpsY2k1bWNtOXRJRDBnWm5WdVkzUnBiMjRnS0haaGJIVmxMQ0JsYm1OdlpHbHVaMDl5VDJabWMyVjBMQ0JzWlc1bmRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUdaeWIyMG9iblZzYkN3Z2RtRnNkV1VzSUdWdVkyOWthVzVuVDNKUFptWnpaWFFzSUd4bGJtZDBhQ2xjYm4xY2JseHVhV1lnS0VKMVptWmxjaTVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVS1NCN1hHNGdJRUoxWm1abGNpNXdjbTkwYjNSNWNHVXVYMTl3Y205MGIxOWZJRDBnVldsdWREaEJjbkpoZVM1d2NtOTBiM1I1Y0dWY2JpQWdRblZtWm1WeUxsOWZjSEp2ZEc5Zlh5QTlJRlZwYm5RNFFYSnlZWGxjYmlBZ2FXWWdLSFI1Y0dWdlppQlRlVzFpYjJ3Z0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlGTjViV0p2YkM1emNHVmphV1Z6SUNZbVhHNGdJQ0FnSUNCQ2RXWm1aWEpiVTNsdFltOXNMbk53WldOcFpYTmRJRDA5UFNCQ2RXWm1aWElwSUh0Y2JpQWdJQ0F2THlCR2FYZ2djM1ZpWVhKeVlYa29LU0JwYmlCRlV6SXdNVFl1SUZObFpUb2dhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMlpsY205emN5OWlkV1ptWlhJdmNIVnNiQzg1TjF4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoQ2RXWm1aWElzSUZONWJXSnZiQzV6Y0dWamFXVnpMQ0I3WEc0Z0lDQWdJQ0IyWVd4MVpUb2diblZzYkN4Y2JpQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dkSEoxWlZ4dUlDQWdJSDBwWEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1lYTnpaWEowVTJsNlpTQW9jMmw2WlNrZ2UxeHVJQ0JwWmlBb2RIbHdaVzltSUhOcGVtVWdJVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhDSnphWHBsWENJZ1lYSm5kVzFsYm5RZ2JYVnpkQ0JpWlNCaElHNTFiV0psY2ljcFhHNGdJSDBnWld4elpTQnBaaUFvYzJsNlpTQThJREFwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVW1GdVoyVkZjbkp2Y2lnblhDSnphWHBsWENJZ1lYSm5kVzFsYm5RZ2JYVnpkQ0J1YjNRZ1ltVWdibVZuWVhScGRtVW5LVnh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdGc2JHOWpJQ2gwYUdGMExDQnphWHBsTENCbWFXeHNMQ0JsYm1OdlpHbHVaeWtnZTF4dUlDQmhjM05sY25SVGFYcGxLSE5wZW1VcFhHNGdJR2xtSUNoemFYcGxJRHc5SURBcElIdGNiaUFnSUNCeVpYUjFjbTRnWTNKbFlYUmxRblZtWm1WeUtIUm9ZWFFzSUhOcGVtVXBYRzRnSUgxY2JpQWdhV1lnS0dacGJHd2dJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUM4dklFOXViSGtnY0dGNUlHRjBkR1Z1ZEdsdmJpQjBieUJsYm1OdlpHbHVaeUJwWmlCcGRDZHpJR0VnYzNSeWFXNW5MaUJVYUdselhHNGdJQ0FnTHk4Z2NISmxkbVZ1ZEhNZ1lXTmphV1JsYm5SaGJHeDVJSE5sYm1ScGJtY2dhVzRnWVNCdWRXMWlaWElnZEdoaGRDQjNiM1ZzWkZ4dUlDQWdJQzh2SUdKbElHbHVkR1Z5Y0hKbGRIUmxaQ0JoY3lCaElITjBZWEowSUc5bVpuTmxkQzVjYmlBZ0lDQnlaWFIxY200Z2RIbHdaVzltSUdWdVkyOWthVzVuSUQwOVBTQW5jM1J5YVc1bkoxeHVJQ0FnSUNBZ1B5QmpjbVZoZEdWQ2RXWm1aWElvZEdoaGRDd2djMmw2WlNrdVptbHNiQ2htYVd4c0xDQmxibU52WkdsdVp5bGNiaUFnSUNBZ0lEb2dZM0psWVhSbFFuVm1abVZ5S0hSb1lYUXNJSE5wZW1VcExtWnBiR3dvWm1sc2JDbGNiaUFnZlZ4dUlDQnlaWFIxY200Z1kzSmxZWFJsUW5WbVptVnlLSFJvWVhRc0lITnBlbVVwWEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhJRzVsZHlCbWFXeHNaV1FnUW5WbVptVnlJR2x1YzNSaGJtTmxMbHh1SUNvZ1lXeHNiMk1vYzJsNlpWc3NJR1pwYkd4YkxDQmxibU52WkdsdVoxMWRLVnh1SUNvcUwxeHVRblZtWm1WeUxtRnNiRzlqSUQwZ1puVnVZM1JwYjI0Z0tITnBlbVVzSUdacGJHd3NJR1Z1WTI5a2FXNW5LU0I3WEc0Z0lISmxkSFZ5YmlCaGJHeHZZeWh1ZFd4c0xDQnphWHBsTENCbWFXeHNMQ0JsYm1OdlpHbHVaeWxjYm4xY2JseHVablZ1WTNScGIyNGdZV3hzYjJOVmJuTmhabVVnS0hSb1lYUXNJSE5wZW1VcElIdGNiaUFnWVhOelpYSjBVMmw2WlNoemFYcGxLVnh1SUNCMGFHRjBJRDBnWTNKbFlYUmxRblZtWm1WeUtIUm9ZWFFzSUhOcGVtVWdQQ0F3SUQ4Z01DQTZJR05vWldOclpXUW9jMmw2WlNrZ2ZDQXdLVnh1SUNCcFppQW9JVUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVLU0I3WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J6YVhwbE95QXJLMmtwSUh0Y2JpQWdJQ0FnSUhSb1lYUmJhVjBnUFNBd1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUIwYUdGMFhHNTlYRzVjYmk4cUtseHVJQ29nUlhGMWFYWmhiR1Z1ZENCMGJ5QkNkV1ptWlhJb2JuVnRLU3dnWW5rZ1pHVm1ZWFZzZENCamNtVmhkR1Z6SUdFZ2JtOXVMWHBsY204dFptbHNiR1ZrSUVKMVptWmxjaUJwYm5OMFlXNWpaUzVjYmlBcUlDb3ZYRzVDZFdabVpYSXVZV3hzYjJOVmJuTmhabVVnUFNCbWRXNWpkR2x2YmlBb2MybDZaU2tnZTF4dUlDQnlaWFIxY200Z1lXeHNiMk5WYm5OaFptVW9iblZzYkN3Z2MybDZaU2xjYm4xY2JpOHFLbHh1SUNvZ1JYRjFhWFpoYkdWdWRDQjBieUJUYkc5M1FuVm1abVZ5S0c1MWJTa3NJR0o1SUdSbFptRjFiSFFnWTNKbFlYUmxjeUJoSUc1dmJpMTZaWEp2TFdacGJHeGxaQ0JDZFdabVpYSWdhVzV6ZEdGdVkyVXVYRzRnS2k5Y2JrSjFabVpsY2k1aGJHeHZZMVZ1YzJGbVpWTnNiM2NnUFNCbWRXNWpkR2x2YmlBb2MybDZaU2tnZTF4dUlDQnlaWFIxY200Z1lXeHNiMk5WYm5OaFptVW9iblZzYkN3Z2MybDZaU2xjYm4xY2JseHVablZ1WTNScGIyNGdabkp2YlZOMGNtbHVaeUFvZEdoaGRDd2djM1J5YVc1bkxDQmxibU52WkdsdVp5a2dlMXh1SUNCcFppQW9kSGx3Wlc5bUlHVnVZMjlrYVc1bklDRTlQU0FuYzNSeWFXNW5KeUI4ZkNCbGJtTnZaR2x1WnlBOVBUMGdKeWNwSUh0Y2JpQWdJQ0JsYm1OdlpHbHVaeUE5SUNkMWRHWTRKMXh1SUNCOVhHNWNiaUFnYVdZZ0tDRkNkV1ptWlhJdWFYTkZibU52WkdsdVp5aGxibU52WkdsdVp5a3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RjSW1WdVkyOWthVzVuWENJZ2JYVnpkQ0JpWlNCaElIWmhiR2xrSUhOMGNtbHVaeUJsYm1OdlpHbHVaeWNwWEc0Z0lIMWNibHh1SUNCMllYSWdiR1Z1WjNSb0lEMGdZbmwwWlV4bGJtZDBhQ2h6ZEhKcGJtY3NJR1Z1WTI5a2FXNW5LU0I4SURCY2JpQWdkR2hoZENBOUlHTnlaV0YwWlVKMVptWmxjaWgwYUdGMExDQnNaVzVuZEdncFhHNWNiaUFnZG1GeUlHRmpkSFZoYkNBOUlIUm9ZWFF1ZDNKcGRHVW9jM1J5YVc1bkxDQmxibU52WkdsdVp5bGNibHh1SUNCcFppQW9ZV04wZFdGc0lDRTlQU0JzWlc1bmRHZ3BJSHRjYmlBZ0lDQXZMeUJYY21sMGFXNW5JR0VnYUdWNElITjBjbWx1Wnl3Z1ptOXlJR1Y0WVcxd2JHVXNJSFJvWVhRZ1kyOXVkR0ZwYm5NZ2FXNTJZV3hwWkNCamFHRnlZV04wWlhKeklIZHBiR3hjYmlBZ0lDQXZMeUJqWVhWelpTQmxkbVZ5ZVhSb2FXNW5JR0ZtZEdWeUlIUm9aU0JtYVhKemRDQnBiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQjBieUJpWlNCcFoyNXZjbVZrTGlBb1pTNW5MbHh1SUNBZ0lDOHZJQ2RoWW5oNFkyUW5JSGRwYkd3Z1ltVWdkSEpsWVhSbFpDQmhjeUFuWVdJbktWeHVJQ0FnSUhSb1lYUWdQU0IwYUdGMExuTnNhV05sS0RBc0lHRmpkSFZoYkNsY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCMGFHRjBYRzU5WEc1Y2JtWjFibU4wYVc5dUlHWnliMjFCY25KaGVVeHBhMlVnS0hSb1lYUXNJR0Z5Y21GNUtTQjdYRzRnSUhaaGNpQnNaVzVuZEdnZ1BTQmhjbkpoZVM1c1pXNW5kR2dnUENBd0lEOGdNQ0E2SUdOb1pXTnJaV1FvWVhKeVlYa3ViR1Z1WjNSb0tTQjhJREJjYmlBZ2RHaGhkQ0E5SUdOeVpXRjBaVUoxWm1abGNpaDBhR0YwTENCc1pXNW5kR2dwWEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2diR1Z1WjNSb095QnBJQ3M5SURFcElIdGNiaUFnSUNCMGFHRjBXMmxkSUQwZ1lYSnlZWGxiYVYwZ0ppQXlOVFZjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdkR2hoZEZ4dWZWeHVYRzVtZFc1amRHbHZiaUJtY205dFFYSnlZWGxDZFdabVpYSWdLSFJvWVhRc0lHRnljbUY1TENCaWVYUmxUMlptYzJWMExDQnNaVzVuZEdncElIdGNiaUFnWVhKeVlYa3VZbmwwWlV4bGJtZDBhQ0F2THlCMGFHbHpJSFJvY205M2N5QnBaaUJnWVhKeVlYbGdJR2x6SUc1dmRDQmhJSFpoYkdsa0lFRnljbUY1UW5WbVptVnlYRzVjYmlBZ2FXWWdLR0o1ZEdWUFptWnpaWFFnUENBd0lIeDhJR0Z5Y21GNUxtSjVkR1ZNWlc1bmRHZ2dQQ0JpZVhSbFQyWm1jMlYwS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb0oxeGNKMjltWm5ObGRGeGNKeUJwY3lCdmRYUWdiMllnWW05MWJtUnpKeWxjYmlBZ2ZWeHVYRzRnSUdsbUlDaGhjbkpoZVM1aWVYUmxUR1Z1WjNSb0lEd2dZbmwwWlU5bVpuTmxkQ0FySUNoc1pXNW5kR2dnZkh3Z01Da3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduWEZ3bmJHVnVaM1JvWEZ3bklHbHpJRzkxZENCdlppQmliM1Z1WkhNbktWeHVJQ0I5WEc1Y2JpQWdhV1lnS0dKNWRHVlBabVp6WlhRZ1BUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCc1pXNW5kR2dnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lHRnljbUY1SUQwZ2JtVjNJRlZwYm5RNFFYSnlZWGtvWVhKeVlYa3BYRzRnSUgwZ1pXeHpaU0JwWmlBb2JHVnVaM1JvSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQmhjbkpoZVNBOUlHNWxkeUJWYVc1ME9FRnljbUY1S0dGeWNtRjVMQ0JpZVhSbFQyWm1jMlYwS1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdGeWNtRjVJRDBnYm1WM0lGVnBiblE0UVhKeVlYa29ZWEp5WVhrc0lHSjVkR1ZQWm1aelpYUXNJR3hsYm1kMGFDbGNiaUFnZlZ4dVhHNGdJR2xtSUNoQ2RXWm1aWEl1VkZsUVJVUmZRVkpTUVZsZlUxVlFVRTlTVkNrZ2UxeHVJQ0FnSUM4dklGSmxkSFZ5YmlCaGJpQmhkV2R0Wlc1MFpXUWdZRlZwYm5RNFFYSnlZWGxnSUdsdWMzUmhibU5sTENCbWIzSWdZbVZ6ZENCd1pYSm1iM0p0WVc1alpWeHVJQ0FnSUhSb1lYUWdQU0JoY25KaGVWeHVJQ0FnSUhSb1lYUXVYMTl3Y205MGIxOWZJRDBnUW5WbVptVnlMbkJ5YjNSdmRIbHdaVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJQzh2SUVaaGJHeGlZV05yT2lCU1pYUjFjbTRnWVc0Z2IySnFaV04wSUdsdWMzUmhibU5sSUc5bUlIUm9aU0JDZFdabVpYSWdZMnhoYzNOY2JpQWdJQ0IwYUdGMElEMGdabkp2YlVGeWNtRjVUR2xyWlNoMGFHRjBMQ0JoY25KaGVTbGNiaUFnZlZ4dUlDQnlaWFIxY200Z2RHaGhkRnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm1jbTl0VDJKcVpXTjBJQ2gwYUdGMExDQnZZbW9wSUh0Y2JpQWdhV1lnS0VKMVptWmxjaTVwYzBKMVptWmxjaWh2WW1vcEtTQjdYRzRnSUNBZ2RtRnlJR3hsYmlBOUlHTm9aV05yWldRb2IySnFMbXhsYm1kMGFDa2dmQ0F3WEc0Z0lDQWdkR2hoZENBOUlHTnlaV0YwWlVKMVptWmxjaWgwYUdGMExDQnNaVzRwWEc1Y2JpQWdJQ0JwWmlBb2RHaGhkQzVzWlc1bmRHZ2dQVDA5SURBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHRjBYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2IySnFMbU52Y0hrb2RHaGhkQ3dnTUN3Z01Dd2diR1Z1S1Z4dUlDQWdJSEpsZEhWeWJpQjBhR0YwWEc0Z0lIMWNibHh1SUNCcFppQW9iMkpxS1NCN1hHNGdJQ0FnYVdZZ0tDaDBlWEJsYjJZZ1FYSnlZWGxDZFdabVpYSWdJVDA5SUNkMWJtUmxabWx1WldRbklDWW1YRzRnSUNBZ0lDQWdJRzlpYWk1aWRXWm1aWElnYVc1emRHRnVZMlZ2WmlCQmNuSmhlVUoxWm1abGNpa2dmSHdnSjJ4bGJtZDBhQ2NnYVc0Z2IySnFLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNXNaVzVuZEdnZ0lUMDlJQ2R1ZFcxaVpYSW5JSHg4SUdsemJtRnVLRzlpYWk1c1pXNW5kR2dwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamNtVmhkR1ZDZFdabVpYSW9kR2hoZEN3Z01DbGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCbWNtOXRRWEp5WVhsTWFXdGxLSFJvWVhRc0lHOWlhaWxjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxuUjVjR1VnUFQwOUlDZENkV1ptWlhJbklDWW1JR2x6UVhKeVlYa29iMkpxTG1SaGRHRXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabkp2YlVGeWNtRjVUR2xyWlNoMGFHRjBMQ0J2WW1vdVpHRjBZU2xjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkR2FYSnpkQ0JoY21kMWJXVnVkQ0J0ZFhOMElHSmxJR0VnYzNSeWFXNW5MQ0JDZFdabVpYSXNJRUZ5Y21GNVFuVm1abVZ5TENCQmNuSmhlU3dnYjNJZ1lYSnlZWGt0YkdsclpTQnZZbXBsWTNRdUp5bGNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyaGxZMnRsWkNBb2JHVnVaM1JvS1NCN1hHNGdJQzh2SUU1dmRHVTZJR05oYm01dmRDQjFjMlVnWUd4bGJtZDBhQ0E4SUd0TllYaE1aVzVuZEdnb0tXQWdhR1Z5WlNCaVpXTmhkWE5sSUhSb1lYUWdabUZwYkhNZ2QyaGxibHh1SUNBdkx5QnNaVzVuZEdnZ2FYTWdUbUZPSUNoM2FHbGphQ0JwY3lCdmRHaGxjbmRwYzJVZ1kyOWxjbU5sWkNCMGJ5QjZaWEp2TGlsY2JpQWdhV1lnS0d4bGJtZDBhQ0ErUFNCclRXRjRUR1Z1WjNSb0tDa3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduUVhSMFpXMXdkQ0IwYnlCaGJHeHZZMkYwWlNCQ2RXWm1aWElnYkdGeVoyVnlJSFJvWVc0Z2JXRjRhVzExYlNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5jMmw2WlRvZ01IZ25JQ3NnYTAxaGVFeGxibWQwYUNncExuUnZVM1J5YVc1bktERTJLU0FySUNjZ1lubDBaWE1uS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJzWlc1bmRHZ2dmQ0F3WEc1OVhHNWNibVoxYm1OMGFXOXVJRk5zYjNkQ2RXWm1aWElnS0d4bGJtZDBhQ2tnZTF4dUlDQnBaaUFvSzJ4bGJtZDBhQ0FoUFNCc1pXNW5kR2dwSUhzZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJHbHVaU0JsY1dWeFpYRmNiaUFnSUNCc1pXNW5kR2dnUFNBd1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUVKMVptWmxjaTVoYkd4dll5Z3JiR1Z1WjNSb0tWeHVmVnh1WEc1Q2RXWm1aWEl1YVhOQ2RXWm1aWElnUFNCbWRXNWpkR2x2YmlCcGMwSjFabVpsY2lBb1lpa2dlMXh1SUNCeVpYUjFjbTRnSVNFb1lpQWhQU0J1ZFd4c0lDWW1JR0l1WDJselFuVm1abVZ5S1Z4dWZWeHVYRzVDZFdabVpYSXVZMjl0Y0dGeVpTQTlJR1oxYm1OMGFXOXVJR052YlhCaGNtVWdLR0VzSUdJcElIdGNiaUFnYVdZZ0tDRkNkV1ptWlhJdWFYTkNkV1ptWlhJb1lTa2dmSHdnSVVKMVptWmxjaTVwYzBKMVptWmxjaWhpS1NrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0owRnlaM1Z0Wlc1MGN5QnRkWE4wSUdKbElFSjFabVpsY25NbktWeHVJQ0I5WEc1Y2JpQWdhV1lnS0dFZ1BUMDlJR0lwSUhKbGRIVnliaUF3WEc1Y2JpQWdkbUZ5SUhnZ1BTQmhMbXhsYm1kMGFGeHVJQ0IyWVhJZ2VTQTlJR0l1YkdWdVozUm9YRzVjYmlBZ1ptOXlJQ2gyWVhJZ2FTQTlJREFzSUd4bGJpQTlJRTFoZEdndWJXbHVLSGdzSUhrcE95QnBJRHdnYkdWdU95QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb1lWdHBYU0FoUFQwZ1lsdHBYU2tnZTF4dUlDQWdJQ0FnZUNBOUlHRmJhVjFjYmlBZ0lDQWdJSGtnUFNCaVcybGRYRzRnSUNBZ0lDQmljbVZoYTF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdsbUlDaDRJRHdnZVNrZ2NtVjBkWEp1SUMweFhHNGdJR2xtSUNoNUlEd2dlQ2tnY21WMGRYSnVJREZjYmlBZ2NtVjBkWEp1SURCY2JuMWNibHh1UW5WbVptVnlMbWx6Ulc1amIyUnBibWNnUFNCbWRXNWpkR2x2YmlCcGMwVnVZMjlrYVc1bklDaGxibU52WkdsdVp5a2dlMXh1SUNCemQybDBZMmdnS0ZOMGNtbHVaeWhsYm1OdlpHbHVaeWt1ZEc5TWIzZGxja05oYzJVb0tTa2dlMXh1SUNBZ0lHTmhjMlVnSjJobGVDYzZYRzRnSUNBZ1kyRnpaU0FuZFhSbU9DYzZYRzRnSUNBZ1kyRnpaU0FuZFhSbUxUZ25PbHh1SUNBZ0lHTmhjMlVnSjJGelkybHBKenBjYmlBZ0lDQmpZWE5sSUNkc1lYUnBiakVuT2x4dUlDQWdJR05oYzJVZ0oySnBibUZ5ZVNjNlhHNGdJQ0FnWTJGelpTQW5ZbUZ6WlRZMEp6cGNiaUFnSUNCallYTmxJQ2QxWTNNeUp6cGNiaUFnSUNCallYTmxJQ2QxWTNNdE1pYzZYRzRnSUNBZ1kyRnpaU0FuZFhSbU1UWnNaU2M2WEc0Z0lDQWdZMkZ6WlNBbmRYUm1MVEUyYkdVbk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVmNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WMGRYSnVJR1poYkhObFhHNGdJSDFjYm4xY2JseHVRblZtWm1WeUxtTnZibU5oZENBOUlHWjFibU4wYVc5dUlHTnZibU5oZENBb2JHbHpkQ3dnYkdWdVozUm9LU0I3WEc0Z0lHbG1JQ2doYVhOQmNuSmhlU2hzYVhOMEtTa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMXdpYkdsemRGd2lJR0Z5WjNWdFpXNTBJRzExYzNRZ1ltVWdZVzRnUVhKeVlYa2diMllnUW5WbVptVnljeWNwWEc0Z0lIMWNibHh1SUNCcFppQW9iR2x6ZEM1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQnlaWFIxY200Z1FuVm1abVZ5TG1Gc2JHOWpLREFwWEc0Z0lIMWNibHh1SUNCMllYSWdhVnh1SUNCcFppQW9iR1Z1WjNSb0lEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0JzWlc1bmRHZ2dQU0F3WEc0Z0lDQWdabTl5SUNocElEMGdNRHNnYVNBOElHeHBjM1F1YkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNBZ0lHeGxibWQwYUNBclBTQnNhWE4wVzJsZExteGxibWQwYUZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhaaGNpQmlkV1ptWlhJZ1BTQkNkV1ptWlhJdVlXeHNiMk5WYm5OaFptVW9iR1Z1WjNSb0tWeHVJQ0IyWVhJZ2NHOXpJRDBnTUZ4dUlDQm1iM0lnS0drZ1BTQXdPeUJwSUR3Z2JHbHpkQzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUhaaGNpQmlkV1lnUFNCc2FYTjBXMmxkWEc0Z0lDQWdhV1lnS0NGQ2RXWm1aWEl1YVhOQ2RXWm1aWElvWW5WbUtTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduWENKc2FYTjBYQ0lnWVhKbmRXMWxiblFnYlhWemRDQmlaU0JoYmlCQmNuSmhlU0J2WmlCQ2RXWm1aWEp6SnlsY2JpQWdJQ0I5WEc0Z0lDQWdZblZtTG1OdmNIa29ZblZtWm1WeUxDQndiM01wWEc0Z0lDQWdjRzl6SUNzOUlHSjFaaTVzWlc1bmRHaGNiaUFnZlZ4dUlDQnlaWFIxY200Z1luVm1abVZ5WEc1OVhHNWNibVoxYm1OMGFXOXVJR0o1ZEdWTVpXNW5kR2dnS0hOMGNtbHVaeXdnWlc1amIyUnBibWNwSUh0Y2JpQWdhV1lnS0VKMVptWmxjaTVwYzBKMVptWmxjaWh6ZEhKcGJtY3BLU0I3WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1Wnk1c1pXNW5kR2hjYmlBZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUVGeWNtRjVRblZtWm1WeUlDRTlQU0FuZFc1a1pXWnBibVZrSnlBbUppQjBlWEJsYjJZZ1FYSnlZWGxDZFdabVpYSXVhWE5XYVdWM0lEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbVhHNGdJQ0FnSUNBb1FYSnlZWGxDZFdabVpYSXVhWE5XYVdWM0tITjBjbWx1WnlrZ2ZId2djM1J5YVc1bklHbHVjM1JoYm1ObGIyWWdRWEp5WVhsQ2RXWm1aWElwS1NCN1hHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVp5NWllWFJsVEdWdVozUm9YRzRnSUgxY2JpQWdhV1lnS0hSNWNHVnZaaUJ6ZEhKcGJtY2dJVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnYzNSeWFXNW5JRDBnSnljZ0t5QnpkSEpwYm1kY2JpQWdmVnh1WEc0Z0lIWmhjaUJzWlc0Z1BTQnpkSEpwYm1jdWJHVnVaM1JvWEc0Z0lHbG1JQ2hzWlc0Z1BUMDlJREFwSUhKbGRIVnliaUF3WEc1Y2JpQWdMeThnVlhObElHRWdabTl5SUd4dmIzQWdkRzhnWVhadmFXUWdjbVZqZFhKemFXOXVYRzRnSUhaaGNpQnNiM2RsY21Wa1EyRnpaU0E5SUdaaGJITmxYRzRnSUdadmNpQW9PenNwSUh0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR1Z1WTI5a2FXNW5LU0I3WEc0Z0lDQWdJQ0JqWVhObElDZGhjMk5wYVNjNlhHNGdJQ0FnSUNCallYTmxJQ2RzWVhScGJqRW5PbHh1SUNBZ0lDQWdZMkZ6WlNBblltbHVZWEo1SnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUd4bGJseHVJQ0FnSUNBZ1kyRnpaU0FuZFhSbU9DYzZYRzRnSUNBZ0lDQmpZWE5sSUNkMWRHWXRPQ2M2WEc0Z0lDQWdJQ0JqWVhObElIVnVaR1ZtYVc1bFpEcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVjBaamhVYjBKNWRHVnpLSE4wY21sdVp5a3ViR1Z1WjNSb1hHNGdJQ0FnSUNCallYTmxJQ2QxWTNNeUp6cGNiaUFnSUNBZ0lHTmhjMlVnSjNWamN5MHlKenBjYmlBZ0lDQWdJR05oYzJVZ0ozVjBaakUyYkdVbk9seHVJQ0FnSUNBZ1kyRnpaU0FuZFhSbUxURTJiR1VuT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYkdWdUlDb2dNbHh1SUNBZ0lDQWdZMkZ6WlNBbmFHVjRKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR3hsYmlBK1BqNGdNVnh1SUNBZ0lDQWdZMkZ6WlNBblltRnpaVFkwSnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdKaGMyVTJORlJ2UW5sMFpYTW9jM1J5YVc1bktTNXNaVzVuZEdoY2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUdsbUlDaHNiM2RsY21Wa1EyRnpaU2tnY21WMGRYSnVJSFYwWmpoVWIwSjVkR1Z6S0hOMGNtbHVaeWt1YkdWdVozUm9JQzh2SUdGemMzVnRaU0IxZEdZNFhHNGdJQ0FnSUNBZ0lHVnVZMjlrYVc1bklEMGdLQ2NuSUNzZ1pXNWpiMlJwYm1jcExuUnZURzkzWlhKRFlYTmxLQ2xjYmlBZ0lDQWdJQ0FnYkc5M1pYSmxaRU5oYzJVZ1BTQjBjblZsWEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVDZFdabVpYSXVZbmwwWlV4bGJtZDBhQ0E5SUdKNWRHVk1aVzVuZEdoY2JseHVablZ1WTNScGIyNGdjMnh2ZDFSdlUzUnlhVzVuSUNobGJtTnZaR2x1Wnl3Z2MzUmhjblFzSUdWdVpDa2dlMXh1SUNCMllYSWdiRzkzWlhKbFpFTmhjMlVnUFNCbVlXeHpaVnh1WEc0Z0lDOHZJRTV2SUc1bFpXUWdkRzhnZG1WeWFXWjVJSFJvWVhRZ1hDSjBhR2x6TG14bGJtZDBhQ0E4UFNCTlFWaGZWVWxPVkRNeVhDSWdjMmx1WTJVZ2FYUW5jeUJoSUhKbFlXUXRiMjVzZVZ4dUlDQXZMeUJ3Y205d1pYSjBlU0J2WmlCaElIUjVjR1ZrSUdGeWNtRjVMbHh1WEc0Z0lDOHZJRlJvYVhNZ1ltVm9ZWFpsY3lCdVpXbDBhR1Z5SUd4cGEyVWdVM1J5YVc1bklHNXZjaUJWYVc1ME9FRnljbUY1SUdsdUlIUm9ZWFFnZDJVZ2MyVjBJSE4wWVhKMEwyVnVaRnh1SUNBdkx5QjBieUIwYUdWcGNpQjFjSEJsY2k5c2IzZGxjaUJpYjNWdVpITWdhV1lnZEdobElIWmhiSFZsSUhCaGMzTmxaQ0JwY3lCdmRYUWdiMllnY21GdVoyVXVYRzRnSUM4dklIVnVaR1ZtYVc1bFpDQnBjeUJvWVc1a2JHVmtJSE53WldOcFlXeHNlU0JoY3lCd1pYSWdSVU5OUVMweU5qSWdOblJvSUVWa2FYUnBiMjRzWEc0Z0lDOHZJRk5sWTNScGIyNGdNVE11TXk0ekxqY2dVblZ1ZEdsdFpTQlRaVzFoYm5ScFkzTTZJRXRsZVdWa1FtbHVaR2x1WjBsdWFYUnBZV3hwZW1GMGFXOXVMbHh1SUNCcFppQW9jM1JoY25RZ1BUMDlJSFZ1WkdWbWFXNWxaQ0I4ZkNCemRHRnlkQ0E4SURBcElIdGNiaUFnSUNCemRHRnlkQ0E5SURCY2JpQWdmVnh1SUNBdkx5QlNaWFIxY200Z1pXRnliSGtnYVdZZ2MzUmhjblFnUGlCMGFHbHpMbXhsYm1kMGFDNGdSRzl1WlNCb1pYSmxJSFJ2SUhCeVpYWmxiblFnY0c5MFpXNTBhV0ZzSUhWcGJuUXpNbHh1SUNBdkx5QmpiMlZ5WTJsdmJpQm1ZV2xzSUdKbGJHOTNMbHh1SUNCcFppQW9jM1JoY25RZ1BpQjBhR2x6TG14bGJtZDBhQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQW5KMXh1SUNCOVhHNWNiaUFnYVdZZ0tHVnVaQ0E5UFQwZ2RXNWtaV1pwYm1Wa0lIeDhJR1Z1WkNBK0lIUm9hWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdaVzVrSUQwZ2RHaHBjeTVzWlc1bmRHaGNiaUFnZlZ4dVhHNGdJR2xtSUNobGJtUWdQRDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUFuSjF4dUlDQjlYRzVjYmlBZ0x5OGdSbTl5WTJVZ1kyOWxjbk5wYjI0Z2RHOGdkV2x1ZERNeUxpQlVhR2x6SUhkcGJHd2dZV3h6YnlCamIyVnlZMlVnWm1Gc2MyVjVMMDVoVGlCMllXeDFaWE1nZEc4Z01DNWNiaUFnWlc1a0lENCtQajBnTUZ4dUlDQnpkR0Z5ZENBK1BqNDlJREJjYmx4dUlDQnBaaUFvWlc1a0lEdzlJSE4wWVhKMEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUNjblhHNGdJSDFjYmx4dUlDQnBaaUFvSVdWdVkyOWthVzVuS1NCbGJtTnZaR2x1WnlBOUlDZDFkR1k0SjF4dVhHNGdJSGRvYVd4bElDaDBjblZsS1NCN1hHNGdJQ0FnYzNkcGRHTm9JQ2hsYm1OdlpHbHVaeWtnZTF4dUlDQWdJQ0FnWTJGelpTQW5hR1Y0SnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdobGVGTnNhV05sS0hSb2FYTXNJSE4wWVhKMExDQmxibVFwWEc1Y2JpQWdJQ0FnSUdOaGMyVWdKM1YwWmpnbk9seHVJQ0FnSUNBZ1kyRnpaU0FuZFhSbUxUZ25PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkWFJtT0ZOc2FXTmxLSFJvYVhNc0lITjBZWEowTENCbGJtUXBYRzVjYmlBZ0lDQWdJR05oYzJVZ0oyRnpZMmxwSnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGelkybHBVMnhwWTJVb2RHaHBjeXdnYzNSaGNuUXNJR1Z1WkNsY2JseHVJQ0FnSUNBZ1kyRnpaU0FuYkdGMGFXNHhKenBjYmlBZ0lDQWdJR05oYzJVZ0oySnBibUZ5ZVNjNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc1lYUnBiakZUYkdsalpTaDBhR2x6TENCemRHRnlkQ3dnWlc1a0tWeHVYRzRnSUNBZ0lDQmpZWE5sSUNkaVlYTmxOalFuT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWW1GelpUWTBVMnhwWTJVb2RHaHBjeXdnYzNSaGNuUXNJR1Z1WkNsY2JseHVJQ0FnSUNBZ1kyRnpaU0FuZFdOek1pYzZYRzRnSUNBZ0lDQmpZWE5sSUNkMVkzTXRNaWM2WEc0Z0lDQWdJQ0JqWVhObElDZDFkR1l4Tm14bEp6cGNiaUFnSUNBZ0lHTmhjMlVnSjNWMFppMHhObXhsSnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWMFpqRTJiR1ZUYkdsalpTaDBhR2x6TENCemRHRnlkQ3dnWlc1a0tWeHVYRzRnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQnBaaUFvYkc5M1pYSmxaRU5oYzJVcElIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMVZ1YTI1dmQyNGdaVzVqYjJScGJtYzZJQ2NnS3lCbGJtTnZaR2x1WnlsY2JpQWdJQ0FnSUNBZ1pXNWpiMlJwYm1jZ1BTQW9aVzVqYjJScGJtY2dLeUFuSnlrdWRHOU1iM2RsY2tOaGMyVW9LVnh1SUNBZ0lDQWdJQ0JzYjNkbGNtVmtRMkZ6WlNBOUlIUnlkV1ZjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1THk4Z1ZHaGxJSEJ5YjNCbGNuUjVJR2x6SUhWelpXUWdZbmtnWUVKMVptWmxjaTVwYzBKMVptWmxjbUFnWVc1a0lHQnBjeTFpZFdabVpYSmdJQ2hwYmlCVFlXWmhjbWtnTlMwM0tTQjBieUJrWlhSbFkzUmNiaTh2SUVKMVptWmxjaUJwYm5OMFlXNWpaWE11WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTGw5cGMwSjFabVpsY2lBOUlIUnlkV1ZjYmx4dVpuVnVZM1JwYjI0Z2MzZGhjQ0FvWWl3Z2Jpd2diU2tnZTF4dUlDQjJZWElnYVNBOUlHSmJibDFjYmlBZ1lsdHVYU0E5SUdKYmJWMWNiaUFnWWx0dFhTQTlJR2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXpkMkZ3TVRZZ1BTQm1kVzVqZEdsdmJpQnpkMkZ3TVRZZ0tDa2dlMXh1SUNCMllYSWdiR1Z1SUQwZ2RHaHBjeTVzWlc1bmRHaGNiaUFnYVdZZ0tHeGxiaUFsSURJZ0lUMDlJREFwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVW1GdVoyVkZjbkp2Y2lnblFuVm1abVZ5SUhOcGVtVWdiWFZ6ZENCaVpTQmhJRzExYkhScGNHeGxJRzltSURFMkxXSnBkSE1uS1Z4dUlDQjlYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2JHVnVPeUJwSUNzOUlESXBJSHRjYmlBZ0lDQnpkMkZ3S0hSb2FYTXNJR2tzSUdrZ0t5QXhLVnh1SUNCOVhHNGdJSEpsZEhWeWJpQjBhR2x6WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVjM2RoY0RNeUlEMGdablZ1WTNScGIyNGdjM2RoY0RNeUlDZ3BJSHRjYmlBZ2RtRnlJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9YRzRnSUdsbUlDaHNaVzRnSlNBMElDRTlQU0F3S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb0owSjFabVpsY2lCemFYcGxJRzExYzNRZ1ltVWdZU0J0ZFd4MGFYQnNaU0J2WmlBek1pMWlhWFJ6SnlsY2JpQWdmVnh1SUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHeGxianNnYVNBclBTQTBLU0I3WEc0Z0lDQWdjM2RoY0NoMGFHbHpMQ0JwTENCcElDc2dNeWxjYmlBZ0lDQnpkMkZ3S0hSb2FYTXNJR2tnS3lBeExDQnBJQ3NnTWlsY2JpQWdmVnh1SUNCeVpYUjFjbTRnZEdocGMxeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5OM1lYQTJOQ0E5SUdaMWJtTjBhVzl1SUhOM1lYQTJOQ0FvS1NCN1hHNGdJSFpoY2lCc1pXNGdQU0IwYUdsekxteGxibWQwYUZ4dUlDQnBaaUFvYkdWdUlDVWdPQ0FoUFQwZ01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2RDZFdabVpYSWdjMmw2WlNCdGRYTjBJR0psSUdFZ2JYVnNkR2x3YkdVZ2IyWWdOalF0WW1sMGN5Y3BYRzRnSUgxY2JpQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lHa2dLejBnT0NrZ2UxeHVJQ0FnSUhOM1lYQW9kR2hwY3l3Z2FTd2dhU0FySURjcFhHNGdJQ0FnYzNkaGNDaDBhR2x6TENCcElDc2dNU3dnYVNBcklEWXBYRzRnSUNBZ2MzZGhjQ2gwYUdsekxDQnBJQ3NnTWl3Z2FTQXJJRFVwWEc0Z0lDQWdjM2RoY0NoMGFHbHpMQ0JwSUNzZ015d2dhU0FySURRcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhSb2FYTmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1WnlBOUlHWjFibU4wYVc5dUlIUnZVM1J5YVc1bklDZ3BJSHRjYmlBZ2RtRnlJR3hsYm1kMGFDQTlJSFJvYVhNdWJHVnVaM1JvSUh3Z01GeHVJQ0JwWmlBb2JHVnVaM1JvSUQwOVBTQXdLU0J5WlhSMWNtNGdKeWRjYmlBZ2FXWWdLR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ2dQVDA5SURBcElISmxkSFZ5YmlCMWRHWTRVMnhwWTJVb2RHaHBjeXdnTUN3Z2JHVnVaM1JvS1Z4dUlDQnlaWFIxY200Z2MyeHZkMVJ2VTNSeWFXNW5MbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lsY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzVsY1hWaGJITWdQU0JtZFc1amRHbHZiaUJsY1hWaGJITWdLR0lwSUh0Y2JpQWdhV1lnS0NGQ2RXWm1aWEl1YVhOQ2RXWm1aWElvWWlrcElIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMEZ5WjNWdFpXNTBJRzExYzNRZ1ltVWdZU0JDZFdabVpYSW5LVnh1SUNCcFppQW9kR2hwY3lBOVBUMGdZaWtnY21WMGRYSnVJSFJ5ZFdWY2JpQWdjbVYwZFhKdUlFSjFabVpsY2k1amIyMXdZWEpsS0hSb2FYTXNJR0lwSUQwOVBTQXdYRzU5WEc1Y2JrSjFabVpsY2k1d2NtOTBiM1I1Y0dVdWFXNXpjR1ZqZENBOUlHWjFibU4wYVc5dUlHbHVjM0JsWTNRZ0tDa2dlMXh1SUNCMllYSWdjM1J5SUQwZ0p5ZGNiaUFnZG1GeUlHMWhlQ0E5SUdWNGNHOXlkSE11U1U1VFVFVkRWRjlOUVZoZlFsbFVSVk5jYmlBZ2FXWWdLSFJvYVhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lITjBjaUE5SUhSb2FYTXVkRzlUZEhKcGJtY29KMmhsZUNjc0lEQXNJRzFoZUNrdWJXRjBZMmdvTHk1N01uMHZaeWt1YW05cGJpZ25JQ2NwWEc0Z0lDQWdhV1lnS0hSb2FYTXViR1Z1WjNSb0lENGdiV0Y0S1NCemRISWdLejBnSnlBdUxpNGdKMXh1SUNCOVhHNGdJSEpsZEhWeWJpQW5QRUoxWm1abGNpQW5JQ3NnYzNSeUlDc2dKejRuWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVZMjl0Y0dGeVpTQTlJR1oxYm1OMGFXOXVJR052YlhCaGNtVWdLSFJoY21kbGRDd2djM1JoY25Rc0lHVnVaQ3dnZEdocGMxTjBZWEowTENCMGFHbHpSVzVrS1NCN1hHNGdJR2xtSUNnaFFuVm1abVZ5TG1selFuVm1abVZ5S0hSaGNtZGxkQ2twSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkQmNtZDFiV1Z1ZENCdGRYTjBJR0psSUdFZ1FuVm1abVZ5SnlsY2JpQWdmVnh1WEc0Z0lHbG1JQ2h6ZEdGeWRDQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnYzNSaGNuUWdQU0F3WEc0Z0lIMWNiaUFnYVdZZ0tHVnVaQ0E5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ1pXNWtJRDBnZEdGeVoyVjBJRDhnZEdGeVoyVjBMbXhsYm1kMGFDQTZJREJjYmlBZ2ZWeHVJQ0JwWmlBb2RHaHBjMU4wWVhKMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IwYUdselUzUmhjblFnUFNBd1hHNGdJSDFjYmlBZ2FXWWdLSFJvYVhORmJtUWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUhSb2FYTkZibVFnUFNCMGFHbHpMbXhsYm1kMGFGeHVJQ0I5WEc1Y2JpQWdhV1lnS0hOMFlYSjBJRHdnTUNCOGZDQmxibVFnUGlCMFlYSm5aWFF1YkdWdVozUm9JSHg4SUhSb2FYTlRkR0Z5ZENBOElEQWdmSHdnZEdocGMwVnVaQ0ErSUhSb2FYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lGSmhibWRsUlhKeWIzSW9KMjkxZENCdlppQnlZVzVuWlNCcGJtUmxlQ2NwWEc0Z0lIMWNibHh1SUNCcFppQW9kR2hwYzFOMFlYSjBJRDQ5SUhSb2FYTkZibVFnSmlZZ2MzUmhjblFnUGowZ1pXNWtLU0I3WEc0Z0lDQWdjbVYwZFhKdUlEQmNiaUFnZlZ4dUlDQnBaaUFvZEdocGMxTjBZWEowSUQ0OUlIUm9hWE5GYm1RcElIdGNiaUFnSUNCeVpYUjFjbTRnTFRGY2JpQWdmVnh1SUNCcFppQW9jM1JoY25RZ1BqMGdaVzVrS1NCN1hHNGdJQ0FnY21WMGRYSnVJREZjYmlBZ2ZWeHVYRzRnSUhOMFlYSjBJRDQrUGowZ01GeHVJQ0JsYm1RZ1BqNCtQU0F3WEc0Z0lIUm9hWE5UZEdGeWRDQStQajQ5SURCY2JpQWdkR2hwYzBWdVpDQStQajQ5SURCY2JseHVJQ0JwWmlBb2RHaHBjeUE5UFQwZ2RHRnlaMlYwS1NCeVpYUjFjbTRnTUZ4dVhHNGdJSFpoY2lCNElEMGdkR2hwYzBWdVpDQXRJSFJvYVhOVGRHRnlkRnh1SUNCMllYSWdlU0E5SUdWdVpDQXRJSE4wWVhKMFhHNGdJSFpoY2lCc1pXNGdQU0JOWVhSb0xtMXBiaWg0TENCNUtWeHVYRzRnSUhaaGNpQjBhR2x6UTI5d2VTQTlJSFJvYVhNdWMyeHBZMlVvZEdocGMxTjBZWEowTENCMGFHbHpSVzVrS1Z4dUlDQjJZWElnZEdGeVoyVjBRMjl3ZVNBOUlIUmhjbWRsZEM1emJHbGpaU2h6ZEdGeWRDd2daVzVrS1Z4dVhHNGdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnYkdWdU95QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjME52Y0hsYmFWMGdJVDA5SUhSaGNtZGxkRU52Y0hsYmFWMHBJSHRjYmlBZ0lDQWdJSGdnUFNCMGFHbHpRMjl3ZVZ0cFhWeHVJQ0FnSUNBZ2VTQTlJSFJoY21kbGRFTnZjSGxiYVYxY2JpQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdhV1lnS0hnZ1BDQjVLU0J5WlhSMWNtNGdMVEZjYmlBZ2FXWWdLSGtnUENCNEtTQnlaWFIxY200Z01WeHVJQ0J5WlhSMWNtNGdNRnh1ZlZ4dVhHNHZMeUJHYVc1a2N5QmxhWFJvWlhJZ2RHaGxJR1pwY25OMElHbHVaR1Y0SUc5bUlHQjJZV3hnSUdsdUlHQmlkV1ptWlhKZ0lHRjBJRzltWm5ObGRDQStQU0JnWW5sMFpVOW1abk5sZEdBc1hHNHZMeUJQVWlCMGFHVWdiR0Z6ZENCcGJtUmxlQ0J2WmlCZ2RtRnNZQ0JwYmlCZ1luVm1abVZ5WUNCaGRDQnZabVp6WlhRZ1BEMGdZR0o1ZEdWUFptWnpaWFJnTGx4dUx5OWNiaTh2SUVGeVozVnRaVzUwY3pwY2JpOHZJQzBnWW5WbVptVnlJQzBnWVNCQ2RXWm1aWElnZEc4Z2MyVmhjbU5vWEc0dkx5QXRJSFpoYkNBdElHRWdjM1J5YVc1bkxDQkNkV1ptWlhJc0lHOXlJRzUxYldKbGNseHVMeThnTFNCaWVYUmxUMlptYzJWMElDMGdZVzRnYVc1a1pYZ2dhVzUwYnlCZ1luVm1abVZ5WURzZ2QybHNiQ0JpWlNCamJHRnRjR1ZrSUhSdklHRnVJR2x1ZERNeVhHNHZMeUF0SUdWdVkyOWthVzVuSUMwZ1lXNGdiM0IwYVc5dVlXd2daVzVqYjJScGJtY3NJSEpsYkdWMllXNTBJR2x6SUhaaGJDQnBjeUJoSUhOMGNtbHVaMXh1THk4Z0xTQmthWElnTFNCMGNuVmxJR1p2Y2lCcGJtUmxlRTltTENCbVlXeHpaU0JtYjNJZ2JHRnpkRWx1WkdWNFQyWmNibVoxYm1OMGFXOXVJR0pwWkdseVpXTjBhVzl1WVd4SmJtUmxlRTltSUNoaWRXWm1aWElzSUhaaGJDd2dZbmwwWlU5bVpuTmxkQ3dnWlc1amIyUnBibWNzSUdScGNpa2dlMXh1SUNBdkx5QkZiWEIwZVNCaWRXWm1aWElnYldWaGJuTWdibThnYldGMFkyaGNiaUFnYVdZZ0tHSjFabVpsY2k1c1pXNW5kR2dnUFQwOUlEQXBJSEpsZEhWeWJpQXRNVnh1WEc0Z0lDOHZJRTV2Y20xaGJHbDZaU0JpZVhSbFQyWm1jMlYwWEc0Z0lHbG1JQ2gwZVhCbGIyWWdZbmwwWlU5bVpuTmxkQ0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNCbGJtTnZaR2x1WnlBOUlHSjVkR1ZQWm1aelpYUmNiaUFnSUNCaWVYUmxUMlptYzJWMElEMGdNRnh1SUNCOUlHVnNjMlVnYVdZZ0tHSjVkR1ZQWm1aelpYUWdQaUF3ZURkbVptWm1abVptS1NCN1hHNGdJQ0FnWW5sMFpVOW1abk5sZENBOUlEQjROMlptWm1abVptWmNiaUFnZlNCbGJITmxJR2xtSUNoaWVYUmxUMlptYzJWMElEd2dMVEI0T0RBd01EQXdNREFwSUh0Y2JpQWdJQ0JpZVhSbFQyWm1jMlYwSUQwZ0xUQjRPREF3TURBd01EQmNiaUFnZlZ4dUlDQmllWFJsVDJabWMyVjBJRDBnSzJKNWRHVlBabVp6WlhRZ0lDOHZJRU52WlhKalpTQjBieUJPZFcxaVpYSXVYRzRnSUdsbUlDaHBjMDVoVGloaWVYUmxUMlptYzJWMEtTa2dlMXh1SUNBZ0lDOHZJR0o1ZEdWUFptWnpaWFE2SUdsMElHbDBKM01nZFc1a1pXWnBibVZrTENCdWRXeHNMQ0JPWVU0c0lGd2labTl2WENJc0lHVjBZeXdnYzJWaGNtTm9JSGRvYjJ4bElHSjFabVpsY2x4dUlDQWdJR0o1ZEdWUFptWnpaWFFnUFNCa2FYSWdQeUF3SURvZ0tHSjFabVpsY2k1c1pXNW5kR2dnTFNBeEtWeHVJQ0I5WEc1Y2JpQWdMeThnVG05eWJXRnNhWHBsSUdKNWRHVlBabVp6WlhRNklHNWxaMkYwYVhabElHOW1abk5sZEhNZ2MzUmhjblFnWm5KdmJTQjBhR1VnWlc1a0lHOW1JSFJvWlNCaWRXWm1aWEpjYmlBZ2FXWWdLR0o1ZEdWUFptWnpaWFFnUENBd0tTQmllWFJsVDJabWMyVjBJRDBnWW5WbVptVnlMbXhsYm1kMGFDQXJJR0o1ZEdWUFptWnpaWFJjYmlBZ2FXWWdLR0o1ZEdWUFptWnpaWFFnUGowZ1luVm1abVZ5TG14bGJtZDBhQ2tnZTF4dUlDQWdJR2xtSUNoa2FYSXBJSEpsZEhWeWJpQXRNVnh1SUNBZ0lHVnNjMlVnWW5sMFpVOW1abk5sZENBOUlHSjFabVpsY2k1c1pXNW5kR2dnTFNBeFhHNGdJSDBnWld4elpTQnBaaUFvWW5sMFpVOW1abk5sZENBOElEQXBJSHRjYmlBZ0lDQnBaaUFvWkdseUtTQmllWFJsVDJabWMyVjBJRDBnTUZ4dUlDQWdJR1ZzYzJVZ2NtVjBkWEp1SUMweFhHNGdJSDFjYmx4dUlDQXZMeUJPYjNKdFlXeHBlbVVnZG1Gc1hHNGdJR2xtSUNoMGVYQmxiMllnZG1Gc0lEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJSFpoYkNBOUlFSjFabVpsY2k1bWNtOXRLSFpoYkN3Z1pXNWpiMlJwYm1jcFhHNGdJSDFjYmx4dUlDQXZMeUJHYVc1aGJHeDVMQ0J6WldGeVkyZ2daV2wwYUdWeUlHbHVaR1Y0VDJZZ0tHbG1JR1JwY2lCcGN5QjBjblZsS1NCdmNpQnNZWE4wU1c1a1pYaFBabHh1SUNCcFppQW9RblZtWm1WeUxtbHpRblZtWm1WeUtIWmhiQ2twSUh0Y2JpQWdJQ0F2THlCVGNHVmphV0ZzSUdOaGMyVTZJR3h2YjJ0cGJtY2dabTl5SUdWdGNIUjVJSE4wY21sdVp5OWlkV1ptWlhJZ1lXeDNZWGx6SUdaaGFXeHpYRzRnSUNBZ2FXWWdLSFpoYkM1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQXRNVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWVhKeVlYbEpibVJsZUU5bUtHSjFabVpsY2l3Z2RtRnNMQ0JpZVhSbFQyWm1jMlYwTENCbGJtTnZaR2x1Wnl3Z1pHbHlLVnh1SUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCMllXd2dQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnZG1Gc0lEMGdkbUZzSUNZZ01IaEdSaUF2THlCVFpXRnlZMmdnWm05eUlHRWdZbmwwWlNCMllXeDFaU0JiTUMweU5UVmRYRzRnSUNBZ2FXWWdLRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVJQ1ltWEc0Z0lDQWdJQ0FnSUhSNWNHVnZaaUJWYVc1ME9FRnljbUY1TG5CeWIzUnZkSGx3WlM1cGJtUmxlRTltSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0JwWmlBb1pHbHlLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJWYVc1ME9FRnljbUY1TG5CeWIzUnZkSGx3WlM1cGJtUmxlRTltTG1OaGJHd29ZblZtWm1WeUxDQjJZV3dzSUdKNWRHVlBabVp6WlhRcFhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVldsdWREaEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWJHRnpkRWx1WkdWNFQyWXVZMkZzYkNoaWRXWm1aWElzSUhaaGJDd2dZbmwwWlU5bVpuTmxkQ2xjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdGeWNtRjVTVzVrWlhoUFppaGlkV1ptWlhJc0lGc2dkbUZzSUYwc0lHSjVkR1ZQWm1aelpYUXNJR1Z1WTI5a2FXNW5MQ0JrYVhJcFhHNGdJSDFjYmx4dUlDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2QyWVd3Z2JYVnpkQ0JpWlNCemRISnBibWNzSUc1MWJXSmxjaUJ2Y2lCQ2RXWm1aWEluS1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJoY25KaGVVbHVaR1Y0VDJZZ0tHRnljaXdnZG1Gc0xDQmllWFJsVDJabWMyVjBMQ0JsYm1OdlpHbHVaeXdnWkdseUtTQjdYRzRnSUhaaGNpQnBibVJsZUZOcGVtVWdQU0F4WEc0Z0lIWmhjaUJoY25KTVpXNW5kR2dnUFNCaGNuSXViR1Z1WjNSb1hHNGdJSFpoY2lCMllXeE1aVzVuZEdnZ1BTQjJZV3d1YkdWdVozUm9YRzVjYmlBZ2FXWWdLR1Z1WTI5a2FXNW5JQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNCbGJtTnZaR2x1WnlBOUlGTjBjbWx1WnlobGJtTnZaR2x1WnlrdWRHOU1iM2RsY2tOaGMyVW9LVnh1SUNBZ0lHbG1JQ2hsYm1OdlpHbHVaeUE5UFQwZ0ozVmpjekluSUh4OElHVnVZMjlrYVc1bklEMDlQU0FuZFdOekxUSW5JSHg4WEc0Z0lDQWdJQ0FnSUdWdVkyOWthVzVuSUQwOVBTQW5kWFJtTVRac1pTY2dmSHdnWlc1amIyUnBibWNnUFQwOUlDZDFkR1l0TVRac1pTY3BJSHRjYmlBZ0lDQWdJR2xtSUNoaGNuSXViR1Z1WjNSb0lEd2dNaUI4ZkNCMllXd3ViR1Z1WjNSb0lEd2dNaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnTFRGY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsdVpHVjRVMmw2WlNBOUlESmNiaUFnSUNBZ0lHRnlja3hsYm1kMGFDQXZQU0F5WEc0Z0lDQWdJQ0IyWVd4TVpXNW5kR2dnTHowZ01seHVJQ0FnSUNBZ1lubDBaVTltWm5ObGRDQXZQU0F5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWm5WdVkzUnBiMjRnY21WaFpDQW9ZblZtTENCcEtTQjdYRzRnSUNBZ2FXWWdLR2x1WkdWNFUybDZaU0E5UFQwZ01Ta2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHSjFabHRwWFZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1luVm1MbkpsWVdSVlNXNTBNVFpDUlNocElDb2dhVzVrWlhoVGFYcGxLVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFpoY2lCcFhHNGdJR2xtSUNoa2FYSXBJSHRjYmlBZ0lDQjJZWElnWm05MWJtUkpibVJsZUNBOUlDMHhYRzRnSUNBZ1ptOXlJQ2hwSUQwZ1lubDBaVTltWm5ObGREc2dhU0E4SUdGeWNreGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb2NtVmhaQ2hoY25Jc0lHa3BJRDA5UFNCeVpXRmtLSFpoYkN3Z1ptOTFibVJKYm1SbGVDQTlQVDBnTFRFZ1B5QXdJRG9nYVNBdElHWnZkVzVrU1c1a1pYZ3BLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaG1iM1Z1WkVsdVpHVjRJRDA5UFNBdE1Ta2dabTkxYm1SSmJtUmxlQ0E5SUdsY2JpQWdJQ0FnSUNBZ2FXWWdLR2tnTFNCbWIzVnVaRWx1WkdWNElDc2dNU0E5UFQwZ2RtRnNUR1Z1WjNSb0tTQnlaWFIxY200Z1ptOTFibVJKYm1SbGVDQXFJR2x1WkdWNFUybDZaVnh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dadmRXNWtTVzVrWlhnZ0lUMDlJQzB4S1NCcElDMDlJR2tnTFNCbWIzVnVaRWx1WkdWNFhHNGdJQ0FnSUNBZ0lHWnZkVzVrU1c1a1pYZ2dQU0F0TVZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JwWmlBb1lubDBaVTltWm5ObGRDQXJJSFpoYkV4bGJtZDBhQ0ErSUdGeWNreGxibWQwYUNrZ1lubDBaVTltWm5ObGRDQTlJR0Z5Y2t4bGJtZDBhQ0F0SUhaaGJFeGxibWQwYUZ4dUlDQWdJR1p2Y2lBb2FTQTlJR0o1ZEdWUFptWnpaWFE3SUdrZ1BqMGdNRHNnYVMwdEtTQjdYRzRnSUNBZ0lDQjJZWElnWm05MWJtUWdQU0IwY25WbFhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcUlEMGdNRHNnYWlBOElIWmhiRXhsYm1kMGFEc2dhaXNyS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WldGa0tHRnljaXdnYVNBcklHb3BJQ0U5UFNCeVpXRmtLSFpoYkN3Z2Fpa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbWIzVnVaQ0E5SUdaaGJITmxYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dadmRXNWtLU0J5WlhSMWNtNGdhVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQXRNVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExtbHVZMngxWkdWeklEMGdablZ1WTNScGIyNGdhVzVqYkhWa1pYTWdLSFpoYkN3Z1lubDBaVTltWm5ObGRDd2daVzVqYjJScGJtY3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVhVzVrWlhoUFppaDJZV3dzSUdKNWRHVlBabVp6WlhRc0lHVnVZMjlrYVc1bktTQWhQVDBnTFRGY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzVwYm1SbGVFOW1JRDBnWm5WdVkzUnBiMjRnYVc1a1pYaFBaaUFvZG1Gc0xDQmllWFJsVDJabWMyVjBMQ0JsYm1OdlpHbHVaeWtnZTF4dUlDQnlaWFIxY200Z1ltbGthWEpsWTNScGIyNWhiRWx1WkdWNFQyWW9kR2hwY3l3Z2RtRnNMQ0JpZVhSbFQyWm1jMlYwTENCbGJtTnZaR2x1Wnl3Z2RISjFaU2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXNZWE4wU1c1a1pYaFBaaUE5SUdaMWJtTjBhVzl1SUd4aGMzUkpibVJsZUU5bUlDaDJZV3dzSUdKNWRHVlBabVp6WlhRc0lHVnVZMjlrYVc1bktTQjdYRzRnSUhKbGRIVnliaUJpYVdScGNtVmpkR2x2Ym1Gc1NXNWtaWGhQWmloMGFHbHpMQ0IyWVd3c0lHSjVkR1ZQWm1aelpYUXNJR1Z1WTI5a2FXNW5MQ0JtWVd4elpTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FHVjRWM0pwZEdVZ0tHSjFaaXdnYzNSeWFXNW5MQ0J2Wm1aelpYUXNJR3hsYm1kMGFDa2dlMXh1SUNCdlptWnpaWFFnUFNCT2RXMWlaWElvYjJabWMyVjBLU0I4ZkNBd1hHNGdJSFpoY2lCeVpXMWhhVzVwYm1jZ1BTQmlkV1l1YkdWdVozUm9JQzBnYjJabWMyVjBYRzRnSUdsbUlDZ2hiR1Z1WjNSb0tTQjdYRzRnSUNBZ2JHVnVaM1JvSUQwZ2NtVnRZV2x1YVc1blhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2JHVnVaM1JvSUQwZ1RuVnRZbVZ5S0d4bGJtZDBhQ2xjYmlBZ0lDQnBaaUFvYkdWdVozUm9JRDRnY21WdFlXbHVhVzVuS1NCN1hHNGdJQ0FnSUNCc1pXNW5kR2dnUFNCeVpXMWhhVzVwYm1kY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5QnRkWE4wSUdKbElHRnVJR1YyWlc0Z2JuVnRZbVZ5SUc5bUlHUnBaMmwwYzF4dUlDQjJZWElnYzNSeVRHVnVJRDBnYzNSeWFXNW5MbXhsYm1kMGFGeHVJQ0JwWmlBb2MzUnlUR1Z1SUNVZ01pQWhQVDBnTUNrZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25TVzUyWVd4cFpDQm9aWGdnYzNSeWFXNW5KeWxjYmx4dUlDQnBaaUFvYkdWdVozUm9JRDRnYzNSeVRHVnVJQzhnTWlrZ2UxeHVJQ0FnSUd4bGJtZDBhQ0E5SUhOMGNreGxiaUF2SURKY2JpQWdmVnh1SUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHeGxibWQwYURzZ0t5dHBLU0I3WEc0Z0lDQWdkbUZ5SUhCaGNuTmxaQ0E5SUhCaGNuTmxTVzUwS0hOMGNtbHVaeTV6ZFdKemRISW9hU0FxSURJc0lESXBMQ0F4TmlsY2JpQWdJQ0JwWmlBb2FYTk9ZVTRvY0dGeWMyVmtLU2tnY21WMGRYSnVJR2xjYmlBZ0lDQmlkV1piYjJabWMyVjBJQ3NnYVYwZ1BTQndZWEp6WldSY2JpQWdmVnh1SUNCeVpYUjFjbTRnYVZ4dWZWeHVYRzVtZFc1amRHbHZiaUIxZEdZNFYzSnBkR1VnS0dKMVppd2djM1J5YVc1bkxDQnZabVp6WlhRc0lHeGxibWQwYUNrZ2UxeHVJQ0J5WlhSMWNtNGdZbXhwZEVKMVptWmxjaWgxZEdZNFZHOUNlWFJsY3loemRISnBibWNzSUdKMVppNXNaVzVuZEdnZ0xTQnZabVp6WlhRcExDQmlkV1lzSUc5bVpuTmxkQ3dnYkdWdVozUm9LVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjMk5wYVZkeWFYUmxJQ2hpZFdZc0lITjBjbWx1Wnl3Z2IyWm1jMlYwTENCc1pXNW5kR2dwSUh0Y2JpQWdjbVYwZFhKdUlHSnNhWFJDZFdabVpYSW9ZWE5qYVdsVWIwSjVkR1Z6S0hOMGNtbHVaeWtzSUdKMVppd2diMlptYzJWMExDQnNaVzVuZEdncFhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4aGRHbHVNVmR5YVhSbElDaGlkV1lzSUhOMGNtbHVaeXdnYjJabWMyVjBMQ0JzWlc1bmRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUdGelkybHBWM0pwZEdVb1luVm1MQ0J6ZEhKcGJtY3NJRzltWm5ObGRDd2diR1Z1WjNSb0tWeHVmVnh1WEc1bWRXNWpkR2x2YmlCaVlYTmxOalJYY21sMFpTQW9ZblZtTENCemRISnBibWNzSUc5bVpuTmxkQ3dnYkdWdVozUm9LU0I3WEc0Z0lISmxkSFZ5YmlCaWJHbDBRblZtWm1WeUtHSmhjMlUyTkZSdlFubDBaWE1vYzNSeWFXNW5LU3dnWW5WbUxDQnZabVp6WlhRc0lHeGxibWQwYUNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnZFdOek1sZHlhWFJsSUNoaWRXWXNJSE4wY21sdVp5d2diMlptYzJWMExDQnNaVzVuZEdncElIdGNiaUFnY21WMGRYSnVJR0pzYVhSQ2RXWm1aWElvZFhSbU1UWnNaVlJ2UW5sMFpYTW9jM1J5YVc1bkxDQmlkV1l1YkdWdVozUm9JQzBnYjJabWMyVjBLU3dnWW5WbUxDQnZabVp6WlhRc0lHeGxibWQwYUNsY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzUzY21sMFpTQTlJR1oxYm1OMGFXOXVJSGR5YVhSbElDaHpkSEpwYm1jc0lHOW1abk5sZEN3Z2JHVnVaM1JvTENCbGJtTnZaR2x1WnlrZ2UxeHVJQ0F2THlCQ2RXWm1aWElqZDNKcGRHVW9jM1J5YVc1bktWeHVJQ0JwWmlBb2IyWm1jMlYwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQmxibU52WkdsdVp5QTlJQ2QxZEdZNEoxeHVJQ0FnSUd4bGJtZDBhQ0E5SUhSb2FYTXViR1Z1WjNSb1hHNGdJQ0FnYjJabWMyVjBJRDBnTUZ4dUlDQXZMeUJDZFdabVpYSWpkM0pwZEdVb2MzUnlhVzVuTENCbGJtTnZaR2x1WnlsY2JpQWdmU0JsYkhObElHbG1JQ2hzWlc1bmRHZ2dQVDA5SUhWdVpHVm1hVzVsWkNBbUppQjBlWEJsYjJZZ2IyWm1jMlYwSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lHVnVZMjlrYVc1bklEMGdiMlptYzJWMFhHNGdJQ0FnYkdWdVozUm9JRDBnZEdocGN5NXNaVzVuZEdoY2JpQWdJQ0J2Wm1aelpYUWdQU0F3WEc0Z0lDOHZJRUoxWm1abGNpTjNjbWwwWlNoemRISnBibWNzSUc5bVpuTmxkRnNzSUd4bGJtZDBhRjFiTENCbGJtTnZaR2x1WjEwcFhHNGdJSDBnWld4elpTQnBaaUFvYVhOR2FXNXBkR1VvYjJabWMyVjBLU2tnZTF4dUlDQWdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ0lDQnBaaUFvYVhOR2FXNXBkR1VvYkdWdVozUm9LU2tnZTF4dUlDQWdJQ0FnYkdWdVozUm9JRDBnYkdWdVozUm9JSHdnTUZ4dUlDQWdJQ0FnYVdZZ0tHVnVZMjlrYVc1bklEMDlQU0IxYm1SbFptbHVaV1FwSUdWdVkyOWthVzVuSUQwZ0ozVjBaamduWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHVnVZMjlrYVc1bklEMGdiR1Z1WjNSb1hHNGdJQ0FnSUNCc1pXNW5kR2dnUFNCMWJtUmxabWx1WldSY2JpQWdJQ0I5WEc0Z0lDOHZJR3hsWjJGamVTQjNjbWwwWlNoemRISnBibWNzSUdWdVkyOWthVzVuTENCdlptWnpaWFFzSUd4bGJtZDBhQ2tnTFNCeVpXMXZkbVVnYVc0Z2RqQXVNVE5jYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQW5RblZtWm1WeUxuZHlhWFJsS0hOMGNtbHVaeXdnWlc1amIyUnBibWNzSUc5bVpuTmxkRnNzSUd4bGJtZDBhRjBwSUdseklHNXZJR3h2Ym1kbGNpQnpkWEJ3YjNKMFpXUW5YRzRnSUNBZ0tWeHVJQ0I5WEc1Y2JpQWdkbUZ5SUhKbGJXRnBibWx1WnlBOUlIUm9hWE11YkdWdVozUm9JQzBnYjJabWMyVjBYRzRnSUdsbUlDaHNaVzVuZEdnZ1BUMDlJSFZ1WkdWbWFXNWxaQ0I4ZkNCc1pXNW5kR2dnUGlCeVpXMWhhVzVwYm1jcElHeGxibWQwYUNBOUlISmxiV0ZwYm1sdVoxeHVYRzRnSUdsbUlDZ29jM1J5YVc1bkxteGxibWQwYUNBK0lEQWdKaVlnS0d4bGJtZDBhQ0E4SURBZ2ZId2diMlptYzJWMElEd2dNQ2twSUh4OElHOW1abk5sZENBK0lIUm9hWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvSjBGMGRHVnRjSFFnZEc4Z2QzSnBkR1VnYjNWMGMybGtaU0JpZFdabVpYSWdZbTkxYm1Sekp5bGNiaUFnZlZ4dVhHNGdJR2xtSUNnaFpXNWpiMlJwYm1jcElHVnVZMjlrYVc1bklEMGdKM1YwWmpnblhHNWNiaUFnZG1GeUlHeHZkMlZ5WldSRFlYTmxJRDBnWm1Gc2MyVmNiaUFnWm05eUlDZzdPeWtnZTF4dUlDQWdJSE4zYVhSamFDQW9aVzVqYjJScGJtY3BJSHRjYmlBZ0lDQWdJR05oYzJVZ0oyaGxlQ2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJvWlhoWGNtbDBaU2gwYUdsekxDQnpkSEpwYm1jc0lHOW1abk5sZEN3Z2JHVnVaM1JvS1Z4dVhHNGdJQ0FnSUNCallYTmxJQ2QxZEdZNEp6cGNiaUFnSUNBZ0lHTmhjMlVnSjNWMFppMDRKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFYwWmpoWGNtbDBaU2gwYUdsekxDQnpkSEpwYm1jc0lHOW1abk5sZEN3Z2JHVnVaM1JvS1Z4dVhHNGdJQ0FnSUNCallYTmxJQ2RoYzJOcGFTYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhjMk5wYVZkeWFYUmxLSFJvYVhNc0lITjBjbWx1Wnl3Z2IyWm1jMlYwTENCc1pXNW5kR2dwWEc1Y2JpQWdJQ0FnSUdOaGMyVWdKMnhoZEdsdU1TYzZYRzRnSUNBZ0lDQmpZWE5sSUNkaWFXNWhjbmtuT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYkdGMGFXNHhWM0pwZEdVb2RHaHBjeXdnYzNSeWFXNW5MQ0J2Wm1aelpYUXNJR3hsYm1kMGFDbGNibHh1SUNBZ0lDQWdZMkZ6WlNBblltRnpaVFkwSnpwY2JpQWdJQ0FnSUNBZ0x5OGdWMkZ5Ym1sdVp6b2diV0Y0VEdWdVozUm9JRzV2ZENCMFlXdGxiaUJwYm5SdklHRmpZMjkxYm5RZ2FXNGdZbUZ6WlRZMFYzSnBkR1ZjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0poYzJVMk5GZHlhWFJsS0hSb2FYTXNJSE4wY21sdVp5d2diMlptYzJWMExDQnNaVzVuZEdncFhHNWNiaUFnSUNBZ0lHTmhjMlVnSjNWamN6SW5PbHh1SUNBZ0lDQWdZMkZ6WlNBbmRXTnpMVEluT2x4dUlDQWdJQ0FnWTJGelpTQW5kWFJtTVRac1pTYzZYRzRnSUNBZ0lDQmpZWE5sSUNkMWRHWXRNVFpzWlNjNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMVkzTXlWM0pwZEdVb2RHaHBjeXdnYzNSeWFXNW5MQ0J2Wm1aelpYUXNJR3hsYm1kMGFDbGNibHh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdhV1lnS0d4dmQyVnlaV1JEWVhObEtTQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RWYm10dWIzZHVJR1Z1WTI5a2FXNW5PaUFuSUNzZ1pXNWpiMlJwYm1jcFhHNGdJQ0FnSUNBZ0lHVnVZMjlrYVc1bklEMGdLQ2NuSUNzZ1pXNWpiMlJwYm1jcExuUnZURzkzWlhKRFlYTmxLQ2xjYmlBZ0lDQWdJQ0FnYkc5M1pYSmxaRU5oYzJVZ1BTQjBjblZsWEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1ZEc5S1UwOU9JRDBnWm5WdVkzUnBiMjRnZEc5S1UwOU9JQ2dwSUh0Y2JpQWdjbVYwZFhKdUlIdGNiaUFnSUNCMGVYQmxPaUFuUW5WbVptVnlKeXhjYmlBZ0lDQmtZWFJoT2lCQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoMGFHbHpMbDloY25JZ2ZId2dkR2hwY3l3Z01DbGNiaUFnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJpWVhObE5qUlRiR2xqWlNBb1luVm1MQ0J6ZEdGeWRDd2daVzVrS1NCN1hHNGdJR2xtSUNoemRHRnlkQ0E5UFQwZ01DQW1KaUJsYm1RZ1BUMDlJR0oxWmk1c1pXNW5kR2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZbUZ6WlRZMExtWnliMjFDZVhSbFFYSnlZWGtvWW5WbUtWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCaVlYTmxOalF1Wm5KdmJVSjVkR1ZCY25KaGVTaGlkV1l1YzJ4cFkyVW9jM1JoY25Rc0lHVnVaQ2twWEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2RYUm1PRk5zYVdObElDaGlkV1lzSUhOMFlYSjBMQ0JsYm1RcElIdGNiaUFnWlc1a0lEMGdUV0YwYUM1dGFXNG9ZblZtTG14bGJtZDBhQ3dnWlc1a0tWeHVJQ0IyWVhJZ2NtVnpJRDBnVzExY2JseHVJQ0IyWVhJZ2FTQTlJSE4wWVhKMFhHNGdJSGRvYVd4bElDaHBJRHdnWlc1a0tTQjdYRzRnSUNBZ2RtRnlJR1pwY25OMFFubDBaU0E5SUdKMVpsdHBYVnh1SUNBZ0lIWmhjaUJqYjJSbFVHOXBiblFnUFNCdWRXeHNYRzRnSUNBZ2RtRnlJR0o1ZEdWelVHVnlVMlZ4ZFdWdVkyVWdQU0FvWm1seWMzUkNlWFJsSUQ0Z01IaEZSaWtnUHlBMFhHNGdJQ0FnSUNBNklDaG1hWEp6ZEVKNWRHVWdQaUF3ZUVSR0tTQS9JRE5jYmlBZ0lDQWdJRG9nS0dacGNuTjBRbmwwWlNBK0lEQjRRa1lwSUQ4Z01seHVJQ0FnSUNBZ09pQXhYRzVjYmlBZ0lDQnBaaUFvYVNBcklHSjVkR1Z6VUdWeVUyVnhkV1Z1WTJVZ1BEMGdaVzVrS1NCN1hHNGdJQ0FnSUNCMllYSWdjMlZqYjI1a1FubDBaU3dnZEdocGNtUkNlWFJsTENCbWIzVnlkR2hDZVhSbExDQjBaVzF3UTI5a1pWQnZhVzUwWEc1Y2JpQWdJQ0FnSUhOM2FYUmphQ0FvWW5sMFpYTlFaWEpUWlhGMVpXNWpaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1pwY25OMFFubDBaU0E4SURCNE9EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZaR1ZRYjJsdWRDQTlJR1pwY25OMFFubDBaVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQmljbVZoYTF4dUlDQWdJQ0FnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0FnSUNBZ2MyVmpiMjVrUW5sMFpTQTlJR0oxWmx0cElDc2dNVjFjYmlBZ0lDQWdJQ0FnSUNCcFppQW9LSE5sWTI5dVpFSjVkR1VnSmlBd2VFTXdLU0E5UFQwZ01IZzRNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR1Z0Y0VOdlpHVlFiMmx1ZENBOUlDaG1hWEp6ZEVKNWRHVWdKaUF3ZURGR0tTQThQQ0F3ZURZZ2ZDQW9jMlZqYjI1a1FubDBaU0FtSURCNE0wWXBYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR1Z0Y0VOdlpHVlFiMmx1ZENBK0lEQjROMFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5a1pWQnZhVzUwSUQwZ2RHVnRjRU52WkdWUWIybHVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQWdJQ0FnYzJWamIyNWtRbmwwWlNBOUlHSjFabHRwSUNzZ01WMWNiaUFnSUNBZ0lDQWdJQ0IwYUdseVpFSjVkR1VnUFNCaWRXWmJhU0FySURKZFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NoelpXTnZibVJDZVhSbElDWWdNSGhETUNrZ1BUMDlJREI0T0RBZ0ppWWdLSFJvYVhKa1FubDBaU0FtSURCNFF6QXBJRDA5UFNBd2VEZ3dLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaVzF3UTI5a1pWQnZhVzUwSUQwZ0tHWnBjbk4wUW5sMFpTQW1JREI0UmlrZ1BEd2dNSGhESUh3Z0tITmxZMjl1WkVKNWRHVWdKaUF3ZUROR0tTQThQQ0F3ZURZZ2ZDQW9kR2hwY21SQ2VYUmxJQ1lnTUhnelJpbGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBaVzF3UTI5a1pWQnZhVzUwSUQ0Z01IZzNSa1lnSmlZZ0tIUmxiWEJEYjJSbFVHOXBiblFnUENBd2VFUTRNREFnZkh3Z2RHVnRjRU52WkdWUWIybHVkQ0ErSURCNFJFWkdSaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5a1pWQnZhVzUwSUQwZ2RHVnRjRU52WkdWUWIybHVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQWdJQ0FnYzJWamIyNWtRbmwwWlNBOUlHSjFabHRwSUNzZ01WMWNiaUFnSUNBZ0lDQWdJQ0IwYUdseVpFSjVkR1VnUFNCaWRXWmJhU0FySURKZFhHNGdJQ0FnSUNBZ0lDQWdabTkxY25Sb1FubDBaU0E5SUdKMVpsdHBJQ3NnTTExY2JpQWdJQ0FnSUNBZ0lDQnBaaUFvS0hObFkyOXVaRUo1ZEdVZ0ppQXdlRU13S1NBOVBUMGdNSGc0TUNBbUppQW9kR2hwY21SQ2VYUmxJQ1lnTUhoRE1Da2dQVDA5SURCNE9EQWdKaVlnS0dadmRYSjBhRUo1ZEdVZ0ppQXdlRU13S1NBOVBUMGdNSGc0TUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdWdGNFTnZaR1ZRYjJsdWRDQTlJQ2htYVhKemRFSjVkR1VnSmlBd2VFWXBJRHc4SURCNE1USWdmQ0FvYzJWamIyNWtRbmwwWlNBbUlEQjRNMFlwSUR3OElEQjRReUI4SUNoMGFHbHlaRUo1ZEdVZ0ppQXdlRE5HS1NBOFBDQXdlRFlnZkNBb1ptOTFjblJvUW5sMFpTQW1JREI0TTBZcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHVnRjRU52WkdWUWIybHVkQ0ErSURCNFJrWkdSaUFtSmlCMFpXMXdRMjlrWlZCdmFXNTBJRHdnTUhneE1UQXdNREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5a1pWQnZhVzUwSUQwZ2RHVnRjRU52WkdWUWIybHVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWTI5a1pWQnZhVzUwSUQwOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBdkx5QjNaU0JrYVdRZ2JtOTBJR2RsYm1WeVlYUmxJR0VnZG1Gc2FXUWdZMjlrWlZCdmFXNTBJSE52SUdsdWMyVnlkQ0JoWEc0Z0lDQWdJQ0F2THlCeVpYQnNZV05sYldWdWRDQmphR0Z5SUNoVkswWkdSa1FwSUdGdVpDQmhaSFpoYm1ObElHOXViSGtnTVNCaWVYUmxYRzRnSUNBZ0lDQmpiMlJsVUc5cGJuUWdQU0F3ZUVaR1JrUmNiaUFnSUNBZ0lHSjVkR1Z6VUdWeVUyVnhkV1Z1WTJVZ1BTQXhYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMlJsVUc5cGJuUWdQaUF3ZUVaR1JrWXBJSHRjYmlBZ0lDQWdJQzh2SUdWdVkyOWtaU0IwYnlCMWRHWXhOaUFvYzNWeWNtOW5ZWFJsSUhCaGFYSWdaR0Z1WTJVcFhHNGdJQ0FnSUNCamIyUmxVRzlwYm5RZ0xUMGdNSGd4TURBd01GeHVJQ0FnSUNBZ2NtVnpMbkIxYzJnb1kyOWtaVkJ2YVc1MElENCtQaUF4TUNBbUlEQjRNMFpHSUh3Z01IaEVPREF3S1Z4dUlDQWdJQ0FnWTI5a1pWQnZhVzUwSUQwZ01IaEVRekF3SUh3Z1kyOWtaVkJ2YVc1MElDWWdNSGd6UmtaY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhNdWNIVnphQ2hqYjJSbFVHOXBiblFwWEc0Z0lDQWdhU0FyUFNCaWVYUmxjMUJsY2xObGNYVmxibU5sWEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWkdWamIyUmxRMjlrWlZCdmFXNTBjMEZ5Y21GNUtISmxjeWxjYm4xY2JseHVMeThnUW1GelpXUWdiMjRnYUhSMGNEb3ZMM04wWVdOcmIzWmxjbVpzYjNjdVkyOXRMMkV2TWpJM05EY3lOekl2Tmpnd056UXlMQ0IwYUdVZ1luSnZkM05sY2lCM2FYUm9YRzR2THlCMGFHVWdiRzkzWlhOMElHeHBiV2wwSUdseklFTm9jbTl0WlN3Z2QybDBhQ0F3ZURFd01EQXdJR0Z5WjNNdVhHNHZMeUJYWlNCbmJ5QXhJRzFoWjI1cGRIVmtaU0JzWlhOekxDQm1iM0lnYzJGbVpYUjVYRzUyWVhJZ1RVRllYMEZTUjFWTlJVNVVVMTlNUlU1SFZFZ2dQU0F3ZURFd01EQmNibHh1Wm5WdVkzUnBiMjRnWkdWamIyUmxRMjlrWlZCdmFXNTBjMEZ5Y21GNUlDaGpiMlJsVUc5cGJuUnpLU0I3WEc0Z0lIWmhjaUJzWlc0Z1BTQmpiMlJsVUc5cGJuUnpMbXhsYm1kMGFGeHVJQ0JwWmlBb2JHVnVJRHc5SUUxQldGOUJVa2RWVFVWT1ZGTmZURVZPUjFSSUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUZOMGNtbHVaeTVtY205dFEyaGhja052WkdVdVlYQndiSGtvVTNSeWFXNW5MQ0JqYjJSbFVHOXBiblJ6S1NBdkx5QmhkbTlwWkNCbGVIUnlZU0J6YkdsalpTZ3BYRzRnSUgxY2JseHVJQ0F2THlCRVpXTnZaR1VnYVc0Z1kyaDFibXR6SUhSdklHRjJiMmxrSUZ3aVkyRnNiQ0J6ZEdGamF5QnphWHBsSUdWNFkyVmxaR1ZrWENJdVhHNGdJSFpoY2lCeVpYTWdQU0FuSjF4dUlDQjJZWElnYVNBOUlEQmNiaUFnZDJocGJHVWdLR2tnUENCc1pXNHBJSHRjYmlBZ0lDQnlaWE1nS3owZ1UzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTNWhjSEJzZVNoY2JpQWdJQ0FnSUZOMGNtbHVaeXhjYmlBZ0lDQWdJR052WkdWUWIybHVkSE11YzJ4cFkyVW9hU3dnYVNBclBTQk5RVmhmUVZKSFZVMUZUbFJUWDB4RlRrZFVTQ2xjYmlBZ0lDQXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlISmxjMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjMk5wYVZOc2FXTmxJQ2hpZFdZc0lITjBZWEowTENCbGJtUXBJSHRjYmlBZ2RtRnlJSEpsZENBOUlDY25YRzRnSUdWdVpDQTlJRTFoZEdndWJXbHVLR0oxWmk1c1pXNW5kR2dzSUdWdVpDbGNibHh1SUNCbWIzSWdLSFpoY2lCcElEMGdjM1JoY25RN0lHa2dQQ0JsYm1RN0lDc3JhU2tnZTF4dUlDQWdJSEpsZENBclBTQlRkSEpwYm1jdVpuSnZiVU5vWVhKRGIyUmxLR0oxWmx0cFhTQW1JREI0TjBZcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhKbGRGeHVmVnh1WEc1bWRXNWpkR2x2YmlCc1lYUnBiakZUYkdsalpTQW9ZblZtTENCemRHRnlkQ3dnWlc1a0tTQjdYRzRnSUhaaGNpQnlaWFFnUFNBbkoxeHVJQ0JsYm1RZ1BTQk5ZWFJvTG0xcGJpaGlkV1l1YkdWdVozUm9MQ0JsYm1RcFhHNWNiaUFnWm05eUlDaDJZWElnYVNBOUlITjBZWEowT3lCcElEd2daVzVrT3lBcksya3BJSHRjYmlBZ0lDQnlaWFFnS3owZ1UzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTaGlkV1piYVYwcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhKbGRGeHVmVnh1WEc1bWRXNWpkR2x2YmlCb1pYaFRiR2xqWlNBb1luVm1MQ0J6ZEdGeWRDd2daVzVrS1NCN1hHNGdJSFpoY2lCc1pXNGdQU0JpZFdZdWJHVnVaM1JvWEc1Y2JpQWdhV1lnS0NGemRHRnlkQ0I4ZkNCemRHRnlkQ0E4SURBcElITjBZWEowSUQwZ01GeHVJQ0JwWmlBb0lXVnVaQ0I4ZkNCbGJtUWdQQ0F3SUh4OElHVnVaQ0ErSUd4bGJpa2daVzVrSUQwZ2JHVnVYRzVjYmlBZ2RtRnlJRzkxZENBOUlDY25YRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQnpkR0Z5ZERzZ2FTQThJR1Z1WkRzZ0t5dHBLU0I3WEc0Z0lDQWdiM1YwSUNzOUlIUnZTR1Y0S0dKMVpsdHBYU2xjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiM1YwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFYwWmpFMmJHVlRiR2xqWlNBb1luVm1MQ0J6ZEdGeWRDd2daVzVrS1NCN1hHNGdJSFpoY2lCaWVYUmxjeUE5SUdKMVppNXpiR2xqWlNoemRHRnlkQ3dnWlc1a0tWeHVJQ0IyWVhJZ2NtVnpJRDBnSnlkY2JpQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JpZVhSbGN5NXNaVzVuZEdnN0lHa2dLejBnTWlrZ2UxeHVJQ0FnSUhKbGN5QXJQU0JUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0dKNWRHVnpXMmxkSUNzZ1lubDBaWE5iYVNBcklERmRJQ29nTWpVMktWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCeVpYTmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1emJHbGpaU0E5SUdaMWJtTjBhVzl1SUhOc2FXTmxJQ2h6ZEdGeWRDd2daVzVrS1NCN1hHNGdJSFpoY2lCc1pXNGdQU0IwYUdsekxteGxibWQwYUZ4dUlDQnpkR0Z5ZENBOUlINStjM1JoY25SY2JpQWdaVzVrSUQwZ1pXNWtJRDA5UFNCMWJtUmxabWx1WldRZ1B5QnNaVzRnT2lCK2ZtVnVaRnh1WEc0Z0lHbG1JQ2h6ZEdGeWRDQThJREFwSUh0Y2JpQWdJQ0J6ZEdGeWRDQXJQU0JzWlc1Y2JpQWdJQ0JwWmlBb2MzUmhjblFnUENBd0tTQnpkR0Z5ZENBOUlEQmNiaUFnZlNCbGJITmxJR2xtSUNoemRHRnlkQ0ErSUd4bGJpa2dlMXh1SUNBZ0lITjBZWEowSUQwZ2JHVnVYRzRnSUgxY2JseHVJQ0JwWmlBb1pXNWtJRHdnTUNrZ2UxeHVJQ0FnSUdWdVpDQXJQU0JzWlc1Y2JpQWdJQ0JwWmlBb1pXNWtJRHdnTUNrZ1pXNWtJRDBnTUZ4dUlDQjlJR1ZzYzJVZ2FXWWdLR1Z1WkNBK0lHeGxiaWtnZTF4dUlDQWdJR1Z1WkNBOUlHeGxibHh1SUNCOVhHNWNiaUFnYVdZZ0tHVnVaQ0E4SUhOMFlYSjBLU0JsYm1RZ1BTQnpkR0Z5ZEZ4dVhHNGdJSFpoY2lCdVpYZENkV1pjYmlBZ2FXWWdLRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVLU0I3WEc0Z0lDQWdibVYzUW5WbUlEMGdkR2hwY3k1emRXSmhjbkpoZVNoemRHRnlkQ3dnWlc1a0tWeHVJQ0FnSUc1bGQwSjFaaTVmWDNCeWIzUnZYMThnUFNCQ2RXWm1aWEl1Y0hKdmRHOTBlWEJsWEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnZG1GeUlITnNhV05sVEdWdUlEMGdaVzVrSUMwZ2MzUmhjblJjYmlBZ0lDQnVaWGRDZFdZZ1BTQnVaWGNnUW5WbVptVnlLSE5zYVdObFRHVnVMQ0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J6YkdsalpVeGxianNnS3l0cEtTQjdYRzRnSUNBZ0lDQnVaWGRDZFdaYmFWMGdQU0IwYUdselcya2dLeUJ6ZEdGeWRGMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtVjNRblZtWEc1OVhHNWNiaThxWEc0Z0tpQk9aV1ZrSUhSdklHMWhhMlVnYzNWeVpTQjBhR0YwSUdKMVptWmxjaUJwYzI0bmRDQjBjbmxwYm1jZ2RHOGdkM0pwZEdVZ2IzVjBJRzltSUdKdmRXNWtjeTVjYmlBcUwxeHVablZ1WTNScGIyNGdZMmhsWTJ0UFptWnpaWFFnS0c5bVpuTmxkQ3dnWlhoMExDQnNaVzVuZEdncElIdGNiaUFnYVdZZ0tDaHZabVp6WlhRZ0pTQXhLU0FoUFQwZ01DQjhmQ0J2Wm1aelpYUWdQQ0F3S1NCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25iMlptYzJWMElHbHpJRzV2ZENCMWFXNTBKeWxjYmlBZ2FXWWdLRzltWm5ObGRDQXJJR1Y0ZENBK0lHeGxibWQwYUNrZ2RHaHliM2NnYm1WM0lGSmhibWRsUlhKeWIzSW9KMVJ5ZVdsdVp5QjBieUJoWTJObGMzTWdZbVY1YjI1a0lHSjFabVpsY2lCc1pXNW5kR2duS1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSVlNXNTBURVVnUFNCbWRXNWpkR2x2YmlCeVpXRmtWVWx1ZEV4RklDaHZabVp6WlhRc0lHSjVkR1ZNWlc1bmRHZ3NJRzV2UVhOelpYSjBLU0I3WEc0Z0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnWW5sMFpVeGxibWQwYUNBOUlHSjVkR1ZNWlc1bmRHZ2dmQ0F3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUdOb1pXTnJUMlptYzJWMEtHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2dkR2hwY3k1c1pXNW5kR2dwWEc1Y2JpQWdkbUZ5SUhaaGJDQTlJSFJvYVhOYmIyWm1jMlYwWFZ4dUlDQjJZWElnYlhWc0lEMGdNVnh1SUNCMllYSWdhU0E5SURCY2JpQWdkMmhwYkdVZ0tDc3JhU0E4SUdKNWRHVk1aVzVuZEdnZ0ppWWdLRzExYkNBcVBTQXdlREV3TUNrcElIdGNiaUFnSUNCMllXd2dLejBnZEdocGMxdHZabVp6WlhRZ0t5QnBYU0FxSUcxMWJGeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlIWmhiRnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JWU1c1MFFrVWdQU0JtZFc1amRHbHZiaUJ5WldGa1ZVbHVkRUpGSUNodlptWnpaWFFzSUdKNWRHVk1aVzVuZEdnc0lHNXZRWE56WlhKMEtTQjdYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdZbmwwWlV4bGJtZDBhQ0E5SUdKNWRHVk1aVzVuZEdnZ2ZDQXdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJSHRjYmlBZ0lDQmphR1ZqYTA5bVpuTmxkQ2h2Wm1aelpYUXNJR0o1ZEdWTVpXNW5kR2dzSUhSb2FYTXViR1Z1WjNSb0tWeHVJQ0I5WEc1Y2JpQWdkbUZ5SUhaaGJDQTlJSFJvYVhOYmIyWm1jMlYwSUNzZ0xTMWllWFJsVEdWdVozUm9YVnh1SUNCMllYSWdiWFZzSUQwZ01WeHVJQ0IzYUdsc1pTQW9ZbmwwWlV4bGJtZDBhQ0ErSURBZ0ppWWdLRzExYkNBcVBTQXdlREV3TUNrcElIdGNiaUFnSUNCMllXd2dLejBnZEdocGMxdHZabVp6WlhRZ0t5QXRMV0o1ZEdWTVpXNW5kR2hkSUNvZ2JYVnNYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdkbUZzWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVjbVZoWkZWSmJuUTRJRDBnWm5WdVkzUnBiMjRnY21WaFpGVkpiblE0SUNodlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElHTm9aV05yVDJabWMyVjBLRzltWm5ObGRDd2dNU3dnZEdocGN5NXNaVzVuZEdncFhHNGdJSEpsZEhWeWJpQjBhR2x6VzI5bVpuTmxkRjFjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVlVsdWRERTJURVVnUFNCbWRXNWpkR2x2YmlCeVpXRmtWVWx1ZERFMlRFVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBeUxDQjBhR2x6TG14bGJtZDBhQ2xjYmlBZ2NtVjBkWEp1SUhSb2FYTmJiMlptYzJWMFhTQjhJQ2gwYUdselcyOW1abk5sZENBcklERmRJRHc4SURncFhHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1Y21WaFpGVkpiblF4TmtKRklEMGdablZ1WTNScGIyNGdjbVZoWkZWSmJuUXhOa0pGSUNodlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElHTm9aV05yVDJabWMyVjBLRzltWm5ObGRDd2dNaXdnZEdocGN5NXNaVzVuZEdncFhHNGdJSEpsZEhWeWJpQW9kR2hwYzF0dlptWnpaWFJkSUR3OElEZ3BJSHdnZEdocGMxdHZabVp6WlhRZ0t5QXhYVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JWU1c1ME16Sk1SU0E5SUdaMWJtTjBhVzl1SUhKbFlXUlZTVzUwTXpKTVJTQW9iMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0JqYUdWamEwOW1abk5sZENodlptWnpaWFFzSURRc0lIUm9hWE11YkdWdVozUm9LVnh1WEc0Z0lISmxkSFZ5YmlBb0tIUm9hWE5iYjJabWMyVjBYU2tnZkZ4dUlDQWdJQ0FnS0hSb2FYTmJiMlptYzJWMElDc2dNVjBnUER3Z09Da2dmRnh1SUNBZ0lDQWdLSFJvYVhOYmIyWm1jMlYwSUNzZ01sMGdQRHdnTVRZcEtTQXJYRzRnSUNBZ0lDQW9kR2hwYzF0dlptWnpaWFFnS3lBelhTQXFJREI0TVRBd01EQXdNQ2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXlaV0ZrVlVsdWRETXlRa1VnUFNCbWRXNWpkR2x2YmlCeVpXRmtWVWx1ZERNeVFrVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBMExDQjBhR2x6TG14bGJtZDBhQ2xjYmx4dUlDQnlaWFIxY200Z0tIUm9hWE5iYjJabWMyVjBYU0FxSURCNE1UQXdNREF3TUNrZ0sxeHVJQ0FnSUNnb2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOFBDQXhOaWtnZkZ4dUlDQWdJQ2gwYUdselcyOW1abk5sZENBcklESmRJRHc4SURncElIeGNiaUFnSUNCMGFHbHpXMjltWm5ObGRDQXJJRE5kS1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSSmJuUk1SU0E5SUdaMWJtTjBhVzl1SUhKbFlXUkpiblJNUlNBb2IyWm1jMlYwTENCaWVYUmxUR1Z1WjNSb0xDQnViMEZ6YzJWeWRDa2dlMXh1SUNCdlptWnpaWFFnUFNCdlptWnpaWFFnZkNBd1hHNGdJR0o1ZEdWTVpXNW5kR2dnUFNCaWVYUmxUR1Z1WjNSb0lId2dNRnh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0JqYUdWamEwOW1abk5sZENodlptWnpaWFFzSUdKNWRHVk1aVzVuZEdnc0lIUm9hWE11YkdWdVozUm9LVnh1WEc0Z0lIWmhjaUIyWVd3Z1BTQjBhR2x6VzI5bVpuTmxkRjFjYmlBZ2RtRnlJRzExYkNBOUlERmNiaUFnZG1GeUlHa2dQU0F3WEc0Z0lIZG9hV3hsSUNncksya2dQQ0JpZVhSbFRHVnVaM1JvSUNZbUlDaHRkV3dnS2owZ01IZ3hNREFwS1NCN1hHNGdJQ0FnZG1Gc0lDczlJSFJvYVhOYmIyWm1jMlYwSUNzZ2FWMGdLaUJ0ZFd4Y2JpQWdmVnh1SUNCdGRXd2dLajBnTUhnNE1GeHVYRzRnSUdsbUlDaDJZV3dnUGowZ2JYVnNLU0IyWVd3Z0xUMGdUV0YwYUM1d2IzY29NaXdnT0NBcUlHSjVkR1ZNWlc1bmRHZ3BYRzVjYmlBZ2NtVjBkWEp1SUhaaGJGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkpiblJDUlNBOUlHWjFibU4wYVc5dUlISmxZV1JKYm5SQ1JTQW9iMlptYzJWMExDQmllWFJsVEdWdVozUm9MQ0J1YjBGemMyVnlkQ2tnZTF4dUlDQnZabVp6WlhRZ1BTQnZabVp6WlhRZ2ZDQXdYRzRnSUdKNWRHVk1aVzVuZEdnZ1BTQmllWFJsVEdWdVozUm9JSHdnTUZ4dUlDQnBaaUFvSVc1dlFYTnpaWEowS1NCamFHVmphMDltWm5ObGRDaHZabVp6WlhRc0lHSjVkR1ZNWlc1bmRHZ3NJSFJvYVhNdWJHVnVaM1JvS1Z4dVhHNGdJSFpoY2lCcElEMGdZbmwwWlV4bGJtZDBhRnh1SUNCMllYSWdiWFZzSUQwZ01WeHVJQ0IyWVhJZ2RtRnNJRDBnZEdocGMxdHZabVp6WlhRZ0t5QXRMV2xkWEc0Z0lIZG9hV3hsSUNocElENGdNQ0FtSmlBb2JYVnNJQ285SURCNE1UQXdLU2tnZTF4dUlDQWdJSFpoYkNBclBTQjBhR2x6VzI5bVpuTmxkQ0FySUMwdGFWMGdLaUJ0ZFd4Y2JpQWdmVnh1SUNCdGRXd2dLajBnTUhnNE1GeHVYRzRnSUdsbUlDaDJZV3dnUGowZ2JYVnNLU0IyWVd3Z0xUMGdUV0YwYUM1d2IzY29NaXdnT0NBcUlHSjVkR1ZNWlc1bmRHZ3BYRzVjYmlBZ2NtVjBkWEp1SUhaaGJGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkpiblE0SUQwZ1puVnVZM1JwYjI0Z2NtVmhaRWx1ZERnZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0F4TENCMGFHbHpMbXhsYm1kMGFDbGNiaUFnYVdZZ0tDRW9kR2hwYzF0dlptWnpaWFJkSUNZZ01IZzRNQ2twSUhKbGRIVnliaUFvZEdocGMxdHZabVp6WlhSZEtWeHVJQ0J5WlhSMWNtNGdLQ2d3ZUdabUlDMGdkR2hwYzF0dlptWnpaWFJkSUNzZ01Ta2dLaUF0TVNsY2JuMWNibHh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzV5WldGa1NXNTBNVFpNUlNBOUlHWjFibU4wYVc5dUlISmxZV1JKYm5ReE5reEZJQ2h2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUdOb1pXTnJUMlptYzJWMEtHOW1abk5sZEN3Z01pd2dkR2hwY3k1c1pXNW5kR2dwWEc0Z0lIWmhjaUIyWVd3Z1BTQjBhR2x6VzI5bVpuTmxkRjBnZkNBb2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOFBDQTRLVnh1SUNCeVpYUjFjbTRnS0haaGJDQW1JREI0T0RBd01Da2dQeUIyWVd3Z2ZDQXdlRVpHUmtZd01EQXdJRG9nZG1Gc1hHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1Y21WaFpFbHVkREUyUWtVZ1BTQm1kVzVqZEdsdmJpQnlaV0ZrU1c1ME1UWkNSU0FvYjJabWMyVjBMQ0J1YjBGemMyVnlkQ2tnZTF4dUlDQnBaaUFvSVc1dlFYTnpaWEowS1NCamFHVmphMDltWm5ObGRDaHZabVp6WlhRc0lESXNJSFJvYVhNdWJHVnVaM1JvS1Z4dUlDQjJZWElnZG1Gc0lEMGdkR2hwYzF0dlptWnpaWFFnS3lBeFhTQjhJQ2gwYUdselcyOW1abk5sZEYwZ1BEd2dPQ2xjYmlBZ2NtVjBkWEp1SUNoMllXd2dKaUF3ZURnd01EQXBJRDhnZG1Gc0lId2dNSGhHUmtaR01EQXdNQ0E2SUhaaGJGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkpiblF6TWt4RklEMGdablZ1WTNScGIyNGdjbVZoWkVsdWRETXlURVVnS0c5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRQWm1aelpYUW9iMlptYzJWMExDQTBMQ0IwYUdsekxteGxibWQwYUNsY2JseHVJQ0J5WlhSMWNtNGdLSFJvYVhOYmIyWm1jMlYwWFNrZ2ZGeHVJQ0FnSUNoMGFHbHpXMjltWm5ObGRDQXJJREZkSUR3OElEZ3BJSHhjYmlBZ0lDQW9kR2hwYzF0dlptWnpaWFFnS3lBeVhTQThQQ0F4TmlrZ2ZGeHVJQ0FnSUNoMGFHbHpXMjltWm5ObGRDQXJJRE5kSUR3OElESTBLVnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuSmxZV1JKYm5Rek1rSkZJRDBnWm5WdVkzUnBiMjRnY21WaFpFbHVkRE15UWtVZ0tHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0UFptWnpaWFFvYjJabWMyVjBMQ0EwTENCMGFHbHpMbXhsYm1kMGFDbGNibHh1SUNCeVpYUjFjbTRnS0hSb2FYTmJiMlptYzJWMFhTQThQQ0F5TkNrZ2ZGeHVJQ0FnSUNoMGFHbHpXMjltWm5ObGRDQXJJREZkSUR3OElERTJLU0I4WEc0Z0lDQWdLSFJvYVhOYmIyWm1jMlYwSUNzZ01sMGdQRHdnT0NrZ2ZGeHVJQ0FnSUNoMGFHbHpXMjltWm5ObGRDQXJJRE5kS1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbkpsWVdSR2JHOWhkRXhGSUQwZ1puVnVZM1JwYjI0Z2NtVmhaRVpzYjJGMFRFVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBMExDQjBhR2x6TG14bGJtZDBhQ2xjYmlBZ2NtVjBkWEp1SUdsbFpXVTNOVFF1Y21WaFpDaDBhR2x6TENCdlptWnpaWFFzSUhSeWRXVXNJREl6TENBMEtWeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkdiRzloZEVKRklEMGdablZ1WTNScGIyNGdjbVZoWkVac2IyRjBRa1VnS0c5bVpuTmxkQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRQWm1aelpYUW9iMlptYzJWMExDQTBMQ0IwYUdsekxteGxibWQwYUNsY2JpQWdjbVYwZFhKdUlHbGxaV1UzTlRRdWNtVmhaQ2gwYUdsekxDQnZabVp6WlhRc0lHWmhiSE5sTENBeU15d2dOQ2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNXlaV0ZrUkc5MVlteGxURVVnUFNCbWRXNWpkR2x2YmlCeVpXRmtSRzkxWW14bFRFVWdLRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydFBabVp6WlhRb2IyWm1jMlYwTENBNExDQjBhR2x6TG14bGJtZDBhQ2xjYmlBZ2NtVjBkWEp1SUdsbFpXVTNOVFF1Y21WaFpDaDBhR2x6TENCdlptWnpaWFFzSUhSeWRXVXNJRFV5TENBNEtWeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5KbFlXUkViM1ZpYkdWQ1JTQTlJR1oxYm1OMGFXOXVJSEpsWVdSRWIzVmliR1ZDUlNBb2IyWm1jMlYwTENCdWIwRnpjMlZ5ZENrZ2UxeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQmphR1ZqYTA5bVpuTmxkQ2h2Wm1aelpYUXNJRGdzSUhSb2FYTXViR1Z1WjNSb0tWeHVJQ0J5WlhSMWNtNGdhV1ZsWlRjMU5DNXlaV0ZrS0hSb2FYTXNJRzltWm5ObGRDd2dabUZzYzJVc0lEVXlMQ0E0S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJqYUdWamEwbHVkQ0FvWW5WbUxDQjJZV3gxWlN3Z2IyWm1jMlYwTENCbGVIUXNJRzFoZUN3Z2JXbHVLU0I3WEc0Z0lHbG1JQ2doUW5WbVptVnlMbWx6UW5WbVptVnlLR0oxWmlrcElIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMXdpWW5WbVptVnlYQ0lnWVhKbmRXMWxiblFnYlhWemRDQmlaU0JoSUVKMVptWmxjaUJwYm5OMFlXNWpaU2NwWEc0Z0lHbG1JQ2gyWVd4MVpTQStJRzFoZUNCOGZDQjJZV3gxWlNBOElHMXBiaWtnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb0oxd2lkbUZzZFdWY0lpQmhjbWQxYldWdWRDQnBjeUJ2ZFhRZ2IyWWdZbTkxYm1Sekp5bGNiaUFnYVdZZ0tHOW1abk5sZENBcklHVjRkQ0ErSUdKMVppNXNaVzVuZEdncElIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2RKYm1SbGVDQnZkWFFnYjJZZ2NtRnVaMlVuS1Z4dWZWeHVYRzVDZFdabVpYSXVjSEp2ZEc5MGVYQmxMbmR5YVhSbFZVbHVkRXhGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZWU1c1MFRFVWdLSFpoYkhWbExDQnZabVp6WlhRc0lHSjVkR1ZNWlc1bmRHZ3NJRzV2UVhOelpYSjBLU0I3WEc0Z0lIWmhiSFZsSUQwZ0szWmhiSFZsWEc0Z0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnWW5sMFpVeGxibWQwYUNBOUlHSjVkR1ZNWlc1bmRHZ2dmQ0F3WEc0Z0lHbG1JQ2doYm05QmMzTmxjblFwSUh0Y2JpQWdJQ0IyWVhJZ2JXRjRRbmwwWlhNZ1BTQk5ZWFJvTG5CdmR5Z3lMQ0E0SUNvZ1lubDBaVXhsYm1kMGFDa2dMU0F4WEc0Z0lDQWdZMmhsWTJ0SmJuUW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnWW5sMFpVeGxibWQwYUN3Z2JXRjRRbmwwWlhNc0lEQXBYRzRnSUgxY2JseHVJQ0IyWVhJZ2JYVnNJRDBnTVZ4dUlDQjJZWElnYVNBOUlEQmNiaUFnZEdocGMxdHZabVp6WlhSZElEMGdkbUZzZFdVZ0ppQXdlRVpHWEc0Z0lIZG9hV3hsSUNncksya2dQQ0JpZVhSbFRHVnVaM1JvSUNZbUlDaHRkV3dnS2owZ01IZ3hNREFwS1NCN1hHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QnBYU0E5SUNoMllXeDFaU0F2SUcxMWJDa2dKaUF3ZUVaR1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2IyWm1jMlYwSUNzZ1lubDBaVXhsYm1kMGFGeHVmVnh1WEc1Q2RXWm1aWEl1Y0hKdmRHOTBlWEJsTG5keWFYUmxWVWx1ZEVKRklEMGdablZ1WTNScGIyNGdkM0pwZEdWVlNXNTBRa1VnS0haaGJIVmxMQ0J2Wm1aelpYUXNJR0o1ZEdWTVpXNW5kR2dzSUc1dlFYTnpaWEowS1NCN1hHNGdJSFpoYkhWbElEMGdLM1poYkhWbFhHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ1lubDBaVXhsYm1kMGFDQTlJR0o1ZEdWTVpXNW5kR2dnZkNBd1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElIdGNiaUFnSUNCMllYSWdiV0Y0UW5sMFpYTWdQU0JOWVhSb0xuQnZkeWd5TENBNElDb2dZbmwwWlV4bGJtZDBhQ2tnTFNBeFhHNGdJQ0FnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z1lubDBaVXhsYm1kMGFDd2diV0Y0UW5sMFpYTXNJREFwWEc0Z0lIMWNibHh1SUNCMllYSWdhU0E5SUdKNWRHVk1aVzVuZEdnZ0xTQXhYRzRnSUhaaGNpQnRkV3dnUFNBeFhHNGdJSFJvYVhOYmIyWm1jMlYwSUNzZ2FWMGdQU0IyWVd4MVpTQW1JREI0UmtaY2JpQWdkMmhwYkdVZ0tDMHRhU0ErUFNBd0lDWW1JQ2h0ZFd3Z0tqMGdNSGd4TURBcEtTQjdYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUJwWFNBOUlDaDJZV3gxWlNBdklHMTFiQ2tnSmlBd2VFWkdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdiMlptYzJWMElDc2dZbmwwWlV4bGJtZDBhRnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsVlVsdWREZ2dQU0JtZFc1amRHbHZiaUIzY21sMFpWVkpiblE0SUNoMllXeDFaU3dnYjJabWMyVjBMQ0J1YjBGemMyVnlkQ2tnZTF4dUlDQjJZV3gxWlNBOUlDdDJZV3gxWlZ4dUlDQnZabVp6WlhRZ1BTQnZabVp6WlhRZ2ZDQXdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJR05vWldOclNXNTBLSFJvYVhNc0lIWmhiSFZsTENCdlptWnpaWFFzSURFc0lEQjRabVlzSURBcFhHNGdJR2xtSUNnaFFuVm1abVZ5TGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRcElIWmhiSFZsSUQwZ1RXRjBhQzVtYkc5dmNpaDJZV3gxWlNsY2JpQWdkR2hwYzF0dlptWnpaWFJkSUQwZ0tIWmhiSFZsSUNZZ01IaG1aaWxjYmlBZ2NtVjBkWEp1SUc5bVpuTmxkQ0FySURGY2JuMWNibHh1Wm5WdVkzUnBiMjRnYjJKcVpXTjBWM0pwZEdWVlNXNTBNVFlnS0dKMVppd2dkbUZzZFdVc0lHOW1abk5sZEN3Z2JHbDBkR3hsUlc1a2FXRnVLU0I3WEc0Z0lHbG1JQ2gyWVd4MVpTQThJREFwSUhaaGJIVmxJRDBnTUhobVptWm1JQ3NnZG1Gc2RXVWdLeUF4WEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0F3TENCcUlEMGdUV0YwYUM1dGFXNG9ZblZtTG14bGJtZDBhQ0F0SUc5bVpuTmxkQ3dnTWlrN0lHa2dQQ0JxT3lBcksya3BJSHRjYmlBZ0lDQmlkV1piYjJabWMyVjBJQ3NnYVYwZ1BTQW9kbUZzZFdVZ0ppQW9NSGhtWmlBOFBDQW9PQ0FxSUNoc2FYUjBiR1ZGYm1ScFlXNGdQeUJwSURvZ01TQXRJR2twS1NrcElENCtQbHh1SUNBZ0lDQWdLR3hwZEhSc1pVVnVaR2xoYmlBL0lHa2dPaUF4SUMwZ2FTa2dLaUE0WEc0Z0lIMWNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVlZKYm5ReE5reEZJRDBnWm5WdVkzUnBiMjRnZDNKcGRHVlZTVzUwTVRaTVJTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnZG1Gc2RXVWdQU0FyZG1Gc2RXVmNiaUFnYjJabWMyVjBJRDBnYjJabWMyVjBJSHdnTUZ4dUlDQnBaaUFvSVc1dlFYTnpaWEowS1NCamFHVmphMGx1ZENoMGFHbHpMQ0IyWVd4MVpTd2diMlptYzJWMExDQXlMQ0F3ZUdabVptWXNJREFwWEc0Z0lHbG1JQ2hDZFdabVpYSXVWRmxRUlVSZlFWSlNRVmxmVTFWUVVFOVNWQ2tnZTF4dUlDQWdJSFJvYVhOYmIyWm1jMlYwWFNBOUlDaDJZV3gxWlNBbUlEQjRabVlwWEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lBeFhTQTlJQ2gyWVd4MVpTQStQajRnT0NsY2JpQWdmU0JsYkhObElIdGNiaUFnSUNCdlltcGxZM1JYY21sMFpWVkpiblF4TmloMGFHbHpMQ0IyWVd4MVpTd2diMlptYzJWMExDQjBjblZsS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJ2Wm1aelpYUWdLeUF5WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWVlNXNTBNVFpDUlNBOUlHWjFibU4wYVc5dUlIZHlhWFJsVlVsdWRERTJRa1VnS0haaGJIVmxMQ0J2Wm1aelpYUXNJRzV2UVhOelpYSjBLU0I3WEc0Z0lIWmhiSFZsSUQwZ0szWmhiSFZsWEc0Z0lHOW1abk5sZENBOUlHOW1abk5sZENCOElEQmNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dZMmhsWTJ0SmJuUW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnTWl3Z01IaG1abVptTENBd0tWeHVJQ0JwWmlBb1FuVm1abVZ5TGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRcElIdGNiaUFnSUNCMGFHbHpXMjltWm5ObGRGMGdQU0FvZG1Gc2RXVWdQajQrSURncFhHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXhYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdiMkpxWldOMFYzSnBkR1ZWU1c1ME1UWW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnWm1Gc2MyVXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklESmNibjFjYmx4dVpuVnVZM1JwYjI0Z2IySnFaV04wVjNKcGRHVlZTVzUwTXpJZ0tHSjFaaXdnZG1Gc2RXVXNJRzltWm5ObGRDd2diR2wwZEd4bFJXNWthV0Z1S1NCN1hHNGdJR2xtSUNoMllXeDFaU0E4SURBcElIWmhiSFZsSUQwZ01IaG1abVptWm1abVppQXJJSFpoYkhWbElDc2dNVnh1SUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYWlBOUlFMWhkR2d1YldsdUtHSjFaaTVzWlc1bmRHZ2dMU0J2Wm1aelpYUXNJRFFwT3lCcElEd2dhanNnS3l0cEtTQjdYRzRnSUNBZ1luVm1XMjltWm5ObGRDQXJJR2xkSUQwZ0tIWmhiSFZsSUQ0K1BpQW9iR2wwZEd4bFJXNWthV0Z1SUQ4Z2FTQTZJRE1nTFNCcEtTQXFJRGdwSUNZZ01IaG1abHh1SUNCOVhHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVlZTVzUwTXpKTVJTQTlJR1oxYm1OMGFXOXVJSGR5YVhSbFZVbHVkRE15VEVVZ0tIWmhiSFZsTENCdlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJSFpoYkhWbElEMGdLM1poYkhWbFhHNGdJRzltWm5ObGRDQTlJRzltWm5ObGRDQjhJREJjYmlBZ2FXWWdLQ0Z1YjBGemMyVnlkQ2tnWTJobFkydEpiblFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z05Dd2dNSGhtWm1abVptWm1aaXdnTUNsY2JpQWdhV1lnS0VKMVptWmxjaTVVV1ZCRlJGOUJVbEpCV1Y5VFZWQlFUMUpVS1NCN1hHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXpYU0E5SUNoMllXeDFaU0ErUGo0Z01qUXBYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUF5WFNBOUlDaDJZV3gxWlNBK1BqNGdNVFlwWEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lBeFhTQTlJQ2gyWVd4MVpTQStQajRnT0NsY2JpQWdJQ0IwYUdselcyOW1abk5sZEYwZ1BTQW9kbUZzZFdVZ0ppQXdlR1ptS1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUc5aWFtVmpkRmR5YVhSbFZVbHVkRE15S0hSb2FYTXNJSFpoYkhWbExDQnZabVp6WlhRc0lIUnlkV1VwWEc0Z0lIMWNiaUFnY21WMGRYSnVJRzltWm5ObGRDQXJJRFJjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlZWSmJuUXpNa0pGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZWU1c1ME16SkNSU0FvZG1Gc2RXVXNJRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2RtRnNkV1VnUFNBcmRtRnNkV1ZjYmlBZ2IyWm1jMlYwSUQwZ2IyWm1jMlYwSUh3Z01GeHVJQ0JwWmlBb0lXNXZRWE56WlhKMEtTQmphR1ZqYTBsdWRDaDBhR2x6TENCMllXeDFaU3dnYjJabWMyVjBMQ0EwTENBd2VHWm1abVptWm1abUxDQXdLVnh1SUNCcFppQW9RblZtWm1WeUxsUlpVRVZFWDBGU1VrRlpYMU5WVUZCUFVsUXBJSHRjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkRjBnUFNBb2RtRnNkV1VnUGo0K0lESTBLVnh1SUNBZ0lIUm9hWE5iYjJabWMyVjBJQ3NnTVYwZ1BTQW9kbUZzZFdVZ1BqNCtJREUyS1Z4dUlDQWdJSFJvYVhOYmIyWm1jMlYwSUNzZ01sMGdQU0FvZG1Gc2RXVWdQajQrSURncFhHNGdJQ0FnZEdocGMxdHZabVp6WlhRZ0t5QXpYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdiMkpxWldOMFYzSnBkR1ZWU1c1ME16SW9kR2hwY3l3Z2RtRnNkV1VzSUc5bVpuTmxkQ3dnWm1Gc2MyVXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklEUmNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZEV4RklEMGdablZ1WTNScGIyNGdkM0pwZEdWSmJuUk1SU0FvZG1Gc2RXVXNJRzltWm5ObGRDd2dZbmwwWlV4bGJtZDBhQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdkbUZzZFdVZ1BTQXJkbUZzZFdWY2JpQWdiMlptYzJWMElEMGdiMlptYzJWMElId2dNRnh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0I3WEc0Z0lDQWdkbUZ5SUd4cGJXbDBJRDBnVFdGMGFDNXdiM2NvTWl3Z09DQXFJR0o1ZEdWTVpXNW5kR2dnTFNBeEtWeHVYRzRnSUNBZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dZbmwwWlV4bGJtZDBhQ3dnYkdsdGFYUWdMU0F4TENBdGJHbHRhWFFwWEc0Z0lIMWNibHh1SUNCMllYSWdhU0E5SURCY2JpQWdkbUZ5SUcxMWJDQTlJREZjYmlBZ2RtRnlJSE4xWWlBOUlEQmNiaUFnZEdocGMxdHZabVp6WlhSZElEMGdkbUZzZFdVZ0ppQXdlRVpHWEc0Z0lIZG9hV3hsSUNncksya2dQQ0JpZVhSbFRHVnVaM1JvSUNZbUlDaHRkV3dnS2owZ01IZ3hNREFwS1NCN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUR3Z01DQW1KaUJ6ZFdJZ1BUMDlJREFnSmlZZ2RHaHBjMXR2Wm1aelpYUWdLeUJwSUMwZ01WMGdJVDA5SURBcElIdGNiaUFnSUNBZ0lITjFZaUE5SURGY2JpQWdJQ0I5WEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lCcFhTQTlJQ2dvZG1Gc2RXVWdMeUJ0ZFd3cElENCtJREFwSUMwZ2MzVmlJQ1lnTUhoR1JseHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklHSjVkR1ZNWlc1bmRHaGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZEVKRklEMGdablZ1WTNScGIyNGdkM0pwZEdWSmJuUkNSU0FvZG1Gc2RXVXNJRzltWm5ObGRDd2dZbmwwWlV4bGJtZDBhQ3dnYm05QmMzTmxjblFwSUh0Y2JpQWdkbUZzZFdVZ1BTQXJkbUZzZFdWY2JpQWdiMlptYzJWMElEMGdiMlptYzJWMElId2dNRnh1SUNCcFppQW9JVzV2UVhOelpYSjBLU0I3WEc0Z0lDQWdkbUZ5SUd4cGJXbDBJRDBnVFdGMGFDNXdiM2NvTWl3Z09DQXFJR0o1ZEdWTVpXNW5kR2dnTFNBeEtWeHVYRzRnSUNBZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dZbmwwWlV4bGJtZDBhQ3dnYkdsdGFYUWdMU0F4TENBdGJHbHRhWFFwWEc0Z0lIMWNibHh1SUNCMllYSWdhU0E5SUdKNWRHVk1aVzVuZEdnZ0xTQXhYRzRnSUhaaGNpQnRkV3dnUFNBeFhHNGdJSFpoY2lCemRXSWdQU0F3WEc0Z0lIUm9hWE5iYjJabWMyVjBJQ3NnYVYwZ1BTQjJZV3gxWlNBbUlEQjRSa1pjYmlBZ2QyaHBiR1VnS0MwdGFTQStQU0F3SUNZbUlDaHRkV3dnS2owZ01IZ3hNREFwS1NCN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUR3Z01DQW1KaUJ6ZFdJZ1BUMDlJREFnSmlZZ2RHaHBjMXR2Wm1aelpYUWdLeUJwSUNzZ01WMGdJVDA5SURBcElIdGNiaUFnSUNBZ0lITjFZaUE5SURGY2JpQWdJQ0I5WEc0Z0lDQWdkR2hwYzF0dlptWnpaWFFnS3lCcFhTQTlJQ2dvZG1Gc2RXVWdMeUJ0ZFd3cElENCtJREFwSUMwZ2MzVmlJQ1lnTUhoR1JseHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHOW1abk5sZENBcklHSjVkR1ZNWlc1bmRHaGNibjFjYmx4dVFuVm1abVZ5TG5CeWIzUnZkSGx3WlM1M2NtbDBaVWx1ZERnZ1BTQm1kVzVqZEdsdmJpQjNjbWwwWlVsdWREZ2dLSFpoYkhWbExDQnZabVp6WlhRc0lHNXZRWE56WlhKMEtTQjdYRzRnSUhaaGJIVmxJRDBnSzNaaGJIVmxYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dNU3dnTUhnM1ppd2dMVEI0T0RBcFhHNGdJR2xtSUNnaFFuVm1abVZ5TGxSWlVFVkVYMEZTVWtGWlgxTlZVRkJQVWxRcElIWmhiSFZsSUQwZ1RXRjBhQzVtYkc5dmNpaDJZV3gxWlNsY2JpQWdhV1lnS0haaGJIVmxJRHdnTUNrZ2RtRnNkV1VnUFNBd2VHWm1JQ3NnZG1Gc2RXVWdLeUF4WEc0Z0lIUm9hWE5iYjJabWMyVjBYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUhKbGRIVnliaUJ2Wm1aelpYUWdLeUF4WEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWSmJuUXhOa3hGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZKYm5ReE5reEZJQ2gyWVd4MVpTd2diMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCMllXeDFaU0E5SUN0MllXeDFaVnh1SUNCdlptWnpaWFFnUFNCdlptWnpaWFFnZkNBd1hHNGdJR2xtSUNnaGJtOUJjM05sY25RcElHTm9aV05yU1c1MEtIUm9hWE1zSUhaaGJIVmxMQ0J2Wm1aelpYUXNJRElzSURCNE4yWm1aaXdnTFRCNE9EQXdNQ2xjYmlBZ2FXWWdLRUoxWm1abGNpNVVXVkJGUkY5QlVsSkJXVjlUVlZCUVQxSlVLU0I3WEc0Z0lDQWdkR2hwYzF0dlptWnpaWFJkSUQwZ0tIWmhiSFZsSUNZZ01IaG1aaWxjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkQ0FySURGZElEMGdLSFpoYkhWbElENCtQaUE0S1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUc5aWFtVmpkRmR5YVhSbFZVbHVkREUyS0hSb2FYTXNJSFpoYkhWbExDQnZabVp6WlhRc0lIUnlkV1VwWEc0Z0lIMWNiaUFnY21WMGRYSnVJRzltWm5ObGRDQXJJREpjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVsdWRERTJRa1VnUFNCbWRXNWpkR2x2YmlCM2NtbDBaVWx1ZERFMlFrVWdLSFpoYkhWbExDQnZabVp6WlhRc0lHNXZRWE56WlhKMEtTQjdYRzRnSUhaaGJIVmxJRDBnSzNaaGJIVmxYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dNaXdnTUhnM1ptWm1MQ0F0TUhnNE1EQXdLVnh1SUNCcFppQW9RblZtWm1WeUxsUlpVRVZFWDBGU1VrRlpYMU5WVUZCUFVsUXBJSHRjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkRjBnUFNBb2RtRnNkV1VnUGo0K0lEZ3BYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOUlDaDJZV3gxWlNBbUlEQjRabVlwWEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnYjJKcVpXTjBWM0pwZEdWVlNXNTBNVFlvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z1ptRnNjMlVwWEc0Z0lIMWNiaUFnY21WMGRYSnVJRzltWm5ObGRDQXJJREpjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVsdWRETXlURVVnUFNCbWRXNWpkR2x2YmlCM2NtbDBaVWx1ZERNeVRFVWdLSFpoYkhWbExDQnZabVp6WlhRc0lHNXZRWE56WlhKMEtTQjdYRzRnSUhaaGJIVmxJRDBnSzNaaGJIVmxYRzRnSUc5bVpuTmxkQ0E5SUc5bVpuTmxkQ0I4SURCY2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ1kyaGxZMnRKYm5Rb2RHaHBjeXdnZG1Gc2RXVXNJRzltWm5ObGRDd2dOQ3dnTUhnM1ptWm1abVptWml3Z0xUQjRPREF3TURBd01EQXBYRzRnSUdsbUlDaENkV1ptWlhJdVZGbFFSVVJmUVZKU1FWbGZVMVZRVUU5U1ZDa2dlMXh1SUNBZ0lIUm9hWE5iYjJabWMyVjBYU0E5SUNoMllXeDFaU0FtSURCNFptWXBYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUWdLeUF4WFNBOUlDaDJZV3gxWlNBK1BqNGdPQ2xjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkQ0FySURKZElEMGdLSFpoYkhWbElENCtQaUF4TmlsY2JpQWdJQ0IwYUdselcyOW1abk5sZENBcklETmRJRDBnS0haaGJIVmxJRDQrUGlBeU5DbGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnZZbXBsWTNSWGNtbDBaVlZKYm5Rek1paDBhR2x6TENCMllXeDFaU3dnYjJabWMyVjBMQ0IwY25WbEtWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlptWnpaWFFnS3lBMFhHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkpiblF6TWtKRklEMGdablZ1WTNScGIyNGdkM0pwZEdWSmJuUXpNa0pGSUNoMllXeDFaU3dnYjJabWMyVjBMQ0J1YjBGemMyVnlkQ2tnZTF4dUlDQjJZV3gxWlNBOUlDdDJZV3gxWlZ4dUlDQnZabVp6WlhRZ1BTQnZabVp6WlhRZ2ZDQXdYRzRnSUdsbUlDZ2hibTlCYzNObGNuUXBJR05vWldOclNXNTBLSFJvYVhNc0lIWmhiSFZsTENCdlptWnpaWFFzSURRc0lEQjROMlptWm1abVptWXNJQzB3ZURnd01EQXdNREF3S1Z4dUlDQnBaaUFvZG1Gc2RXVWdQQ0F3S1NCMllXeDFaU0E5SURCNFptWm1abVptWm1ZZ0t5QjJZV3gxWlNBcklERmNiaUFnYVdZZ0tFSjFabVpsY2k1VVdWQkZSRjlCVWxKQldWOVRWVkJRVDFKVUtTQjdYRzRnSUNBZ2RHaHBjMXR2Wm1aelpYUmRJRDBnS0haaGJIVmxJRDQrUGlBeU5DbGNiaUFnSUNCMGFHbHpXMjltWm5ObGRDQXJJREZkSUQwZ0tIWmhiSFZsSUQ0K1BpQXhOaWxjYmlBZ0lDQjBhR2x6VzI5bVpuTmxkQ0FySURKZElEMGdLSFpoYkhWbElENCtQaUE0S1Z4dUlDQWdJSFJvYVhOYmIyWm1jMlYwSUNzZ00xMGdQU0FvZG1Gc2RXVWdKaUF3ZUdabUtWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHOWlhbVZqZEZkeWFYUmxWVWx1ZERNeUtIUm9hWE1zSUhaaGJIVmxMQ0J2Wm1aelpYUXNJR1poYkhObEtWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlptWnpaWFFnS3lBMFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOb1pXTnJTVVZGUlRjMU5DQW9ZblZtTENCMllXeDFaU3dnYjJabWMyVjBMQ0JsZUhRc0lHMWhlQ3dnYldsdUtTQjdYRzRnSUdsbUlDaHZabVp6WlhRZ0t5QmxlSFFnUGlCaWRXWXViR1Z1WjNSb0tTQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduU1c1a1pYZ2diM1YwSUc5bUlISmhibWRsSnlsY2JpQWdhV1lnS0c5bVpuTmxkQ0E4SURBcElIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2RKYm1SbGVDQnZkWFFnYjJZZ2NtRnVaMlVuS1Z4dWZWeHVYRzVtZFc1amRHbHZiaUIzY21sMFpVWnNiMkYwSUNoaWRXWXNJSFpoYkhWbExDQnZabVp6WlhRc0lHeHBkSFJzWlVWdVpHbGhiaXdnYm05QmMzTmxjblFwSUh0Y2JpQWdhV1lnS0NGdWIwRnpjMlZ5ZENrZ2UxeHVJQ0FnSUdOb1pXTnJTVVZGUlRjMU5DaGlkV1lzSUhaaGJIVmxMQ0J2Wm1aelpYUXNJRFFzSURNdU5EQXlPREl6TkRZMk16ZzFNamc0Tm1Vck16Z3NJQzB6TGpRd01qZ3lNelEyTmpNNE5USTRPRFpsS3pNNEtWeHVJQ0I5WEc0Z0lHbGxaV1UzTlRRdWQzSnBkR1VvWW5WbUxDQjJZV3gxWlN3Z2IyWm1jMlYwTENCc2FYUjBiR1ZGYm1ScFlXNHNJREl6TENBMEtWeHVJQ0J5WlhSMWNtNGdiMlptYzJWMElDc2dORnh1ZlZ4dVhHNUNkV1ptWlhJdWNISnZkRzkwZVhCbExuZHlhWFJsUm14dllYUk1SU0E5SUdaMWJtTjBhVzl1SUhkeWFYUmxSbXh2WVhSTVJTQW9kbUZzZFdVc0lHOW1abk5sZEN3Z2JtOUJjM05sY25RcElIdGNiaUFnY21WMGRYSnVJSGR5YVhSbFJteHZZWFFvZEdocGN5d2dkbUZzZFdVc0lHOW1abk5sZEN3Z2RISjFaU3dnYm05QmMzTmxjblFwWEc1OVhHNWNia0oxWm1abGNpNXdjbTkwYjNSNWNHVXVkM0pwZEdWR2JHOWhkRUpGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZHYkc5aGRFSkZJQ2gyWVd4MVpTd2diMlptYzJWMExDQnViMEZ6YzJWeWRDa2dlMXh1SUNCeVpYUjFjbTRnZDNKcGRHVkdiRzloZENoMGFHbHpMQ0IyWVd4MVpTd2diMlptYzJWMExDQm1ZV3h6WlN3Z2JtOUJjM05sY25RcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhkeWFYUmxSRzkxWW14bElDaGlkV1lzSUhaaGJIVmxMQ0J2Wm1aelpYUXNJR3hwZEhSc1pVVnVaR2xoYml3Z2JtOUJjM05sY25RcElIdGNiaUFnYVdZZ0tDRnViMEZ6YzJWeWRDa2dlMXh1SUNBZ0lHTm9aV05yU1VWRlJUYzFOQ2hpZFdZc0lIWmhiSFZsTENCdlptWnpaWFFzSURnc0lERXVOemszTmprek1UTTBPRFl5TXpFMU4wVXJNekE0TENBdE1TNDNPVGMyT1RNeE16UTROakl6TVRVM1JTc3pNRGdwWEc0Z0lIMWNiaUFnYVdWbFpUYzFOQzUzY21sMFpTaGlkV1lzSUhaaGJIVmxMQ0J2Wm1aelpYUXNJR3hwZEhSc1pVVnVaR2xoYml3Z05USXNJRGdwWEc0Z0lISmxkSFZ5YmlCdlptWnpaWFFnS3lBNFhHNTlYRzVjYmtKMVptWmxjaTV3Y205MGIzUjVjR1V1ZDNKcGRHVkViM1ZpYkdWTVJTQTlJR1oxYm1OMGFXOXVJSGR5YVhSbFJHOTFZbXhsVEVVZ0tIWmhiSFZsTENCdlptWnpaWFFzSUc1dlFYTnpaWEowS1NCN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlVSdmRXSnNaU2gwYUdsekxDQjJZV3gxWlN3Z2IyWm1jMlYwTENCMGNuVmxMQ0J1YjBGemMyVnlkQ2xjYm4xY2JseHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNTNjbWwwWlVSdmRXSnNaVUpGSUQwZ1puVnVZM1JwYjI0Z2QzSnBkR1ZFYjNWaWJHVkNSU0FvZG1Gc2RXVXNJRzltWm5ObGRDd2dibTlCYzNObGNuUXBJSHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxSRzkxWW14bEtIUm9hWE1zSUhaaGJIVmxMQ0J2Wm1aelpYUXNJR1poYkhObExDQnViMEZ6YzJWeWRDbGNibjFjYmx4dUx5OGdZMjl3ZVNoMFlYSm5aWFJDZFdabVpYSXNJSFJoY21kbGRGTjBZWEowUFRBc0lITnZkWEpqWlZOMFlYSjBQVEFzSUhOdmRYSmpaVVZ1WkQxaWRXWm1aWEl1YkdWdVozUm9LVnh1UW5WbVptVnlMbkJ5YjNSdmRIbHdaUzVqYjNCNUlEMGdablZ1WTNScGIyNGdZMjl3ZVNBb2RHRnlaMlYwTENCMFlYSm5aWFJUZEdGeWRDd2djM1JoY25Rc0lHVnVaQ2tnZTF4dUlDQnBaaUFvSVhOMFlYSjBLU0J6ZEdGeWRDQTlJREJjYmlBZ2FXWWdLQ0ZsYm1RZ0ppWWdaVzVrSUNFOVBTQXdLU0JsYm1RZ1BTQjBhR2x6TG14bGJtZDBhRnh1SUNCcFppQW9kR0Z5WjJWMFUzUmhjblFnUGowZ2RHRnlaMlYwTG14bGJtZDBhQ2tnZEdGeVoyVjBVM1JoY25RZ1BTQjBZWEpuWlhRdWJHVnVaM1JvWEc0Z0lHbG1JQ2doZEdGeVoyVjBVM1JoY25RcElIUmhjbWRsZEZOMFlYSjBJRDBnTUZ4dUlDQnBaaUFvWlc1a0lENGdNQ0FtSmlCbGJtUWdQQ0J6ZEdGeWRDa2daVzVrSUQwZ2MzUmhjblJjYmx4dUlDQXZMeUJEYjNCNUlEQWdZbmwwWlhNN0lIZGxKM0psSUdSdmJtVmNiaUFnYVdZZ0tHVnVaQ0E5UFQwZ2MzUmhjblFwSUhKbGRIVnliaUF3WEc0Z0lHbG1JQ2gwWVhKblpYUXViR1Z1WjNSb0lEMDlQU0F3SUh4OElIUm9hWE11YkdWdVozUm9JRDA5UFNBd0tTQnlaWFIxY200Z01GeHVYRzRnSUM4dklFWmhkR0ZzSUdWeWNtOXlJR052Ym1ScGRHbHZibk5jYmlBZ2FXWWdLSFJoY21kbGRGTjBZWEowSUR3Z01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2QwWVhKblpYUlRkR0Z5ZENCdmRYUWdiMllnWW05MWJtUnpKeWxjYmlBZ2ZWeHVJQ0JwWmlBb2MzUmhjblFnUENBd0lIeDhJSE4wWVhKMElENDlJSFJvYVhNdWJHVnVaM1JvS1NCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25jMjkxY21ObFUzUmhjblFnYjNWMElHOW1JR0p2ZFc1a2N5Y3BYRzRnSUdsbUlDaGxibVFnUENBd0tTQjBhSEp2ZHlCdVpYY2dVbUZ1WjJWRmNuSnZjaWduYzI5MWNtTmxSVzVrSUc5MWRDQnZaaUJpYjNWdVpITW5LVnh1WEc0Z0lDOHZJRUZ5WlNCM1pTQnZiMkkvWEc0Z0lHbG1JQ2hsYm1RZ1BpQjBhR2x6TG14bGJtZDBhQ2tnWlc1a0lEMGdkR2hwY3k1c1pXNW5kR2hjYmlBZ2FXWWdLSFJoY21kbGRDNXNaVzVuZEdnZ0xTQjBZWEpuWlhSVGRHRnlkQ0E4SUdWdVpDQXRJSE4wWVhKMEtTQjdYRzRnSUNBZ1pXNWtJRDBnZEdGeVoyVjBMbXhsYm1kMGFDQXRJSFJoY21kbGRGTjBZWEowSUNzZ2MzUmhjblJjYmlBZ2ZWeHVYRzRnSUhaaGNpQnNaVzRnUFNCbGJtUWdMU0J6ZEdGeWRGeHVJQ0IyWVhJZ2FWeHVYRzRnSUdsbUlDaDBhR2x6SUQwOVBTQjBZWEpuWlhRZ0ppWWdjM1JoY25RZ1BDQjBZWEpuWlhSVGRHRnlkQ0FtSmlCMFlYSm5aWFJUZEdGeWRDQThJR1Z1WkNrZ2UxeHVJQ0FnSUM4dklHUmxjMk5sYm1ScGJtY2dZMjl3ZVNCbWNtOXRJR1Z1WkZ4dUlDQWdJR1p2Y2lBb2FTQTlJR3hsYmlBdElERTdJR2tnUGowZ01Ec2dMUzFwS1NCN1hHNGdJQ0FnSUNCMFlYSm5aWFJiYVNBcklIUmhjbWRsZEZOMFlYSjBYU0E5SUhSb2FYTmJhU0FySUhOMFlYSjBYVnh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJR2xtSUNoc1pXNGdQQ0F4TURBd0lIeDhJQ0ZDZFdabVpYSXVWRmxRUlVSZlFWSlNRVmxmVTFWUVVFOVNWQ2tnZTF4dUlDQWdJQzh2SUdGelkyVnVaR2x1WnlCamIzQjVJR1p5YjIwZ2MzUmhjblJjYmlBZ0lDQm1iM0lnS0drZ1BTQXdPeUJwSUR3Z2JHVnVPeUFySzJrcElIdGNiaUFnSUNBZ0lIUmhjbWRsZEZ0cElDc2dkR0Z5WjJWMFUzUmhjblJkSUQwZ2RHaHBjMXRwSUNzZ2MzUmhjblJkWEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRlZwYm5RNFFYSnlZWGt1Y0hKdmRHOTBlWEJsTG5ObGRDNWpZV3hzS0Z4dUlDQWdJQ0FnZEdGeVoyVjBMRnh1SUNBZ0lDQWdkR2hwY3k1emRXSmhjbkpoZVNoemRHRnlkQ3dnYzNSaGNuUWdLeUJzWlc0cExGeHVJQ0FnSUNBZ2RHRnlaMlYwVTNSaGNuUmNiaUFnSUNBcFhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JHVnVYRzU5WEc1Y2JpOHZJRlZ6WVdkbE9seHVMeThnSUNBZ1luVm1abVZ5TG1acGJHd29iblZ0WW1WeVd5d2diMlptYzJWMFd5d2daVzVrWFYwcFhHNHZMeUFnSUNCaWRXWm1aWEl1Wm1sc2JDaGlkV1ptWlhKYkxDQnZabVp6WlhSYkxDQmxibVJkWFNsY2JpOHZJQ0FnSUdKMVptWmxjaTVtYVd4c0tITjBjbWx1WjFzc0lHOW1abk5sZEZzc0lHVnVaRjFkV3l3Z1pXNWpiMlJwYm1kZEtWeHVRblZtWm1WeUxuQnliM1J2ZEhsd1pTNW1hV3hzSUQwZ1puVnVZM1JwYjI0Z1ptbHNiQ0FvZG1Gc0xDQnpkR0Z5ZEN3Z1pXNWtMQ0JsYm1OdlpHbHVaeWtnZTF4dUlDQXZMeUJJWVc1a2JHVWdjM1J5YVc1bklHTmhjMlZ6T2x4dUlDQnBaaUFvZEhsd1pXOW1JSFpoYkNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSE4wWVhKMElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnWlc1amIyUnBibWNnUFNCemRHRnlkRnh1SUNBZ0lDQWdjM1JoY25RZ1BTQXdYRzRnSUNBZ0lDQmxibVFnUFNCMGFHbHpMbXhsYm1kMGFGeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdWdVpDQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUdWdVkyOWthVzVuSUQwZ1pXNWtYRzRnSUNBZ0lDQmxibVFnUFNCMGFHbHpMbXhsYm1kMGFGeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNMbXhsYm1kMGFDQTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ2RtRnlJR052WkdVZ1BTQjJZV3d1WTJoaGNrTnZaR1ZCZENnd0tWeHVJQ0FnSUNBZ2FXWWdLR052WkdVZ1BDQXlOVFlwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnNJRDBnWTI5a1pWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1pXNWpiMlJwYm1jZ0lUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCMGVYQmxiMllnWlc1amIyUnBibWNnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RsYm1OdlpHbHVaeUJ0ZFhOMElHSmxJR0VnYzNSeWFXNW5KeWxjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmxibU52WkdsdVp5QTlQVDBnSjNOMGNtbHVaeWNnSmlZZ0lVSjFabVpsY2k1cGMwVnVZMjlrYVc1bktHVnVZMjlrYVc1bktTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduVlc1cmJtOTNiaUJsYm1OdlpHbHVaem9nSnlBcklHVnVZMjlrYVc1bktWeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdkbUZzSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lIWmhiQ0E5SUhaaGJDQW1JREkxTlZ4dUlDQjlYRzVjYmlBZ0x5OGdTVzUyWVd4cFpDQnlZVzVuWlhNZ1lYSmxJRzV2ZENCelpYUWdkRzhnWVNCa1pXWmhkV3gwTENCemJ5QmpZVzRnY21GdVoyVWdZMmhsWTJzZ1pXRnliSGt1WEc0Z0lHbG1JQ2h6ZEdGeWRDQThJREFnZkh3Z2RHaHBjeTVzWlc1bmRHZ2dQQ0J6ZEdGeWRDQjhmQ0IwYUdsekxteGxibWQwYUNBOElHVnVaQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJTWVc1blpVVnljbTl5S0NkUGRYUWdiMllnY21GdVoyVWdhVzVrWlhnbktWeHVJQ0I5WEc1Y2JpQWdhV1lnS0dWdVpDQThQU0J6ZEdGeWRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpYRzRnSUgxY2JseHVJQ0J6ZEdGeWRDQTlJSE4wWVhKMElENCtQaUF3WEc0Z0lHVnVaQ0E5SUdWdVpDQTlQVDBnZFc1a1pXWnBibVZrSUQ4Z2RHaHBjeTVzWlc1bmRHZ2dPaUJsYm1RZ1BqNCtJREJjYmx4dUlDQnBaaUFvSVhaaGJDa2dkbUZzSUQwZ01GeHVYRzRnSUhaaGNpQnBYRzRnSUdsbUlDaDBlWEJsYjJZZ2RtRnNJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUdadmNpQW9hU0E5SUhOMFlYSjBPeUJwSUR3Z1pXNWtPeUFySzJrcElIdGNiaUFnSUNBZ0lIUm9hWE5iYVYwZ1BTQjJZV3hjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdkbUZ5SUdKNWRHVnpJRDBnUW5WbVptVnlMbWx6UW5WbVptVnlLSFpoYkNsY2JpQWdJQ0FnSUQ4Z2RtRnNYRzRnSUNBZ0lDQTZJSFYwWmpoVWIwSjVkR1Z6S0c1bGR5QkNkV1ptWlhJb2RtRnNMQ0JsYm1OdlpHbHVaeWt1ZEc5VGRISnBibWNvS1NsY2JpQWdJQ0IyWVhJZ2JHVnVJRDBnWW5sMFpYTXViR1Z1WjNSb1hHNGdJQ0FnWm05eUlDaHBJRDBnTURzZ2FTQThJR1Z1WkNBdElITjBZWEowT3lBcksya3BJSHRjYmlBZ0lDQWdJSFJvYVhOYmFTQXJJSE4wWVhKMFhTQTlJR0o1ZEdWelcya2dKU0JzWlc1ZFhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhSb2FYTmNibjFjYmx4dUx5OGdTRVZNVUVWU0lFWlZUa05VU1U5T1UxeHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1MllYSWdTVTVXUVV4SlJGOUNRVk5GTmpSZlVrVWdQU0F2VzE0clhGd3ZNQzA1UVMxYVlTMTZMVjlkTDJkY2JseHVablZ1WTNScGIyNGdZbUZ6WlRZMFkyeGxZVzRnS0hOMGNpa2dlMXh1SUNBdkx5Qk9iMlJsSUhOMGNtbHdjeUJ2ZFhRZ2FXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHeHBhMlVnWEZ4dUlHRnVaQ0JjWEhRZ1puSnZiU0IwYUdVZ2MzUnlhVzVuTENCaVlYTmxOalF0YW5NZ1pHOWxjeUJ1YjNSY2JpQWdjM1J5SUQwZ2MzUnlhVzVuZEhKcGJTaHpkSElwTG5KbGNHeGhZMlVvU1U1V1FVeEpSRjlDUVZORk5qUmZVa1VzSUNjbktWeHVJQ0F2THlCT2IyUmxJR052Ym5abGNuUnpJSE4wY21sdVozTWdkMmwwYUNCc1pXNW5kR2dnUENBeUlIUnZJQ2NuWEc0Z0lHbG1JQ2h6ZEhJdWJHVnVaM1JvSUR3Z01pa2djbVYwZFhKdUlDY25YRzRnSUM4dklFNXZaR1VnWVd4c2IzZHpJR1p2Y2lCdWIyNHRjR0ZrWkdWa0lHSmhjMlUyTkNCemRISnBibWR6SUNodGFYTnphVzVuSUhSeVlXbHNhVzVuSUQwOVBTa3NJR0poYzJVMk5DMXFjeUJrYjJWeklHNXZkRnh1SUNCM2FHbHNaU0FvYzNSeUxteGxibWQwYUNBbElEUWdJVDA5SURBcElIdGNiaUFnSUNCemRISWdQU0J6ZEhJZ0t5QW5QU2RjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjM1J5WEc1OVhHNWNibVoxYm1OMGFXOXVJSE4wY21sdVozUnlhVzBnS0hOMGNpa2dlMXh1SUNCcFppQW9jM1J5TG5SeWFXMHBJSEpsZEhWeWJpQnpkSEl1ZEhKcGJTZ3BYRzRnSUhKbGRIVnliaUJ6ZEhJdWNtVndiR0ZqWlNndlhseGNjeXQ4WEZ4ekt5UXZaeXdnSnljcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhSdlNHVjRJQ2h1S1NCN1hHNGdJR2xtSUNodUlEd2dNVFlwSUhKbGRIVnliaUFuTUNjZ0t5QnVMblJ2VTNSeWFXNW5LREUyS1Z4dUlDQnlaWFIxY200Z2JpNTBiMU4wY21sdVp5Z3hOaWxjYm4xY2JseHVablZ1WTNScGIyNGdkWFJtT0ZSdlFubDBaWE1nS0hOMGNtbHVaeXdnZFc1cGRITXBJSHRjYmlBZ2RXNXBkSE1nUFNCMWJtbDBjeUI4ZkNCSmJtWnBibWwwZVZ4dUlDQjJZWElnWTI5a1pWQnZhVzUwWEc0Z0lIWmhjaUJzWlc1bmRHZ2dQU0J6ZEhKcGJtY3ViR1Z1WjNSb1hHNGdJSFpoY2lCc1pXRmtVM1Z5Y205bllYUmxJRDBnYm5Wc2JGeHVJQ0IyWVhJZ1lubDBaWE1nUFNCYlhWeHVYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQmpiMlJsVUc5cGJuUWdQU0J6ZEhKcGJtY3VZMmhoY2tOdlpHVkJkQ2hwS1Z4dVhHNGdJQ0FnTHk4Z2FYTWdjM1Z5Y205bllYUmxJR052YlhCdmJtVnVkRnh1SUNBZ0lHbG1JQ2hqYjJSbFVHOXBiblFnUGlBd2VFUTNSa1lnSmlZZ1kyOWtaVkJ2YVc1MElEd2dNSGhGTURBd0tTQjdYRzRnSUNBZ0lDQXZMeUJzWVhOMElHTm9ZWElnZDJGeklHRWdiR1ZoWkZ4dUlDQWdJQ0FnYVdZZ0tDRnNaV0ZrVTNWeWNtOW5ZWFJsS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRzV2SUd4bFlXUWdlV1YwWEc0Z0lDQWdJQ0FnSUdsbUlDaGpiMlJsVUc5cGJuUWdQaUF3ZUVSQ1JrWXBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QjFibVY0Y0dWamRHVmtJSFJ5WVdsc1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NoMWJtbDBjeUF0UFNBektTQStJQzB4S1NCaWVYUmxjeTV3ZFhOb0tEQjRSVVlzSURCNFFrWXNJREI0UWtRcFhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVmNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hwSUNzZ01TQTlQVDBnYkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkVzV3WVdseVpXUWdiR1ZoWkZ4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2dvZFc1cGRITWdMVDBnTXlrZ1BpQXRNU2tnWW5sMFpYTXVjSFZ6YUNnd2VFVkdMQ0F3ZUVKR0xDQXdlRUpFS1Z4dUlDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbFhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0F2THlCMllXeHBaQ0JzWldGa1hHNGdJQ0FnSUNBZ0lHeGxZV1JUZFhKeWIyZGhkR1VnUFNCamIyUmxVRzlwYm5SY2JseHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUF5SUd4bFlXUnpJR2x1SUdFZ2NtOTNYRzRnSUNBZ0lDQnBaaUFvWTI5a1pWQnZhVzUwSUR3Z01IaEVRekF3S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2dvZFc1cGRITWdMVDBnTXlrZ1BpQXRNU2tnWW5sMFpYTXVjSFZ6YUNnd2VFVkdMQ0F3ZUVKR0xDQXdlRUpFS1Z4dUlDQWdJQ0FnSUNCc1pXRmtVM1Z5Y205bllYUmxJRDBnWTI5a1pWQnZhVzUwWEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsWEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklIWmhiR2xrSUhOMWNuSnZaMkYwWlNCd1lXbHlYRzRnSUNBZ0lDQmpiMlJsVUc5cGJuUWdQU0FvYkdWaFpGTjFjbkp2WjJGMFpTQXRJREI0UkRnd01DQThQQ0F4TUNCOElHTnZaR1ZRYjJsdWRDQXRJREI0UkVNd01Da2dLeUF3ZURFd01EQXdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHNaV0ZrVTNWeWNtOW5ZWFJsS1NCN1hHNGdJQ0FnSUNBdkx5QjJZV3hwWkNCaWJYQWdZMmhoY2l3Z1luVjBJR3hoYzNRZ1kyaGhjaUIzWVhNZ1lTQnNaV0ZrWEc0Z0lDQWdJQ0JwWmlBb0tIVnVhWFJ6SUMwOUlETXBJRDRnTFRFcElHSjVkR1Z6TG5CMWMyZ29NSGhGUml3Z01IaENSaXdnTUhoQ1JDbGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pXRmtVM1Z5Y205bllYUmxJRDBnYm5Wc2JGeHVYRzRnSUNBZ0x5OGdaVzVqYjJSbElIVjBaamhjYmlBZ0lDQnBaaUFvWTI5a1pWQnZhVzUwSUR3Z01IZzRNQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDaDFibWwwY3lBdFBTQXhLU0E4SURBcElHSnlaV0ZyWEc0Z0lDQWdJQ0JpZVhSbGN5NXdkWE5vS0dOdlpHVlFiMmx1ZENsY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dOdlpHVlFiMmx1ZENBOElEQjRPREF3S1NCN1hHNGdJQ0FnSUNCcFppQW9LSFZ1YVhSeklDMDlJRElwSUR3Z01Da2dZbkpsWVd0Y2JpQWdJQ0FnSUdKNWRHVnpMbkIxYzJnb1hHNGdJQ0FnSUNBZ0lHTnZaR1ZRYjJsdWRDQStQaUF3ZURZZ2ZDQXdlRU13TEZ4dUlDQWdJQ0FnSUNCamIyUmxVRzlwYm5RZ0ppQXdlRE5HSUh3Z01IZzRNRnh1SUNBZ0lDQWdLVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjlrWlZCdmFXNTBJRHdnTUhneE1EQXdNQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDaDFibWwwY3lBdFBTQXpLU0E4SURBcElHSnlaV0ZyWEc0Z0lDQWdJQ0JpZVhSbGN5NXdkWE5vS0Z4dUlDQWdJQ0FnSUNCamIyUmxVRzlwYm5RZ1BqNGdNSGhESUh3Z01IaEZNQ3hjYmlBZ0lDQWdJQ0FnWTI5a1pWQnZhVzUwSUQ0K0lEQjROaUFtSURCNE0wWWdmQ0F3ZURnd0xGeHVJQ0FnSUNBZ0lDQmpiMlJsVUc5cGJuUWdKaUF3ZUROR0lId2dNSGc0TUZ4dUlDQWdJQ0FnS1Z4dUlDQWdJSDBnWld4elpTQnBaaUFvWTI5a1pWQnZhVzUwSUR3Z01IZ3hNVEF3TURBcElIdGNiaUFnSUNBZ0lHbG1JQ2dvZFc1cGRITWdMVDBnTkNrZ1BDQXdLU0JpY21WaGExeHVJQ0FnSUNBZ1lubDBaWE11Y0hWemFDaGNiaUFnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJRDQrSURCNE1USWdmQ0F3ZUVZd0xGeHVJQ0FnSUNBZ0lDQmpiMlJsVUc5cGJuUWdQajRnTUhoRElDWWdNSGd6UmlCOElEQjRPREFzWEc0Z0lDQWdJQ0FnSUdOdlpHVlFiMmx1ZENBK1BpQXdlRFlnSmlBd2VETkdJSHdnTUhnNE1DeGNiaUFnSUNBZ0lDQWdZMjlrWlZCdmFXNTBJQ1lnTUhnelJpQjhJREI0T0RCY2JpQWdJQ0FnSUNsY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpiblpoYkdsa0lHTnZaR1VnY0c5cGJuUW5LVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmllWFJsYzF4dWZWeHVYRzVtZFc1amRHbHZiaUJoYzJOcGFWUnZRbmwwWlhNZ0tITjBjaWtnZTF4dUlDQjJZWElnWW5sMFpVRnljbUY1SUQwZ1cxMWNiaUFnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCemRISXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0F2THlCT2IyUmxKM01nWTI5a1pTQnpaV1Z0Y3lCMGJ5QmlaU0JrYjJsdVp5QjBhR2x6SUdGdVpDQnViM1FnSmlBd2VEZEdMaTVjYmlBZ0lDQmllWFJsUVhKeVlYa3VjSFZ6YUNoemRISXVZMmhoY2tOdlpHVkJkQ2hwS1NBbUlEQjRSa1lwWEc0Z0lIMWNiaUFnY21WMGRYSnVJR0o1ZEdWQmNuSmhlVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjFkR1l4Tm14bFZHOUNlWFJsY3lBb2MzUnlMQ0IxYm1sMGN5a2dlMXh1SUNCMllYSWdZeXdnYUdrc0lHeHZYRzRnSUhaaGNpQmllWFJsUVhKeVlYa2dQU0JiWFZ4dUlDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJSE4wY2k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lHbG1JQ2dvZFc1cGRITWdMVDBnTWlrZ1BDQXdLU0JpY21WaGExeHVYRzRnSUNBZ1l5QTlJSE4wY2k1amFHRnlRMjlrWlVGMEtHa3BYRzRnSUNBZ2FHa2dQU0JqSUQ0K0lEaGNiaUFnSUNCc2J5QTlJR01nSlNBeU5UWmNiaUFnSUNCaWVYUmxRWEp5WVhrdWNIVnphQ2hzYnlsY2JpQWdJQ0JpZVhSbFFYSnlZWGt1Y0hWemFDaG9hU2xjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJpZVhSbFFYSnlZWGxjYm4xY2JseHVablZ1WTNScGIyNGdZbUZ6WlRZMFZHOUNlWFJsY3lBb2MzUnlLU0I3WEc0Z0lISmxkSFZ5YmlCaVlYTmxOalF1ZEc5Q2VYUmxRWEp5WVhrb1ltRnpaVFkwWTJ4bFlXNG9jM1J5S1NsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWW14cGRFSjFabVpsY2lBb2MzSmpMQ0JrYzNRc0lHOW1abk5sZEN3Z2JHVnVaM1JvS1NCN1hHNGdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnYkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNCcFppQW9LR2tnS3lCdlptWnpaWFFnUGowZ1pITjBMbXhsYm1kMGFDa2dmSHdnS0drZ1BqMGdjM0pqTG14bGJtZDBhQ2twSUdKeVpXRnJYRzRnSUNBZ1pITjBXMmtnS3lCdlptWnpaWFJkSUQwZ2MzSmpXMmxkWEc0Z0lIMWNiaUFnY21WMGRYSnVJR2xjYm4xY2JseHVablZ1WTNScGIyNGdhWE51WVc0Z0tIWmhiQ2tnZTF4dUlDQnlaWFIxY200Z2RtRnNJQ0U5UFNCMllXd2dMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRiR2x1WlNCdWJ5MXpaV3htTFdOdmJYQmhjbVZjYm4xY2JpSXNJaWQxYzJVZ2MzUnlhV04wSjF4dVhHNWxlSEJ2Y25SekxtSjVkR1ZNWlc1bmRHZ2dQU0JpZVhSbFRHVnVaM1JvWEc1bGVIQnZjblJ6TG5SdlFubDBaVUZ5Y21GNUlEMGdkRzlDZVhSbFFYSnlZWGxjYm1WNGNHOXlkSE11Wm5KdmJVSjVkR1ZCY25KaGVTQTlJR1p5YjIxQ2VYUmxRWEp5WVhsY2JseHVkbUZ5SUd4dmIydDFjQ0E5SUZ0ZFhHNTJZWElnY21WMlRHOXZhM1Z3SUQwZ1cxMWNiblpoY2lCQmNuSWdQU0IwZVhCbGIyWWdWV2x1ZERoQmNuSmhlU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dQeUJWYVc1ME9FRnljbUY1SURvZ1FYSnlZWGxjYmx4dWRtRnlJR052WkdVZ1BTQW5RVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMVJWVmxkWVdWcGhZbU5rWldabmFHbHFhMnh0Ym05d2NYSnpkSFYyZDNoNWVqQXhNak0wTlRZM09Ea3JMeWRjYm1admNpQW9kbUZ5SUdrZ1BTQXdMQ0JzWlc0Z1BTQmpiMlJsTG14bGJtZDBhRHNnYVNBOElHeGxianNnS3l0cEtTQjdYRzRnSUd4dmIydDFjRnRwWFNBOUlHTnZaR1ZiYVYxY2JpQWdjbVYyVEc5dmEzVndXMk52WkdVdVkyaGhja052WkdWQmRDaHBLVjBnUFNCcFhHNTlYRzVjYmk4dklGTjFjSEJ2Y25RZ1pHVmpiMlJwYm1jZ1ZWSk1MWE5oWm1VZ1ltRnpaVFkwSUhOMGNtbHVaM01zSUdGeklFNXZaR1V1YW5NZ1pHOWxjeTVjYmk4dklGTmxaVG9nYUhSMGNITTZMeTlsYmk1M2FXdHBjR1ZrYVdFdWIzSm5MM2RwYTJrdlFtRnpaVFkwSTFWU1RGOWhjSEJzYVdOaGRHbHZibk5jYm5KbGRreHZiMnQxY0ZzbkxTY3VZMmhoY2tOdlpHVkJkQ2d3S1YwZ1BTQTJNbHh1Y21WMlRHOXZhM1Z3V3lkZkp5NWphR0Z5UTI5a1pVRjBLREFwWFNBOUlEWXpYRzVjYm1aMWJtTjBhVzl1SUdkbGRFeGxibk1nS0dJMk5Da2dlMXh1SUNCMllYSWdiR1Z1SUQwZ1lqWTBMbXhsYm1kMGFGeHVYRzRnSUdsbUlDaHNaVzRnSlNBMElENGdNQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzUyWVd4cFpDQnpkSEpwYm1jdUlFeGxibWQwYUNCdGRYTjBJR0psSUdFZ2JYVnNkR2x3YkdVZ2IyWWdOQ2NwWEc0Z0lIMWNibHh1SUNBdkx5QlVjbWx0SUc5bVppQmxlSFJ5WVNCaWVYUmxjeUJoWm5SbGNpQndiR0ZqWldodmJHUmxjaUJpZVhSbGN5QmhjbVVnWm05MWJtUmNiaUFnTHk4Z1UyVmxPaUJvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2WW1WaGRHZGhiVzFwZEM5aVlYTmxOalF0YW5NdmFYTnpkV1Z6THpReVhHNGdJSFpoY2lCMllXeHBaRXhsYmlBOUlHSTJOQzVwYm1SbGVFOW1LQ2M5SnlsY2JpQWdhV1lnS0haaGJHbGtUR1Z1SUQwOVBTQXRNU2tnZG1Gc2FXUk1aVzRnUFNCc1pXNWNibHh1SUNCMllYSWdjR3hoWTJWSWIyeGtaWEp6VEdWdUlEMGdkbUZzYVdSTVpXNGdQVDA5SUd4bGJseHVJQ0FnSUQ4Z01GeHVJQ0FnSURvZ05DQXRJQ2gyWVd4cFpFeGxiaUFsSURRcFhHNWNiaUFnY21WMGRYSnVJRnQyWVd4cFpFeGxiaXdnY0d4aFkyVkliMnhrWlhKelRHVnVYVnh1ZlZ4dVhHNHZMeUJpWVhObE5qUWdhWE1nTkM4eklDc2dkWEFnZEc4Z2RIZHZJR05vWVhKaFkzUmxjbk1nYjJZZ2RHaGxJRzl5YVdkcGJtRnNJR1JoZEdGY2JtWjFibU4wYVc5dUlHSjVkR1ZNWlc1bmRHZ2dLR0kyTkNrZ2UxeHVJQ0IyWVhJZ2JHVnVjeUE5SUdkbGRFeGxibk1vWWpZMEtWeHVJQ0IyWVhJZ2RtRnNhV1JNWlc0Z1BTQnNaVzV6V3pCZFhHNGdJSFpoY2lCd2JHRmpaVWh2YkdSbGNuTk1aVzRnUFNCc1pXNXpXekZkWEc0Z0lISmxkSFZ5YmlBb0tIWmhiR2xrVEdWdUlDc2djR3hoWTJWSWIyeGtaWEp6VEdWdUtTQXFJRE1nTHlBMEtTQXRJSEJzWVdObFNHOXNaR1Z5YzB4bGJseHVmVnh1WEc1bWRXNWpkR2x2YmlCZllubDBaVXhsYm1kMGFDQW9ZalkwTENCMllXeHBaRXhsYml3Z2NHeGhZMlZJYjJ4a1pYSnpUR1Z1S1NCN1hHNGdJSEpsZEhWeWJpQW9LSFpoYkdsa1RHVnVJQ3NnY0d4aFkyVkliMnhrWlhKelRHVnVLU0FxSURNZ0x5QTBLU0F0SUhCc1lXTmxTRzlzWkdWeWMweGxibHh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjBiMEo1ZEdWQmNuSmhlU0FvWWpZMEtTQjdYRzRnSUhaaGNpQjBiWEJjYmlBZ2RtRnlJR3hsYm5NZ1BTQm5aWFJNWlc1ektHSTJOQ2xjYmlBZ2RtRnlJSFpoYkdsa1RHVnVJRDBnYkdWdWMxc3dYVnh1SUNCMllYSWdjR3hoWTJWSWIyeGtaWEp6VEdWdUlEMGdiR1Z1YzFzeFhWeHVYRzRnSUhaaGNpQmhjbklnUFNCdVpYY2dRWEp5S0Y5aWVYUmxUR1Z1WjNSb0tHSTJOQ3dnZG1Gc2FXUk1aVzRzSUhCc1lXTmxTRzlzWkdWeWMweGxiaWtwWEc1Y2JpQWdkbUZ5SUdOMWNrSjVkR1VnUFNBd1hHNWNiaUFnTHk4Z2FXWWdkR2hsY21VZ1lYSmxJSEJzWVdObGFHOXNaR1Z5Y3l3Z2IyNXNlU0JuWlhRZ2RYQWdkRzhnZEdobElHeGhjM1FnWTI5dGNHeGxkR1VnTkNCamFHRnljMXh1SUNCMllYSWdiR1Z1SUQwZ2NHeGhZMlZJYjJ4a1pYSnpUR1Z1SUQ0Z01GeHVJQ0FnSUQ4Z2RtRnNhV1JNWlc0Z0xTQTBYRzRnSUNBZ09pQjJZV3hwWkV4bGJseHVYRzRnSUhaaGNpQnBYRzRnSUdadmNpQW9hU0E5SURBN0lHa2dQQ0JzWlc0N0lHa2dLejBnTkNrZ2UxeHVJQ0FnSUhSdGNDQTlYRzRnSUNBZ0lDQW9jbVYyVEc5dmEzVndXMkkyTkM1amFHRnlRMjlrWlVGMEtHa3BYU0E4UENBeE9Da2dmRnh1SUNBZ0lDQWdLSEpsZGt4dmIydDFjRnRpTmpRdVkyaGhja052WkdWQmRDaHBJQ3NnTVNsZElEdzhJREV5S1NCOFhHNGdJQ0FnSUNBb2NtVjJURzl2YTNWd1cySTJOQzVqYUdGeVEyOWtaVUYwS0drZ0t5QXlLVjBnUER3Z05pa2dmRnh1SUNBZ0lDQWdjbVYyVEc5dmEzVndXMkkyTkM1amFHRnlRMjlrWlVGMEtHa2dLeUF6S1YxY2JpQWdJQ0JoY25KYlkzVnlRbmwwWlNzclhTQTlJQ2gwYlhBZ1BqNGdNVFlwSUNZZ01IaEdSbHh1SUNBZ0lHRnljbHRqZFhKQ2VYUmxLeXRkSUQwZ0tIUnRjQ0ErUGlBNEtTQW1JREI0UmtaY2JpQWdJQ0JoY25KYlkzVnlRbmwwWlNzclhTQTlJSFJ0Y0NBbUlEQjRSa1pjYmlBZ2ZWeHVYRzRnSUdsbUlDaHdiR0ZqWlVodmJHUmxjbk5NWlc0Z1BUMDlJRElwSUh0Y2JpQWdJQ0IwYlhBZ1BWeHVJQ0FnSUNBZ0tISmxka3h2YjJ0MWNGdGlOalF1WTJoaGNrTnZaR1ZCZENocEtWMGdQRHdnTWlrZ2ZGeHVJQ0FnSUNBZ0tISmxka3h2YjJ0MWNGdGlOalF1WTJoaGNrTnZaR1ZCZENocElDc2dNU2xkSUQ0K0lEUXBYRzRnSUNBZ1lYSnlXMk4xY2tKNWRHVXJLMTBnUFNCMGJYQWdKaUF3ZUVaR1hHNGdJSDFjYmx4dUlDQnBaaUFvY0d4aFkyVkliMnhrWlhKelRHVnVJRDA5UFNBeEtTQjdYRzRnSUNBZ2RHMXdJRDFjYmlBZ0lDQWdJQ2h5WlhaTWIyOXJkWEJiWWpZMExtTm9ZWEpEYjJSbFFYUW9hU2xkSUR3OElERXdLU0I4WEc0Z0lDQWdJQ0FvY21WMlRHOXZhM1Z3VzJJMk5DNWphR0Z5UTI5a1pVRjBLR2tnS3lBeEtWMGdQRHdnTkNrZ2ZGeHVJQ0FnSUNBZ0tISmxka3h2YjJ0MWNGdGlOalF1WTJoaGNrTnZaR1ZCZENocElDc2dNaWxkSUQ0K0lESXBYRzRnSUNBZ1lYSnlXMk4xY2tKNWRHVXJLMTBnUFNBb2RHMXdJRDQrSURncElDWWdNSGhHUmx4dUlDQWdJR0Z5Y2x0amRYSkNlWFJsS3l0ZElEMGdkRzF3SUNZZ01IaEdSbHh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR0Z5Y2x4dWZWeHVYRzVtZFc1amRHbHZiaUIwY21sd2JHVjBWRzlDWVhObE5qUWdLRzUxYlNrZ2UxeHVJQ0J5WlhSMWNtNGdiRzl2YTNWd1cyNTFiU0ErUGlBeE9DQW1JREI0TTBaZElDdGNiaUFnSUNCc2IyOXJkWEJiYm5WdElENCtJREV5SUNZZ01IZ3pSbDBnSzF4dUlDQWdJR3h2YjJ0MWNGdHVkVzBnUGo0Z05pQW1JREI0TTBaZElDdGNiaUFnSUNCc2IyOXJkWEJiYm5WdElDWWdNSGd6UmwxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWlc1amIyUmxRMmgxYm1zZ0tIVnBiblE0TENCemRHRnlkQ3dnWlc1a0tTQjdYRzRnSUhaaGNpQjBiWEJjYmlBZ2RtRnlJRzkxZEhCMWRDQTlJRnRkWEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0J6ZEdGeWREc2dhU0E4SUdWdVpEc2dhU0FyUFNBektTQjdYRzRnSUNBZ2RHMXdJRDFjYmlBZ0lDQWdJQ2dvZFdsdWREaGJhVjBnUER3Z01UWXBJQ1lnTUhoR1JqQXdNREFwSUN0Y2JpQWdJQ0FnSUNnb2RXbHVkRGhiYVNBcklERmRJRHc4SURncElDWWdNSGhHUmpBd0tTQXJYRzRnSUNBZ0lDQW9kV2x1ZERoYmFTQXJJREpkSUNZZ01IaEdSaWxjYmlBZ0lDQnZkWFJ3ZFhRdWNIVnphQ2gwY21sd2JHVjBWRzlDWVhObE5qUW9kRzF3S1NsY2JpQWdmVnh1SUNCeVpYUjFjbTRnYjNWMGNIVjBMbXB2YVc0b0p5Y3BYRzU5WEc1Y2JtWjFibU4wYVc5dUlHWnliMjFDZVhSbFFYSnlZWGtnS0hWcGJuUTRLU0I3WEc0Z0lIWmhjaUIwYlhCY2JpQWdkbUZ5SUd4bGJpQTlJSFZwYm5RNExteGxibWQwYUZ4dUlDQjJZWElnWlhoMGNtRkNlWFJsY3lBOUlHeGxiaUFsSURNZ0x5OGdhV1lnZDJVZ2FHRjJaU0F4SUdKNWRHVWdiR1ZtZEN3Z2NHRmtJRElnWW5sMFpYTmNiaUFnZG1GeUlIQmhjblJ6SUQwZ1cxMWNiaUFnZG1GeUlHMWhlRU5vZFc1clRHVnVaM1JvSUQwZ01UWXpPRE1nTHk4Z2JYVnpkQ0JpWlNCdGRXeDBhWEJzWlNCdlppQXpYRzVjYmlBZ0x5OGdaMjhnZEdoeWIzVm5hQ0IwYUdVZ1lYSnlZWGtnWlhabGNua2dkR2h5WldVZ1lubDBaWE1zSUhkbEoyeHNJR1JsWVd3Z2QybDBhQ0IwY21GcGJHbHVaeUJ6ZEhWbVppQnNZWFJsY2x4dUlDQm1iM0lnS0haaGNpQnBJRDBnTUN3Z2JHVnVNaUE5SUd4bGJpQXRJR1Y0ZEhKaFFubDBaWE03SUdrZ1BDQnNaVzR5T3lCcElDczlJRzFoZUVOb2RXNXJUR1Z1WjNSb0tTQjdYRzRnSUNBZ2NHRnlkSE11Y0hWemFDaGxibU52WkdWRGFIVnVheWgxYVc1ME9Dd2dhU3dnS0drZ0t5QnRZWGhEYUhWdWEweGxibWQwYUNrZ1BpQnNaVzR5SUQ4Z2JHVnVNaUE2SUNocElDc2diV0Y0UTJoMWJtdE1aVzVuZEdncEtTbGNiaUFnZlZ4dVhHNGdJQzh2SUhCaFpDQjBhR1VnWlc1a0lIZHBkR2dnZW1WeWIzTXNJR0oxZENCdFlXdGxJSE4xY21VZ2RHOGdibTkwSUdadmNtZGxkQ0IwYUdVZ1pYaDBjbUVnWW5sMFpYTmNiaUFnYVdZZ0tHVjRkSEpoUW5sMFpYTWdQVDA5SURFcElIdGNiaUFnSUNCMGJYQWdQU0IxYVc1ME9GdHNaVzRnTFNBeFhWeHVJQ0FnSUhCaGNuUnpMbkIxYzJnb1hHNGdJQ0FnSUNCc2IyOXJkWEJiZEcxd0lENCtJREpkSUN0Y2JpQWdJQ0FnSUd4dmIydDFjRnNvZEcxd0lEdzhJRFFwSUNZZ01IZ3pSbDBnSzF4dUlDQWdJQ0FnSnowOUoxeHVJQ0FnSUNsY2JpQWdmU0JsYkhObElHbG1JQ2hsZUhSeVlVSjVkR1Z6SUQwOVBTQXlLU0I3WEc0Z0lDQWdkRzF3SUQwZ0tIVnBiblE0VzJ4bGJpQXRJREpkSUR3OElEZ3BJQ3NnZFdsdWREaGJiR1Z1SUMwZ01WMWNiaUFnSUNCd1lYSjBjeTV3ZFhOb0tGeHVJQ0FnSUNBZ2JHOXZhM1Z3VzNSdGNDQStQaUF4TUYwZ0sxeHVJQ0FnSUNBZ2JHOXZhM1Z3V3loMGJYQWdQajRnTkNrZ0ppQXdlRE5HWFNBclhHNGdJQ0FnSUNCc2IyOXJkWEJiS0hSdGNDQThQQ0F5S1NBbUlEQjRNMFpkSUN0Y2JpQWdJQ0FnSUNjOUoxeHVJQ0FnSUNsY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSjBjeTVxYjJsdUtDY25LVnh1ZlZ4dUlpd2lMeW9oSUdsbFpXVTNOVFF1SUVKVFJDMHpMVU5zWVhWelpTQk1hV05sYm5ObExpQkdaWEp2YzNNZ1FXSnZkV3RvWVdScGFtVm9JRHhvZEhSd2N6b3ZMMlpsY205emN5NXZjbWN2YjNCbGJuTnZkWEpqWlQ0Z0tpOWNibVY0Y0c5eWRITXVjbVZoWkNBOUlHWjFibU4wYVc5dUlDaGlkV1ptWlhJc0lHOW1abk5sZEN3Z2FYTk1SU3dnYlV4bGJpd2dia0o1ZEdWektTQjdYRzRnSUhaaGNpQmxMQ0J0WEc0Z0lIWmhjaUJsVEdWdUlEMGdLRzVDZVhSbGN5QXFJRGdwSUMwZ2JVeGxiaUF0SURGY2JpQWdkbUZ5SUdWTllYZ2dQU0FvTVNBOFBDQmxUR1Z1S1NBdElERmNiaUFnZG1GeUlHVkNhV0Z6SUQwZ1pVMWhlQ0ErUGlBeFhHNGdJSFpoY2lCdVFtbDBjeUE5SUMwM1hHNGdJSFpoY2lCcElEMGdhWE5NUlNBL0lDaHVRbmwwWlhNZ0xTQXhLU0E2SURCY2JpQWdkbUZ5SUdRZ1BTQnBjMHhGSUQ4Z0xURWdPaUF4WEc0Z0lIWmhjaUJ6SUQwZ1luVm1abVZ5VzI5bVpuTmxkQ0FySUdsZFhHNWNiaUFnYVNBclBTQmtYRzVjYmlBZ1pTQTlJSE1nSmlBb0tERWdQRHdnS0MxdVFtbDBjeWtwSUMwZ01TbGNiaUFnY3lBK1BqMGdLQzF1UW1sMGN5bGNiaUFnYmtKcGRITWdLejBnWlV4bGJseHVJQ0JtYjNJZ0tEc2dia0pwZEhNZ1BpQXdPeUJsSUQwZ0tHVWdLaUF5TlRZcElDc2dZblZtWm1WeVcyOW1abk5sZENBcklHbGRMQ0JwSUNzOUlHUXNJRzVDYVhSeklDMDlJRGdwSUh0OVhHNWNiaUFnYlNBOUlHVWdKaUFvS0RFZ1BEd2dLQzF1UW1sMGN5a3BJQzBnTVNsY2JpQWdaU0ErUGowZ0tDMXVRbWwwY3lsY2JpQWdia0pwZEhNZ0t6MGdiVXhsYmx4dUlDQm1iM0lnS0RzZ2JrSnBkSE1nUGlBd095QnRJRDBnS0cwZ0tpQXlOVFlwSUNzZ1luVm1abVZ5VzI5bVpuTmxkQ0FySUdsZExDQnBJQ3M5SUdRc0lHNUNhWFJ6SUMwOUlEZ3BJSHQ5WEc1Y2JpQWdhV1lnS0dVZ1BUMDlJREFwSUh0Y2JpQWdJQ0JsSUQwZ01TQXRJR1ZDYVdGelhHNGdJSDBnWld4elpTQnBaaUFvWlNBOVBUMGdaVTFoZUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ0SUQ4Z1RtRk9JRG9nS0NoeklEOGdMVEVnT2lBeEtTQXFJRWx1Wm1sdWFYUjVLVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzBnUFNCdElDc2dUV0YwYUM1d2IzY29NaXdnYlV4bGJpbGNiaUFnSUNCbElEMGdaU0F0SUdWQ2FXRnpYRzRnSUgxY2JpQWdjbVYwZFhKdUlDaHpJRDhnTFRFZ09pQXhLU0FxSUcwZ0tpQk5ZWFJvTG5CdmR5Z3lMQ0JsSUMwZ2JVeGxiaWxjYm4xY2JseHVaWGh3YjNKMGN5NTNjbWwwWlNBOUlHWjFibU4wYVc5dUlDaGlkV1ptWlhJc0lIWmhiSFZsTENCdlptWnpaWFFzSUdselRFVXNJRzFNWlc0c0lHNUNlWFJsY3lrZ2UxeHVJQ0IyWVhJZ1pTd2diU3dnWTF4dUlDQjJZWElnWlV4bGJpQTlJQ2h1UW5sMFpYTWdLaUE0S1NBdElHMU1aVzRnTFNBeFhHNGdJSFpoY2lCbFRXRjRJRDBnS0RFZ1BEd2daVXhsYmlrZ0xTQXhYRzRnSUhaaGNpQmxRbWxoY3lBOUlHVk5ZWGdnUGo0Z01WeHVJQ0IyWVhJZ2NuUWdQU0FvYlV4bGJpQTlQVDBnTWpNZ1B5Qk5ZWFJvTG5CdmR5Z3lMQ0F0TWpRcElDMGdUV0YwYUM1d2IzY29NaXdnTFRjM0tTQTZJREFwWEc0Z0lIWmhjaUJwSUQwZ2FYTk1SU0EvSURBZ09pQW9ia0o1ZEdWeklDMGdNU2xjYmlBZ2RtRnlJR1FnUFNCcGMweEZJRDhnTVNBNklDMHhYRzRnSUhaaGNpQnpJRDBnZG1Gc2RXVWdQQ0F3SUh4OElDaDJZV3gxWlNBOVBUMGdNQ0FtSmlBeElDOGdkbUZzZFdVZ1BDQXdLU0EvSURFZ09pQXdYRzVjYmlBZ2RtRnNkV1VnUFNCTllYUm9MbUZpY3loMllXeDFaU2xjYmx4dUlDQnBaaUFvYVhOT1lVNG9kbUZzZFdVcElIeDhJSFpoYkhWbElEMDlQU0JKYm1acGJtbDBlU2tnZTF4dUlDQWdJRzBnUFNCcGMwNWhUaWgyWVd4MVpTa2dQeUF4SURvZ01GeHVJQ0FnSUdVZ1BTQmxUV0Y0WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnWlNBOUlFMWhkR2d1Wm14dmIzSW9UV0YwYUM1c2IyY29kbUZzZFdVcElDOGdUV0YwYUM1TVRqSXBYRzRnSUNBZ2FXWWdLSFpoYkhWbElDb2dLR01nUFNCTllYUm9MbkJ2ZHlneUxDQXRaU2twSUR3Z01Ta2dlMXh1SUNBZ0lDQWdaUzB0WEc0Z0lDQWdJQ0JqSUNvOUlESmNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHVWdLeUJsUW1saGN5QStQU0F4S1NCN1hHNGdJQ0FnSUNCMllXeDFaU0FyUFNCeWRDQXZJR05jYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RtRnNkV1VnS3owZ2NuUWdLaUJOWVhSb0xuQnZkeWd5TENBeElDMGdaVUpwWVhNcFhHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMllXeDFaU0FxSUdNZ1BqMGdNaWtnZTF4dUlDQWdJQ0FnWlNzclhHNGdJQ0FnSUNCaklDODlJREpjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWlNBcklHVkNhV0Z6SUQ0OUlHVk5ZWGdwSUh0Y2JpQWdJQ0FnSUcwZ1BTQXdYRzRnSUNBZ0lDQmxJRDBnWlUxaGVGeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1pTQXJJR1ZDYVdGeklENDlJREVwSUh0Y2JpQWdJQ0FnSUcwZ1BTQW9LSFpoYkhWbElDb2dZeWtnTFNBeEtTQXFJRTFoZEdndWNHOTNLRElzSUcxTVpXNHBYRzRnSUNBZ0lDQmxJRDBnWlNBcklHVkNhV0Z6WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHMGdQU0IyWVd4MVpTQXFJRTFoZEdndWNHOTNLRElzSUdWQ2FXRnpJQzBnTVNrZ0tpQk5ZWFJvTG5CdmR5Z3lMQ0J0VEdWdUtWeHVJQ0FnSUNBZ1pTQTlJREJjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JtYjNJZ0tEc2diVXhsYmlBK1BTQTRPeUJpZFdabVpYSmJiMlptYzJWMElDc2dhVjBnUFNCdElDWWdNSGhtWml3Z2FTQXJQU0JrTENCdElDODlJREkxTml3Z2JVeGxiaUF0UFNBNEtTQjdmVnh1WEc0Z0lHVWdQU0FvWlNBOFBDQnRUR1Z1S1NCOElHMWNiaUFnWlV4bGJpQXJQU0J0VEdWdVhHNGdJR1p2Y2lBb095QmxUR1Z1SUQ0Z01Ec2dZblZtWm1WeVcyOW1abk5sZENBcklHbGRJRDBnWlNBbUlEQjRabVlzSUdrZ0t6MGdaQ3dnWlNBdlBTQXlOVFlzSUdWTVpXNGdMVDBnT0NrZ2UzMWNibHh1SUNCaWRXWm1aWEpiYjJabWMyVjBJQ3NnYVNBdElHUmRJSHc5SUhNZ0tpQXhNamhjYm4xY2JpSXNJblpoY2lCMGIxTjBjbWx1WnlBOUlIdDlMblJ2VTNSeWFXNW5PMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVGeWNtRjVMbWx6UVhKeVlYa2dmSHdnWm5WdVkzUnBiMjRnS0dGeWNpa2dlMXh1SUNCeVpYUjFjbTRnZEc5VGRISnBibWN1WTJGc2JDaGhjbklwSUQwOUlDZGJiMkpxWldOMElFRnljbUY1WFNjN1hHNTlPMXh1SWl3aUx5OGdjMjkxY21ObE9pQm5iMjluYkdVdmNISnZkRzlpZFdZdlpIVnlZWFJwYjI0dWNISnZkRzljYmk4cUtseHVJQ29nUUdacGJHVnZkbVZ5ZG1sbGQxeHVJQ29nUUdWdWFHRnVZMlZoWW14bFhHNGdLaUJBYzNWd2NISmxjM01nZTIxcGMzTnBibWRTWlhGMWFYSmxmU0J5WlhCdmNuUnpJR1Z5Y205eUlHOXVJR2x0Y0d4cFkybDBJSFI1Y0dVZ2RYTmhaMlZ6TGx4dUlDb2dRSE4xY0hCeVpYTnpJSHR0WlhOellXZGxRMjl1ZG1WdWRHbHZibk45SUVwVElFTnZiWEJwYkdWeUlISmxjRzl5ZEhNZ1lXNGdaWEp5YjNJZ2FXWWdZU0IyWVhKcFlXSnNaU0J2Y2x4dUlDb2dJQ0FnSUdacFpXeGtJSE4wWVhKMGN5QjNhWFJvSUNkTlUwZGZKeUJoYm1RZ2FYTnVKM1FnWVNCMGNtRnVjMnhoZEdGaWJHVWdiV1Z6YzJGblpTNWNiaUFxSUVCd2RXSnNhV05jYmlBcUwxeHVMeThnUjBWT1JWSkJWRVZFSUVOUFJFVWdMUzBnUkU4Z1RrOVVJRVZFU1ZRaFhHNHZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQXFMMXh1THk4Z1FIUnpMVzV2WTJobFkydGNibHh1ZG1GeUlHcHpjR0lnUFNCeVpYRjFhWEpsS0NkbmIyOW5iR1V0Y0hKdmRHOWlkV1luS1R0Y2JuWmhjaUJuYjI5bklEMGdhbk53WWp0Y2JuWmhjaUJuYkc5aVlXd2dQU0JHZFc1amRHbHZiaWduY21WMGRYSnVJSFJvYVhNbktTZ3BPMXh1WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0Z1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dUxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dUxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJpYzdYRzU5WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJpNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjR1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjU5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJpNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYzJWamIyNWtjem9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQXdLU3hjYmlBZ0lDQnVZVzV2Y3pvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXlMQ0F3S1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjQ3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RWRYSmhkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUjFjbUYwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0hKbFlXUmxjaTV5WldGa1NXNTBOalFvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTJWamIyNWtjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtTVzUwTXpJb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRtRnViM01vZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVkWEpoZEdsdmJpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFZFhKaGRHbHZibjBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRk5sWTI5dVpITW9LVHRjYmlBZ2FXWWdLR1lnSVQwOUlEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZKYm5RMk5DaGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhST1lXNXZjeWdwTzF4dUlDQnBaaUFvWmlBaFBUMGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVsdWRETXlLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2FXNTBOalFnYzJWamIyNWtjeUE5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFZFhKaGRHbHZiaTV3Y205MGIzUjVjR1V1WjJWMFUyVmpiMjVrY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENBd0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSMWNtRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVMbkJ5YjNSdmRIbHdaUzV6WlhSVFpXTnZibVJ6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUWNtOTBiek5KYm5SR2FXVnNaQ2gwYUdsekxDQXhMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dhVzUwTXpJZ2JtRnViM01nUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjR1Y0hKdmRHOTBlWEJsTG1kbGRFNWhibTl6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSURBcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhWeVlYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSSFZ5WVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJtOXpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkpiblJHYVdWc1pDaDBhR2x6TENBeUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JtZHZiMmN1YjJKcVpXTjBMbVY0ZEdWdVpDaGxlSEJ2Y25SekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1lwTzF4dUlpd2lMeThnYzI5MWNtTmxPaUJuYjI5bmJHVXZjSEp2ZEc5aWRXWXZZVzU1TG5CeWIzUnZYRzR2S2lwY2JpQXFJRUJtYVd4bGIzWmxjblpwWlhkY2JpQXFJRUJsYm1oaGJtTmxZV0pzWlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHR0YVhOemFXNW5VbVZ4ZFdseVpYMGdjbVZ3YjNKMGN5Qmxjbkp2Y2lCdmJpQnBiWEJzYVdOcGRDQjBlWEJsSUhWellXZGxjeTVjYmlBcUlFQnpkWEJ3Y21WemN5QjdiV1Z6YzJGblpVTnZiblpsYm5ScGIyNXpmU0JLVXlCRGIyMXdhV3hsY2lCeVpYQnZjblJ6SUdGdUlHVnljbTl5SUdsbUlHRWdkbUZ5YVdGaWJHVWdiM0pjYmlBcUlDQWdJQ0JtYVdWc1pDQnpkR0Z5ZEhNZ2QybDBhQ0FuVFZOSFh5Y2dZVzVrSUdsemJpZDBJR0VnZEhKaGJuTnNZWFJoWW14bElHMWxjM05oWjJVdVhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JpOHZJRWRGVGtWU1FWUkZSQ0JEVDBSRklDMHRJRVJQSUU1UFZDQkZSRWxVSVZ4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ0tpOWNiaTh2SUVCMGN5MXViMk5vWldOclhHNWNiblpoY2lCcWMzQmlJRDBnY21WeGRXbHlaU2duWjI5dloyeGxMWEJ5YjNSdlluVm1KeWs3WEc1MllYSWdaMjl2WnlBOUlHcHpjR0k3WEc1MllYSWdaMnh2WW1Gc0lEMGdSblZ1WTNScGIyNG9KM0psZEhWeWJpQjBhR2x6Snlrb0tUdGNibHh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmtuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmtnUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dMVEVzSUc1MWJHd3NJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVTd2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmt1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVTYzdYRzU5WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmt1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlUzUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVCYm5sOUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVCYm5rdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJSFI1Y0dWVmNtdzZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVN3Z1hDSmNJaWtzWEc0Z0lDQWdkbUZzZFdVNklHMXpaeTVuWlhSV1lXeDFaVjloYzBJMk5DZ3BYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlVHRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmt1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrRnVlWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRlI1Y0dWVmNtd29kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHNoVldsdWREaEJjbkpoZVgwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW5sMFpYTW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWbUZzZFdVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVYMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJVZVhCbFZYSnNLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVm1Gc2RXVmZZWE5WT0NncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUW5sMFpYTW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnZEhsd1pWOTFjbXdnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NUxuQnliM1J2ZEhsd1pTNW5aWFJVZVhCbFZYSnNJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVc1NWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVTNXdjbTkwYjNSNWNHVXVjMlYwVkhsd1pWVnliQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0o1ZEdWeklIWmhiSFZsSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZXlFb2MzUnlhVzVuZkZWcGJuUTRRWEp5WVhrcGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG5CeWIzUnZkSGx3WlM1blpYUldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUhzaEtITjBjbWx1WjN4VmFXNTBPRUZ5Y21GNUtYMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmllWFJsY3lCMllXeDFaU0E5SURJN1hHNGdLaUJVYUdseklHbHpJR0VnZEhsd1pTMWpiMjUyWlhKemFXOXVJSGR5WVhCd1pYSWdZWEp2ZFc1a0lHQm5aWFJXWVd4MVpTZ3BZRnh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFXNTVMbkJ5YjNSdmRIbHdaUzVuWlhSV1lXeDFaVjloYzBJMk5DQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVlubDBaWE5CYzBJMk5DaGNiaUFnSUNBZ0lIUm9hWE11WjJWMFZtRnNkV1VvS1NrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSjVkR1Z6SUhaaGJIVmxJRDBnTWp0Y2JpQXFJRTV2ZEdVZ2RHaGhkQ0JWYVc1ME9FRnljbUY1SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1FnYjI0Z1lXeHNJR0p5YjNkelpYSnpMbHh1SUNvZ1FITmxaU0JvZEhSd09pOHZZMkZ1YVhWelpTNWpiMjB2VldsdWREaEJjbkpoZVZ4dUlDb2dWR2hwY3lCcGN5QmhJSFI1Y0dVdFkyOXVkbVZ5YzJsdmJpQjNjbUZ3Y0dWeUlHRnliM1Z1WkNCZ1oyVjBWbUZzZFdVb0tXQmNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1TG5CeWIzUnZkSGx3WlM1blpYUldZV3gxWlY5aGMxVTRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdleUZWYVc1ME9FRnljbUY1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1KNWRHVnpRWE5WT0NoY2JpQWdJQ0FnSUhSb2FYTXVaMlYwVm1Gc2RXVW9LU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVNoemRISnBibWQ4VldsdWREaEJjbkpoZVNsOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtGdWVYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VjSEp2ZEc5MGVYQmxMbk5sZEZaaGJIVmxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TkNlWFJsYzBacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVaMjl2Wnk1dlltcGxZM1F1WlhoMFpXNWtLR1Y0Y0c5eWRITXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmlrN1hHNHZLaUJVYUdseklHTnZaR1VnZDJsc2JDQmlaU0JwYm5ObGNuUmxaQ0JwYm5SdklHZGxibVZ5WVhSbFpDQmpiMlJsSUdadmNseHVJQ29nWjI5dloyeGxMM0J5YjNSdlluVm1MMkZ1ZVM1d2NtOTBieTRnS2k5Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIUm9aU0IwZVhCbElHNWhiV1VnWTI5dWRHRnBibVZrSUdsdUlIUm9hWE1nYVc1emRHRnVZMlVzSUdsbUlHRnVlUzVjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjN4MWJtUmxabWx1WldSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUJibmt1Y0hKdmRHOTBlWEJsTG1kbGRGUjVjR1ZPWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbWRsZEZSNWNHVlZjbXdvS1M1emNHeHBkQ2duTHljcExuQnZjQ2dwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZCaFkydHpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJR2x1YzNSaGJtTmxJR2x1ZEc4Z2RHaHBjeUJCYm5rdVhHNGdLaUJHYjNJZ1ltbHVZWEo1SUdadmNtMWhkQ0IxYzJGblpTQnZibXg1TGx4dUlDb2dRSEJoY21GdElIc2hWV2x1ZERoQmNuSmhlWDBnYzJWeWFXRnNhWHBsWkNCVWFHVWdjMlZ5YVdGc2FYcGxaQ0JrWVhSaElIUnZJSEJoWTJzdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdibUZ0WlNCVWFHVWdkSGx3WlNCdVlXMWxJRzltSUhSb2FYTWdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVp6MTlJRzl3ZEY5MGVYQmxWWEpzVUhKbFptbDRJSFJvWlNCMGVYQmxJRlZTVENCd2NtVm1hWGd1WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VjSEp2ZEc5MGVYQmxMbkJoWTJzZ1BTQm1kVzVqZEdsdmJpaHpaWEpwWVd4cGVtVmtMQ0J1WVcxbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXdkRjkwZVhCbFZYSnNVSEpsWm1sNEtTQjdYRzRnSUdsbUlDZ2hiM0IwWDNSNWNHVlZjbXhRY21WbWFYZ3BJSHRjYmlBZ0lDQnZjSFJmZEhsd1pWVnliRkJ5WldacGVDQTlJQ2QwZVhCbExtZHZiMmRzWldGd2FYTXVZMjl0THljN1hHNGdJSDFjYmx4dUlDQnBaaUFvYjNCMFgzUjVjR1ZWY214UWNtVm1hWGd1YzNWaWMzUnlLQzB4S1NBaFBTQW5MeWNwSUh0Y2JpQWdJQ0IwYUdsekxuTmxkRlI1Y0dWVmNtd29iM0IwWDNSNWNHVlZjbXhRY21WbWFYZ2dLeUFuTHljZ0t5QnVZVzFsS1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCMGFHbHpMbk5sZEZSNWNHVlZjbXdvYjNCMFgzUjVjR1ZWY214UWNtVm1hWGdnS3lCdVlXMWxLVHRjYmlBZ2ZWeHVYRzRnSUhSb2FYTXVjMlYwVm1Gc2RXVW9jMlZ5YVdGc2FYcGxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhSbGJYQnNZWFJsSUZSY2JpQXFJRlZ1Y0dGamEzTWdkR2hwY3lCQmJua2dhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dUtGVnBiblE0UVhKeVlYa3BPbFI5SUdSbGMyVnlhV0ZzYVhwbElFWjFibU4wYVc5dUlIUm9ZWFFnZDJsc2JDQmtaWE5sY21saGJHbDZaVnh1SUNvZ0lDQWdJSFJvWlNCaWFXNWhjbmtnWkdGMFlTQndjbTl3WlhKc2VTNWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElGUm9aU0JsZUhCbFkzUmxaQ0IwZVhCbElHNWhiV1VnYjJZZ2RHaHBjeUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCeVpYUjFjbTRnZXo5VWZTQkpaaUIwYUdVZ2JtRnRaU0J0WVhSamFHVmtJSFJvWlNCbGVIQmxZM1JsWkNCdVlXMWxMQ0J5WlhSMWNtNXpJSFJvWlNCa1pYTmxjbWxoYkdsNlpXUmNiaUFxSUNBZ0lDQnZZbXBsWTNRc0lHOTBhR1Z5ZDJselpTQnlaWFIxY201eklHNTFiR3d1WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua3VjSEp2ZEc5MGVYQmxMblZ1Y0dGamF5QTlJR1oxYm1OMGFXOXVLR1JsYzJWeWFXRnNhWHBsTENCdVlXMWxLU0I3WEc0Z0lHbG1JQ2gwYUdsekxtZGxkRlI1Y0dWT1lXMWxLQ2tnUFQwZ2JtRnRaU2tnZTF4dUlDQWdJSEpsZEhWeWJpQmtaWE5sY21saGJHbDZaU2gwYUdsekxtZGxkRlpoYkhWbFgyRnpWVGdvS1NrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JuMDdYRzRpTENKcGJYQnZjblFnZXlCUWNtOTBiMkoxWmsxbGMzTmhaMlVnZlNCbWNtOXRJRndpUUdsdGNISnZZbUZpYkdVdFpXNW5MMmR5Y0dNdGQyVmlMMlJwYzNRdmRIbHdhVzVuY3k5dFpYTnpZV2RsWENJN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCQ1lYTmxRMmhoYm01bGJDQjdYRzVjZEhCMVlteHBZeUJ5WldGa2IyNXNlU0J5WldGa2VUb2dVSEp2YldselpUeGhibmsrTzF4dVhHNWNkSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2djR1ZsY2tOdmJtNDZJRkpVUTFCbFpYSkRiMjV1WldOMGFXOXVPMXh1WEhSd2NtbDJZWFJsSUhKbFlXUnZibXg1SUdSaGRHRkRhR0Z1Ym1Wc09pQlNWRU5FWVhSaFEyaGhibTVsYkR0Y2JseDBjSEpwZG1GMFpTQndVbVZ6YjJ4MlpUb2dLSFpoYkhWbE9pQmhibmtwSUQwK0lIWnZhV1E3WEc1Y2JseDBjSEpwZG1GMFpTQmpiRzl6WldRNklHSnZiMnhsWVc0N1hHNWNkSEJ5YVhaaGRHVWdZMnh2YzJWa1VtVmhjMjl1UHpvZ1JYSnliM0k3WEc1Y2JseDBjSEp2ZEdWamRHVmtJRzFoZUVSaGRHRkRhR0Z1Ym1Wc1UybDZaU0E5SURFMk16ZzBPMXh1WEc1Y2RHTnZibk4wY25WamRHOXlLSEJsWlhKRGIyNXVPaUJTVkVOUVpXVnlRMjl1Ym1WamRHbHZiaXdnWkdGMFlVTm9ZVzV1Wld3NklGSlVRMFJoZEdGRGFHRnVibVZzS1NCN1hHNWNkRngwZEdocGN5NXdaV1Z5UTI5dWJpQTlJSEJsWlhKRGIyNXVPMXh1WEhSY2RIUm9hWE11WkdGMFlVTm9ZVzV1Wld3Z1BTQmtZWFJoUTJoaGJtNWxiRHRjYmx4dVhIUmNkSFJvYVhNdWNtVmhaSGtnUFNCdVpYY2dVSEp2YldselpUeGhibmsrS0hKbGMyOXNkbVVnUFQ0Z2UxeHVYSFJjZEZ4MGRHaHBjeTV3VW1WemIyeDJaU0E5SUhKbGMyOXNkbVU3WEc1Y2RGeDBmU2xjYmx4dVhIUmNkR1JoZEdGRGFHRnVibVZzTG05dWIzQmxiaUE5SUNncElEMCtJSFJvYVhNdWIyNURhR0Z1Ym1Wc1QzQmxiaWdwTzF4dVhIUmNkR1JoZEdGRGFHRnVibVZzTG05dVkyeHZjMlVnUFNBb0tTQTlQaUIwYUdsekxtOXVRMmhoYm01bGJFTnNiM05sS0NrN1hHNWNkRngwWkdGMFlVTm9ZVzV1Wld3dWIyNWxjbkp2Y2lBOUlDaGxkam9nVWxSRFJYSnliM0pGZG1WdWRDa2dQVDRnZEdocGN5NXZia05vWVc1dVpXeEZjbkp2Y2lobGRpazdYRzVjYmx4MFhIUndaV1Z5UTI5dWJpNXZibWxqWldOdmJtNWxZM1JwYjI1emRHRjBaV05vWVc1blpTQTlJQ2dwSUQwK0lHTnZibk52YkdVdWJHOW5LSEJsWlhKRGIyNXVMbWxqWlVOdmJtNWxZM1JwYjI1VGRHRjBaU2s3WEc1Y2RIMWNibHh1WEhSd2RXSnNhV01nWTJ4dmMyVW9LU0I3WEc1Y2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXRnpiMjRvZFc1a1pXWnBibVZrS1R0Y2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCcGMwTnNiM05sWkNncElIdGNibHgwWEhSeVpYUjFjbTRnZEdocGN5NWpiRzl6WldSY2JseDBmVnh1WEc1Y2RIQjFZbXhwWXlCcGMwTnNiM05sWkZKbFlYTnZiaWdwSUh0Y2JseDBYSFJ5WlhSMWNtNGdkR2hwY3k1amJHOXpaV1JTWldGemIyNWNibHgwZlZ4dVhHNWNkSEJ5YVhaaGRHVWdZMnh2YzJWWGFYUm9VbVZoYzI5dUtHVnljajg2SUVWeWNtOXlLU0I3WEc1Y2RGeDBhV1lnS0hSb2FYTXVZMnh2YzJWa0tTQjdYRzVjZEZ4MFhIUnlaWFIxY200N1hHNWNkRngwZlZ4dVhIUmNkSFJvYVhNdVkyeHZjMlZrSUQwZ2RISjFaVHRjYmx4MFhIUjBhR2x6TG1Oc2IzTmxaRkpsWVhOdmJpQTlJR1Z5Y2p0Y2JseDBYSFIwYUdsekxuQmxaWEpEYjI1dUxtTnNiM05sS0NrN1hHNWNkSDFjYmx4dVhIUndjbWwyWVhSbElHOXVRMmhoYm01bGJFOXdaVzRvS1NCN1hHNWNkRngwZEdocGN5NXdVbVZ6YjJ4MlpTaDFibVJsWm1sdVpXUXBPMXh1WEhSOVhHNWNibHgwY0hKcGRtRjBaU0J2YmtOb1lXNXVaV3hEYkc5elpTZ3BJSHRjYmx4MFhIUjBhR2x6TG1Oc2IzTmxWMmwwYUZKbFlYTnZiaWh1WlhjZ1JYSnliM0lvWENKa1lYUmhJR05vWVc1dVpXd2dZMnh2YzJWa1hDSXBLVHRjYmx4MGZWeHVYRzVjZEhCeWFYWmhkR1VnYjI1RGFHRnVibVZzUlhKeWIzSW9aWFk2SUZKVVEwVnljbTl5UlhabGJuUXBJSHRjYmx4MFhIUmpiMjV6YjJ4bExtVnljbTl5S0Z3aVkyaGhibTVsYkNCbGNuSnZjbHdpTENCbGRpazdYRzVjZEZ4MGRHaHBjeTVqYkc5elpWZHBkR2hTWldGemIyNG9aWFl1WlhKeWIzSXBPMXh1WEhSOVhHNWNibHgwY0hKdmRHVmpkR1ZrSUhkeWFYUmxLRzF6WnpvZ1VISnZkRzlpZFdaTlpYTnpZV2RsS1NCN1hHNWNkRngwZEdocGN5NWtZWFJoUTJoaGJtNWxiQzV6Wlc1a0tHMXpaeTV6WlhKcFlXeHBlbVZDYVc1aGNua29LU2s3WEc1Y2RIMWNibjFjYmlJc0ltbHRjRzl5ZENCN0lHZHljR01nZlNCbWNtOXRJRndpUUdsdGNISnZZbUZpYkdVdFpXNW5MMmR5Y0dNdGQyVmlYQ0k3WEc1cGJYQnZjblFnZXlCTlpYUmhaR0YwWVN3Z1VHRmphMlYwVFdWemMyRm5aU3dnVW1WeGRXVnpkRWhsWVdSbGNuTXNJRkpsY1hWbGMzUk5aWE56WVdkbExDQlNaWE53YjI1elpTd2dVbVZ6Y0c5dWMyVklaV0ZrWlhKekxDQlNaWE53YjI1elpVMWxjM05oWjJVc0lGSmxjM0J2Ym5ObFZISmhhV3hsY25Nc0lGTjBjbVZoYlN3Z1UzUnlhVzVuY3lCOUlHWnliMjBnWENJdUwyZGxiaTl3Y205MGJ5OXljR012ZDJWaWNuUmpMM1l4TDJkeWNHTmZjR0pjSWp0Y2JtbHRjRzl5ZENCN0lFSmhjMlZUZEhKbFlXMGdmU0JtY205dElGd2lMaTlDWVhObFUzUnlaV0Z0WENJN1hHNXBiWEJ2Y25RZ2V5QkRiR2xsYm5SRGFHRnVibVZzSUgwZ1puSnZiU0JjSWk0dlEyeHBaVzUwUTJoaGJtNWxiRndpTzF4dVhHNHZMeUJ6WldVZ1oyOXNZVzVuTDJOc2FXVnVkRjl6ZEhKbFlXMHVaMjljYm1OdmJuTjBJRzFoZUZKbGNYVmxjM1JOWlhOellXZGxVR0ZqYTJWMFJHRjBZVk5wZW1VZ1BTQXhOak0zTXp0Y2JseHVaWGh3YjNKMElHTnNZWE56SUVOc2FXVnVkRk4wY21WaGJTQmxlSFJsYm1SeklFSmhjMlZUZEhKbFlXMGdhVzF3YkdWdFpXNTBjeUJuY25CakxsUnlZVzV6Y0c5eWRDQjdYRzVjZEhCeWFYWmhkR1VnY21WaFpHOXViSGtnWTJoaGJtNWxiRG9nUTJ4cFpXNTBRMmhoYm01bGJEdGNibHgwY0hKcGRtRjBaU0JvWldGa1pYSnpVbVZqWldsMlpXUTZJR0p2YjJ4bFlXNGdQU0JtWVd4elpUdGNibHgwY0hKcGRtRjBaU0IwY21GcGJHVnljMUpsWTJWcGRtVmtPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVTdYRzVjYmx4MFkyOXVjM1J5ZFdOMGIzSW9ZMmhoYm01bGJEb2dRMnhwWlc1MFEyaGhibTVsYkN3Z2MzUnlaV0Z0T2lCVGRISmxZVzBzSUc5dVJHOXVaVG9nS0dsa09pQnVkVzFpWlhJcElEMCtJSFp2YVdRc0lHOXdkSE02SUdkeWNHTXVWSEpoYm5Od2IzSjBUM0IwYVc5dWN5a2dlMXh1WEhSY2RITjFjR1Z5S0hOMGNtVmhiU3dnYjI1RWIyNWxMQ0J2Y0hSektUdGNibHgwWEhSMGFHbHpMbU5vWVc1dVpXd2dQU0JqYUdGdWJtVnNPMXh1WEhSOVhHNWNibHgwY0hWaWJHbGpJSE4wWVhKMEtHMWxkR0ZrWVhSaE9pQm5jbkJqTGsxbGRHRmtZWFJoS1NCN1hHNWNkRngwWTI5dWMzUWdiV1YwYUc5a0lEMGdZQzhrZTNSb2FYTXViM0IwY3k1dFpYUm9iMlJFWldacGJtbDBhVzl1TG5ObGNuWnBZMlV1YzJWeWRtbGpaVTVoYldWOUx5UjdkR2hwY3k1dmNIUnpMbTFsZEdodlpFUmxabWx1YVhScGIyNHViV1YwYUc5a1RtRnRaWDFnTzF4dVhIUmNkR052Ym5OMElISmxjWFZsYzNSSVpXRmtaWEp6SUQwZ2JtVjNJRkpsY1hWbGMzUklaV0ZrWlhKektDazdYRzVjZEZ4MGNtVnhkV1Z6ZEVobFlXUmxjbk11YzJWMFRXVjBhRzlrS0cxbGRHaHZaQ2s3WEc1Y2RGeDBjbVZ4ZFdWemRFaGxZV1JsY25NdWMyVjBUV1YwWVdSaGRHRW9abkp2YlVkU1VFTk5aWFJoWkdGMFlTaHRaWFJoWkdGMFlTa3BPMXh1WEc1Y2RGeDBkSEo1SUh0Y2JseDBYSFJjZEhSb2FYTXVZMmhoYm01bGJDNTNjbWwwWlVobFlXUmxjbk1vZEdocGN5NXpkSEpsWVcwc0lISmxjWFZsYzNSSVpXRmtaWEp6S1R0Y2JseDBYSFI5SUdOaGRHTm9JQ2hsS1NCN1hHNWNkRngwWEhSamIyNXpiMnhsTG1WeWNtOXlLRndpWlhKeWIzSWdkM0pwZEdsdVp5Qm9aV0ZrWlhKelhDSXNJR1VwTzF4dVhIUmNkRngwZEdocGN5NWpiRzl6WlZkcGRHaFNaV04yUlhKeWIzSW9aU2s3WEc1Y2RGeDBmVnh1WEhSOVhHNWNibHgwY0hWaWJHbGpJSE5sYm1STlpYTnpZV2RsS0cxelowSjVkR1Z6UHpvZ1ZXbHVkRGhCY25KaGVTa2dlMXh1WEhSY2RDOHZJSE5yYVhBZ1puSmhiV1VnYUdWaFpHVnlJR0o1ZEdWelhHNWNkRngwYVdZZ0tHMXpaMEo1ZEdWektTQjdYRzVjZEZ4MFhIUjBhR2x6TG5keWFYUmxUV1Z6YzJGblpTaG1ZV3h6WlN3Z2JYTm5RbmwwWlhNdWMyeHBZMlVvTlNrcE8xeHVYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkSDFjYmx4MFhIUjBhR2x6TG5keWFYUmxUV1Z6YzJGblpTaG1ZV3h6WlN3Z2RXNWtaV1pwYm1Wa0tUdGNibHgwZlZ4dVhHNWNkSEIxWW14cFl5Qm1hVzVwYzJoVFpXNWtLQ2tnZTF4dVhIUmNkR2xtSUNnaGRHaHBjeTV2Y0hSekxtMWxkR2h2WkVSbFptbHVhWFJwYjI0dWNtVnhkV1Z6ZEZOMGNtVmhiU2tnZTF4dVhIUmNkRngwY21WMGRYSnVYRzVjZEZ4MGZWeHVYSFJjZEhSb2FYTXVkM0pwZEdWTlpYTnpZV2RsS0hSeWRXVXNJSFZ1WkdWbWFXNWxaQ2s3WEc1Y2RIMWNibHh1WEhSd2NtbDJZWFJsSUhkeWFYUmxUV1Z6YzJGblpTaGxiM002SUdKdmIyeGxZVzRzSUcxelowSjVkR1Z6UHpvZ1ZXbHVkRGhCY25KaGVTa2dlMXh1WEhSY2RIUnllU0I3WEc1Y2RGeDBYSFJwWmlBb0lXMXpaMEo1ZEdWeklIeDhJRzF6WjBKNWRHVnpMbXhsYm1kMGFDQTlQU0F3S1NCN1hHNWNkRngwWEhSY2RHTnZibk4wSUhCaFkydGxkQ0E5SUc1bGR5QlFZV05yWlhSTlpYTnpZV2RsS0NrN1hHNWNkRngwWEhSY2RIQmhZMnRsZEM1elpYUkZiMjBvZEhKMVpTazdYRzVjZEZ4MFhIUmNkR052Ym5OMElISmxjWFZsYzNSTlpYTnpZV2RsSUQwZ2JtVjNJRkpsY1hWbGMzUk5aWE56WVdkbEtDazdYRzVjZEZ4MFhIUmNkSEpsY1hWbGMzUk5aWE56WVdkbExuTmxkRWhoYzAxbGMzTmhaMlVvSVNGdGMyZENlWFJsY3lrN1hHNWNkRngwWEhSY2RISmxjWFZsYzNSTlpYTnpZV2RsTG5ObGRGQmhZMnRsZEUxbGMzTmhaMlVvY0dGamEyVjBLVHRjYmx4MFhIUmNkRngwY21WeGRXVnpkRTFsYzNOaFoyVXVjMlYwUlc5ektHVnZjeWs3WEc1Y2RGeDBYSFJjZEhSb2FYTXVZMmhoYm01bGJDNTNjbWwwWlUxbGMzTmhaMlVvZEdocGN5NXpkSEpsWVcwc0lISmxjWFZsYzNSTlpYTnpZV2RsS1R0Y2JseDBYSFJjZEZ4MGNtVjBkWEp1TzF4dVhIUmNkRngwZlZ4dVhHNWNkRngwWEhSM2FHbHNaU0FvYlhOblFubDBaWE11YkdWdVozUm9JQ0U5UFNBd0tTQjdYRzVjZEZ4MFhIUmNkR052Ym5OMElHRnRiM1Z1ZEZSdlUyVnVaQ0E5SUUxaGRHZ3ViV2x1S0cxelowSjVkR1Z6TG14bGJtZDBhQ3dnYldGNFVtVnhkV1Z6ZEUxbGMzTmhaMlZRWVdOclpYUkVZWFJoVTJsNlpTazdYRzVjZEZ4MFhIUmNkR052Ym5OMElIQmhZMnRsZENBOUlHNWxkeUJRWVdOclpYUk5aWE56WVdkbEtDazdYRzVjZEZ4MFhIUmNkSEJoWTJ0bGRDNXpaWFJFWVhSaEtHMXpaMEo1ZEdWekxuTnNhV05sS0RBc0lHRnRiM1Z1ZEZSdlUyVnVaQ2twTzF4dVhIUmNkRngwWEhSdGMyZENlWFJsY3lBOUlHMXpaMEo1ZEdWekxuTnNhV05sS0dGdGIzVnVkRlJ2VTJWdVpDazdYRzVjZEZ4MFhIUmNkR2xtSUNodGMyZENlWFJsY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmx4MFhIUmNkRngwWEhSd1lXTnJaWFF1YzJWMFJXOXRLSFJ5ZFdVcE8xeHVYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUmNkR052Ym5OMElISmxjWFZsYzNSTlpYTnpZV2RsSUQwZ2JtVjNJRkpsY1hWbGMzUk5aWE56WVdkbEtDazdYRzVjZEZ4MFhIUmNkSEpsY1hWbGMzUk5aWE56WVdkbExuTmxkRWhoYzAxbGMzTmhaMlVvSVNGdGMyZENlWFJsY3lrN1hHNWNkRngwWEhSY2RISmxjWFZsYzNSTlpYTnpZV2RsTG5ObGRGQmhZMnRsZEUxbGMzTmhaMlVvY0dGamEyVjBLVHRjYmx4MFhIUmNkRngwY21WeGRXVnpkRTFsYzNOaFoyVXVjMlYwUlc5ektHVnZjeWs3WEc1Y2RGeDBYSFJjZEhSb2FYTXVZMmhoYm01bGJDNTNjbWwwWlUxbGMzTmhaMlVvZEdocGN5NXpkSEpsWVcwc0lISmxjWFZsYzNSTlpYTnpZV2RsS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5SUdOaGRHTm9JQ2hsS1NCN1hHNWNkRngwWEhSamIyNXpiMnhsTG1WeWNtOXlLRndpWlhKeWIzSWdkM0pwZEdsdVp5QnRaWE56WVdkbFhDSXNJR1VwTzF4dVhIUmNkRngwZEdocGN5NWpiRzl6WlZkcGRHaFNaV04yUlhKeWIzSW9aU2s3WEc1Y2RGeDBmVnh1WEhSOVhHNWNibHgwY0hWaWJHbGpJRzl1VW1WemNHOXVjMlVvY21WemNEb2dVbVZ6Y0c5dWMyVXBJSHRjYmx4MFhIUnpkMmwwWTJnZ0tISmxjM0F1WjJWMFZIbHdaVU5oYzJVb0tTa2dlMXh1WEhSY2RGeDBZMkZ6WlNCU1pYTndiMjV6WlM1VWVYQmxRMkZ6WlM1SVJVRkVSVkpUT2x4dVhIUmNkRngwWEhScFppQW9kR2hwY3k1b1pXRmtaWEp6VW1WalpXbDJaV1FwSUh0Y2JseDBYSFJjZEZ4MFhIUjBhR2x6TG1Oc2IzTmxWMmwwYUZKbFkzWkZjbkp2Y2lodVpYY2dSWEp5YjNJb1hDSm9aV0ZrWlhKeklHRnNjbVZoWkhrZ2NtVmpaV2wyWldSY0lpa3BPMXh1WEhSY2RGeDBYSFJjZEhKbGRIVnlibHh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEdsbUlDaDBhR2x6TG5SeVlXbHNaWEp6VW1WalpXbDJaV1FwSUh0Y2JseDBYSFJjZEZ4MFhIUjBhR2x6TG1Oc2IzTmxWMmwwYUZKbFkzWkZjbkp2Y2lodVpYY2dSWEp5YjNJb1hDSm9aV0ZrWlhKeklISmxZMlZwZG1Wa0lHRm1kR1Z5SUhSeVlXbHNaWEp6WENJcEtUdGNibHgwWEhSY2RGeDBYSFJ5WlhSMWNtNWNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFIwYUdsekxuQnliMk5sYzNOSVpXRmtaWEp6S0hKbGMzQXVaMlYwU0dWaFpHVnljeWdwSVNrN1hHNWNkRngwWEhSY2RHSnlaV0ZyTzF4dVhIUmNkRngwWTJGelpTQlNaWE53YjI1elpTNVVlWEJsUTJGelpTNU5SVk5UUVVkRk9seHVYSFJjZEZ4MFhIUnBaaUFvSVhSb2FYTXVhR1ZoWkdWeWMxSmxZMlZwZG1Wa0tTQjdYRzVjZEZ4MFhIUmNkRngwZEdocGN5NWpiRzl6WlZkcGRHaFNaV04yUlhKeWIzSW9ibVYzSUVWeWNtOXlLRndpYUdWaFpHVnljeUJ1YjNRZ2VXVjBJSEpsWTJWcGRtVmtYQ0lwS1R0Y2JseDBYSFJjZEZ4MFhIUnlaWFIxY201Y2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUnBaaUFvZEdocGN5NTBjbUZwYkdWeWMxSmxZMlZwZG1Wa0tTQjdYRzVjZEZ4MFhIUmNkRngwZEdocGN5NWpiRzl6WlZkcGRHaFNaV04yUlhKeWIzSW9ibVYzSUVWeWNtOXlLRndpYUdWaFpHVnljeUJ5WldObGFYWmxaQ0JoWm5SbGNpQjBjbUZwYkdWeWMxd2lLU2s3WEc1Y2RGeDBYSFJjZEZ4MGNtVjBkWEp1WEc1Y2RGeDBYSFJjZEgxY2JseDBYSFJjZEZ4MGRHaHBjeTV3Y205alpYTnpUV1Z6YzJGblpTaHlaWE53TG1kbGRFMWxjM05oWjJVb0tTRXBPMXh1WEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RHTmhjMlVnVW1WemNHOXVjMlV1Vkhsd1pVTmhjMlV1VkZKQlNVeEZVbE02WEc1Y2RGeDBYSFJjZEhSb2FYTXVjSEp2WTJWemMxUnlZV2xzWlhKektISmxjM0F1WjJWMFZISmhhV3hsY25Nb0tTRXBPMXh1WEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSY2RHTnZibk52YkdVdVpYSnliM0lvWENKMWJtdHViM2R1SUhKbGMzQnZibk5sSUhSNWNHVmNJaXdnY21WemNDNW5aWFJVZVhCbFEyRnpaU2dwS1R0Y2JseDBYSFJjZEZ4MFluSmxZV3M3WEc1Y2RGeDBmVnh1WEhSOVhHNWNibHgwY0hKcGRtRjBaU0J3Y205alpYTnpTR1ZoWkdWeWN5aG9aV0ZrWlhKek9pQlNaWE53YjI1elpVaGxZV1JsY25NcElIdGNibHgwWEhSMGFHbHpMbWhsWVdSbGNuTlNaV05sYVhabFpDQTlJSFJ5ZFdVN1hHNWNkRngwZEdocGN5NXZjSFJ6TG05dVNHVmhaR1Z5Y3loMGIwZFNVRU5OWlhSaFpHRjBZU2hvWldGa1pYSnpMbWRsZEUxbGRHRmtZWFJoS0NrcExDQXlNREFwTzF4dVhIUjlYRzVjYmx4MGNISnBkbUYwWlNCd2NtOWpaWE56VFdWemMyRm5aU2h0YzJjNklGSmxjM0J2Ym5ObFRXVnpjMkZuWlNrZ2UxeHVYSFJjZEdOdmJuTjBJSEpsYzNWc2RDQTlJSE4xY0dWeUxuQnliMk5sYzNOUVlXTnJaWFJOWlhOellXZGxLRzF6Wnk1blpYUlFZV05yWlhSTlpYTnpZV2RsS0NraEtUdGNibHgwWEhScFppQW9JWEpsYzNWc2RDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdU8xeHVYSFJjZEgxY2JseDBYSFJqYjI1emRDQmphSFZ1YXlBOUlHNWxkeUJCY25KaGVVSjFabVpsY2loeVpYTjFiSFF1YkdWdVozUm9JQ3NnTlNrN1hHNWNkRngwYm1WM0lFUmhkR0ZXYVdWM0tHTm9kVzVyTENBeExDQTBLUzV6WlhSVmFXNTBNeklvTUN3Z2NtVnpkV3gwTG14bGJtZDBhQ3dnWm1Gc2MyVXBPMXh1WEhSY2RHNWxkeUJWYVc1ME9FRnljbUY1S0dOb2RXNXJMQ0ExS1M1elpYUW9jbVZ6ZFd4MEtUdGNibHgwWEhSMGFHbHpMbTl3ZEhNdWIyNURhSFZ1YXlodVpYY2dWV2x1ZERoQmNuSmhlU2hqYUhWdWF5a3BPMXh1WEhSOVhHNWNibHgwY0hKcGRtRjBaU0J3Y205alpYTnpWSEpoYVd4bGNuTW9kSEpoYVd4bGNuTTZJRkpsYzNCdmJuTmxWSEpoYVd4bGNuTXBJSHRjYmx4MFhIUjBhR2x6TG5SeVlXbHNaWEp6VW1WalpXbDJaV1FnUFNCMGNuVmxPMXh1WEhSY2RHTnZibk4wSUdobFlXUmxjbk1nUFNCMGIwZFNVRU5OWlhSaFpHRjBZU2gwY21GcGJHVnljeTVuWlhSTlpYUmhaR0YwWVNncEtUdGNibHgwWEhSc1pYUWdjM1JoZEhWelEyOWtaU3dnYzNSaGRIVnpUV1Z6YzJGblpUdGNibHgwWEhSamIyNXpkQ0J6ZEdGMGRYTWdQU0IwY21GcGJHVnljeTVuWlhSVGRHRjBkWE1vS1R0Y2JseDBYSFJwWmlBb2MzUmhkSFZ6S1NCN1hHNWNkRngwWEhSemRHRjBkWE5EYjJSbElEMGdjM1JoZEhWekxtZGxkRU52WkdVb0tUdGNibHgwWEhSY2RITjBZWFIxYzAxbGMzTmhaMlVnUFNCemRHRjBkWE11WjJWMFRXVnpjMkZuWlNncE8xeHVYSFJjZEZ4MGFHVmhaR1Z5Y3k1elpYUW9YQ0puY25CakxYTjBZWFIxYzF3aUxDQmdKSHR6ZEdGMGRYTXVaMlYwUTI5a1pTZ3BmV0FwTzF4dVhIUmNkRngwYVdZZ0tITjBZWFIxYzAxbGMzTmhaMlVnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1WEhSY2RGeDBYSFJvWldGa1pYSnpMbk5sZENoY0ltZHljR010YldWemMyRm5aVndpTENCemRHRjBkWE11WjJWMFRXVnpjMkZuWlNncEtUdGNibHgwWEhSY2RIMWNibHgwWEhSOUlHVnNjMlVnZTF4dVhIUmNkRngwYzNSaGRIVnpRMjlrWlNBOUlEQTdYRzVjZEZ4MFhIUm9aV0ZrWlhKekxuTmxkQ2hjSW1keWNHTXRjM1JoZEhWelhDSXNJRndpTUZ3aUtUdGNibHgwWEhSY2RITjBZWFIxYzAxbGMzTmhaMlVnUFNCY0lsd2lPMXh1WEhSY2RIMWNibHh1WEhSY2RHTnZibk4wSUdobFlXUmxja0o1ZEdWeklEMGdhR1ZoWkdWeWMxUnZRbmwwWlhNb2FHVmhaR1Z5Y3lrN1hHNWNkRngwWTI5dWMzUWdZMmgxYm1zZ1BTQnVaWGNnUVhKeVlYbENkV1ptWlhJb2FHVmhaR1Z5UW5sMFpYTXViR1Z1WjNSb0lDc2dOU2s3WEc1Y2RGeDBibVYzSUVSaGRHRldhV1YzS0dOb2RXNXJMQ0F3TENBeEtTNXpaWFJWYVc1ME9DZ3dMQ0F4SUR3OElEY3BPMXh1WEhSY2RHNWxkeUJFWVhSaFZtbGxkeWhqYUhWdWF5d2dNU3dnTkNrdWMyVjBWV2x1ZERNeUtEQXNJR2hsWVdSbGNrSjVkR1Z6TG14bGJtZDBhQ3dnWm1Gc2MyVXBPMXh1WEhSY2RHNWxkeUJWYVc1ME9FRnljbUY1S0dOb2RXNXJMQ0ExS1M1elpYUW9hR1ZoWkdWeVFubDBaWE1wTzF4dVhIUmNkSFJvYVhNdWIzQjBjeTV2YmtOb2RXNXJLRzVsZHlCVmFXNTBPRUZ5Y21GNUtHTm9kVzVyS1NrN1hHNWNkRngwYVdZZ0tITjBZWFIxYzBOdlpHVWdQVDA5SURBcElIdGNibHgwWEhSY2RIUm9hWE11WTJ4dmMyVlhhWFJvVW1WamRrVnljbTl5S0NrN1hHNWNkRngwWEhSeVpYUjFjbTQ3WEhSY2JseDBYSFI5WEc1Y2RGeDBkR2hwY3k1amJHOXpaVmRwZEdoU1pXTjJSWEp5YjNJb2JtVjNJRVZ5Y205eUtHQkRiMlJsUFNSN2MzUmhkSFZ6UTI5a1pYMGdUV1Z6YzJGblpUMGtlM04wWVhSMWMwMWxjM05oWjJWOVlDa3BPMXh1WEhSOVhHNTlYRzVjYmk4dklHWnliMjBnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJsdGNISnZZbUZpYkdVdFpXNW5MMmR5Y0dNdGQyVmlMMkpzYjJJdk5tWmlOamd6WmpBMk4ySmtOVFk0TmpKak0yRTFNVEJpWXpVMU9UQmlPVFUxWTJVME5tUXlZUzkwY3k5emNtTXZRMmgxYm10UVlYSnpaWEl1ZEhNalRESXlYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaVzVqYjJSbFFWTkRTVWtvYVc1d2RYUTZJSE4wY21sdVp5azZJRlZwYm5RNFFYSnlZWGtnZTF4dVhIUmpiMjV6ZENCbGJtTnZaR1ZrSUQwZ2JtVjNJRlZwYm5RNFFYSnlZWGtvYVc1d2RYUXViR1Z1WjNSb0tUdGNibHgwWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnSVQwOUlHbHVjSFYwTG14bGJtZDBhRHNnS3l0cEtTQjdYRzVjZEZ4MFkyOXVjM1FnWTJoaGNrTnZaR1VnUFNCcGJuQjFkQzVqYUdGeVEyOWtaVUYwS0drcE8xeHVYSFJjZEdsbUlDZ2hhWE5XWVd4cFpFaGxZV1JsY2tGelkybHBLR05vWVhKRGIyUmxLU2tnZTF4dVhIUmNkRngwZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpVFdWMFlXUmhkR0VnWTI5dWRHRnBibk1nYVc1MllXeHBaQ0JCVTBOSlNWd2lLVHRjYmx4MFhIUjlYRzVjZEZ4MFpXNWpiMlJsWkZ0cFhTQTlJR05vWVhKRGIyUmxPMXh1WEhSOVhHNWNkSEpsZEhWeWJpQmxibU52WkdWa08xeHVmVnh1WEc1amIyNXpkQ0JwYzBGc2JHOTNaV1JEYjI1MGNtOXNRMmhoY25NZ1BTQW9ZMmhoY2pvZ2JuVnRZbVZ5S1NBOVBpQmphR0Z5SUQwOVBTQXdlRGtnZkh3Z1kyaGhjaUE5UFQwZ01IaGhJSHg4SUdOb1lYSWdQVDA5SURCNFpEdGNibHh1Wm5WdVkzUnBiMjRnYVhOV1lXeHBaRWhsWVdSbGNrRnpZMmxwS0haaGJEb2diblZ0WW1WeUtUb2dZbTl2YkdWaGJpQjdYRzVjZEhKbGRIVnliaUJwYzBGc2JHOTNaV1JEYjI1MGNtOXNRMmhoY25Nb2RtRnNLU0I4ZkNBb2RtRnNJRDQ5SURCNE1qQWdKaVlnZG1Gc0lEdzlJREI0TjJVcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCb1pXRmtaWEp6Vkc5Q2VYUmxjeWhvWldGa1pYSnpPaUJuY25CakxrMWxkR0ZrWVhSaEtUb2dWV2x1ZERoQmNuSmhlU0I3WEc1Y2RHeGxkQ0JoYzFOMGNtbHVaeUE5SUZ3aVhDSTdYRzVjZEdobFlXUmxjbk11Wm05eVJXRmphQ2dvYTJWNUxDQjJZV3gxWlhNcElEMCtJSHRjYmx4MFhIUmhjMU4wY21sdVp5QXJQU0JnSkh0clpYbDlPaUFrZTNaaGJIVmxjeTVxYjJsdUtGd2lMQ0JjSWlsOVhGeHlYRnh1WUR0Y2JseDBmU2s3WEc1Y2RISmxkSFZ5YmlCbGJtTnZaR1ZCVTBOSlNTaGhjMU4wY21sdVp5azdYRzU5WEc1Y2JpOHZJR1p5YjIwZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwycHpiVzkxY21WMEwyZHljR010YjNabGNpMTNaV0p5ZEdNdllteHZZaTgwTldOa05tUTJZMlkxTVRabE56aGlNV1V5TmpKbFlUZGhZVGMwTVdKak4yRTNZVGt6WkdKakwyTnNhV1Z1ZEMxcGJYQnliMkpoWW14bEwzTnlZeTluY25SakwzZGxZbkowWTJOc2FXVnVkQzUwY3lOTU4xeHVZMjl1YzNRZ1puSnZiVWRTVUVOTlpYUmhaR0YwWVNBOUlDaHRaWFJoWkdGMFlUODZJR2R5Y0dNdVRXVjBZV1JoZEdFcE9pQk5aWFJoWkdGMFlTQjhJSFZ1WkdWbWFXNWxaQ0E5UGlCN1hHNWNkR2xtSUNnaGJXVjBZV1JoZEdFcElIdGNibHgwWEhSeVpYUjFjbTRnZFc1a1pXWnBibVZrWEc1Y2RIMWNibHgwWTI5dWMzUWdjbVZ6ZFd4MElEMGdibVYzSUUxbGRHRmtZWFJoS0NsY2JseDBZMjl1YzNRZ2JXUWdQU0J5WlhOMWJIUXVaMlYwVFdSTllYQW9LVnh1WEhSdFpYUmhaR0YwWVM1bWIzSkZZV05vS0NoclpYa3NJSFpoYkhWbGN5a2dQVDRnZTF4dVhIUmNkR052Ym5OMElITjBjbWx1WjNNZ1BTQnVaWGNnVTNSeWFXNW5jeWdwWEc1Y2RGeDBjM1J5YVc1bmN5NXpaWFJXWVd4MVpYTk1hWE4wS0haaGJIVmxjeWxjYmx4MFhIUnRaQzV6WlhRb2EyVjVMQ0J6ZEhKcGJtZHpLVnh1WEhSOUtWeHVYSFJwWmlBb2NtVnpkV3gwTG1kbGRFMWtUV0Z3S0NrdVoyVjBUR1Z1WjNSb0tDa2dQVDA5SURBcElIdGNibHgwWEhSeVpYUjFjbTRnZFc1a1pXWnBibVZrWEc1Y2RIMWNibHgwY21WMGRYSnVJSEpsYzNWc2RGeHVmVnh1WEc1amIyNXpkQ0IwYjBkU1VFTk5aWFJoWkdGMFlTQTlJQ2h0WlhSaFpHRjBZVDg2SUUxbGRHRmtZWFJoS1RvZ1ozSndZeTVOWlhSaFpHRjBZU0E5UGlCN1hHNWNkR052Ym5OMElISmxjM1ZzZENBOUlHNWxkeUJuY25CakxrMWxkR0ZrWVhSaEtDbGNibHgwYVdZZ0tHMWxkR0ZrWVhSaEtTQjdYRzVjZEZ4MGJXVjBZV1JoZEdFdVoyVjBUV1JOWVhBb0tTNW1iM0pGWVdOb0tDaGxiblJ5ZVRvZ1lXNTVMQ0JyWlhrNklHRnVlU2tnUFQ1Y2JseDBYSFJjZEhKbGMzVnNkQzVoY0hCbGJtUW9hMlY1TENCbGJuUnllUzVuWlhSV1lXeDFaWE5NYVhOMEtDa3BYRzVjZEZ4MEtWeHVYSFI5WEc1Y2RISmxkSFZ5YmlCeVpYTjFiSFJjYm4xY2JseHVJaXdpYVcxd2IzSjBJSHNnWjNKd1l5QjlJR1p5YjIwZ1hDSkFhVzF3Y205aVlXSnNaUzFsYm1jdlozSndZeTEzWldKY0lqdGNibWx0Y0c5eWRDQjdJRkJoWTJ0bGRFMWxjM05oWjJVc0lGTjBjbVZoYlNCOUlHWnliMjBnWENJdUwyZGxiaTl3Y205MGJ5OXljR012ZDJWaWNuUmpMM1l4TDJkeWNHTmZjR0pjSWp0Y2JseHVMeThnVFdGNFRXVnpjMkZuWlZOcGVtVWdhWE1nZEdobElHMWhlR2x0ZFcwZ2MybDZaU0JoSUdkU1VFTWdiV1Z6YzJGblpTQmpZVzRnWW1VdVhHNXNaWFFnVFdGNFRXVnpjMkZuWlZOcGVtVWdQU0F4SUR3OElESTFPMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdRbUZ6WlZOMGNtVmhiU0I3WEc1Y2RIQnliM1JsWTNSbFpDQnlaV0ZrYjI1c2VTQnpkSEpsWVcwNklGTjBjbVZoYlR0Y2JseDBjSEpwZG1GMFpTQnlaV0ZrYjI1c2VTQnZia1J2Ym1VNklDaHBaRG9nYm5WdFltVnlLU0E5UGlCMmIybGtPMXh1WEhSd2NtOTBaV04wWldRZ2NtVmhaRzl1YkhrZ2IzQjBjem9nWjNKd1l5NVVjbUZ1YzNCdmNuUlBjSFJwYjI1ek8xeHVYSFJ3Y21sMllYUmxJR05zYjNObFpEb2dZbTl2YkdWaGJpQTlJR1poYkhObE8xeHVYSFJ3Y21sMllYUmxJSEpsWVdSdmJteDVJSEJoWTJ0bGRFSjFaam9nUVhKeVlYazhWV2x1ZERoQmNuSmhlVDRnUFNCYlhUdGNibHgwY0hKcGRtRjBaU0J3WVdOclpYUkNkV1pUYVhwbElEMGdNRHRjYmx4MGNISnBkbUYwWlNCbGNuSS9PaUJGY25KdmNqdGNibHh1WEhSamIyNXpkSEoxWTNSdmNpaHpkSEpsWVcwNklGTjBjbVZoYlN3Z2IyNUViMjVsT2lBb2FXUTZJRzUxYldKbGNpa2dQVDRnZG05cFpDd2diM0IwY3pvZ1ozSndZeTVVY21GdWMzQnZjblJQY0hScGIyNXpLU0I3WEc1Y2RGeDBkR2hwY3k1emRISmxZVzBnUFNCemRISmxZVzA3WEc1Y2RGeDBkR2hwY3k1dmJrUnZibVVnUFNCdmJrUnZibVU3WEc1Y2RGeDBkR2hwY3k1dmNIUnpJRDBnYjNCMGN6dGNibHgwZlZ4dVhHNWNkSEIxWW14cFl5QmpZVzVqWld3b0tTQjdYRzVjZEZ4MGFXWWdLSFJvYVhNdWIzQjBjeTVrWldKMVp5a2dlMXh1WEhSY2RGeDBZMjl1YzI5c1pTNWtaV0oxWnloY0ltTmhibU5sYkZ3aUtWeHVYSFJjZEgxY2JseDBmVnh1WEc1Y2RIQnliM1JsWTNSbFpDQmpiRzl6WlZkcGRHaFNaV04yUlhKeWIzSW9aWEp5UHpvZ1JYSnliM0lwSUh0Y2JseDBYSFJwWmlBb2RHaHBjeTVqYkc5elpXUXBJSHRjYmx4MFhIUmNkSEpsZEhWeWJqdGNibHgwWEhSOVhHNWNkRngwZEdocGN5NWpiRzl6WldRZ1BTQjBjblZsTzF4dVhIUmNkSFJvYVhNdVpYSnlJRDBnWlhKeU8xeHVYSFJjZEhSb2FYTXVZMkZ1WTJWc0tDazdYRzVjZEZ4MGRHaHBjeTV2YmtSdmJtVW9kR2hwY3k1emRISmxZVzB1WjJWMFNXUW9LU2s3WEc1Y2RGeDBMeThnY0hKbGRIUjVJSE4xY21VZ2NHRnpjMmx1WnlCMGFHVWdaWEp5YjNJZ1pHOWxjeUJ1YjNSb2FXNW5MbHh1WEhSY2RIUm9hWE11YjNCMGN5NXZia1Z1WkNoMGFHbHpMbVZ5Y2lrN1hHNWNkSDFjYmx4dVhIUndjbTkwWldOMFpXUWdjSEp2WTJWemMxQmhZMnRsZEUxbGMzTmhaMlVvYlhObk9pQlFZV05yWlhSTlpYTnpZV2RsS1RvZ1ZXbHVkRGhCY25KaGVTQjhJSFZ1WkdWbWFXNWxaQ0I3WEc1Y2RGeDBZMjl1YzNRZ1pHRjBZU0E5SUcxelp5NW5aWFJFWVhSaFgyRnpWVGdvS1R0Y2JseDBYSFJwWmlBb1pHRjBZUzVzWlc1bmRHZ2dLeUIwYUdsekxuQmhZMnRsZEVKMVpsTnBlbVVnUGlCTllYaE5aWE56WVdkbFUybDZaU2tnZTF4dVhIUmNkRngwZEdocGN5NXdZV05yWlhSQ2RXWXViR1Z1WjNSb0lEMGdNRHRjYmx4MFhIUmNkSFJvYVhNdWNHRmphMlYwUW5WbVUybDZaU0E5SURBN1hHNWNkRngwWEhSamIyNXpiMnhsTG1WeWNtOXlLR0J0WlhOellXZGxJSE5wZW1VZ2JHRnlaMlZ5SUhSb1lXNGdiV0Y0SUNSN1RXRjRUV1Z6YzJGblpWTnBlbVY5T3lCa2FYTmpZWEprYVc1bllDbGNibHgwWEhSY2RISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNWNkRngwZlZ4dVhIUmNkSFJvYVhNdWNHRmphMlYwUW5WbUxuQjFjMmdvWkdGMFlTazdYRzVjZEZ4MGRHaHBjeTV3WVdOclpYUkNkV1pUYVhwbElDczlJR1JoZEdFdWJHVnVaM1JvTzF4dVhIUmNkR2xtSUNodGMyY3VaMlYwUlc5dEtDa3BJSHRjYmx4MFhIUmNkR052Ym5OMElHUmhkR0VnUFNCdVpYY2dWV2x1ZERoQmNuSmhlU2gwYUdsekxuQmhZMnRsZEVKMVpsTnBlbVVwTzF4dVhIUmNkRngwYkdWMElIQnZjMmwwYVc5dUlEMGdNRHRjYmx4MFhIUmNkR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NXdZV05yWlhSQ2RXWXViR1Z1WjNSb095QnBLeXNwSUh0Y2JseDBYSFJjZEZ4MFkyOXVjM1FnY0dGeWRHbGhiRVJoZEdFZ1BTQjBhR2x6TG5CaFkydGxkRUoxWmx0cFhUdGNibHgwWEhSY2RGeDBaR0YwWVM1elpYUW9jR0Z5ZEdsaGJFUmhkR0VzSUhCdmMybDBhVzl1S1R0Y2JseDBYSFJjZEZ4MGNHOXphWFJwYjI0Z0t6MGdjR0Z5ZEdsaGJFUmhkR0V1YkdWdVozUm9PMXh1WEhSY2RGeDBmVnh1WEhSY2RGeDBkR2hwY3k1d1lXTnJaWFJDZFdZdWJHVnVaM1JvSUQwZ01EdGNibHgwWEhSY2RIUm9hWE11Y0dGamEyVjBRblZtVTJsNlpTQTlJREE3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdaR0YwWVR0Y2JseDBYSFI5WEc1Y2RGeDBjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNibHgwZlZ4dWZTSXNJaTh2SUhOdmRYSmpaVG9nWjI5dloyeGxMM0p3WXk5amIyUmxMbkJ5YjNSdlhHNHZLaXBjYmlBcUlFQm1hV3hsYjNabGNuWnBaWGRjYmlBcUlFQmxibWhoYm1ObFlXSnNaVnh1SUNvZ1FITjFjSEJ5WlhOeklIdHRhWE56YVc1blVtVnhkV2x5WlgwZ2NtVndiM0owY3lCbGNuSnZjaUJ2YmlCcGJYQnNhV05wZENCMGVYQmxJSFZ6WVdkbGN5NWNiaUFxSUVCemRYQndjbVZ6Y3lCN2JXVnpjMkZuWlVOdmJuWmxiblJwYjI1emZTQktVeUJEYjIxd2FXeGxjaUJ5WlhCdmNuUnpJR0Z1SUdWeWNtOXlJR2xtSUdFZ2RtRnlhV0ZpYkdVZ2IzSmNiaUFxSUNBZ0lDQm1hV1ZzWkNCemRHRnlkSE1nZDJsMGFDQW5UVk5IWHljZ1lXNWtJR2x6YmlkMElHRWdkSEpoYm5Oc1lYUmhZbXhsSUcxbGMzTmhaMlV1WEc0Z0tpQkFjSFZpYkdsalhHNGdLaTljYmk4dklFZEZUa1ZTUVZSRlJDQkRUMFJGSUMwdElFUlBJRTVQVkNCRlJFbFVJVnh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnS2k5Y2JpOHZJRUIwY3kxdWIyTm9aV05yWEc1Y2JuWmhjaUJxYzNCaUlEMGdjbVZ4ZFdseVpTZ25aMjl2WjJ4bExYQnliM1J2WW5WbUp5azdYRzUyWVhJZ1oyOXZaeUE5SUdwemNHSTdYRzUyWVhJZ1oyeHZZbUZzSUQwZ0tHWjFibU4wYVc5dUtDa2dlMXh1SUNCcFppQW9kR2hwY3lrZ2V5QnlaWFIxY200Z2RHaHBjenNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JSGRwYm1SdmR5QWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc2djbVYwZFhKdUlIZHBibVJ2ZHpzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUdkc2IySmhiQ0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHNnY21WMGRYSnVJR2RzYjJKaGJEc2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlITmxiR1lnSVQwOUlDZDFibVJsWm1sdVpXUW5LU0I3SUhKbGRIVnliaUJ6Wld4bU95QjlYRzRnSUhKbGRIVnliaUJHZFc1amRHbHZiaWduY21WMGRYSnVJSFJvYVhNbktTZ3BPMXh1ZlM1allXeHNLRzUxYkd3cEtUdGNibHh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXljR011UTI5a1pTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNHZLaXBjYmlBcUlFQmxiblZ0SUh0dWRXMWlaWEo5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1eWNHTXVRMjlrWlNBOUlIdGNiaUFnVDBzNklEQXNYRzRnSUVOQlRrTkZURXhGUkRvZ01TeGNiaUFnVlU1TFRrOVhUam9nTWl4Y2JpQWdTVTVXUVV4SlJGOUJVa2RWVFVWT1ZEb2dNeXhjYmlBZ1JFVkJSRXhKVGtWZlJWaERSVVZFUlVRNklEUXNYRzRnSUU1UFZGOUdUMVZPUkRvZ05TeGNiaUFnUVV4U1JVRkVXVjlGV0VsVFZGTTZJRFlzWEc0Z0lGQkZVazFKVTFOSlQwNWZSRVZPU1VWRU9pQTNMRnh1SUNCVlRrRlZWRWhGVGxSSlEwRlVSVVE2SURFMkxGeHVJQ0JTUlZOUFZWSkRSVjlGV0VoQlZWTlVSVVE2SURnc1hHNGdJRVpCU1V4RlJGOVFVa1ZEVDA1RVNWUkpUMDQ2SURrc1hHNGdJRUZDVDFKVVJVUTZJREV3TEZ4dUlDQlBWVlJmVDBaZlVrRk9SMFU2SURFeExGeHVJQ0JWVGtsTlVFeEZUVVZPVkVWRU9pQXhNaXhjYmlBZ1NVNVVSVkpPUVV3NklERXpMRnh1SUNCVlRrRldRVWxNUVVKTVJUb2dNVFFzWEc0Z0lFUkJWRUZmVEU5VFV6b2dNVFZjYm4wN1hHNWNibWR2YjJjdWIySnFaV04wTG1WNGRHVnVaQ2hsZUhCdmNuUnpMQ0J3Y205MGJ5NW5iMjluYkdVdWNuQmpLVHRjYmlJc0lpOHZJSE52ZFhKalpUb2daMjl2WjJ4bEwyRndhUzlvZEhSd0xuQnliM1J2WEc0dktpcGNiaUFxSUVCbWFXeGxiM1psY25acFpYZGNiaUFxSUVCbGJtaGhibU5sWVdKc1pWeHVJQ29nUUhOMWNIQnlaWE56SUh0dGFYTnphVzVuVW1WeGRXbHlaWDBnY21Wd2IzSjBjeUJsY25KdmNpQnZiaUJwYlhCc2FXTnBkQ0IwZVhCbElIVnpZV2RsY3k1Y2JpQXFJRUJ6ZFhCd2NtVnpjeUI3YldWemMyRm5aVU52Ym5abGJuUnBiMjV6ZlNCS1V5QkRiMjF3YVd4bGNpQnlaWEJ2Y25SeklHRnVJR1Z5Y205eUlHbG1JR0VnZG1GeWFXRmliR1VnYjNKY2JpQXFJQ0FnSUNCbWFXVnNaQ0J6ZEdGeWRITWdkMmwwYUNBblRWTkhYeWNnWVc1a0lHbHpiaWQwSUdFZ2RISmhibk5zWVhSaFlteGxJRzFsYzNOaFoyVXVYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNiaTh2SUVkRlRrVlNRVlJGUkNCRFQwUkZJQzB0SUVSUElFNVBWQ0JGUkVsVUlWeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdLaTljYmk4dklFQjBjeTF1YjJOb1pXTnJYRzVjYm5aaGNpQnFjM0JpSUQwZ2NtVnhkV2x5WlNnbloyOXZaMnhsTFhCeWIzUnZZblZtSnlrN1hHNTJZWElnWjI5dlp5QTlJR3B6Y0dJN1hHNTJZWElnWjJ4dlltRnNJRDBnS0daMWJtTjBhVzl1S0NrZ2UxeHVJQ0JwWmlBb2RHaHBjeWtnZXlCeVpYUjFjbTRnZEdocGN6c2dmVnh1SUNCcFppQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUhzZ2NtVjBkWEp1SUhkcGJtUnZkenNnZlZ4dUlDQnBaaUFvZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIc2djbVYwZFhKdUlHZHNiMkpoYkRzZ2ZWeHVJQ0JwWmlBb2RIbHdaVzltSUhObGJHWWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdJSEpsZEhWeWJpQnpaV3htT3lCOVhHNGdJSEpsZEhWeWJpQkdkVzVqZEdsdmJpZ25jbVYwZFhKdUlIUm9hWE1uS1NncE8xeHVmUzVqWVd4c0tHNTFiR3dwS1R0Y2JseHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0Njc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlNjc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1UVlYUjBaWEp1UTJGelpTY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJQzB4TENCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQXVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQ3dnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQzVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEFuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVWdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJSEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjbVZ3WldGMFpXUkdhV1ZzWkhOZkxDQndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExtOXVaVzltUjNKdmRYQnpYeWs3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsSnp0Y2JuMWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200c0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVMbVJwYzNCc1lYbE9ZVzFsSUQwZ0ozQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200bk8xeHVmVnh1WEc0dktpcGNiaUFxSUV4cGMzUWdiMllnY21Wd1pXRjBaV1FnWm1sbGJHUnpJSGRwZEdocGJpQjBhR2x6SUcxbGMzTmhaMlVnZEhsd1pTNWNiaUFxSUVCd2NtbDJZWFJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjFjYmlBcUlFQmpiMjV6ZEZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6RmRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJSEoxYkdWelRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBVblZzWlhOTWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNTBiMDlpYW1WamRDd2dhVzVqYkhWa1pVbHVjM1JoYm1ObEtTeGNiaUFnSUNCbWRXeHNlVVJsWTI5a1pWSmxjMlZ5ZG1Wa1JYaHdZVzV6YVc5dU9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXlMQ0JtWVd4elpTbGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd08xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNIMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRkoxYkdWektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJHZFd4c2VVUmxZMjlrWlZKbGMyVnlkbVZrUlhod1lXNXphVzl1S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WldGa1pYSXVjMnRwY0VacFpXeGtLQ2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxelp6dGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNtVjBkWEp1SUhzaFZXbHVkRGhCY25KaGVYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEI5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd0xuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJTZFd4bGMweHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBSblZzYkhsRVpXTnZaR1ZTWlhObGNuWmxaRVY0Y0dGdWMybHZiaWdwTzF4dUlDQnBaaUFvWmlrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQklkSFJ3VW5Wc1pTQnlkV3hsY3lBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1UrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWNISnZkRzkwZVhCbExtZGxkRkoxYkdWelRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pUNTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTd2dNU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0M1d2NtOTBiM1I1Y0dVdWMyVjBVblZzWlhOTWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaVDE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhBdWNISnZkRzkwZVhCbExtRmtaRkoxYkdWeklEMGdablZ1WTNScGIyNG9iM0IwWDNaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lERXNJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEF1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlVblZzWlhOTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGSjFiR1Z6VEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQm1kV3hzZVY5a1pXTnZaR1ZmY21WelpYSjJaV1JmWlhod1lXNXphVzl1SUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0M1d2NtOTBiM1I1Y0dVdVoyVjBSblZzYkhsRVpXTnZaR1ZTWlhObGNuWmxaRVY0Y0dGdWMybHZiaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lESXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0gwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjQzV3Y205MGIzUjVjR1V1YzJWMFJuVnNiSGxFWldOdlpHVlNaWE5sY25abFpFVjRjR0Z1YzJsdmJpQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVSEp2ZEc4elFtOXZiR1ZoYmtacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuSmxjR1ZoZEdWa1JtbGxiR1J6WHlBOUlGc3hNVjA3WEc1Y2JpOHFLbHh1SUNvZ1QyNWxiMllnWjNKdmRYQWdaR1ZtYVc1cGRHbHZibk1nWm05eUlIUm9hWE1nYldWemMyRm5aUzRnUldGamFDQm5jbTkxY0NCa1pXWnBibVZ6SUhSb1pTQm1hV1ZzWkZ4dUlDb2diblZ0WW1WeWN5QmlaV3h2Ym1kcGJtY2dkRzhnZEdoaGRDQm5jbTkxY0M0Z1YyaGxiaUJ2WmlCMGFHVnpaU0JtYVdWc1pITW5JSFpoYkhWbElHbHpJSE5sZEN3Z1lXeHNYRzRnS2lCdmRHaGxjaUJtYVdWc1pITWdhVzRnZEdobElHZHliM1Z3SUdGeVpTQmpiR1ZoY21Wa0xpQkVkWEpwYm1jZ1pHVnpaWEpwWVd4cGVtRjBhVzl1TENCcFppQnRkV3gwYVhCc1pWeHVJQ29nWm1sbGJHUnpJR0Z5WlNCbGJtTnZkVzUwWlhKbFpDQm1iM0lnWVNCbmNtOTFjQ3dnYjI1c2VTQjBhR1VnYkdGemRDQjJZV3gxWlNCelpXVnVJSGRwYkd3Z1ltVWdhMlZ3ZEM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhJVUZ5Y21GNVBHNTFiV0psY2o0K2ZWeHVJQ29nUUdOdmJuTjBYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWIyNWxiMlpIY205MWNITmZJRDBnVzFzeUxETXNOQ3cxTERZc09GMWRPMXh1WEc0dktpcGNiaUFxSUVCbGJuVnRJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdVVHRjBkR1Z5YmtOaGMyVWdQU0I3WEc0Z0lGQkJWRlJGVWs1ZlRrOVVYMU5GVkRvZ01DeGNiaUFnUjBWVU9pQXlMRnh1SUNCUVZWUTZJRE1zWEc0Z0lGQlBVMVE2SURRc1hHNGdJRVJGVEVWVVJUb2dOU3hjYmlBZ1VFRlVRMGc2SURZc1hHNGdJRU5WVTFSUFRUb2dPRnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFjbVYwZFhKdUlIdHdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExsQmhkSFJsY201RFlYTmxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNW5aWFJRWVhSMFpYSnVRMkZ6WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTGxCaGRIUmxjbTVEWVhObGZTQXFMeWhxYzNCaUxrMWxjM05oWjJVdVkyOXRjSFYwWlU5dVpXOW1RMkZ6WlNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbTl1Wlc5bVIzSnZkWEJ6WDFzd1hTa3BPMXh1ZlR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pYMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYzJWc1pXTjBiM0k2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLRzF6Wnl3Z01Td2dYQ0pjSWlrc1hHNGdJQ0FnWjJWME9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRElzSUZ3aVhDSXBMRnh1SUNBZ0lIQjFkRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBekxDQmNJbHdpS1N4Y2JpQWdJQ0J3YjNOME9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRFFzSUZ3aVhDSXBMRnh1SUNBZ0lIQmlYMlJsYkdWMFpUb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0ExTENCY0lsd2lLU3hjYmlBZ0lDQndZWFJqYURvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQTJMQ0JjSWx3aUtTeGNiaUFnSUNCamRYTjBiMjA2SUNobUlEMGdiWE5uTG1kbGRFTjFjM1J2YlNncEtTQW1KaUJ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWtzWEc0Z0lDQWdZbTlrZVRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQTNMQ0JjSWx3aUtTeGNiaUFnSUNCeVpYTndiMjV6WlVKdlpIazZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTVRJc0lGd2lYQ0lwTEZ4dUlDQWdJR0ZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jMHhwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEVGa1pHbDBhVzl1WVd4Q2FXNWthVzVuYzB4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuUnZUMkpxWldOMExDQnBibU5zZFdSbFNXNXpkR0Z1WTJVcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pUdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pYMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGTmxiR1ZqZEc5eUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUjJWMEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUhWMEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTkRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUc5emRDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURVNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVSbGJHVjBaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEWTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGQmhkR05vS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPRHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdU8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJEZFhOMGIyMG9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBM09seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSQ2IyUjVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01USTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGSmxjM0J2Ym5ObFFtOWtlU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElERXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRUZrWkdsMGFXOXVZV3hDYVc1a2FXNW5jeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGTmxiR1ZqZEc5eUtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lESXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z015a3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBMEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQTBMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURVcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lEVXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTmlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ05peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVOMWMzUnZiU2dwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFRXVnpjMkZuWlNoY2JpQWdJQ0FnSURnc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1RGRYTjBiMjFJZEhSd1VHRjBkR1Z5Ymk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFFtOWtlU2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ055eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZKbGMzQnZibk5sUW05a2VTZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVRJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJCWkdScGRHbHZibUZzUW1sdVpHbHVaM05NYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0F4TVN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ6Wld4bFkzUnZjaUE5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtZGxkRk5sYkdWamRHOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVjMlYwVTJWc1pXTjBiM0lnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZCeWIzUnZNMU4wY21sdVowWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2daMlYwSUQwZ01qdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVaMlYwUjJWMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWMyVjBSMlYwSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZaa1pwWld4a0tIUm9hWE1zSURJc0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWIyNWxiMlpIY205MWNITmZXekJkTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrZGxkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFOXVaVzltUm1sbGJHUW9kR2hwY3l3Z01pd2djSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXZibVZ2WmtkeWIzVndjMTliTUYwc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVhR0Z6UjJWMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2NIVjBJRDBnTXp0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdVoyVjBVSFYwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRE1zSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1YzJWMFVIVjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0hSb2FYTXNJRE1zSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xCMWRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEU5dVpXOW1SbWxsYkdRb2RHaHBjeXdnTXl3Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1dmJtVnZaa2R5YjNWd2MxOWJNRjBzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdWFHRnpVSFYwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnY0c5emRDQTlJRFE3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1kbGRGQnZjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dOQ3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxMbkJ5YjNSdmRIbHdaUzV6WlhSUWIzTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJQYm1WdlprWnBaV3hrS0hSb2FYTXNJRFFzSUhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1YjI1bGIyWkhjbTkxY0hOZld6QmRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xCdmMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZaa1pwWld4a0tIUm9hWE1zSURRc0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWIyNWxiMlpIY205MWNITmZXekJkTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtaGhjMUJ2YzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBMEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCa1pXeGxkR1VnUFNBMU8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNW5aWFJFWld4bGRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z05Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNXpaWFJFWld4bGRHVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVJtbGxiR1FvZEdocGN5d2dOU3dnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtTnNaV0Z5UkdWc1pYUmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFQyNWxiMlpHYVdWc1pDaDBhR2x6TENBMUxDQndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExtOXVaVzltUjNKdmRYQnpYMXN3WFN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNW9ZWE5FWld4bGRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTFLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QndZWFJqYUNBOUlEWTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbWRsZEZCaGRHTm9JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lEWXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVjMlYwVUdGMFkyZ2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRTl1Wlc5bVJtbGxiR1FvZEdocGN5d2dOaXdnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV2Ym1WdlprZHliM1Z3YzE5Yk1GMHNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtTnNaV0Z5VUdGMFkyZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZaa1pwWld4a0tIUm9hWE1zSURZc0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWIyNWxiMlpIY205MWNITmZXekJkTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExtaGhjMUJoZEdOb0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkRkWE4wYjIxSWRIUndVR0YwZEdWeWJpQmpkWE4wYjIwZ1BTQTRPMXh1SUNvZ1FISmxkSFZ5YmlCN1AzQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY201OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG1kbGRFTjFjM1J2YlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXo5d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1ZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1TENBNEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJueDFibVJsWm1sdVpXUjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaWDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1YzJWMFEzVnpkRzl0SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSUGJtVnZabGR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E0TENCd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG05dVpXOW1SM0p2ZFhCelgxc3dYU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdWOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNWpiR1ZoY2tOMWMzUnZiU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUkRkWE4wYjIwb2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bExuQnliM1J2ZEhsd1pTNW9ZWE5EZFhOMGIyMGdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTRLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QmliMlI1SUQwZ056dGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNUlkSFJ3VW5Wc1pTNXdjbTkwYjNSNWNHVXVaMlYwUW05a2VTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBM0xDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVdWNISnZkRzkwZVhCbExuTmxkRUp2WkhrZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGQnliM1J2TTFOMGNtbHVaMFpwWld4a0tIUm9hWE1zSURjc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnY21WemNHOXVjMlZmWW05a2VTQTlJREV5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1blpYUlNaWE53YjI1elpVSnZaSGtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNVElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa2gwZEhCU2RXeGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaUzV3Y205MGIzUjVjR1V1YzJWMFVtVnpjRzl1YzJWQ2IyUjVJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJRY205MGJ6TlRkSEpwYm1kR2FXVnNaQ2gwYUdsekxDQXhNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRWgwZEhCU2RXeGxJR0ZrWkdsMGFXOXVZV3hmWW1sdVpHbHVaM01nUFNBeE1UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVJZEhSd1VuVnNaVDU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVXVjSEp2ZEc5MGVYQmxMbWRsZEVGa1pHbDBhVzl1WVd4Q2FXNWthVzVuYzB4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVK2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVNIUjBjRkoxYkdVc0lERXhLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VTSFIwY0ZKMWJHVStmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1Y5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1U0hSMGNGSjFiR1V1Y0hKdmRHOTBlWEJsTG5ObGRFRmtaR2wwYVc5dVlXeENhVzVrYVc1bmMweHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURFeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlQxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1WVhCcExraDBkSEJTZFd4bGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsTG5CeWIzUnZkSGx3WlM1aFpHUkJaR1JwZEdsdmJtRnNRbWx1WkdsdVozTWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNVEVzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlN3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtoMGRIQlNkV3hsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1SWRIUndVblZzWlM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpCWkdScGRHbHZibUZzUW1sdVpHbHVaM05NYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVGa1pHbDBhVzl1WVd4Q2FXNWthVzVuYzB4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVEZFhOMGIyMUlkSFJ3VUdGMGRHVnliaTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY201OUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200dWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJR3RwYm1RNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNU3dnWENKY0lpa3NYRzRnSUNBZ2NHRjBhRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeUxDQmNJbHdpS1Z4dUlDQjlPMXh1WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbUZ3YVM1RGRYTjBiMjFJZEhSd1VHRjBkR1Z5Ymk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200N1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY201OUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExtRndhUzVEZFhOMGIyMUlkSFJ3VUdGMGRHVnlibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG1Gd2FTNURkWE4wYjIxSWRIUndVR0YwZEdWeWJpNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSTGFXNWtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFVHRjBhQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY200dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNWhjR2t1UTNWemRHOXRTSFIwY0ZCaGRIUmxjbTR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFdHBibVFvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUVlYUm9LQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2dhMmx1WkNBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1aGNHa3VRM1Z6ZEc5dFNIUjBjRkJoZEhSbGNtNHVjSEp2ZEc5MGVYQmxMbWRsZEV0cGJtUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzVoY0drdVEzVnpkRzl0U0hSMGNGQmhkSFJsY201OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1WVhCcExrTjFjM1J2YlVoMGRIQlFZWFIwWlhKdUxuQnliM1J2ZEhsd1pTNXpaWFJMYVc1a0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlFjbTkwYnpOVGRISnBibWRHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhCaGRHZ2dQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVZWEJwTGtOMWMzUnZiVWgwZEhCUVlYUjBaWEp1TG5CeWIzUnZkSGx3WlM1blpYUlFZWFJvSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRElzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdVlYQnBMa04xYzNSdmJVaDBkSEJRWVhSMFpYSnVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExtRndhUzVEZFhOMGIyMUlkSFJ3VUdGMGRHVnliaTV3Y205MGIzUjVjR1V1YzJWMFVHRjBhQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVUhKdmRHOHpVM1J5YVc1blJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzVuYjI5bkxtOWlhbVZqZEM1bGVIUmxibVFvWlhod2IzSjBjeXdnY0hKdmRHOHVaMjl2WjJ4bExtRndhU2s3WEc0aUxDSXZMeUJ6YjNWeVkyVTZJR2R2YjJkc1pTOXdjbTkwYjJKMVppOWtaWE5qY21sd2RHOXlMbkJ5YjNSdlhHNHZLaXBjYmlBcUlFQm1hV3hsYjNabGNuWnBaWGRjYmlBcUlFQmxibWhoYm1ObFlXSnNaVnh1SUNvZ1FITjFjSEJ5WlhOeklIdHRhWE56YVc1blVtVnhkV2x5WlgwZ2NtVndiM0owY3lCbGNuSnZjaUJ2YmlCcGJYQnNhV05wZENCMGVYQmxJSFZ6WVdkbGN5NWNiaUFxSUVCemRYQndjbVZ6Y3lCN2JXVnpjMkZuWlVOdmJuWmxiblJwYjI1emZTQktVeUJEYjIxd2FXeGxjaUJ5WlhCdmNuUnpJR0Z1SUdWeWNtOXlJR2xtSUdFZ2RtRnlhV0ZpYkdVZ2IzSmNiaUFxSUNBZ0lDQm1hV1ZzWkNCemRHRnlkSE1nZDJsMGFDQW5UVk5IWHljZ1lXNWtJR2x6YmlkMElHRWdkSEpoYm5Oc1lYUmhZbXhsSUcxbGMzTmhaMlV1WEc0Z0tpQkFjSFZpYkdsalhHNGdLaTljYmk4dklFZEZUa1ZTUVZSRlJDQkRUMFJGSUMwdElFUlBJRTVQVkNCRlJFbFVJVnh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnS2k5Y2JpOHZJRUIwY3kxdWIyTm9aV05yWEc1Y2JuWmhjaUJxYzNCaUlEMGdjbVZ4ZFdseVpTZ25aMjl2WjJ4bExYQnliM1J2WW5WbUp5azdYRzUyWVhJZ1oyOXZaeUE5SUdwemNHSTdYRzUyWVhJZ1oyeHZZbUZzSUQwZ1JuVnVZM1JwYjI0b0ozSmxkSFZ5YmlCMGFHbHpKeWtvS1R0Y2JseHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzhuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlVuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aU2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NbkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTVNWVdKbGJDY3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsUjVjR1VuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk1uTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11UTFSNWNHVW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVTbE5VZVhCbEp5d2diblZzYkN3Z1oyeHZZbUZzS1R0Y2JtZHZiMmN1Wlhod2IzSjBVM2x0WW05c0tDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnljc0lHNTFiR3dzSUdkc2IySmhiQ2s3WEc1bmIyOW5MbVY0Y0c5eWRGTjViV0p2YkNnbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVUyVjBKeXdnYm5Wc2JDd2daMnh2WW1Gc0tUdGNibWR2YjJjdVpYaHdiM0owVTNsdFltOXNLQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NVBjSFJwYldsNlpVMXZaR1VuTENCdWRXeHNMQ0JuYkc5aVlXd3BPMXh1WjI5dlp5NWxlSEJ2Y25SVGVXMWliMndvSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTW5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMa2xrWlcxd2IzUmxibU41VEdWMlpXd25MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5Y3NJRzUxYkd3c0lHZHNiMkpoYkNrN1hHNW5iMjluTG1WNGNHOXlkRk41YldKdmJDZ25jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOG5MQ0J1ZFd4c0xDQm5iRzlpWVd3cE8xeHVaMjl2Wnk1bGVIQnZjblJUZVcxaWIyd29KM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeWNzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzVuYjI5bkxtVjRjRzl5ZEZONWJXSnZiQ2duY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0bkxDQnVkV3hzTENCbmJHOWlZV3dwTzF4dVoyOXZaeTVsZUhCdmNuUlRlVzFpYjJ3b0ozQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1Snl3Z2JuVnNiQ3dnWjJ4dlltRnNLVHRjYm1kdmIyY3VaWGh3YjNKMFUzbHRZbTlzS0Nkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkQ2NzSUc1MWJHd3NJR2RzYjJKaGJDazdYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFF1Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEN3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pUWlhRbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzhzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5YzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV5WlhCbFlYUmxaRVpwWld4a2MxOHNJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieXdnYW5Od1lpNU5aWE56WVdkbEtUdGNibWxtSUNobmIyOW5Ma1JGUWxWSElDWW1JQ0ZEVDAxUVNVeEZSQ2tnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQWIzWmxjbkpwWkdWY2JpQWdJQ292WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5YzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlNBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2JuVnNiQ3dnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlM1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVZ1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTYzdYRzU5WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsWkNCaWVTQktjMUJpUTI5a1pVZGxibVZ5WVhSdmNpNWNiaUFxSUVCd1lYSmhiU0I3UVhKeVlYazlmU0J2Y0hSZlpHRjBZU0JQY0hScGIyNWhiQ0JwYm1sMGFXRnNJR1JoZEdFZ1lYSnlZWGtzSUhSNWNHbGpZV3hzZVNCbWNtOXRJR0ZjYmlBcUlITmxjblpsY2lCeVpYTndiMjV6WlN3Z2IzSWdZMjl1YzNSeWRXTjBaV1FnWkdseVpXTjBiSGtnYVc0Z1NtRjJZWE5qY21sd2RDNGdWR2hsSUdGeWNtRjVJR2x6SUhWelpXUmNiaUFxSUdsdUlIQnNZV05sSUdGdVpDQmlaV052YldWeklIQmhjblFnYjJZZ2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQzRnU1hRZ2FYTWdibTkwSUdOc2IyNWxaQzVjYmlBcUlFbG1JRzV2SUdSaGRHRWdhWE1nY0hKdmRtbGtaV1FzSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUWdkMmxzYkNCaVpTQmxiWEIwZVN3Z1luVjBJSE4wYVd4c1hHNGdLaUIyWVd4cFpDNWNiaUFxSUVCbGVIUmxibVJ6SUh0cWMzQmlMazFsYzNOaFoyVjlYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0ExTURBc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdWNtVndaV0YwWldSR2FXVnNaSE5mTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk1zSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ekxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk1uTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6SUQwZ2UzMDdYRzVjYmx4dUx5b3FYRzRnS2lCVWFHVWdaWGgwWlc1emFXOXVjeUJ5WldkcGMzUmxjbVZrSUhkcGRHZ2dkR2hwY3lCdFpYTnpZV2RsSUdOc1lYTnpMaUJVYUdseklHbHpJR0VnYldGd0lHOW1YRzRnS2lCbGVIUmxibk5wYjI0Z1ptbGxiR1FnYm5WdFltVnlJSFJ2SUdacFpXeGtTVzVtYnlCdlltcGxZM1F1WEc0Z0tseHVJQ29nUm05eUlHVjRZVzF3YkdVNlhHNGdLaUFnSUNBZ2V5QXhNak02SUh0bWFXVnNaRWx1WkdWNE9pQXhNak1zSUdacFpXeGtUbUZ0WlRvZ2UyMTVYMlpwWld4a1gyNWhiV1U2SURCOUxDQmpkRzl5T2lCd2NtOTBieTVsZUdGdGNHeGxMazE1VFdWemMyRm5aWDBnZlZ4dUlDcGNiaUFxSUdacFpXeGtUbUZ0WlNCamIyNTBZV2x1Y3lCMGFHVWdTbk5EYjIxd2FXeGxjaUJ5Wlc1aGJXVmtJR1pwWld4a0lHNWhiV1VnY0hKdmNHVnlkSGtnYzI4Z2RHaGhkQ0JwZEZ4dUlDb2dkMjl5YTNNZ2FXNGdUMUJVU1UxSldrVkVJRzF2WkdVdVhHNGdLbHh1SUNvZ1FIUjVjR1VnZXlGUFltcGxZM1E4Ym5WdFltVnlMQ0JxYzNCaUxrVjRkR1Z1YzJsdmJrWnBaV3hrUW1sdVlYSjVTVzVtYno1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11WlhoMFpXNXphVzl1YzBKcGJtRnllU0E5SUh0OU8xeHVYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J1ZFd4c0xDQnVkV3hzS1R0Y2JuMDdYRzVuYjI5bkxtbHVhR1Z5YVhSektIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NWthWE53YkdGNVRtRnRaU0E5SUNkd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBdE1Td2diblZzYkN3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzhzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHbHpjR3hoZVU1aGJXVWdQU0FuY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnlBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzhuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4Z1BTQm1kVzVqZEdsdmJpaHZjSFJmWkdGMFlTa2dlMXh1SUNCcWMzQmlMazFsYzNOaFoyVXVhVzVwZEdsaGJHbDZaU2gwYUdsekxDQnZjSFJmWkdGMFlTd2dNQ3dnTFRFc0lHNTFiR3dzSUc1MWJHd3BPMXh1ZlR0Y2JtZHZiMmN1YVc1b1pYSnBkSE1vY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieWM3WEc1OVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOGdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkpsY0dWaGRHVmtSbWxsYkdSelh5d2diblZzYkNrN1hHNTlPMXh1WjI5dlp5NXBibWhsY21sMGN5aHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5d2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2TG1ScGMzQnNZWGxPWVcxbElEMGdKM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzhzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzhuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLRzl3ZEY5a1lYUmhLU0I3WEc0Z0lHcHpjR0l1VFdWemMyRm5aUzVwYm1sMGFXRnNhWHBsS0hSb2FYTXNJRzl3ZEY5a1lYUmhMQ0F3TENBMU1EQXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeWM3WEc1OVhHNWNiaThxS2x4dUlDb2dWR2hsSUdWNGRHVnVjMmx2Ym5NZ2NtVm5hWE4wWlhKbFpDQjNhWFJvSUhSb2FYTWdiV1Z6YzJGblpTQmpiR0Z6Y3k0Z1ZHaHBjeUJwY3lCaElHMWhjQ0J2Wmx4dUlDb2daWGgwWlc1emFXOXVJR1pwWld4a0lHNTFiV0psY2lCMGJ5Qm1hV1ZzWkVsdVptOGdiMkpxWldOMExseHVJQ3BjYmlBcUlFWnZjaUJsZUdGdGNHeGxPbHh1SUNvZ0lDQWdJSHNnTVRJek9pQjdabWxsYkdSSmJtUmxlRG9nTVRJekxDQm1hV1ZzWkU1aGJXVTZJSHR0ZVY5bWFXVnNaRjl1WVcxbE9pQXdmU3dnWTNSdmNqb2djSEp2ZEc4dVpYaGhiWEJzWlM1TmVVMWxjM05oWjJWOUlIMWNiaUFxWEc0Z0tpQm1hV1ZzWkU1aGJXVWdZMjl1ZEdGcGJuTWdkR2hsSUVwelEyOXRjR2xzWlhJZ2NtVnVZVzFsWkNCbWFXVnNaQ0J1WVcxbElIQnliM0JsY25SNUlITnZJSFJvWVhRZ2FYUmNiaUFxSUhkdmNtdHpJR2x1SUU5UVZFbE5TVnBGUkNCdGIyUmxMbHh1SUNwY2JpQXFJRUIwZVhCbElIc2hUMkpxWldOMFBHNTFiV0psY2l3Z2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFbHVabTgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjeUE5SUh0OU8xeHVYRzVjYmk4cUtseHVJQ29nVkdobElHVjRkR1Z1YzJsdmJuTWdjbVZuYVhOMFpYSmxaQ0IzYVhSb0lIUm9hWE1nYldWemMyRm5aU0JqYkdGemN5NGdWR2hwY3lCcGN5QmhJRzFoY0NCdlpseHVJQ29nWlhoMFpXNXphVzl1SUdacFpXeGtJRzUxYldKbGNpQjBieUJtYVdWc1pFbHVabThnYjJKcVpXTjBMbHh1SUNwY2JpQXFJRVp2Y2lCbGVHRnRjR3hsT2x4dUlDb2dJQ0FnSUhzZ01USXpPaUI3Wm1sbGJHUkpibVJsZURvZ01USXpMQ0JtYVdWc1pFNWhiV1U2SUh0dGVWOW1hV1ZzWkY5dVlXMWxPaUF3ZlN3Z1kzUnZjam9nY0hKdmRHOHVaWGhoYlhCc1pTNU5lVTFsYzNOaFoyVjlJSDFjYmlBcVhHNGdLaUJtYVdWc1pFNWhiV1VnWTI5dWRHRnBibk1nZEdobElFcHpRMjl0Y0dsc1pYSWdjbVZ1WVcxbFpDQm1hV1ZzWkNCdVlXMWxJSEJ5YjNCbGNuUjVJSE52SUhSb1lYUWdhWFJjYmlBcUlIZHZjbXR6SUdsdUlFOVFWRWxOU1ZwRlJDQnRiMlJsTGx4dUlDcGNiaUFxSUVCMGVYQmxJSHNoVDJKcVpXTjBQRzUxYldKbGNpd2dhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRUpwYm1GeWVVbHVabTgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTQTlJSHQ5TzF4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbFpDQmllU0JLYzFCaVEyOWtaVWRsYm1WeVlYUnZjaTVjYmlBcUlFQndZWEpoYlNCN1FYSnlZWGs5ZlNCdmNIUmZaR0YwWVNCUGNIUnBiMjVoYkNCcGJtbDBhV0ZzSUdSaGRHRWdZWEp5WVhrc0lIUjVjR2xqWVd4c2VTQm1jbTl0SUdGY2JpQXFJSE5sY25abGNpQnlaWE53YjI1elpTd2diM0lnWTI5dWMzUnlkV04wWldRZ1pHbHlaV04wYkhrZ2FXNGdTbUYyWVhOamNtbHdkQzRnVkdobElHRnljbUY1SUdseklIVnpaV1JjYmlBcUlHbHVJSEJzWVdObElHRnVaQ0JpWldOdmJXVnpJSEJoY25RZ2IyWWdkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZEM0Z1NYUWdhWE1nYm05MElHTnNiMjVsWkM1Y2JpQXFJRWxtSUc1dklHUmhkR0VnYVhNZ2NISnZkbWxrWldRc0lIUm9aU0JqYjI1emRISjFZM1JsWkNCdlltcGxZM1FnZDJsc2JDQmlaU0JsYlhCMGVTd2dZblYwSUhOMGFXeHNYRzRnS2lCMllXeHBaQzVjYmlBcUlFQmxlSFJsYm1SeklIdHFjM0JpTGsxbGMzTmhaMlY5WEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0pjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lEVXdNQ3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeXdnYm5Wc2JDazdYRzU5TzF4dVoyOXZaeTVwYm1obGNtbDBjeWh3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk1zSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekp6dGNibjFjYmx4dUx5b3FYRzRnS2lCVWFHVWdaWGgwWlc1emFXOXVjeUJ5WldkcGMzUmxjbVZrSUhkcGRHZ2dkR2hwY3lCdFpYTnpZV2RsSUdOc1lYTnpMaUJVYUdseklHbHpJR0VnYldGd0lHOW1YRzRnS2lCbGVIUmxibk5wYjI0Z1ptbGxiR1FnYm5WdFltVnlJSFJ2SUdacFpXeGtTVzVtYnlCdlltcGxZM1F1WEc0Z0tseHVJQ29nUm05eUlHVjRZVzF3YkdVNlhHNGdLaUFnSUNBZ2V5QXhNak02SUh0bWFXVnNaRWx1WkdWNE9pQXhNak1zSUdacFpXeGtUbUZ0WlRvZ2UyMTVYMlpwWld4a1gyNWhiV1U2SURCOUxDQmpkRzl5T2lCd2NtOTBieTVsZUdGdGNHeGxMazE1VFdWemMyRm5aWDBnZlZ4dUlDcGNiaUFxSUdacFpXeGtUbUZ0WlNCamIyNTBZV2x1Y3lCMGFHVWdTbk5EYjIxd2FXeGxjaUJ5Wlc1aGJXVmtJR1pwWld4a0lHNWhiV1VnY0hKdmNHVnlkSGtnYzI4Z2RHaGhkQ0JwZEZ4dUlDb2dkMjl5YTNNZ2FXNGdUMUJVU1UxSldrVkVJRzF2WkdVdVhHNGdLbHh1SUNvZ1FIUjVjR1VnZXlGUFltcGxZM1E4Ym5WdFltVnlMQ0JxYzNCaUxrVjRkR1Z1YzJsdmJrWnBaV3hrU1c1bWJ6NTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpJRDBnZTMwN1hHNWNibHh1THlvcVhHNGdLaUJVYUdVZ1pYaDBaVzV6YVc5dWN5QnlaV2RwYzNSbGNtVmtJSGRwZEdnZ2RHaHBjeUJ0WlhOellXZGxJR05zWVhOekxpQlVhR2x6SUdseklHRWdiV0Z3SUc5bVhHNGdLaUJsZUhSbGJuTnBiMjRnWm1sbGJHUWdiblZ0WW1WeUlIUnZJR1pwWld4a1NXNW1ieUJ2WW1wbFkzUXVYRzRnS2x4dUlDb2dSbTl5SUdWNFlXMXdiR1U2WEc0Z0tpQWdJQ0FnZXlBeE1qTTZJSHRtYVdWc1pFbHVaR1Y0T2lBeE1qTXNJR1pwWld4a1RtRnRaVG9nZTIxNVgyWnBaV3hrWDI1aGJXVTZJREI5TENCamRHOXlPaUJ3Y205MGJ5NWxlR0Z0Y0d4bExrMTVUV1Z6YzJGblpYMGdmVnh1SUNwY2JpQXFJR1pwWld4a1RtRnRaU0JqYjI1MFlXbHVjeUIwYUdVZ1NuTkRiMjF3YVd4bGNpQnlaVzVoYldWa0lHWnBaV3hrSUc1aGJXVWdjSEp2Y0dWeWRIa2djMjhnZEdoaGRDQnBkRnh1SUNvZ2QyOXlhM01nYVc0Z1QxQlVTVTFKV2tWRUlHMXZaR1V1WEc0Z0tseHVJQ29nUUhSNWNHVWdleUZQWW1wbFkzUThiblZ0WW1WeUxDQnFjM0JpTGtWNGRHVnVjMmx2YmtacFpXeGtRbWx1WVhKNVNXNW1iejU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lEVXdNQ3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV5WlhCbFlYUmxaRVpwWld4a2MxOHNJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5d2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxJR1Y0ZEdWdWMybHZibk1nY21WbmFYTjBaWEpsWkNCM2FYUm9JSFJvYVhNZ2JXVnpjMkZuWlNCamJHRnpjeTRnVkdocGN5QnBjeUJoSUcxaGNDQnZabHh1SUNvZ1pYaDBaVzV6YVc5dUlHWnBaV3hrSUc1MWJXSmxjaUIwYnlCbWFXVnNaRWx1Wm04Z2IySnFaV04wTGx4dUlDcGNiaUFxSUVadmNpQmxlR0Z0Y0d4bE9seHVJQ29nSUNBZ0lIc2dNVEl6T2lCN1ptbGxiR1JKYm1SbGVEb2dNVEl6TENCbWFXVnNaRTVoYldVNklIdHRlVjltYVdWc1pGOXVZVzFsT2lBd2ZTd2dZM1J2Y2pvZ2NISnZkRzh1WlhoaGJYQnNaUzVOZVUxbGMzTmhaMlY5SUgxY2JpQXFYRzRnS2lCbWFXVnNaRTVoYldVZ1kyOXVkR0ZwYm5NZ2RHaGxJRXB6UTI5dGNHbHNaWElnY21WdVlXMWxaQ0JtYVdWc1pDQnVZVzFsSUhCeWIzQmxjblI1SUhOdklIUm9ZWFFnYVhSY2JpQXFJSGR2Y210eklHbHVJRTlRVkVsTlNWcEZSQ0J0YjJSbExseHVJQ3BjYmlBcUlFQjBlWEJsSUhzaFQySnFaV04wUEc1MWJXSmxjaXdnYW5Od1lpNUZlSFJsYm5OcGIyNUdhV1ZzWkVsdVptOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTWdQU0I3ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkNhVzVoY25sSmJtWnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUlEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSURVd01Dd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3ljN1hHNTlYRzVjYmk4cUtseHVJQ29nVkdobElHVjRkR1Z1YzJsdmJuTWdjbVZuYVhOMFpYSmxaQ0IzYVhSb0lIUm9hWE1nYldWemMyRm5aU0JqYkdGemN5NGdWR2hwY3lCcGN5QmhJRzFoY0NCdlpseHVJQ29nWlhoMFpXNXphVzl1SUdacFpXeGtJRzUxYldKbGNpQjBieUJtYVdWc1pFbHVabThnYjJKcVpXTjBMbHh1SUNwY2JpQXFJRVp2Y2lCbGVHRnRjR3hsT2x4dUlDb2dJQ0FnSUhzZ01USXpPaUI3Wm1sbGJHUkpibVJsZURvZ01USXpMQ0JtYVdWc1pFNWhiV1U2SUh0dGVWOW1hV1ZzWkY5dVlXMWxPaUF3ZlN3Z1kzUnZjam9nY0hKdmRHOHVaWGhoYlhCc1pTNU5lVTFsYzNOaFoyVjlJSDFjYmlBcVhHNGdLaUJtYVdWc1pFNWhiV1VnWTI5dWRHRnBibk1nZEdobElFcHpRMjl0Y0dsc1pYSWdjbVZ1WVcxbFpDQm1hV1ZzWkNCdVlXMWxJSEJ5YjNCbGNuUjVJSE52SUhSb1lYUWdhWFJjYmlBcUlIZHZjbXR6SUdsdUlFOVFWRWxOU1ZwRlJDQnRiMlJsTGx4dUlDcGNiaUFxSUVCMGVYQmxJSHNoVDJKcVpXTjBQRzUxYldKbGNpd2dhbk53WWk1RmVIUmxibk5wYjI1R2FXVnNaRWx1Wm04K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5NZ1BTQjdmVHRjYmx4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSQ2FXNWhjbmxKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1bGVIUmxibk5wYjI1elFtbHVZWEo1SUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1ZrSUdKNUlFcHpVR0pEYjJSbFIyVnVaWEpoZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUMTlJRzl3ZEY5a1lYUmhJRTl3ZEdsdmJtRnNJR2x1YVhScFlXd2daR0YwWVNCaGNuSmhlU3dnZEhsd2FXTmhiR3g1SUdaeWIyMGdZVnh1SUNvZ2MyVnlkbVZ5SUhKbGMzQnZibk5sTENCdmNpQmpiMjV6ZEhKMVkzUmxaQ0JrYVhKbFkzUnNlU0JwYmlCS1lYWmhjMk55YVhCMExpQlVhR1VnWVhKeVlYa2dhWE1nZFhObFpGeHVJQ29nYVc0Z2NHeGhZMlVnWVc1a0lHSmxZMjl0WlhNZ2NHRnlkQ0J2WmlCMGFHVWdZMjl1YzNSeWRXTjBaV1FnYjJKcVpXTjBMaUJKZENCcGN5QnViM1FnWTJ4dmJtVmtMbHh1SUNvZ1NXWWdibThnWkdGMFlTQnBjeUJ3Y205MmFXUmxaQ3dnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDQjNhV3hzSUdKbElHVnRjSFI1TENCaWRYUWdjM1JwYkd4Y2JpQXFJSFpoYkdsa0xseHVJQ29nUUdWNGRHVnVaSE1nZTJwemNHSXVUV1Z6YzJGblpYMWNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dOVEF3TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5d2dhbk53WWk1TlpYTnpZV2RsS1R0Y2JtbG1JQ2huYjI5bkxrUkZRbFZISUNZbUlDRkRUMDFRU1V4RlJDa2dlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBYjNabGNuSnBaR1ZjYmlBZ0lDb3ZYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5Nbk8xeHVmVnh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5NZ1BTQjdmVHRjYmx4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSQ2FXNWhjbmxKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtnUFNCN2ZUdGNibHh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSURVd01Dd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk1uTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvWlNCbGVIUmxibk5wYjI1eklISmxaMmx6ZEdWeVpXUWdkMmwwYUNCMGFHbHpJRzFsYzNOaFoyVWdZMnhoYzNNdUlGUm9hWE1nYVhNZ1lTQnRZWEFnYjJaY2JpQXFJR1Y0ZEdWdWMybHZiaUJtYVdWc1pDQnVkVzFpWlhJZ2RHOGdabWxsYkdSSmJtWnZJRzlpYW1WamRDNWNiaUFxWEc0Z0tpQkdiM0lnWlhoaGJYQnNaVHBjYmlBcUlDQWdJQ0I3SURFeU16b2dlMlpwWld4a1NXNWtaWGc2SURFeU15d2dabWxsYkdST1lXMWxPaUI3YlhsZlptbGxiR1JmYm1GdFpUb2dNSDBzSUdOMGIzSTZJSEJ5YjNSdkxtVjRZVzF3YkdVdVRYbE5aWE56WVdkbGZTQjlYRzRnS2x4dUlDb2dabWxsYkdST1lXMWxJR052Ym5SaGFXNXpJSFJvWlNCS2MwTnZiWEJwYkdWeUlISmxibUZ0WldRZ1ptbGxiR1FnYm1GdFpTQndjbTl3WlhKMGVTQnpieUIwYUdGMElHbDBYRzRnS2lCM2IzSnJjeUJwYmlCUFVGUkpUVWxhUlVRZ2JXOWtaUzVjYmlBcVhHNGdLaUJBZEhsd1pTQjdJVTlpYW1WamREeHVkVzFpWlhJc0lHcHpjR0l1UlhoMFpXNXphVzl1Um1sbGJHUkpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWN5QTlJSHQ5TzF4dVhHNWNiaThxS2x4dUlDb2dWR2hsSUdWNGRHVnVjMmx2Ym5NZ2NtVm5hWE4wWlhKbFpDQjNhWFJvSUhSb2FYTWdiV1Z6YzJGblpTQmpiR0Z6Y3k0Z1ZHaHBjeUJwY3lCaElHMWhjQ0J2Wmx4dUlDb2daWGgwWlc1emFXOXVJR1pwWld4a0lHNTFiV0psY2lCMGJ5Qm1hV1ZzWkVsdVptOGdiMkpxWldOMExseHVJQ3BjYmlBcUlFWnZjaUJsZUdGdGNHeGxPbHh1SUNvZ0lDQWdJSHNnTVRJek9pQjdabWxsYkdSSmJtUmxlRG9nTVRJekxDQm1hV1ZzWkU1aGJXVTZJSHR0ZVY5bWFXVnNaRjl1WVcxbE9pQXdmU3dnWTNSdmNqb2djSEp2ZEc4dVpYaGhiWEJzWlM1TmVVMWxjM05oWjJWOUlIMWNiaUFxWEc0Z0tpQm1hV1ZzWkU1aGJXVWdZMjl1ZEdGcGJuTWdkR2hsSUVwelEyOXRjR2xzWlhJZ2NtVnVZVzFsWkNCbWFXVnNaQ0J1WVcxbElIQnliM0JsY25SNUlITnZJSFJvWVhRZ2FYUmNiaUFxSUhkdmNtdHpJR2x1SUU5UVZFbE5TVnBGUkNCdGIyUmxMbHh1SUNwY2JpQXFJRUIwZVhCbElIc2hUMkpxWldOMFBHNTFiV0psY2l3Z2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFSnBibUZ5ZVVsdVptOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVmtJR0o1SUVwelVHSkRiMlJsUjJWdVpYSmhkRzl5TGx4dUlDb2dRSEJoY21GdElIdEJjbkpoZVQxOUlHOXdkRjlrWVhSaElFOXdkR2x2Ym1Gc0lHbHVhWFJwWVd3Z1pHRjBZU0JoY25KaGVTd2dkSGx3YVdOaGJHeDVJR1p5YjIwZ1lWeHVJQ29nYzJWeWRtVnlJSEpsYzNCdmJuTmxMQ0J2Y2lCamIyNXpkSEoxWTNSbFpDQmthWEpsWTNSc2VTQnBiaUJLWVhaaGMyTnlhWEIwTGlCVWFHVWdZWEp5WVhrZ2FYTWdkWE5sWkZ4dUlDb2dhVzRnY0d4aFkyVWdZVzVrSUdKbFkyOXRaWE1nY0dGeWRDQnZaaUIwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMExpQkpkQ0JwY3lCdWIzUWdZMnh2Ym1Wa0xseHVJQ29nU1dZZ2JtOGdaR0YwWVNCcGN5QndjbTkyYVdSbFpDd2dkR2hsSUdOdmJuTjBjblZqZEdWa0lHOWlhbVZqZENCM2FXeHNJR0psSUdWdGNIUjVMQ0JpZFhRZ2MzUnBiR3hjYmlBcUlIWmhiR2xrTGx4dUlDb2dRR1Y0ZEdWdVpITWdlMnB6Y0dJdVRXVnpjMkZuWlgxY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlodmNIUmZaR0YwWVNrZ2UxeHVJQ0JxYzNCaUxrMWxjM05oWjJVdWFXNXBkR2xoYkdsNlpTaDBhR2x6TENCdmNIUmZaR0YwWVN3Z01Dd2dOVEF3TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNtVndaV0YwWldSR2FXVnNaSE5mTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1Y3l3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTVrYVhOd2JHRjVUbUZ0WlNBOUlDZHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUm9aU0JsZUhSbGJuTnBiMjV6SUhKbFoybHpkR1Z5WldRZ2QybDBhQ0IwYUdseklHMWxjM05oWjJVZ1kyeGhjM011SUZSb2FYTWdhWE1nWVNCdFlYQWdiMlpjYmlBcUlHVjRkR1Z1YzJsdmJpQm1hV1ZzWkNCdWRXMWlaWElnZEc4Z1ptbGxiR1JKYm1adklHOWlhbVZqZEM1Y2JpQXFYRzRnS2lCR2IzSWdaWGhoYlhCc1pUcGNiaUFxSUNBZ0lDQjdJREV5TXpvZ2UyWnBaV3hrU1c1a1pYZzZJREV5TXl3Z1ptbGxiR1JPWVcxbE9pQjdiWGxmWm1sbGJHUmZibUZ0WlRvZ01IMHNJR04wYjNJNklIQnliM1J2TG1WNFlXMXdiR1V1VFhsTlpYTnpZV2RsZlNCOVhHNGdLbHh1SUNvZ1ptbGxiR1JPWVcxbElHTnZiblJoYVc1eklIUm9aU0JLYzBOdmJYQnBiR1Z5SUhKbGJtRnRaV1FnWm1sbGJHUWdibUZ0WlNCd2NtOXdaWEowZVNCemJ5QjBhR0YwSUdsMFhHNGdLaUIzYjNKcmN5QnBiaUJQVUZSSlRVbGFSVVFnYlc5a1pTNWNiaUFxWEc0Z0tpQkFkSGx3WlNCN0lVOWlhbVZqZER4dWRXMWlaWElzSUdwemNHSXVSWGgwWlc1emFXOXVSbWxsYkdSSmJtWnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk1nUFNCN2ZUdGNibHh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JDYVc1aGNubEpibVp2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtnUFNCN2ZUdGNibHh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2IzQjBYMlJoZEdFcElIdGNiaUFnYW5Od1lpNU5aWE56WVdkbExtbHVhWFJwWVd4cGVtVW9kR2hwY3l3Z2IzQjBYMlJoZEdFc0lEQXNJRFV3TUN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdWNtVndaV0YwWldSR2FXVnNaSE5mTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TENCcWMzQmlMazFsYzNOaFoyVXBPMXh1YVdZZ0tHZHZiMmN1UkVWQ1ZVY2dKaVlnSVVOUFRWQkpURVZFS1NCN1hHNGdJQzhxS2x4dUlDQWdLaUJBY0hWaWJHbGpYRzRnSUNBcUlFQnZkbVZ5Y21sa1pWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5Nbk8xeHVmVnh1WEc0dktpcGNiaUFxSUZSb1pTQmxlSFJsYm5OcGIyNXpJSEpsWjJsemRHVnlaV1FnZDJsMGFDQjBhR2x6SUcxbGMzTmhaMlVnWTJ4aGMzTXVJRlJvYVhNZ2FYTWdZU0J0WVhBZ2IyWmNiaUFxSUdWNGRHVnVjMmx2YmlCbWFXVnNaQ0J1ZFcxaVpYSWdkRzhnWm1sbGJHUkpibVp2SUc5aWFtVmpkQzVjYmlBcVhHNGdLaUJHYjNJZ1pYaGhiWEJzWlRwY2JpQXFJQ0FnSUNCN0lERXlNem9nZTJacFpXeGtTVzVrWlhnNklERXlNeXdnWm1sbGJHUk9ZVzFsT2lCN2JYbGZabWxsYkdSZmJtRnRaVG9nTUgwc0lHTjBiM0k2SUhCeWIzUnZMbVY0WVcxd2JHVXVUWGxOWlhOellXZGxmU0I5WEc0Z0tseHVJQ29nWm1sbGJHUk9ZVzFsSUdOdmJuUmhhVzV6SUhSb1pTQktjME52YlhCcGJHVnlJSEpsYm1GdFpXUWdabWxsYkdRZ2JtRnRaU0J3Y205d1pYSjBlU0J6YnlCMGFHRjBJR2wwWEc0Z0tpQjNiM0pyY3lCcGJpQlBVRlJKVFVsYVJVUWdiVzlrWlM1Y2JpQXFYRzRnS2lCQWRIbHdaU0I3SVU5aWFtVmpkRHh1ZFcxaVpYSXNJR3B6Y0dJdVJYaDBaVzV6YVc5dVJtbGxiR1JKYm1adlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWN5QTlJSHQ5TzF4dVhHNWNiaThxS2x4dUlDb2dWR2hsSUdWNGRHVnVjMmx2Ym5NZ2NtVm5hWE4wWlhKbFpDQjNhWFJvSUhSb2FYTWdiV1Z6YzJGblpTQmpiR0Z6Y3k0Z1ZHaHBjeUJwY3lCaElHMWhjQ0J2Wmx4dUlDb2daWGgwWlc1emFXOXVJR1pwWld4a0lHNTFiV0psY2lCMGJ5Qm1hV1ZzWkVsdVptOGdiMkpxWldOMExseHVJQ3BjYmlBcUlFWnZjaUJsZUdGdGNHeGxPbHh1SUNvZ0lDQWdJSHNnTVRJek9pQjdabWxsYkdSSmJtUmxlRG9nTVRJekxDQm1hV1ZzWkU1aGJXVTZJSHR0ZVY5bWFXVnNaRjl1WVcxbE9pQXdmU3dnWTNSdmNqb2djSEp2ZEc4dVpYaGhiWEJzWlM1TmVVMWxjM05oWjJWOUlIMWNiaUFxWEc0Z0tpQm1hV1ZzWkU1aGJXVWdZMjl1ZEdGcGJuTWdkR2hsSUVwelEyOXRjR2xzWlhJZ2NtVnVZVzFsWkNCbWFXVnNaQ0J1WVcxbElIQnliM0JsY25SNUlITnZJSFJvWVhRZ2FYUmNiaUFxSUhkdmNtdHpJR2x1SUU5UVZFbE5TVnBGUkNCdGIyUmxMbHh1SUNwY2JpQXFJRUIwZVhCbElIc2hUMkpxWldOMFBHNTFiV0psY2l3Z2FuTndZaTVGZUhSbGJuTnBiMjVHYVdWc1pFSnBibUZ5ZVVsdVptOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpRbWx1WVhKNUlEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQnFjM0JpTGsxbGMzTmhaMlVwTzF4dWFXWWdLR2R2YjJjdVJFVkNWVWNnSmlZZ0lVTlBUVkJKVEVWRUtTQjdYRzRnSUM4cUtseHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFJRUJ2ZG1WeWNtbGtaVnh1SUNBZ0tpOWNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVaR2x6Y0d4aGVVNWhiV1VnUFNBbmNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRuTzF4dWZWeHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpXUWdZbmtnU25OUVlrTnZaR1ZIWlc1bGNtRjBiM0l1WEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1UFgwZ2IzQjBYMlJoZEdFZ1QzQjBhVzl1WVd3Z2FXNXBkR2xoYkNCa1lYUmhJR0Z5Y21GNUxDQjBlWEJwWTJGc2JIa2dabkp2YlNCaFhHNGdLaUJ6WlhKMlpYSWdjbVZ6Y0c5dWMyVXNJRzl5SUdOdmJuTjBjblZqZEdWa0lHUnBjbVZqZEd4NUlHbHVJRXBoZG1GelkzSnBjSFF1SUZSb1pTQmhjbkpoZVNCcGN5QjFjMlZrWEc0Z0tpQnBiaUJ3YkdGalpTQmhibVFnWW1WamIyMWxjeUJ3WVhKMElHOW1JSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRdUlFbDBJR2x6SUc1dmRDQmpiRzl1WldRdVhHNGdLaUJKWmlCdWJ5QmtZWFJoSUdseklIQnliM1pwWkdWa0xDQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wSUhkcGJHd2dZbVVnWlcxd2RIa3NJR0oxZENCemRHbHNiRnh1SUNvZ2RtRnNhV1F1WEc0Z0tpQkFaWGgwWlc1a2N5Qjdhbk53WWk1TlpYTnpZV2RsZlZ4dUlDb2dRR052Ym5OMGNuVmpkRzl5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMElEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQnVkV3hzTENCdWRXeHNLVHRjYm4wN1hHNW5iMjluTG1sdWFHVnlhWFJ6S0hCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblF1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25Rbk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnlBOUlHWjFibU4wYVc5dUtHOXdkRjlrWVhSaEtTQjdYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXBibWwwYVdGc2FYcGxLSFJvYVhNc0lHOXdkRjlrWVhSaExDQXdMQ0F0TVN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxuSmxjR1ZoZEdWa1JtbGxiR1J6WHl3Z2JuVnNiQ2s3WEc1OU8xeHVaMjl2Wnk1cGJtaGxjbWwwY3lod2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04c0lHcHpjR0l1VFdWemMyRm5aU2s3WEc1cFppQW9aMjl2Wnk1RVJVSlZSeUFtSmlBaFEwOU5VRWxNUlVRcElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb2dRRzkyWlhKeWFXUmxYRzRnSUNBcUwxeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1WkdsemNHeGhlVTVoYldVZ1BTQW5jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZKenRjYm4xY2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWa0lHSjVJRXB6VUdKRGIyUmxSMlZ1WlhKaGRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVDE5SUc5d2RGOWtZWFJoSUU5d2RHbHZibUZzSUdsdWFYUnBZV3dnWkdGMFlTQmhjbkpoZVN3Z2RIbHdhV05oYkd4NUlHWnliMjBnWVZ4dUlDb2djMlZ5ZG1WeUlISmxjM0J2Ym5ObExDQnZjaUJqYjI1emRISjFZM1JsWkNCa2FYSmxZM1JzZVNCcGJpQktZWFpoYzJOeWFYQjBMaUJVYUdVZ1lYSnlZWGtnYVhNZ2RYTmxaRnh1SUNvZ2FXNGdjR3hoWTJVZ1lXNWtJR0psWTI5dFpYTWdjR0Z5ZENCdlppQjBhR1VnWTI5dWMzUnlkV04wWldRZ2IySnFaV04wTGlCSmRDQnBjeUJ1YjNRZ1kyeHZibVZrTGx4dUlDb2dTV1lnYm04Z1pHRjBZU0JwY3lCd2NtOTJhV1JsWkN3Z2RHaGxJR052Ym5OMGNuVmpkR1ZrSUc5aWFtVmpkQ0IzYVd4c0lHSmxJR1Z0Y0hSNUxDQmlkWFFnYzNScGJHeGNiaUFxSUhaaGJHbGtMbHh1SUNvZ1FHVjRkR1Z1WkhNZ2UycHpjR0l1VFdWemMyRm5aWDFjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNGdQU0JtZFc1amRHbHZiaWh2Y0hSZlpHRjBZU2tnZTF4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YVc1cGRHbGhiR2w2WlNoMGFHbHpMQ0J2Y0hSZlpHRjBZU3dnTUN3Z0xURXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTV5WlhCbFlYUmxaRVpwWld4a2MxOHNJRzUxYkd3cE8xeHVmVHRjYm1kdmIyY3VhVzVvWlhKcGRITW9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMQ0JxYzNCaUxrMWxjM05oWjJVcE8xeHVhV1lnS0dkdmIyY3VSRVZDVlVjZ0ppWWdJVU5QVFZCSlRFVkVLU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxSUVCdmRtVnljbWxrWlZ4dUlDQWdLaTljYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxtUnBjM0JzWVhsT1lXMWxJRDBnSjNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2YmljN1hHNTlYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxaQ0JpZVNCS2MxQmlRMjlrWlVkbGJtVnlZWFJ2Y2k1Y2JpQXFJRUJ3WVhKaGJTQjdRWEp5WVhrOWZTQnZjSFJmWkdGMFlTQlBjSFJwYjI1aGJDQnBibWwwYVdGc0lHUmhkR0VnWVhKeVlYa3NJSFI1Y0dsallXeHNlU0JtY205dElHRmNiaUFxSUhObGNuWmxjaUJ5WlhOd2IyNXpaU3dnYjNJZ1kyOXVjM1J5ZFdOMFpXUWdaR2x5WldOMGJIa2dhVzRnU21GMllYTmpjbWx3ZEM0Z1ZHaGxJR0Z5Y21GNUlHbHpJSFZ6WldSY2JpQXFJR2x1SUhCc1lXTmxJR0Z1WkNCaVpXTnZiV1Z6SUhCaGNuUWdiMllnZEdobElHTnZibk4wY25WamRHVmtJRzlpYW1WamRDNGdTWFFnYVhNZ2JtOTBJR05zYjI1bFpDNWNiaUFxSUVsbUlHNXZJR1JoZEdFZ2FYTWdjSEp2ZG1sa1pXUXNJSFJvWlNCamIyNXpkSEoxWTNSbFpDQnZZbXBsWTNRZ2QybHNiQ0JpWlNCbGJYQjBlU3dnWW5WMElITjBhV3hzWEc0Z0tpQjJZV3hwWkM1Y2JpQXFJRUJsZUhSbGJtUnpJSHRxYzNCaUxrMWxjM05oWjJWOVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adklEMGdablZ1WTNScGIyNG9iM0IwWDJSaGRHRXBJSHRjYmlBZ2FuTndZaTVOWlhOellXZGxMbWx1YVhScFlXeHBlbVVvZEdocGN5d2diM0IwWDJSaGRHRXNJREFzSUMweExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1Y21Wd1pXRjBaV1JHYVdWc1pITmZMQ0J1ZFd4c0tUdGNibjA3WEc1bmIyOW5MbWx1YUdWeWFYUnpLSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnl3Z2FuTndZaTVOWlhOellXZGxLVHRjYm1sbUlDaG5iMjluTGtSRlFsVkhJQ1ltSUNGRFQwMVFTVXhGUkNrZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFiM1psY25KcFpHVmNiaUFnSUNvdlhHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04bk8xeHVmVnh1THlvcVhHNGdLaUJIWlc1bGNtRjBaV1FnWW5rZ1NuTlFZa052WkdWSFpXNWxjbUYwYjNJdVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNVBYMGdiM0IwWDJSaGRHRWdUM0IwYVc5dVlXd2dhVzVwZEdsaGJDQmtZWFJoSUdGeWNtRjVMQ0IwZVhCcFkyRnNiSGtnWm5KdmJTQmhYRzRnS2lCelpYSjJaWElnY21WemNHOXVjMlVzSUc5eUlHTnZibk4wY25WamRHVmtJR1JwY21WamRHeDVJR2x1SUVwaGRtRnpZM0pwY0hRdUlGUm9aU0JoY25KaGVTQnBjeUIxYzJWa1hHNGdLaUJwYmlCd2JHRmpaU0JoYm1RZ1ltVmpiMjFsY3lCd1lYSjBJRzltSUhSb1pTQmpiMjV6ZEhKMVkzUmxaQ0J2WW1wbFkzUXVJRWwwSUdseklHNXZkQ0JqYkc5dVpXUXVYRzRnS2lCSlppQnVieUJrWVhSaElHbHpJSEJ5YjNacFpHVmtMQ0IwYUdVZ1kyOXVjM1J5ZFdOMFpXUWdiMkpxWldOMElIZHBiR3dnWW1VZ1pXMXdkSGtzSUdKMWRDQnpkR2xzYkZ4dUlDb2dkbUZzYVdRdVhHNGdLaUJBWlhoMFpXNWtjeUI3YW5Od1lpNU5aWE56WVdkbGZWeHVJQ29nUUdOdmJuTjBjblZqZEc5eVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVJRDBnWm5WdVkzUnBiMjRvYjNCMFgyUmhkR0VwSUh0Y2JpQWdhbk53WWk1TlpYTnpZV2RsTG1sdWFYUnBZV3hwZW1Vb2RHaHBjeXdnYjNCMFgyUmhkR0VzSURBc0lDMHhMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXlaWEJsWVhSbFpFWnBaV3hrYzE4c0lHNTFiR3dwTzF4dWZUdGNibWR2YjJjdWFXNW9aWEpwZEhNb2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjRzSUdwemNHSXVUV1Z6YzJGblpTazdYRzVwWmlBb1oyOXZaeTVFUlVKVlJ5QW1KaUFoUTA5TlVFbE1SVVFwSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvZ1FHOTJaWEp5YVdSbFhHNGdJQ0FxTDF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1a2FYTndiR0Y1VG1GdFpTQTlJQ2R3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpYzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1RHbHpkQ0J2WmlCeVpYQmxZWFJsWkNCbWFXVnNaSE1nZDJsMGFHbHVJSFJvYVhNZ2JXVnpjMkZuWlNCMGVYQmxMbHh1SUNvZ1FIQnlhWFpoZEdVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRDNXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJNVjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRDNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFF1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFI5SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRDNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnWm1sc1pVeHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRVpwYkdWTWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVUyVjBMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pUWlhSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xObGRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrUm1sc1pTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbE5sZEM1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVMlYwTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkQzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFJtbHNaVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieUJtYVd4bElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pUWlhRdWNISnZkRzkwZVhCbExtZGxkRVpwYkdWTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYno1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzhzSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsTmxkSDBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VTJWMExuQnliM1J2ZEhsd1pTNXpaWFJHYVd4bFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlRaWFF1Y0hKdmRHOTBlWEJsTG1Ga1pFWnBiR1VnUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTVN3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKVFpYUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pUWlhRdWNISnZkRzkwZVhCbExtTnNaV0Z5Um1sc1pVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBSbWxzWlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JpOHFLbHh1SUNvZ1RHbHpkQ0J2WmlCeVpYQmxZWFJsWkNCbWFXVnNaSE1nZDJsMGFHbHVJSFJvYVhNZ2JXVnpjMkZuWlNCMGVYQmxMbHh1SUNvZ1FIQnlhWFpoZEdVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkpsY0dWaGRHVmtSbWxsYkdSelh5QTlJRnN6TERFd0xERXhMRFFzTlN3MkxEZGRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdibUZ0WlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdjR0pmY0dGamEyRm5aVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXlLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ1pHVndaVzVrWlc1amVVeHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQXpLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2NIVmliR2xqUkdWd1pXNWtaVzVqZVV4cGMzUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrUm1sbGJHUW9iWE5uTENBeE1Da3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUhkbFlXdEVaWEJsYm1SbGJtTjVUR2x6ZERvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNodGMyY3NJREV4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiV1Z6YzJGblpWUjVjR1ZNYVhOME9pQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JNYVhOMEtHMXpaeTVuWlhSTlpYTnpZV2RsVkhsd1pVeHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwTEZ4dUlDQWdJR1Z1ZFcxVWVYQmxUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwUlc1MWJWUjVjR1ZNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2tzWEc0Z0lDQWdjMlZ5ZG1salpVeHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRk5sY25acFkyVk1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2tzWEc0Z0lDQWdaWGgwWlc1emFXOXVUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwUlhoMFpXNXphVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZEN3Z2FXNWpiSFZrWlVsdWMzUmhibU5sS1N4Y2JpQWdJQ0J2Y0hScGIyNXpPaUFvWmlBOUlHMXpaeTVuWlhSUGNIUnBiMjV6S0NrcElDWW1JSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lITnZkWEpqWlVOdlpHVkpibVp2T2lBb1ppQTlJRzF6Wnk1blpYUlRiM1Z5WTJWRGIyUmxTVzVtYnlncEtTQW1KaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1ZEc5UFltcGxZM1FvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0JtS1N4Y2JpQWdJQ0J6ZVc1MFlYZzZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01USXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1pseHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzg3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZCaFkydGhaMlVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUkVaWEJsYm1SbGJtTjVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01UQTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVnpJRDBnTHlvcUlFQjBlWEJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjBnS2k4Z0tISmxZV1JsY2k1cGMwUmxiR2x0YVhSbFpDZ3BJRDhnY21WaFpHVnlMbkpsWVdSUVlXTnJaV1JKYm5Rek1pZ3BJRG9nVzNKbFlXUmxjaTV5WldGa1NXNTBNeklvS1YwcE8xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYlhObkxtRmtaRkIxWW14cFkwUmxjR1Z1WkdWdVkza29kbUZzZFdWelcybGRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNVEU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1Z6SUQwZ0x5b3FJRUIwZVhCbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4wZ0tpOGdLSEpsWVdSbGNpNXBjMFJsYkdsdGFYUmxaQ2dwSUQ4Z2NtVmhaR1Z5TG5KbFlXUlFZV05yWldSSmJuUXpNaWdwSURvZ1czSmxZV1JsY2k1eVpXRmtTVzUwTXpJb0tWMHBPMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0IyWVd4MVpYTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2JYTm5MbUZrWkZkbFlXdEVaWEJsYm1SbGJtTjVLSFpoYkhWbGMxdHBYU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRFE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBienRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtUV1Z6YzJGblpWUjVjR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTFPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1JXNTFiVlI1Y0dVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EyT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1UyVnlkbWxqWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRGM2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdk8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRVY0ZEdWdWMybHZiaVFvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTRPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3p0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlBjSFJwYjI1ektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnT1RwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTg3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVMjkxY21ObFEyOWtaVWx1Wm04b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F4TWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTNsdWRHRjRLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBeEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURJcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSRVpYQmxibVJsYm1ONVRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUlRkSEpwYm1jb1hHNGdJQ0FnSUNBekxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVUhWaWJHbGpSR1Z3Wlc1a1pXNWplVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrU1c1ME16SW9YRzRnSUNBZ0lDQXhNQ3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGZGxZV3RFWlhCbGJtUmxibU41VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSSmJuUXpNaWhjYmlBZ0lDQWdJREV4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBUV1Z6YzJGblpWUjVjR1ZNYVhOMEtDazdYRzRnSUdsbUlDaG1MbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWU1pYQmxZWFJsWkUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0EwTEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFVnVkVzFVZVhCbFRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUk5aWE56WVdkbEtGeHVJQ0FnSUNBZ05TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFUyVnlkbWxqWlV4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURZc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFVjRkR1Z1YzJsdmJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEY3NYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlBjSFJwYjI1ektDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdPQ3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRk52ZFhKalpVTnZaR1ZKYm1adktDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdPU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F4TWlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01USXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJ1WVcxbElEMGdNVHRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU1aGJXVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFNWhiV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhCaFkydGhaMlVnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBVR0ZqYTJGblpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeUxDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFVHRmphMkZuWlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbEJoWTJ0aFoyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVvWVhOUVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCemRISnBibWNnWkdWd1pXNWtaVzVqZVNBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4YzNSeWFXNW5QbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRVJsY0dWdVpHVnVZM2xNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RkJjbkpoZVR4emRISnBibWMrZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNeWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQSE4wY21sdVp6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwUkdWd1pXNWtaVzVqZVV4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURNc0lIWmhiSFZsSUh4OElGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WVdSa1JHVndaVzVrWlc1amVTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVc0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSkVaWEJsYm1SbGJtTjVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJFWlhCbGJtUmxibU41VEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnYVc1ME16SWdjSFZpYkdsalgyUmxjR1Z1WkdWdVkza2dQU0F4TUR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFVIVmliR2xqUkdWd1pXNWtaVzVqZVV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNoMGFHbHpMQ0F4TUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UEc1MWJXSmxjajU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFVIVmliR2xqUkdWd1pXNWtaVzVqZVV4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFd0xDQjJZV3gxWlNCOGZDQmJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Ga1pGQjFZbXhwWTBSbGNHVnVaR1Z1WTNrZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRVpwWld4a0tIUm9hWE1zSURFd0xDQjJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsQjFZbXhwWTBSbGNHVnVaR1Z1WTNsTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG5ObGRGQjFZbXhwWTBSbGNHVnVaR1Z1WTNsTWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCcGJuUXpNaUIzWldGclgyUmxjR1Z1WkdWdVkza2dQU0F4TVR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFYyVmhhMFJsY0dWdVpHVnVZM2xNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNVEVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHh1ZFcxaVpYSStmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEZkbFlXdEVaWEJsYm1SbGJtTjVUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEVzSUhaaGJIVmxJSHg4SUZ0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrVjJWaGEwUmxjR1Z1WkdWdVkza2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkVacFpXeGtLSFJvYVhNc0lERXhMQ0IyWVd4MVpTd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbGRsWVd0RVpYQmxibVJsYm1ONVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlhaV0ZyUkdWd1pXNWtaVzVqZVV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUVSbGMyTnlhWEIwYjNKUWNtOTBieUJ0WlhOellXZGxYM1I1Y0dVZ1BTQTBPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFMWxjM05oWjJWVWVYQmxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYno1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5d2dOQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFMWxjM05oWjJWVWVYQmxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z05Dd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHODlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkUxbGMzTmhaMlZVZVhCbElEMGdablZ1WTNScGIyNG9iM0IwWDNaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEUXNJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnl3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrMWxjM05oWjJWVWVYQmxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJOWlhOellXZGxWSGx3WlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUVWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4Z1pXNTFiVjkwZVhCbElEMGdOVHRjYmlBcUlFQnlaWFIxY200Z2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwUlc1MWJWUjVjR1ZNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHNJRFVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwUlc1MWJWUjVjR1ZNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTFMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVoWkdSRmJuVnRWSGx3WlNBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMUxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSVzUxYlZSNWNHVk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVZ1ZFcxVWVYQmxUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnlCelpYSjJhV05sSUQwZ05qdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVTJWeWRtbGpaVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnl3Z05pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ6NTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJUWlhKMmFXTmxUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z05pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVlXUmtVMlZ5ZG1salpTQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTJMQ0J2Y0hSZmRtRnNkV1VzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2TENCdmNIUmZhVzVrWlhncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiR2x6ZENCdFlXdHBibWNnYVhRZ1pXMXdkSGtnWW5WMElHNXZiaTF1ZFd4c0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVUyVnlkbWxqWlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFUyVnlkbWxqWlV4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUVacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdklHVjRkR1Z1YzJsdmJpQTlJRGM3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYno1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnl3Z055a3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBSWGgwWlc1emFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z055d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnoxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVoWkdSRmVIUmxibk5wYjI0a0lEMGdablZ1WTNScGIyNG9iM0IwWDNaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEY3NJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMQ0J2Y0hSZmFXNWtaWGdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JHbHpkQ0J0WVd0cGJtY2dhWFFnWlcxd2RIa2dZblYwSUc1dmJpMXVkV3hzTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5UlhoMFpXNXphVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSRmVIUmxibk5wYjI1TWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCR2FXeGxUM0IwYVc5dWN5QnZjSFJwYjI1eklEMGdPRHRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMQ0E0S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEU5d2RHbHZibk1vZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelQzQjBhVzl1Y3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURncElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1UyOTFjbU5sUTI5a1pVbHVabThnYzI5MWNtTmxYMk52WkdWZmFXNW1ieUE5SURrN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVTI5MWNtTmxRMjlrWlVsdVptOGdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabThzSURrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOThkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVTI5MWNtTmxRMjlrWlVsdVptOGdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E1TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpUYjNWeVkyVkRiMlJsU1c1bWJ5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVGIzVnlZMlZEYjJSbFNXNW1ieWgxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVvWVhOVGIzVnlZMlZEYjJSbFNXNW1ieUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRGtwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSE41Ym5SaGVDQTlJREV5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFUzbHVkR0Y0SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREV5TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVTNsdWRHRjRJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeE1pd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsTjViblJoZUNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFeUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5UZVc1MFlYZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXhNaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1WEc0dktpcGNiaUFxSUV4cGMzUWdiMllnY21Wd1pXRjBaV1FnWm1sbGJHUnpJSGRwZEdocGJpQjBhR2x6SUcxbGMzTmhaMlVnZEhsd1pTNWNiaUFxSUVCd2NtbDJZWFJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjFjYmlBcUlFQmpiMjV6ZEZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeUE5SUZzeUxEWXNNeXcwTERVc09DdzVMREV3WFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMblJ2VDJKcVpXTjBLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVzSUhSb2FYTXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk4wWVhScFl5QjJaWEp6YVc5dUlHOW1JSFJvWlNCN1FITmxaU0IwYjA5aWFtVmpkSDBnYldWMGFHOWtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZkhWdVpHVm1hVzVsWkgwZ2FXNWpiSFZrWlVsdWMzUmhibU5sSUVSbGNISmxZMkYwWldRdUlGZG9aWFJvWlhJZ2RHOGdhVzVqYkhWa1pWeHVJQ29nSUNBZ0lIUm9aU0JLVTFCQ0lHbHVjM1JoYm1ObElHWnZjaUIwY21GdWMybDBhVzl1WVd3Z2MyOTVJSEJ5YjNSdklITjFjSEJ2Y25RNlhHNGdLaUFnSUNBZ2FIUjBjRG92TDJkdmRHOHZjMjk1TFhCaGNtRnRMVzFwWjNKaGRHbHZibHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ1ptbGxiR1JNYVhOME9pQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JNYVhOMEtHMXpaeTVuWlhSR2FXVnNaRXhwYzNRb0tTeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2tzWEc0Z0lDQWdaWGgwWlc1emFXOXVUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwUlhoMFpXNXphVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZEN3Z2FXNWpiSFZrWlVsdWMzUmhibU5sS1N4Y2JpQWdJQ0J1WlhOMFpXUlVlWEJsVEdsemREb2dhbk53WWk1TlpYTnpZV2RsTG5SdlQySnFaV04wVEdsemRDaHRjMmN1WjJWMFRtVnpkR1ZrVkhsd1pVeHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwTEZ4dUlDQWdJR1Z1ZFcxVWVYQmxUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwUlc1MWJWUjVjR1ZNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2tzWEc0Z0lDQWdaWGgwWlc1emFXOXVVbUZ1WjJWTWFYTjBPaUJxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSTWFYTjBLRzF6Wnk1blpYUkZlSFJsYm5OcGIyNVNZVzVuWlV4cGMzUW9LU3hjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExuUnZUMkpxWldOMExDQnBibU5zZFdSbFNXNXpkR0Z1WTJVcExGeHVJQ0FnSUc5dVpXOW1SR1ZqYkV4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRFOXVaVzltUkdWamJFeHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ2IzQjBhVzl1Y3pvZ0tHWWdQU0J0YzJjdVoyVjBUM0IwYVc5dWN5Z3BLU0FtSmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtTeGNiaUFnSUNCeVpYTmxjblpsWkZKaGJtZGxUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FvS1N4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ2NtVnpaWEoyWldST1lXMWxUR2x6ZERvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNodGMyY3NJREV3S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRtRnRaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pFWnBaV3hrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtSWGgwWlc1emFXOXVKQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1RtVnpkR1ZrVkhsd1pTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURRNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHODdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JGYm5WdFZIbHdaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEVTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlR0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtSWGgwWlc1emFXOXVVbUZ1WjJVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0E0T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JQYm1WdlprUmxZMndvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTNPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN6dGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSUGNIUnBiMjV6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtVbVZ6WlhKMlpXUlNZVzVuWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJREV3T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JTWlhObGNuWmxaRTVoYldVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEVacFpXeGtUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdNaXhjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRVY0ZEdWdWMybHZia3hwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRFlzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJPWlhOMFpXUlVlWEJsVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTXl4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUkZiblZ0Vkhsd1pVeHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEUXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFVjRkR1Z1YzJsdmJsSmhibWRsVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTlN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUGJtVnZaa1JsWTJ4TWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBNExGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFQzQjBhVzl1Y3lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEY3NYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJTWlhObGNuWmxaRkpoYm1kbFRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUk5aWE56WVdkbEtGeHVJQ0FnSUNBZ09TeGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGSmxjMlZ5ZG1Wa1RtRnRaVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVTNSeWFXNW5LRnh1SUNBZ0lDQWdNVEFzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUhOMFlYSjBPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lERXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCbGJtUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01pa3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUc5d2RHbHZibk02SUNobUlEMGdiWE5uTG1kbGRFOXdkR2x2Ym5Nb0tTa2dKaVlnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlgwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbExtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpQTlJR1oxYm1OMGFXOXVLRzF6Wnl3Z2NtVmhaR1Z5S1NCN1hHNGdJSGRvYVd4bElDaHlaV0ZrWlhJdWJtVjRkRVpwWld4a0tDa3BJSHRjYmlBZ0lDQnBaaUFvY21WaFpHVnlMbWx6Ulc1a1IzSnZkWEFvS1NrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJtYVdWc1pDQTlJSEpsWVdSbGNpNW5aWFJHYVdWc1pFNTFiV0psY2lncE8xeHVJQ0FnSUhOM2FYUmphQ0FvWm1sbGJHUXBJSHRjYmlBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0hKbFlXUmxjaTV5WldGa1NXNTBNeklvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVTNSaGNuUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVWdVpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjenRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFQzQjBhVzl1Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1UlhoMFpXNXphVzl1VW1GdVoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbGZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMjUxYldKbGNuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXhLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWSmJuUXpNaWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsU1c1ME16SW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFQzQjBhVzl1Y3lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnBiblF6TWlCemRHRnlkQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExtZGxkRk4wWVhKMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lEQXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aUzV3Y205MGIzUjVjR1V1YzJWMFUzUmhjblFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExtTnNaV0Z5VTNSaGNuUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlV1Y0hKdmRHOTBlWEJsTG1oaGMxTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCcGJuUXpNaUJsYm1RZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzVuWlhSRmJtUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01pd2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG5CeWIzUnZkSGx3WlM1elpYUkZibVFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExtTnNaV0Z5Ulc1a0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzVvWVhORmJtUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRVY0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3lCdmNIUnBiMjV6SUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZXo5d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzVuWlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk45SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk1zSURNcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1emZIVnVaR1ZtYVc1bFpIMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGtWNGRHVnVjMmx2YmxKaGJtZGxMbkJ5YjNSdmRIbHdaUzV6WlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJYaDBaVzV6YVc5dVVtRnVaMlY5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsTG5CeWIzUnZkSGx3WlM1amJHVmhjazl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFQzQjBhVzl1Y3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJVdWNISnZkRzkwZVhCbExtaGhjMDl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXpLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVdWRHOVBZbXBsWTNRb2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTd2dkR2hwY3lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UzUmhkR2xqSUhabGNuTnBiMjRnYjJZZ2RHaGxJSHRBYzJWbElIUnZUMkpxWldOMGZTQnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNThkVzVrWldacGJtVmtmU0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnVjJobGRHaGxjaUIwYnlCcGJtTnNkV1JsWEc0Z0tpQWdJQ0FnZEdobElFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnYzNSaGNuUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdWdVpEb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBeUtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdaY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpYMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aWDBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJWOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aUzVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRWx1ZERNeUtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGTjBZWEowS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JKYm5Rek1pZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkZibVFvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsWVdSbGNpNXphMmx3Um1sbGJHUW9LVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dVVtVnpaWEoyWldSU1lXNW5aWDBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F4S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkpiblF6TWloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFNXNTBNeklvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnBiblF6TWlCemRHRnlkQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVVbVZ6WlhKMlpXUlNZVzVuWlM1d2NtOTBiM1I1Y0dVdVoyVjBVM1JoY25RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpTNXdjbTkwYjNSNWNHVXVjMlYwVTNSaGNuUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1U1pYTmxjblpsWkZKaGJtZGxMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbEpsYzJWeWRtVmtVbUZ1WjJVdWNISnZkRzkwZVhCbExtaGhjMU4wWVhKMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnBiblF6TWlCbGJtUWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlV1Y0hKdmRHOTBlWEJsTG1kbGRFVnVaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXlMQ0F3S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1elpYUkZibVFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lESXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1amJHVmhja1Z1WkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTVTWlhObGNuWmxaRkpoYm1kbExuQnliM1J2ZEhsd1pTNW9ZWE5GYm1RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCdVlXMWxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBeExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFNWhiV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnUm1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4Z1ptbGxiR1FnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSR2FXVnNaRXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMQ0F5S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFJtbGxiR1JNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXlMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrUm1sbGJHUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNaXdnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVJtbGxiR1JNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVacFpXeGtUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzhnWlhoMFpXNXphVzl1SUQwZ05qdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4c0lEWXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJGZUhSbGJuTnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTJMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrUlhoMFpXNXphVzl1SkNBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBMkxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5d2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpGZUhSbGJuTnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEVWNGRHVnVjMmx2Ymt4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUVSbGMyTnlhWEIwYjNKUWNtOTBieUJ1WlhOMFpXUmZkSGx3WlNBOUlETTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJPWlhOMFpXUlVlWEJsVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ6NTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieXdnTXlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJPWlhOMFpXUlVlWEJsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzg5ZlNCdmNIUmZkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrVG1WemRHVmtWSGx3WlNBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBekxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzhzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRtVnpkR1ZrVkhsd1pVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBUbVZ6ZEdWa1ZIbHdaVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRVZ1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzhnWlc1MWJWOTBlWEJsSUQwZ05EdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSRmJuVnRWSGx3WlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieXdnTkNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiejU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFJXNTFiVlI1Y0dWTWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0EwTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHODlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkVWdWRXMVVlWEJsSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURRc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4c0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSVzUxYlZSNWNHVk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRVZ1ZFcxVWVYQmxUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdSWGgwWlc1emFXOXVVbUZ1WjJVZ1pYaDBaVzV6YVc5dVgzSmhibWRsSUQwZ05UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aVDU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJsSmhibWRsVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlQ1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVuWlN3Z05Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Y0ZEdWdWMybHZibEpoYm1kbFBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJGZUhSbGJuTnBiMjVTWVc1blpVeHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURVc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVjRkR1Z1YzJsdmJsSmhibWRsUFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVSWGgwWlc1emFXOXVVbUZ1WjJWOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtRmtaRVY0ZEdWdWMybHZibEpoYm1kbElEMGdablZ1WTNScGIyNG9iM0IwWDNaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEVXNJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1RmVIUmxibk5wYjI1U1lXNW5aU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRmVIUmxibk5wYjI1U1lXNW5aVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwUlhoMFpXNXphVzl1VW1GdVoyVk1hWE4wS0Z0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQlBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieUJ2Ym1WdlpsOWtaV05zSUQwZ09EdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFQyNWxiMlpFWldOc1RHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4c0lEZ3BLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJQYm1WdlprUmxZMnhNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTRMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdlBYMGdiM0IwWDNaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZV1JrVDI1bGIyWkVaV05zSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURnc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazl1Wlc5bVJHVmpiRXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVDI1bGIyWkVaV05zVEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVFdWemMyRm5aVTl3ZEdsdmJuTWdiM0IwYVc5dWN5QTlJRGM3WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1Y3UDNCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1YzMwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxDQTNLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6ZkhWdVpHVm1hVzVsWkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dOeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYldWemMyRm5aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFQzQjBhVzl1Y3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWhoYzA5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0EzS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUhKbGNHVmhkR1ZrSUZKbGMyVnlkbVZrVW1GdVoyVWdjbVZ6WlhKMlpXUmZjbUZ1WjJVZ1BTQTVPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlUrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUlNaWE5sY25abFpGSmhibWRsVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsUG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlVzSURrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NVNaWE5sY25abFpGSmhibWRsUG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlNaWE5sY25abFpGSmhibWRsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dPU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1VW1WelpYSjJaV1JTWVc1blpUMTlJRzl3ZEY5MllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEk5ZlNCdmNIUmZhVzVrWlhoY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJHVnpZM0pwY0hSdmNsQnliM1J2TGxKbGMyVnlkbVZrVW1GdVoyVjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZKbGMyVnlkbVZrVW1GdVoyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dPU3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlVzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVVtVnpaWEoyWldSU1lXNW5aVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVW1WelpYSjJaV1JTWVc1blpVeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lITjBjbWx1WnlCeVpYTmxjblpsWkY5dVlXMWxJRDBnTVRBN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhjM1J5YVc1blBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVaMlYwVW1WelpYSjJaV1JPWVcxbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoUVhKeVlYazhjM1J5YVc1blBuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRVpwWld4a0tIUm9hWE1zSURFd0tTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOGMzUnlhVzVuUG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBVbVZ6WlhKMlpXUk9ZVzFsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVRBc0lIWmhiSFZsSUh4OElGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Ga1pGSmxjMlZ5ZG1Wa1RtRnRaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNVEFzSUhaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JHbHpkQ0J0WVd0cGJtY2dhWFFnWlcxd2RIa2dZblYwSUc1dmJpMXVkV3hzTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xKbGMyVnlkbVZrVG1GdFpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBVbVZ6WlhKMlpXUk9ZVzFsVEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTV5WlhCbFlYUmxaRVpwWld4a2MxOGdQU0JiT1RrNVhUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ekxuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjMzBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2RXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1E2SUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFeHBjM1FvYlhObkxtZGxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1ZEc5UFltcGxZM1FzSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2xjYmlBZ2ZUdGNibHh1SUNCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUkZlSFJsYm5OcGIyNG9MeW9xSUVCMGVYQmxJSHNoYW5Od1lpNU5aWE56WVdkbGZTQXFMeUFvYlhObktTd2diMkpxTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUkZlSFJsYm5OcGIyNHNYRzRnSUNBZ0lDQnBibU5zZFdSbFNXNXpkR0Z1WTJVcE8xeHVJQ0JwWmlBb2FXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnYjJKcUxpUnFjM0JpVFdWemMyRm5aVWx1YzNSaGJtTmxJRDBnYlhObk8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdlltbzdYRzU5TzF4dWZWeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa3VYRzRnS2lCQWNHRnlZVzBnZTJwemNHSXVRbmwwWlZOdmRYSmpaWDBnWW5sMFpYTWdWR2hsSUdKNWRHVnpJSFJ2SUdSbGMyVnlhV0ZzYVhwbExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVjRkR1Z1YzJsdmJsSmhibWRsVDNCMGFXOXVjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5SUQwZ1puVnVZM1JwYjI0b2JYTm5MQ0J5WldGa1pYSXBJSHRjYmlBZ2QyaHBiR1VnS0hKbFlXUmxjaTV1WlhoMFJtbGxiR1FvS1NrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZrWlhJdWFYTkZibVJIY205MWNDZ3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHWnBaV3hrSUQwZ2NtVmhaR1Z5TG1kbGRFWnBaV3hrVG5WdFltVnlLQ2s3WEc0Z0lDQWdjM2RwZEdOb0lDaG1hV1ZzWkNrZ2UxeHVJQ0FnSUdOaGMyVWdPVGs1T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dU8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdhbk53WWk1TlpYTnpZV2RsTG5KbFlXUkNhVzVoY25sRmVIUmxibk5wYjI0b2JYTm5MQ0J5WldGa1pYSXNYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVaWGgwWlc1emFXOXVjMEpwYm1GeWVTeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWNGRHVnVjMmx2YmxKaGJtZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1TEZ4dUlDQWdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUkZlSFJsYm5OcGIyNHBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSWGgwWlc1emFXOXVVbUZ1WjJWUGNIUnBiMjV6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZlSFJsYm5OcGIyNVNZVzVuWlU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZTWlhCbFlYUmxaRTFsYzNOaFoyVW9YRzRnSUNBZ0lDQTVPVGtzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdwemNHSXVUV1Z6YzJGblpTNXpaWEpwWVd4cGVtVkNhVzVoY25sRmVIUmxibk5wYjI1ektHMWxjM05oWjJVc0lIZHlhWFJsY2l4Y2JpQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJYaDBaVzV6YVc5dVVtRnVaMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua3NJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmVIUmxibk5wYjI1U1lXNW5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2YmlrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2NtVndaV0YwWldRZ1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpQjFibWx1ZEdWeWNISmxkR1ZrWDI5d2RHbHZiaUE5SURrNU9UdGNiaUFxSUVCeVpYUjFjbTRnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UlhoMFpXNXphVzl1VW1GdVoyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMQ0E1T1RrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1S2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqMTlJRzl3ZEY5MllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEk5ZlNCdmNIUmZhVzVrWlhoY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVlXUmtWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaUE5SUdaMWJtTjBhVzl1S0c5d2RGOTJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVlXUmtWRzlTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E1T1Rrc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0c0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Y0ZEdWdWMybHZibEpoYm1kbFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGZUhSbGJuTnBiMjVTWVc1blpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdibUZ0WlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiblZ0WW1WeU9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURNcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JzWVdKbGJEb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBMEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnZEhsd1pUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBMUtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnZEhsd1pVNWhiV1U2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dOaWtwSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHVjRkR1Z1WkdWbE9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURJcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JrWldaaGRXeDBWbUZzZFdVNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTnlrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJRzl1Wlc5bVNXNWtaWGc2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dPU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHcHpiMjVPWVcxbE9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURFd0tTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnYjNCMGFXOXVjem9nS0dZZ1BTQnRjMmN1WjJWMFQzQjBhVzl1Y3lncEtTQW1KaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMblJ2VDJKcVpXTjBLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2daaWtzWEc0Z0lDQWdjSEp2ZEc4elQzQjBhVzl1WVd3NklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkNodGMyY3NJREUzS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhST1lXMWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkpiblF6TWlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhST2RXMWlaWElvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TGt4aFltVnNmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkZiblZ0S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEV4aFltVnNLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTVVZVhCbGZTQXFMeUFvY21WaFpHVnlMbkpsWVdSRmJuVnRLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRlI1Y0dVb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EyT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkZOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJVZVhCbFRtRnRaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFVjRkR1Z1WkdWbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTnpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwUkdWbVlYVnNkRlpoYkhWbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnT1RwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSSmJuUXpNaWdwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJQYm1WdlprbHVaR1Y0S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNVEE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRXB6YjI1T1lXMWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ09EcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlBjSFJwYjI1ektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTVRjNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUhKdmRHOHpUM0IwYVc5dVlXd29kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElnUFNCbWRXNWpkR2x2YmlodFpYTnpZV2RsTENCM2NtbDBaWElwSUh0Y2JpQWdkbUZ5SUdZZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXhLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVsdWRETXlLRnh1SUNBZ0lDQWdNeXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dVRHRmlaV3g5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTkNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxSVzUxYlNoY2JpQWdJQ0FnSURRc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbFI1Y0dWOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z05Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsUlc1MWJTaGNiaUFnSUNBZ0lEVXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTmlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ05peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F5S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRGNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURjc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dPU2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFNXNTBNeklvWEc0Z0lDQWdJQ0E1TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lERXdLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F4TUN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRTl3ZEdsdmJuTW9LVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlUxbGMzTmhaMlVvWEc0Z0lDQWdJQ0E0TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVRjcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeE55eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUdWdWRXMGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TGxSNWNHVWdQU0I3WEc0Z0lGUlpVRVZmUkU5VlFreEZPaUF4TEZ4dUlDQlVXVkJGWDBaTVQwRlVPaUF5TEZ4dUlDQlVXVkJGWDBsT1ZEWTBPaUF6TEZ4dUlDQlVXVkJGWDFWSlRsUTJORG9nTkN4Y2JpQWdWRmxRUlY5SlRsUXpNam9nTlN4Y2JpQWdWRmxRUlY5R1NWaEZSRFkwT2lBMkxGeHVJQ0JVV1ZCRlgwWkpXRVZFTXpJNklEY3NYRzRnSUZSWlVFVmZRazlQVERvZ09DeGNiaUFnVkZsUVJWOVRWRkpKVGtjNklEa3NYRzRnSUZSWlVFVmZSMUpQVlZBNklERXdMRnh1SUNCVVdWQkZYMDFGVTFOQlIwVTZJREV4TEZ4dUlDQlVXVkJGWDBKWlZFVlRPaUF4TWl4Y2JpQWdWRmxRUlY5VlNVNVVNekk2SURFekxGeHVJQ0JVV1ZCRlgwVk9WVTA2SURFMExGeHVJQ0JVV1ZCRlgxTkdTVmhGUkRNeU9pQXhOU3hjYmlBZ1ZGbFFSVjlUUmtsWVJVUTJORG9nTVRZc1hHNGdJRlJaVUVWZlUwbE9WRE15T2lBeE55eGNiaUFnVkZsUVJWOVRTVTVVTmpRNklERTRYRzU5TzF4dVhHNHZLaXBjYmlBcUlFQmxiblZ0SUh0dWRXMWlaWEo5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NU1ZV0psYkNBOUlIdGNiaUFnVEVGQ1JVeGZUMUJVU1U5T1FVdzZJREVzWEc0Z0lFeEJRa1ZNWDFKRlVWVkpVa1ZFT2lBeUxGeHVJQ0JNUVVKRlRGOVNSVkJGUVZSRlJEb2dNMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2JtRnRaU0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhST1lXMWxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtaGhjMDVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHbHVkRE15SUc1MWJXSmxjaUE5SURNN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBUblZ0WW1WeUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNc0lEQXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1MWJXSmxjaUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUblZ0WW1WeUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWhoYzA1MWJXSmxjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVEdGaVpXd2diR0ZpWld3Z1BTQTBPMXh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1TVlXSmxiSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJNWVdKbGJDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxreGhZbVZzZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTkN3Z01Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NU1ZV0psYkgwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRXhoWW1Wc0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKTVlXSmxiQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFFzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTk1ZV0psYkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURRcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ZIbHdaU0IwZVhCbElEMGdOVHRjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dVZIbHdaWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJVZVhCbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dVZIbHdaWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFVzSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dVZIbHdaWDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRGUjVjR1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEVXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjbFI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBMUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6Vkhsd1pTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEVXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklIUjVjR1ZmYm1GdFpTQTlJRFk3WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFZIbHdaVTVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTml3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFZIbHdaVTVoYldVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFlzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xSNWNHVk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTml3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtaGhjMVI1Y0dWT1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dOaWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2daWGgwWlc1a1pXVWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1WkdWbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURJc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFVjRkR1Z1WkdWbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRmVIUmxibVJsWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5GZUhSbGJtUmxaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRElwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JR1JsWm1GMWJIUmZkbUZzZFdVZ1BTQTNPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEVSbFptRjFiSFJXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBM0xDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUkVaV1poZFd4MFZtRnNkV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEY3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhja1JsWm1GMWJIUldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURjc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5FWldaaGRXeDBWbUZzZFdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBM0tTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHbHVkRE15SUc5dVpXOW1YMmx1WkdWNElEMGdPVHRjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSUGJtVnZaa2x1WkdWNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURrc0lEQXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU5dVpXOW1TVzVrWlhnZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRGtzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2s5dVpXOW1TVzVrWlhnZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBNUxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VDI1bGIyWkpibVJsZUNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURrcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUdwemIyNWZibUZ0WlNBOUlERXdPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEVwemIyNU9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREV3TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSS2MyOXVUbUZ0WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2twemIyNU9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVRBc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5LYzI5dVRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREV3S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUVacFpXeGtUM0IwYVc5dWN5QnZjSFJwYjI1eklEMGdPRHRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3l3Z09Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSUGNIUnBiMjV6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09Dd2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdiV1Z6YzJGblpTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEU5d2RHbHZibk1vZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1oaGMwOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBNEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnY0hKdmRHOHpYMjl3ZEdsdmJtRnNJRDBnTVRjN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRkJ5YjNSdk0wOXdkR2x2Ym1Gc0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVRjc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBVSEp2ZEc4elQzQjBhVzl1WVd3Z1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREUzTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUWNtOTBiek5QY0hScGIyNWhiQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREUzTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpVSEp2ZEc4elQzQjBhVzl1WVd3Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeE55a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJRzVoYldVNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMXpaeXdnTVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJRzl3ZEdsdmJuTTZJQ2htSUQwZ2JYTm5MbWRsZEU5d2RHbHZibk1vS1NrZ0ppWWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBYRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaa1JsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjenRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFQzQjBhVzl1Y3loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2WmtSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lERXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUGNIUnBiMjV6S0NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCdVlXMWxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrNWhiV1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1QyNWxiMlpQY0hScGIyNXpJRzl3ZEdsdmJuTWdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1emZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxDQXlLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjM3gxYm1SbFptbHVaV1I5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXlMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFQzQjBhVzl1Y3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6SXNOQ3cxWFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWhwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJRzF6WnlrZ2UxeHVJQ0IyWVhJZ1ppd2diMkpxSUQwZ2UxeHVJQ0FnSUc1aGJXVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUhaaGJIVmxUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwVm1Gc2RXVk1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZEN3Z2FXNWpiSFZrWlVsdWMzUmhibU5sS1N4Y2JpQWdJQ0J2Y0hScGIyNXpPaUFvWmlBOUlHMXpaeTVuWlhSUGNIUnBiMjV6S0NrcElDWW1JSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NTBiMDlpYW1WamRDaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHWXBMRnh1SUNBZ0lISmxjMlZ5ZG1Wa1VtRnVaMlZNYVhOME9pQnFjM0JpTGsxbGMzTmhaMlV1ZEc5UFltcGxZM1JNYVhOMEtHMXpaeTVuWlhSU1pYTmxjblpsWkZKaGJtZGxUR2x6ZENncExGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxMblJ2VDJKcVpXTjBMQ0JwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBMRnh1SUNBZ0lISmxjMlZ5ZG1Wa1RtRnRaVXhwYzNRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2JYTm5MQ0ExS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdk8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFNWhiV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHODdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSXBPMXh1SUNBZ0lDQWdiWE5uTG1Ga1pGWmhiSFZsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NN1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUM0IwYVc5dWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURRNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVTdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JTWlhObGNuWmxaRkpoYm1kbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTlRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVW1WelpYSjJaV1JPWVcxbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpXRmtaWEl1YzJ0cGNFWnBaV3hrS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMllYSWdkM0pwZEdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5S0NrN1hHNGdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F4S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVm1Gc2RXVk1hWE4wS0NrN1hHNGdJR2xtSUNobUxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZTWlhCbFlYUmxaRTFsYzNOaFoyVW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdaaXhjYmlBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEU5d2RHbHZibk1vS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVMWxjM05oWjJVb1hHNGdJQ0FnSUNBekxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFVtVnpaWEoyWldSU1lXNW5aVXhwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRFFzWEc0Z0lDQWdJQ0JtTEZ4dUlDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhKY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQnRaWE56WVdkbExtZGxkRkpsYzJWeWRtVmtUbUZ0WlV4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1UzUnlhVzVuS0Z4dUlDQWdJQ0FnTlN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgwZ2JYTm5JRlJvWlNCdGMyY2dhVzV6ZEdGdVkyVWdkRzhnZEhKaGJuTm1iM0p0TGx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlV1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lITjBZWEowT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJREVwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQmxibVE2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dNaWtwSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1YRzRnSUgwN1hHNWNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlR0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsTG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxmU0J0YzJjZ1ZHaGxJRzFsYzNOaFoyVWdiMkpxWldOMElIUnZJR1JsYzJWeWFXRnNhWHBsSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWSmxZV1JsY24wZ2NtVmhaR1Z5SUZSb1pTQkNhVzVoY25sU1pXRmtaWElnZEc4Z2RYTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpTNWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNoeVpXRmtaWEl1Y21WaFpFbHVkRE15S0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZOMFlYSjBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkpiblF6TWlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRmJtUW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpTNXdjbTkwYjNSNWNHVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUIzY21sMFpYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFhjbWwwWlhJb0tUdGNiaUFnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVSVzUxYlZKbGMyVnlkbVZrVW1GdVoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aUzV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpQTlJR1oxYm1OMGFXOXVLRzFsYzNOaFoyVXNJSGR5YVhSbGNpa2dlMXh1SUNCMllYSWdaaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVWx1ZERNeUtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F5S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkpiblF6TWloY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR2x1ZERNeUlITjBZWEowSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWNISnZkRzkwZVhCbExtZGxkRk4wWVhKMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UyNTFiV0psY24wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURFc0lEQXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbExuQnliM1J2ZEhsd1pTNXpaWFJUZEdGeWRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGJ5NUZiblZ0VW1WelpYSjJaV1JTWVc1blpYMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbExuQnliM1J2ZEhsd1pTNWpiR1ZoY2xOMFlYSjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aUzV3Y205MGIzUjVjR1V1YUdGelUzUmhjblFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F4S1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdsdWRETXlJR1Z1WkNBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbExuQnliM1J2ZEhsd1pTNW5aWFJGYm1RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTWl3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxrVnVkVzFTWlhObGNuWmxaRkpoYm1kbGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWNISnZkRzkwZVhCbExuTmxkRVZ1WkNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TGtWdWRXMVNaWE5sY25abFpGSmhibWRsTG5CeWIzUnZkSGx3WlM1amJHVmhja1Z1WkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dVJXNTFiVkpsYzJWeWRtVmtVbUZ1WjJVdWNISnZkRzkwZVhCbExtaGhjMFZ1WkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUc1aGJXVWdQU0F4TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBUbUZ0WlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5PWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQkZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4Z2RtRnNkV1VnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEZaaGJIVmxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYno1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5d2dNaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRGWmhiSFZsVEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzg5ZlNCdmNIUmZkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVBYMGdiM0IwWDJsdVpHVjRYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGIzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Ga1pGWmhiSFZsSUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURJc0lHOXdkRjkyWVd4MVpTd2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieXdnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xaaGJIVmxUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJXWVd4MVpVeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFVnVkVzFQY0hScGIyNXpJRzl3ZEdsdmJuTWdQU0F6TzF4dUlDb2dRSEpsZEhWeWJpQjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWMzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6ZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk1zSURNcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5OOGRXNWtaV1pwYm1Wa2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVjBUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRE1zSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUcxbGMzTmhaMlVnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1amJHVmhjazl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFQzQjBhVzl1Y3loMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1b1lYTlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQkZiblZ0VW1WelpYSjJaV1JTWVc1blpTQnlaWE5sY25abFpGOXlZVzVuWlNBOUlEUTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZMa1Z1ZFcxU1pYTmxjblpsWkZKaGJtZGxQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMUVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtZGxkRkpsYzJWeWRtVmtVbUZ1WjJWTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlQ1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlVzSURRcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzh1Ulc1MWJWSmxjMlZ5ZG1Wa1VtRnVaMlUrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFVtVnpaWEoyWldSU1lXNW5aVXhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEUXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlQxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYnk1RmJuVnRVbVZ6WlhKMlpXUlNZVzVuWlgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZKbGMyVnlkbVZrVW1GdVoyVWdQU0JtZFc1amRHbHZiaWh2Y0hSZmRtRnNkV1VzSUc5d2RGOXBibVJsZUNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1Ga1pGUnZVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dOQ3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTVGYm5WdFVtVnpaWEoyWldSU1lXNW5aU3dnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xKbGMyVnlkbVZrVW1GdVoyVk1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRkpsYzJWeWRtVmtVbUZ1WjJWTWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCemRISnBibWNnY21WelpYSjJaV1JmYm1GdFpTQTlJRFU3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOGMzUnlhVzVuUG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEZKbGMyVnlkbVZrVG1GdFpVeHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3SVVGeWNtRjVQSE4wY21sdVp6NTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JHYVdWc1pDaDBhR2x6TENBMUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOGMzUnlhVzVuUG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUlNaWE5sY25abFpFNWhiV1ZNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0ExTENCMllXeDFaU0I4ZkNCYlhTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0UkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbUZrWkZKbGMyVnlkbVZrVG1GdFpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z05Td2dkbUZzZFdVc0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSlNaWE5sY25abFpFNWhiV1ZNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZKbGMyVnlkbVZrVG1GdFpVeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlocGJtTnNkV1JsU1c1emRHRnVZMlVzSUcxelp5a2dlMXh1SUNCMllYSWdaaXdnYjJKcUlEMGdlMXh1SUNBZ0lHNWhiV1U2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dNU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lHNTFiV0psY2pvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F5S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiM0IwYVc5dWN6b2dLR1lnUFNCdGMyY3VaMlYwVDNCMGFXOXVjeWdwS1NBbUppQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJR1lwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLR2x1WTJ4MVpHVkpibk4wWVc1alpTa2dlMXh1SUNBZ0lHOWlhaTRrYW5Od1lrMWxjM05oWjJWSmJuTjBZVzVqWlNBOUlHMXpaenRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZUdGNibjFjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEJoY21GdElIdHFjM0JpTGtKNWRHVlRiM1Z5WTJWOUlHSjVkR1Z6SUZSb1pTQmllWFJsY3lCMGJ5QmtaWE5sY21saGJHbDZaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnp0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFNWhiV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRWx1ZERNeUtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFNTFiV0psY2loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk03WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJQY0hScGIyNXpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQjNjbWwwWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sWGNtbDBaWElvS1R0Y2JpQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVUmxjMk55YVhCMGIzSlFjbTkwYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaUE5SUdaMWJtTjBhVzl1S0cxbGMzTmhaMlVzSUhkeWFYUmxjaWtnZTF4dUlDQjJZWElnWmlBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lERXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJREVzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01pa3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsU1c1ME16SW9YRzRnSUNBZ0lDQXlMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFQzQjBhVzl1Y3lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JRzVoYldVZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1blpYUk9ZVzFsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREVzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVjMlYwVG1GdFpTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVZMnhsWVhKT1lXMWxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5PWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnBiblF6TWlCdWRXMWlaWElnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhST2RXMWlaWElnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFJHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUk9kVzFpWlhJZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VG5WdFltVnlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNaXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5PZFcxaVpYSWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJRVZ1ZFcxV1lXeDFaVTl3ZEdsdmJuTWdiM0IwYVc5dWN5QTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzL2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTjlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk44ZFc1a1pXWnBibVZrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXpMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSUGNIUnBiMjV6S0hWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VDNCMGFXOXVjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3pKZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVVJsYzJOeWFYQjBiM0pRY205MGJ5NTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdibUZ0WlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiV1YwYUc5a1RHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBUV1YwYUc5a1RHbHpkQ2dwTEZ4dUlDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ2IzQjBhVzl1Y3pvZ0tHWWdQU0J0YzJjdVoyVjBUM0IwYVc5dWN5Z3BLU0FtSmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWRHOVBZbXBsWTNRb2FXNWpiSFZrWlVsdWMzUmhibU5sTENCbUtWeHVJQ0I5TzF4dVhHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzg3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRtRnRaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnp0Y2JpQWdJQ0FnSUhKbFlXUmxjaTV5WldGa1RXVnpjMkZuWlNoMllXeDFaU3h3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtUV1YwYUc5a0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk03WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBUM0IwYVc5dWN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2NtVmhaR1Z5TG5OcmFYQkdhV1ZzWkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFJHVnpZM0pwY0hSdmNsQnliM1J2TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z01Ta3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdNU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNCdFpYTnpZV2RsTG1kbGRFMWxkR2h2WkV4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFQzQjBhVzl1Y3lncE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxUV1Z6YzJGblpTaGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnVZVzFsSUQwZ01UdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU1aGJXVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z01Td2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbk5sZEU1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURFc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpPWVcxbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnVFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdklHMWxkR2h2WkNBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzgrZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WjJWMFRXVjBhRzlrVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYno1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnl3Z01pa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdlBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFMWxkR2h2WkV4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVoWkdSTlpYUm9iMlFnUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTWl3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdmZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVRXVjBhRzlrVEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSTlpYUm9iMlJNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JUWlhKMmFXTmxUM0IwYVc5dWN5QnZjSFJwYjI1eklEMGdNenRjYmlBcUlFQnlaWFIxY200Z2V6OXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJQY0hScGIyNXpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdQM0J5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjMzBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TENBektTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpmSFZ1WkdWbWFXNWxaSDBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExuTmxkRTl3ZEdsdmJuTWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F6TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCdFpYTnpZV2RsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1WTJ4bFlYSlBjSFJwYjI1eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEU5d2RHbHZibk1vZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpUM0IwYVc5dWN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnYlhObklGUm9aU0J0YzJjZ2FXNXpkR0Z1WTJVZ2RHOGdkSEpoYm5ObWIzSnRMbHh1SUNvZ1FISmxkSFZ5YmlCN0lVOWlhbVZqZEgxY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2FXNXdkWFJVZVhCbE9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURJcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0J2ZFhSd2RYUlVlWEJsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRE1wS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnZjSFJwYjI1ek9pQW9aaUE5SUcxelp5NW5aWFJQY0hScGIyNXpLQ2twSUNZbUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxuUnZUMkpxWldOMEtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z1ppa3NYRzRnSUNBZ1kyeHBaVzUwVTNSeVpXRnRhVzVuT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBMUxDQm1ZV3h6WlNrc1hHNGdJQ0FnYzJWeWRtVnlVM1J5WldGdGFXNW5PaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0EyTENCbVlXeHpaU2xjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG1GdFpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVsdWNIVjBWSGx3WlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRTkxZEhCMWRGUjVjR1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ek8xeHVJQ0FnSUNBZ2NtVmhaR1Z5TG5KbFlXUk5aWE56WVdkbEtIWmhiSFZsTEhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVDNCMGFXOXVjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEVTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFEyeHBaVzUwVTNSeVpXRnRhVzVuS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdOanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlRaWEoyWlhKVGRISmxZVzFwYm1jb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbFlXUmxjaTV6YTJsd1JtbGxiR1FvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JYTm5PMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQnlaWFIxY200Z2V5RlZhVzUwT0VGeWNtRjVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJSGR5YVhSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWZHlhWFJsY2lncE8xeHVJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNU2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXlLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F5TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJRE1zWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlBjSFJwYjI1ektDazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZOWlhOellXZGxLRnh1SUNBZ0lDQWdOQ3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0ExS1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTlN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRFlzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCdVlXMWxJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdVoyVjBUbUZ0WlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBiMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFNWhiV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VG1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YUdGelRtRnRaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JR2x1Y0hWMFgzUjVjR1VnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW5aWFJKYm5CMWRGUjVjR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzV6WlhSSmJuQjFkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVNXNXdkWFJVZVhCbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01pd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVvWVhOSmJuQjFkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCdmRYUndkWFJmZEhsd1pTQTlJRE03WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFOTFkSEIxZEZSNWNHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z015d2dYQ0pjSWlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNXpaWFJQZFhSd2RYUlVlWEJsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2s5MWRIQjFkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBekxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWhoYzA5MWRIQjFkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBektTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lFMWxkR2h2WkU5d2RHbHZibk1nYjNCMGFXOXVjeUE5SURRN1hHNGdLaUJBY21WMGRYSnVJSHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbWRsZEU5d2RHbHZibk1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHMvY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk45SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TENBMEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9jSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjhkVzVrWldacGJtVmtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG5ObGRFOXdkR2x2Ym5NZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTBMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0J0WlhOellXZGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc4dWNISnZkRzkwZVhCbExtTnNaV0Z5VDNCMGFXOXVjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlBjSFJwYjI1ektIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGJ5NXdjbTkwYjNSNWNHVXVhR0Z6VDNCMGFXOXVjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQmpiR2xsYm5SZmMzUnlaV0Z0YVc1bklEMGdOVHRjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzh1Y0hKdmRHOTBlWEJsTG1kbGRFTnNhV1Z1ZEZOMGNtVmhiV2x1WnlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFVzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSRVpYTmpjbWx3ZEc5eVVISnZkRzk5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1JHVnpZM0pwY0hSdmNsQnliM1J2TG5CeWIzUnZkSGx3WlM1elpYUkRiR2xsYm5SVGRISmxZVzFwYm1jZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRVJsYzJOeWFYQjBiM0pRY205MGIzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJFWlhOamNtbHdkRzl5VUhKdmRHOHVjSEp2ZEc5MGVYQmxMbU5zWldGeVEyeHBaVzUwVTNSeVpXRnRhVzVuSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTlN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNW9ZWE5EYkdsbGJuUlRkSEpsWVcxcGJtY2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTFLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z2MyVnlkbVZ5WDNOMGNtVmhiV2x1WnlBOUlEWTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZMbkJ5YjNSdmRIbHdaUzVuWlhSVFpYSjJaWEpUZEhKbFlXMXBibWNnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQTJMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrUkdWelkzSnBjSFJ2Y2xCeWIzUnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieTV3Y205MGIzUjVjR1V1YzJWMFUyVnlkbVZ5VTNSeVpXRnRhVzVuSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTJMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUkVaWE5qY21sd2RHOXlVSEp2ZEc5OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xObGNuWmxjbE4wY21WaGJXbHVaeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFlzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFUmxjMk55YVhCMGIzSlFjbTkwYnk1d2NtOTBiM1I1Y0dVdWFHRnpVMlZ5ZG1WeVUzUnlaV0Z0YVc1bklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05pa2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNtVndaV0YwWldSR2FXVnNaSE5mSUQwZ1d6azVPVjA3WEc1Y2JseHVYRzVwWmlBb2FuTndZaTVOWlhOellXZGxMa2RGVGtWU1FWUkZYMVJQWDA5Q1NrVkRWQ2tnZTF4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHOWlhbVZqZENCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJSEJ5YjNSdkxseHVJQ29nUm1sbGJHUWdibUZ0WlhNZ2RHaGhkQ0JoY21VZ2NtVnpaWEoyWldRZ2FXNGdTbUYyWVZOamNtbHdkQ0JoYm1RZ2QybHNiQ0JpWlNCeVpXNWhiV1ZrSUhSdklIQmlYMjVoYldVdVhHNGdLaUJQY0hScGIyNWhiQ0JtYVdWc1pITWdkR2hoZENCaGNtVWdibTkwSUhObGRDQjNhV3hzSUdKbElITmxkQ0IwYnlCMWJtUmxabWx1WldRdVhHNGdLaUJVYnlCaFkyTmxjM01nWVNCeVpYTmxjblpsWkNCbWFXVnNaQ0IxYzJVc0lHWnZieTV3WWw4OGJtRnRaVDRzSUdWbkxDQm1iMjh1Y0dKZlpHVm1ZWFZzZEM1Y2JpQXFJRVp2Y2lCMGFHVWdiR2x6ZENCdlppQnlaWE5sY25abFpDQnVZVzFsY3lCd2JHVmhjMlVnYzJWbE9seHVJQ29nSUNBZ0lHNWxkQzl3Y205MGJ6SXZZMjl0Y0dsc1pYSXZhbk12YVc1MFpYSnVZV3d2WjJWdVpYSmhkRzl5TG1OakkydExaWGwzYjNKa0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVQWDBnYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQjNhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVWdkR2hsWEc0Z0tpQWdJQ0FnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2FtRjJZVkJoWTJ0aFoyVTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdwaGRtRlBkWFJsY2tOc1lYTnpibUZ0WlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0E0S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdhbUYyWVUxMWJIUnBjR3hsUm1sc1pYTTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREV3TENCbVlXeHpaU2tzWEc0Z0lDQWdhbUYyWVVkbGJtVnlZWFJsUlhGMVlXeHpRVzVrU0dGemFEb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a0tHMXpaeXdnTWpBcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JxWVhaaFUzUnlhVzVuUTJobFkydFZkR1k0T2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeU55d2dabUZzYzJVcExGeHVJQ0FnSUc5d2RHbHRhWHBsUm05eU9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRGtzSURFcExGeHVJQ0FnSUdkdlVHRmphMkZuWlRvZ0tHWWdQU0JxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JYTm5MQ0F4TVNrcElEMDlJRzUxYkd3Z1B5QjFibVJsWm1sdVpXUWdPaUJtTEZ4dUlDQWdJR05qUjJWdVpYSnBZMU5sY25acFkyVnpPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F4Tml3Z1ptRnNjMlVwTEZ4dUlDQWdJR3BoZG1GSFpXNWxjbWxqVTJWeWRtbGpaWE02SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURFM0xDQm1ZV3h6WlNrc1hHNGdJQ0FnY0hsSFpXNWxjbWxqVTJWeWRtbGpaWE02SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURFNExDQm1ZV3h6WlNrc1hHNGdJQ0FnY0dod1IyVnVaWEpwWTFObGNuWnBZMlZ6T2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBME1pd2dabUZzYzJVcExGeHVJQ0FnSUdSbGNISmxZMkYwWldRNklHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2h0YzJjc0lESXpMQ0JtWVd4elpTa3NYRzRnSUNBZ1kyTkZibUZpYkdWQmNtVnVZWE02SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURNeExDQjBjblZsS1N4Y2JpQWdJQ0J2WW1walEyeGhjM05RY21WbWFYZzZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z016WXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCamMyaGhjbkJPWVcxbGMzQmhZMlU2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dNemNwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnpkMmxtZEZCeVpXWnBlRG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQXpPU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lIQm9jRU5zWVhOelVISmxabWw0T2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRFF3S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdjR2h3VG1GdFpYTndZV05sT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRFF4S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdjR2h3VFdWMFlXUmhkR0ZPWVcxbGMzQmhZMlU2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxelp5d2dORFFwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQnlkV0o1VUdGamEyRm5aVG9nS0dZZ1BTQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYlhObkxDQTBOU2twSUQwOUlHNTFiR3dnUHlCMWJtUmxabWx1WldRZ09pQm1MRnh1SUNBZ0lIVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBSWGgwWlc1emFXOXVLQzhxS2lCQWRIbHdaU0I3SVdwemNHSXVUV1Z6YzJGblpYMGdLaThnS0cxelp5a3NJRzlpYWl4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpeGNiaUFnSUNBZ0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrN1hHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRXBoZG1GUVlXTnJZV2RsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdPRHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTbUYyWVU5MWRHVnlRMnhoYzNOdVlXMWxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01UQTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNtRjJZVTExYkhScGNHeGxSbWxzWlhNb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0F5TURwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJLWVhaaFIyVnVaWEpoZEdWRmNYVmhiSE5CYm1SSVlYTm9LSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01qYzZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFNtRjJZVk4wY21sdVowTm9aV05yVlhSbU9DaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURrNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVUM0IwYVcxcGVtVk5iMlJsZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JGYm5WdEtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFOXdkR2x0YVhwbFJtOXlLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ01URTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFZHZVR0ZqYTJGblpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURFMk9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkNiMjlzS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEVOalIyVnVaWEpwWTFObGNuWnBZMlZ6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNVGM2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTbUYyWVVkbGJtVnlhV05UWlhKMmFXTmxjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElERTRPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRGQjVSMlZ1WlhKcFkxTmxjblpwWTJWektIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTkRJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUdod1IyVnVaWEpwWTFObGNuWnBZMlZ6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNak02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBSR1Z3Y21WallYUmxaQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JDYjI5c0tDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFTmpSVzVoWW14bFFYSmxibUZ6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNelk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrVTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRTlpYW1ORGJHRnpjMUJ5WldacGVDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURNM09seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRGMyaGhjbkJPWVcxbGMzQmhZMlVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQXpPVHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVM2RwWm5SUWNtVm1hWGdvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBNRHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVR2h3UTJ4aGMzTlFjbVZtYVhnb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EwTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvY21WaFpHVnlMbkpsWVdSVGRISnBibWNvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVUdod1RtRnRaWE53WVdObEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTkRRNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZCb2NFMWxkR0ZrWVhSaFRtRnRaWE53WVdObEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTkRVNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5Mbk5sZEZKMVlubFFZV05yWVdkbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnT1RrNU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnYW5Od1lpNU5aWE56WVdkbExuSmxZV1JDYVc1aGNubEZlSFJsYm5OcGIyNG9iWE5uTENCeVpXRmtaWElzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUkZlSFJsYm5OcGIyNHBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWTjBjbWx1WnloY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dPQ2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnT0N4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNVEFwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4TUN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNakFwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F5TUN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNamNwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F5Tnl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVUM0IwYVcxcGVtVk5iMlJsZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURrcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVVZ1ZFcwb1hHNGdJQ0FnSUNBNUxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREV4S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBeE1TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVRZcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeE5peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVRjcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeE55eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVRncEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeE9DeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTkRJcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBME1peGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTWpNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeU15eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXpFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBek1TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F6TmlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVM1J5YVc1bktGeHVJQ0FnSUNBZ016WXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXpjcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lETTNMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNNUtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZUZEhKcGJtY29YRzRnSUNBZ0lDQXpPU3hjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBME1Da3BPMXh1SUNCcFppQW9aaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVTNSeWFXNW5LRnh1SUNBZ0lDQWdOREFzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z05ERXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJRFF4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEUTBLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0EwTkN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQTBOU2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTkRVc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnT1RrNUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVSWGgwWlc1emFXOXVjeWh0WlhOellXZGxMQ0IzY21sMFpYSXNYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFaVzUxYlNCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVUM0IwYVcxcGVtVk5iMlJsSUQwZ2UxeHVJQ0JUVUVWRlJEb2dNU3hjYmlBZ1EwOUVSVjlUU1ZwRk9pQXlMRnh1SUNCTVNWUkZYMUpWVGxSSlRVVTZJRE5jYm4wN1hHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHcGhkbUZmY0dGamEyRm5aU0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBTbUYyWVZCaFkydGhaMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwU21GMllWQmhZMnRoWjJVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2twaGRtRlFZV05yWVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBwaGRtRlFZV05yWVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z01Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ2FtRjJZVjl2ZFhSbGNsOWpiR0Z6YzI1aGJXVWdQU0E0TzF4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFcGhkbUZQZFhSbGNrTnNZWE56Ym1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBNExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUktZWFpoVDNWMFpYSkRiR0Z6YzI1aGJXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURnc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrcGhkbUZQZFhSbGNrTnNZWE56Ym1GdFpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEZ3NJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhOS1lYWmhUM1YwWlhKRGJHRnpjMjVoYldVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBNEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnYW1GMllWOXRkV3gwYVhCc1pWOW1hV3hsY3lBOUlERXdPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSS1lYWmhUWFZzZEdsd2JHVkdhV3hsY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREV3TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFcGhkbUZOZFd4MGFYQnNaVVpwYkdWeklEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4TUN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVNtRjJZVTExYkhScGNHeGxSbWxzWlhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeE1Dd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBwaGRtRk5kV3gwYVhCc1pVWnBiR1Z6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTVRBcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ltOXZiQ0JxWVhaaFgyZGxibVZ5WVhSbFgyVnhkV0ZzYzE5aGJtUmZhR0Z6YUNBOUlESXdPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSS1lYWmhSMlZ1WlhKaGRHVkZjWFZoYkhOQmJtUklZWE5vSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNakFzSUdaaGJITmxLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFNtRjJZVWRsYm1WeVlYUmxSWEYxWVd4elFXNWtTR0Z6YUNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNakFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2twaGRtRkhaVzVsY21GMFpVVnhkV0ZzYzBGdVpFaGhjMmdnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F5TUN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMHBoZG1GSFpXNWxjbUYwWlVWeGRXRnNjMEZ1WkVoaGMyZ2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXlNQ2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0JpYjI5c0lHcGhkbUZmYzNSeWFXNW5YMk5vWldOclgzVjBaamdnUFNBeU56dGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwU21GMllWTjBjbWx1WjBOb1pXTnJWWFJtT0NBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREkzTENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFcGhkbUZUZEhKcGJtZERhR1ZqYTFWMFpqZ2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJM0xDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSktZWFpoVTNSeWFXNW5RMmhsWTJ0VmRHWTRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNamNzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTktZWFpoVTNSeWFXNW5RMmhsWTJ0VmRHWTRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNamNwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnVDNCMGFXMXBlbVZOYjJSbElHOXdkR2x0YVhwbFgyWnZjaUE5SURrN1hHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMazl3ZEdsdGFYcGxUVzlrWlgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSUGNIUnBiV2w2WlVadmNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxrOXdkR2x0YVhwbFRXOWtaWDBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRGtzSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVQzQjBhVzFwZW1WTmIyUmxmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFQzQjBhVzFwZW1WR2IzSWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURrc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrOXdkR2x0YVhwbFJtOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dPU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwOXdkR2x0YVhwbFJtOXlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dPU2tnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ2Y0hScGIyNWhiQ0J6ZEhKcGJtY2daMjlmY0dGamEyRm5aU0E5SURFeE8xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRWR2VUdGamEyRm5aU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwUjI5UVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5UjI5UVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVRFc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5IYjFCaFkydGhaMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F4TVNrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR05qWDJkbGJtVnlhV05mYzJWeWRtbGpaWE1nUFNBeE5qdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUTJOSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXhOaXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRFkwZGxibVZ5YVdOVFpYSjJhV05sY3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVFlzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2tOalIyVnVaWEpwWTFObGNuWnBZMlZ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVRZc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5EWTBkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREUyS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2dhbUYyWVY5blpXNWxjbWxqWDNObGNuWnBZMlZ6SUQwZ01UYzdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVwaGRtRkhaVzVsY21salUyVnlkbWxqWlhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F4Tnl3Z1ptRnNjMlVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUktZWFpoUjJWdVpYSnBZMU5sY25acFkyVnpJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeE55d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlTbUYyWVVkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREUzTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWFHRnpTbUYyWVVkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREUzS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUdKdmIyd2djSGxmWjJWdVpYSnBZMTl6WlhKMmFXTmxjeUE5SURFNE8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJRZVVkbGJtVnlhV05UWlhKMmFXTmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERTRMQ0JtWVd4elpTa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEZCNVIyVnVaWEpwWTFObGNuWnBZMlZ6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXhPQ3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5VUhsSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F4T0N3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMUI1UjJWdVpYSnBZMU5sY25acFkyVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNVGdwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQndhSEJmWjJWdVpYSnBZMTl6WlhKMmFXTmxjeUE5SURReU8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJRYUhCSFpXNWxjbWxqVTJWeWRtbGpaWE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQTBNaXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSUWFIQkhaVzVsY21salUyVnlkbWxqWlhNZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFF5TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUWFIQkhaVzVsY21salUyVnlkbWxqWlhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBME1pd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzFCb2NFZGxibVZ5YVdOVFpYSjJhV05sY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURReUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnWkdWd2NtVmpZWFJsWkNBOUlESXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTWpNc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01qTXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja1JsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F5TXl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMFJsY0hKbFkyRjBaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F5TXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR05qWDJWdVlXSnNaVjloY21WdVlYTWdQU0F6TVR0Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBRMk5GYm1GaWJHVkJjbVZ1WVhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F6TVN3Z2RISjFaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFTmpSVzVoWW14bFFYSmxibUZ6SUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpNU3dnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5UTJORmJtRmliR1ZCY21WdVlYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpNU3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwTmpSVzVoWW14bFFYSmxibUZ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXpFcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUc5aWFtTmZZMnhoYzNOZmNISmxabWw0SUQwZ016WTdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwVDJKcVkwTnNZWE56VUhKbFptbDRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lETTJMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJQWW1walEyeGhjM05RY21WbWFYZ2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURNMkxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSlBZbXBqUTJ4aGMzTlFjbVZtYVhnZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBek5pd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzA5aWFtTkRiR0Z6YzFCeVpXWnBlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRE0yS1NBaFBTQnVkV3hzTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUc5d2RHbHZibUZzSUhOMGNtbHVaeUJqYzJoaGNuQmZibUZ0WlhOd1lXTmxJRDBnTXpjN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBRM05vWVhKd1RtRnRaWE53WVdObElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNM0xDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUkRjMmhoY25CT1lXMWxjM0JoWTJVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE0zTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXeGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRGMyaGhjbkJPWVcxbGMzQmhZMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6Tnl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjME56YUdGeWNFNWhiV1Z6Y0dGalpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lETTNLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnpkMmxtZEY5d2NtVm1hWGdnUFNBek9UdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJUZDJsbWRGQnlaV1pwZUNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F6T1N3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFUzZHBablJRY21WbWFYZ2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURNNUxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSlRkMmxtZEZCeVpXWnBlQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE01TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWFHRnpVM2RwWm5SUWNtVm1hWGdnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNoMGFHbHpMQ0F6T1NrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnY0dod1gyTnNZWE56WDNCeVpXWnBlQ0E5SURRd08xeHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRkJvY0VOc1lYTnpVSEpsWm1sNElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURRd0xDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUlFhSEJEYkdGemMxQnlaV1pwZUNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOREFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xCb2NFTnNZWE56VUhKbFptbDRJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOREFzSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTlFhSEJEYkdGemMxQnlaV1pwZUNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURRd0tTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCd2FIQmZibUZ0WlhOd1lXTmxJRDBnTkRFN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBVR2h3VG1GdFpYTndZV05sSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFF4TENCY0lsd2lLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSUWFIQk9ZVzFsYzNCaFkyVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURReExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSlFhSEJPWVcxbGMzQmhZMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTVN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sc1pVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMUJvY0U1aGJXVnpjR0ZqWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURReEtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lITjBjbWx1WnlCd2FIQmZiV1YwWVdSaGRHRmZibUZ0WlhOd1lXTmxJRDBnTkRRN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBVR2h3VFdWMFlXUmhkR0ZPWVcxbGMzQmhZMlVnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dORFFzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEZCb2NFMWxkR0ZrWVhSaFRtRnRaWE53WVdObElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTkN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVVHaHdUV1YwWVdSaGRHRk9ZVzFsYzNCaFkyVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTBOQ3dnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMxQm9jRTFsZEdGa1lYUmhUbUZ0WlhOd1lXTmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dORFFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYzNSeWFXNW5JSEoxWW5sZmNHRmphMkZuWlNBOUlEUTFPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbHNaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEZKMVlubFFZV05yWVdkbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UzTjBjbWx1WjMwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURRMUxDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUlNkV0o1VUdGamEyRm5aU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05EVXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhjbEoxWW5sUVlXTnJZV2RsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTkRVc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5TZFdKNVVHRmphMkZuWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURRMUtTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNGdkVzVwYm5SbGNuQnlaWFJsWkY5dmNIUnBiMjRnUFNBNU9UazdYRzRnS2lCQWNtVjBkWEp1SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacGJHVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbGV5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNBcUx5QW9YRzRnSUNBZ2FuTndZaTVOWlhOellXZGxMbWRsZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMQ0E1T1RrcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR3aGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjQrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVd4bFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwYkdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09UazVMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0OWZTQnZjSFJmZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV3hsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBiR1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMEtGdGRLVHRjYm4wN1hHNWNibHh1WEc0dktpcGNiaUFxSUV4cGMzUWdiMllnY21Wd1pXRjBaV1FnWm1sbGJHUnpJSGRwZEdocGJpQjBhR2x6SUcxbGMzTmhaMlVnZEhsd1pTNWNiaUFxSUVCd2NtbDJZWFJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjFjYmlBcUlFQmpiMjV6ZEZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3prNU9WMDdYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11ZEc5UFltcGxZM1FvYjNCMFgybHVZMngxWkdWSmJuTjBZVzVqWlN3Z2RHaHBjeWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTNSaGRHbGpJSFpsY25OcGIyNGdiMllnZEdobElIdEFjMlZsSUhSdlQySnFaV04wZlNCdFpYUm9iMlF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OGRXNWtaV1pwYm1Wa2ZTQnBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxYRzRnS2lBZ0lDQWdkR2hsSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JXVnpjMkZuWlZObGRGZHBjbVZHYjNKdFlYUTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJREVzSUdaaGJITmxLU3hjYmlBZ0lDQnViMU4wWVc1a1lYSmtSR1Z6WTNKcGNIUnZja0ZqWTJWemMyOXlPaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2JYTm5MQ0F5TENCbVlXeHpaU2tzWEc0Z0lDQWdaR1Z3Y21WallYUmxaRG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTXl3Z1ptRnNjMlVwTEZ4dUlDQWdJRzFoY0VWdWRISjVPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSQ2IyOXNaV0Z1Um1sbGJHUW9iWE5uTENBM0tTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnZFc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTbGNiaUFnZlR0Y2JseHVJQ0JxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSRmVIUmxibk5wYjI0b0x5b3FJRUIwZVhCbElIc2hhbk53WWk1TlpYTnpZV2RsZlNBcUx5QW9iWE5uS1N3Z2IySnFMRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk1zSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdhVzVqYkhWa1pVbHVjM1JoYm1ObEtUdGNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5OOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVNBOUlHWjFibU4wYVc5dUtHSjVkR1Z6S1NCN1hHNGdJSFpoY2lCeVpXRmtaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxTWldGa1pYSW9ZbmwwWlhNcE8xeHVJQ0IyWVhJZ2JYTm5JRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN6dGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElvYlhObkxDQnlaV0ZrWlhJcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFUmxjMlZ5YVdGc2FYcGxjeUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwSUdaeWIyMGdkR2hsWEc0Z0tpQm5hWFpsYmlCeVpXRmtaWElnYVc1MGJ5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk45SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbTl2YkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSTlpYTnpZV2RsVTJWMFYybHlaVVp2Y20xaGRDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNoeVpXRmtaWEl1Y21WaFpFSnZiMndvS1NrN1hHNGdJQ0FnSUNCdGMyY3VjMlYwVG05VGRHRnVaR0Z5WkVSbGMyTnlhWEIwYjNKQlkyTmxjM052Y2loMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRE02WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBSR1Z3Y21WallYUmxaQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElEYzZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRXRndSVzUwY25rb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0E1T1RrNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNDdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0JxYzNCaUxrMWxjM05oWjJVdWNtVmhaRUpwYm1GeWVVVjRkR1Z1YzJsdmJpaHRjMmNzSUhKbFlXUmxjaXhjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG1WNGRHVnVjMmx2Ym5OQ2FXNWhjbmtzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFVjRkR1Z1YzJsdmJpazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURFcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0F5S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNeWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRE1zWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEY3BLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQTNMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUcxbGMzTmhaMlV1WjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkpsY0dWaGRHVmtUV1Z6YzJGblpTaGNiaUFnSUNBZ0lEazVPU3hjYmlBZ0lDQWdJR1lzWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2x4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnYW5Od1lpNU5aWE56WVdkbExuTmxjbWxoYkdsNlpVSnBibUZ5ZVVWNGRHVnVjMmx2Ym5Nb2JXVnpjMkZuWlN3Z2QzSnBkR1Z5TEZ4dUlDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCdFpYTnpZV2RsWDNObGRGOTNhWEpsWDJadmNtMWhkQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEUxbGMzTmhaMlZUWlhSWGFYSmxSbTl5YldGMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z1ptRnNjMlVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSTlpYTnpZV2RsVTJWMFYybHlaVVp2Y20xaGRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5VFdWemMyRm5aVk5sZEZkcGNtVkdiM0p0WVhRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelRXVnpjMkZuWlZObGRGZHBjbVZHYjNKdFlYUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQXhLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJR0p2YjJ3Z2JtOWZjM1JoYm1SaGNtUmZaR1Z6WTNKcGNIUnZjbDloWTJObGMzTnZjaUE5SURJN1hHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEU1dlUzUmhibVJoY21SRVpYTmpjbWx3ZEc5eVFXTmpaWE56YjNJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F5TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEU1dlUzUmhibVJoY21SRVpYTmpjbWx3ZEc5eVFXTmpaWE56YjNJZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhjazV2VTNSaGJtUmhjbVJFWlhOamNtbHdkRzl5UVdOalpYTnpiM0lnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F5TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVhR0Z6VG05VGRHRnVaR0Z5WkVSbGMyTnlhWEIwYjNKQlkyTmxjM052Y2lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURJcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ltOXZiQ0JrWlhCeVpXTmhkR1ZrSUQwZ016dGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYTnpZV2RsVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1Z6YzJGblpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5UkdWd2NtVmpZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURNc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhORVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z015a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmliMjlzSUcxaGNGOWxiblJ5ZVNBOUlEYzdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFMWhjRVZ1ZEhKNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBRbTl2YkdWaGJrWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTnl3Z1ptRnNjMlVwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSTllYQkZiblJ5ZVNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dOeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm5aVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVnpjMkZuWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUV0Z3Ulc1MGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTNMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWFHRnpUV0Z3Ulc1MGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2gwYUdsekxDQTNLU0FoUFNCdWRXeHNPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRnZFc1cGJuUmxjbkJ5WlhSbFpGOXZjSFJwYjI0Z1BTQTVPVGs3WEc0Z0tpQkFjbVYwZFhKdUlIc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UG4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQTVPVGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWE56WVdkbFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsYzNOaFoyVlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2dPVGs1TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNDlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhOellXZGxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJRzl3ZEY5MllXeDFaU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGMzTmhaMlZQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxjM05oWjJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhjbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbk5sZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dVhHNHZLaXBjYmlBcUlFeHBjM1FnYjJZZ2NtVndaV0YwWldRZ1ptbGxiR1J6SUhkcGRHaHBiaUIwYUdseklHMWxjM05oWjJVZ2RIbHdaUzVjYmlBcUlFQndjbWwyWVhSbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4xY2JpQXFJRUJqYjI1emRGeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5KbGNHVmhkR1ZrUm1sbGJHUnpYeUE5SUZzNU9UbGRPMXh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5SdlQySnFaV04wSUQwZ1puVnVZM1JwYjI0b2FXNWpiSFZrWlVsdWMzUmhibU5sTENCdGMyY3BJSHRjYmlBZ2RtRnlJR1lzSUc5aWFpQTlJSHRjYmlBZ0lDQmpkSGx3WlRvZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhMQ0F3S1N4Y2JpQWdJQ0J3WVdOclpXUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pDaHRjMmNzSURJcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0JxYzNSNWNHVTZJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTml3Z01Da3NYRzRnSUNBZ2JHRjZlVG9nYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtHMXpaeXdnTlN3Z1ptRnNjMlVwTEZ4dUlDQWdJR1JsY0hKbFkyRjBaV1E2SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaHRjMmNzSURNc0lHWmhiSE5sS1N4Y2JpQWdJQ0IzWldGck9pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXhNQ3dnWm1Gc2MyVXBMRnh1SUNBZ0lIVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBSWGgwWlc1emFXOXVLQzhxS2lCQWRIbHdaU0I3SVdwemNHSXVUV1Z6YzJGblpYMGdLaThnS0cxelp5a3NJRzlpYWl4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11WlhoMFpXNXphVzl1Y3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdhVzVqYkhWa1pVbHVjM1JoYm1ObEtUdGNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvWW5sMFpYTXBJSHRjYmlBZ2RtRnlJSEpsWVdSbGNpQTlJRzVsZHlCcWMzQmlMa0pwYm1GeWVWSmxZV1JsY2loaWVYUmxjeWs3WEc0Z0lIWmhjaUJ0YzJjZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjenRjYmlBZ2NtVjBkWEp1SUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S0cxelp5d2djbVZoWkdWeUtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1NCbWNtOXRJSFJvWlZ4dUlDb2daMmwyWlc0Z2NtVmhaR1Z5SUdsdWRHOGdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdiMkpxWldOMExseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjMzBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxrTlVlWEJsZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JGYm5WdEtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFTjBlWEJsS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlFZV05yWldRb2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0EyT2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NUtVMVI1Y0dWOUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVWdWRXMG9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBTbk4wZVhCbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTlRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJNWVhwNUtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJFWlhCeVpXTmhkR1ZrS0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNVEE2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWMlZoYXloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRGs1T1RwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqdGNiaUFnSUNBZ0lISmxZV1JsY2k1eVpXRmtUV1Z6YzJGblpTaDJZV3gxWlN4d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElwTzF4dUlDQWdJQ0FnYlhObkxtRmtaRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1eVpXRmtRbWx1WVhKNVJYaDBaVzV6YVc5dUtHMXpaeXdnY21WaFpHVnlMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua3NYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBSWGgwWlc1emFXOXVLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5S0hSb2FYTXNJSGR5YVhSbGNpazdYRzRnSUhKbGRIVnliaUIzY21sMFpYSXVaMlYwVW1WemRXeDBRblZtWm1WeUtDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpWeHVJQ29nWm05eWJXRjBLU3dnZDNKcGRHbHVaeUIwYnlCMGFHVWdaMmwyWlc0Z1FtbHVZWEo1VjNKcGRHVnlMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ2JXVnpjMkZuWlZ4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxYY21sMFpYSjlJSGR5YVhSbGNseHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NURWSGx3WlgwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBeEtTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZGYm5WdEtGeHVJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTWlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxRbTl2YkNoY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVLVTFSNWNHVjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFJXNTFiU2hjYmlBZ0lDQWdJRFlzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEVXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQTFMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodFpYTnpZV2RsTENBektTazdYRzRnSUdsbUlDaG1JQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQjNjbWwwWlhJdWQzSnBkR1ZDYjI5c0tGeHVJQ0FnSUNBZ015eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTVRBcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUp2YjJ3b1hHNGdJQ0FnSUNBeE1DeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBNU9Ua3NYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxGZUhSbGJuTnBiMjV6S0cxbGMzTmhaMlVzSUhkeWFYUmxjaXhjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUdWdWRXMGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1RFZIbHdaU0E5SUh0Y2JpQWdVMVJTU1U1SE9pQXdMRnh1SUNCRFQxSkVPaUF4TEZ4dUlDQlRWRkpKVGtkZlVFbEZRMFU2SURKY2JuMDdYRzVjYmk4cUtseHVJQ29nUUdWdWRXMGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1S1UxUjVjR1VnUFNCN1hHNGdJRXBUWDA1UFVrMUJURG9nTUN4Y2JpQWdTbE5mVTFSU1NVNUhPaUF4TEZ4dUlDQktVMTlPVlUxQ1JWSTZJREpjYm4wN1hHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dRMVI1Y0dVZ1kzUjVjR1VnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11UTFSNWNHVjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRU4wZVhCbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxrTlVlWEJsZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTVN3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVRMVI1Y0dWOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVOMGVYQmxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1amJHVmhja04wZVhCbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVvWVhORGRIbHdaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQndZV05yWldRZ1BTQXlPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFVHRmphMlZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRGQmhZMnRsWkNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNaXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKUVlXTnJaV1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F5TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMUJoWTJ0bFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dTbE5VZVhCbElHcHpkSGx3WlNBOUlEWTdYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1S1UxUjVjR1Y5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVwemRIbHdaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTVLVTFSNWNHVjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQTJMQ0F3S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1S1UxUjVjR1Y5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRXB6ZEhsd1pTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTml3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSktjM1I1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBMkxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBwemRIbHdaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFlwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnWW05dmJDQnNZWHA1SUQwZ05UdGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEV4aGVua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBMUxDQm1ZV3h6WlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVEdGNmVTQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTlN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ1ptbGxiR1FnYldGcmFXNW5JR2wwSUhWdVpHVm1hVzVsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1JQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSk1ZWHA1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTlN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNW9ZWE5NWVhwNUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05Ta2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQmliMjlzSUdSbGNISmxZMkYwWldRZ1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNXpaWFJFWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXpMQ0IyWVd4MVpTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JtYVdWc1pDQnRZV3RwYm1jZ2FYUWdkVzVrWldacGJtVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5OOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWpiR1ZoY2tSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBekxDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBektTQWhQU0J1ZFd4c08xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnZDJWaGF5QTlJREV3TzF4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBWMlZoYXlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJREV3TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxsYkdSUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBWMlZoYXlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNVEFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVYyVmhheUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREV3TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVHYVdWc1pFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtaGhjMWRsWVdzZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBeE1Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVJSFZ1YVc1MFpYSndjbVYwWldSZmIzQjBhVzl1SUQwZ09UazVPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1R2FXVnNaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymo1OUlDb3ZJQ2hjYmlBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRzSURrNU9Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymo1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWMzMGdjbVYwZFhKdWN5QjBhR2x6WEc0cUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRGs1T1N3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNWhaR1JWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1SUQwZ1puVnVZM1JwYjI0b2IzQjBYM1poYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURrNU9Td2diM0IwWDNaaGJIVmxMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpd2diM0IwWDJsdVpHVjRLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUd4cGMzUWdiV0ZyYVc1bklHbDBJR1Z0Y0hSNUlHSjFkQ0J1YjI0dGJuVnNiQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENoYlhTazdYRzU5TzF4dVhHNWNibHh1THlvcVhHNGdLaUJNYVhOMElHOW1JSEpsY0dWaGRHVmtJR1pwWld4a2N5QjNhWFJvYVc0Z2RHaHBjeUJ0WlhOellXZGxJSFI1Y0dVdVhHNGdLaUJBY0hKcGRtRjBaU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlYRzRnS2lCQVkyOXVjM1JjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NXlaWEJsWVhSbFpFWnBaV3hrYzE4Z1BTQmJPVGs1WFR0Y2JseHVYRzVjYm1sbUlDaHFjM0JpTGsxbGMzTmhaMlV1UjBWT1JWSkJWRVZmVkU5ZlQwSktSVU5VS1NCN1hHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lXNGdiMkpxWldOMElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nY0hKdmRHOHVYRzRnS2lCR2FXVnNaQ0J1WVcxbGN5QjBhR0YwSUdGeVpTQnlaWE5sY25abFpDQnBiaUJLWVhaaFUyTnlhWEIwSUdGdVpDQjNhV3hzSUdKbElISmxibUZ0WldRZ2RHOGdjR0pmYm1GdFpTNWNiaUFxSUU5d2RHbHZibUZzSUdacFpXeGtjeUIwYUdGMElHRnlaU0J1YjNRZ2MyVjBJSGRwYkd3Z1ltVWdjMlYwSUhSdklIVnVaR1ZtYVc1bFpDNWNiaUFxSUZSdklHRmpZMlZ6Y3lCaElISmxjMlZ5ZG1Wa0lHWnBaV3hrSUhWelpTd2dabTl2TG5CaVh6eHVZVzFsUGl3Z1pXY3NJR1p2Ynk1d1lsOWtaV1poZFd4MExseHVJQ29nUm05eUlIUm9aU0JzYVhOMElHOW1JSEpsYzJWeWRtVmtJRzVoYldWeklIQnNaV0Z6WlNCelpXVTZYRzRnS2lBZ0lDQWdibVYwTDNCeWIzUnZNaTlqYjIxd2FXeGxjaTlxY3k5cGJuUmxjbTVoYkM5blpXNWxjbUYwYjNJdVkyTWphMHRsZVhkdmNtUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzQ5ZlNCdmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJSGRvWlhSb1pYSWdkRzhnYVc1amJIVmtaU0IwYUdWY2JpQXFJQ0FnSUNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEpsZEhWeWJpQjdJVTlpYW1WamRIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnZFc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTbGNiaUFnZlR0Y2JseHVJQ0JxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSRmVIUmxibk5wYjI0b0x5b3FJRUIwZVhCbElIc2hhbk53WWk1TlpYTnpZV2RsZlNBcUx5QW9iWE5uS1N3Z2IySnFMRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NWxlSFJsYm5OcGIyNXpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI0c1hHNGdJQ0FnSUNCcGJtTnNkV1JsU1c1emRHRnVZMlVwTzF4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ek8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGs5dVpXOW1UM0IwYVc5dWN5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1emZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ09UazVPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnYm1WM0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TzF4dUlDQWdJQ0FnY21WaFpHVnlMbkpsWVdSTlpYTnpZV2RsS0haaGJIVmxMSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpazdYRzRnSUNBZ0lDQnRjMmN1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2FuTndZaTVOWlhOellXZGxMbkpsWVdSQ2FXNWhjbmxGZUhSbGJuTnBiMjRvYlhObkxDQnlaV0ZrWlhJc1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdVpYaDBaVzV6YVc5dWMwSnBibUZ5ZVN4Y2JpQWdJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl1Wlc5bVQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRmVIUmxibk5wYjI0cE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSW9kR2hwY3l3Z2QzSnBkR1Z5S1R0Y2JpQWdjbVYwZFhKdUlIZHlhWFJsY2k1blpYUlNaWE4xYkhSQ2RXWm1aWElvS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsWEc0Z0tpQm1iM0p0WVhRcExDQjNjbWwwYVc1bklIUnZJSFJvWlNCbmFYWmxiaUJDYVc1aGNubFhjbWwwWlhJdVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQyNWxiMlpQY0hScGIyNXpmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1UGJtVnZaazl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBLQ2s3WEc0Z0lHbG1JQ2htTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlNaWEJsWVhSbFpFMWxjM05oWjJVb1hHNGdJQ0FnSUNBNU9Ua3NYRzRnSUNBZ0lDQm1MRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR3B6Y0dJdVRXVnpjMkZuWlM1elpYSnBZV3hwZW1WQ2FXNWhjbmxGZUhSbGJuTnBiMjV6S0cxbGMzTmhaMlVzSUhkeWFYUmxjaXhjYmlBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDI1bGIyWlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVQYm1WdlprOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRVY0ZEdWdWMybHZiaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlCMWJtbHVkR1Z5Y0hKbGRHVmtYMjl3ZEdsdmJpQTlJRGs1T1R0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUMjVsYjJaUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnTHlvcUlFQjBlWEJsZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0FxTHlBb1hHNGdJQ0FnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQTVPVGtwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGQmNuSmhlVHdoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNCtmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBNU9Ua3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmoxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXVaVzltVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVBibVZ2Wms5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUW9XMTBwTzF4dWZUdGNibHh1WEc1Y2JpOHFLbHh1SUNvZ1RHbHpkQ0J2WmlCeVpYQmxZWFJsWkNCbWFXVnNaSE1nZDJsMGFHbHVJSFJvYVhNZ2JXVnpjMkZuWlNCMGVYQmxMbHh1SUNvZ1FIQnlhWFpoZEdVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlZ4dUlDb2dRR052Ym5OMFhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV5WlhCbFlYUmxaRVpwWld4a2MxOGdQU0JiT1RrNVhUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1ekxuQnliM1J2ZEhsd1pTNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVBjSFJwYjI1ekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JoYkd4dmQwRnNhV0Z6T2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1FvYlhObkxDQXlLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ1pHVndjbVZqWVhSbFpEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNeXdnWm1Gc2MyVXBMRnh1SUNBZ0lIVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBSWGgwWlc1emFXOXVLQzhxS2lCQWRIbHdaU0I3SVdwemNHSXVUV1Z6YzJGblpYMGdLaThnS0cxelp5a3NJRzlpYWl4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpeGNiaUFnSUNBZ0lHbHVZMngxWkdWSmJuTjBZVzVqWlNrN1hHNGdJR2xtSUNocGJtTnNkV1JsU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J2WW1vdUpHcHpjR0pOWlhOellXZGxTVzV6ZEdGdVkyVWdQU0J0YzJjN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUc5aWFqdGNibjA3WEc1OVhHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCd1lYSmhiU0I3YW5Od1lpNUNlWFJsVTI5MWNtTmxmU0JpZVhSbGN5QlVhR1VnWW5sMFpYTWdkRzhnWkdWelpYSnBZV3hwZW1VdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25rZ1BTQm1kVzVqZEdsdmJpaGllWFJsY3lrZ2UxeHVJQ0IyWVhJZ2NtVmhaR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlLR0o1ZEdWektUdGNiaUFnZG1GeUlHMXpaeUE5SUc1bGR5QndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6ZlNCdGMyY2dWR2hsSUcxbGMzTmhaMlVnYjJKcVpXTjBJSFJ2SUdSbGMyVnlhV0ZzYVhwbElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVkpsWVdSbGNuMGdjbVZoWkdWeUlGUm9aU0JDYVc1aGNubFNaV0ZrWlhJZ2RHOGdkWE5sTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWMzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2h5WldGa1pYSXVjbVZoWkVKdmIyd29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBRV3hzYjNkQmJHbGhjeWgyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRUp2YjJ3b0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFJHVndjbVZqWVhSbFpDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURrNU9UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZianRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNXlaV0ZrUW1sdVlYSjVSWGgwWlc1emFXOXVLRzF6Wnl3Z2NtVmhaR1Z5TEZ4dUlDQWdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11WlhoMFpXNXphVzl1YzBKcGJtRnllU3hjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI0c1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBSWGgwWlc1emFXOXVLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhObk8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTNWNiaUFxSUVCeVpYUjFjbTRnZXlGVmFXNTBPRUZ5Y21GNWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjMzBnYldWemMyRm5aVnh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFhjbWwwWlhKOUlIZHlhWFJsY2x4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTWlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxRbTl2YkNoY2JpQWdJQ0FnSURJc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRE1wS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRGs1T1N4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ2FuTndZaTVOWlhOellXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVVVjRkR1Z1YzJsdmJuTW9iV1Z6YzJGblpTd2dkM0pwZEdWeUxGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6UW1sdVlYSjVMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2YmlrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z1ltOXZiQ0JoYkd4dmQxOWhiR2xoY3lBOUlESTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVGc2JHOTNRV3hwWVhNZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkNiMjlzWldGdVJtbGxiR1JYYVhSb1JHVm1ZWFZzZENoMGFHbHpMQ0F5TENCbVlXeHpaU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFRnNiRzkzUVd4cFlYTWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVqYkdWaGNrRnNiRzkzUVd4cFlYTWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YUdGelFXeHNiM2RCYkdsaGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lESXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbTl2YkNCa1pYQnlaV05oZEdWa0lEMGdNenRjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNc0lHWmhiSE5sS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWMyVjBSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFTnNaV0Z5Y3lCMGFHVWdabWxsYkdRZ2JXRnJhVzVuSUdsMElIVnVaR1ZtYVc1bFpDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1Oc1pXRnlSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRE1zSUhWdVpHVm1hVzVsWkNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb2FYTWdabWxsYkdRZ2FYTWdjMlYwTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTkVaWEJ5WldOaGRHVmtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNeWtnSVQwZ2JuVnNiRHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJ5WlhCbFlYUmxaQ0JWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1SUhWdWFXNTBaWEp3Y21WMFpXUmZiM0IwYVc5dUlEMGdPVGs1TzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymo1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0VDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVBuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Yml3Z09UazVLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVBuMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVjMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRkpsY0dWaGRHVmtWM0poY0hCbGNrWnBaV3hrS0hSb2FYTXNJRGs1T1N3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtRmtaRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRnUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnT1RrNUxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXems1T1YwN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG5SdlQySnFaV04wS0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVc0lIUm9hWE1wTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZOMFlYUnBZeUIyWlhKemFXOXVJRzltSUhSb1pTQjdRSE5sWlNCMGIwOWlhbVZqZEgwZ2JXVjBhRzlrTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZIVnVaR1ZtYVc1bFpIMGdhVzVqYkhWa1pVbHVjM1JoYm1ObElFUmxjSEpsWTJGMFpXUXVJRmRvWlhSb1pYSWdkRzhnYVc1amJIVmtaVnh1SUNvZ0lDQWdJSFJvWlNCS1UxQkNJR2x1YzNSaGJtTmxJR1p2Y2lCMGNtRnVjMmwwYVc5dVlXd2djMjk1SUhCeWIzUnZJSE4xY0hCdmNuUTZYRzRnS2lBZ0lDQWdhSFIwY0RvdkwyZHZkRzh2YzI5NUxYQmhjbUZ0TFcxcFozSmhkR2x2Ymx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk45SUcxelp5QlVhR1VnYlhObklHbHVjM1JoYm1ObElIUnZJSFJ5WVc1elptOXliUzVjYmlBcUlFQnlaWFIxY200Z2V5RlBZbXBsWTNSOVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9hVzVqYkhWa1pVbHVjM1JoYm1ObExDQnRjMmNwSUh0Y2JpQWdkbUZ5SUdZc0lHOWlhaUE5SUh0Y2JpQWdJQ0JrWlhCeVpXTmhkR1ZrT2lCcWMzQmlMazFsYzNOaFoyVXVaMlYwUW05dmJHVmhia1pwWld4a1YybDBhRVJsWm1GMWJIUW9iWE5uTENBeExDQm1ZV3h6WlNrc1hHNGdJQ0FnZFc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUTZJR3B6Y0dJdVRXVnpjMkZuWlM1MGIwOWlhbVZqZEV4cGMzUW9iWE5uTG1kbGRGVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTbGNiaUFnZlR0Y2JseHVJQ0JxYzNCaUxrMWxjM05oWjJVdWRHOVBZbXBsWTNSRmVIUmxibk5wYjI0b0x5b3FJRUIwZVhCbElIc2hhbk53WWk1TlpYTnpZV2RsZlNBcUx5QW9iWE5uS1N3Z2IySnFMRnh1SUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk11WlhoMFpXNXphVzl1Y3l3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2s3WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk45WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1SUQwZ1puVnVZM1JwYjI0b1lubDBaWE1wSUh0Y2JpQWdkbUZ5SUhKbFlXUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVkpsWVdSbGNpaGllWFJsY3lrN1hHNGdJSFpoY2lCdGMyY2dQU0J1WlhjZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTTdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3k1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRaWE56WVdkbElHOWlhbVZqZENCMGJ5QmtaWE5sY21saGJHbDZaU0JwYm5SdkxseHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sU1pXRmtaWEo5SUhKbFlXUmxjaUJVYUdVZ1FtbHVZWEo1VW1WaFpHVnlJSFJ2SUhWelpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWMzMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3WW05dmJHVmhibjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtRbTl2YkNncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSRVpYQnlaV05oZEdWa0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnT1RrNU9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnYW5Od1lpNU5aWE56WVdkbExuSmxZV1JDYVc1aGNubEZlSFJsYm5OcGIyNG9iWE5uTENCeVpXRmtaWElzWEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI0c1hHNGdJQ0FnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhSRmVIUmxibk5wYjI0cE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnRjMmM3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlNCbWIzSnRZWFFwTGx4dUlDb2dRSEpsZEhWeWJpQjdJVlZwYm5RNFFYSnlZWGw5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjeTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJREVwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVSnZiMndvWEc0Z0lDQWdJQ0F4TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlHMWxjM05oWjJVdVoyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRb0tUdGNiaUFnYVdZZ0tHWXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZKbGNHVmhkR1ZrVFdWemMyRm5aU2hjYmlBZ0lDQWdJRGs1T1N4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ2FuTndZaTVOWlhOellXZGxMbk5sY21saGJHbDZaVUpwYm1GeWVVVjRkR1Z1YzJsdmJuTW9iV1Z6YzJGblpTd2dkM0pwZEdWeUxGeHVJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUZiblZ0Vm1Gc2RXVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSRmVIUmxibk5wYjI0cE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnWkdWd2NtVmpZWFJsWkNBOUlERTdYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVKdmIyeGxZVzVHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lERXNJR1poYkhObEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtWdWRXMVdZV3gxWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z01Td2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVJXNTFiVlpoYkhWbFQzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWFHRnpSR1Z3Y21WallYUmxaQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlCMWJtbHVkR1Z5Y0hKbGRHVmtYMjl3ZEdsdmJpQTlJRGs1T1R0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSVzUxYlZaaGJIVmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UG4wZ0tpOGdLRnh1SUNBZ0lHcHpjR0l1VFdWemMyRm5aUzVuWlhSU1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaXdnT1RrNUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UG4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJWWmhiSFZsVDNCMGFXOXVjMzBnY21WMGRYSnVjeUIwYUdselhHNHFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrVnVkVzFXWVd4MVpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExuTmxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJqMTlJRzl3ZEY5MllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEk5ZlNCdmNIUmZhVzVrWlhoY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbUZrWkZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0Z1BTQm1kVzVqZEdsdmJpaHZjSFJmZG1Gc2RXVXNJRzl3ZEY5cGJtUmxlQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbUZrWkZSdlVtVndaV0YwWldSWGNtRndjR1Z5Um1sbGJHUW9kR2hwY3l3Z09UazVMQ0J2Y0hSZmRtRnNkV1VzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMQ0J2Y0hSZmFXNWtaWGdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JHbHpkQ0J0WVd0cGJtY2dhWFFnWlcxd2RIa2dZblYwSUc1dmJpMXVkV3hzTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1RmJuVnRWbUZzZFdWUGNIUnBiMjV6ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z1ZFcxV1lXeDFaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbU5zWldGeVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWMyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTV5WlhCbFlYUmxaRVpwWld4a2MxOGdQU0JiT1RrNVhUdGNibHh1WEc1Y2JtbG1JQ2hxYzNCaUxrMWxjM05oWjJVdVIwVk9SVkpCVkVWZlZFOWZUMEpLUlVOVUtTQjdYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZVzRnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ2NISnZkRzh1WEc0Z0tpQkdhV1ZzWkNCdVlXMWxjeUIwYUdGMElHRnlaU0J5WlhObGNuWmxaQ0JwYmlCS1lYWmhVMk55YVhCMElHRnVaQ0IzYVd4c0lHSmxJSEpsYm1GdFpXUWdkRzhnY0dKZmJtRnRaUzVjYmlBcUlFOXdkR2x2Ym1Gc0lHWnBaV3hrY3lCMGFHRjBJR0Z5WlNCdWIzUWdjMlYwSUhkcGJHd2dZbVVnYzJWMElIUnZJSFZ1WkdWbWFXNWxaQzVjYmlBcUlGUnZJR0ZqWTJWemN5QmhJSEpsYzJWeWRtVmtJR1pwWld4a0lIVnpaU3dnWm05dkxuQmlYenh1WVcxbFBpd2daV2NzSUdadmJ5NXdZbDlrWldaaGRXeDBMbHh1SUNvZ1JtOXlJSFJvWlNCc2FYTjBJRzltSUhKbGMyVnlkbVZrSUc1aGJXVnpJSEJzWldGelpTQnpaV1U2WEc0Z0tpQWdJQ0FnYm1WMEwzQnliM1J2TWk5amIyMXdhV3hsY2k5cWN5OXBiblJsY201aGJDOW5aVzVsY21GMGIzSXVZMk1qYTB0bGVYZHZjbVF1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc0OWZTQnZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUhkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlNCMGFHVmNiaUFxSUNBZ0lDQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0c5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnY21WMGRYSnVJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWMzMGdiWE5uSUZSb1pTQnRjMmNnYVc1emRHRnVZMlVnZEc4Z2RISmhibk5tYjNKdExseHVJQ29nUUhKbGRIVnliaUI3SVU5aWFtVmpkSDFjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMblJ2VDJKcVpXTjBJRDBnWm5WdVkzUnBiMjRvYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0J0YzJjcElIdGNiaUFnZG1GeUlHWXNJRzlpYWlBOUlIdGNiaUFnSUNCa1pYQnlaV05oZEdWa09pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvYlhObkxDQXpNeXdnWm1Gc2MyVXBMRnh1SUNBZ0lIVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNU1hWE4wT2lCcWMzQmlMazFsYzNOaFoyVXVkRzlQWW1wbFkzUk1hWE4wS0cxelp5NW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BMRnh1SUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5SdlQySnFaV04wTENCcGJtTnNkV1JsU1c1emRHRnVZMlVwWEc0Z0lIMDdYRzVjYmlBZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBSWGgwWlc1emFXOXVLQzhxS2lCQWRIbHdaU0I3SVdwemNHSXVUV1Z6YzJGblpYMGdLaThnS0cxelp5a3NJRzlpYWl4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1Y3k1bGVIUmxibk5wYjI1ekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWRsZEVWNGRHVnVjMmx2Yml4Y2JpQWdJQ0FnSUdsdVkyeDFaR1ZKYm5OMFlXNWpaU2s3WEc0Z0lHbG1JQ2hwYm1Oc2RXUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnZZbW91SkdwemNHSk5aWE56WVdkbFNXNXpkR0Z1WTJVZ1BTQnRjMmM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzlpYWp0Y2JuMDdYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkVaWE5sY21saGJHbDZaWE1nWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ3WVhKaGJTQjdhbk53WWk1Q2VYUmxVMjkxY21ObGZTQmllWFJsY3lCVWFHVWdZbmwwWlhNZ2RHOGdaR1Z6WlhKcFlXeHBlbVV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTXVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWhpZVhSbGN5a2dlMXh1SUNCMllYSWdjbVZoWkdWeUlEMGdibVYzSUdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5S0dKNWRHVnpLVHRjYmlBZ2RtRnlJRzF6WnlBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk03WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1emZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJRE16T2x4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSQ2IyOXNLQ2twTzF4dUlDQWdJQ0FnYlhObkxuTmxkRVJsY0hKbFkyRjBaV1FvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTVPVGs2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0N1hHNGdJQ0FnSUNCeVpXRmtaWEl1Y21WaFpFMWxjM05oWjJVb2RtRnNkV1VzY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLVHRjYmlBZ0lDQWdJRzF6Wnk1aFpHUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnFjM0JpTGsxbGMzTmhaMlV1Y21WaFpFSnBibUZ5ZVVWNGRHVnVjMmx2YmlodGMyY3NJSEpsWVdSbGNpeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbVY0ZEdWdWMybHZibk5DYVc1aGNua3NYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJYaDBaVzV6YVc5dUxGeHVJQ0FnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVWNGRHVnVjMmx2YmlrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWElvZEdocGN5d2dkM0pwZEdWeUtUdGNiaUFnY21WMGRYSnVJSGR5YVhSbGNpNW5aWFJTWlhOMWJIUkNkV1ptWlhJb0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRaWEpwWVd4cGVtVnpJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbFhHNGdLaUJtYjNKdFlYUXBMQ0IzY21sMGFXNW5JSFJ2SUhSb1pTQm5hWFpsYmlCQ2FXNWhjbmxYY21sMFpYSXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5OOUlHMWxjM05oWjJWY2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlmU0IzY21sMFpYSmNiaUFxSUVCemRYQndjbVZ6Y3lCN2RXNTFjMlZrVEc5allXeFdZWEpwWVdKc1pYTjlJR1lnYVhNZ2IyNXNlU0IxYzJWa0lHWnZjaUJ1WlhOMFpXUWdiV1Z6YzJGblpYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHRpYjI5c1pXRnVmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRE16S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkNiMjlzS0Z4dUlDQWdJQ0FnTXpNc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnT1RrNUxGeHVJQ0FnSUNBZ1ppeGNiaUFnSUNBZ0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlYRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQnFjM0JpTGsxbGMzTmhaMlV1YzJWeWFXRnNhWHBsUW1sdVlYSjVSWGgwWlc1emFXOXVjeWh0WlhOellXZGxMQ0IzY21sMFpYSXNYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1ekxtVjRkR1Z1YzJsdmJuTkNhVzVoY25rc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVaMlYwUlhoMFpXNXphVzl1S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWIyOXNJR1JsY0hKbFkyRjBaV1FnUFNBek16dGNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VFpYSjJhV05sVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WjJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdGliMjlzWldGdWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRUp2YjJ4bFlXNUdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURNekxDQm1ZV3h6WlNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG5ObGRFUmxjSEpsWTJGMFpXUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURNekxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRaWEoyYVdObFQzQjBhVzl1YzMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUWlhKMmFXTmxUM0IwYVc5dWN5NXdjbTkwYjNSNWNHVXVZMnhsWVhKRVpYQnlaV05oZEdWa0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z016TXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJWUGNIUnBiMjV6TG5CeWIzUnZkSGx3WlM1b1lYTkVaWEJ5WldOaGRHVmtJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvZEdocGN5d2dNek1wSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnVlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2YmlCMWJtbHVkR1Z5Y0hKbGRHVmtYMjl3ZEdsdmJpQTlJRGs1T1R0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRlZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjVNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dWN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5SUNvdklDaGNiaUFnSUNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHNJRGs1T1NrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5sY25acFkyVlBjSFJwYjI1emZTQnlaWFIxY201eklIUm9hWE5jYmlvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTJWeWRtbGpaVTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEZWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0E1T1Rrc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajE5SUc5d2RGOTJZV3gxWlZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhJOWZTQnZjSFJmYVc1a1pYaGNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxObGNuWnBZMlZQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVoWkdSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUlEMGdablZ1WTNScGIyNG9iM0IwWDNaaGJIVmxMQ0J2Y0hSZmFXNWtaWGdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzVoWkdSVWIxSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lEazVPU3dnYjNCMFgzWmhiSFZsTENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaXdnYjNCMFgybHVaR1Y0S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHeHBjM1FnYldGcmFXNW5JR2wwSUdWdGNIUjVJR0oxZENCdWIyNHRiblZzYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyVnlkbWxqWlU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMlZ5ZG1salpVOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtTnNaV0Z5Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNWNiaThxS2x4dUlDb2dUR2x6ZENCdlppQnlaWEJsWVhSbFpDQm1hV1ZzWkhNZ2QybDBhR2x1SUhSb2FYTWdiV1Z6YzJGblpTQjBlWEJsTGx4dUlDb2dRSEJ5YVhaaGRHVWdleUZCY25KaGVUeHVkVzFpWlhJK2ZWeHVJQ29nUUdOdmJuTjBYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxuSmxjR1ZoZEdWa1JtbGxiR1J6WHlBOUlGczVPVGxkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ1pHVndjbVZqWVhSbFpEb2dhbk53WWk1TlpYTnpZV2RsTG1kbGRFSnZiMnhsWVc1R2FXVnNaRmRwZEdoRVpXWmhkV3gwS0cxelp5d2dNek1zSUdaaGJITmxLU3hjYmlBZ0lDQnBaR1Z0Y0c5MFpXNWplVXhsZG1Wc09pQnFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1JYYVhSb1JHVm1ZWFZzZENodGMyY3NJRE0wTENBd0tTeGNiaUFnSUNCMWJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkRG9nYW5Od1lpNU5aWE56WVdkbExuUnZUMkpxWldOMFRHbHpkQ2h0YzJjdVoyVjBWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZia3hwYzNRb0tTeGNiaUFnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTUwYjA5aWFtVmpkQ3dnYVc1amJIVmtaVWx1YzNSaGJtTmxLVnh1SUNCOU8xeHVYRzRnSUdwemNHSXVUV1Z6YzJGblpTNTBiMDlpYW1WamRFVjRkR1Z1YzJsdmJpZ3ZLaW9nUUhSNWNHVWdleUZxYzNCaUxrMWxjM05oWjJWOUlDb3ZJQ2h0YzJjcExDQnZZbW9zWEc0Z0lDQWdJQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTVsZUhSbGJuTnBiMjV6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVoyVjBSWGgwWlc1emFXOXVMRnh1SUNBZ0lDQWdhVzVqYkhWa1pVbHVjM1JoYm1ObEtUdGNiaUFnYVdZZ0tHbHVZMngxWkdWSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUc5aWFpNGthbk53WWsxbGMzTmhaMlZKYm5OMFlXNWpaU0E5SUcxelp6dGNiaUFnZlZ4dUlDQnlaWFIxY200Z2IySnFPMXh1ZlR0Y2JuMWNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FIQmhjbUZ0SUh0cWMzQmlMa0o1ZEdWVGIzVnlZMlY5SUdKNWRHVnpJRlJvWlNCaWVYUmxjeUIwYnlCa1pYTmxjbWxoYkdsNlpTNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1YzMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmloaWVYUmxjeWtnZTF4dUlDQjJZWElnY21WaFpHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVVbVZoWkdWeUtHSjVkR1Z6S1R0Y2JpQWdkbUZ5SUcxelp5QTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3p0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNVJuSnZiVkpsWVdSbGNpaHRjMmNzSUhKbFlXUmxjaWs3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUkdWelpYSnBZV3hwZW1WeklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxJR1p2Y20xaGRDa2dabkp2YlNCMGFHVmNiaUFxSUdkcGRtVnVJSEpsWVdSbGNpQnBiblJ2SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUc5aWFtVmpkQzVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1emZTQnRjMmNnVkdobElHMWxjM05oWjJVZ2IySnFaV04wSUhSdklHUmxjMlZ5YVdGc2FYcGxJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjbjBnY21WaFpHVnlJRlJvWlNCQ2FXNWhjbmxTWldGa1pYSWdkRzhnZFhObExseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXpNenBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN1ltOXZiR1ZoYm4wZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW05dmJDZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkVaWEJ5WldOaGRHVmtLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016UTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1SlpHVnRjRzkwWlc1amVVeGxkbVZzZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JGYm5WdEtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFbGtaVzF3YjNSbGJtTjVUR1YyWld3b2RtRnNkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0E1T1RrNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnVaWGNnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNDdYRzRnSUNBZ0lDQnlaV0ZrWlhJdWNtVmhaRTFsYzNOaFoyVW9kbUZzZFdVc2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1WkdWelpYSnBZV3hwZW1WQ2FXNWhjbmxHY205dFVtVmhaR1Z5S1R0Y2JpQWdJQ0FnSUcxelp5NWhaR1JWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0JxYzNCaUxrMWxjM05oWjJVdWNtVmhaRUpwYm1GeWVVVjRkR1Z1YzJsdmJpaHRjMmNzSUhKbFlXUmxjaXhjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11WlhoMFpXNXphVzl1YzBKcGJtRnllU3hjYmlBZ0lDQWdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpeGNiaUFnSUNBZ0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sZEVWNGRHVnVjMmx2YmlrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMXpaenRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQnRaWE56WVdkbElIUnZJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjbVYwZFhKdUlIc2hWV2x1ZERoQmNuSmhlWDFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbk5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjJZWElnZDNKcGRHVnlJRDBnYm1WM0lHcHpjR0l1UW1sdVlYSjVWM0pwZEdWeUtDazdYRzRnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNU5aWFJvYjJSUGNIUnBiMjV6TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlLSFJvYVhNc0lIZHlhWFJsY2lrN1hHNGdJSEpsZEhWeWJpQjNjbWwwWlhJdVoyVjBVbVZ6ZFd4MFFuVm1abVZ5S0NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnWjJsMlpXNGdiV1Z6YzJGblpTQjBieUJpYVc1aGNua2daR0YwWVNBb2FXNGdjSEp2ZEc5aWRXWWdkMmx5WlZ4dUlDb2dabTl5YldGMEtTd2dkM0pwZEdsdVp5QjBieUIwYUdVZ1oybDJaVzRnUW1sdVlYSjVWM0pwZEdWeUxseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk45SUcxbGMzTmhaMlZjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVWM0pwZEdWeWZTQjNjbWwwWlhKY2JpQXFJRUJ6ZFhCd2NtVnpjeUI3ZFc1MWMyVmtURzlqWVd4V1lYSnBZV0pzWlhOOUlHWWdhWE1nYjI1c2VTQjFjMlZrSUdadmNpQnVaWE4wWldRZ2JXVnpjMkZuWlhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSWdQU0JtZFc1amRHbHZiaWh0WlhOellXZGxMQ0IzY21sMFpYSXBJSHRjYmlBZ2RtRnlJR1lnUFNCMWJtUmxabWx1WldRN1hHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2UySnZiMnhsWVc1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2JXVnpjMkZuWlN3Z016TXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlVKdmIyd29YRzRnSUNBZ0lDQXpNeXhjYmlBZ0lDQWdJR1pjYmlBZ0lDQXBPMXh1SUNCOVhHNGdJR1lnUFNBdktpb2dRSFI1Y0dVZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0IwYVc5dWN5NUpaR1Z0Y0c5MFpXNWplVXhsZG1Wc2ZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lETTBLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWRmJuVnRLRnh1SUNBZ0lDQWdNelFzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVUR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVW1Wd1pXRjBaV1JOWlhOellXZGxLRnh1SUNBZ0lDQWdPVGs1TEZ4dUlDQWdJQ0FnWml4Y2JpQWdJQ0FnSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCcWMzQmlMazFsYzNOaFoyVXVjMlZ5YVdGc2FYcGxRbWx1WVhKNVJYaDBaVzV6YVc5dWN5aHRaWE56WVdkbExDQjNjbWwwWlhJc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11WlhoMFpXNXphVzl1YzBKcGJtRnllU3dnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFVjRkR1Z1YzJsdmJpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRR1Z1ZFcwZ2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11U1dSbGJYQnZkR1Z1WTNsTVpYWmxiQ0E5SUh0Y2JpQWdTVVJGVFZCUFZFVk9RMWxmVlU1TFRrOVhUam9nTUN4Y2JpQWdUazlmVTBsRVJWOUZSa1pGUTFSVE9pQXhMRnh1SUNCSlJFVk5VRTlVUlU1VU9pQXlYRzU5TzF4dVhHNHZLaXBjYmlBcUlHOXdkR2x2Ym1Gc0lHSnZiMndnWkdWd2NtVmpZWFJsWkNBOUlETXpPMXh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1kbGRFUmxjSEpsWTJGMFpXUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBek15d2dabUZzYzJVcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFJHVndjbVZqWVhSbFpDQTlJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXpNc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFWlhCeVpXTmhkR1ZrSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTXpNc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVjSEp2ZEc5MGVYQmxMbWhoYzBSbGNISmxZMkYwWldRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBek15a2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnZjSFJwYjI1aGJDQkpaR1Z0Y0c5MFpXNWplVXhsZG1Wc0lHbGtaVzF3YjNSbGJtTjVYMnhsZG1Wc0lEMGdNelE3WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTXVTV1JsYlhCdmRHVnVZM2xNWlhabGJIMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MazFsZEdodlpFOXdkR2x2Ym5NdWNISnZkRzkwZVhCbExtZGxkRWxrWlcxd2IzUmxibU41VEdWMlpXd2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMa2xrWlcxd2IzUmxibU41VEdWMlpXeDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXpOQ3dnTUNrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVOWlhSb2IyUlBjSFJwYjI1ekxrbGtaVzF3YjNSbGJtTjVUR1YyWld4OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFNXUmxiWEJ2ZEdWdVkzbE1aWFpsYkNBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNelFzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGsxbGRHaHZaRTl3ZEdsdmJuTjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WTJ4bFlYSkpaR1Z0Y0c5MFpXNWplVXhsZG1Wc0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z016UXNJSFZ1WkdWbWFXNWxaQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1ptbGxiR1FnYVhNZ2MyVjBMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk11Y0hKdmRHOTBlWEJsTG1oaGMwbGtaVzF3YjNSbGJtTjVUR1YyWld3Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaDBhR2x6TENBek5Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQlZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVJSFZ1YVc1MFpYSndjbVYwWldSZmIzQjBhVzl1SUQwZ09UazVPMXh1SUNvZ1FISmxkSFZ5YmlCN0lVRnljbUY1UENGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiajU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpMbkJ5YjNSdmRIbHdaUzVuWlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQXFMeUFvWEc0Z0lDQWdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1YzSmhjSEJsY2tacFpXeGtLSFJvYVhNc0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TENBNU9Ua3BLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0K2ZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1TlpYUm9iMlJQY0hScGIyNXpmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1YzJWMFZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJreHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEZKbGNHVmhkR1ZrVjNKaGNIQmxja1pwWld4a0tIUm9hWE1zSURrNU9Td2dkbUZzZFdVcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1UFgwZ2IzQjBYM1poYkhWbFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNqMTlJRzl3ZEY5cGJtUmxlRnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVRXVjBhRzlrVDNCMGFXOXVjeTV3Y205MGIzUjVjR1V1WVdSa1ZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQTVPVGtzSUc5d2RGOTJZV3gxWlN3Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjRzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrMWxkR2h2WkU5d2RHbHZibk45SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVUV1YwYUc5a1QzQjBhVzl1Y3k1d2NtOTBiM1I1Y0dVdVkyeGxZWEpWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSVmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dVRHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y21Wd1pXRjBaV1JHYVdWc1pITmZJRDBnV3pKZE8xeHVYRzVjYmx4dWFXWWdLR3B6Y0dJdVRXVnpjMkZuWlM1SFJVNUZVa0ZVUlY5VVQxOVBRa3BGUTFRcElIdGNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJ2WW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCd2NtOTBieTVjYmlBcUlFWnBaV3hrSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSEpsYzJWeWRtVmtJR2x1SUVwaGRtRlRZM0pwY0hRZ1lXNWtJSGRwYkd3Z1ltVWdjbVZ1WVcxbFpDQjBieUJ3WWw5dVlXMWxMbHh1SUNvZ1QzQjBhVzl1WVd3Z1ptbGxiR1J6SUhSb1lYUWdZWEpsSUc1dmRDQnpaWFFnZDJsc2JDQmlaU0J6WlhRZ2RHOGdkVzVrWldacGJtVmtMbHh1SUNvZ1ZHOGdZV05qWlhOeklHRWdjbVZ6WlhKMlpXUWdabWxsYkdRZ2RYTmxMQ0JtYjI4dWNHSmZQRzVoYldVK0xDQmxaeXdnWm05dkxuQmlYMlJsWm1GMWJIUXVYRzRnS2lCR2IzSWdkR2hsSUd4cGMzUWdiMllnY21WelpYSjJaV1FnYm1GdFpYTWdjR3hsWVhObElITmxaVHBjYmlBcUlDQWdJQ0J1WlhRdmNISnZkRzh5TDJOdmJYQnBiR1Z5TDJwekwybHVkR1Z5Ym1Gc0wyZGxibVZ5WVhSdmNpNWpZeU5yUzJWNWQyOXlaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYmoxOUlHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVWdSR1Z3Y21WallYUmxaQzRnZDJobGRHaGxjaUIwYnlCcGJtTnNkV1JsSUhSb1pWeHVJQ29nSUNBZ0lFcFRVRUlnYVc1emRHRnVZMlVnWm05eUlIUnlZVzV6YVhScGIyNWhiQ0J6YjNrZ2NISnZkRzhnYzNWd2NHOXlkRHBjYmlBcUlDQWdJQ0JvZEhSd09pOHZaMjkwYnk5emIza3RjR0Z5WVcwdGJXbG5jbUYwYVc5dVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTUwYjA5aWFtVmpkQ2h2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sTENCMGFHbHpLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUZEdGMGFXTWdkbVZ5YzJsdmJpQnZaaUIwYUdVZ2UwQnpaV1VnZEc5UFltcGxZM1I5SUcxbGRHaHZaQzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm54MWJtUmxabWx1WldSOUlHbHVZMngxWkdWSmJuTjBZVzVqWlNCRVpYQnlaV05oZEdWa0xpQlhhR1YwYUdWeUlIUnZJR2x1WTJ4MVpHVmNiaUFxSUNBZ0lDQjBhR1VnU2xOUVFpQnBibk4wWVc1alpTQm1iM0lnZEhKaGJuTnBkR2x2Ym1Gc0lITnZlU0J3Y205MGJ5QnpkWEJ3YjNKME9seHVJQ29nSUNBZ0lHaDBkSEE2THk5bmIzUnZMM052ZVMxd1lYSmhiUzF0YVdkeVlYUnBiMjVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTUwYjA5aWFtVmpkQ0E5SUdaMWJtTjBhVzl1S0dsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnYlhObktTQjdYRzRnSUhaaGNpQm1MQ0J2WW1vZ1BTQjdYRzRnSUNBZ2JtRnRaVXhwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEU1aGJXVk1hWE4wS0Nrc1hHNGdJQ0FnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVUbUZ0WlZCaGNuUXVkRzlQWW1wbFkzUXNJR2x1WTJ4MVpHVkpibk4wWVc1alpTa3NYRzRnSUNBZ2FXUmxiblJwWm1sbGNsWmhiSFZsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRE1wS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2daaXhjYmlBZ0lDQndiM05wZEdsMlpVbHVkRlpoYkhWbE9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURRcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0J1WldkaGRHbDJaVWx1ZEZaaGJIVmxPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lEVXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCa2IzVmliR1ZXWVd4MVpUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwVDNCMGFXOXVZV3hHYkc5aGRHbHVaMUJ2YVc1MFJtbGxiR1FvYlhObkxDQTJLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2MzUnlhVzVuVm1Gc2RXVTZJRzF6Wnk1blpYUlRkSEpwYm1kV1lXeDFaVjloYzBJMk5DZ3BMRnh1SUNBZ0lHRm5aM0psWjJGMFpWWmhiSFZsT2lBb1ppQTlJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkNodGMyY3NJRGdwS1NBOVBTQnVkV3hzSUQ4Z2RXNWtaV1pwYm1Wa0lEb2dabHh1SUNCOU8xeHVYRzRnSUdsbUlDaHBibU5zZFdSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNCdlltb3VKR3B6Y0dKTlpYTnpZV2RsU1c1emRHRnVZMlVnUFNCdGMyYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHOWlhanRjYm4wN1hHNTlYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLUzVjYmlBcUlFQndZWEpoYlNCN2FuTndZaTVDZVhSbFUyOTFjbU5sZlNCaWVYUmxjeUJVYUdVZ1lubDBaWE1nZEc4Z1pHVnpaWEpwWVd4cGVtVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0N1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJb2JYTm5MQ0J5WldGa1pYSXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcElHWnliMjBnZEdobFhHNGdLaUJuYVhabGJpQnlaV0ZrWlhJZ2FXNTBieUIwYUdVZ1oybDJaVzRnYldWemMyRm5aU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZibjBnYlhObklGUm9aU0J0WlhOellXZGxJRzlpYW1WamRDQjBieUJrWlhObGNtbGhiR2w2WlNCcGJuUnZMbHh1SUNvZ1FIQmhjbUZ0SUhzaGFuTndZaTVDYVc1aGNubFNaV0ZrWlhKOUlISmxZV1JsY2lCVWFHVWdRbWx1WVhKNVVtVmhaR1Z5SUhSdklIVnpaUzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ym4xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlJRDBnWm5WdVkzUnBiMjRvYlhObkxDQnlaV0ZrWlhJcElIdGNiaUFnZDJocGJHVWdLSEpsWVdSbGNpNXVaWGgwUm1sbGJHUW9LU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmtaWEl1YVhORmJtUkhjbTkxY0NncEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdacFpXeGtJRDBnY21WaFpHVnlMbWRsZEVacFpXeGtUblZ0WW1WeUtDazdYRzRnSUNBZ2MzZHBkR05vSUNobWFXVnNaQ2tnZTF4dUlDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJRzVsZHlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTVPWVcxbFVHRnlkRHRjYmlBZ0lDQWdJSEpsWVdSbGNpNXlaV0ZrVFdWemMyRm5aU2gyWVd4MVpTeHdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1a1pYTmxjbWxoYkdsNlpVSnBibUZ5ZVVaeWIyMVNaV0ZrWlhJcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkU1aGJXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNoeVpXRmtaWEl1Y21WaFpGTjBjbWx1WnlncEtUdGNiaUFnSUNBZ0lHMXpaeTV6WlhSSlpHVnVkR2xtYVdWeVZtRnNkV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRlZwYm5RMk5DZ3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUlFiM05wZEdsMlpVbHVkRlpoYkhWbEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTlRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvY21WaFpHVnlMbkpsWVdSSmJuUTJOQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJPWldkaGRHbDJaVWx1ZEZaaGJIVmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ05qcGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUkViM1ZpYkdVb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFJHOTFZbXhsVm1Gc2RXVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBM09seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdMeW9xSUVCMGVYQmxJSHNoVldsdWREaEJjbkpoZVgwZ0tpOGdLSEpsWVdSbGNpNXlaV0ZrUW5sMFpYTW9LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVM1J5YVc1blZtRnNkV1VvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTRPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0emRISnBibWQ5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRk4wY21sdVp5Z3BLVHRjYmlBZ0lDQWdJRzF6Wnk1elpYUkJaMmR5WldkaGRHVldZV3gxWlNoMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdiV1Z6YzJGblpTNW5aWFJPWVcxbFRHbHpkQ2dwTzF4dUlDQnBaaUFvWmk1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxVbVZ3WldGMFpXUk5aWE56WVdkbEtGeHVJQ0FnSUNBZ01peGNiaUFnSUNBZ0lHWXNYRzRnSUNBZ0lDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjbHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURNcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lETXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTkNrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxWV2x1ZERZMEtGeHVJQ0FnSUNBZ05DeGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0ExS1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVkpiblEyTkNoY2JpQWdJQ0FnSURVc1hHNGdJQ0FnSUNCbVhHNGdJQ0FnS1R0Y2JpQWdmVnh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dOaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFJHOTFZbXhsS0Z4dUlDQWdJQ0FnTml4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdleUVvYzNSeWFXNW5mRlZwYm5RNFFYSnlZWGtwZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURjcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVUo1ZEdWektGeHVJQ0FnSUNBZ055eGNiaUFnSUNBZ0lHWmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHWWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0WlhOellXZGxMQ0E0S1NrN1hHNGdJR2xtSUNobUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCM2NtbDBaWEl1ZDNKcGRHVlRkSEpwYm1jb1hHNGdJQ0FnSUNBNExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYm4wN1hHNWNibHh1WEc1Y2JseHVhV1lnS0dwemNHSXVUV1Z6YzJGblpTNUhSVTVGVWtGVVJWOVVUMTlQUWtwRlExUXBJSHRjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCdlltcGxZM1FnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QndjbTkwYnk1Y2JpQXFJRVpwWld4a0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhKbGMyVnlkbVZrSUdsdUlFcGhkbUZUWTNKcGNIUWdZVzVrSUhkcGJHd2dZbVVnY21WdVlXMWxaQ0IwYnlCd1lsOXVZVzFsTGx4dUlDb2dUM0IwYVc5dVlXd2dabWxsYkdSeklIUm9ZWFFnWVhKbElHNXZkQ0J6WlhRZ2QybHNiQ0JpWlNCelpYUWdkRzhnZFc1a1pXWnBibVZrTGx4dUlDb2dWRzhnWVdOalpYTnpJR0VnY21WelpYSjJaV1FnWm1sbGJHUWdkWE5sTENCbWIyOHVjR0pmUEc1aGJXVStMQ0JsWnl3Z1ptOXZMbkJpWDJSbFptRjFiSFF1WEc0Z0tpQkdiM0lnZEdobElHeHBjM1FnYjJZZ2NtVnpaWEoyWldRZ2JtRnRaWE1nY0d4bFlYTmxJSE5sWlRwY2JpQXFJQ0FnSUNCdVpYUXZjSEp2ZEc4eUwyTnZiWEJwYkdWeUwycHpMMmx1ZEdWeWJtRnNMMmRsYm1WeVlYUnZjaTVqWXlOclMyVjVkMjl5WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJqMTlJRzl3ZEY5cGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z2QyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbElIUm9aVnh1SUNvZ0lDQWdJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1MGIwOWlhbVZqZENodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObExDQjBhR2x6S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZG1WeWMybHZiaUJ2WmlCMGFHVWdlMEJ6WldVZ2RHOVBZbXBsWTNSOUlHMWxkR2h2WkM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJueDFibVJsWm1sdVpXUjlJR2x1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUJYYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1ZjYmlBcUlDQWdJQ0IwYUdVZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMGZTQnRjMmNnVkdobElHMXpaeUJwYm5OMFlXNWpaU0IwYnlCMGNtRnVjMlp2Y20wdVhHNGdLaUJBY21WMGRYSnVJSHNoVDJKcVpXTjBmVnh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdibUZ0WlZCaGNuUTZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z01Ta3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdselJYaDBaVzV6YVc5dU9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJDYjI5c1pXRnVSbWxsYkdRb2JYTm5MQ0F5S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDNWtaWE5sY21saGJHbDZaVUpwYm1GeWVTQTlJR1oxYm1OMGFXOXVLR0o1ZEdWektTQjdYRzRnSUhaaGNpQnlaV0ZrWlhJZ1BTQnVaWGNnYW5Od1lpNUNhVzVoY25sU1pXRmtaWElvWW5sMFpYTXBPMXh1SUNCMllYSWdiWE5uSUQwZ2JtVjNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKME8xeHVJQ0J5WlhSMWNtNGdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUtHMXpaeXdnY21WaFpHVnlLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJFWlhObGNtbGhiR2w2WlhNZ1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVWdabTl5YldGMEtTQm1jbTl0SUhSb1pWeHVJQ29nWjJsMlpXNGdjbVZoWkdWeUlHbHVkRzhnZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1VG1GdFpWQmhjblI5SUcxelp5QlVhR1VnYldWemMyRm5aU0J2WW1wbFkzUWdkRzhnWkdWelpYSnBZV3hwZW1VZ2FXNTBieTVjYmlBcUlFQndZWEpoYlNCN0lXcHpjR0l1UW1sdVlYSjVVbVZoWkdWeWZTQnlaV0ZrWlhJZ1ZHaGxJRUpwYm1GeWVWSmxZV1JsY2lCMGJ5QjFjMlV1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25SOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaUE5SUdaMWJtTjBhVzl1S0cxelp5d2djbVZoWkdWeUtTQjdYRzRnSUhkb2FXeGxJQ2h5WldGa1pYSXVibVY0ZEVacFpXeGtLQ2twSUh0Y2JpQWdJQ0JwWmlBb2NtVmhaR1Z5TG1selJXNWtSM0p2ZFhBb0tTa2dlMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCbWFXVnNaQ0E5SUhKbFlXUmxjaTVuWlhSR2FXVnNaRTUxYldKbGNpZ3BPMXh1SUNBZ0lITjNhWFJqYUNBb1ptbGxiR1FwSUh0Y2JpQWdJQ0JqWVhObElERTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tISmxZV1JsY2k1eVpXRmtVM1J5YVc1bktDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFNWhiV1ZRWVhKMEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnTWpwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDOHFLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMGdLaThnS0hKbFlXUmxjaTV5WldGa1FtOXZiQ2dwS1R0Y2JpQWdJQ0FnSUcxelp5NXpaWFJKYzBWNGRHVnVjMmx2YmloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TGs1aGJXVlFZWEowTG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1elpYSnBZV3hwZW1WQ2FXNWhjbmxVYjFkeWFYUmxjaWgwYUdsekxDQjNjbWwwWlhJcE8xeHVJQ0J5WlhSMWNtNGdkM0pwZEdWeUxtZGxkRkpsYzNWc2RFSjFabVpsY2lncE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTmxjbWxoYkdsNlpYTWdkR2hsSUdkcGRtVnVJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21WY2JpQXFJR1p2Y20xaGRDa3NJSGR5YVhScGJtY2dkRzhnZEdobElHZHBkbVZ1SUVKcGJtRnllVmR5YVhSbGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBmU0J0WlhOellXZGxYRzRnS2lCQWNHRnlZVzBnZXlGcWMzQmlMa0pwYm1GeWVWZHlhWFJsY24wZ2QzSnBkR1Z5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMExuTmxjbWxoYkdsNlpVSnBibUZ5ZVZSdlYzSnBkR1Z5SUQwZ1puVnVZM1JwYjI0b2JXVnpjMkZuWlN3Z2QzSnBkR1Z5S1NCN1hHNGdJSFpoY2lCbUlEMGdkVzVrWldacGJtVmtPMXh1SUNCbUlEMGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNU2twTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFUzUnlhVzVuS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlMkp2YjJ4bFlXNTlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iV1Z6YzJGblpTd2dNaWtwTzF4dUlDQnBaaUFvWmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFFtOXZiQ2hjYmlBZ0lDQWdJRElzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjWFZwY21Wa0lITjBjbWx1WnlCdVlXMWxYM0JoY25RZ1BTQXhPMXh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDNXdjbTkwYjNSNWNHVXVaMlYwVG1GdFpWQmhjblFnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNU3dnWENKY0lpa3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMGZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdWNISnZkRzkwZVhCbExuTmxkRTVoYldWUVlYSjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVUbUZ0WlZCaGNuUXVjSEp2ZEc5MGVYQmxMbU5zWldGeVRtRnRaVkJoY25RZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBeExDQjFibVJsWm1sdVpXUXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkMmhsZEdobGNpQjBhR2x6SUdacFpXeGtJR2x6SUhObGRDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMExuQnliM1J2ZEhsd1pTNW9ZWE5PWVcxbFVHRnlkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJREVwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21WeGRXbHlaV1FnWW05dmJDQnBjMTlsZUhSbGJuTnBiMjRnUFNBeU8xeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdWNISnZkRzkwZVhCbExtZGxkRWx6UlhoMFpXNXphVzl1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFFtOXZiR1ZoYmtacFpXeGtWMmwwYUVSbFptRjFiSFFvZEdocGN5d2dNaXdnWm1Gc2MyVXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVUbUZ0WlZCaGNuUjlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDNXdjbTkwYjNSNWNHVXVjMlYwU1hORmVIUmxibk5wYjI0Z1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25SOUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1T1lXMWxVR0Z5ZEM1d2NtOTBiM1I1Y0dVdVkyeGxZWEpKYzBWNGRHVnVjMmx2YmlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURJc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RdWNISnZkRzkwZVhCbExtaGhjMGx6UlhoMFpXNXphVzl1SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTWlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCeVpYQmxZWFJsWkNCT1lXMWxVR0Z5ZENCdVlXMWxJRDBnTWp0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dVRtRnRaVkJoY25RK2ZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1WjJWMFRtRnRaVXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBQbjBnS2k4Z0tGeHVJQ0FnSUdwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0J3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRDd2dNaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNU9ZVzFsVUdGeWRENTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUtpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxuQnliM1J2ZEhsd1pTNXpaWFJPWVcxbFRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBQWDBnYjNCMFgzWmhiSFZsWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2oxOUlHOXdkRjlwYm1SbGVGeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMazVoYldWUVlYSjBmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdVlXUmtUbUZ0WlNBOUlHWjFibU4wYVc5dUtHOXdkRjkyWVd4MVpTd2diM0IwWDJsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVZV1JrVkc5U1pYQmxZWFJsWkZkeVlYQndaWEpHYVdWc1pDaDBhR2x6TENBeUxDQnZjSFJmZG1Gc2RXVXNJSEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxrNWhiV1ZRWVhKMExDQnZjSFJmYVc1a1pYZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnYkdsemRDQnRZV3RwYm1jZ2FYUWdaVzF3ZEhrZ1luVjBJRzV2YmkxdWRXeHNMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUbUZ0WlV4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtRnRaVXhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRzl3ZEdsdmJtRnNJSE4wY21sdVp5QnBaR1Z1ZEdsbWFXVnlYM1poYkhWbElEMGdNenRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEVsa1pXNTBhV1pwWlhKV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR6ZEhKcGJtZDlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUlhhWFJvUkdWbVlYVnNkQ2gwYUdsekxDQXpMQ0JjSWx3aUtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdWMyVjBTV1JsYm5ScFptbGxjbFpoYkhWbElEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtTnNaV0Z5U1dSbGJuUnBabWxsY2xaaGJIVmxJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNeXdnZFc1a1pXWnBibVZrS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5Qm1hV1ZzWkNCcGN5QnpaWFF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1YUdGelNXUmxiblJwWm1sbGNsWmhiSFZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTXlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCMWFXNTBOalFnY0c5emFYUnBkbVZmYVc1MFgzWmhiSFZsSUQwZ05EdGNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtZGxkRkJ2YzJsMGFYWmxTVzUwVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z05Dd2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEZCdmMybDBhWFpsU1c1MFZtRnNkV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEUXNJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1WTJ4bFlYSlFiM05wZEdsMlpVbHVkRlpoYkhWbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05Dd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVhR0Z6VUc5emFYUnBkbVZKYm5SV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYVc1ME5qUWdibVZuWVhScGRtVmZhVzUwWDNaaGJIVmxJRDBnTlR0Y2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG1kbGRFNWxaMkYwYVhabFNXNTBWbUZzZFdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2JuVnRZbVZ5ZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTlN3Z01Da3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjJZV3gxWlZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRTVsWjJGMGFYWmxTVzUwVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURVc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVZMnhsWVhKT1pXZGhkR2wyWlVsdWRGWmhiSFZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTlN3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdWFHRnpUbVZuWVhScGRtVkpiblJXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEVXBJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2daRzkxWW14bElHUnZkV0pzWlY5MllXeDFaU0E5SURZN1hHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5CeWIzUnZkSGx3WlM1blpYUkViM1ZpYkdWV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHR1ZFcxaVpYSjlJQ292SUNocWMzQmlMazFsYzNOaFoyVXVaMlYwUm14dllYUnBibWRRYjJsdWRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTml3Z01DNHdLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVjMlYwUkc5MVlteGxWbUZzZFdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFlzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Vlc1cGJuUmxjbkJ5WlhSbFpFOXdkR2x2Ymk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpFYjNWaWJHVldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURZc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtaGhjMFJ2ZFdKc1pWWmhiSFZsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdRb2RHaHBjeXdnTmlrZ0lUMGdiblZzYkR0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWVYUmxjeUJ6ZEhKcGJtZGZkbUZzZFdVZ1BTQTNPMXh1SUNvZ1FISmxkSFZ5YmlCN0lTaHpkSEpwYm1kOFZXbHVkRGhCY25KaGVTbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1TG5CeWIzUnZkSGx3WlM1blpYUlRkSEpwYm1kV1lXeDFaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoS0hOMGNtbHVaM3hWYVc1ME9FRnljbUY1S1gwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1blpYUkdhV1ZzWkZkcGRHaEVaV1poZFd4MEtIUm9hWE1zSURjc0lGd2lYQ0lwS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCaWVYUmxjeUJ6ZEhKcGJtZGZkbUZzZFdVZ1BTQTNPMXh1SUNvZ1ZHaHBjeUJwY3lCaElIUjVjR1V0WTI5dWRtVnljMmx2YmlCM2NtRndjR1Z5SUdGeWIzVnVaQ0JnWjJWMFUzUnlhVzVuVm1Gc2RXVW9LV0JjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEZOMGNtbHVaMVpoYkhWbFgyRnpRalkwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVpZVhSbGMwRnpRalkwS0Z4dUlDQWdJQ0FnZEdocGN5NW5aWFJUZEhKcGJtZFdZV3gxWlNncEtTazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2dZbmwwWlhNZ2MzUnlhVzVuWDNaaGJIVmxJRDBnTnp0Y2JpQXFJRTV2ZEdVZ2RHaGhkQ0JWYVc1ME9FRnljbUY1SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1FnYjI0Z1lXeHNJR0p5YjNkelpYSnpMbHh1SUNvZ1FITmxaU0JvZEhSd09pOHZZMkZ1YVhWelpTNWpiMjB2VldsdWREaEJjbkpoZVZ4dUlDb2dWR2hwY3lCcGN5QmhJSFI1Y0dVdFkyOXVkbVZ5YzJsdmJpQjNjbUZ3Y0dWeUlHRnliM1Z1WkNCZ1oyVjBVM1J5YVc1blZtRnNkV1VvS1dCY2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpNXdjbTkwYjNSNWNHVXVaMlYwVTNSeWFXNW5WbUZzZFdWZllYTlZPQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoVldsdWREaEJjbkpoZVgwZ0tpOGdLR3B6Y0dJdVRXVnpjMkZuWlM1aWVYUmxjMEZ6VlRnb1hHNGdJQ0FnSUNCMGFHbHpMbWRsZEZOMGNtbHVaMVpoYkhWbEtDa3BLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdleUVvYzNSeWFXNW5mRlZwYm5RNFFYSnlZWGtwZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVWYm1sdWRHVnljSEpsZEdWa1QzQjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjR1Y0hKdmRHOTBlWEJsTG5ObGRGTjBjbWx1WjFaaGJIVmxJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBM0xDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsVnVhVzUwWlhKd2NtVjBaV1JQY0hScGIyNHVjSEp2ZEc5MGVYQmxMbU5zWldGeVUzUnlhVzVuVm1Gc2RXVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQTNMQ0IxYm1SbFptbHVaV1FwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZDJobGRHaGxjaUIwYUdseklHWnBaV3hrSUdseklITmxkQzVjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1ZEdWeWNISmxkR1ZrVDNCMGFXOXVMbkJ5YjNSdmRIbHdaUzVvWVhOVGRISnBibWRXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLSFJvYVhNc0lEY3BJQ0U5SUc1MWJHdzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2diM0IwYVc5dVlXd2djM1J5YVc1bklHRm5aM0psWjJGMFpWOTJZV3gxWlNBOUlEZzdYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUxuQnliM1J2ZEhsd1pTNW5aWFJCWjJkeVpXZGhkR1ZXWVd4MVpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHpkSEpwYm1kOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBNExDQmNJbHdpS1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1YzJWMFFXZG5jbVZuWVhSbFZtRnNkV1VnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lEZ3NJSFpoYkhWbEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR1pwWld4a0lHMWhhMmx1WnlCcGRDQjFibVJsWm1sdVpXUXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZ1YVc1MFpYSndjbVYwWldSUGNIUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnlaWFJsWkU5d2RHbHZiaTV3Y205MGIzUjVjR1V1WTJ4bFlYSkJaMmR5WldkaGRHVldZV3gxWlNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURnc0lIVnVaR1ZtYVc1bFpDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9hWE1nWm1sbGJHUWdhWE1nYzJWMExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxWdWFXNTBaWEp3Y21WMFpXUlBjSFJwYjI0dWNISnZkRzkwZVhCbExtaGhjMEZuWjNKbFoyRjBaVlpoYkhWbElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z09Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVYRzR2S2lwY2JpQXFJRXhwYzNRZ2IyWWdjbVZ3WldGMFpXUWdabWxsYkdSeklIZHBkR2hwYmlCMGFHbHpJRzFsYzNOaFoyVWdkSGx3WlM1Y2JpQXFJRUJ3Y21sMllYUmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxSUVCamIyNXpkRnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXekZkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dWNISnZkRzkwZVhCbExuUnZUMkpxWldOMElEMGdablZ1WTNScGIyNG9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxuUnZUMkpxWldOMEtHOXdkRjlwYm1Oc2RXUmxTVzV6ZEdGdVkyVXNJSFJvYVhNcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGTjBZWFJwWXlCMlpYSnphVzl1SUc5bUlIUm9aU0I3UUhObFpTQjBiMDlpYW1WamRIMGdiV1YwYUc5a0xseHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmSFZ1WkdWbWFXNWxaSDBnYVc1amJIVmtaVWx1YzNSaGJtTmxJRVJsY0hKbFkyRjBaV1F1SUZkb1pYUm9aWElnZEc4Z2FXNWpiSFZrWlZ4dUlDb2dJQ0FnSUhSb1pTQktVMUJDSUdsdWMzUmhibU5sSUdadmNpQjBjbUZ1YzJsMGFXOXVZV3dnYzI5NUlIQnliM1J2SUhOMWNIQnZjblE2WEc0Z0tpQWdJQ0FnYUhSMGNEb3ZMMmR2ZEc4dmMyOTVMWEJoY21GdExXMXBaM0poZEdsdmJseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2ZlNCdGMyY2dWR2hsSUcxelp5QnBibk4wWVc1alpTQjBieUIwY21GdWMyWnZjbTB1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ29nUUhOMWNIQnlaWE56SUh0MWJuVnpaV1JNYjJOaGJGWmhjbWxoWW14bGMzMGdaaUJwY3lCdmJteDVJSFZ6WldRZ1ptOXlJRzVsYzNSbFpDQnRaWE56WVdkbGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHBibU5zZFdSbFNXNXpkR0Z1WTJVc0lHMXpaeWtnZTF4dUlDQjJZWElnWml3Z2IySnFJRDBnZTF4dUlDQWdJR3h2WTJGMGFXOXVUR2x6ZERvZ2FuTndZaTVOWlhOellXZGxMblJ2VDJKcVpXTjBUR2x6ZENodGMyY3VaMlYwVEc5allYUnBiMjVNYVhOMEtDa3NYRzRnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuUnZUMkpxWldOMExDQnBibU5zZFdSbFNXNXpkR0Z1WTJVcFhHNGdJSDA3WEc1Y2JpQWdhV1lnS0dsdVkyeDFaR1ZKYm5OMFlXNWpaU2tnZTF4dUlDQWdJRzlpYWk0a2FuTndZazFsYzNOaFoyVkpibk4wWVc1alpTQTlJRzF6Wnp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRVJsYzJWeWFXRnNhWHBsY3lCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhCaGNtRnRJSHRxYzNCaUxrSjVkR1ZUYjNWeVkyVjlJR0o1ZEdWeklGUm9aU0JpZVhSbGN5QjBieUJrWlhObGNtbGhiR2w2WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTk5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnp0Y2JpQWdjbVYwZFhKdUlIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSW9iWE5uTENCeVpXRmtaWElwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVSbGMyVnlhV0ZzYVhwbGN5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBJR1p5YjIwZ2RHaGxYRzRnS2lCbmFYWmxiaUJ5WldGa1pYSWdhVzUwYnlCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOTlJRzF6WnlCVWFHVWdiV1Z6YzJGblpTQnZZbXBsWTNRZ2RHOGdaR1Z6WlhKcFlXeHBlbVVnYVc1MGJ5NWNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVVtVmhaR1Z5ZlNCeVpXRmtaWElnVkdobElFSnBibUZ5ZVZKbFlXUmxjaUIwYnlCMWMyVXVYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1admZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVpHVnpaWEpwWVd4cGVtVkNhVzVoY25sR2NtOXRVbVZoWkdWeUlEMGdablZ1WTNScGIyNG9iWE5uTENCeVpXRmtaWElwSUh0Y2JpQWdkMmhwYkdVZ0tISmxZV1JsY2k1dVpYaDBSbWxsYkdRb0tTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGa1pYSXVhWE5GYm1SSGNtOTFjQ2dwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR1pwWld4a0lEMGdjbVZoWkdWeUxtZGxkRVpwWld4a1RuVnRZbVZ5S0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2htYVdWc1pDa2dlMXh1SUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlHNWxkeUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjQ3WEc0Z0lDQWdJQ0J5WldGa1pYSXVjbVZoWkUxbGMzTmhaMlVvZG1Gc2RXVXNjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWs3WEc0Z0lDQWdJQ0J0YzJjdVlXUmtURzlqWVhScGIyNG9kbUZzZFdVcE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxZV1JsY2k1emEybHdSbWxsYkdRb0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiWE5uTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJRzFsYzNOaFoyVWdkRzhnWW1sdVlYSjVJR1JoZEdFZ0tHbHVJSEJ5YjNSdlluVm1JSGRwY21VZ1ptOXliV0YwS1M1Y2JpQXFJRUJ5WlhSMWNtNGdleUZWYVc1ME9FRnljbUY1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1Y0hKdmRHOTBlWEJsTG5ObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2QzSnBkR1Z5SUQwZ2JtVjNJR3B6Y0dJdVFtbHVZWEo1VjNKcGRHVnlLQ2s3WEc0Z0lIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2loMGFHbHpMQ0IzY21sMFpYSXBPMXh1SUNCeVpYUjFjbTRnZDNKcGRHVnlMbWRsZEZKbGMzVnNkRUoxWm1abGNpZ3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRk5sY21saGJHbDZaWE1nZEdobElHZHBkbVZ1SUcxbGMzTmhaMlVnZEc4Z1ltbHVZWEo1SUdSaGRHRWdLR2x1SUhCeWIzUnZZblZtSUhkcGNtVmNiaUFxSUdadmNtMWhkQ2tzSUhkeWFYUnBibWNnZEc4Z2RHaGxJR2RwZG1WdUlFSnBibUZ5ZVZkeWFYUmxjaTVjYmlBcUlFQndZWEpoYlNCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWIzMGdiV1Z6YzJGblpWeHVJQ29nUUhCaGNtRnRJSHNoYW5Od1lpNUNhVzVoY25sWGNtbDBaWEo5SUhkeWFYUmxjbHh1SUNvZ1FITjFjSEJ5WlhOeklIdDFiblZ6WldSTWIyTmhiRlpoY21saFlteGxjMzBnWmlCcGN5QnZibXg1SUhWelpXUWdabTl5SUc1bGMzUmxaQ0J0WlhOellXZGxjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJZ1BTQm1kVzVqZEdsdmJpaHRaWE56WVdkbExDQjNjbWwwWlhJcElIdGNiaUFnZG1GeUlHWWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lHWWdQU0J0WlhOellXZGxMbWRsZEV4dlkyRjBhVzl1VEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVtVndaV0YwWldSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUdZc1hHNGdJQ0FnSUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWMyVnlhV0ZzYVhwbFFtbHVZWEo1Vkc5WGNtbDBaWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNTlPMXh1WEc1Y2JseHVMeW9xWEc0Z0tpQk1hWE4wSUc5bUlISmxjR1ZoZEdWa0lHWnBaV3hrY3lCM2FYUm9hVzRnZEdocGN5QnRaWE56WVdkbElIUjVjR1V1WEc0Z0tpQkFjSEpwZG1GMFpTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaUJBWTI5dWMzUmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuSmxjR1ZoZEdWa1JtbGxiR1J6WHlBOUlGc3hMRElzTmwwN1hHNWNibHh1WEc1cFppQW9hbk53WWk1TlpYTnpZV2RsTGtkRlRrVlNRVlJGWDFSUFgwOUNTa1ZEVkNrZ2UxeHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJRzlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUhCeWIzUnZMbHh1SUNvZ1JtbGxiR1FnYm1GdFpYTWdkR2hoZENCaGNtVWdjbVZ6WlhKMlpXUWdhVzRnU21GMllWTmpjbWx3ZENCaGJtUWdkMmxzYkNCaVpTQnlaVzVoYldWa0lIUnZJSEJpWDI1aGJXVXVYRzRnS2lCUGNIUnBiMjVoYkNCbWFXVnNaSE1nZEdoaGRDQmhjbVVnYm05MElITmxkQ0IzYVd4c0lHSmxJSE5sZENCMGJ5QjFibVJsWm1sdVpXUXVYRzRnS2lCVWJ5QmhZMk5sYzNNZ1lTQnlaWE5sY25abFpDQm1hV1ZzWkNCMWMyVXNJR1p2Ynk1d1lsODhibUZ0WlQ0c0lHVm5MQ0JtYjI4dWNHSmZaR1ZtWVhWc2RDNWNiaUFxSUVadmNpQjBhR1VnYkdsemRDQnZaaUJ5WlhObGNuWmxaQ0J1WVcxbGN5QndiR1ZoYzJVZ2MyVmxPbHh1SUNvZ0lDQWdJRzVsZEM5d2NtOTBiekl2WTI5dGNHbHNaWEl2YW5NdmFXNTBaWEp1WVd3dloyVnVaWEpoZEc5eUxtTmpJMnRMWlhsM2IzSmtMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1UFgwZ2IzQjBYMmx1WTJ4MVpHVkpibk4wWVc1alpTQkVaWEJ5WldOaGRHVmtMaUIzYUdWMGFHVnlJSFJ2SUdsdVkyeDFaR1VnZEdobFhHNGdLaUFnSUNBZ1NsTlFRaUJwYm5OMFlXNWpaU0JtYjNJZ2RISmhibk5wZEdsdmJtRnNJSE52ZVNCd2NtOTBieUJ6ZFhCd2IzSjBPbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OW5iM1J2TDNOdmVTMXdZWEpoYlMxdGFXZHlZWFJwYjI1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNXdjbTkwYjNSNWNHVXVkRzlQWW1wbFkzUWdQU0JtZFc1amRHbHZiaWh2Y0hSZmFXNWpiSFZrWlVsdWMzUmhibU5sS1NCN1hHNGdJSEpsZEhWeWJpQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlHMXpaeUJVYUdVZ2JYTm5JR2x1YzNSaGJtTmxJSFJ2SUhSeVlXNXpabTl5YlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZQWW1wbFkzUjlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnY0dGMGFFeHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2MzQmhia3hwYzNRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2JYTm5MQ0F5S1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1lzWEc0Z0lDQWdiR1ZoWkdsdVowTnZiVzFsYm5Sek9pQW9aaUE5SUdwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRjMmNzSURNcEtTQTlQU0J1ZFd4c0lEOGdkVzVrWldacGJtVmtJRG9nWml4Y2JpQWdJQ0IwY21GcGJHbHVaME52YlcxbGJuUnpPaUFvWmlBOUlHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaQ2h0YzJjc0lEUXBLU0E5UFNCdWRXeHNJRDhnZFc1a1pXWnBibVZrSURvZ1ppeGNiaUFnSUNCc1pXRmthVzVuUkdWMFlXTm9aV1JEYjIxdFpXNTBjMHhwYzNRNklDaG1JRDBnYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2JYTm5MQ0EyS1NrZ1BUMGdiblZzYkNBL0lIVnVaR1ZtYVc1bFpDQTZJR1pjYmlBZ2ZUdGNibHh1SUNCcFppQW9hVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2IySnFMaVJxYzNCaVRXVnpjMkZuWlVsdWMzUmhibU5sSUQwZ2JYTm5PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnZZbW83WEc1OU8xeHVmVnh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2t1WEc0Z0tpQkFjR0Z5WVcwZ2UycHpjR0l1UW5sMFpWTnZkWEpqWlgwZ1lubDBaWE1nVkdobElHSjVkR1Z6SUhSdklHUmxjMlZ5YVdGc2FYcGxMbHh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lodGMyY3NJSEpsWVdSbGNpazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrZ1puSnZiU0IwYUdWY2JpQXFJR2RwZG1WdUlISmxZV1JsY2lCcGJuUnZJSFJvWlNCbmFYWmxiaUJ0WlhOellXZGxJRzlpYW1WamRDNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ym4wZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjU5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllVVp5YjIxU1pXRmtaWElnUFNCbWRXNWpkR2x2YmlodGMyY3NJSEpsWVdSbGNpa2dlMXh1SUNCM2FHbHNaU0FvY21WaFpHVnlMbTVsZUhSR2FXVnNaQ2dwS1NCN1hHNGdJQ0FnYVdZZ0tISmxZV1JsY2k1cGMwVnVaRWR5YjNWd0tDa3BJSHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1ptbGxiR1FnUFNCeVpXRmtaWEl1WjJWMFJtbGxiR1JPZFcxaVpYSW9LVHRjYmlBZ0lDQnpkMmwwWTJnZ0tHWnBaV3hrS1NCN1hHNGdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxjeUE5SUM4cUtpQkFkSGx3WlNCN0lVRnljbUY1UEc1MWJXSmxjajU5SUNvdklDaHlaV0ZrWlhJdWFYTkVaV3hwYldsMFpXUW9LU0EvSUhKbFlXUmxjaTV5WldGa1VHRmphMlZrU1c1ME16SW9LU0E2SUZ0eVpXRmtaWEl1Y21WaFpFbHVkRE15S0NsZEtUdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2dkbUZzZFdWekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUcxelp5NWhaR1JRWVhSb0tIWmhiSFZsYzF0cFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVnpJRDBnTHlvcUlFQjBlWEJsSUhzaFFYSnlZWGs4Ym5WdFltVnlQbjBnS2k4Z0tISmxZV1JsY2k1cGMwUmxiR2x0YVhSbFpDZ3BJRDhnY21WaFpHVnlMbkpsWVdSUVlXTnJaV1JKYm5Rek1pZ3BJRG9nVzNKbFlXUmxjaTV5WldGa1NXNTBNeklvS1YwcE8xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYlhObkxtRmtaRk53WVc0b2RtRnNkV1Z6VzJsZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQzhxS2lCQWRIbHdaU0I3YzNSeWFXNW5mU0FxTHlBb2NtVmhaR1Z5TG5KbFlXUlRkSEpwYm1jb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFRHVmhaR2x1WjBOdmJXMWxiblJ6S0haaGJIVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdORHBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBWSEpoYVd4cGJtZERiMjF0Wlc1MGN5aDJZV3gxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSURZNlhHNGdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0hKbFlXUmxjaTV5WldGa1UzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ2JYTm5MbUZrWkV4bFlXUnBibWRFWlhSaFkyaGxaRU52YlcxbGJuUnpLSFpoYkhWbEtUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaV0ZrWlhJdWMydHBjRVpwWld4a0tDazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzF6Wnp0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCVFpYSnBZV3hwZW1WeklIUm9aU0J0WlhOellXZGxJSFJ2SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY21WMGRYSnVJSHNoVldsdWREaEJjbkpoZVgxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1TG5CeWIzUnZkSGx3WlM1elpYSnBZV3hwZW1WQ2FXNWhjbmtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIZHlhWFJsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjaWdwTzF4dUlDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjMlZ5YVdGc2FYcGxRbWx1WVhKNVZHOVhjbWwwWlhJb2RHaHBjeXdnZDNKcGRHVnlLVHRjYmlBZ2NtVjBkWEp1SUhkeWFYUmxjaTVuWlhSU1pYTjFiSFJDZFdabVpYSW9LVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJUWlhKcFlXeHBlbVZ6SUhSb1pTQm5hWFpsYmlCdFpYTnpZV2RsSUhSdklHSnBibUZ5ZVNCa1lYUmhJQ2hwYmlCd2NtOTBiMkoxWmlCM2FYSmxYRzRnS2lCbWIzSnRZWFFwTENCM2NtbDBhVzVuSUhSdklIUm9aU0JuYVhabGJpQkNhVzVoY25sWGNtbDBaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlJRzFsYzNOaFoyVmNiaUFxSUVCd1lYSmhiU0I3SVdwemNHSXVRbWx1WVhKNVYzSnBkR1Z5ZlNCM2NtbDBaWEpjYmlBcUlFQnpkWEJ3Y21WemN5QjdkVzUxYzJWa1RHOWpZV3hXWVhKcFlXSnNaWE45SUdZZ2FYTWdiMjVzZVNCMWMyVmtJR1p2Y2lCdVpYTjBaV1FnYldWemMyRm5aWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUlEMGdablZ1WTNScGIyNG9iV1Z6YzJGblpTd2dkM0pwZEdWeUtTQjdYRzRnSUhaaGNpQm1JRDBnZFc1a1pXWnBibVZrTzF4dUlDQm1JRDBnYldWemMyRm5aUzVuWlhSUVlYUm9UR2x6ZENncE8xeHVJQ0JwWmlBb1ppNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdkM0pwZEdWeUxuZHlhWFJsVUdGamEyVmtTVzUwTXpJb1hHNGdJQ0FnSUNBeExGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwVTNCaGJreHBjM1FvS1R0Y2JpQWdhV1lnS0dZdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVkJoWTJ0bFpFbHVkRE15S0Z4dUlDQWdJQ0FnTWl4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdZZ1BTQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pDaHRaWE56WVdkbExDQXpLU2s3WEc0Z0lHbG1JQ2htSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0IzY21sMFpYSXVkM0pwZEdWVGRISnBibWNvWEc0Z0lDQWdJQ0F6TEZ4dUlDQWdJQ0FnWmx4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWmlBOUlDOHFLaUJBZEhsd1pTQjdjM1J5YVc1bmZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tHMWxjM05oWjJVc0lEUXBLVHRjYmlBZ2FXWWdLR1lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJSGR5YVhSbGNpNTNjbWwwWlZOMGNtbHVaeWhjYmlBZ0lDQWdJRFFzWEc0Z0lDQWdJQ0JtWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUk1aV0ZrYVc1blJHVjBZV05vWldSRGIyMXRaVzUwYzB4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1UzUnlhVzVuS0Z4dUlDQWdJQ0FnTml4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdhVzUwTXpJZ2NHRjBhQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNW5aWFJRWVhSb1RHbHpkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdMeW9xSUVCMGVYQmxJSHNoUVhKeVlYazhiblZ0WW1WeVBuMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJTWlhCbFlYUmxaRVpwWld4a0tIUm9hWE1zSURFcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlNCMllXeDFaVnh1SUNvZ1FISmxkSFZ5YmlCN0lYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJuMGdjbVYwZFhKdWN5QjBhR2x6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZiaTV3Y205MGIzUjVjR1V1YzJWMFVHRjBhRXhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJREVzSUhaaGJIVmxJSHg4SUZ0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2RtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNWhaR1JRWVhSb0lEMGdablZ1WTNScGIyNG9kbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JHYVdWc1pDaDBhR2x6TENBeExDQjJZV3gxWlN3Z2IzQjBYMmx1WkdWNEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkRiR1ZoY25NZ2RHaGxJR3hwYzNRZ2JXRnJhVzVuSUdsMElHVnRjSFI1SUdKMWRDQnViMjR0Ym5Wc2JDNWNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjSEp2ZEc5MGVYQmxMbU5zWldGeVVHRjBhRXhwYzNRZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVUdGMGFFeHBjM1FvVzEwcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlISmxjR1ZoZEdWa0lHbHVkRE15SUhOd1lXNGdQU0F5TzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBHNTFiV0psY2o1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVoyVjBVM0JoYmt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdJVUZ5Y21GNVBHNTFiV0psY2o1OUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUkdhV1ZzWkNoMGFHbHpMQ0F5S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4Ym5WdFltVnlQbjBnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEZOd1lXNU1hWE4wSUQwZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlHcHpjR0l1VFdWemMyRm5aUzV6WlhSR2FXVnNaQ2gwYUdsekxDQXlMQ0IyWVd4MVpTQjhmQ0JiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhaaGJIVmxYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjajE5SUc5d2RGOXBibVJsZUZ4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGIzVnlZMlZEYjJSbFNXNW1ieTVNYjJOaGRHbHZibjBnY21WMGRYSnVjeUIwYUdselhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVlXUmtVM0JoYmlBOUlHWjFibU4wYVc5dUtIWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTWl3Z2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xOd1lXNU1hWE4wSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuTmxkRk53WVc1TWFYTjBLRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCdmNIUnBiMjVoYkNCemRISnBibWNnYkdWaFpHbHVaMTlqYjIxdFpXNTBjeUE5SURNN1hHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNXdjbTkwYjNSNWNHVXVaMlYwVEdWaFpHbHVaME52YlcxbGJuUnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdlM04wY21sdVozMGdLaThnS0dwemNHSXVUV1Z6YzJGblpTNW5aWFJHYVdWc1pGZHBkR2hFWldaaGRXeDBLSFJvYVhNc0lETXNJRndpWENJcEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjR1Y0hKdmRHOTBlWEJsTG5ObGRFeGxZV1JwYm1kRGIyMXRaVzUwY3lBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1YzJWMFJtbGxiR1FvZEdocGN5d2dNeXdnZG1Gc2RXVXBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRU5zWldGeWN5QjBhR1VnWm1sbGJHUWdiV0ZyYVc1bklHbDBJSFZ1WkdWbWFXNWxaQzVjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjR1Y0hKdmRHOTBlWEJsTG1Oc1pXRnlUR1ZoWkdsdVowTnZiVzFsYm5SeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z015d2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjR1Y0hKdmRHOTBlWEJsTG1oaGMweGxZV1JwYm1kRGIyMXRaVzUwY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhSeVlXbHNhVzVuWDJOdmJXMWxiblJ6SUQwZ05EdGNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbkJ5YjNSdmRIbHdaUzVuWlhSVWNtRnBiR2x1WjBOdmJXMWxiblJ6SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUF2S2lvZ1FIUjVjR1VnZTNOMGNtbHVaMzBnS2k4Z0tHcHpjR0l1VFdWemMyRm5aUzVuWlhSR2FXVnNaRmRwZEdoRVpXWmhkV3gwS0hSb2FYTXNJRFFzSUZ3aVhDSXBLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1VEc5allYUnBiMjU5SUhKbGRIVnlibk1nZEdocGMxeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVMjkxY21ObFEyOWtaVWx1Wm04dVRHOWpZWFJwYjI0dWNISnZkRzkwZVhCbExuTmxkRlJ5WVdsc2FXNW5RMjl0YldWdWRITWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExuTmxkRVpwWld4a0tIUm9hWE1zSURRc0lIWmhiSFZsS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRGJHVmhjbk1nZEdobElHWnBaV3hrSUcxaGEybHVaeUJwZENCMWJtUmxabWx1WldRdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNWpiR1ZoY2xSeVlXbHNhVzVuUTI5dGJXVnVkSE1nUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJpNXdjbTkwYjNSNWNHVXVhR0Z6VkhKaGFXeHBibWREYjIxdFpXNTBjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRFFwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nY21Wd1pXRjBaV1FnYzNSeWFXNW5JR3hsWVdScGJtZGZaR1YwWVdOb1pXUmZZMjl0YldWdWRITWdQU0EyTzF4dUlDb2dRSEpsZEhWeWJpQjdJVUZ5Y21GNVBITjBjbWx1Wno1OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVoyVjBUR1ZoWkdsdVowUmxkR0ZqYUdWa1EyOXRiV1Z1ZEhOTWFYTjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQXZLaW9nUUhSNWNHVWdleUZCY25KaGVUeHpkSEpwYm1jK2ZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRkpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTmlrcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN0lVRnljbUY1UEhOMGNtbHVaejU5SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbkJ5YjNSdmRIbHdaUzV6WlhSTVpXRmthVzVuUkdWMFlXTm9aV1JEYjIxdFpXNTBjMHhwYzNRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRFlzSUhaaGJIVmxJSHg4SUZ0ZEtUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TGt4dlkyRjBhVzl1ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dUxuQnliM1J2ZEhsd1pTNWhaR1JNWldGa2FXNW5SR1YwWVdOb1pXUkRiMjF0Wlc1MGN5QTlJR1oxYm1OMGFXOXVLSFpoYkhWbExDQnZjSFJmYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNWhaR1JVYjFKbGNHVmhkR1ZrUm1sbGJHUW9kR2hwY3l3Z05pd2dkbUZzZFdVc0lHOXdkRjlwYm1SbGVDazdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dRMnhsWVhKeklIUm9aU0JzYVhOMElHMWhhMmx1WnlCcGRDQmxiWEIwZVNCaWRYUWdibTl1TFc1MWJHd3VYRzRnS2lCQWNtVjBkWEp1SUhzaGNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE52ZFhKalpVTnZaR1ZKYm1adkxreHZZMkYwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMbkJ5YjNSdmRIbHdaUzVqYkdWaGNreGxZV1JwYm1kRVpYUmhZMmhsWkVOdmJXMWxiblJ6VEdsemRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTV6WlhSTVpXRmthVzVuUkdWMFlXTm9aV1JEYjIxdFpXNTBjMHhwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJSEpsY0dWaGRHVmtJRXh2WTJGMGFXOXVJR3h2WTJGMGFXOXVJRDBnTVR0Y2JpQXFJRUJ5WlhSMWNtNGdleUZCY25KaGVUd2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVQbjFjYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMbkJ5YjNSdmRIbHdaUzVuWlhSTWIyTmhkR2x2Ymt4cGMzUWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pYc2hRWEp5WVhrOElYQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NU1iMk5oZEdsdmJqNTlJQ292SUNoY2JpQWdJQ0JxYzNCaUxrMWxjM05oWjJVdVoyVjBVbVZ3WldGMFpXUlhjbUZ3Y0dWeVJtbGxiR1FvZEdocGN5d2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZMa3h2WTJGMGFXOXVMQ0F4S1NrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzaFFYSnlZWGs4SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2Ymo1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZmU0J5WlhSMWNtNXpJSFJvYVhOY2Jpb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVUyOTFjbU5sUTI5a1pVbHVabTh1Y0hKdmRHOTBlWEJsTG5ObGRFeHZZMkYwYVc5dVRHbHpkQ0E5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwVW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtYnk1TWIyTmhkR2x2YmoxOUlHOXdkRjkyWVd4MVpWeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSTlmU0J2Y0hSZmFXNWtaWGhjYmlBcUlFQnlaWFIxY200Z2V5RndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVUYjNWeVkyVkRiMlJsU1c1bWJ5NXdjbTkwYjNSNWNHVXVZV1JrVEc5allYUnBiMjRnUFNCbWRXNWpkR2x2YmlodmNIUmZkbUZzZFdVc0lHOXdkRjlwYm1SbGVDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtRmtaRlJ2VW1Wd1pXRjBaV1JYY21Gd2NHVnlSbWxsYkdRb2RHaHBjeXdnTVN3Z2IzQjBYM1poYkhWbExDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNHNJRzl3ZEY5cGJtUmxlQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCc2FYTjBJRzFoYTJsdVp5QnBkQ0JsYlhCMGVTQmlkWFFnYm05dUxXNTFiR3d1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGxOdmRYSmpaVU52WkdWSmJtWnZmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxsTnZkWEpqWlVOdlpHVkpibVp2TG5CeWIzUnZkSGx3WlM1amJHVmhja3h2WTJGMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJNYjJOaGRHbHZia3hwYzNRb1cxMHBPMXh1ZlR0Y2JseHVYRzVjYmk4cUtseHVJQ29nVEdsemRDQnZaaUJ5WlhCbFlYUmxaQ0JtYVdWc1pITWdkMmwwYUdsdUlIUm9hWE1nYldWemMyRm5aU0IwZVhCbExseHVJQ29nUUhCeWFYWmhkR1VnZXlGQmNuSmhlVHh1ZFcxaVpYSStmVnh1SUNvZ1FHTnZibk4wWEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1eVpYQmxZWFJsWkVacFpXeGtjMThnUFNCYk1WMDdYRzVjYmx4dVhHNXBaaUFvYW5Od1lpNU5aWE56WVdkbExrZEZUa1ZTUVZSRlgxUlBYMDlDU2tWRFZDa2dlMXh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklIQnliM1J2TGx4dUlDb2dSbWxsYkdRZ2JtRnRaWE1nZEdoaGRDQmhjbVVnY21WelpYSjJaV1FnYVc0Z1NtRjJZVk5qY21sd2RDQmhibVFnZDJsc2JDQmlaU0J5Wlc1aGJXVmtJSFJ2SUhCaVgyNWhiV1V1WEc0Z0tpQlBjSFJwYjI1aGJDQm1hV1ZzWkhNZ2RHaGhkQ0JoY21VZ2JtOTBJSE5sZENCM2FXeHNJR0psSUhObGRDQjBieUIxYm1SbFptbHVaV1F1WEc0Z0tpQlVieUJoWTJObGMzTWdZU0J5WlhObGNuWmxaQ0JtYVdWc1pDQjFjMlVzSUdadmJ5NXdZbDg4Ym1GdFpUNHNJR1ZuTENCbWIyOHVjR0pmWkdWbVlYVnNkQzVjYmlBcUlFWnZjaUIwYUdVZ2JHbHpkQ0J2WmlCeVpYTmxjblpsWkNCdVlXMWxjeUJ3YkdWaGMyVWdjMlZsT2x4dUlDb2dJQ0FnSUc1bGRDOXdjbTkwYnpJdlkyOXRjR2xzWlhJdmFuTXZhVzUwWlhKdVlXd3ZaMlZ1WlhKaGRHOXlMbU5qSTJ0TFpYbDNiM0prTGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdVBYMGdiM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCM2FHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHaGxYRzRnS2lBZ0lDQWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1d2NtOTBiM1I1Y0dVdWRHOVBZbXBsWTNRZ1BTQm1kVzVqZEdsdmJpaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lISmxkSFZ5YmlCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVkRzlQWW1wbFkzUW9iM0IwWDJsdVkyeDFaR1ZKYm5OMFlXNWpaU3dnZEdocGN5azdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVM1JoZEdsaklIWmxjbk5wYjI0Z2IyWWdkR2hsSUh0QWMyVmxJSFJ2VDJKcVpXTjBmU0J0WlhSb2IyUXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU4ZFc1a1pXWnBibVZrZlNCcGJtTnNkV1JsU1c1emRHRnVZMlVnUkdWd2NtVmpZWFJsWkM0Z1YyaGxkR2hsY2lCMGJ5QnBibU5zZFdSbFhHNGdLaUFnSUNBZ2RHaGxJRXBUVUVJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJ5WVc1emFYUnBiMjVoYkNCemIza2djSEp2ZEc4Z2MzVndjRzl5ZERwY2JpQXFJQ0FnSUNCb2RIUndPaTh2WjI5MGJ5OXpiM2t0Y0dGeVlXMHRiV2xuY21GMGFXOXVYRzRnS2lCQWNHRnlZVzBnZXlGd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOTlJRzF6WnlCVWFHVWdiWE5uSUdsdWMzUmhibU5sSUhSdklIUnlZVzV6Wm05eWJTNWNiaUFxSUVCeVpYUjFjbTRnZXlGUFltcGxZM1I5WEc0Z0tpQkFjM1Z3Y0hKbGMzTWdlM1Z1ZFhObFpFeHZZMkZzVm1GeWFXRmliR1Z6ZlNCbUlHbHpJRzl1YkhrZ2RYTmxaQ0JtYjNJZ2JtVnpkR1ZrSUcxbGMzTmhaMlZ6WEc0Z0tpOWNibkJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1MGIwOWlhbVZqZENBOUlHWjFibU4wYVc5dUtHbHVZMngxWkdWSmJuTjBZVzVqWlN3Z2JYTm5LU0I3WEc0Z0lIWmhjaUJtTENCdlltb2dQU0I3WEc0Z0lDQWdZVzV1YjNSaGRHbHZia3hwYzNRNklHcHpjR0l1VFdWemMyRm5aUzUwYjA5aWFtVmpkRXhwYzNRb2JYTm5MbWRsZEVGdWJtOTBZWFJwYjI1TWFYTjBLQ2tzWEc0Z0lDQWdjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWRHOVBZbXBsWTNRc0lHbHVZMngxWkdWSmJuTjBZVzVqWlNsY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxtUmxjMlZ5YVdGc2FYcGxRbWx1WVhKNUlEMGdablZ1WTNScGIyNG9ZbmwwWlhNcElIdGNiaUFnZG1GeUlISmxZV1JsY2lBOUlHNWxkeUJxYzNCaUxrSnBibUZ5ZVZKbFlXUmxjaWhpZVhSbGN5azdYRzRnSUhaaGNpQnRjMmNnUFNCdVpYY2djSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TzF4dUlDQnlaWFIxY200Z2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMbVJsYzJWeWFXRnNhWHBsUW1sdVlYSjVSbkp2YlZKbFlXUmxjaWh0YzJjc0lISmxZV1JsY2lrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1JHVnpaWEpwWVd4cGVtVnpJR0pwYm1GeWVTQmtZWFJoSUNocGJpQndjbTkwYjJKMVppQjNhWEpsSUdadmNtMWhkQ2tnWm5KdmJTQjBhR1ZjYmlBcUlHZHBkbVZ1SUhKbFlXUmxjaUJwYm5SdklIUm9aU0JuYVhabGJpQnRaWE56WVdkbElHOWlhbVZqZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYjMwZ2JYTm5JRlJvWlNCdFpYTnpZV2RsSUc5aWFtVmpkQ0IwYnlCa1pYTmxjbWxoYkdsNlpTQnBiblJ2TGx4dUlDb2dRSEJoY21GdElIc2hhbk53WWk1Q2FXNWhjbmxTWldGa1pYSjlJSEpsWVdSbGNpQlVhR1VnUW1sdVlYSjVVbVZoWkdWeUlIUnZJSFZ6WlM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm05OVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NWtaWE5sY21saGJHbDZaVUpwYm1GeWVVWnliMjFTWldGa1pYSWdQU0JtZFc1amRHbHZiaWh0YzJjc0lISmxZV1JsY2lrZ2UxeHVJQ0IzYUdsc1pTQW9jbVZoWkdWeUxtNWxlSFJHYVdWc1pDZ3BLU0I3WEc0Z0lDQWdhV1lnS0hKbFlXUmxjaTVwYzBWdVpFZHliM1Z3S0NrcElIdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnWm1sbGJHUWdQU0J5WldGa1pYSXVaMlYwUm1sbGJHUk9kVzFpWlhJb0tUdGNiaUFnSUNCemQybDBZMmdnS0dacFpXeGtLU0I3WEc0Z0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVPMXh1SUNBZ0lDQWdjbVZoWkdWeUxuSmxZV1JOWlhOellXZGxLSFpoYkhWbExIQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lrN1hHNGdJQ0FnSUNCdGMyY3VZV1JrUVc1dWIzUmhkR2x2YmloMllXeDFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnY21WaFpHVnlMbk5yYVhCR2FXVnNaQ2dwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdGMyYzdYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2dVMlZ5YVdGc2FYcGxjeUIwYUdVZ2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaU0JtYjNKdFlYUXBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lWVnBiblE0UVhKeVlYbDlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV3Y205MGIzUjVjR1V1YzJWeWFXRnNhWHBsUW1sdVlYSjVJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSFpoY2lCM2NtbDBaWElnUFNCdVpYY2dhbk53WWk1Q2FXNWhjbmxYY21sMFpYSW9LVHRjYmlBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMbk5sY21saGJHbDZaVUpwYm1GeWVWUnZWM0pwZEdWeUtIUm9hWE1zSUhkeWFYUmxjaWs3WEc0Z0lISmxkSFZ5YmlCM2NtbDBaWEl1WjJWMFVtVnpkV3gwUW5WbVptVnlLQ2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nVTJWeWFXRnNhWHBsY3lCMGFHVWdaMmwyWlc0Z2JXVnpjMkZuWlNCMGJ5QmlhVzVoY25rZ1pHRjBZU0FvYVc0Z2NISnZkRzlpZFdZZ2QybHlaVnh1SUNvZ1ptOXliV0YwS1N3Z2QzSnBkR2x1WnlCMGJ5QjBhR1VnWjJsMlpXNGdRbWx1WVhKNVYzSnBkR1Z5TGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2ZlNCdFpYTnpZV2RsWEc0Z0tpQkFjR0Z5WVcwZ2V5RnFjM0JpTGtKcGJtRnllVmR5YVhSbGNuMGdkM0pwZEdWeVhHNGdLaUJBYzNWd2NISmxjM01nZTNWdWRYTmxaRXh2WTJGc1ZtRnlhV0ZpYkdWemZTQm1JR2x6SUc5dWJIa2dkWE5sWkNCbWIzSWdibVZ6ZEdWa0lHMWxjM05oWjJWelhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NXpaWEpwWVd4cGVtVkNhVzVoY25sVWIxZHlhWFJsY2lBOUlHWjFibU4wYVc5dUtHMWxjM05oWjJVc0lIZHlhWFJsY2lrZ2UxeHVJQ0IyWVhJZ1ppQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ1ppQTlJRzFsYzNOaFoyVXVaMlYwUVc1dWIzUmhkR2x2Ymt4cGMzUW9LVHRjYmlBZ2FXWWdLR1l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpWSmxjR1ZoZEdWa1RXVnpjMkZuWlNoY2JpQWdJQ0FnSURFc1hHNGdJQ0FnSUNCbUxGeHVJQ0FnSUNBZ2NISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjR1YzJWeWFXRnNhWHBsUW1sdVlYSjVWRzlYY21sMFpYSmNiaUFnSUNBcE8xeHVJQ0I5WEc1OU8xeHVYRzVjYmx4dUx5b3FYRzRnS2lCTWFYTjBJRzltSUhKbGNHVmhkR1ZrSUdacFpXeGtjeUIzYVhSb2FXNGdkR2hwY3lCdFpYTnpZV2RsSUhSNWNHVXVYRzRnS2lCQWNISnBkbUYwWlNCN0lVRnljbUY1UEc1MWJXSmxjajU5WEc0Z0tpQkFZMjl1YzNSY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjbVZ3WldGMFpXUkdhV1ZzWkhOZklEMGdXekZkTzF4dVhHNWNibHh1YVdZZ0tHcHpjR0l1VFdWemMyRm5aUzVIUlU1RlVrRlVSVjlVVDE5UFFrcEZRMVFwSUh0Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ3Y205MGJ5NWNiaUFxSUVacFpXeGtJRzVoYldWeklIUm9ZWFFnWVhKbElISmxjMlZ5ZG1Wa0lHbHVJRXBoZG1GVFkzSnBjSFFnWVc1a0lIZHBiR3dnWW1VZ2NtVnVZVzFsWkNCMGJ5QndZbDl1WVcxbExseHVJQ29nVDNCMGFXOXVZV3dnWm1sbGJHUnpJSFJvWVhRZ1lYSmxJRzV2ZENCelpYUWdkMmxzYkNCaVpTQnpaWFFnZEc4Z2RXNWtaV1pwYm1Wa0xseHVJQ29nVkc4Z1lXTmpaWE56SUdFZ2NtVnpaWEoyWldRZ1ptbGxiR1FnZFhObExDQm1iMjh1Y0dKZlBHNWhiV1UrTENCbFp5d2dabTl2TG5CaVgyUmxabUYxYkhRdVhHNGdLaUJHYjNJZ2RHaGxJR3hwYzNRZ2IyWWdjbVZ6WlhKMlpXUWdibUZ0WlhNZ2NHeGxZWE5sSUhObFpUcGNiaUFxSUNBZ0lDQnVaWFF2Y0hKdmRHOHlMMk52YlhCcGJHVnlMMnB6TDJsdWRHVnlibUZzTDJkbGJtVnlZWFJ2Y2k1all5TnJTMlY1ZDI5eVpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhiajE5SUc5d2RGOXBibU5zZFdSbFNXNXpkR0Z1WTJVZ1JHVndjbVZqWVhSbFpDNGdkMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJvWlZ4dUlDb2dJQ0FnSUVwVFVFSWdhVzV6ZEdGdVkyVWdabTl5SUhSeVlXNXphWFJwYjI1aGJDQnpiM2tnY0hKdmRHOGdjM1Z3Y0c5eWREcGNiaUFxSUNBZ0lDQm9kSFJ3T2k4dloyOTBieTl6YjNrdGNHRnlZVzB0YldsbmNtRjBhVzl1WEc0Z0tpQkFjbVYwZFhKdUlIc2hUMkpxWldOMGZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTV3Y205MGIzUjVjR1V1ZEc5UFltcGxZM1FnUFNCbWRXNWpkR2x2YmlodmNIUmZhVzVqYkhWa1pVbHVjM1JoYm1ObEtTQjdYRzRnSUhKbGRIVnliaUJ3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNTBiMDlpYW1WamRDaHZjSFJmYVc1amJIVmtaVWx1YzNSaGJtTmxMQ0IwYUdsektUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2RtVnljMmx2YmlCdlppQjBhR1VnZTBCelpXVWdkRzlQWW1wbFkzUjlJRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibngxYm1SbFptbHVaV1I5SUdsdVkyeDFaR1ZKYm5OMFlXNWpaU0JFWlhCeVpXTmhkR1ZrTGlCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdWY2JpQXFJQ0FnSUNCMGFHVWdTbE5RUWlCcGJuTjBZVzVqWlNCbWIzSWdkSEpoYm5OcGRHbHZibUZzSUhOdmVTQndjbTkwYnlCemRYQndiM0owT2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTluYjNSdkwzTnZlUzF3WVhKaGJTMXRhV2R5WVhScGIyNWNiaUFxSUVCd1lYSmhiU0I3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVmU0J0YzJjZ1ZHaGxJRzF6WnlCcGJuTjBZVzVqWlNCMGJ5QjBjbUZ1YzJadmNtMHVYRzRnS2lCQWNtVjBkWEp1SUhzaFQySnFaV04wZlZ4dUlDb2dRSE4xY0hCeVpYTnpJSHQxYm5WelpXUk1iMk5oYkZaaGNtbGhZbXhsYzMwZ1ppQnBjeUJ2Ym14NUlIVnpaV1FnWm05eUlHNWxjM1JsWkNCdFpYTnpZV2RsYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNTBiMDlpYW1WamRDQTlJR1oxYm1OMGFXOXVLR2x1WTJ4MVpHVkpibk4wWVc1alpTd2diWE5uS1NCN1hHNGdJSFpoY2lCbUxDQnZZbW9nUFNCN1hHNGdJQ0FnY0dGMGFFeHBjM1E2SUNobUlEMGdhbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvYlhObkxDQXhLU2tnUFQwZ2JuVnNiQ0EvSUhWdVpHVm1hVzVsWkNBNklHWXNYRzRnSUNBZ2MyOTFjbU5sUm1sc1pUb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBeUtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdZc1hHNGdJQ0FnWW1WbmFXNDZJQ2htSUQwZ2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzF6Wnl3Z015a3BJRDA5SUc1MWJHd2dQeUIxYm1SbFptbHVaV1FnT2lCbUxGeHVJQ0FnSUdWdVpEb2dLR1lnUFNCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9iWE5uTENBMEtTa2dQVDBnYm5Wc2JDQS9JSFZ1WkdWbWFXNWxaQ0E2SUdaY2JpQWdmVHRjYmx4dUlDQnBaaUFvYVc1amJIVmtaVWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdiMkpxTGlScWMzQmlUV1Z6YzJGblpVbHVjM1JoYm1ObElEMGdiWE5uTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ2WW1vN1hHNTlPMXh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dSR1Z6WlhKcFlXeHBlbVZ6SUdKcGJtRnllU0JrWVhSaElDaHBiaUJ3Y205MGIySjFaaUIzYVhKbElHWnZjbTFoZENrdVhHNGdLaUJBY0dGeVlXMGdlMnB6Y0dJdVFubDBaVk52ZFhKalpYMGdZbmwwWlhNZ1ZHaGxJR0o1ZEdWeklIUnZJR1JsYzJWeWFXRnNhWHBsTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZWeHVJQ292WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTVrWlhObGNtbGhiR2w2WlVKcGJtRnllU0E5SUdaMWJtTjBhVzl1S0dKNWRHVnpLU0I3WEc0Z0lIWmhjaUJ5WldGa1pYSWdQU0J1WlhjZ2FuTndZaTVDYVc1aGNubFNaV0ZrWlhJb1lubDBaWE1wTzF4dUlDQjJZWElnYlhObklEMGdibVYzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVPMXh1SUNCeVpYUjFjbTRnY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVaR1Z6WlhKcFlXeHBlbVZDYVc1aGNubEdjbTl0VW1WaFpHVnlLRzF6Wnl3Z2NtVmhaR1Z5S1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCRVpYTmxjbWxoYkdsNlpYTWdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVVnWm05eWJXRjBLU0JtY205dElIUm9aVnh1SUNvZ1oybDJaVzRnY21WaFpHVnlJR2x1ZEc4Z2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2IySnFaV04wTGx4dUlDb2dRSEJoY21GdElIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlHMXpaeUJVYUdVZ2JXVnpjMkZuWlNCdlltcGxZM1FnZEc4Z1pHVnpaWEpwWVd4cGVtVWdhVzUwYnk1Y2JpQXFJRUJ3WVhKaGJTQjdJV3B6Y0dJdVFtbHVZWEo1VW1WaFpHVnlmU0J5WldGa1pYSWdWR2hsSUVKcGJtRnllVkpsWVdSbGNpQjBieUIxYzJVdVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1TG1SbGMyVnlhV0ZzYVhwbFFtbHVZWEo1Um5KdmJWSmxZV1JsY2lBOUlHWjFibU4wYVc5dUtHMXpaeXdnY21WaFpHVnlLU0I3WEc0Z0lIZG9hV3hsSUNoeVpXRmtaWEl1Ym1WNGRFWnBaV3hrS0NrcElIdGNiaUFnSUNCcFppQW9jbVZoWkdWeUxtbHpSVzVrUjNKdmRYQW9LU2tnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQm1hV1ZzWkNBOUlISmxZV1JsY2k1blpYUkdhV1ZzWkU1MWJXSmxjaWdwTzF4dUlDQWdJSE4zYVhSamFDQW9abWxsYkdRcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1Z6SUQwZ0x5b3FJRUIwZVhCbElIc2hRWEp5WVhrOGJuVnRZbVZ5UG4wZ0tpOGdLSEpsWVdSbGNpNXBjMFJsYkdsdGFYUmxaQ2dwSUQ4Z2NtVmhaR1Z5TG5KbFlXUlFZV05yWldSSmJuUXpNaWdwSURvZ1czSmxZV1JsY2k1eVpXRmtTVzUwTXpJb0tWMHBPMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0IyWVd4MVpYTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2JYTm5MbUZrWkZCaGRHZ29kbUZzZFdWelcybGRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9jbVZoWkdWeUxuSmxZV1JUZEhKcGJtY29LU2s3WEc0Z0lDQWdJQ0J0YzJjdWMyVjBVMjkxY21ObFJtbHNaU2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQjJZWElnZG1Gc2RXVWdQU0F2S2lvZ1FIUjVjR1VnZTI1MWJXSmxjbjBnS2k4Z0tISmxZV1JsY2k1eVpXRmtTVzUwTXpJb0tTazdYRzRnSUNBZ0lDQnRjMmN1YzJWMFFtVm5hVzRvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHlaV0ZrWlhJdWNtVmhaRWx1ZERNeUtDa3BPMXh1SUNBZ0lDQWdiWE5uTG5ObGRFVnVaQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdjbVZoWkdWeUxuTnJhWEJHYVdWc1pDZ3BPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ0YzJjN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1UyVnlhV0ZzYVhwbGN5QjBhR1VnYldWemMyRm5aU0IwYnlCaWFXNWhjbmtnWkdGMFlTQW9hVzRnY0hKdmRHOWlkV1lnZDJseVpTQm1iM0p0WVhRcExseHVJQ29nUUhKbGRIVnliaUI3SVZWcGJuUTRRWEp5WVhsOVhHNGdLaTljYm5CeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMbkJ5YjNSdmRIbHdaUzV6WlhKcFlXeHBlbVZDYVc1aGNua2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUhkeWFYUmxjaUE5SUc1bGR5QnFjM0JpTGtKcGJtRnllVmR5YVhSbGNpZ3BPMXh1SUNCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVRVzV1YjNSaGRHbHZiaTV6WlhKcFlXeHBlbVZDYVc1aGNubFViMWR5YVhSbGNpaDBhR2x6TENCM2NtbDBaWElwTzF4dUlDQnlaWFIxY200Z2QzSnBkR1Z5TG1kbGRGSmxjM1ZzZEVKMVptWmxjaWdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUZObGNtbGhiR2w2WlhNZ2RHaGxJR2RwZG1WdUlHMWxjM05oWjJVZ2RHOGdZbWx1WVhKNUlHUmhkR0VnS0dsdUlIQnliM1J2WW5WbUlIZHBjbVZjYmlBcUlHWnZjbTFoZENrc0lIZHlhWFJwYm1jZ2RHOGdkR2hsSUdkcGRtVnVJRUpwYm1GeWVWZHlhWFJsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnRaWE56WVdkbFhHNGdLaUJBY0dGeVlXMGdleUZxYzNCaUxrSnBibUZ5ZVZkeWFYUmxjbjBnZDNKcGRHVnlYRzRnS2lCQWMzVndjSEpsYzNNZ2UzVnVkWE5sWkV4dlkyRnNWbUZ5YVdGaWJHVnpmU0JtSUdseklHOXViSGtnZFhObFpDQm1iM0lnYm1WemRHVmtJRzFsYzNOaFoyVnpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1TG5ObGNtbGhiR2w2WlVKcGJtRnllVlJ2VjNKcGRHVnlJRDBnWm5WdVkzUnBiMjRvYldWemMyRm5aU3dnZDNKcGRHVnlLU0I3WEc0Z0lIWmhjaUJtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0JtSUQwZ2JXVnpjMkZuWlM1blpYUlFZWFJvVEdsemRDZ3BPMXh1SUNCcFppQW9aaTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnZDNKcGRHVnlMbmR5YVhSbFVHRmphMlZrU1c1ME16SW9YRzRnSUNBZ0lDQXhMRnh1SUNBZ0lDQWdabHh1SUNBZ0lDazdYRzRnSUgxY2JpQWdaaUE5SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0cxbGMzTmhaMlVzSURJcEtUdGNiaUFnYVdZZ0tHWWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIZHlhWFJsY2k1M2NtbDBaVk4wY21sdVp5aGNiaUFnSUNBZ0lESXNYRzRnSUNBZ0lDQm1YRzRnSUNBZ0tUdGNiaUFnZlZ4dUlDQm1JRDBnTHlvcUlFQjBlWEJsSUh0dWRXMWlaWEo5SUNvdklDaHFjM0JpTGsxbGMzTmhaMlV1WjJWMFJtbGxiR1FvYldWemMyRm5aU3dnTXlrcE8xeHVJQ0JwWmlBb1ppQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2QzSnBkR1Z5TG5keWFYUmxTVzUwTXpJb1hHNGdJQ0FnSUNBekxGeHVJQ0FnSUNBZ1pseHVJQ0FnSUNrN1hHNGdJSDFjYmlBZ1ppQTlJQzhxS2lCQWRIbHdaU0I3Ym5WdFltVnlmU0FxTHlBb2FuTndZaTVOWlhOellXZGxMbWRsZEVacFpXeGtLRzFsYzNOaFoyVXNJRFFwS1R0Y2JpQWdhV1lnS0dZZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUhkeWFYUmxjaTUzY21sMFpVbHVkRE15S0Z4dUlDQWdJQ0FnTkN4Y2JpQWdJQ0FnSUdaY2JpQWdJQ0FwTzF4dUlDQjlYRzU5TzF4dVhHNWNiaThxS2x4dUlDb2djbVZ3WldGMFpXUWdhVzUwTXpJZ2NHRjBhQ0E5SURFN1hHNGdLaUJBY21WMGRYSnVJSHNoUVhKeVlYazhiblZ0WW1WeVBuMWNiaUFxTDF4dWNISnZkRzh1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma2RsYm1WeVlYUmxaRU52WkdWSmJtWnZMa0Z1Ym05MFlYUnBiMjR1Y0hKdmRHOTBlWEJsTG1kbGRGQmhkR2hNYVhOMElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlBdktpb2dRSFI1Y0dVZ2V5RkJjbkpoZVR4dWRXMWlaWEkrZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRGSmxjR1ZoZEdWa1JtbGxiR1FvZEdocGN5d2dNU2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3SVVGeWNtRjVQRzUxYldKbGNqNTlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVjMlYwVUdGMGFFeHBjM1FnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2FuTndZaTVOWlhOellXZGxMbk5sZEVacFpXeGtLSFJvYVhNc0lERXNJSFpoYkhWbElIeDhJRnRkS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlQWDBnYjNCMFgybHVaR1Y0WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVlXUmtVR0YwYUNBOUlHWjFibU4wYVc5dUtIWmhiSFZsTENCdmNIUmZhVzVrWlhncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1aFpHUlViMUpsY0dWaGRHVmtSbWxsYkdRb2RHaHBjeXdnTVN3Z2RtRnNkV1VzSUc5d2RGOXBibVJsZUNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQnNhWE4wSUcxaGEybHVaeUJwZENCbGJYQjBlU0JpZFhRZ2JtOXVMVzUxYkd3dVhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVZMnhsWVhKUVlYUm9UR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJRWVhSb1RHbHpkQ2hiWFNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2MzUnlhVzVuSUhOdmRYSmpaVjltYVd4bElEMGdNanRjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEZOdmRYSmpaVVpwYkdVZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUM4cUtpQkFkSGx3WlNCN2MzUnlhVzVuZlNBcUx5QW9hbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrVjJsMGFFUmxabUYxYkhRb2RHaHBjeXdnTWl3Z1hDSmNJaWtwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEZOdmRYSmpaVVpwYkdVZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG5ObGRFWnBaV3hrS0hSb2FYTXNJRElzSUhaaGJIVmxLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJEYkdWaGNuTWdkR2hsSUdacFpXeGtJRzFoYTJsdVp5QnBkQ0IxYm1SbFptbHVaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI1OUlISmxkSFZ5Ym5NZ2RHaHBjMXh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdVkyeGxZWEpUYjNWeVkyVkdhV3hsSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUJxYzNCaUxrMWxjM05oWjJVdWMyVjBSbWxsYkdRb2RHaHBjeXdnTWl3Z2RXNWtaV1pwYm1Wa0tUdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaHBjeUJtYVdWc1pDQnBjeUJ6WlhRdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNvdlhHNXdjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymk1d2NtOTBiM1I1Y0dVdWFHRnpVMjkxY21ObFJtbHNaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0J5WlhSMWNtNGdhbk53WWk1TlpYTnpZV2RsTG1kbGRFWnBaV3hrS0hSb2FYTXNJRElwSUNFOUlHNTFiR3c3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nYjNCMGFXOXVZV3dnYVc1ME16SWdZbVZuYVc0Z1BTQXpPMXh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVaMlYwUW1WbmFXNGdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdjbVYwZFhKdUlDOHFLaUJBZEhsd1pTQjdiblZ0WW1WeWZTQXFMeUFvYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a1YybDBhRVJsWm1GMWJIUW9kR2hwY3l3Z015d2dNQ2twTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IyWVd4MVpWeHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbk5sZEVKbFoybHVJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJHYVdWc1pDaDBhR2x6TENBekxDQjJZV3gxWlNrN1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ1EyeGxZWEp6SUhSb1pTQm1hV1ZzWkNCdFlXdHBibWNnYVhRZ2RXNWtaV1pwYm1Wa0xseHVJQ29nUUhKbGRIVnliaUI3SVhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVmU0J5WlhSMWNtNXpJSFJvYVhOY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbU5zWldGeVFtVm5hVzRnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0F6TENCMWJtUmxabWx1WldRcE8xeHVmVHRjYmx4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHbHpJR1pwWld4a0lHbHpJSE5sZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTVCYm01dmRHRjBhVzl1TG5CeWIzUnZkSGx3WlM1b1lYTkNaV2RwYmlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnYW5Od1lpNU5aWE56WVdkbExtZGxkRVpwWld4a0tIUm9hWE1zSURNcElDRTlJRzUxYkd3N1hHNTlPMXh1WEc1Y2JpOHFLbHh1SUNvZ2IzQjBhVzl1WVd3Z2FXNTBNeklnWlc1a0lEMGdORHRjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQXFMMXh1Y0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNHVjSEp2ZEc5MGVYQmxMbWRsZEVWdVpDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z0x5b3FJRUIwZVhCbElIdHVkVzFpWlhKOUlDb3ZJQ2hxYzNCaUxrMWxjM05oWjJVdVoyVjBSbWxsYkdSWGFYUm9SR1ZtWVhWc2RDaDBhR2x6TENBMExDQXdLU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNTlJSEpsZEhWeWJuTWdkR2hwYzF4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVjMlYwUlc1a0lEMGdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnY21WMGRYSnVJR3B6Y0dJdVRXVnpjMkZuWlM1elpYUkdhV1ZzWkNoMGFHbHpMQ0EwTENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUTJ4bFlYSnpJSFJvWlNCbWFXVnNaQ0J0WVd0cGJtY2dhWFFnZFc1a1pXWnBibVZrTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dWZTQnlaWFIxY201eklIUm9hWE5jYmlBcUwxeHVjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2TGtGdWJtOTBZWFJwYjI0dWNISnZkRzkwZVhCbExtTnNaV0Z5Ulc1a0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVjMlYwUm1sbGJHUW9kR2hwY3l3Z05Dd2dkVzVrWldacGJtVmtLVHRjYm4wN1hHNWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSGRvWlhSb1pYSWdkR2hwY3lCbWFXVnNaQ0JwY3lCelpYUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDb3ZYRzV3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJpNXdjbTkwYjNSNWNHVXVhR0Z6Ulc1a0lEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lISmxkSFZ5YmlCcWMzQmlMazFsYzNOaFoyVXVaMlYwUm1sbGJHUW9kR2hwY3l3Z05Da2dJVDBnYm5Wc2JEdGNibjA3WEc1Y2JseHVMeW9xWEc0Z0tpQnlaWEJsWVhSbFpDQkJibTV2ZEdGMGFXOXVJR0Z1Ym05MFlYUnBiMjRnUFNBeE8xeHVJQ29nUUhKbGRIVnliaUI3SVVGeWNtRjVQQ0Z3Y205MGJ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVIyVnVaWEpoZEdWa1EyOWtaVWx1Wm04dVFXNXViM1JoZEdsdmJqNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV3Y205MGIzUjVjR1V1WjJWMFFXNXViM1JoZEdsdmJreHBjM1FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnY21WMGRYSnVJQzhxS2lCQWRIbHdaWHNoUVhKeVlYazhJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYnk1QmJtNXZkR0YwYVc5dVBuMGdLaThnS0Z4dUlDQWdJR3B6Y0dJdVRXVnpjMkZuWlM1blpYUlNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Yml3Z01Ta3BPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdJVUZ5Y21GNVBDRndjbTkwYnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UjJWdVpYSmhkR1ZrUTI5a1pVbHVabTh1UVc1dWIzUmhkR2x2Ymo1OUlIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIc2hjSEp2ZEc4dVoyOXZaMnhsTG5CeWIzUnZZblZtTGtkbGJtVnlZWFJsWkVOdlpHVkpibVp2ZlNCeVpYUjFjbTV6SUhSb2FYTmNiaW92WEc1d2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSMlZ1WlhKaGRHVmtRMjlrWlVsdVptOHVjSEp2ZEc5MGVYQmxMbk5sZEVGdWJtOTBZWFJwYjI1TWFYTjBJRDBnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ2NtVjBkWEp1SUdwemNHSXVUV1Z6YzJGblpTNXpaWFJTWlhCbFlYUmxaRmR5WVhCd1pYSkdhV1ZzWkNoMGFHbHpMQ0F4TENCMllXeDFaU2s3WEc1OU8xeHVYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNDlmU0J2Y0hSZmRtRnNkV1ZjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5UFgwZ2IzQjBYMmx1WkdWNFhHNGdLaUJBY21WMGRYSnVJSHNoY0hKdmRHOHVaMjl2WjJ4bExuQnliM1J2WW5WbUxrZGxibVZ5WVhSbFpFTnZaR1ZKYm1adkxrRnVibTkwWVhScGIyNTlYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV3Y205MGIzUjVjR1V1WVdSa1FXNXViM1JoZEdsdmJpQTlJR1oxYm1OMGFXOXVLRzl3ZEY5MllXeDFaU3dnYjNCMFgybHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnFjM0JpTGsxbGMzTmhaMlV1WVdSa1ZHOVNaWEJsWVhSbFpGZHlZWEJ3WlhKR2FXVnNaQ2gwYUdsekxDQXhMQ0J2Y0hSZmRtRnNkV1VzSUhCeWIzUnZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUhaVzVsY21GMFpXUkRiMlJsU1c1bWJ5NUJibTV2ZEdGMGFXOXVMQ0J2Y0hSZmFXNWtaWGdwTzF4dWZUdGNibHh1WEc0dktpcGNiaUFxSUVOc1pXRnljeUIwYUdVZ2JHbHpkQ0J0WVd0cGJtY2dhWFFnWlcxd2RIa2dZblYwSUc1dmJpMXVkV3hzTGx4dUlDb2dRSEpsZEhWeWJpQjdJWEJ5YjNSdkxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWxjbUYwWldSRGIyUmxTVzVtYjMwZ2NtVjBkWEp1Y3lCMGFHbHpYRzRnS2k5Y2JuQnliM1J2TG1kdmIyZHNaUzV3Y205MGIySjFaaTVIWlc1bGNtRjBaV1JEYjJSbFNXNW1ieTV3Y205MGIzUjVjR1V1WTJ4bFlYSkJibTV2ZEdGMGFXOXVUR2x6ZENBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXpaWFJCYm01dmRHRjBhVzl1VEdsemRDaGJYU2s3WEc1OU8xeHVYRzVjYm1kdmIyY3ViMkpxWldOMExtVjRkR1Z1WkNobGVIQnZjblJ6TENCd2NtOTBieTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXBPMXh1SWl3aUx5OGdjR0ZqYTJGblpUb2djSEp2ZEc4dWNuQmpMbll4WEc0dkx5Qm1hV3hsT2lCd2NtOTBieTl5Y0dNdmRqRXZZWFYwYUM1d2NtOTBiMXh1WEc1MllYSWdjSEp2ZEc5ZmNuQmpYM1l4WDJGMWRHaGZjR0lnUFNCeVpYRjFhWEpsS0Z3aUxpNHZMaTR2TGk0dmNISnZkRzh2Y25CakwzWXhMMkYxZEdoZmNHSmNJaWs3WEc1MllYSWdaM0p3WXlBOUlISmxjWFZwY21Vb1hDSkFhVzF3Y205aVlXSnNaUzFsYm1jdlozSndZeTEzWldKY0lpa3VaM0p3WXp0Y2JseHVkbUZ5SUVGMWRHaFRaWEoyYVdObElEMGdLR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdablZ1WTNScGIyNGdRWFYwYUZObGNuWnBZMlVvS1NCN2ZWeHVJQ0JCZFhSb1UyVnlkbWxqWlM1elpYSjJhV05sVG1GdFpTQTlJRndpY0hKdmRHOHVjbkJqTG5ZeExrRjFkR2hUWlhKMmFXTmxYQ0k3WEc0Z0lISmxkSFZ5YmlCQmRYUm9VMlZ5ZG1salpUdGNibjBvS1NrN1hHNWNia0YxZEdoVFpYSjJhV05sTGtGMWRHaGxiblJwWTJGMFpTQTlJSHRjYmlBZ2JXVjBhRzlrVG1GdFpUb2dYQ0pCZFhSb1pXNTBhV05oZEdWY0lpeGNiaUFnYzJWeWRtbGpaVG9nUVhWMGFGTmxjblpwWTJVc1hHNGdJSEpsY1hWbGMzUlRkSEpsWVcwNklHWmhiSE5sTEZ4dUlDQnlaWE53YjI1elpWTjBjbVZoYlRvZ1ptRnNjMlVzWEc0Z0lISmxjWFZsYzNSVWVYQmxPaUJ3Y205MGIxOXljR05mZGpGZllYVjBhRjl3WWk1QmRYUm9aVzUwYVdOaGRHVlNaWEYxWlhOMExGeHVJQ0J5WlhOd2IyNXpaVlI1Y0dVNklIQnliM1J2WDNKd1kxOTJNVjloZFhSb1gzQmlMa0YxZEdobGJuUnBZMkYwWlZKbGMzQnZibk5sWEc1OU8xeHVYRzVsZUhCdmNuUnpMa0YxZEdoVFpYSjJhV05sSUQwZ1FYVjBhRk5sY25acFkyVTdYRzVjYm1aMWJtTjBhVzl1SUVGMWRHaFRaWEoyYVdObFEyeHBaVzUwS0hObGNuWnBZMlZJYjNOMExDQnZjSFJwYjI1ektTQjdYRzRnSUhSb2FYTXVjMlZ5ZG1salpVaHZjM1FnUFNCelpYSjJhV05sU0c5emREdGNiaUFnZEdocGN5NXZjSFJwYjI1eklEMGdiM0IwYVc5dWN5QjhmQ0I3ZlR0Y2JuMWNibHh1UVhWMGFGTmxjblpwWTJWRGJHbGxiblF1Y0hKdmRHOTBlWEJsTG1GMWRHaGxiblJwWTJGMFpTQTlJR1oxYm1OMGFXOXVJR0YxZEdobGJuUnBZMkYwWlNoeVpYRjFaWE4wVFdWemMyRm5aU3dnYldWMFlXUmhkR0VzSUdOaGJHeGlZV05yS1NCN1hHNGdJR2xtSUNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvSUQwOVBTQXlLU0I3WEc0Z0lDQWdZMkZzYkdKaFkyc2dQU0JoY21kMWJXVnVkSE5iTVYwN1hHNGdJSDFjYmlBZ2RtRnlJR05zYVdWdWRDQTlJR2R5Y0dNdWRXNWhjbmtvUVhWMGFGTmxjblpwWTJVdVFYVjBhR1Z1ZEdsallYUmxMQ0I3WEc0Z0lDQWdjbVZ4ZFdWemREb2djbVZ4ZFdWemRFMWxjM05oWjJVc1hHNGdJQ0FnYUc5emREb2dkR2hwY3k1elpYSjJhV05sU0c5emRDeGNiaUFnSUNCdFpYUmhaR0YwWVRvZ2JXVjBZV1JoZEdFc1hHNGdJQ0FnZEhKaGJuTndiM0owT2lCMGFHbHpMbTl3ZEdsdmJuTXVkSEpoYm5Od2IzSjBMRnh1SUNBZ0lHUmxZblZuT2lCMGFHbHpMbTl3ZEdsdmJuTXVaR1ZpZFdjc1hHNGdJQ0FnYjI1RmJtUTZJR1oxYm1OMGFXOXVJQ2h5WlhOd2IyNXpaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlM1emRHRjBkWE1nSVQwOUlHZHljR011UTI5a1pTNVBTeWtnZTF4dUlDQWdJQ0FnSUNBZ0lIWmhjaUJsY25JZ1BTQnVaWGNnUlhKeWIzSW9jbVZ6Y0c5dWMyVXVjM1JoZEhWelRXVnpjMkZuWlNrN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5TG1OdlpHVWdQU0J5WlhOd2IyNXpaUzV6ZEdGMGRYTTdYRzRnSUNBZ0lDQWdJQ0FnWlhKeUxtMWxkR0ZrWVhSaElEMGdjbVZ6Y0c5dWMyVXVkSEpoYVd4bGNuTTdYRzRnSUNBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNvWlhKeUxDQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5aHVkV3hzTENCeVpYTndiMjV6WlM1dFpYTnpZV2RsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmU2s3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnWTJGdVkyVnNPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCallXeHNZbUZqYXlBOUlHNTFiR3c3WEc0Z0lDQWdJQ0JqYkdsbGJuUXVZMnh2YzJVb0tUdGNiaUFnSUNCOVhHNGdJSDA3WEc1OU8xeHVYRzVsZUhCdmNuUnpMa0YxZEdoVFpYSjJhV05sUTJ4cFpXNTBJRDBnUVhWMGFGTmxjblpwWTJWRGJHbGxiblE3WEc1Y2JuWmhjaUJGZUhSbGNtNWhiRUYxZEdoVFpYSjJhV05sSUQwZ0tHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ1puVnVZM1JwYjI0Z1JYaDBaWEp1WVd4QmRYUm9VMlZ5ZG1salpTZ3BJSHQ5WEc0Z0lFVjRkR1Z5Ym1Gc1FYVjBhRk5sY25acFkyVXVjMlZ5ZG1salpVNWhiV1VnUFNCY0luQnliM1J2TG5Kd1l5NTJNUzVGZUhSbGNtNWhiRUYxZEdoVFpYSjJhV05sWENJN1hHNGdJSEpsZEhWeWJpQkZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxPMXh1ZlNncEtUdGNibHh1UlhoMFpYSnVZV3hCZFhSb1UyVnlkbWxqWlM1QmRYUm9aVzUwYVdOaGRHVlVieUE5SUh0Y2JpQWdiV1YwYUc5a1RtRnRaVG9nWENKQmRYUm9aVzUwYVdOaGRHVlViMXdpTEZ4dUlDQnpaWEoyYVdObE9pQkZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxMRnh1SUNCeVpYRjFaWE4wVTNSeVpXRnRPaUJtWVd4elpTeGNiaUFnY21WemNHOXVjMlZUZEhKbFlXMDZJR1poYkhObExGeHVJQ0J5WlhGMVpYTjBWSGx3WlRvZ2NISnZkRzlmY25CalgzWXhYMkYxZEdoZmNHSXVRWFYwYUdWdWRHbGpZWFJsVkc5U1pYRjFaWE4wTEZ4dUlDQnlaWE53YjI1elpWUjVjR1U2SUhCeWIzUnZYM0p3WTE5Mk1WOWhkWFJvWDNCaUxrRjFkR2hsYm5ScFkyRjBaVlJ2VW1WemNHOXVjMlZjYm4wN1hHNWNibVY0Y0c5eWRITXVSWGgwWlhKdVlXeEJkWFJvVTJWeWRtbGpaU0E5SUVWNGRHVnlibUZzUVhWMGFGTmxjblpwWTJVN1hHNWNibVoxYm1OMGFXOXVJRVY0ZEdWeWJtRnNRWFYwYUZObGNuWnBZMlZEYkdsbGJuUW9jMlZ5ZG1salpVaHZjM1FzSUc5d2RHbHZibk1wSUh0Y2JpQWdkR2hwY3k1elpYSjJhV05sU0c5emRDQTlJSE5sY25acFkyVkliM04wTzF4dUlDQjBhR2x6TG05d2RHbHZibk1nUFNCdmNIUnBiMjV6SUh4OElIdDlPMXh1ZlZ4dVhHNUZlSFJsY201aGJFRjFkR2hUWlhKMmFXTmxRMnhwWlc1MExuQnliM1J2ZEhsd1pTNWhkWFJvWlc1MGFXTmhkR1ZVYnlBOUlHWjFibU4wYVc5dUlHRjFkR2hsYm5ScFkyRjBaVlJ2S0hKbGNYVmxjM1JOWlhOellXZGxMQ0J0WlhSaFpHRjBZU3dnWTJGc2JHSmhZMnNwSUh0Y2JpQWdhV1lnS0dGeVozVnRaVzUwY3k1c1pXNW5kR2dnUFQwOUlESXBJSHRjYmlBZ0lDQmpZV3hzWW1GamF5QTlJR0Z5WjNWdFpXNTBjMXN4WFR0Y2JpQWdmVnh1SUNCMllYSWdZMnhwWlc1MElEMGdaM0p3WXk1MWJtRnllU2hGZUhSbGNtNWhiRUYxZEdoVFpYSjJhV05sTGtGMWRHaGxiblJwWTJGMFpWUnZMQ0I3WEc0Z0lDQWdjbVZ4ZFdWemREb2djbVZ4ZFdWemRFMWxjM05oWjJVc1hHNGdJQ0FnYUc5emREb2dkR2hwY3k1elpYSjJhV05sU0c5emRDeGNiaUFnSUNCdFpYUmhaR0YwWVRvZ2JXVjBZV1JoZEdFc1hHNGdJQ0FnZEhKaGJuTndiM0owT2lCMGFHbHpMbTl3ZEdsdmJuTXVkSEpoYm5Od2IzSjBMRnh1SUNBZ0lHUmxZblZuT2lCMGFHbHpMbTl3ZEdsdmJuTXVaR1ZpZFdjc1hHNGdJQ0FnYjI1RmJtUTZJR1oxYm1OMGFXOXVJQ2h5WlhOd2IyNXpaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlM1emRHRjBkWE1nSVQwOUlHZHljR011UTI5a1pTNVBTeWtnZTF4dUlDQWdJQ0FnSUNBZ0lIWmhjaUJsY25JZ1BTQnVaWGNnUlhKeWIzSW9jbVZ6Y0c5dWMyVXVjM1JoZEhWelRXVnpjMkZuWlNrN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5TG1OdlpHVWdQU0J5WlhOd2IyNXpaUzV6ZEdGMGRYTTdYRzRnSUNBZ0lDQWdJQ0FnWlhKeUxtMWxkR0ZrWVhSaElEMGdjbVZ6Y0c5dWMyVXVkSEpoYVd4bGNuTTdYRzRnSUNBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNvWlhKeUxDQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5aHVkV3hzTENCeVpYTndiMjV6WlM1dFpYTnpZV2RsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmU2s3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnWTJGdVkyVnNPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCallXeHNZbUZqYXlBOUlHNTFiR3c3WEc0Z0lDQWdJQ0JqYkdsbGJuUXVZMnh2YzJVb0tUdGNiaUFnSUNCOVhHNGdJSDA3WEc1OU8xeHVYRzVsZUhCdmNuUnpMa1Y0ZEdWeWJtRnNRWFYwYUZObGNuWnBZMlZEYkdsbGJuUWdQU0JGZUhSbGNtNWhiRUYxZEdoVFpYSjJhV05sUTJ4cFpXNTBPMXh1WEc0aUxDSXZMeUJ3WVdOcllXZGxPaUJ3Y205MGJ5NXljR011ZDJWaWNuUmpMbll4WEc0dkx5Qm1hV3hsT2lCd2NtOTBieTl5Y0dNdmQyVmljblJqTDNZeEwzTnBaMjVoYkdsdVp5NXdjbTkwYjF4dVhHNTJZWElnY0hKdmRHOWZjbkJqWDNkbFluSjBZMTkyTVY5emFXZHVZV3hwYm1kZmNHSWdQU0J5WlhGMWFYSmxLRndpTGk0dkxpNHZMaTR2TGk0dmNISnZkRzh2Y25CakwzZGxZbkowWXk5Mk1TOXphV2R1WVd4cGJtZGZjR0pjSWlrN1hHNTJZWElnWjNKd1l5QTlJSEpsY1hWcGNtVW9YQ0pBYVcxd2NtOWlZV0pzWlMxbGJtY3ZaM0p3WXkxM1pXSmNJaWt1WjNKd1l6dGNibHh1ZG1GeUlGTnBaMjVoYkdsdVoxTmxjblpwWTJVZ1BTQW9ablZ1WTNScGIyNGdLQ2tnZTF4dUlDQm1kVzVqZEdsdmJpQlRhV2R1WVd4cGJtZFRaWEoyYVdObEtDa2dlMzFjYmlBZ1UybG5ibUZzYVc1blUyVnlkbWxqWlM1elpYSjJhV05sVG1GdFpTQTlJRndpY0hKdmRHOHVjbkJqTG5kbFluSjBZeTUyTVM1VGFXZHVZV3hwYm1kVFpYSjJhV05sWENJN1hHNGdJSEpsZEhWeWJpQlRhV2R1WVd4cGJtZFRaWEoyYVdObE8xeHVmU2dwS1R0Y2JseHVVMmxuYm1Gc2FXNW5VMlZ5ZG1salpTNURZV3hzSUQwZ2UxeHVJQ0J0WlhSb2IyUk9ZVzFsT2lCY0lrTmhiR3hjSWl4Y2JpQWdjMlZ5ZG1salpUb2dVMmxuYm1Gc2FXNW5VMlZ5ZG1salpTeGNiaUFnY21WeGRXVnpkRk4wY21WaGJUb2dabUZzYzJVc1hHNGdJSEpsYzNCdmJuTmxVM1J5WldGdE9pQjBjblZsTEZ4dUlDQnlaWEYxWlhOMFZIbHdaVG9nY0hKdmRHOWZjbkJqWDNkbFluSjBZMTkyTVY5emFXZHVZV3hwYm1kZmNHSXVRMkZzYkZKbGNYVmxjM1FzWEc0Z0lISmxjM0J2Ym5ObFZIbHdaVG9nY0hKdmRHOWZjbkJqWDNkbFluSjBZMTkyTVY5emFXZHVZV3hwYm1kZmNHSXVRMkZzYkZKbGMzQnZibk5sWEc1OU8xeHVYRzVUYVdkdVlXeHBibWRUWlhKMmFXTmxMa05oYkd4VmNHUmhkR1VnUFNCN1hHNGdJRzFsZEdodlpFNWhiV1U2SUZ3aVEyRnNiRlZ3WkdGMFpWd2lMRnh1SUNCelpYSjJhV05sT2lCVGFXZHVZV3hwYm1kVFpYSjJhV05sTEZ4dUlDQnlaWEYxWlhOMFUzUnlaV0Z0T2lCbVlXeHpaU3hjYmlBZ2NtVnpjRzl1YzJWVGRISmxZVzA2SUdaaGJITmxMRnh1SUNCeVpYRjFaWE4wVkhsd1pUb2djSEp2ZEc5ZmNuQmpYM2RsWW5KMFkxOTJNVjl6YVdkdVlXeHBibWRmY0dJdVEyRnNiRlZ3WkdGMFpWSmxjWFZsYzNRc1hHNGdJSEpsYzNCdmJuTmxWSGx3WlRvZ2NISnZkRzlmY25CalgzZGxZbkowWTE5Mk1WOXphV2R1WVd4cGJtZGZjR0l1UTJGc2JGVndaR0YwWlZKbGMzQnZibk5sWEc1OU8xeHVYRzVUYVdkdVlXeHBibWRUWlhKMmFXTmxMa0Z1YzNkbGNpQTlJSHRjYmlBZ2JXVjBhRzlrVG1GdFpUb2dYQ0pCYm5OM1pYSmNJaXhjYmlBZ2MyVnlkbWxqWlRvZ1UybG5ibUZzYVc1blUyVnlkbWxqWlN4Y2JpQWdjbVZ4ZFdWemRGTjBjbVZoYlRvZ2RISjFaU3hjYmlBZ2NtVnpjRzl1YzJWVGRISmxZVzA2SUhSeWRXVXNYRzRnSUhKbGNYVmxjM1JVZVhCbE9pQndjbTkwYjE5eWNHTmZkMlZpY25SalgzWXhYM05wWjI1aGJHbHVaMTl3WWk1QmJuTjNaWEpTWlhOd2IyNXpaU3hjYmlBZ2NtVnpjRzl1YzJWVWVYQmxPaUJ3Y205MGIxOXljR05mZDJWaWNuUmpYM1l4WDNOcFoyNWhiR2x1WjE5d1lpNUJibk4zWlhKU1pYRjFaWE4wWEc1OU8xeHVYRzVUYVdkdVlXeHBibWRUWlhKMmFXTmxMazl3ZEdsdmJtRnNWMlZpVWxSRFEyOXVabWxuSUQwZ2UxeHVJQ0J0WlhSb2IyUk9ZVzFsT2lCY0lrOXdkR2x2Ym1Gc1YyVmlVbFJEUTI5dVptbG5YQ0lzWEc0Z0lITmxjblpwWTJVNklGTnBaMjVoYkdsdVoxTmxjblpwWTJVc1hHNGdJSEpsY1hWbGMzUlRkSEpsWVcwNklHWmhiSE5sTEZ4dUlDQnlaWE53YjI1elpWTjBjbVZoYlRvZ1ptRnNjMlVzWEc0Z0lISmxjWFZsYzNSVWVYQmxPaUJ3Y205MGIxOXljR05mZDJWaWNuUmpYM1l4WDNOcFoyNWhiR2x1WjE5d1lpNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaMUpsY1hWbGMzUXNYRzRnSUhKbGMzQnZibk5sVkhsd1pUb2djSEp2ZEc5ZmNuQmpYM2RsWW5KMFkxOTJNVjl6YVdkdVlXeHBibWRmY0dJdVQzQjBhVzl1WVd4WFpXSlNWRU5EYjI1bWFXZFNaWE53YjI1elpWeHVmVHRjYmx4dVpYaHdiM0owY3k1VGFXZHVZV3hwYm1kVFpYSjJhV05sSUQwZ1UybG5ibUZzYVc1blUyVnlkbWxqWlR0Y2JseHVablZ1WTNScGIyNGdVMmxuYm1Gc2FXNW5VMlZ5ZG1salpVTnNhV1Z1ZENoelpYSjJhV05sU0c5emRDd2diM0IwYVc5dWN5a2dlMXh1SUNCMGFHbHpMbk5sY25acFkyVkliM04wSUQwZ2MyVnlkbWxqWlVodmMzUTdYRzRnSUhSb2FYTXViM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTWdmSHdnZTMwN1hHNTlYRzVjYmxOcFoyNWhiR2x1WjFObGNuWnBZMlZEYkdsbGJuUXVjSEp2ZEc5MGVYQmxMbU5oYkd3Z1BTQm1kVzVqZEdsdmJpQmpZV3hzS0hKbGNYVmxjM1JOWlhOellXZGxMQ0J0WlhSaFpHRjBZU2tnZTF4dUlDQjJZWElnYkdsemRHVnVaWEp6SUQwZ2UxeHVJQ0FnSUdSaGRHRTZJRnRkTEZ4dUlDQWdJR1Z1WkRvZ1cxMHNYRzRnSUNBZ2MzUmhkSFZ6T2lCYlhWeHVJQ0I5TzF4dUlDQjJZWElnWTJ4cFpXNTBJRDBnWjNKd1l5NXBiblp2YTJVb1UybG5ibUZzYVc1blUyVnlkbWxqWlM1RFlXeHNMQ0I3WEc0Z0lDQWdjbVZ4ZFdWemREb2djbVZ4ZFdWemRFMWxjM05oWjJVc1hHNGdJQ0FnYUc5emREb2dkR2hwY3k1elpYSjJhV05sU0c5emRDeGNiaUFnSUNCdFpYUmhaR0YwWVRvZ2JXVjBZV1JoZEdFc1hHNGdJQ0FnZEhKaGJuTndiM0owT2lCMGFHbHpMbTl3ZEdsdmJuTXVkSEpoYm5Od2IzSjBMRnh1SUNBZ0lHUmxZblZuT2lCMGFHbHpMbTl3ZEdsdmJuTXVaR1ZpZFdjc1hHNGdJQ0FnYjI1TlpYTnpZV2RsT2lCbWRXNWpkR2x2YmlBb2NtVnpjRzl1YzJWTlpYTnpZV2RsS1NCN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY25NdVpHRjBZUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hvWVc1a2JHVnlLU0I3WEc0Z0lDQWdJQ0FnSUdoaGJtUnNaWElvY21WemNHOXVjMlZOWlhOellXZGxLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDBzWEc0Z0lDQWdiMjVGYm1RNklHWjFibU4wYVc5dUlDaHpkR0YwZFhNc0lITjBZWFIxYzAxbGMzTmhaMlVzSUhSeVlXbHNaWEp6S1NCN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY25NdWMzUmhkSFZ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0doaGJtUnNaWElwSUh0Y2JpQWdJQ0FnSUNBZ2FHRnVaR3hsY2loN0lHTnZaR1U2SUhOMFlYUjFjeXdnWkdWMFlXbHNjem9nYzNSaGRIVnpUV1Z6YzJGblpTd2diV1YwWVdSaGRHRTZJSFJ5WVdsc1pYSnpJSDBwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY25NdVpXNWtMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLR2hoYm1Sc1pYSXBJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWg3SUdOdlpHVTZJSE4wWVhSMWN5d2daR1YwWVdsc2N6b2djM1JoZEhWelRXVnpjMkZuWlN3Z2JXVjBZV1JoZEdFNklIUnlZV2xzWlhKeklIMHBPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0JzYVhOMFpXNWxjbk1nUFNCdWRXeHNPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2IyNDZJR1oxYm1OMGFXOXVJQ2gwZVhCbExDQm9ZVzVrYkdWeUtTQjdYRzRnSUNBZ0lDQnNhWE4wWlc1bGNuTmJkSGx3WlYwdWNIVnphQ2hvWVc1a2JHVnlLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQWdJSDBzWEc0Z0lDQWdZMkZ1WTJWc09pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0JzYVhOMFpXNWxjbk1nUFNCdWRXeHNPMXh1SUNBZ0lDQWdZMnhwWlc1MExtTnNiM05sS0NrN1hHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlR0Y2JseHVVMmxuYm1Gc2FXNW5VMlZ5ZG1salpVTnNhV1Z1ZEM1d2NtOTBiM1I1Y0dVdVkyRnNiRlZ3WkdGMFpTQTlJR1oxYm1OMGFXOXVJR05oYkd4VmNHUmhkR1VvY21WeGRXVnpkRTFsYzNOaFoyVXNJRzFsZEdGa1lYUmhMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQnBaaUFvWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0E5UFQwZ01pa2dlMXh1SUNBZ0lHTmhiR3hpWVdOcklEMGdZWEpuZFcxbGJuUnpXekZkTzF4dUlDQjlYRzRnSUhaaGNpQmpiR2xsYm5RZ1BTQm5jbkJqTG5WdVlYSjVLRk5wWjI1aGJHbHVaMU5sY25acFkyVXVRMkZzYkZWd1pHRjBaU3dnZTF4dUlDQWdJSEpsY1hWbGMzUTZJSEpsY1hWbGMzUk5aWE56WVdkbExGeHVJQ0FnSUdodmMzUTZJSFJvYVhNdWMyVnlkbWxqWlVodmMzUXNYRzRnSUNBZ2JXVjBZV1JoZEdFNklHMWxkR0ZrWVhSaExGeHVJQ0FnSUhSeVlXNXpjRzl5ZERvZ2RHaHBjeTV2Y0hScGIyNXpMblJ5WVc1emNHOXlkQ3hjYmlBZ0lDQmtaV0oxWnpvZ2RHaHBjeTV2Y0hScGIyNXpMbVJsWW5WbkxGeHVJQ0FnSUc5dVJXNWtPaUJtZFc1amRHbHZiaUFvY21WemNHOXVjMlVwSUh0Y2JpQWdJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2NtVnpjRzl1YzJVdWMzUmhkSFZ6SUNFOVBTQm5jbkJqTGtOdlpHVXVUMHNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWElnWlhKeUlEMGdibVYzSUVWeWNtOXlLSEpsYzNCdmJuTmxMbk4wWVhSMWMwMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ0lDQWdJR1Z5Y2k1amIyUmxJRDBnY21WemNHOXVjMlV1YzNSaGRIVnpPMXh1SUNBZ0lDQWdJQ0FnSUdWeWNpNXRaWFJoWkdGMFlTQTlJSEpsYzNCdmJuTmxMblJ5WVdsc1pYSnpPMXh1SUNBZ0lDQWdJQ0FnSUdOaGJHeGlZV05yS0dWeWNpd2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZMkZzYkdKaFkyc29iblZzYkN3Z2NtVnpjRzl1YzJVdWJXVnpjMkZuWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDBwTzF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUdOaGJtTmxiRG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUNBZ1kyRnNiR0poWTJzZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnWTJ4cFpXNTBMbU5zYjNObEtDazdYRzRnSUNBZ2ZWeHVJQ0I5TzF4dWZUdGNibHh1VTJsbmJtRnNhVzVuVTJWeWRtbGpaVU5zYVdWdWRDNXdjbTkwYjNSNWNHVXVZVzV6ZDJWeUlEMGdablZ1WTNScGIyNGdZVzV6ZDJWeUtHMWxkR0ZrWVhSaEtTQjdYRzRnSUhaaGNpQnNhWE4wWlc1bGNuTWdQU0I3WEc0Z0lDQWdaR0YwWVRvZ1cxMHNYRzRnSUNBZ1pXNWtPaUJiWFN4Y2JpQWdJQ0J6ZEdGMGRYTTZJRnRkWEc0Z0lIMDdYRzRnSUhaaGNpQmpiR2xsYm5RZ1BTQm5jbkJqTG1Oc2FXVnVkQ2hUYVdkdVlXeHBibWRUWlhKMmFXTmxMa0Z1YzNkbGNpd2dlMXh1SUNBZ0lHaHZjM1E2SUhSb2FYTXVjMlZ5ZG1salpVaHZjM1FzWEc0Z0lDQWdiV1YwWVdSaGRHRTZJRzFsZEdGa1lYUmhMRnh1SUNBZ0lIUnlZVzV6Y0c5eWREb2dkR2hwY3k1dmNIUnBiMjV6TG5SeVlXNXpjRzl5ZEZ4dUlDQjlLVHRjYmlBZ1kyeHBaVzUwTG05dVJXNWtLR1oxYm1OMGFXOXVJQ2h6ZEdGMGRYTXNJSE4wWVhSMWMwMWxjM05oWjJVc0lIUnlZV2xzWlhKektTQjdYRzRnSUNBZ2JHbHpkR1Z1WlhKekxuTjBZWFIxY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNob1lXNWtiR1Z5S1NCN1hHNGdJQ0FnSUNCb1lXNWtiR1Z5S0hzZ1kyOWtaVG9nYzNSaGRIVnpMQ0JrWlhSaGFXeHpPaUJ6ZEdGMGRYTk5aWE56WVdkbExDQnRaWFJoWkdGMFlUb2dkSEpoYVd4bGNuTWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdiR2x6ZEdWdVpYSnpMbVZ1WkM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNob1lXNWtiR1Z5S1NCN1hHNGdJQ0FnSUNCb1lXNWtiR1Z5S0hzZ1kyOWtaVG9nYzNSaGRIVnpMQ0JrWlhSaGFXeHpPaUJ6ZEdGMGRYTk5aWE56WVdkbExDQnRaWFJoWkdGMFlUb2dkSEpoYVd4bGNuTWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdiR2x6ZEdWdVpYSnpJRDBnYm5Wc2JEdGNiaUFnZlNrN1hHNGdJR05zYVdWdWRDNXZiazFsYzNOaFoyVW9ablZ1WTNScGIyNGdLRzFsYzNOaFoyVXBJSHRjYmlBZ0lDQnNhWE4wWlc1bGNuTXVaR0YwWVM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNob1lXNWtiR1Z5S1NCN1hHNGdJQ0FnSUNCb1lXNWtiR1Z5S0cxbGMzTmhaMlVwTzF4dUlDQWdJSDBwWEc0Z0lIMHBPMXh1SUNCamJHbGxiblF1YzNSaGNuUW9iV1YwWVdSaGRHRXBPMXh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJRzl1T2lCbWRXNWpkR2x2YmlBb2RIbHdaU3dnYUdGdVpHeGxjaWtnZTF4dUlDQWdJQ0FnYkdsemRHVnVaWEp6VzNSNWNHVmRMbkIxYzJnb2FHRnVaR3hsY2lrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnSUNCOUxGeHVJQ0FnSUhkeWFYUmxPaUJtZFc1amRHbHZiaUFvY21WeGRXVnpkRTFsYzNOaFoyVXBJSHRjYmlBZ0lDQWdJR05zYVdWdWRDNXpaVzVrS0hKbGNYVmxjM1JOWlhOellXZGxLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQWdJSDBzWEc0Z0lDQWdaVzVrT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQmpiR2xsYm5RdVptbHVhWE5vVTJWdVpDZ3BPMXh1SUNBZ0lIMHNYRzRnSUNBZ1kyRnVZMlZzT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQnNhWE4wWlc1bGNuTWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ1kyeHBaVzUwTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdmVnh1SUNCOU8xeHVmVHRjYmx4dVUybG5ibUZzYVc1blUyVnlkbWxqWlVOc2FXVnVkQzV3Y205MGIzUjVjR1V1YjNCMGFXOXVZV3hYWldKU1ZFTkRiMjVtYVdjZ1BTQm1kVzVqZEdsdmJpQnZjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaeWh5WlhGMVpYTjBUV1Z6YzJGblpTd2diV1YwWVdSaGRHRXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lHbG1JQ2hoY21kMWJXVnVkSE11YkdWdVozUm9JRDA5UFNBeUtTQjdYRzRnSUNBZ1kyRnNiR0poWTJzZ1BTQmhjbWQxYldWdWRITmJNVjA3WEc0Z0lIMWNiaUFnZG1GeUlHTnNhV1Z1ZENBOUlHZHljR011ZFc1aGNua29VMmxuYm1Gc2FXNW5VMlZ5ZG1salpTNVBjSFJwYjI1aGJGZGxZbEpVUTBOdmJtWnBaeXdnZTF4dUlDQWdJSEpsY1hWbGMzUTZJSEpsY1hWbGMzUk5aWE56WVdkbExGeHVJQ0FnSUdodmMzUTZJSFJvYVhNdWMyVnlkbWxqWlVodmMzUXNYRzRnSUNBZ2JXVjBZV1JoZEdFNklHMWxkR0ZrWVhSaExGeHVJQ0FnSUhSeVlXNXpjRzl5ZERvZ2RHaHBjeTV2Y0hScGIyNXpMblJ5WVc1emNHOXlkQ3hjYmlBZ0lDQmtaV0oxWnpvZ2RHaHBjeTV2Y0hScGIyNXpMbVJsWW5WbkxGeHVJQ0FnSUc5dVJXNWtPaUJtZFc1amRHbHZiaUFvY21WemNHOXVjMlVwSUh0Y2JpQWdJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2NtVnpjRzl1YzJVdWMzUmhkSFZ6SUNFOVBTQm5jbkJqTGtOdlpHVXVUMHNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWElnWlhKeUlEMGdibVYzSUVWeWNtOXlLSEpsYzNCdmJuTmxMbk4wWVhSMWMwMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ0lDQWdJR1Z5Y2k1amIyUmxJRDBnY21WemNHOXVjMlV1YzNSaGRIVnpPMXh1SUNBZ0lDQWdJQ0FnSUdWeWNpNXRaWFJoWkdGMFlTQTlJSEpsYzNCdmJuTmxMblJ5WVdsc1pYSnpPMXh1SUNBZ0lDQWdJQ0FnSUdOaGJHeGlZV05yS0dWeWNpd2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZMkZzYkdKaFkyc29iblZzYkN3Z2NtVnpjRzl1YzJVdWJXVnpjMkZuWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDBwTzF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUdOaGJtTmxiRG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUNBZ1kyRnNiR0poWTJzZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnWTJ4cFpXNTBMbU5zYjNObEtDazdYRzRnSUNBZ2ZWeHVJQ0I5TzF4dWZUdGNibHh1Wlhod2IzSjBjeTVUYVdkdVlXeHBibWRUWlhKMmFXTmxRMnhwWlc1MElEMGdVMmxuYm1Gc2FXNW5VMlZ5ZG1salpVTnNhV1Z1ZER0Y2JseHVJaXdpYVc1MFpYSm1ZV05sSUZKbFlXUjVVR1ZsY2lCN1hHNWNkSEJqT2lCU1ZFTlFaV1Z5UTI5dWJtVmpkR2x2Ymp0Y2JseDBaR002SUZKVVEwUmhkR0ZEYUdGdWJtVnNPeUJjYm4xY2JseHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUc1bGQxQmxaWEpEYjI1dVpXTjBhVzl1Um05eVEyeHBaVzUwS0dScGMyRmliR1ZVY21samEyeGxPaUJpYjI5c1pXRnVMQ0J5ZEdORGIyNW1hV2MvT2lCU1ZFTkRiMjVtYVdkMWNtRjBhVzl1S1RvZ1VISnZiV2x6WlR4U1pXRmtlVkJsWlhJK0lIdGNibHgwYVdZZ0tDRnlkR05EYjI1bWFXY3BJSHRjYmx4MFhIUnlkR05EYjI1bWFXY2dQU0I3WEc1Y2RGeDBYSFJwWTJWVFpYSjJaWEp6T2lCYlhHNWNkRngwWEhSY2RIdGNibHgwWEhSY2RGeDBYSFIxY214ek9pQmNJbk4wZFc0NloyeHZZbUZzTG5OMGRXNHVkSGRwYkdsdkxtTnZiVG96TkRjNFAzUnlZVzV6Y0c5eWREMTFaSEJjSWx4dVhIUmNkRngwWEhSOUxGeHVYSFJjZEZ4MFhWeHVYSFJjZEgwN1hHNWNkSDFjYmx4MFkyOXVjM1FnY0dWbGNrTnZibTVsWTNScGIyNGdQU0J1WlhjZ1VsUkRVR1ZsY2tOdmJtNWxZM1JwYjI0b2NuUmpRMjl1Wm1sbktUdGNibHh1WEhSc1pYUWdjRkpsYzI5c2RtVTZJQ2gyWVd4MVpUb2dVbVZoWkhsUVpXVnlLU0E5UGlCMmIybGtPMXh1WEhSamIyNXpkQ0J5WlhOMWJIUWdQU0J1WlhjZ1VISnZiV2x6WlR4U1pXRmtlVkJsWlhJK0tISmxjMjlzZG1VZ1BUNGdlMXh1WEhSY2RIQlNaWE52YkhabElEMGdjbVZ6YjJ4MlpUdGNibHgwZlNsY2JseDBZMjl1YzNRZ1pHRjBZVU5vWVc1dVpXd2dQU0J3WldWeVEyOXVibVZqZEdsdmJpNWpjbVZoZEdWRVlYUmhRMmhoYm01bGJDaGNJbVJoZEdGY0lpd2dlMXh1WEhSY2RHbGtPaUF3TEZ4dVhIUmNkRzVsWjI5MGFXRjBaV1E2SUhSeWRXVXNYRzVjZEZ4MGIzSmtaWEpsWkRvZ2RISjFaVnh1WEhSOUtUdGNibHgwWkdGMFlVTm9ZVzV1Wld3dVltbHVZWEo1Vkhsd1pTQTlJRndpWVhKeVlYbGlkV1ptWlhKY0lqdGNibHh1WEhSamIyNXpkQ0J1WldkdmRHbGhkR2x2YmtOb1lXNXVaV3dnUFNCd1pXVnlRMjl1Ym1WamRHbHZiaTVqY21WaGRHVkVZWFJoUTJoaGJtNWxiQ2hjSW01bFoyOTBhV0YwYVc5dVhDSXNJSHRjYmx4MFhIUnBaRG9nTVN4Y2JseDBYSFJ1WldkdmRHbGhkR1ZrT2lCMGNuVmxMRnh1WEhSY2RHOXlaR1Z5WldRNklIUnlkV1ZjYmx4MGZTazdYRzVjZEc1bFoyOTBhV0YwYVc5dVEyaGhibTVsYkM1aWFXNWhjbmxVZVhCbElEMGdYQ0poY25KaGVXSjFabVpsY2x3aU8xeHVYSFJ1WldkdmRHbGhkR2x2YmtOb1lXNXVaV3d1YjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBPaUJOWlhOellXZGxSWFpsYm5ROFlXNTVQaWtnUFQ0Z2UxeHVYSFJjZEhSeWVTQjdYRzVjZEZ4MFhIUmpiMjV6ZENCeVpXMXZkR1ZUUkZBZ1BTQnVaWGNnVWxSRFUyVnpjMmx2YmtSbGMyTnlhWEIwYVc5dUtFcFRUMDR1Y0dGeWMyVW9ZWFJ2WWlobGRtVnVkQzVrWVhSaEtTa3BPMXh1WEhSY2RGeDBZWGRoYVhRZ2NHVmxja052Ym01bFkzUnBiMjR1YzJWMFVtVnRiM1JsUkdWelkzSnBjSFJwYjI0b2NtVnRiM1JsVTBSUUtUdGNibHgwWEhSY2RHTnZibk4wSUdGdWMzZGxja1JsYzJNZ1BTQmhkMkZwZENCd1pXVnlRMjl1Ym1WamRHbHZiaTVqY21WaGRHVkJibk4zWlhJb0tUdGNibHgwWEhSY2RHRjNZV2wwSUhCbFpYSkRiMjV1WldOMGFXOXVMbk5sZEV4dlkyRnNSR1Z6WTNKcGNIUnBiMjRvWVc1emQyVnlSR1Z6WXlrN1hHNWNkRngwWEhSdVpXZHZkR2xoZEdsdmJrTm9ZVzV1Wld3dWMyVnVaQ2hpZEc5aEtFcFRUMDR1YzNSeWFXNW5hV1o1S0hCbFpYSkRiMjV1WldOMGFXOXVMbXh2WTJGc1JHVnpZM0pwY0hScGIyNHBLU2s3WEc1Y2RGeDBmU0JqWVhSamFDQW9aU2tnZTF4dVhIUmNkRngwWTI5dWMyOXNaUzVsY25KdmNpaGxLVHRjYmx4MFhIUjlYRzVjZEgxY2JseHVYSFJwWmlBb0lXUnBjMkZpYkdWVWNtbGphMnhsS1NCN1hHNWNkRngwY21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTaDdJSEJqT2lCd1pXVnlRMjl1Ym1WamRHbHZiaXdnWkdNNklHUmhkR0ZEYUdGdWJtVnNJSDBwWEc1Y2RIMWNibHgwTHk4Z2MyVjBJSFZ3SUc5bVptVnlYRzVjZEdOdmJuTjBJRzltWm1WeVJHVnpZeUE5SUdGM1lXbDBJSEJsWlhKRGIyNXVaV04wYVc5dUxtTnlaV0YwWlU5bVptVnlLQ2s3WEc1Y2RIUnllU0I3WEc1Y2RGeDBZWGRoYVhRZ2NHVmxja052Ym01bFkzUnBiMjR1YzJWMFRHOWpZV3hFWlhOamNtbHdkR2x2YmlodlptWmxja1JsYzJNcFhHNWNkSDBnWTJGMFkyZ2dLR1VwSUh0Y2JseDBYSFJ5WlhSMWNtNGdVSEp2YldselpTNXlaV3BsWTNRb1pTazdYRzVjZEgxY2JseHVYSFJ3WldWeVEyOXVibVZqZEdsdmJpNXZibWxqWldOaGJtUnBaR0YwWlNBOUlHRnplVzVqSUdWMlpXNTBJRDArSUh0Y2JseDBYSFJwWmlBb1pYWmxiblF1WTJGdVpHbGtZWFJsSUNFOVBTQnVkV3hzS1NCN1hHNWNkRngwWEhSeVpYUjFjbTQ3WEc1Y2RGeDBmVnh1WEhSY2RIQlNaWE52YkhabEtIc2djR002SUhCbFpYSkRiMjV1WldOMGFXOXVMQ0JrWXpvZ1pHRjBZVU5vWVc1dVpXd2dmU2s3WEc1Y2RIMWNibHh1WEhSeVpYUjFjbTRnY21WemRXeDBPMXh1ZlZ4dUlsMHNJbk52ZFhKalpWSnZiM1FpT2lJaWZRPT0iLCJ2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGEsYixjKXthIGluc3RhbmNlb2YgU3RyaW5nJiYoYT1TdHJpbmcoYSkpO2Zvcih2YXIgZD1hLmxlbmd0aCxlPTA7ZTxkO2UrKyl7dmFyIGY9YVtlXTtpZihiLmNhbGwoYyxmLGUsYSkpcmV0dXJue2k6ZSx2OmZ9fXJldHVybntpOi0xLHY6dm9pZCAwfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7XG4kanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihhKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1hP2E6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDphfTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTtcbiRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYil7Yz0kanNjb21wLmdsb2JhbDthPWEuc3BsaXQoXCIuXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aC0xO2QrKyl7dmFyIGU9YVtkXTtlIGluIGN8fChjW2VdPXt9KTtjPWNbZV19YT1hW2EubGVuZ3RoLTFdO2Q9Y1thXTtiPWIoZCk7YiE9ZCYmbnVsbCE9YiYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fTskanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxhLGMpLml9fSxcImVzNlwiLFwiZXMzXCIpO1xuJGpzY29tcC5jaGVja1N0cmluZ0FyZ3M9ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGw9PWEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAndGhpcycgdmFsdWUgZm9yIFN0cmluZy5wcm90b3R5cGUuXCIrYytcIiBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihiIGluc3RhbmNlb2YgUmVnRXhwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLlwiK2MrXCIgbXVzdCBub3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb25cIik7cmV0dXJuIGErXCJcIn07XG4kanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYSxjKXt2YXIgYj0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLGEsXCJlbmRzV2l0aFwiKTthKz1cIlwiO3ZvaWQgMD09PWMmJihjPWIubGVuZ3RoKTtjPU1hdGgubWF4KDAsTWF0aC5taW4oY3wwLGIubGVuZ3RoKSk7Zm9yKHZhciBlPWEubGVuZ3RoOzA8ZSYmMDxjOylpZihiWy0tY10hPWFbLS1lXSlyZXR1cm4hMTtyZXR1cm4gMD49ZX19LFwiZXM2XCIsXCJlczNcIik7JGpzY29tcC5wb2x5ZmlsbChcIkFycmF5LnByb3RvdHlwZS5maW5kXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhLGMpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGEsYykudn19LFwiZXM2XCIsXCJlczNcIik7XG4kanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhLGMpe3ZhciBiPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsYSxcInN0YXJ0c1dpdGhcIik7YSs9XCJcIjt2YXIgZT1iLmxlbmd0aCxmPWEubGVuZ3RoO2M9TWF0aC5tYXgoMCxNYXRoLm1pbihjfDAsYi5sZW5ndGgpKTtmb3IodmFyIGc9MDtnPGYmJmM8ZTspaWYoYltjKytdIT1hW2crK10pcmV0dXJuITE7cmV0dXJuIGc+PWZ9fSxcImVzNlwiLFwiZXMzXCIpO1xuJGpzY29tcC5wb2x5ZmlsbChcIlN0cmluZy5wcm90b3R5cGUucmVwZWF0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhKXt2YXIgYj0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLG51bGwsXCJyZXBlYXRcIik7aWYoMD5hfHwxMzQyMTc3Mjc5PGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGNvdW50IHZhbHVlXCIpO2F8PTA7Zm9yKHZhciBkPVwiXCI7YTspaWYoYSYxJiYoZCs9YiksYT4+Pj0xKWIrPWI7cmV0dXJuIGR9fSxcImVzNlwiLFwiZXMzXCIpO3ZhciBDT01QSUxFRD0hMCxnb29nPWdvb2d8fHt9O2dvb2cuZ2xvYmFsPXRoaXN8fHNlbGY7Z29vZy5pc0RlZj1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09YX07Z29vZy5pc1N0cmluZz1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX07Z29vZy5pc0Jvb2xlYW49ZnVuY3Rpb24oYSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBhfTtcbmdvb2cuaXNOdW1iZXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGF9O2dvb2cuZXhwb3J0UGF0aF89ZnVuY3Rpb24oYSxiLGMpe2E9YS5zcGxpdChcIi5cIik7Yz1jfHxnb29nLmdsb2JhbDthWzBdaW4gY3x8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGMuZXhlY1NjcmlwdHx8Yy5leGVjU2NyaXB0KFwidmFyIFwiK2FbMF0pO2Zvcih2YXIgZDthLmxlbmd0aCYmKGQ9YS5zaGlmdCgpKTspIWEubGVuZ3RoJiZnb29nLmlzRGVmKGIpP2NbZF09YjpjPWNbZF0mJmNbZF0hPT1PYmplY3QucHJvdG90eXBlW2RdP2NbZF06Y1tkXT17fX07XG5nb29nLmRlZmluZT1mdW5jdGlvbihhLGIpe2lmKCFDT01QSUxFRCl7dmFyIGM9Z29vZy5nbG9iYWwuQ0xPU1VSRV9VTkNPTVBJTEVEX0RFRklORVMsZD1nb29nLmdsb2JhbC5DTE9TVVJFX0RFRklORVM7YyYmdm9pZCAwPT09Yy5ub2RlVHlwZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSk/Yj1jW2FdOmQmJnZvaWQgMD09PWQubm9kZVR5cGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGEpJiYoYj1kW2FdKX1yZXR1cm4gYn07Z29vZy5GRUFUVVJFU0VUX1lFQVI9MjAxMjtnb29nLkRFQlVHPSEwO2dvb2cuTE9DQUxFPVwiZW5cIjtnb29nLlRSVVNURURfU0lURT0hMDtnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEU9ITE7Z29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERT1DT01QSUxFRCYmIWdvb2cuREVCVUc7Z29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HPSExO1xuZ29vZy5wcm92aWRlPWZ1bmN0aW9uKGEpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cucHJvdmlkZSBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gYSBtb2R1bGUuXCIpO2lmKCFDT01QSUxFRCYmZ29vZy5pc1Byb3ZpZGVkXyhhKSl0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJythKydcIiBhbHJlYWR5IGRlY2xhcmVkLicpO2dvb2cuY29uc3RydWN0TmFtZXNwYWNlXyhhKX07Z29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfPWZ1bmN0aW9uKGEsYil7aWYoIUNPTVBJTEVEKXtkZWxldGUgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2FdO2Zvcih2YXIgYz1hOyhjPWMuc3Vic3RyaW5nKDAsYy5sYXN0SW5kZXhPZihcIi5cIikpKSYmIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKGMpOylnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bY109ITB9Z29vZy5leHBvcnRQYXRoXyhhLGIpfTtcbmdvb2cuZ2V0U2NyaXB0Tm9uY2U9ZnVuY3Rpb24oYSl7aWYoYSYmYSE9Z29vZy5nbG9iYWwpcmV0dXJuIGdvb2cuZ2V0U2NyaXB0Tm9uY2VfKGEuZG9jdW1lbnQpO251bGw9PT1nb29nLmNzcE5vbmNlXyYmKGdvb2cuY3NwTm9uY2VfPWdvb2cuZ2V0U2NyaXB0Tm9uY2VfKGdvb2cuZ2xvYmFsLmRvY3VtZW50KSk7cmV0dXJuIGdvb2cuY3NwTm9uY2VffTtnb29nLk5PTkNFX1BBVFRFUk5fPS9eW1xcdysvXy1dK1s9XXswLDJ9JC87Z29vZy5jc3BOb25jZV89bnVsbDtnb29nLmdldFNjcmlwdE5vbmNlXz1mdW5jdGlvbihhKXtyZXR1cm4oYT1hLnF1ZXJ5U2VsZWN0b3ImJmEucXVlcnlTZWxlY3RvcihcInNjcmlwdFtub25jZV1cIikpJiYoYT1hLm5vbmNlfHxhLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpKSYmZ29vZy5OT05DRV9QQVRURVJOXy50ZXN0KGEpP2E6XCJcIn07Z29vZy5WQUxJRF9NT0RVTEVfUkVfPS9eW2EtekEtWl8kXVthLXpBLVowLTkuXyRdKiQvO1xuZ29vZy5tb2R1bGU9ZnVuY3Rpb24oYSl7aWYoIWdvb2cuaXNTdHJpbmcoYSl8fCFhfHwtMT09YS5zZWFyY2goZ29vZy5WQUxJRF9NT0RVTEVfUkVfKSl0aHJvdyBFcnJvcihcIkludmFsaWQgbW9kdWxlIGlkZW50aWZpZXJcIik7aWYoIWdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJNb2R1bGUgXCIrYStcIiBoYXMgYmVlbiBsb2FkZWQgaW5jb3JyZWN0bHkuIE5vdGUsIG1vZHVsZXMgY2Fubm90IGJlIGxvYWRlZCBhcyBub3JtYWwgc2NyaXB0cy4gVGhleSByZXF1aXJlIHNvbWUga2luZCBvZiBwcmUtcHJvY2Vzc2luZyBzdGVwLiBZb3UncmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIGEgbW9kdWxlIHZpYSBhIHNjcmlwdCB0YWcgb3IgYXMgYSBwYXJ0IG9mIGEgY29uY2F0ZW5hdGVkIGJ1bmRsZSB3aXRob3V0IHJld3JpdGluZyB0aGUgbW9kdWxlLiBGb3IgbW9yZSBpbmZvIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvd2lraS9nb29nLm1vZHVsZTotYW4tRVM2LW1vZHVsZS1saWtlLWFsdGVybmF0aXZlLXRvLWdvb2cucHJvdmlkZS5cIik7XG5pZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIG1vZHVsZS5cIik7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZT1hO2lmKCFDT01QSUxFRCl7aWYoZ29vZy5pc1Byb3ZpZGVkXyhhKSl0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJythKydcIiBhbHJlYWR5IGRlY2xhcmVkLicpO2RlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bYV19fTtnb29nLm1vZHVsZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cubW9kdWxlLmdldEludGVybmFsXyhhKX07XG5nb29nLm1vZHVsZS5nZXRJbnRlcm5hbF89ZnVuY3Rpb24oYSl7aWYoIUNPTVBJTEVEKXtpZihhIGluIGdvb2cubG9hZGVkTW9kdWxlc18pcmV0dXJuIGdvb2cubG9hZGVkTW9kdWxlc19bYV0uZXhwb3J0cztpZighZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2FdKXJldHVybiBhPWdvb2cuZ2V0T2JqZWN0QnlOYW1lKGEpLG51bGwhPWE/YTpudWxsfXJldHVybiBudWxsfTtnb29nLk1vZHVsZVR5cGU9e0VTNjpcImVzNlwiLEdPT0c6XCJnb29nXCJ9O2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGw7Z29vZy5pc0luTW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpfHxnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfKCl9O2dvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7cmV0dXJuISFnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8udHlwZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0d9O1xuZ29vZy5pc0luRXM2TW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfJiZnb29nLm1vZHVsZUxvYWRlclN0YXRlXy50eXBlPT1nb29nLk1vZHVsZVR5cGUuRVM2KXJldHVybiEwO3ZhciBhPWdvb2cuZ2xvYmFsLiRqc2NvbXA7cmV0dXJuIGE/XCJmdW5jdGlvblwiIT10eXBlb2YgYS5nZXRDdXJyZW50TW9kdWxlUGF0aD8hMTohIWEuZ2V0Q3VycmVudE1vZHVsZVBhdGgoKTohMX07XG5nb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlPWZ1bmN0aW9uKCl7aWYoIUNPTVBJTEVEJiYhZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2UgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBnb29nLm1vZHVsZVwiKTtpZighQ09NUElMRUQmJiFnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZS5cIik7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8uZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT0hMH07XG5nb29nLmRlY2xhcmVNb2R1bGVJZD1mdW5jdGlvbihhKXtpZighQ09NUElMRUQpe2lmKCFnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLmRlY2xhcmVNb2R1bGVJZCBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gRVM2IG1vZHVsZVwiKTtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZSl0aHJvdyBFcnJvcihcImdvb2cuZGVjbGFyZU1vZHVsZUlkIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBtb2R1bGUuXCIpO2lmKGEgaW4gZ29vZy5sb2FkZWRNb2R1bGVzXyl0aHJvdyBFcnJvcignTW9kdWxlIHdpdGggbmFtZXNwYWNlIFwiJythKydcIiBhbHJlYWR5IGV4aXN0cy4nKTt9aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8pZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZT1hO2Vsc2V7dmFyIGI9Z29vZy5nbG9iYWwuJGpzY29tcDtpZighYnx8XCJmdW5jdGlvblwiIT10eXBlb2YgYi5nZXRDdXJyZW50TW9kdWxlUGF0aCl0aHJvdyBFcnJvcignTW9kdWxlIHdpdGggbmFtZXNwYWNlIFwiJytcbmErJ1wiIGhhcyBiZWVuIGxvYWRlZCBpbmNvcnJlY3RseS4nKTtiPWIucmVxdWlyZShiLmdldEN1cnJlbnRNb2R1bGVQYXRoKCkpO2dvb2cubG9hZGVkTW9kdWxlc19bYV09e2V4cG9ydHM6Yix0eXBlOmdvb2cuTW9kdWxlVHlwZS5FUzYsbW9kdWxlSWQ6YX19fTtnb29nLnNldFRlc3RPbmx5PWZ1bmN0aW9uKGEpe2lmKGdvb2cuRElTQUxMT1dfVEVTVF9PTkxZX0NPREUpdGhyb3cgYT1hfHxcIlwiLEVycm9yKFwiSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50XCIrKGE/XCI6IFwiK2E6XCIuXCIpKTt9O2dvb2cuZm9yd2FyZERlY2xhcmU9ZnVuY3Rpb24oYSl7fTtcbkNPTVBJTEVEfHwoZ29vZy5pc1Byb3ZpZGVkXz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbiBnb29nLmxvYWRlZE1vZHVsZXNffHwhZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2FdJiZnb29nLmlzRGVmQW5kTm90TnVsbChnb29nLmdldE9iamVjdEJ5TmFtZShhKSl9LGdvb2cuaW1wbGljaXROYW1lc3BhY2VzXz17XCJnb29nLm1vZHVsZVwiOiEwfSk7Z29vZy5nZXRPYmplY3RCeU5hbWU9ZnVuY3Rpb24oYSxiKXthPWEuc3BsaXQoXCIuXCIpO2I9Ynx8Z29vZy5nbG9iYWw7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYj1iW2FbY11dLCFnb29nLmlzRGVmQW5kTm90TnVsbChiKSlyZXR1cm4gbnVsbDtyZXR1cm4gYn07Z29vZy5nbG9iYWxpemU9ZnVuY3Rpb24oYSxiKXtiPWJ8fGdvb2cuZ2xvYmFsO2Zvcih2YXIgYyBpbiBhKWJbY109YVtjXX07XG5nb29nLmFkZERlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCl7IUNPTVBJTEVEJiZnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEJiZnb29nLmRlYnVnTG9hZGVyXy5hZGREZXBlbmRlbmN5KGEsYixjLGQpfTtnb29nLkVOQUJMRV9ERUJVR19MT0FERVI9ITA7Z29vZy5sb2dUb0NvbnNvbGVfPWZ1bmN0aW9uKGEpe2dvb2cuZ2xvYmFsLmNvbnNvbGUmJmdvb2cuZ2xvYmFsLmNvbnNvbGUuZXJyb3IoYSl9O1xuZ29vZy5yZXF1aXJlPWZ1bmN0aW9uKGEpe2lmKCFDT01QSUxFRCl7Z29vZy5FTkFCTEVfREVCVUdfTE9BREVSJiZnb29nLmRlYnVnTG9hZGVyXy5yZXF1ZXN0ZWQoYSk7aWYoZ29vZy5pc1Byb3ZpZGVkXyhhKSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXJldHVybiBnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF8oYSl9ZWxzZSBpZihnb29nLkVOQUJMRV9ERUJVR19MT0FERVIpe3ZhciBiPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGw7dHJ5e2dvb2cuZGVidWdMb2FkZXJfLmxvYWRfKGEpfWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89Yn19cmV0dXJuIG51bGx9fTtnb29nLnJlcXVpcmVUeXBlPWZ1bmN0aW9uKGEpe3JldHVybnt9fTtnb29nLmJhc2VQYXRoPVwiXCI7Z29vZy5udWxsRnVuY3Rpb249ZnVuY3Rpb24oKXt9O1xuZ29vZy5hYnN0cmFjdE1ldGhvZD1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwidW5pbXBsZW1lbnRlZCBhYnN0cmFjdCBtZXRob2RcIik7fTtnb29nLmFkZFNpbmdsZXRvbkdldHRlcj1mdW5jdGlvbihhKXthLmluc3RhbmNlXz12b2lkIDA7YS5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe2lmKGEuaW5zdGFuY2VfKXJldHVybiBhLmluc3RhbmNlXztnb29nLkRFQlVHJiYoZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zX1tnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfLmxlbmd0aF09YSk7cmV0dXJuIGEuaW5zdGFuY2VfPW5ldyBhfX07Z29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXz1bXTtnb29nLkxPQURfTU9EVUxFX1VTSU5HX0VWQUw9ITA7Z29vZy5TRUFMX01PRFVMRV9FWFBPUlRTPWdvb2cuREVCVUc7Z29vZy5sb2FkZWRNb2R1bGVzXz17fTtnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEPSFDT01QSUxFRCYmZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSO2dvb2cuVFJBTlNQSUxFPVwiZGV0ZWN0XCI7XG5nb29nLkFTU1VNRV9FU19NT0RVTEVTX1RSQU5TUElMRUQ9ITE7Z29vZy5UUkFOU1BJTEVfVE9fTEFOR1VBR0U9XCJcIjtnb29nLlRSQU5TUElMRVI9XCJ0cmFuc3BpbGUuanNcIjtnb29nLmhhc0JhZExldFNjb3Bpbmc9bnVsbDtnb29nLnVzZVNhZmFyaTEwV29ya2Fyb3VuZD1mdW5jdGlvbigpe2lmKG51bGw9PWdvb2cuaGFzQmFkTGV0U2NvcGluZyl7dHJ5e3ZhciBhPSFldmFsKCdcInVzZSBzdHJpY3RcIjtsZXQgeCA9IDE7IGZ1bmN0aW9uIGYoKSB7IHJldHVybiB0eXBlb2YgeDsgfTtmKCkgPT0gXCJudW1iZXJcIjsnKX1jYXRjaChiKXthPSExfWdvb2cuaGFzQmFkTGV0U2NvcGluZz1hfXJldHVybiBnb29nLmhhc0JhZExldFNjb3Bpbmd9O2dvb2cud29ya2Fyb3VuZFNhZmFyaTEwRXZhbEJ1Zz1mdW5jdGlvbihhKXtyZXR1cm5cIihmdW5jdGlvbigpe1wiK2ErXCJcXG47fSkoKTtcXG5cIn07XG5nb29nLmxvYWRNb2R1bGU9ZnVuY3Rpb24oYSl7dmFyIGI9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV87dHJ5e2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXttb2R1bGVOYW1lOlwiXCIsZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZTohMSx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HfTtpZihnb29nLmlzRnVuY3Rpb24oYSkpdmFyIGM9YS5jYWxsKHZvaWQgMCx7fSk7ZWxzZSBpZihnb29nLmlzU3RyaW5nKGEpKWdvb2cudXNlU2FmYXJpMTBXb3JrYXJvdW5kKCkmJihhPWdvb2cud29ya2Fyb3VuZFNhZmFyaTEwRXZhbEJ1ZyhhKSksYz1nb29nLmxvYWRNb2R1bGVGcm9tU291cmNlXy5jYWxsKHZvaWQgMCxhKTtlbHNlIHRocm93IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvblwiKTt2YXIgZD1nb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lO2lmKGdvb2cuaXNTdHJpbmcoZCkmJmQpZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8uZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT9nb29nLmNvbnN0cnVjdE5hbWVzcGFjZV8oZCxcbmMpOmdvb2cuU0VBTF9NT0RVTEVfRVhQT1JUUyYmT2JqZWN0LnNlYWwmJlwib2JqZWN0XCI9PXR5cGVvZiBjJiZudWxsIT1jJiZPYmplY3Quc2VhbChjKSxnb29nLmxvYWRlZE1vZHVsZXNfW2RdPXtleHBvcnRzOmMsdHlwZTpnb29nLk1vZHVsZVR5cGUuR09PRyxtb2R1bGVJZDpnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lfTtlbHNlIHRocm93IEVycm9yKCdJbnZhbGlkIG1vZHVsZSBuYW1lIFwiJytkKydcIicpO31maW5hbGx5e2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPWJ9fTtnb29nLmxvYWRNb2R1bGVGcm9tU291cmNlXz1mdW5jdGlvbihhKXtldmFsKGEpO3JldHVybnt9fTtnb29nLm5vcm1hbGl6ZVBhdGhfPWZ1bmN0aW9uKGEpe2E9YS5zcGxpdChcIi9cIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDspXCIuXCI9PWFbYl0/YS5zcGxpY2UoYiwxKTpiJiZcIi4uXCI9PWFbYl0mJmFbYi0xXSYmXCIuLlwiIT1hW2ItMV0/YS5zcGxpY2UoLS1iLDIpOmIrKztyZXR1cm4gYS5qb2luKFwiL1wiKX07XG5nb29nLmxvYWRGaWxlU3luY189ZnVuY3Rpb24oYSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9MT0FEX0ZJTEVfU1lOQylyZXR1cm4gZ29vZy5nbG9iYWwuQ0xPU1VSRV9MT0FEX0ZJTEVfU1lOQyhhKTt0cnl7dmFyIGI9bmV3IGdvb2cuZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcImdldFwiLGEsITEpO2Iuc2VuZCgpO3JldHVybiAwPT1iLnN0YXR1c3x8MjAwPT1iLnN0YXR1cz9iLnJlc3BvbnNlVGV4dDpudWxsfWNhdGNoKGMpe3JldHVybiBudWxsfX07XG5nb29nLnRyYW5zcGlsZV89ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWdvb2cuZ2xvYmFsLiRqc2NvbXA7ZHx8KGdvb2cuZ2xvYmFsLiRqc2NvbXA9ZD17fSk7dmFyIGU9ZC50cmFuc3BpbGU7aWYoIWUpe3ZhciBmPWdvb2cuYmFzZVBhdGgrZ29vZy5UUkFOU1BJTEVSLGc9Z29vZy5sb2FkRmlsZVN5bmNfKGYpO2lmKGcpeyhmdW5jdGlvbigpeygwLGV2YWwpKGcrXCJcXG4vLyMgc291cmNlVVJMPVwiK2YpfSkuY2FsbChnb29nLmdsb2JhbCk7aWYoZ29vZy5nbG9iYWwuJGd3dEV4cG9ydCYmZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wJiYhZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wLnRyYW5zcGlsZSl0aHJvdyBFcnJvcignVGhlIHRyYW5zcGlsZXIgZGlkIG5vdCBwcm9wZXJseSBleHBvcnQgdGhlIFwidHJhbnNwaWxlXCIgbWV0aG9kLiAkZ3d0RXhwb3J0OiAnK0pTT04uc3RyaW5naWZ5KGdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQpKTtnb29nLmdsb2JhbC4kanNjb21wLnRyYW5zcGlsZT1cbmdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQuJGpzY29tcC50cmFuc3BpbGU7ZD1nb29nLmdsb2JhbC4kanNjb21wO2U9ZC50cmFuc3BpbGV9fWV8fChlPWQudHJhbnNwaWxlPWZ1bmN0aW9uKGEsYil7Z29vZy5sb2dUb0NvbnNvbGVfKGIrXCIgcmVxdWlyZXMgdHJhbnNwaWxhdGlvbiBidXQgbm8gdHJhbnNwaWxlciB3YXMgZm91bmQuXCIpO3JldHVybiBhfSk7cmV0dXJuIGUoYSxiLGMpfTtcbmdvb2cudHlwZU9mPWZ1bmN0aW9uKGEpe3ZhciBiPXR5cGVvZiBhO2lmKFwib2JqZWN0XCI9PWIpaWYoYSl7aWYoYSBpbnN0YW5jZW9mIEFycmF5KXJldHVyblwiYXJyYXlcIjtpZihhIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBiO3ZhciBjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZihcIltvYmplY3QgV2luZG93XVwiPT1jKXJldHVyblwib2JqZWN0XCI7aWYoXCJbb2JqZWN0IEFycmF5XVwiPT1jfHxcIm51bWJlclwiPT10eXBlb2YgYS5sZW5ndGgmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLnNwbGljZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKFwic3BsaWNlXCIpKXJldHVyblwiYXJyYXlcIjtpZihcIltvYmplY3QgRnVuY3Rpb25dXCI9PWN8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmNhbGwmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLnByb3BlcnR5SXNFbnVtZXJhYmxlJiYhYS5wcm9wZXJ0eUlzRW51bWVyYWJsZShcImNhbGxcIikpcmV0dXJuXCJmdW5jdGlvblwifWVsc2UgcmV0dXJuXCJudWxsXCI7XG5lbHNlIGlmKFwiZnVuY3Rpb25cIj09YiYmXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuY2FsbClyZXR1cm5cIm9iamVjdFwiO3JldHVybiBifTtnb29nLmlzTnVsbD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWF9O2dvb2cuaXNEZWZBbmROb3ROdWxsPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hfTtnb29nLmlzQXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuXCJhcnJheVwiPT1nb29nLnR5cGVPZihhKX07Z29vZy5pc0FycmF5TGlrZT1mdW5jdGlvbihhKXt2YXIgYj1nb29nLnR5cGVPZihhKTtyZXR1cm5cImFycmF5XCI9PWJ8fFwib2JqZWN0XCI9PWImJlwibnVtYmVyXCI9PXR5cGVvZiBhLmxlbmd0aH07Z29vZy5pc0RhdGVMaWtlPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmlzT2JqZWN0KGEpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldEZ1bGxZZWFyfTtnb29nLmlzRnVuY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT1nb29nLnR5cGVPZihhKX07XG5nb29nLmlzT2JqZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVyblwib2JqZWN0XCI9PWImJm51bGwhPWF8fFwiZnVuY3Rpb25cIj09Yn07Z29vZy5nZXRVaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFbZ29vZy5VSURfUFJPUEVSVFlfXXx8KGFbZ29vZy5VSURfUFJPUEVSVFlfXT0rK2dvb2cudWlkQ291bnRlcl8pfTtnb29nLmhhc1VpZD1mdW5jdGlvbihhKXtyZXR1cm4hIWFbZ29vZy5VSURfUFJPUEVSVFlfXX07Z29vZy5yZW1vdmVVaWQ9ZnVuY3Rpb24oYSl7bnVsbCE9PWEmJlwicmVtb3ZlQXR0cmlidXRlXCJpbiBhJiZhLnJlbW92ZUF0dHJpYnV0ZShnb29nLlVJRF9QUk9QRVJUWV8pO3RyeXtkZWxldGUgYVtnb29nLlVJRF9QUk9QRVJUWV9dfWNhdGNoKGIpe319O2dvb2cuVUlEX1BST1BFUlRZXz1cImNsb3N1cmVfdWlkX1wiKygxRTkqTWF0aC5yYW5kb20oKT4+PjApO2dvb2cudWlkQ291bnRlcl89MDtnb29nLmdldEhhc2hDb2RlPWdvb2cuZ2V0VWlkO1xuZ29vZy5yZW1vdmVIYXNoQ29kZT1nb29nLnJlbW92ZVVpZDtnb29nLmNsb25lT2JqZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWdvb2cudHlwZU9mKGEpO2lmKFwib2JqZWN0XCI9PWJ8fFwiYXJyYXlcIj09Yil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuY2xvbmUpcmV0dXJuIGEuY2xvbmUoKTtiPVwiYXJyYXlcIj09Yj9bXTp7fTtmb3IodmFyIGMgaW4gYSliW2NdPWdvb2cuY2xvbmVPYmplY3QoYVtjXSk7cmV0dXJuIGJ9cmV0dXJuIGF9O2dvb2cuYmluZE5hdGl2ZV89ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhLmNhbGwuYXBwbHkoYS5iaW5kLGFyZ3VtZW50cyl9O1xuZ29vZy5iaW5kSnNfPWZ1bmN0aW9uKGEsYixjKXtpZighYSl0aHJvdyBFcnJvcigpO2lmKDI8YXJndW1lbnRzLmxlbmd0aCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7QXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYyxkKTtyZXR1cm4gYS5hcHBseShiLGMpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLGFyZ3VtZW50cyl9fTtnb29nLmJpbmQ9ZnVuY3Rpb24oYSxiLGMpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/Z29vZy5iaW5kPWdvb2cuYmluZE5hdGl2ZV86Z29vZy5iaW5kPWdvb2cuYmluZEpzXztyZXR1cm4gZ29vZy5iaW5kLmFwcGx5KG51bGwsYXJndW1lbnRzKX07XG5nb29nLnBhcnRpYWw9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9Yy5zbGljZSgpO2IucHVzaC5hcHBseShiLGFyZ3VtZW50cyk7cmV0dXJuIGEuYXBwbHkodGhpcyxiKX19O2dvb2cubWl4aW49ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYilhW2NdPWJbY119O2dvb2cubm93PWdvb2cuVFJVU1RFRF9TSVRFJiZEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9O1xuZ29vZy5nbG9iYWxFdmFsPWZ1bmN0aW9uKGEpe2lmKGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQpZ29vZy5nbG9iYWwuZXhlY1NjcmlwdChhLFwiSmF2YVNjcmlwdFwiKTtlbHNlIGlmKGdvb2cuZ2xvYmFsLmV2YWwpe2lmKG51bGw9PWdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pe3RyeXtnb29nLmdsb2JhbC5ldmFsKFwidmFyIF9ldmFsVGVzdF8gPSAxO1wiKX1jYXRjaChkKXt9aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdvb2cuZ2xvYmFsLl9ldmFsVGVzdF8pe3RyeXtkZWxldGUgZ29vZy5nbG9iYWwuX2V2YWxUZXN0X31jYXRjaChkKXt9Z29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz0hMH1lbHNlIGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc189ITF9aWYoZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXylnb29nLmdsb2JhbC5ldmFsKGEpO2Vsc2V7dmFyIGI9Z29vZy5nbG9iYWwuZG9jdW1lbnQsYz1iLmNyZWF0ZUVsZW1lbnQoXCJTQ1JJUFRcIik7Yy50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI7Yy5kZWZlcj1cbiExO2MuYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZShhKSk7Yi5oZWFkLmFwcGVuZENoaWxkKGMpO2IuaGVhZC5yZW1vdmVDaGlsZChjKX19ZWxzZSB0aHJvdyBFcnJvcihcImdvb2cuZ2xvYmFsRXZhbCBub3QgYXZhaWxhYmxlXCIpO307Z29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz1udWxsO1xuZ29vZy5nZXRDc3NOYW1lPWZ1bmN0aW9uKGEsYil7aWYoXCIuXCI9PVN0cmluZyhhKS5jaGFyQXQoMCkpdGhyb3cgRXJyb3IoJ2NsYXNzTmFtZSBwYXNzZWQgaW4gZ29vZy5nZXRDc3NOYW1lIG11c3Qgbm90IHN0YXJ0IHdpdGggXCIuXCIuIFlvdSBwYXNzZWQ6ICcrYSk7dmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2FdfHxhfSxkPWZ1bmN0aW9uKGEpe2E9YS5zcGxpdChcIi1cIik7Zm9yKHZhciBiPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKyliLnB1c2goYyhhW2RdKSk7cmV0dXJuIGIuam9pbihcIi1cIil9O2Q9Z29vZy5jc3NOYW1lTWFwcGluZ18/XCJCWV9XSE9MRVwiPT1nb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfP2M6ZDpmdW5jdGlvbihhKXtyZXR1cm4gYX07YT1iP2ErXCItXCIrZChiKTpkKGEpO3JldHVybiBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTj9nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTihhKTphfTtcbmdvb2cuc2V0Q3NzTmFtZU1hcHBpbmc9ZnVuY3Rpb24oYSxiKXtnb29nLmNzc05hbWVNYXBwaW5nXz1hO2dvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV89Yn07IUNPTVBJTEVEJiZnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcmJihnb29nLmNzc05hbWVNYXBwaW5nXz1nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcpO2dvb2cuZ2V0TXNnPWZ1bmN0aW9uKGEsYixjKXtjJiZjLmh0bWwmJihhPWEucmVwbGFjZSgvPC9nLFwiJmx0O1wiKSk7YiYmKGE9YS5yZXBsYWNlKC9cXHtcXCQoW159XSspfS9nLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIG51bGwhPWImJmMgaW4gYj9iW2NdOmF9KSk7cmV0dXJuIGF9O2dvb2cuZ2V0TXNnV2l0aEZhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGF9O2dvb2cuZXhwb3J0U3ltYm9sPWZ1bmN0aW9uKGEsYixjKXtnb29nLmV4cG9ydFBhdGhfKGEsYixjKX07XG5nb29nLmV4cG9ydFByb3BlcnR5PWZ1bmN0aW9uKGEsYixjKXthW2JdPWN9O2dvb2cuaW5oZXJpdHM9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPWIucHJvdG90eXBlO2Euc3VwZXJDbGFzc189Yi5wcm90b3R5cGU7YS5wcm90b3R5cGU9bmV3IGM7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTthLmJhc2U9ZnVuY3Rpb24oYSxjLGYpe2Zvcih2YXIgZD1BcnJheShhcmd1bWVudHMubGVuZ3RoLTIpLGU9MjtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWRbZS0yXT1hcmd1bWVudHNbZV07cmV0dXJuIGIucHJvdG90eXBlW2NdLmFwcGx5KGEsZCl9fTtcbmdvb2cuYmFzZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7aWYoZ29vZy5TVFJJQ1RfTU9ERV9DT01QQVRJQkxFfHxnb29nLkRFQlVHJiYhZCl0aHJvdyBFcnJvcihcImFyZ3VtZW50cy5jYWxsZXIgbm90IGRlZmluZWQuICBnb29nLmJhc2UoKSBjYW5ub3QgYmUgdXNlZCB3aXRoIHN0cmljdCBtb2RlIGNvZGUuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtQ1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGQuc3VwZXJDbGFzc18pe2Zvcih2YXIgZT1BcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLGY9MTtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKWVbZi0xXT1hcmd1bWVudHNbZl07cmV0dXJuIGQuc3VwZXJDbGFzc18uY29uc3RydWN0b3IuYXBwbHkoYSxlKX1pZihcInN0cmluZ1wiIT10eXBlb2YgYiYmXCJzeW1ib2xcIiE9dHlwZW9mIGIpdGhyb3cgRXJyb3IoXCJtZXRob2QgbmFtZXMgcHJvdmlkZWQgdG8gZ29vZy5iYXNlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xcIik7XG5lPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMik7Zm9yKGY9MjtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKWVbZi0yXT1hcmd1bWVudHNbZl07Zj0hMTtmb3IodmFyIGc9YS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7ZztnPU9iamVjdC5nZXRQcm90b3R5cGVPZihnKSlpZihnW2JdPT09ZClmPSEwO2Vsc2UgaWYoZilyZXR1cm4gZ1tiXS5hcHBseShhLGUpO2lmKGFbYl09PT1kKXJldHVybiBhLmNvbnN0cnVjdG9yLnByb3RvdHlwZVtiXS5hcHBseShhLGUpO3Rocm93IEVycm9yKFwiZ29vZy5iYXNlIGNhbGxlZCBmcm9tIGEgbWV0aG9kIG9mIG9uZSBuYW1lIHRvIGEgbWV0aG9kIG9mIGEgZGlmZmVyZW50IG5hbWVcIik7fTtnb29nLnNjb3BlPWZ1bmN0aW9uKGEpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cuc2NvcGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoaW4gYSBtb2R1bGUuXCIpO2EuY2FsbChnb29nLmdsb2JhbCl9O1xuQ09NUElMRUR8fChnb29nLmdsb2JhbC5DT01QSUxFRD1DT01QSUxFRCk7Z29vZy5kZWZpbmVDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWIuY29uc3RydWN0b3IsZD1iLnN0YXRpY3M7YyYmYyE9T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcnx8KGM9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcImNhbm5vdCBpbnN0YW50aWF0ZSBhbiBpbnRlcmZhY2UgKG5vIGNvbnN0cnVjdG9yIGRlZmluZWQpLlwiKTt9KTtjPWdvb2cuZGVmaW5lQ2xhc3MuY3JlYXRlU2VhbGluZ0NvbnN0cnVjdG9yXyhjLGEpO2EmJmdvb2cuaW5oZXJpdHMoYyxhKTtkZWxldGUgYi5jb25zdHJ1Y3RvcjtkZWxldGUgYi5zdGF0aWNzO2dvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXyhjLnByb3RvdHlwZSxiKTtudWxsIT1kJiYoZCBpbnN0YW5jZW9mIEZ1bmN0aW9uP2QoYyk6Z29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfKGMsZCkpO3JldHVybiBjfTtcbmdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVM9Z29vZy5ERUJVRztnb29nLmRlZmluZUNsYXNzLmNyZWF0ZVNlYWxpbmdDb25zdHJ1Y3Rvcl89ZnVuY3Rpb24oYSxiKXtpZighZ29vZy5kZWZpbmVDbGFzcy5TRUFMX0NMQVNTX0lOU1RBTkNFUylyZXR1cm4gYTt2YXIgYz0hZ29vZy5kZWZpbmVDbGFzcy5pc1Vuc2VhbGFibGVfKGIpLGQ9ZnVuY3Rpb24oKXt2YXIgYj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztiW2dvb2cuVUlEX1BST1BFUlRZX109Yltnb29nLlVJRF9QUk9QRVJUWV9dO3RoaXMuY29uc3RydWN0b3I9PT1kJiZjJiZPYmplY3Quc2VhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZPYmplY3Quc2VhbChiKTtyZXR1cm4gYn07cmV0dXJuIGR9O2dvb2cuZGVmaW5lQ2xhc3MuaXNVbnNlYWxhYmxlXz1mdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5wcm90b3R5cGUmJmEucHJvdG90eXBlW2dvb2cuVU5TRUFMQUJMRV9DT05TVFJVQ1RPUl9QUk9QRVJUWV9dfTtcbmdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpO2dvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGMpJiYoYVtjXT1iW2NdKTtmb3IodmFyIGQ9MDtkPGdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfLmxlbmd0aDtkKyspYz1nb29nLmRlZmluZUNsYXNzLk9CSkVDVF9QUk9UT1RZUEVfRklFTERTX1tkXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixjKSYmKGFbY109YltjXSl9O1xuZ29vZy50YWdVbnNlYWxhYmxlQ2xhc3M9ZnVuY3Rpb24oYSl7IUNPTVBJTEVEJiZnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTJiYoYS5wcm90b3R5cGVbZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZX109ITApfTtnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfPVwiZ29vZ19kZWZpbmVDbGFzc19sZWdhY3lfdW5zZWFsYWJsZVwiO1xuIUNPTVBJTEVEJiZnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEJiYoZ29vZy5pbkh0bWxEb2N1bWVudF89ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gbnVsbCE9YSYmXCJ3cml0ZVwiaW4gYX0sZ29vZy5pc0RvY3VtZW50TG9hZGluZ189ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gYS5hdHRhY2hFdmVudD9cImNvbXBsZXRlXCIhPWEucmVhZHlTdGF0ZTpcImxvYWRpbmdcIj09YS5yZWFkeVN0YXRlfSxnb29nLmZpbmRCYXNlUGF0aF89ZnVuY3Rpb24oKXtpZihnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIKSYmZ29vZy5pc1N0cmluZyhnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkpZ29vZy5iYXNlUGF0aD1nb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSDtlbHNlIGlmKGdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpe3ZhciBhPWdvb2cuZ2xvYmFsLmRvY3VtZW50LGI9YS5jdXJyZW50U2NyaXB0O1xuYT1iP1tiXTphLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiU0NSSVBUXCIpO2ZvcihiPWEubGVuZ3RoLTE7MDw9YjstLWIpe3ZhciBjPWFbYl0uc3JjLGQ9Yy5sYXN0SW5kZXhPZihcIj9cIik7ZD0tMT09ZD9jLmxlbmd0aDpkO2lmKFwiYmFzZS5qc1wiPT1jLnN1YnN0cihkLTcsNykpe2dvb2cuYmFzZVBhdGg9Yy5zdWJzdHIoMCxkLTcpO2JyZWFrfX19fSxnb29nLmZpbmRCYXNlUGF0aF8oKSxnb29nLlRyYW5zcGlsZXI9ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl89bnVsbDt0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfPWdvb2cuVFJBTlNQSUxFX1RPX0xBTkdVQUdFfSxnb29nLlRyYW5zcGlsZXIucHJvdG90eXBlLmNyZWF0ZVJlcXVpcmVzVHJhbnNwaWxhdGlvbl89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7ZT9kW2FdPSEwOmIoKT8oYz1hLGRbYV09ITEpOmU9ZFthXT0hMH1mdW5jdGlvbiBiKGEpe3RyeXtyZXR1cm4hIWV2YWwoYSl9Y2F0Y2goaCl7cmV0dXJuITF9fVxudmFyIGM9XCJlczNcIixkPXtlczM6ITF9LGU9ITEsZj1nb29nLmdsb2JhbC5uYXZpZ2F0b3ImJmdvb2cuZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ/Z29vZy5nbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudDpcIlwiO2EoXCJlczVcIixmdW5jdGlvbigpe3JldHVybiBiKFwiWzEsXS5sZW5ndGg9PTFcIil9KTthKFwiZXM2XCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5tYXRjaCgvRWRnZVxcLyhcXGQrKShcXC5cXGQpKi9pKT8hMTpiKCcoKCk9PntcInVzZSBzdHJpY3RcIjtjbGFzcyBYe2NvbnN0cnVjdG9yKCl7aWYobmV3LnRhcmdldCE9U3RyaW5nKXRocm93IDE7dGhpcy54PTQyfX1sZXQgcT1SZWZsZWN0LmNvbnN0cnVjdChYLFtdLFN0cmluZyk7aWYocS54IT00Mnx8IShxIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyAxO2Zvcihjb25zdCBhIG9mWzIsM10pe2lmKGE9PTIpY29udGludWU7ZnVuY3Rpb24gZih6PXthfSl7bGV0IGE9MDtyZXR1cm4gei5hfXtmdW5jdGlvbiBmKCl7cmV0dXJuIDA7fX1yZXR1cm4gZigpPT0zfX0pKCknKX0pO1xuYShcImVzN1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCIyICoqIDIgPT0gNFwiKX0pO2EoXCJlczhcIixmdW5jdGlvbigpe3JldHVybiBiKFwiYXN5bmMgKCkgPT4gMSwgdHJ1ZVwiKX0pO2EoXCJlczlcIixmdW5jdGlvbigpe3JldHVybiBiKFwiKHsuLi5yZXN0fSA9IHt9KSwgdHJ1ZVwiKX0pO2EoXCJlc19uZXh0XCIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybnt0YXJnZXQ6YyxtYXA6ZH19LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUubmVlZHNUcmFuc3BpbGU9ZnVuY3Rpb24oYSxiKXtpZihcImFsd2F5c1wiPT1nb29nLlRSQU5TUElMRSlyZXR1cm4hMDtpZihcIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFKXJldHVybiExO2lmKCF0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl8pe3ZhciBjPXRoaXMuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXygpO3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1jLm1hcDt0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfPXRoaXMudHJhbnNwaWxhdGlvblRhcmdldF98fFxuYy50YXJnZXR9aWYoYSBpbiB0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl8pcmV0dXJuIHRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uX1thXT8hMDohZ29vZy5pbkh0bWxEb2N1bWVudF8oKXx8XCJlczZcIiE9Ynx8XCJub01vZHVsZVwiaW4gZ29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT8hMTohMDt0aHJvdyBFcnJvcihcIlVua25vd24gbGFuZ3VhZ2UgbW9kZTogXCIrYSk7fSxnb29nLlRyYW5zcGlsZXIucHJvdG90eXBlLnRyYW5zcGlsZT1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLnRyYW5zcGlsZV8oYSxiLHRoaXMudHJhbnNwaWxhdGlvblRhcmdldF8pfSxnb29nLnRyYW5zcGlsZXJfPW5ldyBnb29nLlRyYW5zcGlsZXIsZ29vZy5wcm90ZWN0U2NyaXB0VGFnXz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC88XFwvKFNDUklQVCkvaWcsXCJcXFxceDNjLyQxXCIpfSxnb29nLkRlYnVnTG9hZGVyXz1mdW5jdGlvbigpe3RoaXMuZGVwZW5kZW5jaWVzXz17fTtcbnRoaXMuaWRUb1BhdGhfPXt9O3RoaXMud3JpdHRlbl89e307dGhpcy5sb2FkaW5nRGVwc189W107dGhpcy5kZXBzVG9Mb2FkXz1bXTt0aGlzLnBhdXNlZF89ITE7dGhpcy5mYWN0b3J5Xz1uZXcgZ29vZy5EZXBlbmRlbmN5RmFjdG9yeShnb29nLnRyYW5zcGlsZXJfKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzXz17fTt0aGlzLmRlZmVycmVkUXVldWVfPVtdfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYm9vdHN0cmFwPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe2QmJihnb29nLmdsb2JhbC5zZXRUaW1lb3V0KGQsMCksZD1udWxsKX12YXIgZD1iO2lmKGEubGVuZ3RoKXtiPVtdO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmdldFBhdGhGcm9tRGVwc18oYVtlXSk7aWYoIWYpdGhyb3cgRXJyb3IoXCJVbnJlZ29uaXplZCBuYW1lc3BhY2U6IFwiK2FbZV0pO2IucHVzaCh0aGlzLmRlcGVuZGVuY2llc19bZl0pfWY9Z29vZy5yZXF1aXJlO3ZhciBnPTA7Zm9yKGU9XG4wO2U8YS5sZW5ndGg7ZSsrKWYoYVtlXSksYltlXS5vbkxvYWQoZnVuY3Rpb24oKXsrK2c9PWEubGVuZ3RoJiZjKCl9KX1lbHNlIGMoKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRDbG9zdXJlRGVwcz1mdW5jdGlvbigpe3RoaXMuZGVwc1RvTG9hZF8ucHVzaCh0aGlzLmZhY3RvcnlfLmNyZWF0ZURlcGVuZGVuY3koZ29vZy5ub3JtYWxpemVQYXRoXyhnb29nLmJhc2VQYXRoK1wiZGVwcy5qc1wiKSxcImRlcHMuanNcIixbXSxbXSx7fSwhMSkpO3RoaXMubG9hZERlcHNfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5yZXF1ZXN0ZWQ9ZnVuY3Rpb24oYSxiKXsoYT10aGlzLmdldFBhdGhGcm9tRGVwc18oYSkpJiYoYnx8dGhpcy5hcmVEZXBzTG9hZGVkXyh0aGlzLmRlcGVuZGVuY2llc19bYV0ucmVxdWlyZXMpKSYmKGI9dGhpcy5kZWZlcnJlZENhbGxiYWNrc19bYV0pJiYoZGVsZXRlIHRoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2FdLGIoKSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5zZXREZXBlbmRlbmN5RmFjdG9yeT1cbmZ1bmN0aW9uKGEpe3RoaXMuZmFjdG9yeV89YX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRfPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZ2V0UGF0aEZyb21EZXBzXyhhKSl7dmFyIGI9dGhpcyxjPVtdLGQ9ZnVuY3Rpb24oYSl7dmFyIGU9Yi5nZXRQYXRoRnJvbURlcHNfKGEpO2lmKCFlKXRocm93IEVycm9yKFwiQmFkIGRlcGVuZGVuY3kgcGF0aCBvciBzeW1ib2w6IFwiK2EpO2lmKCFiLndyaXR0ZW5fW2VdKXtiLndyaXR0ZW5fW2VdPSEwO2E9Yi5kZXBlbmRlbmNpZXNfW2VdO2ZvcihlPTA7ZTxhLnJlcXVpcmVzLmxlbmd0aDtlKyspZ29vZy5pc1Byb3ZpZGVkXyhhLnJlcXVpcmVzW2VdKXx8ZChhLnJlcXVpcmVzW2VdKTtjLnB1c2goYSl9fTtkKGEpO2E9ISF0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aDt0aGlzLmRlcHNUb0xvYWRfPXRoaXMuZGVwc1RvTG9hZF8uY29uY2F0KGMpO3RoaXMucGF1c2VkX3x8YXx8dGhpcy5sb2FkRGVwc18oKX1lbHNlIHRocm93IGE9XCJnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6IFwiK1xuYSxnb29nLmxvZ1RvQ29uc29sZV8oYSksRXJyb3IoYSk7fSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZERlcHNfPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLnBhdXNlZF87dGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgmJiFiOykoZnVuY3Rpb24oKXt2YXIgYz0hMSxkPWEuZGVwc1RvTG9hZF8uc2hpZnQoKSxlPSExO2EubG9hZGluZ18oZCk7dmFyIGY9e3BhdXNlOmZ1bmN0aW9uKCl7aWYoYyl0aHJvdyBFcnJvcihcIkNhbm5vdCBjYWxsIHBhdXNlIGFmdGVyIHRoZSBjYWxsIHRvIGxvYWQuXCIpO2I9ITB9LHJlc3VtZTpmdW5jdGlvbigpe2M/YS5yZXN1bWVfKCk6Yj0hMX0sbG9hZGVkOmZ1bmN0aW9uKCl7aWYoZSl0aHJvdyBFcnJvcihcIkRvdWJsZSBjYWxsIHRvIGxvYWRlZC5cIik7ZT0hMDthLmxvYWRlZF8oZCl9LHBlbmRpbmc6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sb2FkaW5nRGVwc18ubGVuZ3RoO2MrKyliLnB1c2goYS5sb2FkaW5nRGVwc19bY10pO1xucmV0dXJuIGJ9LHNldE1vZHVsZVN0YXRlOmZ1bmN0aW9uKGEpe2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXt0eXBlOmEsbW9kdWxlTmFtZTpcIlwiLGRlY2xhcmVMZWdhY3lOYW1lc3BhY2U6ITF9fSxyZWdpc3RlckVzNk1vZHVsZUV4cG9ydHM6ZnVuY3Rpb24oYSxiLGMpe2MmJihnb29nLmxvYWRlZE1vZHVsZXNfW2NdPXtleHBvcnRzOmIsdHlwZTpnb29nLk1vZHVsZVR5cGUuRVM2LG1vZHVsZUlkOmN8fFwiXCJ9KX0scmVnaXN0ZXJHb29nTW9kdWxlRXhwb3J0czpmdW5jdGlvbihhLGIpe2dvb2cubG9hZGVkTW9kdWxlc19bYV09e2V4cG9ydHM6Yix0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmF9fSxjbGVhck1vZHVsZVN0YXRlOmZ1bmN0aW9uKCl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbH0sZGVmZXI6ZnVuY3Rpb24oYil7aWYoYyl0aHJvdyBFcnJvcihcIkNhbm5vdCByZWdpc3RlciB3aXRoIGRlZmVyIGFmdGVyIHRoZSBjYWxsIHRvIGxvYWQuXCIpO2EuZGVmZXJfKGQsXG5iKX0sYXJlRGVwc0xvYWRlZDpmdW5jdGlvbigpe3JldHVybiBhLmFyZURlcHNMb2FkZWRfKGQucmVxdWlyZXMpfX07dHJ5e2QubG9hZChmKX1maW5hbGx5e2M9ITB9fSkoKTtiJiZ0aGlzLnBhdXNlXygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucGF1c2VfPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWRfPSEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucmVzdW1lXz1mdW5jdGlvbigpe3RoaXMucGF1c2VkXyYmKHRoaXMucGF1c2VkXz0hMSx0aGlzLmxvYWREZXBzXygpKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRpbmdfPWZ1bmN0aW9uKGEpe3RoaXMubG9hZGluZ0RlcHNfLnB1c2goYSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkZWRfPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO2I8dGhpcy5sb2FkaW5nRGVwc18ubGVuZ3RoO2IrKylpZih0aGlzLmxvYWRpbmdEZXBzX1tiXT09YSl7dGhpcy5sb2FkaW5nRGVwc18uc3BsaWNlKGIsMSk7XG5icmVha31mb3IoYj0wO2I8dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGg7YisrKWlmKHRoaXMuZGVmZXJyZWRRdWV1ZV9bYl09PWEucGF0aCl7dGhpcy5kZWZlcnJlZFF1ZXVlXy5zcGxpY2UoYiwxKTticmVha31pZih0aGlzLmxvYWRpbmdEZXBzXy5sZW5ndGg9PXRoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoJiYhdGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgpZm9yKDt0aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aDspdGhpcy5yZXF1ZXN0ZWQodGhpcy5kZWZlcnJlZFF1ZXVlXy5zaGlmdCgpLCEwKTthLmxvYWRlZCgpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYXJlRGVwc0xvYWRlZF89ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhhW2JdKTtpZighY3x8IShjIGluIHRoaXMuZGVmZXJyZWRDYWxsYmFja3NffHxnb29nLmlzUHJvdmlkZWRfKGFbYl0pKSlyZXR1cm4hMX1yZXR1cm4hMH0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmdldFBhdGhGcm9tRGVwc189XG5mdW5jdGlvbihhKXtyZXR1cm4gYSBpbiB0aGlzLmlkVG9QYXRoXz90aGlzLmlkVG9QYXRoX1thXTphIGluIHRoaXMuZGVwZW5kZW5jaWVzXz9hOm51bGx9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5kZWZlcl89ZnVuY3Rpb24oYSxiKXt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1thLnBhdGhdPWI7dGhpcy5kZWZlcnJlZFF1ZXVlXy5wdXNoKGEucGF0aCl9LGdvb2cuTG9hZENvbnRyb2xsZXI9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucGVuZGluZz1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzPWZ1bmN0aW9uKGEsXG5iLGMpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuc2V0TW9kdWxlU3RhdGU9ZnVuY3Rpb24oYSl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5jbGVhck1vZHVsZVN0YXRlPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5kZWZlcj1mdW5jdGlvbihhKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmFyZURlcHNMb2FkZWQ9ZnVuY3Rpb24oKXt9LGdvb2cuRGVwZW5kZW5jeT1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMucGF0aD1hO3RoaXMucmVsYXRpdmVQYXRoPWI7dGhpcy5wcm92aWRlcz1jO3RoaXMucmVxdWlyZXM9ZDt0aGlzLmxvYWRGbGFncz1lO3RoaXMubG9hZGVkXz0hMTt0aGlzLmxvYWRDYWxsYmFja3NfPVtdfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmdldFBhdGhOYW1lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXRoLGI9YS5pbmRleE9mKFwiOi8vXCIpOzA8PWImJihhPWEuc3Vic3RyaW5nKGIrMyksYj1cbmEuaW5kZXhPZihcIi9cIiksMDw9YiYmKGE9YS5zdWJzdHJpbmcoYisxKSkpO3JldHVybiBhfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLm9uTG9hZD1mdW5jdGlvbihhKXt0aGlzLmxvYWRlZF8/YSgpOnRoaXMubG9hZENhbGxiYWNrc18ucHVzaChhKX0sZ29vZy5EZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZF89ITA7dmFyIGE9dGhpcy5sb2FkQ2FsbGJhY2tzXzt0aGlzLmxvYWRDYWxsYmFja3NfPVtdO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKX0sZ29vZy5EZXBlbmRlbmN5LmRlZmVyXz0hMSxnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfPXt9LGdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXz1mdW5jdGlvbihhKXt2YXIgYj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDMyKTtnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2JdPWE7cmV0dXJuIGJ9LGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfPVxuZnVuY3Rpb24oYSl7ZGVsZXRlIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF9bYV19LGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja189ZnVuY3Rpb24oYSxiKXtpZihhIGluIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF8pe2Zvcih2YXIgYz1nb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2FdLGQ9W10sZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZC5wdXNoKGFyZ3VtZW50c1tlXSk7Yy5hcHBseSh2b2lkIDAsZCl9ZWxzZSB0aHJvdyBFcnJvcihcIkNhbGxiYWNrIGtleSBcIithK1wiIGRvZXMgbm90IGV4aXN0ICh3YXMgYmFzZS5qcyBsb2FkZWQgbW9yZSB0aGFuIG9uY2U/KS5cIik7fSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oYSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2EubG9hZGVkKCk6YS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIGI9XG5nb29nLmdsb2JhbC5kb2N1bWVudDtpZihcImNvbXBsZXRlXCI9PWIucmVhZHlTdGF0ZSYmIWdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORyl7aWYoL1xcYmRlcHMuanMkLy50ZXN0KHRoaXMucGF0aCkpe2EubG9hZGVkKCk7cmV0dXJufXRocm93IEVycm9yKCdDYW5ub3Qgd3JpdGUgXCInK3RoaXMucGF0aCsnXCIgYWZ0ZXIgZG9jdW1lbnQgbG9hZCcpO31pZighZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HJiZnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpKXt2YXIgYz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oZnVuY3Rpb24oYil7Z29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmXCJjb21wbGV0ZVwiIT1iLnJlYWR5U3RhdGV8fChnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhjKSxhLmxvYWRlZCgpKX0pLGQ9IWdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJmdvb2cuZ2V0U2NyaXB0Tm9uY2UoKT9cbicgbm9uY2U9XCInK2dvb2cuZ2V0U2NyaXB0Tm9uY2UoKSsnXCInOlwiXCI7ZD0nPHNjcmlwdCBzcmM9XCInK3RoaXMucGF0aCsnXCIgJysoZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXz9cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiOlwib25sb2FkXCIpK1wiPVxcXCJnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKCdcIitjKydcXCcsIHRoaXMpXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiICcrKGdvb2cuRGVwZW5kZW5jeS5kZWZlcl8/XCJkZWZlclwiOlwiXCIpK2QrXCI+XFx4M2Mvc2NyaXB0PlwiO2Iud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChkKTpkKX1lbHNle3ZhciBlPWIuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtlLmRlZmVyPWdvb2cuRGVwZW5kZW5jeS5kZWZlcl87ZS5hc3luYz0hMTtlLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIjsoZD1nb29nLmdldFNjcmlwdE5vbmNlKCkpJiZlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsZCk7Z29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXz9cbihhLnBhdXNlKCksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZihcImxvYWRlZFwiPT1lLnJlYWR5U3RhdGV8fFwiY29tcGxldGVcIj09ZS5yZWFkeVN0YXRlKWEubG9hZGVkKCksYS5yZXN1bWUoKX0pOmUub25sb2FkPWZ1bmN0aW9uKCl7ZS5vbmxvYWQ9bnVsbDthLmxvYWRlZCgpfTtlLnNyYz1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVTY3JpcHRVUkwodGhpcy5wYXRoKTp0aGlzLnBhdGg7Yi5oZWFkLmFwcGVuZENoaWxkKGUpfX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksXCJkZXBzLmpzXCI9PXRoaXMucmVsYXRpdmVQYXRoPyhnb29nLmxvZ1RvQ29uc29sZV8oXCJDb25zaWRlciBzZXR0aW5nIENMT1NVUkVfSU1QT1JUX1NDUklQVCBiZWZvcmUgbG9hZGluZyBiYXNlLmpzLCBvciBzZXR0aW5nIENMT1NVUkVfTk9fREVQUyB0byB0cnVlLlwiKSxcbmEubG9hZGVkKCkpOmEucGF1c2UoKX0sZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5PWZ1bmN0aW9uKGEsYixjLGQsZSl7Z29vZy5EZXBlbmRlbmN5LmNhbGwodGhpcyxhLGIsYyxkLGUpfSxnb29nLmluaGVyaXRzKGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7YT1iPyc8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBjcm9zc29yaWdpbj4nK2IrXCJcXHgzYy9zY3JpcHQ+XCI6JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luIHNyYz1cIicrYSsnXCI+XFx4M2Mvc2NyaXB0Pic7ZC53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKGEpOmEpfWZ1bmN0aW9uIGMoYSxiKXt2YXIgYz1kLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7Yy5kZWZlcj0hMDtjLmFzeW5jPSExO2MudHlwZT1cblwibW9kdWxlXCI7Yy5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCEwKTt2YXIgZT1nb29nLmdldFNjcmlwdE5vbmNlKCk7ZSYmYy5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGUpO2I/Yy50ZXh0Q29udGVudD1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVTY3JpcHQoYik6YjpjLnNyYz1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVTY3JpcHRVUkwoYSk6YTtkLmhlYWQuYXBwZW5kQ2hpbGQoYyl9aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2EubG9hZGVkKCk6YS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIGQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQsZT10aGlzO2lmKGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpe3ZhciBmPWI7Z29vZy5EZXBlbmRlbmN5LmRlZmVyXz1cbiEwfWVsc2UgZj1jO3ZhciBnPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXyhmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKGcpO2Euc2V0TW9kdWxlU3RhdGUoZ29vZy5Nb2R1bGVUeXBlLkVTNil9KTtmKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicrZysnXCIpJyk7Zih0aGlzLnBhdGgsdm9pZCAwKTt2YXIgaD1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oZnVuY3Rpb24oYil7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18oaCk7YS5yZWdpc3RlckVzNk1vZHVsZUV4cG9ydHMoZS5wYXRoLGIsZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZSl9KTtmKHZvaWQgMCwnaW1wb3J0ICogYXMgbSBmcm9tIFwiJyt0aGlzLnBhdGgrJ1wiOyBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytoKydcIiwgbSknKTt2YXIgaz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhrKTtcbmEuY2xlYXJNb2R1bGVTdGF0ZSgpO2EubG9hZGVkKCl9KTtmKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicraysnXCIpJyl9ZWxzZSBnb29nLmxvZ1RvQ29uc29sZV8oXCJDYW5ub3QgdXNlIGRlZmF1bHQgZGVidWcgbG9hZGVyIG91dHNpZGUgb2YgSFRNTCBkb2N1bWVudHMuXCIpLGEucGF1c2UoKX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlKXtnb29nLkRlcGVuZGVuY3kuY2FsbCh0aGlzLGEsYixjLGQsZSk7dGhpcy5jb250ZW50c189bnVsbDt0aGlzLmxhenlGZXRjaF89IWdvb2cuaW5IdG1sRG9jdW1lbnRfKCl8fCEoXCJub01vZHVsZVwiaW4gZ29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSl9LGdvb2cuaW5oZXJpdHMoZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3ksZ29vZy5EZXBlbmRlbmN5KSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7ZS5jb250ZW50c189XG5nb29nLmxvYWRGaWxlU3luY18oZS5wYXRoKTtlLmNvbnRlbnRzXyYmKGUuY29udGVudHNfPWUudHJhbnNmb3JtKGUuY29udGVudHNfKSxlLmNvbnRlbnRzXyYmKGUuY29udGVudHNfKz1cIlxcbi8vIyBzb3VyY2VVUkw9XCIrZS5wYXRoKSl9ZnVuY3Rpb24gYygpe2UubGF6eUZldGNoXyYmYigpO2lmKGUuY29udGVudHNfKXtmJiZhLnNldE1vZHVsZVN0YXRlKGdvb2cuTW9kdWxlVHlwZS5FUzYpO3RyeXt2YXIgYz1lLmNvbnRlbnRzXztlLmNvbnRlbnRzXz1udWxsO2dvb2cuZ2xvYmFsRXZhbChjKTtpZihmKXZhciBkPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9ZmluYWxseXtmJiZhLmNsZWFyTW9kdWxlU3RhdGUoKX1mJiZnb29nLmdsb2JhbC4kanNjb21wLnJlcXVpcmUuZW5zdXJlKFtlLmdldFBhdGhOYW1lKCldLGZ1bmN0aW9uKCl7YS5yZWdpc3RlckVzNk1vZHVsZUV4cG9ydHMoZS5wYXRoLGdvb2cuZ2xvYmFsLiRqc2NvbXAucmVxdWlyZShlLmdldFBhdGhOYW1lKCkpLFxuZCl9KTthLmxvYWRlZCgpfX1mdW5jdGlvbiBkKCl7dmFyIGE9Z29vZy5nbG9iYWwuZG9jdW1lbnQsYj1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhiKTtjKCl9KSxkPSc8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4nK2dvb2cucHJvdGVjdFNjcmlwdFRhZ18oJ2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK2IrJ1wiKTsnKStcIlxceDNjL3NjcmlwdD5cIjthLndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwoZCk6ZCl9dmFyIGU9dGhpcztpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpYigpLHRoaXMuY29udGVudHNfJiZnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQoXCJcIix0aGlzLmNvbnRlbnRzXyk/KHRoaXMuY29udGVudHNfPW51bGwsYS5sb2FkZWQoKSk6YS5wYXVzZSgpO1xuZWxzZXt2YXIgZj10aGlzLmxvYWRGbGFncy5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5FUzY7dGhpcy5sYXp5RmV0Y2hffHxiKCk7dmFyIGc9MTxhLnBlbmRpbmcoKS5sZW5ndGgsaD1nJiZnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfO2c9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXyYmKGd8fGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpO2lmKGh8fGcpYS5kZWZlcihmdW5jdGlvbigpe2MoKX0pO2Vsc2V7dmFyIGs9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7aD1nb29nLmluSHRtbERvY3VtZW50XygpJiZcIkFjdGl2ZVhPYmplY3RcImluIGdvb2cuZ2xvYmFsO2lmKGYmJmdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkmJiFoKXtnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSEwO2EucGF1c2UoKTt2YXIgbD1rLm9ucmVhZHlzdGF0ZWNoYW5nZTtrLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1wiaW50ZXJhY3RpdmVcIj09ay5yZWFkeVN0YXRlJiYoay5vbnJlYWR5c3RhdGVjaGFuZ2U9XG5sLGMoKSxhLnJlc3VtZSgpKTtnb29nLmlzRnVuY3Rpb24obCkmJmwuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWVsc2UhZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKT9kKCk6YygpfX19LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYSl7fSxnb29nLlRyYW5zcGlsZWREZXBlbmRlbmN5PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsYSxiLGMsZCxlKTt0aGlzLnRyYW5zcGlsZXI9Zn0sZ29vZy5pbmhlcml0cyhnb29nLlRyYW5zcGlsZWREZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLlRyYW5zcGlsZWREZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudHJhbnNwaWxlci50cmFuc3BpbGUoYSx0aGlzLmdldFBhdGhOYW1lKCkpfSxcbmdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsYSxiLGMsZCxlKX0sZ29vZy5pbmhlcml0cyhnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7Z29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kuY2FsbCh0aGlzLGEsYixjLGQsZSk7dGhpcy5uZWVkc1RyYW5zcGlsZV89Zjt0aGlzLnRyYW5zcGlsZXJfPWd9LGdvb2cuaW5oZXJpdHMoZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSksZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPVxuZnVuY3Rpb24oYSl7dGhpcy5uZWVkc1RyYW5zcGlsZV8mJihhPXRoaXMudHJhbnNwaWxlcl8udHJhbnNwaWxlKGEsdGhpcy5nZXRQYXRoTmFtZSgpKSk7cmV0dXJuIGdvb2cuTE9BRF9NT0RVTEVfVVNJTkdfRVZBTCYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC5KU09OKT9cImdvb2cubG9hZE1vZHVsZShcIitnb29nLmdsb2JhbC5KU09OLnN0cmluZ2lmeShhK1wiXFxuLy8jIHNvdXJjZVVSTD1cIit0aGlzLnBhdGgrXCJcXG5cIikrXCIpO1wiOidnb29nLmxvYWRNb2R1bGUoZnVuY3Rpb24oZXhwb3J0cykge1widXNlIHN0cmljdFwiOycrYStcIlxcbjtyZXR1cm4gZXhwb3J0c30pO1xcbi8vIyBzb3VyY2VVUkw9XCIrdGhpcy5wYXRoK1wiXFxuXCJ9LGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV89IShnb29nLmdsb2JhbC5hdG9ifHwhZ29vZy5nbG9iYWwuZG9jdW1lbnR8fCFnb29nLmdsb2JhbC5kb2N1bWVudC5hbGwpLGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5hZGREZXBlbmRlbmN5PWZ1bmN0aW9uKGEsYixcbmMsZCl7Yj1ifHxbXTthPWEucmVwbGFjZSgvXFxcXC9nLFwiL1wiKTt2YXIgZT1nb29nLm5vcm1hbGl6ZVBhdGhfKGdvb2cuYmFzZVBhdGgrYSk7ZCYmXCJib29sZWFuXCIhPT10eXBlb2YgZHx8KGQ9ZD97bW9kdWxlOmdvb2cuTW9kdWxlVHlwZS5HT09HfTp7fSk7Yz10aGlzLmZhY3RvcnlfLmNyZWF0ZURlcGVuZGVuY3koZSxhLGIsYyxkLGdvb2cudHJhbnNwaWxlcl8ubmVlZHNUcmFuc3BpbGUoZC5sYW5nfHxcImVzM1wiLGQubW9kdWxlKSk7dGhpcy5kZXBlbmRlbmNpZXNfW2VdPWM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmlkVG9QYXRoX1tiW2NdXT1lO3RoaXMuaWRUb1BhdGhfW2FdPWV9LGdvb2cuRGVwZW5kZW5jeUZhY3Rvcnk9ZnVuY3Rpb24oYSl7dGhpcy50cmFuc3BpbGVyPWF9LGdvb2cuRGVwZW5kZW5jeUZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURlcGVuZGVuY3k9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiBlLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0c/bmV3IGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3koYSxcbmIsYyxkLGUsZix0aGlzLnRyYW5zcGlsZXIpOmY/bmV3IGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3koYSxiLGMsZCxlLHRoaXMudHJhbnNwaWxlcik6ZS5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5FUzY/XCJuZXZlclwiPT1nb29nLlRSQU5TUElMRSYmZ29vZy5BU1NVTUVfRVNfTU9EVUxFU19UUkFOU1BJTEVEP25ldyBnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5KGEsYixjLGQsZSk6bmV3IGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeShhLGIsYyxkLGUpOm5ldyBnb29nLkRlcGVuZGVuY3koYSxiLGMsZCxlKX0sZ29vZy5kZWJ1Z0xvYWRlcl89bmV3IGdvb2cuRGVidWdMb2FkZXJfLGdvb2cubG9hZENsb3N1cmVEZXBzPWZ1bmN0aW9uKCl7Z29vZy5kZWJ1Z0xvYWRlcl8ubG9hZENsb3N1cmVEZXBzKCl9LGdvb2cuc2V0RGVwZW5kZW5jeUZhY3Rvcnk9ZnVuY3Rpb24oYSl7Z29vZy5kZWJ1Z0xvYWRlcl8uc2V0RGVwZW5kZW5jeUZhY3RvcnkoYSl9LGdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQU3x8XG5nb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKSxnb29nLmJvb3RzdHJhcD1mdW5jdGlvbihhLGIpe2dvb2cuZGVidWdMb2FkZXJfLmJvb3RzdHJhcChhLGIpfSk7Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FPVwiXCI7Z29vZy5pZGVudGl0eV89ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5PWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBUcnVzdGVkVHlwZXN8fCFUcnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KXJldHVybiBiO3RyeXtiPVRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTDpnb29nLmlkZW50aXR5XyxjcmVhdGVTY3JpcHQ6Z29vZy5pZGVudGl0eV8sY3JlYXRlU2NyaXB0VVJMOmdvb2cuaWRlbnRpdHlfLGNyZWF0ZVVSTDpnb29nLmlkZW50aXR5X30pfWNhdGNoKGMpe2dvb2cubG9nVG9Db25zb2xlXyhjLm1lc3NhZ2UpfXJldHVybiBifTtcbmdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRT9nb29nLmNyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUUrXCIjYmFzZVwiKTpudWxsO2dvb2cub2JqZWN0PXt9O2dvb2cub2JqZWN0LmlzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1iPzAhPT1hfHwxL2E9PT0xL2I6YSE9PWEmJmIhPT1ifTtnb29nLm9iamVjdC5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQgaW4gYSliLmNhbGwoYyxhW2RdLGQsYSl9O2dvb2cub2JqZWN0LmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZTtmb3IoZSBpbiBhKWIuY2FsbChjLGFbZV0sZSxhKSYmKGRbZV09YVtlXSk7cmV0dXJuIGR9O2dvb2cub2JqZWN0Lm1hcD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZTtmb3IoZSBpbiBhKWRbZV09Yi5jYWxsKGMsYVtlXSxlLGEpO3JldHVybiBkfTtnb29nLm9iamVjdC5zb21lPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQgaW4gYSlpZihiLmNhbGwoYyxhW2RdLGQsYSkpcmV0dXJuITA7cmV0dXJuITF9O1xuZ29vZy5vYmplY3QuZXZlcnk9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBhKWlmKCFiLmNhbGwoYyxhW2RdLGQsYSkpcmV0dXJuITE7cmV0dXJuITB9O2dvb2cub2JqZWN0LmdldENvdW50PWZ1bmN0aW9uKGEpe3ZhciBiPTAsYztmb3IoYyBpbiBhKWIrKztyZXR1cm4gYn07Z29vZy5vYmplY3QuZ2V0QW55S2V5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiBifTtnb29nLm9iamVjdC5nZXRBbnlWYWx1ZT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4gYVtiXX07Z29vZy5vYmplY3QuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5vYmplY3QuY29udGFpbnNWYWx1ZShhLGIpfTtnb29nLm9iamVjdC5nZXRWYWx1ZXM9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz0wLGQ7Zm9yKGQgaW4gYSliW2MrK109YVtkXTtyZXR1cm4gYn07XG5nb29nLm9iamVjdC5nZXRLZXlzPWZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9MCxkO2ZvcihkIGluIGEpYltjKytdPWQ7cmV0dXJuIGJ9O2dvb2cub2JqZWN0LmdldFZhbHVlQnlLZXlzPWZ1bmN0aW9uKGEsYil7dmFyIGM9Z29vZy5pc0FycmF5TGlrZShiKSxkPWM/Yjphcmd1bWVudHM7Zm9yKGM9Yz8wOjE7YzxkLmxlbmd0aDtjKyspe2lmKG51bGw9PWEpcmV0dXJuO2E9YVtkW2NdXX1yZXR1cm4gYX07Z29vZy5vYmplY3QuY29udGFpbnNLZXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbCE9PWEmJmIgaW4gYX07Z29vZy5vYmplY3QuY29udGFpbnNWYWx1ZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBhKWlmKGFbY109PWIpcmV0dXJuITA7cmV0dXJuITF9O2dvb2cub2JqZWN0LmZpbmRLZXk9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBhKWlmKGIuY2FsbChjLGFbZF0sZCxhKSlyZXR1cm4gZH07XG5nb29nLm9iamVjdC5maW5kVmFsdWU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybihiPWdvb2cub2JqZWN0LmZpbmRLZXkoYSxiLGMpKSYmYVtiXX07Z29vZy5vYmplY3QuaXNFbXB0eT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH07Z29vZy5vYmplY3QuY2xlYXI9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpZGVsZXRlIGFbYl19O2dvb2cub2JqZWN0LnJlbW92ZT1mdW5jdGlvbihhLGIpe3ZhciBjOyhjPWIgaW4gYSkmJmRlbGV0ZSBhW2JdO3JldHVybiBjfTtnb29nLm9iamVjdC5hZGQ9ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGwhPT1hJiZiIGluIGEpdGhyb3cgRXJyb3IoJ1RoZSBvYmplY3QgYWxyZWFkeSBjb250YWlucyB0aGUga2V5IFwiJytiKydcIicpO2dvb2cub2JqZWN0LnNldChhLGIsYyl9O2dvb2cub2JqZWN0LmdldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGwhPT1hJiZiIGluIGE/YVtiXTpjfTtcbmdvb2cub2JqZWN0LnNldD1mdW5jdGlvbihhLGIsYyl7YVtiXT1jfTtnb29nLm9iamVjdC5zZXRJZlVuZGVmaW5lZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGIgaW4gYT9hW2JdOmFbYl09Y307Z29vZy5vYmplY3Quc2V0V2l0aFJldHVyblZhbHVlSWZOb3RTZXQ9ZnVuY3Rpb24oYSxiLGMpe2lmKGIgaW4gYSlyZXR1cm4gYVtiXTtjPWMoKTtyZXR1cm4gYVtiXT1jfTtnb29nLm9iamVjdC5lcXVhbHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYSlpZighKGMgaW4gYil8fGFbY10hPT1iW2NdKXJldHVybiExO2Zvcih2YXIgZCBpbiBiKWlmKCEoZCBpbiBhKSlyZXR1cm4hMTtyZXR1cm4hMH07Z29vZy5vYmplY3QuY2xvbmU9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKWJbY109YVtjXTtyZXR1cm4gYn07XG5nb29nLm9iamVjdC51bnNhZmVDbG9uZT1mdW5jdGlvbihhKXt2YXIgYj1nb29nLnR5cGVPZihhKTtpZihcIm9iamVjdFwiPT1ifHxcImFycmF5XCI9PWIpe2lmKGdvb2cuaXNGdW5jdGlvbihhLmNsb25lKSlyZXR1cm4gYS5jbG9uZSgpO2I9XCJhcnJheVwiPT1iP1tdOnt9O2Zvcih2YXIgYyBpbiBhKWJbY109Z29vZy5vYmplY3QudW5zYWZlQ2xvbmUoYVtjXSk7cmV0dXJuIGJ9cmV0dXJuIGF9O2dvb2cub2JqZWN0LnRyYW5zcG9zZT1mdW5jdGlvbihhKXt2YXIgYj17fSxjO2ZvcihjIGluIGEpYlthW2NdXT1jO3JldHVybiBifTtnb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTXz1cImNvbnN0cnVjdG9yIGhhc093blByb3BlcnR5IGlzUHJvdG90eXBlT2YgcHJvcGVydHlJc0VudW1lcmFibGUgdG9Mb2NhbGVTdHJpbmcgdG9TdHJpbmcgdmFsdWVPZlwiLnNwbGl0KFwiIFwiKTtcbmdvb2cub2JqZWN0LmV4dGVuZD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkLGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXtkPWFyZ3VtZW50c1tlXTtmb3IoYyBpbiBkKWFbY109ZFtjXTtmb3IodmFyIGY9MDtmPGdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfLmxlbmd0aDtmKyspYz1nb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTX1tmXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxjKSYmKGFbY109ZFtjXSl9fTtcbmdvb2cub2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoO2lmKDE9PWImJmdvb2cuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiBnb29nLm9iamVjdC5jcmVhdGUuYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pO2lmKGIlMil0aHJvdyBFcnJvcihcIlVuZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzXCIpO2Zvcih2YXIgYz17fSxkPTA7ZDxiO2QrPTIpY1thcmd1bWVudHNbZF1dPWFyZ3VtZW50c1tkKzFdO3JldHVybiBjfTtnb29nLm9iamVjdC5jcmVhdGVTZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDtpZigxPT1iJiZnb29nLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gZ29vZy5vYmplY3QuY3JlYXRlU2V0LmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTtmb3IodmFyIGM9e30sZD0wO2Q8YjtkKyspY1thcmd1bWVudHNbZF1dPSEwO3JldHVybiBjfTtcbmdvb2cub2JqZWN0LmNyZWF0ZUltbXV0YWJsZVZpZXc9ZnVuY3Rpb24oYSl7dmFyIGI9YTtPYmplY3QuaXNGcm96ZW4mJiFPYmplY3QuaXNGcm96ZW4oYSkmJihiPU9iamVjdC5jcmVhdGUoYSksT2JqZWN0LmZyZWV6ZShiKSk7cmV0dXJuIGJ9O2dvb2cub2JqZWN0LmlzSW1tdXRhYmxlVmlldz1mdW5jdGlvbihhKXtyZXR1cm4hIU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKGEpfTtcbmdvb2cub2JqZWN0LmdldEFsbFByb3BlcnR5TmFtZXM9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhKXJldHVybltdO2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8IU9iamVjdC5nZXRQcm90b3R5cGVPZilyZXR1cm4gZ29vZy5vYmplY3QuZ2V0S2V5cyhhKTtmb3IodmFyIGQ9e307YSYmKGEhPT1PYmplY3QucHJvdG90eXBlfHxiKSYmKGEhPT1GdW5jdGlvbi5wcm90b3R5cGV8fGMpOyl7Zm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLGY9MDtmPGUubGVuZ3RoO2YrKylkW2VbZl1dPSEwO2E9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfXJldHVybiBnb29nLm9iamVjdC5nZXRLZXlzKGQpfTtnb29nLm9iamVjdC5nZXRTdXBlckNsYXNzPWZ1bmN0aW9uKGEpe3JldHVybihhPU9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSkpJiZhLmNvbnN0cnVjdG9yfTtnb29nLmRlYnVnPXt9O2dvb2cuZGVidWcuRXJyb3I9ZnVuY3Rpb24oYSl7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxnb29nLmRlYnVnLkVycm9yKTtlbHNle3ZhciBiPUVycm9yKCkuc3RhY2s7YiYmKHRoaXMuc3RhY2s9Yil9YSYmKHRoaXMubWVzc2FnZT1TdHJpbmcoYSkpO3RoaXMucmVwb3J0RXJyb3JUb1NlcnZlcj0hMH07Z29vZy5pbmhlcml0cyhnb29nLmRlYnVnLkVycm9yLEVycm9yKTtnb29nLmRlYnVnLkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQ3VzdG9tRXJyb3JcIjtnb29nLmRvbT17fTtnb29nLmRvbS5Ob2RlVHlwZT17RUxFTUVOVDoxLEFUVFJJQlVURToyLFRFWFQ6MyxDREFUQV9TRUNUSU9OOjQsRU5USVRZX1JFRkVSRU5DRTo1LEVOVElUWTo2LFBST0NFU1NJTkdfSU5TVFJVQ1RJT046NyxDT01NRU5UOjgsRE9DVU1FTlQ6OSxET0NVTUVOVF9UWVBFOjEwLERPQ1VNRU5UX0ZSQUdNRU5UOjExLE5PVEFUSU9OOjEyfTtnb29nLmFzc2VydHM9e307Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTPWdvb2cuREVCVUc7Z29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKGEsYil7Z29vZy5kZWJ1Zy5FcnJvci5jYWxsKHRoaXMsZ29vZy5hc3NlcnRzLnN1YnNfKGEsYikpO3RoaXMubWVzc2FnZVBhdHRlcm49YX07Z29vZy5pbmhlcml0cyhnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IsZ29vZy5kZWJ1Zy5FcnJvcik7Z29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIjtnb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSPWZ1bmN0aW9uKGEpe3Rocm93IGE7fTtnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1nb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSO1xuZ29vZy5hc3NlcnRzLnN1YnNfPWZ1bmN0aW9uKGEsYil7YT1hLnNwbGl0KFwiJXNcIik7Zm9yKHZhciBjPVwiXCIsZD1hLmxlbmd0aC0xLGU9MDtlPGQ7ZSsrKWMrPWFbZV0rKGU8Yi5sZW5ndGg/YltlXTpcIiVzXCIpO3JldHVybiBjK2FbZF19O2dvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPVwiQXNzZXJ0aW9uIGZhaWxlZFwiO2lmKGMpe2UrPVwiOiBcIitjO3ZhciBmPWR9ZWxzZSBhJiYoZSs9XCI6IFwiK2EsZj1iKTthPW5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJcIitlLGZ8fFtdKTtnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXyhhKX07Z29vZy5hc3NlcnRzLnNldEVycm9ySGFuZGxlcj1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJihnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1hKX07XG5nb29nLmFzc2VydHMuYXNzZXJ0PWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFhJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIlwiLG51bGwsYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtnb29nLmFzc2VydHMuYXNzZXJ0RXhpc3RzPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJm51bGw9PWEmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgdG8gZXhpc3Q6ICVzLlwiLFthXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O1xuZ29vZy5hc3NlcnRzLmZhaWw9ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJmdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfKG5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJGYWlsdXJlXCIrKGE/XCI6IFwiK2E6XCJcIiksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9O2dvb2cuYXNzZXJ0cy5hc3NlcnROdW1iZXI9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNOdW1iZXIoYSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihhKSxhXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O1xuZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZz1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc1N0cmluZyhhKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBzdHJpbmcgYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGEpLGFdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07Z29vZy5hc3NlcnRzLmFzc2VydEZ1bmN0aW9uPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzRnVuY3Rpb24oYSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgZnVuY3Rpb24gYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGEpLGFdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07XG5nb29nLmFzc2VydHMuYXNzZXJ0T2JqZWN0PWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzT2JqZWN0KGEpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoYSksYV0sYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtnb29nLmFzc2VydHMuYXNzZXJ0QXJyYXk9ZnVuY3Rpb24oYSxiLGMpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNBcnJheShhKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBhcnJheSBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoYSksYV0sYixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO3JldHVybiBhfTtcbmdvb2cuYXNzZXJ0cy5hc3NlcnRCb29sZWFuPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzQm9vbGVhbihhKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBib29sZWFuIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihhKSxhXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O2dvb2cuYXNzZXJ0cy5hc3NlcnRFbGVtZW50PWZ1bmN0aW9uKGEsYixjKXshZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxnb29nLmlzT2JqZWN0KGEpJiZhLm5vZGVUeXBlPT1nb29nLmRvbS5Ob2RlVHlwZS5FTEVNRU5UfHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIEVsZW1lbnQgYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGEpLGFdLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtyZXR1cm4gYX07XG5nb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZj1mdW5jdGlvbihhLGIsYyxkKXshZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxhIGluc3RhbmNlb2YgYnx8Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBpbnN0YW5jZW9mICVzIGJ1dCBnb3QgJXMuXCIsW2dvb2cuYXNzZXJ0cy5nZXRUeXBlXyhiKSxnb29nLmFzc2VydHMuZ2V0VHlwZV8oYSldLGMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpKTtyZXR1cm4gYX07Z29vZy5hc3NlcnRzLmFzc2VydEZpbml0ZT1mdW5jdGlvbihhLGIsYyl7IWdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUU3x8XCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpfHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkICVzIHRvIGJlIGEgZmluaXRlIG51bWJlciBidXQgaXQgaXMgbm90LlwiLFthXSxiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7cmV0dXJuIGF9O1xuZ29vZy5hc3NlcnRzLmFzc2VydE9iamVjdFByb3RvdHlwZUlzSW50YWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIE9iamVjdC5wcm90b3R5cGUpZ29vZy5hc3NlcnRzLmZhaWwoYStcIiBzaG91bGQgbm90IGJlIGVudW1lcmFibGUgaW4gT2JqZWN0LnByb3RvdHlwZS5cIil9O2dvb2cuYXNzZXJ0cy5nZXRUeXBlXz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEZ1bmN0aW9uP2EuZGlzcGxheU5hbWV8fGEubmFtZXx8XCJ1bmtub3duIHR5cGUgbmFtZVwiOmEgaW5zdGFuY2VvZiBPYmplY3Q/YS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZXx8YS5jb25zdHJ1Y3Rvci5uYW1lfHxPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk6bnVsbD09PWE/XCJudWxsXCI6dHlwZW9mIGF9O3ZhciBqc3BiPXtCaW5hcnlDb25zdGFudHM6e30sQ29uc3RCaW5hcnlNZXNzYWdlOmZ1bmN0aW9uKCl7fSxCaW5hcnlNZXNzYWdlOmZ1bmN0aW9uKCl7fX07anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlPXtJTlZBTElEOi0xLERPVUJMRToxLEZMT0FUOjIsSU5UNjQ6MyxVSU5UNjQ6NCxJTlQzMjo1LEZJWEVENjQ6NixGSVhFRDMyOjcsQk9PTDo4LFNUUklORzo5LEdST1VQOjEwLE1FU1NBR0U6MTEsQllURVM6MTIsVUlOVDMyOjEzLEVOVU06MTQsU0ZJWEVEMzI6MTUsU0ZJWEVENjQ6MTYsU0lOVDMyOjE3LFNJTlQ2NDoxOCxGSEFTSDY0OjMwLFZIQVNINjQ6MzF9O2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlPXtJTlZBTElEOi0xLFZBUklOVDowLEZJWEVENjQ6MSxERUxJTUlURUQ6MixTVEFSVF9HUk9VUDozLEVORF9HUk9VUDo0LEZJWEVEMzI6NX07XG5qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlPWZ1bmN0aW9uKGEpe3ZhciBiPWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZSxjPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlO3N3aXRjaChhKXtjYXNlIGIuSU5UMzI6Y2FzZSBiLklOVDY0OmNhc2UgYi5VSU5UMzI6Y2FzZSBiLlVJTlQ2NDpjYXNlIGIuU0lOVDMyOmNhc2UgYi5TSU5UNjQ6Y2FzZSBiLkJPT0w6Y2FzZSBiLkVOVU06Y2FzZSBiLlZIQVNINjQ6cmV0dXJuIGMuVkFSSU5UO2Nhc2UgYi5ET1VCTEU6Y2FzZSBiLkZJWEVENjQ6Y2FzZSBiLlNGSVhFRDY0OmNhc2UgYi5GSEFTSDY0OnJldHVybiBjLkZJWEVENjQ7Y2FzZSBiLlNUUklORzpjYXNlIGIuTUVTU0FHRTpjYXNlIGIuQllURVM6cmV0dXJuIGMuREVMSU1JVEVEO2Nhc2UgYi5GTE9BVDpjYXNlIGIuRklYRUQzMjpjYXNlIGIuU0ZJWEVEMzI6cmV0dXJuIGMuRklYRUQzMjtkZWZhdWx0OnJldHVybiBjLklOVkFMSUR9fTtcbmpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSPS0xO2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfRVBTPTEuNDAxMjk4NDY0MzI0ODE3RS00NTtqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01JTj0xLjE3NTQ5NDM1MDgyMjI4NzVFLTM4O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYPTMuNDAyODIzNDY2Mzg1Mjg4NkUzODtqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X0VQUz00LjlFLTMyNDtqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01JTj0yLjIyNTA3Mzg1ODUwNzIwMTRFLTMwODtqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWD0xLjc5NzY5MzEzNDg2MjMxNTdFMzA4O2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMD0xMDQ4NTc2O2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMz04Mzg4NjA4O2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMT0yMTQ3NDgzNjQ4O1xuanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyPTQyOTQ5NjcyOTY7anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyPTQ1MDM1OTk2MjczNzA0OTY7anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzPTB4N2ZmZmZmZmZmZmZmZmZmZjtqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQ9MS44NDQ2NzQ0MDczNzA5NTUyRTE5O2pzcGIuQmluYXJ5Q29uc3RhbnRzLlpFUk9fSEFTSD1cIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtnb29nLmFycmF5PXt9O2dvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVM9Z29vZy5UUlVTVEVEX1NJVEU7Z29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OUz0yMDEyPGdvb2cuRkVBVFVSRVNFVF9ZRUFSO2dvb2cuYXJyYXkucGVlaz1mdW5jdGlvbihhKXtyZXR1cm4gYVthLmxlbmd0aC0xXX07Z29vZy5hcnJheS5sYXN0PWdvb2cuYXJyYXkucGVlaztcbmdvb2cuYXJyYXkuaW5kZXhPZj1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmluZGV4T2YpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtjPW51bGw9PWM/MDowPmM/TWF0aC5tYXgoMCxhLmxlbmd0aCtjKTpjO2lmKGdvb2cuaXNTdHJpbmcoYSkpcmV0dXJuIGdvb2cuaXNTdHJpbmcoYikmJjE9PWIubGVuZ3RoP2EuaW5kZXhPZihiLGMpOi0xO2Zvcig7YzxhLmxlbmd0aDtjKyspaWYoYyBpbiBhJiZhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX07XG5nb29nLmFycmF5Lmxhc3RJbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYSxiLG51bGw9PWM/YS5sZW5ndGgtMTpjKX06ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbD09Yz9hLmxlbmd0aC0xOmM7MD5jJiYoYz1NYXRoLm1heCgwLGEubGVuZ3RoK2MpKTtpZihnb29nLmlzU3RyaW5nKGEpKXJldHVybiBnb29nLmlzU3RyaW5nKGIpJiYxPT1iLmxlbmd0aD9hLmxhc3RJbmRleE9mKGIsYyk6LTE7Zm9yKDswPD1jO2MtLSlpZihjIGluIGEmJmFbY109PT1iKXJldHVybiBjO3JldHVybi0xfTtcbmdvb2cuYXJyYXkuZm9yRWFjaD1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmZvckVhY2gpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphLGY9MDtmPGQ7ZisrKWYgaW4gZSYmYi5jYWxsKGMsZVtmXSxmLGEpfTtnb29nLmFycmF5LmZvckVhY2hSaWdodD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5sZW5ndGgsZT1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YTtmb3IoLS1kOzA8PWQ7LS1kKWQgaW4gZSYmYi5jYWxsKGMsZVtkXSxkLGEpfTtcbmdvb2cuYXJyYXkuZmlsdGVyPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuZmlsdGVyKT9mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1bXSxmPTAsZz1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YSxoPTA7aDxkO2grKylpZihoIGluIGcpe3ZhciBrPWdbaF07Yi5jYWxsKGMsayxoLGEpJiYoZVtmKytdPWspfXJldHVybiBlfTtcbmdvb2cuYXJyYXkubWFwPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubWFwKT9mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1BcnJheShkKSxmPWdvb2cuaXNTdHJpbmcoYSk/YS5zcGxpdChcIlwiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmKGVbZ109Yi5jYWxsKGMsZltnXSxnLGEpKTtyZXR1cm4gZX07XG5nb29nLmFycmF5LnJlZHVjZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnJlZHVjZSk/ZnVuY3Rpb24oYSxiLGMsZCl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7ZCYmKGI9Z29vZy5iaW5kKGIsZCkpO3JldHVybiBBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1jO2dvb2cuYXJyYXkuZm9yRWFjaChhLGZ1bmN0aW9uKGMsZyl7ZT1iLmNhbGwoZCxlLGMsZyxhKX0pO3JldHVybiBlfTtcbmdvb2cuYXJyYXkucmVkdWNlUmlnaHQ9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCk/ZnVuY3Rpb24oYSxiLGMsZCl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1iKTtkJiYoYj1nb29nLmJpbmQoYixkKSk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodC5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Yztnb29nLmFycmF5LmZvckVhY2hSaWdodChhLGZ1bmN0aW9uKGMsZyl7ZT1iLmNhbGwoZCxlLGMsZyxhKX0pO3JldHVybiBlfTtcbmdvb2cuYXJyYXkuc29tZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnNvbWUpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YSxmPTA7ZjxkO2YrKylpZihmIGluIGUmJmIuY2FsbChjLGVbZl0sZixhKSlyZXR1cm4hMDtyZXR1cm4hMX07XG5nb29nLmFycmF5LmV2ZXJ5PWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuZXZlcnkpP2Z1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9Z29vZy5pc1N0cmluZyhhKT9hLnNwbGl0KFwiXCIpOmEsZj0wO2Y8ZDtmKyspaWYoZiBpbiBlJiYhYi5jYWxsKGMsZVtmXSxmLGEpKXJldHVybiExO3JldHVybiEwfTtnb29nLmFycmF5LmNvdW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wO2dvb2cuYXJyYXkuZm9yRWFjaChhLGZ1bmN0aW9uKGEsZixnKXtiLmNhbGwoYyxhLGYsZykmJisrZH0sYyk7cmV0dXJuIGR9O1xuZ29vZy5hcnJheS5maW5kPWZ1bmN0aW9uKGEsYixjKXtiPWdvb2cuYXJyYXkuZmluZEluZGV4KGEsYixjKTtyZXR1cm4gMD5iP251bGw6Z29vZy5pc1N0cmluZyhhKT9hLmNoYXJBdChiKTphW2JdfTtnb29nLmFycmF5LmZpbmRJbmRleD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9Z29vZy5pc1N0cmluZyhhKT9hLnNwbGl0KFwiXCIpOmEsZj0wO2Y8ZDtmKyspaWYoZiBpbiBlJiZiLmNhbGwoYyxlW2ZdLGYsYSkpcmV0dXJuIGY7cmV0dXJuLTF9O2dvb2cuYXJyYXkuZmluZFJpZ2h0PWZ1bmN0aW9uKGEsYixjKXtiPWdvb2cuYXJyYXkuZmluZEluZGV4UmlnaHQoYSxiLGMpO3JldHVybiAwPmI/bnVsbDpnb29nLmlzU3RyaW5nKGEpP2EuY2hhckF0KGIpOmFbYl19O1xuZ29vZy5hcnJheS5maW5kSW5kZXhSaWdodD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5sZW5ndGgsZT1nb29nLmlzU3RyaW5nKGEpP2Euc3BsaXQoXCJcIik6YTtmb3IoLS1kOzA8PWQ7ZC0tKWlmKGQgaW4gZSYmYi5jYWxsKGMsZVtkXSxkLGEpKXJldHVybiBkO3JldHVybi0xfTtnb29nLmFycmF5LmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIDA8PWdvb2cuYXJyYXkuaW5kZXhPZihhLGIpfTtnb29nLmFycmF5LmlzRW1wdHk9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWEubGVuZ3RofTtnb29nLmFycmF5LmNsZWFyPWZ1bmN0aW9uKGEpe2lmKCFnb29nLmlzQXJyYXkoYSkpZm9yKHZhciBiPWEubGVuZ3RoLTE7MDw9YjtiLS0pZGVsZXRlIGFbYl07YS5sZW5ndGg9MH07Z29vZy5hcnJheS5pbnNlcnQ9ZnVuY3Rpb24oYSxiKXtnb29nLmFycmF5LmNvbnRhaW5zKGEsYil8fGEucHVzaChiKX07XG5nb29nLmFycmF5Lmluc2VydEF0PWZ1bmN0aW9uKGEsYixjKXtnb29nLmFycmF5LnNwbGljZShhLGMsMCxiKX07Z29vZy5hcnJheS5pbnNlcnRBcnJheUF0PWZ1bmN0aW9uKGEsYixjKXtnb29nLnBhcnRpYWwoZ29vZy5hcnJheS5zcGxpY2UsYSxjLDApLmFwcGx5KG51bGwsYil9O2dvb2cuYXJyYXkuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDsyPT1hcmd1bWVudHMubGVuZ3RofHwwPihkPWdvb2cuYXJyYXkuaW5kZXhPZihhLGMpKT9hLnB1c2goYik6Z29vZy5hcnJheS5pbnNlcnRBdChhLGIsZCl9O2dvb2cuYXJyYXkucmVtb3ZlPWZ1bmN0aW9uKGEsYil7Yj1nb29nLmFycmF5LmluZGV4T2YoYSxiKTt2YXIgYzsoYz0wPD1iKSYmZ29vZy5hcnJheS5yZW1vdmVBdChhLGIpO3JldHVybiBjfTtcbmdvb2cuYXJyYXkucmVtb3ZlTGFzdD1mdW5jdGlvbihhLGIpe2I9Z29vZy5hcnJheS5sYXN0SW5kZXhPZihhLGIpO3JldHVybiAwPD1iPyhnb29nLmFycmF5LnJlbW92ZUF0KGEsYiksITApOiExfTtnb29nLmFycmF5LnJlbW92ZUF0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7cmV0dXJuIDE9PUFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChhLGIsMSkubGVuZ3RofTtnb29nLmFycmF5LnJlbW92ZUlmPWZ1bmN0aW9uKGEsYixjKXtiPWdvb2cuYXJyYXkuZmluZEluZGV4KGEsYixjKTtyZXR1cm4gMDw9Yj8oZ29vZy5hcnJheS5yZW1vdmVBdChhLGIpLCEwKTohMX07Z29vZy5hcnJheS5yZW1vdmVBbGxJZj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtnb29nLmFycmF5LmZvckVhY2hSaWdodChhLGZ1bmN0aW9uKGUsZil7Yi5jYWxsKGMsZSxmLGEpJiZnb29nLmFycmF5LnJlbW92ZUF0KGEsZikmJmQrK30pO3JldHVybiBkfTtcbmdvb2cuYXJyYXkuY29uY2F0PWZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9O2dvb2cuYXJyYXkuam9pbj1mdW5jdGlvbihhKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhcmd1bWVudHMpfTtnb29nLmFycmF5LnRvQXJyYXk9ZnVuY3Rpb24oYSl7dmFyIGI9YS5sZW5ndGg7aWYoMDxiKXtmb3IodmFyIGM9QXJyYXkoYiksZD0wO2Q8YjtkKyspY1tkXT1hW2RdO3JldHVybiBjfXJldHVybltdfTtnb29nLmFycmF5LmNsb25lPWdvb2cuYXJyYXkudG9BcnJheTtnb29nLmFycmF5LmV4dGVuZD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPWFyZ3VtZW50c1tjXTtpZihnb29nLmlzQXJyYXlMaWtlKGQpKXt2YXIgZT1hLmxlbmd0aHx8MCxmPWQubGVuZ3RofHwwO2EubGVuZ3RoPWUrZjtmb3IodmFyIGc9MDtnPGY7ZysrKWFbZStnXT1kW2ddfWVsc2UgYS5wdXNoKGQpfX07XG5nb29nLmFycmF5LnNwbGljZT1mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWEubGVuZ3RoKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhLGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKX07Z29vZy5hcnJheS5zbGljZT1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1hLmxlbmd0aCk7cmV0dXJuIDI+PWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSxiKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLGIsYyl9O1xuZ29vZy5hcnJheS5yZW1vdmVEdXBsaWNhdGVzPWZ1bmN0aW9uKGEsYixjKXtiPWJ8fGE7dmFyIGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaXNPYmplY3QoYSk/XCJvXCIrZ29vZy5nZXRVaWQoYSk6KHR5cGVvZiBhKS5jaGFyQXQoMCkrYX07Yz1jfHxkO2Q9e307Zm9yKHZhciBlPTAsZj0wO2Y8YS5sZW5ndGg7KXt2YXIgZz1hW2YrK10saD1jKGcpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGgpfHwoZFtoXT0hMCxiW2UrK109Zyl9Yi5sZW5ndGg9ZX07Z29vZy5hcnJheS5iaW5hcnlTZWFyY2g9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBnb29nLmFycmF5LmJpbmFyeVNlYXJjaF8oYSxjfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlLCExLGIpfTtnb29nLmFycmF5LmJpbmFyeVNlbGVjdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXyhhLGIsITAsdm9pZCAwLGMpfTtcbmdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXz1mdW5jdGlvbihhLGIsYyxkLGUpe2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7KXt2YXIgaz1mK2c+PjE7dmFyIGw9Yz9iLmNhbGwoZSxhW2tdLGssYSk6YihkLGFba10pOzA8bD9mPWsrMTooZz1rLGg9IWwpfXJldHVybiBoP2Y6fmZ9O2dvb2cuYXJyYXkuc29ydD1mdW5jdGlvbihhLGIpe2Euc29ydChifHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlKX07Z29vZy5hcnJheS5zdGFibGVTb3J0PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPUFycmF5KGEubGVuZ3RoKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT17aW5kZXg6ZCx2YWx1ZTphW2RdfTt2YXIgZT1ifHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2dvb2cuYXJyYXkuc29ydChjLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGUoYS52YWx1ZSxiLnZhbHVlKXx8YS5pbmRleC1iLmluZGV4fSk7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdPWNbZF0udmFsdWV9O1xuZ29vZy5hcnJheS5zb3J0QnlLZXk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWN8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Z29vZy5hcnJheS5zb3J0KGEsZnVuY3Rpb24oYSxjKXtyZXR1cm4gZChiKGEpLGIoYykpfSl9O2dvb2cuYXJyYXkuc29ydE9iamVjdHNCeUtleT1mdW5jdGlvbihhLGIsYyl7Z29vZy5hcnJheS5zb3J0QnlLZXkoYSxmdW5jdGlvbihhKXtyZXR1cm4gYVtiXX0sYyl9O2dvb2cuYXJyYXkuaXNTb3J0ZWQ9ZnVuY3Rpb24oYSxiLGMpe2I9Ynx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIGQ9MTtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YihhW2QtMV0sYVtkXSk7aWYoMDxlfHwwPT1lJiZjKXJldHVybiExfXJldHVybiEwfTtcbmdvb2cuYXJyYXkuZXF1YWxzPWZ1bmN0aW9uKGEsYixjKXtpZighZ29vZy5pc0FycmF5TGlrZShhKXx8IWdvb2cuaXNBcnJheUxpa2UoYil8fGEubGVuZ3RoIT1iLmxlbmd0aClyZXR1cm4hMTt2YXIgZD1hLmxlbmd0aDtjPWN8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eTtmb3IodmFyIGU9MDtlPGQ7ZSsrKWlmKCFjKGFbZV0sYltlXSkpcmV0dXJuITE7cmV0dXJuITB9O2dvb2cuYXJyYXkuY29tcGFyZTM9ZnVuY3Rpb24oYSxiLGMpe2M9Y3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIGQ9TWF0aC5taW4oYS5sZW5ndGgsYi5sZW5ndGgpLGU9MDtlPGQ7ZSsrKXt2YXIgZj1jKGFbZV0sYltlXSk7aWYoMCE9ZilyZXR1cm4gZn1yZXR1cm4gZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZShhLmxlbmd0aCxiLmxlbmd0aCl9O2dvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT5iPzE6YTxiPy0xOjB9O1xuZ29vZy5hcnJheS5pbnZlcnNlRGVmYXVsdENvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4tZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZShhLGIpfTtnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlRXF1YWxpdHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWJ9O2dvb2cuYXJyYXkuYmluYXJ5SW5zZXJ0PWZ1bmN0aW9uKGEsYixjKXtjPWdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoKGEsYixjKTtyZXR1cm4gMD5jPyhnb29nLmFycmF5Lmluc2VydEF0KGEsYiwtKGMrMSkpLCEwKTohMX07Z29vZy5hcnJheS5iaW5hcnlSZW1vdmU9ZnVuY3Rpb24oYSxiLGMpe2I9Z29vZy5hcnJheS5iaW5hcnlTZWFyY2goYSxiLGMpO3JldHVybiAwPD1iP2dvb2cuYXJyYXkucmVtb3ZlQXQoYSxiKTohMX07XG5nb29nLmFycmF5LmJ1Y2tldD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YVtlXSxnPWIuY2FsbChjLGYsZSxhKTtnb29nLmlzRGVmKGcpJiYoZFtnXXx8KGRbZ109W10pKS5wdXNoKGYpfXJldHVybiBkfTtnb29nLmFycmF5LnRvT2JqZWN0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtnb29nLmFycmF5LmZvckVhY2goYSxmdW5jdGlvbihlLGYpe2RbYi5jYWxsKGMsZSxmLGEpXT1lfSk7cmV0dXJuIGR9O2dvb2cuYXJyYXkucmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9MCxmPWE7Yz1jfHwxO3ZvaWQgMCE9PWImJihlPWEsZj1iKTtpZigwPmMqKGYtZSkpcmV0dXJuW107aWYoMDxjKWZvcihhPWU7YTxmO2ErPWMpZC5wdXNoKGEpO2Vsc2UgZm9yKGE9ZTthPmY7YSs9YylkLnB1c2goYSk7cmV0dXJuIGR9O1xuZ29vZy5hcnJheS5yZXBlYXQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YjtkKyspY1tkXT1hO3JldHVybiBjfTtnb29nLmFycmF5LmZsYXR0ZW49ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgZD1hcmd1bWVudHNbY107aWYoZ29vZy5pc0FycmF5KGQpKWZvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSs9ODE5Mil7dmFyIGY9Z29vZy5hcnJheS5zbGljZShkLGUsZSs4MTkyKTtmPWdvb2cuYXJyYXkuZmxhdHRlbi5hcHBseShudWxsLGYpO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKWIucHVzaChmW2ddKX1lbHNlIGIucHVzaChkKX1yZXR1cm4gYn07XG5nb29nLmFycmF5LnJvdGF0ZT1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9YS5sZW5ndGgpO2EubGVuZ3RoJiYoYiU9YS5sZW5ndGgsMDxiP0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsYS5zcGxpY2UoLWIsYikpOjA+YiYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYSxhLnNwbGljZSgwLC1iKSkpO3JldHVybiBhfTtnb29nLmFycmF5Lm1vdmVJdGVtPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8YS5sZW5ndGgpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YyYmYzxhLmxlbmd0aCk7Yj1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoYSxiLDEpO0FycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChhLGMsMCxiWzBdKX07XG5nb29nLmFycmF5LnppcD1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGI9W10sYz1hcmd1bWVudHNbMF0ubGVuZ3RoLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKWFyZ3VtZW50c1tkXS5sZW5ndGg8YyYmKGM9YXJndW1lbnRzW2RdLmxlbmd0aCk7Zm9yKGQ9MDtkPGM7ZCsrKXtmb3IodmFyIGU9W10sZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspZS5wdXNoKGFyZ3VtZW50c1tmXVtkXSk7Yi5wdXNoKGUpfXJldHVybiBifTtnb29nLmFycmF5LnNodWZmbGU9ZnVuY3Rpb24oYSxiKXtiPWJ8fE1hdGgucmFuZG9tO2Zvcih2YXIgYz1hLmxlbmd0aC0xOzA8YztjLS0pe3ZhciBkPU1hdGguZmxvb3IoYigpKihjKzEpKSxlPWFbY107YVtjXT1hW2RdO2FbZF09ZX19O2dvb2cuYXJyYXkuY29weUJ5SW5kZXg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtnb29nLmFycmF5LmZvckVhY2goYixmdW5jdGlvbihiKXtjLnB1c2goYVtiXSl9KTtyZXR1cm4gY307XG5nb29nLmFycmF5LmNvbmNhdE1hcD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGdvb2cuYXJyYXkuY29uY2F0LmFwcGx5KFtdLGdvb2cuYXJyYXkubWFwKGEsYixjKSl9O2dvb2cuY3J5cHQ9e307Z29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YS5jaGFyQ29kZUF0KGQpOzI1NTxlJiYoYltjKytdPWUmMjU1LGU+Pj04KTtiW2MrK109ZX1yZXR1cm4gYn07Z29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZz1mdW5jdGlvbihhKXtpZig4MTkyPj1hLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpO2Zvcih2YXIgYj1cIlwiLGM9MDtjPGEubGVuZ3RoO2MrPTgxOTIpe3ZhciBkPWdvb2cuYXJyYXkuc2xpY2UoYSxjLGMrODE5Mik7Yis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpfXJldHVybiBifTtcbmdvb2cuY3J5cHQuYnl0ZUFycmF5VG9IZXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5hcnJheS5tYXAoYSxmdW5jdGlvbihhKXthPWEudG9TdHJpbmcoMTYpO3JldHVybiAxPGEubGVuZ3RoP2E6XCIwXCIrYX0pLmpvaW4oYnx8XCJcIil9O2dvb2cuY3J5cHQuaGV4VG9CeXRlQXJyYXk9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPT1hLmxlbmd0aCUyLFwiS2V5IHN0cmluZyBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiAyXCIpO2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0yKWIucHVzaChwYXJzZUludChhLnN1YnN0cmluZyhjLGMrMiksMTYpKTtyZXR1cm4gYn07XG5nb29nLmNyeXB0LnN0cmluZ1RvVXRmOEJ5dGVBcnJheT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YS5jaGFyQ29kZUF0KGQpOzEyOD5lP2JbYysrXT1lOigyMDQ4PmU/YltjKytdPWU+PjZ8MTkyOig1NTI5Nj09KGUmNjQ1MTIpJiZkKzE8YS5sZW5ndGgmJjU2MzIwPT0oYS5jaGFyQ29kZUF0KGQrMSkmNjQ1MTIpPyhlPTY1NTM2KygoZSYxMDIzKTw8MTApKyhhLmNoYXJDb2RlQXQoKytkKSYxMDIzKSxiW2MrK109ZT4+MTh8MjQwLGJbYysrXT1lPj4xMiY2M3wxMjgpOmJbYysrXT1lPj4xMnwyMjQsYltjKytdPWU+PjYmNjN8MTI4KSxiW2MrK109ZSY2M3wxMjgpfXJldHVybiBifTtcbmdvb2cuY3J5cHQudXRmOEJ5dGVBcnJheVRvU3RyaW5nPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD0wO2M8YS5sZW5ndGg7KXt2YXIgZT1hW2MrK107aWYoMTI4PmUpYltkKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7ZWxzZSBpZigxOTE8ZSYmMjI0PmUpe3ZhciBmPWFbYysrXTtiW2QrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoZSYzMSk8PDZ8ZiY2Myl9ZWxzZSBpZigyMzk8ZSYmMzY1PmUpe2Y9YVtjKytdO3ZhciBnPWFbYysrXSxoPWFbYysrXTtlPSgoZSY3KTw8MTh8KGYmNjMpPDwxMnwoZyY2Myk8PDZ8aCY2MyktNjU1MzY7YltkKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGU+PjEwKSk7YltkKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKGUmMTAyMykpfWVsc2UgZj1hW2MrK10sZz1hW2MrK10sYltkKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKGUmMTUpPDwxMnwoZiY2Myk8PDZ8ZyY2Myl9cmV0dXJuIGIuam9pbihcIlwiKX07XG5nb29nLmNyeXB0LnhvckJ5dGVBcnJheT1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYS5sZW5ndGg9PWIubGVuZ3RoLFwiWE9SIGFycmF5IGxlbmd0aHMgbXVzdCBtYXRjaFwiKTtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKWMucHVzaChhW2RdXmJbZF0pO3JldHVybiBjfTtnb29nLmRvbS5hc3NlcnRzPXt9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbj1mdW5jdGlvbihhKXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciBiPWdvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93XyhhKTtiJiYoIWF8fCEoYSBpbnN0YW5jZW9mIGIuTG9jYXRpb24pJiZhIGluc3RhbmNlb2YgYi5FbGVtZW50KSYmZ29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSBMb2NhdGlvbiAob3IgYSBub24tRWxlbWVudCBtb2NrKTsgZ290OiAlc1wiLGdvb2cuZG9tLmFzc2VydHMuZGVidWdTdHJpbmdGb3JUeXBlXyhhKSl9cmV0dXJuIGF9O1xuZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXz1mdW5jdGlvbihhLGIpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIGM9Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGEpO2MmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBjW2JdJiYoYSYmKGEgaW5zdGFuY2VvZiBjW2JdfHwhKGEgaW5zdGFuY2VvZiBjLkxvY2F0aW9ufHxhIGluc3RhbmNlb2YgYy5FbGVtZW50KSl8fGdvb2cuYXNzZXJ0cy5mYWlsKFwiQXJndW1lbnQgaXMgbm90IGEgJXMgKG9yIGEgbm9uLUVsZW1lbnQsIG5vbi1Mb2NhdGlvbiBtb2NrKTsgZ290OiAlc1wiLGIsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGEpKSl9cmV0dXJuIGF9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQW5jaG9yRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEFuY2hvckVsZW1lbnRcIil9O1xuZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MQnV0dG9uRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxMaW5rRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTExpbmtFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEltYWdlRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEltYWdlRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBdWRpb0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxBdWRpb0VsZW1lbnRcIil9O1xuZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxWaWRlb0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxWaWRlb0VsZW1lbnRcIil9O2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW5wdXRFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MSW5wdXRFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFRleHRBcmVhRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTFRleHRBcmVhRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxDYW52YXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MQ2FudmFzRWxlbWVudFwiKX07XG5nb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEVtYmVkRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEVtYmVkRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGb3JtRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEZvcm1FbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZyYW1lRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhhLFwiSFRNTEZyYW1lRWxlbWVudFwiKX07Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGEsXCJIVE1MSUZyYW1lRWxlbWVudFwiKX07XG5nb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTE9iamVjdEVsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxPYmplY3RFbGVtZW50XCIpfTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oYSxcIkhUTUxTY3JpcHRFbGVtZW50XCIpfTtcbmdvb2cuZG9tLmFzc2VydHMuZGVidWdTdHJpbmdGb3JUeXBlXz1mdW5jdGlvbihhKXtpZihnb29nLmlzT2JqZWN0KGEpKXRyeXtyZXR1cm4gYS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZXx8YS5jb25zdHJ1Y3Rvci5uYW1lfHxPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9Y2F0Y2goYil7cmV0dXJuXCI8b2JqZWN0IGNvdWxkIG5vdCBiZSBzdHJpbmdpZmllZD5cIn1lbHNlIHJldHVybiB2b2lkIDA9PT1hP1widW5kZWZpbmVkXCI6bnVsbD09PWE/XCJudWxsXCI6dHlwZW9mIGF9O2dvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93Xz1mdW5jdGlvbihhKXt0cnl7dmFyIGI9YSYmYS5vd25lckRvY3VtZW50LGM9YiYmKGIuZGVmYXVsdFZpZXd8fGIucGFyZW50V2luZG93KTtjPWN8fGdvb2cuZ2xvYmFsO2lmKGMuRWxlbWVudCYmYy5Mb2NhdGlvbilyZXR1cm4gY31jYXRjaChkKXt9cmV0dXJuIG51bGx9O2dvb2cuZnVuY3Rpb25zPXt9O2dvb2cuZnVuY3Rpb25zLmNvbnN0YW50PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX07Z29vZy5mdW5jdGlvbnMuRkFMU0U9ZnVuY3Rpb24oKXtyZXR1cm4hMX07Z29vZy5mdW5jdGlvbnMuVFJVRT1mdW5jdGlvbigpe3JldHVybiEwfTtnb29nLmZ1bmN0aW9ucy5OVUxMPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2dvb2cuZnVuY3Rpb25zLmlkZW50aXR5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGF9O2dvb2cuZnVuY3Rpb25zLmVycm9yPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IEVycm9yKGEpO319O2dvb2cuZnVuY3Rpb25zLmZhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgYTt9fTtcbmdvb2cuZnVuY3Rpb25zLmxvY2s9ZnVuY3Rpb24oYSxiKXtiPWJ8fDA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxiKSl9fTtnb29nLmZ1bmN0aW9ucy5udGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1thXX19O2dvb2cuZnVuY3Rpb25zLnBhcnRpYWxSaWdodD1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO2IucHVzaC5hcHBseShiLGMpO3JldHVybiBhLmFwcGx5KHRoaXMsYil9fTtnb29nLmZ1bmN0aW9ucy53aXRoUmV0dXJuVmFsdWU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5mdW5jdGlvbnMuc2VxdWVuY2UoYSxnb29nLmZ1bmN0aW9ucy5jb25zdGFudChiKSl9O1xuZ29vZy5mdW5jdGlvbnMuZXF1YWxUbz1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYj9hPT1jOmE9PT1jfX07Z29vZy5mdW5jdGlvbnMuY29tcG9zZT1mdW5jdGlvbihhLGIpe3ZhciBjPWFyZ3VtZW50cyxkPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe3ZhciBhO2QmJihhPWNbZC0xXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO2Zvcih2YXIgYj1kLTI7MDw9YjtiLS0pYT1jW2JdLmNhbGwodGhpcyxhKTtyZXR1cm4gYX19O2dvb2cuZnVuY3Rpb25zLnNlcXVlbmNlPWZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWIubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYSxlPTA7ZTxjO2UrKylhPWJbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhfX07XG5nb29nLmZ1bmN0aW9ucy5hbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9Yi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTxjO2ErKylpZighYlthXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITE7cmV0dXJuITB9fTtnb29nLmZ1bmN0aW9ucy5vcj1mdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMsYz1iLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPGM7YSsrKWlmKGJbYV0uYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybiEwO3JldHVybiExfX07Z29vZy5mdW5jdGlvbnMubm90PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O1xuZ29vZy5mdW5jdGlvbnMuY3JlYXRlPWZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlPWEucHJvdG90eXBlO2M9bmV3IGM7YS5hcHBseShjLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7cmV0dXJuIGN9O2dvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRT0hMDtnb29nLmZ1bmN0aW9ucy5jYWNoZVJldHVyblZhbHVlPWZ1bmN0aW9uKGEpe3ZhciBiPSExLGM7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWdvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRSlyZXR1cm4gYSgpO2J8fChjPWEoKSxiPSEwKTtyZXR1cm4gY319O2dvb2cuZnVuY3Rpb25zLm9uY2U9ZnVuY3Rpb24oYSl7dmFyIGI9YTtyZXR1cm4gZnVuY3Rpb24oKXtpZihiKXt2YXIgYT1iO2I9bnVsbDthKCl9fX07XG5nb29nLmZ1bmN0aW9ucy5kZWJvdW5jZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtyZXR1cm4gZnVuY3Rpb24oZSl7Z29vZy5nbG9iYWwuY2xlYXJUaW1lb3V0KGQpO3ZhciBmPWFyZ3VtZW50cztkPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmFwcGx5KGMsZil9LGIpfX07Z29vZy5mdW5jdGlvbnMudGhyb3R0bGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTAsZT0hMSxmPVtdLGc9ZnVuY3Rpb24oKXtkPTA7ZSYmKGU9ITEsaCgpKX0saD1mdW5jdGlvbigpe2Q9Z29vZy5nbG9iYWwuc2V0VGltZW91dChnLGIpO2EuYXBwbHkoYyxmKX07cmV0dXJuIGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzO2Q/ZT0hMDpoKCl9fTtnb29nLmZ1bmN0aW9ucy5yYXRlTGltaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTAsZT1mdW5jdGlvbigpe2Q9MH07cmV0dXJuIGZ1bmN0aW9uKGYpe2R8fChkPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQoZSxiKSxhLmFwcGx5KGMsYXJndW1lbnRzKSl9fTtnb29nLmRvbS5IdG1sRWxlbWVudD1mdW5jdGlvbigpe307Z29vZy5kb20uVGFnTmFtZT1mdW5jdGlvbihhKXt0aGlzLnRhZ05hbWVfPWF9O2dvb2cuZG9tLlRhZ05hbWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnTmFtZV99O2dvb2cuZG9tLlRhZ05hbWUuQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFcIik7Z29vZy5kb20uVGFnTmFtZS5BQkJSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUJCUlwiKTtnb29nLmRvbS5UYWdOYW1lLkFDUk9OWU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBQ1JPTllNXCIpO2dvb2cuZG9tLlRhZ05hbWUuQUREUkVTUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFERFJFU1NcIik7Z29vZy5kb20uVGFnTmFtZS5BUFBMRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUFBMRVRcIik7Z29vZy5kb20uVGFnTmFtZS5BUkVBPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVJFQVwiKTtnb29nLmRvbS5UYWdOYW1lLkFSVElDTEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUlRJQ0xFXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5BU0lERT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFTSURFXCIpO2dvb2cuZG9tLlRhZ05hbWUuQVVESU89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBVURJT1wiKTtnb29nLmRvbS5UYWdOYW1lLkI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCXCIpO2dvb2cuZG9tLlRhZ05hbWUuQkFTRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJBU0VcIik7Z29vZy5kb20uVGFnTmFtZS5CQVNFRk9OVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJBU0VGT05UXCIpO2dvb2cuZG9tLlRhZ05hbWUuQkRJPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkRJXCIpO2dvb2cuZG9tLlRhZ05hbWUuQkRPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkRPXCIpO2dvb2cuZG9tLlRhZ05hbWUuQklHPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQklHXCIpO2dvb2cuZG9tLlRhZ05hbWUuQkxPQ0tRVU9URT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJMT0NLUVVPVEVcIik7Z29vZy5kb20uVGFnTmFtZS5CT0RZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQk9EWVwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCUlwiKTtnb29nLmRvbS5UYWdOYW1lLkJVVFRPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJVVFRPTlwiKTtnb29nLmRvbS5UYWdOYW1lLkNBTlZBUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBTlZBU1wiKTtnb29nLmRvbS5UYWdOYW1lLkNBUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDQVBUSU9OXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ0VOVEVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0VOVEVSXCIpO2dvb2cuZG9tLlRhZ05hbWUuQ0lURT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNJVEVcIik7Z29vZy5kb20uVGFnTmFtZS5DT0RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09ERVwiKTtnb29nLmRvbS5UYWdOYW1lLkNPTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNPTFwiKTtnb29nLmRvbS5UYWdOYW1lLkNPTEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MR1JPVVBcIik7XG5nb29nLmRvbS5UYWdOYW1lLkNPTU1BTkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT01NQU5EXCIpO2dvb2cuZG9tLlRhZ05hbWUuREFUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFcIik7Z29vZy5kb20uVGFnTmFtZS5EQVRBTElTVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFMSVNUXCIpO2dvb2cuZG9tLlRhZ05hbWUuREQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERFwiKTtnb29nLmRvbS5UYWdOYW1lLkRFTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRFTFwiKTtnb29nLmRvbS5UYWdOYW1lLkRFVEFJTFM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERVRBSUxTXCIpO2dvb2cuZG9tLlRhZ05hbWUuREZOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREZOXCIpO2dvb2cuZG9tLlRhZ05hbWUuRElBTE9HPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElBTE9HXCIpO2dvb2cuZG9tLlRhZ05hbWUuRElSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElSXCIpO2dvb2cuZG9tLlRhZ05hbWUuRElWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElWXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5ETD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRMXCIpO2dvb2cuZG9tLlRhZ05hbWUuRFQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJEVFwiKTtnb29nLmRvbS5UYWdOYW1lLkVNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRU1cIik7Z29vZy5kb20uVGFnTmFtZS5FTUJFRD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkVNQkVEXCIpO2dvb2cuZG9tLlRhZ05hbWUuRklFTERTRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGSUVMRFNFVFwiKTtnb29nLmRvbS5UYWdOYW1lLkZJR0NBUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGSUdDQVBUSU9OXCIpO2dvb2cuZG9tLlRhZ05hbWUuRklHVVJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRklHVVJFXCIpO2dvb2cuZG9tLlRhZ05hbWUuRk9OVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPTlRcIik7Z29vZy5kb20uVGFnTmFtZS5GT09URVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT09URVJcIik7Z29vZy5kb20uVGFnTmFtZS5GT1JNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9STVwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVwiKTtnb29nLmRvbS5UYWdOYW1lLkZSQU1FU0VUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRlJBTUVTRVRcIik7Z29vZy5kb20uVGFnTmFtZS5IMT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgxXCIpO2dvb2cuZG9tLlRhZ05hbWUuSDI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIMlwiKTtnb29nLmRvbS5UYWdOYW1lLkgzPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDNcIik7Z29vZy5kb20uVGFnTmFtZS5IND1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg0XCIpO2dvb2cuZG9tLlRhZ05hbWUuSDU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINVwiKTtnb29nLmRvbS5UYWdOYW1lLkg2PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDZcIik7Z29vZy5kb20uVGFnTmFtZS5IRUFEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBRFwiKTtnb29nLmRvbS5UYWdOYW1lLkhFQURFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhFQURFUlwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuSEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEdST1VQXCIpO2dvb2cuZG9tLlRhZ05hbWUuSFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIUlwiKTtnb29nLmRvbS5UYWdOYW1lLkhUTUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIVE1MXCIpO2dvb2cuZG9tLlRhZ05hbWUuST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklcIik7Z29vZy5kb20uVGFnTmFtZS5JRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJRlJBTUVcIik7Z29vZy5kb20uVGFnTmFtZS5JTUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTUdcIik7Z29vZy5kb20uVGFnTmFtZS5JTlBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklOUFVUXCIpO2dvb2cuZG9tLlRhZ05hbWUuSU5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU5TXCIpO2dvb2cuZG9tLlRhZ05hbWUuSVNJTkRFWD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklTSU5ERVhcIik7Z29vZy5kb20uVGFnTmFtZS5LQkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJLQkRcIik7XG5nb29nLmRvbS5UYWdOYW1lLktFWUdFTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIktFWUdFTlwiKTtnb29nLmRvbS5UYWdOYW1lLkxBQkVMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTEFCRUxcIik7Z29vZy5kb20uVGFnTmFtZS5MRUdFTkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMRUdFTkRcIik7Z29vZy5kb20uVGFnTmFtZS5MST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxJXCIpO2dvb2cuZG9tLlRhZ05hbWUuTElOSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxJTktcIik7Z29vZy5kb20uVGFnTmFtZS5NQUlOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFJTlwiKTtnb29nLmRvbS5UYWdOYW1lLk1BUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BUFwiKTtnb29nLmRvbS5UYWdOYW1lLk1BUks9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQVJLXCIpO2dvb2cuZG9tLlRhZ05hbWUuTUFUSD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BVEhcIik7Z29vZy5kb20uVGFnTmFtZS5NRU5VPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUVOVVwiKTtcbmdvb2cuZG9tLlRhZ05hbWUuTUVOVUlURU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VSVRFTVwiKTtnb29nLmRvbS5UYWdOYW1lLk1FVEE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRBXCIpO2dvb2cuZG9tLlRhZ05hbWUuTUVURVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRFUlwiKTtnb29nLmRvbS5UYWdOYW1lLk5BVj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5BVlwiKTtnb29nLmRvbS5UYWdOYW1lLk5PRlJBTUVTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9GUkFNRVNcIik7Z29vZy5kb20uVGFnTmFtZS5OT1NDUklQVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5PU0NSSVBUXCIpO2dvb2cuZG9tLlRhZ05hbWUuT0JKRUNUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT0JKRUNUXCIpO2dvb2cuZG9tLlRhZ05hbWUuT0w9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPTFwiKTtnb29nLmRvbS5UYWdOYW1lLk9QVEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT1BUR1JPVVBcIik7XG5nb29nLmRvbS5UYWdOYW1lLk9QVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9QVElPTlwiKTtnb29nLmRvbS5UYWdOYW1lLk9VVFBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9VVFBVVFwiKTtnb29nLmRvbS5UYWdOYW1lLlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQXCIpO2dvb2cuZG9tLlRhZ05hbWUuUEFSQU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQQVJBTVwiKTtnb29nLmRvbS5UYWdOYW1lLlBJQ1RVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQSUNUVVJFXCIpO2dvb2cuZG9tLlRhZ05hbWUuUFJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFJFXCIpO2dvb2cuZG9tLlRhZ05hbWUuUFJPR1JFU1M9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQUk9HUkVTU1wiKTtnb29nLmRvbS5UYWdOYW1lLlE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJRXCIpO2dvb2cuZG9tLlRhZ05hbWUuUlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSUFwiKTtnb29nLmRvbS5UYWdOYW1lLlJUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRcIik7XG5nb29nLmRvbS5UYWdOYW1lLlJUQz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJUQ1wiKTtnb29nLmRvbS5UYWdOYW1lLlJVQlk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSVUJZXCIpO2dvb2cuZG9tLlRhZ05hbWUuUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNcIik7Z29vZy5kb20uVGFnTmFtZS5TQU1QPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0FNUFwiKTtnb29nLmRvbS5UYWdOYW1lLlNDUklQVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNDUklQVFwiKTtnb29nLmRvbS5UYWdOYW1lLlNFQ1RJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTRUNUSU9OXCIpO2dvb2cuZG9tLlRhZ05hbWUuU0VMRUNUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0VMRUNUXCIpO2dvb2cuZG9tLlRhZ05hbWUuU01BTEw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTTUFMTFwiKTtnb29nLmRvbS5UYWdOYW1lLlNPVVJDRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNPVVJDRVwiKTtnb29nLmRvbS5UYWdOYW1lLlNQQU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTUEFOXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5TVFJJS0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJJS0VcIik7Z29vZy5kb20uVGFnTmFtZS5TVFJPTkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJPTkdcIik7Z29vZy5kb20uVGFnTmFtZS5TVFlMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUWUxFXCIpO2dvb2cuZG9tLlRhZ05hbWUuU1VCPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VCXCIpO2dvb2cuZG9tLlRhZ05hbWUuU1VNTUFSWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVTU1BUllcIik7Z29vZy5kb20uVGFnTmFtZS5TVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVVBcIik7Z29vZy5kb20uVGFnTmFtZS5TVkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVkdcIik7Z29vZy5kb20uVGFnTmFtZS5UQUJMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRBQkxFXCIpO2dvb2cuZG9tLlRhZ05hbWUuVEJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUQk9EWVwiKTtnb29nLmRvbS5UYWdOYW1lLlREPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVERcIik7XG5nb29nLmRvbS5UYWdOYW1lLlRFTVBMQVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEVNUExBVEVcIik7Z29vZy5kb20uVGFnTmFtZS5URVhUQVJFQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRFWFRBUkVBXCIpO2dvb2cuZG9tLlRhZ05hbWUuVEZPT1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURk9PVFwiKTtnb29nLmRvbS5UYWdOYW1lLlRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEhcIik7Z29vZy5kb20uVGFnTmFtZS5USEVBRD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRIRUFEXCIpO2dvb2cuZG9tLlRhZ05hbWUuVElNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJTUVcIik7Z29vZy5kb20uVGFnTmFtZS5USVRMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJVExFXCIpO2dvb2cuZG9tLlRhZ05hbWUuVFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUUlwiKTtnb29nLmRvbS5UYWdOYW1lLlRSQUNLPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFJBQ0tcIik7Z29vZy5kb20uVGFnTmFtZS5UVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRUXCIpO1xuZ29vZy5kb20uVGFnTmFtZS5VPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVVwiKTtnb29nLmRvbS5UYWdOYW1lLlVMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVUxcIik7Z29vZy5kb20uVGFnTmFtZS5WQVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJWQVJcIik7Z29vZy5kb20uVGFnTmFtZS5WSURFTz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlZJREVPXCIpO2dvb2cuZG9tLlRhZ05hbWUuV0JSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiV0JSXCIpO2dvb2cuZG9tLnRhZ3M9e307Z29vZy5kb20udGFncy5WT0lEX1RBR1NfPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGNvbW1hbmQ6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH07Z29vZy5kb20udGFncy5pc1ZvaWRUYWc9ZnVuY3Rpb24oYSl7cmV0dXJuITA9PT1nb29nLmRvbS50YWdzLlZPSURfVEFHU19bYV19O2dvb2cuaHRtbD17fTtnb29nLmh0bWwudHJ1c3RlZHR5cGVzPXt9O2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRT9nb29nLmNyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUUrXCIjaHRtbFwiKTpudWxsO2dvb2cuc3RyaW5nPXt9O2dvb2cuc3RyaW5nLlR5cGVkU3RyaW5nPWZ1bmN0aW9uKCl7fTtnb29nLnN0cmluZy5Db25zdD1mdW5jdGlvbihhLGIpe3RoaXMuc3RyaW5nQ29uc3RWYWx1ZVdpdGhTZWN1cml0eUNvbnRyYWN0X19nb29nU3RyaW5nU2VjdXJpdHlQcml2YXRlXz1hPT09Z29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV8mJmJ8fFwiXCI7dGhpcy5TVFJJTkdfQ09OU1RfVFlQRV9NQVJLRVJfX0dPT0dfU1RSSU5HX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSX307Z29vZy5zdHJpbmcuQ29uc3QucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5zdHJpbmcuQ29uc3QucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVffTtcbmdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ29uc3R7XCIrdGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfK1wifVwifTtnb29nLnN0cmluZy5Db25zdC51bndyYXA9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0JiZhLmNvbnN0cnVjdG9yPT09Z29vZy5zdHJpbmcuQ29uc3QmJmEuU1RSSU5HX0NPTlNUX1RZUEVfTUFSS0VSX19HT09HX1NUUklOR19TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXylyZXR1cm4gYS5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgQ29uc3QsIGdvdCAnXCIrYStcIidcIik7cmV0dXJuXCJ0eXBlX2Vycm9yOkNvbnN0XCJ9O1xuZ29vZy5zdHJpbmcuQ29uc3QuZnJvbT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGdvb2cuc3RyaW5nLkNvbnN0KGdvb2cuc3RyaW5nLkNvbnN0LkdPT0dfU1RSSU5HX0NPTlNUUlVDVE9SX1RPS0VOX1BSSVZBVEVfLGEpfTtnb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl89e307Z29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV89e307Z29vZy5zdHJpbmcuQ29uc3QuRU1QVFk9Z29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIlwiKTtnb29nLmh0bWwuU2FmZVNjcmlwdD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV89XCJcIjt0aGlzLlNBRkVfU0NSSVBUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVNjcmlwdC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99O2dvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO2dvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fTtnb29nLmh0bWwuU2FmZVNjcmlwdC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oYSl7YT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoYSk7cmV0dXJuIDA9PT1hLmxlbmd0aD9nb29nLmh0bWwuU2FmZVNjcmlwdC5FTVBUWTpnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O1xuZ29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUNvbnN0YW50QW5kQXJncz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyljLnB1c2goZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiKFwiK2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKStcIikoXCIrYy5qb2luKFwiLCBcIikrXCIpO1wiKX07Z29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUpzb249ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuU2FmZVNjcmlwdC5zdHJpbmdpZnlfKGEpKX07Z29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXy50b1N0cmluZygpfTtcbmdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVNjcmlwdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVTY3JpcHR7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXytcIn1cIn0pO2dvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdChhKS50b1N0cmluZygpfTtcbmdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQ9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU2NyaXB0JiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTY3JpcHQmJmEuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfKXJldHVybiBhLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVNjcmlwdCwgZ290ICdcIithK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGEpKTtyZXR1cm5cInR5cGVfZXJyb3I6U2FmZVNjcmlwdFwifTtcbmdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV89ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpLnJlcGxhY2UoLzwvZyxcIlxcXFx4M2NcIil9O2dvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU2NyaXB0KS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGEpfTtcbmdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGEpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlU2NyaXB0KGEpOmE7cmV0dXJuIHRoaXN9O2dvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZPWdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKTtnb29nLmZzPXt9O2dvb2cuZnMudXJsPXt9O2dvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5mcy51cmwuZ2V0VXJsT2JqZWN0XygpLmNyZWF0ZU9iamVjdFVSTChhKX07Z29vZy5mcy51cmwucmV2b2tlT2JqZWN0VXJsPWZ1bmN0aW9uKGEpe2dvb2cuZnMudXJsLmdldFVybE9iamVjdF8oKS5yZXZva2VPYmplY3RVUkwoYSl9O2dvb2cuZnMudXJsLmdldFVybE9iamVjdF89ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmZzLnVybC5maW5kVXJsT2JqZWN0XygpO2lmKG51bGwhPWEpcmV0dXJuIGE7dGhyb3cgRXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgYmxvYiBVUkxzXCIpO307XG5nb29nLmZzLnVybC5maW5kVXJsT2JqZWN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLlVSTCkmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuVVJMLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWwuVVJMOmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwud2Via2l0VVJMKSYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbC53ZWJraXRVUkw6Z29vZy5pc0RlZihnb29nLmdsb2JhbC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsOm51bGx9O2dvb2cuZnMudXJsLmJyb3dzZXJTdXBwb3J0c09iamVjdFVybHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9Z29vZy5mcy51cmwuZmluZFVybE9iamVjdF8oKX07Z29vZy5pMThuPXt9O2dvb2cuaTE4bi5iaWRpPXt9O2dvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTD0hMTtcbmdvb2cuaTE4bi5iaWRpLklTX1JUTD1nb29nLmkxOG4uYmlkaS5GT1JDRV9SVEx8fChcImFyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiZmFcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJoZVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcIml3XCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwicHNcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJzZFwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInVnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwidXJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ5aVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpKSYmKDI9PWdvb2cuTE9DQUxFLmxlbmd0aHx8XG5cIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSl8fDM8PWdvb2cuTE9DQUxFLmxlbmd0aCYmXCJja2JcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKSYmKDM9PWdvb2cuTE9DQUxFLmxlbmd0aHx8XCItXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpfHxcIl9cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCkpfHw3PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsXG43KS50b0xvd2VyQ2FzZSgpfHxcInJvaGdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJ0aGFhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCkpfHw4PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJyb2hnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwidGhhYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpKTtcbmdvb2cuaTE4bi5iaWRpLkZvcm1hdD17TFJFOlwiXFx1MjAyYVwiLFJMRTpcIlxcdTIwMmJcIixQREY6XCJcXHUyMDJjXCIsTFJNOlwiXFx1MjAwZVwiLFJMTTpcIlxcdTIwMGZcIn07Z29vZy5pMThuLmJpZGkuRGlyPXtMVFI6MSxSVEw6LTEsTkVVVFJBTDowfTtnb29nLmkxOG4uYmlkaS5SSUdIVD1cInJpZ2h0XCI7Z29vZy5pMThuLmJpZGkuTEVGVD1cImxlZnRcIjtnb29nLmkxOG4uYmlkaS5JMThOX1JJR0hUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5MRUZUOmdvb2cuaTE4bi5iaWRpLlJJR0hUO2dvb2cuaTE4bi5iaWRpLkkxOE5fTEVGVD1nb29nLmkxOG4uYmlkaS5JU19SVEw/Z29vZy5pMThuLmJpZGkuUklHSFQ6Z29vZy5pMThuLmJpZGkuTEVGVDtcbmdvb2cuaTE4bi5iaWRpLnRvRGlyPWZ1bmN0aW9uKGEsYil7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/MDxhP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6MD5hP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Yj9udWxsOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOm51bGw9PWE/bnVsbDphP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn07Z29vZy5pMThuLmJpZGkubHRyQ2hhcnNfPVwiQS1aYS16XFx1MDBjMC1cXHUwMGQ2XFx1MDBkOC1cXHUwMGY2XFx1MDBmOC1cXHUwMmI4XFx1MDMwMC1cXHUwNTkwXFx1MDkwMC1cXHUxZmZmXFx1MjAwZVxcdTJjMDAtXFx1ZDgwMVxcdWQ4MDQtXFx1ZDgzOVxcdWQ4M2MtXFx1ZGJmZlxcdWY5MDAtXFx1ZmIxY1xcdWZlMDAtXFx1ZmU2ZlxcdWZlZmQtXFx1ZmZmZlwiO2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXz1cIlxcdTA1OTEtXFx1MDZlZlxcdTA2ZmEtXFx1MDhmZlxcdTIwMGZcXHVkODAyLVxcdWQ4MDNcXHVkODNhLVxcdWQ4M2JcXHVmYjFkLVxcdWZkZmZcXHVmZTcwLVxcdWZlZmNcIjtcbmdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXz0vPFtePl0qPnwmW147XSs7L2c7Z29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/YS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXyxcIlwiKTphfTtnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIik7Z29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ189bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpO2dvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhhLGIpKX07Z29vZy5pMThuLmJpZGkuaGFzUnRsQ2hhcj1nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGw7XG5nb29nLmkxOG4uYmlkaS5oYXNBbnlMdHI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ18udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKSl9O2dvb2cuaTE4bi5iaWRpLmx0clJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpO2dvb2cuaTE4bi5iaWRpLnJ0bFJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpO2dvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsUmVfLnRlc3QoYSl9O2dvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyUmVfLnRlc3QoYSl9O2dvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbENoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuIWdvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcihhKSYmIWdvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcihhKX07XG5nb29nLmkxOG4uYmlkaS5sdHJEaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiXlteXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXSpbXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXVwiKTtnb29nLmkxOG4uYmlkaS5ydGxEaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiXlteXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXSpbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKTtnb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bERpckNoZWNrUmVfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGEsYikpfTtnb29nLmkxOG4uYmlkaS5pc1J0bFRleHQ9Z29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bDtcbmdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKSl9O2dvb2cuaTE4bi5iaWRpLmlzTHRyVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoTHRyO2dvb2cuaTE4bi5iaWRpLmlzUmVxdWlyZWRMdHJSZV89L15odHRwOlxcL1xcLy4qLztnb29nLmkxOG4uYmlkaS5pc05ldXRyYWxUZXh0PWZ1bmN0aW9uKGEsYil7YT1nb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oYSxiKTtyZXR1cm4gZ29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KGEpfHwhZ29vZy5pMThuLmJpZGkuaGFzQW55THRyKGEpJiYhZ29vZy5pMThuLmJpZGkuaGFzQW55UnRsKGEpfTtcbmdvb2cuaTE4bi5iaWRpLmx0ckV4aXREaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1bXlwiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl0qJFwiKTtnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKiRcIik7Z29vZy5pMThuLmJpZGkuZW5kc1dpdGhMdHI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRXhpdERpckNoZWNrUmVfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGEsYikpfTtnb29nLmkxOG4uYmlkaS5pc0x0ckV4aXRUZXh0PWdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoTHRyO1xuZ29vZy5pMThuLmJpZGkuZW5kc1dpdGhSdGw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsRXhpdERpckNoZWNrUmVfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGEsYikpfTtnb29nLmkxOG4uYmlkaS5pc1J0bEV4aXRUZXh0PWdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoUnRsO2dvb2cuaTE4bi5iaWRpLnJ0bExvY2FsZXNSZV89L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7Z29vZy5pMThuLmJpZGkuaXNSdGxMYW5ndWFnZT1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsTG9jYWxlc1JlXy50ZXN0KGEpfTtnb29nLmkxOG4uYmlkaS5icmFja2V0R3VhcmRUZXh0UmVfPS8oXFwoLio/XFwpKyl8KFxcWy4qP1xcXSspfChcXHsuKj9cXH0rKXwoPC4qPz4rKS9nO1xuZ29vZy5pMThuLmJpZGkuZ3VhcmRCcmFja2V0SW5UZXh0PWZ1bmN0aW9uKGEsYil7Yj0odm9pZCAwPT09Yj9nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoYSk6Yik/Z29vZy5pMThuLmJpZGkuRm9ybWF0LlJMTTpnb29nLmkxOG4uYmlkaS5Gb3JtYXQuTFJNO3JldHVybiBhLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuYnJhY2tldEd1YXJkVGV4dFJlXyxiK1wiJCZcIitiKX07Z29vZy5pMThuLmJpZGkuZW5mb3JjZVJ0bEluSHRtbD1mdW5jdGlvbihhKXtyZXR1cm5cIjxcIj09YS5jaGFyQXQoMCk/YS5yZXBsYWNlKC88XFx3Ky8sXCIkJiBkaXI9cnRsXCIpOlwiXFxuPHNwYW4gZGlyPXJ0bD5cIithK1wiPC9zcGFuPlwifTtnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5UZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUkxFK2ErZ29vZy5pMThuLmJpZGkuRm9ybWF0LlBERn07XG5nb29nLmkxOG4uYmlkaS5lbmZvcmNlTHRySW5IdG1sPWZ1bmN0aW9uKGEpe3JldHVyblwiPFwiPT1hLmNoYXJBdCgwKT9hLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1sdHJcIik6XCJcXG48c3BhbiBkaXI9bHRyPlwiK2ErXCI8L3NwYW4+XCJ9O2dvb2cuaTE4bi5iaWRpLmVuZm9yY2VMdHJJblRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5MUkUrYStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfTtnb29nLmkxOG4uYmlkaS5kaW1lbnNpb25zUmVfPS86XFxzKihbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKS9nO2dvb2cuaTE4bi5iaWRpLmxlZnRSZV89L2xlZnQvZ2k7Z29vZy5pMThuLmJpZGkucmlnaHRSZV89L3JpZ2h0L2dpO2dvb2cuaTE4bi5iaWRpLnRlbXBSZV89LyUlJSUvZztcbmdvb2cuaTE4bi5iaWRpLm1pcnJvckNTUz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmRpbWVuc2lvbnNSZV8sXCI6JDEgJDQgJDMgJDJcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5sZWZ0UmVfLFwiJSUlJVwiKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLnJpZ2h0UmVfLGdvb2cuaTE4bi5iaWRpLkxFRlQpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkudGVtcFJlXyxnb29nLmkxOG4uYmlkaS5SSUdIVCl9O2dvb2cuaTE4bi5iaWRpLmRvdWJsZVF1b3RlU3Vic3RpdHV0ZVJlXz0vKFtcXHUwNTkxLVxcdTA1ZjJdKVwiL2c7Z29vZy5pMThuLmJpZGkuc2luZ2xlUXVvdGVTdWJzdGl0dXRlUmVfPS8oW1xcdTA1OTEtXFx1MDVmMl0pJy9nO1xuZ29vZy5pMThuLmJpZGkubm9ybWFsaXplSGVicmV3UXVvdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShnb29nLmkxOG4uYmlkaS5kb3VibGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMVxcdTA1ZjRcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMVxcdTA1ZjNcIil9O2dvb2cuaTE4bi5iaWRpLndvcmRTZXBhcmF0b3JSZV89L1xccysvO2dvb2cuaTE4bi5iaWRpLmhhc051bWVyYWxzUmVfPS9bXFxkXFx1MDZmMC1cXHUwNmY5XS87Z29vZy5pMThuLmJpZGkucnRsRGV0ZWN0aW9uVGhyZXNob2xkXz0uNDtcbmdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPTAsZT0hMTthPWdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhhLGIpLnNwbGl0KGdvb2cuaTE4bi5iaWRpLndvcmRTZXBhcmF0b3JSZV8pO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBmPWFbYl07Z29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bChmKT8oYysrLGQrKyk6Z29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KGYpP2U9ITA6Z29vZy5pMThuLmJpZGkuaGFzQW55THRyKGYpP2QrKzpnb29nLmkxOG4uYmlkaS5oYXNOdW1lcmFsc1JlXy50ZXN0KGYpJiYoZT0hMCl9cmV0dXJuIDA9PWQ/ZT9nb29nLmkxOG4uYmlkaS5EaXIuTFRSOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOmMvZD5nb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn07XG5nb29nLmkxOG4uYmlkaS5kZXRlY3RSdGxEaXJlY3Rpb25hbGl0eT1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmkxOG4uYmlkaS5lc3RpbWF0ZURpcmVjdGlvbihhLGIpPT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMfTtnb29nLmkxOG4uYmlkaS5zZXRFbGVtZW50RGlyQW5kQWxpZ249ZnVuY3Rpb24oYSxiKXthJiYoYj1nb29nLmkxOG4uYmlkaS50b0RpcihiKSkmJihhLnN0eWxlLnRleHRBbGlnbj1iPT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMP2dvb2cuaTE4bi5iaWRpLlJJR0hUOmdvb2cuaTE4bi5iaWRpLkxFRlQsYS5kaXI9Yj09Z29vZy5pMThuLmJpZGkuRGlyLlJUTD9cInJ0bFwiOlwibHRyXCIpfTtcbmdvb2cuaTE4bi5iaWRpLnNldEVsZW1lbnREaXJCeVRleHREaXJlY3Rpb25hbGl0eT1mdW5jdGlvbihhLGIpe3N3aXRjaChnb29nLmkxOG4uYmlkaS5lc3RpbWF0ZURpcmVjdGlvbihiKSl7Y2FzZSBnb29nLmkxOG4uYmlkaS5EaXIuTFRSOmEuZGlyPVwibHRyXCI7YnJlYWs7Y2FzZSBnb29nLmkxOG4uYmlkaS5EaXIuUlRMOmEuZGlyPVwicnRsXCI7YnJlYWs7ZGVmYXVsdDphLnJlbW92ZUF0dHJpYnV0ZShcImRpclwiKX19O2dvb2cuaTE4bi5iaWRpLkRpcmVjdGlvbmFsU3RyaW5nPWZ1bmN0aW9uKCl7fTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsPWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfPVwiXCI7dGhpcy50cnVzdGVkVVJMXz1udWxsO3RoaXMuVFJVU1RFRF9SRVNPVVJDRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwO2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBnb29nLmkxOG4uYmlkaS5EaXIuTFRSfTtcbmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmNsb25lV2l0aFBhcmFtcz1mdW5jdGlvbihhLGIpe3ZhciBjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKHRoaXMpO2M9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5VUkxfUEFSQU1fUEFSU0VSXy5leGVjKGMpO3ZhciBkPWNbM118fFwiXCI7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoY1sxXStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCI/XCIsY1syXXx8XCJcIixhKStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCIjXCIsZCxiKSl9O1xuZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJUcnVzdGVkUmVzb3VyY2VVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfK1wifVwifSk7Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTChhKS50b1N0cmluZygpfTtcbmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmYS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwmJmEuVFJVU1RFRF9SRVNPVVJDRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8pcmV0dXJuIGEucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXztnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFRydXN0ZWRSZXNvdXJjZVVybCwgZ290ICdcIithK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGEpKTtyZXR1cm5cInR5cGVfZXJyb3I6VHJ1c3RlZFJlc291cmNlVXJsXCJ9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRydXN0ZWRVUkxfP2EudHJ1c3RlZFVSTF86Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoYSl9O1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoYSk7aWYoIWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfLnRlc3QoYykpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFRydXN0ZWRSZXNvdXJjZVVybCBmb3JtYXQ6IFwiK2MpO2E9Yy5yZXBsYWNlKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl8sZnVuY3Rpb24oYSxlKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsZSkpdGhyb3cgRXJyb3IoJ0ZvdW5kIG1hcmtlciwgXCInK2UrJ1wiLCBpbiBmb3JtYXQgc3RyaW5nLCBcIicrYysnXCIsIGJ1dCBubyB2YWxpZCBsYWJlbCBtYXBwaW5nIGZvdW5kIGluIGFyZ3M6ICcrSlNPTi5zdHJpbmdpZnkoYikpO2E9YltlXTtyZXR1cm4gYSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTpcbmVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoYSkpfSk7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl89LyV7KFxcdyspfS9nO2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfPS9eKChodHRwczopP1xcL1xcL1swLTlhLXouOltcXF0tXStcXC98XFwvW14vXFxcXF18W146L1xcXFwlXStcXC98W146L1xcXFwlXSpbPyNdfGFib3V0OmJsYW5rIykvaTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlVSTF9QQVJBTV9QQVJTRVJfPS9eKFtePyNdKikoXFw/W14jXSopPygjW1xcc1xcU10qKT8vO1xuZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXRXaXRoUGFyYW1zPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdChhLGIpLmNsb25lV2l0aFBhcmFtcyhjLGQpfTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZyb21Db25zdGFudD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpfTtnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZyb21Db25zdGFudHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhW2NdKTtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiKX07XG5nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fTtcbmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw7Yi5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTChhKTphO2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZJiYoYi50cnVzdGVkVVJMXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVVUkwoYSkpO3JldHVybiBifTtcbmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXz1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09YylyZXR1cm4gYjtpZihnb29nLmlzU3RyaW5nKGMpKXJldHVybiBjP2ErZW5jb2RlVVJJQ29tcG9uZW50KGMpOlwiXCI7Zm9yKHZhciBkIGluIGMpe3ZhciBlPWNbZF07ZT1nb29nLmlzQXJyYXkoZSk/ZTpbZV07Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl07bnVsbCE9ZyYmKGJ8fChiPWEpLGIrPShiLmxlbmd0aD5hLmxlbmd0aD9cIiZcIjpcIlwiKStlbmNvZGVVUklDb21wb25lbnQoZCkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhnKSkpfX1yZXR1cm4gYn07Z29vZy5zdHJpbmcuaW50ZXJuYWw9e307Z29vZy5zdHJpbmcuaW50ZXJuYWwuc3RhcnRzV2l0aD1mdW5jdGlvbihhLGIpe3JldHVybiAwPT1hLmxhc3RJbmRleE9mKGIsMCl9O2dvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGgtYi5sZW5ndGg7cmV0dXJuIDA8PWMmJmEuaW5kZXhPZihiLGMpPT1jfTtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoYixhLnN1YnN0cigwLGIubGVuZ3RoKSl9O2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVuZHNXaXRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoYixhLnN1YnN0cihhLmxlbmd0aC1iLmxlbmd0aCxiLmxlbmd0aCkpfTtcbmdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVxdWFscz1mdW5jdGlvbihhLGIpe3JldHVybiBhLnRvTG93ZXJDYXNlKCk9PWIudG9Mb3dlckNhc2UoKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZT1mdW5jdGlvbihhKXtyZXR1cm4vXltcXHNcXHhhMF0qJC8udGVzdChhKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbT1nb29nLlRSVVNURURfU0lURSYmU3RyaW5nLnByb3RvdHlwZS50cmltP2Z1bmN0aW9uKGEpe3JldHVybiBhLnRyaW0oKX06ZnVuY3Rpb24oYSl7cmV0dXJuL15bXFxzXFx4YTBdKihbXFxzXFxTXSo/KVtcXHNcXHhhMF0qJC8uZXhlYyhhKVsxXX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZT1mdW5jdGlvbihhLGIpe2E9U3RyaW5nKGEpLnRvTG93ZXJDYXNlKCk7Yj1TdHJpbmcoYikudG9Mb3dlckNhc2UoKTtyZXR1cm4gYTxiPy0xOmE9PWI/MDoxfTtcbmdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKS9nLGI/XCI8YnIgLz5cIjpcIjxicj5cIil9O1xuZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZT1mdW5jdGlvbihhLGIpe2lmKGIpYT1hLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXyxcIiZhbXA7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFwiJmx0O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXyxcIiZndDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXyxcIiZxdW90O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKTtlbHNle2lmKCFnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfLnRlc3QoYSkpcmV0dXJuIGE7LTEhPWEuaW5kZXhPZihcIiZcIikmJihhPWEucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5BTVBfUkVfLFwiJmFtcDtcIikpOy0xIT1hLmluZGV4T2YoXCI8XCIpJiYoYT1hLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFxuXCImbHQ7XCIpKTstMSE9YS5pbmRleE9mKFwiPlwiKSYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXyxcIiZndDtcIikpOy0xIT1hLmluZGV4T2YoJ1wiJykmJihhPWEucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXyxcIiZxdW90O1wiKSk7LTEhPWEuaW5kZXhPZihcIidcIikmJihhPWEucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfLFwiJiMzOTtcIikpOy0xIT1hLmluZGV4T2YoXCJcXHgwMFwiKSYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKSl9cmV0dXJuIGF9O2dvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV89LyYvZztnb29nLnN0cmluZy5pbnRlcm5hbC5MVF9SRV89LzwvZztnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV89Lz4vZztnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXz0vXCIvZztnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfPS8nL2c7XG5nb29nLnN0cmluZy5pbnRlcm5hbC5OVUxMX1JFXz0vXFx4MDAvZztnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfPS9bXFx4MDAmPD5cIiddLztnb29nLnN0cmluZy5pbnRlcm5hbC53aGl0ZXNwYWNlRXNjYXBlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyKGEucmVwbGFjZSgvICAvZyxcIiAmIzE2MDtcIiksYil9O2dvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuLTEhPWEuaW5kZXhPZihiKX07Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYS50b0xvd2VyQ2FzZSgpLGIudG9Mb3dlckNhc2UoKSl9O1xuZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZVZlcnNpb25zPWZ1bmN0aW9uKGEsYil7dmFyIGM9MDthPWdvb2cuc3RyaW5nLmludGVybmFsLnRyaW0oU3RyaW5nKGEpKS5zcGxpdChcIi5cIik7Yj1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltKFN0cmluZyhiKSkuc3BsaXQoXCIuXCIpO2Zvcih2YXIgZD1NYXRoLm1heChhLmxlbmd0aCxiLmxlbmd0aCksZT0wOzA9PWMmJmU8ZDtlKyspe3ZhciBmPWFbZV18fFwiXCIsZz1iW2VdfHxcIlwiO2Rve2Y9LyhcXGQqKShcXEQqKSguKikvLmV4ZWMoZil8fFtcIlwiLFwiXCIsXCJcIixcIlwiXTtnPS8oXFxkKikoXFxEKikoLiopLy5leGVjKGcpfHxbXCJcIixcIlwiLFwiXCIsXCJcIl07aWYoMD09ZlswXS5sZW5ndGgmJjA9PWdbMF0ubGVuZ3RoKWJyZWFrO2M9MD09ZlsxXS5sZW5ndGg/MDpwYXJzZUludChmWzFdLDEwKTt2YXIgaD0wPT1nWzFdLmxlbmd0aD8wOnBhcnNlSW50KGdbMV0sMTApO2M9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXyhjLGgpfHxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKDA9PVxuZlsyXS5sZW5ndGgsMD09Z1syXS5sZW5ndGgpfHxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKGZbMl0sZ1syXSk7Zj1mWzNdO2c9Z1szXX13aGlsZSgwPT1jKX1yZXR1cm4gY307Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXz1mdW5jdGlvbihhLGIpe3JldHVybiBhPGI/LTE6YT5iPzE6MH07Z29vZy5odG1sLlNhZmVVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPVwiXCI7dGhpcy5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffTtnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HPVwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIjtnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMDtnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O1xuZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZz0hMDtnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9O2dvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXytcIn1cIn0pO2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChhKS50b1N0cmluZygpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkw9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsJiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVVcmwmJmEuU0FGRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfKXJldHVybiBhLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVVybCwgZ290ICdcIithK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGEpKTtyZXR1cm5cInR5cGVfZXJyb3I6U2FmZVVybFwifTtnb29nLmh0bWwuU2FmZVVybC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpfTtcbmdvb2cuaHRtbC5TQUZFX01JTUVfVFlQRV9QQVRURVJOXz0vXig/OmF1ZGlvXFwvKD86M2dwcDJ8M2dwcHxhYWN8TDE2fG1pZGl8bXAzfG1wNHxtcGVnfG9nYXxvZ2d8b3B1c3x4LW00YXx4LXdhdnx3YXZ8d2VibSl8aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnB8eC1pY29uKXx0ZXh0XFwvY3N2fHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm18cXVpY2t0aW1lKSkoPzo7XFx3Kz0oPzpcXHcrfFwiW1xcdzs9XStcIikpKiQvaTtnb29nLmh0bWwuU2FmZVVybC5pc1NhZmVNaW1lVHlwZT1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QoYSl9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21CbG9iPWZ1bmN0aW9uKGEpe2E9Z29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QoYS50eXBlKT9nb29nLmZzLnVybC5jcmVhdGVPYmplY3RVcmwoYSk6Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORztyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXz0vXmRhdGE6KFteLF0qKTtiYXNlNjQsW2EtejAtOStcXC9dKz0qJC9pO2dvb2cuaHRtbC5TYWZlVXJsLmZyb21EYXRhVXJsPWZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC8oJTBBfCUwRCkvZyxcIlwiKTt2YXIgYj1hLm1hdGNoKGdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXyk7Yj1iJiZnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChiWzFdKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGI/YTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKX07Z29vZy5odG1sLlNhZmVVcmwuZnJvbVRlbFVybD1mdW5jdGlvbihhKXtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGEsXCJ0ZWw6XCIpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtcbmdvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fPS9ec2lwW3NdPzpbK2EtejAtOV8uISQlJicqXFwvPV5ge3x9fi1dK0AoW2EtejAtOS1dK1xcLikrW2EtejAtOV17Miw2M30kL2k7Z29vZy5odG1sLlNhZmVVcmwuZnJvbVNpcFVybD1mdW5jdGlvbihhKXtnb29nLmh0bWwuU0lQX1VSTF9QQVRURVJOXy50ZXN0KGRlY29kZVVSSUNvbXBvbmVudChhKSl8fChhPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O2dvb2cuaHRtbC5TYWZlVXJsLmZyb21GYWNlYm9va01lc3NlbmdlclVybD1mdW5jdGlvbihhKXtnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGEsXCJmYi1tZXNzZW5nZXI6Ly9zaGFyZVwiKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVVybC5mcm9tV2hhdHNBcHBVcmw9ZnVuY3Rpb24oYSl7Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChhLFwid2hhdHNhcHA6Ly9zZW5kXCIpfHwoYT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGEpfTtnb29nLmh0bWwuU2FmZVVybC5mcm9tU21zVXJsPWZ1bmN0aW9uKGEpe2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoYSxcInNtczpcIikmJmdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXyhhKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVVybC5pc1Ntc1VybEJvZHlWYWxpZF89ZnVuY3Rpb24oYSl7dmFyIGI9YS5pbmRleE9mKFwiI1wiKTswPGImJihhPWEuc3Vic3RyaW5nKDAsYikpO2I9YS5tYXRjaCgvWz8mXWJvZHk9L2dpKTtpZighYilyZXR1cm4hMDtpZigxPGIubGVuZ3RoKXJldHVybiExO2E9YS5tYXRjaCgvWz8mXWJvZHk9KFteJl0qKS8pWzFdO2lmKCFhKXJldHVybiEwO3RyeXtkZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2goYyl7cmV0dXJuITF9cmV0dXJuL14oPzpbYS16MC05XFwtXy5+XXwlWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGEpfTtnb29nLmh0bWwuU2FmZVVybC5mcm9tU3NoVXJsPWZ1bmN0aW9uKGEpe2dvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoYSxcInNzaDovL1wiKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUNocm9tZUV4dGVuc2lvblVybD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15jaHJvbWUtZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sYSxiKX07Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVGaXJlZm94RXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXm1vei1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxhLGIpfTtnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUVkZ2VFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9ebXMtYnJvd3Nlci1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxhLGIpfTtcbmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXz1mdW5jdGlvbihhLGIsYyl7KGE9YS5leGVjKGIpKT8oYT1hWzFdLC0xPT0oYyBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P1tnb29nLnN0cmluZy5Db25zdC51bndyYXAoYyldOmMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSl9KSkuaW5kZXhPZihhKSYmKGI9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORykpOmI9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORztyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtnb29nLmh0bWwuU2FmZVVybC5mcm9tVHJ1c3RlZFJlc291cmNlVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoYSkpfTtcbmdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXz0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTtnb29nLmh0bWwuU2FmZVVybC5TQUZFX1VSTF9QQVRURVJOPWdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXztnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZT1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpcmV0dXJuIGE7YT1cIm9iamVjdFwiPT10eXBlb2YgYSYmYS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nP2EuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpOlN0cmluZyhhKTtnb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl8udGVzdChhKXx8KGE9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZD1mdW5jdGlvbihhLGIpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybClyZXR1cm4gYTthPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/YS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGEpO2lmKGImJi9eZGF0YTovaS50ZXN0KGEpJiYoYj1nb29nLmh0bWwuU2FmZVVybC5mcm9tRGF0YVVybChhKSxiLmdldFR5cGVkU3RyaW5nVmFsdWUoKT09YSkpcmV0dXJuIGI7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl8udGVzdChhKSxcIiVzIGRvZXMgbm90IG1hdGNoIHRoZSBzYWZlIFVSTCBwYXR0ZXJuXCIsYSl8fChhPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYSl9O1xuZ29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9O2dvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgZ29vZy5odG1sLlNhZmVVcmw7Yi5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVVUkwoYSk6YTtyZXR1cm4gYn07Z29vZy5odG1sLlNhZmVVcmwuQUJPVVRfQkxBTks9Z29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiYWJvdXQ6YmxhbmtcIik7Z29vZy5odG1sLlNhZmVTdHlsZT1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1cIlwiO3RoaXMuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99O2dvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e307XG5nb29nLmh0bWwuU2FmZVN0eWxlLmZyb21Db25zdGFudD1mdW5jdGlvbihhKXthPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFk7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aChhLFwiO1wiKSxcIkxhc3QgY2hhcmFjdGVyIG9mIHN0eWxlIHN0cmluZyBpcyBub3QgJzsnOiBcIithKTtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGEsXCI6XCIpLFwiU3R5bGUgc3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgJzonLCB0byBzcGVjaWZ5IGEgXFxcIm5hbWU6IHZhbHVlXFxcIiBwYWlyOiBcIithKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07XG5nb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlX307Z29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGV7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfK1wifVwifSk7XG5nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZSYmYS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU3R5bGUmJmEuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXylyZXR1cm4gYS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfO2dvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVN0eWxlLCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpTYWZlU3R5bGVcIn07Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGUpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSl9O1xuZ29vZy5odG1sLlNhZmVTdHlsZS5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihhKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89YTtyZXR1cm4gdGhpc307Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWT1nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiXCIpO2dvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORz1cInpDbG9zdXJlelwiO1xuZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjO2ZvcihjIGluIGEpe2lmKCEvXlstX2EtekEtWjAtOV0rJC8udGVzdChjKSl0aHJvdyBFcnJvcihcIk5hbWUgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05XSwgZ290OiBcIitjKTt2YXIgZD1hW2NdO251bGwhPWQmJihkPWdvb2cuaXNBcnJheShkKT9nb29nLmFycmF5Lm1hcChkLGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXykuam9pbihcIiBcIik6Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKGQpLGIrPWMrXCI6XCIrZCtcIjtcIil9cmV0dXJuIGI/Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiKTpnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZfTtcbmdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXz1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpcmV0dXJuJ3VybChcIicrZ29vZy5odG1sLlNhZmVVcmwudW53cmFwKGEpLnJlcGxhY2UoLzwvZyxcIiUzY1wiKS5yZXBsYWNlKC9bXFxcXFwiXS9nLFwiXFxcXCQmXCIpKydcIiknO2E9YSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ18oU3RyaW5nKGEpKTtpZigvW3s7fV0vLnRlc3QoYSkpdGhyb3cgbmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIlZhbHVlIGRvZXMgbm90IGFsbG93IFt7O31dLCBnb3Q6ICVzLlwiLFthXSk7cmV0dXJuIGF9O1xuZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVTdHJpbmdfPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLkZVTkNUSU9OU19SRV8sXCIkMVwiKS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXyxcIiQxXCIpLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5VUkxfUkVfLFwidXJsXCIpO2lmKGdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfLnRlc3QoYikpe2lmKGdvb2cuaHRtbC5TYWZlU3R5bGUuQ09NTUVOVF9SRV8udGVzdChhKSlyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgZGlzYWxsb3dzIGNvbW1lbnRzLCBnb3Q6IFwiK2EpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORztpZighZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFF1b3Rlc18oYSkpcmV0dXJuIGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIHJlcXVpcmVzIGJhbGFuY2VkIHF1b3RlcywgZ290OiBcIitcbmEpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORztpZighZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFNxdWFyZUJyYWNrZXRzXyhhKSlyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgcmVxdWlyZXMgYmFsYW5jZWQgc3F1YXJlIGJyYWNrZXRzIGFuZCBvbmUgaWRlbnRpZmllciBwZXIgcGFpciBvZiBicmFja2V0cywgZ290OiBcIithKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkd9ZWxzZSByZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgYWxsb3dzIG9ubHkgXCIrZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXytcIiBhbmQgc2ltcGxlIGZ1bmN0aW9ucywgZ290OiBcIithKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkc7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVVcmxfKGEpfTtcbmdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRRdW90ZXNfPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMCxjPSEwLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YS5jaGFyQXQoZCk7XCInXCI9PWUmJmM/Yj0hYjonXCInPT1lJiZiJiYoYz0hYyl9cmV0dXJuIGImJmN9O2dvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRTcXVhcmVCcmFja2V0c189ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSEwLGM9L15bLV9hLXpBLVowLTldJC8sZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJBdChkKTtpZihcIl1cIj09ZSl7aWYoYilyZXR1cm4hMTtiPSEwfWVsc2UgaWYoXCJbXCI9PWUpe2lmKCFiKXJldHVybiExO2I9ITF9ZWxzZSBpZighYiYmIWMudGVzdChlKSlyZXR1cm4hMX1yZXR1cm4gYn07Z29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXz1cIlstLC5cXFwiJyVfISMgYS16QS1aMC05XFxcXFtcXFxcXV1cIjtcbmdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfPW5ldyBSZWdFeHAoXCJeXCIrZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXytcIiskXCIpO2dvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXz0vXFxiKHVybFxcKFsgXFx0XFxuXSopKCdbIC0mKC1cXFtcXF0tfl0qJ3xcIlsgISMtXFxbXFxdLX5dKlwifFshIy0mKi1cXFtcXF0tfl0qKShbIFxcdFxcbl0qXFwpKS9nO2dvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXz0vXFxiKGhzbHxoc2xhfHJnYnxyZ2JhfG1hdHJpeHxjYWxjfG1pbm1heHxmaXQtY29udGVudHxyZXBlYXR8KHJvdGF0ZXxzY2FsZXx0cmFuc2xhdGUpKFh8WXxafDNkKT8pXFwoWy0rKi8wLTlhLXouJVxcW1xcXSwgXStcXCkvZztnb29nLmh0bWwuU2FmZVN0eWxlLkNPTU1FTlRfUkVfPS9cXC9cXCovO1xuZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVVybF89ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV8sZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGI9XCJcIjtkPWQucmVwbGFjZSgvXihbJ1wiXSkoLiopXFwxJC8sZnVuY3Rpb24oYSxjLGQpe2I9YztyZXR1cm4gZH0pO2E9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoZCkuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpO3JldHVybiBjK2IrYStiK2V9KX07Z29vZy5odG1sLlNhZmVTdHlsZS5jb25jYXQ9ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPWZ1bmN0aW9uKGEpe2dvb2cuaXNBcnJheShhKT9nb29nLmFycmF5LmZvckVhY2goYSxjKTpiKz1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChhKX07Z29vZy5hcnJheS5mb3JFYWNoKGFyZ3VtZW50cyxjKTtyZXR1cm4gYj9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9O2dvb2cuaHRtbC5TYWZlU3R5bGVTaGVldD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfPVwiXCI7dGhpcy5TQUZFX1NUWUxFX1NIRUVUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffTtnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fTtcbmdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVSdWxlPWZ1bmN0aW9uKGEsYil7aWYoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYSxcIjxcIikpdGhyb3cgRXJyb3IoXCJTZWxlY3RvciBkb2VzIG5vdCBhbGxvdyAnPCcsIGdvdDogXCIrYSk7dmFyIGM9YS5yZXBsYWNlKC8oJ3xcIikoKD8hXFwxKVteXFxyXFxuXFxmXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvZyxcIlwiKTtpZighL15bLV9hLXpBLVowLTkjLjoqICw+K35bXFxdKCk9XiR8XSskLy50ZXN0KGMpKXRocm93IEVycm9yKFwiU2VsZWN0b3IgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05Iy46KiAsPit+W1xcXFxdKCk9XiR8XSBhbmQgc3RyaW5ncywgZ290OiBcIithKTtpZighZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0Lmhhc0JhbGFuY2VkQnJhY2tldHNfKGMpKXRocm93IEVycm9yKFwiKCkgYW5kIFtdIGluIHNlbGVjdG9yIG11c3QgYmUgYmFsYW5jZWQsIGdvdDogXCIrYSk7YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGV8fChiPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlKGIpKTtcbmE9YStcIntcIitnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChiKS5yZXBsYWNlKC88L2csXCJcXFxcM0MgXCIpK1wifVwiO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0Lmhhc0JhbGFuY2VkQnJhY2tldHNfPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17XCIoXCI6XCIpXCIsXCJbXCI6XCJdXCJ9LGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdO2lmKGJbZV0pYy5wdXNoKGJbZV0pO2Vsc2UgaWYoZ29vZy5vYmplY3QuY29udGFpbnMoYixlKSYmYy5wb3AoKSE9ZSlyZXR1cm4hMX1yZXR1cm4gMD09Yy5sZW5ndGh9O1xuZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNvbmNhdD1mdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM9ZnVuY3Rpb24oYSl7Z29vZy5pc0FycmF5KGEpP2dvb2cuYXJyYXkuZm9yRWFjaChhLGMpOmIrPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoYSl9O2dvb2cuYXJyYXkuZm9yRWFjaChhcmd1bWVudHMsYyk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtcbmdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oYSl7YT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoYSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuRU1QVFk7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYSxcIjxcIiksXCJGb3JiaWRkZW4gJzwnIGNoYXJhY3RlciBpbiBzdHlsZSBzaGVldCBzdHJpbmc6IFwiK2EpO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShhKX07Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVffTtcbmdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGVTaGVldHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXytcIn1cIn0pO1xuZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0JiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0JiZhLlNBRkVfU1RZTEVfU0hFRVRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXylyZXR1cm4gYS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV87Z29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlU3R5bGVTaGVldCwgZ290ICdcIithK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGEpKTtyZXR1cm5cInR5cGVfZXJyb3I6U2FmZVN0eWxlU2hlZXRcIn07XG5nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhhKX07Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGEpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfPWE7cmV0dXJuIHRoaXN9O2dvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5FTVBUWT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKTtnb29nLmxhYnM9e307Z29vZy5sYWJzLnVzZXJBZ2VudD17fTtnb29nLmxhYnMudXNlckFnZW50LnV0aWw9e307Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ189ZnVuY3Rpb24oKXt2YXIgYT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXygpO3JldHVybiBhJiYoYT1hLnVzZXJBZ2VudCk/YTpcIlwifTtnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5uYXZpZ2F0b3J9O2dvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRfPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfKCk7Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnNldFVzZXJBZ2VudD1mdW5jdGlvbihhKXtnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50Xz1hfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXygpfTtcbmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnVzZXJBZ2VudF99O2dvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudD1mdW5jdGlvbihhKXt2YXIgYj1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGIsYSl9O2dvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2U9ZnVuY3Rpb24oYSl7dmFyIGI9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucyhiLGEpfTtcbmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcz1mdW5jdGlvbihhKXtmb3IodmFyIGI9LyhcXHdbXFx3IF0rKVxcLyhbXlxcc10rKVxccyooPzpcXCgoLio/KVxcKSk/L2csYz1bXSxkO2Q9Yi5leGVjKGEpOyljLnB1c2goW2RbMV0sZFsyXSxkWzNdfHx2b2lkIDBdKTtyZXR1cm4gY307Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyPXt9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJPcGVyYVwiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSUVfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZy9cIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiT1BSXCIpfTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGaXJlZm94XCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGeGlPU1wiKX07XG5nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlNhZmFyaVwiKSYmIShnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0XygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFDaHJvbWl1bV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2lsaygpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpKX07XG5nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ29hc3RcIil9O2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfPWZ1bmN0aW9uKCl7cmV0dXJuKGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfKCkmJmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFwcGxlV2ViS2l0XCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV89ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ2hyb21lXCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDcmlPU1wiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikmJiEoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2lsaygpKX07XG5nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzSUU9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSUVfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2U9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2VDaHJvbWl1bT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhQ2hyb21pdW09Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFDaHJvbWl1bV87Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRmlyZWZveD1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94Xztcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NhZmFyaT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0NvYXN0PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xztnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJb3NXZWJ2aWV3PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfO2dvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0FuZHJvaWRCcm93c2VyPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEFuZHJvaWRCcm93c2VyXztnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlNpbGtcIil9O1xuZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldFZlcnNpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe2E9Z29vZy5hcnJheS5maW5kKGEsZCk7cmV0dXJuIGNbYV18fFwiXCJ9dmFyIGI9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO2lmKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCkpcmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRJRVZlcnNpb25fKGIpO2I9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzKGIpO3ZhciBjPXt9O2dvb2cuYXJyYXkuZm9yRWFjaChiLGZ1bmN0aW9uKGEpe2NbYVswXV09YVsxXX0pO3ZhciBkPWdvb2cucGFydGlhbChnb29nLm9iamVjdC5jb250YWluc0tleSxjKTtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKT9hKFtcIlZlcnNpb25cIixcIk9wZXJhXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCk/YShbXCJFZGdlXCJdKTpcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2VDaHJvbWl1bSgpP2EoW1wiRWRnXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKT9hKFtcIkNocm9tZVwiLFwiQ3JpT1NcIl0pOihiPWJbMl0pJiZiWzFdfHxcIlwifTtnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0VmVyc2lvbigpLGEpfTtcbmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRJRVZlcnNpb25fPWZ1bmN0aW9uKGEpe3ZhciBiPS9ydjogKihbXFxkXFwuXSopLy5leGVjKGEpO2lmKGImJmJbMV0pcmV0dXJuIGJbMV07Yj1cIlwiO3ZhciBjPS9NU0lFICsoW1xcZFxcLl0rKS8uZXhlYyhhKTtpZihjJiZjWzFdKWlmKGE9L1RyaWRlbnRcXC8oXFxkLlxcZCkvLmV4ZWMoYSksXCI3LjBcIj09Y1sxXSlpZihhJiZhWzFdKXN3aXRjaChhWzFdKXtjYXNlIFwiNC4wXCI6Yj1cIjguMFwiO2JyZWFrO2Nhc2UgXCI1LjBcIjpiPVwiOS4wXCI7YnJlYWs7Y2FzZSBcIjYuMFwiOmI9XCIxMC4wXCI7YnJlYWs7Y2FzZSBcIjcuMFwiOmI9XCIxMS4wXCJ9ZWxzZSBiPVwiNy4wXCI7ZWxzZSBiPWNbMV07cmV0dXJuIGJ9O2dvb2cuaHRtbC5TYWZlSHRtbD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfPVwiXCI7dGhpcy5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV87dGhpcy5kaXJfPW51bGx9O2dvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwO2dvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyX307Z29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO2dvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfTtcbmdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlSHRtbHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXytcIn1cIn0pO2dvb2cuaHRtbC5TYWZlSHRtbC51bndyYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChhKS50b1N0cmluZygpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sJiZhLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVIdG1sJiZhLlNBRkVfSFRNTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfKXJldHVybiBhLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXztnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVIdG1sLCBnb3QgJ1wiK2ErXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoYSkpO3JldHVyblwidHlwZV9lcnJvcjpTYWZlSHRtbFwifTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWwpcmV0dXJuIGE7dmFyIGI9XCJvYmplY3RcIj09dHlwZW9mIGEsYz1udWxsO2ImJmEuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nJiYoYz1hLmdldERpcmVjdGlvbigpKTthPWImJmEuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9hLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoYSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoYSksYyl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGVQcmVzZXJ2aW5nTmV3bGluZXM9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbClyZXR1cm4gYTthPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGEpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccihnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGEpKSxhLmdldERpcmVjdGlvbigpKX07XG5nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZVByZXNlcnZpbmdOZXdsaW5lc0FuZFNwYWNlcz1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sKXJldHVybiBhO2E9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoYSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLndoaXRlc3BhY2VFc2NhcGUoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChhKSksYS5nZXREaXJlY3Rpb24oKSl9O2dvb2cuaHRtbC5TYWZlSHRtbC5mcm9tPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlO2dvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfPS9eW2EtekEtWjAtOS1dKyQvO1xuZ29vZy5odG1sLlNhZmVIdG1sLlVSTF9BVFRSSUJVVEVTXz17YWN0aW9uOiEwLGNpdGU6ITAsZGF0YTohMCxmb3JtYWN0aW9uOiEwLGhyZWY6ITAsbWFuaWZlc3Q6ITAscG9zdGVyOiEwLHNyYzohMH07Z29vZy5odG1sLlNhZmVIdG1sLk5PVF9BTExPV0VEX1RBR19OQU1FU189e0FQUExFVDohMCxCQVNFOiEwLEVNQkVEOiEwLElGUkFNRTohMCxMSU5LOiEwLE1BVEg6ITAsTUVUQTohMCxPQkpFQ1Q6ITAsU0NSSVBUOiEwLFNUWUxFOiEwLFNWRzohMCxURU1QTEFURTohMH07Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZT1mdW5jdGlvbihhLGIsYyl7Z29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWUoU3RyaW5nKGEpKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoU3RyaW5nKGEpLGIsYyl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWU9ZnVuY3Rpb24oYSl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QoYSkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRhZyBuYW1lIDxcIithK1wiPi5cIik7aWYoYS50b1VwcGVyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLk5PVF9BTExPV0VEX1RBR19OQU1FU18pdGhyb3cgRXJyb3IoXCJUYWcgbmFtZSA8XCIrYStcIj4gaXMgbm90IGFsbG93ZWQgZm9yIFNhZmVIdG1sLlwiKTt9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZUlmcmFtZT1mdW5jdGlvbihhLGIsYyxkKXthJiZnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChhKTt2YXIgZT17fTtlLnNyYz1hfHxudWxsO2Uuc3JjZG9jPWImJmdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoYik7YT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMoZSx7c2FuZGJveDpcIlwifSxjKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJpZnJhbWVcIixhLGQpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYW5kYm94SWZyYW1lPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZSgpKXRocm93IEVycm9yKFwiVGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzYW5kYm94ZWQgaWZyYW1lcy5cIik7dmFyIGU9e307ZS5zcmM9YT9nb29nLmh0bWwuU2FmZVVybC51bndyYXAoZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoYSkpOm51bGw7ZS5zcmNkb2M9Ynx8bnVsbDtlLnNhbmRib3g9XCJcIjthPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyhlLHt9LGMpO3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGEsZCl9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNhblVzZVNhbmRib3hJZnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5nbG9iYWwuSFRNTElGcmFtZUVsZW1lbnQmJlwic2FuZGJveFwiaW4gZ29vZy5nbG9iYWwuSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlfTtnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2NyaXB0U3JjPWZ1bmN0aW9uKGEsYil7Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoYSk7YT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMoe3NyYzphfSx7fSxiKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzY3JpcHRcIixhKX07XG5nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIGIpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtpZihcImxhbmd1YWdlXCI9PWR8fFwic3JjXCI9PWR8fFwidGV4dFwiPT1kfHxcInR5cGVcIj09ZCl0aHJvdyBFcnJvcignQ2Fubm90IHNldCBcIicrZCsnXCIgYXR0cmlidXRlJyk7fWM9XCJcIjthPWdvb2cuYXJyYXkuY29uY2F0KGEpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspYys9Z29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwKGFbZF0pO2E9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic2NyaXB0XCIsYixhKX07XG5nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU3R5bGU9ZnVuY3Rpb24oYSxiKXtiPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7dHlwZTpcInRleHQvY3NzXCJ9LHt9LGIpO3ZhciBjPVwiXCI7YT1nb29nLmFycmF5LmNvbmNhdChhKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyljKz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQudW53cmFwKGFbZF0pO2E9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic3R5bGVcIixiLGEpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVNZXRhUmVmcmVzaD1mdW5jdGlvbihhLGIpe2E9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplKGEpKTsoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzSUUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZSgpKSYmZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoYSxcIjtcIikmJihhPVwiJ1wiK2EucmVwbGFjZSgvJy9nLFwiJTI3XCIpK1wiJ1wiKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJtZXRhXCIse1wiaHR0cC1lcXVpdlwiOlwicmVmcmVzaFwiLGNvbnRlbnQ6KGJ8fDApK1wiOyB1cmw9XCIrYX0pfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5nZXRBdHRyTmFtZUFuZFZhbHVlXz1mdW5jdGlvbihhLGIsYyl7aWYoYyBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0KWM9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGMpO2Vsc2UgaWYoXCJzdHlsZVwiPT1iLnRvTG93ZXJDYXNlKCkpYz1nb29nLmh0bWwuU2FmZUh0bWwuZ2V0U3R5bGVWYWx1ZV8oYyk7ZWxzZXtpZigvXm9uL2kudGVzdChiKSl0aHJvdyBFcnJvcignQXR0cmlidXRlIFwiJytiKydcIiByZXF1aXJlcyBnb29nLnN0cmluZy5Db25zdCB2YWx1ZSwgXCInK2MrJ1wiIGdpdmVuLicpO2lmKGIudG9Mb3dlckNhc2UoKWluIGdvb2cuaHRtbC5TYWZlSHRtbC5VUkxfQVRUUklCVVRFU18paWYoYyBpbnN0YW5jZW9mIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwpYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChjKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCljPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChjKTtcbmVsc2UgaWYoZ29vZy5pc1N0cmluZyhjKSljPWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplKGMpLmdldFR5cGVkU3RyaW5nVmFsdWUoKTtlbHNlIHRocm93IEVycm9yKCdBdHRyaWJ1dGUgXCInK2IrJ1wiIG9uIHRhZyBcIicrYSsnXCIgcmVxdWlyZXMgZ29vZy5odG1sLlNhZmVVcmwsIGdvb2cuc3RyaW5nLkNvbnN0LCBvciBzdHJpbmcsIHZhbHVlIFwiJytjKydcIiBnaXZlbi4nKTt9Yy5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nJiYoYz1jLmdldFR5cGVkU3RyaW5nVmFsdWUoKSk7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzU3RyaW5nKGMpfHxnb29nLmlzTnVtYmVyKGMpLFwiU3RyaW5nIG9yIG51bWJlciB2YWx1ZSBleHBlY3RlZCwgZ290IFwiK3R5cGVvZiBjK1wiIHdpdGggdmFsdWU6IFwiK2MpO3JldHVybiBiKyc9XCInK2dvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoU3RyaW5nKGMpKSsnXCInfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXz1mdW5jdGlvbihhKXtpZighZ29vZy5pc09iamVjdChhKSl0aHJvdyBFcnJvcignVGhlIFwic3R5bGVcIiBhdHRyaWJ1dGUgcmVxdWlyZXMgZ29vZy5odG1sLlNhZmVTdHlsZSBvciBtYXAgb2Ygc3R5bGUgcHJvcGVydGllcywgJyt0eXBlb2YgYStcIiBnaXZlbjogXCIrYSk7YSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGV8fChhPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlKGEpKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS51bndyYXAoYSl9O2dvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVXaXRoRGlyPWZ1bmN0aW9uKGEsYixjLGQpe2I9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZShiLGMsZCk7Yi5kaXJfPWE7cmV0dXJuIGJ9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmpvaW49ZnVuY3Rpb24oYSxiKXthPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGEpO3ZhciBjPWEuZ2V0RGlyZWN0aW9uKCksZD1bXSxlPWZ1bmN0aW9uKGEpe2dvb2cuaXNBcnJheShhKT9nb29nLmFycmF5LmZvckVhY2goYSxlKTooYT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShhKSxkLnB1c2goZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChhKSksYT1hLmdldERpcmVjdGlvbigpLGM9PWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMP2M9YTphIT1nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCYmYyE9YSYmKGM9bnVsbCkpfTtnb29nLmFycmF5LmZvckVhY2goYixlKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZC5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoYSkpLGMpfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKX07Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdFdpdGhEaXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKTtjLmRpcl89YTtyZXR1cm4gY307Z29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fTtnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihhLGIpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVIdG1sKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGEsYil9O1xuZ29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGEsYil7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlSFRNTChhKTphO3RoaXMuZGlyXz1iO3JldHVybiB0aGlzfTtcbmdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1udWxsO3ZhciBlPVwiPFwiK2ErZ29vZy5odG1sLlNhZmVIdG1sLnN0cmluZ2lmeUF0dHJpYnV0ZXMoYSxiKTtnb29nLmlzRGVmQW5kTm90TnVsbChjKT9nb29nLmlzQXJyYXkoYyl8fChjPVtjXSk6Yz1bXTtnb29nLmRvbS50YWdzLmlzVm9pZFRhZyhhLnRvTG93ZXJDYXNlKCkpPyhnb29nLmFzc2VydHMuYXNzZXJ0KCFjLmxlbmd0aCxcIlZvaWQgdGFnIDxcIithK1wiPiBkb2VzIG5vdCBhbGxvdyBjb250ZW50LlwiKSxlKz1cIj5cIik6KGQ9Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdChjKSxlKz1cIj5cIitnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGQpK1wiPC9cIithK1wiPlwiLGQ9ZC5nZXREaXJlY3Rpb24oKSk7KGE9YiYmYi5kaXIpJiYoZD0vXihsdHJ8cnRsfGF1dG8pJC9pLnRlc3QoYSk/Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6XG5udWxsKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSxkKX07Z29vZy5odG1sLlNhZmVIdG1sLnN0cmluZ2lmeUF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1cIlwiO2lmKGIpZm9yKHZhciBkIGluIGIpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuVkFMSURfTkFNRVNfSU5fVEFHXy50ZXN0KGQpKXRocm93IEVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lIFwiJytkKydcIi4nKTt2YXIgZT1iW2RdO2dvb2cuaXNEZWZBbmROb3ROdWxsKGUpJiYoYys9XCIgXCIrZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfKGEsZCxlKSl9cmV0dXJuIGN9O1xuZ29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlO2ZvcihlIGluIGEpZ29vZy5hc3NlcnRzLmFzc2VydChlLnRvTG93ZXJDYXNlKCk9PWUsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksZFtlXT1hW2VdO2ZvcihlIGluIGIpZ29vZy5hc3NlcnRzLmFzc2VydChlLnRvTG93ZXJDYXNlKCk9PWUsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksZFtlXT1iW2VdO2ZvcihlIGluIGMpe3ZhciBmPWUudG9Mb3dlckNhc2UoKTtpZihmIGluIGEpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBvdmVycmlkZSBcIicrZisnXCIgYXR0cmlidXRlLCBnb3QgXCInK2UrJ1wiIHdpdGggdmFsdWUgXCInK2NbZV0rJ1wiJyk7ZiBpbiBiJiZkZWxldGUgZFtmXTtkW2VdPWNbZV19cmV0dXJuIGR9O1xuZ29vZy5odG1sLlNhZmVIdG1sLkRPQ1RZUEVfSFRNTD1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIjwhRE9DVFlQRSBodG1sPlwiLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKTtnb29nLmh0bWwuU2FmZUh0bWwuRU1QVFk9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIixnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCk7Z29vZy5odG1sLlNhZmVIdG1sLkJSPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiPGJyPlwiLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKTtnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnM9e307Z29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVIdG1sRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChhKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYixjfHxudWxsKX07XG5nb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVNjcmlwdEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O1xuZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZUZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtcbmdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU3R5bGVTaGVldEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShiKX07XG5nb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoYil9O1xuZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnRydXN0ZWRSZXNvdXJjZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGEpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIik7Z29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoYSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpO3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGIpfTtnb29nLmRvbS5zYWZlPXt9O2dvb2cuZG9tLnNhZmUuSW5zZXJ0QWRqYWNlbnRIdG1sUG9zaXRpb249e0FGVEVSQkVHSU46XCJhZnRlcmJlZ2luXCIsQUZURVJFTkQ6XCJhZnRlcmVuZFwiLEJFRk9SRUJFR0lOOlwiYmVmb3JlYmVnaW5cIixCRUZPUkVFTkQ6XCJiZWZvcmVlbmRcIn07Z29vZy5kb20uc2FmZS5pbnNlcnRBZGphY2VudEh0bWw9ZnVuY3Rpb24oYSxiLGMpe2EuaW5zZXJ0QWRqYWNlbnRIVE1MKGIsZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGMpKX07Z29vZy5kb20uc2FmZS5TRVRfSU5ORVJfSFRNTF9ESVNBTExPV0VEX1RBR1NfPXtNQVRIOiEwLFNDUklQVDohMCxTVFlMRTohMCxTVkc6ITAsVEVNUExBVEU6ITB9O1xuZ29vZy5kb20uc2FmZS5pc0lubmVySHRtbENsZWFudXBSZWN1cnNpdmVfPWdvb2cuZnVuY3Rpb25zLmNhY2hlUmV0dXJuVmFsdWUoZnVuY3Rpb24oKXtpZihnb29nLkRFQlVHJiZcInVuZGVmaW5lZFwiPT09dHlwZW9mIGRvY3VtZW50KXJldHVybiExO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7YS5hcHBlbmRDaGlsZChiKTtpZihnb29nLkRFQlVHJiYhYS5maXJzdENoaWxkKXJldHVybiExO2I9YS5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7YS5pbm5lckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWSk7cmV0dXJuIWIucGFyZW50RWxlbWVudH0pO1xuZ29vZy5kb20uc2FmZS51bnNhZmVTZXRJbm5lckh0bWxEb05vdFVzZU9yRWxzZT1mdW5jdGlvbihhLGIpe2lmKGdvb2cuZG9tLnNhZmUuaXNJbm5lckh0bWxDbGVhbnVwUmVjdXJzaXZlXygpKWZvcig7YS5sYXN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpO2EuaW5uZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChiKX07XG5nb29nLmRvbS5zYWZlLnNldElubmVySHRtbD1mdW5jdGlvbihhLGIpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIGM9YS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7aWYoZ29vZy5kb20uc2FmZS5TRVRfSU5ORVJfSFRNTF9ESVNBTExPV0VEX1RBR1NfW2NdKXRocm93IEVycm9yKFwiZ29vZy5kb20uc2FmZS5zZXRJbm5lckh0bWwgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGNvbnRlbnQgb2YgXCIrYS50YWdOYW1lK1wiLlwiKTt9Z29vZy5kb20uc2FmZS51bnNhZmVTZXRJbm5lckh0bWxEb05vdFVzZU9yRWxzZShhLGIpfTtnb29nLmRvbS5zYWZlLnNldE91dGVySHRtbD1mdW5jdGlvbihhLGIpe2Eub3V0ZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChiKX07XG5nb29nLmRvbS5zYWZlLnNldEZvcm1FbGVtZW50QWN0aW9uPWZ1bmN0aW9uKGEsYil7Yj1iIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/Yjpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiKTtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZvcm1FbGVtZW50KGEpLmFjdGlvbj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldEJ1dHRvbkZvcm1BY3Rpb249ZnVuY3Rpb24oYSxiKXtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQnV0dG9uRWxlbWVudChhKS5mb3JtQWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O1xuZ29vZy5kb20uc2FmZS5zZXRJbnB1dEZvcm1BY3Rpb249ZnVuY3Rpb24oYSxiKXtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW5wdXRFbGVtZW50KGEpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07Z29vZy5kb20uc2FmZS5zZXRTdHlsZT1mdW5jdGlvbihhLGIpe2Euc3R5bGUuY3NzVGV4dD1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChiKX07Z29vZy5kb20uc2FmZS5kb2N1bWVudFdyaXRlPWZ1bmN0aW9uKGEsYil7YS53cml0ZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoYikpfTtcbmdvb2cuZG9tLnNhZmUuc2V0QW5jaG9ySHJlZj1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQW5jaG9yRWxlbWVudChhKTtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2EuaHJlZj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldEltYWdlU3JjPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbWFnZUVsZW1lbnQoYSk7aWYoIShiIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpKXt2YXIgYz0vXmRhdGE6aW1hZ2VcXC8vaS50ZXN0KGIpO2I9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYixjKX1hLnNyYz1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0QXVkaW9TcmM9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEF1ZGlvRWxlbWVudChhKTtpZighKGIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBjPS9eZGF0YTphdWRpb1xcLy9pLnRlc3QoYik7Yj1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiLGMpfWEuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O2dvb2cuZG9tLnNhZmUuc2V0VmlkZW9TcmM9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFZpZGVvRWxlbWVudChhKTtpZighKGIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybCkpe3ZhciBjPS9eZGF0YTp2aWRlb1xcLy9pLnRlc3QoYik7Yj1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiLGMpfWEuc3JjPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O1xuZ29vZy5kb20uc2FmZS5zZXRFbWJlZFNyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50KGEpO2Euc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTChiKX07Z29vZy5kb20uc2FmZS5zZXRGcmFtZVNyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50KGEpO2Euc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTChiKX07Z29vZy5kb20uc2FmZS5zZXRJZnJhbWVTcmM9ZnVuY3Rpb24oYSxiKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQoYSk7YS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0SWZyYW1lU3JjZG9jPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50KGEpO2Euc3JjZG9jPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChiKX07XG5nb29nLmRvbS5zYWZlLnNldExpbmtIcmVmQW5kUmVsPWZ1bmN0aW9uKGEsYixjKXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTExpbmtFbGVtZW50KGEpO2EucmVsPWM7Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMoYyxcInN0eWxlc2hlZXRcIik/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoYiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwsJ1VSTCBtdXN0IGJlIFRydXN0ZWRSZXNvdXJjZVVybCBiZWNhdXNlIFwicmVsXCIgY29udGFpbnMgXCJzdHlsZXNoZWV0XCInKSxhLmhyZWY9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKGIpKTphLmhyZWY9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw/Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKGIpOmIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpOlxuZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZChiKSl9O2dvb2cuZG9tLnNhZmUuc2V0T2JqZWN0RGF0YT1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MT2JqZWN0RWxlbWVudChhKTthLmRhdGE9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKGIpfTtnb29nLmRvbS5zYWZlLnNldFNjcmlwdFNyYz1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudChhKTthLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwoYik7KGI9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmYS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGIpfTtcbmdvb2cuZG9tLnNhZmUuc2V0U2NyaXB0Q29udGVudD1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudChhKTthLnRleHQ9Z29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdChiKTsoYj1nb29nLmdldFNjcmlwdE5vbmNlKCkpJiZhLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsYil9O2dvb2cuZG9tLnNhZmUuc2V0TG9jYXRpb25IcmVmPWZ1bmN0aW9uKGEsYil7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGEpO2I9YiBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2I6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYik7YS5ocmVmPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYil9O1xuZ29vZy5kb20uc2FmZS5hc3NpZ25Mb2NhdGlvbj1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihhKTtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2EuYXNzaWduKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYikpfTtnb29nLmRvbS5zYWZlLnJlcGxhY2VMb2NhdGlvbj1mdW5jdGlvbihhLGIpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihhKTtiPWIgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9iOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGIpO2EucmVwbGFjZShnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGIpKX07XG5nb29nLmRvbS5zYWZlLm9wZW5JbldpbmRvdz1mdW5jdGlvbihhLGIsYyxkLGUpe2E9YSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2E6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoYSk7cmV0dXJuKGJ8fGdvb2cuZ2xvYmFsKS5vcGVuKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoYSksYz9nb29nLnN0cmluZy5Db25zdC51bndyYXAoYyk6XCJcIixkLGUpfTtnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZ0h0bWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmcoYSxiLFwidGV4dC9odG1sXCIpfTtnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEucGFyc2VGcm9tU3RyaW5nKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChiKSxjKX07XG5nb29nLmRvbS5zYWZlLmNyZWF0ZUltYWdlRnJvbUJsb2I9ZnVuY3Rpb24oYSl7aWYoIS9eaW1hZ2VcXC8uKi9nLnRlc3QoYS50eXBlKSl0aHJvdyBFcnJvcihcImdvb2cuZG9tLnNhZmUuY3JlYXRlSW1hZ2VGcm9tQmxvYiBvbmx5IGFjY2VwdHMgTUlNRSB0eXBlIGltYWdlLy4qLlwiKTt2YXIgYj1nb29nLmdsb2JhbC5VUkwuY3JlYXRlT2JqZWN0VVJMKGEpO2E9bmV3IGdvb2cuZ2xvYmFsLkltYWdlO2Eub25sb2FkPWZ1bmN0aW9uKCl7Z29vZy5nbG9iYWwuVVJMLnJldm9rZU9iamVjdFVSTChiKX07Z29vZy5kb20uc2FmZS5zZXRJbWFnZVNyYyhhLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0KGdvb2cuc3RyaW5nLkNvbnN0LmZyb20oXCJJbWFnZSBibG9iIFVSTC5cIiksYikpO3JldHVybiBhfTtnb29nLnN0cmluZy5ERVRFQ1RfRE9VQkxFX0VTQ0FQSU5HPSExO2dvb2cuc3RyaW5nLkZPUkNFX05PTl9ET01fSFRNTF9VTkVTQ0FQSU5HPSExO2dvb2cuc3RyaW5nLlVuaWNvZGU9e05CU1A6XCJcXHUwMGEwXCJ9O2dvb2cuc3RyaW5nLnN0YXJ0c1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuc3RhcnRzV2l0aDtnb29nLnN0cmluZy5lbmRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aDtnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg7Z29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg7Z29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlRXF1YWxzPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVxdWFscztcbmdvb2cuc3RyaW5nLnN1YnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5zcGxpdChcIiVzXCIpLGQ9XCJcIixlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtlLmxlbmd0aCYmMTxjLmxlbmd0aDspZCs9Yy5zaGlmdCgpK2Uuc2hpZnQoKTtyZXR1cm4gZCtjLmpvaW4oXCIlc1wiKX07Z29vZy5zdHJpbmcuY29sbGFwc2VXaGl0ZXNwYWNlPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1tcXHNcXHhhMF0rL2csXCIgXCIpLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9O2dvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2U9Z29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZTtnb29nLnN0cmluZy5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmxlbmd0aH07Z29vZy5zdHJpbmcuaXNFbXB0eT1nb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlO2dvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2VTYWZlPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLm1ha2VTYWZlKGEpKX07XG5nb29nLnN0cmluZy5pc0VtcHR5U2FmZT1nb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlU2FmZTtnb29nLnN0cmluZy5pc0JyZWFraW5nV2hpdGVzcGFjZT1mdW5jdGlvbihhKXtyZXR1cm4hL1teXFx0XFxuXFxyIF0vLnRlc3QoYSl9O2dvb2cuc3RyaW5nLmlzQWxwaGE9ZnVuY3Rpb24oYSl7cmV0dXJuIS9bXmEtekEtWl0vLnRlc3QoYSl9O2dvb2cuc3RyaW5nLmlzTnVtZXJpYz1mdW5jdGlvbihhKXtyZXR1cm4hL1teMC05XS8udGVzdChhKX07Z29vZy5zdHJpbmcuaXNBbHBoYU51bWVyaWM9ZnVuY3Rpb24oYSl7cmV0dXJuIS9bXmEtekEtWjAtOV0vLnRlc3QoYSl9O2dvb2cuc3RyaW5nLmlzU3BhY2U9ZnVuY3Rpb24oYSl7cmV0dXJuXCIgXCI9PWF9O2dvb2cuc3RyaW5nLmlzVW5pY29kZUNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PWEubGVuZ3RoJiZcIiBcIjw9YSYmXCJ+XCI+PWF8fFwiXFx1MDA4MFwiPD1hJiZcIlxcdWZmZmRcIj49YX07XG5nb29nLnN0cmluZy5zdHJpcE5ld2xpbmVzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikrL2csXCIgXCIpfTtnb29nLnN0cmluZy5jYW5vbmljYWxpemVOZXdsaW5lcz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csXCJcXG5cIil9O2dvb2cuc3RyaW5nLm5vcm1hbGl6ZVdoaXRlc3BhY2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXFx4YTB8XFxzL2csXCIgXCIpfTtnb29nLnN0cmluZy5ub3JtYWxpemVTcGFjZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXFx4YTB8WyBcXHRdKy9nLFwiIFwiKX07Z29vZy5zdHJpbmcuY29sbGFwc2VCcmVha2luZ1NwYWNlcz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bXFx0XFxyXFxuIF0rL2csXCIgXCIpLnJlcGxhY2UoL15bXFx0XFxyXFxuIF0rfFtcXHRcXHJcXG4gXSskL2csXCJcIil9O2dvb2cuc3RyaW5nLnRyaW09Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbTtcbmdvb2cuc3RyaW5nLnRyaW1MZWZ0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL15bXFxzXFx4YTBdKy8sXCJcIil9O2dvb2cuc3RyaW5nLnRyaW1SaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bXFxzXFx4YTBdKyQvLFwiXCIpfTtnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU7XG5nb29nLnN0cmluZy5udW1iZXJBd2FyZUNvbXBhcmVfPWZ1bmN0aW9uKGEsYixjKXtpZihhPT1iKXJldHVybiAwO2lmKCFhKXJldHVybi0xO2lmKCFiKXJldHVybiAxO2Zvcih2YXIgZD1hLnRvTG93ZXJDYXNlKCkubWF0Y2goYyksZT1iLnRvTG93ZXJDYXNlKCkubWF0Y2goYyksZj1NYXRoLm1pbihkLmxlbmd0aCxlLmxlbmd0aCksZz0wO2c8ZjtnKyspe2M9ZFtnXTt2YXIgaD1lW2ddO2lmKGMhPWgpcmV0dXJuIGE9cGFyc2VJbnQoYywxMCksIWlzTmFOKGEpJiYoYj1wYXJzZUludChoLDEwKSwhaXNOYU4oYikmJmEtYik/YS1iOmM8aD8tMToxfXJldHVybiBkLmxlbmd0aCE9ZS5sZW5ndGg/ZC5sZW5ndGgtZS5sZW5ndGg6YTxiPy0xOjF9O2dvb2cuc3RyaW5nLmludEF3YXJlQ29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLnN0cmluZy5udW1iZXJBd2FyZUNvbXBhcmVfKGEsYiwvXFxkK3xcXEQrL2cpfTtcbmdvb2cuc3RyaW5nLmZsb2F0QXdhcmVDb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLm51bWJlckF3YXJlQ29tcGFyZV8oYSxiLC9cXGQrfFxcLlxcZCt8XFxEKy9nKX07Z29vZy5zdHJpbmcubnVtZXJhdGVDb21wYXJlPWdvb2cuc3RyaW5nLmZsb2F0QXdhcmVDb21wYXJlO2dvb2cuc3RyaW5nLnVybEVuY29kZT1mdW5jdGlvbihhKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhhKSl9O2dvb2cuc3RyaW5nLnVybERlY29kZT1mdW5jdGlvbihhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGEucmVwbGFjZSgvXFwrL2csXCIgXCIpKX07Z29vZy5zdHJpbmcubmV3TGluZVRvQnI9Z29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnI7XG5nb29nLnN0cmluZy5odG1sRXNjYXBlPWZ1bmN0aW9uKGEsYil7YT1nb29nLnN0cmluZy5pbnRlcm5hbC5odG1sRXNjYXBlKGEsYik7Z29vZy5zdHJpbmcuREVURUNUX0RPVUJMRV9FU0NBUElORyYmKGE9YS5yZXBsYWNlKGdvb2cuc3RyaW5nLkVfUkVfLFwiJiMxMDE7XCIpKTtyZXR1cm4gYX07Z29vZy5zdHJpbmcuRV9SRV89L2UvZztnb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzPWZ1bmN0aW9uKGEpe3JldHVybiBnb29nLnN0cmluZy5jb250YWlucyhhLFwiJlwiKT8hZ29vZy5zdHJpbmcuRk9SQ0VfTk9OX0RPTV9IVE1MX1VORVNDQVBJTkcmJlwiZG9jdW1lbnRcImluIGdvb2cuZ2xvYmFsP2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV8oYSk6Z29vZy5zdHJpbmcudW5lc2NhcGVQdXJlWG1sRW50aXRpZXNfKGEpOmF9O1xuZ29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1dpdGhEb2N1bWVudD1mdW5jdGlvbihhLGIpe3JldHVybiBnb29nLnN0cmluZy5jb250YWlucyhhLFwiJlwiKT9nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzVXNpbmdEb21fKGEsYik6YX07XG5nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzVXNpbmdEb21fPWZ1bmN0aW9uKGEsYil7dmFyIGM9e1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIid9O3ZhciBkPWI/Yi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOmdvb2cuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGEucmVwbGFjZShnb29nLnN0cmluZy5IVE1MX0VOVElUWV9QQVRURVJOXyxmdW5jdGlvbihhLGIpe3ZhciBlPWNbYV07aWYoZSlyZXR1cm4gZTtcIiNcIj09Yi5jaGFyQXQoMCkmJihiPU51bWJlcihcIjBcIitiLnN1YnN0cigxKSksaXNOYU4oYil8fChlPVN0cmluZy5mcm9tQ2hhckNvZGUoYikpKTtlfHwoZ29vZy5kb20uc2FmZS5zZXRJbm5lckh0bWwoZCxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZUh0bWxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3QoZ29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIlNpbmdsZSBIVE1MIGVudGl0eS5cIiksXG5hK1wiIFwiKSksZT1kLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnNsaWNlKDAsLTEpKTtyZXR1cm4gY1thXT1lfSl9O2dvb2cuc3RyaW5nLnVuZXNjYXBlUHVyZVhtbEVudGl0aWVzXz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC8mKFteO10rKTsvZyxmdW5jdGlvbihhLGMpe3N3aXRjaChjKXtjYXNlIFwiYW1wXCI6cmV0dXJuXCImXCI7Y2FzZSBcImx0XCI6cmV0dXJuXCI8XCI7Y2FzZSBcImd0XCI6cmV0dXJuXCI+XCI7Y2FzZSBcInF1b3RcIjpyZXR1cm4nXCInO2RlZmF1bHQ6cmV0dXJuXCIjXCIhPWMuY2hhckF0KDApfHwoYz1OdW1iZXIoXCIwXCIrYy5zdWJzdHIoMSkpLGlzTmFOKGMpKT9hOlN0cmluZy5mcm9tQ2hhckNvZGUoYyl9fSl9O2dvb2cuc3RyaW5nLkhUTUxfRU5USVRZX1BBVFRFUk5fPS8mKFteO1xcczwmXSspOz8vZztnb29nLnN0cmluZy53aGl0ZXNwYWNlRXNjYXBlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLm5ld0xpbmVUb0JyKGEucmVwbGFjZSgvICAvZyxcIiAmIzE2MDtcIiksYil9O1xuZ29vZy5zdHJpbmcucHJlc2VydmVTcGFjZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvKF58W1xcbiBdKSAvZyxcIiQxXCIrZ29vZy5zdHJpbmcuVW5pY29kZS5OQlNQKX07Z29vZy5zdHJpbmcuc3RyaXBRdW90ZXM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBlPTE9PWM/YjpiLmNoYXJBdChkKTtpZihhLmNoYXJBdCgwKT09ZSYmYS5jaGFyQXQoYS5sZW5ndGgtMSk9PWUpcmV0dXJuIGEuc3Vic3RyaW5nKDEsYS5sZW5ndGgtMSl9cmV0dXJuIGF9O2dvb2cuc3RyaW5nLnRydW5jYXRlPWZ1bmN0aW9uKGEsYixjKXtjJiYoYT1nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzKGEpKTthLmxlbmd0aD5iJiYoYT1hLnN1YnN0cmluZygwLGItMykrXCIuLi5cIik7YyYmKGE9Z29vZy5zdHJpbmcuaHRtbEVzY2FwZShhKSk7cmV0dXJuIGF9O1xuZ29vZy5zdHJpbmcudHJ1bmNhdGVNaWRkbGU9ZnVuY3Rpb24oYSxiLGMsZCl7YyYmKGE9Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllcyhhKSk7aWYoZCYmYS5sZW5ndGg+Yil7ZD5iJiYoZD1iKTt2YXIgZT1hLmxlbmd0aC1kO2E9YS5zdWJzdHJpbmcoMCxiLWQpK1wiLi4uXCIrYS5zdWJzdHJpbmcoZSl9ZWxzZSBhLmxlbmd0aD5iJiYoZD1NYXRoLmZsb29yKGIvMiksZT1hLmxlbmd0aC1kLGE9YS5zdWJzdHJpbmcoMCxkK2IlMikrXCIuLi5cIithLnN1YnN0cmluZyhlKSk7YyYmKGE9Z29vZy5zdHJpbmcuaHRtbEVzY2FwZShhKSk7cmV0dXJuIGF9O2dvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc189e1wiXFx4MDBcIjpcIlxcXFwwXCIsXCJcXGJcIjpcIlxcXFxiXCIsXCJcXGZcIjpcIlxcXFxmXCIsXCJcXG5cIjpcIlxcXFxuXCIsXCJcXHJcIjpcIlxcXFxyXCIsXCJcXHRcIjpcIlxcXFx0XCIsXCJcXHgwQlwiOlwiXFxcXHgwQlwiLCdcIic6J1xcXFxcIicsXCJcXFxcXCI6XCJcXFxcXFxcXFwiLFwiPFwiOlwiXFxcXHUwMDNDXCJ9O2dvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfPXtcIidcIjpcIlxcXFwnXCJ9O1xuZ29vZy5zdHJpbmcucXVvdGU9ZnVuY3Rpb24oYSl7YT1TdHJpbmcoYSk7Zm9yKHZhciBiPVsnXCInXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWEuY2hhckF0KGMpLGU9ZC5jaGFyQ29kZUF0KDApO2JbYysxXT1nb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfW2RdfHwoMzE8ZSYmMTI3PmU/ZDpnb29nLnN0cmluZy5lc2NhcGVDaGFyKGQpKX1iLnB1c2goJ1wiJyk7cmV0dXJuIGIuam9pbihcIlwiKX07Z29vZy5zdHJpbmcuZXNjYXBlU3RyaW5nPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYltjXT1nb29nLnN0cmluZy5lc2NhcGVDaGFyKGEuY2hhckF0KGMpKTtyZXR1cm4gYi5qb2luKFwiXCIpfTtcbmdvb2cuc3RyaW5nLmVzY2FwZUNoYXI9ZnVuY3Rpb24oYSl7aWYoYSBpbiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlXylyZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bYV07aWYoYSBpbiBnb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfKXJldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1thXT1nb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfW2FdO3ZhciBiPWEuY2hhckNvZGVBdCgwKTtpZigzMTxiJiYxMjc+Yil2YXIgYz1hO2Vsc2V7aWYoMjU2PmIpe2lmKGM9XCJcXFxceFwiLDE2PmJ8fDI1NjxiKWMrPVwiMFwifWVsc2UgYz1cIlxcXFx1XCIsNDA5Nj5iJiYoYys9XCIwXCIpO2MrPWIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9cmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2FdPWN9O2dvb2cuc3RyaW5nLmNvbnRhaW5zPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zO2dvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zO1xuZ29vZy5zdHJpbmcuY291bnRPZj1mdW5jdGlvbihhLGIpe3JldHVybiBhJiZiP2Euc3BsaXQoYikubGVuZ3RoLTE6MH07Z29vZy5zdHJpbmcucmVtb3ZlQXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWE7MDw9YiYmYjxhLmxlbmd0aCYmMDxjJiYoZD1hLnN1YnN0cigwLGIpK2Euc3Vic3RyKGIrYyxhLmxlbmd0aC1iLWMpKTtyZXR1cm4gZH07Z29vZy5zdHJpbmcucmVtb3ZlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucmVwbGFjZShiLFwiXCIpfTtnb29nLnN0cmluZy5yZW1vdmVBbGw9ZnVuY3Rpb24oYSxiKXtiPW5ldyBSZWdFeHAoZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKGIpLFwiZ1wiKTtyZXR1cm4gYS5yZXBsYWNlKGIsXCJcIil9O2dvb2cuc3RyaW5nLnJlcGxhY2VBbGw9ZnVuY3Rpb24oYSxiLGMpe2I9bmV3IFJlZ0V4cChnb29nLnN0cmluZy5yZWdFeHBFc2NhcGUoYiksXCJnXCIpO3JldHVybiBhLnJlcGxhY2UoYixjLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKSl9O1xuZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlPWZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSkucmVwbGFjZSgvKFstKClcXFtcXF17fSs/Ki4kXFxefCw6IzwhXFxcXF0pL2csXCJcXFxcJDFcIikucmVwbGFjZSgvXFx4MDgvZyxcIlxcXFx4MDhcIil9O2dvb2cuc3RyaW5nLnJlcGVhdD1TdHJpbmcucHJvdG90eXBlLnJlcGVhdD9mdW5jdGlvbihhLGIpe3JldHVybiBhLnJlcGVhdChiKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkoYisxKS5qb2luKGEpfTtnb29nLnN0cmluZy5wYWROdW1iZXI9ZnVuY3Rpb24oYSxiLGMpe2E9Z29vZy5pc0RlZihjKT9hLnRvRml4ZWQoYyk6U3RyaW5nKGEpO2M9YS5pbmRleE9mKFwiLlwiKTstMT09YyYmKGM9YS5sZW5ndGgpO3JldHVybiBnb29nLnN0cmluZy5yZXBlYXQoXCIwXCIsTWF0aC5tYXgoMCxiLWMpKSthfTtnb29nLnN0cmluZy5tYWtlU2FmZT1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9cIlwiOlN0cmluZyhhKX07XG5nb29nLnN0cmluZy5idWlsZFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsXCJcIil9O2dvb2cuc3RyaW5nLmdldFJhbmRvbVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKDIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpK01hdGguYWJzKE1hdGguZmxvb3IoMjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpKV5nb29nLm5vdygpKS50b1N0cmluZygzNil9O2dvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnM7Z29vZy5zdHJpbmcuaGFzaENvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKWI9MzEqYithLmNoYXJDb2RlQXQoYyk+Pj4wO3JldHVybiBifTtnb29nLnN0cmluZy51bmlxdWVTdHJpbmdDb3VudGVyXz0yMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCl8MDtcbmdvb2cuc3RyaW5nLmNyZWF0ZVVuaXF1ZVN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiZ29vZ19cIitnb29nLnN0cmluZy51bmlxdWVTdHJpbmdDb3VudGVyXysrfTtnb29nLnN0cmluZy50b051bWJlcj1mdW5jdGlvbihhKXt2YXIgYj1OdW1iZXIoYSk7cmV0dXJuIDA9PWImJmdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2UoYSk/TmFOOmJ9O2dvb2cuc3RyaW5nLmlzTG93ZXJDYW1lbENhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuL15bYS16XSsoW0EtWl1bYS16XSopKiQvLnRlc3QoYSl9O2dvb2cuc3RyaW5nLmlzVXBwZXJDYW1lbENhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuL14oW0EtWl1bYS16XSopKyQvLnRlc3QoYSl9O2dvb2cuc3RyaW5nLnRvQ2FtZWxDYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSkucmVwbGFjZSgvXFwtKFthLXpdKS9nLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGMudG9VcHBlckNhc2UoKX0pfTtcbmdvb2cuc3RyaW5nLnRvU2VsZWN0b3JDYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSkucmVwbGFjZSgvKFtBLVpdKS9nLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCl9O2dvb2cuc3RyaW5nLnRvVGl0bGVDYXNlPWZ1bmN0aW9uKGEsYil7Yj1nb29nLmlzU3RyaW5nKGIpP2dvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZShiKTpcIlxcXFxzXCI7cmV0dXJuIGEucmVwbGFjZShuZXcgUmVnRXhwKFwiKF5cIisoYj9cInxbXCIrYitcIl0rXCI6XCJcIikrXCIpKFthLXpdKVwiLFwiZ1wiKSxmdW5jdGlvbihhLGIsZSl7cmV0dXJuIGIrZS50b1VwcGVyQ2FzZSgpfSl9O2dvb2cuc3RyaW5nLmNhcGl0YWxpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhLmNoYXJBdCgwKSkudG9VcHBlckNhc2UoKStTdHJpbmcoYS5zdWJzdHIoMSkpLnRvTG93ZXJDYXNlKCl9O1xuZ29vZy5zdHJpbmcucGFyc2VJbnQ9ZnVuY3Rpb24oYSl7aXNGaW5pdGUoYSkmJihhPVN0cmluZyhhKSk7cmV0dXJuIGdvb2cuaXNTdHJpbmcoYSk/L15cXHMqLT8weC9pLnRlc3QoYSk/cGFyc2VJbnQoYSwxNik6cGFyc2VJbnQoYSwxMCk6TmFOfTtnb29nLnN0cmluZy5zcGxpdExpbWl0PWZ1bmN0aW9uKGEsYixjKXthPWEuc3BsaXQoYik7Zm9yKHZhciBkPVtdOzA8YyYmYS5sZW5ndGg7KWQucHVzaChhLnNoaWZ0KCkpLGMtLTthLmxlbmd0aCYmZC5wdXNoKGEuam9pbihiKSk7cmV0dXJuIGR9O2dvb2cuc3RyaW5nLmxhc3RDb21wb25lbnQ9ZnVuY3Rpb24oYSxiKXtpZihiKVwic3RyaW5nXCI9PXR5cGVvZiBiJiYoYj1bYl0pO2Vsc2UgcmV0dXJuIGE7Zm9yKHZhciBjPS0xLGQ9MDtkPGIubGVuZ3RoO2QrKylpZihcIlwiIT1iW2RdKXt2YXIgZT1hLmxhc3RJbmRleE9mKGJbZF0pO2U+YyYmKGM9ZSl9cmV0dXJuLTE9PWM/YTphLnNsaWNlKGMrMSl9O1xuZ29vZy5zdHJpbmcuZWRpdERpc3RhbmNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1bXTtpZihhPT1iKXJldHVybiAwO2lmKCFhLmxlbmd0aHx8IWIubGVuZ3RoKXJldHVybiBNYXRoLm1heChhLmxlbmd0aCxiLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aCsxO2UrKyljW2VdPWU7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7ZFswXT1lKzE7Zm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspZFtmKzFdPU1hdGgubWluKGRbZl0rMSxjW2YrMV0rMSxjW2ZdK051bWJlcihhW2VdIT1iW2ZdKSk7Zm9yKGY9MDtmPGMubGVuZ3RoO2YrKyljW2ZdPWRbZl19cmV0dXJuIGRbYi5sZW5ndGhdfTtnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZT17fTtnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1ByZXN0bz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJQcmVzdG9cIil9O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzVHJpZGVudD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJUcmlkZW50XCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNU0lFXCIpfTtnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRWRnZVwiKX07XG5nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlKFwiV2ViS2l0XCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCl9O2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja289ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiR2Vja29cIikmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdCgpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50KCkmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKX07XG5nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7dmFyIGE9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO2lmKGEpe2E9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzKGEpO3ZhciBiPWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldEVuZ2luZVR1cGxlXyhhKTtpZihiKXJldHVyblwiR2Vja29cIj09YlswXT9nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uRm9yS2V5XyhhLFwiRmlyZWZveFwiKTpiWzFdO2E9YVswXTt2YXIgYztpZihhJiYoYz1hWzJdKSYmKGM9L1RyaWRlbnRcXC8oW15cXHM7XSspLy5leGVjKGMpKSlyZXR1cm4gY1sxXX1yZXR1cm5cIlwifTtcbmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldEVuZ2luZVR1cGxlXz1mdW5jdGlvbihhKXtpZighZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCkpcmV0dXJuIGFbMV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07aWYoXCJFZGdlXCI9PWNbMF0pcmV0dXJuIGN9fTtnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihhKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb24oKSxhKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbkZvcktleV89ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT1nb29nLmFycmF5LmZpbmQoYSxmdW5jdGlvbihhKXtyZXR1cm4gYj09YVswXX0pKSYmYVsxXXx8XCJcIn07Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybT17fTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQW5kcm9pZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUG9kXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQb2RcIikmJiFnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwaG9uZSgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZCgpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1hY2ludG9zaFwiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0xpbnV4PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkxpbnV4XCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJXaW5kb3dzXCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDck9TXCIpfTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lY2FzdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDcktleVwiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJLYWlPU1wiKX07Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0dvMlBob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJHQUZQXCIpfTtcbmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBhPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKSxiPVwiXCI7Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1dpbmRvd3MoKT8oYj0vV2luZG93cyAoPzpOVHxQaG9uZSkgKFswLTkuXSspLyxiPShhPWIuZXhlYyhhKSk/YVsxXTpcIjAuMFwiKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCk/KGI9Lyg/OmlQaG9uZXxpUG9kfGlQYWR8Q1BVKVxccytPU1xccysoXFxTKykvLGI9KGE9Yi5leGVjKGEpKSYmYVsxXS5yZXBsYWNlKC9fL2csXCIuXCIpKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoKCk/KGI9L01hYyBPUyBYIChbMC05Xy5dKykvLGI9KGE9Yi5leGVjKGEpKT9hWzFdLnJlcGxhY2UoL18vZyxcIi5cIik6XCIxMFwiKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1MoKT8oYj0vKD86S2FpT1MpXFwvKFxcUyspL2ksXG5iPShhPWIuZXhlYyhhKSkmJmFbMV0pOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCk/KGI9L0FuZHJvaWRcXHMrKFteXFwpO10rKShcXCl8OykvLGI9KGE9Yi5leGVjKGEpKSYmYVsxXSk6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TKCkmJihiPS8oPzpDck9TXFxzKyg/Omk2ODZ8eDg2XzY0KVxccysoWzAtOS5dKykpLyxiPShhPWIuZXhlYyhhKSkmJmFbMV0pO3JldHVybiBifHxcIlwifTtnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGEpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5nZXRWZXJzaW9uKCksYSl9O2dvb2cucmVmbGVjdD17fTtnb29nLnJlZmxlY3Qub2JqZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9O2dvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3JldHVybiBhfTtnb29nLnJlZmxlY3Quc2lua1ZhbHVlPWZ1bmN0aW9uKGEpe2dvb2cucmVmbGVjdC5zaW5rVmFsdWVbXCIgXCJdKGEpO3JldHVybiBhfTtnb29nLnJlZmxlY3Quc2lua1ZhbHVlW1wiIFwiXT1nb29nLm51bGxGdW5jdGlvbjtnb29nLnJlZmxlY3QuY2FuQWNjZXNzUHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0cnl7cmV0dXJuIGdvb2cucmVmbGVjdC5zaW5rVmFsdWUoYVtiXSksITB9Y2F0Y2goYyl7fXJldHVybiExfTtnb29nLnJlZmxlY3QuY2FjaGU9ZnVuY3Rpb24oYSxiLGMsZCl7ZD1kP2QoYik6YjtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsZCk/YVtkXTphW2RdPWMoYil9O2dvb2cudXNlckFnZW50PXt9O2dvb2cudXNlckFnZW50LkFTU1VNRV9JRT0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRT0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfR0VDS089ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVD0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVD0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkE9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OPSExO2dvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9JRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0V8fGdvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLT3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQTtnb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpfTtcbmdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZ2xvYmFsLm5hdmlnYXRvcnx8bnVsbH07Z29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCl9O2dvb2cudXNlckFnZW50Lk9QRVJBPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpO2dvb2cudXNlckFnZW50LklFPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JRTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpO2dvb2cudXNlckFnZW50LkVER0U9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0U6Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCk7XG5nb29nLnVzZXJBZ2VudC5FREdFX09SX0lFPWdvb2cudXNlckFnZW50LkVER0V8fGdvb2cudXNlckFnZW50LklFO2dvb2cudXNlckFnZW50LkdFQ0tPPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLTzpnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0dlY2tvKCk7Z29vZy51c2VyQWdlbnQuV0VCS0lUPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0KCk7Z29vZy51c2VyQWdlbnQuaXNNb2JpbGVfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cudXNlckFnZW50LldFQktJVCYmZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTW9iaWxlXCIpfTtcbmdvb2cudXNlckFnZW50Lk1PQklMRT1nb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuaXNNb2JpbGVfKCk7Z29vZy51c2VyQWdlbnQuU0FGQVJJPWdvb2cudXNlckFnZW50LldFQktJVDtnb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV89ZnVuY3Rpb24oKXt2YXIgYT1nb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpO3JldHVybiBhJiZhLnBsYXRmb3JtfHxcIlwifTtnb29nLnVzZXJBZ2VudC5QTEFURk9STT1nb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV8oKTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWD0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEPSExO2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkU9ITE7XG5nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRD0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRD0hMTtnb29nLnVzZXJBZ2VudC5BU1NVTUVfS0FJT1M9ITE7Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dPMlBIT05FPSExO2dvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz1nb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0lORE9XU3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5EUk9JRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EO2dvb2cudXNlckFnZW50Lk1BQz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX01BQzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoKCk7XG5nb29nLnVzZXJBZ2VudC5XSU5ET1dTPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfV0lORE9XUzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cygpO2dvb2cudXNlckFnZW50LmlzTGVnYWN5TGludXhfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNMaW51eCgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lT1MoKX07Z29vZy51c2VyQWdlbnQuTElOVVg9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWDpnb29nLnVzZXJBZ2VudC5pc0xlZ2FjeUxpbnV4XygpO2dvb2cudXNlckFnZW50LmlzWDExXz1mdW5jdGlvbigpe3ZhciBhPWdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCk7cmV0dXJuISFhJiZnb29nLnN0cmluZy5jb250YWlucyhhLmFwcFZlcnNpb258fFwiXCIsXCJYMTFcIil9O1xuZ29vZy51c2VyQWdlbnQuWDExPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExOmdvb2cudXNlckFnZW50LmlzWDExXygpO2dvb2cudXNlckFnZW50LkFORFJPSUQ9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCk7Z29vZy51c2VyQWdlbnQuSVBIT05FPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKTtnb29nLnVzZXJBZ2VudC5JUEFEPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpO1xuZ29vZy51c2VyQWdlbnQuSVBPRD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKTtnb29nLnVzZXJBZ2VudC5JT1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCk7Z29vZy51c2VyQWdlbnQuS0FJT1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9LQUlPUzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1MoKTtnb29nLnVzZXJBZ2VudC5HTzJQSE9ORT1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dPMlBIT05FOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNHbzJQaG9uZSgpO1xuZ29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lVmVyc2lvbl89ZnVuY3Rpb24oKXt2YXIgYT1cIlwiLGI9Z29vZy51c2VyQWdlbnQuZ2V0VmVyc2lvblJlZ2V4UmVzdWx0XygpO2ImJihhPWI/YlsxXTpcIlwiKTtyZXR1cm4gZ29vZy51c2VyQWdlbnQuSUUmJihiPWdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV8oKSxudWxsIT1iJiZiPnBhcnNlRmxvYXQoYSkpP1N0cmluZyhiKTphfTtcbmdvb2cudXNlckFnZW50LmdldFZlcnNpb25SZWdleFJlc3VsdF89ZnVuY3Rpb24oKXt2YXIgYT1nb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmcoKTtpZihnb29nLnVzZXJBZ2VudC5HRUNLTylyZXR1cm4vcnY6KFteXFwpO10rKShcXCl8OykvLmV4ZWMoYSk7aWYoZ29vZy51c2VyQWdlbnQuRURHRSlyZXR1cm4vRWRnZVxcLyhbXFxkXFwuXSspLy5leGVjKGEpO2lmKGdvb2cudXNlckFnZW50LklFKXJldHVybi9cXGIoPzpNU0lFfHJ2KVs6IF0oW15cXCk7XSspKFxcKXw7KS8uZXhlYyhhKTtpZihnb29nLnVzZXJBZ2VudC5XRUJLSVQpcmV0dXJuL1dlYktpdFxcLyhcXFMrKS8uZXhlYyhhKTtpZihnb29nLnVzZXJBZ2VudC5PUEVSQSlyZXR1cm4vKD86VmVyc2lvbilbIFxcL10/KFxcUyspLy5leGVjKGEpfTtnb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfPWZ1bmN0aW9uKCl7dmFyIGE9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIGE/YS5kb2N1bWVudE1vZGU6dm9pZCAwfTtcbmdvb2cudXNlckFnZW50LlZFUlNJT049Z29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lVmVyc2lvbl8oKTtnb29nLnVzZXJBZ2VudC5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhhLGIpfTtnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlckNhY2hlXz17fTtnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OfHxnb29nLnJlZmxlY3QuY2FjaGUoZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXJDYWNoZV8sYSxmdW5jdGlvbigpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy51c2VyQWdlbnQuVkVSU0lPTixhKX0pfTtnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb249Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXI7XG5nb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZU9ySGlnaGVyPWZ1bmN0aW9uKGEpe3JldHVybiBOdW1iZXIoZ29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERSk+PWF9O2dvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlPWdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlT3JIaWdoZXI7Z29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERT1mdW5jdGlvbigpe2lmKGdvb2cuZ2xvYmFsLmRvY3VtZW50JiZnb29nLnVzZXJBZ2VudC5JRSlyZXR1cm4gZ29vZy51c2VyQWdlbnQuZ2V0RG9jdW1lbnRNb2RlXygpfSgpO2dvb2cudXNlckFnZW50LnByb2R1Y3Q9e307Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfRklSRUZPWD0hMTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU9ITE7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRD0hMTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9BTkRST0lEPSExO2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRT0hMTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkk9ITE7XG5nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9JRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0V8fGdvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfRklSRUZPWHx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEFEfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9BTkRST0lEfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9DSFJPTUV8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX1NBRkFSSTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0Lk9QRVJBPWdvb2cudXNlckFnZW50Lk9QRVJBO2dvb2cudXNlckFnZW50LnByb2R1Y3QuSUU9Z29vZy51c2VyQWdlbnQuSUU7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5FREdFPWdvb2cudXNlckFnZW50LkVER0U7XG5nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkZJUkVGT1g9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzSXBob25lT3JJcG9kXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCl9O2dvb2cudXNlckFnZW50LnByb2R1Y3QuSVBIT05FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfKCk7XG5nb29nLnVzZXJBZ2VudC5wcm9kdWN0LklQQUQ9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEFEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCk7Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BTkRST0lEPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRDpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNBbmRyb2lkQnJvd3NlcigpO2dvb2cudXNlckFnZW50LnByb2R1Y3QuQ0hST01FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpO1xuZ29vZy51c2VyQWdlbnQucHJvZHVjdC5pc1NhZmFyaURlc2t0b3BfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NhZmFyaSgpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcygpfTtnb29nLnVzZXJBZ2VudC5wcm9kdWN0LlNBRkFSST1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX1NBRkFSSTpnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzU2FmYXJpRGVza3RvcF8oKTtnb29nLmNyeXB0LmJhc2U2ND17fTtnb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl89XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO2dvb2cuY3J5cHQuYmFzZTY0LkVOQ09ERURfVkFMUz1nb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl8rXCIrLz1cIjtnb29nLmNyeXB0LmJhc2U2NC5FTkNPREVEX1ZBTFNfV0VCU0FGRT1nb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl8rXCItXy5cIjtnb29nLmNyeXB0LmJhc2U2NC5BbHBoYWJldD17REVGQVVMVDowLE5PX1BBRERJTkc6MSxXRUJTQUZFOjIsV0VCU0FGRV9ET1RfUEFERElORzozLFdFQlNBRkVfTk9fUEFERElORzo0fTtnb29nLmNyeXB0LmJhc2U2NC5wYWRkaW5nQ2hhcnNfPVwiPS5cIjtcbmdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ189ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGdvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc18sYSl9O2dvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzXz17fTtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz1udWxsO2dvb2cuY3J5cHQuYmFzZTY0LkFTU1VNRV9OQVRJVkVfU1VQUE9SVF89Z29vZy51c2VyQWdlbnQuR0VDS098fGdvb2cudXNlckFnZW50LldFQktJVCYmIWdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJfHxnb29nLnVzZXJBZ2VudC5PUEVSQTtnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0VOQ09ERV89Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUX3x8XCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYnRvYTtcbmdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfREVDT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHwhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkkmJiFnb29nLnVzZXJBZ2VudC5JRSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYXRvYjtcbmdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheT1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5pc0FycmF5TGlrZShhKSxcImVuY29kZUJ5dGVBcnJheSB0YWtlcyBhbiBhcnJheSBhcyBhIHBhcmFtZXRlclwiKTt2b2lkIDA9PT1iJiYoYj1nb29nLmNyeXB0LmJhc2U2NC5BbHBoYWJldC5ERUZBVUxUKTtnb29nLmNyeXB0LmJhc2U2NC5pbml0XygpO2I9Z29vZy5jcnlwdC5iYXNlNjQuYnl0ZVRvQ2hhck1hcHNfW2JdO2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0zKXt2YXIgZT1hW2RdLGY9ZCsxPGEubGVuZ3RoLGc9Zj9hW2QrMV06MCxoPWQrMjxhLmxlbmd0aCxrPWg/YVtkKzJdOjAsbD1lPj4yO2U9KGUmMyk8PDR8Zz4+NDtnPShnJjE1KTw8MnxrPj42O2smPTYzO2h8fChrPTY0LGZ8fChnPTY0KSk7Yy5wdXNoKGJbbF0sYltlXSxiW2ddfHxcIlwiLGJba118fFwiXCIpfXJldHVybiBjLmpvaW4oXCJcIil9O1xuZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlU3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXyYmIWI/Z29vZy5nbG9iYWwuYnRvYShhKTpnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoZ29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheShhKSxiKX07Z29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYoZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9ERUNPREVfJiYhYilyZXR1cm4gZ29vZy5nbG9iYWwuYXRvYihhKTt2YXIgYz1cIlwiO2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhhLGZ1bmN0aW9uKGEpe2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSl9KTtyZXR1cm4gY307XG5nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhhLGZ1bmN0aW9uKGEpe2MucHVzaChhKX0pO3JldHVybiBjfTtcbmdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheT1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnVzZXJBZ2VudC5JRXx8Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXIoXCIxMFwiKSxcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXNcIik7dmFyIGI9YS5sZW5ndGgsYz0zKmIvNDtjJTM/Yz1NYXRoLmZsb29yKGMpOmdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ18oYVtiLTFdKSYmKGM9Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhhW2ItMl0pP2MtMjpjLTEpO3ZhciBkPW5ldyBVaW50OEFycmF5KGMpLGU9MDtnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oYSxmdW5jdGlvbihhKXtkW2UrK109YX0pO3JldHVybiBkLnN1YmFycmF5KDAsZSl9O1xuZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiKXtmb3IoO2Q8YS5sZW5ndGg7KXt2YXIgYz1hLmNoYXJBdChkKyspLGU9Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bY107aWYobnVsbCE9ZSlyZXR1cm4gZTtpZighZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShjKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK2MpO31yZXR1cm4gYn1nb29nLmNyeXB0LmJhc2U2NC5pbml0XygpO2Zvcih2YXIgZD0wOzspe3ZhciBlPWMoLTEpLGY9YygwKSxnPWMoNjQpLGg9Yyg2NCk7aWYoNjQ9PT1oJiYtMT09PWUpYnJlYWs7YihlPDwyfGY+PjQpOzY0IT1nJiYoYihmPDw0JjI0MHxnPj4yKSw2NCE9aCYmYihnPDw2JjE5MnxoKSl9fTtcbmdvb2cuY3J5cHQuYmFzZTY0LmluaXRfPWZ1bmN0aW9uKCl7aWYoIWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfKXtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz17fTtmb3IodmFyIGE9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fLnNwbGl0KFwiXCIpLGI9W1wiKy89XCIsXCIrL1wiLFwiLV89XCIsXCItXy5cIixcIi1fXCJdLGM9MDs1PmM7YysrKXt2YXIgZD1hLmNvbmNhdChiW2NdLnNwbGl0KFwiXCIpKTtnb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bY109ZDtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9ZFtlXSxnPWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfW2ZdO3ZvaWQgMD09PWc/Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bZl09ZTpnb29nLmFzc2VydHMuYXNzZXJ0KGc9PT1lKX19fX07anNwYi51dGlscz17fTtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTA7anNwYi51dGlscy5zcGxpdFVpbnQ2ND1mdW5jdGlvbihhKXt2YXIgYj1hPj4+MDthPU1hdGguZmxvb3IoKGEtYikvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKT4+PjA7anNwYi51dGlscy5zcGxpdDY0TG93PWI7anNwYi51dGlscy5zcGxpdDY0SGlnaD1hfTtqc3BiLnV0aWxzLnNwbGl0SW50NjQ9ZnVuY3Rpb24oYSl7dmFyIGI9MD5hO2E9TWF0aC5hYnMoYSk7dmFyIGM9YT4+PjA7YT1NYXRoLmZsb29yKChhLWMpL2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7YT4+Pj0wO2ImJihhPX5hPj4+MCxjPSh+Yz4+PjApKzEsNDI5NDk2NzI5NTxjJiYoYz0wLGErKyw0Mjk0OTY3Mjk1PGEmJihhPTApKSk7anNwYi51dGlscy5zcGxpdDY0TG93PWM7anNwYi51dGlscy5zcGxpdDY0SGlnaD1hfTtcbmpzcGIudXRpbHMuc3BsaXRaaWd6YWc2ND1mdW5jdGlvbihhKXt2YXIgYj0wPmE7YT0yKk1hdGguYWJzKGEpO2pzcGIudXRpbHMuc3BsaXRVaW50NjQoYSk7YT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIGM9anNwYi51dGlscy5zcGxpdDY0SGlnaDtiJiYoMD09YT8wPT1jP2M9YT00Mjk0OTY3Mjk1OihjLS0sYT00Mjk0OTY3Mjk1KTphLS0pO2pzcGIudXRpbHMuc3BsaXQ2NExvdz1hO2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9Y307XG5qc3BiLnV0aWxzLnNwbGl0RmxvYXQzMj1mdW5jdGlvbihhKXt2YXIgYj0wPmE/MTowO2E9Yj8tYTphO2lmKDA9PT1hKTA8MS9hPyhqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PTApOihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PTIxNDc0ODM2NDgpO2Vsc2UgaWYoaXNOYU4oYSkpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0yMTQ3NDgzNjQ3O2Vsc2UgaWYoYT5qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWClqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PShiPDwzMXwyMTM5MDk1MDQwKT4+PjA7ZWxzZSBpZihhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOKWE9TWF0aC5yb3VuZChhL01hdGgucG93KDIsLTE0OSkpLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KGI8PDMxfFxuYSk+Pj4wO2Vsc2V7dmFyIGM9TWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMik7YSo9TWF0aC5wb3coMiwtYyk7YT1NYXRoLnJvdW5kKGEqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIzKSY4Mzg4NjA3O2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MDtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KGI8PDMxfGMrMTI3PDwyM3xhKT4+PjB9fTtcbmpzcGIudXRpbHMuc3BsaXRGbG9hdDY0PWZ1bmN0aW9uKGEpe3ZhciBiPTA+YT8xOjA7YT1iPy1hOmE7aWYoMD09PWEpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wPDEvYT8wOjIxNDc0ODM2NDgsanNwYi51dGlscy5zcGxpdDY0TG93PTA7ZWxzZSBpZihpc05hTihhKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTIxNDc0ODM2NDcsanNwYi51dGlscy5zcGxpdDY0TG93PTQyOTQ5NjcyOTU7ZWxzZSBpZihhPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KGI8PDMxfDIxNDY0MzUwNzIpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtlbHNlIGlmKGE8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4pe3ZhciBjPWEvTWF0aC5wb3coMiwtMTA3NCk7YT1jL2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMjtqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPShiPDwzMXxhKT4+PjA7anNwYi51dGlscy5zcGxpdDY0TG93PWM+Pj4wfWVsc2V7Yz1cbmE7dmFyIGQ9MDtpZigyPD1jKWZvcig7Mjw9YyYmMTAyMz5kOylkKyssYy89MjtlbHNlIGZvcig7MT5jJiYtMTAyMjxkOyljKj0yLGQtLTtjPWEqTWF0aC5wb3coMiwtZCk7YT1jKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMCYxMDQ4NTc1O2M9Yypqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNTI+Pj4wO2pzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KGI8PDMxfGQrMTAyMzw8MjB8YSk+Pj4wO2pzcGIudXRpbHMuc3BsaXQ2NExvdz1jfX07XG5qc3BiLnV0aWxzLnNwbGl0SGFzaDY0PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY2hhckNvZGVBdCgwKSxjPWEuY2hhckNvZGVBdCgxKSxkPWEuY2hhckNvZGVBdCgyKSxlPWEuY2hhckNvZGVBdCgzKSxmPWEuY2hhckNvZGVBdCg0KSxnPWEuY2hhckNvZGVBdCg1KSxoPWEuY2hhckNvZGVBdCg2KTthPWEuY2hhckNvZGVBdCg3KTtqc3BiLnV0aWxzLnNwbGl0NjRMb3c9YisoYzw8OCkrKGQ8PDE2KSsoZTw8MjQpPj4+MDtqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWYrKGc8PDgpKyhoPDwxNikrKGE8PDI0KT4+PjB9O2pzcGIudXRpbHMuam9pblVpbnQ2ND1mdW5jdGlvbihhLGIpe3JldHVybiBiKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMisoYT4+PjApfTtcbmpzcGIudXRpbHMuam9pbkludDY0PWZ1bmN0aW9uKGEsYil7dmFyIGM9YiYyMTQ3NDgzNjQ4O2MmJihhPX5hKzE+Pj4wLGI9fmI+Pj4wLDA9PWEmJihiPWIrMT4+PjApKTthPWpzcGIudXRpbHMuam9pblVpbnQ2NChhLGIpO3JldHVybiBjPy1hOmF9O2pzcGIudXRpbHMudG9aaWd6YWc2ND1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yj4+MzE7cmV0dXJuIGMoYTw8MV5kLChiPDwxfGE+Pj4zMSleZCl9O2pzcGIudXRpbHMuam9pblppZ3phZzY0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KGEsYixqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9O2pzcGIudXRpbHMuZnJvbVppZ3phZzY0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0tKGEmMSk7cmV0dXJuIGMoKGE+Pj4xfGI8PDMxKV5kLGI+Pj4xXmQpfTtcbmpzcGIudXRpbHMuam9pbkZsb2F0MzI9ZnVuY3Rpb24oYSxiKXtiPTIqKGE+PjMxKSsxO3ZhciBjPWE+Pj4yMyYyNTU7YSY9ODM4ODYwNztyZXR1cm4gMjU1PT1jP2E/TmFOOkluZmluaXR5KmI6MD09Yz9iKk1hdGgucG93KDIsLTE0OSkqYTpiKk1hdGgucG93KDIsYy0xNTApKihhK01hdGgucG93KDIsMjMpKX07anNwYi51dGlscy5qb2luRmxvYXQ2ND1mdW5jdGlvbihhLGIpe3ZhciBjPTIqKGI+PjMxKSsxLGQ9Yj4+PjIwJjIwNDc7YT1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIqKGImMTA0ODU3NSkrYTtyZXR1cm4gMjA0Nz09ZD9hP05hTjpJbmZpbml0eSpjOjA9PWQ/YypNYXRoLnBvdygyLC0xMDc0KSphOmMqTWF0aC5wb3coMixkLTEwNzUpKihhK2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mil9O1xuanNwYi51dGlscy5qb2luSGFzaDY0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+PjAmMjU1LGE+Pj44JjI1NSxhPj4+MTYmMjU1LGE+Pj4yNCYyNTUsYj4+PjAmMjU1LGI+Pj44JjI1NSxiPj4+MTYmMjU1LGI+Pj4yNCYyNTUpfTtqc3BiLnV0aWxzLkRJR0lUUz1cIjAxMjM0NTY3ODlhYmNkZWZcIi5zcGxpdChcIlwiKTtqc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXz00ODtqc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXz05NztcbmpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXthPWE/U3RyaW5nKGEpOlwiXCI7cmV0dXJuIGI/XCIwMDAwMDAwXCIuc2xpY2UoYS5sZW5ndGgpK2E6YX1pZigyMDk3MTUxPj1iKXJldHVyblwiXCIranNwYi51dGlscy5qb2luVWludDY0KGEsYik7dmFyIGQ9KGE+Pj4yNHxiPDw4KT4+PjAmMTY3NzcyMTU7Yj1iPj4xNiY2NTUzNTthPShhJjE2Nzc3MjE1KSs2Nzc3MjE2KmQrNjcxMDY1NipiO2QrPTgxNDc0OTcqYjtiKj0yOzFFNzw9YSYmKGQrPU1hdGguZmxvb3IoYS8xRTcpLGElPTFFNyk7MUU3PD1kJiYoYis9TWF0aC5mbG9vcihkLzFFNyksZCU9MUU3KTtyZXR1cm4gYyhiLDApK2MoZCxiKStjKGEsMSl9O1xuanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZz1mdW5jdGlvbihhLGIpe3ZhciBjPWImMjE0NzQ4MzY0ODtjJiYoYT1+YSsxPj4+MCxiPX5iKygwPT1hPzE6MCk+Pj4wKTthPWpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhhLGIpO3JldHVybiBjP1wiLVwiK2E6YX07anNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oYSxiKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGEpO2E9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBjPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIGI/anNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyhhLGMpOmpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhhLGMpfTtcbmpzcGIudXRpbHMuaGFzaDY0QXJyYXlUb0RlY2ltYWxTdHJpbmdzPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPUFycmF5KGEubGVuZ3RoKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1qc3BiLnV0aWxzLmhhc2g2NFRvRGVjaW1hbFN0cmluZyhhW2RdLGIpO3JldHVybiBjfTtcbmpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXtmb3IodmFyIGM9MDs4PmMmJigxIT09YXx8MDxiKTtjKyspYj1hKmVbY10rYixlW2NdPWImMjU1LGI+Pj49OH1mdW5jdGlvbiBjKCl7Zm9yKHZhciBhPTA7OD5hO2ErKyllW2FdPX5lW2FdJjI1NX1nb29nLmFzc2VydHMuYXNzZXJ0KDA8YS5sZW5ndGgpO3ZhciBkPSExO1wiLVwiPT09YVswXSYmKGQ9ITAsYT1hLnNsaWNlKDEpKTtmb3IodmFyIGU9WzAsMCwwLDAsMCwwLDAsMF0sZj0wO2Y8YS5sZW5ndGg7ZisrKWIoMTAsYS5jaGFyQ29kZUF0KGYpLWpzcGIudXRpbHMuWkVST19DSEFSX0NPREVfKTtkJiYoYygpLGIoMSwxKSk7cmV0dXJuIGdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmcoZSl9O2pzcGIudXRpbHMuc3BsaXREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGEpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoYSkpfTtcbmpzcGIudXRpbHMudG9IZXhEaWdpdF89ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMTA+YT9qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXythOmpzcGIudXRpbHMuQV9DSEFSX0NPREVfLTEwK2EpfTtqc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV89ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PWpzcGIudXRpbHMuQV9DSEFSX0NPREVfP2EtanNwYi51dGlscy5BX0NIQVJfQ09ERV8rMTA6YS1qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFX307anNwYi51dGlscy5oYXNoNjRUb0hleFN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj1BcnJheSgxOCk7YlswXT1cIjBcIjtiWzFdPVwieFwiO2Zvcih2YXIgYz0wOzg+YztjKyspe3ZhciBkPWEuY2hhckNvZGVBdCg3LWMpO2JbMipjKzJdPWpzcGIudXRpbHMudG9IZXhEaWdpdF8oZD4+NCk7YlsyKmMrM109anNwYi51dGlscy50b0hleERpZ2l0XyhkJjE1KX1yZXR1cm4gYi5qb2luKFwiXCIpfTtcbmpzcGIudXRpbHMuaGV4U3RyaW5nVG9IYXNoNjQ9ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7Z29vZy5hc3NlcnRzLmFzc2VydCgxOD09YS5sZW5ndGgpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoXCIwXCI9PWFbMF0pO2dvb2cuYXNzZXJ0cy5hc3NlcnQoXCJ4XCI9PWFbMV0pO2Zvcih2YXIgYj1cIlwiLGM9MDs4PmM7YysrKXt2YXIgZD1qc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV8oYS5jaGFyQ29kZUF0KDIqYysyKSksZT1qc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV8oYS5jaGFyQ29kZUF0KDIqYyszKSk7Yj1TdHJpbmcuZnJvbUNoYXJDb2RlKDE2KmQrZSkrYn1yZXR1cm4gYn07XG5qc3BiLnV0aWxzLmhhc2g2NFRvTnVtYmVyPWZ1bmN0aW9uKGEsYil7anNwYi51dGlscy5zcGxpdEhhc2g2NChhKTthPWpzcGIudXRpbHMuc3BsaXQ2NExvdzt2YXIgYz1qc3BiLnV0aWxzLnNwbGl0NjRIaWdoO3JldHVybiBiP2pzcGIudXRpbHMuam9pbkludDY0KGEsYyk6anNwYi51dGlscy5qb2luVWludDY0KGEsYyl9O2pzcGIudXRpbHMubnVtYmVyVG9IYXNoNjQ9ZnVuY3Rpb24oYSl7anNwYi51dGlscy5zcGxpdEludDY0KGEpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5IYXNoNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtqc3BiLnV0aWxzLmNvdW50VmFyaW50cz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTAsZT1iO2U8YztlKyspZCs9YVtlXT4+NztyZXR1cm4gYy1iLWR9O1xuanNwYi51dGlscy5jb3VudFZhcmludEZpZWxkcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0wO2Q9OCpkK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVDtpZigxMjg+ZClmb3IoO2I8YyYmYVtiKytdPT1kOylmb3IoZSsrOzspe3ZhciBmPWFbYisrXTtpZigwPT0oZiYxMjgpKWJyZWFrfWVsc2UgZm9yKDtiPGM7KXtmb3IoZj1kOzEyODxmOyl7aWYoYVtiXSE9KGYmMTI3fDEyOCkpcmV0dXJuIGU7YisrO2Y+Pj03fWlmKGFbYisrXSE9ZilicmVhaztmb3IoZSsrO2Y9YVtiKytdLDAhPShmJjEyOCk7KTt9cmV0dXJuIGV9O2pzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc189ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0wO2lmKDEyOD5kKWZvcig7YjxjJiZhW2IrK109PWQ7KWYrKyxiKz1lO2Vsc2UgZm9yKDtiPGM7KXtmb3IodmFyIGc9ZDsxMjg8Zzspe2lmKGFbYisrXSE9KGcmMTI3fDEyOCkpcmV0dXJuIGY7Zz4+PTd9aWYoYVtiKytdIT1nKWJyZWFrO2YrKztiKz1lfXJldHVybiBmfTtcbmpzcGIudXRpbHMuY291bnRGaXhlZDMyRmllbGRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGEsYixjLDgqZCtqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyLDQpfTtqc3BiLnV0aWxzLmNvdW50Rml4ZWQ2NEZpZWxkcz1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4ganNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXyhhLGIsYyw4KmQranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCw4KX07XG5qc3BiLnV0aWxzLmNvdW50RGVsaW1pdGVkRmllbGRzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTA7Zm9yKGQ9OCpkK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRDtiPGM7KXtmb3IodmFyIGY9ZDsxMjg8Zjspe2lmKGFbYisrXSE9KGYmMTI3fDEyOCkpcmV0dXJuIGU7Zj4+PTd9aWYoYVtiKytdIT1mKWJyZWFrO2UrKztmb3IodmFyIGc9MCxoPTE7Zj1hW2IrK10sZys9KGYmMTI3KSpoLGgqPTEyOCwwIT0oZiYxMjgpOyk7Yis9Z31yZXR1cm4gZX07anNwYi51dGlscy5kZWJ1Z0J5dGVzVG9UZXh0Rm9ybWF0PWZ1bmN0aW9uKGEpe3ZhciBiPSdcIic7aWYoYSl7YT1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkoYSk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspYis9XCJcXFxceFwiLDE2PmFbY10mJihiKz1cIjBcIiksYis9YVtjXS50b1N0cmluZygxNil9cmV0dXJuIGIrJ1wiJ307XG5qc3BiLnV0aWxzLmRlYnVnU2NhbGFyVG9UZXh0Rm9ybWF0PWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYT9nb29nLnN0cmluZy5xdW90ZShhKTphLnRvU3RyaW5nKCl9O2pzcGIudXRpbHMuc3RyaW5nVG9CeXRlQXJyYXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWEuY2hhckNvZGVBdChjKTtpZigyNTU8ZCl0aHJvdyBFcnJvcihcIkNvbnZlcnNpb24gZXJyb3I6IHN0cmluZyBjb250YWlucyBjb2RlcG9pbnQgb3V0c2lkZSBvZiBieXRlIHJhbmdlXCIpO2JbY109ZH1yZXR1cm4gYn07XG5qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24oYSl7aWYoYS5jb25zdHJ1Y3Rvcj09PVVpbnQ4QXJyYXkpcmV0dXJuIGE7aWYoYS5jb25zdHJ1Y3Rvcj09PUFycmF5QnVmZmVyfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyJiZhLmNvbnN0cnVjdG9yPT09QnVmZmVyfHxhLmNvbnN0cnVjdG9yPT09QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO2lmKGEuY29uc3RydWN0b3I9PT1TdHJpbmcpcmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShhKTtnb29nLmFzc2VydHMuZmFpbChcIlR5cGUgbm90IGNvbnZlcnRpYmxlIHRvIFVpbnQ4QXJyYXkuXCIpO3JldHVybiBuZXcgVWludDhBcnJheSgwKX07anNwYi5CaW5hcnlEZWNvZGVyPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmJ5dGVzXz1udWxsO3RoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MDt0aGlzLmVycm9yXz0hMTthJiZ0aGlzLnNldEJsb2NrKGEsYixjKX07anNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfPVtdO2pzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYz1mdW5jdGlvbihhLGIsYyl7aWYoanNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCl7dmFyIGQ9anNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLnBvcCgpO2EmJmQuc2V0QmxvY2soYSxiLGMpO3JldHVybiBkfXJldHVybiBuZXcganNwYi5CaW5hcnlEZWNvZGVyKGEsYixjKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5mcmVlPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcigpOzEwMD5qc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoJiZqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ucHVzaCh0aGlzKX07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmJ5dGVzXyx0aGlzLnN0YXJ0Xyx0aGlzLmVuZF8tdGhpcy5zdGFydF8pfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5ieXRlc189bnVsbDt0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTA7dGhpcy5lcnJvcl89ITF9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnl0ZXNffTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYnl0ZXNfPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShhKTt0aGlzLnN0YXJ0Xz12b2lkIDAhPT1iP2I6MDt0aGlzLmVuZF89dm9pZCAwIT09Yz90aGlzLnN0YXJ0XytjOnRoaXMuYnl0ZXNfLmxlbmd0aDt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kX307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oYSl7dGhpcy5lbmRfPWF9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yX307XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNldEN1cnNvcj1mdW5jdGlvbihhKXt0aGlzLmN1cnNvcl89YX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuY3Vyc29yXys9YTtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5hdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl89PXRoaXMuZW5kX307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5wYXN0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yXz50aGlzLmVuZF99O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcl98fDA+dGhpcy5jdXJzb3JffHx0aGlzLmN1cnNvcl8+dGhpcy5lbmRffTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTEyOCxjPTAsZD0wLGU9MDs0PmUmJjEyODw9YjtlKyspYj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10sY3w9KGImMTI3KTw8NyplOzEyODw9YiYmKGI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGN8PShiJjEyNyk8PDI4LGR8PShiJjEyNyk+PjQpO2lmKDEyODw9Yilmb3IoZT0wOzU+ZSYmMTI4PD1iO2UrKyliPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSxkfD0oYiYxMjcpPDw3KmUrMztpZigxMjg+YilyZXR1cm4gYShjPj4+MCxkPj4+MCk7Z29vZy5hc3NlcnRzLmZhaWwoXCJGYWlsZWQgdG8gcmVhZCB2YXJpbnQsIGVuY29kaW5nIGlzIGludmFsaWQuXCIpO3RoaXMuZXJyb3JfPSEwfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoZnVuY3Rpb24oYixjKXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQoYixjLGEpfSl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmJ5dGVzXyxjPXRoaXMuY3Vyc29yXzt0aGlzLmN1cnNvcl8rPTg7Zm9yKHZhciBkPTAsZT0wLGY9Yys3O2Y+PWM7Zi0tKWQ9ZDw8OHxiW2ZdLGU9ZTw8OHxiW2YrNF07cmV0dXJuIGEoZCxlKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5za2lwVmFyaW50PWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl9dJjEyODspdGhpcy5jdXJzb3JfKys7dGhpcy5jdXJzb3JfKyt9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS51bnNraXBWYXJpbnQ9ZnVuY3Rpb24oYSl7Zm9yKDsxMjg8YTspdGhpcy5jdXJzb3JfLS0sYT4+Pj03O3RoaXMuY3Vyc29yXy0tfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzXzt2YXIgYj1hW3RoaXMuY3Vyc29yXyswXTt2YXIgYz1iJjEyNztpZigxMjg+YilyZXR1cm4gdGhpcy5jdXJzb3JfKz0xLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGM7Yj1hW3RoaXMuY3Vyc29yXysxXTtjfD0oYiYxMjcpPDw3O2lmKDEyOD5iKXJldHVybiB0aGlzLmN1cnNvcl8rPTIsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksYztiPWFbdGhpcy5jdXJzb3JfKzJdO2N8PShiJjEyNyk8PDE0O2lmKDEyOD5iKXJldHVybiB0aGlzLmN1cnNvcl8rPTMsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksYztiPWFbdGhpcy5jdXJzb3JfKzNdO2N8PShiJjEyNyk8PDIxO2lmKDEyOD5iKXJldHVybiB0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PVxudGhpcy5lbmRfKSxjO2I9YVt0aGlzLmN1cnNvcl8rNF07Y3w9KGImMTUpPDwyODtpZigxMjg+YilyZXR1cm4gdGhpcy5jdXJzb3JfKz01LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGM+Pj4wO3RoaXMuY3Vyc29yXys9NTsxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiZnb29nLmFzc2VydHMuYXNzZXJ0KCExKTtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKTtyZXR1cm4gY307anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzI9anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMjtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCkudG9TdHJpbmcoKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIGE+Pj4xXi0oYSYxKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblVpbnQ2NCl9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luSW50NjQpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblppZ3phZzY0KX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0WmlnemFnVmFyaW50NjQoanNwYi51dGlscy5qb2luSGFzaDY0KX07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50OD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTt0aGlzLmN1cnNvcl8rPTE7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyk7cmV0dXJuIGF9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxiPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyk7cmV0dXJuIGE8PDB8Yjw8OH07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0sZD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107dGhpcy5jdXJzb3JfKz00O2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybihhPDwwfGI8PDh8Yzw8MTZ8ZDw8MjQpPj4+MH07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYj10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVWludDY0KGEsYil9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYj10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGEsYil9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07dGhpcy5jdXJzb3JfKz0xO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybiBhPDwyND4+MjR9O1xuanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MTY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV07dGhpcy5jdXJzb3JfKz0yO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pO3JldHVybihhPDwwfGI8PDgpPDwxNj4+MTZ9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLGI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLGM9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLGQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3RoaXMuY3Vyc29yXys9NDtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKTtyZXR1cm4gYTw8MHxiPDw4fGM8PDE2fGQ8PDI0fTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYj10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luSW50NjQoYSxiKX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxiPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKGEsYil9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0MzIoYSwwKX07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxiPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5GbG9hdDY0KGEsYil9O2pzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRW51bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpfTtcbmpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmJ5dGVzXyxjPXRoaXMuY3Vyc29yXzthPWMrYTtmb3IodmFyIGQ9W10sZT1cIlwiO2M8YTspe3ZhciBmPWJbYysrXTtpZigxMjg+ZilkLnB1c2goZik7ZWxzZSBpZigxOTI+Ziljb250aW51ZTtlbHNlIGlmKDIyND5mKXt2YXIgZz1iW2MrK107ZC5wdXNoKChmJjMxKTw8NnxnJjYzKX1lbHNlIGlmKDI0MD5mKXtnPWJbYysrXTt2YXIgaD1iW2MrK107ZC5wdXNoKChmJjE1KTw8MTJ8KGcmNjMpPDw2fGgmNjMpfWVsc2UgaWYoMjQ4PmYpe2c9YltjKytdO2g9YltjKytdO3ZhciBrPWJbYysrXTtmPShmJjcpPDwxOHwoZyY2Myk8PDEyfChoJjYzKTw8NnxrJjYzO2YtPTY1NTM2O2QucHVzaCgoZj4+MTAmMTAyMykrNTUyOTYsKGYmMTAyMykrNTYzMjApfTgxOTI8PWQubGVuZ3RoJiYoZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpLGQubGVuZ3RoPTApfWUrPWdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmcoZCk7XG50aGlzLmN1cnNvcl89YztyZXR1cm4gZX07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nV2l0aExlbmd0aD1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGEpfTtqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRCeXRlcz1mdW5jdGlvbihhKXtpZigwPmF8fHRoaXMuY3Vyc29yXythPnRoaXMuYnl0ZXNfLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcl89ITAsZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGJ5dGUgbGVuZ3RoIVwiKSxuZXcgVWludDhBcnJheSgwKTt2YXIgYj10aGlzLmJ5dGVzXy5zdWJhcnJheSh0aGlzLmN1cnNvcl8sdGhpcy5jdXJzb3JfK2EpO3RoaXMuY3Vyc29yXys9YTtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKTtyZXR1cm4gYn07anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luSGFzaDY0KX07XG5qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfLGI9dGhpcy5jdXJzb3JfLGM9YVtiKzBdLGQ9YVtiKzFdLGU9YVtiKzJdLGY9YVtiKzNdLGc9YVtiKzRdLGg9YVtiKzVdLGs9YVtiKzZdO2E9YVtiKzddO3RoaXMuY3Vyc29yXys9ODtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjLGQsZSxmLGcsaCxrLGEpfTtqc3BiLkJpbmFyeVJlYWRlcj1mdW5jdGlvbihhLGIsYyl7dGhpcy5kZWNvZGVyXz1qc3BiLkJpbmFyeURlY29kZXIuYWxsb2MoYSxiLGMpO3RoaXMuZmllbGRDdXJzb3JfPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk7dGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSO3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEO3RoaXMuZXJyb3JfPSExO3RoaXMucmVhZENhbGxiYWNrc189bnVsbH07anNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV89W107XG5qc3BiLkJpbmFyeVJlYWRlci5hbGxvYz1mdW5jdGlvbihhLGIsYyl7aWYoanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgZD1qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTthJiZkLmRlY29kZXJfLnNldEJsb2NrKGEsYixjKTtyZXR1cm4gZH1yZXR1cm4gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGEsYixjKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmFsbG9jPWpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jO1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLmNsZWFyKCk7dGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSO3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEO3RoaXMuZXJyb3JfPSExO3RoaXMucmVhZENhbGxiYWNrc189bnVsbDsxMDA+anNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoJiZqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0RmllbGRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZEN1cnNvcl99O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZE51bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRGaWVsZF99O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRXaXJlVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV99O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5pc0RlbGltaXRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRH07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmlzRW5kR3JvdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVB9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHx0aGlzLmRlY29kZXJfLmdldEVycm9yKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5zZXRCbG9jaz1mdW5jdGlvbihhLGIsYyl7dGhpcy5kZWNvZGVyXy5zZXRCbG9jayhhLGIsYyk7dGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSO3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnJlc2V0KCk7dGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSO3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUubmV4dEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5kZWNvZGVyXy5hdEVuZCgpKXJldHVybiExO2lmKHRoaXMuZ2V0RXJyb3IoKSlyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJEZWNvZGVyIGhpdCBhbiBlcnJvclwiKSwhMTt0aGlzLmZpZWxkQ3Vyc29yXz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpO3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSxiPWE+Pj4zO2EmPTc7aWYoYSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UJiZhIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyJiZhIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0JiZhIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQmJmEhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQJiZhIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApcmV0dXJuIGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGU6ICVzIChhdCBwb3NpdGlvbiAlcylcIixcbmEsdGhpcy5maWVsZEN1cnNvcl8pLHRoaXMuZXJyb3JfPSEwLCExO3RoaXMubmV4dEZpZWxkXz1iO3RoaXMubmV4dFdpcmVUeXBlXz1hO3JldHVybiEwfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUudW5za2lwSGVhZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy51bnNraXBWYXJpbnQodGhpcy5uZXh0RmllbGRfPDwzfHRoaXMubmV4dFdpcmVUeXBlXyl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwTWF0Y2hpbmdGaWVsZHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5leHRGaWVsZF87Zm9yKHRoaXMudW5za2lwSGVhZGVyKCk7dGhpcy5uZXh0RmllbGQoKSYmdGhpcy5nZXRGaWVsZE51bWJlcigpPT1hOyl0aGlzLnNraXBGaWVsZCgpO3RoaXMuZGVjb2Rlcl8uYXRFbmQoKXx8dGhpcy51bnNraXBIZWFkZXIoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcFZhcmludEZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQ/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBWYXJpbnRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLnNraXBWYXJpbnQoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBEZWxpbWl0ZWRGaWVsZD1mdW5jdGlvbigpe2lmKHRoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKWdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBEZWxpbWl0ZWRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpO2Vsc2V7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX19O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBGaXhlZDMyRmllbGQ9ZnVuY3Rpb24oKXt0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzI/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDMyRmllbGRcIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5hZHZhbmNlKDQpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkNjRGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2ND8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkNjRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoOCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBHcm91cD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztkb3tpZighdGhpcy5uZXh0RmllbGQoKSl7Z29vZy5hc3NlcnRzLmZhaWwoXCJVbm1hdGNoZWQgc3RhcnQtZ3JvdXAgdGFnOiBzdHJlYW0gRU9GXCIpO3RoaXMuZXJyb3JfPSEwO2JyZWFrfWlmKHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKXt0aGlzLm5leHRGaWVsZF8hPWEmJihnb29nLmFzc2VydHMuZmFpbChcIlVubWF0Y2hlZCBlbmQtZ3JvdXAgdGFnXCIpLHRoaXMuZXJyb3JfPSEwKTticmVha310aGlzLnNraXBGaWVsZCgpfXdoaWxlKDEpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRmllbGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5uZXh0V2lyZVR5cGVfKXtjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVDp0aGlzLnNraXBWYXJpbnRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NDp0aGlzLnNraXBGaXhlZDY0RmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRDp0aGlzLnNraXBEZWxpbWl0ZWRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMjp0aGlzLnNraXBGaXhlZDMyRmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQOnRoaXMuc2tpcEdyb3VwKCk7YnJlYWs7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSBlbmNvZGluZyBmb3IgZmllbGQuXCIpfX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVnaXN0ZXJSZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXtudWxsPT09dGhpcy5yZWFkQ2FsbGJhY2tzXyYmKHRoaXMucmVhZENhbGxiYWNrc189e30pO2dvb2cuYXNzZXJ0cy5hc3NlcnQoIXRoaXMucmVhZENhbGxiYWNrc19bYV0pO3RoaXMucmVhZENhbGxiYWNrc19bYV09Yn07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJ1blJlYWRDYWxsYmFjaz1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPT10aGlzLnJlYWRDYWxsYmFja3NfKTthPXRoaXMucmVhZENhbGxiYWNrc19bYV07Z29vZy5hc3NlcnRzLmFzc2VydChhKTtyZXR1cm4gYSh0aGlzKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEFueT1mdW5jdGlvbihhKXt0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlVG9XaXJlVHlwZShhKTt2YXIgYj1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU7c3dpdGNoKGEpe2Nhc2UgYi5ET1VCTEU6cmV0dXJuIHRoaXMucmVhZERvdWJsZSgpO2Nhc2UgYi5GTE9BVDpyZXR1cm4gdGhpcy5yZWFkRmxvYXQoKTtjYXNlIGIuSU5UNjQ6cmV0dXJuIHRoaXMucmVhZEludDY0KCk7Y2FzZSBiLlVJTlQ2NDpyZXR1cm4gdGhpcy5yZWFkVWludDY0KCk7Y2FzZSBiLklOVDMyOnJldHVybiB0aGlzLnJlYWRJbnQzMigpO2Nhc2UgYi5GSVhFRDY0OnJldHVybiB0aGlzLnJlYWRGaXhlZDY0KCk7Y2FzZSBiLkZJWEVEMzI6cmV0dXJuIHRoaXMucmVhZEZpeGVkMzIoKTtjYXNlIGIuQk9PTDpyZXR1cm4gdGhpcy5yZWFkQm9vbCgpO2Nhc2UgYi5TVFJJTkc6cmV0dXJuIHRoaXMucmVhZFN0cmluZygpO1xuY2FzZSBiLkdST1VQOmdvb2cuYXNzZXJ0cy5mYWlsKFwiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIGIuTUVTU0FHRTpnb29nLmFzc2VydHMuZmFpbChcIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIGIuQllURVM6cmV0dXJuIHRoaXMucmVhZEJ5dGVzKCk7Y2FzZSBiLlVJTlQzMjpyZXR1cm4gdGhpcy5yZWFkVWludDMyKCk7Y2FzZSBiLkVOVU06cmV0dXJuIHRoaXMucmVhZEVudW0oKTtjYXNlIGIuU0ZJWEVEMzI6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDMyKCk7Y2FzZSBiLlNGSVhFRDY0OnJldHVybiB0aGlzLnJlYWRTZml4ZWQ2NCgpO2Nhc2UgYi5TSU5UMzI6cmV0dXJuIHRoaXMucmVhZFNpbnQzMigpO2Nhc2UgYi5TSU5UNjQ6cmV0dXJuIHRoaXMucmVhZFNpbnQ2NCgpO2Nhc2UgYi5GSEFTSDY0OnJldHVybiB0aGlzLnJlYWRGaXhlZEhhc2g2NCgpO2Nhc2UgYi5WSEFTSDY0OnJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQoKTtcbmRlZmF1bHQ6Z29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gcmVhZEFueSgpXCIpfXJldHVybiAwfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgYz10aGlzLmRlY29kZXJfLmdldEVuZCgpLGQ9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO2Q9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKStkO3RoaXMuZGVjb2Rlcl8uc2V0RW5kKGQpO2IoYSx0aGlzKTt0aGlzLmRlY29kZXJfLnNldEN1cnNvcihkKTt0aGlzLmRlY29kZXJfLnNldEVuZChjKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEdyb3VwPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApO2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0RmllbGRfPT1hKTtjKGIsdGhpcyk7dGhpcy5lcnJvcl98fHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQfHwoZ29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBzdWJtZXNzYWdlIGRpZCBub3QgZW5kIHdpdGggYW4gRU5EX0dST1VQIHRhZ1wiKSx0aGlzLmVycm9yXz0hMCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkRGVjb2Rlcj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSxiPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCksYz1iK2E7YT1qc3BiLkJpbmFyeURlY29kZXIuYWxsb2ModGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKSxiLGEpO3RoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKGMpO3JldHVybiBhfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZygpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0PWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQzMj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCgpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50MzI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50MzIoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50NjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQ2NFN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZygpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkMzI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQzMigpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkNjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NCgpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkMzI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkMzJTdHJpbmc9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCkudG9TdHJpbmcoKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0PWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCgpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZygpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCgpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWREb3VibGUoKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRCb29sPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuISF0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRW51bT1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTdHJpbmcoYSl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQnl0ZXM9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEJ5dGVzKGEpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCgpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50SGFzaDY0KCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRWYXJpbnQ2NChhKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0VmFyaW50NjQoZnVuY3Rpb24oYixjKXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQoYixjLGEpfSl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTcGxpdEZpeGVkNjQoYSl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRmllbGRfPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBiPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtiPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkrYjtmb3IodmFyIGM9W107dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTxiOyljLnB1c2goYS5jYWxsKHRoaXMuZGVjb2Rlcl8pKTtyZXR1cm4gY307XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMil9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZyl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZyl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcpfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMil9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZyl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKX07XG5qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKX07anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50MzIpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCl9O1xuanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50NjRTdHJpbmcpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCl9O2pzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWREb3VibGUpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEJvb2wpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEVudW0pfTtcbmpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQpfTtqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCl9O2pzcGIuQmluYXJ5RW5jb2Rlcj1mdW5jdGlvbigpe3RoaXMuYnVmZmVyXz1bXX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aH07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ1ZmZlcl87dGhpcy5idWZmZXJfPVtdO3JldHVybiBhfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGI9PU1hdGguZmxvb3IoYikpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpO2Zvcihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTswPGJ8fDEyNzxhOyl0aGlzLmJ1ZmZlcl8ucHVzaChhJjEyN3wxMjgpLGE9KGE+Pj43fGI8PDI1KT4+PjAsYj4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGEpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYj09TWF0aC5mbG9vcihiKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1iJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7dGhpcy53cml0ZVVpbnQzMihhKTt0aGlzLndyaXRlVWludDMyKGIpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpOzEyNzxhOyl0aGlzLmJ1ZmZlcl8ucHVzaChhJjEyN3wxMjgpLGE+Pj49Nzt0aGlzLmJ1ZmZlcl8ucHVzaChhKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKTtpZigwPD1hKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKGEpO2Vsc2V7Zm9yKHZhciBiPTA7OT5iO2IrKyl0aGlzLmJ1ZmZlcl8ucHVzaChhJjEyN3wxMjgpLGE+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKDEpfX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YSYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpO2pzcGIudXRpbHMuc3BsaXRJbnQ2NChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydChhPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Myk7anNwYi51dGlscy5zcGxpdEludDY0KGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKTt0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoYTw8MV5hPj4zMSk+Pj4wKX07anNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydChhPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Myk7anNwYi51dGlscy5zcGxpdFppZ3phZzY0KGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSl7dGhpcy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChhKSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGEpO2pzcGIudXRpbHMudG9aaWd6YWc2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCxmdW5jdGlvbihhLGQpe2Iud3JpdGVTcGxpdFZhcmludDY0KGE+Pj4wLGQ+Pj4wKX0pfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OD1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9YSYmMjU2PmEpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MTY9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWEmJjY1NTM2PmEpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDMyPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4xNiYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4yNCYyNTUpfTtqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDY0PWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD1hJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCk7anNwYi51dGlscy5zcGxpdFVpbnQ2NChhKTt0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoLTEyODw9YSYmMTI4PmEpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQxNj1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoLTMyNzY4PD1hJiYzMjc2OD5hKTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT09TWF0aC5mbG9vcihhKSk7Z29vZy5hc3NlcnRzLmFzc2VydChhPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZhPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4xNiYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4yNCYyNTUpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2ND1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KGE9PU1hdGguZmxvb3IoYSkpO2dvb2cuYXNzZXJ0cy5hc3NlcnQoYT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpO2pzcGIudXRpbHMuc3BsaXRJbnQ2NChhKTt0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KCthPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiYrYTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpO2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoYSkpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfTtcbmpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVGbG9hdD1mdW5jdGlvbihhKXtnb29nLmFzc2VydHMuYXNzZXJ0KEluZmluaXR5PT09YXx8LUluZmluaXR5PT09YXx8aXNOYU4oYSl8fGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCYmYTw9anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpO2pzcGIudXRpbHMuc3BsaXRGbG9hdDMyKGEpO3RoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KX07XG5qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoSW5maW5pdHk9PT1hfHwtSW5maW5pdHk9PT1hfHxpc05hTihhKXx8YT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYJiZhPD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCk7anNwYi51dGlscy5zcGxpdEZsb2F0NjQoYSk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpO3RoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGEpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PT10eXBlb2YgYXx8XCJudW1iZXJcIj09PXR5cGVvZiBhKTt0aGlzLmJ1ZmZlcl8ucHVzaChhPzE6MCl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUVudW09ZnVuY3Rpb24oYSl7Z29vZy5hc3NlcnRzLmFzc2VydChhPT1NYXRoLmZsb29yKGEpKTtnb29nLmFzc2VydHMuYXNzZXJ0KGE+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmE8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKTt0aGlzLndyaXRlU2lnbmVkVmFyaW50MzIoYSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCeXRlcz1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaC5hcHBseSh0aGlzLmJ1ZmZlcl8sYSl9O2pzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoYSk7dGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpO3RoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9O1xuanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5idWZmZXJfLmxlbmd0aCxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWEuY2hhckNvZGVBdChjKTtpZigxMjg+ZCl0aGlzLmJ1ZmZlcl8ucHVzaChkKTtlbHNlIGlmKDIwNDg+ZCl0aGlzLmJ1ZmZlcl8ucHVzaChkPj42fDE5MiksdGhpcy5idWZmZXJfLnB1c2goZCY2M3wxMjgpO2Vsc2UgaWYoNjU1MzY+ZClpZig1NTI5Njw9ZCYmNTYzMTk+PWQmJmMrMTxhLmxlbmd0aCl7dmFyIGU9YS5jaGFyQ29kZUF0KGMrMSk7NTYzMjA8PWUmJjU3MzQzPj1lJiYoZD0xMDI0KihkLTU1Mjk2KStlLTU2MzIwKzY1NTM2LHRoaXMuYnVmZmVyXy5wdXNoKGQ+PjE4fDI0MCksdGhpcy5idWZmZXJfLnB1c2goZD4+MTImNjN8MTI4KSx0aGlzLmJ1ZmZlcl8ucHVzaChkPj42JjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goZCY2M3wxMjgpLGMrKyl9ZWxzZSB0aGlzLmJ1ZmZlcl8ucHVzaChkPj5cbjEyfDIyNCksdGhpcy5idWZmZXJfLnB1c2goZD4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGQmNjN8MTI4KX1yZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aC1ifTtqc3BiLmFyaXRoPXt9O2pzcGIuYXJpdGguVUludDY0PWZ1bmN0aW9uKGEsYil7dGhpcy5sbz1hO3RoaXMuaGk9Yn07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmNtcD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oaTxhLmhpfHx0aGlzLmhpPT1hLmhpJiZ0aGlzLmxvPGEubG8/LTE6dGhpcy5oaT09YS5oaSYmdGhpcy5sbz09YS5sbz8wOjF9O2pzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5yaWdodFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgodGhpcy5sbz4+PjF8KHRoaXMuaGkmMSk8PDMxKT4+PjAsdGhpcy5oaT4+PjE+Pj4wKX07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmxlZnRTaGlmdD1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbzw8MT4+PjAsKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKT4+PjApfTtcbmpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5tc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmhpJjIxNDc0ODM2NDgpfTtqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubHNiPWZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5sbyYxKX07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnplcm89ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5sbyYmMD09dGhpcy5oaX07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvK2EubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrYS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2EubG8/MTowKT4+PjApfTtcbmpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgodGhpcy5sby1hLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWEuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWEubG8/MTowKT4+PjApfTtqc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMj1mdW5jdGlvbihhLGIpe3ZhciBjPWEmNjU1MzU7YT4+Pj0xNjt2YXIgZD1iJjY1NTM1LGU9Yj4+PjE2O2I9YypkKzY1NTM2KihjKmUmNjU1MzUpKzY1NTM2KihhKmQmNjU1MzUpO2ZvcihjPWEqZSsoYyplPj4+MTYpKyhhKmQ+Pj4xNik7NDI5NDk2NzI5Njw9YjspYi09NDI5NDk2NzI5NixjKz0xO3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoYj4+PjAsYz4+PjApfTtcbmpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYSl7dmFyIGI9anNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzIodGhpcy5sbyxhKTthPWpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKHRoaXMuaGksYSk7YS5oaT1hLmxvO2EubG89MDtyZXR1cm4gYi5hZGQoYSl9O1xuanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtpZigwPT1hKXJldHVybltdO3ZhciBiPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLGM9bmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSk7YT1uZXcganNwYi5hcml0aC5VSW50NjQoYSwwKTtmb3IodmFyIGQ9bmV3IGpzcGIuYXJpdGguVUludDY0KDEsMCk7IWEubXNiKCk7KWE9YS5sZWZ0U2hpZnQoKSxkPWQubGVmdFNoaWZ0KCk7Zm9yKDshZC56ZXJvKCk7KTA+PWEuY21wKGMpJiYoYj1iLmFkZChkKSxjPWMuc3ViKGEpKSxhPWEucmlnaHRTaGlmdCgpLGQ9ZC5yaWdodFNoaWZ0KCk7cmV0dXJuW2IsY119O2pzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgYT1cIlwiLGI9dGhpczshYi56ZXJvKCk7KXtiPWIuZGl2KDEwKTt2YXIgYz1iWzBdO2E9YlsxXS5sbythO2I9Y31cIlwiPT1hJiYoYT1cIjBcIik7cmV0dXJuIGF9O1xuanNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZz1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCksYz1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxkPTA7ZDxhLmxlbmd0aDtkKyspe2lmKFwiMFwiPmFbZF18fFwiOVwiPGFbZF0pcmV0dXJuIG51bGw7dmFyIGU9cGFyc2VJbnQoYVtkXSwxMCk7Yy5sbz1lO2I9Yi5tdWwoMTApLmFkZChjKX1yZXR1cm4gYn07anNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpfTtqc3BiLmFyaXRoLkludDY0PWZ1bmN0aW9uKGEsYil7dGhpcy5sbz1hO3RoaXMuaGk9Yn07XG5qc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KCh0aGlzLmxvK2EubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrYS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2EubG8/MTowKT4+PjApfTtqc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KCh0aGlzLmxvLWEubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktYS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tYS5sbz8xOjApPj4+MCl9O2pzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KHRoaXMubG8sdGhpcy5oaSl9O1xuanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0wIT0odGhpcy5oaSYyMTQ3NDgzNjQ4KSxiPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpO2EmJihiPShuZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSkuc3ViKGIpKTtyZXR1cm4oYT9cIi1cIjpcIlwiKStiLnRvU3RyaW5nKCl9O2pzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj0wPGEubGVuZ3RoJiZcIi1cIj09YVswXTtiJiYoYT1hLnN1YnN0cmluZygxKSk7YT1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGEpO2lmKG51bGw9PT1hKXJldHVybiBudWxsO2ImJihhPShuZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSkuc3ViKGEpKTtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoYS5sbyxhLmhpKX07anNwYi5CaW5hcnlXcml0ZXI9ZnVuY3Rpb24oKXt0aGlzLmJsb2Nrc189W107dGhpcy50b3RhbExlbmd0aF89MDt0aGlzLmVuY29kZXJfPW5ldyBqc3BiLkJpbmFyeUVuY29kZXI7dGhpcy5ib29rbWFya3NfPVtdfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYXBwZW5kVWludDhBcnJheV89ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbmNvZGVyXy5lbmQoKTt0aGlzLmJsb2Nrc18ucHVzaChiKTt0aGlzLmJsb2Nrc18ucHVzaChhKTt0aGlzLnRvdGFsTGVuZ3RoXys9Yi5sZW5ndGgrYS5sZW5ndGh9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmJlZ2luRGVsaW1pdGVkXz1mdW5jdGlvbihhKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTthPXRoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy5ibG9ja3NfLnB1c2goYSk7dGhpcy50b3RhbExlbmd0aF8rPWEubGVuZ3RoO2EucHVzaCh0aGlzLnRvdGFsTGVuZ3RoXyk7cmV0dXJuIGF9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmREZWxpbWl0ZWRfPWZ1bmN0aW9uKGEpe3ZhciBiPWEucG9wKCk7Yj10aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpLWI7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9Yik7MTI3PGI7KWEucHVzaChiJjEyN3wxMjgpLGI+Pj49Nyx0aGlzLnRvdGFsTGVuZ3RoXysrO2EucHVzaChiKTt0aGlzLnRvdGFsTGVuZ3RoXysrfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGEuc3ViYXJyYXkoYixjKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5tYXliZVdyaXRlU2VyaWFsaXplZE1lc3NhZ2U9ZnVuY3Rpb24oYSxiLGMpe251bGwhPWEmJm51bGwhPWImJm51bGwhPWMmJnRoaXMud3JpdGVTZXJpYWxpemVkTWVzc2FnZShhLGIsYyl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXTt0aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMudG90YWxMZW5ndGhfPTA7dGhpcy5ib29rbWFya3NfPVtdfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5nZXRSZXN1bHRCdWZmZXI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA9PXRoaXMuYm9va21hcmtzXy5sZW5ndGgpO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpKSxiPXRoaXMuYmxvY2tzXyxjPWIubGVuZ3RoLGQ9MCxlPTA7ZTxjO2UrKyl7dmFyIGY9YltlXTthLnNldChmLGQpO2QrPWYubGVuZ3RofWI9dGhpcy5lbmNvZGVyXy5lbmQoKTthLnNldChiLGQpO2QrPWIubGVuZ3RoO2dvb2cuYXNzZXJ0cy5hc3NlcnQoZD09YS5sZW5ndGgpO3RoaXMuYmxvY2tzXz1bYV07cmV0dXJuIGF9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5nZXRSZXN1bHRCYXNlNjRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheSh0aGlzLmdldFJlc3VsdEJ1ZmZlcigpLGEpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5iZWdpblN1Yk1lc3NhZ2U9ZnVuY3Rpb24oYSl7dGhpcy5ib29rbWFya3NfLnB1c2godGhpcy5iZWdpbkRlbGltaXRlZF8oYSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZW5kU3ViTWVzc2FnZT1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dGhpcy5ib29rbWFya3NfLmxlbmd0aCk7dGhpcy5lbmREZWxpbWl0ZWRfKHRoaXMuYm9va21hcmtzXy5wb3AoKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpZWxkSGVhZGVyXz1mdW5jdGlvbihhLGIpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMTw9YSYmYT09TWF0aC5mbG9vcihhKSk7dGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCphK2IpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUFueT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlO3N3aXRjaChhKXtjYXNlIGQuRE9VQkxFOnRoaXMud3JpdGVEb3VibGUoYixjKTticmVhaztjYXNlIGQuRkxPQVQ6dGhpcy53cml0ZUZsb2F0KGIsYyk7YnJlYWs7Y2FzZSBkLklOVDY0OnRoaXMud3JpdGVJbnQ2NChiLGMpO2JyZWFrO2Nhc2UgZC5VSU5UNjQ6dGhpcy53cml0ZVVpbnQ2NChiLGMpO2JyZWFrO2Nhc2UgZC5JTlQzMjp0aGlzLndyaXRlSW50MzIoYixjKTticmVhaztjYXNlIGQuRklYRUQ2NDp0aGlzLndyaXRlRml4ZWQ2NChiLGMpO2JyZWFrO2Nhc2UgZC5GSVhFRDMyOnRoaXMud3JpdGVGaXhlZDMyKGIsYyk7YnJlYWs7Y2FzZSBkLkJPT0w6dGhpcy53cml0ZUJvb2woYixjKTticmVhaztjYXNlIGQuU1RSSU5HOnRoaXMud3JpdGVTdHJpbmcoYixjKTticmVhaztjYXNlIGQuR1JPVVA6Z29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKVwiKTtcbmJyZWFrO2Nhc2UgZC5NRVNTQUdFOmdvb2cuYXNzZXJ0cy5mYWlsKFwiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKVwiKTticmVhaztjYXNlIGQuQllURVM6dGhpcy53cml0ZUJ5dGVzKGIsYyk7YnJlYWs7Y2FzZSBkLlVJTlQzMjp0aGlzLndyaXRlVWludDMyKGIsYyk7YnJlYWs7Y2FzZSBkLkVOVU06dGhpcy53cml0ZUVudW0oYixjKTticmVhaztjYXNlIGQuU0ZJWEVEMzI6dGhpcy53cml0ZVNmaXhlZDMyKGIsYyk7YnJlYWs7Y2FzZSBkLlNGSVhFRDY0OnRoaXMud3JpdGVTZml4ZWQ2NChiLGMpO2JyZWFrO2Nhc2UgZC5TSU5UMzI6dGhpcy53cml0ZVNpbnQzMihiLGMpO2JyZWFrO2Nhc2UgZC5TSU5UNjQ6dGhpcy53cml0ZVNpbnQ2NChiLGMpO2JyZWFrO2Nhc2UgZC5GSEFTSDY0OnRoaXMud3JpdGVGaXhlZEhhc2g2NChiLGMpO2JyZWFrO2Nhc2UgZC5WSEFTSDY0OnRoaXMud3JpdGVWYXJpbnRIYXNoNjQoYixjKTticmVhaztkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBmaWVsZCB0eXBlIGluIHdyaXRlQW55KClcIil9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50MzJfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50MzJfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzJfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0Xz1mdW5jdGlvbihhLGIpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXz1mdW5jdGlvbihhLGIpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmcoYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjRfPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oYSxiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGI9cGFyc2VJbnQoYiwxMCksZ29vZy5hc3NlcnRzLmFzc2VydChiPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhhLGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KGI+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGEsYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe251bGwhPWImJihiPWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyhiKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChiLmxvLGIuaGkpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1iJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGEsYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYj1wYXJzZUludChiLDEwKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oYSxiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQ2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oYSxiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGI9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyhiKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChiLmxvLGIuaGkpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDMyPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oYSxiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDY0PWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oYSxiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiZ0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhhLGIpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiZ0aGlzLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfKGEsYil9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQzMj1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWImJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMihiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1iJiZiPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQoYikpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYj1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KGIubG8sYi5oaSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQzMj1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KGI+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQ2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KGI+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmI8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KGIpKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoYj1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcoYiksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYi5sbyxiLmhpKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmxvYXQ9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdChiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZURvdWJsZT1mdW5jdGlvbihhLGIpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZShiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQm9vbD1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KFwiYm9vbGVhblwiPT09dHlwZW9mIGJ8fFwibnVtYmVyXCI9PT10eXBlb2YgYiksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZUJvb2woYikpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVFbnVtPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoYj49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmYjxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihiKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGEsYil7bnVsbCE9YiYmKGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSksdGhpcy5lbmNvZGVyXy53cml0ZVN0cmluZyhiKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVCeXRlcz1mdW5jdGlvbihhLGIpe251bGwhPWImJihiPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShiKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMihiLmxlbmd0aCksdGhpcy5hcHBlbmRVaW50OEFycmF5XyhiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2U9ZnVuY3Rpb24oYSxiLGMpe251bGwhPWImJihhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpLGMoYix0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2VTZXQ9ZnVuY3Rpb24oYSxiLGMpe251bGwhPWImJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMixqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihhKSxhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKDMpLGMoYix0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oYSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygxLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCkpfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUdyb3VwPWZ1bmN0aW9uKGEsYixjKXtudWxsIT1iJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSxjKGIsdGhpcyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihhLGIpe251bGwhPWImJihnb29nLmFzc2VydHMuYXNzZXJ0KDg9PWIubGVuZ3RoKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KGIpKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxiKXtudWxsIT1iJiYoZ29vZy5hc3NlcnRzLmFzc2VydCg4PT1iLmxlbmd0aCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVZhcmludEhhc2g2NChiKSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihhLGIsYyl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYixjKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChiLGMpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTt2YXIgZD10aGlzLmVuY29kZXJfO2pzcGIudXRpbHMudG9aaWd6YWc2NChiLGMsZnVuY3Rpb24oYSxiKXtkLndyaXRlU3BsaXRWYXJpbnQ2NChhPj4+MCxiPj4+MCl9KX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVJbnQzMlN0cmluZyhhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbCE9Yilmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGEsYyhiW2VdKSxkKGJbZV0pKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGEsYixjLGQpe2lmKG51bGwhPWIpZm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoYSxjKGJbZV0pLGQoYltlXSkpfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbCE9Yilmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl0aGlzLndyaXRlU3BsaXRaaWd6YWdWYXJpbnQ2NChhLGMoYltlXSksZChiW2VdKSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUludDY0U3RyaW5nKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVVaW50MzJTdHJpbmcoYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlVWludDY0U3RyaW5nKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlWmlnemFnVmFyaW50MzJfKGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50SGFzaDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhhLGJbY10pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUZpeGVkMzIoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlRml4ZWQ2NChhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVGaXhlZDY0U3RyaW5nKGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZVNmaXhlZDMyKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVTZml4ZWQ2NChhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlU2ZpeGVkNjRTdHJpbmcoYSxiW2NdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZsb2F0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlRmxvYXQoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWREb3VibGU9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVEb3VibGUoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCb29sPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLndyaXRlQm9vbChhLGJbY10pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEVudW09ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVFbnVtKGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVTdHJpbmcoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCeXRlcz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUJ5dGVzKGEsYltjXSl9O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkTWVzc2FnZT1mdW5jdGlvbihhLGIsYyl7aWYobnVsbCE9Yilmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7YyhiW2RdLHRoaXMpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRHcm91cD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbCE9Yilmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLGMoYltkXSx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy53cml0ZUZpeGVkSGFzaDY0KGEsYltjXSl9O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMud3JpdGVWYXJpbnRIYXNoNjQoYSxiW2NdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMlN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihwYXJzZUludChiW2NdLDEwKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50NjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbCE9Yil7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KGMoYltlXSksZChiW2VdKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihhLGIsYyxkKXtpZihudWxsIT1iKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGMoYltlXSksZChiW2VdKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEsYixjLGQpe2lmKG51bGwhPWIpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBlPXRoaXMuZW5jb2Rlcl8sZj0wO2Y8Yi5sZW5ndGg7ZisrKWpzcGIudXRpbHMudG9aaWd6YWc2NChjKGJbZl0pLGQoYltmXSksZnVuY3Rpb24oYSxiKXtlLndyaXRlU3BsaXRWYXJpbnQ2NChhPj4+MCxiPj4+MCl9KTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcoYltjXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoZC5sbyxkLmhpKX10aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMj1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGJbY10pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHBhcnNlSW50KGJbY10sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQ2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KGJbY10pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O2pzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGJbY10pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGQubG8sZC5oaSl9dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50MzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KGJbY10pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChiW2NdKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludEhhc2g2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDMyKGJbYV0pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDY0PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YiYmYi5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYi5sZW5ndGgpLGE9MDthPGIubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KGJbYV0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGJbYV0pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYy5sbyxjLmhpKX19O1xuanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCpiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQzMihiW2FdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NChiW2FdKX07XG5qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDY0U3RyaW5nKGJbYV0pfTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGbG9hdD1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGJbYV0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZERvdWJsZT1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZShiW2FdKX07anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkQm9vbD1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMihiLmxlbmd0aCksYT0wO2E8Yi5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVCb29sKGJbYV0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEVudW09ZnVuY3Rpb24oYSxiKXtpZihudWxsIT1iJiZiLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmVuY29kZXJfLndyaXRlRW51bShiW2NdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmIubGVuZ3RoKSxhPTA7YTxiLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KGJbYV0pfTtcbmpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFZhcmludEhhc2g2ND1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWImJmIubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQoYltjXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07anNwYi5NYXA9ZnVuY3Rpb24oYSxiKXt0aGlzLmFycl89YTt0aGlzLnZhbHVlQ3Rvcl89Yjt0aGlzLm1hcF89e307dGhpcy5hcnJDbGVhbj0hMDswPHRoaXMuYXJyXy5sZW5ndGgmJnRoaXMubG9hZEZyb21BcnJheV8oKX07anNwYi5NYXAucHJvdG90eXBlLmxvYWRGcm9tQXJyYXlfPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLmFycl8ubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy5hcnJfW2FdLGM9YlswXTt0aGlzLm1hcF9bYy50b1N0cmluZygpXT1uZXcganNwYi5NYXAuRW50cnlfKGMsYlsxXSl9dGhpcy5hcnJDbGVhbj0hMH07XG5qc3BiLk1hcC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe2lmKHRoaXMuYXJyQ2xlYW4pe2lmKHRoaXMudmFsdWVDdG9yXyl7dmFyIGE9dGhpcy5tYXBfLGI7Zm9yKGIgaW4gYSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSl7dmFyIGM9YVtiXS52YWx1ZVdyYXBwZXI7YyYmYy50b0FycmF5KCl9fX1lbHNle3RoaXMuYXJyXy5sZW5ndGg9MDthPXRoaXMuc3RyaW5nS2V5c18oKTthLnNvcnQoKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLm1hcF9bYVtiXV07KGM9ZC52YWx1ZVdyYXBwZXIpJiZjLnRvQXJyYXkoKTt0aGlzLmFycl8ucHVzaChbZC5rZXksZC52YWx1ZV0pfXRoaXMuYXJyQ2xlYW49ITB9cmV0dXJuIHRoaXMuYXJyX307XG5qc3BiLk1hcC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy50b0FycmF5KCksZD1bXSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMubWFwX1tjW2VdWzBdLnRvU3RyaW5nKCldO3RoaXMud3JhcEVudHJ5XyhmKTt2YXIgZz1mLnZhbHVlV3JhcHBlcjtnPyhnb29nLmFzc2VydHMuYXNzZXJ0KGIpLGQucHVzaChbZi5rZXksYihhLGcpXSkpOmQucHVzaChbZi5rZXksZi52YWx1ZV0pfXJldHVybiBkfTtqc3BiLk1hcC5mcm9tT2JqZWN0PWZ1bmN0aW9uKGEsYixjKXtiPW5ldyBqc3BiLk1hcChbXSxiKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YVtkXVswXSxmPWMoYVtkXVsxXSk7Yi5zZXQoZSxmKX1yZXR1cm4gYn07anNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXz1mdW5jdGlvbihhKXt0aGlzLmlkeF89MDt0aGlzLmFycl89YX07XG5qc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR4Xzx0aGlzLmFycl8ubGVuZ3RoP3tkb25lOiExLHZhbHVlOnRoaXMuYXJyX1t0aGlzLmlkeF8rK119Ontkb25lOiEwLHZhbHVlOnZvaWQgMH19O1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJihqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtqc3BiLk1hcC5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nS2V5c18oKS5sZW5ndGh9O2pzcGIuTWFwLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSExfTtcbmpzcGIuTWFwLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oYSl7YT1hLnRvU3RyaW5nKCk7dmFyIGI9dGhpcy5tYXBfLmhhc093blByb3BlcnR5KGEpO2RlbGV0ZSB0aGlzLm1hcF9bYV07dGhpcy5hcnJDbGVhbj0hMTtyZXR1cm4gYn07anNwYi5NYXAucHJvdG90eXBlLmdldEVudHJ5TGlzdD1mdW5jdGlvbigpe3ZhciBhPVtdLGI9dGhpcy5zdHJpbmdLZXlzXygpO2Iuc29ydCgpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD10aGlzLm1hcF9bYltjXV07YS5wdXNoKFtkLmtleSxkLnZhbHVlXSl9cmV0dXJuIGF9O2pzcGIuTWFwLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYj10aGlzLnN0cmluZ0tleXNfKCk7Yi5zb3J0KCk7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMubWFwX1tiW2NdXTthLnB1c2goW2Qua2V5LHRoaXMud3JhcEVudHJ5XyhkKV0pfXJldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhhKX07XG5qc3BiLk1hcC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdLGI9dGhpcy5zdHJpbmdLZXlzXygpO2Iuc29ydCgpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWEucHVzaCh0aGlzLm1hcF9bYltjXV0ua2V5KTtyZXR1cm4gbmV3IGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8oYSl9O2pzcGIuTWFwLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXRoaXMuc3RyaW5nS2V5c18oKTtiLnNvcnQoKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKylhLnB1c2godGhpcy53cmFwRW50cnlfKHRoaXMubWFwX1tiW2NdXSkpO3JldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhhKX07XG5qc3BiLk1hcC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuc3RyaW5nS2V5c18oKTtjLnNvcnQoKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9dGhpcy5tYXBfW2NbZF1dO2EuY2FsbChiLHRoaXMud3JhcEVudHJ5XyhlKSxlLmtleSx0aGlzKX19O2pzcGIuTWFwLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcganNwYi5NYXAuRW50cnlfKGEpO3RoaXMudmFsdWVDdG9yXz8oYy52YWx1ZVdyYXBwZXI9YixjLnZhbHVlPWIudG9BcnJheSgpKTpjLnZhbHVlPWI7dGhpcy5tYXBfW2EudG9TdHJpbmcoKV09Yzt0aGlzLmFyckNsZWFuPSExO3JldHVybiB0aGlzfTtqc3BiLk1hcC5wcm90b3R5cGUud3JhcEVudHJ5Xz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhhLnZhbHVlV3JhcHBlcnx8KGEudmFsdWVXcmFwcGVyPW5ldyB0aGlzLnZhbHVlQ3Rvcl8oYS52YWx1ZSkpLGEudmFsdWVXcmFwcGVyKTphLnZhbHVlfTtcbmpzcGIuTWFwLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLm1hcF9bYS50b1N0cmluZygpXSlyZXR1cm4gdGhpcy53cmFwRW50cnlfKGEpfTtqc3BiLk1hcC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKClpbiB0aGlzLm1hcF99O2pzcGIuTWFwLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj10aGlzLnN0cmluZ0tleXNfKCk7Zi5zb3J0KCk7Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMubWFwX1tmW2ddXTtiLmJlZ2luU3ViTWVzc2FnZShhKTtjLmNhbGwoYiwxLGgua2V5KTt0aGlzLnZhbHVlQ3Rvcl8/ZC5jYWxsKGIsMix0aGlzLndyYXBFbnRyeV8oaCksZSk6ZC5jYWxsKGIsMixoLnZhbHVlKTtiLmVuZFN1Yk1lc3NhZ2UoKX19O1xuanNwYi5NYXAuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7Zm9yKDtiLm5leHRGaWVsZCgpJiYhYi5pc0VuZEdyb3VwKCk7KXt2YXIgaD1iLmdldEZpZWxkTnVtYmVyKCk7MT09aD9mPWMuY2FsbChiKToyPT1oJiYoYS52YWx1ZUN0b3JfPyhnb29nLmFzc2VydHMuYXNzZXJ0KGUpLGd8fChnPW5ldyBhLnZhbHVlQ3Rvcl8pLGQuY2FsbChiLGcsZSkpOmc9ZC5jYWxsKGIpKX1nb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMCE9Zik7Z29vZy5hc3NlcnRzLmFzc2VydCh2b2lkIDAhPWcpO2Euc2V0KGYsZyl9O2pzcGIuTWFwLnByb3RvdHlwZS5zdHJpbmdLZXlzXz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFwXyxiPVtdLGM7Zm9yKGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmYi5wdXNoKGMpO3JldHVybiBifTtcbmpzcGIuTWFwLkVudHJ5Xz1mdW5jdGlvbihhLGIpe3RoaXMua2V5PWE7dGhpcy52YWx1ZT1iO3RoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH07anNwYi5FeHRlbnNpb25GaWVsZEluZm89ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmZpZWxkSW5kZXg9YTt0aGlzLmZpZWxkTmFtZT1iO3RoaXMuY3Rvcj1jO3RoaXMudG9PYmplY3RGbj1kO3RoaXMuaXNSZXBlYXRlZD1lfTtqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5maWVsZEluZm89YTt0aGlzLmJpbmFyeVJlYWRlckZuPWI7dGhpcy5iaW5hcnlXcml0ZXJGbj1jO3RoaXMuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuPWQ7dGhpcy5iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbj1lO3RoaXMuaXNQYWNrZWQ9Zn07anNwYi5FeHRlbnNpb25GaWVsZEluZm8ucHJvdG90eXBlLmlzTWVzc2FnZVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY3Rvcn07anNwYi5NZXNzYWdlPWZ1bmN0aW9uKCl7fTtqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUPSEwO2pzcGIuTWVzc2FnZS5HRU5FUkFURV9GUk9NX09CSkVDVD0hZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERTtcbmpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19TVFJJTkc9ITA7anNwYi5NZXNzYWdlLkFTU1VNRV9MT0NBTF9BUlJBWVM9ITE7anNwYi5NZXNzYWdlLlNFUklBTElaRV9FTVBUWV9UUkFJTElOR19GSUVMRFM9ITA7anNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfPVwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXk7anNwYi5NZXNzYWdlLnByb3RvdHlwZS5nZXRKc1BiTWVzc2FnZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkX307anNwYi5NZXNzYWdlLmdldEluZGV4Xz1mdW5jdGlvbihhLGIpe3JldHVybiBiK2EuYXJyYXlJbmRleE9mZnNldF99O2pzcGIuTWVzc2FnZS5oaWRkZW5FUzZQcm9wZXJ0eV89ZnVuY3Rpb24oKXt9O2pzcGIuTWVzc2FnZS5nZXRGaWVsZE51bWJlcl89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi1hLmFycmF5SW5kZXhPZmZzZXRffTtcbmpzcGIuTWVzc2FnZS5pbml0aWFsaXplPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXthLndyYXBwZXJzXz1udWxsO2J8fChiPWM/W2NdOltdKTthLm1lc3NhZ2VJZF89Yz9TdHJpbmcoYyk6dm9pZCAwO2EuYXJyYXlJbmRleE9mZnNldF89MD09PWM/LTE6MDthLmFycmF5PWI7anNwYi5NZXNzYWdlLmluaXRQaXZvdEFuZEV4dGVuc2lvbk9iamVjdF8oYSxkKTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e307anNwYi5NZXNzYWdlLlNFUklBTElaRV9FTVBUWV9UUkFJTElOR19GSUVMRFN8fChhLnJlcGVhdGVkRmllbGRzPWUpO2lmKGUpZm9yKGI9MDtiPGUubGVuZ3RoO2IrKyljPWVbYl0sYzxhLnBpdm90Xz8oYz1qc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGEsYyksYS5hcnJheVtjXT1hLmFycmF5W2NdfHxqc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8pOihqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfKGEpLGEuZXh0ZW5zaW9uT2JqZWN0X1tjXT1cbmEuZXh0ZW5zaW9uT2JqZWN0X1tjXXx8anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfKTtpZihmJiZmLmxlbmd0aClmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKWpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKGEsZltiXSl9O2pzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz1nb29nLkRFQlVHJiZPYmplY3QuZnJlZXplP09iamVjdC5mcmVlemUoW10pOltdO2pzcGIuTWVzc2FnZS5pc0FycmF5Xz1mdW5jdGlvbihhKXtyZXR1cm4ganNwYi5NZXNzYWdlLkFTU1VNRV9MT0NBTF9BUlJBWVM/YSBpbnN0YW5jZW9mIEFycmF5OkFycmF5LmlzQXJyYXkoYSl9O2pzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmIWpzcGIuTWVzc2FnZS5pc0FycmF5XyhhKSYmIShqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KX07XG5qc3BiLk1lc3NhZ2UuaW5pdFBpdm90QW5kRXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuYXJyYXkubGVuZ3RoLGQ9LTE7aWYoYyYmKGQ9Yy0xLGM9YS5hcnJheVtkXSxqc3BiLk1lc3NhZ2UuaXNFeHRlbnNpb25PYmplY3RfKGMpKSl7YS5waXZvdF89anNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXyhhLGQpO2EuZXh0ZW5zaW9uT2JqZWN0Xz1jO3JldHVybn0tMTxiPyhhLnBpdm90Xz1NYXRoLm1heChiLGpzcGIuTWVzc2FnZS5nZXRGaWVsZE51bWJlcl8oYSxkKzEpKSxhLmV4dGVuc2lvbk9iamVjdF89bnVsbCk6YS5waXZvdF89TnVtYmVyLk1BWF9WQUxVRX07anNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihhKXt2YXIgYj1qc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGEsYS5waXZvdF8pO2EuYXJyYXlbYl18fChhLmV4dGVuc2lvbk9iamVjdF89YS5hcnJheVtiXT17fSl9O1xuanNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPWIuY2FsbChhW2VdLGMsYVtlXSk7cmV0dXJuIGR9O2pzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbj1mdW5jdGlvbihhLGIsYyxkLGUpe2Zvcih2YXIgZiBpbiBjKXt2YXIgZz1jW2ZdLGg9ZC5jYWxsKGEsZyk7aWYobnVsbCE9aCl7Zm9yKHZhciBrIGluIGcuZmllbGROYW1lKWlmKGcuZmllbGROYW1lLmhhc093blByb3BlcnR5KGspKWJyZWFrO2Jba109Zy50b09iamVjdEZuP2cuaXNSZXBlYXRlZD9qc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KGgsZy50b09iamVjdEZuLGUpOmcudG9PYmplY3RGbihlLGgpOmh9fX07XG5qc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucz1mdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGUgaW4gYyl7dmFyIGY9Y1tlXSxnPWYuZmllbGRJbmZvO2lmKCFmLmJpbmFyeVdyaXRlckZuKXRocm93IEVycm9yKFwiTWVzc2FnZSBleHRlbnNpb24gcHJlc2VudCB0aGF0IHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBiaW5hcnkgc2VyaWFsaXphdGlvbiBzdXBwb3J0XCIpO3ZhciBoPWQuY2FsbChhLGcpO2lmKG51bGwhPWgpaWYoZy5pc01lc3NhZ2VUeXBlKCkpaWYoZi5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4pZi5iaW5hcnlXcml0ZXJGbi5jYWxsKGIsZy5maWVsZEluZGV4LGgsZi5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4pO2Vsc2UgdGhyb3cgRXJyb3IoXCJNZXNzYWdlIGV4dGVuc2lvbiBwcmVzZW50IGhvbGRpbmcgc3VibWVzc2FnZSB3aXRob3V0IGJpbmFyeSBzdXBwb3J0IGVuYWJsZWQsIGFuZCBtZXNzYWdlIGlzIGJlaW5nIHNlcmlhbGl6ZWQgdG8gYmluYXJ5IGZvcm1hdFwiKTtcbmVsc2UgZi5iaW5hcnlXcml0ZXJGbi5jYWxsKGIsZy5maWVsZEluZGV4LGgpfX07anNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb249ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1jW2IuZ2V0RmllbGROdW1iZXIoKV07aWYoZil7Yz1mLmZpZWxkSW5mbztpZighZi5iaW5hcnlSZWFkZXJGbil0aHJvdyBFcnJvcihcIkRlc2VyaWFsaXppbmcgZXh0ZW5zaW9uIHdob3NlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90IHN1cHBvcnQgYmluYXJ5IGZvcm1hdFwiKTtpZihjLmlzTWVzc2FnZVR5cGUoKSl7dmFyIGc9bmV3IGMuY3RvcjtmLmJpbmFyeVJlYWRlckZuLmNhbGwoYixnLGYuYmluYXJ5TWVzc2FnZURlc2VyaWFsaXplRm4pfWVsc2UgZz1mLmJpbmFyeVJlYWRlckZuLmNhbGwoYik7Yy5pc1JlcGVhdGVkJiYhZi5pc1BhY2tlZD8oYj1kLmNhbGwoYSxjKSk/Yi5wdXNoKGcpOmUuY2FsbChhLGMsW2ddKTplLmNhbGwoYSxjLGcpfWVsc2UgYi5za2lwRmllbGQoKX07XG5qc3BiLk1lc3NhZ2UuZ2V0RmllbGQ9ZnVuY3Rpb24oYSxiKXtpZihiPGEucGl2b3RfKXtiPWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oYSxiKTt2YXIgYz1hLmFycmF5W2JdO3JldHVybiBjPT09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfP2EuYXJyYXlbYl09W106Y31pZihhLmV4dGVuc2lvbk9iamVjdF8pcmV0dXJuIGM9YS5leHRlbnNpb25PYmplY3RfW2JdLGM9PT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8/YS5leHRlbnNpb25PYmplY3RfW2JdPVtdOmN9O2pzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZChhLGIpfTtqc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQ9ZnVuY3Rpb24oYSxiKXthPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChhLGIpO3JldHVybiBudWxsPT1hP2E6K2F9O1xuanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZD1mdW5jdGlvbihhLGIpe2E9anNwYi5NZXNzYWdlLmdldEZpZWxkKGEsYik7cmV0dXJuIG51bGw9PWE/YTohIWF9O2pzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZD1mdW5jdGlvbihhLGIpe3ZhciBjPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGEsYik7YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KTtpZighYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW2JdKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdPStjW2RdO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1tiXT0hMH1yZXR1cm4gY307XG5qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sZWFuRmllbGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChhLGIpO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX3x8KGEuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSk7aWYoIWEuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1tiXSl7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXT0hIWNbZF07YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW2JdPSEwfXJldHVybiBjfTtcbmpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0PWZ1bmN0aW9uKGEpe2lmKG51bGw9PWF8fFwic3RyaW5nXCI9PT10eXBlb2YgYSlyZXR1cm4gYTtpZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoYSk7Z29vZy5hc3NlcnRzLmZhaWwoXCJDYW5ub3QgY29lcmNlIHRvIGI2NCBzdHJpbmc6IFwiK2dvb2cudHlwZU9mKGEpKTtyZXR1cm4gbnVsbH07anNwYi5NZXNzYWdlLmJ5dGVzQXNVOD1mdW5jdGlvbihhKXtpZihudWxsPT1hfHxhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gYTtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShhKTtnb29nLmFzc2VydHMuZmFpbChcIkNhbm5vdCBjb2VyY2UgdG8gVWludDhBcnJheTogXCIrZ29vZy50eXBlT2YoYSkpO3JldHVybiBudWxsfTtcbmpzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc0I2ND1mdW5jdGlvbihhKXtqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyhhKTtyZXR1cm4gYS5sZW5ndGgmJlwic3RyaW5nXCIhPT10eXBlb2YgYVswXT9nb29nLmFycmF5Lm1hcChhLGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KTphfTtqc3BiLk1lc3NhZ2UuYnl0ZXNMaXN0QXNVOD1mdW5jdGlvbihhKXtqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyhhKTtyZXR1cm4hYS5sZW5ndGh8fGFbMF1pbnN0YW5jZW9mIFVpbnQ4QXJyYXk/YTpnb29nLmFycmF5Lm1hcChhLGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgpfTtcbmpzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfPWZ1bmN0aW9uKGEpe2lmKGdvb2cuREVCVUcmJmEmJjE8YS5sZW5ndGgpe3ZhciBiPWdvb2cudHlwZU9mKGFbMF0pO2dvb2cuYXJyYXkuZm9yRWFjaChhLGZ1bmN0aW9uKGEpe2dvb2cudHlwZU9mKGEpIT1iJiZnb29nLmFzc2VydHMuZmFpbChcIkluY29uc2lzdGVudCB0eXBlIGluIEpTUEIgcmVwZWF0ZWQgZmllbGQgYXJyYXkuIEdvdCBcIitnb29nLnR5cGVPZihhKStcIiBleHBlY3RlZCBcIitiKX0pfX07anNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oYSxiLGMpe2E9anNwYi5NZXNzYWdlLmdldEZpZWxkKGEsYik7cmV0dXJuIG51bGw9PWE/YzphfTtqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oYSxiLGMpe2E9anNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZChhLGIpO3JldHVybiBudWxsPT1hP2M6YX07XG5qc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oYSxiLGMpe2E9anNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkKGEsYik7cmV0dXJuIG51bGw9PWE/YzphfTtqc3BiLk1lc3NhZ2UuZ2V0RmllbGRQcm90bzM9anNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQ7anNwYi5NZXNzYWdlLmdldE1hcEZpZWxkPWZ1bmN0aW9uKGEsYixjLGQpe2Eud3JhcHBlcnNffHwoYS53cmFwcGVyc189e30pO2lmKGIgaW4gYS53cmFwcGVyc18pcmV0dXJuIGEud3JhcHBlcnNfW2JdO3ZhciBlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChhLGIpO2lmKCFlKXtpZihjKXJldHVybjtlPVtdO2pzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGIsZSl9cmV0dXJuIGEud3JhcHBlcnNfW2JdPW5ldyBqc3BiLk1hcChlLGQpfTtcbmpzcGIuTWVzc2FnZS5zZXRGaWVsZD1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoYSxqc3BiLk1lc3NhZ2UpO2I8YS5waXZvdF8/YS5hcnJheVtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGEsYildPWM6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oYSksYS5leHRlbnNpb25PYmplY3RfW2JdPWMpO3JldHVybiBhfTtqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGEsYixjLDApfTtqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsMCl9O1xuanNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsITEpfTtqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGEsYixjLFwiXCIpfTtqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsXCJcIil9O2pzcGIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGEsYixjLDApfTtcbmpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdJbnRGaWVsZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oYSxiLGMsXCIwXCIpfTtqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfPWZ1bmN0aW9uKGEsYixjLGQpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGEsanNwYi5NZXNzYWdlKTtjIT09ZD9qc3BiLk1lc3NhZ2Uuc2V0RmllbGQoYSxiLGMpOmI8YS5waXZvdF8/YS5hcnJheVtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGEsYildPW51bGw6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oYSksZGVsZXRlIGEuZXh0ZW5zaW9uT2JqZWN0X1tiXSk7cmV0dXJuIGF9O1xuanNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZD1mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7Yj1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChhLGIpO3ZvaWQgMCE9ZD9iLnNwbGljZShkLDAsYyk6Yi5wdXNoKGMpO3JldHVybiBhfTtqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZD1mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7KGM9anNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UoYSxjKSkmJmMhPT1iJiZ2b2lkIDAhPT1kJiYoYS53cmFwcGVyc18mJmMgaW4gYS53cmFwcGVyc18mJihhLndyYXBwZXJzX1tjXT12b2lkIDApLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGMsdm9pZCAwKSk7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGIsZCl9O1xuanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2U9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZCxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPWJbZV0sZz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoYSxmKTtudWxsIT1nJiYoYz1mLGQ9Zyxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoYSxmLHZvaWQgMCkpfXJldHVybiBjPyhqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoYSxjLGQpLGMpOjB9O2pzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oYSxiLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2NdKXt2YXIgZT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoYSxjKTtpZihkfHxlKWEud3JhcHBlcnNfW2NdPW5ldyBiKGUpfXJldHVybiBhLndyYXBwZXJzX1tjXX07XG5qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oYSxiLGMpe2pzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF8oYSxiLGMpO2I9YS53cmFwcGVyc19bY107Yj09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfJiYoYj1hLndyYXBwZXJzX1tjXT1bXSk7cmV0dXJuIGJ9O2pzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF89ZnVuY3Rpb24oYSxiLGMpe2Eud3JhcHBlcnNffHwoYS53cmFwcGVyc189e30pO2lmKCFhLndyYXBwZXJzX1tjXSl7Zm9yKHZhciBkPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGEsYyksZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKyspZVtmXT1uZXcgYihkW2ZdKTthLndyYXBwZXJzX1tjXT1lfX07XG5qc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkPWZ1bmN0aW9uKGEsYixjKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7dmFyIGQ9Yz9jLnRvQXJyYXkoKTpjO2Eud3JhcHBlcnNfW2JdPWM7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGIsZCl9O2pzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZD1mdW5jdGlvbihhLGIsYyxkKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihhLGpzcGIuTWVzc2FnZSk7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7dmFyIGU9ZD9kLnRvQXJyYXkoKTpkO2Eud3JhcHBlcnNfW2JdPWQ7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKGEsYixjLGUpfTtcbmpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihhLGIsYyl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoYSxqc3BiLk1lc3NhZ2UpO2Eud3JhcHBlcnNffHwoYS53cmFwcGVyc189e30pO2M9Y3x8W107Zm9yKHZhciBkPVtdLGU9MDtlPGMubGVuZ3RoO2UrKylkW2VdPWNbZV0udG9BcnJheSgpO2Eud3JhcHBlcnNfW2JdPWM7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZChhLGIsZCl9O1xuanNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtqc3BiLk1lc3NhZ2Uud3JhcFJlcGVhdGVkRmllbGRfKGEsZCxiKTt2YXIgZj1hLndyYXBwZXJzX1tiXTtmfHwoZj1hLndyYXBwZXJzX1tiXT1bXSk7Yz1jP2M6bmV3IGQ7YT1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChhLGIpO3ZvaWQgMCE9ZT8oZi5zcGxpY2UoZSwwLGMpLGEuc3BsaWNlKGUsMCxjLnRvQXJyYXkoKSkpOihmLnB1c2goYyksYS5wdXNoKGMudG9BcnJheSgpKSk7cmV0dXJuIGN9O2pzcGIuTWVzc2FnZS50b01hcD1mdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9e30sZj0wO2Y8YS5sZW5ndGg7ZisrKWVbYi5jYWxsKGFbZl0pXT1jP2MuY2FsbChhW2ZdLGQsYVtmXSk6YVtmXTtyZXR1cm4gZX07XG5qc3BiLk1lc3NhZ2UucHJvdG90eXBlLnN5bmNNYXBGaWVsZHNfPWZ1bmN0aW9uKCl7aWYodGhpcy53cmFwcGVyc18pZm9yKHZhciBhIGluIHRoaXMud3JhcHBlcnNfKXt2YXIgYj10aGlzLndyYXBwZXJzX1thXTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10mJmJbY10udG9BcnJheSgpO2Vsc2UgYiYmYi50b0FycmF5KCl9fTtqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXl9O2pzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19TVFJJTkcmJihqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhpcy5zeW5jTWFwRmllbGRzXygpO3JldHVybiB0aGlzLmFycmF5LnRvU3RyaW5nKCl9KTtcbmpzcGIuTWVzc2FnZS5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZXh0ZW5zaW9uT2JqZWN0Xyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7dmFyIGI9YS5maWVsZEluZGV4O2lmKGEuaXNSZXBlYXRlZCl7aWYoYS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIHRoaXMud3JhcHBlcnNfW2JdfHwodGhpcy53cmFwcGVyc19bYl09Z29vZy5hcnJheS5tYXAodGhpcy5leHRlbnNpb25PYmplY3RfW2JdfHxbXSxmdW5jdGlvbihiKXtyZXR1cm4gbmV3IGEuY3RvcihiKX0pKSx0aGlzLndyYXBwZXJzX1tiXX1lbHNlIGlmKGEuaXNNZXNzYWdlVHlwZSgpKXJldHVybiF0aGlzLndyYXBwZXJzX1tiXSYmdGhpcy5leHRlbnNpb25PYmplY3RfW2JdJiYodGhpcy53cmFwcGVyc19bYl09bmV3IGEuY3Rvcih0aGlzLmV4dGVuc2lvbk9iamVjdF9bYl0pKSx0aGlzLndyYXBwZXJzX1tiXTtyZXR1cm4gdGhpcy5leHRlbnNpb25PYmplY3RfW2JdfX07XG5qc3BiLk1lc3NhZ2UucHJvdG90eXBlLnNldEV4dGVuc2lvbj1mdW5jdGlvbihhLGIpe3RoaXMud3JhcHBlcnNffHwodGhpcy53cmFwcGVyc189e30pO2pzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8odGhpcyk7dmFyIGM9YS5maWVsZEluZGV4O2EuaXNSZXBlYXRlZD8oYj1ifHxbXSxhLmlzTWVzc2FnZVR5cGUoKT8odGhpcy53cmFwcGVyc19bY109Yix0aGlzLmV4dGVuc2lvbk9iamVjdF9bY109Z29vZy5hcnJheS5tYXAoYixmdW5jdGlvbihhKXtyZXR1cm4gYS50b0FycmF5KCl9KSk6dGhpcy5leHRlbnNpb25PYmplY3RfW2NdPWIpOmEuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tjXT1iLHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tjXT1iP2IudG9BcnJheSgpOmIpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tjXT1iO3JldHVybiB0aGlzfTtcbmpzcGIuTWVzc2FnZS5kaWZmZXJlbmNlPWZ1bmN0aW9uKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYi5jb25zdHJ1Y3RvcikpdGhyb3cgRXJyb3IoXCJNZXNzYWdlcyBoYXZlIGRpZmZlcmVudCB0eXBlcy5cIik7dmFyIGM9YS50b0FycmF5KCk7Yj1iLnRvQXJyYXkoKTt2YXIgZD1bXSxlPTAsZj1jLmxlbmd0aD5iLmxlbmd0aD9jLmxlbmd0aDpiLmxlbmd0aDthLmdldEpzUGJNZXNzYWdlSWQoKSYmKGRbMF09YS5nZXRKc1BiTWVzc2FnZUlkKCksZT0xKTtmb3IoO2U8ZjtlKyspanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoY1tlXSxiW2VdKXx8KGRbZV09YltlXSk7cmV0dXJuIG5ldyBhLmNvbnN0cnVjdG9yKGQpfTtqc3BiLk1lc3NhZ2UuZXF1YWxzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PWJ8fCEoIWF8fCFiKSYmYSBpbnN0YW5jZW9mIGIuY29uc3RydWN0b3ImJmpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGEudG9BcnJheSgpLGIudG9BcnJheSgpKX07XG5qc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnM9ZnVuY3Rpb24oYSxiKXthPWF8fHt9O2I9Ynx8e307dmFyIGM9e30sZDtmb3IoZCBpbiBhKWNbZF09MDtmb3IoZCBpbiBiKWNbZF09MDtmb3IoZCBpbiBjKWlmKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhhW2RdLGJbZF0pKXJldHVybiExO3JldHVybiEwfTtcbmpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzPWZ1bmN0aW9uKGEsYil7aWYoYT09YilyZXR1cm4hMDtpZighZ29vZy5pc09iamVjdChhKXx8IWdvb2cuaXNPYmplY3QoYikpcmV0dXJuXCJudW1iZXJcIj09PXR5cGVvZiBhJiZpc05hTihhKXx8XCJudW1iZXJcIj09PXR5cGVvZiBiJiZpc05hTihiKT9TdHJpbmcoYSk9PVN0cmluZyhiKTohMTtpZihhLmNvbnN0cnVjdG9yIT1iLmNvbnN0cnVjdG9yKXJldHVybiExO2lmKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmYS5jb25zdHJ1Y3Rvcj09PVVpbnQ4QXJyYXkpe2lmKGEubGVuZ3RoIT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdIT1iW2NdKXJldHVybiExO3JldHVybiEwfWlmKGEuY29uc3RydWN0b3I9PT1BcnJheSl7dmFyIGQ9dm9pZCAwLGU9dm9pZCAwLGY9TWF0aC5tYXgoYS5sZW5ndGgsYi5sZW5ndGgpO2ZvcihjPTA7YzxmO2MrKyl7dmFyIGc9YVtjXSxoPWJbY107ZyYmXG5nLmNvbnN0cnVjdG9yPT1PYmplY3QmJihnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMD09PWQpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoYz09PWEubGVuZ3RoLTEpLGQ9ZyxnPXZvaWQgMCk7aCYmaC5jb25zdHJ1Y3Rvcj09T2JqZWN0JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh2b2lkIDA9PT1lKSxnb29nLmFzc2VydHMuYXNzZXJ0KGM9PT1iLmxlbmd0aC0xKSxlPWgsaD12b2lkIDApO2lmKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhnLGgpKXJldHVybiExfXJldHVybiBkfHxlPyhkPWR8fHt9LGU9ZXx8e30sanNwYi5NZXNzYWdlLmNvbXBhcmVFeHRlbnNpb25zKGQsZSkpOiEwfWlmKGEuY29uc3RydWN0b3I9PT1PYmplY3QpcmV0dXJuIGpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucyhhLGIpO3Rocm93IEVycm9yKFwiSW52YWxpZCB0eXBlIGluIEpTUEIgYXJyYXlcIik7fTtqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmNsb25lTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKHRoaXMpfTtcbmpzcGIuTWVzc2FnZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZSh0aGlzKX07anNwYi5NZXNzYWdlLmNsb25lPWZ1bmN0aW9uKGEpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKGEpfTtqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYS5jb25zdHJ1Y3Rvcihqc3BiLk1lc3NhZ2UuY2xvbmVfKGEudG9BcnJheSgpKSl9O1xuanNwYi5NZXNzYWdlLmNvcHlJbnRvPWZ1bmN0aW9uKGEsYil7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoYSxqc3BiLk1lc3NhZ2UpO2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGIsanNwYi5NZXNzYWdlKTtnb29nLmFzc2VydHMuYXNzZXJ0KGEuY29uc3RydWN0b3I9PWIuY29uc3RydWN0b3IsXCJDb3B5IHNvdXJjZSBhbmQgdGFyZ2V0IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgdHlwZS5cIik7YT1qc3BiLk1lc3NhZ2UuY2xvbmUoYSk7Zm9yKHZhciBjPWIudG9BcnJheSgpLGQ9YS50b0FycmF5KCksZT1jLmxlbmd0aD0wO2U8ZC5sZW5ndGg7ZSsrKWNbZV09ZFtlXTtiLndyYXBwZXJzXz1hLndyYXBwZXJzXztiLmV4dGVuc2lvbk9iamVjdF89YS5leHRlbnNpb25PYmplY3RffTtcbmpzcGIuTWVzc2FnZS5jbG9uZV89ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl7Zm9yKHZhciBiPUFycmF5KGEubGVuZ3RoKSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY107bnVsbCE9ZCYmKGJbY109XCJvYmplY3RcIj09dHlwZW9mIGQ/anNwYi5NZXNzYWdlLmNsb25lXyhnb29nLmFzc2VydHMuYXNzZXJ0KGQpKTpkKX1yZXR1cm4gYn1pZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtiPXt9O2ZvcihjIGluIGEpZD1hW2NdLG51bGwhPWQmJihiW2NdPVwib2JqZWN0XCI9PXR5cGVvZiBkP2pzcGIuTWVzc2FnZS5jbG9uZV8oZ29vZy5hc3NlcnRzLmFzc2VydChkKSk6ZCk7cmV0dXJuIGJ9O2pzcGIuTWVzc2FnZS5yZWdpc3Rlck1lc3NhZ2VUeXBlPWZ1bmN0aW9uKGEsYil7Yi5tZXNzYWdlSWQ9YX07anNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zPXt9O1xuanNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zQmluYXJ5PXt9O2pzcGIuRXhwb3J0PXt9O2V4cG9ydHMuTWFwPWpzcGIuTWFwO2V4cG9ydHMuTWVzc2FnZT1qc3BiLk1lc3NhZ2U7ZXhwb3J0cy5CaW5hcnlSZWFkZXI9anNwYi5CaW5hcnlSZWFkZXI7ZXhwb3J0cy5CaW5hcnlXcml0ZXI9anNwYi5CaW5hcnlXcml0ZXI7ZXhwb3J0cy5FeHRlbnNpb25GaWVsZEluZm89anNwYi5FeHRlbnNpb25GaWVsZEluZm87ZXhwb3J0cy5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm89anNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm87ZXhwb3J0cy5leHBvcnRTeW1ib2w9Z29vZy5leHBvcnRTeW1ib2w7ZXhwb3J0cy5pbmhlcml0cz1nb29nLmluaGVyaXRzO2V4cG9ydHMub2JqZWN0PXtleHRlbmQ6Z29vZy5vYmplY3QuZXh0ZW5kfTtleHBvcnRzLnR5cGVPZj1nb29nLnR5cGVPZjtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuQW55JywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnksIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnknO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuQW55fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB0eXBlVXJsOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHZhbHVlOiBtc2cuZ2V0VmFsdWVfYXNCNjQoKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnk7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnl9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRUeXBlVXJsKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnl9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VHlwZVVybCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlX2FzVTgoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZUJ5dGVzKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHR5cGVfdXJsID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNldFR5cGVVcmwgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDI7XG4gKiBAcmV0dXJuIHshKHN0cmluZ3xVaW50OEFycmF5KX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IShzdHJpbmd8VWludDhBcnJheSl9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgdmFsdWUgPSAyO1xuICogVGhpcyBpcyBhIHR5cGUtY29udmVyc2lvbiB3cmFwcGVyIGFyb3VuZCBgZ2V0VmFsdWUoKWBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNCNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQoXG4gICAgICB0aGlzLmdldFZhbHVlKCkpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDI7XG4gKiBOb3RlIHRoYXQgVWludDhBcnJheSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cbiAqIEBzZWUgaHR0cDovL2Nhbml1c2UuY29tL1VpbnQ4QXJyYXlcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldFZhbHVlKClgXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNVOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgoXG4gICAgICB0aGlzLmdldFZhbHVlKCkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnl9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUucHJvdG9idWYpO1xuLyogVGhpcyBjb2RlIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgY29kZSBmb3JcbiAqIGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8uICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBpZiBhbnkuXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5nZXRUeXBlTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRUeXBlVXJsKCkuc3BsaXQoJy8nKS5wb3AoKTtcbn07XG5cblxuLyoqXG4gKiBQYWNrcyB0aGUgZ2l2ZW4gbWVzc2FnZSBpbnN0YW5jZSBpbnRvIHRoaXMgQW55LlxuICogRm9yIGJpbmFyeSBmb3JtYXQgdXNhZ2Ugb25seS5cbiAqIEBwYXJhbSB7IVVpbnQ4QXJyYXl9IHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6ZWQgZGF0YSB0byBwYWNrLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGlzIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfdHlwZVVybFByZWZpeCB0aGUgdHlwZSBVUkwgcHJlZml4LlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5wYWNrID0gZnVuY3Rpb24oc2VyaWFsaXplZCwgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdHlwZVVybFByZWZpeCkge1xuICBpZiAoIW9wdF90eXBlVXJsUHJlZml4KSB7XG4gICAgb3B0X3R5cGVVcmxQcmVmaXggPSAndHlwZS5nb29nbGVhcGlzLmNvbS8nO1xuICB9XG5cbiAgaWYgKG9wdF90eXBlVXJsUHJlZml4LnN1YnN0cigtMSkgIT0gJy8nKSB7XG4gICAgdGhpcy5zZXRUeXBlVXJsKG9wdF90eXBlVXJsUHJlZml4ICsgJy8nICsgbmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zZXRUeXBlVXJsKG9wdF90eXBlVXJsUHJlZml4ICsgbmFtZSk7XG4gIH1cblxuICB0aGlzLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xufTtcblxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBVbnBhY2tzIHRoaXMgQW55IGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHtmdW5jdGlvbihVaW50OEFycmF5KTpUfSBkZXNlcmlhbGl6ZSBGdW5jdGlvbiB0aGF0IHdpbGwgZGVzZXJpYWxpemVcbiAqICAgICB0aGUgYmluYXJ5IGRhdGEgcHJvcGVybHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZXhwZWN0ZWQgdHlwZSBuYW1lIG9mIHRoaXMgbWVzc2FnZSBvYmplY3QuXG4gKiBAcmV0dXJuIHs/VH0gSWYgdGhlIG5hbWUgbWF0Y2hlZCB0aGUgZXhwZWN0ZWQgbmFtZSwgcmV0dXJucyB0aGUgZGVzZXJpYWxpemVkXG4gKiAgICAgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS51bnBhY2sgPSBmdW5jdGlvbihkZXNlcmlhbGl6ZSwgbmFtZSkge1xuICBpZiAodGhpcy5nZXRUeXBlTmFtZSgpID09IG5hbWUpIHtcbiAgICByZXR1cm4gZGVzZXJpYWxpemUodGhpcy5nZXRWYWx1ZV9hc1U4KCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuIiwiLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbycsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbicsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgNTAwLCBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkgPSB7fTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90byc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgNTAwLCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnkgPSB7fTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyc7XG59XG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qKlxuICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhIG1hcCBvZlxuICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0LlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1lOiAwfSwgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiAqXG4gKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGlsZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5IHNvIHRoYXQgaXRcbiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuICpcbiAqIEB0eXBlIHshT2JqZWN0PG51bWJlciwganNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMnO1xufVxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIDUwMCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zID0ge307XG5cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5ID0ge307XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCA1MDAsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zJztcbn1cblxuLyoqXG4gKiBUaGUgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHdpdGggdGhpcyBtZXNzYWdlIGNsYXNzLiBUaGlzIGlzIGEgbWFwIG9mXG4gKiBleHRlbnNpb24gZmllbGQgbnVtYmVyIHRvIGZpZWxkSW5mbyBvYmplY3QuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICAgeyAxMjM6IHtmaWVsZEluZGV4OiAxMjMsIGZpZWxkTmFtZToge215X2ZpZWxkX25hbWU6IDB9LCBjdG9yOiBwcm90by5leGFtcGxlLk15TWVzc2FnZX0gfVxuICpcbiAqIGZpZWxkTmFtZSBjb250YWlucyB0aGUgSnNDb21waWxlciByZW5hbWVkIGZpZWxkIG5hbWUgcHJvcGVydHkgc28gdGhhdCBpdFxuICogd29ya3MgaW4gT1BUSU1JWkVEIG1vZGUuXG4gKlxuICogQHR5cGUgeyFPYmplY3Q8bnVtYmVyLCBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKipcbiAqIFRoZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1lc3NhZ2UgY2xhc3MuIFRoaXMgaXMgYSBtYXAgb2ZcbiAqIGV4dGVuc2lvbiBmaWVsZCBudW1iZXIgdG8gZmllbGRJbmZvIG9iamVjdC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgICB7IDEyMzoge2ZpZWxkSW5kZXg6IDEyMywgZmllbGROYW1lOiB7bXlfZmllbGRfbmFtZTogMH0sIGN0b3I6IHByb3RvLmV4YW1wbGUuTXlNZXNzYWdlfSB9XG4gKlxuICogZmllbGROYW1lIGNvbnRhaW5zIHRoZSBKc0NvbXBpbGVyIHJlbmFtZWQgZmllbGQgbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IGl0XG4gKiB3b3JrcyBpbiBPUFRJTUlaRUQgbW9kZS5cbiAqXG4gKiBAdHlwZSB7IU9iamVjdDxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbiA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24nO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGZpbGVMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRGaWxlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldDtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEZpbGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEZpbGVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZSA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5nZXRGaWxlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXR9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5wcm90b3R5cGUuc2V0RmlsZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5hZGRGaWxlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LnByb3RvdHlwZS5jbGVhckZpbGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEZpbGVMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18gPSBbMywxMCwxMSw0LDUsNiw3XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHBiX3BhY2thZ2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGRlcGVuZGVuY3lMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgMykpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHB1YmxpY0RlcGVuZGVuY3lMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgMTApKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB3ZWFrRGVwZW5kZW5jeUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG1lc3NhZ2VUeXBlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0TWVzc2FnZVR5cGVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBlbnVtVHlwZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEVudW1UeXBlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIHNlcnZpY2VMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRTZXJ2aWNlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGV4dGVuc2lvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV4dGVuc2lvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBzb3VyY2VDb2RlSW5mbzogKGYgPSBtc2cuZ2V0U291cmNlQ29kZUluZm8oKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgc3ludGF4OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQYWNrYWdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkRGVwZW5kZW5jeSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkSW50MzIoKSA6IFtyZWFkZXIucmVhZEludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQdWJsaWNEZXBlbmRlbmN5KHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDExOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkSW50MzIoKSA6IFtyZWFkZXIucmVhZEludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRXZWFrRGVwZW5kZW5jeSh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE1lc3NhZ2VUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEVudW1UeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFNlcnZpY2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRFeHRlbnNpb24kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFNvdXJjZUNvZGVJbmZvKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFN5bnRheCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGVwZW5kZW5jeUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFB1YmxpY0RlcGVuZGVuY3lMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZEludDMyKFxuICAgICAgMTAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRXZWFrRGVwZW5kZW5jeUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkSW50MzIoXG4gICAgICAxMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1lc3NhZ2VUeXBlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgNCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFbnVtVHlwZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDUsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFNlcnZpY2VMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA2LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFeHRlbnNpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA3LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDgsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRTb3VyY2VDb2RlSW5mbygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMTIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwYWNrYWdlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFBhY2thZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzUGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGRlcGVuZGVuY3kgPSAzO1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXREZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldERlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZERlcGVuZGVuY3kgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDMsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGVwZW5kZW5jeUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGludDMyIHB1YmxpY19kZXBlbmRlbmN5ID0gMTA7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFB1YmxpY0RlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMTApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFB1YmxpY0RlcGVuZGVuY3lMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMCwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRQdWJsaWNEZXBlbmRlbmN5ID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxMCwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJQdWJsaWNEZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQdWJsaWNEZXBlbmRlbmN5TGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgaW50MzIgd2Vha19kZXBlbmRlbmN5ID0gMTE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFdlYWtEZXBlbmRlbmN5TGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDExKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8bnVtYmVyPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRXZWFrRGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDExLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFdlYWtEZXBlbmRlbmN5ID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJXZWFrRGVwZW5kZW5jeUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0V2Vha0RlcGVuZGVuY3lMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZV90eXBlID0gNDtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRNZXNzYWdlVHlwZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sIDQpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRNZXNzYWdlVHlwZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRNZXNzYWdlVHlwZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA0LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJNZXNzYWdlVHlwZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TWVzc2FnZVR5cGVMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBFbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDU7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEVudW1UeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLCA1KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEVudW1UeXBlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRW51bVR5cGUgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckVudW1UeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFbnVtVHlwZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gc2VydmljZSA9IDY7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFNlcnZpY2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8sIDYpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0U2VydmljZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZFNlcnZpY2UgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNiwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclNlcnZpY2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFNlcnZpY2VMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBGaWVsZERlc2NyaXB0b3JQcm90byBleHRlbnNpb24gPSA3O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sIDcpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEV4dGVuc2lvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG89fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkRXh0ZW5zaW9uJCA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA3LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckV4dGVuc2lvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXh0ZW5zaW9uTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgRmlsZU9wdGlvbnMgb3B0aW9ucyA9IDg7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucywgOCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgOCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA4KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIFNvdXJjZUNvZGVJbmZvIHNvdXJjZV9jb2RlX2luZm8gPSA5O1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFNvdXJjZUNvZGVJbmZvID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLCA5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFNvdXJjZUNvZGVJbmZvID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgOSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyU291cmNlQ29kZUluZm8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U291cmNlQ29kZUluZm8odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU291cmNlQ29kZUluZm8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA5KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBzeW50YXggPSAxMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFN5bnRheCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFN5bnRheCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJTeW50YXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzU3ludGF4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTIpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXBlYXRlZEZpZWxkc18gPSBbMiw2LDMsNCw1LDgsOSwxMF07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGZpZWxkTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RmllbGRMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGV4dGVuc2lvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV4dGVuc2lvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgbmVzdGVkVHlwZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE5lc3RlZFR5cGVMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBlbnVtVHlwZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEVudW1UeXBlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGV4dGVuc2lvblJhbmdlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXh0ZW5zaW9uUmFuZ2VMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBvbmVvZkRlY2xMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRPbmVvZkRlY2xMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgcmVzZXJ2ZWRSYW5nZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFJlc2VydmVkUmFuZ2VMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIHJlc2VydmVkTmFtZUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxMCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRGaWVsZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV4dGVuc2lvbiQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE5lc3RlZFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRW51bVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV4dGVuc2lvblJhbmdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkT25lb2ZEZWNsKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlc2VydmVkUmFuZ2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkUmVzZXJ2ZWROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRGaWVsZExpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFeHRlbnNpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA2LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TmVzdGVkVHlwZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RW51bVR5cGVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA0LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRFeHRlbnNpb25SYW5nZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDUsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T25lb2ZEZWNsTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICA3LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRSZXNlcnZlZE5hbWVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyhcbiAgICAgIDEwLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGFydDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZW5kOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBvcHRpb25zOiAoZiA9IG1zZy5nZXRPcHRpb25zKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldFN0YXJ0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRFbmQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE9wdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgc3RhcnQgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5nZXRTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UucHJvdG90eXBlLnNldFN0YXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5jbGVhclN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5oYXNTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgZW5kID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuZ2V0RW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0RW5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5jbGVhckVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuaGFzRW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBFeHRlbnNpb25SYW5nZU9wdGlvbnMgb3B0aW9ucyA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnByb3RvdHlwZS5oYXNPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN0YXJ0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBlbmQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRTdGFydCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0RW5kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgc3RhcnQgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmdldFN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNldFN0YXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgZW5kID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5nZXRFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0RW5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuaGFzRW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RmllbGRMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEZpZWxkTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEZpZWxkID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckZpZWxkTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRGaWVsZExpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDY7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldEV4dGVuc2lvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLCA2KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZEV4dGVuc2lvbiQgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNiwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFeHRlbnNpb25MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBEZXNjcmlwdG9yUHJvdG8gbmVzdGVkX3R5cGUgPSAzO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmVzdGVkVHlwZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8sIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmVzdGVkVHlwZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZE5lc3RlZFR5cGUgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMywgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5lc3RlZFR5cGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE5lc3RlZFR5cGVMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBFbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDQ7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0RW51bVR5cGVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8sIDQpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldEVudW1UeXBlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFbnVtVHlwZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA0LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckVudW1UeXBlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFbnVtVHlwZUxpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEV4dGVuc2lvblJhbmdlIGV4dGVuc2lvbl9yYW5nZSA9IDU7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbnNpb25SYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2U+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UsIDUpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uUmFuZ2VMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRFeHRlbnNpb25SYW5nZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA1LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV4dGVuc2lvblJhbmdlTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgT25lb2ZEZXNjcmlwdG9yUHJvdG8gb25lb2ZfZGVjbCA9IDg7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9uZW9mRGVjbExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLCA4KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T25lb2ZEZWNsTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmFkZE9uZW9mRGVjbCA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA4LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPbmVvZkRlY2xMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9uZW9mRGVjbExpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE1lc3NhZ2VPcHRpb25zIG9wdGlvbnMgPSA3O1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucywgNykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBSZXNlcnZlZFJhbmdlIHJlc2VydmVkX3JhbmdlID0gOTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLCA5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWRSYW5nZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2U9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZFJhbmdlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhclJlc2VydmVkUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc2VydmVkUmFuZ2VMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBzdHJpbmcgcmVzZXJ2ZWRfbmFtZSA9IDEwO1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFJlc2VydmVkTmFtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAxMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFJlc2VydmVkTmFtZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZE5hbWUgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJSZXNlcnZlZE5hbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc2VydmVkTmFtZUxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgaW5jbHVkZUluc3RhbmNlKTtcbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG51bWJlcjogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbGFiZWw6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHR5cGU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHR5cGVOYW1lOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDYpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBleHRlbmRlZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZGVmYXVsdFZhbHVlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDcpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBvbmVvZkluZGV4OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDkpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBqc29uTmFtZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxMCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHByb3RvM09wdGlvbmFsOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQobXNnLCAxNykpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0TnVtYmVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbH0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRMYWJlbCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0VHlwZU5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRFeHRlbmRlZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldERlZmF1bHRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0T25lb2ZJbmRleCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRKc29uTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFByb3RvM09wdGlvbmFsKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDUpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICA1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA3LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDkpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgOSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxMCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMTAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPcHRpb25zKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgOCxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDE3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlID0ge1xuICBUWVBFX0RPVUJMRTogMSxcbiAgVFlQRV9GTE9BVDogMixcbiAgVFlQRV9JTlQ2NDogMyxcbiAgVFlQRV9VSU5UNjQ6IDQsXG4gIFRZUEVfSU5UMzI6IDUsXG4gIFRZUEVfRklYRUQ2NDogNixcbiAgVFlQRV9GSVhFRDMyOiA3LFxuICBUWVBFX0JPT0w6IDgsXG4gIFRZUEVfU1RSSU5HOiA5LFxuICBUWVBFX0dST1VQOiAxMCxcbiAgVFlQRV9NRVNTQUdFOiAxMSxcbiAgVFlQRV9CWVRFUzogMTIsXG4gIFRZUEVfVUlOVDMyOiAxMyxcbiAgVFlQRV9FTlVNOiAxNCxcbiAgVFlQRV9TRklYRUQzMjogMTUsXG4gIFRZUEVfU0ZJWEVENjQ6IDE2LFxuICBUWVBFX1NJTlQzMjogMTcsXG4gIFRZUEVfU0lOVDY0OiAxOFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwgPSB7XG4gIExBQkVMX09QVElPTkFMOiAxLFxuICBMQUJFTF9SRVFVSVJFRDogMixcbiAgTEFCRUxfUkVQRUFURUQ6IDNcbn07XG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE51bWJlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROdW1iZXIgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck51bWJlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNOdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIExhYmVsIGxhYmVsID0gNDtcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWx9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbH0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWx9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRMYWJlbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIFR5cGUgdHlwZSA9IDU7XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA1LCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1R5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyB0eXBlX25hbWUgPSA2O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldFR5cGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDYsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFR5cGVOYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJUeXBlTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNUeXBlTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDYpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGV4dGVuZGVlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRFeHRlbmRlZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRFeHRlbmRlZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyRXh0ZW5kZWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzRXh0ZW5kZWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3ZhbHVlID0gNztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA3LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBvbmVvZl9pbmRleCA9IDk7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T25lb2ZJbmRleCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA5LCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPbmVvZkluZGV4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPbmVvZkluZGV4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgOSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09uZW9mSW5kZXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA5KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRKc29uTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0SnNvbk5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJKc29uTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzSnNvbk5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxMCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBGaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMsIDgpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDgsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgOCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHByb3RvM19vcHRpb25hbCA9IDE3O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRQcm90bzNPcHRpb25hbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDE3LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFByb3RvM09wdGlvbmFsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUHJvdG8zT3B0aW9uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxNywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1Byb3RvM09wdGlvbmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTcpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBvcHRpb25zOiAoZiA9IG1zZy5nZXRPcHRpb25zKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG87XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE9wdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE9uZW9mT3B0aW9ucyBvcHRpb25zID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyA9IFsyLDQsNV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB2YWx1ZUxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFZhbHVlTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSksXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICByZXNlcnZlZFJhbmdlTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICByZXNlcnZlZE5hbWVMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgNSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE9wdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUmVzZXJ2ZWRSYW5nZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZFJlc2VydmVkTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPcHRpb25zKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJlc2VydmVkUmFuZ2VMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA0LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRSZXNlcnZlZE5hbWVMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyhcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGFydDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZW5kOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRTdGFydCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0RW5kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBzdGFydCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5nZXRTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJTdGFydCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UucHJvdG90eXBlLmhhc1N0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQzMiBlbmQgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuZ2V0RW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5zZXRFbmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZS5wcm90b3R5cGUuY2xlYXJFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLnByb3RvdHlwZS5oYXNFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHZhbHVlID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRWYWx1ZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRWYWx1ZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRWYWx1ZSA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJWYWx1ZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VmFsdWVMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBFbnVtT3B0aW9ucyBvcHRpb25zID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wdGlvbnModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRW51bVJlc2VydmVkUmFuZ2UgcmVzZXJ2ZWRfcmFuZ2UgPSA0O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZT59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRSZXNlcnZlZFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlLCA0KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFJlc2VydmVkUmFuZ2VMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2U9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2V9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZFJhbmdlID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDQsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2UsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJSZXNlcnZlZFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRSZXNlcnZlZFJhbmdlTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIHJlc2VydmVkX25hbWUgPSA1O1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRSZXNlcnZlZE5hbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxzdHJpbmc+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgNSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0UmVzZXJ2ZWROYW1lTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNSwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5hZGRSZXNlcnZlZE5hbWUgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDUsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyUmVzZXJ2ZWROYW1lTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRSZXNlcnZlZE5hbWVMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBudW1iZXI6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG87XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXROdW1iZXIodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0TnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0TnVtYmVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck51bWJlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzTnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBFbnVtVmFsdWVPcHRpb25zIG9wdGlvbnMgPSAzO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucywgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnJlcGVhdGVkRmllbGRzXyA9IFsyXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIG1ldGhvZExpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE1ldGhvZExpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIG9wdGlvbnM6IChmID0gbXNnLmdldE9wdGlvbnMoKSkgJiYgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG87XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE1ldGhvZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE9wdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRNZXRob2RMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9wdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIE1ldGhvZERlc2NyaXB0b3JQcm90byBtZXRob2QgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE1ldGhvZExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8sIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRNZXRob2RMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bz19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuYWRkTWV0aG9kID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck1ldGhvZExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TWV0aG9kTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgU2VydmljZU9wdGlvbnMgb3B0aW9ucyA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucywgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmNsZWFyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGlucHV0VHlwZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgb3V0cHV0VHlwZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgb3B0aW9uczogKGYgPSBtc2cuZ2V0T3B0aW9ucygpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIGNsaWVudFN0cmVhbWluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNSwgZmFsc2UpLFxuICAgIHNlcnZlclN0cmVhbWluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNiwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRJbnB1dFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRPdXRwdXRUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE9wdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldENsaWVudFN0cmVhbWluZyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0U2VydmVyU3RyZWFtaW5nKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T3B0aW9ucygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDQsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA2LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc05hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBpbnB1dF90eXBlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0SW5wdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0SW5wdXRUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhcklucHV0VHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzSW5wdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgb3V0cHV0X3R5cGUgPSAzO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPdXRwdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0T3V0cHV0VHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJPdXRwdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5oYXNPdXRwdXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNZXRob2RPcHRpb25zIG9wdGlvbnMgPSA0O1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucywgNCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc09wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgY2xpZW50X3N0cmVhbWluZyA9IDU7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5nZXRDbGllbnRTdHJlYW1pbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCA1LCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuc2V0Q2xpZW50U3RyZWFtaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnByb3RvdHlwZS5jbGVhckNsaWVudFN0cmVhbWluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuaGFzQ2xpZW50U3RyZWFtaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHNlcnZlcl9zdHJlYW1pbmcgPSA2O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuZ2V0U2VydmVyU3RyZWFtaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLnNldFNlcnZlclN0cmVhbWluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5wcm90b3R5cGUuY2xlYXJTZXJ2ZXJTdHJlYW1pbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ucHJvdG90eXBlLmhhc1NlcnZlclN0cmVhbWluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDYpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnJlcGVhdGVkRmllbGRzXyA9IFs5OTldO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGphdmFQYWNrYWdlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBqYXZhT3V0ZXJDbGFzc25hbWU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgOCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGphdmFNdWx0aXBsZUZpbGVzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxMCwgZmFsc2UpLFxuICAgIGphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2g6IChmID0ganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZChtc2csIDIwKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgamF2YVN0cmluZ0NoZWNrVXRmODoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMjcsIGZhbHNlKSxcbiAgICBvcHRpbWl6ZUZvcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCA5LCAxKSxcbiAgICBnb1BhY2thZ2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMTEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBjY0dlbmVyaWNTZXJ2aWNlczoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMTYsIGZhbHNlKSxcbiAgICBqYXZhR2VuZXJpY1NlcnZpY2VzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxNywgZmFsc2UpLFxuICAgIHB5R2VuZXJpY1NlcnZpY2VzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxOCwgZmFsc2UpLFxuICAgIHBocEdlbmVyaWNTZXJ2aWNlczoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNDIsIGZhbHNlKSxcbiAgICBkZXByZWNhdGVkOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAyMywgZmFsc2UpLFxuICAgIGNjRW5hYmxlQXJlbmFzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAzMSwgdHJ1ZSksXG4gICAgb2JqY0NsYXNzUHJlZml4OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDM2KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgY3NoYXJwTmFtZXNwYWNlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDM3KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgc3dpZnRQcmVmaXg6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMzkpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBwaHBDbGFzc1ByZWZpeDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0MCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHBocE5hbWVzcGFjZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0MSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHBocE1ldGFkYXRhTmFtZXNwYWNlOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDQ0KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcnVieVBhY2thZ2U6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNDUpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB1bmludGVycHJldGVkT3B0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbigvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChtc2cpLCBvYmosXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRKYXZhUGFja2FnZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldEphdmFPdXRlckNsYXNzbmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEphdmFNdWx0aXBsZUZpbGVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjA6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0SmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEphdmFTdHJpbmdDaGVja1V0ZjgodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRPcHRpbWl6ZUZvcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDExOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRHb1BhY2thZ2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRDY0dlbmVyaWNTZXJ2aWNlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEphdmFHZW5lcmljU2VydmljZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxODpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRQeUdlbmVyaWNTZXJ2aWNlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFBocEdlbmVyaWNTZXJ2aWNlcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldERlcHJlY2F0ZWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRDY0VuYWJsZUFyZW5hcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM2OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRPYmpjQ2xhc3NQcmVmaXgodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzNzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q3NoYXJwTmFtZXNwYWNlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzk6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFN3aWZ0UHJlZml4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDA6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBocENsYXNzUHJlZml4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBocE5hbWVzcGFjZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQaHBNZXRhZGF0YU5hbWVzcGFjZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ1OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRSdWJ5UGFja2FnZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSxcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDgpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDgsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEwKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIwKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMjAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDI3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMjcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA5KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVFbnVtKFxuICAgICAgOSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMTEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDE2KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDE3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDE4KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTgsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMjMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMzEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMzYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDM2LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDM3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzOSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMzksXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNDApKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQwLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA0MSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0NCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNDUpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDQ1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZSA9IHtcbiAgU1BFRUQ6IDEsXG4gIENPREVfU0laRTogMixcbiAgTElURV9SVU5USU1FOiAzXG59O1xuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBqYXZhX3BhY2thZ2UgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFQYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFQYWNrYWdlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhUGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhUGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gODtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhT3V0ZXJDbGFzc25hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgOCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YU91dGVyQ2xhc3NuYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA4LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhT3V0ZXJDbGFzc25hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA4LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YU91dGVyQ2xhc3NuYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgOCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGphdmFfbXVsdGlwbGVfZmlsZXMgPSAxMDtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YU11bHRpcGxlRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhTXVsdGlwbGVGaWxlcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFNdWx0aXBsZUZpbGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTAsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhTXVsdGlwbGVGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEwKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSAyMDtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0SmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIwLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIwLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMjAsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMjApICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBqYXZhX3N0cmluZ19jaGVja191dGY4ID0gMjc7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldEphdmFTdHJpbmdDaGVja1V0ZjggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyNywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRKYXZhU3RyaW5nQ2hlY2tVdGY4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFySmF2YVN0cmluZ0NoZWNrVXRmOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDI3LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzSmF2YVN0cmluZ0NoZWNrVXRmOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDI3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE9wdGltaXplTW9kZSBvcHRpbWl6ZV9mb3IgPSA5O1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0T3B0aW1pemVGb3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA5LCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldE9wdGltaXplRm9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJPcHRpbWl6ZUZvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDksIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNPcHRpbWl6ZUZvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDkpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGdvX3BhY2thZ2UgPSAxMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRHb1BhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMTEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldEdvUGFja2FnZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckdvUGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDExLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzR29QYWNrYWdlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBjY19nZW5lcmljX3NlcnZpY2VzID0gMTY7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldENjR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMTYsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0Q2NHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDE2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDY0dlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDE2LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzQ2NHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxNikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGphdmFfZ2VuZXJpY19zZXJ2aWNlcyA9IDE3O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRKYXZhR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMTcsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0SmF2YUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckphdmFHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxNywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc0phdmFHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxNykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHB5X2dlbmVyaWNfc2VydmljZXMgPSAxODtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UHlHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxOCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQeUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTgsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclB5R2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMTgsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQeUdlbmVyaWNTZXJ2aWNlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDE4KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgcGhwX2dlbmVyaWNfc2VydmljZXMgPSA0MjtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0UGhwR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNDIsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0MiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGhwR2VuZXJpY1NlcnZpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBHZW5lcmljU2VydmljZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0MikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAyMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIzLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMjMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMjMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBjY19lbmFibGVfYXJlbmFzID0gMzE7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldENjRW5hYmxlQXJlbmFzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMzEsIHRydWUpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRDY0VuYWJsZUFyZW5hcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhckNjRW5hYmxlQXJlbmFzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNDY0VuYWJsZUFyZW5hcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBvYmpjX2NsYXNzX3ByZWZpeCA9IDM2O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldE9iamNDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzNiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0T2JqY0NsYXNzUHJlZml4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzNiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyT2JqY0NsYXNzUHJlZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzYsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNPYmpjQ2xhc3NQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzNikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY3NoYXJwX25hbWVzcGFjZSA9IDM3O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldENzaGFycE5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzNywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0Q3NoYXJwTmFtZXNwYWNlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyQ3NoYXJwTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMzcsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNDc2hhcnBOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzNykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgc3dpZnRfcHJlZml4ID0gMzk7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0U3dpZnRQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMzksIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLnNldFN3aWZ0UHJlZml4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzOSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyU3dpZnRQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzOSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmhhc1N3aWZ0UHJlZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMzkpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBocF9jbGFzc19wcmVmaXggPSA0MDtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRQaHBDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0MCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwQ2xhc3NQcmVmaXggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQwLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJQaHBDbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQwLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUGhwQ2xhc3NQcmVmaXggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0MCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcGhwX25hbWVzcGFjZSA9IDQxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFBocE5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0MSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UGhwTmFtZXNwYWNlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0MSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGhwTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBOYW1lc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0MSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcGhwX21ldGFkYXRhX25hbWVzcGFjZSA9IDQ0O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmdldFBocE1ldGFkYXRhTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQ0LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5zZXRQaHBNZXRhZGF0YU5hbWVzcGFjZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5jbGVhclBocE1ldGFkYXRhTmFtZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNDQsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5oYXNQaHBNZXRhZGF0YU5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQ0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBydWJ5X3BhY2thZ2UgPSA0NTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnByb3RvdHlwZS5nZXRSdWJ5UGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0NSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0UnVieVBhY2thZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQ1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJSdWJ5UGFja2FnZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQ1LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuaGFzUnVieVBhY2thZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0NSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnJlcGVhdGVkRmllbGRzXyA9IFs5OTldO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1lc3NhZ2VTZXRXaXJlRm9ybWF0OiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSksXG4gICAgbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcjoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgZmFsc2UpLFxuICAgIGRlcHJlY2F0ZWQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDMsIGZhbHNlKSxcbiAgICBtYXBFbnRyeTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKG1zZywgNykpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zLCBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0TWVzc2FnZVNldFdpcmVGb3JtYXQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldERlcHJlY2F0ZWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldE1hcEVudHJ5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0TWVzc2FnZVNldFdpcmVGb3JtYXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc01lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IgPSAyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXROb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5zZXROb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc05vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDM7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBtYXBfZW50cnkgPSA3O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5nZXRNYXBFbnRyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDcsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0TWFwRW50cnkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnByb3RvdHlwZS5jbGVhck1hcEVudHJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmhhc01hcEVudHJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5O1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY3R5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMCksXG4gICAgcGFja2VkOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAganN0eXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDYsIDApLFxuICAgIGxhenk6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDUsIGZhbHNlKSxcbiAgICBkZXByZWNhdGVkOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBmYWxzZSksXG4gICAgd2VhazoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMTAsIGZhbHNlKSxcbiAgICB1bmludGVycHJldGVkT3B0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbigvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChtc2cpLCBvYmosXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmV4dGVuc2lvbnMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRDdHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0UGFja2VkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlfSAqLyAocmVhZGVyLnJlYWRFbnVtKCkpO1xuICAgICAgbXNnLnNldEpzdHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0TGF6eSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFdlYWsodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OTk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRVbmludGVycHJldGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihtc2csIHJlYWRlcixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGV9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICA2LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA1KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEwKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMTAsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUgPSB7XG4gIFNUUklORzogMCxcbiAgQ09SRDogMSxcbiAgU1RSSU5HX1BJRUNFOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlID0ge1xuICBKU19OT1JNQUw6IDAsXG4gIEpTX1NUUklORzogMSxcbiAgSlNfTlVNQkVSOiAyXG59O1xuXG4vKipcbiAqIG9wdGlvbmFsIENUeXBlIGN0eXBlID0gMTtcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRDdHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRDdHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJDdHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuaGFzQ3R5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgcGFja2VkID0gMjtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldFBhY2tlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRQYWNrZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyUGFja2VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNQYWNrZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEpTVHlwZSBqc3R5cGUgPSA2O1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRKc3R5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5zZXRKc3R5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFySnN0eXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNKc3R5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA2KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgbGF6eSA9IDU7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRMYXp5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldExhenkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyTGF6eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuaGFzTGF6eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDUpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuc2V0RGVwcmVjYXRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHdlYWsgPSAxMDtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmdldFdlYWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxMCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldFdlYWsgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEwLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5jbGVhcldlYWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxMCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5oYXNXZWFrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMTApICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgaW5jbHVkZUluc3RhbmNlKTtcbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgOTk5LFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyhtZXNzYWdlLCB3cml0ZXIsXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgYWxsb3dBbGlhczogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGRlcHJlY2F0ZWQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDMsIGZhbHNlKSxcbiAgICB1bmludGVycHJldGVkT3B0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbigvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChtc2cpLCBvYmosXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEFsbG93QWxpYXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldERlcHJlY2F0ZWQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OTk6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRVbmludGVycHJldGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbihtc2csIHJlYWRlcixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldEV4dGVuc2lvbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZXh0ZW5zaW9uc0JpbmFyeSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgYWxsb3dfYWxpYXMgPSAyO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5nZXRBbGxvd0FsaWFzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5zZXRBbGxvd0FsaWFzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuY2xlYXJBbGxvd0FsaWFzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmhhc0FsbG93QWxpYXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDM7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5jbGVhckRlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIDk5OSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnJlcGVhdGVkRmllbGRzXyA9IFs5OTldO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZGVwcmVjYXRlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAganNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1zZyksIG9iaixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmV4dGVuc2lvbnMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk5OTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1zZywgcmVhZGVyLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uLFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAxKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICA5OTksXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGpzcGIuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKG1lc3NhZ2UsIHdyaXRlcixcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmhhc0RlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMucHJvdG90eXBlLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIDk5OSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5hZGRVbmludGVycHJldGVkT3B0aW9uID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDk5OSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzk5OV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZGVwcmVjYXRlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMzMsIGZhbHNlKSxcbiAgICB1bmludGVycHJldGVkT3B0aW9uTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKSxcbiAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbigvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChtc2cpLCBvYmosXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICBpbmNsdWRlSW5zdGFuY2UpO1xuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAzMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXREZXByZWNhdGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LFxuICAgICAgICBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDMzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5LCBwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbik7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMzM7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmdldERlcHJlY2F0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzMywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXREZXByZWNhdGVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuaGFzRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5nZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCA5OTkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5zZXRVbmludGVycHJldGVkT3B0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy5wcm90b3R5cGUuYWRkVW5pbnRlcnByZXRlZE9wdGlvbiA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24sIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnByb3RvdHlwZS5jbGVhclVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5yZXBlYXRlZEZpZWxkc18gPSBbOTk5XTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGRlcHJlY2F0ZWQ6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDMzLCBmYWxzZSksXG4gICAgaWRlbXBvdGVuY3lMZXZlbDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzNCwgMCksXG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBqc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24oLyoqIEB0eXBlIHshanNwYi5NZXNzYWdlfSAqLyAobXNnKSwgb2JqLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9ucywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmdldEV4dGVuc2lvbixcbiAgICAgIGluY2x1ZGVJbnN0YW5jZSk7XG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnN9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnM7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMzM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0RGVwcmVjYXRlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM0OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbH0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRJZGVtcG90ZW5jeUxldmVsKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTk5OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVW5pbnRlcnByZXRlZE9wdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAganNwYi5NZXNzYWdlLnJlYWRCaW5hcnlFeHRlbnNpb24obXNnLCByZWFkZXIsXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4gICAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5zZXRFeHRlbnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMzMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbH0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzNCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDM0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDk5OSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAganNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnMobWVzc2FnZSwgd3JpdGVyLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmV4dGVuc2lvbnNCaW5hcnksIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXRFeHRlbnNpb24pO1xufTtcblxuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWwgPSB7XG4gIElERU1QT1RFTkNZX1VOS05PV046IDAsXG4gIE5PX1NJREVfRUZGRUNUUzogMSxcbiAgSURFTVBPVEVOVDogMlxufTtcblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzMztcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXREZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMzMsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldERlcHJlY2F0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyRGVwcmVjYXRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMzLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5oYXNEZXByZWNhdGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMzMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgSWRlbXBvdGVuY3lMZXZlbCBpZGVtcG90ZW5jeV9sZXZlbCA9IDM0O1xuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWx9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5nZXRJZGVtcG90ZW5jeUxldmVsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMzQsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldElkZW1wb3RlbmN5TGV2ZWwgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmNsZWFySWRlbXBvdGVuY3lMZXZlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDM0LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnByb3RvdHlwZS5oYXNJZGVtcG90ZW5jeUxldmVsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMzQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5wcm90b3R5cGUuZ2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiwgOTk5KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLnNldFVuaW50ZXJwcmV0ZWRPcHRpb25MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCA5OTksIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmFkZFVuaW50ZXJwcmV0ZWRPcHRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgOTk5LCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMucHJvdG90eXBlLmNsZWFyVW5pbnRlcnByZXRlZE9wdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0VW5pbnRlcnByZXRlZE9wdGlvbkxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnJlcGVhdGVkRmllbGRzXyA9IFsyXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWVMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXROYW1lTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIGlkZW50aWZpZXJWYWx1ZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgcG9zaXRpdmVJbnRWYWx1ZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbmVnYXRpdmVJbnRWYWx1ZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA1KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgZG91YmxlVmFsdWU6IChmID0ganNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgNikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHN0cmluZ1ZhbHVlOiBtc2cuZ2V0U3RyaW5nVmFsdWVfYXNCNjQoKSxcbiAgICBhZ2dyZWdhdGVWYWx1ZTogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA4KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQ7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0SWRlbnRpZmllclZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRVaW50NjQoKSk7XG4gICAgICBtc2cuc2V0UG9zaXRpdmVJbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0TmVnYXRpdmVJbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldERvdWJsZVZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldFN0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0QWdncmVnYXRlVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAzKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDQpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVVpbnQ2NChcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNSkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICA1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDYpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHshKHN0cmluZ3xVaW50OEFycmF5KX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA3KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVCeXRlcyhcbiAgICAgIDcsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgOCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgOCxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWVQYXJ0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBpc0V4dGVuc2lvbjogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydDtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lUGFydCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0SXNFeHRlbnNpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXF1aXJlZCBzdHJpbmcgbmFtZV9wYXJ0ID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmdldE5hbWVQYXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5zZXROYW1lUGFydCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5jbGVhck5hbWVQYXJ0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5wcm90b3R5cGUuaGFzTmFtZVBhcnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcXVpcmVkIGJvb2wgaXNfZXh0ZW5zaW9uID0gMjtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5nZXRJc0V4dGVuc2lvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLnNldElzRXh0ZW5zaW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQucHJvdG90eXBlLmNsZWFySXNFeHRlbnNpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LnByb3RvdHlwZS5oYXNJc0V4dGVuc2lvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgTmFtZVBhcnQgbmFtZSA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Pn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldE5hbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydD59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQ+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuc2V0TmFtZUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydD19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmFkZE5hbWUgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhck5hbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE5hbWVMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWRlbnRpZmllcl92YWx1ZSA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldElkZW50aWZpZXJWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhcklkZW50aWZpZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc0lkZW50aWZpZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRQb3NpdGl2ZUludFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXRQb3NpdGl2ZUludFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyUG9zaXRpdmVJbnRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc1Bvc2l0aXZlSW50VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IG5lZ2F0aXZlX2ludF92YWx1ZSA9IDU7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXROZWdhdGl2ZUludFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXROZWdhdGl2ZUludFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyTmVnYXRpdmVJbnRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDUsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmhhc05lZ2F0aXZlSW50VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkb3VibGVfdmFsdWUgPSA2O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0RG91YmxlVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDYsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldERvdWJsZVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyRG91YmxlVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5oYXNEb3VibGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDYpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVlID0gNztcbiAqIEByZXR1cm4geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IShzdHJpbmd8VWludDhBcnJheSl9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA3LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVlID0gNztcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldFN0cmluZ1ZhbHVlKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZV9hc0I2NCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NChcbiAgICAgIHRoaXMuZ2V0U3RyaW5nVmFsdWUoKSkpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHN0cmluZ192YWx1ZSA9IDc7XG4gKiBOb3RlIHRoYXQgVWludDhBcnJheSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cbiAqIEBzZWUgaHR0cDovL2Nhbml1c2UuY29tL1VpbnQ4QXJyYXlcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldFN0cmluZ1ZhbHVlKClgXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmdldFN0cmluZ1ZhbHVlX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXRTdHJpbmdWYWx1ZSgpKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshKHN0cmluZ3xVaW50OEFycmF5KX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5zZXRTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5jbGVhclN0cmluZ1ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuaGFzU3RyaW5nVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA3KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBhZ2dyZWdhdGVfdmFsdWUgPSA4O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5wcm90b3R5cGUuZ2V0QWdncmVnYXRlVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgOCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLnNldEFnZ3JlZ2F0ZVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA4LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ucHJvdG90eXBlLmNsZWFyQWdncmVnYXRlVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA4LCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnByb3RvdHlwZS5oYXNBZ2dyZWdhdGVWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDgpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBsb2NhdGlvbkxpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldExvY2F0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm87XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb31cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZExvY2F0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm99IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRMb2NhdGlvbkxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5yZXBlYXRlZEZpZWxkc18gPSBbMSwyLDZdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBhdGhMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHNwYW5MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGxlYWRpbmdDb21tZW50czogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgdHJhaWxpbmdDb21tZW50czogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCA0KSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgbGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgNikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbjtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZEludDMyKCkgOiBbcmVhZGVyLnJlYWRJbnQzMigpXSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtc2cuYWRkUGF0aCh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkSW50MzIoKSA6IFtyZWFkZXIucmVhZEludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRTcGFuKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldExlYWRpbmdDb21tZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFRyYWlsaW5nQ29tbWVudHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5hZGRMZWFkaW5nRGV0YWNoZWRDb21tZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UGF0aExpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZEludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFNwYW5MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVQYWNrZWRJbnQzMihcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyhcbiAgICAgIDYsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGludDMyIHBhdGggPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0UGF0aExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8bnVtYmVyPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLnNldFBhdGhMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuYWRkUGF0aCA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhclBhdGhMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBhdGhMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBpbnQzMiBzcGFuID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTxudW1iZXI+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldFNwYW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PG51bWJlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5zZXRTcGFuTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmFkZFNwYW4gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDIsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJTcGFuTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTcGFuTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGxlYWRpbmdfY29tbWVudHMgPSAzO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldExlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5zZXRMZWFkaW5nQ29tbWVudHMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5jbGVhckxlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5oYXNMZWFkaW5nQ29tbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyB0cmFpbGluZ19jb21tZW50cyA9IDQ7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0VHJhaWxpbmdDb21tZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnByb3RvdHlwZS5zZXRUcmFpbGluZ0NvbW1lbnRzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJUcmFpbGluZ0NvbW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNCwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmhhc1RyYWlsaW5nQ29tbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzID0gNjtcbiAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucHJvdG90eXBlLmdldExlYWRpbmdEZXRhY2hlZENvbW1lbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDYpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuc2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCA2LCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuYWRkTGVhZGluZ0RldGFjaGVkQ29tbWVudHMgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDYsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJMZWFkaW5nRGV0YWNoZWRDb21tZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TGVhZGluZ0RldGFjaGVkQ29tbWVudHNMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBMb2NhdGlvbiBsb2NhdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuZ2V0TG9jYXRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbiwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLnByb3RvdHlwZS5zZXRMb2NhdGlvbkxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ucHJvdG90eXBlLmFkZExvY2F0aW9uID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5wcm90b3R5cGUuY2xlYXJMb2NhdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TG9jYXRpb25MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGFubm90YXRpb25MaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRBbm5vdGF0aW9uTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm99XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbztcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm99IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEFubm90YXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEFubm90YXRpb25MaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24udG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBhdGhMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIHNvdXJjZUZpbGU6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGJlZ2luOiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBlbmQ6IChmID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgNCkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbjtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkSW50MzIoKSA6IFtyZWFkZXIucmVhZEludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQYXRoKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFNvdXJjZUZpbGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldEJlZ2luKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRFbmQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UGF0aExpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZEludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCAyKSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDMpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGludDMyIHBhdGggPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5nZXRQYXRoTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldFBhdGhMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmFkZFBhdGggPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyUGF0aExpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UGF0aExpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBzb3VyY2VfZmlsZSA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5nZXRTb3VyY2VGaWxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5zZXRTb3VyY2VGaWxlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmNsZWFyU291cmNlRmlsZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDIsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmhhc1NvdXJjZUZpbGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIGJlZ2luID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmdldEJlZ2luID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5zZXRCZWdpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhckJlZ2luID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMywgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5wcm90b3R5cGUuaGFzQmVnaW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIGVuZCA9IDQ7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5nZXRFbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLnNldEVuZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhckVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDQsIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucHJvdG90eXBlLmhhc0VuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLmdldEFubm90YXRpb25MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24sIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mb30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLnByb3RvdHlwZS5zZXRBbm5vdGF0aW9uTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9ufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLmFkZEFubm90YXRpb24gPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm99IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8ucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QW5ub3RhdGlvbkxpc3QoW10pO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmKTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbicsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24nO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlY29uZHM6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMCksXG4gICAgbmFub3M6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb259XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDY0KCkpO1xuICAgICAgbXNnLnNldFNlY29uZHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZEludDMyKCkpO1xuICAgICAgbXNnLnNldE5hbm9zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb259IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZWNvbmRzKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TmFub3MoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IHNlY29uZHMgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb24ucHJvdG90eXBlLmdldFNlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbi5wcm90b3R5cGUuc2V0U2Vjb25kcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIG5hbm9zID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5nZXROYW5vcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnByb3RvdHlwZS5zZXROYW5vcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmKTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5LaW5kQ2FzZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc18pO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuZGlzcGxheU5hbWUgPSAncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGZpZWxkc01hcDogKGYgPSBtc2cuZ2V0RmllbGRzTWFwKCkpID8gZi50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS50b09iamVjdCkgOiBbXVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Q7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbXNnLmdldEZpZWxkc01hcCgpO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLCBmdW5jdGlvbihtZXNzYWdlLCByZWFkZXIpIHtcbiAgICAgICAganNwYi5NYXAuZGVzZXJpYWxpemVCaW5hcnkobWVzc2FnZSwgcmVhZGVyLCBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFN0cmluZywganNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyLCBcIlwiLCBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlKCkpO1xuICAgICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEZpZWxkc01hcCh0cnVlKTtcbiAgaWYgKGYgJiYgZi5nZXRMZW5ndGgoKSA+IDApIHtcbiAgICBmLnNlcmlhbGl6ZUJpbmFyeSgxLCB3cml0ZXIsIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZywganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG1hcDxzdHJpbmcsIFZhbHVlPiBmaWVsZHMgPSAxO1xuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X25vTGF6eUNyZWF0ZSBEbyBub3QgY3JlYXRlIHRoZSBtYXAgaWZcbiAqIGVtcHR5LCBpbnN0ZWFkIHJldHVybmluZyBgdW5kZWZpbmVkYFxuICogQHJldHVybiB7IWpzcGIuTWFwPHN0cmluZywhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlPn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5wcm90b3R5cGUuZ2V0RmllbGRzTWFwID0gZnVuY3Rpb24ob3B0X25vTGF6eUNyZWF0ZSkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshanNwYi5NYXA8c3RyaW5nLCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fSAqLyAoXG4gICAgICBqc3BiLk1lc3NhZ2UuZ2V0TWFwRmllbGQodGhpcywgMSwgb3B0X25vTGF6eUNyZWF0ZSxcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSkpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB2YWx1ZXMgZnJvbSB0aGUgbWFwLiBUaGUgbWFwIHdpbGwgYmUgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QucHJvdG90eXBlLmNsZWFyRmllbGRzTWFwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZ2V0RmllbGRzTWFwKCkuY2xlYXIoKTtcbiAgcmV0dXJuIHRoaXM7fTtcblxuXG5cbi8qKlxuICogT25lb2YgZ3JvdXAgZGVmaW5pdGlvbnMgZm9yIHRoaXMgbWVzc2FnZS4gRWFjaCBncm91cCBkZWZpbmVzIHRoZSBmaWVsZFxuICogbnVtYmVycyBiZWxvbmdpbmcgdG8gdGhhdCBncm91cC4gV2hlbiBvZiB0aGVzZSBmaWVsZHMnIHZhbHVlIGlzIHNldCwgYWxsXG4gKiBvdGhlciBmaWVsZHMgaW4gdGhlIGdyb3VwIGFyZSBjbGVhcmVkLiBEdXJpbmcgZGVzZXJpYWxpemF0aW9uLCBpZiBtdWx0aXBsZVxuICogZmllbGRzIGFyZSBlbmNvdW50ZXJlZCBmb3IgYSBncm91cCwgb25seSB0aGUgbGFzdCB2YWx1ZSBzZWVuIHdpbGwgYmUga2VwdC5cbiAqIEBwcml2YXRlIHshQXJyYXk8IUFycmF5PG51bWJlcj4+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc18gPSBbWzEsMiwzLDQsNSw2XV07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLktpbmRDYXNlID0ge1xuICBLSU5EX05PVF9TRVQ6IDAsXG4gIE5VTExfVkFMVUU6IDEsXG4gIE5VTUJFUl9WQUxVRTogMixcbiAgU1RSSU5HX1ZBTFVFOiAzLFxuICBCT09MX1ZBTFVFOiA0LFxuICBTVFJVQ1RfVkFMVUU6IDUsXG4gIExJU1RfVkFMVUU6IDZcbn07XG5cbi8qKlxuICogQHJldHVybiB7cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLktpbmRDYXNlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmdldEtpbmRDYXNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5LaW5kQ2FzZX0gKi8oanNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSkpO1xufTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBudWxsVmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMCksXG4gICAgbnVtYmVyVmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgc3RyaW5nVmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgXCJcIiksXG4gICAgYm9vbFZhbHVlOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCA0LCBmYWxzZSksXG4gICAgc3RydWN0VmFsdWU6IChmID0gbXNnLmdldFN0cnVjdFZhbHVlKCkpICYmIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBsaXN0VmFsdWU6IChmID0gbXNnLmdldExpc3RWYWx1ZSgpKSAmJiBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXROdWxsVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXROdW1iZXJWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFN0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRCb29sVmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Q7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFN0cnVjdFZhbHVlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRMaXN0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSAvKiogQHR5cGUgeyFwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDEpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNCkpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRTdHJ1Y3RWYWx1ZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDUsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TGlzdFZhbHVlKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgNixcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE51bGxWYWx1ZSBudWxsX3ZhbHVlID0gMTtcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmdldE51bGxWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuc2V0TnVsbFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDEsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5jbGVhck51bGxWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMSwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmhhc051bGxWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIG51bWJlcl92YWx1ZSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0TnVtYmVyVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuc2V0TnVtYmVyVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMiwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyTnVtYmVyVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDIsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5oYXNOdW1iZXJWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHN0cmluZ192YWx1ZSA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0U3RyaW5nVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuc2V0U3RyaW5nVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyU3RyaW5nVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5oYXNTdHJpbmdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBib29sX3ZhbHVlID0gNDtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuZ2V0Qm9vbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXRCb29sVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNCwgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyQm9vbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCA0LCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUub25lb2ZHcm91cHNfWzBdLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuaGFzQm9vbFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNCkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBTdHJ1Y3Qgc3RydWN0X3ZhbHVlID0gNTtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmdldFN0cnVjdFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QsIDUpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuc2V0U3RydWN0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsIDUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyU3RydWN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U3RydWN0VmFsdWUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmhhc1N0cnVjdFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBMaXN0VmFsdWUgbGlzdF92YWx1ZSA9IDY7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5nZXRMaXN0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSwgNikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLnByb3RvdHlwZS5zZXRMaXN0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsIDYsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLmNsZWFyTGlzdFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldExpc3RWYWx1ZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5wcm90b3R5cGUuaGFzTGlzdFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdmFsdWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0VmFsdWVzTGlzdCgpLFxuICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWU7XG4gIHJldHVybiBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWV9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRWYWx1ZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRWYWx1ZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBWYWx1ZSB2YWx1ZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnByb3RvdHlwZS5nZXRWYWx1ZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLnNldFZhbHVlc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnByb3RvdHlwZS5hZGRWYWx1ZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUucHJvdG90eXBlLmNsZWFyVmFsdWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRWYWx1ZXNMaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlID0ge1xuICBOVUxMX1ZBTFVFOiAwXG59O1xuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmKTtcbi8qIFRoaXMgY29kZSB3aWxsIGJlIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIGNvZGUgZm9yXG4gKiBnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvLiAqL1xuXG4vKipcbiAqIFR5cGVkZWYgcmVwcmVzZW50aW5nIHBsYWluIEphdmFTY3JpcHQgdmFsdWVzIHRoYXQgY2FuIGdvIGludG8gYVxuICogICAgIFN0cnVjdC5cbiAqIEB0eXBlZGVmIHtudWxsfG51bWJlcnxzdHJpbmd8Ym9vbGVhbnxBcnJheXxPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5KYXZhU2NyaXB0VmFsdWU7XG5cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIFZhbHVlIG9iamVjdCB0byBhIHBsYWluIEphdmFTY3JpcHQgdmFsdWUuXG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkphdmFTY3JpcHRWYWx1ZX0gYSBwbGFpbiBKYXZhU2NyaXB0XG4gKiAgICAgdmFsdWUgcmVwcmVzZW50aW5nIHRoaXMgU3RydWN0LlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUucHJvdG90eXBlLnRvSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIga2luZENhc2UgPSBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuS2luZENhc2U7XG4gIHN3aXRjaCAodGhpcy5nZXRLaW5kQ2FzZSgpKSB7XG4gICAgY2FzZSBraW5kQ2FzZS5OVUxMX1ZBTFVFOlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBraW5kQ2FzZS5OVU1CRVJfVkFMVUU6XG4gICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJWYWx1ZSgpO1xuICAgIGNhc2Uga2luZENhc2UuU1RSSU5HX1ZBTFVFOlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nVmFsdWUoKTtcbiAgICBjYXNlIGtpbmRDYXNlLkJPT0xfVkFMVUU6XG4gICAgICByZXR1cm4gdGhpcy5nZXRCb29sVmFsdWUoKTtcbiAgICBjYXNlIGtpbmRDYXNlLlNUUlVDVF9WQUxVRTpcbiAgICAgIHJldHVybiB0aGlzLmdldFN0cnVjdFZhbHVlKCkudG9KYXZhU2NyaXB0KCk7XG4gICAgY2FzZSBraW5kQ2FzZS5MSVNUX1ZBTFVFOlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdFZhbHVlKCkudG9KYXZhU2NyaXB0KCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJ1Y3QgdHlwZScpO1xuICB9XG59O1xuXG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgbmV3IFZhbHVlIHByb3RvLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkphdmFTY3JpcHRWYWx1ZX0gdmFsdWUgVGhlIHZhbHVlIHRvXG4gKiAgICAgY29udmVydC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWV9IFRoZSBuZXdseSBjb25zdHJ1Y3RlZCB2YWx1ZS5cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlLmZyb21KYXZhU2NyaXB0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIHJldCA9IG5ldyBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUoKTtcbiAgc3dpdGNoIChnb29nLnR5cGVPZih2YWx1ZSkpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0LnNldFN0cmluZ1ZhbHVlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXQuc2V0TnVtYmVyVmFsdWUoLyoqIEB0eXBlIHtudW1iZXJ9ICovICh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXQuc2V0Qm9vbFZhbHVlKC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHZhbHVlKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdudWxsJzpcbiAgICAgIHJldC5zZXROdWxsVmFsdWUocHJvdG8uZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZS5OVUxMX1ZBTFVFKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldC5zZXRMaXN0VmFsdWUocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS5mcm9tSmF2YVNjcmlwdChcbiAgICAgICAgICAvKiogQHR5cGV7IUFycmF5fSAqLyAodmFsdWUpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0LnNldFN0cnVjdFZhbHVlKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QuZnJvbUphdmFTY3JpcHQoXG4gICAgICAgICAgLyoqIEB0eXBleyFPYmplY3R9ICovICh2YWx1ZSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc3RydWN0IHR5cGUuJyk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgTGlzdFZhbHVlIG9iamVjdCB0byBhIHBsYWluIEphdmFTY3JpcHQgYXJyYXkuXG4gKiBAcmV0dXJuIHshQXJyYXl9IGEgcGxhaW4gSmF2YVNjcmlwdCBhcnJheSByZXByZXNlbnRpbmcgdGhpcyBMaXN0LlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnByb3RvdHlwZS50b0phdmFTY3JpcHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IFtdO1xuICB2YXIgdmFsdWVzID0gdGhpcy5nZXRWYWx1ZXNMaXN0KCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICByZXRbaV0gPSB2YWx1ZXNbaV0udG9KYXZhU2NyaXB0KCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBMaXN0VmFsdWUgcHJvdG9idWYgZnJvbSB0aGlzIHBsYWluIEphdmFTY3JpcHQgYXJyYXkuXG4gKiBAcGFyYW0geyFBcnJheX0gYXJyYXkgYSBwbGFpbiBKYXZhU2NyaXB0IGFycmF5XG4gKiBAcmV0dXJuIHtwcm90by5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlfSBhIG5ldyBMaXN0VmFsdWUgb2JqZWN0XG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUuZnJvbUphdmFTY3JpcHQgPSBmdW5jdGlvbihhcnJheSkge1xuICB2YXIgcmV0ID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcmV0LmFkZFZhbHVlcyhwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZnJvbUphdmFTY3JpcHQoYXJyYXlbaV0pKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBTdHJ1Y3Qgb2JqZWN0IHRvIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcmV0dXJuIHshT2JqZWN0PHN0cmluZywgIXByb3RvLmdvb2dsZS5wcm90b2J1Zi5KYXZhU2NyaXB0VmFsdWU+fSBhIHBsYWluXG4gKiAgICAgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgU3RydWN0LlxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0LnByb3RvdHlwZS50b0phdmFTY3JpcHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IHt9O1xuXG4gIHRoaXMuZ2V0RmllbGRzTWFwKCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmV0W2tleV0gPSB2YWx1ZS50b0phdmFTY3JpcHQoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgU3RydWN0IHByb3RvYnVmIGZyb20gdGhpcyBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7IU9iamVjdH0gb2JqIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RcbiAqIEByZXR1cm4ge3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9IGEgbmV3IFN0cnVjdCBvYmplY3RcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5mcm9tSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgcmV0ID0gbmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QoKTtcbiAgdmFyIG1hcCA9IHJldC5nZXRGaWVsZHNNYXAoKTtcblxuICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmopIHtcbiAgICB2YXIgdmFsID0gb2JqW3Byb3BlcnR5XTtcbiAgICBtYXAuc2V0KHByb3BlcnR5LCBwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWUuZnJvbUphdmFTY3JpcHQodmFsKSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZWNvbmRzOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApLFxuICAgIG5hbm9zOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcDtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0U2Vjb25kcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0TmFub3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZWNvbmRzKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TmFub3MoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IHNlY29uZHMgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS5nZXRTZWNvbmRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5wcm90b3R5cGUuc2V0U2Vjb25kcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIG5hbm9zID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5wcm90b3R5cGUuZ2V0TmFub3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS5zZXROYW5vcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLnByb3RvYnVmKTtcbi8qIFRoaXMgY29kZSB3aWxsIGJlIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIGNvZGUgZm9yXG4gKiBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvLiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBKYXZhU2NyaXB0ICdEYXRlJyBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGlzIFRpbWVzdGFtcC5cbiAqIEByZXR1cm4geyFEYXRlfVxuICovXG5wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnByb3RvdHlwZS50b0RhdGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlY29uZHMgPSB0aGlzLmdldFNlY29uZHMoKTtcbiAgdmFyIG5hbm9zID0gdGhpcy5nZXROYW5vcygpO1xuXG4gIHJldHVybiBuZXcgRGF0ZSgoc2Vjb25kcyAqIDEwMDApICsgKG5hbm9zIC8gMTAwMDAwMCkpO1xufTtcblxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIHRoaXMgVGltZXN0YW1wIG9iamVjdCB0byBiZSB0aGUgZ2l2ZW4gRGF0ZS5cbiAqIEBwYXJhbSB7IURhdGV9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKi9cbnByb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAucHJvdG90eXBlLmZyb21EYXRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdGhpcy5zZXRTZWNvbmRzKE1hdGguZmxvb3IodmFsdWUuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICB0aGlzLnNldE5hbm9zKHZhbHVlLmdldE1pbGxpc2Vjb25kcygpICogMTAwMDAwMCk7XG59O1xuXG5cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdGhhdCByZXR1cm5zIGEgVGltZXN0YW1wIG9iamVjdCB3aXRoIHZhbHVlIGVxdWFsIHRvXG4gKiB0aGUgZ2l2ZW4gRGF0ZS5cbiAqIEBwYXJhbSB7IURhdGV9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcH1cbiAqL1xucHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5mcm9tRGF0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciB0aW1lc3RhbXAgPSBuZXcgcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCgpO1xuICB0aW1lc3RhbXAuZnJvbURhdGUodmFsdWUpO1xuICByZXR1cm4gdGltZXN0YW1wO1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDEwLTIwMjIgVGhyZWUuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFJFVklTSU9OID0gJzEzNyc7XG5jb25zdCBNT1VTRSA9IHtcblx0TEVGVDogMCxcblx0TUlERExFOiAxLFxuXHRSSUdIVDogMixcblx0Uk9UQVRFOiAwLFxuXHRET0xMWTogMSxcblx0UEFOOiAyXG59O1xuY29uc3QgVE9VQ0ggPSB7XG5cdFJPVEFURTogMCxcblx0UEFOOiAxLFxuXHRET0xMWV9QQU46IDIsXG5cdERPTExZX1JPVEFURTogM1xufTtcbmNvbnN0IEN1bGxGYWNlTm9uZSA9IDA7XG5jb25zdCBDdWxsRmFjZUJhY2sgPSAxO1xuY29uc3QgQ3VsbEZhY2VGcm9udCA9IDI7XG5jb25zdCBDdWxsRmFjZUZyb250QmFjayA9IDM7XG5jb25zdCBCYXNpY1NoYWRvd01hcCA9IDA7XG5jb25zdCBQQ0ZTaGFkb3dNYXAgPSAxO1xuY29uc3QgUENGU29mdFNoYWRvd01hcCA9IDI7XG5jb25zdCBWU01TaGFkb3dNYXAgPSAzO1xuY29uc3QgRnJvbnRTaWRlID0gMDtcbmNvbnN0IEJhY2tTaWRlID0gMTtcbmNvbnN0IERvdWJsZVNpZGUgPSAyO1xuY29uc3QgRmxhdFNoYWRpbmcgPSAxO1xuY29uc3QgU21vb3RoU2hhZGluZyA9IDI7XG5jb25zdCBOb0JsZW5kaW5nID0gMDtcbmNvbnN0IE5vcm1hbEJsZW5kaW5nID0gMTtcbmNvbnN0IEFkZGl0aXZlQmxlbmRpbmcgPSAyO1xuY29uc3QgU3VidHJhY3RpdmVCbGVuZGluZyA9IDM7XG5jb25zdCBNdWx0aXBseUJsZW5kaW5nID0gNDtcbmNvbnN0IEN1c3RvbUJsZW5kaW5nID0gNTtcbmNvbnN0IEFkZEVxdWF0aW9uID0gMTAwO1xuY29uc3QgU3VidHJhY3RFcXVhdGlvbiA9IDEwMTtcbmNvbnN0IFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uID0gMTAyO1xuY29uc3QgTWluRXF1YXRpb24gPSAxMDM7XG5jb25zdCBNYXhFcXVhdGlvbiA9IDEwNDtcbmNvbnN0IFplcm9GYWN0b3IgPSAyMDA7XG5jb25zdCBPbmVGYWN0b3IgPSAyMDE7XG5jb25zdCBTcmNDb2xvckZhY3RvciA9IDIwMjtcbmNvbnN0IE9uZU1pbnVzU3JjQ29sb3JGYWN0b3IgPSAyMDM7XG5jb25zdCBTcmNBbHBoYUZhY3RvciA9IDIwNDtcbmNvbnN0IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgPSAyMDU7XG5jb25zdCBEc3RBbHBoYUZhY3RvciA9IDIwNjtcbmNvbnN0IE9uZU1pbnVzRHN0QWxwaGFGYWN0b3IgPSAyMDc7XG5jb25zdCBEc3RDb2xvckZhY3RvciA9IDIwODtcbmNvbnN0IE9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgPSAyMDk7XG5jb25zdCBTcmNBbHBoYVNhdHVyYXRlRmFjdG9yID0gMjEwO1xuY29uc3QgTmV2ZXJEZXB0aCA9IDA7XG5jb25zdCBBbHdheXNEZXB0aCA9IDE7XG5jb25zdCBMZXNzRGVwdGggPSAyO1xuY29uc3QgTGVzc0VxdWFsRGVwdGggPSAzO1xuY29uc3QgRXF1YWxEZXB0aCA9IDQ7XG5jb25zdCBHcmVhdGVyRXF1YWxEZXB0aCA9IDU7XG5jb25zdCBHcmVhdGVyRGVwdGggPSA2O1xuY29uc3QgTm90RXF1YWxEZXB0aCA9IDc7XG5jb25zdCBNdWx0aXBseU9wZXJhdGlvbiA9IDA7XG5jb25zdCBNaXhPcGVyYXRpb24gPSAxO1xuY29uc3QgQWRkT3BlcmF0aW9uID0gMjtcbmNvbnN0IE5vVG9uZU1hcHBpbmcgPSAwO1xuY29uc3QgTGluZWFyVG9uZU1hcHBpbmcgPSAxO1xuY29uc3QgUmVpbmhhcmRUb25lTWFwcGluZyA9IDI7XG5jb25zdCBDaW5lb25Ub25lTWFwcGluZyA9IDM7XG5jb25zdCBBQ0VTRmlsbWljVG9uZU1hcHBpbmcgPSA0O1xuY29uc3QgQ3VzdG9tVG9uZU1hcHBpbmcgPSA1O1xuY29uc3QgVVZNYXBwaW5nID0gMzAwO1xuY29uc3QgQ3ViZVJlZmxlY3Rpb25NYXBwaW5nID0gMzAxO1xuY29uc3QgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nID0gMzAyO1xuY29uc3QgRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDM7XG5jb25zdCBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZyA9IDMwNDtcbmNvbnN0IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nID0gMzA2O1xuY29uc3QgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmcgPSAzMDc7XG5jb25zdCBSZXBlYXRXcmFwcGluZyA9IDEwMDA7XG5jb25zdCBDbGFtcFRvRWRnZVdyYXBwaW5nID0gMTAwMTtcbmNvbnN0IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmcgPSAxMDAyO1xuY29uc3QgTmVhcmVzdEZpbHRlciA9IDEwMDM7XG5jb25zdCBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlciA9IDEwMDQ7XG5jb25zdCBOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlciA9IDEwMDQ7XG5jb25zdCBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyID0gMTAwNTtcbmNvbnN0IE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIgPSAxMDA1O1xuY29uc3QgTGluZWFyRmlsdGVyID0gMTAwNjtcbmNvbnN0IExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXIgPSAxMDA3O1xuY29uc3QgTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlciA9IDEwMDc7XG5jb25zdCBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIgPSAxMDA4O1xuY29uc3QgTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyID0gMTAwODtcbmNvbnN0IFVuc2lnbmVkQnl0ZVR5cGUgPSAxMDA5O1xuY29uc3QgQnl0ZVR5cGUgPSAxMDEwO1xuY29uc3QgU2hvcnRUeXBlID0gMTAxMTtcbmNvbnN0IFVuc2lnbmVkU2hvcnRUeXBlID0gMTAxMjtcbmNvbnN0IEludFR5cGUgPSAxMDEzO1xuY29uc3QgVW5zaWduZWRJbnRUeXBlID0gMTAxNDtcbmNvbnN0IEZsb2F0VHlwZSA9IDEwMTU7XG5jb25zdCBIYWxmRmxvYXRUeXBlID0gMTAxNjtcbmNvbnN0IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSA9IDEwMTc7XG5jb25zdCBVbnNpZ25lZFNob3J0NTU1MVR5cGUgPSAxMDE4O1xuY29uc3QgVW5zaWduZWRJbnQyNDhUeXBlID0gMTAyMDtcbmNvbnN0IEFscGhhRm9ybWF0ID0gMTAyMTtcbmNvbnN0IFJHQkFGb3JtYXQgPSAxMDIzO1xuY29uc3QgTHVtaW5hbmNlRm9ybWF0ID0gMTAyNDtcbmNvbnN0IEx1bWluYW5jZUFscGhhRm9ybWF0ID0gMTAyNTtcbmNvbnN0IERlcHRoRm9ybWF0ID0gMTAyNjtcbmNvbnN0IERlcHRoU3RlbmNpbEZvcm1hdCA9IDEwMjc7XG5jb25zdCBSZWRGb3JtYXQgPSAxMDI4O1xuY29uc3QgUmVkSW50ZWdlckZvcm1hdCA9IDEwMjk7XG5jb25zdCBSR0Zvcm1hdCA9IDEwMzA7XG5jb25zdCBSR0ludGVnZXJGb3JtYXQgPSAxMDMxO1xuY29uc3QgUkdCQUludGVnZXJGb3JtYXQgPSAxMDMzO1xuY29uc3QgUkdCX1MzVENfRFhUMV9Gb3JtYXQgPSAzMzc3NjtcbmNvbnN0IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCA9IDMzNzc3O1xuY29uc3QgUkdCQV9TM1RDX0RYVDNfRm9ybWF0ID0gMzM3Nzg7XG5jb25zdCBSR0JBX1MzVENfRFhUNV9Gb3JtYXQgPSAzMzc3OTtcbmNvbnN0IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0ID0gMzU4NDA7XG5jb25zdCBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IDM1ODQxO1xuY29uc3QgUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0ID0gMzU4NDI7XG5jb25zdCBSR0JBX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSAzNTg0MztcbmNvbnN0IFJHQl9FVEMxX0Zvcm1hdCA9IDM2MTk2O1xuY29uc3QgUkdCX0VUQzJfRm9ybWF0ID0gMzc0OTI7XG5jb25zdCBSR0JBX0VUQzJfRUFDX0Zvcm1hdCA9IDM3NDk2O1xuY29uc3QgUkdCQV9BU1RDXzR4NF9Gb3JtYXQgPSAzNzgwODtcbmNvbnN0IFJHQkFfQVNUQ181eDRfRm9ybWF0ID0gMzc4MDk7XG5jb25zdCBSR0JBX0FTVENfNXg1X0Zvcm1hdCA9IDM3ODEwO1xuY29uc3QgUkdCQV9BU1RDXzZ4NV9Gb3JtYXQgPSAzNzgxMTtcbmNvbnN0IFJHQkFfQVNUQ182eDZfRm9ybWF0ID0gMzc4MTI7XG5jb25zdCBSR0JBX0FTVENfOHg1X0Zvcm1hdCA9IDM3ODEzO1xuY29uc3QgUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgPSAzNzgxNDtcbmNvbnN0IFJHQkFfQVNUQ184eDhfRm9ybWF0ID0gMzc4MTU7XG5jb25zdCBSR0JBX0FTVENfMTB4NV9Gb3JtYXQgPSAzNzgxNjtcbmNvbnN0IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCA9IDM3ODE3O1xuY29uc3QgUkdCQV9BU1RDXzEweDhfRm9ybWF0ID0gMzc4MTg7XG5jb25zdCBSR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0gMzc4MTk7XG5jb25zdCBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0ID0gMzc4MjA7XG5jb25zdCBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0ID0gMzc4MjE7XG5jb25zdCBSR0JBX0JQVENfRm9ybWF0ID0gMzY0OTI7XG5jb25zdCBMb29wT25jZSA9IDIyMDA7XG5jb25zdCBMb29wUmVwZWF0ID0gMjIwMTtcbmNvbnN0IExvb3BQaW5nUG9uZyA9IDIyMDI7XG5jb25zdCBJbnRlcnBvbGF0ZURpc2NyZXRlID0gMjMwMDtcbmNvbnN0IEludGVycG9sYXRlTGluZWFyID0gMjMwMTtcbmNvbnN0IEludGVycG9sYXRlU21vb3RoID0gMjMwMjtcbmNvbnN0IFplcm9DdXJ2YXR1cmVFbmRpbmcgPSAyNDAwO1xuY29uc3QgWmVyb1Nsb3BlRW5kaW5nID0gMjQwMTtcbmNvbnN0IFdyYXBBcm91bmRFbmRpbmcgPSAyNDAyO1xuY29uc3QgTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlID0gMjUwMDtcbmNvbnN0IEFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlID0gMjUwMTtcbmNvbnN0IFRyaWFuZ2xlc0RyYXdNb2RlID0gMDtcbmNvbnN0IFRyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9IDE7XG5jb25zdCBUcmlhbmdsZUZhbkRyYXdNb2RlID0gMjtcbmNvbnN0IExpbmVhckVuY29kaW5nID0gMzAwMDtcbmNvbnN0IHNSR0JFbmNvZGluZyA9IDMwMDE7XG5jb25zdCBCYXNpY0RlcHRoUGFja2luZyA9IDMyMDA7XG5jb25zdCBSR0JBRGVwdGhQYWNraW5nID0gMzIwMTtcbmNvbnN0IFRhbmdlbnRTcGFjZU5vcm1hbE1hcCA9IDA7XG5jb25zdCBPYmplY3RTcGFjZU5vcm1hbE1hcCA9IDE7XG5jb25zdCBaZXJvU3RlbmNpbE9wID0gMDtcbmNvbnN0IEtlZXBTdGVuY2lsT3AgPSA3NjgwO1xuY29uc3QgUmVwbGFjZVN0ZW5jaWxPcCA9IDc2ODE7XG5jb25zdCBJbmNyZW1lbnRTdGVuY2lsT3AgPSA3NjgyO1xuY29uc3QgRGVjcmVtZW50U3RlbmNpbE9wID0gNzY4MztcbmNvbnN0IEluY3JlbWVudFdyYXBTdGVuY2lsT3AgPSAzNDA1NTtcbmNvbnN0IERlY3JlbWVudFdyYXBTdGVuY2lsT3AgPSAzNDA1NjtcbmNvbnN0IEludmVydFN0ZW5jaWxPcCA9IDUzODY7XG5jb25zdCBOZXZlclN0ZW5jaWxGdW5jID0gNTEyO1xuY29uc3QgTGVzc1N0ZW5jaWxGdW5jID0gNTEzO1xuY29uc3QgRXF1YWxTdGVuY2lsRnVuYyA9IDUxNDtcbmNvbnN0IExlc3NFcXVhbFN0ZW5jaWxGdW5jID0gNTE1O1xuY29uc3QgR3JlYXRlclN0ZW5jaWxGdW5jID0gNTE2O1xuY29uc3QgTm90RXF1YWxTdGVuY2lsRnVuYyA9IDUxNztcbmNvbnN0IEdyZWF0ZXJFcXVhbFN0ZW5jaWxGdW5jID0gNTE4O1xuY29uc3QgQWx3YXlzU3RlbmNpbEZ1bmMgPSA1MTk7XG5jb25zdCBTdGF0aWNEcmF3VXNhZ2UgPSAzNTA0NDtcbmNvbnN0IER5bmFtaWNEcmF3VXNhZ2UgPSAzNTA0ODtcbmNvbnN0IFN0cmVhbURyYXdVc2FnZSA9IDM1MDQwO1xuY29uc3QgU3RhdGljUmVhZFVzYWdlID0gMzUwNDU7XG5jb25zdCBEeW5hbWljUmVhZFVzYWdlID0gMzUwNDk7XG5jb25zdCBTdHJlYW1SZWFkVXNhZ2UgPSAzNTA0MTtcbmNvbnN0IFN0YXRpY0NvcHlVc2FnZSA9IDM1MDQ2O1xuY29uc3QgRHluYW1pY0NvcHlVc2FnZSA9IDM1MDUwO1xuY29uc3QgU3RyZWFtQ29weVVzYWdlID0gMzUwNDI7XG5jb25zdCBHTFNMMSA9ICcxMDAnO1xuY29uc3QgR0xTTDMgPSAnMzAwIGVzJztcbmNvbnN0IF9TUkdCQUZvcm1hdCA9IDEwMzU7IC8vIGZhbGxiYWNrIGZvciBXZWJHTCAxXG5cbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi9ldmVudGRpc3BhdGNoZXIuanMvXG4gKi9cbmNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblxuXHRcdGlmIChsaXN0ZW5lcnNbdHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGlzdGVuZXJzW3R5cGVdID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSA9PT0gLTEpIHtcblx0XHRcdGxpc3RlbmVyc1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblxuXHRoYXNFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXHRcdHJldHVybiBsaXN0ZW5lcnNbdHlwZV0gIT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lcnNbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzW3R5cGVdO1xuXG5cdFx0aWYgKGxpc3RlbmVyQXJyYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBsaXN0ZW5lckFycmF5LmluZGV4T2YobGlzdGVuZXIpO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdGxpc3RlbmVyQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xuXHRcdGNvbnN0IGxpc3RlbmVyQXJyYXkgPSBsaXN0ZW5lcnNbZXZlbnQudHlwZV07XG5cblx0XHRpZiAobGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSB0aGlzOyAvLyBNYWtlIGEgY29weSwgaW4gY2FzZSBsaXN0ZW5lcnMgYXJlIHJlbW92ZWQgd2hpbGUgaXRlcmF0aW5nLlxuXG5cdFx0XHRjb25zdCBhcnJheSA9IGxpc3RlbmVyQXJyYXkuc2xpY2UoMCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGFycmF5W2ldLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRldmVudC50YXJnZXQgPSBudWxsO1xuXHRcdH1cblx0fVxuXG59XG5cbmNvbnN0IF9sdXQgPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRfbHV0W2ldID0gKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpO1xufVxuXG5sZXQgX3NlZWQgPSAxMjM0NTY3O1xuY29uc3QgREVHMlJBRCA9IE1hdGguUEkgLyAxODA7XG5jb25zdCBSQUQyREVHID0gMTgwIC8gTWF0aC5QSTsgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDUwMzQvaG93LXRvLWNyZWF0ZS1hLWd1aWQtdXVpZC1pbi1qYXZhc2NyaXB0LzIxOTYzMTM2IzIxOTYzMTM2XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHtcblx0Y29uc3QgZDAgPSBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmZmZiB8IDA7XG5cdGNvbnN0IGQxID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRjb25zdCBkMiA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgZDMgPSBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmZmZiB8IDA7XG5cdGNvbnN0IHV1aWQgPSBfbHV0W2QwICYgMHhmZl0gKyBfbHV0W2QwID4+IDggJiAweGZmXSArIF9sdXRbZDAgPj4gMTYgJiAweGZmXSArIF9sdXRbZDAgPj4gMjQgJiAweGZmXSArICctJyArIF9sdXRbZDEgJiAweGZmXSArIF9sdXRbZDEgPj4gOCAmIDB4ZmZdICsgJy0nICsgX2x1dFtkMSA+PiAxNiAmIDB4MGYgfCAweDQwXSArIF9sdXRbZDEgPj4gMjQgJiAweGZmXSArICctJyArIF9sdXRbZDIgJiAweDNmIHwgMHg4MF0gKyBfbHV0W2QyID4+IDggJiAweGZmXSArICctJyArIF9sdXRbZDIgPj4gMTYgJiAweGZmXSArIF9sdXRbZDIgPj4gMjQgJiAweGZmXSArIF9sdXRbZDMgJiAweGZmXSArIF9sdXRbZDMgPj4gOCAmIDB4ZmZdICsgX2x1dFtkMyA+PiAxNiAmIDB4ZmZdICsgX2x1dFtkMyA+PiAyNCAmIDB4ZmZdOyAvLyAudG9VcHBlckNhc2UoKSBoZXJlIGZsYXR0ZW5zIGNvbmNhdGVuYXRlZCBzdHJpbmdzIHRvIHNhdmUgaGVhcCBtZW1vcnkgc3BhY2UuXG5cblx0cmV0dXJuIHV1aWQudG9VcHBlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XG5cdHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn0gLy8gY29tcHV0ZSBldWNsaWRpYW4gbW9kdWxvIG9mIG0gJSBuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG5cblxuZnVuY3Rpb24gZXVjbGlkZWFuTW9kdWxvKG4sIG0pIHtcblx0cmV0dXJuIChuICUgbSArIG0pICUgbTtcbn0gLy8gTGluZWFyIG1hcHBpbmcgZnJvbSByYW5nZSA8YTEsIGEyPiB0byByYW5nZSA8YjEsIGIyPlxuXG5cbmZ1bmN0aW9uIG1hcExpbmVhcih4LCBhMSwgYTIsIGIxLCBiMikge1xuXHRyZXR1cm4gYjEgKyAoeCAtIGExKSAqIChiMiAtIGIxKSAvIChhMiAtIGExKTtcbn0gLy8gaHR0cHM6Ly93d3cuZ2FtZWRldi5uZXQvdHV0b3JpYWxzL3Byb2dyYW1taW5nL2dlbmVyYWwtYW5kLWdhbWVwbGF5LXByb2dyYW1taW5nL2ludmVyc2UtbGVycC1hLXN1cGVyLXVzZWZ1bC15ZXQtb2Z0ZW4tb3Zlcmxvb2tlZC1mdW5jdGlvbi1yNTIzMC9cblxuXG5mdW5jdGlvbiBpbnZlcnNlTGVycCh4LCB5LCB2YWx1ZSkge1xuXHRpZiAoeCAhPT0geSkge1xuXHRcdHJldHVybiAodmFsdWUgLSB4KSAvICh5IC0geCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cbn0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2ludGVycG9sYXRpb25cblxuXG5mdW5jdGlvbiBsZXJwKHgsIHksIHQpIHtcblx0cmV0dXJuICgxIC0gdCkgKiB4ICsgdCAqIHk7XG59IC8vIGh0dHA6Ly93d3cucm9yeWRyaXNjb2xsLmNvbS8yMDE2LzAzLzA3L2ZyYW1lLXJhdGUtaW5kZXBlbmRlbnQtZGFtcGluZy11c2luZy1sZXJwL1xuXG5cbmZ1bmN0aW9uIGRhbXAoeCwgeSwgbGFtYmRhLCBkdCkge1xuXHRyZXR1cm4gbGVycCh4LCB5LCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGR0KSk7XG59IC8vIGh0dHBzOi8vd3d3LmRlc21vcy5jb20vY2FsY3VsYXRvci92Y3Nqbnl6N3g0XG5cblxuZnVuY3Rpb24gcGluZ3BvbmcoeCwgbGVuZ3RoID0gMSkge1xuXHRyZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnMoZXVjbGlkZWFuTW9kdWxvKHgsIGxlbmd0aCAqIDIpIC0gbGVuZ3RoKTtcbn0gLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwXG5cblxuZnVuY3Rpb24gc21vb3Roc3RlcCh4LCBtaW4sIG1heCkge1xuXHRpZiAoeCA8PSBtaW4pIHJldHVybiAwO1xuXHRpZiAoeCA+PSBtYXgpIHJldHVybiAxO1xuXHR4ID0gKHggLSBtaW4pIC8gKG1heCAtIG1pbik7XG5cdHJldHVybiB4ICogeCAqICgzIC0gMiAqIHgpO1xufVxuXG5mdW5jdGlvbiBzbW9vdGhlcnN0ZXAoeCwgbWluLCBtYXgpIHtcblx0aWYgKHggPD0gbWluKSByZXR1cm4gMDtcblx0aWYgKHggPj0gbWF4KSByZXR1cm4gMTtcblx0eCA9ICh4IC0gbWluKSAvIChtYXggLSBtaW4pO1xuXHRyZXR1cm4geCAqIHggKiB4ICogKHggKiAoeCAqIDYgLSAxNSkgKyAxMCk7XG59IC8vIFJhbmRvbSBpbnRlZ2VyIGZyb20gPGxvdywgaGlnaD4gaW50ZXJ2YWxcblxuXG5mdW5jdGlvbiByYW5kSW50KGxvdywgaGlnaCkge1xuXHRyZXR1cm4gbG93ICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cgKyAxKSk7XG59IC8vIFJhbmRvbSBmbG9hdCBmcm9tIDxsb3csIGhpZ2g+IGludGVydmFsXG5cblxuZnVuY3Rpb24gcmFuZEZsb2F0KGxvdywgaGlnaCkge1xuXHRyZXR1cm4gbG93ICsgTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KTtcbn0gLy8gUmFuZG9tIGZsb2F0IGZyb20gPC1yYW5nZS8yLCByYW5nZS8yPiBpbnRlcnZhbFxuXG5cbmZ1bmN0aW9uIHJhbmRGbG9hdFNwcmVhZChyYW5nZSkge1xuXHRyZXR1cm4gcmFuZ2UgKiAoMC41IC0gTWF0aC5yYW5kb20oKSk7XG59IC8vIERldGVybWluaXN0aWMgcHNldWRvLXJhbmRvbSBmbG9hdCBpbiB0aGUgaW50ZXJ2YWwgWyAwLCAxIF1cblxuXG5mdW5jdGlvbiBzZWVkZWRSYW5kb20ocykge1xuXHRpZiAocyAhPT0gdW5kZWZpbmVkKSBfc2VlZCA9IHMgJSAyMTQ3NDgzNjQ3OyAvLyBQYXJrLU1pbGxlciBhbGdvcml0aG1cblxuXHRfc2VlZCA9IF9zZWVkICogMTY4MDcgJSAyMTQ3NDgzNjQ3O1xuXHRyZXR1cm4gKF9zZWVkIC0gMSkgLyAyMTQ3NDgzNjQ2O1xufVxuXG5mdW5jdGlvbiBkZWdUb1JhZChkZWdyZWVzKSB7XG5cdHJldHVybiBkZWdyZWVzICogREVHMlJBRDtcbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcocmFkaWFucykge1xuXHRyZXR1cm4gcmFkaWFucyAqIFJBRDJERUc7XG59XG5cbmZ1bmN0aW9uIGlzUG93ZXJPZlR3byh2YWx1ZSkge1xuXHRyZXR1cm4gKHZhbHVlICYgdmFsdWUgLSAxKSA9PT0gMCAmJiB2YWx1ZSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gY2VpbFBvd2VyT2ZUd28odmFsdWUpIHtcblx0cmV0dXJuIE1hdGgucG93KDIsIE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMikpO1xufVxuXG5mdW5jdGlvbiBmbG9vclBvd2VyT2ZUd28odmFsdWUpIHtcblx0cmV0dXJuIE1hdGgucG93KDIsIE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpKTtcbn1cblxuZnVuY3Rpb24gc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcihxLCBhLCBiLCBjLCBvcmRlcikge1xuXHQvLyBJbnRyaW5zaWMgUHJvcGVyIEV1bGVyIEFuZ2xlcyAtIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdWxlcl9hbmdsZXNcblx0Ly8gcm90YXRpb25zIGFyZSBhcHBsaWVkIHRvIHRoZSBheGVzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgJ29yZGVyJ1xuXHQvLyByb3RhdGlvbiBieSBhbmdsZSAnYScgaXMgYXBwbGllZCBmaXJzdCwgdGhlbiBieSBhbmdsZSAnYicsIHRoZW4gYnkgYW5nbGUgJ2MnXG5cdC8vIGFuZ2xlcyBhcmUgaW4gcmFkaWFuc1xuXHRjb25zdCBjb3MgPSBNYXRoLmNvcztcblx0Y29uc3Qgc2luID0gTWF0aC5zaW47XG5cdGNvbnN0IGMyID0gY29zKGIgLyAyKTtcblx0Y29uc3QgczIgPSBzaW4oYiAvIDIpO1xuXHRjb25zdCBjMTMgPSBjb3MoKGEgKyBjKSAvIDIpO1xuXHRjb25zdCBzMTMgPSBzaW4oKGEgKyBjKSAvIDIpO1xuXHRjb25zdCBjMV8zID0gY29zKChhIC0gYykgLyAyKTtcblx0Y29uc3QgczFfMyA9IHNpbigoYSAtIGMpIC8gMik7XG5cdGNvbnN0IGMzXzEgPSBjb3MoKGMgLSBhKSAvIDIpO1xuXHRjb25zdCBzM18xID0gc2luKChjIC0gYSkgLyAyKTtcblxuXHRzd2l0Y2ggKG9yZGVyKSB7XG5cdFx0Y2FzZSAnWFlYJzpcblx0XHRcdHEuc2V0KGMyICogczEzLCBzMiAqIGMxXzMsIHMyICogczFfMywgYzIgKiBjMTMpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdZWlknOlxuXHRcdFx0cS5zZXQoczIgKiBzMV8zLCBjMiAqIHMxMywgczIgKiBjMV8zLCBjMiAqIGMxMyk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1pYWic6XG5cdFx0XHRxLnNldChzMiAqIGMxXzMsIHMyICogczFfMywgYzIgKiBzMTMsIGMyICogYzEzKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWFpYJzpcblx0XHRcdHEuc2V0KGMyICogczEzLCBzMiAqIHMzXzEsIHMyICogYzNfMSwgYzIgKiBjMTMpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdZWFknOlxuXHRcdFx0cS5zZXQoczIgKiBjM18xLCBjMiAqIHMxMywgczIgKiBzM18xLCBjMiAqIGMxMyk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1pZWic6XG5cdFx0XHRxLnNldChzMiAqIHMzXzEsIHMyICogYzNfMSwgYzIgKiBzMTMsIGMyICogYzEzKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0aFV0aWxzOiAuc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICcgKyBvcmRlcik7XG5cdH1cbn1cblxudmFyIE1hdGhVdGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRERUcyUkFEOiBERUcyUkFELFxuXHRSQUQyREVHOiBSQUQyREVHLFxuXHRnZW5lcmF0ZVVVSUQ6IGdlbmVyYXRlVVVJRCxcblx0Y2xhbXA6IGNsYW1wLFxuXHRldWNsaWRlYW5Nb2R1bG86IGV1Y2xpZGVhbk1vZHVsbyxcblx0bWFwTGluZWFyOiBtYXBMaW5lYXIsXG5cdGludmVyc2VMZXJwOiBpbnZlcnNlTGVycCxcblx0bGVycDogbGVycCxcblx0ZGFtcDogZGFtcCxcblx0cGluZ3Bvbmc6IHBpbmdwb25nLFxuXHRzbW9vdGhzdGVwOiBzbW9vdGhzdGVwLFxuXHRzbW9vdGhlcnN0ZXA6IHNtb290aGVyc3RlcCxcblx0cmFuZEludDogcmFuZEludCxcblx0cmFuZEZsb2F0OiByYW5kRmxvYXQsXG5cdHJhbmRGbG9hdFNwcmVhZDogcmFuZEZsb2F0U3ByZWFkLFxuXHRzZWVkZWRSYW5kb206IHNlZWRlZFJhbmRvbSxcblx0ZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuXHRyYWRUb0RlZzogcmFkVG9EZWcsXG5cdGlzUG93ZXJPZlR3bzogaXNQb3dlck9mVHdvLFxuXHRjZWlsUG93ZXJPZlR3bzogY2VpbFBvd2VyT2ZUd28sXG5cdGZsb29yUG93ZXJPZlR3bzogZmxvb3JQb3dlck9mVHdvLFxuXHRzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOiBzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyXG59KTtcblxuY2xhc3MgVmVjdG9yMiB7XG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCkge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0fVxuXG5cdGdldCB3aWR0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy54O1xuXHR9XG5cblx0c2V0IHdpZHRoKHZhbHVlKSB7XG5cdFx0dGhpcy54ID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaGVpZ2h0KCkge1xuXHRcdHJldHVybiB0aGlzLnk7XG5cdH1cblxuXHRzZXQgaGVpZ2h0KHZhbHVlKSB7XG5cdFx0dGhpcy55ID0gdmFsdWU7XG5cdH1cblxuXHRzZXQoeCwgeSkge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLnggPSBzY2FsYXI7XG5cdFx0dGhpcy55ID0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WCh4KSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFkoeSkge1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb21wb25lbnQoaW5kZXgsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHR0aGlzLnggPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGhpcy55ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbXBvbmVudChpbmRleCkge1xuXHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0cmV0dXJuIHRoaXMueDtcblxuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy55O1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4KTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LCB0aGlzLnkpO1xuXHR9XG5cblx0Y29weSh2KSB7XG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZCh2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCArPSB2Lng7XG5cdFx0dGhpcy55ICs9IHYueTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxhcihzKSB7XG5cdFx0dGhpcy54ICs9IHM7XG5cdFx0dGhpcy55ICs9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRWZWN0b3JzKGEsIGIpIHtcblx0XHR0aGlzLnggPSBhLnggKyBiLng7XG5cdFx0dGhpcy55ID0gYS55ICsgYi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKHYsIHMpIHtcblx0XHR0aGlzLnggKz0gdi54ICogcztcblx0XHR0aGlzLnkgKz0gdi55ICogcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1Yih2LCB3KSB7XG5cdFx0aWYgKHcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKHYsIHcpO1xuXHRcdH1cblxuXHRcdHRoaXMueCAtPSB2Lng7XG5cdFx0dGhpcy55IC09IHYueTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1YlNjYWxhcihzKSB7XG5cdFx0dGhpcy54IC09IHM7XG5cdFx0dGhpcy55IC09IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWJWZWN0b3JzKGEsIGIpIHtcblx0XHR0aGlzLnggPSBhLnggLSBiLng7XG5cdFx0dGhpcy55ID0gYS55IC0gYi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHkodikge1xuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMueCAqPSBzY2FsYXI7XG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpdmlkZSh2KSB7XG5cdFx0dGhpcy54IC89IHYueDtcblx0XHR0aGlzLnkgLz0gdi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKHNjYWxhcikge1xuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEgLyBzY2FsYXIpO1xuXHR9XG5cblx0YXBwbHlNYXRyaXgzKG0pIHtcblx0XHRjb25zdCB4ID0gdGhpcy54LFxuXHRcdFx0XHRcdHkgPSB0aGlzLnk7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cdFx0dGhpcy54ID0gZVswXSAqIHggKyBlWzNdICogeSArIGVbNl07XG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzRdICogeSArIGVbN107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtaW4odikge1xuXHRcdHRoaXMueCA9IE1hdGgubWluKHRoaXMueCwgdi54KTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbih0aGlzLnksIHYueSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYXgodikge1xuXHRcdHRoaXMueCA9IE1hdGgubWF4KHRoaXMueCwgdi54KTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCh0aGlzLnksIHYueSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcChtaW4sIG1heCkge1xuXHRcdC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgobWluLngsIE1hdGgubWluKG1heC54LCB0aGlzLngpKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heChtaW4ueSwgTWF0aC5taW4obWF4LnksIHRoaXMueSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBTY2FsYXIobWluVmFsLCBtYXhWYWwpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy54KSk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMueSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBMZW5ndGgobWluLCBtYXgpIHtcblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihsZW5ndGggfHwgMSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIGxlbmd0aCkpKTtcblx0fVxuXG5cdGZsb29yKCkge1xuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjZWlsKCkge1xuXHRcdHRoaXMueCA9IE1hdGguY2VpbCh0aGlzLngpO1xuXHRcdHRoaXMueSA9IE1hdGguY2VpbCh0aGlzLnkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm91bmQoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5yb3VuZCh0aGlzLngpO1xuXHRcdHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdW5kVG9aZXJvKCkge1xuXHRcdHRoaXMueCA9IHRoaXMueCA8IDAgPyBNYXRoLmNlaWwodGhpcy54KSA6IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSB0aGlzLnkgPCAwID8gTWF0aC5jZWlsKHRoaXMueSkgOiBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cdFx0dGhpcy54ID0gLXRoaXMueDtcblx0XHR0aGlzLnkgPSAtdGhpcy55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZG90KHYpIHtcblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55O1xuXHR9XG5cblx0Y3Jvc3Modikge1xuXHRcdHJldHVybiB0aGlzLnggKiB2LnkgLSB0aGlzLnkgKiB2Lng7XG5cdH1cblxuXHRsZW5ndGhTcSgpIHtcblx0XHRyZXR1cm4gdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55O1xuXHR9XG5cblx0bGVuZ3RoKCkge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55KTtcblx0fVxuXG5cdG1hbmhhdHRhbkxlbmd0aCgpIHtcblx0XHRyZXR1cm4gTWF0aC5hYnModGhpcy54KSArIE1hdGguYWJzKHRoaXMueSk7XG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkgfHwgMSk7XG5cdH1cblxuXHRhbmdsZSgpIHtcblx0XHQvLyBjb21wdXRlcyB0aGUgYW5nbGUgaW4gcmFkaWFucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvc2l0aXZlIHgtYXhpc1xuXHRcdGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMigtdGhpcy55LCAtdGhpcy54KSArIE1hdGguUEk7XG5cdFx0cmV0dXJuIGFuZ2xlO1xuXHR9XG5cblx0ZGlzdGFuY2VUbyh2KSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHYpKTtcblx0fVxuXG5cdGRpc3RhbmNlVG9TcXVhcmVkKHYpIHtcblx0XHRjb25zdCBkeCA9IHRoaXMueCAtIHYueCxcblx0XHRcdFx0XHRkeSA9IHRoaXMueSAtIHYueTtcblx0XHRyZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG5cdH1cblxuXHRtYW5oYXR0YW5EaXN0YW5jZVRvKHYpIHtcblx0XHRyZXR1cm4gTWF0aC5hYnModGhpcy54IC0gdi54KSArIE1hdGguYWJzKHRoaXMueSAtIHYueSk7XG5cdH1cblxuXHRzZXRMZW5ndGgobGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuZ3RoKTtcblx0fVxuXG5cdGxlcnAodiwgYWxwaGEpIHtcblx0XHR0aGlzLnggKz0gKHYueCAtIHRoaXMueCkgKiBhbHBoYTtcblx0XHR0aGlzLnkgKz0gKHYueSAtIHRoaXMueSkgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnBWZWN0b3JzKHYxLCB2MiwgYWxwaGEpIHtcblx0XHR0aGlzLnggPSB2MS54ICsgKHYyLnggLSB2MS54KSAqIGFscGhhO1xuXHRcdHRoaXMueSA9IHYxLnkgKyAodjIueSAtIHYxLnkpICogYWxwaGE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHModikge1xuXHRcdHJldHVybiB2LnggPT09IHRoaXMueCAmJiB2LnkgPT09IHRoaXMueTtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdHRoaXMueCA9IGFycmF5W29mZnNldF07XG5cdFx0dGhpcy55ID0gYXJyYXlbb2Zmc2V0ICsgMV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRhcnJheVtvZmZzZXRdID0gdGhpcy54O1xuXHRcdGFycmF5W29mZnNldCArIDFdID0gdGhpcy55O1xuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KSB7XG5cdFx0aWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nKTtcblx0XHR9XG5cblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlQXJvdW5kKGNlbnRlciwgYW5nbGUpIHtcblx0XHRjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpLFxuXHRcdFx0XHRcdHMgPSBNYXRoLnNpbihhbmdsZSk7XG5cdFx0Y29uc3QgeCA9IHRoaXMueCAtIGNlbnRlci54O1xuXHRcdGNvbnN0IHkgPSB0aGlzLnkgLSBjZW50ZXIueTtcblx0XHR0aGlzLnggPSB4ICogYyAtIHkgKiBzICsgY2VudGVyLng7XG5cdFx0dGhpcy55ID0geCAqIHMgKyB5ICogYyArIGNlbnRlci55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmFuZG9tKCkge1xuXHRcdHRoaXMueCA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yYW5kb20oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdCpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHR5aWVsZCB0aGlzLng7XG5cdFx0eWllbGQgdGhpcy55O1xuXHR9XG5cbn1cblxuVmVjdG9yMi5wcm90b3R5cGUuaXNWZWN0b3IyID0gdHJ1ZTtcblxuY2xhc3MgTWF0cml4MyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZWxlbWVudHMgPSBbMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMV07XG5cblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0KG4xMSwgbjEyLCBuMTMsIG4yMSwgbjIyLCBuMjMsIG4zMSwgbjMyLCBuMzMpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dGVbMF0gPSBuMTE7XG5cdFx0dGVbMV0gPSBuMjE7XG5cdFx0dGVbMl0gPSBuMzE7XG5cdFx0dGVbM10gPSBuMTI7XG5cdFx0dGVbNF0gPSBuMjI7XG5cdFx0dGVbNV0gPSBuMzI7XG5cdFx0dGVbNl0gPSBuMTM7XG5cdFx0dGVbN10gPSBuMjM7XG5cdFx0dGVbOF0gPSBuMzM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZGVudGl0eSgpIHtcblx0XHR0aGlzLnNldCgxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkobSkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBtZSA9IG0uZWxlbWVudHM7XG5cdFx0dGVbMF0gPSBtZVswXTtcblx0XHR0ZVsxXSA9IG1lWzFdO1xuXHRcdHRlWzJdID0gbWVbMl07XG5cdFx0dGVbM10gPSBtZVszXTtcblx0XHR0ZVs0XSA9IG1lWzRdO1xuXHRcdHRlWzVdID0gbWVbNV07XG5cdFx0dGVbNl0gPSBtZVs2XTtcblx0XHR0ZVs3XSA9IG1lWzddO1xuXHRcdHRlWzhdID0gbWVbOF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHRyYWN0QmFzaXMoeEF4aXMsIHlBeGlzLCB6QXhpcykge1xuXHRcdHhBeGlzLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsIDApO1xuXHRcdHlBeGlzLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsIDEpO1xuXHRcdHpBeGlzLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsIDIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDQobSkge1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnNldChtZVswXSwgbWVbNF0sIG1lWzhdLCBtZVsxXSwgbWVbNV0sIG1lWzldLCBtZVsyXSwgbWVbNl0sIG1lWzEwXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseShtKSB7XG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLCBtKTtcblx0fVxuXG5cdHByZW11bHRpcGx5KG0pIHtcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKG0sIHRoaXMpO1xuXHR9XG5cblx0bXVsdGlwbHlNYXRyaWNlcyhhLCBiKSB7XG5cdFx0Y29uc3QgYWUgPSBhLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGJlID0gYi5lbGVtZW50cztcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgYTExID0gYWVbMF0sXG5cdFx0XHRcdFx0YTEyID0gYWVbM10sXG5cdFx0XHRcdFx0YTEzID0gYWVbNl07XG5cdFx0Y29uc3QgYTIxID0gYWVbMV0sXG5cdFx0XHRcdFx0YTIyID0gYWVbNF0sXG5cdFx0XHRcdFx0YTIzID0gYWVbN107XG5cdFx0Y29uc3QgYTMxID0gYWVbMl0sXG5cdFx0XHRcdFx0YTMyID0gYWVbNV0sXG5cdFx0XHRcdFx0YTMzID0gYWVbOF07XG5cdFx0Y29uc3QgYjExID0gYmVbMF0sXG5cdFx0XHRcdFx0YjEyID0gYmVbM10sXG5cdFx0XHRcdFx0YjEzID0gYmVbNl07XG5cdFx0Y29uc3QgYjIxID0gYmVbMV0sXG5cdFx0XHRcdFx0YjIyID0gYmVbNF0sXG5cdFx0XHRcdFx0YjIzID0gYmVbN107XG5cdFx0Y29uc3QgYjMxID0gYmVbMl0sXG5cdFx0XHRcdFx0YjMyID0gYmVbNV0sXG5cdFx0XHRcdFx0YjMzID0gYmVbOF07XG5cdFx0dGVbMF0gPSBhMTEgKiBiMTEgKyBhMTIgKiBiMjEgKyBhMTMgKiBiMzE7XG5cdFx0dGVbM10gPSBhMTEgKiBiMTIgKyBhMTIgKiBiMjIgKyBhMTMgKiBiMzI7XG5cdFx0dGVbNl0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzM7XG5cdFx0dGVbMV0gPSBhMjEgKiBiMTEgKyBhMjIgKiBiMjEgKyBhMjMgKiBiMzE7XG5cdFx0dGVbNF0gPSBhMjEgKiBiMTIgKyBhMjIgKiBiMjIgKyBhMjMgKiBiMzI7XG5cdFx0dGVbN10gPSBhMjEgKiBiMTMgKyBhMjIgKiBiMjMgKyBhMjMgKiBiMzM7XG5cdFx0dGVbMl0gPSBhMzEgKiBiMTEgKyBhMzIgKiBiMjEgKyBhMzMgKiBiMzE7XG5cdFx0dGVbNV0gPSBhMzEgKiBiMTIgKyBhMzIgKiBiMjIgKyBhMzMgKiBiMzI7XG5cdFx0dGVbOF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBhMzMgKiBiMzM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseVNjYWxhcihzKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHRlWzBdICo9IHM7XG5cdFx0dGVbM10gKj0gcztcblx0XHR0ZVs2XSAqPSBzO1xuXHRcdHRlWzFdICo9IHM7XG5cdFx0dGVbNF0gKj0gcztcblx0XHR0ZVs3XSAqPSBzO1xuXHRcdHRlWzJdICo9IHM7XG5cdFx0dGVbNV0gKj0gcztcblx0XHR0ZVs4XSAqPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGV0ZXJtaW5hbnQoKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGEgPSB0ZVswXSxcblx0XHRcdFx0XHRiID0gdGVbMV0sXG5cdFx0XHRcdFx0YyA9IHRlWzJdLFxuXHRcdFx0XHRcdGQgPSB0ZVszXSxcblx0XHRcdFx0XHRlID0gdGVbNF0sXG5cdFx0XHRcdFx0ZiA9IHRlWzVdLFxuXHRcdFx0XHRcdGcgPSB0ZVs2XSxcblx0XHRcdFx0XHRoID0gdGVbN10sXG5cdFx0XHRcdFx0aSA9IHRlWzhdO1xuXHRcdHJldHVybiBhICogZSAqIGkgLSBhICogZiAqIGggLSBiICogZCAqIGkgKyBiICogZiAqIGcgKyBjICogZCAqIGggLSBjICogZSAqIGc7XG5cdH1cblxuXHRpbnZlcnQoKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzLFxuXHRcdFx0XHRcdG4xMSA9IHRlWzBdLFxuXHRcdFx0XHRcdG4yMSA9IHRlWzFdLFxuXHRcdFx0XHRcdG4zMSA9IHRlWzJdLFxuXHRcdFx0XHRcdG4xMiA9IHRlWzNdLFxuXHRcdFx0XHRcdG4yMiA9IHRlWzRdLFxuXHRcdFx0XHRcdG4zMiA9IHRlWzVdLFxuXHRcdFx0XHRcdG4xMyA9IHRlWzZdLFxuXHRcdFx0XHRcdG4yMyA9IHRlWzddLFxuXHRcdFx0XHRcdG4zMyA9IHRlWzhdLFxuXHRcdFx0XHRcdHQxMSA9IG4zMyAqIG4yMiAtIG4zMiAqIG4yMyxcblx0XHRcdFx0XHR0MTIgPSBuMzIgKiBuMTMgLSBuMzMgKiBuMTIsXG5cdFx0XHRcdFx0dDEzID0gbjIzICogbjEyIC0gbjIyICogbjEzLFxuXHRcdFx0XHRcdGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiArIG4zMSAqIHQxMztcblx0XHRpZiAoZGV0ID09PSAwKSByZXR1cm4gdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5cdFx0Y29uc3QgZGV0SW52ID0gMSAvIGRldDtcblx0XHR0ZVswXSA9IHQxMSAqIGRldEludjtcblx0XHR0ZVsxXSA9IChuMzEgKiBuMjMgLSBuMzMgKiBuMjEpICogZGV0SW52O1xuXHRcdHRlWzJdID0gKG4zMiAqIG4yMSAtIG4zMSAqIG4yMikgKiBkZXRJbnY7XG5cdFx0dGVbM10gPSB0MTIgKiBkZXRJbnY7XG5cdFx0dGVbNF0gPSAobjMzICogbjExIC0gbjMxICogbjEzKSAqIGRldEludjtcblx0XHR0ZVs1XSA9IChuMzEgKiBuMTIgLSBuMzIgKiBuMTEpICogZGV0SW52O1xuXHRcdHRlWzZdID0gdDEzICogZGV0SW52O1xuXHRcdHRlWzddID0gKG4yMSAqIG4xMyAtIG4yMyAqIG4xMSkgKiBkZXRJbnY7XG5cdFx0dGVbOF0gPSAobjIyICogbjExIC0gbjIxICogbjEyKSAqIGRldEludjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zcG9zZSgpIHtcblx0XHRsZXQgdG1wO1xuXHRcdGNvbnN0IG0gPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHRtcCA9IG1bMV07XG5cdFx0bVsxXSA9IG1bM107XG5cdFx0bVszXSA9IHRtcDtcblx0XHR0bXAgPSBtWzJdO1xuXHRcdG1bMl0gPSBtWzZdO1xuXHRcdG1bNl0gPSB0bXA7XG5cdFx0dG1wID0gbVs1XTtcblx0XHRtWzVdID0gbVs3XTtcblx0XHRtWzddID0gdG1wO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Tm9ybWFsTWF0cml4KG1hdHJpeDQpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NChtYXRyaXg0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKTtcblx0fVxuXG5cdHRyYW5zcG9zZUludG9BcnJheShyKSB7XG5cdFx0Y29uc3QgbSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0clswXSA9IG1bMF07XG5cdFx0clsxXSA9IG1bM107XG5cdFx0clsyXSA9IG1bNl07XG5cdFx0clszXSA9IG1bMV07XG5cdFx0cls0XSA9IG1bNF07XG5cdFx0cls1XSA9IG1bN107XG5cdFx0cls2XSA9IG1bMl07XG5cdFx0cls3XSA9IG1bNV07XG5cdFx0cls4XSA9IG1bOF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRVdlRyYW5zZm9ybSh0eCwgdHksIHN4LCBzeSwgcm90YXRpb24sIGN4LCBjeSkge1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG5cdFx0Y29uc3QgcyA9IE1hdGguc2luKHJvdGF0aW9uKTtcblx0XHR0aGlzLnNldChzeCAqIGMsIHN4ICogcywgLXN4ICogKGMgKiBjeCArIHMgKiBjeSkgKyBjeCArIHR4LCAtc3kgKiBzLCBzeSAqIGMsIC1zeSAqICgtcyAqIGN4ICsgYyAqIGN5KSArIGN5ICsgdHksIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2NhbGUoc3gsIHN5KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHRlWzBdICo9IHN4O1xuXHRcdHRlWzNdICo9IHN4O1xuXHRcdHRlWzZdICo9IHN4O1xuXHRcdHRlWzFdICo9IHN5O1xuXHRcdHRlWzRdICo9IHN5O1xuXHRcdHRlWzddICo9IHN5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlKHRoZXRhKSB7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKHRoZXRhKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4odGhldGEpO1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBhMTEgPSB0ZVswXSxcblx0XHRcdFx0XHRhMTIgPSB0ZVszXSxcblx0XHRcdFx0XHRhMTMgPSB0ZVs2XTtcblx0XHRjb25zdCBhMjEgPSB0ZVsxXSxcblx0XHRcdFx0XHRhMjIgPSB0ZVs0XSxcblx0XHRcdFx0XHRhMjMgPSB0ZVs3XTtcblx0XHR0ZVswXSA9IGMgKiBhMTEgKyBzICogYTIxO1xuXHRcdHRlWzNdID0gYyAqIGExMiArIHMgKiBhMjI7XG5cdFx0dGVbNl0gPSBjICogYTEzICsgcyAqIGEyMztcblx0XHR0ZVsxXSA9IC1zICogYTExICsgYyAqIGEyMTtcblx0XHR0ZVs0XSA9IC1zICogYTEyICsgYyAqIGEyMjtcblx0XHR0ZVs3XSA9IC1zICogYTEzICsgYyAqIGEyMztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZSh0eCwgdHkpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dGVbMF0gKz0gdHggKiB0ZVsyXTtcblx0XHR0ZVszXSArPSB0eCAqIHRlWzVdO1xuXHRcdHRlWzZdICs9IHR4ICogdGVbOF07XG5cdFx0dGVbMV0gKz0gdHkgKiB0ZVsyXTtcblx0XHR0ZVs0XSArPSB0eSAqIHRlWzVdO1xuXHRcdHRlWzddICs9IHR5ICogdGVbOF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMobWF0cml4KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdGlmICh0ZVtpXSAhPT0gbWVbaV0pIHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRzW2ldID0gYXJyYXlbaSArIG9mZnNldF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0YXJyYXlbb2Zmc2V0XSA9IHRlWzBdO1xuXHRcdGFycmF5W29mZnNldCArIDFdID0gdGVbMV07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMl0gPSB0ZVsyXTtcblx0XHRhcnJheVtvZmZzZXQgKyAzXSA9IHRlWzNdO1xuXHRcdGFycmF5W29mZnNldCArIDRdID0gdGVbNF07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgNV0gPSB0ZVs1XTtcblx0XHRhcnJheVtvZmZzZXQgKyA2XSA9IHRlWzZdO1xuXHRcdGFycmF5W29mZnNldCArIDddID0gdGVbN107XG5cdFx0YXJyYXlbb2Zmc2V0ICsgOF0gPSB0ZVs4XTtcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyk7XG5cdH1cblxufVxuXG5NYXRyaXgzLnByb3RvdHlwZS5pc01hdHJpeDMgPSB0cnVlO1xuXG5mdW5jdGlvbiBhcnJheU5lZWRzVWludDMyKGFycmF5KSB7XG5cdC8vIGFzc3VtZXMgbGFyZ2VyIHZhbHVlcyB1c3VhbGx5IG9uIGxhc3Rcblx0Zm9yIChsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0aWYgKGFycmF5W2ldID4gNjU1MzUpIHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBUWVBFRF9BUlJBWVMgPSB7XG5cdEludDhBcnJheTogSW50OEFycmF5LFxuXHRVaW50OEFycmF5OiBVaW50OEFycmF5LFxuXHRVaW50OENsYW1wZWRBcnJheTogVWludDhDbGFtcGVkQXJyYXksXG5cdEludDE2QXJyYXk6IEludDE2QXJyYXksXG5cdFVpbnQxNkFycmF5OiBVaW50MTZBcnJheSxcblx0SW50MzJBcnJheTogSW50MzJBcnJheSxcblx0VWludDMyQXJyYXk6IFVpbnQzMkFycmF5LFxuXHRGbG9hdDMyQXJyYXk6IEZsb2F0MzJBcnJheSxcblx0RmxvYXQ2NEFycmF5OiBGbG9hdDY0QXJyYXlcbn07XG5cbmZ1bmN0aW9uIGdldFR5cGVkQXJyYXkodHlwZSwgYnVmZmVyKSB7XG5cdHJldHVybiBuZXcgVFlQRURfQVJSQVlTW3R5cGVdKGJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lKSB7XG5cdHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCBuYW1lKTtcbn1cblxuY29uc3QgX2NvbG9yS2V5d29yZHMgPSB7XG5cdCdhbGljZWJsdWUnOiAweEYwRjhGRixcblx0J2FudGlxdWV3aGl0ZSc6IDB4RkFFQkQ3LFxuXHQnYXF1YSc6IDB4MDBGRkZGLFxuXHQnYXF1YW1hcmluZSc6IDB4N0ZGRkQ0LFxuXHQnYXp1cmUnOiAweEYwRkZGRixcblx0J2JlaWdlJzogMHhGNUY1REMsXG5cdCdiaXNxdWUnOiAweEZGRTRDNCxcblx0J2JsYWNrJzogMHgwMDAwMDAsXG5cdCdibGFuY2hlZGFsbW9uZCc6IDB4RkZFQkNELFxuXHQnYmx1ZSc6IDB4MDAwMEZGLFxuXHQnYmx1ZXZpb2xldCc6IDB4OEEyQkUyLFxuXHQnYnJvd24nOiAweEE1MkEyQSxcblx0J2J1cmx5d29vZCc6IDB4REVCODg3LFxuXHQnY2FkZXRibHVlJzogMHg1RjlFQTAsXG5cdCdjaGFydHJldXNlJzogMHg3RkZGMDAsXG5cdCdjaG9jb2xhdGUnOiAweEQyNjkxRSxcblx0J2NvcmFsJzogMHhGRjdGNTAsXG5cdCdjb3JuZmxvd2VyYmx1ZSc6IDB4NjQ5NUVELFxuXHQnY29ybnNpbGsnOiAweEZGRjhEQyxcblx0J2NyaW1zb24nOiAweERDMTQzQyxcblx0J2N5YW4nOiAweDAwRkZGRixcblx0J2RhcmtibHVlJzogMHgwMDAwOEIsXG5cdCdkYXJrY3lhbic6IDB4MDA4QjhCLFxuXHQnZGFya2dvbGRlbnJvZCc6IDB4Qjg4NjBCLFxuXHQnZGFya2dyYXknOiAweEE5QTlBOSxcblx0J2RhcmtncmVlbic6IDB4MDA2NDAwLFxuXHQnZGFya2dyZXknOiAweEE5QTlBOSxcblx0J2RhcmtraGFraSc6IDB4QkRCNzZCLFxuXHQnZGFya21hZ2VudGEnOiAweDhCMDA4Qixcblx0J2RhcmtvbGl2ZWdyZWVuJzogMHg1NTZCMkYsXG5cdCdkYXJrb3JhbmdlJzogMHhGRjhDMDAsXG5cdCdkYXJrb3JjaGlkJzogMHg5OTMyQ0MsXG5cdCdkYXJrcmVkJzogMHg4QjAwMDAsXG5cdCdkYXJrc2FsbW9uJzogMHhFOTk2N0EsXG5cdCdkYXJrc2VhZ3JlZW4nOiAweDhGQkM4Rixcblx0J2RhcmtzbGF0ZWJsdWUnOiAweDQ4M0Q4Qixcblx0J2RhcmtzbGF0ZWdyYXknOiAweDJGNEY0Rixcblx0J2RhcmtzbGF0ZWdyZXknOiAweDJGNEY0Rixcblx0J2Rhcmt0dXJxdW9pc2UnOiAweDAwQ0VEMSxcblx0J2Rhcmt2aW9sZXQnOiAweDk0MDBEMyxcblx0J2RlZXBwaW5rJzogMHhGRjE0OTMsXG5cdCdkZWVwc2t5Ymx1ZSc6IDB4MDBCRkZGLFxuXHQnZGltZ3JheSc6IDB4Njk2OTY5LFxuXHQnZGltZ3JleSc6IDB4Njk2OTY5LFxuXHQnZG9kZ2VyYmx1ZSc6IDB4MUU5MEZGLFxuXHQnZmlyZWJyaWNrJzogMHhCMjIyMjIsXG5cdCdmbG9yYWx3aGl0ZSc6IDB4RkZGQUYwLFxuXHQnZm9yZXN0Z3JlZW4nOiAweDIyOEIyMixcblx0J2Z1Y2hzaWEnOiAweEZGMDBGRixcblx0J2dhaW5zYm9ybyc6IDB4RENEQ0RDLFxuXHQnZ2hvc3R3aGl0ZSc6IDB4RjhGOEZGLFxuXHQnZ29sZCc6IDB4RkZENzAwLFxuXHQnZ29sZGVucm9kJzogMHhEQUE1MjAsXG5cdCdncmF5JzogMHg4MDgwODAsXG5cdCdncmVlbic6IDB4MDA4MDAwLFxuXHQnZ3JlZW55ZWxsb3cnOiAweEFERkYyRixcblx0J2dyZXknOiAweDgwODA4MCxcblx0J2hvbmV5ZGV3JzogMHhGMEZGRjAsXG5cdCdob3RwaW5rJzogMHhGRjY5QjQsXG5cdCdpbmRpYW5yZWQnOiAweENENUM1Qyxcblx0J2luZGlnbyc6IDB4NEIwMDgyLFxuXHQnaXZvcnknOiAweEZGRkZGMCxcblx0J2toYWtpJzogMHhGMEU2OEMsXG5cdCdsYXZlbmRlcic6IDB4RTZFNkZBLFxuXHQnbGF2ZW5kZXJibHVzaCc6IDB4RkZGMEY1LFxuXHQnbGF3bmdyZWVuJzogMHg3Q0ZDMDAsXG5cdCdsZW1vbmNoaWZmb24nOiAweEZGRkFDRCxcblx0J2xpZ2h0Ymx1ZSc6IDB4QUREOEU2LFxuXHQnbGlnaHRjb3JhbCc6IDB4RjA4MDgwLFxuXHQnbGlnaHRjeWFuJzogMHhFMEZGRkYsXG5cdCdsaWdodGdvbGRlbnJvZHllbGxvdyc6IDB4RkFGQUQyLFxuXHQnbGlnaHRncmF5JzogMHhEM0QzRDMsXG5cdCdsaWdodGdyZWVuJzogMHg5MEVFOTAsXG5cdCdsaWdodGdyZXknOiAweEQzRDNEMyxcblx0J2xpZ2h0cGluayc6IDB4RkZCNkMxLFxuXHQnbGlnaHRzYWxtb24nOiAweEZGQTA3QSxcblx0J2xpZ2h0c2VhZ3JlZW4nOiAweDIwQjJBQSxcblx0J2xpZ2h0c2t5Ymx1ZSc6IDB4ODdDRUZBLFxuXHQnbGlnaHRzbGF0ZWdyYXknOiAweDc3ODg5OSxcblx0J2xpZ2h0c2xhdGVncmV5JzogMHg3Nzg4OTksXG5cdCdsaWdodHN0ZWVsYmx1ZSc6IDB4QjBDNERFLFxuXHQnbGlnaHR5ZWxsb3cnOiAweEZGRkZFMCxcblx0J2xpbWUnOiAweDAwRkYwMCxcblx0J2xpbWVncmVlbic6IDB4MzJDRDMyLFxuXHQnbGluZW4nOiAweEZBRjBFNixcblx0J21hZ2VudGEnOiAweEZGMDBGRixcblx0J21hcm9vbic6IDB4ODAwMDAwLFxuXHQnbWVkaXVtYXF1YW1hcmluZSc6IDB4NjZDREFBLFxuXHQnbWVkaXVtYmx1ZSc6IDB4MDAwMENELFxuXHQnbWVkaXVtb3JjaGlkJzogMHhCQTU1RDMsXG5cdCdtZWRpdW1wdXJwbGUnOiAweDkzNzBEQixcblx0J21lZGl1bXNlYWdyZWVuJzogMHgzQ0IzNzEsXG5cdCdtZWRpdW1zbGF0ZWJsdWUnOiAweDdCNjhFRSxcblx0J21lZGl1bXNwcmluZ2dyZWVuJzogMHgwMEZBOUEsXG5cdCdtZWRpdW10dXJxdW9pc2UnOiAweDQ4RDFDQyxcblx0J21lZGl1bXZpb2xldHJlZCc6IDB4QzcxNTg1LFxuXHQnbWlkbmlnaHRibHVlJzogMHgxOTE5NzAsXG5cdCdtaW50Y3JlYW0nOiAweEY1RkZGQSxcblx0J21pc3R5cm9zZSc6IDB4RkZFNEUxLFxuXHQnbW9jY2FzaW4nOiAweEZGRTRCNSxcblx0J25hdmFqb3doaXRlJzogMHhGRkRFQUQsXG5cdCduYXZ5JzogMHgwMDAwODAsXG5cdCdvbGRsYWNlJzogMHhGREY1RTYsXG5cdCdvbGl2ZSc6IDB4ODA4MDAwLFxuXHQnb2xpdmVkcmFiJzogMHg2QjhFMjMsXG5cdCdvcmFuZ2UnOiAweEZGQTUwMCxcblx0J29yYW5nZXJlZCc6IDB4RkY0NTAwLFxuXHQnb3JjaGlkJzogMHhEQTcwRDYsXG5cdCdwYWxlZ29sZGVucm9kJzogMHhFRUU4QUEsXG5cdCdwYWxlZ3JlZW4nOiAweDk4RkI5OCxcblx0J3BhbGV0dXJxdW9pc2UnOiAweEFGRUVFRSxcblx0J3BhbGV2aW9sZXRyZWQnOiAweERCNzA5Myxcblx0J3BhcGF5YXdoaXAnOiAweEZGRUZENSxcblx0J3BlYWNocHVmZic6IDB4RkZEQUI5LFxuXHQncGVydSc6IDB4Q0Q4NTNGLFxuXHQncGluayc6IDB4RkZDMENCLFxuXHQncGx1bSc6IDB4RERBMERELFxuXHQncG93ZGVyYmx1ZSc6IDB4QjBFMEU2LFxuXHQncHVycGxlJzogMHg4MDAwODAsXG5cdCdyZWJlY2NhcHVycGxlJzogMHg2NjMzOTksXG5cdCdyZWQnOiAweEZGMDAwMCxcblx0J3Jvc3licm93bic6IDB4QkM4RjhGLFxuXHQncm95YWxibHVlJzogMHg0MTY5RTEsXG5cdCdzYWRkbGVicm93bic6IDB4OEI0NTEzLFxuXHQnc2FsbW9uJzogMHhGQTgwNzIsXG5cdCdzYW5keWJyb3duJzogMHhGNEE0NjAsXG5cdCdzZWFncmVlbic6IDB4MkU4QjU3LFxuXHQnc2Vhc2hlbGwnOiAweEZGRjVFRSxcblx0J3NpZW5uYSc6IDB4QTA1MjJELFxuXHQnc2lsdmVyJzogMHhDMEMwQzAsXG5cdCdza3libHVlJzogMHg4N0NFRUIsXG5cdCdzbGF0ZWJsdWUnOiAweDZBNUFDRCxcblx0J3NsYXRlZ3JheSc6IDB4NzA4MDkwLFxuXHQnc2xhdGVncmV5JzogMHg3MDgwOTAsXG5cdCdzbm93JzogMHhGRkZBRkEsXG5cdCdzcHJpbmdncmVlbic6IDB4MDBGRjdGLFxuXHQnc3RlZWxibHVlJzogMHg0NjgyQjQsXG5cdCd0YW4nOiAweEQyQjQ4Qyxcblx0J3RlYWwnOiAweDAwODA4MCxcblx0J3RoaXN0bGUnOiAweEQ4QkZEOCxcblx0J3RvbWF0byc6IDB4RkY2MzQ3LFxuXHQndHVycXVvaXNlJzogMHg0MEUwRDAsXG5cdCd2aW9sZXQnOiAweEVFODJFRSxcblx0J3doZWF0JzogMHhGNURFQjMsXG5cdCd3aGl0ZSc6IDB4RkZGRkZGLFxuXHQnd2hpdGVzbW9rZSc6IDB4RjVGNUY1LFxuXHQneWVsbG93JzogMHhGRkZGMDAsXG5cdCd5ZWxsb3dncmVlbic6IDB4OUFDRDMyXG59O1xuY29uc3QgX2hzbEEgPSB7XG5cdGg6IDAsXG5cdHM6IDAsXG5cdGw6IDBcbn07XG5jb25zdCBfaHNsQiA9IHtcblx0aDogMCxcblx0czogMCxcblx0bDogMFxufTtcblxuZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG5cdGlmICh0IDwgMCkgdCArPSAxO1xuXHRpZiAodCA+IDEpIHQgLT0gMTtcblx0aWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG5cdGlmICh0IDwgMSAvIDIpIHJldHVybiBxO1xuXHRpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogKDIgLyAzIC0gdCk7XG5cdHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiBTUkdCVG9MaW5lYXIoYykge1xuXHRyZXR1cm4gYyA8IDAuMDQwNDUgPyBjICogMC4wNzczOTkzODA4IDogTWF0aC5wb3coYyAqIDAuOTQ3ODY3Mjk4NiArIDAuMDUyMTMyNzAxNCwgMi40KTtcbn1cblxuZnVuY3Rpb24gTGluZWFyVG9TUkdCKGMpIHtcblx0cmV0dXJuIGMgPCAwLjAwMzEzMDggPyBjICogMTIuOTIgOiAxLjA1NSAqIE1hdGgucG93KGMsIDAuNDE2NjYpIC0gMC4wNTU7XG59XG5cbmNsYXNzIENvbG9yIHtcblx0Y29uc3RydWN0b3IociwgZywgYikge1xuXHRcdGlmIChnID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyByIGlzIFRIUkVFLkNvbG9yLCBoZXggb3Igc3RyaW5nXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXQocik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc2V0UkdCKHIsIGcsIGIpO1xuXHR9XG5cblx0c2V0KHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlLmlzQ29sb3IpIHtcblx0XHRcdHRoaXMuY29weSh2YWx1ZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG5cdFx0XHR0aGlzLnNldEhleCh2YWx1ZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLnNldFN0eWxlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLnIgPSBzY2FsYXI7XG5cdFx0dGhpcy5nID0gc2NhbGFyO1xuXHRcdHRoaXMuYiA9IHNjYWxhcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEhleChoZXgpIHtcblx0XHRoZXggPSBNYXRoLmZsb29yKGhleCk7XG5cdFx0dGhpcy5yID0gKGhleCA+PiAxNiAmIDI1NSkgLyAyNTU7XG5cdFx0dGhpcy5nID0gKGhleCA+PiA4ICYgMjU1KSAvIDI1NTtcblx0XHR0aGlzLmIgPSAoaGV4ICYgMjU1KSAvIDI1NTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFJHQihyLCBnLCBiKSB7XG5cdFx0dGhpcy5yID0gcjtcblx0XHR0aGlzLmcgPSBnO1xuXHRcdHRoaXMuYiA9IGI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRIU0woaCwgcywgbCkge1xuXHRcdC8vIGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wXG5cdFx0aCA9IGV1Y2xpZGVhbk1vZHVsbyhoLCAxKTtcblx0XHRzID0gY2xhbXAocywgMCwgMSk7XG5cdFx0bCA9IGNsYW1wKGwsIDAsIDEpO1xuXG5cdFx0aWYgKHMgPT09IDApIHtcblx0XHRcdHRoaXMuciA9IHRoaXMuZyA9IHRoaXMuYiA9IGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHAgPSBsIDw9IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcblx0XHRcdGNvbnN0IHEgPSAyICogbCAtIHA7XG5cdFx0XHR0aGlzLnIgPSBodWUycmdiKHEsIHAsIGggKyAxIC8gMyk7XG5cdFx0XHR0aGlzLmcgPSBodWUycmdiKHEsIHAsIGgpO1xuXHRcdFx0dGhpcy5iID0gaHVlMnJnYihxLCBwLCBoIC0gMSAvIDMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0U3R5bGUoc3R5bGUpIHtcblx0XHRmdW5jdGlvbiBoYW5kbGVBbHBoYShzdHJpbmcpIHtcblx0XHRcdGlmIChzdHJpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0XHRpZiAocGFyc2VGbG9hdChzdHJpbmcpIDwgMSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgJyArIHN0eWxlICsgJyB3aWxsIGJlIGlnbm9yZWQuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IG07XG5cblx0XHRpZiAobSA9IC9eKCg/OnJnYnxoc2wpYT8pXFwoKFteXFwpXSopXFwpLy5leGVjKHN0eWxlKSkge1xuXHRcdFx0Ly8gcmdiIC8gaHNsXG5cdFx0XHRsZXQgY29sb3I7XG5cdFx0XHRjb25zdCBuYW1lID0gbVsxXTtcblx0XHRcdGNvbnN0IGNvbXBvbmVudHMgPSBtWzJdO1xuXG5cdFx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdFx0Y2FzZSAncmdiJzpcblx0XHRcdFx0Y2FzZSAncmdiYSc6XG5cdFx0XHRcdFx0aWYgKGNvbG9yID0gL15cXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKGNvbXBvbmVudHMpKSB7XG5cdFx0XHRcdFx0XHQvLyByZ2IoMjU1LDAsMCkgcmdiYSgyNTUsMCwwLDAuNSlcblx0XHRcdFx0XHRcdHRoaXMuciA9IE1hdGgubWluKDI1NSwgcGFyc2VJbnQoY29sb3JbMV0sIDEwKSkgLyAyNTU7XG5cdFx0XHRcdFx0XHR0aGlzLmcgPSBNYXRoLm1pbigyNTUsIHBhcnNlSW50KGNvbG9yWzJdLCAxMCkpIC8gMjU1O1xuXHRcdFx0XHRcdFx0dGhpcy5iID0gTWF0aC5taW4oMjU1LCBwYXJzZUludChjb2xvclszXSwgMTApKSAvIDI1NTtcblx0XHRcdFx0XHRcdGhhbmRsZUFscGhhKGNvbG9yWzRdKTtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChjb2xvciA9IC9eXFxzKihcXGQrKVxcJVxccyosXFxzKihcXGQrKVxcJVxccyosXFxzKihcXGQrKVxcJVxccyooPzosXFxzKihcXGQqXFwuP1xcZCspXFxzKik/JC8uZXhlYyhjb21wb25lbnRzKSkge1xuXHRcdFx0XHRcdFx0Ly8gcmdiKDEwMCUsMCUsMCUpIHJnYmEoMTAwJSwwJSwwJSwwLjUpXG5cdFx0XHRcdFx0XHR0aGlzLnIgPSBNYXRoLm1pbigxMDAsIHBhcnNlSW50KGNvbG9yWzFdLCAxMCkpIC8gMTAwO1xuXHRcdFx0XHRcdFx0dGhpcy5nID0gTWF0aC5taW4oMTAwLCBwYXJzZUludChjb2xvclsyXSwgMTApKSAvIDEwMDtcblx0XHRcdFx0XHRcdHRoaXMuYiA9IE1hdGgubWluKDEwMCwgcGFyc2VJbnQoY29sb3JbM10sIDEwKSkgLyAxMDA7XG5cdFx0XHRcdFx0XHRoYW5kbGVBbHBoYShjb2xvcls0XSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdoc2wnOlxuXHRcdFx0XHRjYXNlICdoc2xhJzpcblx0XHRcdFx0XHRpZiAoY29sb3IgPSAvXlxccyooXFxkKlxcLj9cXGQrKVxccyosXFxzKihcXGQrKVxcJVxccyosXFxzKihcXGQrKVxcJVxccyooPzosXFxzKihcXGQqXFwuP1xcZCspXFxzKik/JC8uZXhlYyhjb21wb25lbnRzKSkge1xuXHRcdFx0XHRcdFx0Ly8gaHNsKDEyMCw1MCUsNTAlKSBoc2xhKDEyMCw1MCUsNTAlLDAuNSlcblx0XHRcdFx0XHRcdGNvbnN0IGggPSBwYXJzZUZsb2F0KGNvbG9yWzFdKSAvIDM2MDtcblx0XHRcdFx0XHRcdGNvbnN0IHMgPSBwYXJzZUludChjb2xvclsyXSwgMTApIC8gMTAwO1xuXHRcdFx0XHRcdFx0Y29uc3QgbCA9IHBhcnNlSW50KGNvbG9yWzNdLCAxMCkgLyAxMDA7XG5cdFx0XHRcdFx0XHRoYW5kbGVBbHBoYShjb2xvcls0XSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRIU0woaCwgcywgbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtID0gL15cXCMoW0EtRmEtZlxcZF0rKSQvLmV4ZWMoc3R5bGUpKSB7XG5cdFx0XHQvLyBoZXggY29sb3Jcblx0XHRcdGNvbnN0IGhleCA9IG1bMV07XG5cdFx0XHRjb25zdCBzaXplID0gaGV4Lmxlbmd0aDtcblxuXHRcdFx0aWYgKHNpemUgPT09IDMpIHtcblx0XHRcdFx0Ly8gI2ZmMFxuXHRcdFx0XHR0aGlzLnIgPSBwYXJzZUludChoZXguY2hhckF0KDApICsgaGV4LmNoYXJBdCgwKSwgMTYpIC8gMjU1O1xuXHRcdFx0XHR0aGlzLmcgPSBwYXJzZUludChoZXguY2hhckF0KDEpICsgaGV4LmNoYXJBdCgxKSwgMTYpIC8gMjU1O1xuXHRcdFx0XHR0aGlzLmIgPSBwYXJzZUludChoZXguY2hhckF0KDIpICsgaGV4LmNoYXJBdCgyKSwgMTYpIC8gMjU1O1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0gZWxzZSBpZiAoc2l6ZSA9PT0gNikge1xuXHRcdFx0XHQvLyAjZmYwMDAwXG5cdFx0XHRcdHRoaXMuciA9IHBhcnNlSW50KGhleC5jaGFyQXQoMCkgKyBoZXguY2hhckF0KDEpLCAxNikgLyAyNTU7XG5cdFx0XHRcdHRoaXMuZyA9IHBhcnNlSW50KGhleC5jaGFyQXQoMikgKyBoZXguY2hhckF0KDMpLCAxNikgLyAyNTU7XG5cdFx0XHRcdHRoaXMuYiA9IHBhcnNlSW50KGhleC5jaGFyQXQoNCkgKyBoZXguY2hhckF0KDUpLCAxNikgLyAyNTU7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzdHlsZSAmJiBzdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRDb2xvck5hbWUoc3R5bGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29sb3JOYW1lKHN0eWxlKSB7XG5cdFx0Ly8gY29sb3Iga2V5d29yZHNcblx0XHRjb25zdCBoZXggPSBfY29sb3JLZXl3b3Jkc1tzdHlsZS50b0xvd2VyQ2FzZSgpXTtcblxuXHRcdGlmIChoZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gcmVkXG5cdFx0XHR0aGlzLnNldEhleChoZXgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1bmtub3duIGNvbG9yXG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICcgKyBzdHlsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLCB0aGlzLmcsIHRoaXMuYik7XG5cdH1cblxuXHRjb3B5KGNvbG9yKSB7XG5cdFx0dGhpcy5yID0gY29sb3Iucjtcblx0XHR0aGlzLmcgPSBjb2xvci5nO1xuXHRcdHRoaXMuYiA9IGNvbG9yLmI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5U1JHQlRvTGluZWFyKGNvbG9yKSB7XG5cdFx0dGhpcy5yID0gU1JHQlRvTGluZWFyKGNvbG9yLnIpO1xuXHRcdHRoaXMuZyA9IFNSR0JUb0xpbmVhcihjb2xvci5nKTtcblx0XHR0aGlzLmIgPSBTUkdCVG9MaW5lYXIoY29sb3IuYik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5TGluZWFyVG9TUkdCKGNvbG9yKSB7XG5cdFx0dGhpcy5yID0gTGluZWFyVG9TUkdCKGNvbG9yLnIpO1xuXHRcdHRoaXMuZyA9IExpbmVhclRvU1JHQihjb2xvci5nKTtcblx0XHR0aGlzLmIgPSBMaW5lYXJUb1NSR0IoY29sb3IuYik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb252ZXJ0U1JHQlRvTGluZWFyKCkge1xuXHRcdHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnZlcnRMaW5lYXJUb1NSR0IoKSB7XG5cdFx0dGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0SGV4KCkge1xuXHRcdHJldHVybiB0aGlzLnIgKiAyNTUgPDwgMTYgXiB0aGlzLmcgKiAyNTUgPDwgOCBeIHRoaXMuYiAqIDI1NSA8PCAwO1xuXHR9XG5cblx0Z2V0SGV4U3RyaW5nKCkge1xuXHRcdHJldHVybiAoJzAwMDAwMCcgKyB0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpO1xuXHR9XG5cblx0Z2V0SFNMKHRhcmdldCkge1xuXHRcdC8vIGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wXG5cdFx0Y29uc3QgciA9IHRoaXMucixcblx0XHRcdFx0XHRnID0gdGhpcy5nLFxuXHRcdFx0XHRcdGIgPSB0aGlzLmI7XG5cdFx0Y29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cdFx0Y29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdFx0bGV0IGh1ZSwgc2F0dXJhdGlvbjtcblx0XHRjb25zdCBsaWdodG5lc3MgPSAobWluICsgbWF4KSAvIDIuMDtcblxuXHRcdGlmIChtaW4gPT09IG1heCkge1xuXHRcdFx0aHVlID0gMDtcblx0XHRcdHNhdHVyYXRpb24gPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBkZWx0YSA9IG1heCAtIG1pbjtcblx0XHRcdHNhdHVyYXRpb24gPSBsaWdodG5lc3MgPD0gMC41ID8gZGVsdGEgLyAobWF4ICsgbWluKSA6IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXG5cdFx0XHRzd2l0Y2ggKG1heCkge1xuXHRcdFx0XHRjYXNlIHI6XG5cdFx0XHRcdFx0aHVlID0gKGcgLSBiKSAvIGRlbHRhICsgKGcgPCBiID8gNiA6IDApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgZzpcblx0XHRcdFx0XHRodWUgPSAoYiAtIHIpIC8gZGVsdGEgKyAyO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgYjpcblx0XHRcdFx0XHRodWUgPSAociAtIGcpIC8gZGVsdGEgKyA0O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRodWUgLz0gNjtcblx0XHR9XG5cblx0XHR0YXJnZXQuaCA9IGh1ZTtcblx0XHR0YXJnZXQucyA9IHNhdHVyYXRpb247XG5cdFx0dGFyZ2V0LmwgPSBsaWdodG5lc3M7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGdldFN0eWxlKCkge1xuXHRcdHJldHVybiAncmdiKCcgKyAodGhpcy5yICogMjU1IHwgMCkgKyAnLCcgKyAodGhpcy5nICogMjU1IHwgMCkgKyAnLCcgKyAodGhpcy5iICogMjU1IHwgMCkgKyAnKSc7XG5cdH1cblxuXHRvZmZzZXRIU0woaCwgcywgbCkge1xuXHRcdHRoaXMuZ2V0SFNMKF9oc2xBKTtcblx0XHRfaHNsQS5oICs9IGg7XG5cdFx0X2hzbEEucyArPSBzO1xuXHRcdF9oc2xBLmwgKz0gbDtcblx0XHR0aGlzLnNldEhTTChfaHNsQS5oLCBfaHNsQS5zLCBfaHNsQS5sKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZChjb2xvcikge1xuXHRcdHRoaXMuciArPSBjb2xvci5yO1xuXHRcdHRoaXMuZyArPSBjb2xvci5nO1xuXHRcdHRoaXMuYiArPSBjb2xvci5iO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkQ29sb3JzKGNvbG9yMSwgY29sb3IyKSB7XG5cdFx0dGhpcy5yID0gY29sb3IxLnIgKyBjb2xvcjIucjtcblx0XHR0aGlzLmcgPSBjb2xvcjEuZyArIGNvbG9yMi5nO1xuXHRcdHRoaXMuYiA9IGNvbG9yMS5iICsgY29sb3IyLmI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRTY2FsYXIocykge1xuXHRcdHRoaXMuciArPSBzO1xuXHRcdHRoaXMuZyArPSBzO1xuXHRcdHRoaXMuYiArPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViKGNvbG9yKSB7XG5cdFx0dGhpcy5yID0gTWF0aC5tYXgoMCwgdGhpcy5yIC0gY29sb3Iucik7XG5cdFx0dGhpcy5nID0gTWF0aC5tYXgoMCwgdGhpcy5nIC0gY29sb3IuZyk7XG5cdFx0dGhpcy5iID0gTWF0aC5tYXgoMCwgdGhpcy5iIC0gY29sb3IuYik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseShjb2xvcikge1xuXHRcdHRoaXMuciAqPSBjb2xvci5yO1xuXHRcdHRoaXMuZyAqPSBjb2xvci5nO1xuXHRcdHRoaXMuYiAqPSBjb2xvci5iO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIocykge1xuXHRcdHRoaXMuciAqPSBzO1xuXHRcdHRoaXMuZyAqPSBzO1xuXHRcdHRoaXMuYiAqPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bGVycChjb2xvciwgYWxwaGEpIHtcblx0XHR0aGlzLnIgKz0gKGNvbG9yLnIgLSB0aGlzLnIpICogYWxwaGE7XG5cdFx0dGhpcy5nICs9IChjb2xvci5nIC0gdGhpcy5nKSAqIGFscGhhO1xuXHRcdHRoaXMuYiArPSAoY29sb3IuYiAtIHRoaXMuYikgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnBDb2xvcnMoY29sb3IxLCBjb2xvcjIsIGFscGhhKSB7XG5cdFx0dGhpcy5yID0gY29sb3IxLnIgKyAoY29sb3IyLnIgLSBjb2xvcjEucikgKiBhbHBoYTtcblx0XHR0aGlzLmcgPSBjb2xvcjEuZyArIChjb2xvcjIuZyAtIGNvbG9yMS5nKSAqIGFscGhhO1xuXHRcdHRoaXMuYiA9IGNvbG9yMS5iICsgKGNvbG9yMi5iIC0gY29sb3IxLmIpICogYWxwaGE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsZXJwSFNMKGNvbG9yLCBhbHBoYSkge1xuXHRcdHRoaXMuZ2V0SFNMKF9oc2xBKTtcblx0XHRjb2xvci5nZXRIU0woX2hzbEIpO1xuXHRcdGNvbnN0IGggPSBsZXJwKF9oc2xBLmgsIF9oc2xCLmgsIGFscGhhKTtcblx0XHRjb25zdCBzID0gbGVycChfaHNsQS5zLCBfaHNsQi5zLCBhbHBoYSk7XG5cdFx0Y29uc3QgbCA9IGxlcnAoX2hzbEEubCwgX2hzbEIubCwgYWxwaGEpO1xuXHRcdHRoaXMuc2V0SFNMKGgsIHMsIGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKGMpIHtcblx0XHRyZXR1cm4gYy5yID09PSB0aGlzLnIgJiYgYy5nID09PSB0aGlzLmcgJiYgYy5iID09PSB0aGlzLmI7XG5cdH1cblxuXHRmcm9tQXJyYXkoYXJyYXksIG9mZnNldCA9IDApIHtcblx0XHR0aGlzLnIgPSBhcnJheVtvZmZzZXRdO1xuXHRcdHRoaXMuZyA9IGFycmF5W29mZnNldCArIDFdO1xuXHRcdHRoaXMuYiA9IGFycmF5W29mZnNldCArIDJdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9BcnJheShhcnJheSA9IFtdLCBvZmZzZXQgPSAwKSB7XG5cdFx0YXJyYXlbb2Zmc2V0XSA9IHRoaXMucjtcblx0XHRhcnJheVtvZmZzZXQgKyAxXSA9IHRoaXMuZztcblx0XHRhcnJheVtvZmZzZXQgKyAyXSA9IHRoaXMuYjtcblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kZXgpIHtcblx0XHR0aGlzLnIgPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XG5cdFx0dGhpcy5nID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xuXHRcdHRoaXMuYiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcblxuXHRcdGlmIChhdHRyaWJ1dGUubm9ybWFsaXplZCA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gYXNzdW1pbmcgVWludDhBcnJheVxuXHRcdFx0dGhpcy5yIC89IDI1NTtcblx0XHRcdHRoaXMuZyAvPSAyNTU7XG5cdFx0XHR0aGlzLmIgLz0gMjU1O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEhleCgpO1xuXHR9XG5cbn1cblxuQ29sb3IuTkFNRVMgPSBfY29sb3JLZXl3b3JkcztcbkNvbG9yLnByb3RvdHlwZS5pc0NvbG9yID0gdHJ1ZTtcbkNvbG9yLnByb3RvdHlwZS5yID0gMTtcbkNvbG9yLnByb3RvdHlwZS5nID0gMTtcbkNvbG9yLnByb3RvdHlwZS5iID0gMTtcblxubGV0IF9jYW52YXM7XG5cbmNsYXNzIEltYWdlVXRpbHMge1xuXHRzdGF0aWMgZ2V0RGF0YVVSTChpbWFnZSkge1xuXHRcdGlmICgvXmRhdGE6L2kudGVzdChpbWFnZS5zcmMpKSB7XG5cdFx0XHRyZXR1cm4gaW1hZ2Uuc3JjO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBpbWFnZS5zcmM7XG5cdFx0fVxuXG5cdFx0bGV0IGNhbnZhcztcblxuXHRcdGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7XG5cdFx0XHRjYW52YXMgPSBpbWFnZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKF9jYW52YXMgPT09IHVuZGVmaW5lZCkgX2NhbnZhcyA9IGNyZWF0ZUVsZW1lbnROUygnY2FudmFzJyk7XG5cdFx0XHRfY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG5cdFx0XHRfY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcblxuXHRcdFx0Y29uc3QgY29udGV4dCA9IF9jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuXHRcdFx0aWYgKGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG5cdFx0XHRcdGNvbnRleHQucHV0SW1hZ2VEYXRhKGltYWdlLCAwLCAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0Y2FudmFzID0gX2NhbnZhcztcblx0XHR9XG5cblx0XHRpZiAoY2FudmFzLndpZHRoID4gMjA0OCB8fCBjYW52YXMuaGVpZ2h0ID4gMjA0OCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnLCBpbWFnZSk7XG5cdFx0XHRyZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuNik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgc1JHQlRvTGluZWFyKGltYWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgdHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkge1xuXHRcdFx0Y29uc3QgY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCdjYW52YXMnKTtcblx0XHRcdGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuXHRcdFx0Y2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdGNvbnN0IGltYWdlRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0Y29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ZGF0YVtpXSA9IFNSR0JUb0xpbmVhcihkYXRhW2ldIC8gMjU1KSAqIDI1NTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcblx0XHRcdHJldHVybiBjYW52YXM7XG5cdFx0fSBlbHNlIGlmIChpbWFnZS5kYXRhKSB7XG5cdFx0XHRjb25zdCBkYXRhID0gaW1hZ2UuZGF0YS5zbGljZSgwKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBkYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHtcblx0XHRcdFx0XHRkYXRhW2ldID0gTWF0aC5mbG9vcihTUkdCVG9MaW5lYXIoZGF0YVtpXSAvIDI1NSkgKiAyNTUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGFzc3VtaW5nIGZsb2F0XG5cdFx0XHRcdFx0ZGF0YVtpXSA9IFNSR0JUb0xpbmVhcihkYXRhW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4nKTtcblx0XHRcdHJldHVybiBpbWFnZTtcblx0XHR9XG5cdH1cblxufVxuXG5sZXQgdGV4dHVyZUlkID0gMDtcblxuY2xhc3MgVGV4dHVyZSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKGltYWdlID0gVGV4dHVyZS5ERUZBVUxUX0lNQUdFLCBtYXBwaW5nID0gVGV4dHVyZS5ERUZBVUxUX01BUFBJTkcsIHdyYXBTID0gQ2xhbXBUb0VkZ2VXcmFwcGluZywgd3JhcFQgPSBDbGFtcFRvRWRnZVdyYXBwaW5nLCBtYWdGaWx0ZXIgPSBMaW5lYXJGaWx0ZXIsIG1pbkZpbHRlciA9IExpbmVhck1pcG1hcExpbmVhckZpbHRlciwgZm9ybWF0ID0gUkdCQUZvcm1hdCwgdHlwZSA9IFVuc2lnbmVkQnl0ZVR5cGUsIGFuaXNvdHJvcHkgPSAxLCBlbmNvZGluZyA9IExpbmVhckVuY29kaW5nKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lkJywge1xuXHRcdFx0dmFsdWU6IHRleHR1cmVJZCsrXG5cdFx0fSk7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy5pbWFnZSA9IGltYWdlO1xuXHRcdHRoaXMubWlwbWFwcyA9IFtdO1xuXHRcdHRoaXMubWFwcGluZyA9IG1hcHBpbmc7XG5cdFx0dGhpcy53cmFwUyA9IHdyYXBTO1xuXHRcdHRoaXMud3JhcFQgPSB3cmFwVDtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlcjtcblx0XHR0aGlzLmFuaXNvdHJvcHkgPSBhbmlzb3Ryb3B5O1xuXHRcdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHRcdHRoaXMuaW50ZXJuYWxGb3JtYXQgPSBudWxsO1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0dGhpcy5vZmZzZXQgPSBuZXcgVmVjdG9yMigwLCAwKTtcblx0XHR0aGlzLnJlcGVhdCA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoMCwgMCk7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IDA7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gdHJ1ZTtcblx0XHR0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXgzKCk7XG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSB0cnVlO1xuXHRcdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSB0cnVlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gNDsgLy8gdmFsaWQgdmFsdWVzOiAxLCAyLCA0LCA4IChzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhlbFN0b3JlaS54bWwpXG5cdFx0Ly8gVmFsdWVzIG9mIGVuY29kaW5nICE9PSBUSFJFRS5MaW5lYXJFbmNvZGluZyBvbmx5IHN1cHBvcnRlZCBvbiBtYXAsIGVudk1hcCBhbmQgZW1pc3NpdmVNYXAuXG5cdFx0Ly9cblx0XHQvLyBBbHNvIGNoYW5naW5nIHRoZSBlbmNvZGluZyBhZnRlciBhbHJlYWR5IHVzZWQgYnkgYSBNYXRlcmlhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IG1ha2UgdGhlIE1hdGVyaWFsXG5cdFx0Ly8gdXBkYXRlLiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IGNhbGwgTWF0ZXJpYWwubmVlZHNVcGRhdGUgdG8gdHJpZ2dlciBpdCB0byByZWNvbXBpbGUuXG5cblx0XHR0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG5cdFx0dGhpcy51c2VyRGF0YSA9IHt9O1xuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cdFx0dGhpcy5vblVwZGF0ZSA9IG51bGw7XG5cdFx0dGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmUgPSBmYWxzZTsgLy8gaW5kaWNhdGVzIHdoZXRoZXIgYSB0ZXh0dXJlIGJlbG9uZ3MgdG8gYSByZW5kZXIgdGFyZ2V0IG9yIG5vdFxuXG5cdFx0dGhpcy5uZWVkc1BNUkVNVXBkYXRlID0gZmFsc2U7IC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgdGV4dHVyZSBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IFBNUkVNR2VuZXJhdG9yIG9yIG5vdCAob25seSByZWxldmFudCBmb3IgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcylcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeCgpIHtcblx0XHR0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55LCB0aGlzLnJlcGVhdC54LCB0aGlzLnJlcGVhdC55LCB0aGlzLnJvdGF0aW9uLCB0aGlzLmNlbnRlci54LCB0aGlzLmNlbnRlci55KTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXHRcdHRoaXMuaW1hZ2UgPSBzb3VyY2UuaW1hZ2U7XG5cdFx0dGhpcy5taXBtYXBzID0gc291cmNlLm1pcG1hcHMuc2xpY2UoMCk7XG5cdFx0dGhpcy5tYXBwaW5nID0gc291cmNlLm1hcHBpbmc7XG5cdFx0dGhpcy53cmFwUyA9IHNvdXJjZS53cmFwUztcblx0XHR0aGlzLndyYXBUID0gc291cmNlLndyYXBUO1xuXHRcdHRoaXMubWFnRmlsdGVyID0gc291cmNlLm1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IHNvdXJjZS5taW5GaWx0ZXI7XG5cdFx0dGhpcy5hbmlzb3Ryb3B5ID0gc291cmNlLmFuaXNvdHJvcHk7XG5cdFx0dGhpcy5mb3JtYXQgPSBzb3VyY2UuZm9ybWF0O1xuXHRcdHRoaXMuaW50ZXJuYWxGb3JtYXQgPSBzb3VyY2UuaW50ZXJuYWxGb3JtYXQ7XG5cdFx0dGhpcy50eXBlID0gc291cmNlLnR5cGU7XG5cdFx0dGhpcy5vZmZzZXQuY29weShzb3VyY2Uub2Zmc2V0KTtcblx0XHR0aGlzLnJlcGVhdC5jb3B5KHNvdXJjZS5yZXBlYXQpO1xuXHRcdHRoaXMuY2VudGVyLmNvcHkoc291cmNlLmNlbnRlcik7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IHNvdXJjZS5yb3RhdGlvbjtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeC5jb3B5KHNvdXJjZS5tYXRyaXgpO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gc291cmNlLmdlbmVyYXRlTWlwbWFwcztcblx0XHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbHlBbHBoYTtcblx0XHR0aGlzLmZsaXBZID0gc291cmNlLmZsaXBZO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gc291cmNlLnVucGFja0FsaWdubWVudDtcblx0XHR0aGlzLmVuY29kaW5nID0gc291cmNlLmVuY29kaW5nO1xuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNvdXJjZS51c2VyRGF0YSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBpc1Jvb3RPYmplY3QgPSBtZXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnO1xuXG5cdFx0aWYgKCFpc1Jvb3RPYmplY3QgJiYgbWV0YS50ZXh0dXJlc1t0aGlzLnV1aWRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBtZXRhLnRleHR1cmVzW3RoaXMudXVpZF07XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3V0cHV0ID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0dmVyc2lvbjogNC41LFxuXHRcdFx0XHR0eXBlOiAnVGV4dHVyZScsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ1RleHR1cmUudG9KU09OJ1xuXHRcdFx0fSxcblx0XHRcdHV1aWQ6IHRoaXMudXVpZCxcblx0XHRcdG5hbWU6IHRoaXMubmFtZSxcblx0XHRcdG1hcHBpbmc6IHRoaXMubWFwcGluZyxcblx0XHRcdHJlcGVhdDogW3RoaXMucmVwZWF0LngsIHRoaXMucmVwZWF0LnldLFxuXHRcdFx0b2Zmc2V0OiBbdGhpcy5vZmZzZXQueCwgdGhpcy5vZmZzZXQueV0sXG5cdFx0XHRjZW50ZXI6IFt0aGlzLmNlbnRlci54LCB0aGlzLmNlbnRlci55XSxcblx0XHRcdHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLFxuXHRcdFx0d3JhcDogW3RoaXMud3JhcFMsIHRoaXMud3JhcFRdLFxuXHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcblx0XHRcdGVuY29kaW5nOiB0aGlzLmVuY29kaW5nLFxuXHRcdFx0bWluRmlsdGVyOiB0aGlzLm1pbkZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogdGhpcy5tYWdGaWx0ZXIsXG5cdFx0XHRhbmlzb3Ryb3B5OiB0aGlzLmFuaXNvdHJvcHksXG5cdFx0XHRmbGlwWTogdGhpcy5mbGlwWSxcblx0XHRcdHByZW11bHRpcGx5QWxwaGE6IHRoaXMucHJlbXVsdGlwbHlBbHBoYSxcblx0XHRcdHVucGFja0FsaWdubWVudDogdGhpcy51bnBhY2tBbGlnbm1lbnRcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuaW1hZ2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVE9ETzogTW92ZSB0byBUSFJFRS5JbWFnZVxuXHRcdFx0Y29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlO1xuXG5cdFx0XHRpZiAoaW1hZ2UudXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGltYWdlLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTsgLy8gVUdIXG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNSb290T2JqZWN0ICYmIG1ldGEuaW1hZ2VzW2ltYWdlLnV1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bGV0IHVybDtcblxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcblx0XHRcdFx0XHQvLyBwcm9jZXNzIGFycmF5IG9mIGltYWdlcyBlLmcuIEN1YmVUZXh0dXJlXG5cdFx0XHRcdFx0dXJsID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGltYWdlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdFx0Ly8gY2hlY2sgY3ViZSB0ZXh0dXJlIHdpdGggZGF0YSB0ZXh0dXJlc1xuXHRcdFx0XHRcdFx0aWYgKGltYWdlW2ldLmlzRGF0YVRleHR1cmUpIHtcblx0XHRcdFx0XHRcdFx0dXJsLnB1c2goc2VyaWFsaXplSW1hZ2UoaW1hZ2VbaV0uaW1hZ2UpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHVybC5wdXNoKHNlcmlhbGl6ZUltYWdlKGltYWdlW2ldKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHByb2Nlc3Mgc2luZ2xlIGltYWdlXG5cdFx0XHRcdFx0dXJsID0gc2VyaWFsaXplSW1hZ2UoaW1hZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bWV0YS5pbWFnZXNbaW1hZ2UudXVpZF0gPSB7XG5cdFx0XHRcdFx0dXVpZDogaW1hZ2UudXVpZCxcblx0XHRcdFx0XHR1cmw6IHVybFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRvdXRwdXQuaW1hZ2UgPSBpbWFnZS51dWlkO1xuXHRcdH1cblxuXHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSAhPT0gJ3t9Jykgb3V0cHV0LnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdGlmICghaXNSb290T2JqZWN0KSB7XG5cdFx0XHRtZXRhLnRleHR1cmVzW3RoaXMudXVpZF0gPSBvdXRwdXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdHR5cGU6ICdkaXNwb3NlJ1xuXHRcdH0pO1xuXHR9XG5cblx0dHJhbnNmb3JtVXYodXYpIHtcblx0XHRpZiAodGhpcy5tYXBwaW5nICE9PSBVVk1hcHBpbmcpIHJldHVybiB1djtcblx0XHR1di5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpO1xuXG5cdFx0aWYgKHV2LnggPCAwIHx8IHV2LnggPiAxKSB7XG5cdFx0XHRzd2l0Y2ggKHRoaXMud3JhcFMpIHtcblx0XHRcdFx0Y2FzZSBSZXBlYXRXcmFwcGluZzpcblx0XHRcdFx0XHR1di54ID0gdXYueCAtIE1hdGguZmxvb3IodXYueCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOlxuXHRcdFx0XHRcdHV2LnggPSB1di54IDwgMCA/IDAgOiAxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgTWlycm9yZWRSZXBlYXRXcmFwcGluZzpcblx0XHRcdFx0XHRpZiAoTWF0aC5hYnMoTWF0aC5mbG9vcih1di54KSAlIDIpID09PSAxKSB7XG5cdFx0XHRcdFx0XHR1di54ID0gTWF0aC5jZWlsKHV2LngpIC0gdXYueDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dXYueCA9IHV2LnggLSBNYXRoLmZsb29yKHV2LngpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh1di55IDwgMCB8fCB1di55ID4gMSkge1xuXHRcdFx0c3dpdGNoICh0aGlzLndyYXBUKSB7XG5cdFx0XHRcdGNhc2UgUmVwZWF0V3JhcHBpbmc6XG5cdFx0XHRcdFx0dXYueSA9IHV2LnkgLSBNYXRoLmZsb29yKHV2LnkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ2xhbXBUb0VkZ2VXcmFwcGluZzpcblx0XHRcdFx0XHR1di55ID0gdXYueSA8IDAgPyAwIDogMTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6XG5cdFx0XHRcdFx0aWYgKE1hdGguYWJzKE1hdGguZmxvb3IodXYueSkgJSAyKSA9PT0gMSkge1xuXHRcdFx0XHRcdFx0dXYueSA9IE1hdGguY2VpbCh1di55KSAtIHV2Lnk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHV2LnkgPSB1di55IC0gTWF0aC5mbG9vcih1di55KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5mbGlwWSkge1xuXHRcdFx0dXYueSA9IDEgLSB1di55O1xuXHRcdH1cblxuXHRcdHJldHVybiB1djtcblx0fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdHJ1ZSkgdGhpcy52ZXJzaW9uKys7XG5cdH1cblxufVxuXG5UZXh0dXJlLkRFRkFVTFRfSU1BR0UgPSB1bmRlZmluZWQ7XG5UZXh0dXJlLkRFRkFVTFRfTUFQUElORyA9IFVWTWFwcGluZztcblRleHR1cmUucHJvdG90eXBlLmlzVGV4dHVyZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUltYWdlKGltYWdlKSB7XG5cdGlmICh0eXBlb2YgSFRNTEltYWdlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCB0eXBlb2YgSW1hZ2VCaXRtYXAgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApIHtcblx0XHQvLyBkZWZhdWx0IGltYWdlc1xuXHRcdHJldHVybiBJbWFnZVV0aWxzLmdldERhdGFVUkwoaW1hZ2UpO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpbWFnZS5kYXRhKSB7XG5cdFx0XHQvLyBpbWFnZXMgb2YgRGF0YVRleHR1cmVcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGltYWdlLmRhdGEpLFxuXHRcdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxuXHRcdFx0XHR0eXBlOiBpbWFnZS5kYXRhLmNvbnN0cnVjdG9yLm5hbWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLicpO1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fVxufVxuXG5jbGFzcyBWZWN0b3I0IHtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCwgdyA9IDEpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblx0XHR0aGlzLncgPSB3O1xuXHR9XG5cblx0Z2V0IHdpZHRoKCkge1xuXHRcdHJldHVybiB0aGlzLno7XG5cdH1cblxuXHRzZXQgd2lkdGgodmFsdWUpIHtcblx0XHR0aGlzLnogPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBoZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudztcblx0fVxuXG5cdHNldCBoZWlnaHQodmFsdWUpIHtcblx0XHR0aGlzLncgPSB2YWx1ZTtcblx0fVxuXG5cdHNldCh4LCB5LCB6LCB3KSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHo7XG5cdFx0dGhpcy53ID0gdztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLnggPSBzY2FsYXI7XG5cdFx0dGhpcy55ID0gc2NhbGFyO1xuXHRcdHRoaXMueiA9IHNjYWxhcjtcblx0XHR0aGlzLncgPSBzY2FsYXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYKHgpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WSh5KSB7XG5cdFx0dGhpcy55ID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFooeikge1xuXHRcdHRoaXMueiA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRXKHcpIHtcblx0XHR0aGlzLncgPSB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29tcG9uZW50KGluZGV4LCB2YWx1ZSkge1xuXHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0dGhpcy54ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRoaXMueSA9IHZhbHVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0aGlzLnogPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0dGhpcy53ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbXBvbmVudChpbmRleCkge1xuXHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0cmV0dXJuIHRoaXMueDtcblxuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy55O1xuXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHJldHVybiB0aGlzLno7XG5cblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0cmV0dXJuIHRoaXMudztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XG5cdH1cblxuXHRjb3B5KHYpIHtcblx0XHR0aGlzLnggPSB2Lng7XG5cdFx0dGhpcy55ID0gdi55O1xuXHRcdHRoaXMueiA9IHYuejtcblx0XHR0aGlzLncgPSB2LncgIT09IHVuZGVmaW5lZCA/IHYudyA6IDE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGQodiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkVmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblx0XHR0aGlzLncgKz0gdi53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWRkU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHR0aGlzLnogKz0gcztcblx0XHR0aGlzLncgKz0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cdFx0dGhpcy56ID0gYS56ICsgYi56O1xuXHRcdHRoaXMudyA9IGEudyArIGIudztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxlZFZlY3Rvcih2LCBzKSB7XG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cdFx0dGhpcy53ICs9IHYudyAqIHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWIodiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblx0XHR0aGlzLncgLT0gdi53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3ViU2NhbGFyKHMpIHtcblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHR0aGlzLnogLT0gcztcblx0XHR0aGlzLncgLT0gcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1YlZlY3RvcnMoYSwgYikge1xuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cdFx0dGhpcy56ID0gYS56IC0gYi56O1xuXHRcdHRoaXMudyA9IGEudyAtIGIudztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5KHYpIHtcblx0XHR0aGlzLnggKj0gdi54O1xuXHRcdHRoaXMueSAqPSB2Lnk7XG5cdFx0dGhpcy56ICo9IHYuejtcblx0XHR0aGlzLncgKj0gdi53O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIoc2NhbGFyKSB7XG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xuXHRcdHRoaXMueiAqPSBzY2FsYXI7XG5cdFx0dGhpcy53ICo9IHNjYWxhcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtKSB7XG5cdFx0Y29uc3QgeCA9IHRoaXMueCxcblx0XHRcdFx0XHR5ID0gdGhpcy55LFxuXHRcdFx0XHRcdHogPSB0aGlzLnosXG5cdFx0XHRcdFx0dyA9IHRoaXMudztcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnggPSBlWzBdICogeCArIGVbNF0gKiB5ICsgZVs4XSAqIHogKyBlWzEyXSAqIHc7XG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6ICsgZVsxM10gKiB3O1xuXHRcdHRoaXMueiA9IGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHogKyBlWzE0XSAqIHc7XG5cdFx0dGhpcy53ID0gZVszXSAqIHggKyBlWzddICogeSArIGVbMTFdICogeiArIGVbMTVdICogdztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpdmlkZVNjYWxhcihzY2FsYXIpIHtcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxIC8gc2NhbGFyKTtcblx0fVxuXG5cdHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHEpIHtcblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvcXVhdGVybmlvblRvQW5nbGUvaW5kZXguaHRtXG5cdFx0Ly8gcSBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHR0aGlzLncgPSAyICogTWF0aC5hY29zKHEudyk7XG5cdFx0Y29uc3QgcyA9IE1hdGguc3FydCgxIC0gcS53ICogcS53KTtcblxuXHRcdGlmIChzIDwgMC4wMDAxKSB7XG5cdFx0XHR0aGlzLnggPSAxO1xuXHRcdFx0dGhpcy55ID0gMDtcblx0XHRcdHRoaXMueiA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMueCA9IHEueCAvIHM7XG5cdFx0XHR0aGlzLnkgPSBxLnkgLyBzO1xuXHRcdFx0dGhpcy56ID0gcS56IC8gcztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeChtKSB7XG5cdFx0Ly8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL21hdHJpeFRvQW5nbGUvaW5kZXguaHRtXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblx0XHRsZXQgYW5nbGUsIHgsIHksIHo7IC8vIHZhcmlhYmxlcyBmb3IgcmVzdWx0XG5cblx0XHRjb25zdCBlcHNpbG9uID0gMC4wMSxcblx0XHRcdFx0XHQvLyBtYXJnaW4gdG8gYWxsb3cgZm9yIHJvdW5kaW5nIGVycm9yc1xuXHRcdGVwc2lsb24yID0gMC4xLFxuXHRcdFx0XHRcdC8vIG1hcmdpbiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDAgYW5kIDE4MCBkZWdyZWVzXG5cdFx0dGUgPSBtLmVsZW1lbnRzLFxuXHRcdFx0XHRcdG0xMSA9IHRlWzBdLFxuXHRcdFx0XHRcdG0xMiA9IHRlWzRdLFxuXHRcdFx0XHRcdG0xMyA9IHRlWzhdLFxuXHRcdFx0XHRcdG0yMSA9IHRlWzFdLFxuXHRcdFx0XHRcdG0yMiA9IHRlWzVdLFxuXHRcdFx0XHRcdG0yMyA9IHRlWzldLFxuXHRcdFx0XHRcdG0zMSA9IHRlWzJdLFxuXHRcdFx0XHRcdG0zMiA9IHRlWzZdLFxuXHRcdFx0XHRcdG0zMyA9IHRlWzEwXTtcblxuXHRcdGlmIChNYXRoLmFicyhtMTIgLSBtMjEpIDwgZXBzaWxvbiAmJiBNYXRoLmFicyhtMTMgLSBtMzEpIDwgZXBzaWxvbiAmJiBNYXRoLmFicyhtMjMgLSBtMzIpIDwgZXBzaWxvbikge1xuXHRcdFx0Ly8gc2luZ3VsYXJpdHkgZm91bmRcblx0XHRcdC8vIGZpcnN0IGNoZWNrIGZvciBpZGVudGl0eSBtYXRyaXggd2hpY2ggbXVzdCBoYXZlICsxIGZvciBhbGwgdGVybXNcblx0XHRcdC8vIGluIGxlYWRpbmcgZGlhZ29uYWwgYW5kIHplcm8gaW4gb3RoZXIgdGVybXNcblx0XHRcdGlmIChNYXRoLmFicyhtMTIgKyBtMjEpIDwgZXBzaWxvbjIgJiYgTWF0aC5hYnMobTEzICsgbTMxKSA8IGVwc2lsb24yICYmIE1hdGguYWJzKG0yMyArIG0zMikgPCBlcHNpbG9uMiAmJiBNYXRoLmFicyhtMTEgKyBtMjIgKyBtMzMgLSAzKSA8IGVwc2lsb24yKSB7XG5cdFx0XHRcdC8vIHRoaXMgc2luZ3VsYXJpdHkgaXMgaWRlbnRpdHkgbWF0cml4IHNvIGFuZ2xlID0gMFxuXHRcdFx0XHR0aGlzLnNldCgxLCAwLCAwLCAwKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7IC8vIHplcm8gYW5nbGUsIGFyYml0cmFyeSBheGlzXG5cdFx0XHR9IC8vIG90aGVyd2lzZSB0aGlzIHNpbmd1bGFyaXR5IGlzIGFuZ2xlID0gMTgwXG5cblxuXHRcdFx0YW5nbGUgPSBNYXRoLlBJO1xuXHRcdFx0Y29uc3QgeHggPSAobTExICsgMSkgLyAyO1xuXHRcdFx0Y29uc3QgeXkgPSAobTIyICsgMSkgLyAyO1xuXHRcdFx0Y29uc3QgenogPSAobTMzICsgMSkgLyAyO1xuXHRcdFx0Y29uc3QgeHkgPSAobTEyICsgbTIxKSAvIDQ7XG5cdFx0XHRjb25zdCB4eiA9IChtMTMgKyBtMzEpIC8gNDtcblx0XHRcdGNvbnN0IHl6ID0gKG0yMyArIG0zMikgLyA0O1xuXG5cdFx0XHRpZiAoeHggPiB5eSAmJiB4eCA+IHp6KSB7XG5cdFx0XHRcdC8vIG0xMSBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtXG5cdFx0XHRcdGlmICh4eCA8IGVwc2lsb24pIHtcblx0XHRcdFx0XHR4ID0gMDtcblx0XHRcdFx0XHR5ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eiA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHggPSBNYXRoLnNxcnQoeHgpO1xuXHRcdFx0XHRcdHkgPSB4eSAvIHg7XG5cdFx0XHRcdFx0eiA9IHh6IC8geDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh5eSA+IHp6KSB7XG5cdFx0XHRcdC8vIG0yMiBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtXG5cdFx0XHRcdGlmICh5eSA8IGVwc2lsb24pIHtcblx0XHRcdFx0XHR4ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eSA9IDA7XG5cdFx0XHRcdFx0eiA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHkgPSBNYXRoLnNxcnQoeXkpO1xuXHRcdFx0XHRcdHggPSB4eSAvIHk7XG5cdFx0XHRcdFx0eiA9IHl6IC8geTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gbTMzIGlzIHRoZSBsYXJnZXN0IGRpYWdvbmFsIHRlcm0gc28gYmFzZSByZXN1bHQgb24gdGhpc1xuXHRcdFx0XHRpZiAoenogPCBlcHNpbG9uKSB7XG5cdFx0XHRcdFx0eCA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHRcdHkgPSAwLjcwNzEwNjc4MTtcblx0XHRcdFx0XHR6ID0gMDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR6ID0gTWF0aC5zcXJ0KHp6KTtcblx0XHRcdFx0XHR4ID0geHogLyB6O1xuXHRcdFx0XHRcdHkgPSB5eiAvIHo7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXQoeCwgeSwgeiwgYW5nbGUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7IC8vIHJldHVybiAxODAgZGVnIHJvdGF0aW9uXG5cdFx0fSAvLyBhcyB3ZSBoYXZlIHJlYWNoZWQgaGVyZSB0aGVyZSBhcmUgbm8gc2luZ3VsYXJpdGllcyBzbyB3ZSBjYW4gaGFuZGxlIG5vcm1hbGx5XG5cblxuXHRcdGxldCBzID0gTWF0aC5zcXJ0KChtMzIgLSBtMjMpICogKG0zMiAtIG0yMykgKyAobTEzIC0gbTMxKSAqIChtMTMgLSBtMzEpICsgKG0yMSAtIG0xMikgKiAobTIxIC0gbTEyKSk7IC8vIHVzZWQgdG8gbm9ybWFsaXplXG5cblx0XHRpZiAoTWF0aC5hYnMocykgPCAwLjAwMSkgcyA9IDE7IC8vIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8sIHNob3VsZCBub3QgaGFwcGVuIGlmIG1hdHJpeCBpcyBvcnRob2dvbmFsIGFuZCBzaG91bGQgYmVcblx0XHQvLyBjYXVnaHQgYnkgc2luZ3VsYXJpdHkgdGVzdCBhYm92ZSwgYnV0IEkndmUgbGVmdCBpdCBpbiBqdXN0IGluIGNhc2VcblxuXHRcdHRoaXMueCA9IChtMzIgLSBtMjMpIC8gcztcblx0XHR0aGlzLnkgPSAobTEzIC0gbTMxKSAvIHM7XG5cdFx0dGhpcy56ID0gKG0yMSAtIG0xMikgLyBzO1xuXHRcdHRoaXMudyA9IE1hdGguYWNvcygobTExICsgbTIyICsgbTMzIC0gMSkgLyAyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1pbih2KSB7XG5cdFx0dGhpcy54ID0gTWF0aC5taW4odGhpcy54LCB2LngpO1xuXHRcdHRoaXMueSA9IE1hdGgubWluKHRoaXMueSwgdi55KTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbih0aGlzLnosIHYueik7XG5cdFx0dGhpcy53ID0gTWF0aC5taW4odGhpcy53LCB2LncpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWF4KHYpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1heCh0aGlzLngsIHYueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgodGhpcy55LCB2LnkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KHRoaXMueiwgdi56KTtcblx0XHR0aGlzLncgPSBNYXRoLm1heCh0aGlzLncsIHYudyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGFtcChtaW4sIG1heCkge1xuXHRcdC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgobWluLngsIE1hdGgubWluKG1heC54LCB0aGlzLngpKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heChtaW4ueSwgTWF0aC5taW4obWF4LnksIHRoaXMueSkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KG1pbi56LCBNYXRoLm1pbihtYXgueiwgdGhpcy56KSk7XG5cdFx0dGhpcy53ID0gTWF0aC5tYXgobWluLncsIE1hdGgubWluKG1heC53LCB0aGlzLncpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsYW1wU2NhbGFyKG1pblZhbCwgbWF4VmFsKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMueCkpO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KG1pblZhbCwgTWF0aC5taW4obWF4VmFsLCB0aGlzLnkpKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy56KSk7XG5cdFx0dGhpcy53ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMudykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBMZW5ndGgobWluLCBtYXgpIHtcblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihsZW5ndGggfHwgMSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIGxlbmd0aCkpKTtcblx0fVxuXG5cdGZsb29yKCkge1xuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5mbG9vcih0aGlzLnopO1xuXHRcdHRoaXMudyA9IE1hdGguZmxvb3IodGhpcy53KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNlaWwoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5jZWlsKHRoaXMueik7XG5cdFx0dGhpcy53ID0gTWF0aC5jZWlsKHRoaXMudyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3VuZCgpIHtcblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuXHRcdHRoaXMueiA9IE1hdGgucm91bmQodGhpcy56KTtcblx0XHR0aGlzLncgPSBNYXRoLnJvdW5kKHRoaXMudyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3VuZFRvWmVybygpIHtcblx0XHR0aGlzLnggPSB0aGlzLnggPCAwID8gTWF0aC5jZWlsKHRoaXMueCkgOiBNYXRoLmZsb29yKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gdGhpcy55IDwgMCA/IE1hdGguY2VpbCh0aGlzLnkpIDogTWF0aC5mbG9vcih0aGlzLnkpO1xuXHRcdHRoaXMueiA9IHRoaXMueiA8IDAgPyBNYXRoLmNlaWwodGhpcy56KSA6IE1hdGguZmxvb3IodGhpcy56KTtcblx0XHR0aGlzLncgPSB0aGlzLncgPCAwID8gTWF0aC5jZWlsKHRoaXMudykgOiBNYXRoLmZsb29yKHRoaXMudyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cdFx0dGhpcy54ID0gLXRoaXMueDtcblx0XHR0aGlzLnkgPSAtdGhpcy55O1xuXHRcdHRoaXMueiA9IC10aGlzLno7XG5cdFx0dGhpcy53ID0gLXRoaXMudztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRvdCh2KSB7XG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYueiArIHRoaXMudyAqIHYudztcblx0fVxuXG5cdGxlbmd0aFNxKCkge1xuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLnc7XG5cdH1cblxuXHRsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLncpO1xuXHR9XG5cblx0bWFuaGF0dGFuTGVuZ3RoKCkge1xuXHRcdHJldHVybiBNYXRoLmFicyh0aGlzLngpICsgTWF0aC5hYnModGhpcy55KSArIE1hdGguYWJzKHRoaXMueikgKyBNYXRoLmFicyh0aGlzLncpO1xuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpIHx8IDEpO1xuXHR9XG5cblx0c2V0TGVuZ3RoKGxlbmd0aCkge1xuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGxlbmd0aCk7XG5cdH1cblxuXHRsZXJwKHYsIGFscGhhKSB7XG5cdFx0dGhpcy54ICs9ICh2LnggLSB0aGlzLngpICogYWxwaGE7XG5cdFx0dGhpcy55ICs9ICh2LnkgLSB0aGlzLnkpICogYWxwaGE7XG5cdFx0dGhpcy56ICs9ICh2LnogLSB0aGlzLnopICogYWxwaGE7XG5cdFx0dGhpcy53ICs9ICh2LncgLSB0aGlzLncpICogYWxwaGE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsZXJwVmVjdG9ycyh2MSwgdjIsIGFscGhhKSB7XG5cdFx0dGhpcy54ID0gdjEueCArICh2Mi54IC0gdjEueCkgKiBhbHBoYTtcblx0XHR0aGlzLnkgPSB2MS55ICsgKHYyLnkgLSB2MS55KSAqIGFscGhhO1xuXHRcdHRoaXMueiA9IHYxLnogKyAodjIueiAtIHYxLnopICogYWxwaGE7XG5cdFx0dGhpcy53ID0gdjEudyArICh2Mi53IC0gdjEudykgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyh2KSB7XG5cdFx0cmV0dXJuIHYueCA9PT0gdGhpcy54ICYmIHYueSA9PT0gdGhpcy55ICYmIHYueiA9PT0gdGhpcy56ICYmIHYudyA9PT0gdGhpcy53O1xuXHR9XG5cblx0ZnJvbUFycmF5KGFycmF5LCBvZmZzZXQgPSAwKSB7XG5cdFx0dGhpcy54ID0gYXJyYXlbb2Zmc2V0XTtcblx0XHR0aGlzLnkgPSBhcnJheVtvZmZzZXQgKyAxXTtcblx0XHR0aGlzLnogPSBhcnJheVtvZmZzZXQgKyAyXTtcblx0XHR0aGlzLncgPSBhcnJheVtvZmZzZXQgKyAzXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGFycmF5W29mZnNldF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0aGlzLnk7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMl0gPSB0aGlzLno7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgM10gPSB0aGlzLnc7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQpIHtcblx0XHRpZiAob2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicpO1xuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XG5cdFx0dGhpcy56ID0gYXR0cmlidXRlLmdldFooaW5kZXgpO1xuXHRcdHRoaXMudyA9IGF0dHJpYnV0ZS5nZXRXKGluZGV4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJhbmRvbSgpIHtcblx0XHR0aGlzLnggPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMueSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy56ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLncgPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0KltTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdHlpZWxkIHRoaXMueDtcblx0XHR5aWVsZCB0aGlzLnk7XG5cdFx0eWllbGQgdGhpcy56O1xuXHRcdHlpZWxkIHRoaXMudztcblx0fVxuXG59XG5cblZlY3RvcjQucHJvdG90eXBlLmlzVmVjdG9yNCA9IHRydWU7XG5cbi8qXG4gSW4gb3B0aW9ucywgd2UgY2FuIHNwZWNpZnk6XG4gKiBUZXh0dXJlIHBhcmFtZXRlcnMgZm9yIGFuIGF1dG8tZ2VuZXJhdGVkIHRhcmdldCB0ZXh0dXJlXG4gKiBkZXB0aEJ1ZmZlci9zdGVuY2lsQnVmZmVyOiBCb29sZWFucyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgYnVmZmVyc1xuKi9cblxuY2xhc3MgV2ViR0xSZW5kZXJUYXJnZXQgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gMTtcblx0XHR0aGlzLnNjaXNzb3IgPSBuZXcgVmVjdG9yNCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzLnNjaXNzb3JUZXN0ID0gZmFsc2U7XG5cdFx0dGhpcy52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKHVuZGVmaW5lZCwgb3B0aW9ucy5tYXBwaW5nLCBvcHRpb25zLndyYXBTLCBvcHRpb25zLndyYXBULCBvcHRpb25zLm1hZ0ZpbHRlciwgb3B0aW9ucy5taW5GaWx0ZXIsIG9wdGlvbnMuZm9ybWF0LCBvcHRpb25zLnR5cGUsIG9wdGlvbnMuYW5pc290cm9weSwgb3B0aW9ucy5lbmNvZGluZyk7XG5cdFx0dGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IHRydWU7XG5cdFx0dGhpcy50ZXh0dXJlLmltYWdlID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHRkZXB0aDogMVxuXHRcdH07XG5cdFx0dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmdlbmVyYXRlTWlwbWFwcyA6IGZhbHNlO1xuXHRcdHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCA9IG9wdGlvbnMuaW50ZXJuYWxGb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJuYWxGb3JtYXQgOiBudWxsO1xuXHRcdHRoaXMudGV4dHVyZS5taW5GaWx0ZXIgPSBvcHRpb25zLm1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW5GaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cdFx0dGhpcy5kZXB0aEJ1ZmZlciA9IG9wdGlvbnMuZGVwdGhCdWZmZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGVwdGhCdWZmZXIgOiB0cnVlO1xuXHRcdHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuc3RlbmNpbEJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zdGVuY2lsQnVmZmVyIDogZmFsc2U7XG5cdFx0dGhpcy5kZXB0aFRleHR1cmUgPSBvcHRpb25zLmRlcHRoVGV4dHVyZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aFRleHR1cmUgOiBudWxsO1xuXHR9XG5cblx0c2V0VGV4dHVyZSh0ZXh0dXJlKSB7XG5cdFx0dGV4dHVyZS5pbWFnZSA9IHtcblx0XHRcdHdpZHRoOiB0aGlzLndpZHRoLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLmhlaWdodCxcblx0XHRcdGRlcHRoOiB0aGlzLmRlcHRoXG5cdFx0fTtcblx0XHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXHR9XG5cblx0c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCBkZXB0aCA9IDEpIHtcblx0XHRpZiAodGhpcy53aWR0aCAhPT0gd2lkdGggfHwgdGhpcy5oZWlnaHQgIT09IGhlaWdodCB8fCB0aGlzLmRlcHRoICE9PSBkZXB0aCkge1xuXHRcdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG5cdFx0XHR0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGggPSB3aWR0aDtcblx0XHRcdHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHR0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGggPSBkZXB0aDtcblx0XHRcdHRoaXMuZGlzcG9zZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMudmlld3BvcnQuc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMuc2Npc3Nvci5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gc291cmNlLmRlcHRoO1xuXHRcdHRoaXMudmlld3BvcnQuY29weShzb3VyY2Uudmlld3BvcnQpO1xuXHRcdHRoaXMudGV4dHVyZSA9IHNvdXJjZS50ZXh0dXJlLmNsb25lKCk7IC8vIGVuc3VyZSBpbWFnZSBvYmplY3QgaXMgbm90IHNoYXJlZCwgc2VlICMyMDMyOFxuXG5cdFx0dGhpcy50ZXh0dXJlLmltYWdlID0gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlLnRleHR1cmUuaW1hZ2UpO1xuXHRcdHRoaXMuZGVwdGhCdWZmZXIgPSBzb3VyY2UuZGVwdGhCdWZmZXI7XG5cdFx0dGhpcy5zdGVuY2lsQnVmZmVyID0gc291cmNlLnN0ZW5jaWxCdWZmZXI7XG5cdFx0dGhpcy5kZXB0aFRleHR1cmUgPSBzb3VyY2UuZGVwdGhUZXh0dXJlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0dHlwZTogJ2Rpc3Bvc2UnXG5cdFx0fSk7XG5cdH1cblxufVxuXG5XZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldCA9IHRydWU7XG5cbmNsYXNzIFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGV4dGVuZHMgV2ViR0xSZW5kZXJUYXJnZXQge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCBjb3VudCkge1xuXHRcdHN1cGVyKHdpZHRoLCBoZWlnaHQpO1xuXHRcdGNvbnN0IHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cdFx0dGhpcy50ZXh0dXJlID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHRoaXMudGV4dHVyZVtpXSA9IHRleHR1cmUuY2xvbmUoKTtcblx0XHR9XG5cdH1cblxuXHRzZXRTaXplKHdpZHRoLCBoZWlnaHQsIGRlcHRoID0gMSkge1xuXHRcdGlmICh0aGlzLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuZGVwdGggIT09IGRlcHRoKSB7XG5cdFx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdHRoaXMuZGVwdGggPSBkZXB0aDtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gdGhpcy50ZXh0dXJlLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0dGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRcdHRoaXMudGV4dHVyZVtpXS5pbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHRcdHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aCA9IGRlcHRoO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0XHR9XG5cblx0XHR0aGlzLnZpZXdwb3J0LnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzLnNjaXNzb3Iuc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0XHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gc291cmNlLmRlcHRoO1xuXHRcdHRoaXMudmlld3BvcnQuc2V0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XHR0aGlzLnNjaXNzb3Iuc2V0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XHR0aGlzLmRlcHRoQnVmZmVyID0gc291cmNlLmRlcHRoQnVmZmVyO1xuXHRcdHRoaXMuc3RlbmNpbEJ1ZmZlciA9IHNvdXJjZS5zdGVuY2lsQnVmZmVyO1xuXHRcdHRoaXMuZGVwdGhUZXh0dXJlID0gc291cmNlLmRlcHRoVGV4dHVyZTtcblx0XHR0aGlzLnRleHR1cmUubGVuZ3RoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHNvdXJjZS50ZXh0dXJlLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdHRoaXMudGV4dHVyZVtpXSA9IHNvdXJjZS50ZXh0dXJlW2ldLmNsb25lKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5XZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cy5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHRydWU7XG5cbmNsYXNzIFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgZXh0ZW5kcyBXZWJHTFJlbmRlclRhcmdldCB7XG5cdGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXHRcdHRoaXMuc2FtcGxlcyA9IDQ7XG5cdFx0dGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSA9IG9wdGlvbnMuaWdub3JlRGVwdGggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaWdub3JlRGVwdGggOiB0cnVlO1xuXHRcdHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlID0gb3B0aW9ucy51c2VSZW5kZXJUb1RleHR1cmUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudXNlUmVuZGVyVG9UZXh0dXJlIDogZmFsc2U7XG5cdFx0dGhpcy51c2VSZW5kZXJidWZmZXIgPSB0aGlzLnVzZVJlbmRlclRvVGV4dHVyZSA9PT0gZmFsc2U7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkuY2FsbCh0aGlzLCBzb3VyY2UpO1xuXHRcdHRoaXMuc2FtcGxlcyA9IHNvdXJjZS5zYW1wbGVzO1xuXHRcdHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlID0gc291cmNlLnVzZVJlbmRlclRvVGV4dHVyZTtcblx0XHR0aGlzLnVzZVJlbmRlcmJ1ZmZlciA9IHNvdXJjZS51c2VSZW5kZXJidWZmZXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5XZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgPSB0cnVlO1xuXG5jbGFzcyBRdWF0ZXJuaW9uIHtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCwgdyA9IDEpIHtcblx0XHR0aGlzLl94ID0geDtcblx0XHR0aGlzLl95ID0geTtcblx0XHR0aGlzLl96ID0gejtcblx0XHR0aGlzLl93ID0gdztcblx0fVxuXG5cdHN0YXRpYyBzbGVycChxYSwgcWIsIHFtLCB0KSB7XG5cdFx0Y29uc29sZS53YXJuKCdUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuJyk7XG5cdFx0cmV0dXJuIHFtLnNsZXJwUXVhdGVybmlvbnMocWEsIHFiLCB0KTtcblx0fVxuXG5cdHN0YXRpYyBzbGVycEZsYXQoZHN0LCBkc3RPZmZzZXQsIHNyYzAsIHNyY09mZnNldDAsIHNyYzEsIHNyY09mZnNldDEsIHQpIHtcblx0XHQvLyBmdXp6LWZyZWUsIGFycmF5LWJhc2VkIFF1YXRlcm5pb24gU0xFUlAgb3BlcmF0aW9uXG5cdFx0bGV0IHgwID0gc3JjMFtzcmNPZmZzZXQwICsgMF0sXG5cdFx0XHRcdHkwID0gc3JjMFtzcmNPZmZzZXQwICsgMV0sXG5cdFx0XHRcdHowID0gc3JjMFtzcmNPZmZzZXQwICsgMl0sXG5cdFx0XHRcdHcwID0gc3JjMFtzcmNPZmZzZXQwICsgM107XG5cdFx0Y29uc3QgeDEgPSBzcmMxW3NyY09mZnNldDEgKyAwXSxcblx0XHRcdFx0XHR5MSA9IHNyYzFbc3JjT2Zmc2V0MSArIDFdLFxuXHRcdFx0XHRcdHoxID0gc3JjMVtzcmNPZmZzZXQxICsgMl0sXG5cdFx0XHRcdFx0dzEgPSBzcmMxW3NyY09mZnNldDEgKyAzXTtcblxuXHRcdGlmICh0ID09PSAwKSB7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgMF0gPSB4MDtcblx0XHRcdGRzdFtkc3RPZmZzZXQgKyAxXSA9IHkwO1xuXHRcdFx0ZHN0W2RzdE9mZnNldCArIDJdID0gejA7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgM10gPSB3MDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodCA9PT0gMSkge1xuXHRcdFx0ZHN0W2RzdE9mZnNldCArIDBdID0geDE7XG5cdFx0XHRkc3RbZHN0T2Zmc2V0ICsgMV0gPSB5MTtcblx0XHRcdGRzdFtkc3RPZmZzZXQgKyAyXSA9IHoxO1xuXHRcdFx0ZHN0W2RzdE9mZnNldCArIDNdID0gdzE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHcwICE9PSB3MSB8fCB4MCAhPT0geDEgfHwgeTAgIT09IHkxIHx8IHowICE9PSB6MSkge1xuXHRcdFx0bGV0IHMgPSAxIC0gdDtcblx0XHRcdGNvbnN0IGNvcyA9IHgwICogeDEgKyB5MCAqIHkxICsgejAgKiB6MSArIHcwICogdzEsXG5cdFx0XHRcdFx0XHRkaXIgPSBjb3MgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdHNxclNpbiA9IDEgLSBjb3MgKiBjb3M7IC8vIFNraXAgdGhlIFNsZXJwIGZvciB0aW55IHN0ZXBzIHRvIGF2b2lkIG51bWVyaWMgcHJvYmxlbXM6XG5cblx0XHRcdGlmIChzcXJTaW4gPiBOdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNxcnQoc3FyU2luKSxcblx0XHRcdFx0XHRcdFx0bGVuID0gTWF0aC5hdGFuMihzaW4sIGNvcyAqIGRpcik7XG5cdFx0XHRcdHMgPSBNYXRoLnNpbihzICogbGVuKSAvIHNpbjtcblx0XHRcdFx0dCA9IE1hdGguc2luKHQgKiBsZW4pIC8gc2luO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0RGlyID0gdCAqIGRpcjtcblx0XHRcdHgwID0geDAgKiBzICsgeDEgKiB0RGlyO1xuXHRcdFx0eTAgPSB5MCAqIHMgKyB5MSAqIHREaXI7XG5cdFx0XHR6MCA9IHowICogcyArIHoxICogdERpcjtcblx0XHRcdHcwID0gdzAgKiBzICsgdzEgKiB0RGlyOyAvLyBOb3JtYWxpemUgaW4gY2FzZSB3ZSBqdXN0IGRpZCBhIGxlcnA6XG5cblx0XHRcdGlmIChzID09PSAxIC0gdCkge1xuXHRcdFx0XHRjb25zdCBmID0gMSAvIE1hdGguc3FydCh4MCAqIHgwICsgeTAgKiB5MCArIHowICogejAgKyB3MCAqIHcwKTtcblx0XHRcdFx0eDAgKj0gZjtcblx0XHRcdFx0eTAgKj0gZjtcblx0XHRcdFx0ejAgKj0gZjtcblx0XHRcdFx0dzAgKj0gZjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRkc3RbZHN0T2Zmc2V0XSA9IHgwO1xuXHRcdGRzdFtkc3RPZmZzZXQgKyAxXSA9IHkwO1xuXHRcdGRzdFtkc3RPZmZzZXQgKyAyXSA9IHowO1xuXHRcdGRzdFtkc3RPZmZzZXQgKyAzXSA9IHcwO1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGRzdCwgZHN0T2Zmc2V0LCBzcmMwLCBzcmNPZmZzZXQwLCBzcmMxLCBzcmNPZmZzZXQxKSB7XG5cdFx0Y29uc3QgeDAgPSBzcmMwW3NyY09mZnNldDBdO1xuXHRcdGNvbnN0IHkwID0gc3JjMFtzcmNPZmZzZXQwICsgMV07XG5cdFx0Y29uc3QgejAgPSBzcmMwW3NyY09mZnNldDAgKyAyXTtcblx0XHRjb25zdCB3MCA9IHNyYzBbc3JjT2Zmc2V0MCArIDNdO1xuXHRcdGNvbnN0IHgxID0gc3JjMVtzcmNPZmZzZXQxXTtcblx0XHRjb25zdCB5MSA9IHNyYzFbc3JjT2Zmc2V0MSArIDFdO1xuXHRcdGNvbnN0IHoxID0gc3JjMVtzcmNPZmZzZXQxICsgMl07XG5cdFx0Y29uc3QgdzEgPSBzcmMxW3NyY09mZnNldDEgKyAzXTtcblx0XHRkc3RbZHN0T2Zmc2V0XSA9IHgwICogdzEgKyB3MCAqIHgxICsgeTAgKiB6MSAtIHowICogeTE7XG5cdFx0ZHN0W2RzdE9mZnNldCArIDFdID0geTAgKiB3MSArIHcwICogeTEgKyB6MCAqIHgxIC0geDAgKiB6MTtcblx0XHRkc3RbZHN0T2Zmc2V0ICsgMl0gPSB6MCAqIHcxICsgdzAgKiB6MSArIHgwICogeTEgLSB5MCAqIHgxO1xuXHRcdGRzdFtkc3RPZmZzZXQgKyAzXSA9IHcwICogdzEgLSB4MCAqIHgxIC0geTAgKiB5MSAtIHowICogejE7XG5cdFx0cmV0dXJuIGRzdDtcblx0fVxuXG5cdGdldCB4KCkge1xuXHRcdHJldHVybiB0aGlzLl94O1xuXHR9XG5cblx0c2V0IHgodmFsdWUpIHtcblx0XHR0aGlzLl94ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRnZXQgeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5feTtcblx0fVxuXG5cdHNldCB5KHZhbHVlKSB7XG5cdFx0dGhpcy5feSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXHR9XG5cblx0Z2V0IHooKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3o7XG5cdH1cblxuXHRzZXQgeih2YWx1ZSkge1xuXHRcdHRoaXMuX3ogPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdGdldCB3KCkge1xuXHRcdHJldHVybiB0aGlzLl93O1xuXHR9XG5cblx0c2V0IHcodmFsdWUpIHtcblx0XHR0aGlzLl93ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRzZXQoeCwgeSwgeiwgdykge1xuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX3cgPSB3O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiwgdGhpcy5fdyk7XG5cdH1cblxuXHRjb3B5KHF1YXRlcm5pb24pIHtcblx0XHR0aGlzLl94ID0gcXVhdGVybmlvbi54O1xuXHRcdHRoaXMuX3kgPSBxdWF0ZXJuaW9uLnk7XG5cdFx0dGhpcy5feiA9IHF1YXRlcm5pb24uejtcblx0XHR0aGlzLl93ID0gcXVhdGVybmlvbi53O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tRXVsZXIoZXVsZXIsIHVwZGF0ZSkge1xuXHRcdGlmICghKGV1bGVyICYmIGV1bGVyLmlzRXVsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHggPSBldWxlci5feCxcblx0XHRcdFx0XHR5ID0gZXVsZXIuX3ksXG5cdFx0XHRcdFx0eiA9IGV1bGVyLl96LFxuXHRcdFx0XHRcdG9yZGVyID0gZXVsZXIuX29yZGVyOyAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXG5cdFx0Ly8gXHQyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cblx0XHQvL1x0Y29udGVudC9TcGluQ2FsYy5tXG5cblx0XHRjb25zdCBjb3MgPSBNYXRoLmNvcztcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbjtcblx0XHRjb25zdCBjMSA9IGNvcyh4IC8gMik7XG5cdFx0Y29uc3QgYzIgPSBjb3MoeSAvIDIpO1xuXHRcdGNvbnN0IGMzID0gY29zKHogLyAyKTtcblx0XHRjb25zdCBzMSA9IHNpbih4IC8gMik7XG5cdFx0Y29uc3QgczIgPSBzaW4oeSAvIDIpO1xuXHRcdGNvbnN0IHMzID0gc2luKHogLyAyKTtcblxuXHRcdHN3aXRjaCAob3JkZXIpIHtcblx0XHRcdGNhc2UgJ1hZWic6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdZWFonOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWlhZJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1pZWCc6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdZWlgnOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWFpZJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICcgKyBvcmRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZSAhPT0gZmFsc2UpIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUpIHtcblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvYW5nbGVUb1F1YXRlcm5pb24vaW5kZXguaHRtXG5cdFx0Ly8gYXNzdW1lcyBheGlzIGlzIG5vcm1hbGl6ZWRcblx0XHRjb25zdCBoYWxmQW5nbGUgPSBhbmdsZSAvIDIsXG5cdFx0XHRcdFx0cyA9IE1hdGguc2luKGhhbGZBbmdsZSk7XG5cdFx0dGhpcy5feCA9IGF4aXMueCAqIHM7XG5cdFx0dGhpcy5feSA9IGF4aXMueSAqIHM7XG5cdFx0dGhpcy5feiA9IGF4aXMueiAqIHM7XG5cdFx0dGhpcy5fdyA9IE1hdGguY29zKGhhbGZBbmdsZSk7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Sb3RhdGlvbk1hdHJpeChtKSB7XG5cdFx0Ly8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL21hdHJpeFRvUXVhdGVybmlvbi9pbmRleC5odG1cblx0XHQvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxuXHRcdGNvbnN0IHRlID0gbS5lbGVtZW50cyxcblx0XHRcdFx0XHRtMTEgPSB0ZVswXSxcblx0XHRcdFx0XHRtMTIgPSB0ZVs0XSxcblx0XHRcdFx0XHRtMTMgPSB0ZVs4XSxcblx0XHRcdFx0XHRtMjEgPSB0ZVsxXSxcblx0XHRcdFx0XHRtMjIgPSB0ZVs1XSxcblx0XHRcdFx0XHRtMjMgPSB0ZVs5XSxcblx0XHRcdFx0XHRtMzEgPSB0ZVsyXSxcblx0XHRcdFx0XHRtMzIgPSB0ZVs2XSxcblx0XHRcdFx0XHRtMzMgPSB0ZVsxMF0sXG5cdFx0XHRcdFx0dHJhY2UgPSBtMTEgKyBtMjIgKyBtMzM7XG5cblx0XHRpZiAodHJhY2UgPiAwKSB7XG5cdFx0XHRjb25zdCBzID0gMC41IC8gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKTtcblx0XHRcdHRoaXMuX3cgPSAwLjI1IC8gcztcblx0XHRcdHRoaXMuX3ggPSAobTMyIC0gbTIzKSAqIHM7XG5cdFx0XHR0aGlzLl95ID0gKG0xMyAtIG0zMSkgKiBzO1xuXHRcdFx0dGhpcy5feiA9IChtMjEgLSBtMTIpICogcztcblx0XHR9IGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHtcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTIyIC0gbTMzKTtcblx0XHRcdHRoaXMuX3cgPSAobTMyIC0gbTIzKSAvIHM7XG5cdFx0XHR0aGlzLl94ID0gMC4yNSAqIHM7XG5cdFx0XHR0aGlzLl95ID0gKG0xMiArIG0yMSkgLyBzO1xuXHRcdFx0dGhpcy5feiA9IChtMTMgKyBtMzEpIC8gcztcblx0XHR9IGVsc2UgaWYgKG0yMiA+IG0zMykge1xuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuXHRcdFx0dGhpcy5fdyA9IChtMTMgLSBtMzEpIC8gcztcblx0XHRcdHRoaXMuX3ggPSAobTEyICsgbTIxKSAvIHM7XG5cdFx0XHR0aGlzLl95ID0gMC4yNSAqIHM7XG5cdFx0XHR0aGlzLl96ID0gKG0yMyArIG0zMikgLyBzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0zMyAtIG0xMSAtIG0yMik7XG5cdFx0XHR0aGlzLl93ID0gKG0yMSAtIG0xMikgLyBzO1xuXHRcdFx0dGhpcy5feCA9IChtMTMgKyBtMzEpIC8gcztcblx0XHRcdHRoaXMuX3kgPSAobTIzICsgbTMyKSAvIHM7XG5cdFx0XHR0aGlzLl96ID0gMC4yNSAqIHM7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tVW5pdFZlY3RvcnModkZyb20sIHZUbykge1xuXHRcdC8vIGFzc3VtZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZFxuXHRcdGxldCByID0gdkZyb20uZG90KHZUbykgKyAxO1xuXG5cdFx0aWYgKHIgPCBOdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0Ly8gdkZyb20gYW5kIHZUbyBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zXG5cdFx0XHRyID0gMDtcblxuXHRcdFx0aWYgKE1hdGguYWJzKHZGcm9tLngpID4gTWF0aC5hYnModkZyb20ueikpIHtcblx0XHRcdFx0dGhpcy5feCA9IC12RnJvbS55O1xuXHRcdFx0XHR0aGlzLl95ID0gdkZyb20ueDtcblx0XHRcdFx0dGhpcy5feiA9IDA7XG5cdFx0XHRcdHRoaXMuX3cgPSByO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdHRoaXMuX3kgPSAtdkZyb20uejtcblx0XHRcdFx0dGhpcy5feiA9IHZGcm9tLnk7XG5cdFx0XHRcdHRoaXMuX3cgPSByO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzXG5cdFx0XHR0aGlzLl94ID0gdkZyb20ueSAqIHZUby56IC0gdkZyb20ueiAqIHZUby55O1xuXHRcdFx0dGhpcy5feSA9IHZGcm9tLnogKiB2VG8ueCAtIHZGcm9tLnggKiB2VG8uejtcblx0XHRcdHRoaXMuX3ogPSB2RnJvbS54ICogdlRvLnkgLSB2RnJvbS55ICogdlRvLng7XG5cdFx0XHR0aGlzLl93ID0gcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcblx0fVxuXG5cdGFuZ2xlVG8ocSkge1xuXHRcdHJldHVybiAyICogTWF0aC5hY29zKE1hdGguYWJzKGNsYW1wKHRoaXMuZG90KHEpLCAtMSwgMSkpKTtcblx0fVxuXG5cdHJvdGF0ZVRvd2FyZHMocSwgc3RlcCkge1xuXHRcdGNvbnN0IGFuZ2xlID0gdGhpcy5hbmdsZVRvKHEpO1xuXHRcdGlmIChhbmdsZSA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cdFx0Y29uc3QgdCA9IE1hdGgubWluKDEsIHN0ZXAgLyBhbmdsZSk7XG5cdFx0dGhpcy5zbGVycChxLCB0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlkZW50aXR5KCkge1xuXHRcdHJldHVybiB0aGlzLnNldCgwLCAwLCAwLCAxKTtcblx0fVxuXG5cdGludmVydCgpIHtcblx0XHQvLyBxdWF0ZXJuaW9uIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aFxuXHRcdHJldHVybiB0aGlzLmNvbmp1Z2F0ZSgpO1xuXHR9XG5cblx0Y29uanVnYXRlKCkge1xuXHRcdHRoaXMuX3ggKj0gLTE7XG5cdFx0dGhpcy5feSAqPSAtMTtcblx0XHR0aGlzLl96ICo9IC0xO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkb3Qodikge1xuXHRcdHJldHVybiB0aGlzLl94ICogdi5feCArIHRoaXMuX3kgKiB2Ll95ICsgdGhpcy5feiAqIHYuX3ogKyB0aGlzLl93ICogdi5fdztcblx0fVxuXG5cdGxlbmd0aFNxKCkge1xuXHRcdHJldHVybiB0aGlzLl94ICogdGhpcy5feCArIHRoaXMuX3kgKiB0aGlzLl95ICsgdGhpcy5feiAqIHRoaXMuX3ogKyB0aGlzLl93ICogdGhpcy5fdztcblx0fVxuXG5cdGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3ggKiB0aGlzLl94ICsgdGhpcy5feSAqIHRoaXMuX3kgKyB0aGlzLl96ICogdGhpcy5feiArIHRoaXMuX3cgKiB0aGlzLl93KTtcblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblx0XHRsZXQgbCA9IHRoaXMubGVuZ3RoKCk7XG5cblx0XHRpZiAobCA9PT0gMCkge1xuXHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHR0aGlzLl95ID0gMDtcblx0XHRcdHRoaXMuX3ogPSAwO1xuXHRcdFx0dGhpcy5fdyA9IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGwgPSAxIC8gbDtcblx0XHRcdHRoaXMuX3ggPSB0aGlzLl94ICogbDtcblx0XHRcdHRoaXMuX3kgPSB0aGlzLl95ICogbDtcblx0XHRcdHRoaXMuX3ogPSB0aGlzLl96ICogbDtcblx0XHRcdHRoaXMuX3cgPSB0aGlzLl93ICogbDtcblx0XHR9XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5KHEsIHApIHtcblx0XHRpZiAocCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhxLCBwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsIHEpO1xuXHR9XG5cblx0cHJlbXVsdGlwbHkocSkge1xuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMocSwgdGhpcyk7XG5cdH1cblxuXHRtdWx0aXBseVF1YXRlcm5pb25zKGEsIGIpIHtcblx0XHQvLyBmcm9tIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvcmVhbE5vcm1lZEFsZ2VicmEvcXVhdGVybmlvbnMvY29kZS9pbmRleC5odG1cblx0XHRjb25zdCBxYXggPSBhLl94LFxuXHRcdFx0XHRcdHFheSA9IGEuX3ksXG5cdFx0XHRcdFx0cWF6ID0gYS5feixcblx0XHRcdFx0XHRxYXcgPSBhLl93O1xuXHRcdGNvbnN0IHFieCA9IGIuX3gsXG5cdFx0XHRcdFx0cWJ5ID0gYi5feSxcblx0XHRcdFx0XHRxYnogPSBiLl96LFxuXHRcdFx0XHRcdHFidyA9IGIuX3c7XG5cdFx0dGhpcy5feCA9IHFheCAqIHFidyArIHFhdyAqIHFieCArIHFheSAqIHFieiAtIHFheiAqIHFieTtcblx0XHR0aGlzLl95ID0gcWF5ICogcWJ3ICsgcWF3ICogcWJ5ICsgcWF6ICogcWJ4IC0gcWF4ICogcWJ6O1xuXHRcdHRoaXMuX3ogPSBxYXogKiBxYncgKyBxYXcgKiBxYnogKyBxYXggKiBxYnkgLSBxYXkgKiBxYng7XG5cdFx0dGhpcy5fdyA9IHFhdyAqIHFidyAtIHFheCAqIHFieCAtIHFheSAqIHFieSAtIHFheiAqIHFiejtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2xlcnAocWIsIHQpIHtcblx0XHRpZiAodCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHQgPT09IDEpIHJldHVybiB0aGlzLmNvcHkocWIpO1xuXHRcdGNvbnN0IHggPSB0aGlzLl94LFxuXHRcdFx0XHRcdHkgPSB0aGlzLl95LFxuXHRcdFx0XHRcdHogPSB0aGlzLl96LFxuXHRcdFx0XHRcdHcgPSB0aGlzLl93OyAvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL3JlYWxOb3JtZWRBbGdlYnJhL3F1YXRlcm5pb25zL3NsZXJwL1xuXG5cdFx0bGV0IGNvc0hhbGZUaGV0YSA9IHcgKiBxYi5fdyArIHggKiBxYi5feCArIHkgKiBxYi5feSArIHogKiBxYi5fejtcblxuXHRcdGlmIChjb3NIYWxmVGhldGEgPCAwKSB7XG5cdFx0XHR0aGlzLl93ID0gLXFiLl93O1xuXHRcdFx0dGhpcy5feCA9IC1xYi5feDtcblx0XHRcdHRoaXMuX3kgPSAtcWIuX3k7XG5cdFx0XHR0aGlzLl96ID0gLXFiLl96O1xuXHRcdFx0Y29zSGFsZlRoZXRhID0gLWNvc0hhbGZUaGV0YTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb3B5KHFiKTtcblx0XHR9XG5cblx0XHRpZiAoY29zSGFsZlRoZXRhID49IDEuMCkge1xuXHRcdFx0dGhpcy5fdyA9IHc7XG5cdFx0XHR0aGlzLl94ID0geDtcblx0XHRcdHRoaXMuX3kgPSB5O1xuXHRcdFx0dGhpcy5feiA9IHo7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBzcXJTaW5IYWxmVGhldGEgPSAxLjAgLSBjb3NIYWxmVGhldGEgKiBjb3NIYWxmVGhldGE7XG5cblx0XHRpZiAoc3FyU2luSGFsZlRoZXRhIDw9IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRjb25zdCBzID0gMSAtIHQ7XG5cdFx0XHR0aGlzLl93ID0gcyAqIHcgKyB0ICogdGhpcy5fdztcblx0XHRcdHRoaXMuX3ggPSBzICogeCArIHQgKiB0aGlzLl94O1xuXHRcdFx0dGhpcy5feSA9IHMgKiB5ICsgdCAqIHRoaXMuX3k7XG5cdFx0XHR0aGlzLl96ID0gcyAqIHogKyB0ICogdGhpcy5fejtcblx0XHRcdHRoaXMubm9ybWFsaXplKCk7XG5cblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2luSGFsZlRoZXRhID0gTWF0aC5zcXJ0KHNxclNpbkhhbGZUaGV0YSk7XG5cdFx0Y29uc3QgaGFsZlRoZXRhID0gTWF0aC5hdGFuMihzaW5IYWxmVGhldGEsIGNvc0hhbGZUaGV0YSk7XG5cdFx0Y29uc3QgcmF0aW9BID0gTWF0aC5zaW4oKDEgLSB0KSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGEsXG5cdFx0XHRcdFx0cmF0aW9CID0gTWF0aC5zaW4odCAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XG5cdFx0dGhpcy5fdyA9IHcgKiByYXRpb0EgKyB0aGlzLl93ICogcmF0aW9CO1xuXHRcdHRoaXMuX3ggPSB4ICogcmF0aW9BICsgdGhpcy5feCAqIHJhdGlvQjtcblx0XHR0aGlzLl95ID0geSAqIHJhdGlvQSArIHRoaXMuX3kgKiByYXRpb0I7XG5cdFx0dGhpcy5feiA9IHogKiByYXRpb0EgKyB0aGlzLl96ICogcmF0aW9CO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzbGVycFF1YXRlcm5pb25zKHFhLCBxYiwgdCkge1xuXHRcdHJldHVybiB0aGlzLmNvcHkocWEpLnNsZXJwKHFiLCB0KTtcblx0fVxuXG5cdHJhbmRvbSgpIHtcblx0XHQvLyBEZXJpdmVkIGZyb20gaHR0cDovL3BsYW5uaW5nLmNzLnVpdWMuZWR1L25vZGUxOTguaHRtbFxuXHRcdC8vIE5vdGUsIHRoaXMgc291cmNlIHVzZXMgdywgeCwgeSwgeiBvcmRlcmluZyxcblx0XHQvLyBzbyB3ZSBzd2FwIHRoZSBvcmRlciBiZWxvdy5cblx0XHRjb25zdCB1MSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0Y29uc3Qgc3FydDF1MSA9IE1hdGguc3FydCgxIC0gdTEpO1xuXHRcdGNvbnN0IHNxcnR1MSA9IE1hdGguc3FydCh1MSk7XG5cdFx0Y29uc3QgdTIgPSAyICogTWF0aC5QSSAqIE1hdGgucmFuZG9tKCk7XG5cdFx0Y29uc3QgdTMgPSAyICogTWF0aC5QSSAqIE1hdGgucmFuZG9tKCk7XG5cdFx0cmV0dXJuIHRoaXMuc2V0KHNxcnQxdTEgKiBNYXRoLmNvcyh1MiksIHNxcnR1MSAqIE1hdGguc2luKHUzKSwgc3FydHUxICogTWF0aC5jb3ModTMpLCBzcXJ0MXUxICogTWF0aC5zaW4odTIpKTtcblx0fVxuXG5cdGVxdWFscyhxdWF0ZXJuaW9uKSB7XG5cdFx0cmV0dXJuIHF1YXRlcm5pb24uX3ggPT09IHRoaXMuX3ggJiYgcXVhdGVybmlvbi5feSA9PT0gdGhpcy5feSAmJiBxdWF0ZXJuaW9uLl96ID09PSB0aGlzLl96ICYmIHF1YXRlcm5pb24uX3cgPT09IHRoaXMuX3c7XG5cdH1cblxuXHRmcm9tQXJyYXkoYXJyYXksIG9mZnNldCA9IDApIHtcblx0XHR0aGlzLl94ID0gYXJyYXlbb2Zmc2V0XTtcblx0XHR0aGlzLl95ID0gYXJyYXlbb2Zmc2V0ICsgMV07XG5cdFx0dGhpcy5feiA9IGFycmF5W29mZnNldCArIDJdO1xuXHRcdHRoaXMuX3cgPSBhcnJheVtvZmZzZXQgKyAzXTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9BcnJheShhcnJheSA9IFtdLCBvZmZzZXQgPSAwKSB7XG5cdFx0YXJyYXlbb2Zmc2V0XSA9IHRoaXMuX3g7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0aGlzLl95O1xuXHRcdGFycmF5W29mZnNldCArIDJdID0gdGhpcy5fejtcblx0XHRhcnJheVtvZmZzZXQgKyAzXSA9IHRoaXMuX3c7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGV4KSB7XG5cdFx0dGhpcy5feCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcblx0XHR0aGlzLl95ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xuXHRcdHRoaXMuX3ogPSBhdHRyaWJ1dGUuZ2V0WihpbmRleCk7XG5cdFx0dGhpcy5fdyA9IGF0dHJpYnV0ZS5nZXRXKGluZGV4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdF9vbkNoYW5nZShjYWxsYmFjaykge1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdF9vbkNoYW5nZUNhbGxiYWNrKCkge31cblxufVxuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5pc1F1YXRlcm5pb24gPSB0cnVlO1xuXG5jbGFzcyBWZWN0b3IzIHtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCkge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXHR9XG5cblx0c2V0KHgsIHksIHopIHtcblx0XHRpZiAoeiA9PT0gdW5kZWZpbmVkKSB6ID0gdGhpcy56OyAvLyBzcHJpdGUuc2NhbGUuc2V0KHgseSlcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0dGhpcy56ID0gc2NhbGFyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WCh4KSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFkoeSkge1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRaKHopIHtcblx0XHR0aGlzLnogPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29tcG9uZW50KGluZGV4LCB2YWx1ZSkge1xuXHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdGNhc2UgMDpcblx0XHRcdFx0dGhpcy54ID0gdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRoaXMueSA9IHZhbHVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0aGlzLnogPSB2YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29tcG9uZW50KGluZGV4KSB7XG5cdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy54O1xuXG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiB0aGlzLnk7XG5cblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuejtcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCwgdGhpcy55LCB0aGlzLnopO1xuXHR9XG5cblx0Y29weSh2KSB7XG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHR0aGlzLnogPSB2Lno7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGQodiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkVmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxhcihzKSB7XG5cdFx0dGhpcy54ICs9IHM7XG5cdFx0dGhpcy55ICs9IHM7XG5cdFx0dGhpcy56ICs9IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRWZWN0b3JzKGEsIGIpIHtcblx0XHR0aGlzLnggPSBhLnggKyBiLng7XG5cdFx0dGhpcy55ID0gYS55ICsgYi55O1xuXHRcdHRoaXMueiA9IGEueiArIGIuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFkZFNjYWxlZFZlY3Rvcih2LCBzKSB7XG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWIodiwgdykge1xuXHRcdGlmICh3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyh2LCB3KTtcblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN1YlNjYWxhcihzKSB7XG5cdFx0dGhpcy54IC09IHM7XG5cdFx0dGhpcy55IC09IHM7XG5cdFx0dGhpcy56IC09IHM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWJWZWN0b3JzKGEsIGIpIHtcblx0XHR0aGlzLnggPSBhLnggLSBiLng7XG5cdFx0dGhpcy55ID0gYS55IC0gYi55O1xuXHRcdHRoaXMueiA9IGEueiAtIGIuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5KHYsIHcpIHtcblx0XHRpZiAodyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVZlY3RvcnModiwgdyk7XG5cdFx0fVxuXG5cdFx0dGhpcy54ICo9IHYueDtcblx0XHR0aGlzLnkgKj0gdi55O1xuXHRcdHRoaXMueiAqPSB2Lno7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtdWx0aXBseVNjYWxhcihzY2FsYXIpIHtcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG11bHRpcGx5VmVjdG9ycyhhLCBiKSB7XG5cdFx0dGhpcy54ID0gYS54ICogYi54O1xuXHRcdHRoaXMueSA9IGEueSAqIGIueTtcblx0XHR0aGlzLnogPSBhLnogKiBiLno7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseUV1bGVyKGV1bGVyKSB7XG5cdFx0aWYgKCEoZXVsZXIgJiYgZXVsZXIuaXNFdWxlcikpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oX3F1YXRlcm5pb24kNC5zZXRGcm9tRXVsZXIoZXVsZXIpKTtcblx0fVxuXG5cdGFwcGx5QXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKF9xdWF0ZXJuaW9uJDQuc2V0RnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSkpO1xuXHR9XG5cblx0YXBwbHlNYXRyaXgzKG0pIHtcblx0XHRjb25zdCB4ID0gdGhpcy54LFxuXHRcdFx0XHRcdHkgPSB0aGlzLnksXG5cdFx0XHRcdFx0eiA9IHRoaXMuejtcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnggPSBlWzBdICogeCArIGVbM10gKiB5ICsgZVs2XSAqIHo7XG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzRdICogeSArIGVbN10gKiB6O1xuXHRcdHRoaXMueiA9IGVbMl0gKiB4ICsgZVs1XSAqIHkgKyBlWzhdICogejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5Tm9ybWFsTWF0cml4KG0pIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDMobSkubm9ybWFsaXplKCk7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobSkge1xuXHRcdGNvbnN0IHggPSB0aGlzLngsXG5cdFx0XHRcdFx0eSA9IHRoaXMueSxcblx0XHRcdFx0XHR6ID0gdGhpcy56O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHcgPSAxIC8gKGVbM10gKiB4ICsgZVs3XSAqIHkgKyBlWzExXSAqIHogKyBlWzE1XSk7XG5cdFx0dGhpcy54ID0gKGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogeiArIGVbMTJdKSAqIHc7XG5cdFx0dGhpcy55ID0gKGVbMV0gKiB4ICsgZVs1XSAqIHkgKyBlWzldICogeiArIGVbMTNdKSAqIHc7XG5cdFx0dGhpcy56ID0gKGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHogKyBlWzE0XSkgKiB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKHEpIHtcblx0XHRjb25zdCB4ID0gdGhpcy54LFxuXHRcdFx0XHRcdHkgPSB0aGlzLnksXG5cdFx0XHRcdFx0eiA9IHRoaXMuejtcblx0XHRjb25zdCBxeCA9IHEueCxcblx0XHRcdFx0XHRxeSA9IHEueSxcblx0XHRcdFx0XHRxeiA9IHEueixcblx0XHRcdFx0XHRxdyA9IHEudzsgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcblxuXHRcdGNvbnN0IGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuXHRcdGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuXHRcdGNvbnN0IGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuXHRcdGNvbnN0IGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejsgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuXG5cdFx0dGhpcy54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcblx0XHR0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuXHRcdHRoaXMueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcm9qZWN0KGNhbWVyYSkge1xuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NChjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHR9XG5cblx0dW5wcm9qZWN0KGNhbWVyYSkge1xuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NChjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NChjYW1lcmEubWF0cml4V29ybGQpO1xuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKG0pIHtcblx0XHQvLyBpbnB1dDogVEhSRUUuTWF0cml4NCBhZmZpbmUgbWF0cml4XG5cdFx0Ly8gdmVjdG9yIGludGVycHJldGVkIGFzIGEgZGlyZWN0aW9uXG5cdFx0Y29uc3QgeCA9IHRoaXMueCxcblx0XHRcdFx0XHR5ID0gdGhpcy55LFxuXHRcdFx0XHRcdHogPSB0aGlzLno7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cdFx0dGhpcy54ID0gZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6O1xuXHRcdHRoaXMueSA9IGVbMV0gKiB4ICsgZVs1XSAqIHkgKyBlWzldICogejtcblx0XHR0aGlzLnogPSBlWzJdICogeCArIGVbNl0gKiB5ICsgZVsxMF0gKiB6O1xuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xuXHR9XG5cblx0ZGl2aWRlKHYpIHtcblx0XHR0aGlzLnggLz0gdi54O1xuXHRcdHRoaXMueSAvPSB2Lnk7XG5cdFx0dGhpcy56IC89IHYuejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpdmlkZVNjYWxhcihzY2FsYXIpIHtcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxIC8gc2NhbGFyKTtcblx0fVxuXG5cdG1pbih2KSB7XG5cdFx0dGhpcy54ID0gTWF0aC5taW4odGhpcy54LCB2LngpO1xuXHRcdHRoaXMueSA9IE1hdGgubWluKHRoaXMueSwgdi55KTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbih0aGlzLnosIHYueik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYXgodikge1xuXHRcdHRoaXMueCA9IE1hdGgubWF4KHRoaXMueCwgdi54KTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCh0aGlzLnksIHYueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgodGhpcy56LCB2LnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXAobWluLCBtYXgpIHtcblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXHRcdHRoaXMueCA9IE1hdGgubWF4KG1pbi54LCBNYXRoLm1pbihtYXgueCwgdGhpcy54KSk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgobWluLnksIE1hdGgubWluKG1heC55LCB0aGlzLnkpKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heChtaW4ueiwgTWF0aC5taW4obWF4LnosIHRoaXMueikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xhbXBTY2FsYXIobWluVmFsLCBtYXhWYWwpIHtcblx0XHR0aGlzLnggPSBNYXRoLm1heChtaW5WYWwsIE1hdGgubWluKG1heFZhbCwgdGhpcy54KSk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbihtYXhWYWwsIHRoaXMueSkpO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KG1pblZhbCwgTWF0aC5taW4obWF4VmFsLCB0aGlzLnopKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsYW1wTGVuZ3RoKG1pbiwgbWF4KSB7XG5cdFx0Y29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobGVuZ3RoIHx8IDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCBsZW5ndGgpKSk7XG5cdH1cblxuXHRmbG9vcigpIHtcblx0XHR0aGlzLnggPSBNYXRoLmZsb29yKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5mbG9vcih0aGlzLnkpO1xuXHRcdHRoaXMueiA9IE1hdGguZmxvb3IodGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNlaWwoKSB7XG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gTWF0aC5jZWlsKHRoaXMueik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3VuZCgpIHtcblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuXHRcdHRoaXMueiA9IE1hdGgucm91bmQodGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdW5kVG9aZXJvKCkge1xuXHRcdHRoaXMueCA9IHRoaXMueCA8IDAgPyBNYXRoLmNlaWwodGhpcy54KSA6IE1hdGguZmxvb3IodGhpcy54KTtcblx0XHR0aGlzLnkgPSB0aGlzLnkgPCAwID8gTWF0aC5jZWlsKHRoaXMueSkgOiBNYXRoLmZsb29yKHRoaXMueSk7XG5cdFx0dGhpcy56ID0gdGhpcy56IDwgMCA/IE1hdGguY2VpbCh0aGlzLnopIDogTWF0aC5mbG9vcih0aGlzLnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bmVnYXRlKCkge1xuXHRcdHRoaXMueCA9IC10aGlzLng7XG5cdFx0dGhpcy55ID0gLXRoaXMueTtcblx0XHR0aGlzLnogPSAtdGhpcy56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZG90KHYpIHtcblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56O1xuXHR9IC8vIFRPRE8gbGVuZ3RoU3F1YXJlZD9cblxuXG5cdGxlbmd0aFNxKCkge1xuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLno7XG5cdH1cblxuXHRsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnopO1xuXHR9XG5cblx0bWFuaGF0dGFuTGVuZ3RoKCkge1xuXHRcdHJldHVybiBNYXRoLmFicyh0aGlzLngpICsgTWF0aC5hYnModGhpcy55KSArIE1hdGguYWJzKHRoaXMueik7XG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkgfHwgMSk7XG5cdH1cblxuXHRzZXRMZW5ndGgobGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuZ3RoKTtcblx0fVxuXG5cdGxlcnAodiwgYWxwaGEpIHtcblx0XHR0aGlzLnggKz0gKHYueCAtIHRoaXMueCkgKiBhbHBoYTtcblx0XHR0aGlzLnkgKz0gKHYueSAtIHRoaXMueSkgKiBhbHBoYTtcblx0XHR0aGlzLnogKz0gKHYueiAtIHRoaXMueikgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxlcnBWZWN0b3JzKHYxLCB2MiwgYWxwaGEpIHtcblx0XHR0aGlzLnggPSB2MS54ICsgKHYyLnggLSB2MS54KSAqIGFscGhhO1xuXHRcdHRoaXMueSA9IHYxLnkgKyAodjIueSAtIHYxLnkpICogYWxwaGE7XG5cdFx0dGhpcy56ID0gdjEueiArICh2Mi56IC0gdjEueikgKiBhbHBoYTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNyb3NzKHYsIHcpIHtcblx0XHRpZiAodyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnModiwgdyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsIHYpO1xuXHR9XG5cblx0Y3Jvc3NWZWN0b3JzKGEsIGIpIHtcblx0XHRjb25zdCBheCA9IGEueCxcblx0XHRcdFx0XHRheSA9IGEueSxcblx0XHRcdFx0XHRheiA9IGEuejtcblx0XHRjb25zdCBieCA9IGIueCxcblx0XHRcdFx0XHRieSA9IGIueSxcblx0XHRcdFx0XHRieiA9IGIuejtcblx0XHR0aGlzLnggPSBheSAqIGJ6IC0gYXogKiBieTtcblx0XHR0aGlzLnkgPSBheiAqIGJ4IC0gYXggKiBiejtcblx0XHR0aGlzLnogPSBheCAqIGJ5IC0gYXkgKiBieDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHByb2plY3RPblZlY3Rvcih2KSB7XG5cdFx0Y29uc3QgZGVub21pbmF0b3IgPSB2Lmxlbmd0aFNxKCk7XG5cdFx0aWYgKGRlbm9taW5hdG9yID09PSAwKSByZXR1cm4gdGhpcy5zZXQoMCwgMCwgMCk7XG5cdFx0Y29uc3Qgc2NhbGFyID0gdi5kb3QodGhpcykgLyBkZW5vbWluYXRvcjtcblx0XHRyZXR1cm4gdGhpcy5jb3B5KHYpLm11bHRpcGx5U2NhbGFyKHNjYWxhcik7XG5cdH1cblxuXHRwcm9qZWN0T25QbGFuZShwbGFuZU5vcm1hbCkge1xuXHRcdF92ZWN0b3IkYy5jb3B5KHRoaXMpLnByb2plY3RPblZlY3RvcihwbGFuZU5vcm1hbCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zdWIoX3ZlY3RvciRjKTtcblx0fVxuXG5cdHJlZmxlY3Qobm9ybWFsKSB7XG5cdFx0Ly8gcmVmbGVjdCBpbmNpZGVudCB2ZWN0b3Igb2ZmIHBsYW5lIG9ydGhvZ29uYWwgdG8gbm9ybWFsXG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aFxuXHRcdHJldHVybiB0aGlzLnN1YihfdmVjdG9yJGMuY29weShub3JtYWwpLm11bHRpcGx5U2NhbGFyKDIgKiB0aGlzLmRvdChub3JtYWwpKSk7XG5cdH1cblxuXHRhbmdsZVRvKHYpIHtcblx0XHRjb25zdCBkZW5vbWluYXRvciA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkgKiB2Lmxlbmd0aFNxKCkpO1xuXHRcdGlmIChkZW5vbWluYXRvciA9PT0gMCkgcmV0dXJuIE1hdGguUEkgLyAyO1xuXHRcdGNvbnN0IHRoZXRhID0gdGhpcy5kb3QodikgLyBkZW5vbWluYXRvcjsgLy8gY2xhbXAsIHRvIGhhbmRsZSBudW1lcmljYWwgcHJvYmxlbXNcblxuXHRcdHJldHVybiBNYXRoLmFjb3MoY2xhbXAodGhldGEsIC0xLCAxKSk7XG5cdH1cblxuXHRkaXN0YW5jZVRvKHYpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodikpO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1NxdWFyZWQodikge1xuXHRcdGNvbnN0IGR4ID0gdGhpcy54IC0gdi54LFxuXHRcdFx0XHRcdGR5ID0gdGhpcy55IC0gdi55LFxuXHRcdFx0XHRcdGR6ID0gdGhpcy56IC0gdi56O1xuXHRcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7XG5cdH1cblxuXHRtYW5oYXR0YW5EaXN0YW5jZVRvKHYpIHtcblx0XHRyZXR1cm4gTWF0aC5hYnModGhpcy54IC0gdi54KSArIE1hdGguYWJzKHRoaXMueSAtIHYueSkgKyBNYXRoLmFicyh0aGlzLnogLSB2LnopO1xuXHR9XG5cblx0c2V0RnJvbVNwaGVyaWNhbChzKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3JkcyhzLnJhZGl1cywgcy5waGksIHMudGhldGEpO1xuXHR9XG5cblx0c2V0RnJvbVNwaGVyaWNhbENvb3JkcyhyYWRpdXMsIHBoaSwgdGhldGEpIHtcblx0XHRjb25zdCBzaW5QaGlSYWRpdXMgPSBNYXRoLnNpbihwaGkpICogcmFkaXVzO1xuXHRcdHRoaXMueCA9IHNpblBoaVJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNvcyhwaGkpICogcmFkaXVzO1xuXHRcdHRoaXMueiA9IHNpblBoaVJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21DeWxpbmRyaWNhbChjKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKGMucmFkaXVzLCBjLnRoZXRhLCBjLnkpO1xuXHR9XG5cblx0c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHJhZGl1cywgdGhldGEsIHkpIHtcblx0XHR0aGlzLnggPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tTWF0cml4UG9zaXRpb24obSkge1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXHRcdHRoaXMueCA9IGVbMTJdO1xuXHRcdHRoaXMueSA9IGVbMTNdO1xuXHRcdHRoaXMueiA9IGVbMTRdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbU1hdHJpeFNjYWxlKG0pIHtcblx0XHRjb25zdCBzeCA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihtLCAwKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzeSA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihtLCAxKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzeiA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihtLCAyKS5sZW5ndGgoKTtcblx0XHR0aGlzLnggPSBzeDtcblx0XHR0aGlzLnkgPSBzeTtcblx0XHR0aGlzLnogPSBzejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21NYXRyaXhDb2x1bW4obSwgaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkobS5lbGVtZW50cywgaW5kZXggKiA0KTtcblx0fVxuXG5cdHNldEZyb21NYXRyaXgzQ29sdW1uKG0sIGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJvbUFycmF5KG0uZWxlbWVudHMsIGluZGV4ICogMyk7XG5cdH1cblxuXHRlcXVhbHModikge1xuXHRcdHJldHVybiB2LnggPT09IHRoaXMueCAmJiB2LnkgPT09IHRoaXMueSAmJiB2LnogPT09IHRoaXMuejtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdHRoaXMueCA9IGFycmF5W29mZnNldF07XG5cdFx0dGhpcy55ID0gYXJyYXlbb2Zmc2V0ICsgMV07XG5cdFx0dGhpcy56ID0gYXJyYXlbb2Zmc2V0ICsgMl07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRhcnJheVtvZmZzZXRdID0gdGhpcy54O1xuXHRcdGFycmF5W29mZnNldCArIDFdID0gdGhpcy55O1xuXHRcdGFycmF5W29mZnNldCArIDJdID0gdGhpcy56O1xuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KSB7XG5cdFx0aWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nKTtcblx0XHR9XG5cblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJhbmRvbSgpIHtcblx0XHR0aGlzLnggPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMueSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy56ID0gTWF0aC5yYW5kb20oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJhbmRvbURpcmVjdGlvbigpIHtcblx0XHQvLyBEZXJpdmVkIGZyb20gaHR0cHM6Ly9tYXRod29ybGQud29sZnJhbS5jb20vU3BoZXJlUG9pbnRQaWNraW5nLmh0bWxcblx0XHRjb25zdCB1ID0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMjtcblx0XHRjb25zdCB0ID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyO1xuXHRcdGNvbnN0IGYgPSBNYXRoLnNxcnQoMSAtIHUgKiogMik7XG5cdFx0dGhpcy54ID0gZiAqIE1hdGguY29zKHQpO1xuXHRcdHRoaXMueSA9IGYgKiBNYXRoLnNpbih0KTtcblx0XHR0aGlzLnogPSB1O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0KltTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdHlpZWxkIHRoaXMueDtcblx0XHR5aWVsZCB0aGlzLnk7XG5cdFx0eWllbGQgdGhpcy56O1xuXHR9XG5cbn1cblxuVmVjdG9yMy5wcm90b3R5cGUuaXNWZWN0b3IzID0gdHJ1ZTtcblxuY29uc3QgX3ZlY3RvciRjID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9xdWF0ZXJuaW9uJDQgPSAvKkBfX1BVUkVfXyovbmV3IFF1YXRlcm5pb24oKTtcblxuY2xhc3MgQm94MyB7XG5cdGNvbnN0cnVjdG9yKG1pbiA9IG5ldyBWZWN0b3IzKCtJbmZpbml0eSwgK0luZmluaXR5LCArSW5maW5pdHkpLCBtYXggPSBuZXcgVmVjdG9yMygtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5KSkge1xuXHRcdHRoaXMubWluID0gbWluO1xuXHRcdHRoaXMubWF4ID0gbWF4O1xuXHR9XG5cblx0c2V0KG1pbiwgbWF4KSB7XG5cdFx0dGhpcy5taW4uY29weShtaW4pO1xuXHRcdHRoaXMubWF4LmNvcHkobWF4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21BcnJheShhcnJheSkge1xuXHRcdGxldCBtaW5YID0gK0luZmluaXR5O1xuXHRcdGxldCBtaW5ZID0gK0luZmluaXR5O1xuXHRcdGxldCBtaW5aID0gK0luZmluaXR5O1xuXHRcdGxldCBtYXhYID0gLUluZmluaXR5O1xuXHRcdGxldCBtYXhZID0gLUluZmluaXR5O1xuXHRcdGxldCBtYXhaID0gLUluZmluaXR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRcdGNvbnN0IHggPSBhcnJheVtpXTtcblx0XHRcdGNvbnN0IHkgPSBhcnJheVtpICsgMV07XG5cdFx0XHRjb25zdCB6ID0gYXJyYXlbaSArIDJdO1xuXHRcdFx0aWYgKHggPCBtaW5YKSBtaW5YID0geDtcblx0XHRcdGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG5cdFx0XHRpZiAoeiA8IG1pblopIG1pblogPSB6O1xuXHRcdFx0aWYgKHggPiBtYXhYKSBtYXhYID0geDtcblx0XHRcdGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XG5cdFx0XHRpZiAoeiA+IG1heFopIG1heFogPSB6O1xuXHRcdH1cblxuXHRcdHRoaXMubWluLnNldChtaW5YLCBtaW5ZLCBtaW5aKTtcblx0XHR0aGlzLm1heC5zZXQobWF4WCwgbWF4WSwgbWF4Wik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSkge1xuXHRcdGxldCBtaW5YID0gK0luZmluaXR5O1xuXHRcdGxldCBtaW5ZID0gK0luZmluaXR5O1xuXHRcdGxldCBtaW5aID0gK0luZmluaXR5O1xuXHRcdGxldCBtYXhYID0gLUluZmluaXR5O1xuXHRcdGxldCBtYXhZID0gLUluZmluaXR5O1xuXHRcdGxldCBtYXhaID0gLUluZmluaXR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHggPSBhdHRyaWJ1dGUuZ2V0WChpKTtcblx0XHRcdGNvbnN0IHkgPSBhdHRyaWJ1dGUuZ2V0WShpKTtcblx0XHRcdGNvbnN0IHogPSBhdHRyaWJ1dGUuZ2V0WihpKTtcblx0XHRcdGlmICh4IDwgbWluWCkgbWluWCA9IHg7XG5cdFx0XHRpZiAoeSA8IG1pblkpIG1pblkgPSB5O1xuXHRcdFx0aWYgKHogPCBtaW5aKSBtaW5aID0gejtcblx0XHRcdGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG5cdFx0XHRpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuXHRcdFx0aWYgKHogPiBtYXhaKSBtYXhaID0gejtcblx0XHR9XG5cblx0XHR0aGlzLm1pbi5zZXQobWluWCwgbWluWSwgbWluWik7XG5cdFx0dGhpcy5tYXguc2V0KG1heFgsIG1heFksIG1heFopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVBvaW50cyhwb2ludHMpIHtcblx0XHR0aGlzLm1ha2VFbXB0eSgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdHRoaXMuZXhwYW5kQnlQb2ludChwb2ludHNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUNlbnRlckFuZFNpemUoY2VudGVyLCBzaXplKSB7XG5cdFx0Y29uc3QgaGFsZlNpemUgPSBfdmVjdG9yJGIuY29weShzaXplKS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXG5cdFx0dGhpcy5taW4uY29weShjZW50ZXIpLnN1YihoYWxmU2l6ZSk7XG5cdFx0dGhpcy5tYXguY29weShjZW50ZXIpLmFkZChoYWxmU2l6ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tT2JqZWN0KG9iamVjdCwgcHJlY2lzZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5tYWtlRW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcy5leHBhbmRCeU9iamVjdChvYmplY3QsIHByZWNpc2UpO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoYm94KSB7XG5cdFx0dGhpcy5taW4uY29weShib3gubWluKTtcblx0XHR0aGlzLm1heC5jb3B5KGJveC5tYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZUVtcHR5KCkge1xuXHRcdHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gdGhpcy5taW4ueiA9ICtJbmZpbml0eTtcblx0XHR0aGlzLm1heC54ID0gdGhpcy5tYXgueSA9IHRoaXMubWF4LnogPSAtSW5maW5pdHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0VtcHR5KCkge1xuXHRcdC8vIHRoaXMgaXMgYSBtb3JlIHJvYnVzdCBjaGVjayBmb3IgZW1wdHkgdGhhbiAoIHZvbHVtZSA8PSAwICkgYmVjYXVzZSB2b2x1bWUgY2FuIGdldCBwb3NpdGl2ZSB3aXRoIHR3byBuZWdhdGl2ZSBheGVzXG5cdFx0cmV0dXJuIHRoaXMubWF4LnggPCB0aGlzLm1pbi54IHx8IHRoaXMubWF4LnkgPCB0aGlzLm1pbi55IHx8IHRoaXMubWF4LnogPCB0aGlzLm1pbi56O1xuXHR9XG5cblx0Z2V0Q2VudGVyKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoMCwgMCwgMCkgOiB0YXJnZXQuYWRkVmVjdG9ycyh0aGlzLm1pbiwgdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKDAuNSk7XG5cdH1cblxuXHRnZXRTaXplKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoMCwgMCwgMCkgOiB0YXJnZXQuc3ViVmVjdG9ycyh0aGlzLm1heCwgdGhpcy5taW4pO1xuXHR9XG5cblx0ZXhwYW5kQnlQb2ludChwb2ludCkge1xuXHRcdHRoaXMubWluLm1pbihwb2ludCk7XG5cdFx0dGhpcy5tYXgubWF4KHBvaW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZEJ5VmVjdG9yKHZlY3Rvcikge1xuXHRcdHRoaXMubWluLnN1Yih2ZWN0b3IpO1xuXHRcdHRoaXMubWF4LmFkZCh2ZWN0b3IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kQnlTY2FsYXIoc2NhbGFyKSB7XG5cdFx0dGhpcy5taW4uYWRkU2NhbGFyKC1zY2FsYXIpO1xuXHRcdHRoaXMubWF4LmFkZFNjYWxhcihzY2FsYXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kQnlPYmplY3Qob2JqZWN0LCBwcmVjaXNlID0gZmFsc2UpIHtcblx0XHQvLyBDb21wdXRlcyB0aGUgd29ybGQtYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveCBvZiBhbiBvYmplY3QgKGluY2x1ZGluZyBpdHMgY2hpbGRyZW4pLFxuXHRcdC8vIGFjY291bnRpbmcgZm9yIGJvdGggdGhlIG9iamVjdCdzLCBhbmQgY2hpbGRyZW4ncywgd29ybGQgdHJhbnNmb3Jtc1xuXHRcdG9iamVjdC51cGRhdGVXb3JsZE1hdHJpeChmYWxzZSwgZmFsc2UpO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5O1xuXG5cdFx0aWYgKGdlb21ldHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwcmVjaXNlICYmIGdlb21ldHJ5LmF0dHJpYnV0ZXMgIT0gdW5kZWZpbmVkICYmIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdF92ZWN0b3IkYi5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBpKS5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0XHRcdHRoaXMuZXhwYW5kQnlQb2ludChfdmVjdG9yJGIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3ggPT09IG51bGwpIHtcblx0XHRcdFx0XHRnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9ib3gkMy5jb3B5KGdlb21ldHJ5LmJvdW5kaW5nQm94KTtcblxuXHRcdFx0XHRfYm94JDMuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZCk7XG5cblx0XHRcdFx0dGhpcy51bmlvbihfYm94JDMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNoaWxkcmVuID0gb2JqZWN0LmNoaWxkcmVuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHRoaXMuZXhwYW5kQnlPYmplY3QoY2hpbGRyZW5baV0sIHByZWNpc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29udGFpbnNQb2ludChwb2ludCkge1xuXHRcdHJldHVybiBwb2ludC54IDwgdGhpcy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fCBwb2ludC55IDwgdGhpcy5taW4ueSB8fCBwb2ludC55ID4gdGhpcy5tYXgueSB8fCBwb2ludC56IDwgdGhpcy5taW4ueiB8fCBwb2ludC56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zQm94KGJveCkge1xuXHRcdHJldHVybiB0aGlzLm1pbi54IDw9IGJveC5taW4ueCAmJiBib3gubWF4LnggPD0gdGhpcy5tYXgueCAmJiB0aGlzLm1pbi55IDw9IGJveC5taW4ueSAmJiBib3gubWF4LnkgPD0gdGhpcy5tYXgueSAmJiB0aGlzLm1pbi56IDw9IGJveC5taW4ueiAmJiBib3gubWF4LnogPD0gdGhpcy5tYXguejtcblx0fVxuXG5cdGdldFBhcmFtZXRlcihwb2ludCwgdGFyZ2V0KSB7XG5cdFx0Ly8gVGhpcyBjYW4gcG90ZW50aWFsbHkgaGF2ZSBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBib3hcblx0XHQvLyBoYXMgYSBzaXplIGRpbWVuc2lvbiBvZiAwLlxuXHRcdHJldHVybiB0YXJnZXQuc2V0KChwb2ludC54IC0gdGhpcy5taW4ueCkgLyAodGhpcy5tYXgueCAtIHRoaXMubWluLngpLCAocG9pbnQueSAtIHRoaXMubWluLnkpIC8gKHRoaXMubWF4LnkgLSB0aGlzLm1pbi55KSwgKHBvaW50LnogLSB0aGlzLm1pbi56KSAvICh0aGlzLm1heC56IC0gdGhpcy5taW4ueikpO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHQvLyB1c2luZyA2IHNwbGl0dGluZyBwbGFuZXMgdG8gcnVsZSBvdXQgaW50ZXJzZWN0aW9ucy5cblx0XHRyZXR1cm4gYm94Lm1heC54IDwgdGhpcy5taW4ueCB8fCBib3gubWluLnggPiB0aGlzLm1heC54IHx8IGJveC5tYXgueSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSB8fCBib3gubWF4LnogPCB0aGlzLm1pbi56IHx8IGJveC5taW4ueiA+IHRoaXMubWF4LnogPyBmYWxzZSA6IHRydWU7XG5cdH1cblxuXHRpbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSkge1xuXHRcdC8vIEZpbmQgdGhlIHBvaW50IG9uIHRoZSBBQUJCIGNsb3Nlc3QgdG8gdGhlIHNwaGVyZSBjZW50ZXIuXG5cdFx0dGhpcy5jbGFtcFBvaW50KHNwaGVyZS5jZW50ZXIsIF92ZWN0b3IkYik7IC8vIElmIHRoYXQgcG9pbnQgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHRoZSBBQUJCIGFuZCBzcGhlcmUgaW50ZXJzZWN0LlxuXG5cdFx0cmV0dXJuIF92ZWN0b3IkYi5kaXN0YW5jZVRvU3F1YXJlZChzcGhlcmUuY2VudGVyKSA8PSBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1cztcblx0fVxuXG5cdGludGVyc2VjdHNQbGFuZShwbGFuZSkge1xuXHRcdC8vIFdlIGNvbXB1dGUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZG90IHByb2R1Y3QgdmFsdWVzLiBJZiB0aG9zZSB2YWx1ZXNcblx0XHQvLyBhcmUgb24gdGhlIHNhbWUgc2lkZSAoYmFjayBvciBmcm9udCkgb2YgdGhlIHBsYW5lLCB0aGVuIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbi5cblx0XHRsZXQgbWluLCBtYXg7XG5cblx0XHRpZiAocGxhbmUubm9ybWFsLnggPiAwKSB7XG5cdFx0XHRtaW4gPSBwbGFuZS5ub3JtYWwueCAqIHRoaXMubWluLng7XG5cdFx0XHRtYXggPSBwbGFuZS5ub3JtYWwueCAqIHRoaXMubWF4Lng7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDtcblx0XHRcdG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDtcblx0XHR9XG5cblx0XHRpZiAocGxhbmUubm9ybWFsLnkgPiAwKSB7XG5cdFx0XHRtaW4gKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1pbi55O1xuXHRcdFx0bWF4ICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5tYXgueTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5tYXgueTtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7XG5cdFx0fVxuXG5cdFx0aWYgKHBsYW5lLm5vcm1hbC56ID4gMCkge1xuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5taW4uejtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWF4Lno7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pbiArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWF4Lno7XG5cdFx0XHRtYXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1pbi56O1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW4gPD0gLXBsYW5lLmNvbnN0YW50ICYmIG1heCA+PSAtcGxhbmUuY29uc3RhbnQ7XG5cdH1cblxuXHRpbnRlcnNlY3RzVHJpYW5nbGUodHJpYW5nbGUpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IC8vIGNvbXB1dGUgYm94IGNlbnRlciBhbmQgZXh0ZW50c1xuXG5cblx0XHR0aGlzLmdldENlbnRlcihfY2VudGVyKTtcblxuXHRcdF9leHRlbnRzLnN1YlZlY3RvcnModGhpcy5tYXgsIF9jZW50ZXIpOyAvLyB0cmFuc2xhdGUgdHJpYW5nbGUgdG8gYWFiYiBvcmlnaW5cblxuXG5cdFx0X3YwJDIuc3ViVmVjdG9ycyh0cmlhbmdsZS5hLCBfY2VudGVyKTtcblxuXHRcdF92MSQ3LnN1YlZlY3RvcnModHJpYW5nbGUuYiwgX2NlbnRlcik7XG5cblx0XHRfdjIkMy5zdWJWZWN0b3JzKHRyaWFuZ2xlLmMsIF9jZW50ZXIpOyAvLyBjb21wdXRlIGVkZ2UgdmVjdG9ycyBmb3IgdHJpYW5nbGVcblxuXG5cdFx0X2YwLnN1YlZlY3RvcnMoX3YxJDcsIF92MCQyKTtcblxuXHRcdF9mMS5zdWJWZWN0b3JzKF92MiQzLCBfdjEkNyk7XG5cblx0XHRfZjIuc3ViVmVjdG9ycyhfdjAkMiwgX3YyJDMpOyAvLyB0ZXN0IGFnYWluc3QgYXhlcyB0aGF0IGFyZSBnaXZlbiBieSBjcm9zcyBwcm9kdWN0IGNvbWJpbmF0aW9ucyBvZiB0aGUgZWRnZXMgb2YgdGhlIHRyaWFuZ2xlIGFuZCB0aGUgZWRnZXMgb2YgdGhlIGFhYmJcblx0XHQvLyBtYWtlIGFuIGF4aXMgdGVzdGluZyBvZiBlYWNoIG9mIHRoZSAzIHNpZGVzIG9mIHRoZSBhYWJiIGFnYWluc3QgZWFjaCBvZiB0aGUgMyBzaWRlcyBvZiB0aGUgdHJpYW5nbGUgPSA5IGF4aXMgb2Ygc2VwYXJhdGlvblxuXHRcdC8vIGF4aXNfaWogPSB1X2kgeCBmX2ogKHUwLCB1MSwgdTIgPSBmYWNlIG5vcm1hbHMgb2YgYWFiYiA9IHgseSx6IGF4ZXMgdmVjdG9ycyBzaW5jZSBhYWJiIGlzIGF4aXMgYWxpZ25lZClcblxuXG5cdFx0bGV0IGF4ZXMgPSBbMCwgLV9mMC56LCBfZjAueSwgMCwgLV9mMS56LCBfZjEueSwgMCwgLV9mMi56LCBfZjIueSwgX2YwLnosIDAsIC1fZjAueCwgX2YxLnosIDAsIC1fZjEueCwgX2YyLnosIDAsIC1fZjIueCwgLV9mMC55LCBfZjAueCwgMCwgLV9mMS55LCBfZjEueCwgMCwgLV9mMi55LCBfZjIueCwgMF07XG5cblx0XHRpZiAoIXNhdEZvckF4ZXMoYXhlcywgX3YwJDIsIF92MSQ3LCBfdjIkMywgX2V4dGVudHMpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSAvLyB0ZXN0IDMgZmFjZSBub3JtYWxzIGZyb20gdGhlIGFhYmJcblxuXG5cdFx0YXhlcyA9IFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXTtcblxuXHRcdGlmICghc2F0Rm9yQXhlcyhheGVzLCBfdjAkMiwgX3YxJDcsIF92MiQzLCBfZXh0ZW50cykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IC8vIGZpbmFsbHkgdGVzdGluZyB0aGUgZmFjZSBub3JtYWwgb2YgdGhlIHRyaWFuZ2xlXG5cdFx0Ly8gdXNlIGFscmVhZHkgZXhpc3RpbmcgdHJpYW5nbGUgZWRnZSB2ZWN0b3JzIGhlcmVcblxuXG5cdFx0X3RyaWFuZ2xlTm9ybWFsLmNyb3NzVmVjdG9ycyhfZjAsIF9mMSk7XG5cblx0XHRheGVzID0gW190cmlhbmdsZU5vcm1hbC54LCBfdHJpYW5nbGVOb3JtYWwueSwgX3RyaWFuZ2xlTm9ybWFsLnpdO1xuXHRcdHJldHVybiBzYXRGb3JBeGVzKGF4ZXMsIF92MCQyLCBfdjEkNywgX3YyJDMsIF9leHRlbnRzKTtcblx0fVxuXG5cdGNsYW1wUG9pbnQocG9pbnQsIHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuY29weShwb2ludCkuY2xhbXAodGhpcy5taW4sIHRoaXMubWF4KTtcblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludChwb2ludCkge1xuXHRcdGNvbnN0IGNsYW1wZWRQb2ludCA9IF92ZWN0b3IkYi5jb3B5KHBvaW50KS5jbGFtcCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXG5cdFx0cmV0dXJuIGNsYW1wZWRQb2ludC5zdWIocG9pbnQpLmxlbmd0aCgpO1xuXHR9XG5cblx0Z2V0Qm91bmRpbmdTcGhlcmUodGFyZ2V0KSB7XG5cdFx0dGhpcy5nZXRDZW50ZXIodGFyZ2V0LmNlbnRlcik7XG5cdFx0dGFyZ2V0LnJhZGl1cyA9IHRoaXMuZ2V0U2l6ZShfdmVjdG9yJGIpLmxlbmd0aCgpICogMC41O1xuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRpbnRlcnNlY3QoYm94KSB7XG5cdFx0dGhpcy5taW4ubWF4KGJveC5taW4pO1xuXHRcdHRoaXMubWF4Lm1pbihib3gubWF4KTsgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCwgdGhlIHJlc3VsdCBpcyBmdWxseSBlbXB0eSwgbm90IHNsaWdodGx5IGVtcHR5IHdpdGggbm9uLWluZi8raW5mIHZhbHVlcyB0aGF0IHdpbGwgY2F1c2Ugc3Vic2VxdWVuY2UgaW50ZXJzZWN0cyB0byBlcnJvbmVvdXNseSByZXR1cm4gdmFsaWQgdmFsdWVzLlxuXG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB0aGlzLm1ha2VFbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dW5pb24oYm94KSB7XG5cdFx0dGhpcy5taW4ubWluKGJveC5taW4pO1xuXHRcdHRoaXMubWF4Lm1heChib3gubWF4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtYXRyaXgpIHtcblx0XHQvLyB0cmFuc2Zvcm0gb2YgZW1wdHkgYm94IGlzIGFuIGVtcHR5IGJveC5cblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiB0aGlzOyAvLyBOT1RFOiBJIGFtIHVzaW5nIGEgYmluYXJ5IHBhdHRlcm4gdG8gc3BlY2lmeSBhbGwgMl4zIGNvbWJpbmF0aW9ucyBiZWxvd1xuXG5cdFx0X3BvaW50c1swXS5zZXQodGhpcy5taW4ueCwgdGhpcy5taW4ueSwgdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KG1hdHJpeCk7IC8vIDAwMFxuXG5cblx0XHRfcG9pbnRzWzFdLnNldCh0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1heC56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMDAxXG5cblxuXHRcdF9wb2ludHNbMl0uc2V0KHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWluLnopLmFwcGx5TWF0cml4NChtYXRyaXgpOyAvLyAwMTBcblxuXG5cdFx0X3BvaW50c1szXS5zZXQodGhpcy5taW4ueCwgdGhpcy5tYXgueSwgdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KG1hdHJpeCk7IC8vIDAxMVxuXG5cblx0XHRfcG9pbnRzWzRdLnNldCh0aGlzLm1heC54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMTAwXG5cblxuXHRcdF9wb2ludHNbNV0uc2V0KHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChtYXRyaXgpOyAvLyAxMDFcblxuXG5cdFx0X3BvaW50c1s2XS5zZXQodGhpcy5tYXgueCwgdGhpcy5tYXgueSwgdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KG1hdHJpeCk7IC8vIDExMFxuXG5cblx0XHRfcG9pbnRzWzddLnNldCh0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1heC56KS5hcHBseU1hdHJpeDQobWF0cml4KTsgLy8gMTExXG5cblxuXHRcdHRoaXMuc2V0RnJvbVBvaW50cyhfcG9pbnRzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZShvZmZzZXQpIHtcblx0XHR0aGlzLm1pbi5hZGQob2Zmc2V0KTtcblx0XHR0aGlzLm1heC5hZGQob2Zmc2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhib3gpIHtcblx0XHRyZXR1cm4gYm94Lm1pbi5lcXVhbHModGhpcy5taW4pICYmIGJveC5tYXguZXF1YWxzKHRoaXMubWF4KTtcblx0fVxuXG59XG5cbkJveDMucHJvdG90eXBlLmlzQm94MyA9IHRydWU7XG5jb25zdCBfcG9pbnRzID0gWy8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKV07XG5cbmNvbnN0IF92ZWN0b3IkYiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfYm94JDMgPSAvKkBfX1BVUkVfXyovbmV3IEJveDMoKTsgLy8gdHJpYW5nbGUgY2VudGVyZWQgdmVydGljZXNcblxuXG5jb25zdCBfdjAkMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdjEkNyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdjIkMyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpOyAvLyB0cmlhbmdsZSBlZGdlIHZlY3RvcnNcblxuXG5jb25zdCBfZjAgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2YxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9mMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfY2VudGVyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9leHRlbnRzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90cmlhbmdsZU5vcm1hbCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdGVzdEF4aXMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuZnVuY3Rpb24gc2F0Rm9yQXhlcyhheGVzLCB2MCwgdjEsIHYyLCBleHRlbnRzKSB7XG5cdGZvciAobGV0IGkgPSAwLCBqID0gYXhlcy5sZW5ndGggLSAzOyBpIDw9IGo7IGkgKz0gMykge1xuXHRcdF90ZXN0QXhpcy5mcm9tQXJyYXkoYXhlcywgaSk7IC8vIHByb2plY3QgdGhlIGFhYmIgb250byB0aGUgc2VwZXJhdGluZyBheGlzXG5cblxuXHRcdGNvbnN0IHIgPSBleHRlbnRzLnggKiBNYXRoLmFicyhfdGVzdEF4aXMueCkgKyBleHRlbnRzLnkgKiBNYXRoLmFicyhfdGVzdEF4aXMueSkgKyBleHRlbnRzLnogKiBNYXRoLmFicyhfdGVzdEF4aXMueik7IC8vIHByb2plY3QgYWxsIDMgdmVydGljZXMgb2YgdGhlIHRyaWFuZ2xlIG9udG8gdGhlIHNlcGVyYXRpbmcgYXhpc1xuXG5cdFx0Y29uc3QgcDAgPSB2MC5kb3QoX3Rlc3RBeGlzKTtcblx0XHRjb25zdCBwMSA9IHYxLmRvdChfdGVzdEF4aXMpO1xuXHRcdGNvbnN0IHAyID0gdjIuZG90KF90ZXN0QXhpcyk7IC8vIGFjdHVhbCB0ZXN0LCBiYXNpY2FsbHkgc2VlIGlmIGVpdGhlciBvZiB0aGUgbW9zdCBleHRyZW1lIG9mIHRoZSB0cmlhbmdsZSBwb2ludHMgaW50ZXJzZWN0cyByXG5cblx0XHRpZiAoTWF0aC5tYXgoLU1hdGgubWF4KHAwLCBwMSwgcDIpLCBNYXRoLm1pbihwMCwgcDEsIHAyKSkgPiByKSB7XG5cdFx0XHQvLyBwb2ludHMgb2YgdGhlIHByb2plY3RlZCB0cmlhbmdsZSBhcmUgb3V0c2lkZSB0aGUgcHJvamVjdGVkIGhhbGYtbGVuZ3RoIG9mIHRoZSBhYWJiXG5cdFx0XHQvLyB0aGUgYXhpcyBpcyBzZXBlcmF0aW5nIGFuZCB3ZSBjYW4gZXhpdFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5jb25zdCBfYm94JDIgPSAvKkBfX1BVUkVfXyovbmV3IEJveDMoKTtcblxuY29uc3QgX3YxJDYgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RvRmFydGhlc3RQb2ludCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdG9Qb2ludCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBTcGhlcmUge1xuXHRjb25zdHJ1Y3RvcihjZW50ZXIgPSBuZXcgVmVjdG9yMygpLCByYWRpdXMgPSAtMSkge1xuXHRcdHRoaXMuY2VudGVyID0gY2VudGVyO1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHR9XG5cblx0c2V0KGNlbnRlciwgcmFkaXVzKSB7XG5cdFx0dGhpcy5jZW50ZXIuY29weShjZW50ZXIpO1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVBvaW50cyhwb2ludHMsIG9wdGlvbmFsQ2VudGVyKSB7XG5cdFx0Y29uc3QgY2VudGVyID0gdGhpcy5jZW50ZXI7XG5cblx0XHRpZiAob3B0aW9uYWxDZW50ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2VudGVyLmNvcHkob3B0aW9uYWxDZW50ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfYm94JDIuc2V0RnJvbVBvaW50cyhwb2ludHMpLmdldENlbnRlcihjZW50ZXIpO1xuXHRcdH1cblxuXHRcdGxldCBtYXhSYWRpdXNTcSA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0bWF4UmFkaXVzU3EgPSBNYXRoLm1heChtYXhSYWRpdXNTcSwgY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHBvaW50c1tpXSkpO1xuXHRcdH1cblxuXHRcdHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KG1heFJhZGl1c1NxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkoc3BoZXJlKSB7XG5cdFx0dGhpcy5jZW50ZXIuY29weShzcGhlcmUuY2VudGVyKTtcblx0XHR0aGlzLnJhZGl1cyA9IHNwaGVyZS5yYWRpdXM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLnJhZGl1cyA8IDA7XG5cdH1cblxuXHRtYWtlRW1wdHkoKSB7XG5cdFx0dGhpcy5jZW50ZXIuc2V0KDAsIDAsIDApO1xuXHRcdHRoaXMucmFkaXVzID0gLTE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb250YWluc1BvaW50KHBvaW50KSB7XG5cdFx0cmV0dXJuIHBvaW50LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKSA8PSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KHBvaW50KSB7XG5cdFx0cmV0dXJuIHBvaW50LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpIC0gdGhpcy5yYWRpdXM7XG5cdH1cblxuXHRpbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSkge1xuXHRcdGNvbnN0IHJhZGl1c1N1bSA9IHRoaXMucmFkaXVzICsgc3BoZXJlLnJhZGl1cztcblx0XHRyZXR1cm4gc3BoZXJlLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcikgPD0gcmFkaXVzU3VtICogcmFkaXVzU3VtO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHRyZXR1cm4gYm94LmludGVyc2VjdHNTcGhlcmUodGhpcyk7XG5cdH1cblxuXHRpbnRlcnNlY3RzUGxhbmUocGxhbmUpIHtcblx0XHRyZXR1cm4gTWF0aC5hYnMocGxhbmUuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSkgPD0gdGhpcy5yYWRpdXM7XG5cdH1cblxuXHRjbGFtcFBvaW50KHBvaW50LCB0YXJnZXQpIHtcblx0XHRjb25zdCBkZWx0YUxlbmd0aFNxID0gdGhpcy5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQocG9pbnQpO1xuXHRcdHRhcmdldC5jb3B5KHBvaW50KTtcblxuXHRcdGlmIChkZWx0YUxlbmd0aFNxID4gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cykge1xuXHRcdFx0dGFyZ2V0LnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCk7XG5cdFx0XHR0YXJnZXQubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpLmFkZCh0aGlzLmNlbnRlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdGdldEJvdW5kaW5nQm94KHRhcmdldCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0Ly8gRW1wdHkgc3BoZXJlIHByb2R1Y2VzIGVtcHR5IGJvdW5kaW5nIGJveFxuXHRcdFx0dGFyZ2V0Lm1ha2VFbXB0eSgpO1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cblx0XHR0YXJnZXQuc2V0KHRoaXMuY2VudGVyLCB0aGlzLmNlbnRlcik7XG5cdFx0dGFyZ2V0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKTtcblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG1hdHJpeCkge1xuXHRcdHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NChtYXRyaXgpO1xuXHRcdHRoaXMucmFkaXVzID0gdGhpcy5yYWRpdXMgKiBtYXRyaXguZ2V0TWF4U2NhbGVPbkF4aXMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZShvZmZzZXQpIHtcblx0XHR0aGlzLmNlbnRlci5hZGQob2Zmc2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZEJ5UG9pbnQocG9pbnQpIHtcblx0XHQvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWovTWF0aEdlb0xpYi9ibG9iLzI5NDBiOTliOTljZmU1NzVkZDQ1MTAzZWYyMGY0MDE5ZGVlMTViNTQvc3JjL0dlb21ldHJ5L1NwaGVyZS5jcHAjTDY0OS1MNjcxXG5cdFx0X3RvUG9pbnQuc3ViVmVjdG9ycyhwb2ludCwgdGhpcy5jZW50ZXIpO1xuXG5cdFx0Y29uc3QgbGVuZ3RoU3EgPSBfdG9Qb2ludC5sZW5ndGhTcSgpO1xuXG5cdFx0aWYgKGxlbmd0aFNxID4gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cykge1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gTWF0aC5zcXJ0KGxlbmd0aFNxKTtcblx0XHRcdGNvbnN0IG1pc3NpbmdSYWRpdXNIYWxmID0gKGxlbmd0aCAtIHRoaXMucmFkaXVzKSAqIDAuNTsgLy8gTnVkZ2UgdGhpcyBzcGhlcmUgdG93YXJkcyB0aGUgdGFyZ2V0IHBvaW50LiBBZGQgaGFsZiB0aGUgbWlzc2luZyBkaXN0YW5jZSB0byByYWRpdXMsXG5cdFx0XHQvLyBhbmQgdGhlIG90aGVyIGhhbGYgdG8gcG9zaXRpb24uIFRoaXMgZ2l2ZXMgYSB0aWdodGVyIGVuY2xvc3VyZSwgaW5zdGVhZCBvZiBpZlxuXHRcdFx0Ly8gdGhlIHdob2xlIG1pc3NpbmcgZGlzdGFuY2Ugd2VyZSBqdXN0IGFkZGVkIHRvIHJhZGl1cy5cblxuXHRcdFx0dGhpcy5jZW50ZXIuYWRkKF90b1BvaW50Lm11bHRpcGx5U2NhbGFyKG1pc3NpbmdSYWRpdXNIYWxmIC8gbGVuZ3RoKSk7XG5cdFx0XHR0aGlzLnJhZGl1cyArPSBtaXNzaW5nUmFkaXVzSGFsZjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVuaW9uKHNwaGVyZSkge1xuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p1ai9NYXRoR2VvTGliL2Jsb2IvMjk0MGI5OWI5OWNmZTU3NWRkNDUxMDNlZjIwZjQwMTlkZWUxNWI1NC9zcmMvR2VvbWV0cnkvU3BoZXJlLmNwcCNMNzU5LUw3Njlcblx0XHQvLyBUbyBlbmNsb3NlIGFub3RoZXIgc3BoZXJlIGludG8gdGhpcyBzcGhlcmUsIHdlIG9ubHkgbmVlZCB0byBlbmNsb3NlIHR3byBwb2ludHM6XG5cdFx0Ly8gMSkgRW5jbG9zZSB0aGUgZmFydGhlc3QgcG9pbnQgb24gdGhlIG90aGVyIHNwaGVyZSBpbnRvIHRoaXMgc3BoZXJlLlxuXHRcdC8vIDIpIEVuY2xvc2UgdGhlIG9wcG9zaXRlIHBvaW50IG9mIHRoZSBmYXJ0aGVzdCBwb2ludCBpbnRvIHRoaXMgc3BoZXJlLlxuXHRcdGlmICh0aGlzLmNlbnRlci5lcXVhbHMoc3BoZXJlLmNlbnRlcikgPT09IHRydWUpIHtcblx0XHRcdF90b0ZhcnRoZXN0UG9pbnQuc2V0KDAsIDAsIDEpLm11bHRpcGx5U2NhbGFyKHNwaGVyZS5yYWRpdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfdG9GYXJ0aGVzdFBvaW50LnN1YlZlY3RvcnMoc3BoZXJlLmNlbnRlciwgdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHNwaGVyZS5yYWRpdXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuZXhwYW5kQnlQb2ludChfdjEkNi5jb3B5KHNwaGVyZS5jZW50ZXIpLmFkZChfdG9GYXJ0aGVzdFBvaW50KSk7XG5cdFx0dGhpcy5leHBhbmRCeVBvaW50KF92MSQ2LmNvcHkoc3BoZXJlLmNlbnRlcikuc3ViKF90b0ZhcnRoZXN0UG9pbnQpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhzcGhlcmUpIHtcblx0XHRyZXR1cm4gc3BoZXJlLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpICYmIHNwaGVyZS5yYWRpdXMgPT09IHRoaXMucmFkaXVzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkYSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfc2VnQ2VudGVyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9zZWdEaXIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2RpZmYgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2VkZ2UxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9lZGdlMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbm9ybWFsJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgUmF5IHtcblx0Y29uc3RydWN0b3Iob3JpZ2luID0gbmV3IFZlY3RvcjMoKSwgZGlyZWN0aW9uID0gbmV3IFZlY3RvcjMoMCwgMCwgLTEpKSB7XG5cdFx0dGhpcy5vcmlnaW4gPSBvcmlnaW47XG5cdFx0dGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG5cdH1cblxuXHRzZXQob3JpZ2luLCBkaXJlY3Rpb24pIHtcblx0XHR0aGlzLm9yaWdpbi5jb3B5KG9yaWdpbik7XG5cdFx0dGhpcy5kaXJlY3Rpb24uY29weShkaXJlY3Rpb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShyYXkpIHtcblx0XHR0aGlzLm9yaWdpbi5jb3B5KHJheS5vcmlnaW4pO1xuXHRcdHRoaXMuZGlyZWN0aW9uLmNvcHkocmF5LmRpcmVjdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhdCh0LCB0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbik7XG5cdH1cblxuXHRsb29rQXQodikge1xuXHRcdHRoaXMuZGlyZWN0aW9uLmNvcHkodikuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlY2FzdCh0KSB7XG5cdFx0dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsIF92ZWN0b3IkYSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludChwb2ludCwgdGFyZ2V0KSB7XG5cdFx0dGFyZ2V0LnN1YlZlY3RvcnMocG9pbnQsIHRoaXMub3JpZ2luKTtcblx0XHRjb25zdCBkaXJlY3Rpb25EaXN0YW5jZSA9IHRhcmdldC5kb3QodGhpcy5kaXJlY3Rpb24pO1xuXG5cdFx0aWYgKGRpcmVjdGlvbkRpc3RhbmNlIDwgMCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KHRoaXMub3JpZ2luKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGRpcmVjdGlvbkRpc3RhbmNlKS5hZGQodGhpcy5vcmlnaW4pO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KHBvaW50KSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHBvaW50KSk7XG5cdH1cblxuXHRkaXN0YW5jZVNxVG9Qb2ludChwb2ludCkge1xuXHRcdGNvbnN0IGRpcmVjdGlvbkRpc3RhbmNlID0gX3ZlY3RvciRhLnN1YlZlY3RvcnMocG9pbnQsIHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pOyAvLyBwb2ludCBiZWhpbmQgdGhlIHJheVxuXG5cblx0XHRpZiAoZGlyZWN0aW9uRGlzdGFuY2UgPCAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQocG9pbnQpO1xuXHRcdH1cblxuXHRcdF92ZWN0b3IkYS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkaXJlY3Rpb25EaXN0YW5jZSkuYWRkKHRoaXMub3JpZ2luKTtcblxuXHRcdHJldHVybiBfdmVjdG9yJGEuZGlzdGFuY2VUb1NxdWFyZWQocG9pbnQpO1xuXHR9XG5cblx0ZGlzdGFuY2VTcVRvU2VnbWVudCh2MCwgdjEsIG9wdGlvbmFsUG9pbnRPblJheSwgb3B0aW9uYWxQb2ludE9uU2VnbWVudCkge1xuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Btam9uaWFrL0dlb21ldHJpY1Rvb2xzL2Jsb2IvbWFzdGVyL0dURW5naW5lL0luY2x1ZGUvTWF0aGVtYXRpY3MvR3RlRGlzdFJheVNlZ21lbnQuaFxuXHRcdC8vIEl0IHJldHVybnMgdGhlIG1pbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSByYXkgYW5kIHRoZSBzZWdtZW50XG5cdFx0Ly8gZGVmaW5lZCBieSB2MCBhbmQgdjFcblx0XHQvLyBJdCBjYW4gYWxzbyBzZXQgdHdvIG9wdGlvbmFsIHRhcmdldHMgOlxuXHRcdC8vIC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHJheVxuXHRcdC8vIC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHNlZ21lbnRcblx0XHRfc2VnQ2VudGVyLmNvcHkodjApLmFkZCh2MSkubXVsdGlwbHlTY2FsYXIoMC41KTtcblxuXHRcdF9zZWdEaXIuY29weSh2MSkuc3ViKHYwKS5ub3JtYWxpemUoKTtcblxuXHRcdF9kaWZmLmNvcHkodGhpcy5vcmlnaW4pLnN1Yihfc2VnQ2VudGVyKTtcblxuXHRcdGNvbnN0IHNlZ0V4dGVudCA9IHYwLmRpc3RhbmNlVG8odjEpICogMC41O1xuXHRcdGNvbnN0IGEwMSA9IC10aGlzLmRpcmVjdGlvbi5kb3QoX3NlZ0Rpcik7XG5cblx0XHRjb25zdCBiMCA9IF9kaWZmLmRvdCh0aGlzLmRpcmVjdGlvbik7XG5cblx0XHRjb25zdCBiMSA9IC1fZGlmZi5kb3QoX3NlZ0Rpcik7XG5cblx0XHRjb25zdCBjID0gX2RpZmYubGVuZ3RoU3EoKTtcblxuXHRcdGNvbnN0IGRldCA9IE1hdGguYWJzKDEgLSBhMDEgKiBhMDEpO1xuXHRcdGxldCBzMCwgczEsIHNxckRpc3QsIGV4dERldDtcblxuXHRcdGlmIChkZXQgPiAwKSB7XG5cdFx0XHQvLyBUaGUgcmF5IGFuZCBzZWdtZW50IGFyZSBub3QgcGFyYWxsZWwuXG5cdFx0XHRzMCA9IGEwMSAqIGIxIC0gYjA7XG5cdFx0XHRzMSA9IGEwMSAqIGIwIC0gYjE7XG5cdFx0XHRleHREZXQgPSBzZWdFeHRlbnQgKiBkZXQ7XG5cblx0XHRcdGlmIChzMCA+PSAwKSB7XG5cdFx0XHRcdGlmIChzMSA+PSAtZXh0RGV0KSB7XG5cdFx0XHRcdFx0aWYgKHMxIDw9IGV4dERldCkge1xuXHRcdFx0XHRcdFx0Ly8gcmVnaW9uIDBcblx0XHRcdFx0XHRcdC8vIE1pbmltdW0gYXQgaW50ZXJpb3IgcG9pbnRzIG9mIHJheSBhbmQgc2VnbWVudC5cblx0XHRcdFx0XHRcdGNvbnN0IGludkRldCA9IDEgLyBkZXQ7XG5cdFx0XHRcdFx0XHRzMCAqPSBpbnZEZXQ7XG5cdFx0XHRcdFx0XHRzMSAqPSBpbnZEZXQ7XG5cdFx0XHRcdFx0XHRzcXJEaXN0ID0gczAgKiAoczAgKyBhMDEgKiBzMSArIDIgKiBiMCkgKyBzMSAqIChhMDEgKiBzMCArIHMxICsgMiAqIGIxKSArIGM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHJlZ2lvbiAxXG5cdFx0XHRcdFx0XHRzMSA9IHNlZ0V4dGVudDtcblx0XHRcdFx0XHRcdHMwID0gTWF0aC5tYXgoMCwgLShhMDEgKiBzMSArIGIwKSk7XG5cdFx0XHRcdFx0XHRzcXJEaXN0ID0gLXMwICogczAgKyBzMSAqIChzMSArIDIgKiBiMSkgKyBjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWdpb24gNVxuXHRcdFx0XHRcdHMxID0gLXNlZ0V4dGVudDtcblx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KDAsIC0oYTAxICogczEgKyBiMCkpO1xuXHRcdFx0XHRcdHNxckRpc3QgPSAtczAgKiBzMCArIHMxICogKHMxICsgMiAqIGIxKSArIGM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChzMSA8PSAtZXh0RGV0KSB7XG5cdFx0XHRcdFx0Ly8gcmVnaW9uIDRcblx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KDAsIC0oLWEwMSAqIHNlZ0V4dGVudCArIGIwKSk7XG5cdFx0XHRcdFx0czEgPSBzMCA+IDAgPyAtc2VnRXh0ZW50IDogTWF0aC5taW4oTWF0aC5tYXgoLXNlZ0V4dGVudCwgLWIxKSwgc2VnRXh0ZW50KTtcblx0XHRcdFx0XHRzcXJEaXN0ID0gLXMwICogczAgKyBzMSAqIChzMSArIDIgKiBiMSkgKyBjO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHMxIDw9IGV4dERldCkge1xuXHRcdFx0XHRcdC8vIHJlZ2lvbiAzXG5cdFx0XHRcdFx0czAgPSAwO1xuXHRcdFx0XHRcdHMxID0gTWF0aC5taW4oTWF0aC5tYXgoLXNlZ0V4dGVudCwgLWIxKSwgc2VnRXh0ZW50KTtcblx0XHRcdFx0XHRzcXJEaXN0ID0gczEgKiAoczEgKyAyICogYjEpICsgYztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWdpb24gMlxuXHRcdFx0XHRcdHMwID0gTWF0aC5tYXgoMCwgLShhMDEgKiBzZWdFeHRlbnQgKyBiMCkpO1xuXHRcdFx0XHRcdHMxID0gczAgPiAwID8gc2VnRXh0ZW50IDogTWF0aC5taW4oTWF0aC5tYXgoLXNlZ0V4dGVudCwgLWIxKSwgc2VnRXh0ZW50KTtcblx0XHRcdFx0XHRzcXJEaXN0ID0gLXMwICogczAgKyBzMSAqIChzMSArIDIgKiBiMSkgKyBjO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJheSBhbmQgc2VnbWVudCBhcmUgcGFyYWxsZWwuXG5cdFx0XHRzMSA9IGEwMSA+IDAgPyAtc2VnRXh0ZW50IDogc2VnRXh0ZW50O1xuXHRcdFx0czAgPSBNYXRoLm1heCgwLCAtKGEwMSAqIHMxICsgYjApKTtcblx0XHRcdHNxckRpc3QgPSAtczAgKiBzMCArIHMxICogKHMxICsgMiAqIGIxKSArIGM7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbmFsUG9pbnRPblJheSkge1xuXHRcdFx0b3B0aW9uYWxQb2ludE9uUmF5LmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHMwKS5hZGQodGhpcy5vcmlnaW4pO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25hbFBvaW50T25TZWdtZW50KSB7XG5cdFx0XHRvcHRpb25hbFBvaW50T25TZWdtZW50LmNvcHkoX3NlZ0RpcikubXVsdGlwbHlTY2FsYXIoczEpLmFkZChfc2VnQ2VudGVyKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3FyRGlzdDtcblx0fVxuXG5cdGludGVyc2VjdFNwaGVyZShzcGhlcmUsIHRhcmdldCkge1xuXHRcdF92ZWN0b3IkYS5zdWJWZWN0b3JzKHNwaGVyZS5jZW50ZXIsIHRoaXMub3JpZ2luKTtcblxuXHRcdGNvbnN0IHRjYSA9IF92ZWN0b3IkYS5kb3QodGhpcy5kaXJlY3Rpb24pO1xuXG5cdFx0Y29uc3QgZDIgPSBfdmVjdG9yJGEuZG90KF92ZWN0b3IkYSkgLSB0Y2EgKiB0Y2E7XG5cdFx0Y29uc3QgcmFkaXVzMiA9IHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzO1xuXHRcdGlmIChkMiA+IHJhZGl1czIpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IHRoYyA9IE1hdGguc3FydChyYWRpdXMyIC0gZDIpOyAvLyB0MCA9IGZpcnN0IGludGVyc2VjdCBwb2ludCAtIGVudHJhbmNlIG9uIGZyb250IG9mIHNwaGVyZVxuXG5cdFx0Y29uc3QgdDAgPSB0Y2EgLSB0aGM7IC8vIHQxID0gc2Vjb25kIGludGVyc2VjdCBwb2ludCAtIGV4aXQgcG9pbnQgb24gYmFjayBvZiBzcGhlcmVcblxuXHRcdGNvbnN0IHQxID0gdGNhICsgdGhjOyAvLyB0ZXN0IHRvIHNlZSBpZiBib3RoIHQwIGFuZCB0MSBhcmUgYmVoaW5kIHRoZSByYXkgLSBpZiBzbywgcmV0dXJuIG51bGxcblxuXHRcdGlmICh0MCA8IDAgJiYgdDEgPCAwKSByZXR1cm4gbnVsbDsgLy8gdGVzdCB0byBzZWUgaWYgdDAgaXMgYmVoaW5kIHRoZSByYXk6XG5cdFx0Ly8gaWYgaXQgaXMsIHRoZSByYXkgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHNvIHJldHVybiB0aGUgc2Vjb25kIGV4aXQgcG9pbnQgc2NhbGVkIGJ5IHQxLFxuXHRcdC8vIGluIG9yZGVyIHRvIGFsd2F5cyByZXR1cm4gYW4gaW50ZXJzZWN0IHBvaW50IHRoYXQgaXMgaW4gZnJvbnQgb2YgdGhlIHJheS5cblxuXHRcdGlmICh0MCA8IDApIHJldHVybiB0aGlzLmF0KHQxLCB0YXJnZXQpOyAvLyBlbHNlIHQwIGlzIGluIGZyb250IG9mIHRoZSByYXksIHNvIHJldHVybiB0aGUgZmlyc3QgY29sbGlzaW9uIHBvaW50IHNjYWxlZCBieSB0MFxuXG5cdFx0cmV0dXJuIHRoaXMuYXQodDAsIHRhcmdldCk7XG5cdH1cblxuXHRpbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSkge1xuXHRcdHJldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHNwaGVyZS5jZW50ZXIpIDw9IHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BsYW5lKHBsYW5lKSB7XG5cdFx0Y29uc3QgZGVub21pbmF0b3IgPSBwbGFuZS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtcblxuXHRcdGlmIChkZW5vbWluYXRvciA9PT0gMCkge1xuXHRcdFx0Ly8gbGluZSBpcyBjb3BsYW5hciwgcmV0dXJuIG9yaWdpblxuXHRcdFx0aWYgKHBsYW5lLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbikgPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHR9IC8vIE51bGwgaXMgcHJlZmVyYWJsZSB0byB1bmRlZmluZWQgc2luY2UgdW5kZWZpbmVkIG1lYW5zLi4uLiBpdCBpcyB1bmRlZmluZWRcblxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCB0ID0gLSh0aGlzLm9yaWdpbi5kb3QocGxhbmUubm9ybWFsKSArIHBsYW5lLmNvbnN0YW50KSAvIGRlbm9taW5hdG9yOyAvLyBSZXR1cm4gaWYgdGhlIHJheSBuZXZlciBpbnRlcnNlY3RzIHRoZSBwbGFuZVxuXG5cdFx0cmV0dXJuIHQgPj0gMCA/IHQgOiBudWxsO1xuXHR9XG5cblx0aW50ZXJzZWN0UGxhbmUocGxhbmUsIHRhcmdldCkge1xuXHRcdGNvbnN0IHQgPSB0aGlzLmRpc3RhbmNlVG9QbGFuZShwbGFuZSk7XG5cblx0XHRpZiAodCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuYXQodCwgdGFyZ2V0KTtcblx0fVxuXG5cdGludGVyc2VjdHNQbGFuZShwbGFuZSkge1xuXHRcdC8vIGNoZWNrIGlmIHRoZSByYXkgbGllcyBvbiB0aGUgcGxhbmUgZmlyc3Rcblx0XHRjb25zdCBkaXN0VG9Qb2ludCA9IHBsYW5lLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7XG5cblx0XHRpZiAoZGlzdFRvUG9pbnQgPT09IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRlbm9taW5hdG9yID0gcGxhbmUubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7XG5cblx0XHRpZiAoZGVub21pbmF0b3IgKiBkaXN0VG9Qb2ludCA8IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gLy8gcmF5IG9yaWdpbiBpcyBiZWhpbmQgdGhlIHBsYW5lIChhbmQgaXMgcG9pbnRpbmcgYmVoaW5kIGl0KVxuXG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpbnRlcnNlY3RCb3goYm94LCB0YXJnZXQpIHtcblx0XHRsZXQgdG1pbiwgdG1heCwgdHltaW4sIHR5bWF4LCB0em1pbiwgdHptYXg7XG5cdFx0Y29uc3QgaW52ZGlyeCA9IDEgLyB0aGlzLmRpcmVjdGlvbi54LFxuXHRcdFx0XHRcdGludmRpcnkgPSAxIC8gdGhpcy5kaXJlY3Rpb24ueSxcblx0XHRcdFx0XHRpbnZkaXJ6ID0gMSAvIHRoaXMuZGlyZWN0aW9uLno7XG5cdFx0Y29uc3Qgb3JpZ2luID0gdGhpcy5vcmlnaW47XG5cblx0XHRpZiAoaW52ZGlyeCA+PSAwKSB7XG5cdFx0XHR0bWluID0gKGJveC5taW4ueCAtIG9yaWdpbi54KSAqIGludmRpcng7XG5cdFx0XHR0bWF4ID0gKGJveC5tYXgueCAtIG9yaWdpbi54KSAqIGludmRpcng7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRtaW4gPSAoYm94Lm1heC54IC0gb3JpZ2luLngpICogaW52ZGlyeDtcblx0XHRcdHRtYXggPSAoYm94Lm1pbi54IC0gb3JpZ2luLngpICogaW52ZGlyeDtcblx0XHR9XG5cblx0XHRpZiAoaW52ZGlyeSA+PSAwKSB7XG5cdFx0XHR0eW1pbiA9IChib3gubWluLnkgLSBvcmlnaW4ueSkgKiBpbnZkaXJ5O1xuXHRcdFx0dHltYXggPSAoYm94Lm1heC55IC0gb3JpZ2luLnkpICogaW52ZGlyeTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHltaW4gPSAoYm94Lm1heC55IC0gb3JpZ2luLnkpICogaW52ZGlyeTtcblx0XHRcdHR5bWF4ID0gKGJveC5taW4ueSAtIG9yaWdpbi55KSAqIGludmRpcnk7XG5cdFx0fVxuXG5cdFx0aWYgKHRtaW4gPiB0eW1heCB8fCB0eW1pbiA+IHRtYXgpIHJldHVybiBudWxsOyAvLyBUaGVzZSBsaW5lcyBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0bWluIG9yIHRtYXggaXMgTmFOXG5cdFx0Ly8gKHJlc3VsdCBvZiAwICogSW5maW5pdHkpLiB4ICE9PSB4IHJldHVybnMgdHJ1ZSBpZiB4IGlzIE5hTlxuXG5cdFx0aWYgKHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB0bWluID0gdHltaW47XG5cdFx0aWYgKHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB0bWF4ID0gdHltYXg7XG5cblx0XHRpZiAoaW52ZGlyeiA+PSAwKSB7XG5cdFx0XHR0em1pbiA9IChib3gubWluLnogLSBvcmlnaW4ueikgKiBpbnZkaXJ6O1xuXHRcdFx0dHptYXggPSAoYm94Lm1heC56IC0gb3JpZ2luLnopICogaW52ZGlyejtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHptaW4gPSAoYm94Lm1heC56IC0gb3JpZ2luLnopICogaW52ZGlyejtcblx0XHRcdHR6bWF4ID0gKGJveC5taW4ueiAtIG9yaWdpbi56KSAqIGludmRpcno7XG5cdFx0fVxuXG5cdFx0aWYgKHRtaW4gPiB0em1heCB8fCB0em1pbiA+IHRtYXgpIHJldHVybiBudWxsO1xuXHRcdGlmICh0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikgdG1pbiA9IHR6bWluO1xuXHRcdGlmICh0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkgdG1heCA9IHR6bWF4OyAvL3JldHVybiBwb2ludCBjbG9zZXN0IHRvIHRoZSByYXkgKHBvc2l0aXZlIHNpZGUpXG5cblx0XHRpZiAodG1heCA8IDApIHJldHVybiBudWxsO1xuXHRcdHJldHVybiB0aGlzLmF0KHRtaW4gPj0gMCA/IHRtaW4gOiB0bWF4LCB0YXJnZXQpO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3goYm94LCBfdmVjdG9yJGEpICE9PSBudWxsO1xuXHR9XG5cblx0aW50ZXJzZWN0VHJpYW5nbGUoYSwgYiwgYywgYmFja2ZhY2VDdWxsaW5nLCB0YXJnZXQpIHtcblx0XHQvLyBDb21wdXRlIHRoZSBvZmZzZXQgb3JpZ2luLCBlZGdlcywgYW5kIG5vcm1hbC5cblx0XHQvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wbWpvbmlhay9HZW9tZXRyaWNUb29scy9ibG9iL21hc3Rlci9HVEVuZ2luZS9JbmNsdWRlL01hdGhlbWF0aWNzL0d0ZUludHJSYXkzVHJpYW5nbGUzLmhcblx0XHRfZWRnZTEuc3ViVmVjdG9ycyhiLCBhKTtcblxuXHRcdF9lZGdlMi5zdWJWZWN0b3JzKGMsIGEpO1xuXG5cdFx0X25vcm1hbCQxLmNyb3NzVmVjdG9ycyhfZWRnZTEsIF9lZGdlMik7IC8vIFNvbHZlIFEgKyB0KkQgPSBiMSpFMSArIGIyKkUyIChRID0ga0RpZmYsIEQgPSByYXkgZGlyZWN0aW9uLFxuXHRcdC8vIEUxID0ga0VkZ2UxLCBFMiA9IGtFZGdlMiwgTiA9IENyb3NzKEUxLEUyKSkgYnlcblx0XHQvL1x0IHxEb3QoRCxOKXwqYjEgPSBzaWduKERvdChELE4pKSpEb3QoRCxDcm9zcyhRLEUyKSlcblx0XHQvL1x0IHxEb3QoRCxOKXwqYjIgPSBzaWduKERvdChELE4pKSpEb3QoRCxDcm9zcyhFMSxRKSlcblx0XHQvL1x0IHxEb3QoRCxOKXwqdCA9IC1zaWduKERvdChELE4pKSpEb3QoUSxOKVxuXG5cblx0XHRsZXQgRGROID0gdGhpcy5kaXJlY3Rpb24uZG90KF9ub3JtYWwkMSk7XG5cdFx0bGV0IHNpZ247XG5cblx0XHRpZiAoRGROID4gMCkge1xuXHRcdFx0aWYgKGJhY2tmYWNlQ3VsbGluZykgcmV0dXJuIG51bGw7XG5cdFx0XHRzaWduID0gMTtcblx0XHR9IGVsc2UgaWYgKERkTiA8IDApIHtcblx0XHRcdHNpZ24gPSAtMTtcblx0XHRcdERkTiA9IC1EZE47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdF9kaWZmLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sIGEpO1xuXG5cdFx0Y29uc3QgRGRReEUyID0gc2lnbiAqIHRoaXMuZGlyZWN0aW9uLmRvdChfZWRnZTIuY3Jvc3NWZWN0b3JzKF9kaWZmLCBfZWRnZTIpKTsgLy8gYjEgPCAwLCBubyBpbnRlcnNlY3Rpb25cblxuXHRcdGlmIChEZFF4RTIgPCAwKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBEZEUxeFEgPSBzaWduICogdGhpcy5kaXJlY3Rpb24uZG90KF9lZGdlMS5jcm9zcyhfZGlmZikpOyAvLyBiMiA8IDAsIG5vIGludGVyc2VjdGlvblxuXG5cdFx0aWYgKERkRTF4USA8IDApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gLy8gYjErYjIgPiAxLCBubyBpbnRlcnNlY3Rpb25cblxuXG5cdFx0aWYgKERkUXhFMiArIERkRTF4USA+IERkTikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSAvLyBMaW5lIGludGVyc2VjdHMgdHJpYW5nbGUsIGNoZWNrIGlmIHJheSBkb2VzLlxuXG5cblx0XHRjb25zdCBRZE4gPSAtc2lnbiAqIF9kaWZmLmRvdChfbm9ybWFsJDEpOyAvLyB0IDwgMCwgbm8gaW50ZXJzZWN0aW9uXG5cblxuXHRcdGlmIChRZE4gPCAwKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IC8vIFJheSBpbnRlcnNlY3RzIHRyaWFuZ2xlLlxuXG5cblx0XHRyZXR1cm4gdGhpcy5hdChRZE4gLyBEZE4sIHRhcmdldCk7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobWF0cml4NCkge1xuXHRcdHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NChtYXRyaXg0KTtcblx0XHR0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24obWF0cml4NCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMocmF5KSB7XG5cdFx0cmV0dXJuIHJheS5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSAmJiByYXkuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbik7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cbn1cblxuY2xhc3MgTWF0cml4NCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZWxlbWVudHMgPSBbMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XG5cblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0KG4xMSwgbjEyLCBuMTMsIG4xNCwgbjIxLCBuMjIsIG4yMywgbjI0LCBuMzEsIG4zMiwgbjMzLCBuMzQsIG40MSwgbjQyLCBuNDMsIG40NCkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR0ZVswXSA9IG4xMTtcblx0XHR0ZVs0XSA9IG4xMjtcblx0XHR0ZVs4XSA9IG4xMztcblx0XHR0ZVsxMl0gPSBuMTQ7XG5cdFx0dGVbMV0gPSBuMjE7XG5cdFx0dGVbNV0gPSBuMjI7XG5cdFx0dGVbOV0gPSBuMjM7XG5cdFx0dGVbMTNdID0gbjI0O1xuXHRcdHRlWzJdID0gbjMxO1xuXHRcdHRlWzZdID0gbjMyO1xuXHRcdHRlWzEwXSA9IG4zMztcblx0XHR0ZVsxNF0gPSBuMzQ7XG5cdFx0dGVbM10gPSBuNDE7XG5cdFx0dGVbN10gPSBuNDI7XG5cdFx0dGVbMTFdID0gbjQzO1xuXHRcdHRlWzE1XSA9IG40NDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlkZW50aXR5KCkge1xuXHRcdHRoaXMuc2V0KDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpO1xuXHR9XG5cblx0Y29weShtKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHR0ZVswXSA9IG1lWzBdO1xuXHRcdHRlWzFdID0gbWVbMV07XG5cdFx0dGVbMl0gPSBtZVsyXTtcblx0XHR0ZVszXSA9IG1lWzNdO1xuXHRcdHRlWzRdID0gbWVbNF07XG5cdFx0dGVbNV0gPSBtZVs1XTtcblx0XHR0ZVs2XSA9IG1lWzZdO1xuXHRcdHRlWzddID0gbWVbN107XG5cdFx0dGVbOF0gPSBtZVs4XTtcblx0XHR0ZVs5XSA9IG1lWzldO1xuXHRcdHRlWzEwXSA9IG1lWzEwXTtcblx0XHR0ZVsxMV0gPSBtZVsxMV07XG5cdFx0dGVbMTJdID0gbWVbMTJdO1xuXHRcdHRlWzEzXSA9IG1lWzEzXTtcblx0XHR0ZVsxNF0gPSBtZVsxNF07XG5cdFx0dGVbMTVdID0gbWVbMTVdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weVBvc2l0aW9uKG0pIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHMsXG5cdFx0XHRcdFx0bWUgPSBtLmVsZW1lbnRzO1xuXHRcdHRlWzEyXSA9IG1lWzEyXTtcblx0XHR0ZVsxM10gPSBtZVsxM107XG5cdFx0dGVbMTRdID0gbWVbMTRdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDMobSkge1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHR0aGlzLnNldChtZVswXSwgbWVbM10sIG1lWzZdLCAwLCBtZVsxXSwgbWVbNF0sIG1lWzddLCAwLCBtZVsyXSwgbWVbNV0sIG1lWzhdLCAwLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4dHJhY3RCYXNpcyh4QXhpcywgeUF4aXMsIHpBeGlzKSB7XG5cdFx0eEF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLCAwKTtcblx0XHR5QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsIDEpO1xuXHRcdHpBeGlzLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywgMik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlQmFzaXMoeEF4aXMsIHlBeGlzLCB6QXhpcykge1xuXHRcdHRoaXMuc2V0KHhBeGlzLngsIHlBeGlzLngsIHpBeGlzLngsIDAsIHhBeGlzLnksIHlBeGlzLnksIHpBeGlzLnksIDAsIHhBeGlzLnosIHlBeGlzLnosIHpBeGlzLnosIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXh0cmFjdFJvdGF0aW9uKG0pIHtcblx0XHQvLyB0aGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHJlZmxlY3Rpb24gbWF0cmljZXNcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3Qgc2NhbGVYID0gMSAvIF92MSQ1LnNldEZyb21NYXRyaXhDb2x1bW4obSwgMCkubGVuZ3RoKCk7XG5cblx0XHRjb25zdCBzY2FsZVkgPSAxIC8gX3YxJDUuc2V0RnJvbU1hdHJpeENvbHVtbihtLCAxKS5sZW5ndGgoKTtcblxuXHRcdGNvbnN0IHNjYWxlWiA9IDEgLyBfdjEkNS5zZXRGcm9tTWF0cml4Q29sdW1uKG0sIDIpLmxlbmd0aCgpO1xuXG5cdFx0dGVbMF0gPSBtZVswXSAqIHNjYWxlWDtcblx0XHR0ZVsxXSA9IG1lWzFdICogc2NhbGVYO1xuXHRcdHRlWzJdID0gbWVbMl0gKiBzY2FsZVg7XG5cdFx0dGVbM10gPSAwO1xuXHRcdHRlWzRdID0gbWVbNF0gKiBzY2FsZVk7XG5cdFx0dGVbNV0gPSBtZVs1XSAqIHNjYWxlWTtcblx0XHR0ZVs2XSA9IG1lWzZdICogc2NhbGVZO1xuXHRcdHRlWzddID0gMDtcblx0XHR0ZVs4XSA9IG1lWzhdICogc2NhbGVaO1xuXHRcdHRlWzldID0gbWVbOV0gKiBzY2FsZVo7XG5cdFx0dGVbMTBdID0gbWVbMTBdICogc2NhbGVaO1xuXHRcdHRlWzExXSA9IDA7XG5cdFx0dGVbMTJdID0gMDtcblx0XHR0ZVsxM10gPSAwO1xuXHRcdHRlWzE0XSA9IDA7XG5cdFx0dGVbMTVdID0gMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VSb3RhdGlvbkZyb21FdWxlcihldWxlcikge1xuXHRcdGlmICghKGV1bGVyICYmIGV1bGVyLmlzRXVsZXIpKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB4ID0gZXVsZXIueCxcblx0XHRcdFx0XHR5ID0gZXVsZXIueSxcblx0XHRcdFx0XHR6ID0gZXVsZXIuejtcblx0XHRjb25zdCBhID0gTWF0aC5jb3MoeCksXG5cdFx0XHRcdFx0YiA9IE1hdGguc2luKHgpO1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyh5KSxcblx0XHRcdFx0XHRkID0gTWF0aC5zaW4oeSk7XG5cdFx0Y29uc3QgZSA9IE1hdGguY29zKHopLFxuXHRcdFx0XHRcdGYgPSBNYXRoLnNpbih6KTtcblxuXHRcdGlmIChldWxlci5vcmRlciA9PT0gJ1hZWicpIHtcblx0XHRcdGNvbnN0IGFlID0gYSAqIGUsXG5cdFx0XHRcdFx0XHRhZiA9IGEgKiBmLFxuXHRcdFx0XHRcdFx0YmUgPSBiICogZSxcblx0XHRcdFx0XHRcdGJmID0gYiAqIGY7XG5cdFx0XHR0ZVswXSA9IGMgKiBlO1xuXHRcdFx0dGVbNF0gPSAtYyAqIGY7XG5cdFx0XHR0ZVs4XSA9IGQ7XG5cdFx0XHR0ZVsxXSA9IGFmICsgYmUgKiBkO1xuXHRcdFx0dGVbNV0gPSBhZSAtIGJmICogZDtcblx0XHRcdHRlWzldID0gLWIgKiBjO1xuXHRcdFx0dGVbMl0gPSBiZiAtIGFlICogZDtcblx0XHRcdHRlWzZdID0gYmUgKyBhZiAqIGQ7XG5cdFx0XHR0ZVsxMF0gPSBhICogYztcblx0XHR9IGVsc2UgaWYgKGV1bGVyLm9yZGVyID09PSAnWVhaJykge1xuXHRcdFx0Y29uc3QgY2UgPSBjICogZSxcblx0XHRcdFx0XHRcdGNmID0gYyAqIGYsXG5cdFx0XHRcdFx0XHRkZSA9IGQgKiBlLFxuXHRcdFx0XHRcdFx0ZGYgPSBkICogZjtcblx0XHRcdHRlWzBdID0gY2UgKyBkZiAqIGI7XG5cdFx0XHR0ZVs0XSA9IGRlICogYiAtIGNmO1xuXHRcdFx0dGVbOF0gPSBhICogZDtcblx0XHRcdHRlWzFdID0gYSAqIGY7XG5cdFx0XHR0ZVs1XSA9IGEgKiBlO1xuXHRcdFx0dGVbOV0gPSAtYjtcblx0XHRcdHRlWzJdID0gY2YgKiBiIC0gZGU7XG5cdFx0XHR0ZVs2XSA9IGRmICsgY2UgKiBiO1xuXHRcdFx0dGVbMTBdID0gYSAqIGM7XG5cdFx0fSBlbHNlIGlmIChldWxlci5vcmRlciA9PT0gJ1pYWScpIHtcblx0XHRcdGNvbnN0IGNlID0gYyAqIGUsXG5cdFx0XHRcdFx0XHRjZiA9IGMgKiBmLFxuXHRcdFx0XHRcdFx0ZGUgPSBkICogZSxcblx0XHRcdFx0XHRcdGRmID0gZCAqIGY7XG5cdFx0XHR0ZVswXSA9IGNlIC0gZGYgKiBiO1xuXHRcdFx0dGVbNF0gPSAtYSAqIGY7XG5cdFx0XHR0ZVs4XSA9IGRlICsgY2YgKiBiO1xuXHRcdFx0dGVbMV0gPSBjZiArIGRlICogYjtcblx0XHRcdHRlWzVdID0gYSAqIGU7XG5cdFx0XHR0ZVs5XSA9IGRmIC0gY2UgKiBiO1xuXHRcdFx0dGVbMl0gPSAtYSAqIGQ7XG5cdFx0XHR0ZVs2XSA9IGI7XG5cdFx0XHR0ZVsxMF0gPSBhICogYztcblx0XHR9IGVsc2UgaWYgKGV1bGVyLm9yZGVyID09PSAnWllYJykge1xuXHRcdFx0Y29uc3QgYWUgPSBhICogZSxcblx0XHRcdFx0XHRcdGFmID0gYSAqIGYsXG5cdFx0XHRcdFx0XHRiZSA9IGIgKiBlLFxuXHRcdFx0XHRcdFx0YmYgPSBiICogZjtcblx0XHRcdHRlWzBdID0gYyAqIGU7XG5cdFx0XHR0ZVs0XSA9IGJlICogZCAtIGFmO1xuXHRcdFx0dGVbOF0gPSBhZSAqIGQgKyBiZjtcblx0XHRcdHRlWzFdID0gYyAqIGY7XG5cdFx0XHR0ZVs1XSA9IGJmICogZCArIGFlO1xuXHRcdFx0dGVbOV0gPSBhZiAqIGQgLSBiZTtcblx0XHRcdHRlWzJdID0gLWQ7XG5cdFx0XHR0ZVs2XSA9IGIgKiBjO1xuXHRcdFx0dGVbMTBdID0gYSAqIGM7XG5cdFx0fSBlbHNlIGlmIChldWxlci5vcmRlciA9PT0gJ1laWCcpIHtcblx0XHRcdGNvbnN0IGFjID0gYSAqIGMsXG5cdFx0XHRcdFx0XHRhZCA9IGEgKiBkLFxuXHRcdFx0XHRcdFx0YmMgPSBiICogYyxcblx0XHRcdFx0XHRcdGJkID0gYiAqIGQ7XG5cdFx0XHR0ZVswXSA9IGMgKiBlO1xuXHRcdFx0dGVbNF0gPSBiZCAtIGFjICogZjtcblx0XHRcdHRlWzhdID0gYmMgKiBmICsgYWQ7XG5cdFx0XHR0ZVsxXSA9IGY7XG5cdFx0XHR0ZVs1XSA9IGEgKiBlO1xuXHRcdFx0dGVbOV0gPSAtYiAqIGU7XG5cdFx0XHR0ZVsyXSA9IC1kICogZTtcblx0XHRcdHRlWzZdID0gYWQgKiBmICsgYmM7XG5cdFx0XHR0ZVsxMF0gPSBhYyAtIGJkICogZjtcblx0XHR9IGVsc2UgaWYgKGV1bGVyLm9yZGVyID09PSAnWFpZJykge1xuXHRcdFx0Y29uc3QgYWMgPSBhICogYyxcblx0XHRcdFx0XHRcdGFkID0gYSAqIGQsXG5cdFx0XHRcdFx0XHRiYyA9IGIgKiBjLFxuXHRcdFx0XHRcdFx0YmQgPSBiICogZDtcblx0XHRcdHRlWzBdID0gYyAqIGU7XG5cdFx0XHR0ZVs0XSA9IC1mO1xuXHRcdFx0dGVbOF0gPSBkICogZTtcblx0XHRcdHRlWzFdID0gYWMgKiBmICsgYmQ7XG5cdFx0XHR0ZVs1XSA9IGEgKiBlO1xuXHRcdFx0dGVbOV0gPSBhZCAqIGYgLSBiYztcblx0XHRcdHRlWzJdID0gYmMgKiBmIC0gYWQ7XG5cdFx0XHR0ZVs2XSA9IGIgKiBlO1xuXHRcdFx0dGVbMTBdID0gYmQgKiBmICsgYWM7XG5cdFx0fSAvLyBib3R0b20gcm93XG5cblxuXHRcdHRlWzNdID0gMDtcblx0XHR0ZVs3XSA9IDA7XG5cdFx0dGVbMTFdID0gMDsgLy8gbGFzdCBjb2x1bW5cblxuXHRcdHRlWzEyXSA9IDA7XG5cdFx0dGVbMTNdID0gMDtcblx0XHR0ZVsxNF0gPSAwO1xuXHRcdHRlWzE1XSA9IDE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihxKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcG9zZShfemVybywgcSwgX29uZSk7XG5cdH1cblxuXHRsb29rQXQoZXllLCB0YXJnZXQsIHVwKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0X3ouc3ViVmVjdG9ycyhleWUsIHRhcmdldCk7XG5cblx0XHRpZiAoX3oubGVuZ3RoU3EoKSA9PT0gMCkge1xuXHRcdFx0Ly8gZXllIGFuZCB0YXJnZXQgYXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uXG5cdFx0XHRfei56ID0gMTtcblx0XHR9XG5cblx0XHRfei5ub3JtYWxpemUoKTtcblxuXHRcdF94LmNyb3NzVmVjdG9ycyh1cCwgX3opO1xuXG5cdFx0aWYgKF94Lmxlbmd0aFNxKCkgPT09IDApIHtcblx0XHRcdC8vIHVwIGFuZCB6IGFyZSBwYXJhbGxlbFxuXHRcdFx0aWYgKE1hdGguYWJzKHVwLnopID09PSAxKSB7XG5cdFx0XHRcdF96LnggKz0gMC4wMDAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X3oueiArPSAwLjAwMDE7XG5cdFx0XHR9XG5cblx0XHRcdF96Lm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRfeC5jcm9zc1ZlY3RvcnModXAsIF96KTtcblx0XHR9XG5cblx0XHRfeC5ub3JtYWxpemUoKTtcblxuXHRcdF95LmNyb3NzVmVjdG9ycyhfeiwgX3gpO1xuXG5cdFx0dGVbMF0gPSBfeC54O1xuXHRcdHRlWzRdID0gX3kueDtcblx0XHR0ZVs4XSA9IF96Lng7XG5cdFx0dGVbMV0gPSBfeC55O1xuXHRcdHRlWzVdID0gX3kueTtcblx0XHR0ZVs5XSA9IF96Lnk7XG5cdFx0dGVbMl0gPSBfeC56O1xuXHRcdHRlWzZdID0gX3kuejtcblx0XHR0ZVsxMF0gPSBfei56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHkobSwgbikge1xuXHRcdGlmIChuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKG0sIG4pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcywgbSk7XG5cdH1cblxuXHRwcmVtdWx0aXBseShtKSB7XG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyhtLCB0aGlzKTtcblx0fVxuXG5cdG11bHRpcGx5TWF0cmljZXMoYSwgYikge1xuXHRcdGNvbnN0IGFlID0gYS5lbGVtZW50cztcblx0XHRjb25zdCBiZSA9IGIuZWxlbWVudHM7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGExMSA9IGFlWzBdLFxuXHRcdFx0XHRcdGExMiA9IGFlWzRdLFxuXHRcdFx0XHRcdGExMyA9IGFlWzhdLFxuXHRcdFx0XHRcdGExNCA9IGFlWzEyXTtcblx0XHRjb25zdCBhMjEgPSBhZVsxXSxcblx0XHRcdFx0XHRhMjIgPSBhZVs1XSxcblx0XHRcdFx0XHRhMjMgPSBhZVs5XSxcblx0XHRcdFx0XHRhMjQgPSBhZVsxM107XG5cdFx0Y29uc3QgYTMxID0gYWVbMl0sXG5cdFx0XHRcdFx0YTMyID0gYWVbNl0sXG5cdFx0XHRcdFx0YTMzID0gYWVbMTBdLFxuXHRcdFx0XHRcdGEzNCA9IGFlWzE0XTtcblx0XHRjb25zdCBhNDEgPSBhZVszXSxcblx0XHRcdFx0XHRhNDIgPSBhZVs3XSxcblx0XHRcdFx0XHRhNDMgPSBhZVsxMV0sXG5cdFx0XHRcdFx0YTQ0ID0gYWVbMTVdO1xuXHRcdGNvbnN0IGIxMSA9IGJlWzBdLFxuXHRcdFx0XHRcdGIxMiA9IGJlWzRdLFxuXHRcdFx0XHRcdGIxMyA9IGJlWzhdLFxuXHRcdFx0XHRcdGIxNCA9IGJlWzEyXTtcblx0XHRjb25zdCBiMjEgPSBiZVsxXSxcblx0XHRcdFx0XHRiMjIgPSBiZVs1XSxcblx0XHRcdFx0XHRiMjMgPSBiZVs5XSxcblx0XHRcdFx0XHRiMjQgPSBiZVsxM107XG5cdFx0Y29uc3QgYjMxID0gYmVbMl0sXG5cdFx0XHRcdFx0YjMyID0gYmVbNl0sXG5cdFx0XHRcdFx0YjMzID0gYmVbMTBdLFxuXHRcdFx0XHRcdGIzNCA9IGJlWzE0XTtcblx0XHRjb25zdCBiNDEgPSBiZVszXSxcblx0XHRcdFx0XHRiNDIgPSBiZVs3XSxcblx0XHRcdFx0XHRiNDMgPSBiZVsxMV0sXG5cdFx0XHRcdFx0YjQ0ID0gYmVbMTVdO1xuXHRcdHRlWzBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxICsgYTE0ICogYjQxO1xuXHRcdHRlWzRdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICogYjMyICsgYTE0ICogYjQyO1xuXHRcdHRlWzhdID0gYTExICogYjEzICsgYTEyICogYjIzICsgYTEzICogYjMzICsgYTE0ICogYjQzO1xuXHRcdHRlWzEyXSA9IGExMSAqIGIxNCArIGExMiAqIGIyNCArIGExMyAqIGIzNCArIGExNCAqIGI0NDtcblx0XHR0ZVsxXSA9IGEyMSAqIGIxMSArIGEyMiAqIGIyMSArIGEyMyAqIGIzMSArIGEyNCAqIGI0MTtcblx0XHR0ZVs1XSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMiArIGEyNCAqIGI0Mjtcblx0XHR0ZVs5XSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0Mztcblx0XHR0ZVsxM10gPSBhMjEgKiBiMTQgKyBhMjIgKiBiMjQgKyBhMjMgKiBiMzQgKyBhMjQgKiBiNDQ7XG5cdFx0dGVbMl0gPSBhMzEgKiBiMTEgKyBhMzIgKiBiMjEgKyBhMzMgKiBiMzEgKyBhMzQgKiBiNDE7XG5cdFx0dGVbNl0gPSBhMzEgKiBiMTIgKyBhMzIgKiBiMjIgKyBhMzMgKiBiMzIgKyBhMzQgKiBiNDI7XG5cdFx0dGVbMTBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICogYjMzICsgYTM0ICogYjQzO1xuXHRcdHRlWzE0XSA9IGEzMSAqIGIxNCArIGEzMiAqIGIyNCArIGEzMyAqIGIzNCArIGEzNCAqIGI0NDtcblx0XHR0ZVszXSA9IGE0MSAqIGIxMSArIGE0MiAqIGIyMSArIGE0MyAqIGIzMSArIGE0NCAqIGI0MTtcblx0XHR0ZVs3XSA9IGE0MSAqIGIxMiArIGE0MiAqIGIyMiArIGE0MyAqIGIzMiArIGE0NCAqIGI0Mjtcblx0XHR0ZVsxMV0gPSBhNDEgKiBiMTMgKyBhNDIgKiBiMjMgKyBhNDMgKiBiMzMgKyBhNDQgKiBiNDM7XG5cdFx0dGVbMTVdID0gYTQxICogYjE0ICsgYTQyICogYjI0ICsgYTQzICogYjM0ICsgYTQ0ICogYjQ0O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIocykge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR0ZVswXSAqPSBzO1xuXHRcdHRlWzRdICo9IHM7XG5cdFx0dGVbOF0gKj0gcztcblx0XHR0ZVsxMl0gKj0gcztcblx0XHR0ZVsxXSAqPSBzO1xuXHRcdHRlWzVdICo9IHM7XG5cdFx0dGVbOV0gKj0gcztcblx0XHR0ZVsxM10gKj0gcztcblx0XHR0ZVsyXSAqPSBzO1xuXHRcdHRlWzZdICo9IHM7XG5cdFx0dGVbMTBdICo9IHM7XG5cdFx0dGVbMTRdICo9IHM7XG5cdFx0dGVbM10gKj0gcztcblx0XHR0ZVs3XSAqPSBzO1xuXHRcdHRlWzExXSAqPSBzO1xuXHRcdHRlWzE1XSAqPSBzO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGV0ZXJtaW5hbnQoKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG4xMSA9IHRlWzBdLFxuXHRcdFx0XHRcdG4xMiA9IHRlWzRdLFxuXHRcdFx0XHRcdG4xMyA9IHRlWzhdLFxuXHRcdFx0XHRcdG4xNCA9IHRlWzEyXTtcblx0XHRjb25zdCBuMjEgPSB0ZVsxXSxcblx0XHRcdFx0XHRuMjIgPSB0ZVs1XSxcblx0XHRcdFx0XHRuMjMgPSB0ZVs5XSxcblx0XHRcdFx0XHRuMjQgPSB0ZVsxM107XG5cdFx0Y29uc3QgbjMxID0gdGVbMl0sXG5cdFx0XHRcdFx0bjMyID0gdGVbNl0sXG5cdFx0XHRcdFx0bjMzID0gdGVbMTBdLFxuXHRcdFx0XHRcdG4zNCA9IHRlWzE0XTtcblx0XHRjb25zdCBuNDEgPSB0ZVszXSxcblx0XHRcdFx0XHRuNDIgPSB0ZVs3XSxcblx0XHRcdFx0XHRuNDMgPSB0ZVsxMV0sXG5cdFx0XHRcdFx0bjQ0ID0gdGVbMTVdOyAvL1RPRE86IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudFxuXHRcdC8vKCBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG0gKVxuXG5cdFx0cmV0dXJuIG40MSAqICgrbjE0ICogbjIzICogbjMyIC0gbjEzICogbjI0ICogbjMyIC0gbjE0ICogbjIyICogbjMzICsgbjEyICogbjI0ICogbjMzICsgbjEzICogbjIyICogbjM0IC0gbjEyICogbjIzICogbjM0KSArIG40MiAqICgrbjExICogbjIzICogbjM0IC0gbjExICogbjI0ICogbjMzICsgbjE0ICogbjIxICogbjMzIC0gbjEzICogbjIxICogbjM0ICsgbjEzICogbjI0ICogbjMxIC0gbjE0ICogbjIzICogbjMxKSArIG40MyAqICgrbjExICogbjI0ICogbjMyIC0gbjExICogbjIyICogbjM0IC0gbjE0ICogbjIxICogbjMyICsgbjEyICogbjIxICogbjM0ICsgbjE0ICogbjIyICogbjMxIC0gbjEyICogbjI0ICogbjMxKSArIG40NCAqICgtbjEzICogbjIyICogbjMxIC0gbjExICogbjIzICogbjMyICsgbjExICogbjIyICogbjMzICsgbjEzICogbjIxICogbjMyIC0gbjEyICogbjIxICogbjMzICsgbjEyICogbjIzICogbjMxKTtcblx0fVxuXG5cdHRyYW5zcG9zZSgpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0bGV0IHRtcDtcblx0XHR0bXAgPSB0ZVsxXTtcblx0XHR0ZVsxXSA9IHRlWzRdO1xuXHRcdHRlWzRdID0gdG1wO1xuXHRcdHRtcCA9IHRlWzJdO1xuXHRcdHRlWzJdID0gdGVbOF07XG5cdFx0dGVbOF0gPSB0bXA7XG5cdFx0dG1wID0gdGVbNl07XG5cdFx0dGVbNl0gPSB0ZVs5XTtcblx0XHR0ZVs5XSA9IHRtcDtcblx0XHR0bXAgPSB0ZVszXTtcblx0XHR0ZVszXSA9IHRlWzEyXTtcblx0XHR0ZVsxMl0gPSB0bXA7XG5cdFx0dG1wID0gdGVbN107XG5cdFx0dGVbN10gPSB0ZVsxM107XG5cdFx0dGVbMTNdID0gdG1wO1xuXHRcdHRtcCA9IHRlWzExXTtcblx0XHR0ZVsxMV0gPSB0ZVsxNF07XG5cdFx0dGVbMTRdID0gdG1wO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UG9zaXRpb24oeCwgeSwgeikge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGlmICh4LmlzVmVjdG9yMykge1xuXHRcdFx0dGVbMTJdID0geC54O1xuXHRcdFx0dGVbMTNdID0geC55O1xuXHRcdFx0dGVbMTRdID0geC56O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ZVsxMl0gPSB4O1xuXHRcdFx0dGVbMTNdID0geTtcblx0XHRcdHRlWzE0XSA9IHo7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpbnZlcnQoKSB7XG5cdFx0Ly8gYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzLFxuXHRcdFx0XHRcdG4xMSA9IHRlWzBdLFxuXHRcdFx0XHRcdG4yMSA9IHRlWzFdLFxuXHRcdFx0XHRcdG4zMSA9IHRlWzJdLFxuXHRcdFx0XHRcdG40MSA9IHRlWzNdLFxuXHRcdFx0XHRcdG4xMiA9IHRlWzRdLFxuXHRcdFx0XHRcdG4yMiA9IHRlWzVdLFxuXHRcdFx0XHRcdG4zMiA9IHRlWzZdLFxuXHRcdFx0XHRcdG40MiA9IHRlWzddLFxuXHRcdFx0XHRcdG4xMyA9IHRlWzhdLFxuXHRcdFx0XHRcdG4yMyA9IHRlWzldLFxuXHRcdFx0XHRcdG4zMyA9IHRlWzEwXSxcblx0XHRcdFx0XHRuNDMgPSB0ZVsxMV0sXG5cdFx0XHRcdFx0bjE0ID0gdGVbMTJdLFxuXHRcdFx0XHRcdG4yNCA9IHRlWzEzXSxcblx0XHRcdFx0XHRuMzQgPSB0ZVsxNF0sXG5cdFx0XHRcdFx0bjQ0ID0gdGVbMTVdLFxuXHRcdFx0XHRcdHQxMSA9IG4yMyAqIG4zNCAqIG40MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4yMiAqIG4zNCAqIG40MyAtIG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCxcblx0XHRcdFx0XHR0MTIgPSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQgKiBuMzIgKiBuNDMgKyBuMTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBuMzMgKiBuNDQsXG5cdFx0XHRcdFx0dDEzID0gbjEzICogbjI0ICogbjQyIC0gbjE0ICogbjIzICogbjQyICsgbjE0ICogbjIyICogbjQzIC0gbjEyICogbjI0ICogbjQzIC0gbjEzICogbjIyICogbjQ0ICsgbjEyICogbjIzICogbjQ0LFxuXHRcdFx0XHRcdHQxNCA9IG4xNCAqIG4yMyAqIG4zMiAtIG4xMyAqIG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAqIG4zMyArIG4xMyAqIG4yMiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDtcblx0XHRjb25zdCBkZXQgPSBuMTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTMgKyBuNDEgKiB0MTQ7XG5cdFx0aWYgKGRldCA9PT0gMCkgcmV0dXJuIHRoaXMuc2V0KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApO1xuXHRcdGNvbnN0IGRldEludiA9IDEgLyBkZXQ7XG5cdFx0dGVbMF0gPSB0MTEgKiBkZXRJbnY7XG5cdFx0dGVbMV0gPSAobjI0ICogbjMzICogbjQxIC0gbjIzICogbjM0ICogbjQxIC0gbjI0ICogbjMxICogbjQzICsgbjIxICogbjM0ICogbjQzICsgbjIzICogbjMxICogbjQ0IC0gbjIxICogbjMzICogbjQ0KSAqIGRldEludjtcblx0XHR0ZVsyXSA9IChuMjIgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzIgKiBuNDEgKyBuMjQgKiBuMzEgKiBuNDIgLSBuMjEgKiBuMzQgKiBuNDIgLSBuMjIgKiBuMzEgKiBuNDQgKyBuMjEgKiBuMzIgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzNdID0gKG4yMyAqIG4zMiAqIG40MSAtIG4yMiAqIG4zMyAqIG40MSAtIG4yMyAqIG4zMSAqIG40MiArIG4yMSAqIG4zMyAqIG40MiArIG4yMiAqIG4zMSAqIG40MyAtIG4yMSAqIG4zMiAqIG40MykgKiBkZXRJbnY7XG5cdFx0dGVbNF0gPSB0MTIgKiBkZXRJbnY7XG5cdFx0dGVbNV0gPSAobjEzICogbjM0ICogbjQxIC0gbjE0ICogbjMzICogbjQxICsgbjE0ICogbjMxICogbjQzIC0gbjExICogbjM0ICogbjQzIC0gbjEzICogbjMxICogbjQ0ICsgbjExICogbjMzICogbjQ0KSAqIGRldEludjtcblx0XHR0ZVs2XSA9IChuMTQgKiBuMzIgKiBuNDEgLSBuMTIgKiBuMzQgKiBuNDEgLSBuMTQgKiBuMzEgKiBuNDIgKyBuMTEgKiBuMzQgKiBuNDIgKyBuMTIgKiBuMzEgKiBuNDQgLSBuMTEgKiBuMzIgKiBuNDQpICogZGV0SW52O1xuXHRcdHRlWzddID0gKG4xMiAqIG4zMyAqIG40MSAtIG4xMyAqIG4zMiAqIG40MSArIG4xMyAqIG4zMSAqIG40MiAtIG4xMSAqIG4zMyAqIG40MiAtIG4xMiAqIG4zMSAqIG40MyArIG4xMSAqIG4zMiAqIG40MykgKiBkZXRJbnY7XG5cdFx0dGVbOF0gPSB0MTMgKiBkZXRJbnY7XG5cdFx0dGVbOV0gPSAobjE0ICogbjIzICogbjQxIC0gbjEzICogbjI0ICogbjQxIC0gbjE0ICogbjIxICogbjQzICsgbjExICogbjI0ICogbjQzICsgbjEzICogbjIxICogbjQ0IC0gbjExICogbjIzICogbjQ0KSAqIGRldEludjtcblx0XHR0ZVsxMF0gPSAobjEyICogbjI0ICogbjQxIC0gbjE0ICogbjIyICogbjQxICsgbjE0ICogbjIxICogbjQyIC0gbjExICogbjI0ICogbjQyIC0gbjEyICogbjIxICogbjQ0ICsgbjExICogbjIyICogbjQ0KSAqIGRldEludjtcblx0XHR0ZVsxMV0gPSAobjEzICogbjIyICogbjQxIC0gbjEyICogbjIzICogbjQxIC0gbjEzICogbjIxICogbjQyICsgbjExICogbjIzICogbjQyICsgbjEyICogbjIxICogbjQzIC0gbjExICogbjIyICogbjQzKSAqIGRldEludjtcblx0XHR0ZVsxMl0gPSB0MTQgKiBkZXRJbnY7XG5cdFx0dGVbMTNdID0gKG4xMyAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMyAqIG4zMSArIG4xNCAqIG4yMSAqIG4zMyAtIG4xMSAqIG4yNCAqIG4zMyAtIG4xMyAqIG4yMSAqIG4zNCArIG4xMSAqIG4yMyAqIG4zNCkgKiBkZXRJbnY7XG5cdFx0dGVbMTRdID0gKG4xNCAqIG4yMiAqIG4zMSAtIG4xMiAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMSAqIG4zMiArIG4xMSAqIG4yNCAqIG4zMiArIG4xMiAqIG4yMSAqIG4zNCAtIG4xMSAqIG4yMiAqIG4zNCkgKiBkZXRJbnY7XG5cdFx0dGVbMTVdID0gKG4xMiAqIG4yMyAqIG4zMSAtIG4xMyAqIG4yMiAqIG4zMSArIG4xMyAqIG4yMSAqIG4zMiAtIG4xMSAqIG4yMyAqIG4zMiAtIG4xMiAqIG4yMSAqIG4zMyArIG4xMSAqIG4yMiAqIG4zMykgKiBkZXRJbnY7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzY2FsZSh2KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHggPSB2LngsXG5cdFx0XHRcdFx0eSA9IHYueSxcblx0XHRcdFx0XHR6ID0gdi56O1xuXHRcdHRlWzBdICo9IHg7XG5cdFx0dGVbNF0gKj0geTtcblx0XHR0ZVs4XSAqPSB6O1xuXHRcdHRlWzFdICo9IHg7XG5cdFx0dGVbNV0gKj0geTtcblx0XHR0ZVs5XSAqPSB6O1xuXHRcdHRlWzJdICo9IHg7XG5cdFx0dGVbNl0gKj0geTtcblx0XHR0ZVsxMF0gKj0gejtcblx0XHR0ZVszXSAqPSB4O1xuXHRcdHRlWzddICo9IHk7XG5cdFx0dGVbMTFdICo9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRNYXhTY2FsZU9uQXhpcygpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3Qgc2NhbGVYU3EgPSB0ZVswXSAqIHRlWzBdICsgdGVbMV0gKiB0ZVsxXSArIHRlWzJdICogdGVbMl07XG5cdFx0Y29uc3Qgc2NhbGVZU3EgPSB0ZVs0XSAqIHRlWzRdICsgdGVbNV0gKiB0ZVs1XSArIHRlWzZdICogdGVbNl07XG5cdFx0Y29uc3Qgc2NhbGVaU3EgPSB0ZVs4XSAqIHRlWzhdICsgdGVbOV0gKiB0ZVs5XSArIHRlWzEwXSAqIHRlWzEwXTtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KHNjYWxlWFNxLCBzY2FsZVlTcSwgc2NhbGVaU3EpKTtcblx0fVxuXG5cdG1ha2VUcmFuc2xhdGlvbih4LCB5LCB6KSB7XG5cdFx0dGhpcy5zZXQoMSwgMCwgMCwgeCwgMCwgMSwgMCwgeSwgMCwgMCwgMSwgeiwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlUm90YXRpb25YKHRoZXRhKSB7XG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKHRoZXRhKSxcblx0XHRcdFx0XHRzID0gTWF0aC5zaW4odGhldGEpO1xuXHRcdHRoaXMuc2V0KDEsIDAsIDAsIDAsIDAsIGMsIC1zLCAwLCAwLCBzLCBjLCAwLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1ha2VSb3RhdGlvblkodGhldGEpIHtcblx0XHRjb25zdCBjID0gTWF0aC5jb3ModGhldGEpLFxuXHRcdFx0XHRcdHMgPSBNYXRoLnNpbih0aGV0YSk7XG5cdFx0dGhpcy5zZXQoYywgMCwgcywgMCwgMCwgMSwgMCwgMCwgLXMsIDAsIGMsIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZVJvdGF0aW9uWih0aGV0YSkge1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyh0aGV0YSksXG5cdFx0XHRcdFx0cyA9IE1hdGguc2luKHRoZXRhKTtcblx0XHR0aGlzLnNldChjLCAtcywgMCwgMCwgcywgYywgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlUm90YXRpb25BeGlzKGF4aXMsIGFuZ2xlKSB7XG5cdFx0Ly8gQmFzZWQgb24gaHR0cDovL3d3dy5nYW1lZGV2Lm5ldC9yZWZlcmVuY2UvYXJ0aWNsZXMvYXJ0aWNsZTExOTkuYXNwXG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcblx0XHRjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xuXHRcdGNvbnN0IHQgPSAxIC0gYztcblx0XHRjb25zdCB4ID0gYXhpcy54LFxuXHRcdFx0XHRcdHkgPSBheGlzLnksXG5cdFx0XHRcdFx0eiA9IGF4aXMuejtcblx0XHRjb25zdCB0eCA9IHQgKiB4LFxuXHRcdFx0XHRcdHR5ID0gdCAqIHk7XG5cdFx0dGhpcy5zZXQodHggKiB4ICsgYywgdHggKiB5IC0gcyAqIHosIHR4ICogeiArIHMgKiB5LCAwLCB0eCAqIHkgKyBzICogeiwgdHkgKiB5ICsgYywgdHkgKiB6IC0gcyAqIHgsIDAsIHR4ICogeiAtIHMgKiB5LCB0eSAqIHogKyBzICogeCwgdCAqIHogKiB6ICsgYywgMCwgMCwgMCwgMCwgMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtYWtlU2NhbGUoeCwgeSwgeikge1xuXHRcdHRoaXMuc2V0KHgsIDAsIDAsIDAsIDAsIHksIDAsIDAsIDAsIDAsIHosIDAsIDAsIDAsIDAsIDEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZVNoZWFyKHh5LCB4eiwgeXgsIHl6LCB6eCwgenkpIHtcblx0XHR0aGlzLnNldCgxLCB5eCwgengsIDAsIHh5LCAxLCB6eSwgMCwgeHosIHl6LCAxLCAwLCAwLCAwLCAwLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbXBvc2UocG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlKSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHggPSBxdWF0ZXJuaW9uLl94LFxuXHRcdFx0XHRcdHkgPSBxdWF0ZXJuaW9uLl95LFxuXHRcdFx0XHRcdHogPSBxdWF0ZXJuaW9uLl96LFxuXHRcdFx0XHRcdHcgPSBxdWF0ZXJuaW9uLl93O1xuXHRcdGNvbnN0IHgyID0geCArIHgsXG5cdFx0XHRcdFx0eTIgPSB5ICsgeSxcblx0XHRcdFx0XHR6MiA9IHogKyB6O1xuXHRcdGNvbnN0IHh4ID0geCAqIHgyLFxuXHRcdFx0XHRcdHh5ID0geCAqIHkyLFxuXHRcdFx0XHRcdHh6ID0geCAqIHoyO1xuXHRcdGNvbnN0IHl5ID0geSAqIHkyLFxuXHRcdFx0XHRcdHl6ID0geSAqIHoyLFxuXHRcdFx0XHRcdHp6ID0geiAqIHoyO1xuXHRcdGNvbnN0IHd4ID0gdyAqIHgyLFxuXHRcdFx0XHRcdHd5ID0gdyAqIHkyLFxuXHRcdFx0XHRcdHd6ID0gdyAqIHoyO1xuXHRcdGNvbnN0IHN4ID0gc2NhbGUueCxcblx0XHRcdFx0XHRzeSA9IHNjYWxlLnksXG5cdFx0XHRcdFx0c3ogPSBzY2FsZS56O1xuXHRcdHRlWzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG5cdFx0dGVbMV0gPSAoeHkgKyB3eikgKiBzeDtcblx0XHR0ZVsyXSA9ICh4eiAtIHd5KSAqIHN4O1xuXHRcdHRlWzNdID0gMDtcblx0XHR0ZVs0XSA9ICh4eSAtIHd6KSAqIHN5O1xuXHRcdHRlWzVdID0gKDEgLSAoeHggKyB6eikpICogc3k7XG5cdFx0dGVbNl0gPSAoeXogKyB3eCkgKiBzeTtcblx0XHR0ZVs3XSA9IDA7XG5cdFx0dGVbOF0gPSAoeHogKyB3eSkgKiBzejtcblx0XHR0ZVs5XSA9ICh5eiAtIHd4KSAqIHN6O1xuXHRcdHRlWzEwXSA9ICgxIC0gKHh4ICsgeXkpKSAqIHN6O1xuXHRcdHRlWzExXSA9IDA7XG5cdFx0dGVbMTJdID0gcG9zaXRpb24ueDtcblx0XHR0ZVsxM10gPSBwb3NpdGlvbi55O1xuXHRcdHRlWzE0XSA9IHBvc2l0aW9uLno7XG5cdFx0dGVbMTVdID0gMTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlY29tcG9zZShwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUpIHtcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRsZXQgc3ggPSBfdjEkNS5zZXQodGVbMF0sIHRlWzFdLCB0ZVsyXSkubGVuZ3RoKCk7XG5cblx0XHRjb25zdCBzeSA9IF92MSQ1LnNldCh0ZVs0XSwgdGVbNV0sIHRlWzZdKS5sZW5ndGgoKTtcblxuXHRcdGNvbnN0IHN6ID0gX3YxJDUuc2V0KHRlWzhdLCB0ZVs5XSwgdGVbMTBdKS5sZW5ndGgoKTsgLy8gaWYgZGV0ZXJtaW5lIGlzIG5lZ2F0aXZlLCB3ZSBuZWVkIHRvIGludmVydCBvbmUgc2NhbGVcblxuXG5cdFx0Y29uc3QgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xuXHRcdGlmIChkZXQgPCAwKSBzeCA9IC1zeDtcblx0XHRwb3NpdGlvbi54ID0gdGVbMTJdO1xuXHRcdHBvc2l0aW9uLnkgPSB0ZVsxM107XG5cdFx0cG9zaXRpb24ueiA9IHRlWzE0XTsgLy8gc2NhbGUgdGhlIHJvdGF0aW9uIHBhcnRcblxuXHRcdF9tMSQyLmNvcHkodGhpcyk7XG5cblx0XHRjb25zdCBpbnZTWCA9IDEgLyBzeDtcblx0XHRjb25zdCBpbnZTWSA9IDEgLyBzeTtcblx0XHRjb25zdCBpbnZTWiA9IDEgLyBzejtcblx0XHRfbTEkMi5lbGVtZW50c1swXSAqPSBpbnZTWDtcblx0XHRfbTEkMi5lbGVtZW50c1sxXSAqPSBpbnZTWDtcblx0XHRfbTEkMi5lbGVtZW50c1syXSAqPSBpbnZTWDtcblx0XHRfbTEkMi5lbGVtZW50c1s0XSAqPSBpbnZTWTtcblx0XHRfbTEkMi5lbGVtZW50c1s1XSAqPSBpbnZTWTtcblx0XHRfbTEkMi5lbGVtZW50c1s2XSAqPSBpbnZTWTtcblx0XHRfbTEkMi5lbGVtZW50c1s4XSAqPSBpbnZTWjtcblx0XHRfbTEkMi5lbGVtZW50c1s5XSAqPSBpbnZTWjtcblx0XHRfbTEkMi5lbGVtZW50c1sxMF0gKj0gaW52U1o7XG5cdFx0cXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoX20xJDIpO1xuXHRcdHNjYWxlLnggPSBzeDtcblx0XHRzY2FsZS55ID0gc3k7XG5cdFx0c2NhbGUueiA9IHN6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZVBlcnNwZWN0aXZlKGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyKSB7XG5cdFx0aWYgKGZhciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4nKTtcblx0XHR9XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgeCA9IDIgKiBuZWFyIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgeSA9IDIgKiBuZWFyIC8gKHRvcCAtIGJvdHRvbSk7XG5cdFx0Y29uc3QgYSA9IChyaWdodCArIGxlZnQpIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgYiA9ICh0b3AgKyBib3R0b20pIC8gKHRvcCAtIGJvdHRvbSk7XG5cdFx0Y29uc3QgYyA9IC0oZmFyICsgbmVhcikgLyAoZmFyIC0gbmVhcik7XG5cdFx0Y29uc3QgZCA9IC0yICogZmFyICogbmVhciAvIChmYXIgLSBuZWFyKTtcblx0XHR0ZVswXSA9IHg7XG5cdFx0dGVbNF0gPSAwO1xuXHRcdHRlWzhdID0gYTtcblx0XHR0ZVsxMl0gPSAwO1xuXHRcdHRlWzFdID0gMDtcblx0XHR0ZVs1XSA9IHk7XG5cdFx0dGVbOV0gPSBiO1xuXHRcdHRlWzEzXSA9IDA7XG5cdFx0dGVbMl0gPSAwO1xuXHRcdHRlWzZdID0gMDtcblx0XHR0ZVsxMF0gPSBjO1xuXHRcdHRlWzE0XSA9IGQ7XG5cdFx0dGVbM10gPSAwO1xuXHRcdHRlWzddID0gMDtcblx0XHR0ZVsxMV0gPSAtMTtcblx0XHR0ZVsxNV0gPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZU9ydGhvZ3JhcGhpYyhsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhcikge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB3ID0gMS4wIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgaCA9IDEuMCAvICh0b3AgLSBib3R0b20pO1xuXHRcdGNvbnN0IHAgPSAxLjAgLyAoZmFyIC0gbmVhcik7XG5cdFx0Y29uc3QgeCA9IChyaWdodCArIGxlZnQpICogdztcblx0XHRjb25zdCB5ID0gKHRvcCArIGJvdHRvbSkgKiBoO1xuXHRcdGNvbnN0IHogPSAoZmFyICsgbmVhcikgKiBwO1xuXHRcdHRlWzBdID0gMiAqIHc7XG5cdFx0dGVbNF0gPSAwO1xuXHRcdHRlWzhdID0gMDtcblx0XHR0ZVsxMl0gPSAteDtcblx0XHR0ZVsxXSA9IDA7XG5cdFx0dGVbNV0gPSAyICogaDtcblx0XHR0ZVs5XSA9IDA7XG5cdFx0dGVbMTNdID0gLXk7XG5cdFx0dGVbMl0gPSAwO1xuXHRcdHRlWzZdID0gMDtcblx0XHR0ZVsxMF0gPSAtMiAqIHA7XG5cdFx0dGVbMTRdID0gLXo7XG5cdFx0dGVbM10gPSAwO1xuXHRcdHRlWzddID0gMDtcblx0XHR0ZVsxMV0gPSAwO1xuXHRcdHRlWzE1XSA9IDE7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMobWF0cml4KSB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdFx0XHRpZiAodGVbaV0gIT09IG1lW2ldKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmcm9tQXJyYXkoYXJyYXksIG9mZnNldCA9IDApIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0XHRcdHRoaXMuZWxlbWVudHNbaV0gPSBhcnJheVtpICsgb2Zmc2V0XTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRhcnJheVtvZmZzZXRdID0gdGVbMF07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZVsxXTtcblx0XHRhcnJheVtvZmZzZXQgKyAyXSA9IHRlWzJdO1xuXHRcdGFycmF5W29mZnNldCArIDNdID0gdGVbM107XG5cdFx0YXJyYXlbb2Zmc2V0ICsgNF0gPSB0ZVs0XTtcblx0XHRhcnJheVtvZmZzZXQgKyA1XSA9IHRlWzVdO1xuXHRcdGFycmF5W29mZnNldCArIDZdID0gdGVbNl07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgN10gPSB0ZVs3XTtcblx0XHRhcnJheVtvZmZzZXQgKyA4XSA9IHRlWzhdO1xuXHRcdGFycmF5W29mZnNldCArIDldID0gdGVbOV07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMTBdID0gdGVbMTBdO1xuXHRcdGFycmF5W29mZnNldCArIDExXSA9IHRlWzExXTtcblx0XHRhcnJheVtvZmZzZXQgKyAxMl0gPSB0ZVsxMl07XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMTNdID0gdGVbMTNdO1xuXHRcdGFycmF5W29mZnNldCArIDE0XSA9IHRlWzE0XTtcblx0XHRhcnJheVtvZmZzZXQgKyAxNV0gPSB0ZVsxNV07XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cbn1cblxuTWF0cml4NC5wcm90b3R5cGUuaXNNYXRyaXg0ID0gdHJ1ZTtcblxuY29uc3QgX3YxJDUgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX20xJDIgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3plcm8gPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG5cbmNvbnN0IF9vbmUgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMSwgMSwgMSk7XG5cbmNvbnN0IF94ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF95ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF96ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9tYXRyaXgkMSA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfcXVhdGVybmlvbiQzID0gLypAX19QVVJFX18qL25ldyBRdWF0ZXJuaW9uKCk7XG5cbmNsYXNzIEV1bGVyIHtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCwgb3JkZXIgPSBFdWxlci5EZWZhdWx0T3JkZXIpIHtcblx0XHR0aGlzLl94ID0geDtcblx0XHR0aGlzLl95ID0geTtcblx0XHR0aGlzLl96ID0gejtcblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHR9XG5cblx0Z2V0IHgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3g7XG5cdH1cblxuXHRzZXQgeCh2YWx1ZSkge1xuXHRcdHRoaXMuX3ggPSB2YWx1ZTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblx0fVxuXG5cdGdldCB5KCkge1xuXHRcdHJldHVybiB0aGlzLl95O1xuXHR9XG5cblx0c2V0IHkodmFsdWUpIHtcblx0XHR0aGlzLl95ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRnZXQgeigpIHtcblx0XHRyZXR1cm4gdGhpcy5fejtcblx0fVxuXG5cdHNldCB6KHZhbHVlKSB7XG5cdFx0dGhpcy5feiA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXHR9XG5cblx0Z2V0IG9yZGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vcmRlcjtcblx0fVxuXG5cdHNldCBvcmRlcih2YWx1ZSkge1xuXHRcdHRoaXMuX29yZGVyID0gdmFsdWU7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdH1cblxuXHRzZXQoeCwgeSwgeiwgb3JkZXIgPSB0aGlzLl9vcmRlcikge1xuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX29yZGVyID0gb3JkZXI7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl9vcmRlcik7XG5cdH1cblxuXHRjb3B5KGV1bGVyKSB7XG5cdFx0dGhpcy5feCA9IGV1bGVyLl94O1xuXHRcdHRoaXMuX3kgPSBldWxlci5feTtcblx0XHR0aGlzLl96ID0gZXVsZXIuX3o7XG5cdFx0dGhpcy5fb3JkZXIgPSBldWxlci5fb3JkZXI7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Sb3RhdGlvbk1hdHJpeChtLCBvcmRlciA9IHRoaXMuX29yZGVyLCB1cGRhdGUgPSB0cnVlKSB7XG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblx0XHRjb25zdCB0ZSA9IG0uZWxlbWVudHM7XG5cdFx0Y29uc3QgbTExID0gdGVbMF0sXG5cdFx0XHRcdFx0bTEyID0gdGVbNF0sXG5cdFx0XHRcdFx0bTEzID0gdGVbOF07XG5cdFx0Y29uc3QgbTIxID0gdGVbMV0sXG5cdFx0XHRcdFx0bTIyID0gdGVbNV0sXG5cdFx0XHRcdFx0bTIzID0gdGVbOV07XG5cdFx0Y29uc3QgbTMxID0gdGVbMl0sXG5cdFx0XHRcdFx0bTMyID0gdGVbNl0sXG5cdFx0XHRcdFx0bTMzID0gdGVbMTBdO1xuXG5cdFx0c3dpdGNoIChvcmRlcikge1xuXHRcdFx0Y2FzZSAnWFlaJzpcblx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKG0xMykgPCAwLjk5OTk5OTkpIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMigtbTIzLCBtMzMpO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKC1tMTIsIG0xMSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIobTMyLCBtMjIpO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1lYWic6XG5cdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcblxuXHRcdFx0XHRpZiAoTWF0aC5hYnMobTIzKSA8IDAuOTk5OTk5OSkge1xuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKG0xMywgbTMzKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMihtMjEsIG0yMik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoLW0zMSwgbTExKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWFknOlxuXHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hc2luKGNsYW1wKG0zMiwgLTEsIDEpKTtcblxuXHRcdFx0XHRpZiAoTWF0aC5hYnMobTMyKSA8IDAuOTk5OTk5OSkge1xuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKC1tMzEsIG0zMyk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoLW0xMiwgbTIyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl95ID0gMDtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMihtMjEsIG0xMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWllYJzpcblx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhtMzEpIDwgMC45OTk5OTk5KSB7XG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIobTMyLCBtMzMpO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKG0yMSwgbTExKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMigtbTEyLCBtMjIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1laWCc6XG5cdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhtMjEpIDwgMC45OTk5OTk5KSB7XG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoLW0yMywgbTIyKTtcblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMigtbTMxLCBtMTEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3ggPSAwO1xuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKG0xMywgbTMzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdYWlknOlxuXHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hc2luKC1jbGFtcChtMTIsIC0xLCAxKSk7XG5cblx0XHRcdFx0aWYgKE1hdGguYWJzKG0xMikgPCAwLjk5OTk5OTkpIHtcblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMihtMzIsIG0yMik7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIobTEzLCBtMTEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKC1tMjMsIG0zMyk7XG5cdFx0XHRcdFx0dGhpcy5feSA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICcgKyBvcmRlcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0XHRpZiAodXBkYXRlID09PSB0cnVlKSB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tUXVhdGVybmlvbihxLCBvcmRlciwgdXBkYXRlKSB7XG5cdFx0X21hdHJpeCQxLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHEpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KF9tYXRyaXgkMSwgb3JkZXIsIHVwZGF0ZSk7XG5cdH1cblxuXHRzZXRGcm9tVmVjdG9yMyh2LCBvcmRlciA9IHRoaXMuX29yZGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0KHYueCwgdi55LCB2LnosIG9yZGVyKTtcblx0fVxuXG5cdHJlb3JkZXIobmV3T3JkZXIpIHtcblx0XHQvLyBXQVJOSU5HOiB0aGlzIGRpc2NhcmRzIHJldm9sdXRpb24gaW5mb3JtYXRpb24gLWJob3VzdG9uXG5cdFx0X3F1YXRlcm5pb24kMy5zZXRGcm9tRXVsZXIodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihfcXVhdGVybmlvbiQzLCBuZXdPcmRlcik7XG5cdH1cblxuXHRlcXVhbHMoZXVsZXIpIHtcblx0XHRyZXR1cm4gZXVsZXIuX3ggPT09IHRoaXMuX3ggJiYgZXVsZXIuX3kgPT09IHRoaXMuX3kgJiYgZXVsZXIuX3ogPT09IHRoaXMuX3ogJiYgZXVsZXIuX29yZGVyID09PSB0aGlzLl9vcmRlcjtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSkge1xuXHRcdHRoaXMuX3ggPSBhcnJheVswXTtcblx0XHR0aGlzLl95ID0gYXJyYXlbMV07XG5cdFx0dGhpcy5feiA9IGFycmF5WzJdO1xuXHRcdGlmIChhcnJheVszXSAhPT0gdW5kZWZpbmVkKSB0aGlzLl9vcmRlciA9IGFycmF5WzNdO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0FycmF5KGFycmF5ID0gW10sIG9mZnNldCA9IDApIHtcblx0XHRhcnJheVtvZmZzZXRdID0gdGhpcy5feDtcblx0XHRhcnJheVtvZmZzZXQgKyAxXSA9IHRoaXMuX3k7XG5cdFx0YXJyYXlbb2Zmc2V0ICsgMl0gPSB0aGlzLl96O1xuXHRcdGFycmF5W29mZnNldCArIDNdID0gdGhpcy5fb3JkZXI7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0dG9WZWN0b3IzKG9wdGlvbmFsUmVzdWx0KSB7XG5cdFx0aWYgKG9wdGlvbmFsUmVzdWx0KSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9uYWxSZXN1bHQuc2V0KHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3opO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjModGhpcy5feCwgdGhpcy5feSwgdGhpcy5feik7XG5cdFx0fVxuXHR9XG5cblx0X29uQ2hhbmdlKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0X29uQ2hhbmdlQ2FsbGJhY2soKSB7fVxuXG59XG5cbkV1bGVyLnByb3RvdHlwZS5pc0V1bGVyID0gdHJ1ZTtcbkV1bGVyLkRlZmF1bHRPcmRlciA9ICdYWVonO1xuRXVsZXIuUm90YXRpb25PcmRlcnMgPSBbJ1hZWicsICdZWlgnLCAnWlhZJywgJ1haWScsICdZWFonLCAnWllYJ107XG5cbmNsYXNzIExheWVycyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubWFzayA9IDEgfCAwO1xuXHR9XG5cblx0c2V0KGNoYW5uZWwpIHtcblx0XHR0aGlzLm1hc2sgPSAoMSA8PCBjaGFubmVsIHwgMCkgPj4+IDA7XG5cdH1cblxuXHRlbmFibGUoY2hhbm5lbCkge1xuXHRcdHRoaXMubWFzayB8PSAxIDw8IGNoYW5uZWwgfCAwO1xuXHR9XG5cblx0ZW5hYmxlQWxsKCkge1xuXHRcdHRoaXMubWFzayA9IDB4ZmZmZmZmZmYgfCAwO1xuXHR9XG5cblx0dG9nZ2xlKGNoYW5uZWwpIHtcblx0XHR0aGlzLm1hc2sgXj0gMSA8PCBjaGFubmVsIHwgMDtcblx0fVxuXG5cdGRpc2FibGUoY2hhbm5lbCkge1xuXHRcdHRoaXMubWFzayAmPSB+KDEgPDwgY2hhbm5lbCB8IDApO1xuXHR9XG5cblx0ZGlzYWJsZUFsbCgpIHtcblx0XHR0aGlzLm1hc2sgPSAwO1xuXHR9XG5cblx0dGVzdChsYXllcnMpIHtcblx0XHRyZXR1cm4gKHRoaXMubWFzayAmIGxheWVycy5tYXNrKSAhPT0gMDtcblx0fVxuXG5cdGlzRW5hYmxlZChjaGFubmVsKSB7XG5cdFx0cmV0dXJuICh0aGlzLm1hc2sgJiAoMSA8PCBjaGFubmVsIHwgMCkpICE9PSAwO1xuXHR9XG5cbn1cblxubGV0IF9vYmplY3QzRElkID0gMDtcblxuY29uc3QgX3YxJDQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ExID0gLypAX19QVVJFX18qL25ldyBRdWF0ZXJuaW9uKCk7XG5cbmNvbnN0IF9tMSQxID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF90YXJnZXQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3Bvc2l0aW9uJDMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3NjYWxlJDIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3F1YXRlcm5pb24kMiA9IC8qQF9fUFVSRV9fKi9uZXcgUXVhdGVybmlvbigpO1xuXG5jb25zdCBfeEF4aXMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMSwgMCwgMCk7XG5cbmNvbnN0IF95QXhpcyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygwLCAxLCAwKTtcblxuY29uc3QgX3pBeGlzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKDAsIDAsIDEpO1xuXG5jb25zdCBfYWRkZWRFdmVudCA9IHtcblx0dHlwZTogJ2FkZGVkJ1xufTtcbmNvbnN0IF9yZW1vdmVkRXZlbnQgPSB7XG5cdHR5cGU6ICdyZW1vdmVkJ1xufTtcblxuY2xhc3MgT2JqZWN0M0QgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaWQnLCB7XG5cdFx0XHR2YWx1ZTogX29iamVjdDNESWQrK1xuXHRcdH0pO1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdHRoaXMudHlwZSA9ICdPYmplY3QzRCc7XG5cdFx0dGhpcy5wYXJlbnQgPSBudWxsO1xuXHRcdHRoaXMuY2hpbGRyZW4gPSBbXTtcblx0XHR0aGlzLnVwID0gT2JqZWN0M0QuRGVmYXVsdFVwLmNsb25lKCk7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHJvdGF0aW9uID0gbmV3IEV1bGVyKCk7XG5cdFx0Y29uc3QgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cdFx0Y29uc3Qgc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcblxuXHRcdGZ1bmN0aW9uIG9uUm90YXRpb25DaGFuZ2UoKSB7XG5cdFx0XHRxdWF0ZXJuaW9uLnNldEZyb21FdWxlcihyb3RhdGlvbiwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uUXVhdGVybmlvbkNoYW5nZSgpIHtcblx0XHRcdHJvdGF0aW9uLnNldEZyb21RdWF0ZXJuaW9uKHF1YXRlcm5pb24sIHVuZGVmaW5lZCwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJvdGF0aW9uLl9vbkNoYW5nZShvblJvdGF0aW9uQ2hhbmdlKTtcblxuXHRcdHF1YXRlcm5pb24uX29uQ2hhbmdlKG9uUXVhdGVybmlvbkNoYW5nZSk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBwb3NpdGlvblxuXHRcdFx0fSxcblx0XHRcdHJvdGF0aW9uOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHJvdGF0aW9uXG5cdFx0XHR9LFxuXHRcdFx0cXVhdGVybmlvbjoge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBxdWF0ZXJuaW9uXG5cdFx0XHR9LFxuXHRcdFx0c2NhbGU6IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogc2NhbGVcblx0XHRcdH0sXG5cdFx0XHRtb2RlbFZpZXdNYXRyaXg6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBNYXRyaXg0KClcblx0XHRcdH0sXG5cdFx0XHRub3JtYWxNYXRyaXg6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBNYXRyaXgzKClcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gT2JqZWN0M0QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5sYXllcnMgPSBuZXcgTGF5ZXJzKCk7XG5cdFx0dGhpcy52aXNpYmxlID0gdHJ1ZTtcblx0XHR0aGlzLmNhc3RTaGFkb3cgPSBmYWxzZTtcblx0XHR0aGlzLnJlY2VpdmVTaGFkb3cgPSBmYWxzZTtcblx0XHR0aGlzLmZydXN0dW1DdWxsZWQgPSB0cnVlO1xuXHRcdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXHRcdHRoaXMuYW5pbWF0aW9ucyA9IFtdO1xuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyKCkge31cblxuXHRvbkFmdGVyUmVuZGVyKCkge31cblxuXHRhcHBseU1hdHJpeDQobWF0cml4KSB7XG5cdFx0aWYgKHRoaXMubWF0cml4QXV0b1VwZGF0ZSkgdGhpcy51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLm1hdHJpeC5wcmVtdWx0aXBseShtYXRyaXgpO1xuXHRcdHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUpO1xuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKHEpIHtcblx0XHR0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUpIHtcblx0XHQvLyBhc3N1bWVzIGF4aXMgaXMgbm9ybWFsaXplZFxuXHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKTtcblx0fVxuXG5cdHNldFJvdGF0aW9uRnJvbUV1bGVyKGV1bGVyKSB7XG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihldWxlciwgdHJ1ZSk7XG5cdH1cblxuXHRzZXRSb3RhdGlvbkZyb21NYXRyaXgobSkge1xuXHRcdC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtKTtcblx0fVxuXG5cdHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24ocSkge1xuXHRcdC8vIGFzc3VtZXMgcSBpcyBub3JtYWxpemVkXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLmNvcHkocSk7XG5cdH1cblxuXHRyb3RhdGVPbkF4aXMoYXhpcywgYW5nbGUpIHtcblx0XHQvLyByb3RhdGUgb2JqZWN0IG9uIGF4aXMgaW4gb2JqZWN0IHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHRfcTEuc2V0RnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSk7XG5cblx0XHR0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoX3ExKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdGF0ZU9uV29ybGRBeGlzKGF4aXMsIGFuZ2xlKSB7XG5cdFx0Ly8gcm90YXRlIG9iamVjdCBvbiBheGlzIGluIHdvcmxkIHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHQvLyBtZXRob2QgYXNzdW1lcyBubyByb3RhdGVkIHBhcmVudFxuXHRcdF9xMS5zZXRGcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKTtcblxuXHRcdHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShfcTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlWChhbmdsZSkge1xuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeEF4aXMsIGFuZ2xlKTtcblx0fVxuXG5cdHJvdGF0ZVkoYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3lBeGlzLCBhbmdsZSk7XG5cdH1cblxuXHRyb3RhdGVaKGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF96QXhpcywgYW5nbGUpO1xuXHR9XG5cblx0dHJhbnNsYXRlT25BeGlzKGF4aXMsIGRpc3RhbmNlKSB7XG5cdFx0Ly8gdHJhbnNsYXRlIG9iamVjdCBieSBkaXN0YW5jZSBhbG9uZyBheGlzIGluIG9iamVjdCBzcGFjZVxuXHRcdC8vIGF4aXMgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cdFx0X3YxJDQuY29weShheGlzKS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKTtcblxuXHRcdHRoaXMucG9zaXRpb24uYWRkKF92MSQ0Lm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0cmFuc2xhdGVYKGRpc3RhbmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKF94QXhpcywgZGlzdGFuY2UpO1xuXHR9XG5cblx0dHJhbnNsYXRlWShkaXN0YW5jZSkge1xuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhfeUF4aXMsIGRpc3RhbmNlKTtcblx0fVxuXG5cdHRyYW5zbGF0ZVooZGlzdGFuY2UpIHtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoX3pBeGlzLCBkaXN0YW5jZSk7XG5cdH1cblxuXHRsb2NhbFRvV29ybGQodmVjdG9yKSB7XG5cdFx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7XG5cdH1cblxuXHR3b3JsZFRvTG9jYWwodmVjdG9yKSB7XG5cdFx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoX20xJDEuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSk7XG5cdH1cblxuXHRsb29rQXQoeCwgeSwgeikge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgb2JqZWN0cyBoYXZpbmcgbm9uLXVuaWZvcm1seS1zY2FsZWQgcGFyZW50KHMpXG5cdFx0aWYgKHguaXNWZWN0b3IzKSB7XG5cdFx0XHRfdGFyZ2V0LmNvcHkoeCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF90YXJnZXQuc2V0KHgsIHksIHopO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXG5cdFx0X3Bvc2l0aW9uJDMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO1xuXG5cdFx0aWYgKHRoaXMuaXNDYW1lcmEgfHwgdGhpcy5pc0xpZ2h0KSB7XG5cdFx0XHRfbTEkMS5sb29rQXQoX3Bvc2l0aW9uJDMsIF90YXJnZXQsIHRoaXMudXApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfbTEkMS5sb29rQXQoX3RhcmdldCwgX3Bvc2l0aW9uJDMsIHRoaXMudXApO1xuXHRcdH1cblxuXHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoX20xJDEpO1xuXG5cdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0X20xJDEuZXh0cmFjdFJvdGF0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cblx0XHRcdF9xMS5zZXRGcm9tUm90YXRpb25NYXRyaXgoX20xJDEpO1xuXG5cdFx0XHR0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoX3ExLmludmVydCgpKTtcblx0XHR9XG5cdH1cblxuXHRhZGQob2JqZWN0KSB7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR0aGlzLmFkZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAob2JqZWN0ID09PSB0aGlzKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW5cXCd0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLicsIG9iamVjdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAob2JqZWN0ICYmIG9iamVjdC5pc09iamVjdDNEKSB7XG5cdFx0XHRpZiAob2JqZWN0LnBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRvYmplY3QucGFyZW50LnJlbW92ZShvYmplY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3QucGFyZW50ID0gdGhpcztcblx0XHRcdHRoaXMuY2hpbGRyZW4ucHVzaChvYmplY3QpO1xuXHRcdFx0b2JqZWN0LmRpc3BhdGNoRXZlbnQoX2FkZGVkRXZlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuJywgb2JqZWN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlbW92ZShvYmplY3QpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKG9iamVjdCk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRvYmplY3QucGFyZW50ID0gbnVsbDtcblx0XHRcdHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdG9iamVjdC5kaXNwYXRjaEV2ZW50KF9yZW1vdmVkRXZlbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVtb3ZlRnJvbVBhcmVudCgpIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHBhcmVudC5yZW1vdmUodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG9iamVjdCA9IHRoaXMuY2hpbGRyZW5baV07XG5cdFx0XHRvYmplY3QucGFyZW50ID0gbnVsbDtcblx0XHRcdG9iamVjdC5kaXNwYXRjaEV2ZW50KF9yZW1vdmVkRXZlbnQpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hpbGRyZW4ubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGF0dGFjaChvYmplY3QpIHtcblx0XHQvLyBhZGRzIG9iamVjdCBhcyBhIGNoaWxkIG9mIHRoaXMsIHdoaWxlIG1haW50YWluaW5nIHRoZSBvYmplY3QncyB3b3JsZCB0cmFuc2Zvcm1cblx0XHQvLyBOb3RlOiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHNjZW5lIGdyYXBocyBoYXZpbmcgbm9uLXVuaWZvcm1seS1zY2FsZWQgbm9kZXMocylcblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblxuXHRcdF9tMSQxLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRpZiAob2JqZWN0LnBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0b2JqZWN0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cblx0XHRcdF9tMSQxLm11bHRpcGx5KG9iamVjdC5wYXJlbnQubWF0cml4V29ybGQpO1xuXHRcdH1cblxuXHRcdG9iamVjdC5hcHBseU1hdHJpeDQoX20xJDEpO1xuXHRcdHRoaXMuYWRkKG9iamVjdCk7XG5cdFx0b2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KGZhbHNlLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldE9iamVjdEJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCdpZCcsIGlkKTtcblx0fVxuXG5cdGdldE9iamVjdEJ5TmFtZShuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgnbmFtZScsIG5hbWUpO1xuXHR9XG5cblx0Z2V0T2JqZWN0QnlQcm9wZXJ0eShuYW1lLCB2YWx1ZSkge1xuXHRcdGlmICh0aGlzW25hbWVdID09PSB2YWx1ZSkgcmV0dXJuIHRoaXM7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cdFx0XHRjb25zdCBvYmplY3QgPSBjaGlsZC5nZXRPYmplY3RCeVByb3BlcnR5KG5hbWUsIHZhbHVlKTtcblxuXHRcdFx0aWYgKG9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBvYmplY3Q7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldFdvcmxkUG9zaXRpb24odGFyZ2V0KSB7XG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0cmV0dXJuIHRhcmdldC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7XG5cdH1cblxuXHRnZXRXb3JsZFF1YXRlcm5pb24odGFyZ2V0KSB7XG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoX3Bvc2l0aW9uJDMsIHRhcmdldCwgX3NjYWxlJDIpO1xuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRnZXRXb3JsZFNjYWxlKHRhcmdldCkge1xuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKF9wb3NpdGlvbiQzLCBfcXVhdGVybmlvbiQyLCB0YXJnZXQpO1xuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRnZXRXb3JsZERpcmVjdGlvbih0YXJnZXQpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblx0XHRjb25zdCBlID0gdGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztcblx0XHRyZXR1cm4gdGFyZ2V0LnNldChlWzhdLCBlWzldLCBlWzEwXSkubm9ybWFsaXplKCk7XG5cdH1cblxuXHRyYXljYXN0KCkge31cblxuXHR0cmF2ZXJzZShjYWxsYmFjaykge1xuXHRcdGNhbGxiYWNrKHRoaXMpO1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjaGlsZHJlbltpXS50cmF2ZXJzZShjYWxsYmFjayk7XG5cdFx0fVxuXHR9XG5cblx0dHJhdmVyc2VWaXNpYmxlKGNhbGxiYWNrKSB7XG5cdFx0aWYgKHRoaXMudmlzaWJsZSA9PT0gZmFsc2UpIHJldHVybjtcblx0XHRjYWxsYmFjayh0aGlzKTtcblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y2hpbGRyZW5baV0udHJhdmVyc2VWaXNpYmxlKGNhbGxiYWNrKTtcblx0XHR9XG5cdH1cblxuXHR0cmF2ZXJzZUFuY2VzdG9ycyhjYWxsYmFjaykge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0Y2FsbGJhY2socGFyZW50KTtcblx0XHRcdHBhcmVudC50cmF2ZXJzZUFuY2VzdG9ycyhjYWxsYmFjayk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlTWF0cml4KCkge1xuXHRcdHRoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0ZXJuaW9uLCB0aGlzLnNjYWxlKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoZm9yY2UpIHtcblx0XHRpZiAodGhpcy5tYXRyaXhBdXRvVXBkYXRlKSB0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0aWYgKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSB8fCBmb3JjZSkge1xuXHRcdFx0aWYgKHRoaXMucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsIHRoaXMubWF0cml4KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRmb3JjZSA9IHRydWU7XG5cdFx0fSAvLyB1cGRhdGUgY2hpbGRyZW5cblxuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNoaWxkcmVuW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVXb3JsZE1hdHJpeCh1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbikge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHVwZGF0ZVBhcmVudHMgPT09IHRydWUgJiYgcGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRwYXJlbnQudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1hdHJpeEF1dG9VcGRhdGUpIHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHRpZiAodGhpcy5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCwgdGhpcy5tYXRyaXgpO1xuXHRcdH0gLy8gdXBkYXRlIGNoaWxkcmVuXG5cblxuXHRcdGlmICh1cGRhdGVDaGlsZHJlbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjaGlsZHJlbltpXS51cGRhdGVXb3JsZE1hdHJpeChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHQvLyBtZXRhIGlzIGEgc3RyaW5nIHdoZW4gY2FsbGVkIGZyb20gSlNPTi5zdHJpbmdpZnlcblx0XHRjb25zdCBpc1Jvb3RPYmplY3QgPSBtZXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnO1xuXHRcdGNvbnN0IG91dHB1dCA9IHt9OyAvLyBtZXRhIGlzIGEgaGFzaCB1c2VkIHRvIGNvbGxlY3QgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLlxuXHRcdC8vIG5vdCBwcm92aWRpbmcgaXQgaW1wbGllcyB0aGF0IHRoaXMgaXMgdGhlIHJvb3Qgb2JqZWN0XG5cdFx0Ly8gYmVpbmcgc2VyaWFsaXplZC5cblxuXHRcdGlmIChpc1Jvb3RPYmplY3QpIHtcblx0XHRcdC8vIGluaXRpYWxpemUgbWV0YSBvYmpcblx0XHRcdG1ldGEgPSB7XG5cdFx0XHRcdGdlb21ldHJpZXM6IHt9LFxuXHRcdFx0XHRtYXRlcmlhbHM6IHt9LFxuXHRcdFx0XHR0ZXh0dXJlczoge30sXG5cdFx0XHRcdGltYWdlczoge30sXG5cdFx0XHRcdHNoYXBlczoge30sXG5cdFx0XHRcdHNrZWxldG9uczoge30sXG5cdFx0XHRcdGFuaW1hdGlvbnM6IHt9XG5cdFx0XHR9O1xuXHRcdFx0b3V0cHV0Lm1ldGFkYXRhID0ge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdPYmplY3QnLFxuXHRcdFx0XHRnZW5lcmF0b3I6ICdPYmplY3QzRC50b0pTT04nXG5cdFx0XHR9O1xuXHRcdH0gLy8gc3RhbmRhcmQgT2JqZWN0M0Qgc2VyaWFsaXphdGlvblxuXG5cblx0XHRjb25zdCBvYmplY3QgPSB7fTtcblx0XHRvYmplY3QudXVpZCA9IHRoaXMudXVpZDtcblx0XHRvYmplY3QudHlwZSA9IHRoaXMudHlwZTtcblx0XHRpZiAodGhpcy5uYW1lICE9PSAnJykgb2JqZWN0Lm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0aWYgKHRoaXMuY2FzdFNoYWRvdyA9PT0gdHJ1ZSkgb2JqZWN0LmNhc3RTaGFkb3cgPSB0cnVlO1xuXHRcdGlmICh0aGlzLnJlY2VpdmVTaGFkb3cgPT09IHRydWUpIG9iamVjdC5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcblx0XHRpZiAodGhpcy52aXNpYmxlID09PSBmYWxzZSkgb2JqZWN0LnZpc2libGUgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5mcnVzdHVtQ3VsbGVkID09PSBmYWxzZSkgb2JqZWN0LmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5yZW5kZXJPcmRlciAhPT0gMCkgb2JqZWN0LnJlbmRlck9yZGVyID0gdGhpcy5yZW5kZXJPcmRlcjtcblx0XHRpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkgIT09ICd7fScpIG9iamVjdC51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7XG5cdFx0b2JqZWN0LmxheWVycyA9IHRoaXMubGF5ZXJzLm1hc2s7XG5cdFx0b2JqZWN0Lm1hdHJpeCA9IHRoaXMubWF0cml4LnRvQXJyYXkoKTtcblx0XHRpZiAodGhpcy5tYXRyaXhBdXRvVXBkYXRlID09PSBmYWxzZSkgb2JqZWN0Lm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsgLy8gb2JqZWN0IHNwZWNpZmljIHByb3BlcnRpZXNcblxuXHRcdGlmICh0aGlzLmlzSW5zdGFuY2VkTWVzaCkge1xuXHRcdFx0b2JqZWN0LnR5cGUgPSAnSW5zdGFuY2VkTWVzaCc7XG5cdFx0XHRvYmplY3QuY291bnQgPSB0aGlzLmNvdW50O1xuXHRcdFx0b2JqZWN0Lmluc3RhbmNlTWF0cml4ID0gdGhpcy5pbnN0YW5jZU1hdHJpeC50b0pTT04oKTtcblx0XHRcdGlmICh0aGlzLmluc3RhbmNlQ29sb3IgIT09IG51bGwpIG9iamVjdC5pbnN0YW5jZUNvbG9yID0gdGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpO1xuXHRcdH0gLy9cblxuXG5cdFx0ZnVuY3Rpb24gc2VyaWFsaXplKGxpYnJhcnksIGVsZW1lbnQpIHtcblx0XHRcdGlmIChsaWJyYXJ5W2VsZW1lbnQudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsaWJyYXJ5W2VsZW1lbnQudXVpZF0gPSBlbGVtZW50LnRvSlNPTihtZXRhKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW1lbnQudXVpZDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NjZW5lKSB7XG5cdFx0XHRpZiAodGhpcy5iYWNrZ3JvdW5kKSB7XG5cdFx0XHRcdGlmICh0aGlzLmJhY2tncm91bmQuaXNDb2xvcikge1xuXHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUpIHtcblx0XHRcdFx0XHRvYmplY3QuYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSkge1xuXHRcdFx0XHRvYmplY3QuZW52aXJvbm1lbnQgPSB0aGlzLmVudmlyb25tZW50LnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGhpcy5pc01lc2ggfHwgdGhpcy5pc0xpbmUgfHwgdGhpcy5pc1BvaW50cykge1xuXHRcdFx0b2JqZWN0Lmdlb21ldHJ5ID0gc2VyaWFsaXplKG1ldGEuZ2VvbWV0cmllcywgdGhpcy5nZW9tZXRyeSk7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMuc2hhcGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgc2hhcGVzID0gcGFyYW1ldGVycy5zaGFwZXM7XG5cblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoc2hhcGVzKSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbaV07XG5cdFx0XHRcdFx0XHRzZXJpYWxpemUobWV0YS5zaGFwZXMsIHNoYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VyaWFsaXplKG1ldGEuc2hhcGVzLCBzaGFwZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTa2lubmVkTWVzaCkge1xuXHRcdFx0b2JqZWN0LmJpbmRNb2RlID0gdGhpcy5iaW5kTW9kZTtcblx0XHRcdG9iamVjdC5iaW5kTWF0cml4ID0gdGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKTtcblxuXHRcdFx0aWYgKHRoaXMuc2tlbGV0b24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzZXJpYWxpemUobWV0YS5za2VsZXRvbnMsIHRoaXMuc2tlbGV0b24pO1xuXHRcdFx0XHRvYmplY3Quc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uLnV1aWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpIHtcblx0XHRcdFx0Y29uc3QgdXVpZHMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMubWF0ZXJpYWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0dXVpZHMucHVzaChzZXJpYWxpemUobWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWxbaV0pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iamVjdC5tYXRlcmlhbCA9IHV1aWRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JqZWN0Lm1hdGVyaWFsID0gc2VyaWFsaXplKG1ldGEubWF0ZXJpYWxzLCB0aGlzLm1hdGVyaWFsKTtcblx0XHRcdH1cblx0XHR9IC8vXG5cblxuXHRcdGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdG9iamVjdC5jaGlsZHJlbiA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0b2JqZWN0LmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXS50b0pTT04obWV0YSkub2JqZWN0KTtcblx0XHRcdH1cblx0XHR9IC8vXG5cblxuXHRcdGlmICh0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b2JqZWN0LmFuaW1hdGlvbnMgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25zW2ldO1xuXHRcdFx0XHRvYmplY3QuYW5pbWF0aW9ucy5wdXNoKHNlcmlhbGl6ZShtZXRhLmFuaW1hdGlvbnMsIGFuaW1hdGlvbikpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc1Jvb3RPYmplY3QpIHtcblx0XHRcdGNvbnN0IGdlb21ldHJpZXMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEuZ2VvbWV0cmllcyk7XG5cdFx0XHRjb25zdCBtYXRlcmlhbHMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEubWF0ZXJpYWxzKTtcblx0XHRcdGNvbnN0IHRleHR1cmVzID0gZXh0cmFjdEZyb21DYWNoZShtZXRhLnRleHR1cmVzKTtcblx0XHRcdGNvbnN0IGltYWdlcyA9IGV4dHJhY3RGcm9tQ2FjaGUobWV0YS5pbWFnZXMpO1xuXHRcdFx0Y29uc3Qgc2hhcGVzID0gZXh0cmFjdEZyb21DYWNoZShtZXRhLnNoYXBlcyk7XG5cdFx0XHRjb25zdCBza2VsZXRvbnMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEuc2tlbGV0b25zKTtcblx0XHRcdGNvbnN0IGFuaW1hdGlvbnMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEuYW5pbWF0aW9ucyk7XG5cdFx0XHRpZiAoZ2VvbWV0cmllcy5sZW5ndGggPiAwKSBvdXRwdXQuZ2VvbWV0cmllcyA9IGdlb21ldHJpZXM7XG5cdFx0XHRpZiAobWF0ZXJpYWxzLmxlbmd0aCA+IDApIG91dHB1dC5tYXRlcmlhbHMgPSBtYXRlcmlhbHM7XG5cdFx0XHRpZiAodGV4dHVyZXMubGVuZ3RoID4gMCkgb3V0cHV0LnRleHR1cmVzID0gdGV4dHVyZXM7XG5cdFx0XHRpZiAoaW1hZ2VzLmxlbmd0aCA+IDApIG91dHB1dC5pbWFnZXMgPSBpbWFnZXM7XG5cdFx0XHRpZiAoc2hhcGVzLmxlbmd0aCA+IDApIG91dHB1dC5zaGFwZXMgPSBzaGFwZXM7XG5cdFx0XHRpZiAoc2tlbGV0b25zLmxlbmd0aCA+IDApIG91dHB1dC5za2VsZXRvbnMgPSBza2VsZXRvbnM7XG5cdFx0XHRpZiAoYW5pbWF0aW9ucy5sZW5ndGggPiAwKSBvdXRwdXQuYW5pbWF0aW9ucyA9IGFuaW1hdGlvbnM7XG5cdFx0fVxuXG5cdFx0b3V0cHV0Lm9iamVjdCA9IG9iamVjdDtcblx0XHRyZXR1cm4gb3V0cHV0OyAvLyBleHRyYWN0IGRhdGEgZnJvbSB0aGUgY2FjaGUgaGFzaFxuXHRcdC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBlYWNoIGl0ZW1cblx0XHQvLyBhbmQgcmV0dXJuIGFzIGFycmF5XG5cblx0XHRmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hlKGNhY2hlKSB7XG5cdFx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FjaGUpIHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGNhY2hlW2tleV07XG5cdFx0XHRcdGRlbGV0ZSBkYXRhLm1ldGFkYXRhO1xuXHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHR9XG5cdH1cblxuXHRjbG9uZShyZWN1cnNpdmUpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsIHJlY3Vyc2l2ZSk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSwgcmVjdXJzaXZlID0gdHJ1ZSkge1xuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXHRcdHRoaXMudXAuY29weShzb3VyY2UudXApO1xuXHRcdHRoaXMucG9zaXRpb24uY29weShzb3VyY2UucG9zaXRpb24pO1xuXHRcdHRoaXMucm90YXRpb24ub3JkZXIgPSBzb3VyY2Uucm90YXRpb24ub3JkZXI7XG5cdFx0dGhpcy5xdWF0ZXJuaW9uLmNvcHkoc291cmNlLnF1YXRlcm5pb24pO1xuXHRcdHRoaXMuc2NhbGUuY29weShzb3VyY2Uuc2NhbGUpO1xuXHRcdHRoaXMubWF0cml4LmNvcHkoc291cmNlLm1hdHJpeCk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHNvdXJjZS5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gc291cmNlLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7XG5cdFx0dGhpcy5sYXllcnMubWFzayA9IHNvdXJjZS5sYXllcnMubWFzaztcblx0XHR0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTtcblx0XHR0aGlzLmNhc3RTaGFkb3cgPSBzb3VyY2UuY2FzdFNoYWRvdztcblx0XHR0aGlzLnJlY2VpdmVTaGFkb3cgPSBzb3VyY2UucmVjZWl2ZVNoYWRvdztcblx0XHR0aGlzLmZydXN0dW1DdWxsZWQgPSBzb3VyY2UuZnJ1c3R1bUN1bGxlZDtcblx0XHR0aGlzLnJlbmRlck9yZGVyID0gc291cmNlLnJlbmRlck9yZGVyO1xuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNvdXJjZS51c2VyRGF0YSkpO1xuXG5cdFx0aWYgKHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY2hpbGQgPSBzb3VyY2UuY2hpbGRyZW5baV07XG5cdFx0XHRcdHRoaXMuYWRkKGNoaWxkLmNsb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuT2JqZWN0M0QuRGVmYXVsdFVwID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5PYmplY3QzRC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSA9IHRydWU7XG5PYmplY3QzRC5wcm90b3R5cGUuaXNPYmplY3QzRCA9IHRydWU7XG5cbmNvbnN0IF92MCQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MSQzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MiQyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MyQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92YWIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZhYyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmJjID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92YXAgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZicCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmNwID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFRyaWFuZ2xlIHtcblx0Y29uc3RydWN0b3IoYSA9IG5ldyBWZWN0b3IzKCksIGIgPSBuZXcgVmVjdG9yMygpLCBjID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdHRoaXMuYSA9IGE7XG5cdFx0dGhpcy5iID0gYjtcblx0XHR0aGlzLmMgPSBjO1xuXHR9XG5cblx0c3RhdGljIGdldE5vcm1hbChhLCBiLCBjLCB0YXJnZXQpIHtcblx0XHR0YXJnZXQuc3ViVmVjdG9ycyhjLCBiKTtcblxuXHRcdF92MCQxLnN1YlZlY3RvcnMoYSwgYik7XG5cblx0XHR0YXJnZXQuY3Jvc3MoX3YwJDEpO1xuXHRcdGNvbnN0IHRhcmdldExlbmd0aFNxID0gdGFyZ2V0Lmxlbmd0aFNxKCk7XG5cblx0XHRpZiAodGFyZ2V0TGVuZ3RoU3EgPiAwKSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0Lm11bHRpcGx5U2NhbGFyKDEgLyBNYXRoLnNxcnQodGFyZ2V0TGVuZ3RoU3EpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCgwLCAwLCAwKTtcblx0fSAvLyBzdGF0aWMvaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGN1bGF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xuXHQvLyBiYXNlZCBvbjogaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1bHQuaHRtbFxuXG5cblx0c3RhdGljIGdldEJhcnljb29yZChwb2ludCwgYSwgYiwgYywgdGFyZ2V0KSB7XG5cdFx0X3YwJDEuc3ViVmVjdG9ycyhjLCBhKTtcblxuXHRcdF92MSQzLnN1YlZlY3RvcnMoYiwgYSk7XG5cblx0XHRfdjIkMi5zdWJWZWN0b3JzKHBvaW50LCBhKTtcblxuXHRcdGNvbnN0IGRvdDAwID0gX3YwJDEuZG90KF92MCQxKTtcblxuXHRcdGNvbnN0IGRvdDAxID0gX3YwJDEuZG90KF92MSQzKTtcblxuXHRcdGNvbnN0IGRvdDAyID0gX3YwJDEuZG90KF92MiQyKTtcblxuXHRcdGNvbnN0IGRvdDExID0gX3YxJDMuZG90KF92MSQzKTtcblxuXHRcdGNvbnN0IGRvdDEyID0gX3YxJDMuZG90KF92MiQyKTtcblxuXHRcdGNvbnN0IGRlbm9tID0gZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDE7IC8vIGNvbGxpbmVhciBvciBzaW5ndWxhciB0cmlhbmdsZVxuXG5cdFx0aWYgKGRlbm9tID09PSAwKSB7XG5cdFx0XHQvLyBhcmJpdHJhcnkgbG9jYXRpb24gb3V0c2lkZSBvZiB0cmlhbmdsZT9cblx0XHRcdC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGJlc3QgaWRlYSwgbWF5YmUgc2hvdWxkIGJlIHJldHVybmluZyB1bmRlZmluZWRcblx0XHRcdHJldHVybiB0YXJnZXQuc2V0KC0yLCAtMSwgLTEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludkRlbm9tID0gMSAvIGRlbm9tO1xuXHRcdGNvbnN0IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIpICogaW52RGVub207XG5cdFx0Y29uc3QgdiA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgKiBpbnZEZW5vbTsgLy8gYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMgbXVzdCBhbHdheXMgc3VtIHRvIDFcblxuXHRcdHJldHVybiB0YXJnZXQuc2V0KDEgLSB1IC0gdiwgdiwgdSk7XG5cdH1cblxuXHRzdGF0aWMgY29udGFpbnNQb2ludChwb2ludCwgYSwgYiwgYykge1xuXHRcdHRoaXMuZ2V0QmFyeWNvb3JkKHBvaW50LCBhLCBiLCBjLCBfdjMkMSk7XG5cdFx0cmV0dXJuIF92MyQxLnggPj0gMCAmJiBfdjMkMS55ID49IDAgJiYgX3YzJDEueCArIF92MyQxLnkgPD0gMTtcblx0fVxuXG5cdHN0YXRpYyBnZXRVVihwb2ludCwgcDEsIHAyLCBwMywgdXYxLCB1djIsIHV2MywgdGFyZ2V0KSB7XG5cdFx0dGhpcy5nZXRCYXJ5Y29vcmQocG9pbnQsIHAxLCBwMiwgcDMsIF92MyQxKTtcblx0XHR0YXJnZXQuc2V0KDAsIDApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IodXYxLCBfdjMkMS54KTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHV2MiwgX3YzJDEueSk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcih1djMsIF92MyQxLnopO1xuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRzdGF0aWMgaXNGcm9udEZhY2luZyhhLCBiLCBjLCBkaXJlY3Rpb24pIHtcblx0XHRfdjAkMS5zdWJWZWN0b3JzKGMsIGIpO1xuXG5cdFx0X3YxJDMuc3ViVmVjdG9ycyhhLCBiKTsgLy8gc3RyaWN0bHkgZnJvbnQgZmFjaW5nXG5cblxuXHRcdHJldHVybiBfdjAkMS5jcm9zcyhfdjEkMykuZG90KGRpcmVjdGlvbikgPCAwID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0c2V0KGEsIGIsIGMpIHtcblx0XHR0aGlzLmEuY29weShhKTtcblx0XHR0aGlzLmIuY29weShiKTtcblx0XHR0aGlzLmMuY29weShjKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHBvaW50cywgaTAsIGkxLCBpMikge1xuXHRcdHRoaXMuYS5jb3B5KHBvaW50c1tpMF0pO1xuXHRcdHRoaXMuYi5jb3B5KHBvaW50c1tpMV0pO1xuXHRcdHRoaXMuYy5jb3B5KHBvaW50c1tpMl0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXMoYXR0cmlidXRlLCBpMCwgaTEsIGkyKSB7XG5cdFx0dGhpcy5hLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpMCk7XG5cdFx0dGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpMSk7XG5cdFx0dGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpMik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0Y29weSh0cmlhbmdsZSkge1xuXHRcdHRoaXMuYS5jb3B5KHRyaWFuZ2xlLmEpO1xuXHRcdHRoaXMuYi5jb3B5KHRyaWFuZ2xlLmIpO1xuXHRcdHRoaXMuYy5jb3B5KHRyaWFuZ2xlLmMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0QXJlYSgpIHtcblx0XHRfdjAkMS5zdWJWZWN0b3JzKHRoaXMuYywgdGhpcy5iKTtcblxuXHRcdF92MSQzLnN1YlZlY3RvcnModGhpcy5hLCB0aGlzLmIpO1xuXG5cdFx0cmV0dXJuIF92MCQxLmNyb3NzKF92MSQzKS5sZW5ndGgoKSAqIDAuNTtcblx0fVxuXG5cdGdldE1pZHBvaW50KHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuYWRkVmVjdG9ycyh0aGlzLmEsIHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMSAvIDMpO1xuXHR9XG5cblx0Z2V0Tm9ybWFsKHRhcmdldCkge1xuXHRcdHJldHVybiBUcmlhbmdsZS5nZXROb3JtYWwodGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGFyZ2V0KTtcblx0fVxuXG5cdGdldFBsYW5lKHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMpO1xuXHR9XG5cblx0Z2V0QmFyeWNvb3JkKHBvaW50LCB0YXJnZXQpIHtcblx0XHRyZXR1cm4gVHJpYW5nbGUuZ2V0QmFyeWNvb3JkKHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0YXJnZXQpO1xuXHR9XG5cblx0Z2V0VVYocG9pbnQsIHV2MSwgdXYyLCB1djMsIHRhcmdldCkge1xuXHRcdHJldHVybiBUcmlhbmdsZS5nZXRVVihwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdXYxLCB1djIsIHV2MywgdGFyZ2V0KTtcblx0fVxuXG5cdGNvbnRhaW5zUG9pbnQocG9pbnQpIHtcblx0XHRyZXR1cm4gVHJpYW5nbGUuY29udGFpbnNQb2ludChwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyk7XG5cdH1cblxuXHRpc0Zyb250RmFjaW5nKGRpcmVjdGlvbikge1xuXHRcdHJldHVybiBUcmlhbmdsZS5pc0Zyb250RmFjaW5nKHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIGRpcmVjdGlvbik7XG5cdH1cblxuXHRpbnRlcnNlY3RzQm94KGJveCkge1xuXHRcdHJldHVybiBib3guaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpO1xuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludChwLCB0YXJnZXQpIHtcblx0XHRjb25zdCBhID0gdGhpcy5hLFxuXHRcdFx0XHRcdGIgPSB0aGlzLmIsXG5cdFx0XHRcdFx0YyA9IHRoaXMuYztcblx0XHRsZXQgdiwgdzsgLy8gYWxnb3JpdGhtIHRoYW5rcyB0byBSZWFsLVRpbWUgQ29sbGlzaW9uIERldGVjdGlvbiBieSBDaHJpc3RlciBFcmljc29uLFxuXHRcdC8vIHB1Ymxpc2hlZCBieSBNb3JnYW4gS2F1Zm1hbm4gUHVibGlzaGVycywgKGMpIDIwMDUgRWxzZXZpZXIgSW5jLixcblx0XHQvLyB1bmRlciB0aGUgYWNjb21wYW55aW5nIGxpY2Vuc2U7IHNlZSBjaGFwdGVyIDUuMS41IGZvciBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblx0XHQvLyBiYXNpY2FsbHksIHdlJ3JlIGRpc3Rpbmd1aXNoaW5nIHdoaWNoIG9mIHRoZSB2b3Jvbm9pIHJlZ2lvbnMgb2YgdGhlIHRyaWFuZ2xlXG5cdFx0Ly8gdGhlIHBvaW50IGxpZXMgaW4gd2l0aCB0aGUgbWluaW11bSBhbW91bnQgb2YgcmVkdW5kYW50IGNvbXB1dGF0aW9uLlxuXG5cdFx0X3ZhYi5zdWJWZWN0b3JzKGIsIGEpO1xuXG5cdFx0X3ZhYy5zdWJWZWN0b3JzKGMsIGEpO1xuXG5cdFx0X3ZhcC5zdWJWZWN0b3JzKHAsIGEpO1xuXG5cdFx0Y29uc3QgZDEgPSBfdmFiLmRvdChfdmFwKTtcblxuXHRcdGNvbnN0IGQyID0gX3ZhYy5kb3QoX3ZhcCk7XG5cblx0XHRpZiAoZDEgPD0gMCAmJiBkMiA8PSAwKSB7XG5cdFx0XHQvLyB2ZXJ0ZXggcmVnaW9uIG9mIEE7IGJhcnljZW50cmljIGNvb3JkcyAoMSwgMCwgMClcblx0XHRcdHJldHVybiB0YXJnZXQuY29weShhKTtcblx0XHR9XG5cblx0XHRfdmJwLnN1YlZlY3RvcnMocCwgYik7XG5cblx0XHRjb25zdCBkMyA9IF92YWIuZG90KF92YnApO1xuXG5cdFx0Y29uc3QgZDQgPSBfdmFjLmRvdChfdmJwKTtcblxuXHRcdGlmIChkMyA+PSAwICYmIGQ0IDw9IGQzKSB7XG5cdFx0XHQvLyB2ZXJ0ZXggcmVnaW9uIG9mIEI7IGJhcnljZW50cmljIGNvb3JkcyAoMCwgMSwgMClcblx0XHRcdHJldHVybiB0YXJnZXQuY29weShiKTtcblx0XHR9XG5cblx0XHRjb25zdCB2YyA9IGQxICogZDQgLSBkMyAqIGQyO1xuXG5cdFx0aWYgKHZjIDw9IDAgJiYgZDEgPj0gMCAmJiBkMyA8PSAwKSB7XG5cdFx0XHR2ID0gZDEgLyAoZDEgLSBkMyk7IC8vIGVkZ2UgcmVnaW9uIG9mIEFCOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEtdiwgdiwgMClcblxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGEpLmFkZFNjYWxlZFZlY3RvcihfdmFiLCB2KTtcblx0XHR9XG5cblx0XHRfdmNwLnN1YlZlY3RvcnMocCwgYyk7XG5cblx0XHRjb25zdCBkNSA9IF92YWIuZG90KF92Y3ApO1xuXG5cdFx0Y29uc3QgZDYgPSBfdmFjLmRvdChfdmNwKTtcblxuXHRcdGlmIChkNiA+PSAwICYmIGQ1IDw9IGQ2KSB7XG5cdFx0XHQvLyB2ZXJ0ZXggcmVnaW9uIG9mIEM7IGJhcnljZW50cmljIGNvb3JkcyAoMCwgMCwgMSlcblx0XHRcdHJldHVybiB0YXJnZXQuY29weShjKTtcblx0XHR9XG5cblx0XHRjb25zdCB2YiA9IGQ1ICogZDIgLSBkMSAqIGQ2O1xuXG5cdFx0aWYgKHZiIDw9IDAgJiYgZDIgPj0gMCAmJiBkNiA8PSAwKSB7XG5cdFx0XHR3ID0gZDIgLyAoZDIgLSBkNik7IC8vIGVkZ2UgcmVnaW9uIG9mIEFDOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEtdywgMCwgdylcblxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGEpLmFkZFNjYWxlZFZlY3RvcihfdmFjLCB3KTtcblx0XHR9XG5cblx0XHRjb25zdCB2YSA9IGQzICogZDYgLSBkNSAqIGQ0O1xuXG5cdFx0aWYgKHZhIDw9IDAgJiYgZDQgLSBkMyA+PSAwICYmIGQ1IC0gZDYgPj0gMCkge1xuXHRcdFx0X3ZiYy5zdWJWZWN0b3JzKGMsIGIpO1xuXG5cdFx0XHR3ID0gKGQ0IC0gZDMpIC8gKGQ0IC0gZDMgKyAoZDUgLSBkNikpOyAvLyBlZGdlIHJlZ2lvbiBvZiBCQzsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAxLXcsIHcpXG5cblx0XHRcdHJldHVybiB0YXJnZXQuY29weShiKS5hZGRTY2FsZWRWZWN0b3IoX3ZiYywgdyk7IC8vIGVkZ2UgcmVnaW9uIG9mIEJDXG5cdFx0fSAvLyBmYWNlIHJlZ2lvblxuXG5cblx0XHRjb25zdCBkZW5vbSA9IDEgLyAodmEgKyB2YiArIHZjKTsgLy8gdSA9IHZhICogZGVub21cblxuXHRcdHYgPSB2YiAqIGRlbm9tO1xuXHRcdHcgPSB2YyAqIGRlbm9tO1xuXHRcdHJldHVybiB0YXJnZXQuY29weShhKS5hZGRTY2FsZWRWZWN0b3IoX3ZhYiwgdikuYWRkU2NhbGVkVmVjdG9yKF92YWMsIHcpO1xuXHR9XG5cblx0ZXF1YWxzKHRyaWFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRyaWFuZ2xlLmEuZXF1YWxzKHRoaXMuYSkgJiYgdHJpYW5nbGUuYi5lcXVhbHModGhpcy5iKSAmJiB0cmlhbmdsZS5jLmVxdWFscyh0aGlzLmMpO1xuXHR9XG5cbn1cblxubGV0IG1hdGVyaWFsSWQgPSAwO1xuXG5jbGFzcyBNYXRlcmlhbCBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdpZCcsIHtcblx0XHRcdHZhbHVlOiBtYXRlcmlhbElkKytcblx0XHR9KTtcblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLnR5cGUgPSAnTWF0ZXJpYWwnO1xuXHRcdHRoaXMuZm9nID0gdHJ1ZTtcblx0XHR0aGlzLmJsZW5kaW5nID0gTm9ybWFsQmxlbmRpbmc7XG5cdFx0dGhpcy5zaWRlID0gRnJvbnRTaWRlO1xuXHRcdHRoaXMudmVydGV4Q29sb3JzID0gZmFsc2U7XG5cdFx0dGhpcy5vcGFjaXR5ID0gMTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cdFx0dGhpcy5ibGVuZFNyYyA9IFNyY0FscGhhRmFjdG9yO1xuXHRcdHRoaXMuYmxlbmREc3QgPSBPbmVNaW51c1NyY0FscGhhRmFjdG9yO1xuXHRcdHRoaXMuYmxlbmRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uO1xuXHRcdHRoaXMuYmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdFx0dGhpcy5ibGVuZERzdEFscGhhID0gbnVsbDtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7XG5cdFx0dGhpcy5kZXB0aEZ1bmMgPSBMZXNzRXF1YWxEZXB0aDtcblx0XHR0aGlzLmRlcHRoVGVzdCA9IHRydWU7XG5cdFx0dGhpcy5kZXB0aFdyaXRlID0gdHJ1ZTtcblx0XHR0aGlzLnN0ZW5jaWxXcml0ZU1hc2sgPSAweGZmO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmMgPSBBbHdheXNTdGVuY2lsRnVuYztcblx0XHR0aGlzLnN0ZW5jaWxSZWYgPSAwO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmNNYXNrID0gMHhmZjtcblx0XHR0aGlzLnN0ZW5jaWxGYWlsID0gS2VlcFN0ZW5jaWxPcDtcblx0XHR0aGlzLnN0ZW5jaWxaRmFpbCA9IEtlZXBTdGVuY2lsT3A7XG5cdFx0dGhpcy5zdGVuY2lsWlBhc3MgPSBLZWVwU3RlbmNpbE9wO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlID0gZmFsc2U7XG5cdFx0dGhpcy5jbGlwcGluZ1BsYW5lcyA9IG51bGw7XG5cdFx0dGhpcy5jbGlwSW50ZXJzZWN0aW9uID0gZmFsc2U7XG5cdFx0dGhpcy5jbGlwU2hhZG93cyA9IGZhbHNlO1xuXHRcdHRoaXMuc2hhZG93U2lkZSA9IG51bGw7XG5cdFx0dGhpcy5jb2xvcldyaXRlID0gdHJ1ZTtcblx0XHR0aGlzLmFscGhhV3JpdGUgPSB0cnVlO1xuXHRcdHRoaXMucHJlY2lzaW9uID0gbnVsbDsgLy8gb3ZlcnJpZGUgdGhlIHJlbmRlcmVyJ3MgZGVmYXVsdCBwcmVjaXNpb24gZm9yIHRoaXMgbWF0ZXJpYWxcblxuXHRcdHRoaXMucG9seWdvbk9mZnNldCA9IGZhbHNlO1xuXHRcdHRoaXMucG9seWdvbk9mZnNldEZhY3RvciA9IDA7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMgPSAwO1xuXHRcdHRoaXMuZGl0aGVyaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5hbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTtcblx0XHR0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlO1xuXHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdFx0dGhpcy50b25lTWFwcGVkID0gdHJ1ZTtcblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblx0XHR0aGlzLl9hbHBoYVRlc3QgPSAwO1xuXHR9XG5cblx0Z2V0IGFscGhhVGVzdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fYWxwaGFUZXN0O1xuXHR9XG5cblx0c2V0IGFscGhhVGVzdCh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLl9hbHBoYVRlc3QgPiAwICE9PSB2YWx1ZSA+IDApIHtcblx0XHRcdHRoaXMudmVyc2lvbisrO1xuXHRcdH1cblxuXHRcdHRoaXMuX2FscGhhVGVzdCA9IHZhbHVlO1xuXHR9XG5cblx0b25CdWlsZCgpIHt9XG5cblx0b25CZWZvcmVSZW5kZXIoKSB7fVxuXG5cdG9uQmVmb3JlQ29tcGlsZSgpIHt9XG5cblx0Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpO1xuXHR9XG5cblx0c2V0VmFsdWVzKHZhbHVlcykge1xuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG5cdFx0XHRjb25zdCBuZXdWYWx1ZSA9IHZhbHVlc1trZXldO1xuXG5cdFx0XHRpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdGVyaWFsOiBcXCcnICsga2V5ICsgJ1xcJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLicpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgaWYgc2hhZGluZyBpcyBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yXG5cblxuXHRcdFx0aWYgKGtleSA9PT0gJ3NoYWRpbmcnKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4nKTtcblx0XHRcdFx0dGhpcy5mbGF0U2hhZGluZyA9IG5ld1ZhbHVlID09PSBGbGF0U2hhZGluZyA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXNba2V5XTtcblxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IFxcJycgKyBrZXkgKyAnXFwnIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuJyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5pc0NvbG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZS5zZXQobmV3VmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLmlzVmVjdG9yMyAmJiBuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5pc1ZlY3RvcjMpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlLmNvcHkobmV3VmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpc1trZXldID0gbmV3VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBpc1Jvb3QgPSBtZXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnO1xuXG5cdFx0aWYgKGlzUm9vdCkge1xuXHRcdFx0bWV0YSA9IHtcblx0XHRcdFx0dGV4dHVyZXM6IHt9LFxuXHRcdFx0XHRpbWFnZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdNYXRlcmlhbCcsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ01hdGVyaWFsLnRvSlNPTidcblx0XHRcdH1cblx0XHR9OyAvLyBzdGFuZGFyZCBNYXRlcmlhbCBzZXJpYWxpemF0aW9uXG5cblx0XHRkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0ZGF0YS50eXBlID0gdGhpcy50eXBlO1xuXHRcdGlmICh0aGlzLm5hbWUgIT09ICcnKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0aWYgKHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvci5pc0NvbG9yKSBkYXRhLmNvbG9yID0gdGhpcy5jb2xvci5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS5yb3VnaG5lc3MgPSB0aGlzLnJvdWdobmVzcztcblx0XHRpZiAodGhpcy5tZXRhbG5lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS5tZXRhbG5lc3MgPSB0aGlzLm1ldGFsbmVzcztcblx0XHRpZiAodGhpcy5zaGVlbiAhPT0gdW5kZWZpbmVkKSBkYXRhLnNoZWVuID0gdGhpcy5zaGVlbjtcblx0XHRpZiAodGhpcy5zaGVlbkNvbG9yICYmIHRoaXMuc2hlZW5Db2xvci5pc0NvbG9yKSBkYXRhLnNoZWVuQ29sb3IgPSB0aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCk7XG5cdFx0aWYgKHRoaXMuc2hlZW5Sb3VnaG5lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS5zaGVlblJvdWdobmVzcyA9IHRoaXMuc2hlZW5Sb3VnaG5lc3M7XG5cdFx0aWYgKHRoaXMuZW1pc3NpdmUgJiYgdGhpcy5lbWlzc2l2ZS5pc0NvbG9yKSBkYXRhLmVtaXNzaXZlID0gdGhpcy5lbWlzc2l2ZS5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5lbWlzc2l2ZUludGVuc2l0eSAmJiB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSAxKSBkYXRhLmVtaXNzaXZlSW50ZW5zaXR5ID0gdGhpcy5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHRpZiAodGhpcy5zcGVjdWxhciAmJiB0aGlzLnNwZWN1bGFyLmlzQ29sb3IpIGRhdGEuc3BlY3VsYXIgPSB0aGlzLnNwZWN1bGFyLmdldEhleCgpO1xuXHRcdGlmICh0aGlzLnNwZWN1bGFySW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIGRhdGEuc3BlY3VsYXJJbnRlbnNpdHkgPSB0aGlzLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdGlmICh0aGlzLnNwZWN1bGFyQ29sb3IgJiYgdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3IpIGRhdGEuc3BlY3VsYXJDb2xvciA9IHRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5zaGluaW5lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS5zaGluaW5lc3MgPSB0aGlzLnNoaW5pbmVzcztcblx0XHRpZiAodGhpcy5jbGVhcmNvYXQgIT09IHVuZGVmaW5lZCkgZGF0YS5jbGVhcmNvYXQgPSB0aGlzLmNsZWFyY29hdDtcblx0XHRpZiAodGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MgIT09IHVuZGVmaW5lZCkgZGF0YS5jbGVhcmNvYXRSb3VnaG5lc3MgPSB0aGlzLmNsZWFyY29hdFJvdWdobmVzcztcblxuXHRcdGlmICh0aGlzLmNsZWFyY29hdE1hcCAmJiB0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUpIHtcblx0XHRcdGRhdGEuY2xlYXJjb2F0TWFwID0gdGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwICYmIHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPSB0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgJiYgdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmNsZWFyY29hdE5vcm1hbE1hcCA9IHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0ZGF0YS5jbGVhcmNvYXROb3JtYWxTY2FsZSA9IHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1hcCAmJiB0aGlzLm1hcC5pc1RleHR1cmUpIGRhdGEubWFwID0gdGhpcy5tYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0aWYgKHRoaXMubWF0Y2FwICYmIHRoaXMubWF0Y2FwLmlzVGV4dHVyZSkgZGF0YS5tYXRjYXAgPSB0aGlzLm1hdGNhcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5hbHBoYU1hcCAmJiB0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSkgZGF0YS5hbHBoYU1hcCA9IHRoaXMuYWxwaGFNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cblx0XHRpZiAodGhpcy5saWdodE1hcCAmJiB0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5saWdodE1hcCA9IHRoaXMubGlnaHRNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0XHRkYXRhLmxpZ2h0TWFwSW50ZW5zaXR5ID0gdGhpcy5saWdodE1hcEludGVuc2l0eTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hb01hcCAmJiB0aGlzLmFvTWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5hb01hcCA9IHRoaXMuYW9NYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0XHRkYXRhLmFvTWFwSW50ZW5zaXR5ID0gdGhpcy5hb01hcEludGVuc2l0eTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5idW1wTWFwICYmIHRoaXMuYnVtcE1hcC5pc1RleHR1cmUpIHtcblx0XHRcdGRhdGEuYnVtcE1hcCA9IHRoaXMuYnVtcE1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdGRhdGEuYnVtcFNjYWxlID0gdGhpcy5idW1wU2NhbGU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubm9ybWFsTWFwICYmIHRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5ub3JtYWxNYXAgPSB0aGlzLm5vcm1hbE1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdGRhdGEubm9ybWFsTWFwVHlwZSA9IHRoaXMubm9ybWFsTWFwVHlwZTtcblx0XHRcdGRhdGEubm9ybWFsU2NhbGUgPSB0aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kaXNwbGFjZW1lbnRNYXAgJiYgdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlKSB7XG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudE1hcCA9IHRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdFx0ZGF0YS5kaXNwbGFjZW1lbnRTY2FsZSA9IHRoaXMuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudEJpYXMgPSB0aGlzLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucm91Z2huZXNzTWFwICYmIHRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSkgZGF0YS5yb3VnaG5lc3NNYXAgPSB0aGlzLnJvdWdobmVzc01hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5tZXRhbG5lc3NNYXAgJiYgdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlKSBkYXRhLm1ldGFsbmVzc01hcCA9IHRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLmVtaXNzaXZlTWFwICYmIHRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlKSBkYXRhLmVtaXNzaXZlTWFwID0gdGhpcy5lbWlzc2l2ZU1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5zcGVjdWxhck1hcCAmJiB0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSkgZGF0YS5zcGVjdWxhck1hcCA9IHRoaXMuc3BlY3VsYXJNYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0aWYgKHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgJiYgdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUpIGRhdGEuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSB0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdGlmICh0aGlzLnNwZWN1bGFyQ29sb3JNYXAgJiYgdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSkgZGF0YS5zcGVjdWxhckNvbG9yTWFwID0gdGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXG5cdFx0aWYgKHRoaXMuZW52TWFwICYmIHRoaXMuZW52TWFwLmlzVGV4dHVyZSkge1xuXHRcdFx0ZGF0YS5lbnZNYXAgPSB0aGlzLmVudk1hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRcdGlmICh0aGlzLmNvbWJpbmUgIT09IHVuZGVmaW5lZCkgZGF0YS5jb21iaW5lID0gdGhpcy5jb21iaW5lO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVudk1hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSBkYXRhLmVudk1hcEludGVuc2l0eSA9IHRoaXMuZW52TWFwSW50ZW5zaXR5O1xuXHRcdGlmICh0aGlzLnJlZmxlY3Rpdml0eSAhPT0gdW5kZWZpbmVkKSBkYXRhLnJlZmxlY3Rpdml0eSA9IHRoaXMucmVmbGVjdGl2aXR5O1xuXHRcdGlmICh0aGlzLnJlZnJhY3Rpb25SYXRpbyAhPT0gdW5kZWZpbmVkKSBkYXRhLnJlZnJhY3Rpb25SYXRpbyA9IHRoaXMucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0aWYgKHRoaXMuZ3JhZGllbnRNYXAgJiYgdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUpIHtcblx0XHRcdGRhdGEuZ3JhZGllbnRNYXAgPSB0aGlzLmdyYWRpZW50TWFwLnRvSlNPTihtZXRhKS51dWlkO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRyYW5zbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSBkYXRhLnRyYW5zbWlzc2lvbiA9IHRoaXMudHJhbnNtaXNzaW9uO1xuXHRcdGlmICh0aGlzLnRyYW5zbWlzc2lvbk1hcCAmJiB0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUpIGRhdGEudHJhbnNtaXNzaW9uTWFwID0gdGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKG1ldGEpLnV1aWQ7XG5cdFx0aWYgKHRoaXMudGhpY2tuZXNzICE9PSB1bmRlZmluZWQpIGRhdGEudGhpY2tuZXNzID0gdGhpcy50aGlja25lc3M7XG5cdFx0aWYgKHRoaXMudGhpY2tuZXNzTWFwICYmIHRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSkgZGF0YS50aGlja25lc3NNYXAgPSB0aGlzLnRoaWNrbmVzc01hcC50b0pTT04obWV0YSkudXVpZDtcblx0XHRpZiAodGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlICE9PSB1bmRlZmluZWQpIGRhdGEuYXR0ZW51YXRpb25EaXN0YW5jZSA9IHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRpZiAodGhpcy5hdHRlbnVhdGlvbkNvbG9yICE9PSB1bmRlZmluZWQpIGRhdGEuYXR0ZW51YXRpb25Db2xvciA9IHRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5zaXplICE9PSB1bmRlZmluZWQpIGRhdGEuc2l6ZSA9IHRoaXMuc2l6ZTtcblx0XHRpZiAodGhpcy5zaGFkb3dTaWRlICE9PSBudWxsKSBkYXRhLnNoYWRvd1NpZGUgPSB0aGlzLnNoYWRvd1NpZGU7XG5cdFx0aWYgKHRoaXMuc2l6ZUF0dGVudWF0aW9uICE9PSB1bmRlZmluZWQpIGRhdGEuc2l6ZUF0dGVudWF0aW9uID0gdGhpcy5zaXplQXR0ZW51YXRpb247XG5cdFx0aWYgKHRoaXMuYmxlbmRpbmcgIT09IE5vcm1hbEJsZW5kaW5nKSBkYXRhLmJsZW5kaW5nID0gdGhpcy5ibGVuZGluZztcblx0XHRpZiAodGhpcy5zaWRlICE9PSBGcm9udFNpZGUpIGRhdGEuc2lkZSA9IHRoaXMuc2lkZTtcblx0XHRpZiAodGhpcy52ZXJ0ZXhDb2xvcnMpIGRhdGEudmVydGV4Q29sb3JzID0gdHJ1ZTtcblx0XHRpZiAodGhpcy5vcGFjaXR5IDwgMSkgZGF0YS5vcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuXHRcdGlmICh0aGlzLnRyYW5zcGFyZW50ID09PSB0cnVlKSBkYXRhLnRyYW5zcGFyZW50ID0gdGhpcy50cmFuc3BhcmVudDtcblx0XHRkYXRhLmRlcHRoRnVuYyA9IHRoaXMuZGVwdGhGdW5jO1xuXHRcdGRhdGEuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XG5cdFx0ZGF0YS5kZXB0aFdyaXRlID0gdGhpcy5kZXB0aFdyaXRlO1xuXHRcdGRhdGEuY29sb3JXcml0ZSA9IHRoaXMuY29sb3JXcml0ZTtcblx0XHRkYXRhLmFscGhhV3JpdGUgPSB0aGlzLmFscGhhV3JpdGU7XG5cdFx0ZGF0YS5zdGVuY2lsV3JpdGUgPSB0aGlzLnN0ZW5jaWxXcml0ZTtcblx0XHRkYXRhLnN0ZW5jaWxXcml0ZU1hc2sgPSB0aGlzLnN0ZW5jaWxXcml0ZU1hc2s7XG5cdFx0ZGF0YS5zdGVuY2lsRnVuYyA9IHRoaXMuc3RlbmNpbEZ1bmM7XG5cdFx0ZGF0YS5zdGVuY2lsUmVmID0gdGhpcy5zdGVuY2lsUmVmO1xuXHRcdGRhdGEuc3RlbmNpbEZ1bmNNYXNrID0gdGhpcy5zdGVuY2lsRnVuY01hc2s7XG5cdFx0ZGF0YS5zdGVuY2lsRmFpbCA9IHRoaXMuc3RlbmNpbEZhaWw7XG5cdFx0ZGF0YS5zdGVuY2lsWkZhaWwgPSB0aGlzLnN0ZW5jaWxaRmFpbDtcblx0XHRkYXRhLnN0ZW5jaWxaUGFzcyA9IHRoaXMuc3RlbmNpbFpQYXNzOyAvLyByb3RhdGlvbiAoU3ByaXRlTWF0ZXJpYWwpXG5cblx0XHRpZiAodGhpcy5yb3RhdGlvbiAmJiB0aGlzLnJvdGF0aW9uICE9PSAwKSBkYXRhLnJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRpZiAodGhpcy5wb2x5Z29uT2Zmc2V0ID09PSB0cnVlKSBkYXRhLnBvbHlnb25PZmZzZXQgPSB0cnVlO1xuXHRcdGlmICh0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgIT09IDApIGRhdGEucG9seWdvbk9mZnNldEZhY3RvciA9IHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcjtcblx0XHRpZiAodGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMgIT09IDApIGRhdGEucG9seWdvbk9mZnNldFVuaXRzID0gdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM7XG5cdFx0aWYgKHRoaXMubGluZXdpZHRoICYmIHRoaXMubGluZXdpZHRoICE9PSAxKSBkYXRhLmxpbmV3aWR0aCA9IHRoaXMubGluZXdpZHRoO1xuXHRcdGlmICh0aGlzLmRhc2hTaXplICE9PSB1bmRlZmluZWQpIGRhdGEuZGFzaFNpemUgPSB0aGlzLmRhc2hTaXplO1xuXHRcdGlmICh0aGlzLmdhcFNpemUgIT09IHVuZGVmaW5lZCkgZGF0YS5nYXBTaXplID0gdGhpcy5nYXBTaXplO1xuXHRcdGlmICh0aGlzLnNjYWxlICE9PSB1bmRlZmluZWQpIGRhdGEuc2NhbGUgPSB0aGlzLnNjYWxlO1xuXHRcdGlmICh0aGlzLmRpdGhlcmluZyA9PT0gdHJ1ZSkgZGF0YS5kaXRoZXJpbmcgPSB0cnVlO1xuXHRcdGlmICh0aGlzLmFscGhhVGVzdCA+IDApIGRhdGEuYWxwaGFUZXN0ID0gdGhpcy5hbHBoYVRlc3Q7XG5cdFx0aWYgKHRoaXMuYWxwaGFUb0NvdmVyYWdlID09PSB0cnVlKSBkYXRhLmFscGhhVG9Db3ZlcmFnZSA9IHRoaXMuYWxwaGFUb0NvdmVyYWdlO1xuXHRcdGlmICh0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gdHJ1ZSkgZGF0YS5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0aGlzLnByZW11bHRpcGxpZWRBbHBoYTtcblx0XHRpZiAodGhpcy53aXJlZnJhbWUgPT09IHRydWUpIGRhdGEud2lyZWZyYW1lID0gdGhpcy53aXJlZnJhbWU7XG5cdFx0aWYgKHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID4gMSkgZGF0YS53aXJlZnJhbWVMaW5ld2lkdGggPSB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRpZiAodGhpcy53aXJlZnJhbWVMaW5lY2FwICE9PSAncm91bmQnKSBkYXRhLndpcmVmcmFtZUxpbmVjYXAgPSB0aGlzLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0aWYgKHRoaXMud2lyZWZyYW1lTGluZWpvaW4gIT09ICdyb3VuZCcpIGRhdGEud2lyZWZyYW1lTGluZWpvaW4gPSB0aGlzLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdGlmICh0aGlzLmZsYXRTaGFkaW5nID09PSB0cnVlKSBkYXRhLmZsYXRTaGFkaW5nID0gdGhpcy5mbGF0U2hhZGluZztcblx0XHRpZiAodGhpcy52aXNpYmxlID09PSBmYWxzZSkgZGF0YS52aXNpYmxlID0gZmFsc2U7XG5cdFx0aWYgKHRoaXMudG9uZU1hcHBlZCA9PT0gZmFsc2UpIGRhdGEudG9uZU1hcHBlZCA9IGZhbHNlO1xuXHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSAhPT0gJ3t9JykgZGF0YS51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7IC8vIFRPRE86IENvcGllZCBmcm9tIE9iamVjdDNELnRvSlNPTlxuXG5cdFx0ZnVuY3Rpb24gZXh0cmFjdEZyb21DYWNoZShjYWNoZSkge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhY2hlKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBjYWNoZVtrZXldO1xuXHRcdFx0XHRkZWxldGUgZGF0YS5tZXRhZGF0YTtcblx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUm9vdCkge1xuXHRcdFx0Y29uc3QgdGV4dHVyZXMgPSBleHRyYWN0RnJvbUNhY2hlKG1ldGEudGV4dHVyZXMpO1xuXHRcdFx0Y29uc3QgaW1hZ2VzID0gZXh0cmFjdEZyb21DYWNoZShtZXRhLmltYWdlcyk7XG5cdFx0XHRpZiAodGV4dHVyZXMubGVuZ3RoID4gMCkgZGF0YS50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXHRcdFx0aWYgKGltYWdlcy5sZW5ndGggPiAwKSBkYXRhLmltYWdlcyA9IGltYWdlcztcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXHRcdHRoaXMuZm9nID0gc291cmNlLmZvZztcblx0XHR0aGlzLmJsZW5kaW5nID0gc291cmNlLmJsZW5kaW5nO1xuXHRcdHRoaXMuc2lkZSA9IHNvdXJjZS5zaWRlO1xuXHRcdHRoaXMudmVydGV4Q29sb3JzID0gc291cmNlLnZlcnRleENvbG9ycztcblx0XHR0aGlzLm9wYWNpdHkgPSBzb3VyY2Uub3BhY2l0eTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gc291cmNlLnRyYW5zcGFyZW50O1xuXHRcdHRoaXMuYmxlbmRTcmMgPSBzb3VyY2UuYmxlbmRTcmM7XG5cdFx0dGhpcy5ibGVuZERzdCA9IHNvdXJjZS5ibGVuZERzdDtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb24gPSBzb3VyY2UuYmxlbmRFcXVhdGlvbjtcblx0XHR0aGlzLmJsZW5kU3JjQWxwaGEgPSBzb3VyY2UuYmxlbmRTcmNBbHBoYTtcblx0XHR0aGlzLmJsZW5kRHN0QWxwaGEgPSBzb3VyY2UuYmxlbmREc3RBbHBoYTtcblx0XHR0aGlzLmJsZW5kRXF1YXRpb25BbHBoYSA9IHNvdXJjZS5ibGVuZEVxdWF0aW9uQWxwaGE7XG5cdFx0dGhpcy5kZXB0aEZ1bmMgPSBzb3VyY2UuZGVwdGhGdW5jO1xuXHRcdHRoaXMuZGVwdGhUZXN0ID0gc291cmNlLmRlcHRoVGVzdDtcblx0XHR0aGlzLmRlcHRoV3JpdGUgPSBzb3VyY2UuZGVwdGhXcml0ZTtcblx0XHR0aGlzLnN0ZW5jaWxXcml0ZU1hc2sgPSBzb3VyY2Uuc3RlbmNpbFdyaXRlTWFzaztcblx0XHR0aGlzLnN0ZW5jaWxGdW5jID0gc291cmNlLnN0ZW5jaWxGdW5jO1xuXHRcdHRoaXMuc3RlbmNpbFJlZiA9IHNvdXJjZS5zdGVuY2lsUmVmO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmNNYXNrID0gc291cmNlLnN0ZW5jaWxGdW5jTWFzaztcblx0XHR0aGlzLnN0ZW5jaWxGYWlsID0gc291cmNlLnN0ZW5jaWxGYWlsO1xuXHRcdHRoaXMuc3RlbmNpbFpGYWlsID0gc291cmNlLnN0ZW5jaWxaRmFpbDtcblx0XHR0aGlzLnN0ZW5jaWxaUGFzcyA9IHNvdXJjZS5zdGVuY2lsWlBhc3M7XG5cdFx0dGhpcy5zdGVuY2lsV3JpdGUgPSBzb3VyY2Uuc3RlbmNpbFdyaXRlO1xuXHRcdGNvbnN0IHNyY1BsYW5lcyA9IHNvdXJjZS5jbGlwcGluZ1BsYW5lcztcblx0XHRsZXQgZHN0UGxhbmVzID0gbnVsbDtcblxuXHRcdGlmIChzcmNQbGFuZXMgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IG4gPSBzcmNQbGFuZXMubGVuZ3RoO1xuXHRcdFx0ZHN0UGxhbmVzID0gbmV3IEFycmF5KG4pO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdGRzdFBsYW5lc1tpXSA9IHNyY1BsYW5lc1tpXS5jbG9uZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY2xpcHBpbmdQbGFuZXMgPSBkc3RQbGFuZXM7XG5cdFx0dGhpcy5jbGlwSW50ZXJzZWN0aW9uID0gc291cmNlLmNsaXBJbnRlcnNlY3Rpb247XG5cdFx0dGhpcy5jbGlwU2hhZG93cyA9IHNvdXJjZS5jbGlwU2hhZG93cztcblx0XHR0aGlzLnNoYWRvd1NpZGUgPSBzb3VyY2Uuc2hhZG93U2lkZTtcblx0XHR0aGlzLmNvbG9yV3JpdGUgPSBzb3VyY2UuY29sb3JXcml0ZTtcblx0XHR0aGlzLmFscGhhV3JpdGUgPSBzb3VyY2UuYWxwaGFXcml0ZTtcblx0XHR0aGlzLnByZWNpc2lvbiA9IHNvdXJjZS5wcmVjaXNpb247XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0ID0gc291cmNlLnBvbHlnb25PZmZzZXQ7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gc291cmNlLnBvbHlnb25PZmZzZXRGYWN0b3I7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMgPSBzb3VyY2UucG9seWdvbk9mZnNldFVuaXRzO1xuXHRcdHRoaXMuZGl0aGVyaW5nID0gc291cmNlLmRpdGhlcmluZztcblx0XHR0aGlzLmFscGhhVGVzdCA9IHNvdXJjZS5hbHBoYVRlc3Q7XG5cdFx0dGhpcy5hbHBoYVRvQ292ZXJhZ2UgPSBzb3VyY2UuYWxwaGFUb0NvdmVyYWdlO1xuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gc291cmNlLnByZW11bHRpcGxpZWRBbHBoYTtcblx0XHR0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTtcblx0XHR0aGlzLnRvbmVNYXBwZWQgPSBzb3VyY2UudG9uZU1hcHBlZDtcblx0XHR0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzb3VyY2UudXNlckRhdGEpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdHR5cGU6ICdkaXNwb3NlJ1xuXHRcdH0pO1xuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSB0cnVlKSB0aGlzLnZlcnNpb24rKztcblx0fVxuXG59XG5cbk1hdGVyaWFsLnByb3RvdHlwZS5pc01hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdGNvbG9yOiA8aGV4PixcbiAqXHRvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0bGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0bGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0YW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0c3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksXG4gKlx0Y29tYmluZTogVEhSRUUuTXVsdGlwbHksXG4gKlx0cmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LFxuICpcdHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PixcbiAqXG4gKlx0ZGVwdGhUZXN0OiA8Ym9vbD4sXG4gKlx0ZGVwdGhXcml0ZTogPGJvb2w+LFxuICpcbiAqXHR3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqXHR3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaEJhc2ljTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoQmFzaWNNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7IC8vIGVtaXNzaXZlXG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuZW52TWFwID0gbnVsbDtcblx0XHR0aGlzLmNvbWJpbmUgPSBNdWx0aXBseU9wZXJhdGlvbjtcblx0XHR0aGlzLnJlZmxlY3Rpdml0eSA9IDE7XG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4O1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cdFx0dGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9NYXA7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTtcblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwO1xuXHRcdHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5lO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gc291cmNlLnJlZmxlY3Rpdml0eTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaEJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCBfdmVjdG9yJDkgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZlY3RvcjIkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jbGFzcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy5hcnJheSA9IGFycmF5O1xuXHRcdHRoaXMuaXRlbVNpemUgPSBpdGVtU2l6ZTtcblx0XHR0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAvIGl0ZW1TaXplIDogMDtcblx0XHR0aGlzLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkID09PSB0cnVlO1xuXHRcdHRoaXMudXNhZ2UgPSBTdGF0aWNEcmF3VXNhZ2U7XG5cdFx0dGhpcy51cGRhdGVSYW5nZSA9IHtcblx0XHRcdG9mZnNldDogMCxcblx0XHRcdGNvdW50OiAtMVxuXHRcdH07XG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblx0fVxuXG5cdG9uVXBsb2FkQ2FsbGJhY2soKSB7fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdHJ1ZSkgdGhpcy52ZXJzaW9uKys7XG5cdH1cblxuXHRzZXRVc2FnZSh2YWx1ZSkge1xuXHRcdHRoaXMudXNhZ2UgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cdFx0dGhpcy5hcnJheSA9IG5ldyBzb3VyY2UuYXJyYXkuY29uc3RydWN0b3Ioc291cmNlLmFycmF5KTtcblx0XHR0aGlzLml0ZW1TaXplID0gc291cmNlLml0ZW1TaXplO1xuXHRcdHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7XG5cdFx0dGhpcy5ub3JtYWxpemVkID0gc291cmNlLm5vcm1hbGl6ZWQ7XG5cdFx0dGhpcy51c2FnZSA9IHNvdXJjZS51c2FnZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlBdChpbmRleDEsIGF0dHJpYnV0ZSwgaW5kZXgyKSB7XG5cdFx0aW5kZXgxICo9IHRoaXMuaXRlbVNpemU7XG5cdFx0aW5kZXgyICo9IGF0dHJpYnV0ZS5pdGVtU2l6ZTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkrKykge1xuXHRcdFx0dGhpcy5hcnJheVtpbmRleDEgKyBpXSA9IGF0dHJpYnV0ZS5hcnJheVtpbmRleDIgKyBpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlBcnJheShhcnJheSkge1xuXHRcdHRoaXMuYXJyYXkuc2V0KGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlDb2xvcnNBcnJheShjb2xvcnMpIHtcblx0XHRjb25zdCBhcnJheSA9IHRoaXMuYXJyYXk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGxldCBjb2xvciA9IGNvbG9yc1tpXTtcblxuXHRcdFx0aWYgKGNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCcsIGkpO1xuXHRcdFx0XHRjb2xvciA9IG5ldyBDb2xvcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSBjb2xvci5yO1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gY29sb3IuZztcblx0XHRcdGFycmF5W29mZnNldCsrXSA9IGNvbG9yLmI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5VmVjdG9yMnNBcnJheSh2ZWN0b3JzKSB7XG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0bGV0IHZlY3RvciA9IHZlY3RvcnNbaV07XG5cblx0XHRcdGlmICh2ZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSk7XG5cdFx0XHRcdHZlY3RvciA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFycmF5W29mZnNldCsrXSA9IHZlY3Rvci54O1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5VmVjdG9yM3NBcnJheSh2ZWN0b3JzKSB7XG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0bGV0IHZlY3RvciA9IHZlY3RvcnNbaV07XG5cblx0XHRcdGlmICh2ZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSk7XG5cdFx0XHRcdHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFycmF5W29mZnNldCsrXSA9IHZlY3Rvci54O1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLnk7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3Iuejtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHlWZWN0b3I0c0FycmF5KHZlY3RvcnMpIHtcblx0XHRjb25zdCBhcnJheSA9IHRoaXMuYXJyYXk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1tpXTtcblxuXHRcdFx0aWYgKHZlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBpKTtcblx0XHRcdFx0dmVjdG9yID0gbmV3IFZlY3RvcjQoKTtcblx0XHRcdH1cblxuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLng7XG5cdFx0XHRhcnJheVtvZmZzZXQrK10gPSB2ZWN0b3IueTtcblx0XHRcdGFycmF5W29mZnNldCsrXSA9IHZlY3Rvci56O1xuXHRcdFx0YXJyYXlbb2Zmc2V0KytdID0gdmVjdG9yLnc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseU1hdHJpeDMobSkge1xuXHRcdGlmICh0aGlzLml0ZW1TaXplID09PSAyKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0X3ZlY3RvcjIkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xuXG5cdFx0XHRcdF92ZWN0b3IyJDEuYXBwbHlNYXRyaXgzKG0pO1xuXG5cdFx0XHRcdHRoaXMuc2V0WFkoaSwgX3ZlY3RvcjIkMS54LCBfdmVjdG9yMiQxLnkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gMykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdF92ZWN0b3IkOS5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xuXG5cdFx0XHRcdF92ZWN0b3IkOS5hcHBseU1hdHJpeDMobSk7XG5cblx0XHRcdFx0dGhpcy5zZXRYWVooaSwgX3ZlY3RvciQ5LngsIF92ZWN0b3IkOS55LCBfdmVjdG9yJDkueik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0X3ZlY3RvciQ5LnggPSB0aGlzLmdldFgoaSk7XG5cdFx0XHRfdmVjdG9yJDkueSA9IHRoaXMuZ2V0WShpKTtcblx0XHRcdF92ZWN0b3IkOS56ID0gdGhpcy5nZXRaKGkpO1xuXG5cdFx0XHRfdmVjdG9yJDkuYXBwbHlNYXRyaXg0KG0pO1xuXG5cdFx0XHR0aGlzLnNldFhZWihpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5Tm9ybWFsTWF0cml4KG0pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdF92ZWN0b3IkOS54ID0gdGhpcy5nZXRYKGkpO1xuXHRcdFx0X3ZlY3RvciQ5LnkgPSB0aGlzLmdldFkoaSk7XG5cdFx0XHRfdmVjdG9yJDkueiA9IHRoaXMuZ2V0WihpKTtcblxuXHRcdFx0X3ZlY3RvciQ5LmFwcGx5Tm9ybWFsTWF0cml4KG0pO1xuXG5cdFx0XHR0aGlzLnNldFhZWihpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zZm9ybURpcmVjdGlvbihtKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRfdmVjdG9yJDkueCA9IHRoaXMuZ2V0WChpKTtcblx0XHRcdF92ZWN0b3IkOS55ID0gdGhpcy5nZXRZKGkpO1xuXHRcdFx0X3ZlY3RvciQ5LnogPSB0aGlzLmdldFooaSk7XG5cblx0XHRcdF92ZWN0b3IkOS50cmFuc2Zvcm1EaXJlY3Rpb24obSk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKGksIF92ZWN0b3IkOS54LCBfdmVjdG9yJDkueSwgX3ZlY3RvciQ5LnopO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0KHZhbHVlLCBvZmZzZXQgPSAwKSB7XG5cdFx0dGhpcy5hcnJheS5zZXQodmFsdWUsIG9mZnNldCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRYKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplXTtcblx0fVxuXG5cdHNldFgoaW5kZXgsIHgpIHtcblx0XHR0aGlzLmFycmF5W2luZGV4ICogdGhpcy5pdGVtU2l6ZV0gPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0WShpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmFycmF5W2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDFdO1xuXHR9XG5cblx0c2V0WShpbmRleCwgeSkge1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMV0gPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0WihpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmFycmF5W2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDJdO1xuXHR9XG5cblx0c2V0WihpbmRleCwgeikge1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0VyhpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmFycmF5W2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDNdO1xuXHR9XG5cblx0c2V0VyhpbmRleCwgdykge1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgM10gPSB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WFkoaW5kZXgsIHgsIHkpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFhZWihpbmRleCwgeCwgeSwgeikge1xuXHRcdGluZGV4ICo9IHRoaXMuaXRlbVNpemU7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDBdID0geDtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgMV0gPSB5O1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAyXSA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYWVpXKGluZGV4LCB4LCB5LCB6LCB3KSB7XG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgMF0gPSB4O1xuXHRcdHRoaXMuYXJyYXlbaW5kZXggKyAxXSA9IHk7XG5cdFx0dGhpcy5hcnJheVtpbmRleCArIDJdID0gejtcblx0XHR0aGlzLmFycmF5W2luZGV4ICsgM10gPSB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0b25VcGxvYWQoY2FsbGJhY2spIHtcblx0XHR0aGlzLm9uVXBsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LCB0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRpdGVtU2l6ZTogdGhpcy5pdGVtU2l6ZSxcblx0XHRcdHR5cGU6IHRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdGFycmF5OiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxcblx0XHRcdG5vcm1hbGl6ZWQ6IHRoaXMubm9ybWFsaXplZFxuXHRcdH07XG5cdFx0aWYgKHRoaXMubmFtZSAhPT0gJycpIGRhdGEubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAodGhpcy51c2FnZSAhPT0gU3RhdGljRHJhd1VzYWdlKSBkYXRhLnVzYWdlID0gdGhpcy51c2FnZTtcblx0XHRpZiAodGhpcy51cGRhdGVSYW5nZS5vZmZzZXQgIT09IDAgfHwgdGhpcy51cGRhdGVSYW5nZS5jb3VudCAhPT0gLTEpIGRhdGEudXBkYXRlUmFuZ2UgPSB0aGlzLnVwZGF0ZVJhbmdlO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZSA9IHRydWU7IC8vXG5cbmNsYXNzIEludDhCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgSW50OEFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgVWludDhCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgVWludDhBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59XG5cbmNsYXNzIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59XG5cbmNsYXNzIEludDE2QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IEludDE2QXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBVaW50MTZCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgVWludDE2QXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufVxuXG5jbGFzcyBJbnQzMkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBJbnQzMkFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgVWludDMyQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkKSB7XG5cdFx0c3VwZXIobmV3IFVpbnQzMkFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBVaW50MTZBcnJheShhcnJheSksIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0fVxuXG59XG5cbkZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbmNsYXNzIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpIHtcblx0XHRzdXBlcihuZXcgRmxvYXQzMkFycmF5KGFycmF5KSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHR9XG5cbn1cblxuY2xhc3MgRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCkge1xuXHRcdHN1cGVyKG5ldyBGbG9hdDY0QXJyYXkoYXJyYXkpLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCk7XG5cdH1cblxufSAvL1xuXG5sZXQgX2lkJDEgPSAwO1xuXG5jb25zdCBfbTEgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX29iaiA9IC8qQF9fUFVSRV9fKi9uZXcgT2JqZWN0M0QoKTtcblxuY29uc3QgX29mZnNldCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfYm94JDEgPSAvKkBfX1BVUkVfXyovbmV3IEJveDMoKTtcblxuY29uc3QgX2JveE1vcnBoVGFyZ2V0cyA9IC8qQF9fUFVSRV9fKi9uZXcgQm94MygpO1xuXG5jb25zdCBfdmVjdG9yJDggPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgQnVmZmVyR2VvbWV0cnkgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaWQnLCB7XG5cdFx0XHR2YWx1ZTogX2lkJDErK1xuXHRcdH0pO1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdHRoaXMudHlwZSA9ICdCdWZmZXJHZW9tZXRyeSc7XG5cdFx0dGhpcy5pbmRleCA9IG51bGw7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzID0ge307XG5cdFx0dGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gZmFsc2U7XG5cdFx0dGhpcy5ncm91cHMgPSBbXTtcblx0XHR0aGlzLmJvdW5kaW5nQm94ID0gbnVsbDtcblx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDtcblx0XHR0aGlzLmRyYXdSYW5nZSA9IHtcblx0XHRcdHN0YXJ0OiAwLFxuXHRcdFx0Y291bnQ6IEluZmluaXR5XG5cdFx0fTtcblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cdH1cblxuXHRnZXRJbmRleCgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbmRleDtcblx0fVxuXG5cdHNldEluZGV4KGluZGV4KSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoaW5kZXgpKSB7XG5cdFx0XHR0aGlzLmluZGV4ID0gbmV3IChhcnJheU5lZWRzVWludDMyKGluZGV4KSA/IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA6IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSkoaW5kZXgsIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRBdHRyaWJ1dGUobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XG5cdH1cblxuXHRzZXRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKSB7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmlidXRlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVsZXRlQXR0cmlidXRlKG5hbWUpIHtcblx0XHRkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aGFzQXR0cmlidXRlKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRhZGRHcm91cChzdGFydCwgY291bnQsIG1hdGVyaWFsSW5kZXggPSAwKSB7XG5cdFx0dGhpcy5ncm91cHMucHVzaCh7XG5cdFx0XHRzdGFydDogc3RhcnQsXG5cdFx0XHRjb3VudDogY291bnQsXG5cdFx0XHRtYXRlcmlhbEluZGV4OiBtYXRlcmlhbEluZGV4XG5cdFx0fSk7XG5cdH1cblxuXHRjbGVhckdyb3VwcygpIHtcblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXHR9XG5cblx0c2V0RHJhd1JhbmdlKHN0YXJ0LCBjb3VudCkge1xuXHRcdHRoaXMuZHJhd1JhbmdlLnN0YXJ0ID0gc3RhcnQ7XG5cdFx0dGhpcy5kcmF3UmFuZ2UuY291bnQgPSBjb3VudDtcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtYXRyaXgpIHtcblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdGlmIChwb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwb3NpdGlvbi5hcHBseU1hdHJpeDQobWF0cml4KTtcblx0XHRcdHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBub3JtYWwgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsO1xuXG5cdFx0aWYgKG5vcm1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBub3JtYWxNYXRyaXggPSBuZXcgTWF0cml4MygpLmdldE5vcm1hbE1hdHJpeChtYXRyaXgpO1xuXHRcdFx0bm9ybWFsLmFwcGx5Tm9ybWFsTWF0cml4KG5vcm1hbE1hdHJpeCk7XG5cdFx0XHRub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhbmdlbnQgPSB0aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtcblxuXHRcdGlmICh0YW5nZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRhbmdlbnQudHJhbnNmb3JtRGlyZWN0aW9uKG1hdHJpeCk7XG5cdFx0XHR0YW5nZW50Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ib3VuZGluZ0JveCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFwcGx5UXVhdGVybmlvbihxKSB7XG5cdFx0X20xLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHEpO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX20xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvdGF0ZVgoYW5nbGUpIHtcblx0XHQvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHgtYXhpc1xuXHRcdF9tMS5tYWtlUm90YXRpb25YKGFuZ2xlKTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KF9tMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb3RhdGVZKGFuZ2xlKSB7XG5cdFx0Ly8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB5LWF4aXNcblx0XHRfbTEubWFrZVJvdGF0aW9uWShhbmdsZSk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NChfbTEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm90YXRlWihhbmdsZSkge1xuXHRcdC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgei1heGlzXG5cdFx0X20xLm1ha2VSb3RhdGlvblooYW5nbGUpO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX20xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRyYW5zbGF0ZSh4LCB5LCB6KSB7XG5cdFx0Ly8gdHJhbnNsYXRlIGdlb21ldHJ5XG5cdFx0X20xLm1ha2VUcmFuc2xhdGlvbih4LCB5LCB6KTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KF9tMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzY2FsZSh4LCB5LCB6KSB7XG5cdFx0Ly8gc2NhbGUgZ2VvbWV0cnlcblx0XHRfbTEubWFrZVNjYWxlKHgsIHksIHopO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoX20xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxvb2tBdCh2ZWN0b3IpIHtcblx0XHRfb2JqLmxvb2tBdCh2ZWN0b3IpO1xuXG5cdFx0X29iai51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KF9vYmoubWF0cml4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNlbnRlcigpIHtcblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXHRcdHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKF9vZmZzZXQpLm5lZ2F0ZSgpO1xuXHRcdHRoaXMudHJhbnNsYXRlKF9vZmZzZXQueCwgX29mZnNldC55LCBfb2Zmc2V0LnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVBvaW50cyhwb2ludHMpIHtcblx0XHRjb25zdCBwb3NpdGlvbiA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwb2ludCA9IHBvaW50c1tpXTtcblx0XHRcdHBvc2l0aW9uLnB1c2gocG9pbnQueCwgcG9pbnQueSwgcG9pbnQueiB8fCAwKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgMykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29tcHV0ZUJvdW5kaW5nQm94KCkge1xuXHRcdGlmICh0aGlzLmJvdW5kaW5nQm94ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJveDMoKTtcblx0XHR9XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uICYmIHBvc2l0aW9uLmlzR0xCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0IFwibWVzaC5mcnVzdHVtQ3VsbGVkXCIgdG8gXCJmYWxzZVwiLicsIHRoaXMpO1xuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSksIG5ldyBWZWN0b3IzKCtJbmZpbml0eSwgK0luZmluaXR5LCArSW5maW5pdHkpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uKTsgLy8gcHJvY2VzcyBtb3JwaCBhdHRyaWJ1dGVzIGlmIHByZXNlbnRcblxuXHRcdFx0aWYgKG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uW2ldO1xuXG5cdFx0XHRcdFx0X2JveCQxLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLCBfYm94JDEubWluKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KF92ZWN0b3IkOCk7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LCBfYm94JDEubWF4KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KF92ZWN0b3IkOCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChfYm94JDEubWluKTtcblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChfYm94JDEubWF4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCkgfHwgaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSkgfHwgaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlIFwicG9zaXRpb25cIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHRjb21wdXRlQm91bmRpbmdTcGhlcmUoKSB7XG5cdFx0aWYgKHRoaXMuYm91bmRpbmdTcGhlcmUgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBuZXcgU3BoZXJlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gPSB0aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbi5pc0dMQnVmZmVyQXR0cmlidXRlKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCBcIm1lc2guZnJ1c3R1bUN1bGxlZFwiIHRvIFwiZmFsc2VcIi4nLCB0aGlzKTtcblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBWZWN0b3IzKCksIEluZmluaXR5KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocG9zaXRpb24pIHtcblx0XHRcdC8vIGZpcnN0LCBmaW5kIHRoZSBjZW50ZXIgb2YgdGhlIGJvdW5kaW5nIHNwaGVyZVxuXHRcdFx0Y29uc3QgY2VudGVyID0gdGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7XG5cblx0XHRcdF9ib3gkMS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uKTsgLy8gcHJvY2VzcyBtb3JwaCBhdHRyaWJ1dGVzIGlmIHByZXNlbnRcblxuXG5cdFx0XHRpZiAobW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24pIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25baV07XG5cblx0XHRcdFx0XHRfYm94TW9ycGhUYXJnZXRzLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcblx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGRWZWN0b3JzKF9ib3gkMS5taW4sIF9ib3hNb3JwaFRhcmdldHMubWluKTtcblxuXHRcdFx0XHRcdFx0X2JveCQxLmV4cGFuZEJ5UG9pbnQoX3ZlY3RvciQ4KTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnMoX2JveCQxLm1heCwgX2JveE1vcnBoVGFyZ2V0cy5tYXgpO1xuXG5cdFx0XHRcdFx0XHRfYm94JDEuZXhwYW5kQnlQb2ludChfdmVjdG9yJDgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRfYm94JDEuZXhwYW5kQnlQb2ludChfYm94TW9ycGhUYXJnZXRzLm1pbik7XG5cblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KF9ib3hNb3JwaFRhcmdldHMubWF4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0X2JveCQxLmdldENlbnRlcihjZW50ZXIpOyAvLyBzZWNvbmQsIHRyeSB0byBmaW5kIGEgYm91bmRpbmdTcGhlcmUgd2l0aCBhIHJhZGl1cyBzbWFsbGVyIHRoYW4gdGhlXG5cdFx0XHQvLyBib3VuZGluZ1NwaGVyZSBvZiB0aGUgYm91bmRpbmdCb3g6IHNxcnQoMykgc21hbGxlciBpbiB0aGUgYmVzdCBjYXNlXG5cblxuXHRcdFx0bGV0IG1heFJhZGl1c1NxID0gMDtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gcG9zaXRpb24uY291bnQ7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdF92ZWN0b3IkOC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBpKTtcblxuXHRcdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoX3ZlY3RvciQ4KSk7XG5cdFx0XHR9IC8vIHByb2Nlc3MgbW9ycGggYXR0cmlidXRlcyBpZiBwcmVzZW50XG5cblxuXHRcdFx0aWYgKG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uW2ldO1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwLCBqbCA9IG1vcnBoQXR0cmlidXRlLmNvdW50OyBqIDwgamw7IGorKykge1xuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUsIGopO1xuXG5cdFx0XHRcdFx0XHRpZiAobW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcblx0XHRcdFx0XHRcdFx0X29mZnNldC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBqKTtcblxuXHRcdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkKF9vZmZzZXQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoX3ZlY3RvciQ4KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzID0gTWF0aC5zcXJ0KG1heFJhZGl1c1NxKTtcblxuXHRcdFx0aWYgKGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlIFwicG9zaXRpb25cIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb21wdXRlVGFuZ2VudHMoKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7IC8vIGJhc2VkIG9uIGh0dHA6Ly93d3cudGVyYXRob24uY29tL2NvZGUvdGFuZ2VudC5odG1sXG5cdFx0Ly8gKHBlciB2ZXJ0ZXggdGFuZ2VudHMpXG5cblx0XHRpZiAoaW5kZXggPT09IG51bGwgfHwgYXR0cmlidXRlcy5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZXMubm9ybWFsID09PSB1bmRlZmluZWQgfHwgYXR0cmlidXRlcy51diA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1diknKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpbmRpY2VzID0gaW5kZXguYXJyYXk7XG5cdFx0Y29uc3QgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcblx0XHRjb25zdCBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwuYXJyYXk7XG5cdFx0Y29uc3QgdXZzID0gYXR0cmlidXRlcy51di5hcnJheTtcblx0XHRjb25zdCBuVmVydGljZXMgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMztcblxuXHRcdGlmIChhdHRyaWJ1dGVzLnRhbmdlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3RhbmdlbnQnLCBuZXcgQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkoNCAqIG5WZXJ0aWNlcyksIDQpKTtcblx0XHR9XG5cblx0XHRjb25zdCB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC5hcnJheTtcblx0XHRjb25zdCB0YW4xID0gW10sXG5cdFx0XHRcdFx0dGFuMiA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykge1xuXHRcdFx0dGFuMVtpXSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHR0YW4yW2ldID0gbmV3IFZlY3RvcjMoKTtcblx0XHR9XG5cblx0XHRjb25zdCB2QSA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0dkIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdHZDID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHR1dkEgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRcdHV2QiA9IG5ldyBWZWN0b3IyKCksXG5cdFx0XHRcdFx0dXZDID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0XHRzZGlyID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHR0ZGlyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRyaWFuZ2xlKGEsIGIsIGMpIHtcblx0XHRcdHZBLmZyb21BcnJheShwb3NpdGlvbnMsIGEgKiAzKTtcblx0XHRcdHZCLmZyb21BcnJheShwb3NpdGlvbnMsIGIgKiAzKTtcblx0XHRcdHZDLmZyb21BcnJheShwb3NpdGlvbnMsIGMgKiAzKTtcblx0XHRcdHV2QS5mcm9tQXJyYXkodXZzLCBhICogMik7XG5cdFx0XHR1dkIuZnJvbUFycmF5KHV2cywgYiAqIDIpO1xuXHRcdFx0dXZDLmZyb21BcnJheSh1dnMsIGMgKiAyKTtcblx0XHRcdHZCLnN1Yih2QSk7XG5cdFx0XHR2Qy5zdWIodkEpO1xuXHRcdFx0dXZCLnN1Yih1dkEpO1xuXHRcdFx0dXZDLnN1Yih1dkEpO1xuXHRcdFx0Y29uc3QgciA9IDEuMCAvICh1dkIueCAqIHV2Qy55IC0gdXZDLnggKiB1dkIueSk7IC8vIHNpbGVudGx5IGlnbm9yZSBkZWdlbmVyYXRlIHV2IHRyaWFuZ2xlcyBoYXZpbmcgY29pbmNpZGVudCBvciBjb2xpbmVhciB2ZXJ0aWNlc1xuXG5cdFx0XHRpZiAoIWlzRmluaXRlKHIpKSByZXR1cm47XG5cdFx0XHRzZGlyLmNvcHkodkIpLm11bHRpcGx5U2NhbGFyKHV2Qy55KS5hZGRTY2FsZWRWZWN0b3IodkMsIC11dkIueSkubXVsdGlwbHlTY2FsYXIocik7XG5cdFx0XHR0ZGlyLmNvcHkodkMpLm11bHRpcGx5U2NhbGFyKHV2Qi54KS5hZGRTY2FsZWRWZWN0b3IodkIsIC11dkMueCkubXVsdGlwbHlTY2FsYXIocik7XG5cdFx0XHR0YW4xW2FdLmFkZChzZGlyKTtcblx0XHRcdHRhbjFbYl0uYWRkKHNkaXIpO1xuXHRcdFx0dGFuMVtjXS5hZGQoc2Rpcik7XG5cdFx0XHR0YW4yW2FdLmFkZCh0ZGlyKTtcblx0XHRcdHRhbjJbYl0uYWRkKHRkaXIpO1xuXHRcdFx0dGFuMltjXS5hZGQodGRpcik7XG5cdFx0fVxuXG5cdFx0bGV0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuXG5cdFx0aWYgKGdyb3Vwcy5sZW5ndGggPT09IDApIHtcblx0XHRcdGdyb3VwcyA9IFt7XG5cdFx0XHRcdHN0YXJ0OiAwLFxuXHRcdFx0XHRjb3VudDogaW5kaWNlcy5sZW5ndGhcblx0XHRcdH1dO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdGNvbnN0IHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRjb25zdCBjb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gc3RhcnQgKyBjb3VudDsgaiA8IGpsOyBqICs9IDMpIHtcblx0XHRcdFx0aGFuZGxlVHJpYW5nbGUoaW5kaWNlc1tqICsgMF0sIGluZGljZXNbaiArIDFdLCBpbmRpY2VzW2ogKyAyXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG1wID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHR0bXAyID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBuID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRuMiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVWZXJ0ZXgodikge1xuXHRcdFx0bi5mcm9tQXJyYXkobm9ybWFscywgdiAqIDMpO1xuXHRcdFx0bjIuY29weShuKTtcblx0XHRcdGNvbnN0IHQgPSB0YW4xW3ZdOyAvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxuXG5cdFx0XHR0bXAuY29weSh0KTtcblx0XHRcdHRtcC5zdWIobi5tdWx0aXBseVNjYWxhcihuLmRvdCh0KSkpLm5vcm1hbGl6ZSgpOyAvLyBDYWxjdWxhdGUgaGFuZGVkbmVzc1xuXG5cdFx0XHR0bXAyLmNyb3NzVmVjdG9ycyhuMiwgdCk7XG5cdFx0XHRjb25zdCB0ZXN0ID0gdG1wMi5kb3QodGFuMlt2XSk7XG5cdFx0XHRjb25zdCB3ID0gdGVzdCA8IDAuMCA/IC0xLjAgOiAxLjA7XG5cdFx0XHR0YW5nZW50c1t2ICogNF0gPSB0bXAueDtcblx0XHRcdHRhbmdlbnRzW3YgKiA0ICsgMV0gPSB0bXAueTtcblx0XHRcdHRhbmdlbnRzW3YgKiA0ICsgMl0gPSB0bXAuejtcblx0XHRcdHRhbmdlbnRzW3YgKiA0ICsgM10gPSB3O1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdGNvbnN0IHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRjb25zdCBjb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gc3RhcnQgKyBjb3VudDsgaiA8IGpsOyBqICs9IDMpIHtcblx0XHRcdFx0aGFuZGxlVmVydGV4KGluZGljZXNbaiArIDBdKTtcblx0XHRcdFx0aGFuZGxlVmVydGV4KGluZGljZXNbaiArIDFdKTtcblx0XHRcdFx0aGFuZGxlVmVydGV4KGluZGljZXNbaiArIDJdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb21wdXRlVmVydGV4Tm9ybWFscygpIHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKTtcblxuXHRcdGlmIChwb3NpdGlvbkF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgbm9ybWFsQXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ25vcm1hbCcpO1xuXG5cdFx0XHRpZiAobm9ybWFsQXR0cmlidXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9ybWFsQXR0cmlidXRlID0gbmV3IEJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9uQXR0cmlidXRlLmNvdW50ICogMyksIDMpO1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbm9ybWFsQXR0cmlidXRlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlc2V0IGV4aXN0aW5nIG5vcm1hbHMgdG8gemVyb1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBub3JtYWxBdHRyaWJ1dGUuY291bnQ7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWihpLCAwLCAwLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwQSA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRwQiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRwQyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBuQSA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRuQiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRuQyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBjYiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRhYiA9IG5ldyBWZWN0b3IzKCk7IC8vIGluZGV4ZWQgZWxlbWVudHNcblxuXHRcdFx0aWYgKGluZGV4KSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGluZGV4LmNvdW50OyBpIDwgaWw7IGkgKz0gMykge1xuXHRcdFx0XHRcdGNvbnN0IHZBID0gaW5kZXguZ2V0WChpICsgMCk7XG5cdFx0XHRcdFx0Y29uc3QgdkIgPSBpbmRleC5nZXRYKGkgKyAxKTtcblx0XHRcdFx0XHRjb25zdCB2QyA9IGluZGV4LmdldFgoaSArIDIpO1xuXHRcdFx0XHRcdHBBLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIHZBKTtcblx0XHRcdFx0XHRwQi5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCB2Qik7XG5cdFx0XHRcdFx0cEMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgdkMpO1xuXHRcdFx0XHRcdGNiLnN1YlZlY3RvcnMocEMsIHBCKTtcblx0XHRcdFx0XHRhYi5zdWJWZWN0b3JzKHBBLCBwQik7XG5cdFx0XHRcdFx0Y2IuY3Jvc3MoYWIpO1xuXHRcdFx0XHRcdG5BLmZyb21CdWZmZXJBdHRyaWJ1dGUobm9ybWFsQXR0cmlidXRlLCB2QSk7XG5cdFx0XHRcdFx0bkIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShub3JtYWxBdHRyaWJ1dGUsIHZCKTtcblx0XHRcdFx0XHRuQy5mcm9tQnVmZmVyQXR0cmlidXRlKG5vcm1hbEF0dHJpYnV0ZSwgdkMpO1xuXHRcdFx0XHRcdG5BLmFkZChjYik7XG5cdFx0XHRcdFx0bkIuYWRkKGNiKTtcblx0XHRcdFx0XHRuQy5hZGQoY2IpO1xuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVoodkEsIG5BLngsIG5BLnksIG5BLnopO1xuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVoodkIsIG5CLngsIG5CLnksIG5CLnopO1xuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVoodkMsIG5DLngsIG5DLnksIG5DLnopO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBub24taW5kZXhlZCBlbGVtZW50cyAodW5jb25uZWN0ZWQgdHJpYW5nbGUgc291cClcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBpbDsgaSArPSAzKSB7XG5cdFx0XHRcdFx0cEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSArIDApO1xuXHRcdFx0XHRcdHBCLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAxKTtcblx0XHRcdFx0XHRwQy5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMik7XG5cdFx0XHRcdFx0Y2Iuc3ViVmVjdG9ycyhwQywgcEIpO1xuXHRcdFx0XHRcdGFiLnN1YlZlY3RvcnMocEEsIHBCKTtcblx0XHRcdFx0XHRjYi5jcm9zcyhhYik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWihpICsgMCwgY2IueCwgY2IueSwgY2Iueik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWihpICsgMSwgY2IueCwgY2IueSwgY2Iueik7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWihpICsgMiwgY2IueCwgY2IueSwgY2Iueik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7XG5cdFx0XHRub3JtYWxBdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdG1lcmdlKGdlb21ldHJ5LCBvZmZzZXQpIHtcblx0XHRpZiAoIShnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LicsIGdlb21ldHJ5KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gJyArICdVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzW2tleV0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUxID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlQXJyYXkxID0gYXR0cmlidXRlMS5hcnJheTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZTIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheTIgPSBhdHRyaWJ1dGUyLmFycmF5O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlT2Zmc2V0ID0gYXR0cmlidXRlMi5pdGVtU2l6ZSAqIG9mZnNldDtcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGF0dHJpYnV0ZUFycmF5Mi5sZW5ndGgsIGF0dHJpYnV0ZUFycmF5MS5sZW5ndGggLSBhdHRyaWJ1dGVPZmZzZXQpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaiA9IGF0dHJpYnV0ZU9mZnNldDsgaSA8IGxlbmd0aDsgaSsrLCBqKyspIHtcblx0XHRcdFx0YXR0cmlidXRlQXJyYXkxW2pdID0gYXR0cmlidXRlQXJyYXkyW2ldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bm9ybWFsaXplTm9ybWFscygpIHtcblx0XHRjb25zdCBub3JtYWxzID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG5vcm1hbHMuY291bnQ7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRfdmVjdG9yJDguZnJvbUJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCBpKTtcblxuXHRcdFx0X3ZlY3RvciQ4Lm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRub3JtYWxzLnNldFhZWihpLCBfdmVjdG9yJDgueCwgX3ZlY3RvciQ4LnksIF92ZWN0b3IkOC56KTtcblx0XHR9XG5cdH1cblxuXHR0b05vbkluZGV4ZWQoKSB7XG5cdFx0ZnVuY3Rpb24gY29udmVydEJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGluZGljZXMpIHtcblx0XHRcdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmFycmF5O1xuXHRcdFx0Y29uc3QgaXRlbVNpemUgPSBhdHRyaWJ1dGUuaXRlbVNpemU7XG5cdFx0XHRjb25zdCBub3JtYWxpemVkID0gYXR0cmlidXRlLm5vcm1hbGl6ZWQ7XG5cdFx0XHRjb25zdCBhcnJheTIgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IoaW5kaWNlcy5sZW5ndGggKiBpdGVtU2l6ZSk7XG5cdFx0XHRsZXQgaW5kZXggPSAwLFxuXHRcdFx0XHRcdGluZGV4MiA9IDA7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gaW5kaWNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzW2ldICogYXR0cmlidXRlLmRhdGEuc3RyaWRlICsgYXR0cmlidXRlLm9mZnNldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNbaV0gKiBpdGVtU2l6ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgaXRlbVNpemU7IGorKykge1xuXHRcdFx0XHRcdGFycmF5MltpbmRleDIrK10gPSBhcnJheVtpbmRleCsrXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZShhcnJheTIsIGl0ZW1TaXplLCBub3JtYWxpemVkKTtcblx0XHR9IC8vXG5cblxuXHRcdGlmICh0aGlzLmluZGV4ID09PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLicpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IHRoaXMuaW5kZXguYXJyYXk7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsgLy8gYXR0cmlidXRlc1xuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cdFx0XHRjb25zdCBuZXdBdHRyaWJ1dGUgPSBjb252ZXJ0QnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kaWNlcyk7XG5cdFx0XHRnZW9tZXRyeTIuc2V0QXR0cmlidXRlKG5hbWUsIG5ld0F0dHJpYnV0ZSk7XG5cdFx0fSAvLyBtb3JwaCBhdHRyaWJ1dGVzXG5cblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIG1vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgbW9ycGhBcnJheSA9IFtdO1xuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNbbmFtZV07IC8vIG1vcnBoQXR0cmlidXRlOiBhcnJheSBvZiBGbG9hdDMyQnVmZmVyQXR0cmlidXRlc1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlW2ldO1xuXHRcdFx0XHRjb25zdCBuZXdBdHRyaWJ1dGUgPSBjb252ZXJ0QnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5kaWNlcyk7XG5cdFx0XHRcdG1vcnBoQXJyYXkucHVzaChuZXdBdHRyaWJ1dGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRnZW9tZXRyeTIubW9ycGhBdHRyaWJ1dGVzW25hbWVdID0gbW9ycGhBcnJheTtcblx0XHR9XG5cblx0XHRnZW9tZXRyeTIubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlOyAvLyBncm91cHNcblxuXHRcdGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdGdlb21ldHJ5Mi5hZGRHcm91cChncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZW9tZXRyeTI7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ0J1ZmZlckdlb21ldHJ5Jyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnQnVmZmVyR2VvbWV0cnkudG9KU09OJ1xuXHRcdFx0fVxuXHRcdH07IC8vIHN0YW5kYXJkIEJ1ZmZlckdlb21ldHJ5IHNlcmlhbGl6YXRpb25cblxuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRkYXRhLnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0aWYgKHRoaXMubmFtZSAhPT0gJycpIGRhdGEubmFtZSA9IHRoaXMubmFtZTtcblx0XHRpZiAoT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoID4gMCkgZGF0YS51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7XG5cblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcblx0XHRcdFx0aWYgKHBhcmFtZXRlcnNba2V5XSAhPT0gdW5kZWZpbmVkKSBkYXRhW2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0gLy8gZm9yIHNpbXBsaWNpdHkgdGhlIGNvZGUgYXNzdW1lcyBhdHRyaWJ1dGVzIGFyZSBub3Qgc2hhcmVkIGFjcm9zcyBnZW9tZXRyaWVzLCBzZWUgIzE1ODExXG5cblxuXHRcdGRhdGEuZGF0YSA9IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHt9XG5cdFx0fTtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG5cblx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdGRhdGEuZGF0YS5pbmRleCA9IHtcblx0XHRcdFx0dHlwZTogaW5kZXguYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdFx0YXJyYXk6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluZGV4LmFycmF5KVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0ZGF0YS5kYXRhLmF0dHJpYnV0ZXNba2V5XSA9IGF0dHJpYnV0ZS50b0pTT04oZGF0YS5kYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHRsZXQgaGFzTW9ycGhBdHRyaWJ1dGVzID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlQXJyYXkgPSB0aGlzLm1vcnBoQXR0cmlidXRlc1trZXldO1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBcnJheVtpXTtcblx0XHRcdFx0YXJyYXkucHVzaChhdHRyaWJ1dGUudG9KU09OKGRhdGEuZGF0YSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXJyYXkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRtb3JwaEF0dHJpYnV0ZXNba2V5XSA9IGFycmF5O1xuXHRcdFx0XHRoYXNNb3JwaEF0dHJpYnV0ZXMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNNb3JwaEF0dHJpYnV0ZXMpIHtcblx0XHRcdGRhdGEuZGF0YS5tb3JwaEF0dHJpYnV0ZXMgPSBtb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRkYXRhLmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuXG5cdFx0aWYgKGdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRkYXRhLmRhdGEuZ3JvdXBzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cHMpKTtcblx0XHR9XG5cblx0XHRjb25zdCBib3VuZGluZ1NwaGVyZSA9IHRoaXMuYm91bmRpbmdTcGhlcmU7XG5cblx0XHRpZiAoYm91bmRpbmdTcGhlcmUgIT09IG51bGwpIHtcblx0XHRcdGRhdGEuZGF0YS5ib3VuZGluZ1NwaGVyZSA9IHtcblx0XHRcdFx0Y2VudGVyOiBib3VuZGluZ1NwaGVyZS5jZW50ZXIudG9BcnJheSgpLFxuXHRcdFx0XHRyYWRpdXM6IGJvdW5kaW5nU3BoZXJlLnJhZGl1c1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdC8vIHJlc2V0XG5cdFx0dGhpcy5pbmRleCA9IG51bGw7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzID0ge307XG5cdFx0dGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXHRcdHRoaXMuYm91bmRpbmdCb3ggPSBudWxsO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBudWxsOyAvLyB1c2VkIGZvciBzdG9yaW5nIGNsb25lZCwgc2hhcmVkIGRhdGFcblxuXHRcdGNvbnN0IGRhdGEgPSB7fTsgLy8gbmFtZVxuXG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7IC8vIGluZGV4XG5cblx0XHRjb25zdCBpbmRleCA9IHNvdXJjZS5pbmRleDtcblxuXHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5zZXRJbmRleChpbmRleC5jbG9uZShkYXRhKSk7XG5cdFx0fSAvLyBhdHRyaWJ1dGVzXG5cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBzb3VyY2UuYXR0cmlidXRlcztcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlLmNsb25lKGRhdGEpKTtcblx0XHR9IC8vIG1vcnBoIGF0dHJpYnV0ZXNcblxuXG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gc291cmNlLm1vcnBoQXR0cmlidXRlcztcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1tuYW1lXTsgLy8gbW9ycGhBdHRyaWJ1dGU6IGFycmF5IG9mIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGVzXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGFycmF5LnB1c2gobW9ycGhBdHRyaWJ1dGVbaV0uY2xvbmUoZGF0YSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm1vcnBoQXR0cmlidXRlc1tuYW1lXSA9IGFycmF5O1xuXHRcdH1cblxuXHRcdHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBzb3VyY2UubW9ycGhUYXJnZXRzUmVsYXRpdmU7IC8vIGdyb3Vwc1xuXG5cdFx0Y29uc3QgZ3JvdXBzID0gc291cmNlLmdyb3VwcztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cdFx0XHR0aGlzLmFkZEdyb3VwKGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCk7XG5cdFx0fSAvLyBib3VuZGluZyBib3hcblxuXG5cdFx0Y29uc3QgYm91bmRpbmdCb3ggPSBzb3VyY2UuYm91bmRpbmdCb3g7XG5cblx0XHRpZiAoYm91bmRpbmdCb3ggIT09IG51bGwpIHtcblx0XHRcdHRoaXMuYm91bmRpbmdCb3ggPSBib3VuZGluZ0JveC5jbG9uZSgpO1xuXHRcdH0gLy8gYm91bmRpbmcgc3BoZXJlXG5cblxuXHRcdGNvbnN0IGJvdW5kaW5nU3BoZXJlID0gc291cmNlLmJvdW5kaW5nU3BoZXJlO1xuXG5cdFx0aWYgKGJvdW5kaW5nU3BoZXJlICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gYm91bmRpbmdTcGhlcmUuY2xvbmUoKTtcblx0XHR9IC8vIGRyYXcgcmFuZ2VcblxuXG5cdFx0dGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzb3VyY2UuZHJhd1JhbmdlLnN0YXJ0O1xuXHRcdHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gc291cmNlLmRyYXdSYW5nZS5jb3VudDsgLy8gdXNlciBkYXRhXG5cblx0XHR0aGlzLnVzZXJEYXRhID0gc291cmNlLnVzZXJEYXRhOyAvLyBnZW9tZXRyeSBnZW5lcmF0b3IgcGFyYW1ldGVyc1xuXG5cdFx0aWYgKHNvdXJjZS5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHRoaXMucGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS5wYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdHR5cGU6ICdkaXNwb3NlJ1xuXHRcdH0pO1xuXHR9XG5cbn1cblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnkgPSB0cnVlO1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCQyID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9yYXkkMiA9IC8qQF9fUFVSRV9fKi9uZXcgUmF5KCk7XG5cbmNvbnN0IF9zcGhlcmUkMyA9IC8qQF9fUFVSRV9fKi9uZXcgU3BoZXJlKCk7XG5cbmNvbnN0IF92QSQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92QiQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92QyQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90ZW1wQSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdGVtcEIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RlbXBDID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9tb3JwaEEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX21vcnBoQiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbW9ycGhDID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF91dkEkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jb25zdCBfdXZCJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY29uc3QgX3V2QyQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBNZXNoIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLCBtYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCgpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaCc7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHR0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cblx0XHRpZiAoc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IHNvdXJjZS5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKTtcblx0XHR9XG5cblx0XHRpZiAoc291cmNlLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS5tb3JwaFRhcmdldERpY3Rpb25hcnkpO1xuXHRcdH1cblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1vcnBoQXR0cmlidXRlcyk7XG5cblx0XHRcdGlmIChrZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNba2V5c1swXV07XG5cblx0XHRcdFx0aWYgKG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IFtdO1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGxldCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lID0gbW9ycGhBdHRyaWJ1dGVbbV0ubmFtZSB8fCBTdHJpbmcobSk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbmFtZV0gPSBtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cblx0XHRcdGlmIChtb3JwaFRhcmdldHMgIT09IHVuZGVmaW5lZCAmJiBtb3JwaFRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblx0XHRpZiAobWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXlcblxuXHRcdGlmIChnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRfc3BoZXJlJDMuY29weShnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cblx0XHRfc3BoZXJlJDMuYXBwbHlNYXRyaXg0KG1hdHJpeFdvcmxkKTtcblxuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSQzKSA9PT0gZmFsc2UpIHJldHVybjsgLy9cblxuXHRcdF9pbnZlcnNlTWF0cml4JDIuY29weShtYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRfcmF5JDIuY29weShyYXljYXN0ZXIucmF5KS5hcHBseU1hdHJpeDQoX2ludmVyc2VNYXRyaXgkMik7IC8vIENoZWNrIGJvdW5kaW5nQm94IGJlZm9yZSBjb250aW51aW5nXG5cblxuXHRcdGlmIChnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKF9yYXkkMi5pbnRlcnNlY3RzQm94KGdlb21ldHJ5LmJvdW5kaW5nQm94KSA9PT0gZmFsc2UpIHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgaW50ZXJzZWN0aW9uO1xuXG5cdFx0aWYgKGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0XHRjb25zdCBtb3JwaFBvc2l0aW9uID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblx0XHRcdGNvbnN0IHV2ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djtcblx0XHRcdGNvbnN0IHV2MiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudXYyO1xuXHRcdFx0Y29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXHRcdFx0Y29uc3QgZHJhd1JhbmdlID0gZ2VvbWV0cnkuZHJhd1JhbmdlO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdFx0Ly8gaW5kZXhlZCBidWZmZXIgZ2VvbWV0cnlcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsW2dyb3VwLm1hdGVyaWFsSW5kZXhdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChncm91cC5zdGFydCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4LmNvdW50LCBNYXRoLm1pbihncm91cC5zdGFydCArIGdyb3VwLmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpKTtcblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IHN0YXJ0LCBqbCA9IGVuZDsgaiA8IGpsOyBqICs9IDMpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoaik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGIgPSBpbmRleC5nZXRYKGogKyAxKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4LmdldFgoaiArIDIpO1xuXHRcdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKHRoaXMsIGdyb3VwTWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpbnRlcnNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vcihqIC8gMyk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3NcblxuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlLm1hdGVyaWFsSW5kZXggPSBncm91cC5tYXRlcmlhbEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbihpbmRleC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WChpKTtcblx0XHRcdFx0XHRcdGNvbnN0IGIgPSBpbmRleC5nZXRYKGkgKyAxKTtcblx0XHRcdFx0XHRcdGNvbnN0IGMgPSBpbmRleC5nZXRYKGkgKyAyKTtcblx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24odGhpcywgbWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaW50ZXJzZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGkgLyAzKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIG5vbi1pbmRleGVkIGJ1ZmZlciBnZW9tZXRyeVxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF07XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KGdyb3VwLnN0YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4ocG9zaXRpb24uY291bnQsIE1hdGgubWluKGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCkpO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhID0gajtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYiA9IGogKyAxO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjID0gaiArIDI7XG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24odGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGludGVyc2VjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGogLyAzKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3NcblxuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlLm1hdGVyaWFsSW5kZXggPSBncm91cC5tYXRlcmlhbEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbihwb3NpdGlvbi5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhID0gaTtcblx0XHRcdFx0XHRcdGNvbnN0IGIgPSBpICsgMTtcblx0XHRcdFx0XHRcdGNvbnN0IGMgPSBpICsgMjtcblx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24odGhpcywgbWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaW50ZXJzZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGkgLyAzKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3NcblxuXHRcdFx0XHRcdFx0XHRpbnRlcnNlY3RzLnB1c2goaW50ZXJzZWN0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdlb21ldHJ5LmlzR2VvbWV0cnkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9XG5cbn1cblxuTWVzaC5wcm90b3R5cGUuaXNNZXNoID0gdHJ1ZTtcblxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24ob2JqZWN0LCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIHBBLCBwQiwgcEMsIHBvaW50KSB7XG5cdGxldCBpbnRlcnNlY3Q7XG5cblx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB7XG5cdFx0aW50ZXJzZWN0ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHBDLCBwQiwgcEEsIHRydWUsIHBvaW50KTtcblx0fSBlbHNlIHtcblx0XHRpbnRlcnNlY3QgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUocEEsIHBCLCBwQywgbWF0ZXJpYWwuc2lkZSAhPT0gRG91YmxlU2lkZSwgcG9pbnQpO1xuXHR9XG5cblx0aWYgKGludGVyc2VjdCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0X2ludGVyc2VjdGlvblBvaW50V29ybGQuY29weShwb2ludCk7XG5cblx0X2ludGVyc2VjdGlvblBvaW50V29ybGQuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZCk7XG5cblx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkKTtcblx0aWYgKGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHtcblx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0cG9pbnQ6IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNsb25lKCksXG5cdFx0b2JqZWN0OiBvYmplY3Rcblx0fTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbihvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcG9zaXRpb24sIG1vcnBoUG9zaXRpb24sIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLCB1diwgdXYyLCBhLCBiLCBjKSB7XG5cdF92QSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGEpO1xuXG5cdF92QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGIpO1xuXG5cdF92QyQxLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGMpO1xuXG5cdGNvbnN0IG1vcnBoSW5mbHVlbmNlcyA9IG9iamVjdC5tb3JwaFRhcmdldEluZmx1ZW5jZXM7XG5cblx0aWYgKG1vcnBoUG9zaXRpb24gJiYgbW9ycGhJbmZsdWVuY2VzKSB7XG5cdFx0X21vcnBoQS5zZXQoMCwgMCwgMCk7XG5cblx0XHRfbW9ycGhCLnNldCgwLCAwLCAwKTtcblxuXHRcdF9tb3JwaEMuc2V0KDAsIDAsIDApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbW9ycGhQb3NpdGlvbi5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbmZsdWVuY2UgPSBtb3JwaEluZmx1ZW5jZXNbaV07XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoUG9zaXRpb25baV07XG5cdFx0XHRpZiAoaW5mbHVlbmNlID09PSAwKSBjb250aW51ZTtcblxuXHRcdFx0X3RlbXBBLmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUsIGEpO1xuXG5cdFx0XHRfdGVtcEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSwgYik7XG5cblx0XHRcdF90ZW1wQy5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoQXR0cmlidXRlLCBjKTtcblxuXHRcdFx0aWYgKG1vcnBoVGFyZ2V0c1JlbGF0aXZlKSB7XG5cdFx0XHRcdF9tb3JwaEEuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQSwgaW5mbHVlbmNlKTtcblxuXHRcdFx0XHRfbW9ycGhCLmFkZFNjYWxlZFZlY3RvcihfdGVtcEIsIGluZmx1ZW5jZSk7XG5cblx0XHRcdFx0X21vcnBoQy5hZGRTY2FsZWRWZWN0b3IoX3RlbXBDLCBpbmZsdWVuY2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X21vcnBoQS5hZGRTY2FsZWRWZWN0b3IoX3RlbXBBLnN1YihfdkEkMSksIGluZmx1ZW5jZSk7XG5cblx0XHRcdFx0X21vcnBoQi5hZGRTY2FsZWRWZWN0b3IoX3RlbXBCLnN1YihfdkIkMSksIGluZmx1ZW5jZSk7XG5cblx0XHRcdFx0X21vcnBoQy5hZGRTY2FsZWRWZWN0b3IoX3RlbXBDLnN1YihfdkMkMSksIGluZmx1ZW5jZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0X3ZBJDEuYWRkKF9tb3JwaEEpO1xuXG5cdFx0X3ZCJDEuYWRkKF9tb3JwaEIpO1xuXG5cdFx0X3ZDJDEuYWRkKF9tb3JwaEMpO1xuXHR9XG5cblx0aWYgKG9iamVjdC5pc1NraW5uZWRNZXNoKSB7XG5cdFx0b2JqZWN0LmJvbmVUcmFuc2Zvcm0oYSwgX3ZBJDEpO1xuXHRcdG9iamVjdC5ib25lVHJhbnNmb3JtKGIsIF92QiQxKTtcblx0XHRvYmplY3QuYm9uZVRyYW5zZm9ybShjLCBfdkMkMSk7XG5cdH1cblxuXHRjb25zdCBpbnRlcnNlY3Rpb24gPSBjaGVja0ludGVyc2VjdGlvbihvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgX3ZBJDEsIF92QiQxLCBfdkMkMSwgX2ludGVyc2VjdGlvblBvaW50KTtcblxuXHRpZiAoaW50ZXJzZWN0aW9uKSB7XG5cdFx0aWYgKHV2KSB7XG5cdFx0XHRfdXZBJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1diwgYSk7XG5cblx0XHRcdF91dkIkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2LCBiKTtcblxuXHRcdFx0X3V2QyQxLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYsIGMpO1xuXG5cdFx0XHRpbnRlcnNlY3Rpb24udXYgPSBUcmlhbmdsZS5nZXRVVihfaW50ZXJzZWN0aW9uUG9pbnQsIF92QSQxLCBfdkIkMSwgX3ZDJDEsIF91dkEkMSwgX3V2QiQxLCBfdXZDJDEsIG5ldyBWZWN0b3IyKCkpO1xuXHRcdH1cblxuXHRcdGlmICh1djIpIHtcblx0XHRcdF91dkEkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYSk7XG5cblx0XHRcdF91dkIkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYik7XG5cblx0XHRcdF91dkMkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYyk7XG5cblx0XHRcdGludGVyc2VjdGlvbi51djIgPSBUcmlhbmdsZS5nZXRVVihfaW50ZXJzZWN0aW9uUG9pbnQsIF92QSQxLCBfdkIkMSwgX3ZDJDEsIF91dkEkMSwgX3V2QiQxLCBfdXZDJDEsIG5ldyBWZWN0b3IyKCkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZhY2UgPSB7XG5cdFx0XHRhOiBhLFxuXHRcdFx0YjogYixcblx0XHRcdGM6IGMsXG5cdFx0XHRub3JtYWw6IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRtYXRlcmlhbEluZGV4OiAwXG5cdFx0fTtcblx0XHRUcmlhbmdsZS5nZXROb3JtYWwoX3ZBJDEsIF92QiQxLCBfdkMkMSwgZmFjZS5ub3JtYWwpO1xuXHRcdGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTtcblx0fVxuXG5cdHJldHVybiBpbnRlcnNlY3Rpb247XG59XG5cbmNsYXNzIEJveEdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGRlcHRoID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSwgZGVwdGhTZWdtZW50cyA9IDEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdCb3hHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHRkZXB0aDogZGVwdGgsXG5cdFx0XHR3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLFxuXHRcdFx0aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLFxuXHRcdFx0ZGVwdGhTZWdtZW50czogZGVwdGhTZWdtZW50c1xuXHRcdH07XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzOyAvLyBzZWdtZW50c1xuXG5cdFx0d2lkdGhTZWdtZW50cyA9IE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cyk7XG5cdFx0aGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKGhlaWdodFNlZ21lbnRzKTtcblx0XHRkZXB0aFNlZ21lbnRzID0gTWF0aC5mbG9vcihkZXB0aFNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgbnVtYmVyT2ZWZXJ0aWNlcyA9IDA7XG5cdFx0bGV0IGdyb3VwU3RhcnQgPSAwOyAvLyBidWlsZCBlYWNoIHNpZGUgb2YgdGhlIGJveCBnZW9tZXRyeVxuXG5cdFx0YnVpbGRQbGFuZSgneicsICd5JywgJ3gnLCAtMSwgLTEsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBkZXB0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgMCk7IC8vIHB4XG5cblx0XHRidWlsZFBsYW5lKCd6JywgJ3knLCAneCcsIDEsIC0xLCBkZXB0aCwgaGVpZ2h0LCAtd2lkdGgsIGRlcHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCAxKTsgLy8gbnhcblxuXHRcdGJ1aWxkUGxhbmUoJ3gnLCAneicsICd5JywgMSwgMSwgd2lkdGgsIGRlcHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGRlcHRoU2VnbWVudHMsIDIpOyAvLyBweVxuXG5cdFx0YnVpbGRQbGFuZSgneCcsICd6JywgJ3knLCAxLCAtMSwgd2lkdGgsIGRlcHRoLCAtaGVpZ2h0LCB3aWR0aFNlZ21lbnRzLCBkZXB0aFNlZ21lbnRzLCAzKTsgLy8gbnlcblxuXHRcdGJ1aWxkUGxhbmUoJ3gnLCAneScsICd6JywgMSwgLTEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgNCk7IC8vIHB6XG5cblx0XHRidWlsZFBsYW5lKCd4JywgJ3knLCAneicsIC0xLCAtMSwgd2lkdGgsIGhlaWdodCwgLWRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgNSk7IC8vIG56XG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXG5cdFx0ZnVuY3Rpb24gYnVpbGRQbGFuZSh1LCB2LCB3LCB1ZGlyLCB2ZGlyLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ3JpZFgsIGdyaWRZLCBtYXRlcmlhbEluZGV4KSB7XG5cdFx0XHRjb25zdCBzZWdtZW50V2lkdGggPSB3aWR0aCAvIGdyaWRYO1xuXHRcdFx0Y29uc3Qgc2VnbWVudEhlaWdodCA9IGhlaWdodCAvIGdyaWRZO1xuXHRcdFx0Y29uc3Qgd2lkdGhIYWxmID0gd2lkdGggLyAyO1xuXHRcdFx0Y29uc3QgaGVpZ2h0SGFsZiA9IGhlaWdodCAvIDI7XG5cdFx0XHRjb25zdCBkZXB0aEhhbGYgPSBkZXB0aCAvIDI7XG5cdFx0XHRjb25zdCBncmlkWDEgPSBncmlkWCArIDE7XG5cdFx0XHRjb25zdCBncmlkWTEgPSBncmlkWSArIDE7XG5cdFx0XHRsZXQgdmVydGV4Q291bnRlciA9IDA7XG5cdFx0XHRsZXQgZ3JvdXBDb3VudCA9IDA7XG5cdFx0XHRjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOyAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBncmlkWTE7IGl5KyspIHtcblx0XHRcdFx0Y29uc3QgeSA9IGl5ICogc2VnbWVudEhlaWdodCAtIGhlaWdodEhhbGY7XG5cblx0XHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXgrKykge1xuXHRcdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRXaWR0aCAtIHdpZHRoSGFsZjsgLy8gc2V0IHZhbHVlcyB0byBjb3JyZWN0IHZlY3RvciBjb21wb25lbnRcblxuXHRcdFx0XHRcdHZlY3Rvclt1XSA9IHggKiB1ZGlyO1xuXHRcdFx0XHRcdHZlY3Rvclt2XSA9IHkgKiB2ZGlyO1xuXHRcdFx0XHRcdHZlY3Rvclt3XSA9IGRlcHRoSGFsZjsgLy8gbm93IGFwcGx5IHZlY3RvciB0byB2ZXJ0ZXggYnVmZmVyXG5cblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnopOyAvLyBzZXQgdmFsdWVzIHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudFxuXG5cdFx0XHRcdFx0dmVjdG9yW3VdID0gMDtcblx0XHRcdFx0XHR2ZWN0b3Jbdl0gPSAwO1xuXHRcdFx0XHRcdHZlY3Rvclt3XSA9IGRlcHRoID4gMCA/IDEgOiAtMTsgLy8gbm93IGFwcGx5IHZlY3RvciB0byBub3JtYWwgYnVmZmVyXG5cblx0XHRcdFx0XHRub3JtYWxzLnB1c2godmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3Iueik7IC8vIHV2c1xuXG5cdFx0XHRcdFx0dXZzLnB1c2goaXggLyBncmlkWCk7XG5cdFx0XHRcdFx0dXZzLnB1c2goMSAtIGl5IC8gZ3JpZFkpOyAvLyBjb3VudGVyc1xuXG5cdFx0XHRcdFx0dmVydGV4Q291bnRlciArPSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGluZGljZXNcblx0XHRcdC8vIDEuIHlvdSBuZWVkIHRocmVlIGluZGljZXMgdG8gZHJhdyBhIHNpbmdsZSBmYWNlXG5cdFx0XHQvLyAyLiBhIHNpbmdsZSBzZWdtZW50IGNvbnNpc3RzIG9mIHR3byBmYWNlc1xuXHRcdFx0Ly8gMy4gc28gd2UgbmVlZCB0byBnZW5lcmF0ZSBzaXggKDIqMykgaW5kaWNlcyBwZXIgc2VnbWVudFxuXG5cblx0XHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBncmlkWTsgaXkrKykge1xuXHRcdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgZ3JpZFg7IGl4KyspIHtcblx0XHRcdFx0XHRjb25zdCBhID0gbnVtYmVyT2ZWZXJ0aWNlcyArIGl4ICsgZ3JpZFgxICogaXk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRYMSAqIChpeSArIDEpO1xuXHRcdFx0XHRcdGNvbnN0IGMgPSBudW1iZXJPZlZlcnRpY2VzICsgKGl4ICsgMSkgKyBncmlkWDEgKiAoaXkgKyAxKTtcblx0XHRcdFx0XHRjb25zdCBkID0gbnVtYmVyT2ZWZXJ0aWNlcyArIChpeCArIDEpICsgZ3JpZFgxICogaXk7IC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpOyAvLyBpbmNyZWFzZSBjb3VudGVyXG5cblx0XHRcdFx0XHRncm91cENvdW50ICs9IDY7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gYWRkIGEgZ3JvdXAgdG8gdGhlIGdlb21ldHJ5LiB0aGlzIHdpbGwgZW5zdXJlIG11bHRpIG1hdGVyaWFsIHN1cHBvcnRcblxuXG5cdFx0XHRzY29wZS5hZGRHcm91cChncm91cFN0YXJ0LCBncm91cENvdW50LCBtYXRlcmlhbEluZGV4KTsgLy8gY2FsY3VsYXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzXG5cblx0XHRcdGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDsgLy8gdXBkYXRlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlc1xuXG5cdFx0XHRudW1iZXJPZlZlcnRpY2VzICs9IHZlcnRleENvdW50ZXI7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IEJveEdlb21ldHJ5KGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0LCBkYXRhLmRlcHRoLCBkYXRhLndpZHRoU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEuZGVwdGhTZWdtZW50cyk7XG5cdH1cblxufVxuXG4vKipcbiAqIFVuaWZvcm0gVXRpbGl0aWVzXG4gKi9cbmZ1bmN0aW9uIGNsb25lVW5pZm9ybXMoc3JjKSB7XG5cdGNvbnN0IGRzdCA9IHt9O1xuXG5cdGZvciAoY29uc3QgdSBpbiBzcmMpIHtcblx0XHRkc3RbdV0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcCBpbiBzcmNbdV0pIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gc3JjW3VdW3BdO1xuXG5cdFx0XHRpZiAocHJvcGVydHkgJiYgKHByb3BlcnR5LmlzQ29sb3IgfHwgcHJvcGVydHkuaXNNYXRyaXgzIHx8IHByb3BlcnR5LmlzTWF0cml4NCB8fCBwcm9wZXJ0eS5pc1ZlY3RvcjIgfHwgcHJvcGVydHkuaXNWZWN0b3IzIHx8IHByb3BlcnR5LmlzVmVjdG9yNCB8fCBwcm9wZXJ0eS5pc1RleHR1cmUgfHwgcHJvcGVydHkuaXNRdWF0ZXJuaW9uKSkge1xuXHRcdFx0XHRkc3RbdV1bcF0gPSBwcm9wZXJ0eS5jbG9uZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHRcdFx0XHRkc3RbdV1bcF0gPSBwcm9wZXJ0eS5zbGljZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZHN0W3VdW3BdID0gcHJvcGVydHk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cbmZ1bmN0aW9uIG1lcmdlVW5pZm9ybXModW5pZm9ybXMpIHtcblx0Y29uc3QgbWVyZ2VkID0ge307XG5cblx0Zm9yIChsZXQgdSA9IDA7IHUgPCB1bmlmb3Jtcy5sZW5ndGg7IHUrKykge1xuXHRcdGNvbnN0IHRtcCA9IGNsb25lVW5pZm9ybXModW5pZm9ybXNbdV0pO1xuXG5cdFx0Zm9yIChjb25zdCBwIGluIHRtcCkge1xuXHRcdFx0bWVyZ2VkW3BdID0gdG1wW3BdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtZXJnZWQ7XG59IC8vIExlZ2FjeVxuXG5jb25zdCBVbmlmb3Jtc1V0aWxzID0ge1xuXHRjbG9uZTogY2xvbmVVbmlmb3Jtcyxcblx0bWVyZ2U6IG1lcmdlVW5pZm9ybXNcbn07XG5cbnZhciBkZWZhdWx0X3ZlcnRleCA9IFwidm9pZCBtYWluKCkge1xcblxcdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcXG59XCI7XG5cbnZhciBkZWZhdWx0X2ZyYWdtZW50ID0gXCJ2b2lkIG1haW4oKSB7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XFxufVwiO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0ZGVmaW5lczogeyBcImxhYmVsXCIgOiBcInZhbHVlXCIgfSxcbiAqXHR1bmlmb3JtczogeyBcInBhcmFtZXRlcjFcIjogeyB2YWx1ZTogMS4wIH0sIFwicGFyYW1ldGVyMlwiOiB7IHZhbHVlMjogMiB9IH0sXG4gKlxuICpcdGZyYWdtZW50U2hhZGVyOiA8c3RyaW5nPixcbiAqXHR2ZXJ0ZXhTaGFkZXI6IDxzdHJpbmc+LFxuICpcbiAqXHR3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqXHR3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKlxuICpcdGxpZ2h0czogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgU2hhZGVyTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTaGFkZXJNYXRlcmlhbCc7XG5cdFx0dGhpcy5kZWZpbmVzID0ge307XG5cdFx0dGhpcy51bmlmb3JtcyA9IHt9O1xuXHRcdHRoaXMudmVydGV4U2hhZGVyID0gZGVmYXVsdF92ZXJ0ZXg7XG5cdFx0dGhpcy5mcmFnbWVudFNoYWRlciA9IGRlZmF1bHRfZnJhZ21lbnQ7XG5cdFx0dGhpcy5saW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMuZm9nID0gZmFsc2U7IC8vIHNldCB0byB1c2Ugc2NlbmUgZm9nXG5cblx0XHR0aGlzLmxpZ2h0cyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNjZW5lIGxpZ2h0c1xuXG5cdFx0dGhpcy5jbGlwcGluZyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHVzZXItZGVmaW5lZCBjbGlwcGluZyBwbGFuZXNcblxuXHRcdHRoaXMuZXh0ZW5zaW9ucyA9IHtcblx0XHRcdGRlcml2YXRpdmVzOiBmYWxzZSxcblx0XHRcdC8vIHNldCB0byB1c2UgZGVyaXZhdGl2ZXNcblx0XHRcdGZyYWdEZXB0aDogZmFsc2UsXG5cdFx0XHQvLyBzZXQgdG8gdXNlIGZyYWdtZW50IGRlcHRoIHZhbHVlc1xuXHRcdFx0ZHJhd0J1ZmZlcnM6IGZhbHNlLFxuXHRcdFx0Ly8gc2V0IHRvIHVzZSBkcmF3IGJ1ZmZlcnNcblx0XHRcdHNoYWRlclRleHR1cmVMT0Q6IGZhbHNlIC8vIHNldCB0byB1c2Ugc2hhZGVyIHRleHR1cmUgTE9EXG5cblx0XHR9OyAvLyBXaGVuIHJlbmRlcmVkIGdlb21ldHJ5IGRvZXNuJ3QgaW5jbHVkZSB0aGVzZSBhdHRyaWJ1dGVzIGJ1dCB0aGUgbWF0ZXJpYWwgZG9lcyxcblx0XHQvLyB1c2UgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgaW4gV2ViR0wuIFRoaXMgYXZvaWRzIGVycm9ycyB3aGVuIGJ1ZmZlciBkYXRhIGlzIG1pc3NpbmcuXG5cblx0XHR0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgPSB7XG5cdFx0XHQnY29sb3InOiBbMSwgMSwgMV0sXG5cdFx0XHQndXYnOiBbMCwgMF0sXG5cdFx0XHQndXYyJzogWzAsIDBdXG5cdFx0fTtcblx0XHR0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmdsc2xWZXJzaW9uID0gbnVsbDtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbWV0ZXJzLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5mcmFnbWVudFNoYWRlciA9IHNvdXJjZS5mcmFnbWVudFNoYWRlcjtcblx0XHR0aGlzLnZlcnRleFNoYWRlciA9IHNvdXJjZS52ZXJ0ZXhTaGFkZXI7XG5cdFx0dGhpcy51bmlmb3JtcyA9IGNsb25lVW5pZm9ybXMoc291cmNlLnVuaWZvcm1zKTtcblx0XHR0aGlzLmRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UuZGVmaW5lcyk7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLmxpZ2h0cyA9IHNvdXJjZS5saWdodHM7XG5cdFx0dGhpcy5jbGlwcGluZyA9IHNvdXJjZS5jbGlwcGluZztcblx0XHR0aGlzLmV4dGVuc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UuZXh0ZW5zaW9ucyk7XG5cdFx0dGhpcy5nbHNsVmVyc2lvbiA9IHNvdXJjZS5nbHNsVmVyc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTihtZXRhKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTihtZXRhKTtcblx0XHRkYXRhLmdsc2xWZXJzaW9uID0gdGhpcy5nbHNsVmVyc2lvbjtcblx0XHRkYXRhLnVuaWZvcm1zID0ge307XG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy51bmlmb3Jtcykge1xuXHRcdFx0Y29uc3QgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbbmFtZV07XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHVuaWZvcm0udmFsdWU7XG5cblx0XHRcdGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1RleHR1cmUpIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndCcsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvSlNPTihtZXRhKS51dWlkXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmlzQ29sb3IpIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAnYycsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLmdldEhleCgpXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmVjdG9yMikge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICd2MicsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZlY3RvcjMpIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndjMnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuaXNWZWN0b3I0KSB7XG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbbmFtZV0gPSB7XG5cdFx0XHRcdFx0dHlwZTogJ3Y0Jyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUudG9BcnJheSgpXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmlzTWF0cml4Mykge1xuXHRcdFx0XHRkYXRhLnVuaWZvcm1zW25hbWVdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdtMycsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLnRvQXJyYXkoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc01hdHJpeDQpIHtcblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1tuYW1lXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAnbTQnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbbmFtZV0gPSB7XG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH07IC8vIG5vdGU6IHRoZSBhcnJheSB2YXJpYW50cyB2MnYsIHYzdiwgdjR2LCBtNHYgYW5kIHR2IGFyZSBub3Qgc3VwcG9ydGVkIHNvIGZhclxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aCA+IDApIGRhdGEuZGVmaW5lcyA9IHRoaXMuZGVmaW5lcztcblx0XHRkYXRhLnZlcnRleFNoYWRlciA9IHRoaXMudmVydGV4U2hhZGVyO1xuXHRcdGRhdGEuZnJhZ21lbnRTaGFkZXIgPSB0aGlzLmZyYWdtZW50U2hhZGVyO1xuXHRcdGNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuZXh0ZW5zaW9ucykge1xuXHRcdFx0aWYgKHRoaXMuZXh0ZW5zaW9uc1trZXldID09PSB0cnVlKSBleHRlbnNpb25zW2tleV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChPYmplY3Qua2V5cyhleHRlbnNpb25zKS5sZW5ndGggPiAwKSBkYXRhLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWwgPSB0cnVlO1xuXG5jbGFzcyBDYW1lcmEgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0NhbWVyYSc7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSwgcmVjdXJzaXZlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UsIHJlY3Vyc2l2ZSk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weShzb3VyY2UubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXguY29weShzb3VyY2UucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRXb3JsZERpcmVjdGlvbih0YXJnZXQpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblx0XHRjb25zdCBlID0gdGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztcblx0XHRyZXR1cm4gdGFyZ2V0LnNldCgtZVs4XSwgLWVbOV0sIC1lWzEwXSkubm9ybWFsaXplKCk7XG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZChmb3JjZSkge1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0XHR0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpO1xuXHR9XG5cblx0dXBkYXRlV29ybGRNYXRyaXgodXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4pIHtcblx0XHRzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbik7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxufVxuXG5DYW1lcmEucHJvdG90eXBlLmlzQ2FtZXJhID0gdHJ1ZTtcblxuY2xhc3MgUGVyc3BlY3RpdmVDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xuXHRjb25zdHJ1Y3Rvcihmb3YgPSA1MCwgYXNwZWN0ID0gMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BlcnNwZWN0aXZlQ2FtZXJhJztcblx0XHR0aGlzLmZvdiA9IGZvdjtcblx0XHR0aGlzLnpvb20gPSAxO1xuXHRcdHRoaXMubmVhciA9IG5lYXI7XG5cdFx0dGhpcy5mYXIgPSBmYXI7XG5cdFx0dGhpcy5mb2N1cyA9IDEwO1xuXHRcdHRoaXMuYXNwZWN0ID0gYXNwZWN0O1xuXHRcdHRoaXMudmlldyA9IG51bGw7XG5cdFx0dGhpcy5maWxtR2F1Z2UgPSAzNTsgLy8gd2lkdGggb2YgdGhlIGZpbG0gKGRlZmF1bHQgaW4gbWlsbGltZXRlcnMpXG5cblx0XHR0aGlzLmZpbG1PZmZzZXQgPSAwOyAvLyBob3Jpem9udGFsIGZpbG0gb2Zmc2V0IChzYW1lIHVuaXQgYXMgZ2F1Z2UpXG5cblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlLCByZWN1cnNpdmUpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSwgcmVjdXJzaXZlKTtcblx0XHR0aGlzLmZvdiA9IHNvdXJjZS5mb3Y7XG5cdFx0dGhpcy56b29tID0gc291cmNlLnpvb207XG5cdFx0dGhpcy5uZWFyID0gc291cmNlLm5lYXI7XG5cdFx0dGhpcy5mYXIgPSBzb3VyY2UuZmFyO1xuXHRcdHRoaXMuZm9jdXMgPSBzb3VyY2UuZm9jdXM7XG5cdFx0dGhpcy5hc3BlY3QgPSBzb3VyY2UuYXNwZWN0O1xuXHRcdHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBudWxsID8gbnVsbCA6IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS52aWV3KTtcblx0XHR0aGlzLmZpbG1HYXVnZSA9IHNvdXJjZS5maWxtR2F1Z2U7XG5cdFx0dGhpcy5maWxtT2Zmc2V0ID0gc291cmNlLmZpbG1PZmZzZXQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCAqIFNldHMgdGhlIEZPViBieSBmb2NhbCBsZW5ndGggaW4gcmVzcGVjdCB0byB0aGUgY3VycmVudCAuZmlsbUdhdWdlLlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCBmaWxtIGdhdWdlIGlzIDM1LCBzbyB0aGF0IHRoZSBmb2NhbCBsZW5ndGggY2FuIGJlIHNwZWNpZmllZCBmb3Jcblx0ICogYSAzNW1tIChmdWxsIGZyYW1lKSBjYW1lcmEuXG5cdCAqXG5cdCAqIFZhbHVlcyBmb3IgZm9jYWwgbGVuZ3RoIGFuZCBmaWxtIGdhdWdlIG11c3QgaGF2ZSB0aGUgc2FtZSB1bml0LlxuXHQgKi9cblxuXG5cdHNldEZvY2FsTGVuZ3RoKGZvY2FsTGVuZ3RoKSB7XG5cdFx0LyoqIHNlZSB7QGxpbmsgaHR0cDovL3d3dy5ib2JhdGtpbnMuY29tL3Bob3RvZ3JhcGh5L3RlY2huaWNhbC9maWVsZF9vZl92aWV3Lmh0bWx9ICovXG5cdFx0Y29uc3QgdkV4dGVudFNsb3BlID0gMC41ICogdGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyBmb2NhbExlbmd0aDtcblx0XHR0aGlzLmZvdiA9IFJBRDJERUcgKiAyICogTWF0aC5hdGFuKHZFeHRlbnRTbG9wZSk7XG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdH1cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIGZvY2FsIGxlbmd0aCBmcm9tIHRoZSBjdXJyZW50IC5mb3YgYW5kIC5maWxtR2F1Z2UuXG5cdCAqL1xuXG5cblx0Z2V0Rm9jYWxMZW5ndGgoKSB7XG5cdFx0Y29uc3QgdkV4dGVudFNsb3BlID0gTWF0aC50YW4oREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92KTtcblx0XHRyZXR1cm4gMC41ICogdGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyB2RXh0ZW50U2xvcGU7XG5cdH1cblxuXHRnZXRFZmZlY3RpdmVGT1YoKSB7XG5cdFx0cmV0dXJuIFJBRDJERUcgKiAyICogTWF0aC5hdGFuKE1hdGgudGFuKERFRzJSQUQgKiAwLjUgKiB0aGlzLmZvdikgLyB0aGlzLnpvb20pO1xuXHR9XG5cblx0Z2V0RmlsbVdpZHRoKCkge1xuXHRcdC8vIGZpbG0gbm90IGNvbXBsZXRlbHkgY292ZXJlZCBpbiBwb3J0cmFpdCBmb3JtYXQgKGFzcGVjdCA8IDEpXG5cdFx0cmV0dXJuIHRoaXMuZmlsbUdhdWdlICogTWF0aC5taW4odGhpcy5hc3BlY3QsIDEpO1xuXHR9XG5cblx0Z2V0RmlsbUhlaWdodCgpIHtcblx0XHQvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVyZWQgaW4gbGFuZHNjYXBlIGZvcm1hdCAoYXNwZWN0ID4gMSlcblx0XHRyZXR1cm4gdGhpcy5maWxtR2F1Z2UgLyBNYXRoLm1heCh0aGlzLmFzcGVjdCwgMSk7XG5cdH1cblx0LyoqXG5cdCAqIFNldHMgYW4gb2Zmc2V0IGluIGEgbGFyZ2VyIGZydXN0dW0uIFRoaXMgaXMgdXNlZnVsIGZvciBtdWx0aS13aW5kb3cgb3Jcblx0ICogbXVsdGktbW9uaXRvci9tdWx0aS1tYWNoaW5lIHNldHVwcy5cblx0ICpcblx0ICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIDN4MiBtb25pdG9ycyBhbmQgZWFjaCBtb25pdG9yIGlzIDE5MjB4MTA4MCBhbmRcblx0ICogdGhlIG1vbml0b3JzIGFyZSBpbiBncmlkIGxpa2UgdGhpc1xuXHQgKlxuXHQgKlx0ICstLS0rLS0tKy0tLStcblx0ICpcdCB8IEEgfCBCIHwgQyB8XG5cdCAqXHQgKy0tLSstLS0rLS0tK1xuXHQgKlx0IHwgRCB8IEUgfCBGIHxcblx0ICpcdCArLS0tKy0tLSstLS0rXG5cdCAqXG5cdCAqIHRoZW4gZm9yIGVhY2ggbW9uaXRvciB5b3Ugd291bGQgY2FsbCBpdCBsaWtlIHRoaXNcblx0ICpcblx0ICpcdCBjb25zdCB3ID0gMTkyMDtcblx0ICpcdCBjb25zdCBoID0gMTA4MDtcblx0ICpcdCBjb25zdCBmdWxsV2lkdGggPSB3ICogMztcblx0ICpcdCBjb25zdCBmdWxsSGVpZ2h0ID0gaCAqIDI7XG5cdCAqXG5cdCAqXHQgLS1BLS1cblx0ICpcdCBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMCwgaCAqIDAsIHcsIGggKTtcblx0ICpcdCAtLUItLVxuXHQgKlx0IGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBoICogMCwgdywgaCApO1xuXHQgKlx0IC0tQy0tXG5cdCAqXHQgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDIsIGggKiAwLCB3LCBoICk7XG5cdCAqXHQgLS1ELS1cblx0ICpcdCBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMCwgaCAqIDEsIHcsIGggKTtcblx0ICpcdCAtLUUtLVxuXHQgKlx0IGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBoICogMSwgdywgaCApO1xuXHQgKlx0IC0tRi0tXG5cdCAqXHQgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDIsIGggKiAxLCB3LCBoICk7XG5cdCAqXG5cdCAqXHQgTm90ZSB0aGVyZSBpcyBubyByZWFzb24gbW9uaXRvcnMgaGF2ZSB0byBiZSB0aGUgc2FtZSBzaXplIG9yIGluIGEgZ3JpZC5cblx0ICovXG5cblxuXHRzZXRWaWV3T2Zmc2V0KGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuXHRcdHRoaXMuYXNwZWN0ID0gZnVsbFdpZHRoIC8gZnVsbEhlaWdodDtcblxuXHRcdGlmICh0aGlzLnZpZXcgPT09IG51bGwpIHtcblx0XHRcdHRoaXMudmlldyA9IHtcblx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0ZnVsbFdpZHRoOiAxLFxuXHRcdFx0XHRmdWxsSGVpZ2h0OiAxLFxuXHRcdFx0XHRvZmZzZXRYOiAwLFxuXHRcdFx0XHRvZmZzZXRZOiAwLFxuXHRcdFx0XHR3aWR0aDogMSxcblx0XHRcdFx0aGVpZ2h0OiAxXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMudmlldy5lbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnZpZXcuZnVsbFdpZHRoID0gZnVsbFdpZHRoO1xuXHRcdHRoaXMudmlldy5mdWxsSGVpZ2h0ID0gZnVsbEhlaWdodDtcblx0XHR0aGlzLnZpZXcub2Zmc2V0WCA9IHg7XG5cdFx0dGhpcy52aWV3Lm9mZnNldFkgPSB5O1xuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdH1cblxuXHRjbGVhclZpZXdPZmZzZXQoKSB7XG5cdFx0aWYgKHRoaXMudmlldyAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy52aWV3LmVuYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXG5cdHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XG5cdFx0Y29uc3QgbmVhciA9IHRoaXMubmVhcjtcblx0XHRsZXQgdG9wID0gbmVhciAqIE1hdGgudGFuKERFRzJSQUQgKiAwLjUgKiB0aGlzLmZvdikgLyB0aGlzLnpvb207XG5cdFx0bGV0IGhlaWdodCA9IDIgKiB0b3A7XG5cdFx0bGV0IHdpZHRoID0gdGhpcy5hc3BlY3QgKiBoZWlnaHQ7XG5cdFx0bGV0IGxlZnQgPSAtMC41ICogd2lkdGg7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMudmlldztcblxuXHRcdGlmICh0aGlzLnZpZXcgIT09IG51bGwgJiYgdGhpcy52aWV3LmVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IGZ1bGxXaWR0aCA9IHZpZXcuZnVsbFdpZHRoLFxuXHRcdFx0XHRcdFx0ZnVsbEhlaWdodCA9IHZpZXcuZnVsbEhlaWdodDtcblx0XHRcdGxlZnQgKz0gdmlldy5vZmZzZXRYICogd2lkdGggLyBmdWxsV2lkdGg7XG5cdFx0XHR0b3AgLT0gdmlldy5vZmZzZXRZICogaGVpZ2h0IC8gZnVsbEhlaWdodDtcblx0XHRcdHdpZHRoICo9IHZpZXcud2lkdGggLyBmdWxsV2lkdGg7XG5cdFx0XHRoZWlnaHQgKj0gdmlldy5oZWlnaHQgLyBmdWxsSGVpZ2h0O1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZXcgPSB0aGlzLmZpbG1PZmZzZXQ7XG5cdFx0aWYgKHNrZXcgIT09IDApIGxlZnQgKz0gbmVhciAqIHNrZXcgLyB0aGlzLmdldEZpbG1XaWR0aCgpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobGVmdCwgbGVmdCArIHdpZHRoLCB0b3AsIHRvcCAtIGhlaWdodCwgbmVhciwgdGhpcy5mYXIpO1xuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGRhdGEub2JqZWN0LmZvdiA9IHRoaXMuZm92O1xuXHRcdGRhdGEub2JqZWN0Lnpvb20gPSB0aGlzLnpvb207XG5cdFx0ZGF0YS5vYmplY3QubmVhciA9IHRoaXMubmVhcjtcblx0XHRkYXRhLm9iamVjdC5mYXIgPSB0aGlzLmZhcjtcblx0XHRkYXRhLm9iamVjdC5mb2N1cyA9IHRoaXMuZm9jdXM7XG5cdFx0ZGF0YS5vYmplY3QuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XG5cdFx0aWYgKHRoaXMudmlldyAhPT0gbnVsbCkgZGF0YS5vYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmlldyk7XG5cdFx0ZGF0YS5vYmplY3QuZmlsbUdhdWdlID0gdGhpcy5maWxtR2F1Z2U7XG5cdFx0ZGF0YS5vYmplY3QuZmlsbU9mZnNldCA9IHRoaXMuZmlsbU9mZnNldDtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cblBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhID0gdHJ1ZTtcblxuY29uc3QgZm92ID0gOTAsXG5cdFx0XHRhc3BlY3QgPSAxO1xuXG5jbGFzcyBDdWJlQ2FtZXJhIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcihuZWFyLCBmYXIsIHJlbmRlclRhcmdldCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0N1YmVDYW1lcmEnO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cdFx0Y29uc3QgY2FtZXJhUFggPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoZm92LCBhc3BlY3QsIG5lYXIsIGZhcik7XG5cdFx0Y2FtZXJhUFgubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhUFgudXAuc2V0KDAsIC0xLCAwKTtcblx0XHRjYW1lcmFQWC5sb29rQXQobmV3IFZlY3RvcjMoMSwgMCwgMCkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYVBYKTtcblx0XHRjb25zdCBjYW1lcmFOWCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFOWC5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFOWC51cC5zZXQoMCwgLTEsIDApO1xuXHRcdGNhbWVyYU5YLmxvb2tBdChuZXcgVmVjdG9yMygtMSwgMCwgMCkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYU5YKTtcblx0XHRjb25zdCBjYW1lcmFQWSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFQWS5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFQWS51cC5zZXQoMCwgMCwgMSk7XG5cdFx0Y2FtZXJhUFkubG9va0F0KG5ldyBWZWN0b3IzKDAsIDEsIDApKTtcblx0XHR0aGlzLmFkZChjYW1lcmFQWSk7XG5cdFx0Y29uc3QgY2FtZXJhTlkgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoZm92LCBhc3BlY3QsIG5lYXIsIGZhcik7XG5cdFx0Y2FtZXJhTlkubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhTlkudXAuc2V0KDAsIDAsIC0xKTtcblx0XHRjYW1lcmFOWS5sb29rQXQobmV3IFZlY3RvcjMoMCwgLTEsIDApKTtcblx0XHR0aGlzLmFkZChjYW1lcmFOWSk7XG5cdFx0Y29uc3QgY2FtZXJhUFogPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoZm92LCBhc3BlY3QsIG5lYXIsIGZhcik7XG5cdFx0Y2FtZXJhUFoubGF5ZXJzID0gdGhpcy5sYXllcnM7XG5cdFx0Y2FtZXJhUFoudXAuc2V0KDAsIC0xLCAwKTtcblx0XHRjYW1lcmFQWi5sb29rQXQobmV3IFZlY3RvcjMoMCwgMCwgMSkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYVBaKTtcblx0XHRjb25zdCBjYW1lcmFOWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjYW1lcmFOWi5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFOWi51cC5zZXQoMCwgLTEsIDApO1xuXHRcdGNhbWVyYU5aLmxvb2tBdChuZXcgVmVjdG9yMygwLCAwLCAtMSkpO1xuXHRcdHRoaXMuYWRkKGNhbWVyYU5aKTtcblx0fVxuXG5cdHVwZGF0ZShyZW5kZXJlciwgc2NlbmUpIHtcblx0XHRpZiAodGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldDtcblx0XHRjb25zdCBbY2FtZXJhUFgsIGNhbWVyYU5YLCBjYW1lcmFQWSwgY2FtZXJhTlksIGNhbWVyYVBaLCBjYW1lcmFOWl0gPSB0aGlzLmNoaWxkcmVuO1xuXHRcdGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSByZW5kZXJlci54ci5lbmFibGVkO1xuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRyZW5kZXJlci54ci5lbmFibGVkID0gZmFsc2U7XG5cdFx0Y29uc3QgZ2VuZXJhdGVNaXBtYXBzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDApO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhUFgpO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDEpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhTlgpO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDIpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhUFkpO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDMpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhTlkpO1xuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQsIDQpO1xuXHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhUFopO1xuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGdlbmVyYXRlTWlwbWFwcztcblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0LCA1KTtcblx0XHRyZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYU5aKTtcblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY3VycmVudFJlbmRlclRhcmdldCk7XG5cdFx0cmVuZGVyZXIueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZSA9IHRydWU7XG5cdH1cblxufVxuXG5jbGFzcyBDdWJlVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3RvcihpbWFnZXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcpIHtcblx0XHRpbWFnZXMgPSBpbWFnZXMgIT09IHVuZGVmaW5lZCA/IGltYWdlcyA6IFtdO1xuXHRcdG1hcHBpbmcgPSBtYXBwaW5nICE9PSB1bmRlZmluZWQgPyBtYXBwaW5nIDogQ3ViZVJlZmxlY3Rpb25NYXBwaW5nO1xuXHRcdHN1cGVyKGltYWdlcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyk7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHR9XG5cblx0Z2V0IGltYWdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbWFnZTtcblx0fVxuXG5cdHNldCBpbWFnZXModmFsdWUpIHtcblx0XHR0aGlzLmltYWdlID0gdmFsdWU7XG5cdH1cblxufVxuXG5DdWJlVGV4dHVyZS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBleHRlbmRzIFdlYkdMUmVuZGVyVGFyZ2V0IHtcblx0Y29uc3RydWN0b3Ioc2l6ZSwgb3B0aW9ucywgZHVtbXkpIHtcblx0XHRpZiAoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zKSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICknKTtcblx0XHRcdG9wdGlvbnMgPSBkdW1teTtcblx0XHR9XG5cblx0XHRzdXBlcihzaXplLCBzaXplLCBvcHRpb25zKTtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsgLy8gQnkgY29udmVudGlvbiAtLSBsaWtlbHkgYmFzZWQgb24gdGhlIFJlbmRlck1hbiBzcGVjIGZyb20gdGhlIDE5OTAncyAtLSBjdWJlIG1hcHMgYXJlIHNwZWNpZmllZCBieSBXZWJHTCAoYW5kIHRocmVlLmpzKVxuXHRcdC8vIGluIGEgY29vcmRpbmF0ZSBzeXN0ZW0gaW4gd2hpY2ggcG9zaXRpdmUteCBpcyB0byB0aGUgcmlnaHQgd2hlbiBsb29raW5nIHVwIHRoZSBwb3NpdGl2ZS16IGF4aXMgLS0gaW4gb3RoZXIgd29yZHMsXG5cdFx0Ly8gaW4gYSBsZWZ0LWhhbmRlZCBjb29yZGluYXRlIHN5c3RlbS4gQnkgY29udGludWluZyB0aGlzIGNvbnZlbnRpb24sIHByZWV4aXN0aW5nIGN1YmUgbWFwcyBjb250aW51ZWQgdG8gcmVuZGVyIGNvcnJlY3RseS5cblx0XHQvLyB0aHJlZS5qcyB1c2VzIGEgcmlnaHQtaGFuZGVkIGNvb3JkaW5hdGUgc3lzdGVtLiBTbyBlbnZpcm9ubWVudCBtYXBzIHVzZWQgaW4gdGhyZWUuanMgYXBwZWFyIHRvIGhhdmUgcHggYW5kIG54IHN3YXBwZWRcblx0XHQvLyBhbmQgdGhlIGZsYWcgaXNSZW5kZXJUYXJnZXRUZXh0dXJlIGNvbnRyb2xzIHRoaXMgY29udmVyc2lvbi4gVGhlIGZsaXAgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0LnRleHR1cmVcblx0XHQvLyBhcyBhIGN1YmUgdGV4dHVyZSAodGhpcyBpcyBkZXRlY3RlZCB3aGVuIGlzUmVuZGVyVGFyZ2V0VGV4dHVyZSBpcyBzZXQgdG8gdHJ1ZSBmb3IgY3ViZSB0ZXh0dXJlcykuXG5cblx0XHR0aGlzLnRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUodW5kZWZpbmVkLCBvcHRpb25zLm1hcHBpbmcsIG9wdGlvbnMud3JhcFMsIG9wdGlvbnMud3JhcFQsIG9wdGlvbnMubWFnRmlsdGVyLCBvcHRpb25zLm1pbkZpbHRlciwgb3B0aW9ucy5mb3JtYXQsIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5hbmlzb3Ryb3B5LCBvcHRpb25zLmVuY29kaW5nKTtcblx0XHR0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID0gdHJ1ZTtcblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzIDogZmFsc2U7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IG9wdGlvbnMubWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0fVxuXG5cdGZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHJlbmRlcmVyLCB0ZXh0dXJlKSB7XG5cdFx0dGhpcy50ZXh0dXJlLnR5cGUgPSB0ZXh0dXJlLnR5cGU7XG5cdFx0dGhpcy50ZXh0dXJlLmZvcm1hdCA9IFJHQkFGb3JtYXQ7IC8vIHNlZSAjMTg4NTlcblxuXHRcdHRoaXMudGV4dHVyZS5lbmNvZGluZyA9IHRleHR1cmUuZW5jb2Rpbmc7XG5cdFx0dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdHRoaXMudGV4dHVyZS5taW5GaWx0ZXIgPSB0ZXh0dXJlLm1pbkZpbHRlcjtcblx0XHR0aGlzLnRleHR1cmUubWFnRmlsdGVyID0gdGV4dHVyZS5tYWdGaWx0ZXI7XG5cdFx0Y29uc3Qgc2hhZGVyID0ge1xuXHRcdFx0dW5pZm9ybXM6IHtcblx0XHRcdFx0dEVxdWlyZWN0OiB7XG5cdFx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHZlcnRleFNoYWRlcjpcblx0XHRcdC8qIGdsc2wgKi9cblx0XHRcdGBcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdGAsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjpcblx0XHRcdC8qIGdsc2wgKi9cblx0XHRcdGBcblxuXHRcdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXG5cdFx0XHRcdH1cblx0XHRcdGBcblx0XHR9O1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJveEdlb21ldHJ5KDUsIDUsIDUpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcblx0XHRcdG5hbWU6ICdDdWJlbWFwRnJvbUVxdWlyZWN0Jyxcblx0XHRcdHVuaWZvcm1zOiBjbG9uZVVuaWZvcm1zKHNoYWRlci51bmlmb3JtcyksXG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6IHNoYWRlci52ZXJ0ZXhTaGFkZXIsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogc2hhZGVyLmZyYWdtZW50U2hhZGVyLFxuXHRcdFx0c2lkZTogQmFja1NpZGUsXG5cdFx0XHRibGVuZGluZzogTm9CbGVuZGluZ1xuXHRcdH0pO1xuXHRcdG1hdGVyaWFsLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZSA9IHRleHR1cmU7XG5cdFx0Y29uc3QgbWVzaCA9IG5ldyBNZXNoKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0Y29uc3QgY3VycmVudE1pbkZpbHRlciA9IHRleHR1cmUubWluRmlsdGVyOyAvLyBBdm9pZCBibHVycmVkIHBvbGVzXG5cblx0XHRpZiAodGV4dHVyZS5taW5GaWx0ZXIgPT09IExpbmVhck1pcG1hcExpbmVhckZpbHRlcikgdGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cdFx0Y29uc3QgY2FtZXJhID0gbmV3IEN1YmVDYW1lcmEoMSwgMTAsIHRoaXMpO1xuXHRcdGNhbWVyYS51cGRhdGUocmVuZGVyZXIsIG1lc2gpO1xuXHRcdHRleHR1cmUubWluRmlsdGVyID0gY3VycmVudE1pbkZpbHRlcjtcblx0XHRtZXNoLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHRtZXNoLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsZWFyKHJlbmRlcmVyLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpIHtcblx0XHRjb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsIGkpO1xuXHRcdFx0cmVuZGVyZXIuY2xlYXIoY29sb3IsIGRlcHRoLCBzdGVuY2lsKTtcblx0XHR9XG5cblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY3VycmVudFJlbmRlclRhcmdldCk7XG5cdH1cblxufVxuXG5XZWJHTEN1YmVSZW5kZXJUYXJnZXQucHJvdG90eXBlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID0gdHJ1ZTtcblxuY29uc3QgX3ZlY3RvcjEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3ZlY3RvcjIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX25vcm1hbE1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4MygpO1xuXG5jbGFzcyBQbGFuZSB7XG5cdGNvbnN0cnVjdG9yKG5vcm1hbCA9IG5ldyBWZWN0b3IzKDEsIDAsIDApLCBjb25zdGFudCA9IDApIHtcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cdFx0dGhpcy5ub3JtYWwgPSBub3JtYWw7XG5cdFx0dGhpcy5jb25zdGFudCA9IGNvbnN0YW50O1xuXHR9XG5cblx0c2V0KG5vcm1hbCwgY29uc3RhbnQpIHtcblx0XHR0aGlzLm5vcm1hbC5jb3B5KG5vcm1hbCk7XG5cdFx0dGhpcy5jb25zdGFudCA9IGNvbnN0YW50O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29tcG9uZW50cyh4LCB5LCB6LCB3KSB7XG5cdFx0dGhpcy5ub3JtYWwuc2V0KHgsIHksIHopO1xuXHRcdHRoaXMuY29uc3RhbnQgPSB3O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobm9ybWFsLCBwb2ludCkge1xuXHRcdHRoaXMubm9ybWFsLmNvcHkobm9ybWFsKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gLXBvaW50LmRvdCh0aGlzLm5vcm1hbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tQ29wbGFuYXJQb2ludHMoYSwgYiwgYykge1xuXHRcdGNvbnN0IG5vcm1hbCA9IF92ZWN0b3IxLnN1YlZlY3RvcnMoYywgYikuY3Jvc3MoX3ZlY3RvcjIuc3ViVmVjdG9ycyhhLCBiKSkubm9ybWFsaXplKCk7IC8vIFE6IHNob3VsZCBhbiBlcnJvciBiZSB0aHJvd24gaWYgbm9ybWFsIGlzIHplcm8gKGUuZy4gZGVnZW5lcmF0ZSBwbGFuZSk/XG5cblxuXHRcdHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobm9ybWFsLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkocGxhbmUpIHtcblx0XHR0aGlzLm5vcm1hbC5jb3B5KHBsYW5lLm5vcm1hbCk7XG5cdFx0dGhpcy5jb25zdGFudCA9IHBsYW5lLmNvbnN0YW50O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bm9ybWFsaXplKCkge1xuXHRcdC8vIE5vdGU6IHdpbGwgbGVhZCB0byBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBwbGFuZSBpcyBpbnZhbGlkLlxuXHRcdGNvbnN0IGludmVyc2VOb3JtYWxMZW5ndGggPSAxLjAgLyB0aGlzLm5vcm1hbC5sZW5ndGgoKTtcblx0XHR0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihpbnZlcnNlTm9ybWFsTGVuZ3RoKTtcblx0XHR0aGlzLmNvbnN0YW50ICo9IGludmVyc2VOb3JtYWxMZW5ndGg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cdFx0dGhpcy5jb25zdGFudCAqPSAtMTtcblx0XHR0aGlzLm5vcm1hbC5uZWdhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludChwb2ludCkge1xuXHRcdHJldHVybiB0aGlzLm5vcm1hbC5kb3QocG9pbnQpICsgdGhpcy5jb25zdGFudDtcblx0fVxuXG5cdGRpc3RhbmNlVG9TcGhlcmUoc3BoZXJlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHNwaGVyZS5jZW50ZXIpIC0gc3BoZXJlLnJhZGl1cztcblx0fVxuXG5cdHByb2plY3RQb2ludChwb2ludCwgdGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQocG9pbnQpKS5hZGQocG9pbnQpO1xuXHR9XG5cblx0aW50ZXJzZWN0TGluZShsaW5lLCB0YXJnZXQpIHtcblx0XHRjb25zdCBkaXJlY3Rpb24gPSBsaW5lLmRlbHRhKF92ZWN0b3IxKTtcblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHRoaXMubm9ybWFsLmRvdChkaXJlY3Rpb24pO1xuXG5cdFx0aWYgKGRlbm9taW5hdG9yID09PSAwKSB7XG5cdFx0XHQvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luXG5cdFx0XHRpZiAodGhpcy5kaXN0YW5jZVRvUG9pbnQobGluZS5zdGFydCkgPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KGxpbmUuc3RhcnQpO1xuXHRcdFx0fSAvLyBVbnN1cmUgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCBtZXRob2QgdG8gaGFuZGxlIHRoaXMgY2FzZS5cblxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCB0ID0gLShsaW5lLnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkgKyB0aGlzLmNvbnN0YW50KSAvIGRlbm9taW5hdG9yO1xuXG5cdFx0aWYgKHQgPCAwIHx8IHQgPiAxKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQobGluZS5zdGFydCk7XG5cdH1cblxuXHRpbnRlcnNlY3RzTGluZShsaW5lKSB7XG5cdFx0Ly8gTm90ZTogdGhpcyB0ZXN0cyBpZiBhIGxpbmUgaW50ZXJzZWN0cyB0aGUgcGxhbmUsIG5vdCB3aGV0aGVyIGl0IChvciBpdHMgZW5kLXBvaW50cykgYXJlIGNvcGxhbmFyIHdpdGggaXQuXG5cdFx0Y29uc3Qgc3RhcnRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQobGluZS5zdGFydCk7XG5cdFx0Y29uc3QgZW5kU2lnbiA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KGxpbmUuZW5kKTtcblx0XHRyZXR1cm4gc3RhcnRTaWduIDwgMCAmJiBlbmRTaWduID4gMCB8fCBlbmRTaWduIDwgMCAmJiBzdGFydFNpZ24gPiAwO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHRyZXR1cm4gYm94LmludGVyc2VjdHNQbGFuZSh0aGlzKTtcblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoc3BoZXJlKSB7XG5cdFx0cmV0dXJuIHNwaGVyZS5pbnRlcnNlY3RzUGxhbmUodGhpcyk7XG5cdH1cblxuXHRjb3BsYW5hclBvaW50KHRhcmdldCkge1xuXHRcdHJldHVybiB0YXJnZXQuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuY29uc3RhbnQpO1xuXHR9XG5cblx0YXBwbHlNYXRyaXg0KG1hdHJpeCwgb3B0aW9uYWxOb3JtYWxNYXRyaXgpIHtcblx0XHRjb25zdCBub3JtYWxNYXRyaXggPSBvcHRpb25hbE5vcm1hbE1hdHJpeCB8fCBfbm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChtYXRyaXgpO1xuXG5cdFx0Y29uc3QgcmVmZXJlbmNlUG9pbnQgPSB0aGlzLmNvcGxhbmFyUG9pbnQoX3ZlY3RvcjEpLmFwcGx5TWF0cml4NChtYXRyaXgpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IHRoaXMubm9ybWFsLmFwcGx5TWF0cml4Myhub3JtYWxNYXRyaXgpLm5vcm1hbGl6ZSgpO1xuXHRcdHRoaXMuY29uc3RhbnQgPSAtcmVmZXJlbmNlUG9pbnQuZG90KG5vcm1hbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0cmFuc2xhdGUob2Zmc2V0KSB7XG5cdFx0dGhpcy5jb25zdGFudCAtPSBvZmZzZXQuZG90KHRoaXMubm9ybWFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVxdWFscyhwbGFuZSkge1xuXHRcdHJldHVybiBwbGFuZS5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSAmJiBwbGFuZS5jb25zdGFudCA9PT0gdGhpcy5jb25zdGFudDtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxufVxuXG5QbGFuZS5wcm90b3R5cGUuaXNQbGFuZSA9IHRydWU7XG5cbmNvbnN0IF9zcGhlcmUkMiA9IC8qQF9fUFVSRV9fKi9uZXcgU3BoZXJlKCk7XG5cbmNvbnN0IF92ZWN0b3IkNyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBGcnVzdHVtIHtcblx0Y29uc3RydWN0b3IocDAgPSBuZXcgUGxhbmUoKSwgcDEgPSBuZXcgUGxhbmUoKSwgcDIgPSBuZXcgUGxhbmUoKSwgcDMgPSBuZXcgUGxhbmUoKSwgcDQgPSBuZXcgUGxhbmUoKSwgcDUgPSBuZXcgUGxhbmUoKSkge1xuXHRcdHRoaXMucGxhbmVzID0gW3AwLCBwMSwgcDIsIHAzLCBwNCwgcDVdO1xuXHR9XG5cblx0c2V0KHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpIHtcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblx0XHRwbGFuZXNbMF0uY29weShwMCk7XG5cdFx0cGxhbmVzWzFdLmNvcHkocDEpO1xuXHRcdHBsYW5lc1syXS5jb3B5KHAyKTtcblx0XHRwbGFuZXNbM10uY29weShwMyk7XG5cdFx0cGxhbmVzWzRdLmNvcHkocDQpO1xuXHRcdHBsYW5lc1s1XS5jb3B5KHA1KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkoZnJ1c3R1bSkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdHBsYW5lc1tpXS5jb3B5KGZydXN0dW0ucGxhbmVzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG0pIHtcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblx0XHRjb25zdCBtZSA9IG0uZWxlbWVudHM7XG5cdFx0Y29uc3QgbWUwID0gbWVbMF0sXG5cdFx0XHRcdFx0bWUxID0gbWVbMV0sXG5cdFx0XHRcdFx0bWUyID0gbWVbMl0sXG5cdFx0XHRcdFx0bWUzID0gbWVbM107XG5cdFx0Y29uc3QgbWU0ID0gbWVbNF0sXG5cdFx0XHRcdFx0bWU1ID0gbWVbNV0sXG5cdFx0XHRcdFx0bWU2ID0gbWVbNl0sXG5cdFx0XHRcdFx0bWU3ID0gbWVbN107XG5cdFx0Y29uc3QgbWU4ID0gbWVbOF0sXG5cdFx0XHRcdFx0bWU5ID0gbWVbOV0sXG5cdFx0XHRcdFx0bWUxMCA9IG1lWzEwXSxcblx0XHRcdFx0XHRtZTExID0gbWVbMTFdO1xuXHRcdGNvbnN0IG1lMTIgPSBtZVsxMl0sXG5cdFx0XHRcdFx0bWUxMyA9IG1lWzEzXSxcblx0XHRcdFx0XHRtZTE0ID0gbWVbMTRdLFxuXHRcdFx0XHRcdG1lMTUgPSBtZVsxNV07XG5cdFx0cGxhbmVzWzBdLnNldENvbXBvbmVudHMobWUzIC0gbWUwLCBtZTcgLSBtZTQsIG1lMTEgLSBtZTgsIG1lMTUgLSBtZTEyKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbMV0uc2V0Q29tcG9uZW50cyhtZTMgKyBtZTAsIG1lNyArIG1lNCwgbWUxMSArIG1lOCwgbWUxNSArIG1lMTIpLm5vcm1hbGl6ZSgpO1xuXHRcdHBsYW5lc1syXS5zZXRDb21wb25lbnRzKG1lMyArIG1lMSwgbWU3ICsgbWU1LCBtZTExICsgbWU5LCBtZTE1ICsgbWUxMykubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWzNdLnNldENvbXBvbmVudHMobWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTksIG1lMTUgLSBtZTEzKS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbNF0uc2V0Q29tcG9uZW50cyhtZTMgLSBtZTIsIG1lNyAtIG1lNiwgbWUxMSAtIG1lMTAsIG1lMTUgLSBtZTE0KS5ub3JtYWxpemUoKTtcblx0XHRwbGFuZXNbNV0uc2V0Q29tcG9uZW50cyhtZTMgKyBtZTIsIG1lNyArIG1lNiwgbWUxMSArIG1lMTAsIG1lMTUgKyBtZTE0KS5ub3JtYWxpemUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGludGVyc2VjdHNPYmplY3Qob2JqZWN0KSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cdFx0aWYgKGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdF9zcGhlcmUkMi5jb3B5KGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSQyKTtcblx0fVxuXG5cdGludGVyc2VjdHNTcHJpdGUoc3ByaXRlKSB7XG5cdFx0X3NwaGVyZSQyLmNlbnRlci5zZXQoMCwgMCwgMCk7XG5cblx0XHRfc3BoZXJlJDIucmFkaXVzID0gMC43MDcxMDY3ODExODY1NDc2O1xuXG5cdFx0X3NwaGVyZSQyLmFwcGx5TWF0cml4NChzcHJpdGUubWF0cml4V29ybGQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShfc3BoZXJlJDIpO1xuXHR9XG5cblx0aW50ZXJzZWN0c1NwaGVyZShzcGhlcmUpIHtcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblx0XHRjb25zdCBjZW50ZXIgPSBzcGhlcmUuY2VudGVyO1xuXHRcdGNvbnN0IG5lZ1JhZGl1cyA9IC1zcGhlcmUucmFkaXVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcGxhbmVzW2ldLmRpc3RhbmNlVG9Qb2ludChjZW50ZXIpO1xuXG5cdFx0XHRpZiAoZGlzdGFuY2UgPCBuZWdSYWRpdXMpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRjb25zdCBwbGFuZSA9IHBsYW5lc1tpXTsgLy8gY29ybmVyIGF0IG1heCBkaXN0YW5jZVxuXG5cdFx0XHRfdmVjdG9yJDcueCA9IHBsYW5lLm5vcm1hbC54ID4gMCA/IGJveC5tYXgueCA6IGJveC5taW4ueDtcblx0XHRcdF92ZWN0b3IkNy55ID0gcGxhbmUubm9ybWFsLnkgPiAwID8gYm94Lm1heC55IDogYm94Lm1pbi55O1xuXHRcdFx0X3ZlY3RvciQ3LnogPSBwbGFuZS5ub3JtYWwueiA+IDAgPyBib3gubWF4LnogOiBib3gubWluLno7XG5cblx0XHRcdGlmIChwbGFuZS5kaXN0YW5jZVRvUG9pbnQoX3ZlY3RvciQ3KSA8IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNQb2ludChwb2ludCkge1xuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdGlmIChwbGFuZXNbaV0uZGlzdGFuY2VUb1BvaW50KHBvaW50KSA8IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQW5pbWF0aW9uKCkge1xuXHRsZXQgY29udGV4dCA9IG51bGw7XG5cdGxldCBpc0FuaW1hdGluZyA9IGZhbHNlO1xuXHRsZXQgYW5pbWF0aW9uTG9vcCA9IG51bGw7XG5cdGxldCByZXF1ZXN0SWQgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUodGltZSwgZnJhbWUpIHtcblx0XHRhbmltYXRpb25Mb29wKHRpbWUsIGZyYW1lKTtcblx0XHRyZXF1ZXN0SWQgPSBjb250ZXh0LnJlcXVlc3RBbmltYXRpb25GcmFtZShvbkFuaW1hdGlvbkZyYW1lKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChpc0FuaW1hdGluZyA9PT0gdHJ1ZSkgcmV0dXJuO1xuXHRcdFx0aWYgKGFuaW1hdGlvbkxvb3AgPT09IG51bGwpIHJldHVybjtcblx0XHRcdHJlcXVlc3RJZCA9IGNvbnRleHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uQW5pbWF0aW9uRnJhbWUpO1xuXHRcdFx0aXNBbmltYXRpbmcgPSB0cnVlO1xuXHRcdH0sXG5cdFx0c3RvcDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29udGV4dC5jYW5jZWxBbmltYXRpb25GcmFtZShyZXF1ZXN0SWQpO1xuXHRcdFx0aXNBbmltYXRpbmcgPSBmYWxzZTtcblx0XHR9LFxuXHRcdHNldEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0YW5pbWF0aW9uTG9vcCA9IGNhbGxiYWNrO1xuXHRcdH0sXG5cdFx0c2V0Q29udGV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb250ZXh0ID0gdmFsdWU7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTEF0dHJpYnV0ZXMoZ2wsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblx0Y29uc3QgYnVmZmVycyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSkge1xuXHRcdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmFycmF5O1xuXHRcdGNvbnN0IHVzYWdlID0gYXR0cmlidXRlLnVzYWdlO1xuXHRcdGNvbnN0IGJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXHRcdGdsLmJpbmRCdWZmZXIoYnVmZmVyVHlwZSwgYnVmZmVyKTtcblx0XHRnbC5idWZmZXJEYXRhKGJ1ZmZlclR5cGUsIGFycmF5LCB1c2FnZSk7XG5cdFx0YXR0cmlidXRlLm9uVXBsb2FkQ2FsbGJhY2soKTtcblx0XHRsZXQgdHlwZSA9IGdsLkZMT0FUO1xuXG5cdFx0aWYgKGFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSB7XG5cdFx0XHR0eXBlID0gZ2wuRkxPQVQ7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LicpO1xuXHRcdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkge1xuXHRcdFx0aWYgKGF0dHJpYnV0ZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdFx0dHlwZSA9IGdsLkhBTEZfRkxPQVQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0eXBlID0gZ2wuVU5TSUdORURfU0hPUlQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIHtcblx0XHRcdHR5cGUgPSBnbC5TSE9SVDtcblx0XHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcblx0XHRcdHR5cGUgPSBnbC5VTlNJR05FRF9JTlQ7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIHtcblx0XHRcdHR5cGUgPSBnbC5JTlQ7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLkJZVEU7XG5cdFx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcblx0XHRcdHR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHRcdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuXHRcdFx0dHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGJ1ZmZlcjogYnVmZmVyLFxuXHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdGJ5dGVzUGVyRWxlbWVudDogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQsXG5cdFx0XHR2ZXJzaW9uOiBhdHRyaWJ1dGUudmVyc2lvblxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVCdWZmZXIoYnVmZmVyLCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUpIHtcblx0XHRjb25zdCBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTtcblx0XHRjb25zdCB1cGRhdGVSYW5nZSA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZTtcblx0XHRnbC5iaW5kQnVmZmVyKGJ1ZmZlclR5cGUsIGJ1ZmZlcik7XG5cblx0XHRpZiAodXBkYXRlUmFuZ2UuY291bnQgPT09IC0xKSB7XG5cdFx0XHQvLyBOb3QgdXNpbmcgdXBkYXRlIHJhbmdlc1xuXHRcdFx0Z2wuYnVmZmVyU3ViRGF0YShidWZmZXJUeXBlLCAwLCBhcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0XHRnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlclR5cGUsIHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCBhcnJheSwgdXBkYXRlUmFuZ2Uub2Zmc2V0LCB1cGRhdGVSYW5nZS5jb3VudCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlclR5cGUsIHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCBhcnJheS5zdWJhcnJheSh1cGRhdGVSYW5nZS5vZmZzZXQsIHVwZGF0ZVJhbmdlLm9mZnNldCArIHVwZGF0ZVJhbmdlLmNvdW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZVJhbmdlLmNvdW50ID0gLTE7IC8vIHJlc2V0IHJhbmdlXG5cdFx0fVxuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBnZXQoYXR0cmlidXRlKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTtcblx0XHRyZXR1cm4gYnVmZmVycy5nZXQoYXR0cmlidXRlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbW92ZShhdHRyaWJ1dGUpIHtcblx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhO1xuXHRcdGNvbnN0IGRhdGEgPSBidWZmZXJzLmdldChhdHRyaWJ1dGUpO1xuXG5cdFx0aWYgKGRhdGEpIHtcblx0XHRcdGdsLmRlbGV0ZUJ1ZmZlcihkYXRhLmJ1ZmZlcik7XG5cdFx0XHRidWZmZXJzLmRlbGV0ZShhdHRyaWJ1dGUpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZShhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUpIHtcblx0XHRpZiAoYXR0cmlidXRlLmlzR0xCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdGNvbnN0IGNhY2hlZCA9IGJ1ZmZlcnMuZ2V0KGF0dHJpYnV0ZSk7XG5cblx0XHRcdGlmICghY2FjaGVkIHx8IGNhY2hlZC52ZXJzaW9uIDwgYXR0cmlidXRlLnZlcnNpb24pIHtcblx0XHRcdFx0YnVmZmVycy5zZXQoYXR0cmlidXRlLCB7XG5cdFx0XHRcdFx0YnVmZmVyOiBhdHRyaWJ1dGUuYnVmZmVyLFxuXHRcdFx0XHRcdHR5cGU6IGF0dHJpYnV0ZS50eXBlLFxuXHRcdFx0XHRcdGJ5dGVzUGVyRWxlbWVudDogYXR0cmlidXRlLmVsZW1lbnRTaXplLFxuXHRcdFx0XHRcdHZlcnNpb246IGF0dHJpYnV0ZS52ZXJzaW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTtcblx0XHRjb25zdCBkYXRhID0gYnVmZmVycy5nZXQoYXR0cmlidXRlKTtcblxuXHRcdGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGJ1ZmZlcnMuc2V0KGF0dHJpYnV0ZSwgY3JlYXRlQnVmZmVyKGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSkpO1xuXHRcdH0gZWxzZSBpZiAoZGF0YS52ZXJzaW9uIDwgYXR0cmlidXRlLnZlcnNpb24pIHtcblx0XHRcdHVwZGF0ZUJ1ZmZlcihkYXRhLmJ1ZmZlciwgYXR0cmlidXRlLCBidWZmZXJUeXBlKTtcblx0XHRcdGRhdGEudmVyc2lvbiA9IGF0dHJpYnV0ZS52ZXJzaW9uO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0cmVtb3ZlOiByZW1vdmUsXG5cdFx0dXBkYXRlOiB1cGRhdGVcblx0fTtcbn1cblxuY2xhc3MgUGxhbmVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3Iod2lkdGggPSAxLCBoZWlnaHQgPSAxLCB3aWR0aFNlZ21lbnRzID0gMSwgaGVpZ2h0U2VnbWVudHMgPSAxKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUGxhbmVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHR3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLFxuXHRcdFx0aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXG5cdFx0fTtcblx0XHRjb25zdCB3aWR0aF9oYWxmID0gd2lkdGggLyAyO1xuXHRcdGNvbnN0IGhlaWdodF9oYWxmID0gaGVpZ2h0IC8gMjtcblx0XHRjb25zdCBncmlkWCA9IE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cyk7XG5cdFx0Y29uc3QgZ3JpZFkgPSBNYXRoLmZsb29yKGhlaWdodFNlZ21lbnRzKTtcblx0XHRjb25zdCBncmlkWDEgPSBncmlkWCArIDE7XG5cdFx0Y29uc3QgZ3JpZFkxID0gZ3JpZFkgKyAxO1xuXHRcdGNvbnN0IHNlZ21lbnRfd2lkdGggPSB3aWR0aCAvIGdyaWRYO1xuXHRcdGNvbnN0IHNlZ21lbnRfaGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7IC8vXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHRmb3IgKGxldCBpeSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSsrKSB7XG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xuXG5cdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCsrKSB7XG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHgsIC15LCAwKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xuXHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcblx0XHRcdFx0dXZzLnB1c2goMSAtIGl5IC8gZ3JpZFkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBncmlkWTsgaXkrKykge1xuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYOyBpeCsrKSB7XG5cdFx0XHRcdGNvbnN0IGEgPSBpeCArIGdyaWRYMSAqIGl5O1xuXHRcdFx0XHRjb25zdCBiID0gaXggKyBncmlkWDEgKiAoaXkgKyAxKTtcblx0XHRcdFx0Y29uc3QgYyA9IGl4ICsgMSArIGdyaWRYMSAqIChpeSArIDEpO1xuXHRcdFx0XHRjb25zdCBkID0gaXggKyAxICsgZ3JpZFgxICogaXk7XG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFBsYW5lR2VvbWV0cnkoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQsIGRhdGEud2lkdGhTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cyk7XG5cdH1cblxufVxuXG52YXIgYWxwaGFtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGFtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BTFBIQU1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGF0ZXN0X2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FMUEhBVEVTVFxcblxcdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xcbiNlbmRpZlwiO1xuXG52YXIgYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFURVNUXFxuXFx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XFxuI2VuZGlmXCI7XG5cbnZhciBhb21hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BT01BUFxcblxcdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEIClcXG5cXHRcXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGFvbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQU9NQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xcbiNlbmRpZlwiO1xuXG52YXIgYmVnaW5fdmVydGV4ID0gXCJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTtcIjtcblxudmFyIGJlZ2lubm9ybWFsX3ZlcnRleCA9IFwidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcXG4jaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xcbiNlbmRpZlwiO1xuXG52YXIgYnNkZnMgPSBcInZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcXG5cXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcXG59XFxudmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgZG90VkggKSB7XFxuXFx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApO1xcblxcdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XFxufVxcbmZsb2F0IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcXG5cXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XFxuXFx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xcblxcdGZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcXG5cXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XFxufVxcbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XFxuXFx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xcblxcdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcXG5cXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcXG59XFxudmVjMyBCUkRGX0dHWCggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcXG5cXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xcblxcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xcblxcdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcXG5cXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xcblxcdHZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTtcXG5cXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XFxuXFx0ZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcXG5cXHRyZXR1cm4gRiAqICggViAqIEQgKTtcXG59XFxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wO1xcblxcdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xcblxcdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcXG5cXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XFxuXFx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xcblxcdHJldHVybiB1djtcXG59XFxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XFxuXFx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xcblxcdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcXG59XFxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XFxuXFx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XFxuXFx0ZmxvYXQgeSA9IGFicyggeCApO1xcblxcdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XFxuXFx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcXG5cXHRmbG9hdCB2ID0gYSAvIGI7XFxuXFx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xcblxcdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcXG59XFxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XFxuXFx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcXG5cXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xcblxcdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XFxuXFx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIFQxLCBUMjtcXG5cXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xcblxcdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcXG5cXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xcblxcdHZlYzMgY29vcmRzWyA0IF07XFxuXFx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xcblxcdGNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XFxuXFx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcXG5cXHRjb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcXG5cXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcXG5cXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcXG5cXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XFxuXFx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xcblxcdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XFxuXFx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XFxuXFx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xcbn1cXG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xcblxcdHJldHVybiAwLjI1O1xcbn1cXG5mbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XFxuXFx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XFxufVxcbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcXG5cXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xcblxcdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcXG5cXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xcblxcdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApO1xcblxcdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XFxuXFx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xcblxcdHJldHVybiBGICogKCBHICogRCApO1xcbn1cXG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcXG5mbG9hdCBEX0NoYXJsaWUoIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgZG90TkggKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcXG5cXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xcblxcdGZsb2F0IGNvczJoID0gZG90TkggKiBkb3ROSDtcXG5cXHRmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xcblxcdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xcbn1cXG5mbG9hdCBWX05ldWJlbHQoIGZsb2F0IGRvdE5WLCBmbG9hdCBkb3ROTCApIHtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcXG59XFxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xcblxcdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XFxuXFx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xcblxcdGZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xcblxcdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xcblxcdHJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApO1xcbn1cXG4jZW5kaWZcIjtcblxudmFyIGJ1bXBtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9CVU1QTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTtcXG5cXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcXG5cXHRcXHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XFxuXFx0XFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xcblxcdFxcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcXG5cXHRcXHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcXG5cXHRcXHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcXG5cXHRcXHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcXG5cXHR9XFxuXFx0dmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcXG5cXHRcXHR2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7XFxuXFx0XFx0dmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApO1xcblxcdFxcdHZlYzMgdk4gPSBzdXJmX25vcm07XFxuXFx0XFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xcblxcdFxcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcXG5cXHRcXHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtcXG5cXHRcXHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2ZWM0IHBsYW5lO1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XFxuXFx0XFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xcblxcdFxcdGlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTXFxuXFx0XFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0XFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xcblxcdFxcdFxcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcXG5cXHRcXHRcXHRjbGlwcGVkID0gKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYmIGNsaXBwZWQ7XFxuXFx0XFx0fVxcblxcdFxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0XFx0aWYgKCBjbGlwcGVkICkgZGlzY2FyZDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcXG5cXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCA9IFwiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXFxuXFx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XFxuI2VuZGlmXCI7XG5cbnZhciBjbGlwcGluZ19wbGFuZXNfdmVydGV4ID0gXCIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcXG5cXHR2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHRkaWZmdXNlQ29sb3IgKj0gdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXFxuXFx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7XFxuI2VuZGlmXCI7XG5cbnZhciBjb2xvcl9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXFxuXFx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX3BhcnNfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcXG5cXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xcbiNlbmRpZlwiO1xuXG52YXIgY29sb3JfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcXG5cXHR2Q29sb3IgPSB2ZWM0KCAxLjAgKTtcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXFxuXFx0dkNvbG9yID0gdmVjMyggMS4wICk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DT0xPUlxcblxcdHZDb2xvciAqPSBjb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1JcXG5cXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xcbiNlbmRpZlwiO1xuXG52YXIgY29tbW9uID0gXCIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXFxuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcXG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwN1xcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxcbiNkZWZpbmUgRVBTSUxPTiAxZS02XFxuI2lmbmRlZiBzYXR1cmF0ZVxcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxcbiNlbmRpZlxcbiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApIClcXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XFxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XFxuZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfVxcbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxcbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XFxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcXG5cXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuXFx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XFxuXFx0cmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7XFxufVxcbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxcblxcdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XFxuI2Vsc2VcXG5cXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XFxuXFx0XFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcXG5cXHRcXHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XFxuXFx0fVxcbiNlbmRpZlxcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcXG5cXHR2ZWMzIGNvbG9yO1xcblxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdGJvb2wgdmlzaWJsZTtcXG59O1xcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XFxuXFx0dmVjMyBkaXJlY3REaWZmdXNlO1xcblxcdHZlYzMgZGlyZWN0U3BlY3VsYXI7XFxuXFx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XFxuXFx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xcbn07XFxuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xcblxcdHZlYzMgcG9zaXRpb247XFxuXFx0dmVjMyBub3JtYWw7XFxuXFx0dmVjMyB2aWV3RGlyO1xcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XFxuI2VuZGlmXFxufTtcXG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xcblxcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xcbn1cXG52ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcXG5cXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcXG59XFxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XFxuXFx0bWF0MyB0bXA7XFxuXFx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XFxuXFx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XFxuXFx0dG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7XFxuXFx0cmV0dXJuIHRtcDtcXG59XFxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcXG5cXHR2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7XFxuXFx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XFxufVxcbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xcblxcdHJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDtcXG59XFxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcXG5cXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcXG5cXHRmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XFxuXFx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcXG59XCI7XG5cbnZhciBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQgPSBcIiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXFxuXFx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXFxuXFx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXFxuXFx0I2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjBcXG5cXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXFxuXFx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XFxuXFx0XFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IGZhY2UgPSAtIDEuMDtcXG5cXHRcXHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XFxuXFx0XFx0XFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XFxuXFx0XFx0XFx0ZWxzZVxcblxcdFxcdFxcdFxcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXFxuXFx0XFx0XFx0XFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xcblxcdFxcdFxcdGVsc2VcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBmYWNlO1xcblxcdH1cXG5cXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcXG5cXHRcXHR2ZWMyIHV2O1xcblxcdFxcdGlmICggZmFjZSA9PSAwLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XFxuXFx0XFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xcblxcdFxcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XFxuXFx0fVxcblxcdHZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7XFxuXFx0XFx0ZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTtcXG5cXHRcXHRtaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7XFxuXFx0XFx0ZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTtcXG5cXHRcXHRmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApO1xcblxcdFxcdHZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7XFxuXFx0XFx0aWYgKCBmYWNlID4gMi4wICkge1xcblxcdFxcdFxcdHV2LnkgKz0gZmFjZVNpemU7XFxuXFx0XFx0XFx0ZmFjZSAtPSAzLjA7XFxuXFx0XFx0fVxcblxcdFxcdHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xcblxcdFxcdGlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkge1xcblxcdFxcdFxcdHV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplO1xcblxcdFxcdH1cXG5cXHRcXHR1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcXG5cXHRcXHR1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApO1xcblxcdFxcdHV2ICo9IHRleGVsU2l6ZTtcXG5cXHRcXHRyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiO1xcblxcdH1cXG5cXHQjZGVmaW5lIHIwIDEuMFxcblxcdCNkZWZpbmUgdjAgMC4zMzlcXG5cXHQjZGVmaW5lIG0wIC0gMi4wXFxuXFx0I2RlZmluZSByMSAwLjhcXG5cXHQjZGVmaW5lIHYxIDAuMjc2XFxuXFx0I2RlZmluZSBtMSAtIDEuMFxcblxcdCNkZWZpbmUgcjQgMC40XFxuXFx0I2RlZmluZSB2NCAwLjA0NlxcblxcdCNkZWZpbmUgbTQgMi4wXFxuXFx0I2RlZmluZSByNSAwLjMwNVxcblxcdCNkZWZpbmUgdjUgMC4wMTZcXG5cXHQjZGVmaW5lIG01IDMuMFxcblxcdCNkZWZpbmUgcjYgMC4yMVxcblxcdCNkZWZpbmUgdjYgMC4wMDM4XFxuXFx0I2RlZmluZSBtNiA0LjBcXG5cXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xcblxcdFxcdGZsb2F0IG1pcCA9IDAuMDtcXG5cXHRcXHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XFxuXFx0XFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xcblxcdFxcdFxcdG1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTtcXG5cXHRcXHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7XFxuXFx0XFx0XFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xcblxcdFxcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG1pcDtcXG5cXHR9XFxuXFx0dmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkge1xcblxcdFxcdGZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTtcXG5cXHRcXHRmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApO1xcblxcdFxcdGZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTtcXG5cXHRcXHR2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7XFxuXFx0XFx0aWYgKCBtaXBGID09IDAuMCApIHtcXG5cXHRcXHRcXHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcXG5cXHRcXHRcXHRyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTtcXG5cXHRcXHR9XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgZGVmYXVsdG5vcm1hbF92ZXJ0ZXggPSBcInZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XFxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXFxuXFx0bWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcXG5cXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XFxuXFx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XFxuI2VuZGlmXFxudHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcXG4jaWZkZWYgRkxJUF9TSURFRFxcblxcdHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XFxuXFx0I2lmZGVmIEZMSVBfU0lERURcXG5cXHRcXHR0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XFxuXFx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcXG5cXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XFxuI2VuZGlmXCI7XG5cbnZhciBkaXNwbGFjZW1lbnRtYXBfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxcblxcdHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XFxuI2VuZGlmXCI7XG5cbnZhciBlbWlzc2l2ZW1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxcblxcdHZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xcblxcdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcXG4jZW5kaWZcIjtcblxudmFyIGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcIjtcblxudmFyIGVuY29kaW5nc19mcmFnbWVudCA9IFwiZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7XCI7XG5cbnZhciBlbmNvZGluZ3NfcGFyc19mcmFnbWVudCA9IFwidmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcXG5cXHRyZXR1cm4gdmFsdWU7XFxufVxcbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xcblxcdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcXG59XCI7XG5cbnZhciBlbnZtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdHZlYzMgY2FtZXJhVG9GcmFnO1xcblxcdFxcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xcblxcdFxcdH1cXG5cXHRcXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cXG5cXHRcXHRcXHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZWxzZVxcblxcdFxcdHZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0O1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXFxuXFx0XFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xcblxcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApO1xcblxcdCNlbHNlXFxuXFx0XFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XFxuXFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXFxuXFx0XFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XFxuXFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXFxuXFx0XFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdHVuaWZvcm0gZmxvYXQgZW52TWFwSW50ZW5zaXR5O1xcblxcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcXG5cXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxcblxcdFxcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xcblxcdCNlbmRpZlxcblxcdFxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcXG5cXHRcXHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZfV09STERQT1NcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XFxuXFx0I2Vsc2VcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxcblxcdFxcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdFxcblxcdFxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG5cXHQjZWxzZVxcblxcdFxcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRU5WTUFQXFxuXFx0I2lmZGVmIEVOVl9XT1JMRFBPU1xcblxcdFxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxuXFx0I2Vsc2VcXG5cXHRcXHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xcblxcdFxcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcXG5cXHRcXHR9XFxuXFx0XFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cXG5cXHRcXHRcXHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0dlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZm9nX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHR2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcXG4jZW5kaWZcIjtcblxudmFyIGZvZ19wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcXG4jZW5kaWZcIjtcblxudmFyIGZvZ19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9GT0dcXG5cXHQjaWZkZWYgRk9HX0VYUDJcXG5cXHRcXHRmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTtcXG5cXHQjZWxzZVxcblxcdFxcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XFxuXFx0I2VuZGlmXFxuXFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xcbiNlbmRpZlwiO1xuXG52YXIgZm9nX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRk9HXFxuXFx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xcblxcdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xcblxcdCNpZmRlZiBGT0dfRVhQMlxcblxcdFxcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcXG5cXHQjZWxzZVxcblxcdFxcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGZvZ0ZhcjtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcXG4jZW5kaWZcXG52ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XFxuXFx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG5cXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xcblxcdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcXG5cXHRcXHRyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xcblxcdCNlbmRpZlxcbn1cIjtcblxudmFyIGxpZ2h0bWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcXG5cXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcXG5cXHRcXHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTElHSFRNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcXG5cXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX2xhbWJlcnRfdmVydGV4ID0gXCJ2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTtcXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XFxuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcXG52TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApO1xcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7XFxuI2VuZGlmXFxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcXG5mbG9hdCBkb3ROTDtcXG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG52SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xcbnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0dkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xcblxcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcXG4jZW5kaWZcXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRcXHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0Z2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdFxcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xcblxcdFxcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfcGFyc19iZWdpbiA9IFwidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XFxudW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XFxudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcXG5cXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xcblxcdHZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59XFxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTtcXG5cXHRyZXR1cm4gaXJyYWRpYW5jZTtcXG59XFxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yO1xcblxcdHJldHVybiBpcnJhZGlhbmNlO1xcbn1cXG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcXG5cXHQjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKVxcblxcdFxcdGZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTtcXG5cXHRcXHRpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkge1xcblxcdFxcdFxcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xcblxcdCNlbHNlXFxuXFx0XFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xcblxcdFxcdFxcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiAxLjA7XFxuXFx0I2VuZGlmXFxufVxcbmZsb2F0IGdldFNwb3RBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgY29uZUNvc2luZSwgY29uc3QgaW4gZmxvYXQgcGVudW1icmFDb3NpbmUsIGNvbnN0IGluIGZsb2F0IGFuZ2xlQ29zaW5lICkge1xcblxcdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcXG59XFxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxcblxcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcXG5cXHRcXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdH07XFxuXFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xcblxcdHZvaWQgZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XFxuXFx0XFx0bGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xcblxcdFxcdGxpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xcblxcdFxcdGxpZ2h0LnZpc2libGUgPSB0cnVlO1xcblxcdH1cXG4jZW5kaWZcXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdFxcdGZsb2F0IGRpc3RhbmNlO1xcblxcdFxcdGZsb2F0IGRlY2F5O1xcblxcdH07XFxuXFx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XFxuXFx0dm9pZCBnZXRQb2ludExpZ2h0SW5mbyggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcXG5cXHRcXHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XFxuXFx0XFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XFxuXFx0XFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xcblxcdFxcdGxpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcXG5cXHRcXHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XFxuXFx0XFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcXG5cXHR9XFxuI2VuZGlmXFxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgU3BvdExpZ2h0IHtcXG5cXHRcXHR2ZWMzIHBvc2l0aW9uO1xcblxcdFxcdHZlYzMgZGlyZWN0aW9uO1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0XFx0ZmxvYXQgZGlzdGFuY2U7XFxuXFx0XFx0ZmxvYXQgZGVjYXk7XFxuXFx0XFx0ZmxvYXQgY29uZUNvcztcXG5cXHRcXHRmbG9hdCBwZW51bWJyYUNvcztcXG5cXHR9O1xcblxcdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xcblxcdHZvaWQgZ2V0U3BvdExpZ2h0SW5mbyggY29uc3QgaW4gU3BvdExpZ2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XFxuXFx0XFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XFxuXFx0XFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XFxuXFx0XFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGxpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGZsb2F0IHNwb3RBdHRlbnVhdGlvbiA9IGdldFNwb3RBdHRlbnVhdGlvbiggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcXG5cXHRcXHRpZiAoIHNwb3RBdHRlbnVhdGlvbiA+IDAuMCApIHtcXG5cXHRcXHRcXHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcXG5cXHRcXHRcXHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcXG5cXHRcXHRcXHRsaWdodC52aXNpYmxlID0gZmFsc2U7XFxuXFx0XFx0fVxcblxcdH1cXG4jZW5kaWZcXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xcblxcdFxcdHZlYzMgY29sb3I7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGhhbGZXaWR0aDtcXG5cXHRcXHR2ZWMzIGhhbGZIZWlnaHQ7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcXG5cXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XFxuI2VuZGlmXFxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcXG5cXHRcXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIHNreUNvbG9yO1xcblxcdFxcdHZlYzMgZ3JvdW5kQ29sb3I7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcXG5cXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdFxcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xcblxcdFxcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XFxuXFx0XFx0cmV0dXJuIGlycmFkaWFuY2U7XFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcXG5cXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxcblxcdFxcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XFxuXFx0XFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdFxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHRcXHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7XFxuXFx0XFx0XFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0cmV0dXJuIHZlYzMoIDAuMCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHR2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0XFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdFxcdHZlYzMgcmVmbGVjdFZlYztcXG5cXHRcXHRcXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxcblxcdFxcdFxcdFxcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xcblxcdFxcdFxcdFxcdHJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7XFxuXFx0XFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRcXHRyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xcblxcdFxcdFxcdCNlbmRpZlxcblxcdFxcdFxcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0XFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7XFxuXFx0XFx0XFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB2ZWMzKCAwLjAgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfdG9vbl9mcmFnbWVudCA9IFwiVG9vbk1hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XCI7XG5cbnZhciBsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50ID0gXCJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcXG5cXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcXG59O1xcbnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxuI2RlZmluZSBSRV9EaXJlY3RcXHRcXHRcXHRcXHRSRV9EaXJlY3RfVG9vblxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXFx0XFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcXHQoMClcIjtcblxudmFyIGxpZ2h0c19waG9uZ19mcmFnbWVudCA9IFwiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoO1wiO1xuXG52YXIgbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQgPSBcInZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xcblxcdHZlYzMgZGlmZnVzZUNvbG9yO1xcblxcdHZlYzMgc3BlY3VsYXJDb2xvcjtcXG5cXHRmbG9hdCBzcGVjdWxhclNoaW5pbmVzcztcXG5cXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xcbn07XFxudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xcbn1cXG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG4jZGVmaW5lIFJFX0RpcmVjdFxcdFxcdFxcdFxcdFJFX0RpcmVjdF9CbGlublBob25nXFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcXHRcXHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVxcdCgwKVwiO1xuXG52YXIgbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50ID0gXCJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcXG5mbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTtcXG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xcbm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTtcXG4jaWZkZWYgSU9SXFxuXFx0I2lmZGVmIFNQRUNVTEFSXFxuXFx0XFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTtcXG5cXHRcXHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yO1xcblxcdFxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcXG5cXHRcXHRcXHRzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxcblxcdFxcdFxcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xcblxcdCNlbHNlXFxuXFx0XFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7XFxuXFx0XFx0dmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7XFxuXFx0XFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XFxuXFx0I2VuZGlmXFxuXFx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcXG4jZWxzZVxcblxcdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XFxuXFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxcblxcdFxcdG1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcXG5cXHRcXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XFxuXFx0I2VuZGlmXFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1xcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTtcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfU0hFRU5cXG5cXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjtcXG5cXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcXG5cXHRcXHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xcblxcdCNlbmRpZlxcblxcdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcXG5cXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXFxuXFx0XFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50ID0gXCJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XFxuXFx0dmVjMyBkaWZmdXNlQ29sb3I7XFxuXFx0ZmxvYXQgcm91Z2huZXNzO1xcblxcdHZlYzMgc3BlY3VsYXJDb2xvcjtcXG5cXHRmbG9hdCBzcGVjdWxhckY5MDtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGZsb2F0IGNsZWFyY29hdDtcXG5cXHRcXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XFxuXFx0XFx0dmVjMyBjbGVhcmNvYXRGMDtcXG5cXHRcXHRmbG9hdCBjbGVhcmNvYXRGOTA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TSEVFTlxcblxcdFxcdHZlYzMgc2hlZW5Db2xvcjtcXG5cXHRcXHRmbG9hdCBzaGVlblJvdWdobmVzcztcXG5cXHQjZW5kaWZcXG59O1xcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcXG52ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcXG5mbG9hdCBJQkxTaGVlbkJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcykge1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG5cXHRmbG9hdCBhID0gcm91Z2huZXNzIDwgMC4yNSA/IC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45IDogLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1O1xcblxcdGZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjtcXG5cXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIERHICogUkVDSVBST0NBTF9QSSApO1xcbn1cXG52ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRjb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcXG5cXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcXG5cXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xcblxcdGZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xcblxcdHZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcXG5cXHRyZXR1cm4gZmFiO1xcbn1cXG52ZWMzIEVudmlyb25tZW50QlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xcblxcdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xcbn1cXG52b2lkIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHtcXG5cXHR2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcXG5cXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XFxuXFx0ZmxvYXQgRXNzID0gZmFiLnggKyBmYWIueTtcXG5cXHRmbG9hdCBFbXMgPSAxLjAgLSBFc3M7XFxuXFx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XFx0dmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XFxuXFx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XFxuXFx0bXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcXG59XFxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxcblxcdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdFxcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xcblxcdFxcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xcblxcdFxcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xcblxcdFxcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XFxuXFx0XFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xcblxcdFxcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XFxuXFx0XFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xcblxcdFxcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xcblxcdFxcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcXHRcXHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XFxuXFx0XFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xcblxcdFxcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcXG5cXHRcXHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xcblxcdFxcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xcblxcdFxcdHZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xcblxcdFxcdG1hdDMgbUludiA9IG1hdDMoXFxuXFx0XFx0XFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxcblxcdFxcdFxcdHZlYzMoXHRcdDAsIDEsXHRcdDAgKSxcXG5cXHRcXHRcXHR2ZWMzKCB0MS56LCAwLCB0MS53IClcXG5cXHRcXHQpO1xcblxcdFxcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xcblxcdH1cXG4jZW5kaWZcXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XFxuXFx0XFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcblxcdHZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcXG5cXHRjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xcblxcdHZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcXG59XFxuI2RlZmluZSBSRV9EaXJlY3RcXHRcXHRcXHRcXHRSRV9EaXJlY3RfUGh5c2ljYWxcXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVxcdFxcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXFx0XFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXFx0XFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xcbn1cIjtcblxudmFyIGxpZ2h0c19mcmFnbWVudF9iZWdpbiA9IFwiXFxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcXG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcXG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XFxuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xcbiNlbmRpZlxcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XFxuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcXG5cXHQjZW5kaWZcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcXG5cXHRcXHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXFxuXFx0XFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdFNwb3RMaWdodCBzcG90TGlnaHQ7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XFxuXFx0I2VuZGlmXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XFxuXFx0XFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxcblxcdFxcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxcblxcdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcXG5cXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XFxuXFx0I2VuZGlmXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xcblxcdFxcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xcblxcdFxcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXFxuXFx0XFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxcblxcdFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XFxuXFx0XFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXFxuXFx0dmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcXG5cXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0XFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xcblxcdFxcdFxcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcXG5cXHRcXHR9XFxuXFx0XFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXFxuXFx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19mcmFnbWVudF9tYXBzID0gXCIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcXG5cXHQjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0XFx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdFxcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcXG5cXHRcXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcXG5cXHRcXHRcXHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XFxuXFx0I2VuZGlmXFxuXFx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApICYmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxcblxcdFxcdGlibElycmFkaWFuY2UgKz0gZ2V0SUJMSXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcXG5cXHRyYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcXG5cXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdFxcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX2ZyYWdtZW50X2VuZCA9IFwiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXFxuXFx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxcblxcdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcXG5cXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XFxuI2VuZGlmXCI7XG5cbnZhciBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXFxuXFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xcblxcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcXG5cXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcXG5cXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxcblxcdFxcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcXG5cXHRcXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXFxuXFx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcXG5cXHRcXHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcXG5cXHRcXHR2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTtcXG5cXHQjZWxzZVxcblxcdFxcdGlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkge1xcblxcdFxcdFxcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcXG5cXHRcXHRcXHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XFxuXFx0XFx0fVxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX01BUFxcblxcdHZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcXG5cXHQjaWZkZWYgREVDT0RFX1ZJREVPX1RFWFRVUkVcXG5cXHRcXHRzYW1wbGVkRGlmZnVzZUNvbG9yID0gdmVjNCggbWl4KCBwb3coIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcXG5cXHQjZW5kaWZcXG5cXHRkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9wYXJ0aWNsZV9mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxcblxcdHZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUFQXFxuXFx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XFxuI2VuZGlmXCI7XG5cbnZhciBtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxcblxcdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0FMUEhBTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBtZXRhbG5lc3NtYXBfZnJhZ21lbnQgPSBcImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcXG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxcblxcdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XFxuXFx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XFxuI2VuZGlmXCI7XG5cbnZhciBtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaG5vcm1hbF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcXG5cXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcXG5cXHRcXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7XFxuXFx0XFx0XFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XFxuXFx0XFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xcblxcdFxcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaHRhcmdldF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcXG5cXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcXG5cXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xcblxcdFxcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcXG5cXHRcXHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xcblxcdFxcdFxcdGZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTtcXG5cXHRcXHRcXHRmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7XFxuXFx0XFx0XFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcXG5cXHRcXHRcXHR2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7XFxuXFx0XFx0XFx0cmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7XFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0XFx0XFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBtb3JwaHRhcmdldF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXFxuXFx0dHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xcblxcdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxcblxcdFxcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcXG5cXHRcXHRcXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcXG5cXHRcXHRcXHRcXHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XFxuXFx0XFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRcXHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XFxuXFx0XFx0XFx0I2VuZGlmXFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XFxuXFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XFxuXFx0XFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XFxuXFx0XFx0XFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfZnJhZ21lbnRfYmVnaW4gPSBcImZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wO1xcbiNpZmRlZiBGTEFUX1NIQURFRFxcblxcdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xcblxcdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xcblxcdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xcbiNlbHNlXFxuXFx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcXG5cXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0bm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XFxuXFx0XFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xcblxcdFxcdFxcdGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0XFx0I2VuZGlmXFxuXFx0XFx0I2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApXFxuXFx0XFx0XFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO1wiO1xuXG52YXIgbm9ybWFsX2ZyYWdtZW50X21hcHMgPSBcIiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcXG5cXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xcblxcdCNpZmRlZiBGTElQX1NJREVEXFxuXFx0XFx0bm9ybWFsID0gLSBub3JtYWw7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0I2VuZGlmXFxuXFx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcXG4jZWxpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xcblxcdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0bm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xcblxcdCNlbHNlXFxuXFx0XFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XFxuXFx0I2VuZGlmXFxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxcblxcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsX3BhcnNfZnJhZ21lbnQgPSBcIiNpZm5kZWYgRkxBVF9TSEFERURcXG5cXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfcGFyc192ZXJ0ZXggPSBcIiNpZm5kZWYgRkxBVF9TSEFERURcXG5cXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxfdmVydGV4ID0gXCIjaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XFxuXFx0XFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX05PUk1BTE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG5cXHR1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7XFxuI2VuZGlmXFxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxcblxcdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XFxuI2VuZGlmXFxuI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApIClcXG5cXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XFxuXFx0XFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcXG5cXHRcXHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xcblxcdFxcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XFxuXFx0XFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcXG5cXHRcXHR2ZWMzIE4gPSBzdXJmX25vcm07XFxuXFx0XFx0dmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTtcXG5cXHRcXHR2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApO1xcblxcdFxcdHZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XFxuXFx0XFx0dmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcXG5cXHRcXHRmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApO1xcblxcdFxcdGZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApO1xcblxcdFxcdHJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4gPSBcIiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcXG4jZW5kaWZcIjtcblxudmFyIGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcyA9IFwiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXFxuXFx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcXG5cXHRjbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcXG5cXHQjZWxzZVxcblxcdFxcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XFxuXFx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xcbiNlbmRpZlwiO1xuXG52YXIgb3V0cHV0X2ZyYWdtZW50ID0gXCIjaWZkZWYgT1BBUVVFXFxuZGlmZnVzZUNvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5kaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTtcXG4jZW5kaWZcXG5nbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1wiO1xuXG52YXIgcGFja2luZyA9IFwidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xcbn1cXG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcXG5cXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcXG59XFxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcXG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApO1xcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xcbnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xcblxcdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xcblxcdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XFx0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcXG59XFxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcXG5cXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7XFxufVxcbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XFxuXFx0dmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSApO1xcblxcdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7XFxufVxcbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcXG5cXHRyZXR1cm4gdmVjMiggdi54ICsgKCB2LnkgLyAyNTUuMCApLCB2LnogKyAoIHYudyAvIDI1NS4wICkgKTtcXG59XFxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XFxufVxcbmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XFxufVxcbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xcblxcdHJldHVybiAoICggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xcbn1cXG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcXG59XCI7XG5cbnZhciBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50ID0gXCIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxcblxcdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXCI7XG5cbnZhciBwcm9qZWN0X3ZlcnRleCA9IFwidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xcblxcdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XFxuI2VuZGlmXFxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XFxuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcIjtcblxudmFyIGRpdGhlcmluZ19mcmFnbWVudCA9IFwiI2lmZGVmIERJVEhFUklOR1xcblxcdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcXG4jZW5kaWZcIjtcblxudmFyIGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgRElUSEVSSU5HXFxuXFx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0XFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xcblxcdFxcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XFxuXFx0XFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcXG5cXHRcXHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHJvdWdobmVzc21hcF9mcmFnbWVudCA9IFwiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXFxuXFx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcXG5cXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcXG4jZW5kaWZcIjtcblxudmFyIHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xcblxcdFxcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xcblxcdH1cXG5cXHR2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHtcXG5cXHRcXHRyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7XFxuXFx0fVxcblxcdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xcblxcdFxcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcXG5cXHRcXHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xcblxcdFxcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XFxuXFx0XFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcXG5cXHRcXHRcXHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XFxuXFx0XFx0XFx0ZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTtcXG5cXHRcXHRcXHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1xcdFxcdFxcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1xcdFxcdFxcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gb2NjbHVzaW9uO1xcblxcdH1cXG5cXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xcblxcdFxcdGZsb2F0IHNoYWRvdyA9IDEuMDtcXG5cXHRcXHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcXG5cXHRcXHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XFxuXFx0XFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xcblxcdFxcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcXG5cXHRcXHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XFxuXFx0XFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcXG5cXHRcXHRpZiAoIGZydXN0dW1UZXN0ICkge1xcblxcdFxcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxcblxcdFxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xcblxcdFxcdFxcdGZsb2F0IGR5MiA9IGR5MCAvIDIuMDtcXG5cXHRcXHRcXHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XFxuXFx0XFx0XFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xcblxcdFxcdFxcdHNoYWRvdyA9IChcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyAxNy4wICk7XFxuXFx0XFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxcblxcdFxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XFxuXFx0XFx0XFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcXG5cXHRcXHRcXHR2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7XFxuXFx0XFx0XFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xcblxcdFxcdFxcdHV2IC09IGYgKiB0ZXhlbFNpemU7XFxuXFx0XFx0XFx0c2hhZG93ID0gKFxcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnggKSArXFxuXFx0XFx0XFx0XFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi54ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi55ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueSApICtcXG5cXHRcXHRcXHRcXHRtaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0XFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0XFx0XHRmLnggKSxcXG5cXHRcXHRcXHRcXHRcXHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdFxcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0XFx0XHRmLnggKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi55IClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyA5LjAgKTtcXG5cXHRcXHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxcblxcdFxcdFxcdHNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gc2hhZG93O1xcblxcdH1cXG5cXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XFxuXFx0XFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XFxuXFx0XFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XFxuXFx0XFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcXG5cXHRcXHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XFxuXFx0XFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xcblxcdFxcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XFxuXFx0XFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xcblxcdFxcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcXG5cXHRcXHRcXHRpZiAoIHYueiA+IDAuMCApXFxuXFx0XFx0XFx0XFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XFxuXFx0XFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcXG5cXHRcXHRcXHRmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApO1xcblxcdFxcdFxcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcXG5cXHRcXHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xcblxcdFxcdFxcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XFxuXFx0XFx0XFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtcXG5cXHRcXHRcXHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XFxuXFx0fVxcblxcdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xcblxcdFxcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XFxuXFx0XFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XFxuXFx0XFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcXHRcXHRkcCArPSBzaGFkb3dCaWFzO1xcblxcdFxcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcXG5cXHRcXHRcXHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XFxuXFx0XFx0XFx0cmV0dXJuIChcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcXG5cXHRcXHRcXHQpICogKCAxLjAgLyA5LjAgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hcF9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBzaGFkb3dtYXBfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NIQURPV01BUFxcblxcdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdFxcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xcblxcdFxcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcXG5cXHRcXHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xcblxcdFxcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNoYWRvd21hc2tfcGFyc19mcmFnbWVudCA9IFwiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcXG5cXHRmbG9hdCBzaGFkb3cgPSAxLjA7XFxuXFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdCNlbmRpZlxcblxcdCNlbmRpZlxcblxcdHJldHVybiBzaGFkb3c7XFxufVwiO1xuXG52YXIgc2tpbmJhc2VfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NLSU5OSU5HXFxuXFx0bWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XFxuXFx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XFxuXFx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XFxuXFx0bWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7XFxuI2VuZGlmXCI7XG5cbnZhciBza2lubmluZ19wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xcblxcdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcXG5cXHQjaWZkZWYgQk9ORV9URVhUVVJFXFxuXFx0XFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XFxuXFx0XFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xcblxcdFxcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcXG5cXHRcXHRcXHRmbG9hdCBqID0gaSAqIDQuMDtcXG5cXHRcXHRcXHRmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcXG5cXHRcXHRcXHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcXG5cXHRcXHRcXHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcXG5cXHRcXHRcXHRmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcXG5cXHRcXHRcXHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcXG5cXHRcXHRcXHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0dmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xcblxcdFxcdFxcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcXG5cXHRcXHRcXHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0bWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcXG5cXHRcXHRcXHRyZXR1cm4gYm9uZTtcXG5cXHRcXHR9XFxuXFx0I2Vsc2VcXG5cXHRcXHR1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcXG5cXHRcXHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XFxuXFx0XFx0XFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcXG5cXHRcXHRcXHRyZXR1cm4gYm9uZTtcXG5cXHRcXHR9XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBza2lubmluZ192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0tJTk5JTkdcXG5cXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcblxcdHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56O1xcblxcdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xcblxcdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XFxuI2VuZGlmXCI7XG5cbnZhciBza2lubm9ybWFsX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7XFxuXFx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcXG5cXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XFxuXFx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XFxuXFx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0b2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIHNwZWN1bGFybWFwX2ZyYWdtZW50ID0gXCJmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcXG5cXHR2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcXG5cXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xcbiNlbHNlXFxuXFx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcXG4jZW5kaWZcIjtcblxudmFyIHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcXG4jZW5kaWZcIjtcblxudmFyIHRvbmVtYXBwaW5nX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcXG5cXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcXG4jZW5kaWZcIjtcblxudmFyIHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQgPSBcIiNpZm5kZWYgc2F0dXJhdGVcXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XFxudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xcbn1cXG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcXG59XFxudmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xcblxcdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xcblxcdHJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7XFxufVxcbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XFxuXFx0dmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7XFxuXFx0dmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTtcXG5cXHRyZXR1cm4gYSAvIGI7XFxufVxcbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdGNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0MyhcXG5cXHRcXHR2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksXFx0XFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxcblxcdFxcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxcblxcdCk7XFxuXFx0Y29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0MyhcXG5cXHRcXHR2ZWMzKFx0MS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksXFx0XFx0dmVjMyggLTAuNTMxMDgsXHQxLjEwODEzLCAtMC4wNzI3NiApLFxcblxcdFxcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSxcdDEuMDc2MDIgKVxcblxcdCk7XFxuXFx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjtcXG5cXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xcblxcdGNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApO1xcblxcdGNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yO1xcblxcdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcXG59XFxudmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9XCI7XG5cbnZhciB0cmFuc21pc3Npb25fZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0ZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7XFxuXFx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xcblxcdGZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzcztcXG5cXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxcblxcdFxcdHRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxcblxcdFxcdHRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZztcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xcblxcdHZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTtcXG5cXHR2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXFxuXFx0XFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxcblxcdFxcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxcblxcdFxcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcXG5cXHR0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XFxuXFx0dHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XFxuI2VuZGlmXCI7XG5cbnZhciB0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5cXHR1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjtcXG5cXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcXG5cXHR1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7XFxuXFx0dW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7XFxuXFx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XFxuXFx0I2VuZGlmXFxuXFx0dW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplO1xcblxcdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XFxuXFx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xcblxcdHVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xcblxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG5cXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xcblxcdFxcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xcblxcdFxcdHZlYzMgbW9kZWxTY2FsZTtcXG5cXHRcXHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcXG5cXHRcXHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcXG5cXHRcXHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcXG5cXHRcXHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xcblxcdH1cXG5cXHRmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcXG5cXHRcXHRyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcXG5cXHR9XFxuXFx0dmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcXG5cXHRcXHRmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7XFxuXFx0XFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0dmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xcblxcdFxcdGlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHJhZGlhbmNlO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0dmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcXG5cXHRcXHRcXHR2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7XFx0XFx0XFx0cmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTtcXG5cXHRcXHR9XFxuXFx0fVxcblxcdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXFxuXFx0XFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcXG5cXHRcXHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXFxuXFx0XFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xcblxcdFxcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcXG5cXHRcXHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcXG5cXHRcXHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XFxuXFx0XFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XFxuXFx0XFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XFxuXFx0XFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XFxuXFx0XFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xcblxcdFxcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcXG5cXHRcXHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcXG5cXHRcXHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIHV2X3BhcnNfZnJhZ21lbnQgPSBcIiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxcblxcdHZhcnlpbmcgdmVjMiB2VXY7XFxuI2VuZGlmXCI7XG5cbnZhciB1dl9wYXJzX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9VVlxcblxcdCNpZmRlZiBVVlNfVkVSVEVYX09OTFlcXG5cXHRcXHR2ZWMyIHZVdjtcXG5cXHQjZWxzZVxcblxcdFxcdHZhcnlpbmcgdmVjMiB2VXY7XFxuXFx0I2VuZGlmXFxuXFx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xcbiNlbmRpZlwiO1xuXG52YXIgdXZfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1VWXFxuXFx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcXG4jZW5kaWZcIjtcblxudmFyIHV2Ml9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzIgdlV2MjtcXG4jZW5kaWZcIjtcblxudmFyIHV2Ml9wYXJzX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXFxuXFx0YXR0cmlidXRlIHZlYzIgdXYyO1xcblxcdHZhcnlpbmcgdmVjMiB2VXYyO1xcblxcdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XFxuI2VuZGlmXCI7XG5cbnZhciB1djJfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcXG5cXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xcbiNlbmRpZlwiO1xuXG52YXIgd29ybGRwb3NfdmVydGV4ID0gXCIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApXFxuXFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xcblxcdCNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xcblxcdFxcdHdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247XFxuXFx0I2VuZGlmXFxuXFx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcIjtcblxuY29uc3QgdmVydGV4JGcgPSBcInZhcnlpbmcgdmVjMiB2VXY7XFxudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xcblxcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkZyA9IFwidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xcbnZhcnlpbmcgdmVjMiB2VXY7XFxudm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRmID0gXCJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxudm9pZCBtYWluKCkge1xcblxcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkZiA9IFwiI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uO1xcblxcdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XFxuXFx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XFxuXFx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRlID0gXCIjaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxcblxcdFxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xcbn1cIjtcbmNvbnN0IGZyYWdtZW50JGUgPSBcIiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xcblxcdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHRcXHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0ZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41O1xcblxcdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcXG5cXHRcXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcXG5cXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcXG5cXHRcXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcXG5cXHQjZW5kaWZcXG59XCI7XG5cbmNvbnN0IHZlcnRleCRkID0gXCIjZGVmaW5lIERJU1RBTkNFXFxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHRcXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkZCA9IFwiI2RlZmluZSBESVNUQU5DRVxcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcXG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbiAoKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xcblxcdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcXG5cXHRkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTtcXG5cXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcXG59XCI7XG5cbmNvbnN0IHZlcnRleCRjID0gXCJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxudm9pZCBtYWluKCkge1xcblxcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkYyA9IFwidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xcblxcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcXG5cXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRiID0gXCJ1bmlmb3JtIGZsb2F0IHNjYWxlO1xcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XFxudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkYiA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XFxudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XFxudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcXG5cXHRcXHRkaXNjYXJkO1xcblxcdH1cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRhID0gXCIjaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKVxcblxcdFxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2VuZGlmXFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCRhID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2lmbmRlZiBGTEFUX1NIQURFRFxcblxcdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0I2lmZGVmIFVTRV9MSUdIVE1BUFxcblxcdFxcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xcblxcdCNlbHNlXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ5ID0gXCIjZGVmaW5lIExBTUJFUlRcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XFxudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG5cXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcXG5cXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCQ5ID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcXG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xcblxcdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cXG5cXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjaztcXG5cXHQjZWxzZVxcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDtcXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xcblxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xcblxcdCNlbHNlXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250O1xcblxcdCNlbmRpZlxcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ4ID0gXCIjZGVmaW5lIE1BVENBUFxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG59XCI7XG5jb25zdCBmcmFnbWVudCQ4ID0gXCIjZGVmaW5lIE1BVENBUFxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0dmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XFxuXFx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xcblxcdHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XFxuXFx0dmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xcblxcdCNpZmRlZiBVU0VfTUFUQ0FQXFxuXFx0XFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xcblxcdCNlbHNlXFxuXFx0XFx0dmVjNCBtYXRjYXBDb2xvciA9IHZlYzQoIHZlYzMoIG1peCggMC4yLCAwLjgsIHV2LnkgKSApLCAxLjAgKTtcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDcgPSBcIiNkZWZpbmUgTk9STUFMXFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuI2VuZGlmXFxufVwiO1xuY29uc3QgZnJhZ21lbnQkNyA9IFwiI2RlZmluZSBOT1JNQUxcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNiA9IFwiI2RlZmluZSBQSE9OR1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx1djJfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDYgPSBcIiNkZWZpbmUgUEhPTkdcXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xcblxcdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDUgPSBcIiNkZWZpbmUgU1RBTkRBUkRcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcblxcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cXG5cXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xcbiNlbmRpZlxcbn1cIjtcbmNvbnN0IGZyYWdtZW50JDUgPSBcIiNkZWZpbmUgU1RBTkRBUkRcXG4jaWZkZWYgUEhZU0lDQUxcXG5cXHQjZGVmaW5lIElPUlxcblxcdCNkZWZpbmUgU1BFQ1VMQVJcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XFxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpZmRlZiBJT1JcXG5cXHR1bmlmb3JtIGZsb2F0IGlvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJcXG5cXHR1bmlmb3JtIGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5O1xcblxcdHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xcblxcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwO1xcblxcdCNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XFxuXFx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9TSEVFTlxcblxcdHVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yO1xcblxcdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XFxuXFx0I2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XFxuXFx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxcblxcdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcXG5cXHR2ZWMzIHRvdGFsU3BlY3VsYXIgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XFxuXFx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpZmRlZiBVU0VfU0hFRU5cXG5cXHRcXHRmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTtcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcXG5cXHRcXHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xcblxcdFxcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDQgPSBcIiNkZWZpbmUgVE9PTlxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCQ0ID0gXCIjZGVmaW5lIFRPT05cXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQzID0gXCJ1bmlmb3JtIGZsb2F0IHNpemU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdGdsX1BvaW50U2l6ZSA9IHNpemU7XFxuXFx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cXG5cXHRcXHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XFxuXFx0XFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5jb25zdCBmcmFnbWVudCQzID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDIgPSBcIiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkMiA9IFwidW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDEgPSBcInVuaWZvcm0gZmxvYXQgcm90YXRpb247XFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xcblxcdHZlYzIgc2NhbGU7XFxuXFx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XFxuXFx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XFxuXFx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXFxuXFx0XFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xcblxcdFxcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56O1xcblxcdCNlbmRpZlxcblxcdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XFxuXFx0dmVjMiByb3RhdGVkUG9zaXRpb247XFxuXFx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xcblxcdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcXG5cXHRtdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcXG5cXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuY29uc3QgZnJhZ21lbnQkMSA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IFNoYWRlckNodW5rID0ge1xuXHRhbHBoYW1hcF9mcmFnbWVudDogYWxwaGFtYXBfZnJhZ21lbnQsXG5cdGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IGFscGhhbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGFscGhhdGVzdF9mcmFnbWVudDogYWxwaGF0ZXN0X2ZyYWdtZW50LFxuXHRhbHBoYXRlc3RfcGFyc19mcmFnbWVudDogYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQsXG5cdGFvbWFwX2ZyYWdtZW50OiBhb21hcF9mcmFnbWVudCxcblx0YW9tYXBfcGFyc19mcmFnbWVudDogYW9tYXBfcGFyc19mcmFnbWVudCxcblx0YmVnaW5fdmVydGV4OiBiZWdpbl92ZXJ0ZXgsXG5cdGJlZ2lubm9ybWFsX3ZlcnRleDogYmVnaW5ub3JtYWxfdmVydGV4LFxuXHRic2RmczogYnNkZnMsXG5cdGJ1bXBtYXBfcGFyc19mcmFnbWVudDogYnVtcG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudCxcblx0Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg6IGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCxcblx0Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3ZlcnRleCxcblx0Y29sb3JfZnJhZ21lbnQ6IGNvbG9yX2ZyYWdtZW50LFxuXHRjb2xvcl9wYXJzX2ZyYWdtZW50OiBjb2xvcl9wYXJzX2ZyYWdtZW50LFxuXHRjb2xvcl9wYXJzX3ZlcnRleDogY29sb3JfcGFyc192ZXJ0ZXgsXG5cdGNvbG9yX3ZlcnRleDogY29sb3JfdmVydGV4LFxuXHRjb21tb246IGNvbW1vbixcblx0Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQsXG5cdGRlZmF1bHRub3JtYWxfdmVydGV4OiBkZWZhdWx0bm9ybWFsX3ZlcnRleCxcblx0ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXgsXG5cdGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXgsXG5cdGVtaXNzaXZlbWFwX2ZyYWdtZW50OiBlbWlzc2l2ZW1hcF9mcmFnbWVudCxcblx0ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDogZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudCxcblx0ZW5jb2RpbmdzX2ZyYWdtZW50OiBlbmNvZGluZ3NfZnJhZ21lbnQsXG5cdGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiBlbmNvZGluZ3NfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX2ZyYWdtZW50OiBlbnZtYXBfZnJhZ21lbnQsXG5cdGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDogZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50LFxuXHRlbnZtYXBfcGFyc19mcmFnbWVudDogZW52bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF9wYXJzX3ZlcnRleDogZW52bWFwX3BhcnNfdmVydGV4LFxuXHRlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDogZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF92ZXJ0ZXg6IGVudm1hcF92ZXJ0ZXgsXG5cdGZvZ192ZXJ0ZXg6IGZvZ192ZXJ0ZXgsXG5cdGZvZ19wYXJzX3ZlcnRleDogZm9nX3BhcnNfdmVydGV4LFxuXHRmb2dfZnJhZ21lbnQ6IGZvZ19mcmFnbWVudCxcblx0Zm9nX3BhcnNfZnJhZ21lbnQ6IGZvZ19wYXJzX2ZyYWdtZW50LFxuXHRncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiBncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodG1hcF9mcmFnbWVudDogbGlnaHRtYXBfZnJhZ21lbnQsXG5cdGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDogbGlnaHRzX2xhbWJlcnRfdmVydGV4LFxuXHRsaWdodHNfcGFyc19iZWdpbjogbGlnaHRzX3BhcnNfYmVnaW4sXG5cdGxpZ2h0c190b29uX2ZyYWdtZW50OiBsaWdodHNfdG9vbl9mcmFnbWVudCxcblx0bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDogbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX3Bob25nX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfZnJhZ21lbnQsXG5cdGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQsXG5cdGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX2ZyYWdtZW50X2JlZ2luOiBsaWdodHNfZnJhZ21lbnRfYmVnaW4sXG5cdGxpZ2h0c19mcmFnbWVudF9tYXBzOiBsaWdodHNfZnJhZ21lbnRfbWFwcyxcblx0bGlnaHRzX2ZyYWdtZW50X2VuZDogbGlnaHRzX2ZyYWdtZW50X2VuZCxcblx0bG9nZGVwdGhidWZfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdtZW50LFxuXHRsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50LFxuXHRsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDogbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXgsXG5cdGxvZ2RlcHRoYnVmX3ZlcnRleDogbG9nZGVwdGhidWZfdmVydGV4LFxuXHRtYXBfZnJhZ21lbnQ6IG1hcF9mcmFnbWVudCxcblx0bWFwX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRtYXBfcGFydGljbGVfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9mcmFnbWVudCxcblx0bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50LFxuXHRtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9mcmFnbWVudCxcblx0bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50LFxuXHRtb3JwaG5vcm1hbF92ZXJ0ZXg6IG1vcnBobm9ybWFsX3ZlcnRleCxcblx0bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4LFxuXHRtb3JwaHRhcmdldF92ZXJ0ZXg6IG1vcnBodGFyZ2V0X3ZlcnRleCxcblx0bm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBub3JtYWxfZnJhZ21lbnRfYmVnaW4sXG5cdG5vcm1hbF9mcmFnbWVudF9tYXBzOiBub3JtYWxfZnJhZ21lbnRfbWFwcyxcblx0bm9ybWFsX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbF9wYXJzX2ZyYWdtZW50LFxuXHRub3JtYWxfcGFyc192ZXJ0ZXg6IG5vcm1hbF9wYXJzX3ZlcnRleCxcblx0bm9ybWFsX3ZlcnRleDogbm9ybWFsX3ZlcnRleCxcblx0bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luLFxuXHRjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6IGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcyxcblx0Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50LFxuXHRvdXRwdXRfZnJhZ21lbnQ6IG91dHB1dF9mcmFnbWVudCxcblx0cGFja2luZzogcGFja2luZyxcblx0cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDogcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudCxcblx0cHJvamVjdF92ZXJ0ZXg6IHByb2plY3RfdmVydGV4LFxuXHRkaXRoZXJpbmdfZnJhZ21lbnQ6IGRpdGhlcmluZ19mcmFnbWVudCxcblx0ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50LFxuXHRyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6IHJvdWdobmVzc21hcF9mcmFnbWVudCxcblx0cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50LFxuXHRzaGFkb3dtYXBfcGFyc19mcmFnbWVudDogc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQsXG5cdHNoYWRvd21hcF9wYXJzX3ZlcnRleDogc2hhZG93bWFwX3BhcnNfdmVydGV4LFxuXHRzaGFkb3dtYXBfdmVydGV4OiBzaGFkb3dtYXBfdmVydGV4LFxuXHRzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6IHNoYWRvd21hc2tfcGFyc19mcmFnbWVudCxcblx0c2tpbmJhc2VfdmVydGV4OiBza2luYmFzZV92ZXJ0ZXgsXG5cdHNraW5uaW5nX3BhcnNfdmVydGV4OiBza2lubmluZ19wYXJzX3ZlcnRleCxcblx0c2tpbm5pbmdfdmVydGV4OiBza2lubmluZ192ZXJ0ZXgsXG5cdHNraW5ub3JtYWxfdmVydGV4OiBza2lubm9ybWFsX3ZlcnRleCxcblx0c3BlY3VsYXJtYXBfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX2ZyYWdtZW50LFxuXHRzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiBzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50LFxuXHR0b25lbWFwcGluZ19mcmFnbWVudDogdG9uZW1hcHBpbmdfZnJhZ21lbnQsXG5cdHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQsXG5cdHRyYW5zbWlzc2lvbl9mcmFnbWVudDogdHJhbnNtaXNzaW9uX2ZyYWdtZW50LFxuXHR0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudDogdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQsXG5cdHV2X3BhcnNfZnJhZ21lbnQ6IHV2X3BhcnNfZnJhZ21lbnQsXG5cdHV2X3BhcnNfdmVydGV4OiB1dl9wYXJzX3ZlcnRleCxcblx0dXZfdmVydGV4OiB1dl92ZXJ0ZXgsXG5cdHV2Ml9wYXJzX2ZyYWdtZW50OiB1djJfcGFyc19mcmFnbWVudCxcblx0dXYyX3BhcnNfdmVydGV4OiB1djJfcGFyc192ZXJ0ZXgsXG5cdHV2Ml92ZXJ0ZXg6IHV2Ml92ZXJ0ZXgsXG5cdHdvcmxkcG9zX3ZlcnRleDogd29ybGRwb3NfdmVydGV4LFxuXHRiYWNrZ3JvdW5kX3ZlcnQ6IHZlcnRleCRnLFxuXHRiYWNrZ3JvdW5kX2ZyYWc6IGZyYWdtZW50JGcsXG5cdGN1YmVfdmVydDogdmVydGV4JGYsXG5cdGN1YmVfZnJhZzogZnJhZ21lbnQkZixcblx0ZGVwdGhfdmVydDogdmVydGV4JGUsXG5cdGRlcHRoX2ZyYWc6IGZyYWdtZW50JGUsXG5cdGRpc3RhbmNlUkdCQV92ZXJ0OiB2ZXJ0ZXgkZCxcblx0ZGlzdGFuY2VSR0JBX2ZyYWc6IGZyYWdtZW50JGQsXG5cdGVxdWlyZWN0X3ZlcnQ6IHZlcnRleCRjLFxuXHRlcXVpcmVjdF9mcmFnOiBmcmFnbWVudCRjLFxuXHRsaW5lZGFzaGVkX3ZlcnQ6IHZlcnRleCRiLFxuXHRsaW5lZGFzaGVkX2ZyYWc6IGZyYWdtZW50JGIsXG5cdG1lc2hiYXNpY192ZXJ0OiB2ZXJ0ZXgkYSxcblx0bWVzaGJhc2ljX2ZyYWc6IGZyYWdtZW50JGEsXG5cdG1lc2hsYW1iZXJ0X3ZlcnQ6IHZlcnRleCQ5LFxuXHRtZXNobGFtYmVydF9mcmFnOiBmcmFnbWVudCQ5LFxuXHRtZXNobWF0Y2FwX3ZlcnQ6IHZlcnRleCQ4LFxuXHRtZXNobWF0Y2FwX2ZyYWc6IGZyYWdtZW50JDgsXG5cdG1lc2hub3JtYWxfdmVydDogdmVydGV4JDcsXG5cdG1lc2hub3JtYWxfZnJhZzogZnJhZ21lbnQkNyxcblx0bWVzaHBob25nX3ZlcnQ6IHZlcnRleCQ2LFxuXHRtZXNocGhvbmdfZnJhZzogZnJhZ21lbnQkNixcblx0bWVzaHBoeXNpY2FsX3ZlcnQ6IHZlcnRleCQ1LFxuXHRtZXNocGh5c2ljYWxfZnJhZzogZnJhZ21lbnQkNSxcblx0bWVzaHRvb25fdmVydDogdmVydGV4JDQsXG5cdG1lc2h0b29uX2ZyYWc6IGZyYWdtZW50JDQsXG5cdHBvaW50c192ZXJ0OiB2ZXJ0ZXgkMyxcblx0cG9pbnRzX2ZyYWc6IGZyYWdtZW50JDMsXG5cdHNoYWRvd192ZXJ0OiB2ZXJ0ZXgkMixcblx0c2hhZG93X2ZyYWc6IGZyYWdtZW50JDIsXG5cdHNwcml0ZV92ZXJ0OiB2ZXJ0ZXgkMSxcblx0c3ByaXRlX2ZyYWc6IGZyYWdtZW50JDFcbn07XG5cbi8qKlxuICogVW5pZm9ybXMgbGlicmFyeSBmb3Igc2hhcmVkIHdlYmdsIHNoYWRlcnNcbiAqL1xuXG5jb25zdCBVbmlmb3Jtc0xpYiA9IHtcblx0Y29tbW9uOiB7XG5cdFx0ZGlmZnVzZToge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweGZmZmZmZilcblx0XHR9LFxuXHRcdG9wYWNpdHk6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdG1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHV2VHJhbnNmb3JtOiB7XG5cdFx0XHR2YWx1ZTogbmV3IE1hdHJpeDMoKVxuXHRcdH0sXG5cdFx0dXYyVHJhbnNmb3JtOiB7XG5cdFx0XHR2YWx1ZTogbmV3IE1hdHJpeDMoKVxuXHRcdH0sXG5cdFx0YWxwaGFNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRhbHBoYVRlc3Q6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fVxuXHR9LFxuXHRzcGVjdWxhcm1hcDoge1xuXHRcdHNwZWN1bGFyTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0ZW52bWFwOiB7XG5cdFx0ZW52TWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0ZmxpcEVudk1hcDoge1xuXHRcdFx0dmFsdWU6IC0xXG5cdFx0fSxcblx0XHRyZWZsZWN0aXZpdHk6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdC8vIGJhc2ljLCBsYW1iZXJ0LCBwaG9uZ1xuXHRcdGlvcjoge1xuXHRcdFx0dmFsdWU6IDEuNVxuXHRcdH0sXG5cdFx0Ly8gc3RhbmRhcmQsIHBoeXNpY2FsXG5cdFx0cmVmcmFjdGlvblJhdGlvOiB7XG5cdFx0XHR2YWx1ZTogMC45OFxuXHRcdH1cblx0fSxcblx0YW9tYXA6IHtcblx0XHRhb01hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGFvTWFwSW50ZW5zaXR5OiB7XG5cdFx0XHR2YWx1ZTogMVxuXHRcdH1cblx0fSxcblx0bGlnaHRtYXA6IHtcblx0XHRsaWdodE1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGxpZ2h0TWFwSW50ZW5zaXR5OiB7XG5cdFx0XHR2YWx1ZTogMVxuXHRcdH1cblx0fSxcblx0ZW1pc3NpdmVtYXA6IHtcblx0XHRlbWlzc2l2ZU1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9XG5cdH0sXG5cdGJ1bXBtYXA6IHtcblx0XHRidW1wTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YnVtcFNjYWxlOiB7XG5cdFx0XHR2YWx1ZTogMVxuXHRcdH1cblx0fSxcblx0bm9ybWFsbWFwOiB7XG5cdFx0bm9ybWFsTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0bm9ybWFsU2NhbGU6IHtcblx0XHRcdHZhbHVlOiBuZXcgVmVjdG9yMigxLCAxKVxuXHRcdH1cblx0fSxcblx0ZGlzcGxhY2VtZW50bWFwOiB7XG5cdFx0ZGlzcGxhY2VtZW50TWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0ZGlzcGxhY2VtZW50U2NhbGU6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fSxcblx0XHRkaXNwbGFjZW1lbnRCaWFzOiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH1cblx0fSxcblx0cm91Z2huZXNzbWFwOiB7XG5cdFx0cm91Z2huZXNzTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0bWV0YWxuZXNzbWFwOiB7XG5cdFx0bWV0YWxuZXNzTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0Z3JhZGllbnRtYXA6IHtcblx0XHRncmFkaWVudE1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9XG5cdH0sXG5cdGZvZzoge1xuXHRcdGZvZ0RlbnNpdHk6IHtcblx0XHRcdHZhbHVlOiAwLjAwMDI1XG5cdFx0fSxcblx0XHRmb2dOZWFyOiB7XG5cdFx0XHR2YWx1ZTogMVxuXHRcdH0sXG5cdFx0Zm9nRmFyOiB7XG5cdFx0XHR2YWx1ZTogMjAwMFxuXHRcdH0sXG5cdFx0Zm9nQ29sb3I6IHtcblx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHhmZmZmZmYpXG5cdFx0fVxuXHR9LFxuXHRsaWdodHM6IHtcblx0XHRhbWJpZW50TGlnaHRDb2xvcjoge1xuXHRcdFx0dmFsdWU6IFtdXG5cdFx0fSxcblx0XHRsaWdodFByb2JlOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdGRpcmVjdGlvbmFsTGlnaHRzOiB7XG5cdFx0XHR2YWx1ZTogW10sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdGRpcmVjdGlvbjoge30sXG5cdFx0XHRcdGNvbG9yOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0c2hhZG93Qmlhczoge30sXG5cdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dSYWRpdXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dNYXBTaXplOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXA6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0c3BvdExpZ2h0czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRjb2xvcjoge30sXG5cdFx0XHRcdHBvc2l0aW9uOiB7fSxcblx0XHRcdFx0ZGlyZWN0aW9uOiB7fSxcblx0XHRcdFx0ZGlzdGFuY2U6IHt9LFxuXHRcdFx0XHRjb25lQ29zOiB7fSxcblx0XHRcdFx0cGVudW1icmFDb3M6IHt9LFxuXHRcdFx0XHRkZWNheToge31cblx0XHRcdH1cblx0XHR9LFxuXHRcdHNwb3RMaWdodFNoYWRvd3M6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0c2hhZG93Qmlhczoge30sXG5cdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dSYWRpdXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dNYXBTaXplOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c3BvdFNoYWRvd01hcDoge1xuXHRcdFx0dmFsdWU6IFtdXG5cdFx0fSxcblx0XHRzcG90U2hhZG93TWF0cml4OiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdHBvaW50TGlnaHRzOiB7XG5cdFx0XHR2YWx1ZTogW10sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdGNvbG9yOiB7fSxcblx0XHRcdFx0cG9zaXRpb246IHt9LFxuXHRcdFx0XHRkZWNheToge30sXG5cdFx0XHRcdGRpc3RhbmNlOiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cG9pbnRMaWdodFNoYWRvd3M6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0c2hhZG93Qmlhczoge30sXG5cdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dSYWRpdXM6IHt9LFxuXHRcdFx0XHRzaGFkb3dNYXBTaXplOiB7fSxcblx0XHRcdFx0c2hhZG93Q2FtZXJhTmVhcjoge30sXG5cdFx0XHRcdHNoYWRvd0NhbWVyYUZhcjoge31cblx0XHRcdH1cblx0XHR9LFxuXHRcdHBvaW50U2hhZG93TWFwOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdHBvaW50U2hhZG93TWF0cml4OiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdGhlbWlzcGhlcmVMaWdodHM6IHtcblx0XHRcdHZhbHVlOiBbXSxcblx0XHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdFx0ZGlyZWN0aW9uOiB7fSxcblx0XHRcdFx0c2t5Q29sb3I6IHt9LFxuXHRcdFx0XHRncm91bmRDb2xvcjoge31cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFRPRE8gKGFiZWxuYXRpb24pOiBSZWN0QXJlYUxpZ2h0IEJSREYgZGF0YSBuZWVkcyB0byBiZSBtb3ZlZCBmcm9tIGV4YW1wbGUgdG8gbWFpbiBzcmNcblx0XHRyZWN0QXJlYUxpZ2h0czoge1xuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdFx0cHJvcGVydGllczoge1xuXHRcdFx0XHRjb2xvcjoge30sXG5cdFx0XHRcdHBvc2l0aW9uOiB7fSxcblx0XHRcdFx0d2lkdGg6IHt9LFxuXHRcdFx0XHRoZWlnaHQ6IHt9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRsdGNfMToge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGx0Y18yOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH1cblx0fSxcblx0cG9pbnRzOiB7XG5cdFx0ZGlmZnVzZToge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweGZmZmZmZilcblx0XHR9LFxuXHRcdG9wYWNpdHk6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdHNpemU6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdHNjYWxlOiB7XG5cdFx0XHR2YWx1ZTogMS4wXG5cdFx0fSxcblx0XHRtYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRhbHBoYU1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGFscGhhVGVzdDoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdHV2VHJhbnNmb3JtOiB7XG5cdFx0XHR2YWx1ZTogbmV3IE1hdHJpeDMoKVxuXHRcdH1cblx0fSxcblx0c3ByaXRlOiB7XG5cdFx0ZGlmZnVzZToge1xuXHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweGZmZmZmZilcblx0XHR9LFxuXHRcdG9wYWNpdHk6IHtcblx0XHRcdHZhbHVlOiAxLjBcblx0XHR9LFxuXHRcdGNlbnRlcjoge1xuXHRcdFx0dmFsdWU6IG5ldyBWZWN0b3IyKDAuNSwgMC41KVxuXHRcdH0sXG5cdFx0cm90YXRpb246IHtcblx0XHRcdHZhbHVlOiAwLjBcblx0XHR9LFxuXHRcdG1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGFscGhhTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0YWxwaGFUZXN0OiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cdFx0dXZUcmFuc2Zvcm06IHtcblx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0fVxuXHR9XG59O1xuXG5jb25zdCBTaGFkZXJMaWIgPSB7XG5cdGJhc2ljOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsIFVuaWZvcm1zTGliLmVudm1hcCwgVW5pZm9ybXNMaWIuYW9tYXAsIFVuaWZvcm1zTGliLmxpZ2h0bWFwLCBVbmlmb3Jtc0xpYi5mb2ddKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY192ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNoYmFzaWNfZnJhZ1xuXHR9LFxuXHRsYW1iZXJ0OiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsIFVuaWZvcm1zTGliLmVudm1hcCwgVW5pZm9ybXNMaWIuYW9tYXAsIFVuaWZvcm1zTGliLmxpZ2h0bWFwLCBVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCwgVW5pZm9ybXNMaWIuZm9nLCBVbmlmb3Jtc0xpYi5saWdodHMsIHtcblx0XHRcdGVtaXNzaXZlOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgwMDAwMDApXG5cdFx0XHR9XG5cdFx0fV0pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfZnJhZ1xuXHR9LFxuXHRwaG9uZzoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLnNwZWN1bGFybWFwLCBVbmlmb3Jtc0xpYi5lbnZtYXAsIFVuaWZvcm1zTGliLmFvbWFwLCBVbmlmb3Jtc0xpYi5saWdodG1hcCwgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsIFVuaWZvcm1zTGliLmJ1bXBtYXAsIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLCBVbmlmb3Jtc0xpYi5mb2csIFVuaWZvcm1zTGliLmxpZ2h0cywge1xuXHRcdFx0ZW1pc3NpdmU6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweDAwMDAwMClcblx0XHRcdH0sXG5cdFx0XHRzcGVjdWxhcjoge1xuXHRcdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4MTExMTExKVxuXHRcdFx0fSxcblx0XHRcdHNoaW5pbmVzczoge1xuXHRcdFx0XHR2YWx1ZTogMzBcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBob25nX2ZyYWdcblx0fSxcblx0c3RhbmRhcmQ6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5lbnZtYXAsIFVuaWZvcm1zTGliLmFvbWFwLCBVbmlmb3Jtc0xpYi5saWdodG1hcCwgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsIFVuaWZvcm1zTGliLmJ1bXBtYXAsIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLCBVbmlmb3Jtc0xpYi5yb3VnaG5lc3NtYXAsIFVuaWZvcm1zTGliLm1ldGFsbmVzc21hcCwgVW5pZm9ybXNMaWIuZm9nLCBVbmlmb3Jtc0xpYi5saWdodHMsIHtcblx0XHRcdGVtaXNzaXZlOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgwMDAwMDApXG5cdFx0XHR9LFxuXHRcdFx0cm91Z2huZXNzOiB7XG5cdFx0XHRcdHZhbHVlOiAxLjBcblx0XHRcdH0sXG5cdFx0XHRtZXRhbG5lc3M6IHtcblx0XHRcdFx0dmFsdWU6IDAuMFxuXHRcdFx0fSxcblx0XHRcdGVudk1hcEludGVuc2l0eToge1xuXHRcdFx0XHR2YWx1ZTogMVxuXHRcdFx0fSAvLyB0ZW1wb3JhcnlcblxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZ1xuXHR9LFxuXHR0b29uOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuYW9tYXAsIFVuaWZvcm1zTGliLmxpZ2h0bWFwLCBVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCwgVW5pZm9ybXNMaWIuYnVtcG1hcCwgVW5pZm9ybXNMaWIubm9ybWFsbWFwLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIFVuaWZvcm1zTGliLmdyYWRpZW50bWFwLCBVbmlmb3Jtc0xpYi5mb2csIFVuaWZvcm1zTGliLmxpZ2h0cywge1xuXHRcdFx0ZW1pc3NpdmU6IHtcblx0XHRcdFx0dmFsdWU6IG5ldyBDb2xvcigweDAwMDAwMClcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNodG9vbl92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNodG9vbl9mcmFnXG5cdH0sXG5cdG1hdGNhcDoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLmJ1bXBtYXAsIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLCBVbmlmb3Jtc0xpYi5mb2csIHtcblx0XHRcdG1hdGNhcDoge1xuXHRcdFx0XHR2YWx1ZTogbnVsbFxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2htYXRjYXBfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaG1hdGNhcF9mcmFnXG5cdH0sXG5cdHBvaW50czoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5wb2ludHMsIFVuaWZvcm1zTGliLmZvZ10pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRzX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnBvaW50c19mcmFnXG5cdH0sXG5cdGRhc2hlZDoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLmZvZywge1xuXHRcdFx0c2NhbGU6IHtcblx0XHRcdFx0dmFsdWU6IDFcblx0XHRcdH0sXG5cdFx0XHRkYXNoU2l6ZToge1xuXHRcdFx0XHR2YWx1ZTogMVxuXHRcdFx0fSxcblx0XHRcdHRvdGFsU2l6ZToge1xuXHRcdFx0XHR2YWx1ZTogMlxuXHRcdFx0fVxuXHRcdH1dKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmxpbmVkYXNoZWRfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hlZF9mcmFnXG5cdH0sXG5cdGRlcHRoOiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmNvbW1vbiwgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwXSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5kZXB0aF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5kZXB0aF9mcmFnXG5cdH0sXG5cdG5vcm1hbDoge1xuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtVbmlmb3Jtc0xpYi5jb21tb24sIFVuaWZvcm1zTGliLmJ1bXBtYXAsIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLCB7XG5cdFx0XHRvcGFjaXR5OiB7XG5cdFx0XHRcdHZhbHVlOiAxLjBcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobm9ybWFsX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hub3JtYWxfZnJhZ1xuXHR9LFxuXHRzcHJpdGU6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuc3ByaXRlLCBVbmlmb3Jtc0xpYi5mb2ddKSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLnNwcml0ZV92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5zcHJpdGVfZnJhZ1xuXHR9LFxuXHRiYWNrZ3JvdW5kOiB7XG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdHV2VHJhbnNmb3JtOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0XHR9LFxuXHRcdFx0dDJEOiB7XG5cdFx0XHRcdHZhbHVlOiBudWxsXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmJhY2tncm91bmRfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuYmFja2dyb3VuZF9mcmFnXG5cdH0sXG5cblx0LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvL1x0Q3ViZSBtYXAgc2hhZGVyXG5cdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGN1YmU6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuZW52bWFwLCB7XG5cdFx0XHRvcGFjaXR5OiB7XG5cdFx0XHRcdHZhbHVlOiAxLjBcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5jdWJlX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmN1YmVfZnJhZ1xuXHR9LFxuXHRlcXVpcmVjdDoge1xuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHR0RXF1aXJlY3Q6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH1cblx0XHR9LFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfZnJhZ1xuXHR9LFxuXHRkaXN0YW5jZVJHQkE6IHtcblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyhbVW5pZm9ybXNMaWIuY29tbW9uLCBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsIHtcblx0XHRcdHJlZmVyZW5jZVBvc2l0aW9uOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgVmVjdG9yMygpXG5cdFx0XHR9LFxuXHRcdFx0bmVhckRpc3RhbmNlOiB7XG5cdFx0XHRcdHZhbHVlOiAxXG5cdFx0XHR9LFxuXHRcdFx0ZmFyRGlzdGFuY2U6IHtcblx0XHRcdFx0dmFsdWU6IDEwMDBcblx0XHRcdH1cblx0XHR9XSksXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5kaXN0YW5jZVJHQkFfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZGlzdGFuY2VSR0JBX2ZyYWdcblx0fSxcblx0c2hhZG93OiB7XG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoW1VuaWZvcm1zTGliLmxpZ2h0cywgVW5pZm9ybXNMaWIuZm9nLCB7XG5cdFx0XHRjb2xvcjoge1xuXHRcdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4MDAwMDApXG5cdFx0XHR9LFxuXHRcdFx0b3BhY2l0eToge1xuXHRcdFx0XHR2YWx1ZTogMS4wXG5cdFx0XHR9XG5cdFx0fV0pLFxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuc2hhZG93X3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnNoYWRvd19mcmFnXG5cdH1cbn07XG5TaGFkZXJMaWIucGh5c2ljYWwgPSB7XG5cdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKFtTaGFkZXJMaWIuc3RhbmRhcmQudW5pZm9ybXMsIHtcblx0XHRjbGVhcmNvYXQ6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fSxcblx0XHRjbGVhcmNvYXRNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRjbGVhcmNvYXRSb3VnaG5lc3M6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fSxcblx0XHRjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRjbGVhcmNvYXROb3JtYWxTY2FsZToge1xuXHRcdFx0dmFsdWU6IG5ldyBWZWN0b3IyKDEsIDEpXG5cdFx0fSxcblx0XHRjbGVhcmNvYXROb3JtYWxNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fSxcblx0XHRzaGVlbjoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdHNoZWVuQ29sb3I6IHtcblx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMHgwMDAwMDApXG5cdFx0fSxcblx0XHRzaGVlbkNvbG9yTWFwOiB7XG5cdFx0XHR2YWx1ZTogbnVsbFxuXHRcdH0sXG5cdFx0c2hlZW5Sb3VnaG5lc3M6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fSxcblx0XHRzaGVlblJvdWdobmVzc01hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHRyYW5zbWlzc2lvbjoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdHRyYW5zbWlzc2lvbk1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOiB7XG5cdFx0XHR2YWx1ZTogbmV3IFZlY3RvcjIoKVxuXHRcdH0sXG5cdFx0dHJhbnNtaXNzaW9uU2FtcGxlck1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHRoaWNrbmVzczoge1xuXHRcdFx0dmFsdWU6IDBcblx0XHR9LFxuXHRcdHRoaWNrbmVzc01hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdGF0dGVudWF0aW9uRGlzdGFuY2U6IHtcblx0XHRcdHZhbHVlOiAwXG5cdFx0fSxcblx0XHRhdHRlbnVhdGlvbkNvbG9yOiB7XG5cdFx0XHR2YWx1ZTogbmV3IENvbG9yKDB4MDAwMDAwKVxuXHRcdH0sXG5cdFx0c3BlY3VsYXJJbnRlbnNpdHk6IHtcblx0XHRcdHZhbHVlOiAxXG5cdFx0fSxcblx0XHRzcGVjdWxhckludGVuc2l0eU1hcDoge1xuXHRcdFx0dmFsdWU6IG51bGxcblx0XHR9LFxuXHRcdHNwZWN1bGFyQ29sb3I6IHtcblx0XHRcdHZhbHVlOiBuZXcgQ29sb3IoMSwgMSwgMSlcblx0XHR9LFxuXHRcdHNwZWN1bGFyQ29sb3JNYXA6IHtcblx0XHRcdHZhbHVlOiBudWxsXG5cdFx0fVxuXHR9XSksXG5cdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3ZlcnQsXG5cdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZ1xufTtcblxuZnVuY3Rpb24gV2ViR0xCYWNrZ3JvdW5kKHJlbmRlcmVyLCBjdWJlbWFwcywgc3RhdGUsIG9iamVjdHMsIGFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEpIHtcblx0Y29uc3QgY2xlYXJDb2xvciA9IG5ldyBDb2xvcigweDAwMDAwMCk7XG5cdGxldCBjbGVhckFscGhhID0gYWxwaGEgPT09IHRydWUgPyAwIDogMTtcblx0bGV0IHBsYW5lTWVzaDtcblx0bGV0IGJveE1lc2g7XG5cdGxldCBjdXJyZW50QmFja2dyb3VuZCA9IG51bGw7XG5cdGxldCBjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gPSAwO1xuXHRsZXQgY3VycmVudFRvbmVtYXBwaW5nID0gbnVsbDtcblxuXHRmdW5jdGlvbiByZW5kZXIocmVuZGVyTGlzdCwgc2NlbmUpIHtcblx0XHRsZXQgZm9yY2VDbGVhciA9IGZhbHNlO1xuXHRcdGxldCBiYWNrZ3JvdW5kID0gc2NlbmUuaXNTY2VuZSA9PT0gdHJ1ZSA/IHNjZW5lLmJhY2tncm91bmQgOiBudWxsO1xuXG5cdFx0aWYgKGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1RleHR1cmUpIHtcblx0XHRcdGJhY2tncm91bmQgPSBjdWJlbWFwcy5nZXQoYmFja2dyb3VuZCk7XG5cdFx0fSAvLyBJZ25vcmUgYmFja2dyb3VuZCBpbiBBUlxuXHRcdC8vIFRPRE86IFJlY29uc2lkZXIgdGhpcy5cblxuXG5cdFx0Y29uc3QgeHIgPSByZW5kZXJlci54cjtcblx0XHRjb25zdCBzZXNzaW9uID0geHIuZ2V0U2Vzc2lvbiAmJiB4ci5nZXRTZXNzaW9uKCk7XG5cblx0XHRpZiAoc2Vzc2lvbiAmJiBzZXNzaW9uLmVudmlyb25tZW50QmxlbmRNb2RlID09PSAnYWRkaXRpdmUnKSB7XG5cdFx0XHRiYWNrZ3JvdW5kID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoYmFja2dyb3VuZCA9PT0gbnVsbCkge1xuXHRcdFx0c2V0Q2xlYXIoY2xlYXJDb2xvciwgY2xlYXJBbHBoYSk7XG5cdFx0fSBlbHNlIGlmIChiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQuaXNDb2xvcikge1xuXHRcdFx0c2V0Q2xlYXIoYmFja2dyb3VuZCwgMSk7XG5cdFx0XHRmb3JjZUNsZWFyID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyZXIuYXV0b0NsZWFyIHx8IGZvcmNlQ2xlYXIpIHtcblx0XHRcdHJlbmRlcmVyLmNsZWFyKHJlbmRlcmVyLmF1dG9DbGVhckNvbG9yLCByZW5kZXJlci5hdXRvQ2xlYXJEZXB0aCwgcmVuZGVyZXIuYXV0b0NsZWFyU3RlbmNpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhY2tncm91bmQgJiYgKGJhY2tncm91bmQuaXNDdWJlVGV4dHVyZSB8fCBiYWNrZ3JvdW5kLm1hcHBpbmcgPT09IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nKSkge1xuXHRcdFx0aWYgKGJveE1lc2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRib3hNZXNoID0gbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDEsIDEsIDEpLCBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0XHRcdG5hbWU6ICdCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsJyxcblx0XHRcdFx0XHR1bmlmb3JtczogY2xvbmVVbmlmb3JtcyhTaGFkZXJMaWIuY3ViZS51bmlmb3JtcyksXG5cdFx0XHRcdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJMaWIuY3ViZS52ZXJ0ZXhTaGFkZXIsXG5cdFx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckxpYi5jdWJlLmZyYWdtZW50U2hhZGVyLFxuXHRcdFx0XHRcdHNpZGU6IEJhY2tTaWRlLFxuXHRcdFx0XHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0XHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRcdFx0Zm9nOiBmYWxzZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdGJveE1lc2guZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCdub3JtYWwnKTtcblx0XHRcdFx0Ym94TWVzaC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoJ3V2Jyk7XG5cblx0XHRcdFx0Ym94TWVzaC5vbkJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSkge1xuXHRcdFx0XHRcdHRoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdH07IC8vIGVuYWJsZSBjb2RlIGluamVjdGlvbiBmb3Igbm9uLWJ1aWx0LWluIG1hdGVyaWFsXG5cblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoYm94TWVzaC5tYXRlcmlhbCwgJ2Vudk1hcCcsIHtcblx0XHRcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvYmplY3RzLnVwZGF0ZShib3hNZXNoKTtcblx0XHRcdH1cblxuXHRcdFx0Ym94TWVzaC5tYXRlcmlhbC51bmlmb3Jtcy5lbnZNYXAudmFsdWUgPSBiYWNrZ3JvdW5kO1xuXHRcdFx0Ym94TWVzaC5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlID0gYmFja2dyb3VuZC5pc0N1YmVUZXh0dXJlICYmIGJhY2tncm91bmQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSA/IC0xIDogMTtcblxuXHRcdFx0aWYgKGN1cnJlbnRCYWNrZ3JvdW5kICE9PSBiYWNrZ3JvdW5kIHx8IGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiAhPT0gYmFja2dyb3VuZC52ZXJzaW9uIHx8IGN1cnJlbnRUb25lbWFwcGluZyAhPT0gcmVuZGVyZXIudG9uZU1hcHBpbmcpIHtcblx0XHRcdFx0Ym94TWVzaC5tYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdGN1cnJlbnRCYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uID0gYmFja2dyb3VuZC52ZXJzaW9uO1xuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgPSByZW5kZXJlci50b25lTWFwcGluZztcblx0XHRcdH0gLy8gcHVzaCB0byB0aGUgcHJlLXNvcnRlZCBvcGFxdWUgcmVuZGVyIGxpc3RcblxuXG5cdFx0XHRyZW5kZXJMaXN0LnVuc2hpZnQoYm94TWVzaCwgYm94TWVzaC5nZW9tZXRyeSwgYm94TWVzaC5tYXRlcmlhbCwgMCwgMCwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQuaXNUZXh0dXJlKSB7XG5cdFx0XHRpZiAocGxhbmVNZXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGxhbmVNZXNoID0gbmV3IE1lc2gobmV3IFBsYW5lR2VvbWV0cnkoMiwgMiksIG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHRcdFx0bmFtZTogJ0JhY2tncm91bmRNYXRlcmlhbCcsXG5cdFx0XHRcdFx0dW5pZm9ybXM6IGNsb25lVW5pZm9ybXMoU2hhZGVyTGliLmJhY2tncm91bmQudW5pZm9ybXMpLFxuXHRcdFx0XHRcdHZlcnRleFNoYWRlcjogU2hhZGVyTGliLmJhY2tncm91bmQudmVydGV4U2hhZGVyLFxuXHRcdFx0XHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJMaWIuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixcblx0XHRcdFx0XHRzaWRlOiBGcm9udFNpZGUsXG5cdFx0XHRcdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRcdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdFx0XHRmb2c6IGZhbHNlXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0cGxhbmVNZXNoLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgnbm9ybWFsJyk7IC8vIGVuYWJsZSBjb2RlIGluamVjdGlvbiBmb3Igbm9uLWJ1aWx0LWluIG1hdGVyaWFsXG5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHBsYW5lTWVzaC5tYXRlcmlhbCwgJ21hcCcsIHtcblx0XHRcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvYmplY3RzLnVwZGF0ZShwbGFuZU1lc2gpO1xuXHRcdFx0fVxuXG5cdFx0XHRwbGFuZU1lc2gubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlID0gYmFja2dyb3VuZDtcblxuXHRcdFx0aWYgKGJhY2tncm91bmQubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRwbGFuZU1lc2gubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShiYWNrZ3JvdW5kLm1hdHJpeCk7XG5cblx0XHRcdGlmIChjdXJyZW50QmFja2dyb3VuZCAhPT0gYmFja2dyb3VuZCB8fCBjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gIT09IGJhY2tncm91bmQudmVyc2lvbiB8fCBjdXJyZW50VG9uZW1hcHBpbmcgIT09IHJlbmRlcmVyLnRvbmVNYXBwaW5nKSB7XG5cdFx0XHRcdHBsYW5lTWVzaC5tYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdGN1cnJlbnRCYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uID0gYmFja2dyb3VuZC52ZXJzaW9uO1xuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgPSByZW5kZXJlci50b25lTWFwcGluZztcblx0XHRcdH0gLy8gcHVzaCB0byB0aGUgcHJlLXNvcnRlZCBvcGFxdWUgcmVuZGVyIGxpc3RcblxuXG5cdFx0XHRyZW5kZXJMaXN0LnVuc2hpZnQocGxhbmVNZXNoLCBwbGFuZU1lc2guZ2VvbWV0cnksIHBsYW5lTWVzaC5tYXRlcmlhbCwgMCwgMCwgbnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Q2xlYXIoY29sb3IsIGFscGhhKSB7XG5cdFx0c3RhdGUuYnVmZmVycy5jb2xvci5zZXRDbGVhcihjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBhbHBoYSwgcHJlbXVsdGlwbGllZEFscGhhKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0Q2xlYXJDb2xvcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsZWFyQ29sb3I7XG5cdFx0fSxcblx0XHRzZXRDbGVhckNvbG9yOiBmdW5jdGlvbiAoY29sb3IsIGFscGhhID0gMSkge1xuXHRcdFx0Y2xlYXJDb2xvci5zZXQoY29sb3IpO1xuXHRcdFx0Y2xlYXJBbHBoYSA9IGFscGhhO1xuXHRcdFx0c2V0Q2xlYXIoY2xlYXJDb2xvciwgY2xlYXJBbHBoYSk7XG5cdFx0fSxcblx0XHRnZXRDbGVhckFscGhhOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xlYXJBbHBoYTtcblx0XHR9LFxuXHRcdHNldENsZWFyQWxwaGE6IGZ1bmN0aW9uIChhbHBoYSkge1xuXHRcdFx0Y2xlYXJBbHBoYSA9IGFscGhhO1xuXHRcdFx0c2V0Q2xlYXIoY2xlYXJDb2xvciwgY2xlYXJBbHBoYSk7XG5cdFx0fSxcblx0XHRyZW5kZXI6IHJlbmRlclxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTEJpbmRpbmdTdGF0ZXMoZ2wsIGV4dGVuc2lvbnMsIGF0dHJpYnV0ZXMsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBtYXhWZXJ0ZXhBdHRyaWJ1dGVzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdGNvbnN0IGV4dGVuc2lvbiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMiA/IG51bGwgOiBleHRlbnNpb25zLmdldCgnT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcblx0Y29uc3QgdmFvQXZhaWxhYmxlID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyIHx8IGV4dGVuc2lvbiAhPT0gbnVsbDtcblx0Y29uc3QgYmluZGluZ1N0YXRlcyA9IHt9O1xuXHRjb25zdCBkZWZhdWx0U3RhdGUgPSBjcmVhdGVCaW5kaW5nU3RhdGUobnVsbCk7XG5cdGxldCBjdXJyZW50U3RhdGUgPSBkZWZhdWx0U3RhdGU7XG5cblx0ZnVuY3Rpb24gc2V0dXAob2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnksIGluZGV4KSB7XG5cdFx0bGV0IHVwZGF0ZUJ1ZmZlcnMgPSBmYWxzZTtcblxuXHRcdGlmICh2YW9BdmFpbGFibGUpIHtcblx0XHRcdGNvbnN0IHN0YXRlID0gZ2V0QmluZGluZ1N0YXRlKGdlb21ldHJ5LCBwcm9ncmFtLCBtYXRlcmlhbCk7XG5cblx0XHRcdGlmIChjdXJyZW50U3RhdGUgIT09IHN0YXRlKSB7XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZSA9IHN0YXRlO1xuXHRcdFx0XHRiaW5kVmVydGV4QXJyYXlPYmplY3QoY3VycmVudFN0YXRlLm9iamVjdCk7XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZUJ1ZmZlcnMgPSBuZWVkc1VwZGF0ZShnZW9tZXRyeSwgaW5kZXgpO1xuXHRcdFx0aWYgKHVwZGF0ZUJ1ZmZlcnMpIHNhdmVDYWNoZShnZW9tZXRyeSwgaW5kZXgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB3aXJlZnJhbWUgPSBtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWU7XG5cblx0XHRcdGlmIChjdXJyZW50U3RhdGUuZ2VvbWV0cnkgIT09IGdlb21ldHJ5LmlkIHx8IGN1cnJlbnRTdGF0ZS5wcm9ncmFtICE9PSBwcm9ncmFtLmlkIHx8IGN1cnJlbnRTdGF0ZS53aXJlZnJhbWUgIT09IHdpcmVmcmFtZSkge1xuXHRcdFx0XHRjdXJyZW50U3RhdGUuZ2VvbWV0cnkgPSBnZW9tZXRyeS5pZDtcblx0XHRcdFx0Y3VycmVudFN0YXRlLnByb2dyYW0gPSBwcm9ncmFtLmlkO1xuXHRcdFx0XHRjdXJyZW50U3RhdGUud2lyZWZyYW1lID0gd2lyZWZyYW1lO1xuXHRcdFx0XHR1cGRhdGVCdWZmZXJzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSkge1xuXHRcdFx0dXBkYXRlQnVmZmVycyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZShpbmRleCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpO1xuXHRcdH1cblxuXHRcdGlmICh1cGRhdGVCdWZmZXJzKSB7XG5cdFx0XHRzZXR1cFZlcnRleEF0dHJpYnV0ZXMob2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnkpO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdFx0Z2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYXR0cmlidXRlcy5nZXQoaW5kZXgpLmJ1ZmZlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlVmVydGV4QXJyYXlPYmplY3QoKSB7XG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMikgcmV0dXJuIGdsLmNyZWF0ZVZlcnRleEFycmF5KCk7XG5cdFx0cmV0dXJuIGV4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYmluZFZlcnRleEFycmF5T2JqZWN0KHZhbykge1xuXHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHJldHVybiBnbC5iaW5kVmVydGV4QXJyYXkodmFvKTtcblx0XHRyZXR1cm4gZXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVsZXRlVmVydGV4QXJyYXlPYmplY3QodmFvKSB7XG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMikgcmV0dXJuIGdsLmRlbGV0ZVZlcnRleEFycmF5KHZhbyk7XG5cdFx0cmV0dXJuIGV4dGVuc2lvbi5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QmluZGluZ1N0YXRlKGdlb21ldHJ5LCBwcm9ncmFtLCBtYXRlcmlhbCkge1xuXHRcdGNvbnN0IHdpcmVmcmFtZSA9IG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZTtcblx0XHRsZXQgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnkuaWRdO1xuXG5cdFx0aWYgKHByb2dyYW1NYXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJvZ3JhbU1hcCA9IHt9O1xuXHRcdFx0YmluZGluZ1N0YXRlc1tnZW9tZXRyeS5pZF0gPSBwcm9ncmFtTWFwO1xuXHRcdH1cblxuXHRcdGxldCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbcHJvZ3JhbS5pZF07XG5cblx0XHRpZiAoc3RhdGVNYXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3RhdGVNYXAgPSB7fTtcblx0XHRcdHByb2dyYW1NYXBbcHJvZ3JhbS5pZF0gPSBzdGF0ZU1hcDtcblx0XHR9XG5cblx0XHRsZXQgc3RhdGUgPSBzdGF0ZU1hcFt3aXJlZnJhbWVdO1xuXG5cdFx0aWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHN0YXRlID0gY3JlYXRlQmluZGluZ1N0YXRlKGNyZWF0ZVZlcnRleEFycmF5T2JqZWN0KCkpO1xuXHRcdFx0c3RhdGVNYXBbd2lyZWZyYW1lXSA9IHN0YXRlO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdGF0ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdTdGF0ZSh2YW8pIHtcblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gW107XG5cdFx0Y29uc3QgZW5hYmxlZEF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjb25zdCBhdHRyaWJ1dGVEaXZpc29ycyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtYXhWZXJ0ZXhBdHRyaWJ1dGVzOyBpKyspIHtcblx0XHRcdG5ld0F0dHJpYnV0ZXNbaV0gPSAwO1xuXHRcdFx0ZW5hYmxlZEF0dHJpYnV0ZXNbaV0gPSAwO1xuXHRcdFx0YXR0cmlidXRlRGl2aXNvcnNbaV0gPSAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHQvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbiBub24tVkFPIHN1cHBvcnQgYnJvd3NlclxuXHRcdFx0Z2VvbWV0cnk6IG51bGwsXG5cdFx0XHRwcm9ncmFtOiBudWxsLFxuXHRcdFx0d2lyZWZyYW1lOiBmYWxzZSxcblx0XHRcdG5ld0F0dHJpYnV0ZXM6IG5ld0F0dHJpYnV0ZXMsXG5cdFx0XHRlbmFibGVkQXR0cmlidXRlczogZW5hYmxlZEF0dHJpYnV0ZXMsXG5cdFx0XHRhdHRyaWJ1dGVEaXZpc29yczogYXR0cmlidXRlRGl2aXNvcnMsXG5cdFx0XHRvYmplY3Q6IHZhbyxcblx0XHRcdGF0dHJpYnV0ZXM6IHt9LFxuXHRcdFx0aW5kZXg6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNVcGRhdGUoZ2VvbWV0cnksIGluZGV4KSB7XG5cdFx0Y29uc3QgY2FjaGVkQXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IGdlb21ldHJ5QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0bGV0IGF0dHJpYnV0ZXNOdW0gPSAwO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZ2VvbWV0cnlBdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBjYWNoZWRBdHRyaWJ1dGUgPSBjYWNoZWRBdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZSA9IGdlb21ldHJ5QXR0cmlidXRlc1trZXldO1xuXHRcdFx0aWYgKGNhY2hlZEF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmIChjYWNoZWRBdHRyaWJ1dGUuYXR0cmlidXRlICE9PSBnZW9tZXRyeUF0dHJpYnV0ZSkgcmV0dXJuIHRydWU7XG5cdFx0XHRpZiAoY2FjaGVkQXR0cmlidXRlLmRhdGEgIT09IGdlb21ldHJ5QXR0cmlidXRlLmRhdGEpIHJldHVybiB0cnVlO1xuXHRcdFx0YXR0cmlidXRlc051bSsrO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50U3RhdGUuYXR0cmlidXRlc051bSAhPT0gYXR0cmlidXRlc051bSkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKGN1cnJlbnRTdGF0ZS5pbmRleCAhPT0gaW5kZXgpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNhdmVDYWNoZShnZW9tZXRyeSwgaW5kZXgpIHtcblx0XHRjb25zdCBjYWNoZSA9IHt9O1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdGxldCBhdHRyaWJ1dGVzTnVtID0gMDtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGEuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuXG5cdFx0XHRpZiAoYXR0cmlidXRlLmRhdGEpIHtcblx0XHRcdFx0ZGF0YS5kYXRhID0gYXR0cmlidXRlLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdGNhY2hlW2tleV0gPSBkYXRhO1xuXHRcdFx0YXR0cmlidXRlc051bSsrO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzID0gY2FjaGU7XG5cdFx0Y3VycmVudFN0YXRlLmF0dHJpYnV0ZXNOdW0gPSBhdHRyaWJ1dGVzTnVtO1xuXHRcdGN1cnJlbnRTdGF0ZS5pbmRleCA9IGluZGV4O1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5pdEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbmV3QXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5uZXdBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbmV3QXR0cmlidXRlcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRuZXdBdHRyaWJ1dGVzW2ldID0gMDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG5cdFx0ZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvcihhdHRyaWJ1dGUsIDApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvcihhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUpIHtcblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLm5ld0F0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgZW5hYmxlZEF0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUuZW5hYmxlZEF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgYXR0cmlidXRlRGl2aXNvcnMgPSBjdXJyZW50U3RhdGUuYXR0cmlidXRlRGl2aXNvcnM7XG5cdFx0bmV3QXR0cmlidXRlc1thdHRyaWJ1dGVdID0gMTtcblxuXHRcdGlmIChlbmFibGVkQXR0cmlidXRlc1thdHRyaWJ1dGVdID09PSAwKSB7XG5cdFx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGUpO1xuXHRcdFx0ZW5hYmxlZEF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IDE7XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZURpdmlzb3JzW2F0dHJpYnV0ZV0gIT09IG1lc2hQZXJBdHRyaWJ1dGUpIHtcblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMiA/IGdsIDogZXh0ZW5zaW9ucy5nZXQoJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnKTtcblx0XHRcdGV4dGVuc2lvbltjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPyAndmVydGV4QXR0cmliRGl2aXNvcicgOiAndmVydGV4QXR0cmliRGl2aXNvckFOR0xFJ10oYXR0cmlidXRlLCBtZXNoUGVyQXR0cmlidXRlKTtcblx0XHRcdGF0dHJpYnV0ZURpdmlzb3JzW2F0dHJpYnV0ZV0gPSBtZXNoUGVyQXR0cmlidXRlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUubmV3QXR0cmlidXRlcztcblx0XHRjb25zdCBlbmFibGVkQXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5lbmFibGVkQXR0cmlidXRlcztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGlmIChlbmFibGVkQXR0cmlidXRlc1tpXSAhPT0gbmV3QXR0cmlidXRlc1tpXSkge1xuXHRcdFx0XHRnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG5cdFx0XHRcdGVuYWJsZWRBdHRyaWJ1dGVzW2ldID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB2ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCkge1xuXHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IHRydWUgJiYgKHR5cGUgPT09IGdsLklOVCB8fCB0eXBlID09PSBnbC5VTlNJR05FRF9JTlQpKSB7XG5cdFx0XHRnbC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBvZmZzZXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBWZXJ0ZXhBdHRyaWJ1dGVzKG9iamVjdCwgbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5KSB7XG5cdFx0aWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gZmFsc2UgJiYgKG9iamVjdC5pc0luc3RhbmNlZE1lc2ggfHwgZ2VvbWV0cnkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkpIHtcblx0XHRcdGlmIChleHRlbnNpb25zLmdldCgnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycpID09PSBudWxsKSByZXR1cm47XG5cdFx0fVxuXG5cdFx0aW5pdEF0dHJpYnV0ZXMoKTtcblx0XHRjb25zdCBnZW9tZXRyeUF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IHByb2dyYW1BdHRyaWJ1dGVzID0gcHJvZ3JhbS5nZXRBdHRyaWJ1dGVzKCk7XG5cdFx0Y29uc3QgbWF0ZXJpYWxEZWZhdWx0QXR0cmlidXRlVmFsdWVzID0gbWF0ZXJpYWwuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztcblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBwcm9ncmFtQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgcHJvZ3JhbUF0dHJpYnV0ZSA9IHByb2dyYW1BdHRyaWJ1dGVzW25hbWVdO1xuXG5cdFx0XHRpZiAocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiA+PSAwKSB7XG5cdFx0XHRcdGxldCBnZW9tZXRyeUF0dHJpYnV0ZSA9IGdlb21ldHJ5QXR0cmlidXRlc1tuYW1lXTtcblxuXHRcdFx0XHRpZiAoZ2VvbWV0cnlBdHRyaWJ1dGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChuYW1lID09PSAnaW5zdGFuY2VNYXRyaXgnICYmIG9iamVjdC5pbnN0YW5jZU1hdHJpeCkgZ2VvbWV0cnlBdHRyaWJ1dGUgPSBvYmplY3QuaW5zdGFuY2VNYXRyaXg7XG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09ICdpbnN0YW5jZUNvbG9yJyAmJiBvYmplY3QuaW5zdGFuY2VDb2xvcikgZ2VvbWV0cnlBdHRyaWJ1dGUgPSBvYmplY3QuaW5zdGFuY2VDb2xvcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChnZW9tZXRyeUF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGdlb21ldHJ5QXR0cmlidXRlLm5vcm1hbGl6ZWQ7XG5cdFx0XHRcdFx0Y29uc3Qgc2l6ZSA9IGdlb21ldHJ5QXR0cmlidXRlLml0ZW1TaXplO1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0KGdlb21ldHJ5QXR0cmlidXRlKTsgLy8gVE9ETyBBdHRyaWJ1dGUgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gY29udGV4dCByZXN0b3JlXG5cblx0XHRcdFx0XHRpZiAoYXR0cmlidXRlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdGNvbnN0IGJ1ZmZlciA9IGF0dHJpYnV0ZS5idWZmZXI7XG5cdFx0XHRcdFx0Y29uc3QgdHlwZSA9IGF0dHJpYnV0ZS50eXBlO1xuXHRcdFx0XHRcdGNvbnN0IGJ5dGVzUGVyRWxlbWVudCA9IGF0dHJpYnV0ZS5ieXRlc1BlckVsZW1lbnQ7XG5cblx0XHRcdFx0XHRpZiAoZ2VvbWV0cnlBdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YSA9IGdlb21ldHJ5QXR0cmlidXRlLmRhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHJpZGUgPSBkYXRhLnN0cmlkZTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldCA9IGdlb21ldHJ5QXR0cmlidXRlLm9mZnNldDtcblxuXHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksIGRhdGEubWVzaFBlckF0dHJpYnV0ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAob2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAhPT0gdHJ1ZSAmJiBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgPSBkYXRhLm1lc2hQZXJBdHRyaWJ1dGUgKiBkYXRhLmNvdW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGUocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSwgc2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUgKiBieXRlc1BlckVsZW1lbnQsIChvZmZzZXQgKyBzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUgKiBpKSAqIGJ5dGVzUGVyRWxlbWVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChnZW9tZXRyeUF0dHJpYnV0ZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpLCBnZW9tZXRyeUF0dHJpYnV0ZS5tZXNoUGVyQXR0cmlidXRlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChvYmplY3QuaXNJbnN0YW5jZWRNZXNoICE9PSB0cnVlICYmIGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9IGdlb21ldHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUgKiBnZW9tZXRyeUF0dHJpYnV0ZS5jb3VudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQXR0cmlidXRlKHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksIHNpemUgLyBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc2l6ZSAqIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplICogaSAqIGJ5dGVzUGVyRWxlbWVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBtYXRlcmlhbERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXNbbmFtZV07XG5cblx0XHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0c3dpdGNoICh2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjJmdihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjNmdihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjRmdihwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRnbC52ZXJ0ZXhBdHRyaWIxZnYocHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdHJlc2V0KCk7XG5cblx0XHRmb3IgKGNvbnN0IGdlb21ldHJ5SWQgaW4gYmluZGluZ1N0YXRlcykge1xuXHRcdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnlJZF07XG5cblx0XHRcdGZvciAoY29uc3QgcHJvZ3JhbUlkIGluIHByb2dyYW1NYXApIHtcblx0XHRcdFx0Y29uc3Qgc3RhdGVNYXAgPSBwcm9ncmFtTWFwW3Byb2dyYW1JZF07XG5cblx0XHRcdFx0Zm9yIChjb25zdCB3aXJlZnJhbWUgaW4gc3RhdGVNYXApIHtcblx0XHRcdFx0XHRkZWxldGVWZXJ0ZXhBcnJheU9iamVjdChzdGF0ZU1hcFt3aXJlZnJhbWVdLm9iamVjdCk7XG5cdFx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwW3dpcmVmcmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgcHJvZ3JhbU1hcFtwcm9ncmFtSWRdO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgYmluZGluZ1N0YXRlc1tnZW9tZXRyeUlkXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeShnZW9tZXRyeSkge1xuXHRcdGlmIChiaW5kaW5nU3RhdGVzW2dlb21ldHJ5LmlkXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0Y29uc3QgcHJvZ3JhbU1hcCA9IGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnkuaWRdO1xuXG5cdFx0Zm9yIChjb25zdCBwcm9ncmFtSWQgaW4gcHJvZ3JhbU1hcCkge1xuXHRcdFx0Y29uc3Qgc3RhdGVNYXAgPSBwcm9ncmFtTWFwW3Byb2dyYW1JZF07XG5cblx0XHRcdGZvciAoY29uc3Qgd2lyZWZyYW1lIGluIHN0YXRlTWFwKSB7XG5cdFx0XHRcdGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KHN0YXRlTWFwW3dpcmVmcmFtZV0ub2JqZWN0KTtcblx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwW3dpcmVmcmFtZV07XG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBwcm9ncmFtTWFwW3Byb2dyYW1JZF07XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIGJpbmRpbmdTdGF0ZXNbZ2VvbWV0cnkuaWRdO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVsZWFzZVN0YXRlc09mUHJvZ3JhbShwcm9ncmFtKSB7XG5cdFx0Zm9yIChjb25zdCBnZW9tZXRyeUlkIGluIGJpbmRpbmdTdGF0ZXMpIHtcblx0XHRcdGNvbnN0IHByb2dyYW1NYXAgPSBiaW5kaW5nU3RhdGVzW2dlb21ldHJ5SWRdO1xuXHRcdFx0aWYgKHByb2dyYW1NYXBbcHJvZ3JhbS5pZF0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cdFx0XHRjb25zdCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbcHJvZ3JhbS5pZF07XG5cblx0XHRcdGZvciAoY29uc3Qgd2lyZWZyYW1lIGluIHN0YXRlTWFwKSB7XG5cdFx0XHRcdGRlbGV0ZVZlcnRleEFycmF5T2JqZWN0KHN0YXRlTWFwW3dpcmVmcmFtZV0ub2JqZWN0KTtcblx0XHRcdFx0ZGVsZXRlIHN0YXRlTWFwW3dpcmVmcmFtZV07XG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBwcm9ncmFtTWFwW3Byb2dyYW0uaWRdO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0KCkge1xuXHRcdHJlc2V0RGVmYXVsdFN0YXRlKCk7XG5cdFx0aWYgKGN1cnJlbnRTdGF0ZSA9PT0gZGVmYXVsdFN0YXRlKSByZXR1cm47XG5cdFx0Y3VycmVudFN0YXRlID0gZGVmYXVsdFN0YXRlO1xuXHRcdGJpbmRWZXJ0ZXhBcnJheU9iamVjdChjdXJyZW50U3RhdGUub2JqZWN0KTtcblx0fSAvLyBmb3IgYmFja3dhcmQtY29tcGF0aWxpYml0eVxuXG5cblx0ZnVuY3Rpb24gcmVzZXREZWZhdWx0U3RhdGUoKSB7XG5cdFx0ZGVmYXVsdFN0YXRlLmdlb21ldHJ5ID0gbnVsbDtcblx0XHRkZWZhdWx0U3RhdGUucHJvZ3JhbSA9IG51bGw7XG5cdFx0ZGVmYXVsdFN0YXRlLndpcmVmcmFtZSA9IGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZXR1cDogc2V0dXAsXG5cdFx0cmVzZXQ6IHJlc2V0LFxuXHRcdHJlc2V0RGVmYXVsdFN0YXRlOiByZXNldERlZmF1bHRTdGF0ZSxcblx0XHRkaXNwb3NlOiBkaXNwb3NlLFxuXHRcdHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OiByZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeSxcblx0XHRyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOiByZWxlYXNlU3RhdGVzT2ZQcm9ncmFtLFxuXHRcdGluaXRBdHRyaWJ1dGVzOiBpbml0QXR0cmlidXRlcyxcblx0XHRlbmFibGVBdHRyaWJ1dGU6IGVuYWJsZUF0dHJpYnV0ZSxcblx0XHRkaXNhYmxlVW51c2VkQXR0cmlidXRlczogZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXNcblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xCdWZmZXJSZW5kZXJlcihnbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRsZXQgbW9kZTtcblxuXHRmdW5jdGlvbiBzZXRNb2RlKHZhbHVlKSB7XG5cdFx0bW9kZSA9IHZhbHVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyKHN0YXJ0LCBjb3VudCkge1xuXHRcdGdsLmRyYXdBcnJheXMobW9kZSwgc3RhcnQsIGNvdW50KTtcblx0XHRpbmZvLnVwZGF0ZShjb3VudCwgbW9kZSwgMSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJJbnN0YW5jZXMoc3RhcnQsIGNvdW50LCBwcmltY291bnQpIHtcblx0XHRpZiAocHJpbWNvdW50ID09PSAwKSByZXR1cm47XG5cdFx0bGV0IGV4dGVuc2lvbiwgbWV0aG9kTmFtZTtcblxuXHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZ2w7XG5cdFx0XHRtZXRob2ROYW1lID0gJ2RyYXdBcnJheXNJbnN0YW5jZWQnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycpO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUnO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uID09PSBudWxsKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZXh0ZW5zaW9uW21ldGhvZE5hbWVdKG1vZGUsIHN0YXJ0LCBjb3VudCwgcHJpbWNvdW50KTtcblx0XHRpbmZvLnVwZGF0ZShjb3VudCwgbW9kZSwgcHJpbWNvdW50KTtcblx0fSAvL1xuXG5cblx0dGhpcy5zZXRNb2RlID0gc2V0TW9kZTtcblx0dGhpcy5yZW5kZXIgPSByZW5kZXI7XG5cdHRoaXMucmVuZGVySW5zdGFuY2VzID0gcmVuZGVySW5zdGFuY2VzO1xufVxuXG5mdW5jdGlvbiBXZWJHTENhcGFiaWxpdGllcyhnbCwgZXh0ZW5zaW9ucywgcGFyYW1ldGVycykge1xuXHRsZXQgbWF4QW5pc290cm9weTtcblxuXHRmdW5jdGlvbiBnZXRNYXhBbmlzb3Ryb3B5KCkge1xuXHRcdGlmIChtYXhBbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQpIHJldHVybiBtYXhBbmlzb3Ryb3B5O1xuXG5cdFx0aWYgKGV4dGVuc2lvbnMuaGFzKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpO1xuXHRcdFx0bWF4QW5pc290cm9weSA9IGdsLmdldFBhcmFtZXRlcihleHRlbnNpb24uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF4QW5pc290cm9weSA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1heEFuaXNvdHJvcHk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRNYXhQcmVjaXNpb24ocHJlY2lzaW9uKSB7XG5cdFx0aWYgKHByZWNpc2lvbiA9PT0gJ2hpZ2hwJykge1xuXHRcdFx0aWYgKGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChnbC5WRVJURVhfU0hBREVSLCBnbC5ISUdIX0ZMT0FUKS5wcmVjaXNpb24gPiAwICYmIGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChnbC5GUkFHTUVOVF9TSEFERVIsIGdsLkhJR0hfRkxPQVQpLnByZWNpc2lvbiA+IDApIHtcblx0XHRcdFx0cmV0dXJuICdoaWdocCc7XG5cdFx0XHR9XG5cblx0XHRcdHByZWNpc2lvbiA9ICdtZWRpdW1wJztcblx0XHR9XG5cblx0XHRpZiAocHJlY2lzaW9uID09PSAnbWVkaXVtcCcpIHtcblx0XHRcdGlmIChnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoZ2wuVkVSVEVYX1NIQURFUiwgZ2wuTUVESVVNX0ZMT0FUKS5wcmVjaXNpb24gPiAwICYmIGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChnbC5GUkFHTUVOVF9TSEFERVIsIGdsLk1FRElVTV9GTE9BVCkucHJlY2lzaW9uID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gJ21lZGl1bXAnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAnbG93cCc7XG5cdH1cblxuXHRjb25zdCBpc1dlYkdMMiA9IHR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0ICE9PSAndW5kZWZpbmVkJyAmJiBnbCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQgfHwgdHlwZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0ICE9PSAndW5kZWZpbmVkJyAmJiBnbCBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0O1xuXHRsZXQgcHJlY2lzaW9uID0gcGFyYW1ldGVycy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlY2lzaW9uIDogJ2hpZ2hwJztcblx0Y29uc3QgbWF4UHJlY2lzaW9uID0gZ2V0TWF4UHJlY2lzaW9uKHByZWNpc2lvbik7XG5cblx0aWYgKG1heFByZWNpc2lvbiAhPT0gcHJlY2lzaW9uKSB7XG5cdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOicsIHByZWNpc2lvbiwgJ25vdCBzdXBwb3J0ZWQsIHVzaW5nJywgbWF4UHJlY2lzaW9uLCAnaW5zdGVhZC4nKTtcblx0XHRwcmVjaXNpb24gPSBtYXhQcmVjaXNpb247XG5cdH1cblxuXHRjb25zdCBkcmF3QnVmZmVycyA9IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdXRUJHTF9kcmF3X2J1ZmZlcnMnKTtcblx0Y29uc3QgbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA9IHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA9PT0gdHJ1ZTtcblx0Y29uc3QgbWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXHRjb25zdCBtYXhWZXJ0ZXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXHRjb25zdCBtYXhUZXh0dXJlU2l6ZSA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9TSVpFKTtcblx0Y29uc3QgbWF4Q3ViZW1hcFNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7XG5cdGNvbnN0IG1heEF0dHJpYnV0ZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0Y29uc3QgbWF4VmVydGV4VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpO1xuXHRjb25zdCBtYXhWYXJ5aW5ncyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkFSWUlOR19WRUNUT1JTKTtcblx0Y29uc3QgbWF4RnJhZ21lbnRVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTtcblx0Y29uc3QgdmVydGV4VGV4dHVyZXMgPSBtYXhWZXJ0ZXhUZXh0dXJlcyA+IDA7XG5cdGNvbnN0IGZsb2F0RnJhZ21lbnRUZXh0dXJlcyA9IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9mbG9hdCcpO1xuXHRjb25zdCBmbG9hdFZlcnRleFRleHR1cmVzID0gdmVydGV4VGV4dHVyZXMgJiYgZmxvYXRGcmFnbWVudFRleHR1cmVzO1xuXHRjb25zdCBtYXhTYW1wbGVzID0gaXNXZWJHTDIgPyBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1NBTVBMRVMpIDogMDtcblx0cmV0dXJuIHtcblx0XHRpc1dlYkdMMjogaXNXZWJHTDIsXG5cdFx0ZHJhd0J1ZmZlcnM6IGRyYXdCdWZmZXJzLFxuXHRcdGdldE1heEFuaXNvdHJvcHk6IGdldE1heEFuaXNvdHJvcHksXG5cdFx0Z2V0TWF4UHJlY2lzaW9uOiBnZXRNYXhQcmVjaXNpb24sXG5cdFx0cHJlY2lzaW9uOiBwcmVjaXNpb24sXG5cdFx0bG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjogbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixcblx0XHRtYXhUZXh0dXJlczogbWF4VGV4dHVyZXMsXG5cdFx0bWF4VmVydGV4VGV4dHVyZXM6IG1heFZlcnRleFRleHR1cmVzLFxuXHRcdG1heFRleHR1cmVTaXplOiBtYXhUZXh0dXJlU2l6ZSxcblx0XHRtYXhDdWJlbWFwU2l6ZTogbWF4Q3ViZW1hcFNpemUsXG5cdFx0bWF4QXR0cmlidXRlczogbWF4QXR0cmlidXRlcyxcblx0XHRtYXhWZXJ0ZXhVbmlmb3JtczogbWF4VmVydGV4VW5pZm9ybXMsXG5cdFx0bWF4VmFyeWluZ3M6IG1heFZhcnlpbmdzLFxuXHRcdG1heEZyYWdtZW50VW5pZm9ybXM6IG1heEZyYWdtZW50VW5pZm9ybXMsXG5cdFx0dmVydGV4VGV4dHVyZXM6IHZlcnRleFRleHR1cmVzLFxuXHRcdGZsb2F0RnJhZ21lbnRUZXh0dXJlczogZmxvYXRGcmFnbWVudFRleHR1cmVzLFxuXHRcdGZsb2F0VmVydGV4VGV4dHVyZXM6IGZsb2F0VmVydGV4VGV4dHVyZXMsXG5cdFx0bWF4U2FtcGxlczogbWF4U2FtcGxlc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTENsaXBwaW5nKHByb3BlcnRpZXMpIHtcblx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRsZXQgZ2xvYmFsU3RhdGUgPSBudWxsLFxuXHRcdFx0bnVtR2xvYmFsUGxhbmVzID0gMCxcblx0XHRcdGxvY2FsQ2xpcHBpbmdFbmFibGVkID0gZmFsc2UsXG5cdFx0XHRyZW5kZXJpbmdTaGFkb3dzID0gZmFsc2U7XG5cdGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKCksXG5cdFx0XHRcdHZpZXdOb3JtYWxNYXRyaXggPSBuZXcgTWF0cml4MygpLFxuXHRcdFx0XHR1bmlmb3JtID0ge1xuXHRcdHZhbHVlOiBudWxsLFxuXHRcdG5lZWRzVXBkYXRlOiBmYWxzZVxuXHR9O1xuXHR0aGlzLnVuaWZvcm0gPSB1bmlmb3JtO1xuXHR0aGlzLm51bVBsYW5lcyA9IDA7XG5cdHRoaXMubnVtSW50ZXJzZWN0aW9uID0gMDtcblxuXHR0aGlzLmluaXQgPSBmdW5jdGlvbiAocGxhbmVzLCBlbmFibGVMb2NhbENsaXBwaW5nLCBjYW1lcmEpIHtcblx0XHRjb25zdCBlbmFibGVkID0gcGxhbmVzLmxlbmd0aCAhPT0gMCB8fCBlbmFibGVMb2NhbENsaXBwaW5nIHx8IC8vIGVuYWJsZSBzdGF0ZSBvZiBwcmV2aW91cyBmcmFtZSAtIHRoZSBjbGlwcGluZyBjb2RlIGhhcyB0b1xuXHRcdC8vIHJ1biBhbm90aGVyIGZyYW1lIGluIG9yZGVyIHRvIHJlc2V0IHRoZSBzdGF0ZTpcblx0XHRudW1HbG9iYWxQbGFuZXMgIT09IDAgfHwgbG9jYWxDbGlwcGluZ0VuYWJsZWQ7XG5cdFx0bG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBlbmFibGVMb2NhbENsaXBwaW5nO1xuXHRcdGdsb2JhbFN0YXRlID0gcHJvamVjdFBsYW5lcyhwbGFuZXMsIGNhbWVyYSwgMCk7XG5cdFx0bnVtR2xvYmFsUGxhbmVzID0gcGxhbmVzLmxlbmd0aDtcblx0XHRyZXR1cm4gZW5hYmxlZDtcblx0fTtcblxuXHR0aGlzLmJlZ2luU2hhZG93cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZW5kZXJpbmdTaGFkb3dzID0gdHJ1ZTtcblx0XHRwcm9qZWN0UGxhbmVzKG51bGwpO1xuXHR9O1xuXG5cdHRoaXMuZW5kU2hhZG93cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZW5kZXJpbmdTaGFkb3dzID0gZmFsc2U7XG5cdFx0cmVzZXRHbG9iYWxTdGF0ZSgpO1xuXHR9O1xuXG5cdHRoaXMuc2V0U3RhdGUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIGNhbWVyYSwgdXNlQ2FjaGUpIHtcblx0XHRjb25zdCBwbGFuZXMgPSBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcyxcblx0XHRcdFx0XHRjbGlwSW50ZXJzZWN0aW9uID0gbWF0ZXJpYWwuY2xpcEludGVyc2VjdGlvbixcblx0XHRcdFx0XHRjbGlwU2hhZG93cyA9IG1hdGVyaWFsLmNsaXBTaGFkb3dzO1xuXHRcdGNvbnN0IG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KG1hdGVyaWFsKTtcblxuXHRcdGlmICghbG9jYWxDbGlwcGluZ0VuYWJsZWQgfHwgcGxhbmVzID09PSBudWxsIHx8IHBsYW5lcy5sZW5ndGggPT09IDAgfHwgcmVuZGVyaW5nU2hhZG93cyAmJiAhY2xpcFNoYWRvd3MpIHtcblx0XHRcdC8vIHRoZXJlJ3Mgbm8gbG9jYWwgY2xpcHBpbmdcblx0XHRcdGlmIChyZW5kZXJpbmdTaGFkb3dzKSB7XG5cdFx0XHRcdC8vIHRoZXJlJ3Mgbm8gZ2xvYmFsIGNsaXBwaW5nXG5cdFx0XHRcdHByb2plY3RQbGFuZXMobnVsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXNldEdsb2JhbFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5HbG9iYWwgPSByZW5kZXJpbmdTaGFkb3dzID8gMCA6IG51bUdsb2JhbFBsYW5lcyxcblx0XHRcdFx0XHRcdGxHbG9iYWwgPSBuR2xvYmFsICogNDtcblx0XHRcdGxldCBkc3RBcnJheSA9IG1hdGVyaWFsUHJvcGVydGllcy5jbGlwcGluZ1N0YXRlIHx8IG51bGw7XG5cdFx0XHR1bmlmb3JtLnZhbHVlID0gZHN0QXJyYXk7IC8vIGVuc3VyZSB1bmlxdWUgc3RhdGVcblxuXHRcdFx0ZHN0QXJyYXkgPSBwcm9qZWN0UGxhbmVzKHBsYW5lcywgY2FtZXJhLCBsR2xvYmFsLCB1c2VDYWNoZSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBsR2xvYmFsOyArK2kpIHtcblx0XHRcdFx0ZHN0QXJyYXlbaV0gPSBnbG9iYWxTdGF0ZVtpXTtcblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmNsaXBwaW5nU3RhdGUgPSBkc3RBcnJheTtcblx0XHRcdHRoaXMubnVtSW50ZXJzZWN0aW9uID0gY2xpcEludGVyc2VjdGlvbiA/IHRoaXMubnVtUGxhbmVzIDogMDtcblx0XHRcdHRoaXMubnVtUGxhbmVzICs9IG5HbG9iYWw7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHJlc2V0R2xvYmFsU3RhdGUoKSB7XG5cdFx0aWYgKHVuaWZvcm0udmFsdWUgIT09IGdsb2JhbFN0YXRlKSB7XG5cdFx0XHR1bmlmb3JtLnZhbHVlID0gZ2xvYmFsU3RhdGU7XG5cdFx0XHR1bmlmb3JtLm5lZWRzVXBkYXRlID0gbnVtR2xvYmFsUGxhbmVzID4gMDtcblx0XHR9XG5cblx0XHRzY29wZS5udW1QbGFuZXMgPSBudW1HbG9iYWxQbGFuZXM7XG5cdFx0c2NvcGUubnVtSW50ZXJzZWN0aW9uID0gMDtcblx0fVxuXG5cdGZ1bmN0aW9uIHByb2plY3RQbGFuZXMocGxhbmVzLCBjYW1lcmEsIGRzdE9mZnNldCwgc2tpcFRyYW5zZm9ybSkge1xuXHRcdGNvbnN0IG5QbGFuZXMgPSBwbGFuZXMgIT09IG51bGwgPyBwbGFuZXMubGVuZ3RoIDogMDtcblx0XHRsZXQgZHN0QXJyYXkgPSBudWxsO1xuXG5cdFx0aWYgKG5QbGFuZXMgIT09IDApIHtcblx0XHRcdGRzdEFycmF5ID0gdW5pZm9ybS52YWx1ZTtcblxuXHRcdFx0aWYgKHNraXBUcmFuc2Zvcm0gIT09IHRydWUgfHwgZHN0QXJyYXkgPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgZmxhdFNpemUgPSBkc3RPZmZzZXQgKyBuUGxhbmVzICogNCxcblx0XHRcdFx0XHRcdFx0dmlld01hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2U7XG5cdFx0XHRcdHZpZXdOb3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KHZpZXdNYXRyaXgpO1xuXG5cdFx0XHRcdGlmIChkc3RBcnJheSA9PT0gbnVsbCB8fCBkc3RBcnJheS5sZW5ndGggPCBmbGF0U2l6ZSkge1xuXHRcdFx0XHRcdGRzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShmbGF0U2l6ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaTQgPSBkc3RPZmZzZXQ7IGkgIT09IG5QbGFuZXM7ICsraSwgaTQgKz0gNCkge1xuXHRcdFx0XHRcdHBsYW5lLmNvcHkocGxhbmVzW2ldKS5hcHBseU1hdHJpeDQodmlld01hdHJpeCwgdmlld05vcm1hbE1hdHJpeCk7XG5cdFx0XHRcdFx0cGxhbmUubm9ybWFsLnRvQXJyYXkoZHN0QXJyYXksIGk0KTtcblx0XHRcdFx0XHRkc3RBcnJheVtpNCArIDNdID0gcGxhbmUuY29uc3RhbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybS52YWx1ZSA9IGRzdEFycmF5O1xuXHRcdFx0dW5pZm9ybS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0c2NvcGUubnVtUGxhbmVzID0gblBsYW5lcztcblx0XHRzY29wZS5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXHRcdHJldHVybiBkc3RBcnJheTtcblx0fVxufVxuXG5mdW5jdGlvbiBXZWJHTEN1YmVNYXBzKHJlbmRlcmVyKSB7XG5cdGxldCBjdWJlbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gbWFwVGV4dHVyZU1hcHBpbmcodGV4dHVyZSwgbWFwcGluZykge1xuXHRcdGlmIChtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZykge1xuXHRcdFx0dGV4dHVyZS5tYXBwaW5nID0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nO1xuXHRcdH0gZWxzZSBpZiAobWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcpIHtcblx0XHRcdHRleHR1cmUubWFwcGluZyA9IEN1YmVSZWZyYWN0aW9uTWFwcGluZztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldCh0ZXh0dXJlKSB7XG5cdFx0aWYgKHRleHR1cmUgJiYgdGV4dHVyZS5pc1RleHR1cmUgJiYgdGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGV4dHVyZS5tYXBwaW5nO1xuXG5cdFx0XHRpZiAobWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcpIHtcblx0XHRcdFx0aWYgKGN1YmVtYXBzLmhhcyh0ZXh0dXJlKSkge1xuXHRcdFx0XHRcdGNvbnN0IGN1YmVtYXAgPSBjdWJlbWFwcy5nZXQodGV4dHVyZSkudGV4dHVyZTtcblx0XHRcdFx0XHRyZXR1cm4gbWFwVGV4dHVyZU1hcHBpbmcoY3ViZW1hcCwgdGV4dHVyZS5tYXBwaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRcdFx0XHRpZiAoaW1hZ2UgJiYgaW1hZ2UuaGVpZ2h0ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMQ3ViZVJlbmRlclRhcmdldChpbWFnZS5oZWlnaHQgLyAyKTtcblx0XHRcdFx0XHRcdHJlbmRlclRhcmdldC5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShyZW5kZXJlciwgdGV4dHVyZSk7XG5cdFx0XHRcdFx0XHRjdWJlbWFwcy5zZXQodGV4dHVyZSwgcmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1hcFRleHR1cmVNYXBwaW5nKHJlbmRlclRhcmdldC50ZXh0dXJlLCB0ZXh0dXJlLm1hcHBpbmcpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpbWFnZSBub3QgeWV0IHJlYWR5LiB0cnkgdGhlIGNvbnZlcnNpb24gbmV4dCBmcmFtZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cdH1cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKGV2ZW50KSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IGV2ZW50LnRhcmdldDtcblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlKTtcblx0XHRjb25zdCBjdWJlbWFwID0gY3ViZW1hcHMuZ2V0KHRleHR1cmUpO1xuXG5cdFx0aWYgKGN1YmVtYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3ViZW1hcHMuZGVsZXRlKHRleHR1cmUpO1xuXHRcdFx0Y3ViZW1hcC5kaXNwb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblx0XHRjdWJlbWFwcyA9IG5ldyBXZWFrTWFwKCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuY2xhc3MgT3J0aG9ncmFwaGljQ2FtZXJhIGV4dGVuZHMgQ2FtZXJhIHtcblx0Y29uc3RydWN0b3IobGVmdCA9IC0xLCByaWdodCA9IDEsIHRvcCA9IDEsIGJvdHRvbSA9IC0xLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnT3J0aG9ncmFwaGljQ2FtZXJhJztcblx0XHR0aGlzLnpvb20gPSAxO1xuXHRcdHRoaXMudmlldyA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0ID0gbGVmdDtcblx0XHR0aGlzLnJpZ2h0ID0gcmlnaHQ7XG5cdFx0dGhpcy50b3AgPSB0b3A7XG5cdFx0dGhpcy5ib3R0b20gPSBib3R0b207XG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlLCByZWN1cnNpdmUpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSwgcmVjdXJzaXZlKTtcblx0XHR0aGlzLmxlZnQgPSBzb3VyY2UubGVmdDtcblx0XHR0aGlzLnJpZ2h0ID0gc291cmNlLnJpZ2h0O1xuXHRcdHRoaXMudG9wID0gc291cmNlLnRvcDtcblx0XHR0aGlzLmJvdHRvbSA9IHNvdXJjZS5ib3R0b207XG5cdFx0dGhpcy5uZWFyID0gc291cmNlLm5lYXI7XG5cdFx0dGhpcy5mYXIgPSBzb3VyY2UuZmFyO1xuXHRcdHRoaXMuem9vbSA9IHNvdXJjZS56b29tO1xuXHRcdHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBudWxsID8gbnVsbCA6IE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZS52aWV3KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFZpZXdPZmZzZXQoZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0aWYgKHRoaXMudmlldyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy52aWV3ID0ge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRmdWxsV2lkdGg6IDEsXG5cdFx0XHRcdGZ1bGxIZWlnaHQ6IDEsXG5cdFx0XHRcdG9mZnNldFg6IDAsXG5cdFx0XHRcdG9mZnNldFk6IDAsXG5cdFx0XHRcdHdpZHRoOiAxLFxuXHRcdFx0XHRoZWlnaHQ6IDFcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7XG5cdFx0dGhpcy52aWV3LmZ1bGxIZWlnaHQgPSBmdWxsSGVpZ2h0O1xuXHRcdHRoaXMudmlldy5vZmZzZXRYID0geDtcblx0XHR0aGlzLnZpZXcub2Zmc2V0WSA9IHk7XG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0fVxuXG5cdGNsZWFyVmlld09mZnNldCgpIHtcblx0XHRpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHR9XG5cblx0dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcblx0XHRjb25zdCBkeCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KSAvICgyICogdGhpcy56b29tKTtcblx0XHRjb25zdCBkeSA9ICh0aGlzLnRvcCAtIHRoaXMuYm90dG9tKSAvICgyICogdGhpcy56b29tKTtcblx0XHRjb25zdCBjeCA9ICh0aGlzLnJpZ2h0ICsgdGhpcy5sZWZ0KSAvIDI7XG5cdFx0Y29uc3QgY3kgPSAodGhpcy50b3AgKyB0aGlzLmJvdHRvbSkgLyAyO1xuXHRcdGxldCBsZWZ0ID0gY3ggLSBkeDtcblx0XHRsZXQgcmlnaHQgPSBjeCArIGR4O1xuXHRcdGxldCB0b3AgPSBjeSArIGR5O1xuXHRcdGxldCBib3R0b20gPSBjeSAtIGR5O1xuXG5cdFx0aWYgKHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlzLnZpZXcuZW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgc2NhbGVXID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpIC8gdGhpcy52aWV3LmZ1bGxXaWR0aCAvIHRoaXMuem9vbTtcblx0XHRcdGNvbnN0IHNjYWxlSCA9ICh0aGlzLnRvcCAtIHRoaXMuYm90dG9tKSAvIHRoaXMudmlldy5mdWxsSGVpZ2h0IC8gdGhpcy56b29tO1xuXHRcdFx0bGVmdCArPSBzY2FsZVcgKiB0aGlzLnZpZXcub2Zmc2V0WDtcblx0XHRcdHJpZ2h0ID0gbGVmdCArIHNjYWxlVyAqIHRoaXMudmlldy53aWR0aDtcblx0XHRcdHRvcCAtPSBzY2FsZUggKiB0aGlzLnZpZXcub2Zmc2V0WTtcblx0XHRcdGJvdHRvbSA9IHRvcCAtIHNjYWxlSCAqIHRoaXMudmlldy5oZWlnaHQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKTtcblx0fVxuXG5cdHRvSlNPTihtZXRhKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTihtZXRhKTtcblx0XHRkYXRhLm9iamVjdC56b29tID0gdGhpcy56b29tO1xuXHRcdGRhdGEub2JqZWN0LmxlZnQgPSB0aGlzLmxlZnQ7XG5cdFx0ZGF0YS5vYmplY3QucmlnaHQgPSB0aGlzLnJpZ2h0O1xuXHRcdGRhdGEub2JqZWN0LnRvcCA9IHRoaXMudG9wO1xuXHRcdGRhdGEub2JqZWN0LmJvdHRvbSA9IHRoaXMuYm90dG9tO1xuXHRcdGRhdGEub2JqZWN0Lm5lYXIgPSB0aGlzLm5lYXI7XG5cdFx0ZGF0YS5vYmplY3QuZmFyID0gdGhpcy5mYXI7XG5cdFx0aWYgKHRoaXMudmlldyAhPT0gbnVsbCkgZGF0YS5vYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmlldyk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5PcnRob2dyYXBoaWNDYW1lcmEucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhID0gdHJ1ZTtcblxuY2xhc3MgUmF3U2hhZGVyTWF0ZXJpYWwgZXh0ZW5kcyBTaGFkZXJNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJzKTtcblx0XHR0aGlzLnR5cGUgPSAnUmF3U2hhZGVyTWF0ZXJpYWwnO1xuXHR9XG5cbn1cblxuUmF3U2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCBMT0RfTUlOID0gNDtcbmNvbnN0IExPRF9NQVggPSA4O1xuY29uc3QgU0laRV9NQVggPSBNYXRoLnBvdygyLCBMT0RfTUFYKTsgLy8gVGhlIHN0YW5kYXJkIGRldmlhdGlvbnMgKHJhZGlhbnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXh0cmEgbWlwcy4gVGhlc2UgYXJlXG4vLyBjaG9zZW4gdG8gYXBwcm94aW1hdGUgYSBUcm93YnJpZGdlLVJlaXR6IGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiB0aW1lcyB0aGVcbi8vIGdlb21ldHJpYyBzaGFkb3dpbmcgZnVuY3Rpb24uIFRoZXNlIHNpZ21hIHZhbHVlcyBzcXVhcmVkIG11c3QgbWF0Y2ggdGhlXG4vLyB2YXJpYW5jZSAjZGVmaW5lcyBpbiBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQuZ2xzbC5qcy5cblxuY29uc3QgRVhUUkFfTE9EX1NJR01BID0gWzAuMTI1LCAwLjIxNSwgMC4zNSwgMC40NDYsIDAuNTI2LCAwLjU4Ml07XG5jb25zdCBUT1RBTF9MT0RTID0gTE9EX01BWCAtIExPRF9NSU4gKyAxICsgRVhUUkFfTE9EX1NJR01BLmxlbmd0aDsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBibHVyIGZvciBsb29wLiBTbWFsbGVyIHNpZ21hcyB3aWxsIHVzZSBmZXdlclxuLy8gc2FtcGxlcyBhbmQgZXhpdCBlYXJseSwgYnV0IG5vdCByZWNvbXBpbGUgdGhlIHNoYWRlci5cblxuY29uc3QgTUFYX1NBTVBMRVMgPSAyMDtcblxuY29uc3QgX2ZsYXRDYW1lcmEgPSAvKkBfX1BVUkVfXyovbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSgpO1xuXG5jb25zdCB7XG5cdF9sb2RQbGFuZXMsXG5cdF9zaXplTG9kcyxcblx0X3NpZ21hc1xufSA9IC8qQF9fUFVSRV9fKi9fY3JlYXRlUGxhbmVzKCk7XG5cbmNvbnN0IF9jbGVhckNvbG9yID0gLypAX19QVVJFX18qL25ldyBDb2xvcigpO1xuXG5sZXQgX29sZFRhcmdldCA9IG51bGw7IC8vIEdvbGRlbiBSYXRpb1xuXG5jb25zdCBQSEkgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyO1xuY29uc3QgSU5WX1BISSA9IDEgLyBQSEk7IC8vIFZlcnRpY2VzIG9mIGEgZG9kZWNhaGVkcm9uIChleGNlcHQgdGhlIG9wcG9zaXRlcywgd2hpY2ggcmVwcmVzZW50IHRoZVxuLy8gc2FtZSBheGlzKSwgdXNlZCBhcyBheGlzIGRpcmVjdGlvbnMgZXZlbmx5IHNwcmVhZCBvbiBhIHNwaGVyZS5cblxuY29uc3QgX2F4aXNEaXJlY3Rpb25zID0gWy8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygxLCAxLCAxKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKC0xLCAxLCAxKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKDEsIDEsIC0xKSwgLypAX19QVVJFX18qL25ldyBWZWN0b3IzKC0xLCAxLCAtMSksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygwLCBQSEksIElOVl9QSEkpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoMCwgUEhJLCAtSU5WX1BISSksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMyhJTlZfUEhJLCAwLCBQSEkpLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoLUlOVl9QSEksIDAsIFBISSksIC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMyhQSEksIElOVl9QSEksIDApLCAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoLVBISSwgSU5WX1BISSwgMCldO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGdlbmVyYXRlcyBhIFByZWZpbHRlcmVkLCBNaXBtYXBwZWQgUmFkaWFuY2UgRW52aXJvbm1lbnQgTWFwXG4gKiAoUE1SRU0pIGZyb20gYSBjdWJlTWFwIGVudmlyb25tZW50IHRleHR1cmUuIFRoaXMgYWxsb3dzIGRpZmZlcmVudCBsZXZlbHMgb2ZcbiAqIGJsdXIgdG8gYmUgcXVpY2tseSBhY2Nlc3NlZCBiYXNlZCBvbiBtYXRlcmlhbCByb3VnaG5lc3MuIEl0IGlzIHBhY2tlZCBpbnRvIGFcbiAqIHNwZWNpYWwgQ3ViZVVWIGZvcm1hdCB0aGF0IGFsbG93cyB1cyB0byBwZXJmb3JtIGN1c3RvbSBpbnRlcnBvbGF0aW9uIHNvIHRoYXRcbiAqIHdlIGNhbiBzdXBwb3J0IG5vbmxpbmVhciBmb3JtYXRzIHN1Y2ggYXMgUkdCRS4gVW5saWtlIGEgdHJhZGl0aW9uYWwgbWlwbWFwXG4gKiBjaGFpbiwgaXQgb25seSBnb2VzIGRvd24gdG8gdGhlIExPRF9NSU4gbGV2ZWwgKGFib3ZlKSwgYW5kIHRoZW4gY3JlYXRlcyBleHRyYVxuICogZXZlbiBtb3JlIGZpbHRlcmVkICdtaXBzJyBhdCB0aGUgc2FtZSBMT0RfTUlOIHJlc29sdXRpb24sIGFzc29jaWF0ZWQgd2l0aFxuICogaGlnaGVyIHJvdWdobmVzcyBsZXZlbHMuIEluIHRoaXMgd2F5IHdlIG1haW50YWluIHJlc29sdXRpb24gdG8gc21vb3RobHlcbiAqIGludGVycG9sYXRlIGRpZmZ1c2UgbGlnaHRpbmcgd2hpbGUgbGltaXRpbmcgc2FtcGxpbmcgY29tcHV0YXRpb24uXG4gKlxuICogUGFwZXI6IEZhc3QsIEFjY3VyYXRlIEltYWdlLUJhc2VkIExpZ2h0aW5nXG4gKiBodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzE1eThyX1VwS2xVOVN2VjRJTGIwQzNxQ1BlY1M4cHZMei92aWV3XG4qL1xuXG5jbGFzcyBQTVJFTUdlbmVyYXRvciB7XG5cdGNvbnN0cnVjdG9yKHJlbmRlcmVyKSB7XG5cdFx0dGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcblx0XHR0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0dGhpcy5fYmx1ck1hdGVyaWFsID0gX2dldEJsdXJTaGFkZXIoTUFYX1NBTVBMRVMpO1xuXHRcdHRoaXMuX2VxdWlyZWN0U2hhZGVyID0gbnVsbDtcblx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyID0gbnVsbDtcblxuXHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpO1xuXHR9XG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBQTVJFTSBmcm9tIGEgc3VwcGxpZWQgU2NlbmUsIHdoaWNoIGNhbiBiZSBmYXN0ZXIgdGhhbiB1c2luZyBhblxuXHQgKiBpbWFnZSBpZiBuZXR3b3JraW5nIGJhbmR3aWR0aCBpcyBsb3cuIE9wdGlvbmFsIHNpZ21hIHNwZWNpZmllcyBhIGJsdXIgcmFkaXVzXG5cdCAqIGluIHJhZGlhbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgc2NlbmUgYmVmb3JlIFBNUkVNIGdlbmVyYXRpb24uIE9wdGlvbmFsIG5lYXJcblx0ICogYW5kIGZhciBwbGFuZXMgZW5zdXJlIHRoZSBzY2VuZSBpcyByZW5kZXJlZCBpbiBpdHMgZW50aXJldHkgKHRoZSBjdWJlQ2FtZXJhXG5cdCAqIGlzIHBsYWNlZCBhdCB0aGUgb3JpZ2luKS5cblx0ICovXG5cblxuXHRmcm9tU2NlbmUoc2NlbmUsIHNpZ21hID0gMCwgbmVhciA9IDAuMSwgZmFyID0gMTAwKSB7XG5cdFx0X29sZFRhcmdldCA9IHRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXG5cdFx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gdGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7XG5cblx0XHR0aGlzLl9zY2VuZVRvQ3ViZVVWKHNjZW5lLCBuZWFyLCBmYXIsIGN1YmVVVlJlbmRlclRhcmdldCk7XG5cblx0XHRpZiAoc2lnbWEgPiAwKSB7XG5cdFx0XHR0aGlzLl9ibHVyKGN1YmVVVlJlbmRlclRhcmdldCwgMCwgMCwgc2lnbWEpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2FwcGx5UE1SRU0oY3ViZVVWUmVuZGVyVGFyZ2V0KTtcblxuXHRcdHRoaXMuX2NsZWFudXAoY3ViZVVWUmVuZGVyVGFyZ2V0KTtcblxuXHRcdHJldHVybiBjdWJlVVZSZW5kZXJUYXJnZXQ7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYW4gZXF1aXJlY3Rhbmd1bGFyIHRleHR1cmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgTERSXG5cdCAqIG9yIEhEUi4gVGhlIGlkZWFsIGlucHV0IGltYWdlIHNpemUgaXMgMWsgKDEwMjQgeCA1MTIpLFxuXHQgKiBhcyB0aGlzIG1hdGNoZXMgYmVzdCB3aXRoIHRoZSAyNTYgeCAyNTYgY3ViZW1hcCBvdXRwdXQuXG5cdCAqL1xuXG5cblx0ZnJvbUVxdWlyZWN0YW5ndWxhcihlcXVpcmVjdGFuZ3VsYXIsIHJlbmRlclRhcmdldCA9IG51bGwpIHtcblx0XHRyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUoZXF1aXJlY3Rhbmd1bGFyLCByZW5kZXJUYXJnZXQpO1xuXHR9XG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBQTVJFTSBmcm9tIGFuIGN1YmVtYXAgdGV4dHVyZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBMRFJcblx0ICogb3IgSERSLiBUaGUgaWRlYWwgaW5wdXQgY3ViZSBzaXplIGlzIDI1NiB4IDI1Nixcblx0ICogYXMgdGhpcyBtYXRjaGVzIGJlc3Qgd2l0aCB0aGUgMjU2IHggMjU2IGN1YmVtYXAgb3V0cHV0LlxuXHQgKi9cblxuXG5cdGZyb21DdWJlbWFwKGN1YmVtYXAsIHJlbmRlclRhcmdldCA9IG51bGwpIHtcblx0XHRyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUoY3ViZW1hcCwgcmVuZGVyVGFyZ2V0KTtcblx0fVxuXHQvKipcblx0ICogUHJlLWNvbXBpbGVzIHRoZSBjdWJlbWFwIHNoYWRlci4gWW91IGNhbiBnZXQgZmFzdGVyIHN0YXJ0LXVwIGJ5IGludm9raW5nIHRoaXMgbWV0aG9kIGR1cmluZ1xuXHQgKiB5b3VyIHRleHR1cmUncyBuZXR3b3JrIGZldGNoIGZvciBpbmNyZWFzZWQgY29uY3VycmVuY3kuXG5cdCAqL1xuXG5cblx0Y29tcGlsZUN1YmVtYXBTaGFkZXIoKSB7XG5cdFx0aWYgKHRoaXMuX2N1YmVtYXBTaGFkZXIgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIgPSBfZ2V0Q3ViZW1hcFNoYWRlcigpO1xuXG5cdFx0XHR0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcik7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBQcmUtY29tcGlsZXMgdGhlIGVxdWlyZWN0YW5ndWxhciBzaGFkZXIuIFlvdSBjYW4gZ2V0IGZhc3RlciBzdGFydC11cCBieSBpbnZva2luZyB0aGlzIG1ldGhvZCBkdXJpbmdcblx0ICogeW91ciB0ZXh0dXJlJ3MgbmV0d29yayBmZXRjaCBmb3IgaW5jcmVhc2VkIGNvbmN1cnJlbmN5LlxuXHQgKi9cblxuXG5cdGNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKSB7XG5cdFx0aWYgKHRoaXMuX2VxdWlyZWN0U2hhZGVyID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9lcXVpcmVjdFNoYWRlciA9IF9nZXRFcXVpcmVjdFNoYWRlcigpO1xuXG5cdFx0XHR0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogRGlzcG9zZXMgb2YgdGhlIFBNUkVNR2VuZXJhdG9yJ3MgaW50ZXJuYWwgbWVtb3J5LiBOb3RlIHRoYXQgUE1SRU1HZW5lcmF0b3IgaXMgYSBzdGF0aWMgY2xhc3MsXG5cdCAqIHNvIHlvdSBzaG91bGQgbm90IG5lZWQgbW9yZSB0aGFuIG9uZSBQTVJFTUdlbmVyYXRvciBvYmplY3QuIElmIHlvdSBkbywgY2FsbGluZyBkaXNwb3NlKCkgb25cblx0ICogb25lIG9mIHRoZW0gd2lsbCBjYXVzZSBhbnkgb3RoZXJzIHRvIGFsc28gYmVjb21lIHVudXNhYmxlLlxuXHQgKi9cblxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHRcdGlmICh0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCAhPT0gbnVsbCkgdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuXHRcdGlmICh0aGlzLl9jdWJlbWFwU2hhZGVyICE9PSBudWxsKSB0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKTtcblx0XHRpZiAodGhpcy5fZXF1aXJlY3RTaGFkZXIgIT09IG51bGwpIHRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgX2xvZFBsYW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0X2xvZFBsYW5lc1tpXS5kaXNwb3NlKCk7XG5cdFx0fVxuXHR9IC8vIHByaXZhdGUgaW50ZXJmYWNlXG5cblxuXHRfY2xlYW51cChvdXRwdXRUYXJnZXQpIHtcblx0XHR0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoX29sZFRhcmdldCk7XG5cblx0XHRvdXRwdXRUYXJnZXQuc2Npc3NvclRlc3QgPSBmYWxzZTtcblxuXHRcdF9zZXRWaWV3cG9ydChvdXRwdXRUYXJnZXQsIDAsIDAsIG91dHB1dFRhcmdldC53aWR0aCwgb3V0cHV0VGFyZ2V0LmhlaWdodCk7XG5cdH1cblxuXHRfZnJvbVRleHR1cmUodGV4dHVyZSwgcmVuZGVyVGFyZ2V0KSB7XG5cdFx0X29sZFRhcmdldCA9IHRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXG5cdFx0Y29uc3QgY3ViZVVWUmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0IHx8IHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0ZXh0dXJlKTtcblxuXHRcdHRoaXMuX3RleHR1cmVUb0N1YmVVVih0ZXh0dXJlLCBjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0dGhpcy5fYXBwbHlQTVJFTShjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0dGhpcy5fY2xlYW51cChjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblx0fVxuXG5cdF9hbGxvY2F0ZVRhcmdldHModGV4dHVyZSkge1xuXHRcdC8vIHdhcm5pbmc6IG51bGwgdGV4dHVyZSBpcyB2YWxpZFxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLFxuXHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdGVuY29kaW5nOiBMaW5lYXJFbmNvZGluZyxcblx0XHRcdGRlcHRoQnVmZmVyOiBmYWxzZVxuXHRcdH07XG5cblx0XHRjb25zdCBjdWJlVVZSZW5kZXJUYXJnZXQgPSBfY3JlYXRlUmVuZGVyVGFyZ2V0KHBhcmFtcyk7XG5cblx0XHRjdWJlVVZSZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgPSB0ZXh0dXJlID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCA9IF9jcmVhdGVSZW5kZXJUYXJnZXQocGFyYW1zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3ViZVVWUmVuZGVyVGFyZ2V0O1xuXHR9XG5cblx0X2NvbXBpbGVNYXRlcmlhbChtYXRlcmlhbCkge1xuXHRcdGNvbnN0IHRtcE1lc2ggPSBuZXcgTWVzaChfbG9kUGxhbmVzWzBdLCBtYXRlcmlhbCk7XG5cblx0XHR0aGlzLl9yZW5kZXJlci5jb21waWxlKHRtcE1lc2gsIF9mbGF0Q2FtZXJhKTtcblx0fVxuXG5cdF9zY2VuZVRvQ3ViZVVWKHNjZW5lLCBuZWFyLCBmYXIsIGN1YmVVVlJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IGZvdiA9IDkwO1xuXHRcdGNvbnN0IGFzcGVjdCA9IDE7XG5cdFx0Y29uc3QgY3ViZUNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHRjb25zdCB1cFNpZ24gPSBbMSwgLTEsIDEsIDEsIDEsIDFdO1xuXHRcdGNvbnN0IGZvcndhcmRTaWduID0gWzEsIDEsIDEsIC0xLCAtMSwgLTFdO1xuXHRcdGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXI7XG5cdFx0Y29uc3Qgb3JpZ2luYWxBdXRvQ2xlYXIgPSByZW5kZXJlci5hdXRvQ2xlYXI7XG5cdFx0Y29uc3QgdG9uZU1hcHBpbmcgPSByZW5kZXJlci50b25lTWFwcGluZztcblx0XHRyZW5kZXJlci5nZXRDbGVhckNvbG9yKF9jbGVhckNvbG9yKTtcblx0XHRyZW5kZXJlci50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cdFx0cmVuZGVyZXIuYXV0b0NsZWFyID0gZmFsc2U7XG5cdFx0Y29uc3QgYmFja2dyb3VuZE1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcblx0XHRcdG5hbWU6ICdQTVJFTS5CYWNrZ3JvdW5kJyxcblx0XHRcdHNpZGU6IEJhY2tTaWRlLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRkZXB0aFRlc3Q6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Y29uc3QgYmFja2dyb3VuZEJveCA9IG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgpLCBiYWNrZ3JvdW5kTWF0ZXJpYWwpO1xuXHRcdGxldCB1c2VTb2xpZENvbG9yID0gZmFsc2U7XG5cdFx0Y29uc3QgYmFja2dyb3VuZCA9IHNjZW5lLmJhY2tncm91bmQ7XG5cblx0XHRpZiAoYmFja2dyb3VuZCkge1xuXHRcdFx0aWYgKGJhY2tncm91bmQuaXNDb2xvcikge1xuXHRcdFx0XHRiYWNrZ3JvdW5kTWF0ZXJpYWwuY29sb3IuY29weShiYWNrZ3JvdW5kKTtcblx0XHRcdFx0c2NlbmUuYmFja2dyb3VuZCA9IG51bGw7XG5cdFx0XHRcdHVzZVNvbGlkQ29sb3IgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRiYWNrZ3JvdW5kTWF0ZXJpYWwuY29sb3IuY29weShfY2xlYXJDb2xvcik7XG5cdFx0XHR1c2VTb2xpZENvbG9yID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sID0gaSAlIDM7XG5cblx0XHRcdGlmIChjb2wgPT09IDApIHtcblx0XHRcdFx0Y3ViZUNhbWVyYS51cC5zZXQoMCwgdXBTaWduW2ldLCAwKTtcblx0XHRcdFx0Y3ViZUNhbWVyYS5sb29rQXQoZm9yd2FyZFNpZ25baV0sIDAsIDApO1xuXHRcdFx0fSBlbHNlIGlmIChjb2wgPT09IDEpIHtcblx0XHRcdFx0Y3ViZUNhbWVyYS51cC5zZXQoMCwgMCwgdXBTaWduW2ldKTtcblx0XHRcdFx0Y3ViZUNhbWVyYS5sb29rQXQoMCwgZm9yd2FyZFNpZ25baV0sIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3ViZUNhbWVyYS51cC5zZXQoMCwgdXBTaWduW2ldLCAwKTtcblx0XHRcdFx0Y3ViZUNhbWVyYS5sb29rQXQoMCwgMCwgZm9yd2FyZFNpZ25baV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRfc2V0Vmlld3BvcnQoY3ViZVVWUmVuZGVyVGFyZ2V0LCBjb2wgKiBTSVpFX01BWCwgaSA+IDIgPyBTSVpFX01BWCA6IDAsIFNJWkVfTUFYLCBTSVpFX01BWCk7XG5cblx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjdWJlVVZSZW5kZXJUYXJnZXQpO1xuXG5cdFx0XHRpZiAodXNlU29saWRDb2xvcikge1xuXHRcdFx0XHRyZW5kZXJlci5yZW5kZXIoYmFja2dyb3VuZEJveCwgY3ViZUNhbWVyYSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY3ViZUNhbWVyYSk7XG5cdFx0fVxuXG5cdFx0YmFja2dyb3VuZEJveC5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0YmFja2dyb3VuZEJveC5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0cmVuZGVyZXIudG9uZU1hcHBpbmcgPSB0b25lTWFwcGluZztcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBvcmlnaW5hbEF1dG9DbGVhcjtcblx0XHRzY2VuZS5iYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblx0fVxuXG5cdF90ZXh0dXJlVG9DdWJlVVYodGV4dHVyZSwgY3ViZVVWUmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblx0XHRjb25zdCBpc0N1YmVUZXh0dXJlID0gdGV4dHVyZS5tYXBwaW5nID09PSBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgfHwgdGV4dHVyZS5tYXBwaW5nID09PSBDdWJlUmVmcmFjdGlvbk1hcHBpbmc7XG5cblx0XHRpZiAoaXNDdWJlVGV4dHVyZSkge1xuXHRcdFx0aWYgKHRoaXMuX2N1YmVtYXBTaGFkZXIgPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5fY3ViZW1hcFNoYWRlciA9IF9nZXRDdWJlbWFwU2hhZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZSA9IHRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSA/IC0xIDogMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX2VxdWlyZWN0U2hhZGVyID09PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMuX2VxdWlyZWN0U2hhZGVyID0gX2dldEVxdWlyZWN0U2hhZGVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBpc0N1YmVUZXh0dXJlID8gdGhpcy5fY3ViZW1hcFNoYWRlciA6IHRoaXMuX2VxdWlyZWN0U2hhZGVyO1xuXHRcdGNvbnN0IG1lc2ggPSBuZXcgTWVzaChfbG9kUGxhbmVzWzBdLCBtYXRlcmlhbCk7XG5cdFx0Y29uc3QgdW5pZm9ybXMgPSBtYXRlcmlhbC51bmlmb3Jtcztcblx0XHR1bmlmb3Jtc1snZW52TWFwJ10udmFsdWUgPSB0ZXh0dXJlO1xuXG5cdFx0aWYgKCFpc0N1YmVUZXh0dXJlKSB7XG5cdFx0XHR1bmlmb3Jtc1sndGV4ZWxTaXplJ10udmFsdWUuc2V0KDEuMCAvIHRleHR1cmUuaW1hZ2Uud2lkdGgsIDEuMCAvIHRleHR1cmUuaW1hZ2UuaGVpZ2h0KTtcblx0XHR9XG5cblx0XHRfc2V0Vmlld3BvcnQoY3ViZVVWUmVuZGVyVGFyZ2V0LCAwLCAwLCAzICogU0laRV9NQVgsIDIgKiBTSVpFX01BWCk7XG5cblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY3ViZVVWUmVuZGVyVGFyZ2V0KTtcblx0XHRyZW5kZXJlci5yZW5kZXIobWVzaCwgX2ZsYXRDYW1lcmEpO1xuXHR9XG5cblx0X2FwcGx5UE1SRU0oY3ViZVVWUmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblx0XHRjb25zdCBhdXRvQ2xlYXIgPSByZW5kZXJlci5hdXRvQ2xlYXI7XG5cdFx0cmVuZGVyZXIuYXV0b0NsZWFyID0gZmFsc2U7XG5cblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IFRPVEFMX0xPRFM7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2lnbWEgPSBNYXRoLnNxcnQoX3NpZ21hc1tpXSAqIF9zaWdtYXNbaV0gLSBfc2lnbWFzW2kgLSAxXSAqIF9zaWdtYXNbaSAtIDFdKTtcblx0XHRcdGNvbnN0IHBvbGVBeGlzID0gX2F4aXNEaXJlY3Rpb25zWyhpIC0gMSkgJSBfYXhpc0RpcmVjdGlvbnMubGVuZ3RoXTtcblxuXHRcdFx0dGhpcy5fYmx1cihjdWJlVVZSZW5kZXJUYXJnZXQsIGkgLSAxLCBpLCBzaWdtYSwgcG9sZUF4aXMpO1xuXHRcdH1cblxuXHRcdHJlbmRlcmVyLmF1dG9DbGVhciA9IGF1dG9DbGVhcjtcblx0fVxuXHQvKipcblx0ICogVGhpcyBpcyBhIHR3by1wYXNzIEdhdXNzaWFuIGJsdXIgZm9yIGEgY3ViZW1hcC4gTm9ybWFsbHkgdGhpcyBpcyBkb25lXG5cdCAqIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSwgYnV0IHRoaXMgYnJlYWtzIGRvd24gb24gYSBjdWJlLiBIZXJlIHdlIGFwcGx5XG5cdCAqIHRoZSBibHVyIGxhdGl0dWRpbmFsbHkgKGFyb3VuZCB0aGUgcG9sZXMpLCBhbmQgdGhlbiBsb25naXR1ZGluYWxseSAodG93YXJkc1xuXHQgKiB0aGUgcG9sZXMpIHRvIGFwcHJveGltYXRlIHRoZSBvcnRob2dvbmFsbHktc2VwYXJhYmxlIGJsdXIuIEl0IGlzIGxlYXN0XG5cdCAqIGFjY3VyYXRlIGF0IHRoZSBwb2xlcywgYnV0IHN0aWxsIGRvZXMgYSBkZWNlbnQgam9iLlxuXHQgKi9cblxuXG5cdF9ibHVyKGN1YmVVVlJlbmRlclRhcmdldCwgbG9kSW4sIGxvZE91dCwgc2lnbWEsIHBvbGVBeGlzKSB7XG5cdFx0Y29uc3QgcGluZ1BvbmdSZW5kZXJUYXJnZXQgPSB0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDtcblxuXHRcdHRoaXMuX2hhbGZCbHVyKGN1YmVVVlJlbmRlclRhcmdldCwgcGluZ1BvbmdSZW5kZXJUYXJnZXQsIGxvZEluLCBsb2RPdXQsIHNpZ21hLCAnbGF0aXR1ZGluYWwnLCBwb2xlQXhpcyk7XG5cblx0XHR0aGlzLl9oYWxmQmx1cihwaW5nUG9uZ1JlbmRlclRhcmdldCwgY3ViZVVWUmVuZGVyVGFyZ2V0LCBsb2RPdXQsIGxvZE91dCwgc2lnbWEsICdsb25naXR1ZGluYWwnLCBwb2xlQXhpcyk7XG5cdH1cblxuXHRfaGFsZkJsdXIodGFyZ2V0SW4sIHRhcmdldE91dCwgbG9kSW4sIGxvZE91dCwgc2lnbWFSYWRpYW5zLCBkaXJlY3Rpb24sIHBvbGVBeGlzKSB7XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblx0XHRjb25zdCBibHVyTWF0ZXJpYWwgPSB0aGlzLl9ibHVyTWF0ZXJpYWw7XG5cblx0XHRpZiAoZGlyZWN0aW9uICE9PSAnbGF0aXR1ZGluYWwnICYmIGRpcmVjdGlvbiAhPT0gJ2xvbmdpdHVkaW5hbCcpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2JsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEnKTtcblx0XHR9IC8vIE51bWJlciBvZiBzdGFuZGFyZCBkZXZpYXRpb25zIGF0IHdoaWNoIHRvIGN1dCBvZmYgdGhlIGRpc2NyZXRlIGFwcHJveGltYXRpb24uXG5cblxuXHRcdGNvbnN0IFNUQU5EQVJEX0RFVklBVElPTlMgPSAzO1xuXHRcdGNvbnN0IGJsdXJNZXNoID0gbmV3IE1lc2goX2xvZFBsYW5lc1tsb2RPdXRdLCBibHVyTWF0ZXJpYWwpO1xuXHRcdGNvbnN0IGJsdXJVbmlmb3JtcyA9IGJsdXJNYXRlcmlhbC51bmlmb3Jtcztcblx0XHRjb25zdCBwaXhlbHMgPSBfc2l6ZUxvZHNbbG9kSW5dIC0gMTtcblx0XHRjb25zdCByYWRpYW5zUGVyUGl4ZWwgPSBpc0Zpbml0ZShzaWdtYVJhZGlhbnMpID8gTWF0aC5QSSAvICgyICogcGl4ZWxzKSA6IDIgKiBNYXRoLlBJIC8gKDIgKiBNQVhfU0FNUExFUyAtIDEpO1xuXHRcdGNvbnN0IHNpZ21hUGl4ZWxzID0gc2lnbWFSYWRpYW5zIC8gcmFkaWFuc1BlclBpeGVsO1xuXHRcdGNvbnN0IHNhbXBsZXMgPSBpc0Zpbml0ZShzaWdtYVJhZGlhbnMpID8gMSArIE1hdGguZmxvb3IoU1RBTkRBUkRfREVWSUFUSU9OUyAqIHNpZ21hUGl4ZWxzKSA6IE1BWF9TQU1QTEVTO1xuXG5cdFx0aWYgKHNhbXBsZXMgPiBNQVhfU0FNUExFUykge1xuXHRcdFx0Y29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7c2lnbWFSYWRpYW5zfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke3NhbXBsZXN9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtNQVhfU0FNUExFU31gKTtcblx0XHR9XG5cblx0XHRjb25zdCB3ZWlnaHRzID0gW107XG5cdFx0bGV0IHN1bSA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9TQU1QTEVTOyArK2kpIHtcblx0XHRcdGNvbnN0IHggPSBpIC8gc2lnbWFQaXhlbHM7XG5cdFx0XHRjb25zdCB3ZWlnaHQgPSBNYXRoLmV4cCgteCAqIHggLyAyKTtcblx0XHRcdHdlaWdodHMucHVzaCh3ZWlnaHQpO1xuXG5cdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHRzdW0gKz0gd2VpZ2h0O1xuXHRcdFx0fSBlbHNlIGlmIChpIDwgc2FtcGxlcykge1xuXHRcdFx0XHRzdW0gKz0gMiAqIHdlaWdodDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdlaWdodHNbaV0gPSB3ZWlnaHRzW2ldIC8gc3VtO1xuXHRcdH1cblxuXHRcdGJsdXJVbmlmb3Jtc1snZW52TWFwJ10udmFsdWUgPSB0YXJnZXRJbi50ZXh0dXJlO1xuXHRcdGJsdXJVbmlmb3Jtc1snc2FtcGxlcyddLnZhbHVlID0gc2FtcGxlcztcblx0XHRibHVyVW5pZm9ybXNbJ3dlaWdodHMnXS52YWx1ZSA9IHdlaWdodHM7XG5cdFx0Ymx1clVuaWZvcm1zWydsYXRpdHVkaW5hbCddLnZhbHVlID0gZGlyZWN0aW9uID09PSAnbGF0aXR1ZGluYWwnO1xuXG5cdFx0aWYgKHBvbGVBeGlzKSB7XG5cdFx0XHRibHVyVW5pZm9ybXNbJ3BvbGVBeGlzJ10udmFsdWUgPSBwb2xlQXhpcztcblx0XHR9XG5cblx0XHRibHVyVW5pZm9ybXNbJ2RUaGV0YSddLnZhbHVlID0gcmFkaWFuc1BlclBpeGVsO1xuXHRcdGJsdXJVbmlmb3Jtc1snbWlwSW50J10udmFsdWUgPSBMT0RfTUFYIC0gbG9kSW47XG5cdFx0Y29uc3Qgb3V0cHV0U2l6ZSA9IF9zaXplTG9kc1tsb2RPdXRdO1xuXHRcdGNvbnN0IHggPSAzICogTWF0aC5tYXgoMCwgU0laRV9NQVggLSAyICogb3V0cHV0U2l6ZSk7XG5cdFx0Y29uc3QgeSA9IChsb2RPdXQgPT09IDAgPyAwIDogMiAqIFNJWkVfTUFYKSArIDIgKiBvdXRwdXRTaXplICogKGxvZE91dCA+IExPRF9NQVggLSBMT0RfTUlOID8gbG9kT3V0IC0gTE9EX01BWCArIExPRF9NSU4gOiAwKTtcblxuXHRcdF9zZXRWaWV3cG9ydCh0YXJnZXRPdXQsIHgsIHksIDMgKiBvdXRwdXRTaXplLCAyICogb3V0cHV0U2l6ZSk7XG5cblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGFyZ2V0T3V0KTtcblx0XHRyZW5kZXJlci5yZW5kZXIoYmx1ck1lc2gsIF9mbGF0Q2FtZXJhKTtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVQbGFuZXMoKSB7XG5cdGNvbnN0IF9sb2RQbGFuZXMgPSBbXTtcblx0Y29uc3QgX3NpemVMb2RzID0gW107XG5cdGNvbnN0IF9zaWdtYXMgPSBbXTtcblx0bGV0IGxvZCA9IExPRF9NQVg7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBUT1RBTF9MT0RTOyBpKyspIHtcblx0XHRjb25zdCBzaXplTG9kID0gTWF0aC5wb3coMiwgbG9kKTtcblxuXHRcdF9zaXplTG9kcy5wdXNoKHNpemVMb2QpO1xuXG5cdFx0bGV0IHNpZ21hID0gMS4wIC8gc2l6ZUxvZDtcblxuXHRcdGlmIChpID4gTE9EX01BWCAtIExPRF9NSU4pIHtcblx0XHRcdHNpZ21hID0gRVhUUkFfTE9EX1NJR01BW2kgLSBMT0RfTUFYICsgTE9EX01JTiAtIDFdO1xuXHRcdH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuXHRcdFx0c2lnbWEgPSAwO1xuXHRcdH1cblxuXHRcdF9zaWdtYXMucHVzaChzaWdtYSk7XG5cblx0XHRjb25zdCB0ZXhlbFNpemUgPSAxLjAgLyAoc2l6ZUxvZCAtIDEpO1xuXHRcdGNvbnN0IG1pbiA9IC10ZXhlbFNpemUgLyAyO1xuXHRcdGNvbnN0IG1heCA9IDEgKyB0ZXhlbFNpemUgLyAyO1xuXHRcdGNvbnN0IHV2MSA9IFttaW4sIG1pbiwgbWF4LCBtaW4sIG1heCwgbWF4LCBtaW4sIG1pbiwgbWF4LCBtYXgsIG1pbiwgbWF4XTtcblx0XHRjb25zdCBjdWJlRmFjZXMgPSA2O1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gNjtcblx0XHRjb25zdCBwb3NpdGlvblNpemUgPSAzO1xuXHRcdGNvbnN0IHV2U2l6ZSA9IDI7XG5cdFx0Y29uc3QgZmFjZUluZGV4U2l6ZSA9IDE7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9uU2l6ZSAqIHZlcnRpY2VzICogY3ViZUZhY2VzKTtcblx0XHRjb25zdCB1diA9IG5ldyBGbG9hdDMyQXJyYXkodXZTaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMpO1xuXHRcdGNvbnN0IGZhY2VJbmRleCA9IG5ldyBGbG9hdDMyQXJyYXkoZmFjZUluZGV4U2l6ZSAqIHZlcnRpY2VzICogY3ViZUZhY2VzKTtcblxuXHRcdGZvciAobGV0IGZhY2UgPSAwOyBmYWNlIDwgY3ViZUZhY2VzOyBmYWNlKyspIHtcblx0XHRcdGNvbnN0IHggPSBmYWNlICUgMyAqIDIgLyAzIC0gMTtcblx0XHRcdGNvbnN0IHkgPSBmYWNlID4gMiA/IDAgOiAtMTtcblx0XHRcdGNvbnN0IGNvb3JkaW5hdGVzID0gW3gsIHksIDAsIHggKyAyIC8gMywgeSwgMCwgeCArIDIgLyAzLCB5ICsgMSwgMCwgeCwgeSwgMCwgeCArIDIgLyAzLCB5ICsgMSwgMCwgeCwgeSArIDEsIDBdO1xuXHRcdFx0cG9zaXRpb24uc2V0KGNvb3JkaW5hdGVzLCBwb3NpdGlvblNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UpO1xuXHRcdFx0dXYuc2V0KHV2MSwgdXZTaXplICogdmVydGljZXMgKiBmYWNlKTtcblx0XHRcdGNvbnN0IGZpbGwgPSBbZmFjZSwgZmFjZSwgZmFjZSwgZmFjZSwgZmFjZSwgZmFjZV07XG5cdFx0XHRmYWNlSW5kZXguc2V0KGZpbGwsIGZhY2VJbmRleFNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBsYW5lcyA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdHBsYW5lcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgcG9zaXRpb25TaXplKSk7XG5cdFx0cGxhbmVzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgQnVmZmVyQXR0cmlidXRlKHV2LCB1dlNpemUpKTtcblx0XHRwbGFuZXMuc2V0QXR0cmlidXRlKCdmYWNlSW5kZXgnLCBuZXcgQnVmZmVyQXR0cmlidXRlKGZhY2VJbmRleCwgZmFjZUluZGV4U2l6ZSkpO1xuXG5cdFx0X2xvZFBsYW5lcy5wdXNoKHBsYW5lcyk7XG5cblx0XHRpZiAobG9kID4gTE9EX01JTikge1xuXHRcdFx0bG9kLS07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfbG9kUGxhbmVzLFxuXHRcdF9zaXplTG9kcyxcblx0XHRfc2lnbWFzXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVSZW5kZXJUYXJnZXQocGFyYW1zKSB7XG5cdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCgzICogU0laRV9NQVgsIDMgKiBTSVpFX01BWCwgcGFyYW1zKTtcblx0Y3ViZVVWUmVuZGVyVGFyZ2V0LnRleHR1cmUubWFwcGluZyA9IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nO1xuXHRjdWJlVVZSZW5kZXJUYXJnZXQudGV4dHVyZS5uYW1lID0gJ1BNUkVNLmN1YmVVdic7XG5cdGN1YmVVVlJlbmRlclRhcmdldC5zY2lzc29yVGVzdCA9IHRydWU7XG5cdHJldHVybiBjdWJlVVZSZW5kZXJUYXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9zZXRWaWV3cG9ydCh0YXJnZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblx0dGFyZ2V0LnZpZXdwb3J0LnNldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0dGFyZ2V0LnNjaXNzb3Iuc2V0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBfZ2V0Qmx1clNoYWRlcihtYXhTYW1wbGVzKSB7XG5cdGNvbnN0IHdlaWdodHMgPSBuZXcgRmxvYXQzMkFycmF5KG1heFNhbXBsZXMpO1xuXHRjb25zdCBwb2xlQXhpcyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuXHRjb25zdCBzaGFkZXJNYXRlcmlhbCA9IG5ldyBSYXdTaGFkZXJNYXRlcmlhbCh7XG5cdFx0bmFtZTogJ1NwaGVyaWNhbEdhdXNzaWFuQmx1cicsXG5cdFx0ZGVmaW5lczoge1xuXHRcdFx0J24nOiBtYXhTYW1wbGVzXG5cdFx0fSxcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0J2Vudk1hcCc6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH0sXG5cdFx0XHQnc2FtcGxlcyc6IHtcblx0XHRcdFx0dmFsdWU6IDFcblx0XHRcdH0sXG5cdFx0XHQnd2VpZ2h0cyc6IHtcblx0XHRcdFx0dmFsdWU6IHdlaWdodHNcblx0XHRcdH0sXG5cdFx0XHQnbGF0aXR1ZGluYWwnOiB7XG5cdFx0XHRcdHZhbHVlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdCdkVGhldGEnOiB7XG5cdFx0XHRcdHZhbHVlOiAwXG5cdFx0XHR9LFxuXHRcdFx0J21pcEludCc6IHtcblx0XHRcdFx0dmFsdWU6IDBcblx0XHRcdH0sXG5cdFx0XHQncG9sZUF4aXMnOiB7XG5cdFx0XHRcdHZhbHVlOiBwb2xlQXhpc1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dmVydGV4U2hhZGVyOiBfZ2V0Q29tbW9uVmVydGV4U2hhZGVyKCksXG5cdFx0ZnJhZ21lbnRTaGFkZXI6XG5cdFx0LyogZ2xzbCAqL1xuXHRcdGBcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIGludCBzYW1wbGVzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07XG5cdFx0XHR1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRUaGV0YTtcblx0XHRcdHVuaWZvcm0gZmxvYXQgbWlwSW50O1xuXHRcdFx0dW5pZm9ybSB2ZWMzIHBvbGVBeGlzO1xuXG5cdFx0XHQjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRcdCNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cblx0XHRcdHZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkge1xuXG5cdFx0XHRcdGZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApO1xuXHRcdFx0XHQvLyBSb2RyaWd1ZXMnIGF4aXMtYW5nbGUgcm90YXRpb25cblx0XHRcdFx0dmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGFcblx0XHRcdFx0XHQrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhIClcblx0XHRcdFx0XHQrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTtcblxuXHRcdFx0XHRyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0dmVjMyBheGlzID0gbGF0aXR1ZGluYWwgPyBwb2xlQXhpcyA6IGNyb3NzKCBwb2xlQXhpcywgdk91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYWxsKCBlcXVhbCggYXhpcywgdmVjMyggMC4wICkgKSApICkge1xuXG5cdFx0XHRcdFx0YXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRheGlzID0gbm9ybWFsaXplKCBheGlzICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgMCBdICogZ2V0U2FtcGxlKCAwLjAsIGF4aXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpbnQgaSA9IDE7IGkgPCBuOyBpKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGkgPj0gc2FtcGxlcyApIHtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdGAsXG5cdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmcsXG5cdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRkZXB0aFdyaXRlOiBmYWxzZVxuXHR9KTtcblx0cmV0dXJuIHNoYWRlck1hdGVyaWFsO1xufVxuXG5mdW5jdGlvbiBfZ2V0RXF1aXJlY3RTaGFkZXIoKSB7XG5cdGNvbnN0IHRleGVsU2l6ZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRjb25zdCBzaGFkZXJNYXRlcmlhbCA9IG5ldyBSYXdTaGFkZXJNYXRlcmlhbCh7XG5cdFx0bmFtZTogJ0VxdWlyZWN0YW5ndWxhclRvQ3ViZVVWJyxcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0J2Vudk1hcCc6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH0sXG5cdFx0XHQndGV4ZWxTaXplJzoge1xuXHRcdFx0XHR2YWx1ZTogdGV4ZWxTaXplXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSxcblx0XHRmcmFnbWVudFNoYWRlcjpcblx0XHQvKiBnbHNsICovXG5cdFx0YFxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54ICs9IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueSArPSB0ZXhlbFNpemUueTtcblx0XHRcdFx0dmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXG5cdFx0XHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0XHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7XG5cblx0XHRcdH1cblx0XHRgLFxuXHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nLFxuXHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0ZGVwdGhXcml0ZTogZmFsc2Vcblx0fSk7XG5cdHJldHVybiBzaGFkZXJNYXRlcmlhbDtcbn1cblxuZnVuY3Rpb24gX2dldEN1YmVtYXBTaGFkZXIoKSB7XG5cdGNvbnN0IHNoYWRlck1hdGVyaWFsID0gbmV3IFJhd1NoYWRlck1hdGVyaWFsKHtcblx0XHRuYW1lOiAnQ3ViZW1hcFRvQ3ViZVVWJyxcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0J2Vudk1hcCc6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH0sXG5cdFx0XHQnZmxpcEVudk1hcCc6IHtcblx0XHRcdFx0dmFsdWU6IC0xXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR2ZXJ0ZXhTaGFkZXI6IF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSxcblx0XHRmcmFnbWVudFNoYWRlcjpcblx0XHQvKiBnbHNsICovXG5cdFx0YFxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTtcblxuXHRcdFx0fVxuXHRcdGAsXG5cdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmcsXG5cdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRkZXB0aFdyaXRlOiBmYWxzZVxuXHR9KTtcblx0cmV0dXJuIHNoYWRlck1hdGVyaWFsO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29tbW9uVmVydGV4U2hhZGVyKCkge1xuXHRyZXR1cm4gKFxuXHRcdC8qIGdsc2wgKi9cblx0XHRgXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0YFxuXHQpO1xufVxuXG5mdW5jdGlvbiBXZWJHTEN1YmVVVk1hcHMocmVuZGVyZXIpIHtcblx0bGV0IGN1YmVVVm1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXHRsZXQgcG1yZW1HZW5lcmF0b3IgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIGdldCh0ZXh0dXJlKSB7XG5cdFx0aWYgKHRleHR1cmUgJiYgdGV4dHVyZS5pc1RleHR1cmUpIHtcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0ZXh0dXJlLm1hcHBpbmc7XG5cdFx0XHRjb25zdCBpc0VxdWlyZWN0TWFwID0gbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc7XG5cdFx0XHRjb25zdCBpc0N1YmVNYXAgPSBtYXBwaW5nID09PSBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOyAvLyBlcXVpcmVjdC9jdWJlIG1hcCB0byBjdWJlVVYgY29udmVyc2lvblxuXG5cdFx0XHRpZiAoaXNFcXVpcmVjdE1hcCB8fCBpc0N1YmVNYXApIHtcblx0XHRcdFx0aWYgKHRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlICYmIHRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGxldCByZW5kZXJUYXJnZXQgPSBjdWJlVVZtYXBzLmdldCh0ZXh0dXJlKTtcblx0XHRcdFx0XHRpZiAocG1yZW1HZW5lcmF0b3IgPT09IG51bGwpIHBtcmVtR2VuZXJhdG9yID0gbmV3IFBNUkVNR2VuZXJhdG9yKHJlbmRlcmVyKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXQgPSBpc0VxdWlyZWN0TWFwID8gcG1yZW1HZW5lcmF0b3IuZnJvbUVxdWlyZWN0YW5ndWxhcih0ZXh0dXJlLCByZW5kZXJUYXJnZXQpIDogcG1yZW1HZW5lcmF0b3IuZnJvbUN1YmVtYXAodGV4dHVyZSwgcmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRjdWJlVVZtYXBzLnNldCh0ZXh0dXJlLCByZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRcdHJldHVybiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY3ViZVVWbWFwcy5oYXModGV4dHVyZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBjdWJlVVZtYXBzLmdldCh0ZXh0dXJlKS50ZXh0dXJlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRcdFx0XHRcdGlmIChpc0VxdWlyZWN0TWFwICYmIGltYWdlICYmIGltYWdlLmhlaWdodCA+IDAgfHwgaXNDdWJlTWFwICYmIGltYWdlICYmIGlzQ3ViZVRleHR1cmVDb21wbGV0ZShpbWFnZSkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHBtcmVtR2VuZXJhdG9yID09PSBudWxsKSBwbXJlbUdlbmVyYXRvciA9IG5ldyBQTVJFTUdlbmVyYXRvcihyZW5kZXJlcik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IGlzRXF1aXJlY3RNYXAgPyBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHRleHR1cmUpIDogcG1yZW1HZW5lcmF0b3IuZnJvbUN1YmVtYXAodGV4dHVyZSk7XG5cdFx0XHRcdFx0XHRcdGN1YmVVVm1hcHMuc2V0KHRleHR1cmUsIHJlbmRlclRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBpbWFnZSBub3QgeWV0IHJlYWR5LiB0cnkgdGhlIGNvbnZlcnNpb24gbmV4dCBmcmFtZVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQ3ViZVRleHR1cmVDb21wbGV0ZShpbWFnZSkge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0Y29uc3QgbGVuZ3RoID0gNjtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChpbWFnZVtpXSAhPT0gdW5kZWZpbmVkKSBjb3VudCsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb3VudCA9PT0gbGVuZ3RoO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25UZXh0dXJlRGlzcG9zZShldmVudCkge1xuXHRcdGNvbnN0IHRleHR1cmUgPSBldmVudC50YXJnZXQ7XG5cdFx0dGV4dHVyZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSk7XG5cdFx0Y29uc3QgY3ViZW1hcFVWID0gY3ViZVVWbWFwcy5nZXQodGV4dHVyZSk7XG5cblx0XHRpZiAoY3ViZW1hcFVWICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1YmVVVm1hcHMuZGVsZXRlKHRleHR1cmUpO1xuXHRcdFx0Y3ViZW1hcFVWLmRpc3Bvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdGN1YmVVVm1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdFx0aWYgKHBtcmVtR2VuZXJhdG9yICE9PSBudWxsKSB7XG5cdFx0XHRwbXJlbUdlbmVyYXRvci5kaXNwb3NlKCk7XG5cdFx0XHRwbXJlbUdlbmVyYXRvciA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG59XG5cbmZ1bmN0aW9uIFdlYkdMRXh0ZW5zaW9ucyhnbCkge1xuXHRjb25zdCBleHRlbnNpb25zID0ge307XG5cblx0ZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKG5hbWUpIHtcblx0XHRpZiAoZXh0ZW5zaW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZXh0ZW5zaW9uc1tuYW1lXTtcblx0XHR9XG5cblx0XHRsZXQgZXh0ZW5zaW9uO1xuXG5cdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRjYXNlICdXRUJHTF9kZXB0aF90ZXh0dXJlJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9kZXB0aF90ZXh0dXJlJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZScpIHx8IGdsLmdldEV4dGVuc2lvbignV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyc6XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Yyc6XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKSB8fCBnbC5nZXRFeHRlbnNpb24oJ01PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycpIHx8IGdsLmdldEV4dGVuc2lvbignV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnOlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycpIHx8IGdsLmdldEV4dGVuc2lvbignV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuXHRcdH1cblxuXHRcdGV4dGVuc2lvbnNbbmFtZV0gPSBleHRlbnNpb247XG5cdFx0cmV0dXJuIGV4dGVuc2lvbjtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aGFzOiBmdW5jdGlvbiAobmFtZSkge1xuXHRcdFx0cmV0dXJuIGdldEV4dGVuc2lvbihuYW1lKSAhPT0gbnVsbDtcblx0XHR9LFxuXHRcdGluaXQ6IGZ1bmN0aW9uIChjYXBhYmlsaXRpZXMpIHtcblx0XHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCdFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Jyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9mbG9hdCcpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ09FU19lbGVtZW50X2luZGV4X3VpbnQnKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnKTtcblx0XHRcdH1cblxuXHRcdFx0Z2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInKTtcblx0XHRcdGdldEV4dGVuc2lvbignRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Jyk7XG5cdFx0XHRnZXRFeHRlbnNpb24oJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScpO1xuXHRcdH0sXG5cdFx0Z2V0OiBmdW5jdGlvbiAobmFtZSkge1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uID09PSBudWxsKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogJyArIG5hbWUgKyAnIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLicpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXh0ZW5zaW9uO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xHZW9tZXRyaWVzKGdsLCBhdHRyaWJ1dGVzLCBpbmZvLCBiaW5kaW5nU3RhdGVzKSB7XG5cdGNvbnN0IGdlb21ldHJpZXMgPSB7fTtcblx0Y29uc3Qgd2lyZWZyYW1lQXR0cmlidXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gb25HZW9tZXRyeURpc3Bvc2UoZXZlbnQpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IGV2ZW50LnRhcmdldDtcblxuXHRcdGlmIChnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0YXR0cmlidXRlcy5yZW1vdmUoZ2VvbWV0cnkuaW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnJlbW92ZShnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdKTtcblx0XHR9XG5cblx0XHRnZW9tZXRyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2UpO1xuXHRcdGRlbGV0ZSBnZW9tZXRyaWVzW2dlb21ldHJ5LmlkXTtcblx0XHRjb25zdCBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldChnZW9tZXRyeSk7XG5cblx0XHRpZiAoYXR0cmlidXRlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnJlbW92ZShhdHRyaWJ1dGUpO1xuXHRcdFx0d2lyZWZyYW1lQXR0cmlidXRlcy5kZWxldGUoZ2VvbWV0cnkpO1xuXHRcdH1cblxuXHRcdGJpbmRpbmdTdGF0ZXMucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZ2VvbWV0cnkpO1xuXG5cdFx0aWYgKGdlb21ldHJ5LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPT09IHRydWUpIHtcblx0XHRcdGRlbGV0ZSBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudDtcblx0XHR9IC8vXG5cblxuXHRcdGluZm8ubWVtb3J5Lmdlb21ldHJpZXMtLTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldChvYmplY3QsIGdlb21ldHJ5KSB7XG5cdFx0aWYgKGdlb21ldHJpZXNbZ2VvbWV0cnkuaWRdID09PSB0cnVlKSByZXR1cm4gZ2VvbWV0cnk7XG5cdFx0Z2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uR2VvbWV0cnlEaXNwb3NlKTtcblx0XHRnZW9tZXRyaWVzW2dlb21ldHJ5LmlkXSA9IHRydWU7XG5cdFx0aW5mby5tZW1vcnkuZ2VvbWV0cmllcysrO1xuXHRcdHJldHVybiBnZW9tZXRyeTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZShnZW9tZXRyeSkge1xuXHRcdGNvbnN0IGdlb21ldHJ5QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7IC8vIFVwZGF0aW5nIGluZGV4IGJ1ZmZlciBpbiBWQU8gbm93LiBTZWUgV2ViR0xCaW5kaW5nU3RhdGVzLlxuXG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGdlb21ldHJ5QXR0cmlidXRlcykge1xuXHRcdFx0YXR0cmlidXRlcy51cGRhdGUoZ2VvbWV0cnlBdHRyaWJ1dGVzW25hbWVdLCBnbC5BUlJBWV9CVUZGRVIpO1xuXHRcdH0gLy8gbW9ycGggdGFyZ2V0c1xuXG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gbW9ycGhBdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBhcnJheSA9IG1vcnBoQXR0cmlidXRlc1tuYW1lXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0YXR0cmlidXRlcy51cGRhdGUoYXJyYXlbaV0sIGdsLkFSUkFZX0JVRkZFUik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlV2lyZWZyYW1lQXR0cmlidXRlKGdlb21ldHJ5KSB7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IGdlb21ldHJ5SW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblx0XHRjb25zdCBnZW9tZXRyeVBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRsZXQgdmVyc2lvbiA9IDA7XG5cblx0XHRpZiAoZ2VvbWV0cnlJbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBnZW9tZXRyeUluZGV4LmFycmF5O1xuXHRcdFx0dmVyc2lvbiA9IGdlb21ldHJ5SW5kZXgudmVyc2lvbjtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRcdFx0Y29uc3QgYSA9IGFycmF5W2kgKyAwXTtcblx0XHRcdFx0Y29uc3QgYiA9IGFycmF5W2kgKyAxXTtcblx0XHRcdFx0Y29uc3QgYyA9IGFycmF5W2kgKyAyXTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGIsIGMsIGMsIGEpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhcnJheSA9IGdlb21ldHJ5UG9zaXRpb24uYXJyYXk7XG5cdFx0XHR2ZXJzaW9uID0gZ2VvbWV0cnlQb3NpdGlvbi52ZXJzaW9uO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aCAvIDMgLSAxOyBpIDwgbDsgaSArPSAzKSB7XG5cdFx0XHRcdGNvbnN0IGEgPSBpICsgMDtcblx0XHRcdFx0Y29uc3QgYiA9IGkgKyAxO1xuXHRcdFx0XHRjb25zdCBjID0gaSArIDI7XG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBiLCBjLCBjLCBhKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGUgPSBuZXcgKGFycmF5TmVlZHNVaW50MzIoaW5kaWNlcykgPyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgOiBVaW50MTZCdWZmZXJBdHRyaWJ1dGUpKGluZGljZXMsIDEpO1xuXHRcdGF0dHJpYnV0ZS52ZXJzaW9uID0gdmVyc2lvbjsgLy8gVXBkYXRpbmcgaW5kZXggYnVmZmVyIGluIFZBTyBub3cuIFNlZSBXZWJHTEJpbmRpbmdTdGF0ZXNcblx0XHQvL1xuXG5cdFx0Y29uc3QgcHJldmlvdXNBdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldChnZW9tZXRyeSk7XG5cdFx0aWYgKHByZXZpb3VzQXR0cmlidXRlKSBhdHRyaWJ1dGVzLnJlbW92ZShwcmV2aW91c0F0dHJpYnV0ZSk7IC8vXG5cblx0XHR3aXJlZnJhbWVBdHRyaWJ1dGVzLnNldChnZW9tZXRyeSwgYXR0cmlidXRlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFdpcmVmcmFtZUF0dHJpYnV0ZShnZW9tZXRyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnRBdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldChnZW9tZXRyeSk7XG5cblx0XHRpZiAoY3VycmVudEF0dHJpYnV0ZSkge1xuXHRcdFx0Y29uc3QgZ2VvbWV0cnlJbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXG5cdFx0XHRpZiAoZ2VvbWV0cnlJbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHQvLyBpZiB0aGUgYXR0cmlidXRlIGlzIG9ic29sZXRlLCBjcmVhdGUgYSBuZXcgb25lXG5cdFx0XHRcdGlmIChjdXJyZW50QXR0cmlidXRlLnZlcnNpb24gPCBnZW9tZXRyeUluZGV4LnZlcnNpb24pIHtcblx0XHRcdFx0XHR1cGRhdGVXaXJlZnJhbWVBdHRyaWJ1dGUoZ2VvbWV0cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVwZGF0ZVdpcmVmcmFtZUF0dHJpYnV0ZShnZW9tZXRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KGdlb21ldHJ5KTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0dXBkYXRlOiB1cGRhdGUsXG5cdFx0Z2V0V2lyZWZyYW1lQXR0cmlidXRlOiBnZXRXaXJlZnJhbWVBdHRyaWJ1dGVcblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblx0bGV0IG1vZGU7XG5cblx0ZnVuY3Rpb24gc2V0TW9kZSh2YWx1ZSkge1xuXHRcdG1vZGUgPSB2YWx1ZTtcblx0fVxuXG5cdGxldCB0eXBlLCBieXRlc1BlckVsZW1lbnQ7XG5cblx0ZnVuY3Rpb24gc2V0SW5kZXgodmFsdWUpIHtcblx0XHR0eXBlID0gdmFsdWUudHlwZTtcblx0XHRieXRlc1BlckVsZW1lbnQgPSB2YWx1ZS5ieXRlc1BlckVsZW1lbnQ7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXIoc3RhcnQsIGNvdW50KSB7XG5cdFx0Z2wuZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGFydCAqIGJ5dGVzUGVyRWxlbWVudCk7XG5cdFx0aW5mby51cGRhdGUoY291bnQsIG1vZGUsIDEpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVySW5zdGFuY2VzKHN0YXJ0LCBjb3VudCwgcHJpbWNvdW50KSB7XG5cdFx0aWYgKHByaW1jb3VudCA9PT0gMCkgcmV0dXJuO1xuXHRcdGxldCBleHRlbnNpb24sIG1ldGhvZE5hbWU7XG5cblx0XHRpZiAoaXNXZWJHTDIpIHtcblx0XHRcdGV4dGVuc2lvbiA9IGdsO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3RWxlbWVudHNJbnN0YW5jZWQnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycpO1xuXHRcdFx0bWV0aG9kTmFtZSA9ICdkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSc7XG5cblx0XHRcdGlmIChleHRlbnNpb24gPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZXh0ZW5zaW9uW21ldGhvZE5hbWVdKG1vZGUsIGNvdW50LCB0eXBlLCBzdGFydCAqIGJ5dGVzUGVyRWxlbWVudCwgcHJpbWNvdW50KTtcblx0XHRpbmZvLnVwZGF0ZShjb3VudCwgbW9kZSwgcHJpbWNvdW50KTtcblx0fSAvL1xuXG5cblx0dGhpcy5zZXRNb2RlID0gc2V0TW9kZTtcblx0dGhpcy5zZXRJbmRleCA9IHNldEluZGV4O1xuXHR0aGlzLnJlbmRlciA9IHJlbmRlcjtcblx0dGhpcy5yZW5kZXJJbnN0YW5jZXMgPSByZW5kZXJJbnN0YW5jZXM7XG59XG5cbmZ1bmN0aW9uIFdlYkdMSW5mbyhnbCkge1xuXHRjb25zdCBtZW1vcnkgPSB7XG5cdFx0Z2VvbWV0cmllczogMCxcblx0XHR0ZXh0dXJlczogMFxuXHR9O1xuXHRjb25zdCByZW5kZXIgPSB7XG5cdFx0ZnJhbWU6IDAsXG5cdFx0Y2FsbHM6IDAsXG5cdFx0dHJpYW5nbGVzOiAwLFxuXHRcdHBvaW50czogMCxcblx0XHRsaW5lczogMFxuXHR9O1xuXG5cdGZ1bmN0aW9uIHVwZGF0ZShjb3VudCwgbW9kZSwgaW5zdGFuY2VDb3VudCkge1xuXHRcdHJlbmRlci5jYWxscysrO1xuXG5cdFx0c3dpdGNoIChtb2RlKSB7XG5cdFx0XHRjYXNlIGdsLlRSSUFOR0xFUzpcblx0XHRcdFx0cmVuZGVyLnRyaWFuZ2xlcyArPSBpbnN0YW5jZUNvdW50ICogKGNvdW50IC8gMyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIGdsLkxJTkVTOlxuXHRcdFx0XHRyZW5kZXIubGluZXMgKz0gaW5zdGFuY2VDb3VudCAqIChjb3VudCAvIDIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBnbC5MSU5FX1NUUklQOlxuXHRcdFx0XHRyZW5kZXIubGluZXMgKz0gaW5zdGFuY2VDb3VudCAqIChjb3VudCAtIDEpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBnbC5MSU5FX0xPT1A6XG5cdFx0XHRcdHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIGdsLlBPSU5UUzpcblx0XHRcdFx0cmVuZGVyLnBvaW50cyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOicsIG1vZGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldCgpIHtcblx0XHRyZW5kZXIuZnJhbWUrKztcblx0XHRyZW5kZXIuY2FsbHMgPSAwO1xuXHRcdHJlbmRlci50cmlhbmdsZXMgPSAwO1xuXHRcdHJlbmRlci5wb2ludHMgPSAwO1xuXHRcdHJlbmRlci5saW5lcyA9IDA7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lbW9yeTogbWVtb3J5LFxuXHRcdHJlbmRlcjogcmVuZGVyLFxuXHRcdHByb2dyYW1zOiBudWxsLFxuXHRcdGF1dG9SZXNldDogdHJ1ZSxcblx0XHRyZXNldDogcmVzZXQsXG5cdFx0dXBkYXRlOiB1cGRhdGVcblx0fTtcbn1cblxuY2xhc3MgRGF0YVRleHR1cmUyREFycmF5IGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKGRhdGEgPSBudWxsLCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGRlcHRoID0gMSkge1xuXHRcdHN1cGVyKG51bGwpO1xuXHRcdHRoaXMuaW1hZ2UgPSB7XG5cdFx0XHRkYXRhLFxuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHRkZXB0aFxuXHRcdH07XG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLndyYXBSID0gQ2xhbXBUb0VkZ2VXcmFwcGluZztcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IDE7XG5cdH1cblxufVxuXG5EYXRhVGV4dHVyZTJEQXJyYXkucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5ID0gdHJ1ZTtcblxuZnVuY3Rpb24gbnVtZXJpY2FsU29ydChhLCBiKSB7XG5cdHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZnVuY3Rpb24gYWJzTnVtZXJpY2FsU29ydChhLCBiKSB7XG5cdHJldHVybiBNYXRoLmFicyhiWzFdKSAtIE1hdGguYWJzKGFbMV0pO1xufVxuXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZShtb3JwaCwgYXR0cmlidXRlKSB7XG5cdGxldCBkZW5vbWluYXRvciA9IDE7XG5cdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgPyBhdHRyaWJ1dGUuZGF0YS5hcnJheSA6IGF0dHJpYnV0ZS5hcnJheTtcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5KSBkZW5vbWluYXRvciA9IDEyNztlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGRlbm9taW5hdG9yID0gMzI3Njc7ZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBkZW5vbWluYXRvciA9IDIxNDc0ODM2NDc7ZWxzZSBjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogJywgYXJyYXkpO1xuXHRtb3JwaC5kaXZpZGVTY2FsYXIoZGVub21pbmF0b3IpO1xufVxuXG5mdW5jdGlvbiBXZWJHTE1vcnBodGFyZ2V0cyhnbCwgY2FwYWJpbGl0aWVzLCB0ZXh0dXJlcykge1xuXHRjb25zdCBpbmZsdWVuY2VzTGlzdCA9IHt9O1xuXHRjb25zdCBtb3JwaEluZmx1ZW5jZXMgPSBuZXcgRmxvYXQzMkFycmF5KDgpO1xuXHRjb25zdCBtb3JwaFRleHR1cmVzID0gbmV3IFdlYWtNYXAoKTtcblx0Y29uc3QgbW9ycGggPSBuZXcgVmVjdG9yMygpO1xuXHRjb25zdCB3b3JrSW5mbHVlbmNlcyA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFx0d29ya0luZmx1ZW5jZXNbaV0gPSBbaSwgMF07XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0pIHtcblx0XHRjb25zdCBvYmplY3RJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztcblxuXHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IHRydWUpIHtcblx0XHRcdC8vIGluc3RlYWQgb2YgdXNpbmcgYXR0cmlidXRlcywgdGhlIFdlYkdMIDIgY29kZSBwYXRoIGVuY29kZXMgbW9ycGggdGFyZ2V0c1xuXHRcdFx0Ly8gaW50byBhbiBhcnJheSBvZiBkYXRhIHRleHR1cmVzLiBFYWNoIGxheWVyIHJlcHJlc2VudHMgYSBzaW5nbGUgbW9ycGggdGFyZ2V0LlxuXHRcdFx0Y29uc3QgbnVtYmVyT2ZNb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoO1xuXHRcdFx0bGV0IGVudHJ5ID0gbW9ycGhUZXh0dXJlcy5nZXQoZ2VvbWV0cnkpO1xuXG5cdFx0XHRpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS5jb3VudCAhPT0gbnVtYmVyT2ZNb3JwaFRhcmdldHMpIHtcblx0XHRcdFx0aWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIGVudHJ5LnRleHR1cmUuZGlzcG9zZSgpO1xuXHRcdFx0XHRjb25zdCBoYXNNb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdFx0Y29uc3QgbW9ycGhOb3JtYWxzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCB8fCBbXTtcblx0XHRcdFx0Y29uc3QgbnVtYmVyT2ZWZXJ0aWNlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQ7XG5cdFx0XHRcdGNvbnN0IG51bWJlck9mVmVydGV4RGF0YSA9IGhhc01vcnBoTm9ybWFscyA9PT0gdHJ1ZSA/IDIgOiAxOyAvLyAodixuKSB2cy4gKHYpXG5cblx0XHRcdFx0bGV0IHdpZHRoID0gbnVtYmVyT2ZWZXJ0aWNlcyAqIG51bWJlck9mVmVydGV4RGF0YTtcblx0XHRcdFx0bGV0IGhlaWdodCA9IDE7XG5cblx0XHRcdFx0aWYgKHdpZHRoID4gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSB7XG5cdFx0XHRcdFx0aGVpZ2h0ID0gTWF0aC5jZWlsKHdpZHRoIC8gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTtcblx0XHRcdFx0XHR3aWR0aCA9IGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0ICogbnVtYmVyT2ZNb3JwaFRhcmdldHMpO1xuXHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlMkRBcnJheShidWZmZXIsIHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTW9ycGhUYXJnZXRzKTtcblx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSBSR0JBRm9ybWF0OyAvLyB1c2luZyBSR0JBIHNpbmNlIFJHQiBtaWdodCBiZSBlbXVsYXRlZCAoYW5kIGlzIHRodXMgc2xvd2VyKVxuXG5cdFx0XHRcdHRleHR1cmUudHlwZSA9IEZsb2F0VHlwZTtcblx0XHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7IC8vIGZpbGwgYnVmZmVyXG5cblx0XHRcdFx0Y29uc3QgdmVydGV4RGF0YVN0cmlkZSA9IG51bWJlck9mVmVydGV4RGF0YSAqIDQ7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZk1vcnBoVGFyZ2V0czsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXQgPSBtb3JwaFRhcmdldHNbaV07XG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhOb3JtYWwgPSBtb3JwaE5vcm1hbHNbaV07XG5cdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gd2lkdGggKiBoZWlnaHQgKiA0ICogaTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbW9ycGhUYXJnZXQuY291bnQ7IGorKykge1xuXHRcdFx0XHRcdFx0bW9ycGguZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaFRhcmdldCwgaik7XG5cdFx0XHRcdFx0XHRpZiAobW9ycGhUYXJnZXQubm9ybWFsaXplZCA9PT0gdHJ1ZSkgZGVub3JtYWxpemUobW9ycGgsIG1vcnBoVGFyZ2V0KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmlkZSA9IGogKiB2ZXJ0ZXhEYXRhU3RyaWRlO1xuXHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDBdID0gbW9ycGgueDtcblx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IG1vcnBoLnk7XG5cdFx0XHRcdFx0XHRidWZmZXJbb2Zmc2V0ICsgc3RyaWRlICsgMl0gPSBtb3JwaC56O1xuXHRcdFx0XHRcdFx0YnVmZmVyW29mZnNldCArIHN0cmlkZSArIDNdID0gMDtcblxuXHRcdFx0XHRcdFx0aWYgKGhhc01vcnBoTm9ybWFscyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRtb3JwaC5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoTm9ybWFsLCBqKTtcblx0XHRcdFx0XHRcdFx0aWYgKG1vcnBoTm9ybWFsLm5vcm1hbGl6ZWQgPT09IHRydWUpIGRlbm9ybWFsaXplKG1vcnBoLCBtb3JwaE5vcm1hbCk7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyA0XSA9IG1vcnBoLng7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyA1XSA9IG1vcnBoLnk7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyA2XSA9IG1vcnBoLno7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBzdHJpZGUgKyA3XSA9IDA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZW50cnkgPSB7XG5cdFx0XHRcdFx0Y291bnQ6IG51bWJlck9mTW9ycGhUYXJnZXRzLFxuXHRcdFx0XHRcdHRleHR1cmU6IHRleHR1cmUsXG5cdFx0XHRcdFx0c2l6ZTogbmV3IFZlY3RvcjIod2lkdGgsIGhlaWdodClcblx0XHRcdFx0fTtcblx0XHRcdFx0bW9ycGhUZXh0dXJlcy5zZXQoZ2VvbWV0cnksIGVudHJ5KTtcblxuXHRcdFx0XHRmdW5jdGlvbiBkaXNwb3NlVGV4dHVyZSgpIHtcblx0XHRcdFx0XHR0ZXh0dXJlLmRpc3Bvc2UoKTtcblx0XHRcdFx0XHRtb3JwaFRleHR1cmVzLmRlbGV0ZShnZW9tZXRyeSk7XG5cdFx0XHRcdFx0Z2VvbWV0cnkucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIGRpc3Bvc2VUZXh0dXJlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBkaXNwb3NlVGV4dHVyZSk7XG5cdFx0XHR9IC8vXG5cblxuXHRcdFx0bGV0IG1vcnBoSW5mbHVlbmNlc1N1bSA9IDA7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0SW5mbHVlbmNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRtb3JwaEluZmx1ZW5jZXNTdW0gKz0gb2JqZWN0SW5mbHVlbmNlc1tpXTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW9ycGhCYXNlSW5mbHVlbmNlID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmUgPyAxIDogMSAtIG1vcnBoSW5mbHVlbmNlc1N1bTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShnbCwgJ21vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZScsIG1vcnBoQmFzZUluZmx1ZW5jZSk7XG5cdFx0XHRwcm9ncmFtLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZ2wsICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnLCBvYmplY3RJbmZsdWVuY2VzKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShnbCwgJ21vcnBoVGFyZ2V0c1RleHR1cmUnLCBlbnRyeS50ZXh0dXJlLCB0ZXh0dXJlcyk7XG5cdFx0XHRwcm9ncmFtLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZ2wsICdtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZScsIGVudHJ5LnNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXaGVuIG9iamVjdCBkb2Vzbid0IGhhdmUgbW9ycGggdGFyZ2V0IGluZmx1ZW5jZXMgZGVmaW5lZCwgd2UgdHJlYXQgaXQgYXMgYSAwLWxlbmd0aCBhcnJheVxuXHRcdFx0Ly8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIHNldCB1cCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UgLyBtb3JwaFRhcmdldEluZmx1ZW5jZXNcblx0XHRcdGNvbnN0IGxlbmd0aCA9IG9iamVjdEluZmx1ZW5jZXMgPT09IHVuZGVmaW5lZCA/IDAgOiBvYmplY3RJbmZsdWVuY2VzLmxlbmd0aDtcblx0XHRcdGxldCBpbmZsdWVuY2VzID0gaW5mbHVlbmNlc0xpc3RbZ2VvbWV0cnkuaWRdO1xuXG5cdFx0XHRpZiAoaW5mbHVlbmNlcyA9PT0gdW5kZWZpbmVkIHx8IGluZmx1ZW5jZXMubGVuZ3RoICE9PSBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaW5pdGlhbGlzZSBsaXN0XG5cdFx0XHRcdGluZmx1ZW5jZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aW5mbHVlbmNlc1tpXSA9IFtpLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZmx1ZW5jZXNMaXN0W2dlb21ldHJ5LmlkXSA9IGluZmx1ZW5jZXM7XG5cdFx0XHR9IC8vIENvbGxlY3QgaW5mbHVlbmNlc1xuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW5mbHVlbmNlID0gaW5mbHVlbmNlc1tpXTtcblx0XHRcdFx0aW5mbHVlbmNlWzBdID0gaTtcblx0XHRcdFx0aW5mbHVlbmNlWzFdID0gb2JqZWN0SW5mbHVlbmNlc1tpXTtcblx0XHRcdH1cblxuXHRcdFx0aW5mbHVlbmNlcy5zb3J0KGFic051bWVyaWNhbFNvcnQpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuXHRcdFx0XHRpZiAoaSA8IGxlbmd0aCAmJiBpbmZsdWVuY2VzW2ldWzFdKSB7XG5cdFx0XHRcdFx0d29ya0luZmx1ZW5jZXNbaV1bMF0gPSBpbmZsdWVuY2VzW2ldWzBdO1xuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzW2ldWzFdID0gaW5mbHVlbmNlc1tpXVsxXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3b3JrSW5mbHVlbmNlc1tpXVswXSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzW2ldWzFdID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR3b3JrSW5mbHVlbmNlcy5zb3J0KG51bWVyaWNhbFNvcnQpO1xuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgbW9ycGhOb3JtYWxzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtcblx0XHRcdGxldCBtb3JwaEluZmx1ZW5jZXNTdW0gPSAwO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbmZsdWVuY2UgPSB3b3JrSW5mbHVlbmNlc1tpXTtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBpbmZsdWVuY2VbMF07XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaW5mbHVlbmNlWzFdO1xuXG5cdFx0XHRcdGlmIChpbmRleCAhPT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgJiYgdmFsdWUpIHtcblx0XHRcdFx0XHRpZiAobW9ycGhUYXJnZXRzICYmIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgnbW9ycGhUYXJnZXQnICsgaSkgIT09IG1vcnBoVGFyZ2V0c1tpbmRleF0pIHtcblx0XHRcdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbW9ycGhUYXJnZXQnICsgaSwgbW9ycGhUYXJnZXRzW2luZGV4XSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1vcnBoTm9ybWFscyAmJiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ21vcnBoTm9ybWFsJyArIGkpICE9PSBtb3JwaE5vcm1hbHNbaW5kZXhdKSB7XG5cdFx0XHRcdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ21vcnBoTm9ybWFsJyArIGksIG1vcnBoTm9ybWFsc1tpbmRleF0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1tpXSA9IHZhbHVlO1xuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1N1bSArPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAobW9ycGhUYXJnZXRzICYmIGdlb21ldHJ5Lmhhc0F0dHJpYnV0ZSgnbW9ycGhUYXJnZXQnICsgaSkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgnbW9ycGhUYXJnZXQnICsgaSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1vcnBoTm9ybWFscyAmJiBnZW9tZXRyeS5oYXNBdHRyaWJ1dGUoJ21vcnBoTm9ybWFsJyArIGkpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRnZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoJ21vcnBoTm9ybWFsJyArIGkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1tpXSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gR0xTTCBzaGFkZXIgdXNlcyBmb3JtdWxhIGJhc2VpbmZsdWVuY2UgKiBiYXNlICsgc3VtKHRhcmdldCAqIGluZmx1ZW5jZSlcblx0XHRcdC8vIFRoaXMgYWxsb3dzIHVzIHRvIHN3aXRjaCBiZXR3ZWVuIGFic29sdXRlIG1vcnBocyBhbmQgcmVsYXRpdmUgbW9ycGhzIHdpdGhvdXQgY2hhbmdpbmcgc2hhZGVyIGNvZGVcblx0XHRcdC8vIFdoZW4gYmFzZWluZmx1ZW5jZSA9IDEgLSBzdW0oaW5mbHVlbmNlKSwgdGhlIGFib3ZlIGlzIGVxdWl2YWxlbnQgdG8gc3VtKCh0YXJnZXQgLSBiYXNlKSAqIGluZmx1ZW5jZSlcblxuXG5cdFx0XHRjb25zdCBtb3JwaEJhc2VJbmZsdWVuY2UgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHNSZWxhdGl2ZSA/IDEgOiAxIC0gbW9ycGhJbmZsdWVuY2VzU3VtO1xuXHRcdFx0cHJvZ3JhbS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGdsLCAnbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlJywgbW9ycGhCYXNlSW5mbHVlbmNlKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShnbCwgJ21vcnBoVGFyZ2V0SW5mbHVlbmNlcycsIG1vcnBoSW5mbHVlbmNlcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1cGRhdGU6IHVwZGF0ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTE9iamVjdHMoZ2wsIGdlb21ldHJpZXMsIGF0dHJpYnV0ZXMsIGluZm8pIHtcblx0bGV0IHVwZGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gdXBkYXRlKG9iamVjdCkge1xuXHRcdGNvbnN0IGZyYW1lID0gaW5mby5yZW5kZXIuZnJhbWU7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgYnVmZmVyZ2VvbWV0cnkgPSBnZW9tZXRyaWVzLmdldChvYmplY3QsIGdlb21ldHJ5KTsgLy8gVXBkYXRlIG9uY2UgcGVyIGZyYW1lXG5cblx0XHRpZiAodXBkYXRlTWFwLmdldChidWZmZXJnZW9tZXRyeSkgIT09IGZyYW1lKSB7XG5cdFx0XHRnZW9tZXRyaWVzLnVwZGF0ZShidWZmZXJnZW9tZXRyeSk7XG5cdFx0XHR1cGRhdGVNYXAuc2V0KGJ1ZmZlcmdlb21ldHJ5LCBmcmFtZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9iamVjdC5pc0luc3RhbmNlZE1lc2gpIHtcblx0XHRcdGlmIChvYmplY3QuaGFzRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UpID09PSBmYWxzZSkge1xuXHRcdFx0XHRvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZShvYmplY3QuaW5zdGFuY2VNYXRyaXgsIGdsLkFSUkFZX0JVRkZFUik7XG5cblx0XHRcdGlmIChvYmplY3QuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCkge1xuXHRcdFx0XHRhdHRyaWJ1dGVzLnVwZGF0ZShvYmplY3QuaW5zdGFuY2VDb2xvciwgZ2wuQVJSQVlfQlVGRkVSKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYnVmZmVyZ2VvbWV0cnk7XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdHVwZGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBvbkluc3RhbmNlZE1lc2hEaXNwb3NlKGV2ZW50KSB7XG5cdFx0Y29uc3QgaW5zdGFuY2VkTWVzaCA9IGV2ZW50LnRhcmdldDtcblx0XHRpbnN0YW5jZWRNZXNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvbkluc3RhbmNlZE1lc2hEaXNwb3NlKTtcblx0XHRhdHRyaWJ1dGVzLnJlbW92ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlTWF0cml4KTtcblx0XHRpZiAoaW5zdGFuY2VkTWVzaC5pbnN0YW5jZUNvbG9yICE9PSBudWxsKSBhdHRyaWJ1dGVzLnJlbW92ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlQ29sb3IpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1cGRhdGU6IHVwZGF0ZSxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG59XG5cbmNsYXNzIERhdGFUZXh0dXJlM0QgZXh0ZW5kcyBUZXh0dXJlIHtcblx0Y29uc3RydWN0b3IoZGF0YSA9IG51bGwsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgZGVwdGggPSAxKSB7XG5cdFx0Ly8gV2UncmUgZ29pbmcgdG8gYWRkIC5zZXRYWFgoKSBtZXRob2RzIGZvciBzZXR0aW5nIHByb3BlcnRpZXMgbGF0ZXIuXG5cdFx0Ly8gVXNlcnMgY2FuIHN0aWxsIHNldCBpbiBEYXRhVGV4dHVyZTNEIGRpcmVjdGx5LlxuXHRcdC8vXG5cdFx0Ly9cdGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuRGF0YVRleHR1cmUzRCggZGF0YSwgd2lkdGgsIGhlaWdodCwgZGVwdGggKTtcblx0XHQvLyBcdHRleHR1cmUuYW5pc290cm9weSA9IDE2O1xuXHRcdC8vXG5cdFx0Ly8gU2VlICMxNDgzOVxuXHRcdHN1cGVyKG51bGwpO1xuXHRcdHRoaXMuaW1hZ2UgPSB7XG5cdFx0XHRkYXRhLFxuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHRkZXB0aFxuXHRcdH07XG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLndyYXBSID0gQ2xhbXBUb0VkZ2VXcmFwcGluZztcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IDE7XG5cdH1cblxufVxuXG5EYXRhVGV4dHVyZTNELnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0QgPSB0cnVlO1xuXG4vKipcbiAqIFVuaWZvcm1zIG9mIGEgcHJvZ3JhbS5cbiAqIFRob3NlIGZvcm0gYSB0cmVlIHN0cnVjdHVyZSB3aXRoIGEgc3BlY2lhbCB0b3AtbGV2ZWwgY29udGFpbmVyIGZvciB0aGUgcm9vdCxcbiAqIHdoaWNoIHlvdSBnZXQgYnkgY2FsbGluZyAnbmV3IFdlYkdMVW5pZm9ybXMoIGdsLCBwcm9ncmFtICknLlxuICpcbiAqXG4gKiBQcm9wZXJ0aWVzIG9mIGlubmVyIG5vZGVzIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcjpcbiAqXG4gKiAuc2VxIC0gYXJyYXkgb2YgbmVzdGVkIHVuaWZvcm1zXG4gKiAubWFwIC0gbmVzdGVkIHVuaWZvcm1zIGJ5IG5hbWVcbiAqXG4gKlxuICogTWV0aG9kcyBvZiBhbGwgbm9kZXMgZXhjZXB0IHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyOlxuICpcbiAqIC5zZXRWYWx1ZSggZ2wsIHZhbHVlLCBbdGV4dHVyZXNdIClcbiAqXG4gKiBcdFx0dXBsb2FkcyBhIHVuaWZvcm0gdmFsdWUocylcbiAqXHRcdHRoZSAndGV4dHVyZXMnIHBhcmFtZXRlciBpcyBuZWVkZWQgZm9yIHNhbXBsZXIgdW5pZm9ybXNcbiAqXG4gKlxuICogU3RhdGljIG1ldGhvZHMgb2YgdGhlIHRvcC1sZXZlbCBjb250YWluZXIgKHRleHR1cmVzIGZhY3Rvcml6YXRpb25zKTpcbiAqXG4gKiAudXBsb2FkKCBnbCwgc2VxLCB2YWx1ZXMsIHRleHR1cmVzIClcbiAqXG4gKiBcdFx0c2V0cyB1bmlmb3JtcyBpbiAnc2VxJyB0byAndmFsdWVzW2lkXS52YWx1ZSdcbiAqXG4gKiAuc2VxV2l0aFZhbHVlKCBzZXEsIHZhbHVlcyApIDogZmlsdGVyZWRTZXFcbiAqXG4gKiBcdFx0ZmlsdGVycyAnc2VxJyBlbnRyaWVzIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2YWx1ZXNcbiAqXG4gKlxuICogTWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAodGV4dHVyZXMgZmFjdG9yaXphdGlvbnMpOlxuICpcbiAqIC5zZXRWYWx1ZSggZ2wsIG5hbWUsIHZhbHVlLCB0ZXh0dXJlcyApXG4gKlxuICogXHRcdHNldHMgdW5pZm9ybSB3aXRoXHRuYW1lICduYW1lJyB0byAndmFsdWUnXG4gKlxuICogLnNldE9wdGlvbmFsKCBnbCwgb2JqLCBwcm9wIClcbiAqXG4gKiBcdFx0bGlrZSAuc2V0IGZvciBhbiBvcHRpb25hbCBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5jb25zdCBlbXB0eVRleHR1cmUgPSBuZXcgVGV4dHVyZSgpO1xuY29uc3QgZW1wdHlUZXh0dXJlMmRBcnJheSA9IG5ldyBEYXRhVGV4dHVyZTJEQXJyYXkoKTtcbmNvbnN0IGVtcHR5VGV4dHVyZTNkID0gbmV3IERhdGFUZXh0dXJlM0QoKTtcbmNvbnN0IGVtcHR5Q3ViZVRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoKTsgLy8gLS0tIFV0aWxpdGllcyAtLS1cbi8vIEFycmF5IENhY2hlcyAocHJvdmlkZSB0eXBlZCBhcnJheXMgZm9yIHRlbXBvcmFyeSBieSBzaXplKVxuXG5jb25zdCBhcnJheUNhY2hlRjMyID0gW107XG5jb25zdCBhcnJheUNhY2hlSTMyID0gW107IC8vIEZsb2F0MzJBcnJheSBjYWNoZXMgdXNlZCBmb3IgdXBsb2FkaW5nIE1hdHJpeCB1bmlmb3Jtc1xuXG5jb25zdCBtYXQ0YXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbmNvbnN0IG1hdDNhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG5jb25zdCBtYXQyYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQpOyAvLyBGbGF0dGVuaW5nIGZvciBhcnJheXMgb2YgdmVjdG9ycyBhbmQgbWF0cmljZXNcblxuZnVuY3Rpb24gZmxhdHRlbihhcnJheSwgbkJsb2NrcywgYmxvY2tTaXplKSB7XG5cdGNvbnN0IGZpcnN0RWxlbSA9IGFycmF5WzBdO1xuXHRpZiAoZmlyc3RFbGVtIDw9IDAgfHwgZmlyc3RFbGVtID4gMCkgcmV0dXJuIGFycmF5OyAvLyB1bm9wdGltaXplZDogISBpc05hTiggZmlyc3RFbGVtIClcblx0Ly8gc2VlIGh0dHA6Ly9qYWNrc29uZHVuc3Rhbi5jb20vYXJ0aWNsZXMvOTgzXG5cblx0Y29uc3QgbiA9IG5CbG9ja3MgKiBibG9ja1NpemU7XG5cdGxldCByID0gYXJyYXlDYWNoZUYzMltuXTtcblxuXHRpZiAociA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ciA9IG5ldyBGbG9hdDMyQXJyYXkobik7XG5cdFx0YXJyYXlDYWNoZUYzMltuXSA9IHI7XG5cdH1cblxuXHRpZiAobkJsb2NrcyAhPT0gMCkge1xuXHRcdGZpcnN0RWxlbS50b0FycmF5KHIsIDApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDEsIG9mZnNldCA9IDA7IGkgIT09IG5CbG9ja3M7ICsraSkge1xuXHRcdFx0b2Zmc2V0ICs9IGJsb2NrU2l6ZTtcblx0XHRcdGFycmF5W2ldLnRvQXJyYXkociwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoYSwgYikge1xuXHRpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29weUFycmF5KGEsIGIpIHtcblx0Zm9yIChsZXQgaSA9IDAsIGwgPSBiLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdGFbaV0gPSBiW2ldO1xuXHR9XG59IC8vIFRleHR1cmUgdW5pdCBhbGxvY2F0aW9uXG5cblxuZnVuY3Rpb24gYWxsb2NUZXhVbml0cyh0ZXh0dXJlcywgbikge1xuXHRsZXQgciA9IGFycmF5Q2FjaGVJMzJbbl07XG5cblx0aWYgKHIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHIgPSBuZXcgSW50MzJBcnJheShuKTtcblx0XHRhcnJheUNhY2hlSTMyW25dID0gcjtcblx0fVxuXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHRyW2ldID0gdGV4dHVyZXMuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59IC8vIC0tLSBTZXR0ZXJzIC0tLVxuLy8gTm90ZTogRGVmaW5pbmcgdGhlc2UgbWV0aG9kcyBleHRlcm5hbGx5LCBiZWNhdXNlIHRoZXkgY29tZSBpbiBhIGJ1bmNoXG4vLyBhbmQgdGhpcyB3YXkgdGhlaXIgbmFtZXMgbWluaWZ5LlxuLy8gU2luZ2xlIHNjYWxhclxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjFmKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGNhY2hlWzBdID09PSB2KSByZXR1cm47XG5cdGdsLnVuaWZvcm0xZih0aGlzLmFkZHIsIHYpO1xuXHRjYWNoZVswXSA9IHY7XG59IC8vIFNpbmdsZSBmbG9hdCB2ZWN0b3IgKGZyb20gZmxhdCBhcnJheSBvciBUSFJFRS5WZWN0b3JOKVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJmKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAodi54ICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoY2FjaGVbMF0gIT09IHYueCB8fCBjYWNoZVsxXSAhPT0gdi55KSB7XG5cdFx0XHRnbC51bmlmb3JtMmYodGhpcy5hZGRyLCB2LngsIHYueSk7XG5cdFx0XHRjYWNoZVswXSA9IHYueDtcblx0XHRcdGNhY2hlWzFdID0gdi55O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdFx0Z2wudW5pZm9ybTJmdih0aGlzLmFkZHIsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2YoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICh2LnggIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChjYWNoZVswXSAhPT0gdi54IHx8IGNhY2hlWzFdICE9PSB2LnkgfHwgY2FjaGVbMl0gIT09IHYueikge1xuXHRcdFx0Z2wudW5pZm9ybTNmKHRoaXMuYWRkciwgdi54LCB2LnksIHYueik7XG5cdFx0XHRjYWNoZVswXSA9IHYueDtcblx0XHRcdGNhY2hlWzFdID0gdi55O1xuXHRcdFx0Y2FjaGVbMl0gPSB2Lno7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHYuciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGNhY2hlWzBdICE9PSB2LnIgfHwgY2FjaGVbMV0gIT09IHYuZyB8fCBjYWNoZVsyXSAhPT0gdi5iKSB7XG5cdFx0XHRnbC51bmlmb3JtM2YodGhpcy5hZGRyLCB2LnIsIHYuZywgdi5iKTtcblx0XHRcdGNhY2hlWzBdID0gdi5yO1xuXHRcdFx0Y2FjaGVbMV0gPSB2Lmc7XG5cdFx0XHRjYWNoZVsyXSA9IHYuYjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRcdGdsLnVuaWZvcm0zZnYodGhpcy5hZGRyLCB2KTtcblx0XHRjb3B5QXJyYXkoY2FjaGUsIHYpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRmKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAodi54ICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoY2FjaGVbMF0gIT09IHYueCB8fCBjYWNoZVsxXSAhPT0gdi55IHx8IGNhY2hlWzJdICE9PSB2LnogfHwgY2FjaGVbM10gIT09IHYudykge1xuXHRcdFx0Z2wudW5pZm9ybTRmKHRoaXMuYWRkciwgdi54LCB2LnksIHYueiwgdi53KTtcblx0XHRcdGNhY2hlWzBdID0gdi54O1xuXHRcdFx0Y2FjaGVbMV0gPSB2Lnk7XG5cdFx0XHRjYWNoZVsyXSA9IHYuejtcblx0XHRcdGNhY2hlWzNdID0gdi53O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdFx0Z2wudW5pZm9ybTRmdih0aGlzLmFkZHIsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH1cbn0gLy8gU2luZ2xlIG1hdHJpeCAoZnJvbSBmbGF0IGFycmF5IG9yIFRIUkVFLk1hdHJpeE4pXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVNMihnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IGVsZW1lbnRzID0gdi5lbGVtZW50cztcblxuXHRpZiAoZWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0XHRnbC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwgZmFsc2UsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCBlbGVtZW50cykpIHJldHVybjtcblx0XHRtYXQyYXJyYXkuc2V0KGVsZW1lbnRzKTtcblx0XHRnbC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwgZmFsc2UsIG1hdDJhcnJheSk7XG5cdFx0Y29weUFycmF5KGNhY2hlLCBlbGVtZW50cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVNMyhnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IGVsZW1lbnRzID0gdi5lbGVtZW50cztcblxuXHRpZiAoZWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0XHRnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwgZmFsc2UsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCBlbGVtZW50cykpIHJldHVybjtcblx0XHRtYXQzYXJyYXkuc2V0KGVsZW1lbnRzKTtcblx0XHRnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwgZmFsc2UsIG1hdDNhcnJheSk7XG5cdFx0Y29weUFycmF5KGNhY2hlLCBlbGVtZW50cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVNNChnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IGVsZW1lbnRzID0gdi5lbGVtZW50cztcblxuXHRpZiAoZWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0XHRnbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwgZmFsc2UsIHYpO1xuXHRcdGNvcHlBcnJheShjYWNoZSwgdik7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCBlbGVtZW50cykpIHJldHVybjtcblx0XHRtYXQ0YXJyYXkuc2V0KGVsZW1lbnRzKTtcblx0XHRnbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwgZmFsc2UsIG1hdDRhcnJheSk7XG5cdFx0Y29weUFycmF5KGNhY2hlLCBlbGVtZW50cyk7XG5cdH1cbn0gLy8gU2luZ2xlIGludGVnZXIgLyBib29sZWFuXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMWkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoY2FjaGVbMF0gPT09IHYpIHJldHVybjtcblx0Z2wudW5pZm9ybTFpKHRoaXMuYWRkciwgdik7XG5cdGNhY2hlWzBdID0gdjtcbn0gLy8gU2luZ2xlIGludGVnZXIgLyBib29sZWFuIHZlY3RvciAoZnJvbSBmbGF0IGFycmF5KVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRnbC51bmlmb3JtMml2KHRoaXMuYWRkciwgdik7XG5cdGNvcHlBcnJheShjYWNoZSwgdik7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjNpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRnbC51bmlmb3JtM2l2KHRoaXMuYWRkciwgdik7XG5cdGNvcHlBcnJheShjYWNoZSwgdik7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRnbC51bmlmb3JtNGl2KHRoaXMuYWRkciwgdik7XG5cdGNvcHlBcnJheShjYWNoZSwgdik7XG59IC8vIFNpbmdsZSB1bnNpZ25lZCBpbnRlZ2VyXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMXVpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGNhY2hlWzBdID09PSB2KSByZXR1cm47XG5cdGdsLnVuaWZvcm0xdWkodGhpcy5hZGRyLCB2KTtcblx0Y2FjaGVbMF0gPSB2O1xufSAvLyBTaW5nbGUgdW5zaWduZWQgaW50ZWdlciB2ZWN0b3IgKGZyb20gZmxhdCBhcnJheSlcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYydWkoZ2wsIHYpIHtcblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRpZiAoYXJyYXlzRXF1YWwoY2FjaGUsIHYpKSByZXR1cm47XG5cdGdsLnVuaWZvcm0ydWl2KHRoaXMuYWRkciwgdik7XG5cdGNvcHlBcnJheShjYWNoZSwgdik7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjN1aShnbCwgdikge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGlmIChhcnJheXNFcXVhbChjYWNoZSwgdikpIHJldHVybjtcblx0Z2wudW5pZm9ybTN1aXYodGhpcy5hZGRyLCB2KTtcblx0Y29weUFycmF5KGNhY2hlLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNHVpKGdsLCB2KSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0aWYgKGFycmF5c0VxdWFsKGNhY2hlLCB2KSkgcmV0dXJuO1xuXHRnbC51bmlmb3JtNHVpdih0aGlzLmFkZHIsIHYpO1xuXHRjb3B5QXJyYXkoY2FjaGUsIHYpO1xufSAvLyBTaW5nbGUgdGV4dHVyZSAoMkQgLyBDdWJlKVxuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVDEoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoY2FjaGVbMF0gIT09IHVuaXQpIHtcblx0XHRnbC51bmlmb3JtMWkodGhpcy5hZGRyLCB1bml0KTtcblx0XHRjYWNoZVswXSA9IHVuaXQ7XG5cdH1cblxuXHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEKHYgfHwgZW1wdHlUZXh0dXJlLCB1bml0KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUM0QxKGdsLCB2LCB0ZXh0dXJlcykge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKGNhY2hlWzBdICE9PSB1bml0KSB7XG5cdFx0Z2wudW5pZm9ybTFpKHRoaXMuYWRkciwgdW5pdCk7XG5cdFx0Y2FjaGVbMF0gPSB1bml0O1xuXHR9XG5cblx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKHYgfHwgZW1wdHlUZXh0dXJlM2QsIHVuaXQpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQ2KGdsLCB2LCB0ZXh0dXJlcykge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKGNhY2hlWzBdICE9PSB1bml0KSB7XG5cdFx0Z2wudW5pZm9ybTFpKHRoaXMuYWRkciwgdW5pdCk7XG5cdFx0Y2FjaGVbMF0gPSB1bml0O1xuXHR9XG5cblx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlKHYgfHwgZW1wdHlDdWJlVGV4dHVyZSwgdW5pdCk7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDJEQXJyYXkxKGdsLCB2LCB0ZXh0dXJlcykge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKGNhY2hlWzBdICE9PSB1bml0KSB7XG5cdFx0Z2wudW5pZm9ybTFpKHRoaXMuYWRkciwgdW5pdCk7XG5cdFx0Y2FjaGVbMF0gPSB1bml0O1xuXHR9XG5cblx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEQXJyYXkodiB8fCBlbXB0eVRleHR1cmUyZEFycmF5LCB1bml0KTtcbn0gLy8gSGVscGVyIHRvIHBpY2sgdGhlIHJpZ2h0IHNldHRlciBmb3IgdGhlIHNpbmd1bGFyIGNhc2VcblxuXG5mdW5jdGlvbiBnZXRTaW5ndWxhclNldHRlcih0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgMHgxNDA2OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjFmO1xuXHRcdC8vIEZMT0FUXG5cblx0XHRjYXNlIDB4OGI1MDpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYyZjtcblx0XHQvLyBfVkVDMlxuXG5cdFx0Y2FzZSAweDhiNTE6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWM2Y7XG5cdFx0Ly8gX1ZFQzNcblxuXHRcdGNhc2UgMHg4YjUyOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjRmO1xuXHRcdC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4OGI1YTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZU0yO1xuXHRcdC8vIF9NQVQyXG5cblx0XHRjYXNlIDB4OGI1Yjpcblx0XHRcdHJldHVybiBzZXRWYWx1ZU0zO1xuXHRcdC8vIF9NQVQzXG5cblx0XHRjYXNlIDB4OGI1Yzpcblx0XHRcdHJldHVybiBzZXRWYWx1ZU00O1xuXHRcdC8vIF9NQVQ0XG5cblx0XHRjYXNlIDB4MTQwNDpcblx0XHRjYXNlIDB4OGI1Njpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYxaTtcblx0XHQvLyBJTlQsIEJPT0xcblxuXHRcdGNhc2UgMHg4YjUzOlxuXHRcdGNhc2UgMHg4YjU3OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjJpO1xuXHRcdC8vIF9WRUMyXG5cblx0XHRjYXNlIDB4OGI1NDpcblx0XHRjYXNlIDB4OGI1ODpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYzaTtcblx0XHQvLyBfVkVDM1xuXG5cdFx0Y2FzZSAweDhiNTU6XG5cdFx0Y2FzZSAweDhiNTk6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWNGk7XG5cdFx0Ly8gX1ZFQzRcblxuXHRcdGNhc2UgMHgxNDA1OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjF1aTtcblx0XHQvLyBVSU5UXG5cblx0XHRjYXNlIDB4OGRjNjpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYydWk7XG5cdFx0Ly8gX1ZFQzJcblxuXHRcdGNhc2UgMHg4ZGM3OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjN1aTtcblx0XHQvLyBfVkVDM1xuXG5cdFx0Y2FzZSAweDhkYzg6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWNHVpO1xuXHRcdC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4OGI1ZTogLy8gU0FNUExFUl8yRFxuXG5cdFx0Y2FzZSAweDhkNjY6IC8vIFNBTVBMRVJfRVhURVJOQUxfT0VTXG5cblx0XHRjYXNlIDB4OGRjYTogLy8gSU5UX1NBTVBMRVJfMkRcblxuXHRcdGNhc2UgMHg4ZGQyOiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl8yRFxuXG5cdFx0Y2FzZSAweDhiNjI6XG5cdFx0XHQvLyBTQU1QTEVSXzJEX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDE7XG5cblx0XHRjYXNlIDB4OGI1ZjogLy8gU0FNUExFUl8zRFxuXG5cdFx0Y2FzZSAweDhkY2I6IC8vIElOVF9TQU1QTEVSXzNEXG5cblx0XHRjYXNlIDB4OGRkMzpcblx0XHRcdC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUM0QxO1xuXG5cdFx0Y2FzZSAweDhiNjA6IC8vIFNBTVBMRVJfQ1VCRVxuXG5cdFx0Y2FzZSAweDhkY2M6IC8vIElOVF9TQU1QTEVSX0NVQkVcblxuXHRcdGNhc2UgMHg4ZGQ0OiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFXG5cblx0XHRjYXNlIDB4OGRjNTpcblx0XHRcdC8vIFNBTVBMRVJfQ1VCRV9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQ2O1xuXG5cdFx0Y2FzZSAweDhkYzE6IC8vIFNBTVBMRVJfMkRfQVJSQVlcblxuXHRcdGNhc2UgMHg4ZGNmOiAvLyBJTlRfU0FNUExFUl8yRF9BUlJBWVxuXG5cdFx0Y2FzZSAweDhkZDc6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZXG5cblx0XHRjYXNlIDB4OGRjNDpcblx0XHRcdC8vIFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMkRBcnJheTE7XG5cdH1cbn0gLy8gQXJyYXkgb2Ygc2NhbGFyc1xuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjFmQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTFmdih0aGlzLmFkZHIsIHYpO1xufSAvLyBBcnJheSBvZiB2ZWN0b3JzIChmcm9tIGZsYXQgYXJyYXkgb3IgYXJyYXkgb2YgVEhSRUUuVmVjdG9yTilcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYyZkFycmF5KGdsLCB2KSB7XG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKHYsIHRoaXMuc2l6ZSwgMik7XG5cdGdsLnVuaWZvcm0yZnYodGhpcy5hZGRyLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2ZBcnJheShnbCwgdikge1xuXHRjb25zdCBkYXRhID0gZmxhdHRlbih2LCB0aGlzLnNpemUsIDMpO1xuXHRnbC51bmlmb3JtM2Z2KHRoaXMuYWRkciwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRmQXJyYXkoZ2wsIHYpIHtcblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4odiwgdGhpcy5zaXplLCA0KTtcblx0Z2wudW5pZm9ybTRmdih0aGlzLmFkZHIsIGRhdGEpO1xufSAvLyBBcnJheSBvZiBtYXRyaWNlcyAoZnJvbSBmbGF0IGFycmF5IG9yIGFycmF5IG9mIFRIUkVFLk1hdHJpeE4pXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVNMkFycmF5KGdsLCB2KSB7XG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKHYsIHRoaXMuc2l6ZSwgNCk7XG5cdGdsLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCBmYWxzZSwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlTTNBcnJheShnbCwgdikge1xuXHRjb25zdCBkYXRhID0gZmxhdHRlbih2LCB0aGlzLnNpemUsIDkpO1xuXHRnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwgZmFsc2UsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU00QXJyYXkoZ2wsIHYpIHtcblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4odiwgdGhpcy5zaXplLCAxNik7XG5cdGdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCBmYWxzZSwgZGF0YSk7XG59IC8vIEFycmF5IG9mIGludGVnZXIgLyBib29sZWFuXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMWlBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtMWl2KHRoaXMuYWRkciwgdik7XG59IC8vIEFycmF5IG9mIGludGVnZXIgLyBib29sZWFuIHZlY3RvcnMgKGZyb20gZmxhdCBhcnJheSlcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYyaUFycmF5KGdsLCB2KSB7XG5cdGdsLnVuaWZvcm0yaXYodGhpcy5hZGRyLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2lBcnJheShnbCwgdikge1xuXHRnbC51bmlmb3JtM2l2KHRoaXMuYWRkciwgdik7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTRpdih0aGlzLmFkZHIsIHYpO1xufSAvLyBBcnJheSBvZiB1bnNpZ25lZCBpbnRlZ2VyXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMXVpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTF1aXYodGhpcy5hZGRyLCB2KTtcbn0gLy8gQXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlciB2ZWN0b3JzIChmcm9tIGZsYXQgYXJyYXkpXG5cblxuZnVuY3Rpb24gc2V0VmFsdWVWMnVpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTJ1aXYodGhpcy5hZGRyLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM3VpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTN1aXYodGhpcy5hZGRyLCB2KTtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNHVpQXJyYXkoZ2wsIHYpIHtcblx0Z2wudW5pZm9ybTR1aXYodGhpcy5hZGRyLCB2KTtcbn0gLy8gQXJyYXkgb2YgdGV4dHVyZXMgKDJEIC8gM0QgLyBDdWJlIC8gMkRBcnJheSlcblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQxQXJyYXkoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblx0Y29uc3QgdW5pdHMgPSBhbGxvY1RleFVuaXRzKHRleHR1cmVzLCBuKTtcblx0Z2wudW5pZm9ybTFpdih0aGlzLmFkZHIsIHVuaXRzKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRCh2W2ldIHx8IGVtcHR5VGV4dHVyZSwgdW5pdHNbaV0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDNEQXJyYXkoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblx0Y29uc3QgdW5pdHMgPSBhbGxvY1RleFVuaXRzKHRleHR1cmVzLCBuKTtcblx0Z2wudW5pZm9ybTFpdih0aGlzLmFkZHIsIHVuaXRzKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKHZbaV0gfHwgZW1wdHlUZXh0dXJlM2QsIHVuaXRzW2ldKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQ2QXJyYXkoZ2wsIHYsIHRleHR1cmVzKSB7XG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblx0Y29uc3QgdW5pdHMgPSBhbGxvY1RleFVuaXRzKHRleHR1cmVzLCBuKTtcblx0Z2wudW5pZm9ybTFpdih0aGlzLmFkZHIsIHVuaXRzKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlKHZbaV0gfHwgZW1wdHlDdWJlVGV4dHVyZSwgdW5pdHNbaV0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDJEQXJyYXlBcnJheShnbCwgdiwgdGV4dHVyZXMpIHtcblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHModGV4dHVyZXMsIG4pO1xuXHRnbC51bmlmb3JtMWl2KHRoaXMuYWRkciwgdW5pdHMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHtcblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkRBcnJheSh2W2ldIHx8IGVtcHR5VGV4dHVyZTJkQXJyYXksIHVuaXRzW2ldKTtcblx0fVxufSAvLyBIZWxwZXIgdG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciBhIHB1cmUgKGJvdHRvbS1sZXZlbCkgYXJyYXlcblxuXG5mdW5jdGlvbiBnZXRQdXJlQXJyYXlTZXR0ZXIodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIDB4MTQwNjpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYxZkFycmF5O1xuXHRcdC8vIEZMT0FUXG5cblx0XHRjYXNlIDB4OGI1MDpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYyZkFycmF5O1xuXHRcdC8vIF9WRUMyXG5cblx0XHRjYXNlIDB4OGI1MTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYzZkFycmF5O1xuXHRcdC8vIF9WRUMzXG5cblx0XHRjYXNlIDB4OGI1Mjpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVY0ZkFycmF5O1xuXHRcdC8vIF9WRUM0XG5cblx0XHRjYXNlIDB4OGI1YTpcblx0XHRcdHJldHVybiBzZXRWYWx1ZU0yQXJyYXk7XG5cdFx0Ly8gX01BVDJcblxuXHRcdGNhc2UgMHg4YjViOlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlTTNBcnJheTtcblx0XHQvLyBfTUFUM1xuXG5cdFx0Y2FzZSAweDhiNWM6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVNNEFycmF5O1xuXHRcdC8vIF9NQVQ0XG5cblx0XHRjYXNlIDB4MTQwNDpcblx0XHRjYXNlIDB4OGI1Njpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVYxaUFycmF5O1xuXHRcdC8vIElOVCwgQk9PTFxuXG5cdFx0Y2FzZSAweDhiNTM6XG5cdFx0Y2FzZSAweDhiNTc6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMmlBcnJheTtcblx0XHQvLyBfVkVDMlxuXG5cdFx0Y2FzZSAweDhiNTQ6XG5cdFx0Y2FzZSAweDhiNTg6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWM2lBcnJheTtcblx0XHQvLyBfVkVDM1xuXG5cdFx0Y2FzZSAweDhiNTU6XG5cdFx0Y2FzZSAweDhiNTk6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWNGlBcnJheTtcblx0XHQvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDE0MDU6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMXVpQXJyYXk7XG5cdFx0Ly8gVUlOVFxuXG5cdFx0Y2FzZSAweDhkYzY6XG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVWMnVpQXJyYXk7XG5cdFx0Ly8gX1ZFQzJcblxuXHRcdGNhc2UgMHg4ZGM3OlxuXHRcdFx0cmV0dXJuIHNldFZhbHVlVjN1aUFycmF5O1xuXHRcdC8vIF9WRUMzXG5cblx0XHRjYXNlIDB4OGRjODpcblx0XHRcdHJldHVybiBzZXRWYWx1ZVY0dWlBcnJheTtcblx0XHQvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDhiNWU6IC8vIFNBTVBMRVJfMkRcblxuXHRcdGNhc2UgMHg4ZDY2OiAvLyBTQU1QTEVSX0VYVEVSTkFMX09FU1xuXG5cdFx0Y2FzZSAweDhkY2E6IC8vIElOVF9TQU1QTEVSXzJEXG5cblx0XHRjYXNlIDB4OGRkMjogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfMkRcblxuXHRcdGNhc2UgMHg4YjYyOlxuXHRcdFx0Ly8gU0FNUExFUl8yRF9TSEFET1dcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQxQXJyYXk7XG5cblx0XHRjYXNlIDB4OGI1ZjogLy8gU0FNUExFUl8zRFxuXG5cdFx0Y2FzZSAweDhkY2I6IC8vIElOVF9TQU1QTEVSXzNEXG5cblx0XHRjYXNlIDB4OGRkMzpcblx0XHRcdC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUM0RBcnJheTtcblxuXHRcdGNhc2UgMHg4YjYwOiAvLyBTQU1QTEVSX0NVQkVcblxuXHRcdGNhc2UgMHg4ZGNjOiAvLyBJTlRfU0FNUExFUl9DVUJFXG5cblx0XHRjYXNlIDB4OGRkNDogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRVxuXG5cdFx0Y2FzZSAweDhkYzU6XG5cdFx0XHQvLyBTQU1QTEVSX0NVQkVfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUNkFycmF5O1xuXG5cdFx0Y2FzZSAweDhkYzE6IC8vIFNBTVBMRVJfMkRfQVJSQVlcblxuXHRcdGNhc2UgMHg4ZGNmOiAvLyBJTlRfU0FNUExFUl8yRF9BUlJBWVxuXG5cdFx0Y2FzZSAweDhkZDc6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZXG5cblx0XHRjYXNlIDB4OGRjNDpcblx0XHRcdC8vIFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMkRBcnJheUFycmF5O1xuXHR9XG59IC8vIC0tLSBVbmlmb3JtIENsYXNzZXMgLS0tXG5cblxuZnVuY3Rpb24gU2luZ2xlVW5pZm9ybShpZCwgYWN0aXZlSW5mbywgYWRkcikge1xuXHR0aGlzLmlkID0gaWQ7XG5cdHRoaXMuYWRkciA9IGFkZHI7XG5cdHRoaXMuY2FjaGUgPSBbXTtcblx0dGhpcy5zZXRWYWx1ZSA9IGdldFNpbmd1bGFyU2V0dGVyKGFjdGl2ZUluZm8udHlwZSk7IC8vIHRoaXMucGF0aCA9IGFjdGl2ZUluZm8ubmFtZTsgLy8gREVCVUdcbn1cblxuZnVuY3Rpb24gUHVyZUFycmF5VW5pZm9ybShpZCwgYWN0aXZlSW5mbywgYWRkcikge1xuXHR0aGlzLmlkID0gaWQ7XG5cdHRoaXMuYWRkciA9IGFkZHI7XG5cdHRoaXMuY2FjaGUgPSBbXTtcblx0dGhpcy5zaXplID0gYWN0aXZlSW5mby5zaXplO1xuXHR0aGlzLnNldFZhbHVlID0gZ2V0UHVyZUFycmF5U2V0dGVyKGFjdGl2ZUluZm8udHlwZSk7IC8vIHRoaXMucGF0aCA9IGFjdGl2ZUluZm8ubmFtZTsgLy8gREVCVUdcbn1cblxuUHVyZUFycmF5VW5pZm9ybS5wcm90b3R5cGUudXBkYXRlQ2FjaGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgJiYgY2FjaGUubGVuZ3RoICE9PSBkYXRhLmxlbmd0aCkge1xuXHRcdHRoaXMuY2FjaGUgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEubGVuZ3RoKTtcblx0fVxuXG5cdGNvcHlBcnJheShjYWNoZSwgZGF0YSk7XG59O1xuXG5mdW5jdGlvbiBTdHJ1Y3R1cmVkVW5pZm9ybShpZCkge1xuXHR0aGlzLmlkID0gaWQ7XG5cdHRoaXMuc2VxID0gW107XG5cdHRoaXMubWFwID0ge307XG59XG5cblN0cnVjdHVyZWRVbmlmb3JtLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChnbCwgdmFsdWUsIHRleHR1cmVzKSB7XG5cdGNvbnN0IHNlcSA9IHRoaXMuc2VxO1xuXG5cdGZvciAobGV0IGkgPSAwLCBuID0gc2VxLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0Y29uc3QgdSA9IHNlcVtpXTtcblx0XHR1LnNldFZhbHVlKGdsLCB2YWx1ZVt1LmlkXSwgdGV4dHVyZXMpO1xuXHR9XG59OyAvLyAtLS0gVG9wLWxldmVsIC0tLVxuLy8gUGFyc2VyIC0gYnVpbGRzIHVwIHRoZSBwcm9wZXJ0eSB0cmVlIGZyb20gdGhlIHBhdGggc3RyaW5nc1xuXG5cbmNvbnN0IFJlUGF0aFBhcnQgPSAvKFxcdyspKFxcXSk/KFxcW3xcXC4pPy9nOyAvLyBleHRyYWN0c1xuLy8gXHQtIHRoZSBpZGVudGlmaWVyIChtZW1iZXIgbmFtZSBvciBhcnJheSBpbmRleClcbi8vXHQtIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIHJpZ2h0IGJyYWNrZXQgKGZvdW5kIHdoZW4gYXJyYXkgaW5kZXgpXG4vL1x0LSBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBsZWZ0IGJyYWNrZXQgb3IgZG90ICh0eXBlIG9mIHN1YnNjcmlwdClcbi8vXG4vLyBOb3RlOiBUaGVzZSBwb3J0aW9ucyBjYW4gYmUgcmVhZCBpbiBhIG5vbi1vdmVybGFwcGluZyBmYXNoaW9uIGFuZFxuLy8gYWxsb3cgc3RyYWlnaHRmb3J3YXJkIHBhcnNpbmcgb2YgdGhlIGhpZXJhcmNoeSB0aGF0IFdlYkdMIGVuY29kZXNcbi8vIGluIHRoZSB1bmlmb3JtIG5hbWVzLlxuXG5mdW5jdGlvbiBhZGRVbmlmb3JtKGNvbnRhaW5lciwgdW5pZm9ybU9iamVjdCkge1xuXHRjb250YWluZXIuc2VxLnB1c2godW5pZm9ybU9iamVjdCk7XG5cdGNvbnRhaW5lci5tYXBbdW5pZm9ybU9iamVjdC5pZF0gPSB1bmlmb3JtT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaWZvcm0oYWN0aXZlSW5mbywgYWRkciwgY29udGFpbmVyKSB7XG5cdGNvbnN0IHBhdGggPSBhY3RpdmVJbmZvLm5hbWUsXG5cdFx0XHRcdHBhdGhMZW5ndGggPSBwYXRoLmxlbmd0aDsgLy8gcmVzZXQgUmVnRXhwIG9iamVjdCwgYmVjYXVzZSBvZiB0aGUgZWFybHkgZXhpdCBvZiBhIHByZXZpb3VzIHJ1blxuXG5cdFJlUGF0aFBhcnQubGFzdEluZGV4ID0gMDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IG1hdGNoID0gUmVQYXRoUGFydC5leGVjKHBhdGgpLFxuXHRcdFx0XHRcdG1hdGNoRW5kID0gUmVQYXRoUGFydC5sYXN0SW5kZXg7XG5cdFx0bGV0IGlkID0gbWF0Y2hbMV07XG5cdFx0Y29uc3QgaWRJc0luZGV4ID0gbWF0Y2hbMl0gPT09ICddJyxcblx0XHRcdFx0XHRzdWJzY3JpcHQgPSBtYXRjaFszXTtcblx0XHRpZiAoaWRJc0luZGV4KSBpZCA9IGlkIHwgMDsgLy8gY29udmVydCB0byBpbnRlZ2VyXG5cblx0XHRpZiAoc3Vic2NyaXB0ID09PSB1bmRlZmluZWQgfHwgc3Vic2NyaXB0ID09PSAnWycgJiYgbWF0Y2hFbmQgKyAyID09PSBwYXRoTGVuZ3RoKSB7XG5cdFx0XHQvLyBiYXJlIG5hbWUgb3IgXCJwdXJlXCIgYm90dG9tLWxldmVsIGFycmF5IFwiWzBdXCIgc3VmZml4XG5cdFx0XHRhZGRVbmlmb3JtKGNvbnRhaW5lciwgc3Vic2NyaXB0ID09PSB1bmRlZmluZWQgPyBuZXcgU2luZ2xlVW5pZm9ybShpZCwgYWN0aXZlSW5mbywgYWRkcikgOiBuZXcgUHVyZUFycmF5VW5pZm9ybShpZCwgYWN0aXZlSW5mbywgYWRkcikpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHN0ZXAgaW50byBpbm5lciBub2RlIC8gY3JlYXRlIGl0IGluIGNhc2UgaXQgZG9lc24ndCBleGlzdFxuXHRcdFx0Y29uc3QgbWFwID0gY29udGFpbmVyLm1hcDtcblx0XHRcdGxldCBuZXh0ID0gbWFwW2lkXTtcblxuXHRcdFx0aWYgKG5leHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRuZXh0ID0gbmV3IFN0cnVjdHVyZWRVbmlmb3JtKGlkKTtcblx0XHRcdFx0YWRkVW5pZm9ybShjb250YWluZXIsIG5leHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250YWluZXIgPSBuZXh0O1xuXHRcdH1cblx0fVxufSAvLyBSb290IENvbnRhaW5lclxuXG5cbmZ1bmN0aW9uIFdlYkdMVW5pZm9ybXMoZ2wsIHByb2dyYW0pIHtcblx0dGhpcy5zZXEgPSBbXTtcblx0dGhpcy5tYXAgPSB7fTtcblx0Y29uc3QgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuXHRcdGNvbnN0IGluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpLFxuXHRcdFx0XHRcdGFkZHIgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgaW5mby5uYW1lKTtcblx0XHRwYXJzZVVuaWZvcm0oaW5mbywgYWRkciwgdGhpcyk7XG5cdH1cbn1cblxuV2ViR0xVbmlmb3Jtcy5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAoZ2wsIG5hbWUsIHZhbHVlLCB0ZXh0dXJlcykge1xuXHRjb25zdCB1ID0gdGhpcy5tYXBbbmFtZV07XG5cdGlmICh1ICE9PSB1bmRlZmluZWQpIHUuc2V0VmFsdWUoZ2wsIHZhbHVlLCB0ZXh0dXJlcyk7XG59O1xuXG5XZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRPcHRpb25hbCA9IGZ1bmN0aW9uIChnbCwgb2JqZWN0LCBuYW1lKSB7XG5cdGNvbnN0IHYgPSBvYmplY3RbbmFtZV07XG5cdGlmICh2ICE9PSB1bmRlZmluZWQpIHRoaXMuc2V0VmFsdWUoZ2wsIG5hbWUsIHYpO1xufTsgLy8gU3RhdGljIGludGVyZmFjZVxuXG5cbldlYkdMVW5pZm9ybXMudXBsb2FkID0gZnVuY3Rpb24gKGdsLCBzZXEsIHZhbHVlcywgdGV4dHVyZXMpIHtcblx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzZXEubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRjb25zdCB1ID0gc2VxW2ldLFxuXHRcdFx0XHRcdHYgPSB2YWx1ZXNbdS5pZF07XG5cblx0XHRpZiAodi5uZWVkc1VwZGF0ZSAhPT0gZmFsc2UpIHtcblx0XHRcdC8vIG5vdGU6IGFsd2F5cyB1cGRhdGluZyB3aGVuIC5uZWVkc1VwZGF0ZSBpcyB1bmRlZmluZWRcblx0XHRcdHUuc2V0VmFsdWUoZ2wsIHYudmFsdWUsIHRleHR1cmVzKTtcblx0XHR9XG5cdH1cbn07XG5cbldlYkdMVW5pZm9ybXMuc2VxV2l0aFZhbHVlID0gZnVuY3Rpb24gKHNlcSwgdmFsdWVzKSB7XG5cdGNvbnN0IHIgPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMCwgbiA9IHNlcS5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdGNvbnN0IHUgPSBzZXFbaV07XG5cdFx0aWYgKHUuaWQgaW4gdmFsdWVzKSByLnB1c2godSk7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn07XG5cbmZ1bmN0aW9uIFdlYkdMU2hhZGVyKGdsLCB0eXBlLCBzdHJpbmcpIHtcblx0Y29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHR5cGUpO1xuXHRnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJpbmcpO1xuXHRnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cdHJldHVybiBzaGFkZXI7XG59XG5cbmxldCBwcm9ncmFtSWRDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGFkZExpbmVOdW1iZXJzKHN0cmluZykge1xuXHRjb25zdCBsaW5lcyA9IHN0cmluZy5zcGxpdCgnXFxuJyk7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdGxpbmVzW2ldID0gaSArIDEgKyAnOiAnICsgbGluZXNbaV07XG5cdH1cblxuXHRyZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdldEVuY29kaW5nQ29tcG9uZW50cyhlbmNvZGluZykge1xuXHRzd2l0Y2ggKGVuY29kaW5nKSB7XG5cdFx0Y2FzZSBMaW5lYXJFbmNvZGluZzpcblx0XHRcdHJldHVybiBbJ0xpbmVhcicsICcoIHZhbHVlICknXTtcblxuXHRcdGNhc2Ugc1JHQkVuY29kaW5nOlxuXHRcdFx0cmV0dXJuIFsnc1JHQicsICcoIHZhbHVlICknXTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6JywgZW5jb2RpbmcpO1xuXHRcdFx0cmV0dXJuIFsnTGluZWFyJywgJyggdmFsdWUgKSddO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNoYWRlckVycm9ycyhnbCwgc2hhZGVyLCB0eXBlKSB7XG5cdGNvbnN0IHN0YXR1cyA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTtcblx0Y29uc3QgZXJyb3JzID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLnRyaW0oKTtcblx0aWYgKHN0YXR1cyAmJiBlcnJvcnMgPT09ICcnKSByZXR1cm4gJyc7IC8vIC0tZW5hYmxlLXByaXZpbGVnZWQtd2ViZ2wtZXh0ZW5zaW9uXG5cdC8vIGNvbnNvbGUubG9nKCAnKionICsgdHlwZSArICcqKicsIGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2RlYnVnX3NoYWRlcnMnICkuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSggc2hhZGVyICkgKTtcblxuXHRyZXR1cm4gdHlwZS50b1VwcGVyQ2FzZSgpICsgJ1xcblxcbicgKyBlcnJvcnMgKyAnXFxuXFxuJyArIGFkZExpbmVOdW1iZXJzKGdsLmdldFNoYWRlclNvdXJjZShzaGFkZXIpKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGV4ZWxFbmNvZGluZ0Z1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgZW5jb2RpbmcpIHtcblx0Y29uc3QgY29tcG9uZW50cyA9IGdldEVuY29kaW5nQ29tcG9uZW50cyhlbmNvZGluZyk7XG5cdHJldHVybiAndmVjNCAnICsgZnVuY3Rpb25OYW1lICsgJyggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvJyArIGNvbXBvbmVudHNbMF0gKyBjb21wb25lbnRzWzFdICsgJzsgfSc7XG59XG5cbmZ1bmN0aW9uIGdldFRvbmVNYXBwaW5nRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCB0b25lTWFwcGluZykge1xuXHRsZXQgdG9uZU1hcHBpbmdOYW1lO1xuXG5cdHN3aXRjaCAodG9uZU1hcHBpbmcpIHtcblx0XHRjYXNlIExpbmVhclRvbmVNYXBwaW5nOlxuXHRcdFx0dG9uZU1hcHBpbmdOYW1lID0gJ0xpbmVhcic7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgUmVpbmhhcmRUb25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdSZWluaGFyZCc7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgQ2luZW9uVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnT3B0aW1pemVkQ2luZW9uJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBBQ0VTRmlsbWljVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnQUNFU0ZpbG1pYyc7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgQ3VzdG9tVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnQ3VzdG9tJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzonLCB0b25lTWFwcGluZyk7XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnTGluZWFyJztcblx0fVxuXG5cdHJldHVybiAndmVjMyAnICsgZnVuY3Rpb25OYW1lICsgJyggdmVjMyBjb2xvciApIHsgcmV0dXJuICcgKyB0b25lTWFwcGluZ05hbWUgKyAnVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0nO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUV4dGVuc2lvbnMocGFyYW1ldGVycykge1xuXHRjb25zdCBjaHVua3MgPSBbcGFyYW1ldGVycy5leHRlbnNpb25EZXJpdmF0aXZlcyB8fCBwYXJhbWV0ZXJzLmVudk1hcEN1YmVVViB8fCBwYXJhbWV0ZXJzLmJ1bXBNYXAgfHwgcGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXAgfHwgcGFyYW1ldGVycy5jbGVhcmNvYXROb3JtYWxNYXAgfHwgcGFyYW1ldGVycy5mbGF0U2hhZGluZyB8fCBwYXJhbWV0ZXJzLnNoYWRlcklEID09PSAncGh5c2ljYWwnID8gJyNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlJyA6ICcnLCAocGFyYW1ldGVycy5leHRlbnNpb25GcmFnRGVwdGggfHwgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoID8gJyNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUnIDogJycsIHBhcmFtZXRlcnMuZXh0ZW5zaW9uRHJhd0J1ZmZlcnMgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzID8gJyNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUnIDogJycsIChwYXJhbWV0ZXJzLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0QgfHwgcGFyYW1ldGVycy5lbnZNYXAgfHwgcGFyYW1ldGVycy50cmFuc21pc3Npb24pICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kID8gJyNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZScgOiAnJ107XG5cdHJldHVybiBjaHVua3MuZmlsdGVyKGZpbHRlckVtcHR5TGluZSkuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRGVmaW5lcyhkZWZpbmVzKSB7XG5cdGNvbnN0IGNodW5rcyA9IFtdO1xuXG5cdGZvciAoY29uc3QgbmFtZSBpbiBkZWZpbmVzKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkZWZpbmVzW25hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuXHRcdGNodW5rcy5wdXNoKCcjZGVmaW5lICcgKyBuYW1lICsgJyAnICsgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZmV0Y2hBdHRyaWJ1dGVMb2NhdGlvbnMoZ2wsIHByb2dyYW0pIHtcblx0Y29uc3QgYXR0cmlidXRlcyA9IHt9O1xuXHRjb25zdCBuID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRjb25zdCBpbmZvID0gZ2wuZ2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGkpO1xuXHRcdGNvbnN0IG5hbWUgPSBpbmZvLm5hbWU7XG5cdFx0bGV0IGxvY2F0aW9uU2l6ZSA9IDE7XG5cdFx0aWYgKGluZm8udHlwZSA9PT0gZ2wuRkxPQVRfTUFUMikgbG9jYXRpb25TaXplID0gMjtcblx0XHRpZiAoaW5mby50eXBlID09PSBnbC5GTE9BVF9NQVQzKSBsb2NhdGlvblNpemUgPSAzO1xuXHRcdGlmIChpbmZvLnR5cGUgPT09IGdsLkZMT0FUX01BVDQpIGxvY2F0aW9uU2l6ZSA9IDQ7IC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuV2ViR0xQcm9ncmFtOiBBQ1RJVkUgVkVSVEVYIEFUVFJJQlVURTonLCBuYW1lLCBpICk7XG5cblx0XHRhdHRyaWJ1dGVzW25hbWVdID0ge1xuXHRcdFx0dHlwZTogaW5mby50eXBlLFxuXHRcdFx0bG9jYXRpb246IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLFxuXHRcdFx0bG9jYXRpb25TaXplOiBsb2NhdGlvblNpemVcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckVtcHR5TGluZShzdHJpbmcpIHtcblx0cmV0dXJuIHN0cmluZyAhPT0gJyc7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VMaWdodE51bXMoc3RyaW5nLCBwYXJhbWV0ZXJzKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csIHBhcmFtZXRlcnMubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csIHBhcmFtZXRlcnMubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1Qb2ludExpZ2h0U2hhZG93cyk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGlwcGluZ1BsYW5lTnVtcyhzdHJpbmcsIHBhcmFtZXRlcnMpIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLCBwYXJhbWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVzIC0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9uKTtcbn0gLy8gUmVzb2x2ZSBJbmNsdWRlc1xuXG5cbmNvbnN0IGluY2x1ZGVQYXR0ZXJuID0gL15bIFxcdF0qI2luY2x1ZGUgKzwoW1xcd1xcZC4vXSspPi9nbTtcblxuZnVuY3Rpb24gcmVzb2x2ZUluY2x1ZGVzKHN0cmluZykge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoaW5jbHVkZVBhdHRlcm4sIGluY2x1ZGVSZXBsYWNlcik7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVSZXBsYWNlcihtYXRjaCwgaW5jbHVkZSkge1xuXHRjb25zdCBzdHJpbmcgPSBTaGFkZXJDaHVua1tpbmNsdWRlXTtcblxuXHRpZiAoc3RyaW5nID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8JyArIGluY2x1ZGUgKyAnPicpO1xuXHR9XG5cblx0cmV0dXJuIHJlc29sdmVJbmNsdWRlcyhzdHJpbmcpO1xufSAvLyBVbnJvbGwgTG9vcHNcblxuXG5jb25zdCBkZXByZWNhdGVkVW5yb2xsTG9vcFBhdHRlcm4gPSAvI3ByYWdtYSB1bnJvbGxfbG9vcFtcXHNdKz9mb3IgXFwoIGludCBpIFxcPSAoXFxkKylcXDsgaSA8IChcXGQrKVxcOyBpIFxcK1xcKyBcXCkgXFx7KFtcXHNcXFNdKz8pKD89XFx9KVxcfS9nO1xuY29uc3QgdW5yb2xsTG9vcFBhdHRlcm4gPSAvI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxccytmb3JcXHMqXFwoXFxzKmludFxccytpXFxzKj1cXHMqKFxcZCspXFxzKjtcXHMqaVxccyo8XFxzKihcXGQrKVxccyo7XFxzKmlcXHMqXFwrXFwrXFxzKlxcKVxccyp7KFtcXHNcXFNdKz8pfVxccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO1xuXG5mdW5jdGlvbiB1bnJvbGxMb29wcyhzdHJpbmcpIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKHVucm9sbExvb3BQYXR0ZXJuLCBsb29wUmVwbGFjZXIpLnJlcGxhY2UoZGVwcmVjYXRlZFVucm9sbExvb3BQYXR0ZXJuLCBkZXByZWNhdGVkTG9vcFJlcGxhY2VyKTtcbn1cblxuZnVuY3Rpb24gZGVwcmVjYXRlZExvb3BSZXBsYWNlcihtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xuXHRjb25zb2xlLndhcm4oJ1dlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4nKTtcblx0cmV0dXJuIGxvb3BSZXBsYWNlcihtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCk7XG59XG5cbmZ1bmN0aW9uIGxvb3BSZXBsYWNlcihtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xuXHRsZXQgc3RyaW5nID0gJyc7XG5cblx0Zm9yIChsZXQgaSA9IHBhcnNlSW50KHN0YXJ0KTsgaSA8IHBhcnNlSW50KGVuZCk7IGkrKykge1xuXHRcdHN0cmluZyArPSBzbmlwcGV0LnJlcGxhY2UoL1xcW1xccyppXFxzKlxcXS9nLCAnWyAnICsgaSArICcgXScpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZywgaSk7XG5cdH1cblxuXHRyZXR1cm4gc3RyaW5nO1xufSAvL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlUHJlY2lzaW9uKHBhcmFtZXRlcnMpIHtcblx0bGV0IHByZWNpc2lvbnN0cmluZyA9ICdwcmVjaXNpb24gJyArIHBhcmFtZXRlcnMucHJlY2lzaW9uICsgJyBmbG9hdDtcXG5wcmVjaXNpb24gJyArIHBhcmFtZXRlcnMucHJlY2lzaW9uICsgJyBpbnQ7JztcblxuXHRpZiAocGFyYW1ldGVycy5wcmVjaXNpb24gPT09ICdoaWdocCcpIHtcblx0XHRwcmVjaXNpb25zdHJpbmcgKz0gJ1xcbiNkZWZpbmUgSElHSF9QUkVDSVNJT04nO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMucHJlY2lzaW9uID09PSAnbWVkaXVtcCcpIHtcblx0XHRwcmVjaXNpb25zdHJpbmcgKz0gJ1xcbiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTic7XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVycy5wcmVjaXNpb24gPT09ICdsb3dwJykge1xuXHRcdHByZWNpc2lvbnN0cmluZyArPSAnXFxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OJztcblx0fVxuXG5cdHJldHVybiBwcmVjaXNpb25zdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2hhZG93TWFwVHlwZURlZmluZShwYXJhbWV0ZXJzKSB7XG5cdGxldCBzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX0JBU0lDJztcblxuXHRpZiAocGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBQQ0ZTaGFkb3dNYXApIHtcblx0XHRzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX1BDRic7XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBQQ0ZTb2Z0U2hhZG93TWFwKSB7XG5cdFx0c2hhZG93TWFwVHlwZURlZmluZSA9ICdTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCc7XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlID09PSBWU01TaGFkb3dNYXApIHtcblx0XHRzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX1ZTTSc7XG5cdH1cblxuXHRyZXR1cm4gc2hhZG93TWFwVHlwZURlZmluZTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFbnZNYXBUeXBlRGVmaW5lKHBhcmFtZXRlcnMpIHtcblx0bGV0IGVudk1hcFR5cGVEZWZpbmUgPSAnRU5WTUFQX1RZUEVfQ1VCRSc7XG5cblx0aWYgKHBhcmFtZXRlcnMuZW52TWFwKSB7XG5cdFx0c3dpdGNoIChwYXJhbWV0ZXJzLmVudk1hcE1vZGUpIHtcblx0XHRcdGNhc2UgQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOlxuXHRcdFx0Y2FzZSBDdWJlUmVmcmFjdGlvbk1hcHBpbmc6XG5cdFx0XHRcdGVudk1hcFR5cGVEZWZpbmUgPSAnRU5WTUFQX1RZUEVfQ1VCRSc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOlxuXHRcdFx0Y2FzZSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpcblx0XHRcdFx0ZW52TWFwVHlwZURlZmluZSA9ICdFTlZNQVBfVFlQRV9DVUJFX1VWJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVudk1hcFR5cGVEZWZpbmU7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW52TWFwTW9kZURlZmluZShwYXJhbWV0ZXJzKSB7XG5cdGxldCBlbnZNYXBNb2RlRGVmaW5lID0gJ0VOVk1BUF9NT0RFX1JFRkxFQ1RJT04nO1xuXG5cdGlmIChwYXJhbWV0ZXJzLmVudk1hcCkge1xuXHRcdHN3aXRjaCAocGFyYW1ldGVycy5lbnZNYXBNb2RlKSB7XG5cdFx0XHRjYXNlIEN1YmVSZWZyYWN0aW9uTWFwcGluZzpcblx0XHRcdGNhc2UgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6XG5cdFx0XHRcdGVudk1hcE1vZGVEZWZpbmUgPSAnRU5WTUFQX01PREVfUkVGUkFDVElPTic7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnZNYXBNb2RlRGVmaW5lO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVudk1hcEJsZW5kaW5nRGVmaW5lKHBhcmFtZXRlcnMpIHtcblx0bGV0IGVudk1hcEJsZW5kaW5nRGVmaW5lID0gJ0VOVk1BUF9CTEVORElOR19OT05FJztcblxuXHRpZiAocGFyYW1ldGVycy5lbnZNYXApIHtcblx0XHRzd2l0Y2ggKHBhcmFtZXRlcnMuY29tYmluZSkge1xuXHRcdFx0Y2FzZSBNdWx0aXBseU9wZXJhdGlvbjpcblx0XHRcdFx0ZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTWl4T3BlcmF0aW9uOlxuXHRcdFx0XHRlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfTUlYJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWRkT3BlcmF0aW9uOlxuXHRcdFx0XHRlbnZNYXBCbGVuZGluZ0RlZmluZSA9ICdFTlZNQVBfQkxFTkRJTkdfQUREJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVudk1hcEJsZW5kaW5nRGVmaW5lO1xufVxuXG5mdW5jdGlvbiBXZWJHTFByb2dyYW0ocmVuZGVyZXIsIGNhY2hlS2V5LCBwYXJhbWV0ZXJzLCBiaW5kaW5nU3RhdGVzKSB7XG5cdC8vIFRPRE8gU2VuZCB0aGlzIGV2ZW50IHRvIFRocmVlLmpzIERldlRvb2xzXG5cdC8vIGNvbnNvbGUubG9nKCAnV2ViR0xQcm9ncmFtJywgY2FjaGVLZXkgKTtcblx0Y29uc3QgZ2wgPSByZW5kZXJlci5nZXRDb250ZXh0KCk7XG5cdGNvbnN0IGRlZmluZXMgPSBwYXJhbWV0ZXJzLmRlZmluZXM7XG5cdGxldCB2ZXJ0ZXhTaGFkZXIgPSBwYXJhbWV0ZXJzLnZlcnRleFNoYWRlcjtcblx0bGV0IGZyYWdtZW50U2hhZGVyID0gcGFyYW1ldGVycy5mcmFnbWVudFNoYWRlcjtcblx0Y29uc3Qgc2hhZG93TWFwVHlwZURlZmluZSA9IGdlbmVyYXRlU2hhZG93TWFwVHlwZURlZmluZShwYXJhbWV0ZXJzKTtcblx0Y29uc3QgZW52TWFwVHlwZURlZmluZSA9IGdlbmVyYXRlRW52TWFwVHlwZURlZmluZShwYXJhbWV0ZXJzKTtcblx0Y29uc3QgZW52TWFwTW9kZURlZmluZSA9IGdlbmVyYXRlRW52TWFwTW9kZURlZmluZShwYXJhbWV0ZXJzKTtcblx0Y29uc3QgZW52TWFwQmxlbmRpbmdEZWZpbmUgPSBnZW5lcmF0ZUVudk1hcEJsZW5kaW5nRGVmaW5lKHBhcmFtZXRlcnMpO1xuXHRjb25zdCBjdXN0b21FeHRlbnNpb25zID0gcGFyYW1ldGVycy5pc1dlYkdMMiA/ICcnIDogZ2VuZXJhdGVFeHRlbnNpb25zKHBhcmFtZXRlcnMpO1xuXHRjb25zdCBjdXN0b21EZWZpbmVzID0gZ2VuZXJhdGVEZWZpbmVzKGRlZmluZXMpO1xuXHRjb25zdCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXHRsZXQgcHJlZml4VmVydGV4LCBwcmVmaXhGcmFnbWVudDtcblx0bGV0IHZlcnNpb25TdHJpbmcgPSBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID8gJyN2ZXJzaW9uICcgKyBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uICsgJ1xcbicgOiAnJztcblxuXHRpZiAocGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsKSB7XG5cdFx0cHJlZml4VmVydGV4ID0gW2N1c3RvbURlZmluZXNdLmZpbHRlcihmaWx0ZXJFbXB0eUxpbmUpLmpvaW4oJ1xcbicpO1xuXG5cdFx0aWYgKHByZWZpeFZlcnRleC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcmVmaXhWZXJ0ZXggKz0gJ1xcbic7XG5cdFx0fVxuXG5cdFx0cHJlZml4RnJhZ21lbnQgPSBbY3VzdG9tRXh0ZW5zaW9ucywgY3VzdG9tRGVmaW5lc10uZmlsdGVyKGZpbHRlckVtcHR5TGluZSkuam9pbignXFxuJyk7XG5cblx0XHRpZiAocHJlZml4RnJhZ21lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJlZml4RnJhZ21lbnQgKz0gJ1xcbic7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHByZWZpeFZlcnRleCA9IFtnZW5lcmF0ZVByZWNpc2lvbihwYXJhbWV0ZXJzKSwgJyNkZWZpbmUgU0hBREVSX05BTUUgJyArIHBhcmFtZXRlcnMuc2hhZGVyTmFtZSwgY3VzdG9tRGVmaW5lcywgcGFyYW1ldGVycy5pbnN0YW5jaW5nID8gJyNkZWZpbmUgVVNFX0lOU1RBTkNJTkcnIDogJycsIHBhcmFtZXRlcnMuaW5zdGFuY2luZ0NvbG9yID8gJyNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1InIDogJycsIHBhcmFtZXRlcnMuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyA/ICcjZGVmaW5lIFZFUlRFWF9URVhUVVJFUycgOiAnJywgJyNkZWZpbmUgTUFYX0JPTkVTICcgKyBwYXJhbWV0ZXJzLm1heEJvbmVzLCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZyA/ICcjZGVmaW5lIFVTRV9GT0cnIDogJycsIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nRXhwMiA/ICcjZGVmaW5lIEZPR19FWFAyJyA6ICcnLCBwYXJhbWV0ZXJzLm1hcCA/ICcjZGVmaW5lIFVTRV9NQVAnIDogJycsIHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgVVNFX0VOVk1BUCcgOiAnJywgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSAnICsgZW52TWFwTW9kZURlZmluZSA6ICcnLCBwYXJhbWV0ZXJzLmxpZ2h0TWFwID8gJyNkZWZpbmUgVVNFX0xJR0hUTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmFvTWFwID8gJyNkZWZpbmUgVVNFX0FPTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwID8gJyNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmJ1bXBNYXAgPyAnI2RlZmluZSBVU0VfQlVNUE1BUCcgOiAnJywgcGFyYW1ldGVycy5ub3JtYWxNYXAgPyAnI2RlZmluZSBVU0VfTk9STUFMTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCAmJiBwYXJhbWV0ZXJzLm9iamVjdFNwYWNlTm9ybWFsTWFwID8gJyNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCAmJiBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCA/ICcjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXROb3JtYWxNYXAgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5kaXNwbGFjZW1lbnRNYXAgJiYgcGFyYW1ldGVycy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzID8gJyNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCcgOiAnJywgcGFyYW1ldGVycy5zcGVjdWxhckNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAnIDogJycsIHBhcmFtZXRlcnMucm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5tZXRhbG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLmFscGhhTWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04nIDogJycsIHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uTWFwID8gJyNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCcgOiAnJywgcGFyYW1ldGVycy50aGlja25lc3NNYXAgPyAnI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNoZWVuQ29sb3JNYXAgPyAnI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCcgOiAnJywgcGFyYW1ldGVycy5zaGVlblJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5lIFVTRV9UQU5HRU5UJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleENvbG9ycyA/ICcjZGVmaW5lIFVTRV9DT0xPUicgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhBbHBoYXMgPyAnI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEnIDogJycsIHBhcmFtZXRlcnMudmVydGV4VXZzID8gJyNkZWZpbmUgVVNFX1VWJyA6ICcnLCBwYXJhbWV0ZXJzLnV2c1ZlcnRleE9ubHkgPyAnI2RlZmluZSBVVlNfVkVSVEVYX09OTFknIDogJycsIHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgPyAnI2RlZmluZSBGTEFUX1NIQURFRCcgOiAnJywgcGFyYW1ldGVycy5za2lubmluZyA/ICcjZGVmaW5lIFVTRV9TS0lOTklORycgOiAnJywgcGFyYW1ldGVycy51c2VWZXJ0ZXhUZXh0dXJlID8gJyNkZWZpbmUgQk9ORV9URVhUVVJFJyA6ICcnLCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyA/ICcjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMnIDogJycsIHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzICYmIHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgPT09IGZhbHNlID8gJyNkZWZpbmUgVVNFX01PUlBITk9STUFMUycgOiAnJywgcGFyYW1ldGVycy5tb3JwaFRhcmdldHMgJiYgcGFyYW1ldGVycy5pc1dlYkdMMiA/ICcjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFJyA6ICcnLCBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0cyAmJiBwYXJhbWV0ZXJzLmlzV2ViR0wyID8gJyNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICcgKyBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0c0NvdW50IDogJycsIHBhcmFtZXRlcnMuZG91YmxlU2lkZWQgPyAnI2RlZmluZSBET1VCTEVfU0lERUQnIDogJycsIHBhcmFtZXRlcnMuZmxpcFNpZGVkID8gJyNkZWZpbmUgRkxJUF9TSURFRCcgOiAnJywgcGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkID8gJyNkZWZpbmUgVVNFX1NIQURPV01BUCcgOiAnJywgcGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkID8gJyNkZWZpbmUgJyArIHNoYWRvd01hcFR5cGVEZWZpbmUgOiAnJywgcGFyYW1ldGVycy5zaXplQXR0ZW51YXRpb24gPyAnI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OJyA6ICcnLCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUYnIDogJycsIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCcgOiAnJywgJ3VuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsnLCAndW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsnLCAndW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7JywgJ3VuaWZvcm0gbWF0NCB2aWV3TWF0cml4OycsICd1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OycsICd1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247JywgJ3VuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsnLCAnI2lmZGVmIFVTRV9JTlNUQU5DSU5HJywgJ1x0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7JywgJyNlbmRpZicsICcjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1InLCAnXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOycsICcjZW5kaWYnLCAnYXR0cmlidXRlIHZlYzMgcG9zaXRpb247JywgJ2F0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsnLCAnYXR0cmlidXRlIHZlYzIgdXY7JywgJyNpZmRlZiBVU0VfVEFOR0VOVCcsICdcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7JywgJyNlbmRpZicsICcjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICknLCAnXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsnLCAnI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICknLCAnXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsnLCAnI2VuZGlmJywgJyNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKScsICdcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsnLCAnXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7JywgJ1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOycsICdcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsnLCAnXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUycsICdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOycsICdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOycsICdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOycsICdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOycsICdcdCNlbHNlJywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7JywgJ1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7JywgJ1x0I2VuZGlmJywgJyNlbmRpZicsICcjaWZkZWYgVVNFX1NLSU5OSU5HJywgJ1x0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OycsICdcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7JywgJyNlbmRpZicsICdcXG4nXS5maWx0ZXIoZmlsdGVyRW1wdHlMaW5lKS5qb2luKCdcXG4nKTtcblx0XHRwcmVmaXhGcmFnbWVudCA9IFtjdXN0b21FeHRlbnNpb25zLCBnZW5lcmF0ZVByZWNpc2lvbihwYXJhbWV0ZXJzKSwgJyNkZWZpbmUgU0hBREVSX05BTUUgJyArIHBhcmFtZXRlcnMuc2hhZGVyTmFtZSwgY3VzdG9tRGVmaW5lcywgcGFyYW1ldGVycy51c2VGb2cgJiYgcGFyYW1ldGVycy5mb2cgPyAnI2RlZmluZSBVU0VfRk9HJyA6ICcnLCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZ0V4cDIgPyAnI2RlZmluZSBGT0dfRVhQMicgOiAnJywgcGFyYW1ldGVycy5tYXAgPyAnI2RlZmluZSBVU0VfTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm1hdGNhcCA/ICcjZGVmaW5lIFVTRV9NQVRDQVAnIDogJycsIHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgVVNFX0VOVk1BUCcgOiAnJywgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSAnICsgZW52TWFwVHlwZURlZmluZSA6ICcnLCBwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBNb2RlRGVmaW5lIDogJycsIHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUgJyArIGVudk1hcEJsZW5kaW5nRGVmaW5lIDogJycsIHBhcmFtZXRlcnMubGlnaHRNYXAgPyAnI2RlZmluZSBVU0VfTElHSFRNQVAnIDogJycsIHBhcmFtZXRlcnMuYW9NYXAgPyAnI2RlZmluZSBVU0VfQU9NQVAnIDogJycsIHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAnIDogJycsIHBhcmFtZXRlcnMuYnVtcE1hcCA/ICcjZGVmaW5lIFVTRV9CVU1QTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLm5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMub2JqZWN0U3BhY2VOb3JtYWxNYXAgPyAnI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMudGFuZ2VudFNwYWNlTm9ybWFsTWFwID8gJyNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCcgOiAnJywgcGFyYW1ldGVycy5jbGVhcmNvYXQgPyAnI2RlZmluZSBVU0VfQ0xFQVJDT0FUJyA6ICcnLCBwYXJhbWV0ZXJzLmNsZWFyY29hdE1hcCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAnIDogJycsIHBhcmFtZXRlcnMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAnIDogJycsIHBhcmFtZXRlcnMuY2xlYXJjb2F0Tm9ybWFsTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAnIDogJycsIHBhcmFtZXRlcnMuc3BlY3VsYXJNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAnIDogJycsIHBhcmFtZXRlcnMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAnIDogJycsIHBhcmFtZXRlcnMuc3BlY3VsYXJDb2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAnIDogJycsIHBhcmFtZXRlcnMubWV0YWxuZXNzTWFwID8gJyNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5hbHBoYU1hcCA/ICcjZGVmaW5lIFVTRV9BTFBIQU1BUCcgOiAnJywgcGFyYW1ldGVycy5hbHBoYVRlc3QgPyAnI2RlZmluZSBVU0VfQUxQSEFURVNUJyA6ICcnLCBwYXJhbWV0ZXJzLnNoZWVuID8gJyNkZWZpbmUgVVNFX1NIRUVOJyA6ICcnLCBwYXJhbWV0ZXJzLnNoZWVuQ29sb3JNYXAgPyAnI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCcgOiAnJywgcGFyYW1ldGVycy5zaGVlblJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy50cmFuc21pc3Npb24gPyAnI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OJyA6ICcnLCBwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbk1hcCA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAnIDogJycsIHBhcmFtZXRlcnMudGhpY2tuZXNzTWFwID8gJyNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCcgOiAnJywgcGFyYW1ldGVycy5kZWNvZGVWaWRlb1RleHR1cmUgPyAnI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRScgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5lIFVTRV9UQU5HRU5UJyA6ICcnLCBwYXJhbWV0ZXJzLnZlcnRleENvbG9ycyB8fCBwYXJhbWV0ZXJzLmluc3RhbmNpbmdDb2xvciA/ICcjZGVmaW5lIFVTRV9DT0xPUicgOiAnJywgcGFyYW1ldGVycy52ZXJ0ZXhBbHBoYXMgPyAnI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEnIDogJycsIHBhcmFtZXRlcnMudmVydGV4VXZzID8gJyNkZWZpbmUgVVNFX1VWJyA6ICcnLCBwYXJhbWV0ZXJzLnV2c1ZlcnRleE9ubHkgPyAnI2RlZmluZSBVVlNfVkVSVEVYX09OTFknIDogJycsIHBhcmFtZXRlcnMuZ3JhZGllbnRNYXAgPyAnI2RlZmluZSBVU0VfR1JBRElFTlRNQVAnIDogJycsIHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgPyAnI2RlZmluZSBGTEFUX1NIQURFRCcgOiAnJywgcGFyYW1ldGVycy5kb3VibGVTaWRlZCA/ICcjZGVmaW5lIERPVUJMRV9TSURFRCcgOiAnJywgcGFyYW1ldGVycy5mbGlwU2lkZWQgPyAnI2RlZmluZSBGTElQX1NJREVEJyA6ICcnLCBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSBVU0VfU0hBRE9XTUFQJyA6ICcnLCBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSAnICsgc2hhZG93TWFwVHlwZURlZmluZSA6ICcnLCBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSA/ICcjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEnIDogJycsIHBhcmFtZXRlcnMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPyAnI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTJyA6ICcnLCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUYnIDogJycsIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCcgOiAnJywgKHBhcmFtZXRlcnMuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRCB8fCBwYXJhbWV0ZXJzLmVudk1hcCkgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2QgPyAnI2RlZmluZSBURVhUVVJFX0xPRF9FWFQnIDogJycsICd1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsnLCAndW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOycsICd1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7JywgcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyA/ICcjZGVmaW5lIFRPTkVfTUFQUElORycgOiAnJywgcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyA/IFNoYWRlckNodW5rWyd0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50J10gOiAnJywgLy8gdGhpcyBjb2RlIGlzIHJlcXVpcmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB0b25lTWFwcGluZygpIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3dcblx0XHRwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVNYXBwaW5nID8gZ2V0VG9uZU1hcHBpbmdGdW5jdGlvbigndG9uZU1hcHBpbmcnLCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nKSA6ICcnLCBwYXJhbWV0ZXJzLmRpdGhlcmluZyA/ICcjZGVmaW5lIERJVEhFUklORycgOiAnJywgcGFyYW1ldGVycy5hbHBoYVdyaXRlID8gJycgOiAnI2RlZmluZSBPUEFRVUUnLCBTaGFkZXJDaHVua1snZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQnXSwgLy8gdGhpcyBjb2RlIGlzIHJlcXVpcmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzIGVuY29kaW5nL2RlY29kaW5nIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3dcblx0XHRnZXRUZXhlbEVuY29kaW5nRnVuY3Rpb24oJ2xpbmVhclRvT3V0cHV0VGV4ZWwnLCBwYXJhbWV0ZXJzLm91dHB1dEVuY29kaW5nKSwgcGFyYW1ldGVycy5kZXB0aFBhY2tpbmcgPyAnI2RlZmluZSBERVBUSF9QQUNLSU5HICcgKyBwYXJhbWV0ZXJzLmRlcHRoUGFja2luZyA6ICcnLCAnXFxuJ10uZmlsdGVyKGZpbHRlckVtcHR5TGluZSkuam9pbignXFxuJyk7XG5cdH1cblxuXHR2ZXJ0ZXhTaGFkZXIgPSByZXNvbHZlSW5jbHVkZXModmVydGV4U2hhZGVyKTtcblx0dmVydGV4U2hhZGVyID0gcmVwbGFjZUxpZ2h0TnVtcyh2ZXJ0ZXhTaGFkZXIsIHBhcmFtZXRlcnMpO1xuXHR2ZXJ0ZXhTaGFkZXIgPSByZXBsYWNlQ2xpcHBpbmdQbGFuZU51bXModmVydGV4U2hhZGVyLCBwYXJhbWV0ZXJzKTtcblx0ZnJhZ21lbnRTaGFkZXIgPSByZXNvbHZlSW5jbHVkZXMoZnJhZ21lbnRTaGFkZXIpO1xuXHRmcmFnbWVudFNoYWRlciA9IHJlcGxhY2VMaWdodE51bXMoZnJhZ21lbnRTaGFkZXIsIHBhcmFtZXRlcnMpO1xuXHRmcmFnbWVudFNoYWRlciA9IHJlcGxhY2VDbGlwcGluZ1BsYW5lTnVtcyhmcmFnbWVudFNoYWRlciwgcGFyYW1ldGVycyk7XG5cdHZlcnRleFNoYWRlciA9IHVucm9sbExvb3BzKHZlcnRleFNoYWRlcik7XG5cdGZyYWdtZW50U2hhZGVyID0gdW5yb2xsTG9vcHMoZnJhZ21lbnRTaGFkZXIpO1xuXG5cdGlmIChwYXJhbWV0ZXJzLmlzV2ViR0wyICYmIHBhcmFtZXRlcnMuaXNSYXdTaGFkZXJNYXRlcmlhbCAhPT0gdHJ1ZSkge1xuXHRcdC8vIEdMU0wgMy4wIGNvbnZlcnNpb24gZm9yIGJ1aWx0LWluIG1hdGVyaWFscyBhbmQgU2hhZGVyTWF0ZXJpYWxcblx0XHR2ZXJzaW9uU3RyaW5nID0gJyN2ZXJzaW9uIDMwMCBlc1xcbic7XG5cdFx0cHJlZml4VmVydGV4ID0gWydwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsnLCAnI2RlZmluZSBhdHRyaWJ1dGUgaW4nLCAnI2RlZmluZSB2YXJ5aW5nIG91dCcsICcjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlJ10uam9pbignXFxuJykgKyAnXFxuJyArIHByZWZpeFZlcnRleDtcblx0XHRwcmVmaXhGcmFnbWVudCA9IFsnI2RlZmluZSB2YXJ5aW5nIGluJywgcGFyYW1ldGVycy5nbHNsVmVyc2lvbiA9PT0gR0xTTDMgPyAnJyA6ICdsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7JywgcGFyYW1ldGVycy5nbHNsVmVyc2lvbiA9PT0gR0xTTDMgPyAnJyA6ICcjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3InLCAnI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoJywgJyNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUnLCAnI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlJywgJyNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaicsICcjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kJywgJyNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCcsICcjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QnLCAnI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkJywgJyNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkJywgJyNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkJ10uam9pbignXFxuJykgKyAnXFxuJyArIHByZWZpeEZyYWdtZW50O1xuXHR9XG5cblx0Y29uc3QgdmVydGV4R2xzbCA9IHZlcnNpb25TdHJpbmcgKyBwcmVmaXhWZXJ0ZXggKyB2ZXJ0ZXhTaGFkZXI7XG5cdGNvbnN0IGZyYWdtZW50R2xzbCA9IHZlcnNpb25TdHJpbmcgKyBwcmVmaXhGcmFnbWVudCArIGZyYWdtZW50U2hhZGVyOyAvLyBjb25zb2xlLmxvZyggJypWRVJURVgqJywgdmVydGV4R2xzbCApO1xuXHQvLyBjb25zb2xlLmxvZyggJypGUkFHTUVOVConLCBmcmFnbWVudEdsc2wgKTtcblxuXHRjb25zdCBnbFZlcnRleFNoYWRlciA9IFdlYkdMU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhHbHNsKTtcblx0Y29uc3QgZ2xGcmFnbWVudFNoYWRlciA9IFdlYkdMU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50R2xzbCk7XG5cdGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRleFNoYWRlcik7XG5cdGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdtZW50U2hhZGVyKTsgLy8gRm9yY2UgYSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZSB0byBpbmRleCAwLlxuXG5cdGlmIChwYXJhbWV0ZXJzLmluZGV4MEF0dHJpYnV0ZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBwYXJhbWV0ZXJzLmluZGV4MEF0dHJpYnV0ZU5hbWUpO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzID09PSB0cnVlKSB7XG5cdFx0Ly8gcHJvZ3JhbXMgd2l0aCBtb3JwaFRhcmdldHMgZGlzcGxhY2UgcG9zaXRpb24gb3V0IG9mIGF0dHJpYnV0ZSAwXG5cdFx0Z2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICdwb3NpdGlvbicpO1xuXHR9XG5cblx0Z2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7IC8vIGNoZWNrIGZvciBsaW5rIGVycm9yc1xuXG5cdGlmIChyZW5kZXJlci5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycykge1xuXHRcdGNvbnN0IHByb2dyYW1Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKS50cmltKCk7XG5cdFx0Y29uc3QgdmVydGV4TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhnbFZlcnRleFNoYWRlcikudHJpbSgpO1xuXHRcdGNvbnN0IGZyYWdtZW50TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhnbEZyYWdtZW50U2hhZGVyKS50cmltKCk7XG5cdFx0bGV0IHJ1bm5hYmxlID0gdHJ1ZTtcblx0XHRsZXQgaGF2ZURpYWdub3N0aWNzID0gdHJ1ZTtcblxuXHRcdGlmIChnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJ1bm5hYmxlID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2ZXJ0ZXhFcnJvcnMgPSBnZXRTaGFkZXJFcnJvcnMoZ2wsIGdsVmVydGV4U2hhZGVyLCAndmVydGV4Jyk7XG5cdFx0XHRjb25zdCBmcmFnbWVudEVycm9ycyA9IGdldFNoYWRlckVycm9ycyhnbCwgZ2xGcmFnbWVudFNoYWRlciwgJ2ZyYWdtZW50Jyk7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAnICsgZ2wuZ2V0RXJyb3IoKSArICcgLSAnICsgJ1ZBTElEQVRFX1NUQVRVUyAnICsgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpICsgJ1xcblxcbicgKyAnUHJvZ3JhbSBJbmZvIExvZzogJyArIHByb2dyYW1Mb2cgKyAnXFxuJyArIHZlcnRleEVycm9ycyArICdcXG4nICsgZnJhZ21lbnRFcnJvcnMpO1xuXHRcdH0gZWxzZSBpZiAocHJvZ3JhbUxvZyAhPT0gJycpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOicsIHByb2dyYW1Mb2cpO1xuXHRcdH0gZWxzZSBpZiAodmVydGV4TG9nID09PSAnJyB8fCBmcmFnbWVudExvZyA9PT0gJycpIHtcblx0XHRcdGhhdmVEaWFnbm9zdGljcyA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChoYXZlRGlhZ25vc3RpY3MpIHtcblx0XHRcdHRoaXMuZGlhZ25vc3RpY3MgPSB7XG5cdFx0XHRcdHJ1bm5hYmxlOiBydW5uYWJsZSxcblx0XHRcdFx0cHJvZ3JhbUxvZzogcHJvZ3JhbUxvZyxcblx0XHRcdFx0dmVydGV4U2hhZGVyOiB7XG5cdFx0XHRcdFx0bG9nOiB2ZXJ0ZXhMb2csXG5cdFx0XHRcdFx0cHJlZml4OiBwcmVmaXhWZXJ0ZXhcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IHtcblx0XHRcdFx0XHRsb2c6IGZyYWdtZW50TG9nLFxuXHRcdFx0XHRcdHByZWZpeDogcHJlZml4RnJhZ21lbnRcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gLy8gQ2xlYW4gdXBcblx0Ly8gQ3Jhc2hlcyBpbiBpT1M5IGFuZCBpT1MxMC4gIzE4NDAyXG5cdC8vIGdsLmRldGFjaFNoYWRlciggcHJvZ3JhbSwgZ2xWZXJ0ZXhTaGFkZXIgKTtcblx0Ly8gZ2wuZGV0YWNoU2hhZGVyKCBwcm9ncmFtLCBnbEZyYWdtZW50U2hhZGVyICk7XG5cblxuXHRnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0ZXhTaGFkZXIpO1xuXHRnbC5kZWxldGVTaGFkZXIoZ2xGcmFnbWVudFNoYWRlcik7IC8vIHNldCB1cCBjYWNoaW5nIGZvciB1bmlmb3JtIGxvY2F0aW9uc1xuXG5cdGxldCBjYWNoZWRVbmlmb3JtcztcblxuXHR0aGlzLmdldFVuaWZvcm1zID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmIChjYWNoZWRVbmlmb3JtcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjYWNoZWRVbmlmb3JtcyA9IG5ldyBXZWJHTFVuaWZvcm1zKGdsLCBwcm9ncmFtKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGVkVW5pZm9ybXM7XG5cdH07IC8vIHNldCB1cCBjYWNoaW5nIGZvciBhdHRyaWJ1dGUgbG9jYXRpb25zXG5cblxuXHRsZXQgY2FjaGVkQXR0cmlidXRlcztcblxuXHR0aGlzLmdldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGNhY2hlZEF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2FjaGVkQXR0cmlidXRlcyA9IGZldGNoQXR0cmlidXRlTG9jYXRpb25zKGdsLCBwcm9ncmFtKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGVkQXR0cmlidXRlcztcblx0fTsgLy8gZnJlZSByZXNvdXJjZVxuXG5cblx0dGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuXHRcdGJpbmRpbmdTdGF0ZXMucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKTtcblx0XHRnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuXHRcdHRoaXMucHJvZ3JhbSA9IHVuZGVmaW5lZDtcblx0fTsgLy9cblxuXG5cdHRoaXMubmFtZSA9IHBhcmFtZXRlcnMuc2hhZGVyTmFtZTtcblx0dGhpcy5pZCA9IHByb2dyYW1JZENvdW50Kys7XG5cdHRoaXMuY2FjaGVLZXkgPSBjYWNoZUtleTtcblx0dGhpcy51c2VkVGltZXMgPSAxO1xuXHR0aGlzLnByb2dyYW0gPSBwcm9ncmFtO1xuXHR0aGlzLnZlcnRleFNoYWRlciA9IGdsVmVydGV4U2hhZGVyO1xuXHR0aGlzLmZyYWdtZW50U2hhZGVyID0gZ2xGcmFnbWVudFNoYWRlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmxldCBfaWQgPSAwO1xuXG5jbGFzcyBXZWJHTFNoYWRlckNhY2hlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zaGFkZXJDYWNoZSA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLm1hdGVyaWFsQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHR1cGRhdGUobWF0ZXJpYWwpIHtcblx0XHRjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBtYXRlcmlhbC52ZXJ0ZXhTaGFkZXI7XG5cdFx0Y29uc3QgZnJhZ21lbnRTaGFkZXIgPSBtYXRlcmlhbC5mcmFnbWVudFNoYWRlcjtcblxuXHRcdGNvbnN0IHZlcnRleFNoYWRlclN0YWdlID0gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodmVydGV4U2hhZGVyKTtcblxuXHRcdGNvbnN0IGZyYWdtZW50U2hhZGVyU3RhZ2UgPSB0aGlzLl9nZXRTaGFkZXJTdGFnZShmcmFnbWVudFNoYWRlcik7XG5cblx0XHRjb25zdCBtYXRlcmlhbFNoYWRlcnMgPSB0aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKG1hdGVyaWFsKTtcblxuXHRcdGlmIChtYXRlcmlhbFNoYWRlcnMuaGFzKHZlcnRleFNoYWRlclN0YWdlKSA9PT0gZmFsc2UpIHtcblx0XHRcdG1hdGVyaWFsU2hhZGVycy5hZGQodmVydGV4U2hhZGVyU3RhZ2UpO1xuXHRcdFx0dmVydGV4U2hhZGVyU3RhZ2UudXNlZFRpbWVzKys7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsU2hhZGVycy5oYXMoZnJhZ21lbnRTaGFkZXJTdGFnZSkgPT09IGZhbHNlKSB7XG5cdFx0XHRtYXRlcmlhbFNoYWRlcnMuYWRkKGZyYWdtZW50U2hhZGVyU3RhZ2UpO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXJTdGFnZS51c2VkVGltZXMrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlbW92ZShtYXRlcmlhbCkge1xuXHRcdGNvbnN0IG1hdGVyaWFsU2hhZGVycyA9IHRoaXMubWF0ZXJpYWxDYWNoZS5nZXQobWF0ZXJpYWwpO1xuXG5cdFx0Zm9yIChjb25zdCBzaGFkZXJTdGFnZSBvZiBtYXRlcmlhbFNoYWRlcnMpIHtcblx0XHRcdHNoYWRlclN0YWdlLnVzZWRUaW1lcy0tO1xuXHRcdFx0aWYgKHNoYWRlclN0YWdlLnVzZWRUaW1lcyA9PT0gMCkgdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoc2hhZGVyU3RhZ2UpO1xuXHRcdH1cblxuXHRcdHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUobWF0ZXJpYWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0VmVydGV4U2hhZGVySUQobWF0ZXJpYWwpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UobWF0ZXJpYWwudmVydGV4U2hhZGVyKS5pZDtcblx0fVxuXG5cdGdldEZyYWdtZW50U2hhZGVySUQobWF0ZXJpYWwpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UobWF0ZXJpYWwuZnJhZ21lbnRTaGFkZXIpLmlkO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCk7XG5cdH1cblxuXHRfZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbChtYXRlcmlhbCkge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5tYXRlcmlhbENhY2hlO1xuXG5cdFx0aWYgKGNhY2hlLmhhcyhtYXRlcmlhbCkgPT09IGZhbHNlKSB7XG5cdFx0XHRjYWNoZS5zZXQobWF0ZXJpYWwsIG5ldyBTZXQoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlLmdldChtYXRlcmlhbCk7XG5cdH1cblxuXHRfZ2V0U2hhZGVyU3RhZ2UoY29kZSkge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5zaGFkZXJDYWNoZTtcblxuXHRcdGlmIChjYWNoZS5oYXMoY29kZSkgPT09IGZhbHNlKSB7XG5cdFx0XHRjb25zdCBzdGFnZSA9IG5ldyBXZWJHTFNoYWRlclN0YWdlKCk7XG5cdFx0XHRjYWNoZS5zZXQoY29kZSwgc3RhZ2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZS5nZXQoY29kZSk7XG5cdH1cblxufVxuXG5jbGFzcyBXZWJHTFNoYWRlclN0YWdlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5pZCA9IF9pZCsrO1xuXHRcdHRoaXMudXNlZFRpbWVzID0gMDtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMUHJvZ3JhbXMocmVuZGVyZXIsIGN1YmVtYXBzLCBjdWJldXZtYXBzLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMsIGJpbmRpbmdTdGF0ZXMsIGNsaXBwaW5nKSB7XG5cdGNvbnN0IF9wcm9ncmFtTGF5ZXJzID0gbmV3IExheWVycygpO1xuXG5cdGNvbnN0IF9jdXN0b21TaGFkZXJzID0gbmV3IFdlYkdMU2hhZGVyQ2FjaGUoKTtcblxuXHRjb25zdCBwcm9ncmFtcyA9IFtdO1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblx0Y29uc3QgbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA9IGNhcGFiaWxpdGllcy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyO1xuXHRjb25zdCBmbG9hdFZlcnRleFRleHR1cmVzID0gY2FwYWJpbGl0aWVzLmZsb2F0VmVydGV4VGV4dHVyZXM7XG5cdGNvbnN0IG1heFZlcnRleFVuaWZvcm1zID0gY2FwYWJpbGl0aWVzLm1heFZlcnRleFVuaWZvcm1zO1xuXHRjb25zdCB2ZXJ0ZXhUZXh0dXJlcyA9IGNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcztcblx0bGV0IHByZWNpc2lvbiA9IGNhcGFiaWxpdGllcy5wcmVjaXNpb247XG5cdGNvbnN0IHNoYWRlcklEcyA9IHtcblx0XHRNZXNoRGVwdGhNYXRlcmlhbDogJ2RlcHRoJyxcblx0XHRNZXNoRGlzdGFuY2VNYXRlcmlhbDogJ2Rpc3RhbmNlUkdCQScsXG5cdFx0TWVzaE5vcm1hbE1hdGVyaWFsOiAnbm9ybWFsJyxcblx0XHRNZXNoQmFzaWNNYXRlcmlhbDogJ2Jhc2ljJyxcblx0XHRNZXNoTGFtYmVydE1hdGVyaWFsOiAnbGFtYmVydCcsXG5cdFx0TWVzaFBob25nTWF0ZXJpYWw6ICdwaG9uZycsXG5cdFx0TWVzaFRvb25NYXRlcmlhbDogJ3Rvb24nLFxuXHRcdE1lc2hTdGFuZGFyZE1hdGVyaWFsOiAncGh5c2ljYWwnLFxuXHRcdE1lc2hQaHlzaWNhbE1hdGVyaWFsOiAncGh5c2ljYWwnLFxuXHRcdE1lc2hNYXRjYXBNYXRlcmlhbDogJ21hdGNhcCcsXG5cdFx0TGluZUJhc2ljTWF0ZXJpYWw6ICdiYXNpYycsXG5cdFx0TGluZURhc2hlZE1hdGVyaWFsOiAnZGFzaGVkJyxcblx0XHRQb2ludHNNYXRlcmlhbDogJ3BvaW50cycsXG5cdFx0U2hhZG93TWF0ZXJpYWw6ICdzaGFkb3cnLFxuXHRcdFNwcml0ZU1hdGVyaWFsOiAnc3ByaXRlJ1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldE1heEJvbmVzKG9iamVjdCkge1xuXHRcdGNvbnN0IHNrZWxldG9uID0gb2JqZWN0LnNrZWxldG9uO1xuXHRcdGNvbnN0IGJvbmVzID0gc2tlbGV0b24uYm9uZXM7XG5cblx0XHRpZiAoZmxvYXRWZXJ0ZXhUZXh0dXJlcykge1xuXHRcdFx0cmV0dXJuIDEwMjQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGRlZmF1bHQgZm9yIHdoZW4gb2JqZWN0IGlzIG5vdCBzcGVjaWZpZWRcblx0XHRcdC8vICggZm9yIGV4YW1wbGUgd2hlbiBwcmVidWlsZGluZyBzaGFkZXIgdG8gYmUgdXNlZCB3aXRoIG11bHRpcGxlIG9iamVjdHMgKVxuXHRcdFx0Ly9cblx0XHRcdC8vXHQtIGxlYXZlIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG90aGVyIHVuaWZvcm1zXG5cdFx0XHQvL1x0LSBsaW1pdCBoZXJlIGlzIEFOR0xFJ3MgMjU0IG1heCB1bmlmb3JtIHZlY3RvcnNcblx0XHRcdC8vXHRcdCh1cCB0byA1NCBzaG91bGQgYmUgc2FmZSlcblx0XHRcdGNvbnN0IG5WZXJ0ZXhVbmlmb3JtcyA9IG1heFZlcnRleFVuaWZvcm1zO1xuXHRcdFx0Y29uc3QgblZlcnRleE1hdHJpY2VzID0gTWF0aC5mbG9vcigoblZlcnRleFVuaWZvcm1zIC0gMjApIC8gNCk7XG5cdFx0XHRjb25zdCBtYXhCb25lcyA9IE1hdGgubWluKG5WZXJ0ZXhNYXRyaWNlcywgYm9uZXMubGVuZ3RoKTtcblxuXHRcdFx0aWYgKG1heEJvbmVzIDwgYm9uZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICcgKyBib25lcy5sZW5ndGggKyAnIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAnICsgbWF4Qm9uZXMgKyAnLicpO1xuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1heEJvbmVzO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFBhcmFtZXRlcnMobWF0ZXJpYWwsIGxpZ2h0cywgc2hhZG93cywgc2NlbmUsIG9iamVjdCkge1xuXHRcdGNvbnN0IGZvZyA9IHNjZW5lLmZvZztcblx0XHRjb25zdCBlbnZpcm9ubWVudCA9IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBzY2VuZS5lbnZpcm9ubWVudCA6IG51bGw7XG5cdFx0Y29uc3QgZW52TWFwID0gKG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMpLmdldChtYXRlcmlhbC5lbnZNYXAgfHwgZW52aXJvbm1lbnQpO1xuXHRcdGNvbnN0IHNoYWRlcklEID0gc2hhZGVySURzW21hdGVyaWFsLnR5cGVdOyAvLyBoZXVyaXN0aWNzIHRvIGNyZWF0ZSBzaGFkZXIgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gbGlnaHRzIGluIHRoZSBzY2VuZVxuXHRcdC8vIChub3QgdG8gYmxvdyBvdmVyIG1heExpZ2h0cyBidWRnZXQpXG5cblx0XHRjb25zdCBtYXhCb25lcyA9IG9iamVjdC5pc1NraW5uZWRNZXNoID8gZ2V0TWF4Qm9uZXMob2JqZWN0KSA6IDA7XG5cblx0XHRpZiAobWF0ZXJpYWwucHJlY2lzaW9uICE9PSBudWxsKSB7XG5cdFx0XHRwcmVjaXNpb24gPSBjYXBhYmlsaXRpZXMuZ2V0TWF4UHJlY2lzaW9uKG1hdGVyaWFsLnByZWNpc2lvbik7XG5cblx0XHRcdGlmIChwcmVjaXNpb24gIT09IG1hdGVyaWFsLnByZWNpc2lvbikge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOicsIG1hdGVyaWFsLnByZWNpc2lvbiwgJ25vdCBzdXBwb3J0ZWQsIHVzaW5nJywgcHJlY2lzaW9uLCAnaW5zdGVhZC4nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcjtcblx0XHRsZXQgY3VzdG9tVmVydGV4U2hhZGVySUQsIGN1c3RvbUZyYWdtZW50U2hhZGVySUQ7XG5cblx0XHRpZiAoc2hhZGVySUQpIHtcblx0XHRcdGNvbnN0IHNoYWRlciA9IFNoYWRlckxpYltzaGFkZXJJRF07XG5cdFx0XHR2ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlcnRleFNoYWRlciA9IG1hdGVyaWFsLnZlcnRleFNoYWRlcjtcblx0XHRcdGZyYWdtZW50U2hhZGVyID0gbWF0ZXJpYWwuZnJhZ21lbnRTaGFkZXI7XG5cblx0XHRcdF9jdXN0b21TaGFkZXJzLnVwZGF0ZShtYXRlcmlhbCk7XG5cblx0XHRcdGN1c3RvbVZlcnRleFNoYWRlcklEID0gX2N1c3RvbVNoYWRlcnMuZ2V0VmVydGV4U2hhZGVySUQobWF0ZXJpYWwpO1xuXHRcdFx0Y3VzdG9tRnJhZ21lbnRTaGFkZXJJRCA9IF9jdXN0b21TaGFkZXJzLmdldEZyYWdtZW50U2hhZGVySUQobWF0ZXJpYWwpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRjb25zdCB1c2VBbHBoYVRlc3QgPSBtYXRlcmlhbC5hbHBoYVRlc3QgPiAwO1xuXHRcdGNvbnN0IHVzZUNsZWFyY29hdCA9IG1hdGVyaWFsLmNsZWFyY29hdCA+IDA7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHtcblx0XHRcdGlzV2ViR0wyOiBpc1dlYkdMMixcblx0XHRcdHNoYWRlcklEOiBzaGFkZXJJRCxcblx0XHRcdHNoYWRlck5hbWU6IG1hdGVyaWFsLnR5cGUsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcixcblx0XHRcdGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlcixcblx0XHRcdGRlZmluZXM6IG1hdGVyaWFsLmRlZmluZXMsXG5cdFx0XHRjdXN0b21WZXJ0ZXhTaGFkZXJJRDogY3VzdG9tVmVydGV4U2hhZGVySUQsXG5cdFx0XHRjdXN0b21GcmFnbWVudFNoYWRlcklEOiBjdXN0b21GcmFnbWVudFNoYWRlcklELFxuXHRcdFx0aXNSYXdTaGFkZXJNYXRlcmlhbDogbWF0ZXJpYWwuaXNSYXdTaGFkZXJNYXRlcmlhbCA9PT0gdHJ1ZSxcblx0XHRcdGdsc2xWZXJzaW9uOiBtYXRlcmlhbC5nbHNsVmVyc2lvbixcblx0XHRcdHByZWNpc2lvbjogcHJlY2lzaW9uLFxuXHRcdFx0aW5zdGFuY2luZzogb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSxcblx0XHRcdGluc3RhbmNpbmdDb2xvcjogb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCA9PT0gdHJ1ZSAmJiBvYmplY3QuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCxcblx0XHRcdHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6IHZlcnRleFRleHR1cmVzLFxuXHRcdFx0b3V0cHV0RW5jb2Rpbmc6IGN1cnJlbnRSZW5kZXJUYXJnZXQgPT09IG51bGwgPyByZW5kZXJlci5vdXRwdXRFbmNvZGluZyA6IGN1cnJlbnRSZW5kZXJUYXJnZXQuaXNYUlJlbmRlclRhcmdldCA9PT0gdHJ1ZSA/IGN1cnJlbnRSZW5kZXJUYXJnZXQudGV4dHVyZS5lbmNvZGluZyA6IExpbmVhckVuY29kaW5nLFxuXHRcdFx0bWFwOiAhIW1hdGVyaWFsLm1hcCxcblx0XHRcdG1hdGNhcDogISFtYXRlcmlhbC5tYXRjYXAsXG5cdFx0XHRlbnZNYXA6ICEhZW52TWFwLFxuXHRcdFx0ZW52TWFwTW9kZTogZW52TWFwICYmIGVudk1hcC5tYXBwaW5nLFxuXHRcdFx0ZW52TWFwQ3ViZVVWOiAhIWVudk1hcCAmJiAoZW52TWFwLm1hcHBpbmcgPT09IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nIHx8IGVudk1hcC5tYXBwaW5nID09PSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZyksXG5cdFx0XHRsaWdodE1hcDogISFtYXRlcmlhbC5saWdodE1hcCxcblx0XHRcdGFvTWFwOiAhIW1hdGVyaWFsLmFvTWFwLFxuXHRcdFx0ZW1pc3NpdmVNYXA6ICEhbWF0ZXJpYWwuZW1pc3NpdmVNYXAsXG5cdFx0XHRidW1wTWFwOiAhIW1hdGVyaWFsLmJ1bXBNYXAsXG5cdFx0XHRub3JtYWxNYXA6ICEhbWF0ZXJpYWwubm9ybWFsTWFwLFxuXHRcdFx0b2JqZWN0U3BhY2VOb3JtYWxNYXA6IG1hdGVyaWFsLm5vcm1hbE1hcFR5cGUgPT09IE9iamVjdFNwYWNlTm9ybWFsTWFwLFxuXHRcdFx0dGFuZ2VudFNwYWNlTm9ybWFsTWFwOiBtYXRlcmlhbC5ub3JtYWxNYXBUeXBlID09PSBUYW5nZW50U3BhY2VOb3JtYWxNYXAsXG5cdFx0XHRkZWNvZGVWaWRlb1RleHR1cmU6ICEhbWF0ZXJpYWwubWFwICYmIG1hdGVyaWFsLm1hcC5pc1ZpZGVvVGV4dHVyZSA9PT0gdHJ1ZSAmJiBtYXRlcmlhbC5tYXAuZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyxcblx0XHRcdGNsZWFyY29hdDogdXNlQ2xlYXJjb2F0LFxuXHRcdFx0Y2xlYXJjb2F0TWFwOiB1c2VDbGVhcmNvYXQgJiYgISFtYXRlcmlhbC5jbGVhcmNvYXRNYXAsXG5cdFx0XHRjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IHVzZUNsZWFyY29hdCAmJiAhIW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCxcblx0XHRcdGNsZWFyY29hdE5vcm1hbE1hcDogdXNlQ2xlYXJjb2F0ICYmICEhbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwLFxuXHRcdFx0ZGlzcGxhY2VtZW50TWFwOiAhIW1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCxcblx0XHRcdHJvdWdobmVzc01hcDogISFtYXRlcmlhbC5yb3VnaG5lc3NNYXAsXG5cdFx0XHRtZXRhbG5lc3NNYXA6ICEhbWF0ZXJpYWwubWV0YWxuZXNzTWFwLFxuXHRcdFx0c3BlY3VsYXJNYXA6ICEhbWF0ZXJpYWwuc3BlY3VsYXJNYXAsXG5cdFx0XHRzcGVjdWxhckludGVuc2l0eU1hcDogISFtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCxcblx0XHRcdHNwZWN1bGFyQ29sb3JNYXA6ICEhbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCxcblx0XHRcdGFscGhhTWFwOiAhIW1hdGVyaWFsLmFscGhhTWFwLFxuXHRcdFx0YWxwaGFUZXN0OiB1c2VBbHBoYVRlc3QsXG5cdFx0XHRhbHBoYVdyaXRlOiBtYXRlcmlhbC5hbHBoYVdyaXRlIHx8IG1hdGVyaWFsLnRyYW5zcGFyZW50LFxuXHRcdFx0Z3JhZGllbnRNYXA6ICEhbWF0ZXJpYWwuZ3JhZGllbnRNYXAsXG5cdFx0XHRzaGVlbjogbWF0ZXJpYWwuc2hlZW4gPiAwLFxuXHRcdFx0c2hlZW5Db2xvck1hcDogISFtYXRlcmlhbC5zaGVlbkNvbG9yTWFwLFxuXHRcdFx0c2hlZW5Sb3VnaG5lc3NNYXA6ICEhbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAsXG5cdFx0XHR0cmFuc21pc3Npb246IG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAsXG5cdFx0XHR0cmFuc21pc3Npb25NYXA6ICEhbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwLFxuXHRcdFx0dGhpY2tuZXNzTWFwOiAhIW1hdGVyaWFsLnRoaWNrbmVzc01hcCxcblx0XHRcdGNvbWJpbmU6IG1hdGVyaWFsLmNvbWJpbmUsXG5cdFx0XHR2ZXJ0ZXhUYW5nZW50czogISFtYXRlcmlhbC5ub3JtYWxNYXAgJiYgISFvYmplY3QuZ2VvbWV0cnkgJiYgISFvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LFxuXHRcdFx0dmVydGV4Q29sb3JzOiBtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMsXG5cdFx0XHR2ZXJ0ZXhBbHBoYXM6IG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gdHJ1ZSAmJiAhIW9iamVjdC5nZW9tZXRyeSAmJiAhIW9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yICYmIG9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplID09PSA0LFxuXHRcdFx0dmVydGV4VXZzOiAhIW1hdGVyaWFsLm1hcCB8fCAhIW1hdGVyaWFsLmJ1bXBNYXAgfHwgISFtYXRlcmlhbC5ub3JtYWxNYXAgfHwgISFtYXRlcmlhbC5zcGVjdWxhck1hcCB8fCAhIW1hdGVyaWFsLmFscGhhTWFwIHx8ICEhbWF0ZXJpYWwuZW1pc3NpdmVNYXAgfHwgISFtYXRlcmlhbC5yb3VnaG5lc3NNYXAgfHwgISFtYXRlcmlhbC5tZXRhbG5lc3NNYXAgfHwgISFtYXRlcmlhbC5jbGVhcmNvYXRNYXAgfHwgISFtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgfHwgISFtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAgfHwgISFtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgfHwgISFtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgfHwgISFtYXRlcmlhbC50aGlja25lc3NNYXAgfHwgISFtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCB8fCAhIW1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXAgfHwgISFtYXRlcmlhbC5zaGVlbkNvbG9yTWFwIHx8ICEhbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAsXG5cdFx0XHR1dnNWZXJ0ZXhPbmx5OiAhKCEhbWF0ZXJpYWwubWFwIHx8ICEhbWF0ZXJpYWwuYnVtcE1hcCB8fCAhIW1hdGVyaWFsLm5vcm1hbE1hcCB8fCAhIW1hdGVyaWFsLnNwZWN1bGFyTWFwIHx8ICEhbWF0ZXJpYWwuYWxwaGFNYXAgfHwgISFtYXRlcmlhbC5lbWlzc2l2ZU1hcCB8fCAhIW1hdGVyaWFsLnJvdWdobmVzc01hcCB8fCAhIW1hdGVyaWFsLm1ldGFsbmVzc01hcCB8fCAhIW1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCB8fCBtYXRlcmlhbC50cmFuc21pc3Npb24gPiAwIHx8ICEhbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwIHx8ICEhbWF0ZXJpYWwudGhpY2tuZXNzTWFwIHx8ICEhbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXAgfHwgISFtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwIHx8IG1hdGVyaWFsLnNoZWVuID4gMCB8fCAhIW1hdGVyaWFsLnNoZWVuQ29sb3JNYXAgfHwgISFtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCkgJiYgISFtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAsXG5cdFx0XHRmb2c6ICEhZm9nLFxuXHRcdFx0dXNlRm9nOiBtYXRlcmlhbC5mb2csXG5cdFx0XHRmb2dFeHAyOiBmb2cgJiYgZm9nLmlzRm9nRXhwMixcblx0XHRcdGZsYXRTaGFkaW5nOiAhIW1hdGVyaWFsLmZsYXRTaGFkaW5nLFxuXHRcdFx0c2l6ZUF0dGVudWF0aW9uOiBtYXRlcmlhbC5zaXplQXR0ZW51YXRpb24sXG5cdFx0XHRsb2dhcml0aG1pY0RlcHRoQnVmZmVyOiBsb2dhcml0aG1pY0RlcHRoQnVmZmVyLFxuXHRcdFx0c2tpbm5pbmc6IG9iamVjdC5pc1NraW5uZWRNZXNoID09PSB0cnVlICYmIG1heEJvbmVzID4gMCxcblx0XHRcdG1heEJvbmVzOiBtYXhCb25lcyxcblx0XHRcdHVzZVZlcnRleFRleHR1cmU6IGZsb2F0VmVydGV4VGV4dHVyZXMsXG5cdFx0XHRtb3JwaFRhcmdldHM6ICEhb2JqZWN0Lmdlb21ldHJ5ICYmICEhb2JqZWN0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixcblx0XHRcdG1vcnBoTm9ybWFsczogISFvYmplY3QuZ2VvbWV0cnkgJiYgISFvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxcblx0XHRcdG1vcnBoVGFyZ2V0c0NvdW50OiAhIW9iamVjdC5nZW9tZXRyeSAmJiAhIW9iamVjdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24gPyBvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCA6IDAsXG5cdFx0XHRudW1EaXJMaWdodHM6IGxpZ2h0cy5kaXJlY3Rpb25hbC5sZW5ndGgsXG5cdFx0XHRudW1Qb2ludExpZ2h0czogbGlnaHRzLnBvaW50Lmxlbmd0aCxcblx0XHRcdG51bVNwb3RMaWdodHM6IGxpZ2h0cy5zcG90Lmxlbmd0aCxcblx0XHRcdG51bVJlY3RBcmVhTGlnaHRzOiBsaWdodHMucmVjdEFyZWEubGVuZ3RoLFxuXHRcdFx0bnVtSGVtaUxpZ2h0czogbGlnaHRzLmhlbWkubGVuZ3RoLFxuXHRcdFx0bnVtRGlyTGlnaHRTaGFkb3dzOiBsaWdodHMuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLFxuXHRcdFx0bnVtUG9pbnRMaWdodFNoYWRvd3M6IGxpZ2h0cy5wb2ludFNoYWRvd01hcC5sZW5ndGgsXG5cdFx0XHRudW1TcG90TGlnaHRTaGFkb3dzOiBsaWdodHMuc3BvdFNoYWRvd01hcC5sZW5ndGgsXG5cdFx0XHRudW1DbGlwcGluZ1BsYW5lczogY2xpcHBpbmcubnVtUGxhbmVzLFxuXHRcdFx0bnVtQ2xpcEludGVyc2VjdGlvbjogY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uLFxuXHRcdFx0ZGl0aGVyaW5nOiBtYXRlcmlhbC5kaXRoZXJpbmcsXG5cdFx0XHRzaGFkb3dNYXBFbmFibGVkOiByZW5kZXJlci5zaGFkb3dNYXAuZW5hYmxlZCAmJiBzaGFkb3dzLmxlbmd0aCA+IDAsXG5cdFx0XHRzaGFkb3dNYXBUeXBlOiByZW5kZXJlci5zaGFkb3dNYXAudHlwZSxcblx0XHRcdHRvbmVNYXBwaW5nOiBtYXRlcmlhbC50b25lTWFwcGVkID8gcmVuZGVyZXIudG9uZU1hcHBpbmcgOiBOb1RvbmVNYXBwaW5nLFxuXHRcdFx0cGh5c2ljYWxseUNvcnJlY3RMaWdodHM6IHJlbmRlcmVyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLFxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhOiBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEsXG5cdFx0XHRkb3VibGVTaWRlZDogbWF0ZXJpYWwuc2lkZSA9PT0gRG91YmxlU2lkZSxcblx0XHRcdGZsaXBTaWRlZDogbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUsXG5cdFx0XHRkZXB0aFBhY2tpbmc6IG1hdGVyaWFsLmRlcHRoUGFja2luZyAhPT0gdW5kZWZpbmVkID8gbWF0ZXJpYWwuZGVwdGhQYWNraW5nIDogZmFsc2UsXG5cdFx0XHRpbmRleDBBdHRyaWJ1dGVOYW1lOiBtYXRlcmlhbC5pbmRleDBBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0ZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxcblx0XHRcdGV4dGVuc2lvbkZyYWdEZXB0aDogbWF0ZXJpYWwuZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbC5leHRlbnNpb25zLmZyYWdEZXB0aCxcblx0XHRcdGV4dGVuc2lvbkRyYXdCdWZmZXJzOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsXG5cdFx0XHRleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxcblx0XHRcdHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOiBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcygnRVhUX2ZyYWdfZGVwdGgnKSxcblx0XHRcdHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdXRUJHTF9kcmF3X2J1ZmZlcnMnKSxcblx0XHRcdHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDogaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSxcblx0XHRcdGN1c3RvbVByb2dyYW1DYWNoZUtleTogbWF0ZXJpYWwuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KClcblx0XHR9O1xuXHRcdHJldHVybiBwYXJhbWV0ZXJzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5KHBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMuc2hhZGVySUQpIHtcblx0XHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5zaGFkZXJJRCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5jdXN0b21WZXJ0ZXhTaGFkZXJJRCk7XG5cdFx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMuZGVmaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gcGFyYW1ldGVycy5kZWZpbmVzKSB7XG5cdFx0XHRcdGFycmF5LnB1c2gobmFtZSk7XG5cdFx0XHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5kZWZpbmVzW25hbWVdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycy5pc1Jhd1NoYWRlck1hdGVyaWFsID09PSBmYWxzZSkge1xuXHRcdFx0Z2V0UHJvZ3JhbUNhY2hlS2V5UGFyYW1ldGVycyhhcnJheSwgcGFyYW1ldGVycyk7XG5cdFx0XHRnZXRQcm9ncmFtQ2FjaGVLZXlCb29sZWFucyhhcnJheSwgcGFyYW1ldGVycyk7XG5cdFx0XHRhcnJheS5wdXNoKHJlbmRlcmVyLm91dHB1dEVuY29kaW5nKTtcblx0XHR9XG5cblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KTtcblx0XHRyZXR1cm4gYXJyYXkuam9pbigpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5UGFyYW1ldGVycyhhcnJheSwgcGFyYW1ldGVycykge1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5wcmVjaXNpb24pO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5vdXRwdXRFbmNvZGluZyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLmVudk1hcE1vZGUpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5jb21iaW5lKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMudmVydGV4VXZzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMuZm9nRXhwMik7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLnNpemVBdHRlbnVhdGlvbik7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm1heEJvbmVzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzQ291bnQpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1EaXJMaWdodHMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1Qb2ludExpZ2h0cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bVNwb3RMaWdodHMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1IZW1pTGlnaHRzKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMubnVtUmVjdEFyZWFMaWdodHMpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1EaXJMaWdodFNoYWRvd3MpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1Qb2ludExpZ2h0U2hhZG93cyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bVNwb3RMaWdodFNoYWRvd3MpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlKTtcblx0XHRhcnJheS5wdXNoKHBhcmFtZXRlcnMudG9uZU1hcHBpbmcpO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcyk7XG5cdFx0YXJyYXkucHVzaChwYXJhbWV0ZXJzLm51bUNsaXBJbnRlcnNlY3Rpb24pO1xuXHRcdGFycmF5LnB1c2gocGFyYW1ldGVycy5hbHBoYVdyaXRlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFByb2dyYW1DYWNoZUtleUJvb2xlYW5zKGFycmF5LCBwYXJhbWV0ZXJzKSB7XG5cdFx0X3Byb2dyYW1MYXllcnMuZGlzYWJsZUFsbCgpO1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMuaXNXZWJHTDIpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgwKTtcblx0XHRpZiAocGFyYW1ldGVycy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuaW5zdGFuY2luZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmluc3RhbmNpbmdDb2xvcikgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDMpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLm1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDQpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLm1hdGNhcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDUpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmVudk1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDYpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmVudk1hcEN1YmVVVikgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDcpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmxpZ2h0TWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoOCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuYW9NYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSg5KTtcblx0XHRpZiAocGFyYW1ldGVycy5lbWlzc2l2ZU1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEwKTtcblx0XHRpZiAocGFyYW1ldGVycy5idW1wTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTEpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5vcm1hbE1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEyKTtcblx0XHRpZiAocGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEzKTtcblx0XHRpZiAocGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuY2xlYXJjb2F0KSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTUpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmNsZWFyY29hdE1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE2KTtcblx0XHRpZiAocGFyYW1ldGVycy5jbGVhcmNvYXRSb3VnaG5lc3NNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuY2xlYXJjb2F0Tm9ybWFsTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTgpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmRpc3BsYWNlbWVudE1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE5KTtcblx0XHRpZiAocGFyYW1ldGVycy5zcGVjdWxhck1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDIwKTtcblx0XHRpZiAocGFyYW1ldGVycy5yb3VnaG5lc3NNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyMSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubWV0YWxuZXNzTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmdyYWRpZW50TWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjMpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmFscGhhTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjQpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmFscGhhVGVzdCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDI1KTtcblx0XHRpZiAocGFyYW1ldGVycy52ZXJ0ZXhDb2xvcnMpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgyNik7XG5cdFx0aWYgKHBhcmFtZXRlcnMudmVydGV4QWxwaGFzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjcpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnZlcnRleFV2cykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDI4KTtcblx0XHRpZiAocGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDI5KTtcblx0XHRpZiAocGFyYW1ldGVycy51dnNWZXJ0ZXhPbmx5KSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMzApO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmZvZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDMxKTtcblx0XHRhcnJheS5wdXNoKF9wcm9ncmFtTGF5ZXJzLm1hc2spO1xuXG5cdFx0X3Byb2dyYW1MYXllcnMuZGlzYWJsZUFsbCgpO1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMudXNlRm9nKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxKTtcblx0XHRpZiAocGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMik7XG5cdFx0aWYgKHBhcmFtZXRlcnMuc2tpbm5pbmcpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgzKTtcblx0XHRpZiAocGFyYW1ldGVycy51c2VWZXJ0ZXhUZXh0dXJlKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNik7XG5cdFx0aWYgKHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoNyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDgpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoOSk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZG91YmxlU2lkZWQpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxMCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuZmxpcFNpZGVkKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTEpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmRlcHRoUGFja2luZykgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDEyKTtcblx0XHRpZiAocGFyYW1ldGVycy5kaXRoZXJpbmcpIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxMyk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuc3BlY3VsYXJJbnRlbnNpdHlNYXApIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNCk7XG5cdFx0aWYgKHBhcmFtZXRlcnMuc3BlY3VsYXJDb2xvck1hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE1KTtcblx0XHRpZiAocGFyYW1ldGVycy50cmFuc21pc3Npb24pIF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSgxNik7XG5cdFx0aWYgKHBhcmFtZXRlcnMudHJhbnNtaXNzaW9uTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMTcpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnRoaWNrbmVzc01hcCkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE4KTtcblx0XHRpZiAocGFyYW1ldGVycy5zaGVlbikgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDE5KTtcblx0XHRpZiAocGFyYW1ldGVycy5zaGVlbkNvbG9yTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjApO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwKSBfcHJvZ3JhbUxheWVycy5lbmFibGUoMjEpO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmRlY29kZVZpZGVvVGV4dHVyZSkgX3Byb2dyYW1MYXllcnMuZW5hYmxlKDIyKTtcblx0XHRhcnJheS5wdXNoKF9wcm9ncmFtTGF5ZXJzLm1hc2spO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0VW5pZm9ybXMobWF0ZXJpYWwpIHtcblx0XHRjb25zdCBzaGFkZXJJRCA9IHNoYWRlcklEc1ttYXRlcmlhbC50eXBlXTtcblx0XHRsZXQgdW5pZm9ybXM7XG5cblx0XHRpZiAoc2hhZGVySUQpIHtcblx0XHRcdGNvbnN0IHNoYWRlciA9IFNoYWRlckxpYltzaGFkZXJJRF07XG5cdFx0XHR1bmlmb3JtcyA9IFVuaWZvcm1zVXRpbHMuY2xvbmUoc2hhZGVyLnVuaWZvcm1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dW5pZm9ybXMgPSBtYXRlcmlhbC51bmlmb3Jtcztcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5pZm9ybXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhY3F1aXJlUHJvZ3JhbShwYXJhbWV0ZXJzLCBjYWNoZUtleSkge1xuXHRcdGxldCBwcm9ncmFtOyAvLyBDaGVjayBpZiBjb2RlIGhhcyBiZWVuIGFscmVhZHkgY29tcGlsZWRcblxuXHRcdGZvciAobGV0IHAgPSAwLCBwbCA9IHByb2dyYW1zLmxlbmd0aDsgcCA8IHBsOyBwKyspIHtcblx0XHRcdGNvbnN0IHByZWV4aXN0aW5nUHJvZ3JhbSA9IHByb2dyYW1zW3BdO1xuXG5cdFx0XHRpZiAocHJlZXhpc3RpbmdQcm9ncmFtLmNhY2hlS2V5ID09PSBjYWNoZUtleSkge1xuXHRcdFx0XHRwcm9ncmFtID0gcHJlZXhpc3RpbmdQcm9ncmFtO1xuXHRcdFx0XHQrK3Byb2dyYW0udXNlZFRpbWVzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocHJvZ3JhbSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwcm9ncmFtID0gbmV3IFdlYkdMUHJvZ3JhbShyZW5kZXJlciwgY2FjaGVLZXksIHBhcmFtZXRlcnMsIGJpbmRpbmdTdGF0ZXMpO1xuXHRcdFx0cHJvZ3JhbXMucHVzaChwcm9ncmFtKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvZ3JhbTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VQcm9ncmFtKHByb2dyYW0pIHtcblx0XHRpZiAoLS1wcm9ncmFtLnVzZWRUaW1lcyA9PT0gMCkge1xuXHRcdFx0Ly8gUmVtb3ZlIGZyb20gdW5vcmRlcmVkIHNldFxuXHRcdFx0Y29uc3QgaSA9IHByb2dyYW1zLmluZGV4T2YocHJvZ3JhbSk7XG5cdFx0XHRwcm9ncmFtc1tpXSA9IHByb2dyYW1zW3Byb2dyYW1zLmxlbmd0aCAtIDFdO1xuXHRcdFx0cHJvZ3JhbXMucG9wKCk7IC8vIEZyZWUgV2ViR0wgcmVzb3VyY2VzXG5cblx0XHRcdHByb2dyYW0uZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VTaGFkZXJDYWNoZShtYXRlcmlhbCkge1xuXHRcdF9jdXN0b21TaGFkZXJzLnJlbW92ZShtYXRlcmlhbCk7XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdF9jdXN0b21TaGFkZXJzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0UGFyYW1ldGVyczogZ2V0UGFyYW1ldGVycyxcblx0XHRnZXRQcm9ncmFtQ2FjaGVLZXk6IGdldFByb2dyYW1DYWNoZUtleSxcblx0XHRnZXRVbmlmb3JtczogZ2V0VW5pZm9ybXMsXG5cdFx0YWNxdWlyZVByb2dyYW06IGFjcXVpcmVQcm9ncmFtLFxuXHRcdHJlbGVhc2VQcm9ncmFtOiByZWxlYXNlUHJvZ3JhbSxcblx0XHRyZWxlYXNlU2hhZGVyQ2FjaGU6IHJlbGVhc2VTaGFkZXJDYWNoZSxcblx0XHQvLyBFeHBvc2VkIGZvciByZXNvdXJjZSBtb25pdG9yaW5nICYgZXJyb3IgZmVlZGJhY2sgdmlhIHJlbmRlcmVyLmluZm86XG5cdFx0cHJvZ3JhbXM6IHByb2dyYW1zLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xQcm9wZXJ0aWVzKCkge1xuXHRsZXQgcHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0ZnVuY3Rpb24gZ2V0KG9iamVjdCkge1xuXHRcdGxldCBtYXAgPSBwcm9wZXJ0aWVzLmdldChvYmplY3QpO1xuXG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtYXAgPSB7fTtcblx0XHRcdHByb3BlcnRpZXMuc2V0KG9iamVjdCwgbWFwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFwO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVtb3ZlKG9iamVjdCkge1xuXHRcdHByb3BlcnRpZXMuZGVsZXRlKG9iamVjdCk7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdFx0cHJvcGVydGllcy5nZXQob2JqZWN0KVtrZXldID0gdmFsdWU7XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXHRcdHByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRyZW1vdmU6IHJlbW92ZSxcblx0XHR1cGRhdGU6IHVwZGF0ZSxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhaW50ZXJTb3J0U3RhYmxlKGEsIGIpIHtcblx0aWYgKGEuZ3JvdXBPcmRlciAhPT0gYi5ncm91cE9yZGVyKSB7XG5cdFx0cmV0dXJuIGEuZ3JvdXBPcmRlciAtIGIuZ3JvdXBPcmRlcjtcblx0fSBlbHNlIGlmIChhLnJlbmRlck9yZGVyICE9PSBiLnJlbmRlck9yZGVyKSB7XG5cdFx0cmV0dXJuIGEucmVuZGVyT3JkZXIgLSBiLnJlbmRlck9yZGVyO1xuXHR9IGVsc2UgaWYgKGEubWF0ZXJpYWwuaWQgIT09IGIubWF0ZXJpYWwuaWQpIHtcblx0XHRyZXR1cm4gYS5tYXRlcmlhbC5pZCAtIGIubWF0ZXJpYWwuaWQ7XG5cdH0gZWxzZSBpZiAoYS56ICE9PSBiLnopIHtcblx0XHRyZXR1cm4gYS56IC0gYi56O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblx0fVxufVxuXG5mdW5jdGlvbiByZXZlcnNlUGFpbnRlclNvcnRTdGFibGUoYSwgYikge1xuXHRpZiAoYS5ncm91cE9yZGVyICE9PSBiLmdyb3VwT3JkZXIpIHtcblx0XHRyZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5ncm91cE9yZGVyO1xuXHR9IGVsc2UgaWYgKGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3JkZXIpIHtcblx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cdH0gZWxzZSBpZiAoYS56ICE9PSBiLnopIHtcblx0XHRyZXR1cm4gYi56IC0gYS56O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblx0fVxufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlckxpc3QoKSB7XG5cdGNvbnN0IHJlbmRlckl0ZW1zID0gW107XG5cdGxldCByZW5kZXJJdGVtc0luZGV4ID0gMDtcblx0Y29uc3Qgb3BhcXVlID0gW107XG5cdGNvbnN0IHRyYW5zbWlzc2l2ZSA9IFtdO1xuXHRjb25zdCB0cmFuc3BhcmVudCA9IFtdO1xuXG5cdGZ1bmN0aW9uIGluaXQoKSB7XG5cdFx0cmVuZGVySXRlbXNJbmRleCA9IDA7XG5cdFx0b3BhcXVlLmxlbmd0aCA9IDA7XG5cdFx0dHJhbnNtaXNzaXZlLmxlbmd0aCA9IDA7XG5cdFx0dHJhbnNwYXJlbnQubGVuZ3RoID0gMDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5leHRSZW5kZXJJdGVtKG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCkge1xuXHRcdGxldCByZW5kZXJJdGVtID0gcmVuZGVySXRlbXNbcmVuZGVySXRlbXNJbmRleF07XG5cblx0XHRpZiAocmVuZGVySXRlbSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZW5kZXJJdGVtID0ge1xuXHRcdFx0XHRpZDogb2JqZWN0LmlkLFxuXHRcdFx0XHRvYmplY3Q6IG9iamVjdCxcblx0XHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5LFxuXHRcdFx0XHRtYXRlcmlhbDogbWF0ZXJpYWwsXG5cdFx0XHRcdGdyb3VwT3JkZXI6IGdyb3VwT3JkZXIsXG5cdFx0XHRcdHJlbmRlck9yZGVyOiBvYmplY3QucmVuZGVyT3JkZXIsXG5cdFx0XHRcdHo6IHosXG5cdFx0XHRcdGdyb3VwOiBncm91cFxuXHRcdFx0fTtcblx0XHRcdHJlbmRlckl0ZW1zW3JlbmRlckl0ZW1zSW5kZXhdID0gcmVuZGVySXRlbTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVySXRlbS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdHJlbmRlckl0ZW0ub2JqZWN0ID0gb2JqZWN0O1xuXHRcdFx0cmVuZGVySXRlbS5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdFx0cmVuZGVySXRlbS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdFx0cmVuZGVySXRlbS5ncm91cE9yZGVyID0gZ3JvdXBPcmRlcjtcblx0XHRcdHJlbmRlckl0ZW0ucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cdFx0XHRyZW5kZXJJdGVtLnogPSB6O1xuXHRcdFx0cmVuZGVySXRlbS5ncm91cCA9IGdyb3VwO1xuXHRcdH1cblxuXHRcdHJlbmRlckl0ZW1zSW5kZXgrKztcblx0XHRyZXR1cm4gcmVuZGVySXRlbTtcblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2gob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwKSB7XG5cdFx0Y29uc3QgcmVuZGVySXRlbSA9IGdldE5leHRSZW5kZXJJdGVtKG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCk7XG5cblx0XHRpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uID4gMC4wKSB7XG5cdFx0XHR0cmFuc21pc3NpdmUucHVzaChyZW5kZXJJdGVtKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlKSB7XG5cdFx0XHR0cmFuc3BhcmVudC5wdXNoKHJlbmRlckl0ZW0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcGFxdWUucHVzaChyZW5kZXJJdGVtKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1bnNoaWZ0KG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCkge1xuXHRcdGNvbnN0IHJlbmRlckl0ZW0gPSBnZXROZXh0UmVuZGVySXRlbShvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgeiwgZ3JvdXApO1xuXG5cdFx0aWYgKG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAuMCkge1xuXHRcdFx0dHJhbnNtaXNzaXZlLnVuc2hpZnQocmVuZGVySXRlbSk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCA9PT0gdHJ1ZSkge1xuXHRcdFx0dHJhbnNwYXJlbnQudW5zaGlmdChyZW5kZXJJdGVtKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3BhcXVlLnVuc2hpZnQocmVuZGVySXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc29ydChjdXN0b21PcGFxdWVTb3J0LCBjdXN0b21UcmFuc3BhcmVudFNvcnQpIHtcblx0XHRpZiAob3BhcXVlLmxlbmd0aCA+IDEpIG9wYXF1ZS5zb3J0KGN1c3RvbU9wYXF1ZVNvcnQgfHwgcGFpbnRlclNvcnRTdGFibGUpO1xuXHRcdGlmICh0cmFuc21pc3NpdmUubGVuZ3RoID4gMSkgdHJhbnNtaXNzaXZlLnNvcnQoY3VzdG9tVHJhbnNwYXJlbnRTb3J0IHx8IHJldmVyc2VQYWludGVyU29ydFN0YWJsZSk7XG5cdFx0aWYgKHRyYW5zcGFyZW50Lmxlbmd0aCA+IDEpIHRyYW5zcGFyZW50LnNvcnQoY3VzdG9tVHJhbnNwYXJlbnRTb3J0IHx8IHJldmVyc2VQYWludGVyU29ydFN0YWJsZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBmaW5pc2goKSB7XG5cdFx0Ly8gQ2xlYXIgcmVmZXJlbmNlcyBmcm9tIGluYWN0aXZlIHJlbmRlckl0ZW1zIGluIHRoZSBsaXN0XG5cdFx0Zm9yIChsZXQgaSA9IHJlbmRlckl0ZW1zSW5kZXgsIGlsID0gcmVuZGVySXRlbXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVuZGVySXRlbSA9IHJlbmRlckl0ZW1zW2ldO1xuXHRcdFx0aWYgKHJlbmRlckl0ZW0uaWQgPT09IG51bGwpIGJyZWFrO1xuXHRcdFx0cmVuZGVySXRlbS5pZCA9IG51bGw7XG5cdFx0XHRyZW5kZXJJdGVtLm9iamVjdCA9IG51bGw7XG5cdFx0XHRyZW5kZXJJdGVtLmdlb21ldHJ5ID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0ubWF0ZXJpYWwgPSBudWxsO1xuXHRcdFx0cmVuZGVySXRlbS5ncm91cCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGFxdWU6IG9wYXF1ZSxcblx0XHR0cmFuc21pc3NpdmU6IHRyYW5zbWlzc2l2ZSxcblx0XHR0cmFuc3BhcmVudDogdHJhbnNwYXJlbnQsXG5cdFx0aW5pdDogaW5pdCxcblx0XHRwdXNoOiBwdXNoLFxuXHRcdHVuc2hpZnQ6IHVuc2hpZnQsXG5cdFx0ZmluaXNoOiBmaW5pc2gsXG5cdFx0c29ydDogc29ydFxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlckxpc3RzKCkge1xuXHRsZXQgbGlzdHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGdldChzY2VuZSwgcmVuZGVyQ2FsbERlcHRoKSB7XG5cdFx0bGV0IGxpc3Q7XG5cblx0XHRpZiAobGlzdHMuaGFzKHNjZW5lKSA9PT0gZmFsc2UpIHtcblx0XHRcdGxpc3QgPSBuZXcgV2ViR0xSZW5kZXJMaXN0KCk7XG5cdFx0XHRsaXN0cy5zZXQoc2NlbmUsIFtsaXN0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChyZW5kZXJDYWxsRGVwdGggPj0gbGlzdHMuZ2V0KHNjZW5lKS5sZW5ndGgpIHtcblx0XHRcdFx0bGlzdCA9IG5ldyBXZWJHTFJlbmRlckxpc3QoKTtcblx0XHRcdFx0bGlzdHMuZ2V0KHNjZW5lKS5wdXNoKGxpc3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGlzdCA9IGxpc3RzLmdldChzY2VuZSlbcmVuZGVyQ2FsbERlcHRoXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0bGlzdHMgPSBuZXcgV2Vha01hcCgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGdldCxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG59XG5cbmZ1bmN0aW9uIFVuaWZvcm1zQ2FjaGUoKSB7XG5cdGNvbnN0IGxpZ2h0cyA9IHt9O1xuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24gKGxpZ2h0KSB7XG5cdFx0XHRpZiAobGlnaHRzW2xpZ2h0LmlkXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBsaWdodHNbbGlnaHQuaWRdO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdW5pZm9ybXM7XG5cblx0XHRcdHN3aXRjaCAobGlnaHQudHlwZSkge1xuXHRcdFx0XHRjYXNlICdEaXJlY3Rpb25hbExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU3BvdExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0ZGlzdGFuY2U6IDAsXG5cdFx0XHRcdFx0XHRjb25lQ29zOiAwLFxuXHRcdFx0XHRcdFx0cGVudW1icmFDb3M6IDAsXG5cdFx0XHRcdFx0XHRkZWNheTogMFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnUG9pbnRMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKSxcblx0XHRcdFx0XHRcdGRpc3RhbmNlOiAwLFxuXHRcdFx0XHRcdFx0ZGVjYXk6IDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ0hlbWlzcGhlcmVMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRza3lDb2xvcjogbmV3IENvbG9yKCksXG5cdFx0XHRcdFx0XHRncm91bmRDb2xvcjogbmV3IENvbG9yKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1JlY3RBcmVhTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRoYWxmV2lkdGg6IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRoYWxmSGVpZ2h0OiBuZXcgVmVjdG9yMygpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0bGlnaHRzW2xpZ2h0LmlkXSA9IHVuaWZvcm1zO1xuXHRcdFx0cmV0dXJuIHVuaWZvcm1zO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2hhZG93VW5pZm9ybXNDYWNoZSgpIHtcblx0Y29uc3QgbGlnaHRzID0ge307XG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAobGlnaHQpIHtcblx0XHRcdGlmIChsaWdodHNbbGlnaHQuaWRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGxpZ2h0c1tsaWdodC5pZF07XG5cdFx0XHR9XG5cblx0XHRcdGxldCB1bmlmb3JtcztcblxuXHRcdFx0c3dpdGNoIChsaWdodC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ0RpcmVjdGlvbmFsTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0c2hhZG93QmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dSYWRpdXM6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdTcG90TGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0c2hhZG93QmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dSYWRpdXM6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdQb2ludExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHNoYWRvd0JpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93UmFkaXVzOiAxLFxuXHRcdFx0XHRcdFx0c2hhZG93TWFwU2l6ZTogbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0XHRcdHNoYWRvd0NhbWVyYU5lYXI6IDEsXG5cdFx0XHRcdFx0XHRzaGFkb3dDYW1lcmFGYXI6IDEwMDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBUT0RPIChhYmVsbmF0aW9uKTogc2V0IFJlY3RBcmVhTGlnaHQgc2hhZG93IHVuaWZvcm1zXG5cdFx0XHR9XG5cblx0XHRcdGxpZ2h0c1tsaWdodC5pZF0gPSB1bmlmb3Jtcztcblx0XHRcdHJldHVybiB1bmlmb3Jtcztcblx0XHR9XG5cdH07XG59XG5cbmxldCBuZXh0VmVyc2lvbiA9IDA7XG5cbmZ1bmN0aW9uIHNoYWRvd0Nhc3RpbmdMaWdodHNGaXJzdChsaWdodEEsIGxpZ2h0Qikge1xuXHRyZXR1cm4gKGxpZ2h0Qi5jYXN0U2hhZG93ID8gMSA6IDApIC0gKGxpZ2h0QS5jYXN0U2hhZG93ID8gMSA6IDApO1xufVxuXG5mdW5jdGlvbiBXZWJHTExpZ2h0cyhleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpIHtcblx0Y29uc3QgY2FjaGUgPSBuZXcgVW5pZm9ybXNDYWNoZSgpO1xuXHRjb25zdCBzaGFkb3dDYWNoZSA9IFNoYWRvd1VuaWZvcm1zQ2FjaGUoKTtcblx0Y29uc3Qgc3RhdGUgPSB7XG5cdFx0dmVyc2lvbjogMCxcblx0XHRoYXNoOiB7XG5cdFx0XHRkaXJlY3Rpb25hbExlbmd0aDogLTEsXG5cdFx0XHRwb2ludExlbmd0aDogLTEsXG5cdFx0XHRzcG90TGVuZ3RoOiAtMSxcblx0XHRcdHJlY3RBcmVhTGVuZ3RoOiAtMSxcblx0XHRcdGhlbWlMZW5ndGg6IC0xLFxuXHRcdFx0bnVtRGlyZWN0aW9uYWxTaGFkb3dzOiAtMSxcblx0XHRcdG51bVBvaW50U2hhZG93czogLTEsXG5cdFx0XHRudW1TcG90U2hhZG93czogLTFcblx0XHR9LFxuXHRcdGFtYmllbnQ6IFswLCAwLCAwXSxcblx0XHRwcm9iZTogW10sXG5cdFx0ZGlyZWN0aW9uYWw6IFtdLFxuXHRcdGRpcmVjdGlvbmFsU2hhZG93OiBbXSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvd01hcDogW10sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IFtdLFxuXHRcdHNwb3Q6IFtdLFxuXHRcdHNwb3RTaGFkb3c6IFtdLFxuXHRcdHNwb3RTaGFkb3dNYXA6IFtdLFxuXHRcdHNwb3RTaGFkb3dNYXRyaXg6IFtdLFxuXHRcdHJlY3RBcmVhOiBbXSxcblx0XHRyZWN0QXJlYUxUQzE6IG51bGwsXG5cdFx0cmVjdEFyZWFMVEMyOiBudWxsLFxuXHRcdHBvaW50OiBbXSxcblx0XHRwb2ludFNoYWRvdzogW10sXG5cdFx0cG9pbnRTaGFkb3dNYXA6IFtdLFxuXHRcdHBvaW50U2hhZG93TWF0cml4OiBbXSxcblx0XHRoZW1pOiBbXVxuXHR9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSBzdGF0ZS5wcm9iZS5wdXNoKG5ldyBWZWN0b3IzKCkpO1xuXG5cdGNvbnN0IHZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuXHRjb25zdCBtYXRyaXg0ID0gbmV3IE1hdHJpeDQoKTtcblx0Y29uc3QgbWF0cml4NDIgPSBuZXcgTWF0cml4NCgpO1xuXG5cdGZ1bmN0aW9uIHNldHVwKGxpZ2h0cywgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMpIHtcblx0XHRsZXQgciA9IDAsXG5cdFx0XHRcdGcgPSAwLFxuXHRcdFx0XHRiID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSBzdGF0ZS5wcm9iZVtpXS5zZXQoMCwgMCwgMCk7XG5cblx0XHRsZXQgZGlyZWN0aW9uYWxMZW5ndGggPSAwO1xuXHRcdGxldCBwb2ludExlbmd0aCA9IDA7XG5cdFx0bGV0IHNwb3RMZW5ndGggPSAwO1xuXHRcdGxldCByZWN0QXJlYUxlbmd0aCA9IDA7XG5cdFx0bGV0IGhlbWlMZW5ndGggPSAwO1xuXHRcdGxldCBudW1EaXJlY3Rpb25hbFNoYWRvd3MgPSAwO1xuXHRcdGxldCBudW1Qb2ludFNoYWRvd3MgPSAwO1xuXHRcdGxldCBudW1TcG90U2hhZG93cyA9IDA7XG5cdFx0bGlnaHRzLnNvcnQoc2hhZG93Q2FzdGluZ0xpZ2h0c0ZpcnN0KTsgLy8gYXJ0aXN0LWZyaWVuZGx5IGxpZ2h0IGludGVuc2l0eSBzY2FsaW5nIGZhY3RvclxuXG5cdFx0Y29uc3Qgc2NhbGVGYWN0b3IgPSBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyAhPT0gdHJ1ZSA/IE1hdGguUEkgOiAxO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBsaWdodHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcblx0XHRcdGNvbnN0IGNvbG9yID0gbGlnaHQuY29sb3I7XG5cdFx0XHRjb25zdCBpbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHk7XG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNlO1xuXHRcdFx0Y29uc3Qgc2hhZG93TWFwID0gbGlnaHQuc2hhZG93ICYmIGxpZ2h0LnNoYWRvdy5tYXAgPyBsaWdodC5zaGFkb3cubWFwLnRleHR1cmUgOiBudWxsO1xuXG5cdFx0XHRpZiAobGlnaHQuaXNBbWJpZW50TGlnaHQpIHtcblx0XHRcdFx0ciArPSBjb2xvci5yICogaW50ZW5zaXR5ICogc2NhbGVGYWN0b3I7XG5cdFx0XHRcdGcgKz0gY29sb3IuZyAqIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yO1xuXHRcdFx0XHRiICs9IGNvbG9yLmIgKiBpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcjtcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNMaWdodFByb2JlKSB7XG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgOTsgaisrKSB7XG5cdFx0XHRcdFx0c3RhdGUucHJvYmVbal0uYWRkU2NhbGVkVmVjdG9yKGxpZ2h0LnNoLmNvZWZmaWNpZW50c1tqXSwgaW50ZW5zaXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQobGlnaHQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5jb2xvci5jb3B5KGxpZ2h0LmNvbG9yKS5tdWx0aXBseVNjYWxhcihsaWdodC5pbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcik7XG5cblx0XHRcdFx0aWYgKGxpZ2h0LmNhc3RTaGFkb3cpIHtcblx0XHRcdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XG5cdFx0XHRcdFx0Y29uc3Qgc2hhZG93VW5pZm9ybXMgPSBzaGFkb3dDYWNoZS5nZXQobGlnaHQpO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0JpYXMgPSBzaGFkb3cuYmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dOb3JtYWxCaWFzID0gc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93UmFkaXVzID0gc2hhZG93LnJhZGl1cztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dNYXBTaXplID0gc2hhZG93Lm1hcFNpemU7XG5cdFx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dbZGlyZWN0aW9uYWxMZW5ndGhdID0gc2hhZG93VW5pZm9ybXM7XG5cdFx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXBbZGlyZWN0aW9uYWxMZW5ndGhdID0gc2hhZG93TWFwO1xuXHRcdFx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2RpcmVjdGlvbmFsTGVuZ3RoXSA9IGxpZ2h0LnNoYWRvdy5tYXRyaXg7XG5cdFx0XHRcdFx0bnVtRGlyZWN0aW9uYWxTaGFkb3dzKys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFtkaXJlY3Rpb25hbExlbmd0aF0gPSB1bmlmb3Jtcztcblx0XHRcdFx0ZGlyZWN0aW9uYWxMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNTcG90TGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQobGlnaHQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5jb2xvci5jb3B5KGNvbG9yKS5tdWx0aXBseVNjYWxhcihpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcik7XG5cdFx0XHRcdHVuaWZvcm1zLmRpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRcdHVuaWZvcm1zLmNvbmVDb3MgPSBNYXRoLmNvcyhsaWdodC5hbmdsZSk7XG5cdFx0XHRcdHVuaWZvcm1zLnBlbnVtYnJhQ29zID0gTWF0aC5jb3MobGlnaHQuYW5nbGUgKiAoMSAtIGxpZ2h0LnBlbnVtYnJhKSk7XG5cdFx0XHRcdHVuaWZvcm1zLmRlY2F5ID0gbGlnaHQuZGVjYXk7XG5cblx0XHRcdFx0aWYgKGxpZ2h0LmNhc3RTaGFkb3cpIHtcblx0XHRcdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XG5cdFx0XHRcdFx0Y29uc3Qgc2hhZG93VW5pZm9ybXMgPSBzaGFkb3dDYWNoZS5nZXQobGlnaHQpO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0JpYXMgPSBzaGFkb3cuYmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dOb3JtYWxCaWFzID0gc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93UmFkaXVzID0gc2hhZG93LnJhZGl1cztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dNYXBTaXplID0gc2hhZG93Lm1hcFNpemU7XG5cdFx0XHRcdFx0c3RhdGUuc3BvdFNoYWRvd1tzcG90TGVuZ3RoXSA9IHNoYWRvd1VuaWZvcm1zO1xuXHRcdFx0XHRcdHN0YXRlLnNwb3RTaGFkb3dNYXBbc3BvdExlbmd0aF0gPSBzaGFkb3dNYXA7XG5cdFx0XHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hdHJpeFtzcG90TGVuZ3RoXSA9IGxpZ2h0LnNoYWRvdy5tYXRyaXg7XG5cdFx0XHRcdFx0bnVtU3BvdFNoYWRvd3MrKztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnNwb3Rbc3BvdExlbmd0aF0gPSB1bmlmb3Jtcztcblx0XHRcdFx0c3BvdExlbmd0aCsrO1xuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc1JlY3RBcmVhTGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQobGlnaHQpOyAvLyAoYSkgaW50ZW5zaXR5IGlzIHRoZSB0b3RhbCB2aXNpYmxlIGxpZ2h0IGVtaXR0ZWRcblx0XHRcdFx0Ly91bmlmb3Jtcy5jb2xvci5jb3B5KCBjb2xvciApLm11bHRpcGx5U2NhbGFyKCBpbnRlbnNpdHkgLyAoIGxpZ2h0LndpZHRoICogbGlnaHQuaGVpZ2h0ICogTWF0aC5QSSApICk7XG5cdFx0XHRcdC8vIChiKSBpbnRlbnNpdHkgaXMgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGxpZ2h0XG5cblx0XHRcdFx0dW5pZm9ybXMuY29sb3IuY29weShjb2xvcikubXVsdGlwbHlTY2FsYXIoaW50ZW5zaXR5KTtcblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLnNldChsaWdodC53aWR0aCAqIDAuNSwgMC4wLCAwLjApO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmSGVpZ2h0LnNldCgwLjAsIGxpZ2h0LmhlaWdodCAqIDAuNSwgMC4wKTtcblx0XHRcdFx0c3RhdGUucmVjdEFyZWFbcmVjdEFyZWFMZW5ndGhdID0gdW5pZm9ybXM7XG5cdFx0XHRcdHJlY3RBcmVhTGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzUG9pbnRMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkobGlnaHQuY29sb3IpLm11bHRpcGx5U2NhbGFyKGxpZ2h0LmludGVuc2l0eSAqIHNjYWxlRmFjdG9yKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlzdGFuY2UgPSBsaWdodC5kaXN0YW5jZTtcblx0XHRcdFx0dW5pZm9ybXMuZGVjYXkgPSBsaWdodC5kZWNheTtcblxuXHRcdFx0XHRpZiAobGlnaHQuY2FzdFNoYWRvdykge1xuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblx0XHRcdFx0XHRjb25zdCBzaGFkb3dVbmlmb3JtcyA9IHNoYWRvd0NhY2hlLmdldChsaWdodCk7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYW1lcmFOZWFyID0gc2hhZG93LmNhbWVyYS5uZWFyO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0NhbWVyYUZhciA9IHNoYWRvdy5jYW1lcmEuZmFyO1xuXHRcdFx0XHRcdHN0YXRlLnBvaW50U2hhZG93W3BvaW50TGVuZ3RoXSA9IHNoYWRvd1VuaWZvcm1zO1xuXHRcdFx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWFwW3BvaW50TGVuZ3RoXSA9IHNoYWRvd01hcDtcblx0XHRcdFx0XHRzdGF0ZS5wb2ludFNoYWRvd01hdHJpeFtwb2ludExlbmd0aF0gPSBsaWdodC5zaGFkb3cubWF0cml4O1xuXHRcdFx0XHRcdG51bVBvaW50U2hhZG93cysrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUucG9pbnRbcG9pbnRMZW5ndGhdID0gdW5pZm9ybXM7XG5cdFx0XHRcdHBvaW50TGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzSGVtaXNwaGVyZUxpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gY2FjaGUuZ2V0KGxpZ2h0KTtcblx0XHRcdFx0dW5pZm9ybXMuc2t5Q29sb3IuY29weShsaWdodC5jb2xvcikubXVsdGlwbHlTY2FsYXIoaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IpO1xuXHRcdFx0XHR1bmlmb3Jtcy5ncm91bmRDb2xvci5jb3B5KGxpZ2h0Lmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcik7XG5cdFx0XHRcdHN0YXRlLmhlbWlbaGVtaUxlbmd0aF0gPSB1bmlmb3Jtcztcblx0XHRcdFx0aGVtaUxlbmd0aCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZWN0QXJlYUxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHtcblx0XHRcdFx0Ly8gV2ViR0wgMlxuXHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzEgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMTtcblx0XHRcdFx0c3RhdGUucmVjdEFyZWFMVEMyID0gVW5pZm9ybXNMaWIuTFRDX0ZMT0FUXzI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZWJHTCAxXG5cdFx0XHRcdGlmIChleHRlbnNpb25zLmhhcygnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJykgPT09IHRydWUpIHtcblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzEgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMTtcblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMjtcblx0XHRcdFx0fSBlbHNlIGlmIChleHRlbnNpb25zLmhhcygnT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHN0YXRlLnJlY3RBcmVhTFRDMSA9IFVuaWZvcm1zTGliLkxUQ19IQUxGXzE7XG5cdFx0XHRcdFx0c3RhdGUucmVjdEFyZWFMVEMyID0gVW5pZm9ybXNMaWIuTFRDX0hBTEZfMjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0YXRlLmFtYmllbnRbMF0gPSByO1xuXHRcdHN0YXRlLmFtYmllbnRbMV0gPSBnO1xuXHRcdHN0YXRlLmFtYmllbnRbMl0gPSBiO1xuXHRcdGNvbnN0IGhhc2ggPSBzdGF0ZS5oYXNoO1xuXG5cdFx0aWYgKGhhc2guZGlyZWN0aW9uYWxMZW5ndGggIT09IGRpcmVjdGlvbmFsTGVuZ3RoIHx8IGhhc2gucG9pbnRMZW5ndGggIT09IHBvaW50TGVuZ3RoIHx8IGhhc2guc3BvdExlbmd0aCAhPT0gc3BvdExlbmd0aCB8fCBoYXNoLnJlY3RBcmVhTGVuZ3RoICE9PSByZWN0QXJlYUxlbmd0aCB8fCBoYXNoLmhlbWlMZW5ndGggIT09IGhlbWlMZW5ndGggfHwgaGFzaC5udW1EaXJlY3Rpb25hbFNoYWRvd3MgIT09IG51bURpcmVjdGlvbmFsU2hhZG93cyB8fCBoYXNoLm51bVBvaW50U2hhZG93cyAhPT0gbnVtUG9pbnRTaGFkb3dzIHx8IGhhc2gubnVtU3BvdFNoYWRvd3MgIT09IG51bVNwb3RTaGFkb3dzKSB7XG5cdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbC5sZW5ndGggPSBkaXJlY3Rpb25hbExlbmd0aDtcblx0XHRcdHN0YXRlLnNwb3QubGVuZ3RoID0gc3BvdExlbmd0aDtcblx0XHRcdHN0YXRlLnJlY3RBcmVhLmxlbmd0aCA9IHJlY3RBcmVhTGVuZ3RoO1xuXHRcdFx0c3RhdGUucG9pbnQubGVuZ3RoID0gcG9pbnRMZW5ndGg7XG5cdFx0XHRzdGF0ZS5oZW1pLmxlbmd0aCA9IGhlbWlMZW5ndGg7XG5cdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGggPSBudW1EaXJlY3Rpb25hbFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGggPSBudW1EaXJlY3Rpb25hbFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5wb2ludFNoYWRvdy5sZW5ndGggPSBudW1Qb2ludFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5wb2ludFNoYWRvd01hcC5sZW5ndGggPSBudW1Qb2ludFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5zcG90U2hhZG93Lmxlbmd0aCA9IG51bVNwb3RTaGFkb3dzO1xuXHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hcC5sZW5ndGggPSBudW1TcG90U2hhZG93cztcblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aCA9IG51bURpcmVjdGlvbmFsU2hhZG93cztcblx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aCA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdHN0YXRlLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoID0gbnVtU3BvdFNoYWRvd3M7XG5cdFx0XHRoYXNoLmRpcmVjdGlvbmFsTGVuZ3RoID0gZGlyZWN0aW9uYWxMZW5ndGg7XG5cdFx0XHRoYXNoLnBvaW50TGVuZ3RoID0gcG9pbnRMZW5ndGg7XG5cdFx0XHRoYXNoLnNwb3RMZW5ndGggPSBzcG90TGVuZ3RoO1xuXHRcdFx0aGFzaC5yZWN0QXJlYUxlbmd0aCA9IHJlY3RBcmVhTGVuZ3RoO1xuXHRcdFx0aGFzaC5oZW1pTGVuZ3RoID0gaGVtaUxlbmd0aDtcblx0XHRcdGhhc2gubnVtRGlyZWN0aW9uYWxTaGFkb3dzID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0aGFzaC5udW1Qb2ludFNoYWRvd3MgPSBudW1Qb2ludFNoYWRvd3M7XG5cdFx0XHRoYXNoLm51bVNwb3RTaGFkb3dzID0gbnVtU3BvdFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS52ZXJzaW9uID0gbmV4dFZlcnNpb24rKztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cFZpZXcobGlnaHRzLCBjYW1lcmEpIHtcblx0XHRsZXQgZGlyZWN0aW9uYWxMZW5ndGggPSAwO1xuXHRcdGxldCBwb2ludExlbmd0aCA9IDA7XG5cdFx0bGV0IHNwb3RMZW5ndGggPSAwO1xuXHRcdGxldCByZWN0QXJlYUxlbmd0aCA9IDA7XG5cdFx0bGV0IGhlbWlMZW5ndGggPSAwO1xuXHRcdGNvbnN0IHZpZXdNYXRyaXggPSBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBsaWdodHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcblxuXHRcdFx0aWYgKGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCkge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLmRpcmVjdGlvbmFsW2RpcmVjdGlvbmFsTGVuZ3RoXTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5zdWIodmVjdG9yMyk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odmlld01hdHJpeCk7XG5cdFx0XHRcdGRpcmVjdGlvbmFsTGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzU3BvdExpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuc3BvdFtzcG90TGVuZ3RoXTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHZpZXdNYXRyaXgpO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnN1Yih2ZWN0b3IzKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih2aWV3TWF0cml4KTtcblx0XHRcdFx0c3BvdExlbmd0aCsrO1xuXHRcdFx0fSBlbHNlIGlmIChsaWdodC5pc1JlY3RBcmVhTGlnaHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5yZWN0QXJlYVtyZWN0QXJlYUxlbmd0aF07XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh2aWV3TWF0cml4KTsgLy8gZXh0cmFjdCBsb2NhbCByb3RhdGlvbiBvZiBsaWdodCB0byBkZXJpdmUgd2lkdGgvaGVpZ2h0IGhhbGYgdmVjdG9yc1xuXG5cdFx0XHRcdG1hdHJpeDQyLmlkZW50aXR5KCk7XG5cdFx0XHRcdG1hdHJpeDQuY29weShsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdG1hdHJpeDQucHJlbXVsdGlwbHkodmlld01hdHJpeCk7XG5cdFx0XHRcdG1hdHJpeDQyLmV4dHJhY3RSb3RhdGlvbihtYXRyaXg0KTtcblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLnNldChsaWdodC53aWR0aCAqIDAuNSwgMC4wLCAwLjApO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmSGVpZ2h0LnNldCgwLjAsIGxpZ2h0LmhlaWdodCAqIDAuNSwgMC4wKTtcblx0XHRcdFx0dW5pZm9ybXMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChtYXRyaXg0Mik7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KG1hdHJpeDQyKTtcblx0XHRcdFx0cmVjdEFyZWFMZW5ndGgrKztcblx0XHRcdH0gZWxzZSBpZiAobGlnaHQuaXNQb2ludExpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUucG9pbnRbcG9pbnRMZW5ndGhdO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQodmlld01hdHJpeCk7XG5cdFx0XHRcdHBvaW50TGVuZ3RoKys7XG5cdFx0XHR9IGVsc2UgaWYgKGxpZ2h0LmlzSGVtaXNwaGVyZUxpZ2h0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuaGVtaVtoZW1pTGVuZ3RoXTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odmlld01hdHJpeCk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5ub3JtYWxpemUoKTtcblx0XHRcdFx0aGVtaUxlbmd0aCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2V0dXA6IHNldHVwLFxuXHRcdHNldHVwVmlldzogc2V0dXBWaWV3LFxuXHRcdHN0YXRlOiBzdGF0ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlclN0YXRlKGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBsaWdodHMgPSBuZXcgV2ViR0xMaWdodHMoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0Y29uc3QgbGlnaHRzQXJyYXkgPSBbXTtcblx0Y29uc3Qgc2hhZG93c0FycmF5ID0gW107XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblx0XHRsaWdodHNBcnJheS5sZW5ndGggPSAwO1xuXHRcdHNoYWRvd3NBcnJheS5sZW5ndGggPSAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaExpZ2h0KGxpZ2h0KSB7XG5cdFx0bGlnaHRzQXJyYXkucHVzaChsaWdodCk7XG5cdH1cblxuXHRmdW5jdGlvbiBwdXNoU2hhZG93KHNoYWRvd0xpZ2h0KSB7XG5cdFx0c2hhZG93c0FycmF5LnB1c2goc2hhZG93TGlnaHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBMaWdodHMocGh5c2ljYWxseUNvcnJlY3RMaWdodHMpIHtcblx0XHRsaWdodHMuc2V0dXAobGlnaHRzQXJyYXksIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldHVwTGlnaHRzVmlldyhjYW1lcmEpIHtcblx0XHRsaWdodHMuc2V0dXBWaWV3KGxpZ2h0c0FycmF5LCBjYW1lcmEpO1xuXHR9XG5cblx0Y29uc3Qgc3RhdGUgPSB7XG5cdFx0bGlnaHRzQXJyYXk6IGxpZ2h0c0FycmF5LFxuXHRcdHNoYWRvd3NBcnJheTogc2hhZG93c0FycmF5LFxuXHRcdGxpZ2h0czogbGlnaHRzXG5cdH07XG5cdHJldHVybiB7XG5cdFx0aW5pdDogaW5pdCxcblx0XHRzdGF0ZTogc3RhdGUsXG5cdFx0c2V0dXBMaWdodHM6IHNldHVwTGlnaHRzLFxuXHRcdHNldHVwTGlnaHRzVmlldzogc2V0dXBMaWdodHNWaWV3LFxuXHRcdHB1c2hMaWdodDogcHVzaExpZ2h0LFxuXHRcdHB1c2hTaGFkb3c6IHB1c2hTaGFkb3dcblx0fTtcbn1cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJTdGF0ZXMoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKSB7XG5cdGxldCByZW5kZXJTdGF0ZXMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIGdldChzY2VuZSwgcmVuZGVyQ2FsbERlcHRoID0gMCkge1xuXHRcdGxldCByZW5kZXJTdGF0ZTtcblxuXHRcdGlmIChyZW5kZXJTdGF0ZXMuaGFzKHNjZW5lKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJlbmRlclN0YXRlID0gbmV3IFdlYkdMUmVuZGVyU3RhdGUoZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0XHRcdHJlbmRlclN0YXRlcy5zZXQoc2NlbmUsIFtyZW5kZXJTdGF0ZV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAocmVuZGVyQ2FsbERlcHRoID49IHJlbmRlclN0YXRlcy5nZXQoc2NlbmUpLmxlbmd0aCkge1xuXHRcdFx0XHRyZW5kZXJTdGF0ZSA9IG5ldyBXZWJHTFJlbmRlclN0YXRlKGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyk7XG5cdFx0XHRcdHJlbmRlclN0YXRlcy5nZXQoc2NlbmUpLnB1c2gocmVuZGVyU3RhdGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZXMuZ2V0KHNjZW5lKVtyZW5kZXJDYWxsRGVwdGhdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZW5kZXJTdGF0ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cdFx0cmVuZGVyU3RhdGVzID0gbmV3IFdlYWtNYXAoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xufVxuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqXHRkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqXHR3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqXHR3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoRGVwdGhNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ01lc2hEZXB0aE1hdGVyaWFsJztcblx0XHR0aGlzLmRlcHRoUGFja2luZyA9IEJhc2ljRGVwdGhQYWNraW5nO1xuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLmZvZyA9IGZhbHNlO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5kZXB0aFBhY2tpbmcgPSBzb3VyY2UuZGVwdGhQYWNraW5nO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoRGVwdGhNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXG4gKlx0cmVmZXJlbmNlUG9zaXRpb246IDxmbG9hdD4sXG4gKlx0bmVhckRpc3RhbmNlOiA8ZmxvYXQ+LFxuICpcdGZhckRpc3RhbmNlOiA8ZmxvYXQ+LFxuICpcbiAqXHRtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0ZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKlx0ZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PlxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoRGlzdGFuY2VNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ01lc2hEaXN0YW5jZU1hdGVyaWFsJztcblx0XHR0aGlzLnJlZmVyZW5jZVBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHR0aGlzLm5lYXJEaXN0YW5jZSA9IDE7XG5cdFx0dGhpcy5mYXJEaXN0YW5jZSA9IDEwMDA7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMuZm9nID0gZmFsc2U7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkoc291cmNlLnJlZmVyZW5jZVBvc2l0aW9uKTtcblx0XHR0aGlzLm5lYXJEaXN0YW5jZSA9IHNvdXJjZS5uZWFyRGlzdGFuY2U7XG5cdFx0dGhpcy5mYXJEaXN0YW5jZSA9IHNvdXJjZS5mYXJEaXN0YW5jZTtcblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNvdXJjZS5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50Qmlhcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hEaXN0YW5jZU1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgdmVydGV4ID0gXCJ2b2lkIG1haW4oKSB7XFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XFxufVwiO1xuY29uc3QgZnJhZ21lbnQgPSBcInVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbiNpbmNsdWRlIDxwYWNraW5nPlxcbnZvaWQgbWFpbigpIHtcXG5cXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XFxuXFx0ZmxvYXQgbWVhbiA9IDAuMDtcXG5cXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XFxuXFx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xcblxcdGZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wO1xcblxcdGZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkge1xcblxcdFxcdGZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTtcXG5cXHRcXHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXFxuXFx0XFx0XFx0dmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xcblxcdFxcdFxcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XFxuXFx0XFx0XFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xcblxcdFxcdFxcdG1lYW4gKz0gZGVwdGg7XFxuXFx0XFx0XFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdG1lYW4gPSBtZWFuIC8gc2FtcGxlcztcXG5cXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzO1xcblxcdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XFxufVwiO1xuXG5mdW5jdGlvbiBXZWJHTFNoYWRvd01hcChfcmVuZGVyZXIsIF9vYmplY3RzLCBfY2FwYWJpbGl0aWVzKSB7XG5cdGxldCBfZnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XG5cblx0Y29uc3QgX3NoYWRvd01hcFNpemUgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0XHRfdmlld3BvcnRTaXplID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0X3ZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKSxcblx0XHRcdFx0X2RlcHRoTWF0ZXJpYWwgPSBuZXcgTWVzaERlcHRoTWF0ZXJpYWwoe1xuXHRcdGRlcHRoUGFja2luZzogUkdCQURlcHRoUGFja2luZ1xuXHR9KSxcblx0XHRcdFx0X2Rpc3RhbmNlTWF0ZXJpYWwgPSBuZXcgTWVzaERpc3RhbmNlTWF0ZXJpYWwoKSxcblx0XHRcdFx0X21hdGVyaWFsQ2FjaGUgPSB7fSxcblx0XHRcdFx0X21heFRleHR1cmVTaXplID0gX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZTtcblxuXHRjb25zdCBzaGFkb3dTaWRlID0ge1xuXHRcdDA6IEJhY2tTaWRlLFxuXHRcdDE6IEZyb250U2lkZSxcblx0XHQyOiBEb3VibGVTaWRlXG5cdH07XG5cdGNvbnN0IHNoYWRvd01hdGVyaWFsVmVydGljYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdGRlZmluZXM6IHtcblx0XHRcdFZTTV9TQU1QTEVTOiA4XG5cdFx0fSxcblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0c2hhZG93X3Bhc3M6IHtcblx0XHRcdFx0dmFsdWU6IG51bGxcblx0XHRcdH0sXG5cdFx0XHRyZXNvbHV0aW9uOiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgVmVjdG9yMigpXG5cdFx0XHR9LFxuXHRcdFx0cmFkaXVzOiB7XG5cdFx0XHRcdHZhbHVlOiA0LjBcblx0XHRcdH1cblx0XHR9LFxuXHRcdHZlcnRleFNoYWRlcjogdmVydGV4LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFxuXHR9KTtcblx0Y29uc3Qgc2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsID0gc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC5jbG9uZSgpO1xuXHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1MgPSAxO1xuXHRjb25zdCBmdWxsU2NyZWVuVHJpID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdGZ1bGxTY3JlZW5Ucmkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheShbLTEsIC0xLCAwLjUsIDMsIC0xLCAwLjUsIC0xLCAzLCAwLjVdKSwgMykpO1xuXHRjb25zdCBmdWxsU2NyZWVuTWVzaCA9IG5ldyBNZXNoKGZ1bGxTY3JlZW5UcmksIHNoYWRvd01hdGVyaWFsVmVydGljYWwpO1xuXHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHR0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuXHR0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdHRoaXMudHlwZSA9IFBDRlNoYWRvd01hcDtcblxuXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uIChsaWdodHMsIHNjZW5lLCBjYW1lcmEpIHtcblx0XHRpZiAoc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0XHRpZiAoc2NvcGUuYXV0b1VwZGF0ZSA9PT0gZmFsc2UgJiYgc2NvcGUubmVlZHNVcGRhdGUgPT09IGZhbHNlKSByZXR1cm47XG5cdFx0aWYgKGxpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSBfcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRjb25zdCBhY3RpdmVDdWJlRmFjZSA9IF9yZW5kZXJlci5nZXRBY3RpdmVDdWJlRmFjZSgpO1xuXG5cdFx0Y29uc3QgYWN0aXZlTWlwbWFwTGV2ZWwgPSBfcmVuZGVyZXIuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKTtcblxuXHRcdGNvbnN0IF9zdGF0ZSA9IF9yZW5kZXJlci5zdGF0ZTsgLy8gU2V0IEdMIHN0YXRlIGZvciBkZXB0aCBtYXAuXG5cblx0XHRfc3RhdGUuc2V0QmxlbmRpbmcoTm9CbGVuZGluZyk7XG5cblx0XHRfc3RhdGUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLCAxLCAxLCAxKTtcblxuXHRcdF9zdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QodHJ1ZSk7XG5cblx0XHRfc3RhdGUuc2V0U2Npc3NvclRlc3QoZmFsc2UpOyAvLyByZW5kZXIgZGVwdGggbWFwXG5cblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcblx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblxuXHRcdFx0aWYgKHNoYWRvdyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xTaGFkb3dNYXA6JywgbGlnaHQsICdoYXMgbm8gc2hhZG93LicpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNoYWRvdy5hdXRvVXBkYXRlID09PSBmYWxzZSAmJiBzaGFkb3cubmVlZHNVcGRhdGUgPT09IGZhbHNlKSBjb250aW51ZTtcblxuXHRcdFx0X3NoYWRvd01hcFNpemUuY29weShzaGFkb3cubWFwU2l6ZSk7XG5cblx0XHRcdGNvbnN0IHNoYWRvd0ZyYW1lRXh0ZW50cyA9IHNoYWRvdy5nZXRGcmFtZUV4dGVudHMoKTtcblxuXHRcdFx0X3NoYWRvd01hcFNpemUubXVsdGlwbHkoc2hhZG93RnJhbWVFeHRlbnRzKTtcblxuXHRcdFx0X3ZpZXdwb3J0U2l6ZS5jb3B5KHNoYWRvdy5tYXBTaXplKTtcblxuXHRcdFx0aWYgKF9zaGFkb3dNYXBTaXplLnggPiBfbWF4VGV4dHVyZVNpemUgfHwgX3NoYWRvd01hcFNpemUueSA+IF9tYXhUZXh0dXJlU2l6ZSkge1xuXHRcdFx0XHRpZiAoX3NoYWRvd01hcFNpemUueCA+IF9tYXhUZXh0dXJlU2l6ZSkge1xuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueCA9IE1hdGguZmxvb3IoX21heFRleHR1cmVTaXplIC8gc2hhZG93RnJhbWVFeHRlbnRzLngpO1xuXHRcdFx0XHRcdF9zaGFkb3dNYXBTaXplLnggPSBfdmlld3BvcnRTaXplLnggKiBzaGFkb3dGcmFtZUV4dGVudHMueDtcblx0XHRcdFx0XHRzaGFkb3cubWFwU2l6ZS54ID0gX3ZpZXdwb3J0U2l6ZS54O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKF9zaGFkb3dNYXBTaXplLnkgPiBfbWF4VGV4dHVyZVNpemUpIHtcblx0XHRcdFx0XHRfdmlld3BvcnRTaXplLnkgPSBNYXRoLmZsb29yKF9tYXhUZXh0dXJlU2l6ZSAvIHNoYWRvd0ZyYW1lRXh0ZW50cy55KTtcblx0XHRcdFx0XHRfc2hhZG93TWFwU2l6ZS55ID0gX3ZpZXdwb3J0U2l6ZS55ICogc2hhZG93RnJhbWVFeHRlbnRzLnk7XG5cdFx0XHRcdFx0c2hhZG93Lm1hcFNpemUueSA9IF92aWV3cG9ydFNpemUueTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2hhZG93Lm1hcCA9PT0gbnVsbCAmJiAhc2hhZG93LmlzUG9pbnRMaWdodFNoYWRvdyAmJiB0aGlzLnR5cGUgPT09IFZTTVNoYWRvd01hcCkge1xuXHRcdFx0XHRjb25zdCBwYXJzID0ge1xuXHRcdFx0XHRcdG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0XHRcdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzaGFkb3cubWFwID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KF9zaGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMpO1xuXHRcdFx0XHRzaGFkb3cubWFwLnRleHR1cmUubmFtZSA9IGxpZ2h0Lm5hbWUgKyAnLnNoYWRvd01hcCc7XG5cdFx0XHRcdHNoYWRvdy5tYXBQYXNzID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KF9zaGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMpO1xuXHRcdFx0XHRzaGFkb3cuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNoYWRvdy5tYXAgPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgcGFycyA9IHtcblx0XHRcdFx0XHRtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXG5cdFx0XHRcdFx0bWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxuXHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzaGFkb3cubWFwID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KF9zaGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMpO1xuXHRcdFx0XHRzaGFkb3cubWFwLnRleHR1cmUubmFtZSA9IGxpZ2h0Lm5hbWUgKyAnLnNoYWRvd01hcCc7XG5cdFx0XHRcdHNoYWRvdy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHNoYWRvdy5tYXApO1xuXG5cdFx0XHRfcmVuZGVyZXIuY2xlYXIoKTtcblxuXHRcdFx0Y29uc3Qgdmlld3BvcnRDb3VudCA9IHNoYWRvdy5nZXRWaWV3cG9ydENvdW50KCk7XG5cblx0XHRcdGZvciAobGV0IHZwID0gMDsgdnAgPCB2aWV3cG9ydENvdW50OyB2cCsrKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdwb3J0ID0gc2hhZG93LmdldFZpZXdwb3J0KHZwKTtcblxuXHRcdFx0XHRfdmlld3BvcnQuc2V0KF92aWV3cG9ydFNpemUueCAqIHZpZXdwb3J0LngsIF92aWV3cG9ydFNpemUueSAqIHZpZXdwb3J0LnksIF92aWV3cG9ydFNpemUueCAqIHZpZXdwb3J0LnosIF92aWV3cG9ydFNpemUueSAqIHZpZXdwb3J0LncpO1xuXG5cdFx0XHRcdF9zdGF0ZS52aWV3cG9ydChfdmlld3BvcnQpO1xuXG5cdFx0XHRcdHNoYWRvdy51cGRhdGVNYXRyaWNlcyhsaWdodCwgdnApO1xuXHRcdFx0XHRfZnJ1c3R1bSA9IHNoYWRvdy5nZXRGcnVzdHVtKCk7XG5cdFx0XHRcdHJlbmRlck9iamVjdChzY2VuZSwgY2FtZXJhLCBzaGFkb3cuY2FtZXJhLCBsaWdodCwgdGhpcy50eXBlKTtcblx0XHRcdH0gLy8gZG8gYmx1ciBwYXNzIGZvciBWU01cblxuXG5cdFx0XHRpZiAoIXNoYWRvdy5pc1BvaW50TGlnaHRTaGFkb3cgJiYgdGhpcy50eXBlID09PSBWU01TaGFkb3dNYXApIHtcblx0XHRcdFx0VlNNUGFzcyhzaGFkb3csIGNhbWVyYSk7XG5cdFx0XHR9XG5cblx0XHRcdHNoYWRvdy5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHNjb3BlLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGN1cnJlbnRSZW5kZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlLCBhY3RpdmVNaXBtYXBMZXZlbCk7XG5cdH07XG5cblx0ZnVuY3Rpb24gVlNNUGFzcyhzaGFkb3csIGNhbWVyYSkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gX29iamVjdHMudXBkYXRlKGZ1bGxTY3JlZW5NZXNoKTtcblxuXHRcdGlmIChzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLmRlZmluZXMuVlNNX1NBTVBMRVMgIT09IHNoYWRvdy5ibHVyU2FtcGxlcykge1xuXHRcdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC5kZWZpbmVzLlZTTV9TQU1QTEVTID0gc2hhZG93LmJsdXJTYW1wbGVzO1xuXHRcdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLmRlZmluZXMuVlNNX1NBTVBMRVMgPSBzaGFkb3cuYmx1clNhbXBsZXM7XG5cdFx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fSAvLyB2ZXJ0aWNhbCBwYXNzXG5cblxuXHRcdHNoYWRvd01hdGVyaWFsVmVydGljYWwudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWUgPSBzaGFkb3cubWFwLnRleHR1cmU7XG5cdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlID0gc2hhZG93Lm1hcFNpemU7XG5cdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSBzaGFkb3cucmFkaXVzO1xuXG5cdFx0X3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChzaGFkb3cubWFwUGFzcyk7XG5cblx0XHRfcmVuZGVyZXIuY2xlYXIoKTtcblxuXHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3QoY2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgc2hhZG93TWF0ZXJpYWxWZXJ0aWNhbCwgZnVsbFNjcmVlbk1lc2gsIG51bGwpOyAvLyBob3Jpem9udGFsIHBhc3NcblxuXG5cdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlID0gc2hhZG93Lm1hcFBhc3MudGV4dHVyZTtcblx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZSA9IHNoYWRvdy5tYXBTaXplO1xuXHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSBzaGFkb3cucmFkaXVzO1xuXG5cdFx0X3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChzaGFkb3cubWFwKTtcblxuXHRcdF9yZW5kZXJlci5jbGVhcigpO1xuXG5cdFx0X3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRpcmVjdChjYW1lcmEsIG51bGwsIGdlb21ldHJ5LCBzaGFkb3dNYXRlcmlhbEhvcml6b250YWwsIGZ1bGxTY3JlZW5NZXNoLCBudWxsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldERlcHRoTWF0ZXJpYWwob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGxpZ2h0LCBzaGFkb3dDYW1lcmFOZWFyLCBzaGFkb3dDYW1lcmFGYXIsIHR5cGUpIHtcblx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0XHRjb25zdCBjdXN0b21NYXRlcmlhbCA9IGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSA/IG9iamVjdC5jdXN0b21EaXN0YW5jZU1hdGVyaWFsIDogb2JqZWN0LmN1c3RvbURlcHRoTWF0ZXJpYWw7XG5cblx0XHRpZiAoY3VzdG9tTWF0ZXJpYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVzdWx0ID0gY3VzdG9tTWF0ZXJpYWw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IGxpZ2h0LmlzUG9pbnRMaWdodCA9PT0gdHJ1ZSA/IF9kaXN0YW5jZU1hdGVyaWFsIDogX2RlcHRoTWF0ZXJpYWw7XG5cdFx0fVxuXG5cdFx0aWYgKF9yZW5kZXJlci5sb2NhbENsaXBwaW5nRW5hYmxlZCAmJiBtYXRlcmlhbC5jbGlwU2hhZG93cyA9PT0gdHJ1ZSAmJiBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcy5sZW5ndGggIT09IDAgfHwgbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICYmIG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlICE9PSAwIHx8IG1hdGVyaWFsLmFscGhhTWFwICYmIG1hdGVyaWFsLmFscGhhVGVzdCA+IDApIHtcblx0XHRcdC8vIGluIHRoaXMgY2FzZSB3ZSBuZWVkIGEgdW5pcXVlIG1hdGVyaWFsIGluc3RhbmNlIHJlZmxlY3RpbmcgdGhlXG5cdFx0XHQvLyBhcHByb3ByaWF0ZSBzdGF0ZVxuXHRcdFx0Y29uc3Qga2V5QSA9IHJlc3VsdC51dWlkLFxuXHRcdFx0XHRcdFx0a2V5QiA9IG1hdGVyaWFsLnV1aWQ7XG5cdFx0XHRsZXQgbWF0ZXJpYWxzRm9yVmFyaWFudCA9IF9tYXRlcmlhbENhY2hlW2tleUFdO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWxzRm9yVmFyaWFudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1hdGVyaWFsc0ZvclZhcmlhbnQgPSB7fTtcblx0XHRcdFx0X21hdGVyaWFsQ2FjaGVba2V5QV0gPSBtYXRlcmlhbHNGb3JWYXJpYW50O1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY2FjaGVkTWF0ZXJpYWwgPSBtYXRlcmlhbHNGb3JWYXJpYW50W2tleUJdO1xuXG5cdFx0XHRpZiAoY2FjaGVkTWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjYWNoZWRNYXRlcmlhbCA9IHJlc3VsdC5jbG9uZSgpO1xuXHRcdFx0XHRtYXRlcmlhbHNGb3JWYXJpYW50W2tleUJdID0gY2FjaGVkTWF0ZXJpYWw7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IGNhY2hlZE1hdGVyaWFsO1xuXHRcdH1cblxuXHRcdHJlc3VsdC52aXNpYmxlID0gbWF0ZXJpYWwudmlzaWJsZTtcblx0XHRyZXN1bHQud2lyZWZyYW1lID0gbWF0ZXJpYWwud2lyZWZyYW1lO1xuXG5cdFx0aWYgKHR5cGUgPT09IFZTTVNoYWRvd01hcCkge1xuXHRcdFx0cmVzdWx0LnNpZGUgPSBtYXRlcmlhbC5zaGFkb3dTaWRlICE9PSBudWxsID8gbWF0ZXJpYWwuc2hhZG93U2lkZSA6IG1hdGVyaWFsLnNpZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdC5zaWRlID0gbWF0ZXJpYWwuc2hhZG93U2lkZSAhPT0gbnVsbCA/IG1hdGVyaWFsLnNoYWRvd1NpZGUgOiBzaGFkb3dTaWRlW21hdGVyaWFsLnNpZGVdO1xuXHRcdH1cblxuXHRcdHJlc3VsdC5hbHBoYU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXHRcdHJlc3VsdC5hbHBoYVRlc3QgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cdFx0cmVzdWx0LmNsaXBTaGFkb3dzID0gbWF0ZXJpYWwuY2xpcFNoYWRvd3M7XG5cdFx0cmVzdWx0LmNsaXBwaW5nUGxhbmVzID0gbWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXM7XG5cdFx0cmVzdWx0LmNsaXBJbnRlcnNlY3Rpb24gPSBtYXRlcmlhbC5jbGlwSW50ZXJzZWN0aW9uO1xuXHRcdHJlc3VsdC5kaXNwbGFjZW1lbnRNYXAgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudFNjYWxlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudEJpYXMgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHJlc3VsdC53aXJlZnJhbWVMaW5ld2lkdGggPSBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0cmVzdWx0LmxpbmV3aWR0aCA9IG1hdGVyaWFsLmxpbmV3aWR0aDtcblxuXHRcdGlmIChsaWdodC5pc1BvaW50TGlnaHQgPT09IHRydWUgJiYgcmVzdWx0LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgPT09IHRydWUpIHtcblx0XHRcdHJlc3VsdC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXHRcdFx0cmVzdWx0Lm5lYXJEaXN0YW5jZSA9IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRyZXN1bHQuZmFyRGlzdGFuY2UgPSBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlck9iamVjdChvYmplY3QsIGNhbWVyYSwgc2hhZG93Q2FtZXJhLCBsaWdodCwgdHlwZSkge1xuXHRcdGlmIChvYmplY3QudmlzaWJsZSA9PT0gZmFsc2UpIHJldHVybjtcblx0XHRjb25zdCB2aXNpYmxlID0gb2JqZWN0LmxheWVycy50ZXN0KGNhbWVyYS5sYXllcnMpO1xuXG5cdFx0aWYgKHZpc2libGUgJiYgKG9iamVjdC5pc01lc2ggfHwgb2JqZWN0LmlzTGluZSB8fCBvYmplY3QuaXNQb2ludHMpKSB7XG5cdFx0XHRpZiAoKG9iamVjdC5jYXN0U2hhZG93IHx8IG9iamVjdC5yZWNlaXZlU2hhZG93ICYmIHR5cGUgPT09IFZTTVNoYWRvd01hcCkgJiYgKCFvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KG9iamVjdCkpKSB7XG5cdFx0XHRcdG9iamVjdC5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhzaGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLCBvYmplY3QubWF0cml4V29ybGQpO1xuXG5cdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gX29iamVjdHMudXBkYXRlKG9iamVjdCk7XG5cblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDAsIGtsID0gZ3JvdXBzLmxlbmd0aDsgayA8IGtsOyBrKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2tdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsW2dyb3VwLm1hdGVyaWFsSW5kZXhdO1xuXG5cdFx0XHRcdFx0XHRpZiAoZ3JvdXBNYXRlcmlhbCAmJiBncm91cE1hdGVyaWFsLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVwdGhNYXRlcmlhbCA9IGdldERlcHRoTWF0ZXJpYWwob2JqZWN0LCBnZW9tZXRyeSwgZ3JvdXBNYXRlcmlhbCwgbGlnaHQsIHNoYWRvd0NhbWVyYS5uZWFyLCBzaGFkb3dDYW1lcmEuZmFyLCB0eXBlKTtcblxuXHRcdFx0XHRcdFx0XHRfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KHNoYWRvd0NhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIGRlcHRoTWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbC52aXNpYmxlKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVwdGhNYXRlcmlhbCA9IGdldERlcHRoTWF0ZXJpYWwob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGxpZ2h0LCBzaGFkb3dDYW1lcmEubmVhciwgc2hhZG93Q2FtZXJhLmZhciwgdHlwZSk7XG5cblx0XHRcdFx0XHRfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KHNoYWRvd0NhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIGRlcHRoTWF0ZXJpYWwsIG9iamVjdCwgbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRyZW5kZXJPYmplY3QoY2hpbGRyZW5baV0sIGNhbWVyYSwgc2hhZG93Q2FtZXJhLCBsaWdodCwgdHlwZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIFdlYkdMU3RhdGUoZ2wsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblxuXHRmdW5jdGlvbiBDb2xvckJ1ZmZlcigpIHtcblx0XHRsZXQgbG9ja2VkID0gZmFsc2U7XG5cdFx0Y29uc3QgY29sb3IgPSBuZXcgVmVjdG9yNCgpO1xuXHRcdGxldCBjdXJyZW50Q29sb3JNYXNrID0gbnVsbDtcblx0XHRjb25zdCBjdXJyZW50Q29sb3JDbGVhciA9IG5ldyBWZWN0b3I0KDAsIDAsIDAsIDApO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoY29sb3JNYXNrKSB7XG5cdFx0XHRcdGlmIChjdXJyZW50Q29sb3JNYXNrICE9PSBjb2xvck1hc2sgJiYgIWxvY2tlZCkge1xuXHRcdFx0XHRcdGdsLmNvbG9yTWFzayhjb2xvck1hc2ssIGNvbG9yTWFzaywgY29sb3JNYXNrLCBjb2xvck1hc2spO1xuXHRcdFx0XHRcdGN1cnJlbnRDb2xvck1hc2sgPSBjb2xvck1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRMb2NrZWQ6IGZ1bmN0aW9uIChsb2NrKSB7XG5cdFx0XHRcdGxvY2tlZCA9IGxvY2s7XG5cdFx0XHR9LFxuXHRcdFx0c2V0Q2xlYXI6IGZ1bmN0aW9uIChyLCBnLCBiLCBhLCBwcmVtdWx0aXBsaWVkQWxwaGEpIHtcblx0XHRcdFx0aWYgKHByZW11bHRpcGxpZWRBbHBoYSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHIgKj0gYTtcblx0XHRcdFx0XHRnICo9IGE7XG5cdFx0XHRcdFx0YiAqPSBhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sb3Iuc2V0KHIsIGcsIGIsIGEpO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50Q29sb3JDbGVhci5lcXVhbHMoY29sb3IpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG5cdFx0XHRcdFx0Y3VycmVudENvbG9yQ2xlYXIuY29weShjb2xvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBmYWxzZTtcblx0XHRcdFx0Y3VycmVudENvbG9yTWFzayA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRDb2xvckNsZWFyLnNldCgtMSwgMCwgMCwgMCk7IC8vIHNldCB0byBpbnZhbGlkIHN0YXRlXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIERlcHRoQnVmZmVyKCkge1xuXHRcdGxldCBsb2NrZWQgPSBmYWxzZTtcblx0XHRsZXQgY3VycmVudERlcHRoTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnREZXB0aEZ1bmMgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50RGVwdGhDbGVhciA9IG51bGw7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNldFRlc3Q6IGZ1bmN0aW9uIChkZXB0aFRlc3QpIHtcblx0XHRcdFx0aWYgKGRlcHRoVGVzdCkge1xuXHRcdFx0XHRcdGVuYWJsZShnbC5ERVBUSF9URVNUKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0TWFzazogZnVuY3Rpb24gKGRlcHRoTWFzaykge1xuXHRcdFx0XHRpZiAoY3VycmVudERlcHRoTWFzayAhPT0gZGVwdGhNYXNrICYmICFsb2NrZWQpIHtcblx0XHRcdFx0XHRnbC5kZXB0aE1hc2soZGVwdGhNYXNrKTtcblx0XHRcdFx0XHRjdXJyZW50RGVwdGhNYXNrID0gZGVwdGhNYXNrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0RnVuYzogZnVuY3Rpb24gKGRlcHRoRnVuYykge1xuXHRcdFx0XHRpZiAoY3VycmVudERlcHRoRnVuYyAhPT0gZGVwdGhGdW5jKSB7XG5cdFx0XHRcdFx0aWYgKGRlcHRoRnVuYykge1xuXHRcdFx0XHRcdFx0c3dpdGNoIChkZXB0aEZ1bmMpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBOZXZlckRlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5ORVZFUik7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBBbHdheXNEZXB0aDpcblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuQUxXQVlTKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIExlc3NEZXB0aDpcblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuTEVTUyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBMZXNzRXF1YWxEZXB0aDpcblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIEVxdWFsRGVwdGg6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLkVRVUFMKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIEdyZWF0ZXJFcXVhbERlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5HRVFVQUwpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgR3JlYXRlckRlcHRoOlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5HUkVBVEVSKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIE5vdEVxdWFsRGVwdGg6XG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKGdsLk5PVEVRVUFMKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdGdsLmRlcHRoRnVuYyhnbC5MRVFVQUwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdXJyZW50RGVwdGhGdW5jID0gZGVwdGhGdW5jO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0TG9ja2VkOiBmdW5jdGlvbiAobG9jaykge1xuXHRcdFx0XHRsb2NrZWQgPSBsb2NrO1xuXHRcdFx0fSxcblx0XHRcdHNldENsZWFyOiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnREZXB0aENsZWFyICE9PSBkZXB0aCkge1xuXHRcdFx0XHRcdGdsLmNsZWFyRGVwdGgoZGVwdGgpO1xuXHRcdFx0XHRcdGN1cnJlbnREZXB0aENsZWFyID0gZGVwdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBmYWxzZTtcblx0XHRcdFx0Y3VycmVudERlcHRoTWFzayA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnREZXB0aEZ1bmMgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50RGVwdGhDbGVhciA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIFN0ZW5jaWxCdWZmZXIoKSB7XG5cdFx0bGV0IGxvY2tlZCA9IGZhbHNlO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbE1hc2sgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbEZ1bmMgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFJlZiA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbEZhaWwgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFpGYWlsID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxaUGFzcyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsQ2xlYXIgPSBudWxsO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZXRUZXN0OiBmdW5jdGlvbiAoc3RlbmNpbFRlc3QpIHtcblx0XHRcdFx0aWYgKCFsb2NrZWQpIHtcblx0XHRcdFx0XHRpZiAoc3RlbmNpbFRlc3QpIHtcblx0XHRcdFx0XHRcdGVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0TWFzazogZnVuY3Rpb24gKHN0ZW5jaWxNYXNrKSB7XG5cdFx0XHRcdGlmIChjdXJyZW50U3RlbmNpbE1hc2sgIT09IHN0ZW5jaWxNYXNrICYmICFsb2NrZWQpIHtcblx0XHRcdFx0XHRnbC5zdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXRGdW5jOiBmdW5jdGlvbiAoc3RlbmNpbEZ1bmMsIHN0ZW5jaWxSZWYsIHN0ZW5jaWxNYXNrKSB7XG5cdFx0XHRcdGlmIChjdXJyZW50U3RlbmNpbEZ1bmMgIT09IHN0ZW5jaWxGdW5jIHx8IGN1cnJlbnRTdGVuY2lsUmVmICE9PSBzdGVuY2lsUmVmIHx8IGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgIT09IHN0ZW5jaWxNYXNrKSB7XG5cdFx0XHRcdFx0Z2wuc3RlbmNpbEZ1bmMoc3RlbmNpbEZ1bmMsIHN0ZW5jaWxSZWYsIHN0ZW5jaWxNYXNrKTtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmMgPSBzdGVuY2lsRnVuYztcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbFJlZiA9IHN0ZW5jaWxSZWY7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGdW5jTWFzayA9IHN0ZW5jaWxNYXNrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2V0T3A6IGZ1bmN0aW9uIChzdGVuY2lsRmFpbCwgc3RlbmNpbFpGYWlsLCBzdGVuY2lsWlBhc3MpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRTdGVuY2lsRmFpbCAhPT0gc3RlbmNpbEZhaWwgfHwgY3VycmVudFN0ZW5jaWxaRmFpbCAhPT0gc3RlbmNpbFpGYWlsIHx8IGN1cnJlbnRTdGVuY2lsWlBhc3MgIT09IHN0ZW5jaWxaUGFzcykge1xuXHRcdFx0XHRcdGdsLnN0ZW5jaWxPcChzdGVuY2lsRmFpbCwgc3RlbmNpbFpGYWlsLCBzdGVuY2lsWlBhc3MpO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWlsO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsWkZhaWwgPSBzdGVuY2lsWkZhaWw7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaUGFzcyA9IHN0ZW5jaWxaUGFzcztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNldExvY2tlZDogZnVuY3Rpb24gKGxvY2spIHtcblx0XHRcdFx0bG9ja2VkID0gbG9jaztcblx0XHRcdH0sXG5cdFx0XHRzZXRDbGVhcjogZnVuY3Rpb24gKHN0ZW5jaWwpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRTdGVuY2lsQ2xlYXIgIT09IHN0ZW5jaWwpIHtcblx0XHRcdFx0XHRnbC5jbGVhclN0ZW5jaWwoc3RlbmNpbCk7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxDbGVhciA9IHN0ZW5jaWw7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBmYWxzZTtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGdW5jID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxSZWYgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmNNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGYWlsID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaRmFpbCA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsWlBhc3MgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbENsZWFyID0gbnVsbDtcblx0XHRcdH1cblx0XHR9O1xuXHR9IC8vXG5cblxuXHRjb25zdCBjb2xvckJ1ZmZlciA9IG5ldyBDb2xvckJ1ZmZlcigpO1xuXHRjb25zdCBkZXB0aEJ1ZmZlciA9IG5ldyBEZXB0aEJ1ZmZlcigpO1xuXHRjb25zdCBzdGVuY2lsQnVmZmVyID0gbmV3IFN0ZW5jaWxCdWZmZXIoKTtcblx0bGV0IGVuYWJsZWRDYXBhYmlsaXRpZXMgPSB7fTtcblx0bGV0IGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVycyA9IHt9O1xuXHRsZXQgY3VycmVudERyYXdidWZmZXJzID0gbmV3IFdlYWtNYXAoKTtcblx0bGV0IGRlZmF1bHREcmF3YnVmZmVycyA9IFtdO1xuXHRsZXQgY3VycmVudFByb2dyYW0gPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRsZXQgY3VycmVudEJsZW5kaW5nID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZFNyYyA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmREc3QgPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBmYWxzZTtcblx0bGV0IGN1cnJlbnRGbGlwU2lkZWQgPSBudWxsO1xuXHRsZXQgY3VycmVudEN1bGxGYWNlID0gbnVsbDtcblx0bGV0IGN1cnJlbnRMaW5lV2lkdGggPSBudWxsO1xuXHRsZXQgY3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgPSBudWxsO1xuXHRsZXQgY3VycmVudFBvbHlnb25PZmZzZXRVbml0cyA9IG51bGw7XG5cdGNvbnN0IG1heFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblx0bGV0IGxpbmVXaWR0aEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRsZXQgdmVyc2lvbiA9IDA7XG5cdGNvbnN0IGdsVmVyc2lvbiA9IGdsLmdldFBhcmFtZXRlcihnbC5WRVJTSU9OKTtcblxuXHRpZiAoZ2xWZXJzaW9uLmluZGV4T2YoJ1dlYkdMJykgIT09IC0xKSB7XG5cdFx0dmVyc2lvbiA9IHBhcnNlRmxvYXQoL15XZWJHTCAoXFxkKS8uZXhlYyhnbFZlcnNpb24pWzFdKTtcblx0XHRsaW5lV2lkdGhBdmFpbGFibGUgPSB2ZXJzaW9uID49IDEuMDtcblx0fSBlbHNlIGlmIChnbFZlcnNpb24uaW5kZXhPZignT3BlbkdMIEVTJykgIT09IC0xKSB7XG5cdFx0dmVyc2lvbiA9IHBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxcZCkvLmV4ZWMoZ2xWZXJzaW9uKVsxXSk7XG5cdFx0bGluZVdpZHRoQXZhaWxhYmxlID0gdmVyc2lvbiA+PSAyLjA7XG5cdH1cblxuXHRsZXQgY3VycmVudFRleHR1cmVTbG90ID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCb3VuZFRleHR1cmVzID0ge307XG5cdGNvbnN0IHNjaXNzb3JQYXJhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5TQ0lTU09SX0JPWCk7XG5cdGNvbnN0IHZpZXdwb3J0UGFyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuVklFV1BPUlQpO1xuXHRjb25zdCBjdXJyZW50U2Npc3NvciA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KHNjaXNzb3JQYXJhbSk7XG5cdGNvbnN0IGN1cnJlbnRWaWV3cG9ydCA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KHZpZXdwb3J0UGFyYW0pO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZVRleHR1cmUodHlwZSwgdGFyZ2V0LCBjb3VudCkge1xuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheSg0KTsgLy8gNCBpcyByZXF1aXJlZCB0byBtYXRjaCBkZWZhdWx0IHVucGFjayBhbGlnbm1lbnQgb2YgNC5cblxuXHRcdGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cdFx0Z2wuYmluZFRleHR1cmUodHlwZSwgdGV4dHVyZSk7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaSh0eXBlLCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpO1xuXHRcdGdsLnRleFBhcmFtZXRlcmkodHlwZSwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0Z2wudGV4SW1hZ2UyRCh0YXJnZXQgKyBpLCAwLCBnbC5SR0JBLCAxLCAxLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBkYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdGNvbnN0IGVtcHR5VGV4dHVyZXMgPSB7fTtcblx0ZW1wdHlUZXh0dXJlc1tnbC5URVhUVVJFXzJEXSA9IGNyZWF0ZVRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV8yRCwgMSk7XG5cdGVtcHR5VGV4dHVyZXNbZ2wuVEVYVFVSRV9DVUJFX01BUF0gPSBjcmVhdGVUZXh0dXJlKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgNik7IC8vIGluaXRcblxuXHRjb2xvckJ1ZmZlci5zZXRDbGVhcigwLCAwLCAwLCAxKTtcblx0ZGVwdGhCdWZmZXIuc2V0Q2xlYXIoMSk7XG5cdHN0ZW5jaWxCdWZmZXIuc2V0Q2xlYXIoMCk7XG5cdGVuYWJsZShnbC5ERVBUSF9URVNUKTtcblx0ZGVwdGhCdWZmZXIuc2V0RnVuYyhMZXNzRXF1YWxEZXB0aCk7XG5cdHNldEZsaXBTaWRlZChmYWxzZSk7XG5cdHNldEN1bGxGYWNlKEN1bGxGYWNlQmFjayk7XG5cdGVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuXHRzZXRCbGVuZGluZyhOb0JsZW5kaW5nKTsgLy9cblxuXHRmdW5jdGlvbiBlbmFibGUoaWQpIHtcblx0XHRpZiAoZW5hYmxlZENhcGFiaWxpdGllc1tpZF0gIT09IHRydWUpIHtcblx0XHRcdGdsLmVuYWJsZShpZCk7XG5cdFx0XHRlbmFibGVkQ2FwYWJpbGl0aWVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzYWJsZShpZCkge1xuXHRcdGlmIChlbmFibGVkQ2FwYWJpbGl0aWVzW2lkXSAhPT0gZmFsc2UpIHtcblx0XHRcdGdsLmRpc2FibGUoaWQpO1xuXHRcdFx0ZW5hYmxlZENhcGFiaWxpdGllc1tpZF0gPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmcmFtZWJ1ZmZlcikge1xuXHRcdGlmIChjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnNbdGFyZ2V0XSAhPT0gZnJhbWVidWZmZXIpIHtcblx0XHRcdGdsLmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTtcblx0XHRcdGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1t0YXJnZXRdID0gZnJhbWVidWZmZXI7XG5cblx0XHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0XHQvLyBnbC5EUkFXX0ZSQU1FQlVGRkVSIGlzIGVxdWl2YWxlbnQgdG8gZ2wuRlJBTUVCVUZGRVJcblx0XHRcdFx0aWYgKHRhcmdldCA9PT0gZ2wuRFJBV19GUkFNRUJVRkZFUikge1xuXHRcdFx0XHRcdGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1tnbC5GUkFNRUJVRkZFUl0gPSBmcmFtZWJ1ZmZlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPT09IGdsLkZSQU1FQlVGRkVSKSB7XG5cdFx0XHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzW2dsLkRSQVdfRlJBTUVCVUZGRVJdID0gZnJhbWVidWZmZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gZHJhd0J1ZmZlcnMocmVuZGVyVGFyZ2V0LCBmcmFtZWJ1ZmZlcikge1xuXHRcdGxldCBkcmF3QnVmZmVycyA9IGRlZmF1bHREcmF3YnVmZmVycztcblx0XHRsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQpIHtcblx0XHRcdGRyYXdCdWZmZXJzID0gY3VycmVudERyYXdidWZmZXJzLmdldChmcmFtZWJ1ZmZlcik7XG5cblx0XHRcdGlmIChkcmF3QnVmZmVycyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRyYXdCdWZmZXJzID0gW107XG5cdFx0XHRcdGN1cnJlbnREcmF3YnVmZmVycy5zZXQoZnJhbWVidWZmZXIsIGRyYXdCdWZmZXJzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKSB7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdFx0aWYgKGRyYXdCdWZmZXJzLmxlbmd0aCAhPT0gdGV4dHVyZXMubGVuZ3RoIHx8IGRyYXdCdWZmZXJzWzBdICE9PSBnbC5DT0xPUl9BVFRBQ0hNRU5UMCkge1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRcdGRyYXdCdWZmZXJzW2ldID0gZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyBpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRyYXdCdWZmZXJzLmxlbmd0aCA9IHRleHR1cmVzLmxlbmd0aDtcblx0XHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChkcmF3QnVmZmVyc1swXSAhPT0gZ2wuQ09MT1JfQVRUQUNITUVOVDApIHtcblx0XHRcdFx0XHRkcmF3QnVmZmVyc1swXSA9IGdsLkNPTE9SX0FUVEFDSE1FTlQwO1xuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZHJhd0J1ZmZlcnNbMF0gIT09IGdsLkJBQ0spIHtcblx0XHRcdFx0ZHJhd0J1ZmZlcnNbMF0gPSBnbC5CQUNLO1xuXHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG5lZWRzVXBkYXRlKSB7XG5cdFx0XHRpZiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyKSB7XG5cdFx0XHRcdGdsLmRyYXdCdWZmZXJzKGRyYXdCdWZmZXJzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9kcmF3X2J1ZmZlcnMnKS5kcmF3QnVmZmVyc1dFQkdMKGRyYXdCdWZmZXJzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1c2VQcm9ncmFtKHByb2dyYW0pIHtcblx0XHRpZiAoY3VycmVudFByb2dyYW0gIT09IHByb2dyYW0pIHtcblx0XHRcdGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XG5cdFx0XHRjdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBlcXVhdGlvblRvR0wgPSB7XG5cdFx0W0FkZEVxdWF0aW9uXTogZ2wuRlVOQ19BREQsXG5cdFx0W1N1YnRyYWN0RXF1YXRpb25dOiBnbC5GVU5DX1NVQlRSQUNULFxuXHRcdFtSZXZlcnNlU3VidHJhY3RFcXVhdGlvbl06IGdsLkZVTkNfUkVWRVJTRV9TVUJUUkFDVFxuXHR9O1xuXG5cdGlmIChpc1dlYkdMMikge1xuXHRcdGVxdWF0aW9uVG9HTFtNaW5FcXVhdGlvbl0gPSBnbC5NSU47XG5cdFx0ZXF1YXRpb25Ub0dMW01heEVxdWF0aW9uXSA9IGdsLk1BWDtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnRVhUX2JsZW5kX21pbm1heCcpO1xuXG5cdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0ZXF1YXRpb25Ub0dMW01pbkVxdWF0aW9uXSA9IGV4dGVuc2lvbi5NSU5fRVhUO1xuXHRcdFx0ZXF1YXRpb25Ub0dMW01heEVxdWF0aW9uXSA9IGV4dGVuc2lvbi5NQVhfRVhUO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGZhY3RvclRvR0wgPSB7XG5cdFx0W1plcm9GYWN0b3JdOiBnbC5aRVJPLFxuXHRcdFtPbmVGYWN0b3JdOiBnbC5PTkUsXG5cdFx0W1NyY0NvbG9yRmFjdG9yXTogZ2wuU1JDX0NPTE9SLFxuXHRcdFtTcmNBbHBoYUZhY3Rvcl06IGdsLlNSQ19BTFBIQSxcblx0XHRbU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcl06IGdsLlNSQ19BTFBIQV9TQVRVUkFURSxcblx0XHRbRHN0Q29sb3JGYWN0b3JdOiBnbC5EU1RfQ09MT1IsXG5cdFx0W0RzdEFscGhhRmFjdG9yXTogZ2wuRFNUX0FMUEhBLFxuXHRcdFtPbmVNaW51c1NyY0NvbG9yRmFjdG9yXTogZ2wuT05FX01JTlVTX1NSQ19DT0xPUixcblx0XHRbT25lTWludXNTcmNBbHBoYUZhY3Rvcl06IGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsXG5cdFx0W09uZU1pbnVzRHN0Q29sb3JGYWN0b3JdOiBnbC5PTkVfTUlOVVNfRFNUX0NPTE9SLFxuXHRcdFtPbmVNaW51c0RzdEFscGhhRmFjdG9yXTogZ2wuT05FX01JTlVTX0RTVF9BTFBIQVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHNldEJsZW5kaW5nKGJsZW5kaW5nLCBibGVuZEVxdWF0aW9uLCBibGVuZFNyYywgYmxlbmREc3QsIGJsZW5kRXF1YXRpb25BbHBoYSwgYmxlbmRTcmNBbHBoYSwgYmxlbmREc3RBbHBoYSwgcHJlbXVsdGlwbGllZEFscGhhKSB7XG5cdFx0aWYgKGJsZW5kaW5nID09PSBOb0JsZW5kaW5nKSB7XG5cdFx0XHRpZiAoY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRkaXNhYmxlKGdsLkJMRU5EKTtcblx0XHRcdFx0Y3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRlbmFibGUoZ2wuQkxFTkQpO1xuXHRcdFx0Y3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGJsZW5kaW5nICE9PSBDdXN0b21CbGVuZGluZykge1xuXHRcdFx0aWYgKGJsZW5kaW5nICE9PSBjdXJyZW50QmxlbmRpbmcgfHwgcHJlbXVsdGlwbGllZEFscGhhICE9PSBjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRCbGVuZEVxdWF0aW9uICE9PSBBZGRFcXVhdGlvbiB8fCBjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhICE9PSBBZGRFcXVhdGlvbikge1xuXHRcdFx0XHRcdGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xuXHRcdFx0XHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb247XG5cdFx0XHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IEFkZEVxdWF0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHByZW11bHRpcGxpZWRBbHBoYSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoYmxlbmRpbmcpIHtcblx0XHRcdFx0XHRcdGNhc2UgTm9ybWFsQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgQWRkaXRpdmVCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgU3VidHJhY3RpdmVCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuWkVSTywgZ2wuT05FX01JTlVTX1NSQ19DT0xPUiwgZ2wuWkVSTywgZ2wuT05FKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgTXVsdGlwbHlCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuWkVSTywgZ2wuU1JDX0NPTE9SLCBnbC5aRVJPLCBnbC5TUkNfQUxQSEEpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogJywgYmxlbmRpbmcpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3dpdGNoIChibGVuZGluZykge1xuXHRcdFx0XHRcdFx0Y2FzZSBOb3JtYWxCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuU1JDX0FMUEhBLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBBZGRpdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmMoZ2wuU1JDX0FMUEhBLCBnbC5PTkUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBTdWJ0cmFjdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5aRVJPLCBnbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCBnbC5aRVJPLCBnbC5PTkUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBNdWx0aXBseUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmMoZ2wuWkVSTywgZ2wuU1JDX0NPTE9SKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICcsIGJsZW5kaW5nKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudEJsZW5kU3JjID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudEJsZW5kRHN0ID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudEJsZW5kU3JjQWxwaGEgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRCbGVuZGluZyA9IGJsZW5kaW5nO1xuXHRcdFx0XHRjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9IC8vIGN1c3RvbSBibGVuZGluZ1xuXG5cblx0XHRibGVuZEVxdWF0aW9uQWxwaGEgPSBibGVuZEVxdWF0aW9uQWxwaGEgfHwgYmxlbmRFcXVhdGlvbjtcblx0XHRibGVuZFNyY0FscGhhID0gYmxlbmRTcmNBbHBoYSB8fCBibGVuZFNyYztcblx0XHRibGVuZERzdEFscGhhID0gYmxlbmREc3RBbHBoYSB8fCBibGVuZERzdDtcblxuXHRcdGlmIChibGVuZEVxdWF0aW9uICE9PSBjdXJyZW50QmxlbmRFcXVhdGlvbiB8fCBibGVuZEVxdWF0aW9uQWxwaGEgIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEpIHtcblx0XHRcdGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShlcXVhdGlvblRvR0xbYmxlbmRFcXVhdGlvbl0sIGVxdWF0aW9uVG9HTFtibGVuZEVxdWF0aW9uQWxwaGFdKTtcblx0XHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gYmxlbmRFcXVhdGlvbjtcblx0XHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgPSBibGVuZEVxdWF0aW9uQWxwaGE7XG5cdFx0fVxuXG5cdFx0aWYgKGJsZW5kU3JjICE9PSBjdXJyZW50QmxlbmRTcmMgfHwgYmxlbmREc3QgIT09IGN1cnJlbnRCbGVuZERzdCB8fCBibGVuZFNyY0FscGhhICE9PSBjdXJyZW50QmxlbmRTcmNBbHBoYSB8fCBibGVuZERzdEFscGhhICE9PSBjdXJyZW50QmxlbmREc3RBbHBoYSkge1xuXHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoZmFjdG9yVG9HTFtibGVuZFNyY10sIGZhY3RvclRvR0xbYmxlbmREc3RdLCBmYWN0b3JUb0dMW2JsZW5kU3JjQWxwaGFdLCBmYWN0b3JUb0dMW2JsZW5kRHN0QWxwaGFdKTtcblx0XHRcdGN1cnJlbnRCbGVuZFNyYyA9IGJsZW5kU3JjO1xuXHRcdFx0Y3VycmVudEJsZW5kRHN0ID0gYmxlbmREc3Q7XG5cdFx0XHRjdXJyZW50QmxlbmRTcmNBbHBoYSA9IGJsZW5kU3JjQWxwaGE7XG5cdFx0XHRjdXJyZW50QmxlbmREc3RBbHBoYSA9IGJsZW5kRHN0QWxwaGE7XG5cdFx0fVxuXG5cdFx0Y3VycmVudEJsZW5kaW5nID0gYmxlbmRpbmc7XG5cdFx0Y3VycmVudFByZW11bHRpcGxlZEFscGhhID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldE1hdGVyaWFsKG1hdGVyaWFsLCBmcm9udEZhY2VDVykge1xuXHRcdG1hdGVyaWFsLnNpZGUgPT09IERvdWJsZVNpZGUgPyBkaXNhYmxlKGdsLkNVTExfRkFDRSkgOiBlbmFibGUoZ2wuQ1VMTF9GQUNFKTtcblx0XHRsZXQgZmxpcFNpZGVkID0gbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGU7XG5cdFx0aWYgKGZyb250RmFjZUNXKSBmbGlwU2lkZWQgPSAhZmxpcFNpZGVkO1xuXHRcdHNldEZsaXBTaWRlZChmbGlwU2lkZWQpO1xuXHRcdG1hdGVyaWFsLmJsZW5kaW5nID09PSBOb3JtYWxCbGVuZGluZyAmJiBtYXRlcmlhbC50cmFuc3BhcmVudCA9PT0gZmFsc2UgPyBzZXRCbGVuZGluZyhOb0JsZW5kaW5nKSA6IHNldEJsZW5kaW5nKG1hdGVyaWFsLmJsZW5kaW5nLCBtYXRlcmlhbC5ibGVuZEVxdWF0aW9uLCBtYXRlcmlhbC5ibGVuZFNyYywgbWF0ZXJpYWwuYmxlbmREc3QsIG1hdGVyaWFsLmJsZW5kRXF1YXRpb25BbHBoYSwgbWF0ZXJpYWwuYmxlbmRTcmNBbHBoYSwgbWF0ZXJpYWwuYmxlbmREc3RBbHBoYSwgbWF0ZXJpYWwucHJlbXVsdGlwbGllZEFscGhhKTtcblx0XHRkZXB0aEJ1ZmZlci5zZXRGdW5jKG1hdGVyaWFsLmRlcHRoRnVuYyk7XG5cdFx0ZGVwdGhCdWZmZXIuc2V0VGVzdChtYXRlcmlhbC5kZXB0aFRlc3QpO1xuXHRcdGRlcHRoQnVmZmVyLnNldE1hc2sobWF0ZXJpYWwuZGVwdGhXcml0ZSk7XG5cdFx0Y29sb3JCdWZmZXIuc2V0TWFzayhtYXRlcmlhbC5jb2xvcldyaXRlKTtcblx0XHRjb25zdCBzdGVuY2lsV3JpdGUgPSBtYXRlcmlhbC5zdGVuY2lsV3JpdGU7XG5cdFx0c3RlbmNpbEJ1ZmZlci5zZXRUZXN0KHN0ZW5jaWxXcml0ZSk7XG5cblx0XHRpZiAoc3RlbmNpbFdyaXRlKSB7XG5cdFx0XHRzdGVuY2lsQnVmZmVyLnNldE1hc2sobWF0ZXJpYWwuc3RlbmNpbFdyaXRlTWFzayk7XG5cdFx0XHRzdGVuY2lsQnVmZmVyLnNldEZ1bmMobWF0ZXJpYWwuc3RlbmNpbEZ1bmMsIG1hdGVyaWFsLnN0ZW5jaWxSZWYsIG1hdGVyaWFsLnN0ZW5jaWxGdW5jTWFzayk7XG5cdFx0XHRzdGVuY2lsQnVmZmVyLnNldE9wKG1hdGVyaWFsLnN0ZW5jaWxGYWlsLCBtYXRlcmlhbC5zdGVuY2lsWkZhaWwsIG1hdGVyaWFsLnN0ZW5jaWxaUGFzcyk7XG5cdFx0fVxuXG5cdFx0c2V0UG9seWdvbk9mZnNldChtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0LCBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yLCBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0VW5pdHMpO1xuXHRcdG1hdGVyaWFsLmFscGhhVG9Db3ZlcmFnZSA9PT0gdHJ1ZSA/IGVuYWJsZShnbC5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpIDogZGlzYWJsZShnbC5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpO1xuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBzZXRGbGlwU2lkZWQoZmxpcFNpZGVkKSB7XG5cdFx0aWYgKGN1cnJlbnRGbGlwU2lkZWQgIT09IGZsaXBTaWRlZCkge1xuXHRcdFx0aWYgKGZsaXBTaWRlZCkge1xuXHRcdFx0XHRnbC5mcm9udEZhY2UoZ2wuQ1cpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2wuZnJvbnRGYWNlKGdsLkNDVyk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRGbGlwU2lkZWQgPSBmbGlwU2lkZWQ7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Q3VsbEZhY2UoY3VsbEZhY2UpIHtcblx0XHRpZiAoY3VsbEZhY2UgIT09IEN1bGxGYWNlTm9uZSkge1xuXHRcdFx0ZW5hYmxlKGdsLkNVTExfRkFDRSk7XG5cblx0XHRcdGlmIChjdWxsRmFjZSAhPT0gY3VycmVudEN1bGxGYWNlKSB7XG5cdFx0XHRcdGlmIChjdWxsRmFjZSA9PT0gQ3VsbEZhY2VCYWNrKSB7XG5cdFx0XHRcdFx0Z2wuY3VsbEZhY2UoZ2wuQkFDSyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY3VsbEZhY2UgPT09IEN1bGxGYWNlRnJvbnQpIHtcblx0XHRcdFx0XHRnbC5jdWxsRmFjZShnbC5GUk9OVCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2wuY3VsbEZhY2UoZ2wuRlJPTlRfQU5EX0JBQ0spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcblx0XHR9XG5cblx0XHRjdXJyZW50Q3VsbEZhY2UgPSBjdWxsRmFjZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVXaWR0aCh3aWR0aCkge1xuXHRcdGlmICh3aWR0aCAhPT0gY3VycmVudExpbmVXaWR0aCkge1xuXHRcdFx0aWYgKGxpbmVXaWR0aEF2YWlsYWJsZSkgZ2wubGluZVdpZHRoKHdpZHRoKTtcblx0XHRcdGN1cnJlbnRMaW5lV2lkdGggPSB3aWR0aDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRQb2x5Z29uT2Zmc2V0KHBvbHlnb25PZmZzZXQsIGZhY3RvciwgdW5pdHMpIHtcblx0XHRpZiAocG9seWdvbk9mZnNldCkge1xuXHRcdFx0ZW5hYmxlKGdsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpO1xuXG5cdFx0XHRpZiAoY3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgIT09IGZhY3RvciB8fCBjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzICE9PSB1bml0cykge1xuXHRcdFx0XHRnbC5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpO1xuXHRcdFx0XHRjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciA9IGZhY3Rvcjtcblx0XHRcdFx0Y3VycmVudFBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNhYmxlKGdsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFNjaXNzb3JUZXN0KHNjaXNzb3JUZXN0KSB7XG5cdFx0aWYgKHNjaXNzb3JUZXN0KSB7XG5cdFx0XHRlbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuXHRcdH1cblx0fSAvLyB0ZXh0dXJlXG5cblxuXHRmdW5jdGlvbiBhY3RpdmVUZXh0dXJlKHdlYmdsU2xvdCkge1xuXHRcdGlmICh3ZWJnbFNsb3QgPT09IHVuZGVmaW5lZCkgd2ViZ2xTbG90ID0gZ2wuVEVYVFVSRTAgKyBtYXhUZXh0dXJlcyAtIDE7XG5cblx0XHRpZiAoY3VycmVudFRleHR1cmVTbG90ICE9PSB3ZWJnbFNsb3QpIHtcblx0XHRcdGdsLmFjdGl2ZVRleHR1cmUod2ViZ2xTbG90KTtcblx0XHRcdGN1cnJlbnRUZXh0dXJlU2xvdCA9IHdlYmdsU2xvdDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kVGV4dHVyZSh3ZWJnbFR5cGUsIHdlYmdsVGV4dHVyZSkge1xuXHRcdGlmIChjdXJyZW50VGV4dHVyZVNsb3QgPT09IG51bGwpIHtcblx0XHRcdGFjdGl2ZVRleHR1cmUoKTtcblx0XHR9XG5cblx0XHRsZXQgYm91bmRUZXh0dXJlID0gY3VycmVudEJvdW5kVGV4dHVyZXNbY3VycmVudFRleHR1cmVTbG90XTtcblxuXHRcdGlmIChib3VuZFRleHR1cmUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ym91bmRUZXh0dXJlID0ge1xuXHRcdFx0XHR0eXBlOiB1bmRlZmluZWQsXG5cdFx0XHRcdHRleHR1cmU6IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHRcdGN1cnJlbnRCb3VuZFRleHR1cmVzW2N1cnJlbnRUZXh0dXJlU2xvdF0gPSBib3VuZFRleHR1cmU7XG5cdFx0fVxuXG5cdFx0aWYgKGJvdW5kVGV4dHVyZS50eXBlICE9PSB3ZWJnbFR5cGUgfHwgYm91bmRUZXh0dXJlLnRleHR1cmUgIT09IHdlYmdsVGV4dHVyZSkge1xuXHRcdFx0Z2wuYmluZFRleHR1cmUod2ViZ2xUeXBlLCB3ZWJnbFRleHR1cmUgfHwgZW1wdHlUZXh0dXJlc1t3ZWJnbFR5cGVdKTtcblx0XHRcdGJvdW5kVGV4dHVyZS50eXBlID0gd2ViZ2xUeXBlO1xuXHRcdFx0Ym91bmRUZXh0dXJlLnRleHR1cmUgPSB3ZWJnbFRleHR1cmU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdW5iaW5kVGV4dHVyZSgpIHtcblx0XHRjb25zdCBib3VuZFRleHR1cmUgPSBjdXJyZW50Qm91bmRUZXh0dXJlc1tjdXJyZW50VGV4dHVyZVNsb3RdO1xuXG5cdFx0aWYgKGJvdW5kVGV4dHVyZSAhPT0gdW5kZWZpbmVkICYmIGJvdW5kVGV4dHVyZS50eXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGdsLmJpbmRUZXh0dXJlKGJvdW5kVGV4dHVyZS50eXBlLCBudWxsKTtcblx0XHRcdGJvdW5kVGV4dHVyZS50eXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0Ym91bmRUZXh0dXJlLnRleHR1cmUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY29tcHJlc3NlZFRleEltYWdlMkQoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdsLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdWJJbWFnZTJEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC50ZXhTdWJJbWFnZTJELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdWJJbWFnZTNEKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnbC50ZXhTdWJJbWFnZTNELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZ2wsIGFyZ3VtZW50cyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN0b3JhZ2UyRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wudGV4U3RvcmFnZTJELmFwcGx5KGdsLCBhcmd1bWVudHMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdG9yYWdlM0QoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdsLnRleFN0b3JhZ2UzRC5hcHBseShnbCwgYXJndW1lbnRzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4SW1hZ2UyRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wudGV4SW1hZ2UyRC5hcHBseShnbCwgYXJndW1lbnRzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4SW1hZ2UzRCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2wudGV4SW1hZ2UzRC5hcHBseShnbCwgYXJndW1lbnRzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvcik7XG5cdFx0fVxuXHR9IC8vXG5cblxuXHRmdW5jdGlvbiBzY2lzc29yKHNjaXNzb3IpIHtcblx0XHRpZiAoY3VycmVudFNjaXNzb3IuZXF1YWxzKHNjaXNzb3IpID09PSBmYWxzZSkge1xuXHRcdFx0Z2wuc2Npc3NvcihzY2lzc29yLngsIHNjaXNzb3IueSwgc2Npc3Nvci56LCBzY2lzc29yLncpO1xuXHRcdFx0Y3VycmVudFNjaXNzb3IuY29weShzY2lzc29yKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB2aWV3cG9ydCh2aWV3cG9ydCkge1xuXHRcdGlmIChjdXJyZW50Vmlld3BvcnQuZXF1YWxzKHZpZXdwb3J0KSA9PT0gZmFsc2UpIHtcblx0XHRcdGdsLnZpZXdwb3J0KHZpZXdwb3J0LngsIHZpZXdwb3J0LnksIHZpZXdwb3J0LnosIHZpZXdwb3J0LncpO1xuXHRcdFx0Y3VycmVudFZpZXdwb3J0LmNvcHkodmlld3BvcnQpO1xuXHRcdH1cblx0fSAvL1xuXG5cblx0ZnVuY3Rpb24gcmVzZXQoKSB7XG5cdFx0Ly8gcmVzZXQgc3RhdGVcblx0XHRnbC5kaXNhYmxlKGdsLkJMRU5EKTtcblx0XHRnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG5cdFx0Z2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcblx0XHRnbC5kaXNhYmxlKGdsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpO1xuXHRcdGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcblx0XHRnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cdFx0Z2wuZGlzYWJsZShnbC5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpO1xuXHRcdGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xuXHRcdGdsLmJsZW5kRnVuYyhnbC5PTkUsIGdsLlpFUk8pO1xuXHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuWkVSTywgZ2wuT05FLCBnbC5aRVJPKTtcblx0XHRnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0Z2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcblx0XHRnbC5kZXB0aE1hc2sodHJ1ZSk7XG5cdFx0Z2wuZGVwdGhGdW5jKGdsLkxFU1MpO1xuXHRcdGdsLmNsZWFyRGVwdGgoMSk7XG5cdFx0Z2wuc3RlbmNpbE1hc2soMHhmZmZmZmZmZik7XG5cdFx0Z2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLCAwLCAweGZmZmZmZmZmKTtcblx0XHRnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuS0VFUCk7XG5cdFx0Z2wuY2xlYXJTdGVuY2lsKDApO1xuXHRcdGdsLmN1bGxGYWNlKGdsLkJBQ0spO1xuXHRcdGdsLmZyb250RmFjZShnbC5DQ1cpO1xuXHRcdGdsLnBvbHlnb25PZmZzZXQoMCwgMCk7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cdFx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuXHRcdGlmIChpc1dlYkdMMiA9PT0gdHJ1ZSkge1xuXHRcdFx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkRSQVdfRlJBTUVCVUZGRVIsIG51bGwpO1xuXHRcdFx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLlJFQURfRlJBTUVCVUZGRVIsIG51bGwpO1xuXHRcdH1cblxuXHRcdGdsLnVzZVByb2dyYW0obnVsbCk7XG5cdFx0Z2wubGluZVdpZHRoKDEpO1xuXHRcdGdsLnNjaXNzb3IoMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTtcblx0XHRnbC52aWV3cG9ydCgwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOyAvLyByZXNldCBpbnRlcm5hbHNcblxuXHRcdGVuYWJsZWRDYXBhYmlsaXRpZXMgPSB7fTtcblx0XHRjdXJyZW50VGV4dHVyZVNsb3QgPSBudWxsO1xuXHRcdGN1cnJlbnRCb3VuZFRleHR1cmVzID0ge307XG5cdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzID0ge307XG5cdFx0Y3VycmVudERyYXdidWZmZXJzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRkZWZhdWx0RHJhd2J1ZmZlcnMgPSBbXTtcblx0XHRjdXJyZW50UHJvZ3JhbSA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRcdGN1cnJlbnRCbGVuZGluZyA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZFNyYyA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRHN0ID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRHN0QWxwaGEgPSBudWxsO1xuXHRcdGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IGZhbHNlO1xuXHRcdGN1cnJlbnRGbGlwU2lkZWQgPSBudWxsO1xuXHRcdGN1cnJlbnRDdWxsRmFjZSA9IG51bGw7XG5cdFx0Y3VycmVudExpbmVXaWR0aCA9IG51bGw7XG5cdFx0Y3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgPSBudWxsO1xuXHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0VW5pdHMgPSBudWxsO1xuXHRcdGN1cnJlbnRTY2lzc29yLnNldCgwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpO1xuXHRcdGN1cnJlbnRWaWV3cG9ydC5zZXQoMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTtcblx0XHRjb2xvckJ1ZmZlci5yZXNldCgpO1xuXHRcdGRlcHRoQnVmZmVyLnJlc2V0KCk7XG5cdFx0c3RlbmNpbEJ1ZmZlci5yZXNldCgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRidWZmZXJzOiB7XG5cdFx0XHRjb2xvcjogY29sb3JCdWZmZXIsXG5cdFx0XHRkZXB0aDogZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsOiBzdGVuY2lsQnVmZmVyXG5cdFx0fSxcblx0XHRlbmFibGU6IGVuYWJsZSxcblx0XHRkaXNhYmxlOiBkaXNhYmxlLFxuXHRcdGJpbmRGcmFtZWJ1ZmZlcjogYmluZEZyYW1lYnVmZmVyLFxuXHRcdGRyYXdCdWZmZXJzOiBkcmF3QnVmZmVycyxcblx0XHR1c2VQcm9ncmFtOiB1c2VQcm9ncmFtLFxuXHRcdHNldEJsZW5kaW5nOiBzZXRCbGVuZGluZyxcblx0XHRzZXRNYXRlcmlhbDogc2V0TWF0ZXJpYWwsXG5cdFx0c2V0RmxpcFNpZGVkOiBzZXRGbGlwU2lkZWQsXG5cdFx0c2V0Q3VsbEZhY2U6IHNldEN1bGxGYWNlLFxuXHRcdHNldExpbmVXaWR0aDogc2V0TGluZVdpZHRoLFxuXHRcdHNldFBvbHlnb25PZmZzZXQ6IHNldFBvbHlnb25PZmZzZXQsXG5cdFx0c2V0U2Npc3NvclRlc3Q6IHNldFNjaXNzb3JUZXN0LFxuXHRcdGFjdGl2ZVRleHR1cmU6IGFjdGl2ZVRleHR1cmUsXG5cdFx0YmluZFRleHR1cmU6IGJpbmRUZXh0dXJlLFxuXHRcdHVuYmluZFRleHR1cmU6IHVuYmluZFRleHR1cmUsXG5cdFx0Y29tcHJlc3NlZFRleEltYWdlMkQ6IGNvbXByZXNzZWRUZXhJbWFnZTJELFxuXHRcdHRleEltYWdlMkQ6IHRleEltYWdlMkQsXG5cdFx0dGV4SW1hZ2UzRDogdGV4SW1hZ2UzRCxcblx0XHR0ZXhTdG9yYWdlMkQ6IHRleFN0b3JhZ2UyRCxcblx0XHR0ZXhTdG9yYWdlM0Q6IHRleFN0b3JhZ2UzRCxcblx0XHR0ZXhTdWJJbWFnZTJEOiB0ZXhTdWJJbWFnZTJELFxuXHRcdHRleFN1YkltYWdlM0Q6IHRleFN1YkltYWdlM0QsXG5cdFx0Y29tcHJlc3NlZFRleFN1YkltYWdlMkQ6IGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELFxuXHRcdHNjaXNzb3I6IHNjaXNzb3IsXG5cdFx0dmlld3BvcnQ6IHZpZXdwb3J0LFxuXHRcdHJlc2V0OiByZXNldFxuXHR9O1xufVxuXG5mdW5jdGlvbiBXZWJHTFRleHR1cmVzKF9nbCwgZXh0ZW5zaW9ucywgc3RhdGUsIHByb3BlcnRpZXMsIGNhcGFiaWxpdGllcywgdXRpbHMsIGluZm8pIHtcblx0Y29uc3QgaXNXZWJHTDIgPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDI7XG5cdGNvbnN0IG1heFRleHR1cmVzID0gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVzO1xuXHRjb25zdCBtYXhDdWJlbWFwU2l6ZSA9IGNhcGFiaWxpdGllcy5tYXhDdWJlbWFwU2l6ZTtcblx0Y29uc3QgbWF4VGV4dHVyZVNpemUgPSBjYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemU7XG5cdGNvbnN0IG1heFNhbXBsZXMgPSBjYXBhYmlsaXRpZXMubWF4U2FtcGxlcztcblx0Y29uc3QgaGFzTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gZXh0ZW5zaW9ucy5oYXMoJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScpO1xuXHRjb25zdCBNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24gPSBoYXNNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPyBleHRlbnNpb25zLmdldCgnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJykgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgX3ZpZGVvVGV4dHVyZXMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGxldCBfY2FudmFzOyAvLyBjb3Jkb3ZhIGlPUyAoYXMgb2YgNS4wKSBzdGlsbCB1c2VzIFVJV2ViVmlldywgd2hpY2ggcHJvdmlkZXMgT2Zmc2NyZWVuQ2FudmFzLFxuXHQvLyBhbHNvIE9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIiksIGJ1dCBub3QgT2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKSFcblx0Ly8gU29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG9ubHkgaW1wbGVtZW50IE9mZnNjcmVlbkNhbnZhcyBwYXJ0aWFsbHkgKGUuZy4gbGFja2luZyAyZCkuXG5cblxuXHRsZXQgdXNlT2Zmc2NyZWVuQ2FudmFzID0gZmFsc2U7XG5cblx0dHJ5IHtcblx0XHR1c2VPZmZzY3JlZW5DYW52YXMgPSB0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9PSAndW5kZWZpbmVkJyAmJiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpLmdldENvbnRleHQoJzJkJykgIT09IG51bGw7XG5cdH0gY2F0Y2ggKGVycikgey8vIElnbm9yZSBhbnkgZXJyb3JzXG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuXHRcdC8vIFVzZSBPZmZzY3JlZW5DYW52YXMgd2hlbiBhdmFpbGFibGUuIFNwZWNpYWxseSBuZWVkZWQgaW4gd2ViIHdvcmtlcnNcblx0XHRyZXR1cm4gdXNlT2Zmc2NyZWVuQ2FudmFzID8gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KSA6IGNyZWF0ZUVsZW1lbnROUygnY2FudmFzJyk7XG5cdH1cblxuXHRmdW5jdGlvbiByZXNpemVJbWFnZShpbWFnZSwgbmVlZHNQb3dlck9mVHdvLCBuZWVkc05ld0NhbnZhcywgbWF4U2l6ZSkge1xuXHRcdGxldCBzY2FsZSA9IDE7IC8vIGhhbmRsZSBjYXNlIGlmIHRleHR1cmUgZXhjZWVkcyBtYXggc2l6ZVxuXG5cdFx0aWYgKGltYWdlLndpZHRoID4gbWF4U2l6ZSB8fCBpbWFnZS5oZWlnaHQgPiBtYXhTaXplKSB7XG5cdFx0XHRzY2FsZSA9IG1heFNpemUgLyBNYXRoLm1heChpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHR9IC8vIG9ubHkgcGVyZm9ybSByZXNpemUgaWYgbmVjZXNzYXJ5XG5cblxuXHRcdGlmIChzY2FsZSA8IDEgfHwgbmVlZHNQb3dlck9mVHdvID09PSB0cnVlKSB7XG5cdFx0XHQvLyBvbmx5IHBlcmZvcm0gcmVzaXplIGZvciBjZXJ0YWluIGltYWdlIHR5cGVzXG5cdFx0XHRpZiAodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCB0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgdHlwZW9mIEltYWdlQml0bWFwICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSB7XG5cdFx0XHRcdGNvbnN0IGZsb29yID0gbmVlZHNQb3dlck9mVHdvID8gZmxvb3JQb3dlck9mVHdvIDogTWF0aC5mbG9vcjtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSBmbG9vcihzY2FsZSAqIGltYWdlLndpZHRoKTtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gZmxvb3Ioc2NhbGUgKiBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0XHRpZiAoX2NhbnZhcyA9PT0gdW5kZWZpbmVkKSBfY2FudmFzID0gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpOyAvLyBjdWJlIHRleHR1cmVzIGNhbid0IHJldXNlIHRoZSBzYW1lIGNhbnZhc1xuXG5cdFx0XHRcdGNvbnN0IGNhbnZhcyA9IG5lZWRzTmV3Q2FudmFzID8gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIDogX2NhbnZhcztcblx0XHRcdFx0Y2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0XHRcdGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblx0XHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBpbWFnZS5oZWlnaHQgKyAnKSB0byAoJyArIHdpZHRoICsgJ3gnICsgaGVpZ2h0ICsgJykuJyk7XG5cdFx0XHRcdHJldHVybiBjYW52YXM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJ2RhdGEnIGluIGltYWdlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBpbWFnZS5oZWlnaHQgKyAnKS4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBpbWFnZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW1hZ2U7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1Bvd2VyT2ZUd28kMShpbWFnZSkge1xuXHRcdHJldHVybiBpc1Bvd2VyT2ZUd28oaW1hZ2Uud2lkdGgpICYmIGlzUG93ZXJPZlR3byhpbWFnZS5oZWlnaHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gdGV4dHVyZU5lZWRzUG93ZXJPZlR3byh0ZXh0dXJlKSB7XG5cdFx0aWYgKGlzV2ViR0wyKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRleHR1cmUud3JhcFMgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwVCAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8fCB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyO1xuXHR9XG5cblx0ZnVuY3Rpb24gdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKHRleHR1cmUsIHN1cHBvcnRzTWlwcykge1xuXHRcdHJldHVybiB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyAmJiBzdXBwb3J0c01pcHMgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlTWlwbWFwKHRhcmdldCkge1xuXHRcdF9nbC5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXROYW1lLCBnbEZvcm1hdCwgZ2xUeXBlLCBlbmNvZGluZywgaXNWaWRlb1RleHR1cmUgPSBmYWxzZSkge1xuXHRcdGlmIChpc1dlYkdMMiA9PT0gZmFsc2UpIHJldHVybiBnbEZvcm1hdDtcblxuXHRcdGlmIChpbnRlcm5hbEZvcm1hdE5hbWUgIT09IG51bGwpIHtcblx0XHRcdGlmIChfZ2xbaW50ZXJuYWxGb3JtYXROYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gX2dsW2ludGVybmFsRm9ybWF0TmFtZV07XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgXFwnJyArIGludGVybmFsRm9ybWF0TmFtZSArICdcXCcnKTtcblx0XHR9XG5cblx0XHRsZXQgaW50ZXJuYWxGb3JtYXQgPSBnbEZvcm1hdDtcblxuXHRcdGlmIChnbEZvcm1hdCA9PT0gX2dsLlJFRCkge1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLkZMT0FUKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SMzJGO1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLkhBTEZfRkxPQVQpIGludGVybmFsRm9ybWF0ID0gX2dsLlIxNkY7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuVU5TSUdORURfQllURSkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUjg7XG5cdFx0fVxuXG5cdFx0aWYgKGdsRm9ybWF0ID09PSBfZ2wuUkcpIHtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5GTE9BVCkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkczMkY7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuSEFMRl9GTE9BVCkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkcxNkY7XG5cdFx0XHRpZiAoZ2xUeXBlID09PSBfZ2wuVU5TSUdORURfQllURSkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkc4O1xuXHRcdH1cblxuXHRcdGlmIChnbEZvcm1hdCA9PT0gX2dsLlJHQkEpIHtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5GTE9BVCkgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuUkdCQTMyRjtcblx0XHRcdGlmIChnbFR5cGUgPT09IF9nbC5IQUxGX0ZMT0FUKSBpbnRlcm5hbEZvcm1hdCA9IF9nbC5SR0JBMTZGO1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLlVOU0lHTkVEX0JZVEUpIGludGVybmFsRm9ybWF0ID0gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyAmJiBpc1ZpZGVvVGV4dHVyZSA9PT0gZmFsc2UgPyBfZ2wuU1JHQjhfQUxQSEE4IDogX2dsLlJHQkE4O1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQpIGludGVybmFsRm9ybWF0ID0gX2dsLlJHQkE0O1xuXHRcdFx0aWYgKGdsVHlwZSA9PT0gX2dsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEpIGludGVybmFsRm9ybWF0ID0gX2dsLlJHQjVfQTE7XG5cdFx0fVxuXG5cdFx0aWYgKGludGVybmFsRm9ybWF0ID09PSBfZ2wuUjE2RiB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gX2dsLlIzMkYgfHwgaW50ZXJuYWxGb3JtYXQgPT09IF9nbC5SRzE2RiB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gX2dsLlJHMzJGIHx8IGludGVybmFsRm9ybWF0ID09PSBfZ2wuUkdCQTE2RiB8fCBpbnRlcm5hbEZvcm1hdCA9PT0gX2dsLlJHQkEzMkYpIHtcblx0XHRcdGV4dGVuc2lvbnMuZ2V0KCdFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Jyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGludGVybmFsRm9ybWF0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TWlwTGV2ZWxzKHRleHR1cmUsIGltYWdlLCBzdXBwb3J0c01pcHMpIHtcblx0XHRpZiAodGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKHRleHR1cmUsIHN1cHBvcnRzTWlwcykgPT09IHRydWUgfHwgdGV4dHVyZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5sb2cyKE1hdGgubWF4KGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpKSArIDE7XG5cdFx0fSBlbHNlIGlmICh0ZXh0dXJlLm1pcG1hcHMgIT09IHVuZGVmaW5lZCAmJiB0ZXh0dXJlLm1pcG1hcHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gdXNlci1kZWZpbmVkIG1pcG1hcHNcblx0XHRcdHJldHVybiB0ZXh0dXJlLm1pcG1hcHMubGVuZ3RoO1xuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICYmIEFycmF5LmlzQXJyYXkodGV4dHVyZS5pbWFnZSkpIHtcblx0XHRcdHJldHVybiBpbWFnZS5taXBtYXBzLmxlbmd0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdGV4dHVyZSB3aXRob3V0IG1pcG1hcHMgKG9ubHkgYmFzZSBsZXZlbClcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0fSAvLyBGYWxsYmFjayBmaWx0ZXJzIGZvciBub24tcG93ZXItb2YtMiB0ZXh0dXJlc1xuXG5cblx0ZnVuY3Rpb24gZmlsdGVyRmFsbGJhY2soZikge1xuXHRcdGlmIChmID09PSBOZWFyZXN0RmlsdGVyIHx8IGYgPT09IE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyIHx8IGYgPT09IE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXIpIHtcblx0XHRcdHJldHVybiBfZ2wuTkVBUkVTVDtcblx0XHR9XG5cblx0XHRyZXR1cm4gX2dsLkxJTkVBUjtcblx0fSAvL1xuXG5cblx0ZnVuY3Rpb24gb25UZXh0dXJlRGlzcG9zZShldmVudCkge1xuXHRcdGNvbnN0IHRleHR1cmUgPSBldmVudC50YXJnZXQ7XG5cdFx0dGV4dHVyZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSk7XG5cdFx0ZGVhbGxvY2F0ZVRleHR1cmUodGV4dHVyZSk7XG5cblx0XHRpZiAodGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSkge1xuXHRcdFx0X3ZpZGVvVGV4dHVyZXMuZGVsZXRlKHRleHR1cmUpO1xuXHRcdH1cblxuXHRcdGluZm8ubWVtb3J5LnRleHR1cmVzLS07XG5cdH1cblxuXHRmdW5jdGlvbiBvblJlbmRlclRhcmdldERpc3Bvc2UoZXZlbnQpIHtcblx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0cmVuZGVyVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3Bvc2UnLCBvblJlbmRlclRhcmdldERpc3Bvc2UpO1xuXHRcdGRlYWxsb2NhdGVSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblx0fSAvL1xuXG5cblx0ZnVuY3Rpb24gZGVhbGxvY2F0ZVRleHR1cmUodGV4dHVyZSkge1xuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQodGV4dHVyZSk7XG5cdFx0aWYgKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdF9nbC5kZWxldGVUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblxuXHRcdHByb3BlcnRpZXMucmVtb3ZlKHRleHR1cmUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVhbGxvY2F0ZVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpIHtcblx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKTtcblx0XHRpZiAoIXJlbmRlclRhcmdldCkgcmV0dXJuO1xuXG5cdFx0aWYgKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdF9nbC5kZWxldGVUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblxuXHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMtLTtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSkge1xuXHRcdFx0cmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdFx0X2dsLmRlbGV0ZUZyYW1lYnVmZmVyKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyW2ldKTtcblxuXHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIpIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbaV0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRfZ2wuZGVsZXRlRnJhbWVidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIpO1xuXG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIpIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIpO1xuXHRcdFx0aWYgKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSBfZ2wuZGVsZXRlRnJhbWVidWZmZXIocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO1xuXHRcdFx0aWYgKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtcblx0XHRcdGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcikgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlW2ldKTtcblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpIHtcblx0XHRcdFx0XHRfZ2wuZGVsZXRlVGV4dHVyZShhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cblx0XHRcdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcy0tO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHJvcGVydGllcy5yZW1vdmUodGV4dHVyZVtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cHJvcGVydGllcy5yZW1vdmUodGV4dHVyZSk7XG5cdFx0cHJvcGVydGllcy5yZW1vdmUocmVuZGVyVGFyZ2V0KTtcblx0fSAvL1xuXG5cblx0bGV0IHRleHR1cmVVbml0cyA9IDA7XG5cblx0ZnVuY3Rpb24gcmVzZXRUZXh0dXJlVW5pdHMoKSB7XG5cdFx0dGV4dHVyZVVuaXRzID0gMDtcblx0fVxuXG5cdGZ1bmN0aW9uIGFsbG9jYXRlVGV4dHVyZVVuaXQoKSB7XG5cdFx0Y29uc3QgdGV4dHVyZVVuaXQgPSB0ZXh0dXJlVW5pdHM7XG5cblx0XHRpZiAodGV4dHVyZVVuaXQgPj0gbWF4VGV4dHVyZXMpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAnICsgdGV4dHVyZVVuaXQgKyAnIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAnICsgbWF4VGV4dHVyZXMpO1xuXHRcdH1cblxuXHRcdHRleHR1cmVVbml0cyArPSAxO1xuXHRcdHJldHVybiB0ZXh0dXJlVW5pdDtcblx0fSAvL1xuXG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTJEKHRleHR1cmUsIHNsb3QpIHtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXHRcdGlmICh0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlKSB1cGRhdGVWaWRlb1RleHR1cmUodGV4dHVyZSk7XG5cblx0XHRpZiAodGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbikge1xuXHRcdFx0Y29uc3QgaW1hZ2UgPSB0ZXh0dXJlLmltYWdlO1xuXG5cdFx0XHRpZiAoaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCcpO1xuXHRcdFx0fSBlbHNlIGlmIChpbWFnZS5jb21wbGV0ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cGxvYWRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoX2dsLlRFWFRVUkUwICsgc2xvdCk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmUyREFycmF5KHRleHR1cmUsIHNsb3QpIHtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXG5cdFx0aWYgKHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24pIHtcblx0XHRcdHVwbG9hZFRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoX2dsLlRFWFRVUkUwICsgc2xvdCk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkRfQVJSQVksIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmUzRCh0ZXh0dXJlLCBzbG90KSB7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKTtcblxuXHRcdGlmICh0ZXh0dXJlLnZlcnNpb24gPiAwICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uKSB7XG5cdFx0XHR1cGxvYWRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKF9nbC5URVhUVVJFMCArIHNsb3QpO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzNELCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlQ3ViZSh0ZXh0dXJlLCBzbG90KSB7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKTtcblxuXHRcdGlmICh0ZXh0dXJlLnZlcnNpb24gPiAwICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uKSB7XG5cdFx0XHR1cGxvYWRDdWJlVGV4dHVyZSh0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZShfZ2wuVEVYVFVSRTAgKyBzbG90KTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXHR9XG5cblx0Y29uc3Qgd3JhcHBpbmdUb0dMID0ge1xuXHRcdFtSZXBlYXRXcmFwcGluZ106IF9nbC5SRVBFQVQsXG5cdFx0W0NsYW1wVG9FZGdlV3JhcHBpbmddOiBfZ2wuQ0xBTVBfVE9fRURHRSxcblx0XHRbTWlycm9yZWRSZXBlYXRXcmFwcGluZ106IF9nbC5NSVJST1JFRF9SRVBFQVRcblx0fTtcblx0Y29uc3QgZmlsdGVyVG9HTCA9IHtcblx0XHRbTmVhcmVzdEZpbHRlcl06IF9nbC5ORUFSRVNULFxuXHRcdFtOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcl06IF9nbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULFxuXHRcdFtOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyXTogX2dsLk5FQVJFU1RfTUlQTUFQX0xJTkVBUixcblx0XHRbTGluZWFyRmlsdGVyXTogX2dsLkxJTkVBUixcblx0XHRbTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcl06IF9nbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsXG5cdFx0W0xpbmVhck1pcG1hcExpbmVhckZpbHRlcl06IF9nbC5MSU5FQVJfTUlQTUFQX0xJTkVBUlxuXHR9O1xuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmVQYXJhbWV0ZXJzKHRleHR1cmVUeXBlLCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMpIHtcblx0XHRpZiAoc3VwcG9ydHNNaXBzKSB7XG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9TLCB3cmFwcGluZ1RvR0xbdGV4dHVyZS53cmFwU10pO1xuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9ULCB3cmFwcGluZ1RvR0xbdGV4dHVyZS53cmFwVF0pO1xuXG5cdFx0XHRpZiAodGV4dHVyZVR5cGUgPT09IF9nbC5URVhUVVJFXzNEIHx8IHRleHR1cmVUeXBlID09PSBfZ2wuVEVYVFVSRV8yRF9BUlJBWSkge1xuXHRcdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9SLCB3cmFwcGluZ1RvR0xbdGV4dHVyZS53cmFwUl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyVG9HTFt0ZXh0dXJlLm1hZ0ZpbHRlcl0pO1xuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyVG9HTFt0ZXh0dXJlLm1pbkZpbHRlcl0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9TLCBfZ2wuQ0xBTVBfVE9fRURHRSk7XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIF9nbC5DTEFNUF9UT19FREdFKTtcblxuXHRcdFx0aWYgKHRleHR1cmVUeXBlID09PSBfZ2wuVEVYVFVSRV8zRCB8fCB0ZXh0dXJlVHlwZSA9PT0gX2dsLlRFWFRVUkVfMkRfQVJSQVkpIHtcblx0XHRcdFx0X2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX1dSQVBfUiwgX2dsLkNMQU1QX1RPX0VER0UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dHVyZS53cmFwUyAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8fCB0ZXh0dXJlLndyYXBUICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4nKTtcblx0XHRcdH1cblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlckZhbGxiYWNrKHRleHR1cmUubWFnRmlsdGVyKSk7XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXJGYWxsYmFjayh0ZXh0dXJlLm1pbkZpbHRlcikpO1xuXG5cdFx0XHRpZiAodGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlcikge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZXh0ZW5zaW9ucy5oYXMoJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XG5cdFx0XHRpZiAodGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5oYXMoJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicpID09PSBmYWxzZSkgcmV0dXJuOyAvLyB2ZXJpZnkgZXh0ZW5zaW9uIGZvciBXZWJHTCAxIGFuZCBXZWJHTCAyXG5cblx0XHRcdGlmIChpc1dlYkdMMiA9PT0gZmFsc2UgJiYgdGV4dHVyZS50eXBlID09PSBIYWxmRmxvYXRUeXBlICYmIGV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicpID09PSBmYWxzZSkgcmV0dXJuOyAvLyB2ZXJpZnkgZXh0ZW5zaW9uIGZvciBXZWJHTCAxIG9ubHlcblxuXHRcdFx0aWYgKHRleHR1cmUuYW5pc290cm9weSA+IDEgfHwgcHJvcGVydGllcy5nZXQodGV4dHVyZSkuX19jdXJyZW50QW5pc290cm9weSkge1xuXHRcdFx0XHRfZ2wudGV4UGFyYW1ldGVyZih0ZXh0dXJlVHlwZSwgZXh0ZW5zaW9uLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCBNYXRoLm1pbih0ZXh0dXJlLmFuaXNvdHJvcHksIGNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkpKTtcblxuXHRcdFx0XHRwcm9wZXJ0aWVzLmdldCh0ZXh0dXJlKS5fX2N1cnJlbnRBbmlzb3Ryb3B5ID0gdGV4dHVyZS5hbmlzb3Ryb3B5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGluaXRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlKSB7XG5cdFx0aWYgKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID0gdHJ1ZTtcblx0XHRcdHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UpO1xuXHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMrKztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1cGxvYWRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90KSB7XG5cdFx0bGV0IHRleHR1cmVUeXBlID0gX2dsLlRFWFRVUkVfMkQ7XG5cdFx0aWYgKHRleHR1cmUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpIHRleHR1cmVUeXBlID0gX2dsLlRFWFRVUkVfMkRfQVJSQVk7XG5cdFx0aWYgKHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEKSB0ZXh0dXJlVHlwZSA9IF9nbC5URVhUVVJFXzNEO1xuXHRcdGluaXRUZXh0dXJlKHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlKTtcblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKF9nbC5URVhUVVJFMCArIHNsb3QpO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKHRleHR1cmVUeXBlLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRleHR1cmUuZmxpcFkpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRleHR1cmUudW5wYWNrQWxpZ25tZW50KTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCwgX2dsLk5PTkUpO1xuXG5cdFx0Y29uc3QgbmVlZHNQb3dlck9mVHdvID0gdGV4dHVyZU5lZWRzUG93ZXJPZlR3byh0ZXh0dXJlKSAmJiBpc1Bvd2VyT2ZUd28kMSh0ZXh0dXJlLmltYWdlKSA9PT0gZmFsc2U7XG5cdFx0bGV0IGltYWdlID0gcmVzaXplSW1hZ2UodGV4dHVyZS5pbWFnZSwgbmVlZHNQb3dlck9mVHdvLCBmYWxzZSwgbWF4VGV4dHVyZVNpemUpO1xuXHRcdGltYWdlID0gdmVyaWZ5Q29sb3JTcGFjZSh0ZXh0dXJlLCBpbWFnZSk7XG5cdFx0Y29uc3Qgc3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEoaW1hZ2UpIHx8IGlzV2ViR0wyLFxuXHRcdFx0XHRcdGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0bGV0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKSxcblx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KHRleHR1cmUuaW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIHRleHR1cmUuZW5jb2RpbmcsIHRleHR1cmUuaXNWaWRlb1RleHR1cmUpO1xuXHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKHRleHR1cmVUeXBlLCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMpO1xuXHRcdGxldCBtaXBtYXA7XG5cdFx0Y29uc3QgbWlwbWFwcyA9IHRleHR1cmUubWlwbWFwcztcblx0XHRjb25zdCB1c2VUZXhTdG9yYWdlID0gaXNXZWJHTDIgJiYgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSAhPT0gdHJ1ZTtcblx0XHRjb25zdCBhbGxvY2F0ZU1lbW9yeSA9IHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGxldmVscyA9IGdldE1pcExldmVscyh0ZXh0dXJlLCBpbWFnZSwgc3VwcG9ydHNNaXBzKTtcblxuXHRcdGlmICh0ZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSB7XG5cdFx0XHQvLyBwb3B1bGF0ZSBkZXB0aCB0ZXh0dXJlIHdpdGggZHVtbXkgZGF0YVxuXHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQ7XG5cblx0XHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0XHRpZiAodGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUpIHtcblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBPTkVOVDMyRjtcblx0XHRcdFx0fSBlbHNlIGlmICh0ZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50VHlwZSkge1xuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfQ09NUE9ORU5UMjQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGV4dHVyZS50eXBlID09PSBVbnNpZ25lZEludDI0OFR5cGUpIHtcblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIMjRfU1RFTkNJTDg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQxNjsgLy8gV2ViR0wyIHJlcXVpcmVzIHNpemVkIGludGVybmFsZm9ybWF0IGZvciBnbFRleEltYWdlMkRcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHRleHR1cmUudHlwZSA9PT0gRmxvYXRUeXBlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gdmFsaWRhdGlvbiBjaGVja3MgZm9yIFdlYkdMIDFcblxuXG5cdFx0XHRpZiAodGV4dHVyZS5mb3JtYXQgPT09IERlcHRoRm9ybWF0ICYmIGdsSW50ZXJuYWxGb3JtYXQgPT09IF9nbC5ERVBUSF9DT01QT05FTlQpIHtcblx0XHRcdFx0Ly8gVGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzIGdlbmVyYXRlZCBieSB0ZXhJbWFnZTJEIGlmIGZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgYXJlXG5cdFx0XHRcdC8vIERFUFRIX0NPTVBPTkVOVCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfU0hPUlQgb3IgVU5TSUdORURfSU5UXG5cdFx0XHRcdC8vIChodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL1dFQkdMX2RlcHRoX3RleHR1cmUvKVxuXHRcdFx0XHRpZiAodGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZFNob3J0VHlwZSAmJiB0ZXh0dXJlLnR5cGUgIT09IFVuc2lnbmVkSW50VHlwZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLicpO1xuXHRcdFx0XHRcdHRleHR1cmUudHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdFx0XHRcdGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dHVyZS5mb3JtYXQgPT09IERlcHRoU3RlbmNpbEZvcm1hdCAmJiBnbEludGVybmFsRm9ybWF0ID09PSBfZ2wuREVQVEhfQ09NUE9ORU5UKSB7XG5cdFx0XHRcdC8vIERlcHRoIHN0ZW5jaWwgdGV4dHVyZXMgbmVlZCB0aGUgREVQVEhfU1RFTkNJTCBpbnRlcm5hbCBmb3JtYXRcblx0XHRcdFx0Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pXG5cdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfU1RFTkNJTDsgLy8gVGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzIGdlbmVyYXRlZCBieSB0ZXhJbWFnZTJEIGlmIGZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgYXJlXG5cdFx0XHRcdC8vIERFUFRIX1NURU5DSUwgYW5kIHR5cGUgaXMgbm90IFVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLlxuXHRcdFx0XHQvLyAoaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9kZXB0aF90ZXh0dXJlLylcblxuXHRcdFx0XHRpZiAodGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZEludDI0OFR5cGUpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuJyk7XG5cdFx0XHRcdFx0dGV4dHVyZS50eXBlID0gVW5zaWduZWRJbnQyNDhUeXBlO1xuXHRcdFx0XHRcdGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSAvL1xuXG5cblx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV8yRCwgMSwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRleHR1cmUuaXNEYXRhVGV4dHVyZSkge1xuXHRcdFx0Ly8gdXNlIG1hbnVhbGx5IGNyZWF0ZWQgbWlwbWFwcyBpZiBhdmFpbGFibGVcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBubyBtYW51YWwgbWlwbWFwc1xuXHRcdFx0Ly8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBtaXBtYXAgbGV2ZWxzXG5cdFx0XHRpZiAobWlwbWFwcy5sZW5ndGggPiAwICYmIHN1cHBvcnRzTWlwcykge1xuXHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXBzWzBdLndpZHRoLCBtaXBtYXBzWzBdLmhlaWdodCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBtaXBtYXBzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRtaXBtYXAgPSBtaXBtYXBzW2ldO1xuXG5cdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRpZiAoYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlKSB7XG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwc1swXS53aWR0aCwgbWlwbWFwc1swXS5oZWlnaHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBtaXBtYXBzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0bWlwbWFwID0gbWlwbWFwc1tpXTtcblxuXHRcdFx0XHRpZiAodGV4dHVyZS5mb3JtYXQgIT09IFJHQkFGb3JtYXQpIHtcblx0XHRcdFx0XHRpZiAoZ2xGb3JtYXQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBpLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgaSwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgaSwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGksIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSkge1xuXHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0aWYgKGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTNEKF9nbC5URVhUVVJFXzJEX0FSUkFZLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlM0QoX2dsLlRFWFRVUkVfMkRfQVJSQVksIDAsIDAsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXRlLnRleEltYWdlM0QoX2dsLlRFWFRVUkVfMkRfQVJSQVksIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEKSB7XG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRpZiAoYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlM0QoX2dsLlRFWFRVUkVfM0QsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UzRChfZ2wuVEVYVFVSRV8zRCwgMCwgMCwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UzRChfZ2wuVEVYVFVSRV8zRCwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGVwdGgsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGV4dHVyZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSkge1xuXHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHJlZ3VsYXIgVGV4dHVyZSAoaW1hZ2UsIHZpZGVvLCBjYW52YXMpXG5cdFx0XHQvLyB1c2UgbWFudWFsbHkgY3JlYXRlZCBtaXBtYXBzIGlmIGF2YWlsYWJsZVxuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzXG5cdFx0XHQvLyBzZXQgMCBsZXZlbCBtaXBtYXAgYW5kIHRoZW4gdXNlIEdMIHRvIGdlbmVyYXRlIG90aGVyIG1pcG1hcCBsZXZlbHNcblx0XHRcdGlmIChtaXBtYXBzLmxlbmd0aCA+IDAgJiYgc3VwcG9ydHNNaXBzKSB7XG5cdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5KSB7XG5cdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcHNbMF0ud2lkdGgsIG1pcG1hcHNbMF0uaGVpZ2h0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdG1pcG1hcCA9IG1pcG1hcHNbaV07XG5cblx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgaSwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgaSwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRpZiAoYWxsb2NhdGVNZW1vcnkpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyh0ZXh0dXJlLCBzdXBwb3J0c01pcHMpKSB7XG5cdFx0XHRnZW5lcmF0ZU1pcG1hcCh0ZXh0dXJlVHlwZSk7XG5cdFx0fVxuXG5cdFx0dGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4dHVyZS52ZXJzaW9uO1xuXHRcdGlmICh0ZXh0dXJlLm9uVXBkYXRlKSB0ZXh0dXJlLm9uVXBkYXRlKHRleHR1cmUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBsb2FkQ3ViZVRleHR1cmUodGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QpIHtcblx0XHRpZiAodGV4dHVyZS5pbWFnZS5sZW5ndGggIT09IDYpIHJldHVybjtcblx0XHRpbml0VGV4dHVyZSh0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSk7XG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZShfZ2wuVEVYVFVSRTAgKyBzbG90KTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0ZXh0dXJlLmZsaXBZKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQUxJR05NRU5ULCB0ZXh0dXJlLnVucGFja0FsaWdubWVudCk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wsIF9nbC5OT05FKTtcblxuXHRcdGNvbnN0IGlzQ29tcHJlc3NlZCA9IHRleHR1cmUgJiYgKHRleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSB8fCB0ZXh0dXJlLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpO1xuXHRcdGNvbnN0IGlzRGF0YVRleHR1cmUgPSB0ZXh0dXJlLmltYWdlWzBdICYmIHRleHR1cmUuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZTtcblx0XHRjb25zdCBjdWJlSW1hZ2UgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRpZiAoIWlzQ29tcHJlc3NlZCAmJiAhaXNEYXRhVGV4dHVyZSkge1xuXHRcdFx0XHRjdWJlSW1hZ2VbaV0gPSByZXNpemVJbWFnZSh0ZXh0dXJlLmltYWdlW2ldLCBmYWxzZSwgdHJ1ZSwgbWF4Q3ViZW1hcFNpemUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3ViZUltYWdlW2ldID0gaXNEYXRhVGV4dHVyZSA/IHRleHR1cmUuaW1hZ2VbaV0uaW1hZ2UgOiB0ZXh0dXJlLmltYWdlW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRjdWJlSW1hZ2VbaV0gPSB2ZXJpZnlDb2xvclNwYWNlKHRleHR1cmUsIGN1YmVJbWFnZVtpXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW1hZ2UgPSBjdWJlSW1hZ2VbMF0sXG5cdFx0XHRcdFx0c3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEoaW1hZ2UpIHx8IGlzV2ViR0wyLFxuXHRcdFx0XHRcdGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyksXG5cdFx0XHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLnR5cGUpLFxuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nKTtcblx0XHRjb25zdCB1c2VUZXhTdG9yYWdlID0gaXNXZWJHTDIgJiYgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSAhPT0gdHJ1ZTtcblx0XHRjb25zdCBhbGxvY2F0ZU1lbW9yeSA9IHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuXHRcdGxldCBsZXZlbHMgPSBnZXRNaXBMZXZlbHModGV4dHVyZSwgaW1hZ2UsIHN1cHBvcnRzTWlwcyk7XG5cdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnMoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyk7XG5cdFx0bGV0IG1pcG1hcHM7XG5cblx0XHRpZiAoaXNDb21wcmVzc2VkKSB7XG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRcdG1pcG1hcHMgPSBjdWJlSW1hZ2VbaV0ubWlwbWFwcztcblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG1pcG1hcHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRjb25zdCBtaXBtYXAgPSBtaXBtYXBzW2pdO1xuXG5cdFx0XHRcdFx0aWYgKHRleHR1cmUuZm9ybWF0ICE9PSBSR0JBRm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRpZiAoZ2xGb3JtYXQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKScpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGosIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzO1xuXG5cdFx0XHRpZiAodXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSkge1xuXHRcdFx0XHQvLyBUT0RPOiBVbmlmb3JtbHkgaGFuZGxlIG1pcG1hcCBkZWZpbml0aW9uc1xuXHRcdFx0XHQvLyBOb3JtYWwgdGV4dHVyZXMgYW5kIGNvbXByZXNzZWQgY3ViZSB0ZXh0dXJlcyBkZWZpbmUgYmFzZSBsZXZlbCArIG1pcHMgd2l0aCB0aGVpciBtaXBtYXAgYXJyYXlcblx0XHRcdFx0Ly8gVW5jb21wcmVzc2VkIGN1YmUgdGV4dHVyZXMgdXNlIHRoZWlyIG1pcG1hcCBhcnJheSBvbmx5IGZvciBtaXBzIChubyBiYXNlIGxldmVsKVxuXHRcdFx0XHRpZiAobWlwbWFwcy5sZW5ndGggPiAwKSBsZXZlbHMrKztcblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGN1YmVJbWFnZVswXS53aWR0aCwgY3ViZUltYWdlWzBdLmhlaWdodCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRcdGlmIChpc0RhdGFUZXh0dXJlKSB7XG5cdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIDAsIDAsIDAsIGN1YmVJbWFnZVtpXS53aWR0aCwgY3ViZUltYWdlW2ldLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlW2ldLmRhdGEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBnbEludGVybmFsRm9ybWF0LCBjdWJlSW1hZ2VbaV0ud2lkdGgsIGN1YmVJbWFnZVtpXS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGN1YmVJbWFnZVtpXS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG1pcG1hcHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IG1pcG1hcCA9IG1pcG1hcHNbal07XG5cdFx0XHRcdFx0XHRjb25zdCBtaXBtYXBJbWFnZSA9IG1pcG1hcC5pbWFnZVtpXS5pbWFnZTtcblxuXHRcdFx0XHRcdFx0aWYgKHVzZVRleFN0b3JhZ2UpIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiArIDEsIDAsIDAsIG1pcG1hcEltYWdlLndpZHRoLCBtaXBtYXBJbWFnZS5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcEltYWdlLmRhdGEpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiArIDEsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcEltYWdlLndpZHRoLCBtaXBtYXBJbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcEltYWdlLmRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodXNlVGV4U3RvcmFnZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgMCwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlW2ldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG1pcG1hcHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IG1pcG1hcCA9IG1pcG1hcHNbal07XG5cblx0XHRcdFx0XHRcdGlmICh1c2VUZXhTdG9yYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGogKyAxLCAwLCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuaW1hZ2VbaV0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgaiArIDEsIGdsSW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5pbWFnZVtpXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyh0ZXh0dXJlLCBzdXBwb3J0c01pcHMpKSB7XG5cdFx0XHQvLyBXZSBhc3N1bWUgaW1hZ2VzIGZvciBjdWJlIG1hcCBoYXZlIHRoZSBzYW1lIHNpemUuXG5cdFx0XHRnZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XG5cdFx0fVxuXG5cdFx0dGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4dHVyZS52ZXJzaW9uO1xuXHRcdGlmICh0ZXh0dXJlLm9uVXBkYXRlKSB0ZXh0dXJlLm9uVXBkYXRlKHRleHR1cmUpO1xuXHR9IC8vIFJlbmRlciB0YXJnZXRzXG5cdC8vIFNldHVwIHN0b3JhZ2UgZm9yIHRhcmdldCB0ZXh0dXJlIGFuZCBiaW5kIGl0IHRvIGNvcnJlY3QgZnJhbWVidWZmZXJcblxuXG5cdGZ1bmN0aW9uIHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKGZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQpIHtcblx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS5mb3JtYXQsIHRleHR1cmUuZW5jb2RpbmcpO1xuXHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKTtcblx0XHRjb25zdCBnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQodGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cblx0XHRpZiAoIXJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzKSB7XG5cdFx0XHRpZiAodGV4dHVyZVRhcmdldCA9PT0gX2dsLlRFWFRVUkVfM0QgfHwgdGV4dHVyZVRhcmdldCA9PT0gX2dsLlRFWFRVUkVfMkRfQVJSQVkpIHtcblx0XHRcdFx0c3RhdGUudGV4SW1hZ2UzRCh0ZXh0dXJlVGFyZ2V0LCAwLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQsIHJlbmRlclRhcmdldC5kZXB0aCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKHRleHR1cmVUYXJnZXQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUpIHtcblx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKF9nbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGV4dHVyZVRhcmdldCwgcHJvcGVydGllcy5nZXQodGV4dHVyZSkuX193ZWJnbFRleHR1cmUsIDAsIGdldFJlbmRlclRhcmdldFNhbXBsZXMocmVuZGVyVGFyZ2V0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChfZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQsIHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLCAwKTtcblx0XHR9XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBudWxsKTtcblx0fSAvLyBTZXR1cCBzdG9yYWdlIGZvciBpbnRlcm5hbCBkZXB0aC9zdGVuY2lsIGJ1ZmZlcnMgYW5kIGJpbmQgdG8gY29ycmVjdCBmcmFtZWJ1ZmZlclxuXG5cblx0ZnVuY3Rpb24gc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKHJlbmRlcmJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCBpc011bHRpc2FtcGxlKSB7XG5cdFx0X2dsLmJpbmRSZW5kZXJidWZmZXIoX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgIXJlbmRlclRhcmdldC5zdGVuY2lsQnVmZmVyKSB7XG5cdFx0XHRsZXQgZ2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQxNjtcblxuXHRcdFx0aWYgKGlzTXVsdGlzYW1wbGUgfHwgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSkge1xuXHRcdFx0XHRjb25zdCBkZXB0aFRleHR1cmUgPSByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlO1xuXG5cdFx0XHRcdGlmIChkZXB0aFRleHR1cmUgJiYgZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSB7XG5cdFx0XHRcdFx0aWYgKGRlcHRoVGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUpIHtcblx0XHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfQ09NUE9ORU5UMzJGO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGVwdGhUZXh0dXJlLnR5cGUgPT09IFVuc2lnbmVkSW50VHlwZSkge1xuXHRcdFx0XHRcdFx0Z2xJbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQyNDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpO1xuXG5cdFx0XHRcdGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChfZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoX2dsLlJFTkRFUkJVRkZFUiwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoX2dsLlJFTkRFUkJVRkZFUiwgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX0FUVEFDSE1FTlQsIF9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7XG5cdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIpIHtcblx0XHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKHJlbmRlclRhcmdldCk7XG5cblx0XHRcdGlmIChpc011bHRpc2FtcGxlICYmIHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIpIHtcblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShfZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBfZ2wuREVQVEgyNF9TVEVOQ0lMOCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdH0gZWxzZSBpZiAocmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSkge1xuXHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKF9nbC5SRU5ERVJCVUZGRVIsIHNhbXBsZXMsIF9nbC5ERVBUSDI0X1NURU5DSUw4LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoX2dsLlJFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX1NURU5DSUwsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cdFx0XHR9XG5cblx0XHRcdF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIF9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFVzZSB0aGUgZmlyc3QgdGV4dHVyZSBmb3IgTVJUIHNvIGZhclxuXHRcdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID09PSB0cnVlID8gcmVuZGVyVGFyZ2V0LnRleHR1cmVbMF0gOiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0XHRjb25zdCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KHRleHR1cmUudHlwZSk7XG5cdFx0XHRjb25zdCBnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQodGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0XHRjb25zdCBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpO1xuXG5cdFx0XHRpZiAoaXNNdWx0aXNhbXBsZSAmJiByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyKSB7XG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoX2dsLlJFTkRFUkJVRkZFUiwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblx0XHRcdH0gZWxzZSBpZiAocmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSkge1xuXHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKF9nbC5SRU5ERVJCVUZGRVIsIHNhbXBsZXMsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShfZ2wuUkVOREVSQlVGRkVSLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9nbC5iaW5kUmVuZGVyYnVmZmVyKF9nbC5SRU5ERVJCVUZGRVIsIG51bGwpO1xuXHR9IC8vIFNldHVwIHJlc291cmNlcyBmb3IgYSBEZXB0aCBUZXh0dXJlIGZvciBhIEZCTyAobmVlZHMgYW4gZXh0ZW5zaW9uKVxuXG5cblx0ZnVuY3Rpb24gc2V0dXBEZXB0aFRleHR1cmUoZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IGlzQ3ViZSA9IHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ7XG5cdFx0aWYgKGlzQ3ViZSkgdGhyb3cgbmV3IEVycm9yKCdEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpO1xuXG5cdFx0aWYgKCEocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAmJiByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlJyk7XG5cdFx0fSAvLyB1cGxvYWQgYW4gZW1wdHkgZGVwdGggdGV4dHVyZSB3aXRoIGZyYW1lYnVmZmVyIHNpemVcblxuXG5cdFx0aWYgKCFwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSB8fCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoICE9PSByZW5kZXJUYXJnZXQud2lkdGggfHwgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQgIT09IHJlbmRlclRhcmdldC5oZWlnaHQpIHtcblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGggPSByZW5kZXJUYXJnZXQud2lkdGg7XG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCA9IHJlbmRlclRhcmdldC5oZWlnaHQ7XG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRzZXRUZXh0dXJlMkQocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSwgMCk7XG5cblx0XHRjb25zdCB3ZWJnbERlcHRoVGV4dHVyZSA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlO1xuXG5cdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMocmVuZGVyVGFyZ2V0KTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQpIHtcblx0XHRcdGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJFXzJELCB3ZWJnbERlcHRoVGV4dHVyZSwgMCwgc2FtcGxlcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoX2dsLkZSQU1FQlVGRkVSLCBfZ2wuREVQVEhfQVRUQUNITUVOVCwgX2dsLlRFWFRVUkVfMkQsIHdlYmdsRGVwdGhUZXh0dXJlLCAwKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZm9ybWF0ID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQpIHtcblx0XHRcdGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgX2dsLlRFWFRVUkVfMkQsIHdlYmdsRGVwdGhUZXh0dXJlLCAwLCBzYW1wbGVzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJFXzJELCB3ZWJnbERlcHRoVGV4dHVyZSwgMCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Jyk7XG5cdFx0fVxuXHR9IC8vIFNldHVwIEdMIHJlc291cmNlcyBmb3IgYSBub24tdGV4dHVyZSBkZXB0aCBidWZmZXJcblxuXG5cdGZ1bmN0aW9uIHNldHVwRGVwdGhSZW5kZXJidWZmZXIocmVuZGVyVGFyZ2V0KSB7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cdFx0Y29uc3QgaXNDdWJlID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID09PSB0cnVlO1xuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgJiYgIXJlbmRlclRhcmdldFByb3BlcnRpZXMuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcikge1xuXHRcdFx0aWYgKGlzQ3ViZSkgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cycpO1xuXHRcdFx0c2V0dXBEZXB0aFRleHR1cmUocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc0N1YmUpIHtcblx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyW2ldKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblx0XHRcdFx0XHRzZXR1cFJlbmRlckJ1ZmZlclN0b3JhZ2UocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbaV0sIHJlbmRlclRhcmdldCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7XG5cdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0XHRzZXR1cFJlbmRlckJ1ZmZlclN0b3JhZ2UocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIsIHJlbmRlclRhcmdldCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXHR9IC8vIHJlYmluZCBmcmFtZWJ1ZmZlciB3aXRoIGV4dGVybmFsIHRleHR1cmVzXG5cblxuXHRmdW5jdGlvbiByZWJpbmRUZXh0dXJlcyhyZW5kZXJUYXJnZXQsIGNvbG9yVGV4dHVyZSwgZGVwdGhUZXh0dXJlKSB7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldCk7XG5cblx0XHRpZiAoY29sb3JUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldC50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9nbC5URVhUVVJFXzJEKTtcblx0XHR9XG5cblx0XHRpZiAoZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHVwRGVwdGhSZW5kZXJidWZmZXIocmVuZGVyVGFyZ2V0KTtcblx0XHR9XG5cdH0gLy8gU2V0IHVwIEdMIHJlc291cmNlcyBmb3IgdGhlIHJlbmRlciB0YXJnZXRcblxuXG5cdGZ1bmN0aW9uIHNldHVwUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KTtcblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpO1xuXHRcdHJlbmRlclRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25SZW5kZXJUYXJnZXREaXNwb3NlKTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPSB0ZXh0dXJlLnZlcnNpb247XG5cdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcysrO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzQ3ViZSA9IHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCA9PT0gdHJ1ZTtcblx0XHRjb25zdCBpc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID09PSB0cnVlO1xuXHRcdGNvbnN0IGlzUmVuZGVyVGFyZ2V0M0QgPSB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRCB8fCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5O1xuXHRcdGNvbnN0IHN1cHBvcnRzTWlwcyA9IGlzUG93ZXJPZlR3byQxKHJlbmRlclRhcmdldCkgfHwgaXNXZWJHTDI7IC8vIFNldHVwIGZyYW1lYnVmZmVyXG5cblx0XHRpZiAoaXNDdWJlKSB7XG5cdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuXHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcltpXSA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXG5cdFx0XHRpZiAoaXNNdWx0aXBsZVJlbmRlclRhcmdldHMpIHtcblx0XHRcdFx0aWYgKGNhcGFiaWxpdGllcy5kcmF3QnVmZmVycykge1xuXHRcdFx0XHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmVzW2ldKTtcblxuXHRcdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXHRcdFx0XHRcdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcysrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyKSB7XG5cdFx0XHRcdGlmIChpc1dlYkdMMikge1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIgPSBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG5cblx0XHRcdFx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlcihfZ2wuUkVOREVSQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7XG5cblx0XHRcdFx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS5mb3JtYXQsIHRleHR1cmUuZW5jb2RpbmcpO1xuXHRcdFx0XHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQodGV4dHVyZS50eXBlKTtcblx0XHRcdFx0XHRjb25zdCBnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQodGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyk7XG5cdFx0XHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMocmVuZGVyVGFyZ2V0KTtcblxuXHRcdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoX2dsLlJFTkRFUkJVRkZFUiwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKTtcblxuXHRcdFx0XHRcdF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO1xuXG5cdFx0XHRcdFx0X2dsLmJpbmRSZW5kZXJidWZmZXIoX2dsLlJFTkRFUkJVRkZFUiwgbnVsbCk7XG5cblx0XHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyKSB7XG5cdFx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblx0XHRcdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBudWxsKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gLy8gU2V0dXAgY29sb3IgYnVmZmVyXG5cblxuXHRcdGlmIChpc0N1YmUpIHtcblx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSk7XG5cdFx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyhfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZSwgc3VwcG9ydHNNaXBzKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcblx0XHRcdFx0c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbaV0sIHJlbmRlclRhcmdldCwgdGV4dHVyZSwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHModGV4dHVyZSwgc3VwcG9ydHNNaXBzKSkge1xuXHRcdFx0XHRnZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblx0XHR9IGVsc2UgaWYgKGlzTXVsdGlwbGVSZW5kZXJUYXJnZXRzKSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlcyA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB0ZXh0dXJlc1tpXTtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChhdHRhY2htZW50KTtcblx0XHRcdFx0c3RhdGUuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0XHRcdFx0c2V0VGV4dHVyZVBhcmFtZXRlcnMoX2dsLlRFWFRVUkVfMkQsIGF0dGFjaG1lbnQsIHN1cHBvcnRzTWlwcyk7XG5cdFx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIGF0dGFjaG1lbnQsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIGksIF9nbC5URVhUVVJFXzJEKTtcblxuXHRcdFx0XHRpZiAodGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKGF0dGFjaG1lbnQsIHN1cHBvcnRzTWlwcykpIHtcblx0XHRcdFx0XHRnZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZ2xUZXh0dXJlVHlwZSA9IF9nbC5URVhUVVJFXzJEO1xuXG5cdFx0XHRpZiAoaXNSZW5kZXJUYXJnZXQzRCkge1xuXHRcdFx0XHQvLyBSZW5kZXIgdGFyZ2V0cyBjb250YWluaW5nIGxheWVycywgaS5lOiBUZXh0dXJlIDNEIGFuZCAyZCBhcnJheXNcblx0XHRcdFx0aWYgKGlzV2ViR0wyKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUZXh0dXJlM0QgPSB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRDtcblx0XHRcdFx0XHRnbFRleHR1cmVUeXBlID0gaXNUZXh0dXJlM0QgPyBfZ2wuVEVYVFVSRV8zRCA6IF9nbC5URVhUVVJFXzJEX0FSUkFZO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKGdsVGV4dHVyZVR5cGUsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlKTtcblx0XHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKGdsVGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyk7XG5cdFx0XHRzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZShyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCB0ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsVGV4dHVyZVR5cGUpO1xuXG5cdFx0XHRpZiAodGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKHRleHR1cmUsIHN1cHBvcnRzTWlwcykpIHtcblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXAoZ2xUZXh0dXJlVHlwZSk7XG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblx0XHR9IC8vIFNldHVwIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnNcblxuXG5cdFx0aWYgKHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlcikge1xuXHRcdFx0c2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcihyZW5kZXJUYXJnZXQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChyZW5kZXJUYXJnZXQpIHtcblx0XHRjb25zdCBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMShyZW5kZXJUYXJnZXQpIHx8IGlzV2ViR0wyO1xuXHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPT09IHRydWUgPyByZW5kZXJUYXJnZXQudGV4dHVyZSA6IFtyZW5kZXJUYXJnZXQudGV4dHVyZV07XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gdGV4dHVyZXNbaV07XG5cblx0XHRcdGlmICh0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHModGV4dHVyZSwgc3VwcG9ydHNNaXBzKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgPyBfZ2wuVEVYVFVSRV9DVUJFX01BUCA6IF9nbC5URVhUVVJFXzJEO1xuXG5cdFx0XHRcdGNvbnN0IHdlYmdsVGV4dHVyZSA9IHByb3BlcnRpZXMuZ2V0KHRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlO1xuXG5cdFx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKHRhcmdldCwgd2ViZ2xUZXh0dXJlKTtcblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTtcblx0XHRcdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkge1xuXHRcdGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyKSB7XG5cdFx0XHRpZiAoaXNXZWJHTDIpIHtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSByZW5kZXJUYXJnZXQud2lkdGg7XG5cdFx0XHRcdGNvbnN0IGhlaWdodCA9IHJlbmRlclRhcmdldC5oZWlnaHQ7XG5cdFx0XHRcdGxldCBtYXNrID0gX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XG5cdFx0XHRcdGNvbnN0IGludmFsaWRhdGlvbkFycmF5ID0gW19nbC5DT0xPUl9BVFRBQ0hNRU5UMF07XG5cdFx0XHRcdGNvbnN0IGRlcHRoU3R5bGUgPSByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciA/IF9nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgOiBfZ2wuREVQVEhfQVRUQUNITUVOVDtcblxuXHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyKSB7XG5cdFx0XHRcdFx0aW52YWxpZGF0aW9uQXJyYXkucHVzaChkZXB0aFN0eWxlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcmVuZGVyVGFyZ2V0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5KSB7XG5cdFx0XHRcdFx0aWYgKHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlcikgbWFzayB8PSBfZ2wuREVQVEhfQlVGRkVSX0JJVDtcblx0XHRcdFx0XHRpZiAocmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIpIG1hc2sgfD0gX2dsLlNURU5DSUxfQlVGRkVSX0JJVDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLlJFQURfRlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKTtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKF9nbC5EUkFXX0ZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7XG5cblx0XHRcdFx0aWYgKHJlbmRlclRhcmdldC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSkge1xuXHRcdFx0XHRcdF9nbC5pbnZhbGlkYXRlRnJhbWVidWZmZXIoX2dsLlJFQURfRlJBTUVCVUZGRVIsIFtkZXB0aFN0eWxlXSk7XG5cblx0XHRcdFx0XHRfZ2wuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKF9nbC5EUkFXX0ZSQU1FQlVGRkVSLCBbZGVwdGhTdHlsZV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2dsLmJsaXRGcmFtZWJ1ZmZlcigwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBtYXNrLCBfZ2wuTkVBUkVTVCk7XG5cblx0XHRcdFx0X2dsLmludmFsaWRhdGVGcmFtZWJ1ZmZlcihfZ2wuUkVBRF9GUkFNRUJVRkZFUiwgaW52YWxpZGF0aW9uQXJyYXkpO1xuXG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuUkVBRF9GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRFJBV19GUkFNRUJVRkZFUiwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyhyZW5kZXJUYXJnZXQpIHtcblx0XHRyZXR1cm4gaXNXZWJHTDIgJiYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIgfHwgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSkgPyBNYXRoLm1pbihtYXhTYW1wbGVzLCByZW5kZXJUYXJnZXQuc2FtcGxlcykgOiAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlVmlkZW9UZXh0dXJlKHRleHR1cmUpIHtcblx0XHRjb25zdCBmcmFtZSA9IGluZm8ucmVuZGVyLmZyYW1lOyAvLyBDaGVjayB0aGUgbGFzdCBmcmFtZSB3ZSB1cGRhdGVkIHRoZSBWaWRlb1RleHR1cmVcblxuXHRcdGlmIChfdmlkZW9UZXh0dXJlcy5nZXQodGV4dHVyZSkgIT09IGZyYW1lKSB7XG5cdFx0XHRfdmlkZW9UZXh0dXJlcy5zZXQodGV4dHVyZSwgZnJhbWUpO1xuXG5cdFx0XHR0ZXh0dXJlLnVwZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHZlcmlmeUNvbG9yU3BhY2UodGV4dHVyZSwgaW1hZ2UpIHtcblx0XHRjb25zdCBlbmNvZGluZyA9IHRleHR1cmUuZW5jb2Rpbmc7XG5cdFx0Y29uc3QgZm9ybWF0ID0gdGV4dHVyZS5mb3JtYXQ7XG5cdFx0Y29uc3QgdHlwZSA9IHRleHR1cmUudHlwZTtcblx0XHRpZiAodGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlID09PSB0cnVlIHx8IHRleHR1cmUuaXNWaWRlb1RleHR1cmUgPT09IHRydWUgfHwgdGV4dHVyZS5mb3JtYXQgPT09IF9TUkdCQUZvcm1hdCkgcmV0dXJuIGltYWdlO1xuXG5cdFx0aWYgKGVuY29kaW5nICE9PSBMaW5lYXJFbmNvZGluZykge1xuXHRcdFx0Ly8gc1JHQlxuXHRcdFx0aWYgKGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcpIHtcblx0XHRcdFx0aWYgKGlzV2ViR0wyID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdC8vIGluIFdlYkdMIDEsIHRyeSB0byB1c2UgRVhUX3NSR0IgZXh0ZW5zaW9uIGFuZCB1bnNpemVkIGZvcm1hdHNcblx0XHRcdFx0XHRpZiAoZXh0ZW5zaW9ucy5oYXMoJ0VYVF9zUkdCJykgPT09IHRydWUgJiYgZm9ybWF0ID09PSBSR0JBRm9ybWF0KSB7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IF9TUkdCQUZvcm1hdDsgLy8gaXQncyBub3QgcG9zc2libGUgdG8gZ2VuZXJhdGUgbWlwcyBpbiBXZWJHTCAxIHdpdGggdGhpcyBleHRlbnNpb25cblxuXHRcdFx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBzbG93IGZhbGxiYWNrIChDUFUgZGVjb2RlKVxuXHRcdFx0XHRcdFx0aW1hZ2UgPSBJbWFnZVV0aWxzLnNSR0JUb0xpbmVhcihpbWFnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGluIFdlYkdMIDIgdW5jb21wcmVzc2VkIHRleHR1cmVzIGNhbiBvbmx5IGJlIHNSR0IgZW5jb2RlZCBpZiB0aGV5IGhhdmUgdGhlIFJHQkE4IGZvcm1hdFxuXHRcdFx0XHRcdGlmIChmb3JtYXQgIT09IFJHQkFGb3JtYXQgfHwgdHlwZSAhPT0gVW5zaWduZWRCeXRlVHlwZSkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6JywgZW5jb2RpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbWFnZTtcblx0fSAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG5cblx0bGV0IHdhcm5lZFRleHR1cmUyRCA9IGZhbHNlO1xuXHRsZXQgd2FybmVkVGV4dHVyZUN1YmUgPSBmYWxzZTtcblxuXHRmdW5jdGlvbiBzYWZlU2V0VGV4dHVyZTJEKHRleHR1cmUsIHNsb3QpIHtcblx0XHRpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLmlzV2ViR0xSZW5kZXJUYXJnZXQpIHtcblx0XHRcdGlmICh3YXJuZWRUZXh0dXJlMkQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb25cXCd0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuJyk7XG5cdFx0XHRcdHdhcm5lZFRleHR1cmUyRCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG5cdFx0fVxuXG5cdFx0c2V0VGV4dHVyZTJEKHRleHR1cmUsIHNsb3QpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2FmZVNldFRleHR1cmVDdWJlKHRleHR1cmUsIHNsb3QpIHtcblx0XHRpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRpZiAod2FybmVkVGV4dHVyZUN1YmUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvblxcJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuXHRcdFx0XHR3YXJuZWRUZXh0dXJlQ3ViZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG5cdFx0fVxuXG5cdFx0c2V0VGV4dHVyZUN1YmUodGV4dHVyZSwgc2xvdCk7XG5cdH0gLy9cblxuXG5cdHRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdCA9IGFsbG9jYXRlVGV4dHVyZVVuaXQ7XG5cdHRoaXMucmVzZXRUZXh0dXJlVW5pdHMgPSByZXNldFRleHR1cmVVbml0cztcblx0dGhpcy5zZXRUZXh0dXJlMkQgPSBzZXRUZXh0dXJlMkQ7XG5cdHRoaXMuc2V0VGV4dHVyZTJEQXJyYXkgPSBzZXRUZXh0dXJlMkRBcnJheTtcblx0dGhpcy5zZXRUZXh0dXJlM0QgPSBzZXRUZXh0dXJlM0Q7XG5cdHRoaXMuc2V0VGV4dHVyZUN1YmUgPSBzZXRUZXh0dXJlQ3ViZTtcblx0dGhpcy5yZWJpbmRUZXh0dXJlcyA9IHJlYmluZFRleHR1cmVzO1xuXHR0aGlzLnNldHVwUmVuZGVyVGFyZ2V0ID0gc2V0dXBSZW5kZXJUYXJnZXQ7XG5cdHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwID0gdXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwO1xuXHR0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0ID0gdXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ7XG5cdHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlciA9IHNldHVwRGVwdGhSZW5kZXJidWZmZXI7XG5cdHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUgPSBzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZTtcblx0dGhpcy5zYWZlU2V0VGV4dHVyZTJEID0gc2FmZVNldFRleHR1cmUyRDtcblx0dGhpcy5zYWZlU2V0VGV4dHVyZUN1YmUgPSBzYWZlU2V0VGV4dHVyZUN1YmU7XG59XG5cbmZ1bmN0aW9uIFdlYkdMVXRpbHMoZ2wsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcykge1xuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblxuXHRmdW5jdGlvbiBjb252ZXJ0KHAsIGVuY29kaW5nID0gbnVsbCkge1xuXHRcdGxldCBleHRlbnNpb247XG5cdFx0aWYgKHAgPT09IFVuc2lnbmVkQnl0ZVR5cGUpIHJldHVybiBnbC5VTlNJR05FRF9CWVRFO1xuXHRcdGlmIChwID09PSBVbnNpZ25lZFNob3J0NDQ0NFR5cGUpIHJldHVybiBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80O1xuXHRcdGlmIChwID09PSBVbnNpZ25lZFNob3J0NTU1MVR5cGUpIHJldHVybiBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xO1xuXHRcdGlmIChwID09PSBCeXRlVHlwZSkgcmV0dXJuIGdsLkJZVEU7XG5cdFx0aWYgKHAgPT09IFNob3J0VHlwZSkgcmV0dXJuIGdsLlNIT1JUO1xuXHRcdGlmIChwID09PSBVbnNpZ25lZFNob3J0VHlwZSkgcmV0dXJuIGdsLlVOU0lHTkVEX1NIT1JUO1xuXHRcdGlmIChwID09PSBJbnRUeXBlKSByZXR1cm4gZ2wuSU5UO1xuXHRcdGlmIChwID09PSBVbnNpZ25lZEludFR5cGUpIHJldHVybiBnbC5VTlNJR05FRF9JTlQ7XG5cdFx0aWYgKHAgPT09IEZsb2F0VHlwZSkgcmV0dXJuIGdsLkZMT0FUO1xuXG5cdFx0aWYgKHAgPT09IEhhbGZGbG9hdFR5cGUpIHtcblx0XHRcdGlmIChpc1dlYkdMMikgcmV0dXJuIGdsLkhBTEZfRkxPQVQ7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBleHRlbnNpb24uSEFMRl9GTE9BVF9PRVM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocCA9PT0gQWxwaGFGb3JtYXQpIHJldHVybiBnbC5BTFBIQTtcblx0XHRpZiAocCA9PT0gUkdCQUZvcm1hdCkgcmV0dXJuIGdsLlJHQkE7XG5cdFx0aWYgKHAgPT09IEx1bWluYW5jZUZvcm1hdCkgcmV0dXJuIGdsLkxVTUlOQU5DRTtcblx0XHRpZiAocCA9PT0gTHVtaW5hbmNlQWxwaGFGb3JtYXQpIHJldHVybiBnbC5MVU1JTkFOQ0VfQUxQSEE7XG5cdFx0aWYgKHAgPT09IERlcHRoRm9ybWF0KSByZXR1cm4gZ2wuREVQVEhfQ09NUE9ORU5UO1xuXHRcdGlmIChwID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQpIHJldHVybiBnbC5ERVBUSF9TVEVOQ0lMO1xuXHRcdGlmIChwID09PSBSZWRGb3JtYXQpIHJldHVybiBnbC5SRUQ7IC8vIFdlYkdMIDEgc1JHQiBmYWxsYmFja1xuXG5cdFx0aWYgKHAgPT09IF9TUkdCQUZvcm1hdCkge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ0VYVF9zUkdCJyk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGV4dGVuc2lvbi5TUkdCX0FMUEhBX0VYVDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy8gV2ViR0wyIGZvcm1hdHMuXG5cblxuXHRcdGlmIChwID09PSBSZWRJbnRlZ2VyRm9ybWF0KSByZXR1cm4gZ2wuUkVEX0lOVEVHRVI7XG5cdFx0aWYgKHAgPT09IFJHRm9ybWF0KSByZXR1cm4gZ2wuUkc7XG5cdFx0aWYgKHAgPT09IFJHSW50ZWdlckZvcm1hdCkgcmV0dXJuIGdsLlJHX0lOVEVHRVI7XG5cdFx0aWYgKHAgPT09IFJHQkFJbnRlZ2VyRm9ybWF0KSByZXR1cm4gZ2wuUkdCQV9JTlRFR0VSOyAvLyBTM1RDXG5cblx0XHRpZiAocCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCB8fCBwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQpIHtcblx0XHRcdGlmIChlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nKSB7XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiJyk7XG5cblx0XHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JfUzNUQ19EWFQxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtcblx0XHRcdFx0XHRpZiAocCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JBX1MzVENfRFhUM19Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyk7XG5cblx0XHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JfUzNUQ19EWFQxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xuXHRcdFx0XHRcdGlmIChwID09PSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtcblx0XHRcdFx0XHRpZiAocCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSAvLyBQVlJUQ1xuXG5cblx0XHRpZiAocCA9PT0gUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCkge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmIChwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAocCA9PT0gUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy8gRVRDMVxuXG5cblx0XHRpZiAocCA9PT0gUkdCX0VUQzFfRm9ybWF0KSB7XG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEnKTtcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IC8vIEVUQzJcblxuXG5cdFx0aWYgKHAgPT09IFJHQl9FVEMyX0Zvcm1hdCB8fCBwID09PSBSR0JBX0VUQzJfRUFDX0Zvcm1hdCkge1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMnKTtcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRpZiAocCA9PT0gUkdCX0VUQzJfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0VUQzIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0I4X0VUQzI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0VUQzJfRUFDX0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gLy8gQVNUQ1xuXG5cblx0XHRpZiAocCA9PT0gUkdCQV9BU1RDXzR4NF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzV4NF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzV4NV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzZ4NV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzh4NV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzh4OF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDVfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDEwX0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQpIHtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycpO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfNHg0X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfNXg0X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfNXg1X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfNng1X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfNng2X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfOHg1X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfOHg2X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfOHg4X0Zvcm1hdCkgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTB4NV9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTB4Nl9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTB4MTBfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7XG5cdFx0XHRcdGlmIChwID09PSBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0KSByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IC8vIEJQVENcblxuXG5cdFx0aWYgKHAgPT09IFJHQkFfQlBUQ19Gb3JtYXQpIHtcblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjJyk7XG5cblx0XHRcdGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcblx0XHRcdFx0aWYgKHAgPT09IFJHQkFfQlBUQ19Gb3JtYXQpIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVCA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IC8vXG5cblxuXHRcdGlmIChwID09PSBVbnNpZ25lZEludDI0OFR5cGUpIHtcblx0XHRcdGlmIChpc1dlYkdMMikgcmV0dXJuIGdsLlVOU0lHTkVEX0lOVF8yNF84O1xuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcblxuXHRcdFx0aWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRjb252ZXJ0OiBjb252ZXJ0XG5cdH07XG59XG5cbmNsYXNzIEFycmF5Q2FtZXJhIGV4dGVuZHMgUGVyc3BlY3RpdmVDYW1lcmEge1xuXHRjb25zdHJ1Y3RvcihhcnJheSA9IFtdKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmNhbWVyYXMgPSBhcnJheTtcblx0fVxuXG59XG5cbkFycmF5Q2FtZXJhLnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhID0gdHJ1ZTtcblxuY2xhc3MgR3JvdXAgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0dyb3VwJztcblx0fVxuXG59XG5cbkdyb3VwLnByb3RvdHlwZS5pc0dyb3VwID0gdHJ1ZTtcblxuY29uc3QgX21vdmVFdmVudCA9IHtcblx0dHlwZTogJ21vdmUnXG59O1xuXG5jbGFzcyBXZWJYUkNvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl90YXJnZXRSYXkgPSBudWxsO1xuXHRcdHRoaXMuX2dyaXAgPSBudWxsO1xuXHRcdHRoaXMuX2hhbmQgPSBudWxsO1xuXHR9XG5cblx0Z2V0SGFuZFNwYWNlKCkge1xuXHRcdGlmICh0aGlzLl9oYW5kID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9oYW5kID0gbmV3IEdyb3VwKCk7XG5cdFx0XHR0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2hhbmQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5faGFuZC5qb2ludHMgPSB7fTtcblx0XHRcdHRoaXMuX2hhbmQuaW5wdXRTdGF0ZSA9IHtcblx0XHRcdFx0cGluY2hpbmc6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9oYW5kO1xuXHR9XG5cblx0Z2V0VGFyZ2V0UmF5U3BhY2UoKSB7XG5cdFx0aWYgKHRoaXMuX3RhcmdldFJheSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5ID0gbmV3IEdyb3VwKCk7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl90YXJnZXRSYXk7XG5cdH1cblxuXHRnZXRHcmlwU3BhY2UoKSB7XG5cdFx0aWYgKHRoaXMuX2dyaXAgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2dyaXAgPSBuZXcgR3JvdXAoKTtcblx0XHRcdHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZ3JpcC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2dyaXA7XG5cdH1cblxuXHRkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuX3RhcmdldFJheSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9ncmlwICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9oYW5kICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGlzY29ubmVjdChpbnB1dFNvdXJjZSkge1xuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHR0eXBlOiAnZGlzY29ubmVjdGVkJyxcblx0XHRcdGRhdGE6IGlucHV0U291cmNlXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy5fdGFyZ2V0UmF5ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9ncmlwICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9ncmlwLnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faGFuZCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5faGFuZC52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1cGRhdGUoaW5wdXRTb3VyY2UsIGZyYW1lLCByZWZlcmVuY2VTcGFjZSkge1xuXHRcdGxldCBpbnB1dFBvc2UgPSBudWxsO1xuXHRcdGxldCBncmlwUG9zZSA9IG51bGw7XG5cdFx0bGV0IGhhbmRQb3NlID0gbnVsbDtcblx0XHRjb25zdCB0YXJnZXRSYXkgPSB0aGlzLl90YXJnZXRSYXk7XG5cdFx0Y29uc3QgZ3JpcCA9IHRoaXMuX2dyaXA7XG5cdFx0Y29uc3QgaGFuZCA9IHRoaXMuX2hhbmQ7XG5cblx0XHRpZiAoaW5wdXRTb3VyY2UgJiYgZnJhbWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUgIT09ICd2aXNpYmxlLWJsdXJyZWQnKSB7XG5cdFx0XHRpZiAodGFyZ2V0UmF5ICE9PSBudWxsKSB7XG5cdFx0XHRcdGlucHV0UG9zZSA9IGZyYW1lLmdldFBvc2UoaW5wdXRTb3VyY2UudGFyZ2V0UmF5U3BhY2UsIHJlZmVyZW5jZVNwYWNlKTtcblxuXHRcdFx0XHRpZiAoaW5wdXRQb3NlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dGFyZ2V0UmF5Lm1hdHJpeC5mcm9tQXJyYXkoaW5wdXRQb3NlLnRyYW5zZm9ybS5tYXRyaXgpO1xuXHRcdFx0XHRcdHRhcmdldFJheS5tYXRyaXguZGVjb21wb3NlKHRhcmdldFJheS5wb3NpdGlvbiwgdGFyZ2V0UmF5LnJvdGF0aW9uLCB0YXJnZXRSYXkuc2NhbGUpO1xuXG5cdFx0XHRcdFx0aWYgKGlucHV0UG9zZS5saW5lYXJWZWxvY2l0eSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5saW5lYXJWZWxvY2l0eS5jb3B5KGlucHV0UG9zZS5saW5lYXJWZWxvY2l0eSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpbnB1dFBvc2UuYW5ndWxhclZlbG9jaXR5KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRhcmdldFJheS5hbmd1bGFyVmVsb2NpdHkuY29weShpbnB1dFBvc2UuYW5ndWxhclZlbG9jaXR5KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudChfbW92ZUV2ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFuZCAmJiBpbnB1dFNvdXJjZS5oYW5kKSB7XG5cdFx0XHRcdGhhbmRQb3NlID0gdHJ1ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0am9pbnQgb2YgaW5wdXRTb3VyY2UuaGFuZC52YWx1ZXMoKSkge1xuXHRcdFx0XHRcdC8vIFVwZGF0ZSB0aGUgam9pbnRzIGdyb3VwcyB3aXRoIHRoZSBYUkpvaW50IHBvc2VzXG5cdFx0XHRcdFx0Y29uc3Qgam9pbnRQb3NlID0gZnJhbWUuZ2V0Sm9pbnRQb3NlKGlucHV0am9pbnQsIHJlZmVyZW5jZVNwYWNlKTtcblxuXHRcdFx0XHRcdGlmIChoYW5kLmpvaW50c1tpbnB1dGpvaW50LmpvaW50TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIHRyYW5zZm9ybSBvZiB0aGlzIGpvaW50IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBqb2ludCBwb3NlIG9uIGVhY2ggZnJhbWVcblx0XHRcdFx0XHRcdGNvbnN0IGpvaW50ID0gbmV3IEdyb3VwKCk7XG5cdFx0XHRcdFx0XHRqb2ludC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRqb2ludC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRoYW5kLmpvaW50c1tpbnB1dGpvaW50LmpvaW50TmFtZV0gPSBqb2ludDsgLy8gPz9cblxuXHRcdFx0XHRcdFx0aGFuZC5hZGQoam9pbnQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGpvaW50ID0gaGFuZC5qb2ludHNbaW5wdXRqb2ludC5qb2ludE5hbWVdO1xuXG5cdFx0XHRcdFx0aWYgKGpvaW50UG9zZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0am9pbnQubWF0cml4LmZyb21BcnJheShqb2ludFBvc2UudHJhbnNmb3JtLm1hdHJpeCk7XG5cdFx0XHRcdFx0XHRqb2ludC5tYXRyaXguZGVjb21wb3NlKGpvaW50LnBvc2l0aW9uLCBqb2ludC5yb3RhdGlvbiwgam9pbnQuc2NhbGUpO1xuXHRcdFx0XHRcdFx0am9pbnQuam9pbnRSYWRpdXMgPSBqb2ludFBvc2UucmFkaXVzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpvaW50LnZpc2libGUgPSBqb2ludFBvc2UgIT09IG51bGw7XG5cdFx0XHRcdH0gLy8gQ3VzdG9tIGV2ZW50c1xuXHRcdFx0XHQvLyBDaGVjayBwaW5jaHpcblxuXG5cdFx0XHRcdGNvbnN0IGluZGV4VGlwID0gaGFuZC5qb2ludHNbJ2luZGV4LWZpbmdlci10aXAnXTtcblx0XHRcdFx0Y29uc3QgdGh1bWJUaXAgPSBoYW5kLmpvaW50c1sndGh1bWItdGlwJ107XG5cdFx0XHRcdGNvbnN0IGRpc3RhbmNlID0gaW5kZXhUaXAucG9zaXRpb24uZGlzdGFuY2VUbyh0aHVtYlRpcC5wb3NpdGlvbik7XG5cdFx0XHRcdGNvbnN0IGRpc3RhbmNlVG9QaW5jaCA9IDAuMDI7XG5cdFx0XHRcdGNvbnN0IHRocmVzaG9sZCA9IDAuMDA1O1xuXG5cdFx0XHRcdGlmIChoYW5kLmlucHV0U3RhdGUucGluY2hpbmcgJiYgZGlzdGFuY2UgPiBkaXN0YW5jZVRvUGluY2ggKyB0aHJlc2hvbGQpIHtcblx0XHRcdFx0XHRoYW5kLmlucHV0U3RhdGUucGluY2hpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3BpbmNoZW5kJyxcblx0XHRcdFx0XHRcdGhhbmRlZG5lc3M6IGlucHV0U291cmNlLmhhbmRlZG5lc3MsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHRoaXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmICghaGFuZC5pbnB1dFN0YXRlLnBpbmNoaW5nICYmIGRpc3RhbmNlIDw9IGRpc3RhbmNlVG9QaW5jaCAtIHRocmVzaG9sZCkge1xuXHRcdFx0XHRcdGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0XHRcdHR5cGU6ICdwaW5jaHN0YXJ0Jyxcblx0XHRcdFx0XHRcdGhhbmRlZG5lc3M6IGlucHV0U291cmNlLmhhbmRlZG5lc3MsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHRoaXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGdyaXAgIT09IG51bGwgJiYgaW5wdXRTb3VyY2UuZ3JpcFNwYWNlKSB7XG5cdFx0XHRcdFx0Z3JpcFBvc2UgPSBmcmFtZS5nZXRQb3NlKGlucHV0U291cmNlLmdyaXBTcGFjZSwgcmVmZXJlbmNlU3BhY2UpO1xuXG5cdFx0XHRcdFx0aWYgKGdyaXBQb3NlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRncmlwLm1hdHJpeC5mcm9tQXJyYXkoZ3JpcFBvc2UudHJhbnNmb3JtLm1hdHJpeCk7XG5cdFx0XHRcdFx0XHRncmlwLm1hdHJpeC5kZWNvbXBvc2UoZ3JpcC5wb3NpdGlvbiwgZ3JpcC5yb3RhdGlvbiwgZ3JpcC5zY2FsZSk7XG5cblx0XHRcdFx0XHRcdGlmIChncmlwUG9zZS5saW5lYXJWZWxvY2l0eSkge1xuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0xpbmVhclZlbG9jaXR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Z3JpcC5saW5lYXJWZWxvY2l0eS5jb3B5KGdyaXBQb3NlLmxpbmVhclZlbG9jaXR5KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzTGluZWFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGdyaXBQb3NlLmFuZ3VsYXJWZWxvY2l0eSkge1xuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGdyaXAuYW5ndWxhclZlbG9jaXR5LmNvcHkoZ3JpcFBvc2UuYW5ndWxhclZlbG9jaXR5KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdyaXAuaGFzQW5ndWxhclZlbG9jaXR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldFJheSAhPT0gbnVsbCkge1xuXHRcdFx0dGFyZ2V0UmF5LnZpc2libGUgPSBpbnB1dFBvc2UgIT09IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGdyaXAgIT09IG51bGwpIHtcblx0XHRcdGdyaXAudmlzaWJsZSA9IGdyaXBQb3NlICE9PSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChoYW5kICE9PSBudWxsKSB7XG5cdFx0XHRoYW5kLnZpc2libGUgPSBoYW5kUG9zZSAhPT0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIERlcHRoVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBmb3JtYXQpIHtcblx0XHRmb3JtYXQgPSBmb3JtYXQgIT09IHVuZGVmaW5lZCA/IGZvcm1hdCA6IERlcHRoRm9ybWF0O1xuXG5cdFx0aWYgKGZvcm1hdCAhPT0gRGVwdGhGb3JtYXQgJiYgZm9ybWF0ICE9PSBEZXB0aFN0ZW5jaWxGb3JtYXQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQnKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhGb3JtYXQpIHR5cGUgPSBVbnNpZ25lZFNob3J0VHlwZTtcblx0XHRpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0KSB0eXBlID0gVW5zaWduZWRJbnQyNDhUeXBlO1xuXHRcdHN1cGVyKG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSk7XG5cdFx0dGhpcy5pbWFnZSA9IHtcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0fTtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWluRmlsdGVyIDogTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7XG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblx0fVxuXG59XG5cbkRlcHRoVGV4dHVyZS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBXZWJYUk1hbmFnZXIgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXHRjb25zdHJ1Y3RvcihyZW5kZXJlciwgZ2wpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRsZXQgc2Vzc2lvbiA9IG51bGw7XG5cdFx0bGV0IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSAxLjA7XG5cdFx0bGV0IHJlZmVyZW5jZVNwYWNlID0gbnVsbDtcblx0XHRsZXQgcmVmZXJlbmNlU3BhY2VUeXBlID0gJ2xvY2FsLWZsb29yJztcblx0XHRjb25zdCBoYXNNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSByZW5kZXJlci5leHRlbnNpb25zLmhhcygnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyk7XG5cdFx0bGV0IHBvc2UgPSBudWxsO1xuXHRcdGxldCBnbEJpbmRpbmcgPSBudWxsO1xuXHRcdGxldCBnbFByb2pMYXllciA9IG51bGw7XG5cdFx0bGV0IGdsQmFzZUxheWVyID0gbnVsbDtcblx0XHRsZXQgaXNNdWx0aXNhbXBsZSA9IGZhbHNlO1xuXHRcdGxldCB4ckZyYW1lID0gbnVsbDtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTtcblx0XHRsZXQgaW5pdGlhbFJlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0bGV0IG5ld1JlbmRlclRhcmdldCA9IG51bGw7XG5cdFx0Y29uc3QgY29udHJvbGxlcnMgPSBbXTtcblx0XHRjb25zdCBpbnB1dFNvdXJjZXNNYXAgPSBuZXcgTWFwKCk7IC8vXG5cblx0XHRjb25zdCBjYW1lcmFMID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdFx0Y2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpO1xuXHRcdGNhbWVyYUwudmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpO1xuXHRcdGNvbnN0IGNhbWVyYVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHRjYW1lcmFSLmxheWVycy5lbmFibGUoMik7XG5cdFx0Y2FtZXJhUi52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0Y29uc3QgY2FtZXJhcyA9IFtjYW1lcmFMLCBjYW1lcmFSXTtcblx0XHRjb25zdCBjYW1lcmFWUiA9IG5ldyBBcnJheUNhbWVyYSgpO1xuXHRcdGNhbWVyYVZSLmxheWVycy5lbmFibGUoMSk7XG5cdFx0Y2FtZXJhVlIubGF5ZXJzLmVuYWJsZSgyKTtcblx0XHRsZXQgX2N1cnJlbnREZXB0aE5lYXIgPSBudWxsO1xuXHRcdGxldCBfY3VycmVudERlcHRoRmFyID0gbnVsbDsgLy9cblxuXHRcdHRoaXMuY2FtZXJhQXV0b1VwZGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5pc1ByZXNlbnRpbmcgPSBmYWxzZTtcblxuXHRcdHRoaXMuZ2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0bGV0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1tpbmRleF07XG5cblx0XHRcdGlmIChjb250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udHJvbGxlciA9IG5ldyBXZWJYUkNvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29udHJvbGxlcnNbaW5kZXhdID0gY29udHJvbGxlcjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xsZXIuZ2V0VGFyZ2V0UmF5U3BhY2UoKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRDb250cm9sbGVyR3JpcCA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0bGV0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1tpbmRleF07XG5cblx0XHRcdGlmIChjb250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udHJvbGxlciA9IG5ldyBXZWJYUkNvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29udHJvbGxlcnNbaW5kZXhdID0gY29udHJvbGxlcjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xsZXIuZ2V0R3JpcFNwYWNlKCk7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0SGFuZCA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0bGV0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1tpbmRleF07XG5cblx0XHRcdGlmIChjb250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udHJvbGxlciA9IG5ldyBXZWJYUkNvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29udHJvbGxlcnNbaW5kZXhdID0gY29udHJvbGxlcjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xsZXIuZ2V0SGFuZFNwYWNlKCk7XG5cdFx0fTsgLy9cblxuXG5cdFx0ZnVuY3Rpb24gb25TZXNzaW9uRXZlbnQoZXZlbnQpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBpbnB1dFNvdXJjZXNNYXAuZ2V0KGV2ZW50LmlucHV0U291cmNlKTtcblxuXHRcdFx0aWYgKGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0Y29udHJvbGxlci5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0XHR0eXBlOiBldmVudC50eXBlLFxuXHRcdFx0XHRcdGRhdGE6IGV2ZW50LmlucHV0U291cmNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZCgpIHtcblx0XHRcdGlucHV0U291cmNlc01hcC5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyLCBpbnB1dFNvdXJjZSkge1xuXHRcdFx0XHRjb250cm9sbGVyLmRpc2Nvbm5lY3QoaW5wdXRTb3VyY2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRpbnB1dFNvdXJjZXNNYXAuY2xlYXIoKTtcblx0XHRcdF9jdXJyZW50RGVwdGhOZWFyID0gbnVsbDtcblx0XHRcdF9jdXJyZW50RGVwdGhGYXIgPSBudWxsOyAvLyByZXN0b3JlIGZyYW1lYnVmZmVyL3JlbmRlcmluZyBzdGF0ZVxuXG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoaW5pdGlhbFJlbmRlclRhcmdldCk7XG5cdFx0XHRnbEJhc2VMYXllciA9IG51bGw7XG5cdFx0XHRnbFByb2pMYXllciA9IG51bGw7XG5cdFx0XHRnbEJpbmRpbmcgPSBudWxsO1xuXHRcdFx0c2Vzc2lvbiA9IG51bGw7XG5cdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBudWxsOyAvL1xuXG5cdFx0XHRhbmltYXRpb24uc3RvcCgpO1xuXHRcdFx0c2NvcGUuaXNQcmVzZW50aW5nID0gZmFsc2U7XG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0dHlwZTogJ3Nlc3Npb25lbmQnXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHNjb3BlLmlzUHJlc2VudGluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLicpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0cmVmZXJlbmNlU3BhY2VUeXBlID0gdmFsdWU7XG5cblx0XHRcdGlmIChzY29wZS5pc1ByZXNlbnRpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4nKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRSZWZlcmVuY2VTcGFjZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiByZWZlcmVuY2VTcGFjZTtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRCYXNlTGF5ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gZ2xQcm9qTGF5ZXIgIT09IG51bGwgPyBnbFByb2pMYXllciA6IGdsQmFzZUxheWVyO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldEJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gZ2xCaW5kaW5nO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldEZyYW1lID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHhyRnJhbWU7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0U2Vzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBzZXNzaW9uO1xuXHRcdH07XG5cblx0XHR0aGlzLnNldFNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdHNlc3Npb24gPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHNlc3Npb24gIT09IG51bGwpIHtcblx0XHRcdFx0aW5pdGlhbFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdCcsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RzdGFydCcsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RlbmQnLCBvblNlc3Npb25FdmVudCk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignc3F1ZWV6ZScsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzcXVlZXplc3RhcnQnLCBvblNlc3Npb25FdmVudCk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignc3F1ZWV6ZWVuZCcsIG9uU2Vzc2lvbkV2ZW50KTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdlbmQnLCBvblNlc3Npb25FbmQpO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0c291cmNlc2NoYW5nZScsIG9uSW5wdXRTb3VyY2VzQ2hhbmdlKTtcblxuXHRcdFx0XHRpZiAoYXR0cmlidXRlcy54ckNvbXBhdGlibGUgIT09IHRydWUpIHtcblx0XHRcdFx0XHRhd2FpdCBnbC5tYWtlWFJDb21wYXRpYmxlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2Vzc2lvbi5yZW5kZXJTdGF0ZS5sYXllcnMgPT09IHVuZGVmaW5lZCB8fCByZW5kZXJlci5jYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGF5ZXJJbml0ID0ge1xuXHRcdFx0XHRcdFx0YW50aWFsaWFzOiBzZXNzaW9uLnJlbmRlclN0YXRlLmxheWVycyA9PT0gdW5kZWZpbmVkID8gYXR0cmlidXRlcy5hbnRpYWxpYXMgOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxwaGE6IGF0dHJpYnV0ZXMuYWxwaGEsXG5cdFx0XHRcdFx0XHRkZXB0aDogYXR0cmlidXRlcy5kZXB0aCxcblx0XHRcdFx0XHRcdHN0ZW5jaWw6IGF0dHJpYnV0ZXMuc3RlbmNpbCxcblx0XHRcdFx0XHRcdGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3Jcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGdsQmFzZUxheWVyID0gbmV3IFhSV2ViR0xMYXllcihzZXNzaW9uLCBnbCwgbGF5ZXJJbml0KTtcblx0XHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKHtcblx0XHRcdFx0XHRcdGJhc2VMYXllcjogZ2xCYXNlTGF5ZXJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoZ2xCYXNlTGF5ZXIuZnJhbWVidWZmZXJXaWR0aCwgZ2xCYXNlTGF5ZXIuZnJhbWVidWZmZXJIZWlnaHQsIHtcblx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdHR5cGU6IFVuc2lnbmVkQnl0ZVR5cGUsXG5cdFx0XHRcdFx0XHRlbmNvZGluZzogcmVuZGVyZXIub3V0cHV0RW5jb2Rpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpc011bHRpc2FtcGxlID0gYXR0cmlidXRlcy5hbnRpYWxpYXM7XG5cdFx0XHRcdFx0bGV0IGRlcHRoRm9ybWF0ID0gbnVsbDtcblx0XHRcdFx0XHRsZXQgZGVwdGhUeXBlID0gbnVsbDtcblx0XHRcdFx0XHRsZXQgZ2xEZXB0aEZvcm1hdCA9IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoYXR0cmlidXRlcy5kZXB0aCkge1xuXHRcdFx0XHRcdFx0Z2xEZXB0aEZvcm1hdCA9IGF0dHJpYnV0ZXMuc3RlbmNpbCA/IGdsLkRFUFRIMjRfU1RFTkNJTDggOiBnbC5ERVBUSF9DT01QT05FTlQyNDtcblx0XHRcdFx0XHRcdGRlcHRoRm9ybWF0ID0gYXR0cmlidXRlcy5zdGVuY2lsID8gRGVwdGhTdGVuY2lsRm9ybWF0IDogRGVwdGhGb3JtYXQ7XG5cdFx0XHRcdFx0XHRkZXB0aFR5cGUgPSBhdHRyaWJ1dGVzLnN0ZW5jaWwgPyBVbnNpZ25lZEludDI0OFR5cGUgOiBVbnNpZ25lZFNob3J0VHlwZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBwcm9qZWN0aW9ubGF5ZXJJbml0ID0ge1xuXHRcdFx0XHRcdFx0Y29sb3JGb3JtYXQ6IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgPyBnbC5TUkdCOF9BTFBIQTggOiBnbC5SR0JBOCxcblx0XHRcdFx0XHRcdGRlcHRoRm9ybWF0OiBnbERlcHRoRm9ybWF0LFxuXHRcdFx0XHRcdFx0c2NhbGVGYWN0b3I6IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3Jcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGdsQmluZGluZyA9IG5ldyBYUldlYkdMQmluZGluZyhzZXNzaW9uLCBnbCk7XG5cdFx0XHRcdFx0Z2xQcm9qTGF5ZXIgPSBnbEJpbmRpbmcuY3JlYXRlUHJvamVjdGlvbkxheWVyKHByb2plY3Rpb25sYXllckluaXQpO1xuXHRcdFx0XHRcdHNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoe1xuXHRcdFx0XHRcdFx0bGF5ZXJzOiBbZ2xQcm9qTGF5ZXJdXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoaXNNdWx0aXNhbXBsZSkge1xuXHRcdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoZ2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLCBnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LCB7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdFx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0XHRcdFx0ZGVwdGhUZXh0dXJlOiBuZXcgRGVwdGhUZXh0dXJlKGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCwgZ2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCwgZGVwdGhUeXBlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBkZXB0aEZvcm1hdCksXG5cdFx0XHRcdFx0XHRcdHN0ZW5jaWxCdWZmZXI6IGF0dHJpYnV0ZXMuc3RlbmNpbCxcblx0XHRcdFx0XHRcdFx0aWdub3JlRGVwdGg6IGdsUHJvakxheWVyLmlnbm9yZURlcHRoVmFsdWVzLFxuXHRcdFx0XHRcdFx0XHR1c2VSZW5kZXJUb1RleHR1cmU6IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSxcblx0XHRcdFx0XHRcdFx0ZW5jb2Rpbmc6IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCwgZ2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCwge1xuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFVuc2lnbmVkQnl0ZVR5cGUsXG5cdFx0XHRcdFx0XHRcdGRlcHRoVGV4dHVyZTogbmV3IERlcHRoVGV4dHVyZShnbFByb2pMYXllci50ZXh0dXJlV2lkdGgsIGdsUHJvakxheWVyLnRleHR1cmVIZWlnaHQsIGRlcHRoVHlwZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZGVwdGhGb3JtYXQpLFxuXHRcdFx0XHRcdFx0XHRzdGVuY2lsQnVmZmVyOiBhdHRyaWJ1dGVzLnN0ZW5jaWwsXG5cdFx0XHRcdFx0XHRcdGlnbm9yZURlcHRoOiBnbFByb2pMYXllci5pZ25vcmVEZXB0aFZhbHVlcyxcblx0XHRcdFx0XHRcdFx0ZW5jb2Rpbmc6IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdSZW5kZXJUYXJnZXQuaXNYUlJlbmRlclRhcmdldCA9IHRydWU7IC8vIFRPRE8gUmVtb3ZlIHRoaXMgd2hlbiBwb3NzaWJsZSwgc2VlICMyMzI3OFxuXHRcdFx0XHQvLyBTZXQgZm92ZWF0aW9uIHRvIG1heGltdW0uXG5cblx0XHRcdFx0dGhpcy5zZXRGb3ZlYXRpb24oMS4wKTtcblx0XHRcdFx0cmVmZXJlbmNlU3BhY2UgPSBhd2FpdCBzZXNzaW9uLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShyZWZlcmVuY2VTcGFjZVR5cGUpO1xuXHRcdFx0XHRhbmltYXRpb24uc2V0Q29udGV4dChzZXNzaW9uKTtcblx0XHRcdFx0YW5pbWF0aW9uLnN0YXJ0KCk7XG5cdFx0XHRcdHNjb3BlLmlzUHJlc2VudGluZyA9IHRydWU7XG5cdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdzZXNzaW9uc3RhcnQnXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBvbklucHV0U291cmNlc0NoYW5nZShldmVudCkge1xuXHRcdFx0Y29uc3QgaW5wdXRTb3VyY2VzID0gc2Vzc2lvbi5pbnB1dFNvdXJjZXM7IC8vIEFzc2lnbiBpbnB1dFNvdXJjZXMgdG8gYXZhaWxhYmxlIGNvbnRyb2xsZXJzXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbGxlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aW5wdXRTb3VyY2VzTWFwLnNldChpbnB1dFNvdXJjZXNbaV0sIGNvbnRyb2xsZXJzW2ldKTtcblx0XHRcdH0gLy8gTm90aWZ5IGRpc2Nvbm5lY3RlZFxuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnQucmVtb3ZlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGV2ZW50LnJlbW92ZWRbaV07XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBpbnB1dFNvdXJjZXNNYXAuZ2V0KGlucHV0U291cmNlKTtcblxuXHRcdFx0XHRpZiAoY29udHJvbGxlcikge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZGlzcGF0Y2hFdmVudCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnZGlzY29ubmVjdGVkJyxcblx0XHRcdFx0XHRcdGRhdGE6IGlucHV0U291cmNlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aW5wdXRTb3VyY2VzTWFwLmRlbGV0ZShpbnB1dFNvdXJjZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gTm90aWZ5IGNvbm5lY3RlZFxuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnQuYWRkZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRTb3VyY2UgPSBldmVudC5hZGRlZFtpXTtcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGlucHV0U291cmNlc01hcC5nZXQoaW5wdXRTb3VyY2UpO1xuXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0XHRcdHR5cGU6ICdjb25uZWN0ZWQnLFxuXHRcdFx0XHRcdFx0ZGF0YTogaW5wdXRTb3VyY2Vcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gLy9cblxuXG5cdFx0Y29uc3QgY2FtZXJhTFBvcyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgY2FtZXJhUlBvcyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0LyoqXG5cdFx0ICogQXNzdW1lcyAyIGNhbWVyYXMgdGhhdCBhcmUgcGFyYWxsZWwgYW5kIHNoYXJlIGFuIFgtYXhpcywgYW5kIHRoYXRcblx0XHQgKiB0aGUgY2FtZXJhcycgcHJvamVjdGlvbiBhbmQgd29ybGQgbWF0cmljZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LlxuXHRcdCAqIEFuZCB0aGF0IG5lYXIgYW5kIGZhciBwbGFuZXMgYXJlIGlkZW50aWNhbCBmb3IgYm90aCBjYW1lcmFzLlxuXHRcdCAqIFZpc3VhbGl6YXRpb24gb2YgdGhpcyB0ZWNobmlxdWU6IGh0dHBzOi8vY29tcHV0ZXJncmFwaGljcy5zdGFja2V4Y2hhbmdlLmNvbS9hLzQ3NjVcblx0XHQgKi9cblxuXHRcdGZ1bmN0aW9uIHNldFByb2plY3Rpb25Gcm9tVW5pb24oY2FtZXJhLCBjYW1lcmFMLCBjYW1lcmFSKSB7XG5cdFx0XHRjYW1lcmFMUG9zLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmFMLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNhbWVyYVJQb3Muc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYVIubWF0cml4V29ybGQpO1xuXHRcdFx0Y29uc3QgaXBkID0gY2FtZXJhTFBvcy5kaXN0YW5jZVRvKGNhbWVyYVJQb3MpO1xuXHRcdFx0Y29uc3QgcHJvakwgPSBjYW1lcmFMLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHM7XG5cdFx0XHRjb25zdCBwcm9qUiA9IGNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50czsgLy8gVlIgc3lzdGVtcyB3aWxsIGhhdmUgaWRlbnRpY2FsIGZhciBhbmQgbmVhciBwbGFuZXMsIGFuZFxuXHRcdFx0Ly8gbW9zdCBsaWtlbHkgaWRlbnRpY2FsIHRvcCBhbmQgYm90dG9tIGZydXN0dW0gZXh0ZW50cy5cblx0XHRcdC8vIFVzZSB0aGUgbGVmdCBjYW1lcmEgZm9yIHRoZXNlIHZhbHVlcy5cblxuXHRcdFx0Y29uc3QgbmVhciA9IHByb2pMWzE0XSAvIChwcm9qTFsxMF0gLSAxKTtcblx0XHRcdGNvbnN0IGZhciA9IHByb2pMWzE0XSAvIChwcm9qTFsxMF0gKyAxKTtcblx0XHRcdGNvbnN0IHRvcEZvdiA9IChwcm9qTFs5XSArIDEpIC8gcHJvakxbNV07XG5cdFx0XHRjb25zdCBib3R0b21Gb3YgPSAocHJvakxbOV0gLSAxKSAvIHByb2pMWzVdO1xuXHRcdFx0Y29uc3QgbGVmdEZvdiA9IChwcm9qTFs4XSAtIDEpIC8gcHJvakxbMF07XG5cdFx0XHRjb25zdCByaWdodEZvdiA9IChwcm9qUls4XSArIDEpIC8gcHJvalJbMF07XG5cdFx0XHRjb25zdCBsZWZ0ID0gbmVhciAqIGxlZnRGb3Y7XG5cdFx0XHRjb25zdCByaWdodCA9IG5lYXIgKiByaWdodEZvdjsgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgY2FtZXJhJ3MgcG9zaXRpb24gb2Zmc2V0IGZyb20gdGhlXG5cdFx0XHQvLyBsZWZ0IGNhbWVyYS4geE9mZnNldCBzaG91bGQgYmUgcm91Z2hseSBoYWxmIGBpcGRgLlxuXG5cdFx0XHRjb25zdCB6T2Zmc2V0ID0gaXBkIC8gKC1sZWZ0Rm92ICsgcmlnaHRGb3YpO1xuXHRcdFx0Y29uc3QgeE9mZnNldCA9IHpPZmZzZXQgKiAtbGVmdEZvdjsgLy8gVE9ETzogQmV0dGVyIHdheSB0byBhcHBseSB0aGlzIG9mZnNldD9cblxuXHRcdFx0Y2FtZXJhTC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoY2FtZXJhLnBvc2l0aW9uLCBjYW1lcmEucXVhdGVybmlvbiwgY2FtZXJhLnNjYWxlKTtcblx0XHRcdGNhbWVyYS50cmFuc2xhdGVYKHhPZmZzZXQpO1xuXHRcdFx0Y2FtZXJhLnRyYW5zbGF0ZVooek9mZnNldCk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGQuY29tcG9zZShjYW1lcmEucG9zaXRpb24sIGNhbWVyYS5xdWF0ZXJuaW9uLCBjYW1lcmEuc2NhbGUpO1xuXHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KGNhbWVyYS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7IC8vIEZpbmQgdGhlIHVuaW9uIG9mIHRoZSBmcnVzdHVtIHZhbHVlcyBvZiB0aGUgY2FtZXJhcyBhbmQgc2NhbGVcblx0XHRcdC8vIHRoZSB2YWx1ZXMgc28gdGhhdCB0aGUgbmVhciBwbGFuZSdzIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZSBpbiB3b3JsZCBzcGFjZSxcblx0XHRcdC8vIGFsdGhvdWdoIG11c3Qgbm93IGJlIHJlbGF0aXZlIHRvIHRoZSBuZXcgdW5pb24gY2FtZXJhLlxuXG5cdFx0XHRjb25zdCBuZWFyMiA9IG5lYXIgKyB6T2Zmc2V0O1xuXHRcdFx0Y29uc3QgZmFyMiA9IGZhciArIHpPZmZzZXQ7XG5cdFx0XHRjb25zdCBsZWZ0MiA9IGxlZnQgLSB4T2Zmc2V0O1xuXHRcdFx0Y29uc3QgcmlnaHQyID0gcmlnaHQgKyAoaXBkIC0geE9mZnNldCk7XG5cdFx0XHRjb25zdCB0b3AyID0gdG9wRm92ICogZmFyIC8gZmFyMiAqIG5lYXIyO1xuXHRcdFx0Y29uc3QgYm90dG9tMiA9IGJvdHRvbUZvdiAqIGZhciAvIGZhcjIgKiBuZWFyMjtcblx0XHRcdGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShsZWZ0MiwgcmlnaHQyLCB0b3AyLCBib3R0b20yLCBuZWFyMiwgZmFyMik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdXBkYXRlQ2FtZXJhKGNhbWVyYSwgcGFyZW50KSB7XG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5jb3B5KGNhbWVyYS5tYXRyaXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMocGFyZW50Lm1hdHJpeFdvcmxkLCBjYW1lcmEubWF0cml4KTtcblx0XHRcdH1cblxuXHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KGNhbWVyYS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVDYW1lcmEgPSBmdW5jdGlvbiAoY2FtZXJhKSB7XG5cdFx0XHRpZiAoc2Vzc2lvbiA9PT0gbnVsbCkgcmV0dXJuO1xuXHRcdFx0Y2FtZXJhVlIubmVhciA9IGNhbWVyYVIubmVhciA9IGNhbWVyYUwubmVhciA9IGNhbWVyYS5uZWFyO1xuXHRcdFx0Y2FtZXJhVlIuZmFyID0gY2FtZXJhUi5mYXIgPSBjYW1lcmFMLmZhciA9IGNhbWVyYS5mYXI7XG5cblx0XHRcdGlmIChfY3VycmVudERlcHRoTmVhciAhPT0gY2FtZXJhVlIubmVhciB8fCBfY3VycmVudERlcHRoRmFyICE9PSBjYW1lcmFWUi5mYXIpIHtcblx0XHRcdFx0Ly8gTm90ZSB0aGF0IHRoZSBuZXcgcmVuZGVyU3RhdGUgd29uJ3QgYXBwbHkgdW50aWwgdGhlIG5leHQgZnJhbWUuIFNlZSAjMTgzMjBcblx0XHRcdFx0c2Vzc2lvbi51cGRhdGVSZW5kZXJTdGF0ZSh7XG5cdFx0XHRcdFx0ZGVwdGhOZWFyOiBjYW1lcmFWUi5uZWFyLFxuXHRcdFx0XHRcdGRlcHRoRmFyOiBjYW1lcmFWUi5mYXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdF9jdXJyZW50RGVwdGhOZWFyID0gY2FtZXJhVlIubmVhcjtcblx0XHRcdFx0X2N1cnJlbnREZXB0aEZhciA9IGNhbWVyYVZSLmZhcjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGFyZW50ID0gY2FtZXJhLnBhcmVudDtcblx0XHRcdGNvbnN0IGNhbWVyYXMgPSBjYW1lcmFWUi5jYW1lcmFzO1xuXHRcdFx0dXBkYXRlQ2FtZXJhKGNhbWVyYVZSLCBwYXJlbnQpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dXBkYXRlQ2FtZXJhKGNhbWVyYXNbaV0sIHBhcmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGNhbWVyYVZSLm1hdHJpeFdvcmxkLmRlY29tcG9zZShjYW1lcmFWUi5wb3NpdGlvbiwgY2FtZXJhVlIucXVhdGVybmlvbiwgY2FtZXJhVlIuc2NhbGUpOyAvLyB1cGRhdGUgdXNlciBjYW1lcmEgYW5kIGl0cyBjaGlsZHJlblxuXG5cdFx0XHRjYW1lcmEucG9zaXRpb24uY29weShjYW1lcmFWUi5wb3NpdGlvbik7XG5cdFx0XHRjYW1lcmEucXVhdGVybmlvbi5jb3B5KGNhbWVyYVZSLnF1YXRlcm5pb24pO1xuXHRcdFx0Y2FtZXJhLnNjYWxlLmNvcHkoY2FtZXJhVlIuc2NhbGUpO1xuXHRcdFx0Y2FtZXJhLm1hdHJpeC5jb3B5KGNhbWVyYVZSLm1hdHJpeCk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGQuY29weShjYW1lcmFWUi5tYXRyaXhXb3JsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IGNhbWVyYS5jaGlsZHJlbjtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y2hpbGRyZW5baV0udXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XG5cdFx0XHR9IC8vIHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCBmb3IgcHJvcGVyIHZpZXcgZnJ1c3R1bSBjdWxsaW5nXG5cblxuXHRcdFx0aWYgKGNhbWVyYXMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdHNldFByb2plY3Rpb25Gcm9tVW5pb24oY2FtZXJhVlIsIGNhbWVyYUwsIGNhbWVyYVIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gYXNzdW1lIHNpbmdsZSBjYW1lcmEgc2V0dXAgKEFSKVxuXHRcdFx0XHRjYW1lcmFWUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRDYW1lcmEgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2FtZXJhVlI7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0Rm92ZWF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGdsUHJvakxheWVyICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBnbFByb2pMYXllci5maXhlZEZvdmVhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGdsQmFzZUxheWVyICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBnbEJhc2VMYXllci5maXhlZEZvdmVhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRGb3ZlYXRpb24gPSBmdW5jdGlvbiAoZm92ZWF0aW9uKSB7XG5cdFx0XHQvLyAwID0gbm8gZm92ZWF0aW9uID0gZnVsbCByZXNvbHV0aW9uXG5cdFx0XHQvLyAxID0gbWF4aW11bSBmb3ZlYXRpb24gPSB0aGUgZWRnZXMgcmVuZGVyIGF0IGxvd2VyIHJlc29sdXRpb25cblx0XHRcdGlmIChnbFByb2pMYXllciAhPT0gbnVsbCkge1xuXHRcdFx0XHRnbFByb2pMYXllci5maXhlZEZvdmVhdGlvbiA9IGZvdmVhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGdsQmFzZUxheWVyICE9PSBudWxsICYmIGdsQmFzZUxheWVyLmZpeGVkRm92ZWF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Z2xCYXNlTGF5ZXIuZml4ZWRGb3ZlYXRpb24gPSBmb3ZlYXRpb247XG5cdFx0XHR9XG5cdFx0fTsgLy8gQW5pbWF0aW9uIExvb3BcblxuXG5cdFx0bGV0IG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IG51bGw7XG5cblx0XHRmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKHRpbWUsIGZyYW1lKSB7XG5cdFx0XHRwb3NlID0gZnJhbWUuZ2V0Vmlld2VyUG9zZShyZWZlcmVuY2VTcGFjZSk7XG5cdFx0XHR4ckZyYW1lID0gZnJhbWU7XG5cblx0XHRcdGlmIChwb3NlICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdzID0gcG9zZS52aWV3cztcblxuXHRcdFx0XHRpZiAoZ2xCYXNlTGF5ZXIgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcihuZXdSZW5kZXJUYXJnZXQsIGdsQmFzZUxheWVyLmZyYW1lYnVmZmVyKTtcblx0XHRcdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBjYW1lcmFWUk5lZWRzVXBkYXRlID0gZmFsc2U7IC8vIGNoZWNrIGlmIGl0J3MgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgY2FtZXJhVlIncyBjYW1lcmEgbGlzdFxuXG5cdFx0XHRcdGlmICh2aWV3cy5sZW5ndGggIT09IGNhbWVyYVZSLmNhbWVyYXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y2FtZXJhVlIuY2FtZXJhcy5sZW5ndGggPSAwO1xuXHRcdFx0XHRcdGNhbWVyYVZSTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSB2aWV3c1tpXTtcblx0XHRcdFx0XHRsZXQgdmlld3BvcnQgPSBudWxsO1xuXG5cdFx0XHRcdFx0aWYgKGdsQmFzZUxheWVyICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHR2aWV3cG9ydCA9IGdsQmFzZUxheWVyLmdldFZpZXdwb3J0KHZpZXcpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBnbFN1YkltYWdlID0gZ2xCaW5kaW5nLmdldFZpZXdTdWJJbWFnZShnbFByb2pMYXllciwgdmlldyk7XG5cdFx0XHRcdFx0XHR2aWV3cG9ydCA9IGdsU3ViSW1hZ2Uudmlld3BvcnQ7IC8vIEZvciBzaWRlLWJ5LXNpZGUgcHJvamVjdGlvbiwgd2Ugb25seSBwcm9kdWNlIGEgc2luZ2xlIHRleHR1cmUgZm9yIGJvdGggZXllcy5cblxuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobmV3UmVuZGVyVGFyZ2V0LCBnbFN1YkltYWdlLmNvbG9yVGV4dHVyZSwgZ2xQcm9qTGF5ZXIuaWdub3JlRGVwdGhWYWx1ZXMgPyB1bmRlZmluZWQgOiBnbFN1YkltYWdlLmRlcHRoU3RlbmNpbFRleHR1cmUpO1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBjYW1lcmEgPSBjYW1lcmFzW2ldO1xuXHRcdFx0XHRcdGNhbWVyYS5tYXRyaXguZnJvbUFycmF5KHZpZXcudHJhbnNmb3JtLm1hdHJpeCk7XG5cdFx0XHRcdFx0Y2FtZXJhLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KHZpZXcucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0XHRcdFx0Y2FtZXJhLnZpZXdwb3J0LnNldCh2aWV3cG9ydC54LCB2aWV3cG9ydC55LCB2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRjYW1lcmFWUi5tYXRyaXguY29weShjYW1lcmEubWF0cml4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoY2FtZXJhVlJOZWVkc1VwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y2FtZXJhVlIuY2FtZXJhcy5wdXNoKGNhbWVyYSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IC8vXG5cblxuXHRcdFx0Y29uc3QgaW5wdXRTb3VyY2VzID0gc2Vzc2lvbi5pbnB1dFNvdXJjZXM7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbGxlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzW2ldO1xuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGlucHV0U291cmNlc1tpXTtcblx0XHRcdFx0Y29udHJvbGxlci51cGRhdGUoaW5wdXRTb3VyY2UsIGZyYW1lLCByZWZlcmVuY2VTcGFjZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2spIG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayh0aW1lLCBmcmFtZSk7XG5cdFx0XHR4ckZyYW1lID0gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBhbmltYXRpb24gPSBuZXcgV2ViR0xBbmltYXRpb24oKTtcblx0XHRhbmltYXRpb24uc2V0QW5pbWF0aW9uTG9vcChvbkFuaW1hdGlvbkZyYW1lKTtcblxuXHRcdHRoaXMuc2V0QW5pbWF0aW9uTG9vcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0b25BbmltYXRpb25GcmFtZUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cdFx0fTtcblxuXHRcdHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xNYXRlcmlhbHMocHJvcGVydGllcykge1xuXHRmdW5jdGlvbiByZWZyZXNoRm9nVW5pZm9ybXModW5pZm9ybXMsIGZvZykge1xuXHRcdHVuaWZvcm1zLmZvZ0NvbG9yLnZhbHVlLmNvcHkoZm9nLmNvbG9yKTtcblxuXHRcdGlmIChmb2cuaXNGb2cpIHtcblx0XHRcdHVuaWZvcm1zLmZvZ05lYXIudmFsdWUgPSBmb2cubmVhcjtcblx0XHRcdHVuaWZvcm1zLmZvZ0Zhci52YWx1ZSA9IGZvZy5mYXI7XG5cdFx0fSBlbHNlIGlmIChmb2cuaXNGb2dFeHAyKSB7XG5cdFx0XHR1bmlmb3Jtcy5mb2dEZW5zaXR5LnZhbHVlID0gZm9nLmRlbnNpdHk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaE1hdGVyaWFsVW5pZm9ybXModW5pZm9ybXMsIG1hdGVyaWFsLCBwaXhlbFJhdGlvLCBoZWlnaHQsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldCkge1xuXHRcdGlmIChtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNMYW1iZXJ0KHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zVG9vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNQaG9uZyh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsKSB7XG5cdFx0XHRcdHJlZnJlc2hVbmlmb3Jtc1BoeXNpY2FsKHVuaWZvcm1zLCBtYXRlcmlhbCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc01lc2hNYXRjYXBNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNNYXRjYXAodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaERlcHRoTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zRGVwdGgodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbih1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zRGlzdGFuY2UodW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsKSB7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24odW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc05vcm1hbCh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNMaW5lQmFzaWNNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zTGluZSh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWwuaXNMaW5lRGFzaGVkTWF0ZXJpYWwpIHtcblx0XHRcdFx0cmVmcmVzaFVuaWZvcm1zRGFzaCh1bmlmb3JtcywgbWF0ZXJpYWwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuaXNQb2ludHNNYXRlcmlhbCkge1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zUG9pbnRzKHVuaWZvcm1zLCBtYXRlcmlhbCwgcGl4ZWxSYXRpbywgaGVpZ2h0KTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzU3ByaXRlTWF0ZXJpYWwpIHtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc1Nwcml0ZXModW5pZm9ybXMsIG1hdGVyaWFsKTtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmlzU2hhZG93TWF0ZXJpYWwpIHtcblx0XHRcdHVuaWZvcm1zLmNvbG9yLnZhbHVlLmNvcHkobWF0ZXJpYWwuY29sb3IpO1xuXHRcdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsKSB7XG5cdFx0XHRtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTsgLy8gIzE1NTgxXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zQ29tbW9uKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5O1xuXG5cdFx0aWYgKG1hdGVyaWFsLmNvbG9yKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkobWF0ZXJpYWwuY29sb3IpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmUudmFsdWUuY29weShtYXRlcmlhbC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHkpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5tYXApIHtcblx0XHRcdHVuaWZvcm1zLm1hcC52YWx1ZSA9IG1hdGVyaWFsLm1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYWxwaGFNYXApIHtcblx0XHRcdHVuaWZvcm1zLmFscGhhTWFwLnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLnNwZWN1bGFyTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5zcGVjdWxhck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFyTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hbHBoYVRlc3QgPiAwKSB7XG5cdFx0XHR1bmlmb3Jtcy5hbHBoYVRlc3QudmFsdWUgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW52TWFwID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpLmVudk1hcDtcblxuXHRcdGlmIChlbnZNYXApIHtcblx0XHRcdHVuaWZvcm1zLmVudk1hcC52YWx1ZSA9IGVudk1hcDtcblx0XHRcdHVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSBlbnZNYXAuaXNDdWJlVGV4dHVyZSAmJiBlbnZNYXAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSA/IC0xIDogMTtcblx0XHRcdHVuaWZvcm1zLnJlZmxlY3Rpdml0eS52YWx1ZSA9IG1hdGVyaWFsLnJlZmxlY3Rpdml0eTtcblx0XHRcdHVuaWZvcm1zLmlvci52YWx1ZSA9IG1hdGVyaWFsLmlvcjtcblx0XHRcdHVuaWZvcm1zLnJlZnJhY3Rpb25SYXRpby52YWx1ZSA9IG1hdGVyaWFsLnJlZnJhY3Rpb25SYXRpbztcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubGlnaHRNYXApIHtcblx0XHRcdHVuaWZvcm1zLmxpZ2h0TWFwLnZhbHVlID0gbWF0ZXJpYWwubGlnaHRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5saWdodE1hcEludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hb01hcCkge1xuXHRcdFx0dW5pZm9ybXMuYW9NYXAudmFsdWUgPSBtYXRlcmlhbC5hb01hcDtcblx0XHRcdHVuaWZvcm1zLmFvTWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwuYW9NYXBJbnRlbnNpdHk7XG5cdFx0fSAvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXNcblx0XHQvLyAxLiBjb2xvciBtYXBcblx0XHQvLyAyLiBzcGVjdWxhciBtYXBcblx0XHQvLyAzLiBkaXNwbGFjZW1lbnRNYXAgbWFwXG5cdFx0Ly8gNC4gbm9ybWFsIG1hcFxuXHRcdC8vIDUuIGJ1bXAgbWFwXG5cdFx0Ly8gNi4gcm91Z2huZXNzTWFwIG1hcFxuXHRcdC8vIDcuIG1ldGFsbmVzc01hcCBtYXBcblx0XHQvLyA4LiBhbHBoYU1hcCBtYXBcblx0XHQvLyA5LiBlbWlzc2l2ZU1hcCBtYXBcblx0XHQvLyAxMC4gY2xlYXJjb2F0IG1hcFxuXHRcdC8vIDExLiBjbGVhcmNvYXQgbm9ybWFsIG1hcFxuXHRcdC8vIDEyLiBjbGVhcmNvYXQgcm91Z2huZXNzTWFwIG1hcFxuXHRcdC8vIDEzLiBzcGVjdWxhciBpbnRlbnNpdHkgbWFwXG5cdFx0Ly8gMTQuIHNwZWN1bGFyIHRpbnQgbWFwXG5cdFx0Ly8gMTUuIHRyYW5zbWlzc2lvbiBtYXBcblx0XHQvLyAxNi4gdGhpY2tuZXNzIG1hcFxuXG5cblx0XHRsZXQgdXZTY2FsZU1hcDtcblxuXHRcdGlmIChtYXRlcmlhbC5tYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5zcGVjdWxhck1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNwZWN1bGFyTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwubm9ybWFsTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuYnVtcE1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5yb3VnaG5lc3NNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3NNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5tZXRhbG5lc3NNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5hbHBoYU1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuZW1pc3NpdmVNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmNsZWFyY29hdE1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdE1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnRoaWNrbmVzc01hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnRoaWNrbmVzc01hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLnNoZWVuQ29sb3JNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcDtcblx0XHR9XG5cblx0XHRpZiAodXZTY2FsZU1hcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0aWYgKHV2U2NhbGVNYXAuaXNXZWJHTFJlbmRlclRhcmdldCkge1xuXHRcdFx0XHR1dlNjYWxlTWFwID0gdXZTY2FsZU1hcC50ZXh0dXJlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodXZTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHV2U2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkodXZTY2FsZU1hcC5tYXRyaXgpO1xuXHRcdH0gLy8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzIGZvciB1djJcblx0XHQvLyAxLiBhbyBtYXBcblx0XHQvLyAyLiBsaWdodCBtYXBcblxuXG5cdFx0bGV0IHV2MlNjYWxlTWFwO1xuXG5cdFx0aWYgKG1hdGVyaWFsLmFvTWFwKSB7XG5cdFx0XHR1djJTY2FsZU1hcCA9IG1hdGVyaWFsLmFvTWFwO1xuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwubGlnaHRNYXApIHtcblx0XHRcdHV2MlNjYWxlTWFwID0gbWF0ZXJpYWwubGlnaHRNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKHV2MlNjYWxlTWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0XHRpZiAodXYyU2NhbGVNYXAuaXNXZWJHTFJlbmRlclRhcmdldCkge1xuXHRcdFx0XHR1djJTY2FsZU1hcCA9IHV2MlNjYWxlTWFwLnRleHR1cmU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1djJTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHV2MlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy51djJUcmFuc2Zvcm0udmFsdWUuY29weSh1djJTY2FsZU1hcC5tYXRyaXgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0xpbmUodW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KG1hdGVyaWFsLmNvbG9yKTtcblx0XHR1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0Rhc2godW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMuZGFzaFNpemUudmFsdWUgPSBtYXRlcmlhbC5kYXNoU2l6ZTtcblx0XHR1bmlmb3Jtcy50b3RhbFNpemUudmFsdWUgPSBtYXRlcmlhbC5kYXNoU2l6ZSArIG1hdGVyaWFsLmdhcFNpemU7XG5cdFx0dW5pZm9ybXMuc2NhbGUudmFsdWUgPSBtYXRlcmlhbC5zY2FsZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1BvaW50cyh1bmlmb3JtcywgbWF0ZXJpYWwsIHBpeGVsUmF0aW8sIGhlaWdodCkge1xuXHRcdHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUuY29weShtYXRlcmlhbC5jb2xvcik7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cdFx0dW5pZm9ybXMuc2l6ZS52YWx1ZSA9IG1hdGVyaWFsLnNpemUgKiBwaXhlbFJhdGlvO1xuXHRcdHVuaWZvcm1zLnNjYWxlLnZhbHVlID0gaGVpZ2h0ICogMC41O1xuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwubWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5hbHBoYU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYWxwaGFUZXN0ID4gMCkge1xuXHRcdFx0dW5pZm9ybXMuYWxwaGFUZXN0LnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFUZXN0O1xuXHRcdH0gLy8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzXG5cdFx0Ly8gMS4gY29sb3IgbWFwXG5cdFx0Ly8gMi4gYWxwaGEgbWFwXG5cblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKG1hdGVyaWFsLm1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm1hcDtcblx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmFscGhhTWFwKSB7XG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKHV2U2NhbGVNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHV2U2NhbGVNYXAubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR1dlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHV2U2NhbGVNYXAubWF0cml4KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNTcHJpdGVzKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUuY29weShtYXRlcmlhbC5jb2xvcik7XG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cdFx0dW5pZm9ybXMucm90YXRpb24udmFsdWUgPSBtYXRlcmlhbC5yb3RhdGlvbjtcblxuXHRcdGlmIChtYXRlcmlhbC5tYXApIHtcblx0XHRcdHVuaWZvcm1zLm1hcC52YWx1ZSA9IG1hdGVyaWFsLm1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYWxwaGFNYXApIHtcblx0XHRcdHVuaWZvcm1zLmFscGhhTWFwLnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmFscGhhVGVzdCA+IDApIHtcblx0XHRcdHVuaWZvcm1zLmFscGhhVGVzdC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblx0XHR9IC8vIHV2IHJlcGVhdCBhbmQgb2Zmc2V0IHNldHRpbmcgcHJpb3JpdGllc1xuXHRcdC8vIDEuIGNvbG9yIG1hcFxuXHRcdC8vIDIuIGFscGhhIG1hcFxuXG5cblx0XHRsZXQgdXZTY2FsZU1hcDtcblxuXHRcdGlmIChtYXRlcmlhbC5tYXApIHtcblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7XG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5hbHBoYU1hcCkge1xuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXHRcdH1cblxuXHRcdGlmICh1dlNjYWxlTWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh1dlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dXZTY2FsZU1hcC51cGRhdGVNYXRyaXgoKTtcblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh1dlNjYWxlTWFwLm1hdHJpeCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGFtYmVydCh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHRpZiAobWF0ZXJpYWwuZW1pc3NpdmVNYXApIHtcblx0XHRcdHVuaWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zUGhvbmcodW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0dW5pZm9ybXMuc3BlY3VsYXIudmFsdWUuY29weShtYXRlcmlhbC5zcGVjdWxhcik7XG5cdFx0dW5pZm9ybXMuc2hpbmluZXNzLnZhbHVlID0gTWF0aC5tYXgobWF0ZXJpYWwuc2hpbmluZXNzLCAxZS00KTsgLy8gdG8gcHJldmVudCBwb3coIDAuMCwgMC4wIClcblxuXHRcdGlmIChtYXRlcmlhbC5lbWlzc2l2ZU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYnVtcE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtMTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubm9ybWFsTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KG1hdGVyaWFsLm5vcm1hbFNjYWxlKTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Rvb24odW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0aWYgKG1hdGVyaWFsLmdyYWRpZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5ncmFkaWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmdyYWRpZW50TWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5lbWlzc2l2ZU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYnVtcE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtMTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubm9ybWFsTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KG1hdGVyaWFsLm5vcm1hbFNjYWxlKTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdHVuaWZvcm1zLnJvdWdobmVzcy52YWx1ZSA9IG1hdGVyaWFsLnJvdWdobmVzcztcblx0XHR1bmlmb3Jtcy5tZXRhbG5lc3MudmFsdWUgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XG5cblx0XHRpZiAobWF0ZXJpYWwucm91Z2huZXNzTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5yb3VnaG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5yb3VnaG5lc3NNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLm1ldGFsbmVzc01hcCkge1xuXHRcdFx0dW5pZm9ybXMubWV0YWxuZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwubWV0YWxuZXNzTWFwO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5lbWlzc2l2ZU1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuYnVtcE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtMTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwubm9ybWFsTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KG1hdGVyaWFsLm5vcm1hbFNjYWxlKTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVudk1hcCA9IHByb3BlcnRpZXMuZ2V0KG1hdGVyaWFsKS5lbnZNYXA7XG5cblx0XHRpZiAoZW52TWFwKSB7XG5cdFx0XHQvL3VuaWZvcm1zLmVudk1hcC52YWx1ZSA9IG1hdGVyaWFsLmVudk1hcDsgLy8gcGFydCBvZiB1bmlmb3JtcyBjb21tb25cblx0XHRcdHVuaWZvcm1zLmVudk1hcEludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQaHlzaWNhbCh1bmlmb3JtcywgbWF0ZXJpYWwsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldCkge1xuXHRcdHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKHVuaWZvcm1zLCBtYXRlcmlhbCk7XG5cdFx0dW5pZm9ybXMuaW9yLnZhbHVlID0gbWF0ZXJpYWwuaW9yOyAvLyBhbHNvIHBhcnQgb2YgdW5pZm9ybXMgY29tbW9uXG5cblx0XHRpZiAobWF0ZXJpYWwuc2hlZW4gPiAwKSB7XG5cdFx0XHR1bmlmb3Jtcy5zaGVlbkNvbG9yLnZhbHVlLmNvcHkobWF0ZXJpYWwuc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIobWF0ZXJpYWwuc2hlZW4pO1xuXHRcdFx0dW5pZm9ybXMuc2hlZW5Sb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzcztcblxuXHRcdFx0aWYgKG1hdGVyaWFsLnNoZWVuQ29sb3JNYXApIHtcblx0XHRcdFx0dW5pZm9ybXMuc2hlZW5Db2xvck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNoZWVuQ29sb3JNYXA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCkge1xuXHRcdFx0XHR1bmlmb3Jtcy5zaGVlblJvdWdobmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5jbGVhcmNvYXQgPiAwKSB7XG5cdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXQudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXQ7XG5cdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3M7XG5cblx0XHRcdGlmIChtYXRlcmlhbC5jbGVhcmNvYXRNYXApIHtcblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0TWFwLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0TWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSB7XG5cdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCkge1xuXHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbFNjYWxlKTtcblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXG5cdFx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkge1xuXHRcdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDApIHtcblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvbi52YWx1ZSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWUgPSB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldCh0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQud2lkdGgsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldC5oZWlnaHQpO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwKSB7XG5cdFx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvbk1hcC52YWx1ZSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcDtcblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudGhpY2tuZXNzLnZhbHVlID0gbWF0ZXJpYWwudGhpY2tuZXNzO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWwudGhpY2tuZXNzTWFwKSB7XG5cdFx0XHRcdHVuaWZvcm1zLnRoaWNrbmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLnRoaWNrbmVzc01hcDtcblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZSA9IG1hdGVyaWFsLmF0dGVudWF0aW9uRGlzdGFuY2U7XG5cdFx0XHR1bmlmb3Jtcy5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkobWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvcik7XG5cdFx0fVxuXG5cdFx0dW5pZm9ybXMuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eTtcblx0XHR1bmlmb3Jtcy5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkobWF0ZXJpYWwuc3BlY3VsYXJDb2xvcik7XG5cblx0XHRpZiAobWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXApIHtcblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlID0gbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXApIHtcblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFyQ29sb3JNYXAudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc01hdGNhcCh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHRpZiAobWF0ZXJpYWwubWF0Y2FwKSB7XG5cdFx0XHR1bmlmb3Jtcy5tYXRjYXAudmFsdWUgPSBtYXRlcmlhbC5tYXRjYXA7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmJ1bXBNYXApIHtcblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgKj0gLTE7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLm5vcm1hbE1hcCkge1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weShtYXRlcmlhbC5ub3JtYWxTY2FsZSk7XG5cdFx0XHRpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXApIHtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50Qmlhcztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNEZXB0aCh1bmlmb3JtcywgbWF0ZXJpYWwpIHtcblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zRGlzdGFuY2UodW5pZm9ybXMsIG1hdGVyaWFsKSB7XG5cdFx0aWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCkge1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdH1cblxuXHRcdHVuaWZvcm1zLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkobWF0ZXJpYWwucmVmZXJlbmNlUG9zaXRpb24pO1xuXHRcdHVuaWZvcm1zLm5lYXJEaXN0YW5jZS52YWx1ZSA9IG1hdGVyaWFsLm5lYXJEaXN0YW5jZTtcblx0XHR1bmlmb3Jtcy5mYXJEaXN0YW5jZS52YWx1ZSA9IG1hdGVyaWFsLmZhckRpc3RhbmNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTm9ybWFsKHVuaWZvcm1zLCBtYXRlcmlhbCkge1xuXHRcdGlmIChtYXRlcmlhbC5idW1wTWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmIChtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0xO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbC5ub3JtYWxNYXApIHtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobWF0ZXJpYWwubm9ybWFsU2NhbGUpO1xuXHRcdFx0aWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwKSB7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRyZWZyZXNoRm9nVW5pZm9ybXM6IHJlZnJlc2hGb2dVbmlmb3Jtcyxcblx0XHRyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczogcmVmcmVzaE1hdGVyaWFsVW5pZm9ybXNcblx0fTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCgpIHtcblx0Y29uc3QgY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCdjYW52YXMnKTtcblx0Y2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRyZXR1cm4gY2FudmFzO1xufVxuXG5mdW5jdGlvbiBXZWJHTFJlbmRlcmVyKHBhcmFtZXRlcnMgPSB7fSkge1xuXHRjb25zdCBfY2FudmFzID0gcGFyYW1ldGVycy5jYW52YXMgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuY2FudmFzIDogY3JlYXRlQ2FudmFzRWxlbWVudCgpLFxuXHRcdFx0XHRfY29udGV4dCA9IHBhcmFtZXRlcnMuY29udGV4dCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5jb250ZXh0IDogbnVsbCxcblx0XHRcdFx0X2FscGhhID0gcGFyYW1ldGVycy5hbHBoYSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5hbHBoYSA6IGZhbHNlLFxuXHRcdFx0XHRfZGVwdGggPSBwYXJhbWV0ZXJzLmRlcHRoICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRlcHRoIDogdHJ1ZSxcblx0XHRcdFx0X3N0ZW5jaWwgPSBwYXJhbWV0ZXJzLnN0ZW5jaWwgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuc3RlbmNpbCA6IHRydWUsXG5cdFx0XHRcdF9hbnRpYWxpYXMgPSBwYXJhbWV0ZXJzLmFudGlhbGlhcyAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5hbnRpYWxpYXMgOiBmYWxzZSxcblx0XHRcdFx0X3ByZW11bHRpcGxpZWRBbHBoYSA9IHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSA6IHRydWUsXG5cdFx0XHRcdF9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBwYXJhbWV0ZXJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgOiBmYWxzZSxcblx0XHRcdFx0X3Bvd2VyUHJlZmVyZW5jZSA9IHBhcmFtZXRlcnMucG93ZXJQcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnBvd2VyUHJlZmVyZW5jZSA6ICdkZWZhdWx0Jyxcblx0XHRcdFx0X2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBwYXJhbWV0ZXJzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA6IGZhbHNlO1xuXG5cdGxldCBjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7XG5cdGxldCBjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsOyAvLyByZW5kZXIoKSBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgdHJpZ2dlcmVkIGJ5IGFub3RoZXIgcmVuZGVyLlxuXHQvLyBXZSB0cmFjayB0aGlzIHNvIHRoYXQgdGhlIG5lc3RlZCByZW5kZXIgY2FsbCBnZXRzIGl0cyBsaXN0IGFuZCBzdGF0ZSBpc29sYXRlZCBmcm9tIHRoZSBwYXJlbnQgcmVuZGVyIGNhbGwuXG5cblx0Y29uc3QgcmVuZGVyTGlzdFN0YWNrID0gW107XG5cdGNvbnN0IHJlbmRlclN0YXRlU3RhY2sgPSBbXTsgLy8gcHVibGljIHByb3BlcnRpZXNcblxuXHR0aGlzLmRvbUVsZW1lbnQgPSBfY2FudmFzOyAvLyBEZWJ1ZyBjb25maWd1cmF0aW9uIGNvbnRhaW5lclxuXG5cdHRoaXMuZGVidWcgPSB7XG5cdFx0LyoqXG5cdFx0ICogRW5hYmxlcyBlcnJvciBjaGVja2luZyBhbmQgcmVwb3J0aW5nIHdoZW4gc2hhZGVyIHByb2dyYW1zIGFyZSBiZWluZyBjb21waWxlZFxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGNoZWNrU2hhZGVyRXJyb3JzOiB0cnVlXG5cdH07IC8vIGNsZWFyaW5nXG5cblx0dGhpcy5hdXRvQ2xlYXIgPSB0cnVlO1xuXHR0aGlzLmF1dG9DbGVhckNvbG9yID0gdHJ1ZTtcblx0dGhpcy5hdXRvQ2xlYXJEZXB0aCA9IHRydWU7XG5cdHRoaXMuYXV0b0NsZWFyU3RlbmNpbCA9IHRydWU7IC8vIHNjZW5lIGdyYXBoXG5cblx0dGhpcy5zb3J0T2JqZWN0cyA9IHRydWU7IC8vIHVzZXItZGVmaW5lZCBjbGlwcGluZ1xuXG5cdHRoaXMuY2xpcHBpbmdQbGFuZXMgPSBbXTtcblx0dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNlOyAvLyBwaHlzaWNhbGx5IGJhc2VkIHNoYWRpbmdcblxuXHR0aGlzLm91dHB1dEVuY29kaW5nID0gTGluZWFyRW5jb2Rpbmc7IC8vIHBoeXNpY2FsIGxpZ2h0c1xuXG5cdHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPSBmYWxzZTsgLy8gdG9uZSBtYXBwaW5nXG5cblx0dGhpcy50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cdHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZSA9IDEuMDsgLy8gaW50ZXJuYWwgcHJvcGVydGllc1xuXG5cdGNvbnN0IF90aGlzID0gdGhpcztcblxuXHRsZXQgX2lzQ29udGV4dExvc3QgPSBmYWxzZTsgLy8gaW50ZXJuYWwgc3RhdGUgY2FjaGVcblxuXHRsZXQgX2N1cnJlbnRBY3RpdmVDdWJlRmFjZSA9IDA7XG5cdGxldCBfY3VycmVudEFjdGl2ZU1pcG1hcExldmVsID0gMDtcblx0bGV0IF9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gbnVsbDtcblxuXHRsZXQgX2N1cnJlbnRNYXRlcmlhbElkID0gLTE7XG5cblx0bGV0IF9jdXJyZW50Q2FtZXJhID0gbnVsbDtcblxuXHRjb25zdCBfY3VycmVudFZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKTtcblxuXHRjb25zdCBfY3VycmVudFNjaXNzb3IgPSBuZXcgVmVjdG9yNCgpO1xuXG5cdGxldCBfY3VycmVudFNjaXNzb3JUZXN0ID0gbnVsbDsgLy9cblxuXHRsZXQgX3dpZHRoID0gX2NhbnZhcy53aWR0aDtcblx0bGV0IF9oZWlnaHQgPSBfY2FudmFzLmhlaWdodDtcblx0bGV0IF9waXhlbFJhdGlvID0gMTtcblx0bGV0IF9vcGFxdWVTb3J0ID0gbnVsbDtcblx0bGV0IF90cmFuc3BhcmVudFNvcnQgPSBudWxsO1xuXG5cdGNvbnN0IF92aWV3cG9ydCA9IG5ldyBWZWN0b3I0KDAsIDAsIF93aWR0aCwgX2hlaWdodCk7XG5cblx0Y29uc3QgX3NjaXNzb3IgPSBuZXcgVmVjdG9yNCgwLCAwLCBfd2lkdGgsIF9oZWlnaHQpO1xuXG5cdGxldCBfc2Npc3NvclRlc3QgPSBmYWxzZTsgLy8gZnJ1c3R1bVxuXG5cdGNvbnN0IF9mcnVzdHVtID0gbmV3IEZydXN0dW0oKTsgLy8gY2xpcHBpbmdcblxuXG5cdGxldCBfY2xpcHBpbmdFbmFibGVkID0gZmFsc2U7XG5cdGxldCBfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBmYWxzZTsgLy8gdHJhbnNtaXNzaW9uXG5cblx0bGV0IF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPSBudWxsOyAvLyBjYW1lcmEgbWF0cmljZXMgY2FjaGVcblxuXHRjb25zdCBfcHJvalNjcmVlbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0Y29uc3QgX3ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdGNvbnN0IF9lbXB0eVNjZW5lID0ge1xuXHRcdGJhY2tncm91bmQ6IG51bGwsXG5cdFx0Zm9nOiBudWxsLFxuXHRcdGVudmlyb25tZW50OiBudWxsLFxuXHRcdG92ZXJyaWRlTWF0ZXJpYWw6IG51bGwsXG5cdFx0aXNTY2VuZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldFRhcmdldFBpeGVsUmF0aW8oKSB7XG5cdFx0cmV0dXJuIF9jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSBudWxsID8gX3BpeGVsUmF0aW8gOiAxO1xuXHR9IC8vIGluaXRpYWxpemVcblxuXG5cdGxldCBfZ2wgPSBfY29udGV4dDtcblxuXHRmdW5jdGlvbiBnZXRDb250ZXh0KGNvbnRleHROYW1lcywgY29udGV4dEF0dHJpYnV0ZXMpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRleHROYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29udGV4dE5hbWUgPSBjb250ZXh0TmFtZXNbaV07XG5cblx0XHRcdGNvbnN0IGNvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoY29udGV4dE5hbWUsIGNvbnRleHRBdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKGNvbnRleHQgIT09IG51bGwpIHJldHVybiBjb250ZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRjb25zdCBjb250ZXh0QXR0cmlidXRlcyA9IHtcblx0XHRcdGFscGhhOiB0cnVlLFxuXHRcdFx0ZGVwdGg6IF9kZXB0aCxcblx0XHRcdHN0ZW5jaWw6IF9zdGVuY2lsLFxuXHRcdFx0YW50aWFsaWFzOiBfYW50aWFsaWFzLFxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhOiBfcHJlbXVsdGlwbGllZEFscGhhLFxuXHRcdFx0cHJlc2VydmVEcmF3aW5nQnVmZmVyOiBfcHJlc2VydmVEcmF3aW5nQnVmZmVyLFxuXHRcdFx0cG93ZXJQcmVmZXJlbmNlOiBfcG93ZXJQcmVmZXJlbmNlLFxuXHRcdFx0ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRcblx0XHR9OyAvLyBPZmZzY3JlZW5DYW52YXMgZG9lcyBub3QgaGF2ZSBzZXRBdHRyaWJ1dGUsIHNlZSAjMjI4MTFcblxuXHRcdGlmICgnc2V0QXR0cmlidXRlJyBpbiBfY2FudmFzKSBfY2FudmFzLnNldEF0dHJpYnV0ZSgnZGF0YS1lbmdpbmUnLCBgdGhyZWUuanMgciR7UkVWSVNJT059YCk7IC8vIGV2ZW50IGxpc3RlbmVycyBtdXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIFdlYkdMIGNvbnRleHQgaXMgY3JlYXRlZCwgc2VlICMxMjc1M1xuXG5cdFx0X2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0Jywgb25Db250ZXh0TG9zdCwgZmFsc2UpO1xuXG5cdFx0X2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIG9uQ29udGV4dFJlc3RvcmUsIGZhbHNlKTtcblxuXHRcdGlmIChfZ2wgPT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGNvbnRleHROYW1lcyA9IFsnd2ViZ2wyJywgJ3dlYmdsJywgJ2V4cGVyaW1lbnRhbC13ZWJnbCddO1xuXG5cdFx0XHRpZiAoX3RoaXMuaXNXZWJHTDFSZW5kZXJlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb250ZXh0TmFtZXMuc2hpZnQoKTtcblx0XHRcdH1cblxuXHRcdFx0X2dsID0gZ2V0Q29udGV4dChjb250ZXh0TmFtZXMsIGNvbnRleHRBdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKF9nbCA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoZ2V0Q29udGV4dChjb250ZXh0TmFtZXMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLicpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gLy8gU29tZSBleHBlcmltZW50YWwtd2ViZ2wgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBoYXZlIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdFxuXG5cblx0XHRpZiAoX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdCdyYW5nZU1pbic6IDEsXG5cdFx0XHRcdFx0J3JhbmdlTWF4JzogMSxcblx0XHRcdFx0XHQncHJlY2lzaW9uJzogMVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xSZW5kZXJlcjogJyArIGVycm9yLm1lc3NhZ2UpO1xuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0bGV0IGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcywgc3RhdGUsIGluZm87XG5cdGxldCBwcm9wZXJ0aWVzLCB0ZXh0dXJlcywgY3ViZW1hcHMsIGN1YmV1dm1hcHMsIGF0dHJpYnV0ZXMsIGdlb21ldHJpZXMsIG9iamVjdHM7XG5cdGxldCBwcm9ncmFtQ2FjaGUsIG1hdGVyaWFscywgcmVuZGVyTGlzdHMsIHJlbmRlclN0YXRlcywgY2xpcHBpbmcsIHNoYWRvd01hcDtcblx0bGV0IGJhY2tncm91bmQsIG1vcnBodGFyZ2V0cywgYnVmZmVyUmVuZGVyZXIsIGluZGV4ZWRCdWZmZXJSZW5kZXJlcjtcblx0bGV0IHV0aWxzLCBiaW5kaW5nU3RhdGVzO1xuXG5cdGZ1bmN0aW9uIGluaXRHTENvbnRleHQoKSB7XG5cdFx0ZXh0ZW5zaW9ucyA9IG5ldyBXZWJHTEV4dGVuc2lvbnMoX2dsKTtcblx0XHRjYXBhYmlsaXRpZXMgPSBuZXcgV2ViR0xDYXBhYmlsaXRpZXMoX2dsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzKTtcblx0XHRleHRlbnNpb25zLmluaXQoY2FwYWJpbGl0aWVzKTtcblx0XHR1dGlscyA9IG5ldyBXZWJHTFV0aWxzKF9nbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0XHRzdGF0ZSA9IG5ldyBXZWJHTFN0YXRlKF9nbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzKTtcblx0XHRpbmZvID0gbmV3IFdlYkdMSW5mbyhfZ2wpO1xuXHRcdHByb3BlcnRpZXMgPSBuZXcgV2ViR0xQcm9wZXJ0aWVzKCk7XG5cdFx0dGV4dHVyZXMgPSBuZXcgV2ViR0xUZXh0dXJlcyhfZ2wsIGV4dGVuc2lvbnMsIHN0YXRlLCBwcm9wZXJ0aWVzLCBjYXBhYmlsaXRpZXMsIHV0aWxzLCBpbmZvKTtcblx0XHRjdWJlbWFwcyA9IG5ldyBXZWJHTEN1YmVNYXBzKF90aGlzKTtcblx0XHRjdWJldXZtYXBzID0gbmV3IFdlYkdMQ3ViZVVWTWFwcyhfdGhpcyk7XG5cdFx0YXR0cmlidXRlcyA9IG5ldyBXZWJHTEF0dHJpYnV0ZXMoX2dsLCBjYXBhYmlsaXRpZXMpO1xuXHRcdGJpbmRpbmdTdGF0ZXMgPSBuZXcgV2ViR0xCaW5kaW5nU3RhdGVzKF9nbCwgZXh0ZW5zaW9ucywgYXR0cmlidXRlcywgY2FwYWJpbGl0aWVzKTtcblx0XHRnZW9tZXRyaWVzID0gbmV3IFdlYkdMR2VvbWV0cmllcyhfZ2wsIGF0dHJpYnV0ZXMsIGluZm8sIGJpbmRpbmdTdGF0ZXMpO1xuXHRcdG9iamVjdHMgPSBuZXcgV2ViR0xPYmplY3RzKF9nbCwgZ2VvbWV0cmllcywgYXR0cmlidXRlcywgaW5mbyk7XG5cdFx0bW9ycGh0YXJnZXRzID0gbmV3IFdlYkdMTW9ycGh0YXJnZXRzKF9nbCwgY2FwYWJpbGl0aWVzLCB0ZXh0dXJlcyk7XG5cdFx0Y2xpcHBpbmcgPSBuZXcgV2ViR0xDbGlwcGluZyhwcm9wZXJ0aWVzKTtcblx0XHRwcm9ncmFtQ2FjaGUgPSBuZXcgV2ViR0xQcm9ncmFtcyhfdGhpcywgY3ViZW1hcHMsIGN1YmV1dm1hcHMsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcywgYmluZGluZ1N0YXRlcywgY2xpcHBpbmcpO1xuXHRcdG1hdGVyaWFscyA9IG5ldyBXZWJHTE1hdGVyaWFscyhwcm9wZXJ0aWVzKTtcblx0XHRyZW5kZXJMaXN0cyA9IG5ldyBXZWJHTFJlbmRlckxpc3RzKCk7XG5cdFx0cmVuZGVyU3RhdGVzID0gbmV3IFdlYkdMUmVuZGVyU3RhdGVzKGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyk7XG5cdFx0YmFja2dyb3VuZCA9IG5ldyBXZWJHTEJhY2tncm91bmQoX3RoaXMsIGN1YmVtYXBzLCBzdGF0ZSwgb2JqZWN0cywgX2FscGhhLCBfcHJlbXVsdGlwbGllZEFscGhhKTtcblx0XHRzaGFkb3dNYXAgPSBuZXcgV2ViR0xTaGFkb3dNYXAoX3RoaXMsIG9iamVjdHMsIGNhcGFiaWxpdGllcyk7XG5cdFx0YnVmZmVyUmVuZGVyZXIgPSBuZXcgV2ViR0xCdWZmZXJSZW5kZXJlcihfZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNhcGFiaWxpdGllcyk7XG5cdFx0aW5kZXhlZEJ1ZmZlclJlbmRlcmVyID0gbmV3IFdlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyKF9nbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzKTtcblx0XHRpbmZvLnByb2dyYW1zID0gcHJvZ3JhbUNhY2hlLnByb2dyYW1zO1xuXHRcdF90aGlzLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcztcblx0XHRfdGhpcy5leHRlbnNpb25zID0gZXh0ZW5zaW9ucztcblx0XHRfdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblx0XHRfdGhpcy5yZW5kZXJMaXN0cyA9IHJlbmRlckxpc3RzO1xuXHRcdF90aGlzLnNoYWRvd01hcCA9IHNoYWRvd01hcDtcblx0XHRfdGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHRcdF90aGlzLmluZm8gPSBpbmZvO1xuXHR9XG5cblx0aW5pdEdMQ29udGV4dCgpOyAvLyB4clxuXG5cdGNvbnN0IHhyID0gbmV3IFdlYlhSTWFuYWdlcihfdGhpcywgX2dsKTtcblx0dGhpcy54ciA9IHhyOyAvLyBBUElcblxuXHR0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIF9nbDtcblx0fTtcblxuXHR0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBfZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTtcblx0fTtcblxuXHR0aGlzLmZvcmNlQ29udGV4dExvc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2xvc2VfY29udGV4dCcpO1xuXHRcdGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5sb3NlQ29udGV4dCgpO1xuXHR9O1xuXG5cdHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnV0VCR0xfbG9zZV9jb250ZXh0Jyk7XG5cdFx0aWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uLnJlc3RvcmVDb250ZXh0KCk7XG5cdH07XG5cblx0dGhpcy5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBfcGl4ZWxSYXRpbztcblx0fTtcblxuXHR0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHRcdF9waXhlbFJhdGlvID0gdmFsdWU7XG5cdFx0dGhpcy5zZXRTaXplKF93aWR0aCwgX2hlaWdodCwgZmFsc2UpO1xuXHR9O1xuXG5cdHRoaXMuZ2V0U2l6ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LnNldChfd2lkdGgsIF9oZWlnaHQpO1xuXHR9O1xuXG5cdHRoaXMuc2V0U2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVTdHlsZSkge1xuXHRcdGlmICh4ci5pc1ByZXNlbnRpbmcpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuXFwndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRfd2lkdGggPSB3aWR0aDtcblx0XHRfaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdF9jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogX3BpeGVsUmF0aW8pO1xuXHRcdF9jYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiBfcGl4ZWxSYXRpbyk7XG5cblx0XHRpZiAodXBkYXRlU3R5bGUgIT09IGZhbHNlKSB7XG5cdFx0XHRfY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuXHRcdFx0X2NhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdH07XG5cblx0dGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LnNldChfd2lkdGggKiBfcGl4ZWxSYXRpbywgX2hlaWdodCAqIF9waXhlbFJhdGlvKS5mbG9vcigpO1xuXHR9O1xuXG5cdHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgcGl4ZWxSYXRpbykge1xuXHRcdF93aWR0aCA9IHdpZHRoO1xuXHRcdF9oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0X3BpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuXHRcdF9jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogcGl4ZWxSYXRpbyk7XG5cdFx0X2NhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIHBpeGVsUmF0aW8pO1xuXHRcdHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cdH07XG5cblx0dGhpcy5nZXRDdXJyZW50Vmlld3BvcnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KF9jdXJyZW50Vmlld3BvcnQpO1xuXHR9O1xuXG5cdHRoaXMuZ2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KF92aWV3cG9ydCk7XG5cdH07XG5cblx0dGhpcy5zZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0aWYgKHguaXNWZWN0b3I0KSB7XG5cdFx0XHRfdmlld3BvcnQuc2V0KHgueCwgeC55LCB4LnosIHgudyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF92aWV3cG9ydC5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdFx0fVxuXG5cdFx0c3RhdGUudmlld3BvcnQoX2N1cnJlbnRWaWV3cG9ydC5jb3B5KF92aWV3cG9ydCkubXVsdGlwbHlTY2FsYXIoX3BpeGVsUmF0aW8pLmZsb29yKCkpO1xuXHR9O1xuXG5cdHRoaXMuZ2V0U2Npc3NvciA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoX3NjaXNzb3IpO1xuXHR9O1xuXG5cdHRoaXMuc2V0U2Npc3NvciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0aWYgKHguaXNWZWN0b3I0KSB7XG5cdFx0XHRfc2Npc3Nvci5zZXQoeC54LCB4LnksIHgueiwgeC53KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X3NjaXNzb3Iuc2V0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHRcdH1cblxuXHRcdHN0YXRlLnNjaXNzb3IoX2N1cnJlbnRTY2lzc29yLmNvcHkoX3NjaXNzb3IpLm11bHRpcGx5U2NhbGFyKF9waXhlbFJhdGlvKS5mbG9vcigpKTtcblx0fTtcblxuXHR0aGlzLmdldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBfc2Npc3NvclRlc3Q7XG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yVGVzdCA9IGZ1bmN0aW9uIChib29sZWFuKSB7XG5cdFx0c3RhdGUuc2V0U2Npc3NvclRlc3QoX3NjaXNzb3JUZXN0ID0gYm9vbGVhbik7XG5cdH07XG5cblx0dGhpcy5zZXRPcGFxdWVTb3J0ID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuXHRcdF9vcGFxdWVTb3J0ID0gbWV0aG9kO1xuXHR9O1xuXG5cdHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0ID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuXHRcdF90cmFuc3BhcmVudFNvcnQgPSBtZXRob2Q7XG5cdH07IC8vIENsZWFyaW5nXG5cblxuXHR0aGlzLmdldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KGJhY2tncm91bmQuZ2V0Q2xlYXJDb2xvcigpKTtcblx0fTtcblxuXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0YmFja2dyb3VuZC5zZXRDbGVhckNvbG9yLmFwcGx5KGJhY2tncm91bmQsIGFyZ3VtZW50cyk7XG5cdH07XG5cblx0dGhpcy5nZXRDbGVhckFscGhhID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBiYWNrZ3JvdW5kLmdldENsZWFyQWxwaGEoKTtcblx0fTtcblxuXHR0aGlzLnNldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7XG5cdFx0YmFja2dyb3VuZC5zZXRDbGVhckFscGhhLmFwcGx5KGJhY2tncm91bmQsIGFyZ3VtZW50cyk7XG5cdH07XG5cblx0dGhpcy5jbGVhciA9IGZ1bmN0aW9uIChjb2xvciwgZGVwdGgsIHN0ZW5jaWwpIHtcblx0XHRsZXQgYml0cyA9IDA7XG5cdFx0aWYgKGNvbG9yID09PSB1bmRlZmluZWQgfHwgY29sb3IpIGJpdHMgfD0gX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XG5cdFx0aWYgKGRlcHRoID09PSB1bmRlZmluZWQgfHwgZGVwdGgpIGJpdHMgfD0gX2dsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cdFx0aWYgKHN0ZW5jaWwgPT09IHVuZGVmaW5lZCB8fCBzdGVuY2lsKSBiaXRzIHw9IF9nbC5TVEVOQ0lMX0JVRkZFUl9CSVQ7XG5cblx0XHRfZ2wuY2xlYXIoYml0cyk7XG5cdH07XG5cblx0dGhpcy5jbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMuY2xlYXIodHJ1ZSwgZmFsc2UsIGZhbHNlKTtcblx0fTtcblxuXHR0aGlzLmNsZWFyRGVwdGggPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5jbGVhcihmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xuXHR9O1xuXG5cdHRoaXMuY2xlYXJTdGVuY2lsID0gZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMuY2xlYXIoZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0fTsgLy9cblxuXG5cdHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRfY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRMb3N0LCBmYWxzZSk7XG5cblx0XHRfY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgb25Db250ZXh0UmVzdG9yZSwgZmFsc2UpO1xuXG5cdFx0cmVuZGVyTGlzdHMuZGlzcG9zZSgpO1xuXHRcdHJlbmRlclN0YXRlcy5kaXNwb3NlKCk7XG5cdFx0cHJvcGVydGllcy5kaXNwb3NlKCk7XG5cdFx0Y3ViZW1hcHMuZGlzcG9zZSgpO1xuXHRcdGN1YmV1dm1hcHMuZGlzcG9zZSgpO1xuXHRcdG9iamVjdHMuZGlzcG9zZSgpO1xuXHRcdGJpbmRpbmdTdGF0ZXMuZGlzcG9zZSgpO1xuXHRcdHByb2dyYW1DYWNoZS5kaXNwb3NlKCk7XG5cdFx0eHIuZGlzcG9zZSgpO1xuXHRcdHhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIG9uWFJTZXNzaW9uU3RhcnQpO1xuXHRcdHhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBvblhSU2Vzc2lvbkVuZCk7XG5cblx0XHRpZiAoX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCkge1xuXHRcdFx0X3RyYW5zbWlzc2lvblJlbmRlclRhcmdldC5kaXNwb3NlKCk7XG5cblx0XHRcdF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPSBudWxsO1xuXHRcdH1cblxuXHRcdGFuaW1hdGlvbi5zdG9wKCk7XG5cdH07IC8vIEV2ZW50c1xuXG5cblx0ZnVuY3Rpb24gb25Db250ZXh0TG9zdChldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc29sZS5sb2coJ1RIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4nKTtcblx0XHRfaXNDb250ZXh0TG9zdCA9IHRydWU7XG5cdH1cblxuXHRmdW5jdGlvblxuXHRcdC8qIGV2ZW50ICovXG5cdG9uQ29udGV4dFJlc3RvcmUoKSB7XG5cdFx0Y29uc29sZS5sb2coJ1RIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuJyk7XG5cdFx0X2lzQ29udGV4dExvc3QgPSBmYWxzZTtcblx0XHRjb25zdCBpbmZvQXV0b1Jlc2V0ID0gaW5mby5hdXRvUmVzZXQ7XG5cdFx0Y29uc3Qgc2hhZG93TWFwRW5hYmxlZCA9IHNoYWRvd01hcC5lbmFibGVkO1xuXHRcdGNvbnN0IHNoYWRvd01hcEF1dG9VcGRhdGUgPSBzaGFkb3dNYXAuYXV0b1VwZGF0ZTtcblx0XHRjb25zdCBzaGFkb3dNYXBOZWVkc1VwZGF0ZSA9IHNoYWRvd01hcC5uZWVkc1VwZGF0ZTtcblx0XHRjb25zdCBzaGFkb3dNYXBUeXBlID0gc2hhZG93TWFwLnR5cGU7XG5cdFx0aW5pdEdMQ29udGV4dCgpO1xuXHRcdGluZm8uYXV0b1Jlc2V0ID0gaW5mb0F1dG9SZXNldDtcblx0XHRzaGFkb3dNYXAuZW5hYmxlZCA9IHNoYWRvd01hcEVuYWJsZWQ7XG5cdFx0c2hhZG93TWFwLmF1dG9VcGRhdGUgPSBzaGFkb3dNYXBBdXRvVXBkYXRlO1xuXHRcdHNoYWRvd01hcC5uZWVkc1VwZGF0ZSA9IHNoYWRvd01hcE5lZWRzVXBkYXRlO1xuXHRcdHNoYWRvd01hcC50eXBlID0gc2hhZG93TWFwVHlwZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG9uTWF0ZXJpYWxEaXNwb3NlKGV2ZW50KSB7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBldmVudC50YXJnZXQ7XG5cdFx0bWF0ZXJpYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzcG9zZScsIG9uTWF0ZXJpYWxEaXNwb3NlKTtcblx0XHRkZWFsbG9jYXRlTWF0ZXJpYWwobWF0ZXJpYWwpO1xuXHR9IC8vIEJ1ZmZlciBkZWFsbG9jYXRpb25cblxuXG5cdGZ1bmN0aW9uIGRlYWxsb2NhdGVNYXRlcmlhbChtYXRlcmlhbCkge1xuXHRcdHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVuY2VzKG1hdGVyaWFsKTtcblx0XHRwcm9wZXJ0aWVzLnJlbW92ZShtYXRlcmlhbCk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlTWF0ZXJpYWxQcm9ncmFtUmVmZXJlbmNlcyhtYXRlcmlhbCkge1xuXHRcdGNvbnN0IHByb2dyYW1zID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpLnByb2dyYW1zO1xuXG5cdFx0aWYgKHByb2dyYW1zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHByb2dyYW1zLmZvckVhY2goZnVuY3Rpb24gKHByb2dyYW0pIHtcblx0XHRcdFx0cHJvZ3JhbUNhY2hlLnJlbGVhc2VQcm9ncmFtKHByb2dyYW0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsKSB7XG5cdFx0XHRcdHByb2dyYW1DYWNoZS5yZWxlYXNlU2hhZGVyQ2FjaGUobWF0ZXJpYWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSAvLyBCdWZmZXIgcmVuZGVyaW5nXG5cblxuXHR0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdCA9IGZ1bmN0aW9uIChjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXApIHtcblx0XHRpZiAoc2NlbmUgPT09IG51bGwpIHNjZW5lID0gX2VtcHR5U2NlbmU7IC8vIHJlbmRlckJ1ZmZlckRpcmVjdCBzZWNvbmQgcGFyYW1ldGVyIHVzZWQgdG8gYmUgZm9nIChjb3VsZCBiZSBudWxsKVxuXG5cdFx0Y29uc3QgZnJvbnRGYWNlQ1cgPSBvYmplY3QuaXNNZXNoICYmIG9iamVjdC5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpIDwgMDtcblx0XHRjb25zdCBwcm9ncmFtID0gc2V0UHJvZ3JhbShjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCk7XG5cdFx0c3RhdGUuc2V0TWF0ZXJpYWwobWF0ZXJpYWwsIGZyb250RmFjZUNXKTsgLy9cblxuXHRcdGxldCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsgLy9cblxuXHRcdGlmIChpbmRleCA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24uY291bnQgPT09IDApIHJldHVybjtcblx0XHR9IGVsc2UgaWYgKGluZGV4LmNvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSAvL1xuXG5cblx0XHRsZXQgcmFuZ2VGYWN0b3IgPSAxO1xuXG5cdFx0aWYgKG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSkge1xuXHRcdFx0aW5kZXggPSBnZW9tZXRyaWVzLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShnZW9tZXRyeSk7XG5cdFx0XHRyYW5nZUZhY3RvciA9IDI7XG5cdFx0fVxuXG5cdFx0YmluZGluZ1N0YXRlcy5zZXR1cChvYmplY3QsIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSwgaW5kZXgpO1xuXHRcdGxldCBhdHRyaWJ1dGU7XG5cdFx0bGV0IHJlbmRlcmVyID0gYnVmZmVyUmVuZGVyZXI7XG5cblx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0KGluZGV4KTtcblx0XHRcdHJlbmRlcmVyID0gaW5kZXhlZEJ1ZmZlclJlbmRlcmVyO1xuXHRcdFx0cmVuZGVyZXIuc2V0SW5kZXgoYXR0cmlidXRlKTtcblx0XHR9IC8vXG5cblxuXHRcdGNvbnN0IGRhdGFDb3VudCA9IGluZGV4ICE9PSBudWxsID8gaW5kZXguY291bnQgOiBwb3NpdGlvbi5jb3VudDtcblx0XHRjb25zdCByYW5nZVN0YXJ0ID0gZ2VvbWV0cnkuZHJhd1JhbmdlLnN0YXJ0ICogcmFuZ2VGYWN0b3I7XG5cdFx0Y29uc3QgcmFuZ2VDb3VudCA9IGdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCAqIHJhbmdlRmFjdG9yO1xuXHRcdGNvbnN0IGdyb3VwU3RhcnQgPSBncm91cCAhPT0gbnVsbCA/IGdyb3VwLnN0YXJ0ICogcmFuZ2VGYWN0b3IgOiAwO1xuXHRcdGNvbnN0IGdyb3VwQ291bnQgPSBncm91cCAhPT0gbnVsbCA/IGdyb3VwLmNvdW50ICogcmFuZ2VGYWN0b3IgOiBJbmZpbml0eTtcblx0XHRjb25zdCBkcmF3U3RhcnQgPSBNYXRoLm1heChyYW5nZVN0YXJ0LCBncm91cFN0YXJ0KTtcblx0XHRjb25zdCBkcmF3RW5kID0gTWF0aC5taW4oZGF0YUNvdW50LCByYW5nZVN0YXJ0ICsgcmFuZ2VDb3VudCwgZ3JvdXBTdGFydCArIGdyb3VwQ291bnQpIC0gMTtcblx0XHRjb25zdCBkcmF3Q291bnQgPSBNYXRoLm1heCgwLCBkcmF3RW5kIC0gZHJhd1N0YXJ0ICsgMSk7XG5cdFx0aWYgKGRyYXdDb3VudCA9PT0gMCkgcmV0dXJuOyAvL1xuXG5cdFx0aWYgKG9iamVjdC5pc01lc2gpIHtcblx0XHRcdGlmIChtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUpIHtcblx0XHRcdFx0c3RhdGUuc2V0TGluZVdpZHRoKG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCAqIGdldFRhcmdldFBpeGVsUmF0aW8oKSk7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoX2dsLkxJTkVTKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoX2dsLlRSSUFOR0xFUyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChvYmplY3QuaXNMaW5lKSB7XG5cdFx0XHRsZXQgbGluZVdpZHRoID0gbWF0ZXJpYWwubGluZXdpZHRoO1xuXHRcdFx0aWYgKGxpbmVXaWR0aCA9PT0gdW5kZWZpbmVkKSBsaW5lV2lkdGggPSAxOyAvLyBOb3QgdXNpbmcgTGluZSpNYXRlcmlhbFxuXG5cdFx0XHRzdGF0ZS5zZXRMaW5lV2lkdGgobGluZVdpZHRoICogZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpKTtcblxuXHRcdFx0aWYgKG9iamVjdC5pc0xpbmVTZWdtZW50cykge1xuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKF9nbC5MSU5FUyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc0xpbmVMb29wKSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldE1vZGUoX2dsLkxJTkVfTE9PUCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKF9nbC5MSU5FX1NUUklQKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc1BvaW50cykge1xuXHRcdFx0cmVuZGVyZXIuc2V0TW9kZShfZ2wuUE9JTlRTKTtcblx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc1Nwcml0ZSkge1xuXHRcdFx0cmVuZGVyZXIuc2V0TW9kZShfZ2wuVFJJQU5HTEVTKTtcblx0XHR9XG5cblx0XHRpZiAob2JqZWN0LmlzSW5zdGFuY2VkTWVzaCkge1xuXHRcdFx0cmVuZGVyZXIucmVuZGVySW5zdGFuY2VzKGRyYXdTdGFydCwgZHJhd0NvdW50LCBvYmplY3QuY291bnQpO1xuXHRcdH0gZWxzZSBpZiAoZ2VvbWV0cnkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VDb3VudCA9IE1hdGgubWluKGdlb21ldHJ5Lmluc3RhbmNlQ291bnQsIGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50KTtcblx0XHRcdHJlbmRlcmVyLnJlbmRlckluc3RhbmNlcyhkcmF3U3RhcnQsIGRyYXdDb3VudCwgaW5zdGFuY2VDb3VudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbmRlcmVyLnJlbmRlcihkcmF3U3RhcnQsIGRyYXdDb3VudCk7XG5cdFx0fVxuXHR9OyAvLyBDb21waWxlXG5cblxuXHR0aGlzLmNvbXBpbGUgPSBmdW5jdGlvbiAoc2NlbmUsIGNhbWVyYSkge1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoc2NlbmUpO1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5pbml0KCk7XG5cdFx0cmVuZGVyU3RhdGVTdGFjay5wdXNoKGN1cnJlbnRSZW5kZXJTdGF0ZSk7XG5cdFx0c2NlbmUudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uIChvYmplY3QpIHtcblx0XHRcdGlmIChvYmplY3QuaXNMaWdodCAmJiBvYmplY3QubGF5ZXJzLnRlc3QoY2FtZXJhLmxheWVycykpIHtcblx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hMaWdodChvYmplY3QpO1xuXG5cdFx0XHRcdGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xuXHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5wdXNoU2hhZG93KG9iamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuc2V0dXBMaWdodHMoX3RoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpO1xuXHRcdHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChvYmplY3QpIHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWwpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtYXRlcmlhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwyID0gbWF0ZXJpYWxbaV07XG5cdFx0XHRcdFx0XHRnZXRQcm9ncmFtKG1hdGVyaWFsMiwgc2NlbmUsIG9iamVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdldFByb2dyYW0obWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmVuZGVyU3RhdGVTdGFjay5wb3AoKTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsO1xuXHR9OyAvLyBBbmltYXRpb24gTG9vcFxuXG5cblx0bGV0IG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IG51bGw7XG5cblx0ZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSh0aW1lKSB7XG5cdFx0aWYgKG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjaykgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrKHRpbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25YUlNlc3Npb25TdGFydCgpIHtcblx0XHRhbmltYXRpb24uc3RvcCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25YUlNlc3Npb25FbmQoKSB7XG5cdFx0YW5pbWF0aW9uLnN0YXJ0KCk7XG5cdH1cblxuXHRjb25zdCBhbmltYXRpb24gPSBuZXcgV2ViR0xBbmltYXRpb24oKTtcblx0YW5pbWF0aW9uLnNldEFuaW1hdGlvbkxvb3Aob25BbmltYXRpb25GcmFtZSk7XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgYW5pbWF0aW9uLnNldENvbnRleHQod2luZG93KTtcblxuXHR0aGlzLnNldEFuaW1hdGlvbkxvb3AgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR4ci5zZXRBbmltYXRpb25Mb29wKGNhbGxiYWNrKTtcblx0XHRjYWxsYmFjayA9PT0gbnVsbCA/IGFuaW1hdGlvbi5zdG9wKCkgOiBhbmltYXRpb24uc3RhcnQoKTtcblx0fTtcblxuXHR4ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uc3RhcnQnLCBvblhSU2Vzc2lvblN0YXJ0KTtcblx0eHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIG9uWFJTZXNzaW9uRW5kKTsgLy8gUmVuZGVyaW5nXG5cblx0dGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoc2NlbmUsIGNhbWVyYSkge1xuXHRcdGlmIChjYW1lcmEgIT09IHVuZGVmaW5lZCAmJiBjYW1lcmEuaXNDYW1lcmEgIT09IHRydWUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoX2lzQ29udGV4dExvc3QgPT09IHRydWUpIHJldHVybjsgLy8gdXBkYXRlIHNjZW5lIGdyYXBoXG5cblx0XHRpZiAoc2NlbmUuYXV0b1VwZGF0ZSA9PT0gdHJ1ZSkgc2NlbmUudXBkYXRlTWF0cml4V29ybGQoKTsgLy8gdXBkYXRlIGNhbWVyYSBtYXRyaWNlcyBhbmQgZnJ1c3R1bVxuXG5cdFx0aWYgKGNhbWVyYS5wYXJlbnQgPT09IG51bGwpIGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0aWYgKHhyLmVuYWJsZWQgPT09IHRydWUgJiYgeHIuaXNQcmVzZW50aW5nID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoeHIuY2FtZXJhQXV0b1VwZGF0ZSA9PT0gdHJ1ZSkgeHIudXBkYXRlQ2FtZXJhKGNhbWVyYSk7XG5cdFx0XHRjYW1lcmEgPSB4ci5nZXRDYW1lcmEoKTsgLy8gdXNlIFhSIGNhbWVyYSBmb3IgcmVuZGVyaW5nXG5cdFx0fSAvL1xuXG5cblx0XHRpZiAoc2NlbmUuaXNTY2VuZSA9PT0gdHJ1ZSkgc2NlbmUub25CZWZvcmVSZW5kZXIoX3RoaXMsIHNjZW5lLCBjYW1lcmEsIF9jdXJyZW50UmVuZGVyVGFyZ2V0KTtcblx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZXMuZ2V0KHNjZW5lLCByZW5kZXJTdGF0ZVN0YWNrLmxlbmd0aCk7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLmluaXQoKTtcblx0XHRyZW5kZXJTdGF0ZVN0YWNrLnB1c2goY3VycmVudFJlbmRlclN0YXRlKTtcblxuXHRcdF9wcm9qU2NyZWVuTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgsIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXG5cdFx0X2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoX3Byb2pTY3JlZW5NYXRyaXgpO1xuXG5cdFx0X2xvY2FsQ2xpcHBpbmdFbmFibGVkID0gdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZDtcblx0XHRfY2xpcHBpbmdFbmFibGVkID0gY2xpcHBpbmcuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLCBfbG9jYWxDbGlwcGluZ0VuYWJsZWQsIGNhbWVyYSk7XG5cdFx0Y3VycmVudFJlbmRlckxpc3QgPSByZW5kZXJMaXN0cy5nZXQoc2NlbmUsIHJlbmRlckxpc3RTdGFjay5sZW5ndGgpO1xuXHRcdGN1cnJlbnRSZW5kZXJMaXN0LmluaXQoKTtcblx0XHRyZW5kZXJMaXN0U3RhY2sucHVzaChjdXJyZW50UmVuZGVyTGlzdCk7XG5cdFx0cHJvamVjdE9iamVjdChzY2VuZSwgY2FtZXJhLCAwLCBfdGhpcy5zb3J0T2JqZWN0cyk7XG5cdFx0Y3VycmVudFJlbmRlckxpc3QuZmluaXNoKCk7XG5cblx0XHRpZiAoX3RoaXMuc29ydE9iamVjdHMgPT09IHRydWUpIHtcblx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnNvcnQoX29wYXF1ZVNvcnQsIF90cmFuc3BhcmVudFNvcnQpO1xuXHRcdH0gLy9cblxuXG5cdFx0aWYgKF9jbGlwcGluZ0VuYWJsZWQgPT09IHRydWUpIGNsaXBwaW5nLmJlZ2luU2hhZG93cygpO1xuXHRcdGNvbnN0IHNoYWRvd3NBcnJheSA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5zaGFkb3dzQXJyYXk7XG5cdFx0c2hhZG93TWFwLnJlbmRlcihzaGFkb3dzQXJyYXksIHNjZW5lLCBjYW1lcmEpO1xuXHRcdGlmIChfY2xpcHBpbmdFbmFibGVkID09PSB0cnVlKSBjbGlwcGluZy5lbmRTaGFkb3dzKCk7IC8vXG5cblx0XHRpZiAodGhpcy5pbmZvLmF1dG9SZXNldCA9PT0gdHJ1ZSkgdGhpcy5pbmZvLnJlc2V0KCk7IC8vXG5cblx0XHRiYWNrZ3JvdW5kLnJlbmRlcihjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUpOyAvLyByZW5kZXIgc2NlbmVcblxuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0cyhfdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyk7XG5cblx0XHRpZiAoY2FtZXJhLmlzQXJyYXlDYW1lcmEpIHtcblx0XHRcdGNvbnN0IGNhbWVyYXMgPSBjYW1lcmEuY2FtZXJhcztcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjYW1lcmFzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjYW1lcmEyID0gY2FtZXJhc1tpXTtcblx0XHRcdFx0cmVuZGVyU2NlbmUoY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEyLCBjYW1lcmEyLnZpZXdwb3J0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVyU2NlbmUoY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEpO1xuXHRcdH0gLy9cblxuXG5cdFx0aWYgKF9jdXJyZW50UmVuZGVyVGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHQvLyByZXNvbHZlIG11bHRpc2FtcGxlIHJlbmRlcmJ1ZmZlcnMgdG8gYSBzaW5nbGUtc2FtcGxlIHRleHR1cmUgaWYgbmVjZXNzYXJ5XG5cdFx0XHR0ZXh0dXJlcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChfY3VycmVudFJlbmRlclRhcmdldCk7IC8vIEdlbmVyYXRlIG1pcG1hcCBpZiB3ZSdyZSB1c2luZyBhbnkga2luZCBvZiBtaXBtYXAgZmlsdGVyaW5nXG5cblx0XHRcdHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChfY3VycmVudFJlbmRlclRhcmdldCk7XG5cdFx0fSAvL1xuXG5cblx0XHRpZiAoc2NlbmUuaXNTY2VuZSA9PT0gdHJ1ZSkgc2NlbmUub25BZnRlclJlbmRlcihfdGhpcywgc2NlbmUsIGNhbWVyYSk7IC8vIEVuc3VyZSBkZXB0aCBidWZmZXIgd3JpdGluZyBpcyBlbmFibGVkIHNvIGl0IGNhbiBiZSBjbGVhcmVkIG9uIG5leHQgcmVuZGVyXG5cblx0XHRzdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QodHJ1ZSk7XG5cdFx0c3RhdGUuYnVmZmVycy5kZXB0aC5zZXRNYXNrKHRydWUpO1xuXHRcdHN0YXRlLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayh0cnVlKTtcblx0XHRzdGF0ZS5zZXRQb2x5Z29uT2Zmc2V0KGZhbHNlKTsgLy8gX2dsLmZpbmlzaCgpO1xuXG5cdFx0YmluZGluZ1N0YXRlcy5yZXNldERlZmF1bHRTdGF0ZSgpO1xuXHRcdF9jdXJyZW50TWF0ZXJpYWxJZCA9IC0xO1xuXHRcdF9jdXJyZW50Q2FtZXJhID0gbnVsbDtcblx0XHRyZW5kZXJTdGF0ZVN0YWNrLnBvcCgpO1xuXG5cdFx0aWYgKHJlbmRlclN0YXRlU3RhY2subGVuZ3RoID4gMCkge1xuXHRcdFx0Y3VycmVudFJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVTdGFja1tyZW5kZXJTdGF0ZVN0YWNrLmxlbmd0aCAtIDFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJlbmRlckxpc3RTdGFjay5wb3AoKTtcblxuXHRcdGlmIChyZW5kZXJMaXN0U3RhY2subGVuZ3RoID4gMCkge1xuXHRcdFx0Y3VycmVudFJlbmRlckxpc3QgPSByZW5kZXJMaXN0U3RhY2tbcmVuZGVyTGlzdFN0YWNrLmxlbmd0aCAtIDFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHByb2plY3RPYmplY3Qob2JqZWN0LCBjYW1lcmEsIGdyb3VwT3JkZXIsIHNvcnRPYmplY3RzKSB7XG5cdFx0aWYgKG9iamVjdC52aXNpYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoY2FtZXJhLmxheWVycyk7XG5cblx0XHRpZiAodmlzaWJsZSkge1xuXHRcdFx0aWYgKG9iamVjdC5pc0dyb3VwKSB7XG5cdFx0XHRcdGdyb3VwT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cdFx0XHR9IGVsc2UgaWYgKG9iamVjdC5pc0xPRCkge1xuXHRcdFx0XHRpZiAob2JqZWN0LmF1dG9VcGRhdGUgPT09IHRydWUpIG9iamVjdC51cGRhdGUoY2FtZXJhKTtcblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzTGlnaHQpIHtcblx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hMaWdodChvYmplY3QpO1xuXG5cdFx0XHRcdGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xuXHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5wdXNoU2hhZG93KG9iamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzU3ByaXRlKSB7XG5cdFx0XHRcdGlmICghb2JqZWN0LmZydXN0dW1DdWxsZWQgfHwgX2ZydXN0dW0uaW50ZXJzZWN0c1Nwcml0ZShvYmplY3QpKSB7XG5cdFx0XHRcdFx0aWYgKHNvcnRPYmplY3RzKSB7XG5cdFx0XHRcdFx0XHRfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24ob2JqZWN0Lm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoX3Byb2pTY3JlZW5NYXRyaXgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0cy51cGRhdGUob2JqZWN0KTtcblx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbC52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50UmVuZGVyTGlzdC5wdXNoKG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cykge1xuXHRcdFx0XHRpZiAob2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcblx0XHRcdFx0XHQvLyB1cGRhdGUgc2tlbGV0b24gb25seSBvbmNlIGluIGEgZnJhbWVcblx0XHRcdFx0XHRpZiAob2JqZWN0LnNrZWxldG9uLmZyYW1lICE9PSBpbmZvLnJlbmRlci5mcmFtZSkge1xuXHRcdFx0XHRcdFx0b2JqZWN0LnNrZWxldG9uLnVwZGF0ZSgpO1xuXHRcdFx0XHRcdFx0b2JqZWN0LnNrZWxldG9uLmZyYW1lID0gaW5mby5yZW5kZXIuZnJhbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KG9iamVjdCkpIHtcblx0XHRcdFx0XHRpZiAoc29ydE9iamVjdHMpIHtcblx0XHRcdFx0XHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbihvYmplY3QubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChfcHJvalNjcmVlbk1hdHJpeCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBvYmplY3RzLnVwZGF0ZShvYmplY3QpO1xuXHRcdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1tpXTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsW2dyb3VwLm1hdGVyaWFsSW5kZXhdO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChncm91cE1hdGVyaWFsICYmIGdyb3VwTWF0ZXJpYWwudmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnB1c2gob2JqZWN0LCBnZW9tZXRyeSwgZ3JvdXBNYXRlcmlhbCwgZ3JvdXBPcmRlciwgX3ZlY3RvcjMueiwgZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbC52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50UmVuZGVyTGlzdC5wdXNoKG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRwcm9qZWN0T2JqZWN0KGNoaWxkcmVuW2ldLCBjYW1lcmEsIGdyb3VwT3JkZXIsIHNvcnRPYmplY3RzKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJTY2VuZShjdXJyZW50UmVuZGVyTGlzdCwgc2NlbmUsIGNhbWVyYSwgdmlld3BvcnQpIHtcblx0XHRjb25zdCBvcGFxdWVPYmplY3RzID0gY3VycmVudFJlbmRlckxpc3Qub3BhcXVlO1xuXHRcdGNvbnN0IHRyYW5zbWlzc2l2ZU9iamVjdHMgPSBjdXJyZW50UmVuZGVyTGlzdC50cmFuc21pc3NpdmU7XG5cdFx0Y29uc3QgdHJhbnNwYXJlbnRPYmplY3RzID0gY3VycmVudFJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLnNldHVwTGlnaHRzVmlldyhjYW1lcmEpO1xuXHRcdGlmICh0cmFuc21pc3NpdmVPYmplY3RzLmxlbmd0aCA+IDApIHJlbmRlclRyYW5zbWlzc2lvblBhc3Mob3BhcXVlT2JqZWN0cywgc2NlbmUsIGNhbWVyYSk7XG5cdFx0aWYgKHZpZXdwb3J0KSBzdGF0ZS52aWV3cG9ydChfY3VycmVudFZpZXdwb3J0LmNvcHkodmlld3BvcnQpKTtcblx0XHRpZiAob3BhcXVlT2JqZWN0cy5sZW5ndGggPiAwKSByZW5kZXJPYmplY3RzKG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEpO1xuXHRcdGlmICh0cmFuc21pc3NpdmVPYmplY3RzLmxlbmd0aCA+IDApIHJlbmRlck9iamVjdHModHJhbnNtaXNzaXZlT2JqZWN0cywgc2NlbmUsIGNhbWVyYSk7XG5cdFx0aWYgKHRyYW5zcGFyZW50T2JqZWN0cy5sZW5ndGggPiAwKSByZW5kZXJPYmplY3RzKHRyYW5zcGFyZW50T2JqZWN0cywgc2NlbmUsIGNhbWVyYSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJUcmFuc21pc3Npb25QYXNzKG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEpIHtcblx0XHRpZiAoX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgbmVlZHNBbnRpYWxpYXMgPSBfYW50aWFsaWFzID09PSB0cnVlICYmIGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFR5cGUgPSBuZWVkc0FudGlhbGlhcyA/IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgOiBXZWJHTFJlbmRlclRhcmdldDtcblx0XHRcdF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPSBuZXcgcmVuZGVyVGFyZ2V0VHlwZSgxMDI0LCAxMDI0LCB7XG5cdFx0XHRcdGdlbmVyYXRlTWlwbWFwczogdHJ1ZSxcblx0XHRcdFx0dHlwZTogdXRpbHMuY29udmVydChIYWxmRmxvYXRUeXBlKSAhPT0gbnVsbCA/IEhhbGZGbG9hdFR5cGUgOiBVbnNpZ25lZEJ5dGVUeXBlLFxuXHRcdFx0XHRtaW5GaWx0ZXI6IExpbmVhck1pcG1hcExpbmVhckZpbHRlcixcblx0XHRcdFx0bWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxuXHRcdFx0XHR3cmFwUzogQ2xhbXBUb0VkZ2VXcmFwcGluZyxcblx0XHRcdFx0d3JhcFQ6IENsYW1wVG9FZGdlV3JhcHBpbmcsXG5cdFx0XHRcdHVzZVJlbmRlclRvVGV4dHVyZTogZXh0ZW5zaW9ucy5oYXMoJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScpXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gX3RoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRfdGhpcy5zZXRSZW5kZXJUYXJnZXQoX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCk7XG5cblx0XHRfdGhpcy5jbGVhcigpOyAvLyBUdXJuIG9mZiB0aGUgZmVhdHVyZXMgd2hpY2ggY2FuIGFmZmVjdCB0aGUgZnJhZyBjb2xvciBmb3Igb3BhcXVlIG9iamVjdHMgcGFzcy5cblx0XHQvLyBPdGhlcndpc2UgdGhleSBhcmUgYXBwbGllZCB0d2ljZSBpbiBvcGFxdWUgb2JqZWN0cyBwYXNzIGFuZCB0cmFuc21pc3Npb24gb2JqZWN0cyBwYXNzLlxuXG5cblx0XHRjb25zdCBjdXJyZW50VG9uZU1hcHBpbmcgPSBfdGhpcy50b25lTWFwcGluZztcblx0XHRfdGhpcy50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cdFx0cmVuZGVyT2JqZWN0cyhvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhKTtcblx0XHRfdGhpcy50b25lTWFwcGluZyA9IGN1cnJlbnRUb25lTWFwcGluZztcblx0XHR0ZXh0dXJlcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0KTtcblx0XHR0ZXh0dXJlcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCk7XG5cblx0XHRfdGhpcy5zZXRSZW5kZXJUYXJnZXQoY3VycmVudFJlbmRlclRhcmdldCk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJPYmplY3RzKHJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEpIHtcblx0XHRjb25zdCBvdmVycmlkZU1hdGVyaWFsID0gc2NlbmUuaXNTY2VuZSA9PT0gdHJ1ZSA/IHNjZW5lLm92ZXJyaWRlTWF0ZXJpYWwgOiBudWxsO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSByZW5kZXJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVuZGVySXRlbSA9IHJlbmRlckxpc3RbaV07XG5cdFx0XHRjb25zdCBvYmplY3QgPSByZW5kZXJJdGVtLm9iamVjdDtcblx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gcmVuZGVySXRlbS5nZW9tZXRyeTtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb3ZlcnJpZGVNYXRlcmlhbCA9PT0gbnVsbCA/IHJlbmRlckl0ZW0ubWF0ZXJpYWwgOiBvdmVycmlkZU1hdGVyaWFsO1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSByZW5kZXJJdGVtLmdyb3VwO1xuXG5cdFx0XHRpZiAob2JqZWN0LmxheWVycy50ZXN0KGNhbWVyYS5sYXllcnMpKSB7XG5cdFx0XHRcdHJlbmRlck9iamVjdChvYmplY3QsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlck9iamVjdChvYmplY3QsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXApIHtcblx0XHRvYmplY3Qub25CZWZvcmVSZW5kZXIoX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXApO1xuXHRcdG9iamVjdC5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLCBvYmplY3QubWF0cml4V29ybGQpO1xuXHRcdG9iamVjdC5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KG9iamVjdC5tb2RlbFZpZXdNYXRyaXgpO1xuXHRcdG1hdGVyaWFsLm9uQmVmb3JlUmVuZGVyKF90aGlzLCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwgb2JqZWN0LCBncm91cCk7XG5cblx0XHRpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUgJiYgbWF0ZXJpYWwuc2lkZSA9PT0gRG91YmxlU2lkZSkge1xuXHRcdFx0bWF0ZXJpYWwuc2lkZSA9IEJhY2tTaWRlO1xuXHRcdFx0bWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRfdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QoY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwKTtcblxuXHRcdFx0bWF0ZXJpYWwuc2lkZSA9IEZyb250U2lkZTtcblx0XHRcdG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0X3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0KGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0LCBncm91cCk7XG5cblx0XHRcdG1hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QoY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwKTtcblx0XHR9XG5cblx0XHRvYmplY3Qub25BZnRlclJlbmRlcihfdGhpcywgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRQcm9ncmFtKG1hdGVyaWFsLCBzY2VuZSwgb2JqZWN0KSB7XG5cdFx0aWYgKHNjZW5lLmlzU2NlbmUgIT09IHRydWUpIHNjZW5lID0gX2VtcHR5U2NlbmU7IC8vIHNjZW5lIGNvdWxkIGJlIGEgTWVzaCwgTGluZSwgUG9pbnRzLCAuLi5cblxuXHRcdGNvbnN0IG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KG1hdGVyaWFsKTtcblx0XHRjb25zdCBsaWdodHMgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUubGlnaHRzO1xuXHRcdGNvbnN0IHNoYWRvd3NBcnJheSA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5zaGFkb3dzQXJyYXk7XG5cdFx0Y29uc3QgbGlnaHRzU3RhdGVWZXJzaW9uID0gbGlnaHRzLnN0YXRlLnZlcnNpb247XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHByb2dyYW1DYWNoZS5nZXRQYXJhbWV0ZXJzKG1hdGVyaWFsLCBsaWdodHMuc3RhdGUsIHNoYWRvd3NBcnJheSwgc2NlbmUsIG9iamVjdCk7XG5cdFx0Y29uc3QgcHJvZ3JhbUNhY2hlS2V5ID0gcHJvZ3JhbUNhY2hlLmdldFByb2dyYW1DYWNoZUtleShwYXJhbWV0ZXJzKTtcblx0XHRsZXQgcHJvZ3JhbXMgPSBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbXM7IC8vIGFsd2F5cyB1cGRhdGUgZW52aXJvbm1lbnQgYW5kIGZvZyAtIGNoYW5naW5nIHRoZXNlIHRyaWdnZXIgYW4gZ2V0UHJvZ3JhbSBjYWxsLCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ncmFtIGRvZXNuJ3QgY2hhbmdlXG5cblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuZW52aXJvbm1lbnQgPSBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gc2NlbmUuZW52aXJvbm1lbnQgOiBudWxsO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5mb2cgPSBzY2VuZS5mb2c7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmVudk1hcCA9IChtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gY3ViZXV2bWFwcyA6IGN1YmVtYXBzKS5nZXQobWF0ZXJpYWwuZW52TWFwIHx8IG1hdGVyaWFsUHJvcGVydGllcy5lbnZpcm9ubWVudCk7XG5cblx0XHRpZiAocHJvZ3JhbXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbmV3IG1hdGVyaWFsXG5cdFx0XHRtYXRlcmlhbC5hZGRFdmVudExpc3RlbmVyKCdkaXNwb3NlJywgb25NYXRlcmlhbERpc3Bvc2UpO1xuXHRcdFx0cHJvZ3JhbXMgPSBuZXcgTWFwKCk7XG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbXMgPSBwcm9ncmFtcztcblx0XHR9XG5cblx0XHRsZXQgcHJvZ3JhbSA9IHByb2dyYW1zLmdldChwcm9ncmFtQ2FjaGVLZXkpO1xuXG5cdFx0aWYgKHByb2dyYW0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gZWFybHkgb3V0IGlmIHByb2dyYW0gYW5kIGxpZ2h0IHN0YXRlIGlzIGlkZW50aWNhbFxuXHRcdFx0aWYgKG1hdGVyaWFsUHJvcGVydGllcy5jdXJyZW50UHJvZ3JhbSA9PT0gcHJvZ3JhbSAmJiBtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzU3RhdGVWZXJzaW9uID09PSBsaWdodHNTdGF0ZVZlcnNpb24pIHtcblx0XHRcdFx0dXBkYXRlQ29tbW9uTWF0ZXJpYWxQcm9wZXJ0aWVzKG1hdGVyaWFsLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuIHByb2dyYW07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmFtZXRlcnMudW5pZm9ybXMgPSBwcm9ncmFtQ2FjaGUuZ2V0VW5pZm9ybXMobWF0ZXJpYWwpO1xuXHRcdFx0bWF0ZXJpYWwub25CdWlsZChvYmplY3QsIHBhcmFtZXRlcnMsIF90aGlzKTtcblx0XHRcdG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZShwYXJhbWV0ZXJzLCBfdGhpcyk7XG5cdFx0XHRwcm9ncmFtID0gcHJvZ3JhbUNhY2hlLmFjcXVpcmVQcm9ncmFtKHBhcmFtZXRlcnMsIHByb2dyYW1DYWNoZUtleSk7XG5cdFx0XHRwcm9ncmFtcy5zZXQocHJvZ3JhbUNhY2hlS2V5LCBwcm9ncmFtKTtcblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcyA9IHBhcmFtZXRlcnMudW5pZm9ybXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdW5pZm9ybXMgPSBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXM7XG5cblx0XHRpZiAoIW1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYgIW1hdGVyaWFsLmlzUmF3U2hhZGVyTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuY2xpcHBpbmcgPT09IHRydWUpIHtcblx0XHRcdHVuaWZvcm1zLmNsaXBwaW5nUGxhbmVzID0gY2xpcHBpbmcudW5pZm9ybTtcblx0XHR9XG5cblx0XHR1cGRhdGVDb21tb25NYXRlcmlhbFByb3BlcnRpZXMobWF0ZXJpYWwsIHBhcmFtZXRlcnMpOyAvLyBzdG9yZSB0aGUgbGlnaHQgc2V0dXAgaXQgd2FzIGNyZWF0ZWQgZm9yXG5cblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMgPSBtYXRlcmlhbE5lZWRzTGlnaHRzKG1hdGVyaWFsKTtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzU3RhdGVWZXJzaW9uID0gbGlnaHRzU3RhdGVWZXJzaW9uO1xuXG5cdFx0aWYgKG1hdGVyaWFsUHJvcGVydGllcy5uZWVkc0xpZ2h0cykge1xuXHRcdFx0Ly8gd2lyZSB1cCB0aGUgbWF0ZXJpYWwgdG8gdGhpcyByZW5kZXJlcidzIGxpZ2h0aW5nIHN0YXRlXG5cdFx0XHR1bmlmb3Jtcy5hbWJpZW50TGlnaHRDb2xvci52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5hbWJpZW50O1xuXHRcdFx0dW5pZm9ybXMubGlnaHRQcm9iZS52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wcm9iZTtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsO1xuXHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWUgPSBsaWdodHMuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5zcG90TGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3Q7XG5cdFx0XHR1bmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnNwb3RTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5yZWN0QXJlYUxpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5yZWN0QXJlYTtcblx0XHRcdHVuaWZvcm1zLmx0Y18xLnZhbHVlID0gbGlnaHRzLnN0YXRlLnJlY3RBcmVhTFRDMTtcblx0XHRcdHVuaWZvcm1zLmx0Y18yLnZhbHVlID0gbGlnaHRzLnN0YXRlLnJlY3RBcmVhTFRDMjtcblx0XHRcdHVuaWZvcm1zLnBvaW50TGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50O1xuXHRcdFx0dW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3MudmFsdWUgPSBsaWdodHMuc3RhdGUucG9pbnRTaGFkb3c7XG5cdFx0XHR1bmlmb3Jtcy5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmhlbWk7XG5cdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcDtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4O1xuXHRcdFx0dW5pZm9ybXMuc3BvdFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93TWFwO1xuXHRcdFx0dW5pZm9ybXMuc3BvdFNoYWRvd01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93TWF0cml4O1xuXHRcdFx0dW5pZm9ybXMucG9pbnRTaGFkb3dNYXAudmFsdWUgPSBsaWdodHMuc3RhdGUucG9pbnRTaGFkb3dNYXA7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludFNoYWRvd01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeDsgLy8gVE9ETyAoYWJlbG5hdGlvbik6IGFkZCBhcmVhIGxpZ2h0cyBzaGFkb3cgaW5mbyB0byB1bmlmb3Jtc1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb2dVbmlmb3JtcyA9IHByb2dyYW0uZ2V0VW5pZm9ybXMoKTtcblx0XHRjb25zdCB1bmlmb3Jtc0xpc3QgPSBXZWJHTFVuaWZvcm1zLnNlcVdpdGhWYWx1ZShwcm9nVW5pZm9ybXMuc2VxLCB1bmlmb3Jtcyk7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0ID0gdW5pZm9ybXNMaXN0O1xuXHRcdHJldHVybiBwcm9ncmFtO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlQ29tbW9uTWF0ZXJpYWxQcm9wZXJ0aWVzKG1hdGVyaWFsLCBwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQobWF0ZXJpYWwpO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5vdXRwdXRFbmNvZGluZyA9IHBhcmFtZXRlcnMub3V0cHV0RW5jb2Rpbmc7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmluc3RhbmNpbmcgPSBwYXJhbWV0ZXJzLmluc3RhbmNpbmc7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnNraW5uaW5nID0gcGFyYW1ldGVycy5za2lubmluZztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzID0gcGFyYW1ldGVycy5tb3JwaFRhcmdldHM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoTm9ybWFscyA9IHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaFRhcmdldHNDb3VudCA9IHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzQ291bnQ7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzID0gcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubnVtSW50ZXJzZWN0aW9uID0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9uO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy52ZXJ0ZXhBbHBoYXMgPSBwYXJhbWV0ZXJzLnZlcnRleEFscGhhcztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudmVydGV4VGFuZ2VudHMgPSBwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy50b25lTWFwcGluZyA9IHBhcmFtZXRlcnMudG9uZU1hcHBpbmc7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRQcm9ncmFtKGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0KSB7XG5cdFx0aWYgKHNjZW5lLmlzU2NlbmUgIT09IHRydWUpIHNjZW5lID0gX2VtcHR5U2NlbmU7IC8vIHNjZW5lIGNvdWxkIGJlIGEgTWVzaCwgTGluZSwgUG9pbnRzLCAuLi5cblxuXHRcdHRleHR1cmVzLnJlc2V0VGV4dHVyZVVuaXRzKCk7XG5cdFx0Y29uc3QgZm9nID0gc2NlbmUuZm9nO1xuXHRcdGNvbnN0IGVudmlyb25tZW50ID0gbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IHNjZW5lLmVudmlyb25tZW50IDogbnVsbDtcblx0XHRjb25zdCBlbmNvZGluZyA9IF9jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSBudWxsID8gX3RoaXMub3V0cHV0RW5jb2RpbmcgOiBfY3VycmVudFJlbmRlclRhcmdldC5pc1hSUmVuZGVyVGFyZ2V0ID09PSB0cnVlID8gX2N1cnJlbnRSZW5kZXJUYXJnZXQudGV4dHVyZS5lbmNvZGluZyA6IExpbmVhckVuY29kaW5nO1xuXHRcdGNvbnN0IGVudk1hcCA9IChtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gY3ViZXV2bWFwcyA6IGN1YmVtYXBzKS5nZXQobWF0ZXJpYWwuZW52TWFwIHx8IGVudmlyb25tZW50KTtcblx0XHRjb25zdCB2ZXJ0ZXhBbHBoYXMgPSBtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IHRydWUgJiYgISFnZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yICYmIGdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUgPT09IDQ7XG5cdFx0Y29uc3QgdmVydGV4VGFuZ2VudHMgPSAhIW1hdGVyaWFsLm5vcm1hbE1hcCAmJiAhIWdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudDtcblx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSAhIWdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaE5vcm1hbHMgPSAhIWdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWw7XG5cdFx0Y29uc3QgbW9ycGhUYXJnZXRzQ291bnQgPSAhIWdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiA/IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGggOiAwO1xuXHRcdGNvbnN0IHRvbmVNYXBwaW5nID0gbWF0ZXJpYWwudG9uZU1hcHBlZCA/IF90aGlzLnRvbmVNYXBwaW5nIDogTm9Ub25lTWFwcGluZztcblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChtYXRlcmlhbCk7XG5cdFx0Y29uc3QgbGlnaHRzID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLmxpZ2h0cztcblxuXHRcdGlmIChfY2xpcHBpbmdFbmFibGVkID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoX2xvY2FsQ2xpcHBpbmdFbmFibGVkID09PSB0cnVlIHx8IGNhbWVyYSAhPT0gX2N1cnJlbnRDYW1lcmEpIHtcblx0XHRcdFx0Y29uc3QgdXNlQ2FjaGUgPSBjYW1lcmEgPT09IF9jdXJyZW50Q2FtZXJhICYmIG1hdGVyaWFsLmlkID09PSBfY3VycmVudE1hdGVyaWFsSWQ7IC8vIHdlIG1pZ2h0IHdhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggc29tZSBDbGlwcGluZ0dyb3VwXG5cdFx0XHRcdC8vIG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBtYXRlcmlhbCwgb25jZSBpdCBiZWNvbWVzIGZlYXNpYmxlXG5cdFx0XHRcdC8vICgjODQ2NSwgIzgzNzkpXG5cblx0XHRcdFx0Y2xpcHBpbmcuc2V0U3RhdGUobWF0ZXJpYWwsIGNhbWVyYSwgdXNlQ2FjaGUpO1xuXHRcdFx0fVxuXHRcdH0gLy9cblxuXG5cdFx0bGV0IG5lZWRzUHJvZ3JhbUNoYW5nZSA9IGZhbHNlO1xuXG5cdFx0aWYgKG1hdGVyaWFsLnZlcnNpb24gPT09IG1hdGVyaWFsUHJvcGVydGllcy5fX3ZlcnNpb24pIHtcblx0XHRcdGlmIChtYXRlcmlhbFByb3BlcnRpZXMubmVlZHNMaWdodHMgJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c1N0YXRlVmVyc2lvbiAhPT0gbGlnaHRzLnN0YXRlLnZlcnNpb24pIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm91dHB1dEVuY29kaW5nICE9PSBlbmNvZGluZykge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvYmplY3QuaXNJbnN0YW5jZWRNZXNoICYmIG1hdGVyaWFsUHJvcGVydGllcy5pbnN0YW5jaW5nID09PSBmYWxzZSkge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmICghb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuaW5zdGFuY2luZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvYmplY3QuaXNTa2lubmVkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuc2tpbm5pbmcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKCFvYmplY3QuaXNTa2lubmVkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuc2tpbm5pbmcgPT09IHRydWUpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLmVudk1hcCAhPT0gZW52TWFwKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsLmZvZyAmJiBtYXRlcmlhbFByb3BlcnRpZXMuZm9nICE9PSBmb2cpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzICE9PSB1bmRlZmluZWQgJiYgKG1hdGVyaWFsUHJvcGVydGllcy5udW1DbGlwcGluZ1BsYW5lcyAhPT0gY2xpcHBpbmcubnVtUGxhbmVzIHx8IG1hdGVyaWFsUHJvcGVydGllcy5udW1JbnRlcnNlY3Rpb24gIT09IGNsaXBwaW5nLm51bUludGVyc2VjdGlvbikpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleEFscGhhcyAhPT0gdmVydGV4QWxwaGFzKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsUHJvcGVydGllcy52ZXJ0ZXhUYW5nZW50cyAhPT0gdmVydGV4VGFuZ2VudHMpIHtcblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoVGFyZ2V0cyAhPT0gbW9ycGhUYXJnZXRzKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaE5vcm1hbHMgIT09IG1vcnBoTm9ybWFscykge1xuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXRlcmlhbFByb3BlcnRpZXMudG9uZU1hcHBpbmcgIT09IHRvbmVNYXBwaW5nKSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZSAmJiBtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzQ291bnQgIT09IG1vcnBoVGFyZ2V0c0NvdW50KSB7XG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMuX192ZXJzaW9uID0gbWF0ZXJpYWwudmVyc2lvbjtcblx0XHR9IC8vXG5cblxuXHRcdGxldCBwcm9ncmFtID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtO1xuXG5cdFx0aWYgKG5lZWRzUHJvZ3JhbUNoYW5nZSA9PT0gdHJ1ZSkge1xuXHRcdFx0cHJvZ3JhbSA9IGdldFByb2dyYW0obWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QpO1xuXHRcdH1cblxuXHRcdGxldCByZWZyZXNoUHJvZ3JhbSA9IGZhbHNlO1xuXHRcdGxldCByZWZyZXNoTWF0ZXJpYWwgPSBmYWxzZTtcblx0XHRsZXQgcmVmcmVzaExpZ2h0cyA9IGZhbHNlO1xuXHRcdGNvbnN0IHBfdW5pZm9ybXMgPSBwcm9ncmFtLmdldFVuaWZvcm1zKCksXG5cdFx0XHRcdFx0bV91bmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcztcblxuXHRcdGlmIChzdGF0ZS51c2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbSkpIHtcblx0XHRcdHJlZnJlc2hQcm9ncmFtID0gdHJ1ZTtcblx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7XG5cdFx0XHRyZWZyZXNoTGlnaHRzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuaWQgIT09IF9jdXJyZW50TWF0ZXJpYWxJZCkge1xuXHRcdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gbWF0ZXJpYWwuaWQ7XG5cdFx0XHRyZWZyZXNoTWF0ZXJpYWwgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChyZWZyZXNoUHJvZ3JhbSB8fCBfY3VycmVudENhbWVyYSAhPT0gY2FtZXJhKSB7XG5cdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ3Byb2plY3Rpb25NYXRyaXgnLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cblx0XHRcdGlmIChjYXBhYmlsaXRpZXMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikge1xuXHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ2xvZ0RlcHRoQnVmRkMnLCAyLjAgLyAoTWF0aC5sb2coY2FtZXJhLmZhciArIDEuMCkgLyBNYXRoLkxOMikpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoX2N1cnJlbnRDYW1lcmEgIT09IGNhbWVyYSkge1xuXHRcdFx0XHRfY3VycmVudENhbWVyYSA9IGNhbWVyYTsgLy8gbGlnaHRpbmcgdW5pZm9ybXMgZGVwZW5kIG9uIHRoZSBjYW1lcmEgc28gZW5mb3JjZSBhbiB1cGRhdGVcblx0XHRcdFx0Ly8gbm93LCBpbiBjYXNlIHRoaXMgbWF0ZXJpYWwgc3VwcG9ydHMgbGlnaHRzIC0gb3IgbGF0ZXIsIHdoZW5cblx0XHRcdFx0Ly8gdGhlIG5leHQgbWF0ZXJpYWwgdGhhdCBkb2VzIGdldHMgYWN0aXZhdGVkOlxuXG5cdFx0XHRcdHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7IC8vIHNldCB0byB0cnVlIG9uIG1hdGVyaWFsIGNoYW5nZVxuXG5cdFx0XHRcdHJlZnJlc2hMaWdodHMgPSB0cnVlOyAvLyByZW1haW5zIHNldCB1bnRpbCB1cGRhdGUgZG9uZVxuXHRcdFx0fSAvLyBsb2FkIG1hdGVyaWFsIHNwZWNpZmljIHVuaWZvcm1zXG5cdFx0XHQvLyAoc2hhZGVyIG1hdGVyaWFsIGFsc28gZ2V0cyB0aGVtIGZvciB0aGUgc2FrZSBvZiBnZW5lcmljaXR5KVxuXG5cblx0XHRcdGlmIChtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuZW52TWFwKSB7XG5cdFx0XHRcdGNvbnN0IHVDYW1Qb3MgPSBwX3VuaWZvcm1zLm1hcC5jYW1lcmFQb3NpdGlvbjtcblxuXHRcdFx0XHRpZiAodUNhbVBvcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dUNhbVBvcy5zZXRWYWx1ZShfZ2wsIF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsKSB7XG5cdFx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAnaXNPcnRob2dyYXBoaWMnLCBjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEgPT09IHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzU2hhZG93TWF0ZXJpYWwgfHwgb2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcblx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICd2aWV3TWF0cml4JywgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0XHR9XG5cdFx0fSAvLyBza2lubmluZyBhbmQgbW9ycGggdGFyZ2V0IHVuaWZvcm1zIG11c3QgYmUgc2V0IGV2ZW4gaWYgbWF0ZXJpYWwgZGlkbid0IGNoYW5nZVxuXHRcdC8vIGF1dG8tc2V0dGluZyBvZiB0ZXh0dXJlIHVuaXQgZm9yIGJvbmUgYW5kIG1vcnBoIHRleHR1cmUgbXVzdCBnbyBiZWZvcmUgb3RoZXIgdGV4dHVyZXNcblx0XHQvLyBvdGhlcndpc2UgdGV4dHVyZXMgdXNlZCBmb3Igc2tpbm5pbmcgYW5kIG1vcnBoaW5nIGNhbiB0YWtlIG92ZXIgdGV4dHVyZSB1bml0cyByZXNlcnZlZCBmb3Igb3RoZXIgbWF0ZXJpYWwgdGV4dHVyZXNcblxuXG5cdFx0aWYgKG9iamVjdC5pc1NraW5uZWRNZXNoKSB7XG5cdFx0XHRwX3VuaWZvcm1zLnNldE9wdGlvbmFsKF9nbCwgb2JqZWN0LCAnYmluZE1hdHJpeCcpO1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRPcHRpb25hbChfZ2wsIG9iamVjdCwgJ2JpbmRNYXRyaXhJbnZlcnNlJyk7XG5cdFx0XHRjb25zdCBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcblxuXHRcdFx0aWYgKHNrZWxldG9uKSB7XG5cdFx0XHRcdGlmIChjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0ZXhUZXh0dXJlcykge1xuXHRcdFx0XHRcdGlmIChza2VsZXRvbi5ib25lVGV4dHVyZSA9PT0gbnVsbCkgc2tlbGV0b24uY29tcHV0ZUJvbmVUZXh0dXJlKCk7XG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdib25lVGV4dHVyZScsIHNrZWxldG9uLmJvbmVUZXh0dXJlLCB0ZXh0dXJlcyk7XG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdib25lVGV4dHVyZVNpemUnLCBza2VsZXRvbi5ib25lVGV4dHVyZVNpemUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBfdW5pZm9ybXMuc2V0T3B0aW9uYWwoX2dsLCBza2VsZXRvbiwgJ2JvbmVNYXRyaWNlcycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCEhZ2VvbWV0cnkgJiYgKGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkIHx8IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwgIT09IHVuZGVmaW5lZCkpIHtcblx0XHRcdG1vcnBodGFyZ2V0cy51cGRhdGUob2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0pO1xuXHRcdH1cblxuXHRcdGlmIChyZWZyZXNoTWF0ZXJpYWwgfHwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnJlY2VpdmVTaGFkb3cgIT09IG9iamVjdC5yZWNlaXZlU2hhZG93KSB7XG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMucmVjZWl2ZVNoYWRvdyA9IG9iamVjdC5yZWNlaXZlU2hhZG93O1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdyZWNlaXZlU2hhZG93Jywgb2JqZWN0LnJlY2VpdmVTaGFkb3cpO1xuXHRcdH1cblxuXHRcdGlmIChyZWZyZXNoTWF0ZXJpYWwpIHtcblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAndG9uZU1hcHBpbmdFeHBvc3VyZScsIF90aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmUpO1xuXG5cdFx0XHRpZiAobWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzKSB7XG5cdFx0XHRcdC8vIHRoZSBjdXJyZW50IG1hdGVyaWFsIHJlcXVpcmVzIGxpZ2h0aW5nIGluZm9cblx0XHRcdFx0Ly8gbm90ZTogYWxsIGxpZ2h0aW5nIHVuaWZvcm1zIGFyZSBhbHdheXMgc2V0IGNvcnJlY3RseVxuXHRcdFx0XHQvLyB0aGV5IHNpbXBseSByZWZlcmVuY2UgdGhlIHJlbmRlcmVyJ3Mgc3RhdGUgZm9yIHRoZWlyXG5cdFx0XHRcdC8vIHZhbHVlc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyB1c2UgdGhlIGN1cnJlbnQgbWF0ZXJpYWwncyAubmVlZHNVcGRhdGUgZmxhZ3MgdG8gc2V0XG5cdFx0XHRcdC8vIHRoZSBHTCBzdGF0ZSB3aGVuIHJlcXVpcmVkXG5cdFx0XHRcdG1hcmtVbmlmb3Jtc0xpZ2h0c05lZWRzVXBkYXRlKG1fdW5pZm9ybXMsIHJlZnJlc2hMaWdodHMpO1xuXHRcdFx0fSAvLyByZWZyZXNoIHVuaWZvcm1zIGNvbW1vbiB0byBzZXZlcmFsIG1hdGVyaWFsc1xuXG5cblx0XHRcdGlmIChmb2cgJiYgbWF0ZXJpYWwuZm9nKSB7XG5cdFx0XHRcdG1hdGVyaWFscy5yZWZyZXNoRm9nVW5pZm9ybXMobV91bmlmb3JtcywgZm9nKTtcblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWxzLnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG1fdW5pZm9ybXMsIG1hdGVyaWFsLCBfcGl4ZWxSYXRpbywgX2hlaWdodCwgX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCk7XG5cdFx0XHRXZWJHTFVuaWZvcm1zLnVwbG9hZChfZ2wsIG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3Jtc0xpc3QsIG1fdW5pZm9ybXMsIHRleHR1cmVzKTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCAmJiBtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdFdlYkdMVW5pZm9ybXMudXBsb2FkKF9nbCwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCwgbV91bmlmb3JtcywgdGV4dHVyZXMpO1xuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKG1hdGVyaWFsLmlzU3ByaXRlTWF0ZXJpYWwpIHtcblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAnY2VudGVyJywgb2JqZWN0LmNlbnRlcik7XG5cdFx0fSAvLyBjb21tb24gbWF0cmljZXNcblxuXG5cdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZShfZ2wsICdtb2RlbFZpZXdNYXRyaXgnLCBvYmplY3QubW9kZWxWaWV3TWF0cml4KTtcblx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKF9nbCwgJ25vcm1hbE1hdHJpeCcsIG9iamVjdC5ub3JtYWxNYXRyaXgpO1xuXHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoX2dsLCAnbW9kZWxNYXRyaXgnLCBvYmplY3QubWF0cml4V29ybGQpO1xuXHRcdHJldHVybiBwcm9ncmFtO1xuXHR9IC8vIElmIHVuaWZvcm1zIGFyZSBtYXJrZWQgYXMgY2xlYW4sIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBsb2FkZWQgdG8gdGhlIEdQVS5cblxuXG5cdGZ1bmN0aW9uIG1hcmtVbmlmb3Jtc0xpZ2h0c05lZWRzVXBkYXRlKHVuaWZvcm1zLCB2YWx1ZSkge1xuXHRcdHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hdGVyaWFsTmVlZHNMaWdodHMobWF0ZXJpYWwpIHtcblx0XHRyZXR1cm4gbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFRvb25NYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmIG1hdGVyaWFsLmxpZ2h0cyA9PT0gdHJ1ZTtcblx0fVxuXG5cdHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIF9jdXJyZW50QWN0aXZlQ3ViZUZhY2U7XG5cdH07XG5cblx0dGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gX2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbDtcblx0fTtcblxuXHR0aGlzLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gX2N1cnJlbnRSZW5kZXJUYXJnZXQ7XG5cdH07XG5cblx0dGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQsIGNvbG9yVGV4dHVyZSwgZGVwdGhUZXh0dXJlKSB7XG5cdFx0cHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlID0gY29sb3JUZXh0dXJlO1xuXHRcdHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlID0gZGVwdGhUZXh0dXJlO1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzID0gdHJ1ZTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9faGFzRXh0ZXJuYWxUZXh0dXJlcykge1xuXHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyID0gZGVwdGhUZXh0dXJlID09PSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICghcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKSB7XG5cdFx0XHRcdC8vIFRoZSBtdWx0aXNhbXBsZV9yZW5kZXJfdG9fdGV4dHVyZSBleHRlbnNpb24gZG9lc24ndCB3b3JrIHByb3Blcmx5IGlmIHRoZXJlXG5cdFx0XHRcdC8vIGFyZSBtaWRmcmFtZSBmbHVzaGVzIGFuZCBhbiBleHRlcm5hbCBkZXB0aCBidWZmZXIuIERpc2FibGUgdXNlIG9mIHRoZSBleHRlbnNpb24uXG5cdFx0XHRcdGlmIChyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQnKTtcblx0XHRcdFx0XHRyZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQsIGRlZmF1bHRGcmFtZWJ1ZmZlcikge1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gZGVmYXVsdEZyYW1lYnVmZmVyO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX191c2VEZWZhdWx0RnJhbWVidWZmZXIgPSBkZWZhdWx0RnJhbWVidWZmZXIgPT09IHVuZGVmaW5lZDtcblx0fTtcblxuXHR0aGlzLnNldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlID0gMCwgYWN0aXZlTWlwbWFwTGV2ZWwgPSAwKSB7XG5cdFx0X2N1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cdFx0X2N1cnJlbnRBY3RpdmVDdWJlRmFjZSA9IGFjdGl2ZUN1YmVGYWNlO1xuXHRcdF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWwgPSBhY3RpdmVNaXBtYXBMZXZlbDtcblx0XHRsZXQgdXNlRGVmYXVsdEZyYW1lYnVmZmVyID0gdHJ1ZTtcblxuXHRcdGlmIChyZW5kZXJUYXJnZXQpIHtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpO1xuXG5cdFx0XHRpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlYmluZCB0aGUgZnJhbWVidWZmZXIuXG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXHRcdFx0XHR1c2VEZWZhdWx0RnJhbWVidWZmZXIgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAocmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlcy5zZXR1cFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9faGFzRXh0ZXJuYWxUZXh0dXJlcykge1xuXHRcdFx0XHQvLyBDb2xvciBhbmQgZGVwdGggdGV4dHVyZSBtdXN0IGJlIHJlYm91bmQgaW4gb3JkZXIgZm9yIHRoZSBzd2FwY2hhaW4gdG8gdXBkYXRlLlxuXHRcdFx0XHR0ZXh0dXJlcy5yZWJpbmRUZXh0dXJlcyhyZW5kZXJUYXJnZXQsIHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSwgcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBmcmFtZWJ1ZmZlciA9IG51bGw7XG5cdFx0bGV0IGlzQ3ViZSA9IGZhbHNlO1xuXHRcdGxldCBpc1JlbmRlclRhcmdldDNEID0gZmFsc2U7XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdGlmICh0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRCB8fCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5KSB7XG5cdFx0XHRcdGlzUmVuZGVyVGFyZ2V0M0QgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBfX3dlYmdsRnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtcblxuXHRcdFx0aWYgKHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCkge1xuXHRcdFx0XHRmcmFtZWJ1ZmZlciA9IF9fd2ViZ2xGcmFtZWJ1ZmZlclthY3RpdmVDdWJlRmFjZV07XG5cdFx0XHRcdGlzQ3ViZSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIpIHtcblx0XHRcdFx0ZnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZyYW1lYnVmZmVyID0gX193ZWJnbEZyYW1lYnVmZmVyO1xuXHRcdFx0fVxuXG5cdFx0XHRfY3VycmVudFZpZXdwb3J0LmNvcHkocmVuZGVyVGFyZ2V0LnZpZXdwb3J0KTtcblxuXHRcdFx0X2N1cnJlbnRTY2lzc29yLmNvcHkocmVuZGVyVGFyZ2V0LnNjaXNzb3IpO1xuXG5cdFx0XHRfY3VycmVudFNjaXNzb3JUZXN0ID0gcmVuZGVyVGFyZ2V0LnNjaXNzb3JUZXN0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfY3VycmVudFZpZXdwb3J0LmNvcHkoX3ZpZXdwb3J0KS5tdWx0aXBseVNjYWxhcihfcGl4ZWxSYXRpbykuZmxvb3IoKTtcblxuXHRcdFx0X2N1cnJlbnRTY2lzc29yLmNvcHkoX3NjaXNzb3IpLm11bHRpcGx5U2NhbGFyKF9waXhlbFJhdGlvKS5mbG9vcigpO1xuXG5cdFx0XHRfY3VycmVudFNjaXNzb3JUZXN0ID0gX3NjaXNzb3JUZXN0O1xuXHRcdH1cblxuXHRcdGNvbnN0IGZyYW1lYnVmZmVyQm91bmQgPSBzdGF0ZS5iaW5kRnJhbWVidWZmZXIoX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7XG5cblx0XHRpZiAoZnJhbWVidWZmZXJCb3VuZCAmJiBjYXBhYmlsaXRpZXMuZHJhd0J1ZmZlcnMgJiYgdXNlRGVmYXVsdEZyYW1lYnVmZmVyKSB7XG5cdFx0XHRzdGF0ZS5kcmF3QnVmZmVycyhyZW5kZXJUYXJnZXQsIGZyYW1lYnVmZmVyKTtcblx0XHR9XG5cblx0XHRzdGF0ZS52aWV3cG9ydChfY3VycmVudFZpZXdwb3J0KTtcblx0XHRzdGF0ZS5zY2lzc29yKF9jdXJyZW50U2Npc3Nvcik7XG5cdFx0c3RhdGUuc2V0U2Npc3NvclRlc3QoX2N1cnJlbnRTY2lzc29yVGVzdCk7XG5cblx0XHRpZiAoaXNDdWJlKSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC50ZXh0dXJlKTtcblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgYWN0aXZlQ3ViZUZhY2UsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlLCBhY3RpdmVNaXBtYXBMZXZlbCk7XG5cdFx0fSBlbHNlIGlmIChpc1JlbmRlclRhcmdldDNEKSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KHJlbmRlclRhcmdldC50ZXh0dXJlKTtcblx0XHRcdGNvbnN0IGxheWVyID0gYWN0aXZlQ3ViZUZhY2UgfHwgMDtcblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKF9nbC5GUkFNRUJVRkZFUiwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSwgYWN0aXZlTWlwbWFwTGV2ZWwgfHwgMCwgbGF5ZXIpO1xuXHRcdH1cblxuXHRcdF9jdXJyZW50TWF0ZXJpYWxJZCA9IC0xOyAvLyByZXNldCBjdXJyZW50IG1hdGVyaWFsIHRvIGVuc3VyZSBjb3JyZWN0IHVuaWZvcm0gYmluZGluZ3Ncblx0fTtcblxuXHR0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHMgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBidWZmZXIsIGFjdGl2ZUN1YmVGYWNlSW5kZXgpIHtcblx0XHRpZiAoIShyZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXQpKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGZyYW1lYnVmZmVyID0gcHJvcGVydGllcy5nZXQocmVuZGVyVGFyZ2V0KS5fX3dlYmdsRnJhbWVidWZmZXI7XG5cblx0XHRpZiAocmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICYmIGFjdGl2ZUN1YmVGYWNlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlclthY3RpdmVDdWJlRmFjZUluZGV4XTtcblx0XHR9XG5cblx0XHRpZiAoZnJhbWVidWZmZXIpIHtcblx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXHRcdFx0XHRjb25zdCB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS5mb3JtYXQ7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmVUeXBlID0gdGV4dHVyZS50eXBlO1xuXG5cdFx0XHRcdGlmICh0ZXh0dXJlRm9ybWF0ICE9PSBSR0JBRm9ybWF0ICYmIHV0aWxzLmNvbnZlcnQodGV4dHVyZUZvcm1hdCkgIT09IF9nbC5nZXRQYXJhbWV0ZXIoX2dsLklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LicpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGhhbGZGbG9hdFN1cHBvcnRlZEJ5RXh0ID0gdGV4dHVyZVR5cGUgPT09IEhhbGZGbG9hdFR5cGUgJiYgKGV4dGVuc2lvbnMuaGFzKCdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnKSB8fCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgJiYgZXh0ZW5zaW9ucy5oYXMoJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnKSk7XG5cblx0XHRcdFx0aWYgKHRleHR1cmVUeXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlICYmIHV0aWxzLmNvbnZlcnQodGV4dHVyZVR5cGUpICE9PSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUpICYmIC8vIEVkZ2UgYW5kIENocm9tZSBNYWMgPCA1MiAoIzk1MTMpXG5cdFx0XHRcdCEodGV4dHVyZVR5cGUgPT09IEZsb2F0VHlwZSAmJiAoY2FwYWJpbGl0aWVzLmlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9mbG9hdCcpIHx8IGV4dGVuc2lvbnMuaGFzKCdXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQnKSkpICYmIC8vIENocm9tZSBNYWMgPj0gNTIgYW5kIEZpcmVmb3hcblx0XHRcdFx0IWhhbGZGbG9hdFN1cHBvcnRlZEJ5RXh0KSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLicpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhfZ2wuRlJBTUVCVUZGRVIpID09PSBfZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpIHtcblx0XHRcdFx0XHQvLyB0aGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudCBlbnN1cmVzIHZhbGlkIHJlYWQgcmVxdWVzdHMgKG5vIG91dC1vZi1ib3VuZHMgcGl4ZWxzLCBzZWUgIzg2MDQpXG5cdFx0XHRcdFx0aWYgKHggPj0gMCAmJiB4IDw9IHJlbmRlclRhcmdldC53aWR0aCAtIHdpZHRoICYmIHkgPj0gMCAmJiB5IDw9IHJlbmRlclRhcmdldC5oZWlnaHQgLSBoZWlnaHQpIHtcblx0XHRcdFx0XHRcdF9nbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIHV0aWxzLmNvbnZlcnQodGV4dHVyZUZvcm1hdCksIHV0aWxzLmNvbnZlcnQodGV4dHVyZVR5cGUpLCBidWZmZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIHJlc3RvcmUgZnJhbWVidWZmZXIgb2YgY3VycmVudCByZW5kZXIgdGFyZ2V0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRjb25zdCBmcmFtZWJ1ZmZlciA9IF9jdXJyZW50UmVuZGVyVGFyZ2V0ICE9PSBudWxsID8gcHJvcGVydGllcy5nZXQoX2N1cnJlbnRSZW5kZXJUYXJnZXQpLl9fd2ViZ2xGcmFtZWJ1ZmZlciA6IG51bGw7XG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlcihfZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmUgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRleHR1cmUsIGxldmVsID0gMCkge1xuXHRcdGlmICh0ZXh0dXJlLmlzRnJhbWVidWZmZXJUZXh0dXJlICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxldmVsU2NhbGUgPSBNYXRoLnBvdygyLCAtbGV2ZWwpO1xuXHRcdGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcih0ZXh0dXJlLmltYWdlLndpZHRoICogbGV2ZWxTY2FsZSk7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcih0ZXh0dXJlLmltYWdlLmhlaWdodCAqIGxldmVsU2NhbGUpO1xuXHRcdHRleHR1cmVzLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcblxuXHRcdF9nbC5jb3B5VGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIDAsIDAsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQpO1xuXG5cdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHR9O1xuXG5cdHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUgPSBmdW5jdGlvbiAocG9zaXRpb24sIHNyY1RleHR1cmUsIGRzdFRleHR1cmUsIGxldmVsID0gMCkge1xuXHRcdGNvbnN0IHdpZHRoID0gc3JjVGV4dHVyZS5pbWFnZS53aWR0aDtcblx0XHRjb25zdCBoZWlnaHQgPSBzcmNUZXh0dXJlLmltYWdlLmhlaWdodDtcblx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoZHN0VGV4dHVyZS5mb3JtYXQpO1xuXHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoZHN0VGV4dHVyZS50eXBlKTtcblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoZHN0VGV4dHVyZSwgMCk7IC8vIEFzIGFub3RoZXIgdGV4dHVyZSB1cGxvYWQgbWF5IGhhdmUgY2hhbmdlZCBwaXhlbFN0b3JlaVxuXHRcdC8vIHBhcmFtZXRlcnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGZvciB0aGUgZHN0VGV4dHVyZVxuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCBkc3RUZXh0dXJlLmZsaXBZKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBkc3RUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQUxJR05NRU5ULCBkc3RUZXh0dXJlLnVucGFja0FsaWdubWVudCk7XG5cblx0XHRpZiAoc3JjVGV4dHVyZS5pc0RhdGFUZXh0dXJlKSB7XG5cdFx0XHRfZ2wudGV4U3ViSW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHNyY1RleHR1cmUuaW1hZ2UuZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChzcmNUZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUpIHtcblx0XHRcdFx0X2dsLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgc3JjVGV4dHVyZS5taXBtYXBzWzBdLndpZHRoLCBzcmNUZXh0dXJlLm1pcG1hcHNbMF0uaGVpZ2h0LCBnbEZvcm1hdCwgc3JjVGV4dHVyZS5taXBtYXBzWzBdLmRhdGEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2dsLnRleFN1YkltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBnbEZvcm1hdCwgZ2xUeXBlLCBzcmNUZXh0dXJlLmltYWdlKTtcblx0XHRcdH1cblx0XHR9IC8vIEdlbmVyYXRlIG1pcG1hcHMgb25seSB3aGVuIGNvcHlpbmcgbGV2ZWwgMFxuXG5cblx0XHRpZiAobGV2ZWwgPT09IDAgJiYgZHN0VGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMpIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XG5cdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXHR9O1xuXG5cdHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRCA9IGZ1bmN0aW9uIChzb3VyY2VCb3gsIHBvc2l0aW9uLCBzcmNUZXh0dXJlLCBkc3RUZXh0dXJlLCBsZXZlbCA9IDApIHtcblx0XHRpZiAoX3RoaXMuaXNXZWJHTDFSZW5kZXJlcikge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgd2lkdGggPSBzb3VyY2VCb3gubWF4LnggLSBzb3VyY2VCb3gubWluLnggKyAxO1xuXHRcdGNvbnN0IGhlaWdodCA9IHNvdXJjZUJveC5tYXgueSAtIHNvdXJjZUJveC5taW4ueSArIDE7XG5cdFx0Y29uc3QgZGVwdGggPSBzb3VyY2VCb3gubWF4LnogLSBzb3VyY2VCb3gubWluLnogKyAxO1xuXHRcdGNvbnN0IGdsRm9ybWF0ID0gdXRpbHMuY29udmVydChkc3RUZXh0dXJlLmZvcm1hdCk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydChkc3RUZXh0dXJlLnR5cGUpO1xuXHRcdGxldCBnbFRhcmdldDtcblxuXHRcdGlmIChkc3RUZXh0dXJlLmlzRGF0YVRleHR1cmUzRCkge1xuXHRcdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKGRzdFRleHR1cmUsIDApO1xuXHRcdFx0Z2xUYXJnZXQgPSBfZ2wuVEVYVFVSRV8zRDtcblx0XHR9IGVsc2UgaWYgKGRzdFRleHR1cmUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpIHtcblx0XHRcdHRleHR1cmVzLnNldFRleHR1cmUyREFycmF5KGRzdFRleHR1cmUsIDApO1xuXHRcdFx0Z2xUYXJnZXQgPSBfZ2wuVEVYVFVSRV8yRF9BUlJBWTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgZHN0VGV4dHVyZS5mbGlwWSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZHN0VGV4dHVyZS5wcmVtdWx0aXBseUFscGhhKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgZHN0VGV4dHVyZS51bnBhY2tBbGlnbm1lbnQpO1xuXG5cdFx0Y29uc3QgdW5wYWNrUm93TGVuID0gX2dsLmdldFBhcmFtZXRlcihfZ2wuVU5QQUNLX1JPV19MRU5HVEgpO1xuXG5cdFx0Y29uc3QgdW5wYWNrSW1hZ2VIZWlnaHQgPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5VTlBBQ0tfSU1BR0VfSEVJR0hUKTtcblxuXHRcdGNvbnN0IHVucGFja1NraXBQaXhlbHMgPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5VTlBBQ0tfU0tJUF9QSVhFTFMpO1xuXG5cdFx0Y29uc3QgdW5wYWNrU2tpcFJvd3MgPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5VTlBBQ0tfU0tJUF9ST1dTKTtcblxuXHRcdGNvbnN0IHVucGFja1NraXBJbWFnZXMgPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbC5VTlBBQ0tfU0tJUF9JTUFHRVMpO1xuXG5cdFx0Y29uc3QgaW1hZ2UgPSBzcmNUZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgPyBzcmNUZXh0dXJlLm1pcG1hcHNbMF0gOiBzcmNUZXh0dXJlLmltYWdlO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfUk9XX0xFTkdUSCwgaW1hZ2Uud2lkdGgpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfSU1BR0VfSEVJR0hULCBpbWFnZS5oZWlnaHQpO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZUJveC5taW4ueCk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19TS0lQX1JPV1MsIHNvdXJjZUJveC5taW4ueSk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19TS0lQX0lNQUdFUywgc291cmNlQm94Lm1pbi56KTtcblxuXHRcdGlmIChzcmNUZXh0dXJlLmlzRGF0YVRleHR1cmUgfHwgc3JjVGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QpIHtcblx0XHRcdF9nbC50ZXhTdWJJbWFnZTNEKGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoc3JjVGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuJyk7XG5cblx0XHRcdFx0X2dsLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBpbWFnZS5kYXRhKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9nbC50ZXhTdWJJbWFnZTNEKGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19ST1dfTEVOR1RILCB1bnBhY2tSb3dMZW4pO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfSU1BR0VfSEVJR0hULCB1bnBhY2tJbWFnZUhlaWdodCk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19TS0lQX1BJWEVMUywgdW5wYWNrU2tpcFBpeGVscyk7XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19TS0lQX1JPV1MsIHVucGFja1NraXBSb3dzKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1NLSVBfSU1BR0VTLCB1bnBhY2tTa2lwSW1hZ2VzKTsgLy8gR2VuZXJhdGUgbWlwbWFwcyBvbmx5IHdoZW4gY29weWluZyBsZXZlbCAwXG5cblxuXHRcdGlmIChsZXZlbCA9PT0gMCAmJiBkc3RUZXh0dXJlLmdlbmVyYXRlTWlwbWFwcykgX2dsLmdlbmVyYXRlTWlwbWFwKGdsVGFyZ2V0KTtcblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cdH07XG5cblx0dGhpcy5pbml0VGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlKSB7XG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblx0fTtcblxuXHR0aGlzLnJlc2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0X2N1cnJlbnRBY3RpdmVDdWJlRmFjZSA9IDA7XG5cdFx0X2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbCA9IDA7XG5cdFx0X2N1cnJlbnRSZW5kZXJUYXJnZXQgPSBudWxsO1xuXHRcdHN0YXRlLnJlc2V0KCk7XG5cdFx0YmluZGluZ1N0YXRlcy5yZXNldCgpO1xuXHR9O1xuXG5cdGlmICh0eXBlb2YgX19USFJFRV9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJykge1xuXHRcdF9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnb2JzZXJ2ZScsIHtcblx0XHRcdGRldGFpbDogdGhpc1xuXHRcdH0pKTtcblx0fVxufVxuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXIgPSB0cnVlO1xuXG5jbGFzcyBXZWJHTDFSZW5kZXJlciBleHRlbmRzIFdlYkdMUmVuZGVyZXIge31cblxuV2ViR0wxUmVuZGVyZXIucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXIgPSB0cnVlO1xuXG5jbGFzcyBGb2dFeHAyIHtcblx0Y29uc3RydWN0b3IoY29sb3IsIGRlbnNpdHkgPSAwLjAwMDI1KSB7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcihjb2xvcik7XG5cdFx0dGhpcy5kZW5zaXR5ID0gZGVuc2l0eTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgRm9nRXhwMih0aGlzLmNvbG9yLCB0aGlzLmRlbnNpdHkpO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiAnRm9nRXhwMicsXG5cdFx0XHRjb2xvcjogdGhpcy5jb2xvci5nZXRIZXgoKSxcblx0XHRcdGRlbnNpdHk6IHRoaXMuZGVuc2l0eVxuXHRcdH07XG5cdH1cblxufVxuXG5Gb2dFeHAyLnByb3RvdHlwZS5pc0ZvZ0V4cDIgPSB0cnVlO1xuXG5jbGFzcyBGb2cge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgbmVhciA9IDEsIGZhciA9IDEwMDApIHtcblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKGNvbG9yKTtcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xuXHRcdHRoaXMuZmFyID0gZmFyO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBGb2codGhpcy5jb2xvciwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6ICdGb2cnLFxuXHRcdFx0Y29sb3I6IHRoaXMuY29sb3IuZ2V0SGV4KCksXG5cdFx0XHRuZWFyOiB0aGlzLm5lYXIsXG5cdFx0XHRmYXI6IHRoaXMuZmFyXG5cdFx0fTtcblx0fVxuXG59XG5cbkZvZy5wcm90b3R5cGUuaXNGb2cgPSB0cnVlO1xuXG5jbGFzcyBTY2VuZSBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnU2NlbmUnO1xuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG51bGw7XG5cdFx0dGhpcy5lbnZpcm9ubWVudCA9IG51bGw7XG5cdFx0dGhpcy5mb2cgPSBudWxsO1xuXHRcdHRoaXMub3ZlcnJpZGVNYXRlcmlhbCA9IG51bGw7XG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTsgLy8gY2hlY2tlZCBieSB0aGUgcmVuZGVyZXJcblxuXHRcdGlmICh0eXBlb2YgX19USFJFRV9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0X19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdvYnNlcnZlJywge1xuXHRcdFx0XHRkZXRhaWw6IHRoaXNcblx0XHRcdH0pKTtcblx0XHR9XG5cdH1cblxuXHRjb3B5KHNvdXJjZSwgcmVjdXJzaXZlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UsIHJlY3Vyc2l2ZSk7XG5cdFx0aWYgKHNvdXJjZS5iYWNrZ3JvdW5kICE9PSBudWxsKSB0aGlzLmJhY2tncm91bmQgPSBzb3VyY2UuYmFja2dyb3VuZC5jbG9uZSgpO1xuXHRcdGlmIChzb3VyY2UuZW52aXJvbm1lbnQgIT09IG51bGwpIHRoaXMuZW52aXJvbm1lbnQgPSBzb3VyY2UuZW52aXJvbm1lbnQuY2xvbmUoKTtcblx0XHRpZiAoc291cmNlLmZvZyAhPT0gbnVsbCkgdGhpcy5mb2cgPSBzb3VyY2UuZm9nLmNsb25lKCk7XG5cdFx0aWYgKHNvdXJjZS5vdmVycmlkZU1hdGVyaWFsICE9PSBudWxsKSB0aGlzLm92ZXJyaWRlTWF0ZXJpYWwgPSBzb3VyY2Uub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpO1xuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHNvdXJjZS5hdXRvVXBkYXRlO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGlmICh0aGlzLmZvZyAhPT0gbnVsbCkgZGF0YS5vYmplY3QuZm9nID0gdGhpcy5mb2cudG9KU09OKCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5TY2VuZS5wcm90b3R5cGUuaXNTY2VuZSA9IHRydWU7XG5cbmNsYXNzIEludGVybGVhdmVkQnVmZmVyIHtcblx0Y29uc3RydWN0b3IoYXJyYXksIHN0cmlkZSkge1xuXHRcdHRoaXMuYXJyYXkgPSBhcnJheTtcblx0XHR0aGlzLnN0cmlkZSA9IHN0cmlkZTtcblx0XHR0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAvIHN0cmlkZSA6IDA7XG5cdFx0dGhpcy51c2FnZSA9IFN0YXRpY0RyYXdVc2FnZTtcblx0XHR0aGlzLnVwZGF0ZVJhbmdlID0ge1xuXHRcdFx0b2Zmc2V0OiAwLFxuXHRcdFx0Y291bnQ6IC0xXG5cdFx0fTtcblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHR9XG5cblx0b25VcGxvYWRDYWxsYmFjaygpIHt9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSB0cnVlKSB0aGlzLnZlcnNpb24rKztcblx0fVxuXG5cdHNldFVzYWdlKHZhbHVlKSB7XG5cdFx0dGhpcy51c2FnZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHR0aGlzLmFycmF5ID0gbmV3IHNvdXJjZS5hcnJheS5jb25zdHJ1Y3Rvcihzb3VyY2UuYXJyYXkpO1xuXHRcdHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7XG5cdFx0dGhpcy5zdHJpZGUgPSBzb3VyY2Uuc3RyaWRlO1xuXHRcdHRoaXMudXNhZ2UgPSBzb3VyY2UudXNhZ2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5QXQoaW5kZXgxLCBhdHRyaWJ1dGUsIGluZGV4Mikge1xuXHRcdGluZGV4MSAqPSB0aGlzLnN0cmlkZTtcblx0XHRpbmRleDIgKj0gYXR0cmlidXRlLnN0cmlkZTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5zdHJpZGU7IGkgPCBsOyBpKyspIHtcblx0XHRcdHRoaXMuYXJyYXlbaW5kZXgxICsgaV0gPSBhdHRyaWJ1dGUuYXJyYXlbaW5kZXgyICsgaV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXQodmFsdWUsIG9mZnNldCA9IDApIHtcblx0XHR0aGlzLmFycmF5LnNldCh2YWx1ZSwgb2Zmc2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKGRhdGEpIHtcblx0XHRpZiAoZGF0YS5hcnJheUJ1ZmZlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblx0XHR9XG5cblx0XHRpZiAoZGF0YS5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRhdGEuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSA9IHRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFycmF5ID0gbmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoZGF0YS5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKTtcblx0XHRjb25zdCBpYiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGFycmF5LCB0aGlzLnN0cmlkZSk7XG5cdFx0aWIuc2V0VXNhZ2UodGhpcy51c2FnZSk7XG5cdFx0cmV0dXJuIGliO1xuXHR9XG5cblx0b25VcGxvYWQoY2FsbGJhY2spIHtcblx0XHR0aGlzLm9uVXBsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTihkYXRhKSB7XG5cdFx0aWYgKGRhdGEuYXJyYXlCdWZmZXJzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRhdGEuYXJyYXlCdWZmZXJzID0ge307XG5cdFx0fSAvLyBnZW5lcmF0ZSBVVUlEIGZvciBhcnJheSBidWZmZXIgaWYgbmVjZXNzYXJ5XG5cblxuXHRcdGlmICh0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdH1cblxuXHRcdGlmIChkYXRhLmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSk7XG5cdFx0fSAvL1xuXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXVpZDogdGhpcy51dWlkLFxuXHRcdFx0YnVmZmVyOiB0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCxcblx0XHRcdHR5cGU6IHRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdHN0cmlkZTogdGhpcy5zdHJpZGVcblx0XHR9O1xuXHR9XG5cbn1cblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXIgPSB0cnVlO1xuXG5jb25zdCBfdmVjdG9yJDYgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihpbnRlcmxlYXZlZEJ1ZmZlciwgaXRlbVNpemUsIG9mZnNldCwgbm9ybWFsaXplZCA9IGZhbHNlKSB7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy5kYXRhID0gaW50ZXJsZWF2ZWRCdWZmZXI7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuXHRcdHRoaXMubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQgPT09IHRydWU7XG5cdH1cblxuXHRnZXQgY291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5jb3VudDtcblx0fVxuXG5cdGdldCBhcnJheSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5O1xuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdH1cblxuXHRhcHBseU1hdHJpeDQobSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5kYXRhLmNvdW50OyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRfdmVjdG9yJDYueCA9IHRoaXMuZ2V0WChpKTtcblx0XHRcdF92ZWN0b3IkNi55ID0gdGhpcy5nZXRZKGkpO1xuXHRcdFx0X3ZlY3RvciQ2LnogPSB0aGlzLmdldFooaSk7XG5cblx0XHRcdF92ZWN0b3IkNi5hcHBseU1hdHJpeDQobSk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKGksIF92ZWN0b3IkNi54LCBfdmVjdG9yJDYueSwgX3ZlY3RvciQ2LnopO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YXBwbHlOb3JtYWxNYXRyaXgobSkge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0X3ZlY3RvciQ2LnggPSB0aGlzLmdldFgoaSk7XG5cdFx0XHRfdmVjdG9yJDYueSA9IHRoaXMuZ2V0WShpKTtcblx0XHRcdF92ZWN0b3IkNi56ID0gdGhpcy5nZXRaKGkpO1xuXG5cdFx0XHRfdmVjdG9yJDYuYXBwbHlOb3JtYWxNYXRyaXgobSk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKGksIF92ZWN0b3IkNi54LCBfdmVjdG9yJDYueSwgX3ZlY3RvciQ2LnopO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKG0pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdF92ZWN0b3IkNi54ID0gdGhpcy5nZXRYKGkpO1xuXHRcdFx0X3ZlY3RvciQ2LnkgPSB0aGlzLmdldFkoaSk7XG5cdFx0XHRfdmVjdG9yJDYueiA9IHRoaXMuZ2V0WihpKTtcblxuXHRcdFx0X3ZlY3RvciQ2LnRyYW5zZm9ybURpcmVjdGlvbihtKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYKGluZGV4LCB4KSB7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0XSA9IHg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRZKGluZGV4LCB5KSB7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMV0gPSB5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0WihpbmRleCwgeikge1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDJdID0gejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFcoaW5kZXgsIHcpIHtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRYKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVtpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldF07XG5cdH1cblxuXHRnZXRZKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheVtpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDFdO1xuXHR9XG5cblx0Z2V0WihpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAyXTtcblx0fVxuXG5cdGdldFcoaW5kZXgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2luZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgM107XG5cdH1cblxuXHRzZXRYWShpbmRleCwgeCwgeSkge1xuXHRcdGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMF0gPSB4O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFhZWihpbmRleCwgeCwgeSwgeikge1xuXHRcdGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMF0gPSB4O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAyXSA9IHo7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRYWVpXKGluZGV4LCB4LCB5LCB6LCB3KSB7XG5cdFx0aW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy5kYXRhLmFycmF5W2luZGV4ICsgMV0gPSB5O1xuXHRcdHRoaXMuZGF0YS5hcnJheVtpbmRleCArIDJdID0gejtcblx0XHR0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS5sb2coJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLicpO1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBpICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0O1xuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5pdGVtU2l6ZTsgaisrKSB7XG5cdFx0XHRcdFx0YXJyYXkucHVzaCh0aGlzLmRhdGEuYXJyYXlbaW5kZXggKyBqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBCdWZmZXJBdHRyaWJ1dGUobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoYXJyYXkpLCB0aGlzLml0ZW1TaXplLCB0aGlzLm5vcm1hbGl6ZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkYXRhLmludGVybGVhdmVkQnVmZmVycyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdID0gdGhpcy5kYXRhLmNsb25lKGRhdGEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSwgdGhpcy5pdGVtU2l6ZSwgdGhpcy5vZmZzZXQsIHRoaXMubm9ybWFsaXplZCk7XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKGRhdGEpIHtcblx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4nKTtcblx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gaSAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuaXRlbVNpemU7IGorKykge1xuXHRcdFx0XHRcdGFycmF5LnB1c2godGhpcy5kYXRhLmFycmF5W2luZGV4ICsgal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGRlaW50ZXJsZWF2ZSBkYXRhIGFuZCBzYXZlIGl0IGFzIGFuIG9yZGluYXJ5IGJ1ZmZlciBhdHRyaWJ1dGUgZm9yIG5vd1xuXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGl0ZW1TaXplOiB0aGlzLml0ZW1TaXplLFxuXHRcdFx0XHR0eXBlOiB0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0XHRcdGFycmF5OiBhcnJheSxcblx0XHRcdFx0bm9ybWFsaXplZDogdGhpcy5ub3JtYWxpemVkXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBzYXZlIGFzIHRydWUgaW50ZXJsYXZlZCBhdHRyaWJ0dWVcblx0XHRcdGlmIChkYXRhLmludGVybGVhdmVkQnVmZmVycyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhLmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkYXRhLmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0gPSB0aGlzLmRhdGEudG9KU09OKGRhdGEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiB0cnVlLFxuXHRcdFx0XHRpdGVtU2l6ZTogdGhpcy5pdGVtU2l6ZSxcblx0XHRcdFx0ZGF0YTogdGhpcy5kYXRhLnV1aWQsXG5cdFx0XHRcdG9mZnNldDogdGhpcy5vZmZzZXQsXG5cdFx0XHRcdG5vcm1hbGl6ZWQ6IHRoaXMubm9ybWFsaXplZFxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxufVxuXG5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdHJvdGF0aW9uOiA8ZmxvYXQ+LFxuICpcdHNpemVBdHRlbnVhdGlvbjogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgU3ByaXRlTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTcHJpdGVNYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMucm90YXRpb24gPSAwO1xuXHRcdHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gdHJ1ZTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXHRcdHRoaXMucm90YXRpb24gPSBzb3VyY2Uucm90YXRpb247XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6ZUF0dGVudWF0aW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuU3ByaXRlTWF0ZXJpYWwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWwgPSB0cnVlO1xuXG5sZXQgX2dlb21ldHJ5O1xuXG5jb25zdCBfaW50ZXJzZWN0UG9pbnQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3dvcmxkU2NhbGUgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX212UG9zaXRpb24gPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2FsaWduZWRQb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jb25zdCBfcm90YXRlZFBvc2l0aW9uID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF92aWV3V29ybGRNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3ZBID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92QiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdkMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3V2QSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMigpO1xuXG5jb25zdCBfdXZCID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF91dkMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjIoKTtcblxuY2xhc3MgU3ByaXRlIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcihtYXRlcmlhbCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1Nwcml0ZSc7XG5cblx0XHRpZiAoX2dlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF9nZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdFx0Y29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbLTAuNSwgLTAuNSwgMCwgMCwgMCwgMC41LCAtMC41LCAwLCAxLCAwLCAwLjUsIDAuNSwgMCwgMSwgMSwgLTAuNSwgMC41LCAwLCAwLCAxXSk7XG5cdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IG5ldyBJbnRlcmxlYXZlZEJ1ZmZlcihmbG9hdDMyQXJyYXksIDUpO1xuXG5cdFx0XHRfZ2VvbWV0cnkuc2V0SW5kZXgoWzAsIDEsIDIsIDAsIDIsIDNdKTtcblxuXHRcdFx0X2dlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW50ZXJsZWF2ZWRCdWZmZXIsIDMsIDAsIGZhbHNlKSk7XG5cblx0XHRcdF9nZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKGludGVybGVhdmVkQnVmZmVyLCAyLCAzLCBmYWxzZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBfZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbCA6IG5ldyBTcHJpdGVNYXRlcmlhbCgpO1xuXHRcdHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoMC41LCAwLjUpO1xuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRpZiAocmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiBcIlJheWNhc3Rlci5jYW1lcmFcIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyk7XG5cdFx0fVxuXG5cdFx0X3dvcmxkU2NhbGUuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO1xuXG5cdFx0X3ZpZXdXb3JsZE1hdHJpeC5jb3B5KHJheWNhc3Rlci5jYW1lcmEubWF0cml4V29ybGQpO1xuXG5cdFx0dGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhyYXljYXN0ZXIuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgdGhpcy5tYXRyaXhXb3JsZCk7XG5cblx0XHRfbXZQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpO1xuXG5cdFx0aWYgKHJheWNhc3Rlci5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSAmJiB0aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdF93b3JsZFNjYWxlLm11bHRpcGx5U2NhbGFyKC1fbXZQb3NpdGlvbi56KTtcblx0XHR9XG5cblx0XHRjb25zdCByb3RhdGlvbiA9IHRoaXMubWF0ZXJpYWwucm90YXRpb247XG5cdFx0bGV0IHNpbiwgY29zO1xuXG5cdFx0aWYgKHJvdGF0aW9uICE9PSAwKSB7XG5cdFx0XHRjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG5cdFx0XHRzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2VudGVyID0gdGhpcy5jZW50ZXI7XG5cdFx0dHJhbnNmb3JtVmVydGV4KF92QS5zZXQoLTAuNSwgLTAuNSwgMCksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyk7XG5cdFx0dHJhbnNmb3JtVmVydGV4KF92Qi5zZXQoMC41LCAtMC41LCAwKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zKTtcblx0XHR0cmFuc2Zvcm1WZXJ0ZXgoX3ZDLnNldCgwLjUsIDAuNSwgMCksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyk7XG5cblx0XHRfdXZBLnNldCgwLCAwKTtcblxuXHRcdF91dkIuc2V0KDEsIDApO1xuXG5cdFx0X3V2Qy5zZXQoMSwgMSk7IC8vIGNoZWNrIGZpcnN0IHRyaWFuZ2xlXG5cblxuXHRcdGxldCBpbnRlcnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVyc2VjdFRyaWFuZ2xlKF92QSwgX3ZCLCBfdkMsIGZhbHNlLCBfaW50ZXJzZWN0UG9pbnQpO1xuXG5cdFx0aWYgKGludGVyc2VjdCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gY2hlY2sgc2Vjb25kIHRyaWFuZ2xlXG5cdFx0XHR0cmFuc2Zvcm1WZXJ0ZXgoX3ZCLnNldCgtMC41LCAwLjUsIDApLCBfbXZQb3NpdGlvbiwgY2VudGVyLCBfd29ybGRTY2FsZSwgc2luLCBjb3MpO1xuXG5cdFx0XHRfdXZCLnNldCgwLCAxKTtcblxuXHRcdFx0aW50ZXJzZWN0ID0gcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RUcmlhbmdsZShfdkEsIF92QywgX3ZCLCBmYWxzZSwgX2ludGVyc2VjdFBvaW50KTtcblxuXHRcdFx0aWYgKGludGVyc2VjdCA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKF9pbnRlcnNlY3RQb2ludCk7XG5cdFx0aWYgKGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSByZXR1cm47XG5cdFx0aW50ZXJzZWN0cy5wdXNoKHtcblx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdHBvaW50OiBfaW50ZXJzZWN0UG9pbnQuY2xvbmUoKSxcblx0XHRcdHV2OiBUcmlhbmdsZS5nZXRVVihfaW50ZXJzZWN0UG9pbnQsIF92QSwgX3ZCLCBfdkMsIF91dkEsIF91dkIsIF91dkMsIG5ldyBWZWN0b3IyKCkpLFxuXHRcdFx0ZmFjZTogbnVsbCxcblx0XHRcdG9iamVjdDogdGhpc1xuXHRcdH0pO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0aWYgKHNvdXJjZS5jZW50ZXIgIT09IHVuZGVmaW5lZCkgdGhpcy5jZW50ZXIuY29weShzb3VyY2UuY2VudGVyKTtcblx0XHR0aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVyaWFsO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuU3ByaXRlLnByb3RvdHlwZS5pc1Nwcml0ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVZlcnRleCh2ZXJ0ZXhQb3NpdGlvbiwgbXZQb3NpdGlvbiwgY2VudGVyLCBzY2FsZSwgc2luLCBjb3MpIHtcblx0Ly8gY29tcHV0ZSBwb3NpdGlvbiBpbiBjYW1lcmEgc3BhY2Vcblx0X2FsaWduZWRQb3NpdGlvbi5zdWJWZWN0b3JzKHZlcnRleFBvc2l0aW9uLCBjZW50ZXIpLmFkZFNjYWxhcigwLjUpLm11bHRpcGx5KHNjYWxlKTsgLy8gdG8gY2hlY2sgaWYgcm90YXRpb24gaXMgbm90IHplcm9cblxuXG5cdGlmIChzaW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdF9yb3RhdGVkUG9zaXRpb24ueCA9IGNvcyAqIF9hbGlnbmVkUG9zaXRpb24ueCAtIHNpbiAqIF9hbGlnbmVkUG9zaXRpb24ueTtcblx0XHRfcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4gKiBfYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MgKiBfYWxpZ25lZFBvc2l0aW9uLnk7XG5cdH0gZWxzZSB7XG5cdFx0X3JvdGF0ZWRQb3NpdGlvbi5jb3B5KF9hbGlnbmVkUG9zaXRpb24pO1xuXHR9XG5cblx0dmVydGV4UG9zaXRpb24uY29weShtdlBvc2l0aW9uKTtcblx0dmVydGV4UG9zaXRpb24ueCArPSBfcm90YXRlZFBvc2l0aW9uLng7XG5cdHZlcnRleFBvc2l0aW9uLnkgKz0gX3JvdGF0ZWRQb3NpdGlvbi55OyAvLyB0cmFuc2Zvcm0gdG8gd29ybGQgc3BhY2VcblxuXHR2ZXJ0ZXhQb3NpdGlvbi5hcHBseU1hdHJpeDQoX3ZpZXdXb3JsZE1hdHJpeCk7XG59XG5cbmNvbnN0IF92MSQyID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF92MiQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIExPRCBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9jdXJyZW50TGV2ZWwgPSAwO1xuXHRcdHRoaXMudHlwZSA9ICdMT0QnO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdGxldmVsczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogW11cblx0XHRcdH0sXG5cdFx0XHRpc0xPRDoge1xuXHRcdFx0XHR2YWx1ZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlLCBmYWxzZSk7XG5cdFx0Y29uc3QgbGV2ZWxzID0gc291cmNlLmxldmVscztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgbGV2ZWwgPSBsZXZlbHNbaV07XG5cdFx0XHR0aGlzLmFkZExldmVsKGxldmVsLm9iamVjdC5jbG9uZSgpLCBsZXZlbC5kaXN0YW5jZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gc291cmNlLmF1dG9VcGRhdGU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRMZXZlbChvYmplY3QsIGRpc3RhbmNlID0gMCkge1xuXHRcdGRpc3RhbmNlID0gTWF0aC5hYnMoZGlzdGFuY2UpO1xuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXHRcdGxldCBsO1xuXG5cdFx0Zm9yIChsID0gMDsgbCA8IGxldmVscy5sZW5ndGg7IGwrKykge1xuXHRcdFx0aWYgKGRpc3RhbmNlIDwgbGV2ZWxzW2xdLmRpc3RhbmNlKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldmVscy5zcGxpY2UobCwgMCwge1xuXHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0b2JqZWN0OiBvYmplY3Rcblx0XHR9KTtcblx0XHR0aGlzLmFkZChvYmplY3QpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q3VycmVudExldmVsKCkge1xuXHRcdHJldHVybiB0aGlzLl9jdXJyZW50TGV2ZWw7XG5cdH1cblxuXHRnZXRPYmplY3RGb3JEaXN0YW5jZShkaXN0YW5jZSkge1xuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKGxldmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgaSwgbDtcblxuXHRcdFx0Zm9yIChpID0gMSwgbCA9IGxldmVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0aWYgKGRpc3RhbmNlIDwgbGV2ZWxzW2ldLmRpc3RhbmNlKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxldmVsc1tpIC0gMV0ub2JqZWN0O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRjb25zdCBsZXZlbHMgPSB0aGlzLmxldmVscztcblxuXHRcdGlmIChsZXZlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0X3YxJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO1xuXG5cdFx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oX3YxJDIpO1xuXHRcdFx0dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShkaXN0YW5jZSkucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZShjYW1lcmEpIHtcblx0XHRjb25zdCBsZXZlbHMgPSB0aGlzLmxldmVscztcblxuXHRcdGlmIChsZXZlbHMubGVuZ3RoID4gMSkge1xuXHRcdFx0X3YxJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cblx0XHRcdF92MiQxLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBfdjEkMi5kaXN0YW5jZVRvKF92MiQxKSAvIGNhbWVyYS56b29tO1xuXHRcdFx0bGV2ZWxzWzBdLm9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdGxldCBpLCBsO1xuXG5cdFx0XHRmb3IgKGkgPSAxLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoZGlzdGFuY2UgPj0gbGV2ZWxzW2ldLmRpc3RhbmNlKSB7XG5cdFx0XHRcdFx0bGV2ZWxzW2kgLSAxXS5vYmplY3QudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGxldmVsc1tpXS5vYmplY3QudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fY3VycmVudExldmVsID0gaSAtIDE7XG5cblx0XHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGxldmVsc1tpXS5vYmplY3QudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRvSlNPTihtZXRhKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTihtZXRhKTtcblx0XHRpZiAodGhpcy5hdXRvVXBkYXRlID09PSBmYWxzZSkgZGF0YS5vYmplY3QuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdGRhdGEub2JqZWN0LmxldmVscyA9IFtdO1xuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsZXZlbCA9IGxldmVsc1tpXTtcblx0XHRcdGRhdGEub2JqZWN0LmxldmVscy5wdXNoKHtcblx0XHRcdFx0b2JqZWN0OiBsZXZlbC5vYmplY3QudXVpZCxcblx0XHRcdFx0ZGlzdGFuY2U6IGxldmVsLmRpc3RhbmNlXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cbmNvbnN0IF9iYXNlUG9zaXRpb24gPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3NraW5JbmRleCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yNCgpO1xuXG5jb25zdCBfc2tpbldlaWdodCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yNCgpO1xuXG5jb25zdCBfdmVjdG9yJDUgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX21hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jbGFzcyBTa2lubmVkTWVzaCBleHRlbmRzIE1lc2gge1xuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeSwgbWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdTa2lubmVkTWVzaCc7XG5cdFx0dGhpcy5iaW5kTW9kZSA9ICdhdHRhY2hlZCc7XG5cdFx0dGhpcy5iaW5kTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuYmluZE1vZGUgPSBzb3VyY2UuYmluZE1vZGU7XG5cdFx0dGhpcy5iaW5kTWF0cml4LmNvcHkoc291cmNlLmJpbmRNYXRyaXgpO1xuXHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShzb3VyY2UuYmluZE1hdHJpeEludmVyc2UpO1xuXHRcdHRoaXMuc2tlbGV0b24gPSBzb3VyY2Uuc2tlbGV0b247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRiaW5kKHNrZWxldG9uLCBiaW5kTWF0cml4KSB7XG5cdFx0dGhpcy5za2VsZXRvbiA9IHNrZWxldG9uO1xuXG5cdFx0aWYgKGJpbmRNYXRyaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcblx0XHRcdHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKTtcblx0XHRcdGJpbmRNYXRyaXggPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdH1cblxuXHRcdHRoaXMuYmluZE1hdHJpeC5jb3B5KGJpbmRNYXRyaXgpO1xuXHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShiaW5kTWF0cml4KS5pbnZlcnQoKTtcblx0fVxuXG5cdHBvc2UoKSB7XG5cdFx0dGhpcy5za2VsZXRvbi5wb3NlKCk7XG5cdH1cblxuXHRub3JtYWxpemVTa2luV2VpZ2h0cygpIHtcblx0XHRjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yNCgpO1xuXHRcdGNvbnN0IHNraW5XZWlnaHQgPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2tpbldlaWdodC5jb3VudDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dmVjdG9yLnggPSBza2luV2VpZ2h0LmdldFgoaSk7XG5cdFx0XHR2ZWN0b3IueSA9IHNraW5XZWlnaHQuZ2V0WShpKTtcblx0XHRcdHZlY3Rvci56ID0gc2tpbldlaWdodC5nZXRaKGkpO1xuXHRcdFx0dmVjdG9yLncgPSBza2luV2VpZ2h0LmdldFcoaSk7XG5cdFx0XHRjb25zdCBzY2FsZSA9IDEuMCAvIHZlY3Rvci5tYW5oYXR0YW5MZW5ndGgoKTtcblxuXHRcdFx0aWYgKHNjYWxlICE9PSBJbmZpbml0eSkge1xuXHRcdFx0XHR2ZWN0b3IubXVsdGlwbHlTY2FsYXIoc2NhbGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmVjdG9yLnNldCgxLCAwLCAwLCAwKTsgLy8gZG8gc29tZXRoaW5nIHJlYXNvbmFibGVcblx0XHRcdH1cblxuXHRcdFx0c2tpbldlaWdodC5zZXRYWVpXKGksIHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnosIHZlY3Rvci53KTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZChmb3JjZSkge1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblxuXHRcdGlmICh0aGlzLmJpbmRNb2RlID09PSAnYXR0YWNoZWQnKSB7XG5cdFx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmJpbmRNb2RlID09PSAnZGV0YWNoZWQnKSB7XG5cdFx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAnICsgdGhpcy5iaW5kTW9kZSk7XG5cdFx0fVxuXHR9XG5cblx0Ym9uZVRyYW5zZm9ybShpbmRleCwgdGFyZ2V0KSB7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdF9za2luSW5kZXguZnJvbUJ1ZmZlckF0dHJpYnV0ZShnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5JbmRleCwgaW5kZXgpO1xuXG5cdFx0X3NraW5XZWlnaHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsIGluZGV4KTtcblxuXHRcdF9iYXNlUG9zaXRpb24uY29weSh0YXJnZXQpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpO1xuXG5cdFx0dGFyZ2V0LnNldCgwLCAwLCAwKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdFx0XHRjb25zdCB3ZWlnaHQgPSBfc2tpbldlaWdodC5nZXRDb21wb25lbnQoaSk7XG5cblx0XHRcdGlmICh3ZWlnaHQgIT09IDApIHtcblx0XHRcdFx0Y29uc3QgYm9uZUluZGV4ID0gX3NraW5JbmRleC5nZXRDb21wb25lbnQoaSk7XG5cblx0XHRcdFx0X21hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHNrZWxldG9uLmJvbmVzW2JvbmVJbmRleF0ubWF0cml4V29ybGQsIHNrZWxldG9uLmJvbmVJbnZlcnNlc1tib25lSW5kZXhdKTtcblxuXHRcdFx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKF92ZWN0b3IkNS5jb3B5KF9iYXNlUG9zaXRpb24pLmFwcGx5TWF0cml4NChfbWF0cml4KSwgd2VpZ2h0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKTtcblx0fVxuXG59XG5cblNraW5uZWRNZXNoLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoID0gdHJ1ZTtcblxuY2xhc3MgQm9uZSBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQm9uZSc7XG5cdH1cblxufVxuXG5Cb25lLnByb3RvdHlwZS5pc0JvbmUgPSB0cnVlO1xuXG5jbGFzcyBEYXRhVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3RvcihkYXRhID0gbnVsbCwgd2lkdGggPSAxLCBoZWlnaHQgPSAxLCBmb3JtYXQsIHR5cGUsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlciwgbWluRmlsdGVyID0gTmVhcmVzdEZpbHRlciwgYW5pc290cm9weSwgZW5jb2RpbmcpIHtcblx0XHRzdXBlcihudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nKTtcblx0XHR0aGlzLmltYWdlID0ge1xuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0fTtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlcjtcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IDE7XG5cdH1cblxufVxuXG5EYXRhVGV4dHVyZS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZSA9IHRydWU7XG5cbmNvbnN0IF9vZmZzZXRNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2lkZW50aXR5TWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNsYXNzIFNrZWxldG9uIHtcblx0Y29uc3RydWN0b3IoYm9uZXMgPSBbXSwgYm9uZUludmVyc2VzID0gW10pIHtcblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblx0XHR0aGlzLmJvbmVzID0gYm9uZXMuc2xpY2UoMCk7XG5cdFx0dGhpcy5ib25lSW52ZXJzZXMgPSBib25lSW52ZXJzZXM7XG5cdFx0dGhpcy5ib25lTWF0cmljZXMgPSBudWxsO1xuXHRcdHRoaXMuYm9uZVRleHR1cmUgPSBudWxsO1xuXHRcdHRoaXMuYm9uZVRleHR1cmVTaXplID0gMDtcblx0XHR0aGlzLmZyYW1lID0gLTE7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdGNvbnN0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRjb25zdCBib25lSW52ZXJzZXMgPSB0aGlzLmJvbmVJbnZlcnNlcztcblx0XHR0aGlzLmJvbmVNYXRyaWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoYm9uZXMubGVuZ3RoICogMTYpOyAvLyBjYWxjdWxhdGUgaW52ZXJzZSBib25lIG1hdHJpY2VzIGlmIG5lY2Vzc2FyeVxuXG5cdFx0aWYgKGJvbmVJbnZlcnNlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaGFuZGxlIHNwZWNpYWwgY2FzZVxuXHRcdFx0aWYgKGJvbmVzLmxlbmd0aCAhPT0gYm9uZUludmVyc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLlNrZWxldG9uOiBOdW1iZXIgb2YgaW52ZXJzZSBib25lIG1hdHJpY2VzIGRvZXMgbm90IG1hdGNoIGFtb3VudCBvZiBib25lcy4nKTtcblx0XHRcdFx0dGhpcy5ib25lSW52ZXJzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHR0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNYXRyaXg0KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2FsY3VsYXRlSW52ZXJzZXMoKSB7XG5cdFx0dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Y29uc3QgaW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHRcdGlmICh0aGlzLmJvbmVzW2ldKSB7XG5cdFx0XHRcdGludmVyc2UuY29weSh0aGlzLmJvbmVzW2ldLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ib25lSW52ZXJzZXMucHVzaChpbnZlcnNlKTtcblx0XHR9XG5cdH1cblxuXHRwb3NlKCkge1xuXHRcdC8vIHJlY292ZXIgdGhlIGJpbmQtdGltZSB3b3JsZCBtYXRyaWNlc1xuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZXNbaV07XG5cblx0XHRcdGlmIChib25lKSB7XG5cdFx0XHRcdGJvbmUubWF0cml4V29ybGQuY29weSh0aGlzLmJvbmVJbnZlcnNlc1tpXSkuaW52ZXJ0KCk7XG5cdFx0XHR9XG5cdFx0fSAvLyBjb21wdXRlIHRoZSBsb2NhbCBtYXRyaWNlcywgcG9zaXRpb25zLCByb3RhdGlvbnMgYW5kIHNjYWxlc1xuXG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmVzW2ldO1xuXG5cdFx0XHRpZiAoYm9uZSkge1xuXHRcdFx0XHRpZiAoYm9uZS5wYXJlbnQgJiYgYm9uZS5wYXJlbnQuaXNCb25lKSB7XG5cdFx0XHRcdFx0Ym9uZS5tYXRyaXguY29weShib25lLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0XHRcdFx0Ym9uZS5tYXRyaXgubXVsdGlwbHkoYm9uZS5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ym9uZS5tYXRyaXguY29weShib25lLm1hdHJpeFdvcmxkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJvbmUubWF0cml4LmRlY29tcG9zZShib25lLnBvc2l0aW9uLCBib25lLnF1YXRlcm5pb24sIGJvbmUuc2NhbGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUludmVyc2VzID0gdGhpcy5ib25lSW52ZXJzZXM7XG5cdFx0Y29uc3QgYm9uZU1hdHJpY2VzID0gdGhpcy5ib25lTWF0cmljZXM7XG5cdFx0Y29uc3QgYm9uZVRleHR1cmUgPSB0aGlzLmJvbmVUZXh0dXJlOyAvLyBmbGF0dGVuIGJvbmUgbWF0cmljZXMgdG8gYXJyYXlcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdC8vIGNvbXB1dGUgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgb3JpZ2luYWwgdHJhbnNmb3JtXG5cdFx0XHRjb25zdCBtYXRyaXggPSBib25lc1tpXSA/IGJvbmVzW2ldLm1hdHJpeFdvcmxkIDogX2lkZW50aXR5TWF0cml4O1xuXG5cdFx0XHRfb2Zmc2V0TWF0cml4Lm11bHRpcGx5TWF0cmljZXMobWF0cml4LCBib25lSW52ZXJzZXNbaV0pO1xuXG5cdFx0XHRfb2Zmc2V0TWF0cml4LnRvQXJyYXkoYm9uZU1hdHJpY2VzLCBpICogMTYpO1xuXHRcdH1cblxuXHRcdGlmIChib25lVGV4dHVyZSAhPT0gbnVsbCkge1xuXHRcdFx0Ym9uZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU2tlbGV0b24odGhpcy5ib25lcywgdGhpcy5ib25lSW52ZXJzZXMpO1xuXHR9XG5cblx0Y29tcHV0ZUJvbmVUZXh0dXJlKCkge1xuXHRcdC8vIGxheW91dCAoMSBtYXRyaXggPSA0IHBpeGVscylcblx0XHQvL1x0XHRcdFJHQkEgUkdCQSBSR0JBIFJHQkEgKD0+IGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjMsIGNvbHVtbjQpXG5cdFx0Ly9cdHdpdGhcdDh4OFx0cGl4ZWwgdGV4dHVyZSBtYXhcdCAxNiBib25lcyAqIDQgcGl4ZWxzID1cdCg4ICogOClcblx0XHQvL1x0XHRcdCAxNngxNiBwaXhlbCB0ZXh0dXJlIG1heFx0IDY0IGJvbmVzICogNCBwaXhlbHMgPSAoMTYgKiAxNilcblx0XHQvL1x0XHRcdCAzMngzMiBwaXhlbCB0ZXh0dXJlIG1heFx0MjU2IGJvbmVzICogNCBwaXhlbHMgPSAoMzIgKiAzMilcblx0XHQvL1x0XHRcdCA2NHg2NCBwaXhlbCB0ZXh0dXJlIG1heCAxMDI0IGJvbmVzICogNCBwaXhlbHMgPSAoNjQgKiA2NClcblx0XHRsZXQgc2l6ZSA9IE1hdGguc3FydCh0aGlzLmJvbmVzLmxlbmd0aCAqIDQpOyAvLyA0IHBpeGVscyBuZWVkZWQgZm9yIDEgbWF0cml4XG5cblx0XHRzaXplID0gY2VpbFBvd2VyT2ZUd28oc2l6ZSk7XG5cdFx0c2l6ZSA9IE1hdGgubWF4KHNpemUsIDQpO1xuXHRcdGNvbnN0IGJvbmVNYXRyaWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIHNpemUgKiA0KTsgLy8gNCBmbG9hdHMgcGVyIFJHQkEgcGl4ZWxcblxuXHRcdGJvbmVNYXRyaWNlcy5zZXQodGhpcy5ib25lTWF0cmljZXMpOyAvLyBjb3B5IGN1cnJlbnQgdmFsdWVzXG5cblx0XHRjb25zdCBib25lVGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZShib25lTWF0cmljZXMsIHNpemUsIHNpemUsIFJHQkFGb3JtYXQsIEZsb2F0VHlwZSk7XG5cdFx0Ym9uZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuYm9uZU1hdHJpY2VzID0gYm9uZU1hdHJpY2VzO1xuXHRcdHRoaXMuYm9uZVRleHR1cmUgPSBib25lVGV4dHVyZTtcblx0XHR0aGlzLmJvbmVUZXh0dXJlU2l6ZSA9IHNpemU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRCb25lQnlOYW1lKG5hbWUpIHtcblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmVzW2ldO1xuXG5cdFx0XHRpZiAoYm9uZS5uYW1lID09PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBib25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdGlmICh0aGlzLmJvbmVUZXh0dXJlICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmJvbmVUZXh0dXJlLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuYm9uZVRleHR1cmUgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdGZyb21KU09OKGpzb24sIGJvbmVzKSB7XG5cdFx0dGhpcy51dWlkID0ganNvbi51dWlkO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmJvbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgdXVpZCA9IGpzb24uYm9uZXNbaV07XG5cdFx0XHRsZXQgYm9uZSA9IGJvbmVzW3V1aWRdO1xuXG5cdFx0XHRpZiAoYm9uZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOicsIHV1aWQpO1xuXHRcdFx0XHRib25lID0gbmV3IEJvbmUoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ib25lcy5wdXNoKGJvbmUpO1xuXHRcdFx0dGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgTWF0cml4NCgpLmZyb21BcnJheShqc29uLmJvbmVJbnZlcnNlc1tpXSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdTa2VsZXRvbicsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ1NrZWxldG9uLnRvSlNPTidcblx0XHRcdH0sXG5cdFx0XHRib25lczogW10sXG5cdFx0XHRib25lSW52ZXJzZXM6IFtdXG5cdFx0fTtcblx0XHRkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGNvbnN0IGJvbmVJbnZlcnNlcyA9IHRoaXMuYm9uZUludmVyc2VzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBib25lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1tpXTtcblx0XHRcdGRhdGEuYm9uZXMucHVzaChib25lLnV1aWQpO1xuXHRcdFx0Y29uc3QgYm9uZUludmVyc2UgPSBib25lSW52ZXJzZXNbaV07XG5cdFx0XHRkYXRhLmJvbmVJbnZlcnNlcy5wdXNoKGJvbmVJbnZlcnNlLnRvQXJyYXkoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5jbGFzcyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQsIG1lc2hQZXJBdHRyaWJ1dGUgPSAxKSB7XG5cdFx0aWYgKHR5cGVvZiBub3JtYWxpemVkID09PSAnbnVtYmVyJykge1xuXHRcdFx0bWVzaFBlckF0dHJpYnV0ZSA9IG5vcm1hbGl6ZWQ7XG5cdFx0XHRub3JtYWxpemVkID0gZmFsc2U7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4nKTtcblx0XHR9XG5cblx0XHRzdXBlcihhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQpO1xuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLm1lc2hQZXJBdHRyaWJ1dGUgPSBzb3VyY2UubWVzaFBlckF0dHJpYnV0ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS5tZXNoUGVyQXR0cmlidXRlID0gdGhpcy5tZXNoUGVyQXR0cmlidXRlO1xuXHRcdGRhdGEuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPSB0cnVlO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbmNvbnN0IF9pbnN0YW5jZUxvY2FsTWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9pbnN0YW5jZVdvcmxkTWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9pbnN0YW5jZUludGVyc2VjdHMgPSBbXTtcblxuY29uc3QgX21lc2ggPSAvKkBfX1BVUkVfXyovbmV3IE1lc2goKTtcblxuY2xhc3MgSW5zdGFuY2VkTWVzaCBleHRlbmRzIE1lc2gge1xuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeSwgbWF0ZXJpYWwsIGNvdW50KSB7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLmluc3RhbmNlTWF0cml4ID0gbmV3IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogMTYpLCAxNik7XG5cdFx0dGhpcy5pbnN0YW5jZUNvbG9yID0gbnVsbDtcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XG5cdFx0dGhpcy5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkoc291cmNlLmluc3RhbmNlTWF0cml4KTtcblx0XHRpZiAoc291cmNlLmluc3RhbmNlQ29sb3IgIT09IG51bGwpIHRoaXMuaW5zdGFuY2VDb2xvciA9IHNvdXJjZS5pbnN0YW5jZUNvbG9yLmNsb25lKCk7XG5cdFx0dGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbG9yQXQoaW5kZXgsIGNvbG9yKSB7XG5cdFx0Y29sb3IuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwgaW5kZXggKiAzKTtcblx0fVxuXG5cdGdldE1hdHJpeEF0KGluZGV4LCBtYXRyaXgpIHtcblx0XHRtYXRyaXguZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksIGluZGV4ICogMTYpO1xuXHR9XG5cblx0cmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpIHtcblx0XHRjb25zdCBtYXRyaXhXb3JsZCA9IHRoaXMubWF0cml4V29ybGQ7XG5cdFx0Y29uc3QgcmF5Y2FzdFRpbWVzID0gdGhpcy5jb3VudDtcblx0XHRfbWVzaC5nZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0X21lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXHRcdGlmIChfbWVzaC5tYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRmb3IgKGxldCBpbnN0YW5jZUlkID0gMDsgaW5zdGFuY2VJZCA8IHJheWNhc3RUaW1lczsgaW5zdGFuY2VJZCsrKSB7XG5cdFx0XHQvLyBjYWxjdWxhdGUgdGhlIHdvcmxkIG1hdHJpeCBmb3IgZWFjaCBpbnN0YW5jZVxuXHRcdFx0dGhpcy5nZXRNYXRyaXhBdChpbnN0YW5jZUlkLCBfaW5zdGFuY2VMb2NhbE1hdHJpeCk7XG5cblx0XHRcdF9pbnN0YW5jZVdvcmxkTWF0cml4Lm11bHRpcGx5TWF0cmljZXMobWF0cml4V29ybGQsIF9pbnN0YW5jZUxvY2FsTWF0cml4KTsgLy8gdGhlIG1lc2ggcmVwcmVzZW50cyB0aGlzIHNpbmdsZSBpbnN0YW5jZVxuXG5cblx0XHRcdF9tZXNoLm1hdHJpeFdvcmxkID0gX2luc3RhbmNlV29ybGRNYXRyaXg7XG5cblx0XHRcdF9tZXNoLnJheWNhc3QocmF5Y2FzdGVyLCBfaW5zdGFuY2VJbnRlcnNlY3RzKTsgLy8gcHJvY2VzcyB0aGUgcmVzdWx0IG9mIHJheWNhc3RcblxuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IF9pbnN0YW5jZUludGVyc2VjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGludGVyc2VjdCA9IF9pbnN0YW5jZUludGVyc2VjdHNbaV07XG5cdFx0XHRcdGludGVyc2VjdC5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcblx0XHRcdFx0aW50ZXJzZWN0Lm9iamVjdCA9IHRoaXM7XG5cdFx0XHRcdGludGVyc2VjdHMucHVzaChpbnRlcnNlY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRfaW5zdGFuY2VJbnRlcnNlY3RzLmxlbmd0aCA9IDA7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q29sb3JBdChpbmRleCwgY29sb3IpIHtcblx0XHRpZiAodGhpcy5pbnN0YW5jZUNvbG9yID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmluc3RhbmNlQ29sb3IgPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCAqIDMpLCAzKTtcblx0XHR9XG5cblx0XHRjb2xvci50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwgaW5kZXggKiAzKTtcblx0fVxuXG5cdHNldE1hdHJpeEF0KGluZGV4LCBtYXRyaXgpIHtcblx0XHRtYXRyaXgudG9BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LCBpbmRleCAqIDE2KTtcblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHt9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0dHlwZTogJ2Rpc3Bvc2UnXG5cdFx0fSk7XG5cdH1cblxufVxuXG5JbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2ggPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdGxpbmV3aWR0aDogPGZsb2F0PixcbiAqXHRsaW5lY2FwOiBcInJvdW5kXCIsXG4gKlx0bGluZWpvaW46IFwicm91bmRcIlxuICogfVxuICovXG5cbmNsYXNzIExpbmVCYXNpY01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZUJhc2ljTWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpO1xuXHRcdHRoaXMubGluZXdpZHRoID0gMTtcblx0XHR0aGlzLmxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMubGluZWpvaW4gPSAncm91bmQnO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5saW5ld2lkdGggPSBzb3VyY2UubGluZXdpZHRoO1xuXHRcdHRoaXMubGluZWNhcCA9IHNvdXJjZS5saW5lY2FwO1xuXHRcdHRoaXMubGluZWpvaW4gPSBzb3VyY2UubGluZWpvaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5MaW5lQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IF9zdGFydCQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9lbmQkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCQxID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9yYXkkMSA9IC8qQF9fUFVSRV9fKi9uZXcgUmF5KCk7XG5cbmNvbnN0IF9zcGhlcmUkMSA9IC8qQF9fUFVSRV9fKi9uZXcgU3BoZXJlKCk7XG5cbmNsYXNzIExpbmUgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCksIG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdMaW5lJztcblx0XHR0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVyaWFsO1xuXHRcdHRoaXMuZ2VvbWV0cnkgPSBzb3VyY2UuZ2VvbWV0cnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21wdXRlTGluZURpc3RhbmNlcygpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Ly8gd2UgYXNzdW1lIG5vbi1pbmRleGVkIGdlb21ldHJ5XG5cdFx0XHRpZiAoZ2VvbWV0cnkuaW5kZXggPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBsaW5lRGlzdGFuY2VzID0gWzBdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAxLCBsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRfc3RhcnQkMS5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpIC0gMSk7XG5cblx0XHRcdFx0XHRfZW5kJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSk7XG5cblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzW2ldID0gbGluZURpc3RhbmNlc1tpIC0gMV07XG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1tpXSArPSBfc3RhcnQkMS5kaXN0YW5jZVRvKF9lbmQkMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGxpbmVEaXN0YW5jZXMsIDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChnZW9tZXRyeS5pc0dlb21ldHJ5KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCB0aHJlc2hvbGQgPSByYXljYXN0ZXIucGFyYW1zLkxpbmUudGhyZXNob2xkO1xuXHRcdGNvbnN0IGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZTsgLy8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUgZGlzdGFuY2UgdG8gcmF5XG5cblx0XHRpZiAoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwpIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZSQxLmNvcHkoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO1xuXG5cdFx0X3NwaGVyZSQxLmFwcGx5TWF0cml4NChtYXRyaXhXb3JsZCk7XG5cblx0XHRfc3BoZXJlJDEucmFkaXVzICs9IHRocmVzaG9sZDtcblx0XHRpZiAocmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKF9zcGhlcmUkMSkgPT09IGZhbHNlKSByZXR1cm47IC8vXG5cblx0XHRfaW52ZXJzZU1hdHJpeCQxLmNvcHkobWF0cml4V29ybGQpLmludmVydCgpO1xuXG5cdFx0X3JheSQxLmNvcHkocmF5Y2FzdGVyLnJheSkuYXBwbHlNYXRyaXg0KF9pbnZlcnNlTWF0cml4JDEpO1xuXG5cdFx0Y29uc3QgbG9jYWxUaHJlc2hvbGQgPSB0aHJlc2hvbGQgLyAoKHRoaXMuc2NhbGUueCArIHRoaXMuc2NhbGUueSArIHRoaXMuc2NhbGUueikgLyAzKTtcblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZFNxID0gbG9jYWxUaHJlc2hvbGQgKiBsb2NhbFRocmVzaG9sZDtcblx0XHRjb25zdCB2U3RhcnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHZFbmQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IGludGVyU2VnbWVudCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgaW50ZXJSYXkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHN0ZXAgPSB0aGlzLmlzTGluZVNlZ21lbnRzID8gMiA6IDE7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpO1xuXHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbihpbmRleC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gc3RhcnQsIGwgPSBlbmQgLSAxOyBpIDwgbDsgaSArPSBzdGVwKSB7XG5cdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoaSk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9IGluZGV4LmdldFgoaSArIDEpO1xuXHRcdFx0XHRcdHZTdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBhKTtcblx0XHRcdFx0XHR2RW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUsIGIpO1xuXG5cdFx0XHRcdFx0Y29uc3QgZGlzdFNxID0gX3JheSQxLmRpc3RhbmNlU3FUb1NlZ21lbnQodlN0YXJ0LCB2RW5kLCBpbnRlclJheSwgaW50ZXJTZWdtZW50KTtcblxuXHRcdFx0XHRcdGlmIChkaXN0U3EgPiBsb2NhbFRocmVzaG9sZFNxKSBjb250aW51ZTtcblx0XHRcdFx0XHRpbnRlclJheS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7IC8vTW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvblxuXG5cdFx0XHRcdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGludGVyUmF5KTtcblx0XHRcdFx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0XHRcdFx0XHQvLyBXaGF0IGRvIHdlIHdhbnQ/IGludGVyc2VjdGlvbiBwb2ludCBvbiB0aGUgcmF5IG9yIG9uIHRoZSBzZWdtZW50Pz9cblx0XHRcdFx0XHRcdC8vIHBvaW50OiByYXljYXN0ZXIucmF5LmF0KCBkaXN0YW5jZSApLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IGludGVyU2VnbWVudC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxcblx0XHRcdFx0XHRcdGluZGV4OiBpLFxuXHRcdFx0XHRcdFx0ZmFjZTogbnVsbCxcblx0XHRcdFx0XHRcdGZhY2VJbmRleDogbnVsbCxcblx0XHRcdFx0XHRcdG9iamVjdDogdGhpc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGRyYXdSYW5nZS5zdGFydCk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKHBvc2l0aW9uQXR0cmlidXRlLmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSBzdGFydCwgbCA9IGVuZCAtIDE7IGkgPCBsOyBpICs9IHN0ZXApIHtcblx0XHRcdFx0XHR2U3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSk7XG5cdFx0XHRcdFx0dkVuZC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMSk7XG5cblx0XHRcdFx0XHRjb25zdCBkaXN0U3EgPSBfcmF5JDEuZGlzdGFuY2VTcVRvU2VnbWVudCh2U3RhcnQsIHZFbmQsIGludGVyUmF5LCBpbnRlclNlZ21lbnQpO1xuXG5cdFx0XHRcdFx0aWYgKGRpc3RTcSA+IGxvY2FsVGhyZXNob2xkU3EpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdGludGVyUmF5LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTsgLy9Nb3ZlIGJhY2sgdG8gd29ybGQgc3BhY2UgZm9yIGRpc3RhbmNlIGNhbGN1bGF0aW9uXG5cblx0XHRcdFx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oaW50ZXJSYXkpO1xuXHRcdFx0XHRcdGlmIChkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhcikgY29udGludWU7XG5cdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0XHRcdC8vIFdoYXQgZG8gd2Ugd2FudD8gaW50ZXJzZWN0aW9uIHBvaW50IG9uIHRoZSByYXkgb3Igb24gdGhlIHNlZ21lbnQ/P1xuXHRcdFx0XHRcdFx0Ly8gcG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksXG5cdFx0XHRcdFx0XHRwb2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLFxuXHRcdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0XHRcdFx0ZmFjZUluZGV4OiBudWxsLFxuXHRcdFx0XHRcdFx0b2JqZWN0OiB0aGlzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdlb21ldHJ5LmlzR2VvbWV0cnkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobW9ycGhBdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKGtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1trZXlzWzBdXTtcblxuXHRcdFx0XHRpZiAobW9ycGhBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gW107XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IG0gPSAwLCBtbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVttXS5uYW1lIHx8IFN0cmluZyhtKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuYW1lXSA9IG07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cztcblxuXHRcdFx0aWYgKG1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG1vcnBoVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cbn1cblxuTGluZS5wcm90b3R5cGUuaXNMaW5lID0gdHJ1ZTtcblxuY29uc3QgX3N0YXJ0ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9lbmQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTGluZVNlZ21lbnRzIGV4dGVuZHMgTGluZSB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5LCBtYXRlcmlhbCkge1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy50eXBlID0gJ0xpbmVTZWdtZW50cyc7XG5cdH1cblxuXHRjb21wdXRlTGluZURpc3RhbmNlcygpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSkge1xuXHRcdFx0Ly8gd2UgYXNzdW1lIG5vbi1pbmRleGVkIGdlb21ldHJ5XG5cdFx0XHRpZiAoZ2VvbWV0cnkuaW5kZXggPT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBsaW5lRGlzdGFuY2VzID0gW107XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKz0gMikge1xuXHRcdFx0XHRcdF9zdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBpKTtcblxuXHRcdFx0XHRcdF9lbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSArIDEpO1xuXG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1tpXSA9IGkgPT09IDAgPyAwIDogbGluZURpc3RhbmNlc1tpIC0gMV07XG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1tpICsgMV0gPSBsaW5lRGlzdGFuY2VzW2ldICsgX3N0YXJ0LmRpc3RhbmNlVG8oX2VuZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGxpbmVEaXN0YW5jZXMsIDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdlb21ldHJ5LmlzR2VvbWV0cnkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5MaW5lU2VnbWVudHMucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzID0gdHJ1ZTtcblxuY2xhc3MgTGluZUxvb3AgZXh0ZW5kcyBMaW5lIHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnksIG1hdGVyaWFsKSB7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZUxvb3AnO1xuXHR9XG5cbn1cblxuTGluZUxvb3AucHJvdG90eXBlLmlzTGluZUxvb3AgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRzaXplOiA8ZmxvYXQ+LFxuICpcdHNpemVBdHRlbnVhdGlvbjogPGJvb2w+XG4gKlxuICogfVxuICovXG5cbmNsYXNzIFBvaW50c01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRzTWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpO1xuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblx0XHR0aGlzLnNpemUgPSAxO1xuXHRcdHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gdHJ1ZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXHRcdHRoaXMuc2l6ZSA9IHNvdXJjZS5zaXplO1xuXHRcdHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gc291cmNlLnNpemVBdHRlbnVhdGlvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cblBvaW50c01hdGVyaWFsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgX2ludmVyc2VNYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3JheSA9IC8qQF9fUFVSRV9fKi9uZXcgUmF5KCk7XG5cbmNvbnN0IF9zcGhlcmUgPSAvKkBfX1BVUkVfXyovbmV3IFNwaGVyZSgpO1xuXG5jb25zdCBfcG9zaXRpb24kMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBQb2ludHMgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCksIG1hdGVyaWFsID0gbmV3IFBvaW50c01hdGVyaWFsKCkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdQb2ludHMnO1xuXHRcdHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cdFx0dGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCB0aHJlc2hvbGQgPSByYXljYXN0ZXIucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7XG5cdFx0Y29uc3QgZHJhd1JhbmdlID0gZ2VvbWV0cnkuZHJhd1JhbmdlOyAvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXlcblxuXHRcdGlmIChnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRfc3BoZXJlLmNvcHkoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO1xuXG5cdFx0X3NwaGVyZS5hcHBseU1hdHJpeDQobWF0cml4V29ybGQpO1xuXG5cdFx0X3NwaGVyZS5yYWRpdXMgKz0gdGhyZXNob2xkO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm47IC8vXG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KG1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblxuXHRcdF9yYXkuY29weShyYXljYXN0ZXIucmF5KS5hcHBseU1hdHJpeDQoX2ludmVyc2VNYXRyaXgpO1xuXG5cdFx0Y29uc3QgbG9jYWxUaHJlc2hvbGQgPSB0aHJlc2hvbGQgLyAoKHRoaXMuc2NhbGUueCArIHRoaXMuc2NhbGUueSArIHRoaXMuc2NhbGUueikgLyAzKTtcblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZFNxID0gbG9jYWxUaHJlc2hvbGQgKiBsb2NhbFRocmVzaG9sZDtcblxuXHRcdGlmIChnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdGlmIChpbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGRyYXdSYW5nZS5zdGFydCk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4LmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoaSk7XG5cblx0XHRcdFx0XHRfcG9zaXRpb24kMi5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0cmlidXRlLCBhKTtcblxuXHRcdFx0XHRcdHRlc3RQb2ludChfcG9zaXRpb24kMiwgYSwgbG9jYWxUaHJlc2hvbGRTcSwgbWF0cml4V29ybGQsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KTtcblx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4ocG9zaXRpb25BdHRyaWJ1dGUuY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCk7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBsID0gZW5kOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0X3Bvc2l0aW9uJDIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZSwgaSk7XG5cblx0XHRcdFx0XHR0ZXN0UG9pbnQoX3Bvc2l0aW9uJDIsIGksIGxvY2FsVGhyZXNob2xkU3EsIG1hdHJpeFdvcmxkLCByYXljYXN0ZXIsIGludGVyc2VjdHMsIHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVNb3JwaFRhcmdldHMoKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXG5cdFx0aWYgKGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtb3JwaEF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzW2tleXNbMF1dO1xuXG5cdFx0XHRcdGlmIChtb3JwaEF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBbXTtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgbSA9IDAsIG1sID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBtIDwgbWw7IG0rKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IG1vcnBoQXR0cmlidXRlW21dLm5hbWUgfHwgU3RyaW5nKG0pO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25hbWVdID0gbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzO1xuXG5cdFx0XHRpZiAobW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG59XG5cblBvaW50cy5wcm90b3R5cGUuaXNQb2ludHMgPSB0cnVlO1xuXG5mdW5jdGlvbiB0ZXN0UG9pbnQocG9pbnQsIGluZGV4LCBsb2NhbFRocmVzaG9sZFNxLCBtYXRyaXhXb3JsZCwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCBvYmplY3QpIHtcblx0Y29uc3QgcmF5UG9pbnREaXN0YW5jZVNxID0gX3JheS5kaXN0YW5jZVNxVG9Qb2ludChwb2ludCk7XG5cblx0aWYgKHJheVBvaW50RGlzdGFuY2VTcSA8IGxvY2FsVGhyZXNob2xkU3EpIHtcblx0XHRjb25zdCBpbnRlcnNlY3RQb2ludCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRfcmF5LmNsb3Nlc3RQb2ludFRvUG9pbnQocG9pbnQsIGludGVyc2VjdFBvaW50KTtcblxuXHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NChtYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGludGVyc2VjdFBvaW50KTtcblx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRpbnRlcnNlY3RzLnB1c2goe1xuXHRcdFx0ZGlzdGFuY2U6IGRpc3RhbmNlLFxuXHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KHJheVBvaW50RGlzdGFuY2VTcSksXG5cdFx0XHRwb2ludDogaW50ZXJzZWN0UG9pbnQsXG5cdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0b2JqZWN0OiBvYmplY3Rcblx0XHR9KTtcblx0fVxufVxuXG5jbGFzcyBWaWRlb1RleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblx0Y29uc3RydWN0b3IodmlkZW8sIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSkge1xuXHRcdHN1cGVyKHZpZGVvLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkpO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtaW5GaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cdFx0dGhpcy5tYWdGaWx0ZXIgPSBtYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1hZ0ZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGZ1bmN0aW9uIHVwZGF0ZVZpZGVvKCkge1xuXHRcdFx0c2NvcGUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0dmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh1cGRhdGVWaWRlbyk7XG5cdFx0fVxuXG5cdFx0aWYgKCdyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrJyBpbiB2aWRlbykge1xuXHRcdFx0dmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh1cGRhdGVWaWRlbyk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyk7XG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cdFx0Y29uc3QgdmlkZW8gPSB0aGlzLmltYWdlO1xuXHRcdGNvbnN0IGhhc1ZpZGVvRnJhbWVDYWxsYmFjayA9ICgncmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaycgaW4gdmlkZW8pO1xuXG5cdFx0aWYgKGhhc1ZpZGVvRnJhbWVDYWxsYmFjayA9PT0gZmFsc2UgJiYgdmlkZW8ucmVhZHlTdGF0ZSA+PSB2aWRlby5IQVZFX0NVUlJFTlRfREFUQSkge1xuXHRcdFx0dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cbn1cblxuVmlkZW9UZXh0dXJlLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIEZyYW1lYnVmZmVyVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpIHtcblx0XHRzdXBlcih7XG5cdFx0XHR3aWR0aCxcblx0XHRcdGhlaWdodFxuXHRcdH0pO1xuXHRcdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHRcdHRoaXMubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblx0XHR0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fVxuXG59XG5cbkZyYW1lYnVmZmVyVGV4dHVyZS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBDb21wcmVzc2VkVGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRjb25zdHJ1Y3RvcihtaXBtYXBzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29kaW5nKSB7XG5cdFx0c3VwZXIobnVsbCwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyk7XG5cdFx0dGhpcy5pbWFnZSA9IHtcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0fTtcblx0XHR0aGlzLm1pcG1hcHMgPSBtaXBtYXBzOyAvLyBubyBmbGlwcGluZyBmb3IgY3ViZSB0ZXh0dXJlc1xuXHRcdC8vIChhbHNvIGZsaXBwaW5nIGRvZXNuJ3Qgd29yayBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyApXG5cblx0XHR0aGlzLmZsaXBZID0gZmFsc2U7IC8vIGNhbid0IGdlbmVyYXRlIG1pcG1hcHMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXNcblx0XHQvLyBtaXBzIG11c3QgYmUgZW1iZWRkZWQgaW4gRERTIGZpbGVzXG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHR9XG5cbn1cblxuQ29tcHJlc3NlZFRleHR1cmUucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBDYW52YXNUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yKGNhbnZhcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5KSB7XG5cdFx0c3VwZXIoY2FudmFzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkpO1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cbn1cblxuQ2FudmFzVGV4dHVyZS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgQ2lyY2xlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHNlZ21lbnRzID0gOCwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDaXJjbGVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRzZWdtZW50czogc2VnbWVudHMsXG5cdFx0XHR0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LFxuXHRcdFx0dGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoXG5cdFx0fTtcblx0XHRzZWdtZW50cyA9IE1hdGgubWF4KDMsIHNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTsgLy8gY2VudGVyIHBvaW50XG5cblx0XHR2ZXJ0aWNlcy5wdXNoKDAsIDAsIDApO1xuXHRcdG5vcm1hbHMucHVzaCgwLCAwLCAxKTtcblx0XHR1dnMucHVzaCgwLjUsIDAuNSk7XG5cblx0XHRmb3IgKGxldCBzID0gMCwgaSA9IDM7IHMgPD0gc2VnbWVudHM7IHMrKywgaSArPSAzKSB7XG5cdFx0XHRjb25zdCBzZWdtZW50ID0gdGhldGFTdGFydCArIHMgLyBzZWdtZW50cyAqIHRoZXRhTGVuZ3RoOyAvLyB2ZXJ0ZXhcblxuXHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBNYXRoLmNvcyhzZWdtZW50KTtcblx0XHRcdHZlcnRleC55ID0gcmFkaXVzICogTWF0aC5zaW4oc2VnbWVudCk7XG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyBub3JtYWxcblxuXHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpOyAvLyB1dnNcblxuXHRcdFx0dXYueCA9ICh2ZXJ0aWNlc1tpXSAvIHJhZGl1cyArIDEpIC8gMjtcblx0XHRcdHV2LnkgPSAodmVydGljZXNbaSArIDFdIC8gcmFkaXVzICsgMSkgLyAyO1xuXHRcdFx0dXZzLnB1c2godXYueCwgdXYueSk7XG5cdFx0fSAvLyBpbmRpY2VzXG5cblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGluZGljZXMucHVzaChpLCBpICsgMSwgMCk7XG5cdFx0fSAvLyBidWlsZCBnZW9tZXRyeVxuXG5cblx0XHR0aGlzLnNldEluZGV4KGluZGljZXMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBDaXJjbGVHZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS5zZWdtZW50cywgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoKTtcblx0fVxuXG59XG5cbmNsYXNzIEN5bGluZGVyR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1c1RvcCA9IDEsIHJhZGl1c0JvdHRvbSA9IDEsIGhlaWdodCA9IDEsIHJhZGlhbFNlZ21lbnRzID0gOCwgaGVpZ2h0U2VnbWVudHMgPSAxLCBvcGVuRW5kZWQgPSBmYWxzZSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDeWxpbmRlckdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXNUb3A6IHJhZGl1c1RvcCxcblx0XHRcdHJhZGl1c0JvdHRvbTogcmFkaXVzQm90dG9tLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRvcGVuRW5kZWQ6IG9wZW5FbmRlZCxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRyYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IocmFkaWFsU2VnbWVudHMpO1xuXHRcdGhlaWdodFNlZ21lbnRzID0gTWF0aC5mbG9vcihoZWlnaHRTZWdtZW50cyk7IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTsgLy8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBpbmRleEFycmF5ID0gW107XG5cdFx0Y29uc3QgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cdFx0bGV0IGdyb3VwU3RhcnQgPSAwOyAvLyBnZW5lcmF0ZSBnZW9tZXRyeVxuXG5cdFx0Z2VuZXJhdGVUb3JzbygpO1xuXG5cdFx0aWYgKG9wZW5FbmRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChyYWRpdXNUb3AgPiAwKSBnZW5lcmF0ZUNhcCh0cnVlKTtcblx0XHRcdGlmIChyYWRpdXNCb3R0b20gPiAwKSBnZW5lcmF0ZUNhcChmYWxzZSk7XG5cdFx0fSAvLyBidWlsZCBnZW9tZXRyeVxuXG5cblx0XHR0aGlzLnNldEluZGV4KGluZGljZXMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlVG9yc28oKSB7XG5cdFx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGxldCBncm91cENvdW50ID0gMDsgLy8gdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWxcblxuXHRcdFx0Y29uc3Qgc2xvcGUgPSAocmFkaXVzQm90dG9tIC0gcmFkaXVzVG9wKSAvIGhlaWdodDsgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0XHRmb3IgKGxldCB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSsrKSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4Um93ID0gW107XG5cdFx0XHRcdGNvbnN0IHYgPSB5IC8gaGVpZ2h0U2VnbWVudHM7IC8vIGNhbGN1bGF0ZSB0aGUgcmFkaXVzIG9mIHRoZSBjdXJyZW50IHJvd1xuXG5cdFx0XHRcdGNvbnN0IHJhZGl1cyA9IHYgKiAocmFkaXVzQm90dG9tIC0gcmFkaXVzVG9wKSArIHJhZGl1c1RvcDtcblxuXHRcdFx0XHRmb3IgKGxldCB4ID0gMDsgeCA8PSByYWRpYWxTZWdtZW50czsgeCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgdSA9IHggLyByYWRpYWxTZWdtZW50cztcblx0XHRcdFx0XHRjb25zdCB0aGV0YSA9IHUgKiB0aGV0YUxlbmd0aCArIHRoZXRhU3RhcnQ7XG5cdFx0XHRcdFx0Y29uc3Qgc2luVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cdFx0XHRcdFx0Y29uc3QgY29zVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7IC8vIHZlcnRleFxuXG5cdFx0XHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBzaW5UaGV0YTtcblx0XHRcdFx0XHR2ZXJ0ZXgueSA9IC12ICogaGVpZ2h0ICsgaGFsZkhlaWdodDtcblx0XHRcdFx0XHR2ZXJ0ZXgueiA9IHJhZGl1cyAqIGNvc1RoZXRhO1xuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbFxuXG5cdFx0XHRcdFx0bm9ybWFsLnNldChzaW5UaGV0YSwgc2xvcGUsIGNvc1RoZXRhKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7IC8vIHV2XG5cblx0XHRcdFx0XHR1dnMucHVzaCh1LCAxIC0gdik7IC8vIHNhdmUgaW5kZXggb2YgdmVydGV4IGluIHJlc3BlY3RpdmUgcm93XG5cblx0XHRcdFx0XHRpbmRleFJvdy5wdXNoKGluZGV4KyspO1xuXHRcdFx0XHR9IC8vIG5vdyBzYXZlIHZlcnRpY2VzIG9mIHRoZSByb3cgaW4gb3VyIGluZGV4IGFycmF5XG5cblxuXHRcdFx0XHRpbmRleEFycmF5LnB1c2goaW5kZXhSb3cpO1xuXHRcdFx0fSAvLyBnZW5lcmF0ZSBpbmRpY2VzXG5cblxuXHRcdFx0Zm9yIChsZXQgeCA9IDA7IHggPCByYWRpYWxTZWdtZW50czsgeCsrKSB7XG5cdFx0XHRcdGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0U2VnbWVudHM7IHkrKykge1xuXHRcdFx0XHRcdC8vIHdlIHVzZSB0aGUgaW5kZXggYXJyYXkgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IGluZGljZXNcblx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXhBcnJheVt5XVt4XTtcblx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXhBcnJheVt5ICsgMV1beF07XG5cdFx0XHRcdFx0Y29uc3QgYyA9IGluZGV4QXJyYXlbeSArIDFdW3ggKyAxXTtcblx0XHRcdFx0XHRjb25zdCBkID0gaW5kZXhBcnJheVt5XVt4ICsgMV07IC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpOyAvLyB1cGRhdGUgZ3JvdXAgY291bnRlclxuXG5cdFx0XHRcdFx0Z3JvdXBDb3VudCArPSA2O1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0XG5cblxuXHRcdFx0c2NvcGUuYWRkR3JvdXAoZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgMCk7IC8vIGNhbGN1bGF0ZSBuZXcgc3RhcnQgdmFsdWUgZm9yIGdyb3Vwc1xuXG5cdFx0XHRncm91cFN0YXJ0ICs9IGdyb3VwQ291bnQ7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVDYXAodG9wKSB7XG5cdFx0XHQvLyBzYXZlIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2VudGVyIHZlcnRleFxuXHRcdFx0Y29uc3QgY2VudGVySW5kZXhTdGFydCA9IGluZGV4O1xuXHRcdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpO1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGxldCBncm91cENvdW50ID0gMDtcblx0XHRcdGNvbnN0IHJhZGl1cyA9IHRvcCA9PT0gdHJ1ZSA/IHJhZGl1c1RvcCA6IHJhZGl1c0JvdHRvbTtcblx0XHRcdGNvbnN0IHNpZ24gPSB0b3AgPT09IHRydWUgPyAxIDogLTE7IC8vIGZpcnN0IHdlIGdlbmVyYXRlIHRoZSBjZW50ZXIgdmVydGV4IGRhdGEgb2YgdGhlIGNhcC5cblx0XHRcdC8vIGJlY2F1c2UgdGhlIGdlb21ldHJ5IG5lZWRzIG9uZSBzZXQgb2YgdXZzIHBlciBmYWNlLFxuXHRcdFx0Ly8gd2UgbXVzdCBnZW5lcmF0ZSBhIGNlbnRlciB2ZXJ0ZXggcGVyIGZhY2Uvc2VnbWVudFxuXG5cdFx0XHRmb3IgKGxldCB4ID0gMTsgeCA8PSByYWRpYWxTZWdtZW50czsgeCsrKSB7XG5cdFx0XHRcdC8vIHZlcnRleFxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKDAsIGhhbGZIZWlnaHQgKiBzaWduLCAwKTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIHNpZ24sIDApOyAvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKDAuNSwgMC41KTsgLy8gaW5jcmVhc2UgaW5kZXhcblxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fSAvLyBzYXZlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjZW50ZXIgdmVydGV4XG5cblxuXHRcdFx0Y29uc3QgY2VudGVySW5kZXhFbmQgPSBpbmRleDsgLy8gbm93IHdlIGdlbmVyYXRlIHRoZSBzdXJyb3VuZGluZyB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAobGV0IHggPSAwOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4KyspIHtcblx0XHRcdFx0Y29uc3QgdSA9IHggLyByYWRpYWxTZWdtZW50cztcblx0XHRcdFx0Y29uc3QgdGhldGEgPSB1ICogdGhldGFMZW5ndGggKyB0aGV0YVN0YXJ0O1xuXHRcdFx0XHRjb25zdCBjb3NUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcblx0XHRcdFx0Y29uc3Qgc2luVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7IC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gcmFkaXVzICogc2luVGhldGE7XG5cdFx0XHRcdHZlcnRleC55ID0gaGFsZkhlaWdodCAqIHNpZ247XG5cdFx0XHRcdHZlcnRleC56ID0gcmFkaXVzICogY29zVGhldGE7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7IC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCgwLCBzaWduLCAwKTsgLy8gdXZcblxuXHRcdFx0XHR1di54ID0gY29zVGhldGEgKiAwLjUgKyAwLjU7XG5cdFx0XHRcdHV2LnkgPSBzaW5UaGV0YSAqIDAuNSAqIHNpZ24gKyAwLjU7XG5cdFx0XHRcdHV2cy5wdXNoKHV2LngsIHV2LnkpOyAvLyBpbmNyZWFzZSBpbmRleFxuXG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9IC8vIGdlbmVyYXRlIGluZGljZXNcblxuXG5cdFx0XHRmb3IgKGxldCB4ID0gMDsgeCA8IHJhZGlhbFNlZ21lbnRzOyB4KyspIHtcblx0XHRcdFx0Y29uc3QgYyA9IGNlbnRlckluZGV4U3RhcnQgKyB4O1xuXHRcdFx0XHRjb25zdCBpID0gY2VudGVySW5kZXhFbmQgKyB4O1xuXG5cdFx0XHRcdGlmICh0b3AgPT09IHRydWUpIHtcblx0XHRcdFx0XHQvLyBmYWNlIHRvcFxuXHRcdFx0XHRcdGluZGljZXMucHVzaChpLCBpICsgMSwgYyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZmFjZSBib3R0b21cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goaSArIDEsIGksIGMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z3JvdXBDb3VudCArPSAzO1xuXHRcdFx0fSAvLyBhZGQgYSBncm91cCB0byB0aGUgZ2VvbWV0cnkuIHRoaXMgd2lsbCBlbnN1cmUgbXVsdGkgbWF0ZXJpYWwgc3VwcG9ydFxuXG5cblx0XHRcdHNjb3BlLmFkZEdyb3VwKGdyb3VwU3RhcnQsIGdyb3VwQ291bnQsIHRvcCA9PT0gdHJ1ZSA/IDEgOiAyKTsgLy8gY2FsY3VsYXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzXG5cblx0XHRcdGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgQ3lsaW5kZXJHZW9tZXRyeShkYXRhLnJhZGl1c1RvcCwgZGF0YS5yYWRpdXNCb3R0b20sIGRhdGEuaGVpZ2h0LCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzLCBkYXRhLm9wZW5FbmRlZCwgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoKTtcblx0fVxuXG59XG5cbmNsYXNzIENvbmVHZW9tZXRyeSBleHRlbmRzIEN5bGluZGVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCBoZWlnaHQgPSAxLCByYWRpYWxTZWdtZW50cyA9IDgsIGhlaWdodFNlZ21lbnRzID0gMSwgb3BlbkVuZGVkID0gZmFsc2UsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKiAyKSB7XG5cdFx0c3VwZXIoMCwgcmFkaXVzLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCk7XG5cdFx0dGhpcy50eXBlID0gJ0NvbmVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdG9wZW5FbmRlZDogb3BlbkVuZGVkLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgQ29uZUdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLmhlaWdodCwgZGF0YS5yYWRpYWxTZWdtZW50cywgZGF0YS5oZWlnaHRTZWdtZW50cywgZGF0YS5vcGVuRW5kZWQsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCk7XG5cdH1cblxufVxuXG5jbGFzcyBQb2x5aGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHZlcnRpY2VzID0gW10sIGluZGljZXMgPSBbXSwgcmFkaXVzID0gMSwgZGV0YWlsID0gMCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BvbHloZWRyb25HZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0dmVydGljZXM6IHZlcnRpY2VzLFxuXHRcdFx0aW5kaWNlczogaW5kaWNlcyxcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9OyAvLyBkZWZhdWx0IGJ1ZmZlciBkYXRhXG5cblx0XHRjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBbXTtcblx0XHRjb25zdCB1dkJ1ZmZlciA9IFtdOyAvLyB0aGUgc3ViZGl2aXNpb24gY3JlYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBkYXRhXG5cblx0XHRzdWJkaXZpZGUoZGV0YWlsKTsgLy8gYWxsIHZlcnRpY2VzIHNob3VsZCBsaWUgb24gYSBjb25jZXB0dWFsIHNwaGVyZSB3aXRoIGEgZ2l2ZW4gcmFkaXVzXG5cblx0XHRhcHBseVJhZGl1cyhyYWRpdXMpOyAvLyBmaW5hbGx5LCBjcmVhdGUgdGhlIHV2IGRhdGFcblxuXHRcdGdlbmVyYXRlVVZzKCk7IC8vIGJ1aWxkIG5vbi1pbmRleGVkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0ZXhCdWZmZXIsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGV4QnVmZmVyLnNsaWNlKCksIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1dkJ1ZmZlciwgMikpO1xuXG5cdFx0aWYgKGRldGFpbCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOyAvLyBmbGF0IG5vcm1hbHNcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7IC8vIHNtb290aCBub3JtYWxzXG5cdFx0fSAvLyBoZWxwZXIgZnVuY3Rpb25zXG5cblxuXHRcdGZ1bmN0aW9uIHN1YmRpdmlkZShkZXRhaWwpIHtcblx0XHRcdGNvbnN0IGEgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgYiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBjID0gbmV3IFZlY3RvcjMoKTsgLy8gaXRlcmF0ZSBvdmVyIGFsbCBmYWNlcyBhbmQgYXBwbHkgYSBzdWJkaXZpc29uIHdpdGggdGhlIGdpdmVuIGRldGFpbCB2YWx1ZVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcblx0XHRcdFx0Ly8gZ2V0IHRoZSB2ZXJ0aWNlcyBvZiB0aGUgZmFjZVxuXHRcdFx0XHRnZXRWZXJ0ZXhCeUluZGV4KGluZGljZXNbaSArIDBdLCBhKTtcblx0XHRcdFx0Z2V0VmVydGV4QnlJbmRleChpbmRpY2VzW2kgKyAxXSwgYik7XG5cdFx0XHRcdGdldFZlcnRleEJ5SW5kZXgoaW5kaWNlc1tpICsgMl0sIGMpOyAvLyBwZXJmb3JtIHN1YmRpdmlzaW9uXG5cblx0XHRcdFx0c3ViZGl2aWRlRmFjZShhLCBiLCBjLCBkZXRhaWwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHN1YmRpdmlkZUZhY2UoYSwgYiwgYywgZGV0YWlsKSB7XG5cdFx0XHRjb25zdCBjb2xzID0gZGV0YWlsICsgMTsgLy8gd2UgdXNlIHRoaXMgbXVsdGlkaW1lbnNpb25hbCBhcnJheSBhcyBhIGRhdGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyB0aGUgc3ViZGl2aXNpb25cblxuXHRcdFx0Y29uc3QgdiA9IFtdOyAvLyBjb25zdHJ1Y3QgYWxsIG9mIHRoZSB2ZXJ0aWNlcyBmb3IgdGhpcyBzdWJkaXZpc2lvblxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBjb2xzOyBpKyspIHtcblx0XHRcdFx0dltpXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBhaiA9IGEuY2xvbmUoKS5sZXJwKGMsIGkgLyBjb2xzKTtcblx0XHRcdFx0Y29uc3QgYmogPSBiLmNsb25lKCkubGVycChjLCBpIC8gY29scyk7XG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBjb2xzIC0gaTtcblxuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByb3dzOyBqKyspIHtcblx0XHRcdFx0XHRpZiAoaiA9PT0gMCAmJiBpID09PSBjb2xzKSB7XG5cdFx0XHRcdFx0XHR2W2ldW2pdID0gYWo7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZbaV1bal0gPSBhai5jbG9uZSgpLmxlcnAoYmosIGogLyByb3dzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gY29uc3RydWN0IGFsbCBvZiB0aGUgZmFjZXNcblxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IDIgKiAoY29scyAtIGkpIC0gMTsgaisrKSB7XG5cdFx0XHRcdFx0Y29uc3QgayA9IE1hdGguZmxvb3IoaiAvIDIpO1xuXG5cdFx0XHRcdFx0aWYgKGogJSAyID09PSAwKSB7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KHZbaV1bayArIDFdKTtcblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgodltpICsgMV1ba10pO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCh2W2ldW2tdKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCh2W2ldW2sgKyAxXSk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KHZbaSArIDFdW2sgKyAxXSk7XG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KHZbaSArIDFdW2tdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhcHBseVJhZGl1cyhyYWRpdXMpIHtcblx0XHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7IC8vIGl0ZXJhdGUgb3ZlciB0aGUgZW50aXJlIGJ1ZmZlciBhbmQgYXBwbHkgdGhlIHJhZGl1cyB0byBlYWNoIHZlcnRleFxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleEJ1ZmZlci5sZW5ndGg7IGkgKz0gMykge1xuXHRcdFx0XHR2ZXJ0ZXgueCA9IHZlcnRleEJ1ZmZlcltpICsgMF07XG5cdFx0XHRcdHZlcnRleC55ID0gdmVydGV4QnVmZmVyW2kgKyAxXTtcblx0XHRcdFx0dmVydGV4LnogPSB2ZXJ0ZXhCdWZmZXJbaSArIDJdO1xuXHRcdFx0XHR2ZXJ0ZXgubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIocmFkaXVzKTtcblx0XHRcdFx0dmVydGV4QnVmZmVyW2kgKyAwXSA9IHZlcnRleC54O1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJbaSArIDFdID0gdmVydGV4Lnk7XG5cdFx0XHRcdHZlcnRleEJ1ZmZlcltpICsgMl0gPSB2ZXJ0ZXguejtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVVWcygpIHtcblx0XHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHRcdHZlcnRleC54ID0gdmVydGV4QnVmZmVyW2kgKyAwXTtcblx0XHRcdFx0dmVydGV4LnkgPSB2ZXJ0ZXhCdWZmZXJbaSArIDFdO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHZlcnRleEJ1ZmZlcltpICsgMl07XG5cdFx0XHRcdGNvbnN0IHUgPSBhemltdXRoKHZlcnRleCkgLyAyIC8gTWF0aC5QSSArIDAuNTtcblx0XHRcdFx0Y29uc3QgdiA9IGluY2xpbmF0aW9uKHZlcnRleCkgLyBNYXRoLlBJICsgMC41O1xuXHRcdFx0XHR1dkJ1ZmZlci5wdXNoKHUsIDEgLSB2KTtcblx0XHRcdH1cblxuXHRcdFx0Y29ycmVjdFVWcygpO1xuXHRcdFx0Y29ycmVjdFNlYW0oKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb3JyZWN0U2VhbSgpIHtcblx0XHRcdC8vIGhhbmRsZSBjYXNlIHdoZW4gZmFjZSBzdHJhZGRsZXMgdGhlIHNlYW0sIHNlZSAjMzI2OVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB1dkJ1ZmZlci5sZW5ndGg7IGkgKz0gNikge1xuXHRcdFx0XHQvLyB1diBkYXRhIG9mIGEgc2luZ2xlIGZhY2Vcblx0XHRcdFx0Y29uc3QgeDAgPSB1dkJ1ZmZlcltpICsgMF07XG5cdFx0XHRcdGNvbnN0IHgxID0gdXZCdWZmZXJbaSArIDJdO1xuXHRcdFx0XHRjb25zdCB4MiA9IHV2QnVmZmVyW2kgKyA0XTtcblx0XHRcdFx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoeDAsIHgxLCB4Mik7XG5cdFx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKHgwLCB4MSwgeDIpOyAvLyAwLjkgaXMgc29tZXdoYXQgYXJiaXRyYXJ5XG5cblx0XHRcdFx0aWYgKG1heCA+IDAuOSAmJiBtaW4gPCAwLjEpIHtcblx0XHRcdFx0XHRpZiAoeDAgPCAwLjIpIHV2QnVmZmVyW2kgKyAwXSArPSAxO1xuXHRcdFx0XHRcdGlmICh4MSA8IDAuMikgdXZCdWZmZXJbaSArIDJdICs9IDE7XG5cdFx0XHRcdFx0aWYgKHgyIDwgMC4yKSB1dkJ1ZmZlcltpICsgNF0gKz0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hWZXJ0ZXgodmVydGV4KSB7XG5cdFx0XHR2ZXJ0ZXhCdWZmZXIucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRWZXJ0ZXhCeUluZGV4KGluZGV4LCB2ZXJ0ZXgpIHtcblx0XHRcdGNvbnN0IHN0cmlkZSA9IGluZGV4ICogMztcblx0XHRcdHZlcnRleC54ID0gdmVydGljZXNbc3RyaWRlICsgMF07XG5cdFx0XHR2ZXJ0ZXgueSA9IHZlcnRpY2VzW3N0cmlkZSArIDFdO1xuXHRcdFx0dmVydGV4LnogPSB2ZXJ0aWNlc1tzdHJpZGUgKyAyXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb3JyZWN0VVZzKCkge1xuXHRcdFx0Y29uc3QgYSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBiID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgY2VudHJvaWQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgdXZBID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdGNvbnN0IHV2QiA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRjb25zdCB1dkMgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDksIGogKz0gNikge1xuXHRcdFx0XHRhLnNldCh2ZXJ0ZXhCdWZmZXJbaSArIDBdLCB2ZXJ0ZXhCdWZmZXJbaSArIDFdLCB2ZXJ0ZXhCdWZmZXJbaSArIDJdKTtcblx0XHRcdFx0Yi5zZXQodmVydGV4QnVmZmVyW2kgKyAzXSwgdmVydGV4QnVmZmVyW2kgKyA0XSwgdmVydGV4QnVmZmVyW2kgKyA1XSk7XG5cdFx0XHRcdGMuc2V0KHZlcnRleEJ1ZmZlcltpICsgNl0sIHZlcnRleEJ1ZmZlcltpICsgN10sIHZlcnRleEJ1ZmZlcltpICsgOF0pO1xuXHRcdFx0XHR1dkEuc2V0KHV2QnVmZmVyW2ogKyAwXSwgdXZCdWZmZXJbaiArIDFdKTtcblx0XHRcdFx0dXZCLnNldCh1dkJ1ZmZlcltqICsgMl0sIHV2QnVmZmVyW2ogKyAzXSk7XG5cdFx0XHRcdHV2Qy5zZXQodXZCdWZmZXJbaiArIDRdLCB1dkJ1ZmZlcltqICsgNV0pO1xuXHRcdFx0XHRjZW50cm9pZC5jb3B5KGEpLmFkZChiKS5hZGQoYykuZGl2aWRlU2NhbGFyKDMpO1xuXHRcdFx0XHRjb25zdCBhemkgPSBhemltdXRoKGNlbnRyb2lkKTtcblx0XHRcdFx0Y29ycmVjdFVWKHV2QSwgaiArIDAsIGEsIGF6aSk7XG5cdFx0XHRcdGNvcnJlY3RVVih1dkIsIGogKyAyLCBiLCBhemkpO1xuXHRcdFx0XHRjb3JyZWN0VVYodXZDLCBqICsgNCwgYywgYXppKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb3JyZWN0VVYodXYsIHN0cmlkZSwgdmVjdG9yLCBhemltdXRoKSB7XG5cdFx0XHRpZiAoYXppbXV0aCA8IDAgJiYgdXYueCA9PT0gMSkge1xuXHRcdFx0XHR1dkJ1ZmZlcltzdHJpZGVdID0gdXYueCAtIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2ZWN0b3IueCA9PT0gMCAmJiB2ZWN0b3IueiA9PT0gMCkge1xuXHRcdFx0XHR1dkJ1ZmZlcltzdHJpZGVdID0gYXppbXV0aCAvIDIgLyBNYXRoLlBJICsgMC41O1xuXHRcdFx0fVxuXHRcdH0gLy8gQW5nbGUgYXJvdW5kIHRoZSBZIGF4aXMsIGNvdW50ZXItY2xvY2t3aXNlIHdoZW4gbG9va2luZyBmcm9tIGFib3ZlLlxuXG5cblx0XHRmdW5jdGlvbiBhemltdXRoKHZlY3Rvcikge1xuXHRcdFx0cmV0dXJuIE1hdGguYXRhbjIodmVjdG9yLnosIC12ZWN0b3IueCk7XG5cdFx0fSAvLyBBbmdsZSBhYm92ZSB0aGUgWFogcGxhbmUuXG5cblxuXHRcdGZ1bmN0aW9uIGluY2xpbmF0aW9uKHZlY3Rvcikge1xuXHRcdFx0cmV0dXJuIE1hdGguYXRhbjIoLXZlY3Rvci55LCBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci56ICogdmVjdG9yLnopKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgUG9seWhlZHJvbkdlb21ldHJ5KGRhdGEudmVydGljZXMsIGRhdGEuaW5kaWNlcywgZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlscyk7XG5cdH1cblxufVxuXG5jbGFzcyBEb2RlY2FoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIGRldGFpbCA9IDApIHtcblx0XHRjb25zdCB0ID0gKDEgKyBNYXRoLnNxcnQoNSkpIC8gMjtcblx0XHRjb25zdCByID0gMSAvIHQ7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbLy8gKMKxMSwgwrExLCDCsTEpXG5cdFx0LTEsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgMSwgLTEsIC0xLCAxLCAxLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAxLCAxLCAtMSwgMSwgMSwgMSwgLy8gKDAsIMKxMS/PhiwgwrHPhilcblx0XHQwLCAtciwgLXQsIDAsIC1yLCB0LCAwLCByLCAtdCwgMCwgciwgdCwgLy8gKMKxMS/PhiwgwrHPhiwgMClcblx0XHQtciwgLXQsIDAsIC1yLCB0LCAwLCByLCAtdCwgMCwgciwgdCwgMCwgLy8gKMKxz4YsIDAsIMKxMS/Philcblx0XHQtdCwgMCwgLXIsIHQsIDAsIC1yLCAtdCwgMCwgciwgdCwgMCwgcl07XG5cdFx0Y29uc3QgaW5kaWNlcyA9IFszLCAxMSwgNywgMywgNywgMTUsIDMsIDE1LCAxMywgNywgMTksIDE3LCA3LCAxNywgNiwgNywgNiwgMTUsIDE3LCA0LCA4LCAxNywgOCwgMTAsIDE3LCAxMCwgNiwgOCwgMCwgMTYsIDgsIDE2LCAyLCA4LCAyLCAxMCwgMCwgMTIsIDEsIDAsIDEsIDE4LCAwLCAxOCwgMTYsIDYsIDEwLCAyLCA2LCAyLCAxMywgNiwgMTMsIDE1LCAyLCAxNiwgMTgsIDIsIDE4LCAzLCAyLCAzLCAxMywgMTgsIDEsIDksIDE4LCA5LCAxMSwgMTgsIDExLCAzLCA0LCAxNCwgMTIsIDQsIDEyLCAwLCA0LCAwLCA4LCAxMSwgOSwgNSwgMTEsIDUsIDE5LCAxMSwgMTksIDcsIDE5LCA1LCAxNCwgMTksIDE0LCA0LCAxOSwgNCwgMTcsIDEsIDEyLCAxNCwgMSwgMTQsIDUsIDEsIDUsIDldO1xuXHRcdHN1cGVyKHZlcnRpY2VzLCBpbmRpY2VzLCByYWRpdXMsIGRldGFpbCk7XG5cdFx0dGhpcy50eXBlID0gJ0RvZGVjYWhlZHJvbkdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBEb2RlY2FoZWRyb25HZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwpO1xuXHR9XG5cbn1cblxuY29uc3QgX3YwID0gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YxJDEgPSBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3RyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKCk7XG5cbmNsYXNzIEVkZ2VzR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5ID0gbnVsbCwgdGhyZXNob2xkQW5nbGUgPSAxKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnRWRnZXNHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5LFxuXHRcdFx0dGhyZXNob2xkQW5nbGU6IHRocmVzaG9sZEFuZ2xlXG5cdFx0fTtcblxuXHRcdGlmIChnZW9tZXRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcHJlY2lzaW9uUG9pbnRzID0gNDtcblx0XHRcdGNvbnN0IHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb25Qb2ludHMpO1xuXHRcdFx0Y29uc3QgdGhyZXNob2xkRG90ID0gTWF0aC5jb3MoREVHMlJBRCAqIHRocmVzaG9sZEFuZ2xlKTtcblx0XHRcdGNvbnN0IGluZGV4QXR0ciA9IGdlb21ldHJ5LmdldEluZGV4KCk7XG5cdFx0XHRjb25zdCBwb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XG5cdFx0XHRjb25zdCBpbmRleENvdW50ID0gaW5kZXhBdHRyID8gaW5kZXhBdHRyLmNvdW50IDogcG9zaXRpb25BdHRyLmNvdW50O1xuXHRcdFx0Y29uc3QgaW5kZXhBcnIgPSBbMCwgMCwgMF07XG5cdFx0XHRjb25zdCB2ZXJ0S2V5cyA9IFsnYScsICdiJywgJ2MnXTtcblx0XHRcdGNvbnN0IGhhc2hlcyA9IG5ldyBBcnJheSgzKTtcblx0XHRcdGNvbnN0IGVkZ2VEYXRhID0ge307XG5cdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkgKz0gMykge1xuXHRcdFx0XHRpZiAoaW5kZXhBdHRyKSB7XG5cdFx0XHRcdFx0aW5kZXhBcnJbMF0gPSBpbmRleEF0dHIuZ2V0WChpKTtcblx0XHRcdFx0XHRpbmRleEFyclsxXSA9IGluZGV4QXR0ci5nZXRYKGkgKyAxKTtcblx0XHRcdFx0XHRpbmRleEFyclsyXSA9IGluZGV4QXR0ci5nZXRYKGkgKyAyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpbmRleEFyclswXSA9IGk7XG5cdFx0XHRcdFx0aW5kZXhBcnJbMV0gPSBpICsgMTtcblx0XHRcdFx0XHRpbmRleEFyclsyXSA9IGkgKyAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdGEsXG5cdFx0XHRcdFx0Yixcblx0XHRcdFx0XHRjXG5cdFx0XHRcdH0gPSBfdHJpYW5nbGU7XG5cdFx0XHRcdGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHIsIGluZGV4QXJyWzBdKTtcblx0XHRcdFx0Yi5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0ciwgaW5kZXhBcnJbMV0pO1xuXHRcdFx0XHRjLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyLCBpbmRleEFyclsyXSk7XG5cblx0XHRcdFx0X3RyaWFuZ2xlLmdldE5vcm1hbChfbm9ybWFsKTsgLy8gY3JlYXRlIGhhc2hlcyBmb3IgdGhlIGVkZ2UgZnJvbSB0aGUgdmVydGljZXNcblxuXG5cdFx0XHRcdGhhc2hlc1swXSA9IGAke01hdGgucm91bmQoYS54ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGEueSAqIHByZWNpc2lvbil9LCR7TWF0aC5yb3VuZChhLnogKiBwcmVjaXNpb24pfWA7XG5cdFx0XHRcdGhhc2hlc1sxXSA9IGAke01hdGgucm91bmQoYi54ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGIueSAqIHByZWNpc2lvbil9LCR7TWF0aC5yb3VuZChiLnogKiBwcmVjaXNpb24pfWA7XG5cdFx0XHRcdGhhc2hlc1syXSA9IGAke01hdGgucm91bmQoYy54ICogcHJlY2lzaW9uKX0sJHtNYXRoLnJvdW5kKGMueSAqIHByZWNpc2lvbil9LCR7TWF0aC5yb3VuZChjLnogKiBwcmVjaXNpb24pfWA7IC8vIHNraXAgZGVnZW5lcmF0ZSB0cmlhbmdsZXNcblxuXHRcdFx0XHRpZiAoaGFzaGVzWzBdID09PSBoYXNoZXNbMV0gfHwgaGFzaGVzWzFdID09PSBoYXNoZXNbMl0gfHwgaGFzaGVzWzJdID09PSBoYXNoZXNbMF0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fSAvLyBpdGVyYXRlIG92ZXIgZXZlcnkgZWRnZVxuXG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcblx0XHRcdFx0XHQvLyBnZXQgdGhlIGZpcnN0IGFuZCBuZXh0IHZlcnRleCBtYWtpbmcgdXAgdGhlIGVkZ2Vcblx0XHRcdFx0XHRjb25zdCBqTmV4dCA9IChqICsgMSkgJSAzO1xuXHRcdFx0XHRcdGNvbnN0IHZlY0hhc2gwID0gaGFzaGVzW2pdO1xuXHRcdFx0XHRcdGNvbnN0IHZlY0hhc2gxID0gaGFzaGVzW2pOZXh0XTtcblx0XHRcdFx0XHRjb25zdCB2MCA9IF90cmlhbmdsZVt2ZXJ0S2V5c1tqXV07XG5cdFx0XHRcdFx0Y29uc3QgdjEgPSBfdHJpYW5nbGVbdmVydEtleXNbak5leHRdXTtcblx0XHRcdFx0XHRjb25zdCBoYXNoID0gYCR7dmVjSGFzaDB9XyR7dmVjSGFzaDF9YDtcblx0XHRcdFx0XHRjb25zdCByZXZlcnNlSGFzaCA9IGAke3ZlY0hhc2gxfV8ke3ZlY0hhc2gwfWA7XG5cblx0XHRcdFx0XHRpZiAocmV2ZXJzZUhhc2ggaW4gZWRnZURhdGEgJiYgZWRnZURhdGFbcmV2ZXJzZUhhc2hdKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiB3ZSBmb3VuZCBhIHNpYmxpbmcgZWRnZSBhZGQgaXQgaW50byB0aGUgdmVydGV4IGFycmF5IGlmXG5cdFx0XHRcdFx0XHQvLyBpdCBtZWV0cyB0aGUgYW5nbGUgdGhyZXNob2xkIGFuZCBkZWxldGUgdGhlIGVkZ2UgZnJvbSB0aGUgbWFwLlxuXHRcdFx0XHRcdFx0aWYgKF9ub3JtYWwuZG90KGVkZ2VEYXRhW3JldmVyc2VIYXNoXS5ub3JtYWwpIDw9IHRocmVzaG9sZERvdCkge1xuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHYwLngsIHYwLnksIHYwLnopO1xuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHYxLngsIHYxLnksIHYxLnopO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRlZGdlRGF0YVtyZXZlcnNlSGFzaF0gPSBudWxsO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIShoYXNoIGluIGVkZ2VEYXRhKSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gZWRnZSBoZXJlIHRoZW4gc2tpcCBhZGRpbmcgYSBuZXcgb25lXG5cdFx0XHRcdFx0XHRlZGdlRGF0YVtoYXNoXSA9IHtcblx0XHRcdFx0XHRcdFx0aW5kZXgwOiBpbmRleEFycltqXSxcblx0XHRcdFx0XHRcdFx0aW5kZXgxOiBpbmRleEFycltqTmV4dF0sXG5cdFx0XHRcdFx0XHRcdG5vcm1hbDogX25vcm1hbC5jbG9uZSgpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSAvLyBpdGVyYXRlIG92ZXIgYWxsIHJlbWFpbmluZywgdW5tYXRjaGVkIGVkZ2VzIGFuZCBhZGQgdGhlbSB0byB0aGUgdmVydGV4IGFycmF5XG5cblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZWRnZURhdGEpIHtcblx0XHRcdFx0aWYgKGVkZ2VEYXRhW2tleV0pIHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRpbmRleDAsXG5cdFx0XHRcdFx0XHRpbmRleDFcblx0XHRcdFx0XHR9ID0gZWRnZURhdGFba2V5XTtcblxuXHRcdFx0XHRcdF92MC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uQXR0ciwgaW5kZXgwKTtcblxuXHRcdFx0XHRcdF92MSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyLCBpbmRleDEpO1xuXG5cdFx0XHRcdFx0dmVydGljZXMucHVzaChfdjAueCwgX3YwLnksIF92MC56KTtcblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKF92MSQxLngsIF92MSQxLnksIF92MSQxLnopO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0fVxuXHR9XG5cbn1cblxuLyoqXG4gKiBFeHRlbnNpYmxlIGN1cnZlIG9iamVjdC5cbiAqXG4gKiBTb21lIGNvbW1vbiBvZiBjdXJ2ZSBtZXRob2RzOlxuICogLmdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCApLCAuZ2V0VGFuZ2VudCggdCwgb3B0aW9uYWxUYXJnZXQgKVxuICogLmdldFBvaW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0ICksIC5nZXRUYW5nZW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0IClcbiAqIC5nZXRQb2ludHMoKSwgLmdldFNwYWNlZFBvaW50cygpXG4gKiAuZ2V0TGVuZ3RoKClcbiAqIC51cGRhdGVBcmNMZW5ndGhzKClcbiAqXG4gKiBUaGlzIGZvbGxvd2luZyBjdXJ2ZXMgaW5oZXJpdCBmcm9tIFRIUkVFLkN1cnZlOlxuICpcbiAqIC0tIDJEIGN1cnZlcyAtLVxuICogVEhSRUUuQXJjQ3VydmVcbiAqIFRIUkVFLkN1YmljQmV6aWVyQ3VydmVcbiAqIFRIUkVFLkVsbGlwc2VDdXJ2ZVxuICogVEhSRUUuTGluZUN1cnZlXG4gKiBUSFJFRS5RdWFkcmF0aWNCZXppZXJDdXJ2ZVxuICogVEhSRUUuU3BsaW5lQ3VydmVcbiAqXG4gKiAtLSAzRCBjdXJ2ZXMgLS1cbiAqIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTNcbiAqIFRIUkVFLkN1YmljQmV6aWVyQ3VydmUzXG4gKiBUSFJFRS5MaW5lQ3VydmUzXG4gKiBUSFJFRS5RdWFkcmF0aWNCZXppZXJDdXJ2ZTNcbiAqXG4gKiBBIHNlcmllcyBvZiBjdXJ2ZXMgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgVEhSRUUuQ3VydmVQYXRoLlxuICpcbiAqKi9cblxuY2xhc3MgQ3VydmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnR5cGUgPSAnQ3VydmUnO1xuXHRcdHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0gMjAwO1xuXHR9IC8vIFZpcnR1YWwgYmFzZSBjbGFzcyBtZXRob2QgdG8gb3ZlcndyaXRlIGFuZCBpbXBsZW1lbnQgaW4gc3ViY2xhc3Nlc1xuXHQvL1x0LSB0IFswIC4uIDFdXG5cblxuXHRnZXRQb2ludCgpIHtcblx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuJyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gLy8gR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBhcmMgbGVuZ3RoXG5cdC8vIC0gdSBbMCAuLiAxXVxuXG5cblx0Z2V0UG9pbnRBdCh1LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKHUpO1xuXHRcdHJldHVybiB0aGlzLmdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0KTtcblx0fSAvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRzIHVzaW5nIGdldFBvaW50KCB0IClcblxuXG5cdGdldFBvaW50cyhkaXZpc2lvbnMgPSA1KSB7XG5cdFx0Y29uc3QgcG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQrKykge1xuXHRcdFx0cG9pbnRzLnB1c2godGhpcy5nZXRQb2ludChkIC8gZGl2aXNpb25zKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblx0fSAvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRzIHVzaW5nIGdldFBvaW50QXQoIHUgKVxuXG5cblx0Z2V0U3BhY2VkUG9pbnRzKGRpdmlzaW9ucyA9IDUpIHtcblx0XHRjb25zdCBwb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGQgPSAwOyBkIDw9IGRpdmlzaW9uczsgZCsrKSB7XG5cdFx0XHRwb2ludHMucHVzaCh0aGlzLmdldFBvaW50QXQoZCAvIGRpdmlzaW9ucykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludHM7XG5cdH0gLy8gR2V0IHRvdGFsIGN1cnZlIGFyYyBsZW5ndGhcblxuXG5cdGdldExlbmd0aCgpIHtcblx0XHRjb25zdCBsZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7XG5cdFx0cmV0dXJuIGxlbmd0aHNbbGVuZ3Rocy5sZW5ndGggLSAxXTtcblx0fSAvLyBHZXQgbGlzdCBvZiBjdW11bGF0aXZlIHNlZ21lbnQgbGVuZ3Roc1xuXG5cblx0Z2V0TGVuZ3RocyhkaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucykge1xuXHRcdGlmICh0aGlzLmNhY2hlQXJjTGVuZ3RocyAmJiB0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGggPT09IGRpdmlzaW9ucyArIDEgJiYgIXRoaXMubmVlZHNVcGRhdGUpIHtcblx0XHRcdHJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocztcblx0XHR9XG5cblx0XHR0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdFx0Y29uc3QgY2FjaGUgPSBbXTtcblx0XHRsZXQgY3VycmVudCxcblx0XHRcdFx0bGFzdCA9IHRoaXMuZ2V0UG9pbnQoMCk7XG5cdFx0bGV0IHN1bSA9IDA7XG5cdFx0Y2FjaGUucHVzaCgwKTtcblxuXHRcdGZvciAobGV0IHAgPSAxOyBwIDw9IGRpdmlzaW9uczsgcCsrKSB7XG5cdFx0XHRjdXJyZW50ID0gdGhpcy5nZXRQb2ludChwIC8gZGl2aXNpb25zKTtcblx0XHRcdHN1bSArPSBjdXJyZW50LmRpc3RhbmNlVG8obGFzdCk7XG5cdFx0XHRjYWNoZS5wdXNoKHN1bSk7XG5cdFx0XHRsYXN0ID0gY3VycmVudDtcblx0XHR9XG5cblx0XHR0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlO1xuXHRcdHJldHVybiBjYWNoZTsgLy8geyBzdW1zOiBjYWNoZSwgc3VtOiBzdW0gfTsgU3VtIGlzIGluIHRoZSBsYXN0IGVsZW1lbnQuXG5cdH1cblxuXHR1cGRhdGVBcmNMZW5ndGhzKCkge1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuZ2V0TGVuZ3RocygpO1xuXHR9IC8vIEdpdmVuIHUgKCAwIC4uIDEgKSwgZ2V0IGEgdCB0byBmaW5kIHAuIFRoaXMgZ2l2ZXMgeW91IHBvaW50cyB3aGljaCBhcmUgZXF1aWRpc3RhbnRcblxuXG5cdGdldFV0b1RtYXBwaW5nKHUsIGRpc3RhbmNlKSB7XG5cdFx0Y29uc3QgYXJjTGVuZ3RocyA9IHRoaXMuZ2V0TGVuZ3RocygpO1xuXHRcdGxldCBpID0gMDtcblx0XHRjb25zdCBpbCA9IGFyY0xlbmd0aHMubGVuZ3RoO1xuXHRcdGxldCB0YXJnZXRBcmNMZW5ndGg7IC8vIFRoZSB0YXJnZXRlZCB1IGRpc3RhbmNlIHZhbHVlIHRvIGdldFxuXG5cdFx0aWYgKGRpc3RhbmNlKSB7XG5cdFx0XHR0YXJnZXRBcmNMZW5ndGggPSBkaXN0YW5jZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0QXJjTGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbaWwgLSAxXTtcblx0XHR9IC8vIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBpbmRleCB3aXRoIGxhcmdlc3QgdmFsdWUgc21hbGxlciB0aGFuIHRhcmdldCB1IGRpc3RhbmNlXG5cblxuXHRcdGxldCBsb3cgPSAwLFxuXHRcdFx0XHRoaWdoID0gaWwgLSAxLFxuXHRcdFx0XHRjb21wYXJpc29uO1xuXG5cdFx0d2hpbGUgKGxvdyA8PSBoaWdoKSB7XG5cdFx0XHRpID0gTWF0aC5mbG9vcihsb3cgKyAoaGlnaCAtIGxvdykgLyAyKTsgLy8gbGVzcyBsaWtlbHkgdG8gb3ZlcmZsb3csIHRob3VnaCBwcm9iYWJseSBub3QgaXNzdWUgaGVyZSwgSlMgZG9lc24ndCByZWFsbHkgaGF2ZSBpbnRlZ2VycywgYWxsIG51bWJlcnMgYXJlIGZsb2F0c1xuXG5cdFx0XHRjb21wYXJpc29uID0gYXJjTGVuZ3Roc1tpXSAtIHRhcmdldEFyY0xlbmd0aDtcblxuXHRcdFx0aWYgKGNvbXBhcmlzb24gPCAwKSB7XG5cdFx0XHRcdGxvdyA9IGkgKyAxO1xuXHRcdFx0fSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkge1xuXHRcdFx0XHRoaWdoID0gaSAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaWdoID0gaTtcblx0XHRcdFx0YnJlYWs7IC8vIERPTkVcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpID0gaGlnaDtcblxuXHRcdGlmIChhcmNMZW5ndGhzW2ldID09PSB0YXJnZXRBcmNMZW5ndGgpIHtcblx0XHRcdHJldHVybiBpIC8gKGlsIC0gMSk7XG5cdFx0fSAvLyB3ZSBjb3VsZCBnZXQgZmluZXIgZ3JhaW4gYXQgbGVuZ3Rocywgb3IgdXNlIHNpbXBsZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuXG5cblx0XHRjb25zdCBsZW5ndGhCZWZvcmUgPSBhcmNMZW5ndGhzW2ldO1xuXHRcdGNvbnN0IGxlbmd0aEFmdGVyID0gYXJjTGVuZ3Roc1tpICsgMV07XG5cdFx0Y29uc3Qgc2VnbWVudExlbmd0aCA9IGxlbmd0aEFmdGVyIC0gbGVuZ3RoQmVmb3JlOyAvLyBkZXRlcm1pbmUgd2hlcmUgd2UgYXJlIGJldHdlZW4gdGhlICdiZWZvcmUnIGFuZCAnYWZ0ZXInIHBvaW50c1xuXG5cdFx0Y29uc3Qgc2VnbWVudEZyYWN0aW9uID0gKHRhcmdldEFyY0xlbmd0aCAtIGxlbmd0aEJlZm9yZSkgLyBzZWdtZW50TGVuZ3RoOyAvLyBhZGQgdGhhdCBmcmFjdGlvbmFsIGFtb3VudCB0byB0XG5cblx0XHRjb25zdCB0ID0gKGkgKyBzZWdtZW50RnJhY3Rpb24pIC8gKGlsIC0gMSk7XG5cdFx0cmV0dXJuIHQ7XG5cdH0gLy8gUmV0dXJucyBhIHVuaXQgdmVjdG9yIHRhbmdlbnQgYXQgdFxuXHQvLyBJbiBjYXNlIGFueSBzdWIgY3VydmUgZG9lcyBub3QgaW1wbGVtZW50IGl0cyB0YW5nZW50IGRlcml2YXRpb24sXG5cdC8vIDIgcG9pbnRzIGEgc21hbGwgZGVsdGEgYXBhcnQgd2lsbCBiZSB1c2VkIHRvIGZpbmQgaXRzIGdyYWRpZW50XG5cdC8vIHdoaWNoIHNlZW1zIHRvIGdpdmUgYSByZWFzb25hYmxlIGFwcHJveGltYXRpb25cblxuXG5cdGdldFRhbmdlbnQodCwgb3B0aW9uYWxUYXJnZXQpIHtcblx0XHRjb25zdCBkZWx0YSA9IDAuMDAwMTtcblx0XHRsZXQgdDEgPSB0IC0gZGVsdGE7XG5cdFx0bGV0IHQyID0gdCArIGRlbHRhOyAvLyBDYXBwaW5nIGluIGNhc2Ugb2YgZGFuZ2VyXG5cblx0XHRpZiAodDEgPCAwKSB0MSA9IDA7XG5cdFx0aWYgKHQyID4gMSkgdDIgPSAxO1xuXHRcdGNvbnN0IHB0MSA9IHRoaXMuZ2V0UG9pbnQodDEpO1xuXHRcdGNvbnN0IHB0MiA9IHRoaXMuZ2V0UG9pbnQodDIpO1xuXHRcdGNvbnN0IHRhbmdlbnQgPSBvcHRpb25hbFRhcmdldCB8fCAocHQxLmlzVmVjdG9yMiA/IG5ldyBWZWN0b3IyKCkgOiBuZXcgVmVjdG9yMygpKTtcblx0XHR0YW5nZW50LmNvcHkocHQyKS5zdWIocHQxKS5ub3JtYWxpemUoKTtcblx0XHRyZXR1cm4gdGFuZ2VudDtcblx0fVxuXG5cdGdldFRhbmdlbnRBdCh1LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKHUpO1xuXHRcdHJldHVybiB0aGlzLmdldFRhbmdlbnQodCwgb3B0aW9uYWxUYXJnZXQpO1xuXHR9XG5cblx0Y29tcHV0ZUZyZW5ldEZyYW1lcyhzZWdtZW50cywgY2xvc2VkKSB7XG5cdFx0Ly8gc2VlIGh0dHA6Ly93d3cuY3MuaW5kaWFuYS5lZHUvcHViL3RlY2hyZXBvcnRzL1RSNDI1LnBkZlxuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdGFuZ2VudHMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgYmlub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdmVjID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBtYXQgPSBuZXcgTWF0cml4NCgpOyAvLyBjb21wdXRlIHRoZSB0YW5nZW50IHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmVcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IHUgPSBpIC8gc2VnbWVudHM7XG5cdFx0XHR0YW5nZW50c1tpXSA9IHRoaXMuZ2V0VGFuZ2VudEF0KHUsIG5ldyBWZWN0b3IzKCkpO1xuXHRcdH0gLy8gc2VsZWN0IGFuIGluaXRpYWwgbm9ybWFsIHZlY3RvciBwZXJwZW5kaWN1bGFyIHRvIHRoZSBmaXJzdCB0YW5nZW50IHZlY3Rvcixcblx0XHQvLyBhbmQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbWluaW11bSB0YW5nZW50IHh5eiBjb21wb25lbnRcblxuXG5cdFx0bm9ybWFsc1swXSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Ymlub3JtYWxzWzBdID0gbmV3IFZlY3RvcjMoKTtcblx0XHRsZXQgbWluID0gTnVtYmVyLk1BWF9WQUxVRTtcblx0XHRjb25zdCB0eCA9IE1hdGguYWJzKHRhbmdlbnRzWzBdLngpO1xuXHRcdGNvbnN0IHR5ID0gTWF0aC5hYnModGFuZ2VudHNbMF0ueSk7XG5cdFx0Y29uc3QgdHogPSBNYXRoLmFicyh0YW5nZW50c1swXS56KTtcblxuXHRcdGlmICh0eCA8PSBtaW4pIHtcblx0XHRcdG1pbiA9IHR4O1xuXHRcdFx0bm9ybWFsLnNldCgxLCAwLCAwKTtcblx0XHR9XG5cblx0XHRpZiAodHkgPD0gbWluKSB7XG5cdFx0XHRtaW4gPSB0eTtcblx0XHRcdG5vcm1hbC5zZXQoMCwgMSwgMCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR6IDw9IG1pbikge1xuXHRcdFx0bm9ybWFsLnNldCgwLCAwLCAxKTtcblx0XHR9XG5cblx0XHR2ZWMuY3Jvc3NWZWN0b3JzKHRhbmdlbnRzWzBdLCBub3JtYWwpLm5vcm1hbGl6ZSgpO1xuXHRcdG5vcm1hbHNbMF0uY3Jvc3NWZWN0b3JzKHRhbmdlbnRzWzBdLCB2ZWMpO1xuXHRcdGJpbm9ybWFsc1swXS5jcm9zc1ZlY3RvcnModGFuZ2VudHNbMF0sIG5vcm1hbHNbMF0pOyAvLyBjb21wdXRlIHRoZSBzbG93bHktdmFyeWluZyBub3JtYWwgYW5kIGJpbm9ybWFsIHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmVcblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdG5vcm1hbHNbaV0gPSBub3JtYWxzW2kgLSAxXS5jbG9uZSgpO1xuXHRcdFx0Ymlub3JtYWxzW2ldID0gYmlub3JtYWxzW2kgLSAxXS5jbG9uZSgpO1xuXHRcdFx0dmVjLmNyb3NzVmVjdG9ycyh0YW5nZW50c1tpIC0gMV0sIHRhbmdlbnRzW2ldKTtcblxuXHRcdFx0aWYgKHZlYy5sZW5ndGgoKSA+IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdHZlYy5ub3JtYWxpemUoKTtcblx0XHRcdFx0Y29uc3QgdGhldGEgPSBNYXRoLmFjb3MoY2xhbXAodGFuZ2VudHNbaSAtIDFdLmRvdCh0YW5nZW50c1tpXSksIC0xLCAxKSk7IC8vIGNsYW1wIGZvciBmbG9hdGluZyBwdCBlcnJvcnNcblxuXHRcdFx0XHRub3JtYWxzW2ldLmFwcGx5TWF0cml4NChtYXQubWFrZVJvdGF0aW9uQXhpcyh2ZWMsIHRoZXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdGJpbm9ybWFsc1tpXS5jcm9zc1ZlY3RvcnModGFuZ2VudHNbaV0sIG5vcm1hbHNbaV0pO1xuXHRcdH0gLy8gaWYgdGhlIGN1cnZlIGlzIGNsb3NlZCwgcG9zdHByb2Nlc3MgdGhlIHZlY3RvcnMgc28gdGhlIGZpcnN0IGFuZCBsYXN0IG5vcm1hbCB2ZWN0b3JzIGFyZSB0aGUgc2FtZVxuXG5cblx0XHRpZiAoY2xvc2VkID09PSB0cnVlKSB7XG5cdFx0XHRsZXQgdGhldGEgPSBNYXRoLmFjb3MoY2xhbXAobm9ybWFsc1swXS5kb3Qobm9ybWFsc1tzZWdtZW50c10pLCAtMSwgMSkpO1xuXHRcdFx0dGhldGEgLz0gc2VnbWVudHM7XG5cblx0XHRcdGlmICh0YW5nZW50c1swXS5kb3QodmVjLmNyb3NzVmVjdG9ycyhub3JtYWxzWzBdLCBub3JtYWxzW3NlZ21lbnRzXSkpID4gMCkge1xuXHRcdFx0XHR0aGV0YSA9IC10aGV0YTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHQvLyB0d2lzdCBhIGxpdHRsZS4uLlxuXHRcdFx0XHRub3JtYWxzW2ldLmFwcGx5TWF0cml4NChtYXQubWFrZVJvdGF0aW9uQXhpcyh0YW5nZW50c1tpXSwgdGhldGEgKiBpKSk7XG5cdFx0XHRcdGJpbm9ybWFsc1tpXS5jcm9zc1ZlY3RvcnModGFuZ2VudHNbaV0sIG5vcm1hbHNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0YW5nZW50czogdGFuZ2VudHMsXG5cdFx0XHRub3JtYWxzOiBub3JtYWxzLFxuXHRcdFx0Ymlub3JtYWxzOiBiaW5vcm1hbHNcblx0XHR9O1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSBzb3VyY2UuYXJjTGVuZ3RoRGl2aXNpb25zO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdDdXJ2ZScsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ0N1cnZlLnRvSlNPTidcblx0XHRcdH1cblx0XHR9O1xuXHRcdGRhdGEuYXJjTGVuZ3RoRGl2aXNpb25zID0gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM7XG5cdFx0ZGF0YS50eXBlID0gdGhpcy50eXBlO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0ganNvbi5hcmNMZW5ndGhEaXZpc2lvbnM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBFbGxpcHNlQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKGFYID0gMCwgYVkgPSAwLCB4UmFkaXVzID0gMSwgeVJhZGl1cyA9IDEsIGFTdGFydEFuZ2xlID0gMCwgYUVuZEFuZ2xlID0gTWF0aC5QSSAqIDIsIGFDbG9ja3dpc2UgPSBmYWxzZSwgYVJvdGF0aW9uID0gMCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0VsbGlwc2VDdXJ2ZSc7XG5cdFx0dGhpcy5hWCA9IGFYO1xuXHRcdHRoaXMuYVkgPSBhWTtcblx0XHR0aGlzLnhSYWRpdXMgPSB4UmFkaXVzO1xuXHRcdHRoaXMueVJhZGl1cyA9IHlSYWRpdXM7XG5cdFx0dGhpcy5hU3RhcnRBbmdsZSA9IGFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0gYUVuZEFuZ2xlO1xuXHRcdHRoaXMuYUNsb2Nrd2lzZSA9IGFDbG9ja3dpc2U7XG5cdFx0dGhpcy5hUm90YXRpb24gPSBhUm90YXRpb247XG5cdH1cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHRcdGxldCBkZWx0YUFuZ2xlID0gdGhpcy5hRW5kQW5nbGUgLSB0aGlzLmFTdGFydEFuZ2xlO1xuXHRcdGNvbnN0IHNhbWVQb2ludHMgPSBNYXRoLmFicyhkZWx0YUFuZ2xlKSA8IE51bWJlci5FUFNJTE9OOyAvLyBlbnN1cmVzIHRoYXQgZGVsdGFBbmdsZSBpcyAwIC4uIDIgUElcblxuXHRcdHdoaWxlIChkZWx0YUFuZ2xlIDwgMCkgZGVsdGFBbmdsZSArPSB0d29QaTtcblxuXHRcdHdoaWxlIChkZWx0YUFuZ2xlID4gdHdvUGkpIGRlbHRhQW5nbGUgLT0gdHdvUGk7XG5cblx0XHRpZiAoZGVsdGFBbmdsZSA8IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRpZiAoc2FtZVBvaW50cykge1xuXHRcdFx0XHRkZWx0YUFuZ2xlID0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbHRhQW5nbGUgPSB0d29QaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5hQ2xvY2t3aXNlID09PSB0cnVlICYmICFzYW1lUG9pbnRzKSB7XG5cdFx0XHRpZiAoZGVsdGFBbmdsZSA9PT0gdHdvUGkpIHtcblx0XHRcdFx0ZGVsdGFBbmdsZSA9IC10d29QaTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbHRhQW5nbGUgPSBkZWx0YUFuZ2xlIC0gdHdvUGk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgYW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlICsgdCAqIGRlbHRhQW5nbGU7XG5cdFx0bGV0IHggPSB0aGlzLmFYICsgdGhpcy54UmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuXHRcdGxldCB5ID0gdGhpcy5hWSArIHRoaXMueVJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcblxuXHRcdGlmICh0aGlzLmFSb3RhdGlvbiAhPT0gMCkge1xuXHRcdFx0Y29uc3QgY29zID0gTWF0aC5jb3ModGhpcy5hUm90YXRpb24pO1xuXHRcdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4odGhpcy5hUm90YXRpb24pO1xuXHRcdFx0Y29uc3QgdHggPSB4IC0gdGhpcy5hWDtcblx0XHRcdGNvbnN0IHR5ID0geSAtIHRoaXMuYVk7IC8vIFJvdGF0ZSB0aGUgcG9pbnQgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cblxuXHRcdFx0eCA9IHR4ICogY29zIC0gdHkgKiBzaW4gKyB0aGlzLmFYO1xuXHRcdFx0eSA9IHR4ICogc2luICsgdHkgKiBjb3MgKyB0aGlzLmFZO1xuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludC5zZXQoeCwgeSk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmFYID0gc291cmNlLmFYO1xuXHRcdHRoaXMuYVkgPSBzb3VyY2UuYVk7XG5cdFx0dGhpcy54UmFkaXVzID0gc291cmNlLnhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0gc291cmNlLnlSYWRpdXM7XG5cdFx0dGhpcy5hU3RhcnRBbmdsZSA9IHNvdXJjZS5hU3RhcnRBbmdsZTtcblx0XHR0aGlzLmFFbmRBbmdsZSA9IHNvdXJjZS5hRW5kQW5nbGU7XG5cdFx0dGhpcy5hQ2xvY2t3aXNlID0gc291cmNlLmFDbG9ja3dpc2U7XG5cdFx0dGhpcy5hUm90YXRpb24gPSBzb3VyY2UuYVJvdGF0aW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLmFYID0gdGhpcy5hWDtcblx0XHRkYXRhLmFZID0gdGhpcy5hWTtcblx0XHRkYXRhLnhSYWRpdXMgPSB0aGlzLnhSYWRpdXM7XG5cdFx0ZGF0YS55UmFkaXVzID0gdGhpcy55UmFkaXVzO1xuXHRcdGRhdGEuYVN0YXJ0QW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlO1xuXHRcdGRhdGEuYUVuZEFuZ2xlID0gdGhpcy5hRW5kQW5nbGU7XG5cdFx0ZGF0YS5hQ2xvY2t3aXNlID0gdGhpcy5hQ2xvY2t3aXNlO1xuXHRcdGRhdGEuYVJvdGF0aW9uID0gdGhpcy5hUm90YXRpb247XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy5hWCA9IGpzb24uYVg7XG5cdFx0dGhpcy5hWSA9IGpzb24uYVk7XG5cdFx0dGhpcy54UmFkaXVzID0ganNvbi54UmFkaXVzO1xuXHRcdHRoaXMueVJhZGl1cyA9IGpzb24ueVJhZGl1cztcblx0XHR0aGlzLmFTdGFydEFuZ2xlID0ganNvbi5hU3RhcnRBbmdsZTtcblx0XHR0aGlzLmFFbmRBbmdsZSA9IGpzb24uYUVuZEFuZ2xlO1xuXHRcdHRoaXMuYUNsb2Nrd2lzZSA9IGpzb24uYUNsb2Nrd2lzZTtcblx0XHR0aGlzLmFSb3RhdGlvbiA9IGpzb24uYVJvdGF0aW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZSA9IHRydWU7XG5cbmNsYXNzIEFyY0N1cnZlIGV4dGVuZHMgRWxsaXBzZUN1cnZlIHtcblx0Y29uc3RydWN0b3IoYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlKSB7XG5cdFx0c3VwZXIoYVgsIGFZLCBhUmFkaXVzLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlKTtcblx0XHR0aGlzLnR5cGUgPSAnQXJjQ3VydmUnO1xuXHR9XG5cbn1cblxuQXJjQ3VydmUucHJvdG90eXBlLmlzQXJjQ3VydmUgPSB0cnVlO1xuXG4vKipcbiAqIENlbnRyaXBldGFsIENhdG11bGxSb20gQ3VydmUgLSB3aGljaCBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nXG4gKiBjdXNwcyBhbmQgc2VsZi1pbnRlcnNlY3Rpb25zIGluIG5vbi11bmlmb3JtIGNhdG11bGwgcm9tIGN1cnZlcy5cbiAqIGh0dHA6Ly93d3cuY2VteXVrc2VsLmNvbS9yZXNlYXJjaC9jYXRtdWxscm9tX3BhcmFtL2NhdG11bGxyb20ucGRmXG4gKlxuICogY3VydmUudHlwZSBhY2NlcHRzIGNlbnRyaXBldGFsKGRlZmF1bHQpLCBjaG9yZGFsIGFuZCBjYXRtdWxscm9tXG4gKiBjdXJ2ZS50ZW5zaW9uIGlzIHVzZWQgZm9yIGNhdG11bGxyb20gd2hpY2ggZGVmYXVsdHMgdG8gMC41XG4gKi9cblxuLypcbkJhc2VkIG9uIGFuIG9wdGltaXplZCBjKysgc29sdXRpb24gaW5cbiAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvOTQ4OTczNi9jYXRtdWxsLXJvbS1jdXJ2ZS13aXRoLW5vLWN1c3BzLWFuZC1uby1zZWxmLWludGVyc2VjdGlvbnMvXG4gLSBodHRwOi8vaWRlb25lLmNvbS9Ob0ViVk1cblxuVGhpcyBDdWJpY1BvbHkgY2xhc3MgY291bGQgYmUgdXNlZCBmb3IgcmV1c2luZyBzb21lIHZhcmlhYmxlcyBhbmQgY2FsY3VsYXRpb25zLFxuYnV0IGZvciB0aHJlZS5qcyBjdXJ2ZSB1c2UsIGl0IGNvdWxkIGJlIHBvc3NpYmxlIGlubGluZWQgYW5kIGZsYXR0ZW4gaW50byBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsXG53aGljaCBjYW4gYmUgcGxhY2VkIGluIEN1cnZlVXRpbHMuXG4qL1xuXG5mdW5jdGlvbiBDdWJpY1BvbHkoKSB7XG5cdGxldCBjMCA9IDAsXG5cdFx0XHRjMSA9IDAsXG5cdFx0XHRjMiA9IDAsXG5cdFx0XHRjMyA9IDA7XG5cdC8qXG5cdCAqIENvbXB1dGUgY29lZmZpY2llbnRzIGZvciBhIGN1YmljIHBvbHlub21pYWxcblx0ICpcdCBwKHMpID0gYzAgKyBjMSpzICsgYzIqc14yICsgYzMqc14zXG5cdCAqIHN1Y2ggdGhhdFxuXHQgKlx0IHAoMCkgPSB4MCwgcCgxKSA9IHgxXG5cdCAqXHRhbmRcblx0ICpcdCBwJygwKSA9IHQwLCBwJygxKSA9IHQxLlxuXHQgKi9cblxuXHRmdW5jdGlvbiBpbml0KHgwLCB4MSwgdDAsIHQxKSB7XG5cdFx0YzAgPSB4MDtcblx0XHRjMSA9IHQwO1xuXHRcdGMyID0gLTMgKiB4MCArIDMgKiB4MSAtIDIgKiB0MCAtIHQxO1xuXHRcdGMzID0gMiAqIHgwIC0gMiAqIHgxICsgdDAgKyB0MTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aW5pdENhdG11bGxSb206IGZ1bmN0aW9uICh4MCwgeDEsIHgyLCB4MywgdGVuc2lvbikge1xuXHRcdFx0aW5pdCh4MSwgeDIsIHRlbnNpb24gKiAoeDIgLSB4MCksIHRlbnNpb24gKiAoeDMgLSB4MSkpO1xuXHRcdH0sXG5cdFx0aW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOiBmdW5jdGlvbiAoeDAsIHgxLCB4MiwgeDMsIGR0MCwgZHQxLCBkdDIpIHtcblx0XHRcdC8vIGNvbXB1dGUgdGFuZ2VudHMgd2hlbiBwYXJhbWV0ZXJpemVkIGluIFt0MSx0Ml1cblx0XHRcdGxldCB0MSA9ICh4MSAtIHgwKSAvIGR0MCAtICh4MiAtIHgwKSAvIChkdDAgKyBkdDEpICsgKHgyIC0geDEpIC8gZHQxO1xuXHRcdFx0bGV0IHQyID0gKHgyIC0geDEpIC8gZHQxIC0gKHgzIC0geDEpIC8gKGR0MSArIGR0MikgKyAoeDMgLSB4MikgLyBkdDI7IC8vIHJlc2NhbGUgdGFuZ2VudHMgZm9yIHBhcmFtZXRyaXphdGlvbiBpbiBbMCwxXVxuXG5cdFx0XHR0MSAqPSBkdDE7XG5cdFx0XHR0MiAqPSBkdDE7XG5cdFx0XHRpbml0KHgxLCB4MiwgdDEsIHQyKTtcblx0XHR9LFxuXHRcdGNhbGM6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRjb25zdCB0MiA9IHQgKiB0O1xuXHRcdFx0Y29uc3QgdDMgPSB0MiAqIHQ7XG5cdFx0XHRyZXR1cm4gYzAgKyBjMSAqIHQgKyBjMiAqIHQyICsgYzMgKiB0Mztcblx0XHR9XG5cdH07XG59IC8vXG5cblxuY29uc3QgdG1wID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHB4ID0gbmV3IEN1YmljUG9seSgpLFxuXHRcdFx0cHkgPSBuZXcgQ3ViaWNQb2x5KCksXG5cdFx0XHRweiA9IG5ldyBDdWJpY1BvbHkoKTtcblxuY2xhc3MgQ2F0bXVsbFJvbUN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IocG9pbnRzID0gW10sIGNsb3NlZCA9IGZhbHNlLCBjdXJ2ZVR5cGUgPSAnY2VudHJpcGV0YWwnLCB0ZW5zaW9uID0gMC41KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ2F0bXVsbFJvbUN1cnZlMyc7XG5cdFx0dGhpcy5wb2ludHMgPSBwb2ludHM7XG5cdFx0dGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSBjdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0gdGVuc2lvbjtcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cdFx0Y29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cdFx0Y29uc3QgbCA9IHBvaW50cy5sZW5ndGg7XG5cdFx0Y29uc3QgcCA9IChsIC0gKHRoaXMuY2xvc2VkID8gMCA6IDEpKSAqIHQ7XG5cdFx0bGV0IGludFBvaW50ID0gTWF0aC5mbG9vcihwKTtcblx0XHRsZXQgd2VpZ2h0ID0gcCAtIGludFBvaW50O1xuXG5cdFx0aWYgKHRoaXMuY2xvc2VkKSB7XG5cdFx0XHRpbnRQb2ludCArPSBpbnRQb2ludCA+IDAgPyAwIDogKE1hdGguZmxvb3IoTWF0aC5hYnMoaW50UG9pbnQpIC8gbCkgKyAxKSAqIGw7XG5cdFx0fSBlbHNlIGlmICh3ZWlnaHQgPT09IDAgJiYgaW50UG9pbnQgPT09IGwgLSAxKSB7XG5cdFx0XHRpbnRQb2ludCA9IGwgLSAyO1xuXHRcdFx0d2VpZ2h0ID0gMTtcblx0XHR9XG5cblx0XHRsZXQgcDAsIHAzOyAvLyA0IHBvaW50cyAocDEgJiBwMiBkZWZpbmVkIGJlbG93KVxuXG5cdFx0aWYgKHRoaXMuY2xvc2VkIHx8IGludFBvaW50ID4gMCkge1xuXHRcdFx0cDAgPSBwb2ludHNbKGludFBvaW50IC0gMSkgJSBsXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZXh0cmFwb2xhdGUgZmlyc3QgcG9pbnRcblx0XHRcdHRtcC5zdWJWZWN0b3JzKHBvaW50c1swXSwgcG9pbnRzWzFdKS5hZGQocG9pbnRzWzBdKTtcblx0XHRcdHAwID0gdG1wO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAxID0gcG9pbnRzW2ludFBvaW50ICUgbF07XG5cdFx0Y29uc3QgcDIgPSBwb2ludHNbKGludFBvaW50ICsgMSkgJSBsXTtcblxuXHRcdGlmICh0aGlzLmNsb3NlZCB8fCBpbnRQb2ludCArIDIgPCBsKSB7XG5cdFx0XHRwMyA9IHBvaW50c1soaW50UG9pbnQgKyAyKSAlIGxdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBleHRyYXBvbGF0ZSBsYXN0IHBvaW50XG5cdFx0XHR0bXAuc3ViVmVjdG9ycyhwb2ludHNbbCAtIDFdLCBwb2ludHNbbCAtIDJdKS5hZGQocG9pbnRzW2wgLSAxXSk7XG5cdFx0XHRwMyA9IHRtcDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jdXJ2ZVR5cGUgPT09ICdjZW50cmlwZXRhbCcgfHwgdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJykge1xuXHRcdFx0Ly8gaW5pdCBDZW50cmlwZXRhbCAvIENob3JkYWwgQ2F0bXVsbC1Sb21cblx0XHRcdGNvbnN0IHBvdyA9IHRoaXMuY3VydmVUeXBlID09PSAnY2hvcmRhbCcgPyAwLjUgOiAwLjI1O1xuXHRcdFx0bGV0IGR0MCA9IE1hdGgucG93KHAwLmRpc3RhbmNlVG9TcXVhcmVkKHAxKSwgcG93KTtcblx0XHRcdGxldCBkdDEgPSBNYXRoLnBvdyhwMS5kaXN0YW5jZVRvU3F1YXJlZChwMiksIHBvdyk7XG5cdFx0XHRsZXQgZHQyID0gTWF0aC5wb3cocDIuZGlzdGFuY2VUb1NxdWFyZWQocDMpLCBwb3cpOyAvLyBzYWZldHkgY2hlY2sgZm9yIHJlcGVhdGVkIHBvaW50c1xuXG5cdFx0XHRpZiAoZHQxIDwgMWUtNCkgZHQxID0gMS4wO1xuXHRcdFx0aWYgKGR0MCA8IDFlLTQpIGR0MCA9IGR0MTtcblx0XHRcdGlmIChkdDIgPCAxZS00KSBkdDIgPSBkdDE7XG5cdFx0XHRweC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ocDAueCwgcDEueCwgcDIueCwgcDMueCwgZHQwLCBkdDEsIGR0Mik7XG5cdFx0XHRweS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ocDAueSwgcDEueSwgcDIueSwgcDMueSwgZHQwLCBkdDEsIGR0Mik7XG5cdFx0XHRwei5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ocDAueiwgcDEueiwgcDIueiwgcDMueiwgZHQwLCBkdDEsIGR0Mik7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmN1cnZlVHlwZSA9PT0gJ2NhdG11bGxyb20nKSB7XG5cdFx0XHRweC5pbml0Q2F0bXVsbFJvbShwMC54LCBwMS54LCBwMi54LCBwMy54LCB0aGlzLnRlbnNpb24pO1xuXHRcdFx0cHkuaW5pdENhdG11bGxSb20ocDAueSwgcDEueSwgcDIueSwgcDMueSwgdGhpcy50ZW5zaW9uKTtcblx0XHRcdHB6LmluaXRDYXRtdWxsUm9tKHAwLnosIHAxLnosIHAyLnosIHAzLnosIHRoaXMudGVuc2lvbik7XG5cdFx0fVxuXG5cdFx0cG9pbnQuc2V0KHB4LmNhbGMod2VpZ2h0KSwgcHkuY2FsYyh3ZWlnaHQpLCBwei5jYWxjKHdlaWdodCkpO1xuXHRcdHJldHVybiBwb2ludDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNvdXJjZS5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwb2ludCA9IHNvdXJjZS5wb2ludHNbaV07XG5cdFx0XHR0aGlzLnBvaW50cy5wdXNoKHBvaW50LmNsb25lKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xvc2VkID0gc291cmNlLmNsb3NlZDtcblx0XHR0aGlzLmN1cnZlVHlwZSA9IHNvdXJjZS5jdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0gc291cmNlLnRlbnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEucG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcG9pbnQgPSB0aGlzLnBvaW50c1tpXTtcblx0XHRcdGRhdGEucG9pbnRzLnB1c2gocG9pbnQudG9BcnJheSgpKTtcblx0XHR9XG5cblx0XHRkYXRhLmNsb3NlZCA9IHRoaXMuY2xvc2VkO1xuXHRcdGRhdGEuY3VydmVUeXBlID0gdGhpcy5jdXJ2ZVR5cGU7XG5cdFx0ZGF0YS50ZW5zaW9uID0gdGhpcy50ZW5zaW9uO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcG9pbnQgPSBqc29uLnBvaW50c1tpXTtcblx0XHRcdHRoaXMucG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkocG9pbnQpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsb3NlZCA9IGpzb24uY2xvc2VkO1xuXHRcdHRoaXMuY3VydmVUeXBlID0ganNvbi5jdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0ganNvbi50ZW5zaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzID0gdHJ1ZTtcblxuLyoqXG4gKiBCZXppZXIgQ3VydmVzIGZvcm11bGFzIG9idGFpbmVkIGZyb21cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0IlQzMlQTl6aWVyX2N1cnZlXG4gKi9cbmZ1bmN0aW9uIENhdG11bGxSb20odCwgcDAsIHAxLCBwMiwgcDMpIHtcblx0Y29uc3QgdjAgPSAocDIgLSBwMCkgKiAwLjU7XG5cdGNvbnN0IHYxID0gKHAzIC0gcDEpICogMC41O1xuXHRjb25zdCB0MiA9IHQgKiB0O1xuXHRjb25zdCB0MyA9IHQgKiB0Mjtcblx0cmV0dXJuICgyICogcDEgLSAyICogcDIgKyB2MCArIHYxKSAqIHQzICsgKC0zICogcDEgKyAzICogcDIgLSAyICogdjAgLSB2MSkgKiB0MiArIHYwICogdCArIHAxO1xufSAvL1xuXG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAwKHQsIHApIHtcblx0Y29uc3QgayA9IDEgLSB0O1xuXHRyZXR1cm4gayAqIGsgKiBwO1xufVxuXG5mdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMSh0LCBwKSB7XG5cdHJldHVybiAyICogKDEgLSB0KSAqIHQgKiBwO1xufVxuXG5mdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMih0LCBwKSB7XG5cdHJldHVybiB0ICogdCAqIHA7XG59XG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0Jlemllcih0LCBwMCwgcDEsIHAyKSB7XG5cdHJldHVybiBRdWFkcmF0aWNCZXppZXJQMCh0LCBwMCkgKyBRdWFkcmF0aWNCZXppZXJQMSh0LCBwMSkgKyBRdWFkcmF0aWNCZXppZXJQMih0LCBwMik7XG59IC8vXG5cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMCh0LCBwKSB7XG5cdGNvbnN0IGsgPSAxIC0gdDtcblx0cmV0dXJuIGsgKiBrICogayAqIHA7XG59XG5cbmZ1bmN0aW9uIEN1YmljQmV6aWVyUDEodCwgcCkge1xuXHRjb25zdCBrID0gMSAtIHQ7XG5cdHJldHVybiAzICogayAqIGsgKiB0ICogcDtcbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMih0LCBwKSB7XG5cdHJldHVybiAzICogKDEgLSB0KSAqIHQgKiB0ICogcDtcbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMyh0LCBwKSB7XG5cdHJldHVybiB0ICogdCAqIHQgKiBwO1xufVxuXG5mdW5jdGlvbiBDdWJpY0Jlemllcih0LCBwMCwgcDEsIHAyLCBwMykge1xuXHRyZXR1cm4gQ3ViaWNCZXppZXJQMCh0LCBwMCkgKyBDdWJpY0JlemllclAxKHQsIHAxKSArIEN1YmljQmV6aWVyUDIodCwgcDIpICsgQ3ViaWNCZXppZXJQMyh0LCBwMyk7XG59XG5cbmNsYXNzIEN1YmljQmV6aWVyQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKHYwID0gbmV3IFZlY3RvcjIoKSwgdjEgPSBuZXcgVmVjdG9yMigpLCB2MiA9IG5ldyBWZWN0b3IyKCksIHYzID0gbmV3IFZlY3RvcjIoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0N1YmljQmV6aWVyQ3VydmUnO1xuXHRcdHRoaXMudjAgPSB2MDtcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHRcdHRoaXMudjMgPSB2Mztcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjIoKSkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLFxuXHRcdFx0XHRcdHYxID0gdGhpcy52MSxcblx0XHRcdFx0XHR2MiA9IHRoaXMudjIsXG5cdFx0XHRcdFx0djMgPSB0aGlzLnYzO1xuXHRcdHBvaW50LnNldChDdWJpY0Jlemllcih0LCB2MC54LCB2MS54LCB2Mi54LCB2My54KSwgQ3ViaWNCZXppZXIodCwgdjAueSwgdjEueSwgdjIueSwgdjMueSkpO1xuXHRcdHJldHVybiBwb2ludDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudjAuY29weShzb3VyY2UudjApO1xuXHRcdHRoaXMudjEuY29weShzb3VyY2UudjEpO1xuXHRcdHRoaXMudjIuY29weShzb3VyY2UudjIpO1xuXHRcdHRoaXMudjMuY29weShzb3VyY2UudjMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYzID0gdGhpcy52My50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoanNvbi52MCk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoanNvbi52MSk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoanNvbi52Mik7XG5cdFx0dGhpcy52My5mcm9tQXJyYXkoanNvbi52Myk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5DdWJpY0JlemllckN1cnZlLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBDdWJpY0JlemllckN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IodjAgPSBuZXcgVmVjdG9yMygpLCB2MSA9IG5ldyBWZWN0b3IzKCksIHYyID0gbmV3IFZlY3RvcjMoKSwgdjMgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2ZTMnO1xuXHRcdHRoaXMudjAgPSB2MDtcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHRcdHRoaXMudjMgPSB2Mztcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLFxuXHRcdFx0XHRcdHYxID0gdGhpcy52MSxcblx0XHRcdFx0XHR2MiA9IHRoaXMudjIsXG5cdFx0XHRcdFx0djMgPSB0aGlzLnYzO1xuXHRcdHBvaW50LnNldChDdWJpY0Jlemllcih0LCB2MC54LCB2MS54LCB2Mi54LCB2My54KSwgQ3ViaWNCZXppZXIodCwgdjAueSwgdjEueSwgdjIueSwgdjMueSksIEN1YmljQmV6aWVyKHQsIHYwLnosIHYxLnosIHYyLnosIHYzLnopKTtcblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnYwLmNvcHkoc291cmNlLnYwKTtcblx0XHR0aGlzLnYxLmNvcHkoc291cmNlLnYxKTtcblx0XHR0aGlzLnYyLmNvcHkoc291cmNlLnYyKTtcblx0XHR0aGlzLnYzLmNvcHkoc291cmNlLnYzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cdFx0ZGF0YS52MyA9IHRoaXMudjMudG9BcnJheSgpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMudjAuZnJvbUFycmF5KGpzb24udjApO1xuXHRcdHRoaXMudjEuZnJvbUFycmF5KGpzb24udjEpO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KGpzb24udjIpO1xuXHRcdHRoaXMudjMuZnJvbUFycmF5KGpzb24udjMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuQ3ViaWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTMgPSB0cnVlO1xuXG5jbGFzcyBMaW5lQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKHYxID0gbmV3IFZlY3RvcjIoKSwgdjIgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTGluZUN1cnZlJztcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblxuXHRcdGlmICh0ID09PSAxKSB7XG5cdFx0XHRwb2ludC5jb3B5KHRoaXMudjIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb2ludC5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKTtcblx0XHRcdHBvaW50Lm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH0gLy8gTGluZSBjdXJ2ZSBpcyBsaW5lYXIsIHNvIHdlIGNhbiBvdmVyd3JpdGUgZGVmYXVsdCBnZXRQb2ludEF0XG5cblxuXHRnZXRQb2ludEF0KHUsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQodSwgb3B0aW9uYWxUYXJnZXQpO1xuXHR9XG5cblx0Z2V0VGFuZ2VudCh0LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IHRhbmdlbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpO1xuXHRcdHRhbmdlbnQuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCk7XG5cdFx0cmV0dXJuIHRhbmdlbnQ7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnYxLmNvcHkoc291cmNlLnYxKTtcblx0XHR0aGlzLnYyLmNvcHkoc291cmNlLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheShqc29uLnYxKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheShqc29uLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbkxpbmVDdXJ2ZS5wcm90b3R5cGUuaXNMaW5lQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBMaW5lQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3Rvcih2MSA9IG5ldyBWZWN0b3IzKCksIHYyID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0xpbmVDdXJ2ZTMnO1xuXHRcdHRoaXMuaXNMaW5lQ3VydmUzID0gdHJ1ZTtcblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMygpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblxuXHRcdGlmICh0ID09PSAxKSB7XG5cdFx0XHRwb2ludC5jb3B5KHRoaXMudjIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb2ludC5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKTtcblx0XHRcdHBvaW50Lm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH0gLy8gTGluZSBjdXJ2ZSBpcyBsaW5lYXIsIHNvIHdlIGNhbiBvdmVyd3JpdGUgZGVmYXVsdCBnZXRQb2ludEF0XG5cblxuXHRnZXRQb2ludEF0KHUsIG9wdGlvbmFsVGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQodSwgb3B0aW9uYWxUYXJnZXQpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy52MS5jb3B5KHNvdXJjZS52MSk7XG5cdFx0dGhpcy52Mi5jb3B5KHNvdXJjZS52Mik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoanNvbi52MSk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoanNvbi52Mik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBRdWFkcmF0aWNCZXppZXJDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IodjAgPSBuZXcgVmVjdG9yMigpLCB2MSA9IG5ldyBWZWN0b3IyKCksIHYyID0gbmV3IFZlY3RvcjIoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1F1YWRyYXRpY0JlemllckN1cnZlJztcblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2Mjtcblx0fVxuXG5cdGdldFBvaW50KHQsIG9wdGlvbmFsVGFyZ2V0ID0gbmV3IFZlY3RvcjIoKSkge1xuXHRcdGNvbnN0IHBvaW50ID0gb3B0aW9uYWxUYXJnZXQ7XG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLFxuXHRcdFx0XHRcdHYxID0gdGhpcy52MSxcblx0XHRcdFx0XHR2MiA9IHRoaXMudjI7XG5cdFx0cG9pbnQuc2V0KFF1YWRyYXRpY0Jlemllcih0LCB2MC54LCB2MS54LCB2Mi54KSwgUXVhZHJhdGljQmV6aWVyKHQsIHYwLnksIHYxLnksIHYyLnkpKTtcblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnYwLmNvcHkoc291cmNlLnYwKTtcblx0XHR0aGlzLnYxLmNvcHkoc291cmNlLnYxKTtcblx0XHR0aGlzLnYyLmNvcHkoc291cmNlLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoanNvbi52MCk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoanNvbi52MSk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoanNvbi52Mik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5RdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IHRydWU7XG5cbmNsYXNzIFF1YWRyYXRpY0JlemllckN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblx0Y29uc3RydWN0b3IodjAgPSBuZXcgVmVjdG9yMygpLCB2MSA9IG5ldyBWZWN0b3IzKCksIHYyID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1F1YWRyYXRpY0JlemllckN1cnZlMyc7XG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdH1cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkpIHtcblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXHRcdGNvbnN0IHYwID0gdGhpcy52MCxcblx0XHRcdFx0XHR2MSA9IHRoaXMudjEsXG5cdFx0XHRcdFx0djIgPSB0aGlzLnYyO1xuXHRcdHBvaW50LnNldChRdWFkcmF0aWNCZXppZXIodCwgdjAueCwgdjEueCwgdjIueCksIFF1YWRyYXRpY0Jlemllcih0LCB2MC55LCB2MS55LCB2Mi55KSwgUXVhZHJhdGljQmV6aWVyKHQsIHYwLnosIHYxLnosIHYyLnopKTtcblx0XHRyZXR1cm4gcG9pbnQ7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLnYwLmNvcHkoc291cmNlLnYwKTtcblx0XHR0aGlzLnYxLmNvcHkoc291cmNlLnYxKTtcblx0XHR0aGlzLnYyLmNvcHkoc291cmNlLnYyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoanNvbi52MCk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoanNvbi52MSk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoanNvbi52Mik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzID0gdHJ1ZTtcblxuY2xhc3MgU3BsaW5lQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cdGNvbnN0cnVjdG9yKHBvaW50cyA9IFtdKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnU3BsaW5lQ3VydmUnO1xuXHRcdHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXHR9XG5cblx0Z2V0UG9pbnQodCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcblx0XHRjb25zdCBwID0gKHBvaW50cy5sZW5ndGggLSAxKSAqIHQ7XG5cdFx0Y29uc3QgaW50UG9pbnQgPSBNYXRoLmZsb29yKHApO1xuXHRcdGNvbnN0IHdlaWdodCA9IHAgLSBpbnRQb2ludDtcblx0XHRjb25zdCBwMCA9IHBvaW50c1tpbnRQb2ludCA9PT0gMCA/IGludFBvaW50IDogaW50UG9pbnQgLSAxXTtcblx0XHRjb25zdCBwMSA9IHBvaW50c1tpbnRQb2ludF07XG5cdFx0Y29uc3QgcDIgPSBwb2ludHNbaW50UG9pbnQgPiBwb2ludHMubGVuZ3RoIC0gMiA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAxXTtcblx0XHRjb25zdCBwMyA9IHBvaW50c1tpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAzID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDJdO1xuXHRcdHBvaW50LnNldChDYXRtdWxsUm9tKHdlaWdodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCksIENhdG11bGxSb20od2VpZ2h0LCBwMC55LCBwMS55LCBwMi55LCBwMy55KSk7XG5cdFx0cmV0dXJuIHBvaW50O1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gc291cmNlLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHBvaW50ID0gc291cmNlLnBvaW50c1tpXTtcblx0XHRcdHRoaXMucG9pbnRzLnB1c2gocG9pbnQuY2xvbmUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEucG9pbnRzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgcG9pbnQgPSB0aGlzLnBvaW50c1tpXTtcblx0XHRcdGRhdGEucG9pbnRzLnB1c2gocG9pbnQudG9BcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHBvaW50ID0ganNvbi5wb2ludHNbaV07XG5cdFx0XHR0aGlzLnBvaW50cy5wdXNoKG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KHBvaW50KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5TcGxpbmVDdXJ2ZS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZSA9IHRydWU7XG5cbnZhciBDdXJ2ZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0QXJjQ3VydmU6IEFyY0N1cnZlLFxuXHRDYXRtdWxsUm9tQ3VydmUzOiBDYXRtdWxsUm9tQ3VydmUzLFxuXHRDdWJpY0JlemllckN1cnZlOiBDdWJpY0JlemllckN1cnZlLFxuXHRDdWJpY0JlemllckN1cnZlMzogQ3ViaWNCZXppZXJDdXJ2ZTMsXG5cdEVsbGlwc2VDdXJ2ZTogRWxsaXBzZUN1cnZlLFxuXHRMaW5lQ3VydmU6IExpbmVDdXJ2ZSxcblx0TGluZUN1cnZlMzogTGluZUN1cnZlMyxcblx0UXVhZHJhdGljQmV6aWVyQ3VydmU6IFF1YWRyYXRpY0JlemllckN1cnZlLFxuXHRRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6IFF1YWRyYXRpY0JlemllckN1cnZlMyxcblx0U3BsaW5lQ3VydmU6IFNwbGluZUN1cnZlXG59KTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKlx0Q3VydmVkIFBhdGggLSBhIGN1cnZlIHBhdGggaXMgc2ltcGx5IGEgYXJyYXkgb2YgY29ubmVjdGVkXG4gKlx0Y3VydmVzLCBidXQgcmV0YWlucyB0aGUgYXBpIG9mIGEgY3VydmVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuY2xhc3MgQ3VydmVQYXRoIGV4dGVuZHMgQ3VydmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdDdXJ2ZVBhdGgnO1xuXHRcdHRoaXMuY3VydmVzID0gW107XG5cdFx0dGhpcy5hdXRvQ2xvc2UgPSBmYWxzZTsgLy8gQXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHBhdGhcblx0fVxuXG5cdGFkZChjdXJ2ZSkge1xuXHRcdHRoaXMuY3VydmVzLnB1c2goY3VydmUpO1xuXHR9XG5cblx0Y2xvc2VQYXRoKCkge1xuXHRcdC8vIEFkZCBhIGxpbmUgY3VydmUgaWYgc3RhcnQgYW5kIGVuZCBvZiBsaW5lcyBhcmUgbm90IGNvbm5lY3RlZFxuXHRcdGNvbnN0IHN0YXJ0UG9pbnQgPSB0aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKTtcblx0XHRjb25zdCBlbmRQb2ludCA9IHRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aCAtIDFdLmdldFBvaW50KDEpO1xuXG5cdFx0aWYgKCFzdGFydFBvaW50LmVxdWFscyhlbmRQb2ludCkpIHtcblx0XHRcdHRoaXMuY3VydmVzLnB1c2gobmV3IExpbmVDdXJ2ZShlbmRQb2ludCwgc3RhcnRQb2ludCkpO1xuXHRcdH1cblx0fSAvLyBUbyBnZXQgYWNjdXJhdGUgcG9pbnQgd2l0aCByZWZlcmVuY2UgdG9cblx0Ly8gZW50aXJlIHBhdGggZGlzdGFuY2UgYXQgdGltZSB0LFxuXHQvLyBmb2xsb3dpbmcgaGFzIHRvIGJlIGRvbmU6XG5cdC8vIDEuIExlbmd0aCBvZiBlYWNoIHN1YiBwYXRoIGhhdmUgdG8gYmUga25vd25cblx0Ly8gMi4gTG9jYXRlIGFuZCBpZGVudGlmeSB0eXBlIG9mIGN1cnZlXG5cdC8vIDMuIEdldCB0IGZvciB0aGUgY3VydmVcblx0Ly8gNC4gUmV0dXJuIGN1cnZlLmdldFBvaW50QXQodCcpXG5cblxuXHRnZXRQb2ludCh0LCBvcHRpb25hbFRhcmdldCkge1xuXHRcdGNvbnN0IGQgPSB0ICogdGhpcy5nZXRMZW5ndGgoKTtcblx0XHRjb25zdCBjdXJ2ZUxlbmd0aHMgPSB0aGlzLmdldEN1cnZlTGVuZ3RocygpO1xuXHRcdGxldCBpID0gMDsgLy8gVG8gdGhpbmsgYWJvdXQgYm91bmRhcmllcyBwb2ludHMuXG5cblx0XHR3aGlsZSAoaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGgpIHtcblx0XHRcdGlmIChjdXJ2ZUxlbmd0aHNbaV0gPj0gZCkge1xuXHRcdFx0XHRjb25zdCBkaWZmID0gY3VydmVMZW5ndGhzW2ldIC0gZDtcblx0XHRcdFx0Y29uc3QgY3VydmUgPSB0aGlzLmN1cnZlc1tpXTtcblx0XHRcdFx0Y29uc3Qgc2VnbWVudExlbmd0aCA9IGN1cnZlLmdldExlbmd0aCgpO1xuXHRcdFx0XHRjb25zdCB1ID0gc2VnbWVudExlbmd0aCA9PT0gMCA/IDAgOiAxIC0gZGlmZiAvIHNlZ21lbnRMZW5ndGg7XG5cdFx0XHRcdHJldHVybiBjdXJ2ZS5nZXRQb2ludEF0KHUsIG9wdGlvbmFsVGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsOyAvLyBsb29wIHdoZXJlIHN1bSAhPSAwLCBzdW0gPiBkICwgc3VtKzEgPGRcblx0fSAvLyBXZSBjYW5ub3QgdXNlIHRoZSBkZWZhdWx0IFRIUkVFLkN1cnZlIGdldFBvaW50KCkgd2l0aCBnZXRMZW5ndGgoKSBiZWNhdXNlIGluXG5cdC8vIFRIUkVFLkN1cnZlLCBnZXRMZW5ndGgoKSBkZXBlbmRzIG9uIGdldFBvaW50KCkgYnV0IGluIFRIUkVFLkN1cnZlUGF0aFxuXHQvLyBnZXRQb2ludCgpIGRlcGVuZHMgb24gZ2V0TGVuZ3RoXG5cblxuXHRnZXRMZW5ndGgoKSB7XG5cdFx0Y29uc3QgbGVucyA9IHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XG5cdFx0cmV0dXJuIGxlbnNbbGVucy5sZW5ndGggLSAxXTtcblx0fSAvLyBjYWNoZUxlbmd0aHMgbXVzdCBiZSByZWNhbGN1bGF0ZWQuXG5cblxuXHR1cGRhdGVBcmNMZW5ndGhzKCkge1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuY2FjaGVMZW5ndGhzID0gbnVsbDtcblx0XHR0aGlzLmdldEN1cnZlTGVuZ3RocygpO1xuXHR9IC8vIENvbXB1dGUgbGVuZ3RocyBhbmQgY2FjaGUgdGhlbVxuXHQvLyBXZSBjYW5ub3Qgb3ZlcndyaXRlIGdldExlbmd0aHMoKSBiZWNhdXNlIFV0b1QgbWFwcGluZyB1c2VzIGl0LlxuXG5cblx0Z2V0Q3VydmVMZW5ndGhzKCkge1xuXHRcdC8vIFdlIHVzZSBjYWNoZSB2YWx1ZXMgaWYgY3VydmVzIGFuZCBjYWNoZSBhcnJheSBhcmUgc2FtZSBsZW5ndGhcblx0XHRpZiAodGhpcy5jYWNoZUxlbmd0aHMgJiYgdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoID09PSB0aGlzLmN1cnZlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNhY2hlTGVuZ3Rocztcblx0XHR9IC8vIEdldCBsZW5ndGggb2Ygc3ViLWN1cnZlXG5cdFx0Ly8gUHVzaCBzdW1zIGludG8gY2FjaGVkIGFycmF5XG5cblxuXHRcdGNvbnN0IGxlbmd0aHMgPSBbXTtcblx0XHRsZXQgc3VtcyA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0c3VtcyArPSB0aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKTtcblx0XHRcdGxlbmd0aHMucHVzaChzdW1zKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhY2hlTGVuZ3RocyA9IGxlbmd0aHM7XG5cdFx0cmV0dXJuIGxlbmd0aHM7XG5cdH1cblxuXHRnZXRTcGFjZWRQb2ludHMoZGl2aXNpb25zID0gNDApIHtcblx0XHRjb25zdCBwb2ludHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGRpdmlzaW9uczsgaSsrKSB7XG5cdFx0XHRwb2ludHMucHVzaCh0aGlzLmdldFBvaW50KGkgLyBkaXZpc2lvbnMpKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hdXRvQ2xvc2UpIHtcblx0XHRcdHBvaW50cy5wdXNoKHBvaW50c1swXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblx0fVxuXG5cdGdldFBvaW50cyhkaXZpc2lvbnMgPSAxMikge1xuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXHRcdGxldCBsYXN0O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGN1cnZlcyA9IHRoaXMuY3VydmVzOyBpIDwgY3VydmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjdXJ2ZSA9IGN1cnZlc1tpXTtcblx0XHRcdGNvbnN0IHJlc29sdXRpb24gPSBjdXJ2ZSAmJiBjdXJ2ZS5pc0VsbGlwc2VDdXJ2ZSA/IGRpdmlzaW9ucyAqIDIgOiBjdXJ2ZSAmJiAoY3VydmUuaXNMaW5lQ3VydmUgfHwgY3VydmUuaXNMaW5lQ3VydmUzKSA/IDEgOiBjdXJ2ZSAmJiBjdXJ2ZS5pc1NwbGluZUN1cnZlID8gZGl2aXNpb25zICogY3VydmUucG9pbnRzLmxlbmd0aCA6IGRpdmlzaW9ucztcblx0XHRcdGNvbnN0IHB0cyA9IGN1cnZlLmdldFBvaW50cyhyZXNvbHV0aW9uKTtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBwdHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0Y29uc3QgcG9pbnQgPSBwdHNbal07XG5cdFx0XHRcdGlmIChsYXN0ICYmIGxhc3QuZXF1YWxzKHBvaW50KSkgY29udGludWU7IC8vIGVuc3VyZXMgbm8gY29uc2VjdXRpdmUgcG9pbnRzIGFyZSBkdXBsaWNhdGVzXG5cblx0XHRcdFx0cG9pbnRzLnB1c2gocG9pbnQpO1xuXHRcdFx0XHRsYXN0ID0gcG9pbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYXV0b0Nsb3NlICYmIHBvaW50cy5sZW5ndGggPiAxICYmICFwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdLmVxdWFscyhwb2ludHNbMF0pKSB7XG5cdFx0XHRwb2ludHMucHVzaChwb2ludHNbMF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludHM7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmN1cnZlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzb3VyY2UuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgY3VydmUgPSBzb3VyY2UuY3VydmVzW2ldO1xuXHRcdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZS5jbG9uZSgpKTtcblx0XHR9XG5cblx0XHR0aGlzLmF1dG9DbG9zZSA9IHNvdXJjZS5hdXRvQ2xvc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEuYXV0b0Nsb3NlID0gdGhpcy5hdXRvQ2xvc2U7XG5cdFx0ZGF0YS5jdXJ2ZXMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xuXHRcdFx0ZGF0YS5jdXJ2ZXMucHVzaChjdXJ2ZS50b0pTT04oKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmcm9tSlNPTihqc29uKSB7XG5cdFx0c3VwZXIuZnJvbUpTT04oanNvbik7XG5cdFx0dGhpcy5hdXRvQ2xvc2UgPSBqc29uLmF1dG9DbG9zZTtcblx0XHR0aGlzLmN1cnZlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGN1cnZlID0ganNvbi5jdXJ2ZXNbaV07XG5cdFx0XHR0aGlzLmN1cnZlcy5wdXNoKG5ldyBDdXJ2ZXNbY3VydmUudHlwZV0oKS5mcm9tSlNPTihjdXJ2ZSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuY2xhc3MgUGF0aCBleHRlbmRzIEN1cnZlUGF0aCB7XG5cdGNvbnN0cnVjdG9yKHBvaW50cykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1BhdGgnO1xuXHRcdHRoaXMuY3VycmVudFBvaW50ID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdGlmIChwb2ludHMpIHtcblx0XHRcdHRoaXMuc2V0RnJvbVBvaW50cyhwb2ludHMpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZyb21Qb2ludHMocG9pbnRzKSB7XG5cdFx0dGhpcy5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcblxuXHRcdGZvciAobGV0IGkgPSAxLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dGhpcy5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1vdmVUbyh4LCB5KSB7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KHgsIHkpOyAvLyBUT0RPIGNvbnNpZGVyIHJlZmVyZW5jaW5nIHZlY3RvcnMgaW5zdGVhZCBvZiBjb3B5aW5nP1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsaW5lVG8oeCwgeSkge1xuXHRcdGNvbnN0IGN1cnZlID0gbmV3IExpbmVDdXJ2ZSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLCBuZXcgVmVjdG9yMih4LCB5KSk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KHgsIHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cXVhZHJhdGljQ3VydmVUbyhhQ1B4LCBhQ1B5LCBhWCwgYVkpIHtcblx0XHRjb25zdCBjdXJ2ZSA9IG5ldyBRdWFkcmF0aWNCZXppZXJDdXJ2ZSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLCBuZXcgVmVjdG9yMihhQ1B4LCBhQ1B5KSwgbmV3IFZlY3RvcjIoYVgsIGFZKSk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KGFYLCBhWSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRiZXppZXJDdXJ2ZVRvKGFDUDF4LCBhQ1AxeSwgYUNQMngsIGFDUDJ5LCBhWCwgYVkpIHtcblx0XHRjb25zdCBjdXJ2ZSA9IG5ldyBDdWJpY0JlemllckN1cnZlKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksIG5ldyBWZWN0b3IyKGFDUDF4LCBhQ1AxeSksIG5ldyBWZWN0b3IyKGFDUDJ4LCBhQ1AyeSksIG5ldyBWZWN0b3IyKGFYLCBhWSkpO1xuXHRcdHRoaXMuY3VydmVzLnB1c2goY3VydmUpO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LnNldChhWCwgYVkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3BsaW5lVGhydShwdHNcblx0LypBcnJheSBvZiBWZWN0b3IqL1xuXHQpIHtcblx0XHRjb25zdCBucHRzID0gW3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdChwdHMpO1xuXHRcdGNvbnN0IGN1cnZlID0gbmV3IFNwbGluZUN1cnZlKG5wdHMpO1xuXHRcdHRoaXMuY3VydmVzLnB1c2goY3VydmUpO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LmNvcHkocHRzW3B0cy5sZW5ndGggLSAxXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcmMoYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlKSB7XG5cdFx0Y29uc3QgeDAgPSB0aGlzLmN1cnJlbnRQb2ludC54O1xuXHRcdGNvbnN0IHkwID0gdGhpcy5jdXJyZW50UG9pbnQueTtcblx0XHR0aGlzLmFic2FyYyhhWCArIHgwLCBhWSArIHkwLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGFic2FyYyhhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UpIHtcblx0XHR0aGlzLmFic2VsbGlwc2UoYVgsIGFZLCBhUmFkaXVzLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGVsbGlwc2UoYVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24pIHtcblx0XHRjb25zdCB4MCA9IHRoaXMuY3VycmVudFBvaW50Lng7XG5cdFx0Y29uc3QgeTAgPSB0aGlzLmN1cnJlbnRQb2ludC55O1xuXHRcdHRoaXMuYWJzZWxsaXBzZShhWCArIHgwLCBhWSArIHkwLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWJzZWxsaXBzZShhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbikge1xuXHRcdGNvbnN0IGN1cnZlID0gbmV3IEVsbGlwc2VDdXJ2ZShhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbik7XG5cblx0XHRpZiAodGhpcy5jdXJ2ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gaWYgYSBwcmV2aW91cyBjdXJ2ZSBpcyBwcmVzZW50LCBhdHRlbXB0IHRvIGpvaW5cblx0XHRcdGNvbnN0IGZpcnN0UG9pbnQgPSBjdXJ2ZS5nZXRQb2ludCgwKTtcblxuXHRcdFx0aWYgKCFmaXJzdFBvaW50LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCkpIHtcblx0XHRcdFx0dGhpcy5saW5lVG8oZmlyc3RQb2ludC54LCBmaXJzdFBvaW50LnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY3VydmVzLnB1c2goY3VydmUpO1xuXHRcdGNvbnN0IGxhc3RQb2ludCA9IGN1cnZlLmdldFBvaW50KDEpO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LmNvcHkobGFzdFBvaW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LmNvcHkoc291cmNlLmN1cnJlbnRQb2ludCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEuY3VycmVudFBvaW50ID0gdGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHN1cGVyLmZyb21KU09OKGpzb24pO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheShqc29uLmN1cnJlbnRQb2ludCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZSBleHRlbmRzIFBhdGgge1xuXHRjb25zdHJ1Y3Rvcihwb2ludHMpIHtcblx0XHRzdXBlcihwb2ludHMpO1xuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXHRcdHRoaXMudHlwZSA9ICdTaGFwZSc7XG5cdFx0dGhpcy5ob2xlcyA9IFtdO1xuXHR9XG5cblx0Z2V0UG9pbnRzSG9sZXMoZGl2aXNpb25zKSB7XG5cdFx0Y29uc3QgaG9sZXNQdHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGhvbGVzUHRzW2ldID0gdGhpcy5ob2xlc1tpXS5nZXRQb2ludHMoZGl2aXNpb25zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaG9sZXNQdHM7XG5cdH0gLy8gZ2V0IHBvaW50cyBvZiBzaGFwZSBhbmQgaG9sZXMgKGtleXBvaW50cyBiYXNlZCBvbiBzZWdtZW50cyBwYXJhbWV0ZXIpXG5cblxuXHRleHRyYWN0UG9pbnRzKGRpdmlzaW9ucykge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaGFwZTogdGhpcy5nZXRQb2ludHMoZGl2aXNpb25zKSxcblx0XHRcdGhvbGVzOiB0aGlzLmdldFBvaW50c0hvbGVzKGRpdmlzaW9ucylcblx0XHR9O1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5ob2xlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzb3VyY2UuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBob2xlID0gc291cmNlLmhvbGVzW2ldO1xuXHRcdFx0dGhpcy5ob2xlcy5wdXNoKGhvbGUuY2xvbmUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblx0XHRkYXRhLmhvbGVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBob2xlID0gdGhpcy5ob2xlc1tpXTtcblx0XHRcdGRhdGEuaG9sZXMucHVzaChob2xlLnRvSlNPTigpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZyb21KU09OKGpzb24pIHtcblx0XHRzdXBlci5mcm9tSlNPTihqc29uKTtcblx0XHR0aGlzLnV1aWQgPSBqc29uLnV1aWQ7XG5cdFx0dGhpcy5ob2xlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaG9sZSA9IGpzb24uaG9sZXNbaV07XG5cdFx0XHR0aGlzLmhvbGVzLnB1c2gobmV3IFBhdGgoKS5mcm9tSlNPTihob2xlKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG4vKipcbiAqIFBvcnQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L2VhcmN1dCAodjIuMi4yKVxuICovXG5jb25zdCBFYXJjdXQgPSB7XG5cdHRyaWFuZ3VsYXRlOiBmdW5jdGlvbiAoZGF0YSwgaG9sZUluZGljZXMsIGRpbSA9IDIpIHtcblx0XHRjb25zdCBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcblx0XHRjb25zdCBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcblx0XHRsZXQgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKTtcblx0XHRjb25zdCB0cmlhbmdsZXMgPSBbXTtcblx0XHRpZiAoIW91dGVyTm9kZSB8fCBvdXRlck5vZGUubmV4dCA9PT0gb3V0ZXJOb2RlLnByZXYpIHJldHVybiB0cmlhbmdsZXM7XG5cdFx0bGV0IG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIGludlNpemU7XG5cdFx0aWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pOyAvLyBpZiB0aGUgc2hhcGUgaXMgbm90IHRvbyBzaW1wbGUsIHdlJ2xsIHVzZSB6LW9yZGVyIGN1cnZlIGhhc2ggbGF0ZXI7IGNhbGN1bGF0ZSBwb2x5Z29uIGJib3hcblxuXHRcdGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG5cdFx0XHRtaW5YID0gbWF4WCA9IGRhdGFbMF07XG5cdFx0XHRtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cblx0XHRcdGZvciAobGV0IGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcblx0XHRcdFx0eCA9IGRhdGFbaV07XG5cdFx0XHRcdHkgPSBkYXRhW2kgKyAxXTtcblx0XHRcdFx0aWYgKHggPCBtaW5YKSBtaW5YID0geDtcblx0XHRcdFx0aWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcblx0XHRcdFx0aWYgKHggPiBtYXhYKSBtYXhYID0geDtcblx0XHRcdFx0aWYgKHkgPiBtYXhZKSBtYXhZID0geTtcblx0XHRcdH0gLy8gbWluWCwgbWluWSBhbmQgaW52U2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cblxuXG5cdFx0XHRpbnZTaXplID0gTWF0aC5tYXgobWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTtcblx0XHRcdGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xuXHRcdH1cblxuXHRcdGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0XHRyZXR1cm4gdHJpYW5nbGVzO1xuXHR9XG59OyAvLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcblxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuXHRsZXQgaSwgbGFzdDtcblxuXHRpZiAoY2xvY2t3aXNlID09PSBzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkgPiAwKSB7XG5cdFx0Zm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChpID0gZW5kIC0gZGltOyBpID49IHN0YXJ0OyBpIC09IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuXHR9XG5cblx0aWYgKGxhc3QgJiYgZXF1YWxzKGxhc3QsIGxhc3QubmV4dCkpIHtcblx0XHRyZW1vdmVOb2RlKGxhc3QpO1xuXHRcdGxhc3QgPSBsYXN0Lm5leHQ7XG5cdH1cblxuXHRyZXR1cm4gbGFzdDtcbn0gLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcblxuXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuXHRpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XG5cdGlmICghZW5kKSBlbmQgPSBzdGFydDtcblx0bGV0IHAgPSBzdGFydCxcblx0XHRcdGFnYWluO1xuXG5cdGRvIHtcblx0XHRhZ2FpbiA9IGZhbHNlO1xuXG5cdFx0aWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuXHRcdFx0cmVtb3ZlTm9kZShwKTtcblx0XHRcdHAgPSBlbmQgPSBwLnByZXY7XG5cdFx0XHRpZiAocCA9PT0gcC5uZXh0KSBicmVhaztcblx0XHRcdGFnYWluID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cCA9IHAubmV4dDtcblx0XHR9XG5cdH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cblx0cmV0dXJuIGVuZDtcbn0gLy8gbWFpbiBlYXIgc2xpY2luZyBsb29wIHdoaWNoIHRyaWFuZ3VsYXRlcyBhIHBvbHlnb24gKGdpdmVuIGFzIGEgbGlua2VkIGxpc3QpXG5cblxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIHBhc3MpIHtcblx0aWYgKCFlYXIpIHJldHVybjsgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuXG5cdGlmICghcGFzcyAmJiBpbnZTaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cdGxldCBzdG9wID0gZWFyLFxuXHRcdFx0cHJldixcblx0XHRcdG5leHQ7IC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuXG5cdHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcblx0XHRwcmV2ID0gZWFyLnByZXY7XG5cdFx0bmV4dCA9IGVhci5uZXh0O1xuXG5cdFx0aWYgKGludlNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIDogaXNFYXIoZWFyKSkge1xuXHRcdFx0Ly8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXHRcdFx0cmVtb3ZlTm9kZShlYXIpOyAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0ZXggbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG5cblx0XHRcdGVhciA9IG5leHQubmV4dDtcblx0XHRcdHN0b3AgPSBuZXh0Lm5leHQ7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRlYXIgPSBuZXh0OyAvLyBpZiB3ZSBsb29wZWQgdGhyb3VnaCB0aGUgd2hvbGUgcmVtYWluaW5nIHBvbHlnb24gYW5kIGNhbid0IGZpbmQgYW55IG1vcmUgZWFyc1xuXG5cdFx0aWYgKGVhciA9PT0gc3RvcCkge1xuXHRcdFx0Ly8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cblx0XHRcdGlmICghcGFzcykge1xuXHRcdFx0XHRlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAxKTsgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcblx0XHRcdH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuXHRcdFx0XHRlYXIgPSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKGZpbHRlclBvaW50cyhlYXIpLCB0cmlhbmdsZXMsIGRpbSk7XG5cdFx0XHRcdGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAyKTsgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cblx0XHRcdH0gZWxzZSBpZiAocGFzcyA9PT0gMikge1xuXHRcdFx0XHRzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59IC8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuXG5cbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuXHRjb25zdCBhID0gZWFyLnByZXYsXG5cdFx0XHRcdGIgPSBlYXIsXG5cdFx0XHRcdGMgPSBlYXIubmV4dDtcblx0aWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXHQvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxuXG5cdGxldCBwID0gZWFyLm5leHQubmV4dDtcblxuXHR3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcblx0XHRpZiAocG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJiBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAubmV4dDtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIHtcblx0Y29uc3QgYSA9IGVhci5wcmV2LFxuXHRcdFx0XHRiID0gZWFyLFxuXHRcdFx0XHRjID0gZWFyLm5leHQ7XG5cdGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblx0Ly8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcblxuXHRjb25zdCBtaW5UWCA9IGEueCA8IGIueCA/IGEueCA8IGMueCA/IGEueCA6IGMueCA6IGIueCA8IGMueCA/IGIueCA6IGMueCxcblx0XHRcdFx0bWluVFkgPSBhLnkgPCBiLnkgPyBhLnkgPCBjLnkgPyBhLnkgOiBjLnkgOiBiLnkgPCBjLnkgPyBiLnkgOiBjLnksXG5cdFx0XHRcdG1heFRYID0gYS54ID4gYi54ID8gYS54ID4gYy54ID8gYS54IDogYy54IDogYi54ID4gYy54ID8gYi54IDogYy54LFxuXHRcdFx0XHRtYXhUWSA9IGEueSA+IGIueSA/IGEueSA+IGMueSA/IGEueSA6IGMueSA6IGIueSA+IGMueSA/IGIueSA6IGMueTsgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcblxuXHRjb25zdCBtaW5aID0gek9yZGVyKG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgaW52U2l6ZSksXG5cdFx0XHRcdG1heFogPSB6T3JkZXIobWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0bGV0IHAgPSBlYXIucHJldlosXG5cdFx0XHRuID0gZWFyLm5leHRaOyAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBib3RoIGRpcmVjdGlvbnNcblxuXHR3aGlsZSAocCAmJiBwLnogPj0gbWluWiAmJiBuICYmIG4ueiA8PSBtYXhaKSB7XG5cdFx0aWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiYgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHAgPSBwLnByZXZaO1xuXHRcdGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJiBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkpICYmIGFyZWEobi5wcmV2LCBuLCBuLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcblx0XHRuID0gbi5uZXh0Wjtcblx0fSAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlclxuXG5cblx0d2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcblx0XHRpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiYgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJiBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAucHJldlo7XG5cdH0gLy8gbG9vayBmb3IgcmVtYWluaW5nIHBvaW50cyBpbiBpbmNyZWFzaW5nIHotb3JkZXJcblxuXG5cdHdoaWxlIChuICYmIG4ueiA8PSBtYXhaKSB7XG5cdFx0aWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiYgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuXHRcdG4gPSBuLm5leHRaO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59IC8vIGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1pbnRlcnNlY3Rpb25zXG5cblxuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcblx0bGV0IHAgPSBzdGFydDtcblxuXHRkbyB7XG5cdFx0Y29uc3QgYSA9IHAucHJldixcblx0XHRcdFx0XHRiID0gcC5uZXh0Lm5leHQ7XG5cblx0XHRpZiAoIWVxdWFscyhhLCBiKSAmJiBpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cdFx0XHR0cmlhbmdsZXMucHVzaChhLmkgLyBkaW0pO1xuXHRcdFx0dHJpYW5nbGVzLnB1c2gocC5pIC8gZGltKTtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKGIuaSAvIGRpbSk7IC8vIHJlbW92ZSB0d28gbm9kZXMgaW52b2x2ZWRcblxuXHRcdFx0cmVtb3ZlTm9kZShwKTtcblx0XHRcdHJlbW92ZU5vZGUocC5uZXh0KTtcblx0XHRcdHAgPSBzdGFydCA9IGI7XG5cdFx0fVxuXG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG5cdHJldHVybiBmaWx0ZXJQb2ludHMocCk7XG59IC8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5cblxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG5cdC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG5cdGxldCBhID0gc3RhcnQ7XG5cblx0ZG8ge1xuXHRcdGxldCBiID0gYS5uZXh0Lm5leHQ7XG5cblx0XHR3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG5cdFx0XHRpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG5cdFx0XHRcdC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcblx0XHRcdFx0bGV0IGMgPSBzcGxpdFBvbHlnb24oYSwgYik7IC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG5cblx0XHRcdFx0YSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuXHRcdFx0XHRjID0gZmlsdGVyUG9pbnRzKGMsIGMubmV4dCk7IC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG5cblx0XHRcdFx0ZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0XHRcdFx0ZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRiID0gYi5uZXh0O1xuXHRcdH1cblxuXHRcdGEgPSBhLm5leHQ7XG5cdH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn0gLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuXG5cbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuXHRjb25zdCBxdWV1ZSA9IFtdO1xuXHRsZXQgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xuXG5cdGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0c3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcblx0XHRlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuXHRcdGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuXHRcdGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XG5cdFx0cXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG5cdH1cblxuXHRxdWV1ZS5zb3J0KGNvbXBhcmVYKTsgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcblxuXHRmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcblx0XHRlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuXHRcdG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcblx0fVxuXG5cdHJldHVybiBvdXRlck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcblx0cmV0dXJuIGEueCAtIGIueDtcbn0gLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5cblxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcblx0b3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcblxuXHRpZiAob3V0ZXJOb2RlKSB7XG5cdFx0Y29uc3QgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpOyAvLyBmaWx0ZXIgY29sbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcblxuXHRcdGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcblx0XHRmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcblx0fVxufSAvLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5cblxuZnVuY3Rpb24gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKSB7XG5cdGxldCBwID0gb3V0ZXJOb2RlO1xuXHRjb25zdCBoeCA9IGhvbGUueDtcblx0Y29uc3QgaHkgPSBob2xlLnk7XG5cdGxldCBxeCA9IC1JbmZpbml0eSxcblx0XHRcdG07IC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcblx0Ly8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3RlbnRpYWwgY29ubmVjdGlvbiBwb2ludFxuXG5cdGRvIHtcblx0XHRpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55ICYmIHAubmV4dC55ICE9PSBwLnkpIHtcblx0XHRcdGNvbnN0IHggPSBwLnggKyAoaHkgLSBwLnkpICogKHAubmV4dC54IC0gcC54KSAvIChwLm5leHQueSAtIHAueSk7XG5cblx0XHRcdGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuXHRcdFx0XHRxeCA9IHg7XG5cblx0XHRcdFx0aWYgKHggPT09IGh4KSB7XG5cdFx0XHRcdFx0aWYgKGh5ID09PSBwLnkpIHJldHVybiBwO1xuXHRcdFx0XHRcdGlmIChoeSA9PT0gcC5uZXh0LnkpIHJldHVybiBwLm5leHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHAgPSBwLm5leHQ7XG5cdH0gd2hpbGUgKHAgIT09IG91dGVyTm9kZSk7XG5cblx0aWYgKCFtKSByZXR1cm4gbnVsbDtcblx0aWYgKGh4ID09PSBxeCkgcmV0dXJuIG07IC8vIGhvbGUgdG91Y2hlcyBvdXRlciBzZWdtZW50OyBwaWNrIGxlZnRtb3N0IGVuZHBvaW50XG5cdC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcblx0Ly8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG5cdC8vIG90aGVyd2lzZSBjaG9vc2UgdGhlIHBvaW50IG9mIHRoZSBtaW5pbXVtIGFuZ2xlIHdpdGggdGhlIHJheSBhcyBjb25uZWN0aW9uIHBvaW50XG5cblx0Y29uc3Qgc3RvcCA9IG0sXG5cdFx0XHRcdG14ID0gbS54LFxuXHRcdFx0XHRteSA9IG0ueTtcblx0bGV0IHRhbk1pbiA9IEluZmluaXR5LFxuXHRcdFx0dGFuO1xuXHRwID0gbTtcblxuXHRkbyB7XG5cdFx0aWYgKGh4ID49IHAueCAmJiBwLnggPj0gbXggJiYgaHggIT09IHAueCAmJiBwb2ludEluVHJpYW5nbGUoaHkgPCBteSA/IGh4IDogcXgsIGh5LCBteCwgbXksIGh5IDwgbXkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cdFx0XHR0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cblx0XHRcdGlmIChsb2NhbGx5SW5zaWRlKHAsIGhvbGUpICYmICh0YW4gPCB0YW5NaW4gfHwgdGFuID09PSB0YW5NaW4gJiYgKHAueCA+IG0ueCB8fCBwLnggPT09IG0ueCAmJiBzZWN0b3JDb250YWluc1NlY3RvcihtLCBwKSkpKSB7XG5cdFx0XHRcdG0gPSBwO1xuXHRcdFx0XHR0YW5NaW4gPSB0YW47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gc3RvcCk7XG5cblx0cmV0dXJuIG07XG59IC8vIHdoZXRoZXIgc2VjdG9yIGluIHZlcnRleCBtIGNvbnRhaW5zIHNlY3RvciBpbiB2ZXJ0ZXggcCBpbiB0aGUgc2FtZSBjb29yZGluYXRlc1xuXG5cbmZ1bmN0aW9uIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApIHtcblx0cmV0dXJuIGFyZWEobS5wcmV2LCBtLCBwLnByZXYpIDwgMCAmJiBhcmVhKHAubmV4dCwgbSwgbS5uZXh0KSA8IDA7XG59IC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcblxuXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG5cdGxldCBwID0gc3RhcnQ7XG5cblx0ZG8ge1xuXHRcdGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cdFx0cC5wcmV2WiA9IHAucHJldjtcblx0XHRwLm5leHRaID0gcC5uZXh0O1xuXHRcdHAgPSBwLm5leHQ7XG5cdH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuXHRwLnByZXZaLm5leHRaID0gbnVsbDtcblx0cC5wcmV2WiA9IG51bGw7XG5cdHNvcnRMaW5rZWQocCk7XG59IC8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdlIHNvcnQgYWxnb3JpdGhtXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxuXG5cbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuXHRsZXQgaSxcblx0XHRcdHAsXG5cdFx0XHRxLFxuXHRcdFx0ZSxcblx0XHRcdHRhaWwsXG5cdFx0XHRudW1NZXJnZXMsXG5cdFx0XHRwU2l6ZSxcblx0XHRcdHFTaXplLFxuXHRcdFx0aW5TaXplID0gMTtcblxuXHRkbyB7XG5cdFx0cCA9IGxpc3Q7XG5cdFx0bGlzdCA9IG51bGw7XG5cdFx0dGFpbCA9IG51bGw7XG5cdFx0bnVtTWVyZ2VzID0gMDtcblxuXHRcdHdoaWxlIChwKSB7XG5cdFx0XHRudW1NZXJnZXMrKztcblx0XHRcdHEgPSBwO1xuXHRcdFx0cFNpemUgPSAwO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcblx0XHRcdFx0cFNpemUrKztcblx0XHRcdFx0cSA9IHEubmV4dFo7XG5cdFx0XHRcdGlmICghcSkgYnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHFTaXplID0gaW5TaXplO1xuXG5cdFx0XHR3aGlsZSAocFNpemUgPiAwIHx8IHFTaXplID4gMCAmJiBxKSB7XG5cdFx0XHRcdGlmIChwU2l6ZSAhPT0gMCAmJiAocVNpemUgPT09IDAgfHwgIXEgfHwgcC56IDw9IHEueikpIHtcblx0XHRcdFx0XHRlID0gcDtcblx0XHRcdFx0XHRwID0gcC5uZXh0Wjtcblx0XHRcdFx0XHRwU2l6ZS0tO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGUgPSBxO1xuXHRcdFx0XHRcdHEgPSBxLm5leHRaO1xuXHRcdFx0XHRcdHFTaXplLS07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7ZWxzZSBsaXN0ID0gZTtcblx0XHRcdFx0ZS5wcmV2WiA9IHRhaWw7XG5cdFx0XHRcdHRhaWwgPSBlO1xuXHRcdFx0fVxuXG5cdFx0XHRwID0gcTtcblx0XHR9XG5cblx0XHR0YWlsLm5leHRaID0gbnVsbDtcblx0XHRpblNpemUgKj0gMjtcblx0fSB3aGlsZSAobnVtTWVyZ2VzID4gMSk7XG5cblx0cmV0dXJuIGxpc3Q7XG59IC8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIGludmVyc2Ugb2YgdGhlIGxvbmdlciBzaWRlIG9mIGRhdGEgYmJveFxuXG5cbmZ1bmN0aW9uIHpPcmRlcih4LCB5LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG5cdC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2Vcblx0eCA9IDMyNzY3ICogKHggLSBtaW5YKSAqIGludlNpemU7XG5cdHkgPSAzMjc2NyAqICh5IC0gbWluWSkgKiBpbnZTaXplO1xuXHR4ID0gKHggfCB4IDw8IDgpICYgMHgwMEZGMDBGRjtcblx0eCA9ICh4IHwgeCA8PCA0KSAmIDB4MEYwRjBGMEY7XG5cdHggPSAoeCB8IHggPDwgMikgJiAweDMzMzMzMzMzO1xuXHR4ID0gKHggfCB4IDw8IDEpICYgMHg1NTU1NTU1NTtcblx0eSA9ICh5IHwgeSA8PCA4KSAmIDB4MDBGRjAwRkY7XG5cdHkgPSAoeSB8IHkgPDwgNCkgJiAweDBGMEYwRjBGO1xuXHR5ID0gKHkgfCB5IDw8IDIpICYgMHgzMzMzMzMzMztcblx0eSA9ICh5IHwgeSA8PCAxKSAmIDB4NTU1NTU1NTU7XG5cdHJldHVybiB4IHwgeSA8PCAxO1xufSAvLyBmaW5kIHRoZSBsZWZ0bW9zdCBub2RlIG9mIGEgcG9seWdvbiByaW5nXG5cblxuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcblx0bGV0IHAgPSBzdGFydCxcblx0XHRcdGxlZnRtb3N0ID0gc3RhcnQ7XG5cblx0ZG8ge1xuXHRcdGlmIChwLnggPCBsZWZ0bW9zdC54IHx8IHAueCA9PT0gbGVmdG1vc3QueCAmJiBwLnkgPCBsZWZ0bW9zdC55KSBsZWZ0bW9zdCA9IHA7XG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG5cdHJldHVybiBsZWZ0bW9zdDtcbn0gLy8gY2hlY2sgaWYgYSBwb2ludCBsaWVzIHdpdGhpbiBhIGNvbnZleCB0cmlhbmdsZVxuXG5cbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcblx0cmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufSAvLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcblxuXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xuXHRyZXR1cm4gYS5uZXh0LmkgIT09IGIuaSAmJiBhLnByZXYuaSAhPT0gYi5pICYmICFpbnRlcnNlY3RzUG9seWdvbihhLCBiKSAmJiAoIC8vIGRvbmVzJ3QgaW50ZXJzZWN0IG90aGVyIGVkZ2VzXG5cdGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYikgJiYgKCAvLyBsb2NhbGx5IHZpc2libGVcblx0YXJlYShhLnByZXYsIGEsIGIucHJldikgfHwgYXJlYShhLCBiLnByZXYsIGIpKSB8fCAvLyBkb2VzIG5vdCBjcmVhdGUgb3Bwb3NpdGUtZmFjaW5nIHNlY3RvcnNcblx0ZXF1YWxzKGEsIGIpICYmIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpID4gMCAmJiBhcmVhKGIucHJldiwgYiwgYi5uZXh0KSA+IDApOyAvLyBzcGVjaWFsIHplcm8tbGVuZ3RoIGNhc2Vcbn0gLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuXG5cbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuXHRyZXR1cm4gKHEueSAtIHAueSkgKiAoci54IC0gcS54KSAtIChxLnggLSBwLngpICogKHIueSAtIHEueSk7XG59IC8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJlIGVxdWFsXG5cblxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuXHRyZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufSAvLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5cblxuZnVuY3Rpb24gaW50ZXJzZWN0cyhwMSwgcTEsIHAyLCBxMikge1xuXHRjb25zdCBvMSA9IHNpZ24oYXJlYShwMSwgcTEsIHAyKSk7XG5cdGNvbnN0IG8yID0gc2lnbihhcmVhKHAxLCBxMSwgcTIpKTtcblx0Y29uc3QgbzMgPSBzaWduKGFyZWEocDIsIHEyLCBwMSkpO1xuXHRjb25zdCBvNCA9IHNpZ24oYXJlYShwMiwgcTIsIHExKSk7XG5cdGlmIChvMSAhPT0gbzIgJiYgbzMgIT09IG80KSByZXR1cm4gdHJ1ZTsgLy8gZ2VuZXJhbCBjYXNlXG5cblx0aWYgKG8xID09PSAwICYmIG9uU2VnbWVudChwMSwgcDIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcDIgYXJlIGNvbGxpbmVhciBhbmQgcDIgbGllcyBvbiBwMXExXG5cblx0aWYgKG8yID09PSAwICYmIG9uU2VnbWVudChwMSwgcTIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcTIgYXJlIGNvbGxpbmVhciBhbmQgcTIgbGllcyBvbiBwMXExXG5cblx0aWYgKG8zID09PSAwICYmIG9uU2VnbWVudChwMiwgcDEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcDEgYXJlIGNvbGxpbmVhciBhbmQgcDEgbGllcyBvbiBwMnEyXG5cblx0aWYgKG80ID09PSAwICYmIG9uU2VnbWVudChwMiwgcTEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcTEgYXJlIGNvbGxpbmVhciBhbmQgcTEgbGllcyBvbiBwMnEyXG5cblx0cmV0dXJuIGZhbHNlO1xufSAvLyBmb3IgY29sbGluZWFyIHBvaW50cyBwLCBxLCByLCBjaGVjayBpZiBwb2ludCBxIGxpZXMgb24gc2VnbWVudCBwclxuXG5cbmZ1bmN0aW9uIG9uU2VnbWVudChwLCBxLCByKSB7XG5cdHJldHVybiBxLnggPD0gTWF0aC5tYXgocC54LCByLngpICYmIHEueCA+PSBNYXRoLm1pbihwLngsIHIueCkgJiYgcS55IDw9IE1hdGgubWF4KHAueSwgci55KSAmJiBxLnkgPj0gTWF0aC5taW4ocC55LCByLnkpO1xufVxuXG5mdW5jdGlvbiBzaWduKG51bSkge1xuXHRyZXR1cm4gbnVtID4gMCA/IDEgOiBudW0gPCAwID8gLTEgOiAwO1xufSAvLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xuXG5cbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcblx0bGV0IHAgPSBhO1xuXG5cdGRvIHtcblx0XHRpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG5cdFx0cCA9IHAubmV4dDtcblx0fSB3aGlsZSAocCAhPT0gYSk7XG5cblx0cmV0dXJuIGZhbHNlO1xufSAvLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cblxuXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcblx0cmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/IGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDogYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufSAvLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cblxuXG5mdW5jdGlvbiBtaWRkbGVJbnNpZGUoYSwgYikge1xuXHRsZXQgcCA9IGEsXG5cdFx0XHRpbnNpZGUgPSBmYWxzZTtcblx0Y29uc3QgcHggPSAoYS54ICsgYi54KSAvIDIsXG5cdFx0XHRcdHB5ID0gKGEueSArIGIueSkgLyAyO1xuXG5cdGRvIHtcblx0XHRpZiAocC55ID4gcHkgIT09IHAubmV4dC55ID4gcHkgJiYgcC5uZXh0LnkgIT09IHAueSAmJiBweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkgaW5zaWRlID0gIWluc2lkZTtcblx0XHRwID0gcC5uZXh0O1xuXHR9IHdoaWxlIChwICE9PSBhKTtcblxuXHRyZXR1cm4gaW5zaWRlO1xufSAvLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcblxuXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuXHRjb25zdCBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuXHRcdFx0XHRiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuXHRcdFx0XHRhbiA9IGEubmV4dCxcblx0XHRcdFx0YnAgPSBiLnByZXY7XG5cdGEubmV4dCA9IGI7XG5cdGIucHJldiA9IGE7XG5cdGEyLm5leHQgPSBhbjtcblx0YW4ucHJldiA9IGEyO1xuXHRiMi5uZXh0ID0gYTI7XG5cdGEyLnByZXYgPSBiMjtcblx0YnAubmV4dCA9IGIyO1xuXHRiMi5wcmV2ID0gYnA7XG5cdHJldHVybiBiMjtcbn0gLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcblxuXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcblx0Y29uc3QgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG5cdGlmICghbGFzdCkge1xuXHRcdHAucHJldiA9IHA7XG5cdFx0cC5uZXh0ID0gcDtcblx0fSBlbHNlIHtcblx0XHRwLm5leHQgPSBsYXN0Lm5leHQ7XG5cdFx0cC5wcmV2ID0gbGFzdDtcblx0XHRsYXN0Lm5leHQucHJldiA9IHA7XG5cdFx0bGFzdC5uZXh0ID0gcDtcblx0fVxuXG5cdHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlKHApIHtcblx0cC5uZXh0LnByZXYgPSBwLnByZXY7XG5cdHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXHRpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG5cdGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG5cdC8vIHZlcnRleCBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuXHR0aGlzLmkgPSBpOyAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcblxuXHR0aGlzLnggPSB4O1xuXHR0aGlzLnkgPSB5OyAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcblxuXHR0aGlzLnByZXYgPSBudWxsO1xuXHR0aGlzLm5leHQgPSBudWxsOyAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG5cblx0dGhpcy56ID0gbnVsbDsgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxuXG5cdHRoaXMucHJldlogPSBudWxsO1xuXHR0aGlzLm5leHRaID0gbnVsbDsgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHN0ZWluZXIgcG9pbnRcblxuXHR0aGlzLnN0ZWluZXIgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pIHtcblx0bGV0IHN1bSA9IDA7XG5cblx0Zm9yIChsZXQgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuXHRcdHN1bSArPSAoZGF0YVtqXSAtIGRhdGFbaV0pICogKGRhdGFbaSArIDFdICsgZGF0YVtqICsgMV0pO1xuXHRcdGogPSBpO1xuXHR9XG5cblx0cmV0dXJuIHN1bTtcbn1cblxuY2xhc3MgU2hhcGVVdGlscyB7XG5cdC8vIGNhbGN1bGF0ZSBhcmVhIG9mIHRoZSBjb250b3VyIHBvbHlnb25cblx0c3RhdGljIGFyZWEoY29udG91cikge1xuXHRcdGNvbnN0IG4gPSBjb250b3VyLmxlbmd0aDtcblx0XHRsZXQgYSA9IDAuMDtcblxuXHRcdGZvciAobGV0IHAgPSBuIC0gMSwgcSA9IDA7IHEgPCBuOyBwID0gcSsrKSB7XG5cdFx0XHRhICs9IGNvbnRvdXJbcF0ueCAqIGNvbnRvdXJbcV0ueSAtIGNvbnRvdXJbcV0ueCAqIGNvbnRvdXJbcF0ueTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYSAqIDAuNTtcblx0fVxuXG5cdHN0YXRpYyBpc0Nsb2NrV2lzZShwdHMpIHtcblx0XHRyZXR1cm4gU2hhcGVVdGlscy5hcmVhKHB0cykgPCAwO1xuXHR9XG5cblx0c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUoY29udG91ciwgaG9sZXMpIHtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdOyAvLyBmbGF0IGFycmF5IG9mIHZlcnRpY2VzIGxpa2UgWyB4MCx5MCwgeDEseTEsIHgyLHkyLCAuLi4gXVxuXG5cdFx0Y29uc3QgaG9sZUluZGljZXMgPSBbXTsgLy8gYXJyYXkgb2YgaG9sZSBpbmRpY2VzXG5cblx0XHRjb25zdCBmYWNlcyA9IFtdOyAvLyBmaW5hbCBhcnJheSBvZiB2ZXJ0ZXggaW5kaWNlcyBsaWtlIFsgWyBhLGIsZCBdLCBbIGIsYyxkIF0gXVxuXG5cdFx0cmVtb3ZlRHVwRW5kUHRzKGNvbnRvdXIpO1xuXHRcdGFkZENvbnRvdXIodmVydGljZXMsIGNvbnRvdXIpOyAvL1xuXG5cdFx0bGV0IGhvbGVJbmRleCA9IGNvbnRvdXIubGVuZ3RoO1xuXHRcdGhvbGVzLmZvckVhY2gocmVtb3ZlRHVwRW5kUHRzKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaG9sZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhvbGVJbmRpY2VzLnB1c2goaG9sZUluZGV4KTtcblx0XHRcdGhvbGVJbmRleCArPSBob2xlc1tpXS5sZW5ndGg7XG5cdFx0XHRhZGRDb250b3VyKHZlcnRpY2VzLCBob2xlc1tpXSk7XG5cdFx0fSAvL1xuXG5cblx0XHRjb25zdCB0cmlhbmdsZXMgPSBFYXJjdXQudHJpYW5ndWxhdGUodmVydGljZXMsIGhvbGVJbmRpY2VzKTsgLy9cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHRmYWNlcy5wdXNoKHRyaWFuZ2xlcy5zbGljZShpLCBpICsgMykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWNlcztcblx0fVxuXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUR1cEVuZFB0cyhwb2ludHMpIHtcblx0Y29uc3QgbCA9IHBvaW50cy5sZW5ndGg7XG5cblx0aWYgKGwgPiAyICYmIHBvaW50c1tsIC0gMV0uZXF1YWxzKHBvaW50c1swXSkpIHtcblx0XHRwb2ludHMucG9wKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkQ29udG91cih2ZXJ0aWNlcywgY29udG91cikge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRvdXIubGVuZ3RoOyBpKyspIHtcblx0XHR2ZXJ0aWNlcy5wdXNoKGNvbnRvdXJbaV0ueCk7XG5cdFx0dmVydGljZXMucHVzaChjb250b3VyW2ldLnkpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBleHRydWRlZCBnZW9tZXRyeSBmcm9tIGEgcGF0aCBzaGFwZS5cbiAqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcbiAqXHRjdXJ2ZVNlZ21lbnRzOiA8aW50PiwgLy8gbnVtYmVyIG9mIHBvaW50cyBvbiB0aGUgY3VydmVzXG4gKlx0c3RlcHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgcG9pbnRzIGZvciB6LXNpZGUgZXh0cnVzaW9ucyAvIHVzZWQgZm9yIHN1YmRpdmlkaW5nIHNlZ21lbnRzIG9mIGV4dHJ1ZGUgc3BsaW5lIHRvb1xuICpcdGRlcHRoOiA8ZmxvYXQ+LCAvLyBEZXB0aCB0byBleHRydWRlIHRoZSBzaGFwZVxuICpcbiAqXHRiZXZlbEVuYWJsZWQ6IDxib29sPiwgLy8gdHVybiBvbiBiZXZlbFxuICpcdGJldmVsVGhpY2tuZXNzOiA8ZmxvYXQ+LCAvLyBob3cgZGVlcCBpbnRvIHRoZSBvcmlnaW5hbCBzaGFwZSBiZXZlbCBnb2VzXG4gKlx0YmV2ZWxTaXplOiA8ZmxvYXQ+LCAvLyBob3cgZmFyIGZyb20gc2hhcGUgb3V0bGluZSAoaW5jbHVkaW5nIGJldmVsT2Zmc2V0KSBpcyBiZXZlbFxuICpcdGJldmVsT2Zmc2V0OiA8ZmxvYXQ+LCAvLyBob3cgZmFyIGZyb20gc2hhcGUgb3V0bGluZSBkb2VzIGJldmVsIHN0YXJ0XG4gKlx0YmV2ZWxTZWdtZW50czogPGludD4sIC8vIG51bWJlciBvZiBiZXZlbCBsYXllcnNcbiAqXG4gKlx0ZXh0cnVkZVBhdGg6IDxUSFJFRS5DdXJ2ZT4gLy8gY3VydmUgdG8gZXh0cnVkZSBzaGFwZSBhbG9uZ1xuICpcbiAqXHRVVkdlbmVyYXRvcjogPE9iamVjdD4gLy8gb2JqZWN0IHRoYXQgcHJvdmlkZXMgVVYgZ2VuZXJhdG9yIGZ1bmN0aW9uc1xuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBFeHRydWRlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHNoYXBlcyA9IG5ldyBTaGFwZShbbmV3IFZlY3RvcjIoMC41LCAwLjUpLCBuZXcgVmVjdG9yMigtMC41LCAwLjUpLCBuZXcgVmVjdG9yMigtMC41LCAtMC41KSwgbmV3IFZlY3RvcjIoMC41LCAtMC41KV0pLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdFeHRydWRlR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHNoYXBlczogc2hhcGVzLFxuXHRcdFx0b3B0aW9uczogb3B0aW9uc1xuXHRcdH07XG5cdFx0c2hhcGVzID0gQXJyYXkuaXNBcnJheShzaGFwZXMpID8gc2hhcGVzIDogW3NoYXBlc107XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IHZlcnRpY2VzQXJyYXkgPSBbXTtcblx0XHRjb25zdCB1dkFycmF5ID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuXHRcdFx0YWRkU2hhcGUoc2hhcGUpO1xuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXNBcnJheSwgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2QXJyYXksIDIpKTtcblx0XHR0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7IC8vIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gYWRkU2hhcGUoc2hhcGUpIHtcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gW107IC8vIG9wdGlvbnNcblxuXHRcdFx0Y29uc3QgY3VydmVTZWdtZW50cyA9IG9wdGlvbnMuY3VydmVTZWdtZW50cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jdXJ2ZVNlZ21lbnRzIDogMTI7XG5cdFx0XHRjb25zdCBzdGVwcyA9IG9wdGlvbnMuc3RlcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc3RlcHMgOiAxO1xuXHRcdFx0bGV0IGRlcHRoID0gb3B0aW9ucy5kZXB0aCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aCA6IDE7XG5cdFx0XHRsZXQgYmV2ZWxFbmFibGVkID0gb3B0aW9ucy5iZXZlbEVuYWJsZWQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxFbmFibGVkIDogdHJ1ZTtcblx0XHRcdGxldCBiZXZlbFRoaWNrbmVzcyA9IG9wdGlvbnMuYmV2ZWxUaGlja25lc3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxUaGlja25lc3MgOiAwLjI7XG5cdFx0XHRsZXQgYmV2ZWxTaXplID0gb3B0aW9ucy5iZXZlbFNpemUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxTaXplIDogYmV2ZWxUaGlja25lc3MgLSAwLjE7XG5cdFx0XHRsZXQgYmV2ZWxPZmZzZXQgPSBvcHRpb25zLmJldmVsT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJldmVsT2Zmc2V0IDogMDtcblx0XHRcdGxldCBiZXZlbFNlZ21lbnRzID0gb3B0aW9ucy5iZXZlbFNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJldmVsU2VnbWVudHMgOiAzO1xuXHRcdFx0Y29uc3QgZXh0cnVkZVBhdGggPSBvcHRpb25zLmV4dHJ1ZGVQYXRoO1xuXHRcdFx0Y29uc3QgdXZnZW4gPSBvcHRpb25zLlVWR2VuZXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLlVWR2VuZXJhdG9yIDogV29ybGRVVkdlbmVyYXRvcjsgLy8gZGVwcmVjYXRlZCBvcHRpb25zXG5cblx0XHRcdGlmIChvcHRpb25zLmFtb3VudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4nKTtcblx0XHRcdFx0ZGVwdGggPSBvcHRpb25zLmFtb3VudDtcblx0XHRcdH0gLy9cblxuXG5cdFx0XHRsZXQgZXh0cnVkZVB0cyxcblx0XHRcdFx0XHRleHRydWRlQnlQYXRoID0gZmFsc2U7XG5cdFx0XHRsZXQgc3BsaW5lVHViZSwgYmlub3JtYWwsIG5vcm1hbCwgcG9zaXRpb24yO1xuXG5cdFx0XHRpZiAoZXh0cnVkZVBhdGgpIHtcblx0XHRcdFx0ZXh0cnVkZVB0cyA9IGV4dHJ1ZGVQYXRoLmdldFNwYWNlZFBvaW50cyhzdGVwcyk7XG5cdFx0XHRcdGV4dHJ1ZGVCeVBhdGggPSB0cnVlO1xuXHRcdFx0XHRiZXZlbEVuYWJsZWQgPSBmYWxzZTsgLy8gYmV2ZWxzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhdGggZXh0cnVzaW9uXG5cdFx0XHRcdC8vIFNFVFVQIFROQiB2YXJpYWJsZXNcblx0XHRcdFx0Ly8gVE9ETzEgLSBoYXZlIGEgLmlzQ2xvc2VkIGluIHNwbGluZT9cblxuXHRcdFx0XHRzcGxpbmVUdWJlID0gZXh0cnVkZVBhdGguY29tcHV0ZUZyZW5ldEZyYW1lcyhzdGVwcywgZmFsc2UpOyAvLyBjb25zb2xlLmxvZyhzcGxpbmVUdWJlLCAnc3BsaW5lVHViZScsIHNwbGluZVR1YmUubm9ybWFscy5sZW5ndGgsICdzdGVwcycsIHN0ZXBzLCAnZXh0cnVkZVB0cycsIGV4dHJ1ZGVQdHMubGVuZ3RoKTtcblxuXHRcdFx0XHRiaW5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRcdG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRcdHBvc2l0aW9uMiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHR9IC8vIFNhZmVndWFyZHMgaWYgYmV2ZWxzIGFyZSBub3QgZW5hYmxlZFxuXG5cblx0XHRcdGlmICghYmV2ZWxFbmFibGVkKSB7XG5cdFx0XHRcdGJldmVsU2VnbWVudHMgPSAwO1xuXHRcdFx0XHRiZXZlbFRoaWNrbmVzcyA9IDA7XG5cdFx0XHRcdGJldmVsU2l6ZSA9IDA7XG5cdFx0XHRcdGJldmVsT2Zmc2V0ID0gMDtcblx0XHRcdH0gLy8gVmFyaWFibGVzIGluaXRpYWxpemF0aW9uXG5cblxuXHRcdFx0Y29uc3Qgc2hhcGVQb2ludHMgPSBzaGFwZS5leHRyYWN0UG9pbnRzKGN1cnZlU2VnbWVudHMpO1xuXHRcdFx0bGV0IHZlcnRpY2VzID0gc2hhcGVQb2ludHMuc2hhcGU7XG5cdFx0XHRjb25zdCBob2xlcyA9IHNoYXBlUG9pbnRzLmhvbGVzO1xuXHRcdFx0Y29uc3QgcmV2ZXJzZSA9ICFTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKHZlcnRpY2VzKTtcblxuXHRcdFx0aWYgKHJldmVyc2UpIHtcblx0XHRcdFx0dmVydGljZXMgPSB2ZXJ0aWNlcy5yZXZlcnNlKCk7IC8vIE1heWJlIHdlIHNob3VsZCBhbHNvIGNoZWNrIGlmIGhvbGVzIGFyZSBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBqdXN0IHRvIGJlIHNhZmUgLi4uXG5cblx0XHRcdFx0Zm9yIChsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGgrKykge1xuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbaF07XG5cblx0XHRcdFx0XHRpZiAoU2hhcGVVdGlscy5pc0Nsb2NrV2lzZShhaG9sZSkpIHtcblx0XHRcdFx0XHRcdGhvbGVzW2hdID0gYWhvbGUucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmYWNlcyA9IFNoYXBlVXRpbHMudHJpYW5ndWxhdGVTaGFwZSh2ZXJ0aWNlcywgaG9sZXMpO1xuXHRcdFx0LyogVmVydGljZXMgKi9cblxuXHRcdFx0Y29uc3QgY29udG91ciA9IHZlcnRpY2VzOyAvLyB2ZXJ0aWNlcyBoYXMgYWxsIHBvaW50cyBidXQgY29udG91ciBoYXMgb25seSBwb2ludHMgb2YgY2lyY3VtZmVyZW5jZVxuXG5cdFx0XHRmb3IgKGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCsrKSB7XG5cdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbaF07XG5cdFx0XHRcdHZlcnRpY2VzID0gdmVydGljZXMuY29uY2F0KGFob2xlKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gc2NhbGVQdDIocHQsIHZlYywgc2l6ZSkge1xuXHRcdFx0XHRpZiAoIXZlYykgY29uc29sZS5lcnJvcignVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QnKTtcblx0XHRcdFx0cmV0dXJuIHZlYy5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKHNpemUpLmFkZChwdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZsZW4gPSB2ZXJ0aWNlcy5sZW5ndGgsXG5cdFx0XHRcdFx0XHRmbGVuID0gZmFjZXMubGVuZ3RoOyAvLyBGaW5kIGRpcmVjdGlvbnMgZm9yIHBvaW50IG1vdmVtZW50XG5cblx0XHRcdGZ1bmN0aW9uIGdldEJldmVsVmVjKGluUHQsIGluUHJldiwgaW5OZXh0KSB7XG5cdFx0XHRcdC8vIGNvbXB1dGVzIGZvciBpblB0IHRoZSBjb3JyZXNwb25kaW5nIHBvaW50IGluUHQnIG9uIGEgbmV3IGNvbnRvdXJcblx0XHRcdFx0Ly9cdCBzaGlmdGVkIGJ5IDEgdW5pdCAobGVuZ3RoIG9mIG5vcm1hbGl6ZWQgdmVjdG9yKSB0byB0aGUgbGVmdFxuXHRcdFx0XHQvLyBpZiB3ZSB3YWxrIGFsb25nIGNvbnRvdXIgY2xvY2t3aXNlLCB0aGlzIG5ldyBjb250b3VyIGlzIG91dHNpZGUgdGhlIG9sZCBvbmVcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gaW5QdCcgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdHdvIGxpbmVzIHBhcmFsbGVsIHRvIHRoZSB0d29cblx0XHRcdFx0Ly9cdGFkamFjZW50IGVkZ2VzIG9mIGluUHQgYXQgYSBkaXN0YW5jZSBvZiAxIHVuaXQgb24gdGhlIGxlZnQgc2lkZS5cblx0XHRcdFx0bGV0IHZfdHJhbnNfeCwgdl90cmFuc195LCBzaHJpbmtfYnk7IC8vIHJlc3VsdGluZyB0cmFuc2xhdGlvbiB2ZWN0b3IgZm9yIGluUHRcblx0XHRcdFx0Ly8gZ29vZCByZWFkaW5nIGZvciBnZW9tZXRyeSBhbGdvcml0aG1zIChoZXJlOiBsaW5lLWxpbmUgaW50ZXJzZWN0aW9uKVxuXHRcdFx0XHQvLyBodHRwOi8vZ2VvbWFsZ29yaXRobXMuY29tL2EwNS1faW50ZXJzZWN0LTEuaHRtbFxuXG5cdFx0XHRcdGNvbnN0IHZfcHJldl94ID0gaW5QdC54IC0gaW5QcmV2LngsXG5cdFx0XHRcdFx0XHRcdHZfcHJldl95ID0gaW5QdC55IC0gaW5QcmV2Lnk7XG5cdFx0XHRcdGNvbnN0IHZfbmV4dF94ID0gaW5OZXh0LnggLSBpblB0LngsXG5cdFx0XHRcdFx0XHRcdHZfbmV4dF95ID0gaW5OZXh0LnkgLSBpblB0Lnk7XG5cdFx0XHRcdGNvbnN0IHZfcHJldl9sZW5zcSA9IHZfcHJldl94ICogdl9wcmV2X3ggKyB2X3ByZXZfeSAqIHZfcHJldl95OyAvLyBjaGVjayBmb3IgY29sbGluZWFyIGVkZ2VzXG5cblx0XHRcdFx0Y29uc3QgY29sbGluZWFyMCA9IHZfcHJldl94ICogdl9uZXh0X3kgLSB2X3ByZXZfeSAqIHZfbmV4dF94O1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhjb2xsaW5lYXIwKSA+IE51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdFx0Ly8gbm90IGNvbGxpbmVhclxuXHRcdFx0XHRcdC8vIGxlbmd0aCBvZiB2ZWN0b3JzIGZvciBub3JtYWxpemluZ1xuXHRcdFx0XHRcdGNvbnN0IHZfcHJldl9sZW4gPSBNYXRoLnNxcnQodl9wcmV2X2xlbnNxKTtcblx0XHRcdFx0XHRjb25zdCB2X25leHRfbGVuID0gTWF0aC5zcXJ0KHZfbmV4dF94ICogdl9uZXh0X3ggKyB2X25leHRfeSAqIHZfbmV4dF95KTsgLy8gc2hpZnQgYWRqYWNlbnQgcG9pbnRzIGJ5IHVuaXQgdmVjdG9ycyB0byB0aGUgbGVmdFxuXG5cdFx0XHRcdFx0Y29uc3QgcHRQcmV2U2hpZnRfeCA9IGluUHJldi54IC0gdl9wcmV2X3kgLyB2X3ByZXZfbGVuO1xuXHRcdFx0XHRcdGNvbnN0IHB0UHJldlNoaWZ0X3kgPSBpblByZXYueSArIHZfcHJldl94IC8gdl9wcmV2X2xlbjtcblx0XHRcdFx0XHRjb25zdCBwdE5leHRTaGlmdF94ID0gaW5OZXh0LnggLSB2X25leHRfeSAvIHZfbmV4dF9sZW47XG5cdFx0XHRcdFx0Y29uc3QgcHROZXh0U2hpZnRfeSA9IGluTmV4dC55ICsgdl9uZXh0X3ggLyB2X25leHRfbGVuOyAvLyBzY2FsaW5nIGZhY3RvciBmb3Igdl9wcmV2IHRvIGludGVyc2VjdGlvbiBwb2ludFxuXG5cdFx0XHRcdFx0Y29uc3Qgc2YgPSAoKHB0TmV4dFNoaWZ0X3ggLSBwdFByZXZTaGlmdF94KSAqIHZfbmV4dF95IC0gKHB0TmV4dFNoaWZ0X3kgLSBwdFByZXZTaGlmdF95KSAqIHZfbmV4dF94KSAvICh2X3ByZXZfeCAqIHZfbmV4dF95IC0gdl9wcmV2X3kgKiB2X25leHRfeCk7IC8vIHZlY3RvciBmcm9tIGluUHQgdG8gaW50ZXJzZWN0aW9uIHBvaW50XG5cblx0XHRcdFx0XHR2X3RyYW5zX3ggPSBwdFByZXZTaGlmdF94ICsgdl9wcmV2X3ggKiBzZiAtIGluUHQueDtcblx0XHRcdFx0XHR2X3RyYW5zX3kgPSBwdFByZXZTaGlmdF95ICsgdl9wcmV2X3kgKiBzZiAtIGluUHQueTsgLy8gRG9uJ3Qgbm9ybWFsaXplISwgb3RoZXJ3aXNlIHNoYXJwIGNvcm5lcnMgYmVjb21lIHVnbHlcblx0XHRcdFx0XHQvL1x0YnV0IHByZXZlbnQgY3Jhenkgc3Bpa2VzXG5cblx0XHRcdFx0XHRjb25zdCB2X3RyYW5zX2xlbnNxID0gdl90cmFuc194ICogdl90cmFuc194ICsgdl90cmFuc195ICogdl90cmFuc195O1xuXG5cdFx0XHRcdFx0aWYgKHZfdHJhbnNfbGVuc3EgPD0gMikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKHZfdHJhbnNfeCwgdl90cmFuc195KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2hyaW5rX2J5ID0gTWF0aC5zcXJ0KHZfdHJhbnNfbGVuc3EgLyAyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBjb2xsaW5lYXIgZWRnZXNcblx0XHRcdFx0XHRsZXQgZGlyZWN0aW9uX2VxID0gZmFsc2U7IC8vIGFzc3VtZXM6IG9wcG9zaXRlXG5cblx0XHRcdFx0XHRpZiAodl9wcmV2X3ggPiBOdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0XHRcdFx0aWYgKHZfbmV4dF94ID4gTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uX2VxID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHZfcHJldl94IDwgLU51bWJlci5FUFNJTE9OKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh2X25leHRfeCA8IC1OdW1iZXIuRVBTSUxPTikge1xuXHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbl9lcSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmIChNYXRoLnNpZ24odl9wcmV2X3kpID09PSBNYXRoLnNpZ24odl9uZXh0X3kpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uX2VxID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkaXJlY3Rpb25fZXEpIHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiV2FybmluZzogbGluZXMgYXJlIGEgc3RyYWlnaHQgc2VxdWVuY2VcIik7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3ggPSAtdl9wcmV2X3k7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3kgPSB2X3ByZXZfeDtcblx0XHRcdFx0XHRcdHNocmlua19ieSA9IE1hdGguc3FydCh2X3ByZXZfbGVuc3EpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIldhcm5pbmc6IGxpbmVzIGFyZSBhIHN0cmFpZ2h0IHNwaWtlXCIpO1xuXHRcdFx0XHRcdFx0dl90cmFuc194ID0gdl9wcmV2X3g7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3kgPSB2X3ByZXZfeTtcblx0XHRcdFx0XHRcdHNocmlua19ieSA9IE1hdGguc3FydCh2X3ByZXZfbGVuc3EgLyAyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIodl90cmFuc194IC8gc2hyaW5rX2J5LCB2X3RyYW5zX3kgLyBzaHJpbmtfYnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250b3VyTW92ZW1lbnRzID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoLCBqID0gaWwgLSAxLCBrID0gaSArIDE7IGkgPCBpbDsgaSsrLCBqKyssIGsrKykge1xuXHRcdFx0XHRpZiAoaiA9PT0gaWwpIGogPSAwO1xuXHRcdFx0XHRpZiAoayA9PT0gaWwpIGsgPSAwOyAvL1x0KGopLS0tKGkpLS0tKGspXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdpLGosaycsIGksIGogLCBrKVxuXG5cdFx0XHRcdGNvbnRvdXJNb3ZlbWVudHNbaV0gPSBnZXRCZXZlbFZlYyhjb250b3VyW2ldLCBjb250b3VyW2pdLCBjb250b3VyW2tdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaG9sZXNNb3ZlbWVudHMgPSBbXTtcblx0XHRcdGxldCBvbmVIb2xlTW92ZW1lbnRzLFxuXHRcdFx0XHRcdHZlcnRpY2VzTW92ZW1lbnRzID0gY29udG91ck1vdmVtZW50cy5jb25jYXQoKTtcblxuXHRcdFx0Zm9yIChsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGgrKykge1xuXHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzW2hdO1xuXHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gW107XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoLCBqID0gaWwgLSAxLCBrID0gaSArIDE7IGkgPCBpbDsgaSsrLCBqKyssIGsrKykge1xuXHRcdFx0XHRcdGlmIChqID09PSBpbCkgaiA9IDA7XG5cdFx0XHRcdFx0aWYgKGsgPT09IGlsKSBrID0gMDsgLy9cdChqKS0tLShpKS0tLShrKVxuXG5cdFx0XHRcdFx0b25lSG9sZU1vdmVtZW50c1tpXSA9IGdldEJldmVsVmVjKGFob2xlW2ldLCBhaG9sZVtqXSwgYWhvbGVba10pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aG9sZXNNb3ZlbWVudHMucHVzaChvbmVIb2xlTW92ZW1lbnRzKTtcblx0XHRcdFx0dmVydGljZXNNb3ZlbWVudHMgPSB2ZXJ0aWNlc01vdmVtZW50cy5jb25jYXQob25lSG9sZU1vdmVtZW50cyk7XG5cdFx0XHR9IC8vIExvb3AgYmV2ZWxTZWdtZW50cywgMSBmb3IgdGhlIGZyb250LCAxIGZvciB0aGUgYmFja1xuXG5cblx0XHRcdGZvciAobGV0IGIgPSAwOyBiIDwgYmV2ZWxTZWdtZW50czsgYisrKSB7XG5cdFx0XHRcdC8vZm9yICggYiA9IGJldmVsU2VnbWVudHM7IGIgPiAwOyBiIC0tICkge1xuXHRcdFx0XHRjb25zdCB0ID0gYiAvIGJldmVsU2VnbWVudHM7XG5cdFx0XHRcdGNvbnN0IHogPSBiZXZlbFRoaWNrbmVzcyAqIE1hdGguY29zKHQgKiBNYXRoLlBJIC8gMik7XG5cdFx0XHRcdGNvbnN0IGJzID0gYmV2ZWxTaXplICogTWF0aC5zaW4odCAqIE1hdGguUEkgLyAyKSArIGJldmVsT2Zmc2V0OyAvLyBjb250cmFjdCBzaGFwZVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBzY2FsZVB0Mihjb250b3VyW2ldLCBjb250b3VyTW92ZW1lbnRzW2ldLCBicyk7XG5cdFx0XHRcdFx0dih2ZXJ0LngsIHZlcnQueSwgLXopO1xuXHRcdFx0XHR9IC8vIGV4cGFuZCBob2xlc1xuXG5cblx0XHRcdFx0Zm9yIChsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGgrKykge1xuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbaF07XG5cdFx0XHRcdFx0b25lSG9sZU1vdmVtZW50cyA9IGhvbGVzTW92ZW1lbnRzW2hdO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmVydCA9IHNjYWxlUHQyKGFob2xlW2ldLCBvbmVIb2xlTW92ZW1lbnRzW2ldLCBicyk7XG5cdFx0XHRcdFx0XHR2KHZlcnQueCwgdmVydC55LCAteik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJzID0gYmV2ZWxTaXplICsgYmV2ZWxPZmZzZXQ7IC8vIEJhY2sgZmFjaW5nIHZlcnRpY2VzXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmxlbjsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHZlcnQgPSBiZXZlbEVuYWJsZWQgPyBzY2FsZVB0Mih2ZXJ0aWNlc1tpXSwgdmVydGljZXNNb3ZlbWVudHNbaV0sIGJzKSA6IHZlcnRpY2VzW2ldO1xuXG5cdFx0XHRcdGlmICghZXh0cnVkZUJ5UGF0aCkge1xuXHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnksIDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHYoIHZlcnQueCwgdmVydC55ICsgZXh0cnVkZVB0c1sgMCBdLnksIGV4dHJ1ZGVQdHNbIDAgXS54ICk7XG5cdFx0XHRcdFx0bm9ybWFsLmNvcHkoc3BsaW5lVHViZS5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcih2ZXJ0LngpO1xuXHRcdFx0XHRcdGJpbm9ybWFsLmNvcHkoc3BsaW5lVHViZS5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHZlcnQueSk7XG5cdFx0XHRcdFx0cG9zaXRpb24yLmNvcHkoZXh0cnVkZVB0c1swXSkuYWRkKG5vcm1hbCkuYWRkKGJpbm9ybWFsKTtcblx0XHRcdFx0XHR2KHBvc2l0aW9uMi54LCBwb3NpdGlvbjIueSwgcG9zaXRpb24yLnopO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIEFkZCBzdGVwcGVkIHZlcnRpY2VzLi4uXG5cdFx0XHQvLyBJbmNsdWRpbmcgZnJvbnQgZmFjaW5nIHZlcnRpY2VzXG5cblxuXHRcdFx0Zm9yIChsZXQgcyA9IDE7IHMgPD0gc3RlcHM7IHMrKykge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZsZW47IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBiZXZlbEVuYWJsZWQgPyBzY2FsZVB0Mih2ZXJ0aWNlc1tpXSwgdmVydGljZXNNb3ZlbWVudHNbaV0sIGJzKSA6IHZlcnRpY2VzW2ldO1xuXG5cdFx0XHRcdFx0aWYgKCFleHRydWRlQnlQYXRoKSB7XG5cdFx0XHRcdFx0XHR2KHZlcnQueCwgdmVydC55LCBkZXB0aCAvIHN0ZXBzICogcyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHYoIHZlcnQueCwgdmVydC55ICsgZXh0cnVkZVB0c1sgcyAtIDEgXS55LCBleHRydWRlUHRzWyBzIC0gMSBdLnggKTtcblx0XHRcdFx0XHRcdG5vcm1hbC5jb3B5KHNwbGluZVR1YmUubm9ybWFsc1tzXSkubXVsdGlwbHlTY2FsYXIodmVydC54KTtcblx0XHRcdFx0XHRcdGJpbm9ybWFsLmNvcHkoc3BsaW5lVHViZS5iaW5vcm1hbHNbc10pLm11bHRpcGx5U2NhbGFyKHZlcnQueSk7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjIuY29weShleHRydWRlUHRzW3NdKS5hZGQobm9ybWFsKS5hZGQoYmlub3JtYWwpO1xuXHRcdFx0XHRcdFx0dihwb3NpdGlvbjIueCwgcG9zaXRpb24yLnksIHBvc2l0aW9uMi56KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gQWRkIGJldmVsIHNlZ21lbnRzIHBsYW5lc1xuXHRcdFx0Ly9mb3IgKCBiID0gMTsgYiA8PSBiZXZlbFNlZ21lbnRzOyBiICsrICkge1xuXG5cblx0XHRcdGZvciAobGV0IGIgPSBiZXZlbFNlZ21lbnRzIC0gMTsgYiA+PSAwOyBiLS0pIHtcblx0XHRcdFx0Y29uc3QgdCA9IGIgLyBiZXZlbFNlZ21lbnRzO1xuXHRcdFx0XHRjb25zdCB6ID0gYmV2ZWxUaGlja25lc3MgKiBNYXRoLmNvcyh0ICogTWF0aC5QSSAvIDIpO1xuXHRcdFx0XHRjb25zdCBicyA9IGJldmVsU2l6ZSAqIE1hdGguc2luKHQgKiBNYXRoLlBJIC8gMikgKyBiZXZlbE9mZnNldDsgLy8gY29udHJhY3Qgc2hhcGVcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBjb250b3VyLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoY29udG91cltpXSwgY29udG91ck1vdmVtZW50c1tpXSwgYnMpO1xuXHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnksIGRlcHRoICsgeik7XG5cdFx0XHRcdH0gLy8gZXhwYW5kIGhvbGVzXG5cblxuXHRcdFx0XHRmb3IgKGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWhvbGUgPSBob2xlc1toXTtcblx0XHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gaG9sZXNNb3ZlbWVudHNbaF07XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoYWhvbGVbaV0sIG9uZUhvbGVNb3ZlbWVudHNbaV0sIGJzKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFleHRydWRlQnlQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdHYodmVydC54LCB2ZXJ0LnksIGRlcHRoICsgeik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2KHZlcnQueCwgdmVydC55ICsgZXh0cnVkZVB0c1tzdGVwcyAtIDFdLnksIGV4dHJ1ZGVQdHNbc3RlcHMgLSAxXS54ICsgeik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBGYWNlcyAqL1xuXHRcdFx0Ly8gVG9wIGFuZCBib3R0b20gZmFjZXNcblxuXG5cdFx0XHRidWlsZExpZEZhY2VzKCk7IC8vIFNpZGVzIGZhY2VzXG5cblx0XHRcdGJ1aWxkU2lkZUZhY2VzKCk7IC8vLy8vXHRJbnRlcm5hbCBmdW5jdGlvbnNcblxuXHRcdFx0ZnVuY3Rpb24gYnVpbGRMaWRGYWNlcygpIHtcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cblx0XHRcdFx0aWYgKGJldmVsRW5hYmxlZCkge1xuXHRcdFx0XHRcdGxldCBsYXllciA9IDA7IC8vIHN0ZXBzICsgMVxuXG5cdFx0XHRcdFx0bGV0IG9mZnNldCA9IHZsZW4gKiBsYXllcjsgLy8gQm90dG9tIGZhY2VzXG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzW2ldO1xuXHRcdFx0XHRcdFx0ZjMoZmFjZVsyXSArIG9mZnNldCwgZmFjZVsxXSArIG9mZnNldCwgZmFjZVswXSArIG9mZnNldCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGF5ZXIgPSBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyO1xuXHRcdFx0XHRcdG9mZnNldCA9IHZsZW4gKiBsYXllcjsgLy8gVG9wIGZhY2VzXG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzW2ldO1xuXHRcdFx0XHRcdFx0ZjMoZmFjZVswXSArIG9mZnNldCwgZmFjZVsxXSArIG9mZnNldCwgZmFjZVsyXSArIG9mZnNldCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEJvdHRvbSBmYWNlc1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbaV07XG5cdFx0XHRcdFx0XHRmMyhmYWNlWzJdLCBmYWNlWzFdLCBmYWNlWzBdKTtcblx0XHRcdFx0XHR9IC8vIFRvcCBmYWNlc1xuXG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzW2ldO1xuXHRcdFx0XHRcdFx0ZjMoZmFjZVswXSArIHZsZW4gKiBzdGVwcywgZmFjZVsxXSArIHZsZW4gKiBzdGVwcywgZmFjZVsyXSArIHZsZW4gKiBzdGVwcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUuYWRkR3JvdXAoc3RhcnQsIHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMyAtIHN0YXJ0LCAwKTtcblx0XHRcdH0gLy8gQ3JlYXRlIGZhY2VzIGZvciB0aGUgei1zaWRlcyBvZiB0aGUgc2hhcGVcblxuXG5cdFx0XHRmdW5jdGlvbiBidWlsZFNpZGVGYWNlcygpIHtcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cdFx0XHRcdGxldCBsYXllcm9mZnNldCA9IDA7XG5cdFx0XHRcdHNpZGV3YWxscyhjb250b3VyLCBsYXllcm9mZnNldCk7XG5cdFx0XHRcdGxheWVyb2Zmc2V0ICs9IGNvbnRvdXIubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAobGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoKyspIHtcblx0XHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzW2hdO1xuXHRcdFx0XHRcdHNpZGV3YWxscyhhaG9sZSwgbGF5ZXJvZmZzZXQpOyAvLywgdHJ1ZVxuXG5cdFx0XHRcdFx0bGF5ZXJvZmZzZXQgKz0gYWhvbGUubGVuZ3RoO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUuYWRkR3JvdXAoc3RhcnQsIHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMyAtIHN0YXJ0LCAxKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gc2lkZXdhbGxzKGNvbnRvdXIsIGxheWVyb2Zmc2V0KSB7XG5cdFx0XHRcdGxldCBpID0gY29udG91ci5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKC0taSA+PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3QgaiA9IGk7XG5cdFx0XHRcdFx0bGV0IGsgPSBpIC0gMTtcblx0XHRcdFx0XHRpZiAoayA8IDApIGsgPSBjb250b3VyLmxlbmd0aCAtIDE7IC8vY29uc29sZS5sb2coJ2InLCBpLGosIGktMSwgayx2ZXJ0aWNlcy5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgcyA9IDAsIHNsID0gc3RlcHMgKyBiZXZlbFNlZ21lbnRzICogMjsgcyA8IHNsOyBzKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNsZW4xID0gdmxlbiAqIHM7XG5cdFx0XHRcdFx0XHRjb25zdCBzbGVuMiA9IHZsZW4gKiAocyArIDEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYSA9IGxheWVyb2Zmc2V0ICsgaiArIHNsZW4xLFxuXHRcdFx0XHRcdFx0XHRcdFx0YiA9IGxheWVyb2Zmc2V0ICsgayArIHNsZW4xLFxuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IGxheWVyb2Zmc2V0ICsgayArIHNsZW4yLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZCA9IGxheWVyb2Zmc2V0ICsgaiArIHNsZW4yO1xuXHRcdFx0XHRcdFx0ZjQoYSwgYiwgYywgZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHYoeCwgeSwgeikge1xuXHRcdFx0XHRwbGFjZWhvbGRlci5wdXNoKHgpO1xuXHRcdFx0XHRwbGFjZWhvbGRlci5wdXNoKHkpO1xuXHRcdFx0XHRwbGFjZWhvbGRlci5wdXNoKHopO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmMyhhLCBiLCBjKSB7XG5cdFx0XHRcdGFkZFZlcnRleChhKTtcblx0XHRcdFx0YWRkVmVydGV4KGIpO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYyk7XG5cdFx0XHRcdGNvbnN0IG5leHRJbmRleCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblx0XHRcdFx0Y29uc3QgdXZzID0gdXZnZW4uZ2VuZXJhdGVUb3BVVihzY29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gMywgbmV4dEluZGV4IC0gMiwgbmV4dEluZGV4IC0gMSk7XG5cdFx0XHRcdGFkZFVWKHV2c1swXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1sxXSk7XG5cdFx0XHRcdGFkZFVWKHV2c1syXSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGY0KGEsIGIsIGMsIGQpIHtcblx0XHRcdFx0YWRkVmVydGV4KGEpO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYik7XG5cdFx0XHRcdGFkZFZlcnRleChkKTtcblx0XHRcdFx0YWRkVmVydGV4KGIpO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoYyk7XG5cdFx0XHRcdGFkZFZlcnRleChkKTtcblx0XHRcdFx0Y29uc3QgbmV4dEluZGV4ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzO1xuXHRcdFx0XHRjb25zdCB1dnMgPSB1dmdlbi5nZW5lcmF0ZVNpZGVXYWxsVVYoc2NvcGUsIHZlcnRpY2VzQXJyYXksIG5leHRJbmRleCAtIDYsIG5leHRJbmRleCAtIDMsIG5leHRJbmRleCAtIDIsIG5leHRJbmRleCAtIDEpO1xuXHRcdFx0XHRhZGRVVih1dnNbMF0pO1xuXHRcdFx0XHRhZGRVVih1dnNbMV0pO1xuXHRcdFx0XHRhZGRVVih1dnNbM10pO1xuXHRcdFx0XHRhZGRVVih1dnNbMV0pO1xuXHRcdFx0XHRhZGRVVih1dnNbMl0pO1xuXHRcdFx0XHRhZGRVVih1dnNbM10pO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBhZGRWZXJ0ZXgoaW5kZXgpIHtcblx0XHRcdFx0dmVydGljZXNBcnJheS5wdXNoKHBsYWNlaG9sZGVyW2luZGV4ICogMyArIDBdKTtcblx0XHRcdFx0dmVydGljZXNBcnJheS5wdXNoKHBsYWNlaG9sZGVyW2luZGV4ICogMyArIDFdKTtcblx0XHRcdFx0dmVydGljZXNBcnJheS5wdXNoKHBsYWNlaG9sZGVyW2luZGV4ICogMyArIDJdKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYWRkVVYodmVjdG9yMikge1xuXHRcdFx0XHR1dkFycmF5LnB1c2godmVjdG9yMi54KTtcblx0XHRcdFx0dXZBcnJheS5wdXNoKHZlY3RvcjIueSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRjb25zdCBzaGFwZXMgPSB0aGlzLnBhcmFtZXRlcnMuc2hhcGVzO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLnBhcmFtZXRlcnMub3B0aW9ucztcblx0XHRyZXR1cm4gdG9KU09OJDEoc2hhcGVzLCBvcHRpb25zLCBkYXRhKTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhLCBzaGFwZXMpIHtcblx0XHRjb25zdCBnZW9tZXRyeVNoYXBlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpsID0gZGF0YS5zaGFwZXMubGVuZ3RoOyBqIDwgamw7IGorKykge1xuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbZGF0YS5zaGFwZXNbal1dO1xuXHRcdFx0Z2VvbWV0cnlTaGFwZXMucHVzaChzaGFwZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0cnVkZVBhdGggPSBkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGg7XG5cblx0XHRpZiAoZXh0cnVkZVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YS5vcHRpb25zLmV4dHJ1ZGVQYXRoID0gbmV3IEN1cnZlc1tleHRydWRlUGF0aC50eXBlXSgpLmZyb21KU09OKGV4dHJ1ZGVQYXRoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IEV4dHJ1ZGVHZW9tZXRyeShnZW9tZXRyeVNoYXBlcywgZGF0YS5vcHRpb25zKTtcblx0fVxuXG59XG5cbmNvbnN0IFdvcmxkVVZHZW5lcmF0b3IgPSB7XG5cdGdlbmVyYXRlVG9wVVY6IGZ1bmN0aW9uIChnZW9tZXRyeSwgdmVydGljZXMsIGluZGV4QSwgaW5kZXhCLCBpbmRleEMpIHtcblx0XHRjb25zdCBhX3ggPSB2ZXJ0aWNlc1tpbmRleEEgKiAzXTtcblx0XHRjb25zdCBhX3kgPSB2ZXJ0aWNlc1tpbmRleEEgKiAzICsgMV07XG5cdFx0Y29uc3QgYl94ID0gdmVydGljZXNbaW5kZXhCICogM107XG5cdFx0Y29uc3QgYl95ID0gdmVydGljZXNbaW5kZXhCICogMyArIDFdO1xuXHRcdGNvbnN0IGNfeCA9IHZlcnRpY2VzW2luZGV4QyAqIDNdO1xuXHRcdGNvbnN0IGNfeSA9IHZlcnRpY2VzW2luZGV4QyAqIDMgKyAxXTtcblx0XHRyZXR1cm4gW25ldyBWZWN0b3IyKGFfeCwgYV95KSwgbmV3IFZlY3RvcjIoYl94LCBiX3kpLCBuZXcgVmVjdG9yMihjX3gsIGNfeSldO1xuXHR9LFxuXHRnZW5lcmF0ZVNpZGVXYWxsVVY6IGZ1bmN0aW9uIChnZW9tZXRyeSwgdmVydGljZXMsIGluZGV4QSwgaW5kZXhCLCBpbmRleEMsIGluZGV4RCkge1xuXHRcdGNvbnN0IGFfeCA9IHZlcnRpY2VzW2luZGV4QSAqIDNdO1xuXHRcdGNvbnN0IGFfeSA9IHZlcnRpY2VzW2luZGV4QSAqIDMgKyAxXTtcblx0XHRjb25zdCBhX3ogPSB2ZXJ0aWNlc1tpbmRleEEgKiAzICsgMl07XG5cdFx0Y29uc3QgYl94ID0gdmVydGljZXNbaW5kZXhCICogM107XG5cdFx0Y29uc3QgYl95ID0gdmVydGljZXNbaW5kZXhCICogMyArIDFdO1xuXHRcdGNvbnN0IGJfeiA9IHZlcnRpY2VzW2luZGV4QiAqIDMgKyAyXTtcblx0XHRjb25zdCBjX3ggPSB2ZXJ0aWNlc1tpbmRleEMgKiAzXTtcblx0XHRjb25zdCBjX3kgPSB2ZXJ0aWNlc1tpbmRleEMgKiAzICsgMV07XG5cdFx0Y29uc3QgY196ID0gdmVydGljZXNbaW5kZXhDICogMyArIDJdO1xuXHRcdGNvbnN0IGRfeCA9IHZlcnRpY2VzW2luZGV4RCAqIDNdO1xuXHRcdGNvbnN0IGRfeSA9IHZlcnRpY2VzW2luZGV4RCAqIDMgKyAxXTtcblx0XHRjb25zdCBkX3ogPSB2ZXJ0aWNlc1tpbmRleEQgKiAzICsgMl07XG5cblx0XHRpZiAoTWF0aC5hYnMoYV95IC0gYl95KSA8IE1hdGguYWJzKGFfeCAtIGJfeCkpIHtcblx0XHRcdHJldHVybiBbbmV3IFZlY3RvcjIoYV94LCAxIC0gYV96KSwgbmV3IFZlY3RvcjIoYl94LCAxIC0gYl96KSwgbmV3IFZlY3RvcjIoY194LCAxIC0gY196KSwgbmV3IFZlY3RvcjIoZF94LCAxIC0gZF96KV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBbbmV3IFZlY3RvcjIoYV95LCAxIC0gYV96KSwgbmV3IFZlY3RvcjIoYl95LCAxIC0gYl96KSwgbmV3IFZlY3RvcjIoY195LCAxIC0gY196KSwgbmV3IFZlY3RvcjIoZF95LCAxIC0gZF96KV07XG5cdFx0fVxuXHR9XG59O1xuXG5mdW5jdGlvbiB0b0pTT04kMShzaGFwZXMsIG9wdGlvbnMsIGRhdGEpIHtcblx0ZGF0YS5zaGFwZXMgPSBbXTtcblxuXHRpZiAoQXJyYXkuaXNBcnJheShzaGFwZXMpKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1tpXTtcblx0XHRcdGRhdGEuc2hhcGVzLnB1c2goc2hhcGUudXVpZCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGRhdGEuc2hhcGVzLnB1c2goc2hhcGVzLnV1aWQpO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuZXh0cnVkZVBhdGggIT09IHVuZGVmaW5lZCkgZGF0YS5vcHRpb25zLmV4dHJ1ZGVQYXRoID0gb3B0aW9ucy5leHRydWRlUGF0aC50b0pTT04oKTtcblx0cmV0dXJuIGRhdGE7XG59XG5cbmNsYXNzIEljb3NhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCBkZXRhaWwgPSAwKSB7XG5cdFx0Y29uc3QgdCA9ICgxICsgTWF0aC5zcXJ0KDUpKSAvIDI7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbLTEsIHQsIDAsIDEsIHQsIDAsIC0xLCAtdCwgMCwgMSwgLXQsIDAsIDAsIC0xLCB0LCAwLCAxLCB0LCAwLCAtMSwgLXQsIDAsIDEsIC10LCB0LCAwLCAtMSwgdCwgMCwgMSwgLXQsIDAsIC0xLCAtdCwgMCwgMV07XG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAxMSwgNSwgMCwgNSwgMSwgMCwgMSwgNywgMCwgNywgMTAsIDAsIDEwLCAxMSwgMSwgNSwgOSwgNSwgMTEsIDQsIDExLCAxMCwgMiwgMTAsIDcsIDYsIDcsIDEsIDgsIDMsIDksIDQsIDMsIDQsIDIsIDMsIDIsIDYsIDMsIDYsIDgsIDMsIDgsIDksIDQsIDksIDUsIDIsIDQsIDExLCA2LCAyLCAxMCwgOCwgNiwgNywgOSwgOCwgMV07XG5cdFx0c3VwZXIodmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsKTtcblx0XHR0aGlzLnR5cGUgPSAnSWNvc2FoZWRyb25HZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgSWNvc2FoZWRyb25HZW9tZXRyeShkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwpO1xuXHR9XG5cbn1cblxuY2xhc3MgTGF0aGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocG9pbnRzID0gW25ldyBWZWN0b3IyKDAsIDAuNSksIG5ldyBWZWN0b3IyKDAuNSwgMCksIG5ldyBWZWN0b3IyKDAsIC0wLjUpXSwgc2VnbWVudHMgPSAxMiwgcGhpU3RhcnQgPSAwLCBwaGlMZW5ndGggPSBNYXRoLlBJICogMikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0xhdGhlR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHBvaW50czogcG9pbnRzLFxuXHRcdFx0c2VnbWVudHM6IHNlZ21lbnRzLFxuXHRcdFx0cGhpU3RhcnQ6IHBoaVN0YXJ0LFxuXHRcdFx0cGhpTGVuZ3RoOiBwaGlMZW5ndGhcblx0XHR9O1xuXHRcdHNlZ21lbnRzID0gTWF0aC5mbG9vcihzZWdtZW50cyk7IC8vIGNsYW1wIHBoaUxlbmd0aCBzbyBpdCdzIGluIHJhbmdlIG9mIFsgMCwgMlBJIF1cblxuXHRcdHBoaUxlbmd0aCA9IGNsYW1wKHBoaUxlbmd0aCwgMCwgTWF0aC5QSSAqIDIpOyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblx0XHRjb25zdCBpbml0Tm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTsgLy8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0Y29uc3QgaW52ZXJzZVNlZ21lbnRzID0gMS4wIC8gc2VnbWVudHM7XG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBjdXJOb3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHByZXZOb3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGxldCBkeCA9IDA7XG5cdFx0bGV0IGR5ID0gMDsgLy8gcHJlLWNvbXB1dGUgbm9ybWFscyBmb3IgaW5pdGlhbCBcIm1lcmlkaWFuXCJcblxuXHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHBvaW50cy5sZW5ndGggLSAxOyBqKyspIHtcblx0XHRcdHN3aXRjaCAoaikge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0Ly8gc3BlY2lhbCBoYW5kbGluZyBmb3IgMXN0IHZlcnRleCBvbiBwYXRoXG5cdFx0XHRcdFx0ZHggPSBwb2ludHNbaiArIDFdLnggLSBwb2ludHNbal0ueDtcblx0XHRcdFx0XHRkeSA9IHBvaW50c1tqICsgMV0ueSAtIHBvaW50c1tqXS55O1xuXHRcdFx0XHRcdG5vcm1hbC54ID0gZHkgKiAxLjA7XG5cdFx0XHRcdFx0bm9ybWFsLnkgPSAtZHg7XG5cdFx0XHRcdFx0bm9ybWFsLnogPSBkeSAqIDAuMDtcblx0XHRcdFx0XHRwcmV2Tm9ybWFsLmNvcHkobm9ybWFsKTtcblx0XHRcdFx0XHRub3JtYWwubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0aW5pdE5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIHBvaW50cy5sZW5ndGggLSAxOlxuXHRcdFx0XHRcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGxhc3QgVmVydGV4IG9uIHBhdGhcblx0XHRcdFx0XHRpbml0Tm9ybWFscy5wdXNoKHByZXZOb3JtYWwueCwgcHJldk5vcm1hbC55LCBwcmV2Tm9ybWFsLnopO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdCBoYW5kbGluZyBmb3IgYWxsIHZlcnRpY2VzIGluIGJldHdlZW5cblx0XHRcdFx0XHRkeCA9IHBvaW50c1tqICsgMV0ueCAtIHBvaW50c1tqXS54O1xuXHRcdFx0XHRcdGR5ID0gcG9pbnRzW2ogKyAxXS55IC0gcG9pbnRzW2pdLnk7XG5cdFx0XHRcdFx0bm9ybWFsLnggPSBkeSAqIDEuMDtcblx0XHRcdFx0XHRub3JtYWwueSA9IC1keDtcblx0XHRcdFx0XHRub3JtYWwueiA9IGR5ICogMC4wO1xuXHRcdFx0XHRcdGN1ck5vcm1hbC5jb3B5KG5vcm1hbCk7XG5cdFx0XHRcdFx0bm9ybWFsLnggKz0gcHJldk5vcm1hbC54O1xuXHRcdFx0XHRcdG5vcm1hbC55ICs9IHByZXZOb3JtYWwueTtcblx0XHRcdFx0XHRub3JtYWwueiArPSBwcmV2Tm9ybWFsLno7XG5cdFx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRcdGluaXROb3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7XG5cdFx0XHRcdFx0cHJldk5vcm1hbC5jb3B5KGN1ck5vcm1hbCk7XG5cdFx0XHR9XG5cdFx0fSAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgdXZzIGFuZCBub3JtYWxzXG5cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IHBoaSA9IHBoaVN0YXJ0ICsgaSAqIGludmVyc2VTZWdtZW50cyAqIHBoaUxlbmd0aDtcblx0XHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKHBoaSk7XG5cdFx0XHRjb25zdCBjb3MgPSBNYXRoLmNvcyhwaGkpO1xuXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSBwb2ludHMubGVuZ3RoIC0gMTsgaisrKSB7XG5cdFx0XHRcdC8vIHZlcnRleFxuXHRcdFx0XHR2ZXJ0ZXgueCA9IHBvaW50c1tqXS54ICogc2luO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHBvaW50c1tqXS55O1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHBvaW50c1tqXS54ICogY29zO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyB1dlxuXG5cdFx0XHRcdHV2LnggPSBpIC8gc2VnbWVudHM7XG5cdFx0XHRcdHV2LnkgPSBqIC8gKHBvaW50cy5sZW5ndGggLSAxKTtcblx0XHRcdFx0dXZzLnB1c2godXYueCwgdXYueSk7IC8vIG5vcm1hbFxuXG5cdFx0XHRcdGNvbnN0IHggPSBpbml0Tm9ybWFsc1szICogaiArIDBdICogc2luO1xuXHRcdFx0XHRjb25zdCB5ID0gaW5pdE5vcm1hbHNbMyAqIGogKyAxXTtcblx0XHRcdFx0Y29uc3QgeiA9IGluaXROb3JtYWxzWzMgKiBqICsgMF0gKiBjb3M7XG5cdFx0XHRcdG5vcm1hbHMucHVzaCh4LCB5LCB6KTtcblx0XHRcdH1cblx0XHR9IC8vIGluZGljZXNcblxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50czsgaSsrKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGggLSAxOyBqKyspIHtcblx0XHRcdFx0Y29uc3QgYmFzZSA9IGogKyBpICogcG9pbnRzLmxlbmd0aDtcblx0XHRcdFx0Y29uc3QgYSA9IGJhc2U7XG5cdFx0XHRcdGNvbnN0IGIgPSBiYXNlICsgcG9pbnRzLmxlbmd0aDtcblx0XHRcdFx0Y29uc3QgYyA9IGJhc2UgKyBwb2ludHMubGVuZ3RoICsgMTtcblx0XHRcdFx0Y29uc3QgZCA9IGJhc2UgKyAxOyAvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGMsIGQsIGIpO1xuXHRcdFx0fVxuXHRcdH0gLy8gYnVpbGQgZ2VvbWV0cnlcblxuXG5cdFx0dGhpcy5zZXRJbmRleChpbmRpY2VzKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWxzLCAzKSk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgTGF0aGVHZW9tZXRyeShkYXRhLnBvaW50cywgZGF0YS5zZWdtZW50cywgZGF0YS5waGlTdGFydCwgZGF0YS5waGlMZW5ndGgpO1xuXHR9XG5cbn1cblxuY2xhc3MgT2N0YWhlZHJvbkdlb21ldHJ5IGV4dGVuZHMgUG9seWhlZHJvbkdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgZGV0YWlsID0gMCkge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gWzEsIDAsIDAsIC0xLCAwLCAwLCAwLCAxLCAwLCAwLCAtMSwgMCwgMCwgMCwgMSwgMCwgMCwgLTFdO1xuXHRcdGNvbnN0IGluZGljZXMgPSBbMCwgMiwgNCwgMCwgNCwgMywgMCwgMywgNSwgMCwgNSwgMiwgMSwgMiwgNSwgMSwgNSwgMywgMSwgMywgNCwgMSwgNCwgMl07XG5cdFx0c3VwZXIodmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsKTtcblx0XHR0aGlzLnR5cGUgPSAnT2N0YWhlZHJvbkdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBPY3RhaGVkcm9uR2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlsKTtcblx0fVxuXG59XG5cbmNsYXNzIFJpbmdHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IoaW5uZXJSYWRpdXMgPSAwLjUsIG91dGVyUmFkaXVzID0gMSwgdGhldGFTZWdtZW50cyA9IDgsIHBoaVNlZ21lbnRzID0gMSwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSAqIDIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdSaW5nR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdGlubmVyUmFkaXVzOiBpbm5lclJhZGl1cyxcblx0XHRcdG91dGVyUmFkaXVzOiBvdXRlclJhZGl1cyxcblx0XHRcdHRoZXRhU2VnbWVudHM6IHRoZXRhU2VnbWVudHMsXG5cdFx0XHRwaGlTZWdtZW50czogcGhpU2VnbWVudHMsXG5cdFx0XHR0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LFxuXHRcdFx0dGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoXG5cdFx0fTtcblx0XHR0aGV0YVNlZ21lbnRzID0gTWF0aC5tYXgoMywgdGhldGFTZWdtZW50cyk7XG5cdFx0cGhpU2VnbWVudHMgPSBNYXRoLm1heCgxLCBwaGlTZWdtZW50cyk7IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTsgLy8gc29tZSBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgcmFkaXVzID0gaW5uZXJSYWRpdXM7XG5cdFx0Y29uc3QgcmFkaXVzU3RlcCA9IChvdXRlclJhZGl1cyAtIGlubmVyUmFkaXVzKSAvIHBoaVNlZ21lbnRzO1xuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpOyAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSBwaGlTZWdtZW50czsgaisrKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSB0aGV0YVNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Ly8gdmFsdWVzIGFyZSBnZW5lcmF0ZSBmcm9tIHRoZSBpbnNpZGUgb2YgdGhlIHJpbmcgdG8gdGhlIG91dHNpZGVcblx0XHRcdFx0Y29uc3Qgc2VnbWVudCA9IHRoZXRhU3RhcnQgKyBpIC8gdGhldGFTZWdtZW50cyAqIHRoZXRhTGVuZ3RoOyAvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IHJhZGl1cyAqIE1hdGguY29zKHNlZ21lbnQpO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1hdGguc2luKHNlZ21lbnQpO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyBub3JtYWxcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goMCwgMCwgMSk7IC8vIHV2XG5cblx0XHRcdFx0dXYueCA9ICh2ZXJ0ZXgueCAvIG91dGVyUmFkaXVzICsgMSkgLyAyO1xuXHRcdFx0XHR1di55ID0gKHZlcnRleC55IC8gb3V0ZXJSYWRpdXMgKyAxKSAvIDI7XG5cdFx0XHRcdHV2cy5wdXNoKHV2LngsIHV2LnkpO1xuXHRcdFx0fSAvLyBpbmNyZWFzZSB0aGUgcmFkaXVzIGZvciBuZXh0IHJvdyBvZiB2ZXJ0aWNlc1xuXG5cblx0XHRcdHJhZGl1cyArPSByYWRpdXNTdGVwO1xuXHRcdH0gLy8gaW5kaWNlc1xuXG5cblx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHBoaVNlZ21lbnRzOyBqKyspIHtcblx0XHRcdGNvbnN0IHRoZXRhU2VnbWVudExldmVsID0gaiAqICh0aGV0YVNlZ21lbnRzICsgMSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhldGFTZWdtZW50czsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNlZ21lbnQgPSBpICsgdGhldGFTZWdtZW50TGV2ZWw7XG5cdFx0XHRcdGNvbnN0IGEgPSBzZWdtZW50O1xuXHRcdFx0XHRjb25zdCBiID0gc2VnbWVudCArIHRoZXRhU2VnbWVudHMgKyAxO1xuXHRcdFx0XHRjb25zdCBjID0gc2VnbWVudCArIHRoZXRhU2VnbWVudHMgKyAyO1xuXHRcdFx0XHRjb25zdCBkID0gc2VnbWVudCArIDE7IC8vIGZhY2VzXG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7XG5cdFx0XHR9XG5cdFx0fSAvLyBidWlsZCBnZW9tZXRyeVxuXG5cblx0XHR0aGlzLnNldEluZGV4KGluZGljZXMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBSaW5nR2VvbWV0cnkoZGF0YS5pbm5lclJhZGl1cywgZGF0YS5vdXRlclJhZGl1cywgZGF0YS50aGV0YVNlZ21lbnRzLCBkYXRhLnBoaVNlZ21lbnRzLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGgpO1xuXHR9XG5cbn1cblxuY2xhc3MgU2hhcGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3Ioc2hhcGVzID0gbmV3IFNoYXBlKFtuZXcgVmVjdG9yMigwLCAwLjUpLCBuZXcgVmVjdG9yMigtMC41LCAtMC41KSwgbmV3IFZlY3RvcjIoMC41LCAtMC41KV0pLCBjdXJ2ZVNlZ21lbnRzID0gMTIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTaGFwZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRzaGFwZXM6IHNoYXBlcyxcblx0XHRcdGN1cnZlU2VnbWVudHM6IGN1cnZlU2VnbWVudHNcblx0XHR9OyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGxldCBncm91cFN0YXJ0ID0gMDtcblx0XHRsZXQgZ3JvdXBDb3VudCA9IDA7IC8vIGFsbG93IHNpbmdsZSBhbmQgYXJyYXkgdmFsdWVzIGZvciBcInNoYXBlc1wiIHBhcmFtZXRlclxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc2hhcGVzKSA9PT0gZmFsc2UpIHtcblx0XHRcdGFkZFNoYXBlKHNoYXBlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGFkZFNoYXBlKHNoYXBlc1tpXSk7XG5cdFx0XHRcdHRoaXMuYWRkR3JvdXAoZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgaSk7IC8vIGVuYWJsZXMgTXVsdGlNYXRlcmlhbCBzdXBwb3J0XG5cblx0XHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50O1xuXHRcdFx0XHRncm91cENvdW50ID0gMDtcblx0XHRcdH1cblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpOyAvLyBoZWxwZXIgZnVuY3Rpb25zXG5cblx0XHRmdW5jdGlvbiBhZGRTaGFwZShzaGFwZSkge1xuXHRcdFx0Y29uc3QgaW5kZXhPZmZzZXQgPSB2ZXJ0aWNlcy5sZW5ndGggLyAzO1xuXHRcdFx0Y29uc3QgcG9pbnRzID0gc2hhcGUuZXh0cmFjdFBvaW50cyhjdXJ2ZVNlZ21lbnRzKTtcblx0XHRcdGxldCBzaGFwZVZlcnRpY2VzID0gcG9pbnRzLnNoYXBlO1xuXHRcdFx0Y29uc3Qgc2hhcGVIb2xlcyA9IHBvaW50cy5ob2xlczsgLy8gY2hlY2sgZGlyZWN0aW9uIG9mIHZlcnRpY2VzXG5cblx0XHRcdGlmIChTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKHNoYXBlVmVydGljZXMpID09PSBmYWxzZSkge1xuXHRcdFx0XHRzaGFwZVZlcnRpY2VzID0gc2hhcGVWZXJ0aWNlcy5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVIb2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2hhcGVIb2xlID0gc2hhcGVIb2xlc1tpXTtcblxuXHRcdFx0XHRpZiAoU2hhcGVVdGlscy5pc0Nsb2NrV2lzZShzaGFwZUhvbGUpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0c2hhcGVIb2xlc1tpXSA9IHNoYXBlSG9sZS5yZXZlcnNlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZmFjZXMgPSBTaGFwZVV0aWxzLnRyaWFuZ3VsYXRlU2hhcGUoc2hhcGVWZXJ0aWNlcywgc2hhcGVIb2xlcyk7IC8vIGpvaW4gdmVydGljZXMgb2YgaW5uZXIgYW5kIG91dGVyIHBhdGhzIHRvIGEgc2luZ2xlIGFycmF5XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gc2hhcGVIb2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2hhcGVIb2xlID0gc2hhcGVIb2xlc1tpXTtcblx0XHRcdFx0c2hhcGVWZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMuY29uY2F0KHNoYXBlSG9sZSk7XG5cdFx0XHR9IC8vIHZlcnRpY2VzLCBub3JtYWxzLCB1dnNcblxuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNoYXBlVmVydGljZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHZlcnRleCA9IHNoYXBlVmVydGljZXNbaV07XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCAwKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xuXHRcdFx0XHR1dnMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnkpOyAvLyB3b3JsZCB1dnNcblx0XHRcdH0gLy8gaW5jaWRlc1xuXG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gZmFjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1tpXTtcblx0XHRcdFx0Y29uc3QgYSA9IGZhY2VbMF0gKyBpbmRleE9mZnNldDtcblx0XHRcdFx0Y29uc3QgYiA9IGZhY2VbMV0gKyBpbmRleE9mZnNldDtcblx0XHRcdFx0Y29uc3QgYyA9IGZhY2VbMl0gKyBpbmRleE9mZnNldDtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGMpO1xuXHRcdFx0XHRncm91cENvdW50ICs9IDM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9KU09OKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblx0XHRjb25zdCBzaGFwZXMgPSB0aGlzLnBhcmFtZXRlcnMuc2hhcGVzO1xuXHRcdHJldHVybiB0b0pTT04oc2hhcGVzLCBkYXRhKTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTihkYXRhLCBzaGFwZXMpIHtcblx0XHRjb25zdCBnZW9tZXRyeVNoYXBlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpsID0gZGF0YS5zaGFwZXMubGVuZ3RoOyBqIDwgamw7IGorKykge1xuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbZGF0YS5zaGFwZXNbal1dO1xuXHRcdFx0Z2VvbWV0cnlTaGFwZXMucHVzaChzaGFwZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBTaGFwZUdlb21ldHJ5KGdlb21ldHJ5U2hhcGVzLCBkYXRhLmN1cnZlU2VnbWVudHMpO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gdG9KU09OKHNoYXBlcywgZGF0YSkge1xuXHRkYXRhLnNoYXBlcyA9IFtdO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KHNoYXBlcykpIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuXHRcdFx0ZGF0YS5zaGFwZXMucHVzaChzaGFwZS51dWlkKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZGF0YS5zaGFwZXMucHVzaChzaGFwZXMudXVpZCk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuY2xhc3MgU3BoZXJlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHdpZHRoU2VnbWVudHMgPSAzMiwgaGVpZ2h0U2VnbWVudHMgPSAxNiwgcGhpU3RhcnQgPSAwLCBwaGlMZW5ndGggPSBNYXRoLlBJICogMiwgdGhldGFTdGFydCA9IDAsIHRoZXRhTGVuZ3RoID0gTWF0aC5QSSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NwaGVyZUdlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRwaGlTdGFydDogcGhpU3RhcnQsXG5cdFx0XHRwaGlMZW5ndGg6IHBoaUxlbmd0aCxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXHRcdHdpZHRoU2VnbWVudHMgPSBNYXRoLm1heCgzLCBNYXRoLmZsb29yKHdpZHRoU2VnbWVudHMpKTtcblx0XHRoZWlnaHRTZWdtZW50cyA9IE1hdGgubWF4KDIsIE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpKTtcblx0XHRjb25zdCB0aGV0YUVuZCA9IE1hdGgubWluKHRoZXRhU3RhcnQgKyB0aGV0YUxlbmd0aCwgTWF0aC5QSSk7XG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBncmlkID0gW107XG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpOyAvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107IC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPD0gaGVpZ2h0U2VnbWVudHM7IGl5KyspIHtcblx0XHRcdGNvbnN0IHZlcnRpY2VzUm93ID0gW107XG5cdFx0XHRjb25zdCB2ID0gaXkgLyBoZWlnaHRTZWdtZW50czsgLy8gc3BlY2lhbCBjYXNlIGZvciB0aGUgcG9sZXNcblxuXHRcdFx0bGV0IHVPZmZzZXQgPSAwO1xuXG5cdFx0XHRpZiAoaXkgPT0gMCAmJiB0aGV0YVN0YXJ0ID09IDApIHtcblx0XHRcdFx0dU9mZnNldCA9IDAuNSAvIHdpZHRoU2VnbWVudHM7XG5cdFx0XHR9IGVsc2UgaWYgKGl5ID09IGhlaWdodFNlZ21lbnRzICYmIHRoZXRhRW5kID09IE1hdGguUEkpIHtcblx0XHRcdFx0dU9mZnNldCA9IC0wLjUgLyB3aWR0aFNlZ21lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDw9IHdpZHRoU2VnbWVudHM7IGl4KyspIHtcblx0XHRcdFx0Y29uc3QgdSA9IGl4IC8gd2lkdGhTZWdtZW50czsgLy8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSAtcmFkaXVzICogTWF0aC5jb3MocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHJhZGl1cyAqIE1hdGguc2luKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcblx0XHRcdFx0dmVydGljZXMucHVzaCh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56KTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFsLmNvcHkodmVydGV4KS5ub3JtYWxpemUoKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopOyAvLyB1dlxuXG5cdFx0XHRcdHV2cy5wdXNoKHUgKyB1T2Zmc2V0LCAxIC0gdik7XG5cdFx0XHRcdHZlcnRpY2VzUm93LnB1c2goaW5kZXgrKyk7XG5cdFx0XHR9XG5cblx0XHRcdGdyaWQucHVzaCh2ZXJ0aWNlc1Jvdyk7XG5cdFx0fSAvLyBpbmRpY2VzXG5cblxuXHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBoZWlnaHRTZWdtZW50czsgaXkrKykge1xuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IHdpZHRoU2VnbWVudHM7IGl4KyspIHtcblx0XHRcdFx0Y29uc3QgYSA9IGdyaWRbaXldW2l4ICsgMV07XG5cdFx0XHRcdGNvbnN0IGIgPSBncmlkW2l5XVtpeF07XG5cdFx0XHRcdGNvbnN0IGMgPSBncmlkW2l5ICsgMV1baXhdO1xuXHRcdFx0XHRjb25zdCBkID0gZ3JpZFtpeSArIDFdW2l4ICsgMV07XG5cdFx0XHRcdGlmIChpeSAhPT0gMCB8fCB0aGV0YVN0YXJ0ID4gMCkgaW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRpZiAoaXkgIT09IGhlaWdodFNlZ21lbnRzIC0gMSB8fCB0aGV0YUVuZCA8IE1hdGguUEkpIGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdH1cblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFNwaGVyZUdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLndpZHRoU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEucGhpU3RhcnQsIGRhdGEucGhpTGVuZ3RoLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGgpO1xuXHR9XG5cbn1cblxuY2xhc3MgVGV0cmFoZWRyb25HZW9tZXRyeSBleHRlbmRzIFBvbHloZWRyb25HZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIGRldGFpbCA9IDApIHtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFsxLCAxLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAtMSwgMSwgLTEsIC0xXTtcblx0XHRjb25zdCBpbmRpY2VzID0gWzIsIDEsIDAsIDAsIDMsIDIsIDEsIDMsIDAsIDIsIDMsIDFdO1xuXHRcdHN1cGVyKHZlcnRpY2VzLCBpbmRpY2VzLCByYWRpdXMsIGRldGFpbCk7XG5cdFx0dGhpcy50eXBlID0gJ1RldHJhaGVkcm9uR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHJhZGl1czogcmFkaXVzLFxuXHRcdFx0ZGV0YWlsOiBkZXRhaWxcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFRldHJhaGVkcm9uR2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlsKTtcblx0fVxuXG59XG5cbmNsYXNzIFRvcnVzR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHR1YmUgPSAwLjQsIHJhZGlhbFNlZ21lbnRzID0gOCwgdHVidWxhclNlZ21lbnRzID0gNiwgYXJjID0gTWF0aC5QSSAqIDIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdUb3J1c0dlb21ldHJ5Jztcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHR1YmU6IHR1YmUsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHR0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cyxcblx0XHRcdGFyYzogYXJjXG5cdFx0fTtcblx0XHRyYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IocmFkaWFsU2VnbWVudHMpO1xuXHRcdHR1YnVsYXJTZWdtZW50cyA9IE1hdGguZmxvb3IodHVidWxhclNlZ21lbnRzKTsgLy8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7IGorKykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdSA9IGkgLyB0dWJ1bGFyU2VnbWVudHMgKiBhcmM7XG5cdFx0XHRcdGNvbnN0IHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjsgLy8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSAocmFkaXVzICsgdHViZSAqIE1hdGguY29zKHYpKSAqIE1hdGguY29zKHUpO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IChyYWRpdXMgKyB0dWJlICogTWF0aC5jb3ModikpICogTWF0aC5zaW4odSk7XG5cdFx0XHRcdHZlcnRleC56ID0gdHViZSAqIE1hdGguc2luKHYpO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyBub3JtYWxcblxuXHRcdFx0XHRjZW50ZXIueCA9IHJhZGl1cyAqIE1hdGguY29zKHUpO1xuXHRcdFx0XHRjZW50ZXIueSA9IHJhZGl1cyAqIE1hdGguc2luKHUpO1xuXHRcdFx0XHRub3JtYWwuc3ViVmVjdG9ycyh2ZXJ0ZXgsIGNlbnRlcikubm9ybWFsaXplKCk7XG5cdFx0XHRcdG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsgLy8gdXZcblxuXHRcdFx0XHR1dnMucHVzaChpIC8gdHVidWxhclNlZ21lbnRzKTtcblx0XHRcdFx0dXZzLnB1c2goaiAvIHJhZGlhbFNlZ21lbnRzKTtcblx0XHRcdH1cblx0XHR9IC8vIGdlbmVyYXRlIGluZGljZXNcblxuXG5cdFx0Zm9yIChsZXQgaiA9IDE7IGogPD0gcmFkaWFsU2VnbWVudHM7IGorKykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Ly8gaW5kaWNlc1xuXHRcdFx0XHRjb25zdCBhID0gKHR1YnVsYXJTZWdtZW50cyArIDEpICogaiArIGkgLSAxO1xuXHRcdFx0XHRjb25zdCBiID0gKHR1YnVsYXJTZWdtZW50cyArIDEpICogKGogLSAxKSArIGkgLSAxO1xuXHRcdFx0XHRjb25zdCBjID0gKHR1YnVsYXJTZWdtZW50cyArIDEpICogKGogLSAxKSArIGk7XG5cdFx0XHRcdGNvbnN0IGQgPSAodHVidWxhclNlZ21lbnRzICsgMSkgKiBqICsgaTsgLy8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdH1cblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFRvcnVzR2VvbWV0cnkoZGF0YS5yYWRpdXMsIGRhdGEudHViZSwgZGF0YS5yYWRpYWxTZWdtZW50cywgZGF0YS50dWJ1bGFyU2VnbWVudHMsIGRhdGEuYXJjKTtcblx0fVxuXG59XG5cbmNsYXNzIFRvcnVzS25vdEdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCB0dWJlID0gMC40LCB0dWJ1bGFyU2VnbWVudHMgPSA2NCwgcmFkaWFsU2VnbWVudHMgPSA4LCBwID0gMiwgcSA9IDMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdUb3J1c0tub3RHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHR0dWJlOiB0dWJlLFxuXHRcdFx0dHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRwOiBwLFxuXHRcdFx0cTogcVxuXHRcdH07XG5cdFx0dHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vcih0dWJ1bGFyU2VnbWVudHMpO1xuXHRcdHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9vcihyYWRpYWxTZWdtZW50cyk7IC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTsgLy8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IFAxID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBQMiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgQiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgVCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgTiA9IG5ldyBWZWN0b3IzKCk7IC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgKytpKSB7XG5cdFx0XHQvLyB0aGUgcmFkaWFuIFwidVwiIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvbiB0aGUgdG9ydXMgY3VydmUgb2YgdGhlIGN1cnJlbnQgdHVidWxhciBzZWdlbWVudFxuXHRcdFx0Y29uc3QgdSA9IGkgLyB0dWJ1bGFyU2VnbWVudHMgKiBwICogTWF0aC5QSSAqIDI7IC8vIG5vdyB3ZSBjYWxjdWxhdGUgdHdvIHBvaW50cy4gUDEgaXMgb3VyIGN1cnJlbnQgcG9zaXRpb24gb24gdGhlIGN1cnZlLCBQMiBpcyBhIGxpdHRsZSBmYXJ0aGVyIGFoZWFkLlxuXHRcdFx0Ly8gdGhlc2UgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhIHNwZWNpYWwgXCJjb29yZGluYXRlIHNwYWNlXCIsIHdoaWNoIGlzIG5lY2Vzc2FyeSB0byBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgdmVydGV4IHBvc2l0aW9uc1xuXG5cdFx0XHRjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSwgcCwgcSwgcmFkaXVzLCBQMSk7XG5cdFx0XHRjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSArIDAuMDEsIHAsIHEsIHJhZGl1cywgUDIpOyAvLyBjYWxjdWxhdGUgb3J0aG9ub3JtYWwgYmFzaXNcblxuXHRcdFx0VC5zdWJWZWN0b3JzKFAyLCBQMSk7XG5cdFx0XHROLmFkZFZlY3RvcnMoUDIsIFAxKTtcblx0XHRcdEIuY3Jvc3NWZWN0b3JzKFQsIE4pO1xuXHRcdFx0Ti5jcm9zc1ZlY3RvcnMoQiwgVCk7IC8vIG5vcm1hbGl6ZSBCLCBOLiBUIGNhbiBiZSBpZ25vcmVkLCB3ZSBkb24ndCB1c2UgaXRcblxuXHRcdFx0Qi5ub3JtYWxpemUoKTtcblx0XHRcdE4ubm9ybWFsaXplKCk7XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyArK2opIHtcblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgdmVydGljZXMuIHRoZXkgYXJlIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGV4dHJ1c2lvbiBvZiB0aGUgdG9ydXMgY3VydmUuXG5cdFx0XHRcdC8vIGJlY2F1c2Ugd2UgZXh0cnVkZSBhIHNoYXBlIGluIHRoZSB4eS1wbGFuZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSB6LXZhbHVlLlxuXHRcdFx0XHRjb25zdCB2ID0gaiAvIHJhZGlhbFNlZ21lbnRzICogTWF0aC5QSSAqIDI7XG5cdFx0XHRcdGNvbnN0IGN4ID0gLXR1YmUgKiBNYXRoLmNvcyh2KTtcblx0XHRcdFx0Y29uc3QgY3kgPSB0dWJlICogTWF0aC5zaW4odik7IC8vIG5vdyBjYWxjdWxhdGUgdGhlIGZpbmFsIHZlcnRleCBwb3NpdGlvbi5cblx0XHRcdFx0Ly8gZmlyc3Qgd2Ugb3JpZW50IHRoZSBleHRydXNpb24gd2l0aCBvdXIgYmFzaXMgdmVjdG9zLCB0aGVuIHdlIGFkZCBpdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmVcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IFAxLnggKyAoY3ggKiBOLnggKyBjeSAqIEIueCk7XG5cdFx0XHRcdHZlcnRleC55ID0gUDEueSArIChjeCAqIE4ueSArIGN5ICogQi55KTtcblx0XHRcdFx0dmVydGV4LnogPSBQMS56ICsgKGN4ICogTi56ICsgY3kgKiBCLnopO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopOyAvLyBub3JtYWwgKFAxIGlzIGFsd2F5cyB0aGUgY2VudGVyL29yaWdpbiBvZiB0aGUgZXh0cnVzaW9uLCB0aHVzIHdlIGNhbiB1c2UgaXQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwpXG5cblx0XHRcdFx0bm9ybWFsLnN1YlZlY3RvcnModmVydGV4LCBQMSkubm9ybWFsaXplKCk7XG5cdFx0XHRcdG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsgLy8gdXZcblxuXHRcdFx0XHR1dnMucHVzaChpIC8gdHVidWxhclNlZ21lbnRzKTtcblx0XHRcdFx0dXZzLnB1c2goaiAvIHJhZGlhbFNlZ21lbnRzKTtcblx0XHRcdH1cblx0XHR9IC8vIGdlbmVyYXRlIGluZGljZXNcblxuXG5cdFx0Zm9yIChsZXQgaiA9IDE7IGogPD0gdHVidWxhclNlZ21lbnRzOyBqKyspIHtcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Ly8gaW5kaWNlc1xuXHRcdFx0XHRjb25zdCBhID0gKHJhZGlhbFNlZ21lbnRzICsgMSkgKiAoaiAtIDEpICsgKGkgLSAxKTtcblx0XHRcdFx0Y29uc3QgYiA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIChpIC0gMSk7XG5cdFx0XHRcdGNvbnN0IGMgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyBpO1xuXHRcdFx0XHRjb25zdCBkID0gKHJhZGlhbFNlZ21lbnRzICsgMSkgKiAoaiAtIDEpICsgaTsgLy8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdH1cblx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpOyAvLyB0aGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb24gdGhlIHRvcnVzIGN1cnZlXG5cblx0XHRmdW5jdGlvbiBjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSwgcCwgcSwgcmFkaXVzLCBwb3NpdGlvbikge1xuXHRcdFx0Y29uc3QgY3UgPSBNYXRoLmNvcyh1KTtcblx0XHRcdGNvbnN0IHN1ID0gTWF0aC5zaW4odSk7XG5cdFx0XHRjb25zdCBxdU92ZXJQID0gcSAvIHAgKiB1O1xuXHRcdFx0Y29uc3QgY3MgPSBNYXRoLmNvcyhxdU92ZXJQKTtcblx0XHRcdHBvc2l0aW9uLnggPSByYWRpdXMgKiAoMiArIGNzKSAqIDAuNSAqIGN1O1xuXHRcdFx0cG9zaXRpb24ueSA9IHJhZGl1cyAqICgyICsgY3MpICogc3UgKiAwLjU7XG5cdFx0XHRwb3NpdGlvbi56ID0gcmFkaXVzICogTWF0aC5zaW4ocXVPdmVyUCkgKiAwLjU7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFRvcnVzS25vdEdlb21ldHJ5KGRhdGEucmFkaXVzLCBkYXRhLnR1YmUsIGRhdGEudHVidWxhclNlZ21lbnRzLCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLnAsIGRhdGEucSk7XG5cdH1cblxufVxuXG5jbGFzcyBUdWJlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHBhdGggPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUzKG5ldyBWZWN0b3IzKC0xLCAtMSwgMCksIG5ldyBWZWN0b3IzKC0xLCAxLCAwKSwgbmV3IFZlY3RvcjMoMSwgMSwgMCkpLCB0dWJ1bGFyU2VnbWVudHMgPSA2NCwgcmFkaXVzID0gMSwgcmFkaWFsU2VnbWVudHMgPSA4LCBjbG9zZWQgPSBmYWxzZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1R1YmVHZW9tZXRyeSc7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cGF0aDogcGF0aCxcblx0XHRcdHR1YnVsYXJTZWdtZW50czogdHVidWxhclNlZ21lbnRzLFxuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRjbG9zZWQ6IGNsb3NlZFxuXHRcdH07XG5cdFx0Y29uc3QgZnJhbWVzID0gcGF0aC5jb21wdXRlRnJlbmV0RnJhbWVzKHR1YnVsYXJTZWdtZW50cywgY2xvc2VkKTsgLy8gZXhwb3NlIGludGVybmFsc1xuXG5cdFx0dGhpcy50YW5nZW50cyA9IGZyYW1lcy50YW5nZW50cztcblx0XHR0aGlzLm5vcm1hbHMgPSBmcmFtZXMubm9ybWFscztcblx0XHR0aGlzLmJpbm9ybWFscyA9IGZyYW1lcy5iaW5vcm1hbHM7IC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0bGV0IFAgPSBuZXcgVmVjdG9yMygpOyAvLyBidWZmZXJcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXHRcdGNvbnN0IGluZGljZXMgPSBbXTsgLy8gY3JlYXRlIGJ1ZmZlciBkYXRhXG5cblx0XHRnZW5lcmF0ZUJ1ZmZlckRhdGEoKTsgLy8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoaW5kaWNlcyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHV2cywgMikpOyAvLyBmdW5jdGlvbnNcblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlQnVmZmVyRGF0YSgpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdHVidWxhclNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Z2VuZXJhdGVTZWdtZW50KGkpO1xuXHRcdFx0fSAvLyBpZiB0aGUgZ2VvbWV0cnkgaXMgbm90IGNsb3NlZCwgZ2VuZXJhdGUgdGhlIGxhc3Qgcm93IG9mIHZlcnRpY2VzIGFuZCBub3JtYWxzXG5cdFx0XHQvLyBhdCB0aGUgcmVndWxhciBwb3NpdGlvbiBvbiB0aGUgZ2l2ZW4gcGF0aFxuXHRcdFx0Ly9cblx0XHRcdC8vIGlmIHRoZSBnZW9tZXRyeSBpcyBjbG9zZWQsIGR1cGxpY2F0ZSB0aGUgZmlyc3Qgcm93IG9mIHZlcnRpY2VzIGFuZCBub3JtYWxzICh1dnMgd2lsbCBkaWZmZXIpXG5cblxuXHRcdFx0Z2VuZXJhdGVTZWdtZW50KGNsb3NlZCA9PT0gZmFsc2UgPyB0dWJ1bGFyU2VnbWVudHMgOiAwKTsgLy8gdXZzIGFyZSBnZW5lcmF0ZWQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbi5cblx0XHRcdC8vIHRoaXMgbWFrZXMgaXQgZWFzeSBjb21wdXRlIGNvcnJlY3QgdmFsdWVzIGZvciBjbG9zZWQgZ2VvbWV0cmllc1xuXG5cdFx0XHRnZW5lcmF0ZVVWcygpOyAvLyBmaW5hbGx5IGNyZWF0ZSBmYWNlc1xuXG5cdFx0XHRnZW5lcmF0ZUluZGljZXMoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVNlZ21lbnQoaSkge1xuXHRcdFx0Ly8gd2UgdXNlIGdldFBvaW50QXQgdG8gc2FtcGxlIGV2ZW5seSBkaXN0cmlidXRlZCBwb2ludHMgZnJvbSB0aGUgZ2l2ZW4gcGF0aFxuXHRcdFx0UCA9IHBhdGguZ2V0UG9pbnRBdChpIC8gdHVidWxhclNlZ21lbnRzLCBQKTsgLy8gcmV0cmlldmUgY29ycmVzcG9uZGluZyBub3JtYWwgYW5kIGJpbm9ybWFsXG5cblx0XHRcdGNvbnN0IE4gPSBmcmFtZXMubm9ybWFsc1tpXTtcblx0XHRcdGNvbnN0IEIgPSBmcmFtZXMuYmlub3JtYWxzW2ldOyAvLyBnZW5lcmF0ZSBub3JtYWxzIGFuZCB2ZXJ0aWNlcyBmb3IgdGhlIGN1cnJlbnQgc2VnbWVudFxuXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjtcblx0XHRcdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4odik7XG5cdFx0XHRcdGNvbnN0IGNvcyA9IC1NYXRoLmNvcyh2KTsgLy8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFsLnggPSBjb3MgKiBOLnggKyBzaW4gKiBCLng7XG5cdFx0XHRcdG5vcm1hbC55ID0gY29zICogTi55ICsgc2luICogQi55O1xuXHRcdFx0XHRub3JtYWwueiA9IGNvcyAqIE4ueiArIHNpbiAqIEIuejtcblx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7IC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gUC54ICsgcmFkaXVzICogbm9ybWFsLng7XG5cdFx0XHRcdHZlcnRleC55ID0gUC55ICsgcmFkaXVzICogbm9ybWFsLnk7XG5cdFx0XHRcdHZlcnRleC56ID0gUC56ICsgcmFkaXVzICogbm9ybWFsLno7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVJbmRpY2VzKCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDE7IGogPD0gdHVidWxhclNlZ21lbnRzOyBqKyspIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gcmFkaWFsU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IGEgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyAoaSAtIDEpO1xuXHRcdFx0XHRcdGNvbnN0IGIgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyAoaSAtIDEpO1xuXHRcdFx0XHRcdGNvbnN0IGMgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGQgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyBpOyAvLyBmYWNlc1xuXG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlVVZzKCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpKyspIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7IGorKykge1xuXHRcdFx0XHRcdHV2LnggPSBpIC8gdHVidWxhclNlZ21lbnRzO1xuXHRcdFx0XHRcdHV2LnkgPSBqIC8gcmFkaWFsU2VnbWVudHM7XG5cdFx0XHRcdFx0dXZzLnB1c2godXYueCwgdXYueSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXHRcdGRhdGEucGF0aCA9IHRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKGRhdGEpIHtcblx0XHQvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGJ1aWx0LWluIGN1cnZlcyAoZS5nLiBDYXRtdWxsUm9tQ3VydmUzKS5cblx0XHQvLyBVc2VyIGRlZmluZWQgY3VydmVzIG9yIGluc3RhbmNlcyBvZiBDdXJ2ZVBhdGggd2lsbCBub3QgYmUgZGVzZXJpYWxpemVkLlxuXHRcdHJldHVybiBuZXcgVHViZUdlb21ldHJ5KG5ldyBDdXJ2ZXNbZGF0YS5wYXRoLnR5cGVdKCkuZnJvbUpTT04oZGF0YS5wYXRoKSwgZGF0YS50dWJ1bGFyU2VnbWVudHMsIGRhdGEucmFkaXVzLCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLmNsb3NlZCk7XG5cdH1cblxufVxuXG5jbGFzcyBXaXJlZnJhbWVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnkgPSBudWxsKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnV2lyZWZyYW1lR2VvbWV0cnknO1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdGdlb21ldHJ5OiBnZW9tZXRyeVxuXHRcdH07XG5cblx0XHRpZiAoZ2VvbWV0cnkgIT09IG51bGwpIHtcblx0XHRcdC8vIGJ1ZmZlclxuXHRcdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRcdGNvbnN0IGVkZ2VzID0gbmV3IFNldCgpOyAvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRcdGNvbnN0IHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGVuZCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGlmIChnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0XHQvLyBpbmRleGVkIEJ1ZmZlckdlb21ldHJ5XG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdFx0Y29uc3QgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0XHRsZXQgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXG5cdFx0XHRcdGlmIChncm91cHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Z3JvdXBzID0gW3tcblx0XHRcdFx0XHRcdHN0YXJ0OiAwLFxuXHRcdFx0XHRcdFx0Y291bnQ6IGluZGljZXMuY291bnQsXG5cdFx0XHRcdFx0XHRtYXRlcmlhbEluZGV4OiAwXG5cdFx0XHRcdFx0fV07XG5cdFx0XHRcdH0gLy8gY3JlYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgZWdlcyB3aXRob3V0IGR1cGxpY2F0ZXNcblxuXG5cdFx0XHRcdGZvciAobGV0IG8gPSAwLCBvbCA9IGdyb3Vwcy5sZW5ndGg7IG8gPCBvbDsgKytvKSB7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbb107XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBTdGFydCA9IGdyb3VwLnN0YXJ0O1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwQ291bnQgPSBncm91cC5jb3VudDtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBncm91cFN0YXJ0LCBsID0gZ3JvdXBTdGFydCArIGdyb3VwQ291bnQ7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgMzsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MSA9IGluZGljZXMuZ2V0WChpICsgaik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MiA9IGluZGljZXMuZ2V0WChpICsgKGogKyAxKSAlIDMpO1xuXHRcdFx0XHRcdFx0XHRzdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBpbmRleDEpO1xuXHRcdFx0XHRcdFx0XHRlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgaW5kZXgyKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNVbmlxdWVFZGdlKHN0YXJ0LCBlbmQsIGVkZ2VzKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goc3RhcnQueCwgc3RhcnQueSwgc3RhcnQueik7XG5cdFx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaChlbmQueCwgZW5kLnksIGVuZC56KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnlcblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gcG9zaXRpb24uY291bnQgLyAzOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcblx0XHRcdFx0XHRcdC8vIHRocmVlIGVkZ2VzIHBlciB0cmlhbmdsZSwgYW4gZWRnZSBpcyByZXByZXNlbnRlZCBhcyAoaW5kZXgxLCBpbmRleDIpXG5cdFx0XHRcdFx0XHQvLyBlLmcuIHRoZSBmaXJzdCB0cmlhbmdsZSBoYXMgdGhlIGZvbGxvd2luZyBlZGdlczogKDAsMSksKDEsMiksKDIsMClcblx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MSA9IDMgKiBpICsgajtcblx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MiA9IDMgKiBpICsgKGogKyAxKSAlIDM7XG5cdFx0XHRcdFx0XHRzdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCBpbmRleDEpO1xuXHRcdFx0XHRcdFx0ZW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb24sIGluZGV4Mik7XG5cblx0XHRcdFx0XHRcdGlmIChpc1VuaXF1ZUVkZ2Uoc3RhcnQsIGVuZCwgZWRnZXMpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goc3RhcnQueCwgc3RhcnQueSwgc3RhcnQueik7XG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goZW5kLngsIGVuZC55LCBlbmQueik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGJ1aWxkIGdlb21ldHJ5XG5cblxuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHR9XG5cdH1cblxufVxuXG5mdW5jdGlvbiBpc1VuaXF1ZUVkZ2Uoc3RhcnQsIGVuZCwgZWRnZXMpIHtcblx0Y29uc3QgaGFzaDEgPSBgJHtzdGFydC54fSwke3N0YXJ0Lnl9LCR7c3RhcnQuen0tJHtlbmQueH0sJHtlbmQueX0sJHtlbmQuen1gO1xuXHRjb25zdCBoYXNoMiA9IGAke2VuZC54fSwke2VuZC55fSwke2VuZC56fS0ke3N0YXJ0Lnh9LCR7c3RhcnQueX0sJHtzdGFydC56fWA7IC8vIGNvaW5jaWRlbnQgZWRnZVxuXG5cdGlmIChlZGdlcy5oYXMoaGFzaDEpID09PSB0cnVlIHx8IGVkZ2VzLmhhcyhoYXNoMikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZWRnZXMuYWRkKGhhc2gxLCBoYXNoMik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxudmFyIEdlb21ldHJpZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0Qm94R2VvbWV0cnk6IEJveEdlb21ldHJ5LFxuXHRCb3hCdWZmZXJHZW9tZXRyeTogQm94R2VvbWV0cnksXG5cdENpcmNsZUdlb21ldHJ5OiBDaXJjbGVHZW9tZXRyeSxcblx0Q2lyY2xlQnVmZmVyR2VvbWV0cnk6IENpcmNsZUdlb21ldHJ5LFxuXHRDb25lR2VvbWV0cnk6IENvbmVHZW9tZXRyeSxcblx0Q29uZUJ1ZmZlckdlb21ldHJ5OiBDb25lR2VvbWV0cnksXG5cdEN5bGluZGVyR2VvbWV0cnk6IEN5bGluZGVyR2VvbWV0cnksXG5cdEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6IEN5bGluZGVyR2VvbWV0cnksXG5cdERvZGVjYWhlZHJvbkdlb21ldHJ5OiBEb2RlY2FoZWRyb25HZW9tZXRyeSxcblx0RG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IERvZGVjYWhlZHJvbkdlb21ldHJ5LFxuXHRFZGdlc0dlb21ldHJ5OiBFZGdlc0dlb21ldHJ5LFxuXHRFeHRydWRlR2VvbWV0cnk6IEV4dHJ1ZGVHZW9tZXRyeSxcblx0RXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBFeHRydWRlR2VvbWV0cnksXG5cdEljb3NhaGVkcm9uR2VvbWV0cnk6IEljb3NhaGVkcm9uR2VvbWV0cnksXG5cdEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IEljb3NhaGVkcm9uR2VvbWV0cnksXG5cdExhdGhlR2VvbWV0cnk6IExhdGhlR2VvbWV0cnksXG5cdExhdGhlQnVmZmVyR2VvbWV0cnk6IExhdGhlR2VvbWV0cnksXG5cdE9jdGFoZWRyb25HZW9tZXRyeTogT2N0YWhlZHJvbkdlb21ldHJ5LFxuXHRPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IE9jdGFoZWRyb25HZW9tZXRyeSxcblx0UGxhbmVHZW9tZXRyeTogUGxhbmVHZW9tZXRyeSxcblx0UGxhbmVCdWZmZXJHZW9tZXRyeTogUGxhbmVHZW9tZXRyeSxcblx0UG9seWhlZHJvbkdlb21ldHJ5OiBQb2x5aGVkcm9uR2VvbWV0cnksXG5cdFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTogUG9seWhlZHJvbkdlb21ldHJ5LFxuXHRSaW5nR2VvbWV0cnk6IFJpbmdHZW9tZXRyeSxcblx0UmluZ0J1ZmZlckdlb21ldHJ5OiBSaW5nR2VvbWV0cnksXG5cdFNoYXBlR2VvbWV0cnk6IFNoYXBlR2VvbWV0cnksXG5cdFNoYXBlQnVmZmVyR2VvbWV0cnk6IFNoYXBlR2VvbWV0cnksXG5cdFNwaGVyZUdlb21ldHJ5OiBTcGhlcmVHZW9tZXRyeSxcblx0U3BoZXJlQnVmZmVyR2VvbWV0cnk6IFNwaGVyZUdlb21ldHJ5LFxuXHRUZXRyYWhlZHJvbkdlb21ldHJ5OiBUZXRyYWhlZHJvbkdlb21ldHJ5LFxuXHRUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBUZXRyYWhlZHJvbkdlb21ldHJ5LFxuXHRUb3J1c0dlb21ldHJ5OiBUb3J1c0dlb21ldHJ5LFxuXHRUb3J1c0J1ZmZlckdlb21ldHJ5OiBUb3J1c0dlb21ldHJ5LFxuXHRUb3J1c0tub3RHZW9tZXRyeTogVG9ydXNLbm90R2VvbWV0cnksXG5cdFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OiBUb3J1c0tub3RHZW9tZXRyeSxcblx0VHViZUdlb21ldHJ5OiBUdWJlR2VvbWV0cnksXG5cdFR1YmVCdWZmZXJHZW9tZXRyeTogVHViZUdlb21ldHJ5LFxuXHRXaXJlZnJhbWVHZW9tZXRyeTogV2lyZWZyYW1lR2VvbWV0cnlcbn0pO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxUSFJFRS5Db2xvcj5cbiAqIH1cbiAqL1xuXG5jbGFzcyBTaGFkb3dNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1NoYWRvd01hdGVyaWFsJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuU2hhZG93TWF0ZXJpYWwucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdHJvdWdobmVzczogPGZsb2F0PixcbiAqXHRtZXRhbG5lc3M6IDxmbG9hdD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRlbWlzc2l2ZTogPGhleD4sXG4gKlx0ZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXHRlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICpcdG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKlx0bm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdHJvdWdobmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0bWV0YWxuZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0ZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICpcdGVudk1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRyZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKlx0ZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cdFx0XHQnU1RBTkRBUkQnOiAnJ1xuXHRcdH07XG5cdFx0dGhpcy50eXBlID0gJ01lc2hTdGFuZGFyZE1hdGVyaWFsJztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDB4ZmZmZmZmKTsgLy8gZGlmZnVzZVxuXG5cdFx0dGhpcy5yb3VnaG5lc3MgPSAxLjA7XG5cdFx0dGhpcy5tZXRhbG5lc3MgPSAwLjA7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMucm91Z2huZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLm1ldGFsbmVzc01hcCA9IG51bGw7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuZW52TWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdTVEFOREFSRCc6ICcnXG5cdFx0fTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLnJvdWdobmVzcyA9IHNvdXJjZS5yb3VnaG5lc3M7XG5cdFx0dGhpcy5tZXRhbG5lc3MgPSBzb3VyY2UubWV0YWxuZXNzO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuZW1pc3NpdmUuY29weShzb3VyY2UuZW1pc3NpdmUpO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weShzb3VyY2Uubm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMucm91Z2huZXNzTWFwID0gc291cmNlLnJvdWdobmVzc01hcDtcblx0XHR0aGlzLm1ldGFsbmVzc01hcCA9IHNvdXJjZS5tZXRhbG5lc3NNYXA7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5lbnZNYXBJbnRlbnNpdHkgPSBzb3VyY2UuZW52TWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdGNsZWFyY29hdDogPGZsb2F0PixcbiAqXHRjbGVhcmNvYXRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0Y2xlYXJjb2F0Um91Z2huZXNzOiA8ZmxvYXQ+LFxuICpcdGNsZWFyY29hdFJvdWdobmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRjbGVhcmNvYXROb3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcdGNsZWFyY29hdE5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0aW9yOiA8ZmxvYXQ+LFxuICpcdHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqXG4gKlx0c2hlZW46IDxmbG9hdD4sXG4gKlx0c2hlZW5Db2xvcjogPENvbG9yPixcbiAqXHRzaGVlbkNvbG9yTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdHNoZWVuUm91Z2huZXNzOiA8ZmxvYXQ+LFxuICpcdHNoZWVuUm91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHR0cmFuc21pc3Npb246IDxmbG9hdD4sXG4gKlx0dHJhbnNtaXNzaW9uTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHR0aGlja25lc3M6IDxmbG9hdD4sXG4gKlx0dGhpY2tuZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGF0dGVudWF0aW9uRGlzdGFuY2U6IDxmbG9hdD4sXG4gKlx0YXR0ZW51YXRpb25Db2xvcjogPENvbG9yPixcbiAqXG4gKlx0c3BlY3VsYXJJbnRlbnNpdHk6IDxmbG9hdD4sXG4gKlx0c3BlY3VsYXJJbnRlbnNpdHlNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0c3BlY3VsYXJDb2xvcjogPENvbG9yPixcbiAqXHRzcGVjdWxhckNvbG9yTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaFBoeXNpY2FsTWF0ZXJpYWwgZXh0ZW5kcyBNZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdTVEFOREFSRCc6ICcnLFxuXHRcdFx0J1BIWVNJQ0FMJzogJydcblx0XHR9O1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoUGh5c2ljYWxNYXRlcmlhbCc7XG5cdFx0dGhpcy5jbGVhcmNvYXRNYXAgPSBudWxsO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzID0gMC4wO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMuaW9yID0gMS41O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncmVmbGVjdGl2aXR5Jywge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBjbGFtcCgyLjUgKiAodGhpcy5pb3IgLSAxKSAvICh0aGlzLmlvciArIDEpLCAwLCAxKTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uIChyZWZsZWN0aXZpdHkpIHtcblx0XHRcdFx0dGhpcy5pb3IgPSAoMSArIDAuNCAqIHJlZmxlY3Rpdml0eSkgLyAoMSAtIDAuNCAqIHJlZmxlY3Rpdml0eSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5zaGVlbkNvbG9yID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0XHR0aGlzLnNoZWVuQ29sb3JNYXAgPSBudWxsO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3MgPSAxLjA7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzc01hcCA9IG51bGw7XG5cdFx0dGhpcy50cmFuc21pc3Npb25NYXAgPSBudWxsO1xuXHRcdHRoaXMudGhpY2tuZXNzID0gMDtcblx0XHR0aGlzLnRoaWNrbmVzc01hcCA9IG51bGw7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlID0gMC4wO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25Db2xvciA9IG5ldyBDb2xvcigxLCAxLCAxKTtcblx0XHR0aGlzLnNwZWN1bGFySW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSBudWxsO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxKTtcblx0XHR0aGlzLnNwZWN1bGFyQ29sb3JNYXAgPSBudWxsO1xuXHRcdHRoaXMuX3NoZWVuID0gMC4wO1xuXHRcdHRoaXMuX2NsZWFyY29hdCA9IDA7XG5cdFx0dGhpcy5fdHJhbnNtaXNzaW9uID0gMDtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGdldCBzaGVlbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2hlZW47XG5cdH1cblxuXHRzZXQgc2hlZW4odmFsdWUpIHtcblx0XHRpZiAodGhpcy5fc2hlZW4gPiAwICE9PSB2YWx1ZSA+IDApIHtcblx0XHRcdHRoaXMudmVyc2lvbisrO1xuXHRcdH1cblxuXHRcdHRoaXMuX3NoZWVuID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgY2xlYXJjb2F0KCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhcmNvYXQ7XG5cdH1cblxuXHRzZXQgY2xlYXJjb2F0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX2NsZWFyY29hdCA+IDAgIT09IHZhbHVlID4gMCkge1xuXHRcdFx0dGhpcy52ZXJzaW9uKys7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY2xlYXJjb2F0ID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgdHJhbnNtaXNzaW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90cmFuc21pc3Npb247XG5cdH1cblxuXHRzZXQgdHJhbnNtaXNzaW9uKHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX3RyYW5zbWlzc2lvbiA+IDAgIT09IHZhbHVlID4gMCkge1xuXHRcdFx0dGhpcy52ZXJzaW9uKys7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdHJhbnNtaXNzaW9uID0gdmFsdWU7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cdFx0XHQnU1RBTkRBUkQnOiAnJyxcblx0XHRcdCdQSFlTSUNBTCc6ICcnXG5cdFx0fTtcblx0XHR0aGlzLmNsZWFyY29hdCA9IHNvdXJjZS5jbGVhcmNvYXQ7XG5cdFx0dGhpcy5jbGVhcmNvYXRNYXAgPSBzb3VyY2UuY2xlYXJjb2F0TWFwO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzID0gc291cmNlLmNsZWFyY29hdFJvdWdobmVzcztcblx0XHR0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IHNvdXJjZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgPSBzb3VyY2UuY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHRcdHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weShzb3VyY2UuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuaW9yID0gc291cmNlLmlvcjtcblx0XHR0aGlzLnNoZWVuID0gc291cmNlLnNoZWVuO1xuXHRcdHRoaXMuc2hlZW5Db2xvci5jb3B5KHNvdXJjZS5zaGVlbkNvbG9yKTtcblx0XHR0aGlzLnNoZWVuQ29sb3JNYXAgPSBzb3VyY2Uuc2hlZW5Db2xvck1hcDtcblx0XHR0aGlzLnNoZWVuUm91Z2huZXNzID0gc291cmNlLnNoZWVuUm91Z2huZXNzO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXAgPSBzb3VyY2Uuc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdFx0dGhpcy50cmFuc21pc3Npb24gPSBzb3VyY2UudHJhbnNtaXNzaW9uO1xuXHRcdHRoaXMudHJhbnNtaXNzaW9uTWFwID0gc291cmNlLnRyYW5zbWlzc2lvbk1hcDtcblx0XHR0aGlzLnRoaWNrbmVzcyA9IHNvdXJjZS50aGlja25lc3M7XG5cdFx0dGhpcy50aGlja25lc3NNYXAgPSBzb3VyY2UudGhpY2tuZXNzTWFwO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSA9IHNvdXJjZS5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHNvdXJjZS5hdHRlbnVhdGlvbkNvbG9yKTtcblx0XHR0aGlzLnNwZWN1bGFySW50ZW5zaXR5ID0gc291cmNlLnNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSBzb3VyY2Uuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdFx0dGhpcy5zcGVjdWxhckNvbG9yLmNvcHkoc291cmNlLnNwZWN1bGFyQ29sb3IpO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvck1hcCA9IHNvdXJjZS5zcGVjdWxhckNvbG9yTWFwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdHNwZWN1bGFyOiA8aGV4PixcbiAqXHRzaGluaW5lc3M6IDxmbG9hdD4sXG4gKlx0b3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKlx0bWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRhb01hcEludGVuc2l0eTogPGZsb2F0PlxuICpcbiAqXHRlbWlzc2l2ZTogPGhleD4sXG4gKlx0ZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXHRlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICpcdG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKlx0bm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdHNwZWN1bGFyTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0ZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICpcdGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5T3BlcmF0aW9uLFxuICpcdHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqXHRyZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKlx0ZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hQaG9uZ01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaFBob25nTWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpOyAvLyBkaWZmdXNlXG5cblx0XHR0aGlzLnNwZWN1bGFyID0gbmV3IENvbG9yKDB4MTExMTExKTtcblx0XHR0aGlzLnNoaW5pbmVzcyA9IDMwO1xuXHRcdHRoaXMubWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvcigweDAwMDAwMCk7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gMTtcblx0XHR0aGlzLm5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gbnVsbDtcblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSAxO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMuc3BlY3VsYXIuY29weShzb3VyY2Uuc3BlY3VsYXIpO1xuXHRcdHRoaXMuc2hpbmluZXNzID0gc291cmNlLnNoaW5pbmVzcztcblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cdFx0dGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9NYXA7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTtcblx0XHR0aGlzLmVtaXNzaXZlLmNvcHkoc291cmNlLmVtaXNzaXZlKTtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gc291cmNlLmVtaXNzaXZlTWFwO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBzb3VyY2UuZW1pc3NpdmVJbnRlbnNpdHk7XG5cdFx0dGhpcy5idW1wTWFwID0gc291cmNlLmJ1bXBNYXA7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSBzb3VyY2UuYnVtcFNjYWxlO1xuXHRcdHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTtcblx0XHR0aGlzLm5vcm1hbFNjYWxlLmNvcHkoc291cmNlLm5vcm1hbFNjYWxlKTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNvdXJjZS5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50Qmlhcztcblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwO1xuXHRcdHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5lO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gc291cmNlLnJlZmxlY3Rpdml0eTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBzb3VyY2UuZmxhdFNoYWRpbmc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5NZXNoUGhvbmdNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXHRjb2xvcjogPGhleD4sXG4gKlxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRncmFkaWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0bGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0bGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0YW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0ZW1pc3NpdmU6IDxoZXg+LFxuICpcdGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlx0ZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqXHRub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0bm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICpcdG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICpcdGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqXHRkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqXHRhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0d2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKlx0d2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoVG9vbk1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cdFx0XHQnVE9PTic6ICcnXG5cdFx0fTtcblx0XHR0aGlzLnR5cGUgPSAnTWVzaFRvb25NYXRlcmlhbCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZik7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuZ3JhZGllbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlID0gbmV3IENvbG9yKDB4MDAwMDAwKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cdFx0dGhpcy5ncmFkaWVudE1hcCA9IHNvdXJjZS5ncmFkaWVudE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuZW1pc3NpdmUuY29weShzb3VyY2UuZW1pc3NpdmUpO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weShzb3VyY2Uubm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaFRvb25NYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqXHRub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0bm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICpcdG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICpcdGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqXHRkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqXHR3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqXHR3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD5cbiAqXG4gKlx0ZmxhdFNoYWRpbmc6IDxib29sPlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hOb3JtYWxNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ01lc2hOb3JtYWxNYXRlcmlhbCc7XG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy5mb2cgPSBmYWxzZTtcblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weShzb3VyY2Uubm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hOb3JtYWxNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0bGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0bGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0YW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlx0YW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKlx0ZW1pc3NpdmU6IDxoZXg+LFxuICpcdGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlx0ZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdHNwZWN1bGFyTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0ZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICpcdGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5LFxuICpcdHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqXHRyZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICpcdHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICpcdHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaExhbWJlcnRNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ01lc2hMYW1iZXJ0TWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpOyAvLyBkaWZmdXNlXG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoMHgwMDAwMDApO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7XG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IG51bGw7XG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0aW9uO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gMTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJztcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuY29sb3IuY29weShzb3VyY2UuY29sb3IpO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXHRcdHRoaXMuZW1pc3NpdmUuY29weShzb3VyY2UuZW1pc3NpdmUpO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwO1xuXHRcdHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5lO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gc291cmNlLnJlZmxlY3Rpdml0eTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87XG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuTWVzaExhbWJlcnRNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcdGNvbG9yOiA8aGV4PixcbiAqXHRvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqXHRtYXRjYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICpcdG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKlx0YnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICpcdG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXHRub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKlx0bm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKlx0ZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcdGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICpcdGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICpcdGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqXHRmbGF0U2hhZGluZzogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaE1hdGNhcE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cdFx0XHQnTUFUQ0FQJzogJydcblx0XHR9O1xuXHRcdHRoaXMudHlwZSA9ICdNZXNoTWF0Y2FwTWF0ZXJpYWwnO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpOyAvLyBkaWZmdXNlXG5cblx0XHR0aGlzLm1hdGNhcCA9IG51bGw7XG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHtcblx0XHRcdCdNQVRDQVAnOiAnJ1xuXHRcdH07XG5cdFx0dGhpcy5jb2xvci5jb3B5KHNvdXJjZS5jb2xvcik7XG5cdFx0dGhpcy5tYXRjYXAgPSBzb3VyY2UubWF0Y2FwO1xuXHRcdHRoaXMubWFwID0gc291cmNlLm1hcDtcblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weShzb3VyY2Uubm9ybWFsU2NhbGUpO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbk1lc2hNYXRjYXBNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKlx0Y29sb3I6IDxoZXg+LFxuICpcdG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICpcdGxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKlx0c2NhbGU6IDxmbG9hdD4sXG4gKlx0ZGFzaFNpemU6IDxmbG9hdD4sXG4gKlx0Z2FwU2l6ZTogPGZsb2F0PlxuICogfVxuICovXG5cbmNsYXNzIExpbmVEYXNoZWRNYXRlcmlhbCBleHRlbmRzIExpbmVCYXNpY01hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IocGFyYW1ldGVycykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0xpbmVEYXNoZWRNYXRlcmlhbCc7XG5cdFx0dGhpcy5zY2FsZSA9IDE7XG5cdFx0dGhpcy5kYXNoU2l6ZSA9IDM7XG5cdFx0dGhpcy5nYXBTaXplID0gMTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuc2NhbGUgPSBzb3VyY2Uuc2NhbGU7XG5cdFx0dGhpcy5kYXNoU2l6ZSA9IHNvdXJjZS5kYXNoU2l6ZTtcblx0XHR0aGlzLmdhcFNpemUgPSBzb3VyY2UuZ2FwU2l6ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbkxpbmVEYXNoZWRNYXRlcmlhbC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgPSB0cnVlO1xuXG52YXIgTWF0ZXJpYWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFNoYWRvd01hdGVyaWFsOiBTaGFkb3dNYXRlcmlhbCxcblx0U3ByaXRlTWF0ZXJpYWw6IFNwcml0ZU1hdGVyaWFsLFxuXHRSYXdTaGFkZXJNYXRlcmlhbDogUmF3U2hhZGVyTWF0ZXJpYWwsXG5cdFNoYWRlck1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbCxcblx0UG9pbnRzTWF0ZXJpYWw6IFBvaW50c01hdGVyaWFsLFxuXHRNZXNoUGh5c2ljYWxNYXRlcmlhbDogTWVzaFBoeXNpY2FsTWF0ZXJpYWwsXG5cdE1lc2hTdGFuZGFyZE1hdGVyaWFsOiBNZXNoU3RhbmRhcmRNYXRlcmlhbCxcblx0TWVzaFBob25nTWF0ZXJpYWw6IE1lc2hQaG9uZ01hdGVyaWFsLFxuXHRNZXNoVG9vbk1hdGVyaWFsOiBNZXNoVG9vbk1hdGVyaWFsLFxuXHRNZXNoTm9ybWFsTWF0ZXJpYWw6IE1lc2hOb3JtYWxNYXRlcmlhbCxcblx0TWVzaExhbWJlcnRNYXRlcmlhbDogTWVzaExhbWJlcnRNYXRlcmlhbCxcblx0TWVzaERlcHRoTWF0ZXJpYWw6IE1lc2hEZXB0aE1hdGVyaWFsLFxuXHRNZXNoRGlzdGFuY2VNYXRlcmlhbDogTWVzaERpc3RhbmNlTWF0ZXJpYWwsXG5cdE1lc2hCYXNpY01hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCxcblx0TWVzaE1hdGNhcE1hdGVyaWFsOiBNZXNoTWF0Y2FwTWF0ZXJpYWwsXG5cdExpbmVEYXNoZWRNYXRlcmlhbDogTGluZURhc2hlZE1hdGVyaWFsLFxuXHRMaW5lQmFzaWNNYXRlcmlhbDogTGluZUJhc2ljTWF0ZXJpYWwsXG5cdE1hdGVyaWFsOiBNYXRlcmlhbFxufSk7XG5cbmNvbnN0IEFuaW1hdGlvblV0aWxzID0ge1xuXHQvLyBzYW1lIGFzIEFycmF5LnByb3RvdHlwZS5zbGljZSwgYnV0IGFsc28gd29ya3Mgb24gdHlwZWQgYXJyYXlzXG5cdGFycmF5U2xpY2U6IGZ1bmN0aW9uIChhcnJheSwgZnJvbSwgdG8pIHtcblx0XHRpZiAoQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KGFycmF5KSkge1xuXHRcdFx0Ly8gaW4gaW9zOSBhcnJheS5zdWJhcnJheShmcm9tLCB1bmRlZmluZWQpIHdpbGwgcmV0dXJuIGVtcHR5IGFycmF5XG5cdFx0XHQvLyBidXQgYXJyYXkuc3ViYXJyYXkoZnJvbSkgb3IgYXJyYXkuc3ViYXJyYXkoZnJvbSwgbGVuKSBpcyBjb3JyZWN0XG5cdFx0XHRyZXR1cm4gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGFycmF5LnN1YmFycmF5KGZyb20sIHRvICE9PSB1bmRlZmluZWQgPyB0byA6IGFycmF5Lmxlbmd0aCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhcnJheS5zbGljZShmcm9tLCB0byk7XG5cdH0sXG5cdC8vIGNvbnZlcnRzIGFuIGFycmF5IHRvIGEgc3BlY2lmaWMgdHlwZVxuXHRjb252ZXJ0QXJyYXk6IGZ1bmN0aW9uIChhcnJheSwgdHlwZSwgZm9yY2VDbG9uZSkge1xuXHRcdGlmICghYXJyYXkgfHwgLy8gbGV0ICd1bmRlZmluZWQnIGFuZCAnbnVsbCcgcGFzc1xuXHRcdCFmb3JjZUNsb25lICYmIGFycmF5LmNvbnN0cnVjdG9yID09PSB0eXBlKSByZXR1cm4gYXJyYXk7XG5cblx0XHRpZiAodHlwZW9mIHR5cGUuQllURVNfUEVSX0VMRU1FTlQgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gbmV3IHR5cGUoYXJyYXkpOyAvLyBjcmVhdGUgdHlwZWQgYXJyYXlcblx0XHR9XG5cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXkpOyAvLyBjcmVhdGUgQXJyYXlcblx0fSxcblx0aXNUeXBlZEFycmF5OiBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdFx0cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhvYmplY3QpICYmICEob2JqZWN0IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xuXHR9LFxuXHQvLyByZXR1cm5zIGFuIGFycmF5IGJ5IHdoaWNoIHRpbWVzIGFuZCB2YWx1ZXMgY2FuIGJlIHNvcnRlZFxuXHRnZXRLZXlmcmFtZU9yZGVyOiBmdW5jdGlvbiAodGltZXMpIHtcblx0XHRmdW5jdGlvbiBjb21wYXJlVGltZShpLCBqKSB7XG5cdFx0XHRyZXR1cm4gdGltZXNbaV0gLSB0aW1lc1tqXTtcblx0XHR9XG5cblx0XHRjb25zdCBuID0gdGltZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShuKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBuOyArK2kpIHJlc3VsdFtpXSA9IGk7XG5cblx0XHRyZXN1bHQuc29ydChjb21wYXJlVGltZSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0Ly8gdXNlcyB0aGUgYXJyYXkgcHJldmlvdXNseSByZXR1cm5lZCBieSAnZ2V0S2V5ZnJhbWVPcmRlcicgdG8gc29ydCBkYXRhXG5cdHNvcnRlZEFycmF5OiBmdW5jdGlvbiAodmFsdWVzLCBzdHJpZGUsIG9yZGVyKSB7XG5cdFx0Y29uc3QgblZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IHZhbHVlcy5jb25zdHJ1Y3RvcihuVmFsdWVzKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBkc3RPZmZzZXQgPSAwOyBkc3RPZmZzZXQgIT09IG5WYWx1ZXM7ICsraSkge1xuXHRcdFx0Y29uc3Qgc3JjT2Zmc2V0ID0gb3JkZXJbaV0gKiBzdHJpZGU7XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqICE9PSBzdHJpZGU7ICsraikge1xuXHRcdFx0XHRyZXN1bHRbZHN0T2Zmc2V0KytdID0gdmFsdWVzW3NyY09mZnNldCArIGpdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cdC8vIGZ1bmN0aW9uIGZvciBwYXJzaW5nIEFPUyBrZXlmcmFtZSBmb3JtYXRzXG5cdGZsYXR0ZW5KU09OOiBmdW5jdGlvbiAoanNvbktleXMsIHRpbWVzLCB2YWx1ZXMsIHZhbHVlUHJvcGVydHlOYW1lKSB7XG5cdFx0bGV0IGkgPSAxLFxuXHRcdFx0XHRrZXkgPSBqc29uS2V5c1swXTtcblxuXHRcdHdoaWxlIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXlbdmFsdWVQcm9wZXJ0eU5hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGtleSA9IGpzb25LZXlzW2krK107XG5cdFx0fVxuXG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIG5vIGRhdGFcblxuXHRcdGxldCB2YWx1ZSA9IGtleVt2YWx1ZVByb3BlcnR5TmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbm8gZGF0YVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdHZhbHVlID0ga2V5W3ZhbHVlUHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRpbWVzLnB1c2goa2V5LnRpbWUpO1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoLmFwcGx5KHZhbHVlcywgdmFsdWUpOyAvLyBwdXNoIGFsbCBlbGVtZW50c1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0ganNvbktleXNbaSsrXTtcblx0XHRcdH0gd2hpbGUgKGtleSAhPT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlLnRvQXJyYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gLi4uYXNzdW1lIFRIUkVFLk1hdGgtaXNoXG5cdFx0XHRkbyB7XG5cdFx0XHRcdHZhbHVlID0ga2V5W3ZhbHVlUHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRpbWVzLnB1c2goa2V5LnRpbWUpO1xuXHRcdFx0XHRcdHZhbHVlLnRvQXJyYXkodmFsdWVzLCB2YWx1ZXMubGVuZ3RoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzW2krK107XG5cdFx0XHR9IHdoaWxlIChrZXkgIT09IHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG90aGVyd2lzZSBwdXNoIGFzLWlzXG5cdFx0XHRkbyB7XG5cdFx0XHRcdHZhbHVlID0ga2V5W3ZhbHVlUHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRpbWVzLnB1c2goa2V5LnRpbWUpO1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzW2krK107XG5cdFx0XHR9IHdoaWxlIChrZXkgIT09IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9LFxuXHRzdWJjbGlwOiBmdW5jdGlvbiAoc291cmNlQ2xpcCwgbmFtZSwgc3RhcnRGcmFtZSwgZW5kRnJhbWUsIGZwcyA9IDMwKSB7XG5cdFx0Y29uc3QgY2xpcCA9IHNvdXJjZUNsaXAuY2xvbmUoKTtcblx0XHRjbGlwLm5hbWUgPSBuYW1lO1xuXHRcdGNvbnN0IHRyYWNrcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0Y29uc3QgdHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlU2l6ZSA9IHRyYWNrLmdldFZhbHVlU2l6ZSgpO1xuXHRcdFx0Y29uc3QgdGltZXMgPSBbXTtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRyYWNrLnRpbWVzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGNvbnN0IGZyYW1lID0gdHJhY2sudGltZXNbal0gKiBmcHM7XG5cdFx0XHRcdGlmIChmcmFtZSA8IHN0YXJ0RnJhbWUgfHwgZnJhbWUgPj0gZW5kRnJhbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHR0aW1lcy5wdXNoKHRyYWNrLnRpbWVzW2pdKTtcblxuXHRcdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IHZhbHVlU2l6ZTsgKytrKSB7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2godHJhY2sudmFsdWVzW2ogKiB2YWx1ZVNpemUgKyBrXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRpbWVzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cdFx0XHR0cmFjay50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSh0aW1lcywgdHJhY2sudGltZXMuY29uc3RydWN0b3IpO1xuXHRcdFx0dHJhY2sudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KHZhbHVlcywgdHJhY2sudmFsdWVzLmNvbnN0cnVjdG9yKTtcblx0XHRcdHRyYWNrcy5wdXNoKHRyYWNrKTtcblx0XHR9XG5cblx0XHRjbGlwLnRyYWNrcyA9IHRyYWNrczsgLy8gZmluZCBtaW5pbXVtIC50aW1lcyB2YWx1ZSBhY3Jvc3MgYWxsIHRyYWNrcyBpbiB0aGUgdHJpbW1lZCBjbGlwXG5cblx0XHRsZXQgbWluU3RhcnRUaW1lID0gSW5maW5pdHk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAobWluU3RhcnRUaW1lID4gY2xpcC50cmFja3NbaV0udGltZXNbMF0pIHtcblx0XHRcdFx0bWluU3RhcnRUaW1lID0gY2xpcC50cmFja3NbaV0udGltZXNbMF07XG5cdFx0XHR9XG5cdFx0fSAvLyBzaGlmdCBhbGwgdHJhY2tzIHN1Y2ggdGhhdCBjbGlwIGJlZ2lucyBhdCB0PTBcblxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0Y2xpcC50cmFja3NbaV0uc2hpZnQoLTEgKiBtaW5TdGFydFRpbWUpO1xuXHRcdH1cblxuXHRcdGNsaXAucmVzZXREdXJhdGlvbigpO1xuXHRcdHJldHVybiBjbGlwO1xuXHR9LFxuXHRtYWtlQ2xpcEFkZGl0aXZlOiBmdW5jdGlvbiAodGFyZ2V0Q2xpcCwgcmVmZXJlbmNlRnJhbWUgPSAwLCByZWZlcmVuY2VDbGlwID0gdGFyZ2V0Q2xpcCwgZnBzID0gMzApIHtcblx0XHRpZiAoZnBzIDw9IDApIGZwcyA9IDMwO1xuXHRcdGNvbnN0IG51bVRyYWNrcyA9IHJlZmVyZW5jZUNsaXAudHJhY2tzLmxlbmd0aDtcblx0XHRjb25zdCByZWZlcmVuY2VUaW1lID0gcmVmZXJlbmNlRnJhbWUgLyBmcHM7IC8vIE1ha2UgZWFjaCB0cmFjaydzIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgdmFsdWVzIGF0IHRoZSByZWZlcmVuY2UgZnJhbWVcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVRyYWNrID0gcmVmZXJlbmNlQ2xpcC50cmFja3NbaV07XG5cdFx0XHRjb25zdCByZWZlcmVuY2VUcmFja1R5cGUgPSByZWZlcmVuY2VUcmFjay5WYWx1ZVR5cGVOYW1lOyAvLyBTa2lwIHRoaXMgdHJhY2sgaWYgaXQncyBub24tbnVtZXJpY1xuXG5cdFx0XHRpZiAocmVmZXJlbmNlVHJhY2tUeXBlID09PSAnYm9vbCcgfHwgcmVmZXJlbmNlVHJhY2tUeXBlID09PSAnc3RyaW5nJykgY29udGludWU7IC8vIEZpbmQgdGhlIHRyYWNrIGluIHRoZSB0YXJnZXQgY2xpcCB3aG9zZSBuYW1lIGFuZCB0eXBlIG1hdGNoZXMgdGhlIHJlZmVyZW5jZSB0cmFja1xuXG5cdFx0XHRjb25zdCB0YXJnZXRUcmFjayA9IHRhcmdldENsaXAudHJhY2tzLmZpbmQoZnVuY3Rpb24gKHRyYWNrKSB7XG5cdFx0XHRcdHJldHVybiB0cmFjay5uYW1lID09PSByZWZlcmVuY2VUcmFjay5uYW1lICYmIHRyYWNrLlZhbHVlVHlwZU5hbWUgPT09IHJlZmVyZW5jZVRyYWNrVHlwZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHRhcmdldFRyYWNrID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdFx0bGV0IHJlZmVyZW5jZU9mZnNldCA9IDA7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VWYWx1ZVNpemUgPSByZWZlcmVuY2VUcmFjay5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdFx0aWYgKHJlZmVyZW5jZVRyYWNrLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lKSB7XG5cdFx0XHRcdHJlZmVyZW5jZU9mZnNldCA9IHJlZmVyZW5jZVZhbHVlU2l6ZSAvIDM7XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0YXJnZXRPZmZzZXQgPSAwO1xuXHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWVTaXplID0gdGFyZ2V0VHJhY2suZ2V0VmFsdWVTaXplKCk7XG5cblx0XHRcdGlmICh0YXJnZXRUcmFjay5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSkge1xuXHRcdFx0XHR0YXJnZXRPZmZzZXQgPSB0YXJnZXRWYWx1ZVNpemUgLyAzO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSByZWZlcmVuY2VUcmFjay50aW1lcy5sZW5ndGggLSAxO1xuXHRcdFx0bGV0IHJlZmVyZW5jZVZhbHVlOyAvLyBGaW5kIHRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBvdXQgb2YgdGhlIHRyYWNrXG5cblx0XHRcdGlmIChyZWZlcmVuY2VUaW1lIDw9IHJlZmVyZW5jZVRyYWNrLnRpbWVzWzBdKSB7XG5cdFx0XHRcdC8vIFJlZmVyZW5jZSBmcmFtZSBpcyBlYXJsaWVyIHRoYW4gdGhlIGZpcnN0IGtleWZyYW1lLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3Qga2V5ZnJhbWVcblx0XHRcdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0Y29uc3QgZW5kSW5kZXggPSByZWZlcmVuY2VWYWx1ZVNpemUgLSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdHJlZmVyZW5jZVZhbHVlID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZShyZWZlcmVuY2VUcmFjay52YWx1ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblx0XHRcdH0gZWxzZSBpZiAocmVmZXJlbmNlVGltZSA+PSByZWZlcmVuY2VUcmFjay50aW1lc1tsYXN0SW5kZXhdKSB7XG5cdFx0XHRcdC8vIFJlZmVyZW5jZSBmcmFtZSBpcyBhZnRlciB0aGUgbGFzdCBrZXlmcmFtZSwgc28ganVzdCB1c2UgdGhlIGxhc3Qga2V5ZnJhbWVcblx0XHRcdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGxhc3RJbmRleCAqIHJlZmVyZW5jZVZhbHVlU2l6ZSArIHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0Y29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcmVmZXJlbmNlVmFsdWVTaXplIC0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRyZWZlcmVuY2VWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UocmVmZXJlbmNlVHJhY2sudmFsdWVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnRlcnBvbGF0ZSB0byB0aGUgcmVmZXJlbmNlIHZhbHVlXG5cdFx0XHRcdGNvbnN0IGludGVycG9sYW50ID0gcmVmZXJlbmNlVHJhY2suY3JlYXRlSW50ZXJwb2xhbnQoKTtcblx0XHRcdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0Y29uc3QgZW5kSW5kZXggPSByZWZlcmVuY2VWYWx1ZVNpemUgLSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdGludGVycG9sYW50LmV2YWx1YXRlKHJlZmVyZW5jZVRpbWUpO1xuXHRcdFx0XHRyZWZlcmVuY2VWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoaW50ZXJwb2xhbnQucmVzdWx0QnVmZmVyLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cdFx0XHR9IC8vIENvbmp1Z2F0ZSB0aGUgcXVhdGVybmlvblxuXG5cblx0XHRcdGlmIChyZWZlcmVuY2VUcmFja1R5cGUgPT09ICdxdWF0ZXJuaW9uJykge1xuXHRcdFx0XHRjb25zdCByZWZlcmVuY2VRdWF0ID0gbmV3IFF1YXRlcm5pb24oKS5mcm9tQXJyYXkocmVmZXJlbmNlVmFsdWUpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpO1xuXHRcdFx0XHRyZWZlcmVuY2VRdWF0LnRvQXJyYXkocmVmZXJlbmNlVmFsdWUpO1xuXHRcdFx0fSAvLyBTdWJ0cmFjdCB0aGUgcmVmZXJlbmNlIHZhbHVlIGZyb20gYWxsIG9mIHRoZSB0cmFjayB2YWx1ZXNcblxuXG5cdFx0XHRjb25zdCBudW1UaW1lcyA9IHRhcmdldFRyYWNrLnRpbWVzLmxlbmd0aDtcblxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBudW1UaW1lczsgKytqKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlU3RhcnQgPSBqICogdGFyZ2V0VmFsdWVTaXplICsgdGFyZ2V0T2Zmc2V0O1xuXG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUcmFja1R5cGUgPT09ICdxdWF0ZXJuaW9uJykge1xuXHRcdFx0XHRcdC8vIE11bHRpcGx5IHRoZSBjb25qdWdhdGUgZm9yIHF1YXRlcm5pb24gdHJhY2sgdHlwZXNcblx0XHRcdFx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHRhcmdldFRyYWNrLnZhbHVlcywgdmFsdWVTdGFydCwgcmVmZXJlbmNlVmFsdWUsIDAsIHRhcmdldFRyYWNrLnZhbHVlcywgdmFsdWVTdGFydCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVFbmQgPSB0YXJnZXRWYWx1ZVNpemUgLSB0YXJnZXRPZmZzZXQgKiAyOyAvLyBTdWJ0cmFjdCBlYWNoIHZhbHVlIGZvciBhbGwgb3RoZXIgbnVtZXJpYyB0cmFjayB0eXBlc1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCB2YWx1ZUVuZDsgKytrKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRUcmFjay52YWx1ZXNbdmFsdWVTdGFydCArIGtdIC09IHJlZmVyZW5jZVZhbHVlW2tdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRhcmdldENsaXAuYmxlbmRNb2RlID0gQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU7XG5cdFx0cmV0dXJuIHRhcmdldENsaXA7XG5cdH1cbn07XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBpbnRlcnBvbGFudHMgb3ZlciBwYXJhbWV0cmljIHNhbXBsZXMuXG4gKlxuICogVGhlIHBhcmFtZXRlciBkb21haW4gaXMgb25lIGRpbWVuc2lvbmFsLCB0eXBpY2FsbHkgdGhlIHRpbWUgb3IgYSBwYXRoXG4gKiBhbG9uZyBhIGN1cnZlIGRlZmluZWQgYnkgdGhlIGRhdGEuXG4gKlxuICogVGhlIHNhbXBsZSB2YWx1ZXMgY2FuIGhhdmUgYW55IGRpbWVuc2lvbmFsaXR5IGFuZCBkZXJpdmVkIGNsYXNzZXMgbWF5XG4gKiBhcHBseSBzcGVjaWFsIGludGVycHJldGF0aW9ucyB0byB0aGUgZGF0YS5cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBpbnRlcnZhbCBzZWVrIGluIGEgVGVtcGxhdGUgTWV0aG9kLCBkZWZlcnJpbmdcbiAqIHRoZSBhY3R1YWwgaW50ZXJwb2xhdGlvbiB0byBkZXJpdmVkIGNsYXNzZXMuXG4gKlxuICogVGltZSBjb21wbGV4aXR5IGlzIE8oMSkgZm9yIGxpbmVhciBhY2Nlc3MgY3Jvc3NpbmcgYXQgbW9zdCB0d28gcG9pbnRzXG4gKiBhbmQgTyhsb2cgTikgZm9yIHJhbmRvbSBhY2Nlc3MsIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbnMuXG4gKlxuICogUmVmZXJlbmNlczpcbiAqXG4gKiBcdFx0aHR0cDovL3d3dy5vb2Rlc2lnbi5jb20vdGVtcGxhdGUtbWV0aG9kLXBhdHRlcm4uaHRtbFxuICpcbiAqL1xuY2xhc3MgSW50ZXJwb2xhbnQge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKSB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMgPSBwYXJhbWV0ZXJQb3NpdGlvbnM7XG5cdFx0dGhpcy5fY2FjaGVkSW5kZXggPSAwO1xuXHRcdHRoaXMucmVzdWx0QnVmZmVyID0gcmVzdWx0QnVmZmVyICE9PSB1bmRlZmluZWQgPyByZXN1bHRCdWZmZXIgOiBuZXcgc2FtcGxlVmFsdWVzLmNvbnN0cnVjdG9yKHNhbXBsZVNpemUpO1xuXHRcdHRoaXMuc2FtcGxlVmFsdWVzID0gc2FtcGxlVmFsdWVzO1xuXHRcdHRoaXMudmFsdWVTaXplID0gc2FtcGxlU2l6ZTtcblx0XHR0aGlzLnNldHRpbmdzID0gbnVsbDtcblx0XHR0aGlzLkRlZmF1bHRTZXR0aW5nc18gPSB7fTtcblx0fVxuXG5cdGV2YWx1YXRlKHQpIHtcblx0XHRjb25zdCBwcCA9IHRoaXMucGFyYW1ldGVyUG9zaXRpb25zO1xuXHRcdGxldCBpMSA9IHRoaXMuX2NhY2hlZEluZGV4LFxuXHRcdFx0XHR0MSA9IHBwW2kxXSxcblx0XHRcdFx0dDAgPSBwcFtpMSAtIDFdO1xuXG5cdFx0dmFsaWRhdGVfaW50ZXJ2YWw6IHtcblx0XHRcdHNlZWs6IHtcblx0XHRcdFx0bGV0IHJpZ2h0O1xuXG5cdFx0XHRcdGxpbmVhcl9zY2FuOiB7XG5cdFx0XHRcdFx0Ly8tIFNlZSBodHRwOi8vanNwZXJmLmNvbS9jb21wYXJpc29uLXRvLXVuZGVmaW5lZC8zXG5cdFx0XHRcdFx0Ly8tIHNsb3dlciBjb2RlOlxuXHRcdFx0XHRcdC8vLVxuXHRcdFx0XHRcdC8vLSBcdFx0XHRcdGlmICggdCA+PSB0MSB8fCB0MSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGZvcndhcmRfc2NhbjogaWYgKCEodCA8IHQxKSkge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l2ZVVwQXQgPSBpMSArIDI7Oykge1xuXHRcdFx0XHRcdFx0XHRpZiAodDEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0IDwgdDApIGJyZWFrIGZvcndhcmRfc2NhbjsgLy8gYWZ0ZXIgZW5kXG5cblx0XHRcdFx0XHRcdFx0XHRpMSA9IHBwLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IGkxO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmFmdGVyRW5kXyhpMSAtIDEsIHQsIHQwKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChpMSA9PT0gZ2l2ZVVwQXQpIGJyZWFrOyAvLyB0aGlzIGxvb3BcblxuXHRcdFx0XHRcdFx0XHR0MCA9IHQxO1xuXHRcdFx0XHRcdFx0XHR0MSA9IHBwWysraTFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0IDwgdDEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBoYXZlIGFycml2ZWQgYXQgdGhlIHNvdWdodCBpbnRlcnZhbFxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrIHNlZWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gLy8gcHJlcGFyZSBiaW5hcnkgc2VhcmNoIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbmRleFxuXG5cblx0XHRcdFx0XHRcdHJpZ2h0ID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdFx0YnJlYWsgbGluZWFyX3NjYW47XG5cdFx0XHRcdFx0fSAvLy0gc2xvd2VyIGNvZGU6XG5cdFx0XHRcdFx0Ly8tXHRcdFx0XHRcdGlmICggdCA8IHQwIHx8IHQwID09PSB1bmRlZmluZWQgKSB7XG5cblxuXHRcdFx0XHRcdGlmICghKHQgPj0gdDApKSB7XG5cdFx0XHRcdFx0XHQvLyBsb29waW5nP1xuXHRcdFx0XHRcdFx0Y29uc3QgdDFnbG9iYWwgPSBwcFsxXTtcblxuXHRcdFx0XHRcdFx0aWYgKHQgPCB0MWdsb2JhbCkge1xuXHRcdFx0XHRcdFx0XHRpMSA9IDI7IC8vICsgMSwgdXNpbmcgdGhlIHNjYW4gZm9yIHRoZSBkZXRhaWxzXG5cblx0XHRcdFx0XHRcdFx0dDAgPSB0MWdsb2JhbDtcblx0XHRcdFx0XHRcdH0gLy8gbGluZWFyIHJldmVyc2Ugc2NhblxuXG5cblx0XHRcdFx0XHRcdGZvciAobGV0IGdpdmVVcEF0ID0gaTEgLSAyOzspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHQwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBiZWZvcmUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuYmVmb3JlU3RhcnRfKDAsIHQsIHQxKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChpMSA9PT0gZ2l2ZVVwQXQpIGJyZWFrOyAvLyB0aGlzIGxvb3BcblxuXHRcdFx0XHRcdFx0XHR0MSA9IHQwO1xuXHRcdFx0XHRcdFx0XHR0MCA9IHBwWy0taTEgLSAxXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodCA+PSB0MCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWsgc2Vlaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSAvLyBwcmVwYXJlIGJpbmFyeSBzZWFyY2ggb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5kZXhcblxuXG5cdFx0XHRcdFx0XHRyaWdodCA9IGkxO1xuXHRcdFx0XHRcdFx0aTEgPSAwO1xuXHRcdFx0XHRcdFx0YnJlYWsgbGluZWFyX3NjYW47XG5cdFx0XHRcdFx0fSAvLyB0aGUgaW50ZXJ2YWwgaXMgdmFsaWRcblxuXG5cdFx0XHRcdFx0YnJlYWsgdmFsaWRhdGVfaW50ZXJ2YWw7XG5cdFx0XHRcdH0gLy8gbGluZWFyIHNjYW5cblx0XHRcdFx0Ly8gYmluYXJ5IHNlYXJjaFxuXG5cblx0XHRcdFx0d2hpbGUgKGkxIDwgcmlnaHQpIHtcblx0XHRcdFx0XHRjb25zdCBtaWQgPSBpMSArIHJpZ2h0ID4+PiAxO1xuXG5cdFx0XHRcdFx0aWYgKHQgPCBwcFttaWRdKSB7XG5cdFx0XHRcdFx0XHRyaWdodCA9IG1pZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aTEgPSBtaWQgKyAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHQxID0gcHBbaTFdO1xuXHRcdFx0XHR0MCA9IHBwW2kxIC0gMV07IC8vIGNoZWNrIGJvdW5kYXJ5IGNhc2VzLCBhZ2FpblxuXG5cdFx0XHRcdGlmICh0MCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fY2FjaGVkSW5kZXggPSAwO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmJlZm9yZVN0YXJ0XygwLCB0LCB0MSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodDEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGkxID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKGkxIC0gMSwgdDAsIHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIHNlZWtcblxuXG5cdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IGkxO1xuXHRcdFx0dGhpcy5pbnRlcnZhbENoYW5nZWRfKGkxLCB0MCwgdDEpO1xuXHRcdH0gLy8gdmFsaWRhdGVfaW50ZXJ2YWxcblxuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGkxLCB0MCwgdCwgdDEpO1xuXHR9XG5cblx0Z2V0U2V0dGluZ3NfKCkge1xuXHRcdHJldHVybiB0aGlzLnNldHRpbmdzIHx8IHRoaXMuRGVmYXVsdFNldHRpbmdzXztcblx0fVxuXG5cdGNvcHlTYW1wbGVWYWx1ZV8oaW5kZXgpIHtcblx0XHQvLyBjb3BpZXMgYSBzYW1wbGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBidWZmZXJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlcixcblx0XHRcdFx0XHR2YWx1ZXMgPSB0aGlzLnNhbXBsZVZhbHVlcyxcblx0XHRcdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdFx0XHRvZmZzZXQgPSBpbmRleCAqIHN0cmlkZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsraSkge1xuXHRcdFx0cmVzdWx0W2ldID0gdmFsdWVzW29mZnNldCArIGldO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0gLy8gVGVtcGxhdGUgbWV0aG9kcyBmb3IgZGVyaXZlZCBjbGFzc2VzOlxuXG5cblx0aW50ZXJwb2xhdGVfKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2FsbCB0byBhYnN0cmFjdCBtZXRob2QnKTsgLy8gaW1wbGVtZW50YXRpb25zIHNoYWxsIHJldHVybiB0aGlzLnJlc3VsdEJ1ZmZlclxuXHR9XG5cblx0aW50ZXJ2YWxDaGFuZ2VkXygpIHsvLyBlbXB0eVxuXHR9XG5cbn0gLy8gQUxJQVMgREVGSU5JVElPTlNcblxuXG5JbnRlcnBvbGFudC5wcm90b3R5cGUuYmVmb3JlU3RhcnRfID0gSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87XG5JbnRlcnBvbGFudC5wcm90b3R5cGUuYWZ0ZXJFbmRfID0gSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87XG5cbi8qKlxuICogRmFzdCBhbmQgc2ltcGxlIGN1YmljIHNwbGluZSBpbnRlcnBvbGFudC5cbiAqXG4gKiBJdCB3YXMgZGVyaXZlZCBmcm9tIGEgSGVybWl0aWFuIGNvbnN0cnVjdGlvbiBzZXR0aW5nIHRoZSBmaXJzdCBkZXJpdmF0aXZlXG4gKiBhdCBlYWNoIHNhbXBsZSBwb3NpdGlvbiB0byB0aGUgbGluZWFyIHNsb3BlIGJldHdlZW4gbmVpZ2hib3JpbmcgcG9zaXRpb25zXG4gKiBvdmVyIHRoZWlyIHBhcmFtZXRlciBpbnRlcnZhbC5cbiAqL1xuXG5jbGFzcyBDdWJpY0ludGVycG9sYW50IGV4dGVuZHMgSW50ZXJwb2xhbnQge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKSB7XG5cdFx0c3VwZXIocGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlcik7XG5cdFx0dGhpcy5fd2VpZ2h0UHJldiA9IC0wO1xuXHRcdHRoaXMuX29mZnNldFByZXYgPSAtMDtcblx0XHR0aGlzLl93ZWlnaHROZXh0ID0gLTA7XG5cdFx0dGhpcy5fb2Zmc2V0TmV4dCA9IC0wO1xuXHRcdHRoaXMuRGVmYXVsdFNldHRpbmdzXyA9IHtcblx0XHRcdGVuZGluZ1N0YXJ0OiBaZXJvQ3VydmF0dXJlRW5kaW5nLFxuXHRcdFx0ZW5kaW5nRW5kOiBaZXJvQ3VydmF0dXJlRW5kaW5nXG5cdFx0fTtcblx0fVxuXG5cdGludGVydmFsQ2hhbmdlZF8oaTEsIHQwLCB0MSkge1xuXHRcdGNvbnN0IHBwID0gdGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7XG5cdFx0bGV0IGlQcmV2ID0gaTEgLSAyLFxuXHRcdFx0XHRpTmV4dCA9IGkxICsgMSxcblx0XHRcdFx0dFByZXYgPSBwcFtpUHJldl0sXG5cdFx0XHRcdHROZXh0ID0gcHBbaU5leHRdO1xuXG5cdFx0aWYgKHRQcmV2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHN3aXRjaCAodGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCkge1xuXHRcdFx0XHRjYXNlIFplcm9TbG9wZUVuZGluZzpcblx0XHRcdFx0XHQvLyBmJyh0MCkgPSAwXG5cdFx0XHRcdFx0aVByZXYgPSBpMTtcblx0XHRcdFx0XHR0UHJldiA9IDIgKiB0MCAtIHQxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgV3JhcEFyb3VuZEVuZGluZzpcblx0XHRcdFx0XHQvLyB1c2UgdGhlIG90aGVyIGVuZCBvZiB0aGUgY3VydmVcblx0XHRcdFx0XHRpUHJldiA9IHBwLmxlbmd0aCAtIDI7XG5cdFx0XHRcdFx0dFByZXYgPSB0MCArIHBwW2lQcmV2XSAtIHBwW2lQcmV2ICsgMV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBaZXJvQ3VydmF0dXJlRW5kaW5nXG5cdFx0XHRcdFx0Ly8gZicnKHQwKSA9IDAgYS5rLmEuIE5hdHVyYWwgU3BsaW5lXG5cdFx0XHRcdFx0aVByZXYgPSBpMTtcblx0XHRcdFx0XHR0UHJldiA9IHQxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0TmV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzd2l0Y2ggKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKSB7XG5cdFx0XHRcdGNhc2UgWmVyb1Nsb3BlRW5kaW5nOlxuXHRcdFx0XHRcdC8vIGYnKHROKSA9IDBcblx0XHRcdFx0XHRpTmV4dCA9IGkxO1xuXHRcdFx0XHRcdHROZXh0ID0gMiAqIHQxIC0gdDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBXcmFwQXJvdW5kRW5kaW5nOlxuXHRcdFx0XHRcdC8vIHVzZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjdXJ2ZVxuXHRcdFx0XHRcdGlOZXh0ID0gMTtcblx0XHRcdFx0XHR0TmV4dCA9IHQxICsgcHBbMV0gLSBwcFswXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIFplcm9DdXJ2YXR1cmVFbmRpbmdcblx0XHRcdFx0XHQvLyBmJycodE4pID0gMCwgYS5rLmEuIE5hdHVyYWwgU3BsaW5lXG5cdFx0XHRcdFx0aU5leHQgPSBpMSAtIDE7XG5cdFx0XHRcdFx0dE5leHQgPSB0MDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBoYWxmRHQgPSAodDEgLSB0MCkgKiAwLjUsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemU7XG5cdFx0dGhpcy5fd2VpZ2h0UHJldiA9IGhhbGZEdCAvICh0MCAtIHRQcmV2KTtcblx0XHR0aGlzLl93ZWlnaHROZXh0ID0gaGFsZkR0IC8gKHROZXh0IC0gdDEpO1xuXHRcdHRoaXMuX29mZnNldFByZXYgPSBpUHJldiAqIHN0cmlkZTtcblx0XHR0aGlzLl9vZmZzZXROZXh0ID0gaU5leHQgKiBzdHJpZGU7XG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oaTEsIHQwLCB0LCB0MSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG8xID0gaTEgKiBzdHJpZGUsXG5cdFx0XHRcdFx0bzAgPSBvMSAtIHN0cmlkZSxcblx0XHRcdFx0XHRvUCA9IHRoaXMuX29mZnNldFByZXYsXG5cdFx0XHRcdFx0b04gPSB0aGlzLl9vZmZzZXROZXh0LFxuXHRcdFx0XHRcdHdQID0gdGhpcy5fd2VpZ2h0UHJldixcblx0XHRcdFx0XHR3TiA9IHRoaXMuX3dlaWdodE5leHQsXG5cdFx0XHRcdFx0cCA9ICh0IC0gdDApIC8gKHQxIC0gdDApLFxuXHRcdFx0XHRcdHBwID0gcCAqIHAsXG5cdFx0XHRcdFx0cHBwID0gcHAgKiBwOyAvLyBldmFsdWF0ZSBwb2x5bm9taWFsc1xuXG5cdFx0Y29uc3Qgc1AgPSAtd1AgKiBwcHAgKyAyICogd1AgKiBwcCAtIHdQICogcDtcblx0XHRjb25zdCBzMCA9ICgxICsgd1ApICogcHBwICsgKC0xLjUgLSAyICogd1ApICogcHAgKyAoLTAuNSArIHdQKSAqIHAgKyAxO1xuXHRcdGNvbnN0IHMxID0gKC0xIC0gd04pICogcHBwICsgKDEuNSArIHdOKSAqIHBwICsgMC41ICogcDtcblx0XHRjb25zdCBzTiA9IHdOICogcHBwIC0gd04gKiBwcDsgLy8gY29tYmluZSBkYXRhIGxpbmVhcmx5XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArK2kpIHtcblx0XHRcdHJlc3VsdFtpXSA9IHNQICogdmFsdWVzW29QICsgaV0gKyBzMCAqIHZhbHVlc1tvMCArIGldICsgczEgKiB2YWx1ZXNbbzEgKyBpXSArIHNOICogdmFsdWVzW29OICsgaV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59XG5cbmNsYXNzIExpbmVhckludGVycG9sYW50IGV4dGVuZHMgSW50ZXJwb2xhbnQge1xuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKSB7XG5cdFx0c3VwZXIocGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlcik7XG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oaTEsIHQwLCB0LCB0MSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG9mZnNldDEgPSBpMSAqIHN0cmlkZSxcblx0XHRcdFx0XHRvZmZzZXQwID0gb2Zmc2V0MSAtIHN0cmlkZSxcblx0XHRcdFx0XHR3ZWlnaHQxID0gKHQgLSB0MCkgLyAodDEgLSB0MCksXG5cdFx0XHRcdFx0d2VpZ2h0MCA9IDEgLSB3ZWlnaHQxO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKytpKSB7XG5cdFx0XHRyZXN1bHRbaV0gPSB2YWx1ZXNbb2Zmc2V0MCArIGldICogd2VpZ2h0MCArIHZhbHVlc1tvZmZzZXQxICsgaV0gKiB3ZWlnaHQxO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufVxuXG4vKipcbiAqXG4gKiBJbnRlcnBvbGFudCB0aGF0IGV2YWx1YXRlcyB0byB0aGUgc2FtcGxlIHZhbHVlIGF0IHRoZSBwb3NpdGlvbiBwcmVjZWVkaW5nXG4gKiB0aGUgcGFyYW1ldGVyLlxuICovXG5cbmNsYXNzIERpc2NyZXRlSW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKTtcblx0fVxuXG5cdGludGVycG9sYXRlXyhpMVxuXHQvKiwgdDAsIHQsIHQxICovXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8oaTEgLSAxKTtcblx0fVxuXG59XG5cbmNsYXNzIEtleWZyYW1lVHJhY2sge1xuXHRjb25zdHJ1Y3RvcihuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uKSB7XG5cdFx0aWYgKG5hbWUgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCcpO1xuXHRcdGlmICh0aW1lcyA9PT0gdW5kZWZpbmVkIHx8IHRpbWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdUSFJFRS5LZXlmcmFtZVRyYWNrOiBubyBrZXlmcmFtZXMgaW4gdHJhY2sgbmFtZWQgJyArIG5hbWUpO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSh0aW1lcywgdGhpcy5UaW1lQnVmZmVyVHlwZSk7XG5cdFx0dGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkodmFsdWVzLCB0aGlzLlZhbHVlQnVmZmVyVHlwZSk7XG5cdFx0dGhpcy5zZXRJbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb24gfHwgdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7XG5cdH0gLy8gU2VyaWFsaXphdGlvbiAoaW4gc3RhdGljIGNvbnRleHQsIGJlY2F1c2Ugb2YgY29uc3RydWN0b3IgaW52b2NhdGlvblxuXHQvLyBhbmQgYXV0b21hdGljIGludm9jYXRpb24gb2YgLnRvSlNPTik6XG5cblxuXHRzdGF0aWMgdG9KU09OKHRyYWNrKSB7XG5cdFx0Y29uc3QgdHJhY2tUeXBlID0gdHJhY2suY29uc3RydWN0b3I7XG5cdFx0bGV0IGpzb247IC8vIGRlcml2ZWQgY2xhc3NlcyBjYW4gZGVmaW5lIGEgc3RhdGljIHRvSlNPTiBtZXRob2RcblxuXHRcdGlmICh0cmFja1R5cGUudG9KU09OICE9PSB0aGlzLnRvSlNPTikge1xuXHRcdFx0anNvbiA9IHRyYWNrVHlwZS50b0pTT04odHJhY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBieSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhlIGRhdGEgY2FuIGJlIHNlcmlhbGl6ZWQgYXMtaXNcblx0XHRcdGpzb24gPSB7XG5cdFx0XHRcdCduYW1lJzogdHJhY2submFtZSxcblx0XHRcdFx0J3RpbWVzJzogQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KHRyYWNrLnRpbWVzLCBBcnJheSksXG5cdFx0XHRcdCd2YWx1ZXMnOiBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkodHJhY2sudmFsdWVzLCBBcnJheSlcblx0XHRcdH07XG5cdFx0XHRjb25zdCBpbnRlcnBvbGF0aW9uID0gdHJhY2suZ2V0SW50ZXJwb2xhdGlvbigpO1xuXG5cdFx0XHRpZiAoaW50ZXJwb2xhdGlvbiAhPT0gdHJhY2suRGVmYXVsdEludGVycG9sYXRpb24pIHtcblx0XHRcdFx0anNvbi5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRqc29uLnR5cGUgPSB0cmFjay5WYWx1ZVR5cGVOYW1lOyAvLyBtYW5kYXRvcnlcblxuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUocmVzdWx0KSB7XG5cdFx0cmV0dXJuIG5ldyBEaXNjcmV0ZUludGVycG9sYW50KHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQpO1xuXHR9XG5cblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHJlc3VsdCkge1xuXHRcdHJldHVybiBuZXcgTGluZWFySW50ZXJwb2xhbnQodGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCk7XG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGgocmVzdWx0KSB7XG5cdFx0cmV0dXJuIG5ldyBDdWJpY0ludGVycG9sYW50KHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQpO1xuXHR9XG5cblx0c2V0SW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uKSB7XG5cdFx0bGV0IGZhY3RvcnlNZXRob2Q7XG5cblx0XHRzd2l0Y2ggKGludGVycG9sYXRpb24pIHtcblx0XHRcdGNhc2UgSW50ZXJwb2xhdGVEaXNjcmV0ZTpcblx0XHRcdFx0ZmFjdG9yeU1ldGhvZCA9IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEludGVycG9sYXRlTGluZWFyOlxuXHRcdFx0XHRmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEludGVycG9sYXRlU21vb3RoOlxuXHRcdFx0XHRmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChmYWN0b3J5TWV0aG9kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSAndW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgJyArIHRoaXMuVmFsdWVUeXBlTmFtZSArICcga2V5ZnJhbWUgdHJhY2sgbmFtZWQgJyArIHRoaXMubmFtZTtcblxuXHRcdFx0aWYgKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBmYWxsIGJhY2sgdG8gZGVmYXVsdCwgdW5sZXNzIHRoZSBkZWZhdWx0IGl0c2VsZiBpcyBtZXNzZWQgdXBcblx0XHRcdFx0aWYgKGludGVycG9sYXRpb24gIT09IHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pIHtcblx0XHRcdFx0XHR0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBmYXRhbCwgaW4gdGhpcyBjYXNlXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5LZXlmcmFtZVRyYWNrOicsIG1lc3NhZ2UpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy5jcmVhdGVJbnRlcnBvbGFudCA9IGZhY3RvcnlNZXRob2Q7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRJbnRlcnBvbGF0aW9uKCkge1xuXHRcdHN3aXRjaCAodGhpcy5jcmVhdGVJbnRlcnBvbGFudCkge1xuXHRcdFx0Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOlxuXHRcdFx0XHRyZXR1cm4gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcblxuXHRcdFx0Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpcblx0XHRcdFx0cmV0dXJuIEludGVycG9sYXRlTGluZWFyO1xuXG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOlxuXHRcdFx0XHRyZXR1cm4gSW50ZXJwb2xhdGVTbW9vdGg7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VmFsdWVTaXplKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggLyB0aGlzLnRpbWVzLmxlbmd0aDtcblx0fSAvLyBtb3ZlIGFsbCBrZXlmcmFtZXMgZWl0aGVyIGZvcndhcmRzIG9yIGJhY2t3YXJkcyBpbiB0aW1lXG5cblxuXHRzaGlmdCh0aW1lT2Zmc2V0KSB7XG5cdFx0aWYgKHRpbWVPZmZzZXQgIT09IDAuMCkge1xuXHRcdFx0Y29uc3QgdGltZXMgPSB0aGlzLnRpbWVzO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHRpbWVzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdHRpbWVzW2ldICs9IHRpbWVPZmZzZXQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gc2NhbGUgYWxsIGtleWZyYW1lIHRpbWVzIGJ5IGEgZmFjdG9yICh1c2VmdWwgZm9yIGZyYW1lIDwtPiBzZWNvbmRzIGNvbnZlcnNpb25zKVxuXG5cblx0c2NhbGUodGltZVNjYWxlKSB7XG5cdFx0aWYgKHRpbWVTY2FsZSAhPT0gMS4wKSB7XG5cdFx0XHRjb25zdCB0aW1lcyA9IHRoaXMudGltZXM7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdFx0dGltZXNbaV0gKj0gdGltZVNjYWxlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIHJlbW92ZXMga2V5ZnJhbWVzIGJlZm9yZSBhbmQgYWZ0ZXIgYW5pbWF0aW9uIHdpdGhvdXQgY2hhbmdpbmcgYW55IHZhbHVlcyB3aXRoaW4gdGhlIHJhbmdlIFtzdGFydFRpbWUsIGVuZFRpbWVdLlxuXHQvLyBJTVBPUlRBTlQ6IFdlIGRvIG5vdCBzaGlmdCBhcm91bmQga2V5cyB0byB0aGUgc3RhcnQgb2YgdGhlIHRyYWNrIHRpbWUsIGJlY2F1c2UgZm9yIGludGVycG9sYXRlZCBrZXlzIHRoaXMgd2lsbCBjaGFuZ2UgdGhlaXIgdmFsdWVzXG5cblxuXHR0cmltKHN0YXJ0VGltZSwgZW5kVGltZSkge1xuXHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcyxcblx0XHRcdFx0XHRuS2V5cyA9IHRpbWVzLmxlbmd0aDtcblx0XHRsZXQgZnJvbSA9IDAsXG5cdFx0XHRcdHRvID0gbktleXMgLSAxO1xuXG5cdFx0d2hpbGUgKGZyb20gIT09IG5LZXlzICYmIHRpbWVzW2Zyb21dIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHQrK2Zyb207XG5cdFx0fVxuXG5cdFx0d2hpbGUgKHRvICE9PSAtMSAmJiB0aW1lc1t0b10gPiBlbmRUaW1lKSB7XG5cdFx0XHQtLXRvO1xuXHRcdH1cblxuXHRcdCsrdG87IC8vIGluY2x1c2l2ZSAtPiBleGNsdXNpdmUgYm91bmRcblxuXHRcdGlmIChmcm9tICE9PSAwIHx8IHRvICE9PSBuS2V5cykge1xuXHRcdFx0Ly8gZW1wdHkgdHJhY2tzIGFyZSBmb3JiaWRkZW4sIHNvIGtlZXAgYXQgbGVhc3Qgb25lIGtleWZyYW1lXG5cdFx0XHRpZiAoZnJvbSA+PSB0bykge1xuXHRcdFx0XHR0byA9IE1hdGgubWF4KHRvLCAxKTtcblx0XHRcdFx0ZnJvbSA9IHRvIC0gMTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RyaWRlID0gdGhpcy5nZXRWYWx1ZVNpemUoKTtcblx0XHRcdHRoaXMudGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKHRpbWVzLCBmcm9tLCB0byk7XG5cdFx0XHR0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsIGZyb20gKiBzdHJpZGUsIHRvICogc3RyaWRlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyBlbnN1cmUgd2UgZG8gbm90IGdldCBhIEdhcmJhZ2VJbkdhcmJhZ2VPdXQgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdHJhY2tzIGFyZSBhdCBsZWFzdCBtaW5pbWFsbHkgdmlhYmxlXG5cblxuXHR2YWxpZGF0ZSgpIHtcblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXHRcdGNvbnN0IHZhbHVlU2l6ZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7XG5cblx0XHRpZiAodmFsdWVTaXplIC0gTWF0aC5mbG9vcih2YWx1ZVNpemUpICE9PSAwKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suJywgdGhpcyk7XG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcyxcblx0XHRcdFx0XHR2YWx1ZXMgPSB0aGlzLnZhbHVlcyxcblx0XHRcdFx0XHRuS2V5cyA9IHRpbWVzLmxlbmd0aDtcblxuXHRcdGlmIChuS2V5cyA9PT0gMCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuJywgdGhpcyk7XG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBwcmV2VGltZSA9IG51bGw7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbktleXM7IGkrKykge1xuXHRcdFx0Y29uc3QgY3VyclRpbWUgPSB0aW1lc1tpXTtcblxuXHRcdFx0aWYgKHR5cGVvZiBjdXJyVGltZSA9PT0gJ251bWJlcicgJiYgaXNOYU4oY3VyclRpbWUpKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLicsIHRoaXMsIGksIGN1cnJUaW1lKTtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmV2VGltZSAhPT0gbnVsbCAmJiBwcmV2VGltZSA+IGN1cnJUaW1lKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLicsIHRoaXMsIGksIGN1cnJUaW1lLCBwcmV2VGltZSk7XG5cdFx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRwcmV2VGltZSA9IGN1cnJUaW1lO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKEFuaW1hdGlvblV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZXMpKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gdmFsdWVzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG5cblx0XHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZDtcblx0fSAvLyByZW1vdmVzIGVxdWl2YWxlbnQgc2VxdWVudGlhbCBrZXlzIGFzIGNvbW1vbiBpbiBtb3JwaCB0YXJnZXQgc2VxdWVuY2VzXG5cdC8vICgwLDAsMCwwLDEsMSwxLDAsMCwwLDAsMCwwLDApIC0tPiAoMCwwLDEsMSwwLDApXG5cblxuXHRvcHRpbWl6ZSgpIHtcblx0XHQvLyB0aW1lcyBvciB2YWx1ZXMgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHRyYWNrcywgc28gb3ZlcndyaXRpbmcgaXMgdW5zYWZlXG5cdFx0Y29uc3QgdGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKHRoaXMudGltZXMpLFxuXHRcdFx0XHRcdHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCksXG5cdFx0XHRcdFx0c21vb3RoSW50ZXJwb2xhdGlvbiA9IHRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpID09PSBJbnRlcnBvbGF0ZVNtb290aCxcblx0XHRcdFx0XHRsYXN0SW5kZXggPSB0aW1lcy5sZW5ndGggLSAxO1xuXHRcdGxldCB3cml0ZUluZGV4ID0gMTtcblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgbGFzdEluZGV4OyArK2kpIHtcblx0XHRcdGxldCBrZWVwID0gZmFsc2U7XG5cdFx0XHRjb25zdCB0aW1lID0gdGltZXNbaV07XG5cdFx0XHRjb25zdCB0aW1lTmV4dCA9IHRpbWVzW2kgKyAxXTsgLy8gcmVtb3ZlIGFkamFjZW50IGtleWZyYW1lcyBzY2hlZHVsZWQgYXQgdGhlIHNhbWUgdGltZVxuXG5cdFx0XHRpZiAodGltZSAhPT0gdGltZU5leHQgJiYgKGkgIT09IDEgfHwgdGltZSAhPT0gdGltZXNbMF0pKSB7XG5cdFx0XHRcdGlmICghc21vb3RoSW50ZXJwb2xhdGlvbikge1xuXHRcdFx0XHRcdC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBrZXlmcmFtZXMgc2FtZSBhcyB0aGVpciBuZWlnaGJvcnNcblx0XHRcdFx0XHRjb25zdCBvZmZzZXQgPSBpICogc3RyaWRlLFxuXHRcdFx0XHRcdFx0XHRcdG9mZnNldFAgPSBvZmZzZXQgLSBzdHJpZGUsXG5cdFx0XHRcdFx0XHRcdFx0b2Zmc2V0TiA9IG9mZnNldCArIHN0cmlkZTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqICE9PSBzdHJpZGU7ICsraikge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbb2Zmc2V0ICsgal07XG5cblx0XHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdmFsdWVzW29mZnNldFAgKyBqXSB8fCB2YWx1ZSAhPT0gdmFsdWVzW29mZnNldE4gKyBqXSkge1xuXHRcdFx0XHRcdFx0XHRrZWVwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGtlZXAgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIGluLXBsYWNlIGNvbXBhY3Rpb25cblxuXG5cdFx0XHRpZiAoa2VlcCkge1xuXHRcdFx0XHRpZiAoaSAhPT0gd3JpdGVJbmRleCkge1xuXHRcdFx0XHRcdHRpbWVzW3dyaXRlSW5kZXhdID0gdGltZXNbaV07XG5cdFx0XHRcdFx0Y29uc3QgcmVhZE9mZnNldCA9IGkgKiBzdHJpZGUsXG5cdFx0XHRcdFx0XHRcdFx0d3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogIT09IHN0cmlkZTsgKytqKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZXNbd3JpdGVPZmZzZXQgKyBqXSA9IHZhbHVlc1tyZWFkT2Zmc2V0ICsgal07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Kyt3cml0ZUluZGV4O1xuXHRcdFx0fVxuXHRcdH0gLy8gZmx1c2ggbGFzdCBrZXlmcmFtZSAoY29tcGFjdGlvbiBsb29rcyBhaGVhZClcblxuXG5cdFx0aWYgKGxhc3RJbmRleCA+IDApIHtcblx0XHRcdHRpbWVzW3dyaXRlSW5kZXhdID0gdGltZXNbbGFzdEluZGV4XTtcblxuXHRcdFx0Zm9yIChsZXQgcmVhZE9mZnNldCA9IGxhc3RJbmRleCAqIHN0cmlkZSwgd3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlLCBqID0gMDsgaiAhPT0gc3RyaWRlOyArK2opIHtcblx0XHRcdFx0dmFsdWVzW3dyaXRlT2Zmc2V0ICsgal0gPSB2YWx1ZXNbcmVhZE9mZnNldCArIGpdO1xuXHRcdFx0fVxuXG5cdFx0XHQrK3dyaXRlSW5kZXg7XG5cdFx0fVxuXG5cdFx0aWYgKHdyaXRlSW5kZXggIT09IHRpbWVzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGltZXMsIDAsIHdyaXRlSW5kZXgpO1xuXHRcdFx0dGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKHZhbHVlcywgMCwgd3JpdGVJbmRleCAqIHN0cmlkZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGltZXMgPSB0aW1lcztcblx0XHRcdHRoaXMudmFsdWVzID0gdmFsdWVzO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0Y29uc3QgdGltZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKHRoaXMudGltZXMsIDApO1xuXHRcdGNvbnN0IHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsIDApO1xuXHRcdGNvbnN0IFR5cGVkS2V5ZnJhbWVUcmFjayA9IHRoaXMuY29uc3RydWN0b3I7XG5cdFx0Y29uc3QgdHJhY2sgPSBuZXcgVHlwZWRLZXlmcmFtZVRyYWNrKHRoaXMubmFtZSwgdGltZXMsIHZhbHVlcyk7IC8vIEludGVycG9sYW50IGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yIGlzIG5vdCBzYXZlZCwgc28gY29weSB0aGUgZmFjdG9yeSBtZXRob2QgZGlyZWN0bHkuXG5cblx0XHR0cmFjay5jcmVhdGVJbnRlcnBvbGFudCA9IHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ7XG5cdFx0cmV0dXJuIHRyYWNrO1xuXHR9XG5cbn1cblxuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGUgPSBGbG9hdDMyQXJyYXk7XG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGUgPSBGbG9hdDMyQXJyYXk7XG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlTGluZWFyO1xuXG4vKipcbiAqIEEgVHJhY2sgb2YgQm9vbGVhbiBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cblxuY2xhc3MgQm9vbGVhbktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ2Jvb2wnO1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZSA9IEFycmF5O1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIgPSB1bmRlZmluZWQ7XG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoID0gdW5kZWZpbmVkOyAvLyBOb3RlOiBBY3R1YWxseSB0aGlzIHRyYWNrIGNvdWxkIGhhdmUgYSBvcHRpbWl6ZWQgLyBjb21wcmVzc2VkXG5cbi8qKlxuICogQSBUcmFjayBvZiBrZXlmcmFtZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgY29sb3IuXG4gKi9cblxuY2xhc3MgQ29sb3JLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5Db2xvcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnY29sb3InOyAvLyBWYWx1ZUJ1ZmZlclR5cGUgaXMgaW5oZXJpdGVkXG5cbi8qKlxuICogQSBUcmFjayBvZiBudW1lcmljIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuXG5jbGFzcyBOdW1iZXJLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5OdW1iZXJLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ251bWJlcic7IC8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWRcblxuLyoqXG4gKiBTcGhlcmljYWwgbGluZWFyIHVuaXQgcXVhdGVybmlvbiBpbnRlcnBvbGFudC5cbiAqL1xuXG5jbGFzcyBRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIpIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyKTtcblx0fVxuXG5cdGludGVycG9sYXRlXyhpMSwgdDAsIHQsIHQxKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsXG5cdFx0XHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRcdFx0YWxwaGEgPSAodCAtIHQwKSAvICh0MSAtIHQwKTtcblx0XHRsZXQgb2Zmc2V0ID0gaTEgKiBzdHJpZGU7XG5cblx0XHRmb3IgKGxldCBlbmQgPSBvZmZzZXQgKyBzdHJpZGU7IG9mZnNldCAhPT0gZW5kOyBvZmZzZXQgKz0gNCkge1xuXHRcdFx0UXVhdGVybmlvbi5zbGVycEZsYXQocmVzdWx0LCAwLCB2YWx1ZXMsIG9mZnNldCAtIHN0cmlkZSwgdmFsdWVzLCBvZmZzZXQsIGFscGhhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn1cblxuLyoqXG4gKiBBIFRyYWNrIG9mIHF1YXRlcm5pb24ga2V5ZnJhbWUgdmFsdWVzLlxuICovXG5cbmNsYXNzIFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7XG5cdEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcihyZXN1bHQpIHtcblx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCh0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0KTtcblx0fVxuXG59XG5cblF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ3F1YXRlcm5pb24nOyAvLyBWYWx1ZUJ1ZmZlclR5cGUgaXMgaW5oZXJpdGVkXG5cblF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlTGluZWFyO1xuUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIFRyYWNrIHRoYXQgaW50ZXJwb2xhdGVzIFN0cmluZ3NcbiAqL1xuXG5jbGFzcyBTdHJpbmdLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ3N0cmluZyc7XG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGUgPSBBcnJheTtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhciA9IHVuZGVmaW5lZDtcblN0cmluZ0tleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIFRyYWNrIG9mIHZlY3RvcmVkIGtleWZyYW1lIHZhbHVlcy5cbiAqL1xuXG5jbGFzcyBWZWN0b3JLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5WZWN0b3JLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lID0gJ3ZlY3Rvcic7IC8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWRcblxuY2xhc3MgQW5pbWF0aW9uQ2xpcCB7XG5cdGNvbnN0cnVjdG9yKG5hbWUsIGR1cmF0aW9uID0gLTEsIHRyYWNrcywgYmxlbmRNb2RlID0gTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlKSB7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLnRyYWNrcyA9IHRyYWNrcztcblx0XHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdFx0dGhpcy5ibGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7IC8vIHRoaXMgbWVhbnMgaXQgc2hvdWxkIGZpZ3VyZSBvdXQgaXRzIGR1cmF0aW9uIGJ5IHNjYW5uaW5nIHRoZSB0cmFja3NcblxuXHRcdGlmICh0aGlzLmR1cmF0aW9uIDwgMCkge1xuXHRcdFx0dGhpcy5yZXNldER1cmF0aW9uKCk7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHBhcnNlKGpzb24pIHtcblx0XHRjb25zdCB0cmFja3MgPSBbXSxcblx0XHRcdFx0XHRqc29uVHJhY2tzID0ganNvbi50cmFja3MsXG5cdFx0XHRcdFx0ZnJhbWVUaW1lID0gMS4wIC8gKGpzb24uZnBzIHx8IDEuMCk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGpzb25UcmFja3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdHRyYWNrcy5wdXNoKHBhcnNlS2V5ZnJhbWVUcmFjayhqc29uVHJhY2tzW2ldKS5zY2FsZShmcmFtZVRpbWUpKTtcblx0XHR9XG5cblx0XHRjb25zdCBjbGlwID0gbmV3IHRoaXMoanNvbi5uYW1lLCBqc29uLmR1cmF0aW9uLCB0cmFja3MsIGpzb24uYmxlbmRNb2RlKTtcblx0XHRjbGlwLnV1aWQgPSBqc29uLnV1aWQ7XG5cdFx0cmV0dXJuIGNsaXA7XG5cdH1cblxuXHRzdGF0aWMgdG9KU09OKGNsaXApIHtcblx0XHRjb25zdCB0cmFja3MgPSBbXSxcblx0XHRcdFx0XHRjbGlwVHJhY2tzID0gY2xpcC50cmFja3M7XG5cdFx0Y29uc3QganNvbiA9IHtcblx0XHRcdCduYW1lJzogY2xpcC5uYW1lLFxuXHRcdFx0J2R1cmF0aW9uJzogY2xpcC5kdXJhdGlvbixcblx0XHRcdCd0cmFja3MnOiB0cmFja3MsXG5cdFx0XHQndXVpZCc6IGNsaXAudXVpZCxcblx0XHRcdCdibGVuZE1vZGUnOiBjbGlwLmJsZW5kTW9kZVxuXHRcdH07XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNsaXBUcmFja3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdHRyYWNrcy5wdXNoKEtleWZyYW1lVHJhY2sudG9KU09OKGNsaXBUcmFja3NbaV0pKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXG5cdHN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShuYW1lLCBtb3JwaFRhcmdldFNlcXVlbmNlLCBmcHMsIG5vTG9vcCkge1xuXHRcdGNvbnN0IG51bU1vcnBoVGFyZ2V0cyA9IG1vcnBoVGFyZ2V0U2VxdWVuY2UubGVuZ3RoO1xuXHRcdGNvbnN0IHRyYWNrcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1Nb3JwaFRhcmdldHM7IGkrKykge1xuXHRcdFx0bGV0IHRpbWVzID0gW107XG5cdFx0XHRsZXQgdmFsdWVzID0gW107XG5cdFx0XHR0aW1lcy5wdXNoKChpICsgbnVtTW9ycGhUYXJnZXRzIC0gMSkgJSBudW1Nb3JwaFRhcmdldHMsIGksIChpICsgMSkgJSBudW1Nb3JwaFRhcmdldHMpO1xuXHRcdFx0dmFsdWVzLnB1c2goMCwgMSwgMCk7XG5cdFx0XHRjb25zdCBvcmRlciA9IEFuaW1hdGlvblV0aWxzLmdldEtleWZyYW1lT3JkZXIodGltZXMpO1xuXHRcdFx0dGltZXMgPSBBbmltYXRpb25VdGlscy5zb3J0ZWRBcnJheSh0aW1lcywgMSwgb3JkZXIpO1xuXHRcdFx0dmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkodmFsdWVzLCAxLCBvcmRlcik7IC8vIGlmIHRoZXJlIGlzIGEga2V5IGF0IHRoZSBmaXJzdCBmcmFtZSwgZHVwbGljYXRlIGl0IGFzIHRoZVxuXHRcdFx0Ly8gbGFzdCBmcmFtZSBhcyB3ZWxsIGZvciBwZXJmZWN0IGxvb3AuXG5cblx0XHRcdGlmICghbm9Mb29wICYmIHRpbWVzWzBdID09PSAwKSB7XG5cdFx0XHRcdHRpbWVzLnB1c2gobnVtTW9ycGhUYXJnZXRzKTtcblx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWVzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0dHJhY2tzLnB1c2gobmV3IE51bWJlcktleWZyYW1lVHJhY2soJy5tb3JwaFRhcmdldEluZmx1ZW5jZXNbJyArIG1vcnBoVGFyZ2V0U2VxdWVuY2VbaV0ubmFtZSArICddJywgdGltZXMsIHZhbHVlcykuc2NhbGUoMS4wIC8gZnBzKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyB0aGlzKG5hbWUsIC0xLCB0cmFja3MpO1xuXHR9XG5cblx0c3RhdGljIGZpbmRCeU5hbWUob2JqZWN0T3JDbGlwQXJyYXksIG5hbWUpIHtcblx0XHRsZXQgY2xpcEFycmF5ID0gb2JqZWN0T3JDbGlwQXJyYXk7XG5cblx0XHRpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0T3JDbGlwQXJyYXkpKSB7XG5cdFx0XHRjb25zdCBvID0gb2JqZWN0T3JDbGlwQXJyYXk7XG5cdFx0XHRjbGlwQXJyYXkgPSBvLmdlb21ldHJ5ICYmIG8uZ2VvbWV0cnkuYW5pbWF0aW9ucyB8fCBvLmFuaW1hdGlvbnM7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGlwQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjbGlwQXJyYXlbaV0ubmFtZSA9PT0gbmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gY2xpcEFycmF5W2ldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKG1vcnBoVGFyZ2V0cywgZnBzLCBub0xvb3ApIHtcblx0XHRjb25zdCBhbmltYXRpb25Ub01vcnBoVGFyZ2V0cyA9IHt9OyAvLyB0ZXN0ZWQgd2l0aCBodHRwczovL3JlZ2V4MTAxLmNvbS8gb24gdHJpY2sgc2VxdWVuY2VzXG5cdFx0Ly8gc3VjaCBmbGFtaW5nb19mbHlBXzAwMywgZmxhbWluZ29fcnVuMV8wMDMsIGNyZGVhdGgwMDU5XG5cblx0XHRjb25zdCBwYXR0ZXJuID0gL14oW1xcdy1dKj8pKFtcXGRdKykkLzsgLy8gc29ydCBtb3JwaCB0YXJnZXQgbmFtZXMgaW50byBhbmltYXRpb24gZ3JvdXBzIGJhc2VkXG5cdFx0Ly8gcGF0dGVybnMgbGlrZSBXYWxrXzAwMSwgV2Fsa18wMDIsIFJ1bl8wMDEsIFJ1bl8wMDJcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1tpXTtcblx0XHRcdGNvbnN0IHBhcnRzID0gbW9ycGhUYXJnZXQubmFtZS5tYXRjaChwYXR0ZXJuKTtcblxuXHRcdFx0aWYgKHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcnRzWzFdO1xuXHRcdFx0XHRsZXQgYW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHNbbmFtZV07XG5cblx0XHRcdFx0aWYgKCFhbmltYXRpb25Nb3JwaFRhcmdldHMpIHtcblx0XHRcdFx0XHRhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1tuYW1lXSA9IGFuaW1hdGlvbk1vcnBoVGFyZ2V0cyA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YW5pbWF0aW9uTW9ycGhUYXJnZXRzLnB1c2gobW9ycGhUYXJnZXQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNsaXBzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5hbWUgaW4gYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHMpIHtcblx0XHRcdGNsaXBzLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShuYW1lLCBhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1tuYW1lXSwgZnBzLCBub0xvb3ApKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2xpcHM7XG5cdH0gLy8gcGFyc2UgdGhlIGFuaW1hdGlvbi5oaWVyYXJjaHkgZm9ybWF0XG5cblxuXHRzdGF0aWMgcGFyc2VBbmltYXRpb24oYW5pbWF0aW9uLCBib25lcykge1xuXHRcdGlmICghYW5pbWF0aW9uKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLicpO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkTm9uZW1wdHlUcmFjayA9IGZ1bmN0aW9uICh0cmFja1R5cGUsIHRyYWNrTmFtZSwgYW5pbWF0aW9uS2V5cywgcHJvcGVydHlOYW1lLCBkZXN0VHJhY2tzKSB7XG5cdFx0XHQvLyBvbmx5IHJldHVybiB0cmFjayBpZiB0aGVyZSBhcmUgYWN0dWFsbHkga2V5cy5cblx0XHRcdGlmIChhbmltYXRpb25LZXlzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0QW5pbWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oYW5pbWF0aW9uS2V5cywgdGltZXMsIHZhbHVlcywgcHJvcGVydHlOYW1lKTsgLy8gZW1wdHkga2V5cyBhcmUgZmlsdGVyZWQgb3V0LCBzbyBjaGVjayBhZ2FpblxuXG5cdFx0XHRcdGlmICh0aW1lcy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHRkZXN0VHJhY2tzLnB1c2gobmV3IHRyYWNrVHlwZSh0cmFja05hbWUsIHRpbWVzLCB2YWx1ZXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCB0cmFja3MgPSBbXTtcblx0XHRjb25zdCBjbGlwTmFtZSA9IGFuaW1hdGlvbi5uYW1lIHx8ICdkZWZhdWx0Jztcblx0XHRjb25zdCBmcHMgPSBhbmltYXRpb24uZnBzIHx8IDMwO1xuXHRcdGNvbnN0IGJsZW5kTW9kZSA9IGFuaW1hdGlvbi5ibGVuZE1vZGU7IC8vIGF1dG9tYXRpYyBsZW5ndGggZGV0ZXJtaW5hdGlvbiBpbiBBbmltYXRpb25DbGlwLlxuXG5cdFx0bGV0IGR1cmF0aW9uID0gYW5pbWF0aW9uLmxlbmd0aCB8fCAtMTtcblx0XHRjb25zdCBoaWVyYXJjaHlUcmFja3MgPSBhbmltYXRpb24uaGllcmFyY2h5IHx8IFtdO1xuXG5cdFx0Zm9yIChsZXQgaCA9IDA7IGggPCBoaWVyYXJjaHlUcmFja3MubGVuZ3RoOyBoKyspIHtcblx0XHRcdGNvbnN0IGFuaW1hdGlvbktleXMgPSBoaWVyYXJjaHlUcmFja3NbaF0ua2V5czsgLy8gc2tpcCBlbXB0eSB0cmFja3NcblxuXHRcdFx0aWYgKCFhbmltYXRpb25LZXlzIHx8IGFuaW1hdGlvbktleXMubGVuZ3RoID09PSAwKSBjb250aW51ZTsgLy8gcHJvY2VzcyBtb3JwaCB0YXJnZXRzXG5cblx0XHRcdGlmIChhbmltYXRpb25LZXlzWzBdLm1vcnBoVGFyZ2V0cykge1xuXHRcdFx0XHQvLyBmaWd1cmUgb3V0IGFsbCBtb3JwaCB0YXJnZXRzIHVzZWQgaW4gdGhpcyB0cmFja1xuXHRcdFx0XHRjb25zdCBtb3JwaFRhcmdldE5hbWVzID0ge307XG5cdFx0XHRcdGxldCBrO1xuXG5cdFx0XHRcdGZvciAoayA9IDA7IGsgPCBhbmltYXRpb25LZXlzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0aWYgKGFuaW1hdGlvbktleXNba10ubW9ycGhUYXJnZXRzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBtID0gMDsgbSA8IGFuaW1hdGlvbktleXNba10ubW9ycGhUYXJnZXRzLmxlbmd0aDsgbSsrKSB7XG5cdFx0XHRcdFx0XHRcdG1vcnBoVGFyZ2V0TmFtZXNbYW5pbWF0aW9uS2V5c1trXS5tb3JwaFRhcmdldHNbbV1dID0gLTE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IC8vIGNyZWF0ZSBhIHRyYWNrIGZvciBlYWNoIG1vcnBoIHRhcmdldCB3aXRoIGFsbCB6ZXJvXG5cdFx0XHRcdC8vIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBleGNlcHQgZm9yIHRoZSBrZXlzIGluIHdoaWNoXG5cdFx0XHRcdC8vIHRoZSBtb3JwaFRhcmdldCBpcyBuYW1lZC5cblxuXG5cdFx0XHRcdGZvciAoY29uc3QgbW9ycGhUYXJnZXROYW1lIGluIG1vcnBoVGFyZ2V0TmFtZXMpIHtcblx0XHRcdFx0XHRjb25zdCB0aW1lcyA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgbSA9IDA7IG0gIT09IGFuaW1hdGlvbktleXNba10ubW9ycGhUYXJnZXRzLmxlbmd0aDsgKyttKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25LZXkgPSBhbmltYXRpb25LZXlzW2tdO1xuXHRcdFx0XHRcdFx0dGltZXMucHVzaChhbmltYXRpb25LZXkudGltZSk7XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChhbmltYXRpb25LZXkubW9ycGhUYXJnZXQgPT09IG1vcnBoVGFyZ2V0TmFtZSA/IDEgOiAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0cmFja3MucHVzaChuZXcgTnVtYmVyS2V5ZnJhbWVUcmFjaygnLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWycgKyBtb3JwaFRhcmdldE5hbWUgKyAnXScsIHRpbWVzLCB2YWx1ZXMpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGR1cmF0aW9uID0gbW9ycGhUYXJnZXROYW1lcy5sZW5ndGggKiAoZnBzIHx8IDEuMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyAuLi5hc3N1bWUgc2tlbGV0YWwgYW5pbWF0aW9uXG5cdFx0XHRcdGNvbnN0IGJvbmVOYW1lID0gJy5ib25lc1snICsgYm9uZXNbaF0ubmFtZSArICddJztcblx0XHRcdFx0YWRkTm9uZW1wdHlUcmFjayhWZWN0b3JLZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucG9zaXRpb24nLCBhbmltYXRpb25LZXlzLCAncG9zJywgdHJhY2tzKTtcblx0XHRcdFx0YWRkTm9uZW1wdHlUcmFjayhRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnF1YXRlcm5pb24nLCBhbmltYXRpb25LZXlzLCAncm90JywgdHJhY2tzKTtcblx0XHRcdFx0YWRkTm9uZW1wdHlUcmFjayhWZWN0b3JLZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcuc2NhbGUnLCBhbmltYXRpb25LZXlzLCAnc2NsJywgdHJhY2tzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xpcCA9IG5ldyB0aGlzKGNsaXBOYW1lLCBkdXJhdGlvbiwgdHJhY2tzLCBibGVuZE1vZGUpO1xuXHRcdHJldHVybiBjbGlwO1xuXHR9XG5cblx0cmVzZXREdXJhdGlvbigpIHtcblx0XHRjb25zdCB0cmFja3MgPSB0aGlzLnRyYWNrcztcblx0XHRsZXQgZHVyYXRpb24gPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0cmFja3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGNvbnN0IHRyYWNrID0gdGhpcy50cmFja3NbaV07XG5cdFx0XHRkdXJhdGlvbiA9IE1hdGgubWF4KGR1cmF0aW9uLCB0cmFjay50aW1lc1t0cmFjay50aW1lcy5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dHJpbSgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnRyYWNrc1tpXS50cmltKDAsIHRoaXMuZHVyYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dmFsaWRhdGUoKSB7XG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbGlkID0gdmFsaWQgJiYgdGhpcy50cmFja3NbaV0udmFsaWRhdGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cblxuXHRvcHRpbWl6ZSgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnRyYWNrc1tpXS5vcHRpbWl6ZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0cmFja3MucHVzaCh0aGlzLnRyYWNrc1tpXS5jbG9uZSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLCB0aGlzLmR1cmF0aW9uLCB0cmFja3MsIHRoaXMuYmxlbmRNb2RlKTtcblx0fVxuXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyk7XG5cdH1cblxufVxuXG5mdW5jdGlvbiBnZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKHR5cGVOYW1lKSB7XG5cdHN3aXRjaCAodHlwZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuXHRcdGNhc2UgJ3NjYWxhcic6XG5cdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRjYXNlICdmbG9hdCc6XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHJldHVybiBOdW1iZXJLZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAndmVjdG9yJzpcblx0XHRjYXNlICd2ZWN0b3IyJzpcblx0XHRjYXNlICd2ZWN0b3IzJzpcblx0XHRjYXNlICd2ZWN0b3I0Jzpcblx0XHRcdHJldHVybiBWZWN0b3JLZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0cmV0dXJuIENvbG9yS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ3F1YXRlcm5pb24nOlxuXHRcdFx0cmV0dXJuIFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAnYm9vbCc6XG5cdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0XHRyZXR1cm4gQm9vbGVhbktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuIFN0cmluZ0tleWZyYW1lVHJhY2s7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAnICsgdHlwZU5hbWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUtleWZyYW1lVHJhY2soanNvbikge1xuXHRpZiAoanNvbi50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlJyk7XG5cdH1cblxuXHRjb25zdCB0cmFja1R5cGUgPSBnZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKGpzb24udHlwZSk7XG5cblx0aWYgKGpzb24udGltZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHRpbWVzID0gW10sXG5cdFx0XHRcdFx0dmFsdWVzID0gW107XG5cdFx0QW5pbWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oanNvbi5rZXlzLCB0aW1lcywgdmFsdWVzLCAndmFsdWUnKTtcblx0XHRqc29uLnRpbWVzID0gdGltZXM7XG5cdFx0anNvbi52YWx1ZXMgPSB2YWx1ZXM7XG5cdH0gLy8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgcGFyc2UgbWV0aG9kXG5cblxuXHRpZiAodHJhY2tUeXBlLnBhcnNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdHJhY2tUeXBlLnBhcnNlKGpzb24pO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGJ5IGRlZmF1bHQsIHdlIGFzc3VtZSBhIGNvbnN0cnVjdG9yIGNvbXBhdGlibGUgd2l0aCB0aGUgYmFzZVxuXHRcdHJldHVybiBuZXcgdHJhY2tUeXBlKGpzb24ubmFtZSwganNvbi50aW1lcywganNvbi52YWx1ZXMsIGpzb24uaW50ZXJwb2xhdGlvbik7XG5cdH1cbn1cblxuY29uc3QgQ2FjaGUgPSB7XG5cdGVuYWJsZWQ6IGZhbHNlLFxuXHRmaWxlczoge30sXG5cdGFkZDogZnVuY3Rpb24gKGtleSwgZmlsZSkge1xuXHRcdGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47IC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQ2FjaGUnLCAnQWRkaW5nIGtleTonLCBrZXkgKTtcblxuXHRcdHRoaXMuZmlsZXNba2V5XSA9IGZpbGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKGtleSkge1xuXHRcdGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47IC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQ2FjaGUnLCAnQ2hlY2tpbmcga2V5OicsIGtleSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsZXNba2V5XTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsZXNba2V5XTtcblx0fSxcblx0Y2xlYXI6IGZ1bmN0aW9uICgpIHtcblx0XHR0aGlzLmZpbGVzID0ge307XG5cdH1cbn07XG5cbmNsYXNzIExvYWRpbmdNYW5hZ2VyIHtcblx0Y29uc3RydWN0b3Iob25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGxldCBpc0xvYWRpbmcgPSBmYWxzZTtcblx0XHRsZXQgaXRlbXNMb2FkZWQgPSAwO1xuXHRcdGxldCBpdGVtc1RvdGFsID0gMDtcblx0XHRsZXQgdXJsTW9kaWZpZXIgPSB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaGFuZGxlcnMgPSBbXTsgLy8gUmVmZXIgdG8gIzU2ODkgZm9yIHRoZSByZWFzb24gd2h5IHdlIGRvbid0IHNldCAub25TdGFydFxuXHRcdC8vIGluIHRoZSBjb25zdHJ1Y3RvclxuXG5cdFx0dGhpcy5vblN0YXJ0ID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMub25Mb2FkID0gb25Mb2FkO1xuXHRcdHRoaXMub25Qcm9ncmVzcyA9IG9uUHJvZ3Jlc3M7XG5cdFx0dGhpcy5vbkVycm9yID0gb25FcnJvcjtcblxuXHRcdHRoaXMuaXRlbVN0YXJ0ID0gZnVuY3Rpb24gKHVybCkge1xuXHRcdFx0aXRlbXNUb3RhbCsrO1xuXG5cdFx0XHRpZiAoaXNMb2FkaW5nID09PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAoc2NvcGUub25TdGFydCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2NvcGUub25TdGFydCh1cmwsIGl0ZW1zTG9hZGVkLCBpdGVtc1RvdGFsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpc0xvYWRpbmcgPSB0cnVlO1xuXHRcdH07XG5cblx0XHR0aGlzLml0ZW1FbmQgPSBmdW5jdGlvbiAodXJsKSB7XG5cdFx0XHRpdGVtc0xvYWRlZCsrO1xuXG5cdFx0XHRpZiAoc2NvcGUub25Qcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHNjb3BlLm9uUHJvZ3Jlc3ModXJsLCBpdGVtc0xvYWRlZCwgaXRlbXNUb3RhbCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpdGVtc0xvYWRlZCA9PT0gaXRlbXNUb3RhbCkge1xuXHRcdFx0XHRpc0xvYWRpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoc2NvcGUub25Mb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzY29wZS5vbkxvYWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLml0ZW1FcnJvciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0XHRcdGlmIChzY29wZS5vbkVycm9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0c2NvcGUub25FcnJvcih1cmwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnJlc29sdmVVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdFx0XHRpZiAodXJsTW9kaWZpZXIpIHtcblx0XHRcdFx0cmV0dXJuIHVybE1vZGlmaWVyKHVybCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1cmw7XG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0VVJMTW9kaWZpZXIgPSBmdW5jdGlvbiAodHJhbnNmb3JtKSB7XG5cdFx0XHR1cmxNb2RpZmllciA9IHRyYW5zZm9ybTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cblx0XHR0aGlzLmFkZEhhbmRsZXIgPSBmdW5jdGlvbiAocmVnZXgsIGxvYWRlcikge1xuXHRcdFx0aGFuZGxlcnMucHVzaChyZWdleCwgbG9hZGVyKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cblx0XHR0aGlzLnJlbW92ZUhhbmRsZXIgPSBmdW5jdGlvbiAocmVnZXgpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gaGFuZGxlcnMuaW5kZXhPZihyZWdleCk7XG5cblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKGluZGV4LCAyKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0SGFuZGxlciA9IGZ1bmN0aW9uIChmaWxlKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMikge1xuXHRcdFx0XHRjb25zdCByZWdleCA9IGhhbmRsZXJzW2ldO1xuXHRcdFx0XHRjb25zdCBsb2FkZXIgPSBoYW5kbGVyc1tpICsgMV07XG5cdFx0XHRcdGlmIChyZWdleC5nbG9iYWwpIHJlZ2V4Lmxhc3RJbmRleCA9IDA7IC8vIHNlZSAjMTc5MjBcblxuXHRcdFx0XHRpZiAocmVnZXgudGVzdChmaWxlKSkge1xuXHRcdFx0XHRcdHJldHVybiBsb2FkZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fTtcblx0fVxuXG59XG5cbmNvbnN0IERlZmF1bHRMb2FkaW5nTWFuYWdlciA9IG5ldyBMb2FkaW5nTWFuYWdlcigpO1xuXG5jbGFzcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0dGhpcy5tYW5hZ2VyID0gbWFuYWdlciAhPT0gdW5kZWZpbmVkID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjtcblx0XHR0aGlzLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG5cdFx0dGhpcy53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcblx0XHR0aGlzLnBhdGggPSAnJztcblx0XHR0aGlzLnJlc291cmNlUGF0aCA9ICcnO1xuXHRcdHRoaXMucmVxdWVzdEhlYWRlciA9IHt9O1xuXHR9XG5cblx0bG9hZCgpIHt9XG5cblx0bG9hZEFzeW5jKHVybCwgb25Qcm9ncmVzcykge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0c2NvcGUubG9hZCh1cmwsIHJlc29sdmUsIG9uUHJvZ3Jlc3MsIHJlamVjdCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwYXJzZSgpIHt9XG5cblx0c2V0Q3Jvc3NPcmlnaW4oY3Jvc3NPcmlnaW4pIHtcblx0XHR0aGlzLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRXaXRoQ3JlZGVudGlhbHModmFsdWUpIHtcblx0XHR0aGlzLndpdGhDcmVkZW50aWFscyA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGF0aChwYXRoKSB7XG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFJlc291cmNlUGF0aChyZXNvdXJjZVBhdGgpIHtcblx0XHR0aGlzLnJlc291cmNlUGF0aCA9IHJlc291cmNlUGF0aDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFJlcXVlc3RIZWFkZXIocmVxdWVzdEhlYWRlcikge1xuXHRcdHRoaXMucmVxdWVzdEhlYWRlciA9IHJlcXVlc3RIZWFkZXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jb25zdCBsb2FkaW5nID0ge307XG5cbmNsYXNzIEZpbGVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0aWYgKHVybCA9PT0gdW5kZWZpbmVkKSB1cmwgPSAnJztcblx0XHRpZiAodGhpcy5wYXRoICE9PSB1bmRlZmluZWQpIHVybCA9IHRoaXMucGF0aCArIHVybDtcblx0XHR1cmwgPSB0aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh1cmwpO1xuXHRcdGNvbnN0IGNhY2hlZCA9IENhY2hlLmdldCh1cmwpO1xuXG5cdFx0aWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHVybCk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKG9uTG9hZCkgb25Mb2FkKGNhY2hlZCk7XG5cdFx0XHRcdHRoaXMubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHJldHVybiBjYWNoZWQ7XG5cdFx0fSAvLyBDaGVjayBpZiByZXF1ZXN0IGlzIGR1cGxpY2F0ZVxuXG5cblx0XHRpZiAobG9hZGluZ1t1cmxdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvYWRpbmdbdXJsXS5wdXNoKHtcblx0XHRcdFx0b25Mb2FkOiBvbkxvYWQsXG5cdFx0XHRcdG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdG9uRXJyb3I6IG9uRXJyb3Jcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gLy8gSW5pdGlhbGlzZSBhcnJheSBmb3IgZHVwbGljYXRlIHJlcXVlc3RzXG5cblxuXHRcdGxvYWRpbmdbdXJsXSA9IFtdO1xuXHRcdGxvYWRpbmdbdXJsXS5wdXNoKHtcblx0XHRcdG9uTG9hZDogb25Mb2FkLFxuXHRcdFx0b25Qcm9ncmVzczogb25Qcm9ncmVzcyxcblx0XHRcdG9uRXJyb3I6IG9uRXJyb3Jcblx0XHR9KTsgLy8gY3JlYXRlIHJlcXVlc3RcblxuXHRcdGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KHVybCwge1xuXHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicgLy8gQW4gYWJvcnQgY29udHJvbGxlciBjb3VsZCBiZSBhZGRlZCB3aXRoaW4gYSBmdXR1cmUgUFJcblxuXHRcdH0pOyAvLyByZWNvcmQgc3RhdGVzICggYXZvaWQgZGF0YSByYWNlIClcblxuXHRcdGNvbnN0IG1pbWVUeXBlID0gdGhpcy5taW1lVHlwZTtcblx0XHRjb25zdCByZXNwb25zZVR5cGUgPSB0aGlzLnJlc3BvbnNlVHlwZTsgLy8gc3RhcnQgdGhlIGZldGNoXG5cblx0XHRmZXRjaChyZXEpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIHJldHVybiBIVFRQIFN0YXR1cyAwIHdoZW4gdXNpbmcgbm9uLWh0dHAgcHJvdG9jb2xcblx0XHRcdFx0Ly8gZS5nLiAnZmlsZTovLycgb3IgJ2RhdGE6Ly8nLiBIYW5kbGUgYXMgc3VjY2Vzcy5cblx0XHRcdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICd1bmRlZmluZWQnIHx8IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjYWxsYmFja3MgPSBsb2FkaW5nW3VybF07XG5cdFx0XHRcdGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cdFx0XHRcdGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1MZW5ndGgnKTtcblx0XHRcdFx0Y29uc3QgdG90YWwgPSBjb250ZW50TGVuZ3RoID8gcGFyc2VJbnQoY29udGVudExlbmd0aCkgOiAwO1xuXHRcdFx0XHRjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT09IDA7XG5cdFx0XHRcdGxldCBsb2FkZWQgPSAwOyAvLyBwZXJpb2RpY2FsbHkgcmVhZCBkYXRhIGludG8gdGhlIG5ldyBzdHJlYW0gdHJhY2tpbmcgd2hpbGUgZG93bmxvYWQgcHJvZ3Jlc3NcblxuXHRcdFx0XHRjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuXHRcdFx0XHRcdHN0YXJ0KGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRcdHJlYWREYXRhKCk7XG5cblx0XHRcdFx0XHRcdGZ1bmN0aW9uIHJlYWREYXRhKCkge1xuXHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZCgpLnRoZW4oKHtcblx0XHRcdFx0XHRcdFx0XHRkb25lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdFx0XHRcdH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZG9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsb2FkZWQgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGhDb21wdXRhYmxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsb2FkZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvdGFsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFjay5vblByb2dyZXNzKSBjYWxsYmFjay5vblByb2dyZXNzKGV2ZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlYWREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBuZXcgUmVzcG9uc2Uoc3RyZWFtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IEVycm9yKGBmZXRjaCBmb3IgXCIke3Jlc3BvbnNlLnVybH1cIiByZXNwb25kZWQgd2l0aCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcblx0XHRcdH1cblx0XHR9KS50aGVuKHJlc3BvbnNlID0+IHtcblx0XHRcdHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2FycmF5YnVmZmVyJzpcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcblxuXHRcdFx0XHRjYXNlICdibG9iJzpcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xuXG5cdFx0XHRcdGNhc2UgJ2RvY3VtZW50Jzpcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpLnRoZW4odGV4dCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZXh0LCBtaW1lVHlwZSk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGlmIChtaW1lVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBzbmlmZiBlbmNvZGluZ1xuXHRcdFx0XHRcdFx0Y29uc3QgcmUgPSAvY2hhcnNldD1cIj8oW147XCJcXHNdKilcIj8vaTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4ZWMgPSByZS5leGVjKG1pbWVUeXBlKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZXhlYyAmJiBleGVjWzFdID8gZXhlY1sxXS50b0xvd2VyQ2FzZSgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihsYWJlbCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS50aGVuKGFiID0+IGRlY29kZXIuZGVjb2RlKGFiKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0fSkudGhlbihkYXRhID0+IHtcblx0XHRcdC8vIEFkZCB0byBjYWNoZSBvbmx5IG9uIEhUVFAgc3VjY2Vzcywgc28gdGhhdCB3ZSBkbyBub3QgY2FjaGVcblx0XHRcdC8vIGVycm9yIHJlc3BvbnNlIGJvZGllcyBhcyBwcm9wZXIgcmVzcG9uc2VzIHRvIHJlcXVlc3RzLlxuXHRcdFx0Q2FjaGUuYWRkKHVybCwgZGF0YSk7XG5cdFx0XHRjb25zdCBjYWxsYmFja3MgPSBsb2FkaW5nW3VybF07XG5cdFx0XHRkZWxldGUgbG9hZGluZ1t1cmxdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTtcblx0XHRcdFx0aWYgKGNhbGxiYWNrLm9uTG9hZCkgY2FsbGJhY2sub25Mb2FkKGRhdGEpO1xuXHRcdFx0fVxuXHRcdH0pLmNhdGNoKGVyciA9PiB7XG5cdFx0XHQvLyBBYm9ydCBlcnJvcnMgYW5kIG90aGVyIGVycm9ycyBhcmUgaGFuZGxlZCB0aGUgc2FtZVxuXHRcdFx0Y29uc3QgY2FsbGJhY2tzID0gbG9hZGluZ1t1cmxdO1xuXG5cdFx0XHRpZiAoY2FsbGJhY2tzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gV2hlbiBvbkxvYWQgd2FzIGNhbGxlZCBhbmQgdXJsIHdhcyBkZWxldGVkIGluIGBsb2FkaW5nYFxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHRcdHRocm93IGVycjtcblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIGxvYWRpbmdbdXJsXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07XG5cdFx0XHRcdGlmIChjYWxsYmFjay5vbkVycm9yKSBjYWxsYmFjay5vbkVycm9yKGVycik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHR9KS5maW5hbGx5KCgpID0+IHtcblx0XHRcdHRoaXMubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHR9XG5cblx0c2V0UmVzcG9uc2VUeXBlKHZhbHVlKSB7XG5cdFx0dGhpcy5yZXNwb25zZVR5cGUgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldE1pbWVUeXBlKHZhbHVlKSB7XG5cdFx0dGhpcy5taW1lVHlwZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuY2xhc3MgQW5pbWF0aW9uTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uICh0ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvbkxvYWQoc2NvcGUucGFyc2UoSlNPTi5wYXJzZSh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAob25FcnJvcikge1xuXHRcdFx0XHRcdG9uRXJyb3IoZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHR9XG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdH1cblxuXHRwYXJzZShqc29uKSB7XG5cdFx0Y29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjbGlwID0gQW5pbWF0aW9uQ2xpcC5wYXJzZShqc29uW2ldKTtcblx0XHRcdGFuaW1hdGlvbnMucHVzaChjbGlwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYW5pbWF0aW9ucztcblx0fVxuXG59XG5cbi8qKlxuICogQWJzdHJhY3QgQmFzZSBjbGFzcyB0byBibG9jayBiYXNlZCB0ZXh0dXJlcyBsb2FkZXIgKGRkcywgcHZyLCAuLi4pXG4gKlxuICogU3ViIGNsYXNzZXMgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHBhcnNlKCkgbWV0aG9kIHdoaWNoIHdpbGwgYmUgdXNlZCBpbiBsb2FkKCkuXG4gKi9cblxuY2xhc3MgQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGltYWdlcyA9IFtdO1xuXHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgQ29tcHJlc3NlZFRleHR1cmUoKTtcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlc3BvbnNlVHlwZSgnYXJyYXlidWZmZXInKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoc2NvcGUud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsZXQgbG9hZGVkID0gMDtcblxuXHRcdGZ1bmN0aW9uIGxvYWRUZXh0dXJlKGkpIHtcblx0XHRcdGxvYWRlci5sb2FkKHVybFtpXSwgZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0XHRjb25zdCB0ZXhEYXRhcyA9IHNjb3BlLnBhcnNlKGJ1ZmZlciwgdHJ1ZSk7XG5cdFx0XHRcdGltYWdlc1tpXSA9IHtcblx0XHRcdFx0XHR3aWR0aDogdGV4RGF0YXMud2lkdGgsXG5cdFx0XHRcdFx0aGVpZ2h0OiB0ZXhEYXRhcy5oZWlnaHQsXG5cdFx0XHRcdFx0Zm9ybWF0OiB0ZXhEYXRhcy5mb3JtYXQsXG5cdFx0XHRcdFx0bWlwbWFwczogdGV4RGF0YXMubWlwbWFwc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRsb2FkZWQgKz0gMTtcblxuXHRcdFx0XHRpZiAobG9hZGVkID09PSA2KSB7XG5cdFx0XHRcdFx0aWYgKHRleERhdGFzLm1pcG1hcENvdW50ID09PSAxKSB0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlID0gaW1hZ2VzO1xuXHRcdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0O1xuXHRcdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZCh0ZXh0dXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodXJsKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gdXJsLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcblx0XHRcdFx0bG9hZFRleHR1cmUoaSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGNvbXByZXNzZWQgY3ViZW1hcCB0ZXh0dXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBERFMgZmlsZVxuXHRcdFx0bG9hZGVyLmxvYWQodXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRcdGNvbnN0IHRleERhdGFzID0gc2NvcGUucGFyc2UoYnVmZmVyLCB0cnVlKTtcblxuXHRcdFx0XHRpZiAodGV4RGF0YXMuaXNDdWJlbWFwKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmFjZXMgPSB0ZXhEYXRhcy5taXBtYXBzLmxlbmd0aCAvIHRleERhdGFzLm1pcG1hcENvdW50O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgZiA9IDA7IGYgPCBmYWNlczsgZisrKSB7XG5cdFx0XHRcdFx0XHRpbWFnZXNbZl0gPSB7XG5cdFx0XHRcdFx0XHRcdG1pcG1hcHM6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRleERhdGFzLm1pcG1hcENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ZdLm1pcG1hcHMucHVzaCh0ZXhEYXRhcy5taXBtYXBzW2YgKiB0ZXhEYXRhcy5taXBtYXBDb3VudCArIGldKTtcblx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ZdLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDtcblx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ZdLndpZHRoID0gdGV4RGF0YXMud2lkdGg7XG5cdFx0XHRcdFx0XHRcdGltYWdlc1tmXS5oZWlnaHQgPSB0ZXhEYXRhcy5oZWlnaHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGV4dHVyZS5pbWFnZSA9IGltYWdlcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlLndpZHRoID0gdGV4RGF0YXMud2lkdGg7XG5cdFx0XHRcdFx0dGV4dHVyZS5pbWFnZS5oZWlnaHQgPSB0ZXhEYXRhcy5oZWlnaHQ7XG5cdFx0XHRcdFx0dGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YXMubWlwbWFwcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0ZXhEYXRhcy5taXBtYXBDb3VudCA9PT0gMSkge1xuXHRcdFx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7XG5cdFx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRpZiAob25Mb2FkKSBvbkxvYWQodGV4dHVyZSk7XG5cdFx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG59XG5cbmNsYXNzIEltYWdlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGlmICh0aGlzLnBhdGggIT09IHVuZGVmaW5lZCkgdXJsID0gdGhpcy5wYXRoICsgdXJsO1xuXHRcdHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHVybCk7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGNhY2hlZCA9IENhY2hlLmdldCh1cmwpO1xuXG5cdFx0aWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZChjYWNoZWQpO1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0cmV0dXJuIGNhY2hlZDtcblx0XHR9XG5cblx0XHRjb25zdCBpbWFnZSA9IGNyZWF0ZUVsZW1lbnROUygnaW1nJyk7XG5cblx0XHRmdW5jdGlvbiBvbkltYWdlTG9hZCgpIHtcblx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG5cdFx0XHRDYWNoZS5hZGQodXJsLCB0aGlzKTtcblx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZCh0aGlzKTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCh1cmwpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uSW1hZ2VFcnJvcihldmVudCkge1xuXHRcdFx0cmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblx0XHRcdGlmIChvbkVycm9yKSBvbkVycm9yKGV2ZW50KTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycygpIHtcblx0XHRcdGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkltYWdlTG9hZCwgZmFsc2UpO1xuXHRcdFx0aW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkltYWdlRXJyb3IsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRpbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25JbWFnZUxvYWQsIGZhbHNlKTtcblx0XHRpbWFnZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uSW1hZ2VFcnJvciwgZmFsc2UpO1xuXG5cdFx0aWYgKHVybC5zdWJzdHIoMCwgNSkgIT09ICdkYXRhOicpIHtcblx0XHRcdGlmICh0aGlzLmNyb3NzT3JpZ2luICE9PSB1bmRlZmluZWQpIGltYWdlLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcblx0XHR9XG5cblx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHRcdGltYWdlLnNyYyA9IHVybDtcblx0XHRyZXR1cm4gaW1hZ2U7XG5cdH1cblxufVxuXG5jbGFzcyBDdWJlVGV4dHVyZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0fVxuXG5cdGxvYWQodXJscywgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtcblx0XHRsb2FkZXIuc2V0UGF0aCh0aGlzLnBhdGgpO1xuXHRcdGxldCBsb2FkZWQgPSAwO1xuXG5cdFx0ZnVuY3Rpb24gbG9hZFRleHR1cmUoaSkge1xuXHRcdFx0bG9hZGVyLmxvYWQodXJsc1tpXSwgZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdHRleHR1cmUuaW1hZ2VzW2ldID0gaW1hZ2U7XG5cdFx0XHRcdGxvYWRlZCsrO1xuXG5cdFx0XHRcdGlmIChsb2FkZWQgPT09IDYpIHtcblx0XHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAob25Mb2FkKSBvbkxvYWQodGV4dHVyZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHVuZGVmaW5lZCwgb25FcnJvcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRsb2FkVGV4dHVyZShpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG59XG5cbi8qKlxuICogQWJzdHJhY3QgQmFzZSBjbGFzcyB0byBsb2FkIGdlbmVyaWMgYmluYXJ5IHRleHR1cmVzIGZvcm1hdHMgKHJnYmUsIGhkciwgLi4uKVxuICpcbiAqIFN1YiBjbGFzc2VzIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBwYXJzZSgpIG1ldGhvZCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gbG9hZCgpLlxuICovXG5cbmNsYXNzIERhdGFUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCB0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKCk7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIodGhpcy5tYW5hZ2VyKTtcblx0XHRsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCdhcnJheWJ1ZmZlcicpO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcik7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKHNjb3BlLndpdGhDcmVkZW50aWFscyk7XG5cdFx0bG9hZGVyLmxvYWQodXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRjb25zdCB0ZXhEYXRhID0gc2NvcGUucGFyc2UoYnVmZmVyKTtcblx0XHRcdGlmICghdGV4RGF0YSkgcmV0dXJuO1xuXG5cdFx0XHRpZiAodGV4RGF0YS5pbWFnZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmUuaW1hZ2UgPSB0ZXhEYXRhLmltYWdlO1xuXHRcdFx0fSBlbHNlIGlmICh0ZXhEYXRhLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLndpZHRoID0gdGV4RGF0YS53aWR0aDtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZS5oZWlnaHQgPSB0ZXhEYXRhLmhlaWdodDtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZS5kYXRhID0gdGV4RGF0YS5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlLndyYXBTID0gdGV4RGF0YS53cmFwUyAhPT0gdW5kZWZpbmVkID8gdGV4RGF0YS53cmFwUyA6IENsYW1wVG9FZGdlV3JhcHBpbmc7XG5cdFx0XHR0ZXh0dXJlLndyYXBUID0gdGV4RGF0YS53cmFwVCAhPT0gdW5kZWZpbmVkID8gdGV4RGF0YS53cmFwVCA6IENsYW1wVG9FZGdlV3JhcHBpbmc7XG5cdFx0XHR0ZXh0dXJlLm1hZ0ZpbHRlciA9IHRleERhdGEubWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLm1hZ0ZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gdGV4RGF0YS5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IHRleERhdGEubWluRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXHRcdFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gdGV4RGF0YS5hbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLmFuaXNvdHJvcHkgOiAxO1xuXG5cdFx0XHRpZiAodGV4RGF0YS5lbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmUuZW5jb2RpbmcgPSB0ZXhEYXRhLmVuY29kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS5mbGlwWSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRleHR1cmUuZmxpcFkgPSB0ZXhEYXRhLmZsaXBZO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS5mb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGEuZm9ybWF0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS50eXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS50eXBlID0gdGV4RGF0YS50eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS5taXBtYXBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YS5taXBtYXBzO1xuXHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhck1pcG1hcExpbmVhckZpbHRlcjsgLy8gcHJlc3VtYWJseS4uLlxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4RGF0YS5taXBtYXBDb3VudCA9PT0gMSkge1xuXHRcdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRleERhdGEuZ2VuZXJhdGVNaXBtYXBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSB0ZXhEYXRhLmdlbmVyYXRlTWlwbWFwcztcblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRpZiAob25Mb2FkKSBvbkxvYWQodGV4dHVyZSwgdGV4RGF0YSk7XG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cdH1cblxufVxuXG5jbGFzcyBUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZSgpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtcblx0XHRsb2FkZXIuc2V0UGF0aCh0aGlzLnBhdGgpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHR0ZXh0dXJlLmltYWdlID0gaW1hZ2U7XG5cdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG9uTG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG9uTG9hZCh0ZXh0dXJlKTtcblx0XHRcdH1cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG59XG5cbmNsYXNzIExpZ2h0IGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5ID0gMSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ0xpZ2h0Jztcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKGNvbG9yKTtcblx0XHR0aGlzLmludGVuc2l0eSA9IGludGVuc2l0eTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7Ly8gRW1wdHkgaGVyZSBpbiBiYXNlIGNsYXNzOyBzb21lIHN1YmNsYXNzZXMgb3ZlcnJpZGUuXG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmNvbG9yLmNvcHkoc291cmNlLmNvbG9yKTtcblx0XHR0aGlzLmludGVuc2l0eSA9IHNvdXJjZS5pbnRlbnNpdHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0b0pTT04obWV0YSkge1xuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04obWV0YSk7XG5cdFx0ZGF0YS5vYmplY3QuY29sb3IgPSB0aGlzLmNvbG9yLmdldEhleCgpO1xuXHRcdGRhdGEub2JqZWN0LmludGVuc2l0eSA9IHRoaXMuaW50ZW5zaXR5O1xuXHRcdGlmICh0aGlzLmdyb3VuZENvbG9yICE9PSB1bmRlZmluZWQpIGRhdGEub2JqZWN0Lmdyb3VuZENvbG9yID0gdGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKTtcblx0XHRpZiAodGhpcy5kaXN0YW5jZSAhPT0gdW5kZWZpbmVkKSBkYXRhLm9iamVjdC5kaXN0YW5jZSA9IHRoaXMuZGlzdGFuY2U7XG5cdFx0aWYgKHRoaXMuYW5nbGUgIT09IHVuZGVmaW5lZCkgZGF0YS5vYmplY3QuYW5nbGUgPSB0aGlzLmFuZ2xlO1xuXHRcdGlmICh0aGlzLmRlY2F5ICE9PSB1bmRlZmluZWQpIGRhdGEub2JqZWN0LmRlY2F5ID0gdGhpcy5kZWNheTtcblx0XHRpZiAodGhpcy5wZW51bWJyYSAhPT0gdW5kZWZpbmVkKSBkYXRhLm9iamVjdC5wZW51bWJyYSA9IHRoaXMucGVudW1icmE7XG5cdFx0aWYgKHRoaXMuc2hhZG93ICE9PSB1bmRlZmluZWQpIGRhdGEub2JqZWN0LnNoYWRvdyA9IHRoaXMuc2hhZG93LnRvSlNPTigpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn1cblxuTGlnaHQucHJvdG90eXBlLmlzTGlnaHQgPSB0cnVlO1xuXG5jbGFzcyBIZW1pc3BoZXJlTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKHNreUNvbG9yLCBncm91bmRDb2xvciwgaW50ZW5zaXR5KSB7XG5cdFx0c3VwZXIoc2t5Q29sb3IsIGludGVuc2l0eSk7XG5cdFx0dGhpcy50eXBlID0gJ0hlbWlzcGhlcmVMaWdodCc7XG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KE9iamVjdDNELkRlZmF1bHRVcCk7XG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLmdyb3VuZENvbG9yID0gbmV3IENvbG9yKGdyb3VuZENvbG9yKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0TGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLCBzb3VyY2UpO1xuXHRcdHRoaXMuZ3JvdW5kQ29sb3IuY29weShzb3VyY2UuZ3JvdW5kQ29sb3IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuSGVtaXNwaGVyZUxpZ2h0LnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodCA9IHRydWU7XG5cbmNvbnN0IF9wcm9qU2NyZWVuTWF0cml4JDEgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2xpZ2h0UG9zaXRpb25Xb3JsZCQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9sb29rVGFyZ2V0JDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTGlnaHRTaGFkb3cge1xuXHRjb25zdHJ1Y3RvcihjYW1lcmEpIHtcblx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0XHR0aGlzLmJpYXMgPSAwO1xuXHRcdHRoaXMubm9ybWFsQmlhcyA9IDA7XG5cdFx0dGhpcy5yYWRpdXMgPSAxO1xuXHRcdHRoaXMuYmx1clNhbXBsZXMgPSA4O1xuXHRcdHRoaXMubWFwU2l6ZSA9IG5ldyBWZWN0b3IyKDUxMiwgNTEyKTtcblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5tYXBQYXNzID0gbnVsbDtcblx0XHR0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcblx0XHR0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5fZnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XG5cdFx0dGhpcy5fZnJhbWVFeHRlbnRzID0gbmV3IFZlY3RvcjIoMSwgMSk7XG5cdFx0dGhpcy5fdmlld3BvcnRDb3VudCA9IDE7XG5cdFx0dGhpcy5fdmlld3BvcnRzID0gW25ldyBWZWN0b3I0KDAsIDAsIDEsIDEpXTtcblx0fVxuXG5cdGdldFZpZXdwb3J0Q291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnQ7XG5cdH1cblxuXHRnZXRGcnVzdHVtKCkge1xuXHRcdHJldHVybiB0aGlzLl9mcnVzdHVtO1xuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMobGlnaHQpIHtcblx0XHRjb25zdCBzaGFkb3dDYW1lcmEgPSB0aGlzLmNhbWVyYTtcblx0XHRjb25zdCBzaGFkb3dNYXRyaXggPSB0aGlzLm1hdHJpeDtcblxuXHRcdF9saWdodFBvc2l0aW9uV29ybGQkMS5zZXRGcm9tTWF0cml4UG9zaXRpb24obGlnaHQubWF0cml4V29ybGQpO1xuXG5cdFx0c2hhZG93Q2FtZXJhLnBvc2l0aW9uLmNvcHkoX2xpZ2h0UG9zaXRpb25Xb3JsZCQxKTtcblxuXHRcdF9sb29rVGFyZ2V0JDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7XG5cblx0XHRzaGFkb3dDYW1lcmEubG9va0F0KF9sb29rVGFyZ2V0JDEpO1xuXHRcdHNoYWRvd0NhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0X3Byb2pTY3JlZW5NYXRyaXgkMS5tdWx0aXBseU1hdHJpY2VzKHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBzaGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblxuXHRcdHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoX3Byb2pTY3JlZW5NYXRyaXgkMSk7XG5cblx0XHRzaGFkb3dNYXRyaXguc2V0KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5cdFx0c2hhZG93TWF0cml4Lm11bHRpcGx5KHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcblx0XHRzaGFkb3dNYXRyaXgubXVsdGlwbHkoc2hhZG93Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdH1cblxuXHRnZXRWaWV3cG9ydCh2aWV3cG9ydEluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t2aWV3cG9ydEluZGV4XTtcblx0fVxuXG5cdGdldEZyYW1lRXh0ZW50cygpIHtcblx0XHRyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5tYXApIHtcblx0XHRcdHRoaXMubWFwLmRpc3Bvc2UoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5tYXBQYXNzKSB7XG5cdFx0XHR0aGlzLm1hcFBhc3MuZGlzcG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0dGhpcy5jYW1lcmEgPSBzb3VyY2UuY2FtZXJhLmNsb25lKCk7XG5cdFx0dGhpcy5iaWFzID0gc291cmNlLmJpYXM7XG5cdFx0dGhpcy5yYWRpdXMgPSBzb3VyY2UucmFkaXVzO1xuXHRcdHRoaXMubWFwU2l6ZS5jb3B5KHNvdXJjZS5tYXBTaXplKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3Qgb2JqZWN0ID0ge307XG5cdFx0aWYgKHRoaXMuYmlhcyAhPT0gMCkgb2JqZWN0LmJpYXMgPSB0aGlzLmJpYXM7XG5cdFx0aWYgKHRoaXMubm9ybWFsQmlhcyAhPT0gMCkgb2JqZWN0Lm5vcm1hbEJpYXMgPSB0aGlzLm5vcm1hbEJpYXM7XG5cdFx0aWYgKHRoaXMucmFkaXVzICE9PSAxKSBvYmplY3QucmFkaXVzID0gdGhpcy5yYWRpdXM7XG5cdFx0aWYgKHRoaXMubWFwU2l6ZS54ICE9PSA1MTIgfHwgdGhpcy5tYXBTaXplLnkgIT09IDUxMikgb2JqZWN0Lm1hcFNpemUgPSB0aGlzLm1hcFNpemUudG9BcnJheSgpO1xuXHRcdG9iamVjdC5jYW1lcmEgPSB0aGlzLmNhbWVyYS50b0pTT04oZmFsc2UpLm9iamVjdDtcblx0XHRkZWxldGUgb2JqZWN0LmNhbWVyYS5tYXRyaXg7XG5cdFx0cmV0dXJuIG9iamVjdDtcblx0fVxuXG59XG5cbmNsYXNzIFNwb3RMaWdodFNoYWRvdyBleHRlbmRzIExpZ2h0U2hhZG93IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIobmV3IFBlcnNwZWN0aXZlQ2FtZXJhKDUwLCAxLCAwLjUsIDUwMCkpO1xuXHRcdHRoaXMuZm9jdXMgPSAxO1xuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMobGlnaHQpIHtcblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcblx0XHRjb25zdCBmb3YgPSBSQUQyREVHICogMiAqIGxpZ2h0LmFuZ2xlICogdGhpcy5mb2N1cztcblx0XHRjb25zdCBhc3BlY3QgPSB0aGlzLm1hcFNpemUud2lkdGggLyB0aGlzLm1hcFNpemUuaGVpZ2h0O1xuXHRcdGNvbnN0IGZhciA9IGxpZ2h0LmRpc3RhbmNlIHx8IGNhbWVyYS5mYXI7XG5cblx0XHRpZiAoZm92ICE9PSBjYW1lcmEuZm92IHx8IGFzcGVjdCAhPT0gY2FtZXJhLmFzcGVjdCB8fCBmYXIgIT09IGNhbWVyYS5mYXIpIHtcblx0XHRcdGNhbWVyYS5mb3YgPSBmb3Y7XG5cdFx0XHRjYW1lcmEuYXNwZWN0ID0gYXNwZWN0O1xuXHRcdFx0Y2FtZXJhLmZhciA9IGZhcjtcblx0XHRcdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0fVxuXG5cdFx0c3VwZXIudXBkYXRlTWF0cmljZXMobGlnaHQpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1cztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cblNwb3RMaWdodFNoYWRvdy5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3cgPSB0cnVlO1xuXG5jbGFzcyBTcG90TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlID0gMCwgYW5nbGUgPSBNYXRoLlBJIC8gMywgcGVudW1icmEgPSAwLCBkZWNheSA9IDEpIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnU3BvdExpZ2h0Jztcblx0XHR0aGlzLnBvc2l0aW9uLmNvcHkoT2JqZWN0M0QuRGVmYXVsdFVwKTtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMudGFyZ2V0ID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0dGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdHRoaXMuYW5nbGUgPSBhbmdsZTtcblx0XHR0aGlzLnBlbnVtYnJhID0gcGVudW1icmE7XG5cdFx0dGhpcy5kZWNheSA9IGRlY2F5OyAvLyBmb3IgcGh5c2ljYWxseSBjb3JyZWN0IGxpZ2h0cywgc2hvdWxkIGJlIDIuXG5cblx0XHR0aGlzLnNoYWRvdyA9IG5ldyBTcG90TGlnaHRTaGFkb3coKTtcblx0fVxuXG5cdGdldCBwb3dlcigpIHtcblx0XHQvLyBjb21wdXRlIHRoZSBsaWdodCdzIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpIGZyb20gaXRzIGludGVuc2l0eSAoaW4gY2FuZGVsYSlcblx0XHQvLyBieSBjb252ZW50aW9uIGZvciBhIHNwb3RsaWdodCwgbHVtaW5vdXMgcG93ZXIgKGxtKSA9IM+AICogbHVtaW5vdXMgaW50ZW5zaXR5IChjZClcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnNpdHkgKiBNYXRoLlBJO1xuXHR9XG5cblx0c2V0IHBvd2VyKHBvd2VyKSB7XG5cdFx0Ly8gc2V0IHRoZSBsaWdodCdzIGludGVuc2l0eSAoaW4gY2FuZGVsYSkgZnJvbSB0aGUgZGVzaXJlZCBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKVxuXHRcdHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyBNYXRoLlBJO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLnNoYWRvdy5kaXNwb3NlKCk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmRpc3RhbmNlID0gc291cmNlLmRpc3RhbmNlO1xuXHRcdHRoaXMuYW5nbGUgPSBzb3VyY2UuYW5nbGU7XG5cdFx0dGhpcy5wZW51bWJyYSA9IHNvdXJjZS5wZW51bWJyYTtcblx0XHR0aGlzLmRlY2F5ID0gc291cmNlLmRlY2F5O1xuXHRcdHRoaXMudGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgpO1xuXHRcdHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuU3BvdExpZ2h0LnByb3RvdHlwZS5pc1Nwb3RMaWdodCA9IHRydWU7XG5cbmNvbnN0IF9wcm9qU2NyZWVuTWF0cml4ID0gLypAX19QVVJFX18qL25ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9saWdodFBvc2l0aW9uV29ybGQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2xvb2tUYXJnZXQgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgUG9pbnRMaWdodFNoYWRvdyBleHRlbmRzIExpZ2h0U2hhZG93IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIobmV3IFBlcnNwZWN0aXZlQ2FtZXJhKDkwLCAxLCAwLjUsIDUwMCkpO1xuXHRcdHRoaXMuX2ZyYW1lRXh0ZW50cyA9IG5ldyBWZWN0b3IyKDQsIDIpO1xuXHRcdHRoaXMuX3ZpZXdwb3J0Q291bnQgPSA2O1xuXHRcdHRoaXMuX3ZpZXdwb3J0cyA9IFsvLyBUaGVzZSB2aWV3cG9ydHMgbWFwIGEgY3ViZS1tYXAgb250byBhIDJEIHRleHR1cmUgd2l0aCB0aGVcblx0XHQvLyBmb2xsb3dpbmcgb3JpZW50YXRpb246XG5cdFx0Ly9cblx0XHQvL1x0eHpYWlxuXHRcdC8vXHQgeSBZXG5cdFx0Ly9cblx0XHQvLyBYIC0gUG9zaXRpdmUgeCBkaXJlY3Rpb25cblx0XHQvLyB4IC0gTmVnYXRpdmUgeCBkaXJlY3Rpb25cblx0XHQvLyBZIC0gUG9zaXRpdmUgeSBkaXJlY3Rpb25cblx0XHQvLyB5IC0gTmVnYXRpdmUgeSBkaXJlY3Rpb25cblx0XHQvLyBaIC0gUG9zaXRpdmUgeiBkaXJlY3Rpb25cblx0XHQvLyB6IC0gTmVnYXRpdmUgeiBkaXJlY3Rpb25cblx0XHQvLyBwb3NpdGl2ZSBYXG5cdFx0bmV3IFZlY3RvcjQoMiwgMSwgMSwgMSksIC8vIG5lZ2F0aXZlIFhcblx0XHRuZXcgVmVjdG9yNCgwLCAxLCAxLCAxKSwgLy8gcG9zaXRpdmUgWlxuXHRcdG5ldyBWZWN0b3I0KDMsIDEsIDEsIDEpLCAvLyBuZWdhdGl2ZSBaXG5cdFx0bmV3IFZlY3RvcjQoMSwgMSwgMSwgMSksIC8vIHBvc2l0aXZlIFlcblx0XHRuZXcgVmVjdG9yNCgzLCAwLCAxLCAxKSwgLy8gbmVnYXRpdmUgWVxuXHRcdG5ldyBWZWN0b3I0KDEsIDAsIDEsIDEpXTtcblx0XHR0aGlzLl9jdWJlRGlyZWN0aW9ucyA9IFtuZXcgVmVjdG9yMygxLCAwLCAwKSwgbmV3IFZlY3RvcjMoLTEsIDAsIDApLCBuZXcgVmVjdG9yMygwLCAwLCAxKSwgbmV3IFZlY3RvcjMoMCwgMCwgLTEpLCBuZXcgVmVjdG9yMygwLCAxLCAwKSwgbmV3IFZlY3RvcjMoMCwgLTEsIDApXTtcblx0XHR0aGlzLl9jdWJlVXBzID0gW25ldyBWZWN0b3IzKDAsIDEsIDApLCBuZXcgVmVjdG9yMygwLCAxLCAwKSwgbmV3IFZlY3RvcjMoMCwgMSwgMCksIG5ldyBWZWN0b3IzKDAsIDEsIDApLCBuZXcgVmVjdG9yMygwLCAwLCAxKSwgbmV3IFZlY3RvcjMoMCwgMCwgLTEpXTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKGxpZ2h0LCB2aWV3cG9ydEluZGV4ID0gMCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhO1xuXHRcdGNvbnN0IHNoYWRvd01hdHJpeCA9IHRoaXMubWF0cml4O1xuXHRcdGNvbnN0IGZhciA9IGxpZ2h0LmRpc3RhbmNlIHx8IGNhbWVyYS5mYXI7XG5cblx0XHRpZiAoZmFyICE9PSBjYW1lcmEuZmFyKSB7XG5cdFx0XHRjYW1lcmEuZmFyID0gZmFyO1xuXHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHR9XG5cblx0XHRfbGlnaHRQb3NpdGlvbldvcmxkLnNldEZyb21NYXRyaXhQb3NpdGlvbihsaWdodC5tYXRyaXhXb3JsZCk7XG5cblx0XHRjYW1lcmEucG9zaXRpb24uY29weShfbGlnaHRQb3NpdGlvbldvcmxkKTtcblxuXHRcdF9sb29rVGFyZ2V0LmNvcHkoY2FtZXJhLnBvc2l0aW9uKTtcblxuXHRcdF9sb29rVGFyZ2V0LmFkZCh0aGlzLl9jdWJlRGlyZWN0aW9uc1t2aWV3cG9ydEluZGV4XSk7XG5cblx0XHRjYW1lcmEudXAuY29weSh0aGlzLl9jdWJlVXBzW3ZpZXdwb3J0SW5kZXhdKTtcblx0XHRjYW1lcmEubG9va0F0KF9sb29rVGFyZ2V0KTtcblx0XHRjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRzaGFkb3dNYXRyaXgubWFrZVRyYW5zbGF0aW9uKC1fbGlnaHRQb3NpdGlvbldvcmxkLngsIC1fbGlnaHRQb3NpdGlvbldvcmxkLnksIC1fbGlnaHRQb3NpdGlvbldvcmxkLnopO1xuXG5cdFx0X3Byb2pTY3JlZW5NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cblx0XHR0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KF9wcm9qU2NyZWVuTWF0cml4KTtcblx0fVxuXG59XG5cblBvaW50TGlnaHRTaGFkb3cucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdyA9IHRydWU7XG5cbmNsYXNzIFBvaW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlID0gMCwgZGVjYXkgPSAxKSB7XG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XG5cdFx0dGhpcy50eXBlID0gJ1BvaW50TGlnaHQnO1xuXHRcdHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHR0aGlzLmRlY2F5ID0gZGVjYXk7IC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi5cblxuXHRcdHRoaXMuc2hhZG93ID0gbmV3IFBvaW50TGlnaHRTaGFkb3coKTtcblx0fVxuXG5cdGdldCBwb3dlcigpIHtcblx0XHQvLyBjb21wdXRlIHRoZSBsaWdodCdzIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpIGZyb20gaXRzIGludGVuc2l0eSAoaW4gY2FuZGVsYSlcblx0XHQvLyBmb3IgYW4gaXNvdHJvcGljIGxpZ2h0IHNvdXJjZSwgbHVtaW5vdXMgcG93ZXIgKGxtKSA9IDQgz4AgbHVtaW5vdXMgaW50ZW5zaXR5IChjZClcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnNpdHkgKiA0ICogTWF0aC5QSTtcblx0fVxuXG5cdHNldCBwb3dlcihwb3dlcikge1xuXHRcdC8vIHNldCB0aGUgbGlnaHQncyBpbnRlbnNpdHkgKGluIGNhbmRlbGEpIGZyb20gdGhlIGRlc2lyZWQgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucylcblx0XHR0aGlzLmludGVuc2l0eSA9IHBvd2VyIC8gKDQgKiBNYXRoLlBJKTtcblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5zaGFkb3cuZGlzcG9zZSgpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSk7XG5cdFx0dGhpcy5kaXN0YW5jZSA9IHNvdXJjZS5kaXN0YW5jZTtcblx0XHR0aGlzLmRlY2F5ID0gc291cmNlLmRlY2F5O1xuXHRcdHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuUG9pbnRMaWdodC5wcm90b3R5cGUuaXNQb2ludExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBleHRlbmRzIExpZ2h0U2hhZG93IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIobmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSgtNSwgNSwgNSwgLTUsIDAuNSwgNTAwKSk7XG5cdH1cblxufVxuXG5EaXJlY3Rpb25hbExpZ2h0U2hhZG93LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSB0cnVlO1xuXG5jbGFzcyBEaXJlY3Rpb25hbExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5KSB7XG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XG5cdFx0dGhpcy50eXBlID0gJ0RpcmVjdGlvbmFsTGlnaHQnO1xuXHRcdHRoaXMucG9zaXRpb24uY29weShPYmplY3QzRC5EZWZhdWx0VXApO1xuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XG5cdFx0dGhpcy50YXJnZXQgPSBuZXcgT2JqZWN0M0QoKTtcblx0XHR0aGlzLnNoYWRvdyA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCk7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuc2hhZG93LmRpc3Bvc2UoKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMudGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgpO1xuXHRcdHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgQW1iaWVudExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5KSB7XG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XG5cdFx0dGhpcy50eXBlID0gJ0FtYmllbnRMaWdodCc7XG5cdH1cblxufVxuXG5BbWJpZW50TGlnaHQucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgUmVjdEFyZWFMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3IoY29sb3IsIGludGVuc2l0eSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTApIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLnR5cGUgPSAnUmVjdEFyZWFMaWdodCc7XG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHR9XG5cblx0Z2V0IHBvd2VyKCkge1xuXHRcdC8vIGNvbXB1dGUgdGhlIGxpZ2h0J3MgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucykgZnJvbSBpdHMgaW50ZW5zaXR5IChpbiBuaXRzKVxuXHRcdHJldHVybiB0aGlzLmludGVuc2l0eSAqIHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIE1hdGguUEk7XG5cdH1cblxuXHRzZXQgcG93ZXIocG93ZXIpIHtcblx0XHQvLyBzZXQgdGhlIGxpZ2h0J3MgaW50ZW5zaXR5IChpbiBuaXRzKSBmcm9tIHRoZSBkZXNpcmVkIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpXG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBwb3dlciAvICh0aGlzLndpZHRoICogdGhpcy5oZWlnaHQgKiBNYXRoLlBJKTtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGRhdGEub2JqZWN0LndpZHRoID0gdGhpcy53aWR0aDtcblx0XHRkYXRhLm9iamVjdC5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cblJlY3RBcmVhTGlnaHQucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodCA9IHRydWU7XG5cbi8qKlxuICogUHJpbWFyeSByZWZlcmVuY2U6XG4gKlx0IGh0dHBzOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L3BhcGVycy9lbnZtYXAvZW52bWFwLnBkZlxuICpcbiAqIFNlY29uZGFyeSByZWZlcmVuY2U6XG4gKlx0IGh0dHBzOi8vd3d3LnBwc2xvYW4ub3JnL3B1YmxpY2F0aW9ucy9TdHVwaWRTSDM2LnBkZlxuICovXG4vLyAzLWJhbmQgU0ggZGVmaW5lZCBieSA5IGNvZWZmaWNpZW50c1xuXG5jbGFzcyBTcGhlcmljYWxIYXJtb25pY3MzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb2VmZmljaWVudHMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBWZWN0b3IzKCkpO1xuXHRcdH1cblx0fVxuXG5cdHNldChjb2VmZmljaWVudHMpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbaV0uY29weShjb2VmZmljaWVudHNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0emVybygpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbaV0uc2V0KDAsIDAsIDApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIGdldCB0aGUgcmFkaWFuY2UgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsXG5cdC8vIHRhcmdldCBpcyBhIFZlY3RvcjNcblxuXG5cdGdldEF0KG5vcm1hbCwgdGFyZ2V0KSB7XG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGhcblx0XHRjb25zdCB4ID0gbm9ybWFsLngsXG5cdFx0XHRcdFx0eSA9IG5vcm1hbC55LFxuXHRcdFx0XHRcdHogPSBub3JtYWwuejtcblx0XHRjb25zdCBjb2VmZiA9IHRoaXMuY29lZmZpY2llbnRzOyAvLyBiYW5kIDBcblxuXHRcdHRhcmdldC5jb3B5KGNvZWZmWzBdKS5tdWx0aXBseVNjYWxhcigwLjI4MjA5NSk7IC8vIGJhbmQgMVxuXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZlsxXSwgMC40ODg2MDMgKiB5KTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzJdLCAwLjQ4ODYwMyAqIHopO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbM10sIDAuNDg4NjAzICogeCk7IC8vIGJhbmQgMlxuXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls0XSwgMS4wOTI1NDggKiAoeCAqIHkpKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzVdLCAxLjA5MjU0OCAqICh5ICogeikpO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbNl0sIDAuMzE1MzkyICogKDMuMCAqIHogKiB6IC0gMS4wKSk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls3XSwgMS4wOTI1NDggKiAoeCAqIHopKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzhdLCAwLjU0NjI3NCAqICh4ICogeCAtIHkgKiB5KSk7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fSAvLyBnZXQgdGhlIGlycmFkaWFuY2UgKHJhZGlhbmNlIGNvbnZvbHZlZCB3aXRoIGNvc2luZSBsb2JlKSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBub3JtYWxcblx0Ly8gdGFyZ2V0IGlzIGEgVmVjdG9yM1xuXHQvLyBodHRwczovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9wYXBlcnMvZW52bWFwL2Vudm1hcC5wZGZcblxuXG5cdGdldElycmFkaWFuY2VBdChub3JtYWwsIHRhcmdldCkge1xuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoXG5cdFx0Y29uc3QgeCA9IG5vcm1hbC54LFxuXHRcdFx0XHRcdHkgPSBub3JtYWwueSxcblx0XHRcdFx0XHR6ID0gbm9ybWFsLno7XG5cdFx0Y29uc3QgY29lZmYgPSB0aGlzLmNvZWZmaWNpZW50czsgLy8gYmFuZCAwXG5cblx0XHR0YXJnZXQuY29weShjb2VmZlswXSkubXVsdGlwbHlTY2FsYXIoMC44ODYyMjcpOyAvLyDPgCAqIDAuMjgyMDk1XG5cdFx0Ly8gYmFuZCAxXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzFdLCAyLjAgKiAwLjUxMTY2NCAqIHkpOyAvLyAoIDIgKiDPgCAvIDMgKSAqIDAuNDg4NjAzXG5cblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKGNvZWZmWzJdLCAyLjAgKiAwLjUxMTY2NCAqIHopO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoY29lZmZbM10sIDIuMCAqIDAuNTExNjY0ICogeCk7IC8vIGJhbmQgMlxuXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls0XSwgMi4wICogMC40MjkwNDMgKiB4ICogeSk7IC8vICggz4AgLyA0ICkgKiAxLjA5MjU0OFxuXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls1XSwgMi4wICogMC40MjkwNDMgKiB5ICogeik7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls2XSwgMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4KTsgLy8gKCDPgCAvIDQgKSAqIDAuMzE1MzkyICogM1xuXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls3XSwgMi4wICogMC40MjkwNDMgKiB4ICogeik7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcihjb2VmZls4XSwgMC40MjkwNDMgKiAoeCAqIHggLSB5ICogeSkpOyAvLyAoIM+AIC8gNCApICogMC41NDYyNzRcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRhZGQoc2gpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbaV0uYWRkKHNoLmNvZWZmaWNpZW50c1tpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhZGRTY2FsZWRTSChzaCwgcykge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGRTY2FsZWRWZWN0b3Ioc2guY29lZmZpY2llbnRzW2ldLCBzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNjYWxlKHMpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbaV0ubXVsdGlwbHlTY2FsYXIocyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRsZXJwKHNoLCBhbHBoYSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1tpXS5sZXJwKHNoLmNvZWZmaWNpZW50c1tpXSwgYWxwaGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKHNoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdGlmICghdGhpcy5jb2VmZmljaWVudHNbaV0uZXF1YWxzKHNoLmNvZWZmaWNpZW50c1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weShzaCkge1xuXHRcdHJldHVybiB0aGlzLnNldChzaC5jb2VmZmljaWVudHMpO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGZyb21BcnJheShhcnJheSwgb2Zmc2V0ID0gMCkge1xuXHRcdGNvbnN0IGNvZWZmaWNpZW50cyA9IHRoaXMuY29lZmZpY2llbnRzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdGNvZWZmaWNpZW50c1tpXS5mcm9tQXJyYXkoYXJyYXksIG9mZnNldCArIGkgKiAzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvQXJyYXkoYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCkge1xuXHRcdGNvbnN0IGNvZWZmaWNpZW50cyA9IHRoaXMuY29lZmZpY2llbnRzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcblx0XHRcdGNvZWZmaWNpZW50c1tpXS50b0FycmF5KGFycmF5LCBvZmZzZXQgKyBpICogMyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9IC8vIGV2YWx1YXRlIHRoZSBiYXNpcyBmdW5jdGlvbnNcblx0Ly8gc2hCYXNpcyBpcyBhbiBBcnJheVsgOSBdXG5cblxuXHRzdGF0aWMgZ2V0QmFzaXNBdChub3JtYWwsIHNoQmFzaXMpIHtcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aFxuXHRcdGNvbnN0IHggPSBub3JtYWwueCxcblx0XHRcdFx0XHR5ID0gbm9ybWFsLnksXG5cdFx0XHRcdFx0eiA9IG5vcm1hbC56OyAvLyBiYW5kIDBcblxuXHRcdHNoQmFzaXNbMF0gPSAwLjI4MjA5NTsgLy8gYmFuZCAxXG5cblx0XHRzaEJhc2lzWzFdID0gMC40ODg2MDMgKiB5O1xuXHRcdHNoQmFzaXNbMl0gPSAwLjQ4ODYwMyAqIHo7XG5cdFx0c2hCYXNpc1szXSA9IDAuNDg4NjAzICogeDsgLy8gYmFuZCAyXG5cblx0XHRzaEJhc2lzWzRdID0gMS4wOTI1NDggKiB4ICogeTtcblx0XHRzaEJhc2lzWzVdID0gMS4wOTI1NDggKiB5ICogejtcblx0XHRzaEJhc2lzWzZdID0gMC4zMTUzOTIgKiAoMyAqIHogKiB6IC0gMSk7XG5cdFx0c2hCYXNpc1s3XSA9IDEuMDkyNTQ4ICogeCAqIHo7XG5cdFx0c2hCYXNpc1s4XSA9IDAuNTQ2Mjc0ICogKHggKiB4IC0geSAqIHkpO1xuXHR9XG5cbn1cblxuU3BoZXJpY2FsSGFybW9uaWNzMy5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzID0gdHJ1ZTtcblxuY2xhc3MgTGlnaHRQcm9iZSBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3Ioc2ggPSBuZXcgU3BoZXJpY2FsSGFybW9uaWNzMygpLCBpbnRlbnNpdHkgPSAxKSB7XG5cdFx0c3VwZXIodW5kZWZpbmVkLCBpbnRlbnNpdHkpO1xuXHRcdHRoaXMuc2ggPSBzaDtcblx0fVxuXG5cdGNvcHkoc291cmNlKSB7XG5cdFx0c3VwZXIuY29weShzb3VyY2UpO1xuXHRcdHRoaXMuc2guY29weShzb3VyY2Uuc2gpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZnJvbUpTT04oanNvbikge1xuXHRcdHRoaXMuaW50ZW5zaXR5ID0ganNvbi5pbnRlbnNpdHk7IC8vIFRPRE86IE1vdmUgdGhpcyBiaXQgdG8gTGlnaHQuZnJvbUpTT04oKTtcblxuXHRcdHRoaXMuc2guZnJvbUFycmF5KGpzb24uc2gpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OKG1ldGEpIHtcblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKG1ldGEpO1xuXHRcdGRhdGEub2JqZWN0LnNoID0gdGhpcy5zaC50b0FycmF5KCk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxufVxuXG5MaWdodFByb2JlLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmUgPSB0cnVlO1xuXG5jbGFzcyBNYXRlcmlhbExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0XHR0aGlzLnRleHR1cmVzID0ge307XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHNjb3BlLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHNjb3BlLnBhdGgpO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKHNjb3BlLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoc2NvcGUud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uICh0ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvbkxvYWQoc2NvcGUucGFyc2UoSlNPTi5wYXJzZSh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAob25FcnJvcikge1xuXHRcdFx0XHRcdG9uRXJyb3IoZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHR9XG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdH1cblxuXHRwYXJzZShqc29uKSB7XG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB0aGlzLnRleHR1cmVzO1xuXG5cdFx0ZnVuY3Rpb24gZ2V0VGV4dHVyZShuYW1lKSB7XG5cdFx0XHRpZiAodGV4dHVyZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIG5hbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGV4dHVyZXNbbmFtZV07XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWxzW2pzb24udHlwZV0oKTtcblx0XHRpZiAoanNvbi51dWlkICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnV1aWQgPSBqc29uLnV1aWQ7XG5cdFx0aWYgKGpzb24ubmFtZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5uYW1lID0ganNvbi5uYW1lO1xuXHRcdGlmIChqc29uLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuY29sb3IgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuY29sb3Iuc2V0SGV4KGpzb24uY29sb3IpO1xuXHRcdGlmIChqc29uLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5yb3VnaG5lc3MgPSBqc29uLnJvdWdobmVzcztcblx0XHRpZiAoanNvbi5tZXRhbG5lc3MgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubWV0YWxuZXNzID0ganNvbi5tZXRhbG5lc3M7XG5cdFx0aWYgKGpzb24uc2hlZW4gIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2hlZW4gPSBqc29uLnNoZWVuO1xuXHRcdGlmIChqc29uLnNoZWVuQ29sb3IgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2hlZW5Db2xvciA9IG5ldyBDb2xvcigpLnNldEhleChqc29uLnNoZWVuQ29sb3IpO1xuXHRcdGlmIChqc29uLnNoZWVuUm91Z2huZXNzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0ganNvbi5zaGVlblJvdWdobmVzcztcblx0XHRpZiAoanNvbi5lbWlzc2l2ZSAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLmVtaXNzaXZlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmVtaXNzaXZlLnNldEhleChqc29uLmVtaXNzaXZlKTtcblx0XHRpZiAoanNvbi5zcGVjdWxhciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnNwZWN1bGFyICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNwZWN1bGFyLnNldEhleChqc29uLnNwZWN1bGFyKTtcblx0XHRpZiAoanNvbi5zcGVjdWxhckludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eSA9IGpzb24uc3BlY3VsYXJJbnRlbnNpdHk7XG5cdFx0aWYgKGpzb24uc3BlY3VsYXJDb2xvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvci5zZXRIZXgoanNvbi5zcGVjdWxhckNvbG9yKTtcblx0XHRpZiAoanNvbi5zaGluaW5lc3MgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2hpbmluZXNzID0ganNvbi5zaGluaW5lc3M7XG5cdFx0aWYgKGpzb24uY2xlYXJjb2F0ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNsZWFyY29hdCA9IGpzb24uY2xlYXJjb2F0O1xuXHRcdGlmIChqc29uLmNsZWFyY29hdFJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBqc29uLmNsZWFyY29hdFJvdWdobmVzcztcblx0XHRpZiAoanNvbi50cmFuc21pc3Npb24gIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudHJhbnNtaXNzaW9uID0ganNvbi50cmFuc21pc3Npb247XG5cdFx0aWYgKGpzb24udGhpY2tuZXNzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnRoaWNrbmVzcyA9IGpzb24udGhpY2tuZXNzO1xuXHRcdGlmIChqc29uLmF0dGVudWF0aW9uRGlzdGFuY2UgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZSA9IGpzb24uYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRpZiAoanNvbi5hdHRlbnVhdGlvbkNvbG9yICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yLnNldEhleChqc29uLmF0dGVudWF0aW9uQ29sb3IpO1xuXHRcdGlmIChqc29uLmZvZyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5mb2cgPSBqc29uLmZvZztcblx0XHRpZiAoanNvbi5mbGF0U2hhZGluZyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24uZmxhdFNoYWRpbmc7XG5cdFx0aWYgKGpzb24uYmxlbmRpbmcgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYmxlbmRpbmcgPSBqc29uLmJsZW5kaW5nO1xuXHRcdGlmIChqc29uLmNvbWJpbmUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuY29tYmluZSA9IGpzb24uY29tYmluZTtcblx0XHRpZiAoanNvbi5zaWRlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNpZGUgPSBqc29uLnNpZGU7XG5cdFx0aWYgKGpzb24uc2hhZG93U2lkZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaGFkb3dTaWRlID0ganNvbi5zaGFkb3dTaWRlO1xuXHRcdGlmIChqc29uLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwub3BhY2l0eSA9IGpzb24ub3BhY2l0eTtcblx0XHRpZiAoanNvbi50cmFuc3BhcmVudCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC50cmFuc3BhcmVudCA9IGpzb24udHJhbnNwYXJlbnQ7XG5cdFx0aWYgKGpzb24uYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmFscGhhVGVzdCA9IGpzb24uYWxwaGFUZXN0O1xuXHRcdGlmIChqc29uLmRlcHRoVGVzdCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kZXB0aFRlc3QgPSBqc29uLmRlcHRoVGVzdDtcblx0XHRpZiAoanNvbi5kZXB0aFdyaXRlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmRlcHRoV3JpdGUgPSBqc29uLmRlcHRoV3JpdGU7XG5cdFx0aWYgKGpzb24uY29sb3JXcml0ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jb2xvcldyaXRlID0ganNvbi5jb2xvcldyaXRlO1xuXHRcdGlmIChqc29uLmFscGhhV3JpdGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYWxwaGFXcml0ZSA9IGpzb24uYWxwaGFXcml0ZTtcblx0XHRpZiAoanNvbi5zdGVuY2lsV3JpdGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbFdyaXRlID0ganNvbi5zdGVuY2lsV3JpdGU7XG5cdFx0aWYgKGpzb24uc3RlbmNpbFdyaXRlTWFzayAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zdGVuY2lsV3JpdGVNYXNrID0ganNvbi5zdGVuY2lsV3JpdGVNYXNrO1xuXHRcdGlmIChqc29uLnN0ZW5jaWxGdW5jICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxGdW5jID0ganNvbi5zdGVuY2lsRnVuYztcblx0XHRpZiAoanNvbi5zdGVuY2lsUmVmICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxSZWYgPSBqc29uLnN0ZW5jaWxSZWY7XG5cdFx0aWYgKGpzb24uc3RlbmNpbEZ1bmNNYXNrICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxGdW5jTWFzayA9IGpzb24uc3RlbmNpbEZ1bmNNYXNrO1xuXHRcdGlmIChqc29uLnN0ZW5jaWxGYWlsICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxGYWlsID0ganNvbi5zdGVuY2lsRmFpbDtcblx0XHRpZiAoanNvbi5zdGVuY2lsWkZhaWwgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3RlbmNpbFpGYWlsID0ganNvbi5zdGVuY2lsWkZhaWw7XG5cdFx0aWYgKGpzb24uc3RlbmNpbFpQYXNzICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnN0ZW5jaWxaUGFzcyA9IGpzb24uc3RlbmNpbFpQYXNzO1xuXHRcdGlmIChqc29uLndpcmVmcmFtZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC53aXJlZnJhbWUgPSBqc29uLndpcmVmcmFtZTtcblx0XHRpZiAoanNvbi53aXJlZnJhbWVMaW5ld2lkdGggIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoID0ganNvbi53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0aWYgKGpzb24ud2lyZWZyYW1lTGluZWNhcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwID0ganNvbi53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdGlmIChqc29uLndpcmVmcmFtZUxpbmVqb2luICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luID0ganNvbi53aXJlZnJhbWVMaW5lam9pbjtcblx0XHRpZiAoanNvbi5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5yb3RhdGlvbiA9IGpzb24ucm90YXRpb247XG5cdFx0aWYgKGpzb24ubGluZXdpZHRoICE9PSAxKSBtYXRlcmlhbC5saW5ld2lkdGggPSBqc29uLmxpbmV3aWR0aDtcblx0XHRpZiAoanNvbi5kYXNoU2l6ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kYXNoU2l6ZSA9IGpzb24uZGFzaFNpemU7XG5cdFx0aWYgKGpzb24uZ2FwU2l6ZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5nYXBTaXplID0ganNvbi5nYXBTaXplO1xuXHRcdGlmIChqc29uLnNjYWxlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNjYWxlID0ganNvbi5zY2FsZTtcblx0XHRpZiAoanNvbi5wb2x5Z29uT2Zmc2V0ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnBvbHlnb25PZmZzZXQgPSBqc29uLnBvbHlnb25PZmZzZXQ7XG5cdFx0aWYgKGpzb24ucG9seWdvbk9mZnNldEZhY3RvciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yID0ganNvbi5wb2x5Z29uT2Zmc2V0RmFjdG9yO1xuXHRcdGlmIChqc29uLnBvbHlnb25PZmZzZXRVbml0cyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0VW5pdHMgPSBqc29uLnBvbHlnb25PZmZzZXRVbml0cztcblx0XHRpZiAoanNvbi5kaXRoZXJpbmcgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZGl0aGVyaW5nID0ganNvbi5kaXRoZXJpbmc7XG5cdFx0aWYgKGpzb24uYWxwaGFUb0NvdmVyYWdlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmFscGhhVG9Db3ZlcmFnZSA9IGpzb24uYWxwaGFUb0NvdmVyYWdlO1xuXHRcdGlmIChqc29uLnByZW11bHRpcGxpZWRBbHBoYSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEgPSBqc29uLnByZW11bHRpcGxpZWRBbHBoYTtcblx0XHRpZiAoanNvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnZpc2libGUgPSBqc29uLnZpc2libGU7XG5cdFx0aWYgKGpzb24udG9uZU1hcHBlZCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC50b25lTWFwcGVkID0ganNvbi50b25lTWFwcGVkO1xuXHRcdGlmIChqc29uLnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnVzZXJEYXRhID0ganNvbi51c2VyRGF0YTtcblxuXHRcdGlmIChqc29uLnZlcnRleENvbG9ycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIGpzb24udmVydGV4Q29sb3JzID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSBqc29uLnZlcnRleENvbG9ycyA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSBqc29uLnZlcnRleENvbG9ycztcblx0XHRcdH1cblx0XHR9IC8vIFNoYWRlciBNYXRlcmlhbFxuXG5cblx0XHRpZiAoanNvbi51bmlmb3JtcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5hbWUgaW4ganNvbi51bmlmb3Jtcykge1xuXHRcdFx0XHRjb25zdCB1bmlmb3JtID0ganNvbi51bmlmb3Jtc1tuYW1lXTtcblx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbbmFtZV0gPSB7fTtcblxuXHRcdFx0XHRzd2l0Y2ggKHVuaWZvcm0udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3QnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbbmFtZV0udmFsdWUgPSBnZXRUZXh0dXJlKHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdjJzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zW25hbWVdLnZhbHVlID0gbmV3IENvbG9yKCkuc2V0SGV4KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICd2Mic6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICd2Myc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICd2NCc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdtMyc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IG5ldyBNYXRyaXgzKCkuZnJvbUFycmF5KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdtNCc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1tuYW1lXS52YWx1ZSA9IG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KHVuaWZvcm0udmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbbmFtZV0udmFsdWUgPSB1bmlmb3JtLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGpzb24uZGVmaW5lcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kZWZpbmVzID0ganNvbi5kZWZpbmVzO1xuXHRcdGlmIChqc29uLnZlcnRleFNoYWRlciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC52ZXJ0ZXhTaGFkZXIgPSBqc29uLnZlcnRleFNoYWRlcjtcblx0XHRpZiAoanNvbi5mcmFnbWVudFNoYWRlciAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5mcmFnbWVudFNoYWRlciA9IGpzb24uZnJhZ21lbnRTaGFkZXI7XG5cblx0XHRpZiAoanNvbi5leHRlbnNpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGpzb24uZXh0ZW5zaW9ucykge1xuXHRcdFx0XHRtYXRlcmlhbC5leHRlbnNpb25zW2tleV0gPSBqc29uLmV4dGVuc2lvbnNba2V5XTtcblx0XHRcdH1cblx0XHR9IC8vIERlcHJlY2F0ZWRcblxuXG5cdFx0aWYgKGpzb24uc2hhZGluZyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24uc2hhZGluZyA9PT0gMTsgLy8gVEhSRUUuRmxhdFNoYWRpbmdcblx0XHQvLyBmb3IgUG9pbnRzTWF0ZXJpYWxcblxuXHRcdGlmIChqc29uLnNpemUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2l6ZSA9IGpzb24uc2l6ZTtcblx0XHRpZiAoanNvbi5zaXplQXR0ZW51YXRpb24gIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uID0ganNvbi5zaXplQXR0ZW51YXRpb247IC8vIG1hcHNcblxuXHRcdGlmIChqc29uLm1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5tYXAgPSBnZXRUZXh0dXJlKGpzb24ubWFwKTtcblx0XHRpZiAoanNvbi5tYXRjYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubWF0Y2FwID0gZ2V0VGV4dHVyZShqc29uLm1hdGNhcCk7XG5cdFx0aWYgKGpzb24uYWxwaGFNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYWxwaGFNYXAgPSBnZXRUZXh0dXJlKGpzb24uYWxwaGFNYXApO1xuXHRcdGlmIChqc29uLmJ1bXBNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYnVtcE1hcCA9IGdldFRleHR1cmUoanNvbi5idW1wTWFwKTtcblx0XHRpZiAoanNvbi5idW1wU2NhbGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYnVtcFNjYWxlID0ganNvbi5idW1wU2NhbGU7XG5cdFx0aWYgKGpzb24ubm9ybWFsTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGdldFRleHR1cmUoanNvbi5ub3JtYWxNYXApO1xuXHRcdGlmIChqc29uLm5vcm1hbE1hcFR5cGUgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubm9ybWFsTWFwVHlwZSA9IGpzb24ubm9ybWFsTWFwVHlwZTtcblxuXHRcdGlmIChqc29uLm5vcm1hbFNjYWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBub3JtYWxTY2FsZSA9IGpzb24ubm9ybWFsU2NhbGU7XG5cblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG5vcm1hbFNjYWxlKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Ly8gQmxlbmRlciBleHBvcnRlciB1c2VkIHRvIGV4cG9ydCBhIHNjYWxhci4gU2VlICM3NDU5XG5cdFx0XHRcdG5vcm1hbFNjYWxlID0gW25vcm1hbFNjYWxlLCBub3JtYWxTY2FsZV07XG5cdFx0XHR9XG5cblx0XHRcdG1hdGVyaWFsLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkobm9ybWFsU2NhbGUpO1xuXHRcdH1cblxuXHRcdGlmIChqc29uLmRpc3BsYWNlbWVudE1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgPSBnZXRUZXh0dXJlKGpzb24uZGlzcGxhY2VtZW50TWFwKTtcblx0XHRpZiAoanNvbi5kaXNwbGFjZW1lbnRTY2FsZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZSA9IGpzb24uZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0aWYgKGpzb24uZGlzcGxhY2VtZW50QmlhcyAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzID0ganNvbi5kaXNwbGFjZW1lbnRCaWFzO1xuXHRcdGlmIChqc29uLnJvdWdobmVzc01hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgPSBnZXRUZXh0dXJlKGpzb24ucm91Z2huZXNzTWFwKTtcblx0XHRpZiAoanNvbi5tZXRhbG5lc3NNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubWV0YWxuZXNzTWFwID0gZ2V0VGV4dHVyZShqc29uLm1ldGFsbmVzc01hcCk7XG5cdFx0aWYgKGpzb24uZW1pc3NpdmVNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZW1pc3NpdmVNYXAgPSBnZXRUZXh0dXJlKGpzb24uZW1pc3NpdmVNYXApO1xuXHRcdGlmIChqc29uLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5ID0ganNvbi5lbWlzc2l2ZUludGVuc2l0eTtcblx0XHRpZiAoanNvbi5zcGVjdWxhck1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zcGVjdWxhck1hcCA9IGdldFRleHR1cmUoanNvbi5zcGVjdWxhck1hcCk7XG5cdFx0aWYgKGpzb24uc3BlY3VsYXJJbnRlbnNpdHlNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSBnZXRUZXh0dXJlKGpzb24uc3BlY3VsYXJJbnRlbnNpdHlNYXApO1xuXHRcdGlmIChqc29uLnNwZWN1bGFyQ29sb3JNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCA9IGdldFRleHR1cmUoanNvbi5zcGVjdWxhckNvbG9yTWFwKTtcblx0XHRpZiAoanNvbi5lbnZNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuZW52TWFwID0gZ2V0VGV4dHVyZShqc29uLmVudk1hcCk7XG5cdFx0aWYgKGpzb24uZW52TWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA9IGpzb24uZW52TWFwSW50ZW5zaXR5O1xuXHRcdGlmIChqc29uLnJlZmxlY3Rpdml0eSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5yZWZsZWN0aXZpdHkgPSBqc29uLnJlZmxlY3Rpdml0eTtcblx0XHRpZiAoanNvbi5yZWZyYWN0aW9uUmF0aW8gIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvID0ganNvbi5yZWZyYWN0aW9uUmF0aW87XG5cdFx0aWYgKGpzb24ubGlnaHRNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwubGlnaHRNYXAgPSBnZXRUZXh0dXJlKGpzb24ubGlnaHRNYXApO1xuXHRcdGlmIChqc29uLmxpZ2h0TWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmxpZ2h0TWFwSW50ZW5zaXR5ID0ganNvbi5saWdodE1hcEludGVuc2l0eTtcblx0XHRpZiAoanNvbi5hb01hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5hb01hcCA9IGdldFRleHR1cmUoanNvbi5hb01hcCk7XG5cdFx0aWYgKGpzb24uYW9NYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuYW9NYXBJbnRlbnNpdHkgPSBqc29uLmFvTWFwSW50ZW5zaXR5O1xuXHRcdGlmIChqc29uLmdyYWRpZW50TWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmdyYWRpZW50TWFwID0gZ2V0VGV4dHVyZShqc29uLmdyYWRpZW50TWFwKTtcblx0XHRpZiAoanNvbi5jbGVhcmNvYXRNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwuY2xlYXJjb2F0TWFwID0gZ2V0VGV4dHVyZShqc29uLmNsZWFyY29hdE1hcCk7XG5cdFx0aWYgKGpzb24uY2xlYXJjb2F0Um91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IGdldFRleHR1cmUoanNvbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXApO1xuXHRcdGlmIChqc29uLmNsZWFyY29hdE5vcm1hbE1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAgPSBnZXRUZXh0dXJlKGpzb24uY2xlYXJjb2F0Tm9ybWFsTWFwKTtcblx0XHRpZiAoanNvbi5jbGVhcmNvYXROb3JtYWxTY2FsZSAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KGpzb24uY2xlYXJjb2F0Tm9ybWFsU2NhbGUpO1xuXHRcdGlmIChqc29uLnRyYW5zbWlzc2lvbk1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgPSBnZXRUZXh0dXJlKGpzb24udHJhbnNtaXNzaW9uTWFwKTtcblx0XHRpZiAoanNvbi50aGlja25lc3NNYXAgIT09IHVuZGVmaW5lZCkgbWF0ZXJpYWwudGhpY2tuZXNzTWFwID0gZ2V0VGV4dHVyZShqc29uLnRoaWNrbmVzc01hcCk7XG5cdFx0aWYgKGpzb24uc2hlZW5Db2xvck1hcCAhPT0gdW5kZWZpbmVkKSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwID0gZ2V0VGV4dHVyZShqc29uLnNoZWVuQ29sb3JNYXApO1xuXHRcdGlmIChqc29uLnNoZWVuUm91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQpIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwID0gZ2V0VGV4dHVyZShqc29uLnNoZWVuUm91Z2huZXNzTWFwKTtcblx0XHRyZXR1cm4gbWF0ZXJpYWw7XG5cdH1cblxuXHRzZXRUZXh0dXJlcyh2YWx1ZSkge1xuXHRcdHRoaXMudGV4dHVyZXMgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59XG5cbmNsYXNzIExvYWRlclV0aWxzIHtcblx0c3RhdGljIGRlY29kZVRleHQoYXJyYXkpIHtcblx0XHRpZiAodHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShhcnJheSk7XG5cdFx0fSAvLyBBdm9pZCB0aGUgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnJheSkgc2hvcnRjdXQsIHdoaWNoXG5cdFx0Ly8gdGhyb3dzIGEgXCJtYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiIGVycm9yIGZvciBsYXJnZSBhcnJheXMuXG5cblxuXHRcdGxldCBzID0gJyc7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBhcnJheS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHQvLyBJbXBsaWNpdGx5IGFzc3VtZXMgbGl0dGxlLWVuZGlhbi5cblx0XHRcdHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIG1lcmdlcyBtdWx0aS1ieXRlIHV0Zi04IGNoYXJhY3RlcnMuXG5cdFx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gc2VlICMxNjM1OFxuXHRcdFx0cmV0dXJuIHM7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGV4dHJhY3RVcmxCYXNlKHVybCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuICcuLyc7XG5cdFx0cmV0dXJuIHVybC5zdWJzdHIoMCwgaW5kZXggKyAxKTtcblx0fVxuXG5cdHN0YXRpYyByZXNvbHZlVVJMKHVybCwgcGF0aCkge1xuXHRcdC8vIEludmFsaWQgVVJMXG5cdFx0aWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnIHx8IHVybCA9PT0gJycpIHJldHVybiAnJzsgLy8gSG9zdCBSZWxhdGl2ZSBVUkxcblxuXHRcdGlmICgvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHBhdGgpICYmIC9eXFwvLy50ZXN0KHVybCkpIHtcblx0XHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoLyheaHR0cHM/OlxcL1xcL1teXFwvXSspLiovaSwgJyQxJyk7XG5cdFx0fSAvLyBBYnNvbHV0ZSBVUkwgaHR0cDovLyxodHRwczovLywvL1xuXG5cblx0XHRpZiAoL14oaHR0cHM/Oik/XFwvXFwvL2kudGVzdCh1cmwpKSByZXR1cm4gdXJsOyAvLyBEYXRhIFVSSVxuXG5cdFx0aWYgKC9eZGF0YTouKiwuKiQvaS50ZXN0KHVybCkpIHJldHVybiB1cmw7IC8vIEJsb2IgVVJMXG5cblx0XHRpZiAoL15ibG9iOi4qJC9pLnRlc3QodXJsKSkgcmV0dXJuIHVybDsgLy8gUmVsYXRpdmUgVVJMXG5cblx0XHRyZXR1cm4gcGF0aCArIHVybDtcblx0fVxuXG59XG5cbmNsYXNzIEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSc7XG5cdFx0dGhpcy5pbnN0YW5jZUNvdW50ID0gSW5maW5pdHk7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLmluc3RhbmNlQ291bnQgPSBzb3VyY2UuaW5zdGFuY2VDb3VudDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxuXHR0b0pTT04oKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTih0aGlzKTtcblx0XHRkYXRhLmluc3RhbmNlQ291bnQgPSB0aGlzLmluc3RhbmNlQ291bnQ7XG5cdFx0ZGF0YS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID0gdHJ1ZTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59XG5cbkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID0gdHJ1ZTtcblxuY2xhc3MgQnVmZmVyR2VvbWV0cnlMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXHRjb25zdHJ1Y3RvcihtYW5hZ2VyKSB7XG5cdFx0c3VwZXIobWFuYWdlcik7XG5cdH1cblxuXHRsb2FkKHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yKSB7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKHNjb3BlLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHNjb3BlLnBhdGgpO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKHNjb3BlLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoc2NvcGUud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uICh0ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvbkxvYWQoc2NvcGUucGFyc2UoSlNPTi5wYXJzZSh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAob25FcnJvcikge1xuXHRcdFx0XHRcdG9uRXJyb3IoZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHR9XG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdH1cblxuXHRwYXJzZShqc29uKSB7XG5cdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXJNYXAgPSB7fTtcblx0XHRjb25zdCBhcnJheUJ1ZmZlck1hcCA9IHt9O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0SW50ZXJsZWF2ZWRCdWZmZXIoanNvbiwgdXVpZCkge1xuXHRcdFx0aWYgKGludGVybGVhdmVkQnVmZmVyTWFwW3V1aWRdICE9PSB1bmRlZmluZWQpIHJldHVybiBpbnRlcmxlYXZlZEJ1ZmZlck1hcFt1dWlkXTtcblx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVycyA9IGpzb24uaW50ZXJsZWF2ZWRCdWZmZXJzO1xuXHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXIgPSBpbnRlcmxlYXZlZEJ1ZmZlcnNbdXVpZF07XG5cdFx0XHRjb25zdCBidWZmZXIgPSBnZXRBcnJheUJ1ZmZlcihqc29uLCBpbnRlcmxlYXZlZEJ1ZmZlci5idWZmZXIpO1xuXHRcdFx0Y29uc3QgYXJyYXkgPSBnZXRUeXBlZEFycmF5KGludGVybGVhdmVkQnVmZmVyLnR5cGUsIGJ1ZmZlcik7XG5cdFx0XHRjb25zdCBpYiA9IG5ldyBJbnRlcmxlYXZlZEJ1ZmZlcihhcnJheSwgaW50ZXJsZWF2ZWRCdWZmZXIuc3RyaWRlKTtcblx0XHRcdGliLnV1aWQgPSBpbnRlcmxlYXZlZEJ1ZmZlci51dWlkO1xuXHRcdFx0aW50ZXJsZWF2ZWRCdWZmZXJNYXBbdXVpZF0gPSBpYjtcblx0XHRcdHJldHVybiBpYjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRBcnJheUJ1ZmZlcihqc29uLCB1dWlkKSB7XG5cdFx0XHRpZiAoYXJyYXlCdWZmZXJNYXBbdXVpZF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFycmF5QnVmZmVyTWFwW3V1aWRdO1xuXHRcdFx0Y29uc3QgYXJyYXlCdWZmZXJzID0ganNvbi5hcnJheUJ1ZmZlcnM7XG5cdFx0XHRjb25zdCBhcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyc1t1dWlkXTtcblx0XHRcdGNvbnN0IGFiID0gbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyKS5idWZmZXI7XG5cdFx0XHRhcnJheUJ1ZmZlck1hcFt1dWlkXSA9IGFiO1xuXHRcdFx0cmV0dXJuIGFiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0ganNvbi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID8gbmV3IEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KCkgOiBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCBpbmRleCA9IGpzb24uZGF0YS5pbmRleDtcblxuXHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB0eXBlZEFycmF5ID0gZ2V0VHlwZWRBcnJheShpbmRleC50eXBlLCBpbmRleC5hcnJheSk7XG5cdFx0XHRnZW9tZXRyeS5zZXRJbmRleChuZXcgQnVmZmVyQXR0cmlidXRlKHR5cGVkQXJyYXksIDEpKTtcblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0ganNvbi5kYXRhLmF0dHJpYnV0ZXM7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHRsZXQgYnVmZmVyQXR0cmlidXRlO1xuXG5cdFx0XHRpZiAoYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpIHtcblx0XHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXIgPSBnZXRJbnRlcmxlYXZlZEJ1ZmZlcihqc29uLmRhdGEsIGF0dHJpYnV0ZS5kYXRhKTtcblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKGludGVybGVhdmVkQnVmZmVyLCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5vZmZzZXQsIGF0dHJpYnV0ZS5ub3JtYWxpemVkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHR5cGVkQXJyYXkgPSBnZXRUeXBlZEFycmF5KGF0dHJpYnV0ZS50eXBlLCBhdHRyaWJ1dGUuYXJyYXkpO1xuXHRcdFx0XHRjb25zdCBidWZmZXJBdHRyaWJ1dGVDb25zdHIgPSBhdHRyaWJ1dGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgOiBCdWZmZXJBdHRyaWJ1dGU7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBidWZmZXJBdHRyaWJ1dGVDb25zdHIodHlwZWRBcnJheSwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUubm9ybWFsaXplZCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhdHRyaWJ1dGUubmFtZSAhPT0gdW5kZWZpbmVkKSBidWZmZXJBdHRyaWJ1dGUubmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0aWYgKGF0dHJpYnV0ZS51c2FnZSAhPT0gdW5kZWZpbmVkKSBidWZmZXJBdHRyaWJ1dGUuc2V0VXNhZ2UoYXR0cmlidXRlLnVzYWdlKTtcblxuXHRcdFx0aWYgKGF0dHJpYnV0ZS51cGRhdGVSYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZS51cGRhdGVSYW5nZS5vZmZzZXQgPSBhdHRyaWJ1dGUudXBkYXRlUmFuZ2Uub2Zmc2V0O1xuXHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUudXBkYXRlUmFuZ2UuY291bnQgPSBhdHRyaWJ1dGUudXBkYXRlUmFuZ2UuY291bnQ7XG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZShrZXksIGJ1ZmZlckF0dHJpYnV0ZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0ganNvbi5kYXRhLm1vcnBoQXR0cmlidXRlcztcblxuXHRcdGlmIChtb3JwaEF0dHJpYnV0ZXMpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1vcnBoQXR0cmlidXRlcykge1xuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheSA9IG1vcnBoQXR0cmlidXRlc1trZXldO1xuXHRcdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGF0dHJpYnV0ZUFycmF5Lmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBcnJheVtpXTtcblx0XHRcdFx0XHRsZXQgYnVmZmVyQXR0cmlidXRlO1xuXG5cdFx0XHRcdFx0aWYgKGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IGdldEludGVybGVhdmVkQnVmZmVyKGpzb24uZGF0YSwgYXR0cmlidXRlLmRhdGEpO1xuXHRcdFx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKGludGVybGVhdmVkQnVmZmVyLCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5vZmZzZXQsIGF0dHJpYnV0ZS5ub3JtYWxpemVkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgdHlwZWRBcnJheSA9IGdldFR5cGVkQXJyYXkoYXR0cmlidXRlLnR5cGUsIGF0dHJpYnV0ZS5hcnJheSk7XG5cdFx0XHRcdFx0XHRidWZmZXJBdHRyaWJ1dGUgPSBuZXcgQnVmZmVyQXR0cmlidXRlKHR5cGVkQXJyYXksIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm5vcm1hbGl6ZWQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChhdHRyaWJ1dGUubmFtZSAhPT0gdW5kZWZpbmVkKSBidWZmZXJBdHRyaWJ1dGUubmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRcdGFycmF5LnB1c2goYnVmZmVyQXR0cmlidXRlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlc1trZXldID0gYXJyYXk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBqc29uLmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cblx0XHRpZiAobW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcblx0XHRcdGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBncm91cHMgPSBqc29uLmRhdGEuZ3JvdXBzIHx8IGpzb24uZGF0YS5kcmF3Y2FsbHMgfHwganNvbi5kYXRhLm9mZnNldHM7XG5cblx0XHRpZiAoZ3JvdXBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gZ3JvdXBzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdFx0XHRnZW9tZXRyeS5hZGRHcm91cChncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGJvdW5kaW5nU3BoZXJlID0ganNvbi5kYXRhLmJvdW5kaW5nU3BoZXJlO1xuXG5cdFx0aWYgKGJvdW5kaW5nU3BoZXJlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGNlbnRlciA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGlmIChib3VuZGluZ1NwaGVyZS5jZW50ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjZW50ZXIuZnJvbUFycmF5KGJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID0gbmV3IFNwaGVyZShjZW50ZXIsIGJvdW5kaW5nU3BoZXJlLnJhZGl1cyk7XG5cdFx0fVxuXG5cdFx0aWYgKGpzb24ubmFtZSkgZ2VvbWV0cnkubmFtZSA9IGpzb24ubmFtZTtcblx0XHRpZiAoanNvbi51c2VyRGF0YSkgZ2VvbWV0cnkudXNlckRhdGEgPSBqc29uLnVzZXJEYXRhO1xuXHRcdHJldHVybiBnZW9tZXRyeTtcblx0fVxuXG59XG5cbmNsYXNzIE9iamVjdExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgcGF0aCA9IHRoaXMucGF0aCA9PT0gJycgPyBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSh1cmwpIDogdGhpcy5wYXRoO1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGggfHwgcGF0aDtcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKTtcblx0XHRsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uICh0ZXh0KSB7XG5cdFx0XHRsZXQganNvbiA9IG51bGw7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKG9uRXJyb3IgIT09IHVuZGVmaW5lZCkgb25FcnJvcihlcnJvcik7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFOk9iamVjdExvYWRlcjogQ2FuXFwndCBwYXJzZSAnICsgdXJsICsgJy4nLCBlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtZXRhZGF0YSA9IGpzb24ubWV0YWRhdGE7XG5cblx0XHRcdGlmIChtZXRhZGF0YSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdnZW9tZXRyeScpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW5cXCd0IGxvYWQgJyArIHVybCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2NvcGUucGFyc2UoanNvbiwgb25Mb2FkKTtcblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRBc3luYyh1cmwsIG9uUHJvZ3Jlc3MpIHtcblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cdFx0Y29uc3QgcGF0aCA9IHRoaXMucGF0aCA9PT0gJycgPyBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSh1cmwpIDogdGhpcy5wYXRoO1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGggfHwgcGF0aDtcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRQYXRoKHRoaXMucGF0aCk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKTtcblx0XHRjb25zdCB0ZXh0ID0gYXdhaXQgbG9hZGVyLmxvYWRBc3luYyh1cmwsIG9uUHJvZ3Jlc3MpO1xuXHRcdGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xuXHRcdGNvbnN0IG1ldGFkYXRhID0ganNvbi5tZXRhZGF0YTtcblxuXHRcdGlmIChtZXRhZGF0YSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdnZW9tZXRyeScpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW5cXCd0IGxvYWQgJyArIHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGF3YWl0IHNjb3BlLnBhcnNlQXN5bmMoanNvbik7XG5cdH1cblxuXHRwYXJzZShqc29uLCBvbkxvYWQpIHtcblx0XHRjb25zdCBhbmltYXRpb25zID0gdGhpcy5wYXJzZUFuaW1hdGlvbnMoanNvbi5hbmltYXRpb25zKTtcblx0XHRjb25zdCBzaGFwZXMgPSB0aGlzLnBhcnNlU2hhcGVzKGpzb24uc2hhcGVzKTtcblx0XHRjb25zdCBnZW9tZXRyaWVzID0gdGhpcy5wYXJzZUdlb21ldHJpZXMoanNvbi5nZW9tZXRyaWVzLCBzaGFwZXMpO1xuXHRcdGNvbnN0IGltYWdlcyA9IHRoaXMucGFyc2VJbWFnZXMoanNvbi5pbWFnZXMsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChvbkxvYWQgIT09IHVuZGVmaW5lZCkgb25Mb2FkKG9iamVjdCk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB0aGlzLnBhcnNlVGV4dHVyZXMoanNvbi50ZXh0dXJlcywgaW1hZ2VzKTtcblx0XHRjb25zdCBtYXRlcmlhbHMgPSB0aGlzLnBhcnNlTWF0ZXJpYWxzKGpzb24ubWF0ZXJpYWxzLCB0ZXh0dXJlcyk7XG5cdFx0Y29uc3Qgb2JqZWN0ID0gdGhpcy5wYXJzZU9iamVjdChqc29uLm9iamVjdCwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucyk7XG5cdFx0Y29uc3Qgc2tlbGV0b25zID0gdGhpcy5wYXJzZVNrZWxldG9ucyhqc29uLnNrZWxldG9ucywgb2JqZWN0KTtcblx0XHR0aGlzLmJpbmRTa2VsZXRvbnMob2JqZWN0LCBza2VsZXRvbnMpOyAvL1xuXG5cdFx0aWYgKG9uTG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgaGFzSW1hZ2VzID0gZmFsc2U7XG5cblx0XHRcdGZvciAoY29uc3QgdXVpZCBpbiBpbWFnZXMpIHtcblx0XHRcdFx0aWYgKGltYWdlc1t1dWlkXSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRoYXNJbWFnZXMgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNJbWFnZXMgPT09IGZhbHNlKSBvbkxvYWQob2JqZWN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqZWN0O1xuXHR9XG5cblx0YXN5bmMgcGFyc2VBc3luYyhqc29uKSB7XG5cdFx0Y29uc3QgYW5pbWF0aW9ucyA9IHRoaXMucGFyc2VBbmltYXRpb25zKGpzb24uYW5pbWF0aW9ucyk7XG5cdFx0Y29uc3Qgc2hhcGVzID0gdGhpcy5wYXJzZVNoYXBlcyhqc29uLnNoYXBlcyk7XG5cdFx0Y29uc3QgZ2VvbWV0cmllcyA9IHRoaXMucGFyc2VHZW9tZXRyaWVzKGpzb24uZ2VvbWV0cmllcywgc2hhcGVzKTtcblx0XHRjb25zdCBpbWFnZXMgPSBhd2FpdCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmMoanNvbi5pbWFnZXMpO1xuXHRcdGNvbnN0IHRleHR1cmVzID0gdGhpcy5wYXJzZVRleHR1cmVzKGpzb24udGV4dHVyZXMsIGltYWdlcyk7XG5cdFx0Y29uc3QgbWF0ZXJpYWxzID0gdGhpcy5wYXJzZU1hdGVyaWFscyhqc29uLm1hdGVyaWFscywgdGV4dHVyZXMpO1xuXHRcdGNvbnN0IG9iamVjdCA9IHRoaXMucGFyc2VPYmplY3QoanNvbi5vYmplY3QsIGdlb21ldHJpZXMsIG1hdGVyaWFscywgdGV4dHVyZXMsIGFuaW1hdGlvbnMpO1xuXHRcdGNvbnN0IHNrZWxldG9ucyA9IHRoaXMucGFyc2VTa2VsZXRvbnMoanNvbi5za2VsZXRvbnMsIG9iamVjdCk7XG5cdFx0dGhpcy5iaW5kU2tlbGV0b25zKG9iamVjdCwgc2tlbGV0b25zKTtcblx0XHRyZXR1cm4gb2JqZWN0O1xuXHR9XG5cblx0cGFyc2VTaGFwZXMoanNvbikge1xuXHRcdGNvbnN0IHNoYXBlcyA9IHt9O1xuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzaGFwZSA9IG5ldyBTaGFwZSgpLmZyb21KU09OKGpzb25baV0pO1xuXHRcdFx0XHRzaGFwZXNbc2hhcGUudXVpZF0gPSBzaGFwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc2hhcGVzO1xuXHR9XG5cblx0cGFyc2VTa2VsZXRvbnMoanNvbiwgb2JqZWN0KSB7XG5cdFx0Y29uc3Qgc2tlbGV0b25zID0ge307XG5cdFx0Y29uc3QgYm9uZXMgPSB7fTsgLy8gZ2VuZXJhdGUgYm9uZSBsb29rdXAgdGFibGVcblxuXHRcdG9iamVjdC50cmF2ZXJzZShmdW5jdGlvbiAoY2hpbGQpIHtcblx0XHRcdGlmIChjaGlsZC5pc0JvbmUpIGJvbmVzW2NoaWxkLnV1aWRdID0gY2hpbGQ7XG5cdFx0fSk7IC8vIGNyZWF0ZSBza2VsZXRvbnNcblxuXHRcdGlmIChqc29uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oKS5mcm9tSlNPTihqc29uW2ldLCBib25lcyk7XG5cdFx0XHRcdHNrZWxldG9uc1tza2VsZXRvbi51dWlkXSA9IHNrZWxldG9uO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBza2VsZXRvbnM7XG5cdH1cblxuXHRwYXJzZUdlb21ldHJpZXMoanNvbiwgc2hhcGVzKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cmllcyA9IHt9O1xuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYnVmZmVyR2VvbWV0cnlMb2FkZXIgPSBuZXcgQnVmZmVyR2VvbWV0cnlMb2FkZXIoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRsZXQgZ2VvbWV0cnk7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uW2ldO1xuXG5cdFx0XHRcdHN3aXRjaCAoZGF0YS50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSAnQnVmZmVyR2VvbWV0cnknOlxuXHRcdFx0XHRcdGNhc2UgJ0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Jzpcblx0XHRcdFx0XHRcdGdlb21ldHJ5ID0gYnVmZmVyR2VvbWV0cnlMb2FkZXIucGFyc2UoZGF0YSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ0dlb21ldHJ5Jzpcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS50eXBlIGluIEdlb21ldHJpZXMpIHtcblx0XHRcdFx0XHRcdFx0Z2VvbWV0cnkgPSBHZW9tZXRyaWVzW2RhdGEudHlwZV0uZnJvbUpTT04oZGF0YSwgc2hhcGVzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgVEhSRUUuT2JqZWN0TG9hZGVyOiBVbnN1cHBvcnRlZCBnZW9tZXRyeSB0eXBlIFwiJHtkYXRhLnR5cGV9XCJgKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkudXVpZCA9IGRhdGEudXVpZDtcblx0XHRcdFx0aWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSBnZW9tZXRyeS5uYW1lID0gZGF0YS5uYW1lO1xuXHRcdFx0XHRpZiAoZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSA9PT0gdHJ1ZSAmJiBkYXRhLnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIGdlb21ldHJ5LnVzZXJEYXRhID0gZGF0YS51c2VyRGF0YTtcblx0XHRcdFx0Z2VvbWV0cmllc1tkYXRhLnV1aWRdID0gZ2VvbWV0cnk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdlb21ldHJpZXM7XG5cdH1cblxuXHRwYXJzZU1hdGVyaWFscyhqc29uLCB0ZXh0dXJlcykge1xuXHRcdGNvbnN0IGNhY2hlID0ge307IC8vIE11bHRpTWF0ZXJpYWxcblxuXHRcdGNvbnN0IG1hdGVyaWFscyA9IHt9O1xuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgbG9hZGVyID0gbmV3IE1hdGVyaWFsTG9hZGVyKCk7XG5cdFx0XHRsb2FkZXIuc2V0VGV4dHVyZXModGV4dHVyZXMpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uW2ldO1xuXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09ICdNdWx0aU1hdGVyaWFsJykge1xuXHRcdFx0XHRcdC8vIERlcHJlY2F0ZWRcblx0XHRcdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBkYXRhLm1hdGVyaWFscy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBkYXRhLm1hdGVyaWFsc1tqXTtcblxuXHRcdFx0XHRcdFx0aWYgKGNhY2hlW21hdGVyaWFsLnV1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2FjaGVbbWF0ZXJpYWwudXVpZF0gPSBsb2FkZXIucGFyc2UobWF0ZXJpYWwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcnJheS5wdXNoKGNhY2hlW21hdGVyaWFsLnV1aWRdKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtYXRlcmlhbHNbZGF0YS51dWlkXSA9IGFycmF5O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChjYWNoZVtkYXRhLnV1aWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNhY2hlW2RhdGEudXVpZF0gPSBsb2FkZXIucGFyc2UoZGF0YSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWF0ZXJpYWxzW2RhdGEudXVpZF0gPSBjYWNoZVtkYXRhLnV1aWRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGVyaWFscztcblx0fVxuXG5cdHBhcnNlQW5pbWF0aW9ucyhqc29uKSB7XG5cdFx0Y29uc3QgYW5pbWF0aW9ucyA9IHt9O1xuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uW2ldO1xuXHRcdFx0XHRjb25zdCBjbGlwID0gQW5pbWF0aW9uQ2xpcC5wYXJzZShkYXRhKTtcblx0XHRcdFx0YW5pbWF0aW9uc1tjbGlwLnV1aWRdID0gY2xpcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5pbWF0aW9ucztcblx0fVxuXG5cdHBhcnNlSW1hZ2VzKGpzb24sIG9uTG9hZCkge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBpbWFnZXMgPSB7fTtcblx0XHRsZXQgbG9hZGVyO1xuXG5cdFx0ZnVuY3Rpb24gbG9hZEltYWdlKHVybCkge1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtU3RhcnQodXJsKTtcblx0XHRcdHJldHVybiBsb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0XHR9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IodXJsKTtcblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBkZXNlcmlhbGl6ZUltYWdlKGltYWdlKSB7XG5cdFx0XHRpZiAodHlwZW9mIGltYWdlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBpbWFnZTtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IC9eKFxcL1xcLyl8KFthLXpdKzooXFwvXFwvKT8pL2kudGVzdCh1cmwpID8gdXJsIDogc2NvcGUucmVzb3VyY2VQYXRoICsgdXJsO1xuXHRcdFx0XHRyZXR1cm4gbG9hZEltYWdlKHBhdGgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGltYWdlLmRhdGEpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZGF0YTogZ2V0VHlwZWRBcnJheShpbWFnZS50eXBlLCBpbWFnZS5kYXRhKSxcblx0XHRcdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChqc29uICE9PSB1bmRlZmluZWQgJiYganNvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtYW5hZ2VyID0gbmV3IExvYWRpbmdNYW5hZ2VyKG9uTG9hZCk7XG5cdFx0XHRsb2FkZXIgPSBuZXcgSW1hZ2VMb2FkZXIobWFuYWdlcik7XG5cdFx0XHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IGpzb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuXHRcdFx0XHRjb25zdCBpbWFnZSA9IGpzb25baV07XG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlLnVybDtcblxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG5cdFx0XHRcdFx0Ly8gbG9hZCBhcnJheSBvZiBpbWFnZXMgZS5nIEN1YmVUZXh0dXJlXG5cdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMCwgamwgPSB1cmwubGVuZ3RoOyBqIDwgamw7IGorKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFVybCA9IHVybFtqXTtcblx0XHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gZGVzZXJpYWxpemVJbWFnZShjdXJyZW50VXJsKTtcblxuXHRcdFx0XHRcdFx0aWYgKGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkZXNlcmlhbGl6ZWRJbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpbWFnZXNbaW1hZ2UudXVpZF0ucHVzaChkZXNlcmlhbGl6ZWRJbWFnZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgYXJyYXkgb2YgZGF0YSB0ZXh0dXJlcyBmb3IgY3ViZSB0ZXh0dXJlc1xuXHRcdFx0XHRcdFx0XHRcdGltYWdlc1tpbWFnZS51dWlkXS5wdXNoKG5ldyBEYXRhVGV4dHVyZShkZXNlcmlhbGl6ZWRJbWFnZS5kYXRhLCBkZXNlcmlhbGl6ZWRJbWFnZS53aWR0aCwgZGVzZXJpYWxpemVkSW1hZ2UuaGVpZ2h0KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gbG9hZCBzaW5nbGUgaW1hZ2Vcblx0XHRcdFx0XHRjb25zdCBkZXNlcmlhbGl6ZWRJbWFnZSA9IGRlc2VyaWFsaXplSW1hZ2UoaW1hZ2UudXJsKTtcblxuXHRcdFx0XHRcdGlmIChkZXNlcmlhbGl6ZWRJbWFnZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdID0gZGVzZXJpYWxpemVkSW1hZ2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlcztcblx0fVxuXG5cdGFzeW5jIHBhcnNlSW1hZ2VzQXN5bmMoanNvbikge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBpbWFnZXMgPSB7fTtcblx0XHRsZXQgbG9hZGVyO1xuXG5cdFx0YXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemVJbWFnZShpbWFnZSkge1xuXHRcdFx0aWYgKHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gaW1hZ2U7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSAvXihcXC9cXC8pfChbYS16XSs6KFxcL1xcLyk/KS9pLnRlc3QodXJsKSA/IHVybCA6IHNjb3BlLnJlc291cmNlUGF0aCArIHVybDtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGxvYWRlci5sb2FkQXN5bmMocGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaW1hZ2UuZGF0YSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRkYXRhOiBnZXRUeXBlZEFycmF5KGltYWdlLnR5cGUsIGltYWdlLmRhdGEpLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHRcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGpzb24gIT09IHVuZGVmaW5lZCAmJiBqc29uLmxlbmd0aCA+IDApIHtcblx0XHRcdGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWwgPSBqc29uLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgaW1hZ2UgPSBqc29uW2ldO1xuXHRcdFx0XHRjb25zdCB1cmwgPSBpbWFnZS51cmw7XG5cblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodXJsKSkge1xuXHRcdFx0XHRcdC8vIGxvYWQgYXJyYXkgb2YgaW1hZ2VzIGUuZyBDdWJlVGV4dHVyZVxuXHRcdFx0XHRcdGltYWdlc1tpbWFnZS51dWlkXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIGpsID0gdXJsLmxlbmd0aDsgaiA8IGpsOyBqKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRVcmwgPSB1cmxbal07XG5cdFx0XHRcdFx0XHRjb25zdCBkZXNlcmlhbGl6ZWRJbWFnZSA9IGF3YWl0IGRlc2VyaWFsaXplSW1hZ2UoY3VycmVudFVybCk7XG5cblx0XHRcdFx0XHRcdGlmIChkZXNlcmlhbGl6ZWRJbWFnZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGVzZXJpYWxpemVkSW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzW2ltYWdlLnV1aWRdLnB1c2goZGVzZXJpYWxpemVkSW1hZ2UpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIGFycmF5IG9mIGRhdGEgdGV4dHVyZXMgZm9yIGN1YmUgdGV4dHVyZXNcblx0XHRcdFx0XHRcdFx0XHRpbWFnZXNbaW1hZ2UudXVpZF0ucHVzaChuZXcgRGF0YVRleHR1cmUoZGVzZXJpYWxpemVkSW1hZ2UuZGF0YSwgZGVzZXJpYWxpemVkSW1hZ2Uud2lkdGgsIGRlc2VyaWFsaXplZEltYWdlLmhlaWdodCkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGxvYWQgc2luZ2xlIGltYWdlXG5cdFx0XHRcdFx0Y29uc3QgZGVzZXJpYWxpemVkSW1hZ2UgPSBhd2FpdCBkZXNlcmlhbGl6ZUltYWdlKGltYWdlLnVybCk7XG5cblx0XHRcdFx0XHRpZiAoZGVzZXJpYWxpemVkSW1hZ2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGltYWdlc1tpbWFnZS51dWlkXSA9IGRlc2VyaWFsaXplZEltYWdlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbWFnZXM7XG5cdH1cblxuXHRwYXJzZVRleHR1cmVzKGpzb24sIGltYWdlcykge1xuXHRcdGZ1bmN0aW9uIHBhcnNlQ29uc3RhbnQodmFsdWUsIHR5cGUpIHtcblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdmFsdWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uJywgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHR5cGVbdmFsdWVdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRleHR1cmVzID0ge307XG5cblx0XHRpZiAoanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uW2ldO1xuXG5cdFx0XHRcdGlmIChkYXRhLmltYWdlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gXCJpbWFnZVwiIHNwZWNpZmllZCBmb3InLCBkYXRhLnV1aWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGltYWdlc1tkYXRhLmltYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBpbWFnZScsIGRhdGEuaW1hZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHRleHR1cmU7XG5cdFx0XHRcdGNvbnN0IGltYWdlID0gaW1hZ2VzW2RhdGEuaW1hZ2VdO1xuXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGltYWdlKSkge1xuXHRcdFx0XHRcdHRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoaW1hZ2UpO1xuXHRcdFx0XHRcdGlmIChpbWFnZS5sZW5ndGggPT09IDYpIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChpbWFnZSAmJiBpbWFnZS5kYXRhKSB7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKGltYWdlLmRhdGEsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlID0gbmV3IFRleHR1cmUoaW1hZ2UpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpbWFnZSkgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7IC8vIHRleHR1cmVzIGNhbiBoYXZlIHVuZGVmaW5lZCBpbWFnZSBkYXRhXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLnV1aWQgPSBkYXRhLnV1aWQ7XG5cdFx0XHRcdGlmIChkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5uYW1lID0gZGF0YS5uYW1lO1xuXHRcdFx0XHRpZiAoZGF0YS5tYXBwaW5nICE9PSB1bmRlZmluZWQpIHRleHR1cmUubWFwcGluZyA9IHBhcnNlQ29uc3RhbnQoZGF0YS5tYXBwaW5nLCBURVhUVVJFX01BUFBJTkcpO1xuXHRcdFx0XHRpZiAoZGF0YS5vZmZzZXQgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5vZmZzZXQuZnJvbUFycmF5KGRhdGEub2Zmc2V0KTtcblx0XHRcdFx0aWYgKGRhdGEucmVwZWF0ICE9PSB1bmRlZmluZWQpIHRleHR1cmUucmVwZWF0LmZyb21BcnJheShkYXRhLnJlcGVhdCk7XG5cdFx0XHRcdGlmIChkYXRhLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLmNlbnRlci5mcm9tQXJyYXkoZGF0YS5jZW50ZXIpO1xuXHRcdFx0XHRpZiAoZGF0YS5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLnJvdGF0aW9uID0gZGF0YS5yb3RhdGlvbjtcblxuXHRcdFx0XHRpZiAoZGF0YS53cmFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0ZXh0dXJlLndyYXBTID0gcGFyc2VDb25zdGFudChkYXRhLndyYXBbMF0sIFRFWFRVUkVfV1JBUFBJTkcpO1xuXHRcdFx0XHRcdHRleHR1cmUud3JhcFQgPSBwYXJzZUNvbnN0YW50KGRhdGEud3JhcFsxXSwgVEVYVFVSRV9XUkFQUElORyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YS5mb3JtYXQgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5mb3JtYXQgPSBkYXRhLmZvcm1hdDtcblx0XHRcdFx0aWYgKGRhdGEudHlwZSAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLnR5cGUgPSBkYXRhLnR5cGU7XG5cdFx0XHRcdGlmIChkYXRhLmVuY29kaW5nICE9PSB1bmRlZmluZWQpIHRleHR1cmUuZW5jb2RpbmcgPSBkYXRhLmVuY29kaW5nO1xuXHRcdFx0XHRpZiAoZGF0YS5taW5GaWx0ZXIgIT09IHVuZGVmaW5lZCkgdGV4dHVyZS5taW5GaWx0ZXIgPSBwYXJzZUNvbnN0YW50KGRhdGEubWluRmlsdGVyLCBURVhUVVJFX0ZJTFRFUik7XG5cdFx0XHRcdGlmIChkYXRhLm1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLm1hZ0ZpbHRlciA9IHBhcnNlQ29uc3RhbnQoZGF0YS5tYWdGaWx0ZXIsIFRFWFRVUkVfRklMVEVSKTtcblx0XHRcdFx0aWYgKGRhdGEuYW5pc290cm9weSAhPT0gdW5kZWZpbmVkKSB0ZXh0dXJlLmFuaXNvdHJvcHkgPSBkYXRhLmFuaXNvdHJvcHk7XG5cdFx0XHRcdGlmIChkYXRhLmZsaXBZICE9PSB1bmRlZmluZWQpIHRleHR1cmUuZmxpcFkgPSBkYXRhLmZsaXBZO1xuXHRcdFx0XHRpZiAoZGF0YS5wcmVtdWx0aXBseUFscGhhICE9PSB1bmRlZmluZWQpIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IGRhdGEucHJlbXVsdGlwbHlBbHBoYTtcblx0XHRcdFx0aWYgKGRhdGEudW5wYWNrQWxpZ25tZW50ICE9PSB1bmRlZmluZWQpIHRleHR1cmUudW5wYWNrQWxpZ25tZW50ID0gZGF0YS51bnBhY2tBbGlnbm1lbnQ7XG5cdFx0XHRcdGlmIChkYXRhLnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIHRleHR1cmUudXNlckRhdGEgPSBkYXRhLnVzZXJEYXRhO1xuXHRcdFx0XHR0ZXh0dXJlc1tkYXRhLnV1aWRdID0gdGV4dHVyZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZXM7XG5cdH1cblxuXHRwYXJzZU9iamVjdChkYXRhLCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMsIHRleHR1cmVzLCBhbmltYXRpb25zKSB7XG5cdFx0bGV0IG9iamVjdDtcblxuXHRcdGZ1bmN0aW9uIGdldEdlb21ldHJ5KG5hbWUpIHtcblx0XHRcdGlmIChnZW9tZXRyaWVzW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeScsIG5hbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZ2VvbWV0cmllc1tuYW1lXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRNYXRlcmlhbChuYW1lKSB7XG5cdFx0XHRpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuXHRcdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCB1dWlkID0gbmFtZVtpXTtcblxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbHNbdXVpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCcsIHV1aWQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFycmF5LnB1c2gobWF0ZXJpYWxzW3V1aWRdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1hdGVyaWFsc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwnLCBuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGVyaWFsc1tuYW1lXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRUZXh0dXJlKHV1aWQpIHtcblx0XHRcdGlmICh0ZXh0dXJlc1t1dWlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIHV1aWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGV4dHVyZXNbdXVpZF07XG5cdFx0fVxuXG5cdFx0bGV0IGdlb21ldHJ5LCBtYXRlcmlhbDtcblxuXHRcdHN3aXRjaCAoZGF0YS50eXBlKSB7XG5cdFx0XHRjYXNlICdTY2VuZSc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTY2VuZSgpO1xuXG5cdFx0XHRcdGlmIChkYXRhLmJhY2tncm91bmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChOdW1iZXIuaXNJbnRlZ2VyKGRhdGEuYmFja2dyb3VuZCkpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKGRhdGEuYmFja2dyb3VuZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gZ2V0VGV4dHVyZShkYXRhLmJhY2tncm91bmQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhLmVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvYmplY3QuZW52aXJvbm1lbnQgPSBnZXRUZXh0dXJlKGRhdGEuZW52aXJvbm1lbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGEuZm9nICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5mb2cudHlwZSA9PT0gJ0ZvZycpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5mb2cgPSBuZXcgRm9nKGRhdGEuZm9nLmNvbG9yLCBkYXRhLmZvZy5uZWFyLCBkYXRhLmZvZy5mYXIpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5mb2cudHlwZSA9PT0gJ0ZvZ0V4cDInKSB7XG5cdFx0XHRcdFx0XHRvYmplY3QuZm9nID0gbmV3IEZvZ0V4cDIoZGF0YS5mb2cuY29sb3IsIGRhdGEuZm9nLmRlbnNpdHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQZXJzcGVjdGl2ZUNhbWVyYSc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShkYXRhLmZvdiwgZGF0YS5hc3BlY3QsIGRhdGEubmVhciwgZGF0YS5mYXIpO1xuXHRcdFx0XHRpZiAoZGF0YS5mb2N1cyAhPT0gdW5kZWZpbmVkKSBvYmplY3QuZm9jdXMgPSBkYXRhLmZvY3VzO1xuXHRcdFx0XHRpZiAoZGF0YS56b29tICE9PSB1bmRlZmluZWQpIG9iamVjdC56b29tID0gZGF0YS56b29tO1xuXHRcdFx0XHRpZiAoZGF0YS5maWxtR2F1Z2UgIT09IHVuZGVmaW5lZCkgb2JqZWN0LmZpbG1HYXVnZSA9IGRhdGEuZmlsbUdhdWdlO1xuXHRcdFx0XHRpZiAoZGF0YS5maWxtT2Zmc2V0ICE9PSB1bmRlZmluZWQpIG9iamVjdC5maWxtT2Zmc2V0ID0gZGF0YS5maWxtT2Zmc2V0O1xuXHRcdFx0XHRpZiAoZGF0YS52aWV3ICE9PSB1bmRlZmluZWQpIG9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YS52aWV3KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ09ydGhvZ3JhcGhpY0NhbWVyYSc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoZGF0YS5sZWZ0LCBkYXRhLnJpZ2h0LCBkYXRhLnRvcCwgZGF0YS5ib3R0b20sIGRhdGEubmVhciwgZGF0YS5mYXIpO1xuXHRcdFx0XHRpZiAoZGF0YS56b29tICE9PSB1bmRlZmluZWQpIG9iamVjdC56b29tID0gZGF0YS56b29tO1xuXHRcdFx0XHRpZiAoZGF0YS52aWV3ICE9PSB1bmRlZmluZWQpIG9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YS52aWV3KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0FtYmllbnRMaWdodCc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBBbWJpZW50TGlnaHQoZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1BvaW50TGlnaHQnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUG9pbnRMaWdodChkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS5kaXN0YW5jZSwgZGF0YS5kZWNheSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdSZWN0QXJlYUxpZ2h0Jzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IFJlY3RBcmVhTGlnaHQoZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHksIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1Nwb3RMaWdodCc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTcG90TGlnaHQoZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHksIGRhdGEuZGlzdGFuY2UsIGRhdGEuYW5nbGUsIGRhdGEucGVudW1icmEsIGRhdGEuZGVjYXkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnSGVtaXNwaGVyZUxpZ2h0Jzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IEhlbWlzcGhlcmVMaWdodChkYXRhLmNvbG9yLCBkYXRhLmdyb3VuZENvbG9yLCBkYXRhLmludGVuc2l0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaWdodFByb2JlJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpZ2h0UHJvYmUoKS5mcm9tSlNPTihkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1NraW5uZWRNZXNoJzpcblx0XHRcdFx0Z2VvbWV0cnkgPSBnZXRHZW9tZXRyeShkYXRhLmdlb21ldHJ5KTtcblx0XHRcdFx0bWF0ZXJpYWwgPSBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKTtcblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNraW5uZWRNZXNoKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0XHRcdGlmIChkYXRhLmJpbmRNb2RlICE9PSB1bmRlZmluZWQpIG9iamVjdC5iaW5kTW9kZSA9IGRhdGEuYmluZE1vZGU7XG5cdFx0XHRcdGlmIChkYXRhLmJpbmRNYXRyaXggIT09IHVuZGVmaW5lZCkgb2JqZWN0LmJpbmRNYXRyaXguZnJvbUFycmF5KGRhdGEuYmluZE1hdHJpeCk7XG5cdFx0XHRcdGlmIChkYXRhLnNrZWxldG9uICE9PSB1bmRlZmluZWQpIG9iamVjdC5za2VsZXRvbiA9IGRhdGEuc2tlbGV0b247XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdNZXNoJzpcblx0XHRcdFx0Z2VvbWV0cnkgPSBnZXRHZW9tZXRyeShkYXRhLmdlb21ldHJ5KTtcblx0XHRcdFx0bWF0ZXJpYWwgPSBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKTtcblx0XHRcdFx0b2JqZWN0ID0gbmV3IE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0luc3RhbmNlZE1lc2gnOlxuXHRcdFx0XHRnZW9tZXRyeSA9IGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpO1xuXHRcdFx0XHRtYXRlcmlhbCA9IGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpO1xuXHRcdFx0XHRjb25zdCBjb3VudCA9IGRhdGEuY291bnQ7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTWF0cml4ID0gZGF0YS5pbnN0YW5jZU1hdHJpeDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VDb2xvciA9IGRhdGEuaW5zdGFuY2VDb2xvcjtcblx0XHRcdFx0b2JqZWN0ID0gbmV3IEluc3RhbmNlZE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsLCBjb3VudCk7XG5cdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeCA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheShpbnN0YW5jZU1hdHJpeC5hcnJheSksIDE2KTtcblx0XHRcdFx0aWYgKGluc3RhbmNlQ29sb3IgIT09IHVuZGVmaW5lZCkgb2JqZWN0Lmluc3RhbmNlQ29sb3IgPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkoaW5zdGFuY2VDb2xvci5hcnJheSksIGluc3RhbmNlQ29sb3IuaXRlbVNpemUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTE9EJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IExPRCgpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTGluZSc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBMaW5lKGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpLCBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaW5lTG9vcCc6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBMaW5lTG9vcChnZXRHZW9tZXRyeShkYXRhLmdlb21ldHJ5KSwgZ2V0TWF0ZXJpYWwoZGF0YS5tYXRlcmlhbCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTGluZVNlZ21lbnRzJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpbmVTZWdtZW50cyhnZXRHZW9tZXRyeShkYXRhLmdlb21ldHJ5KSwgZ2V0TWF0ZXJpYWwoZGF0YS5tYXRlcmlhbCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUG9pbnRDbG91ZCc6XG5cdFx0XHRjYXNlICdQb2ludHMnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUG9pbnRzKGdldEdlb21ldHJ5KGRhdGEuZ2VvbWV0cnkpLCBnZXRNYXRlcmlhbChkYXRhLm1hdGVyaWFsKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdTcHJpdGUnOlxuXHRcdFx0XHRvYmplY3QgPSBuZXcgU3ByaXRlKGdldE1hdGVyaWFsKGRhdGEubWF0ZXJpYWwpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0dyb3VwJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IEdyb3VwKCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdCb25lJzpcblx0XHRcdFx0b2JqZWN0ID0gbmV3IEJvbmUoKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG9iamVjdCA9IG5ldyBPYmplY3QzRCgpO1xuXHRcdH1cblxuXHRcdG9iamVjdC51dWlkID0gZGF0YS51dWlkO1xuXHRcdGlmIChkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkgb2JqZWN0Lm5hbWUgPSBkYXRhLm5hbWU7XG5cblx0XHRpZiAoZGF0YS5tYXRyaXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqZWN0Lm1hdHJpeC5mcm9tQXJyYXkoZGF0YS5tYXRyaXgpO1xuXHRcdFx0aWYgKGRhdGEubWF0cml4QXV0b1VwZGF0ZSAhPT0gdW5kZWZpbmVkKSBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGRhdGEubWF0cml4QXV0b1VwZGF0ZTtcblx0XHRcdGlmIChvYmplY3QubWF0cml4QXV0b1VwZGF0ZSkgb2JqZWN0Lm1hdHJpeC5kZWNvbXBvc2Uob2JqZWN0LnBvc2l0aW9uLCBvYmplY3QucXVhdGVybmlvbiwgb2JqZWN0LnNjYWxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGRhdGEucG9zaXRpb24gIT09IHVuZGVmaW5lZCkgb2JqZWN0LnBvc2l0aW9uLmZyb21BcnJheShkYXRhLnBvc2l0aW9uKTtcblx0XHRcdGlmIChkYXRhLnJvdGF0aW9uICE9PSB1bmRlZmluZWQpIG9iamVjdC5yb3RhdGlvbi5mcm9tQXJyYXkoZGF0YS5yb3RhdGlvbik7XG5cdFx0XHRpZiAoZGF0YS5xdWF0ZXJuaW9uICE9PSB1bmRlZmluZWQpIG9iamVjdC5xdWF0ZXJuaW9uLmZyb21BcnJheShkYXRhLnF1YXRlcm5pb24pO1xuXHRcdFx0aWYgKGRhdGEuc2NhbGUgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnNjYWxlLmZyb21BcnJheShkYXRhLnNjYWxlKTtcblx0XHR9XG5cblx0XHRpZiAoZGF0YS5jYXN0U2hhZG93ICE9PSB1bmRlZmluZWQpIG9iamVjdC5jYXN0U2hhZG93ID0gZGF0YS5jYXN0U2hhZG93O1xuXHRcdGlmIChkYXRhLnJlY2VpdmVTaGFkb3cgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnJlY2VpdmVTaGFkb3cgPSBkYXRhLnJlY2VpdmVTaGFkb3c7XG5cblx0XHRpZiAoZGF0YS5zaGFkb3cpIHtcblx0XHRcdGlmIChkYXRhLnNoYWRvdy5iaWFzICE9PSB1bmRlZmluZWQpIG9iamVjdC5zaGFkb3cuYmlhcyA9IGRhdGEuc2hhZG93LmJpYXM7XG5cdFx0XHRpZiAoZGF0YS5zaGFkb3cubm9ybWFsQmlhcyAhPT0gdW5kZWZpbmVkKSBvYmplY3Quc2hhZG93Lm5vcm1hbEJpYXMgPSBkYXRhLnNoYWRvdy5ub3JtYWxCaWFzO1xuXHRcdFx0aWYgKGRhdGEuc2hhZG93LnJhZGl1cyAhPT0gdW5kZWZpbmVkKSBvYmplY3Quc2hhZG93LnJhZGl1cyA9IGRhdGEuc2hhZG93LnJhZGl1cztcblx0XHRcdGlmIChkYXRhLnNoYWRvdy5tYXBTaXplICE9PSB1bmRlZmluZWQpIG9iamVjdC5zaGFkb3cubWFwU2l6ZS5mcm9tQXJyYXkoZGF0YS5zaGFkb3cubWFwU2l6ZSk7XG5cdFx0XHRpZiAoZGF0YS5zaGFkb3cuY2FtZXJhICE9PSB1bmRlZmluZWQpIG9iamVjdC5zaGFkb3cuY2FtZXJhID0gdGhpcy5wYXJzZU9iamVjdChkYXRhLnNoYWRvdy5jYW1lcmEpO1xuXHRcdH1cblxuXHRcdGlmIChkYXRhLnZpc2libGUgIT09IHVuZGVmaW5lZCkgb2JqZWN0LnZpc2libGUgPSBkYXRhLnZpc2libGU7XG5cdFx0aWYgKGRhdGEuZnJ1c3R1bUN1bGxlZCAhPT0gdW5kZWZpbmVkKSBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9IGRhdGEuZnJ1c3R1bUN1bGxlZDtcblx0XHRpZiAoZGF0YS5yZW5kZXJPcmRlciAhPT0gdW5kZWZpbmVkKSBvYmplY3QucmVuZGVyT3JkZXIgPSBkYXRhLnJlbmRlck9yZGVyO1xuXHRcdGlmIChkYXRhLnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIG9iamVjdC51c2VyRGF0YSA9IGRhdGEudXNlckRhdGE7XG5cdFx0aWYgKGRhdGEubGF5ZXJzICE9PSB1bmRlZmluZWQpIG9iamVjdC5sYXllcnMubWFzayA9IGRhdGEubGF5ZXJzO1xuXG5cdFx0aWYgKGRhdGEuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG9iamVjdC5hZGQodGhpcy5wYXJzZU9iamVjdChjaGlsZHJlbltpXSwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkYXRhLmFuaW1hdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0QW5pbWF0aW9ucyA9IGRhdGEuYW5pbWF0aW9ucztcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RBbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBvYmplY3RBbmltYXRpb25zW2ldO1xuXHRcdFx0XHRvYmplY3QuYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbnNbdXVpZF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkYXRhLnR5cGUgPT09ICdMT0QnKSB7XG5cdFx0XHRpZiAoZGF0YS5hdXRvVXBkYXRlICE9PSB1bmRlZmluZWQpIG9iamVjdC5hdXRvVXBkYXRlID0gZGF0YS5hdXRvVXBkYXRlO1xuXHRcdFx0Y29uc3QgbGV2ZWxzID0gZGF0YS5sZXZlbHM7XG5cblx0XHRcdGZvciAobGV0IGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGNvbnN0IGxldmVsID0gbGV2ZWxzW2xdO1xuXHRcdFx0XHRjb25zdCBjaGlsZCA9IG9iamVjdC5nZXRPYmplY3RCeVByb3BlcnR5KCd1dWlkJywgbGV2ZWwub2JqZWN0KTtcblxuXHRcdFx0XHRpZiAoY2hpbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9iamVjdC5hZGRMZXZlbChjaGlsZCwgbGV2ZWwuZGlzdGFuY2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iamVjdDtcblx0fVxuXG5cdGJpbmRTa2VsZXRvbnMob2JqZWN0LCBza2VsZXRvbnMpIHtcblx0XHRpZiAoT2JqZWN0LmtleXMoc2tlbGV0b25zKS5sZW5ndGggPT09IDApIHJldHVybjtcblx0XHRvYmplY3QudHJhdmVyc2UoZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0XHRpZiAoY2hpbGQuaXNTa2lubmVkTWVzaCA9PT0gdHJ1ZSAmJiBjaGlsZC5za2VsZXRvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IHNrZWxldG9uID0gc2tlbGV0b25zW2NoaWxkLnNrZWxldG9uXTtcblxuXHRcdFx0XHRpZiAoc2tlbGV0b24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6JywgY2hpbGQuc2tlbGV0b24pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNoaWxkLmJpbmQoc2tlbGV0b24sIGNoaWxkLmJpbmRNYXRyaXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0LyogREVQUkVDQVRFRCAqL1xuXG5cblx0c2V0VGV4dHVyZVBhdGgodmFsdWUpIHtcblx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuJyk7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VQYXRoKHZhbHVlKTtcblx0fVxuXG59XG5cbmNvbnN0IFRFWFRVUkVfTUFQUElORyA9IHtcblx0VVZNYXBwaW5nOiBVVk1hcHBpbmcsXG5cdEN1YmVSZWZsZWN0aW9uTWFwcGluZzogQ3ViZVJlZmxlY3Rpb25NYXBwaW5nLFxuXHRDdWJlUmVmcmFjdGlvbk1hcHBpbmc6IEN1YmVSZWZyYWN0aW9uTWFwcGluZyxcblx0RXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nLFxuXHRFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzogRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcsXG5cdEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOiBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZyxcblx0Q3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nXG59O1xuY29uc3QgVEVYVFVSRV9XUkFQUElORyA9IHtcblx0UmVwZWF0V3JhcHBpbmc6IFJlcGVhdFdyYXBwaW5nLFxuXHRDbGFtcFRvRWRnZVdyYXBwaW5nOiBDbGFtcFRvRWRnZVdyYXBwaW5nLFxuXHRNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOiBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nXG59O1xuY29uc3QgVEVYVFVSRV9GSUxURVIgPSB7XG5cdE5lYXJlc3RGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXG5cdE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOiBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcixcblx0TmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcjogTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcixcblx0TGluZWFyRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6IExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXIsXG5cdExpbmVhck1pcG1hcExpbmVhckZpbHRlcjogTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyXG59O1xuXG5jbGFzcyBJbWFnZUJpdG1hcExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cdGNvbnN0cnVjdG9yKG1hbmFnZXIpIHtcblx0XHRzdXBlcihtYW5hZ2VyKTtcblxuXHRcdGlmICh0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRwcmVtdWx0aXBseUFscGhhOiAnbm9uZSdcblx0XHR9O1xuXHR9XG5cblx0c2V0T3B0aW9ucyhvcHRpb25zKSB7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxvYWQodXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IpIHtcblx0XHRpZiAodXJsID09PSB1bmRlZmluZWQpIHVybCA9ICcnO1xuXHRcdGlmICh0aGlzLnBhdGggIT09IHVuZGVmaW5lZCkgdXJsID0gdGhpcy5wYXRoICsgdXJsO1xuXHRcdHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHVybCk7XG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRcdGNvbnN0IGNhY2hlZCA9IENhY2hlLmdldCh1cmwpO1xuXG5cdFx0aWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCh1cmwpO1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZChjYWNoZWQpO1xuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0cmV0dXJuIGNhY2hlZDtcblx0XHR9XG5cblx0XHRjb25zdCBmZXRjaE9wdGlvbnMgPSB7fTtcblx0XHRmZXRjaE9wdGlvbnMuY3JlZGVudGlhbHMgPSB0aGlzLmNyb3NzT3JpZ2luID09PSAnYW5vbnltb3VzJyA/ICdzYW1lLW9yaWdpbicgOiAnaW5jbHVkZSc7XG5cdFx0ZmV0Y2hPcHRpb25zLmhlYWRlcnMgPSB0aGlzLnJlcXVlc3RIZWFkZXI7XG5cdFx0ZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuXHRcdFx0cmV0dXJuIHJlcy5ibG9iKCk7XG5cdFx0fSkudGhlbihmdW5jdGlvbiAoYmxvYikge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGJsb2IsIE9iamVjdC5hc3NpZ24oc2NvcGUub3B0aW9ucywge1xuXHRcdFx0XHRjb2xvclNwYWNlQ29udmVyc2lvbjogJ25vbmUnXG5cdFx0XHR9KSk7XG5cdFx0fSkudGhlbihmdW5jdGlvbiAoaW1hZ2VCaXRtYXApIHtcblx0XHRcdENhY2hlLmFkZCh1cmwsIGltYWdlQml0bWFwKTtcblx0XHRcdGlmIChvbkxvYWQpIG9uTG9hZChpbWFnZUJpdG1hcCk7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQodXJsKTtcblx0XHR9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuXHRcdFx0aWYgKG9uRXJyb3IpIG9uRXJyb3IoZSk7XG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvcih1cmwpO1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKHVybCk7XG5cdFx0fSk7XG5cdFx0c2NvcGUubWFuYWdlci5pdGVtU3RhcnQodXJsKTtcblx0fVxuXG59XG5cbkltYWdlQml0bWFwTG9hZGVyLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyID0gdHJ1ZTtcblxubGV0IF9jb250ZXh0O1xuXG5jb25zdCBBdWRpb0NvbnRleHQgPSB7XG5cdGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2NvbnRleHQgPSBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gX2NvbnRleHQ7XG5cdH0sXG5cdHNldENvbnRleHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdF9jb250ZXh0ID0gdmFsdWU7XG5cdH1cbn07XG5cbmNsYXNzIEF1ZGlvTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblx0Y29uc3RydWN0b3IobWFuYWdlcikge1xuXHRcdHN1cGVyKG1hbmFnZXIpO1xuXHR9XG5cblx0bG9hZCh1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvcikge1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcih0aGlzLm1hbmFnZXIpO1xuXHRcdGxvYWRlci5zZXRSZXNwb25zZVR5cGUoJ2FycmF5YnVmZmVyJyk7XG5cdFx0bG9hZGVyLnNldFBhdGgodGhpcy5wYXRoKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdGxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnVmZmVyLiBUaGUgYGRlY29kZUF1ZGlvRGF0YWAgbWV0aG9kXG5cdFx0XHRcdC8vIGRldGFjaGVzIHRoZSBidWZmZXIgd2hlbiBjb21wbGV0ZSwgcHJldmVudGluZyByZXVzZS5cblx0XHRcdFx0Y29uc3QgYnVmZmVyQ29weSA9IGJ1ZmZlci5zbGljZSgwKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IEF1ZGlvQ29udGV4dC5nZXRDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGJ1ZmZlckNvcHksIGZ1bmN0aW9uIChhdWRpb0J1ZmZlcikge1xuXHRcdFx0XHRcdG9uTG9hZChhdWRpb0J1ZmZlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAob25FcnJvcikge1xuXHRcdFx0XHRcdG9uRXJyb3IoZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKHVybCk7XG5cdFx0XHR9XG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvcik7XG5cdH1cblxufVxuXG5jbGFzcyBIZW1pc3BoZXJlTGlnaHRQcm9iZSBleHRlbmRzIExpZ2h0UHJvYmUge1xuXHRjb25zdHJ1Y3Rvcihza3lDb2xvciwgZ3JvdW5kQ29sb3IsIGludGVuc2l0eSA9IDEpIHtcblx0XHRzdXBlcih1bmRlZmluZWQsIGludGVuc2l0eSk7XG5cdFx0Y29uc3QgY29sb3IxID0gbmV3IENvbG9yKCkuc2V0KHNreUNvbG9yKTtcblx0XHRjb25zdCBjb2xvcjIgPSBuZXcgQ29sb3IoKS5zZXQoZ3JvdW5kQ29sb3IpO1xuXHRcdGNvbnN0IHNreSA9IG5ldyBWZWN0b3IzKGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIpO1xuXHRcdGNvbnN0IGdyb3VuZCA9IG5ldyBWZWN0b3IzKGNvbG9yMi5yLCBjb2xvcjIuZywgY29sb3IyLmIpOyAvLyB3aXRob3V0IGV4dHJhIGZhY3RvciBvZiBQSSBpbiB0aGUgc2hhZGVyLCBzaG91bGQgPSAxIC8gTWF0aC5zcXJ0KCBNYXRoLlBJICk7XG5cblx0XHRjb25zdCBjMCA9IE1hdGguc3FydChNYXRoLlBJKTtcblx0XHRjb25zdCBjMSA9IGMwICogTWF0aC5zcXJ0KDAuNzUpO1xuXHRcdHRoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoc2t5KS5hZGQoZ3JvdW5kKS5tdWx0aXBseVNjYWxhcihjMCk7XG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShza3kpLnN1Yihncm91bmQpLm11bHRpcGx5U2NhbGFyKGMxKTtcblx0fVxuXG59XG5cbkhlbWlzcGhlcmVMaWdodFByb2JlLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodFByb2JlID0gdHJ1ZTtcblxuY2xhc3MgQW1iaWVudExpZ2h0UHJvYmUgZXh0ZW5kcyBMaWdodFByb2JlIHtcblx0Y29uc3RydWN0b3IoY29sb3IsIGludGVuc2l0eSA9IDEpIHtcblx0XHRzdXBlcih1bmRlZmluZWQsIGludGVuc2l0eSk7XG5cdFx0Y29uc3QgY29sb3IxID0gbmV3IENvbG9yKCkuc2V0KGNvbG9yKTsgLy8gd2l0aG91dCBleHRyYSBmYWN0b3Igb2YgUEkgaW4gdGhlIHNoYWRlciwgd291bGQgYmUgMiAvIE1hdGguc3FydCggTWF0aC5QSSApO1xuXG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIpLm11bHRpcGx5U2NhbGFyKDIgKiBNYXRoLnNxcnQoTWF0aC5QSSkpO1xuXHR9XG5cbn1cblxuQW1iaWVudExpZ2h0UHJvYmUucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0UHJvYmUgPSB0cnVlO1xuXG5jb25zdCBfZXllUmlnaHQgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX2V5ZUxlZnQgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3Byb2plY3Rpb25NYXRyaXggPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY2xhc3MgU3RlcmVvQ2FtZXJhIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50eXBlID0gJ1N0ZXJlb0NhbWVyYSc7XG5cdFx0dGhpcy5hc3BlY3QgPSAxO1xuXHRcdHRoaXMuZXllU2VwID0gMC4wNjQ7XG5cdFx0dGhpcy5jYW1lcmFMID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdFx0dGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSk7XG5cdFx0dGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmNhbWVyYVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHR0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSgyKTtcblx0XHR0aGlzLmNhbWVyYVIubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2NhY2hlID0ge1xuXHRcdFx0Zm9jdXM6IG51bGwsXG5cdFx0XHRmb3Y6IG51bGwsXG5cdFx0XHRhc3BlY3Q6IG51bGwsXG5cdFx0XHRuZWFyOiBudWxsLFxuXHRcdFx0ZmFyOiBudWxsLFxuXHRcdFx0em9vbTogbnVsbCxcblx0XHRcdGV5ZVNlcDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUoY2FtZXJhKSB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLl9jYWNoZTtcblx0XHRjb25zdCBuZWVkc1VwZGF0ZSA9IGNhY2hlLmZvY3VzICE9PSBjYW1lcmEuZm9jdXMgfHwgY2FjaGUuZm92ICE9PSBjYW1lcmEuZm92IHx8IGNhY2hlLmFzcGVjdCAhPT0gY2FtZXJhLmFzcGVjdCAqIHRoaXMuYXNwZWN0IHx8IGNhY2hlLm5lYXIgIT09IGNhbWVyYS5uZWFyIHx8IGNhY2hlLmZhciAhPT0gY2FtZXJhLmZhciB8fCBjYWNoZS56b29tICE9PSBjYW1lcmEuem9vbSB8fCBjYWNoZS5leWVTZXAgIT09IHRoaXMuZXllU2VwO1xuXG5cdFx0aWYgKG5lZWRzVXBkYXRlKSB7XG5cdFx0XHRjYWNoZS5mb2N1cyA9IGNhbWVyYS5mb2N1cztcblx0XHRcdGNhY2hlLmZvdiA9IGNhbWVyYS5mb3Y7XG5cdFx0XHRjYWNoZS5hc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XG5cdFx0XHRjYWNoZS5uZWFyID0gY2FtZXJhLm5lYXI7XG5cdFx0XHRjYWNoZS5mYXIgPSBjYW1lcmEuZmFyO1xuXHRcdFx0Y2FjaGUuem9vbSA9IGNhbWVyYS56b29tO1xuXHRcdFx0Y2FjaGUuZXllU2VwID0gdGhpcy5leWVTZXA7IC8vIE9mZi1heGlzIHN0ZXJlb3Njb3BpYyBlZmZlY3QgYmFzZWQgb25cblx0XHRcdC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXG5cblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXG5cdFx0XHRjb25zdCBleWVTZXBIYWxmID0gY2FjaGUuZXllU2VwIC8gMjtcblx0XHRcdGNvbnN0IGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcEhhbGYgKiBjYWNoZS5uZWFyIC8gY2FjaGUuZm9jdXM7XG5cdFx0XHRjb25zdCB5bWF4ID0gY2FjaGUubmVhciAqIE1hdGgudGFuKERFRzJSQUQgKiBjYWNoZS5mb3YgKiAwLjUpIC8gY2FjaGUuem9vbTtcblx0XHRcdGxldCB4bWluLCB4bWF4OyAvLyB0cmFuc2xhdGUgeE9mZnNldFxuXG5cdFx0XHRfZXllTGVmdC5lbGVtZW50c1sxMl0gPSAtZXllU2VwSGFsZjtcblx0XHRcdF9leWVSaWdodC5lbGVtZW50c1sxMl0gPSBleWVTZXBIYWxmOyAvLyBmb3IgbGVmdCBleWVcblxuXHRcdFx0eG1pbiA9IC15bWF4ICogY2FjaGUuYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xuXHRcdFx0eG1heCA9IHltYXggKiBjYWNoZS5hc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XG5cdFx0XHRfcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXSA9IDIgKiBjYWNoZS5uZWFyIC8gKHhtYXggLSB4bWluKTtcblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdID0gKHhtYXggKyB4bWluKSAvICh4bWF4IC0geG1pbik7XG5cdFx0XHR0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KF9wcm9qZWN0aW9uTWF0cml4KTsgLy8gZm9yIHJpZ2h0IGV5ZVxuXG5cdFx0XHR4bWluID0gLXltYXggKiBjYWNoZS5hc3BlY3QgLSBleWVTZXBPblByb2plY3Rpb247XG5cdFx0XHR4bWF4ID0geW1heCAqIGNhY2hlLmFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzBdID0gMiAqIGNhY2hlLm5lYXIgLyAoeG1heCAtIHhtaW4pO1xuXHRcdFx0X3Byb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0gPSAoeG1heCArIHhtaW4pIC8gKHhtYXggLSB4bWluKTtcblx0XHRcdHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoX3Byb2plY3Rpb25NYXRyaXgpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KGNhbWVyYS5tYXRyaXhXb3JsZCkubXVsdGlwbHkoX2V5ZUxlZnQpO1xuXHRcdHRoaXMuY2FtZXJhUi5tYXRyaXhXb3JsZC5jb3B5KGNhbWVyYS5tYXRyaXhXb3JsZCkubXVsdGlwbHkoX2V5ZVJpZ2h0KTtcblx0fVxuXG59XG5cbmNsYXNzIENsb2NrIHtcblx0Y29uc3RydWN0b3IoYXV0b1N0YXJ0ID0gdHJ1ZSkge1xuXHRcdHRoaXMuYXV0b1N0YXJ0ID0gYXV0b1N0YXJ0O1xuXHRcdHRoaXMuc3RhcnRUaW1lID0gMDtcblx0XHR0aGlzLm9sZFRpbWUgPSAwO1xuXHRcdHRoaXMuZWxhcHNlZFRpbWUgPSAwO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHR9XG5cblx0c3RhcnQoKSB7XG5cdFx0dGhpcy5zdGFydFRpbWUgPSBub3coKTtcblx0XHR0aGlzLm9sZFRpbWUgPSB0aGlzLnN0YXJ0VGltZTtcblx0XHR0aGlzLmVsYXBzZWRUaW1lID0gMDtcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHR0aGlzLmdldEVsYXBzZWRUaW1lKCk7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblx0fVxuXG5cdGdldEVsYXBzZWRUaW1lKCkge1xuXHRcdHRoaXMuZ2V0RGVsdGEoKTtcblx0XHRyZXR1cm4gdGhpcy5lbGFwc2VkVGltZTtcblx0fVxuXG5cdGdldERlbHRhKCkge1xuXHRcdGxldCBkaWZmID0gMDtcblxuXHRcdGlmICh0aGlzLmF1dG9TdGFydCAmJiAhdGhpcy5ydW5uaW5nKSB7XG5cdFx0XHR0aGlzLnN0YXJ0KCk7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ydW5uaW5nKSB7XG5cdFx0XHRjb25zdCBuZXdUaW1lID0gbm93KCk7XG5cdFx0XHRkaWZmID0gKG5ld1RpbWUgLSB0aGlzLm9sZFRpbWUpIC8gMTAwMDtcblx0XHRcdHRoaXMub2xkVGltZSA9IG5ld1RpbWU7XG5cdFx0XHR0aGlzLmVsYXBzZWRUaW1lICs9IGRpZmY7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxufVxuXG5mdW5jdGlvbiBub3coKSB7XG5cdHJldHVybiAodHlwZW9mIHBlcmZvcm1hbmNlID09PSAndW5kZWZpbmVkJyA/IERhdGUgOiBwZXJmb3JtYW5jZSkubm93KCk7IC8vIHNlZSAjMTA3MzJcbn1cblxuY29uc3QgX3Bvc2l0aW9uJDEgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3F1YXRlcm5pb24kMSA9IC8qQF9fUFVSRV9fKi9uZXcgUXVhdGVybmlvbigpO1xuXG5jb25zdCBfc2NhbGUkMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfb3JpZW50YXRpb24kMSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBBdWRpb0xpc3RlbmVyIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdBdWRpb0xpc3RlbmVyJztcblx0XHR0aGlzLmNvbnRleHQgPSBBdWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0dGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0XHR0aGlzLmZpbHRlciA9IG51bGw7XG5cdFx0dGhpcy50aW1lRGVsdGEgPSAwOyAvLyBwcml2YXRlXG5cblx0XHR0aGlzLl9jbG9jayA9IG5ldyBDbG9jaygpO1xuXHR9XG5cblx0Z2V0SW5wdXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2Fpbjtcblx0fVxuXG5cdHJlbW92ZUZpbHRlcigpIHtcblx0XHRpZiAodGhpcy5maWx0ZXIgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKTtcblx0XHRcdHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0XHRcdHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdFx0XHR0aGlzLmZpbHRlciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRGaWx0ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyO1xuXHR9XG5cblx0c2V0RmlsdGVyKHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZmlsdGVyICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlcik7XG5cdFx0XHR0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5maWx0ZXIgPSB2YWx1ZTtcblx0XHR0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlcik7XG5cdFx0dGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0TWFzdGVyVm9sdW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZTtcblx0fVxuXG5cdHNldE1hc3RlclZvbHVtZSh2YWx1ZSkge1xuXHRcdHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gdGhpcy5jb250ZXh0Lmxpc3RlbmVyO1xuXHRcdGNvbnN0IHVwID0gdGhpcy51cDtcblx0XHR0aGlzLnRpbWVEZWx0YSA9IHRoaXMuX2Nsb2NrLmdldERlbHRhKCk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoX3Bvc2l0aW9uJDEsIF9xdWF0ZXJuaW9uJDEsIF9zY2FsZSQxKTtcblxuXHRcdF9vcmllbnRhdGlvbiQxLnNldCgwLCAwLCAtMSkuYXBwbHlRdWF0ZXJuaW9uKF9xdWF0ZXJuaW9uJDEpO1xuXG5cdFx0aWYgKGxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHRcdFx0Ly8gY29kZSBwYXRoIGZvciBDaHJvbWUgKHNlZSAjMTQzOTMpXG5cdFx0XHRjb25zdCBlbmRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy50aW1lRGVsdGE7XG5cdFx0XHRsaXN0ZW5lci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX3Bvc2l0aW9uJDEueCwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX3Bvc2l0aW9uJDEueSwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX3Bvc2l0aW9uJDEueiwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfb3JpZW50YXRpb24kMS54LCBlbmRUaW1lKTtcblx0XHRcdGxpc3RlbmVyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9vcmllbnRhdGlvbiQxLnksIGVuZFRpbWUpO1xuXHRcdFx0bGlzdGVuZXIuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX29yaWVudGF0aW9uJDEueiwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci51cFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodXAueCwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci51cFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodXAueSwgZW5kVGltZSk7XG5cdFx0XHRsaXN0ZW5lci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodXAueiwgZW5kVGltZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpc3RlbmVyLnNldFBvc2l0aW9uKF9wb3NpdGlvbiQxLngsIF9wb3NpdGlvbiQxLnksIF9wb3NpdGlvbiQxLnopO1xuXHRcdFx0bGlzdGVuZXIuc2V0T3JpZW50YXRpb24oX29yaWVudGF0aW9uJDEueCwgX29yaWVudGF0aW9uJDEueSwgX29yaWVudGF0aW9uJDEueiwgdXAueCwgdXAueSwgdXAueik7XG5cdFx0fVxuXHR9XG5cbn1cblxuY2xhc3MgQXVkaW8gZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGxpc3RlbmVyKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQXVkaW8nO1xuXHRcdHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcblx0XHR0aGlzLmNvbnRleHQgPSBsaXN0ZW5lci5jb250ZXh0O1xuXHRcdHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0dGhpcy5nYWluLmNvbm5lY3QobGlzdGVuZXIuZ2V0SW5wdXQoKSk7XG5cdFx0dGhpcy5hdXRvcGxheSA9IGZhbHNlO1xuXHRcdHRoaXMuYnVmZmVyID0gbnVsbDtcblx0XHR0aGlzLmRldHVuZSA9IDA7XG5cdFx0dGhpcy5sb29wID0gZmFsc2U7XG5cdFx0dGhpcy5sb29wU3RhcnQgPSAwO1xuXHRcdHRoaXMubG9vcEVuZCA9IDA7XG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xuXHRcdHRoaXMuZHVyYXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5wbGF5YmFja1JhdGUgPSAxO1xuXHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSB0cnVlO1xuXHRcdHRoaXMuc291cmNlID0gbnVsbDtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnZW1wdHknO1xuXHRcdHRoaXMuX3N0YXJ0ZWRBdCA9IDA7XG5cdFx0dGhpcy5fcHJvZ3Jlc3MgPSAwO1xuXHRcdHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRcdHRoaXMuZmlsdGVycyA9IFtdO1xuXHR9XG5cblx0Z2V0T3V0cHV0KCkge1xuXHRcdHJldHVybiB0aGlzLmdhaW47XG5cdH1cblxuXHRzZXROb2RlU291cmNlKGF1ZGlvTm9kZSkge1xuXHRcdHRoaXMuaGFzUGxheWJhY2tDb250cm9sID0gZmFsc2U7XG5cdFx0dGhpcy5zb3VyY2VUeXBlID0gJ2F1ZGlvTm9kZSc7XG5cdFx0dGhpcy5zb3VyY2UgPSBhdWRpb05vZGU7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRNZWRpYUVsZW1lbnRTb3VyY2UobWVkaWFFbGVtZW50KSB7XG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnbWVkaWFOb2RlJztcblx0XHR0aGlzLnNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UobWVkaWFFbGVtZW50KTtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldE1lZGlhU3RyZWFtU291cmNlKG1lZGlhU3RyZWFtKSB7XG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnbWVkaWFTdHJlYW1Ob2RlJztcblx0XHR0aGlzLnNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShtZWRpYVN0cmVhbSk7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRCdWZmZXIoYXVkaW9CdWZmZXIpIHtcblx0XHR0aGlzLmJ1ZmZlciA9IGF1ZGlvQnVmZmVyO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdidWZmZXInO1xuXHRcdGlmICh0aGlzLmF1dG9wbGF5KSB0aGlzLnBsYXkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHBsYXkoZGVsYXkgPSAwKSB7XG5cdFx0aWYgKHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9zdGFydGVkQXQgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKyBkZWxheTtcblx0XHRjb25zdCBzb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdFx0c291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuXHRcdHNvdXJjZS5sb29wID0gdGhpcy5sb29wO1xuXHRcdHNvdXJjZS5sb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0XHRzb3VyY2UubG9vcEVuZCA9IHRoaXMubG9vcEVuZDtcblx0XHRzb3VyY2Uub25lbmRlZCA9IHRoaXMub25FbmRlZC5iaW5kKHRoaXMpO1xuXHRcdHNvdXJjZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsIHRoaXMuX3Byb2dyZXNzICsgdGhpcy5vZmZzZXQsIHRoaXMuZHVyYXRpb24pO1xuXHRcdHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcblx0XHR0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblx0XHR0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSk7XG5cdFx0dGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpO1xuXHRcdHJldHVybiB0aGlzLmNvbm5lY3QoKTtcblx0fVxuXG5cdHBhdXNlKCkge1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XG5cdFx0XHQvLyB1cGRhdGUgY3VycmVudCBwcm9ncmVzc1xuXHRcdFx0dGhpcy5fcHJvZ3Jlc3MgKz0gTWF0aC5tYXgodGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5fc3RhcnRlZEF0LCAwKSAqIHRoaXMucGxheWJhY2tSYXRlO1xuXG5cdFx0XHRpZiAodGhpcy5sb29wID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIGVuc3VyZSBfcHJvZ3Jlc3MgZG9lcyBub3QgZXhjZWVkIGR1cmF0aW9uIHdpdGggbG9vcGVkIGF1ZGlvc1xuXHRcdFx0XHR0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX3Byb2dyZXNzICUgKHRoaXMuZHVyYXRpb24gfHwgdGhpcy5idWZmZXIuZHVyYXRpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNvdXJjZS5zdG9wKCk7XG5cdFx0XHR0aGlzLnNvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0XHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fcHJvZ3Jlc3MgPSAwO1xuXHRcdHRoaXMuc291cmNlLnN0b3AoKTtcblx0XHR0aGlzLnNvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0XHR0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDEsIGwgPSB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyc1tpIC0gMV0uY29ubmVjdCh0aGlzLmZpbHRlcnNbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1swXSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAxLCBsID0gdGhpcy5maWx0ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR0aGlzLmZpbHRlcnNbaSAtIDFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGggLSAxXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RmlsdGVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXJzO1xuXHR9XG5cblx0c2V0RmlsdGVycyh2YWx1ZSkge1xuXHRcdGlmICghdmFsdWUpIHZhbHVlID0gW107XG5cblx0XHRpZiAodGhpcy5fY29ubmVjdGVkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0XHRcdHRoaXMuZmlsdGVycyA9IHZhbHVlLnNsaWNlKCk7XG5cdFx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5maWx0ZXJzID0gdmFsdWUuc2xpY2UoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldERldHVuZSh2YWx1ZSkge1xuXHRcdHRoaXMuZGV0dW5lID0gdmFsdWU7XG5cdFx0aWYgKHRoaXMuc291cmNlLmRldHVuZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIG9ubHkgc2V0IGRldHVuZSB3aGVuIGF2YWlsYWJsZVxuXG5cdFx0aWYgKHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RGV0dW5lKCkge1xuXHRcdHJldHVybiB0aGlzLmRldHVuZTtcblx0fVxuXG5cdGdldEZpbHRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF07XG5cdH1cblxuXHRzZXRGaWx0ZXIoZmlsdGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0RmlsdGVycyhmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKTtcblx0fVxuXG5cdHNldFBsYXliYWNrUmF0ZSh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wbGF5YmFja1JhdGUgPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFBsYXliYWNrUmF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU7XG5cdH1cblxuXHRvbkVuZGVkKCkge1xuXHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cdH1cblxuXHRnZXRMb29wKCkge1xuXHRcdGlmICh0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubG9vcDtcblx0fVxuXG5cdHNldExvb3AodmFsdWUpIHtcblx0XHRpZiAodGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IGZhbHNlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubG9vcCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnNvdXJjZS5sb29wID0gdGhpcy5sb29wO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0TG9vcFN0YXJ0KHZhbHVlKSB7XG5cdFx0dGhpcy5sb29wU3RhcnQgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldExvb3BFbmQodmFsdWUpIHtcblx0XHR0aGlzLmxvb3BFbmQgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFZvbHVtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWU7XG5cdH1cblxuXHRzZXRWb2x1bWUodmFsdWUpIHtcblx0XHR0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jb25zdCBfcG9zaXRpb24gPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3F1YXRlcm5pb24gPSAvKkBfX1BVUkVfXyovbmV3IFF1YXRlcm5pb24oKTtcblxuY29uc3QgX3NjYWxlID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9vcmllbnRhdGlvbiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBQb3NpdGlvbmFsQXVkaW8gZXh0ZW5kcyBBdWRpbyB7XG5cdGNvbnN0cnVjdG9yKGxpc3RlbmVyKSB7XG5cdFx0c3VwZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMucGFubmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHRcdHRoaXMucGFubmVyLnBhbm5pbmdNb2RlbCA9ICdIUlRGJztcblx0XHR0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbik7XG5cdH1cblxuXHRnZXRPdXRwdXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFubmVyO1xuXHR9XG5cblx0Z2V0UmVmRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlO1xuXHR9XG5cblx0c2V0UmVmRGlzdGFuY2UodmFsdWUpIHtcblx0XHR0aGlzLnBhbm5lci5yZWZEaXN0YW5jZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Um9sbG9mZkZhY3RvcigpIHtcblx0XHRyZXR1cm4gdGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcjtcblx0fVxuXG5cdHNldFJvbGxvZmZGYWN0b3IodmFsdWUpIHtcblx0XHR0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXREaXN0YW5jZU1vZGVsKCkge1xuXHRcdHJldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsO1xuXHR9XG5cblx0c2V0RGlzdGFuY2VNb2RlbCh2YWx1ZSkge1xuXHRcdHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWwgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldE1heERpc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZTtcblx0fVxuXG5cdHNldE1heERpc3RhbmNlKHZhbHVlKSB7XG5cdFx0dGhpcy5wYW5uZXIubWF4RGlzdGFuY2UgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldERpcmVjdGlvbmFsQ29uZShjb25lSW5uZXJBbmdsZSwgY29uZU91dGVyQW5nbGUsIGNvbmVPdXRlckdhaW4pIHtcblx0XHR0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZSA9IGNvbmVJbm5lckFuZ2xlO1xuXHRcdHRoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlID0gY29uZU91dGVyQW5nbGU7XG5cdFx0dGhpcy5wYW5uZXIuY29uZU91dGVyR2FpbiA9IGNvbmVPdXRlckdhaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZChmb3JjZSkge1xuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKTtcblx0XHRpZiAodGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IHRydWUgJiYgdGhpcy5pc1BsYXlpbmcgPT09IGZhbHNlKSByZXR1cm47XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcXVhdGVybmlvbiwgX3NjYWxlKTtcblxuXHRcdF9vcmllbnRhdGlvbi5zZXQoMCwgMCwgMSkuYXBwbHlRdWF0ZXJuaW9uKF9xdWF0ZXJuaW9uKTtcblxuXHRcdGNvbnN0IHBhbm5lciA9IHRoaXMucGFubmVyO1xuXG5cdFx0aWYgKHBhbm5lci5wb3NpdGlvblgpIHtcblx0XHRcdC8vIGNvZGUgcGF0aCBmb3IgQ2hyb21lIGFuZCBGaXJlZm94IChzZWUgIzE0MzkzKVxuXHRcdFx0Y29uc3QgZW5kVGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubGlzdGVuZXIudGltZURlbHRhO1xuXHRcdFx0cGFubmVyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfcG9zaXRpb24ueCwgZW5kVGltZSk7XG5cdFx0XHRwYW5uZXIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9wb3NpdGlvbi55LCBlbmRUaW1lKTtcblx0XHRcdHBhbm5lci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX3Bvc2l0aW9uLnosIGVuZFRpbWUpO1xuXHRcdFx0cGFubmVyLm9yaWVudGF0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShfb3JpZW50YXRpb24ueCwgZW5kVGltZSk7XG5cdFx0XHRwYW5uZXIub3JpZW50YXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKF9vcmllbnRhdGlvbi55LCBlbmRUaW1lKTtcblx0XHRcdHBhbm5lci5vcmllbnRhdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoX29yaWVudGF0aW9uLnosIGVuZFRpbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYW5uZXIuc2V0UG9zaXRpb24oX3Bvc2l0aW9uLngsIF9wb3NpdGlvbi55LCBfcG9zaXRpb24ueik7XG5cdFx0XHRwYW5uZXIuc2V0T3JpZW50YXRpb24oX29yaWVudGF0aW9uLngsIF9vcmllbnRhdGlvbi55LCBfb3JpZW50YXRpb24ueik7XG5cdFx0fVxuXHR9XG5cbn1cblxuY2xhc3MgQXVkaW9BbmFseXNlciB7XG5cdGNvbnN0cnVjdG9yKGF1ZGlvLCBmZnRTaXplID0gMjA0OCkge1xuXHRcdHRoaXMuYW5hbHlzZXIgPSBhdWRpby5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdFx0dGhpcy5hbmFseXNlci5mZnRTaXplID0gZmZ0U2l6ZTtcblx0XHR0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTtcblx0XHRhdWRpby5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpO1xuXHR9XG5cblx0Z2V0RnJlcXVlbmN5RGF0YSgpIHtcblx0XHR0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YTtcblx0fVxuXG5cdGdldEF2ZXJhZ2VGcmVxdWVuY3koKSB7XG5cdFx0bGV0IHZhbHVlID0gMDtcblx0XHRjb25zdCBkYXRhID0gdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbHVlICs9IGRhdGFbaV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlIC8gZGF0YS5sZW5ndGg7XG5cdH1cblxufVxuXG5jbGFzcyBQcm9wZXJ0eU1peGVyIHtcblx0Y29uc3RydWN0b3IoYmluZGluZywgdHlwZU5hbWUsIHZhbHVlU2l6ZSkge1xuXHRcdHRoaXMuYmluZGluZyA9IGJpbmRpbmc7XG5cdFx0dGhpcy52YWx1ZVNpemUgPSB2YWx1ZVNpemU7XG5cdFx0bGV0IG1peEZ1bmN0aW9uLCBtaXhGdW5jdGlvbkFkZGl0aXZlLCBzZXRJZGVudGl0eTsgLy8gYnVmZmVyIGxheW91dDogWyBpbmNvbWluZyB8IGFjY3UwIHwgYWNjdTEgfCBvcmlnIHwgYWRkQWNjdSB8IChvcHRpb25hbCB3b3JrKSBdXG5cdFx0Ly9cblx0XHQvLyBpbnRlcnBvbGF0b3JzIGNhbiB1c2UgLmJ1ZmZlciBhcyB0aGVpciAucmVzdWx0XG5cdFx0Ly8gdGhlIGRhdGEgdGhlbiBnb2VzIHRvICdpbmNvbWluZydcblx0XHQvL1xuXHRcdC8vICdhY2N1MCcgYW5kICdhY2N1MScgYXJlIHVzZWQgZnJhbWUtaW50ZXJsZWF2ZWQgZm9yXG5cdFx0Ly8gdGhlIGN1bXVsYXRpdmUgcmVzdWx0IGFuZCBhcmUgY29tcGFyZWQgdG8gZGV0ZWN0XG5cdFx0Ly8gY2hhbmdlc1xuXHRcdC8vXG5cdFx0Ly8gJ29yaWcnIHN0b3JlcyB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgdGhlIHByb3BlcnR5XG5cdFx0Ly9cblx0XHQvLyAnYWRkJyBpcyB1c2VkIGZvciBhZGRpdGl2ZSBjdW11bGF0aXZlIHJlc3VsdHNcblx0XHQvL1xuXHRcdC8vICd3b3JrJyBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBwcmVzZW50IGZvciBxdWF0ZXJuaW9uIHR5cGVzLiBJdCBpcyB1c2VkXG5cdFx0Ly8gdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHF1YXRlcm5pb24gbXVsdGlwbGljYXRpb24gcmVzdWx0c1xuXG5cdFx0c3dpdGNoICh0eXBlTmFtZSkge1xuXHRcdFx0Y2FzZSAncXVhdGVybmlvbic6XG5cdFx0XHRcdG1peEZ1bmN0aW9uID0gdGhpcy5fc2xlcnA7XG5cdFx0XHRcdG1peEZ1bmN0aW9uQWRkaXRpdmUgPSB0aGlzLl9zbGVycEFkZGl0aXZlO1xuXHRcdFx0XHRzZXRJZGVudGl0eSA9IHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uO1xuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkodmFsdWVTaXplICogNik7XG5cdFx0XHRcdHRoaXMuX3dvcmtJbmRleCA9IDU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdG1peEZ1bmN0aW9uID0gdGhpcy5fc2VsZWN0OyAvLyBVc2UgdGhlIHJlZ3VsYXIgbWl4IGZ1bmN0aW9uIGFuZCBmb3IgYWRkaXRpdmUgb24gdGhlc2UgdHlwZXMsXG5cdFx0XHRcdC8vIGFkZGl0aXZlIGlzIG5vdCByZWxldmFudCBmb3Igbm9uLW51bWVyaWMgdHlwZXNcblxuXHRcdFx0XHRtaXhGdW5jdGlvbkFkZGl0aXZlID0gdGhpcy5fc2VsZWN0O1xuXHRcdFx0XHRzZXRJZGVudGl0eSA9IHRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcjtcblx0XHRcdFx0dGhpcy5idWZmZXIgPSBuZXcgQXJyYXkodmFsdWVTaXplICogNSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtaXhGdW5jdGlvbiA9IHRoaXMuX2xlcnA7XG5cdFx0XHRcdG1peEZ1bmN0aW9uQWRkaXRpdmUgPSB0aGlzLl9sZXJwQWRkaXRpdmU7XG5cdFx0XHRcdHNldElkZW50aXR5ID0gdGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWM7XG5cdFx0XHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSh2YWx1ZVNpemUgKiA1KTtcblx0XHR9XG5cblx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb24gPSBtaXhGdW5jdGlvbjtcblx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZSA9IG1peEZ1bmN0aW9uQWRkaXRpdmU7XG5cdFx0dGhpcy5fc2V0SWRlbnRpdHkgPSBzZXRJZGVudGl0eTtcblx0XHR0aGlzLl9vcmlnSW5kZXggPSAzO1xuXHRcdHRoaXMuX2FkZEluZGV4ID0gNDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSAwO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID0gMDtcblx0XHR0aGlzLnVzZUNvdW50ID0gMDtcblx0XHR0aGlzLnJlZmVyZW5jZUNvdW50ID0gMDtcblx0fSAvLyBhY2N1bXVsYXRlIGRhdGEgaW4gdGhlICdpbmNvbWluZycgcmVnaW9uIGludG8gJ2FjY3U8aT4nXG5cblxuXHRhY2N1bXVsYXRlKGFjY3VJbmRleCwgd2VpZ2h0KSB7XG5cdFx0Ly8gbm90ZTogaGFwcGlseSBhY2N1bXVsYXRpbmcgbm90aGluZyB3aGVuIHdlaWdodCA9IDAsIHRoZSBjYWxsZXIga25vd3Ncblx0XHQvLyB0aGUgd2VpZ2h0IGFuZCBzaG91bGRuJ3QgaGF2ZSBtYWRlIHRoZSBjYWxsIGluIHRoZSBmaXJzdCBwbGFjZVxuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG9mZnNldCA9IGFjY3VJbmRleCAqIHN0cmlkZSArIHN0cmlkZTtcblx0XHRsZXQgY3VycmVudFdlaWdodCA9IHRoaXMuY3VtdWxhdGl2ZVdlaWdodDtcblxuXHRcdGlmIChjdXJyZW50V2VpZ2h0ID09PSAwKSB7XG5cdFx0XHQvLyBhY2N1TiA6PSBpbmNvbWluZyAqIHdlaWdodFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IHN0cmlkZTsgKytpKSB7XG5cdFx0XHRcdGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGJ1ZmZlcltpXTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFdlaWdodCA9IHdlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYWNjdU4gOj0gYWNjdU4gKyBpbmNvbWluZyAqIHdlaWdodFxuXHRcdFx0Y3VycmVudFdlaWdodCArPSB3ZWlnaHQ7XG5cdFx0XHRjb25zdCBtaXggPSB3ZWlnaHQgLyBjdXJyZW50V2VpZ2h0O1xuXG5cdFx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb24oYnVmZmVyLCBvZmZzZXQsIDAsIG1peCwgc3RyaWRlKTtcblx0XHR9XG5cblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHQgPSBjdXJyZW50V2VpZ2h0O1xuXHR9IC8vIGFjY3VtdWxhdGUgZGF0YSBpbiB0aGUgJ2luY29taW5nJyByZWdpb24gaW50byAnYWRkJ1xuXG5cblx0YWNjdW11bGF0ZUFkZGl0aXZlKHdlaWdodCkge1xuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX2FkZEluZGV4O1xuXG5cdFx0aWYgKHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlID09PSAwKSB7XG5cdFx0XHQvLyBhZGQgPSBpZGVudGl0eVxuXHRcdFx0dGhpcy5fc2V0SWRlbnRpdHkoKTtcblx0XHR9IC8vIGFkZCA6PSBhZGQgKyBpbmNvbWluZyAqIHdlaWdodFxuXG5cblx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShidWZmZXIsIG9mZnNldCwgMCwgd2VpZ2h0LCBzdHJpZGUpO1xuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgKz0gd2VpZ2h0O1xuXHR9IC8vIGFwcGx5IHRoZSBzdGF0ZSBvZiAnYWNjdTxpPicgdG8gdGhlIGJpbmRpbmcgd2hlbiBhY2N1cyBkaWZmZXJcblxuXG5cdGFwcGx5KGFjY3VJbmRleCkge1xuXHRcdGNvbnN0IHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0XHRcdG9mZnNldCA9IGFjY3VJbmRleCAqIHN0cmlkZSArIHN0cmlkZSxcblx0XHRcdFx0XHR3ZWlnaHQgPSB0aGlzLmN1bXVsYXRpdmVXZWlnaHQsXG5cdFx0XHRcdFx0d2VpZ2h0QWRkaXRpdmUgPSB0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxcblx0XHRcdFx0XHRiaW5kaW5nID0gdGhpcy5iaW5kaW5nO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodCA9IDA7XG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgPSAwO1xuXG5cdFx0aWYgKHdlaWdodCA8IDEpIHtcblx0XHRcdC8vIGFjY3VOIDo9IGFjY3VOICsgb3JpZ2luYWwgKiAoIDEgLSBjdW11bGF0aXZlV2VpZ2h0IClcblx0XHRcdGNvbnN0IG9yaWdpbmFsVmFsdWVPZmZzZXQgPSBzdHJpZGUgKiB0aGlzLl9vcmlnSW5kZXg7XG5cblx0XHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbihidWZmZXIsIG9mZnNldCwgb3JpZ2luYWxWYWx1ZU9mZnNldCwgMSAtIHdlaWdodCwgc3RyaWRlKTtcblx0XHR9XG5cblx0XHRpZiAod2VpZ2h0QWRkaXRpdmUgPiAwKSB7XG5cdFx0XHQvLyBhY2N1TiA6PSBhY2N1TiArIGFkZGl0aXZlIGFjY3VOXG5cdFx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShidWZmZXIsIG9mZnNldCwgdGhpcy5fYWRkSW5kZXggKiBzdHJpZGUsIDEsIHN0cmlkZSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IHN0cmlkZSwgZSA9IHN0cmlkZSArIHN0cmlkZTsgaSAhPT0gZTsgKytpKSB7XG5cdFx0XHRpZiAoYnVmZmVyW2ldICE9PSBidWZmZXJbaSArIHN0cmlkZV0pIHtcblx0XHRcdFx0Ly8gdmFsdWUgaGFzIGNoYW5nZWQgLT4gdXBkYXRlIHNjZW5lIGdyYXBoXG5cdFx0XHRcdGJpbmRpbmcuc2V0VmFsdWUoYnVmZmVyLCBvZmZzZXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gLy8gcmVtZW1iZXIgdGhlIHN0YXRlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eSBhbmQgY29weSBpdCB0byBib3RoIGFjY3VzXG5cblxuXHRzYXZlT3JpZ2luYWxTdGF0ZSgpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nO1xuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLFxuXHRcdFx0XHRcdG9yaWdpbmFsVmFsdWVPZmZzZXQgPSBzdHJpZGUgKiB0aGlzLl9vcmlnSW5kZXg7XG5cdFx0YmluZGluZy5nZXRWYWx1ZShidWZmZXIsIG9yaWdpbmFsVmFsdWVPZmZzZXQpOyAvLyBhY2N1WzAuLjFdIDo9IG9yaWcgLS0gaW5pdGlhbGx5IGRldGVjdCBjaGFuZ2VzIGFnYWluc3QgdGhlIG9yaWdpbmFsXG5cblx0XHRmb3IgKGxldCBpID0gc3RyaWRlLCBlID0gb3JpZ2luYWxWYWx1ZU9mZnNldDsgaSAhPT0gZTsgKytpKSB7XG5cdFx0XHRidWZmZXJbaV0gPSBidWZmZXJbb3JpZ2luYWxWYWx1ZU9mZnNldCArIGkgJSBzdHJpZGVdO1xuXHRcdH0gLy8gQWRkIHRvIGlkZW50aXR5IGZvciBhZGRpdGl2ZVxuXG5cblx0XHR0aGlzLl9zZXRJZGVudGl0eSgpO1xuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gMDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9IDA7XG5cdH0gLy8gYXBwbHkgdGhlIHN0YXRlIHByZXZpb3VzbHkgdGFrZW4gdmlhICdzYXZlT3JpZ2luYWxTdGF0ZScgdG8gdGhlIGJpbmRpbmdcblxuXG5cdHJlc3RvcmVPcmlnaW5hbFN0YXRlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsVmFsdWVPZmZzZXQgPSB0aGlzLnZhbHVlU2l6ZSAqIDM7XG5cdFx0dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLCBvcmlnaW5hbFZhbHVlT2Zmc2V0KTtcblx0fVxuXG5cdF9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpIHtcblx0XHRjb25zdCBzdGFydEluZGV4ID0gdGhpcy5fYWRkSW5kZXggKiB0aGlzLnZhbHVlU2l6ZTtcblx0XHRjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyB0aGlzLnZhbHVlU2l6ZTtcblxuXHRcdGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuXHRcdFx0dGhpcy5idWZmZXJbaV0gPSAwO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpIHtcblx0XHR0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpO1xuXG5cdFx0dGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXggKiB0aGlzLnZhbHVlU2l6ZSArIDNdID0gMTtcblx0fVxuXG5cdF9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuX29yaWdJbmRleCAqIHRoaXMudmFsdWVTaXplO1xuXHRcdGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fYWRkSW5kZXggKiB0aGlzLnZhbHVlU2l6ZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZVNpemU7IGkrKykge1xuXHRcdFx0dGhpcy5idWZmZXJbdGFyZ2V0SW5kZXggKyBpXSA9IHRoaXMuYnVmZmVyW3N0YXJ0SW5kZXggKyBpXTtcblx0XHR9XG5cdH0gLy8gbWl4IGZ1bmN0aW9uc1xuXG5cblx0X3NlbGVjdChidWZmZXIsIGRzdE9mZnNldCwgc3JjT2Zmc2V0LCB0LCBzdHJpZGUpIHtcblx0XHRpZiAodCA+PSAwLjUpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsraSkge1xuXHRcdFx0XHRidWZmZXJbZHN0T2Zmc2V0ICsgaV0gPSBidWZmZXJbc3JjT2Zmc2V0ICsgaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X3NsZXJwKGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQpIHtcblx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdChidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgc3JjT2Zmc2V0LCB0KTtcblx0fVxuXG5cdF9zbGVycEFkZGl0aXZlKGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSkge1xuXHRcdGNvbnN0IHdvcmtPZmZzZXQgPSB0aGlzLl93b3JrSW5kZXggKiBzdHJpZGU7IC8vIFN0b3JlIHJlc3VsdCBpbiBpbnRlcm1lZGlhdGUgYnVmZmVyIG9mZnNldFxuXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChidWZmZXIsIHdvcmtPZmZzZXQsIGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIHNyY09mZnNldCk7IC8vIFNsZXJwIHRvIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0XG5cblx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdChidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgd29ya09mZnNldCwgdCk7XG5cdH1cblxuXHRfbGVycChidWZmZXIsIGRzdE9mZnNldCwgc3JjT2Zmc2V0LCB0LCBzdHJpZGUpIHtcblx0XHRjb25zdCBzID0gMSAtIHQ7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArK2kpIHtcblx0XHRcdGNvbnN0IGogPSBkc3RPZmZzZXQgKyBpO1xuXHRcdFx0YnVmZmVyW2pdID0gYnVmZmVyW2pdICogcyArIGJ1ZmZlcltzcmNPZmZzZXQgKyBpXSAqIHQ7XG5cdFx0fVxuXHR9XG5cblx0X2xlcnBBZGRpdGl2ZShidWZmZXIsIGRzdE9mZnNldCwgc3JjT2Zmc2V0LCB0LCBzdHJpZGUpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArK2kpIHtcblx0XHRcdGNvbnN0IGogPSBkc3RPZmZzZXQgKyBpO1xuXHRcdFx0YnVmZmVyW2pdID0gYnVmZmVyW2pdICsgYnVmZmVyW3NyY09mZnNldCArIGldICogdDtcblx0XHR9XG5cdH1cblxufVxuXG4vLyBDaGFyYWN0ZXJzIFtdLjovIGFyZSByZXNlcnZlZCBmb3IgdHJhY2sgYmluZGluZyBzeW50YXguXG5jb25zdCBfUkVTRVJWRURfQ0hBUlNfUkUgPSAnXFxcXFtcXFxcXVxcXFwuOlxcXFwvJztcblxuY29uc3QgX3Jlc2VydmVkUmUgPSBuZXcgUmVnRXhwKCdbJyArIF9SRVNFUlZFRF9DSEFSU19SRSArICddJywgJ2cnKTsgLy8gQXR0ZW1wdHMgdG8gYWxsb3cgbm9kZSBuYW1lcyBmcm9tIGFueSBsYW5ndWFnZS4gRVM1J3MgYFxcd2AgcmVnZXhwIG1hdGNoZXNcbi8vIG9ubHkgbGF0aW4gY2hhcmFjdGVycywgYW5kIHRoZSB1bmljb2RlIFxccHtMfSBpcyBub3QgeWV0IHN1cHBvcnRlZC4gU29cbi8vIGluc3RlYWQsIHdlIGV4Y2x1ZGUgcmVzZXJ2ZWQgY2hhcmFjdGVycyBhbmQgbWF0Y2ggZXZlcnl0aGluZyBlbHNlLlxuXG5cbmNvbnN0IF93b3JkQ2hhciA9ICdbXicgKyBfUkVTRVJWRURfQ0hBUlNfUkUgKyAnXSc7XG5cbmNvbnN0IF93b3JkQ2hhck9yRG90ID0gJ1teJyArIF9SRVNFUlZFRF9DSEFSU19SRS5yZXBsYWNlKCdcXFxcLicsICcnKSArICddJzsgLy8gUGFyZW50IGRpcmVjdG9yaWVzLCBkZWxpbWl0ZWQgYnkgJy8nIG9yICc6Jy4gQ3VycmVudGx5IHVudXNlZCwgYnV0IG11c3Rcbi8vIGJlIG1hdGNoZWQgdG8gcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIHRyYWNrIG5hbWUuXG5cblxuY29uc3QgX2RpcmVjdG9yeVJlID0gLygoPzpXQytbXFwvOl0pKikvLnNvdXJjZS5yZXBsYWNlKCdXQycsIF93b3JkQ2hhcik7IC8vIFRhcmdldCBub2RlLiBNYXkgY29udGFpbiB3b3JkIGNoYXJhY3RlcnMgKGEtekEtWjAtOV8pIGFuZCAnLicgb3IgJy0nLlxuXG5cbmNvbnN0IF9ub2RlUmUgPSAvKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCdXQ09EJywgX3dvcmRDaGFyT3JEb3QpOyAvLyBPYmplY3Qgb24gdGFyZ2V0IG5vZGUsIGFuZCBhY2Nlc3Nvci4gTWF5IG5vdCBjb250YWluIHJlc2VydmVkXG4vLyBjaGFyYWN0ZXJzLiBBY2Nlc3NvciBtYXkgY29udGFpbiBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBjbG9zaW5nIGJyYWNrZXQuXG5cblxuY29uc3QgX29iamVjdFJlID0gLyg/OlxcLihXQyspKD86XFxbKC4rKVxcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCdXQycsIF93b3JkQ2hhcik7IC8vIFByb3BlcnR5IGFuZCBhY2Nlc3Nvci4gTWF5IG5vdCBjb250YWluIHJlc2VydmVkIGNoYXJhY3RlcnMuIEFjY2Vzc29yIG1heVxuLy8gY29udGFpbiBhbnkgbm9uLWJyYWNrZXQgY2hhcmFjdGVycy5cblxuXG5jb25zdCBfcHJvcGVydHlSZSA9IC9cXC4oV0MrKSg/OlxcWyguKylcXF0pPy8uc291cmNlLnJlcGxhY2UoJ1dDJywgX3dvcmRDaGFyKTtcblxuY29uc3QgX3RyYWNrUmUgPSBuZXcgUmVnRXhwKCcnICsgJ14nICsgX2RpcmVjdG9yeVJlICsgX25vZGVSZSArIF9vYmplY3RSZSArIF9wcm9wZXJ0eVJlICsgJyQnKTtcblxuY29uc3QgX3N1cHBvcnRlZE9iamVjdE5hbWVzID0gWydtYXRlcmlhbCcsICdtYXRlcmlhbHMnLCAnYm9uZXMnXTtcblxuY2xhc3MgQ29tcG9zaXRlIHtcblx0Y29uc3RydWN0b3IodGFyZ2V0R3JvdXAsIHBhdGgsIG9wdGlvbmFsUGFyc2VkUGF0aCkge1xuXHRcdGNvbnN0IHBhcnNlZFBhdGggPSBvcHRpb25hbFBhcnNlZFBhdGggfHwgUHJvcGVydHlCaW5kaW5nLnBhcnNlVHJhY2tOYW1lKHBhdGgpO1xuXHRcdHRoaXMuX3RhcmdldEdyb3VwID0gdGFyZ2V0R3JvdXA7XG5cdFx0dGhpcy5fYmluZGluZ3MgPSB0YXJnZXRHcm91cC5zdWJzY3JpYmVfKHBhdGgsIHBhcnNlZFBhdGgpO1xuXHR9XG5cblx0Z2V0VmFsdWUoYXJyYXksIG9mZnNldCkge1xuXHRcdHRoaXMuYmluZCgpOyAvLyBiaW5kIGFsbCBiaW5kaW5nXG5cblx0XHRjb25zdCBmaXJzdFZhbGlkSW5kZXggPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRcdFx0YmluZGluZyA9IHRoaXMuX2JpbmRpbmdzW2ZpcnN0VmFsaWRJbmRleF07IC8vIGFuZCBvbmx5IGNhbGwgLmdldFZhbHVlIG9uIHRoZSBmaXJzdFxuXG5cdFx0aWYgKGJpbmRpbmcgIT09IHVuZGVmaW5lZCkgYmluZGluZy5nZXRWYWx1ZShhcnJheSwgb2Zmc2V0KTtcblx0fVxuXG5cdHNldFZhbHVlKGFycmF5LCBvZmZzZXQpIHtcblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRiaW5kaW5nc1tpXS5zZXRWYWx1ZShhcnJheSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRiaW5kKCkge1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRmb3IgKGxldCBpID0gdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGJpbmRpbmdzW2ldLmJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHR1bmJpbmQoKSB7XG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncztcblxuXHRcdGZvciAobGV0IGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0YmluZGluZ3NbaV0udW5iaW5kKCk7XG5cdFx0fVxuXHR9XG5cbn0gLy8gTm90ZTogVGhpcyBjbGFzcyB1c2VzIGEgU3RhdGUgcGF0dGVybiBvbiBhIHBlci1tZXRob2QgYmFzaXM6XG4vLyAnYmluZCcgc2V0cyAndGhpcy5nZXRWYWx1ZScgLyAnc2V0VmFsdWUnIGFuZCBzaGFkb3dzIHRoZVxuLy8gcHJvdG90eXBlIHZlcnNpb24gb2YgdGhlc2UgbWV0aG9kcyB3aXRoIG9uZSB0aGF0IHJlcHJlc2VudHNcbi8vIHRoZSBib3VuZCBzdGF0ZS4gV2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCB0aGUgbWV0aG9kc1xuLy8gYmVjb21lIG5vLW9wcy5cblxuXG5jbGFzcyBQcm9wZXJ0eUJpbmRpbmcge1xuXHRjb25zdHJ1Y3Rvcihyb290Tm9kZSwgcGF0aCwgcGFyc2VkUGF0aCkge1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdFx0dGhpcy5wYXJzZWRQYXRoID0gcGFyc2VkUGF0aCB8fCBQcm9wZXJ0eUJpbmRpbmcucGFyc2VUcmFja05hbWUocGF0aCk7XG5cdFx0dGhpcy5ub2RlID0gUHJvcGVydHlCaW5kaW5nLmZpbmROb2RlKHJvb3ROb2RlLCB0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpIHx8IHJvb3ROb2RlO1xuXHRcdHRoaXMucm9vdE5vZGUgPSByb290Tm9kZTsgLy8gaW5pdGlhbCBzdGF0ZSBvZiB0aGVzZSBtZXRob2RzIHRoYXQgY2FsbHMgJ2JpbmQnXG5cblx0XHR0aGlzLmdldFZhbHVlID0gdGhpcy5fZ2V0VmFsdWVfdW5ib3VuZDtcblx0XHR0aGlzLnNldFZhbHVlID0gdGhpcy5fc2V0VmFsdWVfdW5ib3VuZDtcblx0fVxuXG5cdHN0YXRpYyBjcmVhdGUocm9vdCwgcGF0aCwgcGFyc2VkUGF0aCkge1xuXHRcdGlmICghKHJvb3QgJiYgcm9vdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwKSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9wZXJ0eUJpbmRpbmcocm9vdCwgcGF0aCwgcGFyc2VkUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZShyb290LCBwYXRoLCBwYXJzZWRQYXRoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFJlcGxhY2VzIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzIGFuZCByZW1vdmVzIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZnJvbVxuXHQgKiBub2RlIG5hbWVzLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHBhcnNlVHJhY2tOYW1lKCkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vZGUgbmFtZSB0byBiZSBzYW5pdGl6ZWQuXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cblxuXHRzdGF0aWMgc2FuaXRpemVOb2RlTmFtZShuYW1lKSB7XG5cdFx0cmV0dXJuIG5hbWUucmVwbGFjZSgvXFxzL2csICdfJykucmVwbGFjZShfcmVzZXJ2ZWRSZSwgJycpO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlVHJhY2tOYW1lKHRyYWNrTmFtZSkge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSBfdHJhY2tSZS5leGVjKHRyYWNrTmFtZSk7XG5cblx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAnICsgdHJhY2tOYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHRzID0ge1xuXHRcdFx0Ly8gZGlyZWN0b3J5TmFtZTogbWF0Y2hlc1sgMSBdLCAvLyAodHNjaHcpIGN1cnJlbnRseSB1bnVzZWRcblx0XHRcdG5vZGVOYW1lOiBtYXRjaGVzWzJdLFxuXHRcdFx0b2JqZWN0TmFtZTogbWF0Y2hlc1szXSxcblx0XHRcdG9iamVjdEluZGV4OiBtYXRjaGVzWzRdLFxuXHRcdFx0cHJvcGVydHlOYW1lOiBtYXRjaGVzWzVdLFxuXHRcdFx0Ly8gcmVxdWlyZWRcblx0XHRcdHByb3BlcnR5SW5kZXg6IG1hdGNoZXNbNl1cblx0XHR9O1xuXHRcdGNvbnN0IGxhc3REb3QgPSByZXN1bHRzLm5vZGVOYW1lICYmIHJlc3VsdHMubm9kZU5hbWUubGFzdEluZGV4T2YoJy4nKTtcblxuXHRcdGlmIChsYXN0RG90ICE9PSB1bmRlZmluZWQgJiYgbGFzdERvdCAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IG9iamVjdE5hbWUgPSByZXN1bHRzLm5vZGVOYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7IC8vIE9iamVjdCBuYW1lcyBtdXN0IGJlIGNoZWNrZWQgYWdhaW5zdCBhbiBhbGxvd2xpc3QuIE90aGVyd2lzZSwgdGhlcmVcblx0XHRcdC8vIGlzIG5vIHdheSB0byBwYXJzZSAnZm9vLmJhci5iYXonOiAnYmF6JyBtdXN0IGJlIGEgcHJvcGVydHksIGJ1dFxuXHRcdFx0Ly8gJ2JhcicgY291bGQgYmUgdGhlIG9iamVjdE5hbWUsIG9yIHBhcnQgb2YgYSBub2RlTmFtZSAod2hpY2ggY2FuXG5cdFx0XHQvLyBpbmNsdWRlICcuJyBjaGFyYWN0ZXJzKS5cblxuXHRcdFx0aWYgKF9zdXBwb3J0ZWRPYmplY3ROYW1lcy5pbmRleE9mKG9iamVjdE5hbWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXN1bHRzLm5vZGVOYW1lID0gcmVzdWx0cy5ub2RlTmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7XG5cdFx0XHRcdHJlc3VsdHMub2JqZWN0TmFtZSA9IG9iamVjdE5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdHMucHJvcGVydHlOYW1lID09PSBudWxsIHx8IHJlc3VsdHMucHJvcGVydHlOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAnICsgdHJhY2tOYW1lKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdHN0YXRpYyBmaW5kTm9kZShyb290LCBub2RlTmFtZSkge1xuXHRcdGlmICghbm9kZU5hbWUgfHwgbm9kZU5hbWUgPT09ICcnIHx8IG5vZGVOYW1lID09PSAnLicgfHwgbm9kZU5hbWUgPT09IC0xIHx8IG5vZGVOYW1lID09PSByb290Lm5hbWUgfHwgbm9kZU5hbWUgPT09IHJvb3QudXVpZCkge1xuXHRcdFx0cmV0dXJuIHJvb3Q7XG5cdFx0fSAvLyBzZWFyY2ggaW50byBza2VsZXRvbiBib25lcy5cblxuXG5cdFx0aWYgKHJvb3Quc2tlbGV0b24pIHtcblx0XHRcdGNvbnN0IGJvbmUgPSByb290LnNrZWxldG9uLmdldEJvbmVCeU5hbWUobm9kZU5hbWUpO1xuXG5cdFx0XHRpZiAoYm9uZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBib25lO1xuXHRcdFx0fVxuXHRcdH0gLy8gc2VhcmNoIGludG8gbm9kZSBzdWJ0cmVlLlxuXG5cblx0XHRpZiAocm9vdC5jaGlsZHJlbikge1xuXHRcdFx0Y29uc3Qgc2VhcmNoTm9kZVN1YnRyZWUgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkcmVuW2ldO1xuXG5cdFx0XHRcdFx0aWYgKGNoaWxkTm9kZS5uYW1lID09PSBub2RlTmFtZSB8fCBjaGlsZE5vZGUudXVpZCA9PT0gbm9kZU5hbWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBjaGlsZE5vZGU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2VhcmNoTm9kZVN1YnRyZWUoY2hpbGROb2RlLmNoaWxkcmVuKTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBzdWJUcmVlTm9kZSA9IHNlYXJjaE5vZGVTdWJ0cmVlKHJvb3QuY2hpbGRyZW4pO1xuXG5cdFx0XHRpZiAoc3ViVHJlZU5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIHN1YlRyZWVOb2RlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9IC8vIHRoZXNlIGFyZSB1c2VkIHRvIFwiYmluZFwiIGEgbm9uZXhpc3RlbnQgcHJvcGVydHlcblxuXG5cdF9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpIHt9XG5cblx0X3NldFZhbHVlX3VuYXZhaWxhYmxlKCkge30gLy8gR2V0dGVyc1xuXG5cblx0X2dldFZhbHVlX2RpcmVjdChidWZmZXIsIG9mZnNldCkge1xuXHRcdGJ1ZmZlcltvZmZzZXRdID0gdGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuXHR9XG5cblx0X2dldFZhbHVlX2FycmF5KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0Y29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzb3VyY2UubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGJ1ZmZlcltvZmZzZXQrK10gPSBzb3VyY2VbaV07XG5cdFx0fVxuXHR9XG5cblx0X2dldFZhbHVlX2FycmF5RWxlbWVudChidWZmZXIsIG9mZnNldCkge1xuXHRcdGJ1ZmZlcltvZmZzZXRdID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF07XG5cdH1cblxuXHRfZ2V0VmFsdWVfdG9BcnJheShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KGJ1ZmZlciwgb2Zmc2V0KTtcblx0fSAvLyBEaXJlY3RcblxuXG5cdF9zZXRWYWx1ZV9kaXJlY3QoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHR0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV0gPSBidWZmZXJbb2Zmc2V0XTtcblx0fVxuXG5cdF9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHR0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV0gPSBidWZmZXJbb2Zmc2V0XTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdH1cblxuXHRfc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHR0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV0gPSBidWZmZXJbb2Zmc2V0XTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fSAvLyBFbnRpcmVBcnJheVxuXG5cblx0X3NldFZhbHVlX2FycmF5KGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0Y29uc3QgZGVzdCA9IHRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZGVzdC5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0ZGVzdFtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XG5cdFx0fVxuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0Y29uc3QgZGVzdCA9IHRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZGVzdC5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0ZGVzdFtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XG5cdFx0fVxuXG5cdFx0dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkZXN0Lmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRkZXN0W2ldID0gYnVmZmVyW29mZnNldCsrXTtcblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fSAvLyBBcnJheUVsZW1lbnRcblxuXG5cdF9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoYnVmZmVyLCBvZmZzZXQpIHtcblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XSA9IGJ1ZmZlcltvZmZzZXRdO1xuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdID0gYnVmZmVyW29mZnNldF07XG5cdFx0dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGJ1ZmZlciwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF0gPSBidWZmZXJbb2Zmc2V0XTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fSAvLyBIYXNUb0Zyb21BcnJheVxuXG5cblx0X3NldFZhbHVlX2Zyb21BcnJheShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYnVmZmVyLCBvZmZzZXQpO1xuXHR9XG5cblx0X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYnVmZmVyLCBvZmZzZXQpO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0fVxuXG5cdF9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShidWZmZXIsIG9mZnNldCkge1xuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYnVmZmVyLCBvZmZzZXQpO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0X2dldFZhbHVlX3VuYm91bmQodGFyZ2V0QXJyYXksIG9mZnNldCkge1xuXHRcdHRoaXMuYmluZCgpO1xuXHRcdHRoaXMuZ2V0VmFsdWUodGFyZ2V0QXJyYXksIG9mZnNldCk7XG5cdH1cblxuXHRfc2V0VmFsdWVfdW5ib3VuZChzb3VyY2VBcnJheSwgb2Zmc2V0KSB7XG5cdFx0dGhpcy5iaW5kKCk7XG5cdFx0dGhpcy5zZXRWYWx1ZShzb3VyY2VBcnJheSwgb2Zmc2V0KTtcblx0fSAvLyBjcmVhdGUgZ2V0dGVyIC8gc2V0dGVyIHBhaXIgZm9yIGEgcHJvcGVydHkgaW4gdGhlIHNjZW5lIGdyYXBoXG5cblxuXHRiaW5kKCkge1xuXHRcdGxldCB0YXJnZXRPYmplY3QgPSB0aGlzLm5vZGU7XG5cdFx0Y29uc3QgcGFyc2VkUGF0aCA9IHRoaXMucGFyc2VkUGF0aDtcblx0XHRjb25zdCBvYmplY3ROYW1lID0gcGFyc2VkUGF0aC5vYmplY3ROYW1lO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHBhcnNlZFBhdGgucHJvcGVydHlOYW1lO1xuXHRcdGxldCBwcm9wZXJ0eUluZGV4ID0gcGFyc2VkUGF0aC5wcm9wZXJ0eUluZGV4O1xuXG5cdFx0aWYgKCF0YXJnZXRPYmplY3QpIHtcblx0XHRcdHRhcmdldE9iamVjdCA9IFByb3BlcnR5QmluZGluZy5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLCBwYXJzZWRQYXRoLm5vZGVOYW1lKSB8fCB0aGlzLnJvb3ROb2RlO1xuXHRcdFx0dGhpcy5ub2RlID0gdGFyZ2V0T2JqZWN0O1xuXHRcdH0gLy8gc2V0IGZhaWwgc3RhdGUgc28gd2UgY2FuIGp1c3QgJ3JldHVybicgb24gZXJyb3JcblxuXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTsgLy8gZW5zdXJlIHRoZXJlIGlzIGEgdmFsdWUgbm9kZVxuXG5cdFx0aWYgKCF0YXJnZXRPYmplY3QpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogJyArIHRoaXMucGF0aCArICcgYnV0IGl0IHdhc25cXCd0IGZvdW5kLicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChvYmplY3ROYW1lKSB7XG5cdFx0XHRsZXQgb2JqZWN0SW5kZXggPSBwYXJzZWRQYXRoLm9iamVjdEluZGV4OyAvLyBzcGVjaWFsIGNhc2VzIHdlcmUgd2UgbmVlZCB0byByZWFjaCBkZWVwZXIgaW50byB0aGUgaGllcmFyY2h5IHRvIGdldCB0aGUgZmFjZSBtYXRlcmlhbHMuLi4uXG5cblx0XHRcdHN3aXRjaCAob2JqZWN0TmFtZSkge1xuXHRcdFx0XHRjYXNlICdtYXRlcmlhbHMnOlxuXHRcdFx0XHRcdGlmICghdGFyZ2V0T2JqZWN0Lm1hdGVyaWFsKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4nLCB0aGlzKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIXRhcmdldE9iamVjdC5tYXRlcmlhbC5tYXRlcmlhbHMpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuJywgdGhpcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0Lm1hdGVyaWFsLm1hdGVyaWFscztcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdib25lcyc6XG5cdFx0XHRcdFx0aWYgKCF0YXJnZXRPYmplY3Quc2tlbGV0b24pIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLicsIHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gLy8gcG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb246IHNraXAgdGhpcyBpZiBwcm9wZXJ0eUluZGV4IGlzIGFscmVhZHkgYW4gaW50ZWdlclxuXHRcdFx0XHRcdC8vIGFuZCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHN0cmluZyB0byBhIHRydWUgaW50ZWdlci5cblxuXG5cdFx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0LnNrZWxldG9uLmJvbmVzOyAvLyBzdXBwb3J0IHJlc29sdmluZyBtb3JwaFRhcmdldCBuYW1lcyBpbnRvIGluZGljZXMuXG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldE9iamVjdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldE9iamVjdFtpXS5uYW1lID09PSBvYmplY3RJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRvYmplY3RJbmRleCA9IGk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKHRhcmdldE9iamVjdFtvYmplY3ROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLicsIHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdFtvYmplY3ROYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9iamVjdEluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdFtvYmplY3RJbmRleF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4nLCB0aGlzLCB0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdFtvYmplY3RJbmRleF07XG5cdFx0XHR9XG5cdFx0fSAvLyByZXNvbHZlIHByb3BlcnR5XG5cblxuXHRcdGNvbnN0IG5vZGVQcm9wZXJ0eSA9IHRhcmdldE9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuXG5cdFx0aWYgKG5vZGVQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBub2RlTmFtZSA9IHBhcnNlZFBhdGgubm9kZU5hbWU7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAnICsgbm9kZU5hbWUgKyAnLicgKyBwcm9wZXJ0eU5hbWUgKyAnIGJ1dCBpdCB3YXNuXFwndCBmb3VuZC4nLCB0YXJnZXRPYmplY3QpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gLy8gZGV0ZXJtaW5lIHZlcnNpb25pbmcgc2NoZW1lXG5cblxuXHRcdGxldCB2ZXJzaW9uaW5nID0gdGhpcy5WZXJzaW9uaW5nLk5vbmU7XG5cdFx0dGhpcy50YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3Q7XG5cblx0XHRpZiAodGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIG1hdGVyaWFsXG5cdFx0XHR2ZXJzaW9uaW5nID0gdGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbm9kZSB0cmFuc2Zvcm1cblx0XHRcdHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZTtcblx0XHR9IC8vIGRldGVybWluZSBob3cgdGhlIHByb3BlcnR5IGdldHMgYm91bmRcblxuXG5cdFx0bGV0IGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7XG5cblx0XHRpZiAocHJvcGVydHlJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBhY2Nlc3MgYSBzdWIgZWxlbWVudCBvZiB0aGUgcHJvcGVydHkgYXJyYXkgKG9ubHkgcHJpbWl0aXZlcyBhcmUgc3VwcG9ydGVkIHJpZ2h0IG5vdylcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09ICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnKSB7XG5cdFx0XHRcdC8vIHBvdGVudGlhbCBvcHRpbWl6YXRpb24sIHNraXAgdGhpcyBpZiBwcm9wZXJ0eUluZGV4IGlzIGFscmVhZHkgYW4gaW50ZWdlciwgYW5kIGNvbnZlcnQgdGhlIGludGVnZXIgc3RyaW5nIHRvIGEgdHJ1ZSBpbnRlZ2VyLlxuXHRcdFx0XHQvLyBzdXBwb3J0IHJlc29sdmluZyBtb3JwaFRhcmdldCBuYW1lcyBpbnRvIGluZGljZXMuXG5cdFx0XHRcdGlmICghdGFyZ2V0T2JqZWN0Lmdlb21ldHJ5KSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuJywgdGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KSB7XG5cdFx0XHRcdFx0aWYgKCF0YXJnZXRPYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuJywgdGhpcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHRhcmdldE9iamVjdC5tb3JwaFRhcmdldERpY3Rpb25hcnlbcHJvcGVydHlJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmRleCA9IHRhcmdldE9iamVjdC5tb3JwaFRhcmdldERpY3Rpb25hcnlbcHJvcGVydHlJbmRleF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJywgdGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQ7XG5cdFx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkgPSBub2RlUHJvcGVydHk7XG5cdFx0XHR0aGlzLnByb3BlcnR5SW5kZXggPSBwcm9wZXJ0eUluZGV4O1xuXHRcdH0gZWxzZSBpZiAobm9kZVByb3BlcnR5LmZyb21BcnJheSAhPT0gdW5kZWZpbmVkICYmIG5vZGVQcm9wZXJ0eS50b0FycmF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIG11c3QgdXNlIGNvcHkgZm9yIE9iamVjdDNELkV1bGVyL1F1YXRlcm5pb25cblx0XHRcdGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheTtcblx0XHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eSA9IG5vZGVQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobm9kZVByb3BlcnR5KSkge1xuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5O1xuXHRcdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5ID0gbm9kZVByb3BlcnR5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcblx0XHR9IC8vIHNlbGVjdCBnZXR0ZXIgLyBzZXR0ZXJcblxuXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtiaW5kaW5nVHlwZV07XG5cdFx0dGhpcy5zZXRWYWx1ZSA9IHRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbYmluZGluZ1R5cGVdW3ZlcnNpb25pbmddO1xuXHR9XG5cblx0dW5iaW5kKCkge1xuXHRcdHRoaXMubm9kZSA9IG51bGw7IC8vIGJhY2sgdG8gdGhlIHByb3RvdHlwZSB2ZXJzaW9uIG9mIGdldFZhbHVlIC8gc2V0VmFsdWVcblx0XHQvLyBub3RlOiBhdm9pZGluZyB0byBtdXRhdGUgdGhlIHNoYXBlIG9mICd0aGlzJyB2aWEgJ2RlbGV0ZSdcblxuXHRcdHRoaXMuZ2V0VmFsdWUgPSB0aGlzLl9nZXRWYWx1ZV91bmJvdW5kO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLl9zZXRWYWx1ZV91bmJvdW5kO1xuXHR9XG5cbn1cblxuUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZSA9IENvbXBvc2l0ZTtcblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuQmluZGluZ1R5cGUgPSB7XG5cdERpcmVjdDogMCxcblx0RW50aXJlQXJyYXk6IDEsXG5cdEFycmF5RWxlbWVudDogMixcblx0SGFzRnJvbVRvQXJyYXk6IDNcbn07XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLlZlcnNpb25pbmcgPSB7XG5cdE5vbmU6IDAsXG5cdE5lZWRzVXBkYXRlOiAxLFxuXHRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOiAyXG59O1xuUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5HZXR0ZXJCeUJpbmRpbmdUeXBlID0gW1Byb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX2dldFZhbHVlX2RpcmVjdCwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfdG9BcnJheV07XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nID0gW1svLyBEaXJlY3RcblByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sIFsvLyBFbnRpcmVBcnJheVxuUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXksIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSwgWy8vIEFycmF5RWxlbWVudFxuUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LCBQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSwgWy8vIEhhc1RvRnJvbUFycmF5XG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXksIFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSwgUHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTtcblxuLyoqXG4gKlxuICogQSBncm91cCBvZiBvYmplY3RzIHRoYXQgcmVjZWl2ZXMgYSBzaGFyZWQgYW5pbWF0aW9uIHN0YXRlLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqXHQtIEFkZCBvYmplY3RzIHlvdSB3b3VsZCBvdGhlcndpc2UgcGFzcyBhcyAncm9vdCcgdG8gdGhlXG4gKlx0XHRjb25zdHJ1Y3RvciBvciB0aGUgLmNsaXBBY3Rpb24gbWV0aG9kIG9mIEFuaW1hdGlvbk1peGVyLlxuICpcbiAqXHQtIEluc3RlYWQgcGFzcyB0aGlzIG9iamVjdCBhcyAncm9vdCcuXG4gKlxuICpcdC0gWW91IGNhbiBhbHNvIGFkZCBhbmQgcmVtb3ZlIG9iamVjdHMgbGF0ZXIgd2hlbiB0aGUgbWl4ZXJcbiAqXHRcdGlzIHJ1bm5pbmcuXG4gKlxuICogTm90ZTpcbiAqXG4gKlx0XHRPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXBwZWFyIGFzIG9uZSBvYmplY3QgdG8gdGhlIG1peGVyLFxuICpcdFx0c28gY2FjaGUgY29udHJvbCBvZiB0aGUgaW5kaXZpZHVhbCBvYmplY3RzIG11c3QgYmUgZG9uZVxuICpcdFx0b24gdGhlIGdyb3VwLlxuICpcbiAqIExpbWl0YXRpb246XG4gKlxuICpcdC0gVGhlIGFuaW1hdGVkIHByb3BlcnRpZXMgbXVzdCBiZSBjb21wYXRpYmxlIGFtb25nIHRoZVxuICpcdFx0YWxsIG9iamVjdHMgaW4gdGhlIGdyb3VwLlxuICpcbiAqXHQtIEEgc2luZ2xlIHByb3BlcnR5IGNhbiBlaXRoZXIgYmUgY29udHJvbGxlZCB0aHJvdWdoIGFcbiAqXHRcdHRhcmdldCBncm91cCBvciBkaXJlY3RseSwgYnV0IG5vdCBib3RoLlxuICovXG5cbmNsYXNzIEFuaW1hdGlvbk9iamVjdEdyb3VwIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7IC8vIGNhY2hlZCBvYmplY3RzIGZvbGxvd2VkIGJ5IHRoZSBhY3RpdmUgb25lc1xuXG5cdFx0dGhpcy5fb2JqZWN0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSAwOyAvLyB0aHJlc2hvbGRcblx0XHQvLyBub3RlOiByZWFkIGJ5IFByb3BlcnR5QmluZGluZy5Db21wb3NpdGVcblxuXHRcdGNvbnN0IGluZGljZXMgPSB7fTtcblx0XHR0aGlzLl9pbmRpY2VzQnlVVUlEID0gaW5kaWNlczsgLy8gZm9yIGJvb2trZWVwaW5nXG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0aW5kaWNlc1thcmd1bWVudHNbaV0udXVpZF0gPSBpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BhdGhzID0gW107IC8vIGluc2lkZTogc3RyaW5nXG5cblx0XHR0aGlzLl9wYXJzZWRQYXRocyA9IFtdOyAvLyBpbnNpZGU6IHsgd2UgZG9uJ3QgY2FyZSwgaGVyZSB9XG5cblx0XHR0aGlzLl9iaW5kaW5ncyA9IFtdOyAvLyBpbnNpZGU6IEFycmF5PCBQcm9wZXJ0eUJpbmRpbmcgPlxuXG5cdFx0dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoID0ge307IC8vIGluc2lkZTogaW5kaWNlcyBpbiB0aGVzZSBhcnJheXNcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHR0aGlzLnN0YXRzID0ge1xuXHRcdFx0b2JqZWN0czoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9vYmplY3RzLmxlbmd0aDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudG90YWwgLSBzY29wZS5uQ2FjaGVkT2JqZWN0c187XG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0Z2V0IGJpbmRpbmdzUGVyT2JqZWN0KCkge1xuXHRcdFx0XHRyZXR1cm4gc2NvcGUuX2JpbmRpbmdzLmxlbmd0aDtcblx0XHRcdH1cblxuXHRcdH07XG5cdH1cblxuXHRhZGQoKSB7XG5cdFx0Y29uc3Qgb2JqZWN0cyA9IHRoaXMuX29iamVjdHMsXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRcdFx0cGF0aHMgPSB0aGlzLl9wYXRocyxcblx0XHRcdFx0XHRwYXJzZWRQYXRocyA9IHRoaXMuX3BhcnNlZFBhdGhzLFxuXHRcdFx0XHRcdGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRcdFx0bkJpbmRpbmdzID0gYmluZGluZ3MubGVuZ3RoO1xuXHRcdGxldCBrbm93bk9iamVjdCA9IHVuZGVmaW5lZCxcblx0XHRcdFx0bk9iamVjdHMgPSBvYmplY3RzLmxlbmd0aCxcblx0XHRcdFx0bkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmplY3RzXztcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBhcmd1bWVudHNbaV0sXG5cdFx0XHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQ7XG5cdFx0XHRsZXQgaW5kZXggPSBpbmRpY2VzQnlVVUlEW3V1aWRdO1xuXG5cdFx0XHRpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyB1bmtub3duIG9iamVjdCAtPiBhZGQgaXQgdG8gdGhlIEFDVElWRSByZWdpb25cblx0XHRcdFx0aW5kZXggPSBuT2JqZWN0cysrO1xuXHRcdFx0XHRpbmRpY2VzQnlVVUlEW3V1aWRdID0gaW5kZXg7XG5cdFx0XHRcdG9iamVjdHMucHVzaChvYmplY3QpOyAvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsraikge1xuXHRcdFx0XHRcdGJpbmRpbmdzW2pdLnB1c2gobmV3IFByb3BlcnR5QmluZGluZyhvYmplY3QsIHBhdGhzW2pdLCBwYXJzZWRQYXRoc1tqXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGluZGV4IDwgbkNhY2hlZE9iamVjdHMpIHtcblx0XHRcdFx0a25vd25PYmplY3QgPSBvYmplY3RzW2luZGV4XTsgLy8gbW92ZSBleGlzdGluZyBvYmplY3QgdG8gdGhlIEFDVElWRSByZWdpb25cblxuXHRcdFx0XHRjb25zdCBmaXJzdEFjdGl2ZUluZGV4ID0gLS1uQ2FjaGVkT2JqZWN0cyxcblx0XHRcdFx0XHRcdFx0bGFzdENhY2hlZE9iamVjdCA9IG9iamVjdHNbZmlyc3RBY3RpdmVJbmRleF07XG5cdFx0XHRcdGluZGljZXNCeVVVSURbbGFzdENhY2hlZE9iamVjdC51dWlkXSA9IGluZGV4O1xuXHRcdFx0XHRvYmplY3RzW2luZGV4XSA9IGxhc3RDYWNoZWRPYmplY3Q7XG5cdFx0XHRcdGluZGljZXNCeVVVSURbdXVpZF0gPSBmaXJzdEFjdGl2ZUluZGV4O1xuXHRcdFx0XHRvYmplY3RzW2ZpcnN0QWN0aXZlSW5kZXhdID0gb2JqZWN0OyAvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsraikge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzW2pdLFxuXHRcdFx0XHRcdFx0XHRcdGxhc3RDYWNoZWQgPSBiaW5kaW5nc0ZvclBhdGhbZmlyc3RBY3RpdmVJbmRleF07XG5cdFx0XHRcdFx0bGV0IGJpbmRpbmcgPSBiaW5kaW5nc0ZvclBhdGhbaW5kZXhdO1xuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtpbmRleF0gPSBsYXN0Q2FjaGVkO1xuXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gc2luY2Ugd2UgZG8gbm90IGJvdGhlciB0byBjcmVhdGUgbmV3IGJpbmRpbmdzXG5cdFx0XHRcdFx0XHQvLyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQsIHRoZSBiaW5kaW5nIG1heVxuXHRcdFx0XHRcdFx0Ly8gb3IgbWF5IG5vdCBleGlzdFxuXHRcdFx0XHRcdFx0YmluZGluZyA9IG5ldyBQcm9wZXJ0eUJpbmRpbmcob2JqZWN0LCBwYXRoc1tqXSwgcGFyc2VkUGF0aHNbal0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtmaXJzdEFjdGl2ZUluZGV4XSA9IGJpbmRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob2JqZWN0c1tpbmRleF0gIT09IGtub3duT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJlbnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgJyArICdkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4nKTtcblx0XHRcdH0gLy8gZWxzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgd2hlcmUgd2Ugd2FudCBpdCB0byBiZVxuXG5cdFx0fSAvLyBmb3IgYXJndW1lbnRzXG5cblxuXHRcdHRoaXMubkNhY2hlZE9iamVjdHNfID0gbkNhY2hlZE9iamVjdHM7XG5cdH1cblxuXHRyZW1vdmUoKSB7XG5cdFx0Y29uc3Qgb2JqZWN0cyA9IHRoaXMuX29iamVjdHMsXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRuQmluZGluZ3MgPSBiaW5kaW5ncy5sZW5ndGg7XG5cdFx0bGV0IG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c187XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gYXJndW1lbnRzW2ldLFxuXHRcdFx0XHRcdFx0dXVpZCA9IG9iamVjdC51dWlkLFxuXHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzQnlVVUlEW3V1aWRdO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSBuQ2FjaGVkT2JqZWN0cykge1xuXHRcdFx0XHQvLyBtb3ZlIGV4aXN0aW5nIG9iamVjdCBpbnRvIHRoZSBDQUNIRUQgcmVnaW9uXG5cdFx0XHRcdGNvbnN0IGxhc3RDYWNoZWRJbmRleCA9IG5DYWNoZWRPYmplY3RzKyssXG5cdFx0XHRcdFx0XHRcdGZpcnN0QWN0aXZlT2JqZWN0ID0gb2JqZWN0c1tsYXN0Q2FjaGVkSW5kZXhdO1xuXHRcdFx0XHRpbmRpY2VzQnlVVUlEW2ZpcnN0QWN0aXZlT2JqZWN0LnV1aWRdID0gaW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbaW5kZXhdID0gZmlyc3RBY3RpdmVPYmplY3Q7XG5cdFx0XHRcdGluZGljZXNCeVVVSURbdXVpZF0gPSBsYXN0Q2FjaGVkSW5kZXg7XG5cdFx0XHRcdG9iamVjdHNbbGFzdENhY2hlZEluZGV4XSA9IG9iamVjdDsgLy8gYWNjb3VudGluZyBpcyBkb25lLCBub3cgZG8gdGhlIHNhbWUgZm9yIGFsbCBiaW5kaW5nc1xuXG5cdFx0XHRcdGZvciAobGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArK2opIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nc0ZvclBhdGggPSBiaW5kaW5nc1tqXSxcblx0XHRcdFx0XHRcdFx0XHRmaXJzdEFjdGl2ZSA9IGJpbmRpbmdzRm9yUGF0aFtsYXN0Q2FjaGVkSW5kZXhdLFxuXHRcdFx0XHRcdFx0XHRcdGJpbmRpbmcgPSBiaW5kaW5nc0ZvclBhdGhbaW5kZXhdO1xuXHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtpbmRleF0gPSBmaXJzdEFjdGl2ZTtcblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbbGFzdENhY2hlZEluZGV4XSA9IGJpbmRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IC8vIGZvciBhcmd1bWVudHNcblxuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblx0fSAvLyByZW1vdmUgJiBmb3JnZXRcblxuXG5cdHVuY2FjaGUoKSB7XG5cdFx0Y29uc3Qgb2JqZWN0cyA9IHRoaXMuX29iamVjdHMsXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRuQmluZGluZ3MgPSBiaW5kaW5ncy5sZW5ndGg7XG5cdFx0bGV0IG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRcdG5PYmplY3RzID0gb2JqZWN0cy5sZW5ndGg7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsraSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gYXJndW1lbnRzW2ldLFxuXHRcdFx0XHRcdFx0dXVpZCA9IG9iamVjdC51dWlkLFxuXHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzQnlVVUlEW3V1aWRdO1xuXG5cdFx0XHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWxldGUgaW5kaWNlc0J5VVVJRFt1dWlkXTtcblxuXHRcdFx0XHRpZiAoaW5kZXggPCBuQ2FjaGVkT2JqZWN0cykge1xuXHRcdFx0XHRcdC8vIG9iamVjdCBpcyBjYWNoZWQsIHNocmluayB0aGUgQ0FDSEVEIHJlZ2lvblxuXHRcdFx0XHRcdGNvbnN0IGZpcnN0QWN0aXZlSW5kZXggPSAtLW5DYWNoZWRPYmplY3RzLFxuXHRcdFx0XHRcdFx0XHRcdGxhc3RDYWNoZWRPYmplY3QgPSBvYmplY3RzW2ZpcnN0QWN0aXZlSW5kZXhdLFxuXHRcdFx0XHRcdFx0XHRcdGxhc3RJbmRleCA9IC0tbk9iamVjdHMsXG5cdFx0XHRcdFx0XHRcdFx0bGFzdE9iamVjdCA9IG9iamVjdHNbbGFzdEluZGV4XTsgLy8gbGFzdCBjYWNoZWQgb2JqZWN0IHRha2VzIHRoaXMgb2JqZWN0J3MgcGxhY2VcblxuXHRcdFx0XHRcdGluZGljZXNCeVVVSURbbGFzdENhY2hlZE9iamVjdC51dWlkXSA9IGluZGV4O1xuXHRcdFx0XHRcdG9iamVjdHNbaW5kZXhdID0gbGFzdENhY2hlZE9iamVjdDsgLy8gbGFzdCBvYmplY3QgZ29lcyB0byB0aGUgYWN0aXZhdGVkIHNsb3QgYW5kIHBvcFxuXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRFtsYXN0T2JqZWN0LnV1aWRdID0gZmlyc3RBY3RpdmVJbmRleDtcblx0XHRcdFx0XHRvYmplY3RzW2ZpcnN0QWN0aXZlSW5kZXhdID0gbGFzdE9iamVjdDtcblx0XHRcdFx0XHRvYmplY3RzLnBvcCgpOyAvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKytqKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nc0ZvclBhdGggPSBiaW5kaW5nc1tqXSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhc3RDYWNoZWQgPSBiaW5kaW5nc0ZvclBhdGhbZmlyc3RBY3RpdmVJbmRleF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0ID0gYmluZGluZ3NGb3JQYXRoW2xhc3RJbmRleF07XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbaW5kZXhdID0gbGFzdENhY2hlZDtcblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFtmaXJzdEFjdGl2ZUluZGV4XSA9IGxhc3Q7XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGgucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIG9iamVjdCBpcyBhY3RpdmUsIGp1c3Qgc3dhcCB3aXRoIHRoZSBsYXN0IGFuZCBwb3Bcblx0XHRcdFx0XHRjb25zdCBsYXN0SW5kZXggPSAtLW5PYmplY3RzLFxuXHRcdFx0XHRcdFx0XHRcdGxhc3RPYmplY3QgPSBvYmplY3RzW2xhc3RJbmRleF07XG5cblx0XHRcdFx0XHRpZiAobGFzdEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0aW5kaWNlc0J5VVVJRFtsYXN0T2JqZWN0LnV1aWRdID0gaW5kZXg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b2JqZWN0c1tpbmRleF0gPSBsYXN0T2JqZWN0O1xuXHRcdFx0XHRcdG9iamVjdHMucG9wKCk7IC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArK2opIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzW2pdO1xuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoW2luZGV4XSA9IGJpbmRpbmdzRm9yUGF0aFtsYXN0SW5kZXhdO1xuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoLnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSAvLyBjYWNoZWQgb3IgYWN0aXZlXG5cblx0XHRcdH0gLy8gaWYgb2JqZWN0IGlzIGtub3duXG5cblx0XHR9IC8vIGZvciBhcmd1bWVudHNcblxuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblx0fSAvLyBJbnRlcm5hbCBpbnRlcmZhY2UgdXNlZCBieSBiZWZyaWVuZGVkIFByb3BlcnR5QmluZGluZy5Db21wb3NpdGU6XG5cblxuXHRzdWJzY3JpYmVfKHBhdGgsIHBhcnNlZFBhdGgpIHtcblx0XHQvLyByZXR1cm5zIGFuIGFycmF5IG9mIGJpbmRpbmdzIGZvciB0aGUgZ2l2ZW4gcGF0aCB0aGF0IGlzIGNoYW5nZWRcblx0XHQvLyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRhaW5lZCBvYmplY3RzIGluIHRoZSBncm91cFxuXHRcdGNvbnN0IGluZGljZXNCeVBhdGggPSB0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg7XG5cdFx0bGV0IGluZGV4ID0gaW5kaWNlc0J5UGF0aFtwYXRoXTtcblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYmluZGluZ3NbaW5kZXhdO1xuXHRcdGNvbnN0IHBhdGhzID0gdGhpcy5fcGF0aHMsXG5cdFx0XHRcdFx0cGFyc2VkUGF0aHMgPSB0aGlzLl9wYXJzZWRQYXRocyxcblx0XHRcdFx0XHRvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdFx0XHRuT2JqZWN0cyA9IG9iamVjdHMubGVuZ3RoLFxuXHRcdFx0XHRcdG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoID0gbmV3IEFycmF5KG5PYmplY3RzKTtcblx0XHRpbmRleCA9IGJpbmRpbmdzLmxlbmd0aDtcblx0XHRpbmRpY2VzQnlQYXRoW3BhdGhdID0gaW5kZXg7XG5cdFx0cGF0aHMucHVzaChwYXRoKTtcblx0XHRwYXJzZWRQYXRocy5wdXNoKHBhcnNlZFBhdGgpO1xuXHRcdGJpbmRpbmdzLnB1c2goYmluZGluZ3NGb3JQYXRoKTtcblxuXHRcdGZvciAobGV0IGkgPSBuQ2FjaGVkT2JqZWN0cywgbiA9IG9iamVjdHMubGVuZ3RoOyBpICE9PSBuOyArK2kpIHtcblx0XHRcdGNvbnN0IG9iamVjdCA9IG9iamVjdHNbaV07XG5cdFx0XHRiaW5kaW5nc0ZvclBhdGhbaV0gPSBuZXcgUHJvcGVydHlCaW5kaW5nKG9iamVjdCwgcGF0aCwgcGFyc2VkUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJpbmRpbmdzRm9yUGF0aDtcblx0fVxuXG5cdHVuc3Vic2NyaWJlXyhwYXRoKSB7XG5cdFx0Ly8gdGVsbHMgdGhlIGdyb3VwIHRvIGZvcmdldCBhYm91dCBhIHByb3BlcnR5IHBhdGggYW5kIG5vIGxvbmdlclxuXHRcdC8vIHVwZGF0ZSB0aGUgYXJyYXkgcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoICdzdWJzY3JpYmVfJ1xuXHRcdGNvbnN0IGluZGljZXNCeVBhdGggPSB0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsXG5cdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzQnlQYXRoW3BhdGhdO1xuXG5cdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHBhdGhzID0gdGhpcy5fcGF0aHMsXG5cdFx0XHRcdFx0XHRwYXJzZWRQYXRocyA9IHRoaXMuX3BhcnNlZFBhdGhzLFxuXHRcdFx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0XHRcdGxhc3RCaW5kaW5nc0luZGV4ID0gYmluZGluZ3MubGVuZ3RoIC0gMSxcblx0XHRcdFx0XHRcdGxhc3RCaW5kaW5ncyA9IGJpbmRpbmdzW2xhc3RCaW5kaW5nc0luZGV4XSxcblx0XHRcdFx0XHRcdGxhc3RCaW5kaW5nc1BhdGggPSBwYXRoW2xhc3RCaW5kaW5nc0luZGV4XTtcblx0XHRcdGluZGljZXNCeVBhdGhbbGFzdEJpbmRpbmdzUGF0aF0gPSBpbmRleDtcblx0XHRcdGJpbmRpbmdzW2luZGV4XSA9IGxhc3RCaW5kaW5ncztcblx0XHRcdGJpbmRpbmdzLnBvcCgpO1xuXHRcdFx0cGFyc2VkUGF0aHNbaW5kZXhdID0gcGFyc2VkUGF0aHNbbGFzdEJpbmRpbmdzSW5kZXhdO1xuXHRcdFx0cGFyc2VkUGF0aHMucG9wKCk7XG5cdFx0XHRwYXRoc1tpbmRleF0gPSBwYXRoc1tsYXN0QmluZGluZ3NJbmRleF07XG5cdFx0XHRwYXRocy5wb3AoKTtcblx0XHR9XG5cdH1cblxufVxuXG5BbmltYXRpb25PYmplY3RHcm91cC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cCA9IHRydWU7XG5cbmNsYXNzIEFuaW1hdGlvbkFjdGlvbiB7XG5cdGNvbnN0cnVjdG9yKG1peGVyLCBjbGlwLCBsb2NhbFJvb3QgPSBudWxsLCBibGVuZE1vZGUgPSBjbGlwLmJsZW5kTW9kZSkge1xuXHRcdHRoaXMuX21peGVyID0gbWl4ZXI7XG5cdFx0dGhpcy5fY2xpcCA9IGNsaXA7XG5cdFx0dGhpcy5fbG9jYWxSb290ID0gbG9jYWxSb290O1xuXHRcdHRoaXMuYmxlbmRNb2RlID0gYmxlbmRNb2RlO1xuXHRcdGNvbnN0IHRyYWNrcyA9IGNsaXAudHJhY2tzLFxuXHRcdFx0XHRcdG5UcmFja3MgPSB0cmFja3MubGVuZ3RoLFxuXHRcdFx0XHRcdGludGVycG9sYW50cyA9IG5ldyBBcnJheShuVHJhY2tzKTtcblx0XHRjb25zdCBpbnRlcnBvbGFudFNldHRpbmdzID0ge1xuXHRcdFx0ZW5kaW5nU3RhcnQ6IFplcm9DdXJ2YXR1cmVFbmRpbmcsXG5cdFx0XHRlbmRpbmdFbmQ6IFplcm9DdXJ2YXR1cmVFbmRpbmdcblx0XHR9O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG5UcmFja3M7ICsraSkge1xuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0cmFja3NbaV0uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7XG5cdFx0XHRpbnRlcnBvbGFudHNbaV0gPSBpbnRlcnBvbGFudDtcblx0XHRcdGludGVycG9sYW50LnNldHRpbmdzID0gaW50ZXJwb2xhbnRTZXR0aW5ncztcblx0XHR9XG5cblx0XHR0aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzID0gaW50ZXJwb2xhbnRTZXR0aW5ncztcblx0XHR0aGlzLl9pbnRlcnBvbGFudHMgPSBpbnRlcnBvbGFudHM7IC8vIGJvdW5kIGJ5IHRoZSBtaXhlclxuXHRcdC8vIGluc2lkZTogUHJvcGVydHlNaXhlciAobWFuYWdlZCBieSB0aGUgbWl4ZXIpXG5cblx0XHR0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzID0gbmV3IEFycmF5KG5UcmFja3MpO1xuXHRcdHRoaXMuX2NhY2hlSW5kZXggPSBudWxsOyAvLyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VyXG5cblx0XHR0aGlzLl9ieUNsaXBDYWNoZUluZGV4ID0gbnVsbDsgLy8gZm9yIHRoZSBtZW1vcnkgbWFuYWdlclxuXG5cdFx0dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQgPSBudWxsO1xuXHRcdHRoaXMuX3dlaWdodEludGVycG9sYW50ID0gbnVsbDtcblx0XHR0aGlzLmxvb3AgPSBMb29wUmVwZWF0O1xuXHRcdHRoaXMuX2xvb3BDb3VudCA9IC0xOyAvLyBnbG9iYWwgbWl4ZXIgdGltZSB3aGVuIHRoZSBhY3Rpb24gaXMgdG8gYmUgc3RhcnRlZFxuXHRcdC8vIGl0J3Mgc2V0IGJhY2sgdG8gJ251bGwnIHVwb24gc3RhcnQgb2YgdGhlIGFjdGlvblxuXG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDsgLy8gc2NhbGVkIGxvY2FsIHRpbWUgb2YgdGhlIGFjdGlvblxuXHRcdC8vIGdldHMgY2xhbXBlZCBvciB3cmFwcGVkIHRvIDAuLmNsaXAuZHVyYXRpb24gYWNjb3JkaW5nIHRvIGxvb3BcblxuXHRcdHRoaXMudGltZSA9IDA7XG5cdFx0dGhpcy50aW1lU2NhbGUgPSAxO1xuXHRcdHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSA9IDE7XG5cdFx0dGhpcy53ZWlnaHQgPSAxO1xuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IDE7XG5cdFx0dGhpcy5yZXBldGl0aW9ucyA9IEluZmluaXR5OyAvLyBuby4gb2YgcmVwZXRpdGlvbnMgd2hlbiBsb29waW5nXG5cblx0XHR0aGlzLnBhdXNlZCA9IGZhbHNlOyAvLyB0cnVlIC0+IHplcm8gZWZmZWN0aXZlIHRpbWUgc2NhbGVcblxuXHRcdHRoaXMuZW5hYmxlZCA9IHRydWU7IC8vIGZhbHNlIC0+IHplcm8gZWZmZWN0aXZlIHdlaWdodFxuXG5cdFx0dGhpcy5jbGFtcFdoZW5GaW5pc2hlZCA9IGZhbHNlOyAvLyBrZWVwIGZlZWRpbmcgdGhlIGxhc3QgZnJhbWU/XG5cblx0XHR0aGlzLnplcm9TbG9wZUF0U3RhcnQgPSB0cnVlOyAvLyBmb3Igc21vb3RoIGludGVycG9sYXRpb24gdy9vIHNlcGFyYXRlXG5cblx0XHR0aGlzLnplcm9TbG9wZUF0RW5kID0gdHJ1ZTsgLy8gY2xpcHMgZm9yIHN0YXJ0LCBsb29wIGFuZCBlbmRcblx0fSAvLyBTdGF0ZSAmIFNjaGVkdWxpbmdcblxuXG5cdHBsYXkoKSB7XG5cdFx0dGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzZXQoKTtcblx0fVxuXG5cdHJlc2V0KCkge1xuXHRcdHRoaXMucGF1c2VkID0gZmFsc2U7XG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnRpbWUgPSAwOyAvLyByZXN0YXJ0IGNsaXBcblxuXHRcdHRoaXMuX2xvb3BDb3VudCA9IC0xOyAvLyBmb3JnZXQgcHJldmlvdXMgbG9vcHNcblxuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7IC8vIGZvcmdldCBzY2hlZHVsaW5nXG5cblx0XHRyZXR1cm4gdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKTtcblx0fVxuXG5cdGlzUnVubmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbmFibGVkICYmICF0aGlzLnBhdXNlZCAmJiB0aGlzLnRpbWVTY2FsZSAhPT0gMCAmJiB0aGlzLl9zdGFydFRpbWUgPT09IG51bGwgJiYgdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpO1xuXHR9IC8vIHJldHVybiB0cnVlIHdoZW4gcGxheSBoYXMgYmVlbiBjYWxsZWRcblxuXG5cdGlzU2NoZWR1bGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyk7XG5cdH1cblxuXHRzdGFydEF0KHRpbWUpIHtcblx0XHR0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0TG9vcChtb2RlLCByZXBldGl0aW9ucykge1xuXHRcdHRoaXMubG9vcCA9IG1vZGU7XG5cdFx0dGhpcy5yZXBldGl0aW9ucyA9IHJlcGV0aXRpb25zO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIFdlaWdodFxuXHQvLyBzZXQgdGhlIHdlaWdodCBzdG9wcGluZyBhbnkgc2NoZWR1bGVkIGZhZGluZ1xuXHQvLyBhbHRob3VnaCAuZW5hYmxlZCA9IGZhbHNlIHlpZWxkcyBhbiBlZmZlY3RpdmUgd2VpZ2h0IG9mIHplcm8sIHRoaXNcblx0Ly8gbWV0aG9kIGRvZXMgKm5vdCogY2hhbmdlIC5lbmFibGVkLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGNvbmZ1c2luZ1xuXG5cblx0c2V0RWZmZWN0aXZlV2VpZ2h0KHdlaWdodCkge1xuXHRcdHRoaXMud2VpZ2h0ID0gd2VpZ2h0OyAvLyBub3RlOiBzYW1lIGxvZ2ljIGFzIHdoZW4gdXBkYXRlZCBhdCBydW50aW1lXG5cblx0XHR0aGlzLl9lZmZlY3RpdmVXZWlnaHQgPSB0aGlzLmVuYWJsZWQgPyB3ZWlnaHQgOiAwO1xuXHRcdHJldHVybiB0aGlzLnN0b3BGYWRpbmcoKTtcblx0fSAvLyByZXR1cm4gdGhlIHdlaWdodCBjb25zaWRlcmluZyBmYWRpbmcgYW5kIC5lbmFibGVkXG5cblxuXHRnZXRFZmZlY3RpdmVXZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodDtcblx0fVxuXG5cdGZhZGVJbihkdXJhdGlvbikge1xuXHRcdHJldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhkdXJhdGlvbiwgMCwgMSk7XG5cdH1cblxuXHRmYWRlT3V0KGR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGR1cmF0aW9uLCAxLCAwKTtcblx0fVxuXG5cdGNyb3NzRmFkZUZyb20oZmFkZU91dEFjdGlvbiwgZHVyYXRpb24sIHdhcnApIHtcblx0XHRmYWRlT3V0QWN0aW9uLmZhZGVPdXQoZHVyYXRpb24pO1xuXHRcdHRoaXMuZmFkZUluKGR1cmF0aW9uKTtcblxuXHRcdGlmICh3YXJwKSB7XG5cdFx0XHRjb25zdCBmYWRlSW5EdXJhdGlvbiA9IHRoaXMuX2NsaXAuZHVyYXRpb24sXG5cdFx0XHRcdFx0XHRmYWRlT3V0RHVyYXRpb24gPSBmYWRlT3V0QWN0aW9uLl9jbGlwLmR1cmF0aW9uLFxuXHRcdFx0XHRcdFx0c3RhcnRFbmRSYXRpbyA9IGZhZGVPdXREdXJhdGlvbiAvIGZhZGVJbkR1cmF0aW9uLFxuXHRcdFx0XHRcdFx0ZW5kU3RhcnRSYXRpbyA9IGZhZGVJbkR1cmF0aW9uIC8gZmFkZU91dER1cmF0aW9uO1xuXHRcdFx0ZmFkZU91dEFjdGlvbi53YXJwKDEuMCwgc3RhcnRFbmRSYXRpbywgZHVyYXRpb24pO1xuXHRcdFx0dGhpcy53YXJwKGVuZFN0YXJ0UmF0aW8sIDEuMCwgZHVyYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y3Jvc3NGYWRlVG8oZmFkZUluQWN0aW9uLCBkdXJhdGlvbiwgd2FycCkge1xuXHRcdHJldHVybiBmYWRlSW5BY3Rpb24uY3Jvc3NGYWRlRnJvbSh0aGlzLCBkdXJhdGlvbiwgd2FycCk7XG5cdH1cblxuXHRzdG9wRmFkaW5nKCkge1xuXHRcdGNvbnN0IHdlaWdodEludGVycG9sYW50ID0gdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7XG5cblx0XHRpZiAod2VpZ2h0SW50ZXJwb2xhbnQgIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX3dlaWdodEludGVycG9sYW50ID0gbnVsbDtcblxuXHRcdFx0dGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHdlaWdodEludGVycG9sYW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyBUaW1lIFNjYWxlIENvbnRyb2xcblx0Ly8gc2V0IHRoZSB0aW1lIHNjYWxlIHN0b3BwaW5nIGFueSBzY2hlZHVsZWQgd2FycGluZ1xuXHQvLyBhbHRob3VnaCAucGF1c2VkID0gdHJ1ZSB5aWVsZHMgYW4gZWZmZWN0aXZlIHRpbWUgc2NhbGUgb2YgemVybywgdGhpc1xuXHQvLyBtZXRob2QgZG9lcyAqbm90KiBjaGFuZ2UgLnBhdXNlZCwgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb25mdXNpbmdcblxuXG5cdHNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0aW1lU2NhbGUpIHtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcblx0XHR0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUgPSB0aGlzLnBhdXNlZCA/IDAgOiB0aW1lU2NhbGU7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKTtcblx0fSAvLyByZXR1cm4gdGhlIHRpbWUgc2NhbGUgY29uc2lkZXJpbmcgd2FycGluZyBhbmQgLnBhdXNlZFxuXG5cblx0Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCkge1xuXHRcdHJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU7XG5cdH1cblxuXHRzZXREdXJhdGlvbihkdXJhdGlvbikge1xuXHRcdHRoaXMudGltZVNjYWxlID0gdGhpcy5fY2xpcC5kdXJhdGlvbiAvIGR1cmF0aW9uO1xuXHRcdHJldHVybiB0aGlzLnN0b3BXYXJwaW5nKCk7XG5cdH1cblxuXHRzeW5jV2l0aChhY3Rpb24pIHtcblx0XHR0aGlzLnRpbWUgPSBhY3Rpb24udGltZTtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IGFjdGlvbi50aW1lU2NhbGU7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKTtcblx0fVxuXG5cdGhhbHQoZHVyYXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwgMCwgZHVyYXRpb24pO1xuXHR9XG5cblx0d2FycChzdGFydFRpbWVTY2FsZSwgZW5kVGltZVNjYWxlLCBkdXJhdGlvbikge1xuXHRcdGNvbnN0IG1peGVyID0gdGhpcy5fbWl4ZXIsXG5cdFx0XHRcdFx0bm93ID0gbWl4ZXIudGltZSxcblx0XHRcdFx0XHR0aW1lU2NhbGUgPSB0aGlzLnRpbWVTY2FsZTtcblx0XHRsZXQgaW50ZXJwb2xhbnQgPSB0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtcblxuXHRcdGlmIChpbnRlcnBvbGFudCA9PT0gbnVsbCkge1xuXHRcdFx0aW50ZXJwb2xhbnQgPSBtaXhlci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpO1xuXHRcdFx0dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudDtcblx0XHR9XG5cblx0XHRjb25zdCB0aW1lcyA9IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBpbnRlcnBvbGFudC5zYW1wbGVWYWx1ZXM7XG5cdFx0dGltZXNbMF0gPSBub3c7XG5cdFx0dGltZXNbMV0gPSBub3cgKyBkdXJhdGlvbjtcblx0XHR2YWx1ZXNbMF0gPSBzdGFydFRpbWVTY2FsZSAvIHRpbWVTY2FsZTtcblx0XHR2YWx1ZXNbMV0gPSBlbmRUaW1lU2NhbGUgLyB0aW1lU2NhbGU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdG9wV2FycGluZygpIHtcblx0XHRjb25zdCB0aW1lU2NhbGVJbnRlcnBvbGFudCA9IHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O1xuXG5cdFx0aWYgKHRpbWVTY2FsZUludGVycG9sYW50ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCA9IG51bGw7XG5cblx0XHRcdHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0aW1lU2NhbGVJbnRlcnBvbGFudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gLy8gT2JqZWN0IEFjY2Vzc29yc1xuXG5cblx0Z2V0TWl4ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21peGVyO1xuXHR9XG5cblx0Z2V0Q2xpcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xpcDtcblx0fVxuXG5cdGdldFJvb3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsUm9vdCB8fCB0aGlzLl9taXhlci5fcm9vdDtcblx0fSAvLyBJbnRlcm5hXG5cblxuXHRfdXBkYXRlKHRpbWUsIGRlbHRhVGltZSwgdGltZURpcmVjdGlvbiwgYWNjdUluZGV4KSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IHRoZSBtaXhlclxuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHQvLyBjYWxsIC5fdXBkYXRlV2VpZ2h0KCkgdG8gdXBkYXRlIC5fZWZmZWN0aXZlV2VpZ2h0XG5cdFx0XHR0aGlzLl91cGRhdGVXZWlnaHQodGltZSk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLl9zdGFydFRpbWU7XG5cblx0XHRpZiAoc3RhcnRUaW1lICE9PSBudWxsKSB7XG5cdFx0XHQvLyBjaGVjayBmb3Igc2NoZWR1bGVkIHN0YXJ0IG9mIGFjdGlvblxuXHRcdFx0Y29uc3QgdGltZVJ1bm5pbmcgPSAodGltZSAtIHN0YXJ0VGltZSkgKiB0aW1lRGlyZWN0aW9uO1xuXG5cdFx0XHRpZiAodGltZVJ1bm5pbmcgPCAwIHx8IHRpbWVEaXJlY3Rpb24gPT09IDApIHtcblx0XHRcdFx0cmV0dXJuOyAvLyB5ZXQgdG8gY29tZSAvIGRvbid0IGRlY2lkZSB3aGVuIGRlbHRhID0gMFxuXHRcdFx0fSAvLyBzdGFydFxuXG5cblx0XHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7IC8vIHVuc2NoZWR1bGVcblxuXHRcdFx0ZGVsdGFUaW1lID0gdGltZURpcmVjdGlvbiAqIHRpbWVSdW5uaW5nO1xuXHRcdH0gLy8gYXBwbHkgdGltZSBzY2FsZSBhbmQgYWR2YW5jZSB0aW1lXG5cblxuXHRcdGRlbHRhVGltZSAqPSB0aGlzLl91cGRhdGVUaW1lU2NhbGUodGltZSk7XG5cblx0XHRjb25zdCBjbGlwVGltZSA9IHRoaXMuX3VwZGF0ZVRpbWUoZGVsdGFUaW1lKTsgLy8gbm90ZTogX3VwZGF0ZVRpbWUgbWF5IGRpc2FibGUgdGhlIGFjdGlvbiByZXN1bHRpbmcgaW5cblx0XHQvLyBhbiBlZmZlY3RpdmUgd2VpZ2h0IG9mIDBcblxuXG5cdFx0Y29uc3Qgd2VpZ2h0ID0gdGhpcy5fdXBkYXRlV2VpZ2h0KHRpbWUpO1xuXG5cdFx0aWYgKHdlaWdodCA+IDApIHtcblx0XHRcdGNvbnN0IGludGVycG9sYW50cyA9IHRoaXMuX2ludGVycG9sYW50cztcblx0XHRcdGNvbnN0IHByb3BlcnR5TWl4ZXJzID0gdGhpcy5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdFx0c3dpdGNoICh0aGlzLmJsZW5kTW9kZSkge1xuXHRcdFx0XHRjYXNlIEFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlOlxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwLCBtID0gaW50ZXJwb2xhbnRzLmxlbmd0aDsgaiAhPT0gbTsgKytqKSB7XG5cdFx0XHRcdFx0XHRpbnRlcnBvbGFudHNbal0uZXZhbHVhdGUoY2xpcFRpbWUpO1xuXHRcdFx0XHRcdFx0cHJvcGVydHlNaXhlcnNbal0uYWNjdW11bGF0ZUFkZGl0aXZlKHdlaWdodCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGU6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDAsIG0gPSBpbnRlcnBvbGFudHMubGVuZ3RoOyBqICE9PSBtOyArK2opIHtcblx0XHRcdFx0XHRcdGludGVycG9sYW50c1tqXS5ldmFsdWF0ZShjbGlwVGltZSk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU1peGVyc1tqXS5hY2N1bXVsYXRlKGFjY3VJbmRleCwgd2VpZ2h0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlV2VpZ2h0KHRpbWUpIHtcblx0XHRsZXQgd2VpZ2h0ID0gMDtcblxuXHRcdGlmICh0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHdlaWdodCA9IHRoaXMud2VpZ2h0O1xuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtcblxuXHRcdFx0aWYgKGludGVycG9sYW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IGludGVycG9sYW50VmFsdWUgPSBpbnRlcnBvbGFudC5ldmFsdWF0ZSh0aW1lKVswXTtcblx0XHRcdFx0d2VpZ2h0ICo9IGludGVycG9sYW50VmFsdWU7XG5cblx0XHRcdFx0aWYgKHRpbWUgPiBpbnRlcnBvbGFudC5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0pIHtcblx0XHRcdFx0XHR0aGlzLnN0b3BGYWRpbmcoKTtcblxuXHRcdFx0XHRcdGlmIChpbnRlcnBvbGFudFZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBmYWRlZCBvdXQsIGRpc2FibGVcblx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IHdlaWdodDtcblx0XHRyZXR1cm4gd2VpZ2h0O1xuXHR9XG5cblx0X3VwZGF0ZVRpbWVTY2FsZSh0aW1lKSB7XG5cdFx0bGV0IHRpbWVTY2FsZSA9IDA7XG5cblx0XHRpZiAoIXRoaXMucGF1c2VkKSB7XG5cdFx0XHR0aW1lU2NhbGUgPSB0aGlzLnRpbWVTY2FsZTtcblx0XHRcdGNvbnN0IGludGVycG9sYW50ID0gdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7XG5cblx0XHRcdGlmIChpbnRlcnBvbGFudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBpbnRlcnBvbGFudFZhbHVlID0gaW50ZXJwb2xhbnQuZXZhbHVhdGUodGltZSlbMF07XG5cdFx0XHRcdHRpbWVTY2FsZSAqPSBpbnRlcnBvbGFudFZhbHVlO1xuXG5cdFx0XHRcdGlmICh0aW1lID4gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zWzFdKSB7XG5cdFx0XHRcdFx0dGhpcy5zdG9wV2FycGluZygpO1xuXG5cdFx0XHRcdFx0aWYgKHRpbWVTY2FsZSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gbW90aW9uIGhhcyBoYWx0ZWQsIHBhdXNlXG5cdFx0XHRcdFx0XHR0aGlzLnBhdXNlZCA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHdhcnAgZG9uZSAtIGFwcGx5IGZpbmFsIHRpbWUgc2NhbGVcblx0XHRcdFx0XHRcdHRoaXMudGltZVNjYWxlID0gdGltZVNjYWxlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSA9IHRpbWVTY2FsZTtcblx0XHRyZXR1cm4gdGltZVNjYWxlO1xuXHR9XG5cblx0X3VwZGF0ZVRpbWUoZGVsdGFUaW1lKSB7XG5cdFx0Y29uc3QgZHVyYXRpb24gPSB0aGlzLl9jbGlwLmR1cmF0aW9uO1xuXHRcdGNvbnN0IGxvb3AgPSB0aGlzLmxvb3A7XG5cdFx0bGV0IHRpbWUgPSB0aGlzLnRpbWUgKyBkZWx0YVRpbWU7XG5cdFx0bGV0IGxvb3BDb3VudCA9IHRoaXMuX2xvb3BDb3VudDtcblx0XHRjb25zdCBwaW5nUG9uZyA9IGxvb3AgPT09IExvb3BQaW5nUG9uZztcblxuXHRcdGlmIChkZWx0YVRpbWUgPT09IDApIHtcblx0XHRcdGlmIChsb29wQ291bnQgPT09IC0xKSByZXR1cm4gdGltZTtcblx0XHRcdHJldHVybiBwaW5nUG9uZyAmJiAobG9vcENvdW50ICYgMSkgPT09IDEgPyBkdXJhdGlvbiAtIHRpbWUgOiB0aW1lO1xuXHRcdH1cblxuXHRcdGlmIChsb29wID09PSBMb29wT25jZSkge1xuXHRcdFx0aWYgKGxvb3BDb3VudCA9PT0gLTEpIHtcblx0XHRcdFx0Ly8ganVzdCBzdGFydGVkXG5cdFx0XHRcdHRoaXMuX2xvb3BDb3VudCA9IDA7XG5cblx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyh0cnVlLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZV9zdG9wOiB7XG5cdFx0XHRcdGlmICh0aW1lID49IGR1cmF0aW9uKSB7XG5cdFx0XHRcdFx0dGltZSA9IGR1cmF0aW9uO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRpbWUgPCAwKSB7XG5cdFx0XHRcdFx0dGltZSA9IDA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblx0XHRcdFx0XHRicmVhayBoYW5kbGVfc3RvcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLmNsYW1wV2hlbkZpbmlzaGVkKSB0aGlzLnBhdXNlZCA9IHRydWU7ZWxzZSB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHR0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmluaXNoZWQnLFxuXHRcdFx0XHRcdGFjdGlvbjogdGhpcyxcblx0XHRcdFx0XHRkaXJlY3Rpb246IGRlbHRhVGltZSA8IDAgPyAtMSA6IDFcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHJlcGV0aXRpdmUgUmVwZWF0IG9yIFBpbmdQb25nXG5cdFx0XHRpZiAobG9vcENvdW50ID09PSAtMSkge1xuXHRcdFx0XHQvLyBqdXN0IHN0YXJ0ZWRcblx0XHRcdFx0aWYgKGRlbHRhVGltZSA+PSAwKSB7XG5cdFx0XHRcdFx0bG9vcENvdW50ID0gMDtcblxuXHRcdFx0XHRcdHRoaXMuX3NldEVuZGluZ3ModHJ1ZSwgdGhpcy5yZXBldGl0aW9ucyA9PT0gMCwgcGluZ1BvbmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHdoZW4gbG9vcGluZyBpbiByZXZlcnNlIGRpcmVjdGlvbiwgdGhlIGluaXRpYWxcblx0XHRcdFx0XHQvLyB0cmFuc2l0aW9uIHRocm91Z2ggemVybyBjb3VudHMgYXMgYSByZXBldGl0aW9uLFxuXHRcdFx0XHRcdC8vIHNvIGxlYXZlIGxvb3BDb3VudCBhdCAtMVxuXHRcdFx0XHRcdHRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucyA9PT0gMCwgdHJ1ZSwgcGluZ1BvbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aW1lID49IGR1cmF0aW9uIHx8IHRpbWUgPCAwKSB7XG5cdFx0XHRcdC8vIHdyYXAgYXJvdW5kXG5cdFx0XHRcdGNvbnN0IGxvb3BEZWx0YSA9IE1hdGguZmxvb3IodGltZSAvIGR1cmF0aW9uKTsgLy8gc2lnbmVkXG5cblx0XHRcdFx0dGltZSAtPSBkdXJhdGlvbiAqIGxvb3BEZWx0YTtcblx0XHRcdFx0bG9vcENvdW50ICs9IE1hdGguYWJzKGxvb3BEZWx0YSk7XG5cdFx0XHRcdGNvbnN0IHBlbmRpbmcgPSB0aGlzLnJlcGV0aXRpb25zIC0gbG9vcENvdW50O1xuXG5cdFx0XHRcdGlmIChwZW5kaW5nIDw9IDApIHtcblx0XHRcdFx0XHQvLyBoYXZlIHRvIHN0b3AgKHN3aXRjaCBzdGF0ZSwgY2xhbXAgdGltZSwgZmlyZSBldmVudClcblx0XHRcdFx0XHRpZiAodGhpcy5jbGFtcFdoZW5GaW5pc2hlZCkgdGhpcy5wYXVzZWQgPSB0cnVlO2Vsc2UgdGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZSA9IGRlbHRhVGltZSA+IDAgPyBkdXJhdGlvbiA6IDA7XG5cdFx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHRcdHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2ZpbmlzaGVkJyxcblx0XHRcdFx0XHRcdGFjdGlvbjogdGhpcyxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGVsdGFUaW1lID4gMCA/IDEgOiAtMVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGtlZXAgcnVubmluZ1xuXHRcdFx0XHRcdGlmIChwZW5kaW5nID09PSAxKSB7XG5cdFx0XHRcdFx0XHQvLyBlbnRlcmluZyB0aGUgbGFzdCByb3VuZFxuXHRcdFx0XHRcdFx0Y29uc3QgYXRTdGFydCA9IGRlbHRhVGltZSA8IDA7XG5cblx0XHRcdFx0XHRcdHRoaXMuX3NldEVuZGluZ3MoYXRTdGFydCwgIWF0U3RhcnQsIHBpbmdQb25nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyhmYWxzZSwgZmFsc2UsIHBpbmdQb25nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XG5cdFx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHRcdHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2xvb3AnLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiB0aGlzLFxuXHRcdFx0XHRcdFx0bG9vcERlbHRhOiBsb29wRGVsdGFcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBpbmdQb25nICYmIChsb29wQ291bnQgJiAxKSA9PT0gMSkge1xuXHRcdFx0XHQvLyBpbnZlcnQgdGltZSBmb3IgdGhlIFwicG9uZyByb3VuZFwiXG5cdFx0XHRcdHJldHVybiBkdXJhdGlvbiAtIHRpbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWU7XG5cdH1cblxuXHRfc2V0RW5kaW5ncyhhdFN0YXJ0LCBhdEVuZCwgcGluZ1BvbmcpIHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7XG5cblx0XHRpZiAocGluZ1BvbmcpIHtcblx0XHRcdHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gWmVyb1Nsb3BlRW5kaW5nO1xuXHRcdFx0c2V0dGluZ3MuZW5kaW5nRW5kID0gWmVyb1Nsb3BlRW5kaW5nO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBhc3N1bWluZyBmb3IgTG9vcE9uY2UgYXRTdGFydCA9PSBhdEVuZCA9PSB0cnVlXG5cdFx0XHRpZiAoYXRTdGFydCkge1xuXHRcdFx0XHRzZXR0aW5ncy5lbmRpbmdTdGFydCA9IHRoaXMuemVyb1Nsb3BlQXRTdGFydCA/IFplcm9TbG9wZUVuZGluZyA6IFplcm9DdXJ2YXR1cmVFbmRpbmc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5ncy5lbmRpbmdTdGFydCA9IFdyYXBBcm91bmRFbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhdEVuZCkge1xuXHRcdFx0XHRzZXR0aW5ncy5lbmRpbmdFbmQgPSB0aGlzLnplcm9TbG9wZUF0RW5kID8gWmVyb1Nsb3BlRW5kaW5nIDogWmVyb0N1cnZhdHVyZUVuZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ0VuZCA9IFdyYXBBcm91bmRFbmRpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X3NjaGVkdWxlRmFkaW5nKGR1cmF0aW9uLCB3ZWlnaHROb3csIHdlaWdodFRoZW4pIHtcblx0XHRjb25zdCBtaXhlciA9IHRoaXMuX21peGVyLFxuXHRcdFx0XHRcdG5vdyA9IG1peGVyLnRpbWU7XG5cdFx0bGV0IGludGVycG9sYW50ID0gdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7XG5cblx0XHRpZiAoaW50ZXJwb2xhbnQgPT09IG51bGwpIHtcblx0XHRcdGludGVycG9sYW50ID0gbWl4ZXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKTtcblx0XHRcdHRoaXMuX3dlaWdodEludGVycG9sYW50ID0gaW50ZXJwb2xhbnQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGltZXMgPSBpbnRlcnBvbGFudC5wYXJhbWV0ZXJQb3NpdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0gaW50ZXJwb2xhbnQuc2FtcGxlVmFsdWVzO1xuXHRcdHRpbWVzWzBdID0gbm93O1xuXHRcdHZhbHVlc1swXSA9IHdlaWdodE5vdztcblx0XHR0aW1lc1sxXSA9IG5vdyArIGR1cmF0aW9uO1xuXHRcdHZhbHVlc1sxXSA9IHdlaWdodFRoZW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBBbmltYXRpb25NaXhlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yKHJvb3QpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3Jvb3QgPSByb290O1xuXG5cdFx0dGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKTtcblxuXHRcdHRoaXMuX2FjY3VJbmRleCA9IDA7XG5cdFx0dGhpcy50aW1lID0gMDtcblx0XHR0aGlzLnRpbWVTY2FsZSA9IDEuMDtcblx0fVxuXG5cdF9iaW5kQWN0aW9uKGFjdGlvbiwgcHJvdG90eXBlQWN0aW9uKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QsXG5cdFx0XHRcdFx0dHJhY2tzID0gYWN0aW9uLl9jbGlwLnRyYWNrcyxcblx0XHRcdFx0XHRuVHJhY2tzID0gdHJhY2tzLmxlbmd0aCxcblx0XHRcdFx0XHRiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncyxcblx0XHRcdFx0XHRpbnRlcnBvbGFudHMgPSBhY3Rpb24uX2ludGVycG9sYW50cyxcblx0XHRcdFx0XHRyb290VXVpZCA9IHJvb3QudXVpZCxcblx0XHRcdFx0XHRiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZTtcblx0XHRsZXQgYmluZGluZ3NCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFtyb290VXVpZF07XG5cblx0XHRpZiAoYmluZGluZ3NCeU5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YmluZGluZ3NCeU5hbWUgPSB7fTtcblx0XHRcdGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXSA9IGJpbmRpbmdzQnlOYW1lO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpICE9PSBuVHJhY2tzOyArK2kpIHtcblx0XHRcdGNvbnN0IHRyYWNrID0gdHJhY2tzW2ldLFxuXHRcdFx0XHRcdFx0dHJhY2tOYW1lID0gdHJhY2submFtZTtcblx0XHRcdGxldCBiaW5kaW5nID0gYmluZGluZ3NCeU5hbWVbdHJhY2tOYW1lXTtcblxuXHRcdFx0aWYgKGJpbmRpbmcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQrK2JpbmRpbmcucmVmZXJlbmNlQ291bnQ7XG5cdFx0XHRcdGJpbmRpbmdzW2ldID0gYmluZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcblxuXHRcdFx0XHRpZiAoYmluZGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gZXhpc3RpbmcgYmluZGluZywgbWFrZSBzdXJlIHRoZSBjYWNoZSBrbm93c1xuXHRcdFx0XHRcdGlmIChiaW5kaW5nLl9jYWNoZUluZGV4ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHQrK2JpbmRpbmcucmVmZXJlbmNlQ291bnQ7XG5cblx0XHRcdFx0XHRcdHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhiaW5kaW5nLCByb290VXVpZCwgdHJhY2tOYW1lKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBwcm90b3R5cGVBY3Rpb24gJiYgcHJvdG90eXBlQWN0aW9uLl9wcm9wZXJ0eUJpbmRpbmdzW2ldLmJpbmRpbmcucGFyc2VkUGF0aDtcblx0XHRcdFx0YmluZGluZyA9IG5ldyBQcm9wZXJ0eU1peGVyKFByb3BlcnR5QmluZGluZy5jcmVhdGUocm9vdCwgdHJhY2tOYW1lLCBwYXRoKSwgdHJhY2suVmFsdWVUeXBlTmFtZSwgdHJhY2suZ2V0VmFsdWVTaXplKCkpO1xuXHRcdFx0XHQrK2JpbmRpbmcucmVmZXJlbmNlQ291bnQ7XG5cblx0XHRcdFx0dGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcsIHJvb3RVdWlkLCB0cmFja05hbWUpO1xuXG5cdFx0XHRcdGJpbmRpbmdzW2ldID0gYmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0aW50ZXJwb2xhbnRzW2ldLnJlc3VsdEJ1ZmZlciA9IGJpbmRpbmcuYnVmZmVyO1xuXHRcdH1cblx0fVxuXG5cdF9hY3RpdmF0ZUFjdGlvbihhY3Rpb24pIHtcblx0XHRpZiAoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKGFjdGlvbikpIHtcblx0XHRcdGlmIChhY3Rpb24uX2NhY2hlSW5kZXggPT09IG51bGwpIHtcblx0XHRcdFx0Ly8gdGhpcyBhY3Rpb24gaGFzIGJlZW4gZm9yZ290dGVuIGJ5IHRoZSBjYWNoZSwgYnV0IHRoZSB1c2VyXG5cdFx0XHRcdC8vIGFwcGVhcnMgdG8gYmUgc3RpbGwgdXNpbmcgaXQgLT4gcmViaW5kXG5cdFx0XHRcdGNvbnN0IHJvb3RVdWlkID0gKGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QpLnV1aWQsXG5cdFx0XHRcdFx0XHRcdGNsaXBVdWlkID0gYWN0aW9uLl9jbGlwLnV1aWQsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbnNGb3JDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cblx0XHRcdFx0dGhpcy5fYmluZEFjdGlvbihhY3Rpb24sIGFjdGlvbnNGb3JDbGlwICYmIGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9uc1swXSk7XG5cblx0XHRcdFx0dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oYWN0aW9uLCBjbGlwVXVpZCwgcm9vdFV1aWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5nczsgLy8gaW5jcmVtZW50IHJlZmVyZW5jZSBjb3VudHMgLyBzb3J0IG91dCBzdGF0ZVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcblxuXHRcdFx0XHRpZiAoYmluZGluZy51c2VDb3VudCsrID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fbGVuZEJpbmRpbmcoYmluZGluZyk7XG5cblx0XHRcdFx0XHRiaW5kaW5nLnNhdmVPcmlnaW5hbFN0YXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fbGVuZEFjdGlvbihhY3Rpb24pO1xuXHRcdH1cblx0fVxuXG5cdF9kZWFjdGl2YXRlQWN0aW9uKGFjdGlvbikge1xuXHRcdGlmICh0aGlzLl9pc0FjdGl2ZUFjdGlvbihhY3Rpb24pKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5nczsgLy8gZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudHMgLyBzb3J0IG91dCBzdGF0ZVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcblxuXHRcdFx0XHRpZiAoLS1iaW5kaW5nLnVzZUNvdW50ID09PSAwKSB7XG5cdFx0XHRcdFx0YmluZGluZy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpO1xuXG5cdFx0XHRcdFx0dGhpcy5fdGFrZUJhY2tCaW5kaW5nKGJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3Rha2VCYWNrQWN0aW9uKGFjdGlvbik7XG5cdFx0fVxuXHR9IC8vIE1lbW9yeSBtYW5hZ2VyXG5cblxuXHRfaW5pdE1lbW9yeU1hbmFnZXIoKSB7XG5cdFx0dGhpcy5fYWN0aW9ucyA9IFtdOyAvLyAnbkFjdGl2ZUFjdGlvbnMnIGZvbGxvd2VkIGJ5IGluYWN0aXZlIG9uZXNcblxuXHRcdHRoaXMuX25BY3RpdmVBY3Rpb25zID0gMDtcblx0XHR0aGlzLl9hY3Rpb25zQnlDbGlwID0ge307IC8vIGluc2lkZTpcblx0XHQvLyB7XG5cdFx0Ly8gXHRrbm93bkFjdGlvbnM6IEFycmF5PCBBbmltYXRpb25BY3Rpb24gPiAtIHVzZWQgYXMgcHJvdG90eXBlc1xuXHRcdC8vIFx0YWN0aW9uQnlSb290OiBBbmltYXRpb25BY3Rpb24gLSBsb29rdXBcblx0XHQvLyB9XG5cblx0XHR0aGlzLl9iaW5kaW5ncyA9IFtdOyAvLyAnbkFjdGl2ZUJpbmRpbmdzJyBmb2xsb3dlZCBieSBpbmFjdGl2ZSBvbmVzXG5cblx0XHR0aGlzLl9uQWN0aXZlQmluZGluZ3MgPSAwO1xuXHRcdHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSA9IHt9OyAvLyBpbnNpZGU6IE1hcDwgbmFtZSwgUHJvcGVydHlNaXhlciA+XG5cblx0XHR0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzID0gW107IC8vIHNhbWUgZ2FtZSBhcyBhYm92ZVxuXG5cdFx0dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMgPSAwO1xuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHR0aGlzLnN0YXRzID0ge1xuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9hY3Rpb25zLmxlbmd0aDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9uQWN0aXZlQWN0aW9ucztcblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXHRcdFx0YmluZGluZ3M6IHtcblx0XHRcdFx0Z2V0IHRvdGFsKCkge1xuXHRcdFx0XHRcdHJldHVybiBzY29wZS5fYmluZGluZ3MubGVuZ3RoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGdldCBpblVzZSgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVCaW5kaW5ncztcblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXHRcdFx0Y29udHJvbEludGVycG9sYW50czoge1xuXHRcdFx0XHRnZXQgdG90YWwoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cztcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0fTtcblx0fSAvLyBNZW1vcnkgbWFuYWdlbWVudCBmb3IgQW5pbWF0aW9uQWN0aW9uIG9iamVjdHNcblxuXG5cdF9pc0FjdGl2ZUFjdGlvbihhY3Rpb24pIHtcblx0XHRjb25zdCBpbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleDtcblx0XHRyZXR1cm4gaW5kZXggIT09IG51bGwgJiYgaW5kZXggPCB0aGlzLl9uQWN0aXZlQWN0aW9ucztcblx0fVxuXG5cdF9hZGRJbmFjdGl2ZUFjdGlvbihhY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCkge1xuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwO1xuXHRcdGxldCBhY3Rpb25zRm9yQ2xpcCA9IGFjdGlvbnNCeUNsaXBbY2xpcFV1aWRdO1xuXG5cdFx0aWYgKGFjdGlvbnNGb3JDbGlwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGFjdGlvbnNGb3JDbGlwID0ge1xuXHRcdFx0XHRrbm93bkFjdGlvbnM6IFthY3Rpb25dLFxuXHRcdFx0XHRhY3Rpb25CeVJvb3Q6IHt9XG5cdFx0XHR9O1xuXHRcdFx0YWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4ID0gMDtcblx0XHRcdGFjdGlvbnNCeUNsaXBbY2xpcFV1aWRdID0gYWN0aW9uc0ZvckNsaXA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGtub3duQWN0aW9ucyA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucztcblx0XHRcdGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IGtub3duQWN0aW9ucy5sZW5ndGg7XG5cdFx0XHRrbm93bkFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH1cblxuXHRcdGFjdGlvbi5fY2FjaGVJbmRleCA9IGFjdGlvbnMubGVuZ3RoO1xuXHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFtyb290VXVpZF0gPSBhY3Rpb247XG5cdH1cblxuXHRfcmVtb3ZlSW5hY3RpdmVBY3Rpb24oYWN0aW9uKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0bGFzdEluYWN0aXZlQWN0aW9uID0gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdLFxuXHRcdFx0XHRcdGNhY2hlSW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXg7XG5cdFx0bGFzdEluYWN0aXZlQWN0aW9uLl9jYWNoZUluZGV4ID0gY2FjaGVJbmRleDtcblx0XHRhY3Rpb25zW2NhY2hlSW5kZXhdID0gbGFzdEluYWN0aXZlQWN0aW9uO1xuXHRcdGFjdGlvbnMucG9wKCk7XG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gbnVsbDtcblx0XHRjb25zdCBjbGlwVXVpZCA9IGFjdGlvbi5fY2xpcC51dWlkLFxuXHRcdFx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwLFxuXHRcdFx0XHRcdGFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF0sXG5cdFx0XHRcdFx0a25vd25BY3Rpb25zRm9yQ2xpcCA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucyxcblx0XHRcdFx0XHRsYXN0S25vd25BY3Rpb24gPSBrbm93bkFjdGlvbnNGb3JDbGlwW2tub3duQWN0aW9uc0ZvckNsaXAubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdFx0YnlDbGlwQ2FjaGVJbmRleCA9IGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleDtcblx0XHRsYXN0S25vd25BY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBieUNsaXBDYWNoZUluZGV4O1xuXHRcdGtub3duQWN0aW9uc0ZvckNsaXBbYnlDbGlwQ2FjaGVJbmRleF0gPSBsYXN0S25vd25BY3Rpb247XG5cdFx0a25vd25BY3Rpb25zRm9yQ2xpcC5wb3AoKTtcblx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBudWxsO1xuXHRcdGNvbnN0IGFjdGlvbkJ5Um9vdCA9IGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdCxcblx0XHRcdFx0XHRyb290VXVpZCA9IChhY3Rpb24uX2xvY2FsUm9vdCB8fCB0aGlzLl9yb290KS51dWlkO1xuXHRcdGRlbGV0ZSBhY3Rpb25CeVJvb3Rbcm9vdFV1aWRdO1xuXG5cdFx0aWYgKGtub3duQWN0aW9uc0ZvckNsaXAubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRkZWxldGUgYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cdFx0fVxuXG5cdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihhY3Rpb24pO1xuXHR9XG5cblx0X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYWN0aW9uKSB7XG5cdFx0Y29uc3QgYmluZGluZ3MgPSBhY3Rpb24uX3Byb3BlcnR5QmluZGluZ3M7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gYmluZGluZ3NbaV07XG5cblx0XHRcdGlmICgtLWJpbmRpbmcucmVmZXJlbmNlQ291bnQgPT09IDApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9sZW5kQWN0aW9uKGFjdGlvbikge1xuXHRcdC8vIFsgYWN0aXZlIGFjdGlvbnMgfFx0aW5hY3RpdmUgYWN0aW9uc1x0XVxuXHRcdC8vIFtcdGFjdGl2ZSBhY3Rpb25zID58IGluYWN0aXZlIGFjdGlvbnMgXVxuXHRcdC8vXHRcdFx0XHRcdFx0XHRcdCBzXHRcdFx0XHRhXG5cdFx0Ly9cdFx0XHRcdFx0XHRcdFx0XHQ8LXN3YXAtPlxuXHRcdC8vXHRcdFx0XHRcdFx0XHRcdCBhXHRcdFx0XHRzXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0cHJldkluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXHRcdFx0XHRcdGxhc3RBY3RpdmVJbmRleCA9IHRoaXMuX25BY3RpdmVBY3Rpb25zKyssXG5cdFx0XHRcdFx0Zmlyc3RJbmFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbbGFzdEFjdGl2ZUluZGV4XTtcblx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBsYXN0QWN0aXZlSW5kZXg7XG5cdFx0YWN0aW9uc1tsYXN0QWN0aXZlSW5kZXhdID0gYWN0aW9uO1xuXHRcdGZpcnN0SW5hY3RpdmVBY3Rpb24uX2NhY2hlSW5kZXggPSBwcmV2SW5kZXg7XG5cdFx0YWN0aW9uc1twcmV2SW5kZXhdID0gZmlyc3RJbmFjdGl2ZUFjdGlvbjtcblx0fVxuXG5cdF90YWtlQmFja0FjdGlvbihhY3Rpb24pIHtcblx0XHQvLyBbXHRhY3RpdmUgYWN0aW9uc1x0fCBpbmFjdGl2ZSBhY3Rpb25zIF1cblx0XHQvLyBbIGFjdGl2ZSBhY3Rpb25zIHw8IGluYWN0aXZlIGFjdGlvbnNcdF1cblx0XHQvL1x0XHRcdFx0YVx0XHRcdFx0c1xuXHRcdC8vXHRcdFx0XHQgPC1zd2FwLT5cblx0XHQvL1x0XHRcdFx0c1x0XHRcdFx0YVxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0XHRcdHByZXZJbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleCxcblx0XHRcdFx0XHRmaXJzdEluYWN0aXZlSW5kZXggPSAtLXRoaXMuX25BY3RpdmVBY3Rpb25zLFxuXHRcdFx0XHRcdGxhc3RBY3RpdmVBY3Rpb24gPSBhY3Rpb25zW2ZpcnN0SW5hY3RpdmVJbmRleF07XG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gZmlyc3RJbmFjdGl2ZUluZGV4O1xuXHRcdGFjdGlvbnNbZmlyc3RJbmFjdGl2ZUluZGV4XSA9IGFjdGlvbjtcblx0XHRsYXN0QWN0aXZlQWN0aW9uLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGFjdGlvbnNbcHJldkluZGV4XSA9IGxhc3RBY3RpdmVBY3Rpb247XG5cdH0gLy8gTWVtb3J5IG1hbmFnZW1lbnQgZm9yIFByb3BlcnR5TWl4ZXIgb2JqZWN0c1xuXG5cblx0X2FkZEluYWN0aXZlQmluZGluZyhiaW5kaW5nLCByb290VXVpZCwgdHJhY2tOYW1lKSB7XG5cdFx0Y29uc3QgYmluZGluZ3NCeVJvb3QgPSB0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsXG5cdFx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncztcblx0XHRsZXQgYmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXTtcblxuXHRcdGlmIChiaW5kaW5nQnlOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGJpbmRpbmdCeU5hbWUgPSB7fTtcblx0XHRcdGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXSA9IGJpbmRpbmdCeU5hbWU7XG5cdFx0fVxuXG5cdFx0YmluZGluZ0J5TmFtZVt0cmFja05hbWVdID0gYmluZGluZztcblx0XHRiaW5kaW5nLl9jYWNoZUluZGV4ID0gYmluZGluZ3MubGVuZ3RoO1xuXHRcdGJpbmRpbmdzLnB1c2goYmluZGluZyk7XG5cdH1cblxuXHRfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGJpbmRpbmcpIHtcblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRcdHByb3BCaW5kaW5nID0gYmluZGluZy5iaW5kaW5nLFxuXHRcdFx0XHRcdHJvb3RVdWlkID0gcHJvcEJpbmRpbmcucm9vdE5vZGUudXVpZCxcblx0XHRcdFx0XHR0cmFja05hbWUgPSBwcm9wQmluZGluZy5wYXRoLFxuXHRcdFx0XHRcdGJpbmRpbmdzQnlSb290ID0gdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLFxuXHRcdFx0XHRcdGJpbmRpbmdCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFtyb290VXVpZF0sXG5cdFx0XHRcdFx0bGFzdEluYWN0aXZlQmluZGluZyA9IGJpbmRpbmdzW2JpbmRpbmdzLmxlbmd0aCAtIDFdLFxuXHRcdFx0XHRcdGNhY2hlSW5kZXggPSBiaW5kaW5nLl9jYWNoZUluZGV4O1xuXHRcdGxhc3RJbmFjdGl2ZUJpbmRpbmcuX2NhY2hlSW5kZXggPSBjYWNoZUluZGV4O1xuXHRcdGJpbmRpbmdzW2NhY2hlSW5kZXhdID0gbGFzdEluYWN0aXZlQmluZGluZztcblx0XHRiaW5kaW5ncy5wb3AoKTtcblx0XHRkZWxldGUgYmluZGluZ0J5TmFtZVt0cmFja05hbWVdO1xuXG5cdFx0aWYgKE9iamVjdC5rZXlzKGJpbmRpbmdCeU5hbWUpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0ZGVsZXRlIGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXTtcblx0XHR9XG5cdH1cblxuXHRfbGVuZEJpbmRpbmcoYmluZGluZykge1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRcdFx0cHJldkluZGV4ID0gYmluZGluZy5fY2FjaGVJbmRleCxcblx0XHRcdFx0XHRsYXN0QWN0aXZlSW5kZXggPSB0aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxcblx0XHRcdFx0XHRmaXJzdEluYWN0aXZlQmluZGluZyA9IGJpbmRpbmdzW2xhc3RBY3RpdmVJbmRleF07XG5cdFx0YmluZGluZy5fY2FjaGVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcblx0XHRiaW5kaW5nc1tsYXN0QWN0aXZlSW5kZXhdID0gYmluZGluZztcblx0XHRmaXJzdEluYWN0aXZlQmluZGluZy5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRiaW5kaW5nc1twcmV2SW5kZXhdID0gZmlyc3RJbmFjdGl2ZUJpbmRpbmc7XG5cdH1cblxuXHRfdGFrZUJhY2tCaW5kaW5nKGJpbmRpbmcpIHtcblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0XHRcdHByZXZJbmRleCA9IGJpbmRpbmcuX2NhY2hlSW5kZXgsXG5cdFx0XHRcdFx0Zmlyc3RJbmFjdGl2ZUluZGV4ID0gLS10aGlzLl9uQWN0aXZlQmluZGluZ3MsXG5cdFx0XHRcdFx0bGFzdEFjdGl2ZUJpbmRpbmcgPSBiaW5kaW5nc1tmaXJzdEluYWN0aXZlSW5kZXhdO1xuXHRcdGJpbmRpbmcuX2NhY2hlSW5kZXggPSBmaXJzdEluYWN0aXZlSW5kZXg7XG5cdFx0YmluZGluZ3NbZmlyc3RJbmFjdGl2ZUluZGV4XSA9IGJpbmRpbmc7XG5cdFx0bGFzdEFjdGl2ZUJpbmRpbmcuX2NhY2hlSW5kZXggPSBwcmV2SW5kZXg7XG5cdFx0YmluZGluZ3NbcHJldkluZGV4XSA9IGxhc3RBY3RpdmVCaW5kaW5nO1xuXHR9IC8vIE1lbW9yeSBtYW5hZ2VtZW50IG9mIEludGVycG9sYW50cyBmb3Igd2VpZ2h0IGFuZCB0aW1lIHNjYWxlXG5cblxuXHRfbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpIHtcblx0XHRjb25zdCBpbnRlcnBvbGFudHMgPSB0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLFxuXHRcdFx0XHRcdGxhc3RBY3RpdmVJbmRleCA9IHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKys7XG5cdFx0bGV0IGludGVycG9sYW50ID0gaW50ZXJwb2xhbnRzW2xhc3RBY3RpdmVJbmRleF07XG5cblx0XHRpZiAoaW50ZXJwb2xhbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aW50ZXJwb2xhbnQgPSBuZXcgTGluZWFySW50ZXJwb2xhbnQobmV3IEZsb2F0MzJBcnJheSgyKSwgbmV3IEZsb2F0MzJBcnJheSgyKSwgMSwgdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcik7XG5cdFx0XHRpbnRlcnBvbGFudC5fX2NhY2hlSW5kZXggPSBsYXN0QWN0aXZlSW5kZXg7XG5cdFx0XHRpbnRlcnBvbGFudHNbbGFzdEFjdGl2ZUluZGV4XSA9IGludGVycG9sYW50O1xuXHRcdH1cblxuXHRcdHJldHVybiBpbnRlcnBvbGFudDtcblx0fVxuXG5cdF90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChpbnRlcnBvbGFudCkge1xuXHRcdGNvbnN0IGludGVycG9sYW50cyA9IHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsXG5cdFx0XHRcdFx0cHJldkluZGV4ID0gaW50ZXJwb2xhbnQuX19jYWNoZUluZGV4LFxuXHRcdFx0XHRcdGZpcnN0SW5hY3RpdmVJbmRleCA9IC0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsXG5cdFx0XHRcdFx0bGFzdEFjdGl2ZUludGVycG9sYW50ID0gaW50ZXJwb2xhbnRzW2ZpcnN0SW5hY3RpdmVJbmRleF07XG5cdFx0aW50ZXJwb2xhbnQuX19jYWNoZUluZGV4ID0gZmlyc3RJbmFjdGl2ZUluZGV4O1xuXHRcdGludGVycG9sYW50c1tmaXJzdEluYWN0aXZlSW5kZXhdID0gaW50ZXJwb2xhbnQ7XG5cdFx0bGFzdEFjdGl2ZUludGVycG9sYW50Ll9fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRpbnRlcnBvbGFudHNbcHJldkluZGV4XSA9IGxhc3RBY3RpdmVJbnRlcnBvbGFudDtcblx0fSAvLyByZXR1cm4gYW4gYWN0aW9uIGZvciBhIGNsaXAgb3B0aW9uYWxseSB1c2luZyBhIGN1c3RvbSByb290IHRhcmdldFxuXHQvLyBvYmplY3QgKHRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIGxvdCBvZiBkeW5hbWljIG1lbW9yeSBpbiBjYXNlIGFcblx0Ly8gcHJldmlvdXNseSB1bmtub3duIGNsaXAvcm9vdCBjb21iaW5hdGlvbiBpcyBzcGVjaWZpZWQpXG5cblxuXHRjbGlwQWN0aW9uKGNsaXAsIG9wdGlvbmFsUm9vdCwgYmxlbmRNb2RlKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IG9wdGlvbmFsUm9vdCB8fCB0aGlzLl9yb290LFxuXHRcdFx0XHRcdHJvb3RVdWlkID0gcm9vdC51dWlkO1xuXHRcdGxldCBjbGlwT2JqZWN0ID0gdHlwZW9mIGNsaXAgPT09ICdzdHJpbmcnID8gQW5pbWF0aW9uQ2xpcC5maW5kQnlOYW1lKHJvb3QsIGNsaXApIDogY2xpcDtcblx0XHRjb25zdCBjbGlwVXVpZCA9IGNsaXBPYmplY3QgIT09IG51bGwgPyBjbGlwT2JqZWN0LnV1aWQgOiBjbGlwO1xuXHRcdGNvbnN0IGFjdGlvbnNGb3JDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cdFx0bGV0IHByb3RvdHlwZUFjdGlvbiA9IG51bGw7XG5cblx0XHRpZiAoYmxlbmRNb2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChjbGlwT2JqZWN0ICE9PSBudWxsKSB7XG5cdFx0XHRcdGJsZW5kTW9kZSA9IGNsaXBPYmplY3QuYmxlbmRNb2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmxlbmRNb2RlID0gTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhY3Rpb25zRm9yQ2xpcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBleGlzdGluZ0FjdGlvbiA9IGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFtyb290VXVpZF07XG5cblx0XHRcdGlmIChleGlzdGluZ0FjdGlvbiAhPT0gdW5kZWZpbmVkICYmIGV4aXN0aW5nQWN0aW9uLmJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKSB7XG5cdFx0XHRcdHJldHVybiBleGlzdGluZ0FjdGlvbjtcblx0XHRcdH0gLy8gd2Uga25vdyB0aGUgY2xpcCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXJzZSBhbGxcblx0XHRcdC8vIHRoZSBiaW5kaW5ncyBhZ2FpbiBidXQgY2FuIGp1c3QgY29weVxuXG5cblx0XHRcdHByb3RvdHlwZUFjdGlvbiA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9uc1swXTsgLy8gYWxzbywgdGFrZSB0aGUgY2xpcCBmcm9tIHRoZSBwcm90b3R5cGUgYWN0aW9uXG5cblx0XHRcdGlmIChjbGlwT2JqZWN0ID09PSBudWxsKSBjbGlwT2JqZWN0ID0gcHJvdG90eXBlQWN0aW9uLl9jbGlwO1xuXHRcdH0gLy8gY2xpcCBtdXN0IGJlIGtub3duIHdoZW4gc3BlY2lmaWVkIHZpYSBzdHJpbmdcblxuXG5cdFx0aWYgKGNsaXBPYmplY3QgPT09IG51bGwpIHJldHVybiBudWxsOyAvLyBhbGxvY2F0ZSBhbGwgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIHJ1biBpdFxuXG5cdFx0Y29uc3QgbmV3QWN0aW9uID0gbmV3IEFuaW1hdGlvbkFjdGlvbih0aGlzLCBjbGlwT2JqZWN0LCBvcHRpb25hbFJvb3QsIGJsZW5kTW9kZSk7XG5cblx0XHR0aGlzLl9iaW5kQWN0aW9uKG5ld0FjdGlvbiwgcHJvdG90eXBlQWN0aW9uKTsgLy8gYW5kIG1ha2UgdGhlIGFjdGlvbiBrbm93biB0byB0aGUgbWVtb3J5IG1hbmFnZXJcblxuXG5cdFx0dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24obmV3QWN0aW9uLCBjbGlwVXVpZCwgcm9vdFV1aWQpO1xuXG5cdFx0cmV0dXJuIG5ld0FjdGlvbjtcblx0fSAvLyBnZXQgYW4gZXhpc3RpbmcgYWN0aW9uXG5cblxuXHRleGlzdGluZ0FjdGlvbihjbGlwLCBvcHRpb25hbFJvb3QpIHtcblx0XHRjb25zdCByb290ID0gb3B0aW9uYWxSb290IHx8IHRoaXMuX3Jvb3QsXG5cdFx0XHRcdFx0cm9vdFV1aWQgPSByb290LnV1aWQsXG5cdFx0XHRcdFx0Y2xpcE9iamVjdCA9IHR5cGVvZiBjbGlwID09PSAnc3RyaW5nJyA/IEFuaW1hdGlvbkNsaXAuZmluZEJ5TmFtZShyb290LCBjbGlwKSA6IGNsaXAsXG5cdFx0XHRcdFx0Y2xpcFV1aWQgPSBjbGlwT2JqZWN0ID8gY2xpcE9iamVjdC51dWlkIDogY2xpcCxcblx0XHRcdFx0XHRhY3Rpb25zRm9yQ2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXBbY2xpcFV1aWRdO1xuXG5cdFx0aWYgKGFjdGlvbnNGb3JDbGlwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBhY3Rpb25zRm9yQ2xpcC5hY3Rpb25CeVJvb3Rbcm9vdFV1aWRdIHx8IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gLy8gZGVhY3RpdmF0ZXMgYWxsIHByZXZpb3VzbHkgc2NoZWR1bGVkIGFjdGlvbnNcblxuXG5cdHN0b3BBbGxBY3Rpb24oKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRcdFx0bkFjdGlvbnMgPSB0aGlzLl9uQWN0aXZlQWN0aW9ucztcblxuXHRcdGZvciAobGV0IGkgPSBuQWN0aW9ucyAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRhY3Rpb25zW2ldLnN0b3AoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyBhZHZhbmNlIHRoZSB0aW1lIGFuZCB1cGRhdGUgYXBwbHkgdGhlIGFuaW1hdGlvblxuXG5cblx0dXBkYXRlKGRlbHRhVGltZSkge1xuXHRcdGRlbHRhVGltZSAqPSB0aGlzLnRpbWVTY2FsZTtcblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdFx0XHRuQWN0aW9ucyA9IHRoaXMuX25BY3RpdmVBY3Rpb25zLFxuXHRcdFx0XHRcdHRpbWUgPSB0aGlzLnRpbWUgKz0gZGVsdGFUaW1lLFxuXHRcdFx0XHRcdHRpbWVEaXJlY3Rpb24gPSBNYXRoLnNpZ24oZGVsdGFUaW1lKSxcblx0XHRcdFx0XHRhY2N1SW5kZXggPSB0aGlzLl9hY2N1SW5kZXggXj0gMTsgLy8gcnVuIGFjdGl2ZSBhY3Rpb25zXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSAhPT0gbkFjdGlvbnM7ICsraSkge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gYWN0aW9uc1tpXTtcblxuXHRcdFx0YWN0aW9uLl91cGRhdGUodGltZSwgZGVsdGFUaW1lLCB0aW1lRGlyZWN0aW9uLCBhY2N1SW5kZXgpO1xuXHRcdH0gLy8gdXBkYXRlIHNjZW5lIGdyYXBoXG5cblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRcdFx0bkJpbmRpbmdzID0gdGhpcy5fbkFjdGl2ZUJpbmRpbmdzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IG5CaW5kaW5nczsgKytpKSB7XG5cdFx0XHRiaW5kaW5nc1tpXS5hcHBseShhY2N1SW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9IC8vIEFsbG93cyB5b3UgdG8gc2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gYW4gYW5pbWF0aW9uLlxuXG5cblx0c2V0VGltZSh0aW1lSW5TZWNvbmRzKSB7XG5cdFx0dGhpcy50aW1lID0gMDsgLy8gWmVybyBvdXQgdGltZSBhdHRyaWJ1dGUgZm9yIEFuaW1hdGlvbk1peGVyIG9iamVjdDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5fYWN0aW9uc1tpXS50aW1lID0gMDsgLy8gWmVybyBvdXQgdGltZSBhdHRyaWJ1dGUgZm9yIGFsbCBhc3NvY2lhdGVkIEFuaW1hdGlvbkFjdGlvbiBvYmplY3RzLlxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZSh0aW1lSW5TZWNvbmRzKTsgLy8gVXBkYXRlIHVzZWQgdG8gc2V0IGV4YWN0IHRpbWUuIFJldHVybnMgXCJ0aGlzXCIgQW5pbWF0aW9uTWl4ZXIgb2JqZWN0LlxuXHR9IC8vIHJldHVybiB0aGlzIG1peGVyJ3Mgcm9vdCB0YXJnZXQgb2JqZWN0XG5cblxuXHRnZXRSb290KCkge1xuXHRcdHJldHVybiB0aGlzLl9yb290O1xuXHR9IC8vIGZyZWUgYWxsIHJlc291cmNlcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY2xpcFxuXG5cblx0dW5jYWNoZUNsaXAoY2xpcCkge1xuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0XHRcdGNsaXBVdWlkID0gY2xpcC51dWlkLFxuXHRcdFx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwLFxuXHRcdFx0XHRcdGFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0J5Q2xpcFtjbGlwVXVpZF07XG5cblx0XHRpZiAoYWN0aW9uc0ZvckNsaXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbm90ZToganVzdCBjYWxsaW5nIF9yZW1vdmVJbmFjdGl2ZUFjdGlvbiB3b3VsZCBtZXNzIHVwIHRoZVxuXHRcdFx0Ly8gaXRlcmF0aW9uIHN0YXRlIGFuZCBhbHNvIHJlcXVpcmUgdXBkYXRpbmcgdGhlIHN0YXRlIHdlIGNhblxuXHRcdFx0Ly8ganVzdCB0aHJvdyBhd2F5XG5cdFx0XHRjb25zdCBhY3Rpb25zVG9SZW1vdmUgPSBhY3Rpb25zRm9yQ2xpcC5rbm93bkFjdGlvbnM7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gYWN0aW9uc1RvUmVtb3ZlLmxlbmd0aDsgaSAhPT0gbjsgKytpKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNUb1JlbW92ZVtpXTtcblxuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGFjdGlvbik7XG5cblx0XHRcdFx0Y29uc3QgY2FjaGVJbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleCxcblx0XHRcdFx0XHRcdFx0bGFzdEluYWN0aXZlQWN0aW9uID0gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBudWxsO1xuXHRcdFx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBudWxsO1xuXHRcdFx0XHRsYXN0SW5hY3RpdmVBY3Rpb24uX2NhY2hlSW5kZXggPSBjYWNoZUluZGV4O1xuXHRcdFx0XHRhY3Rpb25zW2NhY2hlSW5kZXhdID0gbGFzdEluYWN0aXZlQWN0aW9uO1xuXHRcdFx0XHRhY3Rpb25zLnBvcCgpO1xuXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYWN0aW9uKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIGFjdGlvbnNCeUNsaXBbY2xpcFV1aWRdO1xuXHRcdH1cblx0fSAvLyBmcmVlIGFsbCByZXNvdXJjZXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHJvb3QgdGFyZ2V0IG9iamVjdFxuXG5cblx0dW5jYWNoZVJvb3Qocm9vdCkge1xuXHRcdGNvbnN0IHJvb3RVdWlkID0gcm9vdC51dWlkLFxuXHRcdFx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwO1xuXG5cdFx0Zm9yIChjb25zdCBjbGlwVXVpZCBpbiBhY3Rpb25zQnlDbGlwKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25CeVJvb3QgPSBhY3Rpb25zQnlDbGlwW2NsaXBVdWlkXS5hY3Rpb25CeVJvb3QsXG5cdFx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25CeVJvb3Rbcm9vdFV1aWRdO1xuXG5cdFx0XHRpZiAoYWN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihhY3Rpb24pO1xuXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZ3NCeVJvb3QgPSB0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsXG5cdFx0XHRcdFx0YmluZGluZ0J5TmFtZSA9IGJpbmRpbmdzQnlSb290W3Jvb3RVdWlkXTtcblxuXHRcdGlmIChiaW5kaW5nQnlOYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgdHJhY2tOYW1lIGluIGJpbmRpbmdCeU5hbWUpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdCeU5hbWVbdHJhY2tOYW1lXTtcblx0XHRcdFx0YmluZGluZy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpO1xuXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhiaW5kaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gLy8gcmVtb3ZlIGEgdGFyZ2V0ZWQgY2xpcCBmcm9tIHRoZSBjYWNoZVxuXG5cblx0dW5jYWNoZUFjdGlvbihjbGlwLCBvcHRpb25hbFJvb3QpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLmV4aXN0aW5nQWN0aW9uKGNsaXAsIG9wdGlvbmFsUm9vdCk7XG5cblx0XHRpZiAoYWN0aW9uICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGFjdGlvbik7XG5cblx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGFjdGlvbik7XG5cdFx0fVxuXHR9XG5cbn1cblxuQW5pbWF0aW9uTWl4ZXIucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuY2xhc3MgVW5pZm9ybSB7XG5cdGNvbnN0cnVjdG9yKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4nKTtcblx0XHRcdHZhbHVlID0gYXJndW1lbnRzWzFdO1xuXHRcdH1cblxuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgVW5pZm9ybSh0aGlzLnZhbHVlLmNsb25lID09PSB1bmRlZmluZWQgPyB0aGlzLnZhbHVlIDogdGhpcy52YWx1ZS5jbG9uZSgpKTtcblx0fVxuXG59XG5cbmNsYXNzIEluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyIGV4dGVuZHMgSW50ZXJsZWF2ZWRCdWZmZXIge1xuXHRjb25zdHJ1Y3RvcihhcnJheSwgc3RyaWRlLCBtZXNoUGVyQXR0cmlidXRlID0gMSkge1xuXHRcdHN1cGVyKGFycmF5LCBzdHJpZGUpO1xuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdHN1cGVyLmNvcHkoc291cmNlKTtcblx0XHR0aGlzLm1lc2hQZXJBdHRyaWJ1dGUgPSBzb3VyY2UubWVzaFBlckF0dHJpYnV0ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKGRhdGEpIHtcblx0XHRjb25zdCBpYiA9IHN1cGVyLmNsb25lKGRhdGEpO1xuXHRcdGliLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7XG5cdFx0cmV0dXJuIGliO1xuXHR9XG5cblx0dG9KU09OKGRhdGEpIHtcblx0XHRjb25zdCBqc29uID0gc3VwZXIudG9KU09OKGRhdGEpO1xuXHRcdGpzb24uaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cdFx0anNvbi5tZXNoUGVyQXR0cmlidXRlID0gdGhpcy5tZXNoUGVyQXR0cmlidXRlO1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cbn1cblxuSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgPSB0cnVlO1xuXG5jbGFzcyBHTEJ1ZmZlckF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZSwgaXRlbVNpemUsIGVsZW1lbnRTaXplLCBjb3VudCkge1xuXHRcdHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHRoaXMuZWxlbWVudFNpemUgPSBlbGVtZW50U2l6ZTtcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblx0fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdHJ1ZSkgdGhpcy52ZXJzaW9uKys7XG5cdH1cblxuXHRzZXRCdWZmZXIoYnVmZmVyKSB7XG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRUeXBlKHR5cGUsIGVsZW1lbnRTaXplKSB7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLmVsZW1lbnRTaXplID0gZWxlbWVudFNpemU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRJdGVtU2l6ZShpdGVtU2l6ZSkge1xuXHRcdHRoaXMuaXRlbVNpemUgPSBpdGVtU2l6ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldENvdW50KGNvdW50KSB7XG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuR0xCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGUgPSB0cnVlO1xuXG5jbGFzcyBSYXljYXN0ZXIge1xuXHRjb25zdHJ1Y3RvcihvcmlnaW4sIGRpcmVjdGlvbiwgbmVhciA9IDAsIGZhciA9IEluZmluaXR5KSB7XG5cdFx0dGhpcy5yYXkgPSBuZXcgUmF5KG9yaWdpbiwgZGlyZWN0aW9uKTsgLy8gZGlyZWN0aW9uIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZCAoZm9yIGFjY3VyYXRlIGRpc3RhbmNlIGNhbGN1bGF0aW9ucylcblxuXHRcdHRoaXMubmVhciA9IG5lYXI7XG5cdFx0dGhpcy5mYXIgPSBmYXI7XG5cdFx0dGhpcy5jYW1lcmEgPSBudWxsO1xuXHRcdHRoaXMubGF5ZXJzID0gbmV3IExheWVycygpO1xuXHRcdHRoaXMucGFyYW1zID0ge1xuXHRcdFx0TWVzaDoge30sXG5cdFx0XHRMaW5lOiB7XG5cdFx0XHRcdHRocmVzaG9sZDogMVxuXHRcdFx0fSxcblx0XHRcdExPRDoge30sXG5cdFx0XHRQb2ludHM6IHtcblx0XHRcdFx0dGhyZXNob2xkOiAxXG5cdFx0XHR9LFxuXHRcdFx0U3ByaXRlOiB7fVxuXHRcdH07XG5cdH1cblxuXHRzZXQob3JpZ2luLCBkaXJlY3Rpb24pIHtcblx0XHQvLyBkaXJlY3Rpb24gaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkIChmb3IgYWNjdXJhdGUgZGlzdGFuY2UgY2FsY3VsYXRpb25zKVxuXHRcdHRoaXMucmF5LnNldChvcmlnaW4sIGRpcmVjdGlvbik7XG5cdH1cblxuXHRzZXRGcm9tQ2FtZXJhKGNvb3JkcywgY2FtZXJhKSB7XG5cdFx0aWYgKGNhbWVyYSAmJiBjYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSkge1xuXHRcdFx0dGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdFx0dGhpcy5yYXkuZGlyZWN0aW9uLnNldChjb29yZHMueCwgY29vcmRzLnksIDAuNSkudW5wcm9qZWN0KGNhbWVyYSkuc3ViKHRoaXMucmF5Lm9yaWdpbikubm9ybWFsaXplKCk7XG5cdFx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0XHR9IGVsc2UgaWYgKGNhbWVyYSAmJiBjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcblx0XHRcdHRoaXMucmF5Lm9yaWdpbi5zZXQoY29vcmRzLngsIGNvb3Jkcy55LCAoY2FtZXJhLm5lYXIgKyBjYW1lcmEuZmFyKSAvIChjYW1lcmEubmVhciAtIGNhbWVyYS5mYXIpKS51bnByb2plY3QoY2FtZXJhKTsgLy8gc2V0IG9yaWdpbiBpbiBwbGFuZSBvZiBjYW1lcmFcblxuXHRcdFx0dGhpcy5yYXkuZGlyZWN0aW9uLnNldCgwLCAwLCAtMSkudHJhbnNmb3JtRGlyZWN0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogJyArIGNhbWVyYS50eXBlKTtcblx0XHR9XG5cdH1cblxuXHRpbnRlcnNlY3RPYmplY3Qob2JqZWN0LCByZWN1cnNpdmUgPSB0cnVlLCBpbnRlcnNlY3RzID0gW10pIHtcblx0XHRpbnRlcnNlY3RPYmplY3Qob2JqZWN0LCB0aGlzLCBpbnRlcnNlY3RzLCByZWN1cnNpdmUpO1xuXHRcdGludGVyc2VjdHMuc29ydChhc2NTb3J0KTtcblx0XHRyZXR1cm4gaW50ZXJzZWN0cztcblx0fVxuXG5cdGludGVyc2VjdE9iamVjdHMob2JqZWN0cywgcmVjdXJzaXZlID0gdHJ1ZSwgaW50ZXJzZWN0cyA9IFtdKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBvYmplY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aW50ZXJzZWN0T2JqZWN0KG9iamVjdHNbaV0sIHRoaXMsIGludGVyc2VjdHMsIHJlY3Vyc2l2ZSk7XG5cdFx0fVxuXG5cdFx0aW50ZXJzZWN0cy5zb3J0KGFzY1NvcnQpO1xuXHRcdHJldHVybiBpbnRlcnNlY3RzO1xuXHR9XG5cbn1cblxuZnVuY3Rpb24gYXNjU29ydChhLCBiKSB7XG5cdHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0T2JqZWN0KG9iamVjdCwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCByZWN1cnNpdmUpIHtcblx0aWYgKG9iamVjdC5sYXllcnMudGVzdChyYXljYXN0ZXIubGF5ZXJzKSkge1xuXHRcdG9iamVjdC5yYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cyk7XG5cdH1cblxuXHRpZiAocmVjdXJzaXZlID09PSB0cnVlKSB7XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aW50ZXJzZWN0T2JqZWN0KGNoaWxkcmVuW2ldLCByYXljYXN0ZXIsIGludGVyc2VjdHMsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJlZjogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BoZXJpY2FsX2Nvb3JkaW5hdGVfc3lzdGVtXG4gKlxuICogVGhlIHBvbGFyIGFuZ2xlIChwaGkpIGlzIG1lYXN1cmVkIGZyb20gdGhlIHBvc2l0aXZlIHktYXhpcy4gVGhlIHBvc2l0aXZlIHktYXhpcyBpcyB1cC5cbiAqIFRoZSBhemltdXRoYWwgYW5nbGUgKHRoZXRhKSBpcyBtZWFzdXJlZCBmcm9tIHRoZSBwb3NpdGl2ZSB6LWF4aXMuXG4gKi9cblxuY2xhc3MgU3BoZXJpY2FsIHtcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgcGhpID0gMCwgdGhldGEgPSAwKSB7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7IC8vIHBvbGFyIGFuZ2xlXG5cblx0XHR0aGlzLnRoZXRhID0gdGhldGE7IC8vIGF6aW11dGhhbCBhbmdsZVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXQocmFkaXVzLCBwaGksIHRoZXRhKSB7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7XG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29weShvdGhlcikge1xuXHRcdHRoaXMucmFkaXVzID0gb3RoZXIucmFkaXVzO1xuXHRcdHRoaXMucGhpID0gb3RoZXIucGhpO1xuXHRcdHRoaXMudGhldGEgPSBvdGhlci50aGV0YTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSAvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlIEVQUyBhbmQgUEktRVBTXG5cblxuXHRtYWtlU2FmZSgpIHtcblx0XHRjb25zdCBFUFMgPSAwLjAwMDAwMTtcblx0XHR0aGlzLnBoaSA9IE1hdGgubWF4KEVQUywgTWF0aC5taW4oTWF0aC5QSSAtIEVQUywgdGhpcy5waGkpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKHYpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHYueCwgdi55LCB2LnopO1xuXHR9XG5cblx0c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh4LCB5LCB6KSB7XG5cdFx0dGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcblxuXHRcdGlmICh0aGlzLnJhZGl1cyA9PT0gMCkge1xuXHRcdFx0dGhpcy50aGV0YSA9IDA7XG5cdFx0XHR0aGlzLnBoaSA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGhldGEgPSBNYXRoLmF0YW4yKHgsIHopO1xuXHRcdFx0dGhpcy5waGkgPSBNYXRoLmFjb3MoY2xhbXAoeSAvIHRoaXMucmFkaXVzLCAtMSwgMSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG59XG5cbi8qKlxuICogUmVmOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWxpbmRyaWNhbF9jb29yZGluYXRlX3N5c3RlbVxuICovXG5jbGFzcyBDeWxpbmRyaWNhbCB7XG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHRoZXRhID0gMCwgeSA9IDApIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1czsgLy8gZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luIHRvIGEgcG9pbnQgaW4gdGhlIHgteiBwbGFuZVxuXG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhOyAvLyBjb3VudGVyY2xvY2t3aXNlIGFuZ2xlIGluIHRoZSB4LXogcGxhbmUgbWVhc3VyZWQgaW4gcmFkaWFucyBmcm9tIHRoZSBwb3NpdGl2ZSB6LWF4aXNcblxuXHRcdHRoaXMueSA9IHk7IC8vIGhlaWdodCBhYm92ZSB0aGUgeC16IHBsYW5lXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldChyYWRpdXMsIHRoZXRhLCB5KSB7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhO1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KG90aGVyKSB7XG5cdFx0dGhpcy5yYWRpdXMgPSBvdGhlci5yYWRpdXM7XG5cdFx0dGhpcy50aGV0YSA9IG90aGVyLnRoZXRhO1xuXHRcdHRoaXMueSA9IG90aGVyLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tVmVjdG9yMyh2KSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh2LngsIHYueSwgdi56KTtcblx0fVxuXG5cdHNldEZyb21DYXJ0ZXNpYW5Db29yZHMoeCwgeSwgeikge1xuXHRcdHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KHggKiB4ICsgeiAqIHopO1xuXHRcdHRoaXMudGhldGEgPSBNYXRoLmF0YW4yKHgsIHopO1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpO1xuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQ0ID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IyKCk7XG5cbmNsYXNzIEJveDIge1xuXHRjb25zdHJ1Y3RvcihtaW4gPSBuZXcgVmVjdG9yMigrSW5maW5pdHksICtJbmZpbml0eSksIG1heCA9IG5ldyBWZWN0b3IyKC1JbmZpbml0eSwgLUluZmluaXR5KSkge1xuXHRcdHRoaXMubWluID0gbWluO1xuXHRcdHRoaXMubWF4ID0gbWF4O1xuXHR9XG5cblx0c2V0KG1pbiwgbWF4KSB7XG5cdFx0dGhpcy5taW4uY29weShtaW4pO1xuXHRcdHRoaXMubWF4LmNvcHkobWF4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21Qb2ludHMocG9pbnRzKSB7XG5cdFx0dGhpcy5tYWtlRW1wdHkoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG5cdFx0XHR0aGlzLmV4cGFuZEJ5UG9pbnQocG9pbnRzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21DZW50ZXJBbmRTaXplKGNlbnRlciwgc2l6ZSkge1xuXHRcdGNvbnN0IGhhbGZTaXplID0gX3ZlY3RvciQ0LmNvcHkoc2l6ZSkubXVsdGlwbHlTY2FsYXIoMC41KTtcblxuXHRcdHRoaXMubWluLmNvcHkoY2VudGVyKS5zdWIoaGFsZlNpemUpO1xuXHRcdHRoaXMubWF4LmNvcHkoY2VudGVyKS5hZGQoaGFsZlNpemUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKTtcblx0fVxuXG5cdGNvcHkoYm94KSB7XG5cdFx0dGhpcy5taW4uY29weShib3gubWluKTtcblx0XHR0aGlzLm1heC5jb3B5KGJveC5tYXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bWFrZUVtcHR5KCkge1xuXHRcdHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gK0luZmluaXR5O1xuXHRcdHRoaXMubWF4LnggPSB0aGlzLm1heC55ID0gLUluZmluaXR5O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNFbXB0eSgpIHtcblx0XHQvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIGVtcHR5IHRoYW4gKCB2b2x1bWUgPD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQgcG9zaXRpdmUgd2l0aCB0d28gbmVnYXRpdmUgYXhlc1xuXHRcdHJldHVybiB0aGlzLm1heC54IDwgdGhpcy5taW4ueCB8fCB0aGlzLm1heC55IDwgdGhpcy5taW4ueTtcblx0fVxuXG5cdGdldENlbnRlcih0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KDAsIDApIDogdGFyZ2V0LmFkZFZlY3RvcnModGhpcy5taW4sIHRoaXMubWF4KS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXHR9XG5cblx0Z2V0U2l6ZSh0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KDAsIDApIDogdGFyZ2V0LnN1YlZlY3RvcnModGhpcy5tYXgsIHRoaXMubWluKTtcblx0fVxuXG5cdGV4cGFuZEJ5UG9pbnQocG9pbnQpIHtcblx0XHR0aGlzLm1pbi5taW4ocG9pbnQpO1xuXHRcdHRoaXMubWF4Lm1heChwb2ludCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHBhbmRCeVZlY3Rvcih2ZWN0b3IpIHtcblx0XHR0aGlzLm1pbi5zdWIodmVjdG9yKTtcblx0XHR0aGlzLm1heC5hZGQodmVjdG9yKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZEJ5U2NhbGFyKHNjYWxhcikge1xuXHRcdHRoaXMubWluLmFkZFNjYWxhcigtc2NhbGFyKTtcblx0XHR0aGlzLm1heC5hZGRTY2FsYXIoc2NhbGFyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnRhaW5zUG9pbnQocG9pbnQpIHtcblx0XHRyZXR1cm4gcG9pbnQueCA8IHRoaXMubWluLnggfHwgcG9pbnQueCA+IHRoaXMubWF4LnggfHwgcG9pbnQueSA8IHRoaXMubWluLnkgfHwgcG9pbnQueSA+IHRoaXMubWF4LnkgPyBmYWxzZSA6IHRydWU7XG5cdH1cblxuXHRjb250YWluc0JveChib3gpIHtcblx0XHRyZXR1cm4gdGhpcy5taW4ueCA8PSBib3gubWluLnggJiYgYm94Lm1heC54IDw9IHRoaXMubWF4LnggJiYgdGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4Lnk7XG5cdH1cblxuXHRnZXRQYXJhbWV0ZXIocG9pbnQsIHRhcmdldCkge1xuXHRcdC8vIFRoaXMgY2FuIHBvdGVudGlhbGx5IGhhdmUgYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgYm94XG5cdFx0Ly8gaGFzIGEgc2l6ZSBkaW1lbnNpb24gb2YgMC5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCgocG9pbnQueCAtIHRoaXMubWluLngpIC8gKHRoaXMubWF4LnggLSB0aGlzLm1pbi54KSwgKHBvaW50LnkgLSB0aGlzLm1pbi55KSAvICh0aGlzLm1heC55IC0gdGhpcy5taW4ueSkpO1xuXHR9XG5cblx0aW50ZXJzZWN0c0JveChib3gpIHtcblx0XHQvLyB1c2luZyA0IHNwbGl0dGluZyBwbGFuZXMgdG8gcnVsZSBvdXQgaW50ZXJzZWN0aW9uc1xuXHRcdHJldHVybiBib3gubWF4LnggPCB0aGlzLm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHwgYm94Lm1heC55IDwgdGhpcy5taW4ueSB8fCBib3gubWluLnkgPiB0aGlzLm1heC55ID8gZmFsc2UgOiB0cnVlO1xuXHR9XG5cblx0Y2xhbXBQb2ludChwb2ludCwgdGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KHBvaW50KS5jbGFtcCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KHBvaW50KSB7XG5cdFx0Y29uc3QgY2xhbXBlZFBvaW50ID0gX3ZlY3RvciQ0LmNvcHkocG9pbnQpLmNsYW1wKHRoaXMubWluLCB0aGlzLm1heCk7XG5cblx0XHRyZXR1cm4gY2xhbXBlZFBvaW50LnN1Yihwb2ludCkubGVuZ3RoKCk7XG5cdH1cblxuXHRpbnRlcnNlY3QoYm94KSB7XG5cdFx0dGhpcy5taW4ubWF4KGJveC5taW4pO1xuXHRcdHRoaXMubWF4Lm1pbihib3gubWF4KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVuaW9uKGJveCkge1xuXHRcdHRoaXMubWluLm1pbihib3gubWluKTtcblx0XHR0aGlzLm1heC5tYXgoYm94Lm1heCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR0cmFuc2xhdGUob2Zmc2V0KSB7XG5cdFx0dGhpcy5taW4uYWRkKG9mZnNldCk7XG5cdFx0dGhpcy5tYXguYWRkKG9mZnNldCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRlcXVhbHMoYm94KSB7XG5cdFx0cmV0dXJuIGJveC5taW4uZXF1YWxzKHRoaXMubWluKSAmJiBib3gubWF4LmVxdWFscyh0aGlzLm1heCk7XG5cdH1cblxufVxuXG5Cb3gyLnByb3RvdHlwZS5pc0JveDIgPSB0cnVlO1xuXG5jb25zdCBfc3RhcnRQID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9zdGFydEVuZCA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBMaW5lMyB7XG5cdGNvbnN0cnVjdG9yKHN0YXJ0ID0gbmV3IFZlY3RvcjMoKSwgZW5kID0gbmV3IFZlY3RvcjMoKSkge1xuXHRcdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0fVxuXG5cdHNldChzdGFydCwgZW5kKSB7XG5cdFx0dGhpcy5zdGFydC5jb3B5KHN0YXJ0KTtcblx0XHR0aGlzLmVuZC5jb3B5KGVuZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KGxpbmUpIHtcblx0XHR0aGlzLnN0YXJ0LmNvcHkobGluZS5zdGFydCk7XG5cdFx0dGhpcy5lbmQuY29weShsaW5lLmVuZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRDZW50ZXIodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXHR9XG5cblx0ZGVsdGEodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRhcmdldC5zdWJWZWN0b3JzKHRoaXMuZW5kLCB0aGlzLnN0YXJ0KTtcblx0fVxuXG5cdGRpc3RhbmNlU3EoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpO1xuXHR9XG5cblx0ZGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCk7XG5cdH1cblxuXHRhdCh0LCB0YXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWx0YSh0YXJnZXQpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KTtcblx0fVxuXG5cdGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIocG9pbnQsIGNsYW1wVG9MaW5lKSB7XG5cdFx0X3N0YXJ0UC5zdWJWZWN0b3JzKHBvaW50LCB0aGlzLnN0YXJ0KTtcblxuXHRcdF9zdGFydEVuZC5zdWJWZWN0b3JzKHRoaXMuZW5kLCB0aGlzLnN0YXJ0KTtcblxuXHRcdGNvbnN0IHN0YXJ0RW5kMiA9IF9zdGFydEVuZC5kb3QoX3N0YXJ0RW5kKTtcblxuXHRcdGNvbnN0IHN0YXJ0RW5kX3N0YXJ0UCA9IF9zdGFydEVuZC5kb3QoX3N0YXJ0UCk7XG5cblx0XHRsZXQgdCA9IHN0YXJ0RW5kX3N0YXJ0UCAvIHN0YXJ0RW5kMjtcblxuXHRcdGlmIChjbGFtcFRvTGluZSkge1xuXHRcdFx0dCA9IGNsYW1wKHQsIDAsIDEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0O1xuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludChwb2ludCwgY2xhbXBUb0xpbmUsIHRhcmdldCkge1xuXHRcdGNvbnN0IHQgPSB0aGlzLmNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIocG9pbnQsIGNsYW1wVG9MaW5lKTtcblx0XHRyZXR1cm4gdGhpcy5kZWx0YSh0YXJnZXQpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KTtcblx0fVxuXG5cdGFwcGx5TWF0cml4NChtYXRyaXgpIHtcblx0XHR0aGlzLnN0YXJ0LmFwcGx5TWF0cml4NChtYXRyaXgpO1xuXHRcdHRoaXMuZW5kLmFwcGx5TWF0cml4NChtYXRyaXgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXF1YWxzKGxpbmUpIHtcblx0XHRyZXR1cm4gbGluZS5zdGFydC5lcXVhbHModGhpcy5zdGFydCkgJiYgbGluZS5lbmQuZXF1YWxzKHRoaXMuZW5kKTtcblx0fVxuXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyk7XG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJDMgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgU3BvdExpZ2h0SGVscGVyIGV4dGVuZHMgT2JqZWN0M0Qge1xuXHRjb25zdHJ1Y3RvcihsaWdodCwgY29sb3IpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubGlnaHQgPSBsaWdodDtcblx0XHR0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy5tYXRyaXggPSBsaWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgLTEsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIC0xLCAxXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBqID0gMSwgbCA9IDMyOyBpIDwgbDsgaSsrLCBqKyspIHtcblx0XHRcdGNvbnN0IHAxID0gaSAvIGwgKiBNYXRoLlBJICogMjtcblx0XHRcdGNvbnN0IHAyID0gaiAvIGwgKiBNYXRoLlBJICogMjtcblx0XHRcdHBvc2l0aW9ucy5wdXNoKE1hdGguY29zKHAxKSwgTWF0aC5zaW4ocDEpLCAxLCBNYXRoLmNvcyhwMiksIE1hdGguc2luKHAyKSwgMSk7XG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9ucywgMykpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdGZvZzogZmFsc2UsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pO1xuXHRcdHRoaXMuY29uZSA9IG5ldyBMaW5lU2VnbWVudHMoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLmFkZCh0aGlzLmNvbmUpO1xuXHRcdHRoaXMudXBkYXRlKCk7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHR0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0Y29uc3QgY29uZUxlbmd0aCA9IHRoaXMubGlnaHQuZGlzdGFuY2UgPyB0aGlzLmxpZ2h0LmRpc3RhbmNlIDogMTAwMDtcblx0XHRjb25zdCBjb25lV2lkdGggPSBjb25lTGVuZ3RoICogTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7XG5cdFx0dGhpcy5jb25lLnNjYWxlLnNldChjb25lV2lkdGgsIGNvbmVXaWR0aCwgY29uZUxlbmd0aCk7XG5cblx0XHRfdmVjdG9yJDMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdHRoaXMuY29uZS5sb29rQXQoX3ZlY3RvciQzKTtcblxuXHRcdGlmICh0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO1xuXHRcdH1cblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkMiA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfYm9uZU1hdHJpeCA9IC8qQF9fUFVSRV9fKi9uZXcgTWF0cml4NCgpO1xuXG5jb25zdCBfbWF0cml4V29ybGRJbnYgPSAvKkBfX1BVUkVfXyovbmV3IE1hdHJpeDQoKTtcblxuY2xhc3MgU2tlbGV0b25IZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRjb25zdCBib25lcyA9IGdldEJvbmVMaXN0KG9iamVjdCk7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbG9ycyA9IFtdO1xuXHRcdGNvbnN0IGNvbG9yMSA9IG5ldyBDb2xvcigwLCAwLCAxKTtcblx0XHRjb25zdCBjb2xvcjIgPSBuZXcgQ29sb3IoMCwgMSwgMCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJvbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbaV07XG5cblx0XHRcdGlmIChib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUpIHtcblx0XHRcdFx0dmVydGljZXMucHVzaCgwLCAwLCAwKTtcblx0XHRcdFx0dmVydGljZXMucHVzaCgwLCAwLCAwKTtcblx0XHRcdFx0Y29sb3JzLnB1c2goY29sb3IxLnIsIGNvbG9yMS5nLCBjb2xvcjEuYik7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKGNvbG9yMi5yLCBjb2xvcjIuZywgY29sb3IyLmIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnY29sb3InLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShjb2xvcnMsIDMpKTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHR2ZXJ0ZXhDb2xvcnM6IHRydWUsXG5cdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZSxcblx0XHRcdHRyYW5zcGFyZW50OiB0cnVlXG5cdFx0fSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnU2tlbGV0b25IZWxwZXInO1xuXHRcdHRoaXMuaXNTa2VsZXRvbkhlbHBlciA9IHRydWU7XG5cdFx0dGhpcy5yb290ID0gb2JqZWN0O1xuXHRcdHRoaXMuYm9uZXMgPSBib25lcztcblx0XHR0aGlzLm1hdHJpeCA9IG9iamVjdC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBwb3NpdGlvbiA9IGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKTtcblxuXHRcdF9tYXRyaXhXb3JsZEludi5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCBib25lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzW2ldO1xuXG5cdFx0XHRpZiAoYm9uZS5wYXJlbnQgJiYgYm9uZS5wYXJlbnQuaXNCb25lKSB7XG5cdFx0XHRcdF9ib25lTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoX21hdHJpeFdvcmxkSW52LCBib25lLm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0XHRfdmVjdG9yJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF9ib25lTWF0cml4KTtcblxuXHRcdFx0XHRwb3NpdGlvbi5zZXRYWVooaiwgX3ZlY3RvciQyLngsIF92ZWN0b3IkMi55LCBfdmVjdG9yJDIueik7XG5cblx0XHRcdFx0X2JvbmVNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhfbWF0cml4V29ybGRJbnYsIGJvbmUucGFyZW50Lm1hdHJpeFdvcmxkKTtcblxuXHRcdFx0XHRfdmVjdG9yJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF9ib25lTWF0cml4KTtcblxuXHRcdFx0XHRwb3NpdGlvbi5zZXRYWVooaiArIDEsIF92ZWN0b3IkMi54LCBfdmVjdG9yJDIueSwgX3ZlY3RvciQyLnopO1xuXHRcdFx0XHRqICs9IDI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZChmb3JjZSk7XG5cdH1cblxufVxuXG5mdW5jdGlvbiBnZXRCb25lTGlzdChvYmplY3QpIHtcblx0Y29uc3QgYm9uZUxpc3QgPSBbXTtcblxuXHRpZiAob2JqZWN0ICYmIG9iamVjdC5pc0JvbmUpIHtcblx0XHRib25lTGlzdC5wdXNoKG9iamVjdCk7XG5cdH1cblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdGJvbmVMaXN0LnB1c2guYXBwbHkoYm9uZUxpc3QsIGdldEJvbmVMaXN0KG9iamVjdC5jaGlsZHJlbltpXSkpO1xuXHR9XG5cblx0cmV0dXJuIGJvbmVMaXN0O1xufVxuXG5jbGFzcyBQb2ludExpZ2h0SGVscGVyIGV4dGVuZHMgTWVzaCB7XG5cdGNvbnN0cnVjdG9yKGxpZ2h0LCBzcGhlcmVTaXplLCBjb2xvcikge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IFNwaGVyZUdlb21ldHJ5KHNwaGVyZVNpemUsIDQsIDIpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcblx0XHRcdHdpcmVmcmFtZTogdHJ1ZSxcblx0XHRcdGZvZzogZmFsc2UsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pO1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cdFx0dGhpcy50eXBlID0gJ1BvaW50TGlnaHRIZWxwZXInO1xuXHRcdHRoaXMubWF0cml4ID0gdGhpcy5saWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdC8qXG5cdFx0Ly8gVE9ETzogZGVsZXRlIHRoaXMgY29tbWVudD9cblx0XHRjb25zdCBkaXN0YW5jZUdlb21ldHJ5ID0gbmV3IFRIUkVFLkljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkoIDEsIDIgKTtcblx0XHRjb25zdCBkaXN0YW5jZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBoZXhDb2xvciwgZm9nOiBmYWxzZSwgd2lyZWZyYW1lOiB0cnVlLCBvcGFjaXR5OiAwLjEsIHRyYW5zcGFyZW50OiB0cnVlIH0gKTtcblx0XHR0aGlzLmxpZ2h0U3BoZXJlID0gbmV3IFRIUkVFLk1lc2goIGJ1bGJHZW9tZXRyeSwgYnVsYk1hdGVyaWFsICk7XG5cdFx0dGhpcy5saWdodERpc3RhbmNlID0gbmV3IFRIUkVFLk1lc2goIGRpc3RhbmNlR2VvbWV0cnksIGRpc3RhbmNlTWF0ZXJpYWwgKTtcblx0XHRjb25zdCBkID0gbGlnaHQuZGlzdGFuY2U7XG5cdFx0aWYgKCBkID09PSAwLjAgKSB7XG5cdFx0XHR0aGlzLmxpZ2h0RGlzdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxpZ2h0RGlzdGFuY2Uuc2NhbGUuc2V0KCBkLCBkLCBkICk7XG5cdFx0fVxuXHRcdHRoaXMuYWRkKCB0aGlzLmxpZ2h0RGlzdGFuY2UgKTtcblx0XHQqL1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRpZiAodGhpcy5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO1xuXHRcdH1cblx0XHQvKlxuXHRcdGNvbnN0IGQgPSB0aGlzLmxpZ2h0LmRpc3RhbmNlO1xuXHRcdFx0aWYgKCBkID09PSAwLjAgKSB7XG5cdFx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmxpZ2h0RGlzdGFuY2UudmlzaWJsZSA9IHRydWU7XG5cdFx0XHR0aGlzLmxpZ2h0RGlzdGFuY2Uuc2NhbGUuc2V0KCBkLCBkLCBkICk7XG5cdFx0XHR9XG5cdFx0Ki9cblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQxID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9jb2xvcjEgPSAvKkBfX1BVUkVfXyovbmV3IENvbG9yKCk7XG5cbmNvbnN0IF9jb2xvcjIgPSAvKkBfX1BVUkVfXyovbmV3IENvbG9yKCk7XG5cbmNsYXNzIEhlbWlzcGhlcmVMaWdodEhlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblx0Y29uc3RydWN0b3IobGlnaHQsIHNpemUsIGNvbG9yKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XG5cdFx0dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5jb2xvciA9IGNvbG9yO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9jdGFoZWRyb25HZW9tZXRyeShzaXplKTtcblx0XHRnZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkgKiAwLjUpO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0d2lyZWZyYW1lOiB0cnVlLFxuXHRcdFx0Zm9nOiBmYWxzZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuY29sb3IgPT09IHVuZGVmaW5lZCkgdGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSB0cnVlO1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xuXHRcdGNvbnN0IGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb24uY291bnQgKiAzKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZShjb2xvcnMsIDMpKTtcblx0XHR0aGlzLmFkZChuZXcgTWVzaChnZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCkpO1xuXHRcdHRoaXMudXBkYXRlKCk7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdGNvbnN0IG1lc2ggPSB0aGlzLmNoaWxkcmVuWzBdO1xuXG5cdFx0aWYgKHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNvbG9ycyA9IG1lc2guZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdjb2xvcicpO1xuXG5cdFx0XHRfY29sb3IxLmNvcHkodGhpcy5saWdodC5jb2xvcik7XG5cblx0XHRcdF9jb2xvcjIuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBjb2xvcnMuY291bnQ7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29sb3IgPSBpIDwgbCAvIDIgPyBfY29sb3IxIDogX2NvbG9yMjtcblx0XHRcdFx0Y29sb3JzLnNldFhZWihpLCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcblx0XHRcdH1cblxuXHRcdFx0Y29sb3JzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRtZXNoLmxvb2tBdChfdmVjdG9yJDEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpLm5lZ2F0ZSgpKTtcblx0fVxuXG59XG5cbmNsYXNzIEdyaWRIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXHRjb25zdHJ1Y3RvcihzaXplID0gMTAsIGRpdmlzaW9ucyA9IDEwLCBjb2xvcjEgPSAweDQ0NDQ0NCwgY29sb3IyID0gMHg4ODg4ODgpIHtcblx0XHRjb2xvcjEgPSBuZXcgQ29sb3IoY29sb3IxKTtcblx0XHRjb2xvcjIgPSBuZXcgQ29sb3IoY29sb3IyKTtcblx0XHRjb25zdCBjZW50ZXIgPSBkaXZpc2lvbnMgLyAyO1xuXHRcdGNvbnN0IHN0ZXAgPSBzaXplIC8gZGl2aXNpb25zO1xuXHRcdGNvbnN0IGhhbGZTaXplID0gc2l6ZSAvIDI7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXSxcblx0XHRcdFx0XHRjb2xvcnMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBqID0gMCwgayA9IC1oYWxmU2l6ZTsgaSA8PSBkaXZpc2lvbnM7IGkrKywgayArPSBzdGVwKSB7XG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKC1oYWxmU2l6ZSwgMCwgaywgaGFsZlNpemUsIDAsIGspO1xuXHRcdFx0dmVydGljZXMucHVzaChrLCAwLCAtaGFsZlNpemUsIGssIDAsIGhhbGZTaXplKTtcblx0XHRcdGNvbnN0IGNvbG9yID0gaSA9PT0gY2VudGVyID8gY29sb3IxIDogY29sb3IyO1xuXHRcdFx0Y29sb3IudG9BcnJheShjb2xvcnMsIGopO1xuXHRcdFx0aiArPSAzO1xuXHRcdFx0Y29sb3IudG9BcnJheShjb2xvcnMsIGopO1xuXHRcdFx0aiArPSAzO1xuXHRcdFx0Y29sb3IudG9BcnJheShjb2xvcnMsIGopO1xuXHRcdFx0aiArPSAzO1xuXHRcdFx0Y29sb3IudG9BcnJheShjb2xvcnMsIGopO1xuXHRcdFx0aiArPSAzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGNvbG9ycywgMykpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdHZlcnRleENvbG9yczogdHJ1ZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnR3JpZEhlbHBlcic7XG5cdH1cblxufVxuXG5jbGFzcyBQb2xhckdyaWRIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxMCwgcmFkaWFscyA9IDE2LCBjaXJjbGVzID0gOCwgZGl2aXNpb25zID0gNjQsIGNvbG9yMSA9IDB4NDQ0NDQ0LCBjb2xvcjIgPSAweDg4ODg4OCkge1xuXHRcdGNvbG9yMSA9IG5ldyBDb2xvcihjb2xvcjEpO1xuXHRcdGNvbG9yMiA9IG5ldyBDb2xvcihjb2xvcjIpO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3QgY29sb3JzID0gW107IC8vIGNyZWF0ZSB0aGUgcmFkaWFsc1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gcmFkaWFsczsgaSsrKSB7XG5cdFx0XHRjb25zdCB2ID0gaSAvIHJhZGlhbHMgKiAoTWF0aC5QSSAqIDIpO1xuXHRcdFx0Y29uc3QgeCA9IE1hdGguc2luKHYpICogcmFkaXVzO1xuXHRcdFx0Y29uc3QgeiA9IE1hdGguY29zKHYpICogcmFkaXVzO1xuXHRcdFx0dmVydGljZXMucHVzaCgwLCAwLCAwKTtcblx0XHRcdHZlcnRpY2VzLnB1c2goeCwgMCwgeik7XG5cdFx0XHRjb25zdCBjb2xvciA9IGkgJiAxID8gY29sb3IxIDogY29sb3IyO1xuXHRcdFx0Y29sb3JzLnB1c2goY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG5cdFx0XHRjb2xvcnMucHVzaChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcblx0XHR9IC8vIGNyZWF0ZSB0aGUgY2lyY2xlc1xuXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBjaXJjbGVzOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbG9yID0gaSAmIDEgPyBjb2xvcjEgOiBjb2xvcjI7XG5cdFx0XHRjb25zdCByID0gcmFkaXVzIC0gcmFkaXVzIC8gY2lyY2xlcyAqIGk7XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZGl2aXNpb25zOyBqKyspIHtcblx0XHRcdFx0Ly8gZmlyc3QgdmVydGV4XG5cdFx0XHRcdGxldCB2ID0gaiAvIGRpdmlzaW9ucyAqIChNYXRoLlBJICogMik7XG5cdFx0XHRcdGxldCB4ID0gTWF0aC5zaW4odikgKiByO1xuXHRcdFx0XHRsZXQgeiA9IE1hdGguY29zKHYpICogcjtcblx0XHRcdFx0dmVydGljZXMucHVzaCh4LCAwLCB6KTtcblx0XHRcdFx0Y29sb3JzLnB1c2goY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7IC8vIHNlY29uZCB2ZXJ0ZXhcblxuXHRcdFx0XHR2ID0gKGogKyAxKSAvIGRpdmlzaW9ucyAqIChNYXRoLlBJICogMik7XG5cdFx0XHRcdHggPSBNYXRoLnNpbih2KSAqIHI7XG5cdFx0XHRcdHogPSBNYXRoLmNvcyh2KSAqIHI7XG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goeCwgMCwgeik7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGNvbG9ycywgMykpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKHtcblx0XHRcdHZlcnRleENvbG9yczogdHJ1ZSxcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLnR5cGUgPSAnUG9sYXJHcmlkSGVscGVyJztcblx0fVxuXG59XG5cbmNvbnN0IF92MSA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdjIgPSAvKkBfX1BVUkVfXyovbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX3YzID0gLypAX19QVVJFX18qL25ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIERpcmVjdGlvbmFsTGlnaHRIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdGNvbnN0cnVjdG9yKGxpZ2h0LCBzaXplLCBjb2xvcikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHR0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblx0XHRpZiAoc2l6ZSA9PT0gdW5kZWZpbmVkKSBzaXplID0gMTtcblx0XHRsZXQgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoWy1zaXplLCBzaXplLCAwLCBzaXplLCBzaXplLCAwLCBzaXplLCAtc2l6ZSwgMCwgLXNpemUsIC1zaXplLCAwLCAtc2l6ZSwgc2l6ZSwgMF0sIDMpKTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRmb2c6IGZhbHNlLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KTtcblx0XHR0aGlzLmxpZ2h0UGxhbmUgPSBuZXcgTGluZShnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMuYWRkKHRoaXMubGlnaHRQbGFuZSk7XG5cdFx0Z2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoWzAsIDAsIDAsIDAsIDAsIDFdLCAzKSk7XG5cdFx0dGhpcy50YXJnZXRMaW5lID0gbmV3IExpbmUoZ2VvbWV0cnksIG1hdGVyaWFsKTtcblx0XHR0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpO1xuXHRcdHRoaXMudXBkYXRlKCk7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHR0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cdFx0X3YxLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdF92Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpO1xuXG5cdFx0X3YzLnN1YlZlY3RvcnMoX3YyLCBfdjEpO1xuXG5cdFx0dGhpcy5saWdodFBsYW5lLmxvb2tBdChfdjIpO1xuXG5cdFx0aWYgKHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtcblx0XHRcdHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO1xuXHRcdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7XG5cdFx0fVxuXG5cdFx0dGhpcy50YXJnZXRMaW5lLmxvb2tBdChfdjIpO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5zY2FsZS56ID0gX3YzLmxlbmd0aCgpO1xuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfY2FtZXJhID0gLypAX19QVVJFX18qL25ldyBDYW1lcmEoKTtcbi8qKlxuICpcdC0gc2hvd3MgZnJ1c3R1bSwgbGluZSBvZiBzaWdodCBhbmQgdXAgb2YgdGhlIGNhbWVyYVxuICpcdC0gc3VpdGFibGUgZm9yIGZhc3QgdXBkYXRlc1xuICogXHQtIGJhc2VkIG9uIGZydXN0dW0gdmlzdWFsaXphdGlvbiBpbiBsaWdodGdsLmpzIHNoYWRvd21hcCBleGFtcGxlXG4gKlx0XHRodHRwczovL2dpdGh1Yi5jb20vZXZhbncvbGlnaHRnbC5qcy9ibG9iL21hc3Rlci90ZXN0cy9zaGFkb3dtYXAuaHRtbFxuICovXG5cblxuY2xhc3MgQ2FtZXJhSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblx0Y29uc3RydWN0b3IoY2FtZXJhKSB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRjb2xvcjogMHhmZmZmZmYsXG5cdFx0XHR2ZXJ0ZXhDb2xvcnM6IHRydWUsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3QgY29sb3JzID0gW107XG5cdFx0Y29uc3QgcG9pbnRNYXAgPSB7fTsgLy8gY29sb3JzXG5cblx0XHRjb25zdCBjb2xvckZydXN0dW0gPSBuZXcgQ29sb3IoMHhmZmFhMDApO1xuXHRcdGNvbnN0IGNvbG9yQ29uZSA9IG5ldyBDb2xvcigweGZmMDAwMCk7XG5cdFx0Y29uc3QgY29sb3JVcCA9IG5ldyBDb2xvcigweDAwYWFmZik7XG5cdFx0Y29uc3QgY29sb3JUYXJnZXQgPSBuZXcgQ29sb3IoMHhmZmZmZmYpO1xuXHRcdGNvbnN0IGNvbG9yQ3Jvc3MgPSBuZXcgQ29sb3IoMHgzMzMzMzMpOyAvLyBuZWFyXG5cblx0XHRhZGRMaW5lKCduMScsICduMicsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnbjInLCAnbjQnLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ240JywgJ24zJywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCduMycsICduMScsIGNvbG9yRnJ1c3R1bSk7IC8vIGZhclxuXG5cdFx0YWRkTGluZSgnZjEnLCAnZjInLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ2YyJywgJ2Y0JywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCdmNCcsICdmMycsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnZjMnLCAnZjEnLCBjb2xvckZydXN0dW0pOyAvLyBzaWRlc1xuXG5cdFx0YWRkTGluZSgnbjEnLCAnZjEnLCBjb2xvckZydXN0dW0pO1xuXHRcdGFkZExpbmUoJ24yJywgJ2YyJywgY29sb3JGcnVzdHVtKTtcblx0XHRhZGRMaW5lKCduMycsICdmMycsIGNvbG9yRnJ1c3R1bSk7XG5cdFx0YWRkTGluZSgnbjQnLCAnZjQnLCBjb2xvckZydXN0dW0pOyAvLyBjb25lXG5cblx0XHRhZGRMaW5lKCdwJywgJ24xJywgY29sb3JDb25lKTtcblx0XHRhZGRMaW5lKCdwJywgJ24yJywgY29sb3JDb25lKTtcblx0XHRhZGRMaW5lKCdwJywgJ24zJywgY29sb3JDb25lKTtcblx0XHRhZGRMaW5lKCdwJywgJ240JywgY29sb3JDb25lKTsgLy8gdXBcblxuXHRcdGFkZExpbmUoJ3UxJywgJ3UyJywgY29sb3JVcCk7XG5cdFx0YWRkTGluZSgndTInLCAndTMnLCBjb2xvclVwKTtcblx0XHRhZGRMaW5lKCd1MycsICd1MScsIGNvbG9yVXApOyAvLyB0YXJnZXRcblxuXHRcdGFkZExpbmUoJ2MnLCAndCcsIGNvbG9yVGFyZ2V0KTtcblx0XHRhZGRMaW5lKCdwJywgJ2MnLCBjb2xvckNyb3NzKTsgLy8gY3Jvc3NcblxuXHRcdGFkZExpbmUoJ2NuMScsICdjbjInLCBjb2xvckNyb3NzKTtcblx0XHRhZGRMaW5lKCdjbjMnLCAnY240JywgY29sb3JDcm9zcyk7XG5cdFx0YWRkTGluZSgnY2YxJywgJ2NmMicsIGNvbG9yQ3Jvc3MpO1xuXHRcdGFkZExpbmUoJ2NmMycsICdjZjQnLCBjb2xvckNyb3NzKTtcblxuXHRcdGZ1bmN0aW9uIGFkZExpbmUoYSwgYiwgY29sb3IpIHtcblx0XHRcdGFkZFBvaW50KGEsIGNvbG9yKTtcblx0XHRcdGFkZFBvaW50KGIsIGNvbG9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRQb2ludChpZCwgY29sb3IpIHtcblx0XHRcdHZlcnRpY2VzLnB1c2goMCwgMCwgMCk7XG5cdFx0XHRjb2xvcnMucHVzaChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcblxuXHRcdFx0aWYgKHBvaW50TWFwW2lkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBvaW50TWFwW2lkXSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRwb2ludE1hcFtpZF0ucHVzaCh2ZXJ0aWNlcy5sZW5ndGggLyAzIC0gMSk7XG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGNvbG9ycywgMykpO1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy50eXBlID0gJ0NhbWVyYUhlbHBlcic7XG5cdFx0dGhpcy5jYW1lcmEgPSBjYW1lcmE7XG5cdFx0aWYgKHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgpIHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHR0aGlzLm1hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHR0aGlzLnBvaW50TWFwID0gcG9pbnRNYXA7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgcG9pbnRNYXAgPSB0aGlzLnBvaW50TWFwO1xuXHRcdGNvbnN0IHcgPSAxLFxuXHRcdFx0XHRcdGggPSAxOyAvLyB3ZSBuZWVkIGp1c3QgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4IGludmVyc2Vcblx0XHQvLyB3b3JsZCBtYXRyaXggbXVzdCBiZSBpZGVudGl0eVxuXG5cdFx0X2NhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKTsgLy8gY2VudGVyIC8gdGFyZ2V0XG5cblxuXHRcdHNldFBvaW50KCdjJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCAwLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ3QnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIDAsIDEpOyAvLyBuZWFyXG5cblx0XHRzZXRQb2ludCgnbjEnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC13LCAtaCwgLTEpO1xuXHRcdHNldFBvaW50KCduMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgLWgsIC0xKTtcblx0XHRzZXRQb2ludCgnbjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC13LCBoLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ240JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCBoLCAtMSk7IC8vIGZhclxuXG5cdFx0c2V0UG9pbnQoJ2YxJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtdywgLWgsIDEpO1xuXHRcdHNldFBvaW50KCdmMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgLWgsIDEpO1xuXHRcdHNldFBvaW50KCdmMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLXcsIGgsIDEpO1xuXHRcdHNldFBvaW50KCdmNCcsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgaCwgMSk7IC8vIHVwXG5cblx0XHRzZXRQb2ludCgndTEnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcgKiAwLjcsIGggKiAxLjEsIC0xKTtcblx0XHRzZXRQb2ludCgndTInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC13ICogMC43LCBoICogMS4xLCAtMSk7XG5cdFx0c2V0UG9pbnQoJ3UzJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCBoICogMiwgLTEpOyAvLyBjcm9zc1xuXG5cdFx0c2V0UG9pbnQoJ2NmMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLXcsIDAsIDEpO1xuXHRcdHNldFBvaW50KCdjZjInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIDAsIDEpO1xuXHRcdHNldFBvaW50KCdjZjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIC1oLCAxKTtcblx0XHRzZXRQb2ludCgnY2Y0JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCBoLCAxKTtcblx0XHRzZXRQb2ludCgnY24xJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtdywgMCwgLTEpO1xuXHRcdHNldFBvaW50KCdjbjInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIDAsIC0xKTtcblx0XHRzZXRQb2ludCgnY24zJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCAtaCwgLTEpO1xuXHRcdHNldFBvaW50KCdjbjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGgsIC0xKTtcblx0XHRnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0fVxuXG59XG5cbmZ1bmN0aW9uIHNldFBvaW50KHBvaW50LCBwb2ludE1hcCwgZ2VvbWV0cnksIGNhbWVyYSwgeCwgeSwgeikge1xuXHRfdmVjdG9yLnNldCh4LCB5LCB6KS51bnByb2plY3QoY2FtZXJhKTtcblxuXHRjb25zdCBwb2ludHMgPSBwb2ludE1hcFtwb2ludF07XG5cblx0aWYgKHBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvc2l0aW9uLnNldFhZWihwb2ludHNbaV0sIF92ZWN0b3IueCwgX3ZlY3Rvci55LCBfdmVjdG9yLnopO1xuXHRcdH1cblx0fVxufVxuXG5jb25zdCBfYm94ID0gLypAX19QVVJFX18qL25ldyBCb3gzKCk7XG5cbmNsYXNzIEJveEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cdGNvbnN0cnVjdG9yKG9iamVjdCwgY29sb3IgPSAweGZmZmYwMCkge1xuXHRcdGNvbnN0IGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDEsIDIsIDIsIDMsIDMsIDAsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDQsIDAsIDQsIDEsIDUsIDIsIDYsIDMsIDddKTtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KDggKiAzKTtcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEluZGV4KG5ldyBCdWZmZXJBdHRyaWJ1dGUoaW5kaWNlcywgMSkpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9ucywgMykpO1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0Y29sb3I6IGNvbG9yLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KSk7XG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy50eXBlID0gJ0JveEhlbHBlcic7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy51cGRhdGUoKTtcblx0fVxuXG5cdHVwZGF0ZShvYmplY3QpIHtcblx0XHRpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdF9ib3guc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7XG5cdFx0fVxuXG5cdFx0aWYgKF9ib3guaXNFbXB0eSgpKSByZXR1cm47XG5cdFx0Y29uc3QgbWluID0gX2JveC5taW47XG5cdFx0Y29uc3QgbWF4ID0gX2JveC5tYXg7XG5cdFx0Lypcblx0XHRcdDVfX19fNFxuXHRcdDEvX19fMC98XG5cdFx0fCA2X198Xzdcblx0XHQyL19fXzMvXG5cdFx0XHQwOiBtYXgueCwgbWF4LnksIG1heC56XG5cdFx0MTogbWluLngsIG1heC55LCBtYXguelxuXHRcdDI6IG1pbi54LCBtaW4ueSwgbWF4Lnpcblx0XHQzOiBtYXgueCwgbWluLnksIG1heC56XG5cdFx0NDogbWF4LngsIG1heC55LCBtaW4uelxuXHRcdDU6IG1pbi54LCBtYXgueSwgbWluLnpcblx0XHQ2OiBtaW4ueCwgbWluLnksIG1pbi56XG5cdFx0NzogbWF4LngsIG1pbi55LCBtaW4uelxuXHRcdCovXG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBhcnJheSA9IHBvc2l0aW9uLmFycmF5O1xuXHRcdGFycmF5WzBdID0gbWF4Lng7XG5cdFx0YXJyYXlbMV0gPSBtYXgueTtcblx0XHRhcnJheVsyXSA9IG1heC56O1xuXHRcdGFycmF5WzNdID0gbWluLng7XG5cdFx0YXJyYXlbNF0gPSBtYXgueTtcblx0XHRhcnJheVs1XSA9IG1heC56O1xuXHRcdGFycmF5WzZdID0gbWluLng7XG5cdFx0YXJyYXlbN10gPSBtaW4ueTtcblx0XHRhcnJheVs4XSA9IG1heC56O1xuXHRcdGFycmF5WzldID0gbWF4Lng7XG5cdFx0YXJyYXlbMTBdID0gbWluLnk7XG5cdFx0YXJyYXlbMTFdID0gbWF4Lno7XG5cdFx0YXJyYXlbMTJdID0gbWF4Lng7XG5cdFx0YXJyYXlbMTNdID0gbWF4Lnk7XG5cdFx0YXJyYXlbMTRdID0gbWluLno7XG5cdFx0YXJyYXlbMTVdID0gbWluLng7XG5cdFx0YXJyYXlbMTZdID0gbWF4Lnk7XG5cdFx0YXJyYXlbMTddID0gbWluLno7XG5cdFx0YXJyYXlbMThdID0gbWluLng7XG5cdFx0YXJyYXlbMTldID0gbWluLnk7XG5cdFx0YXJyYXlbMjBdID0gbWluLno7XG5cdFx0YXJyYXlbMjFdID0gbWF4Lng7XG5cdFx0YXJyYXlbMjJdID0gbWluLnk7XG5cdFx0YXJyYXlbMjNdID0gbWluLno7XG5cdFx0cG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cdH1cblxuXHRzZXRGcm9tT2JqZWN0KG9iamVjdCkge1xuXHRcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb3B5KHNvdXJjZSkge1xuXHRcdExpbmVTZWdtZW50cy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsIHNvdXJjZSk7XG5cdFx0dGhpcy5vYmplY3QgPSBzb3VyY2Uub2JqZWN0O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn1cblxuY2xhc3MgQm94M0hlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cdGNvbnN0cnVjdG9yKGJveCwgY29sb3IgPSAweGZmZmYwMCkge1xuXHRcdGNvbnN0IGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDEsIDIsIDIsIDMsIDMsIDAsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDQsIDAsIDQsIDEsIDUsIDIsIDYsIDMsIDddKTtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbMSwgMSwgMSwgLTEsIDEsIDEsIC0xLCAtMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIC0xLCAtMSwgLTEsIDEsIC0xLCAtMV07XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRJbmRleChuZXcgQnVmZmVyQXR0cmlidXRlKGluZGljZXMsIDEpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zLCAzKSk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRjb2xvcjogY29sb3IsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pKTtcblx0XHR0aGlzLmJveCA9IGJveDtcblx0XHR0aGlzLnR5cGUgPSAnQm94M0hlbHBlcic7XG5cdFx0dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XG5cdFx0Y29uc3QgYm94ID0gdGhpcy5ib3g7XG5cdFx0aWYgKGJveC5pc0VtcHR5KCkpIHJldHVybjtcblx0XHRib3guZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pO1xuXHRcdGJveC5nZXRTaXplKHRoaXMuc2NhbGUpO1xuXHRcdHRoaXMuc2NhbGUubXVsdGlwbHlTY2FsYXIoMC41KTtcblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZChmb3JjZSk7XG5cdH1cblxufVxuXG5jbGFzcyBQbGFuZUhlbHBlciBleHRlbmRzIExpbmUge1xuXHRjb25zdHJ1Y3RvcihwbGFuZSwgc2l6ZSA9IDEsIGhleCA9IDB4ZmZmZjAwKSB7XG5cdFx0Y29uc3QgY29sb3IgPSBoZXg7XG5cdFx0Y29uc3QgcG9zaXRpb25zID0gWzEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMF07XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zLCAzKSk7XG5cdFx0Z2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cdFx0c3VwZXIoZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRjb2xvcjogY29sb3IsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pKTtcblx0XHR0aGlzLnR5cGUgPSAnUGxhbmVIZWxwZXInO1xuXHRcdHRoaXMucGxhbmUgPSBwbGFuZTtcblx0XHR0aGlzLnNpemUgPSBzaXplO1xuXHRcdGNvbnN0IHBvc2l0aW9uczIgPSBbMSwgMSwgMSwgLTEsIDEsIDEsIC0xLCAtMSwgMSwgMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgMV07XG5cdFx0Y29uc3QgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkyLnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbnMyLCAzKSk7XG5cdFx0Z2VvbWV0cnkyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXHRcdHRoaXMuYWRkKG5ldyBNZXNoKGdlb21ldHJ5MiwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdG9wYWNpdHk6IDAuMixcblx0XHRcdHRyYW5zcGFyZW50OiB0cnVlLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pKSk7XG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZChmb3JjZSkge1xuXHRcdGxldCBzY2FsZSA9IC10aGlzLnBsYW5lLmNvbnN0YW50O1xuXHRcdGlmIChNYXRoLmFicyhzY2FsZSkgPCAxZS04KSBzY2FsZSA9IDFlLTg7IC8vIHNpZ24gZG9lcyBub3QgbWF0dGVyXG5cblx0XHR0aGlzLnNjYWxlLnNldCgwLjUgKiB0aGlzLnNpemUsIDAuNSAqIHRoaXMuc2l6ZSwgc2NhbGUpO1xuXHRcdHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZSA9IHNjYWxlIDwgMCA/IEJhY2tTaWRlIDogRnJvbnRTaWRlOyAvLyByZW5kZXJlciBmbGlwcyBzaWRlIHdoZW4gZGV0ZXJtaW5hbnQgPCAwOyBmbGlwcGluZyBub3Qgd2FudGVkIGhlcmVcblxuXHRcdHRoaXMubG9va0F0KHRoaXMucGxhbmUubm9ybWFsKTtcblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZChmb3JjZSk7XG5cdH1cblxufVxuXG5jb25zdCBfYXhpcyA9IC8qQF9fUFVSRV9fKi9uZXcgVmVjdG9yMygpO1xuXG5sZXQgX2xpbmVHZW9tZXRyeSwgX2NvbmVHZW9tZXRyeTtcblxuY2xhc3MgQXJyb3dIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cdC8vIGRpciBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0Y29uc3RydWN0b3IoZGlyID0gbmV3IFZlY3RvcjMoMCwgMCwgMSksIG9yaWdpbiA9IG5ldyBWZWN0b3IzKDAsIDAsIDApLCBsZW5ndGggPSAxLCBjb2xvciA9IDB4ZmZmZjAwLCBoZWFkTGVuZ3RoID0gbGVuZ3RoICogMC4yLCBoZWFkV2lkdGggPSBoZWFkTGVuZ3RoICogMC4yKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQXJyb3dIZWxwZXInO1xuXG5cdFx0aWYgKF9saW5lR2VvbWV0cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2xpbmVHZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0XHRfbGluZUdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShbMCwgMCwgMCwgMCwgMSwgMF0sIDMpKTtcblxuXHRcdFx0X2NvbmVHZW9tZXRyeSA9IG5ldyBDeWxpbmRlckdlb21ldHJ5KDAsIDAuNSwgMSwgNSwgMSk7XG5cblx0XHRcdF9jb25lR2VvbWV0cnkudHJhbnNsYXRlKDAsIC0wLjUsIDApO1xuXHRcdH1cblxuXHRcdHRoaXMucG9zaXRpb24uY29weShvcmlnaW4pO1xuXHRcdHRoaXMubGluZSA9IG5ldyBMaW5lKF9saW5lR2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0XHRjb2xvcjogY29sb3IsXG5cdFx0XHR0b25lTWFwcGVkOiBmYWxzZVxuXHRcdH0pKTtcblx0XHR0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuYWRkKHRoaXMubGluZSk7XG5cdFx0dGhpcy5jb25lID0gbmV3IE1lc2goX2NvbmVHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcblx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdHRvbmVNYXBwZWQ6IGZhbHNlXG5cdFx0fSkpO1xuXHRcdHRoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0dGhpcy5hZGQodGhpcy5jb25lKTtcblx0XHR0aGlzLnNldERpcmVjdGlvbihkaXIpO1xuXHRcdHRoaXMuc2V0TGVuZ3RoKGxlbmd0aCwgaGVhZExlbmd0aCwgaGVhZFdpZHRoKTtcblx0fVxuXG5cdHNldERpcmVjdGlvbihkaXIpIHtcblx0XHQvLyBkaXIgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cdFx0aWYgKGRpci55ID4gMC45OTk5OSkge1xuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnNldCgwLCAwLCAwLCAxKTtcblx0XHR9IGVsc2UgaWYgKGRpci55IDwgLTAuOTk5OTkpIHtcblx0XHRcdHRoaXMucXVhdGVybmlvbi5zZXQoMSwgMCwgMCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9heGlzLnNldChkaXIueiwgMCwgLWRpci54KS5ub3JtYWxpemUoKTtcblxuXHRcdFx0Y29uc3QgcmFkaWFucyA9IE1hdGguYWNvcyhkaXIueSk7XG5cdFx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShfYXhpcywgcmFkaWFucyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0TGVuZ3RoKGxlbmd0aCwgaGVhZExlbmd0aCA9IGxlbmd0aCAqIDAuMiwgaGVhZFdpZHRoID0gaGVhZExlbmd0aCAqIDAuMikge1xuXHRcdHRoaXMubGluZS5zY2FsZS5zZXQoMSwgTWF0aC5tYXgoMC4wMDAxLCBsZW5ndGggLSBoZWFkTGVuZ3RoKSwgMSk7IC8vIHNlZSAjMTc0NThcblxuXHRcdHRoaXMubGluZS51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLmNvbmUuc2NhbGUuc2V0KGhlYWRXaWR0aCwgaGVhZExlbmd0aCwgaGVhZFdpZHRoKTtcblx0XHR0aGlzLmNvbmUucG9zaXRpb24ueSA9IGxlbmd0aDtcblx0XHR0aGlzLmNvbmUudXBkYXRlTWF0cml4KCk7XG5cdH1cblxuXHRzZXRDb2xvcihjb2xvcikge1xuXHRcdHRoaXMubGluZS5tYXRlcmlhbC5jb2xvci5zZXQoY29sb3IpO1xuXHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQoY29sb3IpO1xuXHR9XG5cblx0Y29weShzb3VyY2UpIHtcblx0XHRzdXBlci5jb3B5KHNvdXJjZSwgZmFsc2UpO1xuXHRcdHRoaXMubGluZS5jb3B5KHNvdXJjZS5saW5lKTtcblx0XHR0aGlzLmNvbmUuY29weShzb3VyY2UuY29uZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufVxuXG5jbGFzcyBBeGVzSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblx0Y29uc3RydWN0b3Ioc2l6ZSA9IDEpIHtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFswLCAwLCAwLCBzaXplLCAwLCAwLCAwLCAwLCAwLCAwLCBzaXplLCAwLCAwLCAwLCAwLCAwLCAwLCBzaXplXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbMSwgMCwgMCwgMSwgMC42LCAwLCAwLCAxLCAwLCAwLjYsIDEsIDAsIDAsIDAsIDEsIDAsIDAuNiwgMV07XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3JzLCAzKSk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdFx0dmVydGV4Q29sb3JzOiB0cnVlLFxuXHRcdFx0dG9uZU1hcHBlZDogZmFsc2Vcblx0XHR9KTtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9ICdBeGVzSGVscGVyJztcblx0fVxuXG5cdHNldENvbG9ycyh4QXhpc0NvbG9yLCB5QXhpc0NvbG9yLCB6QXhpc0NvbG9yKSB7XG5cdFx0Y29uc3QgY29sb3IgPSBuZXcgQ29sb3IoKTtcblx0XHRjb25zdCBhcnJheSA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5hcnJheTtcblx0XHRjb2xvci5zZXQoeEF4aXNDb2xvcik7XG5cdFx0Y29sb3IudG9BcnJheShhcnJheSwgMCk7XG5cdFx0Y29sb3IudG9BcnJheShhcnJheSwgMyk7XG5cdFx0Y29sb3Iuc2V0KHlBeGlzQ29sb3IpO1xuXHRcdGNvbG9yLnRvQXJyYXkoYXJyYXksIDYpO1xuXHRcdGNvbG9yLnRvQXJyYXkoYXJyYXksIDkpO1xuXHRcdGNvbG9yLnNldCh6QXhpc0NvbG9yKTtcblx0XHRjb2xvci50b0FycmF5KGFycmF5LCAxMik7XG5cdFx0Y29sb3IudG9BcnJheShhcnJheSwgMTUpO1xuXHRcdHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHR9XG5cbn1cblxuY2xhc3MgU2hhcGVQYXRoIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50eXBlID0gJ1NoYXBlUGF0aCc7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigpO1xuXHRcdHRoaXMuc3ViUGF0aHMgPSBbXTtcblx0XHR0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblx0fVxuXG5cdG1vdmVUbyh4LCB5KSB7XG5cdFx0dGhpcy5jdXJyZW50UGF0aCA9IG5ldyBQYXRoKCk7XG5cdFx0dGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpO1xuXHRcdHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHgsIHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bGluZVRvKHgsIHkpIHtcblx0XHR0aGlzLmN1cnJlbnRQYXRoLmxpbmVUbyh4LCB5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHF1YWRyYXRpY0N1cnZlVG8oYUNQeCwgYUNQeSwgYVgsIGFZKSB7XG5cdFx0dGhpcy5jdXJyZW50UGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKGFDUHgsIGFDUHksIGFYLCBhWSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRiZXppZXJDdXJ2ZVRvKGFDUDF4LCBhQ1AxeSwgYUNQMngsIGFDUDJ5LCBhWCwgYVkpIHtcblx0XHR0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8oYUNQMXgsIGFDUDF5LCBhQ1AyeCwgYUNQMnksIGFYLCBhWSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzcGxpbmVUaHJ1KHB0cykge1xuXHRcdHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydShwdHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9TaGFwZXMoaXNDQ1csIG5vSG9sZXMpIHtcblx0XHRmdW5jdGlvbiB0b1NoYXBlc05vSG9sZXMoaW5TdWJwYXRocykge1xuXHRcdFx0Y29uc3Qgc2hhcGVzID0gW107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gaW5TdWJwYXRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdG1wUGF0aCA9IGluU3VicGF0aHNbaV07XG5cdFx0XHRcdGNvbnN0IHRtcFNoYXBlID0gbmV3IFNoYXBlKCk7XG5cdFx0XHRcdHRtcFNoYXBlLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXHRcdFx0XHRzaGFwZXMucHVzaCh0bXBTaGFwZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzaGFwZXM7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNQb2ludEluc2lkZVBvbHlnb24oaW5QdCwgaW5Qb2x5Z29uKSB7XG5cdFx0XHRjb25zdCBwb2x5TGVuID0gaW5Qb2x5Z29uLmxlbmd0aDsgLy8gaW5QdCBvbiBwb2x5Z29uIGNvbnRvdXIgPT4gaW1tZWRpYXRlIHN1Y2Nlc3NcdFx0b3Jcblx0XHRcdC8vIHRvZ2dsaW5nIG9mIGluc2lkZS9vdXRzaWRlIGF0IGV2ZXJ5IHNpbmdsZSEgaW50ZXJzZWN0aW9uIHBvaW50IG9mIGFuIGVkZ2Vcblx0XHRcdC8vXHR3aXRoIHRoZSBob3Jpem9udGFsIGxpbmUgdGhyb3VnaCBpblB0LCBsZWZ0IG9mIGluUHRcblx0XHRcdC8vXHRub3QgY291bnRpbmcgbG93ZXJZIGVuZHBvaW50cyBvZiBlZGdlcyBhbmQgd2hvbGUgZWRnZXMgb24gdGhhdCBsaW5lXG5cblx0XHRcdGxldCBpbnNpZGUgPSBmYWxzZTtcblxuXHRcdFx0Zm9yIChsZXQgcCA9IHBvbHlMZW4gLSAxLCBxID0gMDsgcSA8IHBvbHlMZW47IHAgPSBxKyspIHtcblx0XHRcdFx0bGV0IGVkZ2VMb3dQdCA9IGluUG9seWdvbltwXTtcblx0XHRcdFx0bGV0IGVkZ2VIaWdoUHQgPSBpblBvbHlnb25bcV07XG5cdFx0XHRcdGxldCBlZGdlRHggPSBlZGdlSGlnaFB0LnggLSBlZGdlTG93UHQueDtcblx0XHRcdFx0bGV0IGVkZ2VEeSA9IGVkZ2VIaWdoUHQueSAtIGVkZ2VMb3dQdC55O1xuXG5cdFx0XHRcdGlmIChNYXRoLmFicyhlZGdlRHkpID4gTnVtYmVyLkVQU0lMT04pIHtcblx0XHRcdFx0XHQvLyBub3QgcGFyYWxsZWxcblx0XHRcdFx0XHRpZiAoZWRnZUR5IDwgMCkge1xuXHRcdFx0XHRcdFx0ZWRnZUxvd1B0ID0gaW5Qb2x5Z29uW3FdO1xuXHRcdFx0XHRcdFx0ZWRnZUR4ID0gLWVkZ2VEeDtcblx0XHRcdFx0XHRcdGVkZ2VIaWdoUHQgPSBpblBvbHlnb25bcF07XG5cdFx0XHRcdFx0XHRlZGdlRHkgPSAtZWRnZUR5O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpblB0LnkgPCBlZGdlTG93UHQueSB8fCBpblB0LnkgPiBlZGdlSGlnaFB0LnkpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aWYgKGluUHQueSA9PT0gZWRnZUxvd1B0LnkpIHtcblx0XHRcdFx0XHRcdGlmIChpblB0LnggPT09IGVkZ2VMb3dQdC54KSByZXR1cm4gdHJ1ZTsgLy8gaW5QdCBpcyBvbiBjb250b3VyID9cblx0XHRcdFx0XHRcdC8vIGNvbnRpbnVlO1x0XHRcdFx0Ly8gbm8gaW50ZXJzZWN0aW9uIG9yIGVkZ2VMb3dQdCA9PiBkb2Vzbid0IGNvdW50ICEhIVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwZXJwRWRnZSA9IGVkZ2VEeSAqIChpblB0LnggLSBlZGdlTG93UHQueCkgLSBlZGdlRHggKiAoaW5QdC55IC0gZWRnZUxvd1B0LnkpO1xuXHRcdFx0XHRcdFx0aWYgKHBlcnBFZGdlID09PSAwKSByZXR1cm4gdHJ1ZTsgLy8gaW5QdCBpcyBvbiBjb250b3VyID9cblxuXHRcdFx0XHRcdFx0aWYgKHBlcnBFZGdlIDwgMCkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpbnNpZGUgPSAhaW5zaWRlOyAvLyB0cnVlIGludGVyc2VjdGlvbiBsZWZ0IG9mIGluUHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcGFyYWxsZWwgb3IgY29sbGluZWFyXG5cdFx0XHRcdFx0aWYgKGluUHQueSAhPT0gZWRnZUxvd1B0LnkpIGNvbnRpbnVlOyAvLyBwYXJhbGxlbFxuXHRcdFx0XHRcdC8vIGVkZ2UgbGllcyBvbiB0aGUgc2FtZSBob3Jpem9udGFsIGxpbmUgYXMgaW5QdFxuXG5cdFx0XHRcdFx0aWYgKGVkZ2VIaWdoUHQueCA8PSBpblB0LnggJiYgaW5QdC54IDw9IGVkZ2VMb3dQdC54IHx8IGVkZ2VMb3dQdC54IDw9IGluUHQueCAmJiBpblB0LnggPD0gZWRnZUhpZ2hQdC54KSByZXR1cm4gdHJ1ZTsgLy8gaW5QdDogUG9pbnQgb24gY29udG91ciAhXG5cdFx0XHRcdFx0Ly8gY29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGluc2lkZTtcblx0XHR9XG5cblx0XHRjb25zdCBpc0Nsb2NrV2lzZSA9IFNoYXBlVXRpbHMuaXNDbG9ja1dpc2U7XG5cdFx0Y29uc3Qgc3ViUGF0aHMgPSB0aGlzLnN1YlBhdGhzO1xuXHRcdGlmIChzdWJQYXRocy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblx0XHRpZiAobm9Ib2xlcyA9PT0gdHJ1ZSkgcmV0dXJuIHRvU2hhcGVzTm9Ib2xlcyhzdWJQYXRocyk7XG5cdFx0bGV0IHNvbGlkLCB0bXBQYXRoLCB0bXBTaGFwZTtcblx0XHRjb25zdCBzaGFwZXMgPSBbXTtcblxuXHRcdGlmIChzdWJQYXRocy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRtcFBhdGggPSBzdWJQYXRoc1swXTtcblx0XHRcdHRtcFNoYXBlID0gbmV3IFNoYXBlKCk7XG5cdFx0XHR0bXBTaGFwZS5jdXJ2ZXMgPSB0bXBQYXRoLmN1cnZlcztcblx0XHRcdHNoYXBlcy5wdXNoKHRtcFNoYXBlKTtcblx0XHRcdHJldHVybiBzaGFwZXM7XG5cdFx0fVxuXG5cdFx0bGV0IGhvbGVzRmlyc3QgPSAhaXNDbG9ja1dpc2Uoc3ViUGF0aHNbMF0uZ2V0UG9pbnRzKCkpO1xuXHRcdGhvbGVzRmlyc3QgPSBpc0NDVyA/ICFob2xlc0ZpcnN0IDogaG9sZXNGaXJzdDsgLy8gY29uc29sZS5sb2coXCJIb2xlcyBmaXJzdFwiLCBob2xlc0ZpcnN0KTtcblxuXHRcdGNvbnN0IGJldHRlclNoYXBlSG9sZXMgPSBbXTtcblx0XHRjb25zdCBuZXdTaGFwZXMgPSBbXTtcblx0XHRsZXQgbmV3U2hhcGVIb2xlcyA9IFtdO1xuXHRcdGxldCBtYWluSWR4ID0gMDtcblx0XHRsZXQgdG1wUG9pbnRzO1xuXHRcdG5ld1NoYXBlc1ttYWluSWR4XSA9IHVuZGVmaW5lZDtcblx0XHRuZXdTaGFwZUhvbGVzW21haW5JZHhdID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHN1YlBhdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dG1wUGF0aCA9IHN1YlBhdGhzW2ldO1xuXHRcdFx0dG1wUG9pbnRzID0gdG1wUGF0aC5nZXRQb2ludHMoKTtcblx0XHRcdHNvbGlkID0gaXNDbG9ja1dpc2UodG1wUG9pbnRzKTtcblx0XHRcdHNvbGlkID0gaXNDQ1cgPyAhc29saWQgOiBzb2xpZDtcblxuXHRcdFx0aWYgKHNvbGlkKSB7XG5cdFx0XHRcdGlmICghaG9sZXNGaXJzdCAmJiBuZXdTaGFwZXNbbWFpbklkeF0pIG1haW5JZHgrKztcblx0XHRcdFx0bmV3U2hhcGVzW21haW5JZHhdID0ge1xuXHRcdFx0XHRcdHM6IG5ldyBTaGFwZSgpLFxuXHRcdFx0XHRcdHA6IHRtcFBvaW50c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRuZXdTaGFwZXNbbWFpbklkeF0ucy5jdXJ2ZXMgPSB0bXBQYXRoLmN1cnZlcztcblx0XHRcdFx0aWYgKGhvbGVzRmlyc3QpIG1haW5JZHgrKztcblx0XHRcdFx0bmV3U2hhcGVIb2xlc1ttYWluSWR4XSA9IFtdOyAvL2NvbnNvbGUubG9nKCdjdycsIGkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3U2hhcGVIb2xlc1ttYWluSWR4XS5wdXNoKHtcblx0XHRcdFx0XHRoOiB0bXBQYXRoLFxuXHRcdFx0XHRcdHA6IHRtcFBvaW50c1swXVxuXHRcdFx0XHR9KTsgLy9jb25zb2xlLmxvZygnY2N3JywgaSk7XG5cdFx0XHR9XG5cdFx0fSAvLyBvbmx5IEhvbGVzPyAtPiBwcm9iYWJseSBhbGwgU2hhcGVzIHdpdGggd3Jvbmcgb3JpZW50YXRpb25cblxuXG5cdFx0aWYgKCFuZXdTaGFwZXNbMF0pIHJldHVybiB0b1NoYXBlc05vSG9sZXMoc3ViUGF0aHMpO1xuXG5cdFx0aWYgKG5ld1NoYXBlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRsZXQgYW1iaWd1b3VzID0gZmFsc2U7XG5cdFx0XHRjb25zdCB0b0NoYW5nZSA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBzSWR4ID0gMCwgc0xlbiA9IG5ld1NoYXBlcy5sZW5ndGg7IHNJZHggPCBzTGVuOyBzSWR4KyspIHtcblx0XHRcdFx0YmV0dGVyU2hhcGVIb2xlc1tzSWR4XSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBzSWR4ID0gMCwgc0xlbiA9IG5ld1NoYXBlcy5sZW5ndGg7IHNJZHggPCBzTGVuOyBzSWR4KyspIHtcblx0XHRcdFx0Y29uc3Qgc2hvID0gbmV3U2hhcGVIb2xlc1tzSWR4XTtcblxuXHRcdFx0XHRmb3IgKGxldCBoSWR4ID0gMDsgaElkeCA8IHNoby5sZW5ndGg7IGhJZHgrKykge1xuXHRcdFx0XHRcdGNvbnN0IGhvID0gc2hvW2hJZHhdO1xuXHRcdFx0XHRcdGxldCBob2xlX3VuYXNzaWduZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgczJJZHggPSAwOyBzMklkeCA8IG5ld1NoYXBlcy5sZW5ndGg7IHMySWR4KyspIHtcblx0XHRcdFx0XHRcdGlmIChpc1BvaW50SW5zaWRlUG9seWdvbihoby5wLCBuZXdTaGFwZXNbczJJZHhdLnApKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzSWR4ICE9PSBzMklkeCkgdG9DaGFuZ2UucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0ZnJvbXM6IHNJZHgsXG5cdFx0XHRcdFx0XHRcdFx0dG9zOiBzMklkeCxcblx0XHRcdFx0XHRcdFx0XHRob2xlOiBoSWR4XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChob2xlX3VuYXNzaWduZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRob2xlX3VuYXNzaWduZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRiZXR0ZXJTaGFwZUhvbGVzW3MySWR4XS5wdXNoKGhvKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhbWJpZ3VvdXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGhvbGVfdW5hc3NpZ25lZCkge1xuXHRcdFx0XHRcdFx0YmV0dGVyU2hhcGVIb2xlc1tzSWR4XS5wdXNoKGhvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gLy8gY29uc29sZS5sb2coXCJhbWJpZ3VvdXM6IFwiLCBhbWJpZ3VvdXMpO1xuXG5cblx0XHRcdGlmICh0b0NoYW5nZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwidG8gY2hhbmdlOiBcIiwgdG9DaGFuZ2UpO1xuXHRcdFx0XHRpZiAoIWFtYmlndW91cykgbmV3U2hhcGVIb2xlcyA9IGJldHRlclNoYXBlSG9sZXM7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHRtcEhvbGVzO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGlsID0gbmV3U2hhcGVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcblx0XHRcdHRtcFNoYXBlID0gbmV3U2hhcGVzW2ldLnM7XG5cdFx0XHRzaGFwZXMucHVzaCh0bXBTaGFwZSk7XG5cdFx0XHR0bXBIb2xlcyA9IG5ld1NoYXBlSG9sZXNbaV07XG5cblx0XHRcdGZvciAobGV0IGogPSAwLCBqbCA9IHRtcEhvbGVzLmxlbmd0aDsgaiA8IGpsOyBqKyspIHtcblx0XHRcdFx0dG1wU2hhcGUuaG9sZXMucHVzaCh0bXBIb2xlc1tqXS5oKTtcblx0XHRcdH1cblx0XHR9IC8vY29uc29sZS5sb2coXCJzaGFwZVwiLCBzaGFwZXMpO1xuXG5cblx0XHRyZXR1cm4gc2hhcGVzO1xuXHR9XG5cbn1cblxuY29uc3QgX2Zsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5cbmNvbnN0IF9pbnQzMlZpZXcgPSBuZXcgSW50MzJBcnJheShfZmxvYXRWaWV3LmJ1ZmZlcik7XG5cbmNsYXNzIERhdGFVdGlscyB7XG5cdC8vIENvbnZlcnRzIGZsb2F0MzIgdG8gZmxvYXQxNiAoc3RvcmVkIGFzIHVpbnQxNiB2YWx1ZSkuXG5cdHN0YXRpYyB0b0hhbGZGbG9hdCh2YWwpIHtcblx0XHRpZiAodmFsID4gNjU1MDQpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuRGF0YVV0aWxzLnRvSGFsZkZsb2F0KCk6IHZhbHVlIGV4Y2VlZHMgNjU1MDQuJyk7XG5cdFx0XHR2YWwgPSA2NTUwNDsgLy8gbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIGluIGZsb2F0MTZcblx0XHR9IC8vIFNvdXJjZTogaHR0cDovL2dhbWVkZXYuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzE3MzI2L2NvbnZlcnNpb24tb2YtYS1udW1iZXItZnJvbS1zaW5nbGUtcHJlY2lzaW9uLWZsb2F0aW5nLXBvaW50LXJlcHJlc2VudGF0aW9uLXRvLWEvMTc0MTAjMTc0MTBcblxuXHRcdC8qIFRoaXMgbWV0aG9kIGlzIGZhc3RlciB0aGFuIHRoZSBPcGVuRVhSIGltcGxlbWVudGF0aW9uICh2ZXJ5IG9mdGVuXG5cdFx0KiB1c2VkLCBlZy4gaW4gT2dyZSksIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVuZWZpdCBvZiByb3VuZGluZywgaW5zcGlyZWRcblx0XHQqIGJ5IEphbWVzIFR1cnNhP3MgaGFsZi1wcmVjaXNpb24gY29kZS4gKi9cblxuXG5cdFx0X2Zsb2F0Vmlld1swXSA9IHZhbDtcblx0XHRjb25zdCB4ID0gX2ludDMyVmlld1swXTtcblx0XHRsZXQgYml0cyA9IHggPj4gMTYgJiAweDgwMDA7XG5cdFx0LyogR2V0IHRoZSBzaWduICovXG5cblx0XHRsZXQgbSA9IHggPj4gMTIgJiAweDA3ZmY7XG5cdFx0LyogS2VlcCBvbmUgZXh0cmEgYml0IGZvciByb3VuZGluZyAqL1xuXG5cdFx0Y29uc3QgZSA9IHggPj4gMjMgJiAweGZmO1xuXHRcdC8qIFVzaW5nIGludCBpcyBmYXN0ZXIgaGVyZSAqL1xuXG5cdFx0LyogSWYgemVybywgb3IgZGVub3JtYWwsIG9yIGV4cG9uZW50IHVuZGVyZmxvd3MgdG9vIG11Y2ggZm9yIGEgZGVub3JtYWxcblx0XHRcdCogaGFsZiwgcmV0dXJuIHNpZ25lZCB6ZXJvLiAqL1xuXG5cdFx0aWYgKGUgPCAxMDMpIHJldHVybiBiaXRzO1xuXHRcdC8qIElmIE5hTiwgcmV0dXJuIE5hTi4gSWYgSW5mIG9yIGV4cG9uZW50IG92ZXJmbG93LCByZXR1cm4gSW5mLiAqL1xuXG5cdFx0aWYgKGUgPiAxNDIpIHtcblx0XHRcdGJpdHMgfD0gMHg3YzAwO1xuXHRcdFx0LyogSWYgZXhwb25lbnQgd2FzIDB4ZmYgYW5kIG9uZSBtYW50aXNzYSBiaXQgd2FzIHNldCwgaXQgbWVhbnMgTmFOLFxuXHRcdFx0XHRcdFx0KiBub3QgSW5mLCBzbyBtYWtlIHN1cmUgd2Ugc2V0IG9uZSBtYW50aXNzYSBiaXQgdG9vLiAqL1xuXG5cdFx0XHRiaXRzIHw9IChlID09IDI1NSA/IDAgOiAxKSAmJiB4ICYgMHgwMDdmZmZmZjtcblx0XHRcdHJldHVybiBiaXRzO1xuXHRcdH1cblx0XHQvKiBJZiBleHBvbmVudCB1bmRlcmZsb3dzIGJ1dCBub3QgdG9vIG11Y2gsIHJldHVybiBhIGRlbm9ybWFsICovXG5cblxuXHRcdGlmIChlIDwgMTEzKSB7XG5cdFx0XHRtIHw9IDB4MDgwMDtcblx0XHRcdC8qIEV4dHJhIHJvdW5kaW5nIG1heSBvdmVyZmxvdyBhbmQgc2V0IG1hbnRpc3NhIHRvIDAgYW5kIGV4cG9uZW50XG5cdFx0XHRcdCogdG8gMSwgd2hpY2ggaXMgT0suICovXG5cblx0XHRcdGJpdHMgfD0gKG0gPj4gMTE0IC0gZSkgKyAobSA+PiAxMTMgLSBlICYgMSk7XG5cdFx0XHRyZXR1cm4gYml0cztcblx0XHR9XG5cblx0XHRiaXRzIHw9IGUgLSAxMTIgPDwgMTAgfCBtID4+IDE7XG5cdFx0LyogRXh0cmEgcm91bmRpbmcuIEFuIG92ZXJmbG93IHdpbGwgc2V0IG1hbnRpc3NhIHRvIDAgYW5kIGluY3JlbWVudFxuXHRcdFx0KiB0aGUgZXhwb25lbnQsIHdoaWNoIGlzIE9LLiAqL1xuXG5cdFx0Yml0cyArPSBtICYgMTtcblx0XHRyZXR1cm4gYml0cztcblx0fVxuXG59XG5cbmNvbnN0IExpbmVTdHJpcCA9IDA7XG5jb25zdCBMaW5lUGllY2VzID0gMTtcbmNvbnN0IE5vQ29sb3JzID0gMDtcbmNvbnN0IEZhY2VDb2xvcnMgPSAxO1xuY29uc3QgVmVydGV4Q29sb3JzID0gMjtcbmZ1bmN0aW9uIE1lc2hGYWNlTWF0ZXJpYWwobWF0ZXJpYWxzKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG1hdGVyaWFscztcbn1cbmZ1bmN0aW9uIE11bHRpTWF0ZXJpYWwobWF0ZXJpYWxzID0gW10pIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLicpO1xuXHRtYXRlcmlhbHMuaXNNdWx0aU1hdGVyaWFsID0gdHJ1ZTtcblx0bWF0ZXJpYWxzLm1hdGVyaWFscyA9IG1hdGVyaWFscztcblxuXHRtYXRlcmlhbHMuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG1hdGVyaWFscy5zbGljZSgpO1xuXHR9O1xuXG5cdHJldHVybiBtYXRlcmlhbHM7XG59XG5mdW5jdGlvbiBQb2ludENsb3VkKGdlb21ldHJ5LCBtYXRlcmlhbCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBvaW50Q2xvdWQgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuJyk7XG5cdHJldHVybiBuZXcgUG9pbnRzKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG59XG5mdW5jdGlvbiBQYXJ0aWNsZShtYXRlcmlhbCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBhcnRpY2xlIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuU3ByaXRlLicpO1xuXHRyZXR1cm4gbmV3IFNwcml0ZShtYXRlcmlhbCk7XG59XG5mdW5jdGlvbiBQYXJ0aWNsZVN5c3RlbShnZW9tZXRyeSwgbWF0ZXJpYWwpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4nKTtcblx0cmV0dXJuIG5ldyBQb2ludHMoZ2VvbWV0cnksIG1hdGVyaWFsKTtcbn1cbmZ1bmN0aW9uIFBvaW50Q2xvdWRNYXRlcmlhbChwYXJhbWV0ZXJzKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUG9pbnRDbG91ZE1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyk7XG5cdHJldHVybiBuZXcgUG9pbnRzTWF0ZXJpYWwocGFyYW1ldGVycyk7XG59XG5mdW5jdGlvbiBQYXJ0aWNsZUJhc2ljTWF0ZXJpYWwocGFyYW1ldGVycykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLicpO1xuXHRyZXR1cm4gbmV3IFBvaW50c01hdGVyaWFsKHBhcmFtZXRlcnMpO1xufVxuZnVuY3Rpb24gUGFydGljbGVTeXN0ZW1NYXRlcmlhbChwYXJhbWV0ZXJzKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLicpO1xuXHRyZXR1cm4gbmV3IFBvaW50c01hdGVyaWFsKHBhcmFtZXRlcnMpO1xufVxuZnVuY3Rpb24gVmVydGV4KHgsIHksIHopIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopO1xufSAvL1xuXG5mdW5jdGlvbiBEeW5hbWljQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSk7XG59XG5mdW5jdGlvbiBJbnQ4QXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBJbnQ4QnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBVaW50OEF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBVaW50OEJ1ZmZlckF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpO1xufVxuZnVuY3Rpb24gVWludDhDbGFtcGVkQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBJbnQxNkF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBJbnQxNkJ1ZmZlckF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpO1xufVxuZnVuY3Rpb24gVWludDE2QXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBJbnQzMkF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5JbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBJbnQzMkJ1ZmZlckF0dHJpYnV0ZShhcnJheSwgaXRlbVNpemUpO1xufVxuZnVuY3Rpb24gVWludDMyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgVWludDMyQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBGbG9hdDMyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59XG5mdW5jdGlvbiBGbG9hdDY0QXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkZsb2F0NjRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBGbG9hdDY0QnVmZmVyQXR0cmlidXRlKGFycmF5LCBpdGVtU2l6ZSk7XG59IC8vXG5cbkN1cnZlLmNyZWF0ZSA9IGZ1bmN0aW9uIChjb25zdHJ1Y3QsIGdldFBvaW50KSB7XG5cdGNvbnNvbGUubG9nKCdUSFJFRS5DdXJ2ZS5jcmVhdGUoKSBoYXMgYmVlbiBkZXByZWNhdGVkJyk7XG5cdGNvbnN0cnVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEN1cnZlLnByb3RvdHlwZSk7XG5cdGNvbnN0cnVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Q7XG5cdGNvbnN0cnVjdC5wcm90b3R5cGUuZ2V0UG9pbnQgPSBnZXRQb2ludDtcblx0cmV0dXJuIGNvbnN0cnVjdDtcbn07IC8vXG5cblxuUGF0aC5wcm90b3R5cGUuZnJvbVBvaW50cyA9IGZ1bmN0aW9uIChwb2ludHMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4nKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbVBvaW50cyhwb2ludHMpO1xufTsgLy9cblxuXG5mdW5jdGlvbiBBeGlzSGVscGVyKHNpemUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5BeGlzSGVscGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuQXhlc0hlbHBlci4nKTtcblx0cmV0dXJuIG5ldyBBeGVzSGVscGVyKHNpemUpO1xufVxuZnVuY3Rpb24gQm91bmRpbmdCb3hIZWxwZXIob2JqZWN0LCBjb2xvcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgQm94SGVscGVyKG9iamVjdCwgY29sb3IpO1xufVxuZnVuY3Rpb24gRWRnZXNIZWxwZXIob2JqZWN0LCBoZXgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5FZGdlc0hlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRWRnZXNHZW9tZXRyeSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IExpbmVTZWdtZW50cyhuZXcgRWRnZXNHZW9tZXRyeShvYmplY3QuZ2VvbWV0cnkpLCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoe1xuXHRcdGNvbG9yOiBoZXggIT09IHVuZGVmaW5lZCA/IGhleCA6IDB4ZmZmZmZmXG5cdH0pKTtcbn1cblxuR3JpZEhlbHBlci5wcm90b3R5cGUuc2V0Q29sb3JzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuJyk7XG59O1xuXG5Ta2VsZXRvbkhlbHBlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4nKTtcbn07XG5cbmZ1bmN0aW9uIFdpcmVmcmFtZUhlbHBlcihvYmplY3QsIGhleCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIG5ldyBMaW5lU2VnbWVudHMobmV3IFdpcmVmcmFtZUdlb21ldHJ5KG9iamVjdC5nZW9tZXRyeSksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XG5cdFx0Y29sb3I6IGhleCAhPT0gdW5kZWZpbmVkID8gaGV4IDogMHhmZmZmZmZcblx0fSkpO1xufSAvL1xuXG5Mb2FkZXIucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlID0gZnVuY3Rpb24gKHVybCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKHVybCk7XG59O1xuXG5Mb2FkZXIuSGFuZGxlcnMgPSB7XG5cdGFkZDogZnVuY3Rpb25cblx0XHQvKiByZWdleCwgbG9hZGVyICovXG5cdCgpIHtcblx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4nKTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvblxuXHRcdC8qIGZpbGUgKi9cblx0KCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLicpO1xuXHR9XG59O1xuZnVuY3Rpb24gWEhSTG9hZGVyKG1hbmFnZXIpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLicpO1xuXHRyZXR1cm4gbmV3IEZpbGVMb2FkZXIobWFuYWdlcik7XG59XG5mdW5jdGlvbiBCaW5hcnlUZXh0dXJlTG9hZGVyKG1hbmFnZXIpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuJyk7XG5cdHJldHVybiBuZXcgRGF0YVRleHR1cmVMb2FkZXIobWFuYWdlcik7XG59IC8vXG5cbkJveDIucHJvdG90eXBlLmNlbnRlciA9IGZ1bmN0aW9uIChvcHRpb25hbFRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKG9wdGlvbmFsVGFyZ2V0KTtcbn07XG5cbkJveDIucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4nKTtcblx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xufTtcblxuQm94Mi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3ggPSBmdW5jdGlvbiAoYm94KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLicpO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGJveCk7XG59O1xuXG5Cb3gyLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKG9wdGlvbmFsVGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldFNpemUob3B0aW9uYWxUYXJnZXQpO1xufTsgLy9cblxuXG5Cb3gzLnByb3RvdHlwZS5jZW50ZXIgPSBmdW5jdGlvbiAob3B0aW9uYWxUYXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldENlbnRlcihvcHRpb25hbFRhcmdldCk7XG59O1xuXG5Cb3gzLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuJyk7XG5cdHJldHVybiB0aGlzLmlzRW1wdHkoKTtcbn07XG5cbkJveDMucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94ID0gZnVuY3Rpb24gKGJveCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4nKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChib3gpO1xufTtcblxuQm94My5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmUgPSBmdW5jdGlvbiAoc3BoZXJlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSk7XG59O1xuXG5Cb3gzLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKG9wdGlvbmFsVGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldFNpemUob3B0aW9uYWxUYXJnZXQpO1xufTsgLy9cblxuXG5TcGhlcmUucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLicpO1xuXHRyZXR1cm4gdGhpcy5pc0VtcHR5KCk7XG59OyAvL1xuXG5cbkZydXN0dW0ucHJvdG90eXBlLnNldEZyb21NYXRyaXggPSBmdW5jdGlvbiAobSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4nKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgobSk7XG59OyAvL1xuXG5cbkxpbmUzLnByb3RvdHlwZS5jZW50ZXIgPSBmdW5jdGlvbiAob3B0aW9uYWxUYXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRDZW50ZXIob3B0aW9uYWxUYXJnZXQpO1xufTsgLy9cblxuXG5NYXRyaXgzLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldCA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMudG9BcnJheShhcnJheSwgb2Zmc2V0KTtcbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMyA9IGZ1bmN0aW9uICh2ZWN0b3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXgzKHRoaXMpO1xufTtcblxuTWF0cml4My5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXkgPSBmdW5jdGlvblxuXHQvKiBhICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlID0gZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKHRoaXMpO1xufTtcblxuTWF0cml4My5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheSA9IGZ1bmN0aW9uXG5cdC8qIGFycmF5LCBvZmZzZXQsIGxlbmd0aCAqL1xuKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5nZXRJbnZlcnNlID0gZnVuY3Rpb24gKG1hdHJpeCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMuY29weShtYXRyaXgpLmludmVydCgpO1xufTsgLy9cblxuXG5NYXRyaXg0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb24gPSBmdW5jdGlvbiAobSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4nKTtcblx0cmV0dXJuIHRoaXMuY29weVBvc2l0aW9uKG0pO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuJyk7XG5cdHJldHVybiB0aGlzLnRvQXJyYXkoYXJyYXksIG9mZnNldCk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywgMyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uID0gZnVuY3Rpb24gKHEpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuJyk7XG5cdHJldHVybiB0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHEpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzID0gZnVuY3Rpb24gKHZlY3Rvcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQodGhpcyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQgPSBmdW5jdGlvbiAodmVjdG9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCh0aGlzKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5ID0gZnVuY3Rpb25cblx0LyogYSAqL1xuKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUucm90YXRlQXhpcyA9IGZ1bmN0aW9uICh2KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHYudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUuY3Jvc3NWZWN0b3IgPSBmdW5jdGlvbiAodmVjdG9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KHRoaXMpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVggPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVkgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZVogPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlID0gZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyk7XG5cdHJldHVybiBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KHRoaXMpO1xufTtcblxuTWF0cml4NC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheSA9IGZ1bmN0aW9uXG5cdC8qIGFycmF5LCBvZmZzZXQsIGxlbmd0aCAqL1xuKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5tYWtlRnJ1c3R1bSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuJyk7XG5cdHJldHVybiB0aGlzLm1ha2VQZXJzcGVjdGl2ZShsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhcik7XG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5nZXRJbnZlcnNlID0gZnVuY3Rpb24gKG1hdHJpeCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMuY29weShtYXRyaXgpLmludmVydCgpO1xufTsgLy9cblxuXG5QbGFuZS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNMaW5lKGxpbmUpO1xufTsgLy9cblxuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjMgPSBmdW5jdGlvbiAodmVjdG9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuJyk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpO1xufTtcblxuUXVhdGVybmlvbi5wcm90b3R5cGUuaW52ZXJzZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuJyk7XG5cdHJldHVybiB0aGlzLmludmVydCgpO1xufTsgLy9cblxuXG5SYXkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94ID0gZnVuY3Rpb24gKGJveCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLicpO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGJveCk7XG59O1xuXG5SYXkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmUgPSBmdW5jdGlvbiAocGxhbmUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuJyk7XG5cdHJldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShwbGFuZSk7XG59O1xuXG5SYXkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlID0gZnVuY3Rpb24gKHNwaGVyZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHNwaGVyZSk7XG59OyAvL1xuXG5cblRyaWFuZ2xlLnByb3RvdHlwZS5hcmVhID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0QXJlYSgpO1xufTtcblxuVHJpYW5nbGUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludCA9IGZ1bmN0aW9uIChwb2ludCwgdGFyZ2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHBvaW50LCB0YXJnZXQpO1xufTtcblxuVHJpYW5nbGUucHJvdG90eXBlLm1pZHBvaW50ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRNaWRwb2ludCh0YXJnZXQpO1xufTtcblxuVHJpYW5nbGUucHJvdG90eXBlbm9ybWFsID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldE5vcm1hbCh0YXJnZXQpO1xufTtcblxuVHJpYW5nbGUucHJvdG90eXBlLnBsYW5lID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRQbGFuZSh0YXJnZXQpO1xufTtcblxuVHJpYW5nbGUuYmFyeWNvb3JkRnJvbVBvaW50ID0gZnVuY3Rpb24gKHBvaW50LCBhLCBiLCBjLCB0YXJnZXQpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLicpO1xuXHRyZXR1cm4gVHJpYW5nbGUuZ2V0QmFyeWNvb3JkKHBvaW50LCBhLCBiLCBjLCB0YXJnZXQpO1xufTtcblxuVHJpYW5nbGUubm9ybWFsID0gZnVuY3Rpb24gKGEsIGIsIGMsIHRhcmdldCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuJyk7XG5cdHJldHVybiBUcmlhbmdsZS5nZXROb3JtYWwoYSwgYiwgYywgdGFyZ2V0KTtcbn07IC8vXG5cblxuU2hhcGUucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHMgPSBmdW5jdGlvbiAoZGl2aXNpb25zKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4nKTtcblx0cmV0dXJuIHRoaXMuZXh0cmFjdFBvaW50cyhkaXZpc2lvbnMpO1xufTtcblxuU2hhcGUucHJvdG90eXBlLmV4dHJ1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IEV4dHJ1ZGVHZW9tZXRyeSh0aGlzLCBvcHRpb25zKTtcbn07XG5cblNoYXBlLnByb3RvdHlwZS5tYWtlR2VvbWV0cnkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gbmV3IFNoYXBlR2VvbWV0cnkodGhpcywgb3B0aW9ucyk7XG59OyAvL1xuXG5cblZlY3RvcjIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyk7XG5cdHJldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KTtcbn07XG5cblZlY3RvcjIucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW4gPSBmdW5jdGlvbiAodikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLicpO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHYpO1xufTtcblxuVmVjdG9yMi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nKTtcblx0cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCk7XG59OyAvL1xuXG5cblZlY3RvcjMucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4nKTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb24gPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4nKTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLicpO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obSk7XG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXggPSBmdW5jdGlvbiAobSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4nKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKG0pO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChpbmRleCwgbWF0cml4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuJyk7XG5cdHJldHVybiB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4obWF0cml4LCBpbmRleCk7XG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb24gPSBmdW5jdGlvbiAobSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuJyk7XG5cdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NChtKTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmZyb21BdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyk7XG5cdHJldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW4gPSBmdW5jdGlvbiAodikge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLicpO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHYpO1xufTtcblxuVmVjdG9yMy5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nKTtcblx0cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCk7XG59OyAvL1xuXG5cblZlY3RvcjQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyk7XG5cdHJldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0KTtcbn07XG5cblZlY3RvcjQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuJyk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpO1xufTsgLy9cblxuXG5PYmplY3QzRC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xufTtcblxuT2JqZWN0M0QucHJvdG90eXBlLnJlbmRlckRlcHRoID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4nKTtcbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoZGlzdGFuY2UsIGF4aXMpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuJyk7XG5cdHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhheGlzLCBkaXN0YW5jZSk7XG59O1xuXG5PYmplY3QzRC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4nKTtcbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS5hcHBseU1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuJyk7XG5cdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NChtYXRyaXgpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2JqZWN0M0QucHJvdG90eXBlLCB7XG5cdGV1bGVyT3JkZXI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yb3RhdGlvbi5vcmRlcjtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLicpO1xuXHRcdFx0dGhpcy5yb3RhdGlvbi5vcmRlciA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0dXNlUXVhdGVybmlvbjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4nKTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4nKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5NZXNoLnByb3RvdHlwZS5zZXREcmF3TW9kZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG5cdGRyYXdNb2RlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4nKTtcblx0XHRcdHJldHVybiBUcmlhbmdsZXNEcmF3TW9kZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuJyk7XG5cdFx0fVxuXHR9XG59KTtcblxuU2tpbm5lZE1lc2gucHJvdG90eXBlLmluaXRCb25lcyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59OyAvL1xuXG5cblBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZS5zZXRMZW5zID0gZnVuY3Rpb24gKGZvY2FsTGVuZ3RoLCBmaWxtR2F1Z2UpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuICcgKyAnVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuJyk7XG5cdGlmIChmaWxtR2F1Z2UgIT09IHVuZGVmaW5lZCkgdGhpcy5maWxtR2F1Z2UgPSBmaWxtR2F1Z2U7XG5cdHRoaXMuc2V0Rm9jYWxMZW5ndGgoZm9jYWxMZW5ndGgpO1xufTsgLy9cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhMaWdodC5wcm90b3R5cGUsIHtcblx0b25seVNoYWRvdzoge1xuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUZvdjoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuZm92ID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFMZWZ0OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LicpO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLmxlZnQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYVJpZ2h0OiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYVRvcDoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEudG9wID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFCb3R0b206IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLicpO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbSA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhTmVhcjoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4nKTtcblx0XHRcdHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFGYXI6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZmFyLicpO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLmZhciA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Q2FtZXJhVmlzaWJsZToge1xuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVZpc2libGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5DYW1lcmFIZWxwZXIoIGxpZ2h0LnNoYWRvdy5jYW1lcmEgKSBpbnN0ZWFkLicpO1xuXHRcdH1cblx0fSxcblx0c2hhZG93Qmlhczoge1xuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLicpO1xuXHRcdFx0dGhpcy5zaGFkb3cuYmlhcyA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0c2hhZG93RGFya25lc3M6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdH1cblx0fSxcblx0c2hhZG93TWFwV2lkdGg6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguJyk7XG5cdFx0XHR0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBIZWlnaHQ6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5MaWdodDogLnNoYWRvd01hcEhlaWdodCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLmhlaWdodC4nKTtcblx0XHRcdHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0ID0gdmFsdWU7XG5cdFx0fVxuXHR9XG59KTsgLy9cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSwge1xuXHRsZW5ndGg6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLmFycmF5Lmxlbmd0aDtcblx0XHR9XG5cdH0sXG5cdGR5bmFtaWM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy51c2FnZSA9PT0gRHluYW1pY0RyYXdVc2FnZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb25cblx0XHRcdC8qIHZhbHVlICovXG5cdFx0KCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4nKTtcblx0XHRcdHRoaXMuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSk7XG5cdFx0fVxuXHR9XG59KTtcblxuQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5zZXREeW5hbWljID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLicpO1xuXHR0aGlzLnNldFVzYWdlKHZhbHVlID09PSB0cnVlID8gRHluYW1pY0RyYXdVc2FnZSA6IFN0YXRpY0RyYXdVc2FnZSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5ID0gZnVuY3Rpb25cblx0LyogaW5kaWNlcyAqL1xuKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn0sIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuc2V0QXJyYXkgPSBmdW5jdGlvblxuXHQvKiBhcnJheSAqL1xuKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycycpO1xufTsgLy9cblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuJyk7XG5cdHRoaXMuc2V0SW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChuYW1lLCBhdHRyaWJ1dGUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLicpO1xuXG5cdGlmICghKGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuaXNCdWZmZXJBdHRyaWJ1dGUpICYmICEoYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSkge1xuXHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLicpO1xuXHRcdHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBuZXcgQnVmZmVyQXR0cmlidXRlKGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKSk7XG5cdH1cblxuXHRpZiAobmFtZSA9PT0gJ2luZGV4Jykge1xuXHRcdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4nKTtcblx0XHR0aGlzLnNldEluZGV4KGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKTtcbn07XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGREcmF3Q2FsbCA9IGZ1bmN0aW9uIChzdGFydCwgY291bnQsIGluZGV4T2Zmc2V0KSB7XG5cdGlmIChpbmRleE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LicpO1xuXHR9XG5cblx0Y29uc29sZS53YXJuKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLicpO1xuXHR0aGlzLmFkZEdyb3VwKHN0YXJ0LCBjb3VudCk7XG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4nKTtcblx0dGhpcy5jbGVhckdyb3VwcygpO1xufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVPZmZzZXRzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5yZW1vdmVBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5kZWxldGVBdHRyaWJ1dGUoKS4nKTtcblx0cmV0dXJuIHRoaXMuZGVsZXRlQXR0cmlidXRlKG5hbWUpO1xufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFwcGx5TWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4nKTtcblx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KG1hdHJpeCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUsIHtcblx0ZHJhd2NhbGxzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5ncm91cHM7XG5cdFx0fVxuXHR9LFxuXHRvZmZzZXRzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5ncm91cHM7XG5cdFx0fVxuXHR9XG59KTtcblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLnNldER5bmFtaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4nKTtcblx0dGhpcy5zZXRVc2FnZSh2YWx1ZSA9PT0gdHJ1ZSA/IER5bmFtaWNEcmF3VXNhZ2UgOiBTdGF0aWNEcmF3VXNhZ2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVybGVhdmVkQnVmZmVyLnByb3RvdHlwZS5zZXRBcnJheSA9IGZ1bmN0aW9uXG5cdC8qIGFycmF5ICovXG4oKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMnKTtcbn07IC8vXG5cblxuRXh0cnVkZUdlb21ldHJ5LnByb3RvdHlwZS5nZXRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5FeHRydWRlR2VvbWV0cnkucHJvdG90eXBlLmFkZFNoYXBlTGlzdCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbkV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUuYWRkU2hhcGUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07IC8vXG5cblxuU2NlbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59OyAvL1xuXG5cblVuaWZvcm0ucHJvdG90eXBlLm9uVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLicpO1xuXHRyZXR1cm4gdGhpcztcbn07IC8vXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWF0ZXJpYWwucHJvdG90eXBlLCB7XG5cdHdyYXBBcm91bmQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRvdmVyZHJhdzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdH1cblx0fSxcblx0d3JhcFJHQjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHRcdHJldHVybiBuZXcgQ29sb3IoKTtcblx0XHR9XG5cdH0sXG5cdHNoYWRpbmc6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyk7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLicpO1xuXHRcdFx0dGhpcy5mbGF0U2hhZGluZyA9IHZhbHVlID09PSBGbGF0U2hhZGluZztcblx0XHR9XG5cdH0sXG5cdHN0ZW5jaWxNYXNrOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB0aGlzLnN0ZW5jaWxGdW5jTWFzaztcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4nKTtcblx0XHRcdHRoaXMuc3RlbmNpbEZ1bmNNYXNrID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHR2ZXJ0ZXhUYW5nZW50czoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdH1cblx0fVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUsIHtcblx0ZGVyaXZhdGl2ZXM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4nKTtcblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4nKTtcblx0XHRcdHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyA9IHZhbHVlO1xuXHRcdH1cblx0fVxufSk7IC8vXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNsZWFyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4nKTtcblx0dGhpcy5zZXRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblx0dGhpcy5jbGVhcihjb2xvciwgZGVwdGgsIHN0ZW5jaWwpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuJyk7XG5cdHRoaXMuc2V0QW5pbWF0aW9uTG9vcChjYWxsYmFjayk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4nKTtcblx0cmV0dXJuIHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLicpO1xuXHRyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uJyk7XG5cdHJldHVybiB0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb247XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZXNldEdMU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4nKTtcblx0cmV0dXJuIHRoaXMuc3RhdGUucmVzZXQoKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnT0VTX3RleHR1cmVfZmxvYXRcXCcgKS4nKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ09FU190ZXh0dXJlX2Zsb2F0Jyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnT0VTX3RleHR1cmVfaGFsZl9mbG9hdFxcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcXCcgKS4nKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNcXCcgKS4nKTtcblx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0Y1xcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4ID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnRVhUX2JsZW5kX21pbm1heFxcJyApLicpO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgnRVhUX2JsZW5kX21pbm1heCcpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLicpO1xuXHRyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXM7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXFwnICkuJyk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdCA9IGZ1bmN0aW9uIChib29sZWFuKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLicpO1xuXHR0aGlzLnNldFNjaXNzb3JUZXN0KGJvb2xlYW4pO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaW5pdE1hdGVyaWFsID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWRkUHJlUGx1Z2luID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbiA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZyA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLicpO1xufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmUyRCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbCA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuJyk7XG5cdHJldHVybiB0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJHTFJlbmRlcmVyLnByb3RvdHlwZSwge1xuXHRzaGFkb3dNYXBFbmFibGVkOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuJyk7XG5cdFx0XHR0aGlzLnNoYWRvd01hcC5lbmFibGVkID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBUeXBlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuJyk7XG5cdFx0XHR0aGlzLnNoYWRvd01hcC50eXBlID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBDdWxsRmFjZToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uXG5cdFx0XHQvKiB2YWx1ZSAqL1xuXHRcdCgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRjb250ZXh0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0fVxuXHR9LFxuXHR2cjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHInKTtcblx0XHRcdHJldHVybiB0aGlzLnhyO1xuXHRcdH1cblx0fSxcblx0Z2FtbWFJbnB1dDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRnYW1tYU91dHB1dDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLicpO1xuXHRcdFx0dGhpcy5vdXRwdXRFbmNvZGluZyA9IHZhbHVlID09PSB0cnVlID8gc1JHQkVuY29kaW5nIDogTGluZWFyRW5jb2Rpbmc7XG5cdFx0fVxuXHR9LFxuXHR0b25lTWFwcGluZ1doaXRlUG9pbnQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdFx0cmV0dXJuIDEuMDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRnYW1tYUZhY3Rvcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcblx0XHRcdHJldHVybiAyO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLicpO1xuXHRcdH1cblx0fVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJHTFNoYWRvd01hcC5wcm90b3R5cGUsIHtcblx0Y3VsbEZhY2U6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb25cblx0XHRcdC8qIGN1bGxGYWNlICovXG5cdFx0KCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyk7XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXJSZXZlcnNlU2lkZWQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHR9XG5cdH0sXG5cdHJlbmRlclNpbmdsZVNpZGVkOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicpO1xuXHRcdH1cblx0fVxufSk7XG5mdW5jdGlvbiBXZWJHTFJlbmRlclRhcmdldEN1YmUod2lkdGgsIGhlaWdodCwgb3B0aW9ucykge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKS4nKTtcblx0cmV0dXJuIG5ldyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQod2lkdGgsIG9wdGlvbnMpO1xufSAvL1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUsIHtcblx0d3JhcFM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBTO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUud3JhcFMgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdHdyYXBUOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULicpO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwVDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULicpO1xuXHRcdFx0dGhpcy50ZXh0dXJlLndyYXBUID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRtYWdGaWx0ZXI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUubWFnRmlsdGVyO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS5tYWdGaWx0ZXIgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdG1pbkZpbHRlcjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLicpO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXI7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLicpO1xuXHRcdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0YW5pc290cm9weToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHk7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUuYW5pc290cm9weSA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0b2Zmc2V0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUub2Zmc2V0ID0gdmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRyZXBlYXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4nKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUucmVwZWF0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4nKTtcblx0XHRcdHRoaXMudGV4dHVyZS5yZXBlYXQgPSB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cdGZvcm1hdDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LicpO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5mb3JtYXQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LicpO1xuXHRcdFx0dGhpcy50ZXh0dXJlLmZvcm1hdCA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0dHlwZToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLnR5cGU7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUudHlwZSA9IHZhbHVlO1xuXHRcdH1cblx0fSxcblx0Z2VuZXJhdGVNaXBtYXBzOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuJyk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuJyk7XG5cdFx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gdmFsdWU7XG5cdFx0fVxuXHR9XG59KTsgLy9cblxuQXVkaW8ucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoZmlsZSkge1xuXHRjb25zb2xlLndhcm4oJ1RIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4nKTtcblx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXHRjb25zdCBhdWRpb0xvYWRlciA9IG5ldyBBdWRpb0xvYWRlcigpO1xuXHRhdWRpb0xvYWRlci5sb2FkKGZpbGUsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRzY29wZS5zZXRCdWZmZXIoYnVmZmVyKTtcblx0fSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuQXVkaW9BbmFseXNlci5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLicpO1xuXHRyZXR1cm4gdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7XG59OyAvL1xuXG5cbkN1YmVDYW1lcmEucHJvdG90eXBlLnVwZGF0ZUN1YmVNYXAgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLicpO1xuXHRyZXR1cm4gdGhpcy51cGRhdGUocmVuZGVyZXIsIHNjZW5lKTtcbn07XG5cbkN1YmVDYW1lcmEucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLicpO1xuXHRyZXR1cm4gdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIocmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7XG59O1xuXG5JbWFnZVV0aWxzLmNyb3NzT3JpZ2luID0gdW5kZWZpbmVkO1xuXG5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKHVybCwgbWFwcGluZywgb25Mb2FkLCBvbkVycm9yKSB7XG5cdGNvbnNvbGUud2FybignVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuJyk7XG5cdGNvbnN0IGxvYWRlciA9IG5ldyBUZXh0dXJlTG9hZGVyKCk7XG5cdGxvYWRlci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtcblx0Y29uc3QgdGV4dHVyZSA9IGxvYWRlci5sb2FkKHVybCwgb25Mb2FkLCB1bmRlZmluZWQsIG9uRXJyb3IpO1xuXHRpZiAobWFwcGluZykgdGV4dHVyZS5tYXBwaW5nID0gbWFwcGluZztcblx0cmV0dXJuIHRleHR1cmU7XG59O1xuXG5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSA9IGZ1bmN0aW9uICh1cmxzLCBtYXBwaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcblx0Y29uc29sZS53YXJuKCdUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLicpO1xuXHRjb25zdCBsb2FkZXIgPSBuZXcgQ3ViZVRleHR1cmVMb2FkZXIoKTtcblx0bG9hZGVyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO1xuXHRjb25zdCB0ZXh0dXJlID0gbG9hZGVyLmxvYWQodXJscywgb25Mb2FkLCB1bmRlZmluZWQsIG9uRXJyb3IpO1xuXHRpZiAobWFwcGluZykgdGV4dHVyZS5tYXBwaW5nID0gbWFwcGluZztcblx0cmV0dXJuIHRleHR1cmU7XG59O1xuXG5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLicpO1xufTtcblxuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLicpO1xufTsgLy9cblxuXG5mdW5jdGlvbiBDYW52YXNSZW5kZXJlcigpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuQ2FudmFzUmVuZGVyZXIgaGFzIGJlZW4gcmVtb3ZlZCcpO1xufSAvL1xuXG5mdW5jdGlvbiBKU09OTG9hZGVyKCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59IC8vXG5cbmNvbnN0IFNjZW5lVXRpbHMgPSB7XG5cdGNyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6IGZ1bmN0aW9uXG5cdFx0LyogZ2VvbWV0cnksIG1hdGVyaWFscyAqL1xuXHQoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMnKTtcblx0fSxcblx0ZGV0YWNoOiBmdW5jdGlvblxuXHRcdC8qIGNoaWxkLCBwYXJlbnQsIHNjZW5lICovXG5cdCgpIHtcblx0XHRjb25zb2xlLmVycm9yKCdUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcycpO1xuXHR9LFxuXHRhdHRhY2g6IGZ1bmN0aW9uXG5cdFx0LyogY2hpbGQsIHNjZW5lLCBwYXJlbnQgKi9cblx0KCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzJyk7XG5cdH1cbn07IC8vXG5cbmZ1bmN0aW9uIExlbnNGbGFyZSgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vb2JqZWN0cy9MZW5zZmxhcmUuanMnKTtcbn0gLy9cblxuZnVuY3Rpb24gUGFyYW1ldHJpY0dlb21ldHJ5KCkge1xuXHRjb25zb2xlLmVycm9yKCdUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcycpO1xuXHRyZXR1cm4gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG59XG5mdW5jdGlvbiBUZXh0R2VvbWV0cnkoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLlRleHRHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5LmpzJyk7XG5cdHJldHVybiBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcbn1cbmZ1bmN0aW9uIEZvbnRMb2FkZXIoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkZvbnRMb2FkZXIgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMnKTtcbn1cbmZ1bmN0aW9uIEZvbnQoKSB7XG5cdGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMnKTtcbn1cbmZ1bmN0aW9uIEltbWVkaWF0ZVJlbmRlck9iamVjdCgpIHtcblx0Y29uc29sZS5lcnJvcignVEhSRUUuSW1tZWRpYXRlUmVuZGVyT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG59XG5cbmlmICh0eXBlb2YgX19USFJFRV9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJykge1xuXHRfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZ2lzdGVyJywge1xuXHRcdGRldGFpbDoge1xuXHRcdFx0cmV2aXNpb246IFJFVklTSU9OXG5cdFx0fVxuXHR9KSk7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuXHRpZiAod2luZG93Ll9fVEhSRUVfXykge1xuXHRcdGNvbnNvbGUud2FybignV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLicpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5fX1RIUkVFX18gPSBSRVZJU0lPTjtcblx0fVxufVxuXG5leHBvcnRzLkFDRVNGaWxtaWNUb25lTWFwcGluZyA9IEFDRVNGaWxtaWNUb25lTWFwcGluZztcbmV4cG9ydHMuQWRkRXF1YXRpb24gPSBBZGRFcXVhdGlvbjtcbmV4cG9ydHMuQWRkT3BlcmF0aW9uID0gQWRkT3BlcmF0aW9uO1xuZXhwb3J0cy5BZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZSA9IEFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlO1xuZXhwb3J0cy5BZGRpdGl2ZUJsZW5kaW5nID0gQWRkaXRpdmVCbGVuZGluZztcbmV4cG9ydHMuQWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdDtcbmV4cG9ydHMuQWx3YXlzRGVwdGggPSBBbHdheXNEZXB0aDtcbmV4cG9ydHMuQWx3YXlzU3RlbmNpbEZ1bmMgPSBBbHdheXNTdGVuY2lsRnVuYztcbmV4cG9ydHMuQW1iaWVudExpZ2h0ID0gQW1iaWVudExpZ2h0O1xuZXhwb3J0cy5BbWJpZW50TGlnaHRQcm9iZSA9IEFtYmllbnRMaWdodFByb2JlO1xuZXhwb3J0cy5BbmltYXRpb25DbGlwID0gQW5pbWF0aW9uQ2xpcDtcbmV4cG9ydHMuQW5pbWF0aW9uTG9hZGVyID0gQW5pbWF0aW9uTG9hZGVyO1xuZXhwb3J0cy5BbmltYXRpb25NaXhlciA9IEFuaW1hdGlvbk1peGVyO1xuZXhwb3J0cy5BbmltYXRpb25PYmplY3RHcm91cCA9IEFuaW1hdGlvbk9iamVjdEdyb3VwO1xuZXhwb3J0cy5BbmltYXRpb25VdGlscyA9IEFuaW1hdGlvblV0aWxzO1xuZXhwb3J0cy5BcmNDdXJ2ZSA9IEFyY0N1cnZlO1xuZXhwb3J0cy5BcnJheUNhbWVyYSA9IEFycmF5Q2FtZXJhO1xuZXhwb3J0cy5BcnJvd0hlbHBlciA9IEFycm93SGVscGVyO1xuZXhwb3J0cy5BdWRpbyA9IEF1ZGlvO1xuZXhwb3J0cy5BdWRpb0FuYWx5c2VyID0gQXVkaW9BbmFseXNlcjtcbmV4cG9ydHMuQXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0O1xuZXhwb3J0cy5BdWRpb0xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjtcbmV4cG9ydHMuQXVkaW9Mb2FkZXIgPSBBdWRpb0xvYWRlcjtcbmV4cG9ydHMuQXhlc0hlbHBlciA9IEF4ZXNIZWxwZXI7XG5leHBvcnRzLkF4aXNIZWxwZXIgPSBBeGlzSGVscGVyO1xuZXhwb3J0cy5CYWNrU2lkZSA9IEJhY2tTaWRlO1xuZXhwb3J0cy5CYXNpY0RlcHRoUGFja2luZyA9IEJhc2ljRGVwdGhQYWNraW5nO1xuZXhwb3J0cy5CYXNpY1NoYWRvd01hcCA9IEJhc2ljU2hhZG93TWFwO1xuZXhwb3J0cy5CaW5hcnlUZXh0dXJlTG9hZGVyID0gQmluYXJ5VGV4dHVyZUxvYWRlcjtcbmV4cG9ydHMuQm9uZSA9IEJvbmU7XG5leHBvcnRzLkJvb2xlYW5LZXlmcmFtZVRyYWNrID0gQm9vbGVhbktleWZyYW1lVHJhY2s7XG5leHBvcnRzLkJvdW5kaW5nQm94SGVscGVyID0gQm91bmRpbmdCb3hIZWxwZXI7XG5leHBvcnRzLkJveDIgPSBCb3gyO1xuZXhwb3J0cy5Cb3gzID0gQm94MztcbmV4cG9ydHMuQm94M0hlbHBlciA9IEJveDNIZWxwZXI7XG5leHBvcnRzLkJveEJ1ZmZlckdlb21ldHJ5ID0gQm94R2VvbWV0cnk7XG5leHBvcnRzLkJveEdlb21ldHJ5ID0gQm94R2VvbWV0cnk7XG5leHBvcnRzLkJveEhlbHBlciA9IEJveEhlbHBlcjtcbmV4cG9ydHMuQnVmZmVyQXR0cmlidXRlID0gQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5CdWZmZXJHZW9tZXRyeSA9IEJ1ZmZlckdlb21ldHJ5O1xuZXhwb3J0cy5CdWZmZXJHZW9tZXRyeUxvYWRlciA9IEJ1ZmZlckdlb21ldHJ5TG9hZGVyO1xuZXhwb3J0cy5CeXRlVHlwZSA9IEJ5dGVUeXBlO1xuZXhwb3J0cy5DYWNoZSA9IENhY2hlO1xuZXhwb3J0cy5DYW1lcmEgPSBDYW1lcmE7XG5leHBvcnRzLkNhbWVyYUhlbHBlciA9IENhbWVyYUhlbHBlcjtcbmV4cG9ydHMuQ2FudmFzUmVuZGVyZXIgPSBDYW52YXNSZW5kZXJlcjtcbmV4cG9ydHMuQ2FudmFzVGV4dHVyZSA9IENhbnZhc1RleHR1cmU7XG5leHBvcnRzLkNhdG11bGxSb21DdXJ2ZTMgPSBDYXRtdWxsUm9tQ3VydmUzO1xuZXhwb3J0cy5DaW5lb25Ub25lTWFwcGluZyA9IENpbmVvblRvbmVNYXBwaW5nO1xuZXhwb3J0cy5DaXJjbGVCdWZmZXJHZW9tZXRyeSA9IENpcmNsZUdlb21ldHJ5O1xuZXhwb3J0cy5DaXJjbGVHZW9tZXRyeSA9IENpcmNsZUdlb21ldHJ5O1xuZXhwb3J0cy5DbGFtcFRvRWRnZVdyYXBwaW5nID0gQ2xhbXBUb0VkZ2VXcmFwcGluZztcbmV4cG9ydHMuQ2xvY2sgPSBDbG9jaztcbmV4cG9ydHMuQ29sb3IgPSBDb2xvcjtcbmV4cG9ydHMuQ29sb3JLZXlmcmFtZVRyYWNrID0gQ29sb3JLZXlmcmFtZVRyYWNrO1xuZXhwb3J0cy5Db21wcmVzc2VkVGV4dHVyZSA9IENvbXByZXNzZWRUZXh0dXJlO1xuZXhwb3J0cy5Db21wcmVzc2VkVGV4dHVyZUxvYWRlciA9IENvbXByZXNzZWRUZXh0dXJlTG9hZGVyO1xuZXhwb3J0cy5Db25lQnVmZmVyR2VvbWV0cnkgPSBDb25lR2VvbWV0cnk7XG5leHBvcnRzLkNvbmVHZW9tZXRyeSA9IENvbmVHZW9tZXRyeTtcbmV4cG9ydHMuQ3ViZUNhbWVyYSA9IEN1YmVDYW1lcmE7XG5leHBvcnRzLkN1YmVSZWZsZWN0aW9uTWFwcGluZyA9IEN1YmVSZWZsZWN0aW9uTWFwcGluZztcbmV4cG9ydHMuQ3ViZVJlZnJhY3Rpb25NYXBwaW5nID0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nO1xuZXhwb3J0cy5DdWJlVGV4dHVyZSA9IEN1YmVUZXh0dXJlO1xuZXhwb3J0cy5DdWJlVGV4dHVyZUxvYWRlciA9IEN1YmVUZXh0dXJlTG9hZGVyO1xuZXhwb3J0cy5DdWJlVVZSZWZsZWN0aW9uTWFwcGluZyA9IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nO1xuZXhwb3J0cy5DdWJlVVZSZWZyYWN0aW9uTWFwcGluZyA9IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nO1xuZXhwb3J0cy5DdWJpY0JlemllckN1cnZlID0gQ3ViaWNCZXppZXJDdXJ2ZTtcbmV4cG9ydHMuQ3ViaWNCZXppZXJDdXJ2ZTMgPSBDdWJpY0JlemllckN1cnZlMztcbmV4cG9ydHMuQ3ViaWNJbnRlcnBvbGFudCA9IEN1YmljSW50ZXJwb2xhbnQ7XG5leHBvcnRzLkN1bGxGYWNlQmFjayA9IEN1bGxGYWNlQmFjaztcbmV4cG9ydHMuQ3VsbEZhY2VGcm9udCA9IEN1bGxGYWNlRnJvbnQ7XG5leHBvcnRzLkN1bGxGYWNlRnJvbnRCYWNrID0gQ3VsbEZhY2VGcm9udEJhY2s7XG5leHBvcnRzLkN1bGxGYWNlTm9uZSA9IEN1bGxGYWNlTm9uZTtcbmV4cG9ydHMuQ3VydmUgPSBDdXJ2ZTtcbmV4cG9ydHMuQ3VydmVQYXRoID0gQ3VydmVQYXRoO1xuZXhwb3J0cy5DdXN0b21CbGVuZGluZyA9IEN1c3RvbUJsZW5kaW5nO1xuZXhwb3J0cy5DdXN0b21Ub25lTWFwcGluZyA9IEN1c3RvbVRvbmVNYXBwaW5nO1xuZXhwb3J0cy5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5ID0gQ3lsaW5kZXJHZW9tZXRyeTtcbmV4cG9ydHMuQ3lsaW5kZXJHZW9tZXRyeSA9IEN5bGluZGVyR2VvbWV0cnk7XG5leHBvcnRzLkN5bGluZHJpY2FsID0gQ3lsaW5kcmljYWw7XG5leHBvcnRzLkRhdGFUZXh0dXJlID0gRGF0YVRleHR1cmU7XG5leHBvcnRzLkRhdGFUZXh0dXJlMkRBcnJheSA9IERhdGFUZXh0dXJlMkRBcnJheTtcbmV4cG9ydHMuRGF0YVRleHR1cmUzRCA9IERhdGFUZXh0dXJlM0Q7XG5leHBvcnRzLkRhdGFUZXh0dXJlTG9hZGVyID0gRGF0YVRleHR1cmVMb2FkZXI7XG5leHBvcnRzLkRhdGFVdGlscyA9IERhdGFVdGlscztcbmV4cG9ydHMuRGVjcmVtZW50U3RlbmNpbE9wID0gRGVjcmVtZW50U3RlbmNpbE9wO1xuZXhwb3J0cy5EZWNyZW1lbnRXcmFwU3RlbmNpbE9wID0gRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDtcbmV4cG9ydHMuRGVmYXVsdExvYWRpbmdNYW5hZ2VyID0gRGVmYXVsdExvYWRpbmdNYW5hZ2VyO1xuZXhwb3J0cy5EZXB0aEZvcm1hdCA9IERlcHRoRm9ybWF0O1xuZXhwb3J0cy5EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXQ7XG5leHBvcnRzLkRlcHRoVGV4dHVyZSA9IERlcHRoVGV4dHVyZTtcbmV4cG9ydHMuRGlyZWN0aW9uYWxMaWdodCA9IERpcmVjdGlvbmFsTGlnaHQ7XG5leHBvcnRzLkRpcmVjdGlvbmFsTGlnaHRIZWxwZXIgPSBEaXJlY3Rpb25hbExpZ2h0SGVscGVyO1xuZXhwb3J0cy5EaXNjcmV0ZUludGVycG9sYW50ID0gRGlzY3JldGVJbnRlcnBvbGFudDtcbmV4cG9ydHMuRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkgPSBEb2RlY2FoZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuRG9kZWNhaGVkcm9uR2VvbWV0cnkgPSBEb2RlY2FoZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuRG91YmxlU2lkZSA9IERvdWJsZVNpZGU7XG5leHBvcnRzLkRzdEFscGhhRmFjdG9yID0gRHN0QWxwaGFGYWN0b3I7XG5leHBvcnRzLkRzdENvbG9yRmFjdG9yID0gRHN0Q29sb3JGYWN0b3I7XG5leHBvcnRzLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgPSBEeW5hbWljQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5EeW5hbWljQ29weVVzYWdlID0gRHluYW1pY0NvcHlVc2FnZTtcbmV4cG9ydHMuRHluYW1pY0RyYXdVc2FnZSA9IER5bmFtaWNEcmF3VXNhZ2U7XG5leHBvcnRzLkR5bmFtaWNSZWFkVXNhZ2UgPSBEeW5hbWljUmVhZFVzYWdlO1xuZXhwb3J0cy5FZGdlc0dlb21ldHJ5ID0gRWRnZXNHZW9tZXRyeTtcbmV4cG9ydHMuRWRnZXNIZWxwZXIgPSBFZGdlc0hlbHBlcjtcbmV4cG9ydHMuRWxsaXBzZUN1cnZlID0gRWxsaXBzZUN1cnZlO1xuZXhwb3J0cy5FcXVhbERlcHRoID0gRXF1YWxEZXB0aDtcbmV4cG9ydHMuRXF1YWxTdGVuY2lsRnVuYyA9IEVxdWFsU3RlbmNpbEZ1bmM7XG5leHBvcnRzLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nID0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XG5leHBvcnRzLkVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nID0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc7XG5leHBvcnRzLkV1bGVyID0gRXVsZXI7XG5leHBvcnRzLkV2ZW50RGlzcGF0Y2hlciA9IEV2ZW50RGlzcGF0Y2hlcjtcbmV4cG9ydHMuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5ID0gRXh0cnVkZUdlb21ldHJ5O1xuZXhwb3J0cy5FeHRydWRlR2VvbWV0cnkgPSBFeHRydWRlR2VvbWV0cnk7XG5leHBvcnRzLkZhY2VDb2xvcnMgPSBGYWNlQ29sb3JzO1xuZXhwb3J0cy5GaWxlTG9hZGVyID0gRmlsZUxvYWRlcjtcbmV4cG9ydHMuRmxhdFNoYWRpbmcgPSBGbGF0U2hhZGluZztcbmV4cG9ydHMuRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSA9IEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkZsb2F0MzJBdHRyaWJ1dGUgPSBGbG9hdDMyQXR0cmlidXRlO1xuZXhwb3J0cy5GbG9hdDMyQnVmZmVyQXR0cmlidXRlID0gRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuRmxvYXQ2NEF0dHJpYnV0ZSA9IEZsb2F0NjRBdHRyaWJ1dGU7XG5leHBvcnRzLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUgPSBGbG9hdDY0QnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5GbG9hdFR5cGUgPSBGbG9hdFR5cGU7XG5leHBvcnRzLkZvZyA9IEZvZztcbmV4cG9ydHMuRm9nRXhwMiA9IEZvZ0V4cDI7XG5leHBvcnRzLkZvbnQgPSBGb250O1xuZXhwb3J0cy5Gb250TG9hZGVyID0gRm9udExvYWRlcjtcbmV4cG9ydHMuRnJhbWVidWZmZXJUZXh0dXJlID0gRnJhbWVidWZmZXJUZXh0dXJlO1xuZXhwb3J0cy5Gcm9udFNpZGUgPSBGcm9udFNpZGU7XG5leHBvcnRzLkZydXN0dW0gPSBGcnVzdHVtO1xuZXhwb3J0cy5HTEJ1ZmZlckF0dHJpYnV0ZSA9IEdMQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5HTFNMMSA9IEdMU0wxO1xuZXhwb3J0cy5HTFNMMyA9IEdMU0wzO1xuZXhwb3J0cy5HcmVhdGVyRGVwdGggPSBHcmVhdGVyRGVwdGg7XG5leHBvcnRzLkdyZWF0ZXJFcXVhbERlcHRoID0gR3JlYXRlckVxdWFsRGVwdGg7XG5leHBvcnRzLkdyZWF0ZXJFcXVhbFN0ZW5jaWxGdW5jID0gR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmM7XG5leHBvcnRzLkdyZWF0ZXJTdGVuY2lsRnVuYyA9IEdyZWF0ZXJTdGVuY2lsRnVuYztcbmV4cG9ydHMuR3JpZEhlbHBlciA9IEdyaWRIZWxwZXI7XG5leHBvcnRzLkdyb3VwID0gR3JvdXA7XG5leHBvcnRzLkhhbGZGbG9hdFR5cGUgPSBIYWxmRmxvYXRUeXBlO1xuZXhwb3J0cy5IZW1pc3BoZXJlTGlnaHQgPSBIZW1pc3BoZXJlTGlnaHQ7XG5leHBvcnRzLkhlbWlzcGhlcmVMaWdodEhlbHBlciA9IEhlbWlzcGhlcmVMaWdodEhlbHBlcjtcbmV4cG9ydHMuSGVtaXNwaGVyZUxpZ2h0UHJvYmUgPSBIZW1pc3BoZXJlTGlnaHRQcm9iZTtcbmV4cG9ydHMuSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSA9IEljb3NhaGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLkljb3NhaGVkcm9uR2VvbWV0cnkgPSBJY29zYWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5JbWFnZUJpdG1hcExvYWRlciA9IEltYWdlQml0bWFwTG9hZGVyO1xuZXhwb3J0cy5JbWFnZUxvYWRlciA9IEltYWdlTG9hZGVyO1xuZXhwb3J0cy5JbWFnZVV0aWxzID0gSW1hZ2VVdGlscztcbmV4cG9ydHMuSW1tZWRpYXRlUmVuZGVyT2JqZWN0ID0gSW1tZWRpYXRlUmVuZGVyT2JqZWN0O1xuZXhwb3J0cy5JbmNyZW1lbnRTdGVuY2lsT3AgPSBJbmNyZW1lbnRTdGVuY2lsT3A7XG5leHBvcnRzLkluY3JlbWVudFdyYXBTdGVuY2lsT3AgPSBJbmNyZW1lbnRXcmFwU3RlbmNpbE9wO1xuZXhwb3J0cy5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPSBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID0gSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk7XG5leHBvcnRzLkluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyID0gSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI7XG5leHBvcnRzLkluc3RhbmNlZE1lc2ggPSBJbnN0YW5jZWRNZXNoO1xuZXhwb3J0cy5JbnQxNkF0dHJpYnV0ZSA9IEludDE2QXR0cmlidXRlO1xuZXhwb3J0cy5JbnQxNkJ1ZmZlckF0dHJpYnV0ZSA9IEludDE2QnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5JbnQzMkF0dHJpYnV0ZSA9IEludDMyQXR0cmlidXRlO1xuZXhwb3J0cy5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSA9IEludDMyQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5JbnQ4QXR0cmlidXRlID0gSW50OEF0dHJpYnV0ZTtcbmV4cG9ydHMuSW50OEJ1ZmZlckF0dHJpYnV0ZSA9IEludDhCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLkludFR5cGUgPSBJbnRUeXBlO1xuZXhwb3J0cy5JbnRlcmxlYXZlZEJ1ZmZlciA9IEludGVybGVhdmVkQnVmZmVyO1xuZXhwb3J0cy5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSA9IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5JbnRlcnBvbGFudCA9IEludGVycG9sYW50O1xuZXhwb3J0cy5JbnRlcnBvbGF0ZURpc2NyZXRlID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTtcbmV4cG9ydHMuSW50ZXJwb2xhdGVMaW5lYXIgPSBJbnRlcnBvbGF0ZUxpbmVhcjtcbmV4cG9ydHMuSW50ZXJwb2xhdGVTbW9vdGggPSBJbnRlcnBvbGF0ZVNtb290aDtcbmV4cG9ydHMuSW52ZXJ0U3RlbmNpbE9wID0gSW52ZXJ0U3RlbmNpbE9wO1xuZXhwb3J0cy5KU09OTG9hZGVyID0gSlNPTkxvYWRlcjtcbmV4cG9ydHMuS2VlcFN0ZW5jaWxPcCA9IEtlZXBTdGVuY2lsT3A7XG5leHBvcnRzLktleWZyYW1lVHJhY2sgPSBLZXlmcmFtZVRyYWNrO1xuZXhwb3J0cy5MT0QgPSBMT0Q7XG5leHBvcnRzLkxhdGhlQnVmZmVyR2VvbWV0cnkgPSBMYXRoZUdlb21ldHJ5O1xuZXhwb3J0cy5MYXRoZUdlb21ldHJ5ID0gTGF0aGVHZW9tZXRyeTtcbmV4cG9ydHMuTGF5ZXJzID0gTGF5ZXJzO1xuZXhwb3J0cy5MZW5zRmxhcmUgPSBMZW5zRmxhcmU7XG5leHBvcnRzLkxlc3NEZXB0aCA9IExlc3NEZXB0aDtcbmV4cG9ydHMuTGVzc0VxdWFsRGVwdGggPSBMZXNzRXF1YWxEZXB0aDtcbmV4cG9ydHMuTGVzc0VxdWFsU3RlbmNpbEZ1bmMgPSBMZXNzRXF1YWxTdGVuY2lsRnVuYztcbmV4cG9ydHMuTGVzc1N0ZW5jaWxGdW5jID0gTGVzc1N0ZW5jaWxGdW5jO1xuZXhwb3J0cy5MaWdodCA9IExpZ2h0O1xuZXhwb3J0cy5MaWdodFByb2JlID0gTGlnaHRQcm9iZTtcbmV4cG9ydHMuTGluZSA9IExpbmU7XG5leHBvcnRzLkxpbmUzID0gTGluZTM7XG5leHBvcnRzLkxpbmVCYXNpY01hdGVyaWFsID0gTGluZUJhc2ljTWF0ZXJpYWw7XG5leHBvcnRzLkxpbmVDdXJ2ZSA9IExpbmVDdXJ2ZTtcbmV4cG9ydHMuTGluZUN1cnZlMyA9IExpbmVDdXJ2ZTM7XG5leHBvcnRzLkxpbmVEYXNoZWRNYXRlcmlhbCA9IExpbmVEYXNoZWRNYXRlcmlhbDtcbmV4cG9ydHMuTGluZUxvb3AgPSBMaW5lTG9vcDtcbmV4cG9ydHMuTGluZVBpZWNlcyA9IExpbmVQaWVjZXM7XG5leHBvcnRzLkxpbmVTZWdtZW50cyA9IExpbmVTZWdtZW50cztcbmV4cG9ydHMuTGluZVN0cmlwID0gTGluZVN0cmlwO1xuZXhwb3J0cy5MaW5lYXJFbmNvZGluZyA9IExpbmVhckVuY29kaW5nO1xuZXhwb3J0cy5MaW5lYXJGaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5leHBvcnRzLkxpbmVhckludGVycG9sYW50ID0gTGluZWFySW50ZXJwb2xhbnQ7XG5leHBvcnRzLkxpbmVhck1pcE1hcExpbmVhckZpbHRlciA9IExpbmVhck1pcE1hcExpbmVhckZpbHRlcjtcbmV4cG9ydHMuTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlciA9IExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXI7XG5leHBvcnRzLkxpbmVhck1pcG1hcExpbmVhckZpbHRlciA9IExpbmVhck1pcG1hcExpbmVhckZpbHRlcjtcbmV4cG9ydHMuTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlciA9IExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI7XG5leHBvcnRzLkxpbmVhclRvbmVNYXBwaW5nID0gTGluZWFyVG9uZU1hcHBpbmc7XG5leHBvcnRzLkxvYWRlciA9IExvYWRlcjtcbmV4cG9ydHMuTG9hZGVyVXRpbHMgPSBMb2FkZXJVdGlscztcbmV4cG9ydHMuTG9hZGluZ01hbmFnZXIgPSBMb2FkaW5nTWFuYWdlcjtcbmV4cG9ydHMuTG9vcE9uY2UgPSBMb29wT25jZTtcbmV4cG9ydHMuTG9vcFBpbmdQb25nID0gTG9vcFBpbmdQb25nO1xuZXhwb3J0cy5Mb29wUmVwZWF0ID0gTG9vcFJlcGVhdDtcbmV4cG9ydHMuTHVtaW5hbmNlQWxwaGFGb3JtYXQgPSBMdW1pbmFuY2VBbHBoYUZvcm1hdDtcbmV4cG9ydHMuTHVtaW5hbmNlRm9ybWF0ID0gTHVtaW5hbmNlRm9ybWF0O1xuZXhwb3J0cy5NT1VTRSA9IE1PVVNFO1xuZXhwb3J0cy5NYXRlcmlhbCA9IE1hdGVyaWFsO1xuZXhwb3J0cy5NYXRlcmlhbExvYWRlciA9IE1hdGVyaWFsTG9hZGVyO1xuZXhwb3J0cy5NYXRoID0gTWF0aFV0aWxzO1xuZXhwb3J0cy5NYXRoVXRpbHMgPSBNYXRoVXRpbHM7XG5leHBvcnRzLk1hdHJpeDMgPSBNYXRyaXgzO1xuZXhwb3J0cy5NYXRyaXg0ID0gTWF0cml4NDtcbmV4cG9ydHMuTWF4RXF1YXRpb24gPSBNYXhFcXVhdGlvbjtcbmV4cG9ydHMuTWVzaCA9IE1lc2g7XG5leHBvcnRzLk1lc2hCYXNpY01hdGVyaWFsID0gTWVzaEJhc2ljTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hEZXB0aE1hdGVyaWFsID0gTWVzaERlcHRoTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hEaXN0YW5jZU1hdGVyaWFsID0gTWVzaERpc3RhbmNlTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hGYWNlTWF0ZXJpYWwgPSBNZXNoRmFjZU1hdGVyaWFsO1xuZXhwb3J0cy5NZXNoTGFtYmVydE1hdGVyaWFsID0gTWVzaExhbWJlcnRNYXRlcmlhbDtcbmV4cG9ydHMuTWVzaE1hdGNhcE1hdGVyaWFsID0gTWVzaE1hdGNhcE1hdGVyaWFsO1xuZXhwb3J0cy5NZXNoTm9ybWFsTWF0ZXJpYWwgPSBNZXNoTm9ybWFsTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hQaG9uZ01hdGVyaWFsID0gTWVzaFBob25nTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hQaHlzaWNhbE1hdGVyaWFsID0gTWVzaFBoeXNpY2FsTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hTdGFuZGFyZE1hdGVyaWFsID0gTWVzaFN0YW5kYXJkTWF0ZXJpYWw7XG5leHBvcnRzLk1lc2hUb29uTWF0ZXJpYWwgPSBNZXNoVG9vbk1hdGVyaWFsO1xuZXhwb3J0cy5NaW5FcXVhdGlvbiA9IE1pbkVxdWF0aW9uO1xuZXhwb3J0cy5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nID0gTWlycm9yZWRSZXBlYXRXcmFwcGluZztcbmV4cG9ydHMuTWl4T3BlcmF0aW9uID0gTWl4T3BlcmF0aW9uO1xuZXhwb3J0cy5NdWx0aU1hdGVyaWFsID0gTXVsdGlNYXRlcmlhbDtcbmV4cG9ydHMuTXVsdGlwbHlCbGVuZGluZyA9IE11bHRpcGx5QmxlbmRpbmc7XG5leHBvcnRzLk11bHRpcGx5T3BlcmF0aW9uID0gTXVsdGlwbHlPcGVyYXRpb247XG5leHBvcnRzLk5lYXJlc3RGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuZXhwb3J0cy5OZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyID0gTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlcjtcbmV4cG9ydHMuTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIgPSBOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjtcbmV4cG9ydHMuTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlciA9IE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI7XG5leHBvcnRzLk5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyID0gTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXI7XG5leHBvcnRzLk5ldmVyRGVwdGggPSBOZXZlckRlcHRoO1xuZXhwb3J0cy5OZXZlclN0ZW5jaWxGdW5jID0gTmV2ZXJTdGVuY2lsRnVuYztcbmV4cG9ydHMuTm9CbGVuZGluZyA9IE5vQmxlbmRpbmc7XG5leHBvcnRzLk5vQ29sb3JzID0gTm9Db2xvcnM7XG5leHBvcnRzLk5vVG9uZU1hcHBpbmcgPSBOb1RvbmVNYXBwaW5nO1xuZXhwb3J0cy5Ob3JtYWxBbmltYXRpb25CbGVuZE1vZGUgPSBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGU7XG5leHBvcnRzLk5vcm1hbEJsZW5kaW5nID0gTm9ybWFsQmxlbmRpbmc7XG5leHBvcnRzLk5vdEVxdWFsRGVwdGggPSBOb3RFcXVhbERlcHRoO1xuZXhwb3J0cy5Ob3RFcXVhbFN0ZW5jaWxGdW5jID0gTm90RXF1YWxTdGVuY2lsRnVuYztcbmV4cG9ydHMuTnVtYmVyS2V5ZnJhbWVUcmFjayA9IE51bWJlcktleWZyYW1lVHJhY2s7XG5leHBvcnRzLk9iamVjdDNEID0gT2JqZWN0M0Q7XG5leHBvcnRzLk9iamVjdExvYWRlciA9IE9iamVjdExvYWRlcjtcbmV4cG9ydHMuT2JqZWN0U3BhY2VOb3JtYWxNYXAgPSBPYmplY3RTcGFjZU5vcm1hbE1hcDtcbmV4cG9ydHMuT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5ID0gT2N0YWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5PY3RhaGVkcm9uR2VvbWV0cnkgPSBPY3RhaGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLk9uZUZhY3RvciA9IE9uZUZhY3RvcjtcbmV4cG9ydHMuT25lTWludXNEc3RBbHBoYUZhY3RvciA9IE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I7XG5leHBvcnRzLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgPSBPbmVNaW51c0RzdENvbG9yRmFjdG9yO1xuZXhwb3J0cy5PbmVNaW51c1NyY0FscGhhRmFjdG9yID0gT25lTWludXNTcmNBbHBoYUZhY3RvcjtcbmV4cG9ydHMuT25lTWludXNTcmNDb2xvckZhY3RvciA9IE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I7XG5leHBvcnRzLk9ydGhvZ3JhcGhpY0NhbWVyYSA9IE9ydGhvZ3JhcGhpY0NhbWVyYTtcbmV4cG9ydHMuUENGU2hhZG93TWFwID0gUENGU2hhZG93TWFwO1xuZXhwb3J0cy5QQ0ZTb2Z0U2hhZG93TWFwID0gUENGU29mdFNoYWRvd01hcDtcbmV4cG9ydHMuUE1SRU1HZW5lcmF0b3IgPSBQTVJFTUdlbmVyYXRvcjtcbmV4cG9ydHMuUGFyYW1ldHJpY0dlb21ldHJ5ID0gUGFyYW1ldHJpY0dlb21ldHJ5O1xuZXhwb3J0cy5QYXJ0aWNsZSA9IFBhcnRpY2xlO1xuZXhwb3J0cy5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWwgPSBQYXJ0aWNsZUJhc2ljTWF0ZXJpYWw7XG5leHBvcnRzLlBhcnRpY2xlU3lzdGVtID0gUGFydGljbGVTeXN0ZW07XG5leHBvcnRzLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwgPSBQYXJ0aWNsZVN5c3RlbU1hdGVyaWFsO1xuZXhwb3J0cy5QYXRoID0gUGF0aDtcbmV4cG9ydHMuUGVyc3BlY3RpdmVDYW1lcmEgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcbmV4cG9ydHMuUGxhbmUgPSBQbGFuZTtcbmV4cG9ydHMuUGxhbmVCdWZmZXJHZW9tZXRyeSA9IFBsYW5lR2VvbWV0cnk7XG5leHBvcnRzLlBsYW5lR2VvbWV0cnkgPSBQbGFuZUdlb21ldHJ5O1xuZXhwb3J0cy5QbGFuZUhlbHBlciA9IFBsYW5lSGVscGVyO1xuZXhwb3J0cy5Qb2ludENsb3VkID0gUG9pbnRDbG91ZDtcbmV4cG9ydHMuUG9pbnRDbG91ZE1hdGVyaWFsID0gUG9pbnRDbG91ZE1hdGVyaWFsO1xuZXhwb3J0cy5Qb2ludExpZ2h0ID0gUG9pbnRMaWdodDtcbmV4cG9ydHMuUG9pbnRMaWdodEhlbHBlciA9IFBvaW50TGlnaHRIZWxwZXI7XG5leHBvcnRzLlBvaW50cyA9IFBvaW50cztcbmV4cG9ydHMuUG9pbnRzTWF0ZXJpYWwgPSBQb2ludHNNYXRlcmlhbDtcbmV4cG9ydHMuUG9sYXJHcmlkSGVscGVyID0gUG9sYXJHcmlkSGVscGVyO1xuZXhwb3J0cy5Qb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkgPSBQb2x5aGVkcm9uR2VvbWV0cnk7XG5leHBvcnRzLlBvbHloZWRyb25HZW9tZXRyeSA9IFBvbHloZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuUG9zaXRpb25hbEF1ZGlvID0gUG9zaXRpb25hbEF1ZGlvO1xuZXhwb3J0cy5Qcm9wZXJ0eUJpbmRpbmcgPSBQcm9wZXJ0eUJpbmRpbmc7XG5leHBvcnRzLlByb3BlcnR5TWl4ZXIgPSBQcm9wZXJ0eU1peGVyO1xuZXhwb3J0cy5RdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IFF1YWRyYXRpY0JlemllckN1cnZlO1xuZXhwb3J0cy5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMgPSBRdWFkcmF0aWNCZXppZXJDdXJ2ZTM7XG5leHBvcnRzLlF1YXRlcm5pb24gPSBRdWF0ZXJuaW9uO1xuZXhwb3J0cy5RdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjayA9IFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrO1xuZXhwb3J0cy5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQgPSBRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ7XG5leHBvcnRzLlJFVklTSU9OID0gUkVWSVNJT047XG5leHBvcnRzLlJHQkFEZXB0aFBhY2tpbmcgPSBSR0JBRGVwdGhQYWNraW5nO1xuZXhwb3J0cy5SR0JBRm9ybWF0ID0gUkdCQUZvcm1hdDtcbmV4cG9ydHMuUkdCQUludGVnZXJGb3JtYXQgPSBSR0JBSW50ZWdlckZvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzEweDEwX0Zvcm1hdCA9IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfQVNUQ18xMHg1X0Zvcm1hdCA9IFJHQkFfQVNUQ18xMHg1X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzEweDZfRm9ybWF0ID0gUkdCQV9BU1RDXzEweDZfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfMTB4OF9Gb3JtYXQgPSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgPSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX0FTVENfMTJ4MTJfRm9ybWF0ID0gUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzR4NF9Gb3JtYXQgPSBSR0JBX0FTVENfNHg0X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzV4NF9Gb3JtYXQgPSBSR0JBX0FTVENfNXg0X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzV4NV9Gb3JtYXQgPSBSR0JBX0FTVENfNXg1X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzZ4NV9Gb3JtYXQgPSBSR0JBX0FTVENfNng1X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfNng2X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzh4NV9Gb3JtYXQgPSBSR0JBX0FTVENfOHg1X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfOHg2X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9BU1RDXzh4OF9Gb3JtYXQgPSBSR0JBX0FTVENfOHg4X0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9CUFRDX0Zvcm1hdCA9IFJHQkFfQlBUQ19Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfRVRDMl9FQUNfRm9ybWF0ID0gUkdCQV9FVEMyX0VBQ19Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0ID0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0O1xuZXhwb3J0cy5SR0JBX1MzVENfRFhUMV9Gb3JtYXQgPSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQ7XG5leHBvcnRzLlJHQkFfUzNUQ19EWFQzX0Zvcm1hdCA9IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdDtcbmV4cG9ydHMuUkdCQV9TM1RDX0RYVDVfRm9ybWF0ID0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0O1xuZXhwb3J0cy5SR0JfRVRDMV9Gb3JtYXQgPSBSR0JfRVRDMV9Gb3JtYXQ7XG5leHBvcnRzLlJHQl9FVEMyX0Zvcm1hdCA9IFJHQl9FVEMyX0Zvcm1hdDtcbmV4cG9ydHMuUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdDtcbmV4cG9ydHMuUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDtcbmV4cG9ydHMuUkdCX1MzVENfRFhUMV9Gb3JtYXQgPSBSR0JfUzNUQ19EWFQxX0Zvcm1hdDtcbmV4cG9ydHMuUkdGb3JtYXQgPSBSR0Zvcm1hdDtcbmV4cG9ydHMuUkdJbnRlZ2VyRm9ybWF0ID0gUkdJbnRlZ2VyRm9ybWF0O1xuZXhwb3J0cy5SYXdTaGFkZXJNYXRlcmlhbCA9IFJhd1NoYWRlck1hdGVyaWFsO1xuZXhwb3J0cy5SYXkgPSBSYXk7XG5leHBvcnRzLlJheWNhc3RlciA9IFJheWNhc3RlcjtcbmV4cG9ydHMuUmVjdEFyZWFMaWdodCA9IFJlY3RBcmVhTGlnaHQ7XG5leHBvcnRzLlJlZEZvcm1hdCA9IFJlZEZvcm1hdDtcbmV4cG9ydHMuUmVkSW50ZWdlckZvcm1hdCA9IFJlZEludGVnZXJGb3JtYXQ7XG5leHBvcnRzLlJlaW5oYXJkVG9uZU1hcHBpbmcgPSBSZWluaGFyZFRvbmVNYXBwaW5nO1xuZXhwb3J0cy5SZXBlYXRXcmFwcGluZyA9IFJlcGVhdFdyYXBwaW5nO1xuZXhwb3J0cy5SZXBsYWNlU3RlbmNpbE9wID0gUmVwbGFjZVN0ZW5jaWxPcDtcbmV4cG9ydHMuUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24gPSBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjtcbmV4cG9ydHMuUmluZ0J1ZmZlckdlb21ldHJ5ID0gUmluZ0dlb21ldHJ5O1xuZXhwb3J0cy5SaW5nR2VvbWV0cnkgPSBSaW5nR2VvbWV0cnk7XG5leHBvcnRzLlNjZW5lID0gU2NlbmU7XG5leHBvcnRzLlNjZW5lVXRpbHMgPSBTY2VuZVV0aWxzO1xuZXhwb3J0cy5TaGFkZXJDaHVuayA9IFNoYWRlckNodW5rO1xuZXhwb3J0cy5TaGFkZXJMaWIgPSBTaGFkZXJMaWI7XG5leHBvcnRzLlNoYWRlck1hdGVyaWFsID0gU2hhZGVyTWF0ZXJpYWw7XG5leHBvcnRzLlNoYWRvd01hdGVyaWFsID0gU2hhZG93TWF0ZXJpYWw7XG5leHBvcnRzLlNoYXBlID0gU2hhcGU7XG5leHBvcnRzLlNoYXBlQnVmZmVyR2VvbWV0cnkgPSBTaGFwZUdlb21ldHJ5O1xuZXhwb3J0cy5TaGFwZUdlb21ldHJ5ID0gU2hhcGVHZW9tZXRyeTtcbmV4cG9ydHMuU2hhcGVQYXRoID0gU2hhcGVQYXRoO1xuZXhwb3J0cy5TaGFwZVV0aWxzID0gU2hhcGVVdGlscztcbmV4cG9ydHMuU2hvcnRUeXBlID0gU2hvcnRUeXBlO1xuZXhwb3J0cy5Ta2VsZXRvbiA9IFNrZWxldG9uO1xuZXhwb3J0cy5Ta2VsZXRvbkhlbHBlciA9IFNrZWxldG9uSGVscGVyO1xuZXhwb3J0cy5Ta2lubmVkTWVzaCA9IFNraW5uZWRNZXNoO1xuZXhwb3J0cy5TbW9vdGhTaGFkaW5nID0gU21vb3RoU2hhZGluZztcbmV4cG9ydHMuU3BoZXJlID0gU3BoZXJlO1xuZXhwb3J0cy5TcGhlcmVCdWZmZXJHZW9tZXRyeSA9IFNwaGVyZUdlb21ldHJ5O1xuZXhwb3J0cy5TcGhlcmVHZW9tZXRyeSA9IFNwaGVyZUdlb21ldHJ5O1xuZXhwb3J0cy5TcGhlcmljYWwgPSBTcGhlcmljYWw7XG5leHBvcnRzLlNwaGVyaWNhbEhhcm1vbmljczMgPSBTcGhlcmljYWxIYXJtb25pY3MzO1xuZXhwb3J0cy5TcGxpbmVDdXJ2ZSA9IFNwbGluZUN1cnZlO1xuZXhwb3J0cy5TcG90TGlnaHQgPSBTcG90TGlnaHQ7XG5leHBvcnRzLlNwb3RMaWdodEhlbHBlciA9IFNwb3RMaWdodEhlbHBlcjtcbmV4cG9ydHMuU3ByaXRlID0gU3ByaXRlO1xuZXhwb3J0cy5TcHJpdGVNYXRlcmlhbCA9IFNwcml0ZU1hdGVyaWFsO1xuZXhwb3J0cy5TcmNBbHBoYUZhY3RvciA9IFNyY0FscGhhRmFjdG9yO1xuZXhwb3J0cy5TcmNBbHBoYVNhdHVyYXRlRmFjdG9yID0gU3JjQWxwaGFTYXR1cmF0ZUZhY3RvcjtcbmV4cG9ydHMuU3JjQ29sb3JGYWN0b3IgPSBTcmNDb2xvckZhY3RvcjtcbmV4cG9ydHMuU3RhdGljQ29weVVzYWdlID0gU3RhdGljQ29weVVzYWdlO1xuZXhwb3J0cy5TdGF0aWNEcmF3VXNhZ2UgPSBTdGF0aWNEcmF3VXNhZ2U7XG5leHBvcnRzLlN0YXRpY1JlYWRVc2FnZSA9IFN0YXRpY1JlYWRVc2FnZTtcbmV4cG9ydHMuU3RlcmVvQ2FtZXJhID0gU3RlcmVvQ2FtZXJhO1xuZXhwb3J0cy5TdHJlYW1Db3B5VXNhZ2UgPSBTdHJlYW1Db3B5VXNhZ2U7XG5leHBvcnRzLlN0cmVhbURyYXdVc2FnZSA9IFN0cmVhbURyYXdVc2FnZTtcbmV4cG9ydHMuU3RyZWFtUmVhZFVzYWdlID0gU3RyZWFtUmVhZFVzYWdlO1xuZXhwb3J0cy5TdHJpbmdLZXlmcmFtZVRyYWNrID0gU3RyaW5nS2V5ZnJhbWVUcmFjaztcbmV4cG9ydHMuU3VidHJhY3RFcXVhdGlvbiA9IFN1YnRyYWN0RXF1YXRpb247XG5leHBvcnRzLlN1YnRyYWN0aXZlQmxlbmRpbmcgPSBTdWJ0cmFjdGl2ZUJsZW5kaW5nO1xuZXhwb3J0cy5UT1VDSCA9IFRPVUNIO1xuZXhwb3J0cy5UYW5nZW50U3BhY2VOb3JtYWxNYXAgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5leHBvcnRzLlRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnkgPSBUZXRyYWhlZHJvbkdlb21ldHJ5O1xuZXhwb3J0cy5UZXRyYWhlZHJvbkdlb21ldHJ5ID0gVGV0cmFoZWRyb25HZW9tZXRyeTtcbmV4cG9ydHMuVGV4dEdlb21ldHJ5ID0gVGV4dEdlb21ldHJ5O1xuZXhwb3J0cy5UZXh0dXJlID0gVGV4dHVyZTtcbmV4cG9ydHMuVGV4dHVyZUxvYWRlciA9IFRleHR1cmVMb2FkZXI7XG5leHBvcnRzLlRvcnVzQnVmZmVyR2VvbWV0cnkgPSBUb3J1c0dlb21ldHJ5O1xuZXhwb3J0cy5Ub3J1c0dlb21ldHJ5ID0gVG9ydXNHZW9tZXRyeTtcbmV4cG9ydHMuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkgPSBUb3J1c0tub3RHZW9tZXRyeTtcbmV4cG9ydHMuVG9ydXNLbm90R2VvbWV0cnkgPSBUb3J1c0tub3RHZW9tZXRyeTtcbmV4cG9ydHMuVHJpYW5nbGUgPSBUcmlhbmdsZTtcbmV4cG9ydHMuVHJpYW5nbGVGYW5EcmF3TW9kZSA9IFRyaWFuZ2xlRmFuRHJhd01vZGU7XG5leHBvcnRzLlRyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9IFRyaWFuZ2xlU3RyaXBEcmF3TW9kZTtcbmV4cG9ydHMuVHJpYW5nbGVzRHJhd01vZGUgPSBUcmlhbmdsZXNEcmF3TW9kZTtcbmV4cG9ydHMuVHViZUJ1ZmZlckdlb21ldHJ5ID0gVHViZUdlb21ldHJ5O1xuZXhwb3J0cy5UdWJlR2VvbWV0cnkgPSBUdWJlR2VvbWV0cnk7XG5leHBvcnRzLlVWTWFwcGluZyA9IFVWTWFwcGluZztcbmV4cG9ydHMuVWludDE2QXR0cmlidXRlID0gVWludDE2QXR0cmlidXRlO1xuZXhwb3J0cy5VaW50MTZCdWZmZXJBdHRyaWJ1dGUgPSBVaW50MTZCdWZmZXJBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQzMkF0dHJpYnV0ZSA9IFVpbnQzMkF0dHJpYnV0ZTtcbmV4cG9ydHMuVWludDMyQnVmZmVyQXR0cmlidXRlID0gVWludDMyQnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5VaW50OEF0dHJpYnV0ZSA9IFVpbnQ4QXR0cmlidXRlO1xuZXhwb3J0cy5VaW50OEJ1ZmZlckF0dHJpYnV0ZSA9IFVpbnQ4QnVmZmVyQXR0cmlidXRlO1xuZXhwb3J0cy5VaW50OENsYW1wZWRBdHRyaWJ1dGUgPSBVaW50OENsYW1wZWRBdHRyaWJ1dGU7XG5leHBvcnRzLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSA9IFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZTtcbmV4cG9ydHMuVW5pZm9ybSA9IFVuaWZvcm07XG5leHBvcnRzLlVuaWZvcm1zTGliID0gVW5pZm9ybXNMaWI7XG5leHBvcnRzLlVuaWZvcm1zVXRpbHMgPSBVbmlmb3Jtc1V0aWxzO1xuZXhwb3J0cy5VbnNpZ25lZEJ5dGVUeXBlID0gVW5zaWduZWRCeXRlVHlwZTtcbmV4cG9ydHMuVW5zaWduZWRJbnQyNDhUeXBlID0gVW5zaWduZWRJbnQyNDhUeXBlO1xuZXhwb3J0cy5VbnNpZ25lZEludFR5cGUgPSBVbnNpZ25lZEludFR5cGU7XG5leHBvcnRzLlVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSA9IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZTtcbmV4cG9ydHMuVW5zaWduZWRTaG9ydDU1NTFUeXBlID0gVW5zaWduZWRTaG9ydDU1NTFUeXBlO1xuZXhwb3J0cy5VbnNpZ25lZFNob3J0VHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuZXhwb3J0cy5WU01TaGFkb3dNYXAgPSBWU01TaGFkb3dNYXA7XG5leHBvcnRzLlZlY3RvcjIgPSBWZWN0b3IyO1xuZXhwb3J0cy5WZWN0b3IzID0gVmVjdG9yMztcbmV4cG9ydHMuVmVjdG9yNCA9IFZlY3RvcjQ7XG5leHBvcnRzLlZlY3RvcktleWZyYW1lVHJhY2sgPSBWZWN0b3JLZXlmcmFtZVRyYWNrO1xuZXhwb3J0cy5WZXJ0ZXggPSBWZXJ0ZXg7XG5leHBvcnRzLlZlcnRleENvbG9ycyA9IFZlcnRleENvbG9ycztcbmV4cG9ydHMuVmlkZW9UZXh0dXJlID0gVmlkZW9UZXh0dXJlO1xuZXhwb3J0cy5XZWJHTDFSZW5kZXJlciA9IFdlYkdMMVJlbmRlcmVyO1xuZXhwb3J0cy5XZWJHTEN1YmVSZW5kZXJUYXJnZXQgPSBXZWJHTEN1YmVSZW5kZXJUYXJnZXQ7XG5leHBvcnRzLldlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID0gV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM7XG5leHBvcnRzLldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgPSBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0O1xuZXhwb3J0cy5XZWJHTFJlbmRlclRhcmdldCA9IFdlYkdMUmVuZGVyVGFyZ2V0O1xuZXhwb3J0cy5XZWJHTFJlbmRlclRhcmdldEN1YmUgPSBXZWJHTFJlbmRlclRhcmdldEN1YmU7XG5leHBvcnRzLldlYkdMUmVuZGVyZXIgPSBXZWJHTFJlbmRlcmVyO1xuZXhwb3J0cy5XZWJHTFV0aWxzID0gV2ViR0xVdGlscztcbmV4cG9ydHMuV2lyZWZyYW1lR2VvbWV0cnkgPSBXaXJlZnJhbWVHZW9tZXRyeTtcbmV4cG9ydHMuV2lyZWZyYW1lSGVscGVyID0gV2lyZWZyYW1lSGVscGVyO1xuZXhwb3J0cy5XcmFwQXJvdW5kRW5kaW5nID0gV3JhcEFyb3VuZEVuZGluZztcbmV4cG9ydHMuWEhSTG9hZGVyID0gWEhSTG9hZGVyO1xuZXhwb3J0cy5aZXJvQ3VydmF0dXJlRW5kaW5nID0gWmVyb0N1cnZhdHVyZUVuZGluZztcbmV4cG9ydHMuWmVyb0ZhY3RvciA9IFplcm9GYWN0b3I7XG5leHBvcnRzLlplcm9TbG9wZUVuZGluZyA9IFplcm9TbG9wZUVuZGluZztcbmV4cG9ydHMuWmVyb1N0ZW5jaWxPcCA9IFplcm9TdGVuY2lsT3A7XG5leHBvcnRzLl9TUkdCQUZvcm1hdCA9IF9TUkdCQUZvcm1hdDtcbmV4cG9ydHMuc1JHQkVuY29kaW5nID0gc1JHQkVuY29kaW5nO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cbmNvbnN0IFJFVklTSU9OID0gJzEzNyc7XG5jb25zdCBNT1VTRSA9IHsgTEVGVDogMCwgTUlERExFOiAxLCBSSUdIVDogMiwgUk9UQVRFOiAwLCBET0xMWTogMSwgUEFOOiAyIH07XG5jb25zdCBUT1VDSCA9IHsgUk9UQVRFOiAwLCBQQU46IDEsIERPTExZX1BBTjogMiwgRE9MTFlfUk9UQVRFOiAzIH07XG5jb25zdCBDdWxsRmFjZU5vbmUgPSAwO1xuY29uc3QgQ3VsbEZhY2VCYWNrID0gMTtcbmNvbnN0IEN1bGxGYWNlRnJvbnQgPSAyO1xuY29uc3QgQ3VsbEZhY2VGcm9udEJhY2sgPSAzO1xuY29uc3QgQmFzaWNTaGFkb3dNYXAgPSAwO1xuY29uc3QgUENGU2hhZG93TWFwID0gMTtcbmNvbnN0IFBDRlNvZnRTaGFkb3dNYXAgPSAyO1xuY29uc3QgVlNNU2hhZG93TWFwID0gMztcbmNvbnN0IEZyb250U2lkZSA9IDA7XG5jb25zdCBCYWNrU2lkZSA9IDE7XG5jb25zdCBEb3VibGVTaWRlID0gMjtcbmNvbnN0IEZsYXRTaGFkaW5nID0gMTtcbmNvbnN0IFNtb290aFNoYWRpbmcgPSAyO1xuY29uc3QgTm9CbGVuZGluZyA9IDA7XG5jb25zdCBOb3JtYWxCbGVuZGluZyA9IDE7XG5jb25zdCBBZGRpdGl2ZUJsZW5kaW5nID0gMjtcbmNvbnN0IFN1YnRyYWN0aXZlQmxlbmRpbmcgPSAzO1xuY29uc3QgTXVsdGlwbHlCbGVuZGluZyA9IDQ7XG5jb25zdCBDdXN0b21CbGVuZGluZyA9IDU7XG5jb25zdCBBZGRFcXVhdGlvbiA9IDEwMDtcbmNvbnN0IFN1YnRyYWN0RXF1YXRpb24gPSAxMDE7XG5jb25zdCBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbiA9IDEwMjtcbmNvbnN0IE1pbkVxdWF0aW9uID0gMTAzO1xuY29uc3QgTWF4RXF1YXRpb24gPSAxMDQ7XG5jb25zdCBaZXJvRmFjdG9yID0gMjAwO1xuY29uc3QgT25lRmFjdG9yID0gMjAxO1xuY29uc3QgU3JjQ29sb3JGYWN0b3IgPSAyMDI7XG5jb25zdCBPbmVNaW51c1NyY0NvbG9yRmFjdG9yID0gMjAzO1xuY29uc3QgU3JjQWxwaGFGYWN0b3IgPSAyMDQ7XG5jb25zdCBPbmVNaW51c1NyY0FscGhhRmFjdG9yID0gMjA1O1xuY29uc3QgRHN0QWxwaGFGYWN0b3IgPSAyMDY7XG5jb25zdCBPbmVNaW51c0RzdEFscGhhRmFjdG9yID0gMjA3O1xuY29uc3QgRHN0Q29sb3JGYWN0b3IgPSAyMDg7XG5jb25zdCBPbmVNaW51c0RzdENvbG9yRmFjdG9yID0gMjA5O1xuY29uc3QgU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciA9IDIxMDtcbmNvbnN0IE5ldmVyRGVwdGggPSAwO1xuY29uc3QgQWx3YXlzRGVwdGggPSAxO1xuY29uc3QgTGVzc0RlcHRoID0gMjtcbmNvbnN0IExlc3NFcXVhbERlcHRoID0gMztcbmNvbnN0IEVxdWFsRGVwdGggPSA0O1xuY29uc3QgR3JlYXRlckVxdWFsRGVwdGggPSA1O1xuY29uc3QgR3JlYXRlckRlcHRoID0gNjtcbmNvbnN0IE5vdEVxdWFsRGVwdGggPSA3O1xuY29uc3QgTXVsdGlwbHlPcGVyYXRpb24gPSAwO1xuY29uc3QgTWl4T3BlcmF0aW9uID0gMTtcbmNvbnN0IEFkZE9wZXJhdGlvbiA9IDI7XG5jb25zdCBOb1RvbmVNYXBwaW5nID0gMDtcbmNvbnN0IExpbmVhclRvbmVNYXBwaW5nID0gMTtcbmNvbnN0IFJlaW5oYXJkVG9uZU1hcHBpbmcgPSAyO1xuY29uc3QgQ2luZW9uVG9uZU1hcHBpbmcgPSAzO1xuY29uc3QgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nID0gNDtcbmNvbnN0IEN1c3RvbVRvbmVNYXBwaW5nID0gNTtcblxuY29uc3QgVVZNYXBwaW5nID0gMzAwO1xuY29uc3QgQ3ViZVJlZmxlY3Rpb25NYXBwaW5nID0gMzAxO1xuY29uc3QgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nID0gMzAyO1xuY29uc3QgRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDM7XG5jb25zdCBFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZyA9IDMwNDtcbmNvbnN0IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nID0gMzA2O1xuY29uc3QgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmcgPSAzMDc7XG5jb25zdCBSZXBlYXRXcmFwcGluZyA9IDEwMDA7XG5jb25zdCBDbGFtcFRvRWRnZVdyYXBwaW5nID0gMTAwMTtcbmNvbnN0IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmcgPSAxMDAyO1xuY29uc3QgTmVhcmVzdEZpbHRlciA9IDEwMDM7XG5jb25zdCBOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlciA9IDEwMDQ7XG5jb25zdCBOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlciA9IDEwMDQ7XG5jb25zdCBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyID0gMTAwNTtcbmNvbnN0IE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIgPSAxMDA1O1xuY29uc3QgTGluZWFyRmlsdGVyID0gMTAwNjtcbmNvbnN0IExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXIgPSAxMDA3O1xuY29uc3QgTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlciA9IDEwMDc7XG5jb25zdCBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIgPSAxMDA4O1xuY29uc3QgTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyID0gMTAwODtcbmNvbnN0IFVuc2lnbmVkQnl0ZVR5cGUgPSAxMDA5O1xuY29uc3QgQnl0ZVR5cGUgPSAxMDEwO1xuY29uc3QgU2hvcnRUeXBlID0gMTAxMTtcbmNvbnN0IFVuc2lnbmVkU2hvcnRUeXBlID0gMTAxMjtcbmNvbnN0IEludFR5cGUgPSAxMDEzO1xuY29uc3QgVW5zaWduZWRJbnRUeXBlID0gMTAxNDtcbmNvbnN0IEZsb2F0VHlwZSA9IDEwMTU7XG5jb25zdCBIYWxmRmxvYXRUeXBlID0gMTAxNjtcbmNvbnN0IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSA9IDEwMTc7XG5jb25zdCBVbnNpZ25lZFNob3J0NTU1MVR5cGUgPSAxMDE4O1xuY29uc3QgVW5zaWduZWRJbnQyNDhUeXBlID0gMTAyMDtcbmNvbnN0IEFscGhhRm9ybWF0ID0gMTAyMTtcbmNvbnN0IFJHQkFGb3JtYXQgPSAxMDIzO1xuY29uc3QgTHVtaW5hbmNlRm9ybWF0ID0gMTAyNDtcbmNvbnN0IEx1bWluYW5jZUFscGhhRm9ybWF0ID0gMTAyNTtcbmNvbnN0IERlcHRoRm9ybWF0ID0gMTAyNjtcbmNvbnN0IERlcHRoU3RlbmNpbEZvcm1hdCA9IDEwMjc7XG5jb25zdCBSZWRGb3JtYXQgPSAxMDI4O1xuY29uc3QgUmVkSW50ZWdlckZvcm1hdCA9IDEwMjk7XG5jb25zdCBSR0Zvcm1hdCA9IDEwMzA7XG5jb25zdCBSR0ludGVnZXJGb3JtYXQgPSAxMDMxO1xuY29uc3QgUkdCQUludGVnZXJGb3JtYXQgPSAxMDMzO1xuXG5jb25zdCBSR0JfUzNUQ19EWFQxX0Zvcm1hdCA9IDMzNzc2O1xuY29uc3QgUkdCQV9TM1RDX0RYVDFfRm9ybWF0ID0gMzM3Nzc7XG5jb25zdCBSR0JBX1MzVENfRFhUM19Gb3JtYXQgPSAzMzc3ODtcbmNvbnN0IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCA9IDMzNzc5O1xuY29uc3QgUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAzNTg0MDtcbmNvbnN0IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gMzU4NDE7XG5jb25zdCBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAzNTg0MjtcbmNvbnN0IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IDM1ODQzO1xuY29uc3QgUkdCX0VUQzFfRm9ybWF0ID0gMzYxOTY7XG5jb25zdCBSR0JfRVRDMl9Gb3JtYXQgPSAzNzQ5MjtcbmNvbnN0IFJHQkFfRVRDMl9FQUNfRm9ybWF0ID0gMzc0OTY7XG5jb25zdCBSR0JBX0FTVENfNHg0X0Zvcm1hdCA9IDM3ODA4O1xuY29uc3QgUkdCQV9BU1RDXzV4NF9Gb3JtYXQgPSAzNzgwOTtcbmNvbnN0IFJHQkFfQVNUQ181eDVfRm9ybWF0ID0gMzc4MTA7XG5jb25zdCBSR0JBX0FTVENfNng1X0Zvcm1hdCA9IDM3ODExO1xuY29uc3QgUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQgPSAzNzgxMjtcbmNvbnN0IFJHQkFfQVNUQ184eDVfRm9ybWF0ID0gMzc4MTM7XG5jb25zdCBSR0JBX0FTVENfOHg2X0Zvcm1hdCA9IDM3ODE0O1xuY29uc3QgUkdCQV9BU1RDXzh4OF9Gb3JtYXQgPSAzNzgxNTtcbmNvbnN0IFJHQkFfQVNUQ18xMHg1X0Zvcm1hdCA9IDM3ODE2O1xuY29uc3QgUkdCQV9BU1RDXzEweDZfRm9ybWF0ID0gMzc4MTc7XG5jb25zdCBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgPSAzNzgxODtcbmNvbnN0IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQgPSAzNzgxOTtcbmNvbnN0IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgPSAzNzgyMDtcbmNvbnN0IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQgPSAzNzgyMTtcbmNvbnN0IFJHQkFfQlBUQ19Gb3JtYXQgPSAzNjQ5MjtcbmNvbnN0IExvb3BPbmNlID0gMjIwMDtcbmNvbnN0IExvb3BSZXBlYXQgPSAyMjAxO1xuY29uc3QgTG9vcFBpbmdQb25nID0gMjIwMjtcbmNvbnN0IEludGVycG9sYXRlRGlzY3JldGUgPSAyMzAwO1xuY29uc3QgSW50ZXJwb2xhdGVMaW5lYXIgPSAyMzAxO1xuY29uc3QgSW50ZXJwb2xhdGVTbW9vdGggPSAyMzAyO1xuY29uc3QgWmVyb0N1cnZhdHVyZUVuZGluZyA9IDI0MDA7XG5jb25zdCBaZXJvU2xvcGVFbmRpbmcgPSAyNDAxO1xuY29uc3QgV3JhcEFyb3VuZEVuZGluZyA9IDI0MDI7XG5jb25zdCBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGUgPSAyNTAwO1xuY29uc3QgQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUgPSAyNTAxO1xuY29uc3QgVHJpYW5nbGVzRHJhd01vZGUgPSAwO1xuY29uc3QgVHJpYW5nbGVTdHJpcERyYXdNb2RlID0gMTtcbmNvbnN0IFRyaWFuZ2xlRmFuRHJhd01vZGUgPSAyO1xuY29uc3QgTGluZWFyRW5jb2RpbmcgPSAzMDAwO1xuY29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcbmNvbnN0IEJhc2ljRGVwdGhQYWNraW5nID0gMzIwMDtcbmNvbnN0IFJHQkFEZXB0aFBhY2tpbmcgPSAzMjAxO1xuY29uc3QgVGFuZ2VudFNwYWNlTm9ybWFsTWFwID0gMDtcbmNvbnN0IE9iamVjdFNwYWNlTm9ybWFsTWFwID0gMTtcblxuY29uc3QgWmVyb1N0ZW5jaWxPcCA9IDA7XG5jb25zdCBLZWVwU3RlbmNpbE9wID0gNzY4MDtcbmNvbnN0IFJlcGxhY2VTdGVuY2lsT3AgPSA3NjgxO1xuY29uc3QgSW5jcmVtZW50U3RlbmNpbE9wID0gNzY4MjtcbmNvbnN0IERlY3JlbWVudFN0ZW5jaWxPcCA9IDc2ODM7XG5jb25zdCBJbmNyZW1lbnRXcmFwU3RlbmNpbE9wID0gMzQwNTU7XG5jb25zdCBEZWNyZW1lbnRXcmFwU3RlbmNpbE9wID0gMzQwNTY7XG5jb25zdCBJbnZlcnRTdGVuY2lsT3AgPSA1Mzg2O1xuXG5jb25zdCBOZXZlclN0ZW5jaWxGdW5jID0gNTEyO1xuY29uc3QgTGVzc1N0ZW5jaWxGdW5jID0gNTEzO1xuY29uc3QgRXF1YWxTdGVuY2lsRnVuYyA9IDUxNDtcbmNvbnN0IExlc3NFcXVhbFN0ZW5jaWxGdW5jID0gNTE1O1xuY29uc3QgR3JlYXRlclN0ZW5jaWxGdW5jID0gNTE2O1xuY29uc3QgTm90RXF1YWxTdGVuY2lsRnVuYyA9IDUxNztcbmNvbnN0IEdyZWF0ZXJFcXVhbFN0ZW5jaWxGdW5jID0gNTE4O1xuY29uc3QgQWx3YXlzU3RlbmNpbEZ1bmMgPSA1MTk7XG5cbmNvbnN0IFN0YXRpY0RyYXdVc2FnZSA9IDM1MDQ0O1xuY29uc3QgRHluYW1pY0RyYXdVc2FnZSA9IDM1MDQ4O1xuY29uc3QgU3RyZWFtRHJhd1VzYWdlID0gMzUwNDA7XG5jb25zdCBTdGF0aWNSZWFkVXNhZ2UgPSAzNTA0NTtcbmNvbnN0IER5bmFtaWNSZWFkVXNhZ2UgPSAzNTA0OTtcbmNvbnN0IFN0cmVhbVJlYWRVc2FnZSA9IDM1MDQxO1xuY29uc3QgU3RhdGljQ29weVVzYWdlID0gMzUwNDY7XG5jb25zdCBEeW5hbWljQ29weVVzYWdlID0gMzUwNTA7XG5jb25zdCBTdHJlYW1Db3B5VXNhZ2UgPSAzNTA0MjtcblxuY29uc3QgR0xTTDEgPSAnMTAwJztcbmNvbnN0IEdMU0wzID0gJzMwMCBlcyc7XG5cbmNvbnN0IF9TUkdCQUZvcm1hdCA9IDEwMzU7IC8vIGZhbGxiYWNrIGZvciBXZWJHTCAxXG5cbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi9ldmVudGRpc3BhdGNoZXIuanMvXG4gKi9cblxuY2xhc3MgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRhZGRFdmVudExpc3RlbmVyKCB0eXBlLCBsaXN0ZW5lciApIHtcblxuXHRcdGlmICggdGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQgKSB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcblxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblxuXHRcdGlmICggbGlzdGVuZXJzWyB0eXBlIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0bGlzdGVuZXJzWyB0eXBlIF0gPSBbXTtcblxuXHRcdH1cblxuXHRcdGlmICggbGlzdGVuZXJzWyB0eXBlIF0uaW5kZXhPZiggbGlzdGVuZXIgKSA9PT0gLSAxICkge1xuXG5cdFx0XHRsaXN0ZW5lcnNbIHR5cGUgXS5wdXNoKCBsaXN0ZW5lciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRoYXNFdmVudExpc3RlbmVyKCB0eXBlLCBsaXN0ZW5lciApIHtcblxuXHRcdGlmICggdGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQgKSByZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XG5cblx0XHRyZXR1cm4gbGlzdGVuZXJzWyB0eXBlIF0gIT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lcnNbIHR5cGUgXS5pbmRleE9mKCBsaXN0ZW5lciApICE9PSAtIDE7XG5cblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGxpc3RlbmVyICkge1xuXG5cdFx0aWYgKCB0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzWyB0eXBlIF07XG5cblx0XHRpZiAoIGxpc3RlbmVyQXJyYXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgaW5kZXggPSBsaXN0ZW5lckFycmF5LmluZGV4T2YoIGxpc3RlbmVyICk7XG5cblx0XHRcdGlmICggaW5kZXggIT09IC0gMSApIHtcblxuXHRcdFx0XHRsaXN0ZW5lckFycmF5LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRkaXNwYXRjaEV2ZW50KCBldmVudCApIHtcblxuXHRcdGlmICggdGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQgKSByZXR1cm47XG5cblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XG5cdFx0Y29uc3QgbGlzdGVuZXJBcnJheSA9IGxpc3RlbmVyc1sgZXZlbnQudHlwZSBdO1xuXG5cdFx0aWYgKCBsaXN0ZW5lckFycmF5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGV2ZW50LnRhcmdldCA9IHRoaXM7XG5cblx0XHRcdC8vIE1ha2UgYSBjb3B5LCBpbiBjYXNlIGxpc3RlbmVycyBhcmUgcmVtb3ZlZCB3aGlsZSBpdGVyYXRpbmcuXG5cdFx0XHRjb25zdCBhcnJheSA9IGxpc3RlbmVyQXJyYXkuc2xpY2UoIDAgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRhcnJheVsgaSBdLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gbnVsbDtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuY29uc3QgX2x1dCA9IFtdO1xuXG5mb3IgKCBsZXQgaSA9IDA7IGkgPCAyNTY7IGkgKysgKSB7XG5cblx0X2x1dFsgaSBdID0gKCBpIDwgMTYgPyAnMCcgOiAnJyApICsgKCBpICkudG9TdHJpbmcoIDE2ICk7XG5cbn1cblxubGV0IF9zZWVkID0gMTIzNDU2NztcblxuXG5jb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbmNvbnN0IFJBRDJERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjE5NjMxMzYjMjE5NjMxMzZcbmZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHtcblxuXHRjb25zdCBkMCA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgZDEgPSBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmZmZiB8IDA7XG5cdGNvbnN0IGQyID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRjb25zdCBkMyA9IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZmZmIHwgMDtcblx0Y29uc3QgdXVpZCA9IF9sdXRbIGQwICYgMHhmZiBdICsgX2x1dFsgZDAgPj4gOCAmIDB4ZmYgXSArIF9sdXRbIGQwID4+IDE2ICYgMHhmZiBdICsgX2x1dFsgZDAgPj4gMjQgJiAweGZmIF0gKyAnLScgK1xuXHRcdFx0X2x1dFsgZDEgJiAweGZmIF0gKyBfbHV0WyBkMSA+PiA4ICYgMHhmZiBdICsgJy0nICsgX2x1dFsgZDEgPj4gMTYgJiAweDBmIHwgMHg0MCBdICsgX2x1dFsgZDEgPj4gMjQgJiAweGZmIF0gKyAnLScgK1xuXHRcdFx0X2x1dFsgZDIgJiAweDNmIHwgMHg4MCBdICsgX2x1dFsgZDIgPj4gOCAmIDB4ZmYgXSArICctJyArIF9sdXRbIGQyID4+IDE2ICYgMHhmZiBdICsgX2x1dFsgZDIgPj4gMjQgJiAweGZmIF0gK1xuXHRcdFx0X2x1dFsgZDMgJiAweGZmIF0gKyBfbHV0WyBkMyA+PiA4ICYgMHhmZiBdICsgX2x1dFsgZDMgPj4gMTYgJiAweGZmIF0gKyBfbHV0WyBkMyA+PiAyNCAmIDB4ZmYgXTtcblxuXHQvLyAudG9VcHBlckNhc2UoKSBoZXJlIGZsYXR0ZW5zIGNvbmNhdGVuYXRlZCBzdHJpbmdzIHRvIHNhdmUgaGVhcCBtZW1vcnkgc3BhY2UuXG5cdHJldHVybiB1dWlkLnRvVXBwZXJDYXNlKCk7XG5cbn1cblxuZnVuY3Rpb24gY2xhbXAoIHZhbHVlLCBtaW4sIG1heCApIHtcblxuXHRyZXR1cm4gTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgdmFsdWUgKSApO1xuXG59XG5cbi8vIGNvbXB1dGUgZXVjbGlkaWFuIG1vZHVsbyBvZiBtICUgblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9kdWxvX29wZXJhdGlvblxuZnVuY3Rpb24gZXVjbGlkZWFuTW9kdWxvKCBuLCBtICkge1xuXG5cdHJldHVybiAoICggbiAlIG0gKSArIG0gKSAlIG07XG5cbn1cblxuLy8gTGluZWFyIG1hcHBpbmcgZnJvbSByYW5nZSA8YTEsIGEyPiB0byByYW5nZSA8YjEsIGIyPlxuZnVuY3Rpb24gbWFwTGluZWFyKCB4LCBhMSwgYTIsIGIxLCBiMiApIHtcblxuXHRyZXR1cm4gYjEgKyAoIHggLSBhMSApICogKCBiMiAtIGIxICkgLyAoIGEyIC0gYTEgKTtcblxufVxuXG4vLyBodHRwczovL3d3dy5nYW1lZGV2Lm5ldC90dXRvcmlhbHMvcHJvZ3JhbW1pbmcvZ2VuZXJhbC1hbmQtZ2FtZXBsYXktcHJvZ3JhbW1pbmcvaW52ZXJzZS1sZXJwLWEtc3VwZXItdXNlZnVsLXlldC1vZnRlbi1vdmVybG9va2VkLWZ1bmN0aW9uLXI1MjMwL1xuZnVuY3Rpb24gaW52ZXJzZUxlcnAoIHgsIHksIHZhbHVlICkge1xuXG5cdGlmICggeCAhPT0geSApIHtcblxuXHRcdHJldHVybiAoIHZhbHVlIC0geCApIC8gKCB5IC0geCApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRyZXR1cm4gMDtcblxuXHR9XG5cbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2ludGVycG9sYXRpb25cbmZ1bmN0aW9uIGxlcnAoIHgsIHksIHQgKSB7XG5cblx0cmV0dXJuICggMSAtIHQgKSAqIHggKyB0ICogeTtcblxufVxuXG4vLyBodHRwOi8vd3d3LnJvcnlkcmlzY29sbC5jb20vMjAxNi8wMy8wNy9mcmFtZS1yYXRlLWluZGVwZW5kZW50LWRhbXBpbmctdXNpbmctbGVycC9cbmZ1bmN0aW9uIGRhbXAoIHgsIHksIGxhbWJkYSwgZHQgKSB7XG5cblx0cmV0dXJuIGxlcnAoIHgsIHksIDEgLSBNYXRoLmV4cCggLSBsYW1iZGEgKiBkdCApICk7XG5cbn1cblxuLy8gaHR0cHM6Ly93d3cuZGVzbW9zLmNvbS9jYWxjdWxhdG9yL3Zjc2pueXo3eDRcbmZ1bmN0aW9uIHBpbmdwb25nKCB4LCBsZW5ndGggPSAxICkge1xuXG5cdHJldHVybiBsZW5ndGggLSBNYXRoLmFicyggZXVjbGlkZWFuTW9kdWxvKCB4LCBsZW5ndGggKiAyICkgLSBsZW5ndGggKTtcblxufVxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ntb290aHN0ZXBcbmZ1bmN0aW9uIHNtb290aHN0ZXAoIHgsIG1pbiwgbWF4ICkge1xuXG5cdGlmICggeCA8PSBtaW4gKSByZXR1cm4gMDtcblx0aWYgKCB4ID49IG1heCApIHJldHVybiAxO1xuXG5cdHggPSAoIHggLSBtaW4gKSAvICggbWF4IC0gbWluICk7XG5cblx0cmV0dXJuIHggKiB4ICogKCAzIC0gMiAqIHggKTtcblxufVxuXG5mdW5jdGlvbiBzbW9vdGhlcnN0ZXAoIHgsIG1pbiwgbWF4ICkge1xuXG5cdGlmICggeCA8PSBtaW4gKSByZXR1cm4gMDtcblx0aWYgKCB4ID49IG1heCApIHJldHVybiAxO1xuXG5cdHggPSAoIHggLSBtaW4gKSAvICggbWF4IC0gbWluICk7XG5cblx0cmV0dXJuIHggKiB4ICogeCAqICggeCAqICggeCAqIDYgLSAxNSApICsgMTAgKTtcblxufVxuXG4vLyBSYW5kb20gaW50ZWdlciBmcm9tIDxsb3csIGhpZ2g+IGludGVydmFsXG5mdW5jdGlvbiByYW5kSW50KCBsb3csIGhpZ2ggKSB7XG5cblx0cmV0dXJuIGxvdyArIE1hdGguZmxvb3IoIE1hdGgucmFuZG9tKCkgKiAoIGhpZ2ggLSBsb3cgKyAxICkgKTtcblxufVxuXG4vLyBSYW5kb20gZmxvYXQgZnJvbSA8bG93LCBoaWdoPiBpbnRlcnZhbFxuZnVuY3Rpb24gcmFuZEZsb2F0KCBsb3csIGhpZ2ggKSB7XG5cblx0cmV0dXJuIGxvdyArIE1hdGgucmFuZG9tKCkgKiAoIGhpZ2ggLSBsb3cgKTtcblxufVxuXG4vLyBSYW5kb20gZmxvYXQgZnJvbSA8LXJhbmdlLzIsIHJhbmdlLzI+IGludGVydmFsXG5mdW5jdGlvbiByYW5kRmxvYXRTcHJlYWQoIHJhbmdlICkge1xuXG5cdHJldHVybiByYW5nZSAqICggMC41IC0gTWF0aC5yYW5kb20oKSApO1xuXG59XG5cbi8vIERldGVybWluaXN0aWMgcHNldWRvLXJhbmRvbSBmbG9hdCBpbiB0aGUgaW50ZXJ2YWwgWyAwLCAxIF1cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbSggcyApIHtcblxuXHRpZiAoIHMgIT09IHVuZGVmaW5lZCApIF9zZWVkID0gcyAlIDIxNDc0ODM2NDc7XG5cblx0Ly8gUGFyay1NaWxsZXIgYWxnb3JpdGhtXG5cblx0X3NlZWQgPSBfc2VlZCAqIDE2ODA3ICUgMjE0NzQ4MzY0NztcblxuXHRyZXR1cm4gKCBfc2VlZCAtIDEgKSAvIDIxNDc0ODM2NDY7XG5cbn1cblxuZnVuY3Rpb24gZGVnVG9SYWQoIGRlZ3JlZXMgKSB7XG5cblx0cmV0dXJuIGRlZ3JlZXMgKiBERUcyUkFEO1xuXG59XG5cbmZ1bmN0aW9uIHJhZFRvRGVnKCByYWRpYW5zICkge1xuXG5cdHJldHVybiByYWRpYW5zICogUkFEMkRFRztcblxufVxuXG5mdW5jdGlvbiBpc1Bvd2VyT2ZUd28oIHZhbHVlICkge1xuXG5cdHJldHVybiAoIHZhbHVlICYgKCB2YWx1ZSAtIDEgKSApID09PSAwICYmIHZhbHVlICE9PSAwO1xuXG59XG5cbmZ1bmN0aW9uIGNlaWxQb3dlck9mVHdvKCB2YWx1ZSApIHtcblxuXHRyZXR1cm4gTWF0aC5wb3coIDIsIE1hdGguY2VpbCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XG5cbn1cblxuZnVuY3Rpb24gZmxvb3JQb3dlck9mVHdvKCB2YWx1ZSApIHtcblxuXHRyZXR1cm4gTWF0aC5wb3coIDIsIE1hdGguZmxvb3IoIE1hdGgubG9nKCB2YWx1ZSApIC8gTWF0aC5MTjIgKSApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoIHEsIGEsIGIsIGMsIG9yZGVyICkge1xuXG5cdC8vIEludHJpbnNpYyBQcm9wZXIgRXVsZXIgQW5nbGVzIC0gc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1bGVyX2FuZ2xlc1xuXG5cdC8vIHJvdGF0aW9ucyBhcmUgYXBwbGllZCB0byB0aGUgYXhlcyBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5ICdvcmRlcidcblx0Ly8gcm90YXRpb24gYnkgYW5nbGUgJ2EnIGlzIGFwcGxpZWQgZmlyc3QsIHRoZW4gYnkgYW5nbGUgJ2InLCB0aGVuIGJ5IGFuZ2xlICdjJ1xuXHQvLyBhbmdsZXMgYXJlIGluIHJhZGlhbnNcblxuXHRjb25zdCBjb3MgPSBNYXRoLmNvcztcblx0Y29uc3Qgc2luID0gTWF0aC5zaW47XG5cblx0Y29uc3QgYzIgPSBjb3MoIGIgLyAyICk7XG5cdGNvbnN0IHMyID0gc2luKCBiIC8gMiApO1xuXG5cdGNvbnN0IGMxMyA9IGNvcyggKCBhICsgYyApIC8gMiApO1xuXHRjb25zdCBzMTMgPSBzaW4oICggYSArIGMgKSAvIDIgKTtcblxuXHRjb25zdCBjMV8zID0gY29zKCAoIGEgLSBjICkgLyAyICk7XG5cdGNvbnN0IHMxXzMgPSBzaW4oICggYSAtIGMgKSAvIDIgKTtcblxuXHRjb25zdCBjM18xID0gY29zKCAoIGMgLSBhICkgLyAyICk7XG5cdGNvbnN0IHMzXzEgPSBzaW4oICggYyAtIGEgKSAvIDIgKTtcblxuXHRzd2l0Y2ggKCBvcmRlciApIHtcblxuXHRcdGNhc2UgJ1hZWCc6XG5cdFx0XHRxLnNldCggYzIgKiBzMTMsIHMyICogYzFfMywgczIgKiBzMV8zLCBjMiAqIGMxMyApO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdZWlknOlxuXHRcdFx0cS5zZXQoIHMyICogczFfMywgYzIgKiBzMTMsIHMyICogYzFfMywgYzIgKiBjMTMgKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWlhaJzpcblx0XHRcdHEuc2V0KCBzMiAqIGMxXzMsIHMyICogczFfMywgYzIgKiBzMTMsIGMyICogYzEzICk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ1haWCc6XG5cdFx0XHRxLnNldCggYzIgKiBzMTMsIHMyICogczNfMSwgczIgKiBjM18xLCBjMiAqIGMxMyApO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdZWFknOlxuXHRcdFx0cS5zZXQoIHMyICogYzNfMSwgYzIgKiBzMTMsIHMyICogczNfMSwgYzIgKiBjMTMgKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnWllaJzpcblx0XHRcdHEuc2V0KCBzMiAqIHMzXzEsIHMyICogYzNfMSwgYzIgKiBzMTMsIGMyICogYzEzICk7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogJyArIG9yZGVyICk7XG5cblx0fVxuXG59XG5cbnZhciBNYXRoVXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0REVHMlJBRDogREVHMlJBRCxcblx0UkFEMkRFRzogUkFEMkRFRyxcblx0Z2VuZXJhdGVVVUlEOiBnZW5lcmF0ZVVVSUQsXG5cdGNsYW1wOiBjbGFtcCxcblx0ZXVjbGlkZWFuTW9kdWxvOiBldWNsaWRlYW5Nb2R1bG8sXG5cdG1hcExpbmVhcjogbWFwTGluZWFyLFxuXHRpbnZlcnNlTGVycDogaW52ZXJzZUxlcnAsXG5cdGxlcnA6IGxlcnAsXG5cdGRhbXA6IGRhbXAsXG5cdHBpbmdwb25nOiBwaW5ncG9uZyxcblx0c21vb3Roc3RlcDogc21vb3Roc3RlcCxcblx0c21vb3RoZXJzdGVwOiBzbW9vdGhlcnN0ZXAsXG5cdHJhbmRJbnQ6IHJhbmRJbnQsXG5cdHJhbmRGbG9hdDogcmFuZEZsb2F0LFxuXHRyYW5kRmxvYXRTcHJlYWQ6IHJhbmRGbG9hdFNwcmVhZCxcblx0c2VlZGVkUmFuZG9tOiBzZWVkZWRSYW5kb20sXG5cdGRlZ1RvUmFkOiBkZWdUb1JhZCxcblx0cmFkVG9EZWc6IHJhZFRvRGVnLFxuXHRpc1Bvd2VyT2ZUd286IGlzUG93ZXJPZlR3byxcblx0Y2VpbFBvd2VyT2ZUd286IGNlaWxQb3dlck9mVHdvLFxuXHRmbG9vclBvd2VyT2ZUd286IGZsb29yUG93ZXJPZlR3byxcblx0c2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcjogc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlclxufSk7XG5cbmNsYXNzIFZlY3RvcjIge1xuXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cblx0fVxuXG5cdGdldCB3aWR0aCgpIHtcblxuXHRcdHJldHVybiB0aGlzLng7XG5cblx0fVxuXG5cdHNldCB3aWR0aCggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnggPSB2YWx1ZTtcblxuXHR9XG5cblx0Z2V0IGhlaWdodCgpIHtcblxuXHRcdHJldHVybiB0aGlzLnk7XG5cblx0fVxuXG5cdHNldCBoZWlnaHQoIHZhbHVlICkge1xuXG5cdFx0dGhpcy55ID0gdmFsdWU7XG5cblx0fVxuXG5cdHNldCggeCwgeSApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WCggeCApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WSggeSApIHtcblxuXHRcdHRoaXMueSA9IHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Q29tcG9uZW50KCBpbmRleCwgdmFsdWUgKSB7XG5cblx0XHRzd2l0Y2ggKCBpbmRleCApIHtcblxuXHRcdFx0Y2FzZSAwOiB0aGlzLnggPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Q29tcG9uZW50KCBpbmRleCApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHJldHVybiB0aGlzLng7XG5cdFx0XHRjYXNlIDE6IHJldHVybiB0aGlzLnk7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy54LCB0aGlzLnkgKTtcblxuXHR9XG5cblx0Y29weSggdiApIHtcblxuXHRcdHRoaXMueCA9IHYueDtcblx0XHR0aGlzLnkgPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHM7XG5cdFx0dGhpcy55ICs9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKCB2LCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54IC09IHM7XG5cdFx0dGhpcy55IC09IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHkoIHYgKSB7XG5cblx0XHR0aGlzLnggKj0gdi54O1xuXHRcdHRoaXMueSAqPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHlTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXZpZGUoIHYgKSB7XG5cblx0XHR0aGlzLnggLz0gdi54O1xuXHRcdHRoaXMueSAvPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDMoIG0gKSB7XG5cblx0XHRjb25zdCB4ID0gdGhpcy54LCB5ID0gdGhpcy55O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGhpcy54ID0gZVsgMCBdICogeCArIGVbIDMgXSAqIHkgKyBlWyA2IF07XG5cdFx0dGhpcy55ID0gZVsgMSBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA3IF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWluKCB2ICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5taW4oIHRoaXMueCwgdi54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5taW4oIHRoaXMueSwgdi55ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWF4KCB2ICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIHRoaXMueCwgdi54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIHRoaXMueSwgdi55ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXAoIG1pbiwgbWF4ICkge1xuXG5cdFx0Ly8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVudHdpc2VcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCBtaW4ueCwgTWF0aC5taW4oIG1heC54LCB0aGlzLnggKSApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsYW1wU2NhbGFyKCBtaW5WYWwsIG1heFZhbCApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy55ICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcExlbmd0aCggbWluLCBtYXggKSB7XG5cblx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCBsZW5ndGggfHwgMSApLm11bHRpcGx5U2NhbGFyKCBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCBsZW5ndGggKSApICk7XG5cblx0fVxuXG5cdGZsb29yKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2VpbCgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguY2VpbCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyb3VuZCgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGgucm91bmQoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGgucm91bmQoIHRoaXMueSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdW5kVG9aZXJvKCkge1xuXG5cdFx0dGhpcy54ID0gKCB0aGlzLnggPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueCApIDogTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gKCB0aGlzLnkgPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueSApIDogTWF0aC5mbG9vciggdGhpcy55ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bmVnYXRlKCkge1xuXG5cdFx0dGhpcy54ID0gLSB0aGlzLng7XG5cdFx0dGhpcy55ID0gLSB0aGlzLnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZG90KCB2ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueTtcblxuXHR9XG5cblx0Y3Jvc3MoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy54ICogdi55IC0gdGhpcy55ICogdi54O1xuXG5cdH1cblxuXHRsZW5ndGhTcSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnk7XG5cblx0fVxuXG5cdGxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSApO1xuXG5cdH1cblxuXHRtYW5oYXR0YW5MZW5ndGgoKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApO1xuXG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIHRoaXMubGVuZ3RoKCkgfHwgMSApO1xuXG5cdH1cblxuXHRhbmdsZSgpIHtcblxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXG5cblx0XHRjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoIC0gdGhpcy55LCAtIHRoaXMueCApICsgTWF0aC5QSTtcblxuXHRcdHJldHVybiBhbmdsZTtcblxuXHR9XG5cblx0ZGlzdGFuY2VUbyggdiApIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoIHYgKSApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvU3F1YXJlZCggdiApIHtcblxuXHRcdGNvbnN0IGR4ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueTtcblx0XHRyZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG5cblx0fVxuXG5cdG1hbmhhdHRhbkRpc3RhbmNlVG8oIHYgKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCAtIHYueCApICsgTWF0aC5hYnMoIHRoaXMueSAtIHYueSApO1xuXG5cdH1cblxuXHRzZXRMZW5ndGgoIGxlbmd0aCApIHtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBsZW5ndGggKTtcblxuXHR9XG5cblx0bGVycCggdiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGVycFZlY3RvcnMoIHYxLCB2MiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggPSB2MS54ICsgKCB2Mi54IC0gdjEueCApICogYWxwaGE7XG5cdFx0dGhpcy55ID0gdjEueSArICggdjIueSAtIHYxLnkgKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggdiApIHtcblxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdHRoaXMueCA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMueTtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKCBpbmRleCApO1xuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZUFyb3VuZCggY2VudGVyLCBhbmdsZSApIHtcblxuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyggYW5nbGUgKSwgcyA9IE1hdGguc2luKCBhbmdsZSApO1xuXG5cdFx0Y29uc3QgeCA9IHRoaXMueCAtIGNlbnRlci54O1xuXHRcdGNvbnN0IHkgPSB0aGlzLnkgLSBjZW50ZXIueTtcblxuXHRcdHRoaXMueCA9IHggKiBjIC0geSAqIHMgKyBjZW50ZXIueDtcblx0XHR0aGlzLnkgPSB4ICogcyArIHkgKiBjICsgY2VudGVyLnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmFuZG9tKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLnkgPSBNYXRoLnJhbmRvbSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdCpbIFN5bWJvbC5pdGVyYXRvciBdKCkge1xuXG5cdFx0eWllbGQgdGhpcy54O1xuXHRcdHlpZWxkIHRoaXMueTtcblxuXHR9XG5cbn1cblxuVmVjdG9yMi5wcm90b3R5cGUuaXNWZWN0b3IyID0gdHJ1ZTtcblxuY2xhc3MgTWF0cml4MyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLmVsZW1lbnRzID0gW1xuXG5cdFx0XHQxLCAwLCAwLFxuXHRcdFx0MCwgMSwgMCxcblx0XHRcdDAsIDAsIDFcblxuXHRcdF07XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldCggbjExLCBuMTIsIG4xMywgbjIxLCBuMjIsIG4yMywgbjMxLCBuMzIsIG4zMyApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gPSBuMTE7IHRlWyAxIF0gPSBuMjE7IHRlWyAyIF0gPSBuMzE7XG5cdFx0dGVbIDMgXSA9IG4xMjsgdGVbIDQgXSA9IG4yMjsgdGVbIDUgXSA9IG4zMjtcblx0XHR0ZVsgNiBdID0gbjEzOyB0ZVsgNyBdID0gbjIzOyB0ZVsgOCBdID0gbjMzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGlkZW50aXR5KCkge1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdDEsIDAsIDAsXG5cdFx0XHQwLCAxLCAwLFxuXHRcdFx0MCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBtICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gPSBtZVsgMCBdOyB0ZVsgMSBdID0gbWVbIDEgXTsgdGVbIDIgXSA9IG1lWyAyIF07XG5cdFx0dGVbIDMgXSA9IG1lWyAzIF07IHRlWyA0IF0gPSBtZVsgNCBdOyB0ZVsgNSBdID0gbWVbIDUgXTtcblx0XHR0ZVsgNiBdID0gbWVbIDYgXTsgdGVbIDcgXSA9IG1lWyA3IF07IHRlWyA4IF0gPSBtZVsgOCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4dHJhY3RCYXNpcyggeEF4aXMsIHlBeGlzLCB6QXhpcyApIHtcblxuXHRcdHhBeGlzLnNldEZyb21NYXRyaXgzQ29sdW1uKCB0aGlzLCAwICk7XG5cdFx0eUF4aXMuc2V0RnJvbU1hdHJpeDNDb2x1bW4oIHRoaXMsIDEgKTtcblx0XHR6QXhpcy5zZXRGcm9tTWF0cml4M0NvbHVtbiggdGhpcywgMiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21NYXRyaXg0KCBtICkge1xuXG5cdFx0Y29uc3QgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdG1lWyAwIF0sIG1lWyA0IF0sIG1lWyA4IF0sXG5cdFx0XHRtZVsgMSBdLCBtZVsgNSBdLCBtZVsgOSBdLFxuXHRcdFx0bWVbIDIgXSwgbWVbIDYgXSwgbWVbIDEwIF1cblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHkoIG0gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLCBtICk7XG5cblx0fVxuXG5cdHByZW11bHRpcGx5KCBtICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwgdGhpcyApO1xuXG5cdH1cblxuXHRtdWx0aXBseU1hdHJpY2VzKCBhLCBiICkge1xuXG5cdFx0Y29uc3QgYWUgPSBhLmVsZW1lbnRzO1xuXHRcdGNvbnN0IGJlID0gYi5lbGVtZW50cztcblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRjb25zdCBhMTEgPSBhZVsgMCBdLCBhMTIgPSBhZVsgMyBdLCBhMTMgPSBhZVsgNiBdO1xuXHRcdGNvbnN0IGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFlWyA0IF0sIGEyMyA9IGFlWyA3IF07XG5cdFx0Y29uc3QgYTMxID0gYWVbIDIgXSwgYTMyID0gYWVbIDUgXSwgYTMzID0gYWVbIDggXTtcblxuXHRcdGNvbnN0IGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyAzIF0sIGIxMyA9IGJlWyA2IF07XG5cdFx0Y29uc3QgYjIxID0gYmVbIDEgXSwgYjIyID0gYmVbIDQgXSwgYjIzID0gYmVbIDcgXTtcblx0XHRjb25zdCBiMzEgPSBiZVsgMiBdLCBiMzIgPSBiZVsgNSBdLCBiMzMgPSBiZVsgOCBdO1xuXG5cdFx0dGVbIDAgXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMTtcblx0XHR0ZVsgMyBdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICogYjMyO1xuXHRcdHRlWyA2IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzM7XG5cblx0XHR0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxO1xuXHRcdHRlWyA0IF0gPSBhMjEgKiBiMTIgKyBhMjIgKiBiMjIgKyBhMjMgKiBiMzI7XG5cdFx0dGVbIDcgXSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMztcblxuXHRcdHRlWyAyIF0gPSBhMzEgKiBiMTEgKyBhMzIgKiBiMjEgKyBhMzMgKiBiMzE7XG5cdFx0dGVbIDUgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMjtcblx0XHR0ZVsgOCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICogYjMzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKCBzICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSAqPSBzOyB0ZVsgMyBdICo9IHM7IHRlWyA2IF0gKj0gcztcblx0XHR0ZVsgMSBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDcgXSAqPSBzO1xuXHRcdHRlWyAyIF0gKj0gczsgdGVbIDUgXSAqPSBzOyB0ZVsgOCBdICo9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGV0ZXJtaW5hbnQoKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRjb25zdCBhID0gdGVbIDAgXSwgYiA9IHRlWyAxIF0sIGMgPSB0ZVsgMiBdLFxuXHRcdFx0ZCA9IHRlWyAzIF0sIGUgPSB0ZVsgNCBdLCBmID0gdGVbIDUgXSxcblx0XHRcdGcgPSB0ZVsgNiBdLCBoID0gdGVbIDcgXSwgaSA9IHRlWyA4IF07XG5cblx0XHRyZXR1cm4gYSAqIGUgKiBpIC0gYSAqIGYgKiBoIC0gYiAqIGQgKiBpICsgYiAqIGYgKiBnICsgYyAqIGQgKiBoIC0gYyAqIGUgKiBnO1xuXG5cdH1cblxuXHRpbnZlcnQoKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHMsXG5cblx0XHRcdG4xMSA9IHRlWyAwIF0sIG4yMSA9IHRlWyAxIF0sIG4zMSA9IHRlWyAyIF0sXG5cdFx0XHRuMTIgPSB0ZVsgMyBdLCBuMjIgPSB0ZVsgNCBdLCBuMzIgPSB0ZVsgNSBdLFxuXHRcdFx0bjEzID0gdGVbIDYgXSwgbjIzID0gdGVbIDcgXSwgbjMzID0gdGVbIDggXSxcblxuXHRcdFx0dDExID0gbjMzICogbjIyIC0gbjMyICogbjIzLFxuXHRcdFx0dDEyID0gbjMyICogbjEzIC0gbjMzICogbjEyLFxuXHRcdFx0dDEzID0gbjIzICogbjEyIC0gbjIyICogbjEzLFxuXG5cdFx0XHRkZXQgPSBuMTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTM7XG5cblx0XHRpZiAoIGRldCA9PT0gMCApIHJldHVybiB0aGlzLnNldCggMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCApO1xuXG5cdFx0Y29uc3QgZGV0SW52ID0gMSAvIGRldDtcblxuXHRcdHRlWyAwIF0gPSB0MTEgKiBkZXRJbnY7XG5cdFx0dGVbIDEgXSA9ICggbjMxICogbjIzIC0gbjMzICogbjIxICkgKiBkZXRJbnY7XG5cdFx0dGVbIDIgXSA9ICggbjMyICogbjIxIC0gbjMxICogbjIyICkgKiBkZXRJbnY7XG5cblx0XHR0ZVsgMyBdID0gdDEyICogZGV0SW52O1xuXHRcdHRlWyA0IF0gPSAoIG4zMyAqIG4xMSAtIG4zMSAqIG4xMyApICogZGV0SW52O1xuXHRcdHRlWyA1IF0gPSAoIG4zMSAqIG4xMiAtIG4zMiAqIG4xMSApICogZGV0SW52O1xuXG5cdFx0dGVbIDYgXSA9IHQxMyAqIGRldEludjtcblx0XHR0ZVsgNyBdID0gKCBuMjEgKiBuMTMgLSBuMjMgKiBuMTEgKSAqIGRldEludjtcblx0XHR0ZVsgOCBdID0gKCBuMjIgKiBuMTEgLSBuMjEgKiBuMTIgKSAqIGRldEludjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc3Bvc2UoKSB7XG5cblx0XHRsZXQgdG1wO1xuXHRcdGNvbnN0IG0gPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dG1wID0gbVsgMSBdOyBtWyAxIF0gPSBtWyAzIF07IG1bIDMgXSA9IHRtcDtcblx0XHR0bXAgPSBtWyAyIF07IG1bIDIgXSA9IG1bIDYgXTsgbVsgNiBdID0gdG1wO1xuXHRcdHRtcCA9IG1bIDUgXTsgbVsgNSBdID0gbVsgNyBdOyBtWyA3IF0gPSB0bXA7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Tm9ybWFsTWF0cml4KCBtYXRyaXg0ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQoIG1hdHJpeDQgKS5pbnZlcnQoKS50cmFuc3Bvc2UoKTtcblxuXHR9XG5cblx0dHJhbnNwb3NlSW50b0FycmF5KCByICkge1xuXG5cdFx0Y29uc3QgbSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRyWyAwIF0gPSBtWyAwIF07XG5cdFx0clsgMSBdID0gbVsgMyBdO1xuXHRcdHJbIDIgXSA9IG1bIDYgXTtcblx0XHRyWyAzIF0gPSBtWyAxIF07XG5cdFx0clsgNCBdID0gbVsgNCBdO1xuXHRcdHJbIDUgXSA9IG1bIDcgXTtcblx0XHRyWyA2IF0gPSBtWyAyIF07XG5cdFx0clsgNyBdID0gbVsgNSBdO1xuXHRcdHJbIDggXSA9IG1bIDggXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRVdlRyYW5zZm9ybSggdHgsIHR5LCBzeCwgc3ksIHJvdGF0aW9uLCBjeCwgY3kgKSB7XG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIHJvdGF0aW9uICk7XG5cdFx0Y29uc3QgcyA9IE1hdGguc2luKCByb3RhdGlvbiApO1xuXG5cdFx0dGhpcy5zZXQoXG5cdFx0XHRzeCAqIGMsIHN4ICogcywgLSBzeCAqICggYyAqIGN4ICsgcyAqIGN5ICkgKyBjeCArIHR4LFxuXHRcdFx0LSBzeSAqIHMsIHN5ICogYywgLSBzeSAqICggLSBzICogY3ggKyBjICogY3kgKSArIGN5ICsgdHksXG5cdFx0XHQwLCAwLCAxXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzY2FsZSggc3gsIHN5ICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSAqPSBzeDsgdGVbIDMgXSAqPSBzeDsgdGVbIDYgXSAqPSBzeDtcblx0XHR0ZVsgMSBdICo9IHN5OyB0ZVsgNCBdICo9IHN5OyB0ZVsgNyBdICo9IHN5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZSggdGhldGEgKSB7XG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIHRoZXRhICk7XG5cdFx0Y29uc3QgcyA9IE1hdGguc2luKCB0aGV0YSApO1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0Y29uc3QgYTExID0gdGVbIDAgXSwgYTEyID0gdGVbIDMgXSwgYTEzID0gdGVbIDYgXTtcblx0XHRjb25zdCBhMjEgPSB0ZVsgMSBdLCBhMjIgPSB0ZVsgNCBdLCBhMjMgPSB0ZVsgNyBdO1xuXG5cdFx0dGVbIDAgXSA9IGMgKiBhMTEgKyBzICogYTIxO1xuXHRcdHRlWyAzIF0gPSBjICogYTEyICsgcyAqIGEyMjtcblx0XHR0ZVsgNiBdID0gYyAqIGExMyArIHMgKiBhMjM7XG5cblx0XHR0ZVsgMSBdID0gLSBzICogYTExICsgYyAqIGEyMTtcblx0XHR0ZVsgNCBdID0gLSBzICogYTEyICsgYyAqIGEyMjtcblx0XHR0ZVsgNyBdID0gLSBzICogYTEzICsgYyAqIGEyMztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2xhdGUoIHR4LCB0eSApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gKz0gdHggKiB0ZVsgMiBdOyB0ZVsgMyBdICs9IHR4ICogdGVbIDUgXTsgdGVbIDYgXSArPSB0eCAqIHRlWyA4IF07XG5cdFx0dGVbIDEgXSArPSB0eSAqIHRlWyAyIF07IHRlWyA0IF0gKz0gdHkgKiB0ZVsgNSBdOyB0ZVsgNyBdICs9IHR5ICogdGVbIDggXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIG1hdHJpeCApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBtZSA9IG1hdHJpeC5lbGVtZW50cztcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdGlmICggdGVbIGkgXSAhPT0gbWVbIGkgXSApIHJldHVybiBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5lbGVtZW50c1sgaSBdID0gYXJyYXlbIGkgKyBvZmZzZXQgXTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0FycmF5KCBhcnJheSA9IFtdLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0YXJyYXlbIG9mZnNldCBdID0gdGVbIDAgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGVbIDEgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGVbIDIgXTtcblxuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0ZVsgMyBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA0IF0gPSB0ZVsgNCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA1IF0gPSB0ZVsgNSBdO1xuXG5cdFx0YXJyYXlbIG9mZnNldCArIDYgXSA9IHRlWyA2IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDcgXSA9IHRlWyA3IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDggXSA9IHRlWyA4IF07XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7XG5cblx0fVxuXG59XG5cbk1hdHJpeDMucHJvdG90eXBlLmlzTWF0cml4MyA9IHRydWU7XG5cbmZ1bmN0aW9uIGFycmF5TmVlZHNVaW50MzIoIGFycmF5ICkge1xuXG5cdC8vIGFzc3VtZXMgbGFyZ2VyIHZhbHVlcyB1c3VhbGx5IG9uIGxhc3RcblxuXHRmb3IgKCBsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS0gaSApIHtcblxuXHRcdGlmICggYXJyYXlbIGkgXSA+IDY1NTM1ICkgcmV0dXJuIHRydWU7XG5cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcblxufVxuXG5jb25zdCBUWVBFRF9BUlJBWVMgPSB7XG5cdEludDhBcnJheTogSW50OEFycmF5LFxuXHRVaW50OEFycmF5OiBVaW50OEFycmF5LFxuXHRVaW50OENsYW1wZWRBcnJheTogVWludDhDbGFtcGVkQXJyYXksXG5cdEludDE2QXJyYXk6IEludDE2QXJyYXksXG5cdFVpbnQxNkFycmF5OiBVaW50MTZBcnJheSxcblx0SW50MzJBcnJheTogSW50MzJBcnJheSxcblx0VWludDMyQXJyYXk6IFVpbnQzMkFycmF5LFxuXHRGbG9hdDMyQXJyYXk6IEZsb2F0MzJBcnJheSxcblx0RmxvYXQ2NEFycmF5OiBGbG9hdDY0QXJyYXlcbn07XG5cbmZ1bmN0aW9uIGdldFR5cGVkQXJyYXkoIHR5cGUsIGJ1ZmZlciApIHtcblxuXHRyZXR1cm4gbmV3IFRZUEVEX0FSUkFZU1sgdHlwZSBdKCBidWZmZXIgKTtcblxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMoIG5hbWUgKSB7XG5cblx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCBuYW1lICk7XG5cbn1cblxuY29uc3QgX2NvbG9yS2V5d29yZHMgPSB7ICdhbGljZWJsdWUnOiAweEYwRjhGRiwgJ2FudGlxdWV3aGl0ZSc6IDB4RkFFQkQ3LCAnYXF1YSc6IDB4MDBGRkZGLCAnYXF1YW1hcmluZSc6IDB4N0ZGRkQ0LCAnYXp1cmUnOiAweEYwRkZGRixcblx0J2JlaWdlJzogMHhGNUY1REMsICdiaXNxdWUnOiAweEZGRTRDNCwgJ2JsYWNrJzogMHgwMDAwMDAsICdibGFuY2hlZGFsbW9uZCc6IDB4RkZFQkNELCAnYmx1ZSc6IDB4MDAwMEZGLCAnYmx1ZXZpb2xldCc6IDB4OEEyQkUyLFxuXHQnYnJvd24nOiAweEE1MkEyQSwgJ2J1cmx5d29vZCc6IDB4REVCODg3LCAnY2FkZXRibHVlJzogMHg1RjlFQTAsICdjaGFydHJldXNlJzogMHg3RkZGMDAsICdjaG9jb2xhdGUnOiAweEQyNjkxRSwgJ2NvcmFsJzogMHhGRjdGNTAsXG5cdCdjb3JuZmxvd2VyYmx1ZSc6IDB4NjQ5NUVELCAnY29ybnNpbGsnOiAweEZGRjhEQywgJ2NyaW1zb24nOiAweERDMTQzQywgJ2N5YW4nOiAweDAwRkZGRiwgJ2RhcmtibHVlJzogMHgwMDAwOEIsICdkYXJrY3lhbic6IDB4MDA4QjhCLFxuXHQnZGFya2dvbGRlbnJvZCc6IDB4Qjg4NjBCLCAnZGFya2dyYXknOiAweEE5QTlBOSwgJ2RhcmtncmVlbic6IDB4MDA2NDAwLCAnZGFya2dyZXknOiAweEE5QTlBOSwgJ2RhcmtraGFraSc6IDB4QkRCNzZCLCAnZGFya21hZ2VudGEnOiAweDhCMDA4Qixcblx0J2RhcmtvbGl2ZWdyZWVuJzogMHg1NTZCMkYsICdkYXJrb3JhbmdlJzogMHhGRjhDMDAsICdkYXJrb3JjaGlkJzogMHg5OTMyQ0MsICdkYXJrcmVkJzogMHg4QjAwMDAsICdkYXJrc2FsbW9uJzogMHhFOTk2N0EsICdkYXJrc2VhZ3JlZW4nOiAweDhGQkM4Rixcblx0J2RhcmtzbGF0ZWJsdWUnOiAweDQ4M0Q4QiwgJ2RhcmtzbGF0ZWdyYXknOiAweDJGNEY0RiwgJ2RhcmtzbGF0ZWdyZXknOiAweDJGNEY0RiwgJ2Rhcmt0dXJxdW9pc2UnOiAweDAwQ0VEMSwgJ2Rhcmt2aW9sZXQnOiAweDk0MDBEMyxcblx0J2RlZXBwaW5rJzogMHhGRjE0OTMsICdkZWVwc2t5Ymx1ZSc6IDB4MDBCRkZGLCAnZGltZ3JheSc6IDB4Njk2OTY5LCAnZGltZ3JleSc6IDB4Njk2OTY5LCAnZG9kZ2VyYmx1ZSc6IDB4MUU5MEZGLCAnZmlyZWJyaWNrJzogMHhCMjIyMjIsXG5cdCdmbG9yYWx3aGl0ZSc6IDB4RkZGQUYwLCAnZm9yZXN0Z3JlZW4nOiAweDIyOEIyMiwgJ2Z1Y2hzaWEnOiAweEZGMDBGRiwgJ2dhaW5zYm9ybyc6IDB4RENEQ0RDLCAnZ2hvc3R3aGl0ZSc6IDB4RjhGOEZGLCAnZ29sZCc6IDB4RkZENzAwLFxuXHQnZ29sZGVucm9kJzogMHhEQUE1MjAsICdncmF5JzogMHg4MDgwODAsICdncmVlbic6IDB4MDA4MDAwLCAnZ3JlZW55ZWxsb3cnOiAweEFERkYyRiwgJ2dyZXknOiAweDgwODA4MCwgJ2hvbmV5ZGV3JzogMHhGMEZGRjAsICdob3RwaW5rJzogMHhGRjY5QjQsXG5cdCdpbmRpYW5yZWQnOiAweENENUM1QywgJ2luZGlnbyc6IDB4NEIwMDgyLCAnaXZvcnknOiAweEZGRkZGMCwgJ2toYWtpJzogMHhGMEU2OEMsICdsYXZlbmRlcic6IDB4RTZFNkZBLCAnbGF2ZW5kZXJibHVzaCc6IDB4RkZGMEY1LCAnbGF3bmdyZWVuJzogMHg3Q0ZDMDAsXG5cdCdsZW1vbmNoaWZmb24nOiAweEZGRkFDRCwgJ2xpZ2h0Ymx1ZSc6IDB4QUREOEU2LCAnbGlnaHRjb3JhbCc6IDB4RjA4MDgwLCAnbGlnaHRjeWFuJzogMHhFMEZGRkYsICdsaWdodGdvbGRlbnJvZHllbGxvdyc6IDB4RkFGQUQyLCAnbGlnaHRncmF5JzogMHhEM0QzRDMsXG5cdCdsaWdodGdyZWVuJzogMHg5MEVFOTAsICdsaWdodGdyZXknOiAweEQzRDNEMywgJ2xpZ2h0cGluayc6IDB4RkZCNkMxLCAnbGlnaHRzYWxtb24nOiAweEZGQTA3QSwgJ2xpZ2h0c2VhZ3JlZW4nOiAweDIwQjJBQSwgJ2xpZ2h0c2t5Ymx1ZSc6IDB4ODdDRUZBLFxuXHQnbGlnaHRzbGF0ZWdyYXknOiAweDc3ODg5OSwgJ2xpZ2h0c2xhdGVncmV5JzogMHg3Nzg4OTksICdsaWdodHN0ZWVsYmx1ZSc6IDB4QjBDNERFLCAnbGlnaHR5ZWxsb3cnOiAweEZGRkZFMCwgJ2xpbWUnOiAweDAwRkYwMCwgJ2xpbWVncmVlbic6IDB4MzJDRDMyLFxuXHQnbGluZW4nOiAweEZBRjBFNiwgJ21hZ2VudGEnOiAweEZGMDBGRiwgJ21hcm9vbic6IDB4ODAwMDAwLCAnbWVkaXVtYXF1YW1hcmluZSc6IDB4NjZDREFBLCAnbWVkaXVtYmx1ZSc6IDB4MDAwMENELCAnbWVkaXVtb3JjaGlkJzogMHhCQTU1RDMsXG5cdCdtZWRpdW1wdXJwbGUnOiAweDkzNzBEQiwgJ21lZGl1bXNlYWdyZWVuJzogMHgzQ0IzNzEsICdtZWRpdW1zbGF0ZWJsdWUnOiAweDdCNjhFRSwgJ21lZGl1bXNwcmluZ2dyZWVuJzogMHgwMEZBOUEsICdtZWRpdW10dXJxdW9pc2UnOiAweDQ4RDFDQyxcblx0J21lZGl1bXZpb2xldHJlZCc6IDB4QzcxNTg1LCAnbWlkbmlnaHRibHVlJzogMHgxOTE5NzAsICdtaW50Y3JlYW0nOiAweEY1RkZGQSwgJ21pc3R5cm9zZSc6IDB4RkZFNEUxLCAnbW9jY2FzaW4nOiAweEZGRTRCNSwgJ25hdmFqb3doaXRlJzogMHhGRkRFQUQsXG5cdCduYXZ5JzogMHgwMDAwODAsICdvbGRsYWNlJzogMHhGREY1RTYsICdvbGl2ZSc6IDB4ODA4MDAwLCAnb2xpdmVkcmFiJzogMHg2QjhFMjMsICdvcmFuZ2UnOiAweEZGQTUwMCwgJ29yYW5nZXJlZCc6IDB4RkY0NTAwLCAnb3JjaGlkJzogMHhEQTcwRDYsXG5cdCdwYWxlZ29sZGVucm9kJzogMHhFRUU4QUEsICdwYWxlZ3JlZW4nOiAweDk4RkI5OCwgJ3BhbGV0dXJxdW9pc2UnOiAweEFGRUVFRSwgJ3BhbGV2aW9sZXRyZWQnOiAweERCNzA5MywgJ3BhcGF5YXdoaXAnOiAweEZGRUZENSwgJ3BlYWNocHVmZic6IDB4RkZEQUI5LFxuXHQncGVydSc6IDB4Q0Q4NTNGLCAncGluayc6IDB4RkZDMENCLCAncGx1bSc6IDB4RERBMERELCAncG93ZGVyYmx1ZSc6IDB4QjBFMEU2LCAncHVycGxlJzogMHg4MDAwODAsICdyZWJlY2NhcHVycGxlJzogMHg2NjMzOTksICdyZWQnOiAweEZGMDAwMCwgJ3Jvc3licm93bic6IDB4QkM4RjhGLFxuXHQncm95YWxibHVlJzogMHg0MTY5RTEsICdzYWRkbGVicm93bic6IDB4OEI0NTEzLCAnc2FsbW9uJzogMHhGQTgwNzIsICdzYW5keWJyb3duJzogMHhGNEE0NjAsICdzZWFncmVlbic6IDB4MkU4QjU3LCAnc2Vhc2hlbGwnOiAweEZGRjVFRSxcblx0J3NpZW5uYSc6IDB4QTA1MjJELCAnc2lsdmVyJzogMHhDMEMwQzAsICdza3libHVlJzogMHg4N0NFRUIsICdzbGF0ZWJsdWUnOiAweDZBNUFDRCwgJ3NsYXRlZ3JheSc6IDB4NzA4MDkwLCAnc2xhdGVncmV5JzogMHg3MDgwOTAsICdzbm93JzogMHhGRkZBRkEsXG5cdCdzcHJpbmdncmVlbic6IDB4MDBGRjdGLCAnc3RlZWxibHVlJzogMHg0NjgyQjQsICd0YW4nOiAweEQyQjQ4QywgJ3RlYWwnOiAweDAwODA4MCwgJ3RoaXN0bGUnOiAweEQ4QkZEOCwgJ3RvbWF0byc6IDB4RkY2MzQ3LCAndHVycXVvaXNlJzogMHg0MEUwRDAsXG5cdCd2aW9sZXQnOiAweEVFODJFRSwgJ3doZWF0JzogMHhGNURFQjMsICd3aGl0ZSc6IDB4RkZGRkZGLCAnd2hpdGVzbW9rZSc6IDB4RjVGNUY1LCAneWVsbG93JzogMHhGRkZGMDAsICd5ZWxsb3dncmVlbic6IDB4OUFDRDMyIH07XG5cbmNvbnN0IF9oc2xBID0geyBoOiAwLCBzOiAwLCBsOiAwIH07XG5jb25zdCBfaHNsQiA9IHsgaDogMCwgczogMCwgbDogMCB9O1xuXG5mdW5jdGlvbiBodWUycmdiKCBwLCBxLCB0ICkge1xuXG5cdGlmICggdCA8IDAgKSB0ICs9IDE7XG5cdGlmICggdCA+IDEgKSB0IC09IDE7XG5cdGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcblx0aWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcblx0aWYgKCB0IDwgMiAvIDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApO1xuXHRyZXR1cm4gcDtcblxufVxuXG5mdW5jdGlvbiBTUkdCVG9MaW5lYXIoIGMgKSB7XG5cblx0cmV0dXJuICggYyA8IDAuMDQwNDUgKSA/IGMgKiAwLjA3NzM5OTM4MDggOiBNYXRoLnBvdyggYyAqIDAuOTQ3ODY3Mjk4NiArIDAuMDUyMTMyNzAxNCwgMi40ICk7XG5cbn1cblxuZnVuY3Rpb24gTGluZWFyVG9TUkdCKCBjICkge1xuXG5cdHJldHVybiAoIGMgPCAwLjAwMzEzMDggKSA/IGMgKiAxMi45MiA6IDEuMDU1ICogKCBNYXRoLnBvdyggYywgMC40MTY2NiApICkgLSAwLjA1NTtcblxufVxuXG5jbGFzcyBDb2xvciB7XG5cblx0Y29uc3RydWN0b3IoIHIsIGcsIGIgKSB7XG5cblx0XHRpZiAoIGcgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIHIgaXMgVEhSRUUuQ29sb3IsIGhleCBvciBzdHJpbmdcblx0XHRcdHJldHVybiB0aGlzLnNldCggciApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc2V0UkdCKCByLCBnLCBiICk7XG5cblx0fVxuXG5cdHNldCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlICYmIHZhbHVlLmlzQ29sb3IgKSB7XG5cblx0XHRcdHRoaXMuY29weSggdmFsdWUgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgKSB7XG5cblx0XHRcdHRoaXMuc2V0SGV4KCB2YWx1ZSApO1xuXG5cdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyApIHtcblxuXHRcdFx0dGhpcy5zZXRTdHlsZSggdmFsdWUgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRTY2FsYXIoIHNjYWxhciApIHtcblxuXHRcdHRoaXMuciA9IHNjYWxhcjtcblx0XHR0aGlzLmcgPSBzY2FsYXI7XG5cdFx0dGhpcy5iID0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEhleCggaGV4ICkge1xuXG5cdFx0aGV4ID0gTWF0aC5mbG9vciggaGV4ICk7XG5cblx0XHR0aGlzLnIgPSAoIGhleCA+PiAxNiAmIDI1NSApIC8gMjU1O1xuXHRcdHRoaXMuZyA9ICggaGV4ID4+IDggJiAyNTUgKSAvIDI1NTtcblx0XHR0aGlzLmIgPSAoIGhleCAmIDI1NSApIC8gMjU1O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFJHQiggciwgZywgYiApIHtcblxuXHRcdHRoaXMuciA9IHI7XG5cdFx0dGhpcy5nID0gZztcblx0XHR0aGlzLmIgPSBiO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEhTTCggaCwgcywgbCApIHtcblxuXHRcdC8vIGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wXG5cdFx0aCA9IGV1Y2xpZGVhbk1vZHVsbyggaCwgMSApO1xuXHRcdHMgPSBjbGFtcCggcywgMCwgMSApO1xuXHRcdGwgPSBjbGFtcCggbCwgMCwgMSApO1xuXG5cdFx0aWYgKCBzID09PSAwICkge1xuXG5cdFx0XHR0aGlzLnIgPSB0aGlzLmcgPSB0aGlzLmIgPSBsO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgcCA9IGwgPD0gMC41ID8gbCAqICggMSArIHMgKSA6IGwgKyBzIC0gKCBsICogcyApO1xuXHRcdFx0Y29uc3QgcSA9ICggMiAqIGwgKSAtIHA7XG5cblx0XHRcdHRoaXMuciA9IGh1ZTJyZ2IoIHEsIHAsIGggKyAxIC8gMyApO1xuXHRcdFx0dGhpcy5nID0gaHVlMnJnYiggcSwgcCwgaCApO1xuXHRcdFx0dGhpcy5iID0gaHVlMnJnYiggcSwgcCwgaCAtIDEgLyAzICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0U3R5bGUoIHN0eWxlICkge1xuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlQWxwaGEoIHN0cmluZyApIHtcblxuXHRcdFx0aWYgKCBzdHJpbmcgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdFx0aWYgKCBwYXJzZUZsb2F0KCBzdHJpbmcgKSA8IDEgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAnICsgc3R5bGUgKyAnIHdpbGwgYmUgaWdub3JlZC4nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXG5cdFx0bGV0IG07XG5cblx0XHRpZiAoIG0gPSAvXigoPzpyZ2J8aHNsKWE/KVxcKChbXlxcKV0qKVxcKS8uZXhlYyggc3R5bGUgKSApIHtcblxuXHRcdFx0Ly8gcmdiIC8gaHNsXG5cblx0XHRcdGxldCBjb2xvcjtcblx0XHRcdGNvbnN0IG5hbWUgPSBtWyAxIF07XG5cdFx0XHRjb25zdCBjb21wb25lbnRzID0gbVsgMiBdO1xuXG5cdFx0XHRzd2l0Y2ggKCBuYW1lICkge1xuXG5cdFx0XHRcdGNhc2UgJ3JnYic6XG5cdFx0XHRcdGNhc2UgJ3JnYmEnOlxuXG5cdFx0XHRcdFx0aWYgKCBjb2xvciA9IC9eXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyooPzosXFxzKihcXGQqXFwuP1xcZCspXFxzKik/JC8uZXhlYyggY29tcG9uZW50cyApICkge1xuXG5cdFx0XHRcdFx0XHQvLyByZ2IoMjU1LDAsMCkgcmdiYSgyNTUsMCwwLDAuNSlcblx0XHRcdFx0XHRcdHRoaXMuciA9IE1hdGgubWluKCAyNTUsIHBhcnNlSW50KCBjb2xvclsgMSBdLCAxMCApICkgLyAyNTU7XG5cdFx0XHRcdFx0XHR0aGlzLmcgPSBNYXRoLm1pbiggMjU1LCBwYXJzZUludCggY29sb3JbIDIgXSwgMTAgKSApIC8gMjU1O1xuXHRcdFx0XHRcdFx0dGhpcy5iID0gTWF0aC5taW4oIDI1NSwgcGFyc2VJbnQoIGNvbG9yWyAzIF0sIDEwICkgKSAvIDI1NTtcblxuXHRcdFx0XHRcdFx0aGFuZGxlQWxwaGEoIGNvbG9yWyA0IF0gKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGNvbG9yID0gL15cXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHJnYigxMDAlLDAlLDAlKSByZ2JhKDEwMCUsMCUsMCUsMC41KVxuXHRcdFx0XHRcdFx0dGhpcy5yID0gTWF0aC5taW4oIDEwMCwgcGFyc2VJbnQoIGNvbG9yWyAxIF0sIDEwICkgKSAvIDEwMDtcblx0XHRcdFx0XHRcdHRoaXMuZyA9IE1hdGgubWluKCAxMDAsIHBhcnNlSW50KCBjb2xvclsgMiBdLCAxMCApICkgLyAxMDA7XG5cdFx0XHRcdFx0XHR0aGlzLmIgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29sb3JbIDMgXSwgMTAgKSApIC8gMTAwO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVBbHBoYSggY29sb3JbIDQgXSApO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ2hzbCc6XG5cdFx0XHRcdGNhc2UgJ2hzbGEnOlxuXG5cdFx0XHRcdFx0aWYgKCBjb2xvciA9IC9eXFxzKihcXGQqXFwuP1xcZCspXFxzKixcXHMqKFxcZCspXFwlXFxzKixcXHMqKFxcZCspXFwlXFxzKig/OixcXHMqKFxcZCpcXC4/XFxkKylcXHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGhzbCgxMjAsNTAlLDUwJSkgaHNsYSgxMjAsNTAlLDUwJSwwLjUpXG5cdFx0XHRcdFx0XHRjb25zdCBoID0gcGFyc2VGbG9hdCggY29sb3JbIDEgXSApIC8gMzYwO1xuXHRcdFx0XHRcdFx0Y29uc3QgcyA9IHBhcnNlSW50KCBjb2xvclsgMiBdLCAxMCApIC8gMTAwO1xuXHRcdFx0XHRcdFx0Y29uc3QgbCA9IHBhcnNlSW50KCBjb2xvclsgMyBdLCAxMCApIC8gMTAwO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVBbHBoYSggY29sb3JbIDQgXSApO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRIU0woIGgsIHMsIGwgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtID0gL15cXCMoW0EtRmEtZlxcZF0rKSQvLmV4ZWMoIHN0eWxlICkgKSB7XG5cblx0XHRcdC8vIGhleCBjb2xvclxuXG5cdFx0XHRjb25zdCBoZXggPSBtWyAxIF07XG5cdFx0XHRjb25zdCBzaXplID0gaGV4Lmxlbmd0aDtcblxuXHRcdFx0aWYgKCBzaXplID09PSAzICkge1xuXG5cdFx0XHRcdC8vICNmZjBcblx0XHRcdFx0dGhpcy5yID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDAgKSArIGhleC5jaGFyQXQoIDAgKSwgMTYgKSAvIDI1NTtcblx0XHRcdFx0dGhpcy5nID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDEgKSArIGhleC5jaGFyQXQoIDEgKSwgMTYgKSAvIDI1NTtcblx0XHRcdFx0dGhpcy5iID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDIgKSArIGhleC5jaGFyQXQoIDIgKSwgMTYgKSAvIDI1NTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0fSBlbHNlIGlmICggc2l6ZSA9PT0gNiApIHtcblxuXHRcdFx0XHQvLyAjZmYwMDAwXG5cdFx0XHRcdHRoaXMuciA9IHBhcnNlSW50KCBoZXguY2hhckF0KCAwICkgKyBoZXguY2hhckF0KCAxICksIDE2ICkgLyAyNTU7XG5cdFx0XHRcdHRoaXMuZyA9IHBhcnNlSW50KCBoZXguY2hhckF0KCAyICkgKyBoZXguY2hhckF0KCAzICksIDE2ICkgLyAyNTU7XG5cdFx0XHRcdHRoaXMuYiA9IHBhcnNlSW50KCBoZXguY2hhckF0KCA0ICkgKyBoZXguY2hhckF0KCA1ICksIDE2ICkgLyAyNTU7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggc3R5bGUgJiYgc3R5bGUubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuc2V0Q29sb3JOYW1lKCBzdHlsZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldENvbG9yTmFtZSggc3R5bGUgKSB7XG5cblx0XHQvLyBjb2xvciBrZXl3b3Jkc1xuXHRcdGNvbnN0IGhleCA9IF9jb2xvcktleXdvcmRzWyBzdHlsZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRpZiAoIGhleCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyByZWRcblx0XHRcdHRoaXMuc2V0SGV4KCBoZXggKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHVua25vd24gY29sb3Jcblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICcgKyBzdHlsZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLnIsIHRoaXMuZywgdGhpcy5iICk7XG5cblx0fVxuXG5cdGNvcHkoIGNvbG9yICkge1xuXG5cdFx0dGhpcy5yID0gY29sb3Iucjtcblx0XHR0aGlzLmcgPSBjb2xvci5nO1xuXHRcdHRoaXMuYiA9IGNvbG9yLmI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weVNSR0JUb0xpbmVhciggY29sb3IgKSB7XG5cblx0XHR0aGlzLnIgPSBTUkdCVG9MaW5lYXIoIGNvbG9yLnIgKTtcblx0XHR0aGlzLmcgPSBTUkdCVG9MaW5lYXIoIGNvbG9yLmcgKTtcblx0XHR0aGlzLmIgPSBTUkdCVG9MaW5lYXIoIGNvbG9yLmIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5TGluZWFyVG9TUkdCKCBjb2xvciApIHtcblxuXHRcdHRoaXMuciA9IExpbmVhclRvU1JHQiggY29sb3IuciApO1xuXHRcdHRoaXMuZyA9IExpbmVhclRvU1JHQiggY29sb3IuZyApO1xuXHRcdHRoaXMuYiA9IExpbmVhclRvU1JHQiggY29sb3IuYiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvbnZlcnRTUkdCVG9MaW5lYXIoKSB7XG5cblx0XHR0aGlzLmNvcHlTUkdCVG9MaW5lYXIoIHRoaXMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb252ZXJ0TGluZWFyVG9TUkdCKCkge1xuXG5cdFx0dGhpcy5jb3B5TGluZWFyVG9TUkdCKCB0aGlzICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0SGV4KCkge1xuXG5cdFx0cmV0dXJuICggdGhpcy5yICogMjU1ICkgPDwgMTYgXiAoIHRoaXMuZyAqIDI1NSApIDw8IDggXiAoIHRoaXMuYiAqIDI1NSApIDw8IDA7XG5cblx0fVxuXG5cdGdldEhleFN0cmluZygpIHtcblxuXHRcdHJldHVybiAoICcwMDAwMDAnICsgdGhpcy5nZXRIZXgoKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtIDYgKTtcblxuXHR9XG5cblx0Z2V0SFNMKCB0YXJnZXQgKSB7XG5cblx0XHQvLyBoLHMsbCByYW5nZXMgYXJlIGluIDAuMCAtIDEuMFxuXG5cdFx0Y29uc3QgciA9IHRoaXMuciwgZyA9IHRoaXMuZywgYiA9IHRoaXMuYjtcblxuXHRcdGNvbnN0IG1heCA9IE1hdGgubWF4KCByLCBnLCBiICk7XG5cdFx0Y29uc3QgbWluID0gTWF0aC5taW4oIHIsIGcsIGIgKTtcblxuXHRcdGxldCBodWUsIHNhdHVyYXRpb247XG5cdFx0Y29uc3QgbGlnaHRuZXNzID0gKCBtaW4gKyBtYXggKSAvIDIuMDtcblxuXHRcdGlmICggbWluID09PSBtYXggKSB7XG5cblx0XHRcdGh1ZSA9IDA7XG5cdFx0XHRzYXR1cmF0aW9uID0gMDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXG5cdFx0XHRzYXR1cmF0aW9uID0gbGlnaHRuZXNzIDw9IDAuNSA/IGRlbHRhIC8gKCBtYXggKyBtaW4gKSA6IGRlbHRhIC8gKCAyIC0gbWF4IC0gbWluICk7XG5cblx0XHRcdHN3aXRjaCAoIG1heCApIHtcblxuXHRcdFx0XHRjYXNlIHI6IGh1ZSA9ICggZyAtIGIgKSAvIGRlbHRhICsgKCBnIDwgYiA/IDYgOiAwICk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIGc6IGh1ZSA9ICggYiAtIHIgKSAvIGRlbHRhICsgMjsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgYjogaHVlID0gKCByIC0gZyApIC8gZGVsdGEgKyA0OyBicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRodWUgLz0gNjtcblxuXHRcdH1cblxuXHRcdHRhcmdldC5oID0gaHVlO1xuXHRcdHRhcmdldC5zID0gc2F0dXJhdGlvbjtcblx0XHR0YXJnZXQubCA9IGxpZ2h0bmVzcztcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGdldFN0eWxlKCkge1xuXG5cdFx0cmV0dXJuICdyZ2IoJyArICggKCB0aGlzLnIgKiAyNTUgKSB8IDAgKSArICcsJyArICggKCB0aGlzLmcgKiAyNTUgKSB8IDAgKSArICcsJyArICggKCB0aGlzLmIgKiAyNTUgKSB8IDAgKSArICcpJztcblxuXHR9XG5cblx0b2Zmc2V0SFNMKCBoLCBzLCBsICkge1xuXG5cdFx0dGhpcy5nZXRIU0woIF9oc2xBICk7XG5cblx0XHRfaHNsQS5oICs9IGg7IF9oc2xBLnMgKz0gczsgX2hzbEEubCArPSBsO1xuXG5cdFx0dGhpcy5zZXRIU0woIF9oc2xBLmgsIF9oc2xBLnMsIF9oc2xBLmwgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGQoIGNvbG9yICkge1xuXG5cdFx0dGhpcy5yICs9IGNvbG9yLnI7XG5cdFx0dGhpcy5nICs9IGNvbG9yLmc7XG5cdFx0dGhpcy5iICs9IGNvbG9yLmI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkQ29sb3JzKCBjb2xvcjEsIGNvbG9yMiApIHtcblxuXHRcdHRoaXMuciA9IGNvbG9yMS5yICsgY29sb3IyLnI7XG5cdFx0dGhpcy5nID0gY29sb3IxLmcgKyBjb2xvcjIuZztcblx0XHR0aGlzLmIgPSBjb2xvcjEuYiArIGNvbG9yMi5iO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZFNjYWxhciggcyApIHtcblxuXHRcdHRoaXMuciArPSBzO1xuXHRcdHRoaXMuZyArPSBzO1xuXHRcdHRoaXMuYiArPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN1YiggY29sb3IgKSB7XG5cblx0XHR0aGlzLnIgPSBNYXRoLm1heCggMCwgdGhpcy5yIC0gY29sb3IuciApO1xuXHRcdHRoaXMuZyA9IE1hdGgubWF4KCAwLCB0aGlzLmcgLSBjb2xvci5nICk7XG5cdFx0dGhpcy5iID0gTWF0aC5tYXgoIDAsIHRoaXMuYiAtIGNvbG9yLmIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseSggY29sb3IgKSB7XG5cblx0XHR0aGlzLnIgKj0gY29sb3Iucjtcblx0XHR0aGlzLmcgKj0gY29sb3IuZztcblx0XHR0aGlzLmIgKj0gY29sb3IuYjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseVNjYWxhciggcyApIHtcblxuXHRcdHRoaXMuciAqPSBzO1xuXHRcdHRoaXMuZyAqPSBzO1xuXHRcdHRoaXMuYiAqPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnAoIGNvbG9yLCBhbHBoYSApIHtcblxuXHRcdHRoaXMuciArPSAoIGNvbG9yLnIgLSB0aGlzLnIgKSAqIGFscGhhO1xuXHRcdHRoaXMuZyArPSAoIGNvbG9yLmcgLSB0aGlzLmcgKSAqIGFscGhhO1xuXHRcdHRoaXMuYiArPSAoIGNvbG9yLmIgLSB0aGlzLmIgKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnBDb2xvcnMoIGNvbG9yMSwgY29sb3IyLCBhbHBoYSApIHtcblxuXHRcdHRoaXMuciA9IGNvbG9yMS5yICsgKCBjb2xvcjIuciAtIGNvbG9yMS5yICkgKiBhbHBoYTtcblx0XHR0aGlzLmcgPSBjb2xvcjEuZyArICggY29sb3IyLmcgLSBjb2xvcjEuZyApICogYWxwaGE7XG5cdFx0dGhpcy5iID0gY29sb3IxLmIgKyAoIGNvbG9yMi5iIC0gY29sb3IxLmIgKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnBIU0woIGNvbG9yLCBhbHBoYSApIHtcblxuXHRcdHRoaXMuZ2V0SFNMKCBfaHNsQSApO1xuXHRcdGNvbG9yLmdldEhTTCggX2hzbEIgKTtcblxuXHRcdGNvbnN0IGggPSBsZXJwKCBfaHNsQS5oLCBfaHNsQi5oLCBhbHBoYSApO1xuXHRcdGNvbnN0IHMgPSBsZXJwKCBfaHNsQS5zLCBfaHNsQi5zLCBhbHBoYSApO1xuXHRcdGNvbnN0IGwgPSBsZXJwKCBfaHNsQS5sLCBfaHNsQi5sLCBhbHBoYSApO1xuXG5cdFx0dGhpcy5zZXRIU0woIGgsIHMsIGwgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIGMgKSB7XG5cblx0XHRyZXR1cm4gKCBjLnIgPT09IHRoaXMuciApICYmICggYy5nID09PSB0aGlzLmcgKSAmJiAoIGMuYiA9PT0gdGhpcy5iICk7XG5cblx0fVxuXG5cdGZyb21BcnJheSggYXJyYXksIG9mZnNldCA9IDAgKSB7XG5cblx0XHR0aGlzLnIgPSBhcnJheVsgb2Zmc2V0IF07XG5cdFx0dGhpcy5nID0gYXJyYXlbIG9mZnNldCArIDEgXTtcblx0XHR0aGlzLmIgPSBhcnJheVsgb2Zmc2V0ICsgMiBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLnI7XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMuZztcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy5iO1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH1cblxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4ICkge1xuXG5cdFx0dGhpcy5yID0gYXR0cmlidXRlLmdldFgoIGluZGV4ICk7XG5cdFx0dGhpcy5nID0gYXR0cmlidXRlLmdldFkoIGluZGV4ICk7XG5cdFx0dGhpcy5iID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7XG5cblx0XHRpZiAoIGF0dHJpYnV0ZS5ub3JtYWxpemVkID09PSB0cnVlICkge1xuXG5cdFx0XHQvLyBhc3N1bWluZyBVaW50OEFycmF5XG5cblx0XHRcdHRoaXMuciAvPSAyNTU7XG5cdFx0XHR0aGlzLmcgLz0gMjU1O1xuXHRcdFx0dGhpcy5iIC89IDI1NTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRIZXgoKTtcblxuXHR9XG5cbn1cblxuQ29sb3IuTkFNRVMgPSBfY29sb3JLZXl3b3JkcztcblxuQ29sb3IucHJvdG90eXBlLmlzQ29sb3IgPSB0cnVlO1xuQ29sb3IucHJvdG90eXBlLnIgPSAxO1xuQ29sb3IucHJvdG90eXBlLmcgPSAxO1xuQ29sb3IucHJvdG90eXBlLmIgPSAxO1xuXG5sZXQgX2NhbnZhcztcblxuY2xhc3MgSW1hZ2VVdGlscyB7XG5cblx0c3RhdGljIGdldERhdGFVUkwoIGltYWdlICkge1xuXG5cdFx0aWYgKCAvXmRhdGE6L2kudGVzdCggaW1hZ2Uuc3JjICkgKSB7XG5cblx0XHRcdHJldHVybiBpbWFnZS5zcmM7XG5cblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCA9PSAndW5kZWZpbmVkJyApIHtcblxuXHRcdFx0cmV0dXJuIGltYWdlLnNyYztcblxuXHRcdH1cblxuXHRcdGxldCBjYW52YXM7XG5cblx0XHRpZiAoIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgKSB7XG5cblx0XHRcdGNhbnZhcyA9IGltYWdlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBfY2FudmFzID09PSB1bmRlZmluZWQgKSBfY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCAnY2FudmFzJyApO1xuXG5cdFx0XHRfY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG5cdFx0XHRfY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcblxuXHRcdFx0Y29uc3QgY29udGV4dCA9IF9jYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG5cdFx0XHRpZiAoIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhICkge1xuXG5cdFx0XHRcdGNvbnRleHQucHV0SW1hZ2VEYXRhKCBpbWFnZSwgMCwgMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNhbnZhcyA9IF9jYW52YXM7XG5cblx0XHR9XG5cblx0XHRpZiAoIGNhbnZhcy53aWR0aCA+IDIwNDggfHwgY2FudmFzLmhlaWdodCA+IDIwNDggKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucycsIGltYWdlICk7XG5cblx0XHRcdHJldHVybiBjYW52YXMudG9EYXRhVVJMKCAnaW1hZ2UvanBlZycsIDAuNiApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoICdpbWFnZS9wbmcnICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHN0YXRpYyBzUkdCVG9MaW5lYXIoIGltYWdlICkge1xuXG5cdFx0aWYgKCAoIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB8fFxuXHRcdFx0KCB0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgKSB8fFxuXHRcdFx0KCB0eXBlb2YgSW1hZ2VCaXRtYXAgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXAgKSApIHtcblxuXHRcdFx0Y29uc3QgY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCAnY2FudmFzJyApO1xuXG5cdFx0XHRjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcblx0XHRcdGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG5cblx0XHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHRcdGNvbnN0IGltYWdlRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cdFx0XHRjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGRhdGFbIGkgXSA9IFNSR0JUb0xpbmVhciggZGF0YVsgaSBdIC8gMjU1ICkgKiAyNTU7XG5cblx0XHRcdH1cblxuXHRcdFx0Y29udGV4dC5wdXRJbWFnZURhdGEoIGltYWdlRGF0YSwgMCwgMCApO1xuXG5cdFx0XHRyZXR1cm4gY2FudmFzO1xuXG5cdFx0fSBlbHNlIGlmICggaW1hZ2UuZGF0YSApIHtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IGltYWdlLmRhdGEuc2xpY2UoIDAgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBkYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgKSB7XG5cblx0XHRcdFx0XHRkYXRhWyBpIF0gPSBNYXRoLmZsb29yKCBTUkdCVG9MaW5lYXIoIGRhdGFbIGkgXSAvIDI1NSApICogMjU1ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGFzc3VtaW5nIGZsb2F0XG5cblx0XHRcdFx0XHRkYXRhWyBpIF0gPSBTUkdCVG9MaW5lYXIoIGRhdGFbIGkgXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHR9O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLicgKTtcblx0XHRcdHJldHVybiBpbWFnZTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxubGV0IHRleHR1cmVJZCA9IDA7XG5cbmNsYXNzIFRleHR1cmUgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBpbWFnZSA9IFRleHR1cmUuREVGQVVMVF9JTUFHRSwgbWFwcGluZyA9IFRleHR1cmUuREVGQVVMVF9NQVBQSU5HLCB3cmFwUyA9IENsYW1wVG9FZGdlV3JhcHBpbmcsIHdyYXBUID0gQ2xhbXBUb0VkZ2VXcmFwcGluZywgbWFnRmlsdGVyID0gTGluZWFyRmlsdGVyLCBtaW5GaWx0ZXIgPSBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIsIGZvcm1hdCA9IFJHQkFGb3JtYXQsIHR5cGUgPSBVbnNpZ25lZEJ5dGVUeXBlLCBhbmlzb3Ryb3B5ID0gMSwgZW5jb2RpbmcgPSBMaW5lYXJFbmNvZGluZyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IHRleHR1cmVJZCArKyB9ICk7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5pbWFnZSA9IGltYWdlO1xuXHRcdHRoaXMubWlwbWFwcyA9IFtdO1xuXG5cdFx0dGhpcy5tYXBwaW5nID0gbWFwcGluZztcblxuXHRcdHRoaXMud3JhcFMgPSB3cmFwUztcblx0XHR0aGlzLndyYXBUID0gd3JhcFQ7XG5cblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlcjtcblxuXHRcdHRoaXMuYW5pc290cm9weSA9IGFuaXNvdHJvcHk7XG5cblx0XHR0aGlzLmZvcm1hdCA9IGZvcm1hdDtcblx0XHR0aGlzLmludGVybmFsRm9ybWF0ID0gbnVsbDtcblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXG5cdFx0dGhpcy5vZmZzZXQgPSBuZXcgVmVjdG9yMiggMCwgMCApO1xuXHRcdHRoaXMucmVwZWF0ID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblx0XHR0aGlzLmNlbnRlciA9IG5ldyBWZWN0b3IyKCAwLCAwICk7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IDA7XG5cblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gdHJ1ZTtcblx0XHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblx0XHR0aGlzLmZsaXBZID0gdHJ1ZTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IDQ7XHQvLyB2YWxpZCB2YWx1ZXM6IDEsIDIsIDQsIDggKHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL29wZW5nbGVzL3Nkay9kb2NzL21hbi94aHRtbC9nbFBpeGVsU3RvcmVpLnhtbClcblxuXHRcdC8vIFZhbHVlcyBvZiBlbmNvZGluZyAhPT0gVEhSRUUuTGluZWFyRW5jb2Rpbmcgb25seSBzdXBwb3J0ZWQgb24gbWFwLCBlbnZNYXAgYW5kIGVtaXNzaXZlTWFwLlxuXHRcdC8vXG5cdFx0Ly8gQWxzbyBjaGFuZ2luZyB0aGUgZW5jb2RpbmcgYWZ0ZXIgYWxyZWFkeSB1c2VkIGJ5IGEgTWF0ZXJpYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBtYWtlIHRoZSBNYXRlcmlhbFxuXHRcdC8vIHVwZGF0ZS4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIE1hdGVyaWFsLm5lZWRzVXBkYXRlIHRvIHRyaWdnZXIgaXQgdG8gcmVjb21waWxlLlxuXHRcdHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcblxuXHRcdHRoaXMudXNlckRhdGEgPSB7fTtcblxuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cdFx0dGhpcy5vblVwZGF0ZSA9IG51bGw7XG5cblx0XHR0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZhbHNlOyAvLyBpbmRpY2F0ZXMgd2hldGhlciBhIHRleHR1cmUgYmVsb25ncyB0byBhIHJlbmRlciB0YXJnZXQgb3Igbm90XG5cdFx0dGhpcy5uZWVkc1BNUkVNVXBkYXRlID0gZmFsc2U7IC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgdGV4dHVyZSBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IFBNUkVNR2VuZXJhdG9yIG9yIG5vdCAob25seSByZWxldmFudCBmb3IgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcylcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4KCkge1xuXG5cdFx0dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0oIHRoaXMub2Zmc2V0LngsIHRoaXMub2Zmc2V0LnksIHRoaXMucmVwZWF0LngsIHRoaXMucmVwZWF0LnksIHRoaXMucm90YXRpb24sIHRoaXMuY2VudGVyLngsIHRoaXMuY2VudGVyLnkgKTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuXG5cdFx0dGhpcy5pbWFnZSA9IHNvdXJjZS5pbWFnZTtcblx0XHR0aGlzLm1pcG1hcHMgPSBzb3VyY2UubWlwbWFwcy5zbGljZSggMCApO1xuXG5cdFx0dGhpcy5tYXBwaW5nID0gc291cmNlLm1hcHBpbmc7XG5cblx0XHR0aGlzLndyYXBTID0gc291cmNlLndyYXBTO1xuXHRcdHRoaXMud3JhcFQgPSBzb3VyY2Uud3JhcFQ7XG5cblx0XHR0aGlzLm1hZ0ZpbHRlciA9IHNvdXJjZS5tYWdGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBzb3VyY2UubWluRmlsdGVyO1xuXG5cdFx0dGhpcy5hbmlzb3Ryb3B5ID0gc291cmNlLmFuaXNvdHJvcHk7XG5cblx0XHR0aGlzLmZvcm1hdCA9IHNvdXJjZS5mb3JtYXQ7XG5cdFx0dGhpcy5pbnRlcm5hbEZvcm1hdCA9IHNvdXJjZS5pbnRlcm5hbEZvcm1hdDtcblx0XHR0aGlzLnR5cGUgPSBzb3VyY2UudHlwZTtcblxuXHRcdHRoaXMub2Zmc2V0LmNvcHkoIHNvdXJjZS5vZmZzZXQgKTtcblx0XHR0aGlzLnJlcGVhdC5jb3B5KCBzb3VyY2UucmVwZWF0ICk7XG5cdFx0dGhpcy5jZW50ZXIuY29weSggc291cmNlLmNlbnRlciApO1xuXHRcdHRoaXMucm90YXRpb24gPSBzb3VyY2Uucm90YXRpb247XG5cblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTtcblx0XHR0aGlzLm1hdHJpeC5jb3B5KCBzb3VyY2UubWF0cml4ICk7XG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IHNvdXJjZS5nZW5lcmF0ZU1pcG1hcHM7XG5cdFx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gc291cmNlLnByZW11bHRpcGx5QWxwaGE7XG5cdFx0dGhpcy5mbGlwWSA9IHNvdXJjZS5mbGlwWTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IHNvdXJjZS51bnBhY2tBbGlnbm1lbnQ7XG5cdFx0dGhpcy5lbmNvZGluZyA9IHNvdXJjZS5lbmNvZGluZztcblxuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggc291cmNlLnVzZXJEYXRhICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBpc1Jvb3RPYmplY3QgPSAoIG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZycgKTtcblxuXHRcdGlmICggISBpc1Jvb3RPYmplY3QgJiYgbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0cmV0dXJuIG1ldGEudGV4dHVyZXNbIHRoaXMudXVpZCBdO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3V0cHV0ID0ge1xuXG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdUZXh0dXJlJyxcblx0XHRcdFx0Z2VuZXJhdG9yOiAnVGV4dHVyZS50b0pTT04nXG5cdFx0XHR9LFxuXG5cdFx0XHR1dWlkOiB0aGlzLnV1aWQsXG5cdFx0XHRuYW1lOiB0aGlzLm5hbWUsXG5cblx0XHRcdG1hcHBpbmc6IHRoaXMubWFwcGluZyxcblxuXHRcdFx0cmVwZWF0OiBbIHRoaXMucmVwZWF0LngsIHRoaXMucmVwZWF0LnkgXSxcblx0XHRcdG9mZnNldDogWyB0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55IF0sXG5cdFx0XHRjZW50ZXI6IFsgdGhpcy5jZW50ZXIueCwgdGhpcy5jZW50ZXIueSBdLFxuXHRcdFx0cm90YXRpb246IHRoaXMucm90YXRpb24sXG5cblx0XHRcdHdyYXA6IFsgdGhpcy53cmFwUywgdGhpcy53cmFwVCBdLFxuXG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxuXHRcdFx0ZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmcsXG5cblx0XHRcdG1pbkZpbHRlcjogdGhpcy5taW5GaWx0ZXIsXG5cdFx0XHRtYWdGaWx0ZXI6IHRoaXMubWFnRmlsdGVyLFxuXHRcdFx0YW5pc290cm9weTogdGhpcy5hbmlzb3Ryb3B5LFxuXG5cdFx0XHRmbGlwWTogdGhpcy5mbGlwWSxcblxuXHRcdFx0cHJlbXVsdGlwbHlBbHBoYTogdGhpcy5wcmVtdWx0aXBseUFscGhhLFxuXHRcdFx0dW5wYWNrQWxpZ25tZW50OiB0aGlzLnVucGFja0FsaWdubWVudFxuXG5cdFx0fTtcblxuXHRcdGlmICggdGhpcy5pbWFnZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBUT0RPOiBNb3ZlIHRvIFRIUkVFLkltYWdlXG5cblx0XHRcdGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZTtcblxuXHRcdFx0aWYgKCBpbWFnZS51dWlkID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aW1hZ2UudXVpZCA9IGdlbmVyYXRlVVVJRCgpOyAvLyBVR0hcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEgaXNSb290T2JqZWN0ICYmIG1ldGEuaW1hZ2VzWyBpbWFnZS51dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRsZXQgdXJsO1xuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggaW1hZ2UgKSApIHtcblxuXHRcdFx0XHRcdC8vIHByb2Nlc3MgYXJyYXkgb2YgaW1hZ2VzIGUuZy4gQ3ViZVRleHR1cmVcblxuXHRcdFx0XHRcdHVybCA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gaW1hZ2UubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gY2hlY2sgY3ViZSB0ZXh0dXJlIHdpdGggZGF0YSB0ZXh0dXJlc1xuXG5cdFx0XHRcdFx0XHRpZiAoIGltYWdlWyBpIF0uaXNEYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdFx0XHR1cmwucHVzaCggc2VyaWFsaXplSW1hZ2UoIGltYWdlWyBpIF0uaW1hZ2UgKSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHVybC5wdXNoKCBzZXJpYWxpemVJbWFnZSggaW1hZ2VbIGkgXSApICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gcHJvY2VzcyBzaW5nbGUgaW1hZ2VcblxuXHRcdFx0XHRcdHVybCA9IHNlcmlhbGl6ZUltYWdlKCBpbWFnZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtZXRhLmltYWdlc1sgaW1hZ2UudXVpZCBdID0ge1xuXHRcdFx0XHRcdHV1aWQ6IGltYWdlLnV1aWQsXG5cdFx0XHRcdFx0dXJsOiB1cmxcblx0XHRcdFx0fTtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXRwdXQuaW1hZ2UgPSBpbWFnZS51dWlkO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBKU09OLnN0cmluZ2lmeSggdGhpcy51c2VyRGF0YSApICE9PSAne30nICkgb3V0cHV0LnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdGlmICggISBpc1Jvb3RPYmplY3QgKSB7XG5cblx0XHRcdG1ldGEudGV4dHVyZXNbIHRoaXMudXVpZCBdID0gb3V0cHV0O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApO1xuXG5cdH1cblxuXHR0cmFuc2Zvcm1VdiggdXYgKSB7XG5cblx0XHRpZiAoIHRoaXMubWFwcGluZyAhPT0gVVZNYXBwaW5nICkgcmV0dXJuIHV2O1xuXG5cdFx0dXYuYXBwbHlNYXRyaXgzKCB0aGlzLm1hdHJpeCApO1xuXG5cdFx0aWYgKCB1di54IDwgMCB8fCB1di54ID4gMSApIHtcblxuXHRcdFx0c3dpdGNoICggdGhpcy53cmFwUyApIHtcblxuXHRcdFx0XHRjYXNlIFJlcGVhdFdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0dXYueCA9IHV2LnggLSBNYXRoLmZsb29yKCB1di54ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0dXYueCA9IHV2LnggPCAwID8gMCA6IDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0aWYgKCBNYXRoLmFicyggTWF0aC5mbG9vciggdXYueCApICUgMiApID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHR1di54ID0gTWF0aC5jZWlsKCB1di54ICkgLSB1di54O1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dXYueCA9IHV2LnggLSBNYXRoLmZsb29yKCB1di54ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB1di55IDwgMCB8fCB1di55ID4gMSApIHtcblxuXHRcdFx0c3dpdGNoICggdGhpcy53cmFwVCApIHtcblxuXHRcdFx0XHRjYXNlIFJlcGVhdFdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0dXYueSA9IHV2LnkgLSBNYXRoLmZsb29yKCB1di55ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0dXYueSA9IHV2LnkgPCAwID8gMCA6IDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOlxuXG5cdFx0XHRcdFx0aWYgKCBNYXRoLmFicyggTWF0aC5mbG9vciggdXYueSApICUgMiApID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHR1di55ID0gTWF0aC5jZWlsKCB1di55ICkgLSB1di55O1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dXYueSA9IHV2LnkgLSBNYXRoLmZsb29yKCB1di55ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmZsaXBZICkge1xuXG5cdFx0XHR1di55ID0gMSAtIHV2Lnk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdXY7XG5cblx0fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrO1xuXG5cdH1cblxufVxuXG5UZXh0dXJlLkRFRkFVTFRfSU1BR0UgPSB1bmRlZmluZWQ7XG5UZXh0dXJlLkRFRkFVTFRfTUFQUElORyA9IFVWTWFwcGluZztcblxuVGV4dHVyZS5wcm90b3R5cGUuaXNUZXh0dXJlID0gdHJ1ZTtcblxuZnVuY3Rpb24gc2VyaWFsaXplSW1hZ2UoIGltYWdlICkge1xuXG5cdGlmICggKCB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICkgfHxcblx0XHQoIHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHx8XG5cdFx0KCB0eXBlb2YgSW1hZ2VCaXRtYXAgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXAgKSApIHtcblxuXHRcdC8vIGRlZmF1bHQgaW1hZ2VzXG5cblx0XHRyZXR1cm4gSW1hZ2VVdGlscy5nZXREYXRhVVJMKCBpbWFnZSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRpZiAoIGltYWdlLmRhdGEgKSB7XG5cblx0XHRcdC8vIGltYWdlcyBvZiBEYXRhVGV4dHVyZVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggaW1hZ2UuZGF0YSApLFxuXHRcdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxuXHRcdFx0XHR0eXBlOiBpbWFnZS5kYXRhLmNvbnN0cnVjdG9yLm5hbWVcblx0XHRcdH07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuJyApO1xuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5jbGFzcyBWZWN0b3I0IHtcblxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwLCB6ID0gMCwgdyA9IDEgKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblx0XHR0aGlzLncgPSB3O1xuXG5cdH1cblxuXHRnZXQgd2lkdGgoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy56O1xuXG5cdH1cblxuXHRzZXQgd2lkdGgoIHZhbHVlICkge1xuXG5cdFx0dGhpcy56ID0gdmFsdWU7XG5cblx0fVxuXG5cdGdldCBoZWlnaHQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy53O1xuXG5cdH1cblxuXHRzZXQgaGVpZ2h0KCB2YWx1ZSApIHtcblxuXHRcdHRoaXMudyA9IHZhbHVlO1xuXG5cdH1cblxuXHRzZXQoIHgsIHksIHosIHcgKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblx0XHR0aGlzLncgPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0dGhpcy54ID0gc2NhbGFyO1xuXHRcdHRoaXMueSA9IHNjYWxhcjtcblx0XHR0aGlzLnogPSBzY2FsYXI7XG5cdFx0dGhpcy53ID0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFgoIHggKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFkoIHkgKSB7XG5cblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFooIHogKSB7XG5cblx0XHR0aGlzLnogPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFcoIHcgKSB7XG5cblx0XHR0aGlzLncgPSB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldENvbXBvbmVudCggaW5kZXgsIHZhbHVlICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgMzogdGhpcy53ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRDb21wb25lbnQoIGluZGV4ICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogcmV0dXJuIHRoaXMueDtcblx0XHRcdGNhc2UgMTogcmV0dXJuIHRoaXMueTtcblx0XHRcdGNhc2UgMjogcmV0dXJuIHRoaXMuejtcblx0XHRcdGNhc2UgMzogcmV0dXJuIHRoaXMudztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncgKTtcblxuXHR9XG5cblx0Y29weSggdiApIHtcblxuXHRcdHRoaXMueCA9IHYueDtcblx0XHR0aGlzLnkgPSB2Lnk7XG5cdFx0dGhpcy56ID0gdi56O1xuXHRcdHRoaXMudyA9ICggdi53ICE9PSB1bmRlZmluZWQgKSA/IHYudyA6IDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblx0XHR0aGlzLncgKz0gdi53O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZFNjYWxhciggcyApIHtcblxuXHRcdHRoaXMueCArPSBzO1xuXHRcdHRoaXMueSArPSBzO1xuXHRcdHRoaXMueiArPSBzO1xuXHRcdHRoaXMudyArPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZFZlY3RvcnMoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggKyBiLng7XG5cdFx0dGhpcy55ID0gYS55ICsgYi55O1xuXHRcdHRoaXMueiA9IGEueiArIGIuejtcblx0XHR0aGlzLncgPSBhLncgKyBiLnc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGVkVmVjdG9yKCB2LCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cdFx0dGhpcy53ICs9IHYudyAqIHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblx0XHR0aGlzLncgLT0gdi53O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN1YlNjYWxhciggcyApIHtcblxuXHRcdHRoaXMueCAtPSBzO1xuXHRcdHRoaXMueSAtPSBzO1xuXHRcdHRoaXMueiAtPSBzO1xuXHRcdHRoaXMudyAtPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN1YlZlY3RvcnMoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggLSBiLng7XG5cdFx0dGhpcy55ID0gYS55IC0gYi55O1xuXHRcdHRoaXMueiA9IGEueiAtIGIuejtcblx0XHR0aGlzLncgPSBhLncgLSBiLnc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHkoIHYgKSB7XG5cblx0XHR0aGlzLnggKj0gdi54O1xuXHRcdHRoaXMueSAqPSB2Lnk7XG5cdFx0dGhpcy56ICo9IHYuejtcblx0XHR0aGlzLncgKj0gdi53O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblx0XHR0aGlzLncgKj0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbSApIHtcblxuXHRcdGNvbnN0IHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLnosIHcgPSB0aGlzLnc7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHogKyBlWyAxMiBdICogdztcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAqIHogKyBlWyAxMyBdICogdztcblx0XHR0aGlzLnogPSBlWyAyIF0gKiB4ICsgZVsgNiBdICogeSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSAqIHc7XG5cdFx0dGhpcy53ID0gZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBlWyAxMSBdICogeiArIGVbIDE1IF0gKiB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpdmlkZVNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoIDEgLyBzY2FsYXIgKTtcblxuXHR9XG5cblx0c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24oIHEgKSB7XG5cblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvcXVhdGVybmlvblRvQW5nbGUvaW5kZXguaHRtXG5cblx0XHQvLyBxIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZFxuXG5cdFx0dGhpcy53ID0gMiAqIE1hdGguYWNvcyggcS53ICk7XG5cblx0XHRjb25zdCBzID0gTWF0aC5zcXJ0KCAxIC0gcS53ICogcS53ICk7XG5cblx0XHRpZiAoIHMgPCAwLjAwMDEgKSB7XG5cblx0XHRcdHRoaXMueCA9IDE7XG5cdFx0XHR0aGlzLnkgPSAwO1xuXHRcdFx0dGhpcy56ID0gMDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMueCA9IHEueCAvIHM7XG5cdFx0XHR0aGlzLnkgPSBxLnkgLyBzO1xuXHRcdFx0dGhpcy56ID0gcS56IC8gcztcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgoIG0gKSB7XG5cblx0XHQvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9BbmdsZS9pbmRleC5odG1cblxuXHRcdC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG5cblx0XHRsZXQgYW5nbGUsIHgsIHksIHo7IC8vIHZhcmlhYmxlcyBmb3IgcmVzdWx0XG5cdFx0Y29uc3QgZXBzaWxvbiA9IDAuMDEsXHRcdC8vIG1hcmdpbiB0byBhbGxvdyBmb3Igcm91bmRpbmcgZXJyb3JzXG5cdFx0XHRlcHNpbG9uMiA9IDAuMSxcdFx0Ly8gbWFyZ2luIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gMCBhbmQgMTgwIGRlZ3JlZXNcblxuXHRcdFx0dGUgPSBtLmVsZW1lbnRzLFxuXG5cdFx0XHRtMTEgPSB0ZVsgMCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdLFxuXHRcdFx0bTIxID0gdGVbIDEgXSwgbTIyID0gdGVbIDUgXSwgbTIzID0gdGVbIDkgXSxcblx0XHRcdG0zMSA9IHRlWyAyIF0sIG0zMiA9IHRlWyA2IF0sIG0zMyA9IHRlWyAxMCBdO1xuXG5cdFx0aWYgKCAoIE1hdGguYWJzKCBtMTIgLSBtMjEgKSA8IGVwc2lsb24gKSAmJlxuXHRcdCAgICAgKCBNYXRoLmFicyggbTEzIC0gbTMxICkgPCBlcHNpbG9uICkgJiZcblx0XHQgICAgICggTWF0aC5hYnMoIG0yMyAtIG0zMiApIDwgZXBzaWxvbiApICkge1xuXG5cdFx0XHQvLyBzaW5ndWxhcml0eSBmb3VuZFxuXHRcdFx0Ly8gZmlyc3QgY2hlY2sgZm9yIGlkZW50aXR5IG1hdHJpeCB3aGljaCBtdXN0IGhhdmUgKzEgZm9yIGFsbCB0ZXJtc1xuXHRcdFx0Ly8gaW4gbGVhZGluZyBkaWFnb25hbCBhbmQgemVybyBpbiBvdGhlciB0ZXJtc1xuXG5cdFx0XHRpZiAoICggTWF0aC5hYnMoIG0xMiArIG0yMSApIDwgZXBzaWxvbjIgKSAmJlxuXHRcdFx0ICAgICAoIE1hdGguYWJzKCBtMTMgKyBtMzEgKSA8IGVwc2lsb24yICkgJiZcblx0XHRcdCAgICAgKCBNYXRoLmFicyggbTIzICsgbTMyICkgPCBlcHNpbG9uMiApICYmXG5cdFx0XHQgICAgICggTWF0aC5hYnMoIG0xMSArIG0yMiArIG0zMyAtIDMgKSA8IGVwc2lsb24yICkgKSB7XG5cblx0XHRcdFx0Ly8gdGhpcyBzaW5ndWxhcml0eSBpcyBpZGVudGl0eSBtYXRyaXggc28gYW5nbGUgPSAwXG5cblx0XHRcdFx0dGhpcy5zZXQoIDEsIDAsIDAsIDAgKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpczsgLy8gemVybyBhbmdsZSwgYXJiaXRyYXJ5IGF4aXNcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhpcyBzaW5ndWxhcml0eSBpcyBhbmdsZSA9IDE4MFxuXG5cdFx0XHRhbmdsZSA9IE1hdGguUEk7XG5cblx0XHRcdGNvbnN0IHh4ID0gKCBtMTEgKyAxICkgLyAyO1xuXHRcdFx0Y29uc3QgeXkgPSAoIG0yMiArIDEgKSAvIDI7XG5cdFx0XHRjb25zdCB6eiA9ICggbTMzICsgMSApIC8gMjtcblx0XHRcdGNvbnN0IHh5ID0gKCBtMTIgKyBtMjEgKSAvIDQ7XG5cdFx0XHRjb25zdCB4eiA9ICggbTEzICsgbTMxICkgLyA0O1xuXHRcdFx0Y29uc3QgeXogPSAoIG0yMyArIG0zMiApIC8gNDtcblxuXHRcdFx0aWYgKCAoIHh4ID4geXkgKSAmJiAoIHh4ID4genogKSApIHtcblxuXHRcdFx0XHQvLyBtMTEgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybVxuXG5cdFx0XHRcdGlmICggeHggPCBlcHNpbG9uICkge1xuXG5cdFx0XHRcdFx0eCA9IDA7XG5cdFx0XHRcdFx0eSA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHRcdHogPSAwLjcwNzEwNjc4MTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0eCA9IE1hdGguc3FydCggeHggKTtcblx0XHRcdFx0XHR5ID0geHkgLyB4O1xuXHRcdFx0XHRcdHogPSB4eiAvIHg7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCB5eSA+IHp6ICkge1xuXG5cdFx0XHRcdC8vIG0yMiBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtXG5cblx0XHRcdFx0aWYgKCB5eSA8IGVwc2lsb24gKSB7XG5cblx0XHRcdFx0XHR4ID0gMC43MDcxMDY3ODE7XG5cdFx0XHRcdFx0eSA9IDA7XG5cdFx0XHRcdFx0eiA9IDAuNzA3MTA2NzgxO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR5ID0gTWF0aC5zcXJ0KCB5eSApO1xuXHRcdFx0XHRcdHggPSB4eSAvIHk7XG5cdFx0XHRcdFx0eiA9IHl6IC8geTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gbTMzIGlzIHRoZSBsYXJnZXN0IGRpYWdvbmFsIHRlcm0gc28gYmFzZSByZXN1bHQgb24gdGhpc1xuXG5cdFx0XHRcdGlmICggenogPCBlcHNpbG9uICkge1xuXG5cdFx0XHRcdFx0eCA9IDAuNzA3MTA2NzgxO1xuXHRcdFx0XHRcdHkgPSAwLjcwNzEwNjc4MTtcblx0XHRcdFx0XHR6ID0gMDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0eiA9IE1hdGguc3FydCggenogKTtcblx0XHRcdFx0XHR4ID0geHogLyB6O1xuXHRcdFx0XHRcdHkgPSB5eiAvIHo7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0KCB4LCB5LCB6LCBhbmdsZSApO1xuXG5cdFx0XHRyZXR1cm4gdGhpczsgLy8gcmV0dXJuIDE4MCBkZWcgcm90YXRpb25cblxuXHRcdH1cblxuXHRcdC8vIGFzIHdlIGhhdmUgcmVhY2hlZCBoZXJlIHRoZXJlIGFyZSBubyBzaW5ndWxhcml0aWVzIHNvIHdlIGNhbiBoYW5kbGUgbm9ybWFsbHlcblxuXHRcdGxldCBzID0gTWF0aC5zcXJ0KCAoIG0zMiAtIG0yMyApICogKCBtMzIgLSBtMjMgKSArXG5cdFx0XHQoIG0xMyAtIG0zMSApICogKCBtMTMgLSBtMzEgKSArXG5cdFx0XHQoIG0yMSAtIG0xMiApICogKCBtMjEgLSBtMTIgKSApOyAvLyB1c2VkIHRvIG5vcm1hbGl6ZVxuXG5cdFx0aWYgKCBNYXRoLmFicyggcyApIDwgMC4wMDEgKSBzID0gMTtcblxuXHRcdC8vIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8sIHNob3VsZCBub3QgaGFwcGVuIGlmIG1hdHJpeCBpcyBvcnRob2dvbmFsIGFuZCBzaG91bGQgYmVcblx0XHQvLyBjYXVnaHQgYnkgc2luZ3VsYXJpdHkgdGVzdCBhYm92ZSwgYnV0IEkndmUgbGVmdCBpdCBpbiBqdXN0IGluIGNhc2VcblxuXHRcdHRoaXMueCA9ICggbTMyIC0gbTIzICkgLyBzO1xuXHRcdHRoaXMueSA9ICggbTEzIC0gbTMxICkgLyBzO1xuXHRcdHRoaXMueiA9ICggbTIxIC0gbTEyICkgLyBzO1xuXHRcdHRoaXMudyA9IE1hdGguYWNvcyggKCBtMTEgKyBtMjIgKyBtMzMgLSAxICkgLyAyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWluKCB2ICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5taW4oIHRoaXMueCwgdi54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5taW4oIHRoaXMueSwgdi55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5taW4oIHRoaXMueiwgdi56ICk7XG5cdFx0dGhpcy53ID0gTWF0aC5taW4oIHRoaXMudywgdi53ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWF4KCB2ICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIHRoaXMueCwgdi54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIHRoaXMueSwgdi55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIHRoaXMueiwgdi56ICk7XG5cdFx0dGhpcy53ID0gTWF0aC5tYXgoIHRoaXMudywgdi53ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXAoIG1pbiwgbWF4ICkge1xuXG5cdFx0Ly8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVudHdpc2VcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCBtaW4ueCwgTWF0aC5taW4oIG1heC54LCB0aGlzLnggKSApO1xuXHRcdHRoaXMueSA9IE1hdGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCBtaW4ueiwgTWF0aC5taW4oIG1heC56LCB0aGlzLnogKSApO1xuXHRcdHRoaXMudyA9IE1hdGgubWF4KCBtaW4udywgTWF0aC5taW4oIG1heC53LCB0aGlzLncgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsYW1wU2NhbGFyKCBtaW5WYWwsIG1heFZhbCApIHtcblxuXHRcdHRoaXMueCA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy55ICkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnogKSApO1xuXHRcdHRoaXMudyA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMudyApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXBMZW5ndGgoIG1pbiwgbWF4ICkge1xuXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3RoICkgKSApO1xuXG5cdH1cblxuXHRmbG9vcigpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXHRcdHRoaXMudyA9IE1hdGguZmxvb3IoIHRoaXMudyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNlaWwoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguY2VpbCggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5jZWlsKCB0aGlzLnogKTtcblx0XHR0aGlzLncgPSBNYXRoLmNlaWwoIHRoaXMudyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdW5kKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5yb3VuZCggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5yb3VuZCggdGhpcy56ICk7XG5cdFx0dGhpcy53ID0gTWF0aC5yb3VuZCggdGhpcy53ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm91bmRUb1plcm8oKSB7XG5cblx0XHR0aGlzLnggPSAoIHRoaXMueCA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSAoIHRoaXMueiA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy56ICkgOiBNYXRoLmZsb29yKCB0aGlzLnogKTtcblx0XHR0aGlzLncgPSAoIHRoaXMudyA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy53ICkgOiBNYXRoLmZsb29yKCB0aGlzLncgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRuZWdhdGUoKSB7XG5cblx0XHR0aGlzLnggPSAtIHRoaXMueDtcblx0XHR0aGlzLnkgPSAtIHRoaXMueTtcblx0XHR0aGlzLnogPSAtIHRoaXMuejtcblx0XHR0aGlzLncgPSAtIHRoaXMudztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkb3QoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56ICsgdGhpcy53ICogdi53O1xuXG5cdH1cblxuXHRsZW5ndGhTcSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLnc7XG5cblx0fVxuXG5cdGxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRoaXMudyApO1xuXG5cdH1cblxuXHRtYW5oYXR0YW5MZW5ndGgoKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMueiApICsgTWF0aC5hYnMoIHRoaXMudyApO1xuXG5cdH1cblxuXHRub3JtYWxpemUoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIHRoaXMubGVuZ3RoKCkgfHwgMSApO1xuXG5cdH1cblxuXHRzZXRMZW5ndGgoIGxlbmd0aCApIHtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBsZW5ndGggKTtcblxuXHR9XG5cblx0bGVycCggdiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XG5cdFx0dGhpcy56ICs9ICggdi56IC0gdGhpcy56ICkgKiBhbHBoYTtcblx0XHR0aGlzLncgKz0gKCB2LncgLSB0aGlzLncgKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnBWZWN0b3JzKCB2MSwgdjIsIGFscGhhICkge1xuXG5cdFx0dGhpcy54ID0gdjEueCArICggdjIueCAtIHYxLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSA9IHYxLnkgKyAoIHYyLnkgLSB2MS55ICkgKiBhbHBoYTtcblx0XHR0aGlzLnogPSB2MS56ICsgKCB2Mi56IC0gdjEueiApICogYWxwaGE7XG5cdFx0dGhpcy53ID0gdjEudyArICggdjIudyAtIHYxLncgKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggdiApIHtcblxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgJiYgKCB2LnogPT09IHRoaXMueiApICYmICggdi53ID09PSB0aGlzLncgKSApO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0dGhpcy54ID0gYXJyYXlbIG9mZnNldCBdO1xuXHRcdHRoaXMueSA9IGFycmF5WyBvZmZzZXQgKyAxIF07XG5cdFx0dGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTtcblx0XHR0aGlzLncgPSBhcnJheVsgb2Zmc2V0ICsgMyBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMueTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLnc7XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHtcblxuXHRcdGlmICggb2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTtcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WiggaW5kZXggKTtcblx0XHR0aGlzLncgPSBhdHRyaWJ1dGUuZ2V0VyggaW5kZXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYW5kb20oKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMueSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy56ID0gTWF0aC5yYW5kb20oKTtcblx0XHR0aGlzLncgPSBNYXRoLnJhbmRvbSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdCpbIFN5bWJvbC5pdGVyYXRvciBdKCkge1xuXG5cdFx0eWllbGQgdGhpcy54O1xuXHRcdHlpZWxkIHRoaXMueTtcblx0XHR5aWVsZCB0aGlzLno7XG5cdFx0eWllbGQgdGhpcy53O1xuXG5cdH1cblxufVxuXG5WZWN0b3I0LnByb3RvdHlwZS5pc1ZlY3RvcjQgPSB0cnVlO1xuXG4vKlxuIEluIG9wdGlvbnMsIHdlIGNhbiBzcGVjaWZ5OlxuICogVGV4dHVyZSBwYXJhbWV0ZXJzIGZvciBhbiBhdXRvLWdlbmVyYXRlZCB0YXJnZXQgdGV4dHVyZVxuICogZGVwdGhCdWZmZXIvc3RlbmNpbEJ1ZmZlcjogQm9vbGVhbnMgdG8gaW5kaWNhdGUgaWYgd2Ugc2hvdWxkIGdlbmVyYXRlIHRoZXNlIGJ1ZmZlcnNcbiovXG5jbGFzcyBXZWJHTFJlbmRlclRhcmdldCBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cblx0Y29uc3RydWN0b3IoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgPSB7fSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0dGhpcy5kZXB0aCA9IDE7XG5cblx0XHR0aGlzLnNjaXNzb3IgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXHRcdHRoaXMuc2Npc3NvclRlc3QgPSBmYWxzZTtcblxuXHRcdHRoaXMudmlld3BvcnQgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gbmV3IFRleHR1cmUoIHVuZGVmaW5lZCwgb3B0aW9ucy5tYXBwaW5nLCBvcHRpb25zLndyYXBTLCBvcHRpb25zLndyYXBULCBvcHRpb25zLm1hZ0ZpbHRlciwgb3B0aW9ucy5taW5GaWx0ZXIsIG9wdGlvbnMuZm9ybWF0LCBvcHRpb25zLnR5cGUsIG9wdGlvbnMuYW5pc290cm9weSwgb3B0aW9ucy5lbmNvZGluZyApO1xuXHRcdHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPSB0cnVlO1xuXG5cdFx0dGhpcy50ZXh0dXJlLmltYWdlID0geyB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LCBkZXB0aDogMSB9O1xuXG5cdFx0dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmdlbmVyYXRlTWlwbWFwcyA6IGZhbHNlO1xuXHRcdHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCA9IG9wdGlvbnMuaW50ZXJuYWxGb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJuYWxGb3JtYXQgOiBudWxsO1xuXHRcdHRoaXMudGV4dHVyZS5taW5GaWx0ZXIgPSBvcHRpb25zLm1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW5GaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cblx0XHR0aGlzLmRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aEJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aEJ1ZmZlciA6IHRydWU7XG5cdFx0dGhpcy5zdGVuY2lsQnVmZmVyID0gb3B0aW9ucy5zdGVuY2lsQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgOiBmYWxzZTtcblx0XHR0aGlzLmRlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoVGV4dHVyZSA6IG51bGw7XG5cblx0fVxuXG5cdHNldFRleHR1cmUoIHRleHR1cmUgKSB7XG5cblx0XHR0ZXh0dXJlLmltYWdlID0ge1xuXHRcdFx0d2lkdGg6IHRoaXMud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuXHRcdFx0ZGVwdGg6IHRoaXMuZGVwdGhcblx0XHR9O1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuXHR9XG5cblx0c2V0U2l6ZSggd2lkdGgsIGhlaWdodCwgZGVwdGggPSAxICkge1xuXG5cdFx0aWYgKCB0aGlzLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuZGVwdGggIT09IGRlcHRoICkge1xuXG5cdFx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdHRoaXMuZGVwdGggPSBkZXB0aDtcblxuXHRcdFx0dGhpcy50ZXh0dXJlLmltYWdlLndpZHRoID0gd2lkdGg7XG5cdFx0XHR0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdFx0dGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoID0gZGVwdGg7XG5cblx0XHRcdHRoaXMuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3cG9ydC5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblx0XHR0aGlzLnNjaXNzb3Iuc2V0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gc291cmNlLmRlcHRoO1xuXG5cdFx0dGhpcy52aWV3cG9ydC5jb3B5KCBzb3VyY2Uudmlld3BvcnQgKTtcblxuXHRcdHRoaXMudGV4dHVyZSA9IHNvdXJjZS50ZXh0dXJlLmNsb25lKCk7XG5cblx0XHQvLyBlbnN1cmUgaW1hZ2Ugb2JqZWN0IGlzIG5vdCBzaGFyZWQsIHNlZSAjMjAzMjhcblxuXHRcdHRoaXMudGV4dHVyZS5pbWFnZSA9IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UudGV4dHVyZS5pbWFnZSApO1xuXG5cdFx0dGhpcy5kZXB0aEJ1ZmZlciA9IHNvdXJjZS5kZXB0aEJ1ZmZlcjtcblx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIgPSBzb3VyY2Uuc3RlbmNpbEJ1ZmZlcjtcblx0XHR0aGlzLmRlcHRoVGV4dHVyZSA9IHNvdXJjZS5kZXB0aFRleHR1cmU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApO1xuXG5cdH1cblxufVxuXG5XZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldCA9IHRydWU7XG5cbmNsYXNzIFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGV4dGVuZHMgV2ViR0xSZW5kZXJUYXJnZXQge1xuXG5cdGNvbnN0cnVjdG9yKCB3aWR0aCwgaGVpZ2h0LCBjb3VudCApIHtcblxuXHRcdHN1cGVyKCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy50ZXh0dXJlWyBpIF0gPSB0ZXh0dXJlLmNsb25lKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldFNpemUoIHdpZHRoLCBoZWlnaHQsIGRlcHRoID0gMSApIHtcblxuXHRcdGlmICggdGhpcy53aWR0aCAhPT0gd2lkdGggfHwgdGhpcy5oZWlnaHQgIT09IGhlaWdodCB8fCB0aGlzLmRlcHRoICE9PSBkZXB0aCApIHtcblxuXHRcdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0aGlzLnRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0dGhpcy50ZXh0dXJlWyBpIF0uaW1hZ2Uud2lkdGggPSB3aWR0aDtcblx0XHRcdFx0dGhpcy50ZXh0dXJlWyBpIF0uaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdFx0XHR0aGlzLnRleHR1cmVbIGkgXS5pbWFnZS5kZXB0aCA9IGRlcHRoO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3cG9ydC5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblx0XHR0aGlzLnNjaXNzb3Iuc2V0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0dGhpcy5kaXNwb3NlKCk7XG5cblx0XHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblx0XHR0aGlzLmRlcHRoID0gc291cmNlLmRlcHRoO1xuXG5cdFx0dGhpcy52aWV3cG9ydC5zZXQoIDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0ICk7XG5cdFx0dGhpcy5zY2lzc29yLnNldCggMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQgKTtcblxuXHRcdHRoaXMuZGVwdGhCdWZmZXIgPSBzb3VyY2UuZGVwdGhCdWZmZXI7XG5cdFx0dGhpcy5zdGVuY2lsQnVmZmVyID0gc291cmNlLnN0ZW5jaWxCdWZmZXI7XG5cdFx0dGhpcy5kZXB0aFRleHR1cmUgPSBzb3VyY2UuZGVwdGhUZXh0dXJlO1xuXG5cdFx0dGhpcy50ZXh0dXJlLmxlbmd0aCA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gc291cmNlLnRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMudGV4dHVyZVsgaSBdID0gc291cmNlLnRleHR1cmVbIGkgXS5jbG9uZSgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbldlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID0gdHJ1ZTtcblxuY2xhc3MgV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBleHRlbmRzIFdlYkdMUmVuZGVyVGFyZ2V0IHtcblxuXHRjb25zdHJ1Y3Rvciggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyA9IHt9ICkge1xuXG5cdFx0c3VwZXIoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKTtcblxuXHRcdHRoaXMuc2FtcGxlcyA9IDQ7XG5cblx0XHR0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5ID0gb3B0aW9ucy5pZ25vcmVEZXB0aCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pZ25vcmVEZXB0aCA6IHRydWU7XG5cdFx0dGhpcy51c2VSZW5kZXJUb1RleHR1cmUgPSAoIG9wdGlvbnMudXNlUmVuZGVyVG9UZXh0dXJlICE9PSB1bmRlZmluZWQgKSA/IG9wdGlvbnMudXNlUmVuZGVyVG9UZXh0dXJlIDogZmFsc2U7XG5cdFx0dGhpcy51c2VSZW5kZXJidWZmZXIgPSB0aGlzLnVzZVJlbmRlclRvVGV4dHVyZSA9PT0gZmFsc2U7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7XG5cblx0XHR0aGlzLnNhbXBsZXMgPSBzb3VyY2Uuc2FtcGxlcztcblx0XHR0aGlzLnVzZVJlbmRlclRvVGV4dHVyZSA9IHNvdXJjZS51c2VSZW5kZXJUb1RleHR1cmU7XG5cdFx0dGhpcy51c2VSZW5kZXJidWZmZXIgPSBzb3VyY2UudXNlUmVuZGVyYnVmZmVyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA9IHRydWU7XG5cbmNsYXNzIFF1YXRlcm5pb24ge1xuXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMSApIHtcblxuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX3cgPSB3O1xuXG5cdH1cblxuXHRzdGF0aWMgc2xlcnAoIHFhLCBxYiwgcW0sIHQgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuJyApO1xuXHRcdHJldHVybiBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKTtcblxuXHR9XG5cblx0c3RhdGljIHNsZXJwRmxhdCggZHN0LCBkc3RPZmZzZXQsIHNyYzAsIHNyY09mZnNldDAsIHNyYzEsIHNyY09mZnNldDEsIHQgKSB7XG5cblx0XHQvLyBmdXp6LWZyZWUsIGFycmF5LWJhc2VkIFF1YXRlcm5pb24gU0xFUlAgb3BlcmF0aW9uXG5cblx0XHRsZXQgeDAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMCBdLFxuXHRcdFx0eTAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMSBdLFxuXHRcdFx0ejAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMiBdLFxuXHRcdFx0dzAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMyBdO1xuXG5cdFx0Y29uc3QgeDEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMCBdLFxuXHRcdFx0eTEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMSBdLFxuXHRcdFx0ejEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMiBdLFxuXHRcdFx0dzEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMyBdO1xuXG5cdFx0aWYgKCB0ID09PSAwICkge1xuXG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDAgXSA9IHgwO1xuXHRcdFx0ZHN0WyBkc3RPZmZzZXQgKyAxIF0gPSB5MDtcblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMiBdID0gejA7XG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDMgXSA9IHcwO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0ID09PSAxICkge1xuXG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDAgXSA9IHgxO1xuXHRcdFx0ZHN0WyBkc3RPZmZzZXQgKyAxIF0gPSB5MTtcblx0XHRcdGRzdFsgZHN0T2Zmc2V0ICsgMiBdID0gejE7XG5cdFx0XHRkc3RbIGRzdE9mZnNldCArIDMgXSA9IHcxO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB3MCAhPT0gdzEgfHwgeDAgIT09IHgxIHx8IHkwICE9PSB5MSB8fCB6MCAhPT0gejEgKSB7XG5cblx0XHRcdGxldCBzID0gMSAtIHQ7XG5cdFx0XHRjb25zdCBjb3MgPSB4MCAqIHgxICsgeTAgKiB5MSArIHowICogejEgKyB3MCAqIHcxLFxuXHRcdFx0XHRkaXIgPSAoIGNvcyA+PSAwID8gMSA6IC0gMSApLFxuXHRcdFx0XHRzcXJTaW4gPSAxIC0gY29zICogY29zO1xuXG5cdFx0XHQvLyBTa2lwIHRoZSBTbGVycCBmb3IgdGlueSBzdGVwcyB0byBhdm9pZCBudW1lcmljIHByb2JsZW1zOlxuXHRcdFx0aWYgKCBzcXJTaW4gPiBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNxcnQoIHNxclNpbiApLFxuXHRcdFx0XHRcdGxlbiA9IE1hdGguYXRhbjIoIHNpbiwgY29zICogZGlyICk7XG5cblx0XHRcdFx0cyA9IE1hdGguc2luKCBzICogbGVuICkgLyBzaW47XG5cdFx0XHRcdHQgPSBNYXRoLnNpbiggdCAqIGxlbiApIC8gc2luO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHREaXIgPSB0ICogZGlyO1xuXG5cdFx0XHR4MCA9IHgwICogcyArIHgxICogdERpcjtcblx0XHRcdHkwID0geTAgKiBzICsgeTEgKiB0RGlyO1xuXHRcdFx0ejAgPSB6MCAqIHMgKyB6MSAqIHREaXI7XG5cdFx0XHR3MCA9IHcwICogcyArIHcxICogdERpcjtcblxuXHRcdFx0Ly8gTm9ybWFsaXplIGluIGNhc2Ugd2UganVzdCBkaWQgYSBsZXJwOlxuXHRcdFx0aWYgKCBzID09PSAxIC0gdCApIHtcblxuXHRcdFx0XHRjb25zdCBmID0gMSAvIE1hdGguc3FydCggeDAgKiB4MCArIHkwICogeTAgKyB6MCAqIHowICsgdzAgKiB3MCApO1xuXG5cdFx0XHRcdHgwICo9IGY7XG5cdFx0XHRcdHkwICo9IGY7XG5cdFx0XHRcdHowICo9IGY7XG5cdFx0XHRcdHcwICo9IGY7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGRzdFsgZHN0T2Zmc2V0IF0gPSB4MDtcblx0XHRkc3RbIGRzdE9mZnNldCArIDEgXSA9IHkwO1xuXHRcdGRzdFsgZHN0T2Zmc2V0ICsgMiBdID0gejA7XG5cdFx0ZHN0WyBkc3RPZmZzZXQgKyAzIF0gPSB3MDtcblxuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KCBkc3QsIGRzdE9mZnNldCwgc3JjMCwgc3JjT2Zmc2V0MCwgc3JjMSwgc3JjT2Zmc2V0MSApIHtcblxuXHRcdGNvbnN0IHgwID0gc3JjMFsgc3JjT2Zmc2V0MCBdO1xuXHRcdGNvbnN0IHkwID0gc3JjMFsgc3JjT2Zmc2V0MCArIDEgXTtcblx0XHRjb25zdCB6MCA9IHNyYzBbIHNyY09mZnNldDAgKyAyIF07XG5cdFx0Y29uc3QgdzAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMyBdO1xuXG5cdFx0Y29uc3QgeDEgPSBzcmMxWyBzcmNPZmZzZXQxIF07XG5cdFx0Y29uc3QgeTEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMSBdO1xuXHRcdGNvbnN0IHoxID0gc3JjMVsgc3JjT2Zmc2V0MSArIDIgXTtcblx0XHRjb25zdCB3MSA9IHNyYzFbIHNyY09mZnNldDEgKyAzIF07XG5cblx0XHRkc3RbIGRzdE9mZnNldCBdID0geDAgKiB3MSArIHcwICogeDEgKyB5MCAqIHoxIC0gejAgKiB5MTtcblx0XHRkc3RbIGRzdE9mZnNldCArIDEgXSA9IHkwICogdzEgKyB3MCAqIHkxICsgejAgKiB4MSAtIHgwICogejE7XG5cdFx0ZHN0WyBkc3RPZmZzZXQgKyAyIF0gPSB6MCAqIHcxICsgdzAgKiB6MSArIHgwICogeTEgLSB5MCAqIHgxO1xuXHRcdGRzdFsgZHN0T2Zmc2V0ICsgMyBdID0gdzAgKiB3MSAtIHgwICogeDEgLSB5MCAqIHkxIC0gejAgKiB6MTtcblxuXHRcdHJldHVybiBkc3Q7XG5cblx0fVxuXG5cdGdldCB4KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3g7XG5cblx0fVxuXG5cdHNldCB4KCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuX3ggPSB2YWx1ZTtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0fVxuXG5cdGdldCB5KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3k7XG5cblx0fVxuXG5cdHNldCB5KCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuX3kgPSB2YWx1ZTtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0fVxuXG5cdGdldCB6KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3o7XG5cblx0fVxuXG5cdHNldCB6KCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuX3ogPSB2YWx1ZTtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0fVxuXG5cdGdldCB3KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX3c7XG5cblx0fVxuXG5cdHNldCB3KCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuX3cgPSB2YWx1ZTtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0fVxuXG5cdHNldCggeCwgeSwgeiwgdyApIHtcblxuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX3cgPSB3O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl93ICk7XG5cblx0fVxuXG5cdGNvcHkoIHF1YXRlcm5pb24gKSB7XG5cblx0XHR0aGlzLl94ID0gcXVhdGVybmlvbi54O1xuXHRcdHRoaXMuX3kgPSBxdWF0ZXJuaW9uLnk7XG5cdFx0dGhpcy5feiA9IHF1YXRlcm5pb24uejtcblx0XHR0aGlzLl93ID0gcXVhdGVybmlvbi53O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21FdWxlciggZXVsZXIsIHVwZGF0ZSApIHtcblxuXHRcdGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgeCA9IGV1bGVyLl94LCB5ID0gZXVsZXIuX3ksIHogPSBldWxlci5feiwgb3JkZXIgPSBldWxlci5fb3JkZXI7XG5cblx0XHQvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXG5cdFx0Ly8gXHQyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cblx0XHQvL1x0Y29udGVudC9TcGluQ2FsYy5tXG5cblx0XHRjb25zdCBjb3MgPSBNYXRoLmNvcztcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbjtcblxuXHRcdGNvbnN0IGMxID0gY29zKCB4IC8gMiApO1xuXHRcdGNvbnN0IGMyID0gY29zKCB5IC8gMiApO1xuXHRcdGNvbnN0IGMzID0gY29zKCB6IC8gMiApO1xuXG5cdFx0Y29uc3QgczEgPSBzaW4oIHggLyAyICk7XG5cdFx0Y29uc3QgczIgPSBzaW4oIHkgLyAyICk7XG5cdFx0Y29uc3QgczMgPSBzaW4oIHogLyAyICk7XG5cblx0XHRzd2l0Y2ggKCBvcmRlciApIHtcblxuXHRcdFx0Y2FzZSAnWFlaJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1lYWic6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWFknOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWllYJzpcblx0XHRcdFx0dGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcblx0XHRcdFx0dGhpcy5feSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcblx0XHRcdFx0dGhpcy5feiA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcblx0XHRcdFx0dGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1laWCc6XG5cdFx0XHRcdHRoaXMuX3ggPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XG5cdFx0XHRcdHRoaXMuX3kgPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG5cdFx0XHRcdHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XG5cdFx0XHRcdHRoaXMuX3cgPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdYWlknOlxuXHRcdFx0XHR0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuXHRcdFx0XHR0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xuXHRcdFx0XHR0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICcgKyBvcmRlciApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1cGRhdGUgIT09IGZhbHNlICkgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICkge1xuXG5cdFx0Ly8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL2FuZ2xlVG9RdWF0ZXJuaW9uL2luZGV4Lmh0bVxuXG5cdFx0Ly8gYXNzdW1lcyBheGlzIGlzIG5vcm1hbGl6ZWRcblxuXHRcdGNvbnN0IGhhbGZBbmdsZSA9IGFuZ2xlIC8gMiwgcyA9IE1hdGguc2luKCBoYWxmQW5nbGUgKTtcblxuXHRcdHRoaXMuX3ggPSBheGlzLnggKiBzO1xuXHRcdHRoaXMuX3kgPSBheGlzLnkgKiBzO1xuXHRcdHRoaXMuX3ogPSBheGlzLnogKiBzO1xuXHRcdHRoaXMuX3cgPSBNYXRoLmNvcyggaGFsZkFuZ2xlICk7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtICkge1xuXG5cdFx0Ly8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL21hdHJpeFRvUXVhdGVybmlvbi9pbmRleC5odG1cblxuXHRcdC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG5cblx0XHRjb25zdCB0ZSA9IG0uZWxlbWVudHMsXG5cblx0XHRcdG0xMSA9IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF0sXG5cdFx0XHRtMjEgPSB0ZVsgMSBdLCBtMjIgPSB0ZVsgNSBdLCBtMjMgPSB0ZVsgOSBdLFxuXHRcdFx0bTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF0sXG5cblx0XHRcdHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xuXG5cdFx0aWYgKCB0cmFjZSA+IDAgKSB7XG5cblx0XHRcdGNvbnN0IHMgPSAwLjUgLyBNYXRoLnNxcnQoIHRyYWNlICsgMS4wICk7XG5cblx0XHRcdHRoaXMuX3cgPSAwLjI1IC8gcztcblx0XHRcdHRoaXMuX3ggPSAoIG0zMiAtIG0yMyApICogcztcblx0XHRcdHRoaXMuX3kgPSAoIG0xMyAtIG0zMSApICogcztcblx0XHRcdHRoaXMuX3ogPSAoIG0yMSAtIG0xMiApICogcztcblxuXHRcdH0gZWxzZSBpZiAoIG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMgKSB7XG5cblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoIDEuMCArIG0xMSAtIG0yMiAtIG0zMyApO1xuXG5cdFx0XHR0aGlzLl93ID0gKCBtMzIgLSBtMjMgKSAvIHM7XG5cdFx0XHR0aGlzLl94ID0gMC4yNSAqIHM7XG5cdFx0XHR0aGlzLl95ID0gKCBtMTIgKyBtMjEgKSAvIHM7XG5cdFx0XHR0aGlzLl96ID0gKCBtMTMgKyBtMzEgKSAvIHM7XG5cblx0XHR9IGVsc2UgaWYgKCBtMjIgPiBtMzMgKSB7XG5cblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoIDEuMCArIG0yMiAtIG0xMSAtIG0zMyApO1xuXG5cdFx0XHR0aGlzLl93ID0gKCBtMTMgLSBtMzEgKSAvIHM7XG5cdFx0XHR0aGlzLl94ID0gKCBtMTIgKyBtMjEgKSAvIHM7XG5cdFx0XHR0aGlzLl95ID0gMC4yNSAqIHM7XG5cdFx0XHR0aGlzLl96ID0gKCBtMjMgKyBtMzIgKSAvIHM7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KCAxLjAgKyBtMzMgLSBtMTEgLSBtMjIgKTtcblxuXHRcdFx0dGhpcy5fdyA9ICggbTIxIC0gbTEyICkgLyBzO1xuXHRcdFx0dGhpcy5feCA9ICggbTEzICsgbTMxICkgLyBzO1xuXHRcdFx0dGhpcy5feSA9ICggbTIzICsgbTMyICkgLyBzO1xuXHRcdFx0dGhpcy5feiA9IDAuMjUgKiBzO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Vbml0VmVjdG9ycyggdkZyb20sIHZUbyApIHtcblxuXHRcdC8vIGFzc3VtZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZFxuXG5cdFx0bGV0IHIgPSB2RnJvbS5kb3QoIHZUbyApICsgMTtcblxuXHRcdGlmICggciA8IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHQvLyB2RnJvbSBhbmQgdlRvIHBvaW50IGluIG9wcG9zaXRlIGRpcmVjdGlvbnNcblxuXHRcdFx0ciA9IDA7XG5cblx0XHRcdGlmICggTWF0aC5hYnMoIHZGcm9tLnggKSA+IE1hdGguYWJzKCB2RnJvbS56ICkgKSB7XG5cblx0XHRcdFx0dGhpcy5feCA9IC0gdkZyb20ueTtcblx0XHRcdFx0dGhpcy5feSA9IHZGcm9tLng7XG5cdFx0XHRcdHRoaXMuX3ogPSAwO1xuXHRcdFx0XHR0aGlzLl93ID0gcjtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0aGlzLl94ID0gMDtcblx0XHRcdFx0dGhpcy5feSA9IC0gdkZyb20uejtcblx0XHRcdFx0dGhpcy5feiA9IHZGcm9tLnk7XG5cdFx0XHRcdHRoaXMuX3cgPSByO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzXG5cblx0XHRcdHRoaXMuX3ggPSB2RnJvbS55ICogdlRvLnogLSB2RnJvbS56ICogdlRvLnk7XG5cdFx0XHR0aGlzLl95ID0gdkZyb20ueiAqIHZUby54IC0gdkZyb20ueCAqIHZUby56O1xuXHRcdFx0dGhpcy5feiA9IHZGcm9tLnggKiB2VG8ueSAtIHZGcm9tLnkgKiB2VG8ueDtcblx0XHRcdHRoaXMuX3cgPSByO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCk7XG5cblx0fVxuXG5cdGFuZ2xlVG8oIHEgKSB7XG5cblx0XHRyZXR1cm4gMiAqIE1hdGguYWNvcyggTWF0aC5hYnMoIGNsYW1wKCB0aGlzLmRvdCggcSApLCAtIDEsIDEgKSApICk7XG5cblx0fVxuXG5cdHJvdGF0ZVRvd2FyZHMoIHEsIHN0ZXAgKSB7XG5cblx0XHRjb25zdCBhbmdsZSA9IHRoaXMuYW5nbGVUbyggcSApO1xuXG5cdFx0aWYgKCBhbmdsZSA9PT0gMCApIHJldHVybiB0aGlzO1xuXG5cdFx0Y29uc3QgdCA9IE1hdGgubWluKCAxLCBzdGVwIC8gYW5nbGUgKTtcblxuXHRcdHRoaXMuc2xlcnAoIHEsIHQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpZGVudGl0eSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnNldCggMCwgMCwgMCwgMSApO1xuXG5cdH1cblxuXHRpbnZlcnQoKSB7XG5cblx0XHQvLyBxdWF0ZXJuaW9uIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aFxuXG5cdFx0cmV0dXJuIHRoaXMuY29uanVnYXRlKCk7XG5cblx0fVxuXG5cdGNvbmp1Z2F0ZSgpIHtcblxuXHRcdHRoaXMuX3ggKj0gLSAxO1xuXHRcdHRoaXMuX3kgKj0gLSAxO1xuXHRcdHRoaXMuX3ogKj0gLSAxO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRvdCggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLl94ICogdi5feCArIHRoaXMuX3kgKiB2Ll95ICsgdGhpcy5feiAqIHYuX3ogKyB0aGlzLl93ICogdi5fdztcblxuXHR9XG5cblx0bGVuZ3RoU3EoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5feCAqIHRoaXMuX3ggKyB0aGlzLl95ICogdGhpcy5feSArIHRoaXMuX3ogKiB0aGlzLl96ICsgdGhpcy5fdyAqIHRoaXMuX3c7XG5cblx0fVxuXG5cdGxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMuX3ggKiB0aGlzLl94ICsgdGhpcy5feSAqIHRoaXMuX3kgKyB0aGlzLl96ICogdGhpcy5feiArIHRoaXMuX3cgKiB0aGlzLl93ICk7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblxuXHRcdGxldCBsID0gdGhpcy5sZW5ndGgoKTtcblxuXHRcdGlmICggbCA9PT0gMCApIHtcblxuXHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHR0aGlzLl95ID0gMDtcblx0XHRcdHRoaXMuX3ogPSAwO1xuXHRcdFx0dGhpcy5fdyA9IDE7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRsID0gMSAvIGw7XG5cblx0XHRcdHRoaXMuX3ggPSB0aGlzLl94ICogbDtcblx0XHRcdHRoaXMuX3kgPSB0aGlzLl95ICogbDtcblx0XHRcdHRoaXMuX3ogPSB0aGlzLl96ICogbDtcblx0XHRcdHRoaXMuX3cgPSB0aGlzLl93ICogbDtcblxuXHRcdH1cblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseSggcSwgcCApIHtcblxuXHRcdGlmICggcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKCBxLCBwICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKCB0aGlzLCBxICk7XG5cblx0fVxuXG5cdHByZW11bHRpcGx5KCBxICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyggcSwgdGhpcyApO1xuXG5cdH1cblxuXHRtdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkge1xuXG5cdFx0Ly8gZnJvbSBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL3JlYWxOb3JtZWRBbGdlYnJhL3F1YXRlcm5pb25zL2NvZGUvaW5kZXguaHRtXG5cblx0XHRjb25zdCBxYXggPSBhLl94LCBxYXkgPSBhLl95LCBxYXogPSBhLl96LCBxYXcgPSBhLl93O1xuXHRcdGNvbnN0IHFieCA9IGIuX3gsIHFieSA9IGIuX3ksIHFieiA9IGIuX3osIHFidyA9IGIuX3c7XG5cblx0XHR0aGlzLl94ID0gcWF4ICogcWJ3ICsgcWF3ICogcWJ4ICsgcWF5ICogcWJ6IC0gcWF6ICogcWJ5O1xuXHRcdHRoaXMuX3kgPSBxYXkgKiBxYncgKyBxYXcgKiBxYnkgKyBxYXogKiBxYnggLSBxYXggKiBxYno7XG5cdFx0dGhpcy5feiA9IHFheiAqIHFidyArIHFhdyAqIHFieiArIHFheCAqIHFieSAtIHFheSAqIHFieDtcblx0XHR0aGlzLl93ID0gcWF3ICogcWJ3IC0gcWF4ICogcWJ4IC0gcWF5ICogcWJ5IC0gcWF6ICogcWJ6O1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNsZXJwKCBxYiwgdCApIHtcblxuXHRcdGlmICggdCA9PT0gMCApIHJldHVybiB0aGlzO1xuXHRcdGlmICggdCA9PT0gMSApIHJldHVybiB0aGlzLmNvcHkoIHFiICk7XG5cblx0XHRjb25zdCB4ID0gdGhpcy5feCwgeSA9IHRoaXMuX3ksIHogPSB0aGlzLl96LCB3ID0gdGhpcy5fdztcblxuXHRcdC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvcmVhbE5vcm1lZEFsZ2VicmEvcXVhdGVybmlvbnMvc2xlcnAvXG5cblx0XHRsZXQgY29zSGFsZlRoZXRhID0gdyAqIHFiLl93ICsgeCAqIHFiLl94ICsgeSAqIHFiLl95ICsgeiAqIHFiLl96O1xuXG5cdFx0aWYgKCBjb3NIYWxmVGhldGEgPCAwICkge1xuXG5cdFx0XHR0aGlzLl93ID0gLSBxYi5fdztcblx0XHRcdHRoaXMuX3ggPSAtIHFiLl94O1xuXHRcdFx0dGhpcy5feSA9IC0gcWIuX3k7XG5cdFx0XHR0aGlzLl96ID0gLSBxYi5fejtcblxuXHRcdFx0Y29zSGFsZlRoZXRhID0gLSBjb3NIYWxmVGhldGE7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmNvcHkoIHFiICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGNvc0hhbGZUaGV0YSA+PSAxLjAgKSB7XG5cblx0XHRcdHRoaXMuX3cgPSB3O1xuXHRcdFx0dGhpcy5feCA9IHg7XG5cdFx0XHR0aGlzLl95ID0geTtcblx0XHRcdHRoaXMuX3ogPSB6O1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH1cblxuXHRcdGNvbnN0IHNxclNpbkhhbGZUaGV0YSA9IDEuMCAtIGNvc0hhbGZUaGV0YSAqIGNvc0hhbGZUaGV0YTtcblxuXHRcdGlmICggc3FyU2luSGFsZlRoZXRhIDw9IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRjb25zdCBzID0gMSAtIHQ7XG5cdFx0XHR0aGlzLl93ID0gcyAqIHcgKyB0ICogdGhpcy5fdztcblx0XHRcdHRoaXMuX3ggPSBzICogeCArIHQgKiB0aGlzLl94O1xuXHRcdFx0dGhpcy5feSA9IHMgKiB5ICsgdCAqIHRoaXMuX3k7XG5cdFx0XHR0aGlzLl96ID0gcyAqIHogKyB0ICogdGhpcy5fejtcblxuXHRcdFx0dGhpcy5ub3JtYWxpemUoKTtcblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9XG5cblx0XHRjb25zdCBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoIHNxclNpbkhhbGZUaGV0YSApO1xuXHRcdGNvbnN0IGhhbGZUaGV0YSA9IE1hdGguYXRhbjIoIHNpbkhhbGZUaGV0YSwgY29zSGFsZlRoZXRhICk7XG5cdFx0Y29uc3QgcmF0aW9BID0gTWF0aC5zaW4oICggMSAtIHQgKSAqIGhhbGZUaGV0YSApIC8gc2luSGFsZlRoZXRhLFxuXHRcdFx0cmF0aW9CID0gTWF0aC5zaW4oIHQgKiBoYWxmVGhldGEgKSAvIHNpbkhhbGZUaGV0YTtcblxuXHRcdHRoaXMuX3cgPSAoIHcgKiByYXRpb0EgKyB0aGlzLl93ICogcmF0aW9CICk7XG5cdFx0dGhpcy5feCA9ICggeCAqIHJhdGlvQSArIHRoaXMuX3ggKiByYXRpb0IgKTtcblx0XHR0aGlzLl95ID0gKCB5ICogcmF0aW9BICsgdGhpcy5feSAqIHJhdGlvQiApO1xuXHRcdHRoaXMuX3ogPSAoIHogKiByYXRpb0EgKyB0aGlzLl96ICogcmF0aW9CICk7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuY29weSggcWEgKS5zbGVycCggcWIsIHQgKTtcblxuXHR9XG5cblx0cmFuZG9tKCkge1xuXG5cdFx0Ly8gRGVyaXZlZCBmcm9tIGh0dHA6Ly9wbGFubmluZy5jcy51aXVjLmVkdS9ub2RlMTk4Lmh0bWxcblx0XHQvLyBOb3RlLCB0aGlzIHNvdXJjZSB1c2VzIHcsIHgsIHksIHogb3JkZXJpbmcsXG5cdFx0Ly8gc28gd2Ugc3dhcCB0aGUgb3JkZXIgYmVsb3cuXG5cblx0XHRjb25zdCB1MSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0Y29uc3Qgc3FydDF1MSA9IE1hdGguc3FydCggMSAtIHUxICk7XG5cdFx0Y29uc3Qgc3FydHUxID0gTWF0aC5zcXJ0KCB1MSApO1xuXG5cdFx0Y29uc3QgdTIgPSAyICogTWF0aC5QSSAqIE1hdGgucmFuZG9tKCk7XG5cblx0XHRjb25zdCB1MyA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcblxuXHRcdHJldHVybiB0aGlzLnNldChcblx0XHRcdHNxcnQxdTEgKiBNYXRoLmNvcyggdTIgKSxcblx0XHRcdHNxcnR1MSAqIE1hdGguc2luKCB1MyApLFxuXHRcdFx0c3FydHUxICogTWF0aC5jb3MoIHUzICksXG5cdFx0XHRzcXJ0MXUxICogTWF0aC5zaW4oIHUyICksXG5cdFx0KTtcblxuXHR9XG5cblx0ZXF1YWxzKCBxdWF0ZXJuaW9uICkge1xuXG5cdFx0cmV0dXJuICggcXVhdGVybmlvbi5feCA9PT0gdGhpcy5feCApICYmICggcXVhdGVybmlvbi5feSA9PT0gdGhpcy5feSApICYmICggcXVhdGVybmlvbi5feiA9PT0gdGhpcy5feiApICYmICggcXVhdGVybmlvbi5fdyA9PT0gdGhpcy5fdyApO1xuXG5cdH1cblxuXHRmcm9tQXJyYXkoIGFycmF5LCBvZmZzZXQgPSAwICkge1xuXG5cdFx0dGhpcy5feCA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLl95ID0gYXJyYXlbIG9mZnNldCArIDEgXTtcblx0XHR0aGlzLl96ID0gYXJyYXlbIG9mZnNldCArIDIgXTtcblx0XHR0aGlzLl93ID0gYXJyYXlbIG9mZnNldCArIDMgXTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0FycmF5KCBhcnJheSA9IFtdLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0YXJyYXlbIG9mZnNldCBdID0gdGhpcy5feDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy5feTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy5fejtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGhpcy5fdztcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCApIHtcblxuXHRcdHRoaXMuX3ggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTtcblx0XHR0aGlzLl95ID0gYXR0cmlidXRlLmdldFkoIGluZGV4ICk7XG5cdFx0dGhpcy5feiA9IGF0dHJpYnV0ZS5nZXRaKCBpbmRleCApO1xuXHRcdHRoaXMuX3cgPSBhdHRyaWJ1dGUuZ2V0VyggaW5kZXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRfb25DaGFuZ2UoIGNhbGxiYWNrICkge1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdF9vbkNoYW5nZUNhbGxiYWNrKCkge31cblxufVxuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5pc1F1YXRlcm5pb24gPSB0cnVlO1xuXG5jbGFzcyBWZWN0b3IzIHtcblxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwLCB6ID0gMCApIHtcblxuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLnogPSB6O1xuXG5cdH1cblxuXHRzZXQoIHgsIHksIHogKSB7XG5cblx0XHRpZiAoIHogPT09IHVuZGVmaW5lZCApIHogPSB0aGlzLno7IC8vIHNwcml0ZS5zY2FsZS5zZXQoeCx5KVxuXG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggPSBzY2FsYXI7XG5cdFx0dGhpcy55ID0gc2NhbGFyO1xuXHRcdHRoaXMueiA9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYKCB4ICkge1xuXG5cdFx0dGhpcy54ID0geDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRZKCB5ICkge1xuXG5cdFx0dGhpcy55ID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRaKCB6ICkge1xuXG5cdFx0dGhpcy56ID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRDb21wb25lbnQoIGluZGV4LCB2YWx1ZSApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHRoaXMueCA9IHZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgMTogdGhpcy55ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAyOiB0aGlzLnogPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldENvbXBvbmVudCggaW5kZXggKSB7XG5cblx0XHRzd2l0Y2ggKCBpbmRleCApIHtcblxuXHRcdFx0Y2FzZSAwOiByZXR1cm4gdGhpcy54O1xuXHRcdFx0Y2FzZSAxOiByZXR1cm4gdGhpcy55O1xuXHRcdFx0Y2FzZSAyOiByZXR1cm4gdGhpcy56O1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMueCwgdGhpcy55LCB0aGlzLnogKTtcblxuXHR9XG5cblx0Y29weSggdiApIHtcblxuXHRcdHRoaXMueCA9IHYueDtcblx0XHR0aGlzLnkgPSB2Lnk7XG5cdFx0dGhpcy56ID0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZCggdiwgdyApIHtcblxuXHRcdGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkVmVjdG9ycyggdiwgdyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54ICs9IHYueDtcblx0XHR0aGlzLnkgKz0gdi55O1xuXHRcdHRoaXMueiArPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHM7XG5cdFx0dGhpcy55ICs9IHM7XG5cdFx0dGhpcy56ICs9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YWRkVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCArIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgKyBiLnk7XG5cdFx0dGhpcy56ID0gYS56ICsgYi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFkZFNjYWxlZFZlY3RvciggdiwgcyApIHtcblxuXHRcdHRoaXMueCArPSB2LnggKiBzO1xuXHRcdHRoaXMueSArPSB2LnkgKiBzO1xuXHRcdHRoaXMueiArPSB2LnogKiBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN1YiggdiwgdyApIHtcblxuXHRcdGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyggdiwgdyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54IC09IHYueDtcblx0XHR0aGlzLnkgLT0gdi55O1xuXHRcdHRoaXMueiAtPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViU2NhbGFyKCBzICkge1xuXG5cdFx0dGhpcy54IC09IHM7XG5cdFx0dGhpcy55IC09IHM7XG5cdFx0dGhpcy56IC09IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3ViVmVjdG9ycyggYSwgYiApIHtcblxuXHRcdHRoaXMueCA9IGEueCAtIGIueDtcblx0XHR0aGlzLnkgPSBhLnkgLSBiLnk7XG5cdFx0dGhpcy56ID0gYS56IC0gYi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5KCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKj0gdi54O1xuXHRcdHRoaXMueSAqPSB2Lnk7XG5cdFx0dGhpcy56ICo9IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseVNjYWxhciggc2NhbGFyICkge1xuXG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xuXHRcdHRoaXMueiAqPSBzY2FsYXI7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bXVsdGlwbHlWZWN0b3JzKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54ICogYi54O1xuXHRcdHRoaXMueSA9IGEueSAqIGIueTtcblx0XHR0aGlzLnogPSBhLnogKiBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlFdWxlciggZXVsZXIgKSB7XG5cblx0XHRpZiAoICEgKCBldWxlciAmJiBldWxlci5pc0V1bGVyICkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBfcXVhdGVybmlvbiQ0LnNldEZyb21FdWxlciggZXVsZXIgKSApO1xuXG5cdH1cblxuXHRhcHBseUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oIF9xdWF0ZXJuaW9uJDQuc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKSApO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDMoIG0gKSB7XG5cblx0XHRjb25zdCB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdGNvbnN0IGUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGhpcy54ID0gZVsgMCBdICogeCArIGVbIDMgXSAqIHkgKyBlWyA2IF0gKiB6O1xuXHRcdHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgNyBdICogejtcblx0XHR0aGlzLnogPSBlWyAyIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDggXSAqIHo7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlOb3JtYWxNYXRyaXgoIG0gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDMoIG0gKS5ub3JtYWxpemUoKTtcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtICkge1xuXG5cdFx0Y29uc3QgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHRjb25zdCBlID0gbS5lbGVtZW50cztcblxuXHRcdGNvbnN0IHcgPSAxIC8gKCBlWyAzIF0gKiB4ICsgZVsgNyBdICogeSArIGVbIDExIF0gKiB6ICsgZVsgMTUgXSApO1xuXG5cdFx0dGhpcy54ID0gKCBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHogKyBlWyAxMiBdICkgKiB3O1xuXHRcdHRoaXMueSA9ICggZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6ICsgZVsgMTMgXSApICogdztcblx0XHR0aGlzLnogPSAoIGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHogKyBlWyAxNCBdICkgKiB3O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5UXVhdGVybmlvbiggcSApIHtcblxuXHRcdGNvbnN0IHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cdFx0Y29uc3QgcXggPSBxLngsIHF5ID0gcS55LCBxeiA9IHEueiwgcXcgPSBxLnc7XG5cblx0XHQvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuXG5cdFx0Y29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG5cdFx0Y29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG5cdFx0Y29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG5cdFx0Y29uc3QgaXcgPSAtIHF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcblxuXHRcdC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuXHRcdHRoaXMueCA9IGl4ICogcXcgKyBpdyAqIC0gcXggKyBpeSAqIC0gcXogLSBpeiAqIC0gcXk7XG5cdFx0dGhpcy55ID0gaXkgKiBxdyArIGl3ICogLSBxeSArIGl6ICogLSBxeCAtIGl4ICogLSBxejtcblx0XHR0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtIHF6ICsgaXggKiAtIHF5IC0gaXkgKiAtIHF4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHByb2plY3QoIGNhbWVyYSApIHtcblxuXHRcdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApLmFwcGx5TWF0cml4NCggY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKTtcblxuXHR9XG5cblx0dW5wcm9qZWN0KCBjYW1lcmEgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSApLmFwcGx5TWF0cml4NCggY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cblx0fVxuXG5cdHRyYW5zZm9ybURpcmVjdGlvbiggbSApIHtcblxuXHRcdC8vIGlucHV0OiBUSFJFRS5NYXRyaXg0IGFmZmluZSBtYXRyaXhcblx0XHQvLyB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3Rpb25cblxuXHRcdGNvbnN0IHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHo7XG5cdFx0dGhpcy55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6O1xuXHRcdHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHo7XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcblxuXHR9XG5cblx0ZGl2aWRlKCB2ICkge1xuXG5cdFx0dGhpcy54IC89IHYueDtcblx0XHR0aGlzLnkgLz0gdi55O1xuXHRcdHRoaXMueiAvPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGl2aWRlU2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xuXG5cdH1cblxuXHRtaW4oIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbiggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYXgoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGFtcCggbWluLCBtYXggKSB7XG5cblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBNYXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pbi55LCBNYXRoLm1pbiggbWF4LnksIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXBTY2FsYXIoIG1pblZhbCwgbWF4VmFsICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnkgKSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xhbXBMZW5ndGgoIG1pbiwgbWF4ICkge1xuXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3RoICkgKSApO1xuXG5cdH1cblxuXHRmbG9vcigpIHtcblxuXHRcdHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNlaWwoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGguY2VpbCggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gTWF0aC5jZWlsKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyb3VuZCgpIHtcblxuXHRcdHRoaXMueCA9IE1hdGgucm91bmQoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9IE1hdGgucm91bmQoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGgucm91bmQoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdW5kVG9aZXJvKCkge1xuXG5cdFx0dGhpcy54ID0gKCB0aGlzLnggPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueCApIDogTWF0aC5mbG9vciggdGhpcy54ICk7XG5cdFx0dGhpcy55ID0gKCB0aGlzLnkgPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueSApIDogTWF0aC5mbG9vciggdGhpcy55ICk7XG5cdFx0dGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bmVnYXRlKCkge1xuXG5cdFx0dGhpcy54ID0gLSB0aGlzLng7XG5cdFx0dGhpcy55ID0gLSB0aGlzLnk7XG5cdFx0dGhpcy56ID0gLSB0aGlzLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZG90KCB2ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYuejtcblxuXHR9XG5cblx0Ly8gVE9ETyBsZW5ndGhTcXVhcmVkP1xuXG5cdGxlbmd0aFNxKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMuejtcblxuXHR9XG5cblx0bGVuZ3RoKCkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56ICk7XG5cblx0fVxuXG5cdG1hbmhhdHRhbkxlbmd0aCgpIHtcblxuXHRcdHJldHVybiBNYXRoLmFicyggdGhpcy54ICkgKyBNYXRoLmFicyggdGhpcy55ICkgKyBNYXRoLmFicyggdGhpcy56ICk7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSB8fCAxICk7XG5cblx0fVxuXG5cdHNldExlbmd0aCggbGVuZ3RoICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApO1xuXG5cdH1cblxuXHRsZXJwKCB2LCBhbHBoYSApIHtcblxuXHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XG5cdFx0dGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcblx0XHR0aGlzLnogKz0gKCB2LnogLSB0aGlzLnogKSAqIGFscGhhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxlcnBWZWN0b3JzKCB2MSwgdjIsIGFscGhhICkge1xuXG5cdFx0dGhpcy54ID0gdjEueCArICggdjIueCAtIHYxLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSA9IHYxLnkgKyAoIHYyLnkgLSB2MS55ICkgKiBhbHBoYTtcblx0XHR0aGlzLnogPSB2MS56ICsgKCB2Mi56IC0gdjEueiApICogYWxwaGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y3Jvc3MoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdGhpcywgdiApO1xuXG5cdH1cblxuXHRjcm9zc1ZlY3RvcnMoIGEsIGIgKSB7XG5cblx0XHRjb25zdCBheCA9IGEueCwgYXkgPSBhLnksIGF6ID0gYS56O1xuXHRcdGNvbnN0IGJ4ID0gYi54LCBieSA9IGIueSwgYnogPSBiLno7XG5cblx0XHR0aGlzLnggPSBheSAqIGJ6IC0gYXogKiBieTtcblx0XHR0aGlzLnkgPSBheiAqIGJ4IC0gYXggKiBiejtcblx0XHR0aGlzLnogPSBheCAqIGJ5IC0gYXkgKiBieDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRwcm9qZWN0T25WZWN0b3IoIHYgKSB7XG5cblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHYubGVuZ3RoU3EoKTtcblxuXHRcdGlmICggZGVub21pbmF0b3IgPT09IDAgKSByZXR1cm4gdGhpcy5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdGNvbnN0IHNjYWxhciA9IHYuZG90KCB0aGlzICkgLyBkZW5vbWluYXRvcjtcblxuXHRcdHJldHVybiB0aGlzLmNvcHkoIHYgKS5tdWx0aXBseVNjYWxhciggc2NhbGFyICk7XG5cblx0fVxuXG5cdHByb2plY3RPblBsYW5lKCBwbGFuZU5vcm1hbCApIHtcblxuXHRcdF92ZWN0b3IkYy5jb3B5KCB0aGlzICkucHJvamVjdE9uVmVjdG9yKCBwbGFuZU5vcm1hbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuc3ViKCBfdmVjdG9yJGMgKTtcblxuXHR9XG5cblx0cmVmbGVjdCggbm9ybWFsICkge1xuXG5cdFx0Ly8gcmVmbGVjdCBpbmNpZGVudCB2ZWN0b3Igb2ZmIHBsYW5lIG9ydGhvZ29uYWwgdG8gbm9ybWFsXG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aFxuXG5cdFx0cmV0dXJuIHRoaXMuc3ViKCBfdmVjdG9yJGMuY29weSggbm9ybWFsICkubXVsdGlwbHlTY2FsYXIoIDIgKiB0aGlzLmRvdCggbm9ybWFsICkgKSApO1xuXG5cdH1cblxuXHRhbmdsZVRvKCB2ICkge1xuXG5cdFx0Y29uc3QgZGVub21pbmF0b3IgPSBNYXRoLnNxcnQoIHRoaXMubGVuZ3RoU3EoKSAqIHYubGVuZ3RoU3EoKSApO1xuXG5cdFx0aWYgKCBkZW5vbWluYXRvciA9PT0gMCApIHJldHVybiBNYXRoLlBJIC8gMjtcblxuXHRcdGNvbnN0IHRoZXRhID0gdGhpcy5kb3QoIHYgKSAvIGRlbm9taW5hdG9yO1xuXG5cdFx0Ly8gY2xhbXAsIHRvIGhhbmRsZSBudW1lcmljYWwgcHJvYmxlbXNcblxuXHRcdHJldHVybiBNYXRoLmFjb3MoIGNsYW1wKCB0aGV0YSwgLSAxLCAxICkgKTtcblxuXHR9XG5cblx0ZGlzdGFuY2VUbyggdiApIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoIHYgKSApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvU3F1YXJlZCggdiApIHtcblxuXHRcdGNvbnN0IGR4ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueSwgZHogPSB0aGlzLnogLSB2Lno7XG5cblx0XHRyZXR1cm4gZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6O1xuXG5cdH1cblxuXHRtYW5oYXR0YW5EaXN0YW5jZVRvKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguYWJzKCB0aGlzLnggLSB2LnggKSArIE1hdGguYWJzKCB0aGlzLnkgLSB2LnkgKSArIE1hdGguYWJzKCB0aGlzLnogLSB2LnogKTtcblxuXHR9XG5cblx0c2V0RnJvbVNwaGVyaWNhbCggcyApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHMoIHMucmFkaXVzLCBzLnBoaSwgcy50aGV0YSApO1xuXG5cdH1cblxuXHRzZXRGcm9tU3BoZXJpY2FsQ29vcmRzKCByYWRpdXMsIHBoaSwgdGhldGEgKSB7XG5cblx0XHRjb25zdCBzaW5QaGlSYWRpdXMgPSBNYXRoLnNpbiggcGhpICkgKiByYWRpdXM7XG5cblx0XHR0aGlzLnggPSBzaW5QaGlSYWRpdXMgKiBNYXRoLnNpbiggdGhldGEgKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNvcyggcGhpICkgKiByYWRpdXM7XG5cdFx0dGhpcy56ID0gc2luUGhpUmFkaXVzICogTWF0aC5jb3MoIHRoZXRhICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUN5bGluZHJpY2FsKCBjICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKCBjLnJhZGl1cywgYy50aGV0YSwgYy55ICk7XG5cblx0fVxuXG5cdHNldEZyb21DeWxpbmRyaWNhbENvb3JkcyggcmFkaXVzLCB0aGV0YSwgeSApIHtcblxuXHRcdHRoaXMueCA9IHJhZGl1cyAqIE1hdGguc2luKCB0aGV0YSApO1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gcmFkaXVzICogTWF0aC5jb3MoIHRoZXRhICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtICkge1xuXG5cdFx0Y29uc3QgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAxMiBdO1xuXHRcdHRoaXMueSA9IGVbIDEzIF07XG5cdFx0dGhpcy56ID0gZVsgMTQgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tTWF0cml4U2NhbGUoIG0gKSB7XG5cblx0XHRjb25zdCBzeCA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpO1xuXHRcdGNvbnN0IHN5ID0gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7XG5cdFx0Y29uc3Qgc3ogPSB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTtcblxuXHRcdHRoaXMueCA9IHN4O1xuXHRcdHRoaXMueSA9IHN5O1xuXHRcdHRoaXMueiA9IHN6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21NYXRyaXhDb2x1bW4oIG0sIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZnJvbUFycmF5KCBtLmVsZW1lbnRzLCBpbmRleCAqIDQgKTtcblxuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDNDb2x1bW4oIG0sIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZnJvbUFycmF5KCBtLmVsZW1lbnRzLCBpbmRleCAqIDMgKTtcblxuXHR9XG5cblx0ZXF1YWxzKCB2ICkge1xuXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSAmJiAoIHYueiA9PT0gdGhpcy56ICkgKTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdHRoaXMueCA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXHRcdHRoaXMueiA9IGFycmF5WyBvZmZzZXQgKyAyIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGFycmF5WyBvZmZzZXQgXSA9IHRoaXMueDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLno7XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHtcblxuXHRcdGlmICggb2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTtcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTtcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WiggaW5kZXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYW5kb20oKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJhbmRvbSgpO1xuXHRcdHRoaXMueSA9IE1hdGgucmFuZG9tKCk7XG5cdFx0dGhpcy56ID0gTWF0aC5yYW5kb20oKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYW5kb21EaXJlY3Rpb24oKSB7XG5cblx0XHQvLyBEZXJpdmVkIGZyb20gaHR0cHM6Ly9tYXRod29ybGQud29sZnJhbS5jb20vU3BoZXJlUG9pbnRQaWNraW5nLmh0bWxcblxuXHRcdGNvbnN0IHUgPSAoIE1hdGgucmFuZG9tKCkgLSAwLjUgKSAqIDI7XG5cdFx0Y29uc3QgdCA9IE1hdGgucmFuZG9tKCkgKiBNYXRoLlBJICogMjtcblx0XHRjb25zdCBmID0gTWF0aC5zcXJ0KCAxIC0gdSAqKiAyICk7XG5cblx0XHR0aGlzLnggPSBmICogTWF0aC5jb3MoIHQgKTtcblx0XHR0aGlzLnkgPSBmICogTWF0aC5zaW4oIHQgKTtcblx0XHR0aGlzLnogPSB1O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdCpbIFN5bWJvbC5pdGVyYXRvciBdKCkge1xuXG5cdFx0eWllbGQgdGhpcy54O1xuXHRcdHlpZWxkIHRoaXMueTtcblx0XHR5aWVsZCB0aGlzLno7XG5cblx0fVxuXG59XG5cblZlY3RvcjMucHJvdG90eXBlLmlzVmVjdG9yMyA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IkYyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9xdWF0ZXJuaW9uJDQgPSAvKkBfX1BVUkVfXyovIG5ldyBRdWF0ZXJuaW9uKCk7XG5cbmNsYXNzIEJveDMge1xuXG5cdGNvbnN0cnVjdG9yKCBtaW4gPSBuZXcgVmVjdG9yMyggKyBJbmZpbml0eSwgKyBJbmZpbml0eSwgKyBJbmZpbml0eSApLCBtYXggPSBuZXcgVmVjdG9yMyggLSBJbmZpbml0eSwgLSBJbmZpbml0eSwgLSBJbmZpbml0eSApICkge1xuXG5cdFx0dGhpcy5taW4gPSBtaW47XG5cdFx0dGhpcy5tYXggPSBtYXg7XG5cblx0fVxuXG5cdHNldCggbWluLCBtYXggKSB7XG5cblx0XHR0aGlzLm1pbi5jb3B5KCBtaW4gKTtcblx0XHR0aGlzLm1heC5jb3B5KCBtYXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tQXJyYXkoIGFycmF5ICkge1xuXG5cdFx0bGV0IG1pblggPSArIEluZmluaXR5O1xuXHRcdGxldCBtaW5ZID0gKyBJbmZpbml0eTtcblx0XHRsZXQgbWluWiA9ICsgSW5maW5pdHk7XG5cblx0XHRsZXQgbWF4WCA9IC0gSW5maW5pdHk7XG5cdFx0bGV0IG1heFkgPSAtIEluZmluaXR5O1xuXHRcdGxldCBtYXhaID0gLSBJbmZpbml0eTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0Y29uc3QgeCA9IGFycmF5WyBpIF07XG5cdFx0XHRjb25zdCB5ID0gYXJyYXlbIGkgKyAxIF07XG5cdFx0XHRjb25zdCB6ID0gYXJyYXlbIGkgKyAyIF07XG5cblx0XHRcdGlmICggeCA8IG1pblggKSBtaW5YID0geDtcblx0XHRcdGlmICggeSA8IG1pblkgKSBtaW5ZID0geTtcblx0XHRcdGlmICggeiA8IG1pblogKSBtaW5aID0gejtcblxuXHRcdFx0aWYgKCB4ID4gbWF4WCApIG1heFggPSB4O1xuXHRcdFx0aWYgKCB5ID4gbWF4WSApIG1heFkgPSB5O1xuXHRcdFx0aWYgKCB6ID4gbWF4WiApIG1heFogPSB6O1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5taW4uc2V0KCBtaW5YLCBtaW5ZLCBtaW5aICk7XG5cdFx0dGhpcy5tYXguc2V0KCBtYXhYLCBtYXhZLCBtYXhaICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkge1xuXG5cdFx0bGV0IG1pblggPSArIEluZmluaXR5O1xuXHRcdGxldCBtaW5ZID0gKyBJbmZpbml0eTtcblx0XHRsZXQgbWluWiA9ICsgSW5maW5pdHk7XG5cblx0XHRsZXQgbWF4WCA9IC0gSW5maW5pdHk7XG5cdFx0bGV0IG1heFkgPSAtIEluZmluaXR5O1xuXHRcdGxldCBtYXhaID0gLSBJbmZpbml0eTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHggPSBhdHRyaWJ1dGUuZ2V0WCggaSApO1xuXHRcdFx0Y29uc3QgeSA9IGF0dHJpYnV0ZS5nZXRZKCBpICk7XG5cdFx0XHRjb25zdCB6ID0gYXR0cmlidXRlLmdldFooIGkgKTtcblxuXHRcdFx0aWYgKCB4IDwgbWluWCApIG1pblggPSB4O1xuXHRcdFx0aWYgKCB5IDwgbWluWSApIG1pblkgPSB5O1xuXHRcdFx0aWYgKCB6IDwgbWluWiApIG1pblogPSB6O1xuXG5cdFx0XHRpZiAoIHggPiBtYXhYICkgbWF4WCA9IHg7XG5cdFx0XHRpZiAoIHkgPiBtYXhZICkgbWF4WSA9IHk7XG5cdFx0XHRpZiAoIHogPiBtYXhaICkgbWF4WiA9IHo7XG5cblx0XHR9XG5cblx0XHR0aGlzLm1pbi5zZXQoIG1pblgsIG1pblksIG1pblogKTtcblx0XHR0aGlzLm1heC5zZXQoIG1heFgsIG1heFksIG1heFogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKCBwb2ludHMgKSB7XG5cblx0XHR0aGlzLm1ha2VFbXB0eSgpO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5leHBhbmRCeVBvaW50KCBwb2ludHNbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21DZW50ZXJBbmRTaXplKCBjZW50ZXIsIHNpemUgKSB7XG5cblx0XHRjb25zdCBoYWxmU2l6ZSA9IF92ZWN0b3IkYi5jb3B5KCBzaXplICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXG5cdFx0dGhpcy5taW4uY29weSggY2VudGVyICkuc3ViKCBoYWxmU2l6ZSApO1xuXHRcdHRoaXMubWF4LmNvcHkoIGNlbnRlciApLmFkZCggaGFsZlNpemUgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tT2JqZWN0KCBvYmplY3QsIHByZWNpc2UgPSBmYWxzZSApIHtcblxuXHRcdHRoaXMubWFrZUVtcHR5KCk7XG5cblx0XHRyZXR1cm4gdGhpcy5leHBhbmRCeU9iamVjdCggb2JqZWN0LCBwcmVjaXNlICk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBib3ggKSB7XG5cblx0XHR0aGlzLm1pbi5jb3B5KCBib3gubWluICk7XG5cdFx0dGhpcy5tYXguY29weSggYm94Lm1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VFbXB0eSgpIHtcblxuXHRcdHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gdGhpcy5taW4ueiA9ICsgSW5maW5pdHk7XG5cdFx0dGhpcy5tYXgueCA9IHRoaXMubWF4LnkgPSB0aGlzLm1heC56ID0gLSBJbmZpbml0eTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpc0VtcHR5KCkge1xuXG5cdFx0Ly8gdGhpcyBpcyBhIG1vcmUgcm9idXN0IGNoZWNrIGZvciBlbXB0eSB0aGFuICggdm9sdW1lIDw9IDAgKSBiZWNhdXNlIHZvbHVtZSBjYW4gZ2V0IHBvc2l0aXZlIHdpdGggdHdvIG5lZ2F0aXZlIGF4ZXNcblxuXHRcdHJldHVybiAoIHRoaXMubWF4LnggPCB0aGlzLm1pbi54ICkgfHwgKCB0aGlzLm1heC55IDwgdGhpcy5taW4ueSApIHx8ICggdGhpcy5tYXgueiA8IHRoaXMubWluLnogKTtcblxuXHR9XG5cblx0Z2V0Q2VudGVyKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KCAwLCAwLCAwICkgOiB0YXJnZXQuYWRkVmVjdG9ycyggdGhpcy5taW4sIHRoaXMubWF4ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXG5cdH1cblxuXHRnZXRTaXplKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KCAwLCAwLCAwICkgOiB0YXJnZXQuc3ViVmVjdG9ycyggdGhpcy5tYXgsIHRoaXMubWluICk7XG5cblx0fVxuXG5cdGV4cGFuZEJ5UG9pbnQoIHBvaW50ICkge1xuXG5cdFx0dGhpcy5taW4ubWluKCBwb2ludCApO1xuXHRcdHRoaXMubWF4Lm1heCggcG9pbnQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRleHBhbmRCeVZlY3RvciggdmVjdG9yICkge1xuXG5cdFx0dGhpcy5taW4uc3ViKCB2ZWN0b3IgKTtcblx0XHR0aGlzLm1heC5hZGQoIHZlY3RvciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLm1pbi5hZGRTY2FsYXIoIC0gc2NhbGFyICk7XG5cdFx0dGhpcy5tYXguYWRkU2NhbGFyKCBzY2FsYXIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRleHBhbmRCeU9iamVjdCggb2JqZWN0LCBwcmVjaXNlID0gZmFsc2UgKSB7XG5cblx0XHQvLyBDb21wdXRlcyB0aGUgd29ybGQtYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveCBvZiBhbiBvYmplY3QgKGluY2x1ZGluZyBpdHMgY2hpbGRyZW4pLFxuXHRcdC8vIGFjY291bnRpbmcgZm9yIGJvdGggdGhlIG9iamVjdCdzLCBhbmQgY2hpbGRyZW4ncywgd29ybGQgdHJhbnNmb3Jtc1xuXG5cdFx0b2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KCBmYWxzZSwgZmFsc2UgKTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5O1xuXG5cdFx0aWYgKCBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpZiAoIHByZWNpc2UgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcyAhPSB1bmRlZmluZWQgJiYgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gcG9zaXRpb24uY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0X3ZlY3RvciRiLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBpICkuYXBwbHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTtcblx0XHRcdFx0XHR0aGlzLmV4cGFuZEJ5UG9pbnQoIF92ZWN0b3IkYiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ID09PSBudWxsICkge1xuXG5cdFx0XHRcdFx0Z2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9ib3gkMy5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ0JveCApO1xuXHRcdFx0XHRfYm94JDMuYXBwbHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTtcblxuXHRcdFx0XHR0aGlzLnVuaW9uKCBfYm94JDMgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmV4cGFuZEJ5T2JqZWN0KCBjaGlsZHJlblsgaSBdLCBwcmVjaXNlICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29udGFpbnNQb2ludCggcG9pbnQgKSB7XG5cblx0XHRyZXR1cm4gcG9pbnQueCA8IHRoaXMubWluLnggfHwgcG9pbnQueCA+IHRoaXMubWF4LnggfHxcblx0XHRcdHBvaW50LnkgPCB0aGlzLm1pbi55IHx8IHBvaW50LnkgPiB0aGlzLm1heC55IHx8XG5cdFx0XHRwb2ludC56IDwgdGhpcy5taW4ueiB8fCBwb2ludC56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTtcblxuXHR9XG5cblx0Y29udGFpbnNCb3goIGJveCApIHtcblxuXHRcdHJldHVybiB0aGlzLm1pbi54IDw9IGJveC5taW4ueCAmJiBib3gubWF4LnggPD0gdGhpcy5tYXgueCAmJlxuXHRcdFx0dGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4LnkgJiZcblx0XHRcdHRoaXMubWluLnogPD0gYm94Lm1pbi56ICYmIGJveC5tYXgueiA8PSB0aGlzLm1heC56O1xuXG5cdH1cblxuXHRnZXRQYXJhbWV0ZXIoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHQvLyBUaGlzIGNhbiBwb3RlbnRpYWxseSBoYXZlIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIGJveFxuXHRcdC8vIGhhcyBhIHNpemUgZGltZW5zaW9uIG9mIDAuXG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldChcblx0XHRcdCggcG9pbnQueCAtIHRoaXMubWluLnggKSAvICggdGhpcy5tYXgueCAtIHRoaXMubWluLnggKSxcblx0XHRcdCggcG9pbnQueSAtIHRoaXMubWluLnkgKSAvICggdGhpcy5tYXgueSAtIHRoaXMubWluLnkgKSxcblx0XHRcdCggcG9pbnQueiAtIHRoaXMubWluLnogKSAvICggdGhpcy5tYXgueiAtIHRoaXMubWluLnogKVxuXHRcdCk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNCb3goIGJveCApIHtcblxuXHRcdC8vIHVzaW5nIDYgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zLlxuXHRcdHJldHVybiBib3gubWF4LnggPCB0aGlzLm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHxcblx0XHRcdGJveC5tYXgueSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSB8fFxuXHRcdFx0Ym94Lm1heC56IDwgdGhpcy5taW4ueiB8fCBib3gubWluLnogPiB0aGlzLm1heC56ID8gZmFsc2UgOiB0cnVlO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKSB7XG5cblx0XHQvLyBGaW5kIHRoZSBwb2ludCBvbiB0aGUgQUFCQiBjbG9zZXN0IHRvIHRoZSBzcGhlcmUgY2VudGVyLlxuXHRcdHRoaXMuY2xhbXBQb2ludCggc3BoZXJlLmNlbnRlciwgX3ZlY3RvciRiICk7XG5cblx0XHQvLyBJZiB0aGF0IHBvaW50IGlzIGluc2lkZSB0aGUgc3BoZXJlLCB0aGUgQUFCQiBhbmQgc3BoZXJlIGludGVyc2VjdC5cblx0XHRyZXR1cm4gX3ZlY3RvciRiLmRpc3RhbmNlVG9TcXVhcmVkKCBzcGhlcmUuY2VudGVyICkgPD0gKCBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1cyApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzUGxhbmUoIHBsYW5lICkge1xuXG5cdFx0Ly8gV2UgY29tcHV0ZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBkb3QgcHJvZHVjdCB2YWx1ZXMuIElmIHRob3NlIHZhbHVlc1xuXHRcdC8vIGFyZSBvbiB0aGUgc2FtZSBzaWRlIChiYWNrIG9yIGZyb250KSBvZiB0aGUgcGxhbmUsIHRoZW4gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLlxuXG5cdFx0bGV0IG1pbiwgbWF4O1xuXG5cdFx0aWYgKCBwbGFuZS5ub3JtYWwueCA+IDAgKSB7XG5cblx0XHRcdG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDtcblx0XHRcdG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDtcblx0XHRcdG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDtcblxuXHRcdH1cblxuXHRcdGlmICggcGxhbmUubm9ybWFsLnkgPiAwICkge1xuXG5cdFx0XHRtaW4gKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1pbi55O1xuXHRcdFx0bWF4ICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5tYXgueTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdG1pbiArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWF4Lnk7XG5cdFx0XHRtYXggKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1pbi55O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwbGFuZS5ub3JtYWwueiA+IDAgKSB7XG5cblx0XHRcdG1pbiArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWluLno7XG5cdFx0XHRtYXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1heC56O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejtcblx0XHRcdG1heCArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWluLno7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gKCBtaW4gPD0gLSBwbGFuZS5jb25zdGFudCAmJiBtYXggPj0gLSBwbGFuZS5jb25zdGFudCApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzVHJpYW5nbGUoIHRyaWFuZ2xlICkge1xuXG5cdFx0aWYgKCB0aGlzLmlzRW1wdHkoKSApIHtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0Ly8gY29tcHV0ZSBib3ggY2VudGVyIGFuZCBleHRlbnRzXG5cdFx0dGhpcy5nZXRDZW50ZXIoIF9jZW50ZXIgKTtcblx0XHRfZXh0ZW50cy5zdWJWZWN0b3JzKCB0aGlzLm1heCwgX2NlbnRlciApO1xuXG5cdFx0Ly8gdHJhbnNsYXRlIHRyaWFuZ2xlIHRvIGFhYmIgb3JpZ2luXG5cdFx0X3YwJDIuc3ViVmVjdG9ycyggdHJpYW5nbGUuYSwgX2NlbnRlciApO1xuXHRcdF92MSQ3LnN1YlZlY3RvcnMoIHRyaWFuZ2xlLmIsIF9jZW50ZXIgKTtcblx0XHRfdjIkMy5zdWJWZWN0b3JzKCB0cmlhbmdsZS5jLCBfY2VudGVyICk7XG5cblx0XHQvLyBjb21wdXRlIGVkZ2UgdmVjdG9ycyBmb3IgdHJpYW5nbGVcblx0XHRfZjAuc3ViVmVjdG9ycyggX3YxJDcsIF92MCQyICk7XG5cdFx0X2YxLnN1YlZlY3RvcnMoIF92MiQzLCBfdjEkNyApO1xuXHRcdF9mMi5zdWJWZWN0b3JzKCBfdjAkMiwgX3YyJDMgKTtcblxuXHRcdC8vIHRlc3QgYWdhaW5zdCBheGVzIHRoYXQgYXJlIGdpdmVuIGJ5IGNyb3NzIHByb2R1Y3QgY29tYmluYXRpb25zIG9mIHRoZSBlZGdlcyBvZiB0aGUgdHJpYW5nbGUgYW5kIHRoZSBlZGdlcyBvZiB0aGUgYWFiYlxuXHRcdC8vIG1ha2UgYW4gYXhpcyB0ZXN0aW5nIG9mIGVhY2ggb2YgdGhlIDMgc2lkZXMgb2YgdGhlIGFhYmIgYWdhaW5zdCBlYWNoIG9mIHRoZSAzIHNpZGVzIG9mIHRoZSB0cmlhbmdsZSA9IDkgYXhpcyBvZiBzZXBhcmF0aW9uXG5cdFx0Ly8gYXhpc19paiA9IHVfaSB4IGZfaiAodTAsIHUxLCB1MiA9IGZhY2Ugbm9ybWFscyBvZiBhYWJiID0geCx5LHogYXhlcyB2ZWN0b3JzIHNpbmNlIGFhYmIgaXMgYXhpcyBhbGlnbmVkKVxuXHRcdGxldCBheGVzID0gW1xuXHRcdFx0MCwgLSBfZjAueiwgX2YwLnksIDAsIC0gX2YxLnosIF9mMS55LCAwLCAtIF9mMi56LCBfZjIueSxcblx0XHRcdF9mMC56LCAwLCAtIF9mMC54LCBfZjEueiwgMCwgLSBfZjEueCwgX2YyLnosIDAsIC0gX2YyLngsXG5cdFx0XHQtIF9mMC55LCBfZjAueCwgMCwgLSBfZjEueSwgX2YxLngsIDAsIC0gX2YyLnksIF9mMi54LCAwXG5cdFx0XTtcblx0XHRpZiAoICEgc2F0Rm9yQXhlcyggYXhlcywgX3YwJDIsIF92MSQ3LCBfdjIkMywgX2V4dGVudHMgKSApIHtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdGVzdCAzIGZhY2Ugbm9ybWFscyBmcm9tIHRoZSBhYWJiXG5cdFx0YXhlcyA9IFsgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSBdO1xuXHRcdGlmICggISBzYXRGb3JBeGVzKCBheGVzLCBfdjAkMiwgX3YxJDcsIF92MiQzLCBfZXh0ZW50cyApICkge1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9XG5cblx0XHQvLyBmaW5hbGx5IHRlc3RpbmcgdGhlIGZhY2Ugbm9ybWFsIG9mIHRoZSB0cmlhbmdsZVxuXHRcdC8vIHVzZSBhbHJlYWR5IGV4aXN0aW5nIHRyaWFuZ2xlIGVkZ2UgdmVjdG9ycyBoZXJlXG5cdFx0X3RyaWFuZ2xlTm9ybWFsLmNyb3NzVmVjdG9ycyggX2YwLCBfZjEgKTtcblx0XHRheGVzID0gWyBfdHJpYW5nbGVOb3JtYWwueCwgX3RyaWFuZ2xlTm9ybWFsLnksIF90cmlhbmdsZU5vcm1hbC56IF07XG5cblx0XHRyZXR1cm4gc2F0Rm9yQXhlcyggYXhlcywgX3YwJDIsIF92MSQ3LCBfdjIkMywgX2V4dGVudHMgKTtcblxuXHR9XG5cblx0Y2xhbXBQb2ludCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7XG5cblx0XHRjb25zdCBjbGFtcGVkUG9pbnQgPSBfdmVjdG9yJGIuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7XG5cblx0XHRyZXR1cm4gY2xhbXBlZFBvaW50LnN1YiggcG9pbnQgKS5sZW5ndGgoKTtcblxuXHR9XG5cblx0Z2V0Qm91bmRpbmdTcGhlcmUoIHRhcmdldCApIHtcblxuXHRcdHRoaXMuZ2V0Q2VudGVyKCB0YXJnZXQuY2VudGVyICk7XG5cblx0XHR0YXJnZXQucmFkaXVzID0gdGhpcy5nZXRTaXplKCBfdmVjdG9yJGIgKS5sZW5ndGgoKSAqIDAuNTtcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGludGVyc2VjdCggYm94ICkge1xuXG5cdFx0dGhpcy5taW4ubWF4KCBib3gubWluICk7XG5cdFx0dGhpcy5tYXgubWluKCBib3gubWF4ICk7XG5cblx0XHQvLyBlbnN1cmUgdGhhdCBpZiB0aGVyZSBpcyBubyBvdmVybGFwLCB0aGUgcmVzdWx0IGlzIGZ1bGx5IGVtcHR5LCBub3Qgc2xpZ2h0bHkgZW1wdHkgd2l0aCBub24taW5mLytpbmYgdmFsdWVzIHRoYXQgd2lsbCBjYXVzZSBzdWJzZXF1ZW5jZSBpbnRlcnNlY3RzIHRvIGVycm9uZW91c2x5IHJldHVybiB2YWxpZCB2YWx1ZXMuXG5cdFx0aWYgKCB0aGlzLmlzRW1wdHkoKSApIHRoaXMubWFrZUVtcHR5KCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dW5pb24oIGJveCApIHtcblxuXHRcdHRoaXMubWluLm1pbiggYm94Lm1pbiApO1xuXHRcdHRoaXMubWF4Lm1heCggYm94Lm1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4ICkge1xuXG5cdFx0Ly8gdHJhbnNmb3JtIG9mIGVtcHR5IGJveCBpcyBhbiBlbXB0eSBib3guXG5cdFx0aWYgKCB0aGlzLmlzRW1wdHkoKSApIHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gTk9URTogSSBhbSB1c2luZyBhIGJpbmFyeSBwYXR0ZXJuIHRvIHNwZWNpZnkgYWxsIDJeMyBjb21iaW5hdGlvbnMgYmVsb3dcblx0XHRfcG9pbnRzWyAwIF0uc2V0KCB0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMDAwXG5cdFx0X3BvaW50c1sgMSBdLnNldCggdGhpcy5taW4ueCwgdGhpcy5taW4ueSwgdGhpcy5tYXgueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDAwMVxuXHRcdF9wb2ludHNbIDIgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMTBcblx0XHRfcG9pbnRzWyAzIF0uc2V0KCB0aGlzLm1pbi54LCB0aGlzLm1heC55LCB0aGlzLm1heC56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMDExXG5cdFx0X3BvaW50c1sgNCBdLnNldCggdGhpcy5tYXgueCwgdGhpcy5taW4ueSwgdGhpcy5taW4ueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDEwMFxuXHRcdF9wb2ludHNbIDUgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMDFcblx0XHRfcG9pbnRzWyA2IF0uc2V0KCB0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1pbi56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMTEwXG5cdFx0X3BvaW50c1sgNyBdLnNldCggdGhpcy5tYXgueCwgdGhpcy5tYXgueSwgdGhpcy5tYXgueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDExMVxuXG5cdFx0dGhpcy5zZXRGcm9tUG9pbnRzKCBfcG9pbnRzICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNsYXRlKCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLm1pbi5hZGQoIG9mZnNldCApO1xuXHRcdHRoaXMubWF4LmFkZCggb2Zmc2V0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCBib3ggKSB7XG5cblx0XHRyZXR1cm4gYm94Lm1pbi5lcXVhbHMoIHRoaXMubWluICkgJiYgYm94Lm1heC5lcXVhbHMoIHRoaXMubWF4ICk7XG5cblx0fVxuXG59XG5cbkJveDMucHJvdG90eXBlLmlzQm94MyA9IHRydWU7XG5cbmNvbnN0IF9wb2ludHMgPSBbXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpXG5dO1xuXG5jb25zdCBfdmVjdG9yJGIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9ib3gkMyA9IC8qQF9fUFVSRV9fKi8gbmV3IEJveDMoKTtcblxuLy8gdHJpYW5nbGUgY2VudGVyZWQgdmVydGljZXNcblxuY29uc3QgX3YwJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjEkNyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MiQzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG4vLyB0cmlhbmdsZSBlZGdlIHZlY3RvcnNcblxuY29uc3QgX2YwID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2YxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2YyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfY2VudGVyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2V4dGVudHMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdHJpYW5nbGVOb3JtYWwgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdGVzdEF4aXMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmZ1bmN0aW9uIHNhdEZvckF4ZXMoIGF4ZXMsIHYwLCB2MSwgdjIsIGV4dGVudHMgKSB7XG5cblx0Zm9yICggbGV0IGkgPSAwLCBqID0gYXhlcy5sZW5ndGggLSAzOyBpIDw9IGo7IGkgKz0gMyApIHtcblxuXHRcdF90ZXN0QXhpcy5mcm9tQXJyYXkoIGF4ZXMsIGkgKTtcblx0XHQvLyBwcm9qZWN0IHRoZSBhYWJiIG9udG8gdGhlIHNlcGVyYXRpbmcgYXhpc1xuXHRcdGNvbnN0IHIgPSBleHRlbnRzLnggKiBNYXRoLmFicyggX3Rlc3RBeGlzLnggKSArIGV4dGVudHMueSAqIE1hdGguYWJzKCBfdGVzdEF4aXMueSApICsgZXh0ZW50cy56ICogTWF0aC5hYnMoIF90ZXN0QXhpcy56ICk7XG5cdFx0Ly8gcHJvamVjdCBhbGwgMyB2ZXJ0aWNlcyBvZiB0aGUgdHJpYW5nbGUgb250byB0aGUgc2VwZXJhdGluZyBheGlzXG5cdFx0Y29uc3QgcDAgPSB2MC5kb3QoIF90ZXN0QXhpcyApO1xuXHRcdGNvbnN0IHAxID0gdjEuZG90KCBfdGVzdEF4aXMgKTtcblx0XHRjb25zdCBwMiA9IHYyLmRvdCggX3Rlc3RBeGlzICk7XG5cdFx0Ly8gYWN0dWFsIHRlc3QsIGJhc2ljYWxseSBzZWUgaWYgZWl0aGVyIG9mIHRoZSBtb3N0IGV4dHJlbWUgb2YgdGhlIHRyaWFuZ2xlIHBvaW50cyBpbnRlcnNlY3RzIHJcblx0XHRpZiAoIE1hdGgubWF4KCAtIE1hdGgubWF4KCBwMCwgcDEsIHAyICksIE1hdGgubWluKCBwMCwgcDEsIHAyICkgKSA+IHIgKSB7XG5cblx0XHRcdC8vIHBvaW50cyBvZiB0aGUgcHJvamVjdGVkIHRyaWFuZ2xlIGFyZSBvdXRzaWRlIHRoZSBwcm9qZWN0ZWQgaGFsZi1sZW5ndGggb2YgdGhlIGFhYmJcblx0XHRcdC8vIHRoZSBheGlzIGlzIHNlcGVyYXRpbmcgYW5kIHdlIGNhbiBleGl0XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiB0cnVlO1xuXG59XG5cbmNvbnN0IF9ib3gkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IEJveDMoKTtcbmNvbnN0IF92MSQ2ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3RvRmFydGhlc3RQb2ludCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90b1BvaW50ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBTcGhlcmUge1xuXG5cdGNvbnN0cnVjdG9yKCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpLCByYWRpdXMgPSAtIDEgKSB7XG5cblx0XHR0aGlzLmNlbnRlciA9IGNlbnRlcjtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblxuXHR9XG5cblx0c2V0KCBjZW50ZXIsIHJhZGl1cyApIHtcblxuXHRcdHRoaXMuY2VudGVyLmNvcHkoIGNlbnRlciApO1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21Qb2ludHMoIHBvaW50cywgb3B0aW9uYWxDZW50ZXIgKSB7XG5cblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcblxuXHRcdGlmICggb3B0aW9uYWxDZW50ZXIgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y2VudGVyLmNvcHkoIG9wdGlvbmFsQ2VudGVyICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfYm94JDIuc2V0RnJvbVBvaW50cyggcG9pbnRzICkuZ2V0Q2VudGVyKCBjZW50ZXIgKTtcblxuXHRcdH1cblxuXHRcdGxldCBtYXhSYWRpdXNTcSA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KCBtYXhSYWRpdXNTcSwgY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludHNbIGkgXSApICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBzcGhlcmUgKSB7XG5cblx0XHR0aGlzLmNlbnRlci5jb3B5KCBzcGhlcmUuY2VudGVyICk7XG5cdFx0dGhpcy5yYWRpdXMgPSBzcGhlcmUucmFkaXVzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGlzRW1wdHkoKSB7XG5cblx0XHRyZXR1cm4gKCB0aGlzLnJhZGl1cyA8IDAgKTtcblxuXHR9XG5cblx0bWFrZUVtcHR5KCkge1xuXG5cdFx0dGhpcy5jZW50ZXIuc2V0KCAwLCAwLCAwICk7XG5cdFx0dGhpcy5yYWRpdXMgPSAtIDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29udGFpbnNQb2ludCggcG9pbnQgKSB7XG5cblx0XHRyZXR1cm4gKCBwb2ludC5kaXN0YW5jZVRvU3F1YXJlZCggdGhpcy5jZW50ZXIgKSA8PSAoIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXMgKSApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0cmV0dXJuICggcG9pbnQuZGlzdGFuY2VUbyggdGhpcy5jZW50ZXIgKSAtIHRoaXMucmFkaXVzICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHtcblxuXHRcdGNvbnN0IHJhZGl1c1N1bSA9IHRoaXMucmFkaXVzICsgc3BoZXJlLnJhZGl1cztcblxuXHRcdHJldHVybiBzcGhlcmUuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmNlbnRlciApIDw9ICggcmFkaXVzU3VtICogcmFkaXVzU3VtICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNCb3goIGJveCApIHtcblxuXHRcdHJldHVybiBib3guaW50ZXJzZWN0c1NwaGVyZSggdGhpcyApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzUGxhbmUoIHBsYW5lICkge1xuXG5cdFx0cmV0dXJuIE1hdGguYWJzKCBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHRoaXMuY2VudGVyICkgKSA8PSB0aGlzLnJhZGl1cztcblxuXHR9XG5cblx0Y2xhbXBQb2ludCggcG9pbnQsIHRhcmdldCApIHtcblxuXHRcdGNvbnN0IGRlbHRhTGVuZ3RoU3EgPSB0aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTtcblxuXHRcdHRhcmdldC5jb3B5KCBwb2ludCApO1xuXG5cdFx0aWYgKCBkZWx0YUxlbmd0aFNxID4gKCB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzICkgKSB7XG5cblx0XHRcdHRhcmdldC5zdWIoIHRoaXMuY2VudGVyICkubm9ybWFsaXplKCk7XG5cdFx0XHR0YXJnZXQubXVsdGlwbHlTY2FsYXIoIHRoaXMucmFkaXVzICkuYWRkKCB0aGlzLmNlbnRlciApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0Z2V0Qm91bmRpbmdCb3goIHRhcmdldCApIHtcblxuXHRcdGlmICggdGhpcy5pc0VtcHR5KCkgKSB7XG5cblx0XHRcdC8vIEVtcHR5IHNwaGVyZSBwcm9kdWNlcyBlbXB0eSBib3VuZGluZyBib3hcblx0XHRcdHRhcmdldC5tYWtlRW1wdHkoKTtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cblx0XHR9XG5cblx0XHR0YXJnZXQuc2V0KCB0aGlzLmNlbnRlciwgdGhpcy5jZW50ZXIgKTtcblx0XHR0YXJnZXQuZXhwYW5kQnlTY2FsYXIoIHRoaXMucmFkaXVzICk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG1hdHJpeCApIHtcblxuXHRcdHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCggbWF0cml4ICk7XG5cdFx0dGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1cyAqIG1hdHJpeC5nZXRNYXhTY2FsZU9uQXhpcygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZSggb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5jZW50ZXIuYWRkKCBvZmZzZXQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRleHBhbmRCeVBvaW50KCBwb2ludCApIHtcblxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p1ai9NYXRoR2VvTGliL2Jsb2IvMjk0MGI5OWI5OWNmZTU3NWRkNDUxMDNlZjIwZjQwMTlkZWUxNWI1NC9zcmMvR2VvbWV0cnkvU3BoZXJlLmNwcCNMNjQ5LUw2NzFcblxuXHRcdF90b1BvaW50LnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLmNlbnRlciApO1xuXG5cdFx0Y29uc3QgbGVuZ3RoU3EgPSBfdG9Qb2ludC5sZW5ndGhTcSgpO1xuXG5cdFx0aWYgKCBsZW5ndGhTcSA+ICggdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyApICkge1xuXG5cdFx0XHRjb25zdCBsZW5ndGggPSBNYXRoLnNxcnQoIGxlbmd0aFNxICk7XG5cdFx0XHRjb25zdCBtaXNzaW5nUmFkaXVzSGFsZiA9ICggbGVuZ3RoIC0gdGhpcy5yYWRpdXMgKSAqIDAuNTtcblxuXHRcdFx0Ly8gTnVkZ2UgdGhpcyBzcGhlcmUgdG93YXJkcyB0aGUgdGFyZ2V0IHBvaW50LiBBZGQgaGFsZiB0aGUgbWlzc2luZyBkaXN0YW5jZSB0byByYWRpdXMsXG5cdFx0XHQvLyBhbmQgdGhlIG90aGVyIGhhbGYgdG8gcG9zaXRpb24uIFRoaXMgZ2l2ZXMgYSB0aWdodGVyIGVuY2xvc3VyZSwgaW5zdGVhZCBvZiBpZlxuXHRcdFx0Ly8gdGhlIHdob2xlIG1pc3NpbmcgZGlzdGFuY2Ugd2VyZSBqdXN0IGFkZGVkIHRvIHJhZGl1cy5cblxuXHRcdFx0dGhpcy5jZW50ZXIuYWRkKCBfdG9Qb2ludC5tdWx0aXBseVNjYWxhciggbWlzc2luZ1JhZGl1c0hhbGYgLyBsZW5ndGggKSApO1xuXHRcdFx0dGhpcy5yYWRpdXMgKz0gbWlzc2luZ1JhZGl1c0hhbGY7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dW5pb24oIHNwaGVyZSApIHtcblxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p1ai9NYXRoR2VvTGliL2Jsb2IvMjk0MGI5OWI5OWNmZTU3NWRkNDUxMDNlZjIwZjQwMTlkZWUxNWI1NC9zcmMvR2VvbWV0cnkvU3BoZXJlLmNwcCNMNzU5LUw3NjlcblxuXHRcdC8vIFRvIGVuY2xvc2UgYW5vdGhlciBzcGhlcmUgaW50byB0aGlzIHNwaGVyZSwgd2Ugb25seSBuZWVkIHRvIGVuY2xvc2UgdHdvIHBvaW50czpcblx0XHQvLyAxKSBFbmNsb3NlIHRoZSBmYXJ0aGVzdCBwb2ludCBvbiB0aGUgb3RoZXIgc3BoZXJlIGludG8gdGhpcyBzcGhlcmUuXG5cdFx0Ly8gMikgRW5jbG9zZSB0aGUgb3Bwb3NpdGUgcG9pbnQgb2YgdGhlIGZhcnRoZXN0IHBvaW50IGludG8gdGhpcyBzcGhlcmUuXG5cblx0XHQgaWYgKCB0aGlzLmNlbnRlci5lcXVhbHMoIHNwaGVyZS5jZW50ZXIgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0IF90b0ZhcnRoZXN0UG9pbnQuc2V0KCAwLCAwLCAxICkubXVsdGlwbHlTY2FsYXIoIHNwaGVyZS5yYWRpdXMgKTtcblxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X3RvRmFydGhlc3RQb2ludC5zdWJWZWN0b3JzKCBzcGhlcmUuY2VudGVyLCB0aGlzLmNlbnRlciApLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBzcGhlcmUucmFkaXVzICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmV4cGFuZEJ5UG9pbnQoIF92MSQ2LmNvcHkoIHNwaGVyZS5jZW50ZXIgKS5hZGQoIF90b0ZhcnRoZXN0UG9pbnQgKSApO1xuXHRcdHRoaXMuZXhwYW5kQnlQb2ludCggX3YxJDYuY29weSggc3BoZXJlLmNlbnRlciApLnN1YiggX3RvRmFydGhlc3RQb2ludCApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZXF1YWxzKCBzcGhlcmUgKSB7XG5cblx0XHRyZXR1cm4gc3BoZXJlLmNlbnRlci5lcXVhbHMoIHRoaXMuY2VudGVyICkgJiYgKCBzcGhlcmUucmFkaXVzID09PSB0aGlzLnJhZGl1cyApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciRhID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3NlZ0NlbnRlciA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9zZWdEaXIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZGlmZiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX2VkZ2UxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2VkZ2UyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX25vcm1hbCQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBSYXkge1xuXG5cdGNvbnN0cnVjdG9yKCBvcmlnaW4gPSBuZXcgVmVjdG9yMygpLCBkaXJlY3Rpb24gPSBuZXcgVmVjdG9yMyggMCwgMCwgLSAxICkgKSB7XG5cblx0XHR0aGlzLm9yaWdpbiA9IG9yaWdpbjtcblx0XHR0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcblxuXHR9XG5cblx0c2V0KCBvcmlnaW4sIGRpcmVjdGlvbiApIHtcblxuXHRcdHRoaXMub3JpZ2luLmNvcHkoIG9yaWdpbiApO1xuXHRcdHRoaXMuZGlyZWN0aW9uLmNvcHkoIGRpcmVjdGlvbiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHJheSApIHtcblxuXHRcdHRoaXMub3JpZ2luLmNvcHkoIHJheS5vcmlnaW4gKTtcblx0XHR0aGlzLmRpcmVjdGlvbi5jb3B5KCByYXkuZGlyZWN0aW9uICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXQoIHQsIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5vcmlnaW4gKTtcblxuXHR9XG5cblx0bG9va0F0KCB2ICkge1xuXG5cdFx0dGhpcy5kaXJlY3Rpb24uY29weSggdiApLnN1YiggdGhpcy5vcmlnaW4gKS5ub3JtYWxpemUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyZWNhc3QoIHQgKSB7XG5cblx0XHR0aGlzLm9yaWdpbi5jb3B5KCB0aGlzLmF0KCB0LCBfdmVjdG9yJGEgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb3Nlc3RQb2ludFRvUG9pbnQoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHR0YXJnZXQuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMub3JpZ2luICk7XG5cblx0XHRjb25zdCBkaXJlY3Rpb25EaXN0YW5jZSA9IHRhcmdldC5kb3QoIHRoaXMuZGlyZWN0aW9uICk7XG5cblx0XHRpZiAoIGRpcmVjdGlvbkRpc3RhbmNlIDwgMCApIHtcblxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm9yaWdpbiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCBkaXJlY3Rpb25EaXN0YW5jZSApLmFkZCggdGhpcy5vcmlnaW4gKTtcblxuXHR9XG5cblx0ZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoIHBvaW50ICkgKTtcblxuXHR9XG5cblx0ZGlzdGFuY2VTcVRvUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0Y29uc3QgZGlyZWN0aW9uRGlzdGFuY2UgPSBfdmVjdG9yJGEuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMub3JpZ2luICkuZG90KCB0aGlzLmRpcmVjdGlvbiApO1xuXG5cdFx0Ly8gcG9pbnQgYmVoaW5kIHRoZSByYXlcblxuXHRcdGlmICggZGlyZWN0aW9uRGlzdGFuY2UgPCAwICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50ICk7XG5cblx0XHR9XG5cblx0XHRfdmVjdG9yJGEuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggZGlyZWN0aW9uRGlzdGFuY2UgKS5hZGQoIHRoaXMub3JpZ2luICk7XG5cblx0XHRyZXR1cm4gX3ZlY3RvciRhLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludCApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVNxVG9TZWdtZW50KCB2MCwgdjEsIG9wdGlvbmFsUG9pbnRPblJheSwgb3B0aW9uYWxQb2ludE9uU2VnbWVudCApIHtcblxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Btam9uaWFrL0dlb21ldHJpY1Rvb2xzL2Jsb2IvbWFzdGVyL0dURW5naW5lL0luY2x1ZGUvTWF0aGVtYXRpY3MvR3RlRGlzdFJheVNlZ21lbnQuaFxuXHRcdC8vIEl0IHJldHVybnMgdGhlIG1pbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSByYXkgYW5kIHRoZSBzZWdtZW50XG5cdFx0Ly8gZGVmaW5lZCBieSB2MCBhbmQgdjFcblx0XHQvLyBJdCBjYW4gYWxzbyBzZXQgdHdvIG9wdGlvbmFsIHRhcmdldHMgOlxuXHRcdC8vIC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHJheVxuXHRcdC8vIC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHNlZ21lbnRcblxuXHRcdF9zZWdDZW50ZXIuY29weSggdjAgKS5hZGQoIHYxICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXHRcdF9zZWdEaXIuY29weSggdjEgKS5zdWIoIHYwICkubm9ybWFsaXplKCk7XG5cdFx0X2RpZmYuY29weSggdGhpcy5vcmlnaW4gKS5zdWIoIF9zZWdDZW50ZXIgKTtcblxuXHRcdGNvbnN0IHNlZ0V4dGVudCA9IHYwLmRpc3RhbmNlVG8oIHYxICkgKiAwLjU7XG5cdFx0Y29uc3QgYTAxID0gLSB0aGlzLmRpcmVjdGlvbi5kb3QoIF9zZWdEaXIgKTtcblx0XHRjb25zdCBiMCA9IF9kaWZmLmRvdCggdGhpcy5kaXJlY3Rpb24gKTtcblx0XHRjb25zdCBiMSA9IC0gX2RpZmYuZG90KCBfc2VnRGlyICk7XG5cdFx0Y29uc3QgYyA9IF9kaWZmLmxlbmd0aFNxKCk7XG5cdFx0Y29uc3QgZGV0ID0gTWF0aC5hYnMoIDEgLSBhMDEgKiBhMDEgKTtcblx0XHRsZXQgczAsIHMxLCBzcXJEaXN0LCBleHREZXQ7XG5cblx0XHRpZiAoIGRldCA+IDAgKSB7XG5cblx0XHRcdC8vIFRoZSByYXkgYW5kIHNlZ21lbnQgYXJlIG5vdCBwYXJhbGxlbC5cblxuXHRcdFx0czAgPSBhMDEgKiBiMSAtIGIwO1xuXHRcdFx0czEgPSBhMDEgKiBiMCAtIGIxO1xuXHRcdFx0ZXh0RGV0ID0gc2VnRXh0ZW50ICogZGV0O1xuXG5cdFx0XHRpZiAoIHMwID49IDAgKSB7XG5cblx0XHRcdFx0aWYgKCBzMSA+PSAtIGV4dERldCApIHtcblxuXHRcdFx0XHRcdGlmICggczEgPD0gZXh0RGV0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyByZWdpb24gMFxuXHRcdFx0XHRcdFx0Ly8gTWluaW11bSBhdCBpbnRlcmlvciBwb2ludHMgb2YgcmF5IGFuZCBzZWdtZW50LlxuXG5cdFx0XHRcdFx0XHRjb25zdCBpbnZEZXQgPSAxIC8gZGV0O1xuXHRcdFx0XHRcdFx0czAgKj0gaW52RGV0O1xuXHRcdFx0XHRcdFx0czEgKj0gaW52RGV0O1xuXHRcdFx0XHRcdFx0c3FyRGlzdCA9IHMwICogKCBzMCArIGEwMSAqIHMxICsgMiAqIGIwICkgKyBzMSAqICggYTAxICogczAgKyBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIHJlZ2lvbiAxXG5cblx0XHRcdFx0XHRcdHMxID0gc2VnRXh0ZW50O1xuXHRcdFx0XHRcdFx0czAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsgYjAgKSApO1xuXHRcdFx0XHRcdFx0c3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gcmVnaW9uIDVcblxuXHRcdFx0XHRcdHMxID0gLSBzZWdFeHRlbnQ7XG5cdFx0XHRcdFx0czAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsgYjAgKSApO1xuXHRcdFx0XHRcdHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGlmICggczEgPD0gLSBleHREZXQgKSB7XG5cblx0XHRcdFx0XHQvLyByZWdpb24gNFxuXG5cdFx0XHRcdFx0czAgPSBNYXRoLm1heCggMCwgLSAoIC0gYTAxICogc2VnRXh0ZW50ICsgYjAgKSApO1xuXHRcdFx0XHRcdHMxID0gKCBzMCA+IDAgKSA/IC0gc2VnRXh0ZW50IDogTWF0aC5taW4oIE1hdGgubWF4KCAtIHNlZ0V4dGVudCwgLSBiMSApLCBzZWdFeHRlbnQgKTtcblx0XHRcdFx0XHRzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHMxIDw9IGV4dERldCApIHtcblxuXHRcdFx0XHRcdC8vIHJlZ2lvbiAzXG5cblx0XHRcdFx0XHRzMCA9IDA7XG5cdFx0XHRcdFx0czEgPSBNYXRoLm1pbiggTWF0aC5tYXgoIC0gc2VnRXh0ZW50LCAtIGIxICksIHNlZ0V4dGVudCApO1xuXHRcdFx0XHRcdHNxckRpc3QgPSBzMSAqICggczEgKyAyICogYjEgKSArIGM7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIHJlZ2lvbiAyXG5cblx0XHRcdFx0XHRzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogc2VnRXh0ZW50ICsgYjAgKSApO1xuXHRcdFx0XHRcdHMxID0gKCBzMCA+IDAgKSA/IHNlZ0V4dGVudCA6IE1hdGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwgc2VnRXh0ZW50ICk7XG5cdFx0XHRcdFx0c3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFJheSBhbmQgc2VnbWVudCBhcmUgcGFyYWxsZWwuXG5cblx0XHRcdHMxID0gKCBhMDEgPiAwICkgPyAtIHNlZ0V4dGVudCA6IHNlZ0V4dGVudDtcblx0XHRcdHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEgKiBzMSArIGIwICkgKTtcblx0XHRcdHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7XG5cblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbmFsUG9pbnRPblJheSApIHtcblxuXHRcdFx0b3B0aW9uYWxQb2ludE9uUmF5LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlwbHlTY2FsYXIoIHMwICkuYWRkKCB0aGlzLm9yaWdpbiApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25hbFBvaW50T25TZWdtZW50ICkge1xuXG5cdFx0XHRvcHRpb25hbFBvaW50T25TZWdtZW50LmNvcHkoIF9zZWdEaXIgKS5tdWx0aXBseVNjYWxhciggczEgKS5hZGQoIF9zZWdDZW50ZXIgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBzcXJEaXN0O1xuXG5cdH1cblxuXHRpbnRlcnNlY3RTcGhlcmUoIHNwaGVyZSwgdGFyZ2V0ICkge1xuXG5cdFx0X3ZlY3RvciRhLnN1YlZlY3RvcnMoIHNwaGVyZS5jZW50ZXIsIHRoaXMub3JpZ2luICk7XG5cdFx0Y29uc3QgdGNhID0gX3ZlY3RvciRhLmRvdCggdGhpcy5kaXJlY3Rpb24gKTtcblx0XHRjb25zdCBkMiA9IF92ZWN0b3IkYS5kb3QoIF92ZWN0b3IkYSApIC0gdGNhICogdGNhO1xuXHRcdGNvbnN0IHJhZGl1czIgPSBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1cztcblxuXHRcdGlmICggZDIgPiByYWRpdXMyICkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCB0aGMgPSBNYXRoLnNxcnQoIHJhZGl1czIgLSBkMiApO1xuXG5cdFx0Ly8gdDAgPSBmaXJzdCBpbnRlcnNlY3QgcG9pbnQgLSBlbnRyYW5jZSBvbiBmcm9udCBvZiBzcGhlcmVcblx0XHRjb25zdCB0MCA9IHRjYSAtIHRoYztcblxuXHRcdC8vIHQxID0gc2Vjb25kIGludGVyc2VjdCBwb2ludCAtIGV4aXQgcG9pbnQgb24gYmFjayBvZiBzcGhlcmVcblx0XHRjb25zdCB0MSA9IHRjYSArIHRoYztcblxuXHRcdC8vIHRlc3QgdG8gc2VlIGlmIGJvdGggdDAgYW5kIHQxIGFyZSBiZWhpbmQgdGhlIHJheSAtIGlmIHNvLCByZXR1cm4gbnVsbFxuXHRcdGlmICggdDAgPCAwICYmIHQxIDwgMCApIHJldHVybiBudWxsO1xuXG5cdFx0Ly8gdGVzdCB0byBzZWUgaWYgdDAgaXMgYmVoaW5kIHRoZSByYXk6XG5cdFx0Ly8gaWYgaXQgaXMsIHRoZSByYXkgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHNvIHJldHVybiB0aGUgc2Vjb25kIGV4aXQgcG9pbnQgc2NhbGVkIGJ5IHQxLFxuXHRcdC8vIGluIG9yZGVyIHRvIGFsd2F5cyByZXR1cm4gYW4gaW50ZXJzZWN0IHBvaW50IHRoYXQgaXMgaW4gZnJvbnQgb2YgdGhlIHJheS5cblx0XHRpZiAoIHQwIDwgMCApIHJldHVybiB0aGlzLmF0KCB0MSwgdGFyZ2V0ICk7XG5cblx0XHQvLyBlbHNlIHQwIGlzIGluIGZyb250IG9mIHRoZSByYXksIHNvIHJldHVybiB0aGUgZmlyc3QgY29sbGlzaW9uIHBvaW50IHNjYWxlZCBieSB0MFxuXHRcdHJldHVybiB0aGlzLmF0KCB0MCwgdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHtcblxuXHRcdHJldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KCBzcGhlcmUuY2VudGVyICkgPD0gKCBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1cyApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvUGxhbmUoIHBsYW5lICkge1xuXG5cdFx0Y29uc3QgZGVub21pbmF0b3IgPSBwbGFuZS5ub3JtYWwuZG90KCB0aGlzLmRpcmVjdGlvbiApO1xuXG5cdFx0aWYgKCBkZW5vbWluYXRvciA9PT0gMCApIHtcblxuXHRcdFx0Ly8gbGluZSBpcyBjb3BsYW5hciwgcmV0dXJuIG9yaWdpblxuXHRcdFx0aWYgKCBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHRoaXMub3JpZ2luICkgPT09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIDA7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gTnVsbCBpcyBwcmVmZXJhYmxlIHRvIHVuZGVmaW5lZCBzaW5jZSB1bmRlZmluZWQgbWVhbnMuLi4uIGl0IGlzIHVuZGVmaW5lZFxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSAtICggdGhpcy5vcmlnaW4uZG90KCBwbGFuZS5ub3JtYWwgKSArIHBsYW5lLmNvbnN0YW50ICkgLyBkZW5vbWluYXRvcjtcblxuXHRcdC8vIFJldHVybiBpZiB0aGUgcmF5IG5ldmVyIGludGVyc2VjdHMgdGhlIHBsYW5lXG5cblx0XHRyZXR1cm4gdCA+PSAwID8gdCA6IG51bGw7XG5cblx0fVxuXG5cdGludGVyc2VjdFBsYW5lKCBwbGFuZSwgdGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgdCA9IHRoaXMuZGlzdGFuY2VUb1BsYW5lKCBwbGFuZSApO1xuXG5cdFx0aWYgKCB0ID09PSBudWxsICkge1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmF0KCB0LCB0YXJnZXQgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1BsYW5lKCBwbGFuZSApIHtcblxuXHRcdC8vIGNoZWNrIGlmIHRoZSByYXkgbGllcyBvbiB0aGUgcGxhbmUgZmlyc3RcblxuXHRcdGNvbnN0IGRpc3RUb1BvaW50ID0gcGxhbmUuZGlzdGFuY2VUb1BvaW50KCB0aGlzLm9yaWdpbiApO1xuXG5cdFx0aWYgKCBkaXN0VG9Qb2ludCA9PT0gMCApIHtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHBsYW5lLm5vcm1hbC5kb3QoIHRoaXMuZGlyZWN0aW9uICk7XG5cblx0XHRpZiAoIGRlbm9taW5hdG9yICogZGlzdFRvUG9pbnQgPCAwICkge1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdC8vIHJheSBvcmlnaW4gaXMgYmVoaW5kIHRoZSBwbGFuZSAoYW5kIGlzIHBvaW50aW5nIGJlaGluZCBpdClcblxuXHRcdHJldHVybiBmYWxzZTtcblxuXHR9XG5cblx0aW50ZXJzZWN0Qm94KCBib3gsIHRhcmdldCApIHtcblxuXHRcdGxldCB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcblxuXHRcdGNvbnN0IGludmRpcnggPSAxIC8gdGhpcy5kaXJlY3Rpb24ueCxcblx0XHRcdGludmRpcnkgPSAxIC8gdGhpcy5kaXJlY3Rpb24ueSxcblx0XHRcdGludmRpcnogPSAxIC8gdGhpcy5kaXJlY3Rpb24uejtcblxuXHRcdGNvbnN0IG9yaWdpbiA9IHRoaXMub3JpZ2luO1xuXG5cdFx0aWYgKCBpbnZkaXJ4ID49IDAgKSB7XG5cblx0XHRcdHRtaW4gPSAoIGJveC5taW4ueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4O1xuXHRcdFx0dG1heCA9ICggYm94Lm1heC54IC0gb3JpZ2luLnggKSAqIGludmRpcng7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0bWluID0gKCBib3gubWF4LnggLSBvcmlnaW4ueCApICogaW52ZGlyeDtcblx0XHRcdHRtYXggPSAoIGJveC5taW4ueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBpbnZkaXJ5ID49IDAgKSB7XG5cblx0XHRcdHR5bWluID0gKCBib3gubWluLnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTtcblx0XHRcdHR5bWF4ID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHR5bWluID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTtcblx0XHRcdHR5bWF4ID0gKCBib3gubWluLnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTtcblxuXHRcdH1cblxuXHRcdGlmICggKCB0bWluID4gdHltYXggKSB8fCAoIHR5bWluID4gdG1heCApICkgcmV0dXJuIG51bGw7XG5cblx0XHQvLyBUaGVzZSBsaW5lcyBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0bWluIG9yIHRtYXggaXMgTmFOXG5cdFx0Ly8gKHJlc3VsdCBvZiAwICogSW5maW5pdHkpLiB4ICE9PSB4IHJldHVybnMgdHJ1ZSBpZiB4IGlzIE5hTlxuXG5cdFx0aWYgKCB0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbiApIHRtaW4gPSB0eW1pbjtcblxuXHRcdGlmICggdHltYXggPCB0bWF4IHx8IHRtYXggIT09IHRtYXggKSB0bWF4ID0gdHltYXg7XG5cblx0XHRpZiAoIGludmRpcnogPj0gMCApIHtcblxuXHRcdFx0dHptaW4gPSAoIGJveC5taW4ueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6O1xuXHRcdFx0dHptYXggPSAoIGJveC5tYXgueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dHptaW4gPSAoIGJveC5tYXgueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6O1xuXHRcdFx0dHptYXggPSAoIGJveC5taW4ueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCAoIHRtaW4gPiB0em1heCApIHx8ICggdHptaW4gPiB0bWF4ICkgKSByZXR1cm4gbnVsbDtcblxuXHRcdGlmICggdHptaW4gPiB0bWluIHx8IHRtaW4gIT09IHRtaW4gKSB0bWluID0gdHptaW47XG5cblx0XHRpZiAoIHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4ICkgdG1heCA9IHR6bWF4O1xuXG5cdFx0Ly9yZXR1cm4gcG9pbnQgY2xvc2VzdCB0byB0aGUgcmF5IChwb3NpdGl2ZSBzaWRlKVxuXG5cdFx0aWYgKCB0bWF4IDwgMCApIHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXQoIHRtaW4gPj0gMCA/IHRtaW4gOiB0bWF4LCB0YXJnZXQgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KCBib3gsIF92ZWN0b3IkYSApICE9PSBudWxsO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RUcmlhbmdsZSggYSwgYiwgYywgYmFja2ZhY2VDdWxsaW5nLCB0YXJnZXQgKSB7XG5cblx0XHQvLyBDb21wdXRlIHRoZSBvZmZzZXQgb3JpZ2luLCBlZGdlcywgYW5kIG5vcm1hbC5cblxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Btam9uaWFrL0dlb21ldHJpY1Rvb2xzL2Jsb2IvbWFzdGVyL0dURW5naW5lL0luY2x1ZGUvTWF0aGVtYXRpY3MvR3RlSW50clJheTNUcmlhbmdsZTMuaFxuXG5cdFx0X2VkZ2UxLnN1YlZlY3RvcnMoIGIsIGEgKTtcblx0XHRfZWRnZTIuc3ViVmVjdG9ycyggYywgYSApO1xuXHRcdF9ub3JtYWwkMS5jcm9zc1ZlY3RvcnMoIF9lZGdlMSwgX2VkZ2UyICk7XG5cblx0XHQvLyBTb2x2ZSBRICsgdCpEID0gYjEqRTEgKyBiMipFMiAoUSA9IGtEaWZmLCBEID0gcmF5IGRpcmVjdGlvbixcblx0XHQvLyBFMSA9IGtFZGdlMSwgRTIgPSBrRWRnZTIsIE4gPSBDcm9zcyhFMSxFMikpIGJ5XG5cdFx0Ly8gICB8RG90KEQsTil8KmIxID0gc2lnbihEb3QoRCxOKSkqRG90KEQsQ3Jvc3MoUSxFMikpXG5cdFx0Ly8gICB8RG90KEQsTil8KmIyID0gc2lnbihEb3QoRCxOKSkqRG90KEQsQ3Jvc3MoRTEsUSkpXG5cdFx0Ly8gICB8RG90KEQsTil8KnQgPSAtc2lnbihEb3QoRCxOKSkqRG90KFEsTilcblx0XHRsZXQgRGROID0gdGhpcy5kaXJlY3Rpb24uZG90KCBfbm9ybWFsJDEgKTtcblx0XHRsZXQgc2lnbjtcblxuXHRcdGlmICggRGROID4gMCApIHtcblxuXHRcdFx0aWYgKCBiYWNrZmFjZUN1bGxpbmcgKSByZXR1cm4gbnVsbDtcblx0XHRcdHNpZ24gPSAxO1xuXG5cdFx0fSBlbHNlIGlmICggRGROIDwgMCApIHtcblxuXHRcdFx0c2lnbiA9IC0gMTtcblx0XHRcdERkTiA9IC0gRGROO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHRfZGlmZi5zdWJWZWN0b3JzKCB0aGlzLm9yaWdpbiwgYSApO1xuXHRcdGNvbnN0IERkUXhFMiA9IHNpZ24gKiB0aGlzLmRpcmVjdGlvbi5kb3QoIF9lZGdlMi5jcm9zc1ZlY3RvcnMoIF9kaWZmLCBfZWRnZTIgKSApO1xuXG5cdFx0Ly8gYjEgPCAwLCBubyBpbnRlcnNlY3Rpb25cblx0XHRpZiAoIERkUXhFMiA8IDAgKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgRGRFMXhRID0gc2lnbiAqIHRoaXMuZGlyZWN0aW9uLmRvdCggX2VkZ2UxLmNyb3NzKCBfZGlmZiApICk7XG5cblx0XHQvLyBiMiA8IDAsIG5vIGludGVyc2VjdGlvblxuXHRcdGlmICggRGRFMXhRIDwgMCApIHtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHQvLyBiMStiMiA+IDEsIG5vIGludGVyc2VjdGlvblxuXHRcdGlmICggRGRReEUyICsgRGRFMXhRID4gRGROICkge1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdC8vIExpbmUgaW50ZXJzZWN0cyB0cmlhbmdsZSwgY2hlY2sgaWYgcmF5IGRvZXMuXG5cdFx0Y29uc3QgUWROID0gLSBzaWduICogX2RpZmYuZG90KCBfbm9ybWFsJDEgKTtcblxuXHRcdC8vIHQgPCAwLCBubyBpbnRlcnNlY3Rpb25cblx0XHRpZiAoIFFkTiA8IDAgKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Ly8gUmF5IGludGVyc2VjdHMgdHJpYW5nbGUuXG5cdFx0cmV0dXJuIHRoaXMuYXQoIFFkTiAvIERkTiwgdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4NCApIHtcblxuXHRcdHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCggbWF0cml4NCApO1xuXHRcdHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4NCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggcmF5ICkge1xuXG5cdFx0cmV0dXJuIHJheS5vcmlnaW4uZXF1YWxzKCB0aGlzLm9yaWdpbiApICYmIHJheS5kaXJlY3Rpb24uZXF1YWxzKCB0aGlzLmRpcmVjdGlvbiApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgTWF0cml4NCB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLmVsZW1lbnRzID0gW1xuXG5cdFx0XHQxLCAwLCAwLCAwLFxuXHRcdFx0MCwgMSwgMCwgMCxcblx0XHRcdDAsIDAsIDEsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHRdO1xuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzZXQoIG4xMSwgbjEyLCBuMTMsIG4xNCwgbjIxLCBuMjIsIG4yMywgbjI0LCBuMzEsIG4zMiwgbjMzLCBuMzQsIG40MSwgbjQyLCBuNDMsIG40NCApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gPSBuMTE7IHRlWyA0IF0gPSBuMTI7IHRlWyA4IF0gPSBuMTM7IHRlWyAxMiBdID0gbjE0O1xuXHRcdHRlWyAxIF0gPSBuMjE7IHRlWyA1IF0gPSBuMjI7IHRlWyA5IF0gPSBuMjM7IHRlWyAxMyBdID0gbjI0O1xuXHRcdHRlWyAyIF0gPSBuMzE7IHRlWyA2IF0gPSBuMzI7IHRlWyAxMCBdID0gbjMzOyB0ZVsgMTQgXSA9IG4zNDtcblx0XHR0ZVsgMyBdID0gbjQxOyB0ZVsgNyBdID0gbjQyOyB0ZVsgMTEgXSA9IG40MzsgdGVbIDE1IF0gPSBuNDQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0aWRlbnRpdHkoKSB7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0MSwgMCwgMCwgMCxcblx0XHRcdDAsIDEsIDAsIDAsXG5cdFx0XHQwLCAwLCAxLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgTWF0cml4NCgpLmZyb21BcnJheSggdGhpcy5lbGVtZW50cyApO1xuXG5cdH1cblxuXHRjb3B5KCBtICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gPSBtZVsgMCBdOyB0ZVsgMSBdID0gbWVbIDEgXTsgdGVbIDIgXSA9IG1lWyAyIF07IHRlWyAzIF0gPSBtZVsgMyBdO1xuXHRcdHRlWyA0IF0gPSBtZVsgNCBdOyB0ZVsgNSBdID0gbWVbIDUgXTsgdGVbIDYgXSA9IG1lWyA2IF07IHRlWyA3IF0gPSBtZVsgNyBdO1xuXHRcdHRlWyA4IF0gPSBtZVsgOCBdOyB0ZVsgOSBdID0gbWVbIDkgXTsgdGVbIDEwIF0gPSBtZVsgMTAgXTsgdGVbIDExIF0gPSBtZVsgMTEgXTtcblx0XHR0ZVsgMTIgXSA9IG1lWyAxMiBdOyB0ZVsgMTMgXSA9IG1lWyAxMyBdOyB0ZVsgMTQgXSA9IG1lWyAxNCBdOyB0ZVsgMTUgXSA9IG1lWyAxNSBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlQb3NpdGlvbiggbSApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cywgbWUgPSBtLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDEyIF0gPSBtZVsgMTIgXTtcblx0XHR0ZVsgMTMgXSA9IG1lWyAxMyBdO1xuXHRcdHRlWyAxNCBdID0gbWVbIDE0IF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbU1hdHJpeDMoIG0gKSB7XG5cblx0XHRjb25zdCBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0bWVbIDAgXSwgbWVbIDMgXSwgbWVbIDYgXSwgMCxcblx0XHRcdG1lWyAxIF0sIG1lWyA0IF0sIG1lWyA3IF0sIDAsXG5cdFx0XHRtZVsgMiBdLCBtZVsgNSBdLCBtZVsgOCBdLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRleHRyYWN0QmFzaXMoIHhBeGlzLCB5QXhpcywgekF4aXMgKSB7XG5cblx0XHR4QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAwICk7XG5cdFx0eUF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbiggdGhpcywgMSApO1xuXHRcdHpBeGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIHRoaXMsIDIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlQmFzaXMoIHhBeGlzLCB5QXhpcywgekF4aXMgKSB7XG5cblx0XHR0aGlzLnNldChcblx0XHRcdHhBeGlzLngsIHlBeGlzLngsIHpBeGlzLngsIDAsXG5cdFx0XHR4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55LCAwLFxuXHRcdFx0eEF4aXMueiwgeUF4aXMueiwgekF4aXMueiwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4dHJhY3RSb3RhdGlvbiggbSApIHtcblxuXHRcdC8vIHRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgcmVmbGVjdGlvbiBtYXRyaWNlc1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblxuXHRcdGNvbnN0IHNjYWxlWCA9IDEgLyBfdjEkNS5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAwICkubGVuZ3RoKCk7XG5cdFx0Y29uc3Qgc2NhbGVZID0gMSAvIF92MSQ1LnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDEgKS5sZW5ndGgoKTtcblx0XHRjb25zdCBzY2FsZVogPSAxIC8gX3YxJDUuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMiApLmxlbmd0aCgpO1xuXG5cdFx0dGVbIDAgXSA9IG1lWyAwIF0gKiBzY2FsZVg7XG5cdFx0dGVbIDEgXSA9IG1lWyAxIF0gKiBzY2FsZVg7XG5cdFx0dGVbIDIgXSA9IG1lWyAyIF0gKiBzY2FsZVg7XG5cdFx0dGVbIDMgXSA9IDA7XG5cblx0XHR0ZVsgNCBdID0gbWVbIDQgXSAqIHNjYWxlWTtcblx0XHR0ZVsgNSBdID0gbWVbIDUgXSAqIHNjYWxlWTtcblx0XHR0ZVsgNiBdID0gbWVbIDYgXSAqIHNjYWxlWTtcblx0XHR0ZVsgNyBdID0gMDtcblxuXHRcdHRlWyA4IF0gPSBtZVsgOCBdICogc2NhbGVaO1xuXHRcdHRlWyA5IF0gPSBtZVsgOSBdICogc2NhbGVaO1xuXHRcdHRlWyAxMCBdID0gbWVbIDEwIF0gKiBzY2FsZVo7XG5cdFx0dGVbIDExIF0gPSAwO1xuXG5cdFx0dGVbIDEyIF0gPSAwO1xuXHRcdHRlWyAxMyBdID0gMDtcblx0XHR0ZVsgMTQgXSA9IDA7XG5cdFx0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvbkZyb21FdWxlciggZXVsZXIgKSB7XG5cblx0XHRpZiAoICEgKCBldWxlciAmJiBldWxlci5pc0V1bGVyICkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLicgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IHggPSBldWxlci54LCB5ID0gZXVsZXIueSwgeiA9IGV1bGVyLno7XG5cdFx0Y29uc3QgYSA9IE1hdGguY29zKCB4ICksIGIgPSBNYXRoLnNpbiggeCApO1xuXHRcdGNvbnN0IGMgPSBNYXRoLmNvcyggeSApLCBkID0gTWF0aC5zaW4oIHkgKTtcblx0XHRjb25zdCBlID0gTWF0aC5jb3MoIHogKSwgZiA9IE1hdGguc2luKCB6ICk7XG5cblx0XHRpZiAoIGV1bGVyLm9yZGVyID09PSAnWFlaJyApIHtcblxuXHRcdFx0Y29uc3QgYWUgPSBhICogZSwgYWYgPSBhICogZiwgYmUgPSBiICogZSwgYmYgPSBiICogZjtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IC0gYyAqIGY7XG5cdFx0XHR0ZVsgOCBdID0gZDtcblxuXHRcdFx0dGVbIDEgXSA9IGFmICsgYmUgKiBkO1xuXHRcdFx0dGVbIDUgXSA9IGFlIC0gYmYgKiBkO1xuXHRcdFx0dGVbIDkgXSA9IC0gYiAqIGM7XG5cblx0XHRcdHRlWyAyIF0gPSBiZiAtIGFlICogZDtcblx0XHRcdHRlWyA2IF0gPSBiZSArIGFmICogZDtcblx0XHRcdHRlWyAxMCBdID0gYSAqIGM7XG5cblx0XHR9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1lYWicgKSB7XG5cblx0XHRcdGNvbnN0IGNlID0gYyAqIGUsIGNmID0gYyAqIGYsIGRlID0gZCAqIGUsIGRmID0gZCAqIGY7XG5cblx0XHRcdHRlWyAwIF0gPSBjZSArIGRmICogYjtcblx0XHRcdHRlWyA0IF0gPSBkZSAqIGIgLSBjZjtcblx0XHRcdHRlWyA4IF0gPSBhICogZDtcblxuXHRcdFx0dGVbIDEgXSA9IGEgKiBmO1xuXHRcdFx0dGVbIDUgXSA9IGEgKiBlO1xuXHRcdFx0dGVbIDkgXSA9IC0gYjtcblxuXHRcdFx0dGVbIDIgXSA9IGNmICogYiAtIGRlO1xuXHRcdFx0dGVbIDYgXSA9IGRmICsgY2UgKiBiO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWlhZJyApIHtcblxuXHRcdFx0Y29uc3QgY2UgPSBjICogZSwgY2YgPSBjICogZiwgZGUgPSBkICogZSwgZGYgPSBkICogZjtcblxuXHRcdFx0dGVbIDAgXSA9IGNlIC0gZGYgKiBiO1xuXHRcdFx0dGVbIDQgXSA9IC0gYSAqIGY7XG5cdFx0XHR0ZVsgOCBdID0gZGUgKyBjZiAqIGI7XG5cblx0XHRcdHRlWyAxIF0gPSBjZiArIGRlICogYjtcblx0XHRcdHRlWyA1IF0gPSBhICogZTtcblx0XHRcdHRlWyA5IF0gPSBkZiAtIGNlICogYjtcblxuXHRcdFx0dGVbIDIgXSA9IC0gYSAqIGQ7XG5cdFx0XHR0ZVsgNiBdID0gYjtcblx0XHRcdHRlWyAxMCBdID0gYSAqIGM7XG5cblx0XHR9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1pZWCcgKSB7XG5cblx0XHRcdGNvbnN0IGFlID0gYSAqIGUsIGFmID0gYSAqIGYsIGJlID0gYiAqIGUsIGJmID0gYiAqIGY7XG5cblx0XHRcdHRlWyAwIF0gPSBjICogZTtcblx0XHRcdHRlWyA0IF0gPSBiZSAqIGQgLSBhZjtcblx0XHRcdHRlWyA4IF0gPSBhZSAqIGQgKyBiZjtcblxuXHRcdFx0dGVbIDEgXSA9IGMgKiBmO1xuXHRcdFx0dGVbIDUgXSA9IGJmICogZCArIGFlO1xuXHRcdFx0dGVbIDkgXSA9IGFmICogZCAtIGJlO1xuXG5cdFx0XHR0ZVsgMiBdID0gLSBkO1xuXHRcdFx0dGVbIDYgXSA9IGIgKiBjO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVpYJyApIHtcblxuXHRcdFx0Y29uc3QgYWMgPSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBiICogZDtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IGJkIC0gYWMgKiBmO1xuXHRcdFx0dGVbIDggXSA9IGJjICogZiArIGFkO1xuXG5cdFx0XHR0ZVsgMSBdID0gZjtcblx0XHRcdHRlWyA1IF0gPSBhICogZTtcblx0XHRcdHRlWyA5IF0gPSAtIGIgKiBlO1xuXG5cdFx0XHR0ZVsgMiBdID0gLSBkICogZTtcblx0XHRcdHRlWyA2IF0gPSBhZCAqIGYgKyBiYztcblx0XHRcdHRlWyAxMCBdID0gYWMgLSBiZCAqIGY7XG5cblx0XHR9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1haWScgKSB7XG5cblx0XHRcdGNvbnN0IGFjID0gYSAqIGMsIGFkID0gYSAqIGQsIGJjID0gYiAqIGMsIGJkID0gYiAqIGQ7XG5cblx0XHRcdHRlWyAwIF0gPSBjICogZTtcblx0XHRcdHRlWyA0IF0gPSAtIGY7XG5cdFx0XHR0ZVsgOCBdID0gZCAqIGU7XG5cblx0XHRcdHRlWyAxIF0gPSBhYyAqIGYgKyBiZDtcblx0XHRcdHRlWyA1IF0gPSBhICogZTtcblx0XHRcdHRlWyA5IF0gPSBhZCAqIGYgLSBiYztcblxuXHRcdFx0dGVbIDIgXSA9IGJjICogZiAtIGFkO1xuXHRcdFx0dGVbIDYgXSA9IGIgKiBlO1xuXHRcdFx0dGVbIDEwIF0gPSBiZCAqIGYgKyBhYztcblxuXHRcdH1cblxuXHRcdC8vIGJvdHRvbSByb3dcblx0XHR0ZVsgMyBdID0gMDtcblx0XHR0ZVsgNyBdID0gMDtcblx0XHR0ZVsgMTEgXSA9IDA7XG5cblx0XHQvLyBsYXN0IGNvbHVtblxuXHRcdHRlWyAxMiBdID0gMDtcblx0XHR0ZVsgMTMgXSA9IDA7XG5cdFx0dGVbIDE0IF0gPSAwO1xuXHRcdHRlWyAxNSBdID0gMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApIHtcblxuXHRcdHJldHVybiB0aGlzLmNvbXBvc2UoIF96ZXJvLCBxLCBfb25lICk7XG5cblx0fVxuXG5cdGxvb2tBdCggZXllLCB0YXJnZXQsIHVwICkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0X3ouc3ViVmVjdG9ycyggZXllLCB0YXJnZXQgKTtcblxuXHRcdGlmICggX3oubGVuZ3RoU3EoKSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gZXllIGFuZCB0YXJnZXQgYXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uXG5cblx0XHRcdF96LnogPSAxO1xuXG5cdFx0fVxuXG5cdFx0X3oubm9ybWFsaXplKCk7XG5cdFx0X3guY3Jvc3NWZWN0b3JzKCB1cCwgX3ogKTtcblxuXHRcdGlmICggX3gubGVuZ3RoU3EoKSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gdXAgYW5kIHogYXJlIHBhcmFsbGVsXG5cblx0XHRcdGlmICggTWF0aC5hYnMoIHVwLnogKSA9PT0gMSApIHtcblxuXHRcdFx0XHRfei54ICs9IDAuMDAwMTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfei56ICs9IDAuMDAwMTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfei5ub3JtYWxpemUoKTtcblx0XHRcdF94LmNyb3NzVmVjdG9ycyggdXAsIF96ICk7XG5cblx0XHR9XG5cblx0XHRfeC5ub3JtYWxpemUoKTtcblx0XHRfeS5jcm9zc1ZlY3RvcnMoIF96LCBfeCApO1xuXG5cdFx0dGVbIDAgXSA9IF94Lng7IHRlWyA0IF0gPSBfeS54OyB0ZVsgOCBdID0gX3oueDtcblx0XHR0ZVsgMSBdID0gX3gueTsgdGVbIDUgXSA9IF95Lnk7IHRlWyA5IF0gPSBfei55O1xuXHRcdHRlWyAyIF0gPSBfeC56OyB0ZVsgNiBdID0gX3kuejsgdGVbIDEwIF0gPSBfei56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG11bHRpcGx5KCBtLCBuICkge1xuXG5cdFx0aWYgKCBuICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIG0sIG4gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIHRoaXMsIG0gKTtcblxuXHR9XG5cblx0cHJlbXVsdGlwbHkoIG0gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBtLCB0aGlzICk7XG5cblx0fVxuXG5cdG11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSB7XG5cblx0XHRjb25zdCBhZSA9IGEuZWxlbWVudHM7XG5cdFx0Y29uc3QgYmUgPSBiLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IGExMSA9IGFlWyAwIF0sIGExMiA9IGFlWyA0IF0sIGExMyA9IGFlWyA4IF0sIGExNCA9IGFlWyAxMiBdO1xuXHRcdGNvbnN0IGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFlWyA1IF0sIGEyMyA9IGFlWyA5IF0sIGEyNCA9IGFlWyAxMyBdO1xuXHRcdGNvbnN0IGEzMSA9IGFlWyAyIF0sIGEzMiA9IGFlWyA2IF0sIGEzMyA9IGFlWyAxMCBdLCBhMzQgPSBhZVsgMTQgXTtcblx0XHRjb25zdCBhNDEgPSBhZVsgMyBdLCBhNDIgPSBhZVsgNyBdLCBhNDMgPSBhZVsgMTEgXSwgYTQ0ID0gYWVbIDE1IF07XG5cblx0XHRjb25zdCBiMTEgPSBiZVsgMCBdLCBiMTIgPSBiZVsgNCBdLCBiMTMgPSBiZVsgOCBdLCBiMTQgPSBiZVsgMTIgXTtcblx0XHRjb25zdCBiMjEgPSBiZVsgMSBdLCBiMjIgPSBiZVsgNSBdLCBiMjMgPSBiZVsgOSBdLCBiMjQgPSBiZVsgMTMgXTtcblx0XHRjb25zdCBiMzEgPSBiZVsgMiBdLCBiMzIgPSBiZVsgNiBdLCBiMzMgPSBiZVsgMTAgXSwgYjM0ID0gYmVbIDE0IF07XG5cdFx0Y29uc3QgYjQxID0gYmVbIDMgXSwgYjQyID0gYmVbIDcgXSwgYjQzID0gYmVbIDExIF0sIGI0NCA9IGJlWyAxNSBdO1xuXG5cdFx0dGVbIDAgXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMSArIGExNCAqIGI0MTtcblx0XHR0ZVsgNCBdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICogYjMyICsgYTE0ICogYjQyO1xuXHRcdHRlWyA4IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzMgKyBhMTQgKiBiNDM7XG5cdFx0dGVbIDEyIF0gPSBhMTEgKiBiMTQgKyBhMTIgKiBiMjQgKyBhMTMgKiBiMzQgKyBhMTQgKiBiNDQ7XG5cblx0XHR0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxICsgYTI0ICogYjQxO1xuXHRcdHRlWyA1IF0gPSBhMjEgKiBiMTIgKyBhMjIgKiBiMjIgKyBhMjMgKiBiMzIgKyBhMjQgKiBiNDI7XG5cdFx0dGVbIDkgXSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0Mztcblx0XHR0ZVsgMTMgXSA9IGEyMSAqIGIxNCArIGEyMiAqIGIyNCArIGEyMyAqIGIzNCArIGEyNCAqIGI0NDtcblxuXHRcdHRlWyAyIF0gPSBhMzEgKiBiMTEgKyBhMzIgKiBiMjEgKyBhMzMgKiBiMzEgKyBhMzQgKiBiNDE7XG5cdFx0dGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0Mjtcblx0XHR0ZVsgMTAgXSA9IGEzMSAqIGIxMyArIGEzMiAqIGIyMyArIGEzMyAqIGIzMyArIGEzNCAqIGI0Mztcblx0XHR0ZVsgMTQgXSA9IGEzMSAqIGIxNCArIGEzMiAqIGIyNCArIGEzMyAqIGIzNCArIGEzNCAqIGI0NDtcblxuXHRcdHRlWyAzIF0gPSBhNDEgKiBiMTEgKyBhNDIgKiBiMjEgKyBhNDMgKiBiMzEgKyBhNDQgKiBiNDE7XG5cdFx0dGVbIDcgXSA9IGE0MSAqIGIxMiArIGE0MiAqIGIyMiArIGE0MyAqIGIzMiArIGE0NCAqIGI0Mjtcblx0XHR0ZVsgMTEgXSA9IGE0MSAqIGIxMyArIGE0MiAqIGIyMyArIGE0MyAqIGIzMyArIGE0NCAqIGI0Mztcblx0XHR0ZVsgMTUgXSA9IGE0MSAqIGIxNCArIGE0MiAqIGIyNCArIGE0MyAqIGIzNCArIGE0NCAqIGI0NDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtdWx0aXBseVNjYWxhciggcyApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHRlWyAwIF0gKj0gczsgdGVbIDQgXSAqPSBzOyB0ZVsgOCBdICo9IHM7IHRlWyAxMiBdICo9IHM7XG5cdFx0dGVbIDEgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA5IF0gKj0gczsgdGVbIDEzIF0gKj0gcztcblx0XHR0ZVsgMiBdICo9IHM7IHRlWyA2IF0gKj0gczsgdGVbIDEwIF0gKj0gczsgdGVbIDE0IF0gKj0gcztcblx0XHR0ZVsgMyBdICo9IHM7IHRlWyA3IF0gKj0gczsgdGVbIDExIF0gKj0gczsgdGVbIDE1IF0gKj0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkZXRlcm1pbmFudCgpIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IG4xMSA9IHRlWyAwIF0sIG4xMiA9IHRlWyA0IF0sIG4xMyA9IHRlWyA4IF0sIG4xNCA9IHRlWyAxMiBdO1xuXHRcdGNvbnN0IG4yMSA9IHRlWyAxIF0sIG4yMiA9IHRlWyA1IF0sIG4yMyA9IHRlWyA5IF0sIG4yNCA9IHRlWyAxMyBdO1xuXHRcdGNvbnN0IG4zMSA9IHRlWyAyIF0sIG4zMiA9IHRlWyA2IF0sIG4zMyA9IHRlWyAxMCBdLCBuMzQgPSB0ZVsgMTQgXTtcblx0XHRjb25zdCBuNDEgPSB0ZVsgMyBdLCBuNDIgPSB0ZVsgNyBdLCBuNDMgPSB0ZVsgMTEgXSwgbjQ0ID0gdGVbIDE1IF07XG5cblx0XHQvL1RPRE86IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudFxuXHRcdC8vKCBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG0gKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdG40MSAqIChcblx0XHRcdFx0KyBuMTQgKiBuMjMgKiBuMzJcblx0XHRcdFx0IC0gbjEzICogbjI0ICogbjMyXG5cdFx0XHRcdCAtIG4xNCAqIG4yMiAqIG4zM1xuXHRcdFx0XHQgKyBuMTIgKiBuMjQgKiBuMzNcblx0XHRcdFx0ICsgbjEzICogbjIyICogbjM0XG5cdFx0XHRcdCAtIG4xMiAqIG4yMyAqIG4zNFxuXHRcdFx0KSArXG5cdFx0XHRuNDIgKiAoXG5cdFx0XHRcdCsgbjExICogbjIzICogbjM0XG5cdFx0XHRcdCAtIG4xMSAqIG4yNCAqIG4zM1xuXHRcdFx0XHQgKyBuMTQgKiBuMjEgKiBuMzNcblx0XHRcdFx0IC0gbjEzICogbjIxICogbjM0XG5cdFx0XHRcdCArIG4xMyAqIG4yNCAqIG4zMVxuXHRcdFx0XHQgLSBuMTQgKiBuMjMgKiBuMzFcblx0XHRcdCkgK1xuXHRcdFx0bjQzICogKFxuXHRcdFx0XHQrIG4xMSAqIG4yNCAqIG4zMlxuXHRcdFx0XHQgLSBuMTEgKiBuMjIgKiBuMzRcblx0XHRcdFx0IC0gbjE0ICogbjIxICogbjMyXG5cdFx0XHRcdCArIG4xMiAqIG4yMSAqIG4zNFxuXHRcdFx0XHQgKyBuMTQgKiBuMjIgKiBuMzFcblx0XHRcdFx0IC0gbjEyICogbjI0ICogbjMxXG5cdFx0XHQpICtcblx0XHRcdG40NCAqIChcblx0XHRcdFx0LSBuMTMgKiBuMjIgKiBuMzFcblx0XHRcdFx0IC0gbjExICogbjIzICogbjMyXG5cdFx0XHRcdCArIG4xMSAqIG4yMiAqIG4zM1xuXHRcdFx0XHQgKyBuMTMgKiBuMjEgKiBuMzJcblx0XHRcdFx0IC0gbjEyICogbjIxICogbjMzXG5cdFx0XHRcdCArIG4xMiAqIG4yMyAqIG4zMVxuXHRcdFx0KVxuXG5cdFx0KTtcblxuXHR9XG5cblx0dHJhbnNwb3NlKCkge1xuXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGxldCB0bXA7XG5cblx0XHR0bXAgPSB0ZVsgMSBdOyB0ZVsgMSBdID0gdGVbIDQgXTsgdGVbIDQgXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVsgMiBdOyB0ZVsgMiBdID0gdGVbIDggXTsgdGVbIDggXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVsgNiBdOyB0ZVsgNiBdID0gdGVbIDkgXTsgdGVbIDkgXSA9IHRtcDtcblxuXHRcdHRtcCA9IHRlWyAzIF07IHRlWyAzIF0gPSB0ZVsgMTIgXTsgdGVbIDEyIF0gPSB0bXA7XG5cdFx0dG1wID0gdGVbIDcgXTsgdGVbIDcgXSA9IHRlWyAxMyBdOyB0ZVsgMTMgXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVsgMTEgXTsgdGVbIDExIF0gPSB0ZVsgMTQgXTsgdGVbIDE0IF0gPSB0bXA7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0UG9zaXRpb24oIHgsIHksIHogKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRpZiAoIHguaXNWZWN0b3IzICkge1xuXG5cdFx0XHR0ZVsgMTIgXSA9IHgueDtcblx0XHRcdHRlWyAxMyBdID0geC55O1xuXHRcdFx0dGVbIDE0IF0gPSB4Lno7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0ZVsgMTIgXSA9IHg7XG5cdFx0XHR0ZVsgMTMgXSA9IHk7XG5cdFx0XHR0ZVsgMTQgXSA9IHo7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0aW52ZXJ0KCkge1xuXG5cdFx0Ly8gYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtXG5cdFx0Y29uc3QgdGUgPSB0aGlzLmVsZW1lbnRzLFxuXG5cdFx0XHRuMTEgPSB0ZVsgMCBdLCBuMjEgPSB0ZVsgMSBdLCBuMzEgPSB0ZVsgMiBdLCBuNDEgPSB0ZVsgMyBdLFxuXHRcdFx0bjEyID0gdGVbIDQgXSwgbjIyID0gdGVbIDUgXSwgbjMyID0gdGVbIDYgXSwgbjQyID0gdGVbIDcgXSxcblx0XHRcdG4xMyA9IHRlWyA4IF0sIG4yMyA9IHRlWyA5IF0sIG4zMyA9IHRlWyAxMCBdLCBuNDMgPSB0ZVsgMTEgXSxcblx0XHRcdG4xNCA9IHRlWyAxMiBdLCBuMjQgPSB0ZVsgMTMgXSwgbjM0ID0gdGVbIDE0IF0sIG40NCA9IHRlWyAxNSBdLFxuXG5cdFx0XHR0MTEgPSBuMjMgKiBuMzQgKiBuNDIgLSBuMjQgKiBuMzMgKiBuNDIgKyBuMjQgKiBuMzIgKiBuNDMgLSBuMjIgKiBuMzQgKiBuNDMgLSBuMjMgKiBuMzIgKiBuNDQgKyBuMjIgKiBuMzMgKiBuNDQsXG5cdFx0XHR0MTIgPSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQgKiBuMzIgKiBuNDMgKyBuMTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBuMzMgKiBuNDQsXG5cdFx0XHR0MTMgPSBuMTMgKiBuMjQgKiBuNDIgLSBuMTQgKiBuMjMgKiBuNDIgKyBuMTQgKiBuMjIgKiBuNDMgLSBuMTIgKiBuMjQgKiBuNDMgLSBuMTMgKiBuMjIgKiBuNDQgKyBuMTIgKiBuMjMgKiBuNDQsXG5cdFx0XHR0MTQgPSBuMTQgKiBuMjMgKiBuMzIgLSBuMTMgKiBuMjQgKiBuMzIgLSBuMTQgKiBuMjIgKiBuMzMgKyBuMTIgKiBuMjQgKiBuMzMgKyBuMTMgKiBuMjIgKiBuMzQgLSBuMTIgKiBuMjMgKiBuMzQ7XG5cblx0XHRjb25zdCBkZXQgPSBuMTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTMgKyBuNDEgKiB0MTQ7XG5cblx0XHRpZiAoIGRldCA9PT0gMCApIHJldHVybiB0aGlzLnNldCggMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCApO1xuXG5cdFx0Y29uc3QgZGV0SW52ID0gMSAvIGRldDtcblxuXHRcdHRlWyAwIF0gPSB0MTEgKiBkZXRJbnY7XG5cdFx0dGVbIDEgXSA9ICggbjI0ICogbjMzICogbjQxIC0gbjIzICogbjM0ICogbjQxIC0gbjI0ICogbjMxICogbjQzICsgbjIxICogbjM0ICogbjQzICsgbjIzICogbjMxICogbjQ0IC0gbjIxICogbjMzICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDIgXSA9ICggbjIyICogbjM0ICogbjQxIC0gbjI0ICogbjMyICogbjQxICsgbjI0ICogbjMxICogbjQyIC0gbjIxICogbjM0ICogbjQyIC0gbjIyICogbjMxICogbjQ0ICsgbjIxICogbjMyICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDMgXSA9ICggbjIzICogbjMyICogbjQxIC0gbjIyICogbjMzICogbjQxIC0gbjIzICogbjMxICogbjQyICsgbjIxICogbjMzICogbjQyICsgbjIyICogbjMxICogbjQzIC0gbjIxICogbjMyICogbjQzICkgKiBkZXRJbnY7XG5cblx0XHR0ZVsgNCBdID0gdDEyICogZGV0SW52O1xuXHRcdHRlWyA1IF0gPSAoIG4xMyAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMyAqIG40MSArIG4xNCAqIG4zMSAqIG40MyAtIG4xMSAqIG4zNCAqIG40MyAtIG4xMyAqIG4zMSAqIG40NCArIG4xMSAqIG4zMyAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyA2IF0gPSAoIG4xNCAqIG4zMiAqIG40MSAtIG4xMiAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMSAqIG40MiArIG4xMSAqIG4zNCAqIG40MiArIG4xMiAqIG4zMSAqIG40NCAtIG4xMSAqIG4zMiAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyA3IF0gPSAoIG4xMiAqIG4zMyAqIG40MSAtIG4xMyAqIG4zMiAqIG40MSArIG4xMyAqIG4zMSAqIG40MiAtIG4xMSAqIG4zMyAqIG40MiAtIG4xMiAqIG4zMSAqIG40MyArIG4xMSAqIG4zMiAqIG40MyApICogZGV0SW52O1xuXG5cdFx0dGVbIDggXSA9IHQxMyAqIGRldEludjtcblx0XHR0ZVsgOSBdID0gKCBuMTQgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjEgKiBuNDMgKyBuMTEgKiBuMjQgKiBuNDMgKyBuMTMgKiBuMjEgKiBuNDQgLSBuMTEgKiBuMjMgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgMTAgXSA9ICggbjEyICogbjI0ICogbjQxIC0gbjE0ICogbjIyICogbjQxICsgbjE0ICogbjIxICogbjQyIC0gbjExICogbjI0ICogbjQyIC0gbjEyICogbjIxICogbjQ0ICsgbjExICogbjIyICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDExIF0gPSAoIG4xMyAqIG4yMiAqIG40MSAtIG4xMiAqIG4yMyAqIG40MSAtIG4xMyAqIG4yMSAqIG40MiArIG4xMSAqIG4yMyAqIG40MiArIG4xMiAqIG4yMSAqIG40MyAtIG4xMSAqIG4yMiAqIG40MyApICogZGV0SW52O1xuXG5cdFx0dGVbIDEyIF0gPSB0MTQgKiBkZXRJbnY7XG5cdFx0dGVbIDEzIF0gPSAoIG4xMyAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMyAqIG4zMSArIG4xNCAqIG4yMSAqIG4zMyAtIG4xMSAqIG4yNCAqIG4zMyAtIG4xMyAqIG4yMSAqIG4zNCArIG4xMSAqIG4yMyAqIG4zNCApICogZGV0SW52O1xuXHRcdHRlWyAxNCBdID0gKCBuMTQgKiBuMjIgKiBuMzEgLSBuMTIgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjEgKiBuMzIgKyBuMTEgKiBuMjQgKiBuMzIgKyBuMTIgKiBuMjEgKiBuMzQgLSBuMTEgKiBuMjIgKiBuMzQgKSAqIGRldEludjtcblx0XHR0ZVsgMTUgXSA9ICggbjEyICogbjIzICogbjMxIC0gbjEzICogbjIyICogbjMxICsgbjEzICogbjIxICogbjMyIC0gbjExICogbjIzICogbjMyIC0gbjEyICogbjIxICogbjMzICsgbjExICogbjIyICogbjMzICkgKiBkZXRJbnY7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2NhbGUoIHYgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgeCA9IHYueCwgeSA9IHYueSwgeiA9IHYuejtcblxuXHRcdHRlWyAwIF0gKj0geDsgdGVbIDQgXSAqPSB5OyB0ZVsgOCBdICo9IHo7XG5cdFx0dGVbIDEgXSAqPSB4OyB0ZVsgNSBdICo9IHk7IHRlWyA5IF0gKj0gejtcblx0XHR0ZVsgMiBdICo9IHg7IHRlWyA2IF0gKj0geTsgdGVbIDEwIF0gKj0gejtcblx0XHR0ZVsgMyBdICo9IHg7IHRlWyA3IF0gKj0geTsgdGVbIDExIF0gKj0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRNYXhTY2FsZU9uQXhpcygpIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbnN0IHNjYWxlWFNxID0gdGVbIDAgXSAqIHRlWyAwIF0gKyB0ZVsgMSBdICogdGVbIDEgXSArIHRlWyAyIF0gKiB0ZVsgMiBdO1xuXHRcdGNvbnN0IHNjYWxlWVNxID0gdGVbIDQgXSAqIHRlWyA0IF0gKyB0ZVsgNSBdICogdGVbIDUgXSArIHRlWyA2IF0gKiB0ZVsgNiBdO1xuXHRcdGNvbnN0IHNjYWxlWlNxID0gdGVbIDggXSAqIHRlWyA4IF0gKyB0ZVsgOSBdICogdGVbIDkgXSArIHRlWyAxMCBdICogdGVbIDEwIF07XG5cblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCBNYXRoLm1heCggc2NhbGVYU3EsIHNjYWxlWVNxLCBzY2FsZVpTcSApICk7XG5cblx0fVxuXG5cdG1ha2VUcmFuc2xhdGlvbiggeCwgeSwgeiApIHtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCAwLCAwLCB4LFxuXHRcdFx0MCwgMSwgMCwgeSxcblx0XHRcdDAsIDAsIDEsIHosXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvblgoIHRoZXRhICkge1xuXG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0MSwgMCwgMCwgMCxcblx0XHRcdDAsIGMsIC0gcywgMCxcblx0XHRcdDAsIHMsIGMsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvblkoIHRoZXRhICkge1xuXG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0IGMsIDAsIHMsIDAsXG5cdFx0XHQgMCwgMSwgMCwgMCxcblx0XHRcdC0gcywgMCwgYywgMCxcblx0XHRcdCAwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvblooIHRoZXRhICkge1xuXG5cdFx0Y29uc3QgYyA9IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0YywgLSBzLCAwLCAwLFxuXHRcdFx0cywgYywgMCwgMCxcblx0XHRcdDAsIDAsIDEsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VSb3RhdGlvbkF4aXMoIGF4aXMsIGFuZ2xlICkge1xuXG5cdFx0Ly8gQmFzZWQgb24gaHR0cDovL3d3dy5nYW1lZGV2Lm5ldC9yZWZlcmVuY2UvYXJ0aWNsZXMvYXJ0aWNsZTExOTkuYXNwXG5cblx0XHRjb25zdCBjID0gTWF0aC5jb3MoIGFuZ2xlICk7XG5cdFx0Y29uc3QgcyA9IE1hdGguc2luKCBhbmdsZSApO1xuXHRcdGNvbnN0IHQgPSAxIC0gYztcblx0XHRjb25zdCB4ID0gYXhpcy54LCB5ID0gYXhpcy55LCB6ID0gYXhpcy56O1xuXHRcdGNvbnN0IHR4ID0gdCAqIHgsIHR5ID0gdCAqIHk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0dHggKiB4ICsgYywgdHggKiB5IC0gcyAqIHosIHR4ICogeiArIHMgKiB5LCAwLFxuXHRcdFx0dHggKiB5ICsgcyAqIHosIHR5ICogeSArIGMsIHR5ICogeiAtIHMgKiB4LCAwLFxuXHRcdFx0dHggKiB6IC0gcyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICogeiAqIHogKyBjLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlU2NhbGUoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0eCwgMCwgMCwgMCxcblx0XHRcdDAsIHksIDAsIDAsXG5cdFx0XHQwLCAwLCB6LCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlU2hlYXIoIHh5LCB4eiwgeXgsIHl6LCB6eCwgenkgKSB7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0MSwgeXgsIHp4LCAwLFxuXHRcdFx0eHksIDEsIHp5LCAwLFxuXHRcdFx0eHosIHl6LCAxLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb21wb3NlKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRjb25zdCB4ID0gcXVhdGVybmlvbi5feCwgeSA9IHF1YXRlcm5pb24uX3ksIHogPSBxdWF0ZXJuaW9uLl96LCB3ID0gcXVhdGVybmlvbi5fdztcblx0XHRjb25zdCB4MiA9IHggKyB4LFx0eTIgPSB5ICsgeSwgejIgPSB6ICsgejtcblx0XHRjb25zdCB4eCA9IHggKiB4MiwgeHkgPSB4ICogeTIsIHh6ID0geCAqIHoyO1xuXHRcdGNvbnN0IHl5ID0geSAqIHkyLCB5eiA9IHkgKiB6MiwgenogPSB6ICogejI7XG5cdFx0Y29uc3Qgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjtcblxuXHRcdGNvbnN0IHN4ID0gc2NhbGUueCwgc3kgPSBzY2FsZS55LCBzeiA9IHNjYWxlLno7XG5cblx0XHR0ZVsgMCBdID0gKCAxIC0gKCB5eSArIHp6ICkgKSAqIHN4O1xuXHRcdHRlWyAxIF0gPSAoIHh5ICsgd3ogKSAqIHN4O1xuXHRcdHRlWyAyIF0gPSAoIHh6IC0gd3kgKSAqIHN4O1xuXHRcdHRlWyAzIF0gPSAwO1xuXG5cdFx0dGVbIDQgXSA9ICggeHkgLSB3eiApICogc3k7XG5cdFx0dGVbIDUgXSA9ICggMSAtICggeHggKyB6eiApICkgKiBzeTtcblx0XHR0ZVsgNiBdID0gKCB5eiArIHd4ICkgKiBzeTtcblx0XHR0ZVsgNyBdID0gMDtcblxuXHRcdHRlWyA4IF0gPSAoIHh6ICsgd3kgKSAqIHN6O1xuXHRcdHRlWyA5IF0gPSAoIHl6IC0gd3ggKSAqIHN6O1xuXHRcdHRlWyAxMCBdID0gKCAxIC0gKCB4eCArIHl5ICkgKSAqIHN6O1xuXHRcdHRlWyAxMSBdID0gMDtcblxuXHRcdHRlWyAxMiBdID0gcG9zaXRpb24ueDtcblx0XHR0ZVsgMTMgXSA9IHBvc2l0aW9uLnk7XG5cdFx0dGVbIDE0IF0gPSBwb3NpdGlvbi56O1xuXHRcdHRlWyAxNSBdID0gMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkZWNvbXBvc2UoIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGxldCBzeCA9IF92MSQ1LnNldCggdGVbIDAgXSwgdGVbIDEgXSwgdGVbIDIgXSApLmxlbmd0aCgpO1xuXHRcdGNvbnN0IHN5ID0gX3YxJDUuc2V0KCB0ZVsgNCBdLCB0ZVsgNSBdLCB0ZVsgNiBdICkubGVuZ3RoKCk7XG5cdFx0Y29uc3Qgc3ogPSBfdjEkNS5zZXQoIHRlWyA4IF0sIHRlWyA5IF0sIHRlWyAxMCBdICkubGVuZ3RoKCk7XG5cblx0XHQvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxuXHRcdGNvbnN0IGRldCA9IHRoaXMuZGV0ZXJtaW5hbnQoKTtcblx0XHRpZiAoIGRldCA8IDAgKSBzeCA9IC0gc3g7XG5cblx0XHRwb3NpdGlvbi54ID0gdGVbIDEyIF07XG5cdFx0cG9zaXRpb24ueSA9IHRlWyAxMyBdO1xuXHRcdHBvc2l0aW9uLnogPSB0ZVsgMTQgXTtcblxuXHRcdC8vIHNjYWxlIHRoZSByb3RhdGlvbiBwYXJ0XG5cdFx0X20xJDIuY29weSggdGhpcyApO1xuXG5cdFx0Y29uc3QgaW52U1ggPSAxIC8gc3g7XG5cdFx0Y29uc3QgaW52U1kgPSAxIC8gc3k7XG5cdFx0Y29uc3QgaW52U1ogPSAxIC8gc3o7XG5cblx0XHRfbTEkMi5lbGVtZW50c1sgMCBdICo9IGludlNYO1xuXHRcdF9tMSQyLmVsZW1lbnRzWyAxIF0gKj0gaW52U1g7XG5cdFx0X20xJDIuZWxlbWVudHNbIDIgXSAqPSBpbnZTWDtcblxuXHRcdF9tMSQyLmVsZW1lbnRzWyA0IF0gKj0gaW52U1k7XG5cdFx0X20xJDIuZWxlbWVudHNbIDUgXSAqPSBpbnZTWTtcblx0XHRfbTEkMi5lbGVtZW50c1sgNiBdICo9IGludlNZO1xuXG5cdFx0X20xJDIuZWxlbWVudHNbIDggXSAqPSBpbnZTWjtcblx0XHRfbTEkMi5lbGVtZW50c1sgOSBdICo9IGludlNaO1xuXHRcdF9tMSQyLmVsZW1lbnRzWyAxMCBdICo9IGludlNaO1xuXG5cdFx0cXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoIF9tMSQyICk7XG5cblx0XHRzY2FsZS54ID0gc3g7XG5cdFx0c2NhbGUueSA9IHN5O1xuXHRcdHNjYWxlLnogPSBzejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRtYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkge1xuXG5cdFx0aWYgKCBmYXIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLicgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCB4ID0gMiAqIG5lYXIgLyAoIHJpZ2h0IC0gbGVmdCApO1xuXHRcdGNvbnN0IHkgPSAyICogbmVhciAvICggdG9wIC0gYm90dG9tICk7XG5cblx0XHRjb25zdCBhID0gKCByaWdodCArIGxlZnQgKSAvICggcmlnaHQgLSBsZWZ0ICk7XG5cdFx0Y29uc3QgYiA9ICggdG9wICsgYm90dG9tICkgLyAoIHRvcCAtIGJvdHRvbSApO1xuXHRcdGNvbnN0IGMgPSAtICggZmFyICsgbmVhciApIC8gKCBmYXIgLSBuZWFyICk7XG5cdFx0Y29uc3QgZCA9IC0gMiAqIGZhciAqIG5lYXIgLyAoIGZhciAtIG5lYXIgKTtcblxuXHRcdHRlWyAwIF0gPSB4O1x0dGVbIDQgXSA9IDA7XHR0ZVsgOCBdID0gYTtcdHRlWyAxMiBdID0gMDtcblx0XHR0ZVsgMSBdID0gMDtcdHRlWyA1IF0gPSB5O1x0dGVbIDkgXSA9IGI7XHR0ZVsgMTMgXSA9IDA7XG5cdFx0dGVbIDIgXSA9IDA7XHR0ZVsgNiBdID0gMDtcdHRlWyAxMCBdID0gYztcdHRlWyAxNCBdID0gZDtcblx0XHR0ZVsgMyBdID0gMDtcdHRlWyA3IF0gPSAwO1x0dGVbIDExIF0gPSAtIDE7XHR0ZVsgMTUgXSA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bWFrZU9ydGhvZ3JhcGhpYyggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgdyA9IDEuMCAvICggcmlnaHQgLSBsZWZ0ICk7XG5cdFx0Y29uc3QgaCA9IDEuMCAvICggdG9wIC0gYm90dG9tICk7XG5cdFx0Y29uc3QgcCA9IDEuMCAvICggZmFyIC0gbmVhciApO1xuXG5cdFx0Y29uc3QgeCA9ICggcmlnaHQgKyBsZWZ0ICkgKiB3O1xuXHRcdGNvbnN0IHkgPSAoIHRvcCArIGJvdHRvbSApICogaDtcblx0XHRjb25zdCB6ID0gKCBmYXIgKyBuZWFyICkgKiBwO1xuXG5cdFx0dGVbIDAgXSA9IDIgKiB3O1x0dGVbIDQgXSA9IDA7XHR0ZVsgOCBdID0gMDtcdHRlWyAxMiBdID0gLSB4O1xuXHRcdHRlWyAxIF0gPSAwO1x0dGVbIDUgXSA9IDIgKiBoO1x0dGVbIDkgXSA9IDA7XHR0ZVsgMTMgXSA9IC0geTtcblx0XHR0ZVsgMiBdID0gMDtcdHRlWyA2IF0gPSAwO1x0dGVbIDEwIF0gPSAtIDIgKiBwO1x0dGVbIDE0IF0gPSAtIHo7XG5cdFx0dGVbIDMgXSA9IDA7XHR0ZVsgNyBdID0gMDtcdHRlWyAxMSBdID0gMDtcdHRlWyAxNSBdID0gMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIG1hdHJpeCApIHtcblxuXHRcdGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRjb25zdCBtZSA9IG1hdHJpeC5lbGVtZW50cztcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDE2OyBpICsrICkge1xuXG5cdFx0XHRpZiAoIHRlWyBpIF0gIT09IG1lWyBpIF0gKSByZXR1cm4gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDE2OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRzWyBpIF0gPSBhcnJheVsgaSArIG9mZnNldCBdO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvQXJyYXkoIGFycmF5ID0gW10sIG9mZnNldCA9IDAgKSB7XG5cblx0XHRjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0ZVsgMCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0ZVsgMSBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0ZVsgMiBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0ZVsgMyBdO1xuXG5cdFx0YXJyYXlbIG9mZnNldCArIDQgXSA9IHRlWyA0IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDUgXSA9IHRlWyA1IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDYgXSA9IHRlWyA2IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDcgXSA9IHRlWyA3IF07XG5cblx0XHRhcnJheVsgb2Zmc2V0ICsgOCBdID0gdGVbIDggXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgOSBdID0gdGVbIDkgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMTAgXSA9IHRlWyAxMCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxMSBdID0gdGVbIDExIF07XG5cblx0XHRhcnJheVsgb2Zmc2V0ICsgMTIgXSA9IHRlWyAxMiBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxMyBdID0gdGVbIDEzIF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDE0IF0gPSB0ZVsgMTQgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMTUgXSA9IHRlWyAxNSBdO1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH1cblxufVxuXG5NYXRyaXg0LnByb3RvdHlwZS5pc01hdHJpeDQgPSB0cnVlO1xuXG5jb25zdCBfdjEkNSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9tMSQyID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX3plcm8gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAwLCAwLCAwICk7XG5jb25zdCBfb25lID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMSwgMSwgMSApO1xuY29uc3QgX3ggPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfeSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF96ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfbWF0cml4JDEgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcXVhdGVybmlvbiQzID0gLypAX19QVVJFX18qLyBuZXcgUXVhdGVybmlvbigpO1xuXG5jbGFzcyBFdWxlciB7XG5cblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCwgeiA9IDAsIG9yZGVyID0gRXVsZXIuRGVmYXVsdE9yZGVyICkge1xuXG5cdFx0dGhpcy5feCA9IHg7XG5cdFx0dGhpcy5feSA9IHk7XG5cdFx0dGhpcy5feiA9IHo7XG5cdFx0dGhpcy5fb3JkZXIgPSBvcmRlcjtcblxuXHR9XG5cblx0Z2V0IHgoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5feDtcblxuXHR9XG5cblx0c2V0IHgoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feCA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IHkoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5feTtcblxuXHR9XG5cblx0c2V0IHkoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feSA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IHooKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fejtcblxuXHR9XG5cblx0c2V0IHooIHZhbHVlICkge1xuXG5cdFx0dGhpcy5feiA9IHZhbHVlO1xuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHR9XG5cblx0Z2V0IG9yZGVyKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX29yZGVyO1xuXG5cdH1cblxuXHRzZXQgb3JkZXIoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5fb3JkZXIgPSB2YWx1ZTtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0fVxuXG5cdHNldCggeCwgeSwgeiwgb3JkZXIgPSB0aGlzLl9vcmRlciApIHtcblxuXHRcdHRoaXMuX3ggPSB4O1xuXHRcdHRoaXMuX3kgPSB5O1xuXHRcdHRoaXMuX3ogPSB6O1xuXHRcdHRoaXMuX29yZGVyID0gb3JkZXI7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3osIHRoaXMuX29yZGVyICk7XG5cblx0fVxuXG5cdGNvcHkoIGV1bGVyICkge1xuXG5cdFx0dGhpcy5feCA9IGV1bGVyLl94O1xuXHRcdHRoaXMuX3kgPSBldWxlci5feTtcblx0XHR0aGlzLl96ID0gZXVsZXIuX3o7XG5cdFx0dGhpcy5fb3JkZXIgPSBldWxlci5fb3JkZXI7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtLCBvcmRlciA9IHRoaXMuX29yZGVyLCB1cGRhdGUgPSB0cnVlICkge1xuXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblxuXHRcdGNvbnN0IHRlID0gbS5lbGVtZW50cztcblx0XHRjb25zdCBtMTEgPSB0ZVsgMCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdO1xuXHRcdGNvbnN0IG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF07XG5cdFx0Y29uc3QgbTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF07XG5cblx0XHRzd2l0Y2ggKCBvcmRlciApIHtcblxuXHRcdFx0Y2FzZSAnWFlaJzpcblxuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKCBjbGFtcCggbTEzLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRcdGlmICggTWF0aC5hYnMoIG0xMyApIDwgMC45OTk5OTk5ICkge1xuXG5cdFx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoIC0gbTIzLCBtMzMgKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggLSBtMTIsIG0xMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggbTMyLCBtMjIgKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gMDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1lYWic6XG5cblx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXNpbiggLSBjbGFtcCggbTIzLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRcdGlmICggTWF0aC5hYnMoIG0yMyApIDwgMC45OTk5OTk5ICkge1xuXG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTMzICk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIG0yMSwgbTIyICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTExICk7XG5cdFx0XHRcdFx0dGhpcy5feiA9IDA7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdaWFknOlxuXG5cdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmFzaW4oIGNsYW1wKCBtMzIsIC0gMSwgMSApICk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggbTMyICkgPCAwLjk5OTk5OTkgKSB7XG5cblx0XHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggLSBtMzEsIG0zMyApO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTIyICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRoaXMuX3kgPSAwO1xuXHRcdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0xMSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnWllYJzpcblxuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKCAtIGNsYW1wKCBtMzEsIC0gMSwgMSApICk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggbTMxICkgPCAwLjk5OTk5OTkgKSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggbTMyLCBtMzMgKTtcblx0XHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBtMTEgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMjIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1laWCc6XG5cblx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXNpbiggY2xhbXAoIG0yMSwgLSAxLCAxICkgKTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBtMjEgKSA8IDAuOTk5OTk5OSApIHtcblxuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywgbTIyICk7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIC0gbTMxLCBtMTEgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTMzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdYWlknOlxuXG5cdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0xMiwgLSAxLCAxICkgKTtcblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBtMTIgKSA8IDAuOTk5OTk5OSApIHtcblxuXHRcdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0yMiApO1xuXHRcdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBtMTMsIG0xMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0zMyApO1xuXHRcdFx0XHRcdHRoaXMuX3kgPSAwO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICcgKyBvcmRlciApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fb3JkZXIgPSBvcmRlcjtcblxuXHRcdGlmICggdXBkYXRlID09PSB0cnVlICkgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21RdWF0ZXJuaW9uKCBxLCBvcmRlciwgdXBkYXRlICkge1xuXG5cdFx0X21hdHJpeCQxLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCBxICk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoIF9tYXRyaXgkMSwgb3JkZXIsIHVwZGF0ZSApO1xuXG5cdH1cblxuXHRzZXRGcm9tVmVjdG9yMyggdiwgb3JkZXIgPSB0aGlzLl9vcmRlciApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldCggdi54LCB2LnksIHYueiwgb3JkZXIgKTtcblxuXHR9XG5cblx0cmVvcmRlciggbmV3T3JkZXIgKSB7XG5cblx0XHQvLyBXQVJOSU5HOiB0aGlzIGRpc2NhcmRzIHJldm9sdXRpb24gaW5mb3JtYXRpb24gLWJob3VzdG9uXG5cblx0XHRfcXVhdGVybmlvbiQzLnNldEZyb21FdWxlciggdGhpcyApO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oIF9xdWF0ZXJuaW9uJDMsIG5ld09yZGVyICk7XG5cblx0fVxuXG5cdGVxdWFscyggZXVsZXIgKSB7XG5cblx0XHRyZXR1cm4gKCBldWxlci5feCA9PT0gdGhpcy5feCApICYmICggZXVsZXIuX3kgPT09IHRoaXMuX3kgKSAmJiAoIGV1bGVyLl96ID09PSB0aGlzLl96ICkgJiYgKCBldWxlci5fb3JkZXIgPT09IHRoaXMuX29yZGVyICk7XG5cblx0fVxuXG5cdGZyb21BcnJheSggYXJyYXkgKSB7XG5cblx0XHR0aGlzLl94ID0gYXJyYXlbIDAgXTtcblx0XHR0aGlzLl95ID0gYXJyYXlbIDEgXTtcblx0XHR0aGlzLl96ID0gYXJyYXlbIDIgXTtcblx0XHRpZiAoIGFycmF5WyAzIF0gIT09IHVuZGVmaW5lZCApIHRoaXMuX29yZGVyID0gYXJyYXlbIDMgXTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0FycmF5KCBhcnJheSA9IFtdLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0YXJyYXlbIG9mZnNldCBdID0gdGhpcy5feDtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy5feTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy5fejtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGhpcy5fb3JkZXI7XG5cblx0XHRyZXR1cm4gYXJyYXk7XG5cblx0fVxuXG5cdHRvVmVjdG9yMyggb3B0aW9uYWxSZXN1bHQgKSB7XG5cblx0XHRpZiAoIG9wdGlvbmFsUmVzdWx0ICkge1xuXG5cdFx0XHRyZXR1cm4gb3B0aW9uYWxSZXN1bHQuc2V0KCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjMoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3ogKTtcblxuXHRcdH1cblxuXHR9XG5cblx0X29uQ2hhbmdlKCBjYWxsYmFjayApIHtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRfb25DaGFuZ2VDYWxsYmFjaygpIHt9XG5cbn1cblxuRXVsZXIucHJvdG90eXBlLmlzRXVsZXIgPSB0cnVlO1xuXG5FdWxlci5EZWZhdWx0T3JkZXIgPSAnWFlaJztcbkV1bGVyLlJvdGF0aW9uT3JkZXJzID0gWyAnWFlaJywgJ1laWCcsICdaWFknLCAnWFpZJywgJ1lYWicsICdaWVgnIF07XG5cbmNsYXNzIExheWVycyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLm1hc2sgPSAxIHwgMDtcblxuXHR9XG5cblx0c2V0KCBjaGFubmVsICkge1xuXG5cdFx0dGhpcy5tYXNrID0gKCAxIDw8IGNoYW5uZWwgfCAwICkgPj4+IDA7XG5cblx0fVxuXG5cdGVuYWJsZSggY2hhbm5lbCApIHtcblxuXHRcdHRoaXMubWFzayB8PSAxIDw8IGNoYW5uZWwgfCAwO1xuXG5cdH1cblxuXHRlbmFibGVBbGwoKSB7XG5cblx0XHR0aGlzLm1hc2sgPSAweGZmZmZmZmZmIHwgMDtcblxuXHR9XG5cblx0dG9nZ2xlKCBjaGFubmVsICkge1xuXG5cdFx0dGhpcy5tYXNrIF49IDEgPDwgY2hhbm5lbCB8IDA7XG5cblx0fVxuXG5cdGRpc2FibGUoIGNoYW5uZWwgKSB7XG5cblx0XHR0aGlzLm1hc2sgJj0gfiAoIDEgPDwgY2hhbm5lbCB8IDAgKTtcblxuXHR9XG5cblx0ZGlzYWJsZUFsbCgpIHtcblxuXHRcdHRoaXMubWFzayA9IDA7XG5cblx0fVxuXG5cdHRlc3QoIGxheWVycyApIHtcblxuXHRcdHJldHVybiAoIHRoaXMubWFzayAmIGxheWVycy5tYXNrICkgIT09IDA7XG5cblx0fVxuXG5cdGlzRW5hYmxlZCggY2hhbm5lbCApIHtcblxuXHRcdHJldHVybiAoIHRoaXMubWFzayAmICggMSA8PCBjaGFubmVsIHwgMCApICkgIT09IDA7XG5cblx0fVxuXG59XG5cbmxldCBfb2JqZWN0M0RJZCA9IDA7XG5cbmNvbnN0IF92MSQ0ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ExID0gLypAX19QVVJFX18qLyBuZXcgUXVhdGVybmlvbigpO1xuY29uc3QgX20xJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfdGFyZ2V0ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfcG9zaXRpb24kMyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9zY2FsZSQyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3F1YXRlcm5pb24kMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFF1YXRlcm5pb24oKTtcblxuY29uc3QgX3hBeGlzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMSwgMCwgMCApO1xuY29uc3QgX3lBeGlzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMCwgMSwgMCApO1xuY29uc3QgX3pBeGlzID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMCwgMCwgMSApO1xuXG5jb25zdCBfYWRkZWRFdmVudCA9IHsgdHlwZTogJ2FkZGVkJyB9O1xuY29uc3QgX3JlbW92ZWRFdmVudCA9IHsgdHlwZTogJ3JlbW92ZWQnIH07XG5cbmNsYXNzIE9iamVjdDNEIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IF9vYmplY3QzRElkICsrIH0gKTtcblxuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy50eXBlID0gJ09iamVjdDNEJztcblxuXHRcdHRoaXMucGFyZW50ID0gbnVsbDtcblx0XHR0aGlzLmNoaWxkcmVuID0gW107XG5cblx0XHR0aGlzLnVwID0gT2JqZWN0M0QuRGVmYXVsdFVwLmNsb25lKCk7XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgcm90YXRpb24gPSBuZXcgRXVsZXIoKTtcblx0XHRjb25zdCBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblx0XHRjb25zdCBzY2FsZSA9IG5ldyBWZWN0b3IzKCAxLCAxLCAxICk7XG5cblx0XHRmdW5jdGlvbiBvblJvdGF0aW9uQ2hhbmdlKCkge1xuXG5cdFx0XHRxdWF0ZXJuaW9uLnNldEZyb21FdWxlciggcm90YXRpb24sIGZhbHNlICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblF1YXRlcm5pb25DaGFuZ2UoKSB7XG5cblx0XHRcdHJvdGF0aW9uLnNldEZyb21RdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLCB1bmRlZmluZWQsIGZhbHNlICk7XG5cblx0XHR9XG5cblx0XHRyb3RhdGlvbi5fb25DaGFuZ2UoIG9uUm90YXRpb25DaGFuZ2UgKTtcblx0XHRxdWF0ZXJuaW9uLl9vbkNoYW5nZSggb25RdWF0ZXJuaW9uQ2hhbmdlICk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyggdGhpcywge1xuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogcG9zaXRpb25cblx0XHRcdH0sXG5cdFx0XHRyb3RhdGlvbjoge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiByb3RhdGlvblxuXHRcdFx0fSxcblx0XHRcdHF1YXRlcm5pb246IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogcXVhdGVybmlvblxuXHRcdFx0fSxcblx0XHRcdHNjYWxlOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHNjYWxlXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxWaWV3TWF0cml4OiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgTWF0cml4NCgpXG5cdFx0XHR9LFxuXHRcdFx0bm9ybWFsTWF0cml4OiB7XG5cdFx0XHRcdHZhbHVlOiBuZXcgTWF0cml4MygpXG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0dGhpcy5tYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMubWF0cml4V29ybGQgPSBuZXcgTWF0cml4NCgpO1xuXG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gT2JqZWN0M0QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmxheWVycyA9IG5ldyBMYXllcnMoKTtcblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXG5cdFx0dGhpcy5jYXN0U2hhZG93ID0gZmFsc2U7XG5cdFx0dGhpcy5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XG5cblx0XHR0aGlzLmZydXN0dW1DdWxsZWQgPSB0cnVlO1xuXHRcdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG5cdFx0dGhpcy5hbmltYXRpb25zID0gW107XG5cblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyKCAvKiByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCAqLyApIHt9XG5cblx0b25BZnRlclJlbmRlciggLyogcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKi8gKSB7fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4ICkge1xuXG5cdFx0aWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0dGhpcy5tYXRyaXgucHJlbXVsdGlwbHkoIG1hdHJpeCApO1xuXG5cdFx0dGhpcy5tYXRyaXguZGVjb21wb3NlKCB0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUgKTtcblxuXHR9XG5cblx0YXBwbHlRdWF0ZXJuaW9uKCBxICkge1xuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KCBxICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApIHtcblxuXHRcdC8vIGFzc3VtZXMgYXhpcyBpcyBub3JtYWxpemVkXG5cblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKTtcblxuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tRXVsZXIoIGV1bGVyICkge1xuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlciggZXVsZXIsIHRydWUgKTtcblxuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tTWF0cml4KCBtICkge1xuXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblxuXHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoIG0gKTtcblxuXHR9XG5cblx0c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApIHtcblxuXHRcdC8vIGFzc3VtZXMgcSBpcyBub3JtYWxpemVkXG5cblx0XHR0aGlzLnF1YXRlcm5pb24uY29weSggcSApO1xuXG5cdH1cblxuXHRyb3RhdGVPbkF4aXMoIGF4aXMsIGFuZ2xlICkge1xuXG5cdFx0Ly8gcm90YXRlIG9iamVjdCBvbiBheGlzIGluIG9iamVjdCBzcGFjZVxuXHRcdC8vIGF4aXMgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cblx0XHRfcTEuc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKTtcblxuXHRcdHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSggX3ExICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cm90YXRlT25Xb3JsZEF4aXMoIGF4aXMsIGFuZ2xlICkge1xuXG5cdFx0Ly8gcm90YXRlIG9iamVjdCBvbiBheGlzIGluIHdvcmxkIHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblx0XHQvLyBtZXRob2QgYXNzdW1lcyBubyByb3RhdGVkIHBhcmVudFxuXG5cdFx0X3ExLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICk7XG5cblx0XHR0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoIF9xMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZVgoIGFuZ2xlICkge1xuXG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCBfeEF4aXMsIGFuZ2xlICk7XG5cblx0fVxuXG5cdHJvdGF0ZVkoIGFuZ2xlICkge1xuXG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCBfeUF4aXMsIGFuZ2xlICk7XG5cblx0fVxuXG5cdHJvdGF0ZVooIGFuZ2xlICkge1xuXG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCBfekF4aXMsIGFuZ2xlICk7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSB7XG5cblx0XHQvLyB0cmFuc2xhdGUgb2JqZWN0IGJ5IGRpc3RhbmNlIGFsb25nIGF4aXMgaW4gb2JqZWN0IHNwYWNlXG5cdFx0Ly8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblxuXHRcdF92MSQ0LmNvcHkoIGF4aXMgKS5hcHBseVF1YXRlcm5pb24oIHRoaXMucXVhdGVybmlvbiApO1xuXG5cdFx0dGhpcy5wb3NpdGlvbi5hZGQoIF92MSQ0Lm11bHRpcGx5U2NhbGFyKCBkaXN0YW5jZSApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNsYXRlWCggZGlzdGFuY2UgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIF94QXhpcywgZGlzdGFuY2UgKTtcblxuXHR9XG5cblx0dHJhbnNsYXRlWSggZGlzdGFuY2UgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIF95QXhpcywgZGlzdGFuY2UgKTtcblxuXHR9XG5cblx0dHJhbnNsYXRlWiggZGlzdGFuY2UgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIF96QXhpcywgZGlzdGFuY2UgKTtcblxuXHR9XG5cblx0bG9jYWxUb1dvcmxkKCB2ZWN0b3IgKSB7XG5cblx0XHRyZXR1cm4gdmVjdG9yLmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdH1cblxuXHR3b3JsZFRvTG9jYWwoIHZlY3RvciApIHtcblxuXHRcdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBfbTEkMS5jb3B5KCB0aGlzLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCkgKTtcblxuXHR9XG5cblx0bG9va0F0KCB4LCB5LCB6ICkge1xuXG5cdFx0Ly8gVGhpcyBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBvYmplY3RzIGhhdmluZyBub24tdW5pZm9ybWx5LXNjYWxlZCBwYXJlbnQocylcblxuXHRcdGlmICggeC5pc1ZlY3RvcjMgKSB7XG5cblx0XHRcdF90YXJnZXQuY29weSggeCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X3RhcmdldC5zZXQoIHgsIHksIHogKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTtcblxuXHRcdF9wb3NpdGlvbiQzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdFx0aWYgKCB0aGlzLmlzQ2FtZXJhIHx8IHRoaXMuaXNMaWdodCApIHtcblxuXHRcdFx0X20xJDEubG9va0F0KCBfcG9zaXRpb24kMywgX3RhcmdldCwgdGhpcy51cCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X20xJDEubG9va0F0KCBfdGFyZ2V0LCBfcG9zaXRpb24kMywgdGhpcy51cCApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggX20xJDEgKTtcblxuXHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRfbTEkMS5leHRyYWN0Um90YXRpb24oIHBhcmVudC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0X3ExLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggX20xJDEgKTtcblx0XHRcdHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSggX3ExLmludmVydCgpICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGFkZCggb2JqZWN0ICkge1xuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHR0aGlzLmFkZCggYXJndW1lbnRzWyBpIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH1cblxuXHRcdGlmICggb2JqZWN0ID09PSB0aGlzICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuXFwndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4nLCBvYmplY3QgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvYmplY3QgJiYgb2JqZWN0LmlzT2JqZWN0M0QgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0LnBhcmVudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRvYmplY3QucGFyZW50LnJlbW92ZSggb2JqZWN0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0b2JqZWN0LnBhcmVudCA9IHRoaXM7XG5cdFx0XHR0aGlzLmNoaWxkcmVuLnB1c2goIG9iamVjdCApO1xuXG5cdFx0XHRvYmplY3QuZGlzcGF0Y2hFdmVudCggX2FkZGVkRXZlbnQgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuJywgb2JqZWN0ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmVtb3ZlKCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdHRoaXMucmVtb3ZlKCBhcmd1bWVudHNbIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoIG9iamVjdCApO1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gLSAxICkge1xuXG5cdFx0XHRvYmplY3QucGFyZW50ID0gbnVsbDtcblx0XHRcdHRoaXMuY2hpbGRyZW4uc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRvYmplY3QuZGlzcGF0Y2hFdmVudCggX3JlbW92ZWRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJlbW92ZUZyb21QYXJlbnQoKSB7XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmICggcGFyZW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRwYXJlbnQucmVtb3ZlKCB0aGlzICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xlYXIoKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gdGhpcy5jaGlsZHJlblsgaSBdO1xuXG5cdFx0XHRvYmplY3QucGFyZW50ID0gbnVsbDtcblxuXHRcdFx0b2JqZWN0LmRpc3BhdGNoRXZlbnQoIF9yZW1vdmVkRXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuY2hpbGRyZW4ubGVuZ3RoID0gMDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cblx0fVxuXG5cdGF0dGFjaCggb2JqZWN0ICkge1xuXG5cdFx0Ly8gYWRkcyBvYmplY3QgYXMgYSBjaGlsZCBvZiB0aGlzLCB3aGlsZSBtYWludGFpbmluZyB0aGUgb2JqZWN0J3Mgd29ybGQgdHJhbnNmb3JtXG5cblx0XHQvLyBOb3RlOiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHNjZW5lIGdyYXBocyBoYXZpbmcgbm9uLXVuaWZvcm1seS1zY2FsZWQgbm9kZXMocylcblxuXHRcdHRoaXMudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHRfbTEkMS5jb3B5KCB0aGlzLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0XHRpZiAoIG9iamVjdC5wYXJlbnQgIT09IG51bGwgKSB7XG5cblx0XHRcdG9iamVjdC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHRcdF9tMSQxLm11bHRpcGx5KCBvYmplY3QucGFyZW50Lm1hdHJpeFdvcmxkICk7XG5cblx0XHR9XG5cblx0XHRvYmplY3QuYXBwbHlNYXRyaXg0KCBfbTEkMSApO1xuXG5cdFx0dGhpcy5hZGQoIG9iamVjdCApO1xuXG5cdFx0b2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldE9iamVjdEJ5SWQoIGlkICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSggJ2lkJywgaWQgKTtcblxuXHR9XG5cblx0Z2V0T2JqZWN0QnlOYW1lKCBuYW1lICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSggJ25hbWUnLCBuYW1lICk7XG5cblx0fVxuXG5cdGdldE9iamVjdEJ5UHJvcGVydHkoIG5hbWUsIHZhbHVlICkge1xuXG5cdFx0aWYgKCB0aGlzWyBuYW1lIF0gPT09IHZhbHVlICkgcmV0dXJuIHRoaXM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlblsgaSBdO1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gY2hpbGQuZ2V0T2JqZWN0QnlQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblxuXHRcdFx0aWYgKCBvYmplY3QgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gb2JqZWN0O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdH1cblxuXHRnZXRXb3JsZFBvc2l0aW9uKCB0YXJnZXQgKSB7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0cmV0dXJuIHRhcmdldC5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubWF0cml4V29ybGQgKTtcblxuXHR9XG5cblx0Z2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSB7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIF9wb3NpdGlvbiQzLCB0YXJnZXQsIF9zY2FsZSQyICk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXG5cdH1cblxuXHRnZXRXb3JsZFNjYWxlKCB0YXJnZXQgKSB7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIF9wb3NpdGlvbiQzLCBfcXVhdGVybmlvbiQyLCB0YXJnZXQgKTtcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGdldFdvcmxkRGlyZWN0aW9uKCB0YXJnZXQgKSB7XG5cblx0XHR0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0Y29uc3QgZSA9IHRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCggZVsgOCBdLCBlWyA5IF0sIGVbIDEwIF0gKS5ub3JtYWxpemUoKTtcblxuXHR9XG5cblx0cmF5Y2FzdCggLyogcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICovICkge31cblxuXHR0cmF2ZXJzZSggY2FsbGJhY2sgKSB7XG5cblx0XHRjYWxsYmFjayggdGhpcyApO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y2hpbGRyZW5bIGkgXS50cmF2ZXJzZSggY2FsbGJhY2sgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dHJhdmVyc2VWaXNpYmxlKCBjYWxsYmFjayApIHtcblxuXHRcdGlmICggdGhpcy52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGNhbGxiYWNrKCB0aGlzICk7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjaGlsZHJlblsgaSBdLnRyYXZlcnNlVmlzaWJsZSggY2FsbGJhY2sgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dHJhdmVyc2VBbmNlc3RvcnMoIGNhbGxiYWNrICkge1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAoIHBhcmVudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0Y2FsbGJhY2soIHBhcmVudCApO1xuXG5cdFx0XHRwYXJlbnQudHJhdmVyc2VBbmNlc3RvcnMoIGNhbGxiYWNrICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeCgpIHtcblxuXHRcdHRoaXMubWF0cml4LmNvbXBvc2UoIHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0aWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0aWYgKCB0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgfHwgZm9yY2UgKSB7XG5cblx0XHRcdGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB7XG5cblx0XHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5KCB0aGlzLm1hdHJpeCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyggdGhpcy5wYXJlbnQubWF0cml4V29ybGQsIHRoaXMubWF0cml4ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRcdGZvcmNlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBjaGlsZHJlblxuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y2hpbGRyZW5bIGkgXS51cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dXBkYXRlV29ybGRNYXRyaXgoIHVwZGF0ZVBhcmVudHMsIHVwZGF0ZUNoaWxkcmVuICkge1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAoIHVwZGF0ZVBhcmVudHMgPT09IHRydWUgJiYgcGFyZW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRwYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoIHRydWUsIGZhbHNlICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubWF0cml4QXV0b1VwZGF0ZSApIHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHRpZiAoIHRoaXMucGFyZW50ID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHRoaXMubWF0cml4ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoIHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLCB0aGlzLm1hdHJpeCApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIGNoaWxkcmVuXG5cblx0XHRpZiAoIHVwZGF0ZUNoaWxkcmVuID09PSB0cnVlICkge1xuXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y2hpbGRyZW5bIGkgXS51cGRhdGVXb3JsZE1hdHJpeCggZmFsc2UsIHRydWUgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHQvLyBtZXRhIGlzIGEgc3RyaW5nIHdoZW4gY2FsbGVkIGZyb20gSlNPTi5zdHJpbmdpZnlcblx0XHRjb25zdCBpc1Jvb3RPYmplY3QgPSAoIG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZycgKTtcblxuXHRcdGNvbnN0IG91dHB1dCA9IHt9O1xuXG5cdFx0Ly8gbWV0YSBpcyBhIGhhc2ggdXNlZCB0byBjb2xsZWN0IGdlb21ldHJpZXMsIG1hdGVyaWFscy5cblx0XHQvLyBub3QgcHJvdmlkaW5nIGl0IGltcGxpZXMgdGhhdCB0aGlzIGlzIHRoZSByb290IG9iamVjdFxuXHRcdC8vIGJlaW5nIHNlcmlhbGl6ZWQuXG5cdFx0aWYgKCBpc1Jvb3RPYmplY3QgKSB7XG5cblx0XHRcdC8vIGluaXRpYWxpemUgbWV0YSBvYmpcblx0XHRcdG1ldGEgPSB7XG5cdFx0XHRcdGdlb21ldHJpZXM6IHt9LFxuXHRcdFx0XHRtYXRlcmlhbHM6IHt9LFxuXHRcdFx0XHR0ZXh0dXJlczoge30sXG5cdFx0XHRcdGltYWdlczoge30sXG5cdFx0XHRcdHNoYXBlczoge30sXG5cdFx0XHRcdHNrZWxldG9uczoge30sXG5cdFx0XHRcdGFuaW1hdGlvbnM6IHt9XG5cdFx0XHR9O1xuXG5cdFx0XHRvdXRwdXQubWV0YWRhdGEgPSB7XG5cdFx0XHRcdHZlcnNpb246IDQuNSxcblx0XHRcdFx0dHlwZTogJ09iamVjdCcsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ09iamVjdDNELnRvSlNPTidcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHQvLyBzdGFuZGFyZCBPYmplY3QzRCBzZXJpYWxpemF0aW9uXG5cblx0XHRjb25zdCBvYmplY3QgPSB7fTtcblxuXHRcdG9iamVjdC51dWlkID0gdGhpcy51dWlkO1xuXHRcdG9iamVjdC50eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0aWYgKCB0aGlzLm5hbWUgIT09ICcnICkgb2JqZWN0Lm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0aWYgKCB0aGlzLmNhc3RTaGFkb3cgPT09IHRydWUgKSBvYmplY3QuY2FzdFNoYWRvdyA9IHRydWU7XG5cdFx0aWYgKCB0aGlzLnJlY2VpdmVTaGFkb3cgPT09IHRydWUgKSBvYmplY3QucmVjZWl2ZVNoYWRvdyA9IHRydWU7XG5cdFx0aWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgb2JqZWN0LnZpc2libGUgPSBmYWxzZTtcblx0XHRpZiAoIHRoaXMuZnJ1c3R1bUN1bGxlZCA9PT0gZmFsc2UgKSBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuXHRcdGlmICggdGhpcy5yZW5kZXJPcmRlciAhPT0gMCApIG9iamVjdC5yZW5kZXJPcmRlciA9IHRoaXMucmVuZGVyT3JkZXI7XG5cdFx0aWYgKCBKU09OLnN0cmluZ2lmeSggdGhpcy51c2VyRGF0YSApICE9PSAne30nICkgb2JqZWN0LnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdG9iamVjdC5sYXllcnMgPSB0aGlzLmxheWVycy5tYXNrO1xuXHRcdG9iamVjdC5tYXRyaXggPSB0aGlzLm1hdHJpeC50b0FycmF5KCk7XG5cblx0XHRpZiAoIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9PT0gZmFsc2UgKSBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Ly8gb2JqZWN0IHNwZWNpZmljIHByb3BlcnRpZXNcblxuXHRcdGlmICggdGhpcy5pc0luc3RhbmNlZE1lc2ggKSB7XG5cblx0XHRcdG9iamVjdC50eXBlID0gJ0luc3RhbmNlZE1lc2gnO1xuXHRcdFx0b2JqZWN0LmNvdW50ID0gdGhpcy5jb3VudDtcblx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeCA9IHRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCk7XG5cdFx0XHRpZiAoIHRoaXMuaW5zdGFuY2VDb2xvciAhPT0gbnVsbCApIG9iamVjdC5pbnN0YW5jZUNvbG9yID0gdGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGZ1bmN0aW9uIHNlcmlhbGl6ZSggbGlicmFyeSwgZWxlbWVudCApIHtcblxuXHRcdFx0aWYgKCBsaWJyYXJ5WyBlbGVtZW50LnV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGxpYnJhcnlbIGVsZW1lbnQudXVpZCBdID0gZWxlbWVudC50b0pTT04oIG1ldGEgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbWVudC51dWlkO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmlzU2NlbmUgKSB7XG5cblx0XHRcdGlmICggdGhpcy5iYWNrZ3JvdW5kICkge1xuXG5cdFx0XHRcdGlmICggdGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3IgKSB7XG5cblx0XHRcdFx0XHRvYmplY3QuYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZC50b0pTT04oKTtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCB0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRcdFx0b2JqZWN0LmJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmQudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRcdG9iamVjdC5lbnZpcm9ubWVudCA9IHRoaXMuZW52aXJvbm1lbnQudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggdGhpcy5pc01lc2ggfHwgdGhpcy5pc0xpbmUgfHwgdGhpcy5pc1BvaW50cyApIHtcblxuXHRcdFx0b2JqZWN0Lmdlb21ldHJ5ID0gc2VyaWFsaXplKCBtZXRhLmdlb21ldHJpZXMsIHRoaXMuZ2VvbWV0cnkgKTtcblxuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztcblxuXHRcdFx0aWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5zaGFwZXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zdCBzaGFwZXMgPSBwYXJhbWV0ZXJzLnNoYXBlcztcblxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHNoYXBlcyApICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHNoYXBlID0gc2hhcGVzWyBpIF07XG5cblx0XHRcdFx0XHRcdHNlcmlhbGl6ZSggbWV0YS5zaGFwZXMsIHNoYXBlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHNlcmlhbGl6ZSggbWV0YS5zaGFwZXMsIHNoYXBlcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmlzU2tpbm5lZE1lc2ggKSB7XG5cblx0XHRcdG9iamVjdC5iaW5kTW9kZSA9IHRoaXMuYmluZE1vZGU7XG5cdFx0XHRvYmplY3QuYmluZE1hdHJpeCA9IHRoaXMuYmluZE1hdHJpeC50b0FycmF5KCk7XG5cblx0XHRcdGlmICggdGhpcy5za2VsZXRvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHNlcmlhbGl6ZSggbWV0YS5za2VsZXRvbnMsIHRoaXMuc2tlbGV0b24gKTtcblxuXHRcdFx0XHRvYmplY3Quc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uLnV1aWQ7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5tYXRlcmlhbCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHRoaXMubWF0ZXJpYWwgKSApIHtcblxuXHRcdFx0XHRjb25zdCB1dWlkcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMubWF0ZXJpYWwubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdHV1aWRzLnB1c2goIHNlcmlhbGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWxbIGkgXSApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iamVjdC5tYXRlcmlhbCA9IHV1aWRzO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdG9iamVjdC5tYXRlcmlhbCA9IHNlcmlhbGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGlmICggdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRvYmplY3QuY2hpbGRyZW4gPSBbXTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0b2JqZWN0LmNoaWxkcmVuLnB1c2goIHRoaXMuY2hpbGRyZW5bIGkgXS50b0pTT04oIG1ldGEgKS5vYmplY3QgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGlmICggdGhpcy5hbmltYXRpb25zLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdG9iamVjdC5hbmltYXRpb25zID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25zWyBpIF07XG5cblx0XHRcdFx0b2JqZWN0LmFuaW1hdGlvbnMucHVzaCggc2VyaWFsaXplKCBtZXRhLmFuaW1hdGlvbnMsIGFuaW1hdGlvbiApICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggaXNSb290T2JqZWN0ICkge1xuXG5cdFx0XHRjb25zdCBnZW9tZXRyaWVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5nZW9tZXRyaWVzICk7XG5cdFx0XHRjb25zdCBtYXRlcmlhbHMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLm1hdGVyaWFscyApO1xuXHRcdFx0Y29uc3QgdGV4dHVyZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLnRleHR1cmVzICk7XG5cdFx0XHRjb25zdCBpbWFnZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmltYWdlcyApO1xuXHRcdFx0Y29uc3Qgc2hhcGVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5zaGFwZXMgKTtcblx0XHRcdGNvbnN0IHNrZWxldG9ucyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEuc2tlbGV0b25zICk7XG5cdFx0XHRjb25zdCBhbmltYXRpb25zID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5hbmltYXRpb25zICk7XG5cblx0XHRcdGlmICggZ2VvbWV0cmllcy5sZW5ndGggPiAwICkgb3V0cHV0Lmdlb21ldHJpZXMgPSBnZW9tZXRyaWVzO1xuXHRcdFx0aWYgKCBtYXRlcmlhbHMubGVuZ3RoID4gMCApIG91dHB1dC5tYXRlcmlhbHMgPSBtYXRlcmlhbHM7XG5cdFx0XHRpZiAoIHRleHR1cmVzLmxlbmd0aCA+IDAgKSBvdXRwdXQudGV4dHVyZXMgPSB0ZXh0dXJlcztcblx0XHRcdGlmICggaW1hZ2VzLmxlbmd0aCA+IDAgKSBvdXRwdXQuaW1hZ2VzID0gaW1hZ2VzO1xuXHRcdFx0aWYgKCBzaGFwZXMubGVuZ3RoID4gMCApIG91dHB1dC5zaGFwZXMgPSBzaGFwZXM7XG5cdFx0XHRpZiAoIHNrZWxldG9ucy5sZW5ndGggPiAwICkgb3V0cHV0LnNrZWxldG9ucyA9IHNrZWxldG9ucztcblx0XHRcdGlmICggYW5pbWF0aW9ucy5sZW5ndGggPiAwICkgb3V0cHV0LmFuaW1hdGlvbnMgPSBhbmltYXRpb25zO1xuXG5cdFx0fVxuXG5cdFx0b3V0cHV0Lm9iamVjdCA9IG9iamVjdDtcblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cblx0XHQvLyBleHRyYWN0IGRhdGEgZnJvbSB0aGUgY2FjaGUgaGFzaFxuXHRcdC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBlYWNoIGl0ZW1cblx0XHQvLyBhbmQgcmV0dXJuIGFzIGFycmF5XG5cdFx0ZnVuY3Rpb24gZXh0cmFjdEZyb21DYWNoZSggY2FjaGUgKSB7XG5cblx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdFx0Zm9yICggY29uc3Qga2V5IGluIGNhY2hlICkge1xuXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBjYWNoZVsga2V5IF07XG5cdFx0XHRcdGRlbGV0ZSBkYXRhLm1ldGFkYXRhO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCggZGF0YSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNsb25lKCByZWN1cnNpdmUgKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzLCByZWN1cnNpdmUgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlLCByZWN1cnNpdmUgPSB0cnVlICkge1xuXG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cblx0XHR0aGlzLnVwLmNvcHkoIHNvdXJjZS51cCApO1xuXG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KCBzb3VyY2UucG9zaXRpb24gKTtcblx0XHR0aGlzLnJvdGF0aW9uLm9yZGVyID0gc291cmNlLnJvdGF0aW9uLm9yZGVyO1xuXHRcdHRoaXMucXVhdGVybmlvbi5jb3B5KCBzb3VyY2UucXVhdGVybmlvbiApO1xuXHRcdHRoaXMuc2NhbGUuY29weSggc291cmNlLnNjYWxlICk7XG5cblx0XHR0aGlzLm1hdHJpeC5jb3B5KCBzb3VyY2UubWF0cml4ICk7XG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5KCBzb3VyY2UubWF0cml4V29ybGQgKTtcblxuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlO1xuXHRcdHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlO1xuXG5cdFx0dGhpcy5sYXllcnMubWFzayA9IHNvdXJjZS5sYXllcnMubWFzaztcblx0XHR0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTtcblxuXHRcdHRoaXMuY2FzdFNoYWRvdyA9IHNvdXJjZS5jYXN0U2hhZG93O1xuXHRcdHRoaXMucmVjZWl2ZVNoYWRvdyA9IHNvdXJjZS5yZWNlaXZlU2hhZG93O1xuXG5cdFx0dGhpcy5mcnVzdHVtQ3VsbGVkID0gc291cmNlLmZydXN0dW1DdWxsZWQ7XG5cdFx0dGhpcy5yZW5kZXJPcmRlciA9IHNvdXJjZS5yZW5kZXJPcmRlcjtcblxuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggc291cmNlLnVzZXJEYXRhICkgKTtcblxuXHRcdGlmICggcmVjdXJzaXZlID09PSB0cnVlICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBzb3VyY2UuY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGNoaWxkID0gc291cmNlLmNoaWxkcmVuWyBpIF07XG5cdFx0XHRcdHRoaXMuYWRkKCBjaGlsZC5jbG9uZSgpICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5PYmplY3QzRC5EZWZhdWx0VXAgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApO1xuT2JqZWN0M0QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUgPSB0cnVlO1xuXG5PYmplY3QzRC5wcm90b3R5cGUuaXNPYmplY3QzRCA9IHRydWU7XG5cbmNvbnN0IF92MCQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3YxJDMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjIkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92MyQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdmFiID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZhYyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92YmMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdmFwID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZicCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92Y3AgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFRyaWFuZ2xlIHtcblxuXHRjb25zdHJ1Y3RvciggYSA9IG5ldyBWZWN0b3IzKCksIGIgPSBuZXcgVmVjdG9yMygpLCBjID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdHRoaXMuYSA9IGE7XG5cdFx0dGhpcy5iID0gYjtcblx0XHR0aGlzLmMgPSBjO1xuXG5cdH1cblxuXHRzdGF0aWMgZ2V0Tm9ybWFsKCBhLCBiLCBjLCB0YXJnZXQgKSB7XG5cblx0XHR0YXJnZXQuc3ViVmVjdG9ycyggYywgYiApO1xuXHRcdF92MCQxLnN1YlZlY3RvcnMoIGEsIGIgKTtcblx0XHR0YXJnZXQuY3Jvc3MoIF92MCQxICk7XG5cblx0XHRjb25zdCB0YXJnZXRMZW5ndGhTcSA9IHRhcmdldC5sZW5ndGhTcSgpO1xuXHRcdGlmICggdGFyZ2V0TGVuZ3RoU3EgPiAwICkge1xuXG5cdFx0XHRyZXR1cm4gdGFyZ2V0Lm11bHRpcGx5U2NhbGFyKCAxIC8gTWF0aC5zcXJ0KCB0YXJnZXRMZW5ndGhTcSApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCggMCwgMCwgMCApO1xuXG5cdH1cblxuXHQvLyBzdGF0aWMvaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGN1bGF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xuXHQvLyBiYXNlZCBvbjogaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1bHQuaHRtbFxuXHRzdGF0aWMgZ2V0QmFyeWNvb3JkKCBwb2ludCwgYSwgYiwgYywgdGFyZ2V0ICkge1xuXG5cdFx0X3YwJDEuc3ViVmVjdG9ycyggYywgYSApO1xuXHRcdF92MSQzLnN1YlZlY3RvcnMoIGIsIGEgKTtcblx0XHRfdjIkMi5zdWJWZWN0b3JzKCBwb2ludCwgYSApO1xuXG5cdFx0Y29uc3QgZG90MDAgPSBfdjAkMS5kb3QoIF92MCQxICk7XG5cdFx0Y29uc3QgZG90MDEgPSBfdjAkMS5kb3QoIF92MSQzICk7XG5cdFx0Y29uc3QgZG90MDIgPSBfdjAkMS5kb3QoIF92MiQyICk7XG5cdFx0Y29uc3QgZG90MTEgPSBfdjEkMy5kb3QoIF92MSQzICk7XG5cdFx0Y29uc3QgZG90MTIgPSBfdjEkMy5kb3QoIF92MiQyICk7XG5cblx0XHRjb25zdCBkZW5vbSA9ICggZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEgKTtcblxuXHRcdC8vIGNvbGxpbmVhciBvciBzaW5ndWxhciB0cmlhbmdsZVxuXHRcdGlmICggZGVub20gPT09IDAgKSB7XG5cblx0XHRcdC8vIGFyYml0cmFyeSBsb2NhdGlvbiBvdXRzaWRlIG9mIHRyaWFuZ2xlP1xuXHRcdFx0Ly8gbm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgYmVzdCBpZGVhLCBtYXliZSBzaG91bGQgYmUgcmV0dXJuaW5nIHVuZGVmaW5lZFxuXHRcdFx0cmV0dXJuIHRhcmdldC5zZXQoIC0gMiwgLSAxLCAtIDEgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGludkRlbm9tID0gMSAvIGRlbm9tO1xuXHRcdGNvbnN0IHUgPSAoIGRvdDExICogZG90MDIgLSBkb3QwMSAqIGRvdDEyICkgKiBpbnZEZW5vbTtcblx0XHRjb25zdCB2ID0gKCBkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMiApICogaW52RGVub207XG5cblx0XHQvLyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBtdXN0IGFsd2F5cyBzdW0gdG8gMVxuXHRcdHJldHVybiB0YXJnZXQuc2V0KCAxIC0gdSAtIHYsIHYsIHUgKTtcblxuXHR9XG5cblx0c3RhdGljIGNvbnRhaW5zUG9pbnQoIHBvaW50LCBhLCBiLCBjICkge1xuXG5cdFx0dGhpcy5nZXRCYXJ5Y29vcmQoIHBvaW50LCBhLCBiLCBjLCBfdjMkMSApO1xuXG5cdFx0cmV0dXJuICggX3YzJDEueCA+PSAwICkgJiYgKCBfdjMkMS55ID49IDAgKSAmJiAoICggX3YzJDEueCArIF92MyQxLnkgKSA8PSAxICk7XG5cblx0fVxuXG5cdHN0YXRpYyBnZXRVViggcG9pbnQsIHAxLCBwMiwgcDMsIHV2MSwgdXYyLCB1djMsIHRhcmdldCApIHtcblxuXHRcdHRoaXMuZ2V0QmFyeWNvb3JkKCBwb2ludCwgcDEsIHAyLCBwMywgX3YzJDEgKTtcblxuXHRcdHRhcmdldC5zZXQoIDAsIDAgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCB1djEsIF92MyQxLnggKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCB1djIsIF92MyQxLnkgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCB1djMsIF92MyQxLnogKTtcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdHN0YXRpYyBpc0Zyb250RmFjaW5nKCBhLCBiLCBjLCBkaXJlY3Rpb24gKSB7XG5cblx0XHRfdjAkMS5zdWJWZWN0b3JzKCBjLCBiICk7XG5cdFx0X3YxJDMuc3ViVmVjdG9ycyggYSwgYiApO1xuXG5cdFx0Ly8gc3RyaWN0bHkgZnJvbnQgZmFjaW5nXG5cdFx0cmV0dXJuICggX3YwJDEuY3Jvc3MoIF92MSQzICkuZG90KCBkaXJlY3Rpb24gKSA8IDAgKSA/IHRydWUgOiBmYWxzZTtcblxuXHR9XG5cblx0c2V0KCBhLCBiLCBjICkge1xuXG5cdFx0dGhpcy5hLmNvcHkoIGEgKTtcblx0XHR0aGlzLmIuY29weSggYiApO1xuXHRcdHRoaXMuYy5jb3B5KCBjICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVBvaW50c0FuZEluZGljZXMoIHBvaW50cywgaTAsIGkxLCBpMiApIHtcblxuXHRcdHRoaXMuYS5jb3B5KCBwb2ludHNbIGkwIF0gKTtcblx0XHR0aGlzLmIuY29weSggcG9pbnRzWyBpMSBdICk7XG5cdFx0dGhpcy5jLmNvcHkoIHBvaW50c1sgaTIgXSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKCBhdHRyaWJ1dGUsIGkwLCBpMSwgaTIgKSB7XG5cblx0XHR0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpMCApO1xuXHRcdHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGkxICk7XG5cdFx0dGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaTIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0Y29weSggdHJpYW5nbGUgKSB7XG5cblx0XHR0aGlzLmEuY29weSggdHJpYW5nbGUuYSApO1xuXHRcdHRoaXMuYi5jb3B5KCB0cmlhbmdsZS5iICk7XG5cdFx0dGhpcy5jLmNvcHkoIHRyaWFuZ2xlLmMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRBcmVhKCkge1xuXG5cdFx0X3YwJDEuc3ViVmVjdG9ycyggdGhpcy5jLCB0aGlzLmIgKTtcblx0XHRfdjEkMy5zdWJWZWN0b3JzKCB0aGlzLmEsIHRoaXMuYiApO1xuXG5cdFx0cmV0dXJuIF92MCQxLmNyb3NzKCBfdjEkMyApLmxlbmd0aCgpICogMC41O1xuXG5cdH1cblxuXHRnZXRNaWRwb2ludCggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5hZGRWZWN0b3JzKCB0aGlzLmEsIHRoaXMuYiApLmFkZCggdGhpcy5jICkubXVsdGlwbHlTY2FsYXIoIDEgLyAzICk7XG5cblx0fVxuXG5cdGdldE5vcm1hbCggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmdldE5vcm1hbCggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGdldFBsYW5lKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldEZyb21Db3BsYW5hclBvaW50cyggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyApO1xuXG5cdH1cblxuXHRnZXRCYXJ5Y29vcmQoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gVHJpYW5nbGUuZ2V0QmFyeWNvb3JkKCBwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGdldFVWKCBwb2ludCwgdXYxLCB1djIsIHV2MywgdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmdldFVWKCBwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdXYxLCB1djIsIHV2MywgdGFyZ2V0ICk7XG5cblx0fVxuXG5cdGNvbnRhaW5zUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0cmV0dXJuIFRyaWFuZ2xlLmNvbnRhaW5zUG9pbnQoIHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jICk7XG5cblx0fVxuXG5cdGlzRnJvbnRGYWNpbmcoIGRpcmVjdGlvbiApIHtcblxuXHRcdHJldHVybiBUcmlhbmdsZS5pc0Zyb250RmFjaW5nKCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCBkaXJlY3Rpb24gKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c0JveCggYm94ICkge1xuXG5cdFx0cmV0dXJuIGJveC5pbnRlcnNlY3RzVHJpYW5nbGUoIHRoaXMgKTtcblxuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludCggcCwgdGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgYSA9IHRoaXMuYSwgYiA9IHRoaXMuYiwgYyA9IHRoaXMuYztcblx0XHRsZXQgdiwgdztcblxuXHRcdC8vIGFsZ29yaXRobSB0aGFua3MgdG8gUmVhbC1UaW1lIENvbGxpc2lvbiBEZXRlY3Rpb24gYnkgQ2hyaXN0ZXIgRXJpY3Nvbixcblx0XHQvLyBwdWJsaXNoZWQgYnkgTW9yZ2FuIEthdWZtYW5uIFB1Ymxpc2hlcnMsIChjKSAyMDA1IEVsc2V2aWVyIEluYy4sXG5cdFx0Ly8gdW5kZXIgdGhlIGFjY29tcGFueWluZyBsaWNlbnNlOyBzZWUgY2hhcHRlciA1LjEuNSBmb3IgZGV0YWlsZWQgZXhwbGFuYXRpb24uXG5cdFx0Ly8gYmFzaWNhbGx5LCB3ZSdyZSBkaXN0aW5ndWlzaGluZyB3aGljaCBvZiB0aGUgdm9yb25vaSByZWdpb25zIG9mIHRoZSB0cmlhbmdsZVxuXHRcdC8vIHRoZSBwb2ludCBsaWVzIGluIHdpdGggdGhlIG1pbmltdW0gYW1vdW50IG9mIHJlZHVuZGFudCBjb21wdXRhdGlvbi5cblxuXHRcdF92YWIuc3ViVmVjdG9ycyggYiwgYSApO1xuXHRcdF92YWMuc3ViVmVjdG9ycyggYywgYSApO1xuXHRcdF92YXAuc3ViVmVjdG9ycyggcCwgYSApO1xuXHRcdGNvbnN0IGQxID0gX3ZhYi5kb3QoIF92YXAgKTtcblx0XHRjb25zdCBkMiA9IF92YWMuZG90KCBfdmFwICk7XG5cdFx0aWYgKCBkMSA8PSAwICYmIGQyIDw9IDAgKSB7XG5cblx0XHRcdC8vIHZlcnRleCByZWdpb24gb2YgQTsgYmFyeWNlbnRyaWMgY29vcmRzICgxLCAwLCAwKVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBhICk7XG5cblx0XHR9XG5cblx0XHRfdmJwLnN1YlZlY3RvcnMoIHAsIGIgKTtcblx0XHRjb25zdCBkMyA9IF92YWIuZG90KCBfdmJwICk7XG5cdFx0Y29uc3QgZDQgPSBfdmFjLmRvdCggX3ZicCApO1xuXHRcdGlmICggZDMgPj0gMCAmJiBkNCA8PSBkMyApIHtcblxuXHRcdFx0Ly8gdmVydGV4IHJlZ2lvbiBvZiBCOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDAsIDEsIDApXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGIgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHZjID0gZDEgKiBkNCAtIGQzICogZDI7XG5cdFx0aWYgKCB2YyA8PSAwICYmIGQxID49IDAgJiYgZDMgPD0gMCApIHtcblxuXHRcdFx0diA9IGQxIC8gKCBkMSAtIGQzICk7XG5cdFx0XHQvLyBlZGdlIHJlZ2lvbiBvZiBBQjsgYmFyeWNlbnRyaWMgY29vcmRzICgxLXYsIHYsIDApXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIGEgKS5hZGRTY2FsZWRWZWN0b3IoIF92YWIsIHYgKTtcblxuXHRcdH1cblxuXHRcdF92Y3Auc3ViVmVjdG9ycyggcCwgYyApO1xuXHRcdGNvbnN0IGQ1ID0gX3ZhYi5kb3QoIF92Y3AgKTtcblx0XHRjb25zdCBkNiA9IF92YWMuZG90KCBfdmNwICk7XG5cdFx0aWYgKCBkNiA+PSAwICYmIGQ1IDw9IGQ2ICkge1xuXG5cdFx0XHQvLyB2ZXJ0ZXggcmVnaW9uIG9mIEM7IGJhcnljZW50cmljIGNvb3JkcyAoMCwgMCwgMSlcblx0XHRcdHJldHVybiB0YXJnZXQuY29weSggYyApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdmIgPSBkNSAqIGQyIC0gZDEgKiBkNjtcblx0XHRpZiAoIHZiIDw9IDAgJiYgZDIgPj0gMCAmJiBkNiA8PSAwICkge1xuXG5cdFx0XHR3ID0gZDIgLyAoIGQyIC0gZDYgKTtcblx0XHRcdC8vIGVkZ2UgcmVnaW9uIG9mIEFDOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEtdywgMCwgdylcblx0XHRcdHJldHVybiB0YXJnZXQuY29weSggYSApLmFkZFNjYWxlZFZlY3RvciggX3ZhYywgdyApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdmEgPSBkMyAqIGQ2IC0gZDUgKiBkNDtcblx0XHRpZiAoIHZhIDw9IDAgJiYgKCBkNCAtIGQzICkgPj0gMCAmJiAoIGQ1IC0gZDYgKSA+PSAwICkge1xuXG5cdFx0XHRfdmJjLnN1YlZlY3RvcnMoIGMsIGIgKTtcblx0XHRcdHcgPSAoIGQ0IC0gZDMgKSAvICggKCBkNCAtIGQzICkgKyAoIGQ1IC0gZDYgKSApO1xuXHRcdFx0Ly8gZWRnZSByZWdpb24gb2YgQkM7IGJhcnljZW50cmljIGNvb3JkcyAoMCwgMS13LCB3KVxuXHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBiICkuYWRkU2NhbGVkVmVjdG9yKCBfdmJjLCB3ICk7IC8vIGVkZ2UgcmVnaW9uIG9mIEJDXG5cblx0XHR9XG5cblx0XHQvLyBmYWNlIHJlZ2lvblxuXHRcdGNvbnN0IGRlbm9tID0gMSAvICggdmEgKyB2YiArIHZjICk7XG5cdFx0Ly8gdSA9IHZhICogZGVub21cblx0XHR2ID0gdmIgKiBkZW5vbTtcblx0XHR3ID0gdmMgKiBkZW5vbTtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggYSApLmFkZFNjYWxlZFZlY3RvciggX3ZhYiwgdiApLmFkZFNjYWxlZFZlY3RvciggX3ZhYywgdyApO1xuXG5cdH1cblxuXHRlcXVhbHMoIHRyaWFuZ2xlICkge1xuXG5cdFx0cmV0dXJuIHRyaWFuZ2xlLmEuZXF1YWxzKCB0aGlzLmEgKSAmJiB0cmlhbmdsZS5iLmVxdWFscyggdGhpcy5iICkgJiYgdHJpYW5nbGUuYy5lcXVhbHMoIHRoaXMuYyApO1xuXG5cdH1cblxufVxuXG5sZXQgbWF0ZXJpYWxJZCA9IDA7XG5cbmNsYXNzIE1hdGVyaWFsIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IG1hdGVyaWFsSWQgKysgfSApO1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR0aGlzLnR5cGUgPSAnTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5mb2cgPSB0cnVlO1xuXG5cdFx0dGhpcy5ibGVuZGluZyA9IE5vcm1hbEJsZW5kaW5nO1xuXHRcdHRoaXMuc2lkZSA9IEZyb250U2lkZTtcblx0XHR0aGlzLnZlcnRleENvbG9ycyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5vcGFjaXR5ID0gMTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cblx0XHR0aGlzLmJsZW5kU3JjID0gU3JjQWxwaGFGYWN0b3I7XG5cdFx0dGhpcy5ibGVuZERzdCA9IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I7XG5cdFx0dGhpcy5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb247XG5cdFx0dGhpcy5ibGVuZFNyY0FscGhhID0gbnVsbDtcblx0XHR0aGlzLmJsZW5kRHN0QWxwaGEgPSBudWxsO1xuXHRcdHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDtcblxuXHRcdHRoaXMuZGVwdGhGdW5jID0gTGVzc0VxdWFsRGVwdGg7XG5cdFx0dGhpcy5kZXB0aFRlc3QgPSB0cnVlO1xuXHRcdHRoaXMuZGVwdGhXcml0ZSA9IHRydWU7XG5cblx0XHR0aGlzLnN0ZW5jaWxXcml0ZU1hc2sgPSAweGZmO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmMgPSBBbHdheXNTdGVuY2lsRnVuYztcblx0XHR0aGlzLnN0ZW5jaWxSZWYgPSAwO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmNNYXNrID0gMHhmZjtcblx0XHR0aGlzLnN0ZW5jaWxGYWlsID0gS2VlcFN0ZW5jaWxPcDtcblx0XHR0aGlzLnN0ZW5jaWxaRmFpbCA9IEtlZXBTdGVuY2lsT3A7XG5cdFx0dGhpcy5zdGVuY2lsWlBhc3MgPSBLZWVwU3RlbmNpbE9wO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmNsaXBwaW5nUGxhbmVzID0gbnVsbDtcblx0XHR0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblx0XHR0aGlzLmNsaXBTaGFkb3dzID0gZmFsc2U7XG5cblx0XHR0aGlzLnNoYWRvd1NpZGUgPSBudWxsO1xuXG5cdFx0dGhpcy5jb2xvcldyaXRlID0gdHJ1ZTtcblx0XHR0aGlzLmFscGhhV3JpdGUgPSB0cnVlO1xuXG5cdFx0dGhpcy5wcmVjaXNpb24gPSBudWxsOyAvLyBvdmVycmlkZSB0aGUgcmVuZGVyZXIncyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgdGhpcyBtYXRlcmlhbFxuXG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0ID0gZmFsc2U7XG5cdFx0dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMDtcblx0XHR0aGlzLnBvbHlnb25PZmZzZXRVbml0cyA9IDA7XG5cblx0XHR0aGlzLmRpdGhlcmluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5hbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTtcblx0XHR0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlO1xuXG5cdFx0dGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuXHRcdHRoaXMudG9uZU1hcHBlZCA9IHRydWU7XG5cblx0XHR0aGlzLnVzZXJEYXRhID0ge307XG5cblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXG5cdFx0dGhpcy5fYWxwaGFUZXN0ID0gMDtcblxuXHR9XG5cblx0Z2V0IGFscGhhVGVzdCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9hbHBoYVRlc3Q7XG5cblx0fVxuXG5cdHNldCBhbHBoYVRlc3QoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB0aGlzLl9hbHBoYVRlc3QgPiAwICE9PSB2YWx1ZSA+IDAgKSB7XG5cblx0XHRcdHRoaXMudmVyc2lvbiArKztcblxuXHRcdH1cblxuXHRcdHRoaXMuX2FscGhhVGVzdCA9IHZhbHVlO1xuXG5cdH1cblxuXHRvbkJ1aWxkKCAvKiBzaGFkZXJvYmplY3QsIHJlbmRlcmVyICovICkge31cblxuXHRvbkJlZm9yZVJlbmRlciggLyogcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBvYmplY3QsIGdyb3VwICovICkge31cblxuXHRvbkJlZm9yZUNvbXBpbGUoIC8qIHNoYWRlcm9iamVjdCwgcmVuZGVyZXIgKi8gKSB7fVxuXG5cdGN1c3RvbVByb2dyYW1DYWNoZUtleSgpIHtcblxuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpO1xuXG5cdH1cblxuXHRzZXRWYWx1ZXMoIHZhbHVlcyApIHtcblxuXHRcdGlmICggdmFsdWVzID09PSB1bmRlZmluZWQgKSByZXR1cm47XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gdmFsdWVzICkge1xuXG5cdFx0XHRjb25zdCBuZXdWYWx1ZSA9IHZhbHVlc1sga2V5IF07XG5cblx0XHRcdGlmICggbmV3VmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRlcmlhbDogXFwnJyArIGtleSArICdcXCcgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4nICk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IGlmIHNoYWRpbmcgaXMgc2V0IGluIHRoZSBjb25zdHJ1Y3RvclxuXHRcdFx0aWYgKCBrZXkgPT09ICdzaGFkaW5nJyApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLicgKTtcblx0XHRcdFx0dGhpcy5mbGF0U2hhZGluZyA9ICggbmV3VmFsdWUgPT09IEZsYXRTaGFkaW5nICkgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXNbIGtleSBdO1xuXG5cdFx0XHRpZiAoIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiBcXCcnICsga2V5ICsgJ1xcJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLicgKTtcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLmlzQ29sb3IgKSB7XG5cblx0XHRcdFx0Y3VycmVudFZhbHVlLnNldCggbmV3VmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggKCBjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLmlzVmVjdG9yMyApICYmICggbmV3VmFsdWUgJiYgbmV3VmFsdWUuaXNWZWN0b3IzICkgKSB7XG5cblx0XHRcdFx0Y3VycmVudFZhbHVlLmNvcHkoIG5ld1ZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dGhpc1sga2V5IF0gPSBuZXdWYWx1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBpc1Jvb3QgPSAoIG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmluZycgKTtcblxuXHRcdGlmICggaXNSb290ICkge1xuXG5cdFx0XHRtZXRhID0ge1xuXHRcdFx0XHR0ZXh0dXJlczoge30sXG5cdFx0XHRcdGltYWdlczoge31cblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0dmVyc2lvbjogNC41LFxuXHRcdFx0XHR0eXBlOiAnTWF0ZXJpYWwnLFxuXHRcdFx0XHRnZW5lcmF0b3I6ICdNYXRlcmlhbC50b0pTT04nXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIHN0YW5kYXJkIE1hdGVyaWFsIHNlcmlhbGl6YXRpb25cblx0XHRkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0ZGF0YS50eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0aWYgKCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5uYW1lID0gdGhpcy5uYW1lO1xuXG5cdFx0aWYgKCB0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IuaXNDb2xvciApIGRhdGEuY29sb3IgPSB0aGlzLmNvbG9yLmdldEhleCgpO1xuXG5cdFx0aWYgKCB0aGlzLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5yb3VnaG5lc3MgPSB0aGlzLnJvdWdobmVzcztcblx0XHRpZiAoIHRoaXMubWV0YWxuZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLm1ldGFsbmVzcyA9IHRoaXMubWV0YWxuZXNzO1xuXG5cdFx0aWYgKCB0aGlzLnNoZWVuICE9PSB1bmRlZmluZWQgKSBkYXRhLnNoZWVuID0gdGhpcy5zaGVlbjtcblx0XHRpZiAoIHRoaXMuc2hlZW5Db2xvciAmJiB0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciApIGRhdGEuc2hlZW5Db2xvciA9IHRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKTtcblx0XHRpZiAoIHRoaXMuc2hlZW5Sb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEuc2hlZW5Sb3VnaG5lc3MgPSB0aGlzLnNoZWVuUm91Z2huZXNzO1xuXHRcdGlmICggdGhpcy5lbWlzc2l2ZSAmJiB0aGlzLmVtaXNzaXZlLmlzQ29sb3IgKSBkYXRhLmVtaXNzaXZlID0gdGhpcy5lbWlzc2l2ZS5nZXRIZXgoKTtcblx0XHRpZiAoIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgJiYgdGhpcy5lbWlzc2l2ZUludGVuc2l0eSAhPT0gMSApIGRhdGEuZW1pc3NpdmVJbnRlbnNpdHkgPSB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5O1xuXG5cdFx0aWYgKCB0aGlzLnNwZWN1bGFyICYmIHRoaXMuc3BlY3VsYXIuaXNDb2xvciApIGRhdGEuc3BlY3VsYXIgPSB0aGlzLnNwZWN1bGFyLmdldEhleCgpO1xuXHRcdGlmICggdGhpcy5zcGVjdWxhckludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgZGF0YS5zcGVjdWxhckludGVuc2l0eSA9IHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk7XG5cdFx0aWYgKCB0aGlzLnNwZWN1bGFyQ29sb3IgJiYgdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3IgKSBkYXRhLnNwZWN1bGFyQ29sb3IgPSB0aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCk7XG5cdFx0aWYgKCB0aGlzLnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaGluaW5lc3MgPSB0aGlzLnNoaW5pbmVzcztcblx0XHRpZiAoIHRoaXMuY2xlYXJjb2F0ICE9PSB1bmRlZmluZWQgKSBkYXRhLmNsZWFyY29hdCA9IHRoaXMuY2xlYXJjb2F0O1xuXHRcdGlmICggdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEuY2xlYXJjb2F0Um91Z2huZXNzID0gdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M7XG5cblx0XHRpZiAoIHRoaXMuY2xlYXJjb2F0TWFwICYmIHRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5jbGVhcmNvYXRNYXAgPSB0aGlzLmNsZWFyY29hdE1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCAmJiB0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEuY2xlYXJjb2F0Um91Z2huZXNzTWFwID0gdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgJiYgdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmNsZWFyY29hdE5vcm1hbE1hcCA9IHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLmNsZWFyY29hdE5vcm1hbFNjYWxlID0gdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSApIGRhdGEubWFwID0gdGhpcy5tYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMubWF0Y2FwICYmIHRoaXMubWF0Y2FwLmlzVGV4dHVyZSApIGRhdGEubWF0Y2FwID0gdGhpcy5tYXRjYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMuYWxwaGFNYXAgJiYgdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUgKSBkYXRhLmFscGhhTWFwID0gdGhpcy5hbHBoYU1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXG5cdFx0aWYgKCB0aGlzLmxpZ2h0TWFwICYmIHRoaXMubGlnaHRNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmxpZ2h0TWFwID0gdGhpcy5saWdodE1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdFx0ZGF0YS5saWdodE1hcEludGVuc2l0eSA9IHRoaXMubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuYW9NYXAgJiYgdGhpcy5hb01hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEuYW9NYXAgPSB0aGlzLmFvTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLmFvTWFwSW50ZW5zaXR5ID0gdGhpcy5hb01hcEludGVuc2l0eTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5idW1wTWFwICYmIHRoaXMuYnVtcE1hcC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGRhdGEuYnVtcE1hcCA9IHRoaXMuYnVtcE1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdFx0ZGF0YS5idW1wU2NhbGUgPSB0aGlzLmJ1bXBTY2FsZTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5ub3JtYWxNYXAgJiYgdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLm5vcm1hbE1hcCA9IHRoaXMubm9ybWFsTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0XHRkYXRhLm5vcm1hbE1hcFR5cGUgPSB0aGlzLm5vcm1hbE1hcFR5cGU7XG5cdFx0XHRkYXRhLm5vcm1hbFNjYWxlID0gdGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZGlzcGxhY2VtZW50TWFwICYmIHRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5kaXNwbGFjZW1lbnRNYXAgPSB0aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdFx0ZGF0YS5kaXNwbGFjZW1lbnRTY2FsZSA9IHRoaXMuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHRkYXRhLmRpc3BsYWNlbWVudEJpYXMgPSB0aGlzLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMucm91Z2huZXNzTWFwICYmIHRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSApIGRhdGEucm91Z2huZXNzTWFwID0gdGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMubWV0YWxuZXNzTWFwICYmIHRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSApIGRhdGEubWV0YWxuZXNzTWFwID0gdGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdGlmICggdGhpcy5lbWlzc2l2ZU1hcCAmJiB0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSApIGRhdGEuZW1pc3NpdmVNYXAgPSB0aGlzLmVtaXNzaXZlTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0aWYgKCB0aGlzLnNwZWN1bGFyTWFwICYmIHRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlICkgZGF0YS5zcGVjdWxhck1hcCA9IHRoaXMuc3BlY3VsYXJNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgJiYgdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUgKSBkYXRhLnNwZWN1bGFySW50ZW5zaXR5TWFwID0gdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04oIG1ldGEgKS51dWlkO1xuXHRcdGlmICggdGhpcy5zcGVjdWxhckNvbG9yTWFwICYmIHRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUgKSBkYXRhLnNwZWN1bGFyQ29sb3JNYXAgPSB0aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdGlmICggdGhpcy5lbnZNYXAgJiYgdGhpcy5lbnZNYXAuaXNUZXh0dXJlICkge1xuXG5cdFx0XHRkYXRhLmVudk1hcCA9IHRoaXMuZW52TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cblx0XHRcdGlmICggdGhpcy5jb21iaW5lICE9PSB1bmRlZmluZWQgKSBkYXRhLmNvbWJpbmUgPSB0aGlzLmNvbWJpbmU7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZW52TWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBkYXRhLmVudk1hcEludGVuc2l0eSA9IHRoaXMuZW52TWFwSW50ZW5zaXR5O1xuXHRcdGlmICggdGhpcy5yZWZsZWN0aXZpdHkgIT09IHVuZGVmaW5lZCApIGRhdGEucmVmbGVjdGl2aXR5ID0gdGhpcy5yZWZsZWN0aXZpdHk7XG5cdFx0aWYgKCB0aGlzLnJlZnJhY3Rpb25SYXRpbyAhPT0gdW5kZWZpbmVkICkgZGF0YS5yZWZyYWN0aW9uUmF0aW8gPSB0aGlzLnJlZnJhY3Rpb25SYXRpbztcblxuXHRcdGlmICggdGhpcy5ncmFkaWVudE1hcCAmJiB0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0ZGF0YS5ncmFkaWVudE1hcCA9IHRoaXMuZ3JhZGllbnRNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy50cmFuc21pc3Npb24gIT09IHVuZGVmaW5lZCApIGRhdGEudHJhbnNtaXNzaW9uID0gdGhpcy50cmFuc21pc3Npb247XG5cdFx0aWYgKCB0aGlzLnRyYW5zbWlzc2lvbk1hcCAmJiB0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUgKSBkYXRhLnRyYW5zbWlzc2lvbk1hcCA9IHRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7XG5cdFx0aWYgKCB0aGlzLnRoaWNrbmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS50aGlja25lc3MgPSB0aGlzLnRoaWNrbmVzcztcblx0XHRpZiAoIHRoaXMudGhpY2tuZXNzTWFwICYmIHRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSApIGRhdGEudGhpY2tuZXNzTWFwID0gdGhpcy50aGlja25lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDtcblx0XHRpZiAoIHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5hdHRlbnVhdGlvbkRpc3RhbmNlID0gdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdGlmICggdGhpcy5hdHRlbnVhdGlvbkNvbG9yICE9PSB1bmRlZmluZWQgKSBkYXRhLmF0dGVudWF0aW9uQ29sb3IgPSB0aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCk7XG5cblx0XHRpZiAoIHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaXplID0gdGhpcy5zaXplO1xuXHRcdGlmICggdGhpcy5zaGFkb3dTaWRlICE9PSBudWxsICkgZGF0YS5zaGFkb3dTaWRlID0gdGhpcy5zaGFkb3dTaWRlO1xuXHRcdGlmICggdGhpcy5zaXplQXR0ZW51YXRpb24gIT09IHVuZGVmaW5lZCApIGRhdGEuc2l6ZUF0dGVudWF0aW9uID0gdGhpcy5zaXplQXR0ZW51YXRpb247XG5cblx0XHRpZiAoIHRoaXMuYmxlbmRpbmcgIT09IE5vcm1hbEJsZW5kaW5nICkgZGF0YS5ibGVuZGluZyA9IHRoaXMuYmxlbmRpbmc7XG5cdFx0aWYgKCB0aGlzLnNpZGUgIT09IEZyb250U2lkZSApIGRhdGEuc2lkZSA9IHRoaXMuc2lkZTtcblx0XHRpZiAoIHRoaXMudmVydGV4Q29sb3JzICkgZGF0YS52ZXJ0ZXhDb2xvcnMgPSB0cnVlO1xuXG5cdFx0aWYgKCB0aGlzLm9wYWNpdHkgPCAxICkgZGF0YS5vcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuXHRcdGlmICggdGhpcy50cmFuc3BhcmVudCA9PT0gdHJ1ZSApIGRhdGEudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xuXG5cdFx0ZGF0YS5kZXB0aEZ1bmMgPSB0aGlzLmRlcHRoRnVuYztcblx0XHRkYXRhLmRlcHRoVGVzdCA9IHRoaXMuZGVwdGhUZXN0O1xuXHRcdGRhdGEuZGVwdGhXcml0ZSA9IHRoaXMuZGVwdGhXcml0ZTtcblx0XHRkYXRhLmNvbG9yV3JpdGUgPSB0aGlzLmNvbG9yV3JpdGU7XG5cdFx0ZGF0YS5hbHBoYVdyaXRlID0gdGhpcy5hbHBoYVdyaXRlO1xuXG5cdFx0ZGF0YS5zdGVuY2lsV3JpdGUgPSB0aGlzLnN0ZW5jaWxXcml0ZTtcblx0XHRkYXRhLnN0ZW5jaWxXcml0ZU1hc2sgPSB0aGlzLnN0ZW5jaWxXcml0ZU1hc2s7XG5cdFx0ZGF0YS5zdGVuY2lsRnVuYyA9IHRoaXMuc3RlbmNpbEZ1bmM7XG5cdFx0ZGF0YS5zdGVuY2lsUmVmID0gdGhpcy5zdGVuY2lsUmVmO1xuXHRcdGRhdGEuc3RlbmNpbEZ1bmNNYXNrID0gdGhpcy5zdGVuY2lsRnVuY01hc2s7XG5cdFx0ZGF0YS5zdGVuY2lsRmFpbCA9IHRoaXMuc3RlbmNpbEZhaWw7XG5cdFx0ZGF0YS5zdGVuY2lsWkZhaWwgPSB0aGlzLnN0ZW5jaWxaRmFpbDtcblx0XHRkYXRhLnN0ZW5jaWxaUGFzcyA9IHRoaXMuc3RlbmNpbFpQYXNzO1xuXG5cdFx0Ly8gcm90YXRpb24gKFNwcml0ZU1hdGVyaWFsKVxuXHRcdGlmICggdGhpcy5yb3RhdGlvbiAmJiB0aGlzLnJvdGF0aW9uICE9PSAwICkgZGF0YS5yb3RhdGlvbiA9IHRoaXMucm90YXRpb247XG5cblx0XHRpZiAoIHRoaXMucG9seWdvbk9mZnNldCA9PT0gdHJ1ZSApIGRhdGEucG9seWdvbk9mZnNldCA9IHRydWU7XG5cdFx0aWYgKCB0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgIT09IDAgKSBkYXRhLnBvbHlnb25PZmZzZXRGYWN0b3IgPSB0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I7XG5cdFx0aWYgKCB0aGlzLnBvbHlnb25PZmZzZXRVbml0cyAhPT0gMCApIGRhdGEucG9seWdvbk9mZnNldFVuaXRzID0gdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM7XG5cblx0XHRpZiAoIHRoaXMubGluZXdpZHRoICYmIHRoaXMubGluZXdpZHRoICE9PSAxICkgZGF0YS5saW5ld2lkdGggPSB0aGlzLmxpbmV3aWR0aDtcblx0XHRpZiAoIHRoaXMuZGFzaFNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEuZGFzaFNpemUgPSB0aGlzLmRhc2hTaXplO1xuXHRcdGlmICggdGhpcy5nYXBTaXplICE9PSB1bmRlZmluZWQgKSBkYXRhLmdhcFNpemUgPSB0aGlzLmdhcFNpemU7XG5cdFx0aWYgKCB0aGlzLnNjYWxlICE9PSB1bmRlZmluZWQgKSBkYXRhLnNjYWxlID0gdGhpcy5zY2FsZTtcblxuXHRcdGlmICggdGhpcy5kaXRoZXJpbmcgPT09IHRydWUgKSBkYXRhLmRpdGhlcmluZyA9IHRydWU7XG5cblx0XHRpZiAoIHRoaXMuYWxwaGFUZXN0ID4gMCApIGRhdGEuYWxwaGFUZXN0ID0gdGhpcy5hbHBoYVRlc3Q7XG5cdFx0aWYgKCB0aGlzLmFscGhhVG9Db3ZlcmFnZSA9PT0gdHJ1ZSApIGRhdGEuYWxwaGFUb0NvdmVyYWdlID0gdGhpcy5hbHBoYVRvQ292ZXJhZ2U7XG5cdFx0aWYgKCB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gdHJ1ZSApIGRhdGEucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE7XG5cblx0XHRpZiAoIHRoaXMud2lyZWZyYW1lID09PSB0cnVlICkgZGF0YS53aXJlZnJhbWUgPSB0aGlzLndpcmVmcmFtZTtcblx0XHRpZiAoIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID4gMSApIGRhdGEud2lyZWZyYW1lTGluZXdpZHRoID0gdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0aWYgKCB0aGlzLndpcmVmcmFtZUxpbmVjYXAgIT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVjYXAgPSB0aGlzLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0aWYgKCB0aGlzLndpcmVmcmFtZUxpbmVqb2luICE9PSAncm91bmQnICkgZGF0YS53aXJlZnJhbWVMaW5lam9pbiA9IHRoaXMud2lyZWZyYW1lTGluZWpvaW47XG5cblx0XHRpZiAoIHRoaXMuZmxhdFNoYWRpbmcgPT09IHRydWUgKSBkYXRhLmZsYXRTaGFkaW5nID0gdGhpcy5mbGF0U2hhZGluZztcblxuXHRcdGlmICggdGhpcy52aXNpYmxlID09PSBmYWxzZSApIGRhdGEudmlzaWJsZSA9IGZhbHNlO1xuXG5cdFx0aWYgKCB0aGlzLnRvbmVNYXBwZWQgPT09IGZhbHNlICkgZGF0YS50b25lTWFwcGVkID0gZmFsc2U7XG5cblx0XHRpZiAoIEpTT04uc3RyaW5naWZ5KCB0aGlzLnVzZXJEYXRhICkgIT09ICd7fScgKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdC8vIFRPRE86IENvcGllZCBmcm9tIE9iamVjdDNELnRvSlNPTlxuXG5cdFx0ZnVuY3Rpb24gZXh0cmFjdEZyb21DYWNoZSggY2FjaGUgKSB7XG5cblx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKCBjb25zdCBrZXkgaW4gY2FjaGUgKSB7XG5cblx0XHRcdFx0Y29uc3QgZGF0YSA9IGNhY2hlWyBrZXkgXTtcblx0XHRcdFx0ZGVsZXRlIGRhdGEubWV0YWRhdGE7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKCBkYXRhICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlcztcblxuXHRcdH1cblxuXHRcdGlmICggaXNSb290ICkge1xuXG5cdFx0XHRjb25zdCB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEudGV4dHVyZXMgKTtcblx0XHRcdGNvbnN0IGltYWdlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEuaW1hZ2VzICk7XG5cblx0XHRcdGlmICggdGV4dHVyZXMubGVuZ3RoID4gMCApIGRhdGEudGV4dHVyZXMgPSB0ZXh0dXJlcztcblx0XHRcdGlmICggaW1hZ2VzLmxlbmd0aCA+IDAgKSBkYXRhLmltYWdlcyA9IGltYWdlcztcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0dGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG5cblx0XHR0aGlzLmZvZyA9IHNvdXJjZS5mb2c7XG5cblx0XHR0aGlzLmJsZW5kaW5nID0gc291cmNlLmJsZW5kaW5nO1xuXHRcdHRoaXMuc2lkZSA9IHNvdXJjZS5zaWRlO1xuXHRcdHRoaXMudmVydGV4Q29sb3JzID0gc291cmNlLnZlcnRleENvbG9ycztcblxuXHRcdHRoaXMub3BhY2l0eSA9IHNvdXJjZS5vcGFjaXR5O1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBzb3VyY2UudHJhbnNwYXJlbnQ7XG5cblx0XHR0aGlzLmJsZW5kU3JjID0gc291cmNlLmJsZW5kU3JjO1xuXHRcdHRoaXMuYmxlbmREc3QgPSBzb3VyY2UuYmxlbmREc3Q7XG5cdFx0dGhpcy5ibGVuZEVxdWF0aW9uID0gc291cmNlLmJsZW5kRXF1YXRpb247XG5cdFx0dGhpcy5ibGVuZFNyY0FscGhhID0gc291cmNlLmJsZW5kU3JjQWxwaGE7XG5cdFx0dGhpcy5ibGVuZERzdEFscGhhID0gc291cmNlLmJsZW5kRHN0QWxwaGE7XG5cdFx0dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGEgPSBzb3VyY2UuYmxlbmRFcXVhdGlvbkFscGhhO1xuXG5cdFx0dGhpcy5kZXB0aEZ1bmMgPSBzb3VyY2UuZGVwdGhGdW5jO1xuXHRcdHRoaXMuZGVwdGhUZXN0ID0gc291cmNlLmRlcHRoVGVzdDtcblx0XHR0aGlzLmRlcHRoV3JpdGUgPSBzb3VyY2UuZGVwdGhXcml0ZTtcblxuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IHNvdXJjZS5zdGVuY2lsV3JpdGVNYXNrO1xuXHRcdHRoaXMuc3RlbmNpbEZ1bmMgPSBzb3VyY2Uuc3RlbmNpbEZ1bmM7XG5cdFx0dGhpcy5zdGVuY2lsUmVmID0gc291cmNlLnN0ZW5jaWxSZWY7XG5cdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSBzb3VyY2Uuc3RlbmNpbEZ1bmNNYXNrO1xuXHRcdHRoaXMuc3RlbmNpbEZhaWwgPSBzb3VyY2Uuc3RlbmNpbEZhaWw7XG5cdFx0dGhpcy5zdGVuY2lsWkZhaWwgPSBzb3VyY2Uuc3RlbmNpbFpGYWlsO1xuXHRcdHRoaXMuc3RlbmNpbFpQYXNzID0gc291cmNlLnN0ZW5jaWxaUGFzcztcblx0XHR0aGlzLnN0ZW5jaWxXcml0ZSA9IHNvdXJjZS5zdGVuY2lsV3JpdGU7XG5cblx0XHRjb25zdCBzcmNQbGFuZXMgPSBzb3VyY2UuY2xpcHBpbmdQbGFuZXM7XG5cdFx0bGV0IGRzdFBsYW5lcyA9IG51bGw7XG5cblx0XHRpZiAoIHNyY1BsYW5lcyAhPT0gbnVsbCApIHtcblxuXHRcdFx0Y29uc3QgbiA9IHNyY1BsYW5lcy5sZW5ndGg7XG5cdFx0XHRkc3RQbGFuZXMgPSBuZXcgQXJyYXkoIG4gKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdGRzdFBsYW5lc1sgaSBdID0gc3JjUGxhbmVzWyBpIF0uY2xvbmUoKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dGhpcy5jbGlwcGluZ1BsYW5lcyA9IGRzdFBsYW5lcztcblx0XHR0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBzb3VyY2UuY2xpcEludGVyc2VjdGlvbjtcblx0XHR0aGlzLmNsaXBTaGFkb3dzID0gc291cmNlLmNsaXBTaGFkb3dzO1xuXG5cdFx0dGhpcy5zaGFkb3dTaWRlID0gc291cmNlLnNoYWRvd1NpZGU7XG5cblx0XHR0aGlzLmNvbG9yV3JpdGUgPSBzb3VyY2UuY29sb3JXcml0ZTtcblx0XHR0aGlzLmFscGhhV3JpdGUgPSBzb3VyY2UuYWxwaGFXcml0ZTtcblxuXHRcdHRoaXMucHJlY2lzaW9uID0gc291cmNlLnByZWNpc2lvbjtcblxuXHRcdHRoaXMucG9seWdvbk9mZnNldCA9IHNvdXJjZS5wb2x5Z29uT2Zmc2V0O1xuXHRcdHRoaXMucG9seWdvbk9mZnNldEZhY3RvciA9IHNvdXJjZS5wb2x5Z29uT2Zmc2V0RmFjdG9yO1xuXHRcdHRoaXMucG9seWdvbk9mZnNldFVuaXRzID0gc291cmNlLnBvbHlnb25PZmZzZXRVbml0cztcblxuXHRcdHRoaXMuZGl0aGVyaW5nID0gc291cmNlLmRpdGhlcmluZztcblxuXHRcdHRoaXMuYWxwaGFUZXN0ID0gc291cmNlLmFscGhhVGVzdDtcblx0XHR0aGlzLmFscGhhVG9Db3ZlcmFnZSA9IHNvdXJjZS5hbHBoYVRvQ292ZXJhZ2U7XG5cdFx0dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbGllZEFscGhhO1xuXG5cdFx0dGhpcy52aXNpYmxlID0gc291cmNlLnZpc2libGU7XG5cblx0XHR0aGlzLnRvbmVNYXBwZWQgPSBzb3VyY2UudG9uZU1hcHBlZDtcblxuXHRcdHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggc291cmNlLnVzZXJEYXRhICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7XG5cblx0fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrO1xuXG5cdH1cblxufVxuXG5NYXRlcmlhbC5wcm90b3R5cGUuaXNNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGxpZ2h0TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICogIGFvTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICogIHNwZWN1bGFyTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICogIGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5LFxuICogIHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICogIGRlcHRoVGVzdDogPGJvb2w+LFxuICogIGRlcHRoV3JpdGU6IDxib29sPixcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LFxuICogfVxuICovXG5cbmNsYXNzIE1lc2hCYXNpY01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoQmFzaWNNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBlbWlzc2l2ZVxuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0aW9uO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gMTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IHNvdXJjZS5zcGVjdWxhck1hcDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IkOSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92ZWN0b3IyJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5cbmNsYXNzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggYXJyYXkgKSApIHtcblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuJyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmFycmF5ID0gYXJyYXk7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8gaXRlbVNpemUgOiAwO1xuXHRcdHRoaXMubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQgPT09IHRydWU7XG5cblx0XHR0aGlzLnVzYWdlID0gU3RhdGljRHJhd1VzYWdlO1xuXHRcdHRoaXMudXBkYXRlUmFuZ2UgPSB7IG9mZnNldDogMCwgY291bnQ6IC0gMSB9O1xuXG5cdFx0dGhpcy52ZXJzaW9uID0gMDtcblxuXHR9XG5cblx0b25VcGxvYWRDYWxsYmFjaygpIHt9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZlcnNpb24gKys7XG5cblx0fVxuXG5cdHNldFVzYWdlKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMudXNhZ2UgPSB2YWx1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcblx0XHR0aGlzLmFycmF5ID0gbmV3IHNvdXJjZS5hcnJheS5jb25zdHJ1Y3Rvciggc291cmNlLmFycmF5ICk7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IHNvdXJjZS5pdGVtU2l6ZTtcblx0XHR0aGlzLmNvdW50ID0gc291cmNlLmNvdW50O1xuXHRcdHRoaXMubm9ybWFsaXplZCA9IHNvdXJjZS5ub3JtYWxpemVkO1xuXG5cdFx0dGhpcy51c2FnZSA9IHNvdXJjZS51c2FnZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5QXQoIGluZGV4MSwgYXR0cmlidXRlLCBpbmRleDIgKSB7XG5cblx0XHRpbmRleDEgKj0gdGhpcy5pdGVtU2l6ZTtcblx0XHRpbmRleDIgKj0gYXR0cmlidXRlLml0ZW1TaXplO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuYXJyYXlbIGluZGV4MSArIGkgXSA9IGF0dHJpYnV0ZS5hcnJheVsgaW5kZXgyICsgaSBdO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlBcnJheSggYXJyYXkgKSB7XG5cblx0XHR0aGlzLmFycmF5LnNldCggYXJyYXkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5Q29sb3JzQXJyYXkoIGNvbG9ycyApIHtcblxuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheTtcblx0XHRsZXQgb2Zmc2V0ID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRsZXQgY29sb3IgPSBjb2xvcnNbIGkgXTtcblxuXHRcdFx0aWYgKCBjb2xvciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkJywgaSApO1xuXHRcdFx0XHRjb2xvciA9IG5ldyBDb2xvcigpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IGNvbG9yLnI7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5nO1xuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gY29sb3IuYjtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5VmVjdG9yMnNBcnJheSggdmVjdG9ycyApIHtcblxuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheTtcblx0XHRsZXQgb2Zmc2V0ID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0bGV0IHZlY3RvciA9IHZlY3RvcnNbIGkgXTtcblxuXHRcdFx0aWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCcsIGkgKTtcblx0XHRcdFx0dmVjdG9yID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDtcblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci55O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHlWZWN0b3Izc0FycmF5KCB2ZWN0b3JzICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSB0aGlzLmFycmF5O1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRsZXQgdmVjdG9yID0gdmVjdG9yc1sgaSBdO1xuXG5cdFx0XHRpZiAoIHZlY3RvciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSApO1xuXHRcdFx0XHR2ZWN0b3IgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci54O1xuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IuejtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5VmVjdG9yNHNBcnJheSggdmVjdG9ycyApIHtcblxuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheTtcblx0XHRsZXQgb2Zmc2V0ID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0bGV0IHZlY3RvciA9IHZlY3RvcnNbIGkgXTtcblxuXHRcdFx0aWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCcsIGkgKTtcblx0XHRcdFx0dmVjdG9yID0gbmV3IFZlY3RvcjQoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDtcblx0XHRcdGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci55O1xuXHRcdFx0YXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLno7XG5cdFx0XHRhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IudztcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDMoIG0gKSB7XG5cblx0XHRpZiAoIHRoaXMuaXRlbVNpemUgPT09IDIgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdF92ZWN0b3IyJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggdGhpcywgaSApO1xuXHRcdFx0XHRfdmVjdG9yMiQxLmFwcGx5TWF0cml4MyggbSApO1xuXG5cdFx0XHRcdHRoaXMuc2V0WFkoIGksIF92ZWN0b3IyJDEueCwgX3ZlY3RvcjIkMS55ICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuaXRlbVNpemUgPT09IDMgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdF92ZWN0b3IkOS5mcm9tQnVmZmVyQXR0cmlidXRlKCB0aGlzLCBpICk7XG5cdFx0XHRcdF92ZWN0b3IkOS5hcHBseU1hdHJpeDMoIG0gKTtcblxuXHRcdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ5LngsIF92ZWN0b3IkOS55LCBfdmVjdG9yJDkueiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkOS54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ5LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ5LmFwcGx5TWF0cml4NCggbSApO1xuXG5cdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ5LngsIF92ZWN0b3IkOS55LCBfdmVjdG9yJDkueiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5Tm9ybWFsTWF0cml4KCBtICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkOS54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ5LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ5LmFwcGx5Tm9ybWFsTWF0cml4KCBtICk7XG5cblx0XHRcdHRoaXMuc2V0WFlaKCBpLCBfdmVjdG9yJDkueCwgX3ZlY3RvciQ5LnksIF92ZWN0b3IkOS56ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uKCBtICkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jb3VudDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdF92ZWN0b3IkOS54ID0gdGhpcy5nZXRYKCBpICk7XG5cdFx0XHRfdmVjdG9yJDkueSA9IHRoaXMuZ2V0WSggaSApO1xuXHRcdFx0X3ZlY3RvciQ5LnogPSB0aGlzLmdldFooIGkgKTtcblxuXHRcdFx0X3ZlY3RvciQ5LnRyYW5zZm9ybURpcmVjdGlvbiggbSApO1xuXG5cdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ5LngsIF92ZWN0b3IkOS55LCBfdmVjdG9yJDkueiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldCggdmFsdWUsIG9mZnNldCA9IDAgKSB7XG5cblx0XHR0aGlzLmFycmF5LnNldCggdmFsdWUsIG9mZnNldCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFgoIGluZGV4ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSBdO1xuXG5cdH1cblxuXHRzZXRYKCBpbmRleCwgeCApIHtcblxuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSBdID0geDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRZKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAxIF07XG5cblx0fVxuXG5cdHNldFkoIGluZGV4LCB5ICkge1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMSBdID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRaKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyIF07XG5cblx0fVxuXG5cdHNldFooIGluZGV4LCB6ICkge1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMiBdID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRXKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAzIF07XG5cblx0fVxuXG5cdHNldFcoIGluZGV4LCB3ICkge1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMyBdID0gdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYWSggaW5kZXgsIHgsIHkgKSB7XG5cblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAwIF0gPSB4O1xuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYWVooIGluZGV4LCB4LCB5LCB6ICkge1xuXG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcblxuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDtcblx0XHR0aGlzLmFycmF5WyBpbmRleCArIDEgXSA9IHk7XG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAyIF0gPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFhZWlcoIGluZGV4LCB4LCB5LCB6LCB3ICkge1xuXG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcblxuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDtcblx0XHR0aGlzLmFycmF5WyBpbmRleCArIDEgXSA9IHk7XG5cdFx0dGhpcy5hcnJheVsgaW5kZXggKyAyIF0gPSB6O1xuXHRcdHRoaXMuYXJyYXlbIGluZGV4ICsgMyBdID0gdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRvblVwbG9hZCggY2FsbGJhY2sgKSB7XG5cblx0XHR0aGlzLm9uVXBsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy5hcnJheSwgdGhpcy5pdGVtU2l6ZSApLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdGl0ZW1TaXplOiB0aGlzLml0ZW1TaXplLFxuXHRcdFx0dHlwZTogdGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0YXJyYXk6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCB0aGlzLmFycmF5ICksXG5cdFx0XHRub3JtYWxpemVkOiB0aGlzLm5vcm1hbGl6ZWRcblx0XHR9O1xuXG5cdFx0aWYgKCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5uYW1lID0gdGhpcy5uYW1lO1xuXHRcdGlmICggdGhpcy51c2FnZSAhPT0gU3RhdGljRHJhd1VzYWdlICkgZGF0YS51c2FnZSA9IHRoaXMudXNhZ2U7XG5cdFx0aWYgKCB0aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCAhPT0gMCB8fCB0aGlzLnVwZGF0ZVJhbmdlLmNvdW50ICE9PSAtIDEgKSBkYXRhLnVwZGF0ZVJhbmdlID0gdGhpcy51cGRhdGVSYW5nZTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuLy9cblxuY2xhc3MgSW50OEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgSW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBVaW50OEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgVWludDhBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBVaW50OENsYW1wZWRBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSW50MTZCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IEludDE2QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgVWludDE2QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEludDMyQnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBJbnQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgZXh0ZW5kcyBCdWZmZXJBdHRyaWJ1dGUge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7XG5cblx0XHRzdXBlciggbmV3IFVpbnQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBVaW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHR9XG5cbn1cblxuRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlID0gdHJ1ZTtcblxuY2xhc3MgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHtcblxuXHRcdHN1cGVyKCBuZXcgRmxvYXQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBGbG9hdDY0QnVmZmVyQXR0cmlidXRlIGV4dGVuZHMgQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkge1xuXG5cdFx0c3VwZXIoIG5ldyBGbG9hdDY0QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7XG5cblx0fVxuXG59XG5cbmxldCBfaWQkMSA9IDA7XG5cbmNvbnN0IF9tMSA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9vYmogPSAvKkBfX1BVUkVfXyovIG5ldyBPYmplY3QzRCgpO1xuY29uc3QgX29mZnNldCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9ib3gkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IEJveDMoKTtcbmNvbnN0IF9ib3hNb3JwaFRhcmdldHMgPSAvKkBfX1BVUkVfXyovIG5ldyBCb3gzKCk7XG5jb25zdCBfdmVjdG9yJDggPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIEJ1ZmZlckdlb21ldHJ5IGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IF9pZCQxICsrIH0gKTtcblxuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0dGhpcy50eXBlID0gJ0J1ZmZlckdlb21ldHJ5JztcblxuXHRcdHRoaXMuaW5kZXggPSBudWxsO1xuXHRcdHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuXG5cdFx0dGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gZmFsc2U7XG5cblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXG5cdFx0dGhpcy5ib3VuZGluZ0JveCA9IG51bGw7XG5cdFx0dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7XG5cblx0XHR0aGlzLmRyYXdSYW5nZSA9IHsgc3RhcnQ6IDAsIGNvdW50OiBJbmZpbml0eSB9O1xuXG5cdFx0dGhpcy51c2VyRGF0YSA9IHt9O1xuXG5cdH1cblxuXHRnZXRJbmRleCgpIHtcblxuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXG5cdH1cblxuXHRzZXRJbmRleCggaW5kZXggKSB7XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGluZGV4ICkgKSB7XG5cblx0XHRcdHRoaXMuaW5kZXggPSBuZXcgKCBhcnJheU5lZWRzVWludDMyKCBpbmRleCApID8gVWludDMyQnVmZmVyQXR0cmlidXRlIDogVWludDE2QnVmZmVyQXR0cmlidXRlICkoIGluZGV4LCAxICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0QXR0cmlidXRlKCBuYW1lICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc1sgbmFtZSBdO1xuXG5cdH1cblxuXHRzZXRBdHRyaWJ1dGUoIG5hbWUsIGF0dHJpYnV0ZSApIHtcblxuXHRcdHRoaXMuYXR0cmlidXRlc1sgbmFtZSBdID0gYXR0cmlidXRlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRlbGV0ZUF0dHJpYnV0ZSggbmFtZSApIHtcblxuXHRcdGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbIG5hbWUgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRoYXNBdHRyaWJ1dGUoIG5hbWUgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzWyBuYW1lIF0gIT09IHVuZGVmaW5lZDtcblxuXHR9XG5cblx0YWRkR3JvdXAoIHN0YXJ0LCBjb3VudCwgbWF0ZXJpYWxJbmRleCA9IDAgKSB7XG5cblx0XHR0aGlzLmdyb3Vwcy5wdXNoKCB7XG5cblx0XHRcdHN0YXJ0OiBzdGFydCxcblx0XHRcdGNvdW50OiBjb3VudCxcblx0XHRcdG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXhcblxuXHRcdH0gKTtcblxuXHR9XG5cblx0Y2xlYXJHcm91cHMoKSB7XG5cblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXG5cdH1cblxuXHRzZXREcmF3UmFuZ2UoIHN0YXJ0LCBjb3VudCApIHtcblxuXHRcdHRoaXMuZHJhd1JhbmdlLnN0YXJ0ID0gc3RhcnQ7XG5cdFx0dGhpcy5kcmF3UmFuZ2UuY291bnQgPSBjb3VudDtcblxuXHR9XG5cblx0YXBwbHlNYXRyaXg0KCBtYXRyaXggKSB7XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdGlmICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0cG9zaXRpb24uYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblxuXHRcdFx0cG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm9ybWFsID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcblxuXHRcdGlmICggbm9ybWFsICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IG5vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTtcblxuXHRcdFx0bm9ybWFsLmFwcGx5Tm9ybWFsTWF0cml4KCBub3JtYWxNYXRyaXggKTtcblxuXHRcdFx0bm9ybWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRhbmdlbnQgPSB0aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtcblxuXHRcdGlmICggdGFuZ2VudCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0YW5nZW50LnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICk7XG5cblx0XHRcdHRhbmdlbnQubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmJvdW5kaW5nQm94ICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGFwcGx5UXVhdGVybmlvbiggcSApIHtcblxuXHRcdF9tMS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZVgoIGFuZ2xlICkge1xuXG5cdFx0Ly8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB4LWF4aXNcblxuXHRcdF9tMS5tYWtlUm90YXRpb25YKCBhbmdsZSApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZVkoIGFuZ2xlICkge1xuXG5cdFx0Ly8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB5LWF4aXNcblxuXHRcdF9tMS5tYWtlUm90YXRpb25ZKCBhbmdsZSApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJvdGF0ZVooIGFuZ2xlICkge1xuXG5cdFx0Ly8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB6LWF4aXNcblxuXHRcdF9tMS5tYWtlUm90YXRpb25aKCBhbmdsZSApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zbGF0ZSggeCwgeSwgeiApIHtcblxuXHRcdC8vIHRyYW5zbGF0ZSBnZW9tZXRyeVxuXG5cdFx0X20xLm1ha2VUcmFuc2xhdGlvbiggeCwgeSwgeiApO1xuXG5cdFx0dGhpcy5hcHBseU1hdHJpeDQoIF9tMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNjYWxlKCB4LCB5LCB6ICkge1xuXG5cdFx0Ly8gc2NhbGUgZ2VvbWV0cnlcblxuXHRcdF9tMS5tYWtlU2NhbGUoIHgsIHksIHogKTtcblxuXHRcdHRoaXMuYXBwbHlNYXRyaXg0KCBfbTEgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRsb29rQXQoIHZlY3RvciApIHtcblxuXHRcdF9vYmoubG9va0F0KCB2ZWN0b3IgKTtcblxuXHRcdF9vYmoudXBkYXRlTWF0cml4KCk7XG5cblx0XHR0aGlzLmFwcGx5TWF0cml4NCggX29iai5tYXRyaXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjZW50ZXIoKSB7XG5cblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXG5cdFx0dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoIF9vZmZzZXQgKS5uZWdhdGUoKTtcblxuXHRcdHRoaXMudHJhbnNsYXRlKCBfb2Zmc2V0LngsIF9vZmZzZXQueSwgX29mZnNldC56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVBvaW50cyggcG9pbnRzICkge1xuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwb2ludCA9IHBvaW50c1sgaSBdO1xuXHRcdFx0cG9zaXRpb24ucHVzaCggcG9pbnQueCwgcG9pbnQueSwgcG9pbnQueiB8fCAwICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCAzICkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb21wdXRlQm91bmRpbmdCb3goKSB7XG5cblx0XHRpZiAoIHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm94MygpO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gPSB0aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdGlmICggcG9zaXRpb24gJiYgcG9zaXRpb24uaXNHTEJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0IFwibWVzaC5mcnVzdHVtQ3VsbGVkXCIgdG8gXCJmYWxzZVwiLicsIHRoaXMgKTtcblxuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5zZXQoXG5cdFx0XHRcdG5ldyBWZWN0b3IzKCAtIEluZmluaXR5LCAtIEluZmluaXR5LCAtIEluZmluaXR5ICksXG5cdFx0XHRcdG5ldyBWZWN0b3IzKCArIEluZmluaXR5LCArIEluZmluaXR5LCArIEluZmluaXR5IClcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApO1xuXG5cdFx0XHQvLyBwcm9jZXNzIG1vcnBoIGF0dHJpYnV0ZXMgaWYgcHJlc2VudFxuXG5cdFx0XHRpZiAoIG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25bIGkgXTtcblx0XHRcdFx0XHRfYm94JDEuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUgKTtcblxuXHRcdFx0XHRcdGlmICggdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSApIHtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnMoIHRoaXMuYm91bmRpbmdCb3gubWluLCBfYm94JDEubWluICk7XG5cdFx0XHRcdFx0XHR0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoIF92ZWN0b3IkOCApO1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkVmVjdG9ycyggdGhpcy5ib3VuZGluZ0JveC5tYXgsIF9ib3gkMS5tYXggKTtcblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCggX3ZlY3RvciQ4ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoIF9ib3gkMS5taW4gKTtcblx0XHRcdFx0XHRcdHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCggX2JveCQxLm1heCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTtcblxuXHRcdH1cblxuXHRcdGlmICggaXNOYU4oIHRoaXMuYm91bmRpbmdCb3gubWluLnggKSB8fCBpc05hTiggdGhpcy5ib3VuZGluZ0JveC5taW4ueSApIHx8IGlzTmFOKCB0aGlzLmJvdW5kaW5nQm94Lm1pbi56ICkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSBcInBvc2l0aW9uXCIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJywgdGhpcyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjb21wdXRlQm91bmRpbmdTcGhlcmUoKSB7XG5cblx0XHRpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBuZXcgU3BoZXJlKCk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKCBwb3NpdGlvbiAmJiBwb3NpdGlvbi5pc0dMQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgXCJtZXNoLmZydXN0dW1DdWxsZWRcIiB0byBcImZhbHNlXCIuJywgdGhpcyApO1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlLnNldCggbmV3IFZlY3RvcjMoKSwgSW5maW5pdHkgKTtcblxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwb3NpdGlvbiApIHtcblxuXHRcdFx0Ly8gZmlyc3QsIGZpbmQgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgc3BoZXJlXG5cblx0XHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO1xuXG5cdFx0XHRfYm94JDEuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24gKTtcblxuXHRcdFx0Ly8gcHJvY2VzcyBtb3JwaCBhdHRyaWJ1dGVzIGlmIHByZXNlbnRcblxuXHRcdFx0aWYgKCBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvbiApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uWyBpIF07XG5cdFx0XHRcdFx0X2JveE1vcnBoVGFyZ2V0cy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSApO1xuXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlICkge1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguYWRkVmVjdG9ycyggX2JveCQxLm1pbiwgX2JveE1vcnBoVGFyZ2V0cy5taW4gKTtcblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KCBfdmVjdG9yJDggKTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvciQ4LmFkZFZlY3RvcnMoIF9ib3gkMS5tYXgsIF9ib3hNb3JwaFRhcmdldHMubWF4ICk7XG5cdFx0XHRcdFx0XHRfYm94JDEuZXhwYW5kQnlQb2ludCggX3ZlY3RvciQ4ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRfYm94JDEuZXhwYW5kQnlQb2ludCggX2JveE1vcnBoVGFyZ2V0cy5taW4gKTtcblx0XHRcdFx0XHRcdF9ib3gkMS5leHBhbmRCeVBvaW50KCBfYm94TW9ycGhUYXJnZXRzLm1heCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRfYm94JDEuZ2V0Q2VudGVyKCBjZW50ZXIgKTtcblxuXHRcdFx0Ly8gc2Vjb25kLCB0cnkgdG8gZmluZCBhIGJvdW5kaW5nU3BoZXJlIHdpdGggYSByYWRpdXMgc21hbGxlciB0aGFuIHRoZVxuXHRcdFx0Ly8gYm91bmRpbmdTcGhlcmUgb2YgdGhlIGJvdW5kaW5nQm94OiBzcXJ0KDMpIHNtYWxsZXIgaW4gdGhlIGJlc3QgY2FzZVxuXG5cdFx0XHRsZXQgbWF4UmFkaXVzU3EgPSAwO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gcG9zaXRpb24uY291bnQ7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRfdmVjdG9yJDguZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGkgKTtcblxuXHRcdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KCBtYXhSYWRpdXNTcSwgY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCBfdmVjdG9yJDggKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2Nlc3MgbW9ycGggYXR0cmlidXRlcyBpZiBwcmVzZW50XG5cblx0XHRcdGlmICggbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvblsgaSBdO1xuXHRcdFx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMCwgamwgPSBtb3JwaEF0dHJpYnV0ZS5jb3VudDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yJDguZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUsIGogKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBtb3JwaFRhcmdldHNSZWxhdGl2ZSApIHtcblxuXHRcdFx0XHRcdFx0XHRfb2Zmc2V0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBqICk7XG5cdFx0XHRcdFx0XHRcdF92ZWN0b3IkOC5hZGQoIF9vZmZzZXQgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtYXhSYWRpdXNTcSA9IE1hdGgubWF4KCBtYXhSYWRpdXNTcSwgY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCBfdmVjdG9yJDggKSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTtcblxuXHRcdFx0aWYgKCBpc05hTiggdGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMgKSApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSBcInBvc2l0aW9uXCIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJywgdGhpcyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvbXB1dGVUYW5nZW50cygpIHtcblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gYmFzZWQgb24gaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vY29kZS90YW5nZW50Lmh0bWxcblx0XHQvLyAocGVyIHZlcnRleCB0YW5nZW50cylcblxuXHRcdGlmICggaW5kZXggPT09IG51bGwgfHxcblx0XHRcdCBhdHRyaWJ1dGVzLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHxcblx0XHRcdCBhdHRyaWJ1dGVzLm5vcm1hbCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHQgYXR0cmlidXRlcy51diA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IGluZGV4LmFycmF5O1xuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XG5cdFx0Y29uc3Qgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLmFycmF5O1xuXHRcdGNvbnN0IHV2cyA9IGF0dHJpYnV0ZXMudXYuYXJyYXk7XG5cblx0XHRjb25zdCBuVmVydGljZXMgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMztcblxuXHRcdGlmICggYXR0cmlidXRlcy50YW5nZW50ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndGFuZ2VudCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIDQgKiBuVmVydGljZXMgKSwgNCApICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC5hcnJheTtcblxuXHRcdGNvbnN0IHRhbjEgPSBbXSwgdGFuMiA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpICsrICkge1xuXG5cdFx0XHR0YW4xWyBpIF0gPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0dGFuMlsgaSBdID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHZBID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdHZCID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdHZDID0gbmV3IFZlY3RvcjMoKSxcblxuXHRcdFx0dXZBID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdHV2QiA9IG5ldyBWZWN0b3IyKCksXG5cdFx0XHR1dkMgPSBuZXcgVmVjdG9yMigpLFxuXG5cdFx0XHRzZGlyID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdHRkaXIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVHJpYW5nbGUoIGEsIGIsIGMgKSB7XG5cblx0XHRcdHZBLmZyb21BcnJheSggcG9zaXRpb25zLCBhICogMyApO1xuXHRcdFx0dkIuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGIgKiAzICk7XG5cdFx0XHR2Qy5mcm9tQXJyYXkoIHBvc2l0aW9ucywgYyAqIDMgKTtcblxuXHRcdFx0dXZBLmZyb21BcnJheSggdXZzLCBhICogMiApO1xuXHRcdFx0dXZCLmZyb21BcnJheSggdXZzLCBiICogMiApO1xuXHRcdFx0dXZDLmZyb21BcnJheSggdXZzLCBjICogMiApO1xuXG5cdFx0XHR2Qi5zdWIoIHZBICk7XG5cdFx0XHR2Qy5zdWIoIHZBICk7XG5cblx0XHRcdHV2Qi5zdWIoIHV2QSApO1xuXHRcdFx0dXZDLnN1YiggdXZBICk7XG5cblx0XHRcdGNvbnN0IHIgPSAxLjAgLyAoIHV2Qi54ICogdXZDLnkgLSB1dkMueCAqIHV2Qi55ICk7XG5cblx0XHRcdC8vIHNpbGVudGx5IGlnbm9yZSBkZWdlbmVyYXRlIHV2IHRyaWFuZ2xlcyBoYXZpbmcgY29pbmNpZGVudCBvciBjb2xpbmVhciB2ZXJ0aWNlc1xuXG5cdFx0XHRpZiAoICEgaXNGaW5pdGUoIHIgKSApIHJldHVybjtcblxuXHRcdFx0c2Rpci5jb3B5KCB2QiApLm11bHRpcGx5U2NhbGFyKCB1dkMueSApLmFkZFNjYWxlZFZlY3RvciggdkMsIC0gdXZCLnkgKS5tdWx0aXBseVNjYWxhciggciApO1xuXHRcdFx0dGRpci5jb3B5KCB2QyApLm11bHRpcGx5U2NhbGFyKCB1dkIueCApLmFkZFNjYWxlZFZlY3RvciggdkIsIC0gdXZDLnggKS5tdWx0aXBseVNjYWxhciggciApO1xuXG5cdFx0XHR0YW4xWyBhIF0uYWRkKCBzZGlyICk7XG5cdFx0XHR0YW4xWyBiIF0uYWRkKCBzZGlyICk7XG5cdFx0XHR0YW4xWyBjIF0uYWRkKCBzZGlyICk7XG5cblx0XHRcdHRhbjJbIGEgXS5hZGQoIHRkaXIgKTtcblx0XHRcdHRhbjJbIGIgXS5hZGQoIHRkaXIgKTtcblx0XHRcdHRhbjJbIGMgXS5hZGQoIHRkaXIgKTtcblxuXHRcdH1cblxuXHRcdGxldCBncm91cHMgPSB0aGlzLmdyb3VwcztcblxuXHRcdGlmICggZ3JvdXBzLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0Z3JvdXBzID0gWyB7XG5cdFx0XHRcdHN0YXJ0OiAwLFxuXHRcdFx0XHRjb3VudDogaW5kaWNlcy5sZW5ndGhcblx0XHRcdH0gXTtcblxuXHRcdH1cblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cblx0XHRcdGNvbnN0IHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRjb25zdCBjb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IHN0YXJ0LCBqbCA9IHN0YXJ0ICsgY291bnQ7IGogPCBqbDsgaiArPSAzICkge1xuXG5cdFx0XHRcdGhhbmRsZVRyaWFuZ2xlKFxuXHRcdFx0XHRcdGluZGljZXNbIGogKyAwIF0sXG5cdFx0XHRcdFx0aW5kaWNlc1sgaiArIDEgXSxcblx0XHRcdFx0XHRpbmRpY2VzWyBqICsgMiBdXG5cdFx0XHRcdCk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IHRtcCA9IG5ldyBWZWN0b3IzKCksIHRtcDIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG4gPSBuZXcgVmVjdG9yMygpLCBuMiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVWZXJ0ZXgoIHYgKSB7XG5cblx0XHRcdG4uZnJvbUFycmF5KCBub3JtYWxzLCB2ICogMyApO1xuXHRcdFx0bjIuY29weSggbiApO1xuXG5cdFx0XHRjb25zdCB0ID0gdGFuMVsgdiBdO1xuXG5cdFx0XHQvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxuXG5cdFx0XHR0bXAuY29weSggdCApO1xuXHRcdFx0dG1wLnN1Yiggbi5tdWx0aXBseVNjYWxhciggbi5kb3QoIHQgKSApICkubm9ybWFsaXplKCk7XG5cblx0XHRcdC8vIENhbGN1bGF0ZSBoYW5kZWRuZXNzXG5cblx0XHRcdHRtcDIuY3Jvc3NWZWN0b3JzKCBuMiwgdCApO1xuXHRcdFx0Y29uc3QgdGVzdCA9IHRtcDIuZG90KCB0YW4yWyB2IF0gKTtcblx0XHRcdGNvbnN0IHcgPSAoIHRlc3QgPCAwLjAgKSA/IC0gMS4wIDogMS4wO1xuXG5cdFx0XHR0YW5nZW50c1sgdiAqIDQgXSA9IHRtcC54O1xuXHRcdFx0dGFuZ2VudHNbIHYgKiA0ICsgMSBdID0gdG1wLnk7XG5cdFx0XHR0YW5nZW50c1sgdiAqIDQgKyAyIF0gPSB0bXAuejtcblx0XHRcdHRhbmdlbnRzWyB2ICogNCArIDMgXSA9IHc7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1sgaSBdO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IGdyb3VwLnN0YXJ0O1xuXHRcdFx0Y29uc3QgY291bnQgPSBncm91cC5jb3VudDtcblxuXHRcdFx0Zm9yICggbGV0IGogPSBzdGFydCwgamwgPSBzdGFydCArIGNvdW50OyBqIDwgamw7IGogKz0gMyApIHtcblxuXHRcdFx0XHRoYW5kbGVWZXJ0ZXgoIGluZGljZXNbIGogKyAwIF0gKTtcblx0XHRcdFx0aGFuZGxlVmVydGV4KCBpbmRpY2VzWyBqICsgMSBdICk7XG5cdFx0XHRcdGhhbmRsZVZlcnRleCggaW5kaWNlc1sgaiArIDIgXSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCkge1xuXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKTtcblxuXHRcdGlmICggcG9zaXRpb25BdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0bGV0IG5vcm1hbEF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCAnbm9ybWFsJyApO1xuXG5cdFx0XHRpZiAoIG5vcm1hbEF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZSA9IG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIHBvc2l0aW9uQXR0cmlidXRlLmNvdW50ICogMyApLCAzICk7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbm9ybWFsQXR0cmlidXRlICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gcmVzZXQgZXhpc3Rpbmcgbm9ybWFscyB0byB6ZXJvXG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IG5vcm1hbEF0dHJpYnV0ZS5jb3VudDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWiggaSwgMCwgMCwgMCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwQSA9IG5ldyBWZWN0b3IzKCksIHBCID0gbmV3IFZlY3RvcjMoKSwgcEMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgbkEgPSBuZXcgVmVjdG9yMygpLCBuQiA9IG5ldyBWZWN0b3IzKCksIG5DID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGNiID0gbmV3IFZlY3RvcjMoKSwgYWIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHQvLyBpbmRleGVkIGVsZW1lbnRzXG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGluZGV4LmNvdW50OyBpIDwgaWw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZBID0gaW5kZXguZ2V0WCggaSArIDAgKTtcblx0XHRcdFx0XHRjb25zdCB2QiA9IGluZGV4LmdldFgoIGkgKyAxICk7XG5cdFx0XHRcdFx0Y29uc3QgdkMgPSBpbmRleC5nZXRYKCBpICsgMiApO1xuXG5cdFx0XHRcdFx0cEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIHZBICk7XG5cdFx0XHRcdFx0cEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIHZCICk7XG5cdFx0XHRcdFx0cEMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIHZDICk7XG5cblx0XHRcdFx0XHRjYi5zdWJWZWN0b3JzKCBwQywgcEIgKTtcblx0XHRcdFx0XHRhYi5zdWJWZWN0b3JzKCBwQSwgcEIgKTtcblx0XHRcdFx0XHRjYi5jcm9zcyggYWIgKTtcblxuXHRcdFx0XHRcdG5BLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbEF0dHJpYnV0ZSwgdkEgKTtcblx0XHRcdFx0XHRuQi5mcm9tQnVmZmVyQXR0cmlidXRlKCBub3JtYWxBdHRyaWJ1dGUsIHZCICk7XG5cdFx0XHRcdFx0bkMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFsQXR0cmlidXRlLCB2QyApO1xuXG5cdFx0XHRcdFx0bkEuYWRkKCBjYiApO1xuXHRcdFx0XHRcdG5CLmFkZCggY2IgKTtcblx0XHRcdFx0XHRuQy5hZGQoIGNiICk7XG5cblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKCB2QSwgbkEueCwgbkEueSwgbkEueiApO1xuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVooIHZCLCBuQi54LCBuQi55LCBuQi56ICk7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWiggdkMsIG5DLngsIG5DLnksIG5DLnogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gbm9uLWluZGV4ZWQgZWxlbWVudHMgKHVuY29ubmVjdGVkIHRyaWFuZ2xlIHNvdXApXG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHBvc2l0aW9uQXR0cmlidXRlLmNvdW50OyBpIDwgaWw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdHBBLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMCApO1xuXHRcdFx0XHRcdHBCLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMSApO1xuXHRcdFx0XHRcdHBDLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICsgMiApO1xuXG5cdFx0XHRcdFx0Y2Iuc3ViVmVjdG9ycyggcEMsIHBCICk7XG5cdFx0XHRcdFx0YWIuc3ViVmVjdG9ycyggcEEsIHBCICk7XG5cdFx0XHRcdFx0Y2IuY3Jvc3MoIGFiICk7XG5cblx0XHRcdFx0XHRub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKCBpICsgMCwgY2IueCwgY2IueSwgY2IueiApO1xuXHRcdFx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVooIGkgKyAxLCBjYi54LCBjYi55LCBjYi56ICk7XG5cdFx0XHRcdFx0bm9ybWFsQXR0cmlidXRlLnNldFhZWiggaSArIDIsIGNiLngsIGNiLnksIGNiLnogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7XG5cblx0XHRcdG5vcm1hbEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdG1lcmdlKCBnZW9tZXRyeSwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCAhICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LicsIGdlb21ldHJ5ICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRvZmZzZXQgPSAwO1xuXG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuICdcblx0XHRcdFx0KyAnVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLidcblx0XHRcdCk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGlmICggZ2VvbWV0cnkuYXR0cmlidXRlc1sga2V5IF0gPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUxID0gYXR0cmlidXRlc1sga2V5IF07XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheTEgPSBhdHRyaWJ1dGUxLmFycmF5O1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1sga2V5IF07XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVBcnJheTIgPSBhdHRyaWJ1dGUyLmFycmF5O1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVPZmZzZXQgPSBhdHRyaWJ1dGUyLml0ZW1TaXplICogb2Zmc2V0O1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gTWF0aC5taW4oIGF0dHJpYnV0ZUFycmF5Mi5sZW5ndGgsIGF0dHJpYnV0ZUFycmF5MS5sZW5ndGggLSBhdHRyaWJ1dGVPZmZzZXQgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBqID0gYXR0cmlidXRlT2Zmc2V0OyBpIDwgbGVuZ3RoOyBpICsrLCBqICsrICkge1xuXG5cdFx0XHRcdGF0dHJpYnV0ZUFycmF5MVsgaiBdID0gYXR0cmlidXRlQXJyYXkyWyBpIF07XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRub3JtYWxpemVOb3JtYWxzKCkge1xuXG5cdFx0Y29uc3Qgbm9ybWFscyA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbm9ybWFscy5jb3VudDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRfdmVjdG9yJDguZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgaSApO1xuXG5cdFx0XHRfdmVjdG9yJDgubm9ybWFsaXplKCk7XG5cblx0XHRcdG5vcm1hbHMuc2V0WFlaKCBpLCBfdmVjdG9yJDgueCwgX3ZlY3RvciQ4LnksIF92ZWN0b3IkOC56ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvTm9uSW5kZXhlZCgpIHtcblxuXHRcdGZ1bmN0aW9uIGNvbnZlcnRCdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kaWNlcyApIHtcblxuXHRcdFx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7XG5cdFx0XHRjb25zdCBpdGVtU2l6ZSA9IGF0dHJpYnV0ZS5pdGVtU2l6ZTtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBhdHRyaWJ1dGUubm9ybWFsaXplZDtcblxuXHRcdFx0Y29uc3QgYXJyYXkyID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBpbmRpY2VzLmxlbmd0aCAqIGl0ZW1TaXplICk7XG5cblx0XHRcdGxldCBpbmRleCA9IDAsIGluZGV4MiA9IDA7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzWyBpIF0gKiBhdHRyaWJ1dGUuZGF0YS5zdHJpZGUgKyBhdHRyaWJ1dGUub2Zmc2V0O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRpbmRleCA9IGluZGljZXNbIGkgXSAqIGl0ZW1TaXplO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBpdGVtU2l6ZTsgaiArKyApIHtcblxuXHRcdFx0XHRcdGFycmF5MlsgaW5kZXgyICsrIF0gPSBhcnJheVsgaW5kZXggKysgXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGFycmF5MiwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpZiAoIHRoaXMuaW5kZXggPT09IG51bGwgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLicgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRjb25zdCBpbmRpY2VzID0gdGhpcy5pbmRleC5hcnJheTtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gYXR0cmlidXRlc1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBhdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWyBuYW1lIF07XG5cblx0XHRcdGNvbnN0IG5ld0F0dHJpYnV0ZSA9IGNvbnZlcnRCdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kaWNlcyApO1xuXG5cdFx0XHRnZW9tZXRyeTIuc2V0QXR0cmlidXRlKCBuYW1lLCBuZXdBdHRyaWJ1dGUgKTtcblxuXHRcdH1cblxuXHRcdC8vIG1vcnBoIGF0dHJpYnV0ZXNcblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IHRoaXMubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoQXJyYXkgPSBbXTtcblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF07IC8vIG1vcnBoQXR0cmlidXRlOiBhcnJheSBvZiBGbG9hdDMyQnVmZmVyQXR0cmlidXRlc1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVbIGkgXTtcblxuXHRcdFx0XHRjb25zdCBuZXdBdHRyaWJ1dGUgPSBjb252ZXJ0QnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGljZXMgKTtcblxuXHRcdFx0XHRtb3JwaEFycmF5LnB1c2goIG5ld0F0dHJpYnV0ZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGdlb21ldHJ5Mi5tb3JwaEF0dHJpYnV0ZXNbIG5hbWUgXSA9IG1vcnBoQXJyYXk7XG5cblx0XHR9XG5cblx0XHRnZW9tZXRyeTIubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXG5cdFx0Ly8gZ3JvdXBzXG5cblx0XHRjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwcztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1sgaSBdO1xuXHRcdFx0Z2VvbWV0cnkyLmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBnZW9tZXRyeTI7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdCdWZmZXJHZW9tZXRyeScsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ0J1ZmZlckdlb21ldHJ5LnRvSlNPTidcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gc3RhbmRhcmQgQnVmZmVyR2VvbWV0cnkgc2VyaWFsaXphdGlvblxuXG5cdFx0ZGF0YS51dWlkID0gdGhpcy51dWlkO1xuXHRcdGRhdGEudHlwZSA9IHRoaXMudHlwZTtcblx0XHRpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0aWYgKCBPYmplY3Qua2V5cyggdGhpcy51c2VyRGF0YSApLmxlbmd0aCA+IDAgKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTtcblxuXHRcdGlmICggdGhpcy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7XG5cblx0XHRcdGZvciAoIGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzICkge1xuXG5cdFx0XHRcdGlmICggcGFyYW1ldGVyc1sga2V5IF0gIT09IHVuZGVmaW5lZCApIGRhdGFbIGtleSBdID0gcGFyYW1ldGVyc1sga2V5IF07XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cblx0XHR9XG5cblx0XHQvLyBmb3Igc2ltcGxpY2l0eSB0aGUgY29kZSBhc3N1bWVzIGF0dHJpYnV0ZXMgYXJlIG5vdCBzaGFyZWQgYWNyb3NzIGdlb21ldHJpZXMsIHNlZSAjMTU4MTFcblxuXHRcdGRhdGEuZGF0YSA9IHsgYXR0cmlidXRlczoge30gfTtcblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcblxuXHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdGRhdGEuZGF0YS5pbmRleCA9IHtcblx0XHRcdFx0dHlwZTogaW5kZXguYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdFx0YXJyYXk6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBpbmRleC5hcnJheSApXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcblxuXHRcdGZvciAoIGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWyBrZXkgXTtcblxuXHRcdFx0ZGF0YS5kYXRhLmF0dHJpYnV0ZXNbIGtleSBdID0gYXR0cmlidXRlLnRvSlNPTiggZGF0YS5kYXRhICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHRsZXQgaGFzTW9ycGhBdHRyaWJ1dGVzID0gZmFsc2U7XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZUFycmF5ID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXNbIGtleSBdO1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlQXJyYXlbIGkgXTtcblxuXHRcdFx0XHRhcnJheS5wdXNoKCBhdHRyaWJ1dGUudG9KU09OKCBkYXRhLmRhdGEgKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggYXJyYXkubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRtb3JwaEF0dHJpYnV0ZXNbIGtleSBdID0gYXJyYXk7XG5cblx0XHRcdFx0aGFzTW9ycGhBdHRyaWJ1dGVzID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBoYXNNb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGRhdGEuZGF0YS5tb3JwaEF0dHJpYnV0ZXMgPSBtb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRkYXRhLmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUgPSB0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHM7XG5cblx0XHRpZiAoIGdyb3Vwcy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRkYXRhLmRhdGEuZ3JvdXBzID0gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdpZnkoIGdyb3VwcyApICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBib3VuZGluZ1NwaGVyZSA9IHRoaXMuYm91bmRpbmdTcGhlcmU7XG5cblx0XHRpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkge1xuXG5cdFx0XHRkYXRhLmRhdGEuYm91bmRpbmdTcGhlcmUgPSB7XG5cdFx0XHRcdGNlbnRlcjogYm91bmRpbmdTcGhlcmUuY2VudGVyLnRvQXJyYXkoKSxcblx0XHRcdFx0cmFkaXVzOiBib3VuZGluZ1NwaGVyZS5yYWRpdXNcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHQgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHQvLyByZXNldFxuXG5cdFx0dGhpcy5pbmRleCA9IG51bGw7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzID0ge307XG5cdFx0dGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTtcblx0XHR0aGlzLmdyb3VwcyA9IFtdO1xuXHRcdHRoaXMuYm91bmRpbmdCb3ggPSBudWxsO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBudWxsO1xuXG5cdFx0Ly8gdXNlZCBmb3Igc3RvcmluZyBjbG9uZWQsIHNoYXJlZCBkYXRhXG5cblx0XHRjb25zdCBkYXRhID0ge307XG5cblx0XHQvLyBuYW1lXG5cblx0XHR0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcblxuXHRcdC8vIGluZGV4XG5cblx0XHRjb25zdCBpbmRleCA9IHNvdXJjZS5pbmRleDtcblxuXHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuc2V0SW5kZXgoIGluZGV4LmNsb25lKCBkYXRhICkgKTtcblxuXHRcdH1cblxuXHRcdC8vIGF0dHJpYnV0ZXNcblxuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBzb3VyY2UuYXR0cmlidXRlcztcblxuXHRcdGZvciAoIGNvbnN0IG5hbWUgaW4gYXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1sgbmFtZSBdO1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIG5hbWUsIGF0dHJpYnV0ZS5jbG9uZSggZGF0YSApICk7XG5cblx0XHR9XG5cblx0XHQvLyBtb3JwaCBhdHRyaWJ1dGVzXG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBzb3VyY2UubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sgbmFtZSBdOyAvLyBtb3JwaEF0dHJpYnV0ZTogYXJyYXkgb2YgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZXNcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRhcnJheS5wdXNoKCBtb3JwaEF0dHJpYnV0ZVsgaSBdLmNsb25lKCBkYXRhICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm1vcnBoQXR0cmlidXRlc1sgbmFtZSBdID0gYXJyYXk7XG5cblx0XHR9XG5cblx0XHR0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gc291cmNlLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO1xuXG5cdFx0Ly8gZ3JvdXBzXG5cblx0XHRjb25zdCBncm91cHMgPSBzb3VyY2UuZ3JvdXBzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cdFx0XHR0aGlzLmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTtcblxuXHRcdH1cblxuXHRcdC8vIGJvdW5kaW5nIGJveFxuXG5cdFx0Y29uc3QgYm91bmRpbmdCb3ggPSBzb3VyY2UuYm91bmRpbmdCb3g7XG5cblx0XHRpZiAoIGJvdW5kaW5nQm94ICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3guY2xvbmUoKTtcblxuXHRcdH1cblxuXHRcdC8vIGJvdW5kaW5nIHNwaGVyZVxuXG5cdFx0Y29uc3QgYm91bmRpbmdTcGhlcmUgPSBzb3VyY2UuYm91bmRpbmdTcGhlcmU7XG5cblx0XHRpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gYm91bmRpbmdTcGhlcmUuY2xvbmUoKTtcblxuXHRcdH1cblxuXHRcdC8vIGRyYXcgcmFuZ2VcblxuXHRcdHRoaXMuZHJhd1JhbmdlLnN0YXJ0ID0gc291cmNlLmRyYXdSYW5nZS5zdGFydDtcblx0XHR0aGlzLmRyYXdSYW5nZS5jb3VudCA9IHNvdXJjZS5kcmF3UmFuZ2UuY291bnQ7XG5cblx0XHQvLyB1c2VyIGRhdGFcblxuXHRcdHRoaXMudXNlckRhdGEgPSBzb3VyY2UudXNlckRhdGE7XG5cblx0XHQvLyBnZW9tZXRyeSBnZW5lcmF0b3IgcGFyYW1ldGVyc1xuXG5cdFx0aWYgKCBzb3VyY2UucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICkgdGhpcy5wYXJhbWV0ZXJzID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS5wYXJhbWV0ZXJzICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApO1xuXG5cdH1cblxufVxuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeSA9IHRydWU7XG5cbmNvbnN0IF9pbnZlcnNlTWF0cml4JDIgPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcmF5JDIgPSAvKkBfX1BVUkVfXyovIG5ldyBSYXkoKTtcbmNvbnN0IF9zcGhlcmUkMyA9IC8qQF9fUFVSRV9fKi8gbmV3IFNwaGVyZSgpO1xuXG5jb25zdCBfdkEkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF92QiQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZDJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF90ZW1wQSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90ZW1wQiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF90ZW1wQyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgX21vcnBoQSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9tb3JwaEIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbW9ycGhDID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdXZBJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5jb25zdCBfdXZCJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5jb25zdCBfdXZDJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5cbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBNZXNoIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLCBtYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCgpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoJztcblxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cblx0XHR0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdGlmICggc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IHNvdXJjZS5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKTtcblxuXHRcdH1cblxuXHRcdGlmICggc291cmNlLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UubW9ycGhUYXJnZXREaWN0aW9uYXJ5ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVyaWFsO1xuXHRcdHRoaXMuZ2VvbWV0cnkgPSBzb3VyY2UuZ2VvbWV0cnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dXBkYXRlTW9ycGhUYXJnZXRzKCkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoIG1vcnBoQXR0cmlidXRlcyApO1xuXG5cdFx0XHRpZiAoIGtleXMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sga2V5c1sgMCBdIF07XG5cblx0XHRcdFx0aWYgKCBtb3JwaEF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBbXTtcblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IG0gPSAwLCBtbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lID0gbW9ycGhBdHRyaWJ1dGVbIG0gXS5uYW1lIHx8IFN0cmluZyggbSApO1xuXG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKCAwICk7XG5cdFx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVsgbmFtZSBdID0gbTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cztcblxuXHRcdFx0aWYgKCBtb3JwaFRhcmdldHMgIT09IHVuZGVmaW5lZCAmJiBtb3JwaFRhcmdldHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRyYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblxuXHRcdGlmICggbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheVxuXG5cdFx0aWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZSQzLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICk7XG5cdFx0X3NwaGVyZSQzLmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQgKTtcblxuXHRcdGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBfc3BoZXJlJDMgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHQvL1xuXG5cdFx0X2ludmVyc2VNYXRyaXgkMi5jb3B5KCBtYXRyaXhXb3JsZCApLmludmVydCgpO1xuXHRcdF9yYXkkMi5jb3B5KCByYXljYXN0ZXIucmF5ICkuYXBwbHlNYXRyaXg0KCBfaW52ZXJzZU1hdHJpeCQyICk7XG5cblx0XHQvLyBDaGVjayBib3VuZGluZ0JveCBiZWZvcmUgY29udGludWluZ1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHtcblxuXHRcdFx0aWYgKCBfcmF5JDIuaW50ZXJzZWN0c0JveCggZ2VvbWV0cnkuYm91bmRpbmdCb3ggKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHR9XG5cblx0XHRsZXQgaW50ZXJzZWN0aW9uO1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zdCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgbW9ycGhQb3NpdGlvbiA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cdFx0XHRjb25zdCB1diA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudXY7XG5cdFx0XHRjb25zdCB1djIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2Mjtcblx0XHRcdGNvbnN0IGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3Vwcztcblx0XHRcdGNvbnN0IGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZTtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHQvLyBpbmRleGVkIGJ1ZmZlciBnZW9tZXRyeVxuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKSApIHtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbIGdyb3VwLm1hdGVyaWFsSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydCApO1xuXHRcdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIGluZGV4LmNvdW50LCBNYXRoLm1pbiggKCBncm91cC5zdGFydCArIGdyb3VwLmNvdW50ICksICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKSApO1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IHN0YXJ0LCBqbCA9IGVuZDsgaiA8IGpsOyBqICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgYSA9IGluZGV4LmdldFgoIGogKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYiA9IGluZGV4LmdldFgoIGogKyAxICk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGMgPSBpbmRleC5nZXRYKCBqICsgMiApO1xuXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oIHRoaXMsIGdyb3VwTWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMgKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIGludGVyc2VjdGlvbiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKCBqIC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gaW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2UubWF0ZXJpYWxJbmRleCA9IGdyb3VwLm1hdGVyaWFsSW5kZXg7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIGluZGV4LmNvdW50LCAoIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleC5nZXRYKCBpICk7XG5cdFx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXguZ2V0WCggaSArIDEgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGMgPSBpbmRleC5nZXRYKCBpICsgMiApO1xuXG5cdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCBfcmF5JDIsIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCBtb3JwaFRhcmdldHNSZWxhdGl2ZSwgdXYsIHV2MiwgYSwgYiwgYyApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGludGVyc2VjdGlvbiApIHtcblxuXHRcdFx0XHRcdFx0XHRpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vciggaSAvIDMgKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXHRcdFx0XHRcdFx0XHRpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdGlvbiApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIG5vbi1pbmRleGVkIGJ1ZmZlciBnZW9tZXRyeVxuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKSApIHtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbIGdyb3VwLm1hdGVyaWFsSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydCApO1xuXHRcdFx0XHRcdFx0Y29uc3QgZW5kID0gTWF0aC5taW4oIHBvc2l0aW9uLmNvdW50LCBNYXRoLm1pbiggKCBncm91cC5zdGFydCArIGdyb3VwLmNvdW50ICksICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKSApO1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IHN0YXJ0LCBqbCA9IGVuZDsgaiA8IGpsOyBqICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgYSA9IGo7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGIgPSBqICsgMTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYyA9IGogKyAyO1xuXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oIHRoaXMsIGdyb3VwTWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMgKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIGludGVyc2VjdGlvbiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKCBqIC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdGlvbi5mYWNlLm1hdGVyaWFsSW5kZXggPSBncm91cC5tYXRlcmlhbEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoIDAsIGRyYXdSYW5nZS5zdGFydCApO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKCBwb3NpdGlvbi5jb3VudCwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhID0gaTtcblx0XHRcdFx0XHRcdGNvbnN0IGIgPSBpICsgMTtcblx0XHRcdFx0XHRcdGNvbnN0IGMgPSBpICsgMjtcblxuXHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgbWF0ZXJpYWwsIHJheWNhc3RlciwgX3JheSQyLCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgbW9ycGhUYXJnZXRzUmVsYXRpdmUsIHV2LCB1djIsIGEsIGIsIGMgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBpbnRlcnNlY3Rpb24gKSB7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBub24taW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXG5cdFx0XHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuTWVzaC5wcm90b3R5cGUuaXNNZXNoID0gdHJ1ZTtcblxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwQSwgcEIsIHBDLCBwb2ludCApIHtcblxuXHRsZXQgaW50ZXJzZWN0O1xuXG5cdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB7XG5cblx0XHRpbnRlcnNlY3QgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUoIHBDLCBwQiwgcEEsIHRydWUsIHBvaW50ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSggcEEsIHBCLCBwQywgbWF0ZXJpYWwuc2lkZSAhPT0gRG91YmxlU2lkZSwgcG9pbnQgKTtcblxuXHR9XG5cblx0aWYgKCBpbnRlcnNlY3QgPT09IG51bGwgKSByZXR1cm4gbnVsbDtcblxuXHRfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5jb3B5KCBwb2ludCApO1xuXHRfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXG5cdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggX2ludGVyc2VjdGlvblBvaW50V29ybGQgKTtcblxuXHRpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgcmV0dXJuIG51bGw7XG5cblx0cmV0dXJuIHtcblx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0cG9pbnQ6IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNsb25lKCksXG5cdFx0b2JqZWN0OiBvYmplY3Rcblx0fTtcblxufVxuXG5mdW5jdGlvbiBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCBvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcG9zaXRpb24sIG1vcnBoUG9zaXRpb24sIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLCB1diwgdXYyLCBhLCBiLCBjICkge1xuXG5cdF92QSQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBhICk7XG5cdF92QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBiICk7XG5cdF92QyQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBjICk7XG5cblx0Y29uc3QgbW9ycGhJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztcblxuXHRpZiAoIG1vcnBoUG9zaXRpb24gJiYgbW9ycGhJbmZsdWVuY2VzICkge1xuXG5cdFx0X21vcnBoQS5zZXQoIDAsIDAsIDAgKTtcblx0XHRfbW9ycGhCLnNldCggMCwgMCwgMCApO1xuXHRcdF9tb3JwaEMuc2V0KCAwLCAwLCAwICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbW9ycGhQb3NpdGlvbi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoUG9zaXRpb25bIGkgXTtcblxuXHRcdFx0aWYgKCBpbmZsdWVuY2UgPT09IDAgKSBjb250aW51ZTtcblxuXHRcdFx0X3RlbXBBLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG1vcnBoQXR0cmlidXRlLCBhICk7XG5cdFx0XHRfdGVtcEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUsIGIgKTtcblx0XHRcdF90ZW1wQy5mcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSwgYyApO1xuXG5cdFx0XHRpZiAoIG1vcnBoVGFyZ2V0c1JlbGF0aXZlICkge1xuXG5cdFx0XHRcdF9tb3JwaEEuYWRkU2NhbGVkVmVjdG9yKCBfdGVtcEEsIGluZmx1ZW5jZSApO1xuXHRcdFx0XHRfbW9ycGhCLmFkZFNjYWxlZFZlY3RvciggX3RlbXBCLCBpbmZsdWVuY2UgKTtcblx0XHRcdFx0X21vcnBoQy5hZGRTY2FsZWRWZWN0b3IoIF90ZW1wQywgaW5mbHVlbmNlICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X21vcnBoQS5hZGRTY2FsZWRWZWN0b3IoIF90ZW1wQS5zdWIoIF92QSQxICksIGluZmx1ZW5jZSApO1xuXHRcdFx0XHRfbW9ycGhCLmFkZFNjYWxlZFZlY3RvciggX3RlbXBCLnN1YiggX3ZCJDEgKSwgaW5mbHVlbmNlICk7XG5cdFx0XHRcdF9tb3JwaEMuYWRkU2NhbGVkVmVjdG9yKCBfdGVtcEMuc3ViKCBfdkMkMSApLCBpbmZsdWVuY2UgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0X3ZBJDEuYWRkKCBfbW9ycGhBICk7XG5cdFx0X3ZCJDEuYWRkKCBfbW9ycGhCICk7XG5cdFx0X3ZDJDEuYWRkKCBfbW9ycGhDICk7XG5cblx0fVxuXG5cdGlmICggb2JqZWN0LmlzU2tpbm5lZE1lc2ggKSB7XG5cblx0XHRvYmplY3QuYm9uZVRyYW5zZm9ybSggYSwgX3ZBJDEgKTtcblx0XHRvYmplY3QuYm9uZVRyYW5zZm9ybSggYiwgX3ZCJDEgKTtcblx0XHRvYmplY3QuYm9uZVRyYW5zZm9ybSggYywgX3ZDJDEgKTtcblxuXHR9XG5cblx0Y29uc3QgaW50ZXJzZWN0aW9uID0gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBfdkEkMSwgX3ZCJDEsIF92QyQxLCBfaW50ZXJzZWN0aW9uUG9pbnQgKTtcblxuXHRpZiAoIGludGVyc2VjdGlvbiApIHtcblxuXHRcdGlmICggdXYgKSB7XG5cblx0XHRcdF91dkEkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB1diwgYSApO1xuXHRcdFx0X3V2QiQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHV2LCBiICk7XG5cdFx0XHRfdXZDJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggdXYsIGMgKTtcblxuXHRcdFx0aW50ZXJzZWN0aW9uLnV2ID0gVHJpYW5nbGUuZ2V0VVYoIF9pbnRlcnNlY3Rpb25Qb2ludCwgX3ZBJDEsIF92QiQxLCBfdkMkMSwgX3V2QSQxLCBfdXZCJDEsIF91dkMkMSwgbmV3IFZlY3RvcjIoKSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1djIgKSB7XG5cblx0XHRcdF91dkEkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB1djIsIGEgKTtcblx0XHRcdF91dkIkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB1djIsIGIgKTtcblx0XHRcdF91dkMkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCB1djIsIGMgKTtcblxuXHRcdFx0aW50ZXJzZWN0aW9uLnV2MiA9IFRyaWFuZ2xlLmdldFVWKCBfaW50ZXJzZWN0aW9uUG9pbnQsIF92QSQxLCBfdkIkMSwgX3ZDJDEsIF91dkEkMSwgX3V2QiQxLCBfdXZDJDEsIG5ldyBWZWN0b3IyKCkgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGZhY2UgPSB7XG5cdFx0XHRhOiBhLFxuXHRcdFx0YjogYixcblx0XHRcdGM6IGMsXG5cdFx0XHRub3JtYWw6IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRtYXRlcmlhbEluZGV4OiAwXG5cdFx0fTtcblxuXHRcdFRyaWFuZ2xlLmdldE5vcm1hbCggX3ZBJDEsIF92QiQxLCBfdkMkMSwgZmFjZS5ub3JtYWwgKTtcblxuXHRcdGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTtcblxuXHR9XG5cblx0cmV0dXJuIGludGVyc2VjdGlvbjtcblxufVxuXG5jbGFzcyBCb3hHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3Rvciggd2lkdGggPSAxLCBoZWlnaHQgPSAxLCBkZXB0aCA9IDEsIHdpZHRoU2VnbWVudHMgPSAxLCBoZWlnaHRTZWdtZW50cyA9IDEsIGRlcHRoU2VnbWVudHMgPSAxICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdCb3hHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHR3aWR0aDogd2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdGRlcHRoOiBkZXB0aCxcblx0XHRcdHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRkZXB0aFNlZ21lbnRzOiBkZXB0aFNlZ21lbnRzXG5cdFx0fTtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdC8vIHNlZ21lbnRzXG5cblx0XHR3aWR0aFNlZ21lbnRzID0gTWF0aC5mbG9vciggd2lkdGhTZWdtZW50cyApO1xuXHRcdGhlaWdodFNlZ21lbnRzID0gTWF0aC5mbG9vciggaGVpZ2h0U2VnbWVudHMgKTtcblx0XHRkZXB0aFNlZ21lbnRzID0gTWF0aC5mbG9vciggZGVwdGhTZWdtZW50cyApO1xuXG5cdFx0Ly8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0bGV0IG51bWJlck9mVmVydGljZXMgPSAwO1xuXHRcdGxldCBncm91cFN0YXJ0ID0gMDtcblxuXHRcdC8vIGJ1aWxkIGVhY2ggc2lkZSBvZiB0aGUgYm94IGdlb21ldHJ5XG5cblx0XHRidWlsZFBsYW5lKCAneicsICd5JywgJ3gnLCAtIDEsIC0gMSwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGRlcHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCAwICk7IC8vIHB4XG5cdFx0YnVpbGRQbGFuZSggJ3onLCAneScsICd4JywgMSwgLSAxLCBkZXB0aCwgaGVpZ2h0LCAtIHdpZHRoLCBkZXB0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgMSApOyAvLyBueFxuXHRcdGJ1aWxkUGxhbmUoICd4JywgJ3onLCAneScsIDEsIDEsIHdpZHRoLCBkZXB0aCwgaGVpZ2h0LCB3aWR0aFNlZ21lbnRzLCBkZXB0aFNlZ21lbnRzLCAyICk7IC8vIHB5XG5cdFx0YnVpbGRQbGFuZSggJ3gnLCAneicsICd5JywgMSwgLSAxLCB3aWR0aCwgZGVwdGgsIC0gaGVpZ2h0LCB3aWR0aFNlZ21lbnRzLCBkZXB0aFNlZ21lbnRzLCAzICk7IC8vIG55XG5cdFx0YnVpbGRQbGFuZSggJ3gnLCAneScsICd6JywgMSwgLSAxLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIDQgKTsgLy8gcHpcblx0XHRidWlsZFBsYW5lKCAneCcsICd5JywgJ3onLCAtIDEsIC0gMSwgd2lkdGgsIGhlaWdodCwgLSBkZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIDUgKTsgLy8gbnpcblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdFx0ZnVuY3Rpb24gYnVpbGRQbGFuZSggdSwgdiwgdywgdWRpciwgdmRpciwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdyaWRYLCBncmlkWSwgbWF0ZXJpYWxJbmRleCApIHtcblxuXHRcdFx0Y29uc3Qgc2VnbWVudFdpZHRoID0gd2lkdGggLyBncmlkWDtcblx0XHRcdGNvbnN0IHNlZ21lbnRIZWlnaHQgPSBoZWlnaHQgLyBncmlkWTtcblxuXHRcdFx0Y29uc3Qgd2lkdGhIYWxmID0gd2lkdGggLyAyO1xuXHRcdFx0Y29uc3QgaGVpZ2h0SGFsZiA9IGhlaWdodCAvIDI7XG5cdFx0XHRjb25zdCBkZXB0aEhhbGYgPSBkZXB0aCAvIDI7XG5cblx0XHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcblx0XHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcblxuXHRcdFx0bGV0IHZlcnRleENvdW50ZXIgPSAwO1xuXHRcdFx0bGV0IGdyb3VwQ291bnQgPSAwO1xuXG5cdFx0XHRjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHQvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRcdGZvciAoIGxldCBpeSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50SGVpZ2h0IC0gaGVpZ2h0SGFsZjtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXggKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB4ID0gaXggKiBzZWdtZW50V2lkdGggLSB3aWR0aEhhbGY7XG5cblx0XHRcdFx0XHQvLyBzZXQgdmFsdWVzIHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudFxuXG5cdFx0XHRcdFx0dmVjdG9yWyB1IF0gPSB4ICogdWRpcjtcblx0XHRcdFx0XHR2ZWN0b3JbIHYgXSA9IHkgKiB2ZGlyO1xuXHRcdFx0XHRcdHZlY3RvclsgdyBdID0gZGVwdGhIYWxmO1xuXG5cdFx0XHRcdFx0Ly8gbm93IGFwcGx5IHZlY3RvciB0byB2ZXJ0ZXggYnVmZmVyXG5cblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56ICk7XG5cblx0XHRcdFx0XHQvLyBzZXQgdmFsdWVzIHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudFxuXG5cdFx0XHRcdFx0dmVjdG9yWyB1IF0gPSAwO1xuXHRcdFx0XHRcdHZlY3RvclsgdiBdID0gMDtcblx0XHRcdFx0XHR2ZWN0b3JbIHcgXSA9IGRlcHRoID4gMCA/IDEgOiAtIDE7XG5cblx0XHRcdFx0XHQvLyBub3cgYXBwbHkgdmVjdG9yIHRvIG5vcm1hbCBidWZmZXJcblxuXHRcdFx0XHRcdG5vcm1hbHMucHVzaCggdmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3IueiApO1xuXG5cdFx0XHRcdFx0Ly8gdXZzXG5cblx0XHRcdFx0XHR1dnMucHVzaCggaXggLyBncmlkWCApO1xuXHRcdFx0XHRcdHV2cy5wdXNoKCAxIC0gKCBpeSAvIGdyaWRZICkgKTtcblxuXHRcdFx0XHRcdC8vIGNvdW50ZXJzXG5cblx0XHRcdFx0XHR2ZXJ0ZXhDb3VudGVyICs9IDE7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGluZGljZXNcblxuXHRcdFx0Ly8gMS4geW91IG5lZWQgdGhyZWUgaW5kaWNlcyB0byBkcmF3IGEgc2luZ2xlIGZhY2Vcblx0XHRcdC8vIDIuIGEgc2luZ2xlIHNlZ21lbnQgY29uc2lzdHMgb2YgdHdvIGZhY2VzXG5cdFx0XHQvLyAzLiBzbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHNpeCAoMiozKSBpbmRpY2VzIHBlciBzZWdtZW50XG5cblx0XHRcdGZvciAoIGxldCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5ICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpeCA9IDA7IGl4IDwgZ3JpZFg7IGl4ICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYSA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRYMSAqIGl5O1xuXHRcdFx0XHRcdGNvbnN0IGIgPSBudW1iZXJPZlZlcnRpY2VzICsgaXggKyBncmlkWDEgKiAoIGl5ICsgMSApO1xuXHRcdFx0XHRcdGNvbnN0IGMgPSBudW1iZXJPZlZlcnRpY2VzICsgKCBpeCArIDEgKSArIGdyaWRYMSAqICggaXkgKyAxICk7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IG51bWJlck9mVmVydGljZXMgKyAoIGl4ICsgMSApICsgZ3JpZFgxICogaXk7XG5cblx0XHRcdFx0XHQvLyBmYWNlc1xuXG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdFx0XHQvLyBpbmNyZWFzZSBjb3VudGVyXG5cblx0XHRcdFx0XHRncm91cENvdW50ICs9IDY7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0XG5cblx0XHRcdHNjb3BlLmFkZEdyb3VwKCBncm91cFN0YXJ0LCBncm91cENvdW50LCBtYXRlcmlhbEluZGV4ICk7XG5cblx0XHRcdC8vIGNhbGN1bGF0ZSBuZXcgc3RhcnQgdmFsdWUgZm9yIGdyb3Vwc1xuXG5cdFx0XHRncm91cFN0YXJ0ICs9IGdyb3VwQ291bnQ7XG5cblx0XHRcdC8vIHVwZGF0ZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXNcblxuXHRcdFx0bnVtYmVyT2ZWZXJ0aWNlcyArPSB2ZXJ0ZXhDb3VudGVyO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IEJveEdlb21ldHJ5KCBkYXRhLndpZHRoLCBkYXRhLmhlaWdodCwgZGF0YS5kZXB0aCwgZGF0YS53aWR0aFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzLCBkYXRhLmRlcHRoU2VnbWVudHMgKTtcblxuXHR9XG5cbn1cblxuLyoqXG4gKiBVbmlmb3JtIFV0aWxpdGllc1xuICovXG5cbmZ1bmN0aW9uIGNsb25lVW5pZm9ybXMoIHNyYyApIHtcblxuXHRjb25zdCBkc3QgPSB7fTtcblxuXHRmb3IgKCBjb25zdCB1IGluIHNyYyApIHtcblxuXHRcdGRzdFsgdSBdID0ge307XG5cblx0XHRmb3IgKCBjb25zdCBwIGluIHNyY1sgdSBdICkge1xuXG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IHNyY1sgdSBdWyBwIF07XG5cblx0XHRcdGlmICggcHJvcGVydHkgJiYgKCBwcm9wZXJ0eS5pc0NvbG9yIHx8XG5cdFx0XHRcdHByb3BlcnR5LmlzTWF0cml4MyB8fCBwcm9wZXJ0eS5pc01hdHJpeDQgfHxcblx0XHRcdFx0cHJvcGVydHkuaXNWZWN0b3IyIHx8IHByb3BlcnR5LmlzVmVjdG9yMyB8fCBwcm9wZXJ0eS5pc1ZlY3RvcjQgfHxcblx0XHRcdFx0cHJvcGVydHkuaXNUZXh0dXJlIHx8IHByb3BlcnR5LmlzUXVhdGVybmlvbiApICkge1xuXG5cdFx0XHRcdGRzdFsgdSBdWyBwIF0gPSBwcm9wZXJ0eS5jbG9uZSgpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCBwcm9wZXJ0eSApICkge1xuXG5cdFx0XHRcdGRzdFsgdSBdWyBwIF0gPSBwcm9wZXJ0eS5zbGljZSgpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGRzdFsgdSBdWyBwIF0gPSBwcm9wZXJ0eTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gZHN0O1xuXG59XG5cbmZ1bmN0aW9uIG1lcmdlVW5pZm9ybXMoIHVuaWZvcm1zICkge1xuXG5cdGNvbnN0IG1lcmdlZCA9IHt9O1xuXG5cdGZvciAoIGxldCB1ID0gMDsgdSA8IHVuaWZvcm1zLmxlbmd0aDsgdSArKyApIHtcblxuXHRcdGNvbnN0IHRtcCA9IGNsb25lVW5pZm9ybXMoIHVuaWZvcm1zWyB1IF0gKTtcblxuXHRcdGZvciAoIGNvbnN0IHAgaW4gdG1wICkge1xuXG5cdFx0XHRtZXJnZWRbIHAgXSA9IHRtcFsgcCBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gbWVyZ2VkO1xuXG59XG5cbi8vIExlZ2FjeVxuXG5jb25zdCBVbmlmb3Jtc1V0aWxzID0geyBjbG9uZTogY2xvbmVVbmlmb3JtcywgbWVyZ2U6IG1lcmdlVW5pZm9ybXMgfTtcblxudmFyIGRlZmF1bHRfdmVydGV4ID0gXCJ2b2lkIG1haW4oKSB7XFxuXFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xcbn1cIjtcblxudmFyIGRlZmF1bHRfZnJhZ21lbnQgPSBcInZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcXG59XCI7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBkZWZpbmVzOiB7IFwibGFiZWxcIiA6IFwidmFsdWVcIiB9LFxuICogIHVuaWZvcm1zOiB7IFwicGFyYW1ldGVyMVwiOiB7IHZhbHVlOiAxLjAgfSwgXCJwYXJhbWV0ZXIyXCI6IHsgdmFsdWUyOiAyIH0gfSxcbiAqXG4gKiAgZnJhZ21lbnRTaGFkZXI6IDxzdHJpbmc+LFxuICogIHZlcnRleFNoYWRlcjogPHN0cmluZz4sXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiAgbGlnaHRzOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBTaGFkZXJNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU2hhZGVyTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0ge307XG5cdFx0dGhpcy51bmlmb3JtcyA9IHt9O1xuXG5cdFx0dGhpcy52ZXJ0ZXhTaGFkZXIgPSBkZWZhdWx0X3ZlcnRleDtcblx0XHR0aGlzLmZyYWdtZW50U2hhZGVyID0gZGVmYXVsdF9mcmFnbWVudDtcblxuXHRcdHRoaXMubGluZXdpZHRoID0gMTtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXG5cdFx0dGhpcy5mb2cgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSBzY2VuZSBmb2dcblx0XHR0aGlzLmxpZ2h0cyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNjZW5lIGxpZ2h0c1xuXHRcdHRoaXMuY2xpcHBpbmcgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSB1c2VyLWRlZmluZWQgY2xpcHBpbmcgcGxhbmVzXG5cblx0XHR0aGlzLmV4dGVuc2lvbnMgPSB7XG5cdFx0XHRkZXJpdmF0aXZlczogZmFsc2UsIC8vIHNldCB0byB1c2UgZGVyaXZhdGl2ZXNcblx0XHRcdGZyYWdEZXB0aDogZmFsc2UsIC8vIHNldCB0byB1c2UgZnJhZ21lbnQgZGVwdGggdmFsdWVzXG5cdFx0XHRkcmF3QnVmZmVyczogZmFsc2UsIC8vIHNldCB0byB1c2UgZHJhdyBidWZmZXJzXG5cdFx0XHRzaGFkZXJUZXh0dXJlTE9EOiBmYWxzZSAvLyBzZXQgdG8gdXNlIHNoYWRlciB0ZXh0dXJlIExPRFxuXHRcdH07XG5cblx0XHQvLyBXaGVuIHJlbmRlcmVkIGdlb21ldHJ5IGRvZXNuJ3QgaW5jbHVkZSB0aGVzZSBhdHRyaWJ1dGVzIGJ1dCB0aGUgbWF0ZXJpYWwgZG9lcyxcblx0XHQvLyB1c2UgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgaW4gV2ViR0wuIFRoaXMgYXZvaWRzIGVycm9ycyB3aGVuIGJ1ZmZlciBkYXRhIGlzIG1pc3NpbmcuXG5cdFx0dGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzID0ge1xuXHRcdFx0J2NvbG9yJzogWyAxLCAxLCAxIF0sXG5cdFx0XHQndXYnOiBbIDAsIDAgXSxcblx0XHRcdCd1djInOiBbIDAsIDAgXVxuXHRcdH07XG5cblx0XHR0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuZ2xzbFZlcnNpb24gPSBudWxsO1xuXG5cdFx0aWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggcGFyYW1ldGVycy5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuZnJhZ21lbnRTaGFkZXIgPSBzb3VyY2UuZnJhZ21lbnRTaGFkZXI7XG5cdFx0dGhpcy52ZXJ0ZXhTaGFkZXIgPSBzb3VyY2UudmVydGV4U2hhZGVyO1xuXG5cdFx0dGhpcy51bmlmb3JtcyA9IGNsb25lVW5pZm9ybXMoIHNvdXJjZS51bmlmb3JtcyApO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS5kZWZpbmVzICk7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXG5cdFx0dGhpcy5saWdodHMgPSBzb3VyY2UubGlnaHRzO1xuXHRcdHRoaXMuY2xpcHBpbmcgPSBzb3VyY2UuY2xpcHBpbmc7XG5cblx0XHR0aGlzLmV4dGVuc2lvbnMgPSBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLmV4dGVuc2lvbnMgKTtcblxuXHRcdHRoaXMuZ2xzbFZlcnNpb24gPSBzb3VyY2UuZ2xzbFZlcnNpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0ZGF0YS5nbHNsVmVyc2lvbiA9IHRoaXMuZ2xzbFZlcnNpb247XG5cdFx0ZGF0YS51bmlmb3JtcyA9IHt9O1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiB0aGlzLnVuaWZvcm1zICkge1xuXG5cdFx0XHRjb25zdCB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1sgbmFtZSBdO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB1bmlmb3JtLnZhbHVlO1xuXG5cdFx0XHRpZiAoIHZhbHVlICYmIHZhbHVlLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0XHRkYXRhLnVuaWZvcm1zWyBuYW1lIF0gPSB7XG5cdFx0XHRcdFx0dHlwZTogJ3QnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0pTT04oIG1ldGEgKS51dWlkXG5cdFx0XHRcdH07XG5cblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIHZhbHVlLmlzQ29sb3IgKSB7XG5cblx0XHRcdFx0ZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdjJyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUuZ2V0SGV4KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNWZWN0b3IyICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndjInLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNWZWN0b3IzICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndjMnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNWZWN0b3I0ICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAndjQnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNNYXRyaXgzICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAnbTMnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNNYXRyaXg0ICkge1xuXG5cdFx0XHRcdGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHtcblx0XHRcdFx0XHR0eXBlOiAnbTQnLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZS50b0FycmF5KClcblx0XHRcdFx0fTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRkYXRhLnVuaWZvcm1zWyBuYW1lIF0gPSB7XG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gbm90ZTogdGhlIGFycmF5IHZhcmlhbnRzIHYydiwgdjN2LCB2NHYsIG00diBhbmQgdHYgYXJlIG5vdCBzdXBwb3J0ZWQgc28gZmFyXG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggT2JqZWN0LmtleXMoIHRoaXMuZGVmaW5lcyApLmxlbmd0aCA+IDAgKSBkYXRhLmRlZmluZXMgPSB0aGlzLmRlZmluZXM7XG5cblx0XHRkYXRhLnZlcnRleFNoYWRlciA9IHRoaXMudmVydGV4U2hhZGVyO1xuXHRcdGRhdGEuZnJhZ21lbnRTaGFkZXIgPSB0aGlzLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0Y29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cdFx0Zm9yICggY29uc3Qga2V5IGluIHRoaXMuZXh0ZW5zaW9ucyApIHtcblxuXHRcdFx0aWYgKCB0aGlzLmV4dGVuc2lvbnNbIGtleSBdID09PSB0cnVlICkgZXh0ZW5zaW9uc1sga2V5IF0gPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBPYmplY3Qua2V5cyggZXh0ZW5zaW9ucyApLmxlbmd0aCA+IDAgKSBkYXRhLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cblNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsID0gdHJ1ZTtcblxuY2xhc3MgQ2FtZXJhIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDYW1lcmEnO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlLCByZWN1cnNpdmUgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSggc291cmNlLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KCBzb3VyY2UucHJvamVjdGlvbk1hdHJpeEludmVyc2UgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRXb3JsZERpcmVjdGlvbiggdGFyZ2V0ICkge1xuXG5cdFx0dGhpcy51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTtcblxuXHRcdGNvbnN0IGUgPSB0aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO1xuXG5cdFx0cmV0dXJuIHRhcmdldC5zZXQoIC0gZVsgOCBdLCAtIGVbIDkgXSwgLSBlWyAxMCBdICkubm9ybWFsaXplKCk7XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApIHtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSggdGhpcy5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXG5cdH1cblxuXHR1cGRhdGVXb3JsZE1hdHJpeCggdXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4gKSB7XG5cblx0XHRzdXBlci51cGRhdGVXb3JsZE1hdHJpeCggdXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4gKTtcblxuXHRcdHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoIHRoaXMubWF0cml4V29ybGQgKS5pbnZlcnQoKTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG59XG5cbkNhbWVyYS5wcm90b3R5cGUuaXNDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBQZXJzcGVjdGl2ZUNhbWVyYSBleHRlbmRzIENhbWVyYSB7XG5cblx0Y29uc3RydWN0b3IoIGZvdiA9IDUwLCBhc3BlY3QgPSAxLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdQZXJzcGVjdGl2ZUNhbWVyYSc7XG5cblx0XHR0aGlzLmZvdiA9IGZvdjtcblx0XHR0aGlzLnpvb20gPSAxO1xuXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblx0XHR0aGlzLmZvY3VzID0gMTA7XG5cblx0XHR0aGlzLmFzcGVjdCA9IGFzcGVjdDtcblx0XHR0aGlzLnZpZXcgPSBudWxsO1xuXG5cdFx0dGhpcy5maWxtR2F1Z2UgPSAzNTtcdC8vIHdpZHRoIG9mIHRoZSBmaWxtIChkZWZhdWx0IGluIG1pbGxpbWV0ZXJzKVxuXHRcdHRoaXMuZmlsbU9mZnNldCA9IDA7XHQvLyBob3Jpem9udGFsIGZpbG0gb2Zmc2V0IChzYW1lIHVuaXQgYXMgZ2F1Z2UpXG5cblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlLCByZWN1cnNpdmUgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApO1xuXG5cdFx0dGhpcy5mb3YgPSBzb3VyY2UuZm92O1xuXHRcdHRoaXMuem9vbSA9IHNvdXJjZS56b29tO1xuXG5cdFx0dGhpcy5uZWFyID0gc291cmNlLm5lYXI7XG5cdFx0dGhpcy5mYXIgPSBzb3VyY2UuZmFyO1xuXHRcdHRoaXMuZm9jdXMgPSBzb3VyY2UuZm9jdXM7XG5cblx0XHR0aGlzLmFzcGVjdCA9IHNvdXJjZS5hc3BlY3Q7XG5cdFx0dGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDogT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS52aWV3ICk7XG5cblx0XHR0aGlzLmZpbG1HYXVnZSA9IHNvdXJjZS5maWxtR2F1Z2U7XG5cdFx0dGhpcy5maWxtT2Zmc2V0ID0gc291cmNlLmZpbG1PZmZzZXQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIEZPViBieSBmb2NhbCBsZW5ndGggaW4gcmVzcGVjdCB0byB0aGUgY3VycmVudCAuZmlsbUdhdWdlLlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCBmaWxtIGdhdWdlIGlzIDM1LCBzbyB0aGF0IHRoZSBmb2NhbCBsZW5ndGggY2FuIGJlIHNwZWNpZmllZCBmb3Jcblx0ICogYSAzNW1tIChmdWxsIGZyYW1lKSBjYW1lcmEuXG5cdCAqXG5cdCAqIFZhbHVlcyBmb3IgZm9jYWwgbGVuZ3RoIGFuZCBmaWxtIGdhdWdlIG11c3QgaGF2ZSB0aGUgc2FtZSB1bml0LlxuXHQgKi9cblx0c2V0Rm9jYWxMZW5ndGgoIGZvY2FsTGVuZ3RoICkge1xuXG5cdFx0LyoqIHNlZSB7QGxpbmsgaHR0cDovL3d3dy5ib2JhdGtpbnMuY29tL3Bob3RvZ3JhcGh5L3RlY2huaWNhbC9maWVsZF9vZl92aWV3Lmh0bWx9ICovXG5cdFx0Y29uc3QgdkV4dGVudFNsb3BlID0gMC41ICogdGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyBmb2NhbExlbmd0aDtcblxuXHRcdHRoaXMuZm92ID0gUkFEMkRFRyAqIDIgKiBNYXRoLmF0YW4oIHZFeHRlbnRTbG9wZSApO1xuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgZm9jYWwgbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgLmZvdiBhbmQgLmZpbG1HYXVnZS5cblx0ICovXG5cdGdldEZvY2FsTGVuZ3RoKCkge1xuXG5cdFx0Y29uc3QgdkV4dGVudFNsb3BlID0gTWF0aC50YW4oIERFRzJSQUQgKiAwLjUgKiB0aGlzLmZvdiApO1xuXG5cdFx0cmV0dXJuIDAuNSAqIHRoaXMuZ2V0RmlsbUhlaWdodCgpIC8gdkV4dGVudFNsb3BlO1xuXG5cdH1cblxuXHRnZXRFZmZlY3RpdmVGT1YoKSB7XG5cblx0XHRyZXR1cm4gUkFEMkRFRyAqIDIgKiBNYXRoLmF0YW4oXG5cdFx0XHRNYXRoLnRhbiggREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92ICkgLyB0aGlzLnpvb20gKTtcblxuXHR9XG5cblx0Z2V0RmlsbVdpZHRoKCkge1xuXG5cdFx0Ly8gZmlsbSBub3QgY29tcGxldGVseSBjb3ZlcmVkIGluIHBvcnRyYWl0IGZvcm1hdCAoYXNwZWN0IDwgMSlcblx0XHRyZXR1cm4gdGhpcy5maWxtR2F1Z2UgKiBNYXRoLm1pbiggdGhpcy5hc3BlY3QsIDEgKTtcblxuXHR9XG5cblx0Z2V0RmlsbUhlaWdodCgpIHtcblxuXHRcdC8vIGZpbG0gbm90IGNvbXBsZXRlbHkgY292ZXJlZCBpbiBsYW5kc2NhcGUgZm9ybWF0IChhc3BlY3QgPiAxKVxuXHRcdHJldHVybiB0aGlzLmZpbG1HYXVnZSAvIE1hdGgubWF4KCB0aGlzLmFzcGVjdCwgMSApO1xuXG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhbiBvZmZzZXQgaW4gYSBsYXJnZXIgZnJ1c3R1bS4gVGhpcyBpcyB1c2VmdWwgZm9yIG11bHRpLXdpbmRvdyBvclxuXHQgKiBtdWx0aS1tb25pdG9yL211bHRpLW1hY2hpbmUgc2V0dXBzLlxuXHQgKlxuXHQgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgM3gyIG1vbml0b3JzIGFuZCBlYWNoIG1vbml0b3IgaXMgMTkyMHgxMDgwIGFuZFxuXHQgKiB0aGUgbW9uaXRvcnMgYXJlIGluIGdyaWQgbGlrZSB0aGlzXG5cdCAqXG5cdCAqICAgKy0tLSstLS0rLS0tK1xuXHQgKiAgIHwgQSB8IEIgfCBDIHxcblx0ICogICArLS0tKy0tLSstLS0rXG5cdCAqICAgfCBEIHwgRSB8IEYgfFxuXHQgKiAgICstLS0rLS0tKy0tLStcblx0ICpcblx0ICogdGhlbiBmb3IgZWFjaCBtb25pdG9yIHlvdSB3b3VsZCBjYWxsIGl0IGxpa2UgdGhpc1xuXHQgKlxuXHQgKiAgIGNvbnN0IHcgPSAxOTIwO1xuXHQgKiAgIGNvbnN0IGggPSAxMDgwO1xuXHQgKiAgIGNvbnN0IGZ1bGxXaWR0aCA9IHcgKiAzO1xuXHQgKiAgIGNvbnN0IGZ1bGxIZWlnaHQgPSBoICogMjtcblx0ICpcblx0ICogICAtLUEtLVxuXHQgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAwLCBoICogMCwgdywgaCApO1xuXHQgKiAgIC0tQi0tXG5cdCAqICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDEsIGggKiAwLCB3LCBoICk7XG5cdCAqICAgLS1DLS1cblx0ICogICBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDAsIHcsIGggKTtcblx0ICogICAtLUQtLVxuXHQgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAwLCBoICogMSwgdywgaCApO1xuXHQgKiAgIC0tRS0tXG5cdCAqICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDEsIGggKiAxLCB3LCBoICk7XG5cdCAqICAgLS1GLS1cblx0ICogICBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDEsIHcsIGggKTtcblx0ICpcblx0ICogICBOb3RlIHRoZXJlIGlzIG5vIHJlYXNvbiBtb25pdG9ycyBoYXZlIHRvIGJlIHRoZSBzYW1lIHNpemUgb3IgaW4gYSBncmlkLlxuXHQgKi9cblx0c2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0dGhpcy5hc3BlY3QgPSBmdWxsV2lkdGggLyBmdWxsSGVpZ2h0O1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMudmlldyA9IHtcblx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0ZnVsbFdpZHRoOiAxLFxuXHRcdFx0XHRmdWxsSGVpZ2h0OiAxLFxuXHRcdFx0XHRvZmZzZXRYOiAwLFxuXHRcdFx0XHRvZmZzZXRZOiAwLFxuXHRcdFx0XHR3aWR0aDogMSxcblx0XHRcdFx0aGVpZ2h0OiAxXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7XG5cdFx0dGhpcy52aWV3LmZ1bGxIZWlnaHQgPSBmdWxsSGVpZ2h0O1xuXHRcdHRoaXMudmlldy5vZmZzZXRYID0geDtcblx0XHR0aGlzLnZpZXcub2Zmc2V0WSA9IHk7XG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDtcblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHRjbGVhclZpZXdPZmZzZXQoKSB7XG5cblx0XHRpZiAoIHRoaXMudmlldyAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy52aWV3LmVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHR1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge1xuXG5cdFx0Y29uc3QgbmVhciA9IHRoaXMubmVhcjtcblx0XHRsZXQgdG9wID0gbmVhciAqIE1hdGgudGFuKCBERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRoaXMuem9vbTtcblx0XHRsZXQgaGVpZ2h0ID0gMiAqIHRvcDtcblx0XHRsZXQgd2lkdGggPSB0aGlzLmFzcGVjdCAqIGhlaWdodDtcblx0XHRsZXQgbGVmdCA9IC0gMC41ICogd2lkdGg7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMudmlldztcblxuXHRcdGlmICggdGhpcy52aWV3ICE9PSBudWxsICYmIHRoaXMudmlldy5lbmFibGVkICkge1xuXG5cdFx0XHRjb25zdCBmdWxsV2lkdGggPSB2aWV3LmZ1bGxXaWR0aCxcblx0XHRcdFx0ZnVsbEhlaWdodCA9IHZpZXcuZnVsbEhlaWdodDtcblxuXHRcdFx0bGVmdCArPSB2aWV3Lm9mZnNldFggKiB3aWR0aCAvIGZ1bGxXaWR0aDtcblx0XHRcdHRvcCAtPSB2aWV3Lm9mZnNldFkgKiBoZWlnaHQgLyBmdWxsSGVpZ2h0O1xuXHRcdFx0d2lkdGggKj0gdmlldy53aWR0aCAvIGZ1bGxXaWR0aDtcblx0XHRcdGhlaWdodCAqPSB2aWV3LmhlaWdodCAvIGZ1bGxIZWlnaHQ7XG5cblx0XHR9XG5cblx0XHRjb25zdCBza2V3ID0gdGhpcy5maWxtT2Zmc2V0O1xuXHRcdGlmICggc2tldyAhPT0gMCApIGxlZnQgKz0gbmVhciAqIHNrZXcgLyB0aGlzLmdldEZpbG1XaWR0aCgpO1xuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgbGVmdCArIHdpZHRoLCB0b3AsIHRvcCAtIGhlaWdodCwgbmVhciwgdGhpcy5mYXIgKTtcblxuXHRcdHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSggdGhpcy5wcm9qZWN0aW9uTWF0cml4ICkuaW52ZXJ0KCk7XG5cblx0fVxuXG5cdHRvSlNPTiggbWV0YSApIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oIG1ldGEgKTtcblxuXHRcdGRhdGEub2JqZWN0LmZvdiA9IHRoaXMuZm92O1xuXHRcdGRhdGEub2JqZWN0Lnpvb20gPSB0aGlzLnpvb207XG5cblx0XHRkYXRhLm9iamVjdC5uZWFyID0gdGhpcy5uZWFyO1xuXHRcdGRhdGEub2JqZWN0LmZhciA9IHRoaXMuZmFyO1xuXHRcdGRhdGEub2JqZWN0LmZvY3VzID0gdGhpcy5mb2N1cztcblxuXHRcdGRhdGEub2JqZWN0LmFzcGVjdCA9IHRoaXMuYXNwZWN0O1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIHRoaXMudmlldyApO1xuXG5cdFx0ZGF0YS5vYmplY3QuZmlsbUdhdWdlID0gdGhpcy5maWxtR2F1Z2U7XG5cdFx0ZGF0YS5vYmplY3QuZmlsbU9mZnNldCA9IHRoaXMuZmlsbU9mZnNldDtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5QZXJzcGVjdGl2ZUNhbWVyYS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYSA9IHRydWU7XG5cbmNvbnN0IGZvdiA9IDkwLCBhc3BlY3QgPSAxO1xuXG5jbGFzcyBDdWJlQ2FtZXJhIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBuZWFyLCBmYXIsIHJlbmRlclRhcmdldCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ3ViZUNhbWVyYSc7XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0O1xuXG5cdFx0Y29uc3QgY2FtZXJhUFggPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTtcblx0XHRjYW1lcmFQWC5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFQWC51cC5zZXQoIDAsIC0gMSwgMCApO1xuXHRcdGNhbWVyYVBYLmxvb2tBdCggbmV3IFZlY3RvcjMoIDEsIDAsIDAgKSApO1xuXHRcdHRoaXMuYWRkKCBjYW1lcmFQWCApO1xuXG5cdFx0Y29uc3QgY2FtZXJhTlggPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTtcblx0XHRjYW1lcmFOWC5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFOWC51cC5zZXQoIDAsIC0gMSwgMCApO1xuXHRcdGNhbWVyYU5YLmxvb2tBdCggbmV3IFZlY3RvcjMoIC0gMSwgMCwgMCApICk7XG5cdFx0dGhpcy5hZGQoIGNhbWVyYU5YICk7XG5cblx0XHRjb25zdCBjYW1lcmFQWSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYVBZLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYVBZLnVwLnNldCggMCwgMCwgMSApO1xuXHRcdGNhbWVyYVBZLmxvb2tBdCggbmV3IFZlY3RvcjMoIDAsIDEsIDAgKSApO1xuXHRcdHRoaXMuYWRkKCBjYW1lcmFQWSApO1xuXG5cdFx0Y29uc3QgY2FtZXJhTlkgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTtcblx0XHRjYW1lcmFOWS5sYXllcnMgPSB0aGlzLmxheWVycztcblx0XHRjYW1lcmFOWS51cC5zZXQoIDAsIDAsIC0gMSApO1xuXHRcdGNhbWVyYU5ZLmxvb2tBdCggbmV3IFZlY3RvcjMoIDAsIC0gMSwgMCApICk7XG5cdFx0dGhpcy5hZGQoIGNhbWVyYU5ZICk7XG5cblx0XHRjb25zdCBjYW1lcmFQWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYVBaLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYVBaLnVwLnNldCggMCwgLSAxLCAwICk7XG5cdFx0Y2FtZXJhUFoubG9va0F0KCBuZXcgVmVjdG9yMyggMCwgMCwgMSApICk7XG5cdFx0dGhpcy5hZGQoIGNhbWVyYVBaICk7XG5cblx0XHRjb25zdCBjYW1lcmFOWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApO1xuXHRcdGNhbWVyYU5aLmxheWVycyA9IHRoaXMubGF5ZXJzO1xuXHRcdGNhbWVyYU5aLnVwLnNldCggMCwgLSAxLCAwICk7XG5cdFx0Y2FtZXJhTloubG9va0F0KCBuZXcgVmVjdG9yMyggMCwgMCwgLSAxICkgKTtcblx0XHR0aGlzLmFkZCggY2FtZXJhTlogKTtcblxuXHR9XG5cblx0dXBkYXRlKCByZW5kZXJlciwgc2NlbmUgKSB7XG5cblx0XHRpZiAoIHRoaXMucGFyZW50ID09PSBudWxsICkgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQ7XG5cblx0XHRjb25zdCBbIGNhbWVyYVBYLCBjYW1lcmFOWCwgY2FtZXJhUFksIGNhbWVyYU5ZLCBjYW1lcmFQWiwgY2FtZXJhTlogXSA9IHRoaXMuY2hpbGRyZW47XG5cblx0XHRjb25zdCBjdXJyZW50WHJFbmFibGVkID0gcmVuZGVyZXIueHIuZW5hYmxlZDtcblx0XHRjb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRyZW5kZXJlci54ci5lbmFibGVkID0gZmFsc2U7XG5cblx0XHRjb25zdCBnZW5lcmF0ZU1pcG1hcHMgPSByZW5kZXJUYXJnZXQudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7XG5cblx0XHRyZW5kZXJUYXJnZXQudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCAwICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhUFggKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCAxICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhTlggKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCAyICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhUFkgKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCAzICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhTlkgKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCA0ICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhUFogKTtcblxuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGdlbmVyYXRlTWlwbWFwcztcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCA1ICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhTlogKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggY3VycmVudFJlbmRlclRhcmdldCApO1xuXG5cdFx0cmVuZGVyZXIueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG5cblx0XHRyZW5kZXJUYXJnZXQudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cbn1cblxuY2xhc3MgQ3ViZVRleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggaW1hZ2VzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICkge1xuXG5cdFx0aW1hZ2VzID0gaW1hZ2VzICE9PSB1bmRlZmluZWQgPyBpbWFnZXMgOiBbXTtcblx0XHRtYXBwaW5nID0gbWFwcGluZyAhPT0gdW5kZWZpbmVkID8gbWFwcGluZyA6IEN1YmVSZWZsZWN0aW9uTWFwcGluZztcblxuXHRcdHN1cGVyKCBpbWFnZXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTtcblxuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblxuXHR9XG5cblx0Z2V0IGltYWdlcygpIHtcblxuXHRcdHJldHVybiB0aGlzLmltYWdlO1xuXG5cdH1cblxuXHRzZXQgaW1hZ2VzKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuaW1hZ2UgPSB2YWx1ZTtcblxuXHR9XG5cbn1cblxuQ3ViZVRleHR1cmUucHJvdG90eXBlLmlzQ3ViZVRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgZXh0ZW5kcyBXZWJHTFJlbmRlclRhcmdldCB7XG5cblx0Y29uc3RydWN0b3IoIHNpemUsIG9wdGlvbnMsIGR1bW15ICkge1xuXG5cdFx0aWYgKCBOdW1iZXIuaXNJbnRlZ2VyKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKScgKTtcblxuXHRcdFx0b3B0aW9ucyA9IGR1bW15O1xuXG5cdFx0fVxuXG5cdFx0c3VwZXIoIHNpemUsIHNpemUsIG9wdGlvbnMgKTtcblxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0Ly8gQnkgY29udmVudGlvbiAtLSBsaWtlbHkgYmFzZWQgb24gdGhlIFJlbmRlck1hbiBzcGVjIGZyb20gdGhlIDE5OTAncyAtLSBjdWJlIG1hcHMgYXJlIHNwZWNpZmllZCBieSBXZWJHTCAoYW5kIHRocmVlLmpzKVxuXHRcdC8vIGluIGEgY29vcmRpbmF0ZSBzeXN0ZW0gaW4gd2hpY2ggcG9zaXRpdmUteCBpcyB0byB0aGUgcmlnaHQgd2hlbiBsb29raW5nIHVwIHRoZSBwb3NpdGl2ZS16IGF4aXMgLS0gaW4gb3RoZXIgd29yZHMsXG5cdFx0Ly8gaW4gYSBsZWZ0LWhhbmRlZCBjb29yZGluYXRlIHN5c3RlbS4gQnkgY29udGludWluZyB0aGlzIGNvbnZlbnRpb24sIHByZWV4aXN0aW5nIGN1YmUgbWFwcyBjb250aW51ZWQgdG8gcmVuZGVyIGNvcnJlY3RseS5cblxuXHRcdC8vIHRocmVlLmpzIHVzZXMgYSByaWdodC1oYW5kZWQgY29vcmRpbmF0ZSBzeXN0ZW0uIFNvIGVudmlyb25tZW50IG1hcHMgdXNlZCBpbiB0aHJlZS5qcyBhcHBlYXIgdG8gaGF2ZSBweCBhbmQgbnggc3dhcHBlZFxuXHRcdC8vIGFuZCB0aGUgZmxhZyBpc1JlbmRlclRhcmdldFRleHR1cmUgY29udHJvbHMgdGhpcyBjb252ZXJzaW9uLiBUaGUgZmxpcCBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQudGV4dHVyZVxuXHRcdC8vIGFzIGEgY3ViZSB0ZXh0dXJlICh0aGlzIGlzIGRldGVjdGVkIHdoZW4gaXNSZW5kZXJUYXJnZXRUZXh0dXJlIGlzIHNldCB0byB0cnVlIGZvciBjdWJlIHRleHR1cmVzKS5cblxuXHRcdHRoaXMudGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSggdW5kZWZpbmVkLCBvcHRpb25zLm1hcHBpbmcsIG9wdGlvbnMud3JhcFMsIG9wdGlvbnMud3JhcFQsIG9wdGlvbnMubWFnRmlsdGVyLCBvcHRpb25zLm1pbkZpbHRlciwgb3B0aW9ucy5mb3JtYXQsIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5hbmlzb3Ryb3B5LCBvcHRpb25zLmVuY29kaW5nICk7XG5cdFx0dGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IHRydWU7XG5cblx0XHR0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzIDogZmFsc2U7XG5cdFx0dGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IG9wdGlvbnMubWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblxuXHR9XG5cblx0ZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUoIHJlbmRlcmVyLCB0ZXh0dXJlICkge1xuXG5cdFx0dGhpcy50ZXh0dXJlLnR5cGUgPSB0ZXh0dXJlLnR5cGU7XG5cdFx0dGhpcy50ZXh0dXJlLmZvcm1hdCA9IFJHQkFGb3JtYXQ7IC8vIHNlZSAjMTg4NTlcblx0XHR0aGlzLnRleHR1cmUuZW5jb2RpbmcgPSB0ZXh0dXJlLmVuY29kaW5nO1xuXG5cdFx0dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1xuXHRcdHRoaXMudGV4dHVyZS5taW5GaWx0ZXIgPSB0ZXh0dXJlLm1pbkZpbHRlcjtcblx0XHR0aGlzLnRleHR1cmUubWFnRmlsdGVyID0gdGV4dHVyZS5tYWdGaWx0ZXI7XG5cblx0XHRjb25zdCBzaGFkZXIgPSB7XG5cblx0XHRcdHVuaWZvcm1zOiB7XG5cdFx0XHRcdHRFcXVpcmVjdDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0fSxcblxuXHRcdFx0dmVydGV4U2hhZGVyOiAvKiBnbHNsICovYFxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0YCxcblxuXHRcdFx0ZnJhZ21lbnRTaGFkZXI6IC8qIGdsc2wgKi9gXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHRgXG5cdFx0fTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJveEdlb21ldHJ5KCA1LCA1LCA1ICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCgge1xuXG5cdFx0XHRuYW1lOiAnQ3ViZW1hcEZyb21FcXVpcmVjdCcsXG5cblx0XHRcdHVuaWZvcm1zOiBjbG9uZVVuaWZvcm1zKCBzaGFkZXIudW5pZm9ybXMgKSxcblx0XHRcdHZlcnRleFNoYWRlcjogc2hhZGVyLnZlcnRleFNoYWRlcixcblx0XHRcdGZyYWdtZW50U2hhZGVyOiBzaGFkZXIuZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHRzaWRlOiBCYWNrU2lkZSxcblx0XHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nXG5cblx0XHR9ICk7XG5cblx0XHRtYXRlcmlhbC51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWUgPSB0ZXh0dXJlO1xuXG5cdFx0Y29uc3QgbWVzaCA9IG5ldyBNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdGNvbnN0IGN1cnJlbnRNaW5GaWx0ZXIgPSB0ZXh0dXJlLm1pbkZpbHRlcjtcblxuXHRcdC8vIEF2b2lkIGJsdXJyZWQgcG9sZXNcblx0XHRpZiAoIHRleHR1cmUubWluRmlsdGVyID09PSBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIgKSB0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjtcblxuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBDdWJlQ2FtZXJhKCAxLCAxMCwgdGhpcyApO1xuXHRcdGNhbWVyYS51cGRhdGUoIHJlbmRlcmVyLCBtZXNoICk7XG5cblx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IGN1cnJlbnRNaW5GaWx0ZXI7XG5cblx0XHRtZXNoLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHRtZXNoLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbGVhciggcmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHtcblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggdGhpcywgaSApO1xuXG5cdFx0XHRyZW5kZXJlci5jbGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7XG5cblx0XHR9XG5cblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIGN1cnJlbnRSZW5kZXJUYXJnZXQgKTtcblxuXHR9XG5cbn1cblxuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCA9IHRydWU7XG5cbmNvbnN0IF92ZWN0b3IxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZlY3RvcjIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfbm9ybWFsTWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4MygpO1xuXG5jbGFzcyBQbGFuZSB7XG5cblx0Y29uc3RydWN0b3IoIG5vcm1hbCA9IG5ldyBWZWN0b3IzKCAxLCAwLCAwICksIGNvbnN0YW50ID0gMCApIHtcblxuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWRcblxuXHRcdHRoaXMubm9ybWFsID0gbm9ybWFsO1xuXHRcdHRoaXMuY29uc3RhbnQgPSBjb25zdGFudDtcblxuXHR9XG5cblx0c2V0KCBub3JtYWwsIGNvbnN0YW50ICkge1xuXG5cdFx0dGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7XG5cdFx0dGhpcy5jb25zdGFudCA9IGNvbnN0YW50O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldENvbXBvbmVudHMoIHgsIHksIHosIHcgKSB7XG5cblx0XHR0aGlzLm5vcm1hbC5zZXQoIHgsIHksIHogKTtcblx0XHR0aGlzLmNvbnN0YW50ID0gdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCggbm9ybWFsLCBwb2ludCApIHtcblxuXHRcdHRoaXMubm9ybWFsLmNvcHkoIG5vcm1hbCApO1xuXHRcdHRoaXMuY29uc3RhbnQgPSAtIHBvaW50LmRvdCggdGhpcy5ub3JtYWwgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tQ29wbGFuYXJQb2ludHMoIGEsIGIsIGMgKSB7XG5cblx0XHRjb25zdCBub3JtYWwgPSBfdmVjdG9yMS5zdWJWZWN0b3JzKCBjLCBiICkuY3Jvc3MoIF92ZWN0b3IyLnN1YlZlY3RvcnMoIGEsIGIgKSApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0Ly8gUTogc2hvdWxkIGFuIGVycm9yIGJlIHRocm93biBpZiBub3JtYWwgaXMgemVybyAoZS5nLiBkZWdlbmVyYXRlIHBsYW5lKT9cblxuXHRcdHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoIG5vcm1hbCwgYSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHBsYW5lICkge1xuXG5cdFx0dGhpcy5ub3JtYWwuY29weSggcGxhbmUubm9ybWFsICk7XG5cdFx0dGhpcy5jb25zdGFudCA9IHBsYW5lLmNvbnN0YW50O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG5vcm1hbGl6ZSgpIHtcblxuXHRcdC8vIE5vdGU6IHdpbGwgbGVhZCB0byBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBwbGFuZSBpcyBpbnZhbGlkLlxuXG5cdFx0Y29uc3QgaW52ZXJzZU5vcm1hbExlbmd0aCA9IDEuMCAvIHRoaXMubm9ybWFsLmxlbmd0aCgpO1xuXHRcdHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKCBpbnZlcnNlTm9ybWFsTGVuZ3RoICk7XG5cdFx0dGhpcy5jb25zdGFudCAqPSBpbnZlcnNlTm9ybWFsTGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG5lZ2F0ZSgpIHtcblxuXHRcdHRoaXMuY29uc3RhbnQgKj0gLSAxO1xuXHRcdHRoaXMubm9ybWFsLm5lZ2F0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWwuZG90KCBwb2ludCApICsgdGhpcy5jb25zdGFudDtcblxuXHR9XG5cblx0ZGlzdGFuY2VUb1NwaGVyZSggc3BoZXJlICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBzcGhlcmUuY2VudGVyICkgLSBzcGhlcmUucmFkaXVzO1xuXG5cdH1cblxuXHRwcm9qZWN0UG9pbnQoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIHRoaXMubm9ybWFsICkubXVsdGlwbHlTY2FsYXIoIC0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIHBvaW50ICkgKS5hZGQoIHBvaW50ICk7XG5cblx0fVxuXG5cdGludGVyc2VjdExpbmUoIGxpbmUsIHRhcmdldCApIHtcblxuXHRcdGNvbnN0IGRpcmVjdGlvbiA9IGxpbmUuZGVsdGEoIF92ZWN0b3IxICk7XG5cblx0XHRjb25zdCBkZW5vbWluYXRvciA9IHRoaXMubm9ybWFsLmRvdCggZGlyZWN0aW9uICk7XG5cblx0XHRpZiAoIGRlbm9taW5hdG9yID09PSAwICkge1xuXG5cdFx0XHQvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luXG5cdFx0XHRpZiAoIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBsaW5lLnN0YXJ0ICkgPT09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBsaW5lLnN0YXJ0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gVW5zdXJlIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbWV0aG9kIHRvIGhhbmRsZSB0aGlzIGNhc2UuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSAtICggbGluZS5zdGFydC5kb3QoIHRoaXMubm9ybWFsICkgKyB0aGlzLmNvbnN0YW50ICkgLyBkZW5vbWluYXRvcjtcblxuXHRcdGlmICggdCA8IDAgfHwgdCA+IDEgKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBkaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggbGluZS5zdGFydCApO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzTGluZSggbGluZSApIHtcblxuXHRcdC8vIE5vdGU6IHRoaXMgdGVzdHMgaWYgYSBsaW5lIGludGVyc2VjdHMgdGhlIHBsYW5lLCBub3Qgd2hldGhlciBpdCAob3IgaXRzIGVuZC1wb2ludHMpIGFyZSBjb3BsYW5hciB3aXRoIGl0LlxuXG5cdFx0Y29uc3Qgc3RhcnRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIGxpbmUuc3RhcnQgKTtcblx0XHRjb25zdCBlbmRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIGxpbmUuZW5kICk7XG5cblx0XHRyZXR1cm4gKCBzdGFydFNpZ24gPCAwICYmIGVuZFNpZ24gPiAwICkgfHwgKCBlbmRTaWduIDwgMCAmJiBzdGFydFNpZ24gPiAwICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNCb3goIGJveCApIHtcblxuXHRcdHJldHVybiBib3guaW50ZXJzZWN0c1BsYW5lKCB0aGlzICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHtcblxuXHRcdHJldHVybiBzcGhlcmUuaW50ZXJzZWN0c1BsYW5lKCB0aGlzICk7XG5cblx0fVxuXG5cdGNvcGxhbmFyUG9pbnQoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggdGhpcy5ub3JtYWwgKS5tdWx0aXBseVNjYWxhciggLSB0aGlzLmNvbnN0YW50ICk7XG5cblx0fVxuXG5cdGFwcGx5TWF0cml4NCggbWF0cml4LCBvcHRpb25hbE5vcm1hbE1hdHJpeCApIHtcblxuXHRcdGNvbnN0IG5vcm1hbE1hdHJpeCA9IG9wdGlvbmFsTm9ybWFsTWF0cml4IHx8IF9ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTtcblxuXHRcdGNvbnN0IHJlZmVyZW5jZVBvaW50ID0gdGhpcy5jb3BsYW5hclBvaW50KCBfdmVjdG9yMSApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7XG5cblx0XHRjb25zdCBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoIG5vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0dGhpcy5jb25zdGFudCA9IC0gcmVmZXJlbmNlUG9pbnQuZG90KCBub3JtYWwgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2xhdGUoIG9mZnNldCApIHtcblxuXHRcdHRoaXMuY29uc3RhbnQgLT0gb2Zmc2V0LmRvdCggdGhpcy5ub3JtYWwgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIHBsYW5lICkge1xuXG5cdFx0cmV0dXJuIHBsYW5lLm5vcm1hbC5lcXVhbHMoIHRoaXMubm9ybWFsICkgJiYgKCBwbGFuZS5jb25zdGFudCA9PT0gdGhpcy5jb25zdGFudCApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuUGxhbmUucHJvdG90eXBlLmlzUGxhbmUgPSB0cnVlO1xuXG5jb25zdCBfc3BoZXJlJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBTcGhlcmUoKTtcbmNvbnN0IF92ZWN0b3IkNyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgRnJ1c3R1bSB7XG5cblx0Y29uc3RydWN0b3IoIHAwID0gbmV3IFBsYW5lKCksIHAxID0gbmV3IFBsYW5lKCksIHAyID0gbmV3IFBsYW5lKCksIHAzID0gbmV3IFBsYW5lKCksIHA0ID0gbmV3IFBsYW5lKCksIHA1ID0gbmV3IFBsYW5lKCkgKSB7XG5cblx0XHR0aGlzLnBsYW5lcyA9IFsgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSBdO1xuXG5cdH1cblxuXHRzZXQoIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUgKSB7XG5cblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblxuXHRcdHBsYW5lc1sgMCBdLmNvcHkoIHAwICk7XG5cdFx0cGxhbmVzWyAxIF0uY29weSggcDEgKTtcblx0XHRwbGFuZXNbIDIgXS5jb3B5KCBwMiApO1xuXHRcdHBsYW5lc1sgMyBdLmNvcHkoIHAzICk7XG5cdFx0cGxhbmVzWyA0IF0uY29weSggcDQgKTtcblx0XHRwbGFuZXNbIDUgXS5jb3B5KCBwNSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIGZydXN0dW0gKSB7XG5cblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdHBsYW5lc1sgaSBdLmNvcHkoIGZydXN0dW0ucGxhbmVzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tUHJvamVjdGlvbk1hdHJpeCggbSApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXHRcdGNvbnN0IG1lID0gbS5lbGVtZW50cztcblx0XHRjb25zdCBtZTAgPSBtZVsgMCBdLCBtZTEgPSBtZVsgMSBdLCBtZTIgPSBtZVsgMiBdLCBtZTMgPSBtZVsgMyBdO1xuXHRcdGNvbnN0IG1lNCA9IG1lWyA0IF0sIG1lNSA9IG1lWyA1IF0sIG1lNiA9IG1lWyA2IF0sIG1lNyA9IG1lWyA3IF07XG5cdFx0Y29uc3QgbWU4ID0gbWVbIDggXSwgbWU5ID0gbWVbIDkgXSwgbWUxMCA9IG1lWyAxMCBdLCBtZTExID0gbWVbIDExIF07XG5cdFx0Y29uc3QgbWUxMiA9IG1lWyAxMiBdLCBtZTEzID0gbWVbIDEzIF0sIG1lMTQgPSBtZVsgMTQgXSwgbWUxNSA9IG1lWyAxNSBdO1xuXG5cdFx0cGxhbmVzWyAwIF0uc2V0Q29tcG9uZW50cyggbWUzIC0gbWUwLCBtZTcgLSBtZTQsIG1lMTEgLSBtZTgsIG1lMTUgLSBtZTEyICkubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWyAxIF0uc2V0Q29tcG9uZW50cyggbWUzICsgbWUwLCBtZTcgKyBtZTQsIG1lMTEgKyBtZTgsIG1lMTUgKyBtZTEyICkubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWyAyIF0uc2V0Q29tcG9uZW50cyggbWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEgKyBtZTksIG1lMTUgKyBtZTEzICkubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWyAzIF0uc2V0Q29tcG9uZW50cyggbWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTksIG1lMTUgLSBtZTEzICkubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWyA0IF0uc2V0Q29tcG9uZW50cyggbWUzIC0gbWUyLCBtZTcgLSBtZTYsIG1lMTEgLSBtZTEwLCBtZTE1IC0gbWUxNCApLm5vcm1hbGl6ZSgpO1xuXHRcdHBsYW5lc1sgNSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMiwgbWU3ICsgbWU2LCBtZTExICsgbWUxMCwgbWUxNSArIG1lMTQgKS5ub3JtYWxpemUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRpbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTtcblxuXHRcdGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdF9zcGhlcmUkMi5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSApLmFwcGx5TWF0cml4NCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCBfc3BoZXJlJDIgKTtcblxuXHR9XG5cblx0aW50ZXJzZWN0c1Nwcml0ZSggc3ByaXRlICkge1xuXG5cdFx0X3NwaGVyZSQyLmNlbnRlci5zZXQoIDAsIDAsIDAgKTtcblx0XHRfc3BoZXJlJDIucmFkaXVzID0gMC43MDcxMDY3ODExODY1NDc2O1xuXHRcdF9zcGhlcmUkMi5hcHBseU1hdHJpeDQoIHNwcml0ZS5tYXRyaXhXb3JsZCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZSggX3NwaGVyZSQyICk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXHRcdGNvbnN0IGNlbnRlciA9IHNwaGVyZS5jZW50ZXI7XG5cdFx0Y29uc3QgbmVnUmFkaXVzID0gLSBzcGhlcmUucmFkaXVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBwbGFuZXNbIGkgXS5kaXN0YW5jZVRvUG9pbnQoIGNlbnRlciApO1xuXG5cdFx0XHRpZiAoIGRpc3RhbmNlIDwgbmVnUmFkaXVzICkge1xuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fVxuXG5cdGludGVyc2VjdHNCb3goIGJveCApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcGxhbmUgPSBwbGFuZXNbIGkgXTtcblxuXHRcdFx0Ly8gY29ybmVyIGF0IG1heCBkaXN0YW5jZVxuXG5cdFx0XHRfdmVjdG9yJDcueCA9IHBsYW5lLm5vcm1hbC54ID4gMCA/IGJveC5tYXgueCA6IGJveC5taW4ueDtcblx0XHRcdF92ZWN0b3IkNy55ID0gcGxhbmUubm9ybWFsLnkgPiAwID8gYm94Lm1heC55IDogYm94Lm1pbi55O1xuXHRcdFx0X3ZlY3RvciQ3LnogPSBwbGFuZS5ub3JtYWwueiA+IDAgPyBib3gubWF4LnogOiBib3gubWluLno7XG5cblx0XHRcdGlmICggcGxhbmUuZGlzdGFuY2VUb1BvaW50KCBfdmVjdG9yJDcgKSA8IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9XG5cblx0Y29udGFpbnNQb2ludCggcG9pbnQgKSB7XG5cblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdGlmICggcGxhbmVzWyBpIF0uZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIDwgMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xBbmltYXRpb24oKSB7XG5cblx0bGV0IGNvbnRleHQgPSBudWxsO1xuXHRsZXQgaXNBbmltYXRpbmcgPSBmYWxzZTtcblx0bGV0IGFuaW1hdGlvbkxvb3AgPSBudWxsO1xuXHRsZXQgcmVxdWVzdElkID0gbnVsbDtcblxuXHRmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKCB0aW1lLCBmcmFtZSApIHtcblxuXHRcdGFuaW1hdGlvbkxvb3AoIHRpbWUsIGZyYW1lICk7XG5cblx0XHRyZXF1ZXN0SWQgPSBjb250ZXh0LnJlcXVlc3RBbmltYXRpb25GcmFtZSggb25BbmltYXRpb25GcmFtZSApO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0c3RhcnQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0aWYgKCBpc0FuaW1hdGluZyA9PT0gdHJ1ZSApIHJldHVybjtcblx0XHRcdGlmICggYW5pbWF0aW9uTG9vcCA9PT0gbnVsbCApIHJldHVybjtcblxuXHRcdFx0cmVxdWVzdElkID0gY29udGV4dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIG9uQW5pbWF0aW9uRnJhbWUgKTtcblxuXHRcdFx0aXNBbmltYXRpbmcgPSB0cnVlO1xuXG5cdFx0fSxcblxuXHRcdHN0b3A6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29udGV4dC5jYW5jZWxBbmltYXRpb25GcmFtZSggcmVxdWVzdElkICk7XG5cblx0XHRcdGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cblx0XHR9LFxuXG5cdFx0c2V0QW5pbWF0aW9uTG9vcDogZnVuY3Rpb24gKCBjYWxsYmFjayApIHtcblxuXHRcdFx0YW5pbWF0aW9uTG9vcCA9IGNhbGxiYWNrO1xuXG5cdFx0fSxcblxuXHRcdHNldENvbnRleHQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnRleHQgPSB2YWx1ZTtcblxuXHRcdH1cblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQXR0cmlidXRlcyggZ2wsIGNhcGFiaWxpdGllcyApIHtcblxuXHRjb25zdCBpc1dlYkdMMiA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMjtcblxuXHRjb25zdCBidWZmZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBjcmVhdGVCdWZmZXIoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHtcblxuXHRcdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmFycmF5O1xuXHRcdGNvbnN0IHVzYWdlID0gYXR0cmlidXRlLnVzYWdlO1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblx0XHRnbC5iaW5kQnVmZmVyKCBidWZmZXJUeXBlLCBidWZmZXIgKTtcblx0XHRnbC5idWZmZXJEYXRhKCBidWZmZXJUeXBlLCBhcnJheSwgdXNhZ2UgKTtcblxuXHRcdGF0dHJpYnV0ZS5vblVwbG9hZENhbGxiYWNrKCk7XG5cblx0XHRsZXQgdHlwZSA9IDUxMjY7XG5cblx0XHRpZiAoIGFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyNjtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5ICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LicgKTtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgKSB7XG5cblx0XHRcdGlmICggYXR0cmlidXRlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRcdFx0dHlwZSA9IDUxMzE7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuJyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0eXBlID0gNTEyMztcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyMjtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgKSB7XG5cblx0XHRcdHR5cGUgPSA1MTI1O1xuXG5cdFx0fSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQzMkFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyNDtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyMDtcblxuXHRcdH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSApIHtcblxuXHRcdFx0dHlwZSA9IDUxMjE7XG5cblx0XHR9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICkge1xuXG5cdFx0XHR0eXBlID0gNTEyMTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRidWZmZXI6IGJ1ZmZlcixcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRieXRlc1BlckVsZW1lbnQ6IGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFxuXHRcdFx0dmVyc2lvbjogYXR0cmlidXRlLnZlcnNpb25cblx0XHR9O1xuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVCdWZmZXIoIGJ1ZmZlciwgYXR0cmlidXRlLCBidWZmZXJUeXBlICkge1xuXG5cdFx0Y29uc3QgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7XG5cdFx0Y29uc3QgdXBkYXRlUmFuZ2UgPSBhdHRyaWJ1dGUudXBkYXRlUmFuZ2U7XG5cblx0XHRnbC5iaW5kQnVmZmVyKCBidWZmZXJUeXBlLCBidWZmZXIgKTtcblxuXHRcdGlmICggdXBkYXRlUmFuZ2UuY291bnQgPT09IC0gMSApIHtcblxuXHRcdFx0Ly8gTm90IHVzaW5nIHVwZGF0ZSByYW5nZXNcblxuXHRcdFx0Z2wuYnVmZmVyU3ViRGF0YSggYnVmZmVyVHlwZSwgMCwgYXJyYXkgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0Z2wuYnVmZmVyU3ViRGF0YSggYnVmZmVyVHlwZSwgdXBkYXRlUmFuZ2Uub2Zmc2V0ICogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQsXG5cdFx0XHRcdFx0YXJyYXksIHVwZGF0ZVJhbmdlLm9mZnNldCwgdXBkYXRlUmFuZ2UuY291bnQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRnbC5idWZmZXJTdWJEYXRhKCBidWZmZXJUeXBlLCB1cGRhdGVSYW5nZS5vZmZzZXQgKiBhcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcblx0XHRcdFx0XHRhcnJheS5zdWJhcnJheSggdXBkYXRlUmFuZ2Uub2Zmc2V0LCB1cGRhdGVSYW5nZS5vZmZzZXQgKyB1cGRhdGVSYW5nZS5jb3VudCApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlUmFuZ2UuY291bnQgPSAtIDE7IC8vIHJlc2V0IHJhbmdlXG5cblx0XHR9XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gZ2V0KCBhdHRyaWJ1dGUgKSB7XG5cblx0XHRpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkgYXR0cmlidXRlID0gYXR0cmlidXRlLmRhdGE7XG5cblx0XHRyZXR1cm4gYnVmZmVycy5nZXQoIGF0dHJpYnV0ZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmUoIGF0dHJpYnV0ZSApIHtcblxuXHRcdGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTtcblxuXHRcdGNvbnN0IGRhdGEgPSBidWZmZXJzLmdldCggYXR0cmlidXRlICk7XG5cblx0XHRpZiAoIGRhdGEgKSB7XG5cblx0XHRcdGdsLmRlbGV0ZUJ1ZmZlciggZGF0YS5idWZmZXIgKTtcblxuXHRcdFx0YnVmZmVycy5kZWxldGUoIGF0dHJpYnV0ZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGUoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHtcblxuXHRcdGlmICggYXR0cmlidXRlLmlzR0xCdWZmZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdGNvbnN0IGNhY2hlZCA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTtcblxuXHRcdFx0aWYgKCAhIGNhY2hlZCB8fCBjYWNoZWQudmVyc2lvbiA8IGF0dHJpYnV0ZS52ZXJzaW9uICkge1xuXG5cdFx0XHRcdGJ1ZmZlcnMuc2V0KCBhdHRyaWJ1dGUsIHtcblx0XHRcdFx0XHRidWZmZXI6IGF0dHJpYnV0ZS5idWZmZXIsXG5cdFx0XHRcdFx0dHlwZTogYXR0cmlidXRlLnR5cGUsXG5cdFx0XHRcdFx0Ynl0ZXNQZXJFbGVtZW50OiBhdHRyaWJ1dGUuZWxlbWVudFNpemUsXG5cdFx0XHRcdFx0dmVyc2lvbjogYXR0cmlidXRlLnZlcnNpb25cblx0XHRcdFx0fSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTtcblxuXHRcdGNvbnN0IGRhdGEgPSBidWZmZXJzLmdldCggYXR0cmlidXRlICk7XG5cblx0XHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0YnVmZmVycy5zZXQoIGF0dHJpYnV0ZSwgY3JlYXRlQnVmZmVyKCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUgKSApO1xuXG5cdFx0fSBlbHNlIGlmICggZGF0YS52ZXJzaW9uIDwgYXR0cmlidXRlLnZlcnNpb24gKSB7XG5cblx0XHRcdHVwZGF0ZUJ1ZmZlciggZGF0YS5idWZmZXIsIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApO1xuXG5cdFx0XHRkYXRhLnZlcnNpb24gPSBhdHRyaWJ1dGUudmVyc2lvbjtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdGdldDogZ2V0LFxuXHRcdHJlbW92ZTogcmVtb3ZlLFxuXHRcdHVwZGF0ZTogdXBkYXRlXG5cblx0fTtcblxufVxuXG5jbGFzcyBQbGFuZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIHdpZHRoU2VnbWVudHMgPSAxLCBoZWlnaHRTZWdtZW50cyA9IDEgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdQbGFuZUdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0d2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50c1xuXHRcdH07XG5cblx0XHRjb25zdCB3aWR0aF9oYWxmID0gd2lkdGggLyAyO1xuXHRcdGNvbnN0IGhlaWdodF9oYWxmID0gaGVpZ2h0IC8gMjtcblxuXHRcdGNvbnN0IGdyaWRYID0gTWF0aC5mbG9vciggd2lkdGhTZWdtZW50cyApO1xuXHRcdGNvbnN0IGdyaWRZID0gTWF0aC5mbG9vciggaGVpZ2h0U2VnbWVudHMgKTtcblxuXHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcblx0XHRjb25zdCBncmlkWTEgPSBncmlkWSArIDE7XG5cblx0XHRjb25zdCBzZWdtZW50X3dpZHRoID0gd2lkdGggLyBncmlkWDtcblx0XHRjb25zdCBzZWdtZW50X2hlaWdodCA9IGhlaWdodCAvIGdyaWRZO1xuXG5cdFx0Ly9cblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpeSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSArKyApIHtcblxuXHRcdFx0Y29uc3QgeSA9IGl5ICogc2VnbWVudF9oZWlnaHQgLSBoZWlnaHRfaGFsZjtcblxuXHRcdFx0Zm9yICggbGV0IGl4ID0gMDsgaXggPCBncmlkWDE7IGl4ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHgsIC0geSwgMCApO1xuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCggMCwgMCwgMSApO1xuXG5cdFx0XHRcdHV2cy5wdXNoKCBpeCAvIGdyaWRYICk7XG5cdFx0XHRcdHV2cy5wdXNoKCAxIC0gKCBpeSAvIGdyaWRZICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Zm9yICggbGV0IGl5ID0gMDsgaXkgPCBncmlkWTsgaXkgKysgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpeCA9IDA7IGl4IDwgZ3JpZFg7IGl4ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGEgPSBpeCArIGdyaWRYMSAqIGl5O1xuXHRcdFx0XHRjb25zdCBiID0gaXggKyBncmlkWDEgKiAoIGl5ICsgMSApO1xuXHRcdFx0XHRjb25zdCBjID0gKCBpeCArIDEgKSArIGdyaWRYMSAqICggaXkgKyAxICk7XG5cdFx0XHRcdGNvbnN0IGQgPSAoIGl4ICsgMSApICsgZ3JpZFgxICogaXk7XG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdGluZGljZXMucHVzaCggYiwgYywgZCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFBsYW5lR2VvbWV0cnkoIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0LCBkYXRhLndpZHRoU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMgKTtcblxuXHR9XG5cbn1cblxudmFyIGFscGhhbWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FMUEhBTUFQXFxuXFx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcXG4jZW5kaWZcIjtcblxudmFyIGFscGhhbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQUxQSEFNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG4jZW5kaWZcIjtcblxudmFyIGFscGhhdGVzdF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9BTFBIQVRFU1RcXG5cXHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDtcXG4jZW5kaWZcIjtcblxudmFyIGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FMUEhBVEVTVFxcblxcdHVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0O1xcbiNlbmRpZlwiO1xuXG52YXIgYW9tYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQU9NQVBcXG5cXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApXFxuXFx0XFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBhb21hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0FPTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxuXFx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcXG4jZW5kaWZcIjtcblxudmFyIGJlZ2luX3ZlcnRleCA9IFwidmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7XCI7XG5cbnZhciBiZWdpbm5vcm1hbF92ZXJ0ZXggPSBcInZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XFxuI2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0dmVjMyBvYmplY3RUYW5nZW50ID0gdmVjMyggdGFuZ2VudC54eXogKTtcXG4jZW5kaWZcIjtcblxudmFyIGJzZGZzID0gXCJ2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7XFxuXFx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XFxufVxcbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xcblxcdGZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTtcXG5cXHRyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApO1xcbn1cXG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XFxuXFx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xcblxcdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcXG5cXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XFxuXFx0cmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApO1xcbn1cXG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xcblxcdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcXG5cXHRmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7XFxuXFx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XFxufVxcbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdGZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7XFxuXFx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcXG5cXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcXG5cXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XFxuXFx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcXG5cXHR2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7XFxuXFx0ZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xcblxcdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XFxuXFx0cmV0dXJuIEYgKiAoIFYgKiBEICk7XFxufVxcbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcXG5cXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcXG5cXHRjb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFO1xcblxcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XFxuXFx0dmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xcblxcdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztcXG5cXHRyZXR1cm4gdXY7XFxufVxcbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xcblxcdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcXG5cXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XFxufVxcbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xcblxcdGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xcblxcdGZsb2F0IHkgPSBhYnMoIHggKTtcXG5cXHRmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xcblxcdGZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XFxuXFx0ZmxvYXQgdiA9IGEgLyBiO1xcblxcdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcXG5cXHRyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XFxufVxcbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xcblxcdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XFxuXFx0dmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcXG5cXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xcblxcdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XFxuXFx0dmVjMyBUMSwgVDI7XFxuXFx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcXG5cXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XFxuXFx0bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcXG5cXHR2ZWMzIGNvb3Jkc1sgNCBdO1xcblxcdGNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XFxuXFx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcXG5cXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xcblxcdGNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XFxuXFx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XFxuXFx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XFxuXFx0Y29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XFxuXFx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XFxuXFx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XFxuXFx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xcblxcdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcXG5cXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XFxuXFx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xcblxcdGZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xcblxcdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcXG59XFxuZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHtcXG5cXHRyZXR1cm4gMC4yNTtcXG59XFxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xcblxcdHJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApO1xcbn1cXG52ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7XFxuXFx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcXG5cXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XFxuXFx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcXG5cXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcXG5cXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xcblxcdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcXG5cXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcXG59XFxuI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApXFxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xcblxcdGZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7XFxuXFx0ZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTtcXG5cXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XFxuXFx0ZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcXG5cXHRyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcXG59XFxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XFxuXFx0cmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7XFxufVxcbnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHtcXG5cXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xcblxcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7XFxuXFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xcblxcdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcXG5cXHRmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTtcXG5cXHRmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTtcXG5cXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcXG59XFxuI2VuZGlmXCI7XG5cbnZhciBidW1wbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfQlVNUE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XFxuXFx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XFxuXFx0dmVjMiBkSGR4eV9md2QoKSB7XFxuXFx0XFx0dmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApO1xcblxcdFxcdHZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTtcXG5cXHRcXHRmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7XFxuXFx0XFx0ZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7XFxuXFx0XFx0ZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7XFxuXFx0XFx0cmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7XFxuXFx0fVxcblxcdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XFxuXFx0XFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xcblxcdFxcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcXG5cXHRcXHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xcblxcdFxcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcXG5cXHRcXHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XFxuXFx0XFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XFxuXFx0XFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XFxuXFx0XFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudCA9IFwiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXFxuXFx0dmVjNCBwbGFuZTtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xcblxcdFxcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcXG5cXHRcXHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xcblxcdFxcdGJvb2wgY2xpcHBlZCA9IHRydWU7XFxuXFx0XFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdFxcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcXG5cXHRcXHRcXHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XFxuXFx0XFx0XFx0Y2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xcblxcdFxcdH1cXG5cXHRcXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcblxcdFxcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudCA9IFwiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXFxuXFx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XFxuXFx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XFxuI2VuZGlmXCI7XG5cbnZhciBjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXggPSBcIiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxcblxcdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xcbiNlbmRpZlwiO1xuXG52YXIgY2xpcHBpbmdfcGxhbmVzX3ZlcnRleCA9IFwiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXFxuXFx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuI2VuZGlmXCI7XG5cbnZhciBjb2xvcl9mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXFxuXFx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxcblxcdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xcbiNlbmRpZlwiO1xuXG52YXIgY29sb3JfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXFxuXFx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxcblxcdHZhcnlpbmcgdmVjMyB2Q29sb3I7XFxuI2VuZGlmXCI7XG5cbnZhciBjb2xvcl9wYXJzX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXFxuXFx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcXG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXFxuXFx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcXG4jZW5kaWZcIjtcblxudmFyIGNvbG9yX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXFxuXFx0dkNvbG9yID0gdmVjNCggMS4wICk7XFxuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxcblxcdHZDb2xvciA9IHZlYzMoIDEuMCApO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ09MT1JcXG5cXHR2Q29sb3IgKj0gY29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXFxuXFx0dkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejtcXG4jZW5kaWZcIjtcblxudmFyIGNvbW1vbiA9IFwiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2XFxuI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NlxcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcXG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzVcXG4jZGVmaW5lIEVQU0lMT04gMWUtNlxcbiNpZm5kZWYgc2F0dXJhdGVcXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcXG4jZW5kaWZcXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXFxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxcbmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfVxcbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cXG5mbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cXG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxcbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XFxuXFx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xcblxcdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xcblxcdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xcbn1cXG4jaWZkZWYgSElHSF9QUkVDSVNJT05cXG5cXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxcbiNlbHNlXFxuXFx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkge1xcblxcdFxcdGZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7XFxuXFx0XFx0cmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50O1xcblxcdH1cXG4jZW5kaWZcXG5zdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XFxuXFx0dmVjMyBjb2xvcjtcXG5cXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRib29sIHZpc2libGU7XFxufTtcXG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xcblxcdHZlYzMgZGlyZWN0RGlmZnVzZTtcXG5cXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xcblxcdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xcblxcdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcXG59O1xcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcXG5cXHR2ZWMzIHBvc2l0aW9uO1xcblxcdHZlYzMgbm9ybWFsO1xcblxcdHZlYzMgdmlld0RpcjtcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xcbiNlbmRpZlxcbn07XFxudmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcXG5cXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcXG59XFxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XFxuXFx0cmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7XFxufVxcbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xcblxcdG1hdDMgdG1wO1xcblxcdHRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xcblxcdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xcblxcdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xcblxcdHJldHVybiB0bXA7XFxufVxcbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XFxuXFx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xcblxcdHJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApO1xcbn1cXG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcXG5cXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XFxufVxcbnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7XFxuXFx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XFxuXFx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xcblxcdHJldHVybiB2ZWMyKCB1LCB2ICk7XFxufVwiO1xuXG52YXIgY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50ID0gXCIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxcblxcdCNkZWZpbmUgY3ViZVVWX21heE1pcExldmVsIDguMFxcblxcdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxcblxcdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXFxuXFx0I2RlZmluZSBjdWJlVVZfbWluVGlsZVNpemUgMTYuMFxcblxcdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xcblxcdFxcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcXG5cXHRcXHRmbG9hdCBmYWNlID0gLSAxLjA7XFxuXFx0XFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xcblxcdFxcdFxcdGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueSApXFxuXFx0XFx0XFx0XFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xcblxcdFxcdFxcdGVsc2VcXG5cXHRcXHRcXHRcXHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRpZiAoIGFic0RpcmVjdGlvbi56ID4gYWJzRGlyZWN0aW9uLnkgKVxcblxcdFxcdFxcdFxcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcXG5cXHRcXHRcXHRlbHNlXFxuXFx0XFx0XFx0XFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gZmFjZTtcXG5cXHR9XFxuXFx0dmVjMiBnZXRVViggdmVjMyBkaXJlY3Rpb24sIGZsb2F0IGZhY2UgKSB7XFxuXFx0XFx0dmVjMiB1djtcXG5cXHRcXHRpZiAoIGZhY2UgPT0gMC4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XFxuXFx0XFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XFxuXFx0XFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XFxuXFx0XFx0XFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueiApO1xcblxcdFxcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xcblxcdFxcdFxcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcXG5cXHRcXHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHR1diA9IHZlYzIoIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueiApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gMC41ICogKCB1diArIDEuMCApO1xcblxcdH1cXG5cXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xcblxcdFxcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcXG5cXHRcXHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XFxuXFx0XFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xcblxcdFxcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XFxuXFx0XFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcXG5cXHRcXHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xcblxcdFxcdGlmICggZmFjZSA+IDIuMCApIHtcXG5cXHRcXHRcXHR1di55ICs9IGZhY2VTaXplO1xcblxcdFxcdFxcdGZhY2UgLT0gMy4wO1xcblxcdFxcdH1cXG5cXHRcXHR1di54ICs9IGZhY2UgKiBmYWNlU2l6ZTtcXG5cXHRcXHRpZiAoIG1pcEludCA8IGN1YmVVVl9tYXhNaXBMZXZlbCApIHtcXG5cXHRcXHRcXHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcXG5cXHRcXHR9XFxuXFx0XFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XFxuXFx0XFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcXG5cXHRcXHR1diAqPSB0ZXhlbFNpemU7XFxuXFx0XFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcXG5cXHR9XFxuXFx0I2RlZmluZSByMCAxLjBcXG5cXHQjZGVmaW5lIHYwIDAuMzM5XFxuXFx0I2RlZmluZSBtMCAtIDIuMFxcblxcdCNkZWZpbmUgcjEgMC44XFxuXFx0I2RlZmluZSB2MSAwLjI3NlxcblxcdCNkZWZpbmUgbTEgLSAxLjBcXG5cXHQjZGVmaW5lIHI0IDAuNFxcblxcdCNkZWZpbmUgdjQgMC4wNDZcXG5cXHQjZGVmaW5lIG00IDIuMFxcblxcdCNkZWZpbmUgcjUgMC4zMDVcXG5cXHQjZGVmaW5lIHY1IDAuMDE2XFxuXFx0I2RlZmluZSBtNSAzLjBcXG5cXHQjZGVmaW5lIHI2IDAuMjFcXG5cXHQjZGVmaW5lIHY2IDAuMDAzOFxcblxcdCNkZWZpbmUgbTYgNC4wXFxuXFx0ZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRcXHRmbG9hdCBtaXAgPSAwLjA7XFxuXFx0XFx0aWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7XFxuXFx0XFx0XFx0bWlwID0gKCByMCAtIHJvdWdobmVzcyApICogKCBtMSAtIG0wICkgLyAoIHIwIC0gcjEgKSArIG0wO1xcblxcdFxcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNCApIHtcXG5cXHRcXHRcXHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XFxuXFx0XFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xcblxcdFxcdFxcdG1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDtcXG5cXHRcXHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7XFxuXFx0XFx0XFx0bWlwID0gKCByNSAtIHJvdWdobmVzcyApICogKCBtNiAtIG01ICkgLyAoIHI1IC0gcjYgKSArIG01O1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XFx0XFx0fVxcblxcdFxcdHJldHVybiBtaXA7XFxuXFx0fVxcblxcdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRcXHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XFxuXFx0XFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcXG5cXHRcXHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XFxuXFx0XFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xcblxcdFxcdGlmICggbWlwRiA9PSAwLjAgKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHR2ZWMzIGNvbG9yMSA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICsgMS4wICk7XFxuXFx0XFx0XFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XFxuXFx0XFx0fVxcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGRlZmF1bHRub3JtYWxfdmVydGV4ID0gXCJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xcblxcdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XFxuXFx0dHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xcblxcdHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xcbiNlbmRpZlxcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XFxuI2lmZGVmIEZMSVBfU0lERURcXG5cXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xcblxcdCNpZmRlZiBGTElQX1NJREVEXFxuXFx0XFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xcblxcdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XFxuXFx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xcbiNlbmRpZlwiO1xuXG52YXIgZGlzcGxhY2VtZW50bWFwX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcXG5cXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xcbiNlbmRpZlwiO1xuXG52YXIgZW1pc3NpdmVtYXBfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcXG5cXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcXG5cXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XFxuI2VuZGlmXCI7XG5cbnZhciBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBlbmNvZGluZ3NfZnJhZ21lbnQgPSBcImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1wiO1xuXG52YXIgZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQgPSBcInZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XFxuXFx0cmV0dXJuIHZhbHVlO1xcbn1cXG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcXG5cXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XFxufVwiO1xuXG52YXIgZW52bWFwX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdCNpZmRlZiBFTlZfV09STERQT1NcXG5cXHRcXHR2ZWMzIGNhbWVyYVRvRnJhZztcXG5cXHRcXHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xcblxcdFxcdFxcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRjYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTtcXG5cXHRcXHR9XFxuXFx0XFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdFxcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXFxuXFx0XFx0XFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xcblxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2Vsc2VcXG5cXHRcXHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxcblxcdFxcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcXG5cXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcXG5cXHRcXHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcXG5cXHQjZWxzZVxcblxcdFxcdHZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTtcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXFxuXFx0XFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xcblxcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxcblxcdFxcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xcblxcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxcblxcdFxcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9FTlZNQVBcXG5cXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcXG5cXHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XFxuXFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcXG5cXHRcXHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcXG5cXHQjZWxzZVxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcXG5cXHQjZW5kaWZcXG5cXHRcXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xcblxcdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXFxuXFx0XFx0I2RlZmluZSBFTlZfV09STERQT1NcXG5cXHQjZW5kaWZcXG5cXHQjaWZkZWYgRU5WX1dPUkxEUE9TXFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcblxcdFxcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xcblxcdCNlbHNlXFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgZW52bWFwX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HIClcXG5cXHRcXHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBFTlZfV09STERQT1NcXG5cXHRcXHRcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuXFx0I2Vsc2VcXG5cXHRcXHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBlbnZtYXBfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0VOVk1BUFxcblxcdCNpZmRlZiBFTlZfV09STERQT1NcXG5cXHRcXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xcblxcdCNlbHNlXFxuXFx0XFx0dmVjMyBjYW1lcmFUb1ZlcnRleDtcXG5cXHRcXHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xcblxcdFxcdFxcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XFxuXFx0XFx0fVxcblxcdFxcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xcblxcdFxcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXFxuXFx0XFx0XFx0dlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGZvZ192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRk9HXFxuXFx0dkZvZ0RlcHRoID0gLSBtdlBvc2l0aW9uLno7XFxuI2VuZGlmXCI7XG5cbnZhciBmb2dfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfRk9HXFxuXFx0dmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7XFxuI2VuZGlmXCI7XG5cbnZhciBmb2dfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfRk9HXFxuXFx0I2lmZGVmIEZPR19FWFAyXFxuXFx0XFx0ZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIHZGb2dEZXB0aCApO1xcblxcdCNlbmRpZlxcblxcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcXG4jZW5kaWZcIjtcblxudmFyIGZvZ19wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0ZPR1xcblxcdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcXG5cXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcXG5cXHQjaWZkZWYgRk9HX0VYUDJcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XFxuXFx0I2Vsc2VcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBmb2dGYXI7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0dSQURJRU5UTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XFxuI2VuZGlmXFxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xcblxcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuXFx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcXG5cXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXFxuXFx0XFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xcblxcdCNlbHNlXFxuXFx0XFx0cmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTtcXG5cXHQjZW5kaWZcXG59XCI7XG5cbnZhciBsaWdodG1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9MSUdIVE1BUFxcblxcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcXG5cXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XFxuXFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXFxuXFx0XFx0bGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJO1xcblxcdCNlbmRpZlxcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodG1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0xJR0hUTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XFxuXFx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19sYW1iZXJ0X3ZlcnRleCA9IFwidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XFxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcXG5nZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6O1xcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcXG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcXG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcXG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcXG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcXG5iYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XFxudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcXG52SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG5cXHR2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7XFxuXFx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xcbiNlbmRpZlxcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XFxuZmxvYXQgZG90Tkw7XFxudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxudkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcXG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcblxcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcXG5cXHR2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7XFxuI2VuZGlmXFxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0Z2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xcblxcdFxcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdFxcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xcblxcdFxcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0XFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xcblxcdFxcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcXG5cXHRcXHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRcXHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcXG5cXHRcXHQjaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0XFx0XFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHR2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApO1xcblxcdFxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRcXHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX3BhcnNfYmVnaW4gPSBcInVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93O1xcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xcbnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7XFxuXFx0ZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcXG5cXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xcblxcdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcXG5cXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XFxuXFx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xcblxcdHJldHVybiByZXN1bHQ7XFxufVxcbnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcXG5cXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XFxuXFx0cmV0dXJuIGlycmFkaWFuY2U7XFxufVxcbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcXG5cXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcXG5cXHRyZXR1cm4gaXJyYWRpYW5jZTtcXG59XFxuZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XFxuXFx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcXG5cXHRcXHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XFxuXFx0XFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcXG5cXHRcXHRcXHRkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcXG5cXHQjZWxzZVxcblxcdFxcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcXG5cXHRcXHRcXHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gMS4wO1xcblxcdCNlbmRpZlxcbn1cXG5mbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHtcXG5cXHRyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7XFxufVxcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcXG5cXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XFxuXFx0XFx0dmVjMyBkaXJlY3Rpb247XFxuXFx0XFx0dmVjMyBjb2xvcjtcXG5cXHR9O1xcblxcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcXG5cXHR2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xcblxcdFxcdGxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcXG5cXHRcXHRsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcXG5cXHRcXHRsaWdodC52aXNpYmxlID0gdHJ1ZTtcXG5cXHR9XFxuI2VuZGlmXFxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IFBvaW50TGlnaHQge1xcblxcdFxcdHZlYzMgcG9zaXRpb247XFxuXFx0XFx0dmVjMyBjb2xvcjtcXG5cXHRcXHRmbG9hdCBkaXN0YW5jZTtcXG5cXHRcXHRmbG9hdCBkZWNheTtcXG5cXHR9O1xcblxcdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xcblxcdHZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XFxuXFx0XFx0dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xcblxcdFxcdGxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xcblxcdFxcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcXG5cXHRcXHRsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7XFxuXFx0XFx0bGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xcblxcdFxcdGxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XFxuXFx0fVxcbiNlbmRpZlxcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IFNwb3RMaWdodCB7XFxuXFx0XFx0dmVjMyBwb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGRpcmVjdGlvbjtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdFxcdGZsb2F0IGRpc3RhbmNlO1xcblxcdFxcdGZsb2F0IGRlY2F5O1xcblxcdFxcdGZsb2F0IGNvbmVDb3M7XFxuXFx0XFx0ZmxvYXQgcGVudW1icmFDb3M7XFxuXFx0fTtcXG5cXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcXG5cXHR2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xcblxcdFxcdHZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xcblxcdFxcdGxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xcblxcdFxcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcXG5cXHRcXHRmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7XFxuXFx0XFx0aWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xcblxcdFxcdFxcdGxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uO1xcblxcdFxcdFxcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XFxuXFx0XFx0XFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdGxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XFxuXFx0XFx0XFx0bGlnaHQudmlzaWJsZSA9IGZhbHNlO1xcblxcdFxcdH1cXG5cXHR9XFxuI2VuZGlmXFxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxcblxcdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcXG5cXHRcXHR2ZWMzIGNvbG9yO1xcblxcdFxcdHZlYzMgcG9zaXRpb247XFxuXFx0XFx0dmVjMyBoYWxmV2lkdGg7XFxuXFx0XFx0dmVjMyBoYWxmSGVpZ2h0O1xcblxcdH07XFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XFx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7XFxuXFx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xcbiNlbmRpZlxcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXFxuXFx0c3RydWN0IEhlbWlzcGhlcmVMaWdodCB7XFxuXFx0XFx0dmVjMyBkaXJlY3Rpb247XFxuXFx0XFx0dmVjMyBza3lDb2xvcjtcXG5cXHRcXHR2ZWMzIGdyb3VuZENvbG9yO1xcblxcdH07XFxuXFx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XFxuXFx0dmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcXG5cXHRcXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XFxuXFx0XFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcXG5cXHRcXHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xcblxcdFxcdHJldHVybiBpcnJhZGlhbmNlO1xcblxcdH1cXG4jZW5kaWZcIjtcblxudmFyIGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApXFxuXFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cXG5cXHRcXHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xcblxcdFxcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcXG5cXHRcXHRcXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0XFx0XFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xcblxcdFxcdFxcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHJldHVybiB2ZWMzKCAwLjAgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuXFx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xcblxcdFxcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcXG5cXHRcXHRcXHR2ZWMzIHJlZmxlY3RWZWM7XFxuXFx0XFx0XFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cXG5cXHRcXHRcXHRcXHRyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTtcXG5cXHRcXHRcXHRcXHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xcblxcdFxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0XFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcXG5cXHRcXHRcXHQjZW5kaWZcXG5cXHRcXHRcXHRyZWZsZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApO1xcblxcdFxcdFxcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xcblxcdFxcdFxcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRyZXR1cm4gdmVjMyggMC4wICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcbiNlbmRpZlwiO1xuXG52YXIgbGlnaHRzX3Rvb25fZnJhZ21lbnQgPSBcIlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcXG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1wiO1xuXG52YXIgbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudCA9IFwidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuc3RydWN0IFRvb25NYXRlcmlhbCB7XFxuXFx0dmVjMyBkaWZmdXNlQ29sb3I7XFxufTtcXG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbiNkZWZpbmUgUkVfRGlyZWN0XFx0XFx0XFx0XFx0UkVfRGlyZWN0X1Rvb25cXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVxcdFxcdFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uXFxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXFx0KDApXCI7XG5cbnZhciBsaWdodHNfcGhvbmdfZnJhZ21lbnQgPSBcIkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcXG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcXG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcXG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcIjtcblxudmFyIGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50ID0gXCJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcXG5cXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcXG5cXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XFxuXFx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XFxuXFx0ZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcXG59O1xcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XFxuXFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XFxuXFx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcXG59XFxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcXG59XFxuI2RlZmluZSBSRV9EaXJlY3RcXHRcXHRcXHRcXHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXFx0XFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcXHQoMClcIjtcblxudmFyIGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudCA9IFwiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcXG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcXG52ZWMzIGR4eSA9IG1heCggYWJzKCBkRmR4KCBnZW9tZXRyeU5vcm1hbCApICksIGFicyggZEZkeSggZ2VvbWV0cnlOb3JtYWwgKSApICk7XFxuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XFxubWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcXG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLnJvdWdobmVzcywgMS4wICk7XFxuI2lmZGVmIElPUlxcblxcdCNpZmRlZiBTUEVDVUxBUlxcblxcdFxcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gc3BlY3VsYXJJbnRlbnNpdHk7XFxuXFx0XFx0dmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gc3BlY3VsYXJDb2xvcjtcXG5cXHRcXHQjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQXFxuXFx0XFx0XFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcXG5cXHRcXHRcXHRzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTtcXG5cXHQjZWxzZVxcblxcdFxcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xcblxcdFxcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xcblxcdFxcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xcblxcdCNlbmRpZlxcblxcdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XFxuI2Vsc2VcXG5cXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xcblxcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRGMCA9IHZlYzMoIDAuMDQgKTtcXG5cXHRtYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcXG5cXHRcXHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXFxuXFx0XFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xcblxcdCNlbmRpZlxcblxcdG1hdGVyaWFsLmNsZWFyY29hdCA9IHNhdHVyYXRlKCBtYXRlcmlhbC5jbGVhcmNvYXQgKTtcXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XFxuXFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xcblxcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1NIRUVOXFxuXFx0bWF0ZXJpYWwuc2hlZW5Db2xvciA9IHNoZWVuQ29sb3I7XFxuXFx0I2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXFxuXFx0XFx0bWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjtcXG5cXHQjZW5kaWZcXG5cXHRtYXRlcmlhbC5zaGVlblJvdWdobmVzcyA9IGNsYW1wKCBzaGVlblJvdWdobmVzcywgMC4wNywgMS4wICk7XFxuXFx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxcblxcdFxcdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCA9IFwic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xcblxcdHZlYzMgZGlmZnVzZUNvbG9yO1xcblxcdGZsb2F0IHJvdWdobmVzcztcXG5cXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XFxuXFx0ZmxvYXQgc3BlY3VsYXJGOTA7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRmbG9hdCBjbGVhcmNvYXQ7XFxuXFx0XFx0ZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xcblxcdFxcdHZlYzMgY2xlYXJjb2F0RjA7XFxuXFx0XFx0ZmxvYXQgY2xlYXJjb2F0RjkwO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfU0hFRU5cXG5cXHRcXHR2ZWMzIHNoZWVuQ29sb3I7XFxuXFx0XFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XFxuXFx0I2VuZGlmXFxufTtcXG52ZWMzIGNsZWFyY29hdFNwZWN1bGFyID0gdmVjMyggMC4wICk7XFxudmVjMyBzaGVlblNwZWN1bGFyID0gdmVjMyggMC4wICk7XFxuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XFxuXFx0ZmxvYXQgcjIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XFxuXFx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcXG5cXHRmbG9hdCBiID0gcm91Z2huZXNzIDwgMC4yNSA/IDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2IDogMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzI7XFxuXFx0ZmxvYXQgREcgPSBleHAoIGEgKiBkb3ROViArIGIgKSArICggcm91Z2huZXNzIDwgMC4yNSA/IDAuMCA6IDAuMSAqICggcm91Z2huZXNzIC0gMC4yNSApICk7XFxuXFx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcXG59XFxudmVjMiBERkdBcHByb3goIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XFxuXFx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XFxuXFx0Y29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XFxuXFx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcXG5cXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcXG5cXHR2ZWMyIGZhYiA9IHZlYzIoIC0gMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XFxuXFx0cmV0dXJuIGZhYjtcXG59XFxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcXG5cXHR2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcXG5cXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcXG59XFxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XFxuXFx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XFxuXFx0dmVjMyBGc3NFc3MgPSBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xcblxcdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XFxuXFx0ZmxvYXQgRW1zID0gMS4wIC0gRXNzO1xcblxcdHZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5O1xcdHZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApO1xcblxcdHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xcblxcdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XFxufVxcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcXG5cXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRcXHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcXG5cXHRcXHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xcblxcdFxcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcXG5cXHRcXHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xcblxcdFxcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcXG5cXHRcXHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xcblxcdFxcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnJvdWdobmVzcztcXG5cXHRcXHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcXG5cXHRcXHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XFx0XFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xcblxcdFxcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcXG5cXHRcXHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XFxuXFx0XFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcXG5cXHRcXHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcXG5cXHRcXHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcXG5cXHRcXHRtYXQzIG1JbnYgPSBtYXQzKFxcblxcdFxcdFxcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcXG5cXHRcXHRcXHR2ZWMzKCAgICAwLCAxLCAgICAwICksXFxuXFx0XFx0XFx0dmVjMyggdDEueiwgMCwgdDEudyApXFxuXFx0XFx0KTtcXG5cXHRcXHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcXG5cXHR9XFxuI2VuZGlmXFxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xcblxcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRmbG9hdCBkb3ROTGNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xcblxcdFxcdHZlYzMgY2NJcnJhZGlhbmNlID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xcblxcdFxcdGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TSEVFTlxcblxcdFxcdHNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU2hlZW4oIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zaGVlbkNvbG9yLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xcblxcdCNlbmRpZlxcblxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcXG5cXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xcbn1cXG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XFxufVxcbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0XFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TSEVFTlxcblxcdFxcdHNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLnNoZWVuQ29sb3IgKiBJQkxTaGVlbkJSREYoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG5cXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XFxuXFx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcXG5cXHR2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XFxuXFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XFxufVxcbiNkZWZpbmUgUkVfRGlyZWN0XFx0XFx0XFx0XFx0UkVfRGlyZWN0X1BoeXNpY2FsXFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcXHRcXHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVxcdFxcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclxcdFxcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XFxuXFx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcXG59XCI7XG5cbnZhciBsaWdodHNfZnJhZ21lbnRfYmVnaW4gPSBcIlxcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XFxuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XFxuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcXG4jZW5kaWZcXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcXG5cXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XFxuXFx0I2VuZGlmXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XFxuXFx0XFx0Z2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xcblxcdFxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxcblxcdFxcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG4jZW5kaWZcXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcXG5cXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xcblxcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xcblxcdCNlbmRpZlxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XFxuXFx0XFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xcblxcdFxcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcXG5cXHRcXHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcXG5cXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XFxuXFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xcblxcdCNlbmRpZlxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcXG5cXHRcXHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XFxuXFx0XFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxcblxcdFxcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xcblxcdFxcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuI2VuZGlmXFxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcXG5cXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xcblxcdFxcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xcblxcdFxcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcblxcdH1cXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxcblxcdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XFxuXFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXFxuXFx0XFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdFxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcXG5cXHRcXHRcXHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XFxuXFx0XFx0fVxcblxcdFxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxcblxcdHZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XFxuI2VuZGlmXCI7XG5cbnZhciBsaWdodHNfZnJhZ21lbnRfbWFwcyA9IFwiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXFxuXFx0I2lmZGVmIFVTRV9MSUdIVE1BUFxcblxcdFxcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcXG5cXHRcXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XFxuXFx0XFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXFxuXFx0XFx0XFx0bGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdGlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xcblxcdCNlbmRpZlxcblxcdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcXG5cXHRcXHRpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApO1xcblxcdCNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXFxuXFx0cmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XFxuXFx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcXG5cXHRcXHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGxpZ2h0c19mcmFnbWVudF9lbmQgPSBcIiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxcblxcdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcXG5cXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcXG4jZW5kaWZcIjtcblxudmFyIGxvZ2RlcHRoYnVmX2ZyYWdtZW50ID0gXCIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXFxuXFx0Z2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41O1xcbiNlbmRpZlwiO1xuXG52YXIgbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxcblxcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcXG5cXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XFxuXFx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcXG4jZW5kaWZcIjtcblxudmFyIGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4ID0gXCIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXFxuXFx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcXG5cXHRcXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XFxuXFx0XFx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcXG5cXHQjZWxzZVxcblxcdFxcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGxvZ2RlcHRoYnVmX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxcblxcdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXFxuXFx0XFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XFxuXFx0XFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHtcXG5cXHRcXHRcXHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XFxuXFx0XFx0XFx0Z2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53O1xcblxcdFxcdH1cXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIG1hcF9mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9NQVBcXG5cXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XFxuXFx0I2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFXFxuXFx0XFx0c2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7XFxuXFx0I2VuZGlmXFxuXFx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XFxuI2VuZGlmXCI7XG5cbnZhciBtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9NQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBtYXBfcGFydGljbGVfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcXG5cXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01BUFxcblxcdGRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0FMUEhBTUFQXFxuXFx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nO1xcbiNlbmRpZlwiO1xuXG52YXIgbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQgPSBcIiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcXG5cXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9BTFBIQU1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgbWV0YWxuZXNzbWFwX2ZyYWdtZW50ID0gXCJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcXG5cXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xcblxcdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xcbiNlbmRpZlwiO1xuXG52YXIgbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbiNlbmRpZlwiO1xuXG52YXIgbW9ycGhub3JtYWxfdmVydGV4ID0gXCIjaWZkZWYgVVNFX01PUlBITk9STUFMU1xcblxcdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XFxuXFx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXFxuXFx0XFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xcblxcdFxcdFxcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xcblxcdFxcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcXG5cXHRcXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XFxuXFx0XFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXFxuXFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XFxuXFx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdO1xcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTtcXG5cXHRcXHR1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7XFxuXFx0XFx0dmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHtcXG5cXHRcXHRcXHRmbG9hdCB0ZXhlbEluZGV4ID0gZmxvYXQoIHZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICk7XFxuXFx0XFx0XFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xcblxcdFxcdFxcdGZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XFxuXFx0XFx0XFx0dmVjMyBtb3JwaFVWID0gdmVjMyggKCB4ICsgMC41ICkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54LCB5IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueSwgbW9ycGhUYXJnZXRJbmRleCApO1xcblxcdFxcdFxcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xcblxcdFxcdH1cXG5cXHQjZWxzZVxcblxcdFxcdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xcblxcdFxcdFxcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbW9ycGh0YXJnZXRfdmVydGV4ID0gXCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xcblxcdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcXG5cXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcXG5cXHRcXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7XFxuXFx0XFx0XFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXFxuXFx0XFx0XFx0XFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xcblxcdFxcdFxcdCNlbHNlXFxuXFx0XFx0XFx0XFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xcblxcdFxcdFxcdCNlbmRpZlxcblxcdFxcdH1cXG5cXHQjZWxzZVxcblxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xcblxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xcblxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xcblxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xcblxcdFxcdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xcblxcdFxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xcblxcdFxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xcblxcdFxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xcblxcdFxcdFxcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xcblxcdFxcdCNlbmRpZlxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsX2ZyYWdtZW50X2JlZ2luID0gXCJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcXG4jaWZkZWYgRkxBVF9TSEFERURcXG5cXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcXG5cXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcXG5cXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcXG4jZWxzZVxcblxcdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xcblxcdFxcdHZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XFxuXFx0XFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdFxcdHRhbmdlbnQgPSB0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcXG5cXHRcXHRcXHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xcblxcdFxcdCNlbmRpZlxcblxcdFxcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxcblxcdFxcdFxcdG1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0I2VuZGlmXFxuI2VuZGlmXFxudmVjMyBnZW9tZXRyeU5vcm1hbCA9IG5vcm1hbDtcIjtcblxudmFyIG5vcm1hbF9mcmFnbWVudF9tYXBzID0gXCIjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXFxuXFx0bm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcXG5cXHQjaWZkZWYgRkxJUF9TSURFRFxcblxcdFxcdG5vcm1hbCA9IC0gbm9ybWFsO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xcblxcdCNlbmRpZlxcblxcdG5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XFxuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXFxuXFx0dmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcXG5cXHRtYXBOLnh5ICo9IG5vcm1hbFNjYWxlO1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcXG5cXHQjZWxzZVxcblxcdFxcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApO1xcblxcdCNlbmRpZlxcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcXG5cXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcXG4jZW5kaWZcIjtcblxudmFyIG5vcm1hbF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xcblxcdFxcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsX3BhcnNfdmVydGV4ID0gXCIjaWZuZGVmIEZMQVRfU0hBREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xcblxcdFxcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgbm9ybWFsX3ZlcnRleCA9IFwiI2lmbmRlZiBGTEFUX1NIQURFRFxcblxcdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XFxuXFx0I2lmZGVmIFVTRV9UQU5HRU5UXFxuXFx0XFx0dlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xcblxcdFxcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBub3JtYWxtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9OT1JNQUxNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxuXFx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xcbiNlbmRpZlxcbiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcXG5cXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xcbiNlbmRpZlxcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXFxuXFx0dmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkge1xcblxcdFxcdHZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7XFxuXFx0XFx0dmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTtcXG5cXHRcXHR2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApO1xcblxcdFxcdHZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7XFxuXFx0XFx0dmVjMyBOID0gc3VyZl9ub3JtO1xcblxcdFxcdHZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7XFxuXFx0XFx0dmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTtcXG5cXHRcXHR2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54O1xcblxcdFxcdHZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7XFxuXFx0XFx0ZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTtcXG5cXHRcXHRmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTtcXG5cXHRcXHRyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTtcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luID0gXCIjaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdHZlYzMgY2xlYXJjb2F0Tm9ybWFsID0gZ2VvbWV0cnlOb3JtYWw7XFxuI2VuZGlmXCI7XG5cbnZhciBjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHMgPSBcIiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxcblxcdHZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XFxuXFx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcXG5cXHQjaWZkZWYgVVNFX1RBTkdFTlRcXG5cXHRcXHRjbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7XFxuXFx0I2Vsc2VcXG5cXHRcXHRjbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcIjtcblxudmFyIGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxcblxcdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwO1xcblxcdHVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTtcXG4jZW5kaWZcIjtcblxudmFyIG91dHB1dF9mcmFnbWVudCA9IFwiI2lmZGVmIE9QQVFVRVxcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XFxuI2VuZGlmXFxuZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcIjtcblxudmFyIHBhY2tpbmcgPSBcInZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcXG5cXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcXG59XFxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XFxuXFx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XFxufVxcbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XFxuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTtcXG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcXG5jb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjtcXG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcXG5cXHR2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTtcXG5cXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1xcdHJldHVybiByICogUGFja1Vwc2NhbGU7XFxufVxcbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XFxuXFx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xcbn1cXG52ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkge1xcblxcdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcXG5cXHRyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyApO1xcbn1cXG52ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7XFxuXFx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XFxufVxcbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xcbn1cXG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XFxuXFx0cmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyO1xcbn1cXG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcXG5cXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcXG59XFxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XFxuXFx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XFxufVwiO1xuXG52YXIgcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudCA9IFwiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcXG5cXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlwiO1xuXG52YXIgcHJvamVjdF92ZXJ0ZXggPSBcInZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcXG5cXHRtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xcbiNlbmRpZlxcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xcbmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XCI7XG5cbnZhciBkaXRoZXJpbmdfZnJhZ21lbnQgPSBcIiNpZmRlZiBESVRIRVJJTkdcXG5cXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XFxuI2VuZGlmXCI7XG5cbnZhciBkaXRoZXJpbmdfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIERJVEhFUklOR1xcblxcdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdFxcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcXG5cXHRcXHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xcblxcdFxcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XFxuXFx0XFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciByb3VnaG5lc3NtYXBfZnJhZ21lbnQgPSBcImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcXG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxcblxcdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XFxuXFx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XFxuI2VuZGlmXCI7XG5cbnZhciByb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCA9IFwiI2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdHZlYzIgc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHR9O1xcblxcdFxcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuXFx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcXG5cXHRcXHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcXG5cXHR9XFxuXFx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XFxuXFx0XFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xcblxcdH1cXG5cXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcXG5cXHRcXHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XFxuXFx0XFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcXG5cXHRcXHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xcblxcdFxcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggO1xcblxcdFxcdFxcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XFxuXFx0XFx0XFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcXHRcXHRcXHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcXHRcXHRcXHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG9jY2x1c2lvbjtcXG5cXHR9XFxuXFx0ZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHtcXG5cXHRcXHRmbG9hdCBzaGFkb3cgPSAxLjA7XFxuXFx0XFx0c2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7XFxuXFx0XFx0c2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzO1xcblxcdFxcdGJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTtcXG5cXHRcXHRib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7XFxuXFx0XFx0YnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApO1xcblxcdFxcdGJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7XFxuXFx0XFx0aWYgKCBmcnVzdHVtVGVzdCApIHtcXG5cXHRcXHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGIClcXG5cXHRcXHRcXHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHRcXHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xcblxcdFxcdFxcdGZsb2F0IGR4MiA9IGR4MCAvIDIuMDtcXG5cXHRcXHRcXHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XFxuXFx0XFx0XFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xcblxcdFxcdFxcdGZsb2F0IGR5MyA9IGR5MSAvIDIuMDtcXG5cXHRcXHRcXHRzaGFkb3cgPSAoXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXFxuXFx0XFx0XFx0KSAqICggMS4wIC8gMTcuMCApO1xcblxcdFxcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIClcXG5cXHRcXHRcXHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcXG5cXHRcXHRcXHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xcblxcdFxcdFxcdGZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7XFxuXFx0XFx0XFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xcblxcdFxcdFxcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcXG5cXHRcXHRcXHR1diAtPSBmICogdGV4ZWxTaXplO1xcblxcdFxcdFxcdHNoYWRvdyA9IChcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcXG5cXHRcXHRcXHRcXHRcXHQgZi54ICkgK1xcblxcdFxcdFxcdFxcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueCApICtcXG5cXHRcXHRcXHRcXHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueSApICtcXG5cXHRcXHRcXHRcXHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXFxuXFx0XFx0XFx0XFx0XFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdCBmLnkgKSArXFxuXFx0XFx0XFx0XFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxcblxcdFxcdFxcdFxcdFxcdFxcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdFxcdCAgZi54ICksXFxuXFx0XFx0XFx0XFx0XFx0IG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCBcXG5cXHRcXHRcXHRcXHRcXHRcXHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxcblxcdFxcdFxcdFxcdFxcdFxcdCAgZi54ICksXFxuXFx0XFx0XFx0XFx0XFx0IGYueSApXFxuXFx0XFx0XFx0KSAqICggMS4wIC8gOS4wICk7XFxuXFx0XFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcXG5cXHRcXHRcXHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIHNoYWRvdztcXG5cXHR9XFxuXFx0dmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkge1xcblxcdFxcdHZlYzMgYWJzViA9IGFicyggdiApO1xcblxcdFxcdGZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApO1xcblxcdFxcdGFic1YgKj0gc2NhbGVUb0N1YmU7XFxuXFx0XFx0diAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApO1xcblxcdFxcdHZlYzIgcGxhbmFyID0gdi54eTtcXG5cXHRcXHRmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZO1xcblxcdFxcdGZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDtcXG5cXHRcXHRpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7XFxuXFx0XFx0XFx0aWYgKCB2LnogPiAwLjAgKVxcblxcdFxcdFxcdFxcdHBsYW5hci54ID0gNC4wIC0gdi54O1xcblxcdFxcdH0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcXG5cXHRcXHRcXHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XFxuXFx0XFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcXG5cXHRcXHRcXHRmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApO1xcblxcdFxcdFxcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XFxuXFx0XFx0XFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xcblxcdH1cXG5cXHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHtcXG5cXHRcXHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApO1xcblxcdFxcdHZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6O1xcblxcdFxcdGZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7XFx0XFx0ZHAgKz0gc2hhZG93QmlhcztcXG5cXHRcXHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xcblxcdFxcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXFxuXFx0XFx0XFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xcblxcdFxcdFxcdHJldHVybiAoXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcXG5cXHRcXHRcXHRcXHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXFxuXFx0XFx0XFx0XFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xcblxcdFxcdFxcdFxcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXFxuXFx0XFx0XFx0KSAqICggMS4wIC8gOS4wICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcXG5cXHRcXHQjZW5kaWZcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciBzaGFkb3dtYXBfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0hBRE9XTUFQXFxuXFx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xcblxcdFxcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93QmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd1JhZGl1cztcXG5cXHRcXHRcXHR2ZWMyIHNoYWRvd01hcFNpemU7XFxuXFx0XFx0fTtcXG5cXHRcXHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxcblxcdFxcdHVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcXG5cXHRcXHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XFxuXFx0XFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0JpYXM7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcXG5cXHRcXHRcXHRmbG9hdCBzaGFkb3dSYWRpdXM7XFxuXFx0XFx0XFx0dmVjMiBzaGFkb3dNYXBTaXplO1xcblxcdFxcdFxcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XFxuXFx0XFx0XFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xcblxcdFxcdH07XFxuXFx0XFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgc2hhZG93bWFwX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TSEFET1dNQVBcXG5cXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHRcXHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcXG5cXHRcXHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcXG5cXHRcXHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XFxuXFx0XFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XFxuXFx0XFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xcblxcdFxcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcXG5cXHRcXHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQgPSBcImZsb2F0IGdldFNoYWRvd01hc2soKSB7XFxuXFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xcblxcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXFxuXFx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcXG5cXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxcblxcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XFxuXFx0fVxcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXFxuXFx0I2VuZGlmXFxuXFx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDtcXG5cXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XFxuXFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XFxuXFx0XFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXFxuXFx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xcblxcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXG5cXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcXG5cXHRcXHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcXG5cXHRcXHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcXG5cXHR9XFxuXFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcXG5cXHQjZW5kaWZcXG5cXHQjZW5kaWZcXG5cXHRyZXR1cm4gc2hhZG93O1xcbn1cIjtcblxudmFyIHNraW5iYXNlX3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9TS0lOTklOR1xcblxcdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xcblxcdG1hdDQgYm9uZU1hdFkgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueSApO1xcblxcdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xcblxcdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xcbiNlbmRpZlwiO1xuXG52YXIgc2tpbm5pbmdfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0tJTk5JTkdcXG5cXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcXG5cXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7XFxuXFx0I2lmZGVmIEJPTkVfVEVYVFVSRVxcblxcdFxcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xcblxcdFxcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcXG5cXHRcXHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XFxuXFx0XFx0XFx0ZmxvYXQgaiA9IGkgKiA0LjA7XFxuXFx0XFx0XFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XFxuXFx0XFx0XFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XFxuXFx0XFx0XFx0ZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XFxuXFx0XFx0XFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XFxuXFx0XFx0XFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XFxuXFx0XFx0XFx0dmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xcblxcdFxcdFxcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcXG5cXHRcXHRcXHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XFxuXFx0XFx0XFx0dmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xcblxcdFxcdFxcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XFxuXFx0XFx0XFx0cmV0dXJuIGJvbmU7XFxuXFx0XFx0fVxcblxcdCNlbHNlXFxuXFx0XFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XFxuXFx0XFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xcblxcdFxcdFxcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XFxuXFx0XFx0XFx0cmV0dXJuIGJvbmU7XFxuXFx0XFx0fVxcblxcdCNlbmRpZlxcbiNlbmRpZlwiO1xuXG52YXIgc2tpbm5pbmdfdmVydGV4ID0gXCIjaWZkZWYgVVNFX1NLSU5OSU5HXFxuXFx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcXG5cXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcXG5cXHRza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDtcXG5cXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcXG5cXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcXG5cXHRza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudztcXG5cXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xcbiNlbmRpZlwiO1xuXG52YXIgc2tpbm5vcm1hbF92ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfU0tJTk5JTkdcXG5cXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcXG5cXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xcblxcdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7XFxuXFx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjtcXG5cXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xcblxcdHNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xcblxcdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xcblxcdCNpZmRlZiBVU0VfVEFOR0VOVFxcblxcdFxcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XFxuXFx0I2VuZGlmXFxuI2VuZGlmXCI7XG5cbnZhciBzcGVjdWxhcm1hcF9mcmFnbWVudCA9IFwiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcXG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXFxuXFx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XFxuXFx0c3BlY3VsYXJTdHJlbmd0aCA9IHRleGVsU3BlY3VsYXIucjtcXG4jZWxzZVxcblxcdHNwZWN1bGFyU3RyZW5ndGggPSAxLjA7XFxuI2VuZGlmXCI7XG5cbnZhciBzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXFxuXFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XFxuI2VuZGlmXCI7XG5cbnZhciB0b25lbWFwcGluZ19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXFxuXFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XFxuI2VuZGlmXCI7XG5cbnZhciB0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50ID0gXCIjaWZuZGVmIHNhdHVyYXRlXFxuI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApXFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcXG59XFxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xcblxcdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XFxuXFx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XFxufVxcbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XFxuXFx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcXG5cXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcXG5cXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xcbn1cXG52ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkge1xcblxcdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xcblxcdHZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7XFxuXFx0cmV0dXJuIGEgLyBiO1xcbn1cXG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcXG5cXHRjb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoXFxuXFx0XFx0dmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLFxcdFxcdHZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSxcXG5cXHRcXHR2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3IClcXG5cXHQpO1xcblxcdGNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoXFxuXFx0XFx0dmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLFxcdFxcdHZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSxcXG5cXHRcXHR2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyIClcXG5cXHQpO1xcblxcdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7XFxuXFx0Y29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjtcXG5cXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcXG5cXHRjb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjtcXG5cXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7XFxufVxcbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfVwiO1xuXG52YXIgdHJhbnNtaXNzaW9uX2ZyYWdtZW50ID0gXCIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcblxcdGZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wO1xcblxcdGZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjtcXG5cXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XFxuXFx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcXG5cXHRcXHR0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcXG5cXHRcXHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XFxuXFx0I2VuZGlmXFxuXFx0dmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjtcXG5cXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XFxuXFx0dmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XFxuXFx0dmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxcblxcdFxcdG4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcXG5cXHRcXHRwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvcixcXG5cXHRcXHRhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XFxuXFx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xcblxcdHRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xcbiNlbmRpZlwiO1xuXG52YXIgdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQgPSBcIiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0dW5pZm9ybSBmbG9hdCB0cmFuc21pc3Npb247XFxuXFx0dW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XFxuXFx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xcblxcdHVuaWZvcm0gdmVjMyBhdHRlbnVhdGlvbkNvbG9yO1xcblxcdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgdGhpY2tuZXNzTWFwO1xcblxcdCNlbmRpZlxcblxcdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcXG5cXHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25TYW1wbGVyTWFwO1xcblxcdHVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDtcXG5cXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcXG5cXHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XFxuXFx0dmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHtcXG5cXHRcXHR2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTtcXG5cXHRcXHR2ZWMzIG1vZGVsU2NhbGU7XFxuXFx0XFx0bW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7XFxuXFx0XFx0bW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7XFxuXFx0XFx0bW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7XFxuXFx0XFx0cmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTtcXG5cXHR9XFxuXFx0ZmxvYXQgYXBwbHlJb3JUb1JvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XFxuXFx0XFx0cmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKCBpb3IgKiAyLjAgLSAyLjAsIDAuMCwgMS4wICk7XFxuXFx0fVxcblxcdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XFxuXFx0XFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xcblxcdFxcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcXG5cXHRcXHRcXHRyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7XFxuXFx0XFx0I2Vsc2VcXG5cXHRcXHRcXHRyZXR1cm4gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7XFxuXFx0XFx0I2VuZGlmXFxuXFx0fVxcblxcdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcXG5cXHRcXHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xcblxcdFxcdFxcdHJldHVybiByYWRpYW5jZTtcXG5cXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdHZlYzMgYXR0ZW51YXRpb25Db2VmZmljaWVudCA9IC1sb2coIGF0dGVudWF0aW9uQ29sb3IgKSAvIGF0dGVudWF0aW9uRGlzdGFuY2U7XFxuXFx0XFx0XFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1xcdFxcdFxcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XFxuXFx0XFx0fVxcblxcdH1cXG5cXHR2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLFxcblxcdFxcdGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsXFxuXFx0XFx0Y29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLFxcblxcdFxcdGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcXG5cXHRcXHR2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7XFxuXFx0XFx0dmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7XFxuXFx0XFx0dmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApO1xcblxcdFxcdHZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53O1xcblxcdFxcdHJlZnJhY3Rpb25Db29yZHMgKz0gMS4wO1xcblxcdFxcdHJlZnJhY3Rpb25Db29yZHMgLz0gMi4wO1xcblxcdFxcdHZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTtcXG5cXHRcXHR2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XFxuXFx0XFx0dmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7XFxuXFx0XFx0cmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTtcXG5cXHR9XFxuI2VuZGlmXCI7XG5cbnZhciB1dl9wYXJzX2ZyYWdtZW50ID0gXCIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcXG5cXHR2YXJ5aW5nIHZlYzIgdlV2O1xcbiNlbmRpZlwiO1xuXG52YXIgdXZfcGFyc192ZXJ0ZXggPSBcIiNpZmRlZiBVU0VfVVZcXG5cXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXFxuXFx0XFx0dmVjMiB2VXY7XFxuXFx0I2Vsc2VcXG5cXHRcXHR2YXJ5aW5nIHZlYzIgdlV2O1xcblxcdCNlbmRpZlxcblxcdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcXG4jZW5kaWZcIjtcblxudmFyIHV2X3ZlcnRleCA9IFwiI2lmZGVmIFVTRV9VVlxcblxcdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XFxuI2VuZGlmXCI7XG5cbnZhciB1djJfcGFyc19mcmFnbWVudCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXFxuXFx0dmFyeWluZyB2ZWMyIHZVdjI7XFxuI2VuZGlmXCI7XG5cbnZhciB1djJfcGFyc192ZXJ0ZXggPSBcIiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxcblxcdGF0dHJpYnV0ZSB2ZWMyIHV2MjtcXG5cXHR2YXJ5aW5nIHZlYzIgdlV2MjtcXG5cXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xcbiNlbmRpZlwiO1xuXG52YXIgdXYyX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXFxuXFx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcXG4jZW5kaWZcIjtcblxudmFyIHdvcmxkcG9zX3ZlcnRleCA9IFwiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hBRE9XTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9UUkFOU01JU1NJT04gKVxcblxcdHZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcXG5cXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcXG5cXHRcXHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xcblxcdCNlbmRpZlxcblxcdHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247XFxuI2VuZGlmXCI7XG5cbmNvbnN0IHZlcnRleCRnID0gXCJ2YXJ5aW5nIHZlYzIgdlV2O1xcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcXG52b2lkIG1haW4oKSB7XFxuXFx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkZyA9IFwidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xcbnZhcnlpbmcgdmVjMiB2VXY7XFxudm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTtcXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCRmID0gXCJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxudm9pZCBtYWluKCkge1xcblxcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRmID0gXCIjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdHZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHRnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjtcXG5cXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGUgPSBcIiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXFxuXFx0XFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRlID0gXCIjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXFxuXFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcXG5cXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXFxuXFx0XFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcXG5cXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXFxuXFx0XFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7XFxuXFx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXFxuXFx0XFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XFxuXFx0I2VuZGlmXFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkZCA9IFwiI2RlZmluZSBESVNUQU5DRVxcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXFxuXFx0XFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkZCA9IFwiI2RlZmluZSBESVNUQU5DRVxcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcXG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxwYWNraW5nPlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbiAoKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xcblxcdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcXG5cXHRkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTtcXG5cXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcXG59XCI7XG5cbmNvbnN0IHZlcnRleCRjID0gXCJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxudm9pZCBtYWluKCkge1xcblxcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRjID0gXCJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XFxudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XFxuXFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xcblxcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JGIgPSBcInVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcXG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JGIgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplO1xcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0aWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7XFxuXFx0XFx0ZGlzY2FyZDtcXG5cXHR9XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkYSA9IFwiI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcXG5cXHRcXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdFxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHRcXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0XFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCRhID0gXCJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2lmbmRlZiBGTEFUX1NIQURFRFxcblxcdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0I2lmZGVmIFVTRV9MSUdIVE1BUFxcblxcdFxcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xcblxcdCNlbHNlXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XFxuXFx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ5ID0gXCIjZGVmaW5lIExBTUJFUlRcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XFxudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG5cXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcXG5cXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcXG4jZW5kaWZcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JDkgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuXFx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XFxuXFx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcXG5cXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpZmRlZiBET1VCTEVfU0lERURcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrO1xcblxcdCNlbHNlXFxuXFx0XFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cXG5cXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XFxuXFx0I2lmZGVmIERPVUJMRV9TSURFRFxcblxcdFxcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XFxuXFx0I2Vsc2VcXG5cXHRcXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XFxuXFx0I2VuZGlmXFxuXFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTtcXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Plxcbn1cIjtcblxuY29uc3QgdmVydGV4JDggPSBcIiNkZWZpbmUgTUFUQ0FQXFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkOCA9IFwiI2RlZmluZSBNQVRDQVBcXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XFxuXFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdHZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xcblxcdHZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcXG5cXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xcblxcdHZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTtcXG5cXHQjaWZkZWYgVVNFX01BVENBUFxcblxcdFxcdHZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcXG5cXHQjZWxzZVxcblxcdFxcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XFxuXFx0I2VuZGlmXFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ3ID0gXCIjZGVmaW5lIE5PUk1BTFxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXFxuXFx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxuI2VuZGlmXFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcbiNlbmRpZlxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkNyA9IFwiI2RlZmluZSBOT1JNQUxcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcXG5cXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jZW5kaWZcXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNiA9IFwiI2RlZmluZSBQSE9OR1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDx1djJfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cXG5cXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcXG5cXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkNiA9IFwiI2RlZmluZSBQSE9OR1xcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcXG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XFxudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xcblxcdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkNSA9IFwiI2RlZmluZSBTVEFOREFSRFxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXFxuXFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxcblxcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XFxuI2VuZGlmXFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQ1ID0gXCIjZGVmaW5lIFNUQU5EQVJEXFxuI2lmZGVmIFBIWVNJQ0FMXFxuXFx0I2RlZmluZSBJT1JcXG5cXHQjZGVmaW5lIFNQRUNVTEFSXFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaWZkZWYgSU9SXFxuXFx0dW5pZm9ybSBmbG9hdCBpb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNQRUNVTEFSXFxuXFx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcXG5cXHR1bmlmb3JtIHZlYzMgc3BlY3VsYXJDb2xvcjtcXG5cXHQjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJJbnRlbnNpdHlNYXA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQXFxuXFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJDb2xvck1hcDtcXG5cXHQjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxcblxcdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0O1xcblxcdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfU0hFRU5cXG5cXHR1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjtcXG5cXHR1bmlmb3JtIGZsb2F0IHNoZWVuUm91Z2huZXNzO1xcblxcdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XFxuXFx0I2VuZGlmXFxuXFx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxcblxcdFxcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuUm91Z2huZXNzTWFwO1xcblxcdCNlbmRpZlxcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxic2Rmcz5cXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xcblxcdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XFxuXFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XFxuXFx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxcblxcdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cXG5cXHR2ZWMzIHRvdGFsRGlmZnVzZSA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XFxuXFx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xcblxcdCNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaWZkZWYgVVNFX1NIRUVOXFxuXFx0XFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XFxuXFx0XFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xcblxcdCNlbmRpZlxcblxcdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXFxuXFx0XFx0ZmxvYXQgZG90TlZjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XFxuXFx0XFx0dmVjMyBGY2MgPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTtcXG5cXHRcXHRvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcXG5cXHQjZW5kaWZcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQ0ID0gXCIjZGVmaW5lIFRPT05cXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XFxudm9pZCBtYWluKCkge1xcblxcdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xcblxcdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XFxufVwiO1xuXG5jb25zdCBmcmFnbWVudCQ0ID0gXCIjZGVmaW5lIFRPT05cXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcXG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHBhY2tpbmc+XFxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YnNkZnM+XFxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxcbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XFxuXFx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cXG5cXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XFxuXFx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxcblxcdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cXG5cXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cXG5cXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XFxuXFx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQzID0gXCJ1bmlmb3JtIGZsb2F0IHNpemU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxcblxcdGdsX1BvaW50U2l6ZSA9IHNpemU7XFxuXFx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cXG5cXHRcXHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XFxuXFx0XFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xcblxcdCNlbmRpZlxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JDMgPSBcInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG4jaW5jbHVkZSA8Y29tbW9uPlxcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cXG5cXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcXG5cXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cXG5cXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcXG5cXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XFxufVwiO1xuXG5jb25zdCB2ZXJ0ZXgkMiA9IFwiI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxcblxcdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XFxuXFx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cXG5cXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50JDIgPSBcInVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8cGFja2luZz5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGJzZGZzPlxcbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cXG52b2lkIG1haW4oKSB7XFxuXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IHZlcnRleCQxID0gXCJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxuI2luY2x1ZGUgPGNvbW1vbj5cXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cXG52b2lkIG1haW4oKSB7XFxuXFx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cXG5cXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcXG5cXHR2ZWMyIHNjYWxlO1xcblxcdHNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApO1xcblxcdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xcblxcdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxcblxcdFxcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcXG5cXHRcXHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcXG5cXHQjZW5kaWZcXG5cXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xcblxcdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xcblxcdHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcXG5cXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XFxuXFx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XFxuXFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcXG5cXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxcblxcdCNpbmNsdWRlIDxmb2dfdmVydGV4Plxcbn1cIjtcblxuY29uc3QgZnJhZ21lbnQkMSA9IFwidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbiNpbmNsdWRlIDxjb21tb24+XFxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxcbnZvaWQgbWFpbigpIHtcXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xcblxcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cXG5cXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxcblxcdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xcblxcdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XFxuXFx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cXG59XCI7XG5cbmNvbnN0IFNoYWRlckNodW5rID0ge1xuXHRhbHBoYW1hcF9mcmFnbWVudDogYWxwaGFtYXBfZnJhZ21lbnQsXG5cdGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IGFscGhhbWFwX3BhcnNfZnJhZ21lbnQsXG5cdGFscGhhdGVzdF9mcmFnbWVudDogYWxwaGF0ZXN0X2ZyYWdtZW50LFxuXHRhbHBoYXRlc3RfcGFyc19mcmFnbWVudDogYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQsXG5cdGFvbWFwX2ZyYWdtZW50OiBhb21hcF9mcmFnbWVudCxcblx0YW9tYXBfcGFyc19mcmFnbWVudDogYW9tYXBfcGFyc19mcmFnbWVudCxcblx0YmVnaW5fdmVydGV4OiBiZWdpbl92ZXJ0ZXgsXG5cdGJlZ2lubm9ybWFsX3ZlcnRleDogYmVnaW5ub3JtYWxfdmVydGV4LFxuXHRic2RmczogYnNkZnMsXG5cdGJ1bXBtYXBfcGFyc19mcmFnbWVudDogYnVtcG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudCxcblx0Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50LFxuXHRjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg6IGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCxcblx0Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3ZlcnRleCxcblx0Y29sb3JfZnJhZ21lbnQ6IGNvbG9yX2ZyYWdtZW50LFxuXHRjb2xvcl9wYXJzX2ZyYWdtZW50OiBjb2xvcl9wYXJzX2ZyYWdtZW50LFxuXHRjb2xvcl9wYXJzX3ZlcnRleDogY29sb3JfcGFyc192ZXJ0ZXgsXG5cdGNvbG9yX3ZlcnRleDogY29sb3JfdmVydGV4LFxuXHRjb21tb246IGNvbW1vbixcblx0Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQsXG5cdGRlZmF1bHRub3JtYWxfdmVydGV4OiBkZWZhdWx0bm9ybWFsX3ZlcnRleCxcblx0ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXgsXG5cdGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXgsXG5cdGVtaXNzaXZlbWFwX2ZyYWdtZW50OiBlbWlzc2l2ZW1hcF9mcmFnbWVudCxcblx0ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDogZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudCxcblx0ZW5jb2RpbmdzX2ZyYWdtZW50OiBlbmNvZGluZ3NfZnJhZ21lbnQsXG5cdGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiBlbmNvZGluZ3NfcGFyc19mcmFnbWVudCxcblx0ZW52bWFwX2ZyYWdtZW50OiBlbnZtYXBfZnJhZ21lbnQsXG5cdGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDogZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50LFxuXHRlbnZtYXBfcGFyc19mcmFnbWVudDogZW52bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF9wYXJzX3ZlcnRleDogZW52bWFwX3BhcnNfdmVydGV4LFxuXHRlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDogZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQsXG5cdGVudm1hcF92ZXJ0ZXg6IGVudm1hcF92ZXJ0ZXgsXG5cdGZvZ192ZXJ0ZXg6IGZvZ192ZXJ0ZXgsXG5cdGZvZ19wYXJzX3ZlcnRleDogZm9nX3BhcnNfdmVydGV4LFxuXHRmb2dfZnJhZ21lbnQ6IGZvZ19mcmFnbWVudCxcblx0Zm9nX3BhcnNfZnJhZ21lbnQ6IGZvZ19wYXJzX2ZyYWdtZW50LFxuXHRncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiBncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRsaWdodG1hcF9mcmFnbWVudDogbGlnaHRtYXBfZnJhZ21lbnQsXG5cdGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQsXG5cdGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDogbGlnaHRzX2xhbWJlcnRfdmVydGV4LFxuXHRsaWdodHNfcGFyc19iZWdpbjogbGlnaHRzX3BhcnNfYmVnaW4sXG5cdGxpZ2h0c190b29uX2ZyYWdtZW50OiBsaWdodHNfdG9vbl9mcmFnbWVudCxcblx0bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDogbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX3Bob25nX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfZnJhZ21lbnQsXG5cdGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQsXG5cdGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCxcblx0bGlnaHRzX2ZyYWdtZW50X2JlZ2luOiBsaWdodHNfZnJhZ21lbnRfYmVnaW4sXG5cdGxpZ2h0c19mcmFnbWVudF9tYXBzOiBsaWdodHNfZnJhZ21lbnRfbWFwcyxcblx0bGlnaHRzX2ZyYWdtZW50X2VuZDogbGlnaHRzX2ZyYWdtZW50X2VuZCxcblx0bG9nZGVwdGhidWZfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdtZW50LFxuXHRsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50LFxuXHRsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDogbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXgsXG5cdGxvZ2RlcHRoYnVmX3ZlcnRleDogbG9nZGVwdGhidWZfdmVydGV4LFxuXHRtYXBfZnJhZ21lbnQ6IG1hcF9mcmFnbWVudCxcblx0bWFwX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRtYXBfcGFydGljbGVfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9mcmFnbWVudCxcblx0bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50LFxuXHRtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9mcmFnbWVudCxcblx0bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50LFxuXHRtb3JwaG5vcm1hbF92ZXJ0ZXg6IG1vcnBobm9ybWFsX3ZlcnRleCxcblx0bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4LFxuXHRtb3JwaHRhcmdldF92ZXJ0ZXg6IG1vcnBodGFyZ2V0X3ZlcnRleCxcblx0bm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBub3JtYWxfZnJhZ21lbnRfYmVnaW4sXG5cdG5vcm1hbF9mcmFnbWVudF9tYXBzOiBub3JtYWxfZnJhZ21lbnRfbWFwcyxcblx0bm9ybWFsX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbF9wYXJzX2ZyYWdtZW50LFxuXHRub3JtYWxfcGFyc192ZXJ0ZXg6IG5vcm1hbF9wYXJzX3ZlcnRleCxcblx0bm9ybWFsX3ZlcnRleDogbm9ybWFsX3ZlcnRleCxcblx0bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50LFxuXHRjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luLFxuXHRjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6IGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcyxcblx0Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50LFxuXHRvdXRwdXRfZnJhZ21lbnQ6IG91dHB1dF9mcmFnbWVudCxcblx0cGFja2luZzogcGFja2luZyxcblx0cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDogcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudCxcblx0cHJvamVjdF92ZXJ0ZXg6IHByb2plY3RfdmVydGV4LFxuXHRkaXRoZXJpbmdfZnJhZ21lbnQ6IGRpdGhlcmluZ19mcmFnbWVudCxcblx0ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50LFxuXHRyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6IHJvdWdobmVzc21hcF9mcmFnbWVudCxcblx0cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50LFxuXHRzaGFkb3dtYXBfcGFyc19mcmFnbWVudDogc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQsXG5cdHNoYWRvd21hcF9wYXJzX3ZlcnRleDogc2hhZG93bWFwX3BhcnNfdmVydGV4LFxuXHRzaGFkb3dtYXBfdmVydGV4OiBzaGFkb3dtYXBfdmVydGV4LFxuXHRzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6IHNoYWRvd21hc2tfcGFyc19mcmFnbWVudCxcblx0c2tpbmJhc2VfdmVydGV4OiBza2luYmFzZV92ZXJ0ZXgsXG5cdHNraW5uaW5nX3BhcnNfdmVydGV4OiBza2lubmluZ19wYXJzX3ZlcnRleCxcblx0c2tpbm5pbmdfdmVydGV4OiBza2lubmluZ192ZXJ0ZXgsXG5cdHNraW5ub3JtYWxfdmVydGV4OiBza2lubm9ybWFsX3ZlcnRleCxcblx0c3BlY3VsYXJtYXBfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX2ZyYWdtZW50LFxuXHRzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiBzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50LFxuXHR0b25lbWFwcGluZ19mcmFnbWVudDogdG9uZW1hcHBpbmdfZnJhZ21lbnQsXG5cdHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQsXG5cdHRyYW5zbWlzc2lvbl9mcmFnbWVudDogdHJhbnNtaXNzaW9uX2ZyYWdtZW50LFxuXHR0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudDogdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQsXG5cdHV2X3BhcnNfZnJhZ21lbnQ6IHV2X3BhcnNfZnJhZ21lbnQsXG5cdHV2X3BhcnNfdmVydGV4OiB1dl9wYXJzX3ZlcnRleCxcblx0dXZfdmVydGV4OiB1dl92ZXJ0ZXgsXG5cdHV2Ml9wYXJzX2ZyYWdtZW50OiB1djJfcGFyc19mcmFnbWVudCxcblx0dXYyX3BhcnNfdmVydGV4OiB1djJfcGFyc192ZXJ0ZXgsXG5cdHV2Ml92ZXJ0ZXg6IHV2Ml92ZXJ0ZXgsXG5cdHdvcmxkcG9zX3ZlcnRleDogd29ybGRwb3NfdmVydGV4LFxuXG5cdGJhY2tncm91bmRfdmVydDogdmVydGV4JGcsXG5cdGJhY2tncm91bmRfZnJhZzogZnJhZ21lbnQkZyxcblx0Y3ViZV92ZXJ0OiB2ZXJ0ZXgkZixcblx0Y3ViZV9mcmFnOiBmcmFnbWVudCRmLFxuXHRkZXB0aF92ZXJ0OiB2ZXJ0ZXgkZSxcblx0ZGVwdGhfZnJhZzogZnJhZ21lbnQkZSxcblx0ZGlzdGFuY2VSR0JBX3ZlcnQ6IHZlcnRleCRkLFxuXHRkaXN0YW5jZVJHQkFfZnJhZzogZnJhZ21lbnQkZCxcblx0ZXF1aXJlY3RfdmVydDogdmVydGV4JGMsXG5cdGVxdWlyZWN0X2ZyYWc6IGZyYWdtZW50JGMsXG5cdGxpbmVkYXNoZWRfdmVydDogdmVydGV4JGIsXG5cdGxpbmVkYXNoZWRfZnJhZzogZnJhZ21lbnQkYixcblx0bWVzaGJhc2ljX3ZlcnQ6IHZlcnRleCRhLFxuXHRtZXNoYmFzaWNfZnJhZzogZnJhZ21lbnQkYSxcblx0bWVzaGxhbWJlcnRfdmVydDogdmVydGV4JDksXG5cdG1lc2hsYW1iZXJ0X2ZyYWc6IGZyYWdtZW50JDksXG5cdG1lc2htYXRjYXBfdmVydDogdmVydGV4JDgsXG5cdG1lc2htYXRjYXBfZnJhZzogZnJhZ21lbnQkOCxcblx0bWVzaG5vcm1hbF92ZXJ0OiB2ZXJ0ZXgkNyxcblx0bWVzaG5vcm1hbF9mcmFnOiBmcmFnbWVudCQ3LFxuXHRtZXNocGhvbmdfdmVydDogdmVydGV4JDYsXG5cdG1lc2hwaG9uZ19mcmFnOiBmcmFnbWVudCQ2LFxuXHRtZXNocGh5c2ljYWxfdmVydDogdmVydGV4JDUsXG5cdG1lc2hwaHlzaWNhbF9mcmFnOiBmcmFnbWVudCQ1LFxuXHRtZXNodG9vbl92ZXJ0OiB2ZXJ0ZXgkNCxcblx0bWVzaHRvb25fZnJhZzogZnJhZ21lbnQkNCxcblx0cG9pbnRzX3ZlcnQ6IHZlcnRleCQzLFxuXHRwb2ludHNfZnJhZzogZnJhZ21lbnQkMyxcblx0c2hhZG93X3ZlcnQ6IHZlcnRleCQyLFxuXHRzaGFkb3dfZnJhZzogZnJhZ21lbnQkMixcblx0c3ByaXRlX3ZlcnQ6IHZlcnRleCQxLFxuXHRzcHJpdGVfZnJhZzogZnJhZ21lbnQkMVxufTtcblxuLyoqXG4gKiBVbmlmb3JtcyBsaWJyYXJ5IGZvciBzaGFyZWQgd2ViZ2wgc2hhZGVyc1xuICovXG5cbmNvbnN0IFVuaWZvcm1zTGliID0ge1xuXG5cdGNvbW1vbjoge1xuXG5cdFx0ZGlmZnVzZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweGZmZmZmZiApIH0sXG5cdFx0b3BhY2l0eTogeyB2YWx1ZTogMS4wIH0sXG5cblx0XHRtYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHR1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9LFxuXHRcdHV2MlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9LFxuXG5cdFx0YWxwaGFNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhbHBoYVRlc3Q6IHsgdmFsdWU6IDAgfVxuXG5cdH0sXG5cblx0c3BlY3VsYXJtYXA6IHtcblxuXHRcdHNwZWN1bGFyTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cblx0fSxcblxuXHRlbnZtYXA6IHtcblxuXHRcdGVudk1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGZsaXBFbnZNYXA6IHsgdmFsdWU6IC0gMSB9LFxuXHRcdHJlZmxlY3Rpdml0eTogeyB2YWx1ZTogMS4wIH0sIC8vIGJhc2ljLCBsYW1iZXJ0LCBwaG9uZ1xuXHRcdGlvcjogeyB2YWx1ZTogMS41IH0sIC8vIHN0YW5kYXJkLCBwaHlzaWNhbFxuXHRcdHJlZnJhY3Rpb25SYXRpbzogeyB2YWx1ZTogMC45OCB9XG5cblx0fSxcblxuXHRhb21hcDoge1xuXG5cdFx0YW9NYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhb01hcEludGVuc2l0eTogeyB2YWx1ZTogMSB9XG5cblx0fSxcblxuXHRsaWdodG1hcDoge1xuXG5cdFx0bGlnaHRNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRsaWdodE1hcEludGVuc2l0eTogeyB2YWx1ZTogMSB9XG5cblx0fSxcblxuXHRlbWlzc2l2ZW1hcDoge1xuXG5cdFx0ZW1pc3NpdmVNYXA6IHsgdmFsdWU6IG51bGwgfVxuXG5cdH0sXG5cblx0YnVtcG1hcDoge1xuXG5cdFx0YnVtcE1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdGJ1bXBTY2FsZTogeyB2YWx1ZTogMSB9XG5cblx0fSxcblxuXHRub3JtYWxtYXA6IHtcblxuXHRcdG5vcm1hbE1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdG5vcm1hbFNjYWxlOiB7IHZhbHVlOiBuZXcgVmVjdG9yMiggMSwgMSApIH1cblxuXHR9LFxuXG5cdGRpc3BsYWNlbWVudG1hcDoge1xuXG5cdFx0ZGlzcGxhY2VtZW50TWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0ZGlzcGxhY2VtZW50U2NhbGU6IHsgdmFsdWU6IDEgfSxcblx0XHRkaXNwbGFjZW1lbnRCaWFzOiB7IHZhbHVlOiAwIH1cblxuXHR9LFxuXG5cdHJvdWdobmVzc21hcDoge1xuXG5cdFx0cm91Z2huZXNzTWFwOiB7IHZhbHVlOiBudWxsIH1cblxuXHR9LFxuXG5cdG1ldGFsbmVzc21hcDoge1xuXG5cdFx0bWV0YWxuZXNzTWFwOiB7IHZhbHVlOiBudWxsIH1cblxuXHR9LFxuXG5cdGdyYWRpZW50bWFwOiB7XG5cblx0XHRncmFkaWVudE1hcDogeyB2YWx1ZTogbnVsbCB9XG5cblx0fSxcblxuXHRmb2c6IHtcblxuXHRcdGZvZ0RlbnNpdHk6IHsgdmFsdWU6IDAuMDAwMjUgfSxcblx0XHRmb2dOZWFyOiB7IHZhbHVlOiAxIH0sXG5cdFx0Zm9nRmFyOiB7IHZhbHVlOiAyMDAwIH0sXG5cdFx0Zm9nQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvciggMHhmZmZmZmYgKSB9XG5cblx0fSxcblxuXHRsaWdodHM6IHtcblxuXHRcdGFtYmllbnRMaWdodENvbG9yOiB7IHZhbHVlOiBbXSB9LFxuXG5cdFx0bGlnaHRQcm9iZTogeyB2YWx1ZTogW10gfSxcblxuXHRcdGRpcmVjdGlvbmFsTGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczoge1xuXHRcdFx0ZGlyZWN0aW9uOiB7fSxcblx0XHRcdGNvbG9yOiB7fVxuXHRcdH0gfSxcblxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczoge1xuXHRcdFx0c2hhZG93Qmlhczoge30sXG5cdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiB7fSxcblx0XHRcdHNoYWRvd1JhZGl1czoge30sXG5cdFx0XHRzaGFkb3dNYXBTaXplOiB7fVxuXHRcdH0gfSxcblxuXHRcdGRpcmVjdGlvbmFsU2hhZG93TWFwOiB7IHZhbHVlOiBbXSB9LFxuXHRcdGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LFxuXG5cdFx0c3BvdExpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHtcblx0XHRcdGNvbG9yOiB7fSxcblx0XHRcdHBvc2l0aW9uOiB7fSxcblx0XHRcdGRpcmVjdGlvbjoge30sXG5cdFx0XHRkaXN0YW5jZToge30sXG5cdFx0XHRjb25lQ29zOiB7fSxcblx0XHRcdHBlbnVtYnJhQ29zOiB7fSxcblx0XHRcdGRlY2F5OiB7fVxuXHRcdH0gfSxcblxuXHRcdHNwb3RMaWdodFNoYWRvd3M6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRzaGFkb3dCaWFzOiB7fSxcblx0XHRcdHNoYWRvd05vcm1hbEJpYXM6IHt9LFxuXHRcdFx0c2hhZG93UmFkaXVzOiB7fSxcblx0XHRcdHNoYWRvd01hcFNpemU6IHt9XG5cdFx0fSB9LFxuXG5cdFx0c3BvdFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSxcblx0XHRzcG90U2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LFxuXG5cdFx0cG9pbnRMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRjb2xvcjoge30sXG5cdFx0XHRwb3NpdGlvbjoge30sXG5cdFx0XHRkZWNheToge30sXG5cdFx0XHRkaXN0YW5jZToge31cblx0XHR9IH0sXG5cblx0XHRwb2ludExpZ2h0U2hhZG93czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHtcblx0XHRcdHNoYWRvd0JpYXM6IHt9LFxuXHRcdFx0c2hhZG93Tm9ybWFsQmlhczoge30sXG5cdFx0XHRzaGFkb3dSYWRpdXM6IHt9LFxuXHRcdFx0c2hhZG93TWFwU2l6ZToge30sXG5cdFx0XHRzaGFkb3dDYW1lcmFOZWFyOiB7fSxcblx0XHRcdHNoYWRvd0NhbWVyYUZhcjoge31cblx0XHR9IH0sXG5cblx0XHRwb2ludFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSxcblx0XHRwb2ludFNoYWRvd01hdHJpeDogeyB2YWx1ZTogW10gfSxcblxuXHRcdGhlbWlzcGhlcmVMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7XG5cdFx0XHRkaXJlY3Rpb246IHt9LFxuXHRcdFx0c2t5Q29sb3I6IHt9LFxuXHRcdFx0Z3JvdW5kQ29sb3I6IHt9XG5cdFx0fSB9LFxuXG5cdFx0Ly8gVE9ETyAoYWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgQlJERiBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gZXhhbXBsZSB0byBtYWluIHNyY1xuXHRcdHJlY3RBcmVhTGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczoge1xuXHRcdFx0Y29sb3I6IHt9LFxuXHRcdFx0cG9zaXRpb246IHt9LFxuXHRcdFx0d2lkdGg6IHt9LFxuXHRcdFx0aGVpZ2h0OiB7fVxuXHRcdH0gfSxcblxuXHRcdGx0Y18xOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0bHRjXzI6IHsgdmFsdWU6IG51bGwgfVxuXG5cdH0sXG5cblx0cG9pbnRzOiB7XG5cblx0XHRkaWZmdXNlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZmZmZmZmICkgfSxcblx0XHRvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfSxcblx0XHRzaXplOiB7IHZhbHVlOiAxLjAgfSxcblx0XHRzY2FsZTogeyB2YWx1ZTogMS4wIH0sXG5cdFx0bWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0YWxwaGFNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhbHBoYVRlc3Q6IHsgdmFsdWU6IDAgfSxcblx0XHR1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9XG5cblx0fSxcblxuXHRzcHJpdGU6IHtcblxuXHRcdGRpZmZ1c2U6IHsgdmFsdWU6IG5ldyBDb2xvciggMHhmZmZmZmYgKSB9LFxuXHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9LFxuXHRcdGNlbnRlcjogeyB2YWx1ZTogbmV3IFZlY3RvcjIoIDAuNSwgMC41ICkgfSxcblx0XHRyb3RhdGlvbjogeyB2YWx1ZTogMC4wIH0sXG5cdFx0bWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0YWxwaGFNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRhbHBoYVRlc3Q6IHsgdmFsdWU6IDAgfSxcblx0XHR1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9XG5cblx0fVxuXG59O1xuXG5jb25zdCBTaGFkZXJMaWIgPSB7XG5cblx0YmFzaWM6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmVudm1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmFvbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2dcblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY192ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNoYmFzaWNfZnJhZ1xuXG5cdH0sXG5cblx0bGFtYmVydDoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLnNwZWN1bGFybWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW52bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuYW9tYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmVtaXNzaXZlbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH1cblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hsYW1iZXJ0X3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hsYW1iZXJ0X2ZyYWdcblxuXHR9LFxuXG5cdHBob25nOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbnZtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5hb21hcCxcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5idW1wbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubm9ybWFsbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0sXG5cdFx0XHRcdHNwZWN1bGFyOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MTExMTExICkgfSxcblx0XHRcdFx0c2hpbmluZXNzOiB7IHZhbHVlOiAzMCB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBob25nX2ZyYWdcblxuXHR9LFxuXG5cdHN0YW5kYXJkOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuZW52bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuYW9tYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmVtaXNzaXZlbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuYnVtcG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLm5vcm1hbG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLnJvdWdobmVzc21hcCxcblx0XHRcdFVuaWZvcm1zTGliLm1ldGFsbmVzc21hcCxcblx0XHRcdFVuaWZvcm1zTGliLmZvZyxcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0cyxcblx0XHRcdHtcblx0XHRcdFx0ZW1pc3NpdmU6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9LFxuXHRcdFx0XHRyb3VnaG5lc3M6IHsgdmFsdWU6IDEuMCB9LFxuXHRcdFx0XHRtZXRhbG5lc3M6IHsgdmFsdWU6IDAuMCB9LFxuXHRcdFx0XHRlbnZNYXBJbnRlbnNpdHk6IHsgdmFsdWU6IDEgfSAvLyB0ZW1wb3Jhcnlcblx0XHRcdH1cblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZ1xuXG5cdH0sXG5cblx0dG9vbjoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLmFvbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubGlnaHRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5lbWlzc2l2ZW1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmJ1bXBtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5ncmFkaWVudG1hcCxcblx0XHRcdFVuaWZvcm1zTGliLmZvZyxcblx0XHRcdFVuaWZvcm1zTGliLmxpZ2h0cyxcblx0XHRcdHtcblx0XHRcdFx0ZW1pc3NpdmU6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNodG9vbl92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNodG9vbl9mcmFnXG5cblx0fSxcblxuXHRtYXRjYXA6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5idW1wbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIubm9ybWFsbWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nLFxuXHRcdFx0e1xuXHRcdFx0XHRtYXRjYXA6IHsgdmFsdWU6IG51bGwgfVxuXHRcdFx0fVxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaG1hdGNhcF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobWF0Y2FwX2ZyYWdcblxuXHR9LFxuXG5cdHBvaW50czoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLnBvaW50cyxcblx0XHRcdFVuaWZvcm1zTGliLmZvZ1xuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRzX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnBvaW50c19mcmFnXG5cblx0fSxcblxuXHRkYXNoZWQ6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2csXG5cdFx0XHR7XG5cdFx0XHRcdHNjYWxlOiB7IHZhbHVlOiAxIH0sXG5cdFx0XHRcdGRhc2hTaXplOiB7IHZhbHVlOiAxIH0sXG5cdFx0XHRcdHRvdGFsU2l6ZTogeyB2YWx1ZTogMiB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5saW5lZGFzaGVkX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmxpbmVkYXNoZWRfZnJhZ1xuXG5cdH0sXG5cblx0ZGVwdGg6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5jb21tb24sXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXBcblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmRlcHRoX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmRlcHRoX2ZyYWdcblxuXHR9LFxuXG5cdG5vcm1hbDoge1xuXG5cdFx0dW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFtcblx0XHRcdFVuaWZvcm1zTGliLmNvbW1vbixcblx0XHRcdFVuaWZvcm1zTGliLmJ1bXBtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsXG5cdFx0XHRVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsXG5cdFx0XHR7XG5cdFx0XHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9XG5cdFx0XHR9XG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobm9ybWFsX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hub3JtYWxfZnJhZ1xuXG5cdH0sXG5cblx0c3ByaXRlOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuc3ByaXRlLFxuXHRcdFx0VW5pZm9ybXNMaWIuZm9nXG5cdFx0XSApLFxuXG5cdFx0dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5zcHJpdGVfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuc3ByaXRlX2ZyYWdcblxuXHR9LFxuXG5cdGJhY2tncm91bmQ6IHtcblxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHR1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9LFxuXHRcdFx0dDJEOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0fSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuYmFja2dyb3VuZF92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5iYWNrZ3JvdW5kX2ZyYWdcblxuXHR9LFxuXHQvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXHRDdWJlIG1hcCBzaGFkZXJcblx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHRjdWJlOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuZW52bWFwLFxuXHRcdFx0e1xuXHRcdFx0XHRvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfVxuXHRcdFx0fVxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuY3ViZV92ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5jdWJlX2ZyYWdcblxuXHR9LFxuXG5cdGVxdWlyZWN0OiB7XG5cblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0dEVxdWlyZWN0OiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0fSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfdmVydCxcblx0XHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfZnJhZ1xuXG5cdH0sXG5cblx0ZGlzdGFuY2VSR0JBOiB7XG5cblx0XHR1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggW1xuXHRcdFx0VW5pZm9ybXNMaWIuY29tbW9uLFxuXHRcdFx0VW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLFxuXHRcdFx0e1xuXHRcdFx0XHRyZWZlcmVuY2VQb3NpdGlvbjogeyB2YWx1ZTogbmV3IFZlY3RvcjMoKSB9LFxuXHRcdFx0XHRuZWFyRGlzdGFuY2U6IHsgdmFsdWU6IDEgfSxcblx0XHRcdFx0ZmFyRGlzdGFuY2U6IHsgdmFsdWU6IDEwMDAgfVxuXHRcdFx0fVxuXHRcdF0gKSxcblxuXHRcdHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZGlzdGFuY2VSR0JBX3ZlcnQsXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmRpc3RhbmNlUkdCQV9mcmFnXG5cblx0fSxcblxuXHRzaGFkb3c6IHtcblxuXHRcdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0XHRVbmlmb3Jtc0xpYi5saWdodHMsXG5cdFx0XHRVbmlmb3Jtc0xpYi5mb2csXG5cdFx0XHR7XG5cdFx0XHRcdGNvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAgKSB9LFxuXHRcdFx0XHRvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfVxuXHRcdFx0fSxcblx0XHRdICksXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLnNoYWRvd192ZXJ0LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfZnJhZ1xuXG5cdH1cblxufTtcblxuU2hhZGVyTGliLnBoeXNpY2FsID0ge1xuXG5cdHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbXG5cdFx0U2hhZGVyTGliLnN0YW5kYXJkLnVuaWZvcm1zLFxuXHRcdHtcblx0XHRcdGNsZWFyY29hdDogeyB2YWx1ZTogMCB9LFxuXHRcdFx0Y2xlYXJjb2F0TWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRjbGVhcmNvYXRSb3VnaG5lc3M6IHsgdmFsdWU6IDAgfSxcblx0XHRcdGNsZWFyY29hdFJvdWdobmVzc01hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0Y2xlYXJjb2F0Tm9ybWFsU2NhbGU6IHsgdmFsdWU6IG5ldyBWZWN0b3IyKCAxLCAxICkgfSxcblx0XHRcdGNsZWFyY29hdE5vcm1hbE1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0c2hlZW46IHsgdmFsdWU6IDAgfSxcblx0XHRcdHNoZWVuQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9LFxuXHRcdFx0c2hlZW5Db2xvck1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0c2hlZW5Sb3VnaG5lc3M6IHsgdmFsdWU6IDEgfSxcblx0XHRcdHNoZWVuUm91Z2huZXNzTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHR0cmFuc21pc3Npb246IHsgdmFsdWU6IDAgfSxcblx0XHRcdHRyYW5zbWlzc2lvbk1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0dHJhbnNtaXNzaW9uU2FtcGxlclNpemU6IHsgdmFsdWU6IG5ldyBWZWN0b3IyKCkgfSxcblx0XHRcdHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdHRoaWNrbmVzczogeyB2YWx1ZTogMCB9LFxuXHRcdFx0dGhpY2tuZXNzTWFwOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRhdHRlbnVhdGlvbkRpc3RhbmNlOiB7IHZhbHVlOiAwIH0sXG5cdFx0XHRhdHRlbnVhdGlvbkNvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfSxcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5OiB7IHZhbHVlOiAxIH0sXG5cdFx0XHRzcGVjdWxhckludGVuc2l0eU1hcDogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0c3BlY3VsYXJDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCAxLCAxLCAxICkgfSxcblx0XHRcdHNwZWN1bGFyQ29sb3JNYXA6IHsgdmFsdWU6IG51bGwgfSxcblx0XHR9XG5cdF0gKSxcblxuXHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF92ZXJ0LFxuXHRmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX2ZyYWdcblxufTtcblxuZnVuY3Rpb24gV2ViR0xCYWNrZ3JvdW5kKCByZW5kZXJlciwgY3ViZW1hcHMsIHN0YXRlLCBvYmplY3RzLCBhbHBoYSwgcHJlbXVsdGlwbGllZEFscGhhICkge1xuXG5cdGNvbnN0IGNsZWFyQ29sb3IgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdGxldCBjbGVhckFscGhhID0gYWxwaGEgPT09IHRydWUgPyAwIDogMTtcblxuXHRsZXQgcGxhbmVNZXNoO1xuXHRsZXQgYm94TWVzaDtcblxuXHRsZXQgY3VycmVudEJhY2tncm91bmQgPSBudWxsO1xuXHRsZXQgY3VycmVudEJhY2tncm91bmRWZXJzaW9uID0gMDtcblx0bGV0IGN1cnJlbnRUb25lbWFwcGluZyA9IG51bGw7XG5cblx0ZnVuY3Rpb24gcmVuZGVyKCByZW5kZXJMaXN0LCBzY2VuZSApIHtcblxuXHRcdGxldCBmb3JjZUNsZWFyID0gZmFsc2U7XG5cdFx0bGV0IGJhY2tncm91bmQgPSBzY2VuZS5pc1NjZW5lID09PSB0cnVlID8gc2NlbmUuYmFja2dyb3VuZCA6IG51bGw7XG5cblx0XHRpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1RleHR1cmUgKSB7XG5cblx0XHRcdGJhY2tncm91bmQgPSBjdWJlbWFwcy5nZXQoIGJhY2tncm91bmQgKTtcblxuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBiYWNrZ3JvdW5kIGluIEFSXG5cdFx0Ly8gVE9ETzogUmVjb25zaWRlciB0aGlzLlxuXG5cdFx0Y29uc3QgeHIgPSByZW5kZXJlci54cjtcblx0XHRjb25zdCBzZXNzaW9uID0geHIuZ2V0U2Vzc2lvbiAmJiB4ci5nZXRTZXNzaW9uKCk7XG5cblx0XHRpZiAoIHNlc3Npb24gJiYgc2Vzc2lvbi5lbnZpcm9ubWVudEJsZW5kTW9kZSA9PT0gJ2FkZGl0aXZlJyApIHtcblxuXHRcdFx0YmFja2dyb3VuZCA9IG51bGw7XG5cblx0XHR9XG5cblx0XHRpZiAoIGJhY2tncm91bmQgPT09IG51bGwgKSB7XG5cblx0XHRcdHNldENsZWFyKCBjbGVhckNvbG9yLCBjbGVhckFscGhhICk7XG5cblx0XHR9IGVsc2UgaWYgKCBiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQuaXNDb2xvciApIHtcblxuXHRcdFx0c2V0Q2xlYXIoIGJhY2tncm91bmQsIDEgKTtcblx0XHRcdGZvcmNlQ2xlYXIgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZW5kZXJlci5hdXRvQ2xlYXIgfHwgZm9yY2VDbGVhciApIHtcblxuXHRcdFx0cmVuZGVyZXIuY2xlYXIoIHJlbmRlcmVyLmF1dG9DbGVhckNvbG9yLCByZW5kZXJlci5hdXRvQ2xlYXJEZXB0aCwgcmVuZGVyZXIuYXV0b0NsZWFyU3RlbmNpbCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBiYWNrZ3JvdW5kICYmICggYmFja2dyb3VuZC5pc0N1YmVUZXh0dXJlIHx8IGJhY2tncm91bmQubWFwcGluZyA9PT0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcgKSApIHtcblxuXHRcdFx0aWYgKCBib3hNZXNoID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ym94TWVzaCA9IG5ldyBNZXNoKFxuXHRcdFx0XHRcdG5ldyBCb3hHZW9tZXRyeSggMSwgMSwgMSApLFxuXHRcdFx0XHRcdG5ldyBTaGFkZXJNYXRlcmlhbCgge1xuXHRcdFx0XHRcdFx0bmFtZTogJ0JhY2tncm91bmRDdWJlTWF0ZXJpYWwnLFxuXHRcdFx0XHRcdFx0dW5pZm9ybXM6IGNsb25lVW5pZm9ybXMoIFNoYWRlckxpYi5jdWJlLnVuaWZvcm1zICksXG5cdFx0XHRcdFx0XHR2ZXJ0ZXhTaGFkZXI6IFNoYWRlckxpYi5jdWJlLnZlcnRleFNoYWRlcixcblx0XHRcdFx0XHRcdGZyYWdtZW50U2hhZGVyOiBTaGFkZXJMaWIuY3ViZS5mcmFnbWVudFNoYWRlcixcblx0XHRcdFx0XHRcdHNpZGU6IEJhY2tTaWRlLFxuXHRcdFx0XHRcdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRcdFx0XHRcdGRlcHRoV3JpdGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Zm9nOiBmYWxzZVxuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGJveE1lc2guZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCAnbm9ybWFsJyApO1xuXHRcdFx0XHRib3hNZXNoLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSggJ3V2JyApO1xuXG5cdFx0XHRcdGJveE1lc2gub25CZWZvcmVSZW5kZXIgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0XHRcdFx0dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oIGNhbWVyYS5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gZW5hYmxlIGNvZGUgaW5qZWN0aW9uIGZvciBub24tYnVpbHQtaW4gbWF0ZXJpYWxcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBib3hNZXNoLm1hdGVyaWFsLCAnZW52TWFwJywge1xuXG5cdFx0XHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0b2JqZWN0cy51cGRhdGUoIGJveE1lc2ggKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZSA9IGJhY2tncm91bmQ7XG5cdFx0XHRib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSAoIGJhY2tncm91bmQuaXNDdWJlVGV4dHVyZSAmJiBiYWNrZ3JvdW5kLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSA9PT0gZmFsc2UgKSA/IC0gMSA6IDE7XG5cblx0XHRcdGlmICggY3VycmVudEJhY2tncm91bmQgIT09IGJhY2tncm91bmQgfHxcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uICE9PSBiYWNrZ3JvdW5kLnZlcnNpb24gfHxcblx0XHRcdFx0Y3VycmVudFRvbmVtYXBwaW5nICE9PSByZW5kZXJlci50b25lTWFwcGluZyApIHtcblxuXHRcdFx0XHRib3hNZXNoLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRjdXJyZW50QmFja2dyb3VuZCA9IGJhY2tncm91bmQ7XG5cdFx0XHRcdGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiA9IGJhY2tncm91bmQudmVyc2lvbjtcblx0XHRcdFx0Y3VycmVudFRvbmVtYXBwaW5nID0gcmVuZGVyZXIudG9uZU1hcHBpbmc7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHVzaCB0byB0aGUgcHJlLXNvcnRlZCBvcGFxdWUgcmVuZGVyIGxpc3Rcblx0XHRcdHJlbmRlckxpc3QudW5zaGlmdCggYm94TWVzaCwgYm94TWVzaC5nZW9tZXRyeSwgYm94TWVzaC5tYXRlcmlhbCwgMCwgMCwgbnVsbCApO1xuXG5cdFx0fSBlbHNlIGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0aWYgKCBwbGFuZU1lc2ggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRwbGFuZU1lc2ggPSBuZXcgTWVzaChcblx0XHRcdFx0XHRuZXcgUGxhbmVHZW9tZXRyeSggMiwgMiApLFxuXHRcdFx0XHRcdG5ldyBTaGFkZXJNYXRlcmlhbCgge1xuXHRcdFx0XHRcdFx0bmFtZTogJ0JhY2tncm91bmRNYXRlcmlhbCcsXG5cdFx0XHRcdFx0XHR1bmlmb3JtczogY2xvbmVVbmlmb3JtcyggU2hhZGVyTGliLmJhY2tncm91bmQudW5pZm9ybXMgKSxcblx0XHRcdFx0XHRcdHZlcnRleFNoYWRlcjogU2hhZGVyTGliLmJhY2tncm91bmQudmVydGV4U2hhZGVyLFxuXHRcdFx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckxpYi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLFxuXHRcdFx0XHRcdFx0c2lkZTogRnJvbnRTaWRlLFxuXHRcdFx0XHRcdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRcdFx0XHRcdGRlcHRoV3JpdGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Zm9nOiBmYWxzZVxuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBsYW5lTWVzaC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoICdub3JtYWwnICk7XG5cblx0XHRcdFx0Ly8gZW5hYmxlIGNvZGUgaW5qZWN0aW9uIGZvciBub24tYnVpbHQtaW4gbWF0ZXJpYWxcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBwbGFuZU1lc2gubWF0ZXJpYWwsICdtYXAnLCB7XG5cblx0XHRcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRvYmplY3RzLnVwZGF0ZSggcGxhbmVNZXNoICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cGxhbmVNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZSA9IGJhY2tncm91bmQ7XG5cblx0XHRcdGlmICggYmFja2dyb3VuZC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdGJhY2tncm91bmQudXBkYXRlTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0cGxhbmVNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoIGJhY2tncm91bmQubWF0cml4ICk7XG5cblx0XHRcdGlmICggY3VycmVudEJhY2tncm91bmQgIT09IGJhY2tncm91bmQgfHxcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uICE9PSBiYWNrZ3JvdW5kLnZlcnNpb24gfHxcblx0XHRcdFx0Y3VycmVudFRvbmVtYXBwaW5nICE9PSByZW5kZXJlci50b25lTWFwcGluZyApIHtcblxuXHRcdFx0XHRwbGFuZU1lc2gubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdGN1cnJlbnRCYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblx0XHRcdFx0Y3VycmVudEJhY2tncm91bmRWZXJzaW9uID0gYmFja2dyb3VuZC52ZXJzaW9uO1xuXHRcdFx0XHRjdXJyZW50VG9uZW1hcHBpbmcgPSByZW5kZXJlci50b25lTWFwcGluZztcblxuXHRcdFx0fVxuXG5cblx0XHRcdC8vIHB1c2ggdG8gdGhlIHByZS1zb3J0ZWQgb3BhcXVlIHJlbmRlciBsaXN0XG5cdFx0XHRyZW5kZXJMaXN0LnVuc2hpZnQoIHBsYW5lTWVzaCwgcGxhbmVNZXNoLmdlb21ldHJ5LCBwbGFuZU1lc2gubWF0ZXJpYWwsIDAsIDAsIG51bGwgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Q2xlYXIoIGNvbG9yLCBhbHBoYSApIHtcblxuXHRcdHN0YXRlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEgKTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdGdldENsZWFyQ29sb3I6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIGNsZWFyQ29sb3I7XG5cblx0XHR9LFxuXHRcdHNldENsZWFyQ29sb3I6IGZ1bmN0aW9uICggY29sb3IsIGFscGhhID0gMSApIHtcblxuXHRcdFx0Y2xlYXJDb2xvci5zZXQoIGNvbG9yICk7XG5cdFx0XHRjbGVhckFscGhhID0gYWxwaGE7XG5cdFx0XHRzZXRDbGVhciggY2xlYXJDb2xvciwgY2xlYXJBbHBoYSApO1xuXG5cdFx0fSxcblx0XHRnZXRDbGVhckFscGhhOiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiBjbGVhckFscGhhO1xuXG5cdFx0fSxcblx0XHRzZXRDbGVhckFscGhhOiBmdW5jdGlvbiAoIGFscGhhICkge1xuXG5cdFx0XHRjbGVhckFscGhhID0gYWxwaGE7XG5cdFx0XHRzZXRDbGVhciggY2xlYXJDb2xvciwgY2xlYXJBbHBoYSApO1xuXG5cdFx0fSxcblx0XHRyZW5kZXI6IHJlbmRlclxuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xCaW5kaW5nU3RhdGVzKCBnbCwgZXh0ZW5zaW9ucywgYXR0cmlidXRlcywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IG1heFZlcnRleEF0dHJpYnV0ZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM0OTIxICk7XG5cblx0Y29uc3QgZXh0ZW5zaW9uID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8gbnVsbCA6IGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnICk7XG5cdGNvbnN0IHZhb0F2YWlsYWJsZSA9IGNhcGFiaWxpdGllcy5pc1dlYkdMMiB8fCBleHRlbnNpb24gIT09IG51bGw7XG5cblx0Y29uc3QgYmluZGluZ1N0YXRlcyA9IHt9O1xuXG5cdGNvbnN0IGRlZmF1bHRTdGF0ZSA9IGNyZWF0ZUJpbmRpbmdTdGF0ZSggbnVsbCApO1xuXHRsZXQgY3VycmVudFN0YXRlID0gZGVmYXVsdFN0YXRlO1xuXG5cdGZ1bmN0aW9uIHNldHVwKCBvYmplY3QsIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSwgaW5kZXggKSB7XG5cblx0XHRsZXQgdXBkYXRlQnVmZmVycyA9IGZhbHNlO1xuXG5cdFx0aWYgKCB2YW9BdmFpbGFibGUgKSB7XG5cblx0XHRcdGNvbnN0IHN0YXRlID0gZ2V0QmluZGluZ1N0YXRlKCBnZW9tZXRyeSwgcHJvZ3JhbSwgbWF0ZXJpYWwgKTtcblxuXHRcdFx0aWYgKCBjdXJyZW50U3RhdGUgIT09IHN0YXRlICkge1xuXG5cdFx0XHRcdGN1cnJlbnRTdGF0ZSA9IHN0YXRlO1xuXHRcdFx0XHRiaW5kVmVydGV4QXJyYXlPYmplY3QoIGN1cnJlbnRTdGF0ZS5vYmplY3QgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGVCdWZmZXJzID0gbmVlZHNVcGRhdGUoIGdlb21ldHJ5LCBpbmRleCApO1xuXG5cdFx0XHRpZiAoIHVwZGF0ZUJ1ZmZlcnMgKSBzYXZlQ2FjaGUoIGdlb21ldHJ5LCBpbmRleCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3Qgd2lyZWZyYW1lID0gKCBtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUgKTtcblxuXHRcdFx0aWYgKCBjdXJyZW50U3RhdGUuZ2VvbWV0cnkgIT09IGdlb21ldHJ5LmlkIHx8XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS5wcm9ncmFtICE9PSBwcm9ncmFtLmlkIHx8XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZS53aXJlZnJhbWUgIT09IHdpcmVmcmFtZSApIHtcblxuXHRcdFx0XHRjdXJyZW50U3RhdGUuZ2VvbWV0cnkgPSBnZW9tZXRyeS5pZDtcblx0XHRcdFx0Y3VycmVudFN0YXRlLnByb2dyYW0gPSBwcm9ncmFtLmlkO1xuXHRcdFx0XHRjdXJyZW50U3RhdGUud2lyZWZyYW1lID0gd2lyZWZyYW1lO1xuXG5cdFx0XHRcdHVwZGF0ZUJ1ZmZlcnMgPSB0cnVlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggPT09IHRydWUgKSB7XG5cblx0XHRcdHVwZGF0ZUJ1ZmZlcnMgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0YXR0cmlidXRlcy51cGRhdGUoIGluZGV4LCAzNDk2MyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1cGRhdGVCdWZmZXJzICkge1xuXG5cdFx0XHRzZXR1cFZlcnRleEF0dHJpYnV0ZXMoIG9iamVjdCwgbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5ICk7XG5cblx0XHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Z2wuYmluZEJ1ZmZlciggMzQ5NjMsIGF0dHJpYnV0ZXMuZ2V0KCBpbmRleCApLmJ1ZmZlciApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVZlcnRleEFycmF5T2JqZWN0KCkge1xuXG5cdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSByZXR1cm4gZ2wuY3JlYXRlVmVydGV4QXJyYXkoKTtcblxuXHRcdHJldHVybiBleHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gYmluZFZlcnRleEFycmF5T2JqZWN0KCB2YW8gKSB7XG5cblx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHJldHVybiBnbC5iaW5kVmVydGV4QXJyYXkoIHZhbyApO1xuXG5cdFx0cmV0dXJuIGV4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMoIHZhbyApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkZWxldGVWZXJ0ZXhBcnJheU9iamVjdCggdmFvICkge1xuXG5cdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSByZXR1cm4gZ2wuZGVsZXRlVmVydGV4QXJyYXkoIHZhbyApO1xuXG5cdFx0cmV0dXJuIGV4dGVuc2lvbi5kZWxldGVWZXJ0ZXhBcnJheU9FUyggdmFvICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldEJpbmRpbmdTdGF0ZSggZ2VvbWV0cnksIHByb2dyYW0sIG1hdGVyaWFsICkge1xuXG5cdFx0Y29uc3Qgd2lyZWZyYW1lID0gKCBtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUgKTtcblxuXHRcdGxldCBwcm9ncmFtTWFwID0gYmluZGluZ1N0YXRlc1sgZ2VvbWV0cnkuaWQgXTtcblxuXHRcdGlmICggcHJvZ3JhbU1hcCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRwcm9ncmFtTWFwID0ge307XG5cdFx0XHRiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeS5pZCBdID0gcHJvZ3JhbU1hcDtcblxuXHRcdH1cblxuXHRcdGxldCBzdGF0ZU1hcCA9IHByb2dyYW1NYXBbIHByb2dyYW0uaWQgXTtcblxuXHRcdGlmICggc3RhdGVNYXAgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0c3RhdGVNYXAgPSB7fTtcblx0XHRcdHByb2dyYW1NYXBbIHByb2dyYW0uaWQgXSA9IHN0YXRlTWFwO1xuXG5cdFx0fVxuXG5cdFx0bGV0IHN0YXRlID0gc3RhdGVNYXBbIHdpcmVmcmFtZSBdO1xuXG5cdFx0aWYgKCBzdGF0ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzdGF0ZSA9IGNyZWF0ZUJpbmRpbmdTdGF0ZSggY3JlYXRlVmVydGV4QXJyYXlPYmplY3QoKSApO1xuXHRcdFx0c3RhdGVNYXBbIHdpcmVmcmFtZSBdID0gc3RhdGU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gc3RhdGU7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdTdGF0ZSggdmFvICkge1xuXG5cdFx0Y29uc3QgbmV3QXR0cmlidXRlcyA9IFtdO1xuXHRcdGNvbnN0IGVuYWJsZWRBdHRyaWJ1dGVzID0gW107XG5cdFx0Y29uc3QgYXR0cmlidXRlRGl2aXNvcnMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnV0ZXM7IGkgKysgKSB7XG5cblx0XHRcdG5ld0F0dHJpYnV0ZXNbIGkgXSA9IDA7XG5cdFx0XHRlbmFibGVkQXR0cmlidXRlc1sgaSBdID0gMDtcblx0XHRcdGF0dHJpYnV0ZURpdmlzb3JzWyBpIF0gPSAwO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblxuXHRcdFx0Ly8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb24gbm9uLVZBTyBzdXBwb3J0IGJyb3dzZXJcblx0XHRcdGdlb21ldHJ5OiBudWxsLFxuXHRcdFx0cHJvZ3JhbTogbnVsbCxcblx0XHRcdHdpcmVmcmFtZTogZmFsc2UsXG5cblx0XHRcdG5ld0F0dHJpYnV0ZXM6IG5ld0F0dHJpYnV0ZXMsXG5cdFx0XHRlbmFibGVkQXR0cmlidXRlczogZW5hYmxlZEF0dHJpYnV0ZXMsXG5cdFx0XHRhdHRyaWJ1dGVEaXZpc29yczogYXR0cmlidXRlRGl2aXNvcnMsXG5cdFx0XHRvYmplY3Q6IHZhbyxcblx0XHRcdGF0dHJpYnV0ZXM6IHt9LFxuXHRcdFx0aW5kZXg6IG51bGxcblxuXHRcdH07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIG5lZWRzVXBkYXRlKCBnZW9tZXRyeSwgaW5kZXggKSB7XG5cblx0XHRjb25zdCBjYWNoZWRBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLmF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdGxldCBhdHRyaWJ1dGVzTnVtID0gMDtcblxuXHRcdGZvciAoIGNvbnN0IGtleSBpbiBnZW9tZXRyeUF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGNhY2hlZEF0dHJpYnV0ZSA9IGNhY2hlZEF0dHJpYnV0ZXNbIGtleSBdO1xuXHRcdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGUgPSBnZW9tZXRyeUF0dHJpYnV0ZXNbIGtleSBdO1xuXG5cdFx0XHRpZiAoIGNhY2hlZEF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIHRydWU7XG5cblx0XHRcdGlmICggY2FjaGVkQXR0cmlidXRlLmF0dHJpYnV0ZSAhPT0gZ2VvbWV0cnlBdHRyaWJ1dGUgKSByZXR1cm4gdHJ1ZTtcblxuXHRcdFx0aWYgKCBjYWNoZWRBdHRyaWJ1dGUuZGF0YSAhPT0gZ2VvbWV0cnlBdHRyaWJ1dGUuZGF0YSApIHJldHVybiB0cnVlO1xuXG5cdFx0XHRhdHRyaWJ1dGVzTnVtICsrO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBjdXJyZW50U3RhdGUuYXR0cmlidXRlc051bSAhPT0gYXR0cmlidXRlc051bSApIHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKCBjdXJyZW50U3RhdGUuaW5kZXggIT09IGluZGV4ICkgcmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNhdmVDYWNoZSggZ2VvbWV0cnksIGluZGV4ICkge1xuXG5cdFx0Y29uc3QgY2FjaGUgPSB7fTtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRsZXQgYXR0cmlidXRlc051bSA9IDA7XG5cblx0XHRmb3IgKCBjb25zdCBrZXkgaW4gYXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGEuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuXG5cdFx0XHRpZiAoIGF0dHJpYnV0ZS5kYXRhICkge1xuXG5cdFx0XHRcdGRhdGEuZGF0YSA9IGF0dHJpYnV0ZS5kYXRhO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNhY2hlWyBrZXkgXSA9IGRhdGE7XG5cblx0XHRcdGF0dHJpYnV0ZXNOdW0gKys7XG5cblx0XHR9XG5cblx0XHRjdXJyZW50U3RhdGUuYXR0cmlidXRlcyA9IGNhY2hlO1xuXHRcdGN1cnJlbnRTdGF0ZS5hdHRyaWJ1dGVzTnVtID0gYXR0cmlidXRlc051bTtcblxuXHRcdGN1cnJlbnRTdGF0ZS5pbmRleCA9IGluZGV4O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBpbml0QXR0cmlidXRlcygpIHtcblxuXHRcdGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUubmV3QXR0cmlidXRlcztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBuZXdBdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRuZXdBdHRyaWJ1dGVzWyBpIF0gPSAwO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIHtcblxuXHRcdGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIGF0dHJpYnV0ZSwgMCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKCBhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUgKSB7XG5cblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLm5ld0F0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgZW5hYmxlZEF0dHJpYnV0ZXMgPSBjdXJyZW50U3RhdGUuZW5hYmxlZEF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgYXR0cmlidXRlRGl2aXNvcnMgPSBjdXJyZW50U3RhdGUuYXR0cmlidXRlRGl2aXNvcnM7XG5cblx0XHRuZXdBdHRyaWJ1dGVzWyBhdHRyaWJ1dGUgXSA9IDE7XG5cblx0XHRpZiAoIGVuYWJsZWRBdHRyaWJ1dGVzWyBhdHRyaWJ1dGUgXSA9PT0gMCApIHtcblxuXHRcdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIGF0dHJpYnV0ZSApO1xuXHRcdFx0ZW5hYmxlZEF0dHJpYnV0ZXNbIGF0dHJpYnV0ZSBdID0gMTtcblxuXHRcdH1cblxuXHRcdGlmICggYXR0cmlidXRlRGl2aXNvcnNbIGF0dHJpYnV0ZSBdICE9PSBtZXNoUGVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPyBnbCA6IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTtcblxuXHRcdFx0ZXh0ZW5zaW9uWyBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPyAndmVydGV4QXR0cmliRGl2aXNvcicgOiAndmVydGV4QXR0cmliRGl2aXNvckFOR0xFJyBdKCBhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUgKTtcblx0XHRcdGF0dHJpYnV0ZURpdmlzb3JzWyBhdHRyaWJ1dGUgXSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCkge1xuXG5cdFx0Y29uc3QgbmV3QXR0cmlidXRlcyA9IGN1cnJlbnRTdGF0ZS5uZXdBdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IGVuYWJsZWRBdHRyaWJ1dGVzID0gY3VycmVudFN0YXRlLmVuYWJsZWRBdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRpZiAoIGVuYWJsZWRBdHRyaWJ1dGVzWyBpIF0gIT09IG5ld0F0dHJpYnV0ZXNbIGkgXSApIHtcblxuXHRcdFx0XHRnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIGkgKTtcblx0XHRcdFx0ZW5hYmxlZEF0dHJpYnV0ZXNbIGkgXSA9IDA7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdmVydGV4QXR0cmliUG9pbnRlciggaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0ICkge1xuXG5cdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IHRydWUgJiYgKCB0eXBlID09PSA1MTI0IHx8IHR5cGUgPT09IDUxMjUgKSApIHtcblxuXHRcdFx0Z2wudmVydGV4QXR0cmliSVBvaW50ZXIoIGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIG9mZnNldCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Z2wudmVydGV4QXR0cmliUG9pbnRlciggaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldHVwVmVydGV4QXR0cmlidXRlcyggb2JqZWN0LCBtYXRlcmlhbCwgcHJvZ3JhbSwgZ2VvbWV0cnkgKSB7XG5cblx0XHRpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gZmFsc2UgJiYgKCBvYmplY3QuaXNJbnN0YW5jZWRNZXNoIHx8IGdlb21ldHJ5LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgKSApIHtcblxuXHRcdFx0aWYgKCBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkgPT09IG51bGwgKSByZXR1cm47XG5cblx0XHR9XG5cblx0XHRpbml0QXR0cmlidXRlcygpO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdGNvbnN0IHByb2dyYW1BdHRyaWJ1dGVzID0gcHJvZ3JhbS5nZXRBdHRyaWJ1dGVzKCk7XG5cblx0XHRjb25zdCBtYXRlcmlhbERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgPSBtYXRlcmlhbC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBwcm9ncmFtQXR0cmlidXRlcyApIHtcblxuXHRcdFx0Y29uc3QgcHJvZ3JhbUF0dHJpYnV0ZSA9IHByb2dyYW1BdHRyaWJ1dGVzWyBuYW1lIF07XG5cblx0XHRcdGlmICggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiA+PSAwICkge1xuXG5cdFx0XHRcdGxldCBnZW9tZXRyeUF0dHJpYnV0ZSA9IGdlb21ldHJ5QXR0cmlidXRlc1sgbmFtZSBdO1xuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnlBdHRyaWJ1dGUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGlmICggbmFtZSA9PT0gJ2luc3RhbmNlTWF0cml4JyAmJiBvYmplY3QuaW5zdGFuY2VNYXRyaXggKSBnZW9tZXRyeUF0dHJpYnV0ZSA9IG9iamVjdC5pbnN0YW5jZU1hdHJpeDtcblx0XHRcdFx0XHRpZiAoIG5hbWUgPT09ICdpbnN0YW5jZUNvbG9yJyAmJiBvYmplY3QuaW5zdGFuY2VDb2xvciApIGdlb21ldHJ5QXR0cmlidXRlID0gb2JqZWN0Lmluc3RhbmNlQ29sb3I7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnlBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBnZW9tZXRyeUF0dHJpYnV0ZS5ub3JtYWxpemVkO1xuXHRcdFx0XHRcdGNvbnN0IHNpemUgPSBnZW9tZXRyeUF0dHJpYnV0ZS5pdGVtU2l6ZTtcblxuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0KCBnZW9tZXRyeUF0dHJpYnV0ZSApO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETyBBdHRyaWJ1dGUgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gY29udGV4dCByZXN0b3JlXG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkICkgY29udGludWU7XG5cblx0XHRcdFx0XHRjb25zdCBidWZmZXIgPSBhdHRyaWJ1dGUuYnVmZmVyO1xuXHRcdFx0XHRcdGNvbnN0IHR5cGUgPSBhdHRyaWJ1dGUudHlwZTtcblx0XHRcdFx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBhdHRyaWJ1dGUuYnl0ZXNQZXJFbGVtZW50O1xuXG5cdFx0XHRcdFx0aWYgKCBnZW9tZXRyeUF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhID0gZ2VvbWV0cnlBdHRyaWJ1dGUuZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmlkZSA9IGRhdGEuc3RyaWRlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gZ2VvbWV0cnlBdHRyaWJ1dGUub2Zmc2V0O1xuXG5cdFx0XHRcdFx0XHRpZiAoIGRhdGEgJiYgZGF0YS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyICkge1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvciggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksIGRhdGEubWVzaFBlckF0dHJpYnV0ZSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggIT09IHRydWUgJiYgZ2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGdlb21ldHJ5Ll9tYXhJbnN0YW5jZUNvdW50ID0gZGF0YS5tZXNoUGVyQXR0cmlidXRlICogZGF0YS5jb3VudDtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGdsLmJpbmRCdWZmZXIoIDM0OTYyLCBidWZmZXIgKTtcblxuXHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemU7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmVydGV4QXR0cmliUG9pbnRlcihcblx0XHRcdFx0XHRcdFx0XHRwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSxcblx0XHRcdFx0XHRcdFx0XHRzaXplIC8gcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvblNpemUsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRcdFx0XHRub3JtYWxpemVkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmlkZSAqIGJ5dGVzUGVyRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHQoIG9mZnNldCArICggc2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplICkgKiBpICkgKiBieXRlc1BlckVsZW1lbnRcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBnZW9tZXRyeUF0dHJpYnV0ZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uU2l6ZTsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24gKyBpLCBnZW9tZXRyeUF0dHJpYnV0ZS5tZXNoUGVyQXR0cmlidXRlICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICggb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAhPT0gdHJ1ZSAmJiBnZW9tZXRyeS5fbWF4SW5zdGFuY2VDb3VudCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Z2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgPSBnZW9tZXRyeUF0dHJpYnV0ZS5tZXNoUGVyQXR0cmlidXRlICogZ2VvbWV0cnlBdHRyaWJ1dGUuY291bnQ7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQXR0cmlidXRlKCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uICsgaSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRnbC5iaW5kQnVmZmVyKCAzNDk2MiwgYnVmZmVyICk7XG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdHZlcnRleEF0dHJpYlBvaW50ZXIoXG5cdFx0XHRcdFx0XHRcdFx0cHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiArIGksXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZCxcblx0XHRcdFx0XHRcdFx0XHRzaXplICogYnl0ZXNQZXJFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcdCggc2l6ZSAvIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb25TaXplICkgKiBpICogYnl0ZXNQZXJFbGVtZW50XG5cdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gbWF0ZXJpYWxEZWZhdWx0QXR0cmlidXRlVmFsdWVzWyBuYW1lIF07XG5cblx0XHRcdFx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdHN3aXRjaCAoIHZhbHVlLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0Z2wudmVydGV4QXR0cmliMmZ2KCBwcm9ncmFtQXR0cmlidXRlLmxvY2F0aW9uLCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgMzpcblx0XHRcdFx0XHRcdFx0XHRnbC52ZXJ0ZXhBdHRyaWIzZnYoIHByb2dyYW1BdHRyaWJ1dGUubG9jYXRpb24sIHZhbHVlICk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjRmdiggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiwgdmFsdWUgKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdGdsLnZlcnRleEF0dHJpYjFmdiggcHJvZ3JhbUF0dHJpYnV0ZS5sb2NhdGlvbiwgdmFsdWUgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblxuXHRcdHJlc2V0KCk7XG5cblx0XHRmb3IgKCBjb25zdCBnZW9tZXRyeUlkIGluIGJpbmRpbmdTdGF0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IHByb2dyYW1NYXAgPSBiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeUlkIF07XG5cblx0XHRcdGZvciAoIGNvbnN0IHByb2dyYW1JZCBpbiBwcm9ncmFtTWFwICkge1xuXG5cdFx0XHRcdGNvbnN0IHN0YXRlTWFwID0gcHJvZ3JhbU1hcFsgcHJvZ3JhbUlkIF07XG5cblx0XHRcdFx0Zm9yICggY29uc3Qgd2lyZWZyYW1lIGluIHN0YXRlTWFwICkge1xuXG5cdFx0XHRcdFx0ZGVsZXRlVmVydGV4QXJyYXlPYmplY3QoIHN0YXRlTWFwWyB3aXJlZnJhbWUgXS5vYmplY3QgKTtcblxuXHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZU1hcFsgd2lyZWZyYW1lIF07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBwcm9ncmFtTWFwWyBwcm9ncmFtSWQgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgYmluZGluZ1N0YXRlc1sgZ2VvbWV0cnlJZCBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeSggZ2VvbWV0cnkgKSB7XG5cblx0XHRpZiAoIGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5LmlkIF0gPT09IHVuZGVmaW5lZCApIHJldHVybjtcblxuXHRcdGNvbnN0IHByb2dyYW1NYXAgPSBiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeS5pZCBdO1xuXG5cdFx0Zm9yICggY29uc3QgcHJvZ3JhbUlkIGluIHByb2dyYW1NYXAgKSB7XG5cblx0XHRcdGNvbnN0IHN0YXRlTWFwID0gcHJvZ3JhbU1hcFsgcHJvZ3JhbUlkIF07XG5cblx0XHRcdGZvciAoIGNvbnN0IHdpcmVmcmFtZSBpbiBzdGF0ZU1hcCApIHtcblxuXHRcdFx0XHRkZWxldGVWZXJ0ZXhBcnJheU9iamVjdCggc3RhdGVNYXBbIHdpcmVmcmFtZSBdLm9iamVjdCApO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdGF0ZU1hcFsgd2lyZWZyYW1lIF07XG5cblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIHByb2dyYW1NYXBbIHByb2dyYW1JZCBdO1xuXG5cdFx0fVxuXG5cdFx0ZGVsZXRlIGJpbmRpbmdTdGF0ZXNbIGdlb21ldHJ5LmlkIF07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbGVhc2VTdGF0ZXNPZlByb2dyYW0oIHByb2dyYW0gKSB7XG5cblx0XHRmb3IgKCBjb25zdCBnZW9tZXRyeUlkIGluIGJpbmRpbmdTdGF0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IHByb2dyYW1NYXAgPSBiaW5kaW5nU3RhdGVzWyBnZW9tZXRyeUlkIF07XG5cblx0XHRcdGlmICggcHJvZ3JhbU1hcFsgcHJvZ3JhbS5pZCBdID09PSB1bmRlZmluZWQgKSBjb250aW51ZTtcblxuXHRcdFx0Y29uc3Qgc3RhdGVNYXAgPSBwcm9ncmFtTWFwWyBwcm9ncmFtLmlkIF07XG5cblx0XHRcdGZvciAoIGNvbnN0IHdpcmVmcmFtZSBpbiBzdGF0ZU1hcCApIHtcblxuXHRcdFx0XHRkZWxldGVWZXJ0ZXhBcnJheU9iamVjdCggc3RhdGVNYXBbIHdpcmVmcmFtZSBdLm9iamVjdCApO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdGF0ZU1hcFsgd2lyZWZyYW1lIF07XG5cblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIHByb2dyYW1NYXBbIHByb2dyYW0uaWQgXTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXQoKSB7XG5cblx0XHRyZXNldERlZmF1bHRTdGF0ZSgpO1xuXG5cdFx0aWYgKCBjdXJyZW50U3RhdGUgPT09IGRlZmF1bHRTdGF0ZSApIHJldHVybjtcblxuXHRcdGN1cnJlbnRTdGF0ZSA9IGRlZmF1bHRTdGF0ZTtcblx0XHRiaW5kVmVydGV4QXJyYXlPYmplY3QoIGN1cnJlbnRTdGF0ZS5vYmplY3QgKTtcblxuXHR9XG5cblx0Ly8gZm9yIGJhY2t3YXJkLWNvbXBhdGlsaWJpdHlcblxuXHRmdW5jdGlvbiByZXNldERlZmF1bHRTdGF0ZSgpIHtcblxuXHRcdGRlZmF1bHRTdGF0ZS5nZW9tZXRyeSA9IG51bGw7XG5cdFx0ZGVmYXVsdFN0YXRlLnByb2dyYW0gPSBudWxsO1xuXHRcdGRlZmF1bHRTdGF0ZS53aXJlZnJhbWUgPSBmYWxzZTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdHNldHVwOiBzZXR1cCxcblx0XHRyZXNldDogcmVzZXQsXG5cdFx0cmVzZXREZWZhdWx0U3RhdGU6IHJlc2V0RGVmYXVsdFN0YXRlLFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2UsXG5cdFx0cmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6IHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5LFxuXHRcdHJlbGVhc2VTdGF0ZXNPZlByb2dyYW06IHJlbGVhc2VTdGF0ZXNPZlByb2dyYW0sXG5cblx0XHRpbml0QXR0cmlidXRlczogaW5pdEF0dHJpYnV0ZXMsXG5cdFx0ZW5hYmxlQXR0cmlidXRlOiBlbmFibGVBdHRyaWJ1dGUsXG5cdFx0ZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6IGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzXG5cblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTEJ1ZmZlclJlbmRlcmVyKCBnbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGxldCBtb2RlO1xuXG5cdGZ1bmN0aW9uIHNldE1vZGUoIHZhbHVlICkge1xuXG5cdFx0bW9kZSA9IHZhbHVlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXIoIHN0YXJ0LCBjb3VudCApIHtcblxuXHRcdGdsLmRyYXdBcnJheXMoIG1vZGUsIHN0YXJ0LCBjb3VudCApO1xuXG5cdFx0aW5mby51cGRhdGUoIGNvdW50LCBtb2RlLCAxICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlckluc3RhbmNlcyggc3RhcnQsIGNvdW50LCBwcmltY291bnQgKSB7XG5cblx0XHRpZiAoIHByaW1jb3VudCA9PT0gMCApIHJldHVybjtcblxuXHRcdGxldCBleHRlbnNpb24sIG1ldGhvZE5hbWU7XG5cblx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBnbDtcblx0XHRcdG1ldGhvZE5hbWUgPSAnZHJhd0FycmF5c0luc3RhbmNlZCc7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7XG5cdFx0XHRtZXRob2ROYW1lID0gJ2RyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSc7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4nICk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZXh0ZW5zaW9uWyBtZXRob2ROYW1lIF0oIG1vZGUsIHN0YXJ0LCBjb3VudCwgcHJpbWNvdW50ICk7XG5cblx0XHRpbmZvLnVwZGF0ZSggY291bnQsIG1vZGUsIHByaW1jb3VudCApO1xuXG5cdH1cblxuXHQvL1xuXG5cdHRoaXMuc2V0TW9kZSA9IHNldE1vZGU7XG5cdHRoaXMucmVuZGVyID0gcmVuZGVyO1xuXHR0aGlzLnJlbmRlckluc3RhbmNlcyA9IHJlbmRlckluc3RhbmNlcztcblxufVxuXG5mdW5jdGlvbiBXZWJHTENhcGFiaWxpdGllcyggZ2wsIGV4dGVuc2lvbnMsIHBhcmFtZXRlcnMgKSB7XG5cblx0bGV0IG1heEFuaXNvdHJvcHk7XG5cblx0ZnVuY3Rpb24gZ2V0TWF4QW5pc290cm9weSgpIHtcblxuXHRcdGlmICggbWF4QW5pc290cm9weSAhPT0gdW5kZWZpbmVkICkgcmV0dXJuIG1heEFuaXNvdHJvcHk7XG5cblx0XHRpZiAoIGV4dGVuc2lvbnMuaGFzKCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApID09PSB0cnVlICkge1xuXG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKTtcblxuXHRcdFx0bWF4QW5pc290cm9weSA9IGdsLmdldFBhcmFtZXRlciggZXh0ZW5zaW9uLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bWF4QW5pc290cm9weSA9IDA7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF4QW5pc290cm9weTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TWF4UHJlY2lzaW9uKCBwcmVjaXNpb24gKSB7XG5cblx0XHRpZiAoIHByZWNpc2lvbiA9PT0gJ2hpZ2hwJyApIHtcblxuXHRcdFx0aWYgKCBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIDM1NjMzLCAzNjMzOCApLnByZWNpc2lvbiA+IDAgJiZcblx0XHRcdFx0Z2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCAzNTYzMiwgMzYzMzggKS5wcmVjaXNpb24gPiAwICkge1xuXG5cdFx0XHRcdHJldHVybiAnaGlnaHAnO1xuXG5cdFx0XHR9XG5cblx0XHRcdHByZWNpc2lvbiA9ICdtZWRpdW1wJztcblxuXHRcdH1cblxuXHRcdGlmICggcHJlY2lzaW9uID09PSAnbWVkaXVtcCcgKSB7XG5cblx0XHRcdGlmICggZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCAzNTYzMywgMzYzMzcgKS5wcmVjaXNpb24gPiAwICYmXG5cdFx0XHRcdGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCggMzU2MzIsIDM2MzM3ICkucHJlY2lzaW9uID4gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gJ21lZGl1bXAnO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gJ2xvd3AnO1xuXG5cdH1cblxuXHRjb25zdCBpc1dlYkdMMiA9ICggdHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQgIT09ICd1bmRlZmluZWQnICYmIGdsIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCApIHx8XG5cdFx0KCB0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQgIT09ICd1bmRlZmluZWQnICYmIGdsIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQgKTtcblxuXHRsZXQgcHJlY2lzaW9uID0gcGFyYW1ldGVycy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlY2lzaW9uIDogJ2hpZ2hwJztcblx0Y29uc3QgbWF4UHJlY2lzaW9uID0gZ2V0TWF4UHJlY2lzaW9uKCBwcmVjaXNpb24gKTtcblxuXHRpZiAoIG1heFByZWNpc2lvbiAhPT0gcHJlY2lzaW9uICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjonLCBwcmVjaXNpb24sICdub3Qgc3VwcG9ydGVkLCB1c2luZycsIG1heFByZWNpc2lvbiwgJ2luc3RlYWQuJyApO1xuXHRcdHByZWNpc2lvbiA9IG1heFByZWNpc2lvbjtcblxuXHR9XG5cblx0Y29uc3QgZHJhd0J1ZmZlcnMgPSBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcyggJ1dFQkdMX2RyYXdfYnVmZmVycycgKTtcblxuXHRjb25zdCBsb2dhcml0aG1pY0RlcHRoQnVmZmVyID0gcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyID09PSB0cnVlO1xuXG5cdGNvbnN0IG1heFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNDkzMCApO1xuXHRjb25zdCBtYXhWZXJ0ZXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlciggMzU2NjAgKTtcblx0Y29uc3QgbWF4VGV4dHVyZVNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoIDMzNzkgKTtcblx0Y29uc3QgbWF4Q3ViZW1hcFNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoIDM0MDc2ICk7XG5cblx0Y29uc3QgbWF4QXR0cmlidXRlcyA9IGdsLmdldFBhcmFtZXRlciggMzQ5MjEgKTtcblx0Y29uc3QgbWF4VmVydGV4VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM2MzQ3ICk7XG5cdGNvbnN0IG1heFZhcnlpbmdzID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNjM0OCApO1xuXHRjb25zdCBtYXhGcmFnbWVudFVuaWZvcm1zID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNjM0OSApO1xuXG5cdGNvbnN0IHZlcnRleFRleHR1cmVzID0gbWF4VmVydGV4VGV4dHVyZXMgPiAwO1xuXHRjb25zdCBmbG9hdEZyYWdtZW50VGV4dHVyZXMgPSBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2Zsb2F0JyApO1xuXHRjb25zdCBmbG9hdFZlcnRleFRleHR1cmVzID0gdmVydGV4VGV4dHVyZXMgJiYgZmxvYXRGcmFnbWVudFRleHR1cmVzO1xuXG5cdGNvbnN0IG1heFNhbXBsZXMgPSBpc1dlYkdMMiA/IGdsLmdldFBhcmFtZXRlciggMzYxODMgKSA6IDA7XG5cblx0cmV0dXJuIHtcblxuXHRcdGlzV2ViR0wyOiBpc1dlYkdMMixcblxuXHRcdGRyYXdCdWZmZXJzOiBkcmF3QnVmZmVycyxcblxuXHRcdGdldE1heEFuaXNvdHJvcHk6IGdldE1heEFuaXNvdHJvcHksXG5cdFx0Z2V0TWF4UHJlY2lzaW9uOiBnZXRNYXhQcmVjaXNpb24sXG5cblx0XHRwcmVjaXNpb246IHByZWNpc2lvbixcblx0XHRsb2dhcml0aG1pY0RlcHRoQnVmZmVyOiBsb2dhcml0aG1pY0RlcHRoQnVmZmVyLFxuXG5cdFx0bWF4VGV4dHVyZXM6IG1heFRleHR1cmVzLFxuXHRcdG1heFZlcnRleFRleHR1cmVzOiBtYXhWZXJ0ZXhUZXh0dXJlcyxcblx0XHRtYXhUZXh0dXJlU2l6ZTogbWF4VGV4dHVyZVNpemUsXG5cdFx0bWF4Q3ViZW1hcFNpemU6IG1heEN1YmVtYXBTaXplLFxuXG5cdFx0bWF4QXR0cmlidXRlczogbWF4QXR0cmlidXRlcyxcblx0XHRtYXhWZXJ0ZXhVbmlmb3JtczogbWF4VmVydGV4VW5pZm9ybXMsXG5cdFx0bWF4VmFyeWluZ3M6IG1heFZhcnlpbmdzLFxuXHRcdG1heEZyYWdtZW50VW5pZm9ybXM6IG1heEZyYWdtZW50VW5pZm9ybXMsXG5cblx0XHR2ZXJ0ZXhUZXh0dXJlczogdmVydGV4VGV4dHVyZXMsXG5cdFx0ZmxvYXRGcmFnbWVudFRleHR1cmVzOiBmbG9hdEZyYWdtZW50VGV4dHVyZXMsXG5cdFx0ZmxvYXRWZXJ0ZXhUZXh0dXJlczogZmxvYXRWZXJ0ZXhUZXh0dXJlcyxcblxuXHRcdG1heFNhbXBsZXM6IG1heFNhbXBsZXNcblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMQ2xpcHBpbmcoIHByb3BlcnRpZXMgKSB7XG5cblx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdGxldCBnbG9iYWxTdGF0ZSA9IG51bGwsXG5cdFx0bnVtR2xvYmFsUGxhbmVzID0gMCxcblx0XHRsb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNlLFxuXHRcdHJlbmRlcmluZ1NoYWRvd3MgPSBmYWxzZTtcblxuXHRjb25zdCBwbGFuZSA9IG5ldyBQbGFuZSgpLFxuXHRcdHZpZXdOb3JtYWxNYXRyaXggPSBuZXcgTWF0cml4MygpLFxuXG5cdFx0dW5pZm9ybSA9IHsgdmFsdWU6IG51bGwsIG5lZWRzVXBkYXRlOiBmYWxzZSB9O1xuXG5cdHRoaXMudW5pZm9ybSA9IHVuaWZvcm07XG5cdHRoaXMubnVtUGxhbmVzID0gMDtcblx0dGhpcy5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXG5cdHRoaXMuaW5pdCA9IGZ1bmN0aW9uICggcGxhbmVzLCBlbmFibGVMb2NhbENsaXBwaW5nLCBjYW1lcmEgKSB7XG5cblx0XHRjb25zdCBlbmFibGVkID1cblx0XHRcdHBsYW5lcy5sZW5ndGggIT09IDAgfHxcblx0XHRcdGVuYWJsZUxvY2FsQ2xpcHBpbmcgfHxcblx0XHRcdC8vIGVuYWJsZSBzdGF0ZSBvZiBwcmV2aW91cyBmcmFtZSAtIHRoZSBjbGlwcGluZyBjb2RlIGhhcyB0b1xuXHRcdFx0Ly8gcnVuIGFub3RoZXIgZnJhbWUgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIHN0YXRlOlxuXHRcdFx0bnVtR2xvYmFsUGxhbmVzICE9PSAwIHx8XG5cdFx0XHRsb2NhbENsaXBwaW5nRW5hYmxlZDtcblxuXHRcdGxvY2FsQ2xpcHBpbmdFbmFibGVkID0gZW5hYmxlTG9jYWxDbGlwcGluZztcblxuXHRcdGdsb2JhbFN0YXRlID0gcHJvamVjdFBsYW5lcyggcGxhbmVzLCBjYW1lcmEsIDAgKTtcblx0XHRudW1HbG9iYWxQbGFuZXMgPSBwbGFuZXMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIGVuYWJsZWQ7XG5cblx0fTtcblxuXHR0aGlzLmJlZ2luU2hhZG93cyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJlbmRlcmluZ1NoYWRvd3MgPSB0cnVlO1xuXHRcdHByb2plY3RQbGFuZXMoIG51bGwgKTtcblxuXHR9O1xuXG5cdHRoaXMuZW5kU2hhZG93cyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJlbmRlcmluZ1NoYWRvd3MgPSBmYWxzZTtcblx0XHRyZXNldEdsb2JhbFN0YXRlKCk7XG5cblx0fTtcblxuXHR0aGlzLnNldFN0YXRlID0gZnVuY3Rpb24gKCBtYXRlcmlhbCwgY2FtZXJhLCB1c2VDYWNoZSApIHtcblxuXHRcdGNvbnN0IHBsYW5lcyA9IG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzLFxuXHRcdFx0Y2xpcEludGVyc2VjdGlvbiA9IG1hdGVyaWFsLmNsaXBJbnRlcnNlY3Rpb24sXG5cdFx0XHRjbGlwU2hhZG93cyA9IG1hdGVyaWFsLmNsaXBTaGFkb3dzO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIG1hdGVyaWFsICk7XG5cblx0XHRpZiAoICEgbG9jYWxDbGlwcGluZ0VuYWJsZWQgfHwgcGxhbmVzID09PSBudWxsIHx8IHBsYW5lcy5sZW5ndGggPT09IDAgfHwgcmVuZGVyaW5nU2hhZG93cyAmJiAhIGNsaXBTaGFkb3dzICkge1xuXG5cdFx0XHQvLyB0aGVyZSdzIG5vIGxvY2FsIGNsaXBwaW5nXG5cblx0XHRcdGlmICggcmVuZGVyaW5nU2hhZG93cyApIHtcblxuXHRcdFx0XHQvLyB0aGVyZSdzIG5vIGdsb2JhbCBjbGlwcGluZ1xuXG5cdFx0XHRcdHByb2plY3RQbGFuZXMoIG51bGwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXNldEdsb2JhbFN0YXRlKCk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IG5HbG9iYWwgPSByZW5kZXJpbmdTaGFkb3dzID8gMCA6IG51bUdsb2JhbFBsYW5lcyxcblx0XHRcdFx0bEdsb2JhbCA9IG5HbG9iYWwgKiA0O1xuXG5cdFx0XHRsZXQgZHN0QXJyYXkgPSBtYXRlcmlhbFByb3BlcnRpZXMuY2xpcHBpbmdTdGF0ZSB8fCBudWxsO1xuXG5cdFx0XHR1bmlmb3JtLnZhbHVlID0gZHN0QXJyYXk7IC8vIGVuc3VyZSB1bmlxdWUgc3RhdGVcblxuXHRcdFx0ZHN0QXJyYXkgPSBwcm9qZWN0UGxhbmVzKCBwbGFuZXMsIGNhbWVyYSwgbEdsb2JhbCwgdXNlQ2FjaGUgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBsR2xvYmFsOyArKyBpICkge1xuXG5cdFx0XHRcdGRzdEFycmF5WyBpIF0gPSBnbG9iYWxTdGF0ZVsgaSBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy5jbGlwcGluZ1N0YXRlID0gZHN0QXJyYXk7XG5cdFx0XHR0aGlzLm51bUludGVyc2VjdGlvbiA9IGNsaXBJbnRlcnNlY3Rpb24gPyB0aGlzLm51bVBsYW5lcyA6IDA7XG5cdFx0XHR0aGlzLm51bVBsYW5lcyArPSBuR2xvYmFsO1xuXG5cdFx0fVxuXG5cblx0fTtcblxuXHRmdW5jdGlvbiByZXNldEdsb2JhbFN0YXRlKCkge1xuXG5cdFx0aWYgKCB1bmlmb3JtLnZhbHVlICE9PSBnbG9iYWxTdGF0ZSApIHtcblxuXHRcdFx0dW5pZm9ybS52YWx1ZSA9IGdsb2JhbFN0YXRlO1xuXHRcdFx0dW5pZm9ybS5uZWVkc1VwZGF0ZSA9IG51bUdsb2JhbFBsYW5lcyA+IDA7XG5cblx0XHR9XG5cblx0XHRzY29wZS5udW1QbGFuZXMgPSBudW1HbG9iYWxQbGFuZXM7XG5cdFx0c2NvcGUubnVtSW50ZXJzZWN0aW9uID0gMDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcHJvamVjdFBsYW5lcyggcGxhbmVzLCBjYW1lcmEsIGRzdE9mZnNldCwgc2tpcFRyYW5zZm9ybSApIHtcblxuXHRcdGNvbnN0IG5QbGFuZXMgPSBwbGFuZXMgIT09IG51bGwgPyBwbGFuZXMubGVuZ3RoIDogMDtcblx0XHRsZXQgZHN0QXJyYXkgPSBudWxsO1xuXG5cdFx0aWYgKCBuUGxhbmVzICE9PSAwICkge1xuXG5cdFx0XHRkc3RBcnJheSA9IHVuaWZvcm0udmFsdWU7XG5cblx0XHRcdGlmICggc2tpcFRyYW5zZm9ybSAhPT0gdHJ1ZSB8fCBkc3RBcnJheSA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCBmbGF0U2l6ZSA9IGRzdE9mZnNldCArIG5QbGFuZXMgKiA0LFxuXHRcdFx0XHRcdHZpZXdNYXRyaXggPSBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlO1xuXG5cdFx0XHRcdHZpZXdOb3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KCB2aWV3TWF0cml4ICk7XG5cblx0XHRcdFx0aWYgKCBkc3RBcnJheSA9PT0gbnVsbCB8fCBkc3RBcnJheS5sZW5ndGggPCBmbGF0U2l6ZSApIHtcblxuXHRcdFx0XHRcdGRzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSggZmxhdFNpemUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpNCA9IGRzdE9mZnNldDsgaSAhPT0gblBsYW5lczsgKysgaSwgaTQgKz0gNCApIHtcblxuXHRcdFx0XHRcdHBsYW5lLmNvcHkoIHBsYW5lc1sgaSBdICkuYXBwbHlNYXRyaXg0KCB2aWV3TWF0cml4LCB2aWV3Tm9ybWFsTWF0cml4ICk7XG5cblx0XHRcdFx0XHRwbGFuZS5ub3JtYWwudG9BcnJheSggZHN0QXJyYXksIGk0ICk7XG5cdFx0XHRcdFx0ZHN0QXJyYXlbIGk0ICsgMyBdID0gcGxhbmUuY29uc3RhbnQ7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm0udmFsdWUgPSBkc3RBcnJheTtcblx0XHRcdHVuaWZvcm0ubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0c2NvcGUubnVtUGxhbmVzID0gblBsYW5lcztcblx0XHRzY29wZS5udW1JbnRlcnNlY3Rpb24gPSAwO1xuXG5cdFx0cmV0dXJuIGRzdEFycmF5O1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBXZWJHTEN1YmVNYXBzKCByZW5kZXJlciApIHtcblxuXHRsZXQgY3ViZW1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIG1hcFRleHR1cmVNYXBwaW5nKCB0ZXh0dXJlLCBtYXBwaW5nICkge1xuXG5cdFx0aWYgKCBtYXBwaW5nID09PSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyApIHtcblxuXHRcdFx0dGV4dHVyZS5tYXBwaW5nID0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nO1xuXG5cdFx0fSBlbHNlIGlmICggbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcgKSB7XG5cblx0XHRcdHRleHR1cmUubWFwcGluZyA9IEN1YmVSZWZyYWN0aW9uTWFwcGluZztcblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXQoIHRleHR1cmUgKSB7XG5cblx0XHRpZiAoIHRleHR1cmUgJiYgdGV4dHVyZS5pc1RleHR1cmUgJiYgdGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGV4dHVyZS5tYXBwaW5nO1xuXG5cdFx0XHRpZiAoIG1hcHBpbmcgPT09IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nIHx8IG1hcHBpbmcgPT09IEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nICkge1xuXG5cdFx0XHRcdGlmICggY3ViZW1hcHMuaGFzKCB0ZXh0dXJlICkgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBjdWJlbWFwID0gY3ViZW1hcHMuZ2V0KCB0ZXh0dXJlICkudGV4dHVyZTtcblx0XHRcdFx0XHRyZXR1cm4gbWFwVGV4dHVyZU1hcHBpbmcoIGN1YmVtYXAsIHRleHR1cmUubWFwcGluZyApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRcdFx0XHRpZiAoIGltYWdlICYmIGltYWdlLmhlaWdodCA+IDAgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IG5ldyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIGltYWdlLmhlaWdodCAvIDIgKTtcblx0XHRcdFx0XHRcdHJlbmRlclRhcmdldC5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSggcmVuZGVyZXIsIHRleHR1cmUgKTtcblx0XHRcdFx0XHRcdGN1YmVtYXBzLnNldCggdGV4dHVyZSwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0XHRcdHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlICk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBtYXBUZXh0dXJlTWFwcGluZyggcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHRleHR1cmUubWFwcGluZyApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gaW1hZ2Ugbm90IHlldCByZWFkeS4gdHJ5IHRoZSBjb252ZXJzaW9uIG5leHQgZnJhbWVcblxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25UZXh0dXJlRGlzcG9zZSggZXZlbnQgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0dGV4dHVyZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTtcblxuXHRcdGNvbnN0IGN1YmVtYXAgPSBjdWJlbWFwcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggY3ViZW1hcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjdWJlbWFwcy5kZWxldGUoIHRleHR1cmUgKTtcblx0XHRcdGN1YmVtYXAuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0Y3ViZW1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcblxufVxuXG5jbGFzcyBPcnRob2dyYXBoaWNDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xuXG5cdGNvbnN0cnVjdG9yKCBsZWZ0ID0gLSAxLCByaWdodCA9IDEsIHRvcCA9IDEsIGJvdHRvbSA9IC0gMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnT3J0aG9ncmFwaGljQ2FtZXJhJztcblxuXHRcdHRoaXMuem9vbSA9IDE7XG5cdFx0dGhpcy52aWV3ID0gbnVsbDtcblxuXHRcdHRoaXMubGVmdCA9IGxlZnQ7XG5cdFx0dGhpcy5yaWdodCA9IHJpZ2h0O1xuXHRcdHRoaXMudG9wID0gdG9wO1xuXHRcdHRoaXMuYm90dG9tID0gYm90dG9tO1xuXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICk7XG5cblx0XHR0aGlzLmxlZnQgPSBzb3VyY2UubGVmdDtcblx0XHR0aGlzLnJpZ2h0ID0gc291cmNlLnJpZ2h0O1xuXHRcdHRoaXMudG9wID0gc291cmNlLnRvcDtcblx0XHR0aGlzLmJvdHRvbSA9IHNvdXJjZS5ib3R0b207XG5cdFx0dGhpcy5uZWFyID0gc291cmNlLm5lYXI7XG5cdFx0dGhpcy5mYXIgPSBzb3VyY2UuZmFyO1xuXG5cdFx0dGhpcy56b29tID0gc291cmNlLnpvb207XG5cdFx0dGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDogT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS52aWV3ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgPT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMudmlldyA9IHtcblx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0ZnVsbFdpZHRoOiAxLFxuXHRcdFx0XHRmdWxsSGVpZ2h0OiAxLFxuXHRcdFx0XHRvZmZzZXRYOiAwLFxuXHRcdFx0XHRvZmZzZXRZOiAwLFxuXHRcdFx0XHR3aWR0aDogMSxcblx0XHRcdFx0aGVpZ2h0OiAxXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7XG5cdFx0dGhpcy52aWV3LmZ1bGxIZWlnaHQgPSBmdWxsSGVpZ2h0O1xuXHRcdHRoaXMudmlldy5vZmZzZXRYID0geDtcblx0XHR0aGlzLnZpZXcub2Zmc2V0WSA9IHk7XG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDtcblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHRjbGVhclZpZXdPZmZzZXQoKSB7XG5cblx0XHRpZiAoIHRoaXMudmlldyAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy52aWV3LmVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdH1cblxuXHR1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge1xuXG5cdFx0Y29uc3QgZHggPSAoIHRoaXMucmlnaHQgLSB0aGlzLmxlZnQgKSAvICggMiAqIHRoaXMuem9vbSApO1xuXHRcdGNvbnN0IGR5ID0gKCB0aGlzLnRvcCAtIHRoaXMuYm90dG9tICkgLyAoIDIgKiB0aGlzLnpvb20gKTtcblx0XHRjb25zdCBjeCA9ICggdGhpcy5yaWdodCArIHRoaXMubGVmdCApIC8gMjtcblx0XHRjb25zdCBjeSA9ICggdGhpcy50b3AgKyB0aGlzLmJvdHRvbSApIC8gMjtcblxuXHRcdGxldCBsZWZ0ID0gY3ggLSBkeDtcblx0XHRsZXQgcmlnaHQgPSBjeCArIGR4O1xuXHRcdGxldCB0b3AgPSBjeSArIGR5O1xuXHRcdGxldCBib3R0b20gPSBjeSAtIGR5O1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgIT09IG51bGwgJiYgdGhpcy52aWV3LmVuYWJsZWQgKSB7XG5cblx0XHRcdGNvbnN0IHNjYWxlVyA9ICggdGhpcy5yaWdodCAtIHRoaXMubGVmdCApIC8gdGhpcy52aWV3LmZ1bGxXaWR0aCAvIHRoaXMuem9vbTtcblx0XHRcdGNvbnN0IHNjYWxlSCA9ICggdGhpcy50b3AgLSB0aGlzLmJvdHRvbSApIC8gdGhpcy52aWV3LmZ1bGxIZWlnaHQgLyB0aGlzLnpvb207XG5cblx0XHRcdGxlZnQgKz0gc2NhbGVXICogdGhpcy52aWV3Lm9mZnNldFg7XG5cdFx0XHRyaWdodCA9IGxlZnQgKyBzY2FsZVcgKiB0aGlzLnZpZXcud2lkdGg7XG5cdFx0XHR0b3AgLT0gc2NhbGVIICogdGhpcy52aWV3Lm9mZnNldFk7XG5cdFx0XHRib3R0b20gPSB0b3AgLSBzY2FsZUggKiB0aGlzLnZpZXcuaGVpZ2h0O1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgdGhpcy5uZWFyLCB0aGlzLmZhciApO1xuXG5cdFx0dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KCB0aGlzLnByb2plY3Rpb25NYXRyaXggKS5pbnZlcnQoKTtcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0ZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTtcblx0XHRkYXRhLm9iamVjdC5sZWZ0ID0gdGhpcy5sZWZ0O1xuXHRcdGRhdGEub2JqZWN0LnJpZ2h0ID0gdGhpcy5yaWdodDtcblx0XHRkYXRhLm9iamVjdC50b3AgPSB0aGlzLnRvcDtcblx0XHRkYXRhLm9iamVjdC5ib3R0b20gPSB0aGlzLmJvdHRvbTtcblx0XHRkYXRhLm9iamVjdC5uZWFyID0gdGhpcy5uZWFyO1xuXHRcdGRhdGEub2JqZWN0LmZhciA9IHRoaXMuZmFyO1xuXG5cdFx0aWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIHRoaXMudmlldyApO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbk9ydGhvZ3JhcGhpY0NhbWVyYS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmEgPSB0cnVlO1xuXG5jbGFzcyBSYXdTaGFkZXJNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCBwYXJhbWV0ZXJzICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUmF3U2hhZGVyTWF0ZXJpYWwnO1xuXG5cdH1cblxufVxuXG5SYXdTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IExPRF9NSU4gPSA0O1xuY29uc3QgTE9EX01BWCA9IDg7XG5jb25zdCBTSVpFX01BWCA9IE1hdGgucG93KCAyLCBMT0RfTUFYICk7XG5cbi8vIFRoZSBzdGFuZGFyZCBkZXZpYXRpb25zIChyYWRpYW5zKSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4dHJhIG1pcHMuIFRoZXNlIGFyZVxuLy8gY2hvc2VuIHRvIGFwcHJveGltYXRlIGEgVHJvd2JyaWRnZS1SZWl0eiBkaXN0cmlidXRpb24gZnVuY3Rpb24gdGltZXMgdGhlXG4vLyBnZW9tZXRyaWMgc2hhZG93aW5nIGZ1bmN0aW9uLiBUaGVzZSBzaWdtYSB2YWx1ZXMgc3F1YXJlZCBtdXN0IG1hdGNoIHRoZVxuLy8gdmFyaWFuY2UgI2RlZmluZXMgaW4gY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Lmdsc2wuanMuXG5jb25zdCBFWFRSQV9MT0RfU0lHTUEgPSBbIDAuMTI1LCAwLjIxNSwgMC4zNSwgMC40NDYsIDAuNTI2LCAwLjU4MiBdO1xuXG5jb25zdCBUT1RBTF9MT0RTID0gTE9EX01BWCAtIExPRF9NSU4gKyAxICsgRVhUUkFfTE9EX1NJR01BLmxlbmd0aDtcblxuLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBibHVyIGZvciBsb29wLiBTbWFsbGVyIHNpZ21hcyB3aWxsIHVzZSBmZXdlclxuLy8gc2FtcGxlcyBhbmQgZXhpdCBlYXJseSwgYnV0IG5vdCByZWNvbXBpbGUgdGhlIHNoYWRlci5cbmNvbnN0IE1BWF9TQU1QTEVTID0gMjA7XG5cbmNvbnN0IF9mbGF0Q2FtZXJhID0gLypAX19QVVJFX18qLyBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCk7XG5jb25zdCB7IF9sb2RQbGFuZXMsIF9zaXplTG9kcywgX3NpZ21hcyB9ID0gLypAX19QVVJFX18qLyBfY3JlYXRlUGxhbmVzKCk7XG5jb25zdCBfY2xlYXJDb2xvciA9IC8qQF9fUFVSRV9fKi8gbmV3IENvbG9yKCk7XG5sZXQgX29sZFRhcmdldCA9IG51bGw7XG5cbi8vIEdvbGRlbiBSYXRpb1xuY29uc3QgUEhJID0gKCAxICsgTWF0aC5zcXJ0KCA1ICkgKSAvIDI7XG5jb25zdCBJTlZfUEhJID0gMSAvIFBISTtcblxuLy8gVmVydGljZXMgb2YgYSBkb2RlY2FoZWRyb24gKGV4Y2VwdCB0aGUgb3Bwb3NpdGVzLCB3aGljaCByZXByZXNlbnQgdGhlXG4vLyBzYW1lIGF4aXMpLCB1c2VkIGFzIGF4aXMgZGlyZWN0aW9ucyBldmVubHkgc3ByZWFkIG9uIGEgc3BoZXJlLlxuY29uc3QgX2F4aXNEaXJlY3Rpb25zID0gW1xuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAxLCAxLCAxICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIC0gMSwgMSwgMSApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAxLCAxLCAtIDEgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggLSAxLCAxLCAtIDEgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggMCwgUEhJLCBJTlZfUEhJICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIDAsIFBISSwgLSBJTlZfUEhJICksXG5cdC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoIElOVl9QSEksIDAsIFBISSApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCAtIElOVl9QSEksIDAsIFBISSApLFxuXHQvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCBQSEksIElOVl9QSEksIDAgKSxcblx0LypAX19QVVJFX18qLyBuZXcgVmVjdG9yMyggLSBQSEksIElOVl9QSEksIDAgKSBdO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgUHJlZmlsdGVyZWQsIE1pcG1hcHBlZCBSYWRpYW5jZSBFbnZpcm9ubWVudCBNYXBcbiAqIChQTVJFTSkgZnJvbSBhIGN1YmVNYXAgZW52aXJvbm1lbnQgdGV4dHVyZS4gVGhpcyBhbGxvd3MgZGlmZmVyZW50IGxldmVscyBvZlxuICogYmx1ciB0byBiZSBxdWlja2x5IGFjY2Vzc2VkIGJhc2VkIG9uIG1hdGVyaWFsIHJvdWdobmVzcy4gSXQgaXMgcGFja2VkIGludG8gYVxuICogc3BlY2lhbCBDdWJlVVYgZm9ybWF0IHRoYXQgYWxsb3dzIHVzIHRvIHBlcmZvcm0gY3VzdG9tIGludGVycG9sYXRpb24gc28gdGhhdFxuICogd2UgY2FuIHN1cHBvcnQgbm9ubGluZWFyIGZvcm1hdHMgc3VjaCBhcyBSR0JFLiBVbmxpa2UgYSB0cmFkaXRpb25hbCBtaXBtYXBcbiAqIGNoYWluLCBpdCBvbmx5IGdvZXMgZG93biB0byB0aGUgTE9EX01JTiBsZXZlbCAoYWJvdmUpLCBhbmQgdGhlbiBjcmVhdGVzIGV4dHJhXG4gKiBldmVuIG1vcmUgZmlsdGVyZWQgJ21pcHMnIGF0IHRoZSBzYW1lIExPRF9NSU4gcmVzb2x1dGlvbiwgYXNzb2NpYXRlZCB3aXRoXG4gKiBoaWdoZXIgcm91Z2huZXNzIGxldmVscy4gSW4gdGhpcyB3YXkgd2UgbWFpbnRhaW4gcmVzb2x1dGlvbiB0byBzbW9vdGhseVxuICogaW50ZXJwb2xhdGUgZGlmZnVzZSBsaWdodGluZyB3aGlsZSBsaW1pdGluZyBzYW1wbGluZyBjb21wdXRhdGlvbi5cbiAqXG4gKiBQYXBlcjogRmFzdCwgQWNjdXJhdGUgSW1hZ2UtQmFzZWQgTGlnaHRpbmdcbiAqIGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMTV5OHJfVXBLbFU5U3ZWNElMYjBDM3FDUGVjUzhwdkx6L3ZpZXdcbiovXG5cbmNsYXNzIFBNUkVNR2VuZXJhdG9yIHtcblxuXHRjb25zdHJ1Y3RvciggcmVuZGVyZXIgKSB7XG5cblx0XHR0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xuXHRcdHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID0gbnVsbDtcblxuXHRcdHRoaXMuX2JsdXJNYXRlcmlhbCA9IF9nZXRCbHVyU2hhZGVyKCBNQVhfU0FNUExFUyApO1xuXHRcdHRoaXMuX2VxdWlyZWN0U2hhZGVyID0gbnVsbDtcblx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyID0gbnVsbDtcblxuXHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCggdGhpcy5fYmx1ck1hdGVyaWFsICk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBQTVJFTSBmcm9tIGEgc3VwcGxpZWQgU2NlbmUsIHdoaWNoIGNhbiBiZSBmYXN0ZXIgdGhhbiB1c2luZyBhblxuXHQgKiBpbWFnZSBpZiBuZXR3b3JraW5nIGJhbmR3aWR0aCBpcyBsb3cuIE9wdGlvbmFsIHNpZ21hIHNwZWNpZmllcyBhIGJsdXIgcmFkaXVzXG5cdCAqIGluIHJhZGlhbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgc2NlbmUgYmVmb3JlIFBNUkVNIGdlbmVyYXRpb24uIE9wdGlvbmFsIG5lYXJcblx0ICogYW5kIGZhciBwbGFuZXMgZW5zdXJlIHRoZSBzY2VuZSBpcyByZW5kZXJlZCBpbiBpdHMgZW50aXJldHkgKHRoZSBjdWJlQ2FtZXJhXG5cdCAqIGlzIHBsYWNlZCBhdCB0aGUgb3JpZ2luKS5cblx0ICovXG5cdGZyb21TY2VuZSggc2NlbmUsIHNpZ21hID0gMCwgbmVhciA9IDAuMSwgZmFyID0gMTAwICkge1xuXG5cdFx0X29sZFRhcmdldCA9IHRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IHRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO1xuXG5cdFx0dGhpcy5fc2NlbmVUb0N1YmVVViggc2NlbmUsIG5lYXIsIGZhciwgY3ViZVVWUmVuZGVyVGFyZ2V0ICk7XG5cdFx0aWYgKCBzaWdtYSA+IDAgKSB7XG5cblx0XHRcdHRoaXMuX2JsdXIoIGN1YmVVVlJlbmRlclRhcmdldCwgMCwgMCwgc2lnbWEgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuX2FwcGx5UE1SRU0oIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXHRcdHRoaXMuX2NsZWFudXAoIGN1YmVVVlJlbmRlclRhcmdldCApO1xuXG5cdFx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIFBNUkVNIGZyb20gYW4gZXF1aXJlY3Rhbmd1bGFyIHRleHR1cmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgTERSXG5cdCAqIG9yIEhEUi4gVGhlIGlkZWFsIGlucHV0IGltYWdlIHNpemUgaXMgMWsgKDEwMjQgeCA1MTIpLFxuXHQgKiBhcyB0aGlzIG1hdGNoZXMgYmVzdCB3aXRoIHRoZSAyNTYgeCAyNTYgY3ViZW1hcCBvdXRwdXQuXG5cdCAqL1xuXHRmcm9tRXF1aXJlY3Rhbmd1bGFyKCBlcXVpcmVjdGFuZ3VsYXIsIHJlbmRlclRhcmdldCA9IG51bGwgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUoIGVxdWlyZWN0YW5ndWxhciwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBQTVJFTSBmcm9tIGFuIGN1YmVtYXAgdGV4dHVyZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBMRFJcblx0ICogb3IgSERSLiBUaGUgaWRlYWwgaW5wdXQgY3ViZSBzaXplIGlzIDI1NiB4IDI1Nixcblx0ICogYXMgdGhpcyBtYXRjaGVzIGJlc3Qgd2l0aCB0aGUgMjU2IHggMjU2IGN1YmVtYXAgb3V0cHV0LlxuXHQgKi9cblx0ZnJvbUN1YmVtYXAoIGN1YmVtYXAsIHJlbmRlclRhcmdldCA9IG51bGwgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUoIGN1YmVtYXAsIHJlbmRlclRhcmdldCApO1xuXG5cdH1cblxuXHQvKipcblx0ICogUHJlLWNvbXBpbGVzIHRoZSBjdWJlbWFwIHNoYWRlci4gWW91IGNhbiBnZXQgZmFzdGVyIHN0YXJ0LXVwIGJ5IGludm9raW5nIHRoaXMgbWV0aG9kIGR1cmluZ1xuXHQgKiB5b3VyIHRleHR1cmUncyBuZXR3b3JrIGZldGNoIGZvciBpbmNyZWFzZWQgY29uY3VycmVuY3kuXG5cdCAqL1xuXHRjb21waWxlQ3ViZW1hcFNoYWRlcigpIHtcblxuXHRcdGlmICggdGhpcy5fY3ViZW1hcFNoYWRlciA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fY3ViZW1hcFNoYWRlciA9IF9nZXRDdWJlbWFwU2hhZGVyKCk7XG5cdFx0XHR0aGlzLl9jb21waWxlTWF0ZXJpYWwoIHRoaXMuX2N1YmVtYXBTaGFkZXIgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIFByZS1jb21waWxlcyB0aGUgZXF1aXJlY3Rhbmd1bGFyIHNoYWRlci4gWW91IGNhbiBnZXQgZmFzdGVyIHN0YXJ0LXVwIGJ5IGludm9raW5nIHRoaXMgbWV0aG9kIGR1cmluZ1xuXHQgKiB5b3VyIHRleHR1cmUncyBuZXR3b3JrIGZldGNoIGZvciBpbmNyZWFzZWQgY29uY3VycmVuY3kuXG5cdCAqL1xuXHRjb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCkge1xuXG5cdFx0aWYgKCB0aGlzLl9lcXVpcmVjdFNoYWRlciA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fZXF1aXJlY3RTaGFkZXIgPSBfZ2V0RXF1aXJlY3RTaGFkZXIoKTtcblx0XHRcdHRoaXMuX2NvbXBpbGVNYXRlcmlhbCggdGhpcy5fZXF1aXJlY3RTaGFkZXIgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3Bvc2VzIG9mIHRoZSBQTVJFTUdlbmVyYXRvcidzIGludGVybmFsIG1lbW9yeS4gTm90ZSB0aGF0IFBNUkVNR2VuZXJhdG9yIGlzIGEgc3RhdGljIGNsYXNzLFxuXHQgKiBzbyB5b3Ugc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiBvbmUgUE1SRU1HZW5lcmF0b3Igb2JqZWN0LiBJZiB5b3UgZG8sIGNhbGxpbmcgZGlzcG9zZSgpIG9uXG5cdCAqIG9uZSBvZiB0aGVtIHdpbGwgY2F1c2UgYW55IG90aGVycyB0byBhbHNvIGJlY29tZSB1bnVzYWJsZS5cblx0ICovXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdFx0aWYgKCB0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCAhPT0gbnVsbCApIHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKTtcblxuXHRcdGlmICggdGhpcy5fY3ViZW1hcFNoYWRlciAhPT0gbnVsbCApIHRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpO1xuXHRcdGlmICggdGhpcy5fZXF1aXJlY3RTaGFkZXIgIT09IG51bGwgKSB0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBfbG9kUGxhbmVzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0X2xvZFBsYW5lc1sgaSBdLmRpc3Bvc2UoKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gcHJpdmF0ZSBpbnRlcmZhY2VcblxuXHRfY2xlYW51cCggb3V0cHV0VGFyZ2V0ICkge1xuXG5cdFx0dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBfb2xkVGFyZ2V0ICk7XG5cdFx0b3V0cHV0VGFyZ2V0LnNjaXNzb3JUZXN0ID0gZmFsc2U7XG5cdFx0X3NldFZpZXdwb3J0KCBvdXRwdXRUYXJnZXQsIDAsIDAsIG91dHB1dFRhcmdldC53aWR0aCwgb3V0cHV0VGFyZ2V0LmhlaWdodCApO1xuXG5cdH1cblxuXHRfZnJvbVRleHR1cmUoIHRleHR1cmUsIHJlbmRlclRhcmdldCApIHtcblxuXHRcdF9vbGRUYXJnZXQgPSB0aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRjb25zdCBjdWJlVVZSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQgfHwgdGhpcy5fYWxsb2NhdGVUYXJnZXRzKCB0ZXh0dXJlICk7XG5cdFx0dGhpcy5fdGV4dHVyZVRvQ3ViZVVWKCB0ZXh0dXJlLCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblx0XHR0aGlzLl9hcHBseVBNUkVNKCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblx0XHR0aGlzLl9jbGVhbnVwKCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblxuXHRcdHJldHVybiBjdWJlVVZSZW5kZXJUYXJnZXQ7XG5cblx0fVxuXG5cdF9hbGxvY2F0ZVRhcmdldHMoIHRleHR1cmUgKSB7IC8vIHdhcm5pbmc6IG51bGwgdGV4dHVyZSBpcyB2YWxpZFxuXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0bWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRtaW5GaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdGdlbmVyYXRlTWlwbWFwczogZmFsc2UsXG5cdFx0XHR0eXBlOiBIYWxmRmxvYXRUeXBlLFxuXHRcdFx0Zm9ybWF0OiBSR0JBRm9ybWF0LFxuXHRcdFx0ZW5jb2Rpbmc6IExpbmVhckVuY29kaW5nLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IGZhbHNlXG5cdFx0fTtcblxuXHRcdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IF9jcmVhdGVSZW5kZXJUYXJnZXQoIHBhcmFtcyApO1xuXHRcdGN1YmVVVlJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciA9IHRleHR1cmUgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRpZiAoIHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0ID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCA9IF9jcmVhdGVSZW5kZXJUYXJnZXQoIHBhcmFtcyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblxuXHR9XG5cblx0X2NvbXBpbGVNYXRlcmlhbCggbWF0ZXJpYWwgKSB7XG5cblx0XHRjb25zdCB0bXBNZXNoID0gbmV3IE1lc2goIF9sb2RQbGFuZXNbIDAgXSwgbWF0ZXJpYWwgKTtcblx0XHR0aGlzLl9yZW5kZXJlci5jb21waWxlKCB0bXBNZXNoLCBfZmxhdENhbWVyYSApO1xuXG5cdH1cblxuXHRfc2NlbmVUb0N1YmVVViggc2NlbmUsIG5lYXIsIGZhciwgY3ViZVVWUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgZm92ID0gOTA7XG5cdFx0Y29uc3QgYXNwZWN0ID0gMTtcblx0XHRjb25zdCBjdWJlQ2FtZXJhID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7XG5cdFx0Y29uc3QgdXBTaWduID0gWyAxLCAtIDEsIDEsIDEsIDEsIDEgXTtcblx0XHRjb25zdCBmb3J3YXJkU2lnbiA9IFsgMSwgMSwgMSwgLSAxLCAtIDEsIC0gMSBdO1xuXHRcdGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXI7XG5cblx0XHRjb25zdCBvcmlnaW5hbEF1dG9DbGVhciA9IHJlbmRlcmVyLmF1dG9DbGVhcjtcblx0XHRjb25zdCB0b25lTWFwcGluZyA9IHJlbmRlcmVyLnRvbmVNYXBwaW5nO1xuXHRcdHJlbmRlcmVyLmdldENsZWFyQ29sb3IoIF9jbGVhckNvbG9yICk7XG5cblx0XHRyZW5kZXJlci50b25lTWFwcGluZyA9IE5vVG9uZU1hcHBpbmc7XG5cdFx0cmVuZGVyZXIuYXV0b0NsZWFyID0gZmFsc2U7XG5cblx0XHRjb25zdCBiYWNrZ3JvdW5kTWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHtcblx0XHRcdG5hbWU6ICdQTVJFTS5CYWNrZ3JvdW5kJyxcblx0XHRcdHNpZGU6IEJhY2tTaWRlLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdH0gKTtcblxuXHRcdGNvbnN0IGJhY2tncm91bmRCb3ggPSBuZXcgTWVzaCggbmV3IEJveEdlb21ldHJ5KCksIGJhY2tncm91bmRNYXRlcmlhbCApO1xuXG5cdFx0bGV0IHVzZVNvbGlkQ29sb3IgPSBmYWxzZTtcblx0XHRjb25zdCBiYWNrZ3JvdW5kID0gc2NlbmUuYmFja2dyb3VuZDtcblxuXHRcdGlmICggYmFja2dyb3VuZCApIHtcblxuXHRcdFx0aWYgKCBiYWNrZ3JvdW5kLmlzQ29sb3IgKSB7XG5cblx0XHRcdFx0YmFja2dyb3VuZE1hdGVyaWFsLmNvbG9yLmNvcHkoIGJhY2tncm91bmQgKTtcblx0XHRcdFx0c2NlbmUuYmFja2dyb3VuZCA9IG51bGw7XG5cdFx0XHRcdHVzZVNvbGlkQ29sb3IgPSB0cnVlO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRiYWNrZ3JvdW5kTWF0ZXJpYWwuY29sb3IuY29weSggX2NsZWFyQ29sb3IgKTtcblx0XHRcdHVzZVNvbGlkQ29sb3IgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY29sID0gaSAlIDM7XG5cdFx0XHRpZiAoIGNvbCA9PT0gMCApIHtcblxuXHRcdFx0XHRjdWJlQ2FtZXJhLnVwLnNldCggMCwgdXBTaWduWyBpIF0sIDAgKTtcblx0XHRcdFx0Y3ViZUNhbWVyYS5sb29rQXQoIGZvcndhcmRTaWduWyBpIF0sIDAsIDAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggY29sID09PSAxICkge1xuXG5cdFx0XHRcdGN1YmVDYW1lcmEudXAuc2V0KCAwLCAwLCB1cFNpZ25bIGkgXSApO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdCggMCwgZm9yd2FyZFNpZ25bIGkgXSwgMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGN1YmVDYW1lcmEudXAuc2V0KCAwLCB1cFNpZ25bIGkgXSwgMCApO1xuXHRcdFx0XHRjdWJlQ2FtZXJhLmxvb2tBdCggMCwgMCwgZm9yd2FyZFNpZ25bIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9zZXRWaWV3cG9ydCggY3ViZVVWUmVuZGVyVGFyZ2V0LFxuXHRcdFx0XHRjb2wgKiBTSVpFX01BWCwgaSA+IDIgPyBTSVpFX01BWCA6IDAsIFNJWkVfTUFYLCBTSVpFX01BWCApO1xuXHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBjdWJlVVZSZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0aWYgKCB1c2VTb2xpZENvbG9yICkge1xuXG5cdFx0XHRcdHJlbmRlcmVyLnJlbmRlciggYmFja2dyb3VuZEJveCwgY3ViZUNhbWVyYSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGN1YmVDYW1lcmEgKTtcblxuXHRcdH1cblxuXHRcdGJhY2tncm91bmRCb3guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdGJhY2tncm91bmRCb3gubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXG5cdFx0cmVuZGVyZXIudG9uZU1hcHBpbmcgPSB0b25lTWFwcGluZztcblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBvcmlnaW5hbEF1dG9DbGVhcjtcblx0XHRzY2VuZS5iYWNrZ3JvdW5kID0gYmFja2dyb3VuZDtcblxuXHR9XG5cblx0X3RleHR1cmVUb0N1YmVVViggdGV4dHVyZSwgY3ViZVVWUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblxuXHRcdGNvbnN0IGlzQ3ViZVRleHR1cmUgPSAoIHRleHR1cmUubWFwcGluZyA9PT0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nIHx8IHRleHR1cmUubWFwcGluZyA9PT0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nICk7XG5cblx0XHRpZiAoIGlzQ3ViZVRleHR1cmUgKSB7XG5cblx0XHRcdGlmICggdGhpcy5fY3ViZW1hcFNoYWRlciA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyID0gX2dldEN1YmVtYXBTaGFkZXIoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSAoIHRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSApID8gLSAxIDogMTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggdGhpcy5fZXF1aXJlY3RTaGFkZXIgPT09IG51bGwgKSB7XG5cblx0XHRcdFx0dGhpcy5fZXF1aXJlY3RTaGFkZXIgPSBfZ2V0RXF1aXJlY3RTaGFkZXIoKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBpc0N1YmVUZXh0dXJlID8gdGhpcy5fY3ViZW1hcFNoYWRlciA6IHRoaXMuX2VxdWlyZWN0U2hhZGVyO1xuXHRcdGNvbnN0IG1lc2ggPSBuZXcgTWVzaCggX2xvZFBsYW5lc1sgMCBdLCBtYXRlcmlhbCApO1xuXG5cdFx0Y29uc3QgdW5pZm9ybXMgPSBtYXRlcmlhbC51bmlmb3JtcztcblxuXHRcdHVuaWZvcm1zWyAnZW52TWFwJyBdLnZhbHVlID0gdGV4dHVyZTtcblxuXHRcdGlmICggISBpc0N1YmVUZXh0dXJlICkge1xuXG5cdFx0XHR1bmlmb3Jtc1sgJ3RleGVsU2l6ZScgXS52YWx1ZS5zZXQoIDEuMCAvIHRleHR1cmUuaW1hZ2Uud2lkdGgsIDEuMCAvIHRleHR1cmUuaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHRfc2V0Vmlld3BvcnQoIGN1YmVVVlJlbmRlclRhcmdldCwgMCwgMCwgMyAqIFNJWkVfTUFYLCAyICogU0laRV9NQVggKTtcblxuXHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggY3ViZVVWUmVuZGVyVGFyZ2V0ICk7XG5cdFx0cmVuZGVyZXIucmVuZGVyKCBtZXNoLCBfZmxhdENhbWVyYSApO1xuXG5cdH1cblxuXHRfYXBwbHlQTVJFTSggY3ViZVVWUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcblx0XHRjb25zdCBhdXRvQ2xlYXIgPSByZW5kZXJlci5hdXRvQ2xlYXI7XG5cdFx0cmVuZGVyZXIuYXV0b0NsZWFyID0gZmFsc2U7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDE7IGkgPCBUT1RBTF9MT0RTOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBzaWdtYSA9IE1hdGguc3FydCggX3NpZ21hc1sgaSBdICogX3NpZ21hc1sgaSBdIC0gX3NpZ21hc1sgaSAtIDEgXSAqIF9zaWdtYXNbIGkgLSAxIF0gKTtcblxuXHRcdFx0Y29uc3QgcG9sZUF4aXMgPSBfYXhpc0RpcmVjdGlvbnNbICggaSAtIDEgKSAlIF9heGlzRGlyZWN0aW9ucy5sZW5ndGggXTtcblxuXHRcdFx0dGhpcy5fYmx1ciggY3ViZVVWUmVuZGVyVGFyZ2V0LCBpIC0gMSwgaSwgc2lnbWEsIHBvbGVBeGlzICk7XG5cblx0XHR9XG5cblx0XHRyZW5kZXJlci5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgdHdvLXBhc3MgR2F1c3NpYW4gYmx1ciBmb3IgYSBjdWJlbWFwLiBOb3JtYWxseSB0aGlzIGlzIGRvbmVcblx0ICogdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LCBidXQgdGhpcyBicmVha3MgZG93biBvbiBhIGN1YmUuIEhlcmUgd2UgYXBwbHlcblx0ICogdGhlIGJsdXIgbGF0aXR1ZGluYWxseSAoYXJvdW5kIHRoZSBwb2xlcyksIGFuZCB0aGVuIGxvbmdpdHVkaW5hbGx5ICh0b3dhcmRzXG5cdCAqIHRoZSBwb2xlcykgdG8gYXBwcm94aW1hdGUgdGhlIG9ydGhvZ29uYWxseS1zZXBhcmFibGUgYmx1ci4gSXQgaXMgbGVhc3Rcblx0ICogYWNjdXJhdGUgYXQgdGhlIHBvbGVzLCBidXQgc3RpbGwgZG9lcyBhIGRlY2VudCBqb2IuXG5cdCAqL1xuXHRfYmx1ciggY3ViZVVWUmVuZGVyVGFyZ2V0LCBsb2RJbiwgbG9kT3V0LCBzaWdtYSwgcG9sZUF4aXMgKSB7XG5cblx0XHRjb25zdCBwaW5nUG9uZ1JlbmRlclRhcmdldCA9IHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O1xuXG5cdFx0dGhpcy5faGFsZkJsdXIoXG5cdFx0XHRjdWJlVVZSZW5kZXJUYXJnZXQsXG5cdFx0XHRwaW5nUG9uZ1JlbmRlclRhcmdldCxcblx0XHRcdGxvZEluLFxuXHRcdFx0bG9kT3V0LFxuXHRcdFx0c2lnbWEsXG5cdFx0XHQnbGF0aXR1ZGluYWwnLFxuXHRcdFx0cG9sZUF4aXMgKTtcblxuXHRcdHRoaXMuX2hhbGZCbHVyKFxuXHRcdFx0cGluZ1BvbmdSZW5kZXJUYXJnZXQsXG5cdFx0XHRjdWJlVVZSZW5kZXJUYXJnZXQsXG5cdFx0XHRsb2RPdXQsXG5cdFx0XHRsb2RPdXQsXG5cdFx0XHRzaWdtYSxcblx0XHRcdCdsb25naXR1ZGluYWwnLFxuXHRcdFx0cG9sZUF4aXMgKTtcblxuXHR9XG5cblx0X2hhbGZCbHVyKCB0YXJnZXRJbiwgdGFyZ2V0T3V0LCBsb2RJbiwgbG9kT3V0LCBzaWdtYVJhZGlhbnMsIGRpcmVjdGlvbiwgcG9sZUF4aXMgKSB7XG5cblx0XHRjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuXHRcdGNvbnN0IGJsdXJNYXRlcmlhbCA9IHRoaXMuX2JsdXJNYXRlcmlhbDtcblxuXHRcdGlmICggZGlyZWN0aW9uICE9PSAnbGF0aXR1ZGluYWwnICYmIGRpcmVjdGlvbiAhPT0gJ2xvbmdpdHVkaW5hbCcgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdCdibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhJyApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gTnVtYmVyIG9mIHN0YW5kYXJkIGRldmlhdGlvbnMgYXQgd2hpY2ggdG8gY3V0IG9mZiB0aGUgZGlzY3JldGUgYXBwcm94aW1hdGlvbi5cblx0XHRjb25zdCBTVEFOREFSRF9ERVZJQVRJT05TID0gMztcblxuXHRcdGNvbnN0IGJsdXJNZXNoID0gbmV3IE1lc2goIF9sb2RQbGFuZXNbIGxvZE91dCBdLCBibHVyTWF0ZXJpYWwgKTtcblx0XHRjb25zdCBibHVyVW5pZm9ybXMgPSBibHVyTWF0ZXJpYWwudW5pZm9ybXM7XG5cblx0XHRjb25zdCBwaXhlbHMgPSBfc2l6ZUxvZHNbIGxvZEluIF0gLSAxO1xuXHRcdGNvbnN0IHJhZGlhbnNQZXJQaXhlbCA9IGlzRmluaXRlKCBzaWdtYVJhZGlhbnMgKSA/IE1hdGguUEkgLyAoIDIgKiBwaXhlbHMgKSA6IDIgKiBNYXRoLlBJIC8gKCAyICogTUFYX1NBTVBMRVMgLSAxICk7XG5cdFx0Y29uc3Qgc2lnbWFQaXhlbHMgPSBzaWdtYVJhZGlhbnMgLyByYWRpYW5zUGVyUGl4ZWw7XG5cdFx0Y29uc3Qgc2FtcGxlcyA9IGlzRmluaXRlKCBzaWdtYVJhZGlhbnMgKSA/IDEgKyBNYXRoLmZsb29yKCBTVEFOREFSRF9ERVZJQVRJT05TICogc2lnbWFQaXhlbHMgKSA6IE1BWF9TQU1QTEVTO1xuXG5cdFx0aWYgKCBzYW1wbGVzID4gTUFYX1NBTVBMRVMgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggYHNpZ21hUmFkaWFucywgJHtcblx0XHRcdFx0c2lnbWFSYWRpYW5zfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke1xuXHRcdFx0XHRzYW1wbGVzfSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7TUFYX1NBTVBMRVN9YCApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgd2VpZ2h0cyA9IFtdO1xuXHRcdGxldCBzdW0gPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgTUFYX1NBTVBMRVM7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IHggPSBpIC8gc2lnbWFQaXhlbHM7XG5cdFx0XHRjb25zdCB3ZWlnaHQgPSBNYXRoLmV4cCggLSB4ICogeCAvIDIgKTtcblx0XHRcdHdlaWdodHMucHVzaCggd2VpZ2h0ICk7XG5cblx0XHRcdGlmICggaSA9PT0gMCApIHtcblxuXHRcdFx0XHRzdW0gKz0gd2VpZ2h0O1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpIDwgc2FtcGxlcyApIHtcblxuXHRcdFx0XHRzdW0gKz0gMiAqIHdlaWdodDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHdlaWdodHNbIGkgXSA9IHdlaWdodHNbIGkgXSAvIHN1bTtcblxuXHRcdH1cblxuXHRcdGJsdXJVbmlmb3Jtc1sgJ2Vudk1hcCcgXS52YWx1ZSA9IHRhcmdldEluLnRleHR1cmU7XG5cdFx0Ymx1clVuaWZvcm1zWyAnc2FtcGxlcycgXS52YWx1ZSA9IHNhbXBsZXM7XG5cdFx0Ymx1clVuaWZvcm1zWyAnd2VpZ2h0cycgXS52YWx1ZSA9IHdlaWdodHM7XG5cdFx0Ymx1clVuaWZvcm1zWyAnbGF0aXR1ZGluYWwnIF0udmFsdWUgPSBkaXJlY3Rpb24gPT09ICdsYXRpdHVkaW5hbCc7XG5cblx0XHRpZiAoIHBvbGVBeGlzICkge1xuXG5cdFx0XHRibHVyVW5pZm9ybXNbICdwb2xlQXhpcycgXS52YWx1ZSA9IHBvbGVBeGlzO1xuXG5cdFx0fVxuXG5cdFx0Ymx1clVuaWZvcm1zWyAnZFRoZXRhJyBdLnZhbHVlID0gcmFkaWFuc1BlclBpeGVsO1xuXHRcdGJsdXJVbmlmb3Jtc1sgJ21pcEludCcgXS52YWx1ZSA9IExPRF9NQVggLSBsb2RJbjtcblxuXHRcdGNvbnN0IG91dHB1dFNpemUgPSBfc2l6ZUxvZHNbIGxvZE91dCBdO1xuXHRcdGNvbnN0IHggPSAzICogTWF0aC5tYXgoIDAsIFNJWkVfTUFYIC0gMiAqIG91dHB1dFNpemUgKTtcblx0XHRjb25zdCB5ID0gKCBsb2RPdXQgPT09IDAgPyAwIDogMiAqIFNJWkVfTUFYICkgKyAyICogb3V0cHV0U2l6ZSAqICggbG9kT3V0ID4gTE9EX01BWCAtIExPRF9NSU4gPyBsb2RPdXQgLSBMT0RfTUFYICsgTE9EX01JTiA6IDAgKTtcblxuXHRcdF9zZXRWaWV3cG9ydCggdGFyZ2V0T3V0LCB4LCB5LCAzICogb3V0cHV0U2l6ZSwgMiAqIG91dHB1dFNpemUgKTtcblx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHRhcmdldE91dCApO1xuXHRcdHJlbmRlcmVyLnJlbmRlciggYmx1ck1lc2gsIF9mbGF0Q2FtZXJhICk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVQbGFuZXMoKSB7XG5cblx0Y29uc3QgX2xvZFBsYW5lcyA9IFtdO1xuXHRjb25zdCBfc2l6ZUxvZHMgPSBbXTtcblx0Y29uc3QgX3NpZ21hcyA9IFtdO1xuXG5cdGxldCBsb2QgPSBMT0RfTUFYO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSA8IFRPVEFMX0xPRFM7IGkgKysgKSB7XG5cblx0XHRjb25zdCBzaXplTG9kID0gTWF0aC5wb3coIDIsIGxvZCApO1xuXHRcdF9zaXplTG9kcy5wdXNoKCBzaXplTG9kICk7XG5cdFx0bGV0IHNpZ21hID0gMS4wIC8gc2l6ZUxvZDtcblxuXHRcdGlmICggaSA+IExPRF9NQVggLSBMT0RfTUlOICkge1xuXG5cdFx0XHRzaWdtYSA9IEVYVFJBX0xPRF9TSUdNQVsgaSAtIExPRF9NQVggKyBMT0RfTUlOIC0gMSBdO1xuXG5cdFx0fSBlbHNlIGlmICggaSA9PT0gMCApIHtcblxuXHRcdFx0c2lnbWEgPSAwO1xuXG5cdFx0fVxuXG5cdFx0X3NpZ21hcy5wdXNoKCBzaWdtYSApO1xuXG5cdFx0Y29uc3QgdGV4ZWxTaXplID0gMS4wIC8gKCBzaXplTG9kIC0gMSApO1xuXHRcdGNvbnN0IG1pbiA9IC0gdGV4ZWxTaXplIC8gMjtcblx0XHRjb25zdCBtYXggPSAxICsgdGV4ZWxTaXplIC8gMjtcblx0XHRjb25zdCB1djEgPSBbIG1pbiwgbWluLCBtYXgsIG1pbiwgbWF4LCBtYXgsIG1pbiwgbWluLCBtYXgsIG1heCwgbWluLCBtYXggXTtcblxuXHRcdGNvbnN0IGN1YmVGYWNlcyA9IDY7XG5cdFx0Y29uc3QgdmVydGljZXMgPSA2O1xuXHRcdGNvbnN0IHBvc2l0aW9uU2l6ZSA9IDM7XG5cdFx0Y29uc3QgdXZTaXplID0gMjtcblx0XHRjb25zdCBmYWNlSW5kZXhTaXplID0gMTtcblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheSggcG9zaXRpb25TaXplICogdmVydGljZXMgKiBjdWJlRmFjZXMgKTtcblx0XHRjb25zdCB1diA9IG5ldyBGbG9hdDMyQXJyYXkoIHV2U2l6ZSAqIHZlcnRpY2VzICogY3ViZUZhY2VzICk7XG5cdFx0Y29uc3QgZmFjZUluZGV4ID0gbmV3IEZsb2F0MzJBcnJheSggZmFjZUluZGV4U2l6ZSAqIHZlcnRpY2VzICogY3ViZUZhY2VzICk7XG5cblx0XHRmb3IgKCBsZXQgZmFjZSA9IDA7IGZhY2UgPCBjdWJlRmFjZXM7IGZhY2UgKysgKSB7XG5cblx0XHRcdGNvbnN0IHggPSAoIGZhY2UgJSAzICkgKiAyIC8gMyAtIDE7XG5cdFx0XHRjb25zdCB5ID0gZmFjZSA+IDIgPyAwIDogLSAxO1xuXHRcdFx0Y29uc3QgY29vcmRpbmF0ZXMgPSBbXG5cdFx0XHRcdHgsIHksIDAsXG5cdFx0XHRcdHggKyAyIC8gMywgeSwgMCxcblx0XHRcdFx0eCArIDIgLyAzLCB5ICsgMSwgMCxcblx0XHRcdFx0eCwgeSwgMCxcblx0XHRcdFx0eCArIDIgLyAzLCB5ICsgMSwgMCxcblx0XHRcdFx0eCwgeSArIDEsIDBcblx0XHRcdF07XG5cdFx0XHRwb3NpdGlvbi5zZXQoIGNvb3JkaW5hdGVzLCBwb3NpdGlvblNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UgKTtcblx0XHRcdHV2LnNldCggdXYxLCB1dlNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UgKTtcblx0XHRcdGNvbnN0IGZpbGwgPSBbIGZhY2UsIGZhY2UsIGZhY2UsIGZhY2UsIGZhY2UsIGZhY2UgXTtcblx0XHRcdGZhY2VJbmRleC5zZXQoIGZpbGwsIGZhY2VJbmRleFNpemUgKiB2ZXJ0aWNlcyAqIGZhY2UgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHBsYW5lcyA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdHBsYW5lcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBwb3NpdGlvblNpemUgKSApO1xuXHRcdHBsYW5lcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHV2LCB1dlNpemUgKSApO1xuXHRcdHBsYW5lcy5zZXRBdHRyaWJ1dGUoICdmYWNlSW5kZXgnLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBmYWNlSW5kZXgsIGZhY2VJbmRleFNpemUgKSApO1xuXHRcdF9sb2RQbGFuZXMucHVzaCggcGxhbmVzICk7XG5cblx0XHRpZiAoIGxvZCA+IExPRF9NSU4gKSB7XG5cblx0XHRcdGxvZCAtLTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHsgX2xvZFBsYW5lcywgX3NpemVMb2RzLCBfc2lnbWFzIH07XG5cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVJlbmRlclRhcmdldCggcGFyYW1zICkge1xuXG5cdGNvbnN0IGN1YmVVVlJlbmRlclRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCggMyAqIFNJWkVfTUFYLCAzICogU0laRV9NQVgsIHBhcmFtcyApO1xuXHRjdWJlVVZSZW5kZXJUYXJnZXQudGV4dHVyZS5tYXBwaW5nID0gQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc7XG5cdGN1YmVVVlJlbmRlclRhcmdldC50ZXh0dXJlLm5hbWUgPSAnUE1SRU0uY3ViZVV2Jztcblx0Y3ViZVVWUmVuZGVyVGFyZ2V0LnNjaXNzb3JUZXN0ID0gdHJ1ZTtcblx0cmV0dXJuIGN1YmVVVlJlbmRlclRhcmdldDtcblxufVxuXG5mdW5jdGlvbiBfc2V0Vmlld3BvcnQoIHRhcmdldCwgeCwgeSwgd2lkdGgsIGhlaWdodCApIHtcblxuXHR0YXJnZXQudmlld3BvcnQuc2V0KCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7XG5cdHRhcmdldC5zY2lzc29yLnNldCggeCwgeSwgd2lkdGgsIGhlaWdodCApO1xuXG59XG5cbmZ1bmN0aW9uIF9nZXRCbHVyU2hhZGVyKCBtYXhTYW1wbGVzICkge1xuXG5cdGNvbnN0IHdlaWdodHMgPSBuZXcgRmxvYXQzMkFycmF5KCBtYXhTYW1wbGVzICk7XG5cdGNvbnN0IHBvbGVBeGlzID0gbmV3IFZlY3RvcjMoIDAsIDEsIDAgKTtcblx0Y29uc3Qgc2hhZGVyTWF0ZXJpYWwgPSBuZXcgUmF3U2hhZGVyTWF0ZXJpYWwoIHtcblxuXHRcdG5hbWU6ICdTcGhlcmljYWxHYXVzc2lhbkJsdXInLFxuXG5cdFx0ZGVmaW5lczogeyAnbic6IG1heFNhbXBsZXMgfSxcblxuXHRcdHVuaWZvcm1zOiB7XG5cdFx0XHQnZW52TWFwJzogeyB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0J3NhbXBsZXMnOiB7IHZhbHVlOiAxIH0sXG5cdFx0XHQnd2VpZ2h0cyc6IHsgdmFsdWU6IHdlaWdodHMgfSxcblx0XHRcdCdsYXRpdHVkaW5hbCc6IHsgdmFsdWU6IGZhbHNlIH0sXG5cdFx0XHQnZFRoZXRhJzogeyB2YWx1ZTogMCB9LFxuXHRcdFx0J21pcEludCc6IHsgdmFsdWU6IDAgfSxcblx0XHRcdCdwb2xlQXhpcyc6IHsgdmFsdWU6IHBvbGVBeGlzIH1cblx0XHR9LFxuXG5cdFx0dmVydGV4U2hhZGVyOiBfZ2V0Q29tbW9uVmVydGV4U2hhZGVyKCksXG5cblx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqL2BcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIGludCBzYW1wbGVzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07XG5cdFx0XHR1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRUaGV0YTtcblx0XHRcdHVuaWZvcm0gZmxvYXQgbWlwSW50O1xuXHRcdFx0dW5pZm9ybSB2ZWMzIHBvbGVBeGlzO1xuXG5cdFx0XHQjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRcdCNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cblx0XHRcdHZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkge1xuXG5cdFx0XHRcdGZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApO1xuXHRcdFx0XHQvLyBSb2RyaWd1ZXMnIGF4aXMtYW5nbGUgcm90YXRpb25cblx0XHRcdFx0dmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGFcblx0XHRcdFx0XHQrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhIClcblx0XHRcdFx0XHQrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTtcblxuXHRcdFx0XHRyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0dmVjMyBheGlzID0gbGF0aXR1ZGluYWwgPyBwb2xlQXhpcyA6IGNyb3NzKCBwb2xlQXhpcywgdk91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYWxsKCBlcXVhbCggYXhpcywgdmVjMyggMC4wICkgKSApICkge1xuXG5cdFx0XHRcdFx0YXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRheGlzID0gbm9ybWFsaXplKCBheGlzICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgMCBdICogZ2V0U2FtcGxlKCAwLjAsIGF4aXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpbnQgaSA9IDE7IGkgPCBuOyBpKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGkgPj0gc2FtcGxlcyApIHtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdGAsXG5cblx0XHRibGVuZGluZzogTm9CbGVuZGluZyxcblx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlXG5cblx0fSApO1xuXG5cdHJldHVybiBzaGFkZXJNYXRlcmlhbDtcblxufVxuXG5mdW5jdGlvbiBfZ2V0RXF1aXJlY3RTaGFkZXIoKSB7XG5cblx0Y29uc3QgdGV4ZWxTaXplID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblx0Y29uc3Qgc2hhZGVyTWF0ZXJpYWwgPSBuZXcgUmF3U2hhZGVyTWF0ZXJpYWwoIHtcblxuXHRcdG5hbWU6ICdFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVVicsXG5cblx0XHR1bmlmb3Jtczoge1xuXHRcdFx0J2Vudk1hcCc6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdCd0ZXhlbFNpemUnOiB7IHZhbHVlOiB0ZXhlbFNpemUgfVxuXHRcdH0sXG5cblx0XHR2ZXJ0ZXhTaGFkZXI6IF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSxcblxuXHRcdGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovYFxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54ICs9IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueSArPSB0ZXhlbFNpemUueTtcblx0XHRcdFx0dmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXG5cdFx0XHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0XHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7XG5cblx0XHRcdH1cblx0XHRgLFxuXG5cdFx0YmxlbmRpbmc6IE5vQmxlbmRpbmcsXG5cdFx0ZGVwdGhUZXN0OiBmYWxzZSxcblx0XHRkZXB0aFdyaXRlOiBmYWxzZVxuXG5cdH0gKTtcblxuXHRyZXR1cm4gc2hhZGVyTWF0ZXJpYWw7XG5cbn1cblxuZnVuY3Rpb24gX2dldEN1YmVtYXBTaGFkZXIoKSB7XG5cblx0Y29uc3Qgc2hhZGVyTWF0ZXJpYWwgPSBuZXcgUmF3U2hhZGVyTWF0ZXJpYWwoIHtcblxuXHRcdG5hbWU6ICdDdWJlbWFwVG9DdWJlVVYnLFxuXG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdCdlbnZNYXAnOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHQnZmxpcEVudk1hcCc6IHsgdmFsdWU6IC0gMSB9XG5cdFx0fSxcblxuXHRcdHZlcnRleFNoYWRlcjogX2dldENvbW1vblZlcnRleFNoYWRlcigpLFxuXG5cdFx0ZnJhZ21lbnRTaGFkZXI6IC8qIGdsc2wgKi9gXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0YCxcblxuXHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nLFxuXHRcdGRlcHRoVGVzdDogZmFsc2UsXG5cdFx0ZGVwdGhXcml0ZTogZmFsc2VcblxuXHR9ICk7XG5cblx0cmV0dXJuIHNoYWRlck1hdGVyaWFsO1xuXG59XG5cbmZ1bmN0aW9uIF9nZXRDb21tb25WZXJ0ZXhTaGFkZXIoKSB7XG5cblx0cmV0dXJuIC8qIGdsc2wgKi9gXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0YDtcblxufVxuXG5mdW5jdGlvbiBXZWJHTEN1YmVVVk1hcHMoIHJlbmRlcmVyICkge1xuXG5cdGxldCBjdWJlVVZtYXBzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRsZXQgcG1yZW1HZW5lcmF0b3IgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIGdldCggdGV4dHVyZSApIHtcblxuXHRcdGlmICggdGV4dHVyZSAmJiB0ZXh0dXJlLmlzVGV4dHVyZSApIHtcblxuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRleHR1cmUubWFwcGluZztcblxuXHRcdFx0Y29uc3QgaXNFcXVpcmVjdE1hcCA9ICggbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcgfHwgbWFwcGluZyA9PT0gRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcgKTtcblx0XHRcdGNvbnN0IGlzQ3ViZU1hcCA9ICggbWFwcGluZyA9PT0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nIHx8IG1hcHBpbmcgPT09IEN1YmVSZWZyYWN0aW9uTWFwcGluZyApO1xuXG5cdFx0XHQvLyBlcXVpcmVjdC9jdWJlIG1hcCB0byBjdWJlVVYgY29udmVyc2lvblxuXG5cdFx0XHRpZiAoIGlzRXF1aXJlY3RNYXAgfHwgaXNDdWJlTWFwICkge1xuXG5cdFx0XHRcdGlmICggdGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmUgJiYgdGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0XHRsZXQgcmVuZGVyVGFyZ2V0ID0gY3ViZVVWbWFwcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdFx0XHRcdGlmICggcG1yZW1HZW5lcmF0b3IgPT09IG51bGwgKSBwbXJlbUdlbmVyYXRvciA9IG5ldyBQTVJFTUdlbmVyYXRvciggcmVuZGVyZXIgKTtcblxuXHRcdFx0XHRcdHJlbmRlclRhcmdldCA9IGlzRXF1aXJlY3RNYXAgPyBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKCB0ZXh0dXJlLCByZW5kZXJUYXJnZXQgKSA6IHBtcmVtR2VuZXJhdG9yLmZyb21DdWJlbWFwKCB0ZXh0dXJlLCByZW5kZXJUYXJnZXQgKTtcblx0XHRcdFx0XHRjdWJlVVZtYXBzLnNldCggdGV4dHVyZSwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlmICggY3ViZVVWbWFwcy5oYXMoIHRleHR1cmUgKSApIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGN1YmVVVm1hcHMuZ2V0KCB0ZXh0dXJlICkudGV4dHVyZTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdFx0aWYgKCAoIGlzRXF1aXJlY3RNYXAgJiYgaW1hZ2UgJiYgaW1hZ2UuaGVpZ2h0ID4gMCApIHx8ICggaXNDdWJlTWFwICYmIGltYWdlICYmIGlzQ3ViZVRleHR1cmVDb21wbGV0ZSggaW1hZ2UgKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggcG1yZW1HZW5lcmF0b3IgPT09IG51bGwgKSBwbXJlbUdlbmVyYXRvciA9IG5ldyBQTVJFTUdlbmVyYXRvciggcmVuZGVyZXIgKTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSBpc0VxdWlyZWN0TWFwID8gcG1yZW1HZW5lcmF0b3IuZnJvbUVxdWlyZWN0YW5ndWxhciggdGV4dHVyZSApIDogcG1yZW1HZW5lcmF0b3IuZnJvbUN1YmVtYXAoIHRleHR1cmUgKTtcblx0XHRcdFx0XHRcdFx0Y3ViZVVWbWFwcy5zZXQoIHRleHR1cmUsIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRcdFx0XHRcdHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlICk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIGltYWdlIG5vdCB5ZXQgcmVhZHkuIHRyeSB0aGUgY29udmVyc2lvbiBuZXh0IGZyYW1lXG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBpc0N1YmVUZXh0dXJlQ29tcGxldGUoIGltYWdlICkge1xuXG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRjb25zdCBsZW5ndGggPSA2O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRpZiAoIGltYWdlWyBpIF0gIT09IHVuZGVmaW5lZCApIGNvdW50ICsrO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvdW50ID09PSBsZW5ndGg7XG5cblxuXHR9XG5cblx0ZnVuY3Rpb24gb25UZXh0dXJlRGlzcG9zZSggZXZlbnQgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0dGV4dHVyZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTtcblxuXHRcdGNvbnN0IGN1YmVtYXBVViA9IGN1YmVVVm1hcHMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIGN1YmVtYXBVViAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjdWJlVVZtYXBzLmRlbGV0ZSggdGV4dHVyZSApO1xuXHRcdFx0Y3ViZW1hcFVWLmRpc3Bvc2UoKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblxuXHRcdGN1YmVVVm1hcHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdFx0aWYgKCBwbXJlbUdlbmVyYXRvciAhPT0gbnVsbCApIHtcblxuXHRcdFx0cG1yZW1HZW5lcmF0b3IuZGlzcG9zZSgpO1xuXHRcdFx0cG1yZW1HZW5lcmF0b3IgPSBudWxsO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTEV4dGVuc2lvbnMoIGdsICkge1xuXG5cdGNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuXHRmdW5jdGlvbiBnZXRFeHRlbnNpb24oIG5hbWUgKSB7XG5cblx0XHRpZiAoIGV4dGVuc2lvbnNbIG5hbWUgXSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRyZXR1cm4gZXh0ZW5zaW9uc1sgbmFtZSBdO1xuXG5cdFx0fVxuXG5cdFx0bGV0IGV4dGVuc2lvbjtcblxuXHRcdHN3aXRjaCAoIG5hbWUgKSB7XG5cblx0XHRcdGNhc2UgJ1dFQkdMX2RlcHRoX3RleHR1cmUnOlxuXHRcdFx0XHRleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oICdXRUJHTF9kZXB0aF90ZXh0dXJlJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ01PWl9XRUJHTF9kZXB0aF90ZXh0dXJlJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ1dFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlJyApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJzpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ1dFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0Yyc6XG5cdFx0XHRcdGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKSB8fCBnbC5nZXRFeHRlbnNpb24oICdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCBuYW1lICk7XG5cblx0XHR9XG5cblx0XHRleHRlbnNpb25zWyBuYW1lIF0gPSBleHRlbnNpb247XG5cblx0XHRyZXR1cm4gZXh0ZW5zaW9uO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0aGFzOiBmdW5jdGlvbiAoIG5hbWUgKSB7XG5cblx0XHRcdHJldHVybiBnZXRFeHRlbnNpb24oIG5hbWUgKSAhPT0gbnVsbDtcblxuXHRcdH0sXG5cblx0XHRpbml0OiBmdW5jdGlvbiAoIGNhcGFiaWxpdGllcyApIHtcblxuXHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdXRUJHTF9kZXB0aF90ZXh0dXJlJyApO1xuXHRcdFx0XHRnZXRFeHRlbnNpb24oICdPRVNfdGV4dHVyZV9mbG9hdCcgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbiggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcgKTtcblx0XHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnICk7XG5cdFx0XHRcdGdldEV4dGVuc2lvbiggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Z2V0RXh0ZW5zaW9uKCAnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyApO1xuXHRcdFx0Z2V0RXh0ZW5zaW9uKCAnRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JyApO1xuXHRcdFx0Z2V0RXh0ZW5zaW9uKCAnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyApO1xuXG5cdFx0fSxcblxuXHRcdGdldDogZnVuY3Rpb24gKCBuYW1lICkge1xuXG5cdFx0XHRjb25zdCBleHRlbnNpb24gPSBnZXRFeHRlbnNpb24oIG5hbWUgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gPT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogJyArIG5hbWUgKyAnIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXh0ZW5zaW9uO1xuXG5cdFx0fVxuXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xHZW9tZXRyaWVzKCBnbCwgYXR0cmlidXRlcywgaW5mbywgYmluZGluZ1N0YXRlcyApIHtcblxuXHRjb25zdCBnZW9tZXRyaWVzID0ge307XG5cdGNvbnN0IHdpcmVmcmFtZUF0dHJpYnV0ZXMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIG9uR2VvbWV0cnlEaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0YXR0cmlidXRlcy5yZW1vdmUoIGdlb21ldHJ5LmluZGV4ICk7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBjb25zdCBuYW1lIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGF0dHJpYnV0ZXMucmVtb3ZlKCBnZW9tZXRyeS5hdHRyaWJ1dGVzWyBuYW1lIF0gKTtcblxuXHRcdH1cblxuXHRcdGdlb21ldHJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2UgKTtcblxuXHRcdGRlbGV0ZSBnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdO1xuXG5cdFx0Y29uc3QgYXR0cmlidXRlID0gd2lyZWZyYW1lQXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5ICk7XG5cblx0XHRpZiAoIGF0dHJpYnV0ZSApIHtcblxuXHRcdFx0YXR0cmlidXRlcy5yZW1vdmUoIGF0dHJpYnV0ZSApO1xuXHRcdFx0d2lyZWZyYW1lQXR0cmlidXRlcy5kZWxldGUoIGdlb21ldHJ5ICk7XG5cblx0XHR9XG5cblx0XHRiaW5kaW5nU3RhdGVzLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KCBnZW9tZXRyeSApO1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID09PSB0cnVlICkge1xuXG5cdFx0XHRkZWxldGUgZ2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQ7XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0aW5mby5tZW1vcnkuZ2VvbWV0cmllcyAtLTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0KCBvYmplY3QsIGdlb21ldHJ5ICkge1xuXG5cdFx0aWYgKCBnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdID09PSB0cnVlICkgcmV0dXJuIGdlb21ldHJ5O1xuXG5cdFx0Z2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbkdlb21ldHJ5RGlzcG9zZSApO1xuXG5cdFx0Z2VvbWV0cmllc1sgZ2VvbWV0cnkuaWQgXSA9IHRydWU7XG5cblx0XHRpbmZvLm1lbW9yeS5nZW9tZXRyaWVzICsrO1xuXG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGUoIGdlb21ldHJ5ICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnlBdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdC8vIFVwZGF0aW5nIGluZGV4IGJ1ZmZlciBpbiBWQU8gbm93LiBTZWUgV2ViR0xCaW5kaW5nU3RhdGVzLlxuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBnZW9tZXRyeUF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKCBnZW9tZXRyeUF0dHJpYnV0ZXNbIG5hbWUgXSwgMzQ5NjIgKTtcblxuXHRcdH1cblxuXHRcdC8vIG1vcnBoIHRhcmdldHNcblxuXHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblxuXHRcdGZvciAoIGNvbnN0IG5hbWUgaW4gbW9ycGhBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IG1vcnBoQXR0cmlidXRlc1sgbmFtZSBdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKCBhcnJheVsgaSBdLCAzNDk2MiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKSB7XG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cblx0XHRjb25zdCBnZW9tZXRyeUluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0Y29uc3QgZ2VvbWV0cnlQb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG5cdFx0bGV0IHZlcnNpb24gPSAwO1xuXG5cdFx0aWYgKCBnZW9tZXRyeUluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IGdlb21ldHJ5SW5kZXguYXJyYXk7XG5cdFx0XHR2ZXJzaW9uID0gZ2VvbWV0cnlJbmRleC52ZXJzaW9uO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0Y29uc3QgYSA9IGFycmF5WyBpICsgMCBdO1xuXHRcdFx0XHRjb25zdCBiID0gYXJyYXlbIGkgKyAxIF07XG5cdFx0XHRcdGNvbnN0IGMgPSBhcnJheVsgaSArIDIgXTtcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGIsIGMsIGMsIGEgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgYXJyYXkgPSBnZW9tZXRyeVBvc2l0aW9uLmFycmF5O1xuXHRcdFx0dmVyc2lvbiA9IGdlb21ldHJ5UG9zaXRpb24udmVyc2lvbjtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gKCBhcnJheS5sZW5ndGggLyAzICkgLSAxOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdGNvbnN0IGEgPSBpICsgMDtcblx0XHRcdFx0Y29uc3QgYiA9IGkgKyAxO1xuXHRcdFx0XHRjb25zdCBjID0gaSArIDI7XG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBiLCBjLCBjLCBhICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGF0dHJpYnV0ZSA9IG5ldyAoIGFycmF5TmVlZHNVaW50MzIoIGluZGljZXMgKSA/IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA6IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSApKCBpbmRpY2VzLCAxICk7XG5cdFx0YXR0cmlidXRlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5cdFx0Ly8gVXBkYXRpbmcgaW5kZXggYnVmZmVyIGluIFZBTyBub3cuIFNlZSBXZWJHTEJpbmRpbmdTdGF0ZXNcblxuXHRcdC8vXG5cblx0XHRjb25zdCBwcmV2aW91c0F0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJpYnV0ZXMuZ2V0KCBnZW9tZXRyeSApO1xuXG5cdFx0aWYgKCBwcmV2aW91c0F0dHJpYnV0ZSApIGF0dHJpYnV0ZXMucmVtb3ZlKCBwcmV2aW91c0F0dHJpYnV0ZSApO1xuXG5cdFx0Ly9cblxuXHRcdHdpcmVmcmFtZUF0dHJpYnV0ZXMuc2V0KCBnZW9tZXRyeSwgYXR0cmlidXRlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKSB7XG5cblx0XHRjb25zdCBjdXJyZW50QXR0cmlidXRlID0gd2lyZWZyYW1lQXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5ICk7XG5cblx0XHRpZiAoIGN1cnJlbnRBdHRyaWJ1dGUgKSB7XG5cblx0XHRcdGNvbnN0IGdlb21ldHJ5SW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblxuXHRcdFx0aWYgKCBnZW9tZXRyeUluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdC8vIGlmIHRoZSBhdHRyaWJ1dGUgaXMgb2Jzb2xldGUsIGNyZWF0ZSBhIG5ldyBvbmVcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRBdHRyaWJ1dGUudmVyc2lvbiA8IGdlb21ldHJ5SW5kZXgudmVyc2lvbiApIHtcblxuXHRcdFx0XHRcdHVwZGF0ZVdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHVwZGF0ZVdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB3aXJlZnJhbWVBdHRyaWJ1dGVzLmdldCggZ2VvbWV0cnkgKTtcblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdGdldDogZ2V0LFxuXHRcdHVwZGF0ZTogdXBkYXRlLFxuXG5cdFx0Z2V0V2lyZWZyYW1lQXR0cmlidXRlOiBnZXRXaXJlZnJhbWVBdHRyaWJ1dGVcblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyKCBnbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGxldCBtb2RlO1xuXG5cdGZ1bmN0aW9uIHNldE1vZGUoIHZhbHVlICkge1xuXG5cdFx0bW9kZSA9IHZhbHVlO1xuXG5cdH1cblxuXHRsZXQgdHlwZSwgYnl0ZXNQZXJFbGVtZW50O1xuXG5cdGZ1bmN0aW9uIHNldEluZGV4KCB2YWx1ZSApIHtcblxuXHRcdHR5cGUgPSB2YWx1ZS50eXBlO1xuXHRcdGJ5dGVzUGVyRWxlbWVudCA9IHZhbHVlLmJ5dGVzUGVyRWxlbWVudDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyKCBzdGFydCwgY291bnQgKSB7XG5cblx0XHRnbC5kcmF3RWxlbWVudHMoIG1vZGUsIGNvdW50LCB0eXBlLCBzdGFydCAqIGJ5dGVzUGVyRWxlbWVudCApO1xuXG5cdFx0aW5mby51cGRhdGUoIGNvdW50LCBtb2RlLCAxICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlckluc3RhbmNlcyggc3RhcnQsIGNvdW50LCBwcmltY291bnQgKSB7XG5cblx0XHRpZiAoIHByaW1jb3VudCA9PT0gMCApIHJldHVybjtcblxuXHRcdGxldCBleHRlbnNpb24sIG1ldGhvZE5hbWU7XG5cblx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBnbDtcblx0XHRcdG1ldGhvZE5hbWUgPSAnZHJhd0VsZW1lbnRzSW5zdGFuY2VkJztcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTtcblx0XHRcdG1ldGhvZE5hbWUgPSAnZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUnO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicgKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRleHRlbnNpb25bIG1ldGhvZE5hbWUgXSggbW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50LCBwcmltY291bnQgKTtcblxuXHRcdGluZm8udXBkYXRlKCBjb3VudCwgbW9kZSwgcHJpbWNvdW50ICk7XG5cblx0fVxuXG5cdC8vXG5cblx0dGhpcy5zZXRNb2RlID0gc2V0TW9kZTtcblx0dGhpcy5zZXRJbmRleCA9IHNldEluZGV4O1xuXHR0aGlzLnJlbmRlciA9IHJlbmRlcjtcblx0dGhpcy5yZW5kZXJJbnN0YW5jZXMgPSByZW5kZXJJbnN0YW5jZXM7XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xJbmZvKCBnbCApIHtcblxuXHRjb25zdCBtZW1vcnkgPSB7XG5cdFx0Z2VvbWV0cmllczogMCxcblx0XHR0ZXh0dXJlczogMFxuXHR9O1xuXG5cdGNvbnN0IHJlbmRlciA9IHtcblx0XHRmcmFtZTogMCxcblx0XHRjYWxsczogMCxcblx0XHR0cmlhbmdsZXM6IDAsXG5cdFx0cG9pbnRzOiAwLFxuXHRcdGxpbmVzOiAwXG5cdH07XG5cblx0ZnVuY3Rpb24gdXBkYXRlKCBjb3VudCwgbW9kZSwgaW5zdGFuY2VDb3VudCApIHtcblxuXHRcdHJlbmRlci5jYWxscyArKztcblxuXHRcdHN3aXRjaCAoIG1vZGUgKSB7XG5cblx0XHRcdGNhc2UgNDpcblx0XHRcdFx0cmVuZGVyLnRyaWFuZ2xlcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAvIDMgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmVuZGVyLmxpbmVzICs9IGluc3RhbmNlQ291bnQgKiAoIGNvdW50IC8gMiApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRyZW5kZXIubGluZXMgKz0gaW5zdGFuY2VDb3VudCAqICggY291bnQgLSAxICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDA6XG5cdFx0XHRcdHJlbmRlci5wb2ludHMgKz0gaW5zdGFuY2VDb3VudCAqIGNvdW50O1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6JywgbW9kZSApO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXQoKSB7XG5cblx0XHRyZW5kZXIuZnJhbWUgKys7XG5cdFx0cmVuZGVyLmNhbGxzID0gMDtcblx0XHRyZW5kZXIudHJpYW5nbGVzID0gMDtcblx0XHRyZW5kZXIucG9pbnRzID0gMDtcblx0XHRyZW5kZXIubGluZXMgPSAwO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lbW9yeTogbWVtb3J5LFxuXHRcdHJlbmRlcjogcmVuZGVyLFxuXHRcdHByb2dyYW1zOiBudWxsLFxuXHRcdGF1dG9SZXNldDogdHJ1ZSxcblx0XHRyZXNldDogcmVzZXQsXG5cdFx0dXBkYXRlOiB1cGRhdGVcblx0fTtcblxufVxuXG5jbGFzcyBEYXRhVGV4dHVyZTJEQXJyYXkgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggZGF0YSA9IG51bGwsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgZGVwdGggPSAxICkge1xuXG5cdFx0c3VwZXIoIG51bGwgKTtcblxuXHRcdHRoaXMuaW1hZ2UgPSB7IGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoIH07XG5cblx0XHR0aGlzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXG5cdFx0dGhpcy53cmFwUiA9IENsYW1wVG9FZGdlV3JhcHBpbmc7XG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblx0XHR0aGlzLnVucGFja0FsaWdubWVudCA9IDE7XG5cblx0fVxuXG59XG5cbkRhdGFUZXh0dXJlMkRBcnJheS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXkgPSB0cnVlO1xuXG5mdW5jdGlvbiBudW1lcmljYWxTb3J0KCBhLCBiICkge1xuXG5cdHJldHVybiBhWyAwIF0gLSBiWyAwIF07XG5cbn1cblxuZnVuY3Rpb24gYWJzTnVtZXJpY2FsU29ydCggYSwgYiApIHtcblxuXHRyZXR1cm4gTWF0aC5hYnMoIGJbIDEgXSApIC0gTWF0aC5hYnMoIGFbIDEgXSApO1xuXG59XG5cbmZ1bmN0aW9uIGRlbm9ybWFsaXplKCBtb3JwaCwgYXR0cmlidXRlICkge1xuXG5cdGxldCBkZW5vbWluYXRvciA9IDE7XG5cdGNvbnN0IGFycmF5ID0gYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgPyBhdHRyaWJ1dGUuZGF0YS5hcnJheSA6IGF0dHJpYnV0ZS5hcnJheTtcblxuXHRpZiAoIGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5ICkgZGVub21pbmF0b3IgPSAxMjc7XG5cdGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkgKSBkZW5vbWluYXRvciA9IDMyNzY3O1xuXHRlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQzMkFycmF5ICkgZGVub21pbmF0b3IgPSAyMTQ3NDgzNjQ3O1xuXHRlbHNlIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogJywgYXJyYXkgKTtcblxuXHRtb3JwaC5kaXZpZGVTY2FsYXIoIGRlbm9taW5hdG9yICk7XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xNb3JwaHRhcmdldHMoIGdsLCBjYXBhYmlsaXRpZXMsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IGluZmx1ZW5jZXNMaXN0ID0ge307XG5cdGNvbnN0IG1vcnBoSW5mbHVlbmNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoIDggKTtcblx0Y29uc3QgbW9ycGhUZXh0dXJlcyA9IG5ldyBXZWFrTWFwKCk7XG5cdGNvbnN0IG1vcnBoID0gbmV3IFZlY3RvcjMoKTtcblxuXHRjb25zdCB3b3JrSW5mbHVlbmNlcyA9IFtdO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSA8IDg7IGkgKysgKSB7XG5cblx0XHR3b3JrSW5mbHVlbmNlc1sgaSBdID0gWyBpLCAwIF07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0gKSB7XG5cblx0XHRjb25zdCBvYmplY3RJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztcblxuXHRcdGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSB0cnVlICkge1xuXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHVzaW5nIGF0dHJpYnV0ZXMsIHRoZSBXZWJHTCAyIGNvZGUgcGF0aCBlbmNvZGVzIG1vcnBoIHRhcmdldHNcblx0XHRcdC8vIGludG8gYW4gYXJyYXkgb2YgZGF0YSB0ZXh0dXJlcy4gRWFjaCBsYXllciByZXByZXNlbnRzIGEgc2luZ2xlIG1vcnBoIHRhcmdldC5cblxuXHRcdFx0Y29uc3QgbnVtYmVyT2ZNb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoO1xuXG5cdFx0XHRsZXQgZW50cnkgPSBtb3JwaFRleHR1cmVzLmdldCggZ2VvbWV0cnkgKTtcblxuXHRcdFx0aWYgKCBlbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LmNvdW50ICE9PSBudW1iZXJPZk1vcnBoVGFyZ2V0cyApIHtcblxuXHRcdFx0XHRpZiAoIGVudHJ5ICE9PSB1bmRlZmluZWQgKSBlbnRyeS50ZXh0dXJlLmRpc3Bvc2UoKTtcblxuXHRcdFx0XHRjb25zdCBoYXNNb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsICE9PSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBtb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIHx8IFtdO1xuXG5cdFx0XHRcdGNvbnN0IG51bWJlck9mVmVydGljZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50O1xuXHRcdFx0XHRjb25zdCBudW1iZXJPZlZlcnRleERhdGEgPSAoIGhhc01vcnBoTm9ybWFscyA9PT0gdHJ1ZSApID8gMiA6IDE7IC8vICh2LG4pIHZzLiAodilcblxuXHRcdFx0XHRsZXQgd2lkdGggPSBudW1iZXJPZlZlcnRpY2VzICogbnVtYmVyT2ZWZXJ0ZXhEYXRhO1xuXHRcdFx0XHRsZXQgaGVpZ2h0ID0gMTtcblxuXHRcdFx0XHRpZiAoIHdpZHRoID4gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplICkge1xuXG5cdFx0XHRcdFx0aGVpZ2h0ID0gTWF0aC5jZWlsKCB3aWR0aCAvIGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSApO1xuXHRcdFx0XHRcdHdpZHRoID0gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBidWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KCB3aWR0aCAqIGhlaWdodCAqIDQgKiBudW1iZXJPZk1vcnBoVGFyZ2V0cyApO1xuXG5cdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUyREFycmF5KCBidWZmZXIsIHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTW9ycGhUYXJnZXRzICk7XG5cdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gUkdCQUZvcm1hdDsgLy8gdXNpbmcgUkdCQSBzaW5jZSBSR0IgbWlnaHQgYmUgZW11bGF0ZWQgKGFuZCBpcyB0aHVzIHNsb3dlcilcblx0XHRcdFx0dGV4dHVyZS50eXBlID0gRmxvYXRUeXBlO1xuXHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBmaWxsIGJ1ZmZlclxuXG5cdFx0XHRcdGNvbnN0IHZlcnRleERhdGFTdHJpZGUgPSBudW1iZXJPZlZlcnRleERhdGEgKiA0O1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG51bWJlck9mTW9ycGhUYXJnZXRzOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgbW9ycGhUYXJnZXQgPSBtb3JwaFRhcmdldHNbIGkgXTtcblx0XHRcdFx0XHRjb25zdCBtb3JwaE5vcm1hbCA9IG1vcnBoTm9ybWFsc1sgaSBdO1xuXG5cdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gd2lkdGggKiBoZWlnaHQgKiA0ICogaTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IG1vcnBoVGFyZ2V0LmNvdW50OyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRtb3JwaC5mcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaFRhcmdldCwgaiApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0Lm5vcm1hbGl6ZWQgPT09IHRydWUgKSBkZW5vcm1hbGl6ZSggbW9ycGgsIG1vcnBoVGFyZ2V0ICk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHN0cmlkZSA9IGogKiB2ZXJ0ZXhEYXRhU3RyaWRlO1xuXG5cdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDAgXSA9IG1vcnBoLng7XG5cdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDEgXSA9IG1vcnBoLnk7XG5cdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDIgXSA9IG1vcnBoLno7XG5cdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDMgXSA9IDA7XG5cblx0XHRcdFx0XHRcdGlmICggaGFzTW9ycGhOb3JtYWxzID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdG1vcnBoLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG1vcnBoTm9ybWFsLCBqICk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBtb3JwaE5vcm1hbC5ub3JtYWxpemVkID09PSB0cnVlICkgZGVub3JtYWxpemUoIG1vcnBoLCBtb3JwaE5vcm1hbCApO1xuXG5cdFx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgNCBdID0gbW9ycGgueDtcblx0XHRcdFx0XHRcdFx0YnVmZmVyWyBvZmZzZXQgKyBzdHJpZGUgKyA1IF0gPSBtb3JwaC55O1xuXHRcdFx0XHRcdFx0XHRidWZmZXJbIG9mZnNldCArIHN0cmlkZSArIDYgXSA9IG1vcnBoLno7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlclsgb2Zmc2V0ICsgc3RyaWRlICsgNyBdID0gMDtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbnRyeSA9IHtcblx0XHRcdFx0XHRjb3VudDogbnVtYmVyT2ZNb3JwaFRhcmdldHMsXG5cdFx0XHRcdFx0dGV4dHVyZTogdGV4dHVyZSxcblx0XHRcdFx0XHRzaXplOiBuZXcgVmVjdG9yMiggd2lkdGgsIGhlaWdodCApXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0bW9ycGhUZXh0dXJlcy5zZXQoIGdlb21ldHJ5LCBlbnRyeSApO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGRpc3Bvc2VUZXh0dXJlKCkge1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5kaXNwb3NlKCk7XG5cblx0XHRcdFx0XHRtb3JwaFRleHR1cmVzLmRlbGV0ZSggZ2VvbWV0cnkgKTtcblxuXHRcdFx0XHRcdGdlb21ldHJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgZGlzcG9zZVRleHR1cmUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBkaXNwb3NlVGV4dHVyZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGxldCBtb3JwaEluZmx1ZW5jZXNTdW0gPSAwO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBvYmplY3RJbmZsdWVuY2VzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRtb3JwaEluZmx1ZW5jZXNTdW0gKz0gb2JqZWN0SW5mbHVlbmNlc1sgaSBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1vcnBoQmFzZUluZmx1ZW5jZSA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlID8gMSA6IDEgLSBtb3JwaEluZmx1ZW5jZXNTdW07XG5cblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UnLCBtb3JwaEJhc2VJbmZsdWVuY2UgKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnLCBvYmplY3RJbmZsdWVuY2VzICk7XG5cblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldHNUZXh0dXJlJywgZW50cnkudGV4dHVyZSwgdGV4dHVyZXMgKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZScsIGVudHJ5LnNpemUgKTtcblxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gV2hlbiBvYmplY3QgZG9lc24ndCBoYXZlIG1vcnBoIHRhcmdldCBpbmZsdWVuY2VzIGRlZmluZWQsIHdlIHRyZWF0IGl0IGFzIGEgMC1sZW5ndGggYXJyYXlcblx0XHRcdC8vIFRoaXMgaXMgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBzZXQgdXAgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIC8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzXG5cblx0XHRcdGNvbnN0IGxlbmd0aCA9IG9iamVjdEluZmx1ZW5jZXMgPT09IHVuZGVmaW5lZCA/IDAgOiBvYmplY3RJbmZsdWVuY2VzLmxlbmd0aDtcblxuXHRcdFx0bGV0IGluZmx1ZW5jZXMgPSBpbmZsdWVuY2VzTGlzdFsgZ2VvbWV0cnkuaWQgXTtcblxuXHRcdFx0aWYgKCBpbmZsdWVuY2VzID09PSB1bmRlZmluZWQgfHwgaW5mbHVlbmNlcy5sZW5ndGggIT09IGxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyBpbml0aWFsaXNlIGxpc3RcblxuXHRcdFx0XHRpbmZsdWVuY2VzID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdFx0aW5mbHVlbmNlc1sgaSBdID0gWyBpLCAwIF07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZmx1ZW5jZXNMaXN0WyBnZW9tZXRyeS5pZCBdID0gaW5mbHVlbmNlcztcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb2xsZWN0IGluZmx1ZW5jZXNcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGluZmx1ZW5jZSA9IGluZmx1ZW5jZXNbIGkgXTtcblxuXHRcdFx0XHRpbmZsdWVuY2VbIDAgXSA9IGk7XG5cdFx0XHRcdGluZmx1ZW5jZVsgMSBdID0gb2JqZWN0SW5mbHVlbmNlc1sgaSBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGluZmx1ZW5jZXMuc29ydCggYWJzTnVtZXJpY2FsU29ydCApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA4OyBpICsrICkge1xuXG5cdFx0XHRcdGlmICggaSA8IGxlbmd0aCAmJiBpbmZsdWVuY2VzWyBpIF1bIDEgXSApIHtcblxuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzWyBpIF1bIDAgXSA9IGluZmx1ZW5jZXNbIGkgXVsgMCBdO1xuXHRcdFx0XHRcdHdvcmtJbmZsdWVuY2VzWyBpIF1bIDEgXSA9IGluZmx1ZW5jZXNbIGkgXVsgMSBdO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR3b3JrSW5mbHVlbmNlc1sgaSBdWyAwIF0gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblx0XHRcdFx0XHR3b3JrSW5mbHVlbmNlc1sgaSBdWyAxIF0gPSAwO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHR3b3JrSW5mbHVlbmNlcy5zb3J0KCBudW1lcmljYWxTb3J0ICk7XG5cblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdGNvbnN0IG1vcnBoTm9ybWFscyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWw7XG5cblx0XHRcdGxldCBtb3JwaEluZmx1ZW5jZXNTdW0gPSAwO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA4OyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGluZmx1ZW5jZSA9IHdvcmtJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gaW5mbHVlbmNlWyAwIF07XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaW5mbHVlbmNlWyAxIF07XG5cblx0XHRcdFx0aWYgKCBpbmRleCAhPT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgJiYgdmFsdWUgKSB7XG5cblx0XHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0cyAmJiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdtb3JwaFRhcmdldCcgKyBpICkgIT09IG1vcnBoVGFyZ2V0c1sgaW5kZXggXSApIHtcblxuXHRcdFx0XHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnbW9ycGhUYXJnZXQnICsgaSwgbW9ycGhUYXJnZXRzWyBpbmRleCBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIG1vcnBoTm9ybWFscyAmJiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdtb3JwaE5vcm1hbCcgKyBpICkgIT09IG1vcnBoTm9ybWFsc1sgaW5kZXggXSApIHtcblxuXHRcdFx0XHRcdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnbW9ycGhOb3JtYWwnICsgaSwgbW9ycGhOb3JtYWxzWyBpbmRleCBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtb3JwaEluZmx1ZW5jZXNbIGkgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1N1bSArPSB2YWx1ZTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCBtb3JwaFRhcmdldHMgJiYgZ2VvbWV0cnkuaGFzQXR0cmlidXRlKCAnbW9ycGhUYXJnZXQnICsgaSApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRnZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoICdtb3JwaFRhcmdldCcgKyBpICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIG1vcnBoTm9ybWFscyAmJiBnZW9tZXRyeS5oYXNBdHRyaWJ1dGUoICdtb3JwaE5vcm1hbCcgKyBpICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRcdGdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSggJ21vcnBoTm9ybWFsJyArIGkgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1vcnBoSW5mbHVlbmNlc1sgaSBdID0gMDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gR0xTTCBzaGFkZXIgdXNlcyBmb3JtdWxhIGJhc2VpbmZsdWVuY2UgKiBiYXNlICsgc3VtKHRhcmdldCAqIGluZmx1ZW5jZSlcblx0XHRcdC8vIFRoaXMgYWxsb3dzIHVzIHRvIHN3aXRjaCBiZXR3ZWVuIGFic29sdXRlIG1vcnBocyBhbmQgcmVsYXRpdmUgbW9ycGhzIHdpdGhvdXQgY2hhbmdpbmcgc2hhZGVyIGNvZGVcblx0XHRcdC8vIFdoZW4gYmFzZWluZmx1ZW5jZSA9IDEgLSBzdW0oaW5mbHVlbmNlKSwgdGhlIGFib3ZlIGlzIGVxdWl2YWxlbnQgdG8gc3VtKCh0YXJnZXQgLSBiYXNlKSAqIGluZmx1ZW5jZSlcblx0XHRcdGNvbnN0IG1vcnBoQmFzZUluZmx1ZW5jZSA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlID8gMSA6IDEgLSBtb3JwaEluZmx1ZW5jZXNTdW07XG5cblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UnLCBtb3JwaEJhc2VJbmZsdWVuY2UgKTtcblx0XHRcdHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnLCBtb3JwaEluZmx1ZW5jZXMgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdHVwZGF0ZTogdXBkYXRlXG5cblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTE9iamVjdHMoIGdsLCBnZW9tZXRyaWVzLCBhdHRyaWJ1dGVzLCBpbmZvICkge1xuXG5cdGxldCB1cGRhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG5cdGZ1bmN0aW9uIHVwZGF0ZSggb2JqZWN0ICkge1xuXG5cdFx0Y29uc3QgZnJhbWUgPSBpbmZvLnJlbmRlci5mcmFtZTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5O1xuXHRcdGNvbnN0IGJ1ZmZlcmdlb21ldHJ5ID0gZ2VvbWV0cmllcy5nZXQoIG9iamVjdCwgZ2VvbWV0cnkgKTtcblxuXHRcdC8vIFVwZGF0ZSBvbmNlIHBlciBmcmFtZVxuXG5cdFx0aWYgKCB1cGRhdGVNYXAuZ2V0KCBidWZmZXJnZW9tZXRyeSApICE9PSBmcmFtZSApIHtcblxuXHRcdFx0Z2VvbWV0cmllcy51cGRhdGUoIGJ1ZmZlcmdlb21ldHJ5ICk7XG5cblx0XHRcdHVwZGF0ZU1hcC5zZXQoIGJ1ZmZlcmdlb21ldHJ5LCBmcmFtZSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvYmplY3QuaXNJbnN0YW5jZWRNZXNoICkge1xuXG5cdFx0XHRpZiAoIG9iamVjdC5oYXNFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uSW5zdGFuY2VkTWVzaERpc3Bvc2UgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0b2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25JbnN0YW5jZWRNZXNoRGlzcG9zZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGF0dHJpYnV0ZXMudXBkYXRlKCBvYmplY3QuaW5zdGFuY2VNYXRyaXgsIDM0OTYyICk7XG5cblx0XHRcdGlmICggb2JqZWN0Lmluc3RhbmNlQ29sb3IgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0YXR0cmlidXRlcy51cGRhdGUoIG9iamVjdC5pbnN0YW5jZUNvbG9yLCAzNDk2MiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gYnVmZmVyZ2VvbWV0cnk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG5cblx0XHR1cGRhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvbkluc3RhbmNlZE1lc2hEaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IGluc3RhbmNlZE1lc2ggPSBldmVudC50YXJnZXQ7XG5cblx0XHRpbnN0YW5jZWRNZXNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25JbnN0YW5jZWRNZXNoRGlzcG9zZSApO1xuXG5cdFx0YXR0cmlidXRlcy5yZW1vdmUoIGluc3RhbmNlZE1lc2guaW5zdGFuY2VNYXRyaXggKTtcblxuXHRcdGlmICggaW5zdGFuY2VkTWVzaC5pbnN0YW5jZUNvbG9yICE9PSBudWxsICkgYXR0cmlidXRlcy5yZW1vdmUoIGluc3RhbmNlZE1lc2guaW5zdGFuY2VDb2xvciApO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0dXBkYXRlOiB1cGRhdGUsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXG5cdH07XG5cbn1cblxuY2xhc3MgRGF0YVRleHR1cmUzRCBleHRlbmRzIFRleHR1cmUge1xuXG5cdGNvbnN0cnVjdG9yKCBkYXRhID0gbnVsbCwgd2lkdGggPSAxLCBoZWlnaHQgPSAxLCBkZXB0aCA9IDEgKSB7XG5cblx0XHQvLyBXZSdyZSBnb2luZyB0byBhZGQgLnNldFhYWCgpIG1ldGhvZHMgZm9yIHNldHRpbmcgcHJvcGVydGllcyBsYXRlci5cblx0XHQvLyBVc2VycyBjYW4gc3RpbGwgc2V0IGluIERhdGFUZXh0dXJlM0QgZGlyZWN0bHkuXG5cdFx0Ly9cblx0XHQvL1x0Y29uc3QgdGV4dHVyZSA9IG5ldyBUSFJFRS5EYXRhVGV4dHVyZTNEKCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xuXHRcdC8vIFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gMTY7XG5cdFx0Ly9cblx0XHQvLyBTZWUgIzE0ODM5XG5cblx0XHRzdXBlciggbnVsbCApO1xuXG5cdFx0dGhpcy5pbWFnZSA9IHsgZGF0YSwgd2lkdGgsIGhlaWdodCwgZGVwdGggfTtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cblx0XHR0aGlzLndyYXBSID0gQ2xhbXBUb0VkZ2VXcmFwcGluZztcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblxuXHR9XG5cbn1cblxuRGF0YVRleHR1cmUzRC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEID0gdHJ1ZTtcblxuLyoqXG4gKiBVbmlmb3JtcyBvZiBhIHByb2dyYW0uXG4gKiBUaG9zZSBmb3JtIGEgdHJlZSBzdHJ1Y3R1cmUgd2l0aCBhIHNwZWNpYWwgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgdGhlIHJvb3QsXG4gKiB3aGljaCB5b3UgZ2V0IGJ5IGNhbGxpbmcgJ25ldyBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSApJy5cbiAqXG4gKlxuICogUHJvcGVydGllcyBvZiBpbm5lciBub2RlcyBpbmNsdWRpbmcgdGhlIHRvcC1sZXZlbCBjb250YWluZXI6XG4gKlxuICogLnNlcSAtIGFycmF5IG9mIG5lc3RlZCB1bmlmb3Jtc1xuICogLm1hcCAtIG5lc3RlZCB1bmlmb3JtcyBieSBuYW1lXG4gKlxuICpcbiAqIE1ldGhvZHMgb2YgYWxsIG5vZGVzIGV4Y2VwdCB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcjpcbiAqXG4gKiAuc2V0VmFsdWUoIGdsLCB2YWx1ZSwgW3RleHR1cmVzXSApXG4gKlxuICogXHRcdHVwbG9hZHMgYSB1bmlmb3JtIHZhbHVlKHMpXG4gKiAgXHR0aGUgJ3RleHR1cmVzJyBwYXJhbWV0ZXIgaXMgbmVlZGVkIGZvciBzYW1wbGVyIHVuaWZvcm1zXG4gKlxuICpcbiAqIFN0YXRpYyBtZXRob2RzIG9mIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyICh0ZXh0dXJlcyBmYWN0b3JpemF0aW9ucyk6XG4gKlxuICogLnVwbG9hZCggZ2wsIHNlcSwgdmFsdWVzLCB0ZXh0dXJlcyApXG4gKlxuICogXHRcdHNldHMgdW5pZm9ybXMgaW4gJ3NlcScgdG8gJ3ZhbHVlc1tpZF0udmFsdWUnXG4gKlxuICogLnNlcVdpdGhWYWx1ZSggc2VxLCB2YWx1ZXMgKSA6IGZpbHRlcmVkU2VxXG4gKlxuICogXHRcdGZpbHRlcnMgJ3NlcScgZW50cmllcyB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdmFsdWVzXG4gKlxuICpcbiAqIE1ldGhvZHMgb2YgdGhlIHRvcC1sZXZlbCBjb250YWluZXIgKHRleHR1cmVzIGZhY3Rvcml6YXRpb25zKTpcbiAqXG4gKiAuc2V0VmFsdWUoIGdsLCBuYW1lLCB2YWx1ZSwgdGV4dHVyZXMgKVxuICpcbiAqIFx0XHRzZXRzIHVuaWZvcm0gd2l0aCAgbmFtZSAnbmFtZScgdG8gJ3ZhbHVlJ1xuICpcbiAqIC5zZXRPcHRpb25hbCggZ2wsIG9iaiwgcHJvcCApXG4gKlxuICogXHRcdGxpa2UgLnNldCBmb3IgYW4gb3B0aW9uYWwgcHJvcGVydHkgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuXG5jb25zdCBlbXB0eVRleHR1cmUgPSBuZXcgVGV4dHVyZSgpO1xuY29uc3QgZW1wdHlUZXh0dXJlMmRBcnJheSA9IG5ldyBEYXRhVGV4dHVyZTJEQXJyYXkoKTtcbmNvbnN0IGVtcHR5VGV4dHVyZTNkID0gbmV3IERhdGFUZXh0dXJlM0QoKTtcbmNvbnN0IGVtcHR5Q3ViZVRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoKTtcblxuLy8gLS0tIFV0aWxpdGllcyAtLS1cblxuLy8gQXJyYXkgQ2FjaGVzIChwcm92aWRlIHR5cGVkIGFycmF5cyBmb3IgdGVtcG9yYXJ5IGJ5IHNpemUpXG5cbmNvbnN0IGFycmF5Q2FjaGVGMzIgPSBbXTtcbmNvbnN0IGFycmF5Q2FjaGVJMzIgPSBbXTtcblxuLy8gRmxvYXQzMkFycmF5IGNhY2hlcyB1c2VkIGZvciB1cGxvYWRpbmcgTWF0cml4IHVuaWZvcm1zXG5cbmNvbnN0IG1hdDRhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoIDE2ICk7XG5jb25zdCBtYXQzYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KCA5ICk7XG5jb25zdCBtYXQyYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KCA0ICk7XG5cbi8vIEZsYXR0ZW5pbmcgZm9yIGFycmF5cyBvZiB2ZWN0b3JzIGFuZCBtYXRyaWNlc1xuXG5mdW5jdGlvbiBmbGF0dGVuKCBhcnJheSwgbkJsb2NrcywgYmxvY2tTaXplICkge1xuXG5cdGNvbnN0IGZpcnN0RWxlbSA9IGFycmF5WyAwIF07XG5cblx0aWYgKCBmaXJzdEVsZW0gPD0gMCB8fCBmaXJzdEVsZW0gPiAwICkgcmV0dXJuIGFycmF5O1xuXHQvLyB1bm9wdGltaXplZDogISBpc05hTiggZmlyc3RFbGVtIClcblx0Ly8gc2VlIGh0dHA6Ly9qYWNrc29uZHVuc3Rhbi5jb20vYXJ0aWNsZXMvOTgzXG5cblx0Y29uc3QgbiA9IG5CbG9ja3MgKiBibG9ja1NpemU7XG5cdGxldCByID0gYXJyYXlDYWNoZUYzMlsgbiBdO1xuXG5cdGlmICggciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0ciA9IG5ldyBGbG9hdDMyQXJyYXkoIG4gKTtcblx0XHRhcnJheUNhY2hlRjMyWyBuIF0gPSByO1xuXG5cdH1cblxuXHRpZiAoIG5CbG9ja3MgIT09IDAgKSB7XG5cblx0XHRmaXJzdEVsZW0udG9BcnJheSggciwgMCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAxLCBvZmZzZXQgPSAwOyBpICE9PSBuQmxvY2tzOyArKyBpICkge1xuXG5cdFx0XHRvZmZzZXQgKz0gYmxvY2tTaXplO1xuXHRcdFx0YXJyYXlbIGkgXS50b0FycmF5KCByLCBvZmZzZXQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHI7XG5cbn1cblxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoIGEsIGIgKSB7XG5cblx0aWYgKCBhLmxlbmd0aCAhPT0gYi5sZW5ndGggKSByZXR1cm4gZmFsc2U7XG5cblx0Zm9yICggbGV0IGkgPSAwLCBsID0gYS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0aWYgKCBhWyBpIF0gIT09IGJbIGkgXSApIHJldHVybiBmYWxzZTtcblxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG5cbn1cblxuZnVuY3Rpb24gY29weUFycmF5KCBhLCBiICkge1xuXG5cdGZvciAoIGxldCBpID0gMCwgbCA9IGIubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdGFbIGkgXSA9IGJbIGkgXTtcblxuXHR9XG5cbn1cblxuLy8gVGV4dHVyZSB1bml0IGFsbG9jYXRpb25cblxuZnVuY3Rpb24gYWxsb2NUZXhVbml0cyggdGV4dHVyZXMsIG4gKSB7XG5cblx0bGV0IHIgPSBhcnJheUNhY2hlSTMyWyBuIF07XG5cblx0aWYgKCByID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRyID0gbmV3IEludDMyQXJyYXkoIG4gKTtcblx0XHRhcnJheUNhY2hlSTMyWyBuIF0gPSByO1xuXG5cdH1cblxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRyWyBpIF0gPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0fVxuXG5cdHJldHVybiByO1xuXG59XG5cbi8vIC0tLSBTZXR0ZXJzIC0tLVxuXG4vLyBOb3RlOiBEZWZpbmluZyB0aGVzZSBtZXRob2RzIGV4dGVybmFsbHksIGJlY2F1c2UgdGhleSBjb21lIGluIGEgYnVuY2hcbi8vIGFuZCB0aGlzIHdheSB0aGVpciBuYW1lcyBtaW5pZnkuXG5cbi8vIFNpbmdsZSBzY2FsYXJcblxuZnVuY3Rpb24gc2V0VmFsdWVWMWYoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGNhY2hlWyAwIF0gPT09IHYgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTFmKCB0aGlzLmFkZHIsIHYgKTtcblxuXHRjYWNoZVsgMCBdID0gdjtcblxufVxuXG4vLyBTaW5nbGUgZmxvYXQgdmVjdG9yIChmcm9tIGZsYXQgYXJyYXkgb3IgVEhSRUUuVmVjdG9yTilcblxuZnVuY3Rpb24gc2V0VmFsdWVWMmYoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIHYueCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBjYWNoZVsgMCBdICE9PSB2LnggfHwgY2FjaGVbIDEgXSAhPT0gdi55ICkge1xuXG5cdFx0XHRnbC51bmlmb3JtMmYoIHRoaXMuYWRkciwgdi54LCB2LnkgKTtcblxuXHRcdFx0Y2FjaGVbIDAgXSA9IHYueDtcblx0XHRcdGNhY2hlWyAxIF0gPSB2Lnk7XG5cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0XHRnbC51bmlmb3JtMmZ2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2YoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIHYueCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBjYWNoZVsgMCBdICE9PSB2LnggfHwgY2FjaGVbIDEgXSAhPT0gdi55IHx8IGNhY2hlWyAyIF0gIT09IHYueiApIHtcblxuXHRcdFx0Z2wudW5pZm9ybTNmKCB0aGlzLmFkZHIsIHYueCwgdi55LCB2LnogKTtcblxuXHRcdFx0Y2FjaGVbIDAgXSA9IHYueDtcblx0XHRcdGNhY2hlWyAxIF0gPSB2Lnk7XG5cdFx0XHRjYWNoZVsgMiBdID0gdi56O1xuXG5cdFx0fVxuXG5cdH0gZWxzZSBpZiAoIHYuciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBjYWNoZVsgMCBdICE9PSB2LnIgfHwgY2FjaGVbIDEgXSAhPT0gdi5nIHx8IGNhY2hlWyAyIF0gIT09IHYuYiApIHtcblxuXHRcdFx0Z2wudW5pZm9ybTNmKCB0aGlzLmFkZHIsIHYuciwgdi5nLCB2LmIgKTtcblxuXHRcdFx0Y2FjaGVbIDAgXSA9IHYucjtcblx0XHRcdGNhY2hlWyAxIF0gPSB2Lmc7XG5cdFx0XHRjYWNoZVsgMiBdID0gdi5iO1xuXG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdFx0Z2wudW5pZm9ybTNmdiggdGhpcy5hZGRyLCB2ICk7XG5cblx0XHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRmKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCB2LnggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGlmICggY2FjaGVbIDAgXSAhPT0gdi54IHx8IGNhY2hlWyAxIF0gIT09IHYueSB8fCBjYWNoZVsgMiBdICE9PSB2LnogfHwgY2FjaGVbIDMgXSAhPT0gdi53ICkge1xuXG5cdFx0XHRnbC51bmlmb3JtNGYoIHRoaXMuYWRkciwgdi54LCB2LnksIHYueiwgdi53ICk7XG5cblx0XHRcdGNhY2hlWyAwIF0gPSB2Lng7XG5cdFx0XHRjYWNoZVsgMSBdID0gdi55O1xuXHRcdFx0Y2FjaGVbIDIgXSA9IHYuejtcblx0XHRcdGNhY2hlWyAzIF0gPSB2Lnc7XG5cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0XHRnbC51bmlmb3JtNGZ2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxuXHR9XG5cbn1cblxuLy8gU2luZ2xlIG1hdHJpeCAoZnJvbSBmbGF0IGFycmF5IG9yIFRIUkVFLk1hdHJpeE4pXG5cbmZ1bmN0aW9uIHNldFZhbHVlTTIoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgZWxlbWVudHMgPSB2LmVsZW1lbnRzO1xuXG5cdGlmICggZWxlbWVudHMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0XHRnbC51bmlmb3JtTWF0cml4MmZ2KCB0aGlzLmFkZHIsIGZhbHNlLCB2ICk7XG5cblx0XHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCBlbGVtZW50cyApICkgcmV0dXJuO1xuXG5cdFx0bWF0MmFycmF5LnNldCggZWxlbWVudHMgKTtcblxuXHRcdGdsLnVuaWZvcm1NYXRyaXgyZnYoIHRoaXMuYWRkciwgZmFsc2UsIG1hdDJhcnJheSApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgZWxlbWVudHMgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVNMyggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRjb25zdCBlbGVtZW50cyA9IHYuZWxlbWVudHM7XG5cblx0aWYgKCBlbGVtZW50cyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRcdGdsLnVuaWZvcm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIHYgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIGVsZW1lbnRzICkgKSByZXR1cm47XG5cblx0XHRtYXQzYXJyYXkuc2V0KCBlbGVtZW50cyApO1xuXG5cdFx0Z2wudW5pZm9ybU1hdHJpeDNmdiggdGhpcy5hZGRyLCBmYWxzZSwgbWF0M2FycmF5ICk7XG5cblx0XHRjb3B5QXJyYXkoIGNhY2hlLCBlbGVtZW50cyApO1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU00KCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IGVsZW1lbnRzID0gdi5lbGVtZW50cztcblxuXHRpZiAoIGVsZW1lbnRzID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdFx0Z2wudW5pZm9ybU1hdHJpeDRmdiggdGhpcy5hZGRyLCBmYWxzZSwgdiApO1xuXG5cdFx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZWxlbWVudHMgKSApIHJldHVybjtcblxuXHRcdG1hdDRhcnJheS5zZXQoIGVsZW1lbnRzICk7XG5cblx0XHRnbC51bmlmb3JtTWF0cml4NGZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBtYXQ0YXJyYXkgKTtcblxuXHRcdGNvcHlBcnJheSggY2FjaGUsIGVsZW1lbnRzICk7XG5cblx0fVxuXG59XG5cbi8vIFNpbmdsZSBpbnRlZ2VyIC8gYm9vbGVhblxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxaSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggY2FjaGVbIDAgXSA9PT0gdiApIHJldHVybjtcblxuXHRnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNhY2hlWyAwIF0gPSB2O1xuXG59XG5cbi8vIFNpbmdsZSBpbnRlZ2VyIC8gYm9vbGVhbiB2ZWN0b3IgKGZyb20gZmxhdCBhcnJheSlcblxuZnVuY3Rpb24gc2V0VmFsdWVWMmkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm0yaXYoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzaSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTNpdiggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjRpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRnbC51bmlmb3JtNGl2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cbn1cblxuLy8gU2luZ2xlIHVuc2lnbmVkIGludGVnZXJcblxuZnVuY3Rpb24gc2V0VmFsdWVWMXVpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBjYWNoZVsgMCBdID09PSB2ICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm0xdWkoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNhY2hlWyAwIF0gPSB2O1xuXG59XG5cbi8vIFNpbmdsZSB1bnNpZ25lZCBpbnRlZ2VyIHZlY3RvciAoZnJvbSBmbGF0IGFycmF5KVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYydWkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuO1xuXG5cdGdsLnVuaWZvcm0ydWl2KCB0aGlzLmFkZHIsIHYgKTtcblxuXHRjb3B5QXJyYXkoIGNhY2hlLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM3VpKCBnbCwgdiApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0aWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjtcblxuXHRnbC51bmlmb3JtM3VpdiggdGhpcy5hZGRyLCB2ICk7XG5cblx0Y29weUFycmF5KCBjYWNoZSwgdiApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjR1aSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47XG5cblx0Z2wudW5pZm9ybTR1aXYoIHRoaXMuYWRkciwgdiApO1xuXG5cdGNvcHlBcnJheSggY2FjaGUsIHYgKTtcblxufVxuXG5cbi8vIFNpbmdsZSB0ZXh0dXJlICgyRCAvIEN1YmUpXG5cbmZ1bmN0aW9uIHNldFZhbHVlVDEoIGdsLCB2LCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKCBjYWNoZVsgMCBdICE9PSB1bml0ICkge1xuXG5cdFx0Z2wudW5pZm9ybTFpKCB0aGlzLmFkZHIsIHVuaXQgKTtcblx0XHRjYWNoZVsgMCBdID0gdW5pdDtcblxuXHR9XG5cblx0dGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRCggdiB8fCBlbXB0eVRleHR1cmUsIHVuaXQgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVQzRDEoIGdsLCB2LCB0ZXh0dXJlcyApIHtcblxuXHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdGNvbnN0IHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7XG5cblx0aWYgKCBjYWNoZVsgMCBdICE9PSB1bml0ICkge1xuXG5cdFx0Z2wudW5pZm9ybTFpKCB0aGlzLmFkZHIsIHVuaXQgKTtcblx0XHRjYWNoZVsgMCBdID0gdW5pdDtcblxuXHR9XG5cblx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKCB2IHx8IGVtcHR5VGV4dHVyZTNkLCB1bml0ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUNiggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0Y29uc3QgdW5pdCA9IHRleHR1cmVzLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtcblxuXHRpZiAoIGNhY2hlWyAwIF0gIT09IHVuaXQgKSB7XG5cblx0XHRnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdW5pdCApO1xuXHRcdGNhY2hlWyAwIF0gPSB1bml0O1xuXG5cdH1cblxuXHR0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmUoIHYgfHwgZW1wdHlDdWJlVGV4dHVyZSwgdW5pdCApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDJEQXJyYXkxKCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRjb25zdCB1bml0ID0gdGV4dHVyZXMuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO1xuXG5cdGlmICggY2FjaGVbIDAgXSAhPT0gdW5pdCApIHtcblxuXHRcdGdsLnVuaWZvcm0xaSggdGhpcy5hZGRyLCB1bml0ICk7XG5cdFx0Y2FjaGVbIDAgXSA9IHVuaXQ7XG5cblx0fVxuXG5cdHRleHR1cmVzLnNldFRleHR1cmUyREFycmF5KCB2IHx8IGVtcHR5VGV4dHVyZTJkQXJyYXksIHVuaXQgKTtcblxufVxuXG4vLyBIZWxwZXIgdG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciB0aGUgc2luZ3VsYXIgY2FzZVxuXG5mdW5jdGlvbiBnZXRTaW5ndWxhclNldHRlciggdHlwZSApIHtcblxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXG5cdFx0Y2FzZSAweDE0MDY6IHJldHVybiBzZXRWYWx1ZVYxZjsgLy8gRkxPQVRcblx0XHRjYXNlIDB4OGI1MDogcmV0dXJuIHNldFZhbHVlVjJmOyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4YjUxOiByZXR1cm4gc2V0VmFsdWVWM2Y7IC8vIF9WRUMzXG5cdFx0Y2FzZSAweDhiNTI6IHJldHVybiBzZXRWYWx1ZVY0ZjsgLy8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVhOiByZXR1cm4gc2V0VmFsdWVNMjsgLy8gX01BVDJcblx0XHRjYXNlIDB4OGI1YjogcmV0dXJuIHNldFZhbHVlTTM7IC8vIF9NQVQzXG5cdFx0Y2FzZSAweDhiNWM6IHJldHVybiBzZXRWYWx1ZU00OyAvLyBfTUFUNFxuXG5cdFx0Y2FzZSAweDE0MDQ6IGNhc2UgMHg4YjU2OiByZXR1cm4gc2V0VmFsdWVWMWk7IC8vIElOVCwgQk9PTFxuXHRcdGNhc2UgMHg4YjUzOiBjYXNlIDB4OGI1NzogcmV0dXJuIHNldFZhbHVlVjJpOyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4YjU0OiBjYXNlIDB4OGI1ODogcmV0dXJuIHNldFZhbHVlVjNpOyAvLyBfVkVDM1xuXHRcdGNhc2UgMHg4YjU1OiBjYXNlIDB4OGI1OTogcmV0dXJuIHNldFZhbHVlVjRpOyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDE0MDU6IHJldHVybiBzZXRWYWx1ZVYxdWk7IC8vIFVJTlRcblx0XHRjYXNlIDB4OGRjNjogcmV0dXJuIHNldFZhbHVlVjJ1aTsgLy8gX1ZFQzJcblx0XHRjYXNlIDB4OGRjNzogcmV0dXJuIHNldFZhbHVlVjN1aTsgLy8gX1ZFQzNcblx0XHRjYXNlIDB4OGRjODogcmV0dXJuIHNldFZhbHVlVjR1aTsgLy8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVlOiAvLyBTQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhkNjY6IC8vIFNBTVBMRVJfRVhURVJOQUxfT0VTXG5cdFx0Y2FzZSAweDhkY2E6IC8vIElOVF9TQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhkZDI6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhiNjI6IC8vIFNBTVBMRVJfMkRfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMTtcblxuXHRcdGNhc2UgMHg4YjVmOiAvLyBTQU1QTEVSXzNEXG5cdFx0Y2FzZSAweDhkY2I6IC8vIElOVF9TQU1QTEVSXzNEXG5cdFx0Y2FzZSAweDhkZDM6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUM0QxO1xuXG5cdFx0Y2FzZSAweDhiNjA6IC8vIFNBTVBMRVJfQ1VCRVxuXHRcdGNhc2UgMHg4ZGNjOiAvLyBJTlRfU0FNUExFUl9DVUJFXG5cdFx0Y2FzZSAweDhkZDQ6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVcblx0XHRjYXNlIDB4OGRjNTogLy8gU0FNUExFUl9DVUJFX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDY7XG5cblx0XHRjYXNlIDB4OGRjMTogLy8gU0FNUExFUl8yRF9BUlJBWVxuXHRcdGNhc2UgMHg4ZGNmOiAvLyBJTlRfU0FNUExFUl8yRF9BUlJBWVxuXHRcdGNhc2UgMHg4ZGQ3OiAvLyBVTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWVxuXHRcdGNhc2UgMHg4ZGM0OiAvLyBTQU1QTEVSXzJEX0FSUkFZX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDJEQXJyYXkxO1xuXG5cdH1cblxufVxuXG5cbi8vIEFycmF5IG9mIHNjYWxhcnNcblxuZnVuY3Rpb24gc2V0VmFsdWVWMWZBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTFmdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgdmVjdG9ycyAoZnJvbSBmbGF0IGFycmF5IG9yIGFycmF5IG9mIFRIUkVFLlZlY3Rvck4pXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjJmQXJyYXkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDIgKTtcblxuXHRnbC51bmlmb3JtMmZ2KCB0aGlzLmFkZHIsIGRhdGEgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYzZkFycmF5KCBnbCwgdiApIHtcblxuXHRjb25zdCBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCAzICk7XG5cblx0Z2wudW5pZm9ybTNmdiggdGhpcy5hZGRyLCBkYXRhICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGZBcnJheSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgNCApO1xuXG5cdGdsLnVuaWZvcm00ZnYoIHRoaXMuYWRkciwgZGF0YSApO1xuXG59XG5cbi8vIEFycmF5IG9mIG1hdHJpY2VzIChmcm9tIGZsYXQgYXJyYXkgb3IgYXJyYXkgb2YgVEhSRUUuTWF0cml4TilcblxuZnVuY3Rpb24gc2V0VmFsdWVNMkFycmF5KCBnbCwgdiApIHtcblxuXHRjb25zdCBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCA0ICk7XG5cblx0Z2wudW5pZm9ybU1hdHJpeDJmdiggdGhpcy5hZGRyLCBmYWxzZSwgZGF0YSApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlTTNBcnJheSggZ2wsIHYgKSB7XG5cblx0Y29uc3QgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgOSApO1xuXG5cdGdsLnVuaWZvcm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIGRhdGEgKTtcblxufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZU00QXJyYXkoIGdsLCB2ICkge1xuXG5cdGNvbnN0IGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDE2ICk7XG5cblx0Z2wudW5pZm9ybU1hdHJpeDRmdiggdGhpcy5hZGRyLCBmYWxzZSwgZGF0YSApO1xuXG59XG5cbi8vIEFycmF5IG9mIGludGVnZXIgLyBib29sZWFuXG5cbmZ1bmN0aW9uIHNldFZhbHVlVjFpQXJyYXkoIGdsLCB2ICkge1xuXG5cdGdsLnVuaWZvcm0xaXYoIHRoaXMuYWRkciwgdiApO1xuXG59XG5cbi8vIEFycmF5IG9mIGludGVnZXIgLyBib29sZWFuIHZlY3RvcnMgKGZyb20gZmxhdCBhcnJheSlcblxuZnVuY3Rpb24gc2V0VmFsdWVWMmlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTJpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWM2lBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTNpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNGlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTRpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuLy8gQXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlclxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYxdWlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTF1aXYoIHRoaXMuYWRkciwgdiApO1xuXG59XG5cbi8vIEFycmF5IG9mIHVuc2lnbmVkIGludGVnZXIgdmVjdG9ycyAoZnJvbSBmbGF0IGFycmF5KVxuXG5mdW5jdGlvbiBzZXRWYWx1ZVYydWlBcnJheSggZ2wsIHYgKSB7XG5cblx0Z2wudW5pZm9ybTJ1aXYoIHRoaXMuYWRkciwgdiApO1xuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVjN1aUFycmF5KCBnbCwgdiApIHtcblxuXHRnbC51bmlmb3JtM3VpdiggdGhpcy5hZGRyLCB2ICk7XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVWNHVpQXJyYXkoIGdsLCB2ICkge1xuXG5cdGdsLnVuaWZvcm00dWl2KCB0aGlzLmFkZHIsIHYgKTtcblxufVxuXG5cbi8vIEFycmF5IG9mIHRleHR1cmVzICgyRCAvIDNEIC8gQ3ViZSAvIDJEQXJyYXkpXG5cbmZ1bmN0aW9uIHNldFZhbHVlVDFBcnJheSggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblxuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHRleHR1cmVzLCBuICk7XG5cblx0Z2wudW5pZm9ybTFpdiggdGhpcy5hZGRyLCB1bml0cyApO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdHRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQoIHZbIGkgXSB8fCBlbXB0eVRleHR1cmUsIHVuaXRzWyBpIF0gKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUM0RBcnJheSggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblxuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHRleHR1cmVzLCBuICk7XG5cblx0Z2wudW5pZm9ybTFpdiggdGhpcy5hZGRyLCB1bml0cyApO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdHRleHR1cmVzLnNldFRleHR1cmUzRCggdlsgaSBdIHx8IGVtcHR5VGV4dHVyZTNkLCB1bml0c1sgaSBdICk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlVDZBcnJheSggZ2wsIHYsIHRleHR1cmVzICkge1xuXG5cdGNvbnN0IG4gPSB2Lmxlbmd0aDtcblxuXHRjb25zdCB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHRleHR1cmVzLCBuICk7XG5cblx0Z2wudW5pZm9ybTFpdiggdGhpcy5hZGRyLCB1bml0cyApO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdHRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZSggdlsgaSBdIHx8IGVtcHR5Q3ViZVRleHR1cmUsIHVuaXRzWyBpIF0gKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVUMkRBcnJheUFycmF5KCBnbCwgdiwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgbiA9IHYubGVuZ3RoO1xuXG5cdGNvbnN0IHVuaXRzID0gYWxsb2NUZXhVbml0cyggdGV4dHVyZXMsIG4gKTtcblxuXHRnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEQXJyYXkoIHZbIGkgXSB8fCBlbXB0eVRleHR1cmUyZEFycmF5LCB1bml0c1sgaSBdICk7XG5cblx0fVxuXG59XG5cblxuLy8gSGVscGVyIHRvIHBpY2sgdGhlIHJpZ2h0IHNldHRlciBmb3IgYSBwdXJlIChib3R0b20tbGV2ZWwpIGFycmF5XG5cbmZ1bmN0aW9uIGdldFB1cmVBcnJheVNldHRlciggdHlwZSApIHtcblxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXG5cdFx0Y2FzZSAweDE0MDY6IHJldHVybiBzZXRWYWx1ZVYxZkFycmF5OyAvLyBGTE9BVFxuXHRcdGNhc2UgMHg4YjUwOiByZXR1cm4gc2V0VmFsdWVWMmZBcnJheTsgLy8gX1ZFQzJcblx0XHRjYXNlIDB4OGI1MTogcmV0dXJuIHNldFZhbHVlVjNmQXJyYXk7IC8vIF9WRUMzXG5cdFx0Y2FzZSAweDhiNTI6IHJldHVybiBzZXRWYWx1ZVY0ZkFycmF5OyAvLyBfVkVDNFxuXG5cdFx0Y2FzZSAweDhiNWE6IHJldHVybiBzZXRWYWx1ZU0yQXJyYXk7IC8vIF9NQVQyXG5cdFx0Y2FzZSAweDhiNWI6IHJldHVybiBzZXRWYWx1ZU0zQXJyYXk7IC8vIF9NQVQzXG5cdFx0Y2FzZSAweDhiNWM6IHJldHVybiBzZXRWYWx1ZU00QXJyYXk7IC8vIF9NQVQ0XG5cblx0XHRjYXNlIDB4MTQwNDogY2FzZSAweDhiNTY6IHJldHVybiBzZXRWYWx1ZVYxaUFycmF5OyAvLyBJTlQsIEJPT0xcblx0XHRjYXNlIDB4OGI1MzogY2FzZSAweDhiNTc6IHJldHVybiBzZXRWYWx1ZVYyaUFycmF5OyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4YjU0OiBjYXNlIDB4OGI1ODogcmV0dXJuIHNldFZhbHVlVjNpQXJyYXk7IC8vIF9WRUMzXG5cdFx0Y2FzZSAweDhiNTU6IGNhc2UgMHg4YjU5OiByZXR1cm4gc2V0VmFsdWVWNGlBcnJheTsgLy8gX1ZFQzRcblxuXHRcdGNhc2UgMHgxNDA1OiByZXR1cm4gc2V0VmFsdWVWMXVpQXJyYXk7IC8vIFVJTlRcblx0XHRjYXNlIDB4OGRjNjogcmV0dXJuIHNldFZhbHVlVjJ1aUFycmF5OyAvLyBfVkVDMlxuXHRcdGNhc2UgMHg4ZGM3OiByZXR1cm4gc2V0VmFsdWVWM3VpQXJyYXk7IC8vIF9WRUMzXG5cdFx0Y2FzZSAweDhkYzg6IHJldHVybiBzZXRWYWx1ZVY0dWlBcnJheTsgLy8gX1ZFQzRcblxuXHRcdGNhc2UgMHg4YjVlOiAvLyBTQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhkNjY6IC8vIFNBTVBMRVJfRVhURVJOQUxfT0VTXG5cdFx0Y2FzZSAweDhkY2E6IC8vIElOVF9TQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhkZDI6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEXG5cdFx0Y2FzZSAweDhiNjI6IC8vIFNBTVBMRVJfMkRfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMUFycmF5O1xuXG5cdFx0Y2FzZSAweDhiNWY6IC8vIFNBTVBMRVJfM0Rcblx0XHRjYXNlIDB4OGRjYjogLy8gSU5UX1NBTVBMRVJfM0Rcblx0XHRjYXNlIDB4OGRkMzogLy8gVU5TSUdORURfSU5UX1NBTVBMRVJfM0Rcblx0XHRcdHJldHVybiBzZXRWYWx1ZVQzREFycmF5O1xuXG5cdFx0Y2FzZSAweDhiNjA6IC8vIFNBTVBMRVJfQ1VCRVxuXHRcdGNhc2UgMHg4ZGNjOiAvLyBJTlRfU0FNUExFUl9DVUJFXG5cdFx0Y2FzZSAweDhkZDQ6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVcblx0XHRjYXNlIDB4OGRjNTogLy8gU0FNUExFUl9DVUJFX1NIQURPV1xuXHRcdFx0cmV0dXJuIHNldFZhbHVlVDZBcnJheTtcblxuXHRcdGNhc2UgMHg4ZGMxOiAvLyBTQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkY2Y6IC8vIElOVF9TQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkZDc6IC8vIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZXG5cdFx0Y2FzZSAweDhkYzQ6IC8vIFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XXG5cdFx0XHRyZXR1cm4gc2V0VmFsdWVUMkRBcnJheUFycmF5O1xuXG5cdH1cblxufVxuXG4vLyAtLS0gVW5pZm9ybSBDbGFzc2VzIC0tLVxuXG5mdW5jdGlvbiBTaW5nbGVVbmlmb3JtKCBpZCwgYWN0aXZlSW5mbywgYWRkciApIHtcblxuXHR0aGlzLmlkID0gaWQ7XG5cdHRoaXMuYWRkciA9IGFkZHI7XG5cdHRoaXMuY2FjaGUgPSBbXTtcblx0dGhpcy5zZXRWYWx1ZSA9IGdldFNpbmd1bGFyU2V0dGVyKCBhY3RpdmVJbmZvLnR5cGUgKTtcblxuXHQvLyB0aGlzLnBhdGggPSBhY3RpdmVJbmZvLm5hbWU7IC8vIERFQlVHXG5cbn1cblxuZnVuY3Rpb24gUHVyZUFycmF5VW5pZm9ybSggaWQsIGFjdGl2ZUluZm8sIGFkZHIgKSB7XG5cblx0dGhpcy5pZCA9IGlkO1xuXHR0aGlzLmFkZHIgPSBhZGRyO1xuXHR0aGlzLmNhY2hlID0gW107XG5cdHRoaXMuc2l6ZSA9IGFjdGl2ZUluZm8uc2l6ZTtcblx0dGhpcy5zZXRWYWx1ZSA9IGdldFB1cmVBcnJheVNldHRlciggYWN0aXZlSW5mby50eXBlICk7XG5cblx0Ly8gdGhpcy5wYXRoID0gYWN0aXZlSW5mby5uYW1lOyAvLyBERUJVR1xuXG59XG5cblB1cmVBcnJheVVuaWZvcm0ucHJvdG90eXBlLnVwZGF0ZUNhY2hlID0gZnVuY3Rpb24gKCBkYXRhICkge1xuXG5cdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRpZiAoIGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgJiYgY2FjaGUubGVuZ3RoICE9PSBkYXRhLmxlbmd0aCApIHtcblxuXHRcdHRoaXMuY2FjaGUgPSBuZXcgRmxvYXQzMkFycmF5KCBkYXRhLmxlbmd0aCApO1xuXG5cdH1cblxuXHRjb3B5QXJyYXkoIGNhY2hlLCBkYXRhICk7XG5cbn07XG5cbmZ1bmN0aW9uIFN0cnVjdHVyZWRVbmlmb3JtKCBpZCApIHtcblxuXHR0aGlzLmlkID0gaWQ7XG5cblx0dGhpcy5zZXEgPSBbXTtcblx0dGhpcy5tYXAgPSB7fTtcblxufVxuXG5TdHJ1Y3R1cmVkVW5pZm9ybS5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAoIGdsLCB2YWx1ZSwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3Qgc2VxID0gdGhpcy5zZXE7XG5cblx0Zm9yICggbGV0IGkgPSAwLCBuID0gc2VxLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdGNvbnN0IHUgPSBzZXFbIGkgXTtcblx0XHR1LnNldFZhbHVlKCBnbCwgdmFsdWVbIHUuaWQgXSwgdGV4dHVyZXMgKTtcblxuXHR9XG5cbn07XG5cbi8vIC0tLSBUb3AtbGV2ZWwgLS0tXG5cbi8vIFBhcnNlciAtIGJ1aWxkcyB1cCB0aGUgcHJvcGVydHkgdHJlZSBmcm9tIHRoZSBwYXRoIHN0cmluZ3NcblxuY29uc3QgUmVQYXRoUGFydCA9IC8oXFx3KykoXFxdKT8oXFxbfFxcLik/L2c7XG5cbi8vIGV4dHJhY3RzXG4vLyBcdC0gdGhlIGlkZW50aWZpZXIgKG1lbWJlciBuYW1lIG9yIGFycmF5IGluZGV4KVxuLy8gIC0gZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgcmlnaHQgYnJhY2tldCAoZm91bmQgd2hlbiBhcnJheSBpbmRleClcbi8vICAtIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGxlZnQgYnJhY2tldCBvciBkb3QgKHR5cGUgb2Ygc3Vic2NyaXB0KVxuLy9cbi8vIE5vdGU6IFRoZXNlIHBvcnRpb25zIGNhbiBiZSByZWFkIGluIGEgbm9uLW92ZXJsYXBwaW5nIGZhc2hpb24gYW5kXG4vLyBhbGxvdyBzdHJhaWdodGZvcndhcmQgcGFyc2luZyBvZiB0aGUgaGllcmFyY2h5IHRoYXQgV2ViR0wgZW5jb2Rlc1xuLy8gaW4gdGhlIHVuaWZvcm0gbmFtZXMuXG5cbmZ1bmN0aW9uIGFkZFVuaWZvcm0oIGNvbnRhaW5lciwgdW5pZm9ybU9iamVjdCApIHtcblxuXHRjb250YWluZXIuc2VxLnB1c2goIHVuaWZvcm1PYmplY3QgKTtcblx0Y29udGFpbmVyLm1hcFsgdW5pZm9ybU9iamVjdC5pZCBdID0gdW5pZm9ybU9iamVjdDtcblxufVxuXG5mdW5jdGlvbiBwYXJzZVVuaWZvcm0oIGFjdGl2ZUluZm8sIGFkZHIsIGNvbnRhaW5lciApIHtcblxuXHRjb25zdCBwYXRoID0gYWN0aXZlSW5mby5uYW1lLFxuXHRcdHBhdGhMZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuXHQvLyByZXNldCBSZWdFeHAgb2JqZWN0LCBiZWNhdXNlIG9mIHRoZSBlYXJseSBleGl0IG9mIGEgcHJldmlvdXMgcnVuXG5cdFJlUGF0aFBhcnQubGFzdEluZGV4ID0gMDtcblxuXHR3aGlsZSAoIHRydWUgKSB7XG5cblx0XHRjb25zdCBtYXRjaCA9IFJlUGF0aFBhcnQuZXhlYyggcGF0aCApLFxuXHRcdFx0bWF0Y2hFbmQgPSBSZVBhdGhQYXJ0Lmxhc3RJbmRleDtcblxuXHRcdGxldCBpZCA9IG1hdGNoWyAxIF07XG5cdFx0Y29uc3QgaWRJc0luZGV4ID0gbWF0Y2hbIDIgXSA9PT0gJ10nLFxuXHRcdFx0c3Vic2NyaXB0ID0gbWF0Y2hbIDMgXTtcblxuXHRcdGlmICggaWRJc0luZGV4ICkgaWQgPSBpZCB8IDA7IC8vIGNvbnZlcnQgdG8gaW50ZWdlclxuXG5cdFx0aWYgKCBzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCB8fCBzdWJzY3JpcHQgPT09ICdbJyAmJiBtYXRjaEVuZCArIDIgPT09IHBhdGhMZW5ndGggKSB7XG5cblx0XHRcdC8vIGJhcmUgbmFtZSBvciBcInB1cmVcIiBib3R0b20tbGV2ZWwgYXJyYXkgXCJbMF1cIiBzdWZmaXhcblxuXHRcdFx0YWRkVW5pZm9ybSggY29udGFpbmVyLCBzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdG5ldyBTaW5nbGVVbmlmb3JtKCBpZCwgYWN0aXZlSW5mbywgYWRkciApIDpcblx0XHRcdFx0bmV3IFB1cmVBcnJheVVuaWZvcm0oIGlkLCBhY3RpdmVJbmZvLCBhZGRyICkgKTtcblxuXHRcdFx0YnJlYWs7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBzdGVwIGludG8gaW5uZXIgbm9kZSAvIGNyZWF0ZSBpdCBpbiBjYXNlIGl0IGRvZXNuJ3QgZXhpc3RcblxuXHRcdFx0Y29uc3QgbWFwID0gY29udGFpbmVyLm1hcDtcblx0XHRcdGxldCBuZXh0ID0gbWFwWyBpZCBdO1xuXG5cdFx0XHRpZiAoIG5leHQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRuZXh0ID0gbmV3IFN0cnVjdHVyZWRVbmlmb3JtKCBpZCApO1xuXHRcdFx0XHRhZGRVbmlmb3JtKCBjb250YWluZXIsIG5leHQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb250YWluZXIgPSBuZXh0O1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG4vLyBSb290IENvbnRhaW5lclxuXG5mdW5jdGlvbiBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSApIHtcblxuXHR0aGlzLnNlcSA9IFtdO1xuXHR0aGlzLm1hcCA9IHt9O1xuXG5cdGNvbnN0IG4gPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKCBwcm9ncmFtLCAzNTcxOCApO1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSA8IG47ICsrIGkgKSB7XG5cblx0XHRjb25zdCBpbmZvID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybSggcHJvZ3JhbSwgaSApLFxuXHRcdFx0YWRkciA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgaW5mby5uYW1lICk7XG5cblx0XHRwYXJzZVVuaWZvcm0oIGluZm8sIGFkZHIsIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuV2ViR0xVbmlmb3Jtcy5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAoIGdsLCBuYW1lLCB2YWx1ZSwgdGV4dHVyZXMgKSB7XG5cblx0Y29uc3QgdSA9IHRoaXMubWFwWyBuYW1lIF07XG5cblx0aWYgKCB1ICE9PSB1bmRlZmluZWQgKSB1LnNldFZhbHVlKCBnbCwgdmFsdWUsIHRleHR1cmVzICk7XG5cbn07XG5cbldlYkdMVW5pZm9ybXMucHJvdG90eXBlLnNldE9wdGlvbmFsID0gZnVuY3Rpb24gKCBnbCwgb2JqZWN0LCBuYW1lICkge1xuXG5cdGNvbnN0IHYgPSBvYmplY3RbIG5hbWUgXTtcblxuXHRpZiAoIHYgIT09IHVuZGVmaW5lZCApIHRoaXMuc2V0VmFsdWUoIGdsLCBuYW1lLCB2ICk7XG5cbn07XG5cblxuLy8gU3RhdGljIGludGVyZmFjZVxuXG5XZWJHTFVuaWZvcm1zLnVwbG9hZCA9IGZ1bmN0aW9uICggZ2wsIHNlcSwgdmFsdWVzLCB0ZXh0dXJlcyApIHtcblxuXHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBzZXEubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0Y29uc3QgdSA9IHNlcVsgaSBdLFxuXHRcdFx0diA9IHZhbHVlc1sgdS5pZCBdO1xuXG5cdFx0aWYgKCB2Lm5lZWRzVXBkYXRlICE9PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gbm90ZTogYWx3YXlzIHVwZGF0aW5nIHdoZW4gLm5lZWRzVXBkYXRlIGlzIHVuZGVmaW5lZFxuXHRcdFx0dS5zZXRWYWx1ZSggZ2wsIHYudmFsdWUsIHRleHR1cmVzICk7XG5cblx0XHR9XG5cblx0fVxuXG59O1xuXG5XZWJHTFVuaWZvcm1zLnNlcVdpdGhWYWx1ZSA9IGZ1bmN0aW9uICggc2VxLCB2YWx1ZXMgKSB7XG5cblx0Y29uc3QgciA9IFtdO1xuXG5cdGZvciAoIGxldCBpID0gMCwgbiA9IHNlcS5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRjb25zdCB1ID0gc2VxWyBpIF07XG5cdFx0aWYgKCB1LmlkIGluIHZhbHVlcyApIHIucHVzaCggdSApO1xuXG5cdH1cblxuXHRyZXR1cm4gcjtcblxufTtcblxuZnVuY3Rpb24gV2ViR0xTaGFkZXIoIGdsLCB0eXBlLCBzdHJpbmcgKSB7XG5cblx0Y29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKCB0eXBlICk7XG5cblx0Z2wuc2hhZGVyU291cmNlKCBzaGFkZXIsIHN0cmluZyApO1xuXHRnbC5jb21waWxlU2hhZGVyKCBzaGFkZXIgKTtcblxuXHRyZXR1cm4gc2hhZGVyO1xuXG59XG5cbmxldCBwcm9ncmFtSWRDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGFkZExpbmVOdW1iZXJzKCBzdHJpbmcgKSB7XG5cblx0Y29uc3QgbGluZXMgPSBzdHJpbmcuc3BsaXQoICdcXG4nICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0bGluZXNbIGkgXSA9ICggaSArIDEgKSArICc6ICcgKyBsaW5lc1sgaSBdO1xuXG5cdH1cblxuXHRyZXR1cm4gbGluZXMuam9pbiggJ1xcbicgKTtcblxufVxuXG5mdW5jdGlvbiBnZXRFbmNvZGluZ0NvbXBvbmVudHMoIGVuY29kaW5nICkge1xuXG5cdHN3aXRjaCAoIGVuY29kaW5nICkge1xuXG5cdFx0Y2FzZSBMaW5lYXJFbmNvZGluZzpcblx0XHRcdHJldHVybiBbICdMaW5lYXInLCAnKCB2YWx1ZSApJyBdO1xuXHRcdGNhc2Ugc1JHQkVuY29kaW5nOlxuXHRcdFx0cmV0dXJuIFsgJ3NSR0InLCAnKCB2YWx1ZSApJyBdO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOicsIGVuY29kaW5nICk7XG5cdFx0XHRyZXR1cm4gWyAnTGluZWFyJywgJyggdmFsdWUgKScgXTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gZ2V0U2hhZGVyRXJyb3JzKCBnbCwgc2hhZGVyLCB0eXBlICkge1xuXG5cdGNvbnN0IHN0YXR1cyA9IGdsLmdldFNoYWRlclBhcmFtZXRlciggc2hhZGVyLCAzNTcxMyApO1xuXHRjb25zdCBlcnJvcnMgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKCBzaGFkZXIgKS50cmltKCk7XG5cblx0aWYgKCBzdGF0dXMgJiYgZXJyb3JzID09PSAnJyApIHJldHVybiAnJztcblxuXHQvLyAtLWVuYWJsZS1wcml2aWxlZ2VkLXdlYmdsLWV4dGVuc2lvblxuXHQvLyBjb25zb2xlLmxvZyggJyoqJyArIHR5cGUgKyAnKionLCBnbC5nZXRFeHRlbnNpb24oICdXRUJHTF9kZWJ1Z19zaGFkZXJzJyApLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UoIHNoYWRlciApICk7XG5cblx0cmV0dXJuIHR5cGUudG9VcHBlckNhc2UoKSArICdcXG5cXG4nICsgZXJyb3JzICsgJ1xcblxcbicgKyBhZGRMaW5lTnVtYmVycyggZ2wuZ2V0U2hhZGVyU291cmNlKCBzaGFkZXIgKSApO1xuXG59XG5cbmZ1bmN0aW9uIGdldFRleGVsRW5jb2RpbmdGdW5jdGlvbiggZnVuY3Rpb25OYW1lLCBlbmNvZGluZyApIHtcblxuXHRjb25zdCBjb21wb25lbnRzID0gZ2V0RW5jb2RpbmdDb21wb25lbnRzKCBlbmNvZGluZyApO1xuXHRyZXR1cm4gJ3ZlYzQgJyArIGZ1bmN0aW9uTmFtZSArICcoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbycgKyBjb21wb25lbnRzWyAwIF0gKyBjb21wb25lbnRzWyAxIF0gKyAnOyB9JztcblxufVxuXG5mdW5jdGlvbiBnZXRUb25lTWFwcGluZ0Z1bmN0aW9uKCBmdW5jdGlvbk5hbWUsIHRvbmVNYXBwaW5nICkge1xuXG5cdGxldCB0b25lTWFwcGluZ05hbWU7XG5cblx0c3dpdGNoICggdG9uZU1hcHBpbmcgKSB7XG5cblx0XHRjYXNlIExpbmVhclRvbmVNYXBwaW5nOlxuXHRcdFx0dG9uZU1hcHBpbmdOYW1lID0gJ0xpbmVhcic7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgUmVpbmhhcmRUb25lTWFwcGluZzpcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdSZWluaGFyZCc7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgQ2luZW9uVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnT3B0aW1pemVkQ2luZW9uJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBBQ0VTRmlsbWljVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnQUNFU0ZpbG1pYyc7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgQ3VzdG9tVG9uZU1hcHBpbmc6XG5cdFx0XHR0b25lTWFwcGluZ05hbWUgPSAnQ3VzdG9tJztcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6JywgdG9uZU1hcHBpbmcgKTtcblx0XHRcdHRvbmVNYXBwaW5nTmFtZSA9ICdMaW5lYXInO1xuXG5cdH1cblxuXHRyZXR1cm4gJ3ZlYzMgJyArIGZ1bmN0aW9uTmFtZSArICcoIHZlYzMgY29sb3IgKSB7IHJldHVybiAnICsgdG9uZU1hcHBpbmdOYW1lICsgJ1RvbmVNYXBwaW5nKCBjb2xvciApOyB9JztcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUV4dGVuc2lvbnMoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc3QgY2h1bmtzID0gW1xuXHRcdCggcGFyYW1ldGVycy5leHRlbnNpb25EZXJpdmF0aXZlcyB8fCBwYXJhbWV0ZXJzLmVudk1hcEN1YmVVViB8fCBwYXJhbWV0ZXJzLmJ1bXBNYXAgfHwgcGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXAgfHwgcGFyYW1ldGVycy5jbGVhcmNvYXROb3JtYWxNYXAgfHwgcGFyYW1ldGVycy5mbGF0U2hhZGluZyB8fCBwYXJhbWV0ZXJzLnNoYWRlcklEID09PSAncGh5c2ljYWwnICkgPyAnI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUnIDogJycsXG5cdFx0KCBwYXJhbWV0ZXJzLmV4dGVuc2lvbkZyYWdEZXB0aCB8fCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgKSAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoID8gJyNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUnIDogJycsXG5cdFx0KCBwYXJhbWV0ZXJzLmV4dGVuc2lvbkRyYXdCdWZmZXJzICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycyApID8gJyNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUnIDogJycsXG5cdFx0KCBwYXJhbWV0ZXJzLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0QgfHwgcGFyYW1ldGVycy5lbnZNYXAgfHwgcGFyYW1ldGVycy50cmFuc21pc3Npb24gKSAmJiBwYXJhbWV0ZXJzLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZCA/ICcjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUnIDogJydcblx0XTtcblxuXHRyZXR1cm4gY2h1bmtzLmZpbHRlciggZmlsdGVyRW1wdHlMaW5lICkuam9pbiggJ1xcbicgKTtcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURlZmluZXMoIGRlZmluZXMgKSB7XG5cblx0Y29uc3QgY2h1bmtzID0gW107XG5cblx0Zm9yICggY29uc3QgbmFtZSBpbiBkZWZpbmVzICkge1xuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZWZpbmVzWyBuYW1lIF07XG5cblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIGNvbnRpbnVlO1xuXG5cdFx0Y2h1bmtzLnB1c2goICcjZGVmaW5lICcgKyBuYW1lICsgJyAnICsgdmFsdWUgKTtcblxuXHR9XG5cblx0cmV0dXJuIGNodW5rcy5qb2luKCAnXFxuJyApO1xuXG59XG5cbmZ1bmN0aW9uIGZldGNoQXR0cmlidXRlTG9jYXRpb25zKCBnbCwgcHJvZ3JhbSApIHtcblxuXHRjb25zdCBhdHRyaWJ1dGVzID0ge307XG5cblx0Y29uc3QgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzIxICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbjsgaSArKyApIHtcblxuXHRcdGNvbnN0IGluZm8gPSBnbC5nZXRBY3RpdmVBdHRyaWIoIHByb2dyYW0sIGkgKTtcblx0XHRjb25zdCBuYW1lID0gaW5mby5uYW1lO1xuXG5cdFx0bGV0IGxvY2F0aW9uU2l6ZSA9IDE7XG5cdFx0aWYgKCBpbmZvLnR5cGUgPT09IDM1Njc0ICkgbG9jYXRpb25TaXplID0gMjtcblx0XHRpZiAoIGluZm8udHlwZSA9PT0gMzU2NzUgKSBsb2NhdGlvblNpemUgPSAzO1xuXHRcdGlmICggaW5mby50eXBlID09PSAzNTY3NiApIGxvY2F0aW9uU2l6ZSA9IDQ7XG5cblx0XHQvLyBjb25zb2xlLmxvZyggJ1RIUkVFLldlYkdMUHJvZ3JhbTogQUNUSVZFIFZFUlRFWCBBVFRSSUJVVEU6JywgbmFtZSwgaSApO1xuXG5cdFx0YXR0cmlidXRlc1sgbmFtZSBdID0ge1xuXHRcdFx0dHlwZTogaW5mby50eXBlLFxuXHRcdFx0bG9jYXRpb246IGdsLmdldEF0dHJpYkxvY2F0aW9uKCBwcm9ncmFtLCBuYW1lICksXG5cdFx0XHRsb2NhdGlvblNpemU6IGxvY2F0aW9uU2l6ZVxuXHRcdH07XG5cblx0fVxuXG5cdHJldHVybiBhdHRyaWJ1dGVzO1xuXG59XG5cbmZ1bmN0aW9uIGZpbHRlckVtcHR5TGluZSggc3RyaW5nICkge1xuXG5cdHJldHVybiBzdHJpbmcgIT09ICcnO1xuXG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VMaWdodE51bXMoIHN0cmluZywgcGFyYW1ldGVycyApIHtcblxuXHRyZXR1cm4gc3RyaW5nXG5cdFx0LnJlcGxhY2UoIC9OVU1fRElSX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bURpckxpZ2h0cyApXG5cdFx0LnJlcGxhY2UoIC9OVU1fU1BPVF9MSUdIVFMvZywgcGFyYW1ldGVycy5udW1TcG90TGlnaHRzIClcblx0XHQucmVwbGFjZSggL05VTV9SRUNUX0FSRUFfTElHSFRTL2csIHBhcmFtZXRlcnMubnVtUmVjdEFyZWFMaWdodHMgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX1BPSU5UX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRzIClcblx0XHQucmVwbGFjZSggL05VTV9IRU1JX0xJR0hUUy9nLCBwYXJhbWV0ZXJzLm51bUhlbWlMaWdodHMgKVxuXHRcdC5yZXBsYWNlKCAvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csIHBhcmFtZXRlcnMubnVtRGlyTGlnaHRTaGFkb3dzIClcblx0XHQucmVwbGFjZSggL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZywgcGFyYW1ldGVycy5udW1TcG90TGlnaHRTaGFkb3dzIClcblx0XHQucmVwbGFjZSggL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csIHBhcmFtZXRlcnMubnVtUG9pbnRMaWdodFNoYWRvd3MgKTtcblxufVxuXG5mdW5jdGlvbiByZXBsYWNlQ2xpcHBpbmdQbGFuZU51bXMoIHN0cmluZywgcGFyYW1ldGVycyApIHtcblxuXHRyZXR1cm4gc3RyaW5nXG5cdFx0LnJlcGxhY2UoIC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMgKVxuXHRcdC5yZXBsYWNlKCAvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csICggcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcyAtIHBhcmFtZXRlcnMubnVtQ2xpcEludGVyc2VjdGlvbiApICk7XG5cbn1cblxuLy8gUmVzb2x2ZSBJbmNsdWRlc1xuXG5jb25zdCBpbmNsdWRlUGF0dGVybiA9IC9eWyBcXHRdKiNpbmNsdWRlICs8KFtcXHdcXGQuL10rKT4vZ207XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmNsdWRlcyggc3RyaW5nICkge1xuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggaW5jbHVkZVBhdHRlcm4sIGluY2x1ZGVSZXBsYWNlciApO1xuXG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVSZXBsYWNlciggbWF0Y2gsIGluY2x1ZGUgKSB7XG5cblx0Y29uc3Qgc3RyaW5nID0gU2hhZGVyQ2h1bmtbIGluY2x1ZGUgXTtcblxuXHRpZiAoIHN0cmluZyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCAnQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwnICsgaW5jbHVkZSArICc+JyApO1xuXG5cdH1cblxuXHRyZXR1cm4gcmVzb2x2ZUluY2x1ZGVzKCBzdHJpbmcgKTtcblxufVxuXG4vLyBVbnJvbGwgTG9vcHNcblxuY29uc3QgZGVwcmVjYXRlZFVucm9sbExvb3BQYXR0ZXJuID0gLyNwcmFnbWEgdW5yb2xsX2xvb3BbXFxzXSs/Zm9yIFxcKCBpbnQgaSBcXD0gKFxcZCspXFw7IGkgPCAoXFxkKylcXDsgaSBcXCtcXCsgXFwpIFxceyhbXFxzXFxTXSs/KSg/PVxcfSlcXH0vZztcbmNvbnN0IHVucm9sbExvb3BQYXR0ZXJuID0gLyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcXHMrZm9yXFxzKlxcKFxccyppbnRcXHMraVxccyo9XFxzKihcXGQrKVxccyo7XFxzKmlcXHMqPFxccyooXFxkKylcXHMqO1xccyppXFxzKlxcK1xcK1xccypcXClcXHMqeyhbXFxzXFxTXSs/KX1cXHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztcblxuZnVuY3Rpb24gdW5yb2xsTG9vcHMoIHN0cmluZyApIHtcblxuXHRyZXR1cm4gc3RyaW5nXG5cdFx0LnJlcGxhY2UoIHVucm9sbExvb3BQYXR0ZXJuLCBsb29wUmVwbGFjZXIgKVxuXHRcdC5yZXBsYWNlKCBkZXByZWNhdGVkVW5yb2xsTG9vcFBhdHRlcm4sIGRlcHJlY2F0ZWRMb29wUmVwbGFjZXIgKTtcblxufVxuXG5mdW5jdGlvbiBkZXByZWNhdGVkTG9vcFJlcGxhY2VyKCBtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbG9vcFJlcGxhY2VyKCBtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCApO1xuXG59XG5cbmZ1bmN0aW9uIGxvb3BSZXBsYWNlciggbWF0Y2gsIHN0YXJ0LCBlbmQsIHNuaXBwZXQgKSB7XG5cblx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdGZvciAoIGxldCBpID0gcGFyc2VJbnQoIHN0YXJ0ICk7IGkgPCBwYXJzZUludCggZW5kICk7IGkgKysgKSB7XG5cblx0XHRzdHJpbmcgKz0gc25pcHBldFxuXHRcdFx0LnJlcGxhY2UoIC9cXFtcXHMqaVxccypcXF0vZywgJ1sgJyArIGkgKyAnIF0nIClcblx0XHRcdC5yZXBsYWNlKCAvVU5ST0xMRURfTE9PUF9JTkRFWC9nLCBpICk7XG5cblx0fVxuXG5cdHJldHVybiBzdHJpbmc7XG5cbn1cblxuLy9cblxuZnVuY3Rpb24gZ2VuZXJhdGVQcmVjaXNpb24oIHBhcmFtZXRlcnMgKSB7XG5cblx0bGV0IHByZWNpc2lvbnN0cmluZyA9ICdwcmVjaXNpb24gJyArIHBhcmFtZXRlcnMucHJlY2lzaW9uICsgJyBmbG9hdDtcXG5wcmVjaXNpb24gJyArIHBhcmFtZXRlcnMucHJlY2lzaW9uICsgJyBpbnQ7JztcblxuXHRpZiAoIHBhcmFtZXRlcnMucHJlY2lzaW9uID09PSAnaGlnaHAnICkge1xuXG5cdFx0cHJlY2lzaW9uc3RyaW5nICs9ICdcXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OJztcblxuXHR9IGVsc2UgaWYgKCBwYXJhbWV0ZXJzLnByZWNpc2lvbiA9PT0gJ21lZGl1bXAnICkge1xuXG5cdFx0cHJlY2lzaW9uc3RyaW5nICs9ICdcXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04nO1xuXG5cdH0gZWxzZSBpZiAoIHBhcmFtZXRlcnMucHJlY2lzaW9uID09PSAnbG93cCcgKSB7XG5cblx0XHRwcmVjaXNpb25zdHJpbmcgKz0gJ1xcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTic7XG5cblx0fVxuXG5cdHJldHVybiBwcmVjaXNpb25zdHJpbmc7XG5cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTaGFkb3dNYXBUeXBlRGVmaW5lKCBwYXJhbWV0ZXJzICkge1xuXG5cdGxldCBzaGFkb3dNYXBUeXBlRGVmaW5lID0gJ1NIQURPV01BUF9UWVBFX0JBU0lDJztcblxuXHRpZiAoIHBhcmFtZXRlcnMuc2hhZG93TWFwVHlwZSA9PT0gUENGU2hhZG93TWFwICkge1xuXG5cdFx0c2hhZG93TWFwVHlwZURlZmluZSA9ICdTSEFET1dNQVBfVFlQRV9QQ0YnO1xuXG5cdH0gZWxzZSBpZiAoIHBhcmFtZXRlcnMuc2hhZG93TWFwVHlwZSA9PT0gUENGU29mdFNoYWRvd01hcCApIHtcblxuXHRcdHNoYWRvd01hcFR5cGVEZWZpbmUgPSAnU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQnO1xuXG5cdH0gZWxzZSBpZiAoIHBhcmFtZXRlcnMuc2hhZG93TWFwVHlwZSA9PT0gVlNNU2hhZG93TWFwICkge1xuXG5cdFx0c2hhZG93TWFwVHlwZURlZmluZSA9ICdTSEFET1dNQVBfVFlQRV9WU00nO1xuXG5cdH1cblxuXHRyZXR1cm4gc2hhZG93TWFwVHlwZURlZmluZTtcblxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVudk1hcFR5cGVEZWZpbmUoIHBhcmFtZXRlcnMgKSB7XG5cblx0bGV0IGVudk1hcFR5cGVEZWZpbmUgPSAnRU5WTUFQX1RZUEVfQ1VCRSc7XG5cblx0aWYgKCBwYXJhbWV0ZXJzLmVudk1hcCApIHtcblxuXHRcdHN3aXRjaCAoIHBhcmFtZXRlcnMuZW52TWFwTW9kZSApIHtcblxuXHRcdFx0Y2FzZSBDdWJlUmVmbGVjdGlvbk1hcHBpbmc6XG5cdFx0XHRjYXNlIEN1YmVSZWZyYWN0aW9uTWFwcGluZzpcblx0XHRcdFx0ZW52TWFwVHlwZURlZmluZSA9ICdFTlZNQVBfVFlQRV9DVUJFJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6XG5cdFx0XHRjYXNlIEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOlxuXHRcdFx0XHRlbnZNYXBUeXBlRGVmaW5lID0gJ0VOVk1BUF9UWVBFX0NVQkVfVVYnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIGVudk1hcFR5cGVEZWZpbmU7XG5cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFbnZNYXBNb2RlRGVmaW5lKCBwYXJhbWV0ZXJzICkge1xuXG5cdGxldCBlbnZNYXBNb2RlRGVmaW5lID0gJ0VOVk1BUF9NT0RFX1JFRkxFQ1RJT04nO1xuXG5cdGlmICggcGFyYW1ldGVycy5lbnZNYXAgKSB7XG5cblx0XHRzd2l0Y2ggKCBwYXJhbWV0ZXJzLmVudk1hcE1vZGUgKSB7XG5cblx0XHRcdGNhc2UgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOlxuXHRcdFx0Y2FzZSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpcblxuXHRcdFx0XHRlbnZNYXBNb2RlRGVmaW5lID0gJ0VOVk1BUF9NT0RFX1JFRlJBQ1RJT04nO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIGVudk1hcE1vZGVEZWZpbmU7XG5cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFbnZNYXBCbGVuZGluZ0RlZmluZSggcGFyYW1ldGVycyApIHtcblxuXHRsZXQgZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX05PTkUnO1xuXG5cdGlmICggcGFyYW1ldGVycy5lbnZNYXAgKSB7XG5cblx0XHRzd2l0Y2ggKCBwYXJhbWV0ZXJzLmNvbWJpbmUgKSB7XG5cblx0XHRcdGNhc2UgTXVsdGlwbHlPcGVyYXRpb246XG5cdFx0XHRcdGVudk1hcEJsZW5kaW5nRGVmaW5lID0gJ0VOVk1BUF9CTEVORElOR19NVUxUSVBMWSc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIE1peE9wZXJhdGlvbjpcblx0XHRcdFx0ZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX01JWCc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFkZE9wZXJhdGlvbjpcblx0XHRcdFx0ZW52TWFwQmxlbmRpbmdEZWZpbmUgPSAnRU5WTUFQX0JMRU5ESU5HX0FERCc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gZW52TWFwQmxlbmRpbmdEZWZpbmU7XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xQcm9ncmFtKCByZW5kZXJlciwgY2FjaGVLZXksIHBhcmFtZXRlcnMsIGJpbmRpbmdTdGF0ZXMgKSB7XG5cblx0Ly8gVE9ETyBTZW5kIHRoaXMgZXZlbnQgdG8gVGhyZWUuanMgRGV2VG9vbHNcblx0Ly8gY29uc29sZS5sb2coICdXZWJHTFByb2dyYW0nLCBjYWNoZUtleSApO1xuXG5cdGNvbnN0IGdsID0gcmVuZGVyZXIuZ2V0Q29udGV4dCgpO1xuXG5cdGNvbnN0IGRlZmluZXMgPSBwYXJhbWV0ZXJzLmRlZmluZXM7XG5cblx0bGV0IHZlcnRleFNoYWRlciA9IHBhcmFtZXRlcnMudmVydGV4U2hhZGVyO1xuXHRsZXQgZnJhZ21lbnRTaGFkZXIgPSBwYXJhbWV0ZXJzLmZyYWdtZW50U2hhZGVyO1xuXG5cdGNvbnN0IHNoYWRvd01hcFR5cGVEZWZpbmUgPSBnZW5lcmF0ZVNoYWRvd01hcFR5cGVEZWZpbmUoIHBhcmFtZXRlcnMgKTtcblx0Y29uc3QgZW52TWFwVHlwZURlZmluZSA9IGdlbmVyYXRlRW52TWFwVHlwZURlZmluZSggcGFyYW1ldGVycyApO1xuXHRjb25zdCBlbnZNYXBNb2RlRGVmaW5lID0gZ2VuZXJhdGVFbnZNYXBNb2RlRGVmaW5lKCBwYXJhbWV0ZXJzICk7XG5cdGNvbnN0IGVudk1hcEJsZW5kaW5nRGVmaW5lID0gZ2VuZXJhdGVFbnZNYXBCbGVuZGluZ0RlZmluZSggcGFyYW1ldGVycyApO1xuXG5cdGNvbnN0IGN1c3RvbUV4dGVuc2lvbnMgPSBwYXJhbWV0ZXJzLmlzV2ViR0wyID8gJycgOiBnZW5lcmF0ZUV4dGVuc2lvbnMoIHBhcmFtZXRlcnMgKTtcblxuXHRjb25zdCBjdXN0b21EZWZpbmVzID0gZ2VuZXJhdGVEZWZpbmVzKCBkZWZpbmVzICk7XG5cblx0Y29uc3QgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuXHRsZXQgcHJlZml4VmVydGV4LCBwcmVmaXhGcmFnbWVudDtcblx0bGV0IHZlcnNpb25TdHJpbmcgPSBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID8gJyN2ZXJzaW9uICcgKyBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uICsgJ1xcbicgOiAnJztcblxuXHRpZiAoIHBhcmFtZXRlcnMuaXNSYXdTaGFkZXJNYXRlcmlhbCApIHtcblxuXHRcdHByZWZpeFZlcnRleCA9IFtcblxuXHRcdFx0Y3VzdG9tRGVmaW5lc1xuXG5cdFx0XS5maWx0ZXIoIGZpbHRlckVtcHR5TGluZSApLmpvaW4oICdcXG4nICk7XG5cblx0XHRpZiAoIHByZWZpeFZlcnRleC5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRwcmVmaXhWZXJ0ZXggKz0gJ1xcbic7XG5cblx0XHR9XG5cblx0XHRwcmVmaXhGcmFnbWVudCA9IFtcblxuXHRcdFx0Y3VzdG9tRXh0ZW5zaW9ucyxcblx0XHRcdGN1c3RvbURlZmluZXNcblxuXHRcdF0uZmlsdGVyKCBmaWx0ZXJFbXB0eUxpbmUgKS5qb2luKCAnXFxuJyApO1xuXG5cdFx0aWYgKCBwcmVmaXhGcmFnbWVudC5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRwcmVmaXhGcmFnbWVudCArPSAnXFxuJztcblxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0cHJlZml4VmVydGV4ID0gW1xuXG5cdFx0XHRnZW5lcmF0ZVByZWNpc2lvbiggcGFyYW1ldGVycyApLFxuXG5cdFx0XHQnI2RlZmluZSBTSEFERVJfTkFNRSAnICsgcGFyYW1ldGVycy5zaGFkZXJOYW1lLFxuXG5cdFx0XHRjdXN0b21EZWZpbmVzLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmluc3RhbmNpbmcgPyAnI2RlZmluZSBVU0VfSU5TVEFOQ0lORycgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuaW5zdGFuY2luZ0NvbG9yID8gJyNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1InIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyA/ICcjZGVmaW5lIFZFUlRFWF9URVhUVVJFUycgOiAnJyxcblxuXHRcdFx0JyNkZWZpbmUgTUFYX0JPTkVTICcgKyBwYXJhbWV0ZXJzLm1heEJvbmVzLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZyApID8gJyNkZWZpbmUgVVNFX0ZPRycgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy51c2VGb2cgJiYgcGFyYW1ldGVycy5mb2dFeHAyICkgPyAnI2RlZmluZSBGT0dfRVhQMicgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5tYXAgPyAnI2RlZmluZSBVU0VfTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSBVU0VfRU5WTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSAnICsgZW52TWFwTW9kZURlZmluZSA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5saWdodE1hcCA/ICcjZGVmaW5lIFVTRV9MSUdIVE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuYW9NYXAgPyAnI2RlZmluZSBVU0VfQU9NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwID8gJyNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5idW1wTWFwID8gJyNkZWZpbmUgVVNFX0JVTVBNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLm5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9OT1JNQUxNQVAnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMub2JqZWN0U3BhY2VOb3JtYWxNYXAgKSA/ICcjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCcgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXAgKSA/ICcjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmRpc3BsYWNlbWVudE1hcCAmJiBwYXJhbWV0ZXJzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMgPyAnI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnNwZWN1bGFyTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuc3BlY3VsYXJDb2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLm1ldGFsbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmFscGhhTWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04nIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbk1hcCA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnRoaWNrbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9USElDS05FU1NNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc2hlZW5Db2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zaGVlblJvdWdobmVzc01hcCA/ICcjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5lIFVTRV9UQU5HRU5UJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhDb2xvcnMgPyAnI2RlZmluZSBVU0VfQ09MT1InIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnZlcnRleEFscGhhcyA/ICcjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQScgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudmVydGV4VXZzID8gJyNkZWZpbmUgVVNFX1VWJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy51dnNWZXJ0ZXhPbmx5ID8gJyNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmZsYXRTaGFkaW5nID8gJyNkZWZpbmUgRkxBVF9TSEFERUQnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc2tpbm5pbmcgPyAnI2RlZmluZSBVU0VfU0tJTk5JTkcnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnVzZVZlcnRleFRleHR1cmUgPyAnI2RlZmluZSBCT05FX1RFWFRVUkUnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzID8gJyNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUycgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMubW9ycGhOb3JtYWxzICYmIHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgPT09IGZhbHNlID8gJyNkZWZpbmUgVVNFX01PUlBITk9STUFMUycgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5tb3JwaFRhcmdldHMgJiYgcGFyYW1ldGVycy5pc1dlYkdMMiApID8gJyNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzICYmIHBhcmFtZXRlcnMuaXNXZWJHTDIgKSA/ICcjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAnICsgcGFyYW1ldGVycy5tb3JwaFRhcmdldHNDb3VudCA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5kb3VibGVTaWRlZCA/ICcjZGVmaW5lIERPVUJMRV9TSURFRCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuZmxpcFNpZGVkID8gJyNkZWZpbmUgRkxJUF9TSURFRCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkID8gJyNkZWZpbmUgVVNFX1NIQURPV01BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/ICcjZGVmaW5lICcgKyBzaGFkb3dNYXBUeXBlRGVmaW5lIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuc2l6ZUF0dGVudWF0aW9uID8gJyNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTicgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aCApID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCcgOiAnJyxcblxuXHRcdFx0J3VuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsnLFxuXHRcdFx0J3VuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7Jyxcblx0XHRcdCd1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsnLFxuXHRcdFx0J3VuaWZvcm0gbWF0NCB2aWV3TWF0cml4OycsXG5cdFx0XHQndW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsnLFxuXHRcdFx0J3VuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsnLFxuXHRcdFx0J3VuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsnLFxuXG5cdFx0XHQnI2lmZGVmIFVTRV9JTlNUQU5DSU5HJyxcblxuXHRcdFx0J1x0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7JyxcblxuXHRcdFx0JyNlbmRpZicsXG5cblx0XHRcdCcjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1InLFxuXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOycsXG5cblx0XHRcdCcjZW5kaWYnLFxuXG5cdFx0XHQnYXR0cmlidXRlIHZlYzMgcG9zaXRpb247Jyxcblx0XHRcdCdhdHRyaWJ1dGUgdmVjMyBub3JtYWw7Jyxcblx0XHRcdCdhdHRyaWJ1dGUgdmVjMiB1djsnLFxuXG5cdFx0XHQnI2lmZGVmIFVTRV9UQU5HRU5UJyxcblxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsnLFxuXG5cdFx0XHQnI2VuZGlmJyxcblxuXHRcdFx0JyNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKScsXG5cblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yOycsXG5cblx0XHRcdCcjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKScsXG5cblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOycsXG5cblx0XHRcdCcjZW5kaWYnLFxuXG5cdFx0XHQnI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApJyxcblxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOycsXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7Jyxcblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsnLFxuXHRcdFx0J1x0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOycsXG5cblx0XHRcdCdcdCNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTJyxcblxuXHRcdFx0J1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7Jyxcblx0XHRcdCdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOycsXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsnLFxuXHRcdFx0J1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7JyxcblxuXHRcdFx0J1x0I2Vsc2UnLFxuXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsnLFxuXHRcdFx0J1x0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7Jyxcblx0XHRcdCdcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OycsXG5cdFx0XHQnXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsnLFxuXG5cdFx0XHQnXHQjZW5kaWYnLFxuXG5cdFx0XHQnI2VuZGlmJyxcblxuXHRcdFx0JyNpZmRlZiBVU0VfU0tJTk5JTkcnLFxuXG5cdFx0XHQnXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7Jyxcblx0XHRcdCdcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7JyxcblxuXHRcdFx0JyNlbmRpZicsXG5cblx0XHRcdCdcXG4nXG5cblx0XHRdLmZpbHRlciggZmlsdGVyRW1wdHlMaW5lICkuam9pbiggJ1xcbicgKTtcblxuXHRcdHByZWZpeEZyYWdtZW50ID0gW1xuXG5cdFx0XHRjdXN0b21FeHRlbnNpb25zLFxuXG5cdFx0XHRnZW5lcmF0ZVByZWNpc2lvbiggcGFyYW1ldGVycyApLFxuXG5cdFx0XHQnI2RlZmluZSBTSEFERVJfTkFNRSAnICsgcGFyYW1ldGVycy5zaGFkZXJOYW1lLFxuXG5cdFx0XHRjdXN0b21EZWZpbmVzLFxuXG5cdFx0XHQoIHBhcmFtZXRlcnMudXNlRm9nICYmIHBhcmFtZXRlcnMuZm9nICkgPyAnI2RlZmluZSBVU0VfRk9HJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLnVzZUZvZyAmJiBwYXJhbWV0ZXJzLmZvZ0V4cDIgKSA/ICcjZGVmaW5lIEZPR19FWFAyJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLm1hcCA/ICcjZGVmaW5lIFVTRV9NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLm1hdGNhcCA/ICcjZGVmaW5lIFVTRV9NQVRDQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lIFVTRV9FTlZNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBUeXBlRGVmaW5lIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBNb2RlRGVmaW5lIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVudk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBCbGVuZGluZ0RlZmluZSA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5saWdodE1hcCA/ICcjZGVmaW5lIFVTRV9MSUdIVE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuYW9NYXAgPyAnI2RlZmluZSBVU0VfQU9NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwID8gJyNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5idW1wTWFwID8gJyNkZWZpbmUgVVNFX0JVTVBNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLm5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9OT1JNQUxNQVAnIDogJycsXG5cdFx0XHQoIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmIHBhcmFtZXRlcnMub2JqZWN0U3BhY2VOb3JtYWxNYXAgKSA/ICcjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCcgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy50YW5nZW50U3BhY2VOb3JtYWxNYXAgKSA/ICcjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0ID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0TWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuY2xlYXJjb2F0Um91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCA/ICcjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnNwZWN1bGFyTWFwID8gJyNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuc3BlY3VsYXJDb2xvck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5tZXRhbG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmFscGhhTWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5hbHBoYVRlc3QgPyAnI2RlZmluZSBVU0VfQUxQSEFURVNUJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnNoZWVuID8gJyNkZWZpbmUgVVNFX1NIRUVOJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zaGVlbkNvbG9yTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnNoZWVuUm91Z2huZXNzTWFwID8gJyNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbiA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04nIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnRyYW5zbWlzc2lvbk1hcCA/ICcjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnRoaWNrbmVzc01hcCA/ICcjZGVmaW5lIFVTRV9USElDS05FU1NNQVAnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMuZGVjb2RlVmlkZW9UZXh0dXJlID8gJyNkZWZpbmUgREVDT0RFX1ZJREVPX1RFWFRVUkUnIDogJycsXG5cblx0XHRcdHBhcmFtZXRlcnMudmVydGV4VGFuZ2VudHMgPyAnI2RlZmluZSBVU0VfVEFOR0VOVCcgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudmVydGV4Q29sb3JzIHx8IHBhcmFtZXRlcnMuaW5zdGFuY2luZ0NvbG9yID8gJyNkZWZpbmUgVVNFX0NPTE9SJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy52ZXJ0ZXhBbHBoYXMgPyAnI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEnIDogJycsXG5cdFx0XHRwYXJhbWV0ZXJzLnZlcnRleFV2cyA/ICcjZGVmaW5lIFVTRV9VVicgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMudXZzVmVydGV4T25seSA/ICcjZGVmaW5lIFVWU19WRVJURVhfT05MWScgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5ncmFkaWVudE1hcCA/ICcjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCcgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5mbGF0U2hhZGluZyA/ICcjZGVmaW5lIEZMQVRfU0hBREVEJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmRvdWJsZVNpZGVkID8gJyNkZWZpbmUgRE9VQkxFX1NJREVEJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5mbGlwU2lkZWQgPyAnI2RlZmluZSBGTElQX1NJREVEJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSBVU0VfU0hBRE9XTUFQJyA6ICcnLFxuXHRcdFx0cGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkID8gJyNkZWZpbmUgJyArIHNoYWRvd01hcFR5cGVEZWZpbmUgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEgPyAnI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBJyA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID8gJyNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUycgOiAnJyxcblxuXHRcdFx0cGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGJyA6ICcnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgJiYgcGFyYW1ldGVycy5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aCApID8gJyNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCcgOiAnJyxcblxuXHRcdFx0KCAoIHBhcmFtZXRlcnMuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRCB8fCBwYXJhbWV0ZXJzLmVudk1hcCApICYmIHBhcmFtZXRlcnMucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kICkgPyAnI2RlZmluZSBURVhUVVJFX0xPRF9FWFQnIDogJycsXG5cblx0XHRcdCd1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsnLFxuXHRcdFx0J3VuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsnLFxuXHRcdFx0J3VuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsnLFxuXG5cdFx0XHQoIHBhcmFtZXRlcnMudG9uZU1hcHBpbmcgIT09IE5vVG9uZU1hcHBpbmcgKSA/ICcjZGVmaW5lIFRPTkVfTUFQUElORycgOiAnJyxcblx0XHRcdCggcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyApID8gU2hhZGVyQ2h1bmtbICd0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50JyBdIDogJycsIC8vIHRoaXMgY29kZSBpcyByZXF1aXJlZCBoZXJlIGJlY2F1c2UgaXQgaXMgdXNlZCBieSB0aGUgdG9uZU1hcHBpbmcoKSBmdW5jdGlvbiBkZWZpbmVkIGJlbG93XG5cdFx0XHQoIHBhcmFtZXRlcnMudG9uZU1hcHBpbmcgIT09IE5vVG9uZU1hcHBpbmcgKSA/IGdldFRvbmVNYXBwaW5nRnVuY3Rpb24oICd0b25lTWFwcGluZycsIHBhcmFtZXRlcnMudG9uZU1hcHBpbmcgKSA6ICcnLFxuXG5cdFx0XHRwYXJhbWV0ZXJzLmRpdGhlcmluZyA/ICcjZGVmaW5lIERJVEhFUklORycgOiAnJyxcblx0XHRcdHBhcmFtZXRlcnMuYWxwaGFXcml0ZSA/ICcnIDogJyNkZWZpbmUgT1BBUVVFJyxcblxuXHRcdFx0U2hhZGVyQ2h1bmtbICdlbmNvZGluZ3NfcGFyc19mcmFnbWVudCcgXSwgLy8gdGhpcyBjb2RlIGlzIHJlcXVpcmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzIGVuY29kaW5nL2RlY29kaW5nIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3dcblx0XHRcdGdldFRleGVsRW5jb2RpbmdGdW5jdGlvbiggJ2xpbmVhclRvT3V0cHV0VGV4ZWwnLCBwYXJhbWV0ZXJzLm91dHB1dEVuY29kaW5nICksXG5cblx0XHRcdHBhcmFtZXRlcnMuZGVwdGhQYWNraW5nID8gJyNkZWZpbmUgREVQVEhfUEFDS0lORyAnICsgcGFyYW1ldGVycy5kZXB0aFBhY2tpbmcgOiAnJyxcblxuXHRcdFx0J1xcbidcblxuXHRcdF0uZmlsdGVyKCBmaWx0ZXJFbXB0eUxpbmUgKS5qb2luKCAnXFxuJyApO1xuXG5cdH1cblxuXHR2ZXJ0ZXhTaGFkZXIgPSByZXNvbHZlSW5jbHVkZXMoIHZlcnRleFNoYWRlciApO1xuXHR2ZXJ0ZXhTaGFkZXIgPSByZXBsYWNlTGlnaHROdW1zKCB2ZXJ0ZXhTaGFkZXIsIHBhcmFtZXRlcnMgKTtcblx0dmVydGV4U2hhZGVyID0gcmVwbGFjZUNsaXBwaW5nUGxhbmVOdW1zKCB2ZXJ0ZXhTaGFkZXIsIHBhcmFtZXRlcnMgKTtcblxuXHRmcmFnbWVudFNoYWRlciA9IHJlc29sdmVJbmNsdWRlcyggZnJhZ21lbnRTaGFkZXIgKTtcblx0ZnJhZ21lbnRTaGFkZXIgPSByZXBsYWNlTGlnaHROdW1zKCBmcmFnbWVudFNoYWRlciwgcGFyYW1ldGVycyApO1xuXHRmcmFnbWVudFNoYWRlciA9IHJlcGxhY2VDbGlwcGluZ1BsYW5lTnVtcyggZnJhZ21lbnRTaGFkZXIsIHBhcmFtZXRlcnMgKTtcblxuXHR2ZXJ0ZXhTaGFkZXIgPSB1bnJvbGxMb29wcyggdmVydGV4U2hhZGVyICk7XG5cdGZyYWdtZW50U2hhZGVyID0gdW5yb2xsTG9vcHMoIGZyYWdtZW50U2hhZGVyICk7XG5cblx0aWYgKCBwYXJhbWV0ZXJzLmlzV2ViR0wyICYmIHBhcmFtZXRlcnMuaXNSYXdTaGFkZXJNYXRlcmlhbCAhPT0gdHJ1ZSApIHtcblxuXHRcdC8vIEdMU0wgMy4wIGNvbnZlcnNpb24gZm9yIGJ1aWx0LWluIG1hdGVyaWFscyBhbmQgU2hhZGVyTWF0ZXJpYWxcblxuXHRcdHZlcnNpb25TdHJpbmcgPSAnI3ZlcnNpb24gMzAwIGVzXFxuJztcblxuXHRcdHByZWZpeFZlcnRleCA9IFtcblx0XHRcdCdwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsnLFxuXHRcdFx0JyNkZWZpbmUgYXR0cmlidXRlIGluJyxcblx0XHRcdCcjZGVmaW5lIHZhcnlpbmcgb3V0Jyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlJ1xuXHRcdF0uam9pbiggJ1xcbicgKSArICdcXG4nICsgcHJlZml4VmVydGV4O1xuXG5cdFx0cHJlZml4RnJhZ21lbnQgPSBbXG5cdFx0XHQnI2RlZmluZSB2YXJ5aW5nIGluJyxcblx0XHRcdCggcGFyYW1ldGVycy5nbHNsVmVyc2lvbiA9PT0gR0xTTDMgKSA/ICcnIDogJ2xheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsnLFxuXHRcdFx0KCBwYXJhbWV0ZXJzLmdsc2xWZXJzaW9uID09PSBHTFNMMyApID8gJycgOiAnI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yJyxcblx0XHRcdCcjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZScsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QnLFxuXHRcdFx0JyNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCcsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkJyxcblx0XHRcdCcjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCcsXG5cdFx0XHQnI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQnXG5cdFx0XS5qb2luKCAnXFxuJyApICsgJ1xcbicgKyBwcmVmaXhGcmFnbWVudDtcblxuXHR9XG5cblx0Y29uc3QgdmVydGV4R2xzbCA9IHZlcnNpb25TdHJpbmcgKyBwcmVmaXhWZXJ0ZXggKyB2ZXJ0ZXhTaGFkZXI7XG5cdGNvbnN0IGZyYWdtZW50R2xzbCA9IHZlcnNpb25TdHJpbmcgKyBwcmVmaXhGcmFnbWVudCArIGZyYWdtZW50U2hhZGVyO1xuXG5cdC8vIGNvbnNvbGUubG9nKCAnKlZFUlRFWConLCB2ZXJ0ZXhHbHNsICk7XG5cdC8vIGNvbnNvbGUubG9nKCAnKkZSQUdNRU5UKicsIGZyYWdtZW50R2xzbCApO1xuXG5cdGNvbnN0IGdsVmVydGV4U2hhZGVyID0gV2ViR0xTaGFkZXIoIGdsLCAzNTYzMywgdmVydGV4R2xzbCApO1xuXHRjb25zdCBnbEZyYWdtZW50U2hhZGVyID0gV2ViR0xTaGFkZXIoIGdsLCAzNTYzMiwgZnJhZ21lbnRHbHNsICk7XG5cblx0Z2wuYXR0YWNoU2hhZGVyKCBwcm9ncmFtLCBnbFZlcnRleFNoYWRlciApO1xuXHRnbC5hdHRhY2hTaGFkZXIoIHByb2dyYW0sIGdsRnJhZ21lbnRTaGFkZXIgKTtcblxuXHQvLyBGb3JjZSBhIHBhcnRpY3VsYXIgYXR0cmlidXRlIHRvIGluZGV4IDAuXG5cblx0aWYgKCBwYXJhbWV0ZXJzLmluZGV4MEF0dHJpYnV0ZU5hbWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGdsLmJpbmRBdHRyaWJMb2NhdGlvbiggcHJvZ3JhbSwgMCwgcGFyYW1ldGVycy5pbmRleDBBdHRyaWJ1dGVOYW1lICk7XG5cblx0fSBlbHNlIGlmICggcGFyYW1ldGVycy5tb3JwaFRhcmdldHMgPT09IHRydWUgKSB7XG5cblx0XHQvLyBwcm9ncmFtcyB3aXRoIG1vcnBoVGFyZ2V0cyBkaXNwbGFjZSBwb3NpdGlvbiBvdXQgb2YgYXR0cmlidXRlIDBcblx0XHRnbC5iaW5kQXR0cmliTG9jYXRpb24oIHByb2dyYW0sIDAsICdwb3NpdGlvbicgKTtcblxuXHR9XG5cblx0Z2wubGlua1Byb2dyYW0oIHByb2dyYW0gKTtcblxuXHQvLyBjaGVjayBmb3IgbGluayBlcnJvcnNcblx0aWYgKCByZW5kZXJlci5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyApIHtcblxuXHRcdGNvbnN0IHByb2dyYW1Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyggcHJvZ3JhbSApLnRyaW0oKTtcblx0XHRjb25zdCB2ZXJ0ZXhMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKCBnbFZlcnRleFNoYWRlciApLnRyaW0oKTtcblx0XHRjb25zdCBmcmFnbWVudExvZyA9IGdsLmdldFNoYWRlckluZm9Mb2coIGdsRnJhZ21lbnRTaGFkZXIgKS50cmltKCk7XG5cblx0XHRsZXQgcnVubmFibGUgPSB0cnVlO1xuXHRcdGxldCBoYXZlRGlhZ25vc3RpY3MgPSB0cnVlO1xuXG5cdFx0aWYgKCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKCBwcm9ncmFtLCAzNTcxNCApID09PSBmYWxzZSApIHtcblxuXHRcdFx0cnVubmFibGUgPSBmYWxzZTtcblxuXHRcdFx0Y29uc3QgdmVydGV4RXJyb3JzID0gZ2V0U2hhZGVyRXJyb3JzKCBnbCwgZ2xWZXJ0ZXhTaGFkZXIsICd2ZXJ0ZXgnICk7XG5cdFx0XHRjb25zdCBmcmFnbWVudEVycm9ycyA9IGdldFNoYWRlckVycm9ycyggZ2wsIGdsRnJhZ21lbnRTaGFkZXIsICdmcmFnbWVudCcgKTtcblxuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0J1RIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICcgKyBnbC5nZXRFcnJvcigpICsgJyAtICcgK1xuXHRcdFx0XHQnVkFMSURBVEVfU1RBVFVTICcgKyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKCBwcm9ncmFtLCAzNTcxNSApICsgJ1xcblxcbicgK1xuXHRcdFx0XHQnUHJvZ3JhbSBJbmZvIExvZzogJyArIHByb2dyYW1Mb2cgKyAnXFxuJyArXG5cdFx0XHRcdHZlcnRleEVycm9ycyArICdcXG4nICtcblx0XHRcdFx0ZnJhZ21lbnRFcnJvcnNcblx0XHRcdCk7XG5cblx0XHR9IGVsc2UgaWYgKCBwcm9ncmFtTG9nICE9PSAnJyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOicsIHByb2dyYW1Mb2cgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHZlcnRleExvZyA9PT0gJycgfHwgZnJhZ21lbnRMb2cgPT09ICcnICkge1xuXG5cdFx0XHRoYXZlRGlhZ25vc3RpY3MgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdGlmICggaGF2ZURpYWdub3N0aWNzICkge1xuXG5cdFx0XHR0aGlzLmRpYWdub3N0aWNzID0ge1xuXG5cdFx0XHRcdHJ1bm5hYmxlOiBydW5uYWJsZSxcblxuXHRcdFx0XHRwcm9ncmFtTG9nOiBwcm9ncmFtTG9nLFxuXG5cdFx0XHRcdHZlcnRleFNoYWRlcjoge1xuXG5cdFx0XHRcdFx0bG9nOiB2ZXJ0ZXhMb2csXG5cdFx0XHRcdFx0cHJlZml4OiBwcmVmaXhWZXJ0ZXhcblxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGZyYWdtZW50U2hhZGVyOiB7XG5cblx0XHRcdFx0XHRsb2c6IGZyYWdtZW50TG9nLFxuXHRcdFx0XHRcdHByZWZpeDogcHJlZml4RnJhZ21lbnRcblxuXHRcdFx0XHR9XG5cblx0XHRcdH07XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vIENsZWFuIHVwXG5cblx0Ly8gQ3Jhc2hlcyBpbiBpT1M5IGFuZCBpT1MxMC4gIzE4NDAyXG5cdC8vIGdsLmRldGFjaFNoYWRlciggcHJvZ3JhbSwgZ2xWZXJ0ZXhTaGFkZXIgKTtcblx0Ly8gZ2wuZGV0YWNoU2hhZGVyKCBwcm9ncmFtLCBnbEZyYWdtZW50U2hhZGVyICk7XG5cblx0Z2wuZGVsZXRlU2hhZGVyKCBnbFZlcnRleFNoYWRlciApO1xuXHRnbC5kZWxldGVTaGFkZXIoIGdsRnJhZ21lbnRTaGFkZXIgKTtcblxuXHQvLyBzZXQgdXAgY2FjaGluZyBmb3IgdW5pZm9ybSBsb2NhdGlvbnNcblxuXHRsZXQgY2FjaGVkVW5pZm9ybXM7XG5cblx0dGhpcy5nZXRVbmlmb3JtcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdGlmICggY2FjaGVkVW5pZm9ybXMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y2FjaGVkVW5pZm9ybXMgPSBuZXcgV2ViR0xVbmlmb3JtcyggZ2wsIHByb2dyYW0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZWRVbmlmb3JtcztcblxuXHR9O1xuXG5cdC8vIHNldCB1cCBjYWNoaW5nIGZvciBhdHRyaWJ1dGUgbG9jYXRpb25zXG5cblx0bGV0IGNhY2hlZEF0dHJpYnV0ZXM7XG5cblx0dGhpcy5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0aWYgKCBjYWNoZWRBdHRyaWJ1dGVzID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNhY2hlZEF0dHJpYnV0ZXMgPSBmZXRjaEF0dHJpYnV0ZUxvY2F0aW9ucyggZ2wsIHByb2dyYW0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZWRBdHRyaWJ1dGVzO1xuXG5cdH07XG5cblx0Ly8gZnJlZSByZXNvdXJjZVxuXG5cdHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdGJpbmRpbmdTdGF0ZXMucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSggdGhpcyApO1xuXG5cdFx0Z2wuZGVsZXRlUHJvZ3JhbSggcHJvZ3JhbSApO1xuXHRcdHRoaXMucHJvZ3JhbSA9IHVuZGVmaW5lZDtcblxuXHR9O1xuXG5cdC8vXG5cblx0dGhpcy5uYW1lID0gcGFyYW1ldGVycy5zaGFkZXJOYW1lO1xuXHR0aGlzLmlkID0gcHJvZ3JhbUlkQ291bnQgKys7XG5cdHRoaXMuY2FjaGVLZXkgPSBjYWNoZUtleTtcblx0dGhpcy51c2VkVGltZXMgPSAxO1xuXHR0aGlzLnByb2dyYW0gPSBwcm9ncmFtO1xuXHR0aGlzLnZlcnRleFNoYWRlciA9IGdsVmVydGV4U2hhZGVyO1xuXHR0aGlzLmZyYWdtZW50U2hhZGVyID0gZ2xGcmFnbWVudFNoYWRlcjtcblxuXHRyZXR1cm4gdGhpcztcblxufVxuXG5sZXQgX2lkID0gMDtcblxuY2xhc3MgV2ViR0xTaGFkZXJDYWNoZSB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLnNoYWRlckNhY2hlID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMubWF0ZXJpYWxDYWNoZSA9IG5ldyBNYXAoKTtcblxuXHR9XG5cblx0dXBkYXRlKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IHZlcnRleFNoYWRlciA9IG1hdGVyaWFsLnZlcnRleFNoYWRlcjtcblx0XHRjb25zdCBmcmFnbWVudFNoYWRlciA9IG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0Y29uc3QgdmVydGV4U2hhZGVyU3RhZ2UgPSB0aGlzLl9nZXRTaGFkZXJTdGFnZSggdmVydGV4U2hhZGVyICk7XG5cdFx0Y29uc3QgZnJhZ21lbnRTaGFkZXJTdGFnZSA9IHRoaXMuX2dldFNoYWRlclN0YWdlKCBmcmFnbWVudFNoYWRlciApO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWxTaGFkZXJzID0gdGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCggbWF0ZXJpYWwgKTtcblxuXHRcdGlmICggbWF0ZXJpYWxTaGFkZXJzLmhhcyggdmVydGV4U2hhZGVyU3RhZ2UgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdG1hdGVyaWFsU2hhZGVycy5hZGQoIHZlcnRleFNoYWRlclN0YWdlICk7XG5cdFx0XHR2ZXJ0ZXhTaGFkZXJTdGFnZS51c2VkVGltZXMgKys7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsU2hhZGVycy5oYXMoIGZyYWdtZW50U2hhZGVyU3RhZ2UgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdG1hdGVyaWFsU2hhZGVycy5hZGQoIGZyYWdtZW50U2hhZGVyU3RhZ2UgKTtcblx0XHRcdGZyYWdtZW50U2hhZGVyU3RhZ2UudXNlZFRpbWVzICsrO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJlbW92ZSggbWF0ZXJpYWwgKSB7XG5cblx0XHRjb25zdCBtYXRlcmlhbFNoYWRlcnMgPSB0aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KCBtYXRlcmlhbCApO1xuXG5cdFx0Zm9yICggY29uc3Qgc2hhZGVyU3RhZ2Ugb2YgbWF0ZXJpYWxTaGFkZXJzICkge1xuXG5cdFx0XHRzaGFkZXJTdGFnZS51c2VkVGltZXMgLS07XG5cblx0XHRcdGlmICggc2hhZGVyU3RhZ2UudXNlZFRpbWVzID09PSAwICkgdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoIHNoYWRlclN0YWdlICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKCBtYXRlcmlhbCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFZlcnRleFNoYWRlcklEKCBtYXRlcmlhbCApIHtcblxuXHRcdHJldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSggbWF0ZXJpYWwudmVydGV4U2hhZGVyICkuaWQ7XG5cblx0fVxuXG5cdGdldEZyYWdtZW50U2hhZGVySUQoIG1hdGVyaWFsICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKCBtYXRlcmlhbC5mcmFnbWVudFNoYWRlciApLmlkO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpO1xuXHRcdHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpO1xuXG5cdH1cblxuXHRfZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCggbWF0ZXJpYWwgKSB7XG5cblx0XHRjb25zdCBjYWNoZSA9IHRoaXMubWF0ZXJpYWxDYWNoZTtcblxuXHRcdGlmICggY2FjaGUuaGFzKCBtYXRlcmlhbCApID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y2FjaGUuc2V0KCBtYXRlcmlhbCwgbmV3IFNldCgpICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGUuZ2V0KCBtYXRlcmlhbCApO1xuXG5cdH1cblxuXHRfZ2V0U2hhZGVyU3RhZ2UoIGNvZGUgKSB7XG5cblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuc2hhZGVyQ2FjaGU7XG5cblx0XHRpZiAoIGNhY2hlLmhhcyggY29kZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc3Qgc3RhZ2UgPSBuZXcgV2ViR0xTaGFkZXJTdGFnZSgpO1xuXHRcdFx0Y2FjaGUuc2V0KCBjb2RlLCBzdGFnZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlLmdldCggY29kZSApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBXZWJHTFNoYWRlclN0YWdlIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuaWQgPSBfaWQgKys7XG5cblx0XHR0aGlzLnVzZWRUaW1lcyA9IDA7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIFdlYkdMUHJvZ3JhbXMoIHJlbmRlcmVyLCBjdWJlbWFwcywgY3ViZXV2bWFwcywgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzLCBiaW5kaW5nU3RhdGVzLCBjbGlwcGluZyApIHtcblxuXHRjb25zdCBfcHJvZ3JhbUxheWVycyA9IG5ldyBMYXllcnMoKTtcblx0Y29uc3QgX2N1c3RvbVNoYWRlcnMgPSBuZXcgV2ViR0xTaGFkZXJDYWNoZSgpO1xuXHRjb25zdCBwcm9ncmFtcyA9IFtdO1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRjb25zdCBsb2dhcml0aG1pY0RlcHRoQnVmZmVyID0gY2FwYWJpbGl0aWVzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI7XG5cdGNvbnN0IGZsb2F0VmVydGV4VGV4dHVyZXMgPSBjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0ZXhUZXh0dXJlcztcblx0Y29uc3QgbWF4VmVydGV4VW5pZm9ybXMgPSBjYXBhYmlsaXRpZXMubWF4VmVydGV4VW5pZm9ybXM7XG5cdGNvbnN0IHZlcnRleFRleHR1cmVzID0gY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzO1xuXHRsZXQgcHJlY2lzaW9uID0gY2FwYWJpbGl0aWVzLnByZWNpc2lvbjtcblxuXHRjb25zdCBzaGFkZXJJRHMgPSB7XG5cdFx0TWVzaERlcHRoTWF0ZXJpYWw6ICdkZXB0aCcsXG5cdFx0TWVzaERpc3RhbmNlTWF0ZXJpYWw6ICdkaXN0YW5jZVJHQkEnLFxuXHRcdE1lc2hOb3JtYWxNYXRlcmlhbDogJ25vcm1hbCcsXG5cdFx0TWVzaEJhc2ljTWF0ZXJpYWw6ICdiYXNpYycsXG5cdFx0TWVzaExhbWJlcnRNYXRlcmlhbDogJ2xhbWJlcnQnLFxuXHRcdE1lc2hQaG9uZ01hdGVyaWFsOiAncGhvbmcnLFxuXHRcdE1lc2hUb29uTWF0ZXJpYWw6ICd0b29uJyxcblx0XHRNZXNoU3RhbmRhcmRNYXRlcmlhbDogJ3BoeXNpY2FsJyxcblx0XHRNZXNoUGh5c2ljYWxNYXRlcmlhbDogJ3BoeXNpY2FsJyxcblx0XHRNZXNoTWF0Y2FwTWF0ZXJpYWw6ICdtYXRjYXAnLFxuXHRcdExpbmVCYXNpY01hdGVyaWFsOiAnYmFzaWMnLFxuXHRcdExpbmVEYXNoZWRNYXRlcmlhbDogJ2Rhc2hlZCcsXG5cdFx0UG9pbnRzTWF0ZXJpYWw6ICdwb2ludHMnLFxuXHRcdFNoYWRvd01hdGVyaWFsOiAnc2hhZG93Jyxcblx0XHRTcHJpdGVNYXRlcmlhbDogJ3Nwcml0ZSdcblx0fTtcblxuXHRmdW5jdGlvbiBnZXRNYXhCb25lcyggb2JqZWN0ICkge1xuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XG5cdFx0Y29uc3QgYm9uZXMgPSBza2VsZXRvbi5ib25lcztcblxuXHRcdGlmICggZmxvYXRWZXJ0ZXhUZXh0dXJlcyApIHtcblxuXHRcdFx0cmV0dXJuIDEwMjQ7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBkZWZhdWx0IGZvciB3aGVuIG9iamVjdCBpcyBub3Qgc3BlY2lmaWVkXG5cdFx0XHQvLyAoIGZvciBleGFtcGxlIHdoZW4gcHJlYnVpbGRpbmcgc2hhZGVyIHRvIGJlIHVzZWQgd2l0aCBtdWx0aXBsZSBvYmplY3RzIClcblx0XHRcdC8vXG5cdFx0XHQvLyAgLSBsZWF2ZSBzb21lIGV4dHJhIHNwYWNlIGZvciBvdGhlciB1bmlmb3Jtc1xuXHRcdFx0Ly8gIC0gbGltaXQgaGVyZSBpcyBBTkdMRSdzIDI1NCBtYXggdW5pZm9ybSB2ZWN0b3JzXG5cdFx0XHQvLyAgICAodXAgdG8gNTQgc2hvdWxkIGJlIHNhZmUpXG5cblx0XHRcdGNvbnN0IG5WZXJ0ZXhVbmlmb3JtcyA9IG1heFZlcnRleFVuaWZvcm1zO1xuXHRcdFx0Y29uc3QgblZlcnRleE1hdHJpY2VzID0gTWF0aC5mbG9vciggKCBuVmVydGV4VW5pZm9ybXMgLSAyMCApIC8gNCApO1xuXG5cdFx0XHRjb25zdCBtYXhCb25lcyA9IE1hdGgubWluKCBuVmVydGV4TWF0cmljZXMsIGJvbmVzLmxlbmd0aCApO1xuXG5cdFx0XHRpZiAoIG1heEJvbmVzIDwgYm9uZXMubGVuZ3RoICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAnICsgYm9uZXMubGVuZ3RoICsgJyBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgJyArIG1heEJvbmVzICsgJy4nICk7XG5cdFx0XHRcdHJldHVybiAwO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXhCb25lcztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyggbWF0ZXJpYWwsIGxpZ2h0cywgc2hhZG93cywgc2NlbmUsIG9iamVjdCApIHtcblxuXHRcdGNvbnN0IGZvZyA9IHNjZW5lLmZvZztcblx0XHRjb25zdCBlbnZpcm9ubWVudCA9IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBzY2VuZS5lbnZpcm9ubWVudCA6IG51bGw7XG5cblx0XHRjb25zdCBlbnZNYXAgPSAoIG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMgKS5nZXQoIG1hdGVyaWFsLmVudk1hcCB8fCBlbnZpcm9ubWVudCApO1xuXG5cdFx0Y29uc3Qgc2hhZGVySUQgPSBzaGFkZXJJRHNbIG1hdGVyaWFsLnR5cGUgXTtcblxuXHRcdC8vIGhldXJpc3RpY3MgdG8gY3JlYXRlIHNoYWRlciBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byBsaWdodHMgaW4gdGhlIHNjZW5lXG5cdFx0Ly8gKG5vdCB0byBibG93IG92ZXIgbWF4TGlnaHRzIGJ1ZGdldClcblxuXHRcdGNvbnN0IG1heEJvbmVzID0gb2JqZWN0LmlzU2tpbm5lZE1lc2ggPyBnZXRNYXhCb25lcyggb2JqZWN0ICkgOiAwO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5wcmVjaXNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdHByZWNpc2lvbiA9IGNhcGFiaWxpdGllcy5nZXRNYXhQcmVjaXNpb24oIG1hdGVyaWFsLnByZWNpc2lvbiApO1xuXG5cdFx0XHRpZiAoIHByZWNpc2lvbiAhPT0gbWF0ZXJpYWwucHJlY2lzaW9uICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOicsIG1hdGVyaWFsLnByZWNpc2lvbiwgJ25vdCBzdXBwb3J0ZWQsIHVzaW5nJywgcHJlY2lzaW9uLCAnaW5zdGVhZC4nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGxldCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyO1xuXHRcdGxldCBjdXN0b21WZXJ0ZXhTaGFkZXJJRCwgY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDtcblxuXHRcdGlmICggc2hhZGVySUQgKSB7XG5cblx0XHRcdGNvbnN0IHNoYWRlciA9IFNoYWRlckxpYlsgc2hhZGVySUQgXTtcblxuXHRcdFx0dmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlcjtcblx0XHRcdGZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dmVydGV4U2hhZGVyID0gbWF0ZXJpYWwudmVydGV4U2hhZGVyO1xuXHRcdFx0ZnJhZ21lbnRTaGFkZXIgPSBtYXRlcmlhbC5mcmFnbWVudFNoYWRlcjtcblxuXHRcdFx0X2N1c3RvbVNoYWRlcnMudXBkYXRlKCBtYXRlcmlhbCApO1xuXG5cdFx0XHRjdXN0b21WZXJ0ZXhTaGFkZXJJRCA9IF9jdXN0b21TaGFkZXJzLmdldFZlcnRleFNoYWRlcklEKCBtYXRlcmlhbCApO1xuXHRcdFx0Y3VzdG9tRnJhZ21lbnRTaGFkZXJJRCA9IF9jdXN0b21TaGFkZXJzLmdldEZyYWdtZW50U2hhZGVySUQoIG1hdGVyaWFsICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRjb25zdCB1c2VBbHBoYVRlc3QgPSBtYXRlcmlhbC5hbHBoYVRlc3QgPiAwO1xuXHRcdGNvbnN0IHVzZUNsZWFyY29hdCA9IG1hdGVyaWFsLmNsZWFyY29hdCA+IDA7XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge1xuXG5cdFx0XHRpc1dlYkdMMjogaXNXZWJHTDIsXG5cblx0XHRcdHNoYWRlcklEOiBzaGFkZXJJRCxcblx0XHRcdHNoYWRlck5hbWU6IG1hdGVyaWFsLnR5cGUsXG5cblx0XHRcdHZlcnRleFNoYWRlcjogdmVydGV4U2hhZGVyLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyLFxuXHRcdFx0ZGVmaW5lczogbWF0ZXJpYWwuZGVmaW5lcyxcblxuXHRcdFx0Y3VzdG9tVmVydGV4U2hhZGVySUQ6IGN1c3RvbVZlcnRleFNoYWRlcklELFxuXHRcdFx0Y3VzdG9tRnJhZ21lbnRTaGFkZXJJRDogY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCxcblxuXHRcdFx0aXNSYXdTaGFkZXJNYXRlcmlhbDogbWF0ZXJpYWwuaXNSYXdTaGFkZXJNYXRlcmlhbCA9PT0gdHJ1ZSxcblx0XHRcdGdsc2xWZXJzaW9uOiBtYXRlcmlhbC5nbHNsVmVyc2lvbixcblxuXHRcdFx0cHJlY2lzaW9uOiBwcmVjaXNpb24sXG5cblx0XHRcdGluc3RhbmNpbmc6IG9iamVjdC5pc0luc3RhbmNlZE1lc2ggPT09IHRydWUsXG5cdFx0XHRpbnN0YW5jaW5nQ29sb3I6IG9iamVjdC5pc0luc3RhbmNlZE1lc2ggPT09IHRydWUgJiYgb2JqZWN0Lmluc3RhbmNlQ29sb3IgIT09IG51bGwsXG5cblx0XHRcdHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6IHZlcnRleFRleHR1cmVzLFxuXHRcdFx0b3V0cHV0RW5jb2Rpbmc6ICggY3VycmVudFJlbmRlclRhcmdldCA9PT0gbnVsbCApID8gcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgOiAoIGN1cnJlbnRSZW5kZXJUYXJnZXQuaXNYUlJlbmRlclRhcmdldCA9PT0gdHJ1ZSA/IGN1cnJlbnRSZW5kZXJUYXJnZXQudGV4dHVyZS5lbmNvZGluZyA6IExpbmVhckVuY29kaW5nICksXG5cdFx0XHRtYXA6ICEhIG1hdGVyaWFsLm1hcCxcblx0XHRcdG1hdGNhcDogISEgbWF0ZXJpYWwubWF0Y2FwLFxuXHRcdFx0ZW52TWFwOiAhISBlbnZNYXAsXG5cdFx0XHRlbnZNYXBNb2RlOiBlbnZNYXAgJiYgZW52TWFwLm1hcHBpbmcsXG5cdFx0XHRlbnZNYXBDdWJlVVY6ICggISEgZW52TWFwICkgJiYgKCAoIGVudk1hcC5tYXBwaW5nID09PSBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZyApIHx8ICggZW52TWFwLm1hcHBpbmcgPT09IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nICkgKSxcblx0XHRcdGxpZ2h0TWFwOiAhISBtYXRlcmlhbC5saWdodE1hcCxcblx0XHRcdGFvTWFwOiAhISBtYXRlcmlhbC5hb01hcCxcblx0XHRcdGVtaXNzaXZlTWFwOiAhISBtYXRlcmlhbC5lbWlzc2l2ZU1hcCxcblx0XHRcdGJ1bXBNYXA6ICEhIG1hdGVyaWFsLmJ1bXBNYXAsXG5cdFx0XHRub3JtYWxNYXA6ICEhIG1hdGVyaWFsLm5vcm1hbE1hcCxcblx0XHRcdG9iamVjdFNwYWNlTm9ybWFsTWFwOiBtYXRlcmlhbC5ub3JtYWxNYXBUeXBlID09PSBPYmplY3RTcGFjZU5vcm1hbE1hcCxcblx0XHRcdHRhbmdlbnRTcGFjZU5vcm1hbE1hcDogbWF0ZXJpYWwubm9ybWFsTWFwVHlwZSA9PT0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuXG5cdFx0XHRkZWNvZGVWaWRlb1RleHR1cmU6ICEhIG1hdGVyaWFsLm1hcCAmJiAoIG1hdGVyaWFsLm1hcC5pc1ZpZGVvVGV4dHVyZSA9PT0gdHJ1ZSApICYmICggbWF0ZXJpYWwubWFwLmVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSxcblxuXHRcdFx0Y2xlYXJjb2F0OiB1c2VDbGVhcmNvYXQsXG5cdFx0XHRjbGVhcmNvYXRNYXA6IHVzZUNsZWFyY29hdCAmJiAhISBtYXRlcmlhbC5jbGVhcmNvYXRNYXAsXG5cdFx0XHRjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IHVzZUNsZWFyY29hdCAmJiAhISBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsXG5cdFx0XHRjbGVhcmNvYXROb3JtYWxNYXA6IHVzZUNsZWFyY29hdCAmJiAhISBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAsXG5cblx0XHRcdGRpc3BsYWNlbWVudE1hcDogISEgbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwLFxuXHRcdFx0cm91Z2huZXNzTWFwOiAhISBtYXRlcmlhbC5yb3VnaG5lc3NNYXAsXG5cdFx0XHRtZXRhbG5lc3NNYXA6ICEhIG1hdGVyaWFsLm1ldGFsbmVzc01hcCxcblx0XHRcdHNwZWN1bGFyTWFwOiAhISBtYXRlcmlhbC5zcGVjdWxhck1hcCxcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5TWFwOiAhISBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCxcblx0XHRcdHNwZWN1bGFyQ29sb3JNYXA6ICEhIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXAsXG5cblx0XHRcdGFscGhhTWFwOiAhISBtYXRlcmlhbC5hbHBoYU1hcCxcblx0XHRcdGFscGhhVGVzdDogdXNlQWxwaGFUZXN0LFxuXHRcdFx0YWxwaGFXcml0ZTogbWF0ZXJpYWwuYWxwaGFXcml0ZSB8fCBtYXRlcmlhbC50cmFuc3BhcmVudCxcblxuXHRcdFx0Z3JhZGllbnRNYXA6ICEhIG1hdGVyaWFsLmdyYWRpZW50TWFwLFxuXG5cdFx0XHRzaGVlbjogbWF0ZXJpYWwuc2hlZW4gPiAwLFxuXHRcdFx0c2hlZW5Db2xvck1hcDogISEgbWF0ZXJpYWwuc2hlZW5Db2xvck1hcCxcblx0XHRcdHNoZWVuUm91Z2huZXNzTWFwOiAhISBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCxcblxuXHRcdFx0dHJhbnNtaXNzaW9uOiBtYXRlcmlhbC50cmFuc21pc3Npb24gPiAwLFxuXHRcdFx0dHJhbnNtaXNzaW9uTWFwOiAhISBtYXRlcmlhbC50cmFuc21pc3Npb25NYXAsXG5cdFx0XHR0aGlja25lc3NNYXA6ICEhIG1hdGVyaWFsLnRoaWNrbmVzc01hcCxcblxuXHRcdFx0Y29tYmluZTogbWF0ZXJpYWwuY29tYmluZSxcblxuXHRcdFx0dmVydGV4VGFuZ2VudHM6ICggISEgbWF0ZXJpYWwubm9ybWFsTWFwICYmICEhIG9iamVjdC5nZW9tZXRyeSAmJiAhISBvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50ICksXG5cdFx0XHR2ZXJ0ZXhDb2xvcnM6IG1hdGVyaWFsLnZlcnRleENvbG9ycyxcblx0XHRcdHZlcnRleEFscGhhczogbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSB0cnVlICYmICEhIG9iamVjdC5nZW9tZXRyeSAmJiAhISBvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciAmJiBvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSA9PT0gNCxcblx0XHRcdHZlcnRleFV2czogISEgbWF0ZXJpYWwubWFwIHx8ICEhIG1hdGVyaWFsLmJ1bXBNYXAgfHwgISEgbWF0ZXJpYWwubm9ybWFsTWFwIHx8ICEhIG1hdGVyaWFsLnNwZWN1bGFyTWFwIHx8ICEhIG1hdGVyaWFsLmFscGhhTWFwIHx8ICEhIG1hdGVyaWFsLmVtaXNzaXZlTWFwIHx8ICEhIG1hdGVyaWFsLnJvdWdobmVzc01hcCB8fCAhISBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgfHwgISEgbWF0ZXJpYWwuY2xlYXJjb2F0TWFwIHx8ICEhIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCB8fCAhISBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAgfHwgISEgbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwIHx8ICEhIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCB8fCAhISBtYXRlcmlhbC50aGlja25lc3NNYXAgfHwgISEgbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXAgfHwgISEgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCB8fCAhISBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwIHx8ICEhIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwLFxuXHRcdFx0dXZzVmVydGV4T25seTogISAoICEhIG1hdGVyaWFsLm1hcCB8fCAhISBtYXRlcmlhbC5idW1wTWFwIHx8ICEhIG1hdGVyaWFsLm5vcm1hbE1hcCB8fCAhISBtYXRlcmlhbC5zcGVjdWxhck1hcCB8fCAhISBtYXRlcmlhbC5hbHBoYU1hcCB8fCAhISBtYXRlcmlhbC5lbWlzc2l2ZU1hcCB8fCAhISBtYXRlcmlhbC5yb3VnaG5lc3NNYXAgfHwgISEgbWF0ZXJpYWwubWV0YWxuZXNzTWFwIHx8ICEhIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCB8fCBtYXRlcmlhbC50cmFuc21pc3Npb24gPiAwIHx8ICEhIG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcCB8fCAhISBtYXRlcmlhbC50aGlja25lc3NNYXAgfHwgISEgbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXAgfHwgISEgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCB8fCBtYXRlcmlhbC5zaGVlbiA+IDAgfHwgISEgbWF0ZXJpYWwuc2hlZW5Db2xvck1hcCB8fCAhISBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCApICYmICEhIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCxcblxuXHRcdFx0Zm9nOiAhISBmb2csXG5cdFx0XHR1c2VGb2c6IG1hdGVyaWFsLmZvZyxcblx0XHRcdGZvZ0V4cDI6ICggZm9nICYmIGZvZy5pc0ZvZ0V4cDIgKSxcblxuXHRcdFx0ZmxhdFNoYWRpbmc6ICEhIG1hdGVyaWFsLmZsYXRTaGFkaW5nLFxuXG5cdFx0XHRzaXplQXR0ZW51YXRpb246IG1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbixcblx0XHRcdGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIsXG5cblx0XHRcdHNraW5uaW5nOiBvYmplY3QuaXNTa2lubmVkTWVzaCA9PT0gdHJ1ZSAmJiBtYXhCb25lcyA+IDAsXG5cdFx0XHRtYXhCb25lczogbWF4Qm9uZXMsXG5cdFx0XHR1c2VWZXJ0ZXhUZXh0dXJlOiBmbG9hdFZlcnRleFRleHR1cmVzLFxuXG5cdFx0XHRtb3JwaFRhcmdldHM6ICEhIG9iamVjdC5nZW9tZXRyeSAmJiAhISBvYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFxuXHRcdFx0bW9ycGhOb3JtYWxzOiAhISBvYmplY3QuZ2VvbWV0cnkgJiYgISEgb2JqZWN0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsXG5cdFx0XHRtb3JwaFRhcmdldHNDb3VudDogKCAhISBvYmplY3QuZ2VvbWV0cnkgJiYgISEgb2JqZWN0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiApID8gb2JqZWN0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGggOiAwLFxuXG5cdFx0XHRudW1EaXJMaWdodHM6IGxpZ2h0cy5kaXJlY3Rpb25hbC5sZW5ndGgsXG5cdFx0XHRudW1Qb2ludExpZ2h0czogbGlnaHRzLnBvaW50Lmxlbmd0aCxcblx0XHRcdG51bVNwb3RMaWdodHM6IGxpZ2h0cy5zcG90Lmxlbmd0aCxcblx0XHRcdG51bVJlY3RBcmVhTGlnaHRzOiBsaWdodHMucmVjdEFyZWEubGVuZ3RoLFxuXHRcdFx0bnVtSGVtaUxpZ2h0czogbGlnaHRzLmhlbWkubGVuZ3RoLFxuXG5cdFx0XHRudW1EaXJMaWdodFNoYWRvd3M6IGxpZ2h0cy5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsXG5cdFx0XHRudW1Qb2ludExpZ2h0U2hhZG93czogbGlnaHRzLnBvaW50U2hhZG93TWFwLmxlbmd0aCxcblx0XHRcdG51bVNwb3RMaWdodFNoYWRvd3M6IGxpZ2h0cy5zcG90U2hhZG93TWFwLmxlbmd0aCxcblxuXHRcdFx0bnVtQ2xpcHBpbmdQbGFuZXM6IGNsaXBwaW5nLm51bVBsYW5lcyxcblx0XHRcdG51bUNsaXBJbnRlcnNlY3Rpb246IGNsaXBwaW5nLm51bUludGVyc2VjdGlvbixcblxuXHRcdFx0ZGl0aGVyaW5nOiBtYXRlcmlhbC5kaXRoZXJpbmcsXG5cblx0XHRcdHNoYWRvd01hcEVuYWJsZWQ6IHJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkICYmIHNoYWRvd3MubGVuZ3RoID4gMCxcblx0XHRcdHNoYWRvd01hcFR5cGU6IHJlbmRlcmVyLnNoYWRvd01hcC50eXBlLFxuXG5cdFx0XHR0b25lTWFwcGluZzogbWF0ZXJpYWwudG9uZU1hcHBlZCA/IHJlbmRlcmVyLnRvbmVNYXBwaW5nIDogTm9Ub25lTWFwcGluZyxcblx0XHRcdHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzOiByZW5kZXJlci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxcblxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhOiBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEsXG5cblx0XHRcdGRvdWJsZVNpZGVkOiBtYXRlcmlhbC5zaWRlID09PSBEb3VibGVTaWRlLFxuXHRcdFx0ZmxpcFNpZGVkOiBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSxcblxuXHRcdFx0ZGVwdGhQYWNraW5nOiAoIG1hdGVyaWFsLmRlcHRoUGFja2luZyAhPT0gdW5kZWZpbmVkICkgPyBtYXRlcmlhbC5kZXB0aFBhY2tpbmcgOiBmYWxzZSxcblxuXHRcdFx0aW5kZXgwQXR0cmlidXRlTmFtZTogbWF0ZXJpYWwuaW5kZXgwQXR0cmlidXRlTmFtZSxcblxuXHRcdFx0ZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6IG1hdGVyaWFsLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWwuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxcblx0XHRcdGV4dGVuc2lvbkZyYWdEZXB0aDogbWF0ZXJpYWwuZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbC5leHRlbnNpb25zLmZyYWdEZXB0aCxcblx0XHRcdGV4dGVuc2lvbkRyYXdCdWZmZXJzOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsXG5cdFx0XHRleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOiBtYXRlcmlhbC5leHRlbnNpb25zICYmIG1hdGVyaWFsLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxcblxuXHRcdFx0cmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCAnRVhUX2ZyYWdfZGVwdGgnICksXG5cdFx0XHRyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOiBpc1dlYkdMMiB8fCBleHRlbnNpb25zLmhhcyggJ1dFQkdMX2RyYXdfYnVmZmVycycgKSxcblx0XHRcdHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDogaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoICdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJyApLFxuXG5cdFx0XHRjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6IG1hdGVyaWFsLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpXG5cblx0XHR9O1xuXG5cdFx0cmV0dXJuIHBhcmFtZXRlcnM7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFByb2dyYW1DYWNoZUtleSggcGFyYW1ldGVycyApIHtcblxuXHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMuc2hhZGVySUQgKSB7XG5cblx0XHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuc2hhZGVySUQgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuY3VzdG9tVmVydGV4U2hhZGVySUQgKTtcblx0XHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmRlZmluZXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggY29uc3QgbmFtZSBpbiBwYXJhbWV0ZXJzLmRlZmluZXMgKSB7XG5cblx0XHRcdFx0YXJyYXkucHVzaCggbmFtZSApO1xuXHRcdFx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLmRlZmluZXNbIG5hbWUgXSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHBhcmFtZXRlcnMuaXNSYXdTaGFkZXJNYXRlcmlhbCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGdldFByb2dyYW1DYWNoZUtleVBhcmFtZXRlcnMoIGFycmF5LCBwYXJhbWV0ZXJzICk7XG5cdFx0XHRnZXRQcm9ncmFtQ2FjaGVLZXlCb29sZWFucyggYXJyYXksIHBhcmFtZXRlcnMgKTtcblx0XHRcdGFycmF5LnB1c2goIHJlbmRlcmVyLm91dHB1dEVuY29kaW5nICk7XG5cblx0XHR9XG5cblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLmN1c3RvbVByb2dyYW1DYWNoZUtleSApO1xuXG5cdFx0cmV0dXJuIGFycmF5LmpvaW4oKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5UGFyYW1ldGVycyggYXJyYXksIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLnByZWNpc2lvbiApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMub3V0cHV0RW5jb2RpbmcgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLmVudk1hcE1vZGUgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLmNvbWJpbmUgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLnZlcnRleFV2cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuZm9nRXhwMiApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMuc2l6ZUF0dGVudWF0aW9uICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5tYXhCb25lcyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzQ291bnQgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bURpckxpZ2h0cyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtUG9pbnRMaWdodHMgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bVNwb3RMaWdodHMgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bUhlbWlMaWdodHMgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bVJlY3RBcmVhTGlnaHRzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5udW1EaXJMaWdodFNoYWRvd3MgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bVBvaW50TGlnaHRTaGFkb3dzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5udW1TcG90TGlnaHRTaGFkb3dzICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy5zaGFkb3dNYXBUeXBlICk7XG5cdFx0YXJyYXkucHVzaCggcGFyYW1ldGVycy50b25lTWFwcGluZyApO1xuXHRcdGFycmF5LnB1c2goIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMgKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLm51bUNsaXBJbnRlcnNlY3Rpb24gKTtcblx0XHRhcnJheS5wdXNoKCBwYXJhbWV0ZXJzLmFscGhhV3JpdGUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbUNhY2hlS2V5Qm9vbGVhbnMoIGFycmF5LCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0X3Byb2dyYW1MYXllcnMuZGlzYWJsZUFsbCgpO1xuXG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmlzV2ViR0wyIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5pbnN0YW5jaW5nIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMiApO1xuXHRcdGlmICggcGFyYW1ldGVycy5pbnN0YW5jaW5nQ29sb3IgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAzICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLm1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDQgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubWF0Y2FwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5lbnZNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA2ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmVudk1hcEN1YmVVViApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDcgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubGlnaHRNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA4ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmFvTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggOSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5lbWlzc2l2ZU1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEwICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmJ1bXBNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5ub3JtYWxNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMiApO1xuXHRcdGlmICggcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDEzICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE0ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmNsZWFyY29hdCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE1ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmNsZWFyY29hdE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE2ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmNsZWFyY29hdFJvdWdobmVzc01hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE3ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmNsZWFyY29hdE5vcm1hbE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE4ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmRpc3BsYWNlbWVudE1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE5ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNwZWN1bGFyTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjAgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMucm91Z2huZXNzTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjEgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMubWV0YWxuZXNzTWFwIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjIgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZ3JhZGllbnRNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyMyApO1xuXHRcdGlmICggcGFyYW1ldGVycy5hbHBoYU1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDI0ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmFscGhhVGVzdCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDI1ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnZlcnRleENvbG9ycyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDI2ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnZlcnRleEFscGhhcyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDI3ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnZlcnRleFV2cyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDI4ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnZlcnRleFRhbmdlbnRzIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMjkgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMudXZzVmVydGV4T25seSApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDMwICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmZvZyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDMxICk7XG5cblx0XHRhcnJheS5wdXNoKCBfcHJvZ3JhbUxheWVycy5tYXNrICk7XG5cdFx0X3Byb2dyYW1MYXllcnMuZGlzYWJsZUFsbCgpO1xuXG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnVzZUZvZyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDAgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNraW5uaW5nIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggMyApO1xuXHRcdGlmICggcGFyYW1ldGVycy51c2VWZXJ0ZXhUZXh0dXJlIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5tb3JwaFRhcmdldHMgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCA1ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLm1vcnBoTm9ybWFscyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDYgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggNyApO1xuXHRcdGlmICggcGFyYW1ldGVycy5zaGFkb3dNYXBFbmFibGVkIClcblx0XHRcdF9wcm9ncmFtTGF5ZXJzLmVuYWJsZSggOCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDkgKTtcblx0XHRpZiAoIHBhcmFtZXRlcnMuZG91YmxlU2lkZWQgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5mbGlwU2lkZWQgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMSApO1xuXHRcdGlmICggcGFyYW1ldGVycy5kZXB0aFBhY2tpbmcgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMiApO1xuXHRcdGlmICggcGFyYW1ldGVycy5kaXRoZXJpbmcgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxMyApO1xuXHRcdGlmICggcGFyYW1ldGVycy5zcGVjdWxhckludGVuc2l0eU1hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE0ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNwZWN1bGFyQ29sb3JNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxNSApO1xuXHRcdGlmICggcGFyYW1ldGVycy50cmFuc21pc3Npb24gKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxNiApO1xuXHRcdGlmICggcGFyYW1ldGVycy50cmFuc21pc3Npb25NYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxNyApO1xuXHRcdGlmICggcGFyYW1ldGVycy50aGlja25lc3NNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAxOCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5zaGVlbiApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDE5ICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLnNoZWVuQ29sb3JNYXAgKVxuXHRcdFx0X3Byb2dyYW1MYXllcnMuZW5hYmxlKCAyMCApO1xuXHRcdGlmICggcGFyYW1ldGVycy5zaGVlblJvdWdobmVzc01hcCApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDIxICk7XG5cdFx0aWYgKCBwYXJhbWV0ZXJzLmRlY29kZVZpZGVvVGV4dHVyZSApXG5cdFx0XHRfcHJvZ3JhbUxheWVycy5lbmFibGUoIDIyICk7XG5cblx0XHRhcnJheS5wdXNoKCBfcHJvZ3JhbUxheWVycy5tYXNrICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFVuaWZvcm1zKCBtYXRlcmlhbCApIHtcblxuXHRcdGNvbnN0IHNoYWRlcklEID0gc2hhZGVySURzWyBtYXRlcmlhbC50eXBlIF07XG5cdFx0bGV0IHVuaWZvcm1zO1xuXG5cdFx0aWYgKCBzaGFkZXJJRCApIHtcblxuXHRcdFx0Y29uc3Qgc2hhZGVyID0gU2hhZGVyTGliWyBzaGFkZXJJRCBdO1xuXHRcdFx0dW5pZm9ybXMgPSBVbmlmb3Jtc1V0aWxzLmNsb25lKCBzaGFkZXIudW5pZm9ybXMgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHVuaWZvcm1zID0gbWF0ZXJpYWwudW5pZm9ybXM7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdW5pZm9ybXM7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGFjcXVpcmVQcm9ncmFtKCBwYXJhbWV0ZXJzLCBjYWNoZUtleSApIHtcblxuXHRcdGxldCBwcm9ncmFtO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY29kZSBoYXMgYmVlbiBhbHJlYWR5IGNvbXBpbGVkXG5cdFx0Zm9yICggbGV0IHAgPSAwLCBwbCA9IHByb2dyYW1zLmxlbmd0aDsgcCA8IHBsOyBwICsrICkge1xuXG5cdFx0XHRjb25zdCBwcmVleGlzdGluZ1Byb2dyYW0gPSBwcm9ncmFtc1sgcCBdO1xuXG5cdFx0XHRpZiAoIHByZWV4aXN0aW5nUHJvZ3JhbS5jYWNoZUtleSA9PT0gY2FjaGVLZXkgKSB7XG5cblx0XHRcdFx0cHJvZ3JhbSA9IHByZWV4aXN0aW5nUHJvZ3JhbTtcblx0XHRcdFx0KysgcHJvZ3JhbS51c2VkVGltZXM7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggcHJvZ3JhbSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRwcm9ncmFtID0gbmV3IFdlYkdMUHJvZ3JhbSggcmVuZGVyZXIsIGNhY2hlS2V5LCBwYXJhbWV0ZXJzLCBiaW5kaW5nU3RhdGVzICk7XG5cdFx0XHRwcm9ncmFtcy5wdXNoKCBwcm9ncmFtICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvZ3JhbTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVsZWFzZVByb2dyYW0oIHByb2dyYW0gKSB7XG5cblx0XHRpZiAoIC0tIHByb2dyYW0udXNlZFRpbWVzID09PSAwICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZnJvbSB1bm9yZGVyZWQgc2V0XG5cdFx0XHRjb25zdCBpID0gcHJvZ3JhbXMuaW5kZXhPZiggcHJvZ3JhbSApO1xuXHRcdFx0cHJvZ3JhbXNbIGkgXSA9IHByb2dyYW1zWyBwcm9ncmFtcy5sZW5ndGggLSAxIF07XG5cdFx0XHRwcm9ncmFtcy5wb3AoKTtcblxuXHRcdFx0Ly8gRnJlZSBXZWJHTCByZXNvdXJjZXNcblx0XHRcdHByb2dyYW0uZGVzdHJveSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWxlYXNlU2hhZGVyQ2FjaGUoIG1hdGVyaWFsICkge1xuXG5cdFx0X2N1c3RvbVNoYWRlcnMucmVtb3ZlKCBtYXRlcmlhbCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0X2N1c3RvbVNoYWRlcnMuZGlzcG9zZSgpO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldFBhcmFtZXRlcnM6IGdldFBhcmFtZXRlcnMsXG5cdFx0Z2V0UHJvZ3JhbUNhY2hlS2V5OiBnZXRQcm9ncmFtQ2FjaGVLZXksXG5cdFx0Z2V0VW5pZm9ybXM6IGdldFVuaWZvcm1zLFxuXHRcdGFjcXVpcmVQcm9ncmFtOiBhY3F1aXJlUHJvZ3JhbSxcblx0XHRyZWxlYXNlUHJvZ3JhbTogcmVsZWFzZVByb2dyYW0sXG5cdFx0cmVsZWFzZVNoYWRlckNhY2hlOiByZWxlYXNlU2hhZGVyQ2FjaGUsXG5cdFx0Ly8gRXhwb3NlZCBmb3IgcmVzb3VyY2UgbW9uaXRvcmluZyAmIGVycm9yIGZlZWRiYWNrIHZpYSByZW5kZXJlci5pbmZvOlxuXHRcdHByb2dyYW1zOiBwcm9ncmFtcyxcblx0XHRkaXNwb3NlOiBkaXNwb3NlXG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xQcm9wZXJ0aWVzKCkge1xuXG5cdGxldCBwcm9wZXJ0aWVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBnZXQoIG9iamVjdCApIHtcblxuXHRcdGxldCBtYXAgPSBwcm9wZXJ0aWVzLmdldCggb2JqZWN0ICk7XG5cblx0XHRpZiAoIG1hcCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRtYXAgPSB7fTtcblx0XHRcdHByb3BlcnRpZXMuc2V0KCBvYmplY3QsIG1hcCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hcDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVtb3ZlKCBvYmplY3QgKSB7XG5cblx0XHRwcm9wZXJ0aWVzLmRlbGV0ZSggb2JqZWN0ICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZSggb2JqZWN0LCBrZXksIHZhbHVlICkge1xuXG5cdFx0cHJvcGVydGllcy5nZXQoIG9iamVjdCApWyBrZXkgXSA9IHZhbHVlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0cHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0cmVtb3ZlOiByZW1vdmUsXG5cdFx0dXBkYXRlOiB1cGRhdGUsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIHBhaW50ZXJTb3J0U3RhYmxlKCBhLCBiICkge1xuXG5cdGlmICggYS5ncm91cE9yZGVyICE9PSBiLmdyb3VwT3JkZXIgKSB7XG5cblx0XHRyZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5ncm91cE9yZGVyO1xuXG5cdH0gZWxzZSBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3JkZXIgKSB7XG5cblx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cblx0fSBlbHNlIGlmICggYS5tYXRlcmlhbC5pZCAhPT0gYi5tYXRlcmlhbC5pZCApIHtcblxuXHRcdHJldHVybiBhLm1hdGVyaWFsLmlkIC0gYi5tYXRlcmlhbC5pZDtcblxuXHR9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHtcblxuXHRcdHJldHVybiBhLnogLSBiLno7XG5cblx0fSBlbHNlIHtcblxuXHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlKCBhLCBiICkge1xuXG5cdGlmICggYS5ncm91cE9yZGVyICE9PSBiLmdyb3VwT3JkZXIgKSB7XG5cblx0XHRyZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5ncm91cE9yZGVyO1xuXG5cdH0gZWxzZSBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3JkZXIgKSB7XG5cblx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cblx0fSBlbHNlIGlmICggYS56ICE9PSBiLnogKSB7XG5cblx0XHRyZXR1cm4gYi56IC0gYS56O1xuXG5cdH0gZWxzZSB7XG5cblx0XHRyZXR1cm4gYS5pZCAtIGIuaWQ7XG5cblx0fVxuXG59XG5cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJMaXN0KCkge1xuXG5cdGNvbnN0IHJlbmRlckl0ZW1zID0gW107XG5cdGxldCByZW5kZXJJdGVtc0luZGV4ID0gMDtcblxuXHRjb25zdCBvcGFxdWUgPSBbXTtcblx0Y29uc3QgdHJhbnNtaXNzaXZlID0gW107XG5cdGNvbnN0IHRyYW5zcGFyZW50ID0gW107XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblxuXHRcdHJlbmRlckl0ZW1zSW5kZXggPSAwO1xuXG5cdFx0b3BhcXVlLmxlbmd0aCA9IDA7XG5cdFx0dHJhbnNtaXNzaXZlLmxlbmd0aCA9IDA7XG5cdFx0dHJhbnNwYXJlbnQubGVuZ3RoID0gMDtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dFJlbmRlckl0ZW0oIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCApIHtcblxuXHRcdGxldCByZW5kZXJJdGVtID0gcmVuZGVySXRlbXNbIHJlbmRlckl0ZW1zSW5kZXggXTtcblxuXHRcdGlmICggcmVuZGVySXRlbSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRyZW5kZXJJdGVtID0ge1xuXHRcdFx0XHRpZDogb2JqZWN0LmlkLFxuXHRcdFx0XHRvYmplY3Q6IG9iamVjdCxcblx0XHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5LFxuXHRcdFx0XHRtYXRlcmlhbDogbWF0ZXJpYWwsXG5cdFx0XHRcdGdyb3VwT3JkZXI6IGdyb3VwT3JkZXIsXG5cdFx0XHRcdHJlbmRlck9yZGVyOiBvYmplY3QucmVuZGVyT3JkZXIsXG5cdFx0XHRcdHo6IHosXG5cdFx0XHRcdGdyb3VwOiBncm91cFxuXHRcdFx0fTtcblxuXHRcdFx0cmVuZGVySXRlbXNbIHJlbmRlckl0ZW1zSW5kZXggXSA9IHJlbmRlckl0ZW07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZW5kZXJJdGVtLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0cmVuZGVySXRlbS5vYmplY3QgPSBvYmplY3Q7XG5cdFx0XHRyZW5kZXJJdGVtLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0XHRyZW5kZXJJdGVtLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwT3JkZXIgPSBncm91cE9yZGVyO1xuXHRcdFx0cmVuZGVySXRlbS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblx0XHRcdHJlbmRlckl0ZW0ueiA9IHo7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwID0gZ3JvdXA7XG5cblx0XHR9XG5cblx0XHRyZW5kZXJJdGVtc0luZGV4ICsrO1xuXG5cdFx0cmV0dXJuIHJlbmRlckl0ZW07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2goIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCApIHtcblxuXHRcdGNvbnN0IHJlbmRlckl0ZW0gPSBnZXROZXh0UmVuZGVySXRlbSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAuMCApIHtcblxuXHRcdFx0dHJhbnNtaXNzaXZlLnB1c2goIHJlbmRlckl0ZW0gKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlICkge1xuXG5cdFx0XHR0cmFuc3BhcmVudC5wdXNoKCByZW5kZXJJdGVtICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRvcGFxdWUucHVzaCggcmVuZGVySXRlbSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB1bnNoaWZ0KCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgeiwgZ3JvdXAgKSB7XG5cblx0XHRjb25zdCByZW5kZXJJdGVtID0gZ2V0TmV4dFJlbmRlckl0ZW0oIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCB6LCBncm91cCApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC50cmFuc21pc3Npb24gPiAwLjAgKSB7XG5cblx0XHRcdHRyYW5zbWlzc2l2ZS51bnNoaWZ0KCByZW5kZXJJdGVtICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC50cmFuc3BhcmVudCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dHJhbnNwYXJlbnQudW5zaGlmdCggcmVuZGVySXRlbSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0b3BhcXVlLnVuc2hpZnQoIHJlbmRlckl0ZW0gKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc29ydCggY3VzdG9tT3BhcXVlU29ydCwgY3VzdG9tVHJhbnNwYXJlbnRTb3J0ICkge1xuXG5cdFx0aWYgKCBvcGFxdWUubGVuZ3RoID4gMSApIG9wYXF1ZS5zb3J0KCBjdXN0b21PcGFxdWVTb3J0IHx8IHBhaW50ZXJTb3J0U3RhYmxlICk7XG5cdFx0aWYgKCB0cmFuc21pc3NpdmUubGVuZ3RoID4gMSApIHRyYW5zbWlzc2l2ZS5zb3J0KCBjdXN0b21UcmFuc3BhcmVudFNvcnQgfHwgcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlICk7XG5cdFx0aWYgKCB0cmFuc3BhcmVudC5sZW5ndGggPiAxICkgdHJhbnNwYXJlbnQuc29ydCggY3VzdG9tVHJhbnNwYXJlbnRTb3J0IHx8IHJldmVyc2VQYWludGVyU29ydFN0YWJsZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBmaW5pc2goKSB7XG5cblx0XHQvLyBDbGVhciByZWZlcmVuY2VzIGZyb20gaW5hY3RpdmUgcmVuZGVySXRlbXMgaW4gdGhlIGxpc3RcblxuXHRcdGZvciAoIGxldCBpID0gcmVuZGVySXRlbXNJbmRleCwgaWwgPSByZW5kZXJJdGVtcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcmVuZGVySXRlbSA9IHJlbmRlckl0ZW1zWyBpIF07XG5cblx0XHRcdGlmICggcmVuZGVySXRlbS5pZCA9PT0gbnVsbCApIGJyZWFrO1xuXG5cdFx0XHRyZW5kZXJJdGVtLmlkID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0ub2JqZWN0ID0gbnVsbDtcblx0XHRcdHJlbmRlckl0ZW0uZ2VvbWV0cnkgPSBudWxsO1xuXHRcdFx0cmVuZGVySXRlbS5tYXRlcmlhbCA9IG51bGw7XG5cdFx0XHRyZW5kZXJJdGVtLmdyb3VwID0gbnVsbDtcblxuXHRcdH1cblxuXHR9XG5cblx0cmV0dXJuIHtcblxuXHRcdG9wYXF1ZTogb3BhcXVlLFxuXHRcdHRyYW5zbWlzc2l2ZTogdHJhbnNtaXNzaXZlLFxuXHRcdHRyYW5zcGFyZW50OiB0cmFuc3BhcmVudCxcblxuXHRcdGluaXQ6IGluaXQsXG5cdFx0cHVzaDogcHVzaCxcblx0XHR1bnNoaWZ0OiB1bnNoaWZ0LFxuXHRcdGZpbmlzaDogZmluaXNoLFxuXG5cdFx0c29ydDogc29ydFxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdHMoKSB7XG5cblx0bGV0IGxpc3RzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBnZXQoIHNjZW5lLCByZW5kZXJDYWxsRGVwdGggKSB7XG5cblx0XHRsZXQgbGlzdDtcblxuXHRcdGlmICggbGlzdHMuaGFzKCBzY2VuZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0bGlzdCA9IG5ldyBXZWJHTFJlbmRlckxpc3QoKTtcblx0XHRcdGxpc3RzLnNldCggc2NlbmUsIFsgbGlzdCBdICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIHJlbmRlckNhbGxEZXB0aCA+PSBsaXN0cy5nZXQoIHNjZW5lICkubGVuZ3RoICkge1xuXG5cdFx0XHRcdGxpc3QgPSBuZXcgV2ViR0xSZW5kZXJMaXN0KCk7XG5cdFx0XHRcdGxpc3RzLmdldCggc2NlbmUgKS5wdXNoKCBsaXN0ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0bGlzdCA9IGxpc3RzLmdldCggc2NlbmUgKVsgcmVuZGVyQ2FsbERlcHRoIF07XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBsaXN0O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNwb3NlKCkge1xuXG5cdFx0bGlzdHMgPSBuZXcgV2Vha01hcCgpO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldDogZ2V0LFxuXHRcdGRpc3Bvc2U6IGRpc3Bvc2Vcblx0fTtcblxufVxuXG5mdW5jdGlvbiBVbmlmb3Jtc0NhY2hlKCkge1xuXG5cdGNvbnN0IGxpZ2h0cyA9IHt9O1xuXG5cdHJldHVybiB7XG5cblx0XHRnZXQ6IGZ1bmN0aW9uICggbGlnaHQgKSB7XG5cblx0XHRcdGlmICggbGlnaHRzWyBsaWdodC5pZCBdICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGxpZ2h0c1sgbGlnaHQuaWQgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdW5pZm9ybXM7XG5cblx0XHRcdHN3aXRjaCAoIGxpZ2h0LnR5cGUgKSB7XG5cblx0XHRcdFx0Y2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1Nwb3RMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKSxcblx0XHRcdFx0XHRcdGRpc3RhbmNlOiAwLFxuXHRcdFx0XHRcdFx0Y29uZUNvczogMCxcblx0XHRcdFx0XHRcdHBlbnVtYnJhQ29zOiAwLFxuXHRcdFx0XHRcdFx0ZGVjYXk6IDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1BvaW50TGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKCksXG5cdFx0XHRcdFx0XHRkaXN0YW5jZTogMCxcblx0XHRcdFx0XHRcdGRlY2F5OiAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdIZW1pc3BoZXJlTGlnaHQnOlxuXHRcdFx0XHRcdHVuaWZvcm1zID0ge1xuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0c2t5Q29sb3I6IG5ldyBDb2xvcigpLFxuXHRcdFx0XHRcdFx0Z3JvdW5kQ29sb3I6IG5ldyBDb2xvcigpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdSZWN0QXJlYUxpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoKSxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0aGFsZldpZHRoOiBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRcdFx0aGFsZkhlaWdodDogbmV3IFZlY3RvcjMoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0bGlnaHRzWyBsaWdodC5pZCBdID0gdW5pZm9ybXM7XG5cblx0XHRcdHJldHVybiB1bmlmb3JtcztcblxuXHRcdH1cblxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFNoYWRvd1VuaWZvcm1zQ2FjaGUoKSB7XG5cblx0Y29uc3QgbGlnaHRzID0ge307XG5cblx0cmV0dXJuIHtcblxuXHRcdGdldDogZnVuY3Rpb24gKCBsaWdodCApIHtcblxuXHRcdFx0aWYgKCBsaWdodHNbIGxpZ2h0LmlkIF0gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gbGlnaHRzWyBsaWdodC5pZCBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdGxldCB1bmlmb3JtcztcblxuXHRcdFx0c3dpdGNoICggbGlnaHQudHlwZSApIHtcblxuXHRcdFx0XHRjYXNlICdEaXJlY3Rpb25hbExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHNoYWRvd0JpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93UmFkaXVzOiAxLFxuXHRcdFx0XHRcdFx0c2hhZG93TWFwU2l6ZTogbmV3IFZlY3RvcjIoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU3BvdExpZ2h0Jzpcblx0XHRcdFx0XHR1bmlmb3JtcyA9IHtcblx0XHRcdFx0XHRcdHNoYWRvd0JpYXM6IDAsXG5cdFx0XHRcdFx0XHRzaGFkb3dOb3JtYWxCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93UmFkaXVzOiAxLFxuXHRcdFx0XHRcdFx0c2hhZG93TWFwU2l6ZTogbmV3IFZlY3RvcjIoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnUG9pbnRMaWdodCc6XG5cdFx0XHRcdFx0dW5pZm9ybXMgPSB7XG5cdFx0XHRcdFx0XHRzaGFkb3dCaWFzOiAwLFxuXHRcdFx0XHRcdFx0c2hhZG93Tm9ybWFsQmlhczogMCxcblx0XHRcdFx0XHRcdHNoYWRvd1JhZGl1czogMSxcblx0XHRcdFx0XHRcdHNoYWRvd01hcFNpemU6IG5ldyBWZWN0b3IyKCksXG5cdFx0XHRcdFx0XHRzaGFkb3dDYW1lcmFOZWFyOiAxLFxuXHRcdFx0XHRcdFx0c2hhZG93Q2FtZXJhRmFyOiAxMDAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHQvLyBUT0RPIChhYmVsbmF0aW9uKTogc2V0IFJlY3RBcmVhTGlnaHQgc2hhZG93IHVuaWZvcm1zXG5cblx0XHRcdH1cblxuXHRcdFx0bGlnaHRzWyBsaWdodC5pZCBdID0gdW5pZm9ybXM7XG5cblx0XHRcdHJldHVybiB1bmlmb3JtcztcblxuXHRcdH1cblxuXHR9O1xuXG59XG5cblxuXG5sZXQgbmV4dFZlcnNpb24gPSAwO1xuXG5mdW5jdGlvbiBzaGFkb3dDYXN0aW5nTGlnaHRzRmlyc3QoIGxpZ2h0QSwgbGlnaHRCICkge1xuXG5cdHJldHVybiAoIGxpZ2h0Qi5jYXN0U2hhZG93ID8gMSA6IDAgKSAtICggbGlnaHRBLmNhc3RTaGFkb3cgPyAxIDogMCApO1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMTGlnaHRzKCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKSB7XG5cblx0Y29uc3QgY2FjaGUgPSBuZXcgVW5pZm9ybXNDYWNoZSgpO1xuXG5cdGNvbnN0IHNoYWRvd0NhY2hlID0gU2hhZG93VW5pZm9ybXNDYWNoZSgpO1xuXG5cdGNvbnN0IHN0YXRlID0ge1xuXG5cdFx0dmVyc2lvbjogMCxcblxuXHRcdGhhc2g6IHtcblx0XHRcdGRpcmVjdGlvbmFsTGVuZ3RoOiAtIDEsXG5cdFx0XHRwb2ludExlbmd0aDogLSAxLFxuXHRcdFx0c3BvdExlbmd0aDogLSAxLFxuXHRcdFx0cmVjdEFyZWFMZW5ndGg6IC0gMSxcblx0XHRcdGhlbWlMZW5ndGg6IC0gMSxcblxuXHRcdFx0bnVtRGlyZWN0aW9uYWxTaGFkb3dzOiAtIDEsXG5cdFx0XHRudW1Qb2ludFNoYWRvd3M6IC0gMSxcblx0XHRcdG51bVNwb3RTaGFkb3dzOiAtIDFcblx0XHR9LFxuXG5cdFx0YW1iaWVudDogWyAwLCAwLCAwIF0sXG5cdFx0cHJvYmU6IFtdLFxuXHRcdGRpcmVjdGlvbmFsOiBbXSxcblx0XHRkaXJlY3Rpb25hbFNoYWRvdzogW10sXG5cdFx0ZGlyZWN0aW9uYWxTaGFkb3dNYXA6IFtdLFxuXHRcdGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OiBbXSxcblx0XHRzcG90OiBbXSxcblx0XHRzcG90U2hhZG93OiBbXSxcblx0XHRzcG90U2hhZG93TWFwOiBbXSxcblx0XHRzcG90U2hhZG93TWF0cml4OiBbXSxcblx0XHRyZWN0QXJlYTogW10sXG5cdFx0cmVjdEFyZWFMVEMxOiBudWxsLFxuXHRcdHJlY3RBcmVhTFRDMjogbnVsbCxcblx0XHRwb2ludDogW10sXG5cdFx0cG9pbnRTaGFkb3c6IFtdLFxuXHRcdHBvaW50U2hhZG93TWFwOiBbXSxcblx0XHRwb2ludFNoYWRvd01hdHJpeDogW10sXG5cdFx0aGVtaTogW11cblxuXHR9O1xuXG5cdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSBzdGF0ZS5wcm9iZS5wdXNoKCBuZXcgVmVjdG9yMygpICk7XG5cblx0Y29uc3QgdmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG5cdGNvbnN0IG1hdHJpeDQgPSBuZXcgTWF0cml4NCgpO1xuXHRjb25zdCBtYXRyaXg0MiA9IG5ldyBNYXRyaXg0KCk7XG5cblx0ZnVuY3Rpb24gc2V0dXAoIGxpZ2h0cywgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgKSB7XG5cblx0XHRsZXQgciA9IDAsIGcgPSAwLCBiID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSBzdGF0ZS5wcm9iZVsgaSBdLnNldCggMCwgMCwgMCApO1xuXG5cdFx0bGV0IGRpcmVjdGlvbmFsTGVuZ3RoID0gMDtcblx0XHRsZXQgcG9pbnRMZW5ndGggPSAwO1xuXHRcdGxldCBzcG90TGVuZ3RoID0gMDtcblx0XHRsZXQgcmVjdEFyZWFMZW5ndGggPSAwO1xuXHRcdGxldCBoZW1pTGVuZ3RoID0gMDtcblxuXHRcdGxldCBudW1EaXJlY3Rpb25hbFNoYWRvd3MgPSAwO1xuXHRcdGxldCBudW1Qb2ludFNoYWRvd3MgPSAwO1xuXHRcdGxldCBudW1TcG90U2hhZG93cyA9IDA7XG5cblx0XHRsaWdodHMuc29ydCggc2hhZG93Q2FzdGluZ0xpZ2h0c0ZpcnN0ICk7XG5cblx0XHQvLyBhcnRpc3QtZnJpZW5kbHkgbGlnaHQgaW50ZW5zaXR5IHNjYWxpbmcgZmFjdG9yXG5cdFx0Y29uc3Qgc2NhbGVGYWN0b3IgPSAoIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzICE9PSB0cnVlICkgPyBNYXRoLlBJIDogMTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1sgaSBdO1xuXG5cdFx0XHRjb25zdCBjb2xvciA9IGxpZ2h0LmNvbG9yO1xuXHRcdFx0Y29uc3QgaW50ZW5zaXR5ID0gbGlnaHQuaW50ZW5zaXR5O1xuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBsaWdodC5kaXN0YW5jZTtcblxuXHRcdFx0Y29uc3Qgc2hhZG93TWFwID0gKCBsaWdodC5zaGFkb3cgJiYgbGlnaHQuc2hhZG93Lm1hcCApID8gbGlnaHQuc2hhZG93Lm1hcC50ZXh0dXJlIDogbnVsbDtcblxuXHRcdFx0aWYgKCBsaWdodC5pc0FtYmllbnRMaWdodCApIHtcblxuXHRcdFx0XHRyICs9IGNvbG9yLnIgKiBpbnRlbnNpdHkgKiBzY2FsZUZhY3Rvcjtcblx0XHRcdFx0ZyArPSBjb2xvci5nICogaW50ZW5zaXR5ICogc2NhbGVGYWN0b3I7XG5cdFx0XHRcdGIgKz0gY29sb3IuYiAqIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc0xpZ2h0UHJvYmUgKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgOTsgaiArKyApIHtcblxuXHRcdFx0XHRcdHN0YXRlLnByb2JlWyBqIF0uYWRkU2NhbGVkVmVjdG9yKCBsaWdodC5zaC5jb2VmZmljaWVudHNbIGogXSwgaW50ZW5zaXR5ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQoIGxpZ2h0ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuY29sb3IuY29weSggbGlnaHQuY29sb3IgKS5tdWx0aXBseVNjYWxhciggbGlnaHQuaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IgKTtcblxuXHRcdFx0XHRpZiAoIGxpZ2h0LmNhc3RTaGFkb3cgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XG5cblx0XHRcdFx0XHRjb25zdCBzaGFkb3dVbmlmb3JtcyA9IHNoYWRvd0NhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0JpYXMgPSBzaGFkb3cuYmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dOb3JtYWxCaWFzID0gc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93UmFkaXVzID0gc2hhZG93LnJhZGl1cztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dNYXBTaXplID0gc2hhZG93Lm1hcFNpemU7XG5cblx0XHRcdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd1sgZGlyZWN0aW9uYWxMZW5ndGggXSA9IHNoYWRvd1VuaWZvcm1zO1xuXHRcdFx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwWyBkaXJlY3Rpb25hbExlbmd0aCBdID0gc2hhZG93TWFwO1xuXHRcdFx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBkaXJlY3Rpb25hbExlbmd0aCBdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDtcblxuXHRcdFx0XHRcdG51bURpcmVjdGlvbmFsU2hhZG93cyArKztcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxbIGRpcmVjdGlvbmFsTGVuZ3RoIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0XHRkaXJlY3Rpb25hbExlbmd0aCArKztcblxuXHRcdFx0fSBlbHNlIGlmICggbGlnaHQuaXNTcG90TGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQoIGxpZ2h0ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkoIGNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpc3RhbmNlID0gZGlzdGFuY2U7XG5cblx0XHRcdFx0dW5pZm9ybXMuY29uZUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSApO1xuXHRcdFx0XHR1bmlmb3Jtcy5wZW51bWJyYUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSAqICggMSAtIGxpZ2h0LnBlbnVtYnJhICkgKTtcblx0XHRcdFx0dW5pZm9ybXMuZGVjYXkgPSBsaWdodC5kZWNheTtcblxuXHRcdFx0XHRpZiAoIGxpZ2h0LmNhc3RTaGFkb3cgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XG5cblx0XHRcdFx0XHRjb25zdCBzaGFkb3dVbmlmb3JtcyA9IHNoYWRvd0NhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0JpYXMgPSBzaGFkb3cuYmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dOb3JtYWxCaWFzID0gc2hhZG93Lm5vcm1hbEJpYXM7XG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93UmFkaXVzID0gc2hhZG93LnJhZGl1cztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dNYXBTaXplID0gc2hhZG93Lm1hcFNpemU7XG5cblx0XHRcdFx0XHRzdGF0ZS5zcG90U2hhZG93WyBzcG90TGVuZ3RoIF0gPSBzaGFkb3dVbmlmb3Jtcztcblx0XHRcdFx0XHRzdGF0ZS5zcG90U2hhZG93TWFwWyBzcG90TGVuZ3RoIF0gPSBzaGFkb3dNYXA7XG5cdFx0XHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hdHJpeFsgc3BvdExlbmd0aCBdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDtcblxuXHRcdFx0XHRcdG51bVNwb3RTaGFkb3dzICsrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS5zcG90WyBzcG90TGVuZ3RoIF0gPSB1bmlmb3JtcztcblxuXHRcdFx0XHRzcG90TGVuZ3RoICsrO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1JlY3RBcmVhTGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBjYWNoZS5nZXQoIGxpZ2h0ICk7XG5cblx0XHRcdFx0Ly8gKGEpIGludGVuc2l0eSBpcyB0aGUgdG90YWwgdmlzaWJsZSBsaWdodCBlbWl0dGVkXG5cdFx0XHRcdC8vdW5pZm9ybXMuY29sb3IuY29weSggY29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5IC8gKCBsaWdodC53aWR0aCAqIGxpZ2h0LmhlaWdodCAqIE1hdGguUEkgKSApO1xuXG5cdFx0XHRcdC8vIChiKSBpbnRlbnNpdHkgaXMgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGxpZ2h0XG5cdFx0XHRcdHVuaWZvcm1zLmNvbG9yLmNvcHkoIGNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZXaWR0aC5zZXQoIGxpZ2h0LndpZHRoICogMC41LCAwLjAsIDAuMCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmSGVpZ2h0LnNldCggMC4wLCBsaWdodC5oZWlnaHQgKiAwLjUsIDAuMCApO1xuXG5cdFx0XHRcdHN0YXRlLnJlY3RBcmVhWyByZWN0QXJlYUxlbmd0aCBdID0gdW5pZm9ybXM7XG5cblx0XHRcdFx0cmVjdEFyZWFMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IGNhY2hlLmdldCggbGlnaHQgKTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5jb2xvci5jb3B5KCBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBsaWdodC5pbnRlbnNpdHkgKiBzY2FsZUZhY3RvciApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNlO1xuXHRcdFx0XHR1bmlmb3Jtcy5kZWNheSA9IGxpZ2h0LmRlY2F5O1xuXG5cdFx0XHRcdGlmICggbGlnaHQuY2FzdFNoYWRvdyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblxuXHRcdFx0XHRcdGNvbnN0IHNoYWRvd1VuaWZvcm1zID0gc2hhZG93Q2FjaGUuZ2V0KCBsaWdodCApO1xuXG5cdFx0XHRcdFx0c2hhZG93VW5pZm9ybXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd05vcm1hbEJpYXMgPSBzaGFkb3cubm9ybWFsQmlhcztcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRcdFx0XHRzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYW1lcmFOZWFyID0gc2hhZG93LmNhbWVyYS5uZWFyO1xuXHRcdFx0XHRcdHNoYWRvd1VuaWZvcm1zLnNoYWRvd0NhbWVyYUZhciA9IHNoYWRvdy5jYW1lcmEuZmFyO1xuXG5cdFx0XHRcdFx0c3RhdGUucG9pbnRTaGFkb3dbIHBvaW50TGVuZ3RoIF0gPSBzaGFkb3dVbmlmb3Jtcztcblx0XHRcdFx0XHRzdGF0ZS5wb2ludFNoYWRvd01hcFsgcG9pbnRMZW5ndGggXSA9IHNoYWRvd01hcDtcblx0XHRcdFx0XHRzdGF0ZS5wb2ludFNoYWRvd01hdHJpeFsgcG9pbnRMZW5ndGggXSA9IGxpZ2h0LnNoYWRvdy5tYXRyaXg7XG5cblx0XHRcdFx0XHRudW1Qb2ludFNoYWRvd3MgKys7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnBvaW50WyBwb2ludExlbmd0aCBdID0gdW5pZm9ybXM7XG5cblx0XHRcdFx0cG9pbnRMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzSGVtaXNwaGVyZUxpZ2h0ICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gY2FjaGUuZ2V0KCBsaWdodCApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLnNreUNvbG9yLmNvcHkoIGxpZ2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yICk7XG5cdFx0XHRcdHVuaWZvcm1zLmdyb3VuZENvbG9yLmNvcHkoIGxpZ2h0Lmdyb3VuZENvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSAqIHNjYWxlRmFjdG9yICk7XG5cblx0XHRcdFx0c3RhdGUuaGVtaVsgaGVtaUxlbmd0aCBdID0gdW5pZm9ybXM7XG5cblx0XHRcdFx0aGVtaUxlbmd0aCArKztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCByZWN0QXJlYUxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyICkge1xuXG5cdFx0XHRcdC8vIFdlYkdMIDJcblxuXHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzEgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMTtcblx0XHRcdFx0c3RhdGUucmVjdEFyZWFMVEMyID0gVW5pZm9ybXNMaWIuTFRDX0ZMT0FUXzI7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gV2ViR0wgMVxuXG5cdFx0XHRcdGlmICggZXh0ZW5zaW9ucy5oYXMoICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzEgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMTtcblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfRkxPQVRfMjtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0c3RhdGUucmVjdEFyZWFMVEMxID0gVW5pZm9ybXNMaWIuTFRDX0hBTEZfMTtcblx0XHRcdFx0XHRzdGF0ZS5yZWN0QXJlYUxUQzIgPSBVbmlmb3Jtc0xpYi5MVENfSEFMRl8yO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuJyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0c3RhdGUuYW1iaWVudFsgMCBdID0gcjtcblx0XHRzdGF0ZS5hbWJpZW50WyAxIF0gPSBnO1xuXHRcdHN0YXRlLmFtYmllbnRbIDIgXSA9IGI7XG5cblx0XHRjb25zdCBoYXNoID0gc3RhdGUuaGFzaDtcblxuXHRcdGlmICggaGFzaC5kaXJlY3Rpb25hbExlbmd0aCAhPT0gZGlyZWN0aW9uYWxMZW5ndGggfHxcblx0XHRcdGhhc2gucG9pbnRMZW5ndGggIT09IHBvaW50TGVuZ3RoIHx8XG5cdFx0XHRoYXNoLnNwb3RMZW5ndGggIT09IHNwb3RMZW5ndGggfHxcblx0XHRcdGhhc2gucmVjdEFyZWFMZW5ndGggIT09IHJlY3RBcmVhTGVuZ3RoIHx8XG5cdFx0XHRoYXNoLmhlbWlMZW5ndGggIT09IGhlbWlMZW5ndGggfHxcblx0XHRcdGhhc2gubnVtRGlyZWN0aW9uYWxTaGFkb3dzICE9PSBudW1EaXJlY3Rpb25hbFNoYWRvd3MgfHxcblx0XHRcdGhhc2gubnVtUG9pbnRTaGFkb3dzICE9PSBudW1Qb2ludFNoYWRvd3MgfHxcblx0XHRcdGhhc2gubnVtU3BvdFNoYWRvd3MgIT09IG51bVNwb3RTaGFkb3dzICkge1xuXG5cdFx0XHRzdGF0ZS5kaXJlY3Rpb25hbC5sZW5ndGggPSBkaXJlY3Rpb25hbExlbmd0aDtcblx0XHRcdHN0YXRlLnNwb3QubGVuZ3RoID0gc3BvdExlbmd0aDtcblx0XHRcdHN0YXRlLnJlY3RBcmVhLmxlbmd0aCA9IHJlY3RBcmVhTGVuZ3RoO1xuXHRcdFx0c3RhdGUucG9pbnQubGVuZ3RoID0gcG9pbnRMZW5ndGg7XG5cdFx0XHRzdGF0ZS5oZW1pLmxlbmd0aCA9IGhlbWlMZW5ndGg7XG5cblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aCA9IG51bURpcmVjdGlvbmFsU2hhZG93cztcblx0XHRcdHN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCA9IG51bURpcmVjdGlvbmFsU2hhZG93cztcblx0XHRcdHN0YXRlLnBvaW50U2hhZG93Lmxlbmd0aCA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdHN0YXRlLnBvaW50U2hhZG93TWFwLmxlbmd0aCA9IG51bVBvaW50U2hhZG93cztcblx0XHRcdHN0YXRlLnNwb3RTaGFkb3cubGVuZ3RoID0gbnVtU3BvdFNoYWRvd3M7XG5cdFx0XHRzdGF0ZS5zcG90U2hhZG93TWFwLmxlbmd0aCA9IG51bVNwb3RTaGFkb3dzO1xuXHRcdFx0c3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0c3RhdGUucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoID0gbnVtUG9pbnRTaGFkb3dzO1xuXHRcdFx0c3RhdGUuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGggPSBudW1TcG90U2hhZG93cztcblxuXHRcdFx0aGFzaC5kaXJlY3Rpb25hbExlbmd0aCA9IGRpcmVjdGlvbmFsTGVuZ3RoO1xuXHRcdFx0aGFzaC5wb2ludExlbmd0aCA9IHBvaW50TGVuZ3RoO1xuXHRcdFx0aGFzaC5zcG90TGVuZ3RoID0gc3BvdExlbmd0aDtcblx0XHRcdGhhc2gucmVjdEFyZWFMZW5ndGggPSByZWN0QXJlYUxlbmd0aDtcblx0XHRcdGhhc2guaGVtaUxlbmd0aCA9IGhlbWlMZW5ndGg7XG5cblx0XHRcdGhhc2gubnVtRGlyZWN0aW9uYWxTaGFkb3dzID0gbnVtRGlyZWN0aW9uYWxTaGFkb3dzO1xuXHRcdFx0aGFzaC5udW1Qb2ludFNoYWRvd3MgPSBudW1Qb2ludFNoYWRvd3M7XG5cdFx0XHRoYXNoLm51bVNwb3RTaGFkb3dzID0gbnVtU3BvdFNoYWRvd3M7XG5cblx0XHRcdHN0YXRlLnZlcnNpb24gPSBuZXh0VmVyc2lvbiArKztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBWaWV3KCBsaWdodHMsIGNhbWVyYSApIHtcblxuXHRcdGxldCBkaXJlY3Rpb25hbExlbmd0aCA9IDA7XG5cdFx0bGV0IHBvaW50TGVuZ3RoID0gMDtcblx0XHRsZXQgc3BvdExlbmd0aCA9IDA7XG5cdFx0bGV0IHJlY3RBcmVhTGVuZ3RoID0gMDtcblx0XHRsZXQgaGVtaUxlbmd0aCA9IDA7XG5cblx0XHRjb25zdCB2aWV3TWF0cml4ID0gY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1sgaSBdO1xuXG5cdFx0XHRpZiAoIGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLmRpcmVjdGlvbmFsWyBkaXJlY3Rpb25hbExlbmd0aCBdO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdHZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50YXJnZXQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnN1YiggdmVjdG9yMyApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKCB2aWV3TWF0cml4ICk7XG5cblx0XHRcdFx0ZGlyZWN0aW9uYWxMZW5ndGggKys7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzU3BvdExpZ2h0ICkge1xuXG5cdFx0XHRcdGNvbnN0IHVuaWZvcm1zID0gc3RhdGUuc3BvdFsgc3BvdExlbmd0aCBdO1xuXG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dW5pZm9ybXMucG9zaXRpb24uYXBwbHlNYXRyaXg0KCB2aWV3TWF0cml4ICk7XG5cblx0XHRcdFx0dW5pZm9ybXMuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0dmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc3ViKCB2ZWN0b3IzICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oIHZpZXdNYXRyaXggKTtcblxuXHRcdFx0XHRzcG90TGVuZ3RoICsrO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1JlY3RBcmVhTGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5yZWN0QXJlYVsgcmVjdEFyZWFMZW5ndGggXTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCggdmlld01hdHJpeCApO1xuXG5cdFx0XHRcdC8vIGV4dHJhY3QgbG9jYWwgcm90YXRpb24gb2YgbGlnaHQgdG8gZGVyaXZlIHdpZHRoL2hlaWdodCBoYWxmIHZlY3RvcnNcblx0XHRcdFx0bWF0cml4NDIuaWRlbnRpdHkoKTtcblx0XHRcdFx0bWF0cml4NC5jb3B5KCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHRtYXRyaXg0LnByZW11bHRpcGx5KCB2aWV3TWF0cml4ICk7XG5cdFx0XHRcdG1hdHJpeDQyLmV4dHJhY3RSb3RhdGlvbiggbWF0cml4NCApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZXaWR0aC5zZXQoIGxpZ2h0LndpZHRoICogMC41LCAwLjAsIDAuMCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5oYWxmSGVpZ2h0LnNldCggMC4wLCBsaWdodC5oZWlnaHQgKiAwLjUsIDAuMCApO1xuXG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoIG1hdHJpeDQyICk7XG5cdFx0XHRcdHVuaWZvcm1zLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KCBtYXRyaXg0MiApO1xuXG5cdFx0XHRcdHJlY3RBcmVhTGVuZ3RoICsrO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1BvaW50TGlnaHQgKSB7XG5cblx0XHRcdFx0Y29uc3QgdW5pZm9ybXMgPSBzdGF0ZS5wb2ludFsgcG9pbnRMZW5ndGggXTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCggdmlld01hdHJpeCApO1xuXG5cdFx0XHRcdHBvaW50TGVuZ3RoICsrO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc0hlbWlzcGhlcmVMaWdodCApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtcyA9IHN0YXRlLmhlbWlbIGhlbWlMZW5ndGggXTtcblxuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKCB2aWV3TWF0cml4ICk7XG5cdFx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbi5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRoZW1pTGVuZ3RoICsrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2V0dXA6IHNldHVwLFxuXHRcdHNldHVwVmlldzogc2V0dXBWaWV3LFxuXHRcdHN0YXRlOiBzdGF0ZVxuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyU3RhdGUoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApIHtcblxuXHRjb25zdCBsaWdodHMgPSBuZXcgV2ViR0xMaWdodHMoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApO1xuXG5cdGNvbnN0IGxpZ2h0c0FycmF5ID0gW107XG5cdGNvbnN0IHNoYWRvd3NBcnJheSA9IFtdO1xuXG5cdGZ1bmN0aW9uIGluaXQoKSB7XG5cblx0XHRsaWdodHNBcnJheS5sZW5ndGggPSAwO1xuXHRcdHNoYWRvd3NBcnJheS5sZW5ndGggPSAwO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBwdXNoTGlnaHQoIGxpZ2h0ICkge1xuXG5cdFx0bGlnaHRzQXJyYXkucHVzaCggbGlnaHQgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaFNoYWRvdyggc2hhZG93TGlnaHQgKSB7XG5cblx0XHRzaGFkb3dzQXJyYXkucHVzaCggc2hhZG93TGlnaHQgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBMaWdodHMoIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzICkge1xuXG5cdFx0bGlnaHRzLnNldHVwKCBsaWdodHNBcnJheSwgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dXBMaWdodHNWaWV3KCBjYW1lcmEgKSB7XG5cblx0XHRsaWdodHMuc2V0dXBWaWV3KCBsaWdodHNBcnJheSwgY2FtZXJhICk7XG5cblx0fVxuXG5cdGNvbnN0IHN0YXRlID0ge1xuXHRcdGxpZ2h0c0FycmF5OiBsaWdodHNBcnJheSxcblx0XHRzaGFkb3dzQXJyYXk6IHNoYWRvd3NBcnJheSxcblxuXHRcdGxpZ2h0czogbGlnaHRzXG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpbml0OiBpbml0LFxuXHRcdHN0YXRlOiBzdGF0ZSxcblx0XHRzZXR1cExpZ2h0czogc2V0dXBMaWdodHMsXG5cdFx0c2V0dXBMaWdodHNWaWV3OiBzZXR1cExpZ2h0c1ZpZXcsXG5cblx0XHRwdXNoTGlnaHQ6IHB1c2hMaWdodCxcblx0XHRwdXNoU2hhZG93OiBwdXNoU2hhZG93XG5cdH07XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJTdGF0ZXMoIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApIHtcblxuXHRsZXQgcmVuZGVyU3RhdGVzID0gbmV3IFdlYWtNYXAoKTtcblxuXHRmdW5jdGlvbiBnZXQoIHNjZW5lLCByZW5kZXJDYWxsRGVwdGggPSAwICkge1xuXG5cdFx0bGV0IHJlbmRlclN0YXRlO1xuXG5cdFx0aWYgKCByZW5kZXJTdGF0ZXMuaGFzKCBzY2VuZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0cmVuZGVyU3RhdGUgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZSggZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICk7XG5cdFx0XHRyZW5kZXJTdGF0ZXMuc2V0KCBzY2VuZSwgWyByZW5kZXJTdGF0ZSBdICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIHJlbmRlckNhbGxEZXB0aCA+PSByZW5kZXJTdGF0ZXMuZ2V0KCBzY2VuZSApLmxlbmd0aCApIHtcblxuXHRcdFx0XHRyZW5kZXJTdGF0ZSA9IG5ldyBXZWJHTFJlbmRlclN0YXRlKCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKTtcblx0XHRcdFx0cmVuZGVyU3RhdGVzLmdldCggc2NlbmUgKS5wdXNoKCByZW5kZXJTdGF0ZSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVzLmdldCggc2NlbmUgKVsgcmVuZGVyQ2FsbERlcHRoIF07XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiByZW5kZXJTdGF0ZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZGlzcG9zZSgpIHtcblxuXHRcdHJlbmRlclN0YXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBnZXQsXG5cdFx0ZGlzcG9zZTogZGlzcG9zZVxuXHR9O1xuXG59XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PlxuICogfVxuICovXG5cbmNsYXNzIE1lc2hEZXB0aE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoRGVwdGhNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmRlcHRoUGFja2luZyA9IEJhc2ljRGVwdGhQYWNraW5nO1xuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXG5cdFx0dGhpcy5mb2cgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5kZXB0aFBhY2tpbmcgPSBzb3VyY2UuZGVwdGhQYWNraW5nO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5NZXNoRGVwdGhNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqXG4gKiAgcmVmZXJlbmNlUG9zaXRpb246IDxmbG9hdD4sXG4gKiAgbmVhckRpc3RhbmNlOiA8ZmxvYXQ+LFxuICogIGZhckRpc3RhbmNlOiA8ZmxvYXQ+LFxuICpcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PlxuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoRGlzdGFuY2VNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaERpc3RhbmNlTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5yZWZlcmVuY2VQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0dGhpcy5uZWFyRGlzdGFuY2UgPSAxO1xuXHRcdHRoaXMuZmFyRGlzdGFuY2UgPSAxMDAwO1xuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblxuXHRcdHRoaXMuZm9nID0gZmFsc2U7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSggc291cmNlLnJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdFx0dGhpcy5uZWFyRGlzdGFuY2UgPSBzb3VyY2UubmVhckRpc3RhbmNlO1xuXHRcdHRoaXMuZmFyRGlzdGFuY2UgPSBzb3VyY2UuZmFyRGlzdGFuY2U7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaERpc3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgPSB0cnVlO1xuXG5jb25zdCB2ZXJ0ZXggPSBcInZvaWQgbWFpbigpIHtcXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcXG59XCI7XG5cbmNvbnN0IGZyYWdtZW50ID0gXCJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG4jaW5jbHVkZSA8cGFja2luZz5cXG52b2lkIG1haW4oKSB7XFxuXFx0Y29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApO1xcblxcdGZsb2F0IG1lYW4gPSAwLjA7XFxuXFx0ZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wO1xcblxcdGZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTtcXG5cXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcXG5cXHRmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHtcXG5cXHRcXHRmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7XFxuXFx0XFx0I2lmZGVmIEhPUklaT05UQUxfUEFTU1xcblxcdFxcdFxcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcXG5cXHRcXHRcXHRtZWFuICs9IGRpc3RyaWJ1dGlvbi54O1xcblxcdFxcdFxcdHNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDtcXG5cXHRcXHQjZWxzZVxcblxcdFxcdFxcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcXG5cXHRcXHRcXHRtZWFuICs9IGRlcHRoO1xcblxcdFxcdFxcdHNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoO1xcblxcdFxcdCNlbmRpZlxcblxcdH1cXG5cXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XFxuXFx0c3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlcztcXG5cXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcXG5cXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xcbn1cIjtcblxuZnVuY3Rpb24gV2ViR0xTaGFkb3dNYXAoIF9yZW5kZXJlciwgX29iamVjdHMsIF9jYXBhYmlsaXRpZXMgKSB7XG5cblx0bGV0IF9mcnVzdHVtID0gbmV3IEZydXN0dW0oKTtcblxuXHRjb25zdCBfc2hhZG93TWFwU2l6ZSA9IG5ldyBWZWN0b3IyKCksXG5cdFx0X3ZpZXdwb3J0U2l6ZSA9IG5ldyBWZWN0b3IyKCksXG5cblx0XHRfdmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpLFxuXG5cdFx0X2RlcHRoTWF0ZXJpYWwgPSBuZXcgTWVzaERlcHRoTWF0ZXJpYWwoIHsgZGVwdGhQYWNraW5nOiBSR0JBRGVwdGhQYWNraW5nIH0gKSxcblx0XHRfZGlzdGFuY2VNYXRlcmlhbCA9IG5ldyBNZXNoRGlzdGFuY2VNYXRlcmlhbCgpLFxuXG5cdFx0X21hdGVyaWFsQ2FjaGUgPSB7fSxcblxuXHRcdF9tYXhUZXh0dXJlU2l6ZSA9IF9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemU7XG5cblx0Y29uc3Qgc2hhZG93U2lkZSA9IHsgMDogQmFja1NpZGUsIDE6IEZyb250U2lkZSwgMjogRG91YmxlU2lkZSB9O1xuXG5cdGNvbnN0IHNoYWRvd01hdGVyaWFsVmVydGljYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoIHtcblx0XHRkZWZpbmVzOiB7XG5cdFx0XHRWU01fU0FNUExFUzogOFxuXHRcdH0sXG5cdFx0dW5pZm9ybXM6IHtcblx0XHRcdHNoYWRvd19wYXNzOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRyZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigpIH0sXG5cdFx0XHRyYWRpdXM6IHsgdmFsdWU6IDQuMCB9XG5cdFx0fSxcblxuXHRcdHZlcnRleFNoYWRlcjogdmVydGV4LFxuXHRcdGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFxuXG5cdH0gKTtcblxuXHRjb25zdCBzaGFkb3dNYXRlcmlhbEhvcml6b250YWwgPSBzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLmNsb25lKCk7XG5cdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC5kZWZpbmVzLkhPUklaT05UQUxfUEFTUyA9IDE7XG5cblx0Y29uc3QgZnVsbFNjcmVlblRyaSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRmdWxsU2NyZWVuVHJpLnNldEF0dHJpYnV0ZShcblx0XHQncG9zaXRpb24nLFxuXHRcdG5ldyBCdWZmZXJBdHRyaWJ1dGUoXG5cdFx0XHRuZXcgRmxvYXQzMkFycmF5KCBbIC0gMSwgLSAxLCAwLjUsIDMsIC0gMSwgMC41LCAtIDEsIDMsIDAuNSBdICksXG5cdFx0XHQzXG5cdFx0KVxuXHQpO1xuXG5cdGNvbnN0IGZ1bGxTY3JlZW5NZXNoID0gbmV3IE1lc2goIGZ1bGxTY3JlZW5UcmksIHNoYWRvd01hdGVyaWFsVmVydGljYWwgKTtcblxuXHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cblx0dGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcblx0dGhpcy5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xuXG5cdHRoaXMudHlwZSA9IFBDRlNoYWRvd01hcDtcblxuXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uICggbGlnaHRzLCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblx0XHRpZiAoIHNjb3BlLmF1dG9VcGRhdGUgPT09IGZhbHNlICYmIHNjb3BlLm5lZWRzVXBkYXRlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGlmICggbGlnaHRzLmxlbmd0aCA9PT0gMCApIHJldHVybjtcblxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJUYXJnZXQgPSBfcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cdFx0Y29uc3QgYWN0aXZlQ3ViZUZhY2UgPSBfcmVuZGVyZXIuZ2V0QWN0aXZlQ3ViZUZhY2UoKTtcblx0XHRjb25zdCBhY3RpdmVNaXBtYXBMZXZlbCA9IF9yZW5kZXJlci5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpO1xuXG5cdFx0Y29uc3QgX3N0YXRlID0gX3JlbmRlcmVyLnN0YXRlO1xuXG5cdFx0Ly8gU2V0IEdMIHN0YXRlIGZvciBkZXB0aCBtYXAuXG5cdFx0X3N0YXRlLnNldEJsZW5kaW5nKCBOb0JsZW5kaW5nICk7XG5cdFx0X3N0YXRlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoIDEsIDEsIDEsIDEgKTtcblx0XHRfc3RhdGUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCB0cnVlICk7XG5cdFx0X3N0YXRlLnNldFNjaXNzb3JUZXN0KCBmYWxzZSApO1xuXG5cdFx0Ly8gcmVuZGVyIGRlcHRoIG1hcFxuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgbGlnaHQgPSBsaWdodHNbIGkgXTtcblx0XHRcdGNvbnN0IHNoYWRvdyA9IGxpZ2h0LnNoYWRvdztcblxuXHRcdFx0aWYgKCBzaGFkb3cgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFNoYWRvd01hcDonLCBsaWdodCwgJ2hhcyBubyBzaGFkb3cuJyApO1xuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNoYWRvdy5hdXRvVXBkYXRlID09PSBmYWxzZSAmJiBzaGFkb3cubmVlZHNVcGRhdGUgPT09IGZhbHNlICkgY29udGludWU7XG5cblx0XHRcdF9zaGFkb3dNYXBTaXplLmNvcHkoIHNoYWRvdy5tYXBTaXplICk7XG5cblx0XHRcdGNvbnN0IHNoYWRvd0ZyYW1lRXh0ZW50cyA9IHNoYWRvdy5nZXRGcmFtZUV4dGVudHMoKTtcblxuXHRcdFx0X3NoYWRvd01hcFNpemUubXVsdGlwbHkoIHNoYWRvd0ZyYW1lRXh0ZW50cyApO1xuXG5cdFx0XHRfdmlld3BvcnRTaXplLmNvcHkoIHNoYWRvdy5tYXBTaXplICk7XG5cblx0XHRcdGlmICggX3NoYWRvd01hcFNpemUueCA+IF9tYXhUZXh0dXJlU2l6ZSB8fCBfc2hhZG93TWFwU2l6ZS55ID4gX21heFRleHR1cmVTaXplICkge1xuXG5cdFx0XHRcdGlmICggX3NoYWRvd01hcFNpemUueCA+IF9tYXhUZXh0dXJlU2l6ZSApIHtcblxuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueCA9IE1hdGguZmxvb3IoIF9tYXhUZXh0dXJlU2l6ZSAvIHNoYWRvd0ZyYW1lRXh0ZW50cy54ICk7XG5cdFx0XHRcdFx0X3NoYWRvd01hcFNpemUueCA9IF92aWV3cG9ydFNpemUueCAqIHNoYWRvd0ZyYW1lRXh0ZW50cy54O1xuXHRcdFx0XHRcdHNoYWRvdy5tYXBTaXplLnggPSBfdmlld3BvcnRTaXplLng7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggX3NoYWRvd01hcFNpemUueSA+IF9tYXhUZXh0dXJlU2l6ZSApIHtcblxuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueSA9IE1hdGguZmxvb3IoIF9tYXhUZXh0dXJlU2l6ZSAvIHNoYWRvd0ZyYW1lRXh0ZW50cy55ICk7XG5cdFx0XHRcdFx0X3NoYWRvd01hcFNpemUueSA9IF92aWV3cG9ydFNpemUueSAqIHNoYWRvd0ZyYW1lRXh0ZW50cy55O1xuXHRcdFx0XHRcdHNoYWRvdy5tYXBTaXplLnkgPSBfdmlld3BvcnRTaXplLnk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggc2hhZG93Lm1hcCA9PT0gbnVsbCAmJiAhIHNoYWRvdy5pc1BvaW50TGlnaHRTaGFkb3cgJiYgdGhpcy50eXBlID09PSBWU01TaGFkb3dNYXAgKSB7XG5cblx0XHRcdFx0Y29uc3QgcGFycyA9IHsgbWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsIG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLCBmb3JtYXQ6IFJHQkFGb3JtYXQgfTtcblxuXHRcdFx0XHRzaGFkb3cubWFwID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KCBfc2hhZG93TWFwU2l6ZS54LCBfc2hhZG93TWFwU2l6ZS55LCBwYXJzICk7XG5cdFx0XHRcdHNoYWRvdy5tYXAudGV4dHVyZS5uYW1lID0gbGlnaHQubmFtZSArICcuc2hhZG93TWFwJztcblxuXHRcdFx0XHRzaGFkb3cubWFwUGFzcyA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCggX3NoYWRvd01hcFNpemUueCwgX3NoYWRvd01hcFNpemUueSwgcGFycyApO1xuXG5cdFx0XHRcdHNoYWRvdy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggc2hhZG93Lm1hcCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCBwYXJzID0geyBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlciwgZm9ybWF0OiBSR0JBRm9ybWF0IH07XG5cblx0XHRcdFx0c2hhZG93Lm1hcCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCggX3NoYWRvd01hcFNpemUueCwgX3NoYWRvd01hcFNpemUueSwgcGFycyApO1xuXHRcdFx0XHRzaGFkb3cubWFwLnRleHR1cmUubmFtZSA9IGxpZ2h0Lm5hbWUgKyAnLnNoYWRvd01hcCc7XG5cblx0XHRcdFx0c2hhZG93LmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0X3JlbmRlcmVyLnNldFJlbmRlclRhcmdldCggc2hhZG93Lm1hcCApO1xuXHRcdFx0X3JlbmRlcmVyLmNsZWFyKCk7XG5cblx0XHRcdGNvbnN0IHZpZXdwb3J0Q291bnQgPSBzaGFkb3cuZ2V0Vmlld3BvcnRDb3VudCgpO1xuXG5cdFx0XHRmb3IgKCBsZXQgdnAgPSAwOyB2cCA8IHZpZXdwb3J0Q291bnQ7IHZwICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHZpZXdwb3J0ID0gc2hhZG93LmdldFZpZXdwb3J0KCB2cCApO1xuXG5cdFx0XHRcdF92aWV3cG9ydC5zZXQoXG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS54ICogdmlld3BvcnQueCxcblx0XHRcdFx0XHRfdmlld3BvcnRTaXplLnkgKiB2aWV3cG9ydC55LFxuXHRcdFx0XHRcdF92aWV3cG9ydFNpemUueCAqIHZpZXdwb3J0LnosXG5cdFx0XHRcdFx0X3ZpZXdwb3J0U2l6ZS55ICogdmlld3BvcnQud1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdF9zdGF0ZS52aWV3cG9ydCggX3ZpZXdwb3J0ICk7XG5cblx0XHRcdFx0c2hhZG93LnVwZGF0ZU1hdHJpY2VzKCBsaWdodCwgdnAgKTtcblxuXHRcdFx0XHRfZnJ1c3R1bSA9IHNoYWRvdy5nZXRGcnVzdHVtKCk7XG5cblx0XHRcdFx0cmVuZGVyT2JqZWN0KCBzY2VuZSwgY2FtZXJhLCBzaGFkb3cuY2FtZXJhLCBsaWdodCwgdGhpcy50eXBlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gZG8gYmx1ciBwYXNzIGZvciBWU01cblxuXHRcdFx0aWYgKCAhIHNoYWRvdy5pc1BvaW50TGlnaHRTaGFkb3cgJiYgdGhpcy50eXBlID09PSBWU01TaGFkb3dNYXAgKSB7XG5cblx0XHRcdFx0VlNNUGFzcyggc2hhZG93LCBjYW1lcmEgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRzaGFkb3cubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHNjb3BlLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRfcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBjdXJyZW50UmVuZGVyVGFyZ2V0LCBhY3RpdmVDdWJlRmFjZSwgYWN0aXZlTWlwbWFwTGV2ZWwgKTtcblxuXHR9O1xuXG5cdGZ1bmN0aW9uIFZTTVBhc3MoIHNoYWRvdywgY2FtZXJhICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBfb2JqZWN0cy51cGRhdGUoIGZ1bGxTY3JlZW5NZXNoICk7XG5cblx0XHRpZiAoIHNoYWRvd01hdGVyaWFsVmVydGljYWwuZGVmaW5lcy5WU01fU0FNUExFUyAhPT0gc2hhZG93LmJsdXJTYW1wbGVzICkge1xuXG5cdFx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLmRlZmluZXMuVlNNX1NBTVBMRVMgPSBzaGFkb3cuYmx1clNhbXBsZXM7XG5cdFx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwuZGVmaW5lcy5WU01fU0FNUExFUyA9IHNoYWRvdy5ibHVyU2FtcGxlcztcblxuXHRcdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdmVydGljYWwgcGFzc1xuXG5cdFx0c2hhZG93TWF0ZXJpYWxWZXJ0aWNhbC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZSA9IHNoYWRvdy5tYXAudGV4dHVyZTtcblx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWUgPSBzaGFkb3cubWFwU2l6ZTtcblx0XHRzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHNoYWRvdy5yYWRpdXM7XG5cdFx0X3JlbmRlcmVyLnNldFJlbmRlclRhcmdldCggc2hhZG93Lm1hcFBhc3MgKTtcblx0XHRfcmVuZGVyZXIuY2xlYXIoKTtcblx0XHRfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KCBjYW1lcmEsIG51bGwsIGdlb21ldHJ5LCBzaGFkb3dNYXRlcmlhbFZlcnRpY2FsLCBmdWxsU2NyZWVuTWVzaCwgbnVsbCApO1xuXG5cdFx0Ly8gaG9yaXpvbnRhbCBwYXNzXG5cblx0XHRzaGFkb3dNYXRlcmlhbEhvcml6b250YWwudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWUgPSBzaGFkb3cubWFwUGFzcy50ZXh0dXJlO1xuXHRcdHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlID0gc2hhZG93Lm1hcFNpemU7XG5cdFx0c2hhZG93TWF0ZXJpYWxIb3Jpem9udGFsLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHNoYWRvdy5yYWRpdXM7XG5cdFx0X3JlbmRlcmVyLnNldFJlbmRlclRhcmdldCggc2hhZG93Lm1hcCApO1xuXHRcdF9yZW5kZXJlci5jbGVhcigpO1xuXHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3QoIGNhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIHNoYWRvd01hdGVyaWFsSG9yaXpvbnRhbCwgZnVsbFNjcmVlbk1lc2gsIG51bGwgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGxpZ2h0LCBzaGFkb3dDYW1lcmFOZWFyLCBzaGFkb3dDYW1lcmFGYXIsIHR5cGUgKSB7XG5cblx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcblxuXHRcdGNvbnN0IGN1c3RvbU1hdGVyaWFsID0gKCBsaWdodC5pc1BvaW50TGlnaHQgPT09IHRydWUgKSA/IG9iamVjdC5jdXN0b21EaXN0YW5jZU1hdGVyaWFsIDogb2JqZWN0LmN1c3RvbURlcHRoTWF0ZXJpYWw7XG5cblx0XHRpZiAoIGN1c3RvbU1hdGVyaWFsICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHJlc3VsdCA9IGN1c3RvbU1hdGVyaWFsO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cmVzdWx0ID0gKCBsaWdodC5pc1BvaW50TGlnaHQgPT09IHRydWUgKSA/IF9kaXN0YW5jZU1hdGVyaWFsIDogX2RlcHRoTWF0ZXJpYWw7XG5cblx0XHR9XG5cblx0XHRpZiAoICggX3JlbmRlcmVyLmxvY2FsQ2xpcHBpbmdFbmFibGVkICYmIG1hdGVyaWFsLmNsaXBTaGFkb3dzID09PSB0cnVlICYmIG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCAhPT0gMCApIHx8XG5cdFx0XHQoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCAmJiBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZSAhPT0gMCApIHx8XG5cdFx0XHQoIG1hdGVyaWFsLmFscGhhTWFwICYmIG1hdGVyaWFsLmFscGhhVGVzdCA+IDAgKSApIHtcblxuXHRcdFx0Ly8gaW4gdGhpcyBjYXNlIHdlIG5lZWQgYSB1bmlxdWUgbWF0ZXJpYWwgaW5zdGFuY2UgcmVmbGVjdGluZyB0aGVcblx0XHRcdC8vIGFwcHJvcHJpYXRlIHN0YXRlXG5cblx0XHRcdGNvbnN0IGtleUEgPSByZXN1bHQudXVpZCwga2V5QiA9IG1hdGVyaWFsLnV1aWQ7XG5cblx0XHRcdGxldCBtYXRlcmlhbHNGb3JWYXJpYW50ID0gX21hdGVyaWFsQ2FjaGVbIGtleUEgXTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbHNGb3JWYXJpYW50ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0bWF0ZXJpYWxzRm9yVmFyaWFudCA9IHt9O1xuXHRcdFx0XHRfbWF0ZXJpYWxDYWNoZVsga2V5QSBdID0gbWF0ZXJpYWxzRm9yVmFyaWFudDtcblxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY2FjaGVkTWF0ZXJpYWwgPSBtYXRlcmlhbHNGb3JWYXJpYW50WyBrZXlCIF07XG5cblx0XHRcdGlmICggY2FjaGVkTWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjYWNoZWRNYXRlcmlhbCA9IHJlc3VsdC5jbG9uZSgpO1xuXHRcdFx0XHRtYXRlcmlhbHNGb3JWYXJpYW50WyBrZXlCIF0gPSBjYWNoZWRNYXRlcmlhbDtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQgPSBjYWNoZWRNYXRlcmlhbDtcblxuXHRcdH1cblxuXHRcdHJlc3VsdC52aXNpYmxlID0gbWF0ZXJpYWwudmlzaWJsZTtcblx0XHRyZXN1bHQud2lyZWZyYW1lID0gbWF0ZXJpYWwud2lyZWZyYW1lO1xuXG5cdFx0aWYgKCB0eXBlID09PSBWU01TaGFkb3dNYXAgKSB7XG5cblx0XHRcdHJlc3VsdC5zaWRlID0gKCBtYXRlcmlhbC5zaGFkb3dTaWRlICE9PSBudWxsICkgPyBtYXRlcmlhbC5zaGFkb3dTaWRlIDogbWF0ZXJpYWwuc2lkZTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJlc3VsdC5zaWRlID0gKCBtYXRlcmlhbC5zaGFkb3dTaWRlICE9PSBudWxsICkgPyBtYXRlcmlhbC5zaGFkb3dTaWRlIDogc2hhZG93U2lkZVsgbWF0ZXJpYWwuc2lkZSBdO1xuXG5cdFx0fVxuXG5cdFx0cmVzdWx0LmFscGhhTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cdFx0cmVzdWx0LmFscGhhVGVzdCA9IG1hdGVyaWFsLmFscGhhVGVzdDtcblxuXHRcdHJlc3VsdC5jbGlwU2hhZG93cyA9IG1hdGVyaWFsLmNsaXBTaGFkb3dzO1xuXHRcdHJlc3VsdC5jbGlwcGluZ1BsYW5lcyA9IG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzO1xuXHRcdHJlc3VsdC5jbGlwSW50ZXJzZWN0aW9uID0gbWF0ZXJpYWwuY2xpcEludGVyc2VjdGlvbjtcblxuXHRcdHJlc3VsdC5kaXNwbGFjZW1lbnRNYXAgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudFNjYWxlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0cmVzdWx0LmRpc3BsYWNlbWVudEJpYXMgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0cmVzdWx0LndpcmVmcmFtZUxpbmV3aWR0aCA9IG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHRyZXN1bHQubGluZXdpZHRoID0gbWF0ZXJpYWwubGluZXdpZHRoO1xuXG5cdFx0aWYgKCBsaWdodC5pc1BvaW50TGlnaHQgPT09IHRydWUgJiYgcmVzdWx0LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgPT09IHRydWUgKSB7XG5cblx0XHRcdHJlc3VsdC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0XHRyZXN1bHQubmVhckRpc3RhbmNlID0gc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdHJlc3VsdC5mYXJEaXN0YW5jZSA9IHNoYWRvd0NhbWVyYUZhcjtcblxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlck9iamVjdCggb2JqZWN0LCBjYW1lcmEsIHNoYWRvd0NhbWVyYSwgbGlnaHQsIHR5cGUgKSB7XG5cblx0XHRpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGNvbnN0IHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoIGNhbWVyYS5sYXllcnMgKTtcblxuXHRcdGlmICggdmlzaWJsZSAmJiAoIG9iamVjdC5pc01lc2ggfHwgb2JqZWN0LmlzTGluZSB8fCBvYmplY3QuaXNQb2ludHMgKSApIHtcblxuXHRcdFx0aWYgKCAoIG9iamVjdC5jYXN0U2hhZG93IHx8ICggb2JqZWN0LnJlY2VpdmVTaGFkb3cgJiYgdHlwZSA9PT0gVlNNU2hhZG93TWFwICkgKSAmJiAoICEgb2JqZWN0LmZydXN0dW1DdWxsZWQgfHwgX2ZydXN0dW0uaW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgKSApIHtcblxuXHRcdFx0XHRvYmplY3QubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIHNoYWRvd0NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gX29iamVjdHMudXBkYXRlKCBvYmplY3QgKTtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGsgPSAwLCBrbCA9IGdyb3Vwcy5sZW5ndGg7IGsgPCBrbDsgayArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSBncm91cHNbIGsgXTtcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGdyb3VwTWF0ZXJpYWwgJiYgZ3JvdXBNYXRlcmlhbC52aXNpYmxlICkge1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlcHRoTWF0ZXJpYWwgPSBnZXREZXB0aE1hdGVyaWFsKCBvYmplY3QsIGdlb21ldHJ5LCBncm91cE1hdGVyaWFsLCBsaWdodCwgc2hhZG93Q2FtZXJhLm5lYXIsIHNoYWRvd0NhbWVyYS5mYXIsIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHRfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KCBzaGFkb3dDYW1lcmEsIG51bGwsIGdlb21ldHJ5LCBkZXB0aE1hdGVyaWFsLCBvYmplY3QsIGdyb3VwICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC52aXNpYmxlICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgZGVwdGhNYXRlcmlhbCA9IGdldERlcHRoTWF0ZXJpYWwoIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBsaWdodCwgc2hhZG93Q2FtZXJhLm5lYXIsIHNoYWRvd0NhbWVyYS5mYXIsIHR5cGUgKTtcblxuXHRcdFx0XHRcdF9yZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3QoIHNoYWRvd0NhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIGRlcHRoTWF0ZXJpYWwsIG9iamVjdCwgbnVsbCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRyZW5kZXJPYmplY3QoIGNoaWxkcmVuWyBpIF0sIGNhbWVyYSwgc2hhZG93Q2FtZXJhLCBsaWdodCwgdHlwZSApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBXZWJHTFN0YXRlKCBnbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGZ1bmN0aW9uIENvbG9yQnVmZmVyKCkge1xuXG5cdFx0bGV0IGxvY2tlZCA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgY29sb3IgPSBuZXcgVmVjdG9yNCgpO1xuXHRcdGxldCBjdXJyZW50Q29sb3JNYXNrID0gbnVsbDtcblx0XHRjb25zdCBjdXJyZW50Q29sb3JDbGVhciA9IG5ldyBWZWN0b3I0KCAwLCAwLCAwLCAwICk7XG5cblx0XHRyZXR1cm4ge1xuXG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoIGNvbG9yTWFzayApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRDb2xvck1hc2sgIT09IGNvbG9yTWFzayAmJiAhIGxvY2tlZCApIHtcblxuXHRcdFx0XHRcdGdsLmNvbG9yTWFzayggY29sb3JNYXNrLCBjb2xvck1hc2ssIGNvbG9yTWFzaywgY29sb3JNYXNrICk7XG5cdFx0XHRcdFx0Y3VycmVudENvbG9yTWFzayA9IGNvbG9yTWFzaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldExvY2tlZDogZnVuY3Rpb24gKCBsb2NrICkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGxvY2s7XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldENsZWFyOiBmdW5jdGlvbiAoIHIsIGcsIGIsIGEsIHByZW11bHRpcGxpZWRBbHBoYSApIHtcblxuXHRcdFx0XHRpZiAoIHByZW11bHRpcGxpZWRBbHBoYSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHIgKj0gYTsgZyAqPSBhOyBiICo9IGE7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbG9yLnNldCggciwgZywgYiwgYSApO1xuXG5cdFx0XHRcdGlmICggY3VycmVudENvbG9yQ2xlYXIuZXF1YWxzKCBjb2xvciApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGdsLmNsZWFyQ29sb3IoIHIsIGcsIGIsIGEgKTtcblx0XHRcdFx0XHRjdXJyZW50Q29sb3JDbGVhci5jb3B5KCBjb2xvciApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0cmVzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRsb2NrZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRjdXJyZW50Q29sb3JNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudENvbG9yQ2xlYXIuc2V0KCAtIDEsIDAsIDAsIDAgKTsgLy8gc2V0IHRvIGludmFsaWQgc3RhdGVcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gRGVwdGhCdWZmZXIoKSB7XG5cblx0XHRsZXQgbG9ja2VkID0gZmFsc2U7XG5cblx0XHRsZXQgY3VycmVudERlcHRoTWFzayA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnREZXB0aEZ1bmMgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50RGVwdGhDbGVhciA9IG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXG5cdFx0XHRzZXRUZXN0OiBmdW5jdGlvbiAoIGRlcHRoVGVzdCApIHtcblxuXHRcdFx0XHRpZiAoIGRlcHRoVGVzdCApIHtcblxuXHRcdFx0XHRcdGVuYWJsZSggMjkyOSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRkaXNhYmxlKCAyOTI5ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoIGRlcHRoTWFzayApIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnREZXB0aE1hc2sgIT09IGRlcHRoTWFzayAmJiAhIGxvY2tlZCApIHtcblxuXHRcdFx0XHRcdGdsLmRlcHRoTWFzayggZGVwdGhNYXNrICk7XG5cdFx0XHRcdFx0Y3VycmVudERlcHRoTWFzayA9IGRlcHRoTWFzaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldEZ1bmM6IGZ1bmN0aW9uICggZGVwdGhGdW5jICkge1xuXG5cdFx0XHRcdGlmICggY3VycmVudERlcHRoRnVuYyAhPT0gZGVwdGhGdW5jICkge1xuXG5cdFx0XHRcdFx0aWYgKCBkZXB0aEZ1bmMgKSB7XG5cblx0XHRcdFx0XHRcdHN3aXRjaCAoIGRlcHRoRnVuYyApIHtcblxuXHRcdFx0XHRcdFx0XHRjYXNlIE5ldmVyRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxMiApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgQWx3YXlzRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxOSApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgTGVzc0RlcHRoOlxuXG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKCA1MTMgKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIExlc3NFcXVhbERlcHRoOlxuXG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKCA1MTUgKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIEVxdWFsRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNCApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgR3JlYXRlckVxdWFsRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxOCApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgR3JlYXRlckRlcHRoOlxuXG5cdFx0XHRcdFx0XHRcdFx0Z2wuZGVwdGhGdW5jKCA1MTYgKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIE5vdEVxdWFsRGVwdGg6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNyApO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRnbC5kZXB0aEZ1bmMoIDUxNSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VycmVudERlcHRoRnVuYyA9IGRlcHRoRnVuYztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldExvY2tlZDogZnVuY3Rpb24gKCBsb2NrICkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGxvY2s7XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldENsZWFyOiBmdW5jdGlvbiAoIGRlcHRoICkge1xuXG5cdFx0XHRcdGlmICggY3VycmVudERlcHRoQ2xlYXIgIT09IGRlcHRoICkge1xuXG5cdFx0XHRcdFx0Z2wuY2xlYXJEZXB0aCggZGVwdGggKTtcblx0XHRcdFx0XHRjdXJyZW50RGVwdGhDbGVhciA9IGRlcHRoO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0cmVzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRsb2NrZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRjdXJyZW50RGVwdGhNYXNrID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudERlcHRoRnVuYyA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gU3RlbmNpbEJ1ZmZlcigpIHtcblxuXHRcdGxldCBsb2NrZWQgPSBmYWxzZTtcblxuXHRcdGxldCBjdXJyZW50U3RlbmNpbE1hc2sgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbEZ1bmMgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFJlZiA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsRnVuY01hc2sgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbEZhaWwgPSBudWxsO1xuXHRcdGxldCBjdXJyZW50U3RlbmNpbFpGYWlsID0gbnVsbDtcblx0XHRsZXQgY3VycmVudFN0ZW5jaWxaUGFzcyA9IG51bGw7XG5cdFx0bGV0IGN1cnJlbnRTdGVuY2lsQ2xlYXIgPSBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblxuXHRcdFx0c2V0VGVzdDogZnVuY3Rpb24gKCBzdGVuY2lsVGVzdCApIHtcblxuXHRcdFx0XHRpZiAoICEgbG9ja2VkICkge1xuXG5cdFx0XHRcdFx0aWYgKCBzdGVuY2lsVGVzdCApIHtcblxuXHRcdFx0XHRcdFx0ZW5hYmxlKCAyOTYwICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRkaXNhYmxlKCAyOTYwICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRzZXRNYXNrOiBmdW5jdGlvbiAoIHN0ZW5jaWxNYXNrICkge1xuXG5cdFx0XHRcdGlmICggY3VycmVudFN0ZW5jaWxNYXNrICE9PSBzdGVuY2lsTWFzayAmJiAhIGxvY2tlZCApIHtcblxuXHRcdFx0XHRcdGdsLnN0ZW5jaWxNYXNrKCBzdGVuY2lsTWFzayApO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSxcblxuXHRcdFx0c2V0RnVuYzogZnVuY3Rpb24gKCBzdGVuY2lsRnVuYywgc3RlbmNpbFJlZiwgc3RlbmNpbE1hc2sgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50U3RlbmNpbEZ1bmMgIT09IHN0ZW5jaWxGdW5jIHx8XG5cdFx0XHRcdCAgICAgY3VycmVudFN0ZW5jaWxSZWYgIT09IHN0ZW5jaWxSZWYgfHxcblx0XHRcdFx0ICAgICBjdXJyZW50U3RlbmNpbEZ1bmNNYXNrICE9PSBzdGVuY2lsTWFzayApIHtcblxuXHRcdFx0XHRcdGdsLnN0ZW5jaWxGdW5jKCBzdGVuY2lsRnVuYywgc3RlbmNpbFJlZiwgc3RlbmNpbE1hc2sgKTtcblxuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjtcblx0XHRcdFx0XHRjdXJyZW50U3RlbmNpbEZ1bmNNYXNrID0gc3RlbmNpbE1hc2s7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRzZXRPcDogZnVuY3Rpb24gKCBzdGVuY2lsRmFpbCwgc3RlbmNpbFpGYWlsLCBzdGVuY2lsWlBhc3MgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50U3RlbmNpbEZhaWwgIT09IHN0ZW5jaWxGYWlsIHx8XG5cdFx0XHRcdCAgICAgY3VycmVudFN0ZW5jaWxaRmFpbCAhPT0gc3RlbmNpbFpGYWlsIHx8XG5cdFx0XHRcdCAgICAgY3VycmVudFN0ZW5jaWxaUGFzcyAhPT0gc3RlbmNpbFpQYXNzICkge1xuXG5cdFx0XHRcdFx0Z2wuc3RlbmNpbE9wKCBzdGVuY2lsRmFpbCwgc3RlbmNpbFpGYWlsLCBzdGVuY2lsWlBhc3MgKTtcblxuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWlsO1xuXHRcdFx0XHRcdGN1cnJlbnRTdGVuY2lsWkZhaWwgPSBzdGVuY2lsWkZhaWw7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxaUGFzcyA9IHN0ZW5jaWxaUGFzcztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldExvY2tlZDogZnVuY3Rpb24gKCBsb2NrICkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGxvY2s7XG5cblx0XHRcdH0sXG5cblx0XHRcdHNldENsZWFyOiBmdW5jdGlvbiAoIHN0ZW5jaWwgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50U3RlbmNpbENsZWFyICE9PSBzdGVuY2lsICkge1xuXG5cdFx0XHRcdFx0Z2wuY2xlYXJTdGVuY2lsKCBzdGVuY2lsICk7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZW5jaWxDbGVhciA9IHN0ZW5jaWw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdGxvY2tlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsTWFzayA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsRnVuYyA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsUmVmID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxGdW5jTWFzayA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsRmFpbCA9IG51bGw7XG5cdFx0XHRcdGN1cnJlbnRTdGVuY2lsWkZhaWwgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50U3RlbmNpbFpQYXNzID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudFN0ZW5jaWxDbGVhciA9IG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0fVxuXG5cdC8vXG5cblx0Y29uc3QgY29sb3JCdWZmZXIgPSBuZXcgQ29sb3JCdWZmZXIoKTtcblx0Y29uc3QgZGVwdGhCdWZmZXIgPSBuZXcgRGVwdGhCdWZmZXIoKTtcblx0Y29uc3Qgc3RlbmNpbEJ1ZmZlciA9IG5ldyBTdGVuY2lsQnVmZmVyKCk7XG5cblx0bGV0IGVuYWJsZWRDYXBhYmlsaXRpZXMgPSB7fTtcblxuXHRsZXQgY3VycmVudEJvdW5kRnJhbWVidWZmZXJzID0ge307XG5cdGxldCBjdXJyZW50RHJhd2J1ZmZlcnMgPSBuZXcgV2Vha01hcCgpO1xuXHRsZXQgZGVmYXVsdERyYXdidWZmZXJzID0gW107XG5cblx0bGV0IGN1cnJlbnRQcm9ncmFtID0gbnVsbDtcblxuXHRsZXQgY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRsZXQgY3VycmVudEJsZW5kaW5nID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gbnVsbDtcblx0bGV0IGN1cnJlbnRCbGVuZFNyYyA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmREc3QgPSBudWxsO1xuXHRsZXQgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmRTcmNBbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7XG5cdGxldCBjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBmYWxzZTtcblxuXHRsZXQgY3VycmVudEZsaXBTaWRlZCA9IG51bGw7XG5cdGxldCBjdXJyZW50Q3VsbEZhY2UgPSBudWxsO1xuXG5cdGxldCBjdXJyZW50TGluZVdpZHRoID0gbnVsbDtcblxuXHRsZXQgY3VycmVudFBvbHlnb25PZmZzZXRGYWN0b3IgPSBudWxsO1xuXHRsZXQgY3VycmVudFBvbHlnb25PZmZzZXRVbml0cyA9IG51bGw7XG5cblx0Y29uc3QgbWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM1NjYxICk7XG5cblx0bGV0IGxpbmVXaWR0aEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRsZXQgdmVyc2lvbiA9IDA7XG5cdGNvbnN0IGdsVmVyc2lvbiA9IGdsLmdldFBhcmFtZXRlciggNzkzOCApO1xuXG5cdGlmICggZ2xWZXJzaW9uLmluZGV4T2YoICdXZWJHTCcgKSAhPT0gLSAxICkge1xuXG5cdFx0dmVyc2lvbiA9IHBhcnNlRmxvYXQoIC9eV2ViR0wgKFxcZCkvLmV4ZWMoIGdsVmVyc2lvbiApWyAxIF0gKTtcblx0XHRsaW5lV2lkdGhBdmFpbGFibGUgPSAoIHZlcnNpb24gPj0gMS4wICk7XG5cblx0fSBlbHNlIGlmICggZ2xWZXJzaW9uLmluZGV4T2YoICdPcGVuR0wgRVMnICkgIT09IC0gMSApIHtcblxuXHRcdHZlcnNpb24gPSBwYXJzZUZsb2F0KCAvXk9wZW5HTCBFUyAoXFxkKS8uZXhlYyggZ2xWZXJzaW9uIClbIDEgXSApO1xuXHRcdGxpbmVXaWR0aEF2YWlsYWJsZSA9ICggdmVyc2lvbiA+PSAyLjAgKTtcblxuXHR9XG5cblx0bGV0IGN1cnJlbnRUZXh0dXJlU2xvdCA9IG51bGw7XG5cdGxldCBjdXJyZW50Qm91bmRUZXh0dXJlcyA9IHt9O1xuXG5cdGNvbnN0IHNjaXNzb3JQYXJhbSA9IGdsLmdldFBhcmFtZXRlciggMzA4OCApO1xuXHRjb25zdCB2aWV3cG9ydFBhcmFtID0gZ2wuZ2V0UGFyYW1ldGVyKCAyOTc4ICk7XG5cblx0Y29uc3QgY3VycmVudFNjaXNzb3IgPSBuZXcgVmVjdG9yNCgpLmZyb21BcnJheSggc2Npc3NvclBhcmFtICk7XG5cdGNvbnN0IGN1cnJlbnRWaWV3cG9ydCA9IG5ldyBWZWN0b3I0KCkuZnJvbUFycmF5KCB2aWV3cG9ydFBhcmFtICk7XG5cblx0ZnVuY3Rpb24gY3JlYXRlVGV4dHVyZSggdHlwZSwgdGFyZ2V0LCBjb3VudCApIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheSggNCApOyAvLyA0IGlzIHJlcXVpcmVkIHRvIG1hdGNoIGRlZmF1bHQgdW5wYWNrIGFsaWdubWVudCBvZiA0LlxuXHRcdGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0XHRnbC5iaW5kVGV4dHVyZSggdHlwZSwgdGV4dHVyZSApO1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoIHR5cGUsIDEwMjQxLCA5NzI4ICk7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaSggdHlwZSwgMTAyNDAsIDk3MjggKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvdW50OyBpICsrICkge1xuXG5cdFx0XHRnbC50ZXhJbWFnZTJEKCB0YXJnZXQgKyBpLCAwLCA2NDA4LCAxLCAxLCAwLCA2NDA4LCA1MTIxLCBkYXRhICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblxuXHR9XG5cblx0Y29uc3QgZW1wdHlUZXh0dXJlcyA9IHt9O1xuXHRlbXB0eVRleHR1cmVzWyAzNTUzIF0gPSBjcmVhdGVUZXh0dXJlKCAzNTUzLCAzNTUzLCAxICk7XG5cdGVtcHR5VGV4dHVyZXNbIDM0MDY3IF0gPSBjcmVhdGVUZXh0dXJlKCAzNDA2NywgMzQwNjksIDYgKTtcblxuXHQvLyBpbml0XG5cblx0Y29sb3JCdWZmZXIuc2V0Q2xlYXIoIDAsIDAsIDAsIDEgKTtcblx0ZGVwdGhCdWZmZXIuc2V0Q2xlYXIoIDEgKTtcblx0c3RlbmNpbEJ1ZmZlci5zZXRDbGVhciggMCApO1xuXG5cdGVuYWJsZSggMjkyOSApO1xuXHRkZXB0aEJ1ZmZlci5zZXRGdW5jKCBMZXNzRXF1YWxEZXB0aCApO1xuXG5cdHNldEZsaXBTaWRlZCggZmFsc2UgKTtcblx0c2V0Q3VsbEZhY2UoIEN1bGxGYWNlQmFjayApO1xuXHRlbmFibGUoIDI4ODQgKTtcblxuXHRzZXRCbGVuZGluZyggTm9CbGVuZGluZyApO1xuXG5cdC8vXG5cblx0ZnVuY3Rpb24gZW5hYmxlKCBpZCApIHtcblxuXHRcdGlmICggZW5hYmxlZENhcGFiaWxpdGllc1sgaWQgXSAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0Z2wuZW5hYmxlKCBpZCApO1xuXHRcdFx0ZW5hYmxlZENhcGFiaWxpdGllc1sgaWQgXSA9IHRydWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc2FibGUoIGlkICkge1xuXG5cdFx0aWYgKCBlbmFibGVkQ2FwYWJpbGl0aWVzWyBpZCBdICE9PSBmYWxzZSApIHtcblxuXHRcdFx0Z2wuZGlzYWJsZSggaWQgKTtcblx0XHRcdGVuYWJsZWRDYXBhYmlsaXRpZXNbIGlkIF0gPSBmYWxzZTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gYmluZEZyYW1lYnVmZmVyKCB0YXJnZXQsIGZyYW1lYnVmZmVyICkge1xuXG5cdFx0aWYgKCBjdXJyZW50Qm91bmRGcmFtZWJ1ZmZlcnNbIHRhcmdldCBdICE9PSBmcmFtZWJ1ZmZlciApIHtcblxuXHRcdFx0Z2wuYmluZEZyYW1lYnVmZmVyKCB0YXJnZXQsIGZyYW1lYnVmZmVyICk7XG5cblx0XHRcdGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1sgdGFyZ2V0IF0gPSBmcmFtZWJ1ZmZlcjtcblxuXHRcdFx0aWYgKCBpc1dlYkdMMiApIHtcblxuXHRcdFx0XHQvLyAzNjAwOSBpcyBlcXVpdmFsZW50IHRvIDM2MTYwXG5cblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IDM2MDA5ICkge1xuXG5cdFx0XHRcdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzWyAzNjE2MCBdID0gZnJhbWVidWZmZXI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSAzNjE2MCApIHtcblxuXHRcdFx0XHRcdGN1cnJlbnRCb3VuZEZyYW1lYnVmZmVyc1sgMzYwMDkgXSA9IGZyYW1lYnVmZmVyO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZHJhd0J1ZmZlcnMoIHJlbmRlclRhcmdldCwgZnJhbWVidWZmZXIgKSB7XG5cblx0XHRsZXQgZHJhd0J1ZmZlcnMgPSBkZWZhdWx0RHJhd2J1ZmZlcnM7XG5cblx0XHRsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRkcmF3QnVmZmVycyA9IGN1cnJlbnREcmF3YnVmZmVycy5nZXQoIGZyYW1lYnVmZmVyICk7XG5cblx0XHRcdGlmICggZHJhd0J1ZmZlcnMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRkcmF3QnVmZmVycyA9IFtdO1xuXHRcdFx0XHRjdXJyZW50RHJhd2J1ZmZlcnMuc2V0KCBmcmFtZWJ1ZmZlciwgZHJhd0J1ZmZlcnMgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzICkge1xuXG5cdFx0XHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdFx0aWYgKCBkcmF3QnVmZmVycy5sZW5ndGggIT09IHRleHR1cmVzLmxlbmd0aCB8fCBkcmF3QnVmZmVyc1sgMCBdICE9PSAzNjA2NCApIHtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0ZHJhd0J1ZmZlcnNbIGkgXSA9IDM2MDY0ICsgaTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRyYXdCdWZmZXJzLmxlbmd0aCA9IHRleHR1cmVzLmxlbmd0aDtcblxuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBkcmF3QnVmZmVyc1sgMCBdICE9PSAzNjA2NCApIHtcblxuXHRcdFx0XHRcdGRyYXdCdWZmZXJzWyAwIF0gPSAzNjA2NDtcblxuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggZHJhd0J1ZmZlcnNbIDAgXSAhPT0gMTAyOSApIHtcblxuXHRcdFx0XHRkcmF3QnVmZmVyc1sgMCBdID0gMTAyOTtcblxuXHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggbmVlZHNVcGRhdGUgKSB7XG5cblx0XHRcdGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyICkge1xuXG5cdFx0XHRcdGdsLmRyYXdCdWZmZXJzKCBkcmF3QnVmZmVycyApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZHJhd19idWZmZXJzJyApLmRyYXdCdWZmZXJzV0VCR0woIGRyYXdCdWZmZXJzICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXG5cdH1cblxuXHRmdW5jdGlvbiB1c2VQcm9ncmFtKCBwcm9ncmFtICkge1xuXG5cdFx0aWYgKCBjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3JhbSApIHtcblxuXHRcdFx0Z2wudXNlUHJvZ3JhbSggcHJvZ3JhbSApO1xuXG5cdFx0XHRjdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH1cblxuXHRjb25zdCBlcXVhdGlvblRvR0wgPSB7XG5cdFx0WyBBZGRFcXVhdGlvbiBdOiAzMjc3NCxcblx0XHRbIFN1YnRyYWN0RXF1YXRpb24gXTogMzI3NzgsXG5cdFx0WyBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbiBdOiAzMjc3OVxuXHR9O1xuXG5cdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRlcXVhdGlvblRvR0xbIE1pbkVxdWF0aW9uIF0gPSAzMjc3NTtcblx0XHRlcXVhdGlvblRvR0xbIE1heEVxdWF0aW9uIF0gPSAzMjc3NjtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApO1xuXG5cdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdGVxdWF0aW9uVG9HTFsgTWluRXF1YXRpb24gXSA9IGV4dGVuc2lvbi5NSU5fRVhUO1xuXHRcdFx0ZXF1YXRpb25Ub0dMWyBNYXhFcXVhdGlvbiBdID0gZXh0ZW5zaW9uLk1BWF9FWFQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNvbnN0IGZhY3RvclRvR0wgPSB7XG5cdFx0WyBaZXJvRmFjdG9yIF06IDAsXG5cdFx0WyBPbmVGYWN0b3IgXTogMSxcblx0XHRbIFNyY0NvbG9yRmFjdG9yIF06IDc2OCxcblx0XHRbIFNyY0FscGhhRmFjdG9yIF06IDc3MCxcblx0XHRbIFNyY0FscGhhU2F0dXJhdGVGYWN0b3IgXTogNzc2LFxuXHRcdFsgRHN0Q29sb3JGYWN0b3IgXTogNzc0LFxuXHRcdFsgRHN0QWxwaGFGYWN0b3IgXTogNzcyLFxuXHRcdFsgT25lTWludXNTcmNDb2xvckZhY3RvciBdOiA3NjksXG5cdFx0WyBPbmVNaW51c1NyY0FscGhhRmFjdG9yIF06IDc3MSxcblx0XHRbIE9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgXTogNzc1LFxuXHRcdFsgT25lTWludXNEc3RBbHBoYUZhY3RvciBdOiA3NzNcblx0fTtcblxuXHRmdW5jdGlvbiBzZXRCbGVuZGluZyggYmxlbmRpbmcsIGJsZW5kRXF1YXRpb24sIGJsZW5kU3JjLCBibGVuZERzdCwgYmxlbmRFcXVhdGlvbkFscGhhLCBibGVuZFNyY0FscGhhLCBibGVuZERzdEFscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEgKSB7XG5cblx0XHRpZiAoIGJsZW5kaW5nID09PSBOb0JsZW5kaW5nICkge1xuXG5cdFx0XHRpZiAoIGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0ZGlzYWJsZSggMzA0MiApO1xuXHRcdFx0XHRjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBjdXJyZW50QmxlbmRpbmdFbmFibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0ZW5hYmxlKCAzMDQyICk7XG5cdFx0XHRjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdGlmICggYmxlbmRpbmcgIT09IEN1c3RvbUJsZW5kaW5nICkge1xuXG5cdFx0XHRpZiAoIGJsZW5kaW5nICE9PSBjdXJyZW50QmxlbmRpbmcgfHwgcHJlbXVsdGlwbGllZEFscGhhICE9PSBjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgKSB7XG5cblx0XHRcdFx0aWYgKCBjdXJyZW50QmxlbmRFcXVhdGlvbiAhPT0gQWRkRXF1YXRpb24gfHwgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSAhPT0gQWRkRXF1YXRpb24gKSB7XG5cblx0XHRcdFx0XHRnbC5ibGVuZEVxdWF0aW9uKCAzMjc3NCApO1xuXG5cdFx0XHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBBZGRFcXVhdGlvbjtcblx0XHRcdFx0XHRjdXJyZW50QmxlbmRFcXVhdGlvbkFscGhhID0gQWRkRXF1YXRpb247XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggcHJlbXVsdGlwbGllZEFscGhhICkge1xuXG5cdFx0XHRcdFx0c3dpdGNoICggYmxlbmRpbmcgKSB7XG5cblx0XHRcdFx0XHRcdGNhc2UgTm9ybWFsQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAxLCA3NzEsIDEsIDc3MSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBBZGRpdGl2ZUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmMoIDEsIDEgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgU3VidHJhY3RpdmVCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIDAsIDc2OSwgMCwgMSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBNdWx0aXBseUJsZW5kaW5nOlxuXHRcdFx0XHRcdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggMCwgNzY4LCAwLCA3NzAgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAnLCBibGVuZGluZyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c3dpdGNoICggYmxlbmRpbmcgKSB7XG5cblx0XHRcdFx0XHRcdGNhc2UgTm9ybWFsQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCA3NzAsIDc3MSwgMSwgNzcxICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIEFkZGl0aXZlQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuYyggNzcwLCAxICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFN1YnRyYWN0aXZlQmxlbmRpbmc6XG5cdFx0XHRcdFx0XHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAwLCA3NjksIDAsIDEgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgTXVsdGlwbHlCbGVuZGluZzpcblx0XHRcdFx0XHRcdFx0Z2wuYmxlbmRGdW5jKCAwLCA3NjggKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAnLCBibGVuZGluZyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudEJsZW5kU3JjID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudEJsZW5kRHN0ID0gbnVsbDtcblx0XHRcdFx0Y3VycmVudEJsZW5kU3JjQWxwaGEgPSBudWxsO1xuXHRcdFx0XHRjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7XG5cblx0XHRcdFx0Y3VycmVudEJsZW5kaW5nID0gYmxlbmRpbmc7XG5cdFx0XHRcdGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHQvLyBjdXN0b20gYmxlbmRpbmdcblxuXHRcdGJsZW5kRXF1YXRpb25BbHBoYSA9IGJsZW5kRXF1YXRpb25BbHBoYSB8fCBibGVuZEVxdWF0aW9uO1xuXHRcdGJsZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhIHx8IGJsZW5kU3JjO1xuXHRcdGJsZW5kRHN0QWxwaGEgPSBibGVuZERzdEFscGhhIHx8IGJsZW5kRHN0O1xuXG5cdFx0aWYgKCBibGVuZEVxdWF0aW9uICE9PSBjdXJyZW50QmxlbmRFcXVhdGlvbiB8fCBibGVuZEVxdWF0aW9uQWxwaGEgIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgKSB7XG5cblx0XHRcdGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSggZXF1YXRpb25Ub0dMWyBibGVuZEVxdWF0aW9uIF0sIGVxdWF0aW9uVG9HTFsgYmxlbmRFcXVhdGlvbkFscGhhIF0gKTtcblxuXHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb24gPSBibGVuZEVxdWF0aW9uO1xuXHRcdFx0Y3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IGJsZW5kRXF1YXRpb25BbHBoYTtcblxuXHRcdH1cblxuXHRcdGlmICggYmxlbmRTcmMgIT09IGN1cnJlbnRCbGVuZFNyYyB8fCBibGVuZERzdCAhPT0gY3VycmVudEJsZW5kRHN0IHx8IGJsZW5kU3JjQWxwaGEgIT09IGN1cnJlbnRCbGVuZFNyY0FscGhhIHx8IGJsZW5kRHN0QWxwaGEgIT09IGN1cnJlbnRCbGVuZERzdEFscGhhICkge1xuXG5cdFx0XHRnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggZmFjdG9yVG9HTFsgYmxlbmRTcmMgXSwgZmFjdG9yVG9HTFsgYmxlbmREc3QgXSwgZmFjdG9yVG9HTFsgYmxlbmRTcmNBbHBoYSBdLCBmYWN0b3JUb0dMWyBibGVuZERzdEFscGhhIF0gKTtcblxuXHRcdFx0Y3VycmVudEJsZW5kU3JjID0gYmxlbmRTcmM7XG5cdFx0XHRjdXJyZW50QmxlbmREc3QgPSBibGVuZERzdDtcblx0XHRcdGN1cnJlbnRCbGVuZFNyY0FscGhhID0gYmxlbmRTcmNBbHBoYTtcblx0XHRcdGN1cnJlbnRCbGVuZERzdEFscGhhID0gYmxlbmREc3RBbHBoYTtcblxuXHRcdH1cblxuXHRcdGN1cnJlbnRCbGVuZGluZyA9IGJsZW5kaW5nO1xuXHRcdGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IG51bGw7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldE1hdGVyaWFsKCBtYXRlcmlhbCwgZnJvbnRGYWNlQ1cgKSB7XG5cblx0XHRtYXRlcmlhbC5zaWRlID09PSBEb3VibGVTaWRlXG5cdFx0XHQ/IGRpc2FibGUoIDI4ODQgKVxuXHRcdFx0OiBlbmFibGUoIDI4ODQgKTtcblxuXHRcdGxldCBmbGlwU2lkZWQgPSAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICk7XG5cdFx0aWYgKCBmcm9udEZhY2VDVyApIGZsaXBTaWRlZCA9ICEgZmxpcFNpZGVkO1xuXG5cdFx0c2V0RmxpcFNpZGVkKCBmbGlwU2lkZWQgKTtcblxuXHRcdCggbWF0ZXJpYWwuYmxlbmRpbmcgPT09IE5vcm1hbEJsZW5kaW5nICYmIG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSBmYWxzZSApXG5cdFx0XHQ/IHNldEJsZW5kaW5nKCBOb0JsZW5kaW5nIClcblx0XHRcdDogc2V0QmxlbmRpbmcoIG1hdGVyaWFsLmJsZW5kaW5nLCBtYXRlcmlhbC5ibGVuZEVxdWF0aW9uLCBtYXRlcmlhbC5ibGVuZFNyYywgbWF0ZXJpYWwuYmxlbmREc3QsIG1hdGVyaWFsLmJsZW5kRXF1YXRpb25BbHBoYSwgbWF0ZXJpYWwuYmxlbmRTcmNBbHBoYSwgbWF0ZXJpYWwuYmxlbmREc3RBbHBoYSwgbWF0ZXJpYWwucHJlbXVsdGlwbGllZEFscGhhICk7XG5cblx0XHRkZXB0aEJ1ZmZlci5zZXRGdW5jKCBtYXRlcmlhbC5kZXB0aEZ1bmMgKTtcblx0XHRkZXB0aEJ1ZmZlci5zZXRUZXN0KCBtYXRlcmlhbC5kZXB0aFRlc3QgKTtcblx0XHRkZXB0aEJ1ZmZlci5zZXRNYXNrKCBtYXRlcmlhbC5kZXB0aFdyaXRlICk7XG5cdFx0Y29sb3JCdWZmZXIuc2V0TWFzayggbWF0ZXJpYWwuY29sb3JXcml0ZSApO1xuXG5cdFx0Y29uc3Qgc3RlbmNpbFdyaXRlID0gbWF0ZXJpYWwuc3RlbmNpbFdyaXRlO1xuXHRcdHN0ZW5jaWxCdWZmZXIuc2V0VGVzdCggc3RlbmNpbFdyaXRlICk7XG5cdFx0aWYgKCBzdGVuY2lsV3JpdGUgKSB7XG5cblx0XHRcdHN0ZW5jaWxCdWZmZXIuc2V0TWFzayggbWF0ZXJpYWwuc3RlbmNpbFdyaXRlTWFzayApO1xuXHRcdFx0c3RlbmNpbEJ1ZmZlci5zZXRGdW5jKCBtYXRlcmlhbC5zdGVuY2lsRnVuYywgbWF0ZXJpYWwuc3RlbmNpbFJlZiwgbWF0ZXJpYWwuc3RlbmNpbEZ1bmNNYXNrICk7XG5cdFx0XHRzdGVuY2lsQnVmZmVyLnNldE9wKCBtYXRlcmlhbC5zdGVuY2lsRmFpbCwgbWF0ZXJpYWwuc3RlbmNpbFpGYWlsLCBtYXRlcmlhbC5zdGVuY2lsWlBhc3MgKTtcblxuXHRcdH1cblxuXHRcdHNldFBvbHlnb25PZmZzZXQoIG1hdGVyaWFsLnBvbHlnb25PZmZzZXQsIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRGYWN0b3IsIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRVbml0cyApO1xuXG5cdFx0bWF0ZXJpYWwuYWxwaGFUb0NvdmVyYWdlID09PSB0cnVlXG5cdFx0XHQ/IGVuYWJsZSggMzI5MjYgKVxuXHRcdFx0OiBkaXNhYmxlKCAzMjkyNiApO1xuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIHNldEZsaXBTaWRlZCggZmxpcFNpZGVkICkge1xuXG5cdFx0aWYgKCBjdXJyZW50RmxpcFNpZGVkICE9PSBmbGlwU2lkZWQgKSB7XG5cblx0XHRcdGlmICggZmxpcFNpZGVkICkge1xuXG5cdFx0XHRcdGdsLmZyb250RmFjZSggMjMwNCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGdsLmZyb250RmFjZSggMjMwNSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRGbGlwU2lkZWQgPSBmbGlwU2lkZWQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEN1bGxGYWNlKCBjdWxsRmFjZSApIHtcblxuXHRcdGlmICggY3VsbEZhY2UgIT09IEN1bGxGYWNlTm9uZSApIHtcblxuXHRcdFx0ZW5hYmxlKCAyODg0ICk7XG5cblx0XHRcdGlmICggY3VsbEZhY2UgIT09IGN1cnJlbnRDdWxsRmFjZSApIHtcblxuXHRcdFx0XHRpZiAoIGN1bGxGYWNlID09PSBDdWxsRmFjZUJhY2sgKSB7XG5cblx0XHRcdFx0XHRnbC5jdWxsRmFjZSggMTAyOSApO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGN1bGxGYWNlID09PSBDdWxsRmFjZUZyb250ICkge1xuXG5cdFx0XHRcdFx0Z2wuY3VsbEZhY2UoIDEwMjggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Z2wuY3VsbEZhY2UoIDEwMzIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGRpc2FibGUoIDI4ODQgKTtcblxuXHRcdH1cblxuXHRcdGN1cnJlbnRDdWxsRmFjZSA9IGN1bGxGYWNlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lV2lkdGgoIHdpZHRoICkge1xuXG5cdFx0aWYgKCB3aWR0aCAhPT0gY3VycmVudExpbmVXaWR0aCApIHtcblxuXHRcdFx0aWYgKCBsaW5lV2lkdGhBdmFpbGFibGUgKSBnbC5saW5lV2lkdGgoIHdpZHRoICk7XG5cblx0XHRcdGN1cnJlbnRMaW5lV2lkdGggPSB3aWR0aDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0UG9seWdvbk9mZnNldCggcG9seWdvbk9mZnNldCwgZmFjdG9yLCB1bml0cyApIHtcblxuXHRcdGlmICggcG9seWdvbk9mZnNldCApIHtcblxuXHRcdFx0ZW5hYmxlKCAzMjgyMyApO1xuXG5cdFx0XHRpZiAoIGN1cnJlbnRQb2x5Z29uT2Zmc2V0RmFjdG9yICE9PSBmYWN0b3IgfHwgY3VycmVudFBvbHlnb25PZmZzZXRVbml0cyAhPT0gdW5pdHMgKSB7XG5cblx0XHRcdFx0Z2wucG9seWdvbk9mZnNldCggZmFjdG9yLCB1bml0cyApO1xuXG5cdFx0XHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yO1xuXHRcdFx0XHRjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGRpc2FibGUoIDMyODIzICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFNjaXNzb3JUZXN0KCBzY2lzc29yVGVzdCApIHtcblxuXHRcdGlmICggc2Npc3NvclRlc3QgKSB7XG5cblx0XHRcdGVuYWJsZSggMzA4OSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0ZGlzYWJsZSggMzA4OSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyB0ZXh0dXJlXG5cblx0ZnVuY3Rpb24gYWN0aXZlVGV4dHVyZSggd2ViZ2xTbG90ICkge1xuXG5cdFx0aWYgKCB3ZWJnbFNsb3QgPT09IHVuZGVmaW5lZCApIHdlYmdsU2xvdCA9IDMzOTg0ICsgbWF4VGV4dHVyZXMgLSAxO1xuXG5cdFx0aWYgKCBjdXJyZW50VGV4dHVyZVNsb3QgIT09IHdlYmdsU2xvdCApIHtcblxuXHRcdFx0Z2wuYWN0aXZlVGV4dHVyZSggd2ViZ2xTbG90ICk7XG5cdFx0XHRjdXJyZW50VGV4dHVyZVNsb3QgPSB3ZWJnbFNsb3Q7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmRUZXh0dXJlKCB3ZWJnbFR5cGUsIHdlYmdsVGV4dHVyZSApIHtcblxuXHRcdGlmICggY3VycmVudFRleHR1cmVTbG90ID09PSBudWxsICkge1xuXG5cdFx0XHRhY3RpdmVUZXh0dXJlKCk7XG5cblx0XHR9XG5cblx0XHRsZXQgYm91bmRUZXh0dXJlID0gY3VycmVudEJvdW5kVGV4dHVyZXNbIGN1cnJlbnRUZXh0dXJlU2xvdCBdO1xuXG5cdFx0aWYgKCBib3VuZFRleHR1cmUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ym91bmRUZXh0dXJlID0geyB0eXBlOiB1bmRlZmluZWQsIHRleHR1cmU6IHVuZGVmaW5lZCB9O1xuXHRcdFx0Y3VycmVudEJvdW5kVGV4dHVyZXNbIGN1cnJlbnRUZXh0dXJlU2xvdCBdID0gYm91bmRUZXh0dXJlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBib3VuZFRleHR1cmUudHlwZSAhPT0gd2ViZ2xUeXBlIHx8IGJvdW5kVGV4dHVyZS50ZXh0dXJlICE9PSB3ZWJnbFRleHR1cmUgKSB7XG5cblx0XHRcdGdsLmJpbmRUZXh0dXJlKCB3ZWJnbFR5cGUsIHdlYmdsVGV4dHVyZSB8fCBlbXB0eVRleHR1cmVzWyB3ZWJnbFR5cGUgXSApO1xuXG5cdFx0XHRib3VuZFRleHR1cmUudHlwZSA9IHdlYmdsVHlwZTtcblx0XHRcdGJvdW5kVGV4dHVyZS50ZXh0dXJlID0gd2ViZ2xUZXh0dXJlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB1bmJpbmRUZXh0dXJlKCkge1xuXG5cdFx0Y29uc3QgYm91bmRUZXh0dXJlID0gY3VycmVudEJvdW5kVGV4dHVyZXNbIGN1cnJlbnRUZXh0dXJlU2xvdCBdO1xuXG5cdFx0aWYgKCBib3VuZFRleHR1cmUgIT09IHVuZGVmaW5lZCAmJiBib3VuZFRleHR1cmUudHlwZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRnbC5iaW5kVGV4dHVyZSggYm91bmRUZXh0dXJlLnR5cGUsIG51bGwgKTtcblxuXHRcdFx0Ym91bmRUZXh0dXJlLnR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRib3VuZFRleHR1cmUudGV4dHVyZSA9IHVuZGVmaW5lZDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gY29tcHJlc3NlZFRleEltYWdlMkQoKSB7XG5cblx0XHR0cnkge1xuXG5cdFx0XHRnbC5jb21wcmVzc2VkVGV4SW1hZ2UyRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdWJJbWFnZTJEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wudGV4U3ViSW1hZ2UyRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdWJJbWFnZTNEKCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Z2wudGV4U3ViSW1hZ2UzRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7XG5cblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleFN0b3JhZ2UyRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLnRleFN0b3JhZ2UyRC5hcHBseSggZ2wsIGFyZ3VtZW50cyApO1xuXG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTdGF0ZTonLCBlcnJvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXhTdG9yYWdlM0QoKSB7XG5cblx0XHR0cnkge1xuXG5cdFx0XHRnbC50ZXhTdG9yYWdlM0QuYXBwbHkoIGdsLCBhcmd1bWVudHMgKTtcblxuXHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4SW1hZ2UyRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLnRleEltYWdlMkQuYXBwbHkoIGdsLCBhcmd1bWVudHMgKTtcblxuXHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4SW1hZ2UzRCgpIHtcblxuXHRcdHRyeSB7XG5cblx0XHRcdGdsLnRleEltYWdlM0QuYXBwbHkoIGdsLCBhcmd1bWVudHMgKTtcblxuXHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMU3RhdGU6JywgZXJyb3IgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBzY2lzc29yKCBzY2lzc29yICkge1xuXG5cdFx0aWYgKCBjdXJyZW50U2Npc3Nvci5lcXVhbHMoIHNjaXNzb3IgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGdsLnNjaXNzb3IoIHNjaXNzb3IueCwgc2Npc3Nvci55LCBzY2lzc29yLnosIHNjaXNzb3IudyApO1xuXHRcdFx0Y3VycmVudFNjaXNzb3IuY29weSggc2Npc3NvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB2aWV3cG9ydCggdmlld3BvcnQgKSB7XG5cblx0XHRpZiAoIGN1cnJlbnRWaWV3cG9ydC5lcXVhbHMoIHZpZXdwb3J0ICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRnbC52aWV3cG9ydCggdmlld3BvcnQueCwgdmlld3BvcnQueSwgdmlld3BvcnQueiwgdmlld3BvcnQudyApO1xuXHRcdFx0Y3VycmVudFZpZXdwb3J0LmNvcHkoIHZpZXdwb3J0ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gcmVzZXQoKSB7XG5cblx0XHQvLyByZXNldCBzdGF0ZVxuXG5cdFx0Z2wuZGlzYWJsZSggMzA0MiApO1xuXHRcdGdsLmRpc2FibGUoIDI4ODQgKTtcblx0XHRnbC5kaXNhYmxlKCAyOTI5ICk7XG5cdFx0Z2wuZGlzYWJsZSggMzI4MjMgKTtcblx0XHRnbC5kaXNhYmxlKCAzMDg5ICk7XG5cdFx0Z2wuZGlzYWJsZSggMjk2MCApO1xuXHRcdGdsLmRpc2FibGUoIDMyOTI2ICk7XG5cblx0XHRnbC5ibGVuZEVxdWF0aW9uKCAzMjc3NCApO1xuXHRcdGdsLmJsZW5kRnVuYyggMSwgMCApO1xuXHRcdGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAxLCAwLCAxLCAwICk7XG5cblx0XHRnbC5jb2xvck1hc2soIHRydWUsIHRydWUsIHRydWUsIHRydWUgKTtcblx0XHRnbC5jbGVhckNvbG9yKCAwLCAwLCAwLCAwICk7XG5cblx0XHRnbC5kZXB0aE1hc2soIHRydWUgKTtcblx0XHRnbC5kZXB0aEZ1bmMoIDUxMyApO1xuXHRcdGdsLmNsZWFyRGVwdGgoIDEgKTtcblxuXHRcdGdsLnN0ZW5jaWxNYXNrKCAweGZmZmZmZmZmICk7XG5cdFx0Z2wuc3RlbmNpbEZ1bmMoIDUxOSwgMCwgMHhmZmZmZmZmZiApO1xuXHRcdGdsLnN0ZW5jaWxPcCggNzY4MCwgNzY4MCwgNzY4MCApO1xuXHRcdGdsLmNsZWFyU3RlbmNpbCggMCApO1xuXG5cdFx0Z2wuY3VsbEZhY2UoIDEwMjkgKTtcblx0XHRnbC5mcm9udEZhY2UoIDIzMDUgKTtcblxuXHRcdGdsLnBvbHlnb25PZmZzZXQoIDAsIDAgKTtcblxuXHRcdGdsLmFjdGl2ZVRleHR1cmUoIDMzOTg0ICk7XG5cblx0XHRnbC5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBudWxsICk7XG5cblx0XHRpZiAoIGlzV2ViR0wyID09PSB0cnVlICkge1xuXG5cdFx0XHRnbC5iaW5kRnJhbWVidWZmZXIoIDM2MDA5LCBudWxsICk7XG5cdFx0XHRnbC5iaW5kRnJhbWVidWZmZXIoIDM2MDA4LCBudWxsICk7XG5cblx0XHR9XG5cblx0XHRnbC51c2VQcm9ncmFtKCBudWxsICk7XG5cblx0XHRnbC5saW5lV2lkdGgoIDEgKTtcblxuXHRcdGdsLnNjaXNzb3IoIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCApO1xuXHRcdGdsLnZpZXdwb3J0KCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQgKTtcblxuXHRcdC8vIHJlc2V0IGludGVybmFsc1xuXG5cdFx0ZW5hYmxlZENhcGFiaWxpdGllcyA9IHt9O1xuXG5cdFx0Y3VycmVudFRleHR1cmVTbG90ID0gbnVsbDtcblx0XHRjdXJyZW50Qm91bmRUZXh0dXJlcyA9IHt9O1xuXG5cdFx0Y3VycmVudEJvdW5kRnJhbWVidWZmZXJzID0ge307XG5cdFx0Y3VycmVudERyYXdidWZmZXJzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRkZWZhdWx0RHJhd2J1ZmZlcnMgPSBbXTtcblxuXHRcdGN1cnJlbnRQcm9ncmFtID0gbnVsbDtcblxuXHRcdGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0XHRjdXJyZW50QmxlbmRpbmcgPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gbnVsbDtcblx0XHRjdXJyZW50QmxlbmRTcmMgPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZERzdCA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7XG5cdFx0Y3VycmVudEJsZW5kU3JjQWxwaGEgPSBudWxsO1xuXHRcdGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDtcblx0XHRjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBmYWxzZTtcblxuXHRcdGN1cnJlbnRGbGlwU2lkZWQgPSBudWxsO1xuXHRcdGN1cnJlbnRDdWxsRmFjZSA9IG51bGw7XG5cblx0XHRjdXJyZW50TGluZVdpZHRoID0gbnVsbDtcblxuXHRcdGN1cnJlbnRQb2x5Z29uT2Zmc2V0RmFjdG9yID0gbnVsbDtcblx0XHRjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gbnVsbDtcblxuXHRcdGN1cnJlbnRTY2lzc29yLnNldCggMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0ICk7XG5cdFx0Y3VycmVudFZpZXdwb3J0LnNldCggMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0ICk7XG5cblx0XHRjb2xvckJ1ZmZlci5yZXNldCgpO1xuXHRcdGRlcHRoQnVmZmVyLnJlc2V0KCk7XG5cdFx0c3RlbmNpbEJ1ZmZlci5yZXNldCgpO1xuXG5cdH1cblxuXHRyZXR1cm4ge1xuXG5cdFx0YnVmZmVyczoge1xuXHRcdFx0Y29sb3I6IGNvbG9yQnVmZmVyLFxuXHRcdFx0ZGVwdGg6IGRlcHRoQnVmZmVyLFxuXHRcdFx0c3RlbmNpbDogc3RlbmNpbEJ1ZmZlclxuXHRcdH0sXG5cblx0XHRlbmFibGU6IGVuYWJsZSxcblx0XHRkaXNhYmxlOiBkaXNhYmxlLFxuXG5cdFx0YmluZEZyYW1lYnVmZmVyOiBiaW5kRnJhbWVidWZmZXIsXG5cdFx0ZHJhd0J1ZmZlcnM6IGRyYXdCdWZmZXJzLFxuXG5cdFx0dXNlUHJvZ3JhbTogdXNlUHJvZ3JhbSxcblxuXHRcdHNldEJsZW5kaW5nOiBzZXRCbGVuZGluZyxcblx0XHRzZXRNYXRlcmlhbDogc2V0TWF0ZXJpYWwsXG5cblx0XHRzZXRGbGlwU2lkZWQ6IHNldEZsaXBTaWRlZCxcblx0XHRzZXRDdWxsRmFjZTogc2V0Q3VsbEZhY2UsXG5cblx0XHRzZXRMaW5lV2lkdGg6IHNldExpbmVXaWR0aCxcblx0XHRzZXRQb2x5Z29uT2Zmc2V0OiBzZXRQb2x5Z29uT2Zmc2V0LFxuXG5cdFx0c2V0U2Npc3NvclRlc3Q6IHNldFNjaXNzb3JUZXN0LFxuXG5cdFx0YWN0aXZlVGV4dHVyZTogYWN0aXZlVGV4dHVyZSxcblx0XHRiaW5kVGV4dHVyZTogYmluZFRleHR1cmUsXG5cdFx0dW5iaW5kVGV4dHVyZTogdW5iaW5kVGV4dHVyZSxcblx0XHRjb21wcmVzc2VkVGV4SW1hZ2UyRDogY29tcHJlc3NlZFRleEltYWdlMkQsXG5cdFx0dGV4SW1hZ2UyRDogdGV4SW1hZ2UyRCxcblx0XHR0ZXhJbWFnZTNEOiB0ZXhJbWFnZTNELFxuXG5cdFx0dGV4U3RvcmFnZTJEOiB0ZXhTdG9yYWdlMkQsXG5cdFx0dGV4U3RvcmFnZTNEOiB0ZXhTdG9yYWdlM0QsXG5cdFx0dGV4U3ViSW1hZ2UyRDogdGV4U3ViSW1hZ2UyRCxcblx0XHR0ZXhTdWJJbWFnZTNEOiB0ZXhTdWJJbWFnZTNELFxuXHRcdGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEOiBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCxcblxuXHRcdHNjaXNzb3I6IHNjaXNzb3IsXG5cdFx0dmlld3BvcnQ6IHZpZXdwb3J0LFxuXG5cdFx0cmVzZXQ6IHJlc2V0XG5cblx0fTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTFRleHR1cmVzKCBfZ2wsIGV4dGVuc2lvbnMsIHN0YXRlLCBwcm9wZXJ0aWVzLCBjYXBhYmlsaXRpZXMsIHV0aWxzLCBpbmZvICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXHRjb25zdCBtYXhUZXh0dXJlcyA9IGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlcztcblx0Y29uc3QgbWF4Q3ViZW1hcFNpemUgPSBjYXBhYmlsaXRpZXMubWF4Q3ViZW1hcFNpemU7XG5cdGNvbnN0IG1heFRleHR1cmVTaXplID0gY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplO1xuXHRjb25zdCBtYXhTYW1wbGVzID0gY2FwYWJpbGl0aWVzLm1heFNhbXBsZXM7XG5cdGNvbnN0IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IGV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyApO1xuXHRjb25zdCBNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24gPSBoYXNNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPyBleHRlbnNpb25zLmdldCggJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScgKSA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBfdmlkZW9UZXh0dXJlcyA9IG5ldyBXZWFrTWFwKCk7XG5cdGxldCBfY2FudmFzO1xuXG5cdC8vIGNvcmRvdmEgaU9TIChhcyBvZiA1LjApIHN0aWxsIHVzZXMgVUlXZWJWaWV3LCB3aGljaCBwcm92aWRlcyBPZmZzY3JlZW5DYW52YXMsXG5cdC8vIGFsc28gT2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiKSwgYnV0IG5vdCBPZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpIVxuXHQvLyBTb21lIGltcGxlbWVudGF0aW9ucyBtYXkgb25seSBpbXBsZW1lbnQgT2Zmc2NyZWVuQ2FudmFzIHBhcnRpYWxseSAoZS5nLiBsYWNraW5nIDJkKS5cblxuXHRsZXQgdXNlT2Zmc2NyZWVuQ2FudmFzID0gZmFsc2U7XG5cblx0dHJ5IHtcblxuXHRcdHVzZU9mZnNjcmVlbkNhbnZhcyA9IHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnXG5cdFx0XHQmJiAoIG5ldyBPZmZzY3JlZW5DYW52YXMoIDEsIDEgKS5nZXRDb250ZXh0KCAnMmQnICkgKSAhPT0gbnVsbDtcblxuXHR9IGNhdGNoICggZXJyICkge1xuXG5cdFx0Ly8gSWdub3JlIGFueSBlcnJvcnNcblxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlQ2FudmFzKCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0Ly8gVXNlIE9mZnNjcmVlbkNhbnZhcyB3aGVuIGF2YWlsYWJsZS4gU3BlY2lhbGx5IG5lZWRlZCBpbiB3ZWIgd29ya2Vyc1xuXG5cdFx0cmV0dXJuIHVzZU9mZnNjcmVlbkNhbnZhcyA/XG5cdFx0XHRuZXcgT2Zmc2NyZWVuQ2FudmFzKCB3aWR0aCwgaGVpZ2h0ICkgOiBjcmVhdGVFbGVtZW50TlMoICdjYW52YXMnICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2l6ZUltYWdlKCBpbWFnZSwgbmVlZHNQb3dlck9mVHdvLCBuZWVkc05ld0NhbnZhcywgbWF4U2l6ZSApIHtcblxuXHRcdGxldCBzY2FsZSA9IDE7XG5cblx0XHQvLyBoYW5kbGUgY2FzZSBpZiB0ZXh0dXJlIGV4Y2VlZHMgbWF4IHNpemVcblxuXHRcdGlmICggaW1hZ2Uud2lkdGggPiBtYXhTaXplIHx8IGltYWdlLmhlaWdodCA+IG1heFNpemUgKSB7XG5cblx0XHRcdHNjYWxlID0gbWF4U2l6ZSAvIE1hdGgubWF4KCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHQvLyBvbmx5IHBlcmZvcm0gcmVzaXplIGlmIG5lY2Vzc2FyeVxuXG5cdFx0aWYgKCBzY2FsZSA8IDEgfHwgbmVlZHNQb3dlck9mVHdvID09PSB0cnVlICkge1xuXG5cdFx0XHQvLyBvbmx5IHBlcmZvcm0gcmVzaXplIGZvciBjZXJ0YWluIGltYWdlIHR5cGVzXG5cblx0XHRcdGlmICggKCB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICkgfHxcblx0XHRcdFx0KCB0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgKSB8fFxuXHRcdFx0XHQoIHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCApICkge1xuXG5cdFx0XHRcdGNvbnN0IGZsb29yID0gbmVlZHNQb3dlck9mVHdvID8gZmxvb3JQb3dlck9mVHdvIDogTWF0aC5mbG9vcjtcblxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGZsb29yKCBzY2FsZSAqIGltYWdlLndpZHRoICk7XG5cdFx0XHRcdGNvbnN0IGhlaWdodCA9IGZsb29yKCBzY2FsZSAqIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHRcdGlmICggX2NhbnZhcyA9PT0gdW5kZWZpbmVkICkgX2NhbnZhcyA9IGNyZWF0ZUNhbnZhcyggd2lkdGgsIGhlaWdodCApO1xuXG5cdFx0XHRcdC8vIGN1YmUgdGV4dHVyZXMgY2FuJ3QgcmV1c2UgdGhlIHNhbWUgY2FudmFzXG5cblx0XHRcdFx0Y29uc3QgY2FudmFzID0gbmVlZHNOZXdDYW52YXMgPyBjcmVhdGVDYW52YXMoIHdpZHRoLCBoZWlnaHQgKSA6IF9jYW52YXM7XG5cblx0XHRcdFx0Y2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0XHRcdGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cdFx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBpbWFnZS5oZWlnaHQgKyAnKSB0byAoJyArIHdpZHRoICsgJ3gnICsgaGVpZ2h0ICsgJykuJyApO1xuXG5cdFx0XHRcdHJldHVybiBjYW52YXM7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCAnZGF0YScgaW4gaW1hZ2UgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBpbWFnZS5oZWlnaHQgKyAnKS4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBpbWFnZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBpc1Bvd2VyT2ZUd28kMSggaW1hZ2UgKSB7XG5cblx0XHRyZXR1cm4gaXNQb3dlck9mVHdvKCBpbWFnZS53aWR0aCApICYmIGlzUG93ZXJPZlR3byggaW1hZ2UuaGVpZ2h0ICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHRleHR1cmVOZWVkc1Bvd2VyT2ZUd28oIHRleHR1cmUgKSB7XG5cblx0XHRpZiAoIGlzV2ViR0wyICkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuICggdGV4dHVyZS53cmFwUyAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8fCB0ZXh0dXJlLndyYXBUICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nICkgfHxcblx0XHRcdCggdGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlciApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApIHtcblxuXHRcdHJldHVybiB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyAmJiBzdXBwb3J0c01pcHMgJiZcblx0XHRcdHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFyZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXI7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlTWlwbWFwKCB0YXJnZXQgKSB7XG5cblx0XHRfZ2wuZ2VuZXJhdGVNaXBtYXAoIHRhcmdldCApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbnRlcm5hbEZvcm1hdCggaW50ZXJuYWxGb3JtYXROYW1lLCBnbEZvcm1hdCwgZ2xUeXBlLCBlbmNvZGluZywgaXNWaWRlb1RleHR1cmUgPSBmYWxzZSApIHtcblxuXHRcdGlmICggaXNXZWJHTDIgPT09IGZhbHNlICkgcmV0dXJuIGdsRm9ybWF0O1xuXG5cdFx0aWYgKCBpbnRlcm5hbEZvcm1hdE5hbWUgIT09IG51bGwgKSB7XG5cblx0XHRcdGlmICggX2dsWyBpbnRlcm5hbEZvcm1hdE5hbWUgXSAhPT0gdW5kZWZpbmVkICkgcmV0dXJuIF9nbFsgaW50ZXJuYWxGb3JtYXROYW1lIF07XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgXFwnJyArIGludGVybmFsRm9ybWF0TmFtZSArICdcXCcnICk7XG5cblx0XHR9XG5cblx0XHRsZXQgaW50ZXJuYWxGb3JtYXQgPSBnbEZvcm1hdDtcblxuXHRcdGlmICggZ2xGb3JtYXQgPT09IDY0MDMgKSB7XG5cblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTI2ICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyNjtcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTMxICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyNTtcblx0XHRcdGlmICggZ2xUeXBlID09PSA1MTIxICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyMTtcblxuXHRcdH1cblxuXHRcdGlmICggZ2xGb3JtYXQgPT09IDMzMzE5ICkge1xuXG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEyNiApIGludGVybmFsRm9ybWF0ID0gMzMzMjg7XG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEzMSApIGludGVybmFsRm9ybWF0ID0gMzMzMjc7XG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEyMSApIGludGVybmFsRm9ybWF0ID0gMzMzMjM7XG5cblx0XHR9XG5cblx0XHRpZiAoIGdsRm9ybWF0ID09PSA2NDA4ICkge1xuXG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEyNiApIGludGVybmFsRm9ybWF0ID0gMzQ4MzY7XG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEzMSApIGludGVybmFsRm9ybWF0ID0gMzQ4NDI7XG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gNTEyMSApIGludGVybmFsRm9ybWF0ID0gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICYmIGlzVmlkZW9UZXh0dXJlID09PSBmYWxzZSApID8gMzU5MDcgOiAzMjg1Njtcblx0XHRcdGlmICggZ2xUeXBlID09PSAzMjgxOSApIGludGVybmFsRm9ybWF0ID0gMzI4NTQ7XG5cdFx0XHRpZiAoIGdsVHlwZSA9PT0gMzI4MjAgKSBpbnRlcm5hbEZvcm1hdCA9IDMyODU1O1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBpbnRlcm5hbEZvcm1hdCA9PT0gMzMzMjUgfHwgaW50ZXJuYWxGb3JtYXQgPT09IDMzMzI2IHx8XG5cdFx0XHRpbnRlcm5hbEZvcm1hdCA9PT0gMzMzMjcgfHwgaW50ZXJuYWxGb3JtYXQgPT09IDMzMzI4IHx8XG5cdFx0XHRpbnRlcm5hbEZvcm1hdCA9PT0gMzQ4NDIgfHwgaW50ZXJuYWxGb3JtYXQgPT09IDM0ODM2ICkge1xuXG5cdFx0XHRleHRlbnNpb25zLmdldCggJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gaW50ZXJuYWxGb3JtYXQ7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldE1pcExldmVscyggdGV4dHVyZSwgaW1hZ2UsIHN1cHBvcnRzTWlwcyApIHtcblxuXHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKSA9PT0gdHJ1ZSB8fCAoIHRleHR1cmUuaXNGcmFtZWJ1ZmZlclRleHR1cmUgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlciApICkge1xuXG5cdFx0XHRyZXR1cm4gTWF0aC5sb2cyKCBNYXRoLm1heCggaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApICkgKyAxO1xuXG5cdFx0fSBlbHNlIGlmICggdGV4dHVyZS5taXBtYXBzICE9PSB1bmRlZmluZWQgJiYgdGV4dHVyZS5taXBtYXBzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdC8vIHVzZXItZGVmaW5lZCBtaXBtYXBzXG5cblx0XHRcdHJldHVybiB0ZXh0dXJlLm1pcG1hcHMubGVuZ3RoO1xuXG5cdFx0fSBlbHNlIGlmICggdGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICYmIEFycmF5LmlzQXJyYXkoIHRleHR1cmUuaW1hZ2UgKSApIHtcblxuXHRcdFx0cmV0dXJuIGltYWdlLm1pcG1hcHMubGVuZ3RoO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gdGV4dHVyZSB3aXRob3V0IG1pcG1hcHMgKG9ubHkgYmFzZSBsZXZlbClcblxuXHRcdFx0cmV0dXJuIDE7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vIEZhbGxiYWNrIGZpbHRlcnMgZm9yIG5vbi1wb3dlci1vZi0yIHRleHR1cmVzXG5cblx0ZnVuY3Rpb24gZmlsdGVyRmFsbGJhY2soIGYgKSB7XG5cblx0XHRpZiAoIGYgPT09IE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlciApIHtcblxuXHRcdFx0cmV0dXJuIDk3Mjg7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gOTcyOTtcblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBvblRleHR1cmVEaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSBldmVudC50YXJnZXQ7XG5cblx0XHR0ZXh0dXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApO1xuXG5cdFx0ZGVhbGxvY2F0ZVRleHR1cmUoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSApIHtcblxuXHRcdFx0X3ZpZGVvVGV4dHVyZXMuZGVsZXRlKCB0ZXh0dXJlICk7XG5cblx0XHR9XG5cblx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcyAtLTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25SZW5kZXJUYXJnZXREaXNwb3NlKCBldmVudCApIHtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuXHRcdHJlbmRlclRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uUmVuZGVyVGFyZ2V0RGlzcG9zZSApO1xuXG5cdFx0ZGVhbGxvY2F0ZVJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gZGVhbGxvY2F0ZVRleHR1cmUoIHRleHR1cmUgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID09PSB1bmRlZmluZWQgKSByZXR1cm47XG5cblx0XHRfZ2wuZGVsZXRlVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHRcdHByb3BlcnRpZXMucmVtb3ZlKCB0ZXh0dXJlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRlYWxsb2NhdGVSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0aWYgKCAhIHJlbmRlclRhcmdldCApIHJldHVybjtcblxuXHRcdGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0X2dsLmRlbGV0ZVRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cblx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzIC0tO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICkge1xuXG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKTtcblxuXHRcdH1cblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRcdF9nbC5kZWxldGVGcmFtZWJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbIGkgXSApO1xuXHRcdFx0XHRpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyICkgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfZ2wuZGVsZXRlRnJhbWVidWZmZXIoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyICk7XG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyICkgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgKTtcblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIgKSBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyICk7XG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyICkgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlciggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIgKTtcblx0XHRcdGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRleHR1cmUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZVsgaSBdICk7XG5cblx0XHRcdFx0aWYgKCBhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdF9nbC5kZWxldGVUZXh0dXJlKCBhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdFx0XHRcdFx0aW5mby5tZW1vcnkudGV4dHVyZXMgLS07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByb3BlcnRpZXMucmVtb3ZlKCB0ZXh0dXJlWyBpIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cHJvcGVydGllcy5yZW1vdmUoIHRleHR1cmUgKTtcblx0XHRwcm9wZXJ0aWVzLnJlbW92ZSggcmVuZGVyVGFyZ2V0ICk7XG5cblx0fVxuXG5cdC8vXG5cblx0bGV0IHRleHR1cmVVbml0cyA9IDA7XG5cblx0ZnVuY3Rpb24gcmVzZXRUZXh0dXJlVW5pdHMoKSB7XG5cblx0XHR0ZXh0dXJlVW5pdHMgPSAwO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBhbGxvY2F0ZVRleHR1cmVVbml0KCkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZVVuaXQgPSB0ZXh0dXJlVW5pdHM7XG5cblx0XHRpZiAoIHRleHR1cmVVbml0ID49IG1heFRleHR1cmVzICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICcgKyB0ZXh0dXJlVW5pdCArICcgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICcgKyBtYXhUZXh0dXJlcyApO1xuXG5cdFx0fVxuXG5cdFx0dGV4dHVyZVVuaXRzICs9IDE7XG5cblx0XHRyZXR1cm4gdGV4dHVyZVVuaXQ7XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCBzbG90ICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlICkgdXBkYXRlVmlkZW9UZXh0dXJlKCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7XG5cblx0XHRcdGNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0aWYgKCBpbWFnZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCcgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUnICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dXBsb2FkVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QgKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggMzU1MywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZTJEQXJyYXkoIHRleHR1cmUsIHNsb3QgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7XG5cblx0XHRcdHVwbG9hZFRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90ICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTtcblx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggMzU4NjYsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFRleHR1cmUzRCggdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKTtcblxuXHRcdGlmICggdGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0dXBsb2FkVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoIDMzOTg0ICsgc2xvdCApO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzMjg3OSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VGV4dHVyZUN1YmUoIHRleHR1cmUsIHNsb3QgKSB7XG5cblx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7XG5cblx0XHRpZiAoIHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7XG5cblx0XHRcdHVwbG9hZEN1YmVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoIDM0MDY3LCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdH1cblxuXHRjb25zdCB3cmFwcGluZ1RvR0wgPSB7XG5cdFx0WyBSZXBlYXRXcmFwcGluZyBdOiAxMDQ5Nyxcblx0XHRbIENsYW1wVG9FZGdlV3JhcHBpbmcgXTogMzMwNzEsXG5cdFx0WyBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nIF06IDMzNjQ4XG5cdH07XG5cblx0Y29uc3QgZmlsdGVyVG9HTCA9IHtcblx0XHRbIE5lYXJlc3RGaWx0ZXIgXTogOTcyOCxcblx0XHRbIE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyIF06IDk5ODQsXG5cdFx0WyBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyIF06IDk5ODYsXG5cblx0XHRbIExpbmVhckZpbHRlciBdOiA5NzI5LFxuXHRcdFsgTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlciBdOiA5OTg1LFxuXHRcdFsgTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyIF06IDk5ODdcblx0fTtcblxuXHRmdW5jdGlvbiBzZXRUZXh0dXJlUGFyYW1ldGVycyggdGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApIHtcblxuXHRcdGlmICggc3VwcG9ydHNNaXBzICkge1xuXG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQyLCB3cmFwcGluZ1RvR0xbIHRleHR1cmUud3JhcFMgXSApO1xuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0Mywgd3JhcHBpbmdUb0dMWyB0ZXh0dXJlLndyYXBUIF0gKTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlVHlwZSA9PT0gMzI4NzkgfHwgdGV4dHVyZVR5cGUgPT09IDM1ODY2ICkge1xuXG5cdFx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMzI4ODIsIHdyYXBwaW5nVG9HTFsgdGV4dHVyZS53cmFwUiBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MCwgZmlsdGVyVG9HTFsgdGV4dHVyZS5tYWdGaWx0ZXIgXSApO1xuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MSwgZmlsdGVyVG9HTFsgdGV4dHVyZS5taW5GaWx0ZXIgXSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MiwgMzMwNzEgKTtcblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDMsIDMzMDcxICk7XG5cblx0XHRcdGlmICggdGV4dHVyZVR5cGUgPT09IDMyODc5IHx8IHRleHR1cmVUeXBlID09PSAzNTg2NiApIHtcblxuXHRcdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDMyODgyLCAzMzA3MSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4dHVyZS53cmFwUyAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8fCB0ZXh0dXJlLndyYXBUICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuJyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDAsIGZpbHRlckZhbGxiYWNrKCB0ZXh0dXJlLm1hZ0ZpbHRlciApICk7XG5cdFx0XHRfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIDEwMjQxLCBmaWx0ZXJGYWxsYmFjayggdGV4dHVyZS5taW5GaWx0ZXIgKSApO1xuXG5cdFx0XHRpZiAoIHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFyZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXIgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBleHRlbnNpb25zLmhhcyggJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnICk7XG5cblx0XHRcdGlmICggdGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5oYXMoICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInICkgPT09IGZhbHNlICkgcmV0dXJuOyAvLyB2ZXJpZnkgZXh0ZW5zaW9uIGZvciBXZWJHTCAxIGFuZCBXZWJHTCAyXG5cdFx0XHRpZiAoIGlzV2ViR0wyID09PSBmYWxzZSAmJiAoIHRleHR1cmUudHlwZSA9PT0gSGFsZkZsb2F0VHlwZSAmJiBleHRlbnNpb25zLmhhcyggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyApID09PSBmYWxzZSApICkgcmV0dXJuOyAvLyB2ZXJpZnkgZXh0ZW5zaW9uIGZvciBXZWJHTCAxIG9ubHlcblxuXHRcdFx0aWYgKCB0ZXh0dXJlLmFuaXNvdHJvcHkgPiAxIHx8IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICkuX19jdXJyZW50QW5pc290cm9weSApIHtcblxuXHRcdFx0XHRfZ2wudGV4UGFyYW1ldGVyZiggdGV4dHVyZVR5cGUsIGV4dGVuc2lvbi5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgTWF0aC5taW4oIHRleHR1cmUuYW5pc290cm9weSwgY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKSApICk7XG5cdFx0XHRcdHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICkuX19jdXJyZW50QW5pc290cm9weSA9IHRleHR1cmUuYW5pc290cm9weTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBpbml0VGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUgKSB7XG5cblx0XHRpZiAoIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID0gdHJ1ZTtcblxuXHRcdFx0dGV4dHVyZS5hZGRFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTtcblxuXHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdFx0XHRpbmZvLm1lbW9yeS50ZXh0dXJlcyArKztcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBsb2FkVGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUsIHNsb3QgKSB7XG5cblx0XHRsZXQgdGV4dHVyZVR5cGUgPSAzNTUzO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5ICkgdGV4dHVyZVR5cGUgPSAzNTg2Njtcblx0XHRpZiAoIHRleHR1cmUuaXNEYXRhVGV4dHVyZTNEICkgdGV4dHVyZVR5cGUgPSAzMjg3OTtcblxuXHRcdGluaXRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSApO1xuXG5cdFx0c3RhdGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7XG5cdFx0c3RhdGUuYmluZFRleHR1cmUoIHRleHR1cmVUeXBlLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MCwgdGV4dHVyZS5mbGlwWSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDEsIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNywgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQzLCAwICk7XG5cblx0XHRjb25zdCBuZWVkc1Bvd2VyT2ZUd28gPSB0ZXh0dXJlTmVlZHNQb3dlck9mVHdvKCB0ZXh0dXJlICkgJiYgaXNQb3dlck9mVHdvJDEoIHRleHR1cmUuaW1hZ2UgKSA9PT0gZmFsc2U7XG5cdFx0bGV0IGltYWdlID0gcmVzaXplSW1hZ2UoIHRleHR1cmUuaW1hZ2UsIG5lZWRzUG93ZXJPZlR3bywgZmFsc2UsIG1heFRleHR1cmVTaXplICk7XG5cdFx0aW1hZ2UgPSB2ZXJpZnlDb2xvclNwYWNlKCB0ZXh0dXJlLCBpbWFnZSApO1xuXG5cdFx0Y29uc3Qgc3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEoIGltYWdlICkgfHwgaXNXZWJHTDIsXG5cdFx0XHRnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cblx0XHRsZXQgZ2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICksXG5cdFx0XHRnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQoIHRleHR1cmUuaW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIHRleHR1cmUuZW5jb2RpbmcsIHRleHR1cmUuaXNWaWRlb1RleHR1cmUgKTtcblxuXHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKCB0ZXh0dXJlVHlwZSwgdGV4dHVyZSwgc3VwcG9ydHNNaXBzICk7XG5cblx0XHRsZXQgbWlwbWFwO1xuXHRcdGNvbnN0IG1pcG1hcHMgPSB0ZXh0dXJlLm1pcG1hcHM7XG5cblx0XHRjb25zdCB1c2VUZXhTdG9yYWdlID0gKCBpc1dlYkdMMiAmJiB0ZXh0dXJlLmlzVmlkZW9UZXh0dXJlICE9PSB0cnVlICk7XG5cdFx0Y29uc3QgYWxsb2NhdGVNZW1vcnkgPSAoIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9PT0gdW5kZWZpbmVkICk7XG5cdFx0Y29uc3QgbGV2ZWxzID0gZ2V0TWlwTGV2ZWxzKCB0ZXh0dXJlLCBpbWFnZSwgc3VwcG9ydHNNaXBzICk7XG5cblx0XHRpZiAoIHRleHR1cmUuaXNEZXB0aFRleHR1cmUgKSB7XG5cblx0XHRcdC8vIHBvcHVsYXRlIGRlcHRoIHRleHR1cmUgd2l0aCBkdW1teSBkYXRhXG5cblx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSA2NDAyO1xuXG5cdFx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRcdGlmICggdGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUgKSB7XG5cblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gMzYwMTI7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggdGV4dHVyZS50eXBlID09PSBVbnNpZ25lZEludFR5cGUgKSB7XG5cblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gMzMxOTA7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggdGV4dHVyZS50eXBlID09PSBVbnNpZ25lZEludDI0OFR5cGUgKSB7XG5cblx0XHRcdFx0XHRnbEludGVybmFsRm9ybWF0ID0gMzUwNTY7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzMzE4OTsgLy8gV2ViR0wyIHJlcXVpcmVzIHNpemVkIGludGVybmFsZm9ybWF0IGZvciBnbFRleEltYWdlMkRcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHZhbGlkYXRpb24gY2hlY2tzIGZvciBXZWJHTCAxXG5cblx0XHRcdGlmICggdGV4dHVyZS5mb3JtYXQgPT09IERlcHRoRm9ybWF0ICYmIGdsSW50ZXJuYWxGb3JtYXQgPT09IDY0MDIgKSB7XG5cblx0XHRcdFx0Ly8gVGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzIGdlbmVyYXRlZCBieSB0ZXhJbWFnZTJEIGlmIGZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgYXJlXG5cdFx0XHRcdC8vIERFUFRIX0NPTVBPTkVOVCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfU0hPUlQgb3IgVU5TSUdORURfSU5UXG5cdFx0XHRcdC8vIChodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL1dFQkdMX2RlcHRoX3RleHR1cmUvKVxuXHRcdFx0XHRpZiAoIHRleHR1cmUudHlwZSAhPT0gVW5zaWduZWRTaG9ydFR5cGUgJiYgdGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZEludFR5cGUgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuJyApO1xuXG5cdFx0XHRcdFx0dGV4dHVyZS50eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7XG5cdFx0XHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGV4dHVyZS5mb3JtYXQgPT09IERlcHRoU3RlbmNpbEZvcm1hdCAmJiBnbEludGVybmFsRm9ybWF0ID09PSA2NDAyICkge1xuXG5cdFx0XHRcdC8vIERlcHRoIHN0ZW5jaWwgdGV4dHVyZXMgbmVlZCB0aGUgREVQVEhfU1RFTkNJTCBpbnRlcm5hbCBmb3JtYXRcblx0XHRcdFx0Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pXG5cdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzNDA0MTtcblxuXHRcdFx0XHQvLyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBhcmVcblx0XHRcdFx0Ly8gREVQVEhfU1RFTkNJTCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfSU5UXzI0XzhfV0VCR0wuXG5cdFx0XHRcdC8vIChodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL1dFQkdMX2RlcHRoX3RleHR1cmUvKVxuXHRcdFx0XHRpZiAoIHRleHR1cmUudHlwZSAhPT0gVW5zaWduZWRJbnQyNDhUeXBlICkge1xuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4nICk7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLnR5cGUgPSBVbnNpZ25lZEludDI0OFR5cGU7XG5cdFx0XHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSAmJiBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIDEsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRleHR1cmUuaXNEYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0Ly8gdXNlIG1hbnVhbGx5IGNyZWF0ZWQgbWlwbWFwcyBpZiBhdmFpbGFibGVcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBubyBtYW51YWwgbWlwbWFwc1xuXHRcdFx0Ly8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBtaXBtYXAgbGV2ZWxzXG5cblx0XHRcdGlmICggbWlwbWFwcy5sZW5ndGggPiAwICYmIHN1cHBvcnRzTWlwcyApIHtcblxuXHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwc1sgMCBdLndpZHRoLCBtaXBtYXBzWyAwIF0uaGVpZ2h0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtaXBtYXBzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0bWlwbWFwID0gbWlwbWFwc1sgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNTUzLCAwLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCBpLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBhbGxvY2F0ZU1lbW9yeSApIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNTUzLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM1NTMsIDAsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRCggMzU1MywgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggdGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICkge1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNTUzLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcHNbIDAgXS53aWR0aCwgbWlwbWFwc1sgMCBdLmhlaWdodCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtaXBtYXBzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdG1pcG1hcCA9IG1pcG1hcHNbIGkgXTtcblxuXHRcdFx0XHRpZiAoIHRleHR1cmUuZm9ybWF0ICE9PSBSR0JBRm9ybWF0ICkge1xuXG5cdFx0XHRcdFx0aWYgKCBnbEZvcm1hdCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKCAzNTUzLCBpLCAwLCAwLCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIGdsRm9ybWF0LCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhJbWFnZTJEKCAzNTUzLCBpLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCknICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzU1MywgaSwgMCwgMCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRCggMzU1MywgaSwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggdGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSApIHtcblxuXHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdGlmICggYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlM0QoIDM1ODY2LCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlM0QoIDM1ODY2LCAwLCAwLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlM0QoIDM1ODY2LCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRCApIHtcblxuXHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdGlmICggYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlM0QoIDMyODc5LCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlM0QoIDMyODc5LCAwLCAwLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlM0QoIDMyODc5LCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCBpbWFnZS5kZXB0aCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRnJhbWVidWZmZXJUZXh0dXJlICkge1xuXG5cdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgJiYgYWxsb2NhdGVNZW1vcnkgKSB7XG5cblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNTUzLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHJlZ3VsYXIgVGV4dHVyZSAoaW1hZ2UsIHZpZGVvLCBjYW52YXMpXG5cblx0XHRcdC8vIHVzZSBtYW51YWxseSBjcmVhdGVkIG1pcG1hcHMgaWYgYXZhaWxhYmxlXG5cdFx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gbWFudWFsIG1pcG1hcHNcblx0XHRcdC8vIHNldCAwIGxldmVsIG1pcG1hcCBhbmQgdGhlbiB1c2UgR0wgdG8gZ2VuZXJhdGUgb3RoZXIgbWlwbWFwIGxldmVsc1xuXG5cdFx0XHRpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBzdXBwb3J0c01pcHMgKSB7XG5cblx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNTUzLCBsZXZlbHMsIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcHNbIDAgXS53aWR0aCwgbWlwbWFwc1sgMCBdLmhlaWdodCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdG1pcG1hcCA9IG1pcG1hcHNbIGkgXTtcblxuXHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzU1MywgaSwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCBpLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdG9yYWdlMkQoIDM1NTMsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzU1MywgMCwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRCggMzU1MywgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKSApIHtcblxuXHRcdFx0Z2VuZXJhdGVNaXBtYXAoIHRleHR1cmVUeXBlICk7XG5cblx0XHR9XG5cblx0XHR0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gPSB0ZXh0dXJlLnZlcnNpb247XG5cblx0XHRpZiAoIHRleHR1cmUub25VcGRhdGUgKSB0ZXh0dXJlLm9uVXBkYXRlKCB0ZXh0dXJlICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwbG9hZEN1YmVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGlmICggdGV4dHVyZS5pbWFnZS5sZW5ndGggIT09IDYgKSByZXR1cm47XG5cblx0XHRpbml0VGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUgKTtcblxuXHRcdHN0YXRlLmFjdGl2ZVRleHR1cmUoIDMzOTg0ICsgc2xvdCApO1xuXHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzNDA2NywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDAsIHRleHR1cmUuZmxpcFkgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQxLCB0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTcsIHRleHR1cmUudW5wYWNrQWxpZ25tZW50ICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MywgMCApO1xuXG5cdFx0Y29uc3QgaXNDb21wcmVzc2VkID0gKCB0ZXh0dXJlICYmICggdGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlIHx8IHRleHR1cmUuaW1hZ2VbIDAgXS5pc0NvbXByZXNzZWRUZXh0dXJlICkgKTtcblx0XHRjb25zdCBpc0RhdGFUZXh0dXJlID0gKCB0ZXh0dXJlLmltYWdlWyAwIF0gJiYgdGV4dHVyZS5pbWFnZVsgMCBdLmlzRGF0YVRleHR1cmUgKTtcblxuXHRcdGNvbnN0IGN1YmVJbWFnZSA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0aWYgKCAhIGlzQ29tcHJlc3NlZCAmJiAhIGlzRGF0YVRleHR1cmUgKSB7XG5cblx0XHRcdFx0Y3ViZUltYWdlWyBpIF0gPSByZXNpemVJbWFnZSggdGV4dHVyZS5pbWFnZVsgaSBdLCBmYWxzZSwgdHJ1ZSwgbWF4Q3ViZW1hcFNpemUgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjdWJlSW1hZ2VbIGkgXSA9IGlzRGF0YVRleHR1cmUgPyB0ZXh0dXJlLmltYWdlWyBpIF0uaW1hZ2UgOiB0ZXh0dXJlLmltYWdlWyBpIF07XG5cblx0XHRcdH1cblxuXHRcdFx0Y3ViZUltYWdlWyBpIF0gPSB2ZXJpZnlDb2xvclNwYWNlKCB0ZXh0dXJlLCBjdWJlSW1hZ2VbIGkgXSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaW1hZ2UgPSBjdWJlSW1hZ2VbIDAgXSxcblx0XHRcdHN1cHBvcnRzTWlwcyA9IGlzUG93ZXJPZlR3byQxKCBpbWFnZSApIHx8IGlzV2ViR0wyLFxuXHRcdFx0Z2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyApLFxuXHRcdFx0Z2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICksXG5cdFx0XHRnbEludGVybmFsRm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQoIHRleHR1cmUuaW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIHRleHR1cmUuZW5jb2RpbmcgKTtcblxuXHRcdGNvbnN0IHVzZVRleFN0b3JhZ2UgPSAoIGlzV2ViR0wyICYmIHRleHR1cmUuaXNWaWRlb1RleHR1cmUgIT09IHRydWUgKTtcblx0XHRjb25zdCBhbGxvY2F0ZU1lbW9yeSA9ICggdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID09PSB1bmRlZmluZWQgKTtcblx0XHRsZXQgbGV2ZWxzID0gZ2V0TWlwTGV2ZWxzKCB0ZXh0dXJlLCBpbWFnZSwgc3VwcG9ydHNNaXBzICk7XG5cblx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyggMzQwNjcsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApO1xuXG5cdFx0bGV0IG1pcG1hcHM7XG5cblx0XHRpZiAoIGlzQ29tcHJlc3NlZCApIHtcblxuXHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdHN0YXRlLnRleFN0b3JhZ2UyRCggMzQwNjcsIGxldmVscywgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdFx0bWlwbWFwcyA9IGN1YmVJbWFnZVsgaSBdLm1pcG1hcHM7XG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgbWlwbWFwcy5sZW5ndGg7IGogKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBtaXBtYXAgPSBtaXBtYXBzWyBqIF07XG5cblx0XHRcdFx0XHRpZiAoIHRleHR1cmUuZm9ybWF0ICE9PSBSR0JBRm9ybWF0ICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIGdsRm9ybWF0ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKCAzNDA2OSArIGksIGosIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIG1pcG1hcC5kYXRhICk7XG5cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmNvbXByZXNzZWRUZXhJbWFnZTJEKCAzNDA2OSArIGksIGosIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCknICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGlmICggdXNlVGV4U3RvcmFnZSApIHtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNDA2OSArIGksIGosIDAsIDAsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIGosIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0bWlwbWFwcyA9IHRleHR1cmUubWlwbWFwcztcblxuXHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICYmIGFsbG9jYXRlTWVtb3J5ICkge1xuXG5cdFx0XHRcdC8vIFRPRE86IFVuaWZvcm1seSBoYW5kbGUgbWlwbWFwIGRlZmluaXRpb25zXG5cdFx0XHRcdC8vIE5vcm1hbCB0ZXh0dXJlcyBhbmQgY29tcHJlc3NlZCBjdWJlIHRleHR1cmVzIGRlZmluZSBiYXNlIGxldmVsICsgbWlwcyB3aXRoIHRoZWlyIG1pcG1hcCBhcnJheVxuXHRcdFx0XHQvLyBVbmNvbXByZXNzZWQgY3ViZSB0ZXh0dXJlcyB1c2UgdGhlaXIgbWlwbWFwIGFycmF5IG9ubHkgZm9yIG1pcHMgKG5vIGJhc2UgbGV2ZWwpXG5cblx0XHRcdFx0aWYgKCBtaXBtYXBzLmxlbmd0aCA+IDAgKSBsZXZlbHMgKys7XG5cblx0XHRcdFx0c3RhdGUudGV4U3RvcmFnZTJEKCAzNDA2NywgbGV2ZWxzLCBnbEludGVybmFsRm9ybWF0LCBjdWJlSW1hZ2VbIDAgXS53aWR0aCwgY3ViZUltYWdlWyAwIF0uaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgNjsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIGlzRGF0YVRleHR1cmUgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM0MDY5ICsgaSwgMCwgMCwgMCwgY3ViZUltYWdlWyBpIF0ud2lkdGgsIGN1YmVJbWFnZVsgaSBdLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlWyBpIF0uZGF0YSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0c3RhdGUudGV4SW1hZ2UyRCggMzQwNjkgKyBpLCAwLCBnbEludGVybmFsRm9ybWF0LCBjdWJlSW1hZ2VbIGkgXS53aWR0aCwgY3ViZUltYWdlWyBpIF0uaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbIGkgXS5kYXRhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBtaXBtYXBzLmxlbmd0aDsgaiArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbWlwbWFwID0gbWlwbWFwc1sgaiBdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWlwbWFwSW1hZ2UgPSBtaXBtYXAuaW1hZ2VbIGkgXS5pbWFnZTtcblxuXHRcdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRleFN1YkltYWdlMkQoIDM0MDY5ICsgaSwgaiArIDEsIDAsIDAsIG1pcG1hcEltYWdlLndpZHRoLCBtaXBtYXBJbWFnZS5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcEltYWdlLmRhdGEgKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIGogKyAxLCBnbEludGVybmFsRm9ybWF0LCBtaXBtYXBJbWFnZS53aWR0aCwgbWlwbWFwSW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXBJbWFnZS5kYXRhICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0aWYgKCB1c2VUZXhTdG9yYWdlICkge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhTdWJJbWFnZTJEKCAzNDA2OSArIGksIDAsIDAsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGN1YmVJbWFnZVsgaSBdICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGN1YmVJbWFnZVsgaSBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBtaXBtYXBzLmxlbmd0aDsgaiArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbWlwbWFwID0gbWlwbWFwc1sgaiBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHVzZVRleFN0b3JhZ2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUudGV4U3ViSW1hZ2UyRCggMzQwNjkgKyBpLCBqICsgMSwgMCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmltYWdlWyBpIF0gKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIGogKyAxLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuaW1hZ2VbIGkgXSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkgKSB7XG5cblx0XHRcdC8vIFdlIGFzc3VtZSBpbWFnZXMgZm9yIGN1YmUgbWFwIGhhdmUgdGhlIHNhbWUgc2l6ZS5cblx0XHRcdGdlbmVyYXRlTWlwbWFwKCAzNDA2NyApO1xuXG5cdFx0fVxuXG5cdFx0dGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4dHVyZS52ZXJzaW9uO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLm9uVXBkYXRlICkgdGV4dHVyZS5vblVwZGF0ZSggdGV4dHVyZSApO1xuXG5cdH1cblxuXHQvLyBSZW5kZXIgdGFyZ2V0c1xuXG5cdC8vIFNldHVwIHN0b3JhZ2UgZm9yIHRhcmdldCB0ZXh0dXJlIGFuZCBiaW5kIGl0IHRvIGNvcnJlY3QgZnJhbWVidWZmZXJcblx0ZnVuY3Rpb24gc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIGZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4dHVyZS50eXBlICk7XG5cdFx0Y29uc3QgZ2xJbnRlcm5hbEZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KCB0ZXh0dXJlLmludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdGlmICggISByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyApIHtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlVGFyZ2V0ID09PSAzMjg3OSB8fCB0ZXh0dXJlVGFyZ2V0ID09PSAzNTg2NiApIHtcblxuXHRcdFx0XHRzdGF0ZS50ZXhJbWFnZTNEKCB0ZXh0dXJlVGFyZ2V0LCAwLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQsIHJlbmRlclRhcmdldC5kZXB0aCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHN0YXRlLnRleEltYWdlMkQoIHRleHR1cmVUYXJnZXQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBmcmFtZWJ1ZmZlciApO1xuXHRcdGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoIDM2MTYwLCBhdHRhY2htZW50LCB0ZXh0dXJlVGFyZ2V0LCBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlLCAwLCBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCAzNjE2MCwgYXR0YWNobWVudCwgdGV4dHVyZVRhcmdldCwgcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSwgMCApO1xuXG5cdFx0fVxuXG5cdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgbnVsbCApO1xuXG5cdH1cblxuXG5cdC8vIFNldHVwIHN0b3JhZ2UgZm9yIGludGVybmFsIGRlcHRoL3N0ZW5jaWwgYnVmZmVycyBhbmQgYmluZCB0byBjb3JyZWN0IGZyYW1lYnVmZmVyXG5cdGZ1bmN0aW9uIHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZSggcmVuZGVyYnVmZmVyLCByZW5kZXJUYXJnZXQsIGlzTXVsdGlzYW1wbGUgKSB7XG5cblx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlciggMzYxNjEsIHJlbmRlcmJ1ZmZlciApO1xuXG5cdFx0aWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgISByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIHtcblxuXHRcdFx0bGV0IGdsSW50ZXJuYWxGb3JtYXQgPSAzMzE4OTtcblxuXHRcdFx0aWYgKCBpc011bHRpc2FtcGxlIHx8IHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSB7XG5cblx0XHRcdFx0Y29uc3QgZGVwdGhUZXh0dXJlID0gcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZTtcblxuXHRcdFx0XHRpZiAoIGRlcHRoVGV4dHVyZSAmJiBkZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGRlcHRoVGV4dHVyZS50eXBlID09PSBGbG9hdFR5cGUgKSB7XG5cblx0XHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzNjAxMjtcblxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIGRlcHRoVGV4dHVyZS50eXBlID09PSBVbnNpZ25lZEludFR5cGUgKSB7XG5cblx0XHRcdFx0XHRcdGdsSW50ZXJuYWxGb3JtYXQgPSAzMzE5MDtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoIDM2MTYxLCBzYW1wbGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSggMzYxNjEsIHNhbXBsZXMsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSggMzYxNjEsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciggMzYxNjAsIDM2MDk2LCAzNjE2MSwgcmVuZGVyYnVmZmVyICk7XG5cblx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIgKSB7XG5cblx0XHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0aWYgKCBpc011bHRpc2FtcGxlICYmIHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIgKSB7XG5cblx0XHRcdFx0X2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSggMzYxNjEsIHNhbXBsZXMsIDM1MDU2LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSApIHtcblxuXHRcdFx0XHRNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmVFeHRlbnNpb24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKCAzNjE2MSwgc2FtcGxlcywgMzUwNTYsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKCAzNjE2MSwgMzQwNDEsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0X2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKCAzNjE2MCwgMzMzMDYsIDM2MTYxLCByZW5kZXJidWZmZXIgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFVzZSB0aGUgZmlyc3QgdGV4dHVyZSBmb3IgTVJUIHNvIGZhclxuXHRcdFx0Y29uc3QgdGV4dHVyZSA9IHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzID09PSB0cnVlID8gcmVuZGVyVGFyZ2V0LnRleHR1cmVbIDAgXSA6IHJlbmRlclRhcmdldC50ZXh0dXJlO1xuXG5cdFx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0LCB0ZXh0dXJlLmVuY29kaW5nICk7XG5cdFx0XHRjb25zdCBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKTtcblx0XHRcdGNvbnN0IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCggdGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyApO1xuXHRcdFx0Y29uc3Qgc2FtcGxlcyA9IGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRpZiAoIGlzTXVsdGlzYW1wbGUgJiYgcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciApIHtcblxuXHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKCAzNjE2MSwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSB7XG5cblx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCggMzYxNjEsIHNhbXBsZXMsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKCAzNjE2MSwgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdF9nbC5iaW5kUmVuZGVyYnVmZmVyKCAzNjE2MSwgbnVsbCApO1xuXG5cdH1cblxuXHQvLyBTZXR1cCByZXNvdXJjZXMgZm9yIGEgRGVwdGggVGV4dHVyZSBmb3IgYSBGQk8gKG5lZWRzIGFuIGV4dGVuc2lvbilcblx0ZnVuY3Rpb24gc2V0dXBEZXB0aFRleHR1cmUoIGZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBpc0N1YmUgPSAoIHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgKTtcblx0XHRpZiAoIGlzQ3ViZSApIHRocm93IG5ldyBFcnJvciggJ0RlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQnICk7XG5cblx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBmcmFtZWJ1ZmZlciApO1xuXG5cdFx0aWYgKCAhICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAmJiByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlICkgKSB7XG5cblx0XHRcdHRocm93IG5ldyBFcnJvciggJ3JlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUnICk7XG5cblx0XHR9XG5cblx0XHQvLyB1cGxvYWQgYW4gZW1wdHkgZGVwdGggdGV4dHVyZSB3aXRoIGZyYW1lYnVmZmVyIHNpemVcblx0XHRpZiAoICEgcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSB8fFxuXHRcdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoICE9PSByZW5kZXJUYXJnZXQud2lkdGggfHxcblx0XHRcdFx0cmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQgIT09IHJlbmRlclRhcmdldC5oZWlnaHQgKSB7XG5cblx0XHRcdHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGggPSByZW5kZXJUYXJnZXQud2lkdGg7XG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCA9IHJlbmRlclRhcmdldC5oZWlnaHQ7XG5cdFx0XHRyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHRcdHNldFRleHR1cmUyRCggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSwgMCApO1xuXG5cdFx0Y29uc3Qgd2ViZ2xEZXB0aFRleHR1cmUgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlO1xuXHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPT09IERlcHRoRm9ybWF0ICkge1xuXG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSB7XG5cblx0XHRcdFx0TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlRXh0ZW5zaW9uLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoIDM2MTYwLCAzNjA5NiwgMzU1Mywgd2ViZ2xEZXB0aFRleHR1cmUsIDAsIHNhbXBsZXMgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIDM2MTYwLCAzNjA5NiwgMzU1Mywgd2ViZ2xEZXB0aFRleHR1cmUsIDAgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPT09IERlcHRoU3RlbmNpbEZvcm1hdCApIHtcblxuXHRcdFx0aWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlICkge1xuXG5cdFx0XHRcdE11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZUV4dGVuc2lvbi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKCAzNjE2MCwgMzMzMDYsIDM1NTMsIHdlYmdsRGVwdGhUZXh0dXJlLCAwLCBzYW1wbGVzICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCAzNjE2MCwgMzMzMDYsIDM1NTMsIHdlYmdsRGVwdGhUZXh0dXJlLCAwICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRocm93IG5ldyBFcnJvciggJ1Vua25vd24gZGVwdGhUZXh0dXJlIGZvcm1hdCcgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gU2V0dXAgR0wgcmVzb3VyY2VzIGZvciBhIG5vbi10ZXh0dXJlIGRlcHRoIGJ1ZmZlclxuXHRmdW5jdGlvbiBzZXR1cERlcHRoUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXQgKSB7XG5cblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApO1xuXHRcdGNvbnN0IGlzQ3ViZSA9ICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ID09PSB0cnVlICk7XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgJiYgISByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIgKSB7XG5cblx0XHRcdGlmICggaXNDdWJlICkgdGhyb3cgbmV3IEVycm9yKCAndGFyZ2V0LmRlcHRoVGV4dHVyZSBub3Qgc3VwcG9ydGVkIGluIEN1YmUgcmVuZGVyIHRhcmdldHMnICk7XG5cblx0XHRcdHNldHVwRGVwdGhUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIGlzQ3ViZSApIHtcblxuXHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciA9IFtdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdICk7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbIGkgXSA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblx0XHRcdFx0XHRzZXR1cFJlbmRlckJ1ZmZlclN0b3JhZ2UoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyWyBpIF0sIHJlbmRlclRhcmdldCwgZmFsc2UgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgKTtcblx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgPSBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG5cdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIsIHJlbmRlclRhcmdldCwgZmFsc2UgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgbnVsbCApO1xuXG5cdH1cblxuXHQvLyByZWJpbmQgZnJhbWVidWZmZXIgd2l0aCBleHRlcm5hbCB0ZXh0dXJlc1xuXHRmdW5jdGlvbiByZWJpbmRUZXh0dXJlcyggcmVuZGVyVGFyZ2V0LCBjb2xvclRleHR1cmUsIGRlcHRoVGV4dHVyZSApIHtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRpZiAoIGNvbG9yVGV4dHVyZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIDM2MDY0LCAzNTUzICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGRlcHRoVGV4dHVyZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzZXR1cERlcHRoUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gU2V0IHVwIEdMIHJlc291cmNlcyBmb3IgdGhlIHJlbmRlciB0YXJnZXRcblx0ZnVuY3Rpb24gc2V0dXBSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApO1xuXG5cdFx0cmVuZGVyVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25SZW5kZXJUYXJnZXREaXNwb3NlICk7XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzICE9PSB0cnVlICkge1xuXG5cdFx0XHRpZiAoIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9IHRleHR1cmUudmVyc2lvbjtcblx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzICsrO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNDdWJlID0gKCByZW5kZXJUYXJnZXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQgPT09IHRydWUgKTtcblx0XHRjb25zdCBpc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9ICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgPT09IHRydWUgKTtcblx0XHRjb25zdCBpc1JlbmRlclRhcmdldDNEID0gdGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QgfHwgdGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheTtcblx0XHRjb25zdCBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28kMSggcmVuZGVyVGFyZ2V0ICkgfHwgaXNXZWJHTDI7XG5cblx0XHQvLyBTZXR1cCBmcmFtZWJ1ZmZlclxuXG5cdFx0aWYgKCBpc0N1YmUgKSB7XG5cblx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gW107XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDY7IGkgKysgKSB7XG5cblx0XHRcdFx0cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbIGkgXSA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXG5cdFx0XHRpZiAoIGlzTXVsdGlwbGVSZW5kZXJUYXJnZXRzICkge1xuXG5cdFx0XHRcdGlmICggY2FwYWJpbGl0aWVzLmRyYXdCdWZmZXJzICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQudGV4dHVyZTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZXNbIGkgXSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGF0dGFjaG1lbnRQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudFByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGluZm8ubWVtb3J5LnRleHR1cmVzICsrO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQudXNlUmVuZGVyYnVmZmVyICkge1xuXG5cdFx0XHRcdGlmICggaXNXZWJHTDIgKSB7XG5cblx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXG5cdFx0XHRcdFx0X2dsLmJpbmRSZW5kZXJidWZmZXIoIDM2MTYxLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciApO1xuXG5cdFx0XHRcdFx0Y29uc3QgZ2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5lbmNvZGluZyApO1xuXHRcdFx0XHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApO1xuXHRcdFx0XHRcdGNvbnN0IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCggdGV4dHVyZS5pbnRlcm5hbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgdGV4dHVyZS5lbmNvZGluZyApO1xuXHRcdFx0XHRcdGNvbnN0IHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKTtcblx0XHRcdFx0XHRfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKCAzNjE2MSwgc2FtcGxlcywgZ2xJbnRlcm5hbEZvcm1hdCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciApO1xuXHRcdFx0XHRcdF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciggMzYxNjAsIDM2MDY0LCAzNjE2MSwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIgKTtcblx0XHRcdFx0XHRfZ2wuYmluZFJlbmRlcmJ1ZmZlciggMzYxNjEsIG51bGwgKTtcblxuXHRcdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoQnVmZmVyICkge1xuXG5cdFx0XHRcdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcblx0XHRcdFx0XHRcdHNldHVwUmVuZGVyQnVmZmVyU3RvcmFnZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsIHJlbmRlclRhcmdldCwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgbnVsbCApO1xuXG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4nICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBTZXR1cCBjb2xvciBidWZmZXJcblxuXHRcdGlmICggaXNDdWJlICkge1xuXG5cdFx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggMzQwNjcsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7XG5cdFx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyggMzQwNjcsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA2OyBpICsrICkge1xuXG5cdFx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdLCByZW5kZXJUYXJnZXQsIHRleHR1cmUsIDM2MDY0LCAzNDA2OSArIGkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkgKSB7XG5cblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXAoIDM0MDY3ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0c3RhdGUudW5iaW5kVGV4dHVyZSgpO1xuXG5cdFx0fSBlbHNlIGlmICggaXNNdWx0aXBsZVJlbmRlclRhcmdldHMgKSB7XG5cblx0XHRcdGNvbnN0IHRleHR1cmVzID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0ZXh0dXJlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gdGV4dHVyZXNbIGkgXTtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggYXR0YWNobWVudCApO1xuXG5cdFx0XHRcdHN0YXRlLmJpbmRUZXh0dXJlKCAzNTUzLCBhdHRhY2htZW50UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApO1xuXHRcdFx0XHRzZXRUZXh0dXJlUGFyYW1ldGVycyggMzU1MywgYXR0YWNobWVudCwgc3VwcG9ydHNNaXBzICk7XG5cdFx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCBhdHRhY2htZW50LCAzNjA2NCArIGksIDM1NTMgKTtcblxuXHRcdFx0XHRpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggYXR0YWNobWVudCwgc3VwcG9ydHNNaXBzICkgKSB7XG5cblx0XHRcdFx0XHRnZW5lcmF0ZU1pcG1hcCggMzU1MyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRsZXQgZ2xUZXh0dXJlVHlwZSA9IDM1NTM7XG5cblx0XHRcdGlmICggaXNSZW5kZXJUYXJnZXQzRCApIHtcblxuXHRcdFx0XHQvLyBSZW5kZXIgdGFyZ2V0cyBjb250YWluaW5nIGxheWVycywgaS5lOiBUZXh0dXJlIDNEIGFuZCAyZCBhcnJheXNcblxuXHRcdFx0XHRpZiAoIGlzV2ViR0wyICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgaXNUZXh0dXJlM0QgPSB0ZXh0dXJlLmlzRGF0YVRleHR1cmUzRDtcblx0XHRcdFx0XHRnbFRleHR1cmVUeXBlID0gaXNUZXh0dXJlM0QgPyAzMjg3OSA6IDM1ODY2O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuJyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggZ2xUZXh0dXJlVHlwZSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTtcblx0XHRcdHNldFRleHR1cmVQYXJhbWV0ZXJzKCBnbFRleHR1cmVUeXBlLCB0ZXh0dXJlLCBzdXBwb3J0c01pcHMgKTtcblx0XHRcdHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCB0ZXh0dXJlLCAzNjA2NCwgZ2xUZXh0dXJlVHlwZSApO1xuXG5cdFx0XHRpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgc3VwcG9ydHNNaXBzICkgKSB7XG5cblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXAoIGdsVGV4dHVyZVR5cGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0XHR9XG5cblx0XHQvLyBTZXR1cCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzXG5cblx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciApIHtcblxuXHRcdFx0c2V0dXBEZXB0aFJlbmRlcmJ1ZmZlciggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3Qgc3VwcG9ydHNNaXBzID0gaXNQb3dlck9mVHdvJDEoIHJlbmRlclRhcmdldCApIHx8IGlzV2ViR0wyO1xuXG5cdFx0Y29uc3QgdGV4dHVyZXMgPSByZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyA9PT0gdHJ1ZSA/IHJlbmRlclRhcmdldC50ZXh0dXJlIDogWyByZW5kZXJUYXJnZXQudGV4dHVyZSBdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRleHR1cmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gdGV4dHVyZXNbIGkgXTtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApICkge1xuXG5cdFx0XHRcdGNvbnN0IHRhcmdldCA9IHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCA/IDM0MDY3IDogMzU1Mztcblx0XHRcdFx0Y29uc3Qgd2ViZ2xUZXh0dXJlID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZTtcblxuXHRcdFx0XHRzdGF0ZS5iaW5kVGV4dHVyZSggdGFyZ2V0LCB3ZWJnbFRleHR1cmUgKTtcblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXAoIHRhcmdldCApO1xuXHRcdFx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApIHtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciApIHtcblxuXHRcdFx0aWYgKCBpc1dlYkdMMiApIHtcblxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0LmhlaWdodDtcblx0XHRcdFx0bGV0IG1hc2sgPSAxNjM4NDtcblx0XHRcdFx0Y29uc3QgaW52YWxpZGF0aW9uQXJyYXkgPSBbIDM2MDY0IF07XG5cdFx0XHRcdGNvbnN0IGRlcHRoU3R5bGUgPSByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciA/IDMzMzA2IDogMzYwOTY7XG5cblx0XHRcdFx0aWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgKSB7XG5cblx0XHRcdFx0XHRpbnZhbGlkYXRpb25BcnJheS5wdXNoKCBkZXB0aFN0eWxlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggISByZW5kZXJUYXJnZXQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciApIG1hc2sgfD0gMjU2O1xuXHRcdFx0XHRcdGlmICggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIgKSBtYXNrIHw9IDEwMjQ7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjAwOCwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIgKTtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjAwOSwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgKTtcblxuXHRcdFx0XHRpZiAoIHJlbmRlclRhcmdldC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSApIHtcblxuXHRcdFx0XHRcdF9nbC5pbnZhbGlkYXRlRnJhbWVidWZmZXIoIDM2MDA4LCBbIGRlcHRoU3R5bGUgXSApO1xuXHRcdFx0XHRcdF9nbC5pbnZhbGlkYXRlRnJhbWVidWZmZXIoIDM2MDA5LCBbIGRlcHRoU3R5bGUgXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZ2wuYmxpdEZyYW1lYnVmZmVyKCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBtYXNrLCA5NzI4ICk7XG5cdFx0XHRcdF9nbC5pbnZhbGlkYXRlRnJhbWVidWZmZXIoIDM2MDA4LCBpbnZhbGlkYXRpb25BcnJheSApO1xuXG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYwMDgsIG51bGwgKTtcblx0XHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjAwOSwgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFNhbXBsZXMoIHJlbmRlclRhcmdldCApIHtcblxuXHRcdHJldHVybiAoIGlzV2ViR0wyICYmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciB8fCByZW5kZXJUYXJnZXQudXNlUmVuZGVyVG9UZXh0dXJlICkgKSA/XG5cdFx0XHRNYXRoLm1pbiggbWF4U2FtcGxlcywgcmVuZGVyVGFyZ2V0LnNhbXBsZXMgKSA6IDA7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVZpZGVvVGV4dHVyZSggdGV4dHVyZSApIHtcblxuXHRcdGNvbnN0IGZyYW1lID0gaW5mby5yZW5kZXIuZnJhbWU7XG5cblx0XHQvLyBDaGVjayB0aGUgbGFzdCBmcmFtZSB3ZSB1cGRhdGVkIHRoZSBWaWRlb1RleHR1cmVcblxuXHRcdGlmICggX3ZpZGVvVGV4dHVyZXMuZ2V0KCB0ZXh0dXJlICkgIT09IGZyYW1lICkge1xuXG5cdFx0XHRfdmlkZW9UZXh0dXJlcy5zZXQoIHRleHR1cmUsIGZyYW1lICk7XG5cdFx0XHR0ZXh0dXJlLnVwZGF0ZSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiB2ZXJpZnlDb2xvclNwYWNlKCB0ZXh0dXJlLCBpbWFnZSApIHtcblxuXHRcdGNvbnN0IGVuY29kaW5nID0gdGV4dHVyZS5lbmNvZGluZztcblx0XHRjb25zdCBmb3JtYXQgPSB0ZXh0dXJlLmZvcm1hdDtcblx0XHRjb25zdCB0eXBlID0gdGV4dHVyZS50eXBlO1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmlzQ29tcHJlc3NlZFRleHR1cmUgPT09IHRydWUgfHwgdGV4dHVyZS5pc1ZpZGVvVGV4dHVyZSA9PT0gdHJ1ZSB8fCB0ZXh0dXJlLmZvcm1hdCA9PT0gX1NSR0JBRm9ybWF0ICkgcmV0dXJuIGltYWdlO1xuXG5cdFx0aWYgKCBlbmNvZGluZyAhPT0gTGluZWFyRW5jb2RpbmcgKSB7XG5cblx0XHRcdC8vIHNSR0JcblxuXHRcdFx0aWYgKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkge1xuXG5cdFx0XHRcdGlmICggaXNXZWJHTDIgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0Ly8gaW4gV2ViR0wgMSwgdHJ5IHRvIHVzZSBFWFRfc1JHQiBleHRlbnNpb24gYW5kIHVuc2l6ZWQgZm9ybWF0c1xuXG5cdFx0XHRcdFx0aWYgKCBleHRlbnNpb25zLmhhcyggJ0VYVF9zUkdCJyApID09PSB0cnVlICYmIGZvcm1hdCA9PT0gUkdCQUZvcm1hdCApIHtcblxuXHRcdFx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSBfU1JHQkFGb3JtYXQ7XG5cblx0XHRcdFx0XHRcdC8vIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGdlbmVyYXRlIG1pcHMgaW4gV2ViR0wgMSB3aXRoIHRoaXMgZXh0ZW5zaW9uXG5cblx0XHRcdFx0XHRcdHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXHRcdFx0XHRcdFx0dGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIHNsb3cgZmFsbGJhY2sgKENQVSBkZWNvZGUpXG5cblx0XHRcdFx0XHRcdGltYWdlID0gSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoIGltYWdlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGluIFdlYkdMIDIgdW5jb21wcmVzc2VkIHRleHR1cmVzIGNhbiBvbmx5IGJlIHNSR0IgZW5jb2RlZCBpZiB0aGV5IGhhdmUgdGhlIFJHQkE4IGZvcm1hdFxuXG5cdFx0XHRcdFx0aWYgKCBmb3JtYXQgIT09IFJHQkFGb3JtYXQgfHwgdHlwZSAhPT0gVW5zaWduZWRCeXRlVHlwZSApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuJyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzonLCBlbmNvZGluZyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gaW1hZ2U7XG5cblx0fVxuXG5cdC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cblx0bGV0IHdhcm5lZFRleHR1cmUyRCA9IGZhbHNlO1xuXHRsZXQgd2FybmVkVGV4dHVyZUN1YmUgPSBmYWxzZTtcblxuXHRmdW5jdGlvbiBzYWZlU2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCBzbG90ICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTFJlbmRlclRhcmdldCApIHtcblxuXHRcdFx0aWYgKCB3YXJuZWRUZXh0dXJlMkQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uXFwndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLicgKTtcblx0XHRcdFx0d2FybmVkVGV4dHVyZTJEID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuXG5cdFx0fVxuXG5cdFx0c2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCBzbG90ICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNhZmVTZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApIHtcblxuXHRcdGlmICggdGV4dHVyZSAmJiB0ZXh0dXJlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRpZiAoIHdhcm5lZFRleHR1cmVDdWJlID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uXFwndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuJyApO1xuXHRcdFx0XHR3YXJuZWRUZXh0dXJlQ3ViZSA9IHRydWU7XG5cblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTtcblxuXHRcdH1cblxuXG5cdFx0c2V0VGV4dHVyZUN1YmUoIHRleHR1cmUsIHNsb3QgKTtcblxuXHR9XG5cblx0Ly9cblxuXHR0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQgPSBhbGxvY2F0ZVRleHR1cmVVbml0O1xuXHR0aGlzLnJlc2V0VGV4dHVyZVVuaXRzID0gcmVzZXRUZXh0dXJlVW5pdHM7XG5cblx0dGhpcy5zZXRUZXh0dXJlMkQgPSBzZXRUZXh0dXJlMkQ7XG5cdHRoaXMuc2V0VGV4dHVyZTJEQXJyYXkgPSBzZXRUZXh0dXJlMkRBcnJheTtcblx0dGhpcy5zZXRUZXh0dXJlM0QgPSBzZXRUZXh0dXJlM0Q7XG5cdHRoaXMuc2V0VGV4dHVyZUN1YmUgPSBzZXRUZXh0dXJlQ3ViZTtcblx0dGhpcy5yZWJpbmRUZXh0dXJlcyA9IHJlYmluZFRleHR1cmVzO1xuXHR0aGlzLnNldHVwUmVuZGVyVGFyZ2V0ID0gc2V0dXBSZW5kZXJUYXJnZXQ7XG5cdHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwID0gdXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwO1xuXHR0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0ID0gdXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ7XG5cdHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlciA9IHNldHVwRGVwdGhSZW5kZXJidWZmZXI7XG5cdHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUgPSBzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZTtcblxuXHR0aGlzLnNhZmVTZXRUZXh0dXJlMkQgPSBzYWZlU2V0VGV4dHVyZTJEO1xuXHR0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZSA9IHNhZmVTZXRUZXh0dXJlQ3ViZTtcblxufVxuXG5mdW5jdGlvbiBXZWJHTFV0aWxzKCBnbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICkge1xuXG5cdGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xuXG5cdGZ1bmN0aW9uIGNvbnZlcnQoIHAsIGVuY29kaW5nID0gbnVsbCApIHtcblxuXHRcdGxldCBleHRlbnNpb247XG5cblx0XHRpZiAoIHAgPT09IFVuc2lnbmVkQnl0ZVR5cGUgKSByZXR1cm4gNTEyMTtcblx0XHRpZiAoIHAgPT09IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSApIHJldHVybiAzMjgxOTtcblx0XHRpZiAoIHAgPT09IFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSApIHJldHVybiAzMjgyMDtcblxuXHRcdGlmICggcCA9PT0gQnl0ZVR5cGUgKSByZXR1cm4gNTEyMDtcblx0XHRpZiAoIHAgPT09IFNob3J0VHlwZSApIHJldHVybiA1MTIyO1xuXHRcdGlmICggcCA9PT0gVW5zaWduZWRTaG9ydFR5cGUgKSByZXR1cm4gNTEyMztcblx0XHRpZiAoIHAgPT09IEludFR5cGUgKSByZXR1cm4gNTEyNDtcblx0XHRpZiAoIHAgPT09IFVuc2lnbmVkSW50VHlwZSApIHJldHVybiA1MTI1O1xuXHRcdGlmICggcCA9PT0gRmxvYXRUeXBlICkgcmV0dXJuIDUxMjY7XG5cblx0XHRpZiAoIHAgPT09IEhhbGZGbG9hdFR5cGUgKSB7XG5cblx0XHRcdGlmICggaXNXZWJHTDIgKSByZXR1cm4gNTEzMTtcblxuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLkhBTEZfRkxPQVRfT0VTO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHAgPT09IEFscGhhRm9ybWF0ICkgcmV0dXJuIDY0MDY7XG5cdFx0aWYgKCBwID09PSBSR0JBRm9ybWF0ICkgcmV0dXJuIDY0MDg7XG5cdFx0aWYgKCBwID09PSBMdW1pbmFuY2VGb3JtYXQgKSByZXR1cm4gNjQwOTtcblx0XHRpZiAoIHAgPT09IEx1bWluYW5jZUFscGhhRm9ybWF0ICkgcmV0dXJuIDY0MTA7XG5cdFx0aWYgKCBwID09PSBEZXB0aEZvcm1hdCApIHJldHVybiA2NDAyO1xuXHRcdGlmICggcCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkgcmV0dXJuIDM0MDQxO1xuXHRcdGlmICggcCA9PT0gUmVkRm9ybWF0ICkgcmV0dXJuIDY0MDM7XG5cblx0XHQvLyBXZWJHTCAxIHNSR0IgZmFsbGJhY2tcblxuXHRcdGlmICggcCA9PT0gX1NSR0JBRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF9zUkdCJyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLlNSR0JfQUxQSEFfRVhUO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBXZWJHTDIgZm9ybWF0cy5cblxuXHRcdGlmICggcCA9PT0gUmVkSW50ZWdlckZvcm1hdCApIHJldHVybiAzNjI0NDtcblx0XHRpZiAoIHAgPT09IFJHRm9ybWF0ICkgcmV0dXJuIDMzMzE5O1xuXHRcdGlmICggcCA9PT0gUkdJbnRlZ2VyRm9ybWF0ICkgcmV0dXJuIDMzMzIwO1xuXHRcdGlmICggcCA9PT0gUkdCQUludGVnZXJGb3JtYXQgKSByZXR1cm4gMzYyNDk7XG5cblx0XHQvLyBTM1RDXG5cblx0XHRpZiAoIHAgPT09IFJHQl9TM1RDX0RYVDFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCB8fCBwID09PSBSR0JBX1MzVENfRFhUM19Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0ICkge1xuXG5cdFx0XHRpZiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSB7XG5cblx0XHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiJyApO1xuXG5cdFx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JfUzNUQ19EWFQxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO1xuXHRcdFx0XHRcdGlmICggcCA9PT0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtcblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFQ7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApO1xuXG5cdFx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JfUzNUQ19EWFQxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtcblx0XHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7XG5cdFx0XHRcdFx0aWYgKCBwID09PSBSR0JBX1MzVENfRFhUM19Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO1xuXHRcdFx0XHRcdGlmICggcCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBQVlJUQ1xuXG5cdFx0aWYgKCBwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCB8fCBwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCB8fCBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztcblx0XHRcdFx0aWYgKCBwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO1xuXHRcdFx0XHRpZiAoIHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIEVUQzFcblxuXHRcdGlmICggcCA9PT0gUkdCX0VUQzFfRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJyApO1xuXG5cdFx0XHRpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIEVUQzJcblxuXHRcdGlmICggcCA9PT0gUkdCX0VUQzJfRm9ybWF0IHx8IHAgPT09IFJHQkFfRVRDMl9FQUNfRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMnICk7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGlmICggcCA9PT0gUkdCX0VUQzJfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfRVRDMiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQjhfRVRDMjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0VUQzJfRUFDX0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBBU1RDXG5cblx0XHRpZiAoIHAgPT09IFJHQkFfQVNUQ180eDRfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ181eDRfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ181eDVfRm9ybWF0IHx8XG5cdFx0XHRwID09PSBSR0JBX0FTVENfNng1X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNng2X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfOHg1X0Zvcm1hdCB8fFxuXHRcdFx0cCA9PT0gUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzh4OF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDVfRm9ybWF0IHx8XG5cdFx0XHRwID09PSBSR0JBX0FTVENfMTB4Nl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEweDhfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQgfHxcblx0XHRcdHAgPT09IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdCApIHtcblxuXHRcdFx0ZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfNHg0X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfNXg0X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfNXg1X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfNng1X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfNng2X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfOHg1X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfOHg2X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfOHg4X0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTB4NV9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTB4Nl9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgKSByZXR1cm4gKCBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nICkgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTB4MTBfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtcblx0XHRcdFx0aWYgKCBwID09PSBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0ICkgcmV0dXJuICggZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUjtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gQlBUQ1xuXG5cdFx0aWYgKCBwID09PSBSR0JBX0JQVENfRm9ybWF0ICkge1xuXG5cdFx0XHRleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMnICk7XG5cblx0XHRcdGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGlmICggcCA9PT0gUkdCQV9CUFRDX0Zvcm1hdCApIHJldHVybiAoIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmcgKSA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0JQVENfVU5PUk1fRVhUO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0aWYgKCBwID09PSBVbnNpZ25lZEludDI0OFR5cGUgKSB7XG5cblx0XHRcdGlmICggaXNXZWJHTDIgKSByZXR1cm4gMzQwNDI7XG5cblx0XHRcdGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZGVwdGhfdGV4dHVyZScgKTtcblxuXHRcdFx0aWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGV4dGVuc2lvbi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4geyBjb252ZXJ0OiBjb252ZXJ0IH07XG5cbn1cblxuY2xhc3MgQXJyYXlDYW1lcmEgZXh0ZW5kcyBQZXJzcGVjdGl2ZUNhbWVyYSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5ID0gW10gKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5jYW1lcmFzID0gYXJyYXk7XG5cblx0fVxuXG59XG5cbkFycmF5Q2FtZXJhLnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhID0gdHJ1ZTtcblxuY2xhc3MgR3JvdXAgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0dyb3VwJztcblxuXHR9XG5cbn1cblxuR3JvdXAucHJvdG90eXBlLmlzR3JvdXAgPSB0cnVlO1xuXG5jb25zdCBfbW92ZUV2ZW50ID0geyB0eXBlOiAnbW92ZScgfTtcblxuY2xhc3MgV2ViWFJDb250cm9sbGVyIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMuX3RhcmdldFJheSA9IG51bGw7XG5cdFx0dGhpcy5fZ3JpcCA9IG51bGw7XG5cdFx0dGhpcy5faGFuZCA9IG51bGw7XG5cblx0fVxuXG5cdGdldEhhbmRTcGFjZSgpIHtcblxuXHRcdGlmICggdGhpcy5faGFuZCA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5faGFuZCA9IG5ldyBHcm91cCgpO1xuXHRcdFx0dGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9oYW5kLnZpc2libGUgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy5faGFuZC5qb2ludHMgPSB7fTtcblx0XHRcdHRoaXMuX2hhbmQuaW5wdXRTdGF0ZSA9IHsgcGluY2hpbmc6IGZhbHNlIH07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5faGFuZDtcblxuXHR9XG5cblx0Z2V0VGFyZ2V0UmF5U3BhY2UoKSB7XG5cblx0XHRpZiAoIHRoaXMuX3RhcmdldFJheSA9PT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5ID0gbmV3IEdyb3VwKCk7XG5cdFx0XHR0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3RhcmdldFJheTtcblxuXHR9XG5cblx0Z2V0R3JpcFNwYWNlKCkge1xuXG5cdFx0aWYgKCB0aGlzLl9ncmlwID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9ncmlwID0gbmV3IEdyb3VwKCk7XG5cdFx0XHR0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX2dyaXAudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHR0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2dyaXA7XG5cblx0fVxuXG5cdGRpc3BhdGNoRXZlbnQoIGV2ZW50ICkge1xuXG5cdFx0aWYgKCB0aGlzLl90YXJnZXRSYXkgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9ncmlwICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQoIGV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2hhbmQgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRkaXNjb25uZWN0KCBpbnB1dFNvdXJjZSApIHtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzY29ubmVjdGVkJywgZGF0YTogaW5wdXRTb3VyY2UgfSApO1xuXG5cdFx0aWYgKCB0aGlzLl90YXJnZXRSYXkgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX3RhcmdldFJheS52aXNpYmxlID0gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2dyaXAgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX2dyaXAudmlzaWJsZSA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9oYW5kICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9oYW5kLnZpc2libGUgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR1cGRhdGUoIGlucHV0U291cmNlLCBmcmFtZSwgcmVmZXJlbmNlU3BhY2UgKSB7XG5cblx0XHRsZXQgaW5wdXRQb3NlID0gbnVsbDtcblx0XHRsZXQgZ3JpcFBvc2UgPSBudWxsO1xuXHRcdGxldCBoYW5kUG9zZSA9IG51bGw7XG5cblx0XHRjb25zdCB0YXJnZXRSYXkgPSB0aGlzLl90YXJnZXRSYXk7XG5cdFx0Y29uc3QgZ3JpcCA9IHRoaXMuX2dyaXA7XG5cdFx0Y29uc3QgaGFuZCA9IHRoaXMuX2hhbmQ7XG5cblx0XHRpZiAoIGlucHV0U291cmNlICYmIGZyYW1lLnNlc3Npb24udmlzaWJpbGl0eVN0YXRlICE9PSAndmlzaWJsZS1ibHVycmVkJyApIHtcblxuXHRcdFx0aWYgKCB0YXJnZXRSYXkgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aW5wdXRQb3NlID0gZnJhbWUuZ2V0UG9zZSggaW5wdXRTb3VyY2UudGFyZ2V0UmF5U3BhY2UsIHJlZmVyZW5jZVNwYWNlICk7XG5cblx0XHRcdFx0aWYgKCBpbnB1dFBvc2UgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHR0YXJnZXRSYXkubWF0cml4LmZyb21BcnJheSggaW5wdXRQb3NlLnRyYW5zZm9ybS5tYXRyaXggKTtcblx0XHRcdFx0XHR0YXJnZXRSYXkubWF0cml4LmRlY29tcG9zZSggdGFyZ2V0UmF5LnBvc2l0aW9uLCB0YXJnZXRSYXkucm90YXRpb24sIHRhcmdldFJheS5zY2FsZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBpbnB1dFBvc2UubGluZWFyVmVsb2NpdHkgKSB7XG5cblx0XHRcdFx0XHRcdHRhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkubGluZWFyVmVsb2NpdHkuY29weSggaW5wdXRQb3NlLmxpbmVhclZlbG9jaXR5ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggaW5wdXRQb3NlLmFuZ3VsYXJWZWxvY2l0eSApIHtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHR0YXJnZXRSYXkuYW5ndWxhclZlbG9jaXR5LmNvcHkoIGlucHV0UG9zZS5hbmd1bGFyVmVsb2NpdHkgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHRhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggX21vdmVFdmVudCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhbmQgJiYgaW5wdXRTb3VyY2UuaGFuZCApIHtcblxuXHRcdFx0XHRoYW5kUG9zZSA9IHRydWU7XG5cblx0XHRcdFx0Zm9yICggY29uc3QgaW5wdXRqb2ludCBvZiBpbnB1dFNvdXJjZS5oYW5kLnZhbHVlcygpICkge1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBqb2ludHMgZ3JvdXBzIHdpdGggdGhlIFhSSm9pbnQgcG9zZXNcblx0XHRcdFx0XHRjb25zdCBqb2ludFBvc2UgPSBmcmFtZS5nZXRKb2ludFBvc2UoIGlucHV0am9pbnQsIHJlZmVyZW5jZVNwYWNlICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmQuam9pbnRzWyBpbnB1dGpvaW50LmpvaW50TmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBqb2ludCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgam9pbnQgcG9zZSBvbiBlYWNoIGZyYW1lXG5cdFx0XHRcdFx0XHRjb25zdCBqb2ludCA9IG5ldyBHcm91cCgpO1xuXHRcdFx0XHRcdFx0am9pbnQubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0am9pbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aGFuZC5qb2ludHNbIGlucHV0am9pbnQuam9pbnROYW1lIF0gPSBqb2ludDtcblx0XHRcdFx0XHRcdC8vID8/XG5cdFx0XHRcdFx0XHRoYW5kLmFkZCggam9pbnQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGpvaW50ID0gaGFuZC5qb2ludHNbIGlucHV0am9pbnQuam9pbnROYW1lIF07XG5cblx0XHRcdFx0XHRpZiAoIGpvaW50UG9zZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0am9pbnQubWF0cml4LmZyb21BcnJheSggam9pbnRQb3NlLnRyYW5zZm9ybS5tYXRyaXggKTtcblx0XHRcdFx0XHRcdGpvaW50Lm1hdHJpeC5kZWNvbXBvc2UoIGpvaW50LnBvc2l0aW9uLCBqb2ludC5yb3RhdGlvbiwgam9pbnQuc2NhbGUgKTtcblx0XHRcdFx0XHRcdGpvaW50LmpvaW50UmFkaXVzID0gam9pbnRQb3NlLnJhZGl1cztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpvaW50LnZpc2libGUgPSBqb2ludFBvc2UgIT09IG51bGw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEN1c3RvbSBldmVudHNcblxuXHRcdFx0XHQvLyBDaGVjayBwaW5jaHpcblx0XHRcdFx0Y29uc3QgaW5kZXhUaXAgPSBoYW5kLmpvaW50c1sgJ2luZGV4LWZpbmdlci10aXAnIF07XG5cdFx0XHRcdGNvbnN0IHRodW1iVGlwID0gaGFuZC5qb2ludHNbICd0aHVtYi10aXAnIF07XG5cdFx0XHRcdGNvbnN0IGRpc3RhbmNlID0gaW5kZXhUaXAucG9zaXRpb24uZGlzdGFuY2VUbyggdGh1bWJUaXAucG9zaXRpb24gKTtcblxuXHRcdFx0XHRjb25zdCBkaXN0YW5jZVRvUGluY2ggPSAwLjAyO1xuXHRcdFx0XHRjb25zdCB0aHJlc2hvbGQgPSAwLjAwNTtcblxuXHRcdFx0XHRpZiAoIGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyAmJiBkaXN0YW5jZSA+IGRpc3RhbmNlVG9QaW5jaCArIHRocmVzaG9sZCApIHtcblxuXHRcdFx0XHRcdGhhbmQuaW5wdXRTdGF0ZS5waW5jaGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudCgge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3BpbmNoZW5kJyxcblx0XHRcdFx0XHRcdGhhbmRlZG5lc3M6IGlucHV0U291cmNlLmhhbmRlZG5lc3MsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHRoaXNcblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0fSBlbHNlIGlmICggISBoYW5kLmlucHV0U3RhdGUucGluY2hpbmcgJiYgZGlzdGFuY2UgPD0gZGlzdGFuY2VUb1BpbmNoIC0gdGhyZXNob2xkICkge1xuXG5cdFx0XHRcdFx0aGFuZC5pbnB1dFN0YXRlLnBpbmNoaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoIHtcblx0XHRcdFx0XHRcdHR5cGU6ICdwaW5jaHN0YXJ0Jyxcblx0XHRcdFx0XHRcdGhhbmRlZG5lc3M6IGlucHV0U291cmNlLmhhbmRlZG5lc3MsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHRoaXNcblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGlmICggZ3JpcCAhPT0gbnVsbCAmJiBpbnB1dFNvdXJjZS5ncmlwU3BhY2UgKSB7XG5cblx0XHRcdFx0XHRncmlwUG9zZSA9IGZyYW1lLmdldFBvc2UoIGlucHV0U291cmNlLmdyaXBTcGFjZSwgcmVmZXJlbmNlU3BhY2UgKTtcblxuXHRcdFx0XHRcdGlmICggZ3JpcFBvc2UgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdGdyaXAubWF0cml4LmZyb21BcnJheSggZ3JpcFBvc2UudHJhbnNmb3JtLm1hdHJpeCApO1xuXHRcdFx0XHRcdFx0Z3JpcC5tYXRyaXguZGVjb21wb3NlKCBncmlwLnBvc2l0aW9uLCBncmlwLnJvdGF0aW9uLCBncmlwLnNjYWxlICk7XG5cblx0XHRcdFx0XHRcdGlmICggZ3JpcFBvc2UubGluZWFyVmVsb2NpdHkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Z3JpcC5oYXNMaW5lYXJWZWxvY2l0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGdyaXAubGluZWFyVmVsb2NpdHkuY29weSggZ3JpcFBvc2UubGluZWFyVmVsb2NpdHkgKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0xpbmVhclZlbG9jaXR5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCBncmlwUG9zZS5hbmd1bGFyVmVsb2NpdHkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Z3JpcC5oYXNBbmd1bGFyVmVsb2NpdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRncmlwLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KCBncmlwUG9zZS5hbmd1bGFyVmVsb2NpdHkgKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRhcmdldFJheSAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGFyZ2V0UmF5LnZpc2libGUgPSAoIGlucHV0UG9zZSAhPT0gbnVsbCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBncmlwICE9PSBudWxsICkge1xuXG5cdFx0XHRncmlwLnZpc2libGUgPSAoIGdyaXBQb3NlICE9PSBudWxsICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGhhbmQgIT09IG51bGwgKSB7XG5cblx0XHRcdGhhbmQudmlzaWJsZSA9ICggaGFuZFBvc2UgIT09IG51bGwgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBEZXB0aFRleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3Rvciggd2lkdGgsIGhlaWdodCwgdHlwZSwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgYW5pc290cm9weSwgZm9ybWF0ICkge1xuXG5cdFx0Zm9ybWF0ID0gZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBmb3JtYXQgOiBEZXB0aEZvcm1hdDtcblxuXHRcdGlmICggZm9ybWF0ICE9PSBEZXB0aEZvcm1hdCAmJiBmb3JtYXQgIT09IERlcHRoU3RlbmNpbEZvcm1hdCApIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQnICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHR5cGUgPT09IHVuZGVmaW5lZCAmJiBmb3JtYXQgPT09IERlcHRoRm9ybWF0ICkgdHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdGlmICggdHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkgdHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTtcblxuXHRcdHN1cGVyKCBudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkgKTtcblxuXHRcdHRoaXMuaW1hZ2UgPSB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcblxuXHRcdHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtYWdGaWx0ZXIgOiBOZWFyZXN0RmlsdGVyO1xuXHRcdHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtaW5GaWx0ZXIgOiBOZWFyZXN0RmlsdGVyO1xuXG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzXHQ9IGZhbHNlO1xuXG5cdH1cblxuXG59XG5cbkRlcHRoVGV4dHVyZS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBXZWJYUk1hbmFnZXIgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXG5cdGNvbnN0cnVjdG9yKCByZW5kZXJlciwgZ2wgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0bGV0IHNlc3Npb24gPSBudWxsO1xuXHRcdGxldCBmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yID0gMS4wO1xuXG5cdFx0bGV0IHJlZmVyZW5jZVNwYWNlID0gbnVsbDtcblx0XHRsZXQgcmVmZXJlbmNlU3BhY2VUeXBlID0gJ2xvY2FsLWZsb29yJztcblx0XHRjb25zdCBoYXNNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSByZW5kZXJlci5leHRlbnNpb25zLmhhcyggJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScgKTtcblxuXHRcdGxldCBwb3NlID0gbnVsbDtcblx0XHRsZXQgZ2xCaW5kaW5nID0gbnVsbDtcblx0XHRsZXQgZ2xQcm9qTGF5ZXIgPSBudWxsO1xuXHRcdGxldCBnbEJhc2VMYXllciA9IG51bGw7XG5cdFx0bGV0IGlzTXVsdGlzYW1wbGUgPSBmYWxzZTtcblx0XHRsZXQgeHJGcmFtZSA9IG51bGw7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7XG5cdFx0bGV0IGluaXRpYWxSZW5kZXJUYXJnZXQgPSBudWxsO1xuXHRcdGxldCBuZXdSZW5kZXJUYXJnZXQgPSBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbGxlcnMgPSBbXTtcblx0XHRjb25zdCBpbnB1dFNvdXJjZXNNYXAgPSBuZXcgTWFwKCk7XG5cblx0XHQvL1xuXG5cdFx0Y29uc3QgY2FtZXJhTCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdGNhbWVyYUwubGF5ZXJzLmVuYWJsZSggMSApO1xuXHRcdGNhbWVyYUwudmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpO1xuXG5cdFx0Y29uc3QgY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdGNhbWVyYVIubGF5ZXJzLmVuYWJsZSggMiApO1xuXHRcdGNhbWVyYVIudmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpO1xuXG5cdFx0Y29uc3QgY2FtZXJhcyA9IFsgY2FtZXJhTCwgY2FtZXJhUiBdO1xuXG5cdFx0Y29uc3QgY2FtZXJhVlIgPSBuZXcgQXJyYXlDYW1lcmEoKTtcblx0XHRjYW1lcmFWUi5sYXllcnMuZW5hYmxlKCAxICk7XG5cdFx0Y2FtZXJhVlIubGF5ZXJzLmVuYWJsZSggMiApO1xuXG5cdFx0bGV0IF9jdXJyZW50RGVwdGhOZWFyID0gbnVsbDtcblx0XHRsZXQgX2N1cnJlbnREZXB0aEZhciA9IG51bGw7XG5cblx0XHQvL1xuXG5cdFx0dGhpcy5jYW1lcmFBdXRvVXBkYXRlID0gdHJ1ZTtcblx0XHR0aGlzLmVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdHRoaXMuaXNQcmVzZW50aW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbiAoIGluZGV4ICkge1xuXG5cdFx0XHRsZXQgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzWyBpbmRleCBdO1xuXG5cdFx0XHRpZiAoIGNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb250cm9sbGVyID0gbmV3IFdlYlhSQ29udHJvbGxlcigpO1xuXHRcdFx0XHRjb250cm9sbGVyc1sgaW5kZXggXSA9IGNvbnRyb2xsZXI7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xsZXIuZ2V0VGFyZ2V0UmF5U3BhY2UoKTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldENvbnRyb2xsZXJHcmlwID0gZnVuY3Rpb24gKCBpbmRleCApIHtcblxuXHRcdFx0bGV0IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1sgaW5kZXggXTtcblxuXHRcdFx0aWYgKCBjb250cm9sbGVyID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29udHJvbGxlciA9IG5ldyBXZWJYUkNvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29udHJvbGxlcnNbIGluZGV4IF0gPSBjb250cm9sbGVyO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb250cm9sbGVyLmdldEdyaXBTcGFjZSgpO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0SGFuZCA9IGZ1bmN0aW9uICggaW5kZXggKSB7XG5cblx0XHRcdGxldCBjb250cm9sbGVyID0gY29udHJvbGxlcnNbIGluZGV4IF07XG5cblx0XHRcdGlmICggY29udHJvbGxlciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIgPSBuZXcgV2ViWFJDb250cm9sbGVyKCk7XG5cdFx0XHRcdGNvbnRyb2xsZXJzWyBpbmRleCBdID0gY29udHJvbGxlcjtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbGxlci5nZXRIYW5kU3BhY2UoKTtcblxuXHRcdH07XG5cblx0XHQvL1xuXG5cdFx0ZnVuY3Rpb24gb25TZXNzaW9uRXZlbnQoIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gaW5wdXRTb3VyY2VzTWFwLmdldCggZXZlbnQuaW5wdXRTb3VyY2UgKTtcblxuXHRcdFx0aWYgKCBjb250cm9sbGVyICkge1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiBldmVudC50eXBlLCBkYXRhOiBldmVudC5pbnB1dFNvdXJjZSB9ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZCgpIHtcblxuXHRcdFx0aW5wdXRTb3VyY2VzTWFwLmZvckVhY2goIGZ1bmN0aW9uICggY29udHJvbGxlciwgaW5wdXRTb3VyY2UgKSB7XG5cblx0XHRcdFx0Y29udHJvbGxlci5kaXNjb25uZWN0KCBpbnB1dFNvdXJjZSApO1xuXG5cdFx0XHR9ICk7XG5cblx0XHRcdGlucHV0U291cmNlc01hcC5jbGVhcigpO1xuXG5cdFx0XHRfY3VycmVudERlcHRoTmVhciA9IG51bGw7XG5cdFx0XHRfY3VycmVudERlcHRoRmFyID0gbnVsbDtcblxuXHRcdFx0Ly8gcmVzdG9yZSBmcmFtZWJ1ZmZlci9yZW5kZXJpbmcgc3RhdGVcblxuXHRcdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBpbml0aWFsUmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdGdsQmFzZUxheWVyID0gbnVsbDtcblx0XHRcdGdsUHJvakxheWVyID0gbnVsbDtcblx0XHRcdGdsQmluZGluZyA9IG51bGw7XG5cdFx0XHRzZXNzaW9uID0gbnVsbDtcblx0XHRcdG5ld1JlbmRlclRhcmdldCA9IG51bGw7XG5cblx0XHRcdC8vXG5cblx0XHRcdGFuaW1hdGlvbi5zdG9wKCk7XG5cblx0XHRcdHNjb3BlLmlzUHJlc2VudGluZyA9IGZhbHNlO1xuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZXNzaW9uZW5kJyB9ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3IgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yID0gdmFsdWU7XG5cblx0XHRcdGlmICggc2NvcGUuaXNQcmVzZW50aW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlID0gZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0cmVmZXJlbmNlU3BhY2VUeXBlID0gdmFsdWU7XG5cblx0XHRcdGlmICggc2NvcGUuaXNQcmVzZW50aW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiByZWZlcmVuY2VTcGFjZTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEJhc2VMYXllciA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIGdsUHJvakxheWVyICE9PSBudWxsID8gZ2xQcm9qTGF5ZXIgOiBnbEJhc2VMYXllcjtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldEJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiBnbEJpbmRpbmc7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRGcmFtZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHhyRnJhbWU7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gc2Vzc2lvbjtcblxuXHRcdH07XG5cblx0XHR0aGlzLnNldFNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRzZXNzaW9uID0gdmFsdWU7XG5cblx0XHRcdGlmICggc2Vzc2lvbiAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRpbml0aWFsUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnc2VsZWN0Jywgb25TZXNzaW9uRXZlbnQgKTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnc2VsZWN0c3RhcnQnLCBvblNlc3Npb25FdmVudCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzZWxlY3RlbmQnLCBvblNlc3Npb25FdmVudCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdzcXVlZXplJywgb25TZXNzaW9uRXZlbnQgKTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnc3F1ZWV6ZXN0YXJ0Jywgb25TZXNzaW9uRXZlbnQgKTtcblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnc3F1ZWV6ZWVuZCcsIG9uU2Vzc2lvbkV2ZW50ICk7XG5cdFx0XHRcdHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ2VuZCcsIG9uU2Vzc2lvbkVuZCApO1xuXHRcdFx0XHRzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dHNvdXJjZXNjaGFuZ2UnLCBvbklucHV0U291cmNlc0NoYW5nZSApO1xuXG5cdFx0XHRcdGlmICggYXR0cmlidXRlcy54ckNvbXBhdGlibGUgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRhd2FpdCBnbC5tYWtlWFJDb21wYXRpYmxlKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggKCBzZXNzaW9uLnJlbmRlclN0YXRlLmxheWVycyA9PT0gdW5kZWZpbmVkICkgfHwgKCByZW5kZXJlci5jYXBhYmlsaXRpZXMuaXNXZWJHTDIgPT09IGZhbHNlICkgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBsYXllckluaXQgPSB7XG5cdFx0XHRcdFx0XHRhbnRpYWxpYXM6ICggc2Vzc2lvbi5yZW5kZXJTdGF0ZS5sYXllcnMgPT09IHVuZGVmaW5lZCApID8gYXR0cmlidXRlcy5hbnRpYWxpYXMgOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxwaGE6IGF0dHJpYnV0ZXMuYWxwaGEsXG5cdFx0XHRcdFx0XHRkZXB0aDogYXR0cmlidXRlcy5kZXB0aCxcblx0XHRcdFx0XHRcdHN0ZW5jaWw6IGF0dHJpYnV0ZXMuc3RlbmNpbCxcblx0XHRcdFx0XHRcdGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3Jcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Z2xCYXNlTGF5ZXIgPSBuZXcgWFJXZWJHTExheWVyKCBzZXNzaW9uLCBnbCwgbGF5ZXJJbml0ICk7XG5cblx0XHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKCB7IGJhc2VMYXllcjogZ2xCYXNlTGF5ZXIgfSApO1xuXG5cdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KFxuXHRcdFx0XHRcdFx0Z2xCYXNlTGF5ZXIuZnJhbWVidWZmZXJXaWR0aCxcblx0XHRcdFx0XHRcdGdsQmFzZUxheWVyLmZyYW1lYnVmZmVySGVpZ2h0LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFVuc2lnbmVkQnl0ZVR5cGUsXG5cdFx0XHRcdFx0XHRcdGVuY29kaW5nOiByZW5kZXJlci5vdXRwdXRFbmNvZGluZ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlzTXVsdGlzYW1wbGUgPSBhdHRyaWJ1dGVzLmFudGlhbGlhcztcblx0XHRcdFx0XHRsZXQgZGVwdGhGb3JtYXQgPSBudWxsO1xuXHRcdFx0XHRcdGxldCBkZXB0aFR5cGUgPSBudWxsO1xuXHRcdFx0XHRcdGxldCBnbERlcHRoRm9ybWF0ID0gbnVsbDtcblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5kZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0Z2xEZXB0aEZvcm1hdCA9IGF0dHJpYnV0ZXMuc3RlbmNpbCA/IDM1MDU2IDogMzMxOTA7XG5cdFx0XHRcdFx0XHRkZXB0aEZvcm1hdCA9IGF0dHJpYnV0ZXMuc3RlbmNpbCA/IERlcHRoU3RlbmNpbEZvcm1hdCA6IERlcHRoRm9ybWF0O1xuXHRcdFx0XHRcdFx0ZGVwdGhUeXBlID0gYXR0cmlidXRlcy5zdGVuY2lsID8gVW5zaWduZWRJbnQyNDhUeXBlIDogVW5zaWduZWRTaG9ydFR5cGU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBwcm9qZWN0aW9ubGF5ZXJJbml0ID0ge1xuXHRcdFx0XHRcdFx0Y29sb3JGb3JtYXQ6ICggcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZyApID8gMzU5MDcgOiAzMjg1Nixcblx0XHRcdFx0XHRcdGRlcHRoRm9ybWF0OiBnbERlcHRoRm9ybWF0LFxuXHRcdFx0XHRcdFx0c2NhbGVGYWN0b3I6IGZyYW1lYnVmZmVyU2NhbGVGYWN0b3Jcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Z2xCaW5kaW5nID0gbmV3IFhSV2ViR0xCaW5kaW5nKCBzZXNzaW9uLCBnbCApO1xuXG5cdFx0XHRcdFx0Z2xQcm9qTGF5ZXIgPSBnbEJpbmRpbmcuY3JlYXRlUHJvamVjdGlvbkxheWVyKCBwcm9qZWN0aW9ubGF5ZXJJbml0ICk7XG5cblx0XHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKCB7IGxheWVyczogWyBnbFByb2pMYXllciBdIH0gKTtcblxuXHRcdFx0XHRcdGlmICggaXNNdWx0aXNhbXBsZSApIHtcblxuXHRcdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoXG5cdFx0XHRcdFx0XHRcdGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCxcblx0XHRcdFx0XHRcdFx0Z2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBVbnNpZ25lZEJ5dGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdGRlcHRoVGV4dHVyZTogbmV3IERlcHRoVGV4dHVyZSggZ2xQcm9qTGF5ZXIudGV4dHVyZVdpZHRoLCBnbFByb2pMYXllci50ZXh0dXJlSGVpZ2h0LCBkZXB0aFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGRlcHRoRm9ybWF0ICksXG5cdFx0XHRcdFx0XHRcdFx0c3RlbmNpbEJ1ZmZlcjogYXR0cmlidXRlcy5zdGVuY2lsLFxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZURlcHRoOiBnbFByb2pMYXllci5pZ25vcmVEZXB0aFZhbHVlcyxcblx0XHRcdFx0XHRcdFx0XHR1c2VSZW5kZXJUb1RleHR1cmU6IGhhc011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSxcblx0XHRcdFx0XHRcdFx0XHRlbmNvZGluZzogcmVuZGVyZXIub3V0cHV0RW5jb2Rpbmdcblx0XHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KFxuXHRcdFx0XHRcdFx0XHRnbFByb2pMYXllci50ZXh0dXJlV2lkdGgsXG5cdFx0XHRcdFx0XHRcdGdsUHJvakxheWVyLnRleHR1cmVIZWlnaHQsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRkZXB0aFRleHR1cmU6IG5ldyBEZXB0aFRleHR1cmUoIGdsUHJvakxheWVyLnRleHR1cmVXaWR0aCwgZ2xQcm9qTGF5ZXIudGV4dHVyZUhlaWdodCwgZGVwdGhUeXBlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBkZXB0aEZvcm1hdCApLFxuXHRcdFx0XHRcdFx0XHRcdHN0ZW5jaWxCdWZmZXI6IGF0dHJpYnV0ZXMuc3RlbmNpbCxcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVEZXB0aDogZ2xQcm9qTGF5ZXIuaWdub3JlRGVwdGhWYWx1ZXMsXG5cdFx0XHRcdFx0XHRcdFx0ZW5jb2Rpbmc6IHJlbmRlcmVyLm91dHB1dEVuY29kaW5nXG5cdFx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bmV3UmVuZGVyVGFyZ2V0LmlzWFJSZW5kZXJUYXJnZXQgPSB0cnVlOyAvLyBUT0RPIFJlbW92ZSB0aGlzIHdoZW4gcG9zc2libGUsIHNlZSAjMjMyNzhcblxuXHRcdFx0XHQvLyBTZXQgZm92ZWF0aW9uIHRvIG1heGltdW0uXG5cdFx0XHRcdHRoaXMuc2V0Rm92ZWF0aW9uKCAxLjAgKTtcblxuXHRcdFx0XHRyZWZlcmVuY2VTcGFjZSA9IGF3YWl0IHNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKCByZWZlcmVuY2VTcGFjZVR5cGUgKTtcblxuXHRcdFx0XHRhbmltYXRpb24uc2V0Q29udGV4dCggc2Vzc2lvbiApO1xuXHRcdFx0XHRhbmltYXRpb24uc3RhcnQoKTtcblxuXHRcdFx0XHRzY29wZS5pc1ByZXNlbnRpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ3Nlc3Npb25zdGFydCcgfSApO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gb25JbnB1dFNvdXJjZXNDaGFuZ2UoIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0U291cmNlcztcblxuXHRcdFx0Ly8gQXNzaWduIGlucHV0U291cmNlcyB0byBhdmFpbGFibGUgY29udHJvbGxlcnNcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29udHJvbGxlcnMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGlucHV0U291cmNlc01hcC5zZXQoIGlucHV0U291cmNlc1sgaSBdLCBjb250cm9sbGVyc1sgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gTm90aWZ5IGRpc2Nvbm5lY3RlZFxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBldmVudC5yZW1vdmVkLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbnB1dFNvdXJjZSA9IGV2ZW50LnJlbW92ZWRbIGkgXTtcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGlucHV0U291cmNlc01hcC5nZXQoIGlucHV0U291cmNlICk7XG5cblx0XHRcdFx0aWYgKCBjb250cm9sbGVyICkge1xuXG5cdFx0XHRcdFx0Y29udHJvbGxlci5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNjb25uZWN0ZWQnLCBkYXRhOiBpbnB1dFNvdXJjZSB9ICk7XG5cdFx0XHRcdFx0aW5wdXRTb3VyY2VzTWFwLmRlbGV0ZSggaW5wdXRTb3VyY2UgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gTm90aWZ5IGNvbm5lY3RlZFxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBldmVudC5hZGRlZC5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW5wdXRTb3VyY2UgPSBldmVudC5hZGRlZFsgaSBdO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gaW5wdXRTb3VyY2VzTWFwLmdldCggaW5wdXRTb3VyY2UgKTtcblxuXHRcdFx0XHRpZiAoIGNvbnRyb2xsZXIgKSB7XG5cblx0XHRcdFx0XHRjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Nvbm5lY3RlZCcsIGRhdGE6IGlucHV0U291cmNlIH0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRjb25zdCBjYW1lcmFMUG9zID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBjYW1lcmFSUG9zID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdC8qKlxuXHRcdCAqIEFzc3VtZXMgMiBjYW1lcmFzIHRoYXQgYXJlIHBhcmFsbGVsIGFuZCBzaGFyZSBhbiBYLWF4aXMsIGFuZCB0aGF0XG5cdFx0ICogdGhlIGNhbWVyYXMnIHByb2plY3Rpb24gYW5kIHdvcmxkIG1hdHJpY2VzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC5cblx0XHQgKiBBbmQgdGhhdCBuZWFyIGFuZCBmYXIgcGxhbmVzIGFyZSBpZGVudGljYWwgZm9yIGJvdGggY2FtZXJhcy5cblx0XHQgKiBWaXN1YWxpemF0aW9uIG9mIHRoaXMgdGVjaG5pcXVlOiBodHRwczovL2NvbXB1dGVyZ3JhcGhpY3Muc3RhY2tleGNoYW5nZS5jb20vYS80NzY1XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gc2V0UHJvamVjdGlvbkZyb21VbmlvbiggY2FtZXJhLCBjYW1lcmFMLCBjYW1lcmFSICkge1xuXG5cdFx0XHRjYW1lcmFMUG9zLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhTC5tYXRyaXhXb3JsZCApO1xuXHRcdFx0Y2FtZXJhUlBvcy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGNhbWVyYVIubWF0cml4V29ybGQgKTtcblxuXHRcdFx0Y29uc3QgaXBkID0gY2FtZXJhTFBvcy5kaXN0YW5jZVRvKCBjYW1lcmFSUG9zICk7XG5cblx0XHRcdGNvbnN0IHByb2pMID0gY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzO1xuXHRcdFx0Y29uc3QgcHJvalIgPSBjYW1lcmFSLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHM7XG5cblx0XHRcdC8vIFZSIHN5c3RlbXMgd2lsbCBoYXZlIGlkZW50aWNhbCBmYXIgYW5kIG5lYXIgcGxhbmVzLCBhbmRcblx0XHRcdC8vIG1vc3QgbGlrZWx5IGlkZW50aWNhbCB0b3AgYW5kIGJvdHRvbSBmcnVzdHVtIGV4dGVudHMuXG5cdFx0XHQvLyBVc2UgdGhlIGxlZnQgY2FtZXJhIGZvciB0aGVzZSB2YWx1ZXMuXG5cdFx0XHRjb25zdCBuZWFyID0gcHJvakxbIDE0IF0gLyAoIHByb2pMWyAxMCBdIC0gMSApO1xuXHRcdFx0Y29uc3QgZmFyID0gcHJvakxbIDE0IF0gLyAoIHByb2pMWyAxMCBdICsgMSApO1xuXHRcdFx0Y29uc3QgdG9wRm92ID0gKCBwcm9qTFsgOSBdICsgMSApIC8gcHJvakxbIDUgXTtcblx0XHRcdGNvbnN0IGJvdHRvbUZvdiA9ICggcHJvakxbIDkgXSAtIDEgKSAvIHByb2pMWyA1IF07XG5cblx0XHRcdGNvbnN0IGxlZnRGb3YgPSAoIHByb2pMWyA4IF0gLSAxICkgLyBwcm9qTFsgMCBdO1xuXHRcdFx0Y29uc3QgcmlnaHRGb3YgPSAoIHByb2pSWyA4IF0gKyAxICkgLyBwcm9qUlsgMCBdO1xuXHRcdFx0Y29uc3QgbGVmdCA9IG5lYXIgKiBsZWZ0Rm92O1xuXHRcdFx0Y29uc3QgcmlnaHQgPSBuZWFyICogcmlnaHRGb3Y7XG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgbmV3IGNhbWVyYSdzIHBvc2l0aW9uIG9mZnNldCBmcm9tIHRoZVxuXHRcdFx0Ly8gbGVmdCBjYW1lcmEuIHhPZmZzZXQgc2hvdWxkIGJlIHJvdWdobHkgaGFsZiBgaXBkYC5cblx0XHRcdGNvbnN0IHpPZmZzZXQgPSBpcGQgLyAoIC0gbGVmdEZvdiArIHJpZ2h0Rm92ICk7XG5cdFx0XHRjb25zdCB4T2Zmc2V0ID0gek9mZnNldCAqIC0gbGVmdEZvdjtcblxuXHRcdFx0Ly8gVE9ETzogQmV0dGVyIHdheSB0byBhcHBseSB0aGlzIG9mZnNldD9cblx0XHRcdGNhbWVyYUwubWF0cml4V29ybGQuZGVjb21wb3NlKCBjYW1lcmEucG9zaXRpb24sIGNhbWVyYS5xdWF0ZXJuaW9uLCBjYW1lcmEuc2NhbGUgKTtcblx0XHRcdGNhbWVyYS50cmFuc2xhdGVYKCB4T2Zmc2V0ICk7XG5cdFx0XHRjYW1lcmEudHJhbnNsYXRlWiggek9mZnNldCApO1xuXHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkLmNvbXBvc2UoIGNhbWVyYS5wb3NpdGlvbiwgY2FtZXJhLnF1YXRlcm5pb24sIGNhbWVyYS5zY2FsZSApO1xuXHRcdFx0Y2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KCBjYW1lcmEubWF0cml4V29ybGQgKS5pbnZlcnQoKTtcblxuXHRcdFx0Ly8gRmluZCB0aGUgdW5pb24gb2YgdGhlIGZydXN0dW0gdmFsdWVzIG9mIHRoZSBjYW1lcmFzIGFuZCBzY2FsZVxuXHRcdFx0Ly8gdGhlIHZhbHVlcyBzbyB0aGF0IHRoZSBuZWFyIHBsYW5lJ3MgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlIGluIHdvcmxkIHNwYWNlLFxuXHRcdFx0Ly8gYWx0aG91Z2ggbXVzdCBub3cgYmUgcmVsYXRpdmUgdG8gdGhlIG5ldyB1bmlvbiBjYW1lcmEuXG5cdFx0XHRjb25zdCBuZWFyMiA9IG5lYXIgKyB6T2Zmc2V0O1xuXHRcdFx0Y29uc3QgZmFyMiA9IGZhciArIHpPZmZzZXQ7XG5cdFx0XHRjb25zdCBsZWZ0MiA9IGxlZnQgLSB4T2Zmc2V0O1xuXHRcdFx0Y29uc3QgcmlnaHQyID0gcmlnaHQgKyAoIGlwZCAtIHhPZmZzZXQgKTtcblx0XHRcdGNvbnN0IHRvcDIgPSB0b3BGb3YgKiBmYXIgLyBmYXIyICogbmVhcjI7XG5cdFx0XHRjb25zdCBib3R0b20yID0gYm90dG9tRm92ICogZmFyIC8gZmFyMiAqIG5lYXIyO1xuXG5cdFx0XHRjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQyLCByaWdodDIsIHRvcDIsIGJvdHRvbTIsIG5lYXIyLCBmYXIyICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB1cGRhdGVDYW1lcmEoIGNhbWVyYSwgcGFyZW50ICkge1xuXG5cdFx0XHRpZiAoIHBhcmVudCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRjYW1lcmEubWF0cml4V29ybGQuY29weSggY2FtZXJhLm1hdHJpeCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNhbWVyYS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCBwYXJlbnQubWF0cml4V29ybGQsIGNhbWVyYS5tYXRyaXggKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVDYW1lcmEgPSBmdW5jdGlvbiAoIGNhbWVyYSApIHtcblxuXHRcdFx0aWYgKCBzZXNzaW9uID09PSBudWxsICkgcmV0dXJuO1xuXG5cdFx0XHRjYW1lcmFWUi5uZWFyID0gY2FtZXJhUi5uZWFyID0gY2FtZXJhTC5uZWFyID0gY2FtZXJhLm5lYXI7XG5cdFx0XHRjYW1lcmFWUi5mYXIgPSBjYW1lcmFSLmZhciA9IGNhbWVyYUwuZmFyID0gY2FtZXJhLmZhcjtcblxuXHRcdFx0aWYgKCBfY3VycmVudERlcHRoTmVhciAhPT0gY2FtZXJhVlIubmVhciB8fCBfY3VycmVudERlcHRoRmFyICE9PSBjYW1lcmFWUi5mYXIgKSB7XG5cblx0XHRcdFx0Ly8gTm90ZSB0aGF0IHRoZSBuZXcgcmVuZGVyU3RhdGUgd29uJ3QgYXBwbHkgdW50aWwgdGhlIG5leHQgZnJhbWUuIFNlZSAjMTgzMjBcblxuXHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKCB7XG5cdFx0XHRcdFx0ZGVwdGhOZWFyOiBjYW1lcmFWUi5uZWFyLFxuXHRcdFx0XHRcdGRlcHRoRmFyOiBjYW1lcmFWUi5mYXJcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdF9jdXJyZW50RGVwdGhOZWFyID0gY2FtZXJhVlIubmVhcjtcblx0XHRcdFx0X2N1cnJlbnREZXB0aEZhciA9IGNhbWVyYVZSLmZhcjtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjYW1lcmEucGFyZW50O1xuXHRcdFx0Y29uc3QgY2FtZXJhcyA9IGNhbWVyYVZSLmNhbWVyYXM7XG5cblx0XHRcdHVwZGF0ZUNhbWVyYSggY2FtZXJhVlIsIHBhcmVudCApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjYW1lcmFzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHR1cGRhdGVDYW1lcmEoIGNhbWVyYXNbIGkgXSwgcGFyZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Y2FtZXJhVlIubWF0cml4V29ybGQuZGVjb21wb3NlKCBjYW1lcmFWUi5wb3NpdGlvbiwgY2FtZXJhVlIucXVhdGVybmlvbiwgY2FtZXJhVlIuc2NhbGUgKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHVzZXIgY2FtZXJhIGFuZCBpdHMgY2hpbGRyZW5cblxuXHRcdFx0Y2FtZXJhLnBvc2l0aW9uLmNvcHkoIGNhbWVyYVZSLnBvc2l0aW9uICk7XG5cdFx0XHRjYW1lcmEucXVhdGVybmlvbi5jb3B5KCBjYW1lcmFWUi5xdWF0ZXJuaW9uICk7XG5cdFx0XHRjYW1lcmEuc2NhbGUuY29weSggY2FtZXJhVlIuc2NhbGUgKTtcblx0XHRcdGNhbWVyYS5tYXRyaXguY29weSggY2FtZXJhVlIubWF0cml4ICk7XG5cdFx0XHRjYW1lcmEubWF0cml4V29ybGQuY29weSggY2FtZXJhVlIubWF0cml4V29ybGQgKTtcblxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBjYW1lcmEuY2hpbGRyZW47XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y2hpbGRyZW5bIGkgXS51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCBmb3IgcHJvcGVyIHZpZXcgZnJ1c3R1bSBjdWxsaW5nXG5cblx0XHRcdGlmICggY2FtZXJhcy5sZW5ndGggPT09IDIgKSB7XG5cblx0XHRcdFx0c2V0UHJvamVjdGlvbkZyb21VbmlvbiggY2FtZXJhVlIsIGNhbWVyYUwsIGNhbWVyYVIgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBhc3N1bWUgc2luZ2xlIGNhbWVyYSBzZXR1cCAoQVIpXG5cblx0XHRcdFx0Y2FtZXJhVlIucHJvamVjdGlvbk1hdHJpeC5jb3B5KCBjYW1lcmFMLnByb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0Q2FtZXJhID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gY2FtZXJhVlI7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRGb3ZlYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGlmICggZ2xQcm9qTGF5ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGdsUHJvakxheWVyLmZpeGVkRm92ZWF0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggZ2xCYXNlTGF5ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGdsQmFzZUxheWVyLmZpeGVkRm92ZWF0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRGb3ZlYXRpb24gPSBmdW5jdGlvbiAoIGZvdmVhdGlvbiApIHtcblxuXHRcdFx0Ly8gMCA9IG5vIGZvdmVhdGlvbiA9IGZ1bGwgcmVzb2x1dGlvblxuXHRcdFx0Ly8gMSA9IG1heGltdW0gZm92ZWF0aW9uID0gdGhlIGVkZ2VzIHJlbmRlciBhdCBsb3dlciByZXNvbHV0aW9uXG5cblx0XHRcdGlmICggZ2xQcm9qTGF5ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Z2xQcm9qTGF5ZXIuZml4ZWRGb3ZlYXRpb24gPSBmb3ZlYXRpb247XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBnbEJhc2VMYXllciAhPT0gbnVsbCAmJiBnbEJhc2VMYXllci5maXhlZEZvdmVhdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGdsQmFzZUxheWVyLmZpeGVkRm92ZWF0aW9uID0gZm92ZWF0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0Ly8gQW5pbWF0aW9uIExvb3BcblxuXHRcdGxldCBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBudWxsO1xuXG5cdFx0ZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggdGltZSwgZnJhbWUgKSB7XG5cblx0XHRcdHBvc2UgPSBmcmFtZS5nZXRWaWV3ZXJQb3NlKCByZWZlcmVuY2VTcGFjZSApO1xuXHRcdFx0eHJGcmFtZSA9IGZyYW1lO1xuXG5cdFx0XHRpZiAoIHBvc2UgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc3Qgdmlld3MgPSBwb3NlLnZpZXdzO1xuXG5cdFx0XHRcdGlmICggZ2xCYXNlTGF5ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlciggbmV3UmVuZGVyVGFyZ2V0LCBnbEJhc2VMYXllci5mcmFtZWJ1ZmZlciApO1xuXHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggbmV3UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBjYW1lcmFWUk5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgaXQncyBuZWNlc3NhcnkgdG8gcmVidWlsZCBjYW1lcmFWUidzIGNhbWVyYSBsaXN0XG5cblx0XHRcdFx0aWYgKCB2aWV3cy5sZW5ndGggIT09IGNhbWVyYVZSLmNhbWVyYXMubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Y2FtZXJhVlIuY2FtZXJhcy5sZW5ndGggPSAwO1xuXHRcdFx0XHRcdGNhbWVyYVZSTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB2aWV3ID0gdmlld3NbIGkgXTtcblxuXHRcdFx0XHRcdGxldCB2aWV3cG9ydCA9IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoIGdsQmFzZUxheWVyICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHR2aWV3cG9ydCA9IGdsQmFzZUxheWVyLmdldFZpZXdwb3J0KCB2aWV3ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBnbFN1YkltYWdlID0gZ2xCaW5kaW5nLmdldFZpZXdTdWJJbWFnZSggZ2xQcm9qTGF5ZXIsIHZpZXcgKTtcblx0XHRcdFx0XHRcdHZpZXdwb3J0ID0gZ2xTdWJJbWFnZS52aWV3cG9ydDtcblxuXHRcdFx0XHRcdFx0Ly8gRm9yIHNpZGUtYnktc2lkZSBwcm9qZWN0aW9uLCB3ZSBvbmx5IHByb2R1Y2UgYSBzaW5nbGUgdGV4dHVyZSBmb3IgYm90aCBleWVzLlxuXHRcdFx0XHRcdFx0aWYgKCBpID09PSAwICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldFRleHR1cmVzKFxuXHRcdFx0XHRcdFx0XHRcdG5ld1JlbmRlclRhcmdldCxcblx0XHRcdFx0XHRcdFx0XHRnbFN1YkltYWdlLmNvbG9yVGV4dHVyZSxcblx0XHRcdFx0XHRcdFx0XHRnbFByb2pMYXllci5pZ25vcmVEZXB0aFZhbHVlcyA/IHVuZGVmaW5lZCA6IGdsU3ViSW1hZ2UuZGVwdGhTdGVuY2lsVGV4dHVyZSApO1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggbmV3UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGNhbWVyYSA9IGNhbWVyYXNbIGkgXTtcblxuXHRcdFx0XHRcdGNhbWVyYS5tYXRyaXguZnJvbUFycmF5KCB2aWV3LnRyYW5zZm9ybS5tYXRyaXggKTtcblx0XHRcdFx0XHRjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoIHZpZXcucHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdFx0XHRcdGNhbWVyYS52aWV3cG9ydC5zZXQoIHZpZXdwb3J0LngsIHZpZXdwb3J0LnksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQgKTtcblxuXHRcdFx0XHRcdGlmICggaSA9PT0gMCApIHtcblxuXHRcdFx0XHRcdFx0Y2FtZXJhVlIubWF0cml4LmNvcHkoIGNhbWVyYS5tYXRyaXggKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggY2FtZXJhVlJOZWVkc1VwZGF0ZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0Y2FtZXJhVlIuY2FtZXJhcy5wdXNoKCBjYW1lcmEgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9cblxuXHRcdFx0Y29uc3QgaW5wdXRTb3VyY2VzID0gc2Vzc2lvbi5pbnB1dFNvdXJjZXM7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gY29udHJvbGxlcnNbIGkgXTtcblx0XHRcdFx0Y29uc3QgaW5wdXRTb3VyY2UgPSBpbnB1dFNvdXJjZXNbIGkgXTtcblxuXHRcdFx0XHRjb250cm9sbGVyLnVwZGF0ZSggaW5wdXRTb3VyY2UsIGZyYW1lLCByZWZlcmVuY2VTcGFjZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggb25BbmltYXRpb25GcmFtZUNhbGxiYWNrICkgb25BbmltYXRpb25GcmFtZUNhbGxiYWNrKCB0aW1lLCBmcmFtZSApO1xuXG5cdFx0XHR4ckZyYW1lID0gbnVsbDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBXZWJHTEFuaW1hdGlvbigpO1xuXG5cdFx0YW5pbWF0aW9uLnNldEFuaW1hdGlvbkxvb3AoIG9uQW5pbWF0aW9uRnJhbWUgKTtcblxuXHRcdHRoaXMuc2V0QW5pbWF0aW9uTG9vcCA9IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7XG5cblx0XHRcdG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cdH1cblxufVxuXG5mdW5jdGlvbiBXZWJHTE1hdGVyaWFscyggcHJvcGVydGllcyApIHtcblxuXHRmdW5jdGlvbiByZWZyZXNoRm9nVW5pZm9ybXMoIHVuaWZvcm1zLCBmb2cgKSB7XG5cblx0XHR1bmlmb3Jtcy5mb2dDb2xvci52YWx1ZS5jb3B5KCBmb2cuY29sb3IgKTtcblxuXHRcdGlmICggZm9nLmlzRm9nICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5mb2dOZWFyLnZhbHVlID0gZm9nLm5lYXI7XG5cdFx0XHR1bmlmb3Jtcy5mb2dGYXIudmFsdWUgPSBmb2cuZmFyO1xuXG5cdFx0fSBlbHNlIGlmICggZm9nLmlzRm9nRXhwMiApIHtcblxuXHRcdFx0dW5pZm9ybXMuZm9nRGVuc2l0eS52YWx1ZSA9IGZvZy5kZW5zaXR5O1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyggdW5pZm9ybXMsIG1hdGVyaWFsLCBwaXhlbFJhdGlvLCBoZWlnaHQsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldCApIHtcblxuXHRcdGlmICggbWF0ZXJpYWwuaXNNZXNoQmFzaWNNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0xhbWJlcnQoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zVG9vbiggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXHRcdFx0cmVmcmVzaFVuaWZvcm1zUGhvbmcoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsICkge1xuXG5cdFx0XHRcdHJlZnJlc2hVbmlmb3Jtc1BoeXNpY2FsKCB1bmlmb3JtcywgbWF0ZXJpYWwsIHRyYW5zbWlzc2lvblJlbmRlclRhcmdldCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoTWF0Y2FwTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNNYXRjYXAoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoRGVwdGhNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0RlcHRoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNEaXN0YW5jZSggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hOb3JtYWxNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblx0XHRcdHJlZnJlc2hVbmlmb3Jtc05vcm1hbCggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc0xpbmVCYXNpY01hdGVyaWFsICkge1xuXG5cdFx0XHRyZWZyZXNoVW5pZm9ybXNMaW5lKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc0xpbmVEYXNoZWRNYXRlcmlhbCApIHtcblxuXHRcdFx0XHRyZWZyZXNoVW5pZm9ybXNEYXNoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNQb2ludHNNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zUG9pbnRzKCB1bmlmb3JtcywgbWF0ZXJpYWwsIHBpeGVsUmF0aW8sIGhlaWdodCApO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNTcHJpdGVNYXRlcmlhbCApIHtcblxuXHRcdFx0cmVmcmVzaFVuaWZvcm1zU3ByaXRlcyggdW5pZm9ybXMsIG1hdGVyaWFsICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1NoYWRvd01hdGVyaWFsICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5jb2xvci52YWx1ZS5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXHRcdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICkge1xuXG5cdFx0XHRtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTsgLy8gIzE1NTgxXG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0dW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmNvbG9yICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmVtaXNzaXZlICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5lbWlzc2l2ZSApLm11bHRpcGx5U2NhbGFyKCBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm1hcC52YWx1ZSA9IG1hdGVyaWFsLm1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYWxwaGFNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmFscGhhTWFwLnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLnNwZWN1bGFyTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5zcGVjdWxhck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFyTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5hbHBoYVRlc3QgPiAwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hbHBoYVRlc3QudmFsdWUgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cblx0XHR9XG5cblx0XHRjb25zdCBlbnZNYXAgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKS5lbnZNYXA7XG5cblx0XHRpZiAoIGVudk1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZW52TWFwLnZhbHVlID0gZW52TWFwO1xuXG5cdFx0XHR1bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlID0gKCBlbnZNYXAuaXNDdWJlVGV4dHVyZSAmJiBlbnZNYXAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlID09PSBmYWxzZSApID8gLSAxIDogMTtcblxuXHRcdFx0dW5pZm9ybXMucmVmbGVjdGl2aXR5LnZhbHVlID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5O1xuXHRcdFx0dW5pZm9ybXMuaW9yLnZhbHVlID0gbWF0ZXJpYWwuaW9yO1xuXHRcdFx0dW5pZm9ybXMucmVmcmFjdGlvblJhdGlvLnZhbHVlID0gbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5saWdodE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubGlnaHRNYXAudmFsdWUgPSBtYXRlcmlhbC5saWdodE1hcDtcblx0XHRcdHVuaWZvcm1zLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmFvTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hb01hcC52YWx1ZSA9IG1hdGVyaWFsLmFvTWFwO1xuXHRcdFx0dW5pZm9ybXMuYW9NYXBJbnRlbnNpdHkudmFsdWUgPSBtYXRlcmlhbC5hb01hcEludGVuc2l0eTtcblxuXHRcdH1cblxuXHRcdC8vIHV2IHJlcGVhdCBhbmQgb2Zmc2V0IHNldHRpbmcgcHJpb3JpdGllc1xuXHRcdC8vIDEuIGNvbG9yIG1hcFxuXHRcdC8vIDIuIHNwZWN1bGFyIG1hcFxuXHRcdC8vIDMuIGRpc3BsYWNlbWVudE1hcCBtYXBcblx0XHQvLyA0LiBub3JtYWwgbWFwXG5cdFx0Ly8gNS4gYnVtcCBtYXBcblx0XHQvLyA2LiByb3VnaG5lc3NNYXAgbWFwXG5cdFx0Ly8gNy4gbWV0YWxuZXNzTWFwIG1hcFxuXHRcdC8vIDguIGFscGhhTWFwIG1hcFxuXHRcdC8vIDkuIGVtaXNzaXZlTWFwIG1hcFxuXHRcdC8vIDEwLiBjbGVhcmNvYXQgbWFwXG5cdFx0Ly8gMTEuIGNsZWFyY29hdCBub3JtYWwgbWFwXG5cdFx0Ly8gMTIuIGNsZWFyY29hdCByb3VnaG5lc3NNYXAgbWFwXG5cdFx0Ly8gMTMuIHNwZWN1bGFyIGludGVuc2l0eSBtYXBcblx0XHQvLyAxNC4gc3BlY3VsYXIgdGludCBtYXBcblx0XHQvLyAxNS4gdHJhbnNtaXNzaW9uIG1hcFxuXHRcdC8vIDE2LiB0aGlja25lc3MgbWFwXG5cblx0XHRsZXQgdXZTY2FsZU1hcDtcblxuXHRcdGlmICggbWF0ZXJpYWwubWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuc3BlY3VsYXJNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5zcGVjdWxhck1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5idW1wTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwucm91Z2huZXNzTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwucm91Z2huZXNzTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwubWV0YWxuZXNzTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubWV0YWxuZXNzTWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuYWxwaGFNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5jbGVhcmNvYXRNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5TWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC50cmFuc21pc3Npb25NYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC50aGlja25lc3NNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC50aGlja25lc3NNYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc2hlZW5Db2xvck1hcDtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIHV2U2NhbGVNYXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdGlmICggdXZTY2FsZU1hcC5pc1dlYkdMUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRcdHV2U2NhbGVNYXAgPSB1dlNjYWxlTWFwLnRleHR1cmU7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB1dlNjYWxlTWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0dXZTY2FsZU1hcC51cGRhdGVNYXRyaXgoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KCB1dlNjYWxlTWFwLm1hdHJpeCApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzIGZvciB1djJcblx0XHQvLyAxLiBhbyBtYXBcblx0XHQvLyAyLiBsaWdodCBtYXBcblxuXHRcdGxldCB1djJTY2FsZU1hcDtcblxuXHRcdGlmICggbWF0ZXJpYWwuYW9NYXAgKSB7XG5cblx0XHRcdHV2MlNjYWxlTWFwID0gbWF0ZXJpYWwuYW9NYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5saWdodE1hcCApIHtcblxuXHRcdFx0dXYyU2NhbGVNYXAgPSBtYXRlcmlhbC5saWdodE1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggdXYyU2NhbGVNYXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdGlmICggdXYyU2NhbGVNYXAuaXNXZWJHTFJlbmRlclRhcmdldCApIHtcblxuXHRcdFx0XHR1djJTY2FsZU1hcCA9IHV2MlNjYWxlTWFwLnRleHR1cmU7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB1djJTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdHV2MlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KCB1djJTY2FsZU1hcC5tYXRyaXggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGluZSggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXHRcdHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5O1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNEYXNoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5kYXNoU2l6ZS52YWx1ZSA9IG1hdGVyaWFsLmRhc2hTaXplO1xuXHRcdHVuaWZvcm1zLnRvdGFsU2l6ZS52YWx1ZSA9IG1hdGVyaWFsLmRhc2hTaXplICsgbWF0ZXJpYWwuZ2FwU2l6ZTtcblx0XHR1bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IG1hdGVyaWFsLnNjYWxlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQb2ludHMoIHVuaWZvcm1zLCBtYXRlcmlhbCwgcGl4ZWxSYXRpbywgaGVpZ2h0ICkge1xuXG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXHRcdHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5O1xuXHRcdHVuaWZvcm1zLnNpemUudmFsdWUgPSBtYXRlcmlhbC5zaXplICogcGl4ZWxSYXRpbztcblx0XHR1bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IGhlaWdodCAqIDAuNTtcblxuXHRcdGlmICggbWF0ZXJpYWwubWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5tYXAudmFsdWUgPSBtYXRlcmlhbC5tYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmFscGhhTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hbHBoYU1hcC52YWx1ZSA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5hbHBoYVRlc3QgPiAwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5hbHBoYVRlc3QudmFsdWUgPSBtYXRlcmlhbC5hbHBoYVRlc3Q7XG5cblx0XHR9XG5cblx0XHQvLyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXNcblx0XHQvLyAxLiBjb2xvciBtYXBcblx0XHQvLyAyLiBhbHBoYSBtYXBcblxuXHRcdGxldCB1dlNjYWxlTWFwO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5tYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5hbHBoYU1hcCApIHtcblxuXHRcdFx0dXZTY2FsZU1hcCA9IG1hdGVyaWFsLmFscGhhTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB1dlNjYWxlTWFwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggdXZTY2FsZU1hcC5tYXRyaXhBdXRvVXBkYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdHV2U2NhbGVNYXAudXBkYXRlTWF0cml4KCk7XG5cblx0XHRcdH1cblxuXHRcdFx0dW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSggdXZTY2FsZU1hcC5tYXRyaXggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zU3ByaXRlcyggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0dW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXHRcdHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5O1xuXHRcdHVuaWZvcm1zLnJvdGF0aW9uLnZhbHVlID0gbWF0ZXJpYWwucm90YXRpb247XG5cblx0XHRpZiAoIG1hdGVyaWFsLm1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5hbHBoYU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYWxwaGFUZXN0ID4gMCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYWxwaGFUZXN0LnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFUZXN0O1xuXG5cdFx0fVxuXG5cdFx0Ly8gdXYgcmVwZWF0IGFuZCBvZmZzZXQgc2V0dGluZyBwcmlvcml0aWVzXG5cdFx0Ly8gMS4gY29sb3IgbWFwXG5cdFx0Ly8gMi4gYWxwaGEgbWFwXG5cblx0XHRsZXQgdXZTY2FsZU1hcDtcblxuXHRcdGlmICggbWF0ZXJpYWwubWFwICkge1xuXG5cdFx0XHR1dlNjYWxlTWFwID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuYWxwaGFNYXAgKSB7XG5cblx0XHRcdHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5hbHBoYU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggdXZTY2FsZU1hcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRpZiAoIHV2U2NhbGVNYXAubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHR1dlNjYWxlTWFwLnVwZGF0ZU1hdHJpeCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoIHV2U2NhbGVNYXAubWF0cml4ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0xhbWJlcnQoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdGlmICggbWF0ZXJpYWwuZW1pc3NpdmVNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Bob25nKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHR1bmlmb3Jtcy5zcGVjdWxhci52YWx1ZS5jb3B5KCBtYXRlcmlhbC5zcGVjdWxhciApO1xuXHRcdHVuaWZvcm1zLnNoaW5pbmVzcy52YWx1ZSA9IE1hdGgubWF4KCBtYXRlcmlhbC5zaGluaW5lc3MsIDFlLTQgKTsgLy8gdG8gcHJldmVudCBwb3coIDAuMCwgMC4wIClcblxuXHRcdGlmICggbWF0ZXJpYWwuZW1pc3NpdmVNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtIDE7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwubm9ybWFsU2NhbGUgKTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Rvb24oIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdGlmICggbWF0ZXJpYWwuZ3JhZGllbnRNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmdyYWRpZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZ3JhZGllbnRNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9IG1hdGVyaWFsLmVtaXNzaXZlTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5idW1wTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgKj0gLSAxO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5ub3JtYWxNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLm5vcm1hbFNjYWxlICk7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNTdGFuZGFyZCggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0dW5pZm9ybXMucm91Z2huZXNzLnZhbHVlID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHVuaWZvcm1zLm1ldGFsbmVzcy52YWx1ZSA9IG1hdGVyaWFsLm1ldGFsbmVzcztcblxuXHRcdGlmICggbWF0ZXJpYWwucm91Z2huZXNzTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5yb3VnaG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5yb3VnaG5lc3NNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm1ldGFsbmVzc01hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubWV0YWxuZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwubWV0YWxuZXNzTWFwO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuYnVtcE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7XG5cdFx0XHR1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0gMTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7XG5cdFx0XHR1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5ub3JtYWxTY2FsZSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdH1cblxuXHRcdGNvbnN0IGVudk1hcCA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApLmVudk1hcDtcblxuXHRcdGlmICggZW52TWFwICkge1xuXG5cdFx0XHQvL3VuaWZvcm1zLmVudk1hcC52YWx1ZSA9IG1hdGVyaWFsLmVudk1hcDsgLy8gcGFydCBvZiB1bmlmb3JtcyBjb21tb25cblx0XHRcdHVuaWZvcm1zLmVudk1hcEludGVuc2l0eS52YWx1ZSA9IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zUGh5c2ljYWwoIHVuaWZvcm1zLCBtYXRlcmlhbCwgdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0cmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQoIHVuaWZvcm1zLCBtYXRlcmlhbCApO1xuXG5cdFx0dW5pZm9ybXMuaW9yLnZhbHVlID0gbWF0ZXJpYWwuaW9yOyAvLyBhbHNvIHBhcnQgb2YgdW5pZm9ybXMgY29tbW9uXG5cblx0XHRpZiAoIG1hdGVyaWFsLnNoZWVuID4gMCApIHtcblxuXHRcdFx0dW5pZm9ybXMuc2hlZW5Db2xvci52YWx1ZS5jb3B5KCBtYXRlcmlhbC5zaGVlbkNvbG9yICkubXVsdGlwbHlTY2FsYXIoIG1hdGVyaWFsLnNoZWVuICk7XG5cblx0XHRcdHVuaWZvcm1zLnNoZWVuUm91Z2huZXNzLnZhbHVlID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3M7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuc2hlZW5Db2xvck1hcCApIHtcblxuXHRcdFx0XHR1bmlmb3Jtcy5zaGVlbkNvbG9yTWFwLnZhbHVlID0gbWF0ZXJpYWwuc2hlZW5Db2xvck1hcDtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXA7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuY2xlYXJjb2F0ID4gMCApIHtcblxuXHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0LnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmNsZWFyY29hdE1hcCApIHtcblxuXHRcdFx0XHR1bmlmb3Jtcy5jbGVhcmNvYXRNYXAudmFsdWUgPSBtYXRlcmlhbC5jbGVhcmNvYXRNYXA7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgKSB7XG5cblx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuY2xlYXJjb2F0Tm9ybWFsTWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbFNjYWxlICk7XG5cdFx0XHRcdHVuaWZvcm1zLmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcDtcblxuXHRcdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkge1xuXG5cdFx0XHRcdFx0dW5pZm9ybXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA+IDAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvbi52YWx1ZSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWUgPSB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldCggdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0LndpZHRoLCB0cmFuc21pc3Npb25SZW5kZXJUYXJnZXQuaGVpZ2h0ICk7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLnRyYW5zbWlzc2lvbk1hcC52YWx1ZSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcDtcblxuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy50aGlja25lc3MudmFsdWUgPSBtYXRlcmlhbC50aGlja25lc3M7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwudGhpY2tuZXNzTWFwICkge1xuXG5cdFx0XHRcdHVuaWZvcm1zLnRoaWNrbmVzc01hcC52YWx1ZSA9IG1hdGVyaWFsLnRoaWNrbmVzc01hcDtcblxuXHRcdFx0fVxuXG5cdFx0XHR1bmlmb3Jtcy5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRcdHVuaWZvcm1zLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weSggbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciApO1xuXG5cdFx0fVxuXG5cdFx0dW5pZm9ybXMuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eTtcblx0XHR1bmlmb3Jtcy5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKTtcblxuXHRcdGlmICggbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlID0gbWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLnNwZWN1bGFyQ29sb3JNYXAudmFsdWUgPSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yTWFwO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNNYXRjYXAoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHtcblxuXHRcdGlmICggbWF0ZXJpYWwubWF0Y2FwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5tYXRjYXAudmFsdWUgPSBtYXRlcmlhbC5tYXRjYXA7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwO1xuXHRcdFx0dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBCYWNrU2lkZSApIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSAqPSAtIDE7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9ybWFsTWFwO1xuXHRcdFx0dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwubm9ybWFsU2NhbGUgKTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0RlcHRoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNEaXN0YW5jZSggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0XHR1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdH1cblxuXHRcdHVuaWZvcm1zLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoIG1hdGVyaWFsLnJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdFx0dW5pZm9ybXMubmVhckRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwubmVhckRpc3RhbmNlO1xuXHRcdHVuaWZvcm1zLmZhckRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwuZmFyRGlzdGFuY2U7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc05vcm1hbCggdW5pZm9ybXMsIG1hdGVyaWFsICkge1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5idW1wTWFwICkge1xuXG5cdFx0XHR1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDtcblx0XHRcdHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTtcblx0XHRcdGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgKj0gLSAxO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5ub3JtYWxNYXAgKSB7XG5cblx0XHRcdHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDtcblx0XHRcdHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoIG1hdGVyaWFsLm5vcm1hbFNjYWxlICk7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHtcblxuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwO1xuXHRcdFx0dW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHRcdHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHJlZnJlc2hGb2dVbmlmb3JtczogcmVmcmVzaEZvZ1VuaWZvcm1zLFxuXHRcdHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOiByZWZyZXNoTWF0ZXJpYWxVbmlmb3Jtc1xuXHR9O1xuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQoKSB7XG5cblx0Y29uc3QgY2FudmFzID0gY3JlYXRlRWxlbWVudE5TKCAnY2FudmFzJyApO1xuXHRjYW52YXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdHJldHVybiBjYW52YXM7XG5cbn1cblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJlciggcGFyYW1ldGVycyA9IHt9ICkge1xuXG5cdGNvbnN0IF9jYW52YXMgPSBwYXJhbWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5jYW52YXMgOiBjcmVhdGVDYW52YXNFbGVtZW50KCksXG5cdFx0X2NvbnRleHQgPSBwYXJhbWV0ZXJzLmNvbnRleHQgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuY29udGV4dCA6IG51bGwsXG5cblx0XHRfYWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFscGhhIDogZmFsc2UsXG5cdFx0X2RlcHRoID0gcGFyYW1ldGVycy5kZXB0aCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5kZXB0aCA6IHRydWUsXG5cdFx0X3N0ZW5jaWwgPSBwYXJhbWV0ZXJzLnN0ZW5jaWwgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuc3RlbmNpbCA6IHRydWUsXG5cdFx0X2FudGlhbGlhcyA9IHBhcmFtZXRlcnMuYW50aWFsaWFzICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFudGlhbGlhcyA6IGZhbHNlLFxuXHRcdF9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEgOiB0cnVlLFxuXHRcdF9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBwYXJhbWV0ZXJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgOiBmYWxzZSxcblx0XHRfcG93ZXJQcmVmZXJlbmNlID0gcGFyYW1ldGVycy5wb3dlclByZWZlcmVuY2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucG93ZXJQcmVmZXJlbmNlIDogJ2RlZmF1bHQnLFxuXHRcdF9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gcGFyYW1ldGVycy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgOiBmYWxzZTtcblxuXHRsZXQgY3VycmVudFJlbmRlckxpc3QgPSBudWxsO1xuXHRsZXQgY3VycmVudFJlbmRlclN0YXRlID0gbnVsbDtcblxuXHQvLyByZW5kZXIoKSBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgdHJpZ2dlcmVkIGJ5IGFub3RoZXIgcmVuZGVyLlxuXHQvLyBXZSB0cmFjayB0aGlzIHNvIHRoYXQgdGhlIG5lc3RlZCByZW5kZXIgY2FsbCBnZXRzIGl0cyBsaXN0IGFuZCBzdGF0ZSBpc29sYXRlZCBmcm9tIHRoZSBwYXJlbnQgcmVuZGVyIGNhbGwuXG5cblx0Y29uc3QgcmVuZGVyTGlzdFN0YWNrID0gW107XG5cdGNvbnN0IHJlbmRlclN0YXRlU3RhY2sgPSBbXTtcblxuXHQvLyBwdWJsaWMgcHJvcGVydGllc1xuXG5cdHRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7XG5cblx0Ly8gRGVidWcgY29uZmlndXJhdGlvbiBjb250YWluZXJcblx0dGhpcy5kZWJ1ZyA9IHtcblxuXHRcdC8qKlxuXHRcdCAqIEVuYWJsZXMgZXJyb3IgY2hlY2tpbmcgYW5kIHJlcG9ydGluZyB3aGVuIHNoYWRlciBwcm9ncmFtcyBhcmUgYmVpbmcgY29tcGlsZWRcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHRjaGVja1NoYWRlckVycm9yczogdHJ1ZVxuXHR9O1xuXG5cdC8vIGNsZWFyaW5nXG5cblx0dGhpcy5hdXRvQ2xlYXIgPSB0cnVlO1xuXHR0aGlzLmF1dG9DbGVhckNvbG9yID0gdHJ1ZTtcblx0dGhpcy5hdXRvQ2xlYXJEZXB0aCA9IHRydWU7XG5cdHRoaXMuYXV0b0NsZWFyU3RlbmNpbCA9IHRydWU7XG5cblx0Ly8gc2NlbmUgZ3JhcGhcblxuXHR0aGlzLnNvcnRPYmplY3RzID0gdHJ1ZTtcblxuXHQvLyB1c2VyLWRlZmluZWQgY2xpcHBpbmdcblxuXHR0aGlzLmNsaXBwaW5nUGxhbmVzID0gW107XG5cdHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBmYWxzZTtcblxuXHQvLyBwaHlzaWNhbGx5IGJhc2VkIHNoYWRpbmdcblxuXHR0aGlzLm91dHB1dEVuY29kaW5nID0gTGluZWFyRW5jb2Rpbmc7XG5cblx0Ly8gcGh5c2ljYWwgbGlnaHRzXG5cblx0dGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IGZhbHNlO1xuXG5cdC8vIHRvbmUgbWFwcGluZ1xuXG5cdHRoaXMudG9uZU1hcHBpbmcgPSBOb1RvbmVNYXBwaW5nO1xuXHR0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmUgPSAxLjA7XG5cblx0Ly8gaW50ZXJuYWwgcHJvcGVydGllc1xuXG5cdGNvbnN0IF90aGlzID0gdGhpcztcblxuXHRsZXQgX2lzQ29udGV4dExvc3QgPSBmYWxzZTtcblxuXHQvLyBpbnRlcm5hbCBzdGF0ZSBjYWNoZVxuXG5cdGxldCBfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gMDtcblx0bGV0IF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWwgPSAwO1xuXHRsZXQgX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSBudWxsO1xuXHRsZXQgX2N1cnJlbnRNYXRlcmlhbElkID0gLSAxO1xuXG5cdGxldCBfY3VycmVudENhbWVyYSA9IG51bGw7XG5cblx0Y29uc3QgX2N1cnJlbnRWaWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7XG5cdGNvbnN0IF9jdXJyZW50U2Npc3NvciA9IG5ldyBWZWN0b3I0KCk7XG5cdGxldCBfY3VycmVudFNjaXNzb3JUZXN0ID0gbnVsbDtcblxuXHQvL1xuXG5cdGxldCBfd2lkdGggPSBfY2FudmFzLndpZHRoO1xuXHRsZXQgX2hlaWdodCA9IF9jYW52YXMuaGVpZ2h0O1xuXG5cdGxldCBfcGl4ZWxSYXRpbyA9IDE7XG5cdGxldCBfb3BhcXVlU29ydCA9IG51bGw7XG5cdGxldCBfdHJhbnNwYXJlbnRTb3J0ID0gbnVsbDtcblxuXHRjb25zdCBfdmlld3BvcnQgPSBuZXcgVmVjdG9yNCggMCwgMCwgX3dpZHRoLCBfaGVpZ2h0ICk7XG5cdGNvbnN0IF9zY2lzc29yID0gbmV3IFZlY3RvcjQoIDAsIDAsIF93aWR0aCwgX2hlaWdodCApO1xuXHRsZXQgX3NjaXNzb3JUZXN0ID0gZmFsc2U7XG5cblx0Ly8gZnJ1c3R1bVxuXG5cdGNvbnN0IF9mcnVzdHVtID0gbmV3IEZydXN0dW0oKTtcblxuXHQvLyBjbGlwcGluZ1xuXG5cdGxldCBfY2xpcHBpbmdFbmFibGVkID0gZmFsc2U7XG5cdGxldCBfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPSBmYWxzZTtcblxuXHQvLyB0cmFuc21pc3Npb25cblxuXHRsZXQgX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCA9IG51bGw7XG5cblx0Ly8gY2FtZXJhIG1hdHJpY2VzIGNhY2hlXG5cblx0Y29uc3QgX3Byb2pTY3JlZW5NYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXG5cdGNvbnN0IF92ZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcblxuXHRjb25zdCBfZW1wdHlTY2VuZSA9IHsgYmFja2dyb3VuZDogbnVsbCwgZm9nOiBudWxsLCBlbnZpcm9ubWVudDogbnVsbCwgb3ZlcnJpZGVNYXRlcmlhbDogbnVsbCwgaXNTY2VuZTogdHJ1ZSB9O1xuXG5cdGZ1bmN0aW9uIGdldFRhcmdldFBpeGVsUmF0aW8oKSB7XG5cblx0XHRyZXR1cm4gX2N1cnJlbnRSZW5kZXJUYXJnZXQgPT09IG51bGwgPyBfcGl4ZWxSYXRpbyA6IDE7XG5cblx0fVxuXG5cdC8vIGluaXRpYWxpemVcblxuXHRsZXQgX2dsID0gX2NvbnRleHQ7XG5cblx0ZnVuY3Rpb24gZ2V0Q29udGV4dCggY29udGV4dE5hbWVzLCBjb250ZXh0QXR0cmlidXRlcyApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvbnRleHROYW1lcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGNvbnRleHROYW1lID0gY29udGV4dE5hbWVzWyBpIF07XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gX2NhbnZhcy5nZXRDb250ZXh0KCBjb250ZXh0TmFtZSwgY29udGV4dEF0dHJpYnV0ZXMgKTtcblx0XHRcdGlmICggY29udGV4dCAhPT0gbnVsbCApIHJldHVybiBjb250ZXh0O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdHRyeSB7XG5cblx0XHRjb25zdCBjb250ZXh0QXR0cmlidXRlcyA9IHtcblx0XHRcdGFscGhhOiB0cnVlLFxuXHRcdFx0ZGVwdGg6IF9kZXB0aCxcblx0XHRcdHN0ZW5jaWw6IF9zdGVuY2lsLFxuXHRcdFx0YW50aWFsaWFzOiBfYW50aWFsaWFzLFxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhOiBfcHJlbXVsdGlwbGllZEFscGhhLFxuXHRcdFx0cHJlc2VydmVEcmF3aW5nQnVmZmVyOiBfcHJlc2VydmVEcmF3aW5nQnVmZmVyLFxuXHRcdFx0cG93ZXJQcmVmZXJlbmNlOiBfcG93ZXJQcmVmZXJlbmNlLFxuXHRcdFx0ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRcblx0XHR9O1xuXG5cdFx0Ly8gT2Zmc2NyZWVuQ2FudmFzIGRvZXMgbm90IGhhdmUgc2V0QXR0cmlidXRlLCBzZWUgIzIyODExXG5cdFx0aWYgKCAnc2V0QXR0cmlidXRlJyBpbiBfY2FudmFzICkgX2NhbnZhcy5zZXRBdHRyaWJ1dGUoICdkYXRhLWVuZ2luZScsIGB0aHJlZS5qcyByJHtSRVZJU0lPTn1gICk7XG5cblx0XHQvLyBldmVudCBsaXN0ZW5lcnMgbXVzdCBiZSByZWdpc3RlcmVkIGJlZm9yZSBXZWJHTCBjb250ZXh0IGlzIGNyZWF0ZWQsIHNlZSAjMTI3NTNcblx0XHRfY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRsb3N0Jywgb25Db250ZXh0TG9zdCwgZmFsc2UgKTtcblx0XHRfY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIG9uQ29udGV4dFJlc3RvcmUsIGZhbHNlICk7XG5cblx0XHRpZiAoIF9nbCA9PT0gbnVsbCApIHtcblxuXHRcdFx0Y29uc3QgY29udGV4dE5hbWVzID0gWyAnd2ViZ2wyJywgJ3dlYmdsJywgJ2V4cGVyaW1lbnRhbC13ZWJnbCcgXTtcblxuXHRcdFx0aWYgKCBfdGhpcy5pc1dlYkdMMVJlbmRlcmVyID09PSB0cnVlICkge1xuXG5cdFx0XHRcdGNvbnRleHROYW1lcy5zaGlmdCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9nbCA9IGdldENvbnRleHQoIGNvbnRleHROYW1lcywgY29udGV4dEF0dHJpYnV0ZXMgKTtcblxuXHRcdFx0aWYgKCBfZ2wgPT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBnZXRDb250ZXh0KCBjb250ZXh0TmFtZXMgKSApIHtcblxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggJ0Vycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuJyApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LicgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIFNvbWUgZXhwZXJpbWVudGFsLXdlYmdsIGltcGxlbWVudGF0aW9ucyBkbyBub3QgaGF2ZSBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXRcblxuXHRcdGlmICggX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdHJldHVybiB7ICdyYW5nZU1pbic6IDEsICdyYW5nZU1heCc6IDEsICdwcmVjaXNpb24nOiAxIH07XG5cblx0XHRcdH07XG5cblx0XHR9XG5cblx0fSBjYXRjaCAoIGVycm9yICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXI6ICcgKyBlcnJvci5tZXNzYWdlICk7XG5cdFx0dGhyb3cgZXJyb3I7XG5cblx0fVxuXG5cdGxldCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMsIHN0YXRlLCBpbmZvO1xuXHRsZXQgcHJvcGVydGllcywgdGV4dHVyZXMsIGN1YmVtYXBzLCBjdWJldXZtYXBzLCBhdHRyaWJ1dGVzLCBnZW9tZXRyaWVzLCBvYmplY3RzO1xuXHRsZXQgcHJvZ3JhbUNhY2hlLCBtYXRlcmlhbHMsIHJlbmRlckxpc3RzLCByZW5kZXJTdGF0ZXMsIGNsaXBwaW5nLCBzaGFkb3dNYXA7XG5cblx0bGV0IGJhY2tncm91bmQsIG1vcnBodGFyZ2V0cywgYnVmZmVyUmVuZGVyZXIsIGluZGV4ZWRCdWZmZXJSZW5kZXJlcjtcblxuXHRsZXQgdXRpbHMsIGJpbmRpbmdTdGF0ZXM7XG5cblx0ZnVuY3Rpb24gaW5pdEdMQ29udGV4dCgpIHtcblxuXHRcdGV4dGVuc2lvbnMgPSBuZXcgV2ViR0xFeHRlbnNpb25zKCBfZ2wgKTtcblxuXHRcdGNhcGFiaWxpdGllcyA9IG5ldyBXZWJHTENhcGFiaWxpdGllcyggX2dsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzICk7XG5cblx0XHRleHRlbnNpb25zLmluaXQoIGNhcGFiaWxpdGllcyApO1xuXG5cdFx0dXRpbHMgPSBuZXcgV2ViR0xVdGlscyggX2dsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKTtcblxuXHRcdHN0YXRlID0gbmV3IFdlYkdMU3RhdGUoIF9nbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICk7XG5cblx0XHRpbmZvID0gbmV3IFdlYkdMSW5mbyggX2dsICk7XG5cdFx0cHJvcGVydGllcyA9IG5ldyBXZWJHTFByb3BlcnRpZXMoKTtcblx0XHR0ZXh0dXJlcyA9IG5ldyBXZWJHTFRleHR1cmVzKCBfZ2wsIGV4dGVuc2lvbnMsIHN0YXRlLCBwcm9wZXJ0aWVzLCBjYXBhYmlsaXRpZXMsIHV0aWxzLCBpbmZvICk7XG5cdFx0Y3ViZW1hcHMgPSBuZXcgV2ViR0xDdWJlTWFwcyggX3RoaXMgKTtcblx0XHRjdWJldXZtYXBzID0gbmV3IFdlYkdMQ3ViZVVWTWFwcyggX3RoaXMgKTtcblx0XHRhdHRyaWJ1dGVzID0gbmV3IFdlYkdMQXR0cmlidXRlcyggX2dsLCBjYXBhYmlsaXRpZXMgKTtcblx0XHRiaW5kaW5nU3RhdGVzID0gbmV3IFdlYkdMQmluZGluZ1N0YXRlcyggX2dsLCBleHRlbnNpb25zLCBhdHRyaWJ1dGVzLCBjYXBhYmlsaXRpZXMgKTtcblx0XHRnZW9tZXRyaWVzID0gbmV3IFdlYkdMR2VvbWV0cmllcyggX2dsLCBhdHRyaWJ1dGVzLCBpbmZvLCBiaW5kaW5nU3RhdGVzICk7XG5cdFx0b2JqZWN0cyA9IG5ldyBXZWJHTE9iamVjdHMoIF9nbCwgZ2VvbWV0cmllcywgYXR0cmlidXRlcywgaW5mbyApO1xuXHRcdG1vcnBodGFyZ2V0cyA9IG5ldyBXZWJHTE1vcnBodGFyZ2V0cyggX2dsLCBjYXBhYmlsaXRpZXMsIHRleHR1cmVzICk7XG5cdFx0Y2xpcHBpbmcgPSBuZXcgV2ViR0xDbGlwcGluZyggcHJvcGVydGllcyApO1xuXHRcdHByb2dyYW1DYWNoZSA9IG5ldyBXZWJHTFByb2dyYW1zKCBfdGhpcywgY3ViZW1hcHMsIGN1YmV1dm1hcHMsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcywgYmluZGluZ1N0YXRlcywgY2xpcHBpbmcgKTtcblx0XHRtYXRlcmlhbHMgPSBuZXcgV2ViR0xNYXRlcmlhbHMoIHByb3BlcnRpZXMgKTtcblx0XHRyZW5kZXJMaXN0cyA9IG5ldyBXZWJHTFJlbmRlckxpc3RzKCk7XG5cdFx0cmVuZGVyU3RhdGVzID0gbmV3IFdlYkdMUmVuZGVyU3RhdGVzKCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMgKTtcblx0XHRiYWNrZ3JvdW5kID0gbmV3IFdlYkdMQmFja2dyb3VuZCggX3RoaXMsIGN1YmVtYXBzLCBzdGF0ZSwgb2JqZWN0cywgX2FscGhhLCBfcHJlbXVsdGlwbGllZEFscGhhICk7XG5cdFx0c2hhZG93TWFwID0gbmV3IFdlYkdMU2hhZG93TWFwKCBfdGhpcywgb2JqZWN0cywgY2FwYWJpbGl0aWVzICk7XG5cblx0XHRidWZmZXJSZW5kZXJlciA9IG5ldyBXZWJHTEJ1ZmZlclJlbmRlcmVyKCBfZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNhcGFiaWxpdGllcyApO1xuXHRcdGluZGV4ZWRCdWZmZXJSZW5kZXJlciA9IG5ldyBXZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlciggX2dsLCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMgKTtcblxuXHRcdGluZm8ucHJvZ3JhbXMgPSBwcm9ncmFtQ2FjaGUucHJvZ3JhbXM7XG5cblx0XHRfdGhpcy5jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7XG5cdFx0X3RoaXMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG5cdFx0X3RoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cdFx0X3RoaXMucmVuZGVyTGlzdHMgPSByZW5kZXJMaXN0cztcblx0XHRfdGhpcy5zaGFkb3dNYXAgPSBzaGFkb3dNYXA7XG5cdFx0X3RoaXMuc3RhdGUgPSBzdGF0ZTtcblx0XHRfdGhpcy5pbmZvID0gaW5mbztcblxuXHR9XG5cblx0aW5pdEdMQ29udGV4dCgpO1xuXG5cdC8vIHhyXG5cblx0Y29uc3QgeHIgPSBuZXcgV2ViWFJNYW5hZ2VyKCBfdGhpcywgX2dsICk7XG5cblx0dGhpcy54ciA9IHhyO1xuXG5cdC8vIEFQSVxuXG5cdHRoaXMuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBfZ2w7XG5cblx0fTtcblxuXHR0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9nbC5nZXRDb250ZXh0QXR0cmlidXRlcygpO1xuXG5cdH07XG5cblx0dGhpcy5mb3JjZUNvbnRleHRMb3NzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9sb3NlX2NvbnRleHQnICk7XG5cdFx0aWYgKCBleHRlbnNpb24gKSBleHRlbnNpb24ubG9zZUNvbnRleHQoKTtcblxuXHR9O1xuXG5cdHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfbG9zZV9jb250ZXh0JyApO1xuXHRcdGlmICggZXh0ZW5zaW9uICkgZXh0ZW5zaW9uLnJlc3RvcmVDb250ZXh0KCk7XG5cblx0fTtcblxuXHR0aGlzLmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX3BpeGVsUmF0aW87XG5cblx0fTtcblxuXHR0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0X3BpeGVsUmF0aW8gPSB2YWx1ZTtcblxuXHRcdHRoaXMuc2V0U2l6ZSggX3dpZHRoLCBfaGVpZ2h0LCBmYWxzZSApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRTaXplID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCggX3dpZHRoLCBfaGVpZ2h0ICk7XG5cblx0fTtcblxuXHR0aGlzLnNldFNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQsIHVwZGF0ZVN0eWxlICkge1xuXG5cdFx0aWYgKCB4ci5pc1ByZXNlbnRpbmcgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IENhblxcJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0X3dpZHRoID0gd2lkdGg7XG5cdFx0X2hlaWdodCA9IGhlaWdodDtcblxuXHRcdF9jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKCB3aWR0aCAqIF9waXhlbFJhdGlvICk7XG5cdFx0X2NhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKCBoZWlnaHQgKiBfcGl4ZWxSYXRpbyApO1xuXG5cdFx0aWYgKCB1cGRhdGVTdHlsZSAhPT0gZmFsc2UgKSB7XG5cblx0XHRcdF9jYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG5cdFx0XHRfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cblx0XHR9XG5cblx0XHR0aGlzLnNldFZpZXdwb3J0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0fTtcblxuXHR0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldCggX3dpZHRoICogX3BpeGVsUmF0aW8sIF9oZWlnaHQgKiBfcGl4ZWxSYXRpbyApLmZsb29yKCk7XG5cblx0fTtcblxuXHR0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0LCBwaXhlbFJhdGlvICkge1xuXG5cdFx0X3dpZHRoID0gd2lkdGg7XG5cdFx0X2hlaWdodCA9IGhlaWdodDtcblxuXHRcdF9waXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcblxuXHRcdF9jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKCB3aWR0aCAqIHBpeGVsUmF0aW8gKTtcblx0XHRfY2FudmFzLmhlaWdodCA9IE1hdGguZmxvb3IoIGhlaWdodCAqIHBpeGVsUmF0aW8gKTtcblxuXHRcdHRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0ID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIF9jdXJyZW50Vmlld3BvcnQgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggX3ZpZXdwb3J0ICk7XG5cblx0fTtcblxuXHR0aGlzLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0aWYgKCB4LmlzVmVjdG9yNCApIHtcblxuXHRcdFx0X3ZpZXdwb3J0LnNldCggeC54LCB4LnksIHgueiwgeC53ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfdmlld3BvcnQuc2V0KCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHRzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRWaWV3cG9ydC5jb3B5KCBfdmlld3BvcnQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0aW8gKS5mbG9vcigpICk7XG5cblx0fTtcblxuXHR0aGlzLmdldFNjaXNzb3IgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuY29weSggX3NjaXNzb3IgKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0U2Npc3NvciA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApIHtcblxuXHRcdGlmICggeC5pc1ZlY3RvcjQgKSB7XG5cblx0XHRcdF9zY2lzc29yLnNldCggeC54LCB4LnksIHgueiwgeC53ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfc2Npc3Nvci5zZXQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKTtcblxuXHRcdH1cblxuXHRcdHN0YXRlLnNjaXNzb3IoIF9jdXJyZW50U2Npc3Nvci5jb3B5KCBfc2Npc3NvciApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApLmZsb29yKCkgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX3NjaXNzb3JUZXN0O1xuXG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yVGVzdCA9IGZ1bmN0aW9uICggYm9vbGVhbiApIHtcblxuXHRcdHN0YXRlLnNldFNjaXNzb3JUZXN0KCBfc2Npc3NvclRlc3QgPSBib29sZWFuICk7XG5cblx0fTtcblxuXHR0aGlzLnNldE9wYXF1ZVNvcnQgPSBmdW5jdGlvbiAoIG1ldGhvZCApIHtcblxuXHRcdF9vcGFxdWVTb3J0ID0gbWV0aG9kO1xuXG5cdH07XG5cblx0dGhpcy5zZXRUcmFuc3BhcmVudFNvcnQgPSBmdW5jdGlvbiAoIG1ldGhvZCApIHtcblxuXHRcdF90cmFuc3BhcmVudFNvcnQgPSBtZXRob2Q7XG5cblx0fTtcblxuXHQvLyBDbGVhcmluZ1xuXG5cdHRoaXMuZ2V0Q2xlYXJDb2xvciA9IGZ1bmN0aW9uICggdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRhcmdldC5jb3B5KCBiYWNrZ3JvdW5kLmdldENsZWFyQ29sb3IoKSApO1xuXG5cdH07XG5cblx0dGhpcy5zZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0YmFja2dyb3VuZC5zZXRDbGVhckNvbG9yLmFwcGx5KCBiYWNrZ3JvdW5kLCBhcmd1bWVudHMgKTtcblxuXHR9O1xuXG5cdHRoaXMuZ2V0Q2xlYXJBbHBoYSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBiYWNrZ3JvdW5kLmdldENsZWFyQWxwaGEoKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0Q2xlYXJBbHBoYSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdGJhY2tncm91bmQuc2V0Q2xlYXJBbHBoYS5hcHBseSggYmFja2dyb3VuZCwgYXJndW1lbnRzICk7XG5cblx0fTtcblxuXHR0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwgKSB7XG5cblx0XHRsZXQgYml0cyA9IDA7XG5cblx0XHRpZiAoIGNvbG9yID09PSB1bmRlZmluZWQgfHwgY29sb3IgKSBiaXRzIHw9IDE2Mzg0O1xuXHRcdGlmICggZGVwdGggPT09IHVuZGVmaW5lZCB8fCBkZXB0aCApIGJpdHMgfD0gMjU2O1xuXHRcdGlmICggc3RlbmNpbCA9PT0gdW5kZWZpbmVkIHx8IHN0ZW5jaWwgKSBiaXRzIHw9IDEwMjQ7XG5cblx0XHRfZ2wuY2xlYXIoIGJpdHMgKTtcblxuXHR9O1xuXG5cdHRoaXMuY2xlYXJDb2xvciA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMuY2xlYXIoIHRydWUsIGZhbHNlLCBmYWxzZSApO1xuXG5cdH07XG5cblx0dGhpcy5jbGVhckRlcHRoID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy5jbGVhciggZmFsc2UsIHRydWUsIGZhbHNlICk7XG5cblx0fTtcblxuXHR0aGlzLmNsZWFyU3RlbmNpbCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMuY2xlYXIoIGZhbHNlLCBmYWxzZSwgdHJ1ZSApO1xuXG5cdH07XG5cblx0Ly9cblxuXHR0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRfY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRsb3N0Jywgb25Db250ZXh0TG9zdCwgZmFsc2UgKTtcblx0XHRfY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIG9uQ29udGV4dFJlc3RvcmUsIGZhbHNlICk7XG5cblx0XHRyZW5kZXJMaXN0cy5kaXNwb3NlKCk7XG5cdFx0cmVuZGVyU3RhdGVzLmRpc3Bvc2UoKTtcblx0XHRwcm9wZXJ0aWVzLmRpc3Bvc2UoKTtcblx0XHRjdWJlbWFwcy5kaXNwb3NlKCk7XG5cdFx0Y3ViZXV2bWFwcy5kaXNwb3NlKCk7XG5cdFx0b2JqZWN0cy5kaXNwb3NlKCk7XG5cdFx0YmluZGluZ1N0YXRlcy5kaXNwb3NlKCk7XG5cdFx0cHJvZ3JhbUNhY2hlLmRpc3Bvc2UoKTtcblxuXHRcdHhyLmRpc3Bvc2UoKTtcblxuXHRcdHhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdzZXNzaW9uc3RhcnQnLCBvblhSU2Vzc2lvblN0YXJ0ICk7XG5cdFx0eHIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3Nlc3Npb25lbmQnLCBvblhSU2Vzc2lvbkVuZCApO1xuXG5cdFx0aWYgKCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKTtcblx0XHRcdF90cmFuc21pc3Npb25SZW5kZXJUYXJnZXQgPSBudWxsO1xuXG5cdFx0fVxuXG5cdFx0YW5pbWF0aW9uLnN0b3AoKTtcblxuXHR9O1xuXG5cdC8vIEV2ZW50c1xuXG5cdGZ1bmN0aW9uIG9uQ29udGV4dExvc3QoIGV2ZW50ICkge1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNvbnNvbGUubG9nKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LicgKTtcblxuXHRcdF9pc0NvbnRleHRMb3N0ID0gdHJ1ZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25Db250ZXh0UmVzdG9yZSggLyogZXZlbnQgKi8gKSB7XG5cblx0XHRjb25zb2xlLmxvZyggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuJyApO1xuXG5cdFx0X2lzQ29udGV4dExvc3QgPSBmYWxzZTtcblxuXHRcdGNvbnN0IGluZm9BdXRvUmVzZXQgPSBpbmZvLmF1dG9SZXNldDtcblx0XHRjb25zdCBzaGFkb3dNYXBFbmFibGVkID0gc2hhZG93TWFwLmVuYWJsZWQ7XG5cdFx0Y29uc3Qgc2hhZG93TWFwQXV0b1VwZGF0ZSA9IHNoYWRvd01hcC5hdXRvVXBkYXRlO1xuXHRcdGNvbnN0IHNoYWRvd01hcE5lZWRzVXBkYXRlID0gc2hhZG93TWFwLm5lZWRzVXBkYXRlO1xuXHRcdGNvbnN0IHNoYWRvd01hcFR5cGUgPSBzaGFkb3dNYXAudHlwZTtcblxuXHRcdGluaXRHTENvbnRleHQoKTtcblxuXHRcdGluZm8uYXV0b1Jlc2V0ID0gaW5mb0F1dG9SZXNldDtcblx0XHRzaGFkb3dNYXAuZW5hYmxlZCA9IHNoYWRvd01hcEVuYWJsZWQ7XG5cdFx0c2hhZG93TWFwLmF1dG9VcGRhdGUgPSBzaGFkb3dNYXBBdXRvVXBkYXRlO1xuXHRcdHNoYWRvd01hcC5uZWVkc1VwZGF0ZSA9IHNoYWRvd01hcE5lZWRzVXBkYXRlO1xuXHRcdHNoYWRvd01hcC50eXBlID0gc2hhZG93TWFwVHlwZTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25NYXRlcmlhbERpc3Bvc2UoIGV2ZW50ICkge1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBldmVudC50YXJnZXQ7XG5cblx0XHRtYXRlcmlhbC5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uTWF0ZXJpYWxEaXNwb3NlICk7XG5cblx0XHRkZWFsbG9jYXRlTWF0ZXJpYWwoIG1hdGVyaWFsICk7XG5cblx0fVxuXG5cdC8vIEJ1ZmZlciBkZWFsbG9jYXRpb25cblxuXHRmdW5jdGlvbiBkZWFsbG9jYXRlTWF0ZXJpYWwoIG1hdGVyaWFsICkge1xuXG5cdFx0cmVsZWFzZU1hdGVyaWFsUHJvZ3JhbVJlZmVyZW5jZXMoIG1hdGVyaWFsICk7XG5cblx0XHRwcm9wZXJ0aWVzLnJlbW92ZSggbWF0ZXJpYWwgKTtcblxuXHR9XG5cblxuXHRmdW5jdGlvbiByZWxlYXNlTWF0ZXJpYWxQcm9ncmFtUmVmZXJlbmNlcyggbWF0ZXJpYWwgKSB7XG5cblx0XHRjb25zdCBwcm9ncmFtcyA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApLnByb2dyYW1zO1xuXG5cdFx0aWYgKCBwcm9ncmFtcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRwcm9ncmFtcy5mb3JFYWNoKCBmdW5jdGlvbiAoIHByb2dyYW0gKSB7XG5cblx0XHRcdFx0cHJvZ3JhbUNhY2hlLnJlbGVhc2VQcm9ncmFtKCBwcm9ncmFtICk7XG5cblx0XHRcdH0gKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICkge1xuXG5cdFx0XHRcdHByb2dyYW1DYWNoZS5yZWxlYXNlU2hhZGVyQ2FjaGUoIG1hdGVyaWFsICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gQnVmZmVyIHJlbmRlcmluZ1xuXG5cdHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0ID0gZnVuY3Rpb24gKCBjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKSB7XG5cblx0XHRpZiAoIHNjZW5lID09PSBudWxsICkgc2NlbmUgPSBfZW1wdHlTY2VuZTsgLy8gcmVuZGVyQnVmZmVyRGlyZWN0IHNlY29uZCBwYXJhbWV0ZXIgdXNlZCB0byBiZSBmb2cgKGNvdWxkIGJlIG51bGwpXG5cblx0XHRjb25zdCBmcm9udEZhY2VDVyA9ICggb2JqZWN0LmlzTWVzaCAmJiBvYmplY3QubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKSA8IDAgKTtcblxuXHRcdGNvbnN0IHByb2dyYW0gPSBzZXRQcm9ncmFtKCBjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCApO1xuXG5cdFx0c3RhdGUuc2V0TWF0ZXJpYWwoIG1hdGVyaWFsLCBmcm9udEZhY2VDVyApO1xuXG5cdFx0Ly9cblxuXHRcdGxldCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblxuXHRcdC8vXG5cblx0XHRpZiAoIGluZGV4ID09PSBudWxsICkge1xuXG5cdFx0XHRpZiAoIHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24uY291bnQgPT09IDAgKSByZXR1cm47XG5cblx0XHR9IGVsc2UgaWYgKCBpbmRleC5jb3VudCA9PT0gMCApIHtcblxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdGxldCByYW5nZUZhY3RvciA9IDE7XG5cblx0XHRpZiAoIG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0aW5kZXggPSBnZW9tZXRyaWVzLmdldFdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKTtcblx0XHRcdHJhbmdlRmFjdG9yID0gMjtcblxuXHRcdH1cblxuXHRcdGJpbmRpbmdTdGF0ZXMuc2V0dXAoIG9iamVjdCwgbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5LCBpbmRleCApO1xuXG5cdFx0bGV0IGF0dHJpYnV0ZTtcblx0XHRsZXQgcmVuZGVyZXIgPSBidWZmZXJSZW5kZXJlcjtcblxuXHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0KCBpbmRleCApO1xuXG5cdFx0XHRyZW5kZXJlciA9IGluZGV4ZWRCdWZmZXJSZW5kZXJlcjtcblx0XHRcdHJlbmRlcmVyLnNldEluZGV4KCBhdHRyaWJ1dGUgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRjb25zdCBkYXRhQ291bnQgPSAoIGluZGV4ICE9PSBudWxsICkgPyBpbmRleC5jb3VudCA6IHBvc2l0aW9uLmNvdW50O1xuXG5cdFx0Y29uc3QgcmFuZ2VTdGFydCA9IGdlb21ldHJ5LmRyYXdSYW5nZS5zdGFydCAqIHJhbmdlRmFjdG9yO1xuXHRcdGNvbnN0IHJhbmdlQ291bnQgPSBnZW9tZXRyeS5kcmF3UmFuZ2UuY291bnQgKiByYW5nZUZhY3RvcjtcblxuXHRcdGNvbnN0IGdyb3VwU3RhcnQgPSBncm91cCAhPT0gbnVsbCA/IGdyb3VwLnN0YXJ0ICogcmFuZ2VGYWN0b3IgOiAwO1xuXHRcdGNvbnN0IGdyb3VwQ291bnQgPSBncm91cCAhPT0gbnVsbCA/IGdyb3VwLmNvdW50ICogcmFuZ2VGYWN0b3IgOiBJbmZpbml0eTtcblxuXHRcdGNvbnN0IGRyYXdTdGFydCA9IE1hdGgubWF4KCByYW5nZVN0YXJ0LCBncm91cFN0YXJ0ICk7XG5cdFx0Y29uc3QgZHJhd0VuZCA9IE1hdGgubWluKCBkYXRhQ291bnQsIHJhbmdlU3RhcnQgKyByYW5nZUNvdW50LCBncm91cFN0YXJ0ICsgZ3JvdXBDb3VudCApIC0gMTtcblxuXHRcdGNvbnN0IGRyYXdDb3VudCA9IE1hdGgubWF4KCAwLCBkcmF3RW5kIC0gZHJhd1N0YXJ0ICsgMSApO1xuXG5cdFx0aWYgKCBkcmF3Q291bnQgPT09IDAgKSByZXR1cm47XG5cblx0XHQvL1xuXG5cdFx0aWYgKCBvYmplY3QuaXNNZXNoICkge1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRzdGF0ZS5zZXRMaW5lV2lkdGgoIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCAqIGdldFRhcmdldFBpeGVsUmF0aW8oKSApO1xuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKCAxICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZSggNCApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNMaW5lICkge1xuXG5cdFx0XHRsZXQgbGluZVdpZHRoID0gbWF0ZXJpYWwubGluZXdpZHRoO1xuXG5cdFx0XHRpZiAoIGxpbmVXaWR0aCA9PT0gdW5kZWZpbmVkICkgbGluZVdpZHRoID0gMTsgLy8gTm90IHVzaW5nIExpbmUqTWF0ZXJpYWxcblxuXHRcdFx0c3RhdGUuc2V0TGluZVdpZHRoKCBsaW5lV2lkdGggKiBnZXRUYXJnZXRQaXhlbFJhdGlvKCkgKTtcblxuXHRcdFx0aWYgKCBvYmplY3QuaXNMaW5lU2VnbWVudHMgKSB7XG5cblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZSggMSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNMaW5lTG9vcCApIHtcblxuXHRcdFx0XHRyZW5kZXJlci5zZXRNb2RlKCAyICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmVuZGVyZXIuc2V0TW9kZSggMyApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNQb2ludHMgKSB7XG5cblx0XHRcdHJlbmRlcmVyLnNldE1vZGUoIDAgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc1Nwcml0ZSApIHtcblxuXHRcdFx0cmVuZGVyZXIuc2V0TW9kZSggNCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBvYmplY3QuaXNJbnN0YW5jZWRNZXNoICkge1xuXG5cdFx0XHRyZW5kZXJlci5yZW5kZXJJbnN0YW5jZXMoIGRyYXdTdGFydCwgZHJhd0NvdW50LCBvYmplY3QuY291bnQgKTtcblxuXHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnN0IGluc3RhbmNlQ291bnQgPSBNYXRoLm1pbiggZ2VvbWV0cnkuaW5zdGFuY2VDb3VudCwgZ2VvbWV0cnkuX21heEluc3RhbmNlQ291bnQgKTtcblxuXHRcdFx0cmVuZGVyZXIucmVuZGVySW5zdGFuY2VzKCBkcmF3U3RhcnQsIGRyYXdDb3VudCwgaW5zdGFuY2VDb3VudCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cmVuZGVyZXIucmVuZGVyKCBkcmF3U3RhcnQsIGRyYXdDb3VudCApO1xuXG5cdFx0fVxuXG5cdH07XG5cblx0Ly8gQ29tcGlsZVxuXG5cdHRoaXMuY29tcGlsZSA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSApIHtcblxuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoIHNjZW5lICk7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLmluaXQoKTtcblxuXHRcdHJlbmRlclN0YXRlU3RhY2sucHVzaCggY3VycmVudFJlbmRlclN0YXRlICk7XG5cblx0XHRzY2VuZS50cmF2ZXJzZVZpc2libGUoIGZ1bmN0aW9uICggb2JqZWN0ICkge1xuXG5cdFx0XHRpZiAoIG9iamVjdC5pc0xpZ2h0ICYmIG9iamVjdC5sYXllcnMudGVzdCggY2FtZXJhLmxheWVycyApICkge1xuXG5cdFx0XHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5wdXNoTGlnaHQoIG9iamVjdCApO1xuXG5cdFx0XHRcdGlmICggb2JqZWN0LmNhc3RTaGFkb3cgKSB7XG5cblx0XHRcdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUucHVzaFNoYWRvdyggb2JqZWN0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cblx0XHRjdXJyZW50UmVuZGVyU3RhdGUuc2V0dXBMaWdodHMoIF90aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzICk7XG5cblx0XHRzY2VuZS50cmF2ZXJzZSggZnVuY3Rpb24gKCBvYmplY3QgKSB7XG5cblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsICkge1xuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKSApIHtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG1hdGVyaWFsLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwyID0gbWF0ZXJpYWxbIGkgXTtcblxuXHRcdFx0XHRcdFx0Z2V0UHJvZ3JhbSggbWF0ZXJpYWwyLCBzY2VuZSwgb2JqZWN0ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGdldFByb2dyYW0oIG1hdGVyaWFsLCBzY2VuZSwgb2JqZWN0ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cblx0XHRyZW5kZXJTdGF0ZVN0YWNrLnBvcCgpO1xuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZSA9IG51bGw7XG5cblx0fTtcblxuXHQvLyBBbmltYXRpb24gTG9vcFxuXG5cdGxldCBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUoIHRpbWUgKSB7XG5cblx0XHRpZiAoIG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayApIG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayggdGltZSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBvblhSU2Vzc2lvblN0YXJ0KCkge1xuXG5cdFx0YW5pbWF0aW9uLnN0b3AoKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25YUlNlc3Npb25FbmQoKSB7XG5cblx0XHRhbmltYXRpb24uc3RhcnQoKTtcblxuXHR9XG5cblx0Y29uc3QgYW5pbWF0aW9uID0gbmV3IFdlYkdMQW5pbWF0aW9uKCk7XG5cdGFuaW1hdGlvbi5zZXRBbmltYXRpb25Mb29wKCBvbkFuaW1hdGlvbkZyYW1lICk7XG5cblx0aWYgKCB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyApIGFuaW1hdGlvbi5zZXRDb250ZXh0KCB3aW5kb3cgKTtcblxuXHR0aGlzLnNldEFuaW1hdGlvbkxvb3AgPSBmdW5jdGlvbiAoIGNhbGxiYWNrICkge1xuXG5cdFx0b25BbmltYXRpb25GcmFtZUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cdFx0eHIuc2V0QW5pbWF0aW9uTG9vcCggY2FsbGJhY2sgKTtcblxuXHRcdCggY2FsbGJhY2sgPT09IG51bGwgKSA/IGFuaW1hdGlvbi5zdG9wKCkgOiBhbmltYXRpb24uc3RhcnQoKTtcblxuXHR9O1xuXG5cdHhyLmFkZEV2ZW50TGlzdGVuZXIoICdzZXNzaW9uc3RhcnQnLCBvblhSU2Vzc2lvblN0YXJ0ICk7XG5cdHhyLmFkZEV2ZW50TGlzdGVuZXIoICdzZXNzaW9uZW5kJywgb25YUlNlc3Npb25FbmQgKTtcblxuXHQvLyBSZW5kZXJpbmdcblxuXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSApIHtcblxuXHRcdGlmICggY2FtZXJhICE9PSB1bmRlZmluZWQgJiYgY2FtZXJhLmlzQ2FtZXJhICE9PSB0cnVlICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggX2lzQ29udGV4dExvc3QgPT09IHRydWUgKSByZXR1cm47XG5cblx0XHQvLyB1cGRhdGUgc2NlbmUgZ3JhcGhcblxuXHRcdGlmICggc2NlbmUuYXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHNjZW5lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHQvLyB1cGRhdGUgY2FtZXJhIG1hdHJpY2VzIGFuZCBmcnVzdHVtXG5cblx0XHRpZiAoIGNhbWVyYS5wYXJlbnQgPT09IG51bGwgKSBjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdGlmICggeHIuZW5hYmxlZCA9PT0gdHJ1ZSAmJiB4ci5pc1ByZXNlbnRpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdGlmICggeHIuY2FtZXJhQXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHhyLnVwZGF0ZUNhbWVyYSggY2FtZXJhICk7XG5cblx0XHRcdGNhbWVyYSA9IHhyLmdldENhbWVyYSgpOyAvLyB1c2UgWFIgY2FtZXJhIGZvciByZW5kZXJpbmdcblxuXHRcdH1cblxuXHRcdC8vXG5cdFx0aWYgKCBzY2VuZS5pc1NjZW5lID09PSB0cnVlICkgc2NlbmUub25CZWZvcmVSZW5kZXIoIF90aGlzLCBzY2VuZSwgY2FtZXJhLCBfY3VycmVudFJlbmRlclRhcmdldCApO1xuXG5cdFx0Y3VycmVudFJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVzLmdldCggc2NlbmUsIHJlbmRlclN0YXRlU3RhY2subGVuZ3RoICk7XG5cdFx0Y3VycmVudFJlbmRlclN0YXRlLmluaXQoKTtcblxuXHRcdHJlbmRlclN0YXRlU3RhY2sucHVzaCggY3VycmVudFJlbmRlclN0YXRlICk7XG5cblx0XHRfcHJvalNjcmVlbk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXHRcdF9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCBfcHJvalNjcmVlbk1hdHJpeCApO1xuXG5cdFx0X2xvY2FsQ2xpcHBpbmdFbmFibGVkID0gdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZDtcblx0XHRfY2xpcHBpbmdFbmFibGVkID0gY2xpcHBpbmcuaW5pdCggdGhpcy5jbGlwcGluZ1BsYW5lcywgX2xvY2FsQ2xpcHBpbmdFbmFibGVkLCBjYW1lcmEgKTtcblxuXHRcdGN1cnJlbnRSZW5kZXJMaXN0ID0gcmVuZGVyTGlzdHMuZ2V0KCBzY2VuZSwgcmVuZGVyTGlzdFN0YWNrLmxlbmd0aCApO1xuXHRcdGN1cnJlbnRSZW5kZXJMaXN0LmluaXQoKTtcblxuXHRcdHJlbmRlckxpc3RTdGFjay5wdXNoKCBjdXJyZW50UmVuZGVyTGlzdCApO1xuXG5cdFx0cHJvamVjdE9iamVjdCggc2NlbmUsIGNhbWVyYSwgMCwgX3RoaXMuc29ydE9iamVjdHMgKTtcblxuXHRcdGN1cnJlbnRSZW5kZXJMaXN0LmZpbmlzaCgpO1xuXG5cdFx0aWYgKCBfdGhpcy5zb3J0T2JqZWN0cyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y3VycmVudFJlbmRlckxpc3Quc29ydCggX29wYXF1ZVNvcnQsIF90cmFuc3BhcmVudFNvcnQgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpZiAoIF9jbGlwcGluZ0VuYWJsZWQgPT09IHRydWUgKSBjbGlwcGluZy5iZWdpblNoYWRvd3MoKTtcblxuXHRcdGNvbnN0IHNoYWRvd3NBcnJheSA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5zaGFkb3dzQXJyYXk7XG5cblx0XHRzaGFkb3dNYXAucmVuZGVyKCBzaGFkb3dzQXJyYXksIHNjZW5lLCBjYW1lcmEgKTtcblxuXHRcdGlmICggX2NsaXBwaW5nRW5hYmxlZCA9PT0gdHJ1ZSApIGNsaXBwaW5nLmVuZFNoYWRvd3MoKTtcblxuXHRcdC8vXG5cblx0XHRpZiAoIHRoaXMuaW5mby5hdXRvUmVzZXQgPT09IHRydWUgKSB0aGlzLmluZm8ucmVzZXQoKTtcblxuXHRcdC8vXG5cblx0XHRiYWNrZ3JvdW5kLnJlbmRlciggY3VycmVudFJlbmRlckxpc3QsIHNjZW5lICk7XG5cblx0XHQvLyByZW5kZXIgc2NlbmVcblxuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0cyggX3RoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgKTtcblxuXHRcdGlmICggY2FtZXJhLmlzQXJyYXlDYW1lcmEgKSB7XG5cblx0XHRcdGNvbnN0IGNhbWVyYXMgPSBjYW1lcmEuY2FtZXJhcztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY2FtZXJhcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGNhbWVyYTIgPSBjYW1lcmFzWyBpIF07XG5cblx0XHRcdFx0cmVuZGVyU2NlbmUoIGN1cnJlbnRSZW5kZXJMaXN0LCBzY2VuZSwgY2FtZXJhMiwgY2FtZXJhMi52aWV3cG9ydCApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZW5kZXJTY2VuZSggY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRpZiAoIF9jdXJyZW50UmVuZGVyVGFyZ2V0ICE9PSBudWxsICkge1xuXG5cdFx0XHQvLyByZXNvbHZlIG11bHRpc2FtcGxlIHJlbmRlcmJ1ZmZlcnMgdG8gYSBzaW5nbGUtc2FtcGxlIHRleHR1cmUgaWYgbmVjZXNzYXJ5XG5cblx0XHRcdHRleHR1cmVzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KCBfY3VycmVudFJlbmRlclRhcmdldCApO1xuXG5cdFx0XHQvLyBHZW5lcmF0ZSBtaXBtYXAgaWYgd2UncmUgdXNpbmcgYW55IGtpbmQgb2YgbWlwbWFwIGZpbHRlcmluZ1xuXG5cdFx0XHR0ZXh0dXJlcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoIF9jdXJyZW50UmVuZGVyVGFyZ2V0ICk7XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0aWYgKCBzY2VuZS5pc1NjZW5lID09PSB0cnVlICkgc2NlbmUub25BZnRlclJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEgKTtcblxuXHRcdC8vIEVuc3VyZSBkZXB0aCBidWZmZXIgd3JpdGluZyBpcyBlbmFibGVkIHNvIGl0IGNhbiBiZSBjbGVhcmVkIG9uIG5leHQgcmVuZGVyXG5cblx0XHRzdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoIHRydWUgKTtcblx0XHRzdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2soIHRydWUgKTtcblx0XHRzdGF0ZS5idWZmZXJzLmNvbG9yLnNldE1hc2soIHRydWUgKTtcblxuXHRcdHN0YXRlLnNldFBvbHlnb25PZmZzZXQoIGZhbHNlICk7XG5cblx0XHQvLyBfZ2wuZmluaXNoKCk7XG5cblx0XHRiaW5kaW5nU3RhdGVzLnJlc2V0RGVmYXVsdFN0YXRlKCk7XG5cdFx0X2N1cnJlbnRNYXRlcmlhbElkID0gLSAxO1xuXHRcdF9jdXJyZW50Q2FtZXJhID0gbnVsbDtcblxuXHRcdHJlbmRlclN0YXRlU3RhY2sucG9wKCk7XG5cblx0XHRpZiAoIHJlbmRlclN0YXRlU3RhY2subGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Y3VycmVudFJlbmRlclN0YXRlID0gcmVuZGVyU3RhdGVTdGFja1sgcmVuZGVyU3RhdGVTdGFjay5sZW5ndGggLSAxIF07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsO1xuXG5cdFx0fVxuXG5cdFx0cmVuZGVyTGlzdFN0YWNrLnBvcCgpO1xuXG5cdFx0aWYgKCByZW5kZXJMaXN0U3RhY2subGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Y3VycmVudFJlbmRlckxpc3QgPSByZW5kZXJMaXN0U3RhY2tbIHJlbmRlckxpc3RTdGFjay5sZW5ndGggLSAxIF07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7XG5cblx0XHR9XG5cblx0fTtcblxuXHRmdW5jdGlvbiBwcm9qZWN0T2JqZWN0KCBvYmplY3QsIGNhbWVyYSwgZ3JvdXBPcmRlciwgc29ydE9iamVjdHMgKSB7XG5cblx0XHRpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGNvbnN0IHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoIGNhbWVyYS5sYXllcnMgKTtcblxuXHRcdGlmICggdmlzaWJsZSApIHtcblxuXHRcdFx0aWYgKCBvYmplY3QuaXNHcm91cCApIHtcblxuXHRcdFx0XHRncm91cE9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNMT0QgKSB7XG5cblx0XHRcdFx0aWYgKCBvYmplY3QuYXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIG9iamVjdC51cGRhdGUoIGNhbWVyYSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNMaWdodCApIHtcblxuXHRcdFx0XHRjdXJyZW50UmVuZGVyU3RhdGUucHVzaExpZ2h0KCBvYmplY3QgKTtcblxuXHRcdFx0XHRpZiAoIG9iamVjdC5jYXN0U2hhZG93ICkge1xuXG5cdFx0XHRcdFx0Y3VycmVudFJlbmRlclN0YXRlLnB1c2hTaGFkb3coIG9iamVjdCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0LmlzU3ByaXRlICkge1xuXG5cdFx0XHRcdGlmICggISBvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzU3ByaXRlKCBvYmplY3QgKSApIHtcblxuXHRcdFx0XHRcdGlmICggc29ydE9iamVjdHMgKSB7XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggb2JqZWN0Lm1hdHJpeFdvcmxkIClcblx0XHRcdFx0XHRcdFx0LmFwcGx5TWF0cml4NCggX3Byb2pTY3JlZW5NYXRyaXggKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0cy51cGRhdGUoIG9iamVjdCApO1xuXHRcdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdFx0aWYgKCBtYXRlcmlhbC52aXNpYmxlICkge1xuXG5cdFx0XHRcdFx0XHRjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgX3ZlY3RvcjMueiwgbnVsbCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cyApIHtcblxuXHRcdFx0XHRpZiAoIG9iamVjdC5pc1NraW5uZWRNZXNoICkge1xuXG5cdFx0XHRcdFx0Ly8gdXBkYXRlIHNrZWxldG9uIG9ubHkgb25jZSBpbiBhIGZyYW1lXG5cblx0XHRcdFx0XHRpZiAoIG9iamVjdC5za2VsZXRvbi5mcmFtZSAhPT0gaW5mby5yZW5kZXIuZnJhbWUgKSB7XG5cblx0XHRcdFx0XHRcdG9iamVjdC5za2VsZXRvbi51cGRhdGUoKTtcblx0XHRcdFx0XHRcdG9iamVjdC5za2VsZXRvbi5mcmFtZSA9IGluZm8ucmVuZGVyLmZyYW1lO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICEgb2JqZWN0LmZydXN0dW1DdWxsZWQgfHwgX2ZydXN0dW0uaW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHNvcnRPYmplY3RzICkge1xuXG5cdFx0XHRcdFx0XHRfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdC5tYXRyaXhXb3JsZCApXG5cdFx0XHRcdFx0XHRcdC5hcHBseU1hdHJpeDQoIF9wcm9qU2NyZWVuTWF0cml4ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBnZW9tZXRyeSA9IG9iamVjdHMudXBkYXRlKCBvYmplY3QgKTtcblx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKSApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cCA9IGdyb3Vwc1sgaSBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbIGdyb3VwLm1hdGVyaWFsSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIGdyb3VwTWF0ZXJpYWwgJiYgZ3JvdXBNYXRlcmlhbC52aXNpYmxlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFJlbmRlckxpc3QucHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgZ3JvdXBNYXRlcmlhbCwgZ3JvdXBPcmRlciwgX3ZlY3RvcjMueiwgZ3JvdXAgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLnZpc2libGUgKSB7XG5cblx0XHRcdFx0XHRcdGN1cnJlbnRSZW5kZXJMaXN0LnB1c2goIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cE9yZGVyLCBfdmVjdG9yMy56LCBudWxsICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHByb2plY3RPYmplY3QoIGNoaWxkcmVuWyBpIF0sIGNhbWVyYSwgZ3JvdXBPcmRlciwgc29ydE9iamVjdHMgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyU2NlbmUoIGN1cnJlbnRSZW5kZXJMaXN0LCBzY2VuZSwgY2FtZXJhLCB2aWV3cG9ydCApIHtcblxuXHRcdGNvbnN0IG9wYXF1ZU9iamVjdHMgPSBjdXJyZW50UmVuZGVyTGlzdC5vcGFxdWU7XG5cdFx0Y29uc3QgdHJhbnNtaXNzaXZlT2JqZWN0cyA9IGN1cnJlbnRSZW5kZXJMaXN0LnRyYW5zbWlzc2l2ZTtcblx0XHRjb25zdCB0cmFuc3BhcmVudE9iamVjdHMgPSBjdXJyZW50UmVuZGVyTGlzdC50cmFuc3BhcmVudDtcblxuXHRcdGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0c1ZpZXcoIGNhbWVyYSApO1xuXG5cdFx0aWYgKCB0cmFuc21pc3NpdmVPYmplY3RzLmxlbmd0aCA+IDAgKSByZW5kZXJUcmFuc21pc3Npb25QYXNzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7XG5cblx0XHRpZiAoIHZpZXdwb3J0ICkgc3RhdGUudmlld3BvcnQoIF9jdXJyZW50Vmlld3BvcnQuY29weSggdmlld3BvcnQgKSApO1xuXG5cdFx0aWYgKCBvcGFxdWVPYmplY3RzLmxlbmd0aCA+IDAgKSByZW5kZXJPYmplY3RzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7XG5cdFx0aWYgKCB0cmFuc21pc3NpdmVPYmplY3RzLmxlbmd0aCA+IDAgKSByZW5kZXJPYmplY3RzKCB0cmFuc21pc3NpdmVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7XG5cdFx0aWYgKCB0cmFuc3BhcmVudE9iamVjdHMubGVuZ3RoID4gMCApIHJlbmRlck9iamVjdHMoIHRyYW5zcGFyZW50T2JqZWN0cywgc2NlbmUsIGNhbWVyYSApO1xuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJUcmFuc21pc3Npb25QYXNzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0aWYgKCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ID09PSBudWxsICkge1xuXG5cdFx0XHRjb25zdCBuZWVkc0FudGlhbGlhcyA9IF9hbnRpYWxpYXMgPT09IHRydWUgJiYgY2FwYWJpbGl0aWVzLmlzV2ViR0wyID09PSB0cnVlO1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0VHlwZSA9IG5lZWRzQW50aWFsaWFzID8gV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA6IFdlYkdMUmVuZGVyVGFyZ2V0O1xuXG5cdFx0XHRfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ID0gbmV3IHJlbmRlclRhcmdldFR5cGUoIDEwMjQsIDEwMjQsIHtcblx0XHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiB1dGlscy5jb252ZXJ0KCBIYWxmRmxvYXRUeXBlICkgIT09IG51bGwgPyBIYWxmRmxvYXRUeXBlIDogVW5zaWduZWRCeXRlVHlwZSxcblx0XHRcdFx0bWluRmlsdGVyOiBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRcdG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlcixcblx0XHRcdFx0d3JhcFM6IENsYW1wVG9FZGdlV3JhcHBpbmcsXG5cdFx0XHRcdHdyYXBUOiBDbGFtcFRvRWRnZVdyYXBwaW5nLFxuXHRcdFx0XHR1c2VSZW5kZXJUb1RleHR1cmU6IGV4dGVuc2lvbnMuaGFzKCAnV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlJyApXG5cdFx0XHR9ICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gX3RoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cdFx0X3RoaXMuc2V0UmVuZGVyVGFyZ2V0KCBfdHJhbnNtaXNzaW9uUmVuZGVyVGFyZ2V0ICk7XG5cdFx0X3RoaXMuY2xlYXIoKTtcblxuXHRcdC8vIFR1cm4gb2ZmIHRoZSBmZWF0dXJlcyB3aGljaCBjYW4gYWZmZWN0IHRoZSBmcmFnIGNvbG9yIGZvciBvcGFxdWUgb2JqZWN0cyBwYXNzLlxuXHRcdC8vIE90aGVyd2lzZSB0aGV5IGFyZSBhcHBsaWVkIHR3aWNlIGluIG9wYXF1ZSBvYmplY3RzIHBhc3MgYW5kIHRyYW5zbWlzc2lvbiBvYmplY3RzIHBhc3MuXG5cdFx0Y29uc3QgY3VycmVudFRvbmVNYXBwaW5nID0gX3RoaXMudG9uZU1hcHBpbmc7XG5cdFx0X3RoaXMudG9uZU1hcHBpbmcgPSBOb1RvbmVNYXBwaW5nO1xuXG5cdFx0cmVuZGVyT2JqZWN0cyggb3BhcXVlT2JqZWN0cywgc2NlbmUsIGNhbWVyYSApO1xuXG5cdFx0X3RoaXMudG9uZU1hcHBpbmcgPSBjdXJyZW50VG9uZU1hcHBpbmc7XG5cblx0XHR0ZXh0dXJlcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldCggX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCApO1xuXHRcdHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCggX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCApO1xuXG5cdFx0X3RoaXMuc2V0UmVuZGVyVGFyZ2V0KCBjdXJyZW50UmVuZGVyVGFyZ2V0ICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlck9iamVjdHMoIHJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRjb25zdCBvdmVycmlkZU1hdGVyaWFsID0gc2NlbmUuaXNTY2VuZSA9PT0gdHJ1ZSA/IHNjZW5lLm92ZXJyaWRlTWF0ZXJpYWwgOiBudWxsO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gcmVuZGVyTGlzdC5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCByZW5kZXJJdGVtID0gcmVuZGVyTGlzdFsgaSBdO1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSByZW5kZXJJdGVtLm9iamVjdDtcblx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gcmVuZGVySXRlbS5nZW9tZXRyeTtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gb3ZlcnJpZGVNYXRlcmlhbCA9PT0gbnVsbCA/IHJlbmRlckl0ZW0ubWF0ZXJpYWwgOiBvdmVycmlkZU1hdGVyaWFsO1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSByZW5kZXJJdGVtLmdyb3VwO1xuXG5cdFx0XHRpZiAoIG9iamVjdC5sYXllcnMudGVzdCggY2FtZXJhLmxheWVycyApICkge1xuXG5cdFx0XHRcdHJlbmRlck9iamVjdCggb2JqZWN0LCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0KCBvYmplY3QsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKSB7XG5cblx0XHRvYmplY3Qub25CZWZvcmVSZW5kZXIoIF90aGlzLCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwICk7XG5cblx0XHRvYmplY3QubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXHRcdG9iamVjdC5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KCBvYmplY3QubW9kZWxWaWV3TWF0cml4ICk7XG5cblx0XHRtYXRlcmlhbC5vbkJlZm9yZVJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBvYmplY3QsIGdyb3VwICk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlICYmIG1hdGVyaWFsLnNpZGUgPT09IERvdWJsZVNpZGUgKSB7XG5cblx0XHRcdG1hdGVyaWFsLnNpZGUgPSBCYWNrU2lkZTtcblx0XHRcdG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdF90aGlzLnJlbmRlckJ1ZmZlckRpcmVjdCggY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwICk7XG5cblx0XHRcdG1hdGVyaWFsLnNpZGUgPSBGcm9udFNpZGU7XG5cdFx0XHRtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRfdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QoIGNhbWVyYSwgc2NlbmUsIGdlb21ldHJ5LCBtYXRlcmlhbCwgb2JqZWN0LCBncm91cCApO1xuXG5cdFx0XHRtYXRlcmlhbC5zaWRlID0gRG91YmxlU2lkZTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF90aGlzLnJlbmRlckJ1ZmZlckRpcmVjdCggY2FtZXJhLCBzY2VuZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBvYmplY3QsIGdyb3VwICk7XG5cblx0XHR9XG5cblx0XHRvYmplY3Qub25BZnRlclJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvZ3JhbSggbWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIHNjZW5lLmlzU2NlbmUgIT09IHRydWUgKSBzY2VuZSA9IF9lbXB0eVNjZW5lOyAvLyBzY2VuZSBjb3VsZCBiZSBhIE1lc2gsIExpbmUsIFBvaW50cywgLi4uXG5cblx0XHRjb25zdCBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTtcblxuXHRcdGNvbnN0IGxpZ2h0cyA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5saWdodHM7XG5cdFx0Y29uc3Qgc2hhZG93c0FycmF5ID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLnNoYWRvd3NBcnJheTtcblxuXHRcdGNvbnN0IGxpZ2h0c1N0YXRlVmVyc2lvbiA9IGxpZ2h0cy5zdGF0ZS52ZXJzaW9uO1xuXG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHByb2dyYW1DYWNoZS5nZXRQYXJhbWV0ZXJzKCBtYXRlcmlhbCwgbGlnaHRzLnN0YXRlLCBzaGFkb3dzQXJyYXksIHNjZW5lLCBvYmplY3QgKTtcblx0XHRjb25zdCBwcm9ncmFtQ2FjaGVLZXkgPSBwcm9ncmFtQ2FjaGUuZ2V0UHJvZ3JhbUNhY2hlS2V5KCBwYXJhbWV0ZXJzICk7XG5cblx0XHRsZXQgcHJvZ3JhbXMgPSBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbXM7XG5cblx0XHQvLyBhbHdheXMgdXBkYXRlIGVudmlyb25tZW50IGFuZCBmb2cgLSBjaGFuZ2luZyB0aGVzZSB0cmlnZ2VyIGFuIGdldFByb2dyYW0gY2FsbCwgYnV0IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgcHJvZ3JhbSBkb2Vzbid0IGNoYW5nZVxuXG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmVudmlyb25tZW50ID0gbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA/IHNjZW5lLmVudmlyb25tZW50IDogbnVsbDtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMuZm9nID0gc2NlbmUuZm9nO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5lbnZNYXAgPSAoIG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMgKS5nZXQoIG1hdGVyaWFsLmVudk1hcCB8fCBtYXRlcmlhbFByb3BlcnRpZXMuZW52aXJvbm1lbnQgKTtcblxuXHRcdGlmICggcHJvZ3JhbXMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gbmV3IG1hdGVyaWFsXG5cblx0XHRcdG1hdGVyaWFsLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25NYXRlcmlhbERpc3Bvc2UgKTtcblxuXHRcdFx0cHJvZ3JhbXMgPSBuZXcgTWFwKCk7XG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbXMgPSBwcm9ncmFtcztcblxuXHRcdH1cblxuXHRcdGxldCBwcm9ncmFtID0gcHJvZ3JhbXMuZ2V0KCBwcm9ncmFtQ2FjaGVLZXkgKTtcblxuXHRcdGlmICggcHJvZ3JhbSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBlYXJseSBvdXQgaWYgcHJvZ3JhbSBhbmQgbGlnaHQgc3RhdGUgaXMgaWRlbnRpY2FsXG5cblx0XHRcdGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLmN1cnJlbnRQcm9ncmFtID09PSBwcm9ncmFtICYmIG1hdGVyaWFsUHJvcGVydGllcy5saWdodHNTdGF0ZVZlcnNpb24gPT09IGxpZ2h0c1N0YXRlVmVyc2lvbiApIHtcblxuXHRcdFx0XHR1cGRhdGVDb21tb25NYXRlcmlhbFByb3BlcnRpZXMoIG1hdGVyaWFsLCBwYXJhbWV0ZXJzICk7XG5cblx0XHRcdFx0cmV0dXJuIHByb2dyYW07XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHBhcmFtZXRlcnMudW5pZm9ybXMgPSBwcm9ncmFtQ2FjaGUuZ2V0VW5pZm9ybXMoIG1hdGVyaWFsICk7XG5cblx0XHRcdG1hdGVyaWFsLm9uQnVpbGQoIG9iamVjdCwgcGFyYW1ldGVycywgX3RoaXMgKTtcblxuXHRcdFx0bWF0ZXJpYWwub25CZWZvcmVDb21waWxlKCBwYXJhbWV0ZXJzLCBfdGhpcyApO1xuXG5cdFx0XHRwcm9ncmFtID0gcHJvZ3JhbUNhY2hlLmFjcXVpcmVQcm9ncmFtKCBwYXJhbWV0ZXJzLCBwcm9ncmFtQ2FjaGVLZXkgKTtcblx0XHRcdHByb2dyYW1zLnNldCggcHJvZ3JhbUNhY2hlS2V5LCBwcm9ncmFtICk7XG5cblx0XHRcdG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcyA9IHBhcmFtZXRlcnMudW5pZm9ybXM7XG5cblx0XHR9XG5cblx0XHRjb25zdCB1bmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3JtcztcblxuXHRcdGlmICggKCAhIG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYgISBtYXRlcmlhbC5pc1Jhd1NoYWRlck1hdGVyaWFsICkgfHwgbWF0ZXJpYWwuY2xpcHBpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdHVuaWZvcm1zLmNsaXBwaW5nUGxhbmVzID0gY2xpcHBpbmcudW5pZm9ybTtcblxuXHRcdH1cblxuXHRcdHVwZGF0ZUNvbW1vbk1hdGVyaWFsUHJvcGVydGllcyggbWF0ZXJpYWwsIHBhcmFtZXRlcnMgKTtcblxuXHRcdC8vIHN0b3JlIHRoZSBsaWdodCBzZXR1cCBpdCB3YXMgY3JlYXRlZCBmb3JcblxuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5uZWVkc0xpZ2h0cyA9IG1hdGVyaWFsTmVlZHNMaWdodHMoIG1hdGVyaWFsICk7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c1N0YXRlVmVyc2lvbiA9IGxpZ2h0c1N0YXRlVmVyc2lvbjtcblxuXHRcdGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzICkge1xuXG5cdFx0XHQvLyB3aXJlIHVwIHRoZSBtYXRlcmlhbCB0byB0aGlzIHJlbmRlcmVyJ3MgbGlnaHRpbmcgc3RhdGVcblxuXHRcdFx0dW5pZm9ybXMuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUgPSBsaWdodHMuc3RhdGUuYW1iaWVudDtcblx0XHRcdHVuaWZvcm1zLmxpZ2h0UHJvYmUudmFsdWUgPSBsaWdodHMuc3RhdGUucHJvYmU7XG5cdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbDtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93O1xuXHRcdFx0dW5pZm9ybXMuc3BvdExpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90O1xuXHRcdFx0dW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93O1xuXHRcdFx0dW5pZm9ybXMucmVjdEFyZWFMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUucmVjdEFyZWE7XG5cdFx0XHR1bmlmb3Jtcy5sdGNfMS52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5yZWN0QXJlYUxUQzE7XG5cdFx0XHR1bmlmb3Jtcy5sdGNfMi52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5yZWN0QXJlYUxUQzI7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludExpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludDtcblx0XHRcdHVuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50U2hhZG93O1xuXHRcdFx0dW5pZm9ybXMuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5oZW1pO1xuXG5cdFx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcDtcblx0XHRcdHVuaWZvcm1zLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4O1xuXHRcdFx0dW5pZm9ybXMuc3BvdFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93TWFwO1xuXHRcdFx0dW5pZm9ybXMuc3BvdFNoYWRvd01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93TWF0cml4O1xuXHRcdFx0dW5pZm9ybXMucG9pbnRTaGFkb3dNYXAudmFsdWUgPSBsaWdodHMuc3RhdGUucG9pbnRTaGFkb3dNYXA7XG5cdFx0XHR1bmlmb3Jtcy5wb2ludFNoYWRvd01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeDtcblx0XHRcdC8vIFRPRE8gKGFiZWxuYXRpb24pOiBhZGQgYXJlYSBsaWdodHMgc2hhZG93IGluZm8gdG8gdW5pZm9ybXNcblxuXHRcdH1cblxuXHRcdGNvbnN0IHByb2dVbmlmb3JtcyA9IHByb2dyYW0uZ2V0VW5pZm9ybXMoKTtcblx0XHRjb25zdCB1bmlmb3Jtc0xpc3QgPSBXZWJHTFVuaWZvcm1zLnNlcVdpdGhWYWx1ZSggcHJvZ1VuaWZvcm1zLnNlcSwgdW5pZm9ybXMgKTtcblxuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCA9IHVuaWZvcm1zTGlzdDtcblxuXHRcdHJldHVybiBwcm9ncmFtO1xuXG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVDb21tb25NYXRlcmlhbFByb3BlcnRpZXMoIG1hdGVyaWFsLCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIG1hdGVyaWFsICk7XG5cblx0XHRtYXRlcmlhbFByb3BlcnRpZXMub3V0cHV0RW5jb2RpbmcgPSBwYXJhbWV0ZXJzLm91dHB1dEVuY29kaW5nO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5pbnN0YW5jaW5nID0gcGFyYW1ldGVycy5pbnN0YW5jaW5nO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5za2lubmluZyA9IHBhcmFtZXRlcnMuc2tpbm5pbmc7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoVGFyZ2V0cyA9IHBhcmFtZXRlcnMubW9ycGhUYXJnZXRzO1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaE5vcm1hbHMgPSBwYXJhbWV0ZXJzLm1vcnBoTm9ybWFscztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzQ291bnQgPSBwYXJhbWV0ZXJzLm1vcnBoVGFyZ2V0c0NvdW50O1xuXHRcdG1hdGVyaWFsUHJvcGVydGllcy5udW1DbGlwcGluZ1BsYW5lcyA9IHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUludGVyc2VjdGlvbiA9IHBhcmFtZXRlcnMubnVtQ2xpcEludGVyc2VjdGlvbjtcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudmVydGV4QWxwaGFzID0gcGFyYW1ldGVycy52ZXJ0ZXhBbHBoYXM7XG5cdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleFRhbmdlbnRzID0gcGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cztcblx0XHRtYXRlcmlhbFByb3BlcnRpZXMudG9uZU1hcHBpbmcgPSBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRQcm9ncmFtKCBjYW1lcmEsIHNjZW5lLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCApIHtcblxuXHRcdGlmICggc2NlbmUuaXNTY2VuZSAhPT0gdHJ1ZSApIHNjZW5lID0gX2VtcHR5U2NlbmU7IC8vIHNjZW5lIGNvdWxkIGJlIGEgTWVzaCwgTGluZSwgUG9pbnRzLCAuLi5cblxuXHRcdHRleHR1cmVzLnJlc2V0VGV4dHVyZVVuaXRzKCk7XG5cblx0XHRjb25zdCBmb2cgPSBzY2VuZS5mb2c7XG5cdFx0Y29uc3QgZW52aXJvbm1lbnQgPSBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID8gc2NlbmUuZW52aXJvbm1lbnQgOiBudWxsO1xuXHRcdGNvbnN0IGVuY29kaW5nID0gKCBfY3VycmVudFJlbmRlclRhcmdldCA9PT0gbnVsbCApID8gX3RoaXMub3V0cHV0RW5jb2RpbmcgOiAoIF9jdXJyZW50UmVuZGVyVGFyZ2V0LmlzWFJSZW5kZXJUYXJnZXQgPT09IHRydWUgPyBfY3VycmVudFJlbmRlclRhcmdldC50ZXh0dXJlLmVuY29kaW5nIDogTGluZWFyRW5jb2RpbmcgKTtcblx0XHRjb25zdCBlbnZNYXAgPSAoIG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPyBjdWJldXZtYXBzIDogY3ViZW1hcHMgKS5nZXQoIG1hdGVyaWFsLmVudk1hcCB8fCBlbnZpcm9ubWVudCApO1xuXHRcdGNvbnN0IHZlcnRleEFscGhhcyA9IG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gdHJ1ZSAmJiAhISBnZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yICYmIGdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUgPT09IDQ7XG5cdFx0Y29uc3QgdmVydGV4VGFuZ2VudHMgPSAhISBtYXRlcmlhbC5ub3JtYWxNYXAgJiYgISEgZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50O1xuXHRcdGNvbnN0IG1vcnBoVGFyZ2V0cyA9ICEhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRjb25zdCBtb3JwaE5vcm1hbHMgPSAhISBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsO1xuXHRcdGNvbnN0IG1vcnBoVGFyZ2V0c0NvdW50ID0gISEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uID8gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCA6IDA7XG5cdFx0Y29uc3QgdG9uZU1hcHBpbmcgPSBtYXRlcmlhbC50b25lTWFwcGVkID8gX3RoaXMudG9uZU1hcHBpbmcgOiBOb1RvbmVNYXBwaW5nO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWxQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIG1hdGVyaWFsICk7XG5cdFx0Y29uc3QgbGlnaHRzID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLmxpZ2h0cztcblxuXHRcdGlmICggX2NsaXBwaW5nRW5hYmxlZCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0aWYgKCBfbG9jYWxDbGlwcGluZ0VuYWJsZWQgPT09IHRydWUgfHwgY2FtZXJhICE9PSBfY3VycmVudENhbWVyYSApIHtcblxuXHRcdFx0XHRjb25zdCB1c2VDYWNoZSA9XG5cdFx0XHRcdFx0Y2FtZXJhID09PSBfY3VycmVudENhbWVyYSAmJlxuXHRcdFx0XHRcdG1hdGVyaWFsLmlkID09PSBfY3VycmVudE1hdGVyaWFsSWQ7XG5cblx0XHRcdFx0Ly8gd2UgbWlnaHQgd2FudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBzb21lIENsaXBwaW5nR3JvdXBcblx0XHRcdFx0Ly8gb2JqZWN0IGluc3RlYWQgb2YgdGhlIG1hdGVyaWFsLCBvbmNlIGl0IGJlY29tZXMgZmVhc2libGVcblx0XHRcdFx0Ly8gKCM4NDY1LCAjODM3OSlcblx0XHRcdFx0Y2xpcHBpbmcuc2V0U3RhdGUoIG1hdGVyaWFsLCBjYW1lcmEsIHVzZUNhY2hlICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRsZXQgbmVlZHNQcm9ncmFtQ2hhbmdlID0gZmFsc2U7XG5cblx0XHRpZiAoIG1hdGVyaWFsLnZlcnNpb24gPT09IG1hdGVyaWFsUHJvcGVydGllcy5fX3ZlcnNpb24gKSB7XG5cblx0XHRcdGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzICYmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c1N0YXRlVmVyc2lvbiAhPT0gbGlnaHRzLnN0YXRlLnZlcnNpb24gKSApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbFByb3BlcnRpZXMub3V0cHV0RW5jb2RpbmcgIT09IGVuY29kaW5nICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdC5pc0luc3RhbmNlZE1lc2ggJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmluc3RhbmNpbmcgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoICEgb2JqZWN0LmlzSW5zdGFuY2VkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuaW5zdGFuY2luZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QuaXNTa2lubmVkTWVzaCAmJiBtYXRlcmlhbFByb3BlcnRpZXMuc2tpbm5pbmcgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoICEgb2JqZWN0LmlzU2tpbm5lZE1lc2ggJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLnNraW5uaW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5lbnZNYXAgIT09IGVudk1hcCApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5mb2cgJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmZvZyAhPT0gZm9nICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5udW1DbGlwcGluZ1BsYW5lcyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdCggbWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzICE9PSBjbGlwcGluZy5udW1QbGFuZXMgfHxcblx0XHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUludGVyc2VjdGlvbiAhPT0gY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uICkgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLnZlcnRleEFscGhhcyAhPT0gdmVydGV4QWxwaGFzICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy52ZXJ0ZXhUYW5nZW50cyAhPT0gdmVydGV4VGFuZ2VudHMgKSB7XG5cblx0XHRcdFx0bmVlZHNQcm9ncmFtQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm1vcnBoVGFyZ2V0cyAhPT0gbW9ycGhUYXJnZXRzICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5tb3JwaE5vcm1hbHMgIT09IG1vcnBoTm9ybWFscyApIHtcblxuXHRcdFx0XHRuZWVkc1Byb2dyYW1DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbFByb3BlcnRpZXMudG9uZU1hcHBpbmcgIT09IHRvbmVNYXBwaW5nICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiA9PT0gdHJ1ZSAmJiBtYXRlcmlhbFByb3BlcnRpZXMubW9ycGhUYXJnZXRzQ291bnQgIT09IG1vcnBoVGFyZ2V0c0NvdW50ICkge1xuXG5cdFx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdG5lZWRzUHJvZ3JhbUNoYW5nZSA9IHRydWU7XG5cdFx0XHRtYXRlcmlhbFByb3BlcnRpZXMuX192ZXJzaW9uID0gbWF0ZXJpYWwudmVyc2lvbjtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRsZXQgcHJvZ3JhbSA9IG1hdGVyaWFsUHJvcGVydGllcy5jdXJyZW50UHJvZ3JhbTtcblxuXHRcdGlmICggbmVlZHNQcm9ncmFtQ2hhbmdlID09PSB0cnVlICkge1xuXG5cdFx0XHRwcm9ncmFtID0gZ2V0UHJvZ3JhbSggbWF0ZXJpYWwsIHNjZW5lLCBvYmplY3QgKTtcblxuXHRcdH1cblxuXHRcdGxldCByZWZyZXNoUHJvZ3JhbSA9IGZhbHNlO1xuXHRcdGxldCByZWZyZXNoTWF0ZXJpYWwgPSBmYWxzZTtcblx0XHRsZXQgcmVmcmVzaExpZ2h0cyA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgcF91bmlmb3JtcyA9IHByb2dyYW0uZ2V0VW5pZm9ybXMoKSxcblx0XHRcdG1fdW5pZm9ybXMgPSBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXM7XG5cblx0XHRpZiAoIHN0YXRlLnVzZVByb2dyYW0oIHByb2dyYW0ucHJvZ3JhbSApICkge1xuXG5cdFx0XHRyZWZyZXNoUHJvZ3JhbSA9IHRydWU7XG5cdFx0XHRyZWZyZXNoTWF0ZXJpYWwgPSB0cnVlO1xuXHRcdFx0cmVmcmVzaExpZ2h0cyA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1hdGVyaWFsLmlkICE9PSBfY3VycmVudE1hdGVyaWFsSWQgKSB7XG5cblx0XHRcdF9jdXJyZW50TWF0ZXJpYWxJZCA9IG1hdGVyaWFsLmlkO1xuXG5cdFx0XHRyZWZyZXNoTWF0ZXJpYWwgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZWZyZXNoUHJvZ3JhbSB8fCBfY3VycmVudENhbWVyYSAhPT0gY2FtZXJhICkge1xuXG5cdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdwcm9qZWN0aW9uTWF0cml4JywgY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciApIHtcblxuXHRcdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdsb2dEZXB0aEJ1ZkZDJyxcblx0XHRcdFx0XHQyLjAgLyAoIE1hdGgubG9nKCBjYW1lcmEuZmFyICsgMS4wICkgLyBNYXRoLkxOMiApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBfY3VycmVudENhbWVyYSAhPT0gY2FtZXJhICkge1xuXG5cdFx0XHRcdF9jdXJyZW50Q2FtZXJhID0gY2FtZXJhO1xuXG5cdFx0XHRcdC8vIGxpZ2h0aW5nIHVuaWZvcm1zIGRlcGVuZCBvbiB0aGUgY2FtZXJhIHNvIGVuZm9yY2UgYW4gdXBkYXRlXG5cdFx0XHRcdC8vIG5vdywgaW4gY2FzZSB0aGlzIG1hdGVyaWFsIHN1cHBvcnRzIGxpZ2h0cyAtIG9yIGxhdGVyLCB3aGVuXG5cdFx0XHRcdC8vIHRoZSBuZXh0IG1hdGVyaWFsIHRoYXQgZG9lcyBnZXRzIGFjdGl2YXRlZDpcblxuXHRcdFx0XHRyZWZyZXNoTWF0ZXJpYWwgPSB0cnVlO1x0XHQvLyBzZXQgdG8gdHJ1ZSBvbiBtYXRlcmlhbCBjaGFuZ2Vcblx0XHRcdFx0cmVmcmVzaExpZ2h0cyA9IHRydWU7XHRcdC8vIHJlbWFpbnMgc2V0IHVudGlsIHVwZGF0ZSBkb25lXG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gbG9hZCBtYXRlcmlhbCBzcGVjaWZpYyB1bmlmb3Jtc1xuXHRcdFx0Ly8gKHNoYWRlciBtYXRlcmlhbCBhbHNvIGdldHMgdGhlbSBmb3IgdGhlIHNha2Ugb2YgZ2VuZXJpY2l0eSlcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuZW52TWFwICkge1xuXG5cdFx0XHRcdGNvbnN0IHVDYW1Qb3MgPSBwX3VuaWZvcm1zLm1hcC5jYW1lcmFQb3NpdGlvbjtcblxuXHRcdFx0XHRpZiAoIHVDYW1Qb3MgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHVDYW1Qb3Muc2V0VmFsdWUoIF9nbCxcblx0XHRcdFx0XHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhLm1hdHJpeFdvcmxkICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaFRvb25NYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoQmFzaWNNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzU2hhZGVyTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnaXNPcnRob2dyYXBoaWMnLCBjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEgPT09IHRydWUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsIHx8XG5cdFx0XHRcdG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHxcblx0XHRcdFx0bWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCB8fFxuXHRcdFx0XHRtYXRlcmlhbC5pc1NoYWRvd01hdGVyaWFsIHx8XG5cdFx0XHRcdG9iamVjdC5pc1NraW5uZWRNZXNoICkge1xuXG5cdFx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3ZpZXdNYXRyaXgnLCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIHNraW5uaW5nIGFuZCBtb3JwaCB0YXJnZXQgdW5pZm9ybXMgbXVzdCBiZSBzZXQgZXZlbiBpZiBtYXRlcmlhbCBkaWRuJ3QgY2hhbmdlXG5cdFx0Ly8gYXV0by1zZXR0aW5nIG9mIHRleHR1cmUgdW5pdCBmb3IgYm9uZSBhbmQgbW9ycGggdGV4dHVyZSBtdXN0IGdvIGJlZm9yZSBvdGhlciB0ZXh0dXJlc1xuXHRcdC8vIG90aGVyd2lzZSB0ZXh0dXJlcyB1c2VkIGZvciBza2lubmluZyBhbmQgbW9ycGhpbmcgY2FuIHRha2Ugb3ZlciB0ZXh0dXJlIHVuaXRzIHJlc2VydmVkIGZvciBvdGhlciBtYXRlcmlhbCB0ZXh0dXJlc1xuXG5cdFx0aWYgKCBvYmplY3QuaXNTa2lubmVkTWVzaCApIHtcblxuXHRcdFx0cF91bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBvYmplY3QsICdiaW5kTWF0cml4JyApO1xuXHRcdFx0cF91bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBvYmplY3QsICdiaW5kTWF0cml4SW52ZXJzZScgKTtcblxuXHRcdFx0Y29uc3Qgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XG5cblx0XHRcdGlmICggc2tlbGV0b24gKSB7XG5cblx0XHRcdFx0aWYgKCBjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0ZXhUZXh0dXJlcyApIHtcblxuXHRcdFx0XHRcdGlmICggc2tlbGV0b24uYm9uZVRleHR1cmUgPT09IG51bGwgKSBza2VsZXRvbi5jb21wdXRlQm9uZVRleHR1cmUoKTtcblxuXHRcdFx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0dXJlJywgc2tlbGV0b24uYm9uZVRleHR1cmUsIHRleHR1cmVzICk7XG5cdFx0XHRcdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnYm9uZVRleHR1cmVTaXplJywgc2tlbGV0b24uYm9uZVRleHR1cmVTaXplICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHBfdW5pZm9ybXMuc2V0T3B0aW9uYWwoIF9nbCwgc2tlbGV0b24sICdib25lTWF0cmljZXMnICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoICEhIGdlb21ldHJ5ICYmICggZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgfHwgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCAhPT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdG1vcnBodGFyZ2V0cy51cGRhdGUoIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBwcm9ncmFtICk7XG5cblx0XHR9XG5cblxuXHRcdGlmICggcmVmcmVzaE1hdGVyaWFsIHx8IG1hdGVyaWFsUHJvcGVydGllcy5yZWNlaXZlU2hhZG93ICE9PSBvYmplY3QucmVjZWl2ZVNoYWRvdyApIHtcblxuXHRcdFx0bWF0ZXJpYWxQcm9wZXJ0aWVzLnJlY2VpdmVTaGFkb3cgPSBvYmplY3QucmVjZWl2ZVNoYWRvdztcblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3JlY2VpdmVTaGFkb3cnLCBvYmplY3QucmVjZWl2ZVNoYWRvdyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCByZWZyZXNoTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3RvbmVNYXBwaW5nRXhwb3N1cmUnLCBfdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlICk7XG5cblx0XHRcdGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLm5lZWRzTGlnaHRzICkge1xuXG5cdFx0XHRcdC8vIHRoZSBjdXJyZW50IG1hdGVyaWFsIHJlcXVpcmVzIGxpZ2h0aW5nIGluZm9cblxuXHRcdFx0XHQvLyBub3RlOiBhbGwgbGlnaHRpbmcgdW5pZm9ybXMgYXJlIGFsd2F5cyBzZXQgY29ycmVjdGx5XG5cdFx0XHRcdC8vIHRoZXkgc2ltcGx5IHJlZmVyZW5jZSB0aGUgcmVuZGVyZXIncyBzdGF0ZSBmb3IgdGhlaXJcblx0XHRcdFx0Ly8gdmFsdWVzXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIHVzZSB0aGUgY3VycmVudCBtYXRlcmlhbCdzIC5uZWVkc1VwZGF0ZSBmbGFncyB0byBzZXRcblx0XHRcdFx0Ly8gdGhlIEdMIHN0YXRlIHdoZW4gcmVxdWlyZWRcblxuXHRcdFx0XHRtYXJrVW5pZm9ybXNMaWdodHNOZWVkc1VwZGF0ZSggbV91bmlmb3JtcywgcmVmcmVzaExpZ2h0cyApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlZnJlc2ggdW5pZm9ybXMgY29tbW9uIHRvIHNldmVyYWwgbWF0ZXJpYWxzXG5cblx0XHRcdGlmICggZm9nICYmIG1hdGVyaWFsLmZvZyApIHtcblxuXHRcdFx0XHRtYXRlcmlhbHMucmVmcmVzaEZvZ1VuaWZvcm1zKCBtX3VuaWZvcm1zLCBmb2cgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRtYXRlcmlhbHMucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoIG1fdW5pZm9ybXMsIG1hdGVyaWFsLCBfcGl4ZWxSYXRpbywgX2hlaWdodCwgX3RyYW5zbWlzc2lvblJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRXZWJHTFVuaWZvcm1zLnVwbG9hZCggX2dsLCBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0LCBtX3VuaWZvcm1zLCB0ZXh0dXJlcyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmIG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0V2ViR0xVbmlmb3Jtcy51cGxvYWQoIF9nbCwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCwgbV91bmlmb3JtcywgdGV4dHVyZXMgKTtcblx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc1Nwcml0ZU1hdGVyaWFsICkge1xuXG5cdFx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdjZW50ZXInLCBvYmplY3QuY2VudGVyICk7XG5cblx0XHR9XG5cblx0XHQvLyBjb21tb24gbWF0cmljZXNcblxuXHRcdHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ21vZGVsVmlld01hdHJpeCcsIG9iamVjdC5tb2RlbFZpZXdNYXRyaXggKTtcblx0XHRwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdub3JtYWxNYXRyaXgnLCBvYmplY3Qubm9ybWFsTWF0cml4ICk7XG5cdFx0cF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnbW9kZWxNYXRyaXgnLCBvYmplY3QubWF0cml4V29ybGQgKTtcblxuXHRcdHJldHVybiBwcm9ncmFtO1xuXG5cdH1cblxuXHQvLyBJZiB1bmlmb3JtcyBhcmUgbWFya2VkIGFzIGNsZWFuLCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgbG9hZGVkIHRvIHRoZSBHUFUuXG5cblx0ZnVuY3Rpb24gbWFya1VuaWZvcm1zTGlnaHRzTmVlZHNVcGRhdGUoIHVuaWZvcm1zLCB2YWx1ZSApIHtcblxuXHRcdHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXG5cdFx0dW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGUgPSB2YWx1ZTtcblx0XHR1bmlmb3Jtcy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXHRcdHVuaWZvcm1zLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7XG5cdFx0dW5pZm9ybXMuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBtYXRlcmlhbE5lZWRzTGlnaHRzKCBtYXRlcmlhbCApIHtcblxuXHRcdHJldHVybiBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHxcblx0XHRcdG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCB8fFxuXHRcdFx0KCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmIG1hdGVyaWFsLmxpZ2h0cyA9PT0gdHJ1ZSApO1xuXG5cdH1cblxuXHR0aGlzLmdldEFjdGl2ZUN1YmVGYWNlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jdXJyZW50QWN0aXZlQ3ViZUZhY2U7XG5cblx0fTtcblxuXHR0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWw7XG5cblx0fTtcblxuXHR0aGlzLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBfY3VycmVudFJlbmRlclRhcmdldDtcblxuXHR9O1xuXG5cdHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgY29sb3JUZXh0dXJlLCBkZXB0aFRleHR1cmUgKSB7XG5cblx0XHRwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LnRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSA9IGNvbG9yVGV4dHVyZTtcblx0XHRwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlID0gZGVwdGhUZXh0dXJlO1xuXG5cdFx0Y29uc3QgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTtcblx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyA9IHRydWU7XG5cblx0XHRpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19oYXNFeHRlcm5hbFRleHR1cmVzICkge1xuXG5cdFx0XHRyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIgPSBkZXB0aFRleHR1cmUgPT09IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCAhIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlciApIHtcblxuXHRcdFx0XHQvLyBUaGUgbXVsdGlzYW1wbGVfcmVuZGVyX3RvX3RleHR1cmUgZXh0ZW5zaW9uIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBpZiB0aGVyZVxuXHRcdFx0XHQvLyBhcmUgbWlkZnJhbWUgZmx1c2hlcyBhbmQgYW4gZXh0ZXJuYWwgZGVwdGggYnVmZmVyLiBEaXNhYmxlIHVzZSBvZiB0aGUgZXh0ZW5zaW9uLlxuXHRcdFx0XHRpZiAoIHJlbmRlclRhcmdldC51c2VSZW5kZXJUb1RleHR1cmUgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQnICk7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LnVzZVJlbmRlclRvVGV4dHVyZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlbmRlclRhcmdldC51c2VSZW5kZXJidWZmZXIgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH07XG5cblx0dGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICggcmVuZGVyVGFyZ2V0LCBkZWZhdWx0RnJhbWVidWZmZXIgKSB7XG5cblx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gZGVmYXVsdEZyYW1lYnVmZmVyO1xuXHRcdHJlbmRlclRhcmdldFByb3BlcnRpZXMuX191c2VEZWZhdWx0RnJhbWVidWZmZXIgPSBkZWZhdWx0RnJhbWVidWZmZXIgPT09IHVuZGVmaW5lZDtcblxuXHR9O1xuXG5cdHRoaXMuc2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCByZW5kZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlID0gMCwgYWN0aXZlTWlwbWFwTGV2ZWwgPSAwICkge1xuXG5cdFx0X2N1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cdFx0X2N1cnJlbnRBY3RpdmVDdWJlRmFjZSA9IGFjdGl2ZUN1YmVGYWNlO1xuXHRcdF9jdXJyZW50QWN0aXZlTWlwbWFwTGV2ZWwgPSBhY3RpdmVNaXBtYXBMZXZlbDtcblx0XHRsZXQgdXNlRGVmYXVsdEZyYW1lYnVmZmVyID0gdHJ1ZTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRjb25zdCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApO1xuXG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX191c2VEZWZhdWx0RnJhbWVidWZmZXIgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byByZWJpbmQgdGhlIGZyYW1lYnVmZmVyLlxuXHRcdFx0XHRzdGF0ZS5iaW5kRnJhbWVidWZmZXIoIDM2MTYwLCBudWxsICk7XG5cdFx0XHRcdHVzZURlZmF1bHRGcmFtZWJ1ZmZlciA9IGZhbHNlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmVzLnNldHVwUmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX2hhc0V4dGVybmFsVGV4dHVyZXMgKSB7XG5cblx0XHRcdFx0Ly8gQ29sb3IgYW5kIGRlcHRoIHRleHR1cmUgbXVzdCBiZSByZWJvdW5kIGluIG9yZGVyIGZvciB0aGUgc3dhcGNoYWluIHRvIHVwZGF0ZS5cblx0XHRcdFx0dGV4dHVyZXMucmViaW5kVGV4dHVyZXMoIHJlbmRlclRhcmdldCwgcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldC50ZXh0dXJlICkuX193ZWJnbFRleHR1cmUsIHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICkuX193ZWJnbFRleHR1cmUgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0bGV0IGZyYW1lYnVmZmVyID0gbnVsbDtcblx0XHRsZXQgaXNDdWJlID0gZmFsc2U7XG5cdFx0bGV0IGlzUmVuZGVyVGFyZ2V0M0QgPSBmYWxzZTtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0ICkge1xuXG5cdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cblx0XHRcdGlmICggdGV4dHVyZS5pc0RhdGFUZXh0dXJlM0QgfHwgdGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSApIHtcblxuXHRcdFx0XHRpc1JlbmRlclRhcmdldDNEID0gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBfX3dlYmdsRnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICkuX193ZWJnbEZyYW1lYnVmZmVyO1xuXG5cdFx0XHRpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCApIHtcblxuXHRcdFx0XHRmcmFtZWJ1ZmZlciA9IF9fd2ViZ2xGcmFtZWJ1ZmZlclsgYWN0aXZlQ3ViZUZhY2UgXTtcblx0XHRcdFx0aXNDdWJlID0gdHJ1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggcmVuZGVyVGFyZ2V0LnVzZVJlbmRlcmJ1ZmZlciApIHtcblxuXHRcdFx0XHRmcmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0ZnJhbWVidWZmZXIgPSBfX3dlYmdsRnJhbWVidWZmZXI7XG5cblx0XHRcdH1cblxuXHRcdFx0X2N1cnJlbnRWaWV3cG9ydC5jb3B5KCByZW5kZXJUYXJnZXQudmlld3BvcnQgKTtcblx0XHRcdF9jdXJyZW50U2Npc3Nvci5jb3B5KCByZW5kZXJUYXJnZXQuc2Npc3NvciApO1xuXHRcdFx0X2N1cnJlbnRTY2lzc29yVGVzdCA9IHJlbmRlclRhcmdldC5zY2lzc29yVGVzdDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF9jdXJyZW50Vmlld3BvcnQuY29weSggX3ZpZXdwb3J0ICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxvb3IoKTtcblx0XHRcdF9jdXJyZW50U2Npc3Nvci5jb3B5KCBfc2Npc3NvciApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApLmZsb29yKCk7XG5cdFx0XHRfY3VycmVudFNjaXNzb3JUZXN0ID0gX3NjaXNzb3JUZXN0O1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZnJhbWVidWZmZXJCb3VuZCA9IHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVyICk7XG5cblx0XHRpZiAoIGZyYW1lYnVmZmVyQm91bmQgJiYgY2FwYWJpbGl0aWVzLmRyYXdCdWZmZXJzICYmIHVzZURlZmF1bHRGcmFtZWJ1ZmZlciApIHtcblxuXHRcdFx0c3RhdGUuZHJhd0J1ZmZlcnMoIHJlbmRlclRhcmdldCwgZnJhbWVidWZmZXIgKTtcblxuXHRcdH1cblxuXHRcdHN0YXRlLnZpZXdwb3J0KCBfY3VycmVudFZpZXdwb3J0ICk7XG5cdFx0c3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yICk7XG5cdFx0c3RhdGUuc2V0U2Npc3NvclRlc3QoIF9jdXJyZW50U2Npc3NvclRlc3QgKTtcblxuXHRcdGlmICggaXNDdWJlICkge1xuXG5cdFx0XHRjb25zdCB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApO1xuXHRcdFx0X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCAzNjE2MCwgMzYwNjQsIDM0MDY5ICsgYWN0aXZlQ3ViZUZhY2UsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlLCBhY3RpdmVNaXBtYXBMZXZlbCApO1xuXG5cdFx0fSBlbHNlIGlmICggaXNSZW5kZXJUYXJnZXQzRCApIHtcblxuXHRcdFx0Y29uc3QgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LnRleHR1cmUgKTtcblx0XHRcdGNvbnN0IGxheWVyID0gYWN0aXZlQ3ViZUZhY2UgfHwgMDtcblx0XHRcdF9nbC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllciggMzYxNjAsIDM2MDY0LCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSwgYWN0aXZlTWlwbWFwTGV2ZWwgfHwgMCwgbGF5ZXIgKTtcblxuXHRcdH1cblxuXHRcdF9jdXJyZW50TWF0ZXJpYWxJZCA9IC0gMTsgLy8gcmVzZXQgY3VycmVudCBtYXRlcmlhbCB0byBlbnN1cmUgY29ycmVjdCB1bmlmb3JtIGJpbmRpbmdzXG5cblx0fTtcblxuXHR0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHMgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYnVmZmVyLCBhY3RpdmVDdWJlRmFjZUluZGV4ICkge1xuXG5cdFx0aWYgKCAhICggcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5pc1dlYkdMUmVuZGVyVGFyZ2V0ICkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0bGV0IGZyYW1lYnVmZmVyID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtcblxuXHRcdGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICYmIGFjdGl2ZUN1YmVGYWNlSW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlclsgYWN0aXZlQ3ViZUZhY2VJbmRleCBdO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBmcmFtZWJ1ZmZlciApIHtcblxuXHRcdFx0c3RhdGUuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgZnJhbWVidWZmZXIgKTtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlLmZvcm1hdDtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlLnR5cGU7XG5cblx0XHRcdFx0aWYgKCB0ZXh0dXJlRm9ybWF0ICE9PSBSR0JBRm9ybWF0ICYmIHV0aWxzLmNvbnZlcnQoIHRleHR1cmVGb3JtYXQgKSAhPT0gX2dsLmdldFBhcmFtZXRlciggMzU3MzkgKSApIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4nICk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBoYWxmRmxvYXRTdXBwb3J0ZWRCeUV4dCA9ICggdGV4dHVyZVR5cGUgPT09IEhhbGZGbG9hdFR5cGUgKSAmJiAoIGV4dGVuc2lvbnMuaGFzKCAnRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JyApIHx8ICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyICYmIGV4dGVuc2lvbnMuaGFzKCAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKSApICk7XG5cblx0XHRcdFx0aWYgKCB0ZXh0dXJlVHlwZSAhPT0gVW5zaWduZWRCeXRlVHlwZSAmJiB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlVHlwZSApICE9PSBfZ2wuZ2V0UGFyYW1ldGVyKCAzNTczOCApICYmIC8vIEVkZ2UgYW5kIENocm9tZSBNYWMgPCA1MiAoIzk1MTMpXG5cdFx0XHRcdFx0ISAoIHRleHR1cmVUeXBlID09PSBGbG9hdFR5cGUgJiYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoICdPRVNfdGV4dHVyZV9mbG9hdCcgKSB8fCBleHRlbnNpb25zLmhhcyggJ1dFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKSApICkgJiYgLy8gQ2hyb21lIE1hYyA+PSA1MiBhbmQgRmlyZWZveFxuXHRcdFx0XHRcdCEgaGFsZkZsb2F0U3VwcG9ydGVkQnlFeHQgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLicgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggX2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoIDM2MTYwICkgPT09IDM2MDUzICkge1xuXG5cdFx0XHRcdFx0Ly8gdGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnQgZW5zdXJlcyB2YWxpZCByZWFkIHJlcXVlc3RzIChubyBvdXQtb2YtYm91bmRzIHBpeGVscywgc2VlICM4NjA0KVxuXG5cdFx0XHRcdFx0aWYgKCAoIHggPj0gMCAmJiB4IDw9ICggcmVuZGVyVGFyZ2V0LndpZHRoIC0gd2lkdGggKSApICYmICggeSA+PSAwICYmIHkgPD0gKCByZW5kZXJUYXJnZXQuaGVpZ2h0IC0gaGVpZ2h0ICkgKSApIHtcblxuXHRcdFx0XHRcdFx0X2dsLnJlYWRQaXhlbHMoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHV0aWxzLmNvbnZlcnQoIHRleHR1cmVGb3JtYXQgKSwgdXRpbHMuY29udmVydCggdGV4dHVyZVR5cGUgKSwgYnVmZmVyICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuJyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBmaW5hbGx5IHtcblxuXHRcdFx0XHQvLyByZXN0b3JlIGZyYW1lYnVmZmVyIG9mIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBpZiBuZWNlc3NhcnlcblxuXHRcdFx0XHRjb25zdCBmcmFtZWJ1ZmZlciA9ICggX2N1cnJlbnRSZW5kZXJUYXJnZXQgIT09IG51bGwgKSA/IHByb3BlcnRpZXMuZ2V0KCBfY3VycmVudFJlbmRlclRhcmdldCApLl9fd2ViZ2xGcmFtZWJ1ZmZlciA6IG51bGw7XG5cdFx0XHRcdHN0YXRlLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVyICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9O1xuXG5cdHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlID0gZnVuY3Rpb24gKCBwb3NpdGlvbiwgdGV4dHVyZSwgbGV2ZWwgPSAwICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlLmlzRnJhbWVidWZmZXJUZXh0dXJlICE9PSB0cnVlICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRjb25zdCBsZXZlbFNjYWxlID0gTWF0aC5wb3coIDIsIC0gbGV2ZWwgKTtcblx0XHRjb25zdCB3aWR0aCA9IE1hdGguZmxvb3IoIHRleHR1cmUuaW1hZ2Uud2lkdGggKiBsZXZlbFNjYWxlICk7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vciggdGV4dHVyZS5pbWFnZS5oZWlnaHQgKiBsZXZlbFNjYWxlICk7XG5cblx0XHR0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIHRleHR1cmUsIDAgKTtcblxuXHRcdF9nbC5jb3B5VGV4U3ViSW1hZ2UyRCggMzU1MywgbGV2ZWwsIDAsIDAsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQgKTtcblxuXHRcdHN0YXRlLnVuYmluZFRleHR1cmUoKTtcblxuXHR9O1xuXG5cdHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUgPSBmdW5jdGlvbiAoIHBvc2l0aW9uLCBzcmNUZXh0dXJlLCBkc3RUZXh0dXJlLCBsZXZlbCA9IDAgKSB7XG5cblx0XHRjb25zdCB3aWR0aCA9IHNyY1RleHR1cmUuaW1hZ2Uud2lkdGg7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gc3JjVGV4dHVyZS5pbWFnZS5oZWlnaHQ7XG5cdFx0Y29uc3QgZ2xGb3JtYXQgPSB1dGlscy5jb252ZXJ0KCBkc3RUZXh0dXJlLmZvcm1hdCApO1xuXHRcdGNvbnN0IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIGRzdFRleHR1cmUudHlwZSApO1xuXG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEKCBkc3RUZXh0dXJlLCAwICk7XG5cblx0XHQvLyBBcyBhbm90aGVyIHRleHR1cmUgdXBsb2FkIG1heSBoYXZlIGNoYW5nZWQgcGl4ZWxTdG9yZWlcblx0XHQvLyBwYXJhbWV0ZXJzLCBtYWtlIHN1cmUgdGhleSBhcmUgY29ycmVjdCBmb3IgdGhlIGRzdFRleHR1cmVcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQwLCBkc3RUZXh0dXJlLmZsaXBZICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzNzQ0MSwgZHN0VGV4dHVyZS5wcmVtdWx0aXBseUFscGhhICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE3LCBkc3RUZXh0dXJlLnVucGFja0FsaWdubWVudCApO1xuXG5cdFx0aWYgKCBzcmNUZXh0dXJlLmlzRGF0YVRleHR1cmUgKSB7XG5cblx0XHRcdF9nbC50ZXhTdWJJbWFnZTJEKCAzNTUzLCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgc3JjVGV4dHVyZS5pbWFnZS5kYXRhICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoIHNyY1RleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSApIHtcblxuXHRcdFx0XHRfZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoIDM1NTMsIGxldmVsLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBzcmNUZXh0dXJlLm1pcG1hcHNbIDAgXS53aWR0aCwgc3JjVGV4dHVyZS5taXBtYXBzWyAwIF0uaGVpZ2h0LCBnbEZvcm1hdCwgc3JjVGV4dHVyZS5taXBtYXBzWyAwIF0uZGF0YSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC50ZXhTdWJJbWFnZTJEKCAzNTUzLCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgZ2xGb3JtYXQsIGdsVHlwZSwgc3JjVGV4dHVyZS5pbWFnZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBHZW5lcmF0ZSBtaXBtYXBzIG9ubHkgd2hlbiBjb3B5aW5nIGxldmVsIDBcblx0XHRpZiAoIGxldmVsID09PSAwICYmIGRzdFRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzICkgX2dsLmdlbmVyYXRlTWlwbWFwKCAzNTUzICk7XG5cblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0fTtcblxuXHR0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0QgPSBmdW5jdGlvbiAoIHNvdXJjZUJveCwgcG9zaXRpb24sIHNyY1RleHR1cmUsIGRzdFRleHR1cmUsIGxldmVsID0gMCApIHtcblxuXHRcdGlmICggX3RoaXMuaXNXZWJHTDFSZW5kZXJlciApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHdpZHRoID0gc291cmNlQm94Lm1heC54IC0gc291cmNlQm94Lm1pbi54ICsgMTtcblx0XHRjb25zdCBoZWlnaHQgPSBzb3VyY2VCb3gubWF4LnkgLSBzb3VyY2VCb3gubWluLnkgKyAxO1xuXHRcdGNvbnN0IGRlcHRoID0gc291cmNlQm94Lm1heC56IC0gc291cmNlQm94Lm1pbi56ICsgMTtcblx0XHRjb25zdCBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIGRzdFRleHR1cmUuZm9ybWF0ICk7XG5cdFx0Y29uc3QgZ2xUeXBlID0gdXRpbHMuY29udmVydCggZHN0VGV4dHVyZS50eXBlICk7XG5cdFx0bGV0IGdsVGFyZ2V0O1xuXG5cdFx0aWYgKCBkc3RUZXh0dXJlLmlzRGF0YVRleHR1cmUzRCApIHtcblxuXHRcdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTNEKCBkc3RUZXh0dXJlLCAwICk7XG5cdFx0XHRnbFRhcmdldCA9IDMyODc5O1xuXG5cdFx0fSBlbHNlIGlmICggZHN0VGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSApIHtcblxuXHRcdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEQXJyYXkoIGRzdFRleHR1cmUsIDAgKTtcblx0XHRcdGdsVGFyZ2V0ID0gMzU4NjY7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdF9nbC5waXhlbFN0b3JlaSggMzc0NDAsIGRzdFRleHR1cmUuZmxpcFkgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDM3NDQxLCBkc3RUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTcsIGRzdFRleHR1cmUudW5wYWNrQWxpZ25tZW50ICk7XG5cblx0XHRjb25zdCB1bnBhY2tSb3dMZW4gPSBfZ2wuZ2V0UGFyYW1ldGVyKCAzMzE0ICk7XG5cdFx0Y29uc3QgdW5wYWNrSW1hZ2VIZWlnaHQgPSBfZ2wuZ2V0UGFyYW1ldGVyKCAzMjg3OCApO1xuXHRcdGNvbnN0IHVucGFja1NraXBQaXhlbHMgPSBfZ2wuZ2V0UGFyYW1ldGVyKCAzMzE2ICk7XG5cdFx0Y29uc3QgdW5wYWNrU2tpcFJvd3MgPSBfZ2wuZ2V0UGFyYW1ldGVyKCAzMzE1ICk7XG5cdFx0Y29uc3QgdW5wYWNrU2tpcEltYWdlcyA9IF9nbC5nZXRQYXJhbWV0ZXIoIDMyODc3ICk7XG5cblx0XHRjb25zdCBpbWFnZSA9IHNyY1RleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSA/IHNyY1RleHR1cmUubWlwbWFwc1sgMCBdIDogc3JjVGV4dHVyZS5pbWFnZTtcblxuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNCwgaW1hZ2Uud2lkdGggKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMyODc4LCBpbWFnZS5oZWlnaHQgKTtcblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTYsIHNvdXJjZUJveC5taW4ueCApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzMxNSwgc291cmNlQm94Lm1pbi55ICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMjg3Nywgc291cmNlQm94Lm1pbi56ICk7XG5cblx0XHRpZiAoIHNyY1RleHR1cmUuaXNEYXRhVGV4dHVyZSB8fCBzcmNUZXh0dXJlLmlzRGF0YVRleHR1cmUzRCApIHtcblxuXHRcdFx0X2dsLnRleFN1YkltYWdlM0QoIGdsVGFyZ2V0LCBsZXZlbCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggc3JjVGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLicgKTtcblx0XHRcdFx0X2dsLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKCBnbFRhcmdldCwgbGV2ZWwsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnosIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBnbEZvcm1hdCwgaW1hZ2UuZGF0YSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9nbC50ZXhTdWJJbWFnZTNEKCBnbFRhcmdldCwgbGV2ZWwsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnosIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRfZ2wucGl4ZWxTdG9yZWkoIDMzMTQsIHVucGFja1Jvd0xlbiApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzI4NzgsIHVucGFja0ltYWdlSGVpZ2h0ICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE2LCB1bnBhY2tTa2lwUGl4ZWxzICk7XG5cdFx0X2dsLnBpeGVsU3RvcmVpKCAzMzE1LCB1bnBhY2tTa2lwUm93cyApO1xuXHRcdF9nbC5waXhlbFN0b3JlaSggMzI4NzcsIHVucGFja1NraXBJbWFnZXMgKTtcblxuXHRcdC8vIEdlbmVyYXRlIG1pcG1hcHMgb25seSB3aGVuIGNvcHlpbmcgbGV2ZWwgMFxuXHRcdGlmICggbGV2ZWwgPT09IDAgJiYgZHN0VGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgKSBfZ2wuZ2VuZXJhdGVNaXBtYXAoIGdsVGFyZ2V0ICk7XG5cblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0fTtcblxuXHR0aGlzLmluaXRUZXh0dXJlID0gZnVuY3Rpb24gKCB0ZXh0dXJlICkge1xuXG5cdFx0dGV4dHVyZXMuc2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCAwICk7XG5cblx0XHRzdGF0ZS51bmJpbmRUZXh0dXJlKCk7XG5cblx0fTtcblxuXHR0aGlzLnJlc2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRfY3VycmVudEFjdGl2ZUN1YmVGYWNlID0gMDtcblx0XHRfY3VycmVudEFjdGl2ZU1pcG1hcExldmVsID0gMDtcblx0XHRfY3VycmVudFJlbmRlclRhcmdldCA9IG51bGw7XG5cblx0XHRzdGF0ZS5yZXNldCgpO1xuXHRcdGJpbmRpbmdTdGF0ZXMucmVzZXQoKTtcblxuXHR9O1xuXG5cdGlmICggdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0XHRfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnb2JzZXJ2ZScsIHsgZGV0YWlsOiB0aGlzIH0gKSApO1xuXG5cdH1cblxufVxuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXIgPSB0cnVlO1xuXG5jbGFzcyBXZWJHTDFSZW5kZXJlciBleHRlbmRzIFdlYkdMUmVuZGVyZXIge31cblxuV2ViR0wxUmVuZGVyZXIucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXIgPSB0cnVlO1xuXG5jbGFzcyBGb2dFeHAyIHtcblxuXHRjb25zdHJ1Y3RvciggY29sb3IsIGRlbnNpdHkgPSAwLjAwMDI1ICkge1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCBjb2xvciApO1xuXHRcdHRoaXMuZGVuc2l0eSA9IGRlbnNpdHk7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyBGb2dFeHAyKCB0aGlzLmNvbG9yLCB0aGlzLmRlbnNpdHkgKTtcblxuXHR9XG5cblx0dG9KU09OKCAvKiBtZXRhICovICkge1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6ICdGb2dFeHAyJyxcblx0XHRcdGNvbG9yOiB0aGlzLmNvbG9yLmdldEhleCgpLFxuXHRcdFx0ZGVuc2l0eTogdGhpcy5kZW5zaXR5XG5cdFx0fTtcblxuXHR9XG5cbn1cblxuRm9nRXhwMi5wcm90b3R5cGUuaXNGb2dFeHAyID0gdHJ1ZTtcblxuY2xhc3MgRm9nIHtcblxuXHRjb25zdHJ1Y3RvciggY29sb3IsIG5lYXIgPSAxLCBmYXIgPSAxMDAwICkge1xuXG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCBjb2xvciApO1xuXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcblx0XHR0aGlzLmZhciA9IGZhcjtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IEZvZyggdGhpcy5jb2xvciwgdGhpcy5uZWFyLCB0aGlzLmZhciApO1xuXG5cdH1cblxuXHR0b0pTT04oIC8qIG1ldGEgKi8gKSB7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogJ0ZvZycsXG5cdFx0XHRjb2xvcjogdGhpcy5jb2xvci5nZXRIZXgoKSxcblx0XHRcdG5lYXI6IHRoaXMubmVhcixcblx0XHRcdGZhcjogdGhpcy5mYXJcblx0XHR9O1xuXG5cdH1cblxufVxuXG5Gb2cucHJvdG90eXBlLmlzRm9nID0gdHJ1ZTtcblxuY2xhc3MgU2NlbmUgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1NjZW5lJztcblxuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG51bGw7XG5cdFx0dGhpcy5lbnZpcm9ubWVudCA9IG51bGw7XG5cdFx0dGhpcy5mb2cgPSBudWxsO1xuXG5cdFx0dGhpcy5vdmVycmlkZU1hdGVyaWFsID0gbnVsbDtcblxuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7IC8vIGNoZWNrZWQgYnkgdGhlIHJlbmRlcmVyXG5cblx0XHRpZiAoIHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnICkge1xuXG5cdFx0XHRfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnb2JzZXJ2ZScsIHsgZGV0YWlsOiB0aGlzIH0gKSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgcmVjdXJzaXZlICk7XG5cblx0XHRpZiAoIHNvdXJjZS5iYWNrZ3JvdW5kICE9PSBudWxsICkgdGhpcy5iYWNrZ3JvdW5kID0gc291cmNlLmJhY2tncm91bmQuY2xvbmUoKTtcblx0XHRpZiAoIHNvdXJjZS5lbnZpcm9ubWVudCAhPT0gbnVsbCApIHRoaXMuZW52aXJvbm1lbnQgPSBzb3VyY2UuZW52aXJvbm1lbnQuY2xvbmUoKTtcblx0XHRpZiAoIHNvdXJjZS5mb2cgIT09IG51bGwgKSB0aGlzLmZvZyA9IHNvdXJjZS5mb2cuY2xvbmUoKTtcblxuXHRcdGlmICggc291cmNlLm92ZXJyaWRlTWF0ZXJpYWwgIT09IG51bGwgKSB0aGlzLm92ZXJyaWRlTWF0ZXJpYWwgPSBzb3VyY2Uub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpO1xuXG5cdFx0dGhpcy5hdXRvVXBkYXRlID0gc291cmNlLmF1dG9VcGRhdGU7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9VcGRhdGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0aWYgKCB0aGlzLmZvZyAhPT0gbnVsbCApIGRhdGEub2JqZWN0LmZvZyA9IHRoaXMuZm9nLnRvSlNPTigpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cblNjZW5lLnByb3RvdHlwZS5pc1NjZW5lID0gdHJ1ZTtcblxuY2xhc3MgSW50ZXJsZWF2ZWRCdWZmZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBhcnJheSwgc3RyaWRlICkge1xuXG5cdFx0dGhpcy5hcnJheSA9IGFycmF5O1xuXHRcdHRoaXMuc3RyaWRlID0gc3RyaWRlO1xuXHRcdHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8gc3RyaWRlIDogMDtcblxuXHRcdHRoaXMudXNhZ2UgPSBTdGF0aWNEcmF3VXNhZ2U7XG5cdFx0dGhpcy51cGRhdGVSYW5nZSA9IHsgb2Zmc2V0OiAwLCBjb3VudDogLSAxIH07XG5cblx0XHR0aGlzLnZlcnNpb24gPSAwO1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0fVxuXG5cdG9uVXBsb2FkQ2FsbGJhY2soKSB7fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrO1xuXG5cdH1cblxuXHRzZXRVc2FnZSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnVzYWdlID0gdmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0dGhpcy5hcnJheSA9IG5ldyBzb3VyY2UuYXJyYXkuY29uc3RydWN0b3IoIHNvdXJjZS5hcnJheSApO1xuXHRcdHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7XG5cdFx0dGhpcy5zdHJpZGUgPSBzb3VyY2Uuc3RyaWRlO1xuXHRcdHRoaXMudXNhZ2UgPSBzb3VyY2UudXNhZ2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29weUF0KCBpbmRleDEsIGF0dHJpYnV0ZSwgaW5kZXgyICkge1xuXG5cdFx0aW5kZXgxICo9IHRoaXMuc3RyaWRlO1xuXHRcdGluZGV4MiAqPSBhdHRyaWJ1dGUuc3RyaWRlO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5zdHJpZGU7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmFycmF5WyBpbmRleDEgKyBpIF0gPSBhdHRyaWJ1dGUuYXJyYXlbIGluZGV4MiArIGkgXTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXQoIHZhbHVlLCBvZmZzZXQgPSAwICkge1xuXG5cdFx0dGhpcy5hcnJheS5zZXQoIHZhbHVlLCBvZmZzZXQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSggZGF0YSApIHtcblxuXHRcdGlmICggZGF0YS5hcnJheUJ1ZmZlcnMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnMgPSB7fTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdH1cblxuXHRcdGlmICggZGF0YS5hcnJheUJ1ZmZlcnNbIHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnNbIHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkIF0gPSB0aGlzLmFycmF5LnNsaWNlKCAwICkuYnVmZmVyO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXJyYXkgPSBuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvciggZGF0YS5hcnJheUJ1ZmZlcnNbIHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkIF0gKTtcblxuXHRcdGNvbnN0IGliID0gbmV3IHRoaXMuY29uc3RydWN0b3IoIGFycmF5LCB0aGlzLnN0cmlkZSApO1xuXHRcdGliLnNldFVzYWdlKCB0aGlzLnVzYWdlICk7XG5cblx0XHRyZXR1cm4gaWI7XG5cblx0fVxuXG5cdG9uVXBsb2FkKCBjYWxsYmFjayApIHtcblxuXHRcdHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTiggZGF0YSApIHtcblxuXHRcdGlmICggZGF0YS5hcnJheUJ1ZmZlcnMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnMgPSB7fTtcblxuXHRcdH1cblxuXHRcdC8vIGdlbmVyYXRlIFVVSUQgZm9yIGFycmF5IGJ1ZmZlciBpZiBuZWNlc3NhcnlcblxuXHRcdGlmICggdGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5hcnJheS5idWZmZXIuX3V1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdH1cblxuXHRcdGlmICggZGF0YS5hcnJheUJ1ZmZlcnNbIHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0ZGF0YS5hcnJheUJ1ZmZlcnNbIHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkIF0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggbmV3IFVpbnQzMkFycmF5KCB0aGlzLmFycmF5LmJ1ZmZlciApICk7XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHV1aWQ6IHRoaXMudXVpZCxcblx0XHRcdGJ1ZmZlcjogdGhpcy5hcnJheS5idWZmZXIuX3V1aWQsXG5cdFx0XHR0eXBlOiB0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0XHRzdHJpZGU6IHRoaXMuc3RyaWRlXG5cdFx0fTtcblxuXHR9XG5cbn1cblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXIgPSB0cnVlO1xuXG5jb25zdCBfdmVjdG9yJDYgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggaW50ZXJsZWF2ZWRCdWZmZXIsIGl0ZW1TaXplLCBvZmZzZXQsIG5vcm1hbGl6ZWQgPSBmYWxzZSApIHtcblxuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5kYXRhID0gaW50ZXJsZWF2ZWRCdWZmZXI7XG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXHRcdHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuXG5cdFx0dGhpcy5ub3JtYWxpemVkID0gbm9ybWFsaXplZCA9PT0gdHJ1ZTtcblxuXHR9XG5cblx0Z2V0IGNvdW50KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5jb3VudDtcblxuXHR9XG5cblx0Z2V0IGFycmF5KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hcnJheTtcblxuXHR9XG5cblx0c2V0IG5lZWRzVXBkYXRlKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuZGF0YS5uZWVkc1VwZGF0ZSA9IHZhbHVlO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG0gKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLmRhdGEuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRfdmVjdG9yJDYueCA9IHRoaXMuZ2V0WCggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnkgPSB0aGlzLmdldFkoIGkgKTtcblx0XHRcdF92ZWN0b3IkNi56ID0gdGhpcy5nZXRaKCBpICk7XG5cblx0XHRcdF92ZWN0b3IkNi5hcHBseU1hdHJpeDQoIG0gKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooIGksIF92ZWN0b3IkNi54LCBfdmVjdG9yJDYueSwgX3ZlY3RvciQ2LnogKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcHBseU5vcm1hbE1hdHJpeCggbSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRfdmVjdG9yJDYueCA9IHRoaXMuZ2V0WCggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnkgPSB0aGlzLmdldFkoIGkgKTtcblx0XHRcdF92ZWN0b3IkNi56ID0gdGhpcy5nZXRaKCBpICk7XG5cblx0XHRcdF92ZWN0b3IkNi5hcHBseU5vcm1hbE1hdHJpeCggbSApO1xuXG5cdFx0XHR0aGlzLnNldFhZWiggaSwgX3ZlY3RvciQ2LngsIF92ZWN0b3IkNi55LCBfdmVjdG9yJDYueiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRyYW5zZm9ybURpcmVjdGlvbiggbSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRfdmVjdG9yJDYueCA9IHRoaXMuZ2V0WCggaSApO1xuXHRcdFx0X3ZlY3RvciQ2LnkgPSB0aGlzLmdldFkoIGkgKTtcblx0XHRcdF92ZWN0b3IkNi56ID0gdGhpcy5nZXRaKCBpICk7XG5cblx0XHRcdF92ZWN0b3IkNi50cmFuc2Zvcm1EaXJlY3Rpb24oIG0gKTtcblxuXHRcdFx0dGhpcy5zZXRYWVooIGksIF92ZWN0b3IkNi54LCBfdmVjdG9yJDYueSwgX3ZlY3RvciQ2LnogKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYKCBpbmRleCwgeCApIHtcblxuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgXSA9IHg7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WSggaW5kZXgsIHkgKSB7XG5cblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMSBdID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRaKCBpbmRleCwgeiApIHtcblxuXHRcdHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAyIF0gPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFcoIGluZGV4LCB3ICkge1xuXG5cdFx0dGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDMgXSA9IHc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0WCggaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCBdO1xuXG5cdH1cblxuXHRnZXRZKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMSBdO1xuXG5cdH1cblxuXHRnZXRaKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMiBdO1xuXG5cdH1cblxuXHRnZXRXKCBpbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMyBdO1xuXG5cdH1cblxuXHRzZXRYWSggaW5kZXgsIHgsIHkgKSB7XG5cblx0XHRpbmRleCA9IGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0O1xuXG5cdFx0dGhpcy5kYXRhLmFycmF5WyBpbmRleCArIDAgXSA9IHg7XG5cdFx0dGhpcy5kYXRhLmFycmF5WyBpbmRleCArIDEgXSA9IHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0WFlaKCBpbmRleCwgeCwgeSwgeiApIHtcblxuXHRcdGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMCBdID0geDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMiBdID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRYWVpXKCBpbmRleCwgeCwgeSwgeiwgdyApIHtcblxuXHRcdGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMCBdID0geDtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMSBdID0geTtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMiBdID0gejtcblx0XHR0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMyBdID0gdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSggZGF0YSApIHtcblxuXHRcdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLmxvZyggJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLicgKTtcblxuXHRcdFx0Y29uc3QgYXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbmRleCA9IGkgKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7XG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgdGhpcy5pdGVtU2l6ZTsgaiArKyApIHtcblxuXHRcdFx0XHRcdGFycmF5LnB1c2goIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyBqIF0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKCBhcnJheSApLCB0aGlzLml0ZW1TaXplLCB0aGlzLm5vcm1hbGl6ZWQgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRkYXRhLmludGVybGVhdmVkQnVmZmVycyA9IHt9O1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggZGF0YS5pbnRlcmxlYXZlZEJ1ZmZlcnNbIHRoaXMuZGF0YS51dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRkYXRhLmludGVybGVhdmVkQnVmZmVyc1sgdGhpcy5kYXRhLnV1aWQgXSA9IHRoaXMuZGF0YS5jbG9uZSggZGF0YSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoIGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzWyB0aGlzLmRhdGEudXVpZCBdLCB0aGlzLml0ZW1TaXplLCB0aGlzLm9mZnNldCwgdGhpcy5ub3JtYWxpemVkICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTiggZGF0YSApIHtcblxuXHRcdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLmxvZyggJ1RIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuJyApO1xuXG5cdFx0XHRjb25zdCBhcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gaSAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCB0aGlzLml0ZW1TaXplOyBqICsrICkge1xuXG5cdFx0XHRcdFx0YXJyYXkucHVzaCggdGhpcy5kYXRhLmFycmF5WyBpbmRleCArIGogXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWludGVybGVhdmUgZGF0YSBhbmQgc2F2ZSBpdCBhcyBhbiBvcmRpbmFyeSBidWZmZXIgYXR0cmlidXRlIGZvciBub3dcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXRlbVNpemU6IHRoaXMuaXRlbVNpemUsXG5cdFx0XHRcdHR5cGU6IHRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdFx0YXJyYXk6IGFycmF5LFxuXHRcdFx0XHRub3JtYWxpemVkOiB0aGlzLm5vcm1hbGl6ZWRcblx0XHRcdH07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBzYXZlIGFzIHRydWUgaW50ZXJsYXZlZCBhdHRyaWJ0dWVcblxuXHRcdFx0aWYgKCBkYXRhLmludGVybGVhdmVkQnVmZmVycyA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzID0ge307XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBkYXRhLmludGVybGVhdmVkQnVmZmVyc1sgdGhpcy5kYXRhLnV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGRhdGEuaW50ZXJsZWF2ZWRCdWZmZXJzWyB0aGlzLmRhdGEudXVpZCBdID0gdGhpcy5kYXRhLnRvSlNPTiggZGF0YSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6IHRydWUsXG5cdFx0XHRcdGl0ZW1TaXplOiB0aGlzLml0ZW1TaXplLFxuXHRcdFx0XHRkYXRhOiB0aGlzLmRhdGEudXVpZCxcblx0XHRcdFx0b2Zmc2V0OiB0aGlzLm9mZnNldCxcblx0XHRcdFx0bm9ybWFsaXplZDogdGhpcy5ub3JtYWxpemVkXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIHJvdGF0aW9uOiA8ZmxvYXQ+LFxuICogIHNpemVBdHRlbnVhdGlvbjogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgU3ByaXRlTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1Nwcml0ZU1hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMucm90YXRpb24gPSAwO1xuXG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSB0cnVlO1xuXG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IHRydWU7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5yb3RhdGlvbiA9IHNvdXJjZS5yb3RhdGlvbjtcblxuXHRcdHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gc291cmNlLnNpemVBdHRlbnVhdGlvbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5TcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbCA9IHRydWU7XG5cbmxldCBfZ2VvbWV0cnk7XG5cbmNvbnN0IF9pbnRlcnNlY3RQb2ludCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF93b3JsZFNjYWxlID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX212UG9zaXRpb24gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IF9hbGlnbmVkUG9zaXRpb24gPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5jb25zdCBfcm90YXRlZFBvc2l0aW9uID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMigpO1xuY29uc3QgX3ZpZXdXb3JsZE1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgX3ZBID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZCID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3ZDID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfdXZBID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMigpO1xuY29uc3QgX3V2QiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjIoKTtcbmNvbnN0IF91dkMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IyKCk7XG5cbmNsYXNzIFNwcml0ZSBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggbWF0ZXJpYWwgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1Nwcml0ZSc7XG5cblx0XHRpZiAoIF9nZW9tZXRyeSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblxuXHRcdFx0Y29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSggW1xuXHRcdFx0XHQtIDAuNSwgLSAwLjUsIDAsIDAsIDAsXG5cdFx0XHRcdDAuNSwgLSAwLjUsIDAsIDEsIDAsXG5cdFx0XHRcdDAuNSwgMC41LCAwLCAxLCAxLFxuXHRcdFx0XHQtIDAuNSwgMC41LCAwLCAwLCAxXG5cdFx0XHRdICk7XG5cblx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyID0gbmV3IEludGVybGVhdmVkQnVmZmVyKCBmbG9hdDMyQXJyYXksIDUgKTtcblxuXHRcdFx0X2dlb21ldHJ5LnNldEluZGV4KCBbIDAsIDEsIDIsXHQwLCAyLCAzIF0gKTtcblx0XHRcdF9nZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSggaW50ZXJsZWF2ZWRCdWZmZXIsIDMsIDAsIGZhbHNlICkgKTtcblx0XHRcdF9nZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSggaW50ZXJsZWF2ZWRCdWZmZXIsIDIsIDMsIGZhbHNlICkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBfZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9ICggbWF0ZXJpYWwgIT09IHVuZGVmaW5lZCApID8gbWF0ZXJpYWwgOiBuZXcgU3ByaXRlTWF0ZXJpYWwoKTtcblxuXHRcdHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoIDAuNSwgMC41ICk7XG5cblx0fVxuXG5cdHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHtcblxuXHRcdGlmICggcmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNwcml0ZTogXCJSYXljYXN0ZXIuY2FtZXJhXCIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicgKTtcblxuXHRcdH1cblxuXHRcdF93b3JsZFNjYWxlLnNldEZyb21NYXRyaXhTY2FsZSggdGhpcy5tYXRyaXhXb3JsZCApO1xuXG5cdFx0X3ZpZXdXb3JsZE1hdHJpeC5jb3B5KCByYXljYXN0ZXIuY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cdFx0dGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggcmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIHRoaXMubWF0cml4V29ybGQgKTtcblxuXHRcdF9tdlBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5tb2RlbFZpZXdNYXRyaXggKTtcblxuXHRcdGlmICggcmF5Y2FzdGVyLmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhICYmIHRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uID09PSBmYWxzZSApIHtcblxuXHRcdFx0X3dvcmxkU2NhbGUubXVsdGlwbHlTY2FsYXIoIC0gX212UG9zaXRpb24ueiApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm90YXRpb24gPSB0aGlzLm1hdGVyaWFsLnJvdGF0aW9uO1xuXHRcdGxldCBzaW4sIGNvcztcblxuXHRcdGlmICggcm90YXRpb24gIT09IDAgKSB7XG5cblx0XHRcdGNvcyA9IE1hdGguY29zKCByb3RhdGlvbiApO1xuXHRcdFx0c2luID0gTWF0aC5zaW4oIHJvdGF0aW9uICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcblxuXHRcdHRyYW5zZm9ybVZlcnRleCggX3ZBLnNldCggLSAwLjUsIC0gMC41LCAwICksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyApO1xuXHRcdHRyYW5zZm9ybVZlcnRleCggX3ZCLnNldCggMC41LCAtIDAuNSwgMCApLCBfbXZQb3NpdGlvbiwgY2VudGVyLCBfd29ybGRTY2FsZSwgc2luLCBjb3MgKTtcblx0XHR0cmFuc2Zvcm1WZXJ0ZXgoIF92Qy5zZXQoIDAuNSwgMC41LCAwICksIF9tdlBvc2l0aW9uLCBjZW50ZXIsIF93b3JsZFNjYWxlLCBzaW4sIGNvcyApO1xuXG5cdFx0X3V2QS5zZXQoIDAsIDAgKTtcblx0XHRfdXZCLnNldCggMSwgMCApO1xuXHRcdF91dkMuc2V0KCAxLCAxICk7XG5cblx0XHQvLyBjaGVjayBmaXJzdCB0cmlhbmdsZVxuXHRcdGxldCBpbnRlcnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVyc2VjdFRyaWFuZ2xlKCBfdkEsIF92QiwgX3ZDLCBmYWxzZSwgX2ludGVyc2VjdFBvaW50ICk7XG5cblx0XHRpZiAoIGludGVyc2VjdCA9PT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gY2hlY2sgc2Vjb25kIHRyaWFuZ2xlXG5cdFx0XHR0cmFuc2Zvcm1WZXJ0ZXgoIF92Qi5zZXQoIC0gMC41LCAwLjUsIDAgKSwgX212UG9zaXRpb24sIGNlbnRlciwgX3dvcmxkU2NhbGUsIHNpbiwgY29zICk7XG5cdFx0XHRfdXZCLnNldCggMCwgMSApO1xuXG5cdFx0XHRpbnRlcnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVyc2VjdFRyaWFuZ2xlKCBfdkEsIF92QywgX3ZCLCBmYWxzZSwgX2ludGVyc2VjdFBvaW50ICk7XG5cdFx0XHRpZiAoIGludGVyc2VjdCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggX2ludGVyc2VjdFBvaW50ICk7XG5cblx0XHRpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgcmV0dXJuO1xuXG5cdFx0aW50ZXJzZWN0cy5wdXNoKCB7XG5cblx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdHBvaW50OiBfaW50ZXJzZWN0UG9pbnQuY2xvbmUoKSxcblx0XHRcdHV2OiBUcmlhbmdsZS5nZXRVViggX2ludGVyc2VjdFBvaW50LCBfdkEsIF92QiwgX3ZDLCBfdXZBLCBfdXZCLCBfdXZDLCBuZXcgVmVjdG9yMigpICksXG5cdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0b2JqZWN0OiB0aGlzXG5cblx0XHR9ICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0aWYgKCBzb3VyY2UuY2VudGVyICE9PSB1bmRlZmluZWQgKSB0aGlzLmNlbnRlci5jb3B5KCBzb3VyY2UuY2VudGVyICk7XG5cblx0XHR0aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVyaWFsO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNwcml0ZS5wcm90b3R5cGUuaXNTcHJpdGUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1WZXJ0ZXgoIHZlcnRleFBvc2l0aW9uLCBtdlBvc2l0aW9uLCBjZW50ZXIsIHNjYWxlLCBzaW4sIGNvcyApIHtcblxuXHQvLyBjb21wdXRlIHBvc2l0aW9uIGluIGNhbWVyYSBzcGFjZVxuXHRfYWxpZ25lZFBvc2l0aW9uLnN1YlZlY3RvcnMoIHZlcnRleFBvc2l0aW9uLCBjZW50ZXIgKS5hZGRTY2FsYXIoIDAuNSApLm11bHRpcGx5KCBzY2FsZSApO1xuXG5cdC8vIHRvIGNoZWNrIGlmIHJvdGF0aW9uIGlzIG5vdCB6ZXJvXG5cdGlmICggc2luICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRfcm90YXRlZFBvc2l0aW9uLnggPSAoIGNvcyAqIF9hbGlnbmVkUG9zaXRpb24ueCApIC0gKCBzaW4gKiBfYWxpZ25lZFBvc2l0aW9uLnkgKTtcblx0XHRfcm90YXRlZFBvc2l0aW9uLnkgPSAoIHNpbiAqIF9hbGlnbmVkUG9zaXRpb24ueCApICsgKCBjb3MgKiBfYWxpZ25lZFBvc2l0aW9uLnkgKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0X3JvdGF0ZWRQb3NpdGlvbi5jb3B5KCBfYWxpZ25lZFBvc2l0aW9uICk7XG5cblx0fVxuXG5cblx0dmVydGV4UG9zaXRpb24uY29weSggbXZQb3NpdGlvbiApO1xuXHR2ZXJ0ZXhQb3NpdGlvbi54ICs9IF9yb3RhdGVkUG9zaXRpb24ueDtcblx0dmVydGV4UG9zaXRpb24ueSArPSBfcm90YXRlZFBvc2l0aW9uLnk7XG5cblx0Ly8gdHJhbnNmb3JtIHRvIHdvcmxkIHNwYWNlXG5cdHZlcnRleFBvc2l0aW9uLmFwcGx5TWF0cml4NCggX3ZpZXdXb3JsZE1hdHJpeCApO1xuXG59XG5cbmNvbnN0IF92MSQyID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3YyJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIExPRCBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9jdXJyZW50TGV2ZWwgPSAwO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xPRCc7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyggdGhpcywge1xuXHRcdFx0bGV2ZWxzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBbXVxuXHRcdFx0fSxcblx0XHRcdGlzTE9EOiB7XG5cdFx0XHRcdHZhbHVlOiB0cnVlLFxuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSwgZmFsc2UgKTtcblxuXHRcdGNvbnN0IGxldmVscyA9IHNvdXJjZS5sZXZlbHM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgbGV2ZWwgPSBsZXZlbHNbIGkgXTtcblxuXHRcdFx0dGhpcy5hZGRMZXZlbCggbGV2ZWwub2JqZWN0LmNsb25lKCksIGxldmVsLmRpc3RhbmNlICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmF1dG9VcGRhdGUgPSBzb3VyY2UuYXV0b1VwZGF0ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRMZXZlbCggb2JqZWN0LCBkaXN0YW5jZSA9IDAgKSB7XG5cblx0XHRkaXN0YW5jZSA9IE1hdGguYWJzKCBkaXN0YW5jZSApO1xuXG5cdFx0Y29uc3QgbGV2ZWxzID0gdGhpcy5sZXZlbHM7XG5cblx0XHRsZXQgbDtcblxuXHRcdGZvciAoIGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCArKyApIHtcblxuXHRcdFx0aWYgKCBkaXN0YW5jZSA8IGxldmVsc1sgbCBdLmRpc3RhbmNlICkge1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRsZXZlbHMuc3BsaWNlKCBsLCAwLCB7IGRpc3RhbmNlOiBkaXN0YW5jZSwgb2JqZWN0OiBvYmplY3QgfSApO1xuXG5cdFx0dGhpcy5hZGQoIG9iamVjdCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldEN1cnJlbnRMZXZlbCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9jdXJyZW50TGV2ZWw7XG5cblx0fVxuXG5cdGdldE9iamVjdEZvckRpc3RhbmNlKCBkaXN0YW5jZSApIHtcblxuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKCBsZXZlbHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0bGV0IGksIGw7XG5cblx0XHRcdGZvciAoIGkgPSAxLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBkaXN0YW5jZSA8IGxldmVsc1sgaSBdLmRpc3RhbmNlICkge1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsZXZlbHNbIGkgLSAxIF0ub2JqZWN0O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHtcblxuXHRcdGNvbnN0IGxldmVscyA9IHRoaXMubGV2ZWxzO1xuXG5cdFx0aWYgKCBsZXZlbHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0X3YxJDIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggX3YxJDIgKTtcblxuXHRcdFx0dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZSggZGlzdGFuY2UgKS5yYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0dXBkYXRlKCBjYW1lcmEgKSB7XG5cblx0XHRjb25zdCBsZXZlbHMgPSB0aGlzLmxldmVscztcblxuXHRcdGlmICggbGV2ZWxzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdF92MSQyLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cdFx0XHRfdjIkMS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubWF0cml4V29ybGQgKTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBfdjEkMi5kaXN0YW5jZVRvKCBfdjIkMSApIC8gY2FtZXJhLnpvb207XG5cblx0XHRcdGxldmVsc1sgMCBdLm9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblxuXHRcdFx0bGV0IGksIGw7XG5cblx0XHRcdGZvciAoIGkgPSAxLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBkaXN0YW5jZSA+PSBsZXZlbHNbIGkgXS5kaXN0YW5jZSApIHtcblxuXHRcdFx0XHRcdGxldmVsc1sgaSAtIDEgXS5vYmplY3QudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGxldmVsc1sgaSBdLm9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2N1cnJlbnRMZXZlbCA9IGkgLSAxO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGxldmVsc1sgaSBdLm9iamVjdC52aXNpYmxlID0gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0aWYgKCB0aGlzLmF1dG9VcGRhdGUgPT09IGZhbHNlICkgZGF0YS5vYmplY3QuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0ZGF0YS5vYmplY3QubGV2ZWxzID0gW107XG5cblx0XHRjb25zdCBsZXZlbHMgPSB0aGlzLmxldmVscztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGxldmVscy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBsZXZlbCA9IGxldmVsc1sgaSBdO1xuXG5cdFx0XHRkYXRhLm9iamVjdC5sZXZlbHMucHVzaCgge1xuXHRcdFx0XHRvYmplY3Q6IGxldmVsLm9iamVjdC51dWlkLFxuXHRcdFx0XHRkaXN0YW5jZTogbGV2ZWwuZGlzdGFuY2Vcblx0XHRcdH0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5jb25zdCBfYmFzZVBvc2l0aW9uID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBfc2tpbkluZGV4ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yNCgpO1xuY29uc3QgX3NraW5XZWlnaHQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3I0KCk7XG5cbmNvbnN0IF92ZWN0b3IkNSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9tYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5cbmNsYXNzIFNraW5uZWRNZXNoIGV4dGVuZHMgTWVzaCB7XG5cblx0Y29uc3RydWN0b3IoIGdlb21ldHJ5LCBtYXRlcmlhbCApIHtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTa2lubmVkTWVzaCc7XG5cblx0XHR0aGlzLmJpbmRNb2RlID0gJ2F0dGFjaGVkJztcblx0XHR0aGlzLmJpbmRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMuYmluZE1hdHJpeEludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuYmluZE1vZGUgPSBzb3VyY2UuYmluZE1vZGU7XG5cdFx0dGhpcy5iaW5kTWF0cml4LmNvcHkoIHNvdXJjZS5iaW5kTWF0cml4ICk7XG5cdFx0dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KCBzb3VyY2UuYmluZE1hdHJpeEludmVyc2UgKTtcblxuXHRcdHRoaXMuc2tlbGV0b24gPSBzb3VyY2Uuc2tlbGV0b247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YmluZCggc2tlbGV0b24sIGJpbmRNYXRyaXggKSB7XG5cblx0XHR0aGlzLnNrZWxldG9uID0gc2tlbGV0b247XG5cblx0XHRpZiAoIGJpbmRNYXRyaXggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApO1xuXG5cdFx0XHR0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCk7XG5cblx0XHRcdGJpbmRNYXRyaXggPSB0aGlzLm1hdHJpeFdvcmxkO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5iaW5kTWF0cml4LmNvcHkoIGJpbmRNYXRyaXggKTtcblx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoIGJpbmRNYXRyaXggKS5pbnZlcnQoKTtcblxuXHR9XG5cblx0cG9zZSgpIHtcblxuXHRcdHRoaXMuc2tlbGV0b24ucG9zZSgpO1xuXG5cdH1cblxuXHRub3JtYWxpemVTa2luV2VpZ2h0cygpIHtcblxuXHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3I0KCk7XG5cblx0XHRjb25zdCBza2luV2VpZ2h0ID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBza2luV2VpZ2h0LmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0dmVjdG9yLnggPSBza2luV2VpZ2h0LmdldFgoIGkgKTtcblx0XHRcdHZlY3Rvci55ID0gc2tpbldlaWdodC5nZXRZKCBpICk7XG5cdFx0XHR2ZWN0b3IueiA9IHNraW5XZWlnaHQuZ2V0WiggaSApO1xuXHRcdFx0dmVjdG9yLncgPSBza2luV2VpZ2h0LmdldFcoIGkgKTtcblxuXHRcdFx0Y29uc3Qgc2NhbGUgPSAxLjAgLyB2ZWN0b3IubWFuaGF0dGFuTGVuZ3RoKCk7XG5cblx0XHRcdGlmICggc2NhbGUgIT09IEluZmluaXR5ICkge1xuXG5cdFx0XHRcdHZlY3Rvci5tdWx0aXBseVNjYWxhciggc2NhbGUgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR2ZWN0b3Iuc2V0KCAxLCAwLCAwLCAwICk7IC8vIGRvIHNvbWV0aGluZyByZWFzb25hYmxlXG5cblx0XHRcdH1cblxuXHRcdFx0c2tpbldlaWdodC5zZXRYWVpXKCBpLCB2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56LCB2ZWN0b3IudyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR1cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKSB7XG5cblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKTtcblxuXHRcdGlmICggdGhpcy5iaW5kTW9kZSA9PT0gJ2F0dGFjaGVkJyApIHtcblxuXHRcdFx0dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KCB0aGlzLm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0XHR9IGVsc2UgaWYgKCB0aGlzLmJpbmRNb2RlID09PSAnZGV0YWNoZWQnICkge1xuXG5cdFx0XHR0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoIHRoaXMuYmluZE1hdHJpeCApLmludmVydCgpO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogJyArIHRoaXMuYmluZE1vZGUgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ym9uZVRyYW5zZm9ybSggaW5kZXgsIHRhcmdldCApIHtcblxuXHRcdGNvbnN0IHNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRfc2tpbkluZGV4LmZyb21CdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbkluZGV4LCBpbmRleCApO1xuXHRcdF9za2luV2VpZ2h0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodCwgaW5kZXggKTtcblxuXHRcdF9iYXNlUG9zaXRpb24uY29weSggdGFyZ2V0ICkuYXBwbHlNYXRyaXg0KCB0aGlzLmJpbmRNYXRyaXggKTtcblxuXHRcdHRhcmdldC5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDQ7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHdlaWdodCA9IF9za2luV2VpZ2h0LmdldENvbXBvbmVudCggaSApO1xuXG5cdFx0XHRpZiAoIHdlaWdodCAhPT0gMCApIHtcblxuXHRcdFx0XHRjb25zdCBib25lSW5kZXggPSBfc2tpbkluZGV4LmdldENvbXBvbmVudCggaSApO1xuXG5cdFx0XHRcdF9tYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggc2tlbGV0b24uYm9uZXNbIGJvbmVJbmRleCBdLm1hdHJpeFdvcmxkLCBza2VsZXRvbi5ib25lSW52ZXJzZXNbIGJvbmVJbmRleCBdICk7XG5cblx0XHRcdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggX3ZlY3RvciQ1LmNvcHkoIF9iYXNlUG9zaXRpb24gKS5hcHBseU1hdHJpeDQoIF9tYXRyaXggKSwgd2VpZ2h0ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQuYXBwbHlNYXRyaXg0KCB0aGlzLmJpbmRNYXRyaXhJbnZlcnNlICk7XG5cblx0fVxuXG59XG5cblNraW5uZWRNZXNoLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoID0gdHJ1ZTtcblxuY2xhc3MgQm9uZSBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQm9uZSc7XG5cblx0fVxuXG59XG5cbkJvbmUucHJvdG90eXBlLmlzQm9uZSA9IHRydWU7XG5cbmNsYXNzIERhdGFUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cblx0Y29uc3RydWN0b3IoIGRhdGEgPSBudWxsLCB3aWR0aCA9IDEsIGhlaWdodCA9IDEsIGZvcm1hdCwgdHlwZSwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyLCBtaW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHtcblxuXHRcdHN1cGVyKCBudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICk7XG5cblx0XHR0aGlzLmltYWdlID0geyBkYXRhOiBkYXRhLCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07XG5cblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjtcblx0XHR0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlcjtcblxuXHRcdHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XG5cdFx0dGhpcy5mbGlwWSA9IGZhbHNlO1xuXHRcdHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMTtcblxuXHR9XG5cbn1cblxuRGF0YVRleHR1cmUucHJvdG90eXBlLmlzRGF0YVRleHR1cmUgPSB0cnVlO1xuXG5jb25zdCBfb2Zmc2V0TWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX2lkZW50aXR5TWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuXG5jbGFzcyBTa2VsZXRvbiB7XG5cblx0Y29uc3RydWN0b3IoIGJvbmVzID0gW10sIGJvbmVJbnZlcnNlcyA9IFtdICkge1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHR0aGlzLmJvbmVzID0gYm9uZXMuc2xpY2UoIDAgKTtcblx0XHR0aGlzLmJvbmVJbnZlcnNlcyA9IGJvbmVJbnZlcnNlcztcblx0XHR0aGlzLmJvbmVNYXRyaWNlcyA9IG51bGw7XG5cblx0XHR0aGlzLmJvbmVUZXh0dXJlID0gbnVsbDtcblx0XHR0aGlzLmJvbmVUZXh0dXJlU2l6ZSA9IDA7XG5cblx0XHR0aGlzLmZyYW1lID0gLSAxO1xuXG5cdFx0dGhpcy5pbml0KCk7XG5cblx0fVxuXG5cdGluaXQoKSB7XG5cblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUludmVyc2VzID0gdGhpcy5ib25lSW52ZXJzZXM7XG5cblx0XHR0aGlzLmJvbmVNYXRyaWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoIGJvbmVzLmxlbmd0aCAqIDE2ICk7XG5cblx0XHQvLyBjYWxjdWxhdGUgaW52ZXJzZSBib25lIG1hdHJpY2VzIGlmIG5lY2Vzc2FyeVxuXG5cdFx0aWYgKCBib25lSW52ZXJzZXMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHR0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBoYW5kbGUgc3BlY2lhbCBjYXNlXG5cblx0XHRcdGlmICggYm9uZXMubGVuZ3RoICE9PSBib25lSW52ZXJzZXMubGVuZ3RoICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlNrZWxldG9uOiBOdW1iZXIgb2YgaW52ZXJzZSBib25lIG1hdHJpY2VzIGRvZXMgbm90IG1hdGNoIGFtb3VudCBvZiBib25lcy4nICk7XG5cblx0XHRcdFx0dGhpcy5ib25lSW52ZXJzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdHRoaXMuYm9uZUludmVyc2VzLnB1c2goIG5ldyBNYXRyaXg0KCkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Y2FsY3VsYXRlSW52ZXJzZXMoKSB7XG5cblx0XHR0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGggPSAwO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGludmVyc2UgPSBuZXcgTWF0cml4NCgpO1xuXG5cdFx0XHRpZiAoIHRoaXMuYm9uZXNbIGkgXSApIHtcblxuXHRcdFx0XHRpbnZlcnNlLmNvcHkoIHRoaXMuYm9uZXNbIGkgXS5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYm9uZUludmVyc2VzLnB1c2goIGludmVyc2UgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0cG9zZSgpIHtcblxuXHRcdC8vIHJlY292ZXIgdGhlIGJpbmQtdGltZSB3b3JsZCBtYXRyaWNlc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmVzWyBpIF07XG5cblx0XHRcdGlmICggYm9uZSApIHtcblxuXHRcdFx0XHRib25lLm1hdHJpeFdvcmxkLmNvcHkoIHRoaXMuYm9uZUludmVyc2VzWyBpIF0gKS5pbnZlcnQoKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gY29tcHV0ZSB0aGUgbG9jYWwgbWF0cmljZXMsIHBvc2l0aW9ucywgcm90YXRpb25zIGFuZCBzY2FsZXNcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBib25lID0gdGhpcy5ib25lc1sgaSBdO1xuXG5cdFx0XHRpZiAoIGJvbmUgKSB7XG5cblx0XHRcdFx0aWYgKCBib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUgKSB7XG5cblx0XHRcdFx0XHRib25lLm1hdHJpeC5jb3B5KCBib25lLnBhcmVudC5tYXRyaXhXb3JsZCApLmludmVydCgpO1xuXHRcdFx0XHRcdGJvbmUubWF0cml4Lm11bHRpcGx5KCBib25lLm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGJvbmUubWF0cml4LmNvcHkoIGJvbmUubWF0cml4V29ybGQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ym9uZS5tYXRyaXguZGVjb21wb3NlKCBib25lLnBvc2l0aW9uLCBib25lLnF1YXRlcm5pb24sIGJvbmUuc2NhbGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUludmVyc2VzID0gdGhpcy5ib25lSW52ZXJzZXM7XG5cdFx0Y29uc3QgYm9uZU1hdHJpY2VzID0gdGhpcy5ib25lTWF0cmljZXM7XG5cdFx0Y29uc3QgYm9uZVRleHR1cmUgPSB0aGlzLmJvbmVUZXh0dXJlO1xuXG5cdFx0Ly8gZmxhdHRlbiBib25lIG1hdHJpY2VzIHRvIGFycmF5XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdC8vIGNvbXB1dGUgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgb3JpZ2luYWwgdHJhbnNmb3JtXG5cblx0XHRcdGNvbnN0IG1hdHJpeCA9IGJvbmVzWyBpIF0gPyBib25lc1sgaSBdLm1hdHJpeFdvcmxkIDogX2lkZW50aXR5TWF0cml4O1xuXG5cdFx0XHRfb2Zmc2V0TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIG1hdHJpeCwgYm9uZUludmVyc2VzWyBpIF0gKTtcblx0XHRcdF9vZmZzZXRNYXRyaXgudG9BcnJheSggYm9uZU1hdHJpY2VzLCBpICogMTYgKTtcblxuXHRcdH1cblxuXHRcdGlmICggYm9uZVRleHR1cmUgIT09IG51bGwgKSB7XG5cblx0XHRcdGJvbmVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IFNrZWxldG9uKCB0aGlzLmJvbmVzLCB0aGlzLmJvbmVJbnZlcnNlcyApO1xuXG5cdH1cblxuXHRjb21wdXRlQm9uZVRleHR1cmUoKSB7XG5cblx0XHQvLyBsYXlvdXQgKDEgbWF0cml4ID0gNCBwaXhlbHMpXG5cdFx0Ly8gICAgICBSR0JBIFJHQkEgUkdCQSBSR0JBICg9PiBjb2x1bW4xLCBjb2x1bW4yLCBjb2x1bW4zLCBjb2x1bW40KVxuXHRcdC8vICB3aXRoICA4eDggIHBpeGVsIHRleHR1cmUgbWF4ICAgMTYgYm9uZXMgKiA0IHBpeGVscyA9ICAoOCAqIDgpXG5cdFx0Ly8gICAgICAgMTZ4MTYgcGl4ZWwgdGV4dHVyZSBtYXggICA2NCBib25lcyAqIDQgcGl4ZWxzID0gKDE2ICogMTYpXG5cdFx0Ly8gICAgICAgMzJ4MzIgcGl4ZWwgdGV4dHVyZSBtYXggIDI1NiBib25lcyAqIDQgcGl4ZWxzID0gKDMyICogMzIpXG5cdFx0Ly8gICAgICAgNjR4NjQgcGl4ZWwgdGV4dHVyZSBtYXggMTAyNCBib25lcyAqIDQgcGl4ZWxzID0gKDY0ICogNjQpXG5cblx0XHRsZXQgc2l6ZSA9IE1hdGguc3FydCggdGhpcy5ib25lcy5sZW5ndGggKiA0ICk7IC8vIDQgcGl4ZWxzIG5lZWRlZCBmb3IgMSBtYXRyaXhcblx0XHRzaXplID0gY2VpbFBvd2VyT2ZUd28oIHNpemUgKTtcblx0XHRzaXplID0gTWF0aC5tYXgoIHNpemUsIDQgKTtcblxuXHRcdGNvbnN0IGJvbmVNYXRyaWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoIHNpemUgKiBzaXplICogNCApOyAvLyA0IGZsb2F0cyBwZXIgUkdCQSBwaXhlbFxuXHRcdGJvbmVNYXRyaWNlcy5zZXQoIHRoaXMuYm9uZU1hdHJpY2VzICk7IC8vIGNvcHkgY3VycmVudCB2YWx1ZXNcblxuXHRcdGNvbnN0IGJvbmVUZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKCBib25lTWF0cmljZXMsIHNpemUsIHNpemUsIFJHQkFGb3JtYXQsIEZsb2F0VHlwZSApO1xuXHRcdGJvbmVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdHRoaXMuYm9uZU1hdHJpY2VzID0gYm9uZU1hdHJpY2VzO1xuXHRcdHRoaXMuYm9uZVRleHR1cmUgPSBib25lVGV4dHVyZTtcblx0XHR0aGlzLmJvbmVUZXh0dXJlU2l6ZSA9IHNpemU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Qm9uZUJ5TmFtZSggbmFtZSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBib25lID0gdGhpcy5ib25lc1sgaSBdO1xuXG5cdFx0XHRpZiAoIGJvbmUubmFtZSA9PT0gbmFtZSApIHtcblxuXHRcdFx0XHRyZXR1cm4gYm9uZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHR9XG5cblx0ZGlzcG9zZSggKSB7XG5cblx0XHRpZiAoIHRoaXMuYm9uZVRleHR1cmUgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuYm9uZVRleHR1cmUuZGlzcG9zZSgpO1xuXG5cdFx0XHR0aGlzLmJvbmVUZXh0dXJlID0gbnVsbDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24sIGJvbmVzICkge1xuXG5cdFx0dGhpcy51dWlkID0ganNvbi51dWlkO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5ib25lcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCB1dWlkID0ganNvbi5ib25lc1sgaSBdO1xuXHRcdFx0bGV0IGJvbmUgPSBib25lc1sgdXVpZCBdO1xuXG5cdFx0XHRpZiAoIGJvbmUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6JywgdXVpZCApO1xuXHRcdFx0XHRib25lID0gbmV3IEJvbmUoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJvbmVzLnB1c2goIGJvbmUgKTtcblx0XHRcdHRoaXMuYm9uZUludmVyc2VzLnB1c2goIG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KCBqc29uLmJvbmVJbnZlcnNlc1sgaSBdICkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuaW5pdCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdTa2VsZXRvbicsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ1NrZWxldG9uLnRvSlNPTidcblx0XHRcdH0sXG5cdFx0XHRib25lczogW10sXG5cdFx0XHRib25lSW52ZXJzZXM6IFtdXG5cdFx0fTtcblxuXHRcdGRhdGEudXVpZCA9IHRoaXMudXVpZDtcblxuXHRcdGNvbnN0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRjb25zdCBib25lSW52ZXJzZXMgPSB0aGlzLmJvbmVJbnZlcnNlcztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGJvbmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1sgaSBdO1xuXHRcdFx0ZGF0YS5ib25lcy5wdXNoKCBib25lLnV1aWQgKTtcblxuXHRcdFx0Y29uc3QgYm9uZUludmVyc2UgPSBib25lSW52ZXJzZXNbIGkgXTtcblx0XHRcdGRhdGEuYm9uZUludmVyc2VzLnB1c2goIGJvbmVJbnZlcnNlLnRvQXJyYXkoKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbmNsYXNzIEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSBleHRlbmRzIEJ1ZmZlckF0dHJpYnV0ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCwgbWVzaFBlckF0dHJpYnV0ZSA9IDEgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBub3JtYWxpemVkID09PSAnbnVtYmVyJyApIHtcblxuXHRcdFx0bWVzaFBlckF0dHJpYnV0ZSA9IG5vcm1hbGl6ZWQ7XG5cblx0XHRcdG5vcm1hbGl6ZWQgPSBmYWxzZTtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LicgKTtcblxuXHRcdH1cblxuXHRcdHN1cGVyKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTtcblxuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gc291cmNlLm1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5tZXNoUGVyQXR0cmlidXRlID0gdGhpcy5tZXNoUGVyQXR0cmlidXRlO1xuXG5cdFx0ZGF0YS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbmNvbnN0IF9pbnN0YW5jZUxvY2FsTWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX2luc3RhbmNlV29ybGRNYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IF9pbnN0YW5jZUludGVyc2VjdHMgPSBbXTtcblxuY29uc3QgX21lc2ggPSAvKkBfX1BVUkVfXyovIG5ldyBNZXNoKCk7XG5cbmNsYXNzIEluc3RhbmNlZE1lc2ggZXh0ZW5kcyBNZXNoIHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnksIG1hdGVyaWFsLCBjb3VudCApIHtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMuaW5zdGFuY2VNYXRyaXggPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKCBuZXcgRmxvYXQzMkFycmF5KCBjb3VudCAqIDE2ICksIDE2ICk7XG5cdFx0dGhpcy5pbnN0YW5jZUNvbG9yID0gbnVsbDtcblxuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcblxuXHRcdHRoaXMuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSggc291cmNlLmluc3RhbmNlTWF0cml4ICk7XG5cblx0XHRpZiAoIHNvdXJjZS5pbnN0YW5jZUNvbG9yICE9PSBudWxsICkgdGhpcy5pbnN0YW5jZUNvbG9yID0gc291cmNlLmluc3RhbmNlQ29sb3IuY2xvbmUoKTtcblxuXHRcdHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Q29sb3JBdCggaW5kZXgsIGNvbG9yICkge1xuXG5cdFx0Y29sb3IuZnJvbUFycmF5KCB0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksIGluZGV4ICogMyApO1xuXG5cdH1cblxuXHRnZXRNYXRyaXhBdCggaW5kZXgsIG1hdHJpeCApIHtcblxuXHRcdG1hdHJpeC5mcm9tQXJyYXkoIHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksIGluZGV4ICogMTYgKTtcblxuXHR9XG5cblx0cmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkge1xuXG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGNvbnN0IHJheWNhc3RUaW1lcyA9IHRoaXMuY291bnQ7XG5cblx0XHRfbWVzaC5nZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0X21lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG5cdFx0aWYgKCBfbWVzaC5tYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXG5cdFx0Zm9yICggbGV0IGluc3RhbmNlSWQgPSAwOyBpbnN0YW5jZUlkIDwgcmF5Y2FzdFRpbWVzOyBpbnN0YW5jZUlkICsrICkge1xuXG5cdFx0XHQvLyBjYWxjdWxhdGUgdGhlIHdvcmxkIG1hdHJpeCBmb3IgZWFjaCBpbnN0YW5jZVxuXG5cdFx0XHR0aGlzLmdldE1hdHJpeEF0KCBpbnN0YW5jZUlkLCBfaW5zdGFuY2VMb2NhbE1hdHJpeCApO1xuXG5cdFx0XHRfaW5zdGFuY2VXb3JsZE1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBtYXRyaXhXb3JsZCwgX2luc3RhbmNlTG9jYWxNYXRyaXggKTtcblxuXHRcdFx0Ly8gdGhlIG1lc2ggcmVwcmVzZW50cyB0aGlzIHNpbmdsZSBpbnN0YW5jZVxuXG5cdFx0XHRfbWVzaC5tYXRyaXhXb3JsZCA9IF9pbnN0YW5jZVdvcmxkTWF0cml4O1xuXG5cdFx0XHRfbWVzaC5yYXljYXN0KCByYXljYXN0ZXIsIF9pbnN0YW5jZUludGVyc2VjdHMgKTtcblxuXHRcdFx0Ly8gcHJvY2VzcyB0aGUgcmVzdWx0IG9mIHJheWNhc3RcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gX2luc3RhbmNlSW50ZXJzZWN0cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGludGVyc2VjdCA9IF9pbnN0YW5jZUludGVyc2VjdHNbIGkgXTtcblx0XHRcdFx0aW50ZXJzZWN0Lmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuXHRcdFx0XHRpbnRlcnNlY3Qub2JqZWN0ID0gdGhpcztcblx0XHRcdFx0aW50ZXJzZWN0cy5wdXNoKCBpbnRlcnNlY3QgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfaW5zdGFuY2VJbnRlcnNlY3RzLmxlbmd0aCA9IDA7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldENvbG9yQXQoIGluZGV4LCBjb2xvciApIHtcblxuXHRcdGlmICggdGhpcy5pbnN0YW5jZUNvbG9yID09PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmluc3RhbmNlQ29sb3IgPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKCBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50ICogMyApLCAzICk7XG5cblx0XHR9XG5cblx0XHRjb2xvci50b0FycmF5KCB0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksIGluZGV4ICogMyApO1xuXG5cdH1cblxuXHRzZXRNYXRyaXhBdCggaW5kZXgsIG1hdHJpeCApIHtcblxuXHRcdG1hdHJpeC50b0FycmF5KCB0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LCBpbmRleCAqIDE2ICk7XG5cblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApO1xuXG5cdH1cblxufVxuXG5JbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2ggPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIGxpbmV3aWR0aDogPGZsb2F0PixcbiAqICBsaW5lY2FwOiBcInJvdW5kXCIsXG4gKiAgbGluZWpvaW46IFwicm91bmRcIlxuICogfVxuICovXG5cbmNsYXNzIExpbmVCYXNpY01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaW5lQmFzaWNNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApO1xuXG5cdFx0dGhpcy5saW5ld2lkdGggPSAxO1xuXHRcdHRoaXMubGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy5saW5lam9pbiA9ICdyb3VuZCc7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblxuXHRcdHRoaXMubGluZXdpZHRoID0gc291cmNlLmxpbmV3aWR0aDtcblx0XHR0aGlzLmxpbmVjYXAgPSBzb3VyY2UubGluZWNhcDtcblx0XHR0aGlzLmxpbmVqb2luID0gc291cmNlLmxpbmVqb2luO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkxpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsID0gdHJ1ZTtcblxuY29uc3QgX3N0YXJ0JDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfZW5kJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfaW52ZXJzZU1hdHJpeCQxID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX3JheSQxID0gLypAX19QVVJFX18qLyBuZXcgUmF5KCk7XG5jb25zdCBfc3BoZXJlJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBTcGhlcmUoKTtcblxuY2xhc3MgTGluZSBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKSwgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGluZSc7XG5cblx0XHR0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXG5cdFx0dGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVyaWFsO1xuXHRcdHRoaXMuZ2VvbWV0cnkgPSBzb3VyY2UuZ2VvbWV0cnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdC8vIHdlIGFzc3VtZSBub24taW5kZXhlZCBnZW9tZXRyeVxuXG5cdFx0XHRpZiAoIGdlb21ldHJ5LmluZGV4ID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdFx0Y29uc3QgbGluZURpc3RhbmNlcyA9IFsgMCBdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMSwgbCA9IHBvc2l0aW9uQXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdF9zdGFydCQxLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpIC0gMSApO1xuXHRcdFx0XHRcdF9lbmQkMS5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSApO1xuXG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1sgaSBdID0gbGluZURpc3RhbmNlc1sgaSAtIDEgXTtcblx0XHRcdFx0XHRsaW5lRGlzdGFuY2VzWyBpIF0gKz0gX3N0YXJ0JDEuZGlzdGFuY2VUbyggX2VuZCQxICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBsaW5lRGlzdGFuY2VzLCAxICkgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4nICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCB0aHJlc2hvbGQgPSByYXljYXN0ZXIucGFyYW1zLkxpbmUudGhyZXNob2xkO1xuXHRcdGNvbnN0IGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZTtcblxuXHRcdC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheVxuXG5cdFx0aWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0X3NwaGVyZSQxLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICk7XG5cdFx0X3NwaGVyZSQxLmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQgKTtcblx0XHRfc3BoZXJlJDEucmFkaXVzICs9IHRocmVzaG9sZDtcblxuXHRcdGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBfc3BoZXJlJDEgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHQvL1xuXG5cdFx0X2ludmVyc2VNYXRyaXgkMS5jb3B5KCBtYXRyaXhXb3JsZCApLmludmVydCgpO1xuXHRcdF9yYXkkMS5jb3B5KCByYXljYXN0ZXIucmF5ICkuYXBwbHlNYXRyaXg0KCBfaW52ZXJzZU1hdHJpeCQxICk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICggKCB0aGlzLnNjYWxlLnggKyB0aGlzLnNjYWxlLnkgKyB0aGlzLnNjYWxlLnogKSAvIDMgKTtcblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZFNxID0gbG9jYWxUaHJlc2hvbGQgKiBsb2NhbFRocmVzaG9sZDtcblxuXHRcdGNvbnN0IHZTdGFydCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgdkVuZCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgaW50ZXJTZWdtZW50ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBpbnRlclJheSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgc3RlcCA9IHRoaXMuaXNMaW5lU2VnbWVudHMgPyAyIDogMTtcblxuXHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc3QgaW5kZXggPSBnZW9tZXRyeS5pbmRleDtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0XHRpZiAoIGluZGV4ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoIDAsIGRyYXdSYW5nZS5zdGFydCApO1xuXHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbiggaW5kZXguY291bnQsICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IHN0YXJ0LCBsID0gZW5kIC0gMTsgaSA8IGw7IGkgKz0gc3RlcCApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleC5nZXRYKCBpICk7XG5cdFx0XHRcdFx0Y29uc3QgYiA9IGluZGV4LmdldFgoIGkgKyAxICk7XG5cblx0XHRcdFx0XHR2U3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGEgKTtcblx0XHRcdFx0XHR2RW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBiICk7XG5cblx0XHRcdFx0XHRjb25zdCBkaXN0U3EgPSBfcmF5JDEuZGlzdGFuY2VTcVRvU2VnbWVudCggdlN0YXJ0LCB2RW5kLCBpbnRlclJheSwgaW50ZXJTZWdtZW50ICk7XG5cblx0XHRcdFx0XHRpZiAoIGRpc3RTcSA+IGxvY2FsVGhyZXNob2xkU3EgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOyAvL01vdmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb25cblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggaW50ZXJSYXkgKTtcblxuXHRcdFx0XHRcdGlmICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCgge1xuXG5cdFx0XHRcdFx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0XHRcdFx0XHQvLyBXaGF0IGRvIHdlIHdhbnQ/IGludGVyc2VjdGlvbiBwb2ludCBvbiB0aGUgcmF5IG9yIG9uIHRoZSBzZWdtZW50Pz9cblx0XHRcdFx0XHRcdC8vIHBvaW50OiByYXljYXN0ZXIucmF5LmF0KCBkaXN0YW5jZSApLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IGludGVyU2VnbWVudC5jbG9uZSgpLmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApLFxuXHRcdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0XHRcdFx0ZmFjZUluZGV4OiBudWxsLFxuXHRcdFx0XHRcdFx0b2JqZWN0OiB0aGlzXG5cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoIDAsIGRyYXdSYW5nZS5zdGFydCApO1xuXHRcdFx0XHRjb25zdCBlbmQgPSBNYXRoLm1pbiggcG9zaXRpb25BdHRyaWJ1dGUuY291bnQsICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IHN0YXJ0LCBsID0gZW5kIC0gMTsgaSA8IGw7IGkgKz0gc3RlcCApIHtcblxuXHRcdFx0XHRcdHZTdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSApO1xuXHRcdFx0XHRcdHZFbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAxICk7XG5cblx0XHRcdFx0XHRjb25zdCBkaXN0U3EgPSBfcmF5JDEuZGlzdGFuY2VTcVRvU2VnbWVudCggdlN0YXJ0LCB2RW5kLCBpbnRlclJheSwgaW50ZXJTZWdtZW50ICk7XG5cblx0XHRcdFx0XHRpZiAoIGRpc3RTcSA+IGxvY2FsVGhyZXNob2xkU3EgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOyAvL01vdmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb25cblxuXHRcdFx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggaW50ZXJSYXkgKTtcblxuXHRcdFx0XHRcdGlmICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdGludGVyc2VjdHMucHVzaCgge1xuXG5cdFx0XHRcdFx0XHRkaXN0YW5jZTogZGlzdGFuY2UsXG5cdFx0XHRcdFx0XHQvLyBXaGF0IGRvIHdlIHdhbnQ/IGludGVyc2VjdGlvbiBwb2ludCBvbiB0aGUgcmF5IG9yIG9uIHRoZSBzZWdtZW50Pz9cblx0XHRcdFx0XHRcdC8vIHBvaW50OiByYXljYXN0ZXIucmF5LmF0KCBkaXN0YW5jZSApLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IGludGVyU2VnbWVudC5jbG9uZSgpLmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApLFxuXHRcdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0XHRcdFx0ZmFjZUluZGV4OiBudWxsLFxuXHRcdFx0XHRcdFx0b2JqZWN0OiB0aGlzXG5cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBnZW9tZXRyeS5pc0dlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHVwZGF0ZU1vcnBoVGFyZ2V0cygpIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuXHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzO1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKCBtb3JwaEF0dHJpYnV0ZXMgKTtcblxuXHRcdFx0aWYgKCBrZXlzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0Y29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNbIGtleXNbIDAgXSBdO1xuXG5cdFx0XHRcdGlmICggbW9ycGhBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gW107XG5cdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IG1vcnBoQXR0cmlidXRlWyBtIF0ubmFtZSB8fCBTdHJpbmcoIG0gKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCggMCApO1xuXHRcdFx0XHRcdFx0dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbIG5hbWUgXSA9IG07XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRjb25zdCBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cblx0XHRcdGlmICggbW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbkxpbmUucHJvdG90eXBlLmlzTGluZSA9IHRydWU7XG5cbmNvbnN0IF9zdGFydCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9lbmQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIExpbmVTZWdtZW50cyBleHRlbmRzIExpbmUge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGluZVNlZ21lbnRzJztcblxuXHR9XG5cblx0Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdC8vIHdlIGFzc3VtZSBub24taW5kZXhlZCBnZW9tZXRyeVxuXG5cdFx0XHRpZiAoIGdlb21ldHJ5LmluZGV4ID09PSBudWxsICkge1xuXG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcblx0XHRcdFx0Y29uc3QgbGluZURpc3RhbmNlcyA9IFtdO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHBvc2l0aW9uQXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArPSAyICkge1xuXG5cdFx0XHRcdFx0X3N0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0cmlidXRlLCBpICk7XG5cdFx0XHRcdFx0X2VuZC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSArIDEgKTtcblxuXHRcdFx0XHRcdGxpbmVEaXN0YW5jZXNbIGkgXSA9ICggaSA9PT0gMCApID8gMCA6IGxpbmVEaXN0YW5jZXNbIGkgLSAxIF07XG5cdFx0XHRcdFx0bGluZURpc3RhbmNlc1sgaSArIDEgXSA9IGxpbmVEaXN0YW5jZXNbIGkgXSArIF9zdGFydC5kaXN0YW5jZVRvKCBfZW5kICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBsaW5lRGlzdGFuY2VzLCAxICkgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LicgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkxpbmVTZWdtZW50cy5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHMgPSB0cnVlO1xuXG5jbGFzcyBMaW5lTG9vcCBleHRlbmRzIExpbmUge1xuXG5cdGNvbnN0cnVjdG9yKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTGluZUxvb3AnO1xuXG5cdH1cblxufVxuXG5MaW5lTG9vcC5wcm90b3R5cGUuaXNMaW5lTG9vcCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIHNpemU6IDxmbG9hdD4sXG4gKiAgc2l6ZUF0dGVudWF0aW9uOiA8Ym9vbD5cbiAqXG4gKiB9XG4gKi9cblxuY2xhc3MgUG9pbnRzTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BvaW50c01hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuc2l6ZSA9IDE7XG5cdFx0dGhpcy5zaXplQXR0ZW51YXRpb24gPSB0cnVlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuc2l6ZSA9IHNvdXJjZS5zaXplO1xuXHRcdHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gc291cmNlLnNpemVBdHRlbnVhdGlvbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5Qb2ludHNNYXRlcmlhbC5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbCA9IHRydWU7XG5cbmNvbnN0IF9pbnZlcnNlTWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX3JheSA9IC8qQF9fUFVSRV9fKi8gbmV3IFJheSgpO1xuY29uc3QgX3NwaGVyZSA9IC8qQF9fUFVSRV9fKi8gbmV3IFNwaGVyZSgpO1xuY29uc3QgX3Bvc2l0aW9uJDIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFBvaW50cyBleHRlbmRzIE9iamVjdDNEIHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKSwgbWF0ZXJpYWwgPSBuZXcgUG9pbnRzTWF0ZXJpYWwoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRzJztcblxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cblx0XHR0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMubWF0ZXJpYWwgPSBzb3VyY2UubWF0ZXJpYWw7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IHNvdXJjZS5nZW9tZXRyeTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRyYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cdFx0Y29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHJheWNhc3Rlci5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZDtcblx0XHRjb25zdCBkcmF3UmFuZ2UgPSBnZW9tZXRyeS5kcmF3UmFuZ2U7XG5cblx0XHQvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXlcblxuXHRcdGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdF9zcGhlcmUuY29weSggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgKTtcblx0XHRfc3BoZXJlLmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQgKTtcblx0XHRfc3BoZXJlLnJhZGl1cyArPSB0aHJlc2hvbGQ7XG5cblx0XHRpZiAoIHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0c1NwaGVyZSggX3NwaGVyZSApID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdC8vXG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KCBtYXRyaXhXb3JsZCApLmludmVydCgpO1xuXHRcdF9yYXkuY29weSggcmF5Y2FzdGVyLnJheSApLmFwcGx5TWF0cml4NCggX2ludmVyc2VNYXRyaXggKTtcblxuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkID0gdGhyZXNob2xkIC8gKCAoIHRoaXMuc2NhbGUueCArIHRoaXMuc2NhbGUueSArIHRoaXMuc2NhbGUueiApIC8gMyApO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXG5cdFx0aWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRjb25zdCBpbmRleCA9IGdlb21ldHJ5LmluZGV4O1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cdFx0XHRjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMucG9zaXRpb247XG5cblx0XHRcdGlmICggaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKCBpbmRleC5jb3VudCwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBhID0gaW5kZXguZ2V0WCggaSApO1xuXG5cdFx0XHRcdFx0X3Bvc2l0aW9uJDIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGEgKTtcblxuXHRcdFx0XHRcdHRlc3RQb2ludCggX3Bvc2l0aW9uJDIsIGEsIGxvY2FsVGhyZXNob2xkU3EsIG1hdHJpeFdvcmxkLCByYXljYXN0ZXIsIGludGVyc2VjdHMsIHRoaXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IE1hdGgubWluKCBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudCwgKCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gc3RhcnQsIGwgPSBlbmQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0X3Bvc2l0aW9uJDIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKTtcblxuXHRcdFx0XHRcdHRlc3RQb2ludCggX3Bvc2l0aW9uJDIsIGksIGxvY2FsVGhyZXNob2xkU3EsIG1hdHJpeFdvcmxkLCByYXljYXN0ZXIsIGludGVyc2VjdHMsIHRoaXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR1cGRhdGVNb3JwaFRhcmdldHMoKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XG5cblx0XHRpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcztcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyggbW9ycGhBdHRyaWJ1dGVzICk7XG5cblx0XHRcdGlmICgga2V5cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRcdGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBrZXlzWyAwIF0gXTtcblxuXHRcdFx0XHRpZiAoIG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHR0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IFtdO1xuXHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgbSA9IDAsIG1sID0gbW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBtIDwgbWw7IG0gKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVsgbSBdLm5hbWUgfHwgU3RyaW5nKCBtICk7XG5cblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goIDAgKTtcblx0XHRcdFx0XHRcdHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5WyBuYW1lIF0gPSBtO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzO1xuXG5cdFx0XHRpZiAoIG1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG1vcnBoVGFyZ2V0cy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG59XG5cblBvaW50cy5wcm90b3R5cGUuaXNQb2ludHMgPSB0cnVlO1xuXG5mdW5jdGlvbiB0ZXN0UG9pbnQoIHBvaW50LCBpbmRleCwgbG9jYWxUaHJlc2hvbGRTcSwgbWF0cml4V29ybGQsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgb2JqZWN0ICkge1xuXG5cdGNvbnN0IHJheVBvaW50RGlzdGFuY2VTcSA9IF9yYXkuZGlzdGFuY2VTcVRvUG9pbnQoIHBvaW50ICk7XG5cblx0aWYgKCByYXlQb2ludERpc3RhbmNlU3EgPCBsb2NhbFRocmVzaG9sZFNxICkge1xuXG5cdFx0Y29uc3QgaW50ZXJzZWN0UG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0X3JheS5jbG9zZXN0UG9pbnRUb1BvaW50KCBwb2ludCwgaW50ZXJzZWN0UG9pbnQgKTtcblx0XHRpbnRlcnNlY3RQb2ludC5hcHBseU1hdHJpeDQoIG1hdHJpeFdvcmxkICk7XG5cblx0XHRjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oIGludGVyc2VjdFBvaW50ICk7XG5cblx0XHRpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgcmV0dXJuO1xuXG5cdFx0aW50ZXJzZWN0cy5wdXNoKCB7XG5cblx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdGRpc3RhbmNlVG9SYXk6IE1hdGguc3FydCggcmF5UG9pbnREaXN0YW5jZVNxICksXG5cdFx0XHRwb2ludDogaW50ZXJzZWN0UG9pbnQsXG5cdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRmYWNlOiBudWxsLFxuXHRcdFx0b2JqZWN0OiBvYmplY3RcblxuXHRcdH0gKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVmlkZW9UZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cblx0Y29uc3RydWN0b3IoIHZpZGVvLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkgKSB7XG5cblx0XHRzdXBlciggdmlkZW8sIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApO1xuXG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblx0XHR0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTGluZWFyRmlsdGVyO1xuXG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGZ1bmN0aW9uIHVwZGF0ZVZpZGVvKCkge1xuXG5cdFx0XHRzY29wZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHR2aWRlby5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKCB1cGRhdGVWaWRlbyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCAncmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaycgaW4gdmlkZW8gKSB7XG5cblx0XHRcdHZpZGVvLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soIHVwZGF0ZVZpZGVvICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmltYWdlICkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cblx0XHRjb25zdCB2aWRlbyA9IHRoaXMuaW1hZ2U7XG5cdFx0Y29uc3QgaGFzVmlkZW9GcmFtZUNhbGxiYWNrID0gJ3JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2snIGluIHZpZGVvO1xuXG5cdFx0aWYgKCBoYXNWaWRlb0ZyYW1lQ2FsbGJhY2sgPT09IGZhbHNlICYmIHZpZGVvLnJlYWR5U3RhdGUgPj0gdmlkZW8uSEFWRV9DVVJSRU5UX0RBVEEgKSB7XG5cblx0XHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5WaWRlb1RleHR1cmUucHJvdG90eXBlLmlzVmlkZW9UZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cblx0Y29uc3RydWN0b3IoIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCApIHtcblxuXHRcdHN1cGVyKCB7IHdpZHRoLCBoZWlnaHQgfSApO1xuXG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cblx0XHR0aGlzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XG5cdFx0dGhpcy5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xuXG5cdFx0dGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxufVxuXG5GcmFtZWJ1ZmZlclRleHR1cmUucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlID0gdHJ1ZTtcblxuY2xhc3MgQ29tcHJlc3NlZFRleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggbWlwbWFwcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHtcblxuXHRcdHN1cGVyKCBudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICk7XG5cblx0XHR0aGlzLmltYWdlID0geyB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07XG5cdFx0dGhpcy5taXBtYXBzID0gbWlwbWFwcztcblxuXHRcdC8vIG5vIGZsaXBwaW5nIGZvciBjdWJlIHRleHR1cmVzXG5cdFx0Ly8gKGFsc28gZmxpcHBpbmcgZG9lc24ndCB3b3JrIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIClcblxuXHRcdHRoaXMuZmxpcFkgPSBmYWxzZTtcblxuXHRcdC8vIGNhbid0IGdlbmVyYXRlIG1pcG1hcHMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXNcblx0XHQvLyBtaXBzIG11c3QgYmUgZW1iZWRkZWQgaW4gRERTIGZpbGVzXG5cblx0XHR0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xuXG5cdH1cblxufVxuXG5Db21wcmVzc2VkVGV4dHVyZS5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZSA9IHRydWU7XG5cbmNsYXNzIENhbnZhc1RleHR1cmUgZXh0ZW5kcyBUZXh0dXJlIHtcblxuXHRjb25zdHJ1Y3RvciggY2FudmFzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkgKSB7XG5cblx0XHRzdXBlciggY2FudmFzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkgKTtcblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxufVxuXG5DYW52YXNUZXh0dXJlLnByb3RvdHlwZS5pc0NhbnZhc1RleHR1cmUgPSB0cnVlO1xuXG5jbGFzcyBDaXJjbGVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgc2VnbWVudHMgPSA4LCB0aGV0YVN0YXJ0ID0gMCwgdGhldGFMZW5ndGggPSBNYXRoLlBJICogMiApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ2lyY2xlR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRzZWdtZW50czogc2VnbWVudHMsXG5cdFx0XHR0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LFxuXHRcdFx0dGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoXG5cdFx0fTtcblxuXHRcdHNlZ21lbnRzID0gTWF0aC5tYXgoIDMsIHNlZ21lbnRzICk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdC8vIGNlbnRlciBwb2ludFxuXG5cdFx0dmVydGljZXMucHVzaCggMCwgMCwgMCApO1xuXHRcdG5vcm1hbHMucHVzaCggMCwgMCwgMSApO1xuXHRcdHV2cy5wdXNoKCAwLjUsIDAuNSApO1xuXG5cdFx0Zm9yICggbGV0IHMgPSAwLCBpID0gMzsgcyA8PSBzZWdtZW50czsgcyArKywgaSArPSAzICkge1xuXG5cdFx0XHRjb25zdCBzZWdtZW50ID0gdGhldGFTdGFydCArIHMgLyBzZWdtZW50cyAqIHRoZXRhTGVuZ3RoO1xuXG5cdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBNYXRoLmNvcyggc2VnbWVudCApO1xuXHRcdFx0dmVydGV4LnkgPSByYWRpdXMgKiBNYXRoLnNpbiggc2VnbWVudCApO1xuXG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRub3JtYWxzLnB1c2goIDAsIDAsIDEgKTtcblxuXHRcdFx0Ly8gdXZzXG5cblx0XHRcdHV2LnggPSAoIHZlcnRpY2VzWyBpIF0gLyByYWRpdXMgKyAxICkgLyAyO1xuXHRcdFx0dXYueSA9ICggdmVydGljZXNbIGkgKyAxIF0gLyByYWRpdXMgKyAxICkgLyAyO1xuXG5cdFx0XHR1dnMucHVzaCggdXYueCwgdXYueSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gaW5kaWNlc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAxOyBpIDw9IHNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRpbmRpY2VzLnB1c2goIGksIGkgKyAxLCAwICk7XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleCggaW5kaWNlcyApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBDaXJjbGVHZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEuc2VnbWVudHMsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBDeWxpbmRlckdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXNUb3AgPSAxLCByYWRpdXNCb3R0b20gPSAxLCBoZWlnaHQgPSAxLCByYWRpYWxTZWdtZW50cyA9IDgsIGhlaWdodFNlZ21lbnRzID0gMSwgb3BlbkVuZGVkID0gZmFsc2UsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKiAyICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnQ3lsaW5kZXJHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXNUb3A6IHJhZGl1c1RvcCxcblx0XHRcdHJhZGl1c0JvdHRvbTogcmFkaXVzQm90dG9tLFxuXHRcdFx0aGVpZ2h0OiBoZWlnaHQsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRvcGVuRW5kZWQ6IG9wZW5FbmRlZCxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0cmFkaWFsU2VnbWVudHMgPSBNYXRoLmZsb29yKCByYWRpYWxTZWdtZW50cyApO1xuXHRcdGhlaWdodFNlZ21lbnRzID0gTWF0aC5mbG9vciggaGVpZ2h0U2VnbWVudHMgKTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgaW5kZXhBcnJheSA9IFtdO1xuXHRcdGNvbnN0IGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXHRcdGxldCBncm91cFN0YXJ0ID0gMDtcblxuXHRcdC8vIGdlbmVyYXRlIGdlb21ldHJ5XG5cblx0XHRnZW5lcmF0ZVRvcnNvKCk7XG5cblx0XHRpZiAoIG9wZW5FbmRlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGlmICggcmFkaXVzVG9wID4gMCApIGdlbmVyYXRlQ2FwKCB0cnVlICk7XG5cdFx0XHRpZiAoIHJhZGl1c0JvdHRvbSA+IDAgKSBnZW5lcmF0ZUNhcCggZmFsc2UgKTtcblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVUb3JzbygpIHtcblxuXHRcdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGxldCBncm91cENvdW50ID0gMDtcblxuXHRcdFx0Ly8gdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWxcblx0XHRcdGNvbnN0IHNsb3BlID0gKCByYWRpdXNCb3R0b20gLSByYWRpdXNUb3AgKSAvIGhlaWdodDtcblxuXHRcdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0XHRmb3IgKCBsZXQgeSA9IDA7IHkgPD0gaGVpZ2h0U2VnbWVudHM7IHkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW5kZXhSb3cgPSBbXTtcblxuXHRcdFx0XHRjb25zdCB2ID0geSAvIGhlaWdodFNlZ21lbnRzO1xuXG5cdFx0XHRcdC8vIGNhbGN1bGF0ZSB0aGUgcmFkaXVzIG9mIHRoZSBjdXJyZW50IHJvd1xuXG5cdFx0XHRcdGNvbnN0IHJhZGl1cyA9IHYgKiAoIHJhZGl1c0JvdHRvbSAtIHJhZGl1c1RvcCApICsgcmFkaXVzVG9wO1xuXG5cdFx0XHRcdGZvciAoIGxldCB4ID0gMDsgeCA8PSByYWRpYWxTZWdtZW50czsgeCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IHUgPSB4IC8gcmFkaWFsU2VnbWVudHM7XG5cblx0XHRcdFx0XHRjb25zdCB0aGV0YSA9IHUgKiB0aGV0YUxlbmd0aCArIHRoZXRhU3RhcnQ7XG5cblx0XHRcdFx0XHRjb25zdCBzaW5UaGV0YSA9IE1hdGguc2luKCB0aGV0YSApO1xuXHRcdFx0XHRcdGNvbnN0IGNvc1RoZXRhID0gTWF0aC5jb3MoIHRoZXRhICk7XG5cblx0XHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHRcdHZlcnRleC54ID0gcmFkaXVzICogc2luVGhldGE7XG5cdFx0XHRcdFx0dmVydGV4LnkgPSAtIHYgKiBoZWlnaHQgKyBoYWxmSGVpZ2h0O1xuXHRcdFx0XHRcdHZlcnRleC56ID0gcmFkaXVzICogY29zVGhldGE7XG5cdFx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0XHRub3JtYWwuc2V0KCBzaW5UaGV0YSwgc2xvcGUsIGNvc1RoZXRhICkubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0bm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56ICk7XG5cblx0XHRcdFx0XHQvLyB1dlxuXG5cdFx0XHRcdFx0dXZzLnB1c2goIHUsIDEgLSB2ICk7XG5cblx0XHRcdFx0XHQvLyBzYXZlIGluZGV4IG9mIHZlcnRleCBpbiByZXNwZWN0aXZlIHJvd1xuXG5cdFx0XHRcdFx0aW5kZXhSb3cucHVzaCggaW5kZXggKysgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm93IHNhdmUgdmVydGljZXMgb2YgdGhlIHJvdyBpbiBvdXIgaW5kZXggYXJyYXlcblxuXHRcdFx0XHRpbmRleEFycmF5LnB1c2goIGluZGV4Um93ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gZ2VuZXJhdGUgaW5kaWNlc1xuXG5cdFx0XHRmb3IgKCBsZXQgeCA9IDA7IHggPCByYWRpYWxTZWdtZW50czsgeCArKyApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgeSA9IDA7IHkgPCBoZWlnaHRTZWdtZW50czsgeSArKyApIHtcblxuXHRcdFx0XHRcdC8vIHdlIHVzZSB0aGUgaW5kZXggYXJyYXkgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IGluZGljZXNcblxuXHRcdFx0XHRcdGNvbnN0IGEgPSBpbmRleEFycmF5WyB5IF1bIHggXTtcblx0XHRcdFx0XHRjb25zdCBiID0gaW5kZXhBcnJheVsgeSArIDEgXVsgeCBdO1xuXHRcdFx0XHRcdGNvbnN0IGMgPSBpbmRleEFycmF5WyB5ICsgMSBdWyB4ICsgMSBdO1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBpbmRleEFycmF5WyB5IF1bIHggKyAxIF07XG5cblx0XHRcdFx0XHQvLyBmYWNlc1xuXG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdFx0aW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdFx0XHQvLyB1cGRhdGUgZ3JvdXAgY291bnRlclxuXG5cdFx0XHRcdFx0Z3JvdXBDb3VudCArPSA2O1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBhZGQgYSBncm91cCB0byB0aGUgZ2VvbWV0cnkuIHRoaXMgd2lsbCBlbnN1cmUgbXVsdGkgbWF0ZXJpYWwgc3VwcG9ydFxuXG5cdFx0XHRzY29wZS5hZGRHcm91cCggZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgMCApO1xuXG5cdFx0XHQvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHNcblxuXHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50O1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVDYXAoIHRvcCApIHtcblxuXHRcdFx0Ly8gc2F2ZSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNlbnRlciB2ZXJ0ZXhcblx0XHRcdGNvbnN0IGNlbnRlckluZGV4U3RhcnQgPSBpbmRleDtcblxuXHRcdFx0Y29uc3QgdXYgPSBuZXcgVmVjdG9yMigpO1xuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0bGV0IGdyb3VwQ291bnQgPSAwO1xuXG5cdFx0XHRjb25zdCByYWRpdXMgPSAoIHRvcCA9PT0gdHJ1ZSApID8gcmFkaXVzVG9wIDogcmFkaXVzQm90dG9tO1xuXHRcdFx0Y29uc3Qgc2lnbiA9ICggdG9wID09PSB0cnVlICkgPyAxIDogLSAxO1xuXG5cdFx0XHQvLyBmaXJzdCB3ZSBnZW5lcmF0ZSB0aGUgY2VudGVyIHZlcnRleCBkYXRhIG9mIHRoZSBjYXAuXG5cdFx0XHQvLyBiZWNhdXNlIHRoZSBnZW9tZXRyeSBuZWVkcyBvbmUgc2V0IG9mIHV2cyBwZXIgZmFjZSxcblx0XHRcdC8vIHdlIG11c3QgZ2VuZXJhdGUgYSBjZW50ZXIgdmVydGV4IHBlciBmYWNlL3NlZ21lbnRcblxuXHRcdFx0Zm9yICggbGV0IHggPSAxOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkge1xuXG5cdFx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIDAsIGhhbGZIZWlnaHQgKiBzaWduLCAwICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsXG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCAwLCBzaWduLCAwICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1dnMucHVzaCggMC41LCAwLjUgKTtcblxuXHRcdFx0XHQvLyBpbmNyZWFzZSBpbmRleFxuXG5cdFx0XHRcdGluZGV4ICsrO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIHNhdmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNlbnRlciB2ZXJ0ZXhcblx0XHRcdGNvbnN0IGNlbnRlckluZGV4RW5kID0gaW5kZXg7XG5cblx0XHRcdC8vIG5vdyB3ZSBnZW5lcmF0ZSB0aGUgc3Vycm91bmRpbmcgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0XHRmb3IgKCBsZXQgeCA9IDA7IHggPD0gcmFkaWFsU2VnbWVudHM7IHggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdSA9IHggLyByYWRpYWxTZWdtZW50cztcblx0XHRcdFx0Y29uc3QgdGhldGEgPSB1ICogdGhldGFMZW5ndGggKyB0aGV0YVN0YXJ0O1xuXG5cdFx0XHRcdGNvbnN0IGNvc1RoZXRhID0gTWF0aC5jb3MoIHRoZXRhICk7XG5cdFx0XHRcdGNvbnN0IHNpblRoZXRhID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHRcdFx0Ly8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBzaW5UaGV0YTtcblx0XHRcdFx0dmVydGV4LnkgPSBoYWxmSGVpZ2h0ICogc2lnbjtcblx0XHRcdFx0dmVydGV4LnogPSByYWRpdXMgKiBjb3NUaGV0YTtcblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCggMCwgc2lnbiwgMCApO1xuXG5cdFx0XHRcdC8vIHV2XG5cblx0XHRcdFx0dXYueCA9ICggY29zVGhldGEgKiAwLjUgKSArIDAuNTtcblx0XHRcdFx0dXYueSA9ICggc2luVGhldGEgKiAwLjUgKiBzaWduICkgKyAwLjU7XG5cdFx0XHRcdHV2cy5wdXNoKCB1di54LCB1di55ICk7XG5cblx0XHRcdFx0Ly8gaW5jcmVhc2UgaW5kZXhcblxuXHRcdFx0XHRpbmRleCArKztcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBnZW5lcmF0ZSBpbmRpY2VzXG5cblx0XHRcdGZvciAoIGxldCB4ID0gMDsgeCA8IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGMgPSBjZW50ZXJJbmRleFN0YXJ0ICsgeDtcblx0XHRcdFx0Y29uc3QgaSA9IGNlbnRlckluZGV4RW5kICsgeDtcblxuXHRcdFx0XHRpZiAoIHRvcCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIGZhY2UgdG9wXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGksIGkgKyAxLCBjICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGZhY2UgYm90dG9tXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGkgKyAxLCBpLCBjICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdyb3VwQ291bnQgKz0gMztcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBhZGQgYSBncm91cCB0byB0aGUgZ2VvbWV0cnkuIHRoaXMgd2lsbCBlbnN1cmUgbXVsdGkgbWF0ZXJpYWwgc3VwcG9ydFxuXG5cdFx0XHRzY29wZS5hZGRHcm91cCggZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgdG9wID09PSB0cnVlID8gMSA6IDIgKTtcblxuXHRcdFx0Ly8gY2FsY3VsYXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzXG5cblx0XHRcdGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDtcblxuXHRcdH1cblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBDeWxpbmRlckdlb21ldHJ5KCBkYXRhLnJhZGl1c1RvcCwgZGF0YS5yYWRpdXNCb3R0b20sIGRhdGEuaGVpZ2h0LCBkYXRhLnJhZGlhbFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzLCBkYXRhLm9wZW5FbmRlZCwgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIENvbmVHZW9tZXRyeSBleHRlbmRzIEN5bGluZGVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBoZWlnaHQgPSAxLCByYWRpYWxTZWdtZW50cyA9IDgsIGhlaWdodFNlZ21lbnRzID0gMSwgb3BlbkVuZGVkID0gZmFsc2UsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKiAyICkge1xuXG5cdFx0c3VwZXIoIDAsIHJhZGl1cywgaGVpZ2h0LCByYWRpYWxTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIG9wZW5FbmRlZCwgdGhldGFTdGFydCwgdGhldGFMZW5ndGggKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDb25lR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cyxcblx0XHRcdGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cyxcblx0XHRcdG9wZW5FbmRlZDogb3BlbkVuZGVkLFxuXHRcdFx0dGhldGFTdGFydDogdGhldGFTdGFydCxcblx0XHRcdHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aFxuXHRcdH07XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgQ29uZUdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS5oZWlnaHQsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEuaGVpZ2h0U2VnbWVudHMsIGRhdGEub3BlbkVuZGVkLCBkYXRhLnRoZXRhU3RhcnQsIGRhdGEudGhldGFMZW5ndGggKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgUG9seWhlZHJvbkdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCB2ZXJ0aWNlcyA9IFtdLCBpbmRpY2VzID0gW10sIHJhZGl1cyA9IDEsIGRldGFpbCA9IDAgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ1BvbHloZWRyb25HZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHR2ZXJ0aWNlczogdmVydGljZXMsXG5cdFx0XHRpbmRpY2VzOiBpbmRpY2VzLFxuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07XG5cblx0XHQvLyBkZWZhdWx0IGJ1ZmZlciBkYXRhXG5cblx0XHRjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBbXTtcblx0XHRjb25zdCB1dkJ1ZmZlciA9IFtdO1xuXG5cdFx0Ly8gdGhlIHN1YmRpdmlzaW9uIGNyZWF0ZXMgdGhlIHZlcnRleCBidWZmZXIgZGF0YVxuXG5cdFx0c3ViZGl2aWRlKCBkZXRhaWwgKTtcblxuXHRcdC8vIGFsbCB2ZXJ0aWNlcyBzaG91bGQgbGllIG9uIGEgY29uY2VwdHVhbCBzcGhlcmUgd2l0aCBhIGdpdmVuIHJhZGl1c1xuXG5cdFx0YXBwbHlSYWRpdXMoIHJhZGl1cyApO1xuXG5cdFx0Ly8gZmluYWxseSwgY3JlYXRlIHRoZSB1diBkYXRhXG5cblx0XHRnZW5lcmF0ZVVWcygpO1xuXG5cdFx0Ly8gYnVpbGQgbm9uLWluZGV4ZWQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGV4QnVmZmVyLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0ZXhCdWZmZXIuc2xpY2UoKSwgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dkJ1ZmZlciwgMiApICk7XG5cblx0XHRpZiAoIGRldGFpbCA9PT0gMCApIHtcblxuXHRcdFx0dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOyAvLyBmbGF0IG5vcm1hbHNcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMubm9ybWFsaXplTm9ybWFscygpOyAvLyBzbW9vdGggbm9ybWFsc1xuXG5cdFx0fVxuXG5cdFx0Ly8gaGVscGVyIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gc3ViZGl2aWRlKCBkZXRhaWwgKSB7XG5cblx0XHRcdGNvbnN0IGEgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgYiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBjID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGFsbCBmYWNlcyBhbmQgYXBwbHkgYSBzdWJkaXZpc29uIHdpdGggdGhlIGdpdmVuIGRldGFpbCB2YWx1ZVxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzICkge1xuXG5cdFx0XHRcdC8vIGdldCB0aGUgdmVydGljZXMgb2YgdGhlIGZhY2VcblxuXHRcdFx0XHRnZXRWZXJ0ZXhCeUluZGV4KCBpbmRpY2VzWyBpICsgMCBdLCBhICk7XG5cdFx0XHRcdGdldFZlcnRleEJ5SW5kZXgoIGluZGljZXNbIGkgKyAxIF0sIGIgKTtcblx0XHRcdFx0Z2V0VmVydGV4QnlJbmRleCggaW5kaWNlc1sgaSArIDIgXSwgYyApO1xuXG5cdFx0XHRcdC8vIHBlcmZvcm0gc3ViZGl2aXNpb25cblxuXHRcdFx0XHRzdWJkaXZpZGVGYWNlKCBhLCBiLCBjLCBkZXRhaWwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc3ViZGl2aWRlRmFjZSggYSwgYiwgYywgZGV0YWlsICkge1xuXG5cdFx0XHRjb25zdCBjb2xzID0gZGV0YWlsICsgMTtcblxuXHRcdFx0Ly8gd2UgdXNlIHRoaXMgbXVsdGlkaW1lbnNpb25hbCBhcnJheSBhcyBhIGRhdGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyB0aGUgc3ViZGl2aXNpb25cblxuXHRcdFx0Y29uc3QgdiA9IFtdO1xuXG5cdFx0XHQvLyBjb25zdHJ1Y3QgYWxsIG9mIHRoZSB2ZXJ0aWNlcyBmb3IgdGhpcyBzdWJkaXZpc2lvblxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gY29sczsgaSArKyApIHtcblxuXHRcdFx0XHR2WyBpIF0gPSBbXTtcblxuXHRcdFx0XHRjb25zdCBhaiA9IGEuY2xvbmUoKS5sZXJwKCBjLCBpIC8gY29scyApO1xuXHRcdFx0XHRjb25zdCBiaiA9IGIuY2xvbmUoKS5sZXJwKCBjLCBpIC8gY29scyApO1xuXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBjb2xzIC0gaTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPD0gcm93czsgaiArKyApIHtcblxuXHRcdFx0XHRcdGlmICggaiA9PT0gMCAmJiBpID09PSBjb2xzICkge1xuXG5cdFx0XHRcdFx0XHR2WyBpIF1bIGogXSA9IGFqO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dlsgaSBdWyBqIF0gPSBhai5jbG9uZSgpLmxlcnAoIGJqLCBqIC8gcm93cyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb25zdHJ1Y3QgYWxsIG9mIHRoZSBmYWNlc1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjb2xzOyBpICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IDIgKiAoIGNvbHMgLSBpICkgLSAxOyBqICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgayA9IE1hdGguZmxvb3IoIGogLyAyICk7XG5cblx0XHRcdFx0XHRpZiAoIGogJSAyID09PSAwICkge1xuXG5cdFx0XHRcdFx0XHRwdXNoVmVydGV4KCB2WyBpIF1bIGsgKyAxIF0gKTtcblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgoIHZbIGkgKyAxIF1bIGsgXSApO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCggdlsgaSBdWyBrIF0gKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdHB1c2hWZXJ0ZXgoIHZbIGkgXVsgayArIDEgXSApO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCggdlsgaSArIDEgXVsgayArIDEgXSApO1xuXHRcdFx0XHRcdFx0cHVzaFZlcnRleCggdlsgaSArIDEgXVsgayBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhcHBseVJhZGl1cyggcmFkaXVzICkge1xuXG5cdFx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgdGhlIGVudGlyZSBidWZmZXIgYW5kIGFwcGx5IHRoZSByYWRpdXMgdG8gZWFjaCB2ZXJ0ZXhcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmxlbmd0aDsgaSArPSAzICkge1xuXG5cdFx0XHRcdHZlcnRleC54ID0gdmVydGV4QnVmZmVyWyBpICsgMCBdO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHZlcnRleEJ1ZmZlclsgaSArIDEgXTtcblx0XHRcdFx0dmVydGV4LnogPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF07XG5cblx0XHRcdFx0dmVydGV4Lm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCByYWRpdXMgKTtcblxuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF0gPSB2ZXJ0ZXgueDtcblx0XHRcdFx0dmVydGV4QnVmZmVyWyBpICsgMSBdID0gdmVydGV4Lnk7XG5cdFx0XHRcdHZlcnRleEJ1ZmZlclsgaSArIDIgXSA9IHZlcnRleC56O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVVWcygpIHtcblxuXHRcdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmxlbmd0aDsgaSArPSAzICkge1xuXG5cdFx0XHRcdHZlcnRleC54ID0gdmVydGV4QnVmZmVyWyBpICsgMCBdO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHZlcnRleEJ1ZmZlclsgaSArIDEgXTtcblx0XHRcdFx0dmVydGV4LnogPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF07XG5cblx0XHRcdFx0Y29uc3QgdSA9IGF6aW11dGgoIHZlcnRleCApIC8gMiAvIE1hdGguUEkgKyAwLjU7XG5cdFx0XHRcdGNvbnN0IHYgPSBpbmNsaW5hdGlvbiggdmVydGV4ICkgLyBNYXRoLlBJICsgMC41O1xuXHRcdFx0XHR1dkJ1ZmZlci5wdXNoKCB1LCAxIC0gdiApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvcnJlY3RVVnMoKTtcblxuXHRcdFx0Y29ycmVjdFNlYW0oKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3RTZWFtKCkge1xuXG5cdFx0XHQvLyBoYW5kbGUgY2FzZSB3aGVuIGZhY2Ugc3RyYWRkbGVzIHRoZSBzZWFtLCBzZWUgIzMyNjlcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdXZCdWZmZXIubGVuZ3RoOyBpICs9IDYgKSB7XG5cblx0XHRcdFx0Ly8gdXYgZGF0YSBvZiBhIHNpbmdsZSBmYWNlXG5cblx0XHRcdFx0Y29uc3QgeDAgPSB1dkJ1ZmZlclsgaSArIDAgXTtcblx0XHRcdFx0Y29uc3QgeDEgPSB1dkJ1ZmZlclsgaSArIDIgXTtcblx0XHRcdFx0Y29uc3QgeDIgPSB1dkJ1ZmZlclsgaSArIDQgXTtcblxuXHRcdFx0XHRjb25zdCBtYXggPSBNYXRoLm1heCggeDAsIHgxLCB4MiApO1xuXHRcdFx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbiggeDAsIHgxLCB4MiApO1xuXG5cdFx0XHRcdC8vIDAuOSBpcyBzb21ld2hhdCBhcmJpdHJhcnlcblxuXHRcdFx0XHRpZiAoIG1heCA+IDAuOSAmJiBtaW4gPCAwLjEgKSB7XG5cblx0XHRcdFx0XHRpZiAoIHgwIDwgMC4yICkgdXZCdWZmZXJbIGkgKyAwIF0gKz0gMTtcblx0XHRcdFx0XHRpZiAoIHgxIDwgMC4yICkgdXZCdWZmZXJbIGkgKyAyIF0gKz0gMTtcblx0XHRcdFx0XHRpZiAoIHgyIDwgMC4yICkgdXZCdWZmZXJbIGkgKyA0IF0gKz0gMTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hWZXJ0ZXgoIHZlcnRleCApIHtcblxuXHRcdFx0dmVydGV4QnVmZmVyLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFZlcnRleEJ5SW5kZXgoIGluZGV4LCB2ZXJ0ZXggKSB7XG5cblx0XHRcdGNvbnN0IHN0cmlkZSA9IGluZGV4ICogMztcblxuXHRcdFx0dmVydGV4LnggPSB2ZXJ0aWNlc1sgc3RyaWRlICsgMCBdO1xuXHRcdFx0dmVydGV4LnkgPSB2ZXJ0aWNlc1sgc3RyaWRlICsgMSBdO1xuXHRcdFx0dmVydGV4LnogPSB2ZXJ0aWNlc1sgc3RyaWRlICsgMiBdO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY29ycmVjdFVWcygpIHtcblxuXHRcdFx0Y29uc3QgYSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBiID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRjb25zdCBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdGNvbnN0IHV2QSA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRjb25zdCB1dkIgPSBuZXcgVmVjdG9yMigpO1xuXHRcdFx0Y29uc3QgdXZDID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBqID0gMDsgaSA8IHZlcnRleEJ1ZmZlci5sZW5ndGg7IGkgKz0gOSwgaiArPSA2ICkge1xuXG5cdFx0XHRcdGEuc2V0KCB2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF0sIHZlcnRleEJ1ZmZlclsgaSArIDEgXSwgdmVydGV4QnVmZmVyWyBpICsgMiBdICk7XG5cdFx0XHRcdGIuc2V0KCB2ZXJ0ZXhCdWZmZXJbIGkgKyAzIF0sIHZlcnRleEJ1ZmZlclsgaSArIDQgXSwgdmVydGV4QnVmZmVyWyBpICsgNSBdICk7XG5cdFx0XHRcdGMuc2V0KCB2ZXJ0ZXhCdWZmZXJbIGkgKyA2IF0sIHZlcnRleEJ1ZmZlclsgaSArIDcgXSwgdmVydGV4QnVmZmVyWyBpICsgOCBdICk7XG5cblx0XHRcdFx0dXZBLnNldCggdXZCdWZmZXJbIGogKyAwIF0sIHV2QnVmZmVyWyBqICsgMSBdICk7XG5cdFx0XHRcdHV2Qi5zZXQoIHV2QnVmZmVyWyBqICsgMiBdLCB1dkJ1ZmZlclsgaiArIDMgXSApO1xuXHRcdFx0XHR1dkMuc2V0KCB1dkJ1ZmZlclsgaiArIDQgXSwgdXZCdWZmZXJbIGogKyA1IF0gKTtcblxuXHRcdFx0XHRjZW50cm9pZC5jb3B5KCBhICkuYWRkKCBiICkuYWRkKCBjICkuZGl2aWRlU2NhbGFyKCAzICk7XG5cblx0XHRcdFx0Y29uc3QgYXppID0gYXppbXV0aCggY2VudHJvaWQgKTtcblxuXHRcdFx0XHRjb3JyZWN0VVYoIHV2QSwgaiArIDAsIGEsIGF6aSApO1xuXHRcdFx0XHRjb3JyZWN0VVYoIHV2QiwgaiArIDIsIGIsIGF6aSApO1xuXHRcdFx0XHRjb3JyZWN0VVYoIHV2QywgaiArIDQsIGMsIGF6aSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb3JyZWN0VVYoIHV2LCBzdHJpZGUsIHZlY3RvciwgYXppbXV0aCApIHtcblxuXHRcdFx0aWYgKCAoIGF6aW11dGggPCAwICkgJiYgKCB1di54ID09PSAxICkgKSB7XG5cblx0XHRcdFx0dXZCdWZmZXJbIHN0cmlkZSBdID0gdXYueCAtIDE7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCAoIHZlY3Rvci54ID09PSAwICkgJiYgKCB2ZWN0b3IueiA9PT0gMCApICkge1xuXG5cdFx0XHRcdHV2QnVmZmVyWyBzdHJpZGUgXSA9IGF6aW11dGggLyAyIC8gTWF0aC5QSSArIDAuNTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gQW5nbGUgYXJvdW5kIHRoZSBZIGF4aXMsIGNvdW50ZXItY2xvY2t3aXNlIHdoZW4gbG9va2luZyBmcm9tIGFib3ZlLlxuXG5cdFx0ZnVuY3Rpb24gYXppbXV0aCggdmVjdG9yICkge1xuXG5cdFx0XHRyZXR1cm4gTWF0aC5hdGFuMiggdmVjdG9yLnosIC0gdmVjdG9yLnggKTtcblxuXHRcdH1cblxuXG5cdFx0Ly8gQW5nbGUgYWJvdmUgdGhlIFhaIHBsYW5lLlxuXG5cdFx0ZnVuY3Rpb24gaW5jbGluYXRpb24oIHZlY3RvciApIHtcblxuXHRcdFx0cmV0dXJuIE1hdGguYXRhbjIoIC0gdmVjdG9yLnksIE1hdGguc3FydCggKCB2ZWN0b3IueCAqIHZlY3Rvci54ICkgKyAoIHZlY3Rvci56ICogdmVjdG9yLnogKSApICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgUG9seWhlZHJvbkdlb21ldHJ5KCBkYXRhLnZlcnRpY2VzLCBkYXRhLmluZGljZXMsIGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbHMgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgRG9kZWNhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBkZXRhaWwgPSAwICkge1xuXG5cdFx0Y29uc3QgdCA9ICggMSArIE1hdGguc3FydCggNSApICkgLyAyO1xuXHRcdGNvbnN0IHIgPSAxIC8gdDtcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW1xuXG5cdFx0XHQvLyAowrExLCDCsTEsIMKxMSlcblx0XHRcdC0gMSwgLSAxLCAtIDEsXHQtIDEsIC0gMSwgMSxcblx0XHRcdC0gMSwgMSwgLSAxLCAtIDEsIDEsIDEsXG5cdFx0XHQxLCAtIDEsIC0gMSwgMSwgLSAxLCAxLFxuXHRcdFx0MSwgMSwgLSAxLCAxLCAxLCAxLFxuXG5cdFx0XHQvLyAoMCwgwrExL8+GLCDCsc+GKVxuXHRcdFx0MCwgLSByLCAtIHQsIDAsIC0gciwgdCxcblx0XHRcdDAsIHIsIC0gdCwgMCwgciwgdCxcblxuXHRcdFx0Ly8gKMKxMS/PhiwgwrHPhiwgMClcblx0XHRcdC0gciwgLSB0LCAwLCAtIHIsIHQsIDAsXG5cdFx0XHRyLCAtIHQsIDAsIHIsIHQsIDAsXG5cblx0XHRcdC8vICjCsc+GLCAwLCDCsTEvz4YpXG5cdFx0XHQtIHQsIDAsIC0gciwgdCwgMCwgLSByLFxuXHRcdFx0LSB0LCAwLCByLCB0LCAwLCByXG5cdFx0XTtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXG5cdFx0XHQzLCAxMSwgNywgXHQzLCA3LCAxNSwgXHQzLCAxNSwgMTMsXG5cdFx0XHQ3LCAxOSwgMTcsIFx0NywgMTcsIDYsIFx0NywgNiwgMTUsXG5cdFx0XHQxNywgNCwgOCwgXHQxNywgOCwgMTAsIFx0MTcsIDEwLCA2LFxuXHRcdFx0OCwgMCwgMTYsIFx0OCwgMTYsIDIsIFx0OCwgMiwgMTAsXG5cdFx0XHQwLCAxMiwgMSwgXHQwLCAxLCAxOCwgXHQwLCAxOCwgMTYsXG5cdFx0XHQ2LCAxMCwgMiwgXHQ2LCAyLCAxMywgXHQ2LCAxMywgMTUsXG5cdFx0XHQyLCAxNiwgMTgsIFx0MiwgMTgsIDMsIFx0MiwgMywgMTMsXG5cdFx0XHQxOCwgMSwgOSwgXHQxOCwgOSwgMTEsIFx0MTgsIDExLCAzLFxuXHRcdFx0NCwgMTQsIDEyLCBcdDQsIDEyLCAwLCBcdDQsIDAsIDgsXG5cdFx0XHQxMSwgOSwgNSwgXHQxMSwgNSwgMTksIFx0MTEsIDE5LCA3LFxuXHRcdFx0MTksIDUsIDE0LCBcdDE5LCAxNCwgNCwgXHQxOSwgNCwgMTcsXG5cdFx0XHQxLCAxMiwgMTQsIFx0MSwgMTQsIDUsIFx0MSwgNSwgOVxuXHRcdF07XG5cblx0XHRzdXBlciggdmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnRG9kZWNhaGVkcm9uR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgRG9kZWNhaGVkcm9uR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbCApO1xuXG5cdH1cblxufVxuXG5jb25zdCBfdjAgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3YxJDEgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgX25vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoKTtcblxuY2xhc3MgRWRnZXNHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnkgPSBudWxsLCB0aHJlc2hvbGRBbmdsZSA9IDEgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdFZGdlc0dlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdGdlb21ldHJ5OiBnZW9tZXRyeSxcblx0XHRcdHRocmVzaG9sZEFuZ2xlOiB0aHJlc2hvbGRBbmdsZVxuXHRcdH07XG5cblx0XHRpZiAoIGdlb21ldHJ5ICE9PSBudWxsICkge1xuXG5cdFx0XHRjb25zdCBwcmVjaXNpb25Qb2ludHMgPSA0O1xuXHRcdFx0Y29uc3QgcHJlY2lzaW9uID0gTWF0aC5wb3coIDEwLCBwcmVjaXNpb25Qb2ludHMgKTtcblx0XHRcdGNvbnN0IHRocmVzaG9sZERvdCA9IE1hdGguY29zKCBERUcyUkFEICogdGhyZXNob2xkQW5nbGUgKTtcblxuXHRcdFx0Y29uc3QgaW5kZXhBdHRyID0gZ2VvbWV0cnkuZ2V0SW5kZXgoKTtcblx0XHRcdGNvbnN0IHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmdldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJyApO1xuXHRcdFx0Y29uc3QgaW5kZXhDb3VudCA9IGluZGV4QXR0ciA/IGluZGV4QXR0ci5jb3VudCA6IHBvc2l0aW9uQXR0ci5jb3VudDtcblxuXHRcdFx0Y29uc3QgaW5kZXhBcnIgPSBbIDAsIDAsIDAgXTtcblx0XHRcdGNvbnN0IHZlcnRLZXlzID0gWyAnYScsICdiJywgJ2MnIF07XG5cdFx0XHRjb25zdCBoYXNoZXMgPSBuZXcgQXJyYXkoIDMgKTtcblxuXHRcdFx0Y29uc3QgZWRnZURhdGEgPSB7fTtcblx0XHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBpbmRleENvdW50OyBpICs9IDMgKSB7XG5cblx0XHRcdFx0aWYgKCBpbmRleEF0dHIgKSB7XG5cblx0XHRcdFx0XHRpbmRleEFyclsgMCBdID0gaW5kZXhBdHRyLmdldFgoIGkgKTtcblx0XHRcdFx0XHRpbmRleEFyclsgMSBdID0gaW5kZXhBdHRyLmdldFgoIGkgKyAxICk7XG5cdFx0XHRcdFx0aW5kZXhBcnJbIDIgXSA9IGluZGV4QXR0ci5nZXRYKCBpICsgMiApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRpbmRleEFyclsgMCBdID0gaTtcblx0XHRcdFx0XHRpbmRleEFyclsgMSBdID0gaSArIDE7XG5cdFx0XHRcdFx0aW5kZXhBcnJbIDIgXSA9IGkgKyAyO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB7IGEsIGIsIGMgfSA9IF90cmlhbmdsZTtcblx0XHRcdFx0YS5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHIsIGluZGV4QXJyWyAwIF0gKTtcblx0XHRcdFx0Yi5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHIsIGluZGV4QXJyWyAxIF0gKTtcblx0XHRcdFx0Yy5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHIsIGluZGV4QXJyWyAyIF0gKTtcblx0XHRcdFx0X3RyaWFuZ2xlLmdldE5vcm1hbCggX25vcm1hbCApO1xuXG5cdFx0XHRcdC8vIGNyZWF0ZSBoYXNoZXMgZm9yIHRoZSBlZGdlIGZyb20gdGhlIHZlcnRpY2VzXG5cdFx0XHRcdGhhc2hlc1sgMCBdID0gYCR7IE1hdGgucm91bmQoIGEueCAqIHByZWNpc2lvbiApIH0sJHsgTWF0aC5yb3VuZCggYS55ICogcHJlY2lzaW9uICkgfSwkeyBNYXRoLnJvdW5kKCBhLnogKiBwcmVjaXNpb24gKSB9YDtcblx0XHRcdFx0aGFzaGVzWyAxIF0gPSBgJHsgTWF0aC5yb3VuZCggYi54ICogcHJlY2lzaW9uICkgfSwkeyBNYXRoLnJvdW5kKCBiLnkgKiBwcmVjaXNpb24gKSB9LCR7IE1hdGgucm91bmQoIGIueiAqIHByZWNpc2lvbiApIH1gO1xuXHRcdFx0XHRoYXNoZXNbIDIgXSA9IGAkeyBNYXRoLnJvdW5kKCBjLnggKiBwcmVjaXNpb24gKSB9LCR7IE1hdGgucm91bmQoIGMueSAqIHByZWNpc2lvbiApIH0sJHsgTWF0aC5yb3VuZCggYy56ICogcHJlY2lzaW9uICkgfWA7XG5cblx0XHRcdFx0Ly8gc2tpcCBkZWdlbmVyYXRlIHRyaWFuZ2xlc1xuXHRcdFx0XHRpZiAoIGhhc2hlc1sgMCBdID09PSBoYXNoZXNbIDEgXSB8fCBoYXNoZXNbIDEgXSA9PT0gaGFzaGVzWyAyIF0gfHwgaGFzaGVzWyAyIF0gPT09IGhhc2hlc1sgMCBdICkge1xuXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGl0ZXJhdGUgb3ZlciBldmVyeSBlZGdlXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IDM7IGogKysgKSB7XG5cblx0XHRcdFx0XHQvLyBnZXQgdGhlIGZpcnN0IGFuZCBuZXh0IHZlcnRleCBtYWtpbmcgdXAgdGhlIGVkZ2Vcblx0XHRcdFx0XHRjb25zdCBqTmV4dCA9ICggaiArIDEgKSAlIDM7XG5cdFx0XHRcdFx0Y29uc3QgdmVjSGFzaDAgPSBoYXNoZXNbIGogXTtcblx0XHRcdFx0XHRjb25zdCB2ZWNIYXNoMSA9IGhhc2hlc1sgak5leHQgXTtcblx0XHRcdFx0XHRjb25zdCB2MCA9IF90cmlhbmdsZVsgdmVydEtleXNbIGogXSBdO1xuXHRcdFx0XHRcdGNvbnN0IHYxID0gX3RyaWFuZ2xlWyB2ZXJ0S2V5c1sgak5leHQgXSBdO1xuXG5cdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGAkeyB2ZWNIYXNoMCB9XyR7IHZlY0hhc2gxIH1gO1xuXHRcdFx0XHRcdGNvbnN0IHJldmVyc2VIYXNoID0gYCR7IHZlY0hhc2gxIH1fJHsgdmVjSGFzaDAgfWA7XG5cblx0XHRcdFx0XHRpZiAoIHJldmVyc2VIYXNoIGluIGVkZ2VEYXRhICYmIGVkZ2VEYXRhWyByZXZlcnNlSGFzaCBdICkge1xuXG5cdFx0XHRcdFx0XHQvLyBpZiB3ZSBmb3VuZCBhIHNpYmxpbmcgZWRnZSBhZGQgaXQgaW50byB0aGUgdmVydGV4IGFycmF5IGlmXG5cdFx0XHRcdFx0XHQvLyBpdCBtZWV0cyB0aGUgYW5nbGUgdGhyZXNob2xkIGFuZCBkZWxldGUgdGhlIGVkZ2UgZnJvbSB0aGUgbWFwLlxuXHRcdFx0XHRcdFx0aWYgKCBfbm9ybWFsLmRvdCggZWRnZURhdGFbIHJldmVyc2VIYXNoIF0ubm9ybWFsICkgPD0gdGhyZXNob2xkRG90ICkge1xuXG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIHYwLngsIHYwLnksIHYwLnogKTtcblx0XHRcdFx0XHRcdFx0dmVydGljZXMucHVzaCggdjEueCwgdjEueSwgdjEueiApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGVkZ2VEYXRhWyByZXZlcnNlSGFzaCBdID0gbnVsbDtcblxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICEgKCBoYXNoIGluIGVkZ2VEYXRhICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGlmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGVkZ2UgaGVyZSB0aGVuIHNraXAgYWRkaW5nIGEgbmV3IG9uZVxuXHRcdFx0XHRcdFx0ZWRnZURhdGFbIGhhc2ggXSA9IHtcblxuXHRcdFx0XHRcdFx0XHRpbmRleDA6IGluZGV4QXJyWyBqIF0sXG5cdFx0XHRcdFx0XHRcdGluZGV4MTogaW5kZXhBcnJbIGpOZXh0IF0sXG5cdFx0XHRcdFx0XHRcdG5vcm1hbDogX25vcm1hbC5jbG9uZSgpLFxuXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIHJlbWFpbmluZywgdW5tYXRjaGVkIGVkZ2VzIGFuZCBhZGQgdGhlbSB0byB0aGUgdmVydGV4IGFycmF5XG5cdFx0XHRmb3IgKCBjb25zdCBrZXkgaW4gZWRnZURhdGEgKSB7XG5cblx0XHRcdFx0aWYgKCBlZGdlRGF0YVsga2V5IF0gKSB7XG5cblx0XHRcdFx0XHRjb25zdCB7IGluZGV4MCwgaW5kZXgxIH0gPSBlZGdlRGF0YVsga2V5IF07XG5cdFx0XHRcdFx0X3YwLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uQXR0ciwgaW5kZXgwICk7XG5cdFx0XHRcdFx0X3YxJDEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyLCBpbmRleDEgKTtcblxuXHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIF92MC54LCBfdjAueSwgX3YwLnogKTtcblx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCBfdjEkMS54LCBfdjEkMS55LCBfdjEkMS56ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG4vKipcbiAqIEV4dGVuc2libGUgY3VydmUgb2JqZWN0LlxuICpcbiAqIFNvbWUgY29tbW9uIG9mIGN1cnZlIG1ldGhvZHM6XG4gKiAuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICksIC5nZXRUYW5nZW50KCB0LCBvcHRpb25hbFRhcmdldCApXG4gKiAuZ2V0UG9pbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKSwgLmdldFRhbmdlbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKVxuICogLmdldFBvaW50cygpLCAuZ2V0U3BhY2VkUG9pbnRzKClcbiAqIC5nZXRMZW5ndGgoKVxuICogLnVwZGF0ZUFyY0xlbmd0aHMoKVxuICpcbiAqIFRoaXMgZm9sbG93aW5nIGN1cnZlcyBpbmhlcml0IGZyb20gVEhSRUUuQ3VydmU6XG4gKlxuICogLS0gMkQgY3VydmVzIC0tXG4gKiBUSFJFRS5BcmNDdXJ2ZVxuICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZVxuICogVEhSRUUuRWxsaXBzZUN1cnZlXG4gKiBUSFJFRS5MaW5lQ3VydmVcbiAqIFRIUkVFLlF1YWRyYXRpY0JlemllckN1cnZlXG4gKiBUSFJFRS5TcGxpbmVDdXJ2ZVxuICpcbiAqIC0tIDNEIGN1cnZlcyAtLVxuICogVEhSRUUuQ2F0bXVsbFJvbUN1cnZlM1xuICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZTNcbiAqIFRIUkVFLkxpbmVDdXJ2ZTNcbiAqIFRIUkVFLlF1YWRyYXRpY0JlemllckN1cnZlM1xuICpcbiAqIEEgc2VyaWVzIG9mIGN1cnZlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBUSFJFRS5DdXJ2ZVBhdGguXG4gKlxuICoqL1xuXG5jbGFzcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ3VydmUnO1xuXG5cdFx0dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSAyMDA7XG5cblx0fVxuXG5cdC8vIFZpcnR1YWwgYmFzZSBjbGFzcyBtZXRob2QgdG8gb3ZlcndyaXRlIGFuZCBpbXBsZW1lbnQgaW4gc3ViY2xhc3Nlc1xuXHQvL1x0LSB0IFswIC4uIDFdXG5cblx0Z2V0UG9pbnQoIC8qIHQsIG9wdGlvbmFsVGFyZ2V0ICovICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4nICk7XG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdC8vIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJjIGxlbmd0aFxuXHQvLyAtIHUgWzAgLi4gMV1cblxuXHRnZXRQb2ludEF0KCB1LCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRcdGNvbnN0IHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKCB1ICk7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICk7XG5cblx0fVxuXG5cdC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnQoIHQgKVxuXG5cdGdldFBvaW50cyggZGl2aXNpb25zID0gNSApIHtcblxuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGQgPSAwOyBkIDw9IGRpdmlzaW9uczsgZCArKyApIHtcblxuXHRcdFx0cG9pbnRzLnB1c2goIHRoaXMuZ2V0UG9pbnQoIGQgLyBkaXZpc2lvbnMgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblxuXHR9XG5cblx0Ly8gR2V0IHNlcXVlbmNlIG9mIHBvaW50cyB1c2luZyBnZXRQb2ludEF0KCB1IClcblxuXHRnZXRTcGFjZWRQb2ludHMoIGRpdmlzaW9ucyA9IDUgKSB7XG5cblx0XHRjb25zdCBwb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQgKysgKSB7XG5cblx0XHRcdHBvaW50cy5wdXNoKCB0aGlzLmdldFBvaW50QXQoIGQgLyBkaXZpc2lvbnMgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblxuXHR9XG5cblx0Ly8gR2V0IHRvdGFsIGN1cnZlIGFyYyBsZW5ndGhcblxuXHRnZXRMZW5ndGgoKSB7XG5cblx0XHRjb25zdCBsZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7XG5cdFx0cmV0dXJuIGxlbmd0aHNbIGxlbmd0aHMubGVuZ3RoIC0gMSBdO1xuXG5cdH1cblxuXHQvLyBHZXQgbGlzdCBvZiBjdW11bGF0aXZlIHNlZ21lbnQgbGVuZ3Roc1xuXG5cdGdldExlbmd0aHMoIGRpdmlzaW9ucyA9IHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zICkge1xuXG5cdFx0aWYgKCB0aGlzLmNhY2hlQXJjTGVuZ3RocyAmJlxuXHRcdFx0KCB0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGggPT09IGRpdmlzaW9ucyArIDEgKSAmJlxuXHRcdFx0ISB0aGlzLm5lZWRzVXBkYXRlICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7XG5cblx0XHR9XG5cblx0XHR0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRjb25zdCBjYWNoZSA9IFtdO1xuXHRcdGxldCBjdXJyZW50LCBsYXN0ID0gdGhpcy5nZXRQb2ludCggMCApO1xuXHRcdGxldCBzdW0gPSAwO1xuXG5cdFx0Y2FjaGUucHVzaCggMCApO1xuXG5cdFx0Zm9yICggbGV0IHAgPSAxOyBwIDw9IGRpdmlzaW9uczsgcCArKyApIHtcblxuXHRcdFx0Y3VycmVudCA9IHRoaXMuZ2V0UG9pbnQoIHAgLyBkaXZpc2lvbnMgKTtcblx0XHRcdHN1bSArPSBjdXJyZW50LmRpc3RhbmNlVG8oIGxhc3QgKTtcblx0XHRcdGNhY2hlLnB1c2goIHN1bSApO1xuXHRcdFx0bGFzdCA9IGN1cnJlbnQ7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlO1xuXG5cdFx0cmV0dXJuIGNhY2hlOyAvLyB7IHN1bXM6IGNhY2hlLCBzdW06IHN1bSB9OyBTdW0gaXMgaW4gdGhlIGxhc3QgZWxlbWVudC5cblxuXHR9XG5cblx0dXBkYXRlQXJjTGVuZ3RocygpIHtcblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuZ2V0TGVuZ3RocygpO1xuXG5cdH1cblxuXHQvLyBHaXZlbiB1ICggMCAuLiAxICksIGdldCBhIHQgdG8gZmluZCBwLiBUaGlzIGdpdmVzIHlvdSBwb2ludHMgd2hpY2ggYXJlIGVxdWlkaXN0YW50XG5cblx0Z2V0VXRvVG1hcHBpbmcoIHUsIGRpc3RhbmNlICkge1xuXG5cdFx0Y29uc3QgYXJjTGVuZ3RocyA9IHRoaXMuZ2V0TGVuZ3RocygpO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGlsID0gYXJjTGVuZ3Rocy5sZW5ndGg7XG5cblx0XHRsZXQgdGFyZ2V0QXJjTGVuZ3RoOyAvLyBUaGUgdGFyZ2V0ZWQgdSBkaXN0YW5jZSB2YWx1ZSB0byBnZXRcblxuXHRcdGlmICggZGlzdGFuY2UgKSB7XG5cblx0XHRcdHRhcmdldEFyY0xlbmd0aCA9IGRpc3RhbmNlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGFyZ2V0QXJjTGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbIGlsIC0gMSBdO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYmluYXJ5IHNlYXJjaCBmb3IgdGhlIGluZGV4IHdpdGggbGFyZ2VzdCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGFyZ2V0IHUgZGlzdGFuY2VcblxuXHRcdGxldCBsb3cgPSAwLCBoaWdoID0gaWwgLSAxLCBjb21wYXJpc29uO1xuXG5cdFx0d2hpbGUgKCBsb3cgPD0gaGlnaCApIHtcblxuXHRcdFx0aSA9IE1hdGguZmxvb3IoIGxvdyArICggaGlnaCAtIGxvdyApIC8gMiApOyAvLyBsZXNzIGxpa2VseSB0byBvdmVyZmxvdywgdGhvdWdoIHByb2JhYmx5IG5vdCBpc3N1ZSBoZXJlLCBKUyBkb2Vzbid0IHJlYWxseSBoYXZlIGludGVnZXJzLCBhbGwgbnVtYmVycyBhcmUgZmxvYXRzXG5cblx0XHRcdGNvbXBhcmlzb24gPSBhcmNMZW5ndGhzWyBpIF0gLSB0YXJnZXRBcmNMZW5ndGg7XG5cblx0XHRcdGlmICggY29tcGFyaXNvbiA8IDAgKSB7XG5cblx0XHRcdFx0bG93ID0gaSArIDE7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBhcmlzb24gPiAwICkge1xuXG5cdFx0XHRcdGhpZ2ggPSBpIC0gMTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRoaWdoID0gaTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Ly8gRE9ORVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpID0gaGlnaDtcblxuXHRcdGlmICggYXJjTGVuZ3Roc1sgaSBdID09PSB0YXJnZXRBcmNMZW5ndGggKSB7XG5cblx0XHRcdHJldHVybiBpIC8gKCBpbCAtIDEgKTtcblxuXHRcdH1cblxuXHRcdC8vIHdlIGNvdWxkIGdldCBmaW5lciBncmFpbiBhdCBsZW5ndGhzLCBvciB1c2Ugc2ltcGxlIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcG9pbnRzXG5cblx0XHRjb25zdCBsZW5ndGhCZWZvcmUgPSBhcmNMZW5ndGhzWyBpIF07XG5cdFx0Y29uc3QgbGVuZ3RoQWZ0ZXIgPSBhcmNMZW5ndGhzWyBpICsgMSBdO1xuXG5cdFx0Y29uc3Qgc2VnbWVudExlbmd0aCA9IGxlbmd0aEFmdGVyIC0gbGVuZ3RoQmVmb3JlO1xuXG5cdFx0Ly8gZGV0ZXJtaW5lIHdoZXJlIHdlIGFyZSBiZXR3ZWVuIHRoZSAnYmVmb3JlJyBhbmQgJ2FmdGVyJyBwb2ludHNcblxuXHRcdGNvbnN0IHNlZ21lbnRGcmFjdGlvbiA9ICggdGFyZ2V0QXJjTGVuZ3RoIC0gbGVuZ3RoQmVmb3JlICkgLyBzZWdtZW50TGVuZ3RoO1xuXG5cdFx0Ly8gYWRkIHRoYXQgZnJhY3Rpb25hbCBhbW91bnQgdG8gdFxuXG5cdFx0Y29uc3QgdCA9ICggaSArIHNlZ21lbnRGcmFjdGlvbiApIC8gKCBpbCAtIDEgKTtcblxuXHRcdHJldHVybiB0O1xuXG5cdH1cblxuXHQvLyBSZXR1cm5zIGEgdW5pdCB2ZWN0b3IgdGFuZ2VudCBhdCB0XG5cdC8vIEluIGNhc2UgYW55IHN1YiBjdXJ2ZSBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIHRhbmdlbnQgZGVyaXZhdGlvbixcblx0Ly8gMiBwb2ludHMgYSBzbWFsbCBkZWx0YSBhcGFydCB3aWxsIGJlIHVzZWQgdG8gZmluZCBpdHMgZ3JhZGllbnRcblx0Ly8gd2hpY2ggc2VlbXMgdG8gZ2l2ZSBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvblxuXG5cdGdldFRhbmdlbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgZGVsdGEgPSAwLjAwMDE7XG5cdFx0bGV0IHQxID0gdCAtIGRlbHRhO1xuXHRcdGxldCB0MiA9IHQgKyBkZWx0YTtcblxuXHRcdC8vIENhcHBpbmcgaW4gY2FzZSBvZiBkYW5nZXJcblxuXHRcdGlmICggdDEgPCAwICkgdDEgPSAwO1xuXHRcdGlmICggdDIgPiAxICkgdDIgPSAxO1xuXG5cdFx0Y29uc3QgcHQxID0gdGhpcy5nZXRQb2ludCggdDEgKTtcblx0XHRjb25zdCBwdDIgPSB0aGlzLmdldFBvaW50KCB0MiApO1xuXG5cdFx0Y29uc3QgdGFuZ2VudCA9IG9wdGlvbmFsVGFyZ2V0IHx8ICggKCBwdDEuaXNWZWN0b3IyICkgPyBuZXcgVmVjdG9yMigpIDogbmV3IFZlY3RvcjMoKSApO1xuXG5cdFx0dGFuZ2VudC5jb3B5KCBwdDIgKS5zdWIoIHB0MSApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0cmV0dXJuIHRhbmdlbnQ7XG5cblx0fVxuXG5cdGdldFRhbmdlbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRjb25zdCB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyggdSApO1xuXHRcdHJldHVybiB0aGlzLmdldFRhbmdlbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICk7XG5cblx0fVxuXG5cdGNvbXB1dGVGcmVuZXRGcmFtZXMoIHNlZ21lbnRzLCBjbG9zZWQgKSB7XG5cblx0XHQvLyBzZWUgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9wdWIvdGVjaHJlcG9ydHMvVFI0MjUucGRmXG5cblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Y29uc3QgdGFuZ2VudHMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgYmlub3JtYWxzID0gW107XG5cblx0XHRjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG1hdCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHQvLyBjb21wdXRlIHRoZSB0YW5nZW50IHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmVcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSBzZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgdSA9IGkgLyBzZWdtZW50cztcblxuXHRcdFx0dGFuZ2VudHNbIGkgXSA9IHRoaXMuZ2V0VGFuZ2VudEF0KCB1LCBuZXcgVmVjdG9yMygpICk7XG5cblx0XHR9XG5cblx0XHQvLyBzZWxlY3QgYW4gaW5pdGlhbCBub3JtYWwgdmVjdG9yIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGZpcnN0IHRhbmdlbnQgdmVjdG9yLFxuXHRcdC8vIGFuZCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtaW5pbXVtIHRhbmdlbnQgeHl6IGNvbXBvbmVudFxuXG5cdFx0bm9ybWFsc1sgMCBdID0gbmV3IFZlY3RvcjMoKTtcblx0XHRiaW5vcm1hbHNbIDAgXSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0bGV0IG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG5cdFx0Y29uc3QgdHggPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS54ICk7XG5cdFx0Y29uc3QgdHkgPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS55ICk7XG5cdFx0Y29uc3QgdHogPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS56ICk7XG5cblx0XHRpZiAoIHR4IDw9IG1pbiApIHtcblxuXHRcdFx0bWluID0gdHg7XG5cdFx0XHRub3JtYWwuc2V0KCAxLCAwLCAwICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHR5IDw9IG1pbiApIHtcblxuXHRcdFx0bWluID0gdHk7XG5cdFx0XHRub3JtYWwuc2V0KCAwLCAxLCAwICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIHR6IDw9IG1pbiApIHtcblxuXHRcdFx0bm9ybWFsLnNldCggMCwgMCwgMSApO1xuXG5cdFx0fVxuXG5cdFx0dmVjLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwgbm9ybWFsICkubm9ybWFsaXplKCk7XG5cblx0XHRub3JtYWxzWyAwIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgMCBdLCB2ZWMgKTtcblx0XHRiaW5vcm1hbHNbIDAgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyAwIF0sIG5vcm1hbHNbIDAgXSApO1xuXG5cblx0XHQvLyBjb21wdXRlIHRoZSBzbG93bHktdmFyeWluZyBub3JtYWwgYW5kIGJpbm9ybWFsIHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmVcblxuXHRcdGZvciAoIGxldCBpID0gMTsgaSA8PSBzZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0bm9ybWFsc1sgaSBdID0gbm9ybWFsc1sgaSAtIDEgXS5jbG9uZSgpO1xuXG5cdFx0XHRiaW5vcm1hbHNbIGkgXSA9IGJpbm9ybWFsc1sgaSAtIDEgXS5jbG9uZSgpO1xuXG5cdFx0XHR2ZWMuY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSAtIDEgXSwgdGFuZ2VudHNbIGkgXSApO1xuXG5cdFx0XHRpZiAoIHZlYy5sZW5ndGgoKSA+IE51bWJlci5FUFNJTE9OICkge1xuXG5cdFx0XHRcdHZlYy5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRjb25zdCB0aGV0YSA9IE1hdGguYWNvcyggY2xhbXAoIHRhbmdlbnRzWyBpIC0gMSBdLmRvdCggdGFuZ2VudHNbIGkgXSApLCAtIDEsIDEgKSApOyAvLyBjbGFtcCBmb3IgZmxvYXRpbmcgcHQgZXJyb3JzXG5cblx0XHRcdFx0bm9ybWFsc1sgaSBdLmFwcGx5TWF0cml4NCggbWF0Lm1ha2VSb3RhdGlvbkF4aXMoIHZlYywgdGhldGEgKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGJpbm9ybWFsc1sgaSBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIGkgXSwgbm9ybWFsc1sgaSBdICk7XG5cblx0XHR9XG5cblx0XHQvLyBpZiB0aGUgY3VydmUgaXMgY2xvc2VkLCBwb3N0cHJvY2VzcyB0aGUgdmVjdG9ycyBzbyB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9ybWFsIHZlY3RvcnMgYXJlIHRoZSBzYW1lXG5cblx0XHRpZiAoIGNsb3NlZCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0bGV0IHRoZXRhID0gTWF0aC5hY29zKCBjbGFtcCggbm9ybWFsc1sgMCBdLmRvdCggbm9ybWFsc1sgc2VnbWVudHMgXSApLCAtIDEsIDEgKSApO1xuXHRcdFx0dGhldGEgLz0gc2VnbWVudHM7XG5cblx0XHRcdGlmICggdGFuZ2VudHNbIDAgXS5kb3QoIHZlYy5jcm9zc1ZlY3RvcnMoIG5vcm1hbHNbIDAgXSwgbm9ybWFsc1sgc2VnbWVudHMgXSApICkgPiAwICkge1xuXG5cdFx0XHRcdHRoZXRhID0gLSB0aGV0YTtcblxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Ly8gdHdpc3QgYSBsaXR0bGUuLi5cblx0XHRcdFx0bm9ybWFsc1sgaSBdLmFwcGx5TWF0cml4NCggbWF0Lm1ha2VSb3RhdGlvbkF4aXMoIHRhbmdlbnRzWyBpIF0sIHRoZXRhICogaSApICk7XG5cdFx0XHRcdGJpbm9ybWFsc1sgaSBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIGkgXSwgbm9ybWFsc1sgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0YW5nZW50czogdGFuZ2VudHMsXG5cdFx0XHRub3JtYWxzOiBub3JtYWxzLFxuXHRcdFx0Ymlub3JtYWxzOiBiaW5vcm1hbHNcblx0XHR9O1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSBzb3VyY2UuYXJjTGVuZ3RoRGl2aXNpb25zO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHR2ZXJzaW9uOiA0LjUsXG5cdFx0XHRcdHR5cGU6ICdDdXJ2ZScsXG5cdFx0XHRcdGdlbmVyYXRvcjogJ0N1cnZlLnRvSlNPTidcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0ZGF0YS5hcmNMZW5ndGhEaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucztcblx0XHRkYXRhLnR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHR0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IGpzb24uYXJjTGVuZ3RoRGl2aXNpb25zO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIEVsbGlwc2VDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggYVggPSAwLCBhWSA9IDAsIHhSYWRpdXMgPSAxLCB5UmFkaXVzID0gMSwgYVN0YXJ0QW5nbGUgPSAwLCBhRW5kQW5nbGUgPSBNYXRoLlBJICogMiwgYUNsb2Nrd2lzZSA9IGZhbHNlLCBhUm90YXRpb24gPSAwICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdFbGxpcHNlQ3VydmUnO1xuXG5cdFx0dGhpcy5hWCA9IGFYO1xuXHRcdHRoaXMuYVkgPSBhWTtcblxuXHRcdHRoaXMueFJhZGl1cyA9IHhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0geVJhZGl1cztcblxuXHRcdHRoaXMuYVN0YXJ0QW5nbGUgPSBhU3RhcnRBbmdsZTtcblx0XHR0aGlzLmFFbmRBbmdsZSA9IGFFbmRBbmdsZTtcblxuXHRcdHRoaXMuYUNsb2Nrd2lzZSA9IGFDbG9ja3dpc2U7XG5cblx0XHR0aGlzLmFSb3RhdGlvbiA9IGFSb3RhdGlvbjtcblxuXHR9XG5cblx0Z2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpO1xuXG5cdFx0Y29uc3QgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0XHRsZXQgZGVsdGFBbmdsZSA9IHRoaXMuYUVuZEFuZ2xlIC0gdGhpcy5hU3RhcnRBbmdsZTtcblx0XHRjb25zdCBzYW1lUG9pbnRzID0gTWF0aC5hYnMoIGRlbHRhQW5nbGUgKSA8IE51bWJlci5FUFNJTE9OO1xuXG5cdFx0Ly8gZW5zdXJlcyB0aGF0IGRlbHRhQW5nbGUgaXMgMCAuLiAyIFBJXG5cdFx0d2hpbGUgKCBkZWx0YUFuZ2xlIDwgMCApIGRlbHRhQW5nbGUgKz0gdHdvUGk7XG5cdFx0d2hpbGUgKCBkZWx0YUFuZ2xlID4gdHdvUGkgKSBkZWx0YUFuZ2xlIC09IHR3b1BpO1xuXG5cdFx0aWYgKCBkZWx0YUFuZ2xlIDwgTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdGlmICggc2FtZVBvaW50cyApIHtcblxuXHRcdFx0XHRkZWx0YUFuZ2xlID0gMDtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRkZWx0YUFuZ2xlID0gdHdvUGk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5hQ2xvY2t3aXNlID09PSB0cnVlICYmICEgc2FtZVBvaW50cyApIHtcblxuXHRcdFx0aWYgKCBkZWx0YUFuZ2xlID09PSB0d29QaSApIHtcblxuXHRcdFx0XHRkZWx0YUFuZ2xlID0gLSB0d29QaTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRkZWx0YUFuZ2xlID0gZGVsdGFBbmdsZSAtIHR3b1BpO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBhbmdsZSA9IHRoaXMuYVN0YXJ0QW5nbGUgKyB0ICogZGVsdGFBbmdsZTtcblx0XHRsZXQgeCA9IHRoaXMuYVggKyB0aGlzLnhSYWRpdXMgKiBNYXRoLmNvcyggYW5nbGUgKTtcblx0XHRsZXQgeSA9IHRoaXMuYVkgKyB0aGlzLnlSYWRpdXMgKiBNYXRoLnNpbiggYW5nbGUgKTtcblxuXHRcdGlmICggdGhpcy5hUm90YXRpb24gIT09IDAgKSB7XG5cblx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKCB0aGlzLmFSb3RhdGlvbiApO1xuXHRcdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4oIHRoaXMuYVJvdGF0aW9uICk7XG5cblx0XHRcdGNvbnN0IHR4ID0geCAtIHRoaXMuYVg7XG5cdFx0XHRjb25zdCB0eSA9IHkgLSB0aGlzLmFZO1xuXG5cdFx0XHQvLyBSb3RhdGUgdGhlIHBvaW50IGFib3V0IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuXG5cdFx0XHR4ID0gdHggKiBjb3MgLSB0eSAqIHNpbiArIHRoaXMuYVg7XG5cdFx0XHR5ID0gdHggKiBzaW4gKyB0eSAqIGNvcyArIHRoaXMuYVk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnQuc2V0KCB4LCB5ICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5hWCA9IHNvdXJjZS5hWDtcblx0XHR0aGlzLmFZID0gc291cmNlLmFZO1xuXG5cdFx0dGhpcy54UmFkaXVzID0gc291cmNlLnhSYWRpdXM7XG5cdFx0dGhpcy55UmFkaXVzID0gc291cmNlLnlSYWRpdXM7XG5cblx0XHR0aGlzLmFTdGFydEFuZ2xlID0gc291cmNlLmFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0gc291cmNlLmFFbmRBbmdsZTtcblxuXHRcdHRoaXMuYUNsb2Nrd2lzZSA9IHNvdXJjZS5hQ2xvY2t3aXNlO1xuXG5cdFx0dGhpcy5hUm90YXRpb24gPSBzb3VyY2UuYVJvdGF0aW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEuYVggPSB0aGlzLmFYO1xuXHRcdGRhdGEuYVkgPSB0aGlzLmFZO1xuXG5cdFx0ZGF0YS54UmFkaXVzID0gdGhpcy54UmFkaXVzO1xuXHRcdGRhdGEueVJhZGl1cyA9IHRoaXMueVJhZGl1cztcblxuXHRcdGRhdGEuYVN0YXJ0QW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlO1xuXHRcdGRhdGEuYUVuZEFuZ2xlID0gdGhpcy5hRW5kQW5nbGU7XG5cblx0XHRkYXRhLmFDbG9ja3dpc2UgPSB0aGlzLmFDbG9ja3dpc2U7XG5cblx0XHRkYXRhLmFSb3RhdGlvbiA9IHRoaXMuYVJvdGF0aW9uO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMuYVggPSBqc29uLmFYO1xuXHRcdHRoaXMuYVkgPSBqc29uLmFZO1xuXG5cdFx0dGhpcy54UmFkaXVzID0ganNvbi54UmFkaXVzO1xuXHRcdHRoaXMueVJhZGl1cyA9IGpzb24ueVJhZGl1cztcblxuXHRcdHRoaXMuYVN0YXJ0QW5nbGUgPSBqc29uLmFTdGFydEFuZ2xlO1xuXHRcdHRoaXMuYUVuZEFuZ2xlID0ganNvbi5hRW5kQW5nbGU7XG5cblx0XHR0aGlzLmFDbG9ja3dpc2UgPSBqc29uLmFDbG9ja3dpc2U7XG5cblx0XHR0aGlzLmFSb3RhdGlvbiA9IGpzb24uYVJvdGF0aW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkVsbGlwc2VDdXJ2ZS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmUgPSB0cnVlO1xuXG5jbGFzcyBBcmNDdXJ2ZSBleHRlbmRzIEVsbGlwc2VDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoIGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApIHtcblxuXHRcdHN1cGVyKCBhWCwgYVksIGFSYWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdBcmNDdXJ2ZSc7XG5cblx0fVxuXG59XG5cbkFyY0N1cnZlLnByb3RvdHlwZS5pc0FyY0N1cnZlID0gdHJ1ZTtcblxuLyoqXG4gKiBDZW50cmlwZXRhbCBDYXRtdWxsUm9tIEN1cnZlIC0gd2hpY2ggaXMgdXNlZnVsIGZvciBhdm9pZGluZ1xuICogY3VzcHMgYW5kIHNlbGYtaW50ZXJzZWN0aW9ucyBpbiBub24tdW5pZm9ybSBjYXRtdWxsIHJvbSBjdXJ2ZXMuXG4gKiBodHRwOi8vd3d3LmNlbXl1a3NlbC5jb20vcmVzZWFyY2gvY2F0bXVsbHJvbV9wYXJhbS9jYXRtdWxscm9tLnBkZlxuICpcbiAqIGN1cnZlLnR5cGUgYWNjZXB0cyBjZW50cmlwZXRhbChkZWZhdWx0KSwgY2hvcmRhbCBhbmQgY2F0bXVsbHJvbVxuICogY3VydmUudGVuc2lvbiBpcyB1c2VkIGZvciBjYXRtdWxscm9tIHdoaWNoIGRlZmF1bHRzIHRvIDAuNVxuICovXG5cblxuLypcbkJhc2VkIG9uIGFuIG9wdGltaXplZCBjKysgc29sdXRpb24gaW5cbiAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvOTQ4OTczNi9jYXRtdWxsLXJvbS1jdXJ2ZS13aXRoLW5vLWN1c3BzLWFuZC1uby1zZWxmLWludGVyc2VjdGlvbnMvXG4gLSBodHRwOi8vaWRlb25lLmNvbS9Ob0ViVk1cblxuVGhpcyBDdWJpY1BvbHkgY2xhc3MgY291bGQgYmUgdXNlZCBmb3IgcmV1c2luZyBzb21lIHZhcmlhYmxlcyBhbmQgY2FsY3VsYXRpb25zLFxuYnV0IGZvciB0aHJlZS5qcyBjdXJ2ZSB1c2UsIGl0IGNvdWxkIGJlIHBvc3NpYmxlIGlubGluZWQgYW5kIGZsYXR0ZW4gaW50byBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsXG53aGljaCBjYW4gYmUgcGxhY2VkIGluIEN1cnZlVXRpbHMuXG4qL1xuXG5mdW5jdGlvbiBDdWJpY1BvbHkoKSB7XG5cblx0bGV0IGMwID0gMCwgYzEgPSAwLCBjMiA9IDAsIGMzID0gMDtcblxuXHQvKlxuXHQgKiBDb21wdXRlIGNvZWZmaWNpZW50cyBmb3IgYSBjdWJpYyBwb2x5bm9taWFsXG5cdCAqICAgcChzKSA9IGMwICsgYzEqcyArIGMyKnNeMiArIGMzKnNeM1xuXHQgKiBzdWNoIHRoYXRcblx0ICogICBwKDApID0geDAsIHAoMSkgPSB4MVxuXHQgKiAgYW5kXG5cdCAqICAgcCcoMCkgPSB0MCwgcCcoMSkgPSB0MS5cblx0ICovXG5cdGZ1bmN0aW9uIGluaXQoIHgwLCB4MSwgdDAsIHQxICkge1xuXG5cdFx0YzAgPSB4MDtcblx0XHRjMSA9IHQwO1xuXHRcdGMyID0gLSAzICogeDAgKyAzICogeDEgLSAyICogdDAgLSB0MTtcblx0XHRjMyA9IDIgKiB4MCAtIDIgKiB4MSArIHQwICsgdDE7XG5cblx0fVxuXG5cdHJldHVybiB7XG5cblx0XHRpbml0Q2F0bXVsbFJvbTogZnVuY3Rpb24gKCB4MCwgeDEsIHgyLCB4MywgdGVuc2lvbiApIHtcblxuXHRcdFx0aW5pdCggeDEsIHgyLCB0ZW5zaW9uICogKCB4MiAtIHgwICksIHRlbnNpb24gKiAoIHgzIC0geDEgKSApO1xuXG5cdFx0fSxcblxuXHRcdGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTogZnVuY3Rpb24gKCB4MCwgeDEsIHgyLCB4MywgZHQwLCBkdDEsIGR0MiApIHtcblxuXHRcdFx0Ly8gY29tcHV0ZSB0YW5nZW50cyB3aGVuIHBhcmFtZXRlcml6ZWQgaW4gW3QxLHQyXVxuXHRcdFx0bGV0IHQxID0gKCB4MSAtIHgwICkgLyBkdDAgLSAoIHgyIC0geDAgKSAvICggZHQwICsgZHQxICkgKyAoIHgyIC0geDEgKSAvIGR0MTtcblx0XHRcdGxldCB0MiA9ICggeDIgLSB4MSApIC8gZHQxIC0gKCB4MyAtIHgxICkgLyAoIGR0MSArIGR0MiApICsgKCB4MyAtIHgyICkgLyBkdDI7XG5cblx0XHRcdC8vIHJlc2NhbGUgdGFuZ2VudHMgZm9yIHBhcmFtZXRyaXphdGlvbiBpbiBbMCwxXVxuXHRcdFx0dDEgKj0gZHQxO1xuXHRcdFx0dDIgKj0gZHQxO1xuXG5cdFx0XHRpbml0KCB4MSwgeDIsIHQxLCB0MiApO1xuXG5cdFx0fSxcblxuXHRcdGNhbGM6IGZ1bmN0aW9uICggdCApIHtcblxuXHRcdFx0Y29uc3QgdDIgPSB0ICogdDtcblx0XHRcdGNvbnN0IHQzID0gdDIgKiB0O1xuXHRcdFx0cmV0dXJuIGMwICsgYzEgKiB0ICsgYzIgKiB0MiArIGMzICogdDM7XG5cblx0XHR9XG5cblx0fTtcblxufVxuXG4vL1xuXG5jb25zdCB0bXAgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgcHggPSBuZXcgQ3ViaWNQb2x5KCksIHB5ID0gbmV3IEN1YmljUG9seSgpLCBweiA9IG5ldyBDdWJpY1BvbHkoKTtcblxuY2xhc3MgQ2F0bXVsbFJvbUN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggcG9pbnRzID0gW10sIGNsb3NlZCA9IGZhbHNlLCBjdXJ2ZVR5cGUgPSAnY2VudHJpcGV0YWwnLCB0ZW5zaW9uID0gMC41ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDYXRtdWxsUm9tQ3VydmUzJztcblxuXHRcdHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXHRcdHRoaXMuY2xvc2VkID0gY2xvc2VkO1xuXHRcdHRoaXMuY3VydmVUeXBlID0gY3VydmVUeXBlO1xuXHRcdHRoaXMudGVuc2lvbiA9IHRlbnNpb247XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cdFx0Y29uc3QgbCA9IHBvaW50cy5sZW5ndGg7XG5cblx0XHRjb25zdCBwID0gKCBsIC0gKCB0aGlzLmNsb3NlZCA/IDAgOiAxICkgKSAqIHQ7XG5cdFx0bGV0IGludFBvaW50ID0gTWF0aC5mbG9vciggcCApO1xuXHRcdGxldCB3ZWlnaHQgPSBwIC0gaW50UG9pbnQ7XG5cblx0XHRpZiAoIHRoaXMuY2xvc2VkICkge1xuXG5cdFx0XHRpbnRQb2ludCArPSBpbnRQb2ludCA+IDAgPyAwIDogKCBNYXRoLmZsb29yKCBNYXRoLmFicyggaW50UG9pbnQgKSAvIGwgKSArIDEgKSAqIGw7XG5cblx0XHR9IGVsc2UgaWYgKCB3ZWlnaHQgPT09IDAgJiYgaW50UG9pbnQgPT09IGwgLSAxICkge1xuXG5cdFx0XHRpbnRQb2ludCA9IGwgLSAyO1xuXHRcdFx0d2VpZ2h0ID0gMTtcblxuXHRcdH1cblxuXHRcdGxldCBwMCwgcDM7IC8vIDQgcG9pbnRzIChwMSAmIHAyIGRlZmluZWQgYmVsb3cpXG5cblx0XHRpZiAoIHRoaXMuY2xvc2VkIHx8IGludFBvaW50ID4gMCApIHtcblxuXHRcdFx0cDAgPSBwb2ludHNbICggaW50UG9pbnQgLSAxICkgJSBsIF07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBleHRyYXBvbGF0ZSBmaXJzdCBwb2ludFxuXHRcdFx0dG1wLnN1YlZlY3RvcnMoIHBvaW50c1sgMCBdLCBwb2ludHNbIDEgXSApLmFkZCggcG9pbnRzWyAwIF0gKTtcblx0XHRcdHAwID0gdG1wO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgcDEgPSBwb2ludHNbIGludFBvaW50ICUgbCBdO1xuXHRcdGNvbnN0IHAyID0gcG9pbnRzWyAoIGludFBvaW50ICsgMSApICUgbCBdO1xuXG5cdFx0aWYgKCB0aGlzLmNsb3NlZCB8fCBpbnRQb2ludCArIDIgPCBsICkge1xuXG5cdFx0XHRwMyA9IHBvaW50c1sgKCBpbnRQb2ludCArIDIgKSAlIGwgXTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGV4dHJhcG9sYXRlIGxhc3QgcG9pbnRcblx0XHRcdHRtcC5zdWJWZWN0b3JzKCBwb2ludHNbIGwgLSAxIF0sIHBvaW50c1sgbCAtIDIgXSApLmFkZCggcG9pbnRzWyBsIC0gMSBdICk7XG5cdFx0XHRwMyA9IHRtcDtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5jdXJ2ZVR5cGUgPT09ICdjZW50cmlwZXRhbCcgfHwgdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyApIHtcblxuXHRcdFx0Ly8gaW5pdCBDZW50cmlwZXRhbCAvIENob3JkYWwgQ2F0bXVsbC1Sb21cblx0XHRcdGNvbnN0IHBvdyA9IHRoaXMuY3VydmVUeXBlID09PSAnY2hvcmRhbCcgPyAwLjUgOiAwLjI1O1xuXHRcdFx0bGV0IGR0MCA9IE1hdGgucG93KCBwMC5kaXN0YW5jZVRvU3F1YXJlZCggcDEgKSwgcG93ICk7XG5cdFx0XHRsZXQgZHQxID0gTWF0aC5wb3coIHAxLmRpc3RhbmNlVG9TcXVhcmVkKCBwMiApLCBwb3cgKTtcblx0XHRcdGxldCBkdDIgPSBNYXRoLnBvdyggcDIuZGlzdGFuY2VUb1NxdWFyZWQoIHAzICksIHBvdyApO1xuXG5cdFx0XHQvLyBzYWZldHkgY2hlY2sgZm9yIHJlcGVhdGVkIHBvaW50c1xuXHRcdFx0aWYgKCBkdDEgPCAxZS00ICkgZHQxID0gMS4wO1xuXHRcdFx0aWYgKCBkdDAgPCAxZS00ICkgZHQwID0gZHQxO1xuXHRcdFx0aWYgKCBkdDIgPCAxZS00ICkgZHQyID0gZHQxO1xuXG5cdFx0XHRweC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oIHAwLngsIHAxLngsIHAyLngsIHAzLngsIGR0MCwgZHQxLCBkdDIgKTtcblx0XHRcdHB5LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueSwgcDEueSwgcDIueSwgcDMueSwgZHQwLCBkdDEsIGR0MiApO1xuXHRcdFx0cHouaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKCBwMC56LCBwMS56LCBwMi56LCBwMy56LCBkdDAsIGR0MSwgZHQyICk7XG5cblx0XHR9IGVsc2UgaWYgKCB0aGlzLmN1cnZlVHlwZSA9PT0gJ2NhdG11bGxyb20nICkge1xuXG5cdFx0XHRweC5pbml0Q2F0bXVsbFJvbSggcDAueCwgcDEueCwgcDIueCwgcDMueCwgdGhpcy50ZW5zaW9uICk7XG5cdFx0XHRweS5pbml0Q2F0bXVsbFJvbSggcDAueSwgcDEueSwgcDIueSwgcDMueSwgdGhpcy50ZW5zaW9uICk7XG5cdFx0XHRwei5pbml0Q2F0bXVsbFJvbSggcDAueiwgcDEueiwgcDIueiwgcDMueiwgdGhpcy50ZW5zaW9uICk7XG5cblx0XHR9XG5cblx0XHRwb2ludC5zZXQoXG5cdFx0XHRweC5jYWxjKCB3ZWlnaHQgKSxcblx0XHRcdHB5LmNhbGMoIHdlaWdodCApLFxuXHRcdFx0cHouY2FsYyggd2VpZ2h0IClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMucG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzb3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0gc291cmNlLnBvaW50c1sgaSBdO1xuXG5cdFx0XHR0aGlzLnBvaW50cy5wdXNoKCBwb2ludC5jbG9uZSgpICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNsb3NlZCA9IHNvdXJjZS5jbG9zZWQ7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSBzb3VyY2UuY3VydmVUeXBlO1xuXHRcdHRoaXMudGVuc2lvbiA9IHNvdXJjZS50ZW5zaW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEucG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwb2ludCA9IHRoaXMucG9pbnRzWyBpIF07XG5cdFx0XHRkYXRhLnBvaW50cy5wdXNoKCBwb2ludC50b0FycmF5KCkgKTtcblxuXHRcdH1cblxuXHRcdGRhdGEuY2xvc2VkID0gdGhpcy5jbG9zZWQ7XG5cdFx0ZGF0YS5jdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlVHlwZTtcblx0XHRkYXRhLnRlbnNpb24gPSB0aGlzLnRlbnNpb247XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy5wb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24ucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHBvaW50ID0ganNvbi5wb2ludHNbIGkgXTtcblx0XHRcdHRoaXMucG9pbnRzLnB1c2goIG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KCBwb2ludCApICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNsb3NlZCA9IGpzb24uY2xvc2VkO1xuXHRcdHRoaXMuY3VydmVUeXBlID0ganNvbi5jdXJ2ZVR5cGU7XG5cdFx0dGhpcy50ZW5zaW9uID0ganNvbi50ZW5zaW9uO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkNhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMyA9IHRydWU7XG5cbi8qKlxuICogQmV6aWVyIEN1cnZlcyBmb3JtdWxhcyBvYnRhaW5lZCBmcm9tXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CJUMzJUE5emllcl9jdXJ2ZVxuICovXG5cbmZ1bmN0aW9uIENhdG11bGxSb20oIHQsIHAwLCBwMSwgcDIsIHAzICkge1xuXG5cdGNvbnN0IHYwID0gKCBwMiAtIHAwICkgKiAwLjU7XG5cdGNvbnN0IHYxID0gKCBwMyAtIHAxICkgKiAwLjU7XG5cdGNvbnN0IHQyID0gdCAqIHQ7XG5cdGNvbnN0IHQzID0gdCAqIHQyO1xuXHRyZXR1cm4gKCAyICogcDEgLSAyICogcDIgKyB2MCArIHYxICkgKiB0MyArICggLSAzICogcDEgKyAzICogcDIgLSAyICogdjAgLSB2MSApICogdDIgKyB2MCAqIHQgKyBwMTtcblxufVxuXG4vL1xuXG5mdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMCggdCwgcCApIHtcblxuXHRjb25zdCBrID0gMSAtIHQ7XG5cdHJldHVybiBrICogayAqIHA7XG5cbn1cblxuZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyUDEoIHQsIHAgKSB7XG5cblx0cmV0dXJuIDIgKiAoIDEgLSB0ICkgKiB0ICogcDtcblxufVxuXG5mdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMiggdCwgcCApIHtcblxuXHRyZXR1cm4gdCAqIHQgKiBwO1xuXG59XG5cbmZ1bmN0aW9uIFF1YWRyYXRpY0JlemllciggdCwgcDAsIHAxLCBwMiApIHtcblxuXHRyZXR1cm4gUXVhZHJhdGljQmV6aWVyUDAoIHQsIHAwICkgKyBRdWFkcmF0aWNCZXppZXJQMSggdCwgcDEgKSArXG5cdFx0UXVhZHJhdGljQmV6aWVyUDIoIHQsIHAyICk7XG5cbn1cblxuLy9cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMCggdCwgcCApIHtcblxuXHRjb25zdCBrID0gMSAtIHQ7XG5cdHJldHVybiBrICogayAqIGsgKiBwO1xuXG59XG5cbmZ1bmN0aW9uIEN1YmljQmV6aWVyUDEoIHQsIHAgKSB7XG5cblx0Y29uc3QgayA9IDEgLSB0O1xuXHRyZXR1cm4gMyAqIGsgKiBrICogdCAqIHA7XG5cbn1cblxuZnVuY3Rpb24gQ3ViaWNCZXppZXJQMiggdCwgcCApIHtcblxuXHRyZXR1cm4gMyAqICggMSAtIHQgKSAqIHQgKiB0ICogcDtcblxufVxuXG5mdW5jdGlvbiBDdWJpY0JlemllclAzKCB0LCBwICkge1xuXG5cdHJldHVybiB0ICogdCAqIHQgKiBwO1xuXG59XG5cbmZ1bmN0aW9uIEN1YmljQmV6aWVyKCB0LCBwMCwgcDEsIHAyLCBwMyApIHtcblxuXHRyZXR1cm4gQ3ViaWNCZXppZXJQMCggdCwgcDAgKSArIEN1YmljQmV6aWVyUDEoIHQsIHAxICkgKyBDdWJpY0JlemllclAyKCB0LCBwMiApICtcblx0XHRDdWJpY0JlemllclAzKCB0LCBwMyApO1xuXG59XG5cbmNsYXNzIEN1YmljQmV6aWVyQ3VydmUgZXh0ZW5kcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoIHYwID0gbmV3IFZlY3RvcjIoKSwgdjEgPSBuZXcgVmVjdG9yMigpLCB2MiA9IG5ldyBWZWN0b3IyKCksIHYzID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2ZSc7XG5cblx0XHR0aGlzLnYwID0gdjA7XG5cdFx0dGhpcy52MSA9IHYxO1xuXHRcdHRoaXMudjIgPSB2Mjtcblx0XHR0aGlzLnYzID0gdjM7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MiwgdjMgPSB0aGlzLnYzO1xuXG5cdFx0cG9pbnQuc2V0KFxuXHRcdFx0Q3ViaWNCZXppZXIoIHQsIHYwLngsIHYxLngsIHYyLngsIHYzLnggKSxcblx0XHRcdEN1YmljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55LCB2My55IClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMudjAuY29weSggc291cmNlLnYwICk7XG5cdFx0dGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTtcblx0XHR0aGlzLnYyLmNvcHkoIHNvdXJjZS52MiApO1xuXHRcdHRoaXMudjMuY29weSggc291cmNlLnYzICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cdFx0ZGF0YS52MyA9IHRoaXMudjMudG9BcnJheSgpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoIGpzb24udjEgKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApO1xuXHRcdHRoaXMudjMuZnJvbUFycmF5KCBqc29uLnYzICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuQ3ViaWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlID0gdHJ1ZTtcblxuY2xhc3MgQ3ViaWNCZXppZXJDdXJ2ZTMgZXh0ZW5kcyBDdXJ2ZSB7XG5cblx0Y29uc3RydWN0b3IoIHYwID0gbmV3IFZlY3RvcjMoKSwgdjEgPSBuZXcgVmVjdG9yMygpLCB2MiA9IG5ldyBWZWN0b3IzKCksIHYzID0gbmV3IFZlY3RvcjMoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2ZTMnO1xuXG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cdFx0dGhpcy52MyA9IHYzO1xuXG5cdH1cblxuXHRnZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMygpICkge1xuXG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblxuXHRcdGNvbnN0IHYwID0gdGhpcy52MCwgdjEgPSB0aGlzLnYxLCB2MiA9IHRoaXMudjIsIHYzID0gdGhpcy52MztcblxuXHRcdHBvaW50LnNldChcblx0XHRcdEN1YmljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54LCB2My54ICksXG5cdFx0XHRDdWJpY0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSwgdjMueSApLFxuXHRcdFx0Q3ViaWNCZXppZXIoIHQsIHYwLnosIHYxLnosIHYyLnosIHYzLnogKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTtcblx0XHR0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApO1xuXHRcdHRoaXMudjIuY29weSggc291cmNlLnYyICk7XG5cdFx0dGhpcy52My5jb3B5KCBzb3VyY2UudjMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7XG5cdFx0ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpO1xuXHRcdGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYzID0gdGhpcy52My50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAgKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheSgganNvbi52MSApO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7XG5cdFx0dGhpcy52My5mcm9tQXJyYXkoIGpzb24udjMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5DdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMyA9IHRydWU7XG5cbmNsYXNzIExpbmVDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggdjEgPSBuZXcgVmVjdG9yMigpLCB2MiA9IG5ldyBWZWN0b3IyKCkgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xpbmVDdXJ2ZSc7XG5cblx0XHR0aGlzLnYxID0gdjE7XG5cdFx0dGhpcy52MiA9IHYyO1xuXG5cdH1cblxuXHRnZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMigpICkge1xuXG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblxuXHRcdGlmICggdCA9PT0gMSApIHtcblxuXHRcdFx0cG9pbnQuY29weSggdGhpcy52MiApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cG9pbnQuY29weSggdGhpcy52MiApLnN1YiggdGhpcy52MSApO1xuXHRcdFx0cG9pbnQubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMudjEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludDtcblxuXHR9XG5cblx0Ly8gTGluZSBjdXJ2ZSBpcyBsaW5lYXIsIHNvIHdlIGNhbiBvdmVyd3JpdGUgZGVmYXVsdCBnZXRQb2ludEF0XG5cdGdldFBvaW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHUsIG9wdGlvbmFsVGFyZ2V0ICk7XG5cblx0fVxuXG5cdGdldFRhbmdlbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdFx0Y29uc3QgdGFuZ2VudCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7XG5cblx0XHR0YW5nZW50LmNvcHkoIHRoaXMudjIgKS5zdWIoIHRoaXMudjEgKS5ub3JtYWxpemUoKTtcblxuXHRcdHJldHVybiB0YW5nZW50O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMudjEuY29weSggc291cmNlLnYxICk7XG5cdFx0dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7XG5cdFx0ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoIGpzb24udjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5MaW5lQ3VydmUucHJvdG90eXBlLmlzTGluZUN1cnZlID0gdHJ1ZTtcblxuY2xhc3MgTGluZUN1cnZlMyBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggdjEgPSBuZXcgVmVjdG9yMygpLCB2MiA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xpbmVDdXJ2ZTMnO1xuXHRcdHRoaXMuaXNMaW5lQ3VydmUzID0gdHJ1ZTtcblxuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cblx0fVxuXHRnZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgPSBuZXcgVmVjdG9yMygpICkge1xuXG5cdFx0Y29uc3QgcG9pbnQgPSBvcHRpb25hbFRhcmdldDtcblxuXHRcdGlmICggdCA9PT0gMSApIHtcblxuXHRcdFx0cG9pbnQuY29weSggdGhpcy52MiApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0cG9pbnQuY29weSggdGhpcy52MiApLnN1YiggdGhpcy52MSApO1xuXHRcdFx0cG9pbnQubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMudjEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBwb2ludDtcblxuXHR9XG5cdC8vIExpbmUgY3VydmUgaXMgbGluZWFyLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIGRlZmF1bHQgZ2V0UG9pbnRBdFxuXHRnZXRQb2ludEF0KCB1LCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRcdHJldHVybiB0aGlzLmdldFBvaW50KCB1LCBvcHRpb25hbFRhcmdldCApO1xuXG5cdH1cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApO1xuXHRcdHRoaXMudjIuY29weSggc291cmNlLnYyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7XG5cdFx0dGhpcy52Mi5mcm9tQXJyYXkoIGpzb24udjIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBRdWFkcmF0aWNCZXppZXJDdXJ2ZSBleHRlbmRzIEN1cnZlIHtcblxuXHRjb25zdHJ1Y3RvciggdjAgPSBuZXcgVmVjdG9yMigpLCB2MSA9IG5ldyBWZWN0b3IyKCksIHYyID0gbmV3IFZlY3RvcjIoKSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUXVhZHJhdGljQmV6aWVyQ3VydmUnO1xuXG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MjtcblxuXHRcdHBvaW50LnNldChcblx0XHRcdFF1YWRyYXRpY0JlemllciggdCwgdjAueCwgdjEueCwgdjIueCApLFxuXHRcdFx0UXVhZHJhdGljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55IClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHBvaW50O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMudjAuY29weSggc291cmNlLnYwICk7XG5cdFx0dGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTtcblx0XHR0aGlzLnYyLmNvcHkoIHNvdXJjZS52MiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEudjAgPSB0aGlzLnYwLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7XG5cdFx0ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7XG5cdFx0dGhpcy52MS5mcm9tQXJyYXkoIGpzb24udjEgKTtcblx0XHR0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlID0gdHJ1ZTtcblxuY2xhc3MgUXVhZHJhdGljQmV6aWVyQ3VydmUzIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCB2MCA9IG5ldyBWZWN0b3IzKCksIHYxID0gbmV3IFZlY3RvcjMoKSwgdjIgPSBuZXcgVmVjdG9yMygpICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdRdWFkcmF0aWNCZXppZXJDdXJ2ZTMnO1xuXG5cdFx0dGhpcy52MCA9IHYwO1xuXHRcdHRoaXMudjEgPSB2MTtcblx0XHR0aGlzLnYyID0gdjI7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MjtcblxuXHRcdHBvaW50LnNldChcblx0XHRcdFF1YWRyYXRpY0JlemllciggdCwgdjAueCwgdjEueCwgdjIueCApLFxuXHRcdFx0UXVhZHJhdGljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55ICksXG5cdFx0XHRRdWFkcmF0aWNCZXppZXIoIHQsIHYwLnosIHYxLnosIHYyLnogKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcG9pbnQ7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTtcblx0XHR0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApO1xuXHRcdHRoaXMudjIuY29weSggc291cmNlLnYyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpO1xuXHRcdGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTtcblx0XHRkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAgKTtcblx0XHR0aGlzLnYxLmZyb21BcnJheSgganNvbi52MSApO1xuXHRcdHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuUXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMyA9IHRydWU7XG5cbmNsYXNzIFNwbGluZUN1cnZlIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCBwb2ludHMgPSBbXSApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnU3BsaW5lQ3VydmUnO1xuXG5cdFx0dGhpcy5wb2ludHMgPSBwb2ludHM7XG5cblx0fVxuXG5cdGdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCA9IG5ldyBWZWN0b3IyKCkgKSB7XG5cblx0XHRjb25zdCBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0O1xuXG5cdFx0Y29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cdFx0Y29uc3QgcCA9ICggcG9pbnRzLmxlbmd0aCAtIDEgKSAqIHQ7XG5cblx0XHRjb25zdCBpbnRQb2ludCA9IE1hdGguZmxvb3IoIHAgKTtcblx0XHRjb25zdCB3ZWlnaHQgPSBwIC0gaW50UG9pbnQ7XG5cblx0XHRjb25zdCBwMCA9IHBvaW50c1sgaW50UG9pbnQgPT09IDAgPyBpbnRQb2ludCA6IGludFBvaW50IC0gMSBdO1xuXHRcdGNvbnN0IHAxID0gcG9pbnRzWyBpbnRQb2ludCBdO1xuXHRcdGNvbnN0IHAyID0gcG9pbnRzWyBpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAyID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDEgXTtcblx0XHRjb25zdCBwMyA9IHBvaW50c1sgaW50UG9pbnQgPiBwb2ludHMubGVuZ3RoIC0gMyA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAyIF07XG5cblx0XHRwb2ludC5zZXQoXG5cdFx0XHRDYXRtdWxsUm9tKCB3ZWlnaHQsIHAwLngsIHAxLngsIHAyLngsIHAzLnggKSxcblx0XHRcdENhdG11bGxSb20oIHdlaWdodCwgcDAueSwgcDEueSwgcDIueSwgcDMueSApXG5cdFx0KTtcblxuXHRcdHJldHVybiBwb2ludDtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc291cmNlLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwb2ludCA9IHNvdXJjZS5wb2ludHNbIGkgXTtcblxuXHRcdFx0dGhpcy5wb2ludHMucHVzaCggcG9pbnQuY2xvbmUoKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEucG9pbnRzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSB0aGlzLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBwb2ludCA9IHRoaXMucG9pbnRzWyBpIF07XG5cdFx0XHRkYXRhLnBvaW50cy5wdXNoKCBwb2ludC50b0FycmF5KCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLnBvaW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcG9pbnQgPSBqc29uLnBvaW50c1sgaSBdO1xuXHRcdFx0dGhpcy5wb2ludHMucHVzaCggbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIHBvaW50ICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5TcGxpbmVDdXJ2ZS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZSA9IHRydWU7XG5cbnZhciBDdXJ2ZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0QXJjQ3VydmU6IEFyY0N1cnZlLFxuXHRDYXRtdWxsUm9tQ3VydmUzOiBDYXRtdWxsUm9tQ3VydmUzLFxuXHRDdWJpY0JlemllckN1cnZlOiBDdWJpY0JlemllckN1cnZlLFxuXHRDdWJpY0JlemllckN1cnZlMzogQ3ViaWNCZXppZXJDdXJ2ZTMsXG5cdEVsbGlwc2VDdXJ2ZTogRWxsaXBzZUN1cnZlLFxuXHRMaW5lQ3VydmU6IExpbmVDdXJ2ZSxcblx0TGluZUN1cnZlMzogTGluZUN1cnZlMyxcblx0UXVhZHJhdGljQmV6aWVyQ3VydmU6IFF1YWRyYXRpY0JlemllckN1cnZlLFxuXHRRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6IFF1YWRyYXRpY0JlemllckN1cnZlMyxcblx0U3BsaW5lQ3VydmU6IFNwbGluZUN1cnZlXG59KTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKlx0Q3VydmVkIFBhdGggLSBhIGN1cnZlIHBhdGggaXMgc2ltcGx5IGEgYXJyYXkgb2YgY29ubmVjdGVkXG4gKiAgY3VydmVzLCBidXQgcmV0YWlucyB0aGUgYXBpIG9mIGEgY3VydmVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuY2xhc3MgQ3VydmVQYXRoIGV4dGVuZHMgQ3VydmUge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdDdXJ2ZVBhdGgnO1xuXG5cdFx0dGhpcy5jdXJ2ZXMgPSBbXTtcblx0XHR0aGlzLmF1dG9DbG9zZSA9IGZhbHNlOyAvLyBBdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgcGF0aFxuXG5cdH1cblxuXHRhZGQoIGN1cnZlICkge1xuXG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHR9XG5cblx0Y2xvc2VQYXRoKCkge1xuXG5cdFx0Ly8gQWRkIGEgbGluZSBjdXJ2ZSBpZiBzdGFydCBhbmQgZW5kIG9mIGxpbmVzIGFyZSBub3QgY29ubmVjdGVkXG5cdFx0Y29uc3Qgc3RhcnRQb2ludCA9IHRoaXMuY3VydmVzWyAwIF0uZ2V0UG9pbnQoIDAgKTtcblx0XHRjb25zdCBlbmRQb2ludCA9IHRoaXMuY3VydmVzWyB0aGlzLmN1cnZlcy5sZW5ndGggLSAxIF0uZ2V0UG9pbnQoIDEgKTtcblxuXHRcdGlmICggISBzdGFydFBvaW50LmVxdWFscyggZW5kUG9pbnQgKSApIHtcblxuXHRcdFx0dGhpcy5jdXJ2ZXMucHVzaCggbmV3IExpbmVDdXJ2ZSggZW5kUG9pbnQsIHN0YXJ0UG9pbnQgKSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBUbyBnZXQgYWNjdXJhdGUgcG9pbnQgd2l0aCByZWZlcmVuY2UgdG9cblx0Ly8gZW50aXJlIHBhdGggZGlzdGFuY2UgYXQgdGltZSB0LFxuXHQvLyBmb2xsb3dpbmcgaGFzIHRvIGJlIGRvbmU6XG5cblx0Ly8gMS4gTGVuZ3RoIG9mIGVhY2ggc3ViIHBhdGggaGF2ZSB0byBiZSBrbm93blxuXHQvLyAyLiBMb2NhdGUgYW5kIGlkZW50aWZ5IHR5cGUgb2YgY3VydmVcblx0Ly8gMy4gR2V0IHQgZm9yIHRoZSBjdXJ2ZVxuXHQvLyA0LiBSZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCh0JylcblxuXHRnZXRQb2ludCggdCwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0XHRjb25zdCBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7XG5cdFx0Y29uc3QgY3VydmVMZW5ndGhzID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcblx0XHRsZXQgaSA9IDA7XG5cblx0XHQvLyBUbyB0aGluayBhYm91dCBib3VuZGFyaWVzIHBvaW50cy5cblxuXHRcdHdoaWxlICggaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGggKSB7XG5cblx0XHRcdGlmICggY3VydmVMZW5ndGhzWyBpIF0gPj0gZCApIHtcblxuXHRcdFx0XHRjb25zdCBkaWZmID0gY3VydmVMZW5ndGhzWyBpIF0gLSBkO1xuXHRcdFx0XHRjb25zdCBjdXJ2ZSA9IHRoaXMuY3VydmVzWyBpIF07XG5cblx0XHRcdFx0Y29uc3Qgc2VnbWVudExlbmd0aCA9IGN1cnZlLmdldExlbmd0aCgpO1xuXHRcdFx0XHRjb25zdCB1ID0gc2VnbWVudExlbmd0aCA9PT0gMCA/IDAgOiAxIC0gZGlmZiAvIHNlZ21lbnRMZW5ndGg7XG5cblx0XHRcdFx0cmV0dXJuIGN1cnZlLmdldFBvaW50QXQoIHUsIG9wdGlvbmFsVGFyZ2V0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aSArKztcblxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXG5cdFx0Ly8gbG9vcCB3aGVyZSBzdW0gIT0gMCwgc3VtID4gZCAsIHN1bSsxIDxkXG5cblx0fVxuXG5cdC8vIFdlIGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgVEhSRUUuQ3VydmUgZ2V0UG9pbnQoKSB3aXRoIGdldExlbmd0aCgpIGJlY2F1c2UgaW5cblx0Ly8gVEhSRUUuQ3VydmUsIGdldExlbmd0aCgpIGRlcGVuZHMgb24gZ2V0UG9pbnQoKSBidXQgaW4gVEhSRUUuQ3VydmVQYXRoXG5cdC8vIGdldFBvaW50KCkgZGVwZW5kcyBvbiBnZXRMZW5ndGhcblxuXHRnZXRMZW5ndGgoKSB7XG5cblx0XHRjb25zdCBsZW5zID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcblx0XHRyZXR1cm4gbGVuc1sgbGVucy5sZW5ndGggLSAxIF07XG5cblx0fVxuXG5cdC8vIGNhY2hlTGVuZ3RocyBtdXN0IGJlIHJlY2FsY3VsYXRlZC5cblx0dXBkYXRlQXJjTGVuZ3RocygpIHtcblxuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMuY2FjaGVMZW5ndGhzID0gbnVsbDtcblx0XHR0aGlzLmdldEN1cnZlTGVuZ3RocygpO1xuXG5cdH1cblxuXHQvLyBDb21wdXRlIGxlbmd0aHMgYW5kIGNhY2hlIHRoZW1cblx0Ly8gV2UgY2Fubm90IG92ZXJ3cml0ZSBnZXRMZW5ndGhzKCkgYmVjYXVzZSBVdG9UIG1hcHBpbmcgdXNlcyBpdC5cblxuXHRnZXRDdXJ2ZUxlbmd0aHMoKSB7XG5cblx0XHQvLyBXZSB1c2UgY2FjaGUgdmFsdWVzIGlmIGN1cnZlcyBhbmQgY2FjaGUgYXJyYXkgYXJlIHNhbWUgbGVuZ3RoXG5cblx0XHRpZiAoIHRoaXMuY2FjaGVMZW5ndGhzICYmIHRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aCA9PT0gdGhpcy5jdXJ2ZXMubGVuZ3RoICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7XG5cblx0XHR9XG5cblx0XHQvLyBHZXQgbGVuZ3RoIG9mIHN1Yi1jdXJ2ZVxuXHRcdC8vIFB1c2ggc3VtcyBpbnRvIGNhY2hlZCBhcnJheVxuXG5cdFx0Y29uc3QgbGVuZ3RocyA9IFtdO1xuXHRcdGxldCBzdW1zID0gMDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHRoaXMuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHN1bXMgKz0gdGhpcy5jdXJ2ZXNbIGkgXS5nZXRMZW5ndGgoKTtcblx0XHRcdGxlbmd0aHMucHVzaCggc3VtcyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5jYWNoZUxlbmd0aHMgPSBsZW5ndGhzO1xuXG5cdFx0cmV0dXJuIGxlbmd0aHM7XG5cblx0fVxuXG5cdGdldFNwYWNlZFBvaW50cyggZGl2aXNpb25zID0gNDAgKSB7XG5cblx0XHRjb25zdCBwb2ludHMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSBkaXZpc2lvbnM7IGkgKysgKSB7XG5cblx0XHRcdHBvaW50cy5wdXNoKCB0aGlzLmdldFBvaW50KCBpIC8gZGl2aXNpb25zICkgKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5hdXRvQ2xvc2UgKSB7XG5cblx0XHRcdHBvaW50cy5wdXNoKCBwb2ludHNbIDAgXSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvaW50cztcblxuXHR9XG5cblx0Z2V0UG9pbnRzKCBkaXZpc2lvbnMgPSAxMiApIHtcblxuXHRcdGNvbnN0IHBvaW50cyA9IFtdO1xuXHRcdGxldCBsYXN0O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBjdXJ2ZXMgPSB0aGlzLmN1cnZlczsgaSA8IGN1cnZlcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGN1cnZlID0gY3VydmVzWyBpIF07XG5cdFx0XHRjb25zdCByZXNvbHV0aW9uID0gKCBjdXJ2ZSAmJiBjdXJ2ZS5pc0VsbGlwc2VDdXJ2ZSApID8gZGl2aXNpb25zICogMlxuXHRcdFx0XHQ6ICggY3VydmUgJiYgKCBjdXJ2ZS5pc0xpbmVDdXJ2ZSB8fCBjdXJ2ZS5pc0xpbmVDdXJ2ZTMgKSApID8gMVxuXHRcdFx0XHRcdDogKCBjdXJ2ZSAmJiBjdXJ2ZS5pc1NwbGluZUN1cnZlICkgPyBkaXZpc2lvbnMgKiBjdXJ2ZS5wb2ludHMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ6IGRpdmlzaW9ucztcblxuXHRcdFx0Y29uc3QgcHRzID0gY3VydmUuZ2V0UG9pbnRzKCByZXNvbHV0aW9uICk7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGogKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgcG9pbnQgPSBwdHNbIGogXTtcblxuXHRcdFx0XHRpZiAoIGxhc3QgJiYgbGFzdC5lcXVhbHMoIHBvaW50ICkgKSBjb250aW51ZTsgLy8gZW5zdXJlcyBubyBjb25zZWN1dGl2ZSBwb2ludHMgYXJlIGR1cGxpY2F0ZXNcblxuXHRcdFx0XHRwb2ludHMucHVzaCggcG9pbnQgKTtcblx0XHRcdFx0bGFzdCA9IHBvaW50O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuYXV0b0Nsb3NlICYmIHBvaW50cy5sZW5ndGggPiAxICYmICEgcG9pbnRzWyBwb2ludHMubGVuZ3RoIC0gMSBdLmVxdWFscyggcG9pbnRzWyAwIF0gKSApIHtcblxuXHRcdFx0cG9pbnRzLnB1c2goIHBvaW50c1sgMCBdICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY3VydmVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzb3VyY2UuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGN1cnZlID0gc291cmNlLmN1cnZlc1sgaSBdO1xuXG5cdFx0XHR0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZS5jbG9uZSgpICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmF1dG9DbG9zZSA9IHNvdXJjZS5hdXRvQ2xvc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTigpO1xuXG5cdFx0ZGF0YS5hdXRvQ2xvc2UgPSB0aGlzLmF1dG9DbG9zZTtcblx0XHRkYXRhLmN1cnZlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY3VydmUgPSB0aGlzLmN1cnZlc1sgaSBdO1xuXHRcdFx0ZGF0YS5jdXJ2ZXMucHVzaCggY3VydmUudG9KU09OKCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRmcm9tSlNPTigganNvbiApIHtcblxuXHRcdHN1cGVyLmZyb21KU09OKCBqc29uICk7XG5cblx0XHR0aGlzLmF1dG9DbG9zZSA9IGpzb24uYXV0b0Nsb3NlO1xuXHRcdHRoaXMuY3VydmVzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBqc29uLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBjdXJ2ZSA9IGpzb24uY3VydmVzWyBpIF07XG5cdFx0XHR0aGlzLmN1cnZlcy5wdXNoKCBuZXcgQ3VydmVzWyBjdXJ2ZS50eXBlIF0oKS5mcm9tSlNPTiggY3VydmUgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNsYXNzIFBhdGggZXh0ZW5kcyBDdXJ2ZVBhdGgge1xuXG5cdGNvbnN0cnVjdG9yKCBwb2ludHMgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdQYXRoJztcblxuXHRcdHRoaXMuY3VycmVudFBvaW50ID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdGlmICggcG9pbnRzICkge1xuXG5cdFx0XHR0aGlzLnNldEZyb21Qb2ludHMoIHBvaW50cyApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzZXRGcm9tUG9pbnRzKCBwb2ludHMgKSB7XG5cblx0XHR0aGlzLm1vdmVUbyggcG9pbnRzWyAwIF0ueCwgcG9pbnRzWyAwIF0ueSApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAxLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMubGluZVRvKCBwb2ludHNbIGkgXS54LCBwb2ludHNbIGkgXS55ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bW92ZVRvKCB4LCB5ICkge1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuc2V0KCB4LCB5ICk7IC8vIFRPRE8gY29uc2lkZXIgcmVmZXJlbmNpbmcgdmVjdG9ycyBpbnN0ZWFkIG9mIGNvcHlpbmc/XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0bGluZVRvKCB4LCB5ICkge1xuXG5cdFx0Y29uc3QgY3VydmUgPSBuZXcgTGluZUN1cnZlKCB0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLCBuZXcgVmVjdG9yMiggeCwgeSApICk7XG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHRcdHRoaXMuY3VycmVudFBvaW50LnNldCggeCwgeSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHF1YWRyYXRpY0N1cnZlVG8oIGFDUHgsIGFDUHksIGFYLCBhWSApIHtcblxuXHRcdGNvbnN0IGN1cnZlID0gbmV3IFF1YWRyYXRpY0JlemllckN1cnZlKFxuXHRcdFx0dGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxcblx0XHRcdG5ldyBWZWN0b3IyKCBhQ1B4LCBhQ1B5ICksXG5cdFx0XHRuZXcgVmVjdG9yMiggYVgsIGFZIClcblx0XHQpO1xuXG5cdFx0dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTtcblxuXHRcdHRoaXMuY3VycmVudFBvaW50LnNldCggYVgsIGFZICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0YmV6aWVyQ3VydmVUbyggYUNQMXgsIGFDUDF5LCBhQ1AyeCwgYUNQMnksIGFYLCBhWSApIHtcblxuXHRcdGNvbnN0IGN1cnZlID0gbmV3IEN1YmljQmV6aWVyQ3VydmUoXG5cdFx0XHR0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGFDUDF4LCBhQ1AxeSApLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGFDUDJ4LCBhQ1AyeSApLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGFYLCBhWSApXG5cdFx0KTtcblxuXHRcdHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7XG5cblx0XHR0aGlzLmN1cnJlbnRQb2ludC5zZXQoIGFYLCBhWSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNwbGluZVRocnUoIHB0cyAvKkFycmF5IG9mIFZlY3RvciovICkge1xuXG5cdFx0Y29uc3QgbnB0cyA9IFsgdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSBdLmNvbmNhdCggcHRzICk7XG5cblx0XHRjb25zdCBjdXJ2ZSA9IG5ldyBTcGxpbmVDdXJ2ZSggbnB0cyApO1xuXHRcdHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7XG5cblx0XHR0aGlzLmN1cnJlbnRQb2ludC5jb3B5KCBwdHNbIHB0cy5sZW5ndGggLSAxIF0gKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhcmMoIGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApIHtcblxuXHRcdGNvbnN0IHgwID0gdGhpcy5jdXJyZW50UG9pbnQueDtcblx0XHRjb25zdCB5MCA9IHRoaXMuY3VycmVudFBvaW50Lnk7XG5cblx0XHR0aGlzLmFic2FyYyggYVggKyB4MCwgYVkgKyB5MCwgYVJhZGl1cyxcblx0XHRcdGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhYnNhcmMoIGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApIHtcblxuXHRcdHRoaXMuYWJzZWxsaXBzZSggYVgsIGFZLCBhUmFkaXVzLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZWxsaXBzZSggYVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKSB7XG5cblx0XHRjb25zdCB4MCA9IHRoaXMuY3VycmVudFBvaW50Lng7XG5cdFx0Y29uc3QgeTAgPSB0aGlzLmN1cnJlbnRQb2ludC55O1xuXG5cdFx0dGhpcy5hYnNlbGxpcHNlKCBhWCArIHgwLCBhWSArIHkwLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhYnNlbGxpcHNlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHtcblxuXHRcdGNvbnN0IGN1cnZlID0gbmV3IEVsbGlwc2VDdXJ2ZSggYVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKTtcblxuXHRcdGlmICggdGhpcy5jdXJ2ZXMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0Ly8gaWYgYSBwcmV2aW91cyBjdXJ2ZSBpcyBwcmVzZW50LCBhdHRlbXB0IHRvIGpvaW5cblx0XHRcdGNvbnN0IGZpcnN0UG9pbnQgPSBjdXJ2ZS5nZXRQb2ludCggMCApO1xuXG5cdFx0XHRpZiAoICEgZmlyc3RQb2ludC5lcXVhbHMoIHRoaXMuY3VycmVudFBvaW50ICkgKSB7XG5cblx0XHRcdFx0dGhpcy5saW5lVG8oIGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7XG5cblx0XHRjb25zdCBsYXN0UG9pbnQgPSBjdXJ2ZS5nZXRQb2ludCggMSApO1xuXHRcdHRoaXMuY3VycmVudFBvaW50LmNvcHkoIGxhc3RQb2ludCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jdXJyZW50UG9pbnQuY29weSggc291cmNlLmN1cnJlbnRQb2ludCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGRhdGEuY3VycmVudFBvaW50ID0gdGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0c3VwZXIuZnJvbUpTT04oIGpzb24gKTtcblxuXHRcdHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSgganNvbi5jdXJyZW50UG9pbnQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZSBleHRlbmRzIFBhdGgge1xuXG5cdGNvbnN0cnVjdG9yKCBwb2ludHMgKSB7XG5cblx0XHRzdXBlciggcG9pbnRzICk7XG5cblx0XHR0aGlzLnV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTaGFwZSc7XG5cblx0XHR0aGlzLmhvbGVzID0gW107XG5cblx0fVxuXG5cdGdldFBvaW50c0hvbGVzKCBkaXZpc2lvbnMgKSB7XG5cblx0XHRjb25zdCBob2xlc1B0cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRob2xlc1B0c1sgaSBdID0gdGhpcy5ob2xlc1sgaSBdLmdldFBvaW50cyggZGl2aXNpb25zICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gaG9sZXNQdHM7XG5cblx0fVxuXG5cdC8vIGdldCBwb2ludHMgb2Ygc2hhcGUgYW5kIGhvbGVzIChrZXlwb2ludHMgYmFzZWQgb24gc2VnbWVudHMgcGFyYW1ldGVyKVxuXG5cdGV4dHJhY3RQb2ludHMoIGRpdmlzaW9ucyApIHtcblxuXHRcdHJldHVybiB7XG5cblx0XHRcdHNoYXBlOiB0aGlzLmdldFBvaW50cyggZGl2aXNpb25zICksXG5cdFx0XHRob2xlczogdGhpcy5nZXRQb2ludHNIb2xlcyggZGl2aXNpb25zIClcblxuXHRcdH07XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5ob2xlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc291cmNlLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGhvbGUgPSBzb3VyY2UuaG9sZXNbIGkgXTtcblxuXHRcdFx0dGhpcy5ob2xlcy5wdXNoKCBob2xlLmNsb25lKCkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7XG5cdFx0ZGF0YS5ob2xlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gdGhpcy5ob2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBob2xlID0gdGhpcy5ob2xlc1sgaSBdO1xuXHRcdFx0ZGF0YS5ob2xlcy5wdXNoKCBob2xlLnRvSlNPTigpICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cblx0ZnJvbUpTT04oIGpzb24gKSB7XG5cblx0XHRzdXBlci5mcm9tSlNPTigganNvbiApO1xuXG5cdFx0dGhpcy51dWlkID0ganNvbi51dWlkO1xuXHRcdHRoaXMuaG9sZXMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24uaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgaG9sZSA9IGpzb24uaG9sZXNbIGkgXTtcblx0XHRcdHRoaXMuaG9sZXMucHVzaCggbmV3IFBhdGgoKS5mcm9tSlNPTiggaG9sZSApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuLyoqXG4gKiBQb3J0IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9lYXJjdXQgKHYyLjIuMilcbiAqL1xuXG5jb25zdCBFYXJjdXQgPSB7XG5cblx0dHJpYW5ndWxhdGU6IGZ1bmN0aW9uICggZGF0YSwgaG9sZUluZGljZXMsIGRpbSA9IDIgKSB7XG5cblx0XHRjb25zdCBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcblx0XHRjb25zdCBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbIDAgXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuXHRcdGxldCBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KCBkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlICk7XG5cdFx0Y29uc3QgdHJpYW5nbGVzID0gW107XG5cblx0XHRpZiAoICEgb3V0ZXJOb2RlIHx8IG91dGVyTm9kZS5uZXh0ID09PSBvdXRlck5vZGUucHJldiApIHJldHVybiB0cmlhbmdsZXM7XG5cblx0XHRsZXQgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgaW52U2l6ZTtcblxuXHRcdGlmICggaGFzSG9sZXMgKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyggZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltICk7XG5cblx0XHQvLyBpZiB0aGUgc2hhcGUgaXMgbm90IHRvbyBzaW1wbGUsIHdlJ2xsIHVzZSB6LW9yZGVyIGN1cnZlIGhhc2ggbGF0ZXI7IGNhbGN1bGF0ZSBwb2x5Z29uIGJib3hcblx0XHRpZiAoIGRhdGEubGVuZ3RoID4gODAgKiBkaW0gKSB7XG5cblx0XHRcdG1pblggPSBtYXhYID0gZGF0YVsgMCBdO1xuXHRcdFx0bWluWSA9IG1heFkgPSBkYXRhWyAxIF07XG5cblx0XHRcdGZvciAoIGxldCBpID0gZGltOyBpIDwgb3V0ZXJMZW47IGkgKz0gZGltICkge1xuXG5cdFx0XHRcdHggPSBkYXRhWyBpIF07XG5cdFx0XHRcdHkgPSBkYXRhWyBpICsgMSBdO1xuXHRcdFx0XHRpZiAoIHggPCBtaW5YICkgbWluWCA9IHg7XG5cdFx0XHRcdGlmICggeSA8IG1pblkgKSBtaW5ZID0geTtcblx0XHRcdFx0aWYgKCB4ID4gbWF4WCApIG1heFggPSB4O1xuXHRcdFx0XHRpZiAoIHkgPiBtYXhZICkgbWF4WSA9IHk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gbWluWCwgbWluWSBhbmQgaW52U2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cblx0XHRcdGludlNpemUgPSBNYXRoLm1heCggbWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZICk7XG5cdFx0XHRpbnZTaXplID0gaW52U2l6ZSAhPT0gMCA/IDEgLyBpbnZTaXplIDogMDtcblxuXHRcdH1cblxuXHRcdGVhcmN1dExpbmtlZCggb3V0ZXJOb2RlLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSApO1xuXG5cdFx0cmV0dXJuIHRyaWFuZ2xlcztcblxuXHR9XG5cbn07XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdCggZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBjbG9ja3dpc2UgKSB7XG5cblx0bGV0IGksIGxhc3Q7XG5cblx0aWYgKCBjbG9ja3dpc2UgPT09ICggc2lnbmVkQXJlYSggZGF0YSwgc3RhcnQsIGVuZCwgZGltICkgPiAwICkgKSB7XG5cblx0XHRmb3IgKCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltICkgbGFzdCA9IGluc2VydE5vZGUoIGksIGRhdGFbIGkgXSwgZGF0YVsgaSArIDEgXSwgbGFzdCApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRmb3IgKCBpID0gZW5kIC0gZGltOyBpID49IHN0YXJ0OyBpIC09IGRpbSApIGxhc3QgPSBpbnNlcnROb2RlKCBpLCBkYXRhWyBpIF0sIGRhdGFbIGkgKyAxIF0sIGxhc3QgKTtcblxuXHR9XG5cblx0aWYgKCBsYXN0ICYmIGVxdWFscyggbGFzdCwgbGFzdC5uZXh0ICkgKSB7XG5cblx0XHRyZW1vdmVOb2RlKCBsYXN0ICk7XG5cdFx0bGFzdCA9IGxhc3QubmV4dDtcblxuXHR9XG5cblx0cmV0dXJuIGxhc3Q7XG5cbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyggc3RhcnQsIGVuZCApIHtcblxuXHRpZiAoICEgc3RhcnQgKSByZXR1cm4gc3RhcnQ7XG5cdGlmICggISBlbmQgKSBlbmQgPSBzdGFydDtcblxuXHRsZXQgcCA9IHN0YXJ0LFxuXHRcdGFnYWluO1xuXHRkbyB7XG5cblx0XHRhZ2FpbiA9IGZhbHNlO1xuXG5cdFx0aWYgKCAhIHAuc3RlaW5lciAmJiAoIGVxdWFscyggcCwgcC5uZXh0ICkgfHwgYXJlYSggcC5wcmV2LCBwLCBwLm5leHQgKSA9PT0gMCApICkge1xuXG5cdFx0XHRyZW1vdmVOb2RlKCBwICk7XG5cdFx0XHRwID0gZW5kID0gcC5wcmV2O1xuXHRcdFx0aWYgKCBwID09PSBwLm5leHQgKSBicmVhaztcblx0XHRcdGFnYWluID0gdHJ1ZTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHAgPSBwLm5leHQ7XG5cblx0XHR9XG5cblx0fSB3aGlsZSAoIGFnYWluIHx8IHAgIT09IGVuZCApO1xuXG5cdHJldHVybiBlbmQ7XG5cbn1cblxuLy8gbWFpbiBlYXIgc2xpY2luZyBsb29wIHdoaWNoIHRyaWFuZ3VsYXRlcyBhIHBvbHlnb24gKGdpdmVuIGFzIGEgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoIGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIHBhc3MgKSB7XG5cblx0aWYgKCAhIGVhciApIHJldHVybjtcblxuXHQvLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5cdGlmICggISBwYXNzICYmIGludlNpemUgKSBpbmRleEN1cnZlKCBlYXIsIG1pblgsIG1pblksIGludlNpemUgKTtcblxuXHRsZXQgc3RvcCA9IGVhcixcblx0XHRwcmV2LCBuZXh0O1xuXG5cdC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuXHR3aGlsZSAoIGVhci5wcmV2ICE9PSBlYXIubmV4dCApIHtcblxuXHRcdHByZXYgPSBlYXIucHJldjtcblx0XHRuZXh0ID0gZWFyLm5leHQ7XG5cblx0XHRpZiAoIGludlNpemUgPyBpc0Vhckhhc2hlZCggZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplICkgOiBpc0VhciggZWFyICkgKSB7XG5cblx0XHRcdC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG5cdFx0XHR0cmlhbmdsZXMucHVzaCggcHJldi5pIC8gZGltICk7XG5cdFx0XHR0cmlhbmdsZXMucHVzaCggZWFyLmkgLyBkaW0gKTtcblx0XHRcdHRyaWFuZ2xlcy5wdXNoKCBuZXh0LmkgLyBkaW0gKTtcblxuXHRcdFx0cmVtb3ZlTm9kZSggZWFyICk7XG5cblx0XHRcdC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRleCBsZWFkcyB0byBsZXNzIHNsaXZlciB0cmlhbmdsZXNcblx0XHRcdGVhciA9IG5leHQubmV4dDtcblx0XHRcdHN0b3AgPSBuZXh0Lm5leHQ7XG5cblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0fVxuXG5cdFx0ZWFyID0gbmV4dDtcblxuXHRcdC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG5cdFx0aWYgKCBlYXIgPT09IHN0b3AgKSB7XG5cblx0XHRcdC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG5cdFx0XHRpZiAoICEgcGFzcyApIHtcblxuXHRcdFx0XHRlYXJjdXRMaW5rZWQoIGZpbHRlclBvaW50cyggZWFyICksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAxICk7XG5cblx0XHRcdFx0Ly8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcblxuXHRcdFx0fSBlbHNlIGlmICggcGFzcyA9PT0gMSApIHtcblxuXHRcdFx0XHRlYXIgPSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKCBmaWx0ZXJQb2ludHMoIGVhciApLCB0cmlhbmdsZXMsIGRpbSApO1xuXHRcdFx0XHRlYXJjdXRMaW5rZWQoIGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDIgKTtcblxuXHRcdFx0XHQvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBwYXNzID09PSAyICkge1xuXG5cdFx0XHRcdHNwbGl0RWFyY3V0KCBlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7XG5cblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoIGVhciApIHtcblxuXHRjb25zdCBhID0gZWFyLnByZXYsXG5cdFx0YiA9IGVhcixcblx0XHRjID0gZWFyLm5leHQ7XG5cblx0aWYgKCBhcmVhKCBhLCBiLCBjICkgPj0gMCApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuXHQvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxuXHRsZXQgcCA9IGVhci5uZXh0Lm5leHQ7XG5cblx0d2hpbGUgKCBwICE9PSBlYXIucHJldiApIHtcblxuXHRcdGlmICggcG9pbnRJblRyaWFuZ2xlKCBhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmXG5cdFx0XHRhcmVhKCBwLnByZXYsIHAsIHAubmV4dCApID49IDAgKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAubmV4dDtcblxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG5cbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoIGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSApIHtcblxuXHRjb25zdCBhID0gZWFyLnByZXYsXG5cdFx0YiA9IGVhcixcblx0XHRjID0gZWFyLm5leHQ7XG5cblx0aWYgKCBhcmVhKCBhLCBiLCBjICkgPj0gMCApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuXHQvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZFxuXHRjb25zdCBtaW5UWCA9IGEueCA8IGIueCA/ICggYS54IDwgYy54ID8gYS54IDogYy54ICkgOiAoIGIueCA8IGMueCA/IGIueCA6IGMueCApLFxuXHRcdG1pblRZID0gYS55IDwgYi55ID8gKCBhLnkgPCBjLnkgPyBhLnkgOiBjLnkgKSA6ICggYi55IDwgYy55ID8gYi55IDogYy55ICksXG5cdFx0bWF4VFggPSBhLnggPiBiLnggPyAoIGEueCA+IGMueCA/IGEueCA6IGMueCApIDogKCBiLnggPiBjLnggPyBiLnggOiBjLnggKSxcblx0XHRtYXhUWSA9IGEueSA+IGIueSA/ICggYS55ID4gYy55ID8gYS55IDogYy55ICkgOiAoIGIueSA+IGMueSA/IGIueSA6IGMueSApO1xuXG5cdC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG5cdGNvbnN0IG1pblogPSB6T3JkZXIoIG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgaW52U2l6ZSApLFxuXHRcdG1heFogPSB6T3JkZXIoIG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgaW52U2l6ZSApO1xuXG5cdGxldCBwID0gZWFyLnByZXZaLFxuXHRcdG4gPSBlYXIubmV4dFo7XG5cblx0Ly8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gYm90aCBkaXJlY3Rpb25zXG5cdHdoaWxlICggcCAmJiBwLnogPj0gbWluWiAmJiBuICYmIG4ueiA8PSBtYXhaICkge1xuXG5cdFx0aWYgKCBwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuXHRcdFx0cG9pbnRJblRyaWFuZ2xlKCBhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmXG5cdFx0XHRhcmVhKCBwLnByZXYsIHAsIHAubmV4dCApID49IDAgKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAucHJldlo7XG5cblx0XHRpZiAoIG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXG5cdFx0XHRwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55ICkgJiZcblx0XHRcdGFyZWEoIG4ucHJldiwgbiwgbi5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTtcblx0XHRuID0gbi5uZXh0WjtcblxuXHR9XG5cblx0Ly8gbG9vayBmb3IgcmVtYWluaW5nIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcblx0d2hpbGUgKCBwICYmIHAueiA+PSBtaW5aICkge1xuXG5cdFx0aWYgKCBwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuXHRcdFx0cG9pbnRJblRyaWFuZ2xlKCBhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmXG5cdFx0XHRhcmVhKCBwLnByZXYsIHAsIHAubmV4dCApID49IDAgKSByZXR1cm4gZmFsc2U7XG5cdFx0cCA9IHAucHJldlo7XG5cblx0fVxuXG5cdC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG5cdHdoaWxlICggbiAmJiBuLnogPD0gbWF4WiApIHtcblxuXHRcdGlmICggbiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcblx0XHRcdHBvaW50SW5UcmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkgKSAmJlxuXHRcdFx0YXJlYSggbi5wcmV2LCBuLCBuLm5leHQgKSA+PSAwICkgcmV0dXJuIGZhbHNlO1xuXHRcdG4gPSBuLm5leHRaO1xuXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcblxufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyggc3RhcnQsIHRyaWFuZ2xlcywgZGltICkge1xuXG5cdGxldCBwID0gc3RhcnQ7XG5cdGRvIHtcblxuXHRcdGNvbnN0IGEgPSBwLnByZXYsXG5cdFx0XHRiID0gcC5uZXh0Lm5leHQ7XG5cblx0XHRpZiAoICEgZXF1YWxzKCBhLCBiICkgJiYgaW50ZXJzZWN0cyggYSwgcCwgcC5uZXh0LCBiICkgJiYgbG9jYWxseUluc2lkZSggYSwgYiApICYmIGxvY2FsbHlJbnNpZGUoIGIsIGEgKSApIHtcblxuXHRcdFx0dHJpYW5nbGVzLnB1c2goIGEuaSAvIGRpbSApO1xuXHRcdFx0dHJpYW5nbGVzLnB1c2goIHAuaSAvIGRpbSApO1xuXHRcdFx0dHJpYW5nbGVzLnB1c2goIGIuaSAvIGRpbSApO1xuXG5cdFx0XHQvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG5cdFx0XHRyZW1vdmVOb2RlKCBwICk7XG5cdFx0XHRyZW1vdmVOb2RlKCBwLm5leHQgKTtcblxuXHRcdFx0cCA9IHN0YXJ0ID0gYjtcblxuXHRcdH1cblxuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IHN0YXJ0ICk7XG5cblx0cmV0dXJuIGZpbHRlclBvaW50cyggcCApO1xuXG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dCggc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICkge1xuXG5cdC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG5cdGxldCBhID0gc3RhcnQ7XG5cdGRvIHtcblxuXHRcdGxldCBiID0gYS5uZXh0Lm5leHQ7XG5cdFx0d2hpbGUgKCBiICE9PSBhLnByZXYgKSB7XG5cblx0XHRcdGlmICggYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKCBhLCBiICkgKSB7XG5cblx0XHRcdFx0Ly8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuXHRcdFx0XHRsZXQgYyA9IHNwbGl0UG9seWdvbiggYSwgYiApO1xuXG5cdFx0XHRcdC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG5cdFx0XHRcdGEgPSBmaWx0ZXJQb2ludHMoIGEsIGEubmV4dCApO1xuXHRcdFx0XHRjID0gZmlsdGVyUG9pbnRzKCBjLCBjLm5leHQgKTtcblxuXHRcdFx0XHQvLyBydW4gZWFyY3V0IG9uIGVhY2ggaGFsZlxuXHRcdFx0XHRlYXJjdXRMaW5rZWQoIGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7XG5cdFx0XHRcdGVhcmN1dExpbmtlZCggYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHR9XG5cblx0XHRcdGIgPSBiLm5leHQ7XG5cblx0XHR9XG5cblx0XHRhID0gYS5uZXh0O1xuXG5cdH0gd2hpbGUgKCBhICE9PSBzdGFydCApO1xuXG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKCBkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0gKSB7XG5cblx0Y29uc3QgcXVldWUgPSBbXTtcblx0bGV0IGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuXHRmb3IgKCBpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpICsrICkge1xuXG5cdFx0c3RhcnQgPSBob2xlSW5kaWNlc1sgaSBdICogZGltO1xuXHRcdGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbIGkgKyAxIF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcblx0XHRsaXN0ID0gbGlua2VkTGlzdCggZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSApO1xuXHRcdGlmICggbGlzdCA9PT0gbGlzdC5uZXh0ICkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcblx0XHRxdWV1ZS5wdXNoKCBnZXRMZWZ0bW9zdCggbGlzdCApICk7XG5cblx0fVxuXG5cdHF1ZXVlLnNvcnQoIGNvbXBhcmVYICk7XG5cblx0Ly8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcblx0Zm9yICggaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRlbGltaW5hdGVIb2xlKCBxdWV1ZVsgaSBdLCBvdXRlck5vZGUgKTtcblx0XHRvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMoIG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQgKTtcblxuXHR9XG5cblx0cmV0dXJuIG91dGVyTm9kZTtcblxufVxuXG5mdW5jdGlvbiBjb21wYXJlWCggYSwgYiApIHtcblxuXHRyZXR1cm4gYS54IC0gYi54O1xuXG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZSggaG9sZSwgb3V0ZXJOb2RlICkge1xuXG5cdG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKCBob2xlLCBvdXRlck5vZGUgKTtcblx0aWYgKCBvdXRlck5vZGUgKSB7XG5cblx0XHRjb25zdCBiID0gc3BsaXRQb2x5Z29uKCBvdXRlck5vZGUsIGhvbGUgKTtcblxuXHRcdC8vIGZpbHRlciBjb2xsaW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuXHRcdGZpbHRlclBvaW50cyggb3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCApO1xuXHRcdGZpbHRlclBvaW50cyggYiwgYi5uZXh0ICk7XG5cblx0fVxuXG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKCBob2xlLCBvdXRlck5vZGUgKSB7XG5cblx0bGV0IHAgPSBvdXRlck5vZGU7XG5cdGNvbnN0IGh4ID0gaG9sZS54O1xuXHRjb25zdCBoeSA9IGhvbGUueTtcblx0bGV0IHF4ID0gLSBJbmZpbml0eSwgbTtcblxuXHQvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XG5cdC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcblx0ZG8ge1xuXG5cdFx0aWYgKCBoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkgJiYgcC5uZXh0LnkgIT09IHAueSApIHtcblxuXHRcdFx0Y29uc3QgeCA9IHAueCArICggaHkgLSBwLnkgKSAqICggcC5uZXh0LnggLSBwLnggKSAvICggcC5uZXh0LnkgLSBwLnkgKTtcblx0XHRcdGlmICggeCA8PSBoeCAmJiB4ID4gcXggKSB7XG5cblx0XHRcdFx0cXggPSB4O1xuXHRcdFx0XHRpZiAoIHggPT09IGh4ICkge1xuXG5cdFx0XHRcdFx0aWYgKCBoeSA9PT0gcC55ICkgcmV0dXJuIHA7XG5cdFx0XHRcdFx0aWYgKCBoeSA9PT0gcC5uZXh0LnkgKSByZXR1cm4gcC5uZXh0O1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRwID0gcC5uZXh0O1xuXG5cdH0gd2hpbGUgKCBwICE9PSBvdXRlck5vZGUgKTtcblxuXHRpZiAoICEgbSApIHJldHVybiBudWxsO1xuXG5cdGlmICggaHggPT09IHF4ICkgcmV0dXJuIG07IC8vIGhvbGUgdG91Y2hlcyBvdXRlciBzZWdtZW50OyBwaWNrIGxlZnRtb3N0IGVuZHBvaW50XG5cblx0Ly8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xuXHQvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcblx0Ly8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuXHRjb25zdCBzdG9wID0gbSxcblx0XHRteCA9IG0ueCxcblx0XHRteSA9IG0ueTtcblx0bGV0IHRhbk1pbiA9IEluZmluaXR5LCB0YW47XG5cblx0cCA9IG07XG5cblx0ZG8ge1xuXG5cdFx0aWYgKCBoeCA+PSBwLnggJiYgcC54ID49IG14ICYmIGh4ICE9PSBwLnggJiZcblx0XHRcdFx0cG9pbnRJblRyaWFuZ2xlKCBoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSApICkge1xuXG5cdFx0XHR0YW4gPSBNYXRoLmFicyggaHkgLSBwLnkgKSAvICggaHggLSBwLnggKTsgLy8gdGFuZ2VudGlhbFxuXG5cdFx0XHRpZiAoIGxvY2FsbHlJbnNpZGUoIHAsIGhvbGUgKSAmJiAoIHRhbiA8IHRhbk1pbiB8fCAoIHRhbiA9PT0gdGFuTWluICYmICggcC54ID4gbS54IHx8ICggcC54ID09PSBtLnggJiYgc2VjdG9yQ29udGFpbnNTZWN0b3IoIG0sIHAgKSApICkgKSApICkge1xuXG5cdFx0XHRcdG0gPSBwO1xuXHRcdFx0XHR0YW5NaW4gPSB0YW47XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IHN0b3AgKTtcblxuXHRyZXR1cm4gbTtcblxufVxuXG4vLyB3aGV0aGVyIHNlY3RvciBpbiB2ZXJ0ZXggbSBjb250YWlucyBzZWN0b3IgaW4gdmVydGV4IHAgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXNcbmZ1bmN0aW9uIHNlY3RvckNvbnRhaW5zU2VjdG9yKCBtLCBwICkge1xuXG5cdHJldHVybiBhcmVhKCBtLnByZXYsIG0sIHAucHJldiApIDwgMCAmJiBhcmVhKCBwLm5leHQsIG0sIG0ubmV4dCApIDwgMDtcblxufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKCBzdGFydCwgbWluWCwgbWluWSwgaW52U2l6ZSApIHtcblxuXHRsZXQgcCA9IHN0YXJ0O1xuXHRkbyB7XG5cblx0XHRpZiAoIHAueiA9PT0gbnVsbCApIHAueiA9IHpPcmRlciggcC54LCBwLnksIG1pblgsIG1pblksIGludlNpemUgKTtcblx0XHRwLnByZXZaID0gcC5wcmV2O1xuXHRcdHAubmV4dFogPSBwLm5leHQ7XG5cdFx0cCA9IHAubmV4dDtcblxuXHR9IHdoaWxlICggcCAhPT0gc3RhcnQgKTtcblxuXHRwLnByZXZaLm5leHRaID0gbnVsbDtcblx0cC5wcmV2WiA9IG51bGw7XG5cblx0c29ydExpbmtlZCggcCApO1xuXG59XG5cbi8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdlIHNvcnQgYWxnb3JpdGhtXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxuZnVuY3Rpb24gc29ydExpbmtlZCggbGlzdCApIHtcblxuXHRsZXQgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG5cdFx0aW5TaXplID0gMTtcblxuXHRkbyB7XG5cblx0XHRwID0gbGlzdDtcblx0XHRsaXN0ID0gbnVsbDtcblx0XHR0YWlsID0gbnVsbDtcblx0XHRudW1NZXJnZXMgPSAwO1xuXG5cdFx0d2hpbGUgKCBwICkge1xuXG5cdFx0XHRudW1NZXJnZXMgKys7XG5cdFx0XHRxID0gcDtcblx0XHRcdHBTaXplID0gMDtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaW5TaXplOyBpICsrICkge1xuXG5cdFx0XHRcdHBTaXplICsrO1xuXHRcdFx0XHRxID0gcS5uZXh0Wjtcblx0XHRcdFx0aWYgKCAhIHEgKSBicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRxU2l6ZSA9IGluU2l6ZTtcblxuXHRcdFx0d2hpbGUgKCBwU2l6ZSA+IDAgfHwgKCBxU2l6ZSA+IDAgJiYgcSApICkge1xuXG5cdFx0XHRcdGlmICggcFNpemUgIT09IDAgJiYgKCBxU2l6ZSA9PT0gMCB8fCAhIHEgfHwgcC56IDw9IHEueiApICkge1xuXG5cdFx0XHRcdFx0ZSA9IHA7XG5cdFx0XHRcdFx0cCA9IHAubmV4dFo7XG5cdFx0XHRcdFx0cFNpemUgLS07XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGUgPSBxO1xuXHRcdFx0XHRcdHEgPSBxLm5leHRaO1xuXHRcdFx0XHRcdHFTaXplIC0tO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHRhaWwgKSB0YWlsLm5leHRaID0gZTtcblx0XHRcdFx0ZWxzZSBsaXN0ID0gZTtcblxuXHRcdFx0XHRlLnByZXZaID0gdGFpbDtcblx0XHRcdFx0dGFpbCA9IGU7XG5cblx0XHRcdH1cblxuXHRcdFx0cCA9IHE7XG5cblx0XHR9XG5cblx0XHR0YWlsLm5leHRaID0gbnVsbDtcblx0XHRpblNpemUgKj0gMjtcblxuXHR9IHdoaWxlICggbnVtTWVyZ2VzID4gMSApO1xuXG5cdHJldHVybiBsaXN0O1xuXG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIGludmVyc2Ugb2YgdGhlIGxvbmdlciBzaWRlIG9mIGRhdGEgYmJveFxuZnVuY3Rpb24gek9yZGVyKCB4LCB5LCBtaW5YLCBtaW5ZLCBpbnZTaXplICkge1xuXG5cdC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2Vcblx0eCA9IDMyNzY3ICogKCB4IC0gbWluWCApICogaW52U2l6ZTtcblx0eSA9IDMyNzY3ICogKCB5IC0gbWluWSApICogaW52U2l6ZTtcblxuXHR4ID0gKCB4IHwgKCB4IDw8IDggKSApICYgMHgwMEZGMDBGRjtcblx0eCA9ICggeCB8ICggeCA8PCA0ICkgKSAmIDB4MEYwRjBGMEY7XG5cdHggPSAoIHggfCAoIHggPDwgMiApICkgJiAweDMzMzMzMzMzO1xuXHR4ID0gKCB4IHwgKCB4IDw8IDEgKSApICYgMHg1NTU1NTU1NTtcblxuXHR5ID0gKCB5IHwgKCB5IDw8IDggKSApICYgMHgwMEZGMDBGRjtcblx0eSA9ICggeSB8ICggeSA8PCA0ICkgKSAmIDB4MEYwRjBGMEY7XG5cdHkgPSAoIHkgfCAoIHkgPDwgMiApICkgJiAweDMzMzMzMzMzO1xuXHR5ID0gKCB5IHwgKCB5IDw8IDEgKSApICYgMHg1NTU1NTU1NTtcblxuXHRyZXR1cm4geCB8ICggeSA8PCAxICk7XG5cbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3QoIHN0YXJ0ICkge1xuXG5cdGxldCBwID0gc3RhcnQsXG5cdFx0bGVmdG1vc3QgPSBzdGFydDtcblx0ZG8ge1xuXG5cdFx0aWYgKCBwLnggPCBsZWZ0bW9zdC54IHx8ICggcC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkgKSApIGxlZnRtb3N0ID0gcDtcblx0XHRwID0gcC5uZXh0O1xuXG5cdH0gd2hpbGUgKCBwICE9PSBzdGFydCApO1xuXG5cdHJldHVybiBsZWZ0bW9zdDtcblxufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoIGF4LCBheSwgYngsIGJ5LCBjeCwgY3ksIHB4LCBweSApIHtcblxuXHRyZXR1cm4gKCBjeCAtIHB4ICkgKiAoIGF5IC0gcHkgKSAtICggYXggLSBweCApICogKCBjeSAtIHB5ICkgPj0gMCAmJlxuXHRcdFx0KCBheCAtIHB4ICkgKiAoIGJ5IC0gcHkgKSAtICggYnggLSBweCApICogKCBheSAtIHB5ICkgPj0gMCAmJlxuXHRcdFx0KCBieCAtIHB4ICkgKiAoIGN5IC0gcHkgKSAtICggY3ggLSBweCApICogKCBieSAtIHB5ICkgPj0gMDtcblxufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbCggYSwgYiApIHtcblxuXHRyZXR1cm4gYS5uZXh0LmkgIT09IGIuaSAmJiBhLnByZXYuaSAhPT0gYi5pICYmICEgaW50ZXJzZWN0c1BvbHlnb24oIGEsIGIgKSAmJiAvLyBkb25lcyd0IGludGVyc2VjdCBvdGhlciBlZGdlc1xuXHRcdCggbG9jYWxseUluc2lkZSggYSwgYiApICYmIGxvY2FsbHlJbnNpZGUoIGIsIGEgKSAmJiBtaWRkbGVJbnNpZGUoIGEsIGIgKSAmJiAvLyBsb2NhbGx5IHZpc2libGVcblx0XHQoIGFyZWEoIGEucHJldiwgYSwgYi5wcmV2ICkgfHwgYXJlYSggYSwgYi5wcmV2LCBiICkgKSB8fCAvLyBkb2VzIG5vdCBjcmVhdGUgb3Bwb3NpdGUtZmFjaW5nIHNlY3RvcnNcblx0XHRlcXVhbHMoIGEsIGIgKSAmJiBhcmVhKCBhLnByZXYsIGEsIGEubmV4dCApID4gMCAmJiBhcmVhKCBiLnByZXYsIGIsIGIubmV4dCApID4gMCApOyAvLyBzcGVjaWFsIHplcm8tbGVuZ3RoIGNhc2VcblxufVxuXG4vLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXG5mdW5jdGlvbiBhcmVhKCBwLCBxLCByICkge1xuXG5cdHJldHVybiAoIHEueSAtIHAueSApICogKCByLnggLSBxLnggKSAtICggcS54IC0gcC54ICkgKiAoIHIueSAtIHEueSApO1xuXG59XG5cbi8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJlIGVxdWFsXG5mdW5jdGlvbiBlcXVhbHMoIHAxLCBwMiApIHtcblxuXHRyZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xuXG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMoIHAxLCBxMSwgcDIsIHEyICkge1xuXG5cdGNvbnN0IG8xID0gc2lnbiggYXJlYSggcDEsIHExLCBwMiApICk7XG5cdGNvbnN0IG8yID0gc2lnbiggYXJlYSggcDEsIHExLCBxMiApICk7XG5cdGNvbnN0IG8zID0gc2lnbiggYXJlYSggcDIsIHEyLCBwMSApICk7XG5cdGNvbnN0IG80ID0gc2lnbiggYXJlYSggcDIsIHEyLCBxMSApICk7XG5cblx0aWYgKCBvMSAhPT0gbzIgJiYgbzMgIT09IG80ICkgcmV0dXJuIHRydWU7IC8vIGdlbmVyYWwgY2FzZVxuXG5cdGlmICggbzEgPT09IDAgJiYgb25TZWdtZW50KCBwMSwgcDIsIHExICkgKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBwMiBhcmUgY29sbGluZWFyIGFuZCBwMiBsaWVzIG9uIHAxcTFcblx0aWYgKCBvMiA9PT0gMCAmJiBvblNlZ21lbnQoIHAxLCBxMiwgcTEgKSApIHJldHVybiB0cnVlOyAvLyBwMSwgcTEgYW5kIHEyIGFyZSBjb2xsaW5lYXIgYW5kIHEyIGxpZXMgb24gcDFxMVxuXHRpZiAoIG8zID09PSAwICYmIG9uU2VnbWVudCggcDIsIHAxLCBxMiApICkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcDEgYXJlIGNvbGxpbmVhciBhbmQgcDEgbGllcyBvbiBwMnEyXG5cdGlmICggbzQgPT09IDAgJiYgb25TZWdtZW50KCBwMiwgcTEsIHEyICkgKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBxMSBhcmUgY29sbGluZWFyIGFuZCBxMSBsaWVzIG9uIHAycTJcblxuXHRyZXR1cm4gZmFsc2U7XG5cbn1cblxuLy8gZm9yIGNvbGxpbmVhciBwb2ludHMgcCwgcSwgciwgY2hlY2sgaWYgcG9pbnQgcSBsaWVzIG9uIHNlZ21lbnQgcHJcbmZ1bmN0aW9uIG9uU2VnbWVudCggcCwgcSwgciApIHtcblxuXHRyZXR1cm4gcS54IDw9IE1hdGgubWF4KCBwLngsIHIueCApICYmIHEueCA+PSBNYXRoLm1pbiggcC54LCByLnggKSAmJiBxLnkgPD0gTWF0aC5tYXgoIHAueSwgci55ICkgJiYgcS55ID49IE1hdGgubWluKCBwLnksIHIueSApO1xuXG59XG5cbmZ1bmN0aW9uIHNpZ24oIG51bSApIHtcblxuXHRyZXR1cm4gbnVtID4gMCA/IDEgOiBudW0gPCAwID8gLSAxIDogMDtcblxufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xuZnVuY3Rpb24gaW50ZXJzZWN0c1BvbHlnb24oIGEsIGIgKSB7XG5cblx0bGV0IHAgPSBhO1xuXHRkbyB7XG5cblx0XHRpZiAoIHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuXHRcdFx0XHRpbnRlcnNlY3RzKCBwLCBwLm5leHQsIGEsIGIgKSApIHJldHVybiB0cnVlO1xuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IGEgKTtcblxuXHRyZXR1cm4gZmFsc2U7XG5cbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKCBhLCBiICkge1xuXG5cdHJldHVybiBhcmVhKCBhLnByZXYsIGEsIGEubmV4dCApIDwgMCA/XG5cdFx0YXJlYSggYSwgYiwgYS5uZXh0ICkgPj0gMCAmJiBhcmVhKCBhLCBhLnByZXYsIGIgKSA+PSAwIDpcblx0XHRhcmVhKCBhLCBiLCBhLnByZXYgKSA8IDAgfHwgYXJlYSggYSwgYS5uZXh0LCBiICkgPCAwO1xuXG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKCBhLCBiICkge1xuXG5cdGxldCBwID0gYSxcblx0XHRpbnNpZGUgPSBmYWxzZTtcblx0Y29uc3QgcHggPSAoIGEueCArIGIueCApIC8gMixcblx0XHRweSA9ICggYS55ICsgYi55ICkgLyAyO1xuXHRkbyB7XG5cblx0XHRpZiAoICggKCBwLnkgPiBweSApICE9PSAoIHAubmV4dC55ID4gcHkgKSApICYmIHAubmV4dC55ICE9PSBwLnkgJiZcblx0XHRcdFx0KCBweCA8ICggcC5uZXh0LnggLSBwLnggKSAqICggcHkgLSBwLnkgKSAvICggcC5uZXh0LnkgLSBwLnkgKSArIHAueCApIClcblx0XHRcdGluc2lkZSA9ICEgaW5zaWRlO1xuXHRcdHAgPSBwLm5leHQ7XG5cblx0fSB3aGlsZSAoIHAgIT09IGEgKTtcblxuXHRyZXR1cm4gaW5zaWRlO1xuXG59XG5cbi8vIGxpbmsgdHdvIHBvbHlnb24gdmVydGljZXMgd2l0aCBhIGJyaWRnZTsgaWYgdGhlIHZlcnRpY2VzIGJlbG9uZyB0byB0aGUgc2FtZSByaW5nLCBpdCBzcGxpdHMgcG9seWdvbiBpbnRvIHR3bztcbi8vIGlmIG9uZSBiZWxvbmdzIHRvIHRoZSBvdXRlciByaW5nIGFuZCBhbm90aGVyIHRvIGEgaG9sZSwgaXQgbWVyZ2VzIGl0IGludG8gYSBzaW5nbGUgcmluZ1xuZnVuY3Rpb24gc3BsaXRQb2x5Z29uKCBhLCBiICkge1xuXG5cdGNvbnN0IGEyID0gbmV3IE5vZGUoIGEuaSwgYS54LCBhLnkgKSxcblx0XHRiMiA9IG5ldyBOb2RlKCBiLmksIGIueCwgYi55ICksXG5cdFx0YW4gPSBhLm5leHQsXG5cdFx0YnAgPSBiLnByZXY7XG5cblx0YS5uZXh0ID0gYjtcblx0Yi5wcmV2ID0gYTtcblxuXHRhMi5uZXh0ID0gYW47XG5cdGFuLnByZXYgPSBhMjtcblxuXHRiMi5uZXh0ID0gYTI7XG5cdGEyLnByZXYgPSBiMjtcblxuXHRicC5uZXh0ID0gYjI7XG5cdGIyLnByZXYgPSBicDtcblxuXHRyZXR1cm4gYjI7XG5cbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoIGksIHgsIHksIGxhc3QgKSB7XG5cblx0Y29uc3QgcCA9IG5ldyBOb2RlKCBpLCB4LCB5ICk7XG5cblx0aWYgKCAhIGxhc3QgKSB7XG5cblx0XHRwLnByZXYgPSBwO1xuXHRcdHAubmV4dCA9IHA7XG5cblx0fSBlbHNlIHtcblxuXHRcdHAubmV4dCA9IGxhc3QubmV4dDtcblx0XHRwLnByZXYgPSBsYXN0O1xuXHRcdGxhc3QubmV4dC5wcmV2ID0gcDtcblx0XHRsYXN0Lm5leHQgPSBwO1xuXG5cdH1cblxuXHRyZXR1cm4gcDtcblxufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlKCBwICkge1xuXG5cdHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuXHRwLnByZXYubmV4dCA9IHAubmV4dDtcblxuXHRpZiAoIHAucHJldlogKSBwLnByZXZaLm5leHRaID0gcC5uZXh0Wjtcblx0aWYgKCBwLm5leHRaICkgcC5uZXh0Wi5wcmV2WiA9IHAucHJldlo7XG5cbn1cblxuZnVuY3Rpb24gTm9kZSggaSwgeCwgeSApIHtcblxuXHQvLyB2ZXJ0ZXggaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXlcblx0dGhpcy5pID0gaTtcblxuXHQvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcblx0dGhpcy54ID0geDtcblx0dGhpcy55ID0geTtcblxuXHQvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcblx0dGhpcy5wcmV2ID0gbnVsbDtcblx0dGhpcy5uZXh0ID0gbnVsbDtcblxuXHQvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG5cdHRoaXMueiA9IG51bGw7XG5cblx0Ly8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxuXHR0aGlzLnByZXZaID0gbnVsbDtcblx0dGhpcy5uZXh0WiA9IG51bGw7XG5cblx0Ly8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHN0ZWluZXIgcG9pbnRcblx0dGhpcy5zdGVpbmVyID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gc2lnbmVkQXJlYSggZGF0YSwgc3RhcnQsIGVuZCwgZGltICkge1xuXG5cdGxldCBzdW0gPSAwO1xuXHRmb3IgKCBsZXQgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSApIHtcblxuXHRcdHN1bSArPSAoIGRhdGFbIGogXSAtIGRhdGFbIGkgXSApICogKCBkYXRhWyBpICsgMSBdICsgZGF0YVsgaiArIDEgXSApO1xuXHRcdGogPSBpO1xuXG5cdH1cblxuXHRyZXR1cm4gc3VtO1xuXG59XG5cbmNsYXNzIFNoYXBlVXRpbHMge1xuXG5cdC8vIGNhbGN1bGF0ZSBhcmVhIG9mIHRoZSBjb250b3VyIHBvbHlnb25cblxuXHRzdGF0aWMgYXJlYSggY29udG91ciApIHtcblxuXHRcdGNvbnN0IG4gPSBjb250b3VyLmxlbmd0aDtcblx0XHRsZXQgYSA9IDAuMDtcblxuXHRcdGZvciAoIGxldCBwID0gbiAtIDEsIHEgPSAwOyBxIDwgbjsgcCA9IHEgKysgKSB7XG5cblx0XHRcdGEgKz0gY29udG91clsgcCBdLnggKiBjb250b3VyWyBxIF0ueSAtIGNvbnRvdXJbIHEgXS54ICogY29udG91clsgcCBdLnk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gYSAqIDAuNTtcblxuXHR9XG5cblx0c3RhdGljIGlzQ2xvY2tXaXNlKCBwdHMgKSB7XG5cblx0XHRyZXR1cm4gU2hhcGVVdGlscy5hcmVhKCBwdHMgKSA8IDA7XG5cblx0fVxuXG5cdHN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKCBjb250b3VyLCBob2xlcyApIHtcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107IC8vIGZsYXQgYXJyYXkgb2YgdmVydGljZXMgbGlrZSBbIHgwLHkwLCB4MSx5MSwgeDIseTIsIC4uLiBdXG5cdFx0Y29uc3QgaG9sZUluZGljZXMgPSBbXTsgLy8gYXJyYXkgb2YgaG9sZSBpbmRpY2VzXG5cdFx0Y29uc3QgZmFjZXMgPSBbXTsgLy8gZmluYWwgYXJyYXkgb2YgdmVydGV4IGluZGljZXMgbGlrZSBbIFsgYSxiLGQgXSwgWyBiLGMsZCBdIF1cblxuXHRcdHJlbW92ZUR1cEVuZFB0cyggY29udG91ciApO1xuXHRcdGFkZENvbnRvdXIoIHZlcnRpY2VzLCBjb250b3VyICk7XG5cblx0XHQvL1xuXG5cdFx0bGV0IGhvbGVJbmRleCA9IGNvbnRvdXIubGVuZ3RoO1xuXG5cdFx0aG9sZXMuZm9yRWFjaCggcmVtb3ZlRHVwRW5kUHRzICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBob2xlcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGhvbGVJbmRpY2VzLnB1c2goIGhvbGVJbmRleCApO1xuXHRcdFx0aG9sZUluZGV4ICs9IGhvbGVzWyBpIF0ubGVuZ3RoO1xuXHRcdFx0YWRkQ29udG91ciggdmVydGljZXMsIGhvbGVzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHRjb25zdCB0cmlhbmdsZXMgPSBFYXJjdXQudHJpYW5ndWxhdGUoIHZlcnRpY2VzLCBob2xlSW5kaWNlcyApO1xuXG5cdFx0Ly9cblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkgKz0gMyApIHtcblxuXHRcdFx0ZmFjZXMucHVzaCggdHJpYW5nbGVzLnNsaWNlKCBpLCBpICsgMyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFjZXM7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUR1cEVuZFB0cyggcG9pbnRzICkge1xuXG5cdGNvbnN0IGwgPSBwb2ludHMubGVuZ3RoO1xuXG5cdGlmICggbCA+IDIgJiYgcG9pbnRzWyBsIC0gMSBdLmVxdWFscyggcG9pbnRzWyAwIF0gKSApIHtcblxuXHRcdHBvaW50cy5wb3AoKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gYWRkQ29udG91ciggdmVydGljZXMsIGNvbnRvdXIgKSB7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29udG91ci5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHR2ZXJ0aWNlcy5wdXNoKCBjb250b3VyWyBpIF0ueCApO1xuXHRcdHZlcnRpY2VzLnB1c2goIGNvbnRvdXJbIGkgXS55ICk7XG5cblx0fVxuXG59XG5cbi8qKlxuICogQ3JlYXRlcyBleHRydWRlZCBnZW9tZXRyeSBmcm9tIGEgcGF0aCBzaGFwZS5cbiAqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICpcbiAqICBjdXJ2ZVNlZ21lbnRzOiA8aW50PiwgLy8gbnVtYmVyIG9mIHBvaW50cyBvbiB0aGUgY3VydmVzXG4gKiAgc3RlcHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgcG9pbnRzIGZvciB6LXNpZGUgZXh0cnVzaW9ucyAvIHVzZWQgZm9yIHN1YmRpdmlkaW5nIHNlZ21lbnRzIG9mIGV4dHJ1ZGUgc3BsaW5lIHRvb1xuICogIGRlcHRoOiA8ZmxvYXQ+LCAvLyBEZXB0aCB0byBleHRydWRlIHRoZSBzaGFwZVxuICpcbiAqICBiZXZlbEVuYWJsZWQ6IDxib29sPiwgLy8gdHVybiBvbiBiZXZlbFxuICogIGJldmVsVGhpY2tuZXNzOiA8ZmxvYXQ+LCAvLyBob3cgZGVlcCBpbnRvIHRoZSBvcmlnaW5hbCBzaGFwZSBiZXZlbCBnb2VzXG4gKiAgYmV2ZWxTaXplOiA8ZmxvYXQ+LCAvLyBob3cgZmFyIGZyb20gc2hhcGUgb3V0bGluZSAoaW5jbHVkaW5nIGJldmVsT2Zmc2V0KSBpcyBiZXZlbFxuICogIGJldmVsT2Zmc2V0OiA8ZmxvYXQ+LCAvLyBob3cgZmFyIGZyb20gc2hhcGUgb3V0bGluZSBkb2VzIGJldmVsIHN0YXJ0XG4gKiAgYmV2ZWxTZWdtZW50czogPGludD4sIC8vIG51bWJlciBvZiBiZXZlbCBsYXllcnNcbiAqXG4gKiAgZXh0cnVkZVBhdGg6IDxUSFJFRS5DdXJ2ZT4gLy8gY3VydmUgdG8gZXh0cnVkZSBzaGFwZSBhbG9uZ1xuICpcbiAqICBVVkdlbmVyYXRvcjogPE9iamVjdD4gLy8gb2JqZWN0IHRoYXQgcHJvdmlkZXMgVVYgZ2VuZXJhdG9yIGZ1bmN0aW9uc1xuICpcbiAqIH1cbiAqL1xuXG5jbGFzcyBFeHRydWRlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHNoYXBlcyA9IG5ldyBTaGFwZSggWyBuZXcgVmVjdG9yMiggMC41LCAwLjUgKSwgbmV3IFZlY3RvcjIoIC0gMC41LCAwLjUgKSwgbmV3IFZlY3RvcjIoIC0gMC41LCAtIDAuNSApLCBuZXcgVmVjdG9yMiggMC41LCAtIDAuNSApIF0gKSwgb3B0aW9ucyA9IHt9ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdFeHRydWRlR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2hhcGVzOiBzaGFwZXMsXG5cdFx0XHRvcHRpb25zOiBvcHRpb25zXG5cdFx0fTtcblxuXHRcdHNoYXBlcyA9IEFycmF5LmlzQXJyYXkoIHNoYXBlcyApID8gc2hhcGVzIDogWyBzaGFwZXMgXTtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IHZlcnRpY2VzQXJyYXkgPSBbXTtcblx0XHRjb25zdCB1dkFycmF5ID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbIGkgXTtcblx0XHRcdGFkZFNoYXBlKCBzaGFwZSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXNBcnJheSwgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dkFycmF5LCAyICkgKTtcblxuXHRcdHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcblxuXHRcdC8vIGZ1bmN0aW9uc1xuXG5cdFx0ZnVuY3Rpb24gYWRkU2hhcGUoIHNoYXBlICkge1xuXG5cdFx0XHRjb25zdCBwbGFjZWhvbGRlciA9IFtdO1xuXG5cdFx0XHQvLyBvcHRpb25zXG5cblx0XHRcdGNvbnN0IGN1cnZlU2VnbWVudHMgPSBvcHRpb25zLmN1cnZlU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY3VydmVTZWdtZW50cyA6IDEyO1xuXHRcdFx0Y29uc3Qgc3RlcHMgPSBvcHRpb25zLnN0ZXBzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZXBzIDogMTtcblx0XHRcdGxldCBkZXB0aCA9IG9wdGlvbnMuZGVwdGggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGVwdGggOiAxO1xuXG5cdFx0XHRsZXQgYmV2ZWxFbmFibGVkID0gb3B0aW9ucy5iZXZlbEVuYWJsZWQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxFbmFibGVkIDogdHJ1ZTtcblx0XHRcdGxldCBiZXZlbFRoaWNrbmVzcyA9IG9wdGlvbnMuYmV2ZWxUaGlja25lc3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxUaGlja25lc3MgOiAwLjI7XG5cdFx0XHRsZXQgYmV2ZWxTaXplID0gb3B0aW9ucy5iZXZlbFNpemUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxTaXplIDogYmV2ZWxUaGlja25lc3MgLSAwLjE7XG5cdFx0XHRsZXQgYmV2ZWxPZmZzZXQgPSBvcHRpb25zLmJldmVsT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJldmVsT2Zmc2V0IDogMDtcblx0XHRcdGxldCBiZXZlbFNlZ21lbnRzID0gb3B0aW9ucy5iZXZlbFNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJldmVsU2VnbWVudHMgOiAzO1xuXG5cdFx0XHRjb25zdCBleHRydWRlUGF0aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGg7XG5cblx0XHRcdGNvbnN0IHV2Z2VuID0gb3B0aW9ucy5VVkdlbmVyYXRvciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5VVkdlbmVyYXRvciA6IFdvcmxkVVZHZW5lcmF0b3I7XG5cblx0XHRcdC8vIGRlcHJlY2F0ZWQgb3B0aW9uc1xuXG5cdFx0XHRpZiAoIG9wdGlvbnMuYW1vdW50ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4nICk7XG5cdFx0XHRcdGRlcHRoID0gb3B0aW9ucy5hbW91bnQ7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9cblxuXHRcdFx0bGV0IGV4dHJ1ZGVQdHMsIGV4dHJ1ZGVCeVBhdGggPSBmYWxzZTtcblx0XHRcdGxldCBzcGxpbmVUdWJlLCBiaW5vcm1hbCwgbm9ybWFsLCBwb3NpdGlvbjI7XG5cblx0XHRcdGlmICggZXh0cnVkZVBhdGggKSB7XG5cblx0XHRcdFx0ZXh0cnVkZVB0cyA9IGV4dHJ1ZGVQYXRoLmdldFNwYWNlZFBvaW50cyggc3RlcHMgKTtcblxuXHRcdFx0XHRleHRydWRlQnlQYXRoID0gdHJ1ZTtcblx0XHRcdFx0YmV2ZWxFbmFibGVkID0gZmFsc2U7IC8vIGJldmVscyBub3Qgc3VwcG9ydGVkIGZvciBwYXRoIGV4dHJ1c2lvblxuXG5cdFx0XHRcdC8vIFNFVFVQIFROQiB2YXJpYWJsZXNcblxuXHRcdFx0XHQvLyBUT0RPMSAtIGhhdmUgYSAuaXNDbG9zZWQgaW4gc3BsaW5lP1xuXG5cdFx0XHRcdHNwbGluZVR1YmUgPSBleHRydWRlUGF0aC5jb21wdXRlRnJlbmV0RnJhbWVzKCBzdGVwcywgZmFsc2UgKTtcblxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzcGxpbmVUdWJlLCAnc3BsaW5lVHViZScsIHNwbGluZVR1YmUubm9ybWFscy5sZW5ndGgsICdzdGVwcycsIHN0ZXBzLCAnZXh0cnVkZVB0cycsIGV4dHJ1ZGVQdHMubGVuZ3RoKTtcblxuXHRcdFx0XHRiaW5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRcdG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0XHRcdHBvc2l0aW9uMiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2FmZWd1YXJkcyBpZiBiZXZlbHMgYXJlIG5vdCBlbmFibGVkXG5cblx0XHRcdGlmICggISBiZXZlbEVuYWJsZWQgKSB7XG5cblx0XHRcdFx0YmV2ZWxTZWdtZW50cyA9IDA7XG5cdFx0XHRcdGJldmVsVGhpY2tuZXNzID0gMDtcblx0XHRcdFx0YmV2ZWxTaXplID0gMDtcblx0XHRcdFx0YmV2ZWxPZmZzZXQgPSAwO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIFZhcmlhYmxlcyBpbml0aWFsaXphdGlvblxuXG5cdFx0XHRjb25zdCBzaGFwZVBvaW50cyA9IHNoYXBlLmV4dHJhY3RQb2ludHMoIGN1cnZlU2VnbWVudHMgKTtcblxuXHRcdFx0bGV0IHZlcnRpY2VzID0gc2hhcGVQb2ludHMuc2hhcGU7XG5cdFx0XHRjb25zdCBob2xlcyA9IHNoYXBlUG9pbnRzLmhvbGVzO1xuXG5cdFx0XHRjb25zdCByZXZlcnNlID0gISBTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKCB2ZXJ0aWNlcyApO1xuXG5cdFx0XHRpZiAoIHJldmVyc2UgKSB7XG5cblx0XHRcdFx0dmVydGljZXMgPSB2ZXJ0aWNlcy5yZXZlcnNlKCk7XG5cblx0XHRcdFx0Ly8gTWF5YmUgd2Ugc2hvdWxkIGFsc28gY2hlY2sgaWYgaG9sZXMgYXJlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24sIGp1c3QgdG8gYmUgc2FmZSAuLi5cblxuXHRcdFx0XHRmb3IgKCBsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzWyBoIF07XG5cblx0XHRcdFx0XHRpZiAoIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIGFob2xlICkgKSB7XG5cblx0XHRcdFx0XHRcdGhvbGVzWyBoIF0gPSBhaG9sZS5yZXZlcnNlKCk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblxuXHRcdFx0Y29uc3QgZmFjZXMgPSBTaGFwZVV0aWxzLnRyaWFuZ3VsYXRlU2hhcGUoIHZlcnRpY2VzLCBob2xlcyApO1xuXG5cdFx0XHQvKiBWZXJ0aWNlcyAqL1xuXG5cdFx0XHRjb25zdCBjb250b3VyID0gdmVydGljZXM7IC8vIHZlcnRpY2VzIGhhcyBhbGwgcG9pbnRzIGJ1dCBjb250b3VyIGhhcyBvbmx5IHBvaW50cyBvZiBjaXJjdW1mZXJlbmNlXG5cblx0XHRcdGZvciAoIGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzWyBoIF07XG5cblx0XHRcdFx0dmVydGljZXMgPSB2ZXJ0aWNlcy5jb25jYXQoIGFob2xlICk7XG5cblx0XHRcdH1cblxuXG5cdFx0XHRmdW5jdGlvbiBzY2FsZVB0MiggcHQsIHZlYywgc2l6ZSApIHtcblxuXHRcdFx0XHRpZiAoICEgdmVjICkgY29uc29sZS5lcnJvciggJ1RIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0JyApO1xuXG5cdFx0XHRcdHJldHVybiB2ZWMuY2xvbmUoKS5tdWx0aXBseVNjYWxhciggc2l6ZSApLmFkZCggcHQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB2bGVuID0gdmVydGljZXMubGVuZ3RoLCBmbGVuID0gZmFjZXMubGVuZ3RoO1xuXG5cblx0XHRcdC8vIEZpbmQgZGlyZWN0aW9ucyBmb3IgcG9pbnQgbW92ZW1lbnRcblxuXG5cdFx0XHRmdW5jdGlvbiBnZXRCZXZlbFZlYyggaW5QdCwgaW5QcmV2LCBpbk5leHQgKSB7XG5cblx0XHRcdFx0Ly8gY29tcHV0ZXMgZm9yIGluUHQgdGhlIGNvcnJlc3BvbmRpbmcgcG9pbnQgaW5QdCcgb24gYSBuZXcgY29udG91clxuXHRcdFx0XHQvLyAgIHNoaWZ0ZWQgYnkgMSB1bml0IChsZW5ndGggb2Ygbm9ybWFsaXplZCB2ZWN0b3IpIHRvIHRoZSBsZWZ0XG5cdFx0XHRcdC8vIGlmIHdlIHdhbGsgYWxvbmcgY29udG91ciBjbG9ja3dpc2UsIHRoaXMgbmV3IGNvbnRvdXIgaXMgb3V0c2lkZSB0aGUgb2xkIG9uZVxuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBpblB0JyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgcGFyYWxsZWwgdG8gdGhlIHR3b1xuXHRcdFx0XHQvLyAgYWRqYWNlbnQgZWRnZXMgb2YgaW5QdCBhdCBhIGRpc3RhbmNlIG9mIDEgdW5pdCBvbiB0aGUgbGVmdCBzaWRlLlxuXG5cdFx0XHRcdGxldCB2X3RyYW5zX3gsIHZfdHJhbnNfeSwgc2hyaW5rX2J5OyAvLyByZXN1bHRpbmcgdHJhbnNsYXRpb24gdmVjdG9yIGZvciBpblB0XG5cblx0XHRcdFx0Ly8gZ29vZCByZWFkaW5nIGZvciBnZW9tZXRyeSBhbGdvcml0aG1zIChoZXJlOiBsaW5lLWxpbmUgaW50ZXJzZWN0aW9uKVxuXHRcdFx0XHQvLyBodHRwOi8vZ2VvbWFsZ29yaXRobXMuY29tL2EwNS1faW50ZXJzZWN0LTEuaHRtbFxuXG5cdFx0XHRcdGNvbnN0IHZfcHJldl94ID0gaW5QdC54IC0gaW5QcmV2LngsXG5cdFx0XHRcdFx0dl9wcmV2X3kgPSBpblB0LnkgLSBpblByZXYueTtcblx0XHRcdFx0Y29uc3Qgdl9uZXh0X3ggPSBpbk5leHQueCAtIGluUHQueCxcblx0XHRcdFx0XHR2X25leHRfeSA9IGluTmV4dC55IC0gaW5QdC55O1xuXG5cdFx0XHRcdGNvbnN0IHZfcHJldl9sZW5zcSA9ICggdl9wcmV2X3ggKiB2X3ByZXZfeCArIHZfcHJldl95ICogdl9wcmV2X3kgKTtcblxuXHRcdFx0XHQvLyBjaGVjayBmb3IgY29sbGluZWFyIGVkZ2VzXG5cdFx0XHRcdGNvbnN0IGNvbGxpbmVhcjAgPSAoIHZfcHJldl94ICogdl9uZXh0X3kgLSB2X3ByZXZfeSAqIHZfbmV4dF94ICk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggY29sbGluZWFyMCApID4gTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdFx0XHQvLyBub3QgY29sbGluZWFyXG5cblx0XHRcdFx0XHQvLyBsZW5ndGggb2YgdmVjdG9ycyBmb3Igbm9ybWFsaXppbmdcblxuXHRcdFx0XHRcdGNvbnN0IHZfcHJldl9sZW4gPSBNYXRoLnNxcnQoIHZfcHJldl9sZW5zcSApO1xuXHRcdFx0XHRcdGNvbnN0IHZfbmV4dF9sZW4gPSBNYXRoLnNxcnQoIHZfbmV4dF94ICogdl9uZXh0X3ggKyB2X25leHRfeSAqIHZfbmV4dF95ICk7XG5cblx0XHRcdFx0XHQvLyBzaGlmdCBhZGphY2VudCBwb2ludHMgYnkgdW5pdCB2ZWN0b3JzIHRvIHRoZSBsZWZ0XG5cblx0XHRcdFx0XHRjb25zdCBwdFByZXZTaGlmdF94ID0gKCBpblByZXYueCAtIHZfcHJldl95IC8gdl9wcmV2X2xlbiApO1xuXHRcdFx0XHRcdGNvbnN0IHB0UHJldlNoaWZ0X3kgPSAoIGluUHJldi55ICsgdl9wcmV2X3ggLyB2X3ByZXZfbGVuICk7XG5cblx0XHRcdFx0XHRjb25zdCBwdE5leHRTaGlmdF94ID0gKCBpbk5leHQueCAtIHZfbmV4dF95IC8gdl9uZXh0X2xlbiApO1xuXHRcdFx0XHRcdGNvbnN0IHB0TmV4dFNoaWZ0X3kgPSAoIGluTmV4dC55ICsgdl9uZXh0X3ggLyB2X25leHRfbGVuICk7XG5cblx0XHRcdFx0XHQvLyBzY2FsaW5nIGZhY3RvciBmb3Igdl9wcmV2IHRvIGludGVyc2VjdGlvbiBwb2ludFxuXG5cdFx0XHRcdFx0Y29uc3Qgc2YgPSAoICggcHROZXh0U2hpZnRfeCAtIHB0UHJldlNoaWZ0X3ggKSAqIHZfbmV4dF95IC1cblx0XHRcdFx0XHRcdFx0KCBwdE5leHRTaGlmdF95IC0gcHRQcmV2U2hpZnRfeSApICogdl9uZXh0X3ggKSAvXG5cdFx0XHRcdFx0XHQoIHZfcHJldl94ICogdl9uZXh0X3kgLSB2X3ByZXZfeSAqIHZfbmV4dF94ICk7XG5cblx0XHRcdFx0XHQvLyB2ZWN0b3IgZnJvbSBpblB0IHRvIGludGVyc2VjdGlvbiBwb2ludFxuXG5cdFx0XHRcdFx0dl90cmFuc194ID0gKCBwdFByZXZTaGlmdF94ICsgdl9wcmV2X3ggKiBzZiAtIGluUHQueCApO1xuXHRcdFx0XHRcdHZfdHJhbnNfeSA9ICggcHRQcmV2U2hpZnRfeSArIHZfcHJldl95ICogc2YgLSBpblB0LnkgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IG5vcm1hbGl6ZSEsIG90aGVyd2lzZSBzaGFycCBjb3JuZXJzIGJlY29tZSB1Z2x5XG5cdFx0XHRcdFx0Ly8gIGJ1dCBwcmV2ZW50IGNyYXp5IHNwaWtlc1xuXHRcdFx0XHRcdGNvbnN0IHZfdHJhbnNfbGVuc3EgPSAoIHZfdHJhbnNfeCAqIHZfdHJhbnNfeCArIHZfdHJhbnNfeSAqIHZfdHJhbnNfeSApO1xuXHRcdFx0XHRcdGlmICggdl90cmFuc19sZW5zcSA8PSAyICkge1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIoIHZfdHJhbnNfeCwgdl90cmFuc195ICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRzaHJpbmtfYnkgPSBNYXRoLnNxcnQoIHZfdHJhbnNfbGVuc3EgLyAyICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGhhbmRsZSBzcGVjaWFsIGNhc2Ugb2YgY29sbGluZWFyIGVkZ2VzXG5cblx0XHRcdFx0XHRsZXQgZGlyZWN0aW9uX2VxID0gZmFsc2U7IC8vIGFzc3VtZXM6IG9wcG9zaXRlXG5cblx0XHRcdFx0XHRpZiAoIHZfcHJldl94ID4gTnVtYmVyLkVQU0lMT04gKSB7XG5cblx0XHRcdFx0XHRcdGlmICggdl9uZXh0X3ggPiBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdFx0XHRkaXJlY3Rpb25fZXEgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpZiAoIHZfcHJldl94IDwgLSBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHZfbmV4dF94IDwgLSBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbl9lcSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggTWF0aC5zaWduKCB2X3ByZXZfeSApID09PSBNYXRoLnNpZ24oIHZfbmV4dF95ICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb25fZXEgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBkaXJlY3Rpb25fZXEgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiV2FybmluZzogbGluZXMgYXJlIGEgc3RyYWlnaHQgc2VxdWVuY2VcIik7XG5cdFx0XHRcdFx0XHR2X3RyYW5zX3ggPSAtIHZfcHJldl95O1xuXHRcdFx0XHRcdFx0dl90cmFuc195ID0gdl9wcmV2X3g7XG5cdFx0XHRcdFx0XHRzaHJpbmtfYnkgPSBNYXRoLnNxcnQoIHZfcHJldl9sZW5zcSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJXYXJuaW5nOiBsaW5lcyBhcmUgYSBzdHJhaWdodCBzcGlrZVwiKTtcblx0XHRcdFx0XHRcdHZfdHJhbnNfeCA9IHZfcHJldl94O1xuXHRcdFx0XHRcdFx0dl90cmFuc195ID0gdl9wcmV2X3k7XG5cdFx0XHRcdFx0XHRzaHJpbmtfYnkgPSBNYXRoLnNxcnQoIHZfcHJldl9sZW5zcSAvIDIgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKCB2X3RyYW5zX3ggLyBzaHJpbmtfYnksIHZfdHJhbnNfeSAvIHNocmlua19ieSApO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0Y29uc3QgY29udG91ck1vdmVtZW50cyA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gY29udG91ci5sZW5ndGgsIGogPSBpbCAtIDEsIGsgPSBpICsgMTsgaSA8IGlsOyBpICsrLCBqICsrLCBrICsrICkge1xuXG5cdFx0XHRcdGlmICggaiA9PT0gaWwgKSBqID0gMDtcblx0XHRcdFx0aWYgKCBrID09PSBpbCApIGsgPSAwO1xuXG5cdFx0XHRcdC8vICAoaiktLS0oaSktLS0oaylcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ksaixrJywgaSwgaiAsIGspXG5cblx0XHRcdFx0Y29udG91ck1vdmVtZW50c1sgaSBdID0gZ2V0QmV2ZWxWZWMoIGNvbnRvdXJbIGkgXSwgY29udG91clsgaiBdLCBjb250b3VyWyBrIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBob2xlc01vdmVtZW50cyA9IFtdO1xuXHRcdFx0bGV0IG9uZUhvbGVNb3ZlbWVudHMsIHZlcnRpY2VzTW92ZW1lbnRzID0gY29udG91ck1vdmVtZW50cy5jb25jYXQoKTtcblxuXHRcdFx0Zm9yICggbGV0IGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblxuXHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGFob2xlLmxlbmd0aCwgaiA9IGlsIC0gMSwgayA9IGkgKyAxOyBpIDwgaWw7IGkgKyssIGogKyssIGsgKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGogPT09IGlsICkgaiA9IDA7XG5cdFx0XHRcdFx0aWYgKCBrID09PSBpbCApIGsgPSAwO1xuXG5cdFx0XHRcdFx0Ly8gIChqKS0tLShpKS0tLShrKVxuXHRcdFx0XHRcdG9uZUhvbGVNb3ZlbWVudHNbIGkgXSA9IGdldEJldmVsVmVjKCBhaG9sZVsgaSBdLCBhaG9sZVsgaiBdLCBhaG9sZVsgayBdICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGhvbGVzTW92ZW1lbnRzLnB1c2goIG9uZUhvbGVNb3ZlbWVudHMgKTtcblx0XHRcdFx0dmVydGljZXNNb3ZlbWVudHMgPSB2ZXJ0aWNlc01vdmVtZW50cy5jb25jYXQoIG9uZUhvbGVNb3ZlbWVudHMgKTtcblxuXHRcdFx0fVxuXG5cblx0XHRcdC8vIExvb3AgYmV2ZWxTZWdtZW50cywgMSBmb3IgdGhlIGZyb250LCAxIGZvciB0aGUgYmFja1xuXG5cdFx0XHRmb3IgKCBsZXQgYiA9IDA7IGIgPCBiZXZlbFNlZ21lbnRzOyBiICsrICkge1xuXG5cdFx0XHRcdC8vZm9yICggYiA9IGJldmVsU2VnbWVudHM7IGIgPiAwOyBiIC0tICkge1xuXG5cdFx0XHRcdGNvbnN0IHQgPSBiIC8gYmV2ZWxTZWdtZW50cztcblx0XHRcdFx0Y29uc3QgeiA9IGJldmVsVGhpY2tuZXNzICogTWF0aC5jb3MoIHQgKiBNYXRoLlBJIC8gMiApO1xuXHRcdFx0XHRjb25zdCBicyA9IGJldmVsU2l6ZSAqIE1hdGguc2luKCB0ICogTWF0aC5QSSAvIDIgKSArIGJldmVsT2Zmc2V0O1xuXG5cdFx0XHRcdC8vIGNvbnRyYWN0IHNoYXBlXG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gc2NhbGVQdDIoIGNvbnRvdXJbIGkgXSwgY29udG91ck1vdmVtZW50c1sgaSBdLCBicyApO1xuXG5cdFx0XHRcdFx0diggdmVydC54LCB2ZXJ0LnksIC0geiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBleHBhbmQgaG9sZXNcblxuXHRcdFx0XHRmb3IgKCBsZXQgaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCBhaG9sZSA9IGhvbGVzWyBoIF07XG5cdFx0XHRcdFx0b25lSG9sZU1vdmVtZW50cyA9IGhvbGVzTW92ZW1lbnRzWyBoIF07XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHZlcnQgPSBzY2FsZVB0MiggYWhvbGVbIGkgXSwgb25lSG9sZU1vdmVtZW50c1sgaSBdLCBicyApO1xuXG5cdFx0XHRcdFx0XHR2KCB2ZXJ0LngsIHZlcnQueSwgLSB6ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJzID0gYmV2ZWxTaXplICsgYmV2ZWxPZmZzZXQ7XG5cblx0XHRcdC8vIEJhY2sgZmFjaW5nIHZlcnRpY2VzXG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdmVydCA9IGJldmVsRW5hYmxlZCA/IHNjYWxlUHQyKCB2ZXJ0aWNlc1sgaSBdLCB2ZXJ0aWNlc01vdmVtZW50c1sgaSBdLCBicyApIDogdmVydGljZXNbIGkgXTtcblxuXHRcdFx0XHRpZiAoICEgZXh0cnVkZUJ5UGF0aCApIHtcblxuXHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55LCAwICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIHYoIHZlcnQueCwgdmVydC55ICsgZXh0cnVkZVB0c1sgMCBdLnksIGV4dHJ1ZGVQdHNbIDAgXS54ICk7XG5cblx0XHRcdFx0XHRub3JtYWwuY29weSggc3BsaW5lVHViZS5ub3JtYWxzWyAwIF0gKS5tdWx0aXBseVNjYWxhciggdmVydC54ICk7XG5cdFx0XHRcdFx0Ymlub3JtYWwuY29weSggc3BsaW5lVHViZS5iaW5vcm1hbHNbIDAgXSApLm11bHRpcGx5U2NhbGFyKCB2ZXJ0LnkgKTtcblxuXHRcdFx0XHRcdHBvc2l0aW9uMi5jb3B5KCBleHRydWRlUHRzWyAwIF0gKS5hZGQoIG5vcm1hbCApLmFkZCggYmlub3JtYWwgKTtcblxuXHRcdFx0XHRcdHYoIHBvc2l0aW9uMi54LCBwb3NpdGlvbjIueSwgcG9zaXRpb24yLnogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHN0ZXBwZWQgdmVydGljZXMuLi5cblx0XHRcdC8vIEluY2x1ZGluZyBmcm9udCBmYWNpbmcgdmVydGljZXNcblxuXHRcdFx0Zm9yICggbGV0IHMgPSAxOyBzIDw9IHN0ZXBzOyBzICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0XHRjb25zdCB2ZXJ0ID0gYmV2ZWxFbmFibGVkID8gc2NhbGVQdDIoIHZlcnRpY2VzWyBpIF0sIHZlcnRpY2VzTW92ZW1lbnRzWyBpIF0sIGJzICkgOiB2ZXJ0aWNlc1sgaSBdO1xuXG5cdFx0XHRcdFx0aWYgKCAhIGV4dHJ1ZGVCeVBhdGggKSB7XG5cblx0XHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55LCBkZXB0aCAvIHN0ZXBzICogcyApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gdiggdmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzWyBzIC0gMSBdLnksIGV4dHJ1ZGVQdHNbIHMgLSAxIF0ueCApO1xuXG5cdFx0XHRcdFx0XHRub3JtYWwuY29weSggc3BsaW5lVHViZS5ub3JtYWxzWyBzIF0gKS5tdWx0aXBseVNjYWxhciggdmVydC54ICk7XG5cdFx0XHRcdFx0XHRiaW5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLmJpbm9ybWFsc1sgcyBdICkubXVsdGlwbHlTY2FsYXIoIHZlcnQueSApO1xuXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjIuY29weSggZXh0cnVkZVB0c1sgcyBdICkuYWRkKCBub3JtYWwgKS5hZGQoIGJpbm9ybWFsICk7XG5cblx0XHRcdFx0XHRcdHYoIHBvc2l0aW9uMi54LCBwb3NpdGlvbjIueSwgcG9zaXRpb24yLnogKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXG5cdFx0XHQvLyBBZGQgYmV2ZWwgc2VnbWVudHMgcGxhbmVzXG5cblx0XHRcdC8vZm9yICggYiA9IDE7IGIgPD0gYmV2ZWxTZWdtZW50czsgYiArKyApIHtcblx0XHRcdGZvciAoIGxldCBiID0gYmV2ZWxTZWdtZW50cyAtIDE7IGIgPj0gMDsgYiAtLSApIHtcblxuXHRcdFx0XHRjb25zdCB0ID0gYiAvIGJldmVsU2VnbWVudHM7XG5cdFx0XHRcdGNvbnN0IHogPSBiZXZlbFRoaWNrbmVzcyAqIE1hdGguY29zKCB0ICogTWF0aC5QSSAvIDIgKTtcblx0XHRcdFx0Y29uc3QgYnMgPSBiZXZlbFNpemUgKiBNYXRoLnNpbiggdCAqIE1hdGguUEkgLyAyICkgKyBiZXZlbE9mZnNldDtcblxuXHRcdFx0XHQvLyBjb250cmFjdCBzaGFwZVxuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBjb250b3VyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdmVydCA9IHNjYWxlUHQyKCBjb250b3VyWyBpIF0sIGNvbnRvdXJNb3ZlbWVudHNbIGkgXSwgYnMgKTtcblx0XHRcdFx0XHR2KCB2ZXJ0LngsIHZlcnQueSwgZGVwdGggKyB6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGV4cGFuZCBob2xlc1xuXG5cdFx0XHRcdGZvciAoIGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblx0XHRcdFx0XHRvbmVIb2xlTW92ZW1lbnRzID0gaG9sZXNNb3ZlbWVudHNbIGggXTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgdmVydCA9IHNjYWxlUHQyKCBhaG9sZVsgaSBdLCBvbmVIb2xlTW92ZW1lbnRzWyBpIF0sIGJzICk7XG5cblx0XHRcdFx0XHRcdGlmICggISBleHRydWRlQnlQYXRoICkge1xuXG5cdFx0XHRcdFx0XHRcdHYoIHZlcnQueCwgdmVydC55LCBkZXB0aCArIHogKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHR2KCB2ZXJ0LngsIHZlcnQueSArIGV4dHJ1ZGVQdHNbIHN0ZXBzIC0gMSBdLnksIGV4dHJ1ZGVQdHNbIHN0ZXBzIC0gMSBdLnggKyB6ICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0LyogRmFjZXMgKi9cblxuXHRcdFx0Ly8gVG9wIGFuZCBib3R0b20gZmFjZXNcblxuXHRcdFx0YnVpbGRMaWRGYWNlcygpO1xuXG5cdFx0XHQvLyBTaWRlcyBmYWNlc1xuXG5cdFx0XHRidWlsZFNpZGVGYWNlcygpO1xuXG5cblx0XHRcdC8vLy8vICBJbnRlcm5hbCBmdW5jdGlvbnNcblxuXHRcdFx0ZnVuY3Rpb24gYnVpbGRMaWRGYWNlcygpIHtcblxuXHRcdFx0XHRjb25zdCBzdGFydCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMztcblxuXHRcdFx0XHRpZiAoIGJldmVsRW5hYmxlZCApIHtcblxuXHRcdFx0XHRcdGxldCBsYXllciA9IDA7IC8vIHN0ZXBzICsgMVxuXHRcdFx0XHRcdGxldCBvZmZzZXQgPSB2bGVuICogbGF5ZXI7XG5cblx0XHRcdFx0XHQvLyBCb3R0b20gZmFjZXNcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1sgaSBdO1xuXHRcdFx0XHRcdFx0ZjMoIGZhY2VbIDIgXSArIG9mZnNldCwgZmFjZVsgMSBdICsgb2Zmc2V0LCBmYWNlWyAwIF0gKyBvZmZzZXQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxheWVyID0gc3RlcHMgKyBiZXZlbFNlZ21lbnRzICogMjtcblx0XHRcdFx0XHRvZmZzZXQgPSB2bGVuICogbGF5ZXI7XG5cblx0XHRcdFx0XHQvLyBUb3AgZmFjZXNcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1sgaSBdO1xuXHRcdFx0XHRcdFx0ZjMoIGZhY2VbIDAgXSArIG9mZnNldCwgZmFjZVsgMSBdICsgb2Zmc2V0LCBmYWNlWyAyIF0gKyBvZmZzZXQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gQm90dG9tIGZhY2VzXG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBmbGVuOyBpICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmYWNlID0gZmFjZXNbIGkgXTtcblx0XHRcdFx0XHRcdGYzKCBmYWNlWyAyIF0sIGZhY2VbIDEgXSwgZmFjZVsgMCBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBUb3AgZmFjZXNcblxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZhY2UgPSBmYWNlc1sgaSBdO1xuXHRcdFx0XHRcdFx0ZjMoIGZhY2VbIDAgXSArIHZsZW4gKiBzdGVwcywgZmFjZVsgMSBdICsgdmxlbiAqIHN0ZXBzLCBmYWNlWyAyIF0gKyB2bGVuICogc3RlcHMgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUuYWRkR3JvdXAoIHN0YXJ0LCB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDMgLSBzdGFydCwgMCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBmYWNlcyBmb3IgdGhlIHotc2lkZXMgb2YgdGhlIHNoYXBlXG5cblx0XHRcdGZ1bmN0aW9uIGJ1aWxkU2lkZUZhY2VzKCkge1xuXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzO1xuXHRcdFx0XHRsZXQgbGF5ZXJvZmZzZXQgPSAwO1xuXHRcdFx0XHRzaWRld2FsbHMoIGNvbnRvdXIsIGxheWVyb2Zmc2V0ICk7XG5cdFx0XHRcdGxheWVyb2Zmc2V0ICs9IGNvbnRvdXIubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIGxldCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGFob2xlID0gaG9sZXNbIGggXTtcblx0XHRcdFx0XHRzaWRld2FsbHMoIGFob2xlLCBsYXllcm9mZnNldCApO1xuXG5cdFx0XHRcdFx0Ly8sIHRydWVcblx0XHRcdFx0XHRsYXllcm9mZnNldCArPSBhaG9sZS5sZW5ndGg7XG5cblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0c2NvcGUuYWRkR3JvdXAoIHN0YXJ0LCB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDMgLSBzdGFydCwgMSApO1xuXG5cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gc2lkZXdhbGxzKCBjb250b3VyLCBsYXllcm9mZnNldCApIHtcblxuXHRcdFx0XHRsZXQgaSA9IGNvbnRvdXIubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggLS0gaSA+PSAwICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgaiA9IGk7XG5cdFx0XHRcdFx0bGV0IGsgPSBpIC0gMTtcblx0XHRcdFx0XHRpZiAoIGsgPCAwICkgayA9IGNvbnRvdXIubGVuZ3RoIC0gMTtcblxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coJ2InLCBpLGosIGktMSwgayx2ZXJ0aWNlcy5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IHMgPSAwLCBzbCA9ICggc3RlcHMgKyBiZXZlbFNlZ21lbnRzICogMiApOyBzIDwgc2w7IHMgKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHNsZW4xID0gdmxlbiAqIHM7XG5cdFx0XHRcdFx0XHRjb25zdCBzbGVuMiA9IHZsZW4gKiAoIHMgKyAxICk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGEgPSBsYXllcm9mZnNldCArIGogKyBzbGVuMSxcblx0XHRcdFx0XHRcdFx0YiA9IGxheWVyb2Zmc2V0ICsgayArIHNsZW4xLFxuXHRcdFx0XHRcdFx0XHRjID0gbGF5ZXJvZmZzZXQgKyBrICsgc2xlbjIsXG5cdFx0XHRcdFx0XHRcdGQgPSBsYXllcm9mZnNldCArIGogKyBzbGVuMjtcblxuXHRcdFx0XHRcdFx0ZjQoIGEsIGIsIGMsIGQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gdiggeCwgeSwgeiApIHtcblxuXHRcdFx0XHRwbGFjZWhvbGRlci5wdXNoKCB4ICk7XG5cdFx0XHRcdHBsYWNlaG9sZGVyLnB1c2goIHkgKTtcblx0XHRcdFx0cGxhY2Vob2xkZXIucHVzaCggeiApO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0ZnVuY3Rpb24gZjMoIGEsIGIsIGMgKSB7XG5cblx0XHRcdFx0YWRkVmVydGV4KCBhICk7XG5cdFx0XHRcdGFkZFZlcnRleCggYiApO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoIGMgKTtcblxuXHRcdFx0XHRjb25zdCBuZXh0SW5kZXggPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cdFx0XHRcdGNvbnN0IHV2cyA9IHV2Z2VuLmdlbmVyYXRlVG9wVVYoIHNjb3BlLCB2ZXJ0aWNlc0FycmF5LCBuZXh0SW5kZXggLSAzLCBuZXh0SW5kZXggLSAyLCBuZXh0SW5kZXggLSAxICk7XG5cblx0XHRcdFx0YWRkVVYoIHV2c1sgMCBdICk7XG5cdFx0XHRcdGFkZFVWKCB1dnNbIDEgXSApO1xuXHRcdFx0XHRhZGRVViggdXZzWyAyIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmNCggYSwgYiwgYywgZCApIHtcblxuXHRcdFx0XHRhZGRWZXJ0ZXgoIGEgKTtcblx0XHRcdFx0YWRkVmVydGV4KCBiICk7XG5cdFx0XHRcdGFkZFZlcnRleCggZCApO1xuXG5cdFx0XHRcdGFkZFZlcnRleCggYiApO1xuXHRcdFx0XHRhZGRWZXJ0ZXgoIGMgKTtcblx0XHRcdFx0YWRkVmVydGV4KCBkICk7XG5cblxuXHRcdFx0XHRjb25zdCBuZXh0SW5kZXggPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7XG5cdFx0XHRcdGNvbnN0IHV2cyA9IHV2Z2VuLmdlbmVyYXRlU2lkZVdhbGxVViggc2NvcGUsIHZlcnRpY2VzQXJyYXksIG5leHRJbmRleCAtIDYsIG5leHRJbmRleCAtIDMsIG5leHRJbmRleCAtIDIsIG5leHRJbmRleCAtIDEgKTtcblxuXHRcdFx0XHRhZGRVViggdXZzWyAwIF0gKTtcblx0XHRcdFx0YWRkVVYoIHV2c1sgMSBdICk7XG5cdFx0XHRcdGFkZFVWKCB1dnNbIDMgXSApO1xuXG5cdFx0XHRcdGFkZFVWKCB1dnNbIDEgXSApO1xuXHRcdFx0XHRhZGRVViggdXZzWyAyIF0gKTtcblx0XHRcdFx0YWRkVVYoIHV2c1sgMyBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYWRkVmVydGV4KCBpbmRleCApIHtcblxuXHRcdFx0XHR2ZXJ0aWNlc0FycmF5LnB1c2goIHBsYWNlaG9sZGVyWyBpbmRleCAqIDMgKyAwIF0gKTtcblx0XHRcdFx0dmVydGljZXNBcnJheS5wdXNoKCBwbGFjZWhvbGRlclsgaW5kZXggKiAzICsgMSBdICk7XG5cdFx0XHRcdHZlcnRpY2VzQXJyYXkucHVzaCggcGxhY2Vob2xkZXJbIGluZGV4ICogMyArIDIgXSApO1xuXG5cdFx0XHR9XG5cblxuXHRcdFx0ZnVuY3Rpb24gYWRkVVYoIHZlY3RvcjIgKSB7XG5cblx0XHRcdFx0dXZBcnJheS5wdXNoKCB2ZWN0b3IyLnggKTtcblx0XHRcdFx0dXZBcnJheS5wdXNoKCB2ZWN0b3IyLnkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRjb25zdCBzaGFwZXMgPSB0aGlzLnBhcmFtZXRlcnMuc2hhcGVzO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLnBhcmFtZXRlcnMub3B0aW9ucztcblxuXHRcdHJldHVybiB0b0pTT04kMSggc2hhcGVzLCBvcHRpb25zLCBkYXRhICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSwgc2hhcGVzICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnlTaGFwZXMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBqID0gMCwgamwgPSBkYXRhLnNoYXBlcy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHtcblxuXHRcdFx0Y29uc3Qgc2hhcGUgPSBzaGFwZXNbIGRhdGEuc2hhcGVzWyBqIF0gXTtcblxuXHRcdFx0Z2VvbWV0cnlTaGFwZXMucHVzaCggc2hhcGUgKTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IGV4dHJ1ZGVQYXRoID0gZGF0YS5vcHRpb25zLmV4dHJ1ZGVQYXRoO1xuXG5cdFx0aWYgKCBleHRydWRlUGF0aCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRkYXRhLm9wdGlvbnMuZXh0cnVkZVBhdGggPSBuZXcgQ3VydmVzWyBleHRydWRlUGF0aC50eXBlIF0oKS5mcm9tSlNPTiggZXh0cnVkZVBhdGggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRXh0cnVkZUdlb21ldHJ5KCBnZW9tZXRyeVNoYXBlcywgZGF0YS5vcHRpb25zICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IFdvcmxkVVZHZW5lcmF0b3IgPSB7XG5cblx0Z2VuZXJhdGVUb3BVVjogZnVuY3Rpb24gKCBnZW9tZXRyeSwgdmVydGljZXMsIGluZGV4QSwgaW5kZXhCLCBpbmRleEMgKSB7XG5cblx0XHRjb25zdCBhX3ggPSB2ZXJ0aWNlc1sgaW5kZXhBICogMyBdO1xuXHRcdGNvbnN0IGFfeSA9IHZlcnRpY2VzWyBpbmRleEEgKiAzICsgMSBdO1xuXHRcdGNvbnN0IGJfeCA9IHZlcnRpY2VzWyBpbmRleEIgKiAzIF07XG5cdFx0Y29uc3QgYl95ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAxIF07XG5cdFx0Y29uc3QgY194ID0gdmVydGljZXNbIGluZGV4QyAqIDMgXTtcblx0XHRjb25zdCBjX3kgPSB2ZXJ0aWNlc1sgaW5kZXhDICogMyArIDEgXTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRuZXcgVmVjdG9yMiggYV94LCBhX3kgKSxcblx0XHRcdG5ldyBWZWN0b3IyKCBiX3gsIGJfeSApLFxuXHRcdFx0bmV3IFZlY3RvcjIoIGNfeCwgY195IClcblx0XHRdO1xuXG5cdH0sXG5cblx0Z2VuZXJhdGVTaWRlV2FsbFVWOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBpbmRleEIsIGluZGV4QywgaW5kZXhEICkge1xuXG5cdFx0Y29uc3QgYV94ID0gdmVydGljZXNbIGluZGV4QSAqIDMgXTtcblx0XHRjb25zdCBhX3kgPSB2ZXJ0aWNlc1sgaW5kZXhBICogMyArIDEgXTtcblx0XHRjb25zdCBhX3ogPSB2ZXJ0aWNlc1sgaW5kZXhBICogMyArIDIgXTtcblx0XHRjb25zdCBiX3ggPSB2ZXJ0aWNlc1sgaW5kZXhCICogMyBdO1xuXHRcdGNvbnN0IGJfeSA9IHZlcnRpY2VzWyBpbmRleEIgKiAzICsgMSBdO1xuXHRcdGNvbnN0IGJfeiA9IHZlcnRpY2VzWyBpbmRleEIgKiAzICsgMiBdO1xuXHRcdGNvbnN0IGNfeCA9IHZlcnRpY2VzWyBpbmRleEMgKiAzIF07XG5cdFx0Y29uc3QgY195ID0gdmVydGljZXNbIGluZGV4QyAqIDMgKyAxIF07XG5cdFx0Y29uc3QgY196ID0gdmVydGljZXNbIGluZGV4QyAqIDMgKyAyIF07XG5cdFx0Y29uc3QgZF94ID0gdmVydGljZXNbIGluZGV4RCAqIDMgXTtcblx0XHRjb25zdCBkX3kgPSB2ZXJ0aWNlc1sgaW5kZXhEICogMyArIDEgXTtcblx0XHRjb25zdCBkX3ogPSB2ZXJ0aWNlc1sgaW5kZXhEICogMyArIDIgXTtcblxuXHRcdGlmICggTWF0aC5hYnMoIGFfeSAtIGJfeSApIDwgTWF0aC5hYnMoIGFfeCAtIGJfeCApICkge1xuXG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRuZXcgVmVjdG9yMiggYV94LCAxIC0gYV96ICksXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBiX3gsIDEgLSBiX3ogKSxcblx0XHRcdFx0bmV3IFZlY3RvcjIoIGNfeCwgMSAtIGNfeiApLFxuXHRcdFx0XHRuZXcgVmVjdG9yMiggZF94LCAxIC0gZF96IClcblx0XHRcdF07XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRuZXcgVmVjdG9yMiggYV95LCAxIC0gYV96ICksXG5cdFx0XHRcdG5ldyBWZWN0b3IyKCBiX3ksIDEgLSBiX3ogKSxcblx0XHRcdFx0bmV3IFZlY3RvcjIoIGNfeSwgMSAtIGNfeiApLFxuXHRcdFx0XHRuZXcgVmVjdG9yMiggZF95LCAxIC0gZF96IClcblx0XHRcdF07XG5cblx0XHR9XG5cblx0fVxuXG59O1xuXG5mdW5jdGlvbiB0b0pTT04kMSggc2hhcGVzLCBvcHRpb25zLCBkYXRhICkge1xuXG5cdGRhdGEuc2hhcGVzID0gW107XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBzaGFwZXMgKSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1sgaSBdO1xuXG5cdFx0XHRkYXRhLnNoYXBlcy5wdXNoKCBzaGFwZS51dWlkICk7XG5cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlcy51dWlkICk7XG5cblx0fVxuXG5cdGlmICggb3B0aW9ucy5leHRydWRlUGF0aCAhPT0gdW5kZWZpbmVkICkgZGF0YS5vcHRpb25zLmV4dHJ1ZGVQYXRoID0gb3B0aW9ucy5leHRydWRlUGF0aC50b0pTT04oKTtcblxuXHRyZXR1cm4gZGF0YTtcblxufVxuXG5jbGFzcyBJY29zYWhlZHJvbkdlb21ldHJ5IGV4dGVuZHMgUG9seWhlZHJvbkdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgZGV0YWlsID0gMCApIHtcblxuXHRcdGNvbnN0IHQgPSAoIDEgKyBNYXRoLnNxcnQoIDUgKSApIC8gMjtcblxuXHRcdGNvbnN0IHZlcnRpY2VzID0gW1xuXHRcdFx0LSAxLCB0LCAwLCBcdDEsIHQsIDAsIFx0LSAxLCAtIHQsIDAsIFx0MSwgLSB0LCAwLFxuXHRcdFx0MCwgLSAxLCB0LCBcdDAsIDEsIHQsXHQwLCAtIDEsIC0gdCwgXHQwLCAxLCAtIHQsXG5cdFx0XHR0LCAwLCAtIDEsIFx0dCwgMCwgMSwgXHQtIHQsIDAsIC0gMSwgXHQtIHQsIDAsIDFcblx0XHRdO1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtcblx0XHRcdDAsIDExLCA1LCBcdDAsIDUsIDEsIFx0MCwgMSwgNywgXHQwLCA3LCAxMCwgXHQwLCAxMCwgMTEsXG5cdFx0XHQxLCA1LCA5LCBcdDUsIDExLCA0LFx0MTEsIDEwLCAyLFx0MTAsIDcsIDYsXHQ3LCAxLCA4LFxuXHRcdFx0MywgOSwgNCwgXHQzLCA0LCAyLFx0MywgMiwgNixcdDMsIDYsIDgsXHQzLCA4LCA5LFxuXHRcdFx0NCwgOSwgNSwgXHQyLCA0LCAxMSxcdDYsIDIsIDEwLFx0OCwgNiwgNyxcdDksIDgsIDFcblx0XHRdO1xuXG5cdFx0c3VwZXIoIHZlcnRpY2VzLCBpbmRpY2VzLCByYWRpdXMsIGRldGFpbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0ljb3NhaGVkcm9uR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRkZXRhaWw6IGRldGFpbFxuXHRcdH07XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgSWNvc2FoZWRyb25HZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEuZGV0YWlsICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIExhdGhlR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIHBvaW50cyA9IFsgbmV3IFZlY3RvcjIoIDAsIDAuNSApLCBuZXcgVmVjdG9yMiggMC41LCAwICksIG5ldyBWZWN0b3IyKCAwLCAtIDAuNSApIF0sIHNlZ21lbnRzID0gMTIsIHBoaVN0YXJ0ID0gMCwgcGhpTGVuZ3RoID0gTWF0aC5QSSAqIDIgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0xhdGhlR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cG9pbnRzOiBwb2ludHMsXG5cdFx0XHRzZWdtZW50czogc2VnbWVudHMsXG5cdFx0XHRwaGlTdGFydDogcGhpU3RhcnQsXG5cdFx0XHRwaGlMZW5ndGg6IHBoaUxlbmd0aFxuXHRcdH07XG5cblx0XHRzZWdtZW50cyA9IE1hdGguZmxvb3IoIHNlZ21lbnRzICk7XG5cblx0XHQvLyBjbGFtcCBwaGlMZW5ndGggc28gaXQncyBpbiByYW5nZSBvZiBbIDAsIDJQSSBdXG5cblx0XHRwaGlMZW5ndGggPSBjbGFtcCggcGhpTGVuZ3RoLCAwLCBNYXRoLlBJICogMiApO1xuXG5cdFx0Ly8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cdFx0Y29uc3QgaW5pdE5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCBpbnZlcnNlU2VnbWVudHMgPSAxLjAgLyBzZWdtZW50cztcblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IGN1ck5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgcHJldk5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0bGV0IGR4ID0gMDtcblx0XHRsZXQgZHkgPSAwO1xuXG5cdFx0Ly8gcHJlLWNvbXB1dGUgbm9ybWFscyBmb3IgaW5pdGlhbCBcIm1lcmlkaWFuXCJcblxuXHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSAoIHBvaW50cy5sZW5ndGggLSAxICk7IGogKysgKSB7XG5cblx0XHRcdHN3aXRjaCAoIGogKSB7XG5cblx0XHRcdFx0Y2FzZSAwOlx0XHRcdFx0Ly8gc3BlY2lhbCBoYW5kbGluZyBmb3IgMXN0IHZlcnRleCBvbiBwYXRoXG5cblx0XHRcdFx0XHRkeCA9IHBvaW50c1sgaiArIDEgXS54IC0gcG9pbnRzWyBqIF0ueDtcblx0XHRcdFx0XHRkeSA9IHBvaW50c1sgaiArIDEgXS55IC0gcG9pbnRzWyBqIF0ueTtcblxuXHRcdFx0XHRcdG5vcm1hbC54ID0gZHkgKiAxLjA7XG5cdFx0XHRcdFx0bm9ybWFsLnkgPSAtIGR4O1xuXHRcdFx0XHRcdG5vcm1hbC56ID0gZHkgKiAwLjA7XG5cblx0XHRcdFx0XHRwcmV2Tm9ybWFsLmNvcHkoIG5vcm1hbCApO1xuXG5cdFx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0aW5pdE5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAoIHBvaW50cy5sZW5ndGggLSAxICk6XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciBsYXN0IFZlcnRleCBvbiBwYXRoXG5cblx0XHRcdFx0XHRpbml0Tm9ybWFscy5wdXNoKCBwcmV2Tm9ybWFsLngsIHByZXZOb3JtYWwueSwgcHJldk5vcm1hbC56ICk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0Olx0XHRcdC8vIGRlZmF1bHQgaGFuZGxpbmcgZm9yIGFsbCB2ZXJ0aWNlcyBpbiBiZXR3ZWVuXG5cblx0XHRcdFx0XHRkeCA9IHBvaW50c1sgaiArIDEgXS54IC0gcG9pbnRzWyBqIF0ueDtcblx0XHRcdFx0XHRkeSA9IHBvaW50c1sgaiArIDEgXS55IC0gcG9pbnRzWyBqIF0ueTtcblxuXHRcdFx0XHRcdG5vcm1hbC54ID0gZHkgKiAxLjA7XG5cdFx0XHRcdFx0bm9ybWFsLnkgPSAtIGR4O1xuXHRcdFx0XHRcdG5vcm1hbC56ID0gZHkgKiAwLjA7XG5cblx0XHRcdFx0XHRjdXJOb3JtYWwuY29weSggbm9ybWFsICk7XG5cblx0XHRcdFx0XHRub3JtYWwueCArPSBwcmV2Tm9ybWFsLng7XG5cdFx0XHRcdFx0bm9ybWFsLnkgKz0gcHJldk5vcm1hbC55O1xuXHRcdFx0XHRcdG5vcm1hbC56ICs9IHByZXZOb3JtYWwuejtcblxuXHRcdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRcdGluaXROb3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHRcdHByZXZOb3JtYWwuY29weSggY3VyTm9ybWFsICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGdlbmVyYXRlIHZlcnRpY2VzLCB1dnMgYW5kIG5vcm1hbHNcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8PSBzZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgcGhpID0gcGhpU3RhcnQgKyBpICogaW52ZXJzZVNlZ21lbnRzICogcGhpTGVuZ3RoO1xuXG5cdFx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbiggcGhpICk7XG5cdFx0XHRjb25zdCBjb3MgPSBNYXRoLmNvcyggcGhpICk7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSAoIHBvaW50cy5sZW5ndGggLSAxICk7IGogKysgKSB7XG5cblx0XHRcdFx0Ly8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSBwb2ludHNbIGogXS54ICogc2luO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHBvaW50c1sgaiBdLnk7XG5cdFx0XHRcdHZlcnRleC56ID0gcG9pbnRzWyBqIF0ueCAqIGNvcztcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1di54ID0gaSAvIHNlZ21lbnRzO1xuXHRcdFx0XHR1di55ID0gaiAvICggcG9pbnRzLmxlbmd0aCAtIDEgKTtcblxuXHRcdFx0XHR1dnMucHVzaCggdXYueCwgdXYueSApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdGNvbnN0IHggPSBpbml0Tm9ybWFsc1sgMyAqIGogKyAwIF0gKiBzaW47XG5cdFx0XHRcdGNvbnN0IHkgPSBpbml0Tm9ybWFsc1sgMyAqIGogKyAxIF07XG5cdFx0XHRcdGNvbnN0IHogPSBpbml0Tm9ybWFsc1sgMyAqIGogKyAwIF0gKiBjb3M7XG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCB4LCB5LCB6ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGluZGljZXNcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCAoIHBvaW50cy5sZW5ndGggLSAxICk7IGogKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgYmFzZSA9IGogKyBpICogcG9pbnRzLmxlbmd0aDtcblxuXHRcdFx0XHRjb25zdCBhID0gYmFzZTtcblx0XHRcdFx0Y29uc3QgYiA9IGJhc2UgKyBwb2ludHMubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCBjID0gYmFzZSArIHBvaW50cy5sZW5ndGggKyAxO1xuXHRcdFx0XHRjb25zdCBkID0gYmFzZSArIDE7XG5cblx0XHRcdFx0Ly8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBjLCBkLCBiICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IExhdGhlR2VvbWV0cnkoIGRhdGEucG9pbnRzLCBkYXRhLnNlZ21lbnRzLCBkYXRhLnBoaVN0YXJ0LCBkYXRhLnBoaUxlbmd0aCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBPY3RhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBkZXRhaWwgPSAwICkge1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXG5cdFx0XHQxLCAwLCAwLCBcdC0gMSwgMCwgMCxcdDAsIDEsIDAsXG5cdFx0XHQwLCAtIDEsIDAsIFx0MCwgMCwgMSxcdDAsIDAsIC0gMVxuXHRcdF07XG5cblx0XHRjb25zdCBpbmRpY2VzID0gW1xuXHRcdFx0MCwgMiwgNCxcdDAsIDQsIDMsXHQwLCAzLCA1LFxuXHRcdFx0MCwgNSwgMixcdDEsIDIsIDUsXHQxLCA1LCAzLFxuXHRcdFx0MSwgMywgNCxcdDEsIDQsIDJcblx0XHRdO1xuXG5cdFx0c3VwZXIoIHZlcnRpY2VzLCBpbmRpY2VzLCByYWRpdXMsIGRldGFpbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ09jdGFoZWRyb25HZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBPY3RhaGVkcm9uR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLmRldGFpbCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBSaW5nR2VvbWV0cnkgZXh0ZW5kcyBCdWZmZXJHZW9tZXRyeSB7XG5cblx0Y29uc3RydWN0b3IoIGlubmVyUmFkaXVzID0gMC41LCBvdXRlclJhZGl1cyA9IDEsIHRoZXRhU2VnbWVudHMgPSA4LCBwaGlTZWdtZW50cyA9IDEsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKiAyICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdSaW5nR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0aW5uZXJSYWRpdXM6IGlubmVyUmFkaXVzLFxuXHRcdFx0b3V0ZXJSYWRpdXM6IG91dGVyUmFkaXVzLFxuXHRcdFx0dGhldGFTZWdtZW50czogdGhldGFTZWdtZW50cyxcblx0XHRcdHBoaVNlZ21lbnRzOiBwaGlTZWdtZW50cyxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXG5cdFx0dGhldGFTZWdtZW50cyA9IE1hdGgubWF4KCAzLCB0aGV0YVNlZ21lbnRzICk7XG5cdFx0cGhpU2VnbWVudHMgPSBNYXRoLm1heCggMSwgcGhpU2VnbWVudHMgKTtcblxuXHRcdC8vIGJ1ZmZlcnNcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblxuXHRcdC8vIHNvbWUgaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0bGV0IHJhZGl1cyA9IGlubmVyUmFkaXVzO1xuXHRcdGNvbnN0IHJhZGl1c1N0ZXAgPSAoICggb3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cyApIC8gcGhpU2VnbWVudHMgKTtcblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHV2ID0gbmV3IFZlY3RvcjIoKTtcblxuXHRcdC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSBwaGlTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IHRoZXRhU2VnbWVudHM7IGkgKysgKSB7XG5cblx0XHRcdFx0Ly8gdmFsdWVzIGFyZSBnZW5lcmF0ZSBmcm9tIHRoZSBpbnNpZGUgb2YgdGhlIHJpbmcgdG8gdGhlIG91dHNpZGVcblxuXHRcdFx0XHRjb25zdCBzZWdtZW50ID0gdGhldGFTdGFydCArIGkgLyB0aGV0YVNlZ21lbnRzICogdGhldGFMZW5ndGg7XG5cblx0XHRcdFx0Ly8gdmVydGV4XG5cblx0XHRcdFx0dmVydGV4LnggPSByYWRpdXMgKiBNYXRoLmNvcyggc2VnbWVudCApO1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1hdGguc2luKCBzZWdtZW50ICk7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCggMCwgMCwgMSApO1xuXG5cdFx0XHRcdC8vIHV2XG5cblx0XHRcdFx0dXYueCA9ICggdmVydGV4LnggLyBvdXRlclJhZGl1cyArIDEgKSAvIDI7XG5cdFx0XHRcdHV2LnkgPSAoIHZlcnRleC55IC8gb3V0ZXJSYWRpdXMgKyAxICkgLyAyO1xuXG5cdFx0XHRcdHV2cy5wdXNoKCB1di54LCB1di55ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gaW5jcmVhc2UgdGhlIHJhZGl1cyBmb3IgbmV4dCByb3cgb2YgdmVydGljZXNcblxuXHRcdFx0cmFkaXVzICs9IHJhZGl1c1N0ZXA7XG5cblx0XHR9XG5cblx0XHQvLyBpbmRpY2VzXG5cblx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBwaGlTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0Y29uc3QgdGhldGFTZWdtZW50TGV2ZWwgPSBqICogKCB0aGV0YVNlZ21lbnRzICsgMSApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGV0YVNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IHNlZ21lbnQgPSBpICsgdGhldGFTZWdtZW50TGV2ZWw7XG5cblx0XHRcdFx0Y29uc3QgYSA9IHNlZ21lbnQ7XG5cdFx0XHRcdGNvbnN0IGIgPSBzZWdtZW50ICsgdGhldGFTZWdtZW50cyArIDE7XG5cdFx0XHRcdGNvbnN0IGMgPSBzZWdtZW50ICsgdGhldGFTZWdtZW50cyArIDI7XG5cdFx0XHRcdGNvbnN0IGQgPSBzZWdtZW50ICsgMTtcblxuXHRcdFx0XHQvLyBmYWNlc1xuXG5cdFx0XHRcdGluZGljZXMucHVzaCggYSwgYiwgZCApO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0fVxuXG5cdHN0YXRpYyBmcm9tSlNPTiggZGF0YSApIHtcblxuXHRcdHJldHVybiBuZXcgUmluZ0dlb21ldHJ5KCBkYXRhLmlubmVyUmFkaXVzLCBkYXRhLm91dGVyUmFkaXVzLCBkYXRhLnRoZXRhU2VnbWVudHMsIGRhdGEucGhpU2VnbWVudHMsIGRhdGEudGhldGFTdGFydCwgZGF0YS50aGV0YUxlbmd0aCApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBTaGFwZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCBzaGFwZXMgPSBuZXcgU2hhcGUoIFsgbmV3IFZlY3RvcjIoIDAsIDAuNSApLCBuZXcgVmVjdG9yMiggLSAwLjUsIC0gMC41ICksIG5ldyBWZWN0b3IyKCAwLjUsIC0gMC41ICkgXSApLCBjdXJ2ZVNlZ21lbnRzID0gMTIgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTaGFwZUdlb21ldHJ5JztcblxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHtcblx0XHRcdHNoYXBlczogc2hhcGVzLFxuXHRcdFx0Y3VydmVTZWdtZW50czogY3VydmVTZWdtZW50c1xuXHRcdH07XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRsZXQgZ3JvdXBTdGFydCA9IDA7XG5cdFx0bGV0IGdyb3VwQ291bnQgPSAwO1xuXG5cdFx0Ly8gYWxsb3cgc2luZ2xlIGFuZCBhcnJheSB2YWx1ZXMgZm9yIFwic2hhcGVzXCIgcGFyYW1ldGVyXG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHNoYXBlcyApID09PSBmYWxzZSApIHtcblxuXHRcdFx0YWRkU2hhcGUoIHNoYXBlcyApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgc2hhcGVzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRhZGRTaGFwZSggc2hhcGVzWyBpIF0gKTtcblxuXHRcdFx0XHR0aGlzLmFkZEdyb3VwKCBncm91cFN0YXJ0LCBncm91cENvdW50LCBpICk7IC8vIGVuYWJsZXMgTXVsdGlNYXRlcmlhbCBzdXBwb3J0XG5cblx0XHRcdFx0Z3JvdXBTdGFydCArPSBncm91cENvdW50O1xuXHRcdFx0XHRncm91cENvdW50ID0gMDtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblxuXHRcdC8vIGhlbHBlciBmdW5jdGlvbnNcblxuXHRcdGZ1bmN0aW9uIGFkZFNoYXBlKCBzaGFwZSApIHtcblxuXHRcdFx0Y29uc3QgaW5kZXhPZmZzZXQgPSB2ZXJ0aWNlcy5sZW5ndGggLyAzO1xuXHRcdFx0Y29uc3QgcG9pbnRzID0gc2hhcGUuZXh0cmFjdFBvaW50cyggY3VydmVTZWdtZW50cyApO1xuXG5cdFx0XHRsZXQgc2hhcGVWZXJ0aWNlcyA9IHBvaW50cy5zaGFwZTtcblx0XHRcdGNvbnN0IHNoYXBlSG9sZXMgPSBwb2ludHMuaG9sZXM7XG5cblx0XHRcdC8vIGNoZWNrIGRpcmVjdGlvbiBvZiB2ZXJ0aWNlc1xuXG5cdFx0XHRpZiAoIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHNoYXBlVmVydGljZXMgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0c2hhcGVWZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMucmV2ZXJzZSgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlSG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzWyBpIF07XG5cblx0XHRcdFx0aWYgKCBTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKCBzaGFwZUhvbGUgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHNoYXBlSG9sZXNbIGkgXSA9IHNoYXBlSG9sZS5yZXZlcnNlKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZhY2VzID0gU2hhcGVVdGlscy50cmlhbmd1bGF0ZVNoYXBlKCBzaGFwZVZlcnRpY2VzLCBzaGFwZUhvbGVzICk7XG5cblx0XHRcdC8vIGpvaW4gdmVydGljZXMgb2YgaW5uZXIgYW5kIG91dGVyIHBhdGhzIHRvIGEgc2luZ2xlIGFycmF5XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlSG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzWyBpIF07XG5cdFx0XHRcdHNoYXBlVmVydGljZXMgPSBzaGFwZVZlcnRpY2VzLmNvbmNhdCggc2hhcGVIb2xlICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gdmVydGljZXMsIG5vcm1hbHMsIHV2c1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBzaGFwZVZlcnRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdmVydGV4ID0gc2hhcGVWZXJ0aWNlc1sgaSBdO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgMCApO1xuXHRcdFx0XHRub3JtYWxzLnB1c2goIDAsIDAsIDEgKTtcblx0XHRcdFx0dXZzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSApOyAvLyB3b3JsZCB1dnNcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBpbmNpZGVzXG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGZhY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgZmFjZSA9IGZhY2VzWyBpIF07XG5cblx0XHRcdFx0Y29uc3QgYSA9IGZhY2VbIDAgXSArIGluZGV4T2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBiID0gZmFjZVsgMSBdICsgaW5kZXhPZmZzZXQ7XG5cdFx0XHRcdGNvbnN0IGMgPSBmYWNlWyAyIF0gKyBpbmRleE9mZnNldDtcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGMgKTtcblx0XHRcdFx0Z3JvdXBDb3VudCArPSAzO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cdHRvSlNPTigpIHtcblxuXHRcdGNvbnN0IGRhdGEgPSBzdXBlci50b0pTT04oKTtcblxuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyYW1ldGVycy5zaGFwZXM7XG5cblx0XHRyZXR1cm4gdG9KU09OKCBzaGFwZXMsIGRhdGEgKTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhLCBzaGFwZXMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeVNoYXBlcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGogPSAwLCBqbCA9IGRhdGEuc2hhcGVzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1sgZGF0YS5zaGFwZXNbIGogXSBdO1xuXG5cdFx0XHRnZW9tZXRyeVNoYXBlcy5wdXNoKCBzaGFwZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBTaGFwZUdlb21ldHJ5KCBnZW9tZXRyeVNoYXBlcywgZGF0YS5jdXJ2ZVNlZ21lbnRzICk7XG5cblx0fVxuXG59XG5cbmZ1bmN0aW9uIHRvSlNPTiggc2hhcGVzLCBkYXRhICkge1xuXG5cdGRhdGEuc2hhcGVzID0gW107XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBzaGFwZXMgKSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBzaGFwZSA9IHNoYXBlc1sgaSBdO1xuXG5cdFx0XHRkYXRhLnNoYXBlcy5wdXNoKCBzaGFwZS51dWlkICk7XG5cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlcy51dWlkICk7XG5cblx0fVxuXG5cdHJldHVybiBkYXRhO1xuXG59XG5cbmNsYXNzIFNwaGVyZUdlb21ldHJ5IGV4dGVuZHMgQnVmZmVyR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCB3aWR0aFNlZ21lbnRzID0gMzIsIGhlaWdodFNlZ21lbnRzID0gMTYsIHBoaVN0YXJ0ID0gMCwgcGhpTGVuZ3RoID0gTWF0aC5QSSAqIDIsIHRoZXRhU3RhcnQgPSAwLCB0aGV0YUxlbmd0aCA9IE1hdGguUEkgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdTcGhlcmVHZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG5cdFx0XHRoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsXG5cdFx0XHRwaGlTdGFydDogcGhpU3RhcnQsXG5cdFx0XHRwaGlMZW5ndGg6IHBoaUxlbmd0aCxcblx0XHRcdHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsXG5cdFx0XHR0aGV0YUxlbmd0aDogdGhldGFMZW5ndGhcblx0XHR9O1xuXG5cdFx0d2lkdGhTZWdtZW50cyA9IE1hdGgubWF4KCAzLCBNYXRoLmZsb29yKCB3aWR0aFNlZ21lbnRzICkgKTtcblx0XHRoZWlnaHRTZWdtZW50cyA9IE1hdGgubWF4KCAyLCBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApICk7XG5cblx0XHRjb25zdCB0aGV0YUVuZCA9IE1hdGgubWluKCB0aGV0YVN0YXJ0ICsgdGhldGFMZW5ndGgsIE1hdGguUEkgKTtcblxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZ3JpZCA9IFtdO1xuXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Ly8gYnVmZmVyc1xuXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtdO1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gW107XG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xuXHRcdGNvbnN0IHV2cyA9IFtdO1xuXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yICggbGV0IGl5ID0gMDsgaXkgPD0gaGVpZ2h0U2VnbWVudHM7IGl5ICsrICkge1xuXG5cdFx0XHRjb25zdCB2ZXJ0aWNlc1JvdyA9IFtdO1xuXG5cdFx0XHRjb25zdCB2ID0gaXkgLyBoZWlnaHRTZWdtZW50cztcblxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlIGZvciB0aGUgcG9sZXNcblxuXHRcdFx0bGV0IHVPZmZzZXQgPSAwO1xuXG5cdFx0XHRpZiAoIGl5ID09IDAgJiYgdGhldGFTdGFydCA9PSAwICkge1xuXG5cdFx0XHRcdHVPZmZzZXQgPSAwLjUgLyB3aWR0aFNlZ21lbnRzO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpeSA9PSBoZWlnaHRTZWdtZW50cyAmJiB0aGV0YUVuZCA9PSBNYXRoLlBJICkge1xuXG5cdFx0XHRcdHVPZmZzZXQgPSAtIDAuNSAvIHdpZHRoU2VnbWVudHM7XG5cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggbGV0IGl4ID0gMDsgaXggPD0gd2lkdGhTZWdtZW50czsgaXggKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdSA9IGl4IC8gd2lkdGhTZWdtZW50cztcblxuXHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IC0gcmFkaXVzICogTWF0aC5jb3MoIHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCApICogTWF0aC5zaW4oIHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGggKTtcblx0XHRcdFx0dmVydGV4LnkgPSByYWRpdXMgKiBNYXRoLmNvcyggdGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCApO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHJhZGl1cyAqIE1hdGguc2luKCBwaGlTdGFydCArIHUgKiBwaGlMZW5ndGggKSAqIE1hdGguc2luKCB0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoICk7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbC5jb3B5KCB2ZXJ0ZXggKS5ub3JtYWxpemUoKTtcblx0XHRcdFx0bm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56ICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1dnMucHVzaCggdSArIHVPZmZzZXQsIDEgLSB2ICk7XG5cblx0XHRcdFx0dmVydGljZXNSb3cucHVzaCggaW5kZXggKysgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRncmlkLnB1c2goIHZlcnRpY2VzUm93ICk7XG5cblx0XHR9XG5cblx0XHQvLyBpbmRpY2VzXG5cblx0XHRmb3IgKCBsZXQgaXkgPSAwOyBpeSA8IGhlaWdodFNlZ21lbnRzOyBpeSArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGl4ID0gMDsgaXggPCB3aWR0aFNlZ21lbnRzOyBpeCArKyApIHtcblxuXHRcdFx0XHRjb25zdCBhID0gZ3JpZFsgaXkgXVsgaXggKyAxIF07XG5cdFx0XHRcdGNvbnN0IGIgPSBncmlkWyBpeSBdWyBpeCBdO1xuXHRcdFx0XHRjb25zdCBjID0gZ3JpZFsgaXkgKyAxIF1bIGl4IF07XG5cdFx0XHRcdGNvbnN0IGQgPSBncmlkWyBpeSArIDEgXVsgaXggKyAxIF07XG5cblx0XHRcdFx0aWYgKCBpeSAhPT0gMCB8fCB0aGV0YVN0YXJ0ID4gMCApIGluZGljZXMucHVzaCggYSwgYiwgZCApO1xuXHRcdFx0XHRpZiAoIGl5ICE9PSBoZWlnaHRTZWdtZW50cyAtIDEgfHwgdGhldGFFbmQgPCBNYXRoLlBJICkgaW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFNwaGVyZUdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS53aWR0aFNlZ21lbnRzLCBkYXRhLmhlaWdodFNlZ21lbnRzLCBkYXRhLnBoaVN0YXJ0LCBkYXRhLnBoaUxlbmd0aCwgZGF0YS50aGV0YVN0YXJ0LCBkYXRhLnRoZXRhTGVuZ3RoICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFRldHJhaGVkcm9uR2VvbWV0cnkgZXh0ZW5kcyBQb2x5aGVkcm9uR2VvbWV0cnkge1xuXG5cdGNvbnN0cnVjdG9yKCByYWRpdXMgPSAxLCBkZXRhaWwgPSAwICkge1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXG5cdFx0XHQxLCAxLCAxLCBcdC0gMSwgLSAxLCAxLCBcdC0gMSwgMSwgLSAxLCBcdDEsIC0gMSwgLSAxXG5cdFx0XTtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBbXG5cdFx0XHQyLCAxLCAwLCBcdDAsIDMsIDIsXHQxLCAzLCAwLFx0MiwgMywgMVxuXHRcdF07XG5cblx0XHRzdXBlciggdmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnVGV0cmFoZWRyb25HZW9tZXRyeSc7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMgPSB7XG5cdFx0XHRyYWRpdXM6IHJhZGl1cyxcblx0XHRcdGRldGFpbDogZGV0YWlsXG5cdFx0fTtcblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBUZXRyYWhlZHJvbkdlb21ldHJ5KCBkYXRhLnJhZGl1cywgZGF0YS5kZXRhaWwgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgVG9ydXNHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgdHViZSA9IDAuNCwgcmFkaWFsU2VnbWVudHMgPSA4LCB0dWJ1bGFyU2VnbWVudHMgPSA2LCBhcmMgPSBNYXRoLlBJICogMiApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gJ1RvcnVzR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHR0dWJlOiB0dWJlLFxuXHRcdFx0cmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLFxuXHRcdFx0dHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRhcmM6IGFyY1xuXHRcdH07XG5cblx0XHRyYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRzICk7XG5cdFx0dHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vciggdHVidWxhclNlZ21lbnRzICk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnNcblxuXHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCB1ID0gaSAvIHR1YnVsYXJTZWdtZW50cyAqIGFyYztcblx0XHRcdFx0Y29uc3QgdiA9IGogLyByYWRpYWxTZWdtZW50cyAqIE1hdGguUEkgKiAyO1xuXG5cdFx0XHRcdC8vIHZlcnRleFxuXG5cdFx0XHRcdHZlcnRleC54ID0gKCByYWRpdXMgKyB0dWJlICogTWF0aC5jb3MoIHYgKSApICogTWF0aC5jb3MoIHUgKTtcblx0XHRcdFx0dmVydGV4LnkgPSAoIHJhZGl1cyArIHR1YmUgKiBNYXRoLmNvcyggdiApICkgKiBNYXRoLnNpbiggdSApO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IHR1YmUgKiBNYXRoLnNpbiggdiApO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdFx0XHQvLyBub3JtYWxcblxuXHRcdFx0XHRjZW50ZXIueCA9IHJhZGl1cyAqIE1hdGguY29zKCB1ICk7XG5cdFx0XHRcdGNlbnRlci55ID0gcmFkaXVzICogTWF0aC5zaW4oIHUgKTtcblx0XHRcdFx0bm9ybWFsLnN1YlZlY3RvcnMoIHZlcnRleCwgY2VudGVyICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56ICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1dnMucHVzaCggaSAvIHR1YnVsYXJTZWdtZW50cyApO1xuXHRcdFx0XHR1dnMucHVzaCggaiAvIHJhZGlhbFNlZ21lbnRzICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGdlbmVyYXRlIGluZGljZXNcblxuXHRcdGZvciAoIGxldCBqID0gMTsgaiA8PSByYWRpYWxTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAxOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHQvLyBpbmRpY2VzXG5cblx0XHRcdFx0Y29uc3QgYSA9ICggdHVidWxhclNlZ21lbnRzICsgMSApICogaiArIGkgLSAxO1xuXHRcdFx0XHRjb25zdCBiID0gKCB0dWJ1bGFyU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyBpIC0gMTtcblx0XHRcdFx0Y29uc3QgYyA9ICggdHVidWxhclNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgaTtcblx0XHRcdFx0Y29uc3QgZCA9ICggdHVidWxhclNlZ21lbnRzICsgMSApICogaiArIGk7XG5cblx0XHRcdFx0Ly8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHR0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFRvcnVzR2VvbWV0cnkoIGRhdGEucmFkaXVzLCBkYXRhLnR1YmUsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEudHVidWxhclNlZ21lbnRzLCBkYXRhLmFyYyApO1xuXG5cdH1cblxufVxuXG5jbGFzcyBUb3J1c0tub3RHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgdHViZSA9IDAuNCwgdHVidWxhclNlZ21lbnRzID0gNjQsIHJhZGlhbFNlZ21lbnRzID0gOCwgcCA9IDIsIHEgPSAzICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnVG9ydXNLbm90R2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHR0dWJlOiB0dWJlLFxuXHRcdFx0dHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRwOiBwLFxuXHRcdFx0cTogcVxuXHRcdH07XG5cblx0XHR0dWJ1bGFyU2VnbWVudHMgPSBNYXRoLmZsb29yKCB0dWJ1bGFyU2VnbWVudHMgKTtcblx0XHRyYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRzICk7XG5cblx0XHQvLyBidWZmZXJzXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXG5cblx0XHRjb25zdCB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRjb25zdCBQMSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgUDIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Y29uc3QgQiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgVCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgTiA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHQvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyArKyBpICkge1xuXG5cdFx0XHQvLyB0aGUgcmFkaWFuIFwidVwiIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvbiB0aGUgdG9ydXMgY3VydmUgb2YgdGhlIGN1cnJlbnQgdHVidWxhciBzZWdlbWVudFxuXG5cdFx0XHRjb25zdCB1ID0gaSAvIHR1YnVsYXJTZWdtZW50cyAqIHAgKiBNYXRoLlBJICogMjtcblxuXHRcdFx0Ly8gbm93IHdlIGNhbGN1bGF0ZSB0d28gcG9pbnRzLiBQMSBpcyBvdXIgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmUsIFAyIGlzIGEgbGl0dGxlIGZhcnRoZXIgYWhlYWQuXG5cdFx0XHQvLyB0aGVzZSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGEgc3BlY2lhbCBcImNvb3JkaW5hdGUgc3BhY2VcIiwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2ZXJ0ZXggcG9zaXRpb25zXG5cblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSggdSwgcCwgcSwgcmFkaXVzLCBQMSApO1xuXHRcdFx0Y2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKCB1ICsgMC4wMSwgcCwgcSwgcmFkaXVzLCBQMiApO1xuXG5cdFx0XHQvLyBjYWxjdWxhdGUgb3J0aG9ub3JtYWwgYmFzaXNcblxuXHRcdFx0VC5zdWJWZWN0b3JzKCBQMiwgUDEgKTtcblx0XHRcdE4uYWRkVmVjdG9ycyggUDIsIFAxICk7XG5cdFx0XHRCLmNyb3NzVmVjdG9ycyggVCwgTiApO1xuXHRcdFx0Ti5jcm9zc1ZlY3RvcnMoIEIsIFQgKTtcblxuXHRcdFx0Ly8gbm9ybWFsaXplIEIsIE4uIFQgY2FuIGJlIGlnbm9yZWQsIHdlIGRvbid0IHVzZSBpdFxuXG5cdFx0XHRCLm5vcm1hbGl6ZSgpO1xuXHRcdFx0Ti5ub3JtYWxpemUoKTtcblxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyArKyBqICkge1xuXG5cdFx0XHRcdC8vIG5vdyBjYWxjdWxhdGUgdGhlIHZlcnRpY2VzLiB0aGV5IGFyZSBub3RoaW5nIG1vcmUgdGhhbiBhbiBleHRydXNpb24gb2YgdGhlIHRvcnVzIGN1cnZlLlxuXHRcdFx0XHQvLyBiZWNhdXNlIHdlIGV4dHJ1ZGUgYSBzaGFwZSBpbiB0aGUgeHktcGxhbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEgei12YWx1ZS5cblxuXHRcdFx0XHRjb25zdCB2ID0gaiAvIHJhZGlhbFNlZ21lbnRzICogTWF0aC5QSSAqIDI7XG5cdFx0XHRcdGNvbnN0IGN4ID0gLSB0dWJlICogTWF0aC5jb3MoIHYgKTtcblx0XHRcdFx0Y29uc3QgY3kgPSB0dWJlICogTWF0aC5zaW4oIHYgKTtcblxuXHRcdFx0XHQvLyBub3cgY2FsY3VsYXRlIHRoZSBmaW5hbCB2ZXJ0ZXggcG9zaXRpb24uXG5cdFx0XHRcdC8vIGZpcnN0IHdlIG9yaWVudCB0aGUgZXh0cnVzaW9uIHdpdGggb3VyIGJhc2lzIHZlY3RvcywgdGhlbiB3ZSBhZGQgaXQgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gb24gdGhlIGN1cnZlXG5cblx0XHRcdFx0dmVydGV4LnggPSBQMS54ICsgKCBjeCAqIE4ueCArIGN5ICogQi54ICk7XG5cdFx0XHRcdHZlcnRleC55ID0gUDEueSArICggY3ggKiBOLnkgKyBjeSAqIEIueSApO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAxLnogKyAoIGN4ICogTi56ICsgY3kgKiBCLnogKTtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7XG5cblx0XHRcdFx0Ly8gbm9ybWFsIChQMSBpcyBhbHdheXMgdGhlIGNlbnRlci9vcmlnaW4gb2YgdGhlIGV4dHJ1c2lvbiwgdGh1cyB3ZSBjYW4gdXNlIGl0IHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsKVxuXG5cdFx0XHRcdG5vcm1hbC5zdWJWZWN0b3JzKCB2ZXJ0ZXgsIFAxICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0bm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56ICk7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1dnMucHVzaCggaSAvIHR1YnVsYXJTZWdtZW50cyApO1xuXHRcdFx0XHR1dnMucHVzaCggaiAvIHJhZGlhbFNlZ21lbnRzICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGdlbmVyYXRlIGluZGljZXNcblxuXHRcdGZvciAoIGxldCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGogKysgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMTsgaSA8PSByYWRpYWxTZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHQvLyBpbmRpY2VzXG5cblx0XHRcdFx0Y29uc3QgYSA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyAoIGkgLSAxICk7XG5cdFx0XHRcdGNvbnN0IGIgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogaiArICggaSAtIDEgKTtcblx0XHRcdFx0Y29uc3QgYyA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgaTtcblx0XHRcdFx0Y29uc3QgZCA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyBpO1xuXG5cdFx0XHRcdC8vIGZhY2VzXG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7XG5cdFx0XHRcdGluZGljZXMucHVzaCggYiwgYywgZCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0dGhpcy5zZXRJbmRleCggaW5kaWNlcyApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTtcblxuXHRcdC8vIHRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgdG9ydXMgY3VydmVcblxuXHRcdGZ1bmN0aW9uIGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSggdSwgcCwgcSwgcmFkaXVzLCBwb3NpdGlvbiApIHtcblxuXHRcdFx0Y29uc3QgY3UgPSBNYXRoLmNvcyggdSApO1xuXHRcdFx0Y29uc3Qgc3UgPSBNYXRoLnNpbiggdSApO1xuXHRcdFx0Y29uc3QgcXVPdmVyUCA9IHEgLyBwICogdTtcblx0XHRcdGNvbnN0IGNzID0gTWF0aC5jb3MoIHF1T3ZlclAgKTtcblxuXHRcdFx0cG9zaXRpb24ueCA9IHJhZGl1cyAqICggMiArIGNzICkgKiAwLjUgKiBjdTtcblx0XHRcdHBvc2l0aW9uLnkgPSByYWRpdXMgKiAoIDIgKyBjcyApICogc3UgKiAwLjU7XG5cdFx0XHRwb3NpdGlvbi56ID0gcmFkaXVzICogTWF0aC5zaW4oIHF1T3ZlclAgKSAqIDAuNTtcblxuXHRcdH1cblxuXHR9XG5cblx0c3RhdGljIGZyb21KU09OKCBkYXRhICkge1xuXG5cdFx0cmV0dXJuIG5ldyBUb3J1c0tub3RHZW9tZXRyeSggZGF0YS5yYWRpdXMsIGRhdGEudHViZSwgZGF0YS50dWJ1bGFyU2VnbWVudHMsIGRhdGEucmFkaWFsU2VnbWVudHMsIGRhdGEucCwgZGF0YS5xICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIFR1YmVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggcGF0aCA9IG5ldyBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMoIG5ldyBWZWN0b3IzKCAtIDEsIC0gMSwgMCApLCBuZXcgVmVjdG9yMyggLSAxLCAxLCAwICksIG5ldyBWZWN0b3IzKCAxLCAxLCAwICkgKSwgdHVidWxhclNlZ21lbnRzID0gNjQsIHJhZGl1cyA9IDEsIHJhZGlhbFNlZ21lbnRzID0gOCwgY2xvc2VkID0gZmFsc2UgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudHlwZSA9ICdUdWJlR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0cGF0aDogcGF0aCxcblx0XHRcdHR1YnVsYXJTZWdtZW50czogdHVidWxhclNlZ21lbnRzLFxuXHRcdFx0cmFkaXVzOiByYWRpdXMsXG5cdFx0XHRyYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsXG5cdFx0XHRjbG9zZWQ6IGNsb3NlZFxuXHRcdH07XG5cblx0XHRjb25zdCBmcmFtZXMgPSBwYXRoLmNvbXB1dGVGcmVuZXRGcmFtZXMoIHR1YnVsYXJTZWdtZW50cywgY2xvc2VkICk7XG5cblx0XHQvLyBleHBvc2UgaW50ZXJuYWxzXG5cblx0XHR0aGlzLnRhbmdlbnRzID0gZnJhbWVzLnRhbmdlbnRzO1xuXHRcdHRoaXMubm9ybWFscyA9IGZyYW1lcy5ub3JtYWxzO1xuXHRcdHRoaXMuYmlub3JtYWxzID0gZnJhbWVzLmJpbm9ybWFscztcblxuXHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCB1diA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0bGV0IFAgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Ly8gYnVmZmVyXG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdGNvbnN0IG5vcm1hbHMgPSBbXTtcblx0XHRjb25zdCB1dnMgPSBbXTtcblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cblx0XHQvLyBjcmVhdGUgYnVmZmVyIGRhdGFcblxuXHRcdGdlbmVyYXRlQnVmZmVyRGF0YSgpO1xuXG5cdFx0Ly8gYnVpbGQgZ2VvbWV0cnlcblxuXHRcdHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7XG5cblx0XHQvLyBmdW5jdGlvbnNcblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlQnVmZmVyRGF0YSgpIHtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdHVidWxhclNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdGdlbmVyYXRlU2VnbWVudCggaSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGlmIHRoZSBnZW9tZXRyeSBpcyBub3QgY2xvc2VkLCBnZW5lcmF0ZSB0aGUgbGFzdCByb3cgb2YgdmVydGljZXMgYW5kIG5vcm1hbHNcblx0XHRcdC8vIGF0IHRoZSByZWd1bGFyIHBvc2l0aW9uIG9uIHRoZSBnaXZlbiBwYXRoXG5cdFx0XHQvL1xuXHRcdFx0Ly8gaWYgdGhlIGdlb21ldHJ5IGlzIGNsb3NlZCwgZHVwbGljYXRlIHRoZSBmaXJzdCByb3cgb2YgdmVydGljZXMgYW5kIG5vcm1hbHMgKHV2cyB3aWxsIGRpZmZlcilcblxuXHRcdFx0Z2VuZXJhdGVTZWdtZW50KCAoIGNsb3NlZCA9PT0gZmFsc2UgKSA/IHR1YnVsYXJTZWdtZW50cyA6IDAgKTtcblxuXHRcdFx0Ly8gdXZzIGFyZSBnZW5lcmF0ZWQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbi5cblx0XHRcdC8vIHRoaXMgbWFrZXMgaXQgZWFzeSBjb21wdXRlIGNvcnJlY3QgdmFsdWVzIGZvciBjbG9zZWQgZ2VvbWV0cmllc1xuXG5cdFx0XHRnZW5lcmF0ZVVWcygpO1xuXG5cdFx0XHQvLyBmaW5hbGx5IGNyZWF0ZSBmYWNlc1xuXG5cdFx0XHRnZW5lcmF0ZUluZGljZXMoKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlU2VnbWVudCggaSApIHtcblxuXHRcdFx0Ly8gd2UgdXNlIGdldFBvaW50QXQgdG8gc2FtcGxlIGV2ZW5seSBkaXN0cmlidXRlZCBwb2ludHMgZnJvbSB0aGUgZ2l2ZW4gcGF0aFxuXG5cdFx0XHRQID0gcGF0aC5nZXRQb2ludEF0KCBpIC8gdHVidWxhclNlZ21lbnRzLCBQICk7XG5cblx0XHRcdC8vIHJldHJpZXZlIGNvcnJlc3BvbmRpbmcgbm9ybWFsIGFuZCBiaW5vcm1hbFxuXG5cdFx0XHRjb25zdCBOID0gZnJhbWVzLm5vcm1hbHNbIGkgXTtcblx0XHRcdGNvbnN0IEIgPSBmcmFtZXMuYmlub3JtYWxzWyBpIF07XG5cblx0XHRcdC8vIGdlbmVyYXRlIG5vcm1hbHMgYW5kIHZlcnRpY2VzIGZvciB0aGUgY3VycmVudCBzZWdtZW50XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0XHRjb25zdCB2ID0gaiAvIHJhZGlhbFNlZ21lbnRzICogTWF0aC5QSSAqIDI7XG5cblx0XHRcdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4oIHYgKTtcblx0XHRcdFx0Y29uc3QgY29zID0gLSBNYXRoLmNvcyggdiApO1xuXG5cdFx0XHRcdC8vIG5vcm1hbFxuXG5cdFx0XHRcdG5vcm1hbC54ID0gKCBjb3MgKiBOLnggKyBzaW4gKiBCLnggKTtcblx0XHRcdFx0bm9ybWFsLnkgPSAoIGNvcyAqIE4ueSArIHNpbiAqIEIueSApO1xuXHRcdFx0XHRub3JtYWwueiA9ICggY29zICogTi56ICsgc2luICogQi56ICk7XG5cdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTtcblxuXHRcdFx0XHQvLyB2ZXJ0ZXhcblxuXHRcdFx0XHR2ZXJ0ZXgueCA9IFAueCArIHJhZGl1cyAqIG5vcm1hbC54O1xuXHRcdFx0XHR2ZXJ0ZXgueSA9IFAueSArIHJhZGl1cyAqIG5vcm1hbC55O1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAueiArIHJhZGl1cyAqIG5vcm1hbC56O1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2VuZXJhdGVJbmRpY2VzKCkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IDE7IGogPD0gdHVidWxhclNlZ21lbnRzOyBqICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMTsgaSA8PSByYWRpYWxTZWdtZW50czsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGEgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgKCBpIC0gMSApO1xuXHRcdFx0XHRcdGNvbnN0IGIgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogaiArICggaSAtIDEgKTtcblx0XHRcdFx0XHRjb25zdCBjID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqIGogKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGQgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgaTtcblxuXHRcdFx0XHRcdC8vIGZhY2VzXG5cblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTtcblx0XHRcdFx0XHRpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlVVZzKCkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpICsrICkge1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgaiArKyApIHtcblxuXHRcdFx0XHRcdHV2LnggPSBpIC8gdHVidWxhclNlZ21lbnRzO1xuXHRcdFx0XHRcdHV2LnkgPSBqIC8gcmFkaWFsU2VnbWVudHM7XG5cblx0XHRcdFx0XHR1dnMucHVzaCggdXYueCwgdXYueSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCk7XG5cblx0XHRkYXRhLnBhdGggPSB0aGlzLnBhcmFtZXRlcnMucGF0aC50b0pTT04oKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxuXHRzdGF0aWMgZnJvbUpTT04oIGRhdGEgKSB7XG5cblx0XHQvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGJ1aWx0LWluIGN1cnZlcyAoZS5nLiBDYXRtdWxsUm9tQ3VydmUzKS5cblx0XHQvLyBVc2VyIGRlZmluZWQgY3VydmVzIG9yIGluc3RhbmNlcyBvZiBDdXJ2ZVBhdGggd2lsbCBub3QgYmUgZGVzZXJpYWxpemVkLlxuXHRcdHJldHVybiBuZXcgVHViZUdlb21ldHJ5KFxuXHRcdFx0bmV3IEN1cnZlc1sgZGF0YS5wYXRoLnR5cGUgXSgpLmZyb21KU09OKCBkYXRhLnBhdGggKSxcblx0XHRcdGRhdGEudHVidWxhclNlZ21lbnRzLFxuXHRcdFx0ZGF0YS5yYWRpdXMsXG5cdFx0XHRkYXRhLnJhZGlhbFNlZ21lbnRzLFxuXHRcdFx0ZGF0YS5jbG9zZWRcblx0XHQpO1xuXG5cdH1cblxufVxuXG5jbGFzcyBXaXJlZnJhbWVHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvciggZ2VvbWV0cnkgPSBudWxsICkge1xuXG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSAnV2lyZWZyYW1lR2VvbWV0cnknO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0ge1xuXHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5XG5cdFx0fTtcblxuXHRcdGlmICggZ2VvbWV0cnkgIT09IG51bGwgKSB7XG5cblx0XHRcdC8vIGJ1ZmZlclxuXG5cdFx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xuXHRcdFx0Y29uc3QgZWRnZXMgPSBuZXcgU2V0KCk7XG5cblx0XHRcdC8vIGhlbHBlciB2YXJpYWJsZXNcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgZW5kID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHQvLyBpbmRleGVkIEJ1ZmZlckdlb21ldHJ5XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdFx0XHRjb25zdCBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXg7XG5cdFx0XHRcdGxldCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0aWYgKCBncm91cHMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHRcdFx0Z3JvdXBzID0gWyB7IHN0YXJ0OiAwLCBjb3VudDogaW5kaWNlcy5jb3VudCwgbWF0ZXJpYWxJbmRleDogMCB9IF07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNyZWF0ZSBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgYWxsIGVnZXMgd2l0aG91dCBkdXBsaWNhdGVzXG5cblx0XHRcdFx0Zm9yICggbGV0IG8gPSAwLCBvbCA9IGdyb3Vwcy5sZW5ndGg7IG8gPCBvbDsgKysgbyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBvIF07XG5cblx0XHRcdFx0XHRjb25zdCBncm91cFN0YXJ0ID0gZ3JvdXAuc3RhcnQ7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBDb3VudCA9IGdyb3VwLmNvdW50O1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSBncm91cFN0YXJ0LCBsID0gKCBncm91cFN0YXJ0ICsgZ3JvdXBDb3VudCApOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCAzOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4MSA9IGluZGljZXMuZ2V0WCggaSArIGogKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5kZXgyID0gaW5kaWNlcy5nZXRYKCBpICsgKCBqICsgMSApICUgMyApO1xuXG5cdFx0XHRcdFx0XHRcdHN0YXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBpbmRleDEgKTtcblx0XHRcdFx0XHRcdFx0ZW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBpbmRleDIgKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzVW5pcXVlRWRnZSggc3RhcnQsIGVuZCwgZWRnZXMgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIHN0YXJ0LngsIHN0YXJ0LnksIHN0YXJ0LnogKTtcblx0XHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCBlbmQueCwgZW5kLnksIGVuZC56ICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9ICggcG9zaXRpb24uY291bnQgLyAzICk7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgMzsgaiArKyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gdGhyZWUgZWRnZXMgcGVyIHRyaWFuZ2xlLCBhbiBlZGdlIGlzIHJlcHJlc2VudGVkIGFzIChpbmRleDEsIGluZGV4Milcblx0XHRcdFx0XHRcdC8vIGUuZy4gdGhlIGZpcnN0IHRyaWFuZ2xlIGhhcyB0aGUgZm9sbG93aW5nIGVkZ2VzOiAoMCwxKSwoMSwyKSwoMiwwKVxuXG5cdFx0XHRcdFx0XHRjb25zdCBpbmRleDEgPSAzICogaSArIGo7XG5cdFx0XHRcdFx0XHRjb25zdCBpbmRleDIgPSAzICogaSArICggKCBqICsgMSApICUgMyApO1xuXG5cdFx0XHRcdFx0XHRzdGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgaW5kZXgxICk7XG5cdFx0XHRcdFx0XHRlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGluZGV4MiApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGlzVW5pcXVlRWRnZSggc3RhcnQsIGVuZCwgZWRnZXMgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCBzdGFydC54LCBzdGFydC55LCBzdGFydC56ICk7XG5cdFx0XHRcdFx0XHRcdHZlcnRpY2VzLnB1c2goIGVuZC54LCBlbmQueSwgZW5kLnogKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBidWlsZCBnZW9tZXRyeVxuXG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gaXNVbmlxdWVFZGdlKCBzdGFydCwgZW5kLCBlZGdlcyApIHtcblxuXHRjb25zdCBoYXNoMSA9IGAke3N0YXJ0Lnh9LCR7c3RhcnQueX0sJHtzdGFydC56fS0ke2VuZC54fSwke2VuZC55fSwke2VuZC56fWA7XG5cdGNvbnN0IGhhc2gyID0gYCR7ZW5kLnh9LCR7ZW5kLnl9LCR7ZW5kLnp9LSR7c3RhcnQueH0sJHtzdGFydC55fSwke3N0YXJ0Lnp9YDsgLy8gY29pbmNpZGVudCBlZGdlXG5cblx0aWYgKCBlZGdlcy5oYXMoIGhhc2gxICkgPT09IHRydWUgfHwgZWRnZXMuaGFzKCBoYXNoMiApID09PSB0cnVlICkge1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH0gZWxzZSB7XG5cblx0XHRlZGdlcy5hZGQoIGhhc2gxLCBoYXNoMiApO1xuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxufVxuXG52YXIgR2VvbWV0cmllcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRCb3hHZW9tZXRyeTogQm94R2VvbWV0cnksXG5cdEJveEJ1ZmZlckdlb21ldHJ5OiBCb3hHZW9tZXRyeSxcblx0Q2lyY2xlR2VvbWV0cnk6IENpcmNsZUdlb21ldHJ5LFxuXHRDaXJjbGVCdWZmZXJHZW9tZXRyeTogQ2lyY2xlR2VvbWV0cnksXG5cdENvbmVHZW9tZXRyeTogQ29uZUdlb21ldHJ5LFxuXHRDb25lQnVmZmVyR2VvbWV0cnk6IENvbmVHZW9tZXRyeSxcblx0Q3lsaW5kZXJHZW9tZXRyeTogQ3lsaW5kZXJHZW9tZXRyeSxcblx0Q3lsaW5kZXJCdWZmZXJHZW9tZXRyeTogQ3lsaW5kZXJHZW9tZXRyeSxcblx0RG9kZWNhaGVkcm9uR2VvbWV0cnk6IERvZGVjYWhlZHJvbkdlb21ldHJ5LFxuXHREb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTogRG9kZWNhaGVkcm9uR2VvbWV0cnksXG5cdEVkZ2VzR2VvbWV0cnk6IEVkZ2VzR2VvbWV0cnksXG5cdEV4dHJ1ZGVHZW9tZXRyeTogRXh0cnVkZUdlb21ldHJ5LFxuXHRFeHRydWRlQnVmZmVyR2VvbWV0cnk6IEV4dHJ1ZGVHZW9tZXRyeSxcblx0SWNvc2FoZWRyb25HZW9tZXRyeTogSWNvc2FoZWRyb25HZW9tZXRyeSxcblx0SWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTogSWNvc2FoZWRyb25HZW9tZXRyeSxcblx0TGF0aGVHZW9tZXRyeTogTGF0aGVHZW9tZXRyeSxcblx0TGF0aGVCdWZmZXJHZW9tZXRyeTogTGF0aGVHZW9tZXRyeSxcblx0T2N0YWhlZHJvbkdlb21ldHJ5OiBPY3RhaGVkcm9uR2VvbWV0cnksXG5cdE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTogT2N0YWhlZHJvbkdlb21ldHJ5LFxuXHRQbGFuZUdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LFxuXHRQbGFuZUJ1ZmZlckdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LFxuXHRQb2x5aGVkcm9uR2VvbWV0cnk6IFBvbHloZWRyb25HZW9tZXRyeSxcblx0UG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OiBQb2x5aGVkcm9uR2VvbWV0cnksXG5cdFJpbmdHZW9tZXRyeTogUmluZ0dlb21ldHJ5LFxuXHRSaW5nQnVmZmVyR2VvbWV0cnk6IFJpbmdHZW9tZXRyeSxcblx0U2hhcGVHZW9tZXRyeTogU2hhcGVHZW9tZXRyeSxcblx0U2hhcGVCdWZmZXJHZW9tZXRyeTogU2hhcGVHZW9tZXRyeSxcblx0U3BoZXJlR2VvbWV0cnk6IFNwaGVyZUdlb21ldHJ5LFxuXHRTcGhlcmVCdWZmZXJHZW9tZXRyeTogU3BoZXJlR2VvbWV0cnksXG5cdFRldHJhaGVkcm9uR2VvbWV0cnk6IFRldHJhaGVkcm9uR2VvbWV0cnksXG5cdFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IFRldHJhaGVkcm9uR2VvbWV0cnksXG5cdFRvcnVzR2VvbWV0cnk6IFRvcnVzR2VvbWV0cnksXG5cdFRvcnVzQnVmZmVyR2VvbWV0cnk6IFRvcnVzR2VvbWV0cnksXG5cdFRvcnVzS25vdEdlb21ldHJ5OiBUb3J1c0tub3RHZW9tZXRyeSxcblx0VG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6IFRvcnVzS25vdEdlb21ldHJ5LFxuXHRUdWJlR2VvbWV0cnk6IFR1YmVHZW9tZXRyeSxcblx0VHViZUJ1ZmZlckdlb21ldHJ5OiBUdWJlR2VvbWV0cnksXG5cdFdpcmVmcmFtZUdlb21ldHJ5OiBXaXJlZnJhbWVHZW9tZXRyeVxufSk7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPFRIUkVFLkNvbG9yPlxuICogfVxuICovXG5cbmNsYXNzIFNoYWRvd01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTaGFkb3dNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweDAwMDAwMCApO1xuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSB0cnVlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNoYWRvd01hdGVyaWFsLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICByb3VnaG5lc3M6IDxmbG9hdD4sXG4gKiAgbWV0YWxuZXNzOiA8ZmxvYXQ+LFxuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgZW1pc3NpdmU6IDxoZXg+LFxuICogIGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKiAgZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqICBub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICogIG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqICByb3VnaG5lc3NNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIG1ldGFsbmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGVudk1hcDogbmV3IFRIUkVFLkN1YmVUZXh0dXJlKCBbcG9zeCwgbmVneCwgcG9zeSwgbmVneSwgcG9zeiwgbmVnel0gKSxcbiAqICBlbnZNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgcmVmcmFjdGlvblJhdGlvOiA8ZmxvYXQ+LFxuICpcbiAqICB3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqICB3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKlxuICogIGZsYXRTaGFkaW5nOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoU3RhbmRhcmRNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7ICdTVEFOREFSRCc6ICcnIH07XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaFN0YW5kYXJkTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsgLy8gZGlmZnVzZVxuXHRcdHRoaXMucm91Z2huZXNzID0gMS4wO1xuXHRcdHRoaXMubWV0YWxuZXNzID0gMC4wO1xuXG5cdFx0dGhpcy5tYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IG51bGw7XG5cdFx0dGhpcy5saWdodE1hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuYW9NYXAgPSBudWxsO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLmVtaXNzaXZlID0gbmV3IENvbG9yKCAweDAwMDAwMCApO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gMTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCAxLCAxICk7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblxuXHRcdHRoaXMucm91Z2huZXNzTWFwID0gbnVsbDtcblxuXHRcdHRoaXMubWV0YWxuZXNzTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuZW52TWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4O1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBmYWxzZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJztcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJztcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0geyAnU1RBTkRBUkQnOiAnJyB9O1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblx0XHR0aGlzLnJvdWdobmVzcyA9IHNvdXJjZS5yb3VnaG5lc3M7XG5cdFx0dGhpcy5tZXRhbG5lc3MgPSBzb3VyY2UubWV0YWxuZXNzO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5lbWlzc2l2ZS5jb3B5KCBzb3VyY2UuZW1pc3NpdmUgKTtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gc291cmNlLmVtaXNzaXZlTWFwO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBzb3VyY2UuZW1pc3NpdmVJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0dGhpcy5yb3VnaG5lc3NNYXAgPSBzb3VyY2Uucm91Z2huZXNzTWFwO1xuXG5cdFx0dGhpcy5tZXRhbG5lc3NNYXAgPSBzb3VyY2UubWV0YWxuZXNzTWFwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuZW52TWFwID0gc291cmNlLmVudk1hcDtcblx0XHR0aGlzLmVudk1hcEludGVuc2l0eSA9IHNvdXJjZS5lbnZNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gc291cmNlLmZsYXRTaGFkaW5nO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNsZWFyY29hdDogPGZsb2F0PixcbiAqICBjbGVhcmNvYXRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgY2xlYXJjb2F0Um91Z2huZXNzOiA8ZmxvYXQ+LFxuICogIGNsZWFyY29hdFJvdWdobmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBjbGVhcmNvYXROb3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICogIGNsZWFyY29hdE5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgaW9yOiA8ZmxvYXQ+LFxuICogIHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqXG4gKiAgc2hlZW46IDxmbG9hdD4sXG4gKiAgc2hlZW5Db2xvcjogPENvbG9yPixcbiAqICBzaGVlbkNvbG9yTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIHNoZWVuUm91Z2huZXNzOiA8ZmxvYXQ+LFxuICogIHNoZWVuUm91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICB0cmFuc21pc3Npb246IDxmbG9hdD4sXG4gKiAgdHJhbnNtaXNzaW9uTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICB0aGlja25lc3M6IDxmbG9hdD4sXG4gKiAgdGhpY2tuZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGF0dGVudWF0aW9uRGlzdGFuY2U6IDxmbG9hdD4sXG4gKiAgYXR0ZW51YXRpb25Db2xvcjogPENvbG9yPixcbiAqXG4gKiAgc3BlY3VsYXJJbnRlbnNpdHk6IDxmbG9hdD4sXG4gKiAgc3BlY3VsYXJJbnRlbnNpdHlNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgc3BlY3VsYXJDb2xvcjogPENvbG9yPixcbiAqICBzcGVjdWxhckNvbG9yTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaFBoeXNpY2FsTWF0ZXJpYWwgZXh0ZW5kcyBNZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXG5cdFx0XHQnU1RBTkRBUkQnOiAnJyxcblx0XHRcdCdQSFlTSUNBTCc6ICcnXG5cblx0XHR9O1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2hQaHlzaWNhbE1hdGVyaWFsJztcblxuXHRcdHRoaXMuY2xlYXJjb2F0TWFwID0gbnVsbDtcblx0XHR0aGlzLmNsZWFyY29hdFJvdWdobmVzcyA9IDAuMDtcblx0XHR0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IG51bGw7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCAxLCAxICk7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5pb3IgPSAxLjU7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdyZWZsZWN0aXZpdHknLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRyZXR1cm4gKCBjbGFtcCggMi41ICogKCB0aGlzLmlvciAtIDEgKSAvICggdGhpcy5pb3IgKyAxICksIDAsIDEgKSApO1xuXG5cdFx0XHR9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbiAoIHJlZmxlY3Rpdml0eSApIHtcblxuXHRcdFx0XHR0aGlzLmlvciA9ICggMSArIDAuNCAqIHJlZmxlY3Rpdml0eSApIC8gKCAxIC0gMC40ICogcmVmbGVjdGl2aXR5ICk7XG5cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLnNoZWVuQ29sb3IgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdFx0dGhpcy5zaGVlbkNvbG9yTWFwID0gbnVsbDtcblx0XHR0aGlzLnNoZWVuUm91Z2huZXNzID0gMS4wO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy50cmFuc21pc3Npb25NYXAgPSBudWxsO1xuXG5cdFx0dGhpcy50aGlja25lc3MgPSAwO1xuXHRcdHRoaXMudGhpY2tuZXNzTWFwID0gbnVsbDtcblx0XHR0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UgPSAwLjA7XG5cdFx0dGhpcy5hdHRlbnVhdGlvbkNvbG9yID0gbmV3IENvbG9yKCAxLCAxLCAxICk7XG5cblx0XHR0aGlzLnNwZWN1bGFySW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAgPSBudWxsO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvciA9IG5ldyBDb2xvciggMSwgMSwgMSApO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvck1hcCA9IG51bGw7XG5cblx0XHR0aGlzLl9zaGVlbiA9IDAuMDtcblx0XHR0aGlzLl9jbGVhcmNvYXQgPSAwO1xuXHRcdHRoaXMuX3RyYW5zbWlzc2lvbiA9IDA7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRnZXQgc2hlZW4oKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fc2hlZW47XG5cblx0fVxuXG5cdHNldCBzaGVlbiggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXMuX3NoZWVuID4gMCAhPT0gdmFsdWUgPiAwICkge1xuXG5cdFx0XHR0aGlzLnZlcnNpb24gKys7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9zaGVlbiA9IHZhbHVlO1xuXG5cdH1cblxuXHRnZXQgY2xlYXJjb2F0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyY29hdDtcblxuXHR9XG5cblx0c2V0IGNsZWFyY29hdCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXMuX2NsZWFyY29hdCA+IDAgIT09IHZhbHVlID4gMCApIHtcblxuXHRcdFx0dGhpcy52ZXJzaW9uICsrO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fY2xlYXJjb2F0ID0gdmFsdWU7XG5cblx0fVxuXG5cdGdldCB0cmFuc21pc3Npb24oKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9uO1xuXG5cdH1cblxuXHRzZXQgdHJhbnNtaXNzaW9uKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdGhpcy5fdHJhbnNtaXNzaW9uID4gMCAhPT0gdmFsdWUgPiAwICkge1xuXG5cdFx0XHR0aGlzLnZlcnNpb24gKys7XG5cblx0XHR9XG5cblx0XHR0aGlzLl90cmFuc21pc3Npb24gPSB2YWx1ZTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cblx0XHRcdCdTVEFOREFSRCc6ICcnLFxuXHRcdFx0J1BIWVNJQ0FMJzogJydcblxuXHRcdH07XG5cblx0XHR0aGlzLmNsZWFyY29hdCA9IHNvdXJjZS5jbGVhcmNvYXQ7XG5cdFx0dGhpcy5jbGVhcmNvYXRNYXAgPSBzb3VyY2UuY2xlYXJjb2F0TWFwO1xuXHRcdHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzID0gc291cmNlLmNsZWFyY29hdFJvdWdobmVzcztcblx0XHR0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCA9IHNvdXJjZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG5cdFx0dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAgPSBzb3VyY2UuY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHRcdHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSggc291cmNlLmNsZWFyY29hdE5vcm1hbFNjYWxlICk7XG5cblx0XHR0aGlzLmlvciA9IHNvdXJjZS5pb3I7XG5cblx0XHR0aGlzLnNoZWVuID0gc291cmNlLnNoZWVuO1xuXHRcdHRoaXMuc2hlZW5Db2xvci5jb3B5KCBzb3VyY2Uuc2hlZW5Db2xvciApO1xuXHRcdHRoaXMuc2hlZW5Db2xvck1hcCA9IHNvdXJjZS5zaGVlbkNvbG9yTWFwO1xuXHRcdHRoaXMuc2hlZW5Sb3VnaG5lc3MgPSBzb3VyY2Uuc2hlZW5Sb3VnaG5lc3M7XG5cdFx0dGhpcy5zaGVlblJvdWdobmVzc01hcCA9IHNvdXJjZS5zaGVlblJvdWdobmVzc01hcDtcblxuXHRcdHRoaXMudHJhbnNtaXNzaW9uID0gc291cmNlLnRyYW5zbWlzc2lvbjtcblx0XHR0aGlzLnRyYW5zbWlzc2lvbk1hcCA9IHNvdXJjZS50cmFuc21pc3Npb25NYXA7XG5cblx0XHR0aGlzLnRoaWNrbmVzcyA9IHNvdXJjZS50aGlja25lc3M7XG5cdFx0dGhpcy50aGlja25lc3NNYXAgPSBzb3VyY2UudGhpY2tuZXNzTWFwO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSA9IHNvdXJjZS5hdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KCBzb3VyY2UuYXR0ZW51YXRpb25Db2xvciApO1xuXG5cdFx0dGhpcy5zcGVjdWxhckludGVuc2l0eSA9IHNvdXJjZS5zcGVjdWxhckludGVuc2l0eTtcblx0XHR0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwID0gc291cmNlLnNwZWN1bGFySW50ZW5zaXR5TWFwO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KCBzb3VyY2Uuc3BlY3VsYXJDb2xvciApO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvck1hcCA9IHNvdXJjZS5zcGVjdWxhckNvbG9yTWFwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hQaHlzaWNhbE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBzcGVjdWxhcjogPGhleD4sXG4gKiAgc2hpbmluZXNzOiA8ZmxvYXQ+LFxuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgZW1pc3NpdmU6IDxoZXg+LFxuICogIGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKiAgZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LFxuICpcbiAqICBub3JtYWxNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLFxuICogIG5vcm1hbFNjYWxlOiA8VmVjdG9yMj4sXG4gKlxuICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PixcbiAqICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LFxuICpcbiAqICBzcGVjdWxhck1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGVudk1hcDogbmV3IFRIUkVFLkN1YmVUZXh0dXJlKCBbcG9zeCwgbmVneCwgcG9zeSwgbmVneSwgcG9zeiwgbmVnel0gKSxcbiAqICBjb21iaW5lOiBUSFJFRS5NdWx0aXBseU9wZXJhdGlvbixcbiAqICByZWZsZWN0aXZpdHk6IDxmbG9hdD4sXG4gKiAgcmVmcmFjdGlvblJhdGlvOiA8ZmxvYXQ+LFxuICpcbiAqICB3aXJlZnJhbWU6IDxib29sZWFuPixcbiAqICB3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sXG4gKlxuICogIGZsYXRTaGFkaW5nOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoUGhvbmdNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaFBob25nTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsgLy8gZGlmZnVzZVxuXHRcdHRoaXMuc3BlY3VsYXIgPSBuZXcgQ29sb3IoIDB4MTExMTExICk7XG5cdFx0dGhpcy5zaGluaW5lc3MgPSAzMDtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblxuXHRcdHRoaXMubGlnaHRNYXAgPSBudWxsO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7XG5cblx0XHR0aGlzLmFvTWFwID0gbnVsbDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTtcblx0XHR0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5idW1wTWFwID0gbnVsbDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IDE7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IG51bGw7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMiggMSwgMSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IDA7XG5cblx0XHR0aGlzLnNwZWN1bGFyTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5lbnZNYXAgPSBudWxsO1xuXHRcdHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0aW9uO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gMTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXG5cdFx0dGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXHRcdHRoaXMuc3BlY3VsYXIuY29weSggc291cmNlLnNwZWN1bGFyICk7XG5cdFx0dGhpcy5zaGluaW5lc3MgPSBzb3VyY2Uuc2hpbmluZXNzO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXG5cdFx0dGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDtcblx0XHR0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5O1xuXG5cdFx0dGhpcy5lbWlzc2l2ZS5jb3B5KCBzb3VyY2UuZW1pc3NpdmUgKTtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gc291cmNlLmVtaXNzaXZlTWFwO1xuXHRcdHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBzb3VyY2UuZW1pc3NpdmVJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0dGhpcy5zcGVjdWxhck1hcCA9IHNvdXJjZS5zcGVjdWxhck1hcDtcblxuXHRcdHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7XG5cblx0XHR0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7XG5cdFx0dGhpcy5jb21iaW5lID0gc291cmNlLmNvbWJpbmU7XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5O1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbztcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBzb3VyY2UuZmxhdFNoYWRpbmc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaFBob25nTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICpcbiAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZ3JhZGllbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIGxpZ2h0TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICogIGFvTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKlxuICogIGVtaXNzaXZlOiA8aGV4PixcbiAqICBlbWlzc2l2ZUludGVuc2l0eTogPGZsb2F0PlxuICogIGVtaXNzaXZlTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaFRvb25NYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmRlZmluZXMgPSB7ICdUT09OJzogJycgfTtcblxuXHRcdHRoaXMudHlwZSA9ICdNZXNoVG9vbk1hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5ncmFkaWVudE1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IGZhbHNlO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnO1xuXG5cdFx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApO1xuXG5cdFx0dGhpcy5tYXAgPSBzb3VyY2UubWFwO1xuXHRcdHRoaXMuZ3JhZGllbnRNYXAgPSBzb3VyY2UuZ3JhZGllbnRNYXA7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmVtaXNzaXZlLmNvcHkoIHNvdXJjZS5lbWlzc2l2ZSApO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gc291cmNlLmJ1bXBTY2FsZTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTtcblx0XHR0aGlzLm5vcm1hbFNjYWxlLmNvcHkoIHNvdXJjZS5ub3JtYWxTY2FsZSApO1xuXG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gc291cmNlLmRpc3BsYWNlbWVudEJpYXM7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hUb29uTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGJ1bXBTY2FsZTogPGZsb2F0PixcbiAqXG4gKiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIG5vcm1hbE1hcFR5cGU6IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCxcbiAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LFxuICpcbiAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sXG4gKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PixcbiAqXG4gKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sXG4gKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+XG4gKlxuICogIGZsYXRTaGFkaW5nOiA8Ym9vbD5cbiAqIH1cbiAqL1xuXG5jbGFzcyBNZXNoTm9ybWFsTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlcnMgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ01lc2hOb3JtYWxNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBudWxsO1xuXHRcdHRoaXMuYnVtcFNjYWxlID0gMTtcblxuXHRcdHRoaXMubm9ybWFsTWFwID0gbnVsbDtcblx0XHR0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCAxLCAxICk7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXG5cdFx0dGhpcy5mb2cgPSBmYWxzZTtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBmYWxzZTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5idW1wTWFwID0gc291cmNlLmJ1bXBNYXA7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSBzb3VyY2UuYnVtcFNjYWxlO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IHNvdXJjZS5ub3JtYWxNYXBUeXBlO1xuXHRcdHRoaXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7XG5cblx0XHR0aGlzLmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7XG5cdFx0dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNvdXJjZS5kaXNwbGFjZW1lbnRTY2FsZTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhcztcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTtcblx0XHR0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7XG5cblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gc291cmNlLmZsYXRTaGFkaW5nO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbk1lc2hOb3JtYWxNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWwgPSB0cnVlO1xuXG4vKipcbiAqIHBhcmFtZXRlcnMgPSB7XG4gKiAgY29sb3I6IDxoZXg+LFxuICogIG9wYWNpdHk6IDxmbG9hdD4sXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD5cbiAqXG4gKiAgZW1pc3NpdmU6IDxoZXg+LFxuICogIGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+XG4gKiAgZW1pc3NpdmVNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIHNwZWN1bGFyTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgZW52TWFwOiBuZXcgVEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLFxuICogIGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5LFxuICogIHJlZmxlY3Rpdml0eTogPGZsb2F0PixcbiAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sXG4gKlxuICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LFxuICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PixcbiAqXG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaExhbWJlcnRNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVycyApIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaExhbWJlcnRNYXRlcmlhbCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlXG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gbnVsbDtcblx0XHR0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wO1xuXG5cdFx0dGhpcy5hb01hcCA9IG51bGw7XG5cdFx0dGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDtcblxuXHRcdHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmVtaXNzaXZlTWFwID0gbnVsbDtcblxuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmVudk1hcCA9IG51bGw7XG5cdFx0dGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247XG5cdFx0dGhpcy5yZWZsZWN0aXZpdHkgPSAxO1xuXHRcdHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODtcblxuXHRcdHRoaXMud2lyZWZyYW1lID0gZmFsc2U7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwO1xuXHRcdHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwO1xuXHRcdHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7XG5cblx0XHR0aGlzLmVtaXNzaXZlLmNvcHkoIHNvdXJjZS5lbWlzc2l2ZSApO1xuXHRcdHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7XG5cdFx0dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTtcblxuXHRcdHRoaXMuc3BlY3VsYXJNYXAgPSBzb3VyY2Uuc3BlY3VsYXJNYXA7XG5cblx0XHR0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwO1xuXG5cdFx0dGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwO1xuXHRcdHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5lO1xuXHRcdHRoaXMucmVmbGVjdGl2aXR5ID0gc291cmNlLnJlZmxlY3Rpdml0eTtcblx0XHR0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87XG5cblx0XHR0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7XG5cdFx0dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwO1xuXHRcdHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaExhbWJlcnRNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsID0gdHJ1ZTtcblxuLyoqXG4gKiBwYXJhbWV0ZXJzID0ge1xuICogIGNvbG9yOiA8aGV4PixcbiAqICBvcGFjaXR5OiA8ZmxvYXQ+LFxuICpcbiAqICBtYXRjYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksXG4gKlxuICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqXG4gKiAgYnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBidW1wU2NhbGU6IDxmbG9hdD4sXG4gKlxuICogIG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSxcbiAqICBub3JtYWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsXG4gKiAgbm9ybWFsU2NhbGU6IDxWZWN0b3IyPixcbiAqXG4gKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICogIGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LFxuICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sXG4gKlxuICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLFxuICpcbiAqICBmbGF0U2hhZGluZzogPGJvb2w+XG4gKiB9XG4gKi9cblxuY2xhc3MgTWVzaE1hdGNhcE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGVmaW5lcyA9IHsgJ01BVENBUCc6ICcnIH07XG5cblx0XHR0aGlzLnR5cGUgPSAnTWVzaE1hdGNhcE1hdGVyaWFsJztcblxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGRpZmZ1c2VcblxuXHRcdHRoaXMubWF0Y2FwID0gbnVsbDtcblxuXHRcdHRoaXMubWFwID0gbnVsbDtcblxuXHRcdHRoaXMuYnVtcE1hcCA9IG51bGw7XG5cdFx0dGhpcy5idW1wU2NhbGUgPSAxO1xuXG5cdFx0dGhpcy5ub3JtYWxNYXAgPSBudWxsO1xuXHRcdHRoaXMubm9ybWFsTWFwVHlwZSA9IFRhbmdlbnRTcGFjZU5vcm1hbE1hcDtcblx0XHR0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTtcblx0XHR0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IG51bGw7XG5cblx0XHR0aGlzLmZsYXRTaGFkaW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApO1xuXG5cdH1cblxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5kZWZpbmVzID0geyAnTUFUQ0FQJzogJycgfTtcblxuXHRcdHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7XG5cblx0XHR0aGlzLm1hdGNhcCA9IHNvdXJjZS5tYXRjYXA7XG5cblx0XHR0aGlzLm1hcCA9IHNvdXJjZS5tYXA7XG5cblx0XHR0aGlzLmJ1bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDtcblx0XHR0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7XG5cblx0XHR0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7XG5cdFx0dGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7XG5cdFx0dGhpcy5ub3JtYWxTY2FsZS5jb3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTtcblxuXHRcdHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291cmNlLmRpc3BsYWNlbWVudE1hcDtcblx0XHR0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0dGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDtcblxuXHRcdHRoaXMuZmxhdFNoYWRpbmcgPSBzb3VyY2UuZmxhdFNoYWRpbmc7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuTWVzaE1hdGNhcE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbCA9IHRydWU7XG5cbi8qKlxuICogcGFyYW1ldGVycyA9IHtcbiAqICBjb2xvcjogPGhleD4sXG4gKiAgb3BhY2l0eTogPGZsb2F0PixcbiAqXG4gKiAgbGluZXdpZHRoOiA8ZmxvYXQ+LFxuICpcbiAqICBzY2FsZTogPGZsb2F0PixcbiAqICBkYXNoU2l6ZTogPGZsb2F0PixcbiAqICBnYXBTaXplOiA8ZmxvYXQ+XG4gKiB9XG4gKi9cblxuY2xhc3MgTGluZURhc2hlZE1hdGVyaWFsIGV4dGVuZHMgTGluZUJhc2ljTWF0ZXJpYWwge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJzICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaW5lRGFzaGVkTWF0ZXJpYWwnO1xuXG5cdFx0dGhpcy5zY2FsZSA9IDE7XG5cdFx0dGhpcy5kYXNoU2l6ZSA9IDM7XG5cdFx0dGhpcy5nYXBTaXplID0gMTtcblxuXHRcdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5zY2FsZSA9IHNvdXJjZS5zY2FsZTtcblx0XHR0aGlzLmRhc2hTaXplID0gc291cmNlLmRhc2hTaXplO1xuXHRcdHRoaXMuZ2FwU2l6ZSA9IHNvdXJjZS5nYXBTaXplO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbkxpbmVEYXNoZWRNYXRlcmlhbC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgPSB0cnVlO1xuXG52YXIgTWF0ZXJpYWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFNoYWRvd01hdGVyaWFsOiBTaGFkb3dNYXRlcmlhbCxcblx0U3ByaXRlTWF0ZXJpYWw6IFNwcml0ZU1hdGVyaWFsLFxuXHRSYXdTaGFkZXJNYXRlcmlhbDogUmF3U2hhZGVyTWF0ZXJpYWwsXG5cdFNoYWRlck1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbCxcblx0UG9pbnRzTWF0ZXJpYWw6IFBvaW50c01hdGVyaWFsLFxuXHRNZXNoUGh5c2ljYWxNYXRlcmlhbDogTWVzaFBoeXNpY2FsTWF0ZXJpYWwsXG5cdE1lc2hTdGFuZGFyZE1hdGVyaWFsOiBNZXNoU3RhbmRhcmRNYXRlcmlhbCxcblx0TWVzaFBob25nTWF0ZXJpYWw6IE1lc2hQaG9uZ01hdGVyaWFsLFxuXHRNZXNoVG9vbk1hdGVyaWFsOiBNZXNoVG9vbk1hdGVyaWFsLFxuXHRNZXNoTm9ybWFsTWF0ZXJpYWw6IE1lc2hOb3JtYWxNYXRlcmlhbCxcblx0TWVzaExhbWJlcnRNYXRlcmlhbDogTWVzaExhbWJlcnRNYXRlcmlhbCxcblx0TWVzaERlcHRoTWF0ZXJpYWw6IE1lc2hEZXB0aE1hdGVyaWFsLFxuXHRNZXNoRGlzdGFuY2VNYXRlcmlhbDogTWVzaERpc3RhbmNlTWF0ZXJpYWwsXG5cdE1lc2hCYXNpY01hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCxcblx0TWVzaE1hdGNhcE1hdGVyaWFsOiBNZXNoTWF0Y2FwTWF0ZXJpYWwsXG5cdExpbmVEYXNoZWRNYXRlcmlhbDogTGluZURhc2hlZE1hdGVyaWFsLFxuXHRMaW5lQmFzaWNNYXRlcmlhbDogTGluZUJhc2ljTWF0ZXJpYWwsXG5cdE1hdGVyaWFsOiBNYXRlcmlhbFxufSk7XG5cbmNvbnN0IEFuaW1hdGlvblV0aWxzID0ge1xuXG5cdC8vIHNhbWUgYXMgQXJyYXkucHJvdG90eXBlLnNsaWNlLCBidXQgYWxzbyB3b3JrcyBvbiB0eXBlZCBhcnJheXNcblx0YXJyYXlTbGljZTogZnVuY3Rpb24gKCBhcnJheSwgZnJvbSwgdG8gKSB7XG5cblx0XHRpZiAoIEFuaW1hdGlvblV0aWxzLmlzVHlwZWRBcnJheSggYXJyYXkgKSApIHtcblxuXHRcdFx0Ly8gaW4gaW9zOSBhcnJheS5zdWJhcnJheShmcm9tLCB1bmRlZmluZWQpIHdpbGwgcmV0dXJuIGVtcHR5IGFycmF5XG5cdFx0XHQvLyBidXQgYXJyYXkuc3ViYXJyYXkoZnJvbSkgb3IgYXJyYXkuc3ViYXJyYXkoZnJvbSwgbGVuKSBpcyBjb3JyZWN0XG5cdFx0XHRyZXR1cm4gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBhcnJheS5zdWJhcnJheSggZnJvbSwgdG8gIT09IHVuZGVmaW5lZCA/IHRvIDogYXJyYXkubGVuZ3RoICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBhcnJheS5zbGljZSggZnJvbSwgdG8gKTtcblxuXHR9LFxuXG5cdC8vIGNvbnZlcnRzIGFuIGFycmF5IHRvIGEgc3BlY2lmaWMgdHlwZVxuXHRjb252ZXJ0QXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIHR5cGUsIGZvcmNlQ2xvbmUgKSB7XG5cblx0XHRpZiAoICEgYXJyYXkgfHwgLy8gbGV0ICd1bmRlZmluZWQnIGFuZCAnbnVsbCcgcGFzc1xuXHRcdFx0ISBmb3JjZUNsb25lICYmIGFycmF5LmNvbnN0cnVjdG9yID09PSB0eXBlICkgcmV0dXJuIGFycmF5O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gJ251bWJlcicgKSB7XG5cblx0XHRcdHJldHVybiBuZXcgdHlwZSggYXJyYXkgKTsgLy8gY3JlYXRlIHR5cGVkIGFycmF5XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFycmF5ICk7IC8vIGNyZWF0ZSBBcnJheVxuXG5cdH0sXG5cblx0aXNUeXBlZEFycmF5OiBmdW5jdGlvbiAoIG9iamVjdCApIHtcblxuXHRcdHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoIG9iamVjdCApICYmXG5cdFx0XHQhICggb2JqZWN0IGluc3RhbmNlb2YgRGF0YVZpZXcgKTtcblxuXHR9LFxuXG5cdC8vIHJldHVybnMgYW4gYXJyYXkgYnkgd2hpY2ggdGltZXMgYW5kIHZhbHVlcyBjYW4gYmUgc29ydGVkXG5cdGdldEtleWZyYW1lT3JkZXI6IGZ1bmN0aW9uICggdGltZXMgKSB7XG5cblx0XHRmdW5jdGlvbiBjb21wYXJlVGltZSggaSwgaiApIHtcblxuXHRcdFx0cmV0dXJuIHRpbWVzWyBpIF0gLSB0aW1lc1sgaiBdO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgbiA9IHRpbWVzLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoIG4gKTtcblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG47ICsrIGkgKSByZXN1bHRbIGkgXSA9IGk7XG5cblx0XHRyZXN1bHQuc29ydCggY29tcGFyZVRpbWUgKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cblx0fSxcblxuXHQvLyB1c2VzIHRoZSBhcnJheSBwcmV2aW91c2x5IHJldHVybmVkIGJ5ICdnZXRLZXlmcmFtZU9yZGVyJyB0byBzb3J0IGRhdGFcblx0c29ydGVkQXJyYXk6IGZ1bmN0aW9uICggdmFsdWVzLCBzdHJpZGUsIG9yZGVyICkge1xuXG5cdFx0Y29uc3QgblZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IHZhbHVlcy5jb25zdHJ1Y3RvciggblZhbHVlcyApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBkc3RPZmZzZXQgPSAwOyBkc3RPZmZzZXQgIT09IG5WYWx1ZXM7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IHNyY09mZnNldCA9IG9yZGVyWyBpIF0gKiBzdHJpZGU7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkge1xuXG5cdFx0XHRcdHJlc3VsdFsgZHN0T2Zmc2V0ICsrIF0gPSB2YWx1ZXNbIHNyY09mZnNldCArIGogXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHR9LFxuXG5cdC8vIGZ1bmN0aW9uIGZvciBwYXJzaW5nIEFPUyBrZXlmcmFtZSBmb3JtYXRzXG5cdGZsYXR0ZW5KU09OOiBmdW5jdGlvbiAoIGpzb25LZXlzLCB0aW1lcywgdmFsdWVzLCB2YWx1ZVByb3BlcnR5TmFtZSApIHtcblxuXHRcdGxldCBpID0gMSwga2V5ID0ganNvbktleXNbIDAgXTtcblxuXHRcdHdoaWxlICgga2V5ICE9PSB1bmRlZmluZWQgJiYga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGtleSA9IGpzb25LZXlzWyBpICsrIF07XG5cblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuOyAvLyBubyBkYXRhXG5cblx0XHRsZXQgdmFsdWUgPSBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF07XG5cdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuOyAvLyBubyBkYXRhXG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cblx0XHRcdGRvIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHR0aW1lcy5wdXNoKCBrZXkudGltZSApO1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoLmFwcGx5KCB2YWx1ZXMsIHZhbHVlICk7IC8vIHB1c2ggYWxsIGVsZW1lbnRzXG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzWyBpICsrIF07XG5cblx0XHRcdH0gd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCApO1xuXG5cdFx0fSBlbHNlIGlmICggdmFsdWUudG9BcnJheSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyAuLi5hc3N1bWUgVEhSRUUuTWF0aC1pc2hcblxuXHRcdFx0ZG8ge1xuXG5cdFx0XHRcdHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRpbWVzLnB1c2goIGtleS50aW1lICk7XG5cdFx0XHRcdFx0dmFsdWUudG9BcnJheSggdmFsdWVzLCB2YWx1ZXMubGVuZ3RoICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzWyBpICsrIF07XG5cblx0XHRcdH0gd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gb3RoZXJ3aXNlIHB1c2ggYXMtaXNcblxuXHRcdFx0ZG8ge1xuXG5cdFx0XHRcdHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHRpbWVzLnB1c2goIGtleS50aW1lICk7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleSA9IGpzb25LZXlzWyBpICsrIF07XG5cblx0XHRcdH0gd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCApO1xuXG5cdFx0fVxuXG5cdH0sXG5cblx0c3ViY2xpcDogZnVuY3Rpb24gKCBzb3VyY2VDbGlwLCBuYW1lLCBzdGFydEZyYW1lLCBlbmRGcmFtZSwgZnBzID0gMzAgKSB7XG5cblx0XHRjb25zdCBjbGlwID0gc291cmNlQ2xpcC5jbG9uZSgpO1xuXG5cdFx0Y2xpcC5uYW1lID0gbmFtZTtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY2xpcC50cmFja3MubGVuZ3RoOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCB0cmFjayA9IGNsaXAudHJhY2tzWyBpIF07XG5cdFx0XHRjb25zdCB2YWx1ZVNpemUgPSB0cmFjay5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdFx0Y29uc3QgdGltZXMgPSBbXTtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCB0cmFjay50aW1lcy5sZW5ndGg7ICsrIGogKSB7XG5cblx0XHRcdFx0Y29uc3QgZnJhbWUgPSB0cmFjay50aW1lc1sgaiBdICogZnBzO1xuXG5cdFx0XHRcdGlmICggZnJhbWUgPCBzdGFydEZyYW1lIHx8IGZyYW1lID49IGVuZEZyYW1lICkgY29udGludWU7XG5cblx0XHRcdFx0dGltZXMucHVzaCggdHJhY2sudGltZXNbIGogXSApO1xuXG5cdFx0XHRcdGZvciAoIGxldCBrID0gMDsgayA8IHZhbHVlU2l6ZTsgKysgayApIHtcblxuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB0cmFjay52YWx1ZXNbIGogKiB2YWx1ZVNpemUgKyBrIF0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aW1lcy5sZW5ndGggPT09IDAgKSBjb250aW51ZTtcblxuXHRcdFx0dHJhY2sudGltZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRpbWVzLCB0cmFjay50aW1lcy5jb25zdHJ1Y3RvciApO1xuXHRcdFx0dHJhY2sudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB2YWx1ZXMsIHRyYWNrLnZhbHVlcy5jb25zdHJ1Y3RvciApO1xuXG5cdFx0XHR0cmFja3MucHVzaCggdHJhY2sgKTtcblxuXHRcdH1cblxuXHRcdGNsaXAudHJhY2tzID0gdHJhY2tzO1xuXG5cdFx0Ly8gZmluZCBtaW5pbXVtIC50aW1lcyB2YWx1ZSBhY3Jvc3MgYWxsIHRyYWNrcyBpbiB0aGUgdHJpbW1lZCBjbGlwXG5cblx0XHRsZXQgbWluU3RhcnRUaW1lID0gSW5maW5pdHk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7ICsrIGkgKSB7XG5cblx0XHRcdGlmICggbWluU3RhcnRUaW1lID4gY2xpcC50cmFja3NbIGkgXS50aW1lc1sgMCBdICkge1xuXG5cdFx0XHRcdG1pblN0YXJ0VGltZSA9IGNsaXAudHJhY2tzWyBpIF0udGltZXNbIDAgXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gc2hpZnQgYWxsIHRyYWNrcyBzdWNoIHRoYXQgY2xpcCBiZWdpbnMgYXQgdD0wXG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7ICsrIGkgKSB7XG5cblx0XHRcdGNsaXAudHJhY2tzWyBpIF0uc2hpZnQoIC0gMSAqIG1pblN0YXJ0VGltZSApO1xuXG5cdFx0fVxuXG5cdFx0Y2xpcC5yZXNldER1cmF0aW9uKCk7XG5cblx0XHRyZXR1cm4gY2xpcDtcblxuXHR9LFxuXG5cdG1ha2VDbGlwQWRkaXRpdmU6IGZ1bmN0aW9uICggdGFyZ2V0Q2xpcCwgcmVmZXJlbmNlRnJhbWUgPSAwLCByZWZlcmVuY2VDbGlwID0gdGFyZ2V0Q2xpcCwgZnBzID0gMzAgKSB7XG5cblx0XHRpZiAoIGZwcyA8PSAwICkgZnBzID0gMzA7XG5cblx0XHRjb25zdCBudW1UcmFja3MgPSByZWZlcmVuY2VDbGlwLnRyYWNrcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVmZXJlbmNlVGltZSA9IHJlZmVyZW5jZUZyYW1lIC8gZnBzO1xuXG5cdFx0Ly8gTWFrZSBlYWNoIHRyYWNrJ3MgdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSB2YWx1ZXMgYXQgdGhlIHJlZmVyZW5jZSBmcmFtZVxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG51bVRyYWNrczsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgcmVmZXJlbmNlVHJhY2sgPSByZWZlcmVuY2VDbGlwLnRyYWNrc1sgaSBdO1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlVHJhY2tUeXBlID0gcmVmZXJlbmNlVHJhY2suVmFsdWVUeXBlTmFtZTtcblxuXHRcdFx0Ly8gU2tpcCB0aGlzIHRyYWNrIGlmIGl0J3Mgbm9uLW51bWVyaWNcblx0XHRcdGlmICggcmVmZXJlbmNlVHJhY2tUeXBlID09PSAnYm9vbCcgfHwgcmVmZXJlbmNlVHJhY2tUeXBlID09PSAnc3RyaW5nJyApIGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBGaW5kIHRoZSB0cmFjayBpbiB0aGUgdGFyZ2V0IGNsaXAgd2hvc2UgbmFtZSBhbmQgdHlwZSBtYXRjaGVzIHRoZSByZWZlcmVuY2UgdHJhY2tcblx0XHRcdGNvbnN0IHRhcmdldFRyYWNrID0gdGFyZ2V0Q2xpcC50cmFja3MuZmluZCggZnVuY3Rpb24gKCB0cmFjayApIHtcblxuXHRcdFx0XHRyZXR1cm4gdHJhY2submFtZSA9PT0gcmVmZXJlbmNlVHJhY2submFtZVxuXHRcdFx0XHRcdCYmIHRyYWNrLlZhbHVlVHlwZU5hbWUgPT09IHJlZmVyZW5jZVRyYWNrVHlwZTtcblxuXHRcdFx0fSApO1xuXG5cdFx0XHRpZiAoIHRhcmdldFRyYWNrID09PSB1bmRlZmluZWQgKSBjb250aW51ZTtcblxuXHRcdFx0bGV0IHJlZmVyZW5jZU9mZnNldCA9IDA7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VWYWx1ZVNpemUgPSByZWZlcmVuY2VUcmFjay5nZXRWYWx1ZVNpemUoKTtcblxuXHRcdFx0aWYgKCByZWZlcmVuY2VUcmFjay5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSApIHtcblxuXHRcdFx0XHRyZWZlcmVuY2VPZmZzZXQgPSByZWZlcmVuY2VWYWx1ZVNpemUgLyAzO1xuXG5cdFx0XHR9XG5cblx0XHRcdGxldCB0YXJnZXRPZmZzZXQgPSAwO1xuXHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWVTaXplID0gdGFyZ2V0VHJhY2suZ2V0VmFsdWVTaXplKCk7XG5cblx0XHRcdGlmICggdGFyZ2V0VHJhY2suY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUgKSB7XG5cblx0XHRcdFx0dGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0VmFsdWVTaXplIC8gMztcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSByZWZlcmVuY2VUcmFjay50aW1lcy5sZW5ndGggLSAxO1xuXHRcdFx0bGV0IHJlZmVyZW5jZVZhbHVlO1xuXG5cdFx0XHQvLyBGaW5kIHRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBvdXQgb2YgdGhlIHRyYWNrXG5cdFx0XHRpZiAoIHJlZmVyZW5jZVRpbWUgPD0gcmVmZXJlbmNlVHJhY2sudGltZXNbIDAgXSApIHtcblxuXHRcdFx0XHQvLyBSZWZlcmVuY2UgZnJhbWUgaXMgZWFybGllciB0aGFuIHRoZSBmaXJzdCBrZXlmcmFtZSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IGtleWZyYW1lXG5cdFx0XHRcdGNvbnN0IHN0YXJ0SW5kZXggPSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdGNvbnN0IGVuZEluZGV4ID0gcmVmZXJlbmNlVmFsdWVTaXplIC0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRyZWZlcmVuY2VWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHJlZmVyZW5jZVRyYWNrLnZhbHVlcywgc3RhcnRJbmRleCwgZW5kSW5kZXggKTtcblxuXHRcdFx0fSBlbHNlIGlmICggcmVmZXJlbmNlVGltZSA+PSByZWZlcmVuY2VUcmFjay50aW1lc1sgbGFzdEluZGV4IF0gKSB7XG5cblx0XHRcdFx0Ly8gUmVmZXJlbmNlIGZyYW1lIGlzIGFmdGVyIHRoZSBsYXN0IGtleWZyYW1lLCBzbyBqdXN0IHVzZSB0aGUgbGFzdCBrZXlmcmFtZVxuXHRcdFx0XHRjb25zdCBzdGFydEluZGV4ID0gbGFzdEluZGV4ICogcmVmZXJlbmNlVmFsdWVTaXplICsgcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyByZWZlcmVuY2VWYWx1ZVNpemUgLSByZWZlcmVuY2VPZmZzZXQ7XG5cdFx0XHRcdHJlZmVyZW5jZVZhbHVlID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggcmVmZXJlbmNlVHJhY2sudmFsdWVzLCBzdGFydEluZGV4LCBlbmRJbmRleCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEludGVycG9sYXRlIHRvIHRoZSByZWZlcmVuY2UgdmFsdWVcblx0XHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSByZWZlcmVuY2VUcmFjay5jcmVhdGVJbnRlcnBvbGFudCgpO1xuXHRcdFx0XHRjb25zdCBzdGFydEluZGV4ID0gcmVmZXJlbmNlT2Zmc2V0O1xuXHRcdFx0XHRjb25zdCBlbmRJbmRleCA9IHJlZmVyZW5jZVZhbHVlU2l6ZSAtIHJlZmVyZW5jZU9mZnNldDtcblx0XHRcdFx0aW50ZXJwb2xhbnQuZXZhbHVhdGUoIHJlZmVyZW5jZVRpbWUgKTtcblx0XHRcdFx0cmVmZXJlbmNlVmFsdWUgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCBpbnRlcnBvbGFudC5yZXN1bHRCdWZmZXIsIHN0YXJ0SW5kZXgsIGVuZEluZGV4ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29uanVnYXRlIHRoZSBxdWF0ZXJuaW9uXG5cdFx0XHRpZiAoIHJlZmVyZW5jZVRyYWNrVHlwZSA9PT0gJ3F1YXRlcm5pb24nICkge1xuXG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZVF1YXQgPSBuZXcgUXVhdGVybmlvbigpLmZyb21BcnJheSggcmVmZXJlbmNlVmFsdWUgKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKTtcblx0XHRcdFx0cmVmZXJlbmNlUXVhdC50b0FycmF5KCByZWZlcmVuY2VWYWx1ZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1YnRyYWN0IHRoZSByZWZlcmVuY2UgdmFsdWUgZnJvbSBhbGwgb2YgdGhlIHRyYWNrIHZhbHVlc1xuXG5cdFx0XHRjb25zdCBudW1UaW1lcyA9IHRhcmdldFRyYWNrLnRpbWVzLmxlbmd0aDtcblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IG51bVRpbWVzOyArKyBqICkge1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlU3RhcnQgPSBqICogdGFyZ2V0VmFsdWVTaXplICsgdGFyZ2V0T2Zmc2V0O1xuXG5cdFx0XHRcdGlmICggcmVmZXJlbmNlVHJhY2tUeXBlID09PSAncXVhdGVybmlvbicgKSB7XG5cblx0XHRcdFx0XHQvLyBNdWx0aXBseSB0aGUgY29uanVnYXRlIGZvciBxdWF0ZXJuaW9uIHRyYWNrIHR5cGVzXG5cdFx0XHRcdFx0UXVhdGVybmlvbi5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChcblx0XHRcdFx0XHRcdHRhcmdldFRyYWNrLnZhbHVlcyxcblx0XHRcdFx0XHRcdHZhbHVlU3RhcnQsXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2VWYWx1ZSxcblx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHR0YXJnZXRUcmFjay52YWx1ZXMsXG5cdFx0XHRcdFx0XHR2YWx1ZVN0YXJ0XG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVFbmQgPSB0YXJnZXRWYWx1ZVNpemUgLSB0YXJnZXRPZmZzZXQgKiAyO1xuXG5cdFx0XHRcdFx0Ly8gU3VidHJhY3QgZWFjaCB2YWx1ZSBmb3IgYWxsIG90aGVyIG51bWVyaWMgdHJhY2sgdHlwZXNcblx0XHRcdFx0XHRmb3IgKCBsZXQgayA9IDA7IGsgPCB2YWx1ZUVuZDsgKysgayApIHtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0VHJhY2sudmFsdWVzWyB2YWx1ZVN0YXJ0ICsgayBdIC09IHJlZmVyZW5jZVZhbHVlWyBrIF07XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0YXJnZXRDbGlwLmJsZW5kTW9kZSA9IEFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlO1xuXG5cdFx0cmV0dXJuIHRhcmdldENsaXA7XG5cblx0fVxuXG59O1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3Mgb2YgaW50ZXJwb2xhbnRzIG92ZXIgcGFyYW1ldHJpYyBzYW1wbGVzLlxuICpcbiAqIFRoZSBwYXJhbWV0ZXIgZG9tYWluIGlzIG9uZSBkaW1lbnNpb25hbCwgdHlwaWNhbGx5IHRoZSB0aW1lIG9yIGEgcGF0aFxuICogYWxvbmcgYSBjdXJ2ZSBkZWZpbmVkIGJ5IHRoZSBkYXRhLlxuICpcbiAqIFRoZSBzYW1wbGUgdmFsdWVzIGNhbiBoYXZlIGFueSBkaW1lbnNpb25hbGl0eSBhbmQgZGVyaXZlZCBjbGFzc2VzIG1heVxuICogYXBwbHkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbnMgdG8gdGhlIGRhdGEuXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgaW50ZXJ2YWwgc2VlayBpbiBhIFRlbXBsYXRlIE1ldGhvZCwgZGVmZXJyaW5nXG4gKiB0aGUgYWN0dWFsIGludGVycG9sYXRpb24gdG8gZGVyaXZlZCBjbGFzc2VzLlxuICpcbiAqIFRpbWUgY29tcGxleGl0eSBpcyBPKDEpIGZvciBsaW5lYXIgYWNjZXNzIGNyb3NzaW5nIGF0IG1vc3QgdHdvIHBvaW50c1xuICogYW5kIE8obG9nIE4pIGZvciByYW5kb20gYWNjZXNzLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25zLlxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKlxuICogXHRcdGh0dHA6Ly93d3cub29kZXNpZ24uY29tL3RlbXBsYXRlLW1ldGhvZC1wYXR0ZXJuLmh0bWxcbiAqXG4gKi9cblxuY2xhc3MgSW50ZXJwb2xhbnQge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkge1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMgPSBwYXJhbWV0ZXJQb3NpdGlvbnM7XG5cdFx0dGhpcy5fY2FjaGVkSW5kZXggPSAwO1xuXG5cdFx0dGhpcy5yZXN1bHRCdWZmZXIgPSByZXN1bHRCdWZmZXIgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRyZXN1bHRCdWZmZXIgOiBuZXcgc2FtcGxlVmFsdWVzLmNvbnN0cnVjdG9yKCBzYW1wbGVTaXplICk7XG5cdFx0dGhpcy5zYW1wbGVWYWx1ZXMgPSBzYW1wbGVWYWx1ZXM7XG5cdFx0dGhpcy52YWx1ZVNpemUgPSBzYW1wbGVTaXplO1xuXG5cdFx0dGhpcy5zZXR0aW5ncyA9IG51bGw7XG5cdFx0dGhpcy5EZWZhdWx0U2V0dGluZ3NfID0ge307XG5cblx0fVxuXG5cdGV2YWx1YXRlKCB0ICkge1xuXG5cdFx0Y29uc3QgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucztcblx0XHRsZXQgaTEgPSB0aGlzLl9jYWNoZWRJbmRleCxcblx0XHRcdHQxID0gcHBbIGkxIF0sXG5cdFx0XHR0MCA9IHBwWyBpMSAtIDEgXTtcblxuXHRcdHZhbGlkYXRlX2ludGVydmFsOiB7XG5cblx0XHRcdHNlZWs6IHtcblxuXHRcdFx0XHRsZXQgcmlnaHQ7XG5cblx0XHRcdFx0bGluZWFyX3NjYW46IHtcblxuXHRcdFx0XHRcdC8vLSBTZWUgaHR0cDovL2pzcGVyZi5jb20vY29tcGFyaXNvbi10by11bmRlZmluZWQvM1xuXHRcdFx0XHRcdC8vLSBzbG93ZXIgY29kZTpcblx0XHRcdFx0XHQvLy1cblx0XHRcdFx0XHQvLy0gXHRcdFx0XHRpZiAoIHQgPj0gdDEgfHwgdDEgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRmb3J3YXJkX3NjYW46IGlmICggISAoIHQgPCB0MSApICkge1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgZ2l2ZVVwQXQgPSBpMSArIDI7IDsgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0MSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0IDwgdDAgKSBicmVhayBmb3J3YXJkX3NjYW47XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBhZnRlciBlbmRcblxuXHRcdFx0XHRcdFx0XHRcdGkxID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKCBpMSAtIDEsIHQsIHQwICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICggaTEgPT09IGdpdmVVcEF0ICkgYnJlYWs7IC8vIHRoaXMgbG9vcFxuXG5cdFx0XHRcdFx0XHRcdHQwID0gdDE7XG5cdFx0XHRcdFx0XHRcdHQxID0gcHBbICsrIGkxIF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0IDwgdDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBoYXZlIGFycml2ZWQgYXQgdGhlIHNvdWdodCBpbnRlcnZhbFxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrIHNlZWs7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIHByZXBhcmUgYmluYXJ5IHNlYXJjaCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5kZXhcblx0XHRcdFx0XHRcdHJpZ2h0ID0gcHAubGVuZ3RoO1xuXHRcdFx0XHRcdFx0YnJlYWsgbGluZWFyX3NjYW47XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLy0gc2xvd2VyIGNvZGU6XG5cdFx0XHRcdFx0Ly8tXHRcdFx0XHRcdGlmICggdCA8IHQwIHx8IHQwID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aWYgKCAhICggdCA+PSB0MCApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBsb29waW5nP1xuXG5cdFx0XHRcdFx0XHRjb25zdCB0MWdsb2JhbCA9IHBwWyAxIF07XG5cblx0XHRcdFx0XHRcdGlmICggdCA8IHQxZ2xvYmFsICkge1xuXG5cdFx0XHRcdFx0XHRcdGkxID0gMjsgLy8gKyAxLCB1c2luZyB0aGUgc2NhbiBmb3IgdGhlIGRldGFpbHNcblx0XHRcdFx0XHRcdFx0dDAgPSB0MWdsb2JhbDtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBsaW5lYXIgcmV2ZXJzZSBzY2FuXG5cblx0XHRcdFx0XHRcdGZvciAoIGxldCBnaXZlVXBBdCA9IGkxIC0gMjsgOyApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHQwID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBiZWZvcmUgc3RhcnRcblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oIDAsIHQsIHQxICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICggaTEgPT09IGdpdmVVcEF0ICkgYnJlYWs7IC8vIHRoaXMgbG9vcFxuXG5cdFx0XHRcdFx0XHRcdHQxID0gdDA7XG5cdFx0XHRcdFx0XHRcdHQwID0gcHBbIC0tIGkxIC0gMSBdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdCA+PSB0MCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWsgc2VlaztcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gcHJlcGFyZSBiaW5hcnkgc2VhcmNoIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGluZGV4XG5cdFx0XHRcdFx0XHRyaWdodCA9IGkxO1xuXHRcdFx0XHRcdFx0aTEgPSAwO1xuXHRcdFx0XHRcdFx0YnJlYWsgbGluZWFyX3NjYW47XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyB0aGUgaW50ZXJ2YWwgaXMgdmFsaWRcblxuXHRcdFx0XHRcdGJyZWFrIHZhbGlkYXRlX2ludGVydmFsO1xuXG5cdFx0XHRcdH0gLy8gbGluZWFyIHNjYW5cblxuXHRcdFx0XHQvLyBiaW5hcnkgc2VhcmNoXG5cblx0XHRcdFx0d2hpbGUgKCBpMSA8IHJpZ2h0ICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgbWlkID0gKCBpMSArIHJpZ2h0ICkgPj4+IDE7XG5cblx0XHRcdFx0XHRpZiAoIHQgPCBwcFsgbWlkIF0gKSB7XG5cblx0XHRcdFx0XHRcdHJpZ2h0ID0gbWlkO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0aTEgPSBtaWQgKyAxO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0MSA9IHBwWyBpMSBdO1xuXHRcdFx0XHR0MCA9IHBwWyBpMSAtIDEgXTtcblxuXHRcdFx0XHQvLyBjaGVjayBib3VuZGFyeSBjYXNlcywgYWdhaW5cblxuXHRcdFx0XHRpZiAoIHQwID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IDA7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYmVmb3JlU3RhcnRfKCAwLCB0LCB0MSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHQxID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRpMSA9IHBwLmxlbmd0aDtcblx0XHRcdFx0XHR0aGlzLl9jYWNoZWRJbmRleCA9IGkxO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmFmdGVyRW5kXyggaTEgLSAxLCB0MCwgdCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSAvLyBzZWVrXG5cblx0XHRcdHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7XG5cblx0XHRcdHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyggaTEsIHQwLCB0MSApO1xuXG5cdFx0fSAvLyB2YWxpZGF0ZV9pbnRlcnZhbFxuXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKCBpMSwgdDAsIHQsIHQxICk7XG5cblx0fVxuXG5cdGdldFNldHRpbmdzXygpIHtcblxuXHRcdHJldHVybiB0aGlzLnNldHRpbmdzIHx8IHRoaXMuRGVmYXVsdFNldHRpbmdzXztcblxuXHR9XG5cblx0Y29weVNhbXBsZVZhbHVlXyggaW5kZXggKSB7XG5cblx0XHQvLyBjb3BpZXMgYSBzYW1wbGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBidWZmZXJcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVyLFxuXHRcdFx0dmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdG9mZnNldCA9IGluZGV4ICogc3RyaWRlO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdHJlc3VsdFsgaSBdID0gdmFsdWVzWyBvZmZzZXQgKyBpIF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdH1cblxuXHQvLyBUZW1wbGF0ZSBtZXRob2RzIGZvciBkZXJpdmVkIGNsYXNzZXM6XG5cblx0aW50ZXJwb2xhdGVfKCAvKiBpMSwgdDAsIHQsIHQxICovICkge1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCAnY2FsbCB0byBhYnN0cmFjdCBtZXRob2QnICk7XG5cdFx0Ly8gaW1wbGVtZW50YXRpb25zIHNoYWxsIHJldHVybiB0aGlzLnJlc3VsdEJ1ZmZlclxuXG5cdH1cblxuXHRpbnRlcnZhbENoYW5nZWRfKCAvKiBpMSwgdDAsIHQxICovICkge1xuXG5cdFx0Ly8gZW1wdHlcblxuXHR9XG5cbn1cblxuLy8gQUxJQVMgREVGSU5JVElPTlNcblxuSW50ZXJwb2xhbnQucHJvdG90eXBlLmJlZm9yZVN0YXJ0XyA9IEludGVycG9sYW50LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO1xuSW50ZXJwb2xhbnQucHJvdG90eXBlLmFmdGVyRW5kXyA9IEludGVycG9sYW50LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO1xuXG4vKipcbiAqIEZhc3QgYW5kIHNpbXBsZSBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhbnQuXG4gKlxuICogSXQgd2FzIGRlcml2ZWQgZnJvbSBhIEhlcm1pdGlhbiBjb25zdHJ1Y3Rpb24gc2V0dGluZyB0aGUgZmlyc3QgZGVyaXZhdGl2ZVxuICogYXQgZWFjaCBzYW1wbGUgcG9zaXRpb24gdG8gdGhlIGxpbmVhciBzbG9wZSBiZXR3ZWVuIG5laWdoYm9yaW5nIHBvc2l0aW9uc1xuICogb3ZlciB0aGVpciBwYXJhbWV0ZXIgaW50ZXJ2YWwuXG4gKi9cblxuY2xhc3MgQ3ViaWNJbnRlcnBvbGFudCBleHRlbmRzIEludGVycG9sYW50IHtcblxuXHRjb25zdHJ1Y3RvciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApIHtcblxuXHRcdHN1cGVyKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICk7XG5cblx0XHR0aGlzLl93ZWlnaHRQcmV2ID0gLSAwO1xuXHRcdHRoaXMuX29mZnNldFByZXYgPSAtIDA7XG5cdFx0dGhpcy5fd2VpZ2h0TmV4dCA9IC0gMDtcblx0XHR0aGlzLl9vZmZzZXROZXh0ID0gLSAwO1xuXG5cdFx0dGhpcy5EZWZhdWx0U2V0dGluZ3NfID0ge1xuXG5cdFx0XHRlbmRpbmdTdGFydDogWmVyb0N1cnZhdHVyZUVuZGluZyxcblx0XHRcdGVuZGluZ0VuZDogWmVyb0N1cnZhdHVyZUVuZGluZ1xuXG5cdFx0fTtcblxuXHR9XG5cblx0aW50ZXJ2YWxDaGFuZ2VkXyggaTEsIHQwLCB0MSApIHtcblxuXHRcdGNvbnN0IHBwID0gdGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7XG5cdFx0bGV0IGlQcmV2ID0gaTEgLSAyLFxuXHRcdFx0aU5leHQgPSBpMSArIDEsXG5cblx0XHRcdHRQcmV2ID0gcHBbIGlQcmV2IF0sXG5cdFx0XHR0TmV4dCA9IHBwWyBpTmV4dCBdO1xuXG5cdFx0aWYgKCB0UHJldiA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzd2l0Y2ggKCB0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0ICkge1xuXG5cdFx0XHRcdGNhc2UgWmVyb1Nsb3BlRW5kaW5nOlxuXG5cdFx0XHRcdFx0Ly8gZicodDApID0gMFxuXHRcdFx0XHRcdGlQcmV2ID0gaTE7XG5cdFx0XHRcdFx0dFByZXYgPSAyICogdDAgLSB0MTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgV3JhcEFyb3VuZEVuZGluZzpcblxuXHRcdFx0XHRcdC8vIHVzZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjdXJ2ZVxuXHRcdFx0XHRcdGlQcmV2ID0gcHAubGVuZ3RoIC0gMjtcblx0XHRcdFx0XHR0UHJldiA9IHQwICsgcHBbIGlQcmV2IF0gLSBwcFsgaVByZXYgKyAxIF07XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OiAvLyBaZXJvQ3VydmF0dXJlRW5kaW5nXG5cblx0XHRcdFx0XHQvLyBmJycodDApID0gMCBhLmsuYS4gTmF0dXJhbCBTcGxpbmVcblx0XHRcdFx0XHRpUHJldiA9IGkxO1xuXHRcdFx0XHRcdHRQcmV2ID0gdDE7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggdE5leHQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0c3dpdGNoICggdGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQgKSB7XG5cblx0XHRcdFx0Y2FzZSBaZXJvU2xvcGVFbmRpbmc6XG5cblx0XHRcdFx0XHQvLyBmJyh0TikgPSAwXG5cdFx0XHRcdFx0aU5leHQgPSBpMTtcblx0XHRcdFx0XHR0TmV4dCA9IDIgKiB0MSAtIHQwO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBXcmFwQXJvdW5kRW5kaW5nOlxuXG5cdFx0XHRcdFx0Ly8gdXNlIHRoZSBvdGhlciBlbmQgb2YgdGhlIGN1cnZlXG5cdFx0XHRcdFx0aU5leHQgPSAxO1xuXHRcdFx0XHRcdHROZXh0ID0gdDEgKyBwcFsgMSBdIC0gcHBbIDAgXTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRpbmdcblxuXHRcdFx0XHRcdC8vIGYnJyh0TikgPSAwLCBhLmsuYS4gTmF0dXJhbCBTcGxpbmVcblx0XHRcdFx0XHRpTmV4dCA9IGkxIC0gMTtcblx0XHRcdFx0XHR0TmV4dCA9IHQwO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBoYWxmRHQgPSAoIHQxIC0gdDAgKSAqIDAuNSxcblx0XHRcdHN0cmlkZSA9IHRoaXMudmFsdWVTaXplO1xuXG5cdFx0dGhpcy5fd2VpZ2h0UHJldiA9IGhhbGZEdCAvICggdDAgLSB0UHJldiApO1xuXHRcdHRoaXMuX3dlaWdodE5leHQgPSBoYWxmRHQgLyAoIHROZXh0IC0gdDEgKTtcblx0XHR0aGlzLl9vZmZzZXRQcmV2ID0gaVByZXYgKiBzdHJpZGU7XG5cdFx0dGhpcy5fb2Zmc2V0TmV4dCA9IGlOZXh0ICogc3RyaWRlO1xuXG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oIGkxLCB0MCwgdCwgdDEgKSB7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlcixcblx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cblx0XHRcdG8xID0gaTEgKiBzdHJpZGUsXHRcdG8wID0gbzEgLSBzdHJpZGUsXG5cdFx0XHRvUCA9IHRoaXMuX29mZnNldFByZXYsIFx0b04gPSB0aGlzLl9vZmZzZXROZXh0LFxuXHRcdFx0d1AgPSB0aGlzLl93ZWlnaHRQcmV2LFx0d04gPSB0aGlzLl93ZWlnaHROZXh0LFxuXG5cdFx0XHRwID0gKCB0IC0gdDAgKSAvICggdDEgLSB0MCApLFxuXHRcdFx0cHAgPSBwICogcCxcblx0XHRcdHBwcCA9IHBwICogcDtcblxuXHRcdC8vIGV2YWx1YXRlIHBvbHlub21pYWxzXG5cblx0XHRjb25zdCBzUCA9IC0gd1AgKiBwcHAgKyAyICogd1AgKiBwcCAtIHdQICogcDtcblx0XHRjb25zdCBzMCA9ICggMSArIHdQICkgKiBwcHAgKyAoIC0gMS41IC0gMiAqIHdQICkgKiBwcCArICggLSAwLjUgKyB3UCApICogcCArIDE7XG5cdFx0Y29uc3QgczEgPSAoIC0gMSAtIHdOICkgKiBwcHAgKyAoIDEuNSArIHdOICkgKiBwcCArIDAuNSAqIHA7XG5cdFx0Y29uc3Qgc04gPSB3TiAqIHBwcCAtIHdOICogcHA7XG5cblx0XHQvLyBjb21iaW5lIGRhdGEgbGluZWFybHlcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArKyBpICkge1xuXG5cdFx0XHRyZXN1bHRbIGkgXSA9XG5cdFx0XHRcdFx0c1AgKiB2YWx1ZXNbIG9QICsgaSBdICtcblx0XHRcdFx0XHRzMCAqIHZhbHVlc1sgbzAgKyBpIF0gK1xuXHRcdFx0XHRcdHMxICogdmFsdWVzWyBvMSArIGkgXSArXG5cdFx0XHRcdFx0c04gKiB2YWx1ZXNbIG9OICsgaSBdO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHR9XG5cbn1cblxuY2xhc3MgTGluZWFySW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7XG5cblx0XHRzdXBlciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApO1xuXG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oIGkxLCB0MCwgdCwgdDEgKSB7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlcixcblx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cblx0XHRcdG9mZnNldDEgPSBpMSAqIHN0cmlkZSxcblx0XHRcdG9mZnNldDAgPSBvZmZzZXQxIC0gc3RyaWRlLFxuXG5cdFx0XHR3ZWlnaHQxID0gKCB0IC0gdDAgKSAvICggdDEgLSB0MCApLFxuXHRcdFx0d2VpZ2h0MCA9IDEgLSB3ZWlnaHQxO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdHJlc3VsdFsgaSBdID1cblx0XHRcdFx0XHR2YWx1ZXNbIG9mZnNldDAgKyBpIF0gKiB3ZWlnaHQwICtcblx0XHRcdFx0XHR2YWx1ZXNbIG9mZnNldDEgKyBpIF0gKiB3ZWlnaHQxO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHR9XG5cbn1cblxuLyoqXG4gKlxuICogSW50ZXJwb2xhbnQgdGhhdCBldmFsdWF0ZXMgdG8gdGhlIHNhbXBsZSB2YWx1ZSBhdCB0aGUgcG9zaXRpb24gcHJlY2VlZGluZ1xuICogdGhlIHBhcmFtZXRlci5cbiAqL1xuXG5jbGFzcyBEaXNjcmV0ZUludGVycG9sYW50IGV4dGVuZHMgSW50ZXJwb2xhbnQge1xuXG5cdGNvbnN0cnVjdG9yKCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkge1xuXG5cdFx0c3VwZXIoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTtcblxuXHR9XG5cblx0aW50ZXJwb2xhdGVfKCBpMSAvKiwgdDAsIHQsIHQxICovICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyggaTEgLSAxICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEtleWZyYW1lVHJhY2sge1xuXG5cdGNvbnN0cnVjdG9yKCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICkge1xuXG5cdFx0aWYgKCBuYW1lID09PSB1bmRlZmluZWQgKSB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCcgKTtcblx0XHRpZiAoIHRpbWVzID09PSB1bmRlZmluZWQgfHwgdGltZXMubGVuZ3RoID09PSAwICkgdGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICcgKyBuYW1lICk7XG5cblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXG5cdFx0dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdGltZXMsIHRoaXMuVGltZUJ1ZmZlclR5cGUgKTtcblx0XHR0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdmFsdWVzLCB0aGlzLlZhbHVlQnVmZmVyVHlwZSApO1xuXG5cdFx0dGhpcy5zZXRJbnRlcnBvbGF0aW9uKCBpbnRlcnBvbGF0aW9uIHx8IHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24gKTtcblxuXHR9XG5cblx0Ly8gU2VyaWFsaXphdGlvbiAoaW4gc3RhdGljIGNvbnRleHQsIGJlY2F1c2Ugb2YgY29uc3RydWN0b3IgaW52b2NhdGlvblxuXHQvLyBhbmQgYXV0b21hdGljIGludm9jYXRpb24gb2YgLnRvSlNPTik6XG5cblx0c3RhdGljIHRvSlNPTiggdHJhY2sgKSB7XG5cblx0XHRjb25zdCB0cmFja1R5cGUgPSB0cmFjay5jb25zdHJ1Y3RvcjtcblxuXHRcdGxldCBqc29uO1xuXG5cdFx0Ly8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgdG9KU09OIG1ldGhvZFxuXHRcdGlmICggdHJhY2tUeXBlLnRvSlNPTiAhPT0gdGhpcy50b0pTT04gKSB7XG5cblx0XHRcdGpzb24gPSB0cmFja1R5cGUudG9KU09OKCB0cmFjayApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gYnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoZSBkYXRhIGNhbiBiZSBzZXJpYWxpemVkIGFzLWlzXG5cdFx0XHRqc29uID0ge1xuXG5cdFx0XHRcdCduYW1lJzogdHJhY2submFtZSxcblx0XHRcdFx0J3RpbWVzJzogQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB0cmFjay50aW1lcywgQXJyYXkgKSxcblx0XHRcdFx0J3ZhbHVlcyc6IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdHJhY2sudmFsdWVzLCBBcnJheSApXG5cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGludGVycG9sYXRpb24gPSB0cmFjay5nZXRJbnRlcnBvbGF0aW9uKCk7XG5cblx0XHRcdGlmICggaW50ZXJwb2xhdGlvbiAhPT0gdHJhY2suRGVmYXVsdEludGVycG9sYXRpb24gKSB7XG5cblx0XHRcdFx0anNvbi5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0anNvbi50eXBlID0gdHJhY2suVmFsdWVUeXBlTmFtZTsgLy8gbWFuZGF0b3J5XG5cblx0XHRyZXR1cm4ganNvbjtcblxuXHR9XG5cblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUoIHJlc3VsdCApIHtcblxuXHRcdHJldHVybiBuZXcgRGlzY3JldGVJbnRlcnBvbGFudCggdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApO1xuXG5cdH1cblxuXHRJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIoIHJlc3VsdCApIHtcblxuXHRcdHJldHVybiBuZXcgTGluZWFySW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTtcblxuXHR9XG5cblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKCByZXN1bHQgKSB7XG5cblx0XHRyZXR1cm4gbmV3IEN1YmljSW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTtcblxuXHR9XG5cblx0c2V0SW50ZXJwb2xhdGlvbiggaW50ZXJwb2xhdGlvbiApIHtcblxuXHRcdGxldCBmYWN0b3J5TWV0aG9kO1xuXG5cdFx0c3dpdGNoICggaW50ZXJwb2xhdGlvbiApIHtcblxuXHRcdFx0Y2FzZSBJbnRlcnBvbGF0ZURpc2NyZXRlOlxuXG5cdFx0XHRcdGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEludGVycG9sYXRlTGluZWFyOlxuXG5cdFx0XHRcdGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBJbnRlcnBvbGF0ZVNtb290aDpcblxuXHRcdFx0XHRmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHR9XG5cblx0XHRpZiAoIGZhY3RvcnlNZXRob2QgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9ICd1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAnICtcblx0XHRcdFx0dGhpcy5WYWx1ZVR5cGVOYW1lICsgJyBrZXlmcmFtZSB0cmFjayBuYW1lZCAnICsgdGhpcy5uYW1lO1xuXG5cdFx0XHRpZiAoIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBmYWxsIGJhY2sgdG8gZGVmYXVsdCwgdW5sZXNzIHRoZSBkZWZhdWx0IGl0c2VsZiBpcyBtZXNzZWQgdXBcblx0XHRcdFx0aWYgKCBpbnRlcnBvbGF0aW9uICE9PSB0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uICkge1xuXG5cdFx0XHRcdFx0dGhpcy5zZXRJbnRlcnBvbGF0aW9uKCB0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggbWVzc2FnZSApOyAvLyBmYXRhbCwgaW4gdGhpcyBjYXNlXG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLktleWZyYW1lVHJhY2s6JywgbWVzc2FnZSApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9XG5cblx0XHR0aGlzLmNyZWF0ZUludGVycG9sYW50ID0gZmFjdG9yeU1ldGhvZDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRJbnRlcnBvbGF0aW9uKCkge1xuXG5cdFx0c3dpdGNoICggdGhpcy5jcmVhdGVJbnRlcnBvbGFudCApIHtcblxuXHRcdFx0Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOlxuXG5cdFx0XHRcdHJldHVybiBJbnRlcnBvbGF0ZURpc2NyZXRlO1xuXG5cdFx0XHRjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOlxuXG5cdFx0XHRcdHJldHVybiBJbnRlcnBvbGF0ZUxpbmVhcjtcblxuXHRcdFx0Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpcblxuXHRcdFx0XHRyZXR1cm4gSW50ZXJwb2xhdGVTbW9vdGg7XG5cblx0XHR9XG5cblx0fVxuXG5cdGdldFZhbHVlU2l6ZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggLyB0aGlzLnRpbWVzLmxlbmd0aDtcblxuXHR9XG5cblx0Ly8gbW92ZSBhbGwga2V5ZnJhbWVzIGVpdGhlciBmb3J3YXJkcyBvciBiYWNrd2FyZHMgaW4gdGltZVxuXHRzaGlmdCggdGltZU9mZnNldCApIHtcblxuXHRcdGlmICggdGltZU9mZnNldCAhPT0gMC4wICkge1xuXG5cdFx0XHRjb25zdCB0aW1lcyA9IHRoaXMudGltZXM7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbiA9IHRpbWVzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0XHR0aW1lc1sgaSBdICs9IHRpbWVPZmZzZXQ7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyBzY2FsZSBhbGwga2V5ZnJhbWUgdGltZXMgYnkgYSBmYWN0b3IgKHVzZWZ1bCBmb3IgZnJhbWUgPC0+IHNlY29uZHMgY29udmVyc2lvbnMpXG5cdHNjYWxlKCB0aW1lU2NhbGUgKSB7XG5cblx0XHRpZiAoIHRpbWVTY2FsZSAhPT0gMS4wICkge1xuXG5cdFx0XHRjb25zdCB0aW1lcyA9IHRoaXMudGltZXM7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbiA9IHRpbWVzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0XHR0aW1lc1sgaSBdICo9IHRpbWVTY2FsZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIHJlbW92ZXMga2V5ZnJhbWVzIGJlZm9yZSBhbmQgYWZ0ZXIgYW5pbWF0aW9uIHdpdGhvdXQgY2hhbmdpbmcgYW55IHZhbHVlcyB3aXRoaW4gdGhlIHJhbmdlIFtzdGFydFRpbWUsIGVuZFRpbWVdLlxuXHQvLyBJTVBPUlRBTlQ6IFdlIGRvIG5vdCBzaGlmdCBhcm91bmQga2V5cyB0byB0aGUgc3RhcnQgb2YgdGhlIHRyYWNrIHRpbWUsIGJlY2F1c2UgZm9yIGludGVycG9sYXRlZCBrZXlzIHRoaXMgd2lsbCBjaGFuZ2UgdGhlaXIgdmFsdWVzXG5cdHRyaW0oIHN0YXJ0VGltZSwgZW5kVGltZSApIHtcblxuXHRcdGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcyxcblx0XHRcdG5LZXlzID0gdGltZXMubGVuZ3RoO1xuXG5cdFx0bGV0IGZyb20gPSAwLFxuXHRcdFx0dG8gPSBuS2V5cyAtIDE7XG5cblx0XHR3aGlsZSAoIGZyb20gIT09IG5LZXlzICYmIHRpbWVzWyBmcm9tIF0gPCBzdGFydFRpbWUgKSB7XG5cblx0XHRcdCsrIGZyb207XG5cblx0XHR9XG5cblx0XHR3aGlsZSAoIHRvICE9PSAtIDEgJiYgdGltZXNbIHRvIF0gPiBlbmRUaW1lICkge1xuXG5cdFx0XHQtLSB0bztcblxuXHRcdH1cblxuXHRcdCsrIHRvOyAvLyBpbmNsdXNpdmUgLT4gZXhjbHVzaXZlIGJvdW5kXG5cblx0XHRpZiAoIGZyb20gIT09IDAgfHwgdG8gIT09IG5LZXlzICkge1xuXG5cdFx0XHQvLyBlbXB0eSB0cmFja3MgYXJlIGZvcmJpZGRlbiwgc28ga2VlcCBhdCBsZWFzdCBvbmUga2V5ZnJhbWVcblx0XHRcdGlmICggZnJvbSA+PSB0byApIHtcblxuXHRcdFx0XHR0byA9IE1hdGgubWF4KCB0bywgMSApO1xuXHRcdFx0XHRmcm9tID0gdG8gLSAxO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7XG5cdFx0XHR0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGltZXMsIGZyb20sIHRvICk7XG5cdFx0XHR0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRoaXMudmFsdWVzLCBmcm9tICogc3RyaWRlLCB0byAqIHN0cmlkZSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIGVuc3VyZSB3ZSBkbyBub3QgZ2V0IGEgR2FyYmFnZUluR2FyYmFnZU91dCBzaXR1YXRpb24sIG1ha2Ugc3VyZSB0cmFja3MgYXJlIGF0IGxlYXN0IG1pbmltYWxseSB2aWFibGVcblx0dmFsaWRhdGUoKSB7XG5cblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Y29uc3QgdmFsdWVTaXplID0gdGhpcy5nZXRWYWx1ZVNpemUoKTtcblx0XHRpZiAoIHZhbHVlU2l6ZSAtIE1hdGguZmxvb3IoIHZhbHVlU2l6ZSApICE9PSAwICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLicsIHRoaXMgKTtcblx0XHRcdHZhbGlkID0gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRjb25zdCB0aW1lcyA9IHRoaXMudGltZXMsXG5cdFx0XHR2YWx1ZXMgPSB0aGlzLnZhbHVlcyxcblxuXHRcdFx0bktleXMgPSB0aW1lcy5sZW5ndGg7XG5cblx0XHRpZiAoIG5LZXlzID09PSAwICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuJywgdGhpcyApO1xuXHRcdFx0dmFsaWQgPSBmYWxzZTtcblxuXHRcdH1cblxuXHRcdGxldCBwcmV2VGltZSA9IG51bGw7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG5LZXlzOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBjdXJyVGltZSA9IHRpbWVzWyBpIF07XG5cblx0XHRcdGlmICggdHlwZW9mIGN1cnJUaW1lID09PSAnbnVtYmVyJyAmJiBpc05hTiggY3VyclRpbWUgKSApIHtcblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgY3VyclRpbWUgKTtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBwcmV2VGltZSAhPT0gbnVsbCAmJiBwcmV2VGltZSA+IGN1cnJUaW1lICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4nLCB0aGlzLCBpLCBjdXJyVGltZSwgcHJldlRpbWUgKTtcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0cHJldlRpbWUgPSBjdXJyVGltZTtcblxuXHRcdH1cblxuXHRcdGlmICggdmFsdWVzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGlmICggQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KCB2YWx1ZXMgKSApIHtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbIGkgXTtcblxuXHRcdFx0XHRcdGlmICggaXNOYU4oIHZhbHVlICkgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgdmFsdWUgKTtcblx0XHRcdFx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZDtcblxuXHR9XG5cblx0Ly8gcmVtb3ZlcyBlcXVpdmFsZW50IHNlcXVlbnRpYWwga2V5cyBhcyBjb21tb24gaW4gbW9ycGggdGFyZ2V0IHNlcXVlbmNlc1xuXHQvLyAoMCwwLDAsMCwxLDEsMSwwLDAsMCwwLDAsMCwwKSAtLT4gKDAsMCwxLDEsMCwwKVxuXHRvcHRpbWl6ZSgpIHtcblxuXHRcdC8vIHRpbWVzIG9yIHZhbHVlcyBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIgdHJhY2tzLCBzbyBvdmVyd3JpdGluZyBpcyB1bnNhZmVcblx0XHRjb25zdCB0aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRoaXMudGltZXMgKSxcblx0XHRcdHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRoaXMudmFsdWVzICksXG5cdFx0XHRzdHJpZGUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpLFxuXG5cdFx0XHRzbW9vdGhJbnRlcnBvbGF0aW9uID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uKCkgPT09IEludGVycG9sYXRlU21vb3RoLFxuXG5cdFx0XHRsYXN0SW5kZXggPSB0aW1lcy5sZW5ndGggLSAxO1xuXG5cdFx0bGV0IHdyaXRlSW5kZXggPSAxO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAxOyBpIDwgbGFzdEluZGV4OyArKyBpICkge1xuXG5cdFx0XHRsZXQga2VlcCA9IGZhbHNlO1xuXG5cdFx0XHRjb25zdCB0aW1lID0gdGltZXNbIGkgXTtcblx0XHRcdGNvbnN0IHRpbWVOZXh0ID0gdGltZXNbIGkgKyAxIF07XG5cblx0XHRcdC8vIHJlbW92ZSBhZGphY2VudCBrZXlmcmFtZXMgc2NoZWR1bGVkIGF0IHRoZSBzYW1lIHRpbWVcblxuXHRcdFx0aWYgKCB0aW1lICE9PSB0aW1lTmV4dCAmJiAoIGkgIT09IDEgfHwgdGltZSAhPT0gdGltZXNbIDAgXSApICkge1xuXG5cdFx0XHRcdGlmICggISBzbW9vdGhJbnRlcnBvbGF0aW9uICkge1xuXG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIHVubmVjZXNzYXJ5IGtleWZyYW1lcyBzYW1lIGFzIHRoZWlyIG5laWdoYm9yc1xuXG5cdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gaSAqIHN0cmlkZSxcblx0XHRcdFx0XHRcdG9mZnNldFAgPSBvZmZzZXQgLSBzdHJpZGUsXG5cdFx0XHRcdFx0XHRvZmZzZXROID0gb2Zmc2V0ICsgc3RyaWRlO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzWyBvZmZzZXQgKyBqIF07XG5cblx0XHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHZhbHVlc1sgb2Zmc2V0UCArIGogXSB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSAhPT0gdmFsdWVzWyBvZmZzZXROICsgaiBdICkge1xuXG5cdFx0XHRcdFx0XHRcdGtlZXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRrZWVwID0gdHJ1ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly8gaW4tcGxhY2UgY29tcGFjdGlvblxuXG5cdFx0XHRpZiAoIGtlZXAgKSB7XG5cblx0XHRcdFx0aWYgKCBpICE9PSB3cml0ZUluZGV4ICkge1xuXG5cdFx0XHRcdFx0dGltZXNbIHdyaXRlSW5kZXggXSA9IHRpbWVzWyBpIF07XG5cblx0XHRcdFx0XHRjb25zdCByZWFkT2Zmc2V0ID0gaSAqIHN0cmlkZSxcblx0XHRcdFx0XHRcdHdyaXRlT2Zmc2V0ID0gd3JpdGVJbmRleCAqIHN0cmlkZTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkge1xuXG5cdFx0XHRcdFx0XHR2YWx1ZXNbIHdyaXRlT2Zmc2V0ICsgaiBdID0gdmFsdWVzWyByZWFkT2Zmc2V0ICsgaiBdO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQrKyB3cml0ZUluZGV4O1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBmbHVzaCBsYXN0IGtleWZyYW1lIChjb21wYWN0aW9uIGxvb2tzIGFoZWFkKVxuXG5cdFx0aWYgKCBsYXN0SW5kZXggPiAwICkge1xuXG5cdFx0XHR0aW1lc1sgd3JpdGVJbmRleCBdID0gdGltZXNbIGxhc3RJbmRleCBdO1xuXG5cdFx0XHRmb3IgKCBsZXQgcmVhZE9mZnNldCA9IGxhc3RJbmRleCAqIHN0cmlkZSwgd3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlLCBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkge1xuXG5cdFx0XHRcdHZhbHVlc1sgd3JpdGVPZmZzZXQgKyBqIF0gPSB2YWx1ZXNbIHJlYWRPZmZzZXQgKyBqIF07XG5cblx0XHRcdH1cblxuXHRcdFx0Kysgd3JpdGVJbmRleDtcblxuXHRcdH1cblxuXHRcdGlmICggd3JpdGVJbmRleCAhPT0gdGltZXMubGVuZ3RoICkge1xuXG5cdFx0XHR0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGltZXMsIDAsIHdyaXRlSW5kZXggKTtcblx0XHRcdHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdmFsdWVzLCAwLCB3cml0ZUluZGV4ICogc3RyaWRlICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLnRpbWVzID0gdGltZXM7XG5cdFx0XHR0aGlzLnZhbHVlcyA9IHZhbHVlcztcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdGNvbnN0IHRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy50aW1lcywgMCApO1xuXHRcdGNvbnN0IHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRoaXMudmFsdWVzLCAwICk7XG5cblx0XHRjb25zdCBUeXBlZEtleWZyYW1lVHJhY2sgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXHRcdGNvbnN0IHRyYWNrID0gbmV3IFR5cGVkS2V5ZnJhbWVUcmFjayggdGhpcy5uYW1lLCB0aW1lcywgdmFsdWVzICk7XG5cblx0XHQvLyBJbnRlcnBvbGFudCBhcmd1bWVudCB0byBjb25zdHJ1Y3RvciBpcyBub3Qgc2F2ZWQsIHNvIGNvcHkgdGhlIGZhY3RvcnkgbWV0aG9kIGRpcmVjdGx5LlxuXHRcdHRyYWNrLmNyZWF0ZUludGVycG9sYW50ID0gdGhpcy5jcmVhdGVJbnRlcnBvbGFudDtcblxuXHRcdHJldHVybiB0cmFjaztcblxuXHR9XG5cbn1cblxuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGUgPSBGbG9hdDMyQXJyYXk7XG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGUgPSBGbG9hdDMyQXJyYXk7XG5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlTGluZWFyO1xuXG4vKipcbiAqIEEgVHJhY2sgb2YgQm9vbGVhbiBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cbmNsYXNzIEJvb2xlYW5LZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdib29sJztcbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGUgPSBBcnJheTtcbkJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlRGlzY3JldGU7XG5Cb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyID0gdW5kZWZpbmVkO1xuQm9vbGVhbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIFRyYWNrIG9mIGtleWZyYW1lIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBjb2xvci5cbiAqL1xuY2xhc3MgQ29sb3JLZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7fVxuXG5Db2xvcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnY29sb3InO1xuXG4vKipcbiAqIEEgVHJhY2sgb2YgbnVtZXJpYyBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cbmNsYXNzIE51bWJlcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cbk51bWJlcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAnbnVtYmVyJztcblxuLyoqXG4gKiBTcGhlcmljYWwgbGluZWFyIHVuaXQgcXVhdGVybmlvbiBpbnRlcnBvbGFudC5cbiAqL1xuXG5jbGFzcyBRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQgZXh0ZW5kcyBJbnRlcnBvbGFudCB7XG5cblx0Y29uc3RydWN0b3IoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7XG5cblx0XHRzdXBlciggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApO1xuXG5cdH1cblxuXHRpbnRlcnBvbGF0ZV8oIGkxLCB0MCwgdCwgdDEgKSB7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlcixcblx0XHRcdHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cblx0XHRcdGFscGhhID0gKCB0IC0gdDAgKSAvICggdDEgLSB0MCApO1xuXG5cdFx0bGV0IG9mZnNldCA9IGkxICogc3RyaWRlO1xuXG5cdFx0Zm9yICggbGV0IGVuZCA9IG9mZnNldCArIHN0cmlkZTsgb2Zmc2V0ICE9PSBlbmQ7IG9mZnNldCArPSA0ICkge1xuXG5cdFx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdCggcmVzdWx0LCAwLCB2YWx1ZXMsIG9mZnNldCAtIHN0cmlkZSwgdmFsdWVzLCBvZmZzZXQsIGFscGhhICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdH1cblxufVxuXG4vKipcbiAqIEEgVHJhY2sgb2YgcXVhdGVybmlvbiBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cbmNsYXNzIFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrIGV4dGVuZHMgS2V5ZnJhbWVUcmFjayB7XG5cblx0SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKCByZXN1bHQgKSB7XG5cblx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCggdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApO1xuXG5cdH1cblxufVxuXG5RdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdxdWF0ZXJuaW9uJztcbi8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWRcblF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlTGluZWFyO1xuUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIFRyYWNrIHRoYXQgaW50ZXJwb2xhdGVzIFN0cmluZ3NcbiAqL1xuY2xhc3MgU3RyaW5nS2V5ZnJhbWVUcmFjayBleHRlbmRzIEtleWZyYW1lVHJhY2sge31cblxuU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZSA9ICdzdHJpbmcnO1xuU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlID0gQXJyYXk7XG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRlRGlzY3JldGU7XG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIgPSB1bmRlZmluZWQ7XG5TdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGggPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBUcmFjayBvZiB2ZWN0b3JlZCBrZXlmcmFtZSB2YWx1ZXMuXG4gKi9cbmNsYXNzIFZlY3RvcktleWZyYW1lVHJhY2sgZXh0ZW5kcyBLZXlmcmFtZVRyYWNrIHt9XG5cblZlY3RvcktleWZyYW1lVHJhY2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWUgPSAndmVjdG9yJztcblxuY2xhc3MgQW5pbWF0aW9uQ2xpcCB7XG5cblx0Y29uc3RydWN0b3IoIG5hbWUsIGR1cmF0aW9uID0gLSAxLCB0cmFja3MsIGJsZW5kTW9kZSA9IE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSApIHtcblxuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy50cmFja3MgPSB0cmFja3M7XG5cdFx0dGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHRcdHRoaXMuYmxlbmRNb2RlID0gYmxlbmRNb2RlO1xuXG5cdFx0dGhpcy51dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG5cblx0XHQvLyB0aGlzIG1lYW5zIGl0IHNob3VsZCBmaWd1cmUgb3V0IGl0cyBkdXJhdGlvbiBieSBzY2FubmluZyB0aGUgdHJhY2tzXG5cdFx0aWYgKCB0aGlzLmR1cmF0aW9uIDwgMCApIHtcblxuXHRcdFx0dGhpcy5yZXNldER1cmF0aW9uKCk7XG5cblx0XHR9XG5cblx0fVxuXG5cblx0c3RhdGljIHBhcnNlKCBqc29uICkge1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gW10sXG5cdFx0XHRqc29uVHJhY2tzID0ganNvbi50cmFja3MsXG5cdFx0XHRmcmFtZVRpbWUgPSAxLjAgLyAoIGpzb24uZnBzIHx8IDEuMCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0ganNvblRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdHRyYWNrcy5wdXNoKCBwYXJzZUtleWZyYW1lVHJhY2soIGpzb25UcmFja3NbIGkgXSApLnNjYWxlKCBmcmFtZVRpbWUgKSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xpcCA9IG5ldyB0aGlzKCBqc29uLm5hbWUsIGpzb24uZHVyYXRpb24sIHRyYWNrcywganNvbi5ibGVuZE1vZGUgKTtcblx0XHRjbGlwLnV1aWQgPSBqc29uLnV1aWQ7XG5cblx0XHRyZXR1cm4gY2xpcDtcblxuXHR9XG5cblx0c3RhdGljIHRvSlNPTiggY2xpcCApIHtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IFtdLFxuXHRcdFx0Y2xpcFRyYWNrcyA9IGNsaXAudHJhY2tzO1xuXG5cdFx0Y29uc3QganNvbiA9IHtcblxuXHRcdFx0J25hbWUnOiBjbGlwLm5hbWUsXG5cdFx0XHQnZHVyYXRpb24nOiBjbGlwLmR1cmF0aW9uLFxuXHRcdFx0J3RyYWNrcyc6IHRyYWNrcyxcblx0XHRcdCd1dWlkJzogY2xpcC51dWlkLFxuXHRcdFx0J2JsZW5kTW9kZSc6IGNsaXAuYmxlbmRNb2RlXG5cblx0XHR9O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gY2xpcFRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdHRyYWNrcy5wdXNoKCBLZXlmcmFtZVRyYWNrLnRvSlNPTiggY2xpcFRyYWNrc1sgaSBdICkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBqc29uO1xuXG5cdH1cblxuXHRzdGF0aWMgQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoIG5hbWUsIG1vcnBoVGFyZ2V0U2VxdWVuY2UsIGZwcywgbm9Mb29wICkge1xuXG5cdFx0Y29uc3QgbnVtTW9ycGhUYXJnZXRzID0gbW9ycGhUYXJnZXRTZXF1ZW5jZS5sZW5ndGg7XG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBudW1Nb3JwaFRhcmdldHM7IGkgKysgKSB7XG5cblx0XHRcdGxldCB0aW1lcyA9IFtdO1xuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xuXG5cdFx0XHR0aW1lcy5wdXNoKFxuXHRcdFx0XHQoIGkgKyBudW1Nb3JwaFRhcmdldHMgLSAxICkgJSBudW1Nb3JwaFRhcmdldHMsXG5cdFx0XHRcdGksXG5cdFx0XHRcdCggaSArIDEgKSAlIG51bU1vcnBoVGFyZ2V0cyApO1xuXG5cdFx0XHR2YWx1ZXMucHVzaCggMCwgMSwgMCApO1xuXG5cdFx0XHRjb25zdCBvcmRlciA9IEFuaW1hdGlvblV0aWxzLmdldEtleWZyYW1lT3JkZXIoIHRpbWVzICk7XG5cdFx0XHR0aW1lcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB0aW1lcywgMSwgb3JkZXIgKTtcblx0XHRcdHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB2YWx1ZXMsIDEsIG9yZGVyICk7XG5cblx0XHRcdC8vIGlmIHRoZXJlIGlzIGEga2V5IGF0IHRoZSBmaXJzdCBmcmFtZSwgZHVwbGljYXRlIGl0IGFzIHRoZVxuXHRcdFx0Ly8gbGFzdCBmcmFtZSBhcyB3ZWxsIGZvciBwZXJmZWN0IGxvb3AuXG5cdFx0XHRpZiAoICEgbm9Mb29wICYmIHRpbWVzWyAwIF0gPT09IDAgKSB7XG5cblx0XHRcdFx0dGltZXMucHVzaCggbnVtTW9ycGhUYXJnZXRzICk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZXNbIDAgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRyYWNrcy5wdXNoKFxuXHRcdFx0XHRuZXcgTnVtYmVyS2V5ZnJhbWVUcmFjayhcblx0XHRcdFx0XHQnLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1snICsgbW9ycGhUYXJnZXRTZXF1ZW5jZVsgaSBdLm5hbWUgKyAnXScsXG5cdFx0XHRcdFx0dGltZXMsIHZhbHVlc1xuXHRcdFx0XHQpLnNjYWxlKCAxLjAgLyBmcHMgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyB0aGlzKCBuYW1lLCAtIDEsIHRyYWNrcyApO1xuXG5cdH1cblxuXHRzdGF0aWMgZmluZEJ5TmFtZSggb2JqZWN0T3JDbGlwQXJyYXksIG5hbWUgKSB7XG5cblx0XHRsZXQgY2xpcEFycmF5ID0gb2JqZWN0T3JDbGlwQXJyYXk7XG5cblx0XHRpZiAoICEgQXJyYXkuaXNBcnJheSggb2JqZWN0T3JDbGlwQXJyYXkgKSApIHtcblxuXHRcdFx0Y29uc3QgbyA9IG9iamVjdE9yQ2xpcEFycmF5O1xuXHRcdFx0Y2xpcEFycmF5ID0gby5nZW9tZXRyeSAmJiBvLmdlb21ldHJ5LmFuaW1hdGlvbnMgfHwgby5hbmltYXRpb25zO1xuXG5cdFx0fVxuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY2xpcEFycmF5Lmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0aWYgKCBjbGlwQXJyYXlbIGkgXS5uYW1lID09PSBuYW1lICkge1xuXG5cdFx0XHRcdHJldHVybiBjbGlwQXJyYXlbIGkgXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdHN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyggbW9ycGhUYXJnZXRzLCBmcHMsIG5vTG9vcCApIHtcblxuXHRcdGNvbnN0IGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzID0ge307XG5cblx0XHQvLyB0ZXN0ZWQgd2l0aCBodHRwczovL3JlZ2V4MTAxLmNvbS8gb24gdHJpY2sgc2VxdWVuY2VzXG5cdFx0Ly8gc3VjaCBmbGFtaW5nb19mbHlBXzAwMywgZmxhbWluZ29fcnVuMV8wMDMsIGNyZGVhdGgwMDU5XG5cdFx0Y29uc3QgcGF0dGVybiA9IC9eKFtcXHctXSo/KShbXFxkXSspJC87XG5cblx0XHQvLyBzb3J0IG1vcnBoIHRhcmdldCBuYW1lcyBpbnRvIGFuaW1hdGlvbiBncm91cHMgYmFzZWRcblx0XHQvLyBwYXR0ZXJucyBsaWtlIFdhbGtfMDAxLCBXYWxrXzAwMiwgUnVuXzAwMSwgUnVuXzAwMlxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0ID0gbW9ycGhUYXJnZXRzWyBpIF07XG5cdFx0XHRjb25zdCBwYXJ0cyA9IG1vcnBoVGFyZ2V0Lm5hbWUubWF0Y2goIHBhdHRlcm4gKTtcblxuXHRcdFx0aWYgKCBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHRcdGNvbnN0IG5hbWUgPSBwYXJ0c1sgMSBdO1xuXG5cdFx0XHRcdGxldCBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1sgbmFtZSBdO1xuXG5cdFx0XHRcdGlmICggISBhbmltYXRpb25Nb3JwaFRhcmdldHMgKSB7XG5cblx0XHRcdFx0XHRhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1sgbmFtZSBdID0gYW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gW107XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFuaW1hdGlvbk1vcnBoVGFyZ2V0cy5wdXNoKCBtb3JwaFRhcmdldCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBjbGlwcyA9IFtdO1xuXG5cdFx0Zm9yICggY29uc3QgbmFtZSBpbiBhbmltYXRpb25Ub01vcnBoVGFyZ2V0cyApIHtcblxuXHRcdFx0Y2xpcHMucHVzaCggdGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSggbmFtZSwgYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHNbIG5hbWUgXSwgZnBzLCBub0xvb3AgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsaXBzO1xuXG5cdH1cblxuXHQvLyBwYXJzZSB0aGUgYW5pbWF0aW9uLmhpZXJhcmNoeSBmb3JtYXRcblx0c3RhdGljIHBhcnNlQW5pbWF0aW9uKCBhbmltYXRpb24sIGJvbmVzICkge1xuXG5cdFx0aWYgKCAhIGFuaW1hdGlvbiApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuJyApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHR9XG5cblx0XHRjb25zdCBhZGROb25lbXB0eVRyYWNrID0gZnVuY3Rpb24gKCB0cmFja1R5cGUsIHRyYWNrTmFtZSwgYW5pbWF0aW9uS2V5cywgcHJvcGVydHlOYW1lLCBkZXN0VHJhY2tzICkge1xuXG5cdFx0XHQvLyBvbmx5IHJldHVybiB0cmFjayBpZiB0aGVyZSBhcmUgYWN0dWFsbHkga2V5cy5cblx0XHRcdGlmICggYW5pbWF0aW9uS2V5cy5sZW5ndGggIT09IDAgKSB7XG5cblx0XHRcdFx0Y29uc3QgdGltZXMgPSBbXTtcblx0XHRcdFx0Y29uc3QgdmFsdWVzID0gW107XG5cblx0XHRcdFx0QW5pbWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oIGFuaW1hdGlvbktleXMsIHRpbWVzLCB2YWx1ZXMsIHByb3BlcnR5TmFtZSApO1xuXG5cdFx0XHRcdC8vIGVtcHR5IGtleXMgYXJlIGZpbHRlcmVkIG91dCwgc28gY2hlY2sgYWdhaW5cblx0XHRcdFx0aWYgKCB0aW1lcy5sZW5ndGggIT09IDAgKSB7XG5cblx0XHRcdFx0XHRkZXN0VHJhY2tzLnB1c2goIG5ldyB0cmFja1R5cGUoIHRyYWNrTmFtZSwgdGltZXMsIHZhbHVlcyApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0Y29uc3QgdHJhY2tzID0gW107XG5cblx0XHRjb25zdCBjbGlwTmFtZSA9IGFuaW1hdGlvbi5uYW1lIHx8ICdkZWZhdWx0Jztcblx0XHRjb25zdCBmcHMgPSBhbmltYXRpb24uZnBzIHx8IDMwO1xuXHRcdGNvbnN0IGJsZW5kTW9kZSA9IGFuaW1hdGlvbi5ibGVuZE1vZGU7XG5cblx0XHQvLyBhdXRvbWF0aWMgbGVuZ3RoIGRldGVybWluYXRpb24gaW4gQW5pbWF0aW9uQ2xpcC5cblx0XHRsZXQgZHVyYXRpb24gPSBhbmltYXRpb24ubGVuZ3RoIHx8IC0gMTtcblxuXHRcdGNvbnN0IGhpZXJhcmNoeVRyYWNrcyA9IGFuaW1hdGlvbi5oaWVyYXJjaHkgfHwgW107XG5cblx0XHRmb3IgKCBsZXQgaCA9IDA7IGggPCBoaWVyYXJjaHlUcmFja3MubGVuZ3RoOyBoICsrICkge1xuXG5cdFx0XHRjb25zdCBhbmltYXRpb25LZXlzID0gaGllcmFyY2h5VHJhY2tzWyBoIF0ua2V5cztcblxuXHRcdFx0Ly8gc2tpcCBlbXB0eSB0cmFja3Ncblx0XHRcdGlmICggISBhbmltYXRpb25LZXlzIHx8IGFuaW1hdGlvbktleXMubGVuZ3RoID09PSAwICkgY29udGludWU7XG5cblx0XHRcdC8vIHByb2Nlc3MgbW9ycGggdGFyZ2V0c1xuXHRcdFx0aWYgKCBhbmltYXRpb25LZXlzWyAwIF0ubW9ycGhUYXJnZXRzICkge1xuXG5cdFx0XHRcdC8vIGZpZ3VyZSBvdXQgYWxsIG1vcnBoIHRhcmdldHMgdXNlZCBpbiB0aGlzIHRyYWNrXG5cdFx0XHRcdGNvbnN0IG1vcnBoVGFyZ2V0TmFtZXMgPSB7fTtcblxuXHRcdFx0XHRsZXQgaztcblxuXHRcdFx0XHRmb3IgKCBrID0gMDsgayA8IGFuaW1hdGlvbktleXMubGVuZ3RoOyBrICsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBhbmltYXRpb25LZXlzWyBrIF0ubW9ycGhUYXJnZXRzICkge1xuXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgbSA9IDA7IG0gPCBhbmltYXRpb25LZXlzWyBrIF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsgbSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRtb3JwaFRhcmdldE5hbWVzWyBhbmltYXRpb25LZXlzWyBrIF0ubW9ycGhUYXJnZXRzWyBtIF0gXSA9IC0gMTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBjcmVhdGUgYSB0cmFjayBmb3IgZWFjaCBtb3JwaCB0YXJnZXQgd2l0aCBhbGwgemVyb1xuXHRcdFx0XHQvLyBtb3JwaFRhcmdldEluZmx1ZW5jZXMgZXhjZXB0IGZvciB0aGUga2V5cyBpbiB3aGljaFxuXHRcdFx0XHQvLyB0aGUgbW9ycGhUYXJnZXQgaXMgbmFtZWQuXG5cdFx0XHRcdGZvciAoIGNvbnN0IG1vcnBoVGFyZ2V0TmFtZSBpbiBtb3JwaFRhcmdldE5hbWVzICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdGltZXMgPSBbXTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBtID0gMDsgbSAhPT0gYW5pbWF0aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ICsrIG0gKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbktleSA9IGFuaW1hdGlvbktleXNbIGsgXTtcblxuXHRcdFx0XHRcdFx0dGltZXMucHVzaCggYW5pbWF0aW9uS2V5LnRpbWUgKTtcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCAoIGFuaW1hdGlvbktleS5tb3JwaFRhcmdldCA9PT0gbW9ycGhUYXJnZXROYW1lICkgPyAxIDogMCApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dHJhY2tzLnB1c2goIG5ldyBOdW1iZXJLZXlmcmFtZVRyYWNrKCAnLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWycgKyBtb3JwaFRhcmdldE5hbWUgKyAnXScsIHRpbWVzLCB2YWx1ZXMgKSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkdXJhdGlvbiA9IG1vcnBoVGFyZ2V0TmFtZXMubGVuZ3RoICogKCBmcHMgfHwgMS4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gLi4uYXNzdW1lIHNrZWxldGFsIGFuaW1hdGlvblxuXG5cdFx0XHRcdGNvbnN0IGJvbmVOYW1lID0gJy5ib25lc1snICsgYm9uZXNbIGggXS5uYW1lICsgJ10nO1xuXG5cdFx0XHRcdGFkZE5vbmVtcHR5VHJhY2soXG5cdFx0XHRcdFx0VmVjdG9yS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnBvc2l0aW9uJyxcblx0XHRcdFx0XHRhbmltYXRpb25LZXlzLCAncG9zJywgdHJhY2tzICk7XG5cblx0XHRcdFx0YWRkTm9uZW1wdHlUcmFjayhcblx0XHRcdFx0XHRRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnF1YXRlcm5pb24nLFxuXHRcdFx0XHRcdGFuaW1hdGlvbktleXMsICdyb3QnLCB0cmFja3MgKTtcblxuXHRcdFx0XHRhZGROb25lbXB0eVRyYWNrKFxuXHRcdFx0XHRcdFZlY3RvcktleWZyYW1lVHJhY2ssIGJvbmVOYW1lICsgJy5zY2FsZScsXG5cdFx0XHRcdFx0YW5pbWF0aW9uS2V5cywgJ3NjbCcsIHRyYWNrcyApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRyYWNrcy5sZW5ndGggPT09IDAgKSB7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xpcCA9IG5ldyB0aGlzKCBjbGlwTmFtZSwgZHVyYXRpb24sIHRyYWNrcywgYmxlbmRNb2RlICk7XG5cblx0XHRyZXR1cm4gY2xpcDtcblxuXHR9XG5cblx0cmVzZXREdXJhdGlvbigpIHtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IHRoaXMudHJhY2tzO1xuXHRcdGxldCBkdXJhdGlvbiA9IDA7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSB0cmFja3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCB0cmFjayA9IHRoaXMudHJhY2tzWyBpIF07XG5cblx0XHRcdGR1cmF0aW9uID0gTWF0aC5tYXgoIGR1cmF0aW9uLCB0cmFjay50aW1lc1sgdHJhY2sudGltZXMubGVuZ3RoIC0gMSBdICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dHJpbSgpIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0dGhpcy50cmFja3NbIGkgXS50cmltKCAwLCB0aGlzLmR1cmF0aW9uICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dmFsaWRhdGUoKSB7XG5cblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHR2YWxpZCA9IHZhbGlkICYmIHRoaXMudHJhY2tzWyBpIF0udmFsaWRhdGUoKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZDtcblxuXHR9XG5cblx0b3B0aW1pemUoKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMudHJhY2tzWyBpIF0ub3B0aW1pemUoKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHR0cmFja3MucHVzaCggdGhpcy50cmFja3NbIGkgXS5jbG9uZSgpICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMubmFtZSwgdGhpcy5kdXJhdGlvbiwgdHJhY2tzLCB0aGlzLmJsZW5kTW9kZSApO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04oIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tUeXBlRm9yVmFsdWVUeXBlTmFtZSggdHlwZU5hbWUgKSB7XG5cblx0c3dpdGNoICggdHlwZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblxuXHRcdGNhc2UgJ3NjYWxhcic6XG5cdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRjYXNlICdmbG9hdCc6XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRjYXNlICdpbnRlZ2VyJzpcblxuXHRcdFx0cmV0dXJuIE51bWJlcktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICd2ZWN0b3InOlxuXHRcdGNhc2UgJ3ZlY3RvcjInOlxuXHRcdGNhc2UgJ3ZlY3RvcjMnOlxuXHRcdGNhc2UgJ3ZlY3RvcjQnOlxuXG5cdFx0XHRyZXR1cm4gVmVjdG9yS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ2NvbG9yJzpcblxuXHRcdFx0cmV0dXJuIENvbG9yS2V5ZnJhbWVUcmFjaztcblxuXHRcdGNhc2UgJ3F1YXRlcm5pb24nOlxuXG5cdFx0XHRyZXR1cm4gUXVhdGVybmlvbktleWZyYW1lVHJhY2s7XG5cblx0XHRjYXNlICdib29sJzpcblx0XHRjYXNlICdib29sZWFuJzpcblxuXHRcdFx0cmV0dXJuIEJvb2xlYW5LZXlmcmFtZVRyYWNrO1xuXG5cdFx0Y2FzZSAnc3RyaW5nJzpcblxuXHRcdFx0cmV0dXJuIFN0cmluZ0tleWZyYW1lVHJhY2s7XG5cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAnICsgdHlwZU5hbWUgKTtcblxufVxuXG5mdW5jdGlvbiBwYXJzZUtleWZyYW1lVHJhY2soIGpzb24gKSB7XG5cblx0aWYgKCBqc29uLnR5cGUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdHRocm93IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlJyApO1xuXG5cdH1cblxuXHRjb25zdCB0cmFja1R5cGUgPSBnZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKCBqc29uLnR5cGUgKTtcblxuXHRpZiAoIGpzb24udGltZXMgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGNvbnN0IHRpbWVzID0gW10sIHZhbHVlcyA9IFtdO1xuXG5cdFx0QW5pbWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oIGpzb24ua2V5cywgdGltZXMsIHZhbHVlcywgJ3ZhbHVlJyApO1xuXG5cdFx0anNvbi50aW1lcyA9IHRpbWVzO1xuXHRcdGpzb24udmFsdWVzID0gdmFsdWVzO1xuXG5cdH1cblxuXHQvLyBkZXJpdmVkIGNsYXNzZXMgY2FuIGRlZmluZSBhIHN0YXRpYyBwYXJzZSBtZXRob2Rcblx0aWYgKCB0cmFja1R5cGUucGFyc2UgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdHJldHVybiB0cmFja1R5cGUucGFyc2UoIGpzb24gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gYnkgZGVmYXVsdCwgd2UgYXNzdW1lIGEgY29uc3RydWN0b3IgY29tcGF0aWJsZSB3aXRoIHRoZSBiYXNlXG5cdFx0cmV0dXJuIG5ldyB0cmFja1R5cGUoIGpzb24ubmFtZSwganNvbi50aW1lcywganNvbi52YWx1ZXMsIGpzb24uaW50ZXJwb2xhdGlvbiApO1xuXG5cdH1cblxufVxuXG5jb25zdCBDYWNoZSA9IHtcblxuXHRlbmFibGVkOiBmYWxzZSxcblxuXHRmaWxlczoge30sXG5cblx0YWRkOiBmdW5jdGlvbiAoIGtleSwgZmlsZSApIHtcblxuXHRcdGlmICggdGhpcy5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQ2FjaGUnLCAnQWRkaW5nIGtleTonLCBrZXkgKTtcblxuXHRcdHRoaXMuZmlsZXNbIGtleSBdID0gZmlsZTtcblxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24gKCBrZXkgKSB7XG5cblx0XHRpZiAoIHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHQvLyBjb25zb2xlLmxvZyggJ1RIUkVFLkNhY2hlJywgJ0NoZWNraW5nIGtleTonLCBrZXkgKTtcblxuXHRcdHJldHVybiB0aGlzLmZpbGVzWyBrZXkgXTtcblxuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24gKCBrZXkgKSB7XG5cblx0XHRkZWxldGUgdGhpcy5maWxlc1sga2V5IF07XG5cblx0fSxcblxuXHRjbGVhcjogZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy5maWxlcyA9IHt9O1xuXG5cdH1cblxufTtcblxuY2xhc3MgTG9hZGluZ01hbmFnZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRsZXQgaXNMb2FkaW5nID0gZmFsc2U7XG5cdFx0bGV0IGl0ZW1zTG9hZGVkID0gMDtcblx0XHRsZXQgaXRlbXNUb3RhbCA9IDA7XG5cdFx0bGV0IHVybE1vZGlmaWVyID0gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gW107XG5cblx0XHQvLyBSZWZlciB0byAjNTY4OSBmb3IgdGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3Qgc2V0IC5vblN0YXJ0XG5cdFx0Ly8gaW4gdGhlIGNvbnN0cnVjdG9yXG5cblx0XHR0aGlzLm9uU3RhcnQgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5vbkxvYWQgPSBvbkxvYWQ7XG5cdFx0dGhpcy5vblByb2dyZXNzID0gb25Qcm9ncmVzcztcblx0XHR0aGlzLm9uRXJyb3IgPSBvbkVycm9yO1xuXG5cdFx0dGhpcy5pdGVtU3RhcnQgPSBmdW5jdGlvbiAoIHVybCApIHtcblxuXHRcdFx0aXRlbXNUb3RhbCArKztcblxuXHRcdFx0aWYgKCBpc0xvYWRpbmcgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdGlmICggc2NvcGUub25TdGFydCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0c2NvcGUub25TdGFydCggdXJsLCBpdGVtc0xvYWRlZCwgaXRlbXNUb3RhbCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpc0xvYWRpbmcgPSB0cnVlO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuaXRlbUVuZCA9IGZ1bmN0aW9uICggdXJsICkge1xuXG5cdFx0XHRpdGVtc0xvYWRlZCArKztcblxuXHRcdFx0aWYgKCBzY29wZS5vblByb2dyZXNzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0c2NvcGUub25Qcm9ncmVzcyggdXJsLCBpdGVtc0xvYWRlZCwgaXRlbXNUb3RhbCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggaXRlbXNMb2FkZWQgPT09IGl0ZW1zVG90YWwgKSB7XG5cblx0XHRcdFx0aXNMb2FkaW5nID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5vbkxvYWQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdHNjb3BlLm9uTG9hZCgpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMuaXRlbUVycm9yID0gZnVuY3Rpb24gKCB1cmwgKSB7XG5cblx0XHRcdGlmICggc2NvcGUub25FcnJvciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHNjb3BlLm9uRXJyb3IoIHVybCApO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5yZXNvbHZlVVJMID0gZnVuY3Rpb24gKCB1cmwgKSB7XG5cblx0XHRcdGlmICggdXJsTW9kaWZpZXIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHVybE1vZGlmaWVyKCB1cmwgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdXJsO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0VVJMTW9kaWZpZXIgPSBmdW5jdGlvbiAoIHRyYW5zZm9ybSApIHtcblxuXHRcdFx0dXJsTW9kaWZpZXIgPSB0cmFuc2Zvcm07XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fTtcblxuXHRcdHRoaXMuYWRkSGFuZGxlciA9IGZ1bmN0aW9uICggcmVnZXgsIGxvYWRlciApIHtcblxuXHRcdFx0aGFuZGxlcnMucHVzaCggcmVnZXgsIGxvYWRlciApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH07XG5cblx0XHR0aGlzLnJlbW92ZUhhbmRsZXIgPSBmdW5jdGlvbiAoIHJlZ2V4ICkge1xuXG5cdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoIHJlZ2V4ICk7XG5cblx0XHRcdGlmICggaW5kZXggIT09IC0gMSApIHtcblxuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGluZGV4LCAyICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRIYW5kbGVyID0gZnVuY3Rpb24gKCBmaWxlICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpICs9IDIgKSB7XG5cblx0XHRcdFx0Y29uc3QgcmVnZXggPSBoYW5kbGVyc1sgaSBdO1xuXHRcdFx0XHRjb25zdCBsb2FkZXIgPSBoYW5kbGVyc1sgaSArIDEgXTtcblxuXHRcdFx0XHRpZiAoIHJlZ2V4Lmdsb2JhbCApIHJlZ2V4Lmxhc3RJbmRleCA9IDA7IC8vIHNlZSAjMTc5MjBcblxuXHRcdFx0XHRpZiAoIHJlZ2V4LnRlc3QoIGZpbGUgKSApIHtcblxuXHRcdFx0XHRcdHJldHVybiBsb2FkZXI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0fTtcblxuXHR9XG5cbn1cblxuY29uc3QgRGVmYXVsdExvYWRpbmdNYW5hZ2VyID0gbmV3IExvYWRpbmdNYW5hZ2VyKCk7XG5cbmNsYXNzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHR0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjtcblxuXHRcdHRoaXMuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcblx0XHR0aGlzLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuXHRcdHRoaXMucGF0aCA9ICcnO1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gJyc7XG5cdFx0dGhpcy5yZXF1ZXN0SGVhZGVyID0ge307XG5cblx0fVxuXG5cdGxvYWQoIC8qIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICovICkge31cblxuXHRsb2FkQXN5bmMoIHVybCwgb25Qcm9ncmVzcyApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSggZnVuY3Rpb24gKCByZXNvbHZlLCByZWplY3QgKSB7XG5cblx0XHRcdHNjb3BlLmxvYWQoIHVybCwgcmVzb2x2ZSwgb25Qcm9ncmVzcywgcmVqZWN0ICk7XG5cblx0XHR9ICk7XG5cblx0fVxuXG5cdHBhcnNlKCAvKiBkYXRhICovICkge31cblxuXHRzZXRDcm9zc09yaWdpbiggY3Jvc3NPcmlnaW4gKSB7XG5cblx0XHR0aGlzLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFdpdGhDcmVkZW50aWFscyggdmFsdWUgKSB7XG5cblx0XHR0aGlzLndpdGhDcmVkZW50aWFscyA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRQYXRoKCBwYXRoICkge1xuXG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0UmVzb3VyY2VQYXRoKCByZXNvdXJjZVBhdGggKSB7XG5cblx0XHR0aGlzLnJlc291cmNlUGF0aCA9IHJlc291cmNlUGF0aDtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0UmVxdWVzdEhlYWRlciggcmVxdWVzdEhlYWRlciApIHtcblxuXHRcdHRoaXMucmVxdWVzdEhlYWRlciA9IHJlcXVlc3RIZWFkZXI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNvbnN0IGxvYWRpbmcgPSB7fTtcblxuY2xhc3MgRmlsZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGlmICggdXJsID09PSB1bmRlZmluZWQgKSB1cmwgPSAnJztcblxuXHRcdGlmICggdGhpcy5wYXRoICE9PSB1bmRlZmluZWQgKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7XG5cblx0XHR1cmwgPSB0aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCggdXJsICk7XG5cblx0XHRjb25zdCBjYWNoZWQgPSBDYWNoZS5nZXQoIHVybCApO1xuXG5cdFx0aWYgKCBjYWNoZWQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcblxuXHRcdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggY2FjaGVkICk7XG5cblx0XHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0XHR9LCAwICk7XG5cblx0XHRcdHJldHVybiBjYWNoZWQ7XG5cblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiByZXF1ZXN0IGlzIGR1cGxpY2F0ZVxuXG5cdFx0aWYgKCBsb2FkaW5nWyB1cmwgXSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRsb2FkaW5nWyB1cmwgXS5wdXNoKCB7XG5cblx0XHRcdFx0b25Mb2FkOiBvbkxvYWQsXG5cdFx0XHRcdG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdG9uRXJyb3I6IG9uRXJyb3JcblxuXHRcdFx0fSApO1xuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXNlIGFycmF5IGZvciBkdXBsaWNhdGUgcmVxdWVzdHNcblx0XHRsb2FkaW5nWyB1cmwgXSA9IFtdO1xuXG5cdFx0bG9hZGluZ1sgdXJsIF0ucHVzaCgge1xuXHRcdFx0b25Mb2FkOiBvbkxvYWQsXG5cdFx0XHRvblByb2dyZXNzOiBvblByb2dyZXNzLFxuXHRcdFx0b25FcnJvcjogb25FcnJvcixcblx0XHR9ICk7XG5cblx0XHQvLyBjcmVhdGUgcmVxdWVzdFxuXHRcdGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KCB1cmwsIHtcblx0XHRcdGhlYWRlcnM6IG5ldyBIZWFkZXJzKCB0aGlzLnJlcXVlc3RIZWFkZXIgKSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG5cdFx0XHQvLyBBbiBhYm9ydCBjb250cm9sbGVyIGNvdWxkIGJlIGFkZGVkIHdpdGhpbiBhIGZ1dHVyZSBQUlxuXHRcdH0gKTtcblxuXHRcdC8vIHJlY29yZCBzdGF0ZXMgKCBhdm9pZCBkYXRhIHJhY2UgKVxuXHRcdGNvbnN0IG1pbWVUeXBlID0gdGhpcy5taW1lVHlwZTtcblx0XHRjb25zdCByZXNwb25zZVR5cGUgPSB0aGlzLnJlc3BvbnNlVHlwZTtcblxuXHRcdC8vIHN0YXJ0IHRoZSBmZXRjaFxuXHRcdGZldGNoKCByZXEgKVxuXHRcdFx0LnRoZW4oIHJlc3BvbnNlID0+IHtcblxuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMCApIHtcblxuXHRcdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgcmV0dXJuIEhUVFAgU3RhdHVzIDAgd2hlbiB1c2luZyBub24taHR0cCBwcm90b2NvbFxuXHRcdFx0XHRcdC8vIGUuZy4gJ2ZpbGU6Ly8nIG9yICdkYXRhOi8vJy4gSGFuZGxlIGFzIHN1Y2Nlc3MuXG5cblx0XHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4nICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcgfHwgcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJsIF07XG5cdFx0XHRcdFx0Y29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblx0XHRcdFx0XHRjb25zdCBjb250ZW50TGVuZ3RoID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoICdDb250ZW50LUxlbmd0aCcgKTtcblx0XHRcdFx0XHRjb25zdCB0b3RhbCA9IGNvbnRlbnRMZW5ndGggPyBwYXJzZUludCggY29udGVudExlbmd0aCApIDogMDtcblx0XHRcdFx0XHRjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT09IDA7XG5cdFx0XHRcdFx0bGV0IGxvYWRlZCA9IDA7XG5cblx0XHRcdFx0XHQvLyBwZXJpb2RpY2FsbHkgcmVhZCBkYXRhIGludG8gdGhlIG5ldyBzdHJlYW0gdHJhY2tpbmcgd2hpbGUgZG93bmxvYWQgcHJvZ3Jlc3Ncblx0XHRcdFx0XHRjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oIHtcblx0XHRcdFx0XHRcdHN0YXJ0KCBjb250cm9sbGVyICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlYWREYXRhKCk7XG5cblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gcmVhZERhdGEoKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZCgpLnRoZW4oICggeyBkb25lLCB2YWx1ZSB9ICkgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRvbmUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoICdwcm9ncmVzcycsIHsgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCB9ICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IGNhbGxiYWNrc1sgaSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sub25Qcm9ncmVzcyApIGNhbGxiYWNrLm9uUHJvZ3Jlc3MoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZW5xdWV1ZSggdmFsdWUgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVhZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBSZXNwb25zZSggc3RyZWFtICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRocm93IEVycm9yKCBgZmV0Y2ggZm9yIFwiJHtyZXNwb25zZS51cmx9XCIgcmVzcG9uZGVkIHdpdGggJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSApXG5cdFx0XHQudGhlbiggcmVzcG9uc2UgPT4ge1xuXG5cdFx0XHRcdHN3aXRjaCAoIHJlc3BvbnNlVHlwZSApIHtcblxuXHRcdFx0XHRcdGNhc2UgJ2FycmF5YnVmZmVyJzpcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG5cblx0XHRcdFx0XHRjYXNlICdibG9iJzpcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcblxuXHRcdFx0XHRcdGNhc2UgJ2RvY3VtZW50JzpcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKVxuXHRcdFx0XHRcdFx0XHQudGhlbiggdGV4dCA9PiB7XG5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIHRleHQsIG1pbWVUeXBlICk7XG5cblx0XHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0Y2FzZSAnanNvbic6XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0XHRpZiAoIG1pbWVUeXBlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBzbmlmZiBlbmNvZGluZ1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZSA9IC9jaGFyc2V0PVwiPyhbXjtcIlxcc10qKVwiPy9pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBleGVjID0gcmUuZXhlYyggbWltZVR5cGUgKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBleGVjICYmIGV4ZWNbIDEgXSA/IGV4ZWNbIDEgXS50b0xvd2VyQ2FzZSgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCBsYWJlbCApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS50aGVuKCBhYiA9PiBkZWNvZGVyLmRlY29kZSggYWIgKSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IClcblx0XHRcdC50aGVuKCBkYXRhID0+IHtcblxuXHRcdFx0XHQvLyBBZGQgdG8gY2FjaGUgb25seSBvbiBIVFRQIHN1Y2Nlc3MsIHNvIHRoYXQgd2UgZG8gbm90IGNhY2hlXG5cdFx0XHRcdC8vIGVycm9yIHJlc3BvbnNlIGJvZGllcyBhcyBwcm9wZXIgcmVzcG9uc2VzIHRvIHJlcXVlc3RzLlxuXHRcdFx0XHRDYWNoZS5hZGQoIHVybCwgZGF0YSApO1xuXG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrcyA9IGxvYWRpbmdbIHVybCBdO1xuXHRcdFx0XHRkZWxldGUgbG9hZGluZ1sgdXJsIF07XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjay5vbkxvYWQgKSBjYWxsYmFjay5vbkxvYWQoIGRhdGEgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gKVxuXHRcdFx0LmNhdGNoKCBlcnIgPT4ge1xuXG5cdFx0XHRcdC8vIEFib3J0IGVycm9ycyBhbmQgb3RoZXIgZXJyb3JzIGFyZSBoYW5kbGVkIHRoZSBzYW1lXG5cblx0XHRcdFx0Y29uc3QgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJsIF07XG5cblx0XHRcdFx0aWYgKCBjYWxsYmFja3MgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdC8vIFdoZW4gb25Mb2FkIHdhcyBjYWxsZWQgYW5kIHVybCB3YXMgZGVsZXRlZCBpbiBgbG9hZGluZ2Bcblx0XHRcdFx0XHR0aGlzLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblx0XHRcdFx0XHR0aHJvdyBlcnI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBsb2FkaW5nWyB1cmwgXTtcblxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja3NbIGkgXTtcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrLm9uRXJyb3IgKSBjYWxsYmFjay5vbkVycm9yKCBlcnIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7XG5cblx0XHRcdH0gKVxuXHRcdFx0LmZpbmFsbHkoICgpID0+IHtcblxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHRcdH0gKTtcblxuXHRcdHRoaXMubWFuYWdlci5pdGVtU3RhcnQoIHVybCApO1xuXG5cdH1cblxuXHRzZXRSZXNwb25zZVR5cGUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5yZXNwb25zZVR5cGUgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0TWltZVR5cGUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5taW1lVHlwZSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBBbmltYXRpb25Mb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCB0aGlzLnJlcXVlc3RIZWFkZXIgKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCB0aGlzLndpdGhDcmVkZW50aWFscyApO1xuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggdGV4dCApIHtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBhcnNlKCB0ZXh0ICkgKSApO1xuXG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRpZiAoIG9uRXJyb3IgKSB7XG5cblx0XHRcdFx0XHRvbkVycm9yKCBlICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXG5cdFx0XHR9XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0fVxuXG5cdHBhcnNlKCBqc29uICkge1xuXG5cdFx0Y29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwganNvbi5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IGNsaXAgPSBBbmltYXRpb25DbGlwLnBhcnNlKCBqc29uWyBpIF0gKTtcblxuXHRcdFx0YW5pbWF0aW9ucy5wdXNoKCBjbGlwICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5pbWF0aW9ucztcblxuXHR9XG5cbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRvIGJsb2NrIGJhc2VkIHRleHR1cmVzIGxvYWRlciAoZGRzLCBwdnIsIC4uLilcbiAqXG4gKiBTdWIgY2xhc3NlcyBoYXZlIHRvIGltcGxlbWVudCB0aGUgcGFyc2UoKSBtZXRob2Qgd2hpY2ggd2lsbCBiZSB1c2VkIGluIGxvYWQoKS5cbiAqL1xuXG5jbGFzcyBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGltYWdlcyA9IFtdO1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBDb21wcmVzc2VkVGV4dHVyZSgpO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCAnYXJyYXlidWZmZXInICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHRoaXMucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHNjb3BlLndpdGhDcmVkZW50aWFscyApO1xuXG5cdFx0bGV0IGxvYWRlZCA9IDA7XG5cblx0XHRmdW5jdGlvbiBsb2FkVGV4dHVyZSggaSApIHtcblxuXHRcdFx0bG9hZGVyLmxvYWQoIHVybFsgaSBdLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHtcblxuXHRcdFx0XHRjb25zdCB0ZXhEYXRhcyA9IHNjb3BlLnBhcnNlKCBidWZmZXIsIHRydWUgKTtcblxuXHRcdFx0XHRpbWFnZXNbIGkgXSA9IHtcblx0XHRcdFx0XHR3aWR0aDogdGV4RGF0YXMud2lkdGgsXG5cdFx0XHRcdFx0aGVpZ2h0OiB0ZXhEYXRhcy5oZWlnaHQsXG5cdFx0XHRcdFx0Zm9ybWF0OiB0ZXhEYXRhcy5mb3JtYXQsXG5cdFx0XHRcdFx0bWlwbWFwczogdGV4RGF0YXMubWlwbWFwc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGxvYWRlZCArPSAxO1xuXG5cdFx0XHRcdGlmICggbG9hZGVkID09PSA2ICkge1xuXG5cdFx0XHRcdFx0aWYgKCB0ZXhEYXRhcy5taXBtYXBDb3VudCA9PT0gMSApIHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5pbWFnZSA9IGltYWdlcztcblx0XHRcdFx0XHR0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDtcblx0XHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHVybCApICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gdXJsLmxlbmd0aDsgaSA8IGlsOyArKyBpICkge1xuXG5cdFx0XHRcdGxvYWRUZXh0dXJlKCBpICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIGNvbXByZXNzZWQgY3ViZW1hcCB0ZXh0dXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBERFMgZmlsZVxuXG5cdFx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHtcblxuXHRcdFx0XHRjb25zdCB0ZXhEYXRhcyA9IHNjb3BlLnBhcnNlKCBidWZmZXIsIHRydWUgKTtcblxuXHRcdFx0XHRpZiAoIHRleERhdGFzLmlzQ3ViZW1hcCApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGZhY2VzID0gdGV4RGF0YXMubWlwbWFwcy5sZW5ndGggLyB0ZXhEYXRhcy5taXBtYXBDb3VudDtcblxuXHRcdFx0XHRcdGZvciAoIGxldCBmID0gMDsgZiA8IGZhY2VzOyBmICsrICkge1xuXG5cdFx0XHRcdFx0XHRpbWFnZXNbIGYgXSA9IHsgbWlwbWFwczogW10gfTtcblxuXHRcdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGV4RGF0YXMubWlwbWFwQ291bnQ7IGkgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBmIF0ubWlwbWFwcy5wdXNoKCB0ZXhEYXRhcy5taXBtYXBzWyBmICogdGV4RGF0YXMubWlwbWFwQ291bnQgKyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBmIF0uZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0O1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbIGYgXS53aWR0aCA9IHRleERhdGFzLndpZHRoO1xuXHRcdFx0XHRcdFx0XHRpbWFnZXNbIGYgXS5oZWlnaHQgPSB0ZXhEYXRhcy5oZWlnaHQ7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRleHR1cmUuaW1hZ2UgPSBpbWFnZXM7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRleHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhcy53aWR0aDtcblx0XHRcdFx0XHR0ZXh0dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDtcblx0XHRcdFx0XHR0ZXh0dXJlLm1pcG1hcHMgPSB0ZXhEYXRhcy5taXBtYXBzO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHRleERhdGFzLm1pcG1hcENvdW50ID09PSAxICkge1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0O1xuXHRcdFx0XHR0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSApO1xuXG5cdFx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSW1hZ2VMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRpZiAoIHRoaXMucGF0aCAhPT0gdW5kZWZpbmVkICkgdXJsID0gdGhpcy5wYXRoICsgdXJsO1xuXG5cdFx0dXJsID0gdGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwoIHVybCApO1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgY2FjaGVkID0gQ2FjaGUuZ2V0KCB1cmwgKTtcblxuXHRcdGlmICggY2FjaGVkICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTtcblxuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTtcblxuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0XHR9LCAwICk7XG5cblx0XHRcdHJldHVybiBjYWNoZWQ7XG5cblx0XHR9XG5cblx0XHRjb25zdCBpbWFnZSA9IGNyZWF0ZUVsZW1lbnROUyggJ2ltZycgKTtcblxuXHRcdGZ1bmN0aW9uIG9uSW1hZ2VMb2FkKCkge1xuXG5cdFx0XHRyZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG5cdFx0XHRDYWNoZS5hZGQoIHVybCwgdGhpcyApO1xuXG5cdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggdGhpcyApO1xuXG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25JbWFnZUVycm9yKCBldmVudCApIHtcblxuXHRcdFx0cmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuXHRcdFx0aWYgKCBvbkVycm9yICkgb25FcnJvciggZXZlbnQgKTtcblxuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApO1xuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuXG5cdFx0XHRpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2FkLCBmYWxzZSApO1xuXHRcdFx0aW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgb25JbWFnZUVycm9yLCBmYWxzZSApO1xuXG5cdFx0fVxuXG5cdFx0aW1hZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBvbkltYWdlTG9hZCwgZmFsc2UgKTtcblx0XHRpbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCBvbkltYWdlRXJyb3IsIGZhbHNlICk7XG5cblx0XHRpZiAoIHVybC5zdWJzdHIoIDAsIDUgKSAhPT0gJ2RhdGE6JyApIHtcblxuXHRcdFx0aWYgKCB0aGlzLmNyb3NzT3JpZ2luICE9PSB1bmRlZmluZWQgKSBpbWFnZS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG5cblx0XHR9XG5cblx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0XHRpbWFnZS5zcmMgPSB1cmw7XG5cblx0XHRyZXR1cm4gaW1hZ2U7XG5cblx0fVxuXG59XG5cbmNsYXNzIEN1YmVUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybHMsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoKTtcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0bG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7XG5cdFx0bG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApO1xuXG5cdFx0bGV0IGxvYWRlZCA9IDA7XG5cblx0XHRmdW5jdGlvbiBsb2FkVGV4dHVyZSggaSApIHtcblxuXHRcdFx0bG9hZGVyLmxvYWQoIHVybHNbIGkgXSwgZnVuY3Rpb24gKCBpbWFnZSApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLmltYWdlc1sgaSBdID0gaW1hZ2U7XG5cblx0XHRcdFx0bG9hZGVkICsrO1xuXG5cdFx0XHRcdGlmICggbG9hZGVkID09PSA2ICkge1xuXG5cdFx0XHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSwgdW5kZWZpbmVkLCBvbkVycm9yICk7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgKysgaSApIHtcblxuXHRcdFx0bG9hZFRleHR1cmUoIGkgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxufVxuXG4vKipcbiAqIEFic3RyYWN0IEJhc2UgY2xhc3MgdG8gbG9hZCBnZW5lcmljIGJpbmFyeSB0ZXh0dXJlcyBmb3JtYXRzIChyZ2JlLCBoZHIsIC4uLilcbiAqXG4gKiBTdWIgY2xhc3NlcyBoYXZlIHRvIGltcGxlbWVudCB0aGUgcGFyc2UoKSBtZXRob2Qgd2hpY2ggd2lsbCBiZSB1c2VkIGluIGxvYWQoKS5cbiAqL1xuXG5jbGFzcyBEYXRhVGV4dHVyZUxvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXG5cdH1cblxuXHRsb2FkKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUoKTtcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTtcblx0XHRsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCAnYXJyYXlidWZmZXInICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHRoaXMucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCBzY29wZS53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHtcblxuXHRcdFx0Y29uc3QgdGV4RGF0YSA9IHNjb3BlLnBhcnNlKCBidWZmZXIgKTtcblxuXHRcdFx0aWYgKCAhIHRleERhdGEgKSByZXR1cm47XG5cblx0XHRcdGlmICggdGV4RGF0YS5pbWFnZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUuaW1hZ2UgPSB0ZXhEYXRhLmltYWdlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0ZXhEYXRhLmRhdGEgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLmltYWdlLndpZHRoID0gdGV4RGF0YS53aWR0aDtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZS5oZWlnaHQgPSB0ZXhEYXRhLmhlaWdodDtcblx0XHRcdFx0dGV4dHVyZS5pbWFnZS5kYXRhID0gdGV4RGF0YS5kYXRhO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRleHR1cmUud3JhcFMgPSB0ZXhEYXRhLndyYXBTICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLndyYXBTIDogQ2xhbXBUb0VkZ2VXcmFwcGluZztcblx0XHRcdHRleHR1cmUud3JhcFQgPSB0ZXhEYXRhLndyYXBUICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLndyYXBUIDogQ2xhbXBUb0VkZ2VXcmFwcGluZztcblxuXHRcdFx0dGV4dHVyZS5tYWdGaWx0ZXIgPSB0ZXhEYXRhLm1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gdGV4RGF0YS5tYWdGaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7XG5cdFx0XHR0ZXh0dXJlLm1pbkZpbHRlciA9IHRleERhdGEubWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjtcblxuXHRcdFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gdGV4RGF0YS5hbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLmFuaXNvdHJvcHkgOiAxO1xuXG5cdFx0XHRpZiAoIHRleERhdGEuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLmVuY29kaW5nID0gdGV4RGF0YS5lbmNvZGluZztcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEuZmxpcFkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0ZXh0dXJlLmZsaXBZID0gdGV4RGF0YS5mbGlwWTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEuZm9ybWF0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhLmZvcm1hdDtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEudHlwZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUudHlwZSA9IHRleERhdGEudHlwZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEubWlwbWFwcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUubWlwbWFwcyA9IHRleERhdGEubWlwbWFwcztcblx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI7IC8vIHByZXN1bWFibHkuLi5cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRleERhdGEubWlwbWFwQ291bnQgPT09IDEgKSB7XG5cblx0XHRcdFx0dGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0ZXhEYXRhLmdlbmVyYXRlTWlwbWFwcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gdGV4RGF0YS5nZW5lcmF0ZU1pcG1hcHM7XG5cblx0XHRcdH1cblxuXHRcdFx0dGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlLCB0ZXhEYXRhICk7XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXG5cdH1cblxufVxuXG5jbGFzcyBUZXh0dXJlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgSW1hZ2VMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblxuXHRcdGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggaW1hZ2UgKSB7XG5cblx0XHRcdHRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcblx0XHRcdHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAoIG9uTG9hZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdG9uTG9hZCggdGV4dHVyZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0XHRyZXR1cm4gdGV4dHVyZTtcblxuXHR9XG5cbn1cblxuY2xhc3MgTGlnaHQgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHkgPSAxICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdMaWdodCc7XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKCBjb2xvciApO1xuXHRcdHRoaXMuaW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0Ly8gRW1wdHkgaGVyZSBpbiBiYXNlIGNsYXNzOyBzb21lIHN1YmNsYXNzZXMgb3ZlcnJpZGUuXG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTtcblx0XHR0aGlzLmludGVuc2l0eSA9IHNvdXJjZS5pbnRlbnNpdHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0ZGF0YS5vYmplY3QuY29sb3IgPSB0aGlzLmNvbG9yLmdldEhleCgpO1xuXHRcdGRhdGEub2JqZWN0LmludGVuc2l0eSA9IHRoaXMuaW50ZW5zaXR5O1xuXG5cdFx0aWYgKCB0aGlzLmdyb3VuZENvbG9yICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5ncm91bmRDb2xvciA9IHRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCk7XG5cblx0XHRpZiAoIHRoaXMuZGlzdGFuY2UgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmRpc3RhbmNlID0gdGhpcy5kaXN0YW5jZTtcblx0XHRpZiAoIHRoaXMuYW5nbGUgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmFuZ2xlID0gdGhpcy5hbmdsZTtcblx0XHRpZiAoIHRoaXMuZGVjYXkgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmRlY2F5ID0gdGhpcy5kZWNheTtcblx0XHRpZiAoIHRoaXMucGVudW1icmEgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LnBlbnVtYnJhID0gdGhpcy5wZW51bWJyYTtcblxuXHRcdGlmICggdGhpcy5zaGFkb3cgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LnNoYWRvdyA9IHRoaXMuc2hhZG93LnRvSlNPTigpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbkxpZ2h0LnByb3RvdHlwZS5pc0xpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgSGVtaXNwaGVyZUxpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBza3lDb2xvciwgZ3JvdW5kQ29sb3IsIGludGVuc2l0eSApIHtcblxuXHRcdHN1cGVyKCBza3lDb2xvciwgaW50ZW5zaXR5ICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnSGVtaXNwaGVyZUxpZ2h0JztcblxuXHRcdHRoaXMucG9zaXRpb24uY29weSggT2JqZWN0M0QuRGVmYXVsdFVwICk7XG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IoIGdyb3VuZENvbG9yICk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdExpZ2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5ncm91bmRDb2xvci5jb3B5KCBzb3VyY2UuZ3JvdW5kQ29sb3IgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5IZW1pc3BoZXJlTGlnaHQucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0ID0gdHJ1ZTtcblxuY29uc3QgX3Byb2pTY3JlZW5NYXRyaXgkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9saWdodFBvc2l0aW9uV29ybGQkMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9sb29rVGFyZ2V0JDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIExpZ2h0U2hhZG93IHtcblxuXHRjb25zdHJ1Y3RvciggY2FtZXJhICkge1xuXG5cdFx0dGhpcy5jYW1lcmEgPSBjYW1lcmE7XG5cblx0XHR0aGlzLmJpYXMgPSAwO1xuXHRcdHRoaXMubm9ybWFsQmlhcyA9IDA7XG5cdFx0dGhpcy5yYWRpdXMgPSAxO1xuXHRcdHRoaXMuYmx1clNhbXBsZXMgPSA4O1xuXG5cdFx0dGhpcy5tYXBTaXplID0gbmV3IFZlY3RvcjIoIDUxMiwgNTEyICk7XG5cblx0XHR0aGlzLm1hcCA9IG51bGw7XG5cdFx0dGhpcy5tYXBQYXNzID0gbnVsbDtcblx0XHR0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHR0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuXHRcdHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMuX2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xuXHRcdHRoaXMuX2ZyYW1lRXh0ZW50cyA9IG5ldyBWZWN0b3IyKCAxLCAxICk7XG5cblx0XHR0aGlzLl92aWV3cG9ydENvdW50ID0gMTtcblxuXHRcdHRoaXMuX3ZpZXdwb3J0cyA9IFtcblxuXHRcdFx0bmV3IFZlY3RvcjQoIDAsIDAsIDEsIDEgKVxuXG5cdFx0XTtcblxuXHR9XG5cblx0Z2V0Vmlld3BvcnRDb3VudCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl92aWV3cG9ydENvdW50O1xuXG5cdH1cblxuXHRnZXRGcnVzdHVtKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2ZydXN0dW07XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKCBsaWdodCApIHtcblxuXHRcdGNvbnN0IHNoYWRvd0NhbWVyYSA9IHRoaXMuY2FtZXJhO1xuXHRcdGNvbnN0IHNoYWRvd01hdHJpeCA9IHRoaXMubWF0cml4O1xuXG5cdFx0X2xpZ2h0UG9zaXRpb25Xb3JsZCQxLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRzaGFkb3dDYW1lcmEucG9zaXRpb24uY29weSggX2xpZ2h0UG9zaXRpb25Xb3JsZCQxICk7XG5cblx0XHRfbG9va1RhcmdldCQxLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkICk7XG5cdFx0c2hhZG93Q2FtZXJhLmxvb2tBdCggX2xvb2tUYXJnZXQkMSApO1xuXHRcdHNoYWRvd0NhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0X3Byb2pTY3JlZW5NYXRyaXgkMS5tdWx0aXBseU1hdHJpY2VzKCBzaGFkb3dDYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgc2hhZG93Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXHRcdHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoIF9wcm9qU2NyZWVuTWF0cml4JDEgKTtcblxuXHRcdHNoYWRvd01hdHJpeC5zZXQoXG5cdFx0XHQwLjUsIDAuMCwgMC4wLCAwLjUsXG5cdFx0XHQwLjAsIDAuNSwgMC4wLCAwLjUsXG5cdFx0XHQwLjAsIDAuMCwgMC41LCAwLjUsXG5cdFx0XHQwLjAsIDAuMCwgMC4wLCAxLjBcblx0XHQpO1xuXG5cdFx0c2hhZG93TWF0cml4Lm11bHRpcGx5KCBzaGFkb3dDYW1lcmEucHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdHNoYWRvd01hdHJpeC5tdWx0aXBseSggc2hhZG93Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXG5cdH1cblxuXHRnZXRWaWV3cG9ydCggdmlld3BvcnRJbmRleCApIHtcblxuXHRcdHJldHVybiB0aGlzLl92aWV3cG9ydHNbIHZpZXdwb3J0SW5kZXggXTtcblxuXHR9XG5cblx0Z2V0RnJhbWVFeHRlbnRzKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50cztcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdGlmICggdGhpcy5tYXAgKSB7XG5cblx0XHRcdHRoaXMubWFwLmRpc3Bvc2UoKTtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5tYXBQYXNzICkge1xuXG5cdFx0XHR0aGlzLm1hcFBhc3MuZGlzcG9zZSgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHR0aGlzLmNhbWVyYSA9IHNvdXJjZS5jYW1lcmEuY2xvbmUoKTtcblxuXHRcdHRoaXMuYmlhcyA9IHNvdXJjZS5iaWFzO1xuXHRcdHRoaXMucmFkaXVzID0gc291cmNlLnJhZGl1cztcblxuXHRcdHRoaXMubWFwU2l6ZS5jb3B5KCBzb3VyY2UubWFwU2l6ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBvYmplY3QgPSB7fTtcblxuXHRcdGlmICggdGhpcy5iaWFzICE9PSAwICkgb2JqZWN0LmJpYXMgPSB0aGlzLmJpYXM7XG5cdFx0aWYgKCB0aGlzLm5vcm1hbEJpYXMgIT09IDAgKSBvYmplY3Qubm9ybWFsQmlhcyA9IHRoaXMubm9ybWFsQmlhcztcblx0XHRpZiAoIHRoaXMucmFkaXVzICE9PSAxICkgb2JqZWN0LnJhZGl1cyA9IHRoaXMucmFkaXVzO1xuXHRcdGlmICggdGhpcy5tYXBTaXplLnggIT09IDUxMiB8fCB0aGlzLm1hcFNpemUueSAhPT0gNTEyICkgb2JqZWN0Lm1hcFNpemUgPSB0aGlzLm1hcFNpemUudG9BcnJheSgpO1xuXG5cdFx0b2JqZWN0LmNhbWVyYSA9IHRoaXMuY2FtZXJhLnRvSlNPTiggZmFsc2UgKS5vYmplY3Q7XG5cdFx0ZGVsZXRlIG9iamVjdC5jYW1lcmEubWF0cml4O1xuXG5cdFx0cmV0dXJuIG9iamVjdDtcblxuXHR9XG5cbn1cblxuY2xhc3MgU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgTGlnaHRTaGFkb3cge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0c3VwZXIoIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggNTAsIDEsIDAuNSwgNTAwICkgKTtcblxuXHRcdHRoaXMuZm9jdXMgPSAxO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyggbGlnaHQgKSB7XG5cblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcblxuXHRcdGNvbnN0IGZvdiA9IFJBRDJERUcgKiAyICogbGlnaHQuYW5nbGUgKiB0aGlzLmZvY3VzO1xuXHRcdGNvbnN0IGFzcGVjdCA9IHRoaXMubWFwU2l6ZS53aWR0aCAvIHRoaXMubWFwU2l6ZS5oZWlnaHQ7XG5cdFx0Y29uc3QgZmFyID0gbGlnaHQuZGlzdGFuY2UgfHwgY2FtZXJhLmZhcjtcblxuXHRcdGlmICggZm92ICE9PSBjYW1lcmEuZm92IHx8IGFzcGVjdCAhPT0gY2FtZXJhLmFzcGVjdCB8fCBmYXIgIT09IGNhbWVyYS5mYXIgKSB7XG5cblx0XHRcdGNhbWVyYS5mb3YgPSBmb3Y7XG5cdFx0XHRjYW1lcmEuYXNwZWN0ID0gYXNwZWN0O1xuXHRcdFx0Y2FtZXJhLmZhciA9IGZhcjtcblx0XHRcdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHR9XG5cblx0XHRzdXBlci51cGRhdGVNYXRyaWNlcyggbGlnaHQgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmZvY3VzID0gc291cmNlLmZvY3VzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cblNwb3RMaWdodFNoYWRvdy5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3cgPSB0cnVlO1xuXG5jbGFzcyBTcG90TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cblx0Y29uc3RydWN0b3IoIGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlID0gMCwgYW5nbGUgPSBNYXRoLlBJIC8gMywgcGVudW1icmEgPSAwLCBkZWNheSA9IDEgKSB7XG5cblx0XHRzdXBlciggY29sb3IsIGludGVuc2l0eSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1Nwb3RMaWdodCc7XG5cblx0XHR0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNELkRlZmF1bHRVcCApO1xuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XG5cblx0XHR0aGlzLnRhcmdldCA9IG5ldyBPYmplY3QzRCgpO1xuXG5cdFx0dGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdHRoaXMuYW5nbGUgPSBhbmdsZTtcblx0XHR0aGlzLnBlbnVtYnJhID0gcGVudW1icmE7XG5cdFx0dGhpcy5kZWNheSA9IGRlY2F5OyAvLyBmb3IgcGh5c2ljYWxseSBjb3JyZWN0IGxpZ2h0cywgc2hvdWxkIGJlIDIuXG5cblx0XHR0aGlzLnNoYWRvdyA9IG5ldyBTcG90TGlnaHRTaGFkb3coKTtcblxuXHR9XG5cblx0Z2V0IHBvd2VyKCkge1xuXG5cdFx0Ly8gY29tcHV0ZSB0aGUgbGlnaHQncyBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKSBmcm9tIGl0cyBpbnRlbnNpdHkgKGluIGNhbmRlbGEpXG5cdFx0Ly8gYnkgY29udmVudGlvbiBmb3IgYSBzcG90bGlnaHQsIGx1bWlub3VzIHBvd2VyIChsbSkgPSDPgCAqIGx1bWlub3VzIGludGVuc2l0eSAoY2QpXG5cdFx0cmV0dXJuIHRoaXMuaW50ZW5zaXR5ICogTWF0aC5QSTtcblxuXHR9XG5cblx0c2V0IHBvd2VyKCBwb3dlciApIHtcblxuXHRcdC8vIHNldCB0aGUgbGlnaHQncyBpbnRlbnNpdHkgKGluIGNhbmRlbGEpIGZyb20gdGhlIGRlc2lyZWQgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucylcblx0XHR0aGlzLmludGVuc2l0eSA9IHBvd2VyIC8gTWF0aC5QSTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuc2hhZG93LmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLmRpc3RhbmNlID0gc291cmNlLmRpc3RhbmNlO1xuXHRcdHRoaXMuYW5nbGUgPSBzb3VyY2UuYW5nbGU7XG5cdFx0dGhpcy5wZW51bWJyYSA9IHNvdXJjZS5wZW51bWJyYTtcblx0XHR0aGlzLmRlY2F5ID0gc291cmNlLmRlY2F5O1xuXG5cdFx0dGhpcy50YXJnZXQgPSBzb3VyY2UudGFyZ2V0LmNsb25lKCk7XG5cblx0XHR0aGlzLnNoYWRvdyA9IHNvdXJjZS5zaGFkb3cuY2xvbmUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5TcG90TGlnaHQucHJvdG90eXBlLmlzU3BvdExpZ2h0ID0gdHJ1ZTtcblxuY29uc3QgX3Byb2pTY3JlZW5NYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfbGlnaHRQb3NpdGlvbldvcmxkID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX2xvb2tUYXJnZXQgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIFBvaW50TGlnaHRTaGFkb3cgZXh0ZW5kcyBMaWdodFNoYWRvdyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlciggbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCA5MCwgMSwgMC41LCA1MDAgKSApO1xuXG5cdFx0dGhpcy5fZnJhbWVFeHRlbnRzID0gbmV3IFZlY3RvcjIoIDQsIDIgKTtcblxuXHRcdHRoaXMuX3ZpZXdwb3J0Q291bnQgPSA2O1xuXG5cdFx0dGhpcy5fdmlld3BvcnRzID0gW1xuXHRcdFx0Ly8gVGhlc2Ugdmlld3BvcnRzIG1hcCBhIGN1YmUtbWFwIG9udG8gYSAyRCB0ZXh0dXJlIHdpdGggdGhlXG5cdFx0XHQvLyBmb2xsb3dpbmcgb3JpZW50YXRpb246XG5cdFx0XHQvL1xuXHRcdFx0Ly8gIHh6WFpcblx0XHRcdC8vICAgeSBZXG5cdFx0XHQvL1xuXHRcdFx0Ly8gWCAtIFBvc2l0aXZlIHggZGlyZWN0aW9uXG5cdFx0XHQvLyB4IC0gTmVnYXRpdmUgeCBkaXJlY3Rpb25cblx0XHRcdC8vIFkgLSBQb3NpdGl2ZSB5IGRpcmVjdGlvblxuXHRcdFx0Ly8geSAtIE5lZ2F0aXZlIHkgZGlyZWN0aW9uXG5cdFx0XHQvLyBaIC0gUG9zaXRpdmUgeiBkaXJlY3Rpb25cblx0XHRcdC8vIHogLSBOZWdhdGl2ZSB6IGRpcmVjdGlvblxuXG5cdFx0XHQvLyBwb3NpdGl2ZSBYXG5cdFx0XHRuZXcgVmVjdG9yNCggMiwgMSwgMSwgMSApLFxuXHRcdFx0Ly8gbmVnYXRpdmUgWFxuXHRcdFx0bmV3IFZlY3RvcjQoIDAsIDEsIDEsIDEgKSxcblx0XHRcdC8vIHBvc2l0aXZlIFpcblx0XHRcdG5ldyBWZWN0b3I0KCAzLCAxLCAxLCAxICksXG5cdFx0XHQvLyBuZWdhdGl2ZSBaXG5cdFx0XHRuZXcgVmVjdG9yNCggMSwgMSwgMSwgMSApLFxuXHRcdFx0Ly8gcG9zaXRpdmUgWVxuXHRcdFx0bmV3IFZlY3RvcjQoIDMsIDAsIDEsIDEgKSxcblx0XHRcdC8vIG5lZ2F0aXZlIFlcblx0XHRcdG5ldyBWZWN0b3I0KCAxLCAwLCAxLCAxIClcblx0XHRdO1xuXG5cdFx0dGhpcy5fY3ViZURpcmVjdGlvbnMgPSBbXG5cdFx0XHRuZXcgVmVjdG9yMyggMSwgMCwgMCApLCBuZXcgVmVjdG9yMyggLSAxLCAwLCAwICksIG5ldyBWZWN0b3IzKCAwLCAwLCAxICksXG5cdFx0XHRuZXcgVmVjdG9yMyggMCwgMCwgLSAxICksIG5ldyBWZWN0b3IzKCAwLCAxLCAwICksIG5ldyBWZWN0b3IzKCAwLCAtIDEsIDAgKVxuXHRcdF07XG5cblx0XHR0aGlzLl9jdWJlVXBzID0gW1xuXHRcdFx0bmV3IFZlY3RvcjMoIDAsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDEsIDAgKSxcblx0XHRcdG5ldyBWZWN0b3IzKCAwLCAxLCAwICksIG5ldyBWZWN0b3IzKCAwLCAwLCAxICksXHRuZXcgVmVjdG9yMyggMCwgMCwgLSAxIClcblx0XHRdO1xuXG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyggbGlnaHQsIHZpZXdwb3J0SW5kZXggPSAwICkge1xuXG5cdFx0Y29uc3QgY2FtZXJhID0gdGhpcy5jYW1lcmE7XG5cdFx0Y29uc3Qgc2hhZG93TWF0cml4ID0gdGhpcy5tYXRyaXg7XG5cblx0XHRjb25zdCBmYXIgPSBsaWdodC5kaXN0YW5jZSB8fCBjYW1lcmEuZmFyO1xuXG5cdFx0aWYgKCBmYXIgIT09IGNhbWVyYS5mYXIgKSB7XG5cblx0XHRcdGNhbWVyYS5mYXIgPSBmYXI7XG5cdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdFx0fVxuXG5cdFx0X2xpZ2h0UG9zaXRpb25Xb3JsZC5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cdFx0Y2FtZXJhLnBvc2l0aW9uLmNvcHkoIF9saWdodFBvc2l0aW9uV29ybGQgKTtcblxuXHRcdF9sb29rVGFyZ2V0LmNvcHkoIGNhbWVyYS5wb3NpdGlvbiApO1xuXHRcdF9sb29rVGFyZ2V0LmFkZCggdGhpcy5fY3ViZURpcmVjdGlvbnNbIHZpZXdwb3J0SW5kZXggXSApO1xuXHRcdGNhbWVyYS51cC5jb3B5KCB0aGlzLl9jdWJlVXBzWyB2aWV3cG9ydEluZGV4IF0gKTtcblx0XHRjYW1lcmEubG9va0F0KCBfbG9va1RhcmdldCApO1xuXHRcdGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXG5cdFx0c2hhZG93TWF0cml4Lm1ha2VUcmFuc2xhdGlvbiggLSBfbGlnaHRQb3NpdGlvbldvcmxkLngsIC0gX2xpZ2h0UG9zaXRpb25Xb3JsZC55LCAtIF9saWdodFBvc2l0aW9uV29ybGQueiApO1xuXG5cdFx0X3Byb2pTY3JlZW5NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLnByb2plY3Rpb25NYXRyaXgsIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTtcblx0XHR0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCBfcHJvalNjcmVlbk1hdHJpeCApO1xuXG5cdH1cblxufVxuXG5Qb2ludExpZ2h0U2hhZG93LnByb3RvdHlwZS5pc1BvaW50TGlnaHRTaGFkb3cgPSB0cnVlO1xuXG5jbGFzcyBQb2ludExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgaW50ZW5zaXR5LCBkaXN0YW5jZSA9IDAsIGRlY2F5ID0gMSApIHtcblxuXHRcdHN1cGVyKCBjb2xvciwgaW50ZW5zaXR5ICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnUG9pbnRMaWdodCc7XG5cblx0XHR0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0dGhpcy5kZWNheSA9IGRlY2F5OyAvLyBmb3IgcGh5c2ljYWxseSBjb3JyZWN0IGxpZ2h0cywgc2hvdWxkIGJlIDIuXG5cblx0XHR0aGlzLnNoYWRvdyA9IG5ldyBQb2ludExpZ2h0U2hhZG93KCk7XG5cblx0fVxuXG5cdGdldCBwb3dlcigpIHtcblxuXHRcdC8vIGNvbXB1dGUgdGhlIGxpZ2h0J3MgbHVtaW5vdXMgcG93ZXIgKGluIGx1bWVucykgZnJvbSBpdHMgaW50ZW5zaXR5IChpbiBjYW5kZWxhKVxuXHRcdC8vIGZvciBhbiBpc290cm9waWMgbGlnaHQgc291cmNlLCBsdW1pbm91cyBwb3dlciAobG0pID0gNCDPgCBsdW1pbm91cyBpbnRlbnNpdHkgKGNkKVxuXHRcdHJldHVybiB0aGlzLmludGVuc2l0eSAqIDQgKiBNYXRoLlBJO1xuXG5cdH1cblxuXHRzZXQgcG93ZXIoIHBvd2VyICkge1xuXG5cdFx0Ly8gc2V0IHRoZSBsaWdodCdzIGludGVuc2l0eSAoaW4gY2FuZGVsYSkgZnJvbSB0aGUgZGVzaXJlZCBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKVxuXHRcdHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyAoIDQgKiBNYXRoLlBJICk7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLnNoYWRvdy5kaXNwb3NlKCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5kaXN0YW5jZSA9IHNvdXJjZS5kaXN0YW5jZTtcblx0XHR0aGlzLmRlY2F5ID0gc291cmNlLmRlY2F5O1xuXG5cdFx0dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuUG9pbnRMaWdodC5wcm90b3R5cGUuaXNQb2ludExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBleHRlbmRzIExpZ2h0U2hhZG93IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCAtIDUsIDUsIDUsIC0gNSwgMC41LCA1MDAgKSApO1xuXG5cdH1cblxufVxuXG5EaXJlY3Rpb25hbExpZ2h0U2hhZG93LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSB0cnVlO1xuXG5jbGFzcyBEaXJlY3Rpb25hbExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgaW50ZW5zaXR5ICkge1xuXG5cdFx0c3VwZXIoIGNvbG9yLCBpbnRlbnNpdHkgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdEaXJlY3Rpb25hbExpZ2h0JztcblxuXHRcdHRoaXMucG9zaXRpb24uY29weSggT2JqZWN0M0QuRGVmYXVsdFVwICk7XG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcblxuXHRcdHRoaXMudGFyZ2V0ID0gbmV3IE9iamVjdDNEKCk7XG5cblx0XHR0aGlzLnNoYWRvdyA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCk7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLnNoYWRvdy5kaXNwb3NlKCk7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy50YXJnZXQgPSBzb3VyY2UudGFyZ2V0LmNsb25lKCk7XG5cdFx0dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgQW1iaWVudExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgaW50ZW5zaXR5ICkge1xuXG5cdFx0c3VwZXIoIGNvbG9yLCBpbnRlbnNpdHkgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdBbWJpZW50TGlnaHQnO1xuXG5cdH1cblxufVxuXG5BbWJpZW50TGlnaHQucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0ID0gdHJ1ZTtcblxuY2xhc3MgUmVjdEFyZWFMaWdodCBleHRlbmRzIExpZ2h0IHtcblxuXHRjb25zdHJ1Y3RvciggY29sb3IsIGludGVuc2l0eSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTAgKSB7XG5cblx0XHRzdXBlciggY29sb3IsIGludGVuc2l0eSApO1xuXG5cdFx0dGhpcy50eXBlID0gJ1JlY3RBcmVhTGlnaHQnO1xuXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdH1cblxuXHRnZXQgcG93ZXIoKSB7XG5cblx0XHQvLyBjb21wdXRlIHRoZSBsaWdodCdzIGx1bWlub3VzIHBvd2VyIChpbiBsdW1lbnMpIGZyb20gaXRzIGludGVuc2l0eSAoaW4gbml0cylcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnNpdHkgKiB0aGlzLndpZHRoICogdGhpcy5oZWlnaHQgKiBNYXRoLlBJO1xuXG5cdH1cblxuXHRzZXQgcG93ZXIoIHBvd2VyICkge1xuXG5cdFx0Ly8gc2V0IHRoZSBsaWdodCdzIGludGVuc2l0eSAoaW4gbml0cykgZnJvbSB0aGUgZGVzaXJlZCBsdW1pbm91cyBwb3dlciAoaW4gbHVtZW5zKVxuXHRcdHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyAoIHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIE1hdGguUEkgKTtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b0pTT04oIG1ldGEgKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCBtZXRhICk7XG5cblx0XHRkYXRhLm9iamVjdC53aWR0aCA9IHRoaXMud2lkdGg7XG5cdFx0ZGF0YS5vYmplY3QuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cblx0XHRyZXR1cm4gZGF0YTtcblxuXHR9XG5cbn1cblxuUmVjdEFyZWFMaWdodC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0ID0gdHJ1ZTtcblxuLyoqXG4gKiBQcmltYXJ5IHJlZmVyZW5jZTpcbiAqICAgaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmXG4gKlxuICogU2Vjb25kYXJ5IHJlZmVyZW5jZTpcbiAqICAgaHR0cHM6Ly93d3cucHBzbG9hbi5vcmcvcHVibGljYXRpb25zL1N0dXBpZFNIMzYucGRmXG4gKi9cblxuLy8gMy1iYW5kIFNIIGRlZmluZWQgYnkgOSBjb2VmZmljaWVudHNcblxuY2xhc3MgU3BoZXJpY2FsSGFybW9uaWNzMyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLmNvZWZmaWNpZW50cyA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5jb2VmZmljaWVudHMucHVzaCggbmV3IFZlY3RvcjMoKSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRzZXQoIGNvZWZmaWNpZW50cyApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuY29lZmZpY2llbnRzWyBpIF0uY29weSggY29lZmZpY2llbnRzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR6ZXJvKCkge1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5jb2VmZmljaWVudHNbIGkgXS5zZXQoIDAsIDAsIDAgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyBnZXQgdGhlIHJhZGlhbmNlIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5vcm1hbFxuXHQvLyB0YXJnZXQgaXMgYSBWZWN0b3IzXG5cdGdldEF0KCBub3JtYWwsIHRhcmdldCApIHtcblxuXHRcdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoXG5cblx0XHRjb25zdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXG5cdFx0Y29uc3QgY29lZmYgPSB0aGlzLmNvZWZmaWNpZW50cztcblxuXHRcdC8vIGJhbmQgMFxuXHRcdHRhcmdldC5jb3B5KCBjb2VmZlsgMCBdICkubXVsdGlwbHlTY2FsYXIoIDAuMjgyMDk1ICk7XG5cblx0XHQvLyBiYW5kIDFcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgMSBdLCAwLjQ4ODYwMyAqIHkgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgMiBdLCAwLjQ4ODYwMyAqIHogKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgMyBdLCAwLjQ4ODYwMyAqIHggKTtcblxuXHRcdC8vIGJhbmQgMlxuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyA0IF0sIDEuMDkyNTQ4ICogKCB4ICogeSApICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDUgXSwgMS4wOTI1NDggKiAoIHkgKiB6ICkgKTtcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNiBdLCAwLjMxNTM5MiAqICggMy4wICogeiAqIHogLSAxLjAgKSApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyA3IF0sIDEuMDkyNTQ4ICogKCB4ICogeiApICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDggXSwgMC41NDYyNzQgKiAoIHggKiB4IC0geSAqIHkgKSApO1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblxuXHR9XG5cblx0Ly8gZ2V0IHRoZSBpcnJhZGlhbmNlIChyYWRpYW5jZSBjb252b2x2ZWQgd2l0aCBjb3NpbmUgbG9iZSkgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsXG5cdC8vIHRhcmdldCBpcyBhIFZlY3RvcjNcblx0Ly8gaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmXG5cdGdldElycmFkaWFuY2VBdCggbm9ybWFsLCB0YXJnZXQgKSB7XG5cblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aFxuXG5cdFx0Y29uc3QgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblxuXHRcdGNvbnN0IGNvZWZmID0gdGhpcy5jb2VmZmljaWVudHM7XG5cblx0XHQvLyBiYW5kIDBcblx0XHR0YXJnZXQuY29weSggY29lZmZbIDAgXSApLm11bHRpcGx5U2NhbGFyKCAwLjg4NjIyNyApOyAvLyDPgCAqIDAuMjgyMDk1XG5cblx0XHQvLyBiYW5kIDFcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgMSBdLCAyLjAgKiAwLjUxMTY2NCAqIHkgKTsgLy8gKCAyICogz4AgLyAzICkgKiAwLjQ4ODYwM1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAyIF0sIDIuMCAqIDAuNTExNjY0ICogeiApO1xuXHRcdHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIGNvZWZmWyAzIF0sIDIuMCAqIDAuNTExNjY0ICogeCApO1xuXG5cdFx0Ly8gYmFuZCAyXG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDQgXSwgMi4wICogMC40MjkwNDMgKiB4ICogeSApOyAvLyAoIM+AIC8gNCApICogMS4wOTI1NDhcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNSBdLCAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6ICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDYgXSwgMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7IC8vICggz4AgLyA0ICkgKiAwLjMxNTM5MiAqIDNcblx0XHR0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKCBjb2VmZlsgNyBdLCAyLjAgKiAwLjQyOTA0MyAqIHggKiB6ICk7XG5cdFx0dGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggY29lZmZbIDggXSwgMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKSApOyAvLyAoIM+AIC8gNCApICogMC41NDYyNzRcblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cblx0fVxuXG5cdGFkZCggc2ggKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1sgaSBdLmFkZCggc2guY29lZmZpY2llbnRzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRhZGRTY2FsZWRTSCggc2gsIHMgKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1sgaSBdLmFkZFNjYWxlZFZlY3Rvciggc2guY29lZmZpY2llbnRzWyBpIF0sIHMgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzY2FsZSggcyApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IDk7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuY29lZmZpY2llbnRzWyBpIF0ubXVsdGlwbHlTY2FsYXIoIHMgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRsZXJwKCBzaCwgYWxwaGEgKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHR0aGlzLmNvZWZmaWNpZW50c1sgaSBdLmxlcnAoIHNoLmNvZWZmaWNpZW50c1sgaSBdLCBhbHBoYSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggc2ggKSB7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCA5OyBpICsrICkge1xuXG5cdFx0XHRpZiAoICEgdGhpcy5jb2VmZmljaWVudHNbIGkgXS5lcXVhbHMoIHNoLmNvZWZmaWNpZW50c1sgaSBdICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9XG5cblx0Y29weSggc2ggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXQoIHNoLmNvZWZmaWNpZW50cyApO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cblx0ZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGNvbnN0IGNvZWZmaWNpZW50cyA9IHRoaXMuY29lZmZpY2llbnRzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0Y29lZmZpY2llbnRzWyBpIF0uZnJvbUFycmF5KCBhcnJheSwgb2Zmc2V0ICsgKCBpICogMyApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9BcnJheSggYXJyYXkgPSBbXSwgb2Zmc2V0ID0gMCApIHtcblxuXHRcdGNvbnN0IGNvZWZmaWNpZW50cyA9IHRoaXMuY29lZmZpY2llbnRzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgOTsgaSArKyApIHtcblxuXHRcdFx0Y29lZmZpY2llbnRzWyBpIF0udG9BcnJheSggYXJyYXksIG9mZnNldCArICggaSAqIDMgKSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH1cblxuXHQvLyBldmFsdWF0ZSB0aGUgYmFzaXMgZnVuY3Rpb25zXG5cdC8vIHNoQmFzaXMgaXMgYW4gQXJyYXlbIDkgXVxuXHRzdGF0aWMgZ2V0QmFzaXNBdCggbm9ybWFsLCBzaEJhc2lzICkge1xuXG5cdFx0Ly8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGhcblxuXHRcdGNvbnN0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XG5cblx0XHQvLyBiYW5kIDBcblx0XHRzaEJhc2lzWyAwIF0gPSAwLjI4MjA5NTtcblxuXHRcdC8vIGJhbmQgMVxuXHRcdHNoQmFzaXNbIDEgXSA9IDAuNDg4NjAzICogeTtcblx0XHRzaEJhc2lzWyAyIF0gPSAwLjQ4ODYwMyAqIHo7XG5cdFx0c2hCYXNpc1sgMyBdID0gMC40ODg2MDMgKiB4O1xuXG5cdFx0Ly8gYmFuZCAyXG5cdFx0c2hCYXNpc1sgNCBdID0gMS4wOTI1NDggKiB4ICogeTtcblx0XHRzaEJhc2lzWyA1IF0gPSAxLjA5MjU0OCAqIHkgKiB6O1xuXHRcdHNoQmFzaXNbIDYgXSA9IDAuMzE1MzkyICogKCAzICogeiAqIHogLSAxICk7XG5cdFx0c2hCYXNpc1sgNyBdID0gMS4wOTI1NDggKiB4ICogejtcblx0XHRzaEJhc2lzWyA4IF0gPSAwLjU0NjI3NCAqICggeCAqIHggLSB5ICogeSApO1xuXG5cdH1cblxufVxuXG5TcGhlcmljYWxIYXJtb25pY3MzLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczMgPSB0cnVlO1xuXG5jbGFzcyBMaWdodFByb2JlIGV4dGVuZHMgTGlnaHQge1xuXG5cdGNvbnN0cnVjdG9yKCBzaCA9IG5ldyBTcGhlcmljYWxIYXJtb25pY3MzKCksIGludGVuc2l0eSA9IDEgKSB7XG5cblx0XHRzdXBlciggdW5kZWZpbmVkLCBpbnRlbnNpdHkgKTtcblxuXHRcdHRoaXMuc2ggPSBzaDtcblxuXHR9XG5cblx0Y29weSggc291cmNlICkge1xuXG5cdFx0c3VwZXIuY29weSggc291cmNlICk7XG5cblx0XHR0aGlzLnNoLmNvcHkoIHNvdXJjZS5zaCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGZyb21KU09OKCBqc29uICkge1xuXG5cdFx0dGhpcy5pbnRlbnNpdHkgPSBqc29uLmludGVuc2l0eTsgLy8gVE9ETzogTW92ZSB0aGlzIGJpdCB0byBMaWdodC5mcm9tSlNPTigpO1xuXHRcdHRoaXMuc2guZnJvbUFycmF5KCBqc29uLnNoICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0dG9KU09OKCBtZXRhICkge1xuXG5cdFx0Y29uc3QgZGF0YSA9IHN1cGVyLnRvSlNPTiggbWV0YSApO1xuXG5cdFx0ZGF0YS5vYmplY3Quc2ggPSB0aGlzLnNoLnRvQXJyYXkoKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXG5cdH1cblxufVxuXG5MaWdodFByb2JlLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmUgPSB0cnVlO1xuXG5jbGFzcyBNYXRlcmlhbExvYWRlciBleHRlbmRzIExvYWRlciB7XG5cblx0Y29uc3RydWN0b3IoIG1hbmFnZXIgKSB7XG5cblx0XHRzdXBlciggbWFuYWdlciApO1xuXHRcdHRoaXMudGV4dHVyZXMgPSB7fTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCBzY29wZS5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHNjb3BlLnJlcXVlc3RIZWFkZXIgKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCBzY29wZS53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIHRleHQgKSB7XG5cblx0XHRcdHRyeSB7XG5cblx0XHRcdFx0b25Mb2FkKCBzY29wZS5wYXJzZSggSlNPTi5wYXJzZSggdGV4dCApICkgKTtcblxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0aWYgKCBvbkVycm9yICkge1xuXG5cdFx0XHRcdFx0b25FcnJvciggZSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvciApO1xuXG5cdH1cblxuXHRwYXJzZSgganNvbiApIHtcblxuXHRcdGNvbnN0IHRleHR1cmVzID0gdGhpcy50ZXh0dXJlcztcblxuXHRcdGZ1bmN0aW9uIGdldFRleHR1cmUoIG5hbWUgKSB7XG5cblx0XHRcdGlmICggdGV4dHVyZXNbIG5hbWUgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIG5hbWUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGV4dHVyZXNbIG5hbWUgXTtcblxuXHRcdH1cblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsc1sganNvbi50eXBlIF0oKTtcblxuXHRcdGlmICgganNvbi51dWlkICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC51dWlkID0ganNvbi51dWlkO1xuXHRcdGlmICgganNvbi5uYW1lICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5uYW1lID0ganNvbi5uYW1lO1xuXHRcdGlmICgganNvbi5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLmNvbG9yICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIGpzb24uY29sb3IgKTtcblx0XHRpZiAoIGpzb24ucm91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5yb3VnaG5lc3MgPSBqc29uLnJvdWdobmVzcztcblx0XHRpZiAoIGpzb24ubWV0YWxuZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tZXRhbG5lc3MgPSBqc29uLm1ldGFsbmVzcztcblx0XHRpZiAoIGpzb24uc2hlZW4gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNoZWVuID0ganNvbi5zaGVlbjtcblx0XHRpZiAoIGpzb24uc2hlZW5Db2xvciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hlZW5Db2xvciA9IG5ldyBDb2xvcigpLnNldEhleCgganNvbi5zaGVlbkNvbG9yICk7XG5cdFx0aWYgKCBqc29uLnNoZWVuUm91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyA9IGpzb24uc2hlZW5Sb3VnaG5lc3M7XG5cdFx0aWYgKCBqc29uLmVtaXNzaXZlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwuZW1pc3NpdmUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVtaXNzaXZlLnNldEhleCgganNvbi5lbWlzc2l2ZSApO1xuXHRcdGlmICgganNvbi5zcGVjdWxhciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnNwZWN1bGFyICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhci5zZXRIZXgoIGpzb24uc3BlY3VsYXIgKTtcblx0XHRpZiAoIGpzb24uc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5ID0ganNvbi5zcGVjdWxhckludGVuc2l0eTtcblx0XHRpZiAoIGpzb24uc3BlY3VsYXJDb2xvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3Iuc2V0SGV4KCBqc29uLnNwZWN1bGFyQ29sb3IgKTtcblx0XHRpZiAoIGpzb24uc2hpbmluZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGluaW5lc3MgPSBqc29uLnNoaW5pbmVzcztcblx0XHRpZiAoIGpzb24uY2xlYXJjb2F0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhcmNvYXQgPSBqc29uLmNsZWFyY29hdDtcblx0XHRpZiAoIGpzb24uY2xlYXJjb2F0Um91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBqc29uLmNsZWFyY29hdFJvdWdobmVzcztcblx0XHRpZiAoIGpzb24udHJhbnNtaXNzaW9uICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC50cmFuc21pc3Npb24gPSBqc29uLnRyYW5zbWlzc2lvbjtcblx0XHRpZiAoIGpzb24udGhpY2tuZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC50aGlja25lc3MgPSBqc29uLnRoaWNrbmVzcztcblx0XHRpZiAoIGpzb24uYXR0ZW51YXRpb25EaXN0YW5jZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZSA9IGpzb24uYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRpZiAoIGpzb24uYXR0ZW51YXRpb25Db2xvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3IgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KCBqc29uLmF0dGVudWF0aW9uQ29sb3IgKTtcblx0XHRpZiAoIGpzb24uZm9nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mb2cgPSBqc29uLmZvZztcblx0XHRpZiAoIGpzb24uZmxhdFNoYWRpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZsYXRTaGFkaW5nID0ganNvbi5mbGF0U2hhZGluZztcblx0XHRpZiAoIGpzb24uYmxlbmRpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmJsZW5kaW5nID0ganNvbi5ibGVuZGluZztcblx0XHRpZiAoIGpzb24uY29tYmluZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY29tYmluZSA9IGpzb24uY29tYmluZTtcblx0XHRpZiAoIGpzb24uc2lkZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2lkZSA9IGpzb24uc2lkZTtcblx0XHRpZiAoIGpzb24uc2hhZG93U2lkZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hhZG93U2lkZSA9IGpzb24uc2hhZG93U2lkZTtcblx0XHRpZiAoIGpzb24ub3BhY2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwub3BhY2l0eSA9IGpzb24ub3BhY2l0eTtcblx0XHRpZiAoIGpzb24udHJhbnNwYXJlbnQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0ganNvbi50cmFuc3BhcmVudDtcblx0XHRpZiAoIGpzb24uYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hbHBoYVRlc3QgPSBqc29uLmFscGhhVGVzdDtcblx0XHRpZiAoIGpzb24uZGVwdGhUZXN0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kZXB0aFRlc3QgPSBqc29uLmRlcHRoVGVzdDtcblx0XHRpZiAoIGpzb24uZGVwdGhXcml0ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZGVwdGhXcml0ZSA9IGpzb24uZGVwdGhXcml0ZTtcblx0XHRpZiAoIGpzb24uY29sb3JXcml0ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY29sb3JXcml0ZSA9IGpzb24uY29sb3JXcml0ZTtcblx0XHRpZiAoIGpzb24uYWxwaGFXcml0ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYWxwaGFXcml0ZSA9IGpzb24uYWxwaGFXcml0ZTtcblxuXHRcdGlmICgganNvbi5zdGVuY2lsV3JpdGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxXcml0ZSA9IGpzb24uc3RlbmNpbFdyaXRlO1xuXHRcdGlmICgganNvbi5zdGVuY2lsV3JpdGVNYXNrICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zdGVuY2lsV3JpdGVNYXNrID0ganNvbi5zdGVuY2lsV3JpdGVNYXNrO1xuXHRcdGlmICgganNvbi5zdGVuY2lsRnVuYyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbEZ1bmMgPSBqc29uLnN0ZW5jaWxGdW5jO1xuXHRcdGlmICgganNvbi5zdGVuY2lsUmVmICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zdGVuY2lsUmVmID0ganNvbi5zdGVuY2lsUmVmO1xuXHRcdGlmICgganNvbi5zdGVuY2lsRnVuY01hc2sgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxGdW5jTWFzayA9IGpzb24uc3RlbmNpbEZ1bmNNYXNrO1xuXHRcdGlmICgganNvbi5zdGVuY2lsRmFpbCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3RlbmNpbEZhaWwgPSBqc29uLnN0ZW5jaWxGYWlsO1xuXHRcdGlmICgganNvbi5zdGVuY2lsWkZhaWwgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxaRmFpbCA9IGpzb24uc3RlbmNpbFpGYWlsO1xuXHRcdGlmICgganNvbi5zdGVuY2lsWlBhc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnN0ZW5jaWxaUGFzcyA9IGpzb24uc3RlbmNpbFpQYXNzO1xuXG5cdFx0aWYgKCBqc29uLndpcmVmcmFtZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwud2lyZWZyYW1lID0ganNvbi53aXJlZnJhbWU7XG5cdFx0aWYgKCBqc29uLndpcmVmcmFtZUxpbmV3aWR0aCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoID0ganNvbi53aXJlZnJhbWVMaW5ld2lkdGg7XG5cdFx0aWYgKCBqc29uLndpcmVmcmFtZUxpbmVjYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAgPSBqc29uLndpcmVmcmFtZUxpbmVjYXA7XG5cdFx0aWYgKCBqc29uLndpcmVmcmFtZUxpbmVqb2luICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiA9IGpzb24ud2lyZWZyYW1lTGluZWpvaW47XG5cblx0XHRpZiAoIGpzb24ucm90YXRpb24gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJvdGF0aW9uID0ganNvbi5yb3RhdGlvbjtcblxuXHRcdGlmICgganNvbi5saW5ld2lkdGggIT09IDEgKSBtYXRlcmlhbC5saW5ld2lkdGggPSBqc29uLmxpbmV3aWR0aDtcblx0XHRpZiAoIGpzb24uZGFzaFNpemUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRhc2hTaXplID0ganNvbi5kYXNoU2l6ZTtcblx0XHRpZiAoIGpzb24uZ2FwU2l6ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZ2FwU2l6ZSA9IGpzb24uZ2FwU2l6ZTtcblx0XHRpZiAoIGpzb24uc2NhbGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNjYWxlID0ganNvbi5zY2FsZTtcblxuXHRcdGlmICgganNvbi5wb2x5Z29uT2Zmc2V0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0ID0ganNvbi5wb2x5Z29uT2Zmc2V0O1xuXHRcdGlmICgganNvbi5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yID0ganNvbi5wb2x5Z29uT2Zmc2V0RmFjdG9yO1xuXHRcdGlmICgganNvbi5wb2x5Z29uT2Zmc2V0VW5pdHMgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnBvbHlnb25PZmZzZXRVbml0cyA9IGpzb24ucG9seWdvbk9mZnNldFVuaXRzO1xuXG5cdFx0aWYgKCBqc29uLmRpdGhlcmluZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZGl0aGVyaW5nID0ganNvbi5kaXRoZXJpbmc7XG5cblx0XHRpZiAoIGpzb24uYWxwaGFUb0NvdmVyYWdlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hbHBoYVRvQ292ZXJhZ2UgPSBqc29uLmFscGhhVG9Db3ZlcmFnZTtcblx0XHRpZiAoIGpzb24ucHJlbXVsdGlwbGllZEFscGhhICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEgPSBqc29uLnByZW11bHRpcGxpZWRBbHBoYTtcblxuXHRcdGlmICgganNvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC52aXNpYmxlID0ganNvbi52aXNpYmxlO1xuXG5cdFx0aWYgKCBqc29uLnRvbmVNYXBwZWQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRvbmVNYXBwZWQgPSBqc29uLnRvbmVNYXBwZWQ7XG5cblx0XHRpZiAoIGpzb24udXNlckRhdGEgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnVzZXJEYXRhID0ganNvbi51c2VyRGF0YTtcblxuXHRcdGlmICgganNvbi52ZXJ0ZXhDb2xvcnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCB0eXBlb2YganNvbi52ZXJ0ZXhDb2xvcnMgPT09ICdudW1iZXInICkge1xuXG5cdFx0XHRcdG1hdGVyaWFsLnZlcnRleENvbG9ycyA9ICgganNvbi52ZXJ0ZXhDb2xvcnMgPiAwICkgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0bWF0ZXJpYWwudmVydGV4Q29sb3JzID0ganNvbi52ZXJ0ZXhDb2xvcnM7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIFNoYWRlciBNYXRlcmlhbFxuXG5cdFx0aWYgKCBqc29uLnVuaWZvcm1zICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGNvbnN0IG5hbWUgaW4ganNvbi51bmlmb3JtcyApIHtcblxuXHRcdFx0XHRjb25zdCB1bmlmb3JtID0ganNvbi51bmlmb3Jtc1sgbmFtZSBdO1xuXG5cdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0gPSB7fTtcblxuXHRcdFx0XHRzd2l0Y2ggKCB1bmlmb3JtLnR5cGUgKSB7XG5cblx0XHRcdFx0XHRjYXNlICd0Jzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBnZXRUZXh0dXJlKCB1bmlmb3JtLnZhbHVlICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5ldyBDb2xvcigpLnNldEhleCggdW5pZm9ybS52YWx1ZSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICd2Mic6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIHVuaWZvcm0udmFsdWUgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAndjMnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KCB1bmlmb3JtLnZhbHVlICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgJ3Y0Jzpcblx0XHRcdFx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBuZXcgVmVjdG9yNCgpLmZyb21BcnJheSggdW5pZm9ybS52YWx1ZSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdtMyc6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gbmV3IE1hdHJpeDMoKS5mcm9tQXJyYXkoIHVuaWZvcm0udmFsdWUgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAnbTQnOlxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KCB1bmlmb3JtLnZhbHVlICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZhbHVlID0gdW5pZm9ybS52YWx1ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICgganNvbi5kZWZpbmVzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kZWZpbmVzID0ganNvbi5kZWZpbmVzO1xuXHRcdGlmICgganNvbi52ZXJ0ZXhTaGFkZXIgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnZlcnRleFNoYWRlciA9IGpzb24udmVydGV4U2hhZGVyO1xuXHRcdGlmICgganNvbi5mcmFnbWVudFNoYWRlciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZnJhZ21lbnRTaGFkZXIgPSBqc29uLmZyYWdtZW50U2hhZGVyO1xuXG5cdFx0aWYgKCBqc29uLmV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Zm9yICggY29uc3Qga2V5IGluIGpzb24uZXh0ZW5zaW9ucyApIHtcblxuXHRcdFx0XHRtYXRlcmlhbC5leHRlbnNpb25zWyBrZXkgXSA9IGpzb24uZXh0ZW5zaW9uc1sga2V5IF07XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIERlcHJlY2F0ZWRcblxuXHRcdGlmICgganNvbi5zaGFkaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24uc2hhZGluZyA9PT0gMTsgLy8gVEhSRUUuRmxhdFNoYWRpbmdcblxuXHRcdC8vIGZvciBQb2ludHNNYXRlcmlhbFxuXG5cdFx0aWYgKCBqc29uLnNpemUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNpemUgPSBqc29uLnNpemU7XG5cdFx0aWYgKCBqc29uLnNpemVBdHRlbnVhdGlvbiAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uID0ganNvbi5zaXplQXR0ZW51YXRpb247XG5cblx0XHQvLyBtYXBzXG5cblx0XHRpZiAoIGpzb24ubWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tYXAgPSBnZXRUZXh0dXJlKCBqc29uLm1hcCApO1xuXHRcdGlmICgganNvbi5tYXRjYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1hdGNhcCA9IGdldFRleHR1cmUoIGpzb24ubWF0Y2FwICk7XG5cblx0XHRpZiAoIGpzb24uYWxwaGFNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmFscGhhTWFwID0gZ2V0VGV4dHVyZSgganNvbi5hbHBoYU1hcCApO1xuXG5cdFx0aWYgKCBqc29uLmJ1bXBNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmJ1bXBNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmJ1bXBNYXAgKTtcblx0XHRpZiAoIGpzb24uYnVtcFNjYWxlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5idW1wU2NhbGUgPSBqc29uLmJ1bXBTY2FsZTtcblxuXHRcdGlmICgganNvbi5ub3JtYWxNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGdldFRleHR1cmUoIGpzb24ubm9ybWFsTWFwICk7XG5cdFx0aWYgKCBqc29uLm5vcm1hbE1hcFR5cGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm5vcm1hbE1hcFR5cGUgPSBqc29uLm5vcm1hbE1hcFR5cGU7XG5cdFx0aWYgKCBqc29uLm5vcm1hbFNjYWxlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGxldCBub3JtYWxTY2FsZSA9IGpzb24ubm9ybWFsU2NhbGU7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbm9ybWFsU2NhbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gQmxlbmRlciBleHBvcnRlciB1c2VkIHRvIGV4cG9ydCBhIHNjYWxhci4gU2VlICM3NDU5XG5cblx0XHRcdFx0bm9ybWFsU2NhbGUgPSBbIG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSBdO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1hdGVyaWFsLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIG5vcm1hbFNjYWxlICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGpzb24uZGlzcGxhY2VtZW50TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmRpc3BsYWNlbWVudE1hcCApO1xuXHRcdGlmICgganNvbi5kaXNwbGFjZW1lbnRTY2FsZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGUgPSBqc29uLmRpc3BsYWNlbWVudFNjYWxlO1xuXHRcdGlmICgganNvbi5kaXNwbGFjZW1lbnRCaWFzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzID0ganNvbi5kaXNwbGFjZW1lbnRCaWFzO1xuXG5cdFx0aWYgKCBqc29uLnJvdWdobmVzc01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0gZ2V0VGV4dHVyZSgganNvbi5yb3VnaG5lc3NNYXAgKTtcblx0XHRpZiAoIGpzb24ubWV0YWxuZXNzTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tZXRhbG5lc3NNYXAgPSBnZXRUZXh0dXJlKCBqc29uLm1ldGFsbmVzc01hcCApO1xuXG5cdFx0aWYgKCBqc29uLmVtaXNzaXZlTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGdldFRleHR1cmUoIGpzb24uZW1pc3NpdmVNYXAgKTtcblx0XHRpZiAoIGpzb24uZW1pc3NpdmVJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5ID0ganNvbi5lbWlzc2l2ZUludGVuc2l0eTtcblxuXHRcdGlmICgganNvbi5zcGVjdWxhck1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3BlY3VsYXJNYXAgPSBnZXRUZXh0dXJlKCBqc29uLnNwZWN1bGFyTWFwICk7XG5cdFx0aWYgKCBqc29uLnNwZWN1bGFySW50ZW5zaXR5TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eU1hcCA9IGdldFRleHR1cmUoIGpzb24uc3BlY3VsYXJJbnRlbnNpdHlNYXAgKTtcblx0XHRpZiAoIGpzb24uc3BlY3VsYXJDb2xvck1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvck1hcCA9IGdldFRleHR1cmUoIGpzb24uc3BlY3VsYXJDb2xvck1hcCApO1xuXG5cdFx0aWYgKCBqc29uLmVudk1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZW52TWFwID0gZ2V0VGV4dHVyZSgganNvbi5lbnZNYXAgKTtcblx0XHRpZiAoIGpzb24uZW52TWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgPSBqc29uLmVudk1hcEludGVuc2l0eTtcblxuXHRcdGlmICgganNvbi5yZWZsZWN0aXZpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJlZmxlY3Rpdml0eSA9IGpzb24ucmVmbGVjdGl2aXR5O1xuXHRcdGlmICgganNvbi5yZWZyYWN0aW9uUmF0aW8gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJlZnJhY3Rpb25SYXRpbyA9IGpzb24ucmVmcmFjdGlvblJhdGlvO1xuXG5cdFx0aWYgKCBqc29uLmxpZ2h0TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5saWdodE1hcCA9IGdldFRleHR1cmUoIGpzb24ubGlnaHRNYXAgKTtcblx0XHRpZiAoIGpzb24ubGlnaHRNYXBJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmxpZ2h0TWFwSW50ZW5zaXR5ID0ganNvbi5saWdodE1hcEludGVuc2l0eTtcblxuXHRcdGlmICgganNvbi5hb01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYW9NYXAgPSBnZXRUZXh0dXJlKCBqc29uLmFvTWFwICk7XG5cdFx0aWYgKCBqc29uLmFvTWFwSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hb01hcEludGVuc2l0eSA9IGpzb24uYW9NYXBJbnRlbnNpdHk7XG5cblx0XHRpZiAoIGpzb24uZ3JhZGllbnRNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmdyYWRpZW50TWFwID0gZ2V0VGV4dHVyZSgganNvbi5ncmFkaWVudE1hcCApO1xuXG5cdFx0aWYgKCBqc29uLmNsZWFyY29hdE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY2xlYXJjb2F0TWFwID0gZ2V0VGV4dHVyZSgganNvbi5jbGVhcmNvYXRNYXAgKTtcblx0XHRpZiAoIGpzb24uY2xlYXJjb2F0Um91Z2huZXNzTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmNsZWFyY29hdFJvdWdobmVzc01hcCApO1xuXHRcdGlmICgganNvbi5jbGVhcmNvYXROb3JtYWxNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyY29hdE5vcm1hbE1hcCA9IGdldFRleHR1cmUoIGpzb24uY2xlYXJjb2F0Tm9ybWFsTWFwICk7XG5cdFx0aWYgKCBqc29uLmNsZWFyY29hdE5vcm1hbFNjYWxlICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhcmNvYXROb3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KCBqc29uLmNsZWFyY29hdE5vcm1hbFNjYWxlICk7XG5cblx0XHRpZiAoIGpzb24udHJhbnNtaXNzaW9uTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC50cmFuc21pc3Npb25NYXAgPSBnZXRUZXh0dXJlKCBqc29uLnRyYW5zbWlzc2lvbk1hcCApO1xuXHRcdGlmICgganNvbi50aGlja25lc3NNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnRoaWNrbmVzc01hcCA9IGdldFRleHR1cmUoIGpzb24udGhpY2tuZXNzTWFwICk7XG5cblx0XHRpZiAoIGpzb24uc2hlZW5Db2xvck1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hlZW5Db2xvck1hcCA9IGdldFRleHR1cmUoIGpzb24uc2hlZW5Db2xvck1hcCApO1xuXHRcdGlmICgganNvbi5zaGVlblJvdWdobmVzc01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAgPSBnZXRUZXh0dXJlKCBqc29uLnNoZWVuUm91Z2huZXNzTWFwICk7XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWw7XG5cblx0fVxuXG5cdHNldFRleHR1cmVzKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMudGV4dHVyZXMgPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY2xhc3MgTG9hZGVyVXRpbHMge1xuXG5cdHN0YXRpYyBkZWNvZGVUZXh0KCBhcnJheSApIHtcblxuXHRcdGlmICggdHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJyApIHtcblxuXHRcdFx0cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSggYXJyYXkgKTtcblxuXHRcdH1cblxuXHRcdC8vIEF2b2lkIHRoZSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGFycmF5KSBzaG9ydGN1dCwgd2hpY2hcblx0XHQvLyB0aHJvd3MgYSBcIm1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIgZXJyb3IgZm9yIGxhcmdlIGFycmF5cy5cblxuXHRcdGxldCBzID0gJyc7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0gYXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdC8vIEltcGxpY2l0bHkgYXNzdW1lcyBsaXR0bGUtZW5kaWFuLlxuXHRcdFx0cyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBhcnJheVsgaSBdICk7XG5cblx0XHR9XG5cblx0XHR0cnkge1xuXG5cdFx0XHQvLyBtZXJnZXMgbXVsdGktYnl0ZSB1dGYtOCBjaGFyYWN0ZXJzLlxuXG5cdFx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KCBlc2NhcGUoIHMgKSApO1xuXG5cdFx0fSBjYXRjaCAoIGUgKSB7IC8vIHNlZSAjMTYzNThcblxuXHRcdFx0cmV0dXJuIHM7XG5cblx0XHR9XG5cblx0fVxuXG5cdHN0YXRpYyBleHRyYWN0VXJsQmFzZSggdXJsICkge1xuXG5cdFx0Y29uc3QgaW5kZXggPSB1cmwubGFzdEluZGV4T2YoICcvJyApO1xuXG5cdFx0aWYgKCBpbmRleCA9PT0gLSAxICkgcmV0dXJuICcuLyc7XG5cblx0XHRyZXR1cm4gdXJsLnN1YnN0ciggMCwgaW5kZXggKyAxICk7XG5cblx0fVxuXG5cdHN0YXRpYyByZXNvbHZlVVJMKCB1cmwsIHBhdGggKSB7XG5cblx0XHQvLyBJbnZhbGlkIFVSTFxuXHRcdGlmICggdHlwZW9mIHVybCAhPT0gJ3N0cmluZycgfHwgdXJsID09PSAnJyApIHJldHVybiAnJztcblxuXHRcdC8vIEhvc3QgUmVsYXRpdmUgVVJMXG5cdFx0aWYgKCAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KCBwYXRoICkgJiYgL15cXC8vLnRlc3QoIHVybCApICkge1xuXG5cdFx0XHRwYXRoID0gcGF0aC5yZXBsYWNlKCAvKF5odHRwcz86XFwvXFwvW15cXC9dKykuKi9pLCAnJDEnICk7XG5cblx0XHR9XG5cblx0XHQvLyBBYnNvbHV0ZSBVUkwgaHR0cDovLyxodHRwczovLywvL1xuXHRcdGlmICggL14oaHR0cHM/Oik/XFwvXFwvL2kudGVzdCggdXJsICkgKSByZXR1cm4gdXJsO1xuXG5cdFx0Ly8gRGF0YSBVUklcblx0XHRpZiAoIC9eZGF0YTouKiwuKiQvaS50ZXN0KCB1cmwgKSApIHJldHVybiB1cmw7XG5cblx0XHQvLyBCbG9iIFVSTFxuXHRcdGlmICggL15ibG9iOi4qJC9pLnRlc3QoIHVybCApICkgcmV0dXJuIHVybDtcblxuXHRcdC8vIFJlbGF0aXZlIFVSTFxuXHRcdHJldHVybiBwYXRoICsgdXJsO1xuXG5cdH1cblxufVxuXG5jbGFzcyBJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnR5cGUgPSAnSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnknO1xuXHRcdHRoaXMuaW5zdGFuY2VDb3VudCA9IEluZmluaXR5O1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UgKTtcblxuXHRcdHRoaXMuaW5zdGFuY2VDb3VudCA9IHNvdXJjZS5pbnN0YW5jZUNvdW50O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHR0b0pTT04oKSB7XG5cblx0XHRjb25zdCBkYXRhID0gc3VwZXIudG9KU09OKCB0aGlzICk7XG5cblx0XHRkYXRhLmluc3RhbmNlQ291bnQgPSB0aGlzLmluc3RhbmNlQ291bnQ7XG5cblx0XHRkYXRhLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cblx0fVxuXG59XG5cbkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ID0gdHJ1ZTtcblxuY2xhc3MgQnVmZmVyR2VvbWV0cnlMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCBzY29wZS5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHNjb3BlLnJlcXVlc3RIZWFkZXIgKTtcblx0XHRsb2FkZXIuc2V0V2l0aENyZWRlbnRpYWxzKCBzY29wZS53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIHRleHQgKSB7XG5cblx0XHRcdHRyeSB7XG5cblx0XHRcdFx0b25Mb2FkKCBzY29wZS5wYXJzZSggSlNPTi5wYXJzZSggdGV4dCApICkgKTtcblxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0aWYgKCBvbkVycm9yICkge1xuXG5cdFx0XHRcdFx0b25FcnJvciggZSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCBlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSwgb25Qcm9ncmVzcywgb25FcnJvciApO1xuXG5cdH1cblxuXHRwYXJzZSgganNvbiApIHtcblxuXHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyTWFwID0ge307XG5cdFx0Y29uc3QgYXJyYXlCdWZmZXJNYXAgPSB7fTtcblxuXHRcdGZ1bmN0aW9uIGdldEludGVybGVhdmVkQnVmZmVyKCBqc29uLCB1dWlkICkge1xuXG5cdFx0XHRpZiAoIGludGVybGVhdmVkQnVmZmVyTWFwWyB1dWlkIF0gIT09IHVuZGVmaW5lZCApIHJldHVybiBpbnRlcmxlYXZlZEJ1ZmZlck1hcFsgdXVpZCBdO1xuXG5cdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlcnMgPSBqc29uLmludGVybGVhdmVkQnVmZmVycztcblx0XHRcdGNvbnN0IGludGVybGVhdmVkQnVmZmVyID0gaW50ZXJsZWF2ZWRCdWZmZXJzWyB1dWlkIF07XG5cblx0XHRcdGNvbnN0IGJ1ZmZlciA9IGdldEFycmF5QnVmZmVyKCBqc29uLCBpbnRlcmxlYXZlZEJ1ZmZlci5idWZmZXIgKTtcblxuXHRcdFx0Y29uc3QgYXJyYXkgPSBnZXRUeXBlZEFycmF5KCBpbnRlcmxlYXZlZEJ1ZmZlci50eXBlLCBidWZmZXIgKTtcblx0XHRcdGNvbnN0IGliID0gbmV3IEludGVybGVhdmVkQnVmZmVyKCBhcnJheSwgaW50ZXJsZWF2ZWRCdWZmZXIuc3RyaWRlICk7XG5cdFx0XHRpYi51dWlkID0gaW50ZXJsZWF2ZWRCdWZmZXIudXVpZDtcblxuXHRcdFx0aW50ZXJsZWF2ZWRCdWZmZXJNYXBbIHV1aWQgXSA9IGliO1xuXG5cdFx0XHRyZXR1cm4gaWI7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRBcnJheUJ1ZmZlcigganNvbiwgdXVpZCApIHtcblxuXHRcdFx0aWYgKCBhcnJheUJ1ZmZlck1hcFsgdXVpZCBdICE9PSB1bmRlZmluZWQgKSByZXR1cm4gYXJyYXlCdWZmZXJNYXBbIHV1aWQgXTtcblxuXHRcdFx0Y29uc3QgYXJyYXlCdWZmZXJzID0ganNvbi5hcnJheUJ1ZmZlcnM7XG5cdFx0XHRjb25zdCBhcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyc1sgdXVpZCBdO1xuXG5cdFx0XHRjb25zdCBhYiA9IG5ldyBVaW50MzJBcnJheSggYXJyYXlCdWZmZXIgKS5idWZmZXI7XG5cblx0XHRcdGFycmF5QnVmZmVyTWFwWyB1dWlkIF0gPSBhYjtcblxuXHRcdFx0cmV0dXJuIGFiO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBqc29uLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPyBuZXcgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkoKSA6IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0Y29uc3QgaW5kZXggPSBqc29uLmRhdGEuaW5kZXg7XG5cblx0XHRpZiAoIGluZGV4ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnN0IHR5cGVkQXJyYXkgPSBnZXRUeXBlZEFycmF5KCBpbmRleC50eXBlLCBpbmRleC5hcnJheSApO1xuXHRcdFx0Z2VvbWV0cnkuc2V0SW5kZXgoIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHR5cGVkQXJyYXksIDEgKSApO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IGpzb24uZGF0YS5hdHRyaWJ1dGVzO1xuXG5cdFx0Zm9yICggY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbIGtleSBdO1xuXHRcdFx0bGV0IGJ1ZmZlckF0dHJpYnV0ZTtcblxuXHRcdFx0aWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0XHRjb25zdCBpbnRlcmxlYXZlZEJ1ZmZlciA9IGdldEludGVybGVhdmVkQnVmZmVyKCBqc29uLmRhdGEsIGF0dHJpYnV0ZS5kYXRhICk7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSggaW50ZXJsZWF2ZWRCdWZmZXIsIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm9mZnNldCwgYXR0cmlidXRlLm5vcm1hbGl6ZWQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zdCB0eXBlZEFycmF5ID0gZ2V0VHlwZWRBcnJheSggYXR0cmlidXRlLnR5cGUsIGF0dHJpYnV0ZS5hcnJheSApO1xuXHRcdFx0XHRjb25zdCBidWZmZXJBdHRyaWJ1dGVDb25zdHIgPSBhdHRyaWJ1dGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgOiBCdWZmZXJBdHRyaWJ1dGU7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBidWZmZXJBdHRyaWJ1dGVDb25zdHIoIHR5cGVkQXJyYXksIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm5vcm1hbGl6ZWQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGF0dHJpYnV0ZS5uYW1lICE9PSB1bmRlZmluZWQgKSBidWZmZXJBdHRyaWJ1dGUubmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0aWYgKCBhdHRyaWJ1dGUudXNhZ2UgIT09IHVuZGVmaW5lZCApIGJ1ZmZlckF0dHJpYnV0ZS5zZXRVc2FnZSggYXR0cmlidXRlLnVzYWdlICk7XG5cblx0XHRcdGlmICggYXR0cmlidXRlLnVwZGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0YnVmZmVyQXR0cmlidXRlLnVwZGF0ZVJhbmdlLm9mZnNldCA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZS5vZmZzZXQ7XG5cdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZS51cGRhdGVSYW5nZS5jb3VudCA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZS5jb3VudDtcblxuXHRcdFx0fVxuXG5cdFx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoIGtleSwgYnVmZmVyQXR0cmlidXRlICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBqc29uLmRhdGEubW9ycGhBdHRyaWJ1dGVzO1xuXG5cdFx0aWYgKCBtb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdGZvciAoIGNvbnN0IGtleSBpbiBtb3JwaEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlQXJyYXkgPSBtb3JwaEF0dHJpYnV0ZXNbIGtleSBdO1xuXG5cdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGF0dHJpYnV0ZUFycmF5Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlQXJyYXlbIGkgXTtcblx0XHRcdFx0XHRsZXQgYnVmZmVyQXR0cmlidXRlO1xuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJsZWF2ZWRCdWZmZXIgPSBnZXRJbnRlcmxlYXZlZEJ1ZmZlcigganNvbi5kYXRhLCBhdHRyaWJ1dGUuZGF0YSApO1xuXHRcdFx0XHRcdFx0YnVmZmVyQXR0cmlidXRlID0gbmV3IEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxlYXZlZEJ1ZmZlciwgYXR0cmlidXRlLml0ZW1TaXplLCBhdHRyaWJ1dGUub2Zmc2V0LCBhdHRyaWJ1dGUubm9ybWFsaXplZCApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgdHlwZWRBcnJheSA9IGdldFR5cGVkQXJyYXkoIGF0dHJpYnV0ZS50eXBlLCBhdHRyaWJ1dGUuYXJyYXkgKTtcblx0XHRcdFx0XHRcdGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHR5cGVkQXJyYXksIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm5vcm1hbGl6ZWQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlLm5hbWUgIT09IHVuZGVmaW5lZCApIGJ1ZmZlckF0dHJpYnV0ZS5uYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRcdFx0YXJyYXkucHVzaCggYnVmZmVyQXR0cmlidXRlICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlc1sga2V5IF0gPSBhcnJheTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9ycGhUYXJnZXRzUmVsYXRpdmUgPSBqc29uLmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU7XG5cblx0XHRpZiAoIG1vcnBoVGFyZ2V0c1JlbGF0aXZlICkge1xuXG5cdFx0XHRnZW9tZXRyeS5tb3JwaFRhcmdldHNSZWxhdGl2ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBncm91cHMgPSBqc29uLmRhdGEuZ3JvdXBzIHx8IGpzb24uZGF0YS5kcmF3Y2FsbHMgfHwganNvbi5kYXRhLm9mZnNldHM7XG5cblx0XHRpZiAoIGdyb3VwcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBncm91cHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzWyBpIF07XG5cblx0XHRcdFx0Z2VvbWV0cnkuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBib3VuZGluZ1NwaGVyZSA9IGpzb24uZGF0YS5ib3VuZGluZ1NwaGVyZTtcblxuXHRcdGlmICggYm91bmRpbmdTcGhlcmUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgY2VudGVyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0aWYgKCBib3VuZGluZ1NwaGVyZS5jZW50ZXIgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjZW50ZXIuZnJvbUFycmF5KCBib3VuZGluZ1NwaGVyZS5jZW50ZXIgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9IG5ldyBTcGhlcmUoIGNlbnRlciwgYm91bmRpbmdTcGhlcmUucmFkaXVzICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGpzb24ubmFtZSApIGdlb21ldHJ5Lm5hbWUgPSBqc29uLm5hbWU7XG5cdFx0aWYgKCBqc29uLnVzZXJEYXRhICkgZ2VvbWV0cnkudXNlckRhdGEgPSBqc29uLnVzZXJEYXRhO1xuXG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXG5cdH1cblxufVxuXG5jbGFzcyBPYmplY3RMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBwYXRoID0gKCB0aGlzLnBhdGggPT09ICcnICkgPyBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSggdXJsICkgOiB0aGlzLnBhdGg7XG5cdFx0dGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnJlc291cmNlUGF0aCB8fCBwYXRoO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTtcblx0XHRsb2FkZXIuc2V0UmVxdWVzdEhlYWRlciggdGhpcy5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggdGhpcy53aXRoQ3JlZGVudGlhbHMgKTtcblx0XHRsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIHRleHQgKSB7XG5cblx0XHRcdGxldCBqc29uID0gbnVsbDtcblxuXHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRqc29uID0gSlNPTi5wYXJzZSggdGV4dCApO1xuXG5cdFx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cblx0XHRcdFx0aWYgKCBvbkVycm9yICE9PSB1bmRlZmluZWQgKSBvbkVycm9yKCBlcnJvciApO1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRTpPYmplY3RMb2FkZXI6IENhblxcJ3QgcGFyc2UgJyArIHVybCArICcuJywgZXJyb3IubWVzc2FnZSApO1xuXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtZXRhZGF0YSA9IGpzb24ubWV0YWRhdGE7XG5cblx0XHRcdGlmICggbWV0YWRhdGEgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZ2VvbWV0cnknICkge1xuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmplY3RMb2FkZXI6IENhblxcJ3QgbG9hZCAnICsgdXJsICk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5wYXJzZSgganNvbiwgb25Mb2FkICk7XG5cblx0XHR9LCBvblByb2dyZXNzLCBvbkVycm9yICk7XG5cblx0fVxuXG5cdGFzeW5jIGxvYWRBc3luYyggdXJsLCBvblByb2dyZXNzICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgcGF0aCA9ICggdGhpcy5wYXRoID09PSAnJyApID8gTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoIHVybCApIDogdGhpcy5wYXRoO1xuXHRcdHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGggfHwgcGF0aDtcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTtcblx0XHRsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHRoaXMucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHRoaXMud2l0aENyZWRlbnRpYWxzICk7XG5cblx0XHRjb25zdCB0ZXh0ID0gYXdhaXQgbG9hZGVyLmxvYWRBc3luYyggdXJsLCBvblByb2dyZXNzICk7XG5cblx0XHRjb25zdCBqc29uID0gSlNPTi5wYXJzZSggdGV4dCApO1xuXG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBqc29uLm1ldGFkYXRhO1xuXG5cdFx0aWYgKCBtZXRhZGF0YSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdnZW9tZXRyeScgKSB7XG5cblx0XHRcdHRocm93IG5ldyBFcnJvciggJ1RIUkVFLk9iamVjdExvYWRlcjogQ2FuXFwndCBsb2FkICcgKyB1cmwgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBhd2FpdCBzY29wZS5wYXJzZUFzeW5jKCBqc29uICk7XG5cblx0fVxuXG5cdHBhcnNlKCBqc29uLCBvbkxvYWQgKSB7XG5cblx0XHRjb25zdCBhbmltYXRpb25zID0gdGhpcy5wYXJzZUFuaW1hdGlvbnMoIGpzb24uYW5pbWF0aW9ucyApO1xuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyc2VTaGFwZXMoIGpzb24uc2hhcGVzICk7XG5cdFx0Y29uc3QgZ2VvbWV0cmllcyA9IHRoaXMucGFyc2VHZW9tZXRyaWVzKCBqc29uLmdlb21ldHJpZXMsIHNoYXBlcyApO1xuXG5cdFx0Y29uc3QgaW1hZ2VzID0gdGhpcy5wYXJzZUltYWdlcygganNvbi5pbWFnZXMsIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0aWYgKCBvbkxvYWQgIT09IHVuZGVmaW5lZCApIG9uTG9hZCggb2JqZWN0ICk7XG5cblx0XHR9ICk7XG5cblx0XHRjb25zdCB0ZXh0dXJlcyA9IHRoaXMucGFyc2VUZXh0dXJlcygganNvbi50ZXh0dXJlcywgaW1hZ2VzICk7XG5cdFx0Y29uc3QgbWF0ZXJpYWxzID0gdGhpcy5wYXJzZU1hdGVyaWFscygganNvbi5tYXRlcmlhbHMsIHRleHR1cmVzICk7XG5cblx0XHRjb25zdCBvYmplY3QgPSB0aGlzLnBhcnNlT2JqZWN0KCBqc29uLm9iamVjdCwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLCB0ZXh0dXJlcywgYW5pbWF0aW9ucyApO1xuXHRcdGNvbnN0IHNrZWxldG9ucyA9IHRoaXMucGFyc2VTa2VsZXRvbnMoIGpzb24uc2tlbGV0b25zLCBvYmplY3QgKTtcblxuXHRcdHRoaXMuYmluZFNrZWxldG9ucyggb2JqZWN0LCBza2VsZXRvbnMgKTtcblxuXHRcdC8vXG5cblx0XHRpZiAoIG9uTG9hZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRsZXQgaGFzSW1hZ2VzID0gZmFsc2U7XG5cblx0XHRcdGZvciAoIGNvbnN0IHV1aWQgaW4gaW1hZ2VzICkge1xuXG5cdFx0XHRcdGlmICggaW1hZ2VzWyB1dWlkIF0gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICkge1xuXG5cdFx0XHRcdFx0aGFzSW1hZ2VzID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNJbWFnZXMgPT09IGZhbHNlICkgb25Mb2FkKCBvYmplY3QgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBvYmplY3Q7XG5cblx0fVxuXG5cdGFzeW5jIHBhcnNlQXN5bmMoIGpzb24gKSB7XG5cblx0XHRjb25zdCBhbmltYXRpb25zID0gdGhpcy5wYXJzZUFuaW1hdGlvbnMoIGpzb24uYW5pbWF0aW9ucyApO1xuXHRcdGNvbnN0IHNoYXBlcyA9IHRoaXMucGFyc2VTaGFwZXMoIGpzb24uc2hhcGVzICk7XG5cdFx0Y29uc3QgZ2VvbWV0cmllcyA9IHRoaXMucGFyc2VHZW9tZXRyaWVzKCBqc29uLmdlb21ldHJpZXMsIHNoYXBlcyApO1xuXG5cdFx0Y29uc3QgaW1hZ2VzID0gYXdhaXQgdGhpcy5wYXJzZUltYWdlc0FzeW5jKCBqc29uLmltYWdlcyApO1xuXG5cdFx0Y29uc3QgdGV4dHVyZXMgPSB0aGlzLnBhcnNlVGV4dHVyZXMoIGpzb24udGV4dHVyZXMsIGltYWdlcyApO1xuXHRcdGNvbnN0IG1hdGVyaWFscyA9IHRoaXMucGFyc2VNYXRlcmlhbHMoIGpzb24ubWF0ZXJpYWxzLCB0ZXh0dXJlcyApO1xuXG5cdFx0Y29uc3Qgb2JqZWN0ID0gdGhpcy5wYXJzZU9iamVjdCgganNvbi5vYmplY3QsIGdlb21ldHJpZXMsIG1hdGVyaWFscywgdGV4dHVyZXMsIGFuaW1hdGlvbnMgKTtcblx0XHRjb25zdCBza2VsZXRvbnMgPSB0aGlzLnBhcnNlU2tlbGV0b25zKCBqc29uLnNrZWxldG9ucywgb2JqZWN0ICk7XG5cblx0XHR0aGlzLmJpbmRTa2VsZXRvbnMoIG9iamVjdCwgc2tlbGV0b25zICk7XG5cblx0XHRyZXR1cm4gb2JqZWN0O1xuXG5cdH1cblxuXHRwYXJzZVNoYXBlcygganNvbiApIHtcblxuXHRcdGNvbnN0IHNoYXBlcyA9IHt9O1xuXG5cdFx0aWYgKCBqc29uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBzaGFwZSA9IG5ldyBTaGFwZSgpLmZyb21KU09OKCBqc29uWyBpIF0gKTtcblxuXHRcdFx0XHRzaGFwZXNbIHNoYXBlLnV1aWQgXSA9IHNoYXBlO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gc2hhcGVzO1xuXG5cdH1cblxuXHRwYXJzZVNrZWxldG9ucygganNvbiwgb2JqZWN0ICkge1xuXG5cdFx0Y29uc3Qgc2tlbGV0b25zID0ge307XG5cdFx0Y29uc3QgYm9uZXMgPSB7fTtcblxuXHRcdC8vIGdlbmVyYXRlIGJvbmUgbG9va3VwIHRhYmxlXG5cblx0XHRvYmplY3QudHJhdmVyc2UoIGZ1bmN0aW9uICggY2hpbGQgKSB7XG5cblx0XHRcdGlmICggY2hpbGQuaXNCb25lICkgYm9uZXNbIGNoaWxkLnV1aWQgXSA9IGNoaWxkO1xuXG5cdFx0fSApO1xuXG5cdFx0Ly8gY3JlYXRlIHNrZWxldG9uc1xuXG5cdFx0aWYgKCBqc29uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpLmZyb21KU09OKCBqc29uWyBpIF0sIGJvbmVzICk7XG5cblx0XHRcdFx0c2tlbGV0b25zWyBza2VsZXRvbi51dWlkIF0gPSBza2VsZXRvbjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNrZWxldG9ucztcblxuXHR9XG5cblx0cGFyc2VHZW9tZXRyaWVzKCBqc29uLCBzaGFwZXMgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyaWVzID0ge307XG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgYnVmZmVyR2VvbWV0cnlMb2FkZXIgPSBuZXcgQnVmZmVyR2VvbWV0cnlMb2FkZXIoKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGxldCBnZW9tZXRyeTtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGpzb25bIGkgXTtcblxuXHRcdFx0XHRzd2l0Y2ggKCBkYXRhLnR5cGUgKSB7XG5cblx0XHRcdFx0XHRjYXNlICdCdWZmZXJHZW9tZXRyeSc6XG5cdFx0XHRcdFx0Y2FzZSAnSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnknOlxuXG5cdFx0XHRcdFx0XHRnZW9tZXRyeSA9IGJ1ZmZlckdlb21ldHJ5TG9hZGVyLnBhcnNlKCBkYXRhICk7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAnR2VvbWV0cnknOlxuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBUaGUgbGVnYWN5IEdlb21ldHJ5IHR5cGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nICk7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdFx0aWYgKCBkYXRhLnR5cGUgaW4gR2VvbWV0cmllcyApIHtcblxuXHRcdFx0XHRcdFx0XHRnZW9tZXRyeSA9IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdLmZyb21KU09OKCBkYXRhLCBzaGFwZXMgKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oIGBUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgXCIkeyBkYXRhLnR5cGUgfVwiYCApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdlb21ldHJ5LnV1aWQgPSBkYXRhLnV1aWQ7XG5cblx0XHRcdFx0aWYgKCBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCApIGdlb21ldHJ5Lm5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRcdGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSA9PT0gdHJ1ZSAmJiBkYXRhLnVzZXJEYXRhICE9PSB1bmRlZmluZWQgKSBnZW9tZXRyeS51c2VyRGF0YSA9IGRhdGEudXNlckRhdGE7XG5cblx0XHRcdFx0Z2VvbWV0cmllc1sgZGF0YS51dWlkIF0gPSBnZW9tZXRyeTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdlb21ldHJpZXM7XG5cblx0fVxuXG5cdHBhcnNlTWF0ZXJpYWxzKCBqc29uLCB0ZXh0dXJlcyApIHtcblxuXHRcdGNvbnN0IGNhY2hlID0ge307IC8vIE11bHRpTWF0ZXJpYWxcblx0XHRjb25zdCBtYXRlcmlhbHMgPSB7fTtcblxuXHRcdGlmICgganNvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBsb2FkZXIgPSBuZXcgTWF0ZXJpYWxMb2FkZXIoKTtcblx0XHRcdGxvYWRlci5zZXRUZXh0dXJlcyggdGV4dHVyZXMgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBqc29uWyBpIF07XG5cblx0XHRcdFx0aWYgKCBkYXRhLnR5cGUgPT09ICdNdWx0aU1hdGVyaWFsJyApIHtcblxuXHRcdFx0XHRcdC8vIERlcHJlY2F0ZWRcblxuXHRcdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBkYXRhLm1hdGVyaWFscy5sZW5ndGg7IGogKysgKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gZGF0YS5tYXRlcmlhbHNbIGogXTtcblxuXHRcdFx0XHRcdFx0aWYgKCBjYWNoZVsgbWF0ZXJpYWwudXVpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGVbIG1hdGVyaWFsLnV1aWQgXSA9IGxvYWRlci5wYXJzZSggbWF0ZXJpYWwgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcnJheS5wdXNoKCBjYWNoZVsgbWF0ZXJpYWwudXVpZCBdICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtYXRlcmlhbHNbIGRhdGEudXVpZCBdID0gYXJyYXk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlmICggY2FjaGVbIGRhdGEudXVpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdGNhY2hlWyBkYXRhLnV1aWQgXSA9IGxvYWRlci5wYXJzZSggZGF0YSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWF0ZXJpYWxzWyBkYXRhLnV1aWQgXSA9IGNhY2hlWyBkYXRhLnV1aWQgXTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRlcmlhbHM7XG5cblx0fVxuXG5cdHBhcnNlQW5pbWF0aW9ucygganNvbiApIHtcblxuXHRcdGNvbnN0IGFuaW1hdGlvbnMgPSB7fTtcblxuXHRcdGlmICgganNvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBkYXRhID0ganNvblsgaSBdO1xuXG5cdFx0XHRcdGNvbnN0IGNsaXAgPSBBbmltYXRpb25DbGlwLnBhcnNlKCBkYXRhICk7XG5cblx0XHRcdFx0YW5pbWF0aW9uc1sgY2xpcC51dWlkIF0gPSBjbGlwO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5pbWF0aW9ucztcblxuXHR9XG5cblx0cGFyc2VJbWFnZXMoIGpzb24sIG9uTG9hZCApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBpbWFnZXMgPSB7fTtcblxuXHRcdGxldCBsb2FkZXI7XG5cblx0XHRmdW5jdGlvbiBsb2FkSW1hZ2UoIHVybCApIHtcblxuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCApO1xuXG5cdFx0XHRyZXR1cm4gbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHRcdH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdFx0fSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZGVzZXJpYWxpemVJbWFnZSggaW1hZ2UgKSB7XG5cblx0XHRcdGlmICggdHlwZW9mIGltYWdlID09PSAnc3RyaW5nJyApIHtcblxuXHRcdFx0XHRjb25zdCB1cmwgPSBpbWFnZTtcblxuXHRcdFx0XHRjb25zdCBwYXRoID0gL14oXFwvXFwvKXwoW2Etel0rOihcXC9cXC8pPykvaS50ZXN0KCB1cmwgKSA/IHVybCA6IHNjb3BlLnJlc291cmNlUGF0aCArIHVybDtcblxuXHRcdFx0XHRyZXR1cm4gbG9hZEltYWdlKCBwYXRoICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBpbWFnZS5kYXRhICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRhdGE6IGdldFR5cGVkQXJyYXkoIGltYWdlLnR5cGUsIGltYWdlLmRhdGEgKSxcblx0XHRcdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCAmJiBqc29uLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdGNvbnN0IG1hbmFnZXIgPSBuZXcgTG9hZGluZ01hbmFnZXIoIG9uTG9hZCApO1xuXG5cdFx0XHRsb2FkZXIgPSBuZXcgSW1hZ2VMb2FkZXIoIG1hbmFnZXIgKTtcblx0XHRcdGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGlsID0ganNvbi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBpbWFnZSA9IGpzb25bIGkgXTtcblx0XHRcdFx0Y29uc3QgdXJsID0gaW1hZ2UudXJsO1xuXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdXJsICkgKSB7XG5cblx0XHRcdFx0XHQvLyBsb2FkIGFycmF5IG9mIGltYWdlcyBlLmcgQ3ViZVRleHR1cmVcblxuXHRcdFx0XHRcdGltYWdlc1sgaW1hZ2UudXVpZCBdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIGpsID0gdXJsLmxlbmd0aDsgaiA8IGpsOyBqICsrICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VXJsID0gdXJsWyBqIF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gZGVzZXJpYWxpemVJbWFnZSggY3VycmVudFVybCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggZGVzZXJpYWxpemVkSW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0ucHVzaCggZGVzZXJpYWxpemVkSW1hZ2UgKTtcblxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgYXJyYXkgb2YgZGF0YSB0ZXh0dXJlcyBmb3IgY3ViZSB0ZXh0dXJlc1xuXG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0ucHVzaCggbmV3IERhdGFUZXh0dXJlKCBkZXNlcmlhbGl6ZWRJbWFnZS5kYXRhLCBkZXNlcmlhbGl6ZWRJbWFnZS53aWR0aCwgZGVzZXJpYWxpemVkSW1hZ2UuaGVpZ2h0ICkgKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gbG9hZCBzaW5nbGUgaW1hZ2VcblxuXHRcdFx0XHRcdGNvbnN0IGRlc2VyaWFsaXplZEltYWdlID0gZGVzZXJpYWxpemVJbWFnZSggaW1hZ2UudXJsICk7XG5cblx0XHRcdFx0XHRpZiAoIGRlc2VyaWFsaXplZEltYWdlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFx0XHRpbWFnZXNbIGltYWdlLnV1aWQgXSA9IGRlc2VyaWFsaXplZEltYWdlO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGltYWdlcztcblxuXHR9XG5cblx0YXN5bmMgcGFyc2VJbWFnZXNBc3luYygganNvbiApIHtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBpbWFnZXMgPSB7fTtcblxuXHRcdGxldCBsb2FkZXI7XG5cblx0XHRhc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZUltYWdlKCBpbWFnZSApIHtcblxuXHRcdFx0aWYgKCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnICkge1xuXG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlO1xuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSAvXihcXC9cXC8pfChbYS16XSs6KFxcL1xcLyk/KS9pLnRlc3QoIHVybCApID8gdXJsIDogc2NvcGUucmVzb3VyY2VQYXRoICsgdXJsO1xuXG5cdFx0XHRcdHJldHVybiBhd2FpdCBsb2FkZXIubG9hZEFzeW5jKCBwYXRoICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBpbWFnZS5kYXRhICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRhdGE6IGdldFR5cGVkQXJyYXkoIGltYWdlLnR5cGUsIGltYWdlLmRhdGEgKSxcblx0XHRcdFx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIGpzb24gIT09IHVuZGVmaW5lZCAmJiBqc29uLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7XG5cdFx0XHRsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBpbCA9IGpzb24ubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgaW1hZ2UgPSBqc29uWyBpIF07XG5cdFx0XHRcdGNvbnN0IHVybCA9IGltYWdlLnVybDtcblxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHVybCApICkge1xuXG5cdFx0XHRcdFx0Ly8gbG9hZCBhcnJheSBvZiBpbWFnZXMgZS5nIEN1YmVUZXh0dXJlXG5cblx0XHRcdFx0XHRpbWFnZXNbIGltYWdlLnV1aWQgXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBqbCA9IHVybC5sZW5ndGg7IGogPCBqbDsgaiArKyApIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFVybCA9IHVybFsgaiBdO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZXNlcmlhbGl6ZWRJbWFnZSA9IGF3YWl0IGRlc2VyaWFsaXplSW1hZ2UoIGN1cnJlbnRVcmwgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBkZXNlcmlhbGl6ZWRJbWFnZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIGRlc2VyaWFsaXplZEltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGltYWdlc1sgaW1hZ2UudXVpZCBdLnB1c2goIGRlc2VyaWFsaXplZEltYWdlICk7XG5cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIGFycmF5IG9mIGRhdGEgdGV4dHVyZXMgZm9yIGN1YmUgdGV4dHVyZXNcblxuXHRcdFx0XHRcdFx0XHRcdGltYWdlc1sgaW1hZ2UudXVpZCBdLnB1c2goIG5ldyBEYXRhVGV4dHVyZSggZGVzZXJpYWxpemVkSW1hZ2UuZGF0YSwgZGVzZXJpYWxpemVkSW1hZ2Uud2lkdGgsIGRlc2VyaWFsaXplZEltYWdlLmhlaWdodCApICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGxvYWQgc2luZ2xlIGltYWdlXG5cblx0XHRcdFx0XHRjb25zdCBkZXNlcmlhbGl6ZWRJbWFnZSA9IGF3YWl0IGRlc2VyaWFsaXplSW1hZ2UoIGltYWdlLnVybCApO1xuXG5cdFx0XHRcdFx0aWYgKCBkZXNlcmlhbGl6ZWRJbWFnZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0aW1hZ2VzWyBpbWFnZS51dWlkIF0gPSBkZXNlcmlhbGl6ZWRJbWFnZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBpbWFnZXM7XG5cblx0fVxuXG5cdHBhcnNlVGV4dHVyZXMoIGpzb24sIGltYWdlcyApIHtcblxuXHRcdGZ1bmN0aW9uIHBhcnNlQ29uc3RhbnQoIHZhbHVlLCB0eXBlICkge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgKSByZXR1cm4gdmFsdWU7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uJywgdmFsdWUgKTtcblxuXHRcdFx0cmV0dXJuIHR5cGVbIHZhbHVlIF07XG5cblx0XHR9XG5cblx0XHRjb25zdCB0ZXh0dXJlcyA9IHt9O1xuXG5cdFx0aWYgKCBqc29uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBkYXRhID0ganNvblsgaSBdO1xuXG5cdFx0XHRcdGlmICggZGF0YS5pbWFnZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBcImltYWdlXCIgc3BlY2lmaWVkIGZvcicsIGRhdGEudXVpZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGltYWdlc1sgZGF0YS5pbWFnZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBpbWFnZScsIGRhdGEuaW1hZ2UgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHRleHR1cmU7XG5cdFx0XHRcdGNvbnN0IGltYWdlID0gaW1hZ2VzWyBkYXRhLmltYWdlIF07XG5cblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBpbWFnZSApICkge1xuXG5cdFx0XHRcdFx0dGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSggaW1hZ2UgKTtcblxuXHRcdFx0XHRcdGlmICggaW1hZ2UubGVuZ3RoID09PSA2ICkgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlmICggaW1hZ2UgJiYgaW1hZ2UuZGF0YSApIHtcblxuXHRcdFx0XHRcdFx0dGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZSggaW1hZ2UuZGF0YSwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dGV4dHVyZSA9IG5ldyBUZXh0dXJlKCBpbWFnZSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBpbWFnZSApIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOyAvLyB0ZXh0dXJlcyBjYW4gaGF2ZSB1bmRlZmluZWQgaW1hZ2UgZGF0YVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0ZXh0dXJlLnV1aWQgPSBkYXRhLnV1aWQ7XG5cblx0XHRcdFx0aWYgKCBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCApIHRleHR1cmUubmFtZSA9IGRhdGEubmFtZTtcblxuXHRcdFx0XHRpZiAoIGRhdGEubWFwcGluZyAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5tYXBwaW5nID0gcGFyc2VDb25zdGFudCggZGF0YS5tYXBwaW5nLCBURVhUVVJFX01BUFBJTkcgKTtcblxuXHRcdFx0XHRpZiAoIGRhdGEub2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm9mZnNldC5mcm9tQXJyYXkoIGRhdGEub2Zmc2V0ICk7XG5cdFx0XHRcdGlmICggZGF0YS5yZXBlYXQgIT09IHVuZGVmaW5lZCApIHRleHR1cmUucmVwZWF0LmZyb21BcnJheSggZGF0YS5yZXBlYXQgKTtcblx0XHRcdFx0aWYgKCBkYXRhLmNlbnRlciAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5jZW50ZXIuZnJvbUFycmF5KCBkYXRhLmNlbnRlciApO1xuXHRcdFx0XHRpZiAoIGRhdGEucm90YXRpb24gIT09IHVuZGVmaW5lZCApIHRleHR1cmUucm90YXRpb24gPSBkYXRhLnJvdGF0aW9uO1xuXG5cdFx0XHRcdGlmICggZGF0YS53cmFwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLndyYXBTID0gcGFyc2VDb25zdGFudCggZGF0YS53cmFwWyAwIF0sIFRFWFRVUkVfV1JBUFBJTkcgKTtcblx0XHRcdFx0XHR0ZXh0dXJlLndyYXBUID0gcGFyc2VDb25zdGFudCggZGF0YS53cmFwWyAxIF0sIFRFWFRVUkVfV1JBUFBJTkcgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBkYXRhLmZvcm1hdCAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5mb3JtYXQgPSBkYXRhLmZvcm1hdDtcblx0XHRcdFx0aWYgKCBkYXRhLnR5cGUgIT09IHVuZGVmaW5lZCApIHRleHR1cmUudHlwZSA9IGRhdGEudHlwZTtcblx0XHRcdFx0aWYgKCBkYXRhLmVuY29kaW5nICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmVuY29kaW5nID0gZGF0YS5lbmNvZGluZztcblxuXHRcdFx0XHRpZiAoIGRhdGEubWluRmlsdGVyICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm1pbkZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRhdGEubWluRmlsdGVyLCBURVhUVVJFX0ZJTFRFUiApO1xuXHRcdFx0XHRpZiAoIGRhdGEubWFnRmlsdGVyICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm1hZ0ZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRhdGEubWFnRmlsdGVyLCBURVhUVVJFX0ZJTFRFUiApO1xuXHRcdFx0XHRpZiAoIGRhdGEuYW5pc290cm9weSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5hbmlzb3Ryb3B5ID0gZGF0YS5hbmlzb3Ryb3B5O1xuXG5cdFx0XHRcdGlmICggZGF0YS5mbGlwWSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5mbGlwWSA9IGRhdGEuZmxpcFk7XG5cblx0XHRcdFx0aWYgKCBkYXRhLnByZW11bHRpcGx5QWxwaGEgIT09IHVuZGVmaW5lZCApIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IGRhdGEucHJlbXVsdGlwbHlBbHBoYTtcblx0XHRcdFx0aWYgKCBkYXRhLnVucGFja0FsaWdubWVudCAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgPSBkYXRhLnVucGFja0FsaWdubWVudDtcblxuXHRcdFx0XHRpZiAoIGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCApIHRleHR1cmUudXNlckRhdGEgPSBkYXRhLnVzZXJEYXRhO1xuXG5cdFx0XHRcdHRleHR1cmVzWyBkYXRhLnV1aWQgXSA9IHRleHR1cmU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0dXJlcztcblxuXHR9XG5cblx0cGFyc2VPYmplY3QoIGRhdGEsIGdlb21ldHJpZXMsIG1hdGVyaWFscywgdGV4dHVyZXMsIGFuaW1hdGlvbnMgKSB7XG5cblx0XHRsZXQgb2JqZWN0O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0R2VvbWV0cnkoIG5hbWUgKSB7XG5cblx0XHRcdGlmICggZ2VvbWV0cmllc1sgbmFtZSBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgZ2VvbWV0cnknLCBuYW1lICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGdlb21ldHJpZXNbIG5hbWUgXTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldE1hdGVyaWFsKCBuYW1lICkge1xuXG5cdFx0XHRpZiAoIG5hbWUgPT09IHVuZGVmaW5lZCApIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXG5cdFx0XHRcdGNvbnN0IGFycmF5ID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgdXVpZCA9IG5hbWVbIGkgXTtcblxuXHRcdFx0XHRcdGlmICggbWF0ZXJpYWxzWyB1dWlkIF0gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwnLCB1dWlkICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcnJheS5wdXNoKCBtYXRlcmlhbHNbIHV1aWQgXSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYXJyYXk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRlcmlhbHNbIG5hbWUgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsJywgbmFtZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRlcmlhbHNbIG5hbWUgXTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFRleHR1cmUoIHV1aWQgKSB7XG5cblx0XHRcdGlmICggdGV4dHVyZXNbIHV1aWQgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUnLCB1dWlkICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRleHR1cmVzWyB1dWlkIF07XG5cblx0XHR9XG5cblx0XHRsZXQgZ2VvbWV0cnksIG1hdGVyaWFsO1xuXG5cdFx0c3dpdGNoICggZGF0YS50eXBlICkge1xuXG5cdFx0XHRjYXNlICdTY2VuZSc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFNjZW5lKCk7XG5cblx0XHRcdFx0aWYgKCBkYXRhLmJhY2tncm91bmQgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdGlmICggTnVtYmVyLmlzSW50ZWdlciggZGF0YS5iYWNrZ3JvdW5kICkgKSB7XG5cblx0XHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKCBkYXRhLmJhY2tncm91bmQgKTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdG9iamVjdC5iYWNrZ3JvdW5kID0gZ2V0VGV4dHVyZSggZGF0YS5iYWNrZ3JvdW5kICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZGF0YS5lbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0b2JqZWN0LmVudmlyb25tZW50ID0gZ2V0VGV4dHVyZSggZGF0YS5lbnZpcm9ubWVudCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGRhdGEuZm9nICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGRhdGEuZm9nLnR5cGUgPT09ICdGb2cnICkge1xuXG5cdFx0XHRcdFx0XHRvYmplY3QuZm9nID0gbmV3IEZvZyggZGF0YS5mb2cuY29sb3IsIGRhdGEuZm9nLm5lYXIsIGRhdGEuZm9nLmZhciApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggZGF0YS5mb2cudHlwZSA9PT0gJ0ZvZ0V4cDInICkge1xuXG5cdFx0XHRcdFx0XHRvYmplY3QuZm9nID0gbmV3IEZvZ0V4cDIoIGRhdGEuZm9nLmNvbG9yLCBkYXRhLmZvZy5kZW5zaXR5ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQZXJzcGVjdGl2ZUNhbWVyYSc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBkYXRhLmZvdiwgZGF0YS5hc3BlY3QsIGRhdGEubmVhciwgZGF0YS5mYXIgKTtcblxuXHRcdFx0XHRpZiAoIGRhdGEuZm9jdXMgIT09IHVuZGVmaW5lZCApIG9iamVjdC5mb2N1cyA9IGRhdGEuZm9jdXM7XG5cdFx0XHRcdGlmICggZGF0YS56b29tICE9PSB1bmRlZmluZWQgKSBvYmplY3Quem9vbSA9IGRhdGEuem9vbTtcblx0XHRcdFx0aWYgKCBkYXRhLmZpbG1HYXVnZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmZpbG1HYXVnZSA9IGRhdGEuZmlsbUdhdWdlO1xuXHRcdFx0XHRpZiAoIGRhdGEuZmlsbU9mZnNldCAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmZpbG1PZmZzZXQgPSBkYXRhLmZpbG1PZmZzZXQ7XG5cdFx0XHRcdGlmICggZGF0YS52aWV3ICE9PSB1bmRlZmluZWQgKSBvYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oIHt9LCBkYXRhLnZpZXcgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnT3J0aG9ncmFwaGljQ2FtZXJhJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCBkYXRhLmxlZnQsIGRhdGEucmlnaHQsIGRhdGEudG9wLCBkYXRhLmJvdHRvbSwgZGF0YS5uZWFyLCBkYXRhLmZhciApO1xuXG5cdFx0XHRcdGlmICggZGF0YS56b29tICE9PSB1bmRlZmluZWQgKSBvYmplY3Quem9vbSA9IGRhdGEuem9vbTtcblx0XHRcdFx0aWYgKCBkYXRhLnZpZXcgIT09IHVuZGVmaW5lZCApIG9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIGRhdGEudmlldyApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdBbWJpZW50TGlnaHQnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBBbWJpZW50TGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0RpcmVjdGlvbmFsTGlnaHQnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KCBkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQb2ludExpZ2h0JzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgUG9pbnRMaWdodCggZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHksIGRhdGEuZGlzdGFuY2UsIGRhdGEuZGVjYXkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUmVjdEFyZWFMaWdodCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFJlY3RBcmVhTGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5LCBkYXRhLndpZHRoLCBkYXRhLmhlaWdodCApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdTcG90TGlnaHQnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTcG90TGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5LCBkYXRhLmRpc3RhbmNlLCBkYXRhLmFuZ2xlLCBkYXRhLnBlbnVtYnJhLCBkYXRhLmRlY2F5ICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0hlbWlzcGhlcmVMaWdodCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IEhlbWlzcGhlcmVMaWdodCggZGF0YS5jb2xvciwgZGF0YS5ncm91bmRDb2xvciwgZGF0YS5pbnRlbnNpdHkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnTGlnaHRQcm9iZSc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpZ2h0UHJvYmUoKS5mcm9tSlNPTiggZGF0YSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdTa2lubmVkTWVzaCc6XG5cblx0XHRcdFx0Z2VvbWV0cnkgPSBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApO1xuXHRcdFx0IFx0bWF0ZXJpYWwgPSBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApO1xuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTa2lubmVkTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHRcdFx0aWYgKCBkYXRhLmJpbmRNb2RlICE9PSB1bmRlZmluZWQgKSBvYmplY3QuYmluZE1vZGUgPSBkYXRhLmJpbmRNb2RlO1xuXHRcdFx0XHRpZiAoIGRhdGEuYmluZE1hdHJpeCAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmJpbmRNYXRyaXguZnJvbUFycmF5KCBkYXRhLmJpbmRNYXRyaXggKTtcblx0XHRcdFx0aWYgKCBkYXRhLnNrZWxldG9uICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2tlbGV0b24gPSBkYXRhLnNrZWxldG9uO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdNZXNoJzpcblxuXHRcdFx0XHRnZW9tZXRyeSA9IGdldEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICk7XG5cdFx0XHRcdG1hdGVyaWFsID0gZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKTtcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0luc3RhbmNlZE1lc2gnOlxuXG5cdFx0XHRcdGdlb21ldHJ5ID0gZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKTtcblx0XHRcdFx0bWF0ZXJpYWwgPSBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApO1xuXHRcdFx0XHRjb25zdCBjb3VudCA9IGRhdGEuY291bnQ7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTWF0cml4ID0gZGF0YS5pbnN0YW5jZU1hdHJpeDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VDb2xvciA9IGRhdGEuaW5zdGFuY2VDb2xvcjtcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgSW5zdGFuY2VkTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsLCBjb3VudCApO1xuXHRcdFx0XHRvYmplY3QuaW5zdGFuY2VNYXRyaXggPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKCBuZXcgRmxvYXQzMkFycmF5KCBpbnN0YW5jZU1hdHJpeC5hcnJheSApLCAxNiApO1xuXHRcdFx0XHRpZiAoIGluc3RhbmNlQ29sb3IgIT09IHVuZGVmaW5lZCApIG9iamVjdC5pbnN0YW5jZUNvbG9yID0gbmV3IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSggbmV3IEZsb2F0MzJBcnJheSggaW5zdGFuY2VDb2xvci5hcnJheSApLCBpbnN0YW5jZUNvbG9yLml0ZW1TaXplICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xPRCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IExPRCgpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaW5lJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgTGluZSggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdMaW5lTG9vcCc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpbmVMb29wKCBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApLCBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApICk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ0xpbmVTZWdtZW50cyc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IExpbmVTZWdtZW50cyggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQb2ludENsb3VkJzpcblx0XHRcdGNhc2UgJ1BvaW50cyc6XG5cblx0XHRcdFx0b2JqZWN0ID0gbmV3IFBvaW50cyggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdTcHJpdGUnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBTcHJpdGUoIGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICkgKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnR3JvdXAnOlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBHcm91cCgpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdCb25lJzpcblxuXHRcdFx0XHRvYmplY3QgPSBuZXcgQm9uZSgpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdG9iamVjdCA9IG5ldyBPYmplY3QzRCgpO1xuXG5cdFx0fVxuXG5cdFx0b2JqZWN0LnV1aWQgPSBkYXRhLnV1aWQ7XG5cblx0XHRpZiAoIGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0Lm5hbWUgPSBkYXRhLm5hbWU7XG5cblx0XHRpZiAoIGRhdGEubWF0cml4ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdG9iamVjdC5tYXRyaXguZnJvbUFycmF5KCBkYXRhLm1hdHJpeCApO1xuXG5cdFx0XHRpZiAoIGRhdGEubWF0cml4QXV0b1VwZGF0ZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0Lm1hdHJpeEF1dG9VcGRhdGUgPSBkYXRhLm1hdHJpeEF1dG9VcGRhdGU7XG5cdFx0XHRpZiAoIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlICkgb2JqZWN0Lm1hdHJpeC5kZWNvbXBvc2UoIG9iamVjdC5wb3NpdGlvbiwgb2JqZWN0LnF1YXRlcm5pb24sIG9iamVjdC5zY2FsZSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBkYXRhLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSBvYmplY3QucG9zaXRpb24uZnJvbUFycmF5KCBkYXRhLnBvc2l0aW9uICk7XG5cdFx0XHRpZiAoIGRhdGEucm90YXRpb24gIT09IHVuZGVmaW5lZCApIG9iamVjdC5yb3RhdGlvbi5mcm9tQXJyYXkoIGRhdGEucm90YXRpb24gKTtcblx0XHRcdGlmICggZGF0YS5xdWF0ZXJuaW9uICE9PSB1bmRlZmluZWQgKSBvYmplY3QucXVhdGVybmlvbi5mcm9tQXJyYXkoIGRhdGEucXVhdGVybmlvbiApO1xuXHRcdFx0aWYgKCBkYXRhLnNjYWxlICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2NhbGUuZnJvbUFycmF5KCBkYXRhLnNjYWxlICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIGRhdGEuY2FzdFNoYWRvdyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmNhc3RTaGFkb3cgPSBkYXRhLmNhc3RTaGFkb3c7XG5cdFx0aWYgKCBkYXRhLnJlY2VpdmVTaGFkb3cgIT09IHVuZGVmaW5lZCApIG9iamVjdC5yZWNlaXZlU2hhZG93ID0gZGF0YS5yZWNlaXZlU2hhZG93O1xuXG5cdFx0aWYgKCBkYXRhLnNoYWRvdyApIHtcblxuXHRcdFx0aWYgKCBkYXRhLnNoYWRvdy5iaWFzICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93LmJpYXMgPSBkYXRhLnNoYWRvdy5iaWFzO1xuXHRcdFx0aWYgKCBkYXRhLnNoYWRvdy5ub3JtYWxCaWFzICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93Lm5vcm1hbEJpYXMgPSBkYXRhLnNoYWRvdy5ub3JtYWxCaWFzO1xuXHRcdFx0aWYgKCBkYXRhLnNoYWRvdy5yYWRpdXMgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zaGFkb3cucmFkaXVzID0gZGF0YS5zaGFkb3cucmFkaXVzO1xuXHRcdFx0aWYgKCBkYXRhLnNoYWRvdy5tYXBTaXplICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KCBkYXRhLnNoYWRvdy5tYXBTaXplICk7XG5cdFx0XHRpZiAoIGRhdGEuc2hhZG93LmNhbWVyYSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnNoYWRvdy5jYW1lcmEgPSB0aGlzLnBhcnNlT2JqZWN0KCBkYXRhLnNoYWRvdy5jYW1lcmEgKTtcblxuXHRcdH1cblxuXHRcdGlmICggZGF0YS52aXNpYmxlICE9PSB1bmRlZmluZWQgKSBvYmplY3QudmlzaWJsZSA9IGRhdGEudmlzaWJsZTtcblx0XHRpZiAoIGRhdGEuZnJ1c3R1bUN1bGxlZCAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmZydXN0dW1DdWxsZWQgPSBkYXRhLmZydXN0dW1DdWxsZWQ7XG5cdFx0aWYgKCBkYXRhLnJlbmRlck9yZGVyICE9PSB1bmRlZmluZWQgKSBvYmplY3QucmVuZGVyT3JkZXIgPSBkYXRhLnJlbmRlck9yZGVyO1xuXHRcdGlmICggZGF0YS51c2VyRGF0YSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnVzZXJEYXRhID0gZGF0YS51c2VyRGF0YTtcblx0XHRpZiAoIGRhdGEubGF5ZXJzICE9PSB1bmRlZmluZWQgKSBvYmplY3QubGF5ZXJzLm1hc2sgPSBkYXRhLmxheWVycztcblxuXHRcdGlmICggZGF0YS5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRvYmplY3QuYWRkKCB0aGlzLnBhcnNlT2JqZWN0KCBjaGlsZHJlblsgaSBdLCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMsIHRleHR1cmVzLCBhbmltYXRpb25zICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhLmFuaW1hdGlvbnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3Qgb2JqZWN0QW5pbWF0aW9ucyA9IGRhdGEuYW5pbWF0aW9ucztcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgb2JqZWN0QW5pbWF0aW9ucy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdXVpZCA9IG9iamVjdEFuaW1hdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRvYmplY3QuYW5pbWF0aW9ucy5wdXNoKCBhbmltYXRpb25zWyB1dWlkIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhLnR5cGUgPT09ICdMT0QnICkge1xuXG5cdFx0XHRpZiAoIGRhdGEuYXV0b1VwZGF0ZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmF1dG9VcGRhdGUgPSBkYXRhLmF1dG9VcGRhdGU7XG5cblx0XHRcdGNvbnN0IGxldmVscyA9IGRhdGEubGV2ZWxzO1xuXG5cdFx0XHRmb3IgKCBsZXQgbCA9IDA7IGwgPCBsZXZlbHMubGVuZ3RoOyBsICsrICkge1xuXG5cdFx0XHRcdGNvbnN0IGxldmVsID0gbGV2ZWxzWyBsIF07XG5cdFx0XHRcdGNvbnN0IGNoaWxkID0gb2JqZWN0LmdldE9iamVjdEJ5UHJvcGVydHkoICd1dWlkJywgbGV2ZWwub2JqZWN0ICk7XG5cblx0XHRcdFx0aWYgKCBjaGlsZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0b2JqZWN0LmFkZExldmVsKCBjaGlsZCwgbGV2ZWwuZGlzdGFuY2UgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBvYmplY3Q7XG5cblx0fVxuXG5cdGJpbmRTa2VsZXRvbnMoIG9iamVjdCwgc2tlbGV0b25zICkge1xuXG5cdFx0aWYgKCBPYmplY3Qua2V5cyggc2tlbGV0b25zICkubGVuZ3RoID09PSAwICkgcmV0dXJuO1xuXG5cdFx0b2JqZWN0LnRyYXZlcnNlKCBmdW5jdGlvbiAoIGNoaWxkICkge1xuXG5cdFx0XHRpZiAoIGNoaWxkLmlzU2tpbm5lZE1lc2ggPT09IHRydWUgJiYgY2hpbGQuc2tlbGV0b24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IHNrZWxldG9uc1sgY2hpbGQuc2tlbGV0b24gXTtcblxuXHRcdFx0XHRpZiAoIHNrZWxldG9uID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IE5vIHNrZWxldG9uIGZvdW5kIHdpdGggVVVJRDonLCBjaGlsZC5za2VsZXRvbiApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjaGlsZC5iaW5kKCBza2VsZXRvbiwgY2hpbGQuYmluZE1hdHJpeCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fSApO1xuXG5cdH1cblxuXHQvKiBERVBSRUNBVEVEICovXG5cblx0c2V0VGV4dHVyZVBhdGgoIHZhbHVlICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRSZXNvdXJjZVBhdGgoKS4nICk7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VQYXRoKCB2YWx1ZSApO1xuXG5cdH1cblxufVxuXG5jb25zdCBURVhUVVJFX01BUFBJTkcgPSB7XG5cdFVWTWFwcGluZzogVVZNYXBwaW5nLFxuXHRDdWJlUmVmbGVjdGlvbk1hcHBpbmc6IEN1YmVSZWZsZWN0aW9uTWFwcGluZyxcblx0Q3ViZVJlZnJhY3Rpb25NYXBwaW5nOiBDdWJlUmVmcmFjdGlvbk1hcHBpbmcsXG5cdEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOiBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyxcblx0RXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6IEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nLFxuXHRDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzogQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOiBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZ1xufTtcblxuY29uc3QgVEVYVFVSRV9XUkFQUElORyA9IHtcblx0UmVwZWF0V3JhcHBpbmc6IFJlcGVhdFdyYXBwaW5nLFxuXHRDbGFtcFRvRWRnZVdyYXBwaW5nOiBDbGFtcFRvRWRnZVdyYXBwaW5nLFxuXHRNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOiBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nXG59O1xuXG5jb25zdCBURVhUVVJFX0ZJTFRFUiA9IHtcblx0TmVhcmVzdEZpbHRlcjogTmVhcmVzdEZpbHRlcixcblx0TmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXI6IE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyLFxuXHROZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOiBOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyLFxuXHRMaW5lYXJGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0TGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjogTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcixcblx0TGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOiBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXJcbn07XG5cbmNsYXNzIEltYWdlQml0bWFwTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0XHRpZiAoIHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuJyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLicgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucyA9IHsgcHJlbXVsdGlwbHlBbHBoYTogJ25vbmUnIH07XG5cblx0fVxuXG5cdHNldE9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0aWYgKCB1cmwgPT09IHVuZGVmaW5lZCApIHVybCA9ICcnO1xuXG5cdFx0aWYgKCB0aGlzLnBhdGggIT09IHVuZGVmaW5lZCApIHVybCA9IHRoaXMucGF0aCArIHVybDtcblxuXHRcdHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IGNhY2hlZCA9IENhY2hlLmdldCggdXJsICk7XG5cblx0XHRpZiAoIGNhY2hlZCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggY2FjaGVkICk7XG5cblx0XHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdFx0fSwgMCApO1xuXG5cdFx0XHRyZXR1cm4gY2FjaGVkO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgZmV0Y2hPcHRpb25zID0ge307XG5cdFx0ZmV0Y2hPcHRpb25zLmNyZWRlbnRpYWxzID0gKCB0aGlzLmNyb3NzT3JpZ2luID09PSAnYW5vbnltb3VzJyApID8gJ3NhbWUtb3JpZ2luJyA6ICdpbmNsdWRlJztcblx0XHRmZXRjaE9wdGlvbnMuaGVhZGVycyA9IHRoaXMucmVxdWVzdEhlYWRlcjtcblxuXHRcdGZldGNoKCB1cmwsIGZldGNoT3B0aW9ucyApLnRoZW4oIGZ1bmN0aW9uICggcmVzICkge1xuXG5cdFx0XHRyZXR1cm4gcmVzLmJsb2IoKTtcblxuXHRcdH0gKS50aGVuKCBmdW5jdGlvbiAoIGJsb2IgKSB7XG5cblx0XHRcdHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCggYmxvYiwgT2JqZWN0LmFzc2lnbiggc2NvcGUub3B0aW9ucywgeyBjb2xvclNwYWNlQ29udmVyc2lvbjogJ25vbmUnIH0gKSApO1xuXG5cdFx0fSApLnRoZW4oIGZ1bmN0aW9uICggaW1hZ2VCaXRtYXAgKSB7XG5cblx0XHRcdENhY2hlLmFkZCggdXJsLCBpbWFnZUJpdG1hcCApO1xuXG5cdFx0XHRpZiAoIG9uTG9hZCApIG9uTG9hZCggaW1hZ2VCaXRtYXAgKTtcblxuXHRcdFx0c2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTtcblxuXHRcdH0gKS5jYXRjaCggZnVuY3Rpb24gKCBlICkge1xuXG5cdFx0XHRpZiAoIG9uRXJyb3IgKSBvbkVycm9yKCBlICk7XG5cblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTtcblx0XHRcdHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7XG5cblx0XHR9ICk7XG5cblx0XHRzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7XG5cblx0fVxuXG59XG5cbkltYWdlQml0bWFwTG9hZGVyLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyID0gdHJ1ZTtcblxubGV0IF9jb250ZXh0O1xuXG5jb25zdCBBdWRpb0NvbnRleHQgPSB7XG5cblx0Z2V0Q29udGV4dDogZnVuY3Rpb24gKCkge1xuXG5cdFx0aWYgKCBfY29udGV4dCA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfY29udGV4dCA9IG5ldyAoIHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCApKCk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX2NvbnRleHQ7XG5cblx0fSxcblxuXHRzZXRDb250ZXh0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0X2NvbnRleHQgPSB2YWx1ZTtcblxuXHR9XG5cbn07XG5cbmNsYXNzIEF1ZGlvTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcblxuXHRjb25zdHJ1Y3RvciggbWFuYWdlciApIHtcblxuXHRcdHN1cGVyKCBtYW5hZ2VyICk7XG5cblx0fVxuXG5cdGxvYWQoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkge1xuXG5cdFx0Y29uc3Qgc2NvcGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTtcblx0XHRsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoIHRoaXMucmVxdWVzdEhlYWRlciApO1xuXHRcdGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHRoaXMud2l0aENyZWRlbnRpYWxzICk7XG5cdFx0bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBidWZmZXIgKSB7XG5cblx0XHRcdHRyeSB7XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnVmZmVyLiBUaGUgYGRlY29kZUF1ZGlvRGF0YWAgbWV0aG9kXG5cdFx0XHRcdC8vIGRldGFjaGVzIHRoZSBidWZmZXIgd2hlbiBjb21wbGV0ZSwgcHJldmVudGluZyByZXVzZS5cblx0XHRcdFx0Y29uc3QgYnVmZmVyQ29weSA9IGJ1ZmZlci5zbGljZSggMCApO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBBdWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpO1xuXHRcdFx0XHRjb250ZXh0LmRlY29kZUF1ZGlvRGF0YSggYnVmZmVyQ29weSwgZnVuY3Rpb24gKCBhdWRpb0J1ZmZlciApIHtcblxuXHRcdFx0XHRcdG9uTG9hZCggYXVkaW9CdWZmZXIgKTtcblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdGlmICggb25FcnJvciApIHtcblxuXHRcdFx0XHRcdG9uRXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7XG5cblx0XHRcdH1cblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSGVtaXNwaGVyZUxpZ2h0UHJvYmUgZXh0ZW5kcyBMaWdodFByb2JlIHtcblxuXHRjb25zdHJ1Y3Rvciggc2t5Q29sb3IsIGdyb3VuZENvbG9yLCBpbnRlbnNpdHkgPSAxICkge1xuXG5cdFx0c3VwZXIoIHVuZGVmaW5lZCwgaW50ZW5zaXR5ICk7XG5cblx0XHRjb25zdCBjb2xvcjEgPSBuZXcgQ29sb3IoKS5zZXQoIHNreUNvbG9yICk7XG5cdFx0Y29uc3QgY29sb3IyID0gbmV3IENvbG9yKCkuc2V0KCBncm91bmRDb2xvciApO1xuXG5cdFx0Y29uc3Qgc2t5ID0gbmV3IFZlY3RvcjMoIGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIgKTtcblx0XHRjb25zdCBncm91bmQgPSBuZXcgVmVjdG9yMyggY29sb3IyLnIsIGNvbG9yMi5nLCBjb2xvcjIuYiApO1xuXG5cdFx0Ly8gd2l0aG91dCBleHRyYSBmYWN0b3Igb2YgUEkgaW4gdGhlIHNoYWRlciwgc2hvdWxkID0gMSAvIE1hdGguc3FydCggTWF0aC5QSSApO1xuXHRcdGNvbnN0IGMwID0gTWF0aC5zcXJ0KCBNYXRoLlBJICk7XG5cdFx0Y29uc3QgYzEgPSBjMCAqIE1hdGguc3FydCggMC43NSApO1xuXG5cdFx0dGhpcy5zaC5jb2VmZmljaWVudHNbIDAgXS5jb3B5KCBza3kgKS5hZGQoIGdyb3VuZCApLm11bHRpcGx5U2NhbGFyKCBjMCApO1xuXHRcdHRoaXMuc2guY29lZmZpY2llbnRzWyAxIF0uY29weSggc2t5ICkuc3ViKCBncm91bmQgKS5tdWx0aXBseVNjYWxhciggYzEgKTtcblxuXHR9XG5cbn1cblxuSGVtaXNwaGVyZUxpZ2h0UHJvYmUucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmUgPSB0cnVlO1xuXG5jbGFzcyBBbWJpZW50TGlnaHRQcm9iZSBleHRlbmRzIExpZ2h0UHJvYmUge1xuXG5cdGNvbnN0cnVjdG9yKCBjb2xvciwgaW50ZW5zaXR5ID0gMSApIHtcblxuXHRcdHN1cGVyKCB1bmRlZmluZWQsIGludGVuc2l0eSApO1xuXG5cdFx0Y29uc3QgY29sb3IxID0gbmV3IENvbG9yKCkuc2V0KCBjb2xvciApO1xuXG5cdFx0Ly8gd2l0aG91dCBleHRyYSBmYWN0b3Igb2YgUEkgaW4gdGhlIHNoYWRlciwgd291bGQgYmUgMiAvIE1hdGguc3FydCggTWF0aC5QSSApO1xuXHRcdHRoaXMuc2guY29lZmZpY2llbnRzWyAwIF0uc2V0KCBjb2xvcjEuciwgY29sb3IxLmcsIGNvbG9yMS5iICkubXVsdGlwbHlTY2FsYXIoIDIgKiBNYXRoLnNxcnQoIE1hdGguUEkgKSApO1xuXG5cdH1cblxufVxuXG5BbWJpZW50TGlnaHRQcm9iZS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZSA9IHRydWU7XG5cbmNvbnN0IF9leWVSaWdodCA9IC8qQF9fUFVSRV9fKi8gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9leWVMZWZ0ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX3Byb2plY3Rpb25NYXRyaXggPSAvKkBfX1BVUkVfXyovIG5ldyBNYXRyaXg0KCk7XG5cbmNsYXNzIFN0ZXJlb0NhbWVyYSB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHR0aGlzLnR5cGUgPSAnU3RlcmVvQ2FtZXJhJztcblxuXHRcdHRoaXMuYXNwZWN0ID0gMTtcblxuXHRcdHRoaXMuZXllU2VwID0gMC4wNjQ7XG5cblx0XHR0aGlzLmNhbWVyYUwgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHR0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSggMSApO1xuXHRcdHRoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmNhbWVyYVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblx0XHR0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSggMiApO1xuXHRcdHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLl9jYWNoZSA9IHtcblx0XHRcdGZvY3VzOiBudWxsLFxuXHRcdFx0Zm92OiBudWxsLFxuXHRcdFx0YXNwZWN0OiBudWxsLFxuXHRcdFx0bmVhcjogbnVsbCxcblx0XHRcdGZhcjogbnVsbCxcblx0XHRcdHpvb206IG51bGwsXG5cdFx0XHRleWVTZXA6IG51bGxcblx0XHR9O1xuXG5cdH1cblxuXHR1cGRhdGUoIGNhbWVyYSApIHtcblxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGU7XG5cblx0XHRjb25zdCBuZWVkc1VwZGF0ZSA9IGNhY2hlLmZvY3VzICE9PSBjYW1lcmEuZm9jdXMgfHwgY2FjaGUuZm92ICE9PSBjYW1lcmEuZm92IHx8XG5cdFx0XHRjYWNoZS5hc3BlY3QgIT09IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdCB8fCBjYWNoZS5uZWFyICE9PSBjYW1lcmEubmVhciB8fFxuXHRcdFx0Y2FjaGUuZmFyICE9PSBjYW1lcmEuZmFyIHx8IGNhY2hlLnpvb20gIT09IGNhbWVyYS56b29tIHx8IGNhY2hlLmV5ZVNlcCAhPT0gdGhpcy5leWVTZXA7XG5cblx0XHRpZiAoIG5lZWRzVXBkYXRlICkge1xuXG5cdFx0XHRjYWNoZS5mb2N1cyA9IGNhbWVyYS5mb2N1cztcblx0XHRcdGNhY2hlLmZvdiA9IGNhbWVyYS5mb3Y7XG5cdFx0XHRjYWNoZS5hc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XG5cdFx0XHRjYWNoZS5uZWFyID0gY2FtZXJhLm5lYXI7XG5cdFx0XHRjYWNoZS5mYXIgPSBjYW1lcmEuZmFyO1xuXHRcdFx0Y2FjaGUuem9vbSA9IGNhbWVyYS56b29tO1xuXHRcdFx0Y2FjaGUuZXllU2VwID0gdGhpcy5leWVTZXA7XG5cblx0XHRcdC8vIE9mZi1heGlzIHN0ZXJlb3Njb3BpYyBlZmZlY3QgYmFzZWQgb25cblx0XHRcdC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXG5cblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmNvcHkoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0XHRjb25zdCBleWVTZXBIYWxmID0gY2FjaGUuZXllU2VwIC8gMjtcblx0XHRcdGNvbnN0IGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcEhhbGYgKiBjYWNoZS5uZWFyIC8gY2FjaGUuZm9jdXM7XG5cdFx0XHRjb25zdCB5bWF4ID0gKCBjYWNoZS5uZWFyICogTWF0aC50YW4oIERFRzJSQUQgKiBjYWNoZS5mb3YgKiAwLjUgKSApIC8gY2FjaGUuem9vbTtcblx0XHRcdGxldCB4bWluLCB4bWF4O1xuXG5cdFx0XHQvLyB0cmFuc2xhdGUgeE9mZnNldFxuXG5cdFx0XHRfZXllTGVmdC5lbGVtZW50c1sgMTIgXSA9IC0gZXllU2VwSGFsZjtcblx0XHRcdF9leWVSaWdodC5lbGVtZW50c1sgMTIgXSA9IGV5ZVNlcEhhbGY7XG5cblx0XHRcdC8vIGZvciBsZWZ0IGV5ZVxuXG5cdFx0XHR4bWluID0gLSB5bWF4ICogY2FjaGUuYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xuXHRcdFx0eG1heCA9IHltYXggKiBjYWNoZS5hc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XG5cblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gPSAyICogY2FjaGUubmVhciAvICggeG1heCAtIHhtaW4gKTtcblx0XHRcdF9wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA4IF0gPSAoIHhtYXggKyB4bWluICkgLyAoIHhtYXggLSB4bWluICk7XG5cblx0XHRcdHRoaXMuY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIF9wcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdC8vIGZvciByaWdodCBleWVcblxuXHRcdFx0eG1pbiA9IC0geW1heCAqIGNhY2hlLmFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcblx0XHRcdHhtYXggPSB5bWF4ICogY2FjaGUuYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xuXG5cdFx0XHRfcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgMCBdID0gMiAqIGNhY2hlLm5lYXIgLyAoIHhtYXggLSB4bWluICk7XG5cdFx0XHRfcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgOCBdID0gKCB4bWF4ICsgeG1pbiApIC8gKCB4bWF4IC0geG1pbiApO1xuXG5cdFx0XHR0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KCBfcHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZCApLm11bHRpcGx5KCBfZXllTGVmdCApO1xuXHRcdHRoaXMuY2FtZXJhUi5tYXRyaXhXb3JsZC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGQgKS5tdWx0aXBseSggX2V5ZVJpZ2h0ICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIENsb2NrIHtcblxuXHRjb25zdHJ1Y3RvciggYXV0b1N0YXJ0ID0gdHJ1ZSApIHtcblxuXHRcdHRoaXMuYXV0b1N0YXJ0ID0gYXV0b1N0YXJ0O1xuXG5cdFx0dGhpcy5zdGFydFRpbWUgPSAwO1xuXHRcdHRoaXMub2xkVGltZSA9IDA7XG5cdFx0dGhpcy5lbGFwc2VkVGltZSA9IDA7XG5cblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblxuXHR9XG5cblx0c3RhcnQoKSB7XG5cblx0XHR0aGlzLnN0YXJ0VGltZSA9IG5vdygpO1xuXG5cdFx0dGhpcy5vbGRUaW1lID0gdGhpcy5zdGFydFRpbWU7XG5cdFx0dGhpcy5lbGFwc2VkVGltZSA9IDA7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHR9XG5cblx0c3RvcCgpIHtcblxuXHRcdHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG5cdH1cblxuXHRnZXRFbGFwc2VkVGltZSgpIHtcblxuXHRcdHRoaXMuZ2V0RGVsdGEoKTtcblx0XHRyZXR1cm4gdGhpcy5lbGFwc2VkVGltZTtcblxuXHR9XG5cblx0Z2V0RGVsdGEoKSB7XG5cblx0XHRsZXQgZGlmZiA9IDA7XG5cblx0XHRpZiAoIHRoaXMuYXV0b1N0YXJ0ICYmICEgdGhpcy5ydW5uaW5nICkge1xuXG5cdFx0XHR0aGlzLnN0YXJ0KCk7XG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5ydW5uaW5nICkge1xuXG5cdFx0XHRjb25zdCBuZXdUaW1lID0gbm93KCk7XG5cblx0XHRcdGRpZmYgPSAoIG5ld1RpbWUgLSB0aGlzLm9sZFRpbWUgKSAvIDEwMDA7XG5cdFx0XHR0aGlzLm9sZFRpbWUgPSBuZXdUaW1lO1xuXG5cdFx0XHR0aGlzLmVsYXBzZWRUaW1lICs9IGRpZmY7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gZGlmZjtcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gbm93KCkge1xuXG5cdHJldHVybiAoIHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcgPyBEYXRlIDogcGVyZm9ybWFuY2UgKS5ub3coKTsgLy8gc2VlICMxMDczMlxuXG59XG5cbmNvbnN0IF9wb3NpdGlvbiQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX3F1YXRlcm5pb24kMSA9IC8qQF9fUFVSRV9fKi8gbmV3IFF1YXRlcm5pb24oKTtcbmNvbnN0IF9zY2FsZSQxID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX29yaWVudGF0aW9uJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIEF1ZGlvTGlzdGVuZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0F1ZGlvTGlzdGVuZXInO1xuXG5cdFx0dGhpcy5jb250ZXh0ID0gQXVkaW9Db250ZXh0LmdldENvbnRleHQoKTtcblxuXHRcdHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0dGhpcy5nYWluLmNvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApO1xuXG5cdFx0dGhpcy5maWx0ZXIgPSBudWxsO1xuXG5cdFx0dGhpcy50aW1lRGVsdGEgPSAwO1xuXG5cdFx0Ly8gcHJpdmF0ZVxuXG5cdFx0dGhpcy5fY2xvY2sgPSBuZXcgQ2xvY2soKTtcblxuXHR9XG5cblx0Z2V0SW5wdXQoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5nYWluO1xuXG5cdH1cblxuXHRyZW1vdmVGaWx0ZXIoKSB7XG5cblx0XHRpZiAoIHRoaXMuZmlsdGVyICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLmdhaW4uZGlzY29ubmVjdCggdGhpcy5maWx0ZXIgKTtcblx0XHRcdHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApO1xuXHRcdFx0dGhpcy5nYWluLmNvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApO1xuXHRcdFx0dGhpcy5maWx0ZXIgPSBudWxsO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldEZpbHRlcigpIHtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlcjtcblxuXHR9XG5cblx0c2V0RmlsdGVyKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdGhpcy5maWx0ZXIgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuZ2Fpbi5kaXNjb25uZWN0KCB0aGlzLmZpbHRlciApO1xuXHRcdFx0dGhpcy5maWx0ZXIuZGlzY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmdhaW4uZGlzY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmZpbHRlciA9IHZhbHVlO1xuXHRcdHRoaXMuZ2Fpbi5jb25uZWN0KCB0aGlzLmZpbHRlciApO1xuXHRcdHRoaXMuZmlsdGVyLmNvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldE1hc3RlclZvbHVtZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZTtcblxuXHR9XG5cblx0c2V0TWFzdGVyVm9sdW1lKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSggdmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApIHtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdFx0Y29uc3QgbGlzdGVuZXIgPSB0aGlzLmNvbnRleHQubGlzdGVuZXI7XG5cdFx0Y29uc3QgdXAgPSB0aGlzLnVwO1xuXG5cdFx0dGhpcy50aW1lRGVsdGEgPSB0aGlzLl9jbG9jay5nZXREZWx0YSgpO1xuXG5cdFx0dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIF9wb3NpdGlvbiQxLCBfcXVhdGVybmlvbiQxLCBfc2NhbGUkMSApO1xuXG5cdFx0X29yaWVudGF0aW9uJDEuc2V0KCAwLCAwLCAtIDEgKS5hcHBseVF1YXRlcm5pb24oIF9xdWF0ZXJuaW9uJDEgKTtcblxuXHRcdGlmICggbGlzdGVuZXIucG9zaXRpb25YICkge1xuXG5cdFx0XHQvLyBjb2RlIHBhdGggZm9yIENocm9tZSAoc2VlICMxNDM5MylcblxuXHRcdFx0Y29uc3QgZW5kVGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMudGltZURlbHRhO1xuXG5cdFx0XHRsaXN0ZW5lci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9wb3NpdGlvbiQxLngsIGVuZFRpbWUgKTtcblx0XHRcdGxpc3RlbmVyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX3Bvc2l0aW9uJDEueSwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfcG9zaXRpb24kMS56LCBlbmRUaW1lICk7XG5cdFx0XHRsaXN0ZW5lci5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX29yaWVudGF0aW9uJDEueCwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIuZm9yd2FyZFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9vcmllbnRhdGlvbiQxLnksIGVuZFRpbWUgKTtcblx0XHRcdGxpc3RlbmVyLmZvcndhcmRaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfb3JpZW50YXRpb24kMS56LCBlbmRUaW1lICk7XG5cdFx0XHRsaXN0ZW5lci51cFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIHVwLngsIGVuZFRpbWUgKTtcblx0XHRcdGxpc3RlbmVyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggdXAueSwgZW5kVGltZSApO1xuXHRcdFx0bGlzdGVuZXIudXBaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCB1cC56LCBlbmRUaW1lICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRsaXN0ZW5lci5zZXRQb3NpdGlvbiggX3Bvc2l0aW9uJDEueCwgX3Bvc2l0aW9uJDEueSwgX3Bvc2l0aW9uJDEueiApO1xuXHRcdFx0bGlzdGVuZXIuc2V0T3JpZW50YXRpb24oIF9vcmllbnRhdGlvbiQxLngsIF9vcmllbnRhdGlvbiQxLnksIF9vcmllbnRhdGlvbiQxLnosIHVwLngsIHVwLnksIHVwLnogKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuY2xhc3MgQXVkaW8gZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGxpc3RlbmVyICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudHlwZSA9ICdBdWRpbyc7XG5cblx0XHR0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG5cdFx0dGhpcy5jb250ZXh0ID0gbGlzdGVuZXIuY29udGV4dDtcblxuXHRcdHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0dGhpcy5nYWluLmNvbm5lY3QoIGxpc3RlbmVyLmdldElucHV0KCkgKTtcblxuXHRcdHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcblxuXHRcdHRoaXMuYnVmZmVyID0gbnVsbDtcblx0XHR0aGlzLmRldHVuZSA9IDA7XG5cdFx0dGhpcy5sb29wID0gZmFsc2U7XG5cdFx0dGhpcy5sb29wU3RhcnQgPSAwO1xuXHRcdHRoaXMubG9vcEVuZCA9IDA7XG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xuXHRcdHRoaXMuZHVyYXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5wbGF5YmFja1JhdGUgPSAxO1xuXHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSB0cnVlO1xuXHRcdHRoaXMuc291cmNlID0gbnVsbDtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnZW1wdHknO1xuXG5cdFx0dGhpcy5fc3RhcnRlZEF0ID0gMDtcblx0XHR0aGlzLl9wcm9ncmVzcyA9IDA7XG5cdFx0dGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XG5cblx0XHR0aGlzLmZpbHRlcnMgPSBbXTtcblxuXHR9XG5cblx0Z2V0T3V0cHV0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2FpbjtcblxuXHR9XG5cblx0c2V0Tm9kZVNvdXJjZSggYXVkaW9Ob2RlICkge1xuXG5cdFx0dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTtcblx0XHR0aGlzLnNvdXJjZVR5cGUgPSAnYXVkaW9Ob2RlJztcblx0XHR0aGlzLnNvdXJjZSA9IGF1ZGlvTm9kZTtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRNZWRpYUVsZW1lbnRTb3VyY2UoIG1lZGlhRWxlbWVudCApIHtcblxuXHRcdHRoaXMuaGFzUGxheWJhY2tDb250cm9sID0gZmFsc2U7XG5cdFx0dGhpcy5zb3VyY2VUeXBlID0gJ21lZGlhTm9kZSc7XG5cdFx0dGhpcy5zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKCBtZWRpYUVsZW1lbnQgKTtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRNZWRpYVN0cmVhbVNvdXJjZSggbWVkaWFTdHJlYW0gKSB7XG5cblx0XHR0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9IGZhbHNlO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdtZWRpYVN0cmVhbU5vZGUnO1xuXHRcdHRoaXMuc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKCBtZWRpYVN0cmVhbSApO1xuXHRcdHRoaXMuY29ubmVjdCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEJ1ZmZlciggYXVkaW9CdWZmZXIgKSB7XG5cblx0XHR0aGlzLmJ1ZmZlciA9IGF1ZGlvQnVmZmVyO1xuXHRcdHRoaXMuc291cmNlVHlwZSA9ICdidWZmZXInO1xuXG5cdFx0aWYgKCB0aGlzLmF1dG9wbGF5ICkgdGhpcy5wbGF5KCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cGxheSggZGVsYXkgPSAwICkge1xuXG5cdFx0aWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fc3RhcnRlZEF0ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgZGVsYXk7XG5cblx0XHRjb25zdCBzb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdFx0c291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuXHRcdHNvdXJjZS5sb29wID0gdGhpcy5sb29wO1xuXHRcdHNvdXJjZS5sb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0XHRzb3VyY2UubG9vcEVuZCA9IHRoaXMubG9vcEVuZDtcblx0XHRzb3VyY2Uub25lbmRlZCA9IHRoaXMub25FbmRlZC5iaW5kKCB0aGlzICk7XG5cdFx0c291cmNlLnN0YXJ0KCB0aGlzLl9zdGFydGVkQXQsIHRoaXMuX3Byb2dyZXNzICsgdGhpcy5vZmZzZXQsIHRoaXMuZHVyYXRpb24gKTtcblxuXHRcdHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuc291cmNlID0gc291cmNlO1xuXG5cdFx0dGhpcy5zZXREZXR1bmUoIHRoaXMuZGV0dW5lICk7XG5cdFx0dGhpcy5zZXRQbGF5YmFja1JhdGUoIHRoaXMucGxheWJhY2tSYXRlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0KCk7XG5cblx0fVxuXG5cdHBhdXNlKCkge1xuXG5cdFx0aWYgKCB0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdC8vIHVwZGF0ZSBjdXJyZW50IHByb2dyZXNzXG5cblx0XHRcdHRoaXMuX3Byb2dyZXNzICs9IE1hdGgubWF4KCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSB0aGlzLl9zdGFydGVkQXQsIDAgKSAqIHRoaXMucGxheWJhY2tSYXRlO1xuXG5cdFx0XHRpZiAoIHRoaXMubG9vcCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHQvLyBlbnN1cmUgX3Byb2dyZXNzIGRvZXMgbm90IGV4Y2VlZCBkdXJhdGlvbiB3aXRoIGxvb3BlZCBhdWRpb3NcblxuXHRcdFx0XHR0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX3Byb2dyZXNzICUgKCB0aGlzLmR1cmF0aW9uIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zb3VyY2Uuc3RvcCgpO1xuXHRcdFx0dGhpcy5zb3VyY2Uub25lbmRlZCA9IG51bGw7XG5cblx0XHRcdHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3RvcCgpIHtcblxuXHRcdGlmICggdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPT09IGZhbHNlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHR0aGlzLl9wcm9ncmVzcyA9IDA7XG5cblx0XHR0aGlzLnNvdXJjZS5zdG9wKCk7XG5cdFx0dGhpcy5zb3VyY2Uub25lbmRlZCA9IG51bGw7XG5cdFx0dGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb25uZWN0KCkge1xuXG5cdFx0aWYgKCB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UuY29ubmVjdCggdGhpcy5maWx0ZXJzWyAwIF0gKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAxLCBsID0gdGhpcy5maWx0ZXJzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0dGhpcy5maWx0ZXJzWyBpIC0gMSBdLmNvbm5lY3QoIHRoaXMuZmlsdGVyc1sgaSBdICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5maWx0ZXJzWyB0aGlzLmZpbHRlcnMubGVuZ3RoIC0gMSBdLmNvbm5lY3QoIHRoaXMuZ2V0T3V0cHV0KCkgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuc291cmNlLmNvbm5lY3QoIHRoaXMuZ2V0T3V0cHV0KCkgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0ZGlzY29ubmVjdCgpIHtcblxuXHRcdGlmICggdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdHRoaXMuc291cmNlLmRpc2Nvbm5lY3QoIHRoaXMuZmlsdGVyc1sgMCBdICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMSwgbCA9IHRoaXMuZmlsdGVycy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdHRoaXMuZmlsdGVyc1sgaSAtIDEgXS5kaXNjb25uZWN0KCB0aGlzLmZpbHRlcnNbIGkgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZmlsdGVyc1sgdGhpcy5maWx0ZXJzLmxlbmd0aCAtIDEgXS5kaXNjb25uZWN0KCB0aGlzLmdldE91dHB1dCgpICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLnNvdXJjZS5kaXNjb25uZWN0KCB0aGlzLmdldE91dHB1dCgpICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRGaWx0ZXJzKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVycztcblxuXHR9XG5cblx0c2V0RmlsdGVycyggdmFsdWUgKSB7XG5cblx0XHRpZiAoICEgdmFsdWUgKSB2YWx1ZSA9IFtdO1xuXG5cdFx0aWYgKCB0aGlzLl9jb25uZWN0ZWQgPT09IHRydWUgKSB7XG5cblx0XHRcdHRoaXMuZGlzY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5maWx0ZXJzID0gdmFsdWUuc2xpY2UoKTtcblx0XHRcdHRoaXMuY29ubmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5maWx0ZXJzID0gdmFsdWUuc2xpY2UoKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXREZXR1bmUoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5kZXR1bmUgPSB2YWx1ZTtcblxuXHRcdGlmICggdGhpcy5zb3VyY2UuZGV0dW5lID09PSB1bmRlZmluZWQgKSByZXR1cm47IC8vIG9ubHkgc2V0IGRldHVuZSB3aGVuIGF2YWlsYWJsZVxuXG5cdFx0aWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSggdGhpcy5kZXR1bmUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldERldHVuZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmRldHVuZTtcblxuXHR9XG5cblx0Z2V0RmlsdGVyKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWyAwIF07XG5cblx0fVxuXG5cdHNldEZpbHRlciggZmlsdGVyICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RmlsdGVycyggZmlsdGVyID8gWyBmaWx0ZXIgXSA6IFtdICk7XG5cblx0fVxuXG5cdHNldFBsYXliYWNrUmF0ZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHRoaXMuaGFzUGxheWJhY2tDb250cm9sID09PSBmYWxzZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5wbGF5YmFja1JhdGUgPSB2YWx1ZTtcblxuXHRcdGlmICggdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdHRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUoIHRoaXMucGxheWJhY2tSYXRlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDEgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRQbGF5YmFja1JhdGUoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU7XG5cblx0fVxuXG5cdG9uRW5kZWQoKSB7XG5cblx0XHR0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuXG5cdH1cblxuXHRnZXRMb29wKCkge1xuXG5cdFx0aWYgKCB0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmxvb3A7XG5cblx0fVxuXG5cdHNldExvb3AoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdHRoaXMubG9vcCA9IHZhbHVlO1xuXG5cdFx0aWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dGhpcy5zb3VyY2UubG9vcCA9IHRoaXMubG9vcDtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRMb29wU3RhcnQoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5sb29wU3RhcnQgPSB2YWx1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRMb29wRW5kKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMubG9vcEVuZCA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldFZvbHVtZSgpIHtcblxuXHRcdHJldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZTtcblxuXHR9XG5cblx0c2V0Vm9sdW1lKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSggdmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwgMC4wMSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG59XG5cbmNvbnN0IF9wb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9xdWF0ZXJuaW9uID0gLypAX19QVVJFX18qLyBuZXcgUXVhdGVybmlvbigpO1xuY29uc3QgX3NjYWxlID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuY29uc3QgX29yaWVudGF0aW9uID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMygpO1xuXG5jbGFzcyBQb3NpdGlvbmFsQXVkaW8gZXh0ZW5kcyBBdWRpbyB7XG5cblx0Y29uc3RydWN0b3IoIGxpc3RlbmVyICkge1xuXG5cdFx0c3VwZXIoIGxpc3RlbmVyICk7XG5cblx0XHR0aGlzLnBhbm5lciA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0XHR0aGlzLnBhbm5lci5wYW5uaW5nTW9kZWwgPSAnSFJURic7XG5cdFx0dGhpcy5wYW5uZXIuY29ubmVjdCggdGhpcy5nYWluICk7XG5cblx0fVxuXG5cdGdldE91dHB1dCgpIHtcblxuXHRcdHJldHVybiB0aGlzLnBhbm5lcjtcblxuXHR9XG5cblx0Z2V0UmVmRGlzdGFuY2UoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2U7XG5cblx0fVxuXG5cdHNldFJlZkRpc3RhbmNlKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMucGFubmVyLnJlZkRpc3RhbmNlID0gdmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Z2V0Um9sbG9mZkZhY3RvcigpIHtcblxuXHRcdHJldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yO1xuXG5cdH1cblxuXHRzZXRSb2xsb2ZmRmFjdG9yKCB2YWx1ZSApIHtcblxuXHRcdHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3IgPSB2YWx1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXREaXN0YW5jZU1vZGVsKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWw7XG5cblx0fVxuXG5cdHNldERpc3RhbmNlTW9kZWwoIHZhbHVlICkge1xuXG5cdFx0dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbCA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGdldE1heERpc3RhbmNlKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlO1xuXG5cdH1cblxuXHRzZXRNYXhEaXN0YW5jZSggdmFsdWUgKSB7XG5cblx0XHR0aGlzLnBhbm5lci5tYXhEaXN0YW5jZSA9IHZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldERpcmVjdGlvbmFsQ29uZSggY29uZUlubmVyQW5nbGUsIGNvbmVPdXRlckFuZ2xlLCBjb25lT3V0ZXJHYWluICkge1xuXG5cdFx0dGhpcy5wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBjb25lSW5uZXJBbmdsZTtcblx0XHR0aGlzLnBhbm5lci5jb25lT3V0ZXJBbmdsZSA9IGNvbmVPdXRlckFuZ2xlO1xuXHRcdHRoaXMucGFubmVyLmNvbmVPdXRlckdhaW4gPSBjb25lT3V0ZXJHYWluO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApIHtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdFx0aWYgKCB0aGlzLmhhc1BsYXliYWNrQ29udHJvbCA9PT0gdHJ1ZSAmJiB0aGlzLmlzUGxheWluZyA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHR0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggX3Bvc2l0aW9uLCBfcXVhdGVybmlvbiwgX3NjYWxlICk7XG5cblx0XHRfb3JpZW50YXRpb24uc2V0KCAwLCAwLCAxICkuYXBwbHlRdWF0ZXJuaW9uKCBfcXVhdGVybmlvbiApO1xuXG5cdFx0Y29uc3QgcGFubmVyID0gdGhpcy5wYW5uZXI7XG5cblx0XHRpZiAoIHBhbm5lci5wb3NpdGlvblggKSB7XG5cblx0XHRcdC8vIGNvZGUgcGF0aCBmb3IgQ2hyb21lIGFuZCBGaXJlZm94IChzZWUgIzE0MzkzKVxuXG5cdFx0XHRjb25zdCBlbmRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7XG5cblx0XHRcdHBhbm5lci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9wb3NpdGlvbi54LCBlbmRUaW1lICk7XG5cdFx0XHRwYW5uZXIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfcG9zaXRpb24ueSwgZW5kVGltZSApO1xuXHRcdFx0cGFubmVyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX3Bvc2l0aW9uLnosIGVuZFRpbWUgKTtcblx0XHRcdHBhbm5lci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIF9vcmllbnRhdGlvbi54LCBlbmRUaW1lICk7XG5cdFx0XHRwYW5uZXIub3JpZW50YXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBfb3JpZW50YXRpb24ueSwgZW5kVGltZSApO1xuXHRcdFx0cGFubmVyLm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggX29yaWVudGF0aW9uLnosIGVuZFRpbWUgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHBhbm5lci5zZXRQb3NpdGlvbiggX3Bvc2l0aW9uLngsIF9wb3NpdGlvbi55LCBfcG9zaXRpb24ueiApO1xuXHRcdFx0cGFubmVyLnNldE9yaWVudGF0aW9uKCBfb3JpZW50YXRpb24ueCwgX29yaWVudGF0aW9uLnksIF9vcmllbnRhdGlvbi56ICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbmNsYXNzIEF1ZGlvQW5hbHlzZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBhdWRpbywgZmZ0U2l6ZSA9IDIwNDggKSB7XG5cblx0XHR0aGlzLmFuYWx5c2VyID0gYXVkaW8uY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHRcdHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZSA9IGZmdFNpemU7XG5cblx0XHR0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheSggdGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCApO1xuXG5cdFx0YXVkaW8uZ2V0T3V0cHV0KCkuY29ubmVjdCggdGhpcy5hbmFseXNlciApO1xuXG5cdH1cblxuXG5cdGdldEZyZXF1ZW5jeURhdGEoKSB7XG5cblx0XHR0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKCB0aGlzLmRhdGEgKTtcblxuXHRcdHJldHVybiB0aGlzLmRhdGE7XG5cblx0fVxuXG5cdGdldEF2ZXJhZ2VGcmVxdWVuY3koKSB7XG5cblx0XHRsZXQgdmFsdWUgPSAwO1xuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKTtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHR2YWx1ZSArPSBkYXRhWyBpIF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWUgLyBkYXRhLmxlbmd0aDtcblxuXHR9XG5cbn1cblxuY2xhc3MgUHJvcGVydHlNaXhlciB7XG5cblx0Y29uc3RydWN0b3IoIGJpbmRpbmcsIHR5cGVOYW1lLCB2YWx1ZVNpemUgKSB7XG5cblx0XHR0aGlzLmJpbmRpbmcgPSBiaW5kaW5nO1xuXHRcdHRoaXMudmFsdWVTaXplID0gdmFsdWVTaXplO1xuXG5cdFx0bGV0IG1peEZ1bmN0aW9uLFxuXHRcdFx0bWl4RnVuY3Rpb25BZGRpdGl2ZSxcblx0XHRcdHNldElkZW50aXR5O1xuXG5cdFx0Ly8gYnVmZmVyIGxheW91dDogWyBpbmNvbWluZyB8IGFjY3UwIHwgYWNjdTEgfCBvcmlnIHwgYWRkQWNjdSB8IChvcHRpb25hbCB3b3JrKSBdXG5cdFx0Ly9cblx0XHQvLyBpbnRlcnBvbGF0b3JzIGNhbiB1c2UgLmJ1ZmZlciBhcyB0aGVpciAucmVzdWx0XG5cdFx0Ly8gdGhlIGRhdGEgdGhlbiBnb2VzIHRvICdpbmNvbWluZydcblx0XHQvL1xuXHRcdC8vICdhY2N1MCcgYW5kICdhY2N1MScgYXJlIHVzZWQgZnJhbWUtaW50ZXJsZWF2ZWQgZm9yXG5cdFx0Ly8gdGhlIGN1bXVsYXRpdmUgcmVzdWx0IGFuZCBhcmUgY29tcGFyZWQgdG8gZGV0ZWN0XG5cdFx0Ly8gY2hhbmdlc1xuXHRcdC8vXG5cdFx0Ly8gJ29yaWcnIHN0b3JlcyB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgdGhlIHByb3BlcnR5XG5cdFx0Ly9cblx0XHQvLyAnYWRkJyBpcyB1c2VkIGZvciBhZGRpdGl2ZSBjdW11bGF0aXZlIHJlc3VsdHNcblx0XHQvL1xuXHRcdC8vICd3b3JrJyBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBwcmVzZW50IGZvciBxdWF0ZXJuaW9uIHR5cGVzLiBJdCBpcyB1c2VkXG5cdFx0Ly8gdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHF1YXRlcm5pb24gbXVsdGlwbGljYXRpb24gcmVzdWx0c1xuXG5cdFx0c3dpdGNoICggdHlwZU5hbWUgKSB7XG5cblx0XHRcdGNhc2UgJ3F1YXRlcm5pb24nOlxuXHRcdFx0XHRtaXhGdW5jdGlvbiA9IHRoaXMuX3NsZXJwO1xuXHRcdFx0XHRtaXhGdW5jdGlvbkFkZGl0aXZlID0gdGhpcy5fc2xlcnBBZGRpdGl2ZTtcblx0XHRcdFx0c2V0SWRlbnRpdHkgPSB0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbjtcblxuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkoIHZhbHVlU2l6ZSAqIDYgKTtcblx0XHRcdFx0dGhpcy5fd29ya0luZGV4ID0gNTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0bWl4RnVuY3Rpb24gPSB0aGlzLl9zZWxlY3Q7XG5cblx0XHRcdFx0Ly8gVXNlIHRoZSByZWd1bGFyIG1peCBmdW5jdGlvbiBhbmQgZm9yIGFkZGl0aXZlIG9uIHRoZXNlIHR5cGVzLFxuXHRcdFx0XHQvLyBhZGRpdGl2ZSBpcyBub3QgcmVsZXZhbnQgZm9yIG5vbi1udW1lcmljIHR5cGVzXG5cdFx0XHRcdG1peEZ1bmN0aW9uQWRkaXRpdmUgPSB0aGlzLl9zZWxlY3Q7XG5cblx0XHRcdFx0c2V0SWRlbnRpdHkgPSB0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXI7XG5cblx0XHRcdFx0dGhpcy5idWZmZXIgPSBuZXcgQXJyYXkoIHZhbHVlU2l6ZSAqIDUgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG1peEZ1bmN0aW9uID0gdGhpcy5fbGVycDtcblx0XHRcdFx0bWl4RnVuY3Rpb25BZGRpdGl2ZSA9IHRoaXMuX2xlcnBBZGRpdGl2ZTtcblx0XHRcdFx0c2V0SWRlbnRpdHkgPSB0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYztcblxuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkoIHZhbHVlU2l6ZSAqIDUgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbiA9IG1peEZ1bmN0aW9uO1xuXHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlID0gbWl4RnVuY3Rpb25BZGRpdGl2ZTtcblx0XHR0aGlzLl9zZXRJZGVudGl0eSA9IHNldElkZW50aXR5O1xuXHRcdHRoaXMuX29yaWdJbmRleCA9IDM7XG5cdFx0dGhpcy5fYWRkSW5kZXggPSA0O1xuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gMDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9IDA7XG5cblx0XHR0aGlzLnVzZUNvdW50ID0gMDtcblx0XHR0aGlzLnJlZmVyZW5jZUNvdW50ID0gMDtcblxuXHR9XG5cblx0Ly8gYWNjdW11bGF0ZSBkYXRhIGluIHRoZSAnaW5jb21pbmcnIHJlZ2lvbiBpbnRvICdhY2N1PGk+J1xuXHRhY2N1bXVsYXRlKCBhY2N1SW5kZXgsIHdlaWdodCApIHtcblxuXHRcdC8vIG5vdGU6IGhhcHBpbHkgYWNjdW11bGF0aW5nIG5vdGhpbmcgd2hlbiB3ZWlnaHQgPSAwLCB0aGUgY2FsbGVyIGtub3dzXG5cdFx0Ly8gdGhlIHdlaWdodCBhbmQgc2hvdWxkbid0IGhhdmUgbWFkZSB0aGUgY2FsbCBpbiB0aGUgZmlyc3QgcGxhY2VcblxuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRvZmZzZXQgPSBhY2N1SW5kZXggKiBzdHJpZGUgKyBzdHJpZGU7XG5cblx0XHRsZXQgY3VycmVudFdlaWdodCA9IHRoaXMuY3VtdWxhdGl2ZVdlaWdodDtcblxuXHRcdGlmICggY3VycmVudFdlaWdodCA9PT0gMCApIHtcblxuXHRcdFx0Ly8gYWNjdU4gOj0gaW5jb21pbmcgKiB3ZWlnaHRcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7XG5cblx0XHRcdFx0YnVmZmVyWyBvZmZzZXQgKyBpIF0gPSBidWZmZXJbIGkgXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50V2VpZ2h0ID0gd2VpZ2h0O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gYWNjdU4gOj0gYWNjdU4gKyBpbmNvbWluZyAqIHdlaWdodFxuXG5cdFx0XHRjdXJyZW50V2VpZ2h0ICs9IHdlaWdodDtcblx0XHRcdGNvbnN0IG1peCA9IHdlaWdodCAvIGN1cnJlbnRXZWlnaHQ7XG5cdFx0XHR0aGlzLl9taXhCdWZmZXJSZWdpb24oIGJ1ZmZlciwgb2Zmc2V0LCAwLCBtaXgsIHN0cmlkZSApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gY3VycmVudFdlaWdodDtcblxuXHR9XG5cblx0Ly8gYWNjdW11bGF0ZSBkYXRhIGluIHRoZSAnaW5jb21pbmcnIHJlZ2lvbiBpbnRvICdhZGQnXG5cdGFjY3VtdWxhdGVBZGRpdGl2ZSggd2VpZ2h0ICkge1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIsXG5cdFx0XHRzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSxcblx0XHRcdG9mZnNldCA9IHN0cmlkZSAqIHRoaXMuX2FkZEluZGV4O1xuXG5cdFx0aWYgKCB0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gYWRkID0gaWRlbnRpdHlcblxuXHRcdFx0dGhpcy5fc2V0SWRlbnRpdHkoKTtcblxuXHRcdH1cblxuXHRcdC8vIGFkZCA6PSBhZGQgKyBpbmNvbWluZyAqIHdlaWdodFxuXG5cdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoIGJ1ZmZlciwgb2Zmc2V0LCAwLCB3ZWlnaHQsIHN0cmlkZSApO1xuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlICs9IHdlaWdodDtcblxuXHR9XG5cblx0Ly8gYXBwbHkgdGhlIHN0YXRlIG9mICdhY2N1PGk+JyB0byB0aGUgYmluZGluZyB3aGVuIGFjY3VzIGRpZmZlclxuXHRhcHBseSggYWNjdUluZGV4ICkge1xuXG5cdFx0Y29uc3Qgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cdFx0XHRidWZmZXIgPSB0aGlzLmJ1ZmZlcixcblx0XHRcdG9mZnNldCA9IGFjY3VJbmRleCAqIHN0cmlkZSArIHN0cmlkZSxcblxuXHRcdFx0d2VpZ2h0ID0gdGhpcy5jdW11bGF0aXZlV2VpZ2h0LFxuXHRcdFx0d2VpZ2h0QWRkaXRpdmUgPSB0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxcblxuXHRcdFx0YmluZGluZyA9IHRoaXMuYmluZGluZztcblxuXHRcdHRoaXMuY3VtdWxhdGl2ZVdlaWdodCA9IDA7XG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUgPSAwO1xuXG5cdFx0aWYgKCB3ZWlnaHQgPCAxICkge1xuXG5cdFx0XHQvLyBhY2N1TiA6PSBhY2N1TiArIG9yaWdpbmFsICogKCAxIC0gY3VtdWxhdGl2ZVdlaWdodCApXG5cblx0XHRcdGNvbnN0IG9yaWdpbmFsVmFsdWVPZmZzZXQgPSBzdHJpZGUgKiB0aGlzLl9vcmlnSW5kZXg7XG5cblx0XHRcdHRoaXMuX21peEJ1ZmZlclJlZ2lvbihcblx0XHRcdFx0YnVmZmVyLCBvZmZzZXQsIG9yaWdpbmFsVmFsdWVPZmZzZXQsIDEgLSB3ZWlnaHQsIHN0cmlkZSApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB3ZWlnaHRBZGRpdGl2ZSA+IDAgKSB7XG5cblx0XHRcdC8vIGFjY3VOIDo9IGFjY3VOICsgYWRkaXRpdmUgYWNjdU5cblxuXHRcdFx0dGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoIGJ1ZmZlciwgb2Zmc2V0LCB0aGlzLl9hZGRJbmRleCAqIHN0cmlkZSwgMSwgc3RyaWRlICk7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IHN0cmlkZSwgZSA9IHN0cmlkZSArIHN0cmlkZTsgaSAhPT0gZTsgKysgaSApIHtcblxuXHRcdFx0aWYgKCBidWZmZXJbIGkgXSAhPT0gYnVmZmVyWyBpICsgc3RyaWRlIF0gKSB7XG5cblx0XHRcdFx0Ly8gdmFsdWUgaGFzIGNoYW5nZWQgLT4gdXBkYXRlIHNjZW5lIGdyYXBoXG5cblx0XHRcdFx0YmluZGluZy5zZXRWYWx1ZSggYnVmZmVyLCBvZmZzZXQgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gcmVtZW1iZXIgdGhlIHN0YXRlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eSBhbmQgY29weSBpdCB0byBib3RoIGFjY3VzXG5cdHNhdmVPcmlnaW5hbFN0YXRlKCkge1xuXG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuYmluZGluZztcblxuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuXHRcdFx0c3RyaWRlID0gdGhpcy52YWx1ZVNpemUsXG5cblx0XHRcdG9yaWdpbmFsVmFsdWVPZmZzZXQgPSBzdHJpZGUgKiB0aGlzLl9vcmlnSW5kZXg7XG5cblx0XHRiaW5kaW5nLmdldFZhbHVlKCBidWZmZXIsIG9yaWdpbmFsVmFsdWVPZmZzZXQgKTtcblxuXHRcdC8vIGFjY3VbMC4uMV0gOj0gb3JpZyAtLSBpbml0aWFsbHkgZGV0ZWN0IGNoYW5nZXMgYWdhaW5zdCB0aGUgb3JpZ2luYWxcblx0XHRmb3IgKCBsZXQgaSA9IHN0cmlkZSwgZSA9IG9yaWdpbmFsVmFsdWVPZmZzZXQ7IGkgIT09IGU7ICsrIGkgKSB7XG5cblx0XHRcdGJ1ZmZlclsgaSBdID0gYnVmZmVyWyBvcmlnaW5hbFZhbHVlT2Zmc2V0ICsgKCBpICUgc3RyaWRlICkgXTtcblxuXHRcdH1cblxuXHRcdC8vIEFkZCB0byBpZGVudGl0eSBmb3IgYWRkaXRpdmVcblx0XHR0aGlzLl9zZXRJZGVudGl0eSgpO1xuXG5cdFx0dGhpcy5jdW11bGF0aXZlV2VpZ2h0ID0gMDtcblx0XHR0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSA9IDA7XG5cblx0fVxuXG5cdC8vIGFwcGx5IHRoZSBzdGF0ZSBwcmV2aW91c2x5IHRha2VuIHZpYSAnc2F2ZU9yaWdpbmFsU3RhdGUnIHRvIHRoZSBiaW5kaW5nXG5cdHJlc3RvcmVPcmlnaW5hbFN0YXRlKCkge1xuXG5cdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZU9mZnNldCA9IHRoaXMudmFsdWVTaXplICogMztcblx0XHR0aGlzLmJpbmRpbmcuc2V0VmFsdWUoIHRoaXMuYnVmZmVyLCBvcmlnaW5hbFZhbHVlT2Zmc2V0ICk7XG5cblx0fVxuXG5cdF9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpIHtcblxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLl9hZGRJbmRleCAqIHRoaXMudmFsdWVTaXplO1xuXHRcdGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHRoaXMudmFsdWVTaXplO1xuXG5cdFx0Zm9yICggbGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuYnVmZmVyWyBpIF0gPSAwO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKSB7XG5cblx0XHR0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpO1xuXHRcdHRoaXMuYnVmZmVyWyB0aGlzLl9hZGRJbmRleCAqIHRoaXMudmFsdWVTaXplICsgMyBdID0gMTtcblxuXHR9XG5cblx0X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpIHtcblxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLl9vcmlnSW5kZXggKiB0aGlzLnZhbHVlU2l6ZTtcblx0XHRjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuX2FkZEluZGV4ICogdGhpcy52YWx1ZVNpemU7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlU2l6ZTsgaSArKyApIHtcblxuXHRcdFx0dGhpcy5idWZmZXJbIHRhcmdldEluZGV4ICsgaSBdID0gdGhpcy5idWZmZXJbIHN0YXJ0SW5kZXggKyBpIF07XG5cblx0XHR9XG5cblx0fVxuXG5cblx0Ly8gbWl4IGZ1bmN0aW9uc1xuXG5cdF9zZWxlY3QoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSApIHtcblxuXHRcdGlmICggdCA+PSAwLjUgKSB7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArKyBpICkge1xuXG5cdFx0XHRcdGJ1ZmZlclsgZHN0T2Zmc2V0ICsgaSBdID0gYnVmZmVyWyBzcmNPZmZzZXQgKyBpIF07XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0X3NsZXJwKCBidWZmZXIsIGRzdE9mZnNldCwgc3JjT2Zmc2V0LCB0ICkge1xuXG5cdFx0UXVhdGVybmlvbi5zbGVycEZsYXQoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIGRzdE9mZnNldCwgYnVmZmVyLCBzcmNPZmZzZXQsIHQgKTtcblxuXHR9XG5cblx0X3NsZXJwQWRkaXRpdmUoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSApIHtcblxuXHRcdGNvbnN0IHdvcmtPZmZzZXQgPSB0aGlzLl93b3JrSW5kZXggKiBzdHJpZGU7XG5cblx0XHQvLyBTdG9yZSByZXN1bHQgaW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBvZmZzZXRcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KCBidWZmZXIsIHdvcmtPZmZzZXQsIGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIHNyY09mZnNldCApO1xuXG5cdFx0Ly8gU2xlcnAgdG8gdGhlIGludGVybWVkaWF0ZSByZXN1bHRcblx0XHRRdWF0ZXJuaW9uLnNsZXJwRmxhdCggYnVmZmVyLCBkc3RPZmZzZXQsIGJ1ZmZlciwgZHN0T2Zmc2V0LCBidWZmZXIsIHdvcmtPZmZzZXQsIHQgKTtcblxuXHR9XG5cblx0X2xlcnAoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSApIHtcblxuXHRcdGNvbnN0IHMgPSAxIC0gdDtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBqID0gZHN0T2Zmc2V0ICsgaTtcblxuXHRcdFx0YnVmZmVyWyBqIF0gPSBidWZmZXJbIGogXSAqIHMgKyBidWZmZXJbIHNyY09mZnNldCArIGkgXSAqIHQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdF9sZXJwQWRkaXRpdmUoIGJ1ZmZlciwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIHQsIHN0cmlkZSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gc3RyaWRlOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBqID0gZHN0T2Zmc2V0ICsgaTtcblxuXHRcdFx0YnVmZmVyWyBqIF0gPSBidWZmZXJbIGogXSArIGJ1ZmZlclsgc3JjT2Zmc2V0ICsgaSBdICogdDtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuLy8gQ2hhcmFjdGVycyBbXS46LyBhcmUgcmVzZXJ2ZWQgZm9yIHRyYWNrIGJpbmRpbmcgc3ludGF4LlxuY29uc3QgX1JFU0VSVkVEX0NIQVJTX1JFID0gJ1xcXFxbXFxcXF1cXFxcLjpcXFxcLyc7XG5jb25zdCBfcmVzZXJ2ZWRSZSA9IG5ldyBSZWdFeHAoICdbJyArIF9SRVNFUlZFRF9DSEFSU19SRSArICddJywgJ2cnICk7XG5cbi8vIEF0dGVtcHRzIHRvIGFsbG93IG5vZGUgbmFtZXMgZnJvbSBhbnkgbGFuZ3VhZ2UuIEVTNSdzIGBcXHdgIHJlZ2V4cCBtYXRjaGVzXG4vLyBvbmx5IGxhdGluIGNoYXJhY3RlcnMsIGFuZCB0aGUgdW5pY29kZSBcXHB7TH0gaXMgbm90IHlldCBzdXBwb3J0ZWQuIFNvXG4vLyBpbnN0ZWFkLCB3ZSBleGNsdWRlIHJlc2VydmVkIGNoYXJhY3RlcnMgYW5kIG1hdGNoIGV2ZXJ5dGhpbmcgZWxzZS5cbmNvbnN0IF93b3JkQ2hhciA9ICdbXicgKyBfUkVTRVJWRURfQ0hBUlNfUkUgKyAnXSc7XG5jb25zdCBfd29yZENoYXJPckRvdCA9ICdbXicgKyBfUkVTRVJWRURfQ0hBUlNfUkUucmVwbGFjZSggJ1xcXFwuJywgJycgKSArICddJztcblxuLy8gUGFyZW50IGRpcmVjdG9yaWVzLCBkZWxpbWl0ZWQgYnkgJy8nIG9yICc6Jy4gQ3VycmVudGx5IHVudXNlZCwgYnV0IG11c3Rcbi8vIGJlIG1hdGNoZWQgdG8gcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIHRyYWNrIG5hbWUuXG5jb25zdCBfZGlyZWN0b3J5UmUgPSAvKCg/OldDK1tcXC86XSkqKS8uc291cmNlLnJlcGxhY2UoICdXQycsIF93b3JkQ2hhciApO1xuXG4vLyBUYXJnZXQgbm9kZS4gTWF5IGNvbnRhaW4gd29yZCBjaGFyYWN0ZXJzIChhLXpBLVowLTlfKSBhbmQgJy4nIG9yICctJy5cbmNvbnN0IF9ub2RlUmUgPSAvKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCAnV0NPRCcsIF93b3JkQ2hhck9yRG90ICk7XG5cbi8vIE9iamVjdCBvbiB0YXJnZXQgbm9kZSwgYW5kIGFjY2Vzc29yLiBNYXkgbm90IGNvbnRhaW4gcmVzZXJ2ZWRcbi8vIGNoYXJhY3RlcnMuIEFjY2Vzc29yIG1heSBjb250YWluIGFueSBjaGFyYWN0ZXIgZXhjZXB0IGNsb3NpbmcgYnJhY2tldC5cbmNvbnN0IF9vYmplY3RSZSA9IC8oPzpcXC4oV0MrKSg/OlxcWyguKylcXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSggJ1dDJywgX3dvcmRDaGFyICk7XG5cbi8vIFByb3BlcnR5IGFuZCBhY2Nlc3Nvci4gTWF5IG5vdCBjb250YWluIHJlc2VydmVkIGNoYXJhY3RlcnMuIEFjY2Vzc29yIG1heVxuLy8gY29udGFpbiBhbnkgbm9uLWJyYWNrZXQgY2hhcmFjdGVycy5cbmNvbnN0IF9wcm9wZXJ0eVJlID0gL1xcLihXQyspKD86XFxbKC4rKVxcXSk/Ly5zb3VyY2UucmVwbGFjZSggJ1dDJywgX3dvcmRDaGFyICk7XG5cbmNvbnN0IF90cmFja1JlID0gbmV3IFJlZ0V4cCggJydcblx0KyAnXidcblx0KyBfZGlyZWN0b3J5UmVcblx0KyBfbm9kZVJlXG5cdCsgX29iamVjdFJlXG5cdCsgX3Byb3BlcnR5UmVcblx0KyAnJCdcbik7XG5cbmNvbnN0IF9zdXBwb3J0ZWRPYmplY3ROYW1lcyA9IFsgJ21hdGVyaWFsJywgJ21hdGVyaWFscycsICdib25lcycgXTtcblxuY2xhc3MgQ29tcG9zaXRlIHtcblxuXHRjb25zdHJ1Y3RvciggdGFyZ2V0R3JvdXAsIHBhdGgsIG9wdGlvbmFsUGFyc2VkUGF0aCApIHtcblxuXHRcdGNvbnN0IHBhcnNlZFBhdGggPSBvcHRpb25hbFBhcnNlZFBhdGggfHwgUHJvcGVydHlCaW5kaW5nLnBhcnNlVHJhY2tOYW1lKCBwYXRoICk7XG5cblx0XHR0aGlzLl90YXJnZXRHcm91cCA9IHRhcmdldEdyb3VwO1xuXHRcdHRoaXMuX2JpbmRpbmdzID0gdGFyZ2V0R3JvdXAuc3Vic2NyaWJlXyggcGF0aCwgcGFyc2VkUGF0aCApO1xuXG5cdH1cblxuXHRnZXRWYWx1ZSggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdHRoaXMuYmluZCgpOyAvLyBiaW5kIGFsbCBiaW5kaW5nXG5cblx0XHRjb25zdCBmaXJzdFZhbGlkSW5kZXggPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRiaW5kaW5nID0gdGhpcy5fYmluZGluZ3NbIGZpcnN0VmFsaWRJbmRleCBdO1xuXG5cdFx0Ly8gYW5kIG9ubHkgY2FsbCAuZ2V0VmFsdWUgb24gdGhlIGZpcnN0XG5cdFx0aWYgKCBiaW5kaW5nICE9PSB1bmRlZmluZWQgKSBiaW5kaW5nLmdldFZhbHVlKCBhcnJheSwgb2Zmc2V0ICk7XG5cblx0fVxuXG5cdHNldFZhbHVlKCBhcnJheSwgb2Zmc2V0ICkge1xuXG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncztcblxuXHRcdGZvciAoIGxldCBpID0gdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRiaW5kaW5nc1sgaSBdLnNldFZhbHVlKCBhcnJheSwgb2Zmc2V0ICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGJpbmQoKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGJpbmRpbmdzWyBpIF0uYmluZCgpO1xuXG5cdFx0fVxuXG5cdH1cblxuXHR1bmJpbmQoKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0Zm9yICggbGV0IGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGJpbmRpbmdzWyBpIF0udW5iaW5kKCk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbi8vIE5vdGU6IFRoaXMgY2xhc3MgdXNlcyBhIFN0YXRlIHBhdHRlcm4gb24gYSBwZXItbWV0aG9kIGJhc2lzOlxuLy8gJ2JpbmQnIHNldHMgJ3RoaXMuZ2V0VmFsdWUnIC8gJ3NldFZhbHVlJyBhbmQgc2hhZG93cyB0aGVcbi8vIHByb3RvdHlwZSB2ZXJzaW9uIG9mIHRoZXNlIG1ldGhvZHMgd2l0aCBvbmUgdGhhdCByZXByZXNlbnRzXG4vLyB0aGUgYm91bmQgc3RhdGUuIFdoZW4gdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgdGhlIG1ldGhvZHNcbi8vIGJlY29tZSBuby1vcHMuXG5jbGFzcyBQcm9wZXJ0eUJpbmRpbmcge1xuXG5cdGNvbnN0cnVjdG9yKCByb290Tm9kZSwgcGF0aCwgcGFyc2VkUGF0aCApIHtcblxuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdFx0dGhpcy5wYXJzZWRQYXRoID0gcGFyc2VkUGF0aCB8fCBQcm9wZXJ0eUJpbmRpbmcucGFyc2VUcmFja05hbWUoIHBhdGggKTtcblxuXHRcdHRoaXMubm9kZSA9IFByb3BlcnR5QmluZGluZy5maW5kTm9kZSggcm9vdE5vZGUsIHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSApIHx8IHJvb3ROb2RlO1xuXG5cdFx0dGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlO1xuXG5cdFx0Ly8gaW5pdGlhbCBzdGF0ZSBvZiB0aGVzZSBtZXRob2RzIHRoYXQgY2FsbHMgJ2JpbmQnXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlX3VuYm91bmQ7XG5cdFx0dGhpcy5zZXRWYWx1ZSA9IHRoaXMuX3NldFZhbHVlX3VuYm91bmQ7XG5cblx0fVxuXG5cblx0c3RhdGljIGNyZWF0ZSggcm9vdCwgcGF0aCwgcGFyc2VkUGF0aCApIHtcblxuXHRcdGlmICggISAoIHJvb3QgJiYgcm9vdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwICkgKSB7XG5cblx0XHRcdHJldHVybiBuZXcgUHJvcGVydHlCaW5kaW5nKCByb290LCBwYXRoLCBwYXJzZWRQYXRoICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb3BlcnR5QmluZGluZy5Db21wb3NpdGUoIHJvb3QsIHBhdGgsIHBhcnNlZFBhdGggKTtcblxuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcGxhY2VzIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzIGFuZCByZW1vdmVzIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZnJvbVxuXHQgKiBub2RlIG5hbWVzLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHBhcnNlVHJhY2tOYW1lKCkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vZGUgbmFtZSB0byBiZSBzYW5pdGl6ZWQuXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKCBuYW1lICkge1xuXG5cdFx0cmV0dXJuIG5hbWUucmVwbGFjZSggL1xccy9nLCAnXycgKS5yZXBsYWNlKCBfcmVzZXJ2ZWRSZSwgJycgKTtcblxuXHR9XG5cblx0c3RhdGljIHBhcnNlVHJhY2tOYW1lKCB0cmFja05hbWUgKSB7XG5cblx0XHRjb25zdCBtYXRjaGVzID0gX3RyYWNrUmUuZXhlYyggdHJhY2tOYW1lICk7XG5cblx0XHRpZiAoICEgbWF0Y2hlcyApIHtcblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAnICsgdHJhY2tOYW1lICk7XG5cblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHRzID0ge1xuXHRcdFx0Ly8gZGlyZWN0b3J5TmFtZTogbWF0Y2hlc1sgMSBdLCAvLyAodHNjaHcpIGN1cnJlbnRseSB1bnVzZWRcblx0XHRcdG5vZGVOYW1lOiBtYXRjaGVzWyAyIF0sXG5cdFx0XHRvYmplY3ROYW1lOiBtYXRjaGVzWyAzIF0sXG5cdFx0XHRvYmplY3RJbmRleDogbWF0Y2hlc1sgNCBdLFxuXHRcdFx0cHJvcGVydHlOYW1lOiBtYXRjaGVzWyA1IF0sIC8vIHJlcXVpcmVkXG5cdFx0XHRwcm9wZXJ0eUluZGV4OiBtYXRjaGVzWyA2IF1cblx0XHR9O1xuXG5cdFx0Y29uc3QgbGFzdERvdCA9IHJlc3VsdHMubm9kZU5hbWUgJiYgcmVzdWx0cy5ub2RlTmFtZS5sYXN0SW5kZXhPZiggJy4nICk7XG5cblx0XHRpZiAoIGxhc3REb3QgIT09IHVuZGVmaW5lZCAmJiBsYXN0RG90ICE9PSAtIDEgKSB7XG5cblx0XHRcdGNvbnN0IG9iamVjdE5hbWUgPSByZXN1bHRzLm5vZGVOYW1lLnN1YnN0cmluZyggbGFzdERvdCArIDEgKTtcblxuXHRcdFx0Ly8gT2JqZWN0IG5hbWVzIG11c3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFsbG93bGlzdC4gT3RoZXJ3aXNlLCB0aGVyZVxuXHRcdFx0Ly8gaXMgbm8gd2F5IHRvIHBhcnNlICdmb28uYmFyLmJheic6ICdiYXonIG11c3QgYmUgYSBwcm9wZXJ0eSwgYnV0XG5cdFx0XHQvLyAnYmFyJyBjb3VsZCBiZSB0aGUgb2JqZWN0TmFtZSwgb3IgcGFydCBvZiBhIG5vZGVOYW1lICh3aGljaCBjYW5cblx0XHRcdC8vIGluY2x1ZGUgJy4nIGNoYXJhY3RlcnMpLlxuXHRcdFx0aWYgKCBfc3VwcG9ydGVkT2JqZWN0TmFtZXMuaW5kZXhPZiggb2JqZWN0TmFtZSApICE9PSAtIDEgKSB7XG5cblx0XHRcdFx0cmVzdWx0cy5ub2RlTmFtZSA9IHJlc3VsdHMubm9kZU5hbWUuc3Vic3RyaW5nKCAwLCBsYXN0RG90ICk7XG5cdFx0XHRcdHJlc3VsdHMub2JqZWN0TmFtZSA9IG9iamVjdE5hbWU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggcmVzdWx0cy5wcm9wZXJ0eU5hbWUgPT09IG51bGwgfHwgcmVzdWx0cy5wcm9wZXJ0eU5hbWUubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAnICsgdHJhY2tOYW1lICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHR9XG5cblx0c3RhdGljIGZpbmROb2RlKCByb290LCBub2RlTmFtZSApIHtcblxuXHRcdGlmICggISBub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJycgfHwgbm9kZU5hbWUgPT09ICcuJyB8fCBub2RlTmFtZSA9PT0gLSAxIHx8IG5vZGVOYW1lID09PSByb290Lm5hbWUgfHwgbm9kZU5hbWUgPT09IHJvb3QudXVpZCApIHtcblxuXHRcdFx0cmV0dXJuIHJvb3Q7XG5cblx0XHR9XG5cblx0XHQvLyBzZWFyY2ggaW50byBza2VsZXRvbiBib25lcy5cblx0XHRpZiAoIHJvb3Quc2tlbGV0b24gKSB7XG5cblx0XHRcdGNvbnN0IGJvbmUgPSByb290LnNrZWxldG9uLmdldEJvbmVCeU5hbWUoIG5vZGVOYW1lICk7XG5cblx0XHRcdGlmICggYm9uZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiBib25lO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBzZWFyY2ggaW50byBub2RlIHN1YnRyZWUuXG5cdFx0aWYgKCByb290LmNoaWxkcmVuICkge1xuXG5cdFx0XHRjb25zdCBzZWFyY2hOb2RlU3VidHJlZSA9IGZ1bmN0aW9uICggY2hpbGRyZW4gKSB7XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgY2hpbGROb2RlID0gY2hpbGRyZW5bIGkgXTtcblxuXHRcdFx0XHRcdGlmICggY2hpbGROb2RlLm5hbWUgPT09IG5vZGVOYW1lIHx8IGNoaWxkTm9kZS51dWlkID09PSBub2RlTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNoaWxkTm9kZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHNlYXJjaE5vZGVTdWJ0cmVlKCBjaGlsZE5vZGUuY2hpbGRyZW4gKTtcblxuXHRcdFx0XHRcdGlmICggcmVzdWx0ICkgcmV0dXJuIHJlc3VsdDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHN1YlRyZWVOb2RlID0gc2VhcmNoTm9kZVN1YnRyZWUoIHJvb3QuY2hpbGRyZW4gKTtcblxuXHRcdFx0aWYgKCBzdWJUcmVlTm9kZSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc3ViVHJlZU5vZGU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXG5cdH1cblxuXHQvLyB0aGVzZSBhcmUgdXNlZCB0byBcImJpbmRcIiBhIG5vbmV4aXN0ZW50IHByb3BlcnR5XG5cdF9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpIHt9XG5cdF9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpIHt9XG5cblx0Ly8gR2V0dGVyc1xuXG5cdF9nZXRWYWx1ZV9kaXJlY3QoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0YnVmZmVyWyBvZmZzZXQgXSA9IHRoaXMudGFyZ2V0T2JqZWN0WyB0aGlzLnByb3BlcnR5TmFtZSBdO1xuXG5cdH1cblxuXHRfZ2V0VmFsdWVfYXJyYXkoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0Y29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gc291cmNlLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0YnVmZmVyWyBvZmZzZXQgKysgXSA9IHNvdXJjZVsgaSBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfZ2V0VmFsdWVfYXJyYXlFbGVtZW50KCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdGJ1ZmZlclsgb2Zmc2V0IF0gPSB0aGlzLnJlc29sdmVkUHJvcGVydHlbIHRoaXMucHJvcGVydHlJbmRleCBdO1xuXG5cdH1cblxuXHRfZ2V0VmFsdWVfdG9BcnJheSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSggYnVmZmVyLCBvZmZzZXQgKTtcblxuXHR9XG5cblx0Ly8gRGlyZWN0XG5cblx0X3NldFZhbHVlX2RpcmVjdCggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdFsgdGhpcy5wcm9wZXJ0eU5hbWUgXSA9IGJ1ZmZlclsgb2Zmc2V0IF07XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy50YXJnZXRPYmplY3RbIHRoaXMucHJvcGVydHlOYW1lIF0gPSBidWZmZXJbIG9mZnNldCBdO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMudGFyZ2V0T2JqZWN0WyB0aGlzLnByb3BlcnR5TmFtZSBdID0gYnVmZmVyWyBvZmZzZXQgXTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0Ly8gRW50aXJlQXJyYXlcblxuXHRfc2V0VmFsdWVfYXJyYXkoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0Y29uc3QgZGVzdCA9IHRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGRlc3QubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRkZXN0WyBpIF0gPSBidWZmZXJbIG9mZnNldCArKyBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0Y29uc3QgZGVzdCA9IHRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGRlc3QubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRkZXN0WyBpIF0gPSBidWZmZXJbIG9mZnNldCArKyBdO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHRfc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHRjb25zdCBkZXN0ID0gdGhpcy5yZXNvbHZlZFByb3BlcnR5O1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gZGVzdC5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGRlc3RbIGkgXSA9IGJ1ZmZlclsgb2Zmc2V0ICsrIF07XG5cblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0Ly8gQXJyYXlFbGVtZW50XG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudCggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHlbIHRoaXMucHJvcGVydHlJbmRleCBdID0gYnVmZmVyWyBvZmZzZXQgXTtcblxuXHR9XG5cblx0X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHlbIHRoaXMucHJvcGVydHlJbmRleCBdID0gYnVmZmVyWyBvZmZzZXQgXTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHlbIHRoaXMucHJvcGVydHlJbmRleCBdID0gYnVmZmVyWyBvZmZzZXQgXTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHR9XG5cblx0Ly8gSGFzVG9Gcm9tQXJyYXlcblxuXHRfc2V0VmFsdWVfZnJvbUFycmF5KCBidWZmZXIsIG9mZnNldCApIHtcblxuXHRcdHRoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoIGJ1ZmZlciwgb2Zmc2V0ICk7XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoIGJ1ZmZlciwgb2Zmc2V0ICkge1xuXG5cdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSggYnVmZmVyLCBvZmZzZXQgKTtcblx0XHR0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0fVxuXG5cdF9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSggYnVmZmVyLCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KCBidWZmZXIsIG9mZnNldCApO1xuXHRcdHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHRfZ2V0VmFsdWVfdW5ib3VuZCggdGFyZ2V0QXJyYXksIG9mZnNldCApIHtcblxuXHRcdHRoaXMuYmluZCgpO1xuXHRcdHRoaXMuZ2V0VmFsdWUoIHRhcmdldEFycmF5LCBvZmZzZXQgKTtcblxuXHR9XG5cblx0X3NldFZhbHVlX3VuYm91bmQoIHNvdXJjZUFycmF5LCBvZmZzZXQgKSB7XG5cblx0XHR0aGlzLmJpbmQoKTtcblx0XHR0aGlzLnNldFZhbHVlKCBzb3VyY2VBcnJheSwgb2Zmc2V0ICk7XG5cblx0fVxuXG5cdC8vIGNyZWF0ZSBnZXR0ZXIgLyBzZXR0ZXIgcGFpciBmb3IgYSBwcm9wZXJ0eSBpbiB0aGUgc2NlbmUgZ3JhcGhcblx0YmluZCgpIHtcblxuXHRcdGxldCB0YXJnZXRPYmplY3QgPSB0aGlzLm5vZGU7XG5cdFx0Y29uc3QgcGFyc2VkUGF0aCA9IHRoaXMucGFyc2VkUGF0aDtcblxuXHRcdGNvbnN0IG9iamVjdE5hbWUgPSBwYXJzZWRQYXRoLm9iamVjdE5hbWU7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcGFyc2VkUGF0aC5wcm9wZXJ0eU5hbWU7XG5cdFx0bGV0IHByb3BlcnR5SW5kZXggPSBwYXJzZWRQYXRoLnByb3BlcnR5SW5kZXg7XG5cblx0XHRpZiAoICEgdGFyZ2V0T2JqZWN0ICkge1xuXG5cdFx0XHR0YXJnZXRPYmplY3QgPSBQcm9wZXJ0eUJpbmRpbmcuZmluZE5vZGUoIHRoaXMucm9vdE5vZGUsIHBhcnNlZFBhdGgubm9kZU5hbWUgKSB8fCB0aGlzLnJvb3ROb2RlO1xuXG5cdFx0XHR0aGlzLm5vZGUgPSB0YXJnZXRPYmplY3Q7XG5cblx0XHR9XG5cblx0XHQvLyBzZXQgZmFpbCBzdGF0ZSBzbyB3ZSBjYW4ganVzdCAncmV0dXJuJyBvbiBlcnJvclxuXHRcdHRoaXMuZ2V0VmFsdWUgPSB0aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZTtcblx0XHR0aGlzLnNldFZhbHVlID0gdGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGU7XG5cblx0XHQvLyBlbnN1cmUgdGhlcmUgaXMgYSB2YWx1ZSBub2RlXG5cdFx0aWYgKCAhIHRhcmdldE9iamVjdCApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogJyArIHRoaXMucGF0aCArICcgYnV0IGl0IHdhc25cXCd0IGZvdW5kLicgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdGlmICggb2JqZWN0TmFtZSApIHtcblxuXHRcdFx0bGV0IG9iamVjdEluZGV4ID0gcGFyc2VkUGF0aC5vYmplY3RJbmRleDtcblxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlcyB3ZXJlIHdlIG5lZWQgdG8gcmVhY2ggZGVlcGVyIGludG8gdGhlIGhpZXJhcmNoeSB0byBnZXQgdGhlIGZhY2UgbWF0ZXJpYWxzLi4uLlxuXHRcdFx0c3dpdGNoICggb2JqZWN0TmFtZSApIHtcblxuXHRcdFx0XHRjYXNlICdtYXRlcmlhbHMnOlxuXG5cdFx0XHRcdFx0aWYgKCAhIHRhcmdldE9iamVjdC5tYXRlcmlhbCApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLicsIHRoaXMgKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggISB0YXJnZXRPYmplY3QubWF0ZXJpYWwubWF0ZXJpYWxzICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4nLCB0aGlzICk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3QubWF0ZXJpYWwubWF0ZXJpYWxzO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnYm9uZXMnOlxuXG5cdFx0XHRcdFx0aWYgKCAhIHRhcmdldE9iamVjdC5za2VsZXRvbiApIHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLicsIHRoaXMgKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1pemF0aW9uOiBza2lwIHRoaXMgaWYgcHJvcGVydHlJbmRleCBpcyBhbHJlYWR5IGFuIGludGVnZXJcblx0XHRcdFx0XHQvLyBhbmQgY29udmVydCB0aGUgaW50ZWdlciBzdHJpbmcgdG8gYSB0cnVlIGludGVnZXIuXG5cblx0XHRcdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3Quc2tlbGV0b24uYm9uZXM7XG5cblx0XHRcdFx0XHQvLyBzdXBwb3J0IHJlc29sdmluZyBtb3JwaFRhcmdldCBuYW1lcyBpbnRvIGluZGljZXMuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGFyZ2V0T2JqZWN0Lmxlbmd0aDsgaSArKyApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCB0YXJnZXRPYmplY3RbIGkgXS5uYW1lID09PSBvYmplY3RJbmRleCApIHtcblxuXHRcdFx0XHRcdFx0XHRvYmplY3RJbmRleCA9IGk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0aWYgKCB0YXJnZXRPYmplY3RbIG9iamVjdE5hbWUgXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4nLCB0aGlzICk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3RbIG9iamVjdE5hbWUgXTtcblxuXHRcdFx0fVxuXG5cblx0XHRcdGlmICggb2JqZWN0SW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIHRhcmdldE9iamVjdFsgb2JqZWN0SW5kZXggXSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4nLCB0aGlzLCB0YXJnZXRPYmplY3QgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdFsgb2JqZWN0SW5kZXggXTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gcmVzb2x2ZSBwcm9wZXJ0eVxuXHRcdGNvbnN0IG5vZGVQcm9wZXJ0eSA9IHRhcmdldE9iamVjdFsgcHJvcGVydHlOYW1lIF07XG5cblx0XHRpZiAoIG5vZGVQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBub2RlTmFtZSA9IHBhcnNlZFBhdGgubm9kZU5hbWU7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAnICsgbm9kZU5hbWUgK1xuXHRcdFx0XHQnLicgKyBwcm9wZXJ0eU5hbWUgKyAnIGJ1dCBpdCB3YXNuXFwndCBmb3VuZC4nLCB0YXJnZXRPYmplY3QgKTtcblx0XHRcdHJldHVybjtcblxuXHRcdH1cblxuXHRcdC8vIGRldGVybWluZSB2ZXJzaW9uaW5nIHNjaGVtZVxuXHRcdGxldCB2ZXJzaW9uaW5nID0gdGhpcy5WZXJzaW9uaW5nLk5vbmU7XG5cblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdDtcblxuXHRcdGlmICggdGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlICE9PSB1bmRlZmluZWQgKSB7IC8vIG1hdGVyaWFsXG5cblx0XHRcdHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU7XG5cblx0XHR9IGVsc2UgaWYgKCB0YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZSAhPT0gdW5kZWZpbmVkICkgeyAvLyBub2RlIHRyYW5zZm9ybVxuXG5cdFx0XHR2ZXJzaW9uaW5nID0gdGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7XG5cblx0XHR9XG5cblx0XHQvLyBkZXRlcm1pbmUgaG93IHRoZSBwcm9wZXJ0eSBnZXRzIGJvdW5kXG5cdFx0bGV0IGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7XG5cblx0XHRpZiAoIHByb3BlcnR5SW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gYWNjZXNzIGEgc3ViIGVsZW1lbnQgb2YgdGhlIHByb3BlcnR5IGFycmF5IChvbmx5IHByaW1pdGl2ZXMgYXJlIHN1cHBvcnRlZCByaWdodCBub3cpXG5cblx0XHRcdGlmICggcHJvcGVydHlOYW1lID09PSAnbW9ycGhUYXJnZXRJbmZsdWVuY2VzJyApIHtcblxuXHRcdFx0XHQvLyBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCBza2lwIHRoaXMgaWYgcHJvcGVydHlJbmRleCBpcyBhbHJlYWR5IGFuIGludGVnZXIsIGFuZCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHN0cmluZyB0byBhIHRydWUgaW50ZWdlci5cblxuXHRcdFx0XHQvLyBzdXBwb3J0IHJlc29sdmluZyBtb3JwaFRhcmdldCBuYW1lcyBpbnRvIGluZGljZXMuXG5cdFx0XHRcdGlmICggISB0YXJnZXRPYmplY3QuZ2VvbWV0cnkgKSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuJywgdGhpcyApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCB0YXJnZXRPYmplY3QuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdGlmICggISB0YXJnZXRPYmplY3QuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLicsIHRoaXMgKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggdGFyZ2V0T2JqZWN0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVsgcHJvcGVydHlJbmRleCBdICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdHByb3BlcnR5SW5kZXggPSB0YXJnZXRPYmplY3QubW9ycGhUYXJnZXREaWN0aW9uYXJ5WyBwcm9wZXJ0eUluZGV4IF07XG5cblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJywgdGhpcyApO1xuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0YmluZGluZ1R5cGUgPSB0aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudDtcblxuXHRcdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5ID0gbm9kZVByb3BlcnR5O1xuXHRcdFx0dGhpcy5wcm9wZXJ0eUluZGV4ID0gcHJvcGVydHlJbmRleDtcblxuXHRcdH0gZWxzZSBpZiAoIG5vZGVQcm9wZXJ0eS5mcm9tQXJyYXkgIT09IHVuZGVmaW5lZCAmJiBub2RlUHJvcGVydHkudG9BcnJheSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBtdXN0IHVzZSBjb3B5IGZvciBPYmplY3QzRC5FdWxlci9RdWF0ZXJuaW9uXG5cblx0XHRcdGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheTtcblxuXHRcdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5ID0gbm9kZVByb3BlcnR5O1xuXG5cdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggbm9kZVByb3BlcnR5ICkgKSB7XG5cblx0XHRcdGJpbmRpbmdUeXBlID0gdGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheTtcblxuXHRcdFx0dGhpcy5yZXNvbHZlZFByb3BlcnR5ID0gbm9kZVByb3BlcnR5O1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG5cblx0XHR9XG5cblx0XHQvLyBzZWxlY3QgZ2V0dGVyIC8gc2V0dGVyXG5cdFx0dGhpcy5nZXRWYWx1ZSA9IHRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVsgYmluZGluZ1R5cGUgXTtcblx0XHR0aGlzLnNldFZhbHVlID0gdGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1sgYmluZGluZ1R5cGUgXVsgdmVyc2lvbmluZyBdO1xuXG5cdH1cblxuXHR1bmJpbmQoKSB7XG5cblx0XHR0aGlzLm5vZGUgPSBudWxsO1xuXG5cdFx0Ly8gYmFjayB0byB0aGUgcHJvdG90eXBlIHZlcnNpb24gb2YgZ2V0VmFsdWUgLyBzZXRWYWx1ZVxuXHRcdC8vIG5vdGU6IGF2b2lkaW5nIHRvIG11dGF0ZSB0aGUgc2hhcGUgb2YgJ3RoaXMnIHZpYSAnZGVsZXRlJ1xuXHRcdHRoaXMuZ2V0VmFsdWUgPSB0aGlzLl9nZXRWYWx1ZV91bmJvdW5kO1xuXHRcdHRoaXMuc2V0VmFsdWUgPSB0aGlzLl9zZXRWYWx1ZV91bmJvdW5kO1xuXG5cdH1cblxufVxuXG5Qcm9wZXJ0eUJpbmRpbmcuQ29tcG9zaXRlID0gQ29tcG9zaXRlO1xuXG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLkJpbmRpbmdUeXBlID0ge1xuXHREaXJlY3Q6IDAsXG5cdEVudGlyZUFycmF5OiAxLFxuXHRBcnJheUVsZW1lbnQ6IDIsXG5cdEhhc0Zyb21Ub0FycmF5OiAzXG59O1xuXG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLlZlcnNpb25pbmcgPSB7XG5cdE5vbmU6IDAsXG5cdE5lZWRzVXBkYXRlOiAxLFxuXHRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOiAyXG59O1xuXG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGUgPSBbXG5cblx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LFxuXHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxcblx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXlFbGVtZW50LFxuXHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5LFxuXG5dO1xuXG5Qcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nID0gW1xuXG5cdFtcblx0XHQvLyBEaXJlY3Rcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3QsXG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlLFxuXG5cdF0sIFtcblxuXHRcdC8vIEVudGlyZUFycmF5XG5cblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlLFxuXG5cdF0sIFtcblxuXHRcdC8vIEFycmF5RWxlbWVudFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudCxcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsXG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsXG5cblx0XSwgW1xuXG5cdFx0Ly8gSGFzVG9Gcm9tQXJyYXlcblx0XHRQcm9wZXJ0eUJpbmRpbmcucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXksXG5cdFx0UHJvcGVydHlCaW5kaW5nLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLFxuXHRcdFByb3BlcnR5QmluZGluZy5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlLFxuXG5cdF1cblxuXTtcblxuLyoqXG4gKlxuICogQSBncm91cCBvZiBvYmplY3RzIHRoYXQgcmVjZWl2ZXMgYSBzaGFyZWQgYW5pbWF0aW9uIHN0YXRlLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAtIEFkZCBvYmplY3RzIHlvdSB3b3VsZCBvdGhlcndpc2UgcGFzcyBhcyAncm9vdCcgdG8gdGhlXG4gKiAgICBjb25zdHJ1Y3RvciBvciB0aGUgLmNsaXBBY3Rpb24gbWV0aG9kIG9mIEFuaW1hdGlvbk1peGVyLlxuICpcbiAqICAtIEluc3RlYWQgcGFzcyB0aGlzIG9iamVjdCBhcyAncm9vdCcuXG4gKlxuICogIC0gWW91IGNhbiBhbHNvIGFkZCBhbmQgcmVtb3ZlIG9iamVjdHMgbGF0ZXIgd2hlbiB0aGUgbWl4ZXJcbiAqICAgIGlzIHJ1bm5pbmcuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgICBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXBwZWFyIGFzIG9uZSBvYmplY3QgdG8gdGhlIG1peGVyLFxuICogICAgc28gY2FjaGUgY29udHJvbCBvZiB0aGUgaW5kaXZpZHVhbCBvYmplY3RzIG11c3QgYmUgZG9uZVxuICogICAgb24gdGhlIGdyb3VwLlxuICpcbiAqIExpbWl0YXRpb246XG4gKlxuICogIC0gVGhlIGFuaW1hdGVkIHByb3BlcnRpZXMgbXVzdCBiZSBjb21wYXRpYmxlIGFtb25nIHRoZVxuICogICAgYWxsIG9iamVjdHMgaW4gdGhlIGdyb3VwLlxuICpcbiAqICAtIEEgc2luZ2xlIHByb3BlcnR5IGNhbiBlaXRoZXIgYmUgY29udHJvbGxlZCB0aHJvdWdoIGFcbiAqICAgIHRhcmdldCBncm91cCBvciBkaXJlY3RseSwgYnV0IG5vdCBib3RoLlxuICovXG5cbmNsYXNzIEFuaW1hdGlvbk9iamVjdEdyb3VwIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMudXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuXG5cdFx0Ly8gY2FjaGVkIG9iamVjdHMgZm9sbG93ZWQgYnkgdGhlIGFjdGl2ZSBvbmVzXG5cdFx0dGhpcy5fb2JqZWN0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblxuXHRcdHRoaXMubkNhY2hlZE9iamVjdHNfID0gMDsgLy8gdGhyZXNob2xkXG5cdFx0Ly8gbm90ZTogcmVhZCBieSBQcm9wZXJ0eUJpbmRpbmcuQ29tcG9zaXRlXG5cblx0XHRjb25zdCBpbmRpY2VzID0ge307XG5cdFx0dGhpcy5faW5kaWNlc0J5VVVJRCA9IGluZGljZXM7IC8vIGZvciBib29ra2VlcGluZ1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0aW5kaWNlc1sgYXJndW1lbnRzWyBpIF0udXVpZCBdID0gaTtcblxuXHRcdH1cblxuXHRcdHRoaXMuX3BhdGhzID0gW107IC8vIGluc2lkZTogc3RyaW5nXG5cdFx0dGhpcy5fcGFyc2VkUGF0aHMgPSBbXTsgLy8gaW5zaWRlOiB7IHdlIGRvbid0IGNhcmUsIGhlcmUgfVxuXHRcdHRoaXMuX2JpbmRpbmdzID0gW107IC8vIGluc2lkZTogQXJyYXk8IFByb3BlcnR5QmluZGluZyA+XG5cdFx0dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoID0ge307IC8vIGluc2lkZTogaW5kaWNlcyBpbiB0aGVzZSBhcnJheXNcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdHRoaXMuc3RhdHMgPSB7XG5cblx0XHRcdG9iamVjdHM6IHtcblx0XHRcdFx0Z2V0IHRvdGFsKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9vYmplY3RzLmxlbmd0aDtcblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy50b3RhbCAtIHNjb3BlLm5DYWNoZWRPYmplY3RzXztcblxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Z2V0IGJpbmRpbmdzUGVyT2JqZWN0KCkge1xuXG5cdFx0XHRcdHJldHVybiBzY29wZS5fYmluZGluZ3MubGVuZ3RoO1xuXG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdH1cblxuXHRhZGQoKSB7XG5cblx0XHRjb25zdCBvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdGluZGljZXNCeVVVSUQgPSB0aGlzLl9pbmRpY2VzQnlVVUlELFxuXHRcdFx0cGF0aHMgPSB0aGlzLl9wYXRocyxcblx0XHRcdHBhcnNlZFBhdGhzID0gdGhpcy5fcGFyc2VkUGF0aHMsXG5cdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0bkJpbmRpbmdzID0gYmluZGluZ3MubGVuZ3RoO1xuXG5cdFx0bGV0IGtub3duT2JqZWN0ID0gdW5kZWZpbmVkLFxuXHRcdFx0bk9iamVjdHMgPSBvYmplY3RzLmxlbmd0aCxcblx0XHRcdG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c187XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSBhcmd1bWVudHNbIGkgXSxcblx0XHRcdFx0dXVpZCA9IG9iamVjdC51dWlkO1xuXHRcdFx0bGV0IGluZGV4ID0gaW5kaWNlc0J5VVVJRFsgdXVpZCBdO1xuXG5cdFx0XHRpZiAoIGluZGV4ID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gdW5rbm93biBvYmplY3QgLT4gYWRkIGl0IHRvIHRoZSBBQ1RJVkUgcmVnaW9uXG5cblx0XHRcdFx0aW5kZXggPSBuT2JqZWN0cyArKztcblx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgdXVpZCBdID0gaW5kZXg7XG5cdFx0XHRcdG9iamVjdHMucHVzaCggb2JqZWN0ICk7XG5cblx0XHRcdFx0Ly8gYWNjb3VudGluZyBpcyBkb25lLCBub3cgZG8gdGhlIHNhbWUgZm9yIGFsbCBiaW5kaW5nc1xuXG5cdFx0XHRcdGZvciAoIGxldCBqID0gMCwgbSA9IG5CaW5kaW5nczsgaiAhPT0gbTsgKysgaiApIHtcblxuXHRcdFx0XHRcdGJpbmRpbmdzWyBqIF0ucHVzaCggbmV3IFByb3BlcnR5QmluZGluZyggb2JqZWN0LCBwYXRoc1sgaiBdLCBwYXJzZWRQYXRoc1sgaiBdICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIGluZGV4IDwgbkNhY2hlZE9iamVjdHMgKSB7XG5cblx0XHRcdFx0a25vd25PYmplY3QgPSBvYmplY3RzWyBpbmRleCBdO1xuXG5cdFx0XHRcdC8vIG1vdmUgZXhpc3Rpbmcgb2JqZWN0IHRvIHRoZSBBQ1RJVkUgcmVnaW9uXG5cblx0XHRcdFx0Y29uc3QgZmlyc3RBY3RpdmVJbmRleCA9IC0tIG5DYWNoZWRPYmplY3RzLFxuXHRcdFx0XHRcdGxhc3RDYWNoZWRPYmplY3QgPSBvYmplY3RzWyBmaXJzdEFjdGl2ZUluZGV4IF07XG5cblx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgbGFzdENhY2hlZE9iamVjdC51dWlkIF0gPSBpbmRleDtcblx0XHRcdFx0b2JqZWN0c1sgaW5kZXggXSA9IGxhc3RDYWNoZWRPYmplY3Q7XG5cblx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgdXVpZCBdID0gZmlyc3RBY3RpdmVJbmRleDtcblx0XHRcdFx0b2JqZWN0c1sgZmlyc3RBY3RpdmVJbmRleCBdID0gb2JqZWN0O1xuXG5cdFx0XHRcdC8vIGFjY291bnRpbmcgaXMgZG9uZSwgbm93IGRvIHRoZSBzYW1lIGZvciBhbGwgYmluZGluZ3NcblxuXHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsrIGogKSB7XG5cblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nc0ZvclBhdGggPSBiaW5kaW5nc1sgaiBdLFxuXHRcdFx0XHRcdFx0bGFzdENhY2hlZCA9IGJpbmRpbmdzRm9yUGF0aFsgZmlyc3RBY3RpdmVJbmRleCBdO1xuXG5cdFx0XHRcdFx0bGV0IGJpbmRpbmcgPSBiaW5kaW5nc0ZvclBhdGhbIGluZGV4IF07XG5cblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGluZGV4IF0gPSBsYXN0Q2FjaGVkO1xuXG5cdFx0XHRcdFx0aWYgKCBiaW5kaW5nID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHNpbmNlIHdlIGRvIG5vdCBib3RoZXIgdG8gY3JlYXRlIG5ldyBiaW5kaW5nc1xuXHRcdFx0XHRcdFx0Ly8gZm9yIG9iamVjdHMgdGhhdCBhcmUgY2FjaGVkLCB0aGUgYmluZGluZyBtYXlcblx0XHRcdFx0XHRcdC8vIG9yIG1heSBub3QgZXhpc3RcblxuXHRcdFx0XHRcdFx0YmluZGluZyA9IG5ldyBQcm9wZXJ0eUJpbmRpbmcoIG9iamVjdCwgcGF0aHNbIGogXSwgcGFyc2VkUGF0aHNbIGogXSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoWyBmaXJzdEFjdGl2ZUluZGV4IF0gPSBiaW5kaW5nO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0c1sgaW5kZXggXSAhPT0ga25vd25PYmplY3QgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJlbnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgJyArXG5cdFx0XHRcdFx0J2RldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLicgKTtcblxuXHRcdFx0fSAvLyBlbHNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlXG5cblx0XHR9IC8vIGZvciBhcmd1bWVudHNcblxuXHRcdHRoaXMubkNhY2hlZE9iamVjdHNfID0gbkNhY2hlZE9iamVjdHM7XG5cblx0fVxuXG5cdHJlbW92ZSgpIHtcblxuXHRcdGNvbnN0IG9iamVjdHMgPSB0aGlzLl9vYmplY3RzLFxuXHRcdFx0aW5kaWNlc0J5VVVJRCA9IHRoaXMuX2luZGljZXNCeVVVSUQsXG5cdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0bkJpbmRpbmdzID0gYmluZGluZ3MubGVuZ3RoO1xuXG5cdFx0bGV0IG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c187XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSBhcmd1bWVudHNbIGkgXSxcblx0XHRcdFx0dXVpZCA9IG9iamVjdC51dWlkLFxuXHRcdFx0XHRpbmRleCA9IGluZGljZXNCeVVVSURbIHV1aWQgXTtcblxuXHRcdFx0aWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IG5DYWNoZWRPYmplY3RzICkge1xuXG5cdFx0XHRcdC8vIG1vdmUgZXhpc3Rpbmcgb2JqZWN0IGludG8gdGhlIENBQ0hFRCByZWdpb25cblxuXHRcdFx0XHRjb25zdCBsYXN0Q2FjaGVkSW5kZXggPSBuQ2FjaGVkT2JqZWN0cyArKyxcblx0XHRcdFx0XHRmaXJzdEFjdGl2ZU9iamVjdCA9IG9iamVjdHNbIGxhc3RDYWNoZWRJbmRleCBdO1xuXG5cdFx0XHRcdGluZGljZXNCeVVVSURbIGZpcnN0QWN0aXZlT2JqZWN0LnV1aWQgXSA9IGluZGV4O1xuXHRcdFx0XHRvYmplY3RzWyBpbmRleCBdID0gZmlyc3RBY3RpdmVPYmplY3Q7XG5cblx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgdXVpZCBdID0gbGFzdENhY2hlZEluZGV4O1xuXHRcdFx0XHRvYmplY3RzWyBsYXN0Q2FjaGVkSW5kZXggXSA9IG9iamVjdDtcblxuXHRcdFx0XHQvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArKyBqICkge1xuXG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ3NGb3JQYXRoID0gYmluZGluZ3NbIGogXSxcblx0XHRcdFx0XHRcdGZpcnN0QWN0aXZlID0gYmluZGluZ3NGb3JQYXRoWyBsYXN0Q2FjaGVkSW5kZXggXSxcblx0XHRcdFx0XHRcdGJpbmRpbmcgPSBiaW5kaW5nc0ZvclBhdGhbIGluZGV4IF07XG5cblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGluZGV4IF0gPSBmaXJzdEFjdGl2ZTtcblx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGxhc3RDYWNoZWRJbmRleCBdID0gYmluZGluZztcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH0gLy8gZm9yIGFyZ3VtZW50c1xuXG5cdFx0dGhpcy5uQ2FjaGVkT2JqZWN0c18gPSBuQ2FjaGVkT2JqZWN0cztcblxuXHR9XG5cblx0Ly8gcmVtb3ZlICYgZm9yZ2V0XG5cdHVuY2FjaGUoKSB7XG5cblx0XHRjb25zdCBvYmplY3RzID0gdGhpcy5fb2JqZWN0cyxcblx0XHRcdGluZGljZXNCeVVVSUQgPSB0aGlzLl9pbmRpY2VzQnlVVUlELFxuXHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdG5CaW5kaW5ncyA9IGJpbmRpbmdzLmxlbmd0aDtcblxuXHRcdGxldCBuQ2FjaGVkT2JqZWN0cyA9IHRoaXMubkNhY2hlZE9iamVjdHNfLFxuXHRcdFx0bk9iamVjdHMgPSBvYmplY3RzLmxlbmd0aDtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IG9iamVjdCA9IGFyZ3VtZW50c1sgaSBdLFxuXHRcdFx0XHR1dWlkID0gb2JqZWN0LnV1aWQsXG5cdFx0XHRcdGluZGV4ID0gaW5kaWNlc0J5VVVJRFsgdXVpZCBdO1xuXG5cdFx0XHRpZiAoIGluZGV4ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0ZGVsZXRlIGluZGljZXNCeVVVSURbIHV1aWQgXTtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgbkNhY2hlZE9iamVjdHMgKSB7XG5cblx0XHRcdFx0XHQvLyBvYmplY3QgaXMgY2FjaGVkLCBzaHJpbmsgdGhlIENBQ0hFRCByZWdpb25cblxuXHRcdFx0XHRcdGNvbnN0IGZpcnN0QWN0aXZlSW5kZXggPSAtLSBuQ2FjaGVkT2JqZWN0cyxcblx0XHRcdFx0XHRcdGxhc3RDYWNoZWRPYmplY3QgPSBvYmplY3RzWyBmaXJzdEFjdGl2ZUluZGV4IF0sXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXggPSAtLSBuT2JqZWN0cyxcblx0XHRcdFx0XHRcdGxhc3RPYmplY3QgPSBvYmplY3RzWyBsYXN0SW5kZXggXTtcblxuXHRcdFx0XHRcdC8vIGxhc3QgY2FjaGVkIG9iamVjdCB0YWtlcyB0aGlzIG9iamVjdCdzIHBsYWNlXG5cdFx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgbGFzdENhY2hlZE9iamVjdC51dWlkIF0gPSBpbmRleDtcblx0XHRcdFx0XHRvYmplY3RzWyBpbmRleCBdID0gbGFzdENhY2hlZE9iamVjdDtcblxuXHRcdFx0XHRcdC8vIGxhc3Qgb2JqZWN0IGdvZXMgdG8gdGhlIGFjdGl2YXRlZCBzbG90IGFuZCBwb3Bcblx0XHRcdFx0XHRpbmRpY2VzQnlVVUlEWyBsYXN0T2JqZWN0LnV1aWQgXSA9IGZpcnN0QWN0aXZlSW5kZXg7XG5cdFx0XHRcdFx0b2JqZWN0c1sgZmlyc3RBY3RpdmVJbmRleCBdID0gbGFzdE9iamVjdDtcblx0XHRcdFx0XHRvYmplY3RzLnBvcCgpO1xuXG5cdFx0XHRcdFx0Ly8gYWNjb3VudGluZyBpcyBkb25lLCBub3cgZG8gdGhlIHNhbWUgZm9yIGFsbCBiaW5kaW5nc1xuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBtID0gbkJpbmRpbmdzOyBqICE9PSBtOyArKyBqICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nc0ZvclBhdGggPSBiaW5kaW5nc1sgaiBdLFxuXHRcdFx0XHRcdFx0XHRsYXN0Q2FjaGVkID0gYmluZGluZ3NGb3JQYXRoWyBmaXJzdEFjdGl2ZUluZGV4IF0sXG5cdFx0XHRcdFx0XHRcdGxhc3QgPSBiaW5kaW5nc0ZvclBhdGhbIGxhc3RJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGhbIGluZGV4IF0gPSBsYXN0Q2FjaGVkO1xuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoWyBmaXJzdEFjdGl2ZUluZGV4IF0gPSBsYXN0O1xuXHRcdFx0XHRcdFx0YmluZGluZ3NGb3JQYXRoLnBvcCgpO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBvYmplY3QgaXMgYWN0aXZlLCBqdXN0IHN3YXAgd2l0aCB0aGUgbGFzdCBhbmQgcG9wXG5cblx0XHRcdFx0XHRjb25zdCBsYXN0SW5kZXggPSAtLSBuT2JqZWN0cyxcblx0XHRcdFx0XHRcdGxhc3RPYmplY3QgPSBvYmplY3RzWyBsYXN0SW5kZXggXTtcblxuXHRcdFx0XHRcdGlmICggbGFzdEluZGV4ID4gMCApIHtcblxuXHRcdFx0XHRcdFx0aW5kaWNlc0J5VVVJRFsgbGFzdE9iamVjdC51dWlkIF0gPSBpbmRleDtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG9iamVjdHNbIGluZGV4IF0gPSBsYXN0T2JqZWN0O1xuXHRcdFx0XHRcdG9iamVjdHMucG9wKCk7XG5cblx0XHRcdFx0XHQvLyBhY2NvdW50aW5nIGlzIGRvbmUsIG5vdyBkbyB0aGUgc2FtZSBmb3IgYWxsIGJpbmRpbmdzXG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBuQmluZGluZ3M7IGogIT09IG07ICsrIGogKSB7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdzRm9yUGF0aCA9IGJpbmRpbmdzWyBqIF07XG5cblx0XHRcdFx0XHRcdGJpbmRpbmdzRm9yUGF0aFsgaW5kZXggXSA9IGJpbmRpbmdzRm9yUGF0aFsgbGFzdEluZGV4IF07XG5cdFx0XHRcdFx0XHRiaW5kaW5nc0ZvclBhdGgucG9wKCk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSAvLyBjYWNoZWQgb3IgYWN0aXZlXG5cblx0XHRcdH0gLy8gaWYgb2JqZWN0IGlzIGtub3duXG5cblx0XHR9IC8vIGZvciBhcmd1bWVudHNcblxuXHRcdHRoaXMubkNhY2hlZE9iamVjdHNfID0gbkNhY2hlZE9iamVjdHM7XG5cblx0fVxuXG5cdC8vIEludGVybmFsIGludGVyZmFjZSB1c2VkIGJ5IGJlZnJpZW5kZWQgUHJvcGVydHlCaW5kaW5nLkNvbXBvc2l0ZTpcblxuXHRzdWJzY3JpYmVfKCBwYXRoLCBwYXJzZWRQYXRoICkge1xuXG5cdFx0Ly8gcmV0dXJucyBhbiBhcnJheSBvZiBiaW5kaW5ncyBmb3IgdGhlIGdpdmVuIHBhdGggdGhhdCBpcyBjaGFuZ2VkXG5cdFx0Ly8gYWNjb3JkaW5nIHRvIHRoZSBjb250YWluZWQgb2JqZWN0cyBpbiB0aGUgZ3JvdXBcblxuXHRcdGNvbnN0IGluZGljZXNCeVBhdGggPSB0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg7XG5cdFx0bGV0IGluZGV4ID0gaW5kaWNlc0J5UGF0aFsgcGF0aCBdO1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3M7XG5cblx0XHRpZiAoIGluZGV4ICE9PSB1bmRlZmluZWQgKSByZXR1cm4gYmluZGluZ3NbIGluZGV4IF07XG5cblx0XHRjb25zdCBwYXRocyA9IHRoaXMuX3BhdGhzLFxuXHRcdFx0cGFyc2VkUGF0aHMgPSB0aGlzLl9wYXJzZWRQYXRocyxcblx0XHRcdG9iamVjdHMgPSB0aGlzLl9vYmplY3RzLFxuXHRcdFx0bk9iamVjdHMgPSBvYmplY3RzLmxlbmd0aCxcblx0XHRcdG5DYWNoZWRPYmplY3RzID0gdGhpcy5uQ2FjaGVkT2JqZWN0c18sXG5cdFx0XHRiaW5kaW5nc0ZvclBhdGggPSBuZXcgQXJyYXkoIG5PYmplY3RzICk7XG5cblx0XHRpbmRleCA9IGJpbmRpbmdzLmxlbmd0aDtcblxuXHRcdGluZGljZXNCeVBhdGhbIHBhdGggXSA9IGluZGV4O1xuXG5cdFx0cGF0aHMucHVzaCggcGF0aCApO1xuXHRcdHBhcnNlZFBhdGhzLnB1c2goIHBhcnNlZFBhdGggKTtcblx0XHRiaW5kaW5ncy5wdXNoKCBiaW5kaW5nc0ZvclBhdGggKTtcblxuXHRcdGZvciAoIGxldCBpID0gbkNhY2hlZE9iamVjdHMsIG4gPSBvYmplY3RzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gb2JqZWN0c1sgaSBdO1xuXHRcdFx0YmluZGluZ3NGb3JQYXRoWyBpIF0gPSBuZXcgUHJvcGVydHlCaW5kaW5nKCBvYmplY3QsIHBhdGgsIHBhcnNlZFBhdGggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBiaW5kaW5nc0ZvclBhdGg7XG5cblx0fVxuXG5cdHVuc3Vic2NyaWJlXyggcGF0aCApIHtcblxuXHRcdC8vIHRlbGxzIHRoZSBncm91cCB0byBmb3JnZXQgYWJvdXQgYSBwcm9wZXJ0eSBwYXRoIGFuZCBubyBsb25nZXJcblx0XHQvLyB1cGRhdGUgdGhlIGFycmF5IHByZXZpb3VzbHkgb2J0YWluZWQgd2l0aCAnc3Vic2NyaWJlXydcblxuXHRcdGNvbnN0IGluZGljZXNCeVBhdGggPSB0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsXG5cdFx0XHRpbmRleCA9IGluZGljZXNCeVBhdGhbIHBhdGggXTtcblxuXHRcdGlmICggaW5kZXggIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc3QgcGF0aHMgPSB0aGlzLl9wYXRocyxcblx0XHRcdFx0cGFyc2VkUGF0aHMgPSB0aGlzLl9wYXJzZWRQYXRocyxcblx0XHRcdFx0YmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdFx0bGFzdEJpbmRpbmdzSW5kZXggPSBiaW5kaW5ncy5sZW5ndGggLSAxLFxuXHRcdFx0XHRsYXN0QmluZGluZ3MgPSBiaW5kaW5nc1sgbGFzdEJpbmRpbmdzSW5kZXggXSxcblx0XHRcdFx0bGFzdEJpbmRpbmdzUGF0aCA9IHBhdGhbIGxhc3RCaW5kaW5nc0luZGV4IF07XG5cblx0XHRcdGluZGljZXNCeVBhdGhbIGxhc3RCaW5kaW5nc1BhdGggXSA9IGluZGV4O1xuXG5cdFx0XHRiaW5kaW5nc1sgaW5kZXggXSA9IGxhc3RCaW5kaW5ncztcblx0XHRcdGJpbmRpbmdzLnBvcCgpO1xuXG5cdFx0XHRwYXJzZWRQYXRoc1sgaW5kZXggXSA9IHBhcnNlZFBhdGhzWyBsYXN0QmluZGluZ3NJbmRleCBdO1xuXHRcdFx0cGFyc2VkUGF0aHMucG9wKCk7XG5cblx0XHRcdHBhdGhzWyBpbmRleCBdID0gcGF0aHNbIGxhc3RCaW5kaW5nc0luZGV4IF07XG5cdFx0XHRwYXRocy5wb3AoKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuQW5pbWF0aW9uT2JqZWN0R3JvdXAucHJvdG90eXBlLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXAgPSB0cnVlO1xuXG5jbGFzcyBBbmltYXRpb25BY3Rpb24ge1xuXG5cdGNvbnN0cnVjdG9yKCBtaXhlciwgY2xpcCwgbG9jYWxSb290ID0gbnVsbCwgYmxlbmRNb2RlID0gY2xpcC5ibGVuZE1vZGUgKSB7XG5cblx0XHR0aGlzLl9taXhlciA9IG1peGVyO1xuXHRcdHRoaXMuX2NsaXAgPSBjbGlwO1xuXHRcdHRoaXMuX2xvY2FsUm9vdCA9IGxvY2FsUm9vdDtcblx0XHR0aGlzLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuXHRcdGNvbnN0IHRyYWNrcyA9IGNsaXAudHJhY2tzLFxuXHRcdFx0blRyYWNrcyA9IHRyYWNrcy5sZW5ndGgsXG5cdFx0XHRpbnRlcnBvbGFudHMgPSBuZXcgQXJyYXkoIG5UcmFja3MgKTtcblxuXHRcdGNvbnN0IGludGVycG9sYW50U2V0dGluZ3MgPSB7XG5cdFx0XHRlbmRpbmdTdGFydDogWmVyb0N1cnZhdHVyZUVuZGluZyxcblx0XHRcdGVuZGluZ0VuZDogWmVyb0N1cnZhdHVyZUVuZGluZ1xuXHRcdH07XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG5UcmFja3M7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IGludGVycG9sYW50ID0gdHJhY2tzWyBpIF0uY3JlYXRlSW50ZXJwb2xhbnQoIG51bGwgKTtcblx0XHRcdGludGVycG9sYW50c1sgaSBdID0gaW50ZXJwb2xhbnQ7XG5cdFx0XHRpbnRlcnBvbGFudC5zZXR0aW5ncyA9IGludGVycG9sYW50U2V0dGluZ3M7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzID0gaW50ZXJwb2xhbnRTZXR0aW5ncztcblxuXHRcdHRoaXMuX2ludGVycG9sYW50cyA9IGludGVycG9sYW50czsgLy8gYm91bmQgYnkgdGhlIG1peGVyXG5cblx0XHQvLyBpbnNpZGU6IFByb3BlcnR5TWl4ZXIgKG1hbmFnZWQgYnkgdGhlIG1peGVyKVxuXHRcdHRoaXMuX3Byb3BlcnR5QmluZGluZ3MgPSBuZXcgQXJyYXkoIG5UcmFja3MgKTtcblxuXHRcdHRoaXMuX2NhY2hlSW5kZXggPSBudWxsOyAvLyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VyXG5cdFx0dGhpcy5fYnlDbGlwQ2FjaGVJbmRleCA9IG51bGw7IC8vIGZvciB0aGUgbWVtb3J5IG1hbmFnZXJcblxuXHRcdHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50ID0gbnVsbDtcblx0XHR0aGlzLl93ZWlnaHRJbnRlcnBvbGFudCA9IG51bGw7XG5cblx0XHR0aGlzLmxvb3AgPSBMb29wUmVwZWF0O1xuXHRcdHRoaXMuX2xvb3BDb3VudCA9IC0gMTtcblxuXHRcdC8vIGdsb2JhbCBtaXhlciB0aW1lIHdoZW4gdGhlIGFjdGlvbiBpcyB0byBiZSBzdGFydGVkXG5cdFx0Ly8gaXQncyBzZXQgYmFjayB0byAnbnVsbCcgdXBvbiBzdGFydCBvZiB0aGUgYWN0aW9uXG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDtcblxuXHRcdC8vIHNjYWxlZCBsb2NhbCB0aW1lIG9mIHRoZSBhY3Rpb25cblx0XHQvLyBnZXRzIGNsYW1wZWQgb3Igd3JhcHBlZCB0byAwLi5jbGlwLmR1cmF0aW9uIGFjY29yZGluZyB0byBsb29wXG5cdFx0dGhpcy50aW1lID0gMDtcblxuXHRcdHRoaXMudGltZVNjYWxlID0gMTtcblx0XHR0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUgPSAxO1xuXG5cdFx0dGhpcy53ZWlnaHQgPSAxO1xuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IDE7XG5cblx0XHR0aGlzLnJlcGV0aXRpb25zID0gSW5maW5pdHk7IC8vIG5vLiBvZiByZXBldGl0aW9ucyB3aGVuIGxvb3BpbmdcblxuXHRcdHRoaXMucGF1c2VkID0gZmFsc2U7IC8vIHRydWUgLT4gemVybyBlZmZlY3RpdmUgdGltZSBzY2FsZVxuXHRcdHRoaXMuZW5hYmxlZCA9IHRydWU7IC8vIGZhbHNlIC0+IHplcm8gZWZmZWN0aXZlIHdlaWdodFxuXG5cdFx0dGhpcy5jbGFtcFdoZW5GaW5pc2hlZCA9IGZhbHNlOy8vIGtlZXAgZmVlZGluZyB0aGUgbGFzdCBmcmFtZT9cblxuXHRcdHRoaXMuemVyb1Nsb3BlQXRTdGFydCA9IHRydWU7Ly8gZm9yIHNtb290aCBpbnRlcnBvbGF0aW9uIHcvbyBzZXBhcmF0ZVxuXHRcdHRoaXMuemVyb1Nsb3BlQXRFbmQgPSB0cnVlOy8vIGNsaXBzIGZvciBzdGFydCwgbG9vcCBhbmQgZW5kXG5cblx0fVxuXG5cdC8vIFN0YXRlICYgU2NoZWR1bGluZ1xuXG5cdHBsYXkoKSB7XG5cblx0XHR0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24oIHRoaXMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzdG9wKCkge1xuXG5cdFx0dGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24oIHRoaXMgKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc2V0KCk7XG5cblx0fVxuXG5cdHJlc2V0KCkge1xuXG5cdFx0dGhpcy5wYXVzZWQgPSBmYWxzZTtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy50aW1lID0gMDsgLy8gcmVzdGFydCBjbGlwXG5cdFx0dGhpcy5fbG9vcENvdW50ID0gLSAxOy8vIGZvcmdldCBwcmV2aW91cyBsb29wc1xuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7Ly8gZm9yZ2V0IHNjaGVkdWxpbmdcblxuXHRcdHJldHVybiB0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpO1xuXG5cdH1cblxuXHRpc1J1bm5pbmcoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5lbmFibGVkICYmICEgdGhpcy5wYXVzZWQgJiYgdGhpcy50aW1lU2NhbGUgIT09IDAgJiZcblx0XHRcdHRoaXMuX3N0YXJ0VGltZSA9PT0gbnVsbCAmJiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24oIHRoaXMgKTtcblxuXHR9XG5cblx0Ly8gcmV0dXJuIHRydWUgd2hlbiBwbGF5IGhhcyBiZWVuIGNhbGxlZFxuXHRpc1NjaGVkdWxlZCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24oIHRoaXMgKTtcblxuXHR9XG5cblx0c3RhcnRBdCggdGltZSApIHtcblxuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IHRpbWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0TG9vcCggbW9kZSwgcmVwZXRpdGlvbnMgKSB7XG5cblx0XHR0aGlzLmxvb3AgPSBtb2RlO1xuXHRcdHRoaXMucmVwZXRpdGlvbnMgPSByZXBldGl0aW9ucztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyBXZWlnaHRcblxuXHQvLyBzZXQgdGhlIHdlaWdodCBzdG9wcGluZyBhbnkgc2NoZWR1bGVkIGZhZGluZ1xuXHQvLyBhbHRob3VnaCAuZW5hYmxlZCA9IGZhbHNlIHlpZWxkcyBhbiBlZmZlY3RpdmUgd2VpZ2h0IG9mIHplcm8sIHRoaXNcblx0Ly8gbWV0aG9kIGRvZXMgKm5vdCogY2hhbmdlIC5lbmFibGVkLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGNvbmZ1c2luZ1xuXHRzZXRFZmZlY3RpdmVXZWlnaHQoIHdlaWdodCApIHtcblxuXHRcdHRoaXMud2VpZ2h0ID0gd2VpZ2h0O1xuXG5cdFx0Ly8gbm90ZTogc2FtZSBsb2dpYyBhcyB3aGVuIHVwZGF0ZWQgYXQgcnVudGltZVxuXHRcdHRoaXMuX2VmZmVjdGl2ZVdlaWdodCA9IHRoaXMuZW5hYmxlZCA/IHdlaWdodCA6IDA7XG5cblx0XHRyZXR1cm4gdGhpcy5zdG9wRmFkaW5nKCk7XG5cblx0fVxuXG5cdC8vIHJldHVybiB0aGUgd2VpZ2h0IGNvbnNpZGVyaW5nIGZhZGluZyBhbmQgLmVuYWJsZWRcblx0Z2V0RWZmZWN0aXZlV2VpZ2h0KCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodDtcblxuXHR9XG5cblx0ZmFkZUluKCBkdXJhdGlvbiApIHtcblxuXHRcdHJldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyggZHVyYXRpb24sIDAsIDEgKTtcblxuXHR9XG5cblx0ZmFkZU91dCggZHVyYXRpb24gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcoIGR1cmF0aW9uLCAxLCAwICk7XG5cblx0fVxuXG5cdGNyb3NzRmFkZUZyb20oIGZhZGVPdXRBY3Rpb24sIGR1cmF0aW9uLCB3YXJwICkge1xuXG5cdFx0ZmFkZU91dEFjdGlvbi5mYWRlT3V0KCBkdXJhdGlvbiApO1xuXHRcdHRoaXMuZmFkZUluKCBkdXJhdGlvbiApO1xuXG5cdFx0aWYgKCB3YXJwICkge1xuXG5cdFx0XHRjb25zdCBmYWRlSW5EdXJhdGlvbiA9IHRoaXMuX2NsaXAuZHVyYXRpb24sXG5cdFx0XHRcdGZhZGVPdXREdXJhdGlvbiA9IGZhZGVPdXRBY3Rpb24uX2NsaXAuZHVyYXRpb24sXG5cblx0XHRcdFx0c3RhcnRFbmRSYXRpbyA9IGZhZGVPdXREdXJhdGlvbiAvIGZhZGVJbkR1cmF0aW9uLFxuXHRcdFx0XHRlbmRTdGFydFJhdGlvID0gZmFkZUluRHVyYXRpb24gLyBmYWRlT3V0RHVyYXRpb247XG5cblx0XHRcdGZhZGVPdXRBY3Rpb24ud2FycCggMS4wLCBzdGFydEVuZFJhdGlvLCBkdXJhdGlvbiApO1xuXHRcdFx0dGhpcy53YXJwKCBlbmRTdGFydFJhdGlvLCAxLjAsIGR1cmF0aW9uICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y3Jvc3NGYWRlVG8oIGZhZGVJbkFjdGlvbiwgZHVyYXRpb24sIHdhcnAgKSB7XG5cblx0XHRyZXR1cm4gZmFkZUluQWN0aW9uLmNyb3NzRmFkZUZyb20oIHRoaXMsIGR1cmF0aW9uLCB3YXJwICk7XG5cblx0fVxuXG5cdHN0b3BGYWRpbmcoKSB7XG5cblx0XHRjb25zdCB3ZWlnaHRJbnRlcnBvbGFudCA9IHRoaXMuX3dlaWdodEludGVycG9sYW50O1xuXG5cdFx0aWYgKCB3ZWlnaHRJbnRlcnBvbGFudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBudWxsO1xuXHRcdFx0dGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KCB3ZWlnaHRJbnRlcnBvbGFudCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIFRpbWUgU2NhbGUgQ29udHJvbFxuXG5cdC8vIHNldCB0aGUgdGltZSBzY2FsZSBzdG9wcGluZyBhbnkgc2NoZWR1bGVkIHdhcnBpbmdcblx0Ly8gYWx0aG91Z2ggLnBhdXNlZCA9IHRydWUgeWllbGRzIGFuIGVmZmVjdGl2ZSB0aW1lIHNjYWxlIG9mIHplcm8sIHRoaXNcblx0Ly8gbWV0aG9kIGRvZXMgKm5vdCogY2hhbmdlIC5wYXVzZWQsIGJlY2F1c2UgaXQgd291bGQgYmUgY29uZnVzaW5nXG5cdHNldEVmZmVjdGl2ZVRpbWVTY2FsZSggdGltZVNjYWxlICkge1xuXG5cdFx0dGhpcy50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cdFx0dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlID0gdGhpcy5wYXVzZWQgPyAwIDogdGltZVNjYWxlO1xuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKTtcblxuXHR9XG5cblx0Ly8gcmV0dXJuIHRoZSB0aW1lIHNjYWxlIGNvbnNpZGVyaW5nIHdhcnBpbmcgYW5kIC5wYXVzZWRcblx0Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCkge1xuXG5cdFx0cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZTtcblxuXHR9XG5cblx0c2V0RHVyYXRpb24oIGR1cmF0aW9uICkge1xuXG5cdFx0dGhpcy50aW1lU2NhbGUgPSB0aGlzLl9jbGlwLmR1cmF0aW9uIC8gZHVyYXRpb247XG5cblx0XHRyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpO1xuXG5cdH1cblxuXHRzeW5jV2l0aCggYWN0aW9uICkge1xuXG5cdFx0dGhpcy50aW1lID0gYWN0aW9uLnRpbWU7XG5cdFx0dGhpcy50aW1lU2NhbGUgPSBhY3Rpb24udGltZVNjYWxlO1xuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKTtcblxuXHR9XG5cblx0aGFsdCggZHVyYXRpb24gKSB7XG5cblx0XHRyZXR1cm4gdGhpcy53YXJwKCB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsIDAsIGR1cmF0aW9uICk7XG5cblx0fVxuXG5cdHdhcnAoIHN0YXJ0VGltZVNjYWxlLCBlbmRUaW1lU2NhbGUsIGR1cmF0aW9uICkge1xuXG5cdFx0Y29uc3QgbWl4ZXIgPSB0aGlzLl9taXhlcixcblx0XHRcdG5vdyA9IG1peGVyLnRpbWUsXG5cdFx0XHR0aW1lU2NhbGUgPSB0aGlzLnRpbWVTY2FsZTtcblxuXHRcdGxldCBpbnRlcnBvbGFudCA9IHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O1xuXG5cdFx0aWYgKCBpbnRlcnBvbGFudCA9PT0gbnVsbCApIHtcblxuXHRcdFx0aW50ZXJwb2xhbnQgPSBtaXhlci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpO1xuXHRcdFx0dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudDtcblxuXHRcdH1cblxuXHRcdGNvbnN0IHRpbWVzID0gaW50ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zLFxuXHRcdFx0dmFsdWVzID0gaW50ZXJwb2xhbnQuc2FtcGxlVmFsdWVzO1xuXG5cdFx0dGltZXNbIDAgXSA9IG5vdztcblx0XHR0aW1lc1sgMSBdID0gbm93ICsgZHVyYXRpb247XG5cblx0XHR2YWx1ZXNbIDAgXSA9IHN0YXJ0VGltZVNjYWxlIC8gdGltZVNjYWxlO1xuXHRcdHZhbHVlc1sgMSBdID0gZW5kVGltZVNjYWxlIC8gdGltZVNjYWxlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHN0b3BXYXJwaW5nKCkge1xuXG5cdFx0Y29uc3QgdGltZVNjYWxlSW50ZXJwb2xhbnQgPSB0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtcblxuXHRcdGlmICggdGltZVNjYWxlSW50ZXJwb2xhbnQgIT09IG51bGwgKSB7XG5cblx0XHRcdHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50ID0gbnVsbDtcblx0XHRcdHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCggdGltZVNjYWxlSW50ZXJwb2xhbnQgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyBPYmplY3QgQWNjZXNzb3JzXG5cblx0Z2V0TWl4ZXIoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fbWl4ZXI7XG5cblx0fVxuXG5cdGdldENsaXAoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5fY2xpcDtcblxuXHR9XG5cblx0Z2V0Um9vdCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9sb2NhbFJvb3QgfHwgdGhpcy5fbWl4ZXIuX3Jvb3Q7XG5cblx0fVxuXG5cdC8vIEludGVybmFcblxuXHRfdXBkYXRlKCB0aW1lLCBkZWx0YVRpbWUsIHRpbWVEaXJlY3Rpb24sIGFjY3VJbmRleCApIHtcblxuXHRcdC8vIGNhbGxlZCBieSB0aGUgbWl4ZXJcblxuXHRcdGlmICggISB0aGlzLmVuYWJsZWQgKSB7XG5cblx0XHRcdC8vIGNhbGwgLl91cGRhdGVXZWlnaHQoKSB0byB1cGRhdGUgLl9lZmZlY3RpdmVXZWlnaHRcblxuXHRcdFx0dGhpcy5fdXBkYXRlV2VpZ2h0KCB0aW1lICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLl9zdGFydFRpbWU7XG5cblx0XHRpZiAoIHN0YXJ0VGltZSAhPT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNjaGVkdWxlZCBzdGFydCBvZiBhY3Rpb25cblxuXHRcdFx0Y29uc3QgdGltZVJ1bm5pbmcgPSAoIHRpbWUgLSBzdGFydFRpbWUgKSAqIHRpbWVEaXJlY3Rpb247XG5cdFx0XHRpZiAoIHRpbWVSdW5uaW5nIDwgMCB8fCB0aW1lRGlyZWN0aW9uID09PSAwICkge1xuXG5cdFx0XHRcdHJldHVybjsgLy8geWV0IHRvIGNvbWUgLyBkb24ndCBkZWNpZGUgd2hlbiBkZWx0YSA9IDBcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdGFydFxuXG5cdFx0XHR0aGlzLl9zdGFydFRpbWUgPSBudWxsOyAvLyB1bnNjaGVkdWxlXG5cdFx0XHRkZWx0YVRpbWUgPSB0aW1lRGlyZWN0aW9uICogdGltZVJ1bm5pbmc7XG5cblx0XHR9XG5cblx0XHQvLyBhcHBseSB0aW1lIHNjYWxlIGFuZCBhZHZhbmNlIHRpbWVcblxuXHRcdGRlbHRhVGltZSAqPSB0aGlzLl91cGRhdGVUaW1lU2NhbGUoIHRpbWUgKTtcblx0XHRjb25zdCBjbGlwVGltZSA9IHRoaXMuX3VwZGF0ZVRpbWUoIGRlbHRhVGltZSApO1xuXG5cdFx0Ly8gbm90ZTogX3VwZGF0ZVRpbWUgbWF5IGRpc2FibGUgdGhlIGFjdGlvbiByZXN1bHRpbmcgaW5cblx0XHQvLyBhbiBlZmZlY3RpdmUgd2VpZ2h0IG9mIDBcblxuXHRcdGNvbnN0IHdlaWdodCA9IHRoaXMuX3VwZGF0ZVdlaWdodCggdGltZSApO1xuXG5cdFx0aWYgKCB3ZWlnaHQgPiAwICkge1xuXG5cdFx0XHRjb25zdCBpbnRlcnBvbGFudHMgPSB0aGlzLl9pbnRlcnBvbGFudHM7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU1peGVycyA9IHRoaXMuX3Byb3BlcnR5QmluZGluZ3M7XG5cblx0XHRcdHN3aXRjaCAoIHRoaXMuYmxlbmRNb2RlICkge1xuXG5cdFx0XHRcdGNhc2UgQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgaiA9IDAsIG0gPSBpbnRlcnBvbGFudHMubGVuZ3RoOyBqICE9PSBtOyArKyBqICkge1xuXG5cdFx0XHRcdFx0XHRpbnRlcnBvbGFudHNbIGogXS5ldmFsdWF0ZSggY2xpcFRpbWUgKTtcblx0XHRcdFx0XHRcdHByb3BlcnR5TWl4ZXJzWyBqIF0uYWNjdW11bGF0ZUFkZGl0aXZlKCB3ZWlnaHQgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOlxuXHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0Zm9yICggbGV0IGogPSAwLCBtID0gaW50ZXJwb2xhbnRzLmxlbmd0aDsgaiAhPT0gbTsgKysgaiApIHtcblxuXHRcdFx0XHRcdFx0aW50ZXJwb2xhbnRzWyBqIF0uZXZhbHVhdGUoIGNsaXBUaW1lICk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU1peGVyc1sgaiBdLmFjY3VtdWxhdGUoIGFjY3VJbmRleCwgd2VpZ2h0ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0X3VwZGF0ZVdlaWdodCggdGltZSApIHtcblxuXHRcdGxldCB3ZWlnaHQgPSAwO1xuXG5cdFx0aWYgKCB0aGlzLmVuYWJsZWQgKSB7XG5cblx0XHRcdHdlaWdodCA9IHRoaXMud2VpZ2h0O1xuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtcblxuXHRcdFx0aWYgKCBpbnRlcnBvbGFudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCBpbnRlcnBvbGFudFZhbHVlID0gaW50ZXJwb2xhbnQuZXZhbHVhdGUoIHRpbWUgKVsgMCBdO1xuXG5cdFx0XHRcdHdlaWdodCAqPSBpbnRlcnBvbGFudFZhbHVlO1xuXG5cdFx0XHRcdGlmICggdGltZSA+IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9uc1sgMSBdICkge1xuXG5cdFx0XHRcdFx0dGhpcy5zdG9wRmFkaW5nKCk7XG5cblx0XHRcdFx0XHRpZiAoIGludGVycG9sYW50VmFsdWUgPT09IDAgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGZhZGVkIG91dCwgZGlzYWJsZVxuXHRcdFx0XHRcdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0aGlzLl9lZmZlY3RpdmVXZWlnaHQgPSB3ZWlnaHQ7XG5cdFx0cmV0dXJuIHdlaWdodDtcblxuXHR9XG5cblx0X3VwZGF0ZVRpbWVTY2FsZSggdGltZSApIHtcblxuXHRcdGxldCB0aW1lU2NhbGUgPSAwO1xuXG5cdFx0aWYgKCAhIHRoaXMucGF1c2VkICkge1xuXG5cdFx0XHR0aW1lU2NhbGUgPSB0aGlzLnRpbWVTY2FsZTtcblxuXHRcdFx0Y29uc3QgaW50ZXJwb2xhbnQgPSB0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtcblxuXHRcdFx0aWYgKCBpbnRlcnBvbGFudCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRjb25zdCBpbnRlcnBvbGFudFZhbHVlID0gaW50ZXJwb2xhbnQuZXZhbHVhdGUoIHRpbWUgKVsgMCBdO1xuXG5cdFx0XHRcdHRpbWVTY2FsZSAqPSBpbnRlcnBvbGFudFZhbHVlO1xuXG5cdFx0XHRcdGlmICggdGltZSA+IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9uc1sgMSBdICkge1xuXG5cdFx0XHRcdFx0dGhpcy5zdG9wV2FycGluZygpO1xuXG5cdFx0XHRcdFx0aWYgKCB0aW1lU2NhbGUgPT09IDAgKSB7XG5cblx0XHRcdFx0XHRcdC8vIG1vdGlvbiBoYXMgaGFsdGVkLCBwYXVzZVxuXHRcdFx0XHRcdFx0dGhpcy5wYXVzZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gd2FycCBkb25lIC0gYXBwbHkgZmluYWwgdGltZSBzY2FsZVxuXHRcdFx0XHRcdFx0dGhpcy50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cdFx0cmV0dXJuIHRpbWVTY2FsZTtcblxuXHR9XG5cblx0X3VwZGF0ZVRpbWUoIGRlbHRhVGltZSApIHtcblxuXHRcdGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fY2xpcC5kdXJhdGlvbjtcblx0XHRjb25zdCBsb29wID0gdGhpcy5sb29wO1xuXG5cdFx0bGV0IHRpbWUgPSB0aGlzLnRpbWUgKyBkZWx0YVRpbWU7XG5cdFx0bGV0IGxvb3BDb3VudCA9IHRoaXMuX2xvb3BDb3VudDtcblxuXHRcdGNvbnN0IHBpbmdQb25nID0gKCBsb29wID09PSBMb29wUGluZ1BvbmcgKTtcblxuXHRcdGlmICggZGVsdGFUaW1lID09PSAwICkge1xuXG5cdFx0XHRpZiAoIGxvb3BDb3VudCA9PT0gLSAxICkgcmV0dXJuIHRpbWU7XG5cblx0XHRcdHJldHVybiAoIHBpbmdQb25nICYmICggbG9vcENvdW50ICYgMSApID09PSAxICkgPyBkdXJhdGlvbiAtIHRpbWUgOiB0aW1lO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBsb29wID09PSBMb29wT25jZSApIHtcblxuXHRcdFx0aWYgKCBsb29wQ291bnQgPT09IC0gMSApIHtcblxuXHRcdFx0XHQvLyBqdXN0IHN0YXJ0ZWRcblxuXHRcdFx0XHR0aGlzLl9sb29wQ291bnQgPSAwO1xuXHRcdFx0XHR0aGlzLl9zZXRFbmRpbmdzKCB0cnVlLCB0cnVlLCBmYWxzZSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZV9zdG9wOiB7XG5cblx0XHRcdFx0aWYgKCB0aW1lID49IGR1cmF0aW9uICkge1xuXG5cdFx0XHRcdFx0dGltZSA9IGR1cmF0aW9uO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHRpbWUgPCAwICkge1xuXG5cdFx0XHRcdFx0dGltZSA9IDA7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHRoaXMudGltZSA9IHRpbWU7XG5cblx0XHRcdFx0XHRicmVhayBoYW5kbGVfc3RvcDtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCB0aGlzLmNsYW1wV2hlbkZpbmlzaGVkICkgdGhpcy5wYXVzZWQgPSB0cnVlO1xuXHRcdFx0XHRlbHNlIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdHRoaXMudGltZSA9IHRpbWU7XG5cblx0XHRcdFx0dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCgge1xuXHRcdFx0XHRcdHR5cGU6ICdmaW5pc2hlZCcsIGFjdGlvbjogdGhpcyxcblx0XHRcdFx0XHRkaXJlY3Rpb246IGRlbHRhVGltZSA8IDAgPyAtIDEgOiAxXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHsgLy8gcmVwZXRpdGl2ZSBSZXBlYXQgb3IgUGluZ1BvbmdcblxuXHRcdFx0aWYgKCBsb29wQ291bnQgPT09IC0gMSApIHtcblxuXHRcdFx0XHQvLyBqdXN0IHN0YXJ0ZWRcblxuXHRcdFx0XHRpZiAoIGRlbHRhVGltZSA+PSAwICkge1xuXG5cdFx0XHRcdFx0bG9vcENvdW50ID0gMDtcblxuXHRcdFx0XHRcdHRoaXMuX3NldEVuZGluZ3MoIHRydWUsIHRoaXMucmVwZXRpdGlvbnMgPT09IDAsIHBpbmdQb25nICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIHdoZW4gbG9vcGluZyBpbiByZXZlcnNlIGRpcmVjdGlvbiwgdGhlIGluaXRpYWxcblx0XHRcdFx0XHQvLyB0cmFuc2l0aW9uIHRocm91Z2ggemVybyBjb3VudHMgYXMgYSByZXBldGl0aW9uLFxuXHRcdFx0XHRcdC8vIHNvIGxlYXZlIGxvb3BDb3VudCBhdCAtMVxuXG5cdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyggdGhpcy5yZXBldGl0aW9ucyA9PT0gMCwgdHJ1ZSwgcGluZ1BvbmcgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aW1lID49IGR1cmF0aW9uIHx8IHRpbWUgPCAwICkge1xuXG5cdFx0XHRcdC8vIHdyYXAgYXJvdW5kXG5cblx0XHRcdFx0Y29uc3QgbG9vcERlbHRhID0gTWF0aC5mbG9vciggdGltZSAvIGR1cmF0aW9uICk7IC8vIHNpZ25lZFxuXHRcdFx0XHR0aW1lIC09IGR1cmF0aW9uICogbG9vcERlbHRhO1xuXG5cdFx0XHRcdGxvb3BDb3VudCArPSBNYXRoLmFicyggbG9vcERlbHRhICk7XG5cblx0XHRcdFx0Y29uc3QgcGVuZGluZyA9IHRoaXMucmVwZXRpdGlvbnMgLSBsb29wQ291bnQ7XG5cblx0XHRcdFx0aWYgKCBwZW5kaW5nIDw9IDAgKSB7XG5cblx0XHRcdFx0XHQvLyBoYXZlIHRvIHN0b3AgKHN3aXRjaCBzdGF0ZSwgY2xhbXAgdGltZSwgZmlyZSBldmVudClcblxuXHRcdFx0XHRcdGlmICggdGhpcy5jbGFtcFdoZW5GaW5pc2hlZCApIHRoaXMucGF1c2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRlbHNlIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0dGltZSA9IGRlbHRhVGltZSA+IDAgPyBkdXJhdGlvbiA6IDA7XG5cblx0XHRcdFx0XHR0aGlzLnRpbWUgPSB0aW1lO1xuXG5cdFx0XHRcdFx0dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCgge1xuXHRcdFx0XHRcdFx0dHlwZTogJ2ZpbmlzaGVkJywgYWN0aW9uOiB0aGlzLFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkZWx0YVRpbWUgPiAwID8gMSA6IC0gMVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8ga2VlcCBydW5uaW5nXG5cblx0XHRcdFx0XHRpZiAoIHBlbmRpbmcgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdC8vIGVudGVyaW5nIHRoZSBsYXN0IHJvdW5kXG5cblx0XHRcdFx0XHRcdGNvbnN0IGF0U3RhcnQgPSBkZWx0YVRpbWUgPCAwO1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyggYXRTdGFydCwgISBhdFN0YXJ0LCBwaW5nUG9uZyApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RW5kaW5ncyggZmFsc2UsIGZhbHNlLCBwaW5nUG9uZyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5fbG9vcENvdW50ID0gbG9vcENvdW50O1xuXG5cdFx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0XHRcdHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoIHtcblx0XHRcdFx0XHRcdHR5cGU6ICdsb29wJywgYWN0aW9uOiB0aGlzLCBsb29wRGVsdGE6IGxvb3BEZWx0YVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dGhpcy50aW1lID0gdGltZTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHBpbmdQb25nICYmICggbG9vcENvdW50ICYgMSApID09PSAxICkge1xuXG5cdFx0XHRcdC8vIGludmVydCB0aW1lIGZvciB0aGUgXCJwb25nIHJvdW5kXCJcblxuXHRcdFx0XHRyZXR1cm4gZHVyYXRpb24gLSB0aW1lO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZTtcblxuXHR9XG5cblx0X3NldEVuZGluZ3MoIGF0U3RhcnQsIGF0RW5kLCBwaW5nUG9uZyApIHtcblxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztcblxuXHRcdGlmICggcGluZ1BvbmcgKSB7XG5cblx0XHRcdHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gWmVyb1Nsb3BlRW5kaW5nO1xuXHRcdFx0c2V0dGluZ3MuZW5kaW5nRW5kID0gWmVyb1Nsb3BlRW5kaW5nO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gYXNzdW1pbmcgZm9yIExvb3BPbmNlIGF0U3RhcnQgPT0gYXRFbmQgPT0gdHJ1ZVxuXG5cdFx0XHRpZiAoIGF0U3RhcnQgKSB7XG5cblx0XHRcdFx0c2V0dGluZ3MuZW5kaW5nU3RhcnQgPSB0aGlzLnplcm9TbG9wZUF0U3RhcnQgPyBaZXJvU2xvcGVFbmRpbmcgOiBaZXJvQ3VydmF0dXJlRW5kaW5nO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gV3JhcEFyb3VuZEVuZGluZztcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGF0RW5kICkge1xuXG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ0VuZCA9IHRoaXMuemVyb1Nsb3BlQXRFbmQgPyBaZXJvU2xvcGVFbmRpbmcgOiBaZXJvQ3VydmF0dXJlRW5kaW5nO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHNldHRpbmdzLmVuZGluZ0VuZCBcdCA9IFdyYXBBcm91bmRFbmRpbmc7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0X3NjaGVkdWxlRmFkaW5nKCBkdXJhdGlvbiwgd2VpZ2h0Tm93LCB3ZWlnaHRUaGVuICkge1xuXG5cdFx0Y29uc3QgbWl4ZXIgPSB0aGlzLl9taXhlciwgbm93ID0gbWl4ZXIudGltZTtcblx0XHRsZXQgaW50ZXJwb2xhbnQgPSB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtcblxuXHRcdGlmICggaW50ZXJwb2xhbnQgPT09IG51bGwgKSB7XG5cblx0XHRcdGludGVycG9sYW50ID0gbWl4ZXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKTtcblx0XHRcdHRoaXMuX3dlaWdodEludGVycG9sYW50ID0gaW50ZXJwb2xhbnQ7XG5cblx0XHR9XG5cblx0XHRjb25zdCB0aW1lcyA9IGludGVycG9sYW50LnBhcmFtZXRlclBvc2l0aW9ucyxcblx0XHRcdHZhbHVlcyA9IGludGVycG9sYW50LnNhbXBsZVZhbHVlcztcblxuXHRcdHRpbWVzWyAwIF0gPSBub3c7XG5cdFx0dmFsdWVzWyAwIF0gPSB3ZWlnaHROb3c7XG5cdFx0dGltZXNbIDEgXSA9IG5vdyArIGR1cmF0aW9uO1xuXHRcdHZhbHVlc1sgMSBdID0gd2VpZ2h0VGhlbjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBBbmltYXRpb25NaXhlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cblx0Y29uc3RydWN0b3IoIHJvb3QgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcm9vdCA9IHJvb3Q7XG5cdFx0dGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKTtcblx0XHR0aGlzLl9hY2N1SW5kZXggPSAwO1xuXHRcdHRoaXMudGltZSA9IDA7XG5cdFx0dGhpcy50aW1lU2NhbGUgPSAxLjA7XG5cblx0fVxuXG5cdF9iaW5kQWN0aW9uKCBhY3Rpb24sIHByb3RvdHlwZUFjdGlvbiApIHtcblxuXHRcdGNvbnN0IHJvb3QgPSBhY3Rpb24uX2xvY2FsUm9vdCB8fCB0aGlzLl9yb290LFxuXHRcdFx0dHJhY2tzID0gYWN0aW9uLl9jbGlwLnRyYWNrcyxcblx0XHRcdG5UcmFja3MgPSB0cmFja3MubGVuZ3RoLFxuXHRcdFx0YmluZGluZ3MgPSBhY3Rpb24uX3Byb3BlcnR5QmluZGluZ3MsXG5cdFx0XHRpbnRlcnBvbGFudHMgPSBhY3Rpb24uX2ludGVycG9sYW50cyxcblx0XHRcdHJvb3RVdWlkID0gcm9vdC51dWlkLFxuXHRcdFx0YmluZGluZ3NCeVJvb3QgPSB0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU7XG5cblx0XHRsZXQgYmluZGluZ3NCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdGlmICggYmluZGluZ3NCeU5hbWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0YmluZGluZ3NCeU5hbWUgPSB7fTtcblx0XHRcdGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdID0gYmluZGluZ3NCeU5hbWU7XG5cblx0XHR9XG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgIT09IG5UcmFja3M7ICsrIGkgKSB7XG5cblx0XHRcdGNvbnN0IHRyYWNrID0gdHJhY2tzWyBpIF0sXG5cdFx0XHRcdHRyYWNrTmFtZSA9IHRyYWNrLm5hbWU7XG5cblx0XHRcdGxldCBiaW5kaW5nID0gYmluZGluZ3NCeU5hbWVbIHRyYWNrTmFtZSBdO1xuXG5cdFx0XHRpZiAoIGJpbmRpbmcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQrKyBiaW5kaW5nLnJlZmVyZW5jZUNvdW50O1xuXHRcdFx0XHRiaW5kaW5nc1sgaSBdID0gYmluZGluZztcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRiaW5kaW5nID0gYmluZGluZ3NbIGkgXTtcblxuXHRcdFx0XHRpZiAoIGJpbmRpbmcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdC8vIGV4aXN0aW5nIGJpbmRpbmcsIG1ha2Ugc3VyZSB0aGUgY2FjaGUga25vd3NcblxuXHRcdFx0XHRcdGlmICggYmluZGluZy5fY2FjaGVJbmRleCA9PT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0KysgYmluZGluZy5yZWZlcmVuY2VDb3VudDtcblx0XHRcdFx0XHRcdHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyggYmluZGluZywgcm9vdFV1aWQsIHRyYWNrTmFtZSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBwcm90b3R5cGVBY3Rpb24gJiYgcHJvdG90eXBlQWN0aW9uLlxuXHRcdFx0XHRcdF9wcm9wZXJ0eUJpbmRpbmdzWyBpIF0uYmluZGluZy5wYXJzZWRQYXRoO1xuXG5cdFx0XHRcdGJpbmRpbmcgPSBuZXcgUHJvcGVydHlNaXhlcihcblx0XHRcdFx0XHRQcm9wZXJ0eUJpbmRpbmcuY3JlYXRlKCByb290LCB0cmFja05hbWUsIHBhdGggKSxcblx0XHRcdFx0XHR0cmFjay5WYWx1ZVR5cGVOYW1lLCB0cmFjay5nZXRWYWx1ZVNpemUoKSApO1xuXG5cdFx0XHRcdCsrIGJpbmRpbmcucmVmZXJlbmNlQ291bnQ7XG5cdFx0XHRcdHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyggYmluZGluZywgcm9vdFV1aWQsIHRyYWNrTmFtZSApO1xuXG5cdFx0XHRcdGJpbmRpbmdzWyBpIF0gPSBiaW5kaW5nO1xuXG5cdFx0XHR9XG5cblx0XHRcdGludGVycG9sYW50c1sgaSBdLnJlc3VsdEJ1ZmZlciA9IGJpbmRpbmcuYnVmZmVyO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfYWN0aXZhdGVBY3Rpb24oIGFjdGlvbiApIHtcblxuXHRcdGlmICggISB0aGlzLl9pc0FjdGl2ZUFjdGlvbiggYWN0aW9uICkgKSB7XG5cblx0XHRcdGlmICggYWN0aW9uLl9jYWNoZUluZGV4ID09PSBudWxsICkge1xuXG5cdFx0XHRcdC8vIHRoaXMgYWN0aW9uIGhhcyBiZWVuIGZvcmdvdHRlbiBieSB0aGUgY2FjaGUsIGJ1dCB0aGUgdXNlclxuXHRcdFx0XHQvLyBhcHBlYXJzIHRvIGJlIHN0aWxsIHVzaW5nIGl0IC0+IHJlYmluZFxuXG5cdFx0XHRcdGNvbnN0IHJvb3RVdWlkID0gKCBhY3Rpb24uX2xvY2FsUm9vdCB8fCB0aGlzLl9yb290ICkudXVpZCxcblx0XHRcdFx0XHRjbGlwVXVpZCA9IGFjdGlvbi5fY2xpcC51dWlkLFxuXHRcdFx0XHRcdGFjdGlvbnNGb3JDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXTtcblxuXHRcdFx0XHR0aGlzLl9iaW5kQWN0aW9uKCBhY3Rpb24sXG5cdFx0XHRcdFx0YWN0aW9uc0ZvckNsaXAgJiYgYWN0aW9uc0ZvckNsaXAua25vd25BY3Rpb25zWyAwIF0gKTtcblxuXHRcdFx0XHR0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbiggYWN0aW9uLCBjbGlwVXVpZCwgcm9vdFV1aWQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdFx0Ly8gaW5jcmVtZW50IHJlZmVyZW5jZSBjb3VudHMgLyBzb3J0IG91dCBzdGF0ZVxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1sgaSBdO1xuXG5cdFx0XHRcdGlmICggYmluZGluZy51c2VDb3VudCArKyA9PT0gMCApIHtcblxuXHRcdFx0XHRcdHRoaXMuX2xlbmRCaW5kaW5nKCBiaW5kaW5nICk7XG5cdFx0XHRcdFx0YmluZGluZy5zYXZlT3JpZ2luYWxTdGF0ZSgpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9sZW5kQWN0aW9uKCBhY3Rpb24gKTtcblxuXHRcdH1cblxuXHR9XG5cblx0X2RlYWN0aXZhdGVBY3Rpb24oIGFjdGlvbiApIHtcblxuXHRcdGlmICggdGhpcy5faXNBY3RpdmVBY3Rpb24oIGFjdGlvbiApICkge1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdFx0Ly8gZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudHMgLyBzb3J0IG91dCBzdGF0ZVxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkge1xuXG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1sgaSBdO1xuXG5cdFx0XHRcdGlmICggLS0gYmluZGluZy51c2VDb3VudCA9PT0gMCApIHtcblxuXHRcdFx0XHRcdGJpbmRpbmcucmVzdG9yZU9yaWdpbmFsU3RhdGUoKTtcblx0XHRcdFx0XHR0aGlzLl90YWtlQmFja0JpbmRpbmcoIGJpbmRpbmcgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fdGFrZUJhY2tBY3Rpb24oIGFjdGlvbiApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBNZW1vcnkgbWFuYWdlclxuXG5cdF9pbml0TWVtb3J5TWFuYWdlcigpIHtcblxuXHRcdHRoaXMuX2FjdGlvbnMgPSBbXTsgLy8gJ25BY3RpdmVBY3Rpb25zJyBmb2xsb3dlZCBieSBpbmFjdGl2ZSBvbmVzXG5cdFx0dGhpcy5fbkFjdGl2ZUFjdGlvbnMgPSAwO1xuXG5cdFx0dGhpcy5fYWN0aW9uc0J5Q2xpcCA9IHt9O1xuXHRcdC8vIGluc2lkZTpcblx0XHQvLyB7XG5cdFx0Ly8gXHRrbm93bkFjdGlvbnM6IEFycmF5PCBBbmltYXRpb25BY3Rpb24gPiAtIHVzZWQgYXMgcHJvdG90eXBlc1xuXHRcdC8vIFx0YWN0aW9uQnlSb290OiBBbmltYXRpb25BY3Rpb24gLSBsb29rdXBcblx0XHQvLyB9XG5cblxuXHRcdHRoaXMuX2JpbmRpbmdzID0gW107IC8vICduQWN0aXZlQmluZGluZ3MnIGZvbGxvd2VkIGJ5IGluYWN0aXZlIG9uZXNcblx0XHR0aGlzLl9uQWN0aXZlQmluZGluZ3MgPSAwO1xuXG5cdFx0dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lID0ge307IC8vIGluc2lkZTogTWFwPCBuYW1lLCBQcm9wZXJ0eU1peGVyID5cblxuXG5cdFx0dGhpcy5fY29udHJvbEludGVycG9sYW50cyA9IFtdOyAvLyBzYW1lIGdhbWUgYXMgYWJvdmVcblx0XHR0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyA9IDA7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHR0aGlzLnN0YXRzID0ge1xuXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGdldCB0b3RhbCgpIHtcblxuXHRcdFx0XHRcdHJldHVybiBzY29wZS5fYWN0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0IGluVXNlKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9uQWN0aXZlQWN0aW9ucztcblxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YmluZGluZ3M6IHtcblx0XHRcdFx0Z2V0IHRvdGFsKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9iaW5kaW5ncy5sZW5ndGg7XG5cblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0IGluVXNlKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9uQWN0aXZlQmluZGluZ3M7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbnRyb2xJbnRlcnBvbGFudHM6IHtcblx0XHRcdFx0Z2V0IHRvdGFsKCkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNjb3BlLl9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aDtcblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQgaW5Vc2UoKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gc2NvcGUuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH07XG5cblx0fVxuXG5cdC8vIE1lbW9yeSBtYW5hZ2VtZW50IGZvciBBbmltYXRpb25BY3Rpb24gb2JqZWN0c1xuXG5cdF9pc0FjdGl2ZUFjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0Y29uc3QgaW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXg7XG5cdFx0cmV0dXJuIGluZGV4ICE9PSBudWxsICYmIGluZGV4IDwgdGhpcy5fbkFjdGl2ZUFjdGlvbnM7XG5cblx0fVxuXG5cdF9hZGRJbmFjdGl2ZUFjdGlvbiggYWN0aW9uLCBjbGlwVXVpZCwgcm9vdFV1aWQgKSB7XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwO1xuXG5cdFx0bGV0IGFjdGlvbnNGb3JDbGlwID0gYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXTtcblxuXHRcdGlmICggYWN0aW9uc0ZvckNsaXAgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0YWN0aW9uc0ZvckNsaXAgPSB7XG5cblx0XHRcdFx0a25vd25BY3Rpb25zOiBbIGFjdGlvbiBdLFxuXHRcdFx0XHRhY3Rpb25CeVJvb3Q6IHt9XG5cblx0XHRcdH07XG5cblx0XHRcdGFjdGlvbi5fYnlDbGlwQ2FjaGVJbmRleCA9IDA7XG5cblx0XHRcdGFjdGlvbnNCeUNsaXBbIGNsaXBVdWlkIF0gPSBhY3Rpb25zRm9yQ2xpcDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnN0IGtub3duQWN0aW9ucyA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucztcblxuXHRcdFx0YWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4ID0ga25vd25BY3Rpb25zLmxlbmd0aDtcblx0XHRcdGtub3duQWN0aW9ucy5wdXNoKCBhY3Rpb24gKTtcblxuXHRcdH1cblxuXHRcdGFjdGlvbi5fY2FjaGVJbmRleCA9IGFjdGlvbnMubGVuZ3RoO1xuXHRcdGFjdGlvbnMucHVzaCggYWN0aW9uICk7XG5cblx0XHRhY3Rpb25zRm9yQ2xpcC5hY3Rpb25CeVJvb3RbIHJvb3RVdWlkIF0gPSBhY3Rpb247XG5cblx0fVxuXG5cdF9yZW1vdmVJbmFjdGl2ZUFjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRsYXN0SW5hY3RpdmVBY3Rpb24gPSBhY3Rpb25zWyBhY3Rpb25zLmxlbmd0aCAtIDEgXSxcblx0XHRcdGNhY2hlSW5kZXggPSBhY3Rpb24uX2NhY2hlSW5kZXg7XG5cblx0XHRsYXN0SW5hY3RpdmVBY3Rpb24uX2NhY2hlSW5kZXggPSBjYWNoZUluZGV4O1xuXHRcdGFjdGlvbnNbIGNhY2hlSW5kZXggXSA9IGxhc3RJbmFjdGl2ZUFjdGlvbjtcblx0XHRhY3Rpb25zLnBvcCgpO1xuXG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gbnVsbDtcblxuXG5cdFx0Y29uc3QgY2xpcFV1aWQgPSBhY3Rpb24uX2NsaXAudXVpZCxcblx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwLFxuXHRcdFx0YWN0aW9uc0ZvckNsaXAgPSBhY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdLFxuXHRcdFx0a25vd25BY3Rpb25zRm9yQ2xpcCA9IGFjdGlvbnNGb3JDbGlwLmtub3duQWN0aW9ucyxcblxuXHRcdFx0bGFzdEtub3duQWN0aW9uID1cblx0XHRcdFx0a25vd25BY3Rpb25zRm9yQ2xpcFsga25vd25BY3Rpb25zRm9yQ2xpcC5sZW5ndGggLSAxIF0sXG5cblx0XHRcdGJ5Q2xpcENhY2hlSW5kZXggPSBhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXg7XG5cblx0XHRsYXN0S25vd25BY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBieUNsaXBDYWNoZUluZGV4O1xuXHRcdGtub3duQWN0aW9uc0ZvckNsaXBbIGJ5Q2xpcENhY2hlSW5kZXggXSA9IGxhc3RLbm93bkFjdGlvbjtcblx0XHRrbm93bkFjdGlvbnNGb3JDbGlwLnBvcCgpO1xuXG5cdFx0YWN0aW9uLl9ieUNsaXBDYWNoZUluZGV4ID0gbnVsbDtcblxuXG5cdFx0Y29uc3QgYWN0aW9uQnlSb290ID0gYWN0aW9uc0ZvckNsaXAuYWN0aW9uQnlSb290LFxuXHRcdFx0cm9vdFV1aWQgPSAoIGFjdGlvbi5fbG9jYWxSb290IHx8IHRoaXMuX3Jvb3QgKS51dWlkO1xuXG5cdFx0ZGVsZXRlIGFjdGlvbkJ5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdGlmICgga25vd25BY3Rpb25zRm9yQ2xpcC5sZW5ndGggPT09IDAgKSB7XG5cblx0XHRcdGRlbGV0ZSBhY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbiggYWN0aW9uICk7XG5cblx0fVxuXG5cdF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKCBhY3Rpb24gKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IGFjdGlvbi5fcHJvcGVydHlCaW5kaW5ncztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgYmluZGluZyA9IGJpbmRpbmdzWyBpIF07XG5cblx0XHRcdGlmICggLS0gYmluZGluZy5yZWZlcmVuY2VDb3VudCA9PT0gMCApIHtcblxuXHRcdFx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoIGJpbmRpbmcgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRfbGVuZEFjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0Ly8gWyBhY3RpdmUgYWN0aW9ucyB8ICBpbmFjdGl2ZSBhY3Rpb25zICBdXG5cdFx0Ly8gWyAgYWN0aXZlIGFjdGlvbnMgPnwgaW5hY3RpdmUgYWN0aW9ucyBdXG5cdFx0Ly8gICAgICAgICAgICAgICAgIHMgICAgICAgIGFcblx0XHQvLyAgICAgICAgICAgICAgICAgIDwtc3dhcC0+XG5cdFx0Ly8gICAgICAgICAgICAgICAgIGEgICAgICAgIHNcblxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0cHJldkluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXG5cdFx0XHRsYXN0QWN0aXZlSW5kZXggPSB0aGlzLl9uQWN0aXZlQWN0aW9ucyArKyxcblxuXHRcdFx0Zmlyc3RJbmFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbIGxhc3RBY3RpdmVJbmRleCBdO1xuXG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gbGFzdEFjdGl2ZUluZGV4O1xuXHRcdGFjdGlvbnNbIGxhc3RBY3RpdmVJbmRleCBdID0gYWN0aW9uO1xuXG5cdFx0Zmlyc3RJbmFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRhY3Rpb25zWyBwcmV2SW5kZXggXSA9IGZpcnN0SW5hY3RpdmVBY3Rpb247XG5cblx0fVxuXG5cdF90YWtlQmFja0FjdGlvbiggYWN0aW9uICkge1xuXG5cdFx0Ly8gWyAgYWN0aXZlIGFjdGlvbnMgIHwgaW5hY3RpdmUgYWN0aW9ucyBdXG5cdFx0Ly8gWyBhY3RpdmUgYWN0aW9ucyB8PCBpbmFjdGl2ZSBhY3Rpb25zICBdXG5cdFx0Ly8gICAgICAgIGEgICAgICAgIHNcblx0XHQvLyAgICAgICAgIDwtc3dhcC0+XG5cdFx0Ly8gICAgICAgIHMgICAgICAgIGFcblxuXHRcdGNvbnN0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLFxuXHRcdFx0cHJldkluZGV4ID0gYWN0aW9uLl9jYWNoZUluZGV4LFxuXG5cdFx0XHRmaXJzdEluYWN0aXZlSW5kZXggPSAtLSB0aGlzLl9uQWN0aXZlQWN0aW9ucyxcblxuXHRcdFx0bGFzdEFjdGl2ZUFjdGlvbiA9IGFjdGlvbnNbIGZpcnN0SW5hY3RpdmVJbmRleCBdO1xuXG5cdFx0YWN0aW9uLl9jYWNoZUluZGV4ID0gZmlyc3RJbmFjdGl2ZUluZGV4O1xuXHRcdGFjdGlvbnNbIGZpcnN0SW5hY3RpdmVJbmRleCBdID0gYWN0aW9uO1xuXG5cdFx0bGFzdEFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRhY3Rpb25zWyBwcmV2SW5kZXggXSA9IGxhc3RBY3RpdmVBY3Rpb247XG5cblx0fVxuXG5cdC8vIE1lbW9yeSBtYW5hZ2VtZW50IGZvciBQcm9wZXJ0eU1peGVyIG9iamVjdHNcblxuXHRfYWRkSW5hY3RpdmVCaW5kaW5nKCBiaW5kaW5nLCByb290VXVpZCwgdHJhY2tOYW1lICkge1xuXG5cdFx0Y29uc3QgYmluZGluZ3NCeVJvb3QgPSB0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsXG5cdFx0XHRiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzO1xuXG5cdFx0bGV0IGJpbmRpbmdCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdGlmICggYmluZGluZ0J5TmFtZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRiaW5kaW5nQnlOYW1lID0ge307XG5cdFx0XHRiaW5kaW5nc0J5Um9vdFsgcm9vdFV1aWQgXSA9IGJpbmRpbmdCeU5hbWU7XG5cblx0XHR9XG5cblx0XHRiaW5kaW5nQnlOYW1lWyB0cmFja05hbWUgXSA9IGJpbmRpbmc7XG5cblx0XHRiaW5kaW5nLl9jYWNoZUluZGV4ID0gYmluZGluZ3MubGVuZ3RoO1xuXHRcdGJpbmRpbmdzLnB1c2goIGJpbmRpbmcgKTtcblxuXHR9XG5cblx0X3JlbW92ZUluYWN0aXZlQmluZGluZyggYmluZGluZyApIHtcblxuXHRcdGNvbnN0IGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ3MsXG5cdFx0XHRwcm9wQmluZGluZyA9IGJpbmRpbmcuYmluZGluZyxcblx0XHRcdHJvb3RVdWlkID0gcHJvcEJpbmRpbmcucm9vdE5vZGUudXVpZCxcblx0XHRcdHRyYWNrTmFtZSA9IHByb3BCaW5kaW5nLnBhdGgsXG5cdFx0XHRiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxcblx0XHRcdGJpbmRpbmdCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFsgcm9vdFV1aWQgXSxcblxuXHRcdFx0bGFzdEluYWN0aXZlQmluZGluZyA9IGJpbmRpbmdzWyBiaW5kaW5ncy5sZW5ndGggLSAxIF0sXG5cdFx0XHRjYWNoZUluZGV4ID0gYmluZGluZy5fY2FjaGVJbmRleDtcblxuXHRcdGxhc3RJbmFjdGl2ZUJpbmRpbmcuX2NhY2hlSW5kZXggPSBjYWNoZUluZGV4O1xuXHRcdGJpbmRpbmdzWyBjYWNoZUluZGV4IF0gPSBsYXN0SW5hY3RpdmVCaW5kaW5nO1xuXHRcdGJpbmRpbmdzLnBvcCgpO1xuXG5cdFx0ZGVsZXRlIGJpbmRpbmdCeU5hbWVbIHRyYWNrTmFtZSBdO1xuXG5cdFx0aWYgKCBPYmplY3Qua2V5cyggYmluZGluZ0J5TmFtZSApLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0ZGVsZXRlIGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRfbGVuZEJpbmRpbmcoIGJpbmRpbmcgKSB7XG5cblx0XHRjb25zdCBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzLFxuXHRcdFx0cHJldkluZGV4ID0gYmluZGluZy5fY2FjaGVJbmRleCxcblxuXHRcdFx0bGFzdEFjdGl2ZUluZGV4ID0gdGhpcy5fbkFjdGl2ZUJpbmRpbmdzICsrLFxuXG5cdFx0XHRmaXJzdEluYWN0aXZlQmluZGluZyA9IGJpbmRpbmdzWyBsYXN0QWN0aXZlSW5kZXggXTtcblxuXHRcdGJpbmRpbmcuX2NhY2hlSW5kZXggPSBsYXN0QWN0aXZlSW5kZXg7XG5cdFx0YmluZGluZ3NbIGxhc3RBY3RpdmVJbmRleCBdID0gYmluZGluZztcblxuXHRcdGZpcnN0SW5hY3RpdmVCaW5kaW5nLl9jYWNoZUluZGV4ID0gcHJldkluZGV4O1xuXHRcdGJpbmRpbmdzWyBwcmV2SW5kZXggXSA9IGZpcnN0SW5hY3RpdmVCaW5kaW5nO1xuXG5cdH1cblxuXHRfdGFrZUJhY2tCaW5kaW5nKCBiaW5kaW5nICkge1xuXG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdHByZXZJbmRleCA9IGJpbmRpbmcuX2NhY2hlSW5kZXgsXG5cblx0XHRcdGZpcnN0SW5hY3RpdmVJbmRleCA9IC0tIHRoaXMuX25BY3RpdmVCaW5kaW5ncyxcblxuXHRcdFx0bGFzdEFjdGl2ZUJpbmRpbmcgPSBiaW5kaW5nc1sgZmlyc3RJbmFjdGl2ZUluZGV4IF07XG5cblx0XHRiaW5kaW5nLl9jYWNoZUluZGV4ID0gZmlyc3RJbmFjdGl2ZUluZGV4O1xuXHRcdGJpbmRpbmdzWyBmaXJzdEluYWN0aXZlSW5kZXggXSA9IGJpbmRpbmc7XG5cblx0XHRsYXN0QWN0aXZlQmluZGluZy5fY2FjaGVJbmRleCA9IHByZXZJbmRleDtcblx0XHRiaW5kaW5nc1sgcHJldkluZGV4IF0gPSBsYXN0QWN0aXZlQmluZGluZztcblxuXHR9XG5cblxuXHQvLyBNZW1vcnkgbWFuYWdlbWVudCBvZiBJbnRlcnBvbGFudHMgZm9yIHdlaWdodCBhbmQgdGltZSBzY2FsZVxuXG5cdF9sZW5kQ29udHJvbEludGVycG9sYW50KCkge1xuXG5cdFx0Y29uc3QgaW50ZXJwb2xhbnRzID0gdGhpcy5fY29udHJvbEludGVycG9sYW50cyxcblx0XHRcdGxhc3RBY3RpdmVJbmRleCA9IHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzICsrO1xuXG5cdFx0bGV0IGludGVycG9sYW50ID0gaW50ZXJwb2xhbnRzWyBsYXN0QWN0aXZlSW5kZXggXTtcblxuXHRcdGlmICggaW50ZXJwb2xhbnQgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aW50ZXJwb2xhbnQgPSBuZXcgTGluZWFySW50ZXJwb2xhbnQoXG5cdFx0XHRcdG5ldyBGbG9hdDMyQXJyYXkoIDIgKSwgbmV3IEZsb2F0MzJBcnJheSggMiApLFxuXHRcdFx0XHQxLCB0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyICk7XG5cblx0XHRcdGludGVycG9sYW50Ll9fY2FjaGVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcblx0XHRcdGludGVycG9sYW50c1sgbGFzdEFjdGl2ZUluZGV4IF0gPSBpbnRlcnBvbGFudDtcblxuXHRcdH1cblxuXHRcdHJldHVybiBpbnRlcnBvbGFudDtcblxuXHR9XG5cblx0X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KCBpbnRlcnBvbGFudCApIHtcblxuXHRcdGNvbnN0IGludGVycG9sYW50cyA9IHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsXG5cdFx0XHRwcmV2SW5kZXggPSBpbnRlcnBvbGFudC5fX2NhY2hlSW5kZXgsXG5cblx0XHRcdGZpcnN0SW5hY3RpdmVJbmRleCA9IC0tIHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLFxuXG5cdFx0XHRsYXN0QWN0aXZlSW50ZXJwb2xhbnQgPSBpbnRlcnBvbGFudHNbIGZpcnN0SW5hY3RpdmVJbmRleCBdO1xuXG5cdFx0aW50ZXJwb2xhbnQuX19jYWNoZUluZGV4ID0gZmlyc3RJbmFjdGl2ZUluZGV4O1xuXHRcdGludGVycG9sYW50c1sgZmlyc3RJbmFjdGl2ZUluZGV4IF0gPSBpbnRlcnBvbGFudDtcblxuXHRcdGxhc3RBY3RpdmVJbnRlcnBvbGFudC5fX2NhY2hlSW5kZXggPSBwcmV2SW5kZXg7XG5cdFx0aW50ZXJwb2xhbnRzWyBwcmV2SW5kZXggXSA9IGxhc3RBY3RpdmVJbnRlcnBvbGFudDtcblxuXHR9XG5cblx0Ly8gcmV0dXJuIGFuIGFjdGlvbiBmb3IgYSBjbGlwIG9wdGlvbmFsbHkgdXNpbmcgYSBjdXN0b20gcm9vdCB0YXJnZXRcblx0Ly8gb2JqZWN0ICh0aGlzIG1ldGhvZCBhbGxvY2F0ZXMgYSBsb3Qgb2YgZHluYW1pYyBtZW1vcnkgaW4gY2FzZSBhXG5cdC8vIHByZXZpb3VzbHkgdW5rbm93biBjbGlwL3Jvb3QgY29tYmluYXRpb24gaXMgc3BlY2lmaWVkKVxuXHRjbGlwQWN0aW9uKCBjbGlwLCBvcHRpb25hbFJvb3QsIGJsZW5kTW9kZSApIHtcblxuXHRcdGNvbnN0IHJvb3QgPSBvcHRpb25hbFJvb3QgfHwgdGhpcy5fcm9vdCxcblx0XHRcdHJvb3RVdWlkID0gcm9vdC51dWlkO1xuXG5cdFx0bGV0IGNsaXBPYmplY3QgPSB0eXBlb2YgY2xpcCA9PT0gJ3N0cmluZycgPyBBbmltYXRpb25DbGlwLmZpbmRCeU5hbWUoIHJvb3QsIGNsaXAgKSA6IGNsaXA7XG5cblx0XHRjb25zdCBjbGlwVXVpZCA9IGNsaXBPYmplY3QgIT09IG51bGwgPyBjbGlwT2JqZWN0LnV1aWQgOiBjbGlwO1xuXG5cdFx0Y29uc3QgYWN0aW9uc0ZvckNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwWyBjbGlwVXVpZCBdO1xuXHRcdGxldCBwcm90b3R5cGVBY3Rpb24gPSBudWxsO1xuXG5cdFx0aWYgKCBibGVuZE1vZGUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCBjbGlwT2JqZWN0ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGJsZW5kTW9kZSA9IGNsaXBPYmplY3QuYmxlbmRNb2RlO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGJsZW5kTW9kZSA9IE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCBhY3Rpb25zRm9yQ2xpcCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zdCBleGlzdGluZ0FjdGlvbiA9IGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdFx0aWYgKCBleGlzdGluZ0FjdGlvbiAhPT0gdW5kZWZpbmVkICYmIGV4aXN0aW5nQWN0aW9uLmJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlICkge1xuXG5cdFx0XHRcdHJldHVybiBleGlzdGluZ0FjdGlvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBrbm93IHRoZSBjbGlwLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhcnNlIGFsbFxuXHRcdFx0Ly8gdGhlIGJpbmRpbmdzIGFnYWluIGJ1dCBjYW4ganVzdCBjb3B5XG5cdFx0XHRwcm90b3R5cGVBY3Rpb24gPSBhY3Rpb25zRm9yQ2xpcC5rbm93bkFjdGlvbnNbIDAgXTtcblxuXHRcdFx0Ly8gYWxzbywgdGFrZSB0aGUgY2xpcCBmcm9tIHRoZSBwcm90b3R5cGUgYWN0aW9uXG5cdFx0XHRpZiAoIGNsaXBPYmplY3QgPT09IG51bGwgKVxuXHRcdFx0XHRjbGlwT2JqZWN0ID0gcHJvdG90eXBlQWN0aW9uLl9jbGlwO1xuXG5cdFx0fVxuXG5cdFx0Ly8gY2xpcCBtdXN0IGJlIGtub3duIHdoZW4gc3BlY2lmaWVkIHZpYSBzdHJpbmdcblx0XHRpZiAoIGNsaXBPYmplY3QgPT09IG51bGwgKSByZXR1cm4gbnVsbDtcblxuXHRcdC8vIGFsbG9jYXRlIGFsbCByZXNvdXJjZXMgcmVxdWlyZWQgdG8gcnVuIGl0XG5cdFx0Y29uc3QgbmV3QWN0aW9uID0gbmV3IEFuaW1hdGlvbkFjdGlvbiggdGhpcywgY2xpcE9iamVjdCwgb3B0aW9uYWxSb290LCBibGVuZE1vZGUgKTtcblxuXHRcdHRoaXMuX2JpbmRBY3Rpb24oIG5ld0FjdGlvbiwgcHJvdG90eXBlQWN0aW9uICk7XG5cblx0XHQvLyBhbmQgbWFrZSB0aGUgYWN0aW9uIGtub3duIHRvIHRoZSBtZW1vcnkgbWFuYWdlclxuXHRcdHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKCBuZXdBY3Rpb24sIGNsaXBVdWlkLCByb290VXVpZCApO1xuXG5cdFx0cmV0dXJuIG5ld0FjdGlvbjtcblxuXHR9XG5cblx0Ly8gZ2V0IGFuIGV4aXN0aW5nIGFjdGlvblxuXHRleGlzdGluZ0FjdGlvbiggY2xpcCwgb3B0aW9uYWxSb290ICkge1xuXG5cdFx0Y29uc3Qgcm9vdCA9IG9wdGlvbmFsUm9vdCB8fCB0aGlzLl9yb290LFxuXHRcdFx0cm9vdFV1aWQgPSByb290LnV1aWQsXG5cblx0XHRcdGNsaXBPYmplY3QgPSB0eXBlb2YgY2xpcCA9PT0gJ3N0cmluZycgP1xuXHRcdFx0XHRBbmltYXRpb25DbGlwLmZpbmRCeU5hbWUoIHJvb3QsIGNsaXAgKSA6IGNsaXAsXG5cblx0XHRcdGNsaXBVdWlkID0gY2xpcE9iamVjdCA/IGNsaXBPYmplY3QudXVpZCA6IGNsaXAsXG5cblx0XHRcdGFjdGlvbnNGb3JDbGlwID0gdGhpcy5fYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXTtcblxuXHRcdGlmICggYWN0aW9uc0ZvckNsaXAgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0cmV0dXJuIGFjdGlvbnNGb3JDbGlwLmFjdGlvbkJ5Um9vdFsgcm9vdFV1aWQgXSB8fCBudWxsO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0fVxuXG5cdC8vIGRlYWN0aXZhdGVzIGFsbCBwcmV2aW91c2x5IHNjaGVkdWxlZCBhY3Rpb25zXG5cdHN0b3BBbGxBY3Rpb24oKSB7XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdG5BY3Rpb25zID0gdGhpcy5fbkFjdGl2ZUFjdGlvbnM7XG5cblx0XHRmb3IgKCBsZXQgaSA9IG5BY3Rpb25zIC0gMTsgaSA+PSAwOyAtLSBpICkge1xuXG5cdFx0XHRhY3Rpb25zWyBpIF0uc3RvcCgpO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8vIGFkdmFuY2UgdGhlIHRpbWUgYW5kIHVwZGF0ZSBhcHBseSB0aGUgYW5pbWF0aW9uXG5cdHVwZGF0ZSggZGVsdGFUaW1lICkge1xuXG5cdFx0ZGVsdGFUaW1lICo9IHRoaXMudGltZVNjYWxlO1xuXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMsXG5cdFx0XHRuQWN0aW9ucyA9IHRoaXMuX25BY3RpdmVBY3Rpb25zLFxuXG5cdFx0XHR0aW1lID0gdGhpcy50aW1lICs9IGRlbHRhVGltZSxcblx0XHRcdHRpbWVEaXJlY3Rpb24gPSBNYXRoLnNpZ24oIGRlbHRhVGltZSApLFxuXG5cdFx0XHRhY2N1SW5kZXggPSB0aGlzLl9hY2N1SW5kZXggXj0gMTtcblxuXHRcdC8vIHJ1biBhY3RpdmUgYWN0aW9uc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpICE9PSBuQWN0aW9uczsgKysgaSApIHtcblxuXHRcdFx0Y29uc3QgYWN0aW9uID0gYWN0aW9uc1sgaSBdO1xuXG5cdFx0XHRhY3Rpb24uX3VwZGF0ZSggdGltZSwgZGVsdGFUaW1lLCB0aW1lRGlyZWN0aW9uLCBhY2N1SW5kZXggKTtcblxuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBzY2VuZSBncmFwaFxuXG5cdFx0Y29uc3QgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5ncyxcblx0XHRcdG5CaW5kaW5ncyA9IHRoaXMuX25BY3RpdmVCaW5kaW5ncztcblxuXHRcdGZvciAoIGxldCBpID0gMDsgaSAhPT0gbkJpbmRpbmdzOyArKyBpICkge1xuXG5cdFx0XHRiaW5kaW5nc1sgaSBdLmFwcGx5KCBhY2N1SW5kZXggKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyBBbGxvd3MgeW91IHRvIHNlZWsgdG8gYSBzcGVjaWZpYyB0aW1lIGluIGFuIGFuaW1hdGlvbi5cblx0c2V0VGltZSggdGltZUluU2Vjb25kcyApIHtcblxuXHRcdHRoaXMudGltZSA9IDA7IC8vIFplcm8gb3V0IHRpbWUgYXR0cmlidXRlIGZvciBBbmltYXRpb25NaXhlciBvYmplY3Q7XG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5fYWN0aW9ucy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuX2FjdGlvbnNbIGkgXS50aW1lID0gMDsgLy8gWmVybyBvdXQgdGltZSBhdHRyaWJ1dGUgZm9yIGFsbCBhc3NvY2lhdGVkIEFuaW1hdGlvbkFjdGlvbiBvYmplY3RzLlxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlKCB0aW1lSW5TZWNvbmRzICk7IC8vIFVwZGF0ZSB1c2VkIHRvIHNldCBleGFjdCB0aW1lLiBSZXR1cm5zIFwidGhpc1wiIEFuaW1hdGlvbk1peGVyIG9iamVjdC5cblxuXHR9XG5cblx0Ly8gcmV0dXJuIHRoaXMgbWl4ZXIncyByb290IHRhcmdldCBvYmplY3Rcblx0Z2V0Um9vdCgpIHtcblxuXHRcdHJldHVybiB0aGlzLl9yb290O1xuXG5cdH1cblxuXHQvLyBmcmVlIGFsbCByZXNvdXJjZXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNsaXBcblx0dW5jYWNoZUNsaXAoIGNsaXAgKSB7XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5fYWN0aW9ucyxcblx0XHRcdGNsaXBVdWlkID0gY2xpcC51dWlkLFxuXHRcdFx0YWN0aW9uc0J5Q2xpcCA9IHRoaXMuX2FjdGlvbnNCeUNsaXAsXG5cdFx0XHRhY3Rpb25zRm9yQ2xpcCA9IGFjdGlvbnNCeUNsaXBbIGNsaXBVdWlkIF07XG5cblx0XHRpZiAoIGFjdGlvbnNGb3JDbGlwICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIG5vdGU6IGp1c3QgY2FsbGluZyBfcmVtb3ZlSW5hY3RpdmVBY3Rpb24gd291bGQgbWVzcyB1cCB0aGVcblx0XHRcdC8vIGl0ZXJhdGlvbiBzdGF0ZSBhbmQgYWxzbyByZXF1aXJlIHVwZGF0aW5nIHRoZSBzdGF0ZSB3ZSBjYW5cblx0XHRcdC8vIGp1c3QgdGhyb3cgYXdheVxuXG5cdFx0XHRjb25zdCBhY3Rpb25zVG9SZW1vdmUgPSBhY3Rpb25zRm9yQ2xpcC5rbm93bkFjdGlvbnM7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbiA9IGFjdGlvbnNUb1JlbW92ZS5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7XG5cblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gYWN0aW9uc1RvUmVtb3ZlWyBpIF07XG5cblx0XHRcdFx0dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbiggYWN0aW9uICk7XG5cblx0XHRcdFx0Y29uc3QgY2FjaGVJbmRleCA9IGFjdGlvbi5fY2FjaGVJbmRleCxcblx0XHRcdFx0XHRsYXN0SW5hY3RpdmVBY3Rpb24gPSBhY3Rpb25zWyBhY3Rpb25zLmxlbmd0aCAtIDEgXTtcblxuXHRcdFx0XHRhY3Rpb24uX2NhY2hlSW5kZXggPSBudWxsO1xuXHRcdFx0XHRhY3Rpb24uX2J5Q2xpcENhY2hlSW5kZXggPSBudWxsO1xuXG5cdFx0XHRcdGxhc3RJbmFjdGl2ZUFjdGlvbi5fY2FjaGVJbmRleCA9IGNhY2hlSW5kZXg7XG5cdFx0XHRcdGFjdGlvbnNbIGNhY2hlSW5kZXggXSA9IGxhc3RJbmFjdGl2ZUFjdGlvbjtcblx0XHRcdFx0YWN0aW9ucy5wb3AoKTtcblxuXHRcdFx0XHR0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKCBhY3Rpb24gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRkZWxldGUgYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gZnJlZSBhbGwgcmVzb3VyY2VzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciByb290IHRhcmdldCBvYmplY3Rcblx0dW5jYWNoZVJvb3QoIHJvb3QgKSB7XG5cblx0XHRjb25zdCByb290VXVpZCA9IHJvb3QudXVpZCxcblx0XHRcdGFjdGlvbnNCeUNsaXAgPSB0aGlzLl9hY3Rpb25zQnlDbGlwO1xuXG5cdFx0Zm9yICggY29uc3QgY2xpcFV1aWQgaW4gYWN0aW9uc0J5Q2xpcCApIHtcblxuXHRcdFx0Y29uc3QgYWN0aW9uQnlSb290ID0gYWN0aW9uc0J5Q2xpcFsgY2xpcFV1aWQgXS5hY3Rpb25CeVJvb3QsXG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbkJ5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdFx0aWYgKCBhY3Rpb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKCBhY3Rpb24gKTtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oIGFjdGlvbiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nc0J5Um9vdCA9IHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxcblx0XHRcdGJpbmRpbmdCeU5hbWUgPSBiaW5kaW5nc0J5Um9vdFsgcm9vdFV1aWQgXTtcblxuXHRcdGlmICggYmluZGluZ0J5TmFtZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRmb3IgKCBjb25zdCB0cmFja05hbWUgaW4gYmluZGluZ0J5TmFtZSApIHtcblxuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gYmluZGluZ0J5TmFtZVsgdHJhY2tOYW1lIF07XG5cdFx0XHRcdGJpbmRpbmcucmVzdG9yZU9yaWdpbmFsU3RhdGUoKTtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKCBiaW5kaW5nICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gcmVtb3ZlIGEgdGFyZ2V0ZWQgY2xpcCBmcm9tIHRoZSBjYWNoZVxuXHR1bmNhY2hlQWN0aW9uKCBjbGlwLCBvcHRpb25hbFJvb3QgKSB7XG5cblx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLmV4aXN0aW5nQWN0aW9uKCBjbGlwLCBvcHRpb25hbFJvb3QgKTtcblxuXHRcdGlmICggYWN0aW9uICE9PSBudWxsICkge1xuXG5cdFx0XHR0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKCBhY3Rpb24gKTtcblx0XHRcdHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKCBhY3Rpb24gKTtcblxuXHRcdH1cblxuXHR9XG5cbn1cblxuQW5pbWF0aW9uTWl4ZXIucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSggMSApO1xuXG5jbGFzcyBVbmlmb3JtIHtcblxuXHRjb25zdHJ1Y3RvciggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuJyApO1xuXHRcdFx0dmFsdWUgPSBhcmd1bWVudHNbIDEgXTtcblxuXHRcdH1cblxuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IFVuaWZvcm0oIHRoaXMudmFsdWUuY2xvbmUgPT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlLmNsb25lKCkgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgZXh0ZW5kcyBJbnRlcmxlYXZlZEJ1ZmZlciB7XG5cblx0Y29uc3RydWN0b3IoIGFycmF5LCBzdHJpZGUsIG1lc2hQZXJBdHRyaWJ1dGUgPSAxICkge1xuXG5cdFx0c3VwZXIoIGFycmF5LCBzdHJpZGUgKTtcblxuXHRcdHRoaXMubWVzaFBlckF0dHJpYnV0ZSA9IG1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0fVxuXG5cdGNvcHkoIHNvdXJjZSApIHtcblxuXHRcdHN1cGVyLmNvcHkoIHNvdXJjZSApO1xuXG5cdFx0dGhpcy5tZXNoUGVyQXR0cmlidXRlID0gc291cmNlLm1lc2hQZXJBdHRyaWJ1dGU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoIGRhdGEgKSB7XG5cblx0XHRjb25zdCBpYiA9IHN1cGVyLmNsb25lKCBkYXRhICk7XG5cblx0XHRpYi5tZXNoUGVyQXR0cmlidXRlID0gdGhpcy5tZXNoUGVyQXR0cmlidXRlO1xuXG5cdFx0cmV0dXJuIGliO1xuXG5cdH1cblxuXHR0b0pTT04oIGRhdGEgKSB7XG5cblx0XHRjb25zdCBqc29uID0gc3VwZXIudG9KU09OKCBkYXRhICk7XG5cblx0XHRqc29uLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgPSB0cnVlO1xuXHRcdGpzb24ubWVzaFBlckF0dHJpYnV0ZSA9IHRoaXMubWVzaFBlckF0dHJpYnV0ZTtcblxuXHRcdHJldHVybiBqc29uO1xuXG5cdH1cblxufVxuXG5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciA9IHRydWU7XG5cbmNsYXNzIEdMQnVmZmVyQXR0cmlidXRlIHtcblxuXHRjb25zdHJ1Y3RvciggYnVmZmVyLCB0eXBlLCBpdGVtU2l6ZSwgZWxlbWVudFNpemUsIGNvdW50ICkge1xuXG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7XG5cdFx0dGhpcy5lbGVtZW50U2l6ZSA9IGVsZW1lbnRTaXplO1xuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcblxuXHRcdHRoaXMudmVyc2lvbiA9IDA7XG5cblx0fVxuXG5cdHNldCBuZWVkc1VwZGF0ZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrO1xuXG5cdH1cblxuXHRzZXRCdWZmZXIoIGJ1ZmZlciApIHtcblxuXHRcdHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldFR5cGUoIHR5cGUsIGVsZW1lbnRTaXplICkge1xuXG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLmVsZW1lbnRTaXplID0gZWxlbWVudFNpemU7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0SXRlbVNpemUoIGl0ZW1TaXplICkge1xuXG5cdFx0dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldENvdW50KCBjb3VudCApIHtcblxuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5HTEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuaXNHTEJ1ZmZlckF0dHJpYnV0ZSA9IHRydWU7XG5cbmNsYXNzIFJheWNhc3RlciB7XG5cblx0Y29uc3RydWN0b3IoIG9yaWdpbiwgZGlyZWN0aW9uLCBuZWFyID0gMCwgZmFyID0gSW5maW5pdHkgKSB7XG5cblx0XHR0aGlzLnJheSA9IG5ldyBSYXkoIG9yaWdpbiwgZGlyZWN0aW9uICk7XG5cdFx0Ly8gZGlyZWN0aW9uIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZCAoZm9yIGFjY3VyYXRlIGRpc3RhbmNlIGNhbGN1bGF0aW9ucylcblxuXHRcdHRoaXMubmVhciA9IG5lYXI7XG5cdFx0dGhpcy5mYXIgPSBmYXI7XG5cdFx0dGhpcy5jYW1lcmEgPSBudWxsO1xuXHRcdHRoaXMubGF5ZXJzID0gbmV3IExheWVycygpO1xuXG5cdFx0dGhpcy5wYXJhbXMgPSB7XG5cdFx0XHRNZXNoOiB7fSxcblx0XHRcdExpbmU6IHsgdGhyZXNob2xkOiAxIH0sXG5cdFx0XHRMT0Q6IHt9LFxuXHRcdFx0UG9pbnRzOiB7IHRocmVzaG9sZDogMSB9LFxuXHRcdFx0U3ByaXRlOiB7fVxuXHRcdH07XG5cblx0fVxuXG5cdHNldCggb3JpZ2luLCBkaXJlY3Rpb24gKSB7XG5cblx0XHQvLyBkaXJlY3Rpb24gaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkIChmb3IgYWNjdXJhdGUgZGlzdGFuY2UgY2FsY3VsYXRpb25zKVxuXG5cdFx0dGhpcy5yYXkuc2V0KCBvcmlnaW4sIGRpcmVjdGlvbiApO1xuXG5cdH1cblxuXHRzZXRGcm9tQ2FtZXJhKCBjb29yZHMsIGNhbWVyYSApIHtcblxuXHRcdGlmICggY2FtZXJhICYmIGNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhICkge1xuXG5cdFx0XHR0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjYW1lcmEubWF0cml4V29ybGQgKTtcblx0XHRcdHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoIGNvb3Jkcy54LCBjb29yZHMueSwgMC41ICkudW5wcm9qZWN0KCBjYW1lcmEgKS5zdWIoIHRoaXMucmF5Lm9yaWdpbiApLm5vcm1hbGl6ZSgpO1xuXHRcdFx0dGhpcy5jYW1lcmEgPSBjYW1lcmE7XG5cblx0XHR9IGVsc2UgaWYgKCBjYW1lcmEgJiYgY2FtZXJhLmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHR0aGlzLnJheS5vcmlnaW4uc2V0KCBjb29yZHMueCwgY29vcmRzLnksICggY2FtZXJhLm5lYXIgKyBjYW1lcmEuZmFyICkgLyAoIGNhbWVyYS5uZWFyIC0gY2FtZXJhLmZhciApICkudW5wcm9qZWN0KCBjYW1lcmEgKTsgLy8gc2V0IG9yaWdpbiBpbiBwbGFuZSBvZiBjYW1lcmFcblx0XHRcdHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoIDAsIDAsIC0gMSApLnRyYW5zZm9ybURpcmVjdGlvbiggY2FtZXJhLm1hdHJpeFdvcmxkICk7XG5cdFx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlOiAnICsgY2FtZXJhLnR5cGUgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0aW50ZXJzZWN0T2JqZWN0KCBvYmplY3QsIHJlY3Vyc2l2ZSA9IHRydWUsIGludGVyc2VjdHMgPSBbXSApIHtcblxuXHRcdGludGVyc2VjdE9iamVjdCggb2JqZWN0LCB0aGlzLCBpbnRlcnNlY3RzLCByZWN1cnNpdmUgKTtcblxuXHRcdGludGVyc2VjdHMuc29ydCggYXNjU29ydCApO1xuXG5cdFx0cmV0dXJuIGludGVyc2VjdHM7XG5cblx0fVxuXG5cdGludGVyc2VjdE9iamVjdHMoIG9iamVjdHMsIHJlY3Vyc2l2ZSA9IHRydWUsIGludGVyc2VjdHMgPSBbXSApIHtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgbCA9IG9iamVjdHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0aW50ZXJzZWN0T2JqZWN0KCBvYmplY3RzWyBpIF0sIHRoaXMsIGludGVyc2VjdHMsIHJlY3Vyc2l2ZSApO1xuXG5cdFx0fVxuXG5cdFx0aW50ZXJzZWN0cy5zb3J0KCBhc2NTb3J0ICk7XG5cblx0XHRyZXR1cm4gaW50ZXJzZWN0cztcblxuXHR9XG5cbn1cblxuZnVuY3Rpb24gYXNjU29ydCggYSwgYiApIHtcblxuXHRyZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG5cbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0T2JqZWN0KCBvYmplY3QsIHJheWNhc3RlciwgaW50ZXJzZWN0cywgcmVjdXJzaXZlICkge1xuXG5cdGlmICggb2JqZWN0LmxheWVycy50ZXN0KCByYXljYXN0ZXIubGF5ZXJzICkgKSB7XG5cblx0XHRvYmplY3QucmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICk7XG5cblx0fVxuXG5cdGlmICggcmVjdXJzaXZlID09PSB0cnVlICkge1xuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRpbnRlcnNlY3RPYmplY3QoIGNoaWxkcmVuWyBpIF0sIHJheWNhc3RlciwgaW50ZXJzZWN0cywgdHJ1ZSApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG4vKipcbiAqIFJlZjogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BoZXJpY2FsX2Nvb3JkaW5hdGVfc3lzdGVtXG4gKlxuICogVGhlIHBvbGFyIGFuZ2xlIChwaGkpIGlzIG1lYXN1cmVkIGZyb20gdGhlIHBvc2l0aXZlIHktYXhpcy4gVGhlIHBvc2l0aXZlIHktYXhpcyBpcyB1cC5cbiAqIFRoZSBhemltdXRoYWwgYW5nbGUgKHRoZXRhKSBpcyBtZWFzdXJlZCBmcm9tIHRoZSBwb3NpdGl2ZSB6LWF4aXMuXG4gKi9cblxuY2xhc3MgU3BoZXJpY2FsIHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgcGhpID0gMCwgdGhldGEgPSAwICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7IC8vIHBvbGFyIGFuZ2xlXG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhOyAvLyBhemltdXRoYWwgYW5nbGVcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXQoIHJhZGl1cywgcGhpLCB0aGV0YSApIHtcblxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHRoaXMucGhpID0gcGhpO1xuXHRcdHRoaXMudGhldGEgPSB0aGV0YTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBvdGhlciApIHtcblxuXHRcdHRoaXMucmFkaXVzID0gb3RoZXIucmFkaXVzO1xuXHRcdHRoaXMucGhpID0gb3RoZXIucGhpO1xuXHRcdHRoaXMudGhldGEgPSBvdGhlci50aGV0YTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHQvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlIEVQUyBhbmQgUEktRVBTXG5cdG1ha2VTYWZlKCkge1xuXG5cdFx0Y29uc3QgRVBTID0gMC4wMDAwMDE7XG5cdFx0dGhpcy5waGkgPSBNYXRoLm1heCggRVBTLCBNYXRoLm1pbiggTWF0aC5QSSAtIEVQUywgdGhpcy5waGkgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKCB2ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyggdi54LCB2LnksIHYueiApO1xuXG5cdH1cblxuXHRzZXRGcm9tQ2FydGVzaWFuQ29vcmRzKCB4LCB5LCB6ICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQoIHggKiB4ICsgeSAqIHkgKyB6ICogeiApO1xuXG5cdFx0aWYgKCB0aGlzLnJhZGl1cyA9PT0gMCApIHtcblxuXHRcdFx0dGhpcy50aGV0YSA9IDA7XG5cdFx0XHR0aGlzLnBoaSA9IDA7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLnRoZXRhID0gTWF0aC5hdGFuMiggeCwgeiApO1xuXHRcdFx0dGhpcy5waGkgPSBNYXRoLmFjb3MoIGNsYW1wKCB5IC8gdGhpcy5yYWRpdXMsIC0gMSwgMSApICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG59XG5cbi8qKlxuICogUmVmOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWxpbmRyaWNhbF9jb29yZGluYXRlX3N5c3RlbVxuICovXG5cbmNsYXNzIEN5bGluZHJpY2FsIHtcblxuXHRjb25zdHJ1Y3RvciggcmFkaXVzID0gMSwgdGhldGEgPSAwLCB5ID0gMCApIHtcblxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzOyAvLyBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gYSBwb2ludCBpbiB0aGUgeC16IHBsYW5lXG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhOyAvLyBjb3VudGVyY2xvY2t3aXNlIGFuZ2xlIGluIHRoZSB4LXogcGxhbmUgbWVhc3VyZWQgaW4gcmFkaWFucyBmcm9tIHRoZSBwb3NpdGl2ZSB6LWF4aXNcblx0XHR0aGlzLnkgPSB5OyAvLyBoZWlnaHQgYWJvdmUgdGhlIHgteiBwbGFuZVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHNldCggcmFkaXVzLCB0aGV0YSwgeSApIHtcblxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHRoaXMudGhldGEgPSB0aGV0YTtcblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNvcHkoIG90aGVyICkge1xuXG5cdFx0dGhpcy5yYWRpdXMgPSBvdGhlci5yYWRpdXM7XG5cdFx0dGhpcy50aGV0YSA9IG90aGVyLnRoZXRhO1xuXHRcdHRoaXMueSA9IG90aGVyLnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVZlY3RvcjMoIHYgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKCB2LngsIHYueSwgdi56ICk7XG5cblx0fVxuXG5cdHNldEZyb21DYXJ0ZXNpYW5Db29yZHMoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCggeCAqIHggKyB6ICogeiApO1xuXHRcdHRoaXMudGhldGEgPSBNYXRoLmF0YW4yKCB4LCB6ICk7XG5cdFx0dGhpcy55ID0geTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjbG9uZSgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTtcblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciQ0ID0gLypAX19QVVJFX18qLyBuZXcgVmVjdG9yMigpO1xuXG5jbGFzcyBCb3gyIHtcblxuXHRjb25zdHJ1Y3RvciggbWluID0gbmV3IFZlY3RvcjIoICsgSW5maW5pdHksICsgSW5maW5pdHkgKSwgbWF4ID0gbmV3IFZlY3RvcjIoIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKSApIHtcblxuXHRcdHRoaXMubWluID0gbWluO1xuXHRcdHRoaXMubWF4ID0gbWF4O1xuXG5cdH1cblxuXHRzZXQoIG1pbiwgbWF4ICkge1xuXG5cdFx0dGhpcy5taW4uY29weSggbWluICk7XG5cdFx0dGhpcy5tYXguY29weSggbWF4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c2V0RnJvbVBvaW50cyggcG9pbnRzICkge1xuXG5cdFx0dGhpcy5tYWtlRW1wdHkoKTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuZXhwYW5kQnlQb2ludCggcG9pbnRzWyBpIF0gKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRzZXRGcm9tQ2VudGVyQW5kU2l6ZSggY2VudGVyLCBzaXplICkge1xuXG5cdFx0Y29uc3QgaGFsZlNpemUgPSBfdmVjdG9yJDQuY29weSggc2l6ZSApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTtcblx0XHR0aGlzLm1pbi5jb3B5KCBjZW50ZXIgKS5zdWIoIGhhbGZTaXplICk7XG5cdFx0dGhpcy5tYXguY29weSggY2VudGVyICkuYWRkKCBoYWxmU2l6ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGNsb25lKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG5cdH1cblxuXHRjb3B5KCBib3ggKSB7XG5cblx0XHR0aGlzLm1pbi5jb3B5KCBib3gubWluICk7XG5cdFx0dGhpcy5tYXguY29weSggYm94Lm1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdG1ha2VFbXB0eSgpIHtcblxuXHRcdHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gKyBJbmZpbml0eTtcblx0XHR0aGlzLm1heC54ID0gdGhpcy5tYXgueSA9IC0gSW5maW5pdHk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0aXNFbXB0eSgpIHtcblxuXHRcdC8vIHRoaXMgaXMgYSBtb3JlIHJvYnVzdCBjaGVjayBmb3IgZW1wdHkgdGhhbiAoIHZvbHVtZSA8PSAwICkgYmVjYXVzZSB2b2x1bWUgY2FuIGdldCBwb3NpdGl2ZSB3aXRoIHR3byBuZWdhdGl2ZSBheGVzXG5cblx0XHRyZXR1cm4gKCB0aGlzLm1heC54IDwgdGhpcy5taW4ueCApIHx8ICggdGhpcy5tYXgueSA8IHRoaXMubWluLnkgKTtcblxuXHR9XG5cblx0Z2V0Q2VudGVyKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KCAwLCAwICkgOiB0YXJnZXQuYWRkVmVjdG9ycyggdGhpcy5taW4sIHRoaXMubWF4ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXG5cdH1cblxuXHRnZXRTaXplKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KCAwLCAwICkgOiB0YXJnZXQuc3ViVmVjdG9ycyggdGhpcy5tYXgsIHRoaXMubWluICk7XG5cblx0fVxuXG5cdGV4cGFuZEJ5UG9pbnQoIHBvaW50ICkge1xuXG5cdFx0dGhpcy5taW4ubWluKCBwb2ludCApO1xuXHRcdHRoaXMubWF4Lm1heCggcG9pbnQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRleHBhbmRCeVZlY3RvciggdmVjdG9yICkge1xuXG5cdFx0dGhpcy5taW4uc3ViKCB2ZWN0b3IgKTtcblx0XHR0aGlzLm1heC5hZGQoIHZlY3RvciApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGV4cGFuZEJ5U2NhbGFyKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLm1pbi5hZGRTY2FsYXIoIC0gc2NhbGFyICk7XG5cdFx0dGhpcy5tYXguYWRkU2NhbGFyKCBzY2FsYXIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb250YWluc1BvaW50KCBwb2ludCApIHtcblxuXHRcdHJldHVybiBwb2ludC54IDwgdGhpcy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fFxuXHRcdFx0cG9pbnQueSA8IHRoaXMubWluLnkgfHwgcG9pbnQueSA+IHRoaXMubWF4LnkgPyBmYWxzZSA6IHRydWU7XG5cblx0fVxuXG5cdGNvbnRhaW5zQm94KCBib3ggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5taW4ueCA8PSBib3gubWluLnggJiYgYm94Lm1heC54IDw9IHRoaXMubWF4LnggJiZcblx0XHRcdHRoaXMubWluLnkgPD0gYm94Lm1pbi55ICYmIGJveC5tYXgueSA8PSB0aGlzLm1heC55O1xuXG5cdH1cblxuXHRnZXRQYXJhbWV0ZXIoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHQvLyBUaGlzIGNhbiBwb3RlbnRpYWxseSBoYXZlIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIGJveFxuXHRcdC8vIGhhcyBhIHNpemUgZGltZW5zaW9uIG9mIDAuXG5cblx0XHRyZXR1cm4gdGFyZ2V0LnNldChcblx0XHRcdCggcG9pbnQueCAtIHRoaXMubWluLnggKSAvICggdGhpcy5tYXgueCAtIHRoaXMubWluLnggKSxcblx0XHRcdCggcG9pbnQueSAtIHRoaXMubWluLnkgKSAvICggdGhpcy5tYXgueSAtIHRoaXMubWluLnkgKVxuXHRcdCk7XG5cblx0fVxuXG5cdGludGVyc2VjdHNCb3goIGJveCApIHtcblxuXHRcdC8vIHVzaW5nIDQgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zXG5cblx0XHRyZXR1cm4gYm94Lm1heC54IDwgdGhpcy5taW4ueCB8fCBib3gubWluLnggPiB0aGlzLm1heC54IHx8XG5cdFx0XHRib3gubWF4LnkgPCB0aGlzLm1pbi55IHx8IGJveC5taW4ueSA+IHRoaXMubWF4LnkgPyBmYWxzZSA6IHRydWU7XG5cblx0fVxuXG5cdGNsYW1wUG9pbnQoIHBvaW50LCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApO1xuXG5cdH1cblxuXHRkaXN0YW5jZVRvUG9pbnQoIHBvaW50ICkge1xuXG5cdFx0Y29uc3QgY2xhbXBlZFBvaW50ID0gX3ZlY3RvciQ0LmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApO1xuXHRcdHJldHVybiBjbGFtcGVkUG9pbnQuc3ViKCBwb2ludCApLmxlbmd0aCgpO1xuXG5cdH1cblxuXHRpbnRlcnNlY3QoIGJveCApIHtcblxuXHRcdHRoaXMubWluLm1heCggYm94Lm1pbiApO1xuXHRcdHRoaXMubWF4Lm1pbiggYm94Lm1heCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHVuaW9uKCBib3ggKSB7XG5cblx0XHR0aGlzLm1pbi5taW4oIGJveC5taW4gKTtcblx0XHR0aGlzLm1heC5tYXgoIGJveC5tYXggKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0cmFuc2xhdGUoIG9mZnNldCApIHtcblxuXHRcdHRoaXMubWluLmFkZCggb2Zmc2V0ICk7XG5cdFx0dGhpcy5tYXguYWRkKCBvZmZzZXQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRlcXVhbHMoIGJveCApIHtcblxuXHRcdHJldHVybiBib3gubWluLmVxdWFscyggdGhpcy5taW4gKSAmJiBib3gubWF4LmVxdWFscyggdGhpcy5tYXggKTtcblxuXHR9XG5cbn1cblxuQm94Mi5wcm90b3R5cGUuaXNCb3gyID0gdHJ1ZTtcblxuY29uc3QgX3N0YXJ0UCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9zdGFydEVuZCA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgTGluZTMge1xuXG5cdGNvbnN0cnVjdG9yKCBzdGFydCA9IG5ldyBWZWN0b3IzKCksIGVuZCA9IG5ldyBWZWN0b3IzKCkgKSB7XG5cblx0XHR0aGlzLnN0YXJ0ID0gc3RhcnQ7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cblx0fVxuXG5cdHNldCggc3RhcnQsIGVuZCApIHtcblxuXHRcdHRoaXMuc3RhcnQuY29weSggc3RhcnQgKTtcblx0XHR0aGlzLmVuZC5jb3B5KCBlbmQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBsaW5lICkge1xuXG5cdFx0dGhpcy5zdGFydC5jb3B5KCBsaW5lLnN0YXJ0ICk7XG5cdFx0dGhpcy5lbmQuY29weSggbGluZS5lbmQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRnZXRDZW50ZXIoIHRhcmdldCApIHtcblxuXHRcdHJldHVybiB0YXJnZXQuYWRkVmVjdG9ycyggdGhpcy5zdGFydCwgdGhpcy5lbmQgKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cblx0fVxuXG5cdGRlbHRhKCB0YXJnZXQgKSB7XG5cblx0XHRyZXR1cm4gdGFyZ2V0LnN1YlZlY3RvcnMoIHRoaXMuZW5kLCB0aGlzLnN0YXJ0ICk7XG5cblx0fVxuXG5cdGRpc3RhbmNlU3EoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCggdGhpcy5lbmQgKTtcblxuXHR9XG5cblx0ZGlzdGFuY2UoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKCB0aGlzLmVuZCApO1xuXG5cdH1cblxuXHRhdCggdCwgdGFyZ2V0ICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuZGVsdGEoIHRhcmdldCApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLnN0YXJ0ICk7XG5cblx0fVxuXG5cdGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIoIHBvaW50LCBjbGFtcFRvTGluZSApIHtcblxuXHRcdF9zdGFydFAuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMuc3RhcnQgKTtcblx0XHRfc3RhcnRFbmQuc3ViVmVjdG9ycyggdGhpcy5lbmQsIHRoaXMuc3RhcnQgKTtcblxuXHRcdGNvbnN0IHN0YXJ0RW5kMiA9IF9zdGFydEVuZC5kb3QoIF9zdGFydEVuZCApO1xuXHRcdGNvbnN0IHN0YXJ0RW5kX3N0YXJ0UCA9IF9zdGFydEVuZC5kb3QoIF9zdGFydFAgKTtcblxuXHRcdGxldCB0ID0gc3RhcnRFbmRfc3RhcnRQIC8gc3RhcnRFbmQyO1xuXG5cdFx0aWYgKCBjbGFtcFRvTGluZSApIHtcblxuXHRcdFx0dCA9IGNsYW1wKCB0LCAwLCAxICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdDtcblxuXHR9XG5cblx0Y2xvc2VzdFBvaW50VG9Qb2ludCggcG9pbnQsIGNsYW1wVG9MaW5lLCB0YXJnZXQgKSB7XG5cblx0XHRjb25zdCB0ID0gdGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKCBwb2ludCwgY2xhbXBUb0xpbmUgKTtcblxuXHRcdHJldHVybiB0aGlzLmRlbHRhKCB0YXJnZXQgKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5zdGFydCApO1xuXG5cdH1cblxuXHRhcHBseU1hdHJpeDQoIG1hdHJpeCApIHtcblxuXHRcdHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblx0XHR0aGlzLmVuZC5hcHBseU1hdHJpeDQoIG1hdHJpeCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGVxdWFscyggbGluZSApIHtcblxuXHRcdHJldHVybiBsaW5lLnN0YXJ0LmVxdWFscyggdGhpcy5zdGFydCApICYmIGxpbmUuZW5kLmVxdWFscyggdGhpcy5lbmQgKTtcblxuXHR9XG5cblx0Y2xvbmUoKSB7XG5cblx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7XG5cblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkMyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcblxuY2xhc3MgU3BvdExpZ2h0SGVscGVyIGV4dGVuZHMgT2JqZWN0M0Qge1xuXG5cdGNvbnN0cnVjdG9yKCBsaWdodCwgY29sb3IgKSB7XG5cblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubGlnaHQgPSBsaWdodDtcblx0XHR0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHR0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkO1xuXHRcdHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5jb2xvciA9IGNvbG9yO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblxuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IFtcblx0XHRcdDAsIDAsIDAsIFx0MCwgMCwgMSxcblx0XHRcdDAsIDAsIDAsIFx0MSwgMCwgMSxcblx0XHRcdDAsIDAsIDAsXHQtIDEsIDAsIDEsXG5cdFx0XHQwLCAwLCAwLCBcdDAsIDEsIDEsXG5cdFx0XHQwLCAwLCAwLCBcdDAsIC0gMSwgMVxuXHRcdF07XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGogPSAxLCBsID0gMzI7IGkgPCBsOyBpICsrLCBqICsrICkge1xuXG5cdFx0XHRjb25zdCBwMSA9ICggaSAvIGwgKSAqIE1hdGguUEkgKiAyO1xuXHRcdFx0Y29uc3QgcDIgPSAoIGogLyBsICkgKiBNYXRoLlBJICogMjtcblxuXHRcdFx0cG9zaXRpb25zLnB1c2goXG5cdFx0XHRcdE1hdGguY29zKCBwMSApLCBNYXRoLnNpbiggcDEgKSwgMSxcblx0XHRcdFx0TWF0aC5jb3MoIHAyICksIE1hdGguc2luKCBwMiApLCAxXG5cdFx0XHQpO1xuXG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25zLCAzICkgKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGZvZzogZmFsc2UsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKTtcblxuXHRcdHRoaXMuY29uZSA9IG5ldyBMaW5lU2VnbWVudHMoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXHRcdHRoaXMuYWRkKCB0aGlzLmNvbmUgKTtcblxuXHRcdHRoaXMudXBkYXRlKCk7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLmNvbmUuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMuY29uZS5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblxuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdGNvbnN0IGNvbmVMZW5ndGggPSB0aGlzLmxpZ2h0LmRpc3RhbmNlID8gdGhpcy5saWdodC5kaXN0YW5jZSA6IDEwMDA7XG5cdFx0Y29uc3QgY29uZVdpZHRoID0gY29uZUxlbmd0aCAqIE1hdGgudGFuKCB0aGlzLmxpZ2h0LmFuZ2xlICk7XG5cblx0XHR0aGlzLmNvbmUuc2NhbGUuc2V0KCBjb25lV2lkdGgsIGNvbmVXaWR0aCwgY29uZUxlbmd0aCApO1xuXG5cdFx0X3ZlY3RvciQzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQgKTtcblxuXHRcdHRoaXMuY29uZS5sb29rQXQoIF92ZWN0b3IkMyApO1xuXG5cdFx0aWYgKCB0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7XG5cblx0XHR9XG5cblx0fVxuXG59XG5cbmNvbnN0IF92ZWN0b3IkMiA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9ib25lTWF0cml4ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuY29uc3QgX21hdHJpeFdvcmxkSW52ID0gLypAX19QVVJFX18qLyBuZXcgTWF0cml4NCgpO1xuXG5cbmNsYXNzIFNrZWxldG9uSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblxuXHRjb25zdHJ1Y3Rvciggb2JqZWN0ICkge1xuXG5cdFx0Y29uc3QgYm9uZXMgPSBnZXRCb25lTGlzdCggb2JqZWN0ICk7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbXTtcblxuXHRcdGNvbnN0IGNvbG9yMSA9IG5ldyBDb2xvciggMCwgMCwgMSApO1xuXHRcdGNvbnN0IGNvbG9yMiA9IG5ldyBDb2xvciggMCwgMSwgMCApO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgYm9uZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbIGkgXTtcblxuXHRcdFx0aWYgKCBib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUgKSB7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggMCwgMCwgMCApO1xuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCAwLCAwLCAwICk7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvcjEuciwgY29sb3IxLmcsIGNvbG9yMS5iICk7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvcjIuciwgY29sb3IyLmcsIGNvbG9yMi5iICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKSApO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgdmVydGV4Q29sb3JzOiB0cnVlLCBkZXB0aFRlc3Q6IGZhbHNlLCBkZXB0aFdyaXRlOiBmYWxzZSwgdG9uZU1hcHBlZDogZmFsc2UsIHRyYW5zcGFyZW50OiB0cnVlIH0gKTtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdTa2VsZXRvbkhlbHBlcic7XG5cdFx0dGhpcy5pc1NrZWxldG9uSGVscGVyID0gdHJ1ZTtcblxuXHRcdHRoaXMucm9vdCA9IG9iamVjdDtcblx0XHR0aGlzLmJvbmVzID0gYm9uZXM7XG5cblx0XHR0aGlzLm1hdHJpeCA9IG9iamVjdC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICk7XG5cblx0XHRfbWF0cml4V29ybGRJbnYuY29weSggdGhpcy5yb290Lm1hdHJpeFdvcmxkICkuaW52ZXJ0KCk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGogPSAwOyBpIDwgYm9uZXMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbIGkgXTtcblxuXHRcdFx0aWYgKCBib25lLnBhcmVudCAmJiBib25lLnBhcmVudC5pc0JvbmUgKSB7XG5cblx0XHRcdFx0X2JvbmVNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggX21hdHJpeFdvcmxkSW52LCBib25lLm1hdHJpeFdvcmxkICk7XG5cdFx0XHRcdF92ZWN0b3IkMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIF9ib25lTWF0cml4ICk7XG5cdFx0XHRcdHBvc2l0aW9uLnNldFhZWiggaiwgX3ZlY3RvciQyLngsIF92ZWN0b3IkMi55LCBfdmVjdG9yJDIueiApO1xuXG5cdFx0XHRcdF9ib25lTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIF9tYXRyaXhXb3JsZEludiwgYm9uZS5wYXJlbnQubWF0cml4V29ybGQgKTtcblx0XHRcdFx0X3ZlY3RvciQyLnNldEZyb21NYXRyaXhQb3NpdGlvbiggX2JvbmVNYXRyaXggKTtcblx0XHRcdFx0cG9zaXRpb24uc2V0WFlaKCBqICsgMSwgX3ZlY3RvciQyLngsIF92ZWN0b3IkMi55LCBfdmVjdG9yJDIueiApO1xuXG5cdFx0XHRcdGogKz0gMjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Z2VvbWV0cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICkubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0c3VwZXIudXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7XG5cblx0fVxuXG59XG5cblxuZnVuY3Rpb24gZ2V0Qm9uZUxpc3QoIG9iamVjdCApIHtcblxuXHRjb25zdCBib25lTGlzdCA9IFtdO1xuXG5cdGlmICggb2JqZWN0ICYmIG9iamVjdC5pc0JvbmUgKSB7XG5cblx0XHRib25lTGlzdC5wdXNoKCBvYmplY3QgKTtcblxuXHR9XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgb2JqZWN0LmNoaWxkcmVuLmxlbmd0aDsgaSArKyApIHtcblxuXHRcdGJvbmVMaXN0LnB1c2guYXBwbHkoIGJvbmVMaXN0LCBnZXRCb25lTGlzdCggb2JqZWN0LmNoaWxkcmVuWyBpIF0gKSApO1xuXG5cdH1cblxuXHRyZXR1cm4gYm9uZUxpc3Q7XG5cbn1cblxuY2xhc3MgUG9pbnRMaWdodEhlbHBlciBleHRlbmRzIE1lc2gge1xuXG5cdGNvbnN0cnVjdG9yKCBsaWdodCwgc3BoZXJlU2l6ZSwgY29sb3IgKSB7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBTcGhlcmVHZW9tZXRyeSggc3BoZXJlU2l6ZSwgNCwgMiApO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IHdpcmVmcmFtZTogdHJ1ZSwgZm9nOiBmYWxzZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdHRoaXMuY29sb3IgPSBjb2xvcjtcblxuXHRcdHRoaXMudHlwZSA9ICdQb2ludExpZ2h0SGVscGVyJztcblxuXHRcdHRoaXMubWF0cml4ID0gdGhpcy5saWdodC5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMudXBkYXRlKCk7XG5cblxuXHRcdC8qXG5cdC8vIFRPRE86IGRlbGV0ZSB0aGlzIGNvbW1lbnQ/XG5cdGNvbnN0IGRpc3RhbmNlR2VvbWV0cnkgPSBuZXcgVEhSRUUuSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSggMSwgMiApO1xuXHRjb25zdCBkaXN0YW5jZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBoZXhDb2xvciwgZm9nOiBmYWxzZSwgd2lyZWZyYW1lOiB0cnVlLCBvcGFjaXR5OiAwLjEsIHRyYW5zcGFyZW50OiB0cnVlIH0gKTtcblxuXHR0aGlzLmxpZ2h0U3BoZXJlID0gbmV3IFRIUkVFLk1lc2goIGJ1bGJHZW9tZXRyeSwgYnVsYk1hdGVyaWFsICk7XG5cdHRoaXMubGlnaHREaXN0YW5jZSA9IG5ldyBUSFJFRS5NZXNoKCBkaXN0YW5jZUdlb21ldHJ5LCBkaXN0YW5jZU1hdGVyaWFsICk7XG5cblx0Y29uc3QgZCA9IGxpZ2h0LmRpc3RhbmNlO1xuXG5cdGlmICggZCA9PT0gMC4wICkge1xuXG5cdFx0dGhpcy5saWdodERpc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0dGhpcy5saWdodERpc3RhbmNlLnNjYWxlLnNldCggZCwgZCwgZCApO1xuXG5cdH1cblxuXHR0aGlzLmFkZCggdGhpcy5saWdodERpc3RhbmNlICk7XG5cdCovXG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0dXBkYXRlKCkge1xuXG5cdFx0aWYgKCB0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KCB0aGlzLmNvbG9yICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTtcblxuXHRcdH1cblxuXHRcdC8qXG5cdFx0Y29uc3QgZCA9IHRoaXMubGlnaHQuZGlzdGFuY2U7XG5cblx0XHRpZiAoIGQgPT09IDAuMCApIHtcblxuXHRcdFx0dGhpcy5saWdodERpc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdHRoaXMubGlnaHREaXN0YW5jZS5zY2FsZS5zZXQoIGQsIGQsIGQgKTtcblxuXHRcdH1cblx0XHQqL1xuXG5cdH1cblxufVxuXG5jb25zdCBfdmVjdG9yJDEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfY29sb3IxID0gLypAX19QVVJFX18qLyBuZXcgQ29sb3IoKTtcbmNvbnN0IF9jb2xvcjIgPSAvKkBfX1BVUkVfXyovIG5ldyBDb2xvcigpO1xuXG5jbGFzcyBIZW1pc3BoZXJlTGlnaHRIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGxpZ2h0LCBzaXplLCBjb2xvciApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBPY3RhaGVkcm9uR2VvbWV0cnkoIHNpemUgKTtcblx0XHRnZW9tZXRyeS5yb3RhdGVZKCBNYXRoLlBJICogMC41ICk7XG5cblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IHdpcmVmcmFtZTogdHJ1ZSwgZm9nOiBmYWxzZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXHRcdGlmICggdGhpcy5jb2xvciA9PT0gdW5kZWZpbmVkICkgdGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSB0cnVlO1xuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKTtcblx0XHRjb25zdCBjb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KCBwb3NpdGlvbi5jb3VudCAqIDMgKTtcblxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggY29sb3JzLCAzICkgKTtcblxuXHRcdHRoaXMuYWRkKCBuZXcgTWVzaCggZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwgKSApO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMuY2hpbGRyZW5bIDAgXS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5jaGlsZHJlblsgMCBdLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cblx0dXBkYXRlKCkge1xuXG5cdFx0Y29uc3QgbWVzaCA9IHRoaXMuY2hpbGRyZW5bIDAgXTtcblxuXHRcdGlmICggdGhpcy5jb2xvciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHR0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc3QgY29sb3JzID0gbWVzaC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdjb2xvcicgKTtcblxuXHRcdFx0X2NvbG9yMS5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7XG5cdFx0XHRfY29sb3IyLmNvcHkoIHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IgKTtcblxuXHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gY29sb3JzLmNvdW50OyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRjb25zdCBjb2xvciA9ICggaSA8ICggbCAvIDIgKSApID8gX2NvbG9yMSA6IF9jb2xvcjI7XG5cblx0XHRcdFx0Y29sb3JzLnNldFhZWiggaSwgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbG9ycy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cblx0XHR9XG5cblx0XHRtZXNoLmxvb2tBdCggX3ZlY3RvciQxLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5saWdodC5tYXRyaXhXb3JsZCApLm5lZ2F0ZSgpICk7XG5cblx0fVxuXG59XG5cbmNsYXNzIEdyaWRIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXG5cdGNvbnN0cnVjdG9yKCBzaXplID0gMTAsIGRpdmlzaW9ucyA9IDEwLCBjb2xvcjEgPSAweDQ0NDQ0NCwgY29sb3IyID0gMHg4ODg4ODggKSB7XG5cblx0XHRjb2xvcjEgPSBuZXcgQ29sb3IoIGNvbG9yMSApO1xuXHRcdGNvbG9yMiA9IG5ldyBDb2xvciggY29sb3IyICk7XG5cblx0XHRjb25zdCBjZW50ZXIgPSBkaXZpc2lvbnMgLyAyO1xuXHRcdGNvbnN0IHN0ZXAgPSBzaXplIC8gZGl2aXNpb25zO1xuXHRcdGNvbnN0IGhhbGZTaXplID0gc2l6ZSAvIDI7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdLCBjb2xvcnMgPSBbXTtcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaiA9IDAsIGsgPSAtIGhhbGZTaXplOyBpIDw9IGRpdmlzaW9uczsgaSArKywgayArPSBzdGVwICkge1xuXG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKCAtIGhhbGZTaXplLCAwLCBrLCBoYWxmU2l6ZSwgMCwgayApO1xuXHRcdFx0dmVydGljZXMucHVzaCggaywgMCwgLSBoYWxmU2l6ZSwgaywgMCwgaGFsZlNpemUgKTtcblxuXHRcdFx0Y29uc3QgY29sb3IgPSBpID09PSBjZW50ZXIgPyBjb2xvcjEgOiBjb2xvcjI7XG5cblx0XHRcdGNvbG9yLnRvQXJyYXkoIGNvbG9ycywgaiApOyBqICs9IDM7XG5cdFx0XHRjb2xvci50b0FycmF5KCBjb2xvcnMsIGogKTsgaiArPSAzO1xuXHRcdFx0Y29sb3IudG9BcnJheSggY29sb3JzLCBqICk7IGogKz0gMztcblx0XHRcdGNvbG9yLnRvQXJyYXkoIGNvbG9ycywgaiApOyBqICs9IDM7XG5cblx0XHR9XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKSApO1xuXG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgdmVydGV4Q29sb3JzOiB0cnVlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cblx0XHR0aGlzLnR5cGUgPSAnR3JpZEhlbHBlcic7XG5cblx0fVxuXG59XG5cbmNsYXNzIFBvbGFyR3JpZEhlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cblx0Y29uc3RydWN0b3IoIHJhZGl1cyA9IDEwLCByYWRpYWxzID0gMTYsIGNpcmNsZXMgPSA4LCBkaXZpc2lvbnMgPSA2NCwgY29sb3IxID0gMHg0NDQ0NDQsIGNvbG9yMiA9IDB4ODg4ODg4ICkge1xuXG5cdFx0Y29sb3IxID0gbmV3IENvbG9yKCBjb2xvcjEgKTtcblx0XHRjb2xvcjIgPSBuZXcgQ29sb3IoIGNvbG9yMiApO1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbXTtcblxuXHRcdC8vIGNyZWF0ZSB0aGUgcmFkaWFsc1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDw9IHJhZGlhbHM7IGkgKysgKSB7XG5cblx0XHRcdGNvbnN0IHYgPSAoIGkgLyByYWRpYWxzICkgKiAoIE1hdGguUEkgKiAyICk7XG5cblx0XHRcdGNvbnN0IHggPSBNYXRoLnNpbiggdiApICogcmFkaXVzO1xuXHRcdFx0Y29uc3QgeiA9IE1hdGguY29zKCB2ICkgKiByYWRpdXM7XG5cblx0XHRcdHZlcnRpY2VzLnB1c2goIDAsIDAsIDAgKTtcblx0XHRcdHZlcnRpY2VzLnB1c2goIHgsIDAsIHogKTtcblxuXHRcdFx0Y29uc3QgY29sb3IgPSAoIGkgJiAxICkgPyBjb2xvcjEgOiBjb2xvcjI7XG5cblx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cdFx0XHRjb2xvcnMucHVzaCggY29sb3IuciwgY29sb3IuZywgY29sb3IuYiApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIHRoZSBjaXJjbGVzXG5cblx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPD0gY2lyY2xlczsgaSArKyApIHtcblxuXHRcdFx0Y29uc3QgY29sb3IgPSAoIGkgJiAxICkgPyBjb2xvcjEgOiBjb2xvcjI7XG5cblx0XHRcdGNvbnN0IHIgPSByYWRpdXMgLSAoIHJhZGl1cyAvIGNpcmNsZXMgKiBpICk7XG5cblx0XHRcdGZvciAoIGxldCBqID0gMDsgaiA8IGRpdmlzaW9uczsgaiArKyApIHtcblxuXHRcdFx0XHQvLyBmaXJzdCB2ZXJ0ZXhcblxuXHRcdFx0XHRsZXQgdiA9ICggaiAvIGRpdmlzaW9ucyApICogKCBNYXRoLlBJICogMiApO1xuXG5cdFx0XHRcdGxldCB4ID0gTWF0aC5zaW4oIHYgKSAqIHI7XG5cdFx0XHRcdGxldCB6ID0gTWF0aC5jb3MoIHYgKSAqIHI7XG5cblx0XHRcdFx0dmVydGljZXMucHVzaCggeCwgMCwgeiApO1xuXHRcdFx0XHRjb2xvcnMucHVzaCggY29sb3IuciwgY29sb3IuZywgY29sb3IuYiApO1xuXG5cdFx0XHRcdC8vIHNlY29uZCB2ZXJ0ZXhcblxuXHRcdFx0XHR2ID0gKCAoIGogKyAxICkgLyBkaXZpc2lvbnMgKSAqICggTWF0aC5QSSAqIDIgKTtcblxuXHRcdFx0XHR4ID0gTWF0aC5zaW4oIHYgKSAqIHI7XG5cdFx0XHRcdHogPSBNYXRoLmNvcyggdiApICogcjtcblxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKCB4LCAwLCB6ICk7XG5cdFx0XHRcdGNvbG9ycy5wdXNoKCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApO1xuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyB2ZXJ0ZXhDb2xvcnM6IHRydWUsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKTtcblxuXHRcdHN1cGVyKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdQb2xhckdyaWRIZWxwZXInO1xuXG5cdH1cblxufVxuXG5jb25zdCBfdjEgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjIgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5jb25zdCBfdjMgPSAvKkBfX1BVUkVfXyovIG5ldyBWZWN0b3IzKCk7XG5cbmNsYXNzIERpcmVjdGlvbmFsTGlnaHRIZWxwZXIgZXh0ZW5kcyBPYmplY3QzRCB7XG5cblx0Y29uc3RydWN0b3IoIGxpZ2h0LCBzaXplLCBjb2xvciApIHtcblxuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xuXHRcdHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7XG5cdFx0dGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cblx0XHR0aGlzLmNvbG9yID0gY29sb3I7XG5cblx0XHRpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHNpemUgPSAxO1xuXG5cdFx0bGV0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggW1xuXHRcdFx0LSBzaXplLCBzaXplLCAwLFxuXHRcdFx0c2l6ZSwgc2l6ZSwgMCxcblx0XHRcdHNpemUsIC0gc2l6ZSwgMCxcblx0XHRcdC0gc2l6ZSwgLSBzaXplLCAwLFxuXHRcdFx0LSBzaXplLCBzaXplLCAwXG5cdFx0XSwgMyApICk7XG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBmb2c6IGZhbHNlLCB0b25lTWFwcGVkOiBmYWxzZSB9ICk7XG5cblx0XHR0aGlzLmxpZ2h0UGxhbmUgPSBuZXcgTGluZSggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cdFx0dGhpcy5hZGQoIHRoaXMubGlnaHRQbGFuZSApO1xuXG5cdFx0Z2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBbIDAsIDAsIDAsIDAsIDAsIDEgXSwgMyApICk7XG5cblx0XHR0aGlzLnRhcmdldExpbmUgPSBuZXcgTGluZSggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cdFx0dGhpcy5hZGQoIHRoaXMudGFyZ2V0TGluZSApO1xuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cblx0ZGlzcG9zZSgpIHtcblxuXHRcdHRoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHR0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpO1xuXHRcdHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblxuXHRcdF92MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubGlnaHQubWF0cml4V29ybGQgKTtcblx0XHRfdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApO1xuXHRcdF92My5zdWJWZWN0b3JzKCBfdjIsIF92MSApO1xuXG5cdFx0dGhpcy5saWdodFBsYW5lLmxvb2tBdCggX3YyICk7XG5cblx0XHRpZiAoIHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApO1xuXHRcdFx0dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTtcblx0XHRcdHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnRhcmdldExpbmUubG9va0F0KCBfdjIgKTtcblx0XHR0aGlzLnRhcmdldExpbmUuc2NhbGUueiA9IF92My5sZW5ndGgoKTtcblxuXHR9XG5cbn1cblxuY29uc3QgX3ZlY3RvciA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IF9jYW1lcmEgPSAvKkBfX1BVUkVfXyovIG5ldyBDYW1lcmEoKTtcblxuLyoqXG4gKlx0LSBzaG93cyBmcnVzdHVtLCBsaW5lIG9mIHNpZ2h0IGFuZCB1cCBvZiB0aGUgY2FtZXJhXG4gKlx0LSBzdWl0YWJsZSBmb3IgZmFzdCB1cGRhdGVzXG4gKiBcdC0gYmFzZWQgb24gZnJ1c3R1bSB2aXN1YWxpemF0aW9uIGluIGxpZ2h0Z2wuanMgc2hhZG93bWFwIGV4YW1wbGVcbiAqXHRcdGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9saWdodGdsLmpzL2Jsb2IvbWFzdGVyL3Rlc3RzL3NoYWRvd21hcC5odG1sXG4gKi9cblxuY2xhc3MgQ2FtZXJhSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblxuXHRjb25zdHJ1Y3RvciggY2FtZXJhICkge1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogMHhmZmZmZmYsIHZlcnRleENvbG9yczogdHJ1ZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBjb2xvcnMgPSBbXTtcblxuXHRcdGNvbnN0IHBvaW50TWFwID0ge307XG5cblx0XHQvLyBjb2xvcnNcblxuXHRcdGNvbnN0IGNvbG9yRnJ1c3R1bSA9IG5ldyBDb2xvciggMHhmZmFhMDAgKTtcblx0XHRjb25zdCBjb2xvckNvbmUgPSBuZXcgQ29sb3IoIDB4ZmYwMDAwICk7XG5cdFx0Y29uc3QgY29sb3JVcCA9IG5ldyBDb2xvciggMHgwMGFhZmYgKTtcblx0XHRjb25zdCBjb2xvclRhcmdldCA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTtcblx0XHRjb25zdCBjb2xvckNyb3NzID0gbmV3IENvbG9yKCAweDMzMzMzMyApO1xuXG5cdFx0Ly8gbmVhclxuXG5cdFx0YWRkTGluZSggJ24xJywgJ24yJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ24yJywgJ240JywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ240JywgJ24zJywgY29sb3JGcnVzdHVtICk7XG5cdFx0YWRkTGluZSggJ24zJywgJ24xJywgY29sb3JGcnVzdHVtICk7XG5cblx0XHQvLyBmYXJcblxuXHRcdGFkZExpbmUoICdmMScsICdmMicsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICdmMicsICdmNCcsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICdmNCcsICdmMycsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICdmMycsICdmMScsIGNvbG9yRnJ1c3R1bSApO1xuXG5cdFx0Ly8gc2lkZXNcblxuXHRcdGFkZExpbmUoICduMScsICdmMScsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICduMicsICdmMicsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICduMycsICdmMycsIGNvbG9yRnJ1c3R1bSApO1xuXHRcdGFkZExpbmUoICduNCcsICdmNCcsIGNvbG9yRnJ1c3R1bSApO1xuXG5cdFx0Ly8gY29uZVxuXG5cdFx0YWRkTGluZSggJ3AnLCAnbjEnLCBjb2xvckNvbmUgKTtcblx0XHRhZGRMaW5lKCAncCcsICduMicsIGNvbG9yQ29uZSApO1xuXHRcdGFkZExpbmUoICdwJywgJ24zJywgY29sb3JDb25lICk7XG5cdFx0YWRkTGluZSggJ3AnLCAnbjQnLCBjb2xvckNvbmUgKTtcblxuXHRcdC8vIHVwXG5cblx0XHRhZGRMaW5lKCAndTEnLCAndTInLCBjb2xvclVwICk7XG5cdFx0YWRkTGluZSggJ3UyJywgJ3UzJywgY29sb3JVcCApO1xuXHRcdGFkZExpbmUoICd1MycsICd1MScsIGNvbG9yVXAgKTtcblxuXHRcdC8vIHRhcmdldFxuXG5cdFx0YWRkTGluZSggJ2MnLCAndCcsIGNvbG9yVGFyZ2V0ICk7XG5cdFx0YWRkTGluZSggJ3AnLCAnYycsIGNvbG9yQ3Jvc3MgKTtcblxuXHRcdC8vIGNyb3NzXG5cblx0XHRhZGRMaW5lKCAnY24xJywgJ2NuMicsIGNvbG9yQ3Jvc3MgKTtcblx0XHRhZGRMaW5lKCAnY24zJywgJ2NuNCcsIGNvbG9yQ3Jvc3MgKTtcblxuXHRcdGFkZExpbmUoICdjZjEnLCAnY2YyJywgY29sb3JDcm9zcyApO1xuXHRcdGFkZExpbmUoICdjZjMnLCAnY2Y0JywgY29sb3JDcm9zcyApO1xuXG5cdFx0ZnVuY3Rpb24gYWRkTGluZSggYSwgYiwgY29sb3IgKSB7XG5cblx0XHRcdGFkZFBvaW50KCBhLCBjb2xvciApO1xuXHRcdFx0YWRkUG9pbnQoIGIsIGNvbG9yICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRQb2ludCggaWQsIGNvbG9yICkge1xuXG5cdFx0XHR2ZXJ0aWNlcy5wdXNoKCAwLCAwLCAwICk7XG5cdFx0XHRjb2xvcnMucHVzaCggY29sb3IuciwgY29sb3IuZywgY29sb3IuYiApO1xuXG5cdFx0XHRpZiAoIHBvaW50TWFwWyBpZCBdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cG9pbnRNYXBbIGlkIF0gPSBbXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRwb2ludE1hcFsgaWQgXS5wdXNoKCAoIHZlcnRpY2VzLmxlbmd0aCAvIDMgKSAtIDEgKTtcblxuXHRcdH1cblxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0NhbWVyYUhlbHBlcic7XG5cblx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0XHRpZiAoIHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXggKSB0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHR0aGlzLm1hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMucG9pbnRNYXAgPSBwb2ludE1hcDtcblxuXHRcdHRoaXMudXBkYXRlKCk7XG5cblx0fVxuXG5cdHVwZGF0ZSgpIHtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblx0XHRjb25zdCBwb2ludE1hcCA9IHRoaXMucG9pbnRNYXA7XG5cblx0XHRjb25zdCB3ID0gMSwgaCA9IDE7XG5cblx0XHQvLyB3ZSBuZWVkIGp1c3QgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4IGludmVyc2Vcblx0XHQvLyB3b3JsZCBtYXRyaXggbXVzdCBiZSBpZGVudGl0eVxuXG5cdFx0X2NhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KCB0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSApO1xuXG5cdFx0Ly8gY2VudGVyIC8gdGFyZ2V0XG5cblx0XHRzZXRQb2ludCggJ2MnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIDAsIC0gMSApO1xuXHRcdHNldFBvaW50KCAndCcsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgMCwgMCwgMSApO1xuXG5cdFx0Ly8gbmVhclxuXG5cdFx0c2V0UG9pbnQoICduMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3LCAtIGgsIC0gMSApO1xuXHRcdHNldFBvaW50KCAnbjInLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIHcsIC0gaCwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICduMycsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3LCBoLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ240JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCBoLCAtIDEgKTtcblxuXHRcdC8vIGZhclxuXG5cdFx0c2V0UG9pbnQoICdmMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3LCAtIGgsIDEgKTtcblx0XHRzZXRQb2ludCggJ2YyJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCAtIGgsIDEgKTtcblx0XHRzZXRQb2ludCggJ2YzJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAtIHcsIGgsIDEgKTtcblx0XHRzZXRQb2ludCggJ2Y0JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCBoLCAxICk7XG5cblx0XHQvLyB1cFxuXG5cdFx0c2V0UG9pbnQoICd1MScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdyAqIDAuNywgaCAqIDEuMSwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICd1MicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3ICogMC43LCBoICogMS4xLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ3UzJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCBoICogMiwgLSAxICk7XG5cblx0XHQvLyBjcm9zc1xuXG5cdFx0c2V0UG9pbnQoICdjZjEnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIC0gdywgMCwgMSApO1xuXHRcdHNldFBvaW50KCAnY2YyJywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCB3LCAwLCAxICk7XG5cdFx0c2V0UG9pbnQoICdjZjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIC0gaCwgMSApO1xuXHRcdHNldFBvaW50KCAnY2Y0JywgcG9pbnRNYXAsIGdlb21ldHJ5LCBfY2FtZXJhLCAwLCBoLCAxICk7XG5cblx0XHRzZXRQb2ludCggJ2NuMScsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgLSB3LCAwLCAtIDEgKTtcblx0XHRzZXRQb2ludCggJ2NuMicsIHBvaW50TWFwLCBnZW9tZXRyeSwgX2NhbWVyYSwgdywgMCwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICdjbjMnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIC0gaCwgLSAxICk7XG5cdFx0c2V0UG9pbnQoICdjbjQnLCBwb2ludE1hcCwgZ2VvbWV0cnksIF9jYW1lcmEsIDAsIGgsIC0gMSApO1xuXG5cdFx0Z2VvbWV0cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICkubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdH1cblxuXHRkaXNwb3NlKCkge1xuXG5cdFx0dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cblx0fVxuXG59XG5cblxuZnVuY3Rpb24gc2V0UG9pbnQoIHBvaW50LCBwb2ludE1hcCwgZ2VvbWV0cnksIGNhbWVyYSwgeCwgeSwgeiApIHtcblxuXHRfdmVjdG9yLnNldCggeCwgeSwgeiApLnVucHJvamVjdCggY2FtZXJhICk7XG5cblx0Y29uc3QgcG9pbnRzID0gcG9pbnRNYXBbIHBvaW50IF07XG5cblx0aWYgKCBwb2ludHMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICk7XG5cblx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0cG9zaXRpb24uc2V0WFlaKCBwb2ludHNbIGkgXSwgX3ZlY3Rvci54LCBfdmVjdG9yLnksIF92ZWN0b3IueiApO1xuXG5cdFx0fVxuXG5cdH1cblxufVxuXG5jb25zdCBfYm94ID0gLypAX19QVVJFX18qLyBuZXcgQm94MygpO1xuXG5jbGFzcyBCb3hIZWxwZXIgZXh0ZW5kcyBMaW5lU2VnbWVudHMge1xuXG5cdGNvbnN0cnVjdG9yKCBvYmplY3QsIGNvbG9yID0gMHhmZmZmMDAgKSB7XG5cblx0XHRjb25zdCBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KCBbIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDAsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDQsIDAsIDQsIDEsIDUsIDIsIDYsIDMsIDcgXSApO1xuXHRcdGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoIDggKiAzICk7XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXHRcdGdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVmZmVyQXR0cmlidXRlKCBpbmRpY2VzLCAxICkgKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9ucywgMyApICk7XG5cblx0XHRzdXBlciggZ2VvbWV0cnksIG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlIH0gKSApO1xuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy50eXBlID0gJ0JveEhlbHBlcic7XG5cblx0XHR0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdHRoaXMudXBkYXRlKCk7XG5cblx0fVxuXG5cdHVwZGF0ZSggb2JqZWN0ICkge1xuXG5cdFx0aWYgKCBvYmplY3QgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuJyApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9iamVjdCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfYm94LnNldEZyb21PYmplY3QoIHRoaXMub2JqZWN0ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIF9ib3guaXNFbXB0eSgpICkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgbWluID0gX2JveC5taW47XG5cdFx0Y29uc3QgbWF4ID0gX2JveC5tYXg7XG5cblx0XHQvKlxuXHRcdFx0NV9fX180XG5cdFx0MS9fX18wL3xcblx0XHR8IDZfX3xfN1xuXHRcdDIvX19fMy9cblxuXHRcdDA6IG1heC54LCBtYXgueSwgbWF4Lnpcblx0XHQxOiBtaW4ueCwgbWF4LnksIG1heC56XG5cdFx0MjogbWluLngsIG1pbi55LCBtYXguelxuXHRcdDM6IG1heC54LCBtaW4ueSwgbWF4Lnpcblx0XHQ0OiBtYXgueCwgbWF4LnksIG1pbi56XG5cdFx0NTogbWluLngsIG1heC55LCBtaW4uelxuXHRcdDY6IG1pbi54LCBtaW4ueSwgbWluLnpcblx0XHQ3OiBtYXgueCwgbWluLnksIG1pbi56XG5cdFx0Ki9cblxuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuXHRcdGNvbnN0IGFycmF5ID0gcG9zaXRpb24uYXJyYXk7XG5cblx0XHRhcnJheVsgMCBdID0gbWF4Lng7IGFycmF5WyAxIF0gPSBtYXgueTsgYXJyYXlbIDIgXSA9IG1heC56O1xuXHRcdGFycmF5WyAzIF0gPSBtaW4ueDsgYXJyYXlbIDQgXSA9IG1heC55OyBhcnJheVsgNSBdID0gbWF4Lno7XG5cdFx0YXJyYXlbIDYgXSA9IG1pbi54OyBhcnJheVsgNyBdID0gbWluLnk7IGFycmF5WyA4IF0gPSBtYXguejtcblx0XHRhcnJheVsgOSBdID0gbWF4Lng7IGFycmF5WyAxMCBdID0gbWluLnk7IGFycmF5WyAxMSBdID0gbWF4Lno7XG5cdFx0YXJyYXlbIDEyIF0gPSBtYXgueDsgYXJyYXlbIDEzIF0gPSBtYXgueTsgYXJyYXlbIDE0IF0gPSBtaW4uejtcblx0XHRhcnJheVsgMTUgXSA9IG1pbi54OyBhcnJheVsgMTYgXSA9IG1heC55OyBhcnJheVsgMTcgXSA9IG1pbi56O1xuXHRcdGFycmF5WyAxOCBdID0gbWluLng7IGFycmF5WyAxOSBdID0gbWluLnk7IGFycmF5WyAyMCBdID0gbWluLno7XG5cdFx0YXJyYXlbIDIxIF0gPSBtYXgueDsgYXJyYXlbIDIyIF0gPSBtaW4ueTsgYXJyYXlbIDIzIF0gPSBtaW4uejtcblxuXHRcdHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuXHRcdHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XG5cblxuXHR9XG5cblx0c2V0RnJvbU9iamVjdCggb2JqZWN0ICkge1xuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRMaW5lU2VnbWVudHMucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7XG5cblx0XHR0aGlzLm9iamVjdCA9IHNvdXJjZS5vYmplY3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn1cblxuY2xhc3MgQm94M0hlbHBlciBleHRlbmRzIExpbmVTZWdtZW50cyB7XG5cblx0Y29uc3RydWN0b3IoIGJveCwgY29sb3IgPSAweGZmZmYwMCApIHtcblxuXHRcdGNvbnN0IGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoIFsgMCwgMSwgMSwgMiwgMiwgMywgMywgMCwgNCwgNSwgNSwgNiwgNiwgNywgNywgNCwgMCwgNCwgMSwgNSwgMiwgNiwgMywgNyBdICk7XG5cblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbIDEsIDEsIDEsIC0gMSwgMSwgMSwgLSAxLCAtIDEsIDEsIDEsIC0gMSwgMSwgMSwgMSwgLSAxLCAtIDEsIDEsIC0gMSwgLSAxLCAtIDEsIC0gMSwgMSwgLSAxLCAtIDEgXTtcblxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cblx0XHRnZW9tZXRyeS5zZXRJbmRleCggbmV3IEJ1ZmZlckF0dHJpYnV0ZSggaW5kaWNlcywgMSApICk7XG5cblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbnMsIDMgKSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGNvbG9yLCB0b25lTWFwcGVkOiBmYWxzZSB9ICkgKTtcblxuXHRcdHRoaXMuYm94ID0gYm94O1xuXG5cdFx0dGhpcy50eXBlID0gJ0JveDNIZWxwZXInO1xuXG5cdFx0dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0Y29uc3QgYm94ID0gdGhpcy5ib3g7XG5cblx0XHRpZiAoIGJveC5pc0VtcHR5KCkgKSByZXR1cm47XG5cblx0XHRib3guZ2V0Q2VudGVyKCB0aGlzLnBvc2l0aW9uICk7XG5cblx0XHRib3guZ2V0U2l6ZSggdGhpcy5zY2FsZSApO1xuXG5cdFx0dGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cblx0XHRzdXBlci51cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgUGxhbmVIZWxwZXIgZXh0ZW5kcyBMaW5lIHtcblxuXHRjb25zdHJ1Y3RvciggcGxhbmUsIHNpemUgPSAxLCBoZXggPSAweGZmZmYwMCApIHtcblxuXHRcdGNvbnN0IGNvbG9yID0gaGV4O1xuXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gWyAxLCAtIDEsIDEsIC0gMSwgMSwgMSwgLSAxLCAtIDEsIDEsIDEsIDEsIDEsIC0gMSwgMSwgMSwgLSAxLCAtIDEsIDEsIDEsIC0gMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCBdO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbnMsIDMgKSApO1xuXHRcdGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGNvbG9yLCB0b25lTWFwcGVkOiBmYWxzZSB9ICkgKTtcblxuXHRcdHRoaXMudHlwZSA9ICdQbGFuZUhlbHBlcic7XG5cblx0XHR0aGlzLnBsYW5lID0gcGxhbmU7XG5cblx0XHR0aGlzLnNpemUgPSBzaXplO1xuXG5cdFx0Y29uc3QgcG9zaXRpb25zMiA9IFsgMSwgMSwgMSwgLSAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgMSwgMSwgLSAxLCAtIDEsIDEsIDEsIC0gMSwgMSBdO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkyLnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uczIsIDMgKSApO1xuXHRcdGdlb21ldHJ5Mi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdHRoaXMuYWRkKCBuZXcgTWVzaCggZ2VvbWV0cnkyLCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGNvbG9yLCBvcGFjaXR5OiAwLjIsIHRyYW5zcGFyZW50OiB0cnVlLCBkZXB0aFdyaXRlOiBmYWxzZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApICkgKTtcblxuXHR9XG5cblx0dXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICkge1xuXG5cdFx0bGV0IHNjYWxlID0gLSB0aGlzLnBsYW5lLmNvbnN0YW50O1xuXG5cdFx0aWYgKCBNYXRoLmFicyggc2NhbGUgKSA8IDFlLTggKSBzY2FsZSA9IDFlLTg7IC8vIHNpZ24gZG9lcyBub3QgbWF0dGVyXG5cblx0XHR0aGlzLnNjYWxlLnNldCggMC41ICogdGhpcy5zaXplLCAwLjUgKiB0aGlzLnNpemUsIHNjYWxlICk7XG5cblx0XHR0aGlzLmNoaWxkcmVuWyAwIF0ubWF0ZXJpYWwuc2lkZSA9ICggc2NhbGUgPCAwICkgPyBCYWNrU2lkZSA6IEZyb250U2lkZTsgLy8gcmVuZGVyZXIgZmxpcHMgc2lkZSB3aGVuIGRldGVybWluYW50IDwgMDsgZmxpcHBpbmcgbm90IHdhbnRlZCBoZXJlXG5cblx0XHR0aGlzLmxvb2tBdCggdGhpcy5wbGFuZS5ub3JtYWwgKTtcblxuXHRcdHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApO1xuXG5cdH1cblxufVxuXG5jb25zdCBfYXhpcyA9IC8qQF9fUFVSRV9fKi8gbmV3IFZlY3RvcjMoKTtcbmxldCBfbGluZUdlb21ldHJ5LCBfY29uZUdlb21ldHJ5O1xuXG5jbGFzcyBBcnJvd0hlbHBlciBleHRlbmRzIE9iamVjdDNEIHtcblxuXHQvLyBkaXIgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cblx0Y29uc3RydWN0b3IoIGRpciA9IG5ldyBWZWN0b3IzKCAwLCAwLCAxICksIG9yaWdpbiA9IG5ldyBWZWN0b3IzKCAwLCAwLCAwICksIGxlbmd0aCA9IDEsIGNvbG9yID0gMHhmZmZmMDAsIGhlYWRMZW5ndGggPSBsZW5ndGggKiAwLjIsIGhlYWRXaWR0aCA9IGhlYWRMZW5ndGggKiAwLjIgKSB7XG5cblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy50eXBlID0gJ0Fycm93SGVscGVyJztcblxuXHRcdGlmICggX2xpbmVHZW9tZXRyeSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRfbGluZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0XHRfbGluZUdlb21ldHJ5LnNldEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIFsgMCwgMCwgMCwgMCwgMSwgMCBdLCAzICkgKTtcblxuXHRcdFx0X2NvbmVHZW9tZXRyeSA9IG5ldyBDeWxpbmRlckdlb21ldHJ5KCAwLCAwLjUsIDEsIDUsIDEgKTtcblx0XHRcdF9jb25lR2VvbWV0cnkudHJhbnNsYXRlKCAwLCAtIDAuNSwgMCApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5wb3NpdGlvbi5jb3B5KCBvcmlnaW4gKTtcblxuXHRcdHRoaXMubGluZSA9IG5ldyBMaW5lKCBfbGluZUdlb21ldHJ5LCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGNvbG9yLCB0b25lTWFwcGVkOiBmYWxzZSB9ICkgKTtcblx0XHR0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuYWRkKCB0aGlzLmxpbmUgKTtcblxuXHRcdHRoaXMuY29uZSA9IG5ldyBNZXNoKCBfY29uZUdlb21ldHJ5LCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGNvbG9yLCB0b25lTWFwcGVkOiBmYWxzZSB9ICkgKTtcblx0XHR0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuYWRkKCB0aGlzLmNvbmUgKTtcblxuXHRcdHRoaXMuc2V0RGlyZWN0aW9uKCBkaXIgKTtcblx0XHR0aGlzLnNldExlbmd0aCggbGVuZ3RoLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGggKTtcblxuXHR9XG5cblx0c2V0RGlyZWN0aW9uKCBkaXIgKSB7XG5cblx0XHQvLyBkaXIgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkXG5cblx0XHRpZiAoIGRpci55ID4gMC45OTk5OSApIHtcblxuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnNldCggMCwgMCwgMCwgMSApO1xuXG5cdFx0fSBlbHNlIGlmICggZGlyLnkgPCAtIDAuOTk5OTkgKSB7XG5cblx0XHRcdHRoaXMucXVhdGVybmlvbi5zZXQoIDEsIDAsIDAsIDAgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdF9heGlzLnNldCggZGlyLnosIDAsIC0gZGlyLnggKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0Y29uc3QgcmFkaWFucyA9IE1hdGguYWNvcyggZGlyLnkgKTtcblxuXHRcdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoIF9heGlzLCByYWRpYW5zICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdHNldExlbmd0aCggbGVuZ3RoLCBoZWFkTGVuZ3RoID0gbGVuZ3RoICogMC4yLCBoZWFkV2lkdGggPSBoZWFkTGVuZ3RoICogMC4yICkge1xuXG5cdFx0dGhpcy5saW5lLnNjYWxlLnNldCggMSwgTWF0aC5tYXgoIDAuMDAwMSwgbGVuZ3RoIC0gaGVhZExlbmd0aCApLCAxICk7IC8vIHNlZSAjMTc0NThcblx0XHR0aGlzLmxpbmUudXBkYXRlTWF0cml4KCk7XG5cblx0XHR0aGlzLmNvbmUuc2NhbGUuc2V0KCBoZWFkV2lkdGgsIGhlYWRMZW5ndGgsIGhlYWRXaWR0aCApO1xuXHRcdHRoaXMuY29uZS5wb3NpdGlvbi55ID0gbGVuZ3RoO1xuXHRcdHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKTtcblxuXHR9XG5cblx0c2V0Q29sb3IoIGNvbG9yICkge1xuXG5cdFx0dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLnNldCggY29sb3IgKTtcblx0XHR0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCBjb2xvciApO1xuXG5cdH1cblxuXHRjb3B5KCBzb3VyY2UgKSB7XG5cblx0XHRzdXBlci5jb3B5KCBzb3VyY2UsIGZhbHNlICk7XG5cblx0XHR0aGlzLmxpbmUuY29weSggc291cmNlLmxpbmUgKTtcblx0XHR0aGlzLmNvbmUuY29weSggc291cmNlLmNvbmUgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxufVxuXG5jbGFzcyBBeGVzSGVscGVyIGV4dGVuZHMgTGluZVNlZ21lbnRzIHtcblxuXHRjb25zdHJ1Y3Rvciggc2l6ZSA9IDEgKSB7XG5cblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtcblx0XHRcdDAsIDAsIDAsXHRzaXplLCAwLCAwLFxuXHRcdFx0MCwgMCwgMCxcdDAsIHNpemUsIDAsXG5cdFx0XHQwLCAwLCAwLFx0MCwgMCwgc2l6ZVxuXHRcdF07XG5cblx0XHRjb25zdCBjb2xvcnMgPSBbXG5cdFx0XHQxLCAwLCAwLFx0MSwgMC42LCAwLFxuXHRcdFx0MCwgMSwgMCxcdDAuNiwgMSwgMCxcblx0XHRcdDAsIDAsIDEsXHQwLCAwLjYsIDFcblx0XHRdO1xuXG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCAnY29sb3InLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggY29sb3JzLCAzICkgKTtcblxuXHRcdGNvbnN0IG1hdGVyaWFsID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IHZlcnRleENvbG9yczogdHJ1ZSwgdG9uZU1hcHBlZDogZmFsc2UgfSApO1xuXG5cdFx0c3VwZXIoIGdlb21ldHJ5LCBtYXRlcmlhbCApO1xuXG5cdFx0dGhpcy50eXBlID0gJ0F4ZXNIZWxwZXInO1xuXG5cdH1cblxuXHRzZXRDb2xvcnMoIHhBeGlzQ29sb3IsIHlBeGlzQ29sb3IsIHpBeGlzQ29sb3IgKSB7XG5cblx0XHRjb25zdCBjb2xvciA9IG5ldyBDb2xvcigpO1xuXHRcdGNvbnN0IGFycmF5ID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O1xuXG5cdFx0Y29sb3Iuc2V0KCB4QXhpc0NvbG9yICk7XG5cdFx0Y29sb3IudG9BcnJheSggYXJyYXksIDAgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgMyApO1xuXG5cdFx0Y29sb3Iuc2V0KCB5QXhpc0NvbG9yICk7XG5cdFx0Y29sb3IudG9BcnJheSggYXJyYXksIDYgKTtcblx0XHRjb2xvci50b0FycmF5KCBhcnJheSwgOSApO1xuXG5cdFx0Y29sb3Iuc2V0KCB6QXhpc0NvbG9yICk7XG5cdFx0Y29sb3IudG9BcnJheSggYXJyYXksIDEyICk7XG5cdFx0Y29sb3IudG9BcnJheSggYXJyYXksIDE1ICk7XG5cblx0XHR0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGRpc3Bvc2UoKSB7XG5cblx0XHR0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcblxuXHR9XG5cbn1cblxuY2xhc3MgU2hhcGVQYXRoIHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblxuXHRcdHRoaXMudHlwZSA9ICdTaGFwZVBhdGgnO1xuXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigpO1xuXG5cdFx0dGhpcy5zdWJQYXRocyA9IFtdO1xuXHRcdHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG5cdH1cblxuXHRtb3ZlVG8oIHgsIHkgKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXRoID0gbmV3IFBhdGgoKTtcblx0XHR0aGlzLnN1YlBhdGhzLnB1c2goIHRoaXMuY3VycmVudFBhdGggKTtcblx0XHR0aGlzLmN1cnJlbnRQYXRoLm1vdmVUbyggeCwgeSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdGxpbmVUbyggeCwgeSApIHtcblxuXHRcdHRoaXMuY3VycmVudFBhdGgubGluZVRvKCB4LCB5ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0cXVhZHJhdGljQ3VydmVUbyggYUNQeCwgYUNQeSwgYVgsIGFZICkge1xuXG5cdFx0dGhpcy5jdXJyZW50UGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKCBhQ1B4LCBhQ1B5LCBhWCwgYVkgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHRiZXppZXJDdXJ2ZVRvKCBhQ1AxeCwgYUNQMXksIGFDUDJ4LCBhQ1AyeSwgYVgsIGFZICkge1xuXG5cdFx0dGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKCBhQ1AxeCwgYUNQMXksIGFDUDJ4LCBhQ1AyeSwgYVgsIGFZICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0c3BsaW5lVGhydSggcHRzICkge1xuXG5cdFx0dGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KCBwdHMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH1cblxuXHR0b1NoYXBlcyggaXNDQ1csIG5vSG9sZXMgKSB7XG5cblx0XHRmdW5jdGlvbiB0b1NoYXBlc05vSG9sZXMoIGluU3VicGF0aHMgKSB7XG5cblx0XHRcdGNvbnN0IHNoYXBlcyA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIGwgPSBpblN1YnBhdGhzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0Y29uc3QgdG1wUGF0aCA9IGluU3VicGF0aHNbIGkgXTtcblxuXHRcdFx0XHRjb25zdCB0bXBTaGFwZSA9IG5ldyBTaGFwZSgpO1xuXHRcdFx0XHR0bXBTaGFwZS5jdXJ2ZXMgPSB0bXBQYXRoLmN1cnZlcztcblxuXHRcdFx0XHRzaGFwZXMucHVzaCggdG1wU2hhcGUgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2hhcGVzO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNQb2ludEluc2lkZVBvbHlnb24oIGluUHQsIGluUG9seWdvbiApIHtcblxuXHRcdFx0Y29uc3QgcG9seUxlbiA9IGluUG9seWdvbi5sZW5ndGg7XG5cblx0XHRcdC8vIGluUHQgb24gcG9seWdvbiBjb250b3VyID0+IGltbWVkaWF0ZSBzdWNjZXNzICAgIG9yXG5cdFx0XHQvLyB0b2dnbGluZyBvZiBpbnNpZGUvb3V0c2lkZSBhdCBldmVyeSBzaW5nbGUhIGludGVyc2VjdGlvbiBwb2ludCBvZiBhbiBlZGdlXG5cdFx0XHQvLyAgd2l0aCB0aGUgaG9yaXpvbnRhbCBsaW5lIHRocm91Z2ggaW5QdCwgbGVmdCBvZiBpblB0XG5cdFx0XHQvLyAgbm90IGNvdW50aW5nIGxvd2VyWSBlbmRwb2ludHMgb2YgZWRnZXMgYW5kIHdob2xlIGVkZ2VzIG9uIHRoYXQgbGluZVxuXHRcdFx0bGV0IGluc2lkZSA9IGZhbHNlO1xuXHRcdFx0Zm9yICggbGV0IHAgPSBwb2x5TGVuIC0gMSwgcSA9IDA7IHEgPCBwb2x5TGVuOyBwID0gcSArKyApIHtcblxuXHRcdFx0XHRsZXQgZWRnZUxvd1B0ID0gaW5Qb2x5Z29uWyBwIF07XG5cdFx0XHRcdGxldCBlZGdlSGlnaFB0ID0gaW5Qb2x5Z29uWyBxIF07XG5cblx0XHRcdFx0bGV0IGVkZ2VEeCA9IGVkZ2VIaWdoUHQueCAtIGVkZ2VMb3dQdC54O1xuXHRcdFx0XHRsZXQgZWRnZUR5ID0gZWRnZUhpZ2hQdC55IC0gZWRnZUxvd1B0Lnk7XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggZWRnZUR5ICkgPiBOdW1iZXIuRVBTSUxPTiApIHtcblxuXHRcdFx0XHRcdC8vIG5vdCBwYXJhbGxlbFxuXHRcdFx0XHRcdGlmICggZWRnZUR5IDwgMCApIHtcblxuXHRcdFx0XHRcdFx0ZWRnZUxvd1B0ID0gaW5Qb2x5Z29uWyBxIF07IGVkZ2VEeCA9IC0gZWRnZUR4O1xuXHRcdFx0XHRcdFx0ZWRnZUhpZ2hQdCA9IGluUG9seWdvblsgcCBdOyBlZGdlRHkgPSAtIGVkZ2VEeTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggKCBpblB0LnkgPCBlZGdlTG93UHQueSApIHx8ICggaW5QdC55ID4gZWRnZUhpZ2hQdC55ICkgKSBcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRpZiAoIGluUHQueSA9PT0gZWRnZUxvd1B0LnkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggaW5QdC54ID09PSBlZGdlTG93UHQueCApXHRcdHJldHVyblx0dHJ1ZTtcdFx0Ly8gaW5QdCBpcyBvbiBjb250b3VyID9cblx0XHRcdFx0XHRcdC8vIGNvbnRpbnVlO1x0XHRcdFx0Ly8gbm8gaW50ZXJzZWN0aW9uIG9yIGVkZ2VMb3dQdCA9PiBkb2Vzbid0IGNvdW50ICEhIVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Y29uc3QgcGVycEVkZ2UgPSBlZGdlRHkgKiAoIGluUHQueCAtIGVkZ2VMb3dQdC54ICkgLSBlZGdlRHggKiAoIGluUHQueSAtIGVkZ2VMb3dQdC55ICk7XG5cdFx0XHRcdFx0XHRpZiAoIHBlcnBFZGdlID09PSAwIClcdFx0XHRcdHJldHVyblx0dHJ1ZTtcdFx0Ly8gaW5QdCBpcyBvbiBjb250b3VyID9cblx0XHRcdFx0XHRcdGlmICggcGVycEVkZ2UgPCAwICkgXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdGluc2lkZSA9ICEgaW5zaWRlO1x0XHQvLyB0cnVlIGludGVyc2VjdGlvbiBsZWZ0IG9mIGluUHRcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gcGFyYWxsZWwgb3IgY29sbGluZWFyXG5cdFx0XHRcdFx0aWYgKCBpblB0LnkgIT09IGVkZ2VMb3dQdC55ICkgXHRcdGNvbnRpbnVlO1x0XHRcdC8vIHBhcmFsbGVsXG5cdFx0XHRcdFx0Ly8gZWRnZSBsaWVzIG9uIHRoZSBzYW1lIGhvcml6b250YWwgbGluZSBhcyBpblB0XG5cdFx0XHRcdFx0aWYgKCAoICggZWRnZUhpZ2hQdC54IDw9IGluUHQueCApICYmICggaW5QdC54IDw9IGVkZ2VMb3dQdC54ICkgKSB8fFxuXHRcdFx0XHRcdFx0ICggKCBlZGdlTG93UHQueCA8PSBpblB0LnggKSAmJiAoIGluUHQueCA8PSBlZGdlSGlnaFB0LnggKSApIClcdFx0cmV0dXJuXHR0cnVlO1x0Ly8gaW5QdDogUG9pbnQgb24gY29udG91ciAhXG5cdFx0XHRcdFx0Ly8gY29udGludWU7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVyblx0aW5zaWRlO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNDbG9ja1dpc2UgPSBTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlO1xuXG5cdFx0Y29uc3Qgc3ViUGF0aHMgPSB0aGlzLnN1YlBhdGhzO1xuXHRcdGlmICggc3ViUGF0aHMubGVuZ3RoID09PSAwICkgcmV0dXJuIFtdO1xuXG5cdFx0aWYgKCBub0hvbGVzID09PSB0cnVlIClcdHJldHVyblx0dG9TaGFwZXNOb0hvbGVzKCBzdWJQYXRocyApO1xuXG5cblx0XHRsZXQgc29saWQsIHRtcFBhdGgsIHRtcFNoYXBlO1xuXHRcdGNvbnN0IHNoYXBlcyA9IFtdO1xuXG5cdFx0aWYgKCBzdWJQYXRocy5sZW5ndGggPT09IDEgKSB7XG5cblx0XHRcdHRtcFBhdGggPSBzdWJQYXRoc1sgMCBdO1xuXHRcdFx0dG1wU2hhcGUgPSBuZXcgU2hhcGUoKTtcblx0XHRcdHRtcFNoYXBlLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXHRcdFx0c2hhcGVzLnB1c2goIHRtcFNoYXBlICk7XG5cdFx0XHRyZXR1cm4gc2hhcGVzO1xuXG5cdFx0fVxuXG5cdFx0bGV0IGhvbGVzRmlyc3QgPSAhIGlzQ2xvY2tXaXNlKCBzdWJQYXRoc1sgMCBdLmdldFBvaW50cygpICk7XG5cdFx0aG9sZXNGaXJzdCA9IGlzQ0NXID8gISBob2xlc0ZpcnN0IDogaG9sZXNGaXJzdDtcblxuXHRcdC8vIGNvbnNvbGUubG9nKFwiSG9sZXMgZmlyc3RcIiwgaG9sZXNGaXJzdCk7XG5cblx0XHRjb25zdCBiZXR0ZXJTaGFwZUhvbGVzID0gW107XG5cdFx0Y29uc3QgbmV3U2hhcGVzID0gW107XG5cdFx0bGV0IG5ld1NoYXBlSG9sZXMgPSBbXTtcblx0XHRsZXQgbWFpbklkeCA9IDA7XG5cdFx0bGV0IHRtcFBvaW50cztcblxuXHRcdG5ld1NoYXBlc1sgbWFpbklkeCBdID0gdW5kZWZpbmVkO1xuXHRcdG5ld1NoYXBlSG9sZXNbIG1haW5JZHggXSA9IFtdO1xuXG5cdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gc3ViUGF0aHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0dG1wUGF0aCA9IHN1YlBhdGhzWyBpIF07XG5cdFx0XHR0bXBQb2ludHMgPSB0bXBQYXRoLmdldFBvaW50cygpO1xuXHRcdFx0c29saWQgPSBpc0Nsb2NrV2lzZSggdG1wUG9pbnRzICk7XG5cdFx0XHRzb2xpZCA9IGlzQ0NXID8gISBzb2xpZCA6IHNvbGlkO1xuXG5cdFx0XHRpZiAoIHNvbGlkICkge1xuXG5cdFx0XHRcdGlmICggKCAhIGhvbGVzRmlyc3QgKSAmJiAoIG5ld1NoYXBlc1sgbWFpbklkeCBdICkgKVx0bWFpbklkeCArKztcblxuXHRcdFx0XHRuZXdTaGFwZXNbIG1haW5JZHggXSA9IHsgczogbmV3IFNoYXBlKCksIHA6IHRtcFBvaW50cyB9O1xuXHRcdFx0XHRuZXdTaGFwZXNbIG1haW5JZHggXS5zLmN1cnZlcyA9IHRtcFBhdGguY3VydmVzO1xuXG5cdFx0XHRcdGlmICggaG9sZXNGaXJzdCApXHRtYWluSWR4ICsrO1xuXHRcdFx0XHRuZXdTaGFwZUhvbGVzWyBtYWluSWR4IF0gPSBbXTtcblxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKCdjdycsIGkpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdG5ld1NoYXBlSG9sZXNbIG1haW5JZHggXS5wdXNoKCB7IGg6IHRtcFBhdGgsIHA6IHRtcFBvaW50c1sgMCBdIH0gKTtcblxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKCdjY3cnLCBpKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gb25seSBIb2xlcz8gLT4gcHJvYmFibHkgYWxsIFNoYXBlcyB3aXRoIHdyb25nIG9yaWVudGF0aW9uXG5cdFx0aWYgKCAhIG5ld1NoYXBlc1sgMCBdIClcdHJldHVyblx0dG9TaGFwZXNOb0hvbGVzKCBzdWJQYXRocyApO1xuXG5cblx0XHRpZiAoIG5ld1NoYXBlcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHRsZXQgYW1iaWd1b3VzID0gZmFsc2U7XG5cdFx0XHRjb25zdCB0b0NoYW5nZSA9IFtdO1xuXG5cdFx0XHRmb3IgKCBsZXQgc0lkeCA9IDAsIHNMZW4gPSBuZXdTaGFwZXMubGVuZ3RoOyBzSWR4IDwgc0xlbjsgc0lkeCArKyApIHtcblxuXHRcdFx0XHRiZXR0ZXJTaGFwZUhvbGVzWyBzSWR4IF0gPSBbXTtcblxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBsZXQgc0lkeCA9IDAsIHNMZW4gPSBuZXdTaGFwZXMubGVuZ3RoOyBzSWR4IDwgc0xlbjsgc0lkeCArKyApIHtcblxuXHRcdFx0XHRjb25zdCBzaG8gPSBuZXdTaGFwZUhvbGVzWyBzSWR4IF07XG5cblx0XHRcdFx0Zm9yICggbGV0IGhJZHggPSAwOyBoSWR4IDwgc2hvLmxlbmd0aDsgaElkeCArKyApIHtcblxuXHRcdFx0XHRcdGNvbnN0IGhvID0gc2hvWyBoSWR4IF07XG5cdFx0XHRcdFx0bGV0IGhvbGVfdW5hc3NpZ25lZCA9IHRydWU7XG5cblx0XHRcdFx0XHRmb3IgKCBsZXQgczJJZHggPSAwOyBzMklkeCA8IG5ld1NoYXBlcy5sZW5ndGg7IHMySWR4ICsrICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIGlzUG9pbnRJbnNpZGVQb2x5Z29uKCBoby5wLCBuZXdTaGFwZXNbIHMySWR4IF0ucCApICkge1xuXG5cdFx0XHRcdFx0XHRcdGlmICggc0lkeCAhPT0gczJJZHggKVx0dG9DaGFuZ2UucHVzaCggeyBmcm9tczogc0lkeCwgdG9zOiBzMklkeCwgaG9sZTogaElkeCB9ICk7XG5cdFx0XHRcdFx0XHRcdGlmICggaG9sZV91bmFzc2lnbmVkICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aG9sZV91bmFzc2lnbmVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0YmV0dGVyU2hhcGVIb2xlc1sgczJJZHggXS5wdXNoKCBobyApO1xuXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRhbWJpZ3VvdXMgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBob2xlX3VuYXNzaWduZWQgKSB7XG5cblx0XHRcdFx0XHRcdGJldHRlclNoYXBlSG9sZXNbIHNJZHggXS5wdXNoKCBobyApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhbWJpZ3VvdXM6IFwiLCBhbWJpZ3VvdXMpO1xuXG5cdFx0XHRpZiAoIHRvQ2hhbmdlLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJ0byBjaGFuZ2U6IFwiLCB0b0NoYW5nZSk7XG5cdFx0XHRcdGlmICggISBhbWJpZ3VvdXMgKVx0bmV3U2hhcGVIb2xlcyA9IGJldHRlclNoYXBlSG9sZXM7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGxldCB0bXBIb2xlcztcblxuXHRcdGZvciAoIGxldCBpID0gMCwgaWwgPSBuZXdTaGFwZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7XG5cblx0XHRcdHRtcFNoYXBlID0gbmV3U2hhcGVzWyBpIF0ucztcblx0XHRcdHNoYXBlcy5wdXNoKCB0bXBTaGFwZSApO1xuXHRcdFx0dG1wSG9sZXMgPSBuZXdTaGFwZUhvbGVzWyBpIF07XG5cblx0XHRcdGZvciAoIGxldCBqID0gMCwgamwgPSB0bXBIb2xlcy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHtcblxuXHRcdFx0XHR0bXBTaGFwZS5ob2xlcy5wdXNoKCB0bXBIb2xlc1sgaiBdLmggKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9jb25zb2xlLmxvZyhcInNoYXBlXCIsIHNoYXBlcyk7XG5cblx0XHRyZXR1cm4gc2hhcGVzO1xuXG5cdH1cblxufVxuXG5jb25zdCBfZmxvYXRWaWV3ID0gbmV3IEZsb2F0MzJBcnJheSggMSApO1xuY29uc3QgX2ludDMyVmlldyA9IG5ldyBJbnQzMkFycmF5KCBfZmxvYXRWaWV3LmJ1ZmZlciApO1xuXG5jbGFzcyBEYXRhVXRpbHMge1xuXG5cdC8vIENvbnZlcnRzIGZsb2F0MzIgdG8gZmxvYXQxNiAoc3RvcmVkIGFzIHVpbnQxNiB2YWx1ZSkuXG5cblx0c3RhdGljIHRvSGFsZkZsb2F0KCB2YWwgKSB7XG5cblx0XHRpZiAoIHZhbCA+IDY1NTA0ICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5EYXRhVXRpbHMudG9IYWxmRmxvYXQoKTogdmFsdWUgZXhjZWVkcyA2NTUwNC4nICk7XG5cblx0XHRcdHZhbCA9IDY1NTA0OyAvLyBtYXhpbXVtIHJlcHJlc2VudGFibGUgdmFsdWUgaW4gZmxvYXQxNlxuXG5cdFx0fVxuXG5cdFx0Ly8gU291cmNlOiBodHRwOi8vZ2FtZWRldi5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTczMjYvY29udmVyc2lvbi1vZi1hLW51bWJlci1mcm9tLXNpbmdsZS1wcmVjaXNpb24tZmxvYXRpbmctcG9pbnQtcmVwcmVzZW50YXRpb24tdG8tYS8xNzQxMCMxNzQxMFxuXG5cdFx0LyogVGhpcyBtZXRob2QgaXMgZmFzdGVyIHRoYW4gdGhlIE9wZW5FWFIgaW1wbGVtZW50YXRpb24gKHZlcnkgb2Z0ZW5cblx0XHQqIHVzZWQsIGVnLiBpbiBPZ3JlKSwgd2l0aCB0aGUgYWRkaXRpb25hbCBiZW5lZml0IG9mIHJvdW5kaW5nLCBpbnNwaXJlZFxuXHRcdCogYnkgSmFtZXMgVHVyc2E/cyBoYWxmLXByZWNpc2lvbiBjb2RlLiAqL1xuXG5cdFx0X2Zsb2F0Vmlld1sgMCBdID0gdmFsO1xuXHRcdGNvbnN0IHggPSBfaW50MzJWaWV3WyAwIF07XG5cblx0XHRsZXQgYml0cyA9ICggeCA+PiAxNiApICYgMHg4MDAwOyAvKiBHZXQgdGhlIHNpZ24gKi9cblx0XHRsZXQgbSA9ICggeCA+PiAxMiApICYgMHgwN2ZmOyAvKiBLZWVwIG9uZSBleHRyYSBiaXQgZm9yIHJvdW5kaW5nICovXG5cdFx0Y29uc3QgZSA9ICggeCA+PiAyMyApICYgMHhmZjsgLyogVXNpbmcgaW50IGlzIGZhc3RlciBoZXJlICovXG5cblx0XHQvKiBJZiB6ZXJvLCBvciBkZW5vcm1hbCwgb3IgZXhwb25lbnQgdW5kZXJmbG93cyB0b28gbXVjaCBmb3IgYSBkZW5vcm1hbFxuXHRcdFx0KiBoYWxmLCByZXR1cm4gc2lnbmVkIHplcm8uICovXG5cdFx0aWYgKCBlIDwgMTAzICkgcmV0dXJuIGJpdHM7XG5cblx0XHQvKiBJZiBOYU4sIHJldHVybiBOYU4uIElmIEluZiBvciBleHBvbmVudCBvdmVyZmxvdywgcmV0dXJuIEluZi4gKi9cblx0XHRpZiAoIGUgPiAxNDIgKSB7XG5cblx0XHRcdGJpdHMgfD0gMHg3YzAwO1xuXHRcdFx0LyogSWYgZXhwb25lbnQgd2FzIDB4ZmYgYW5kIG9uZSBtYW50aXNzYSBiaXQgd2FzIHNldCwgaXQgbWVhbnMgTmFOLFxuXHRcdFx0XHRcdFx0KiBub3QgSW5mLCBzbyBtYWtlIHN1cmUgd2Ugc2V0IG9uZSBtYW50aXNzYSBiaXQgdG9vLiAqL1xuXHRcdFx0Yml0cyB8PSAoICggZSA9PSAyNTUgKSA/IDAgOiAxICkgJiYgKCB4ICYgMHgwMDdmZmZmZiApO1xuXHRcdFx0cmV0dXJuIGJpdHM7XG5cblx0XHR9XG5cblx0XHQvKiBJZiBleHBvbmVudCB1bmRlcmZsb3dzIGJ1dCBub3QgdG9vIG11Y2gsIHJldHVybiBhIGRlbm9ybWFsICovXG5cdFx0aWYgKCBlIDwgMTEzICkge1xuXG5cdFx0XHRtIHw9IDB4MDgwMDtcblx0XHRcdC8qIEV4dHJhIHJvdW5kaW5nIG1heSBvdmVyZmxvdyBhbmQgc2V0IG1hbnRpc3NhIHRvIDAgYW5kIGV4cG9uZW50XG5cdFx0XHRcdCogdG8gMSwgd2hpY2ggaXMgT0suICovXG5cdFx0XHRiaXRzIHw9ICggbSA+PiAoIDExNCAtIGUgKSApICsgKCAoIG0gPj4gKCAxMTMgLSBlICkgKSAmIDEgKTtcblx0XHRcdHJldHVybiBiaXRzO1xuXG5cdFx0fVxuXG5cdFx0Yml0cyB8PSAoICggZSAtIDExMiApIDw8IDEwICkgfCAoIG0gPj4gMSApO1xuXHRcdC8qIEV4dHJhIHJvdW5kaW5nLiBBbiBvdmVyZmxvdyB3aWxsIHNldCBtYW50aXNzYSB0byAwIGFuZCBpbmNyZW1lbnRcblx0XHRcdCogdGhlIGV4cG9uZW50LCB3aGljaCBpcyBPSy4gKi9cblx0XHRiaXRzICs9IG0gJiAxO1xuXHRcdHJldHVybiBiaXRzO1xuXG5cdH1cblxufVxuXG5jb25zdCBMaW5lU3RyaXAgPSAwO1xuY29uc3QgTGluZVBpZWNlcyA9IDE7XG5jb25zdCBOb0NvbG9ycyA9IDA7XG5jb25zdCBGYWNlQ29sb3JzID0gMTtcbmNvbnN0IFZlcnRleENvbG9ycyA9IDI7XG5cbmZ1bmN0aW9uIE1lc2hGYWNlTWF0ZXJpYWwoIG1hdGVyaWFscyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG1hdGVyaWFscztcblxufVxuXG5mdW5jdGlvbiBNdWx0aU1hdGVyaWFsKCBtYXRlcmlhbHMgPSBbXSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLicgKTtcblx0bWF0ZXJpYWxzLmlzTXVsdGlNYXRlcmlhbCA9IHRydWU7XG5cdG1hdGVyaWFscy5tYXRlcmlhbHMgPSBtYXRlcmlhbHM7XG5cdG1hdGVyaWFscy5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBtYXRlcmlhbHMuc2xpY2UoKTtcblxuXHR9O1xuXG5cdHJldHVybiBtYXRlcmlhbHM7XG5cbn1cblxuZnVuY3Rpb24gUG9pbnRDbG91ZCggZ2VvbWV0cnksIG1hdGVyaWFsICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlBvaW50Q2xvdWQgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuJyApO1xuXHRyZXR1cm4gbmV3IFBvaW50cyggZ2VvbWV0cnksIG1hdGVyaWFsICk7XG5cbn1cblxuZnVuY3Rpb24gUGFydGljbGUoIG1hdGVyaWFsICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlBhcnRpY2xlIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuU3ByaXRlLicgKTtcblx0cmV0dXJuIG5ldyBTcHJpdGUoIG1hdGVyaWFsICk7XG5cbn1cblxuZnVuY3Rpb24gUGFydGljbGVTeXN0ZW0oIGdlb21ldHJ5LCBtYXRlcmlhbCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4nICk7XG5cdHJldHVybiBuZXcgUG9pbnRzKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblxufVxuXG5mdW5jdGlvbiBQb2ludENsb3VkTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUG9pbnRDbG91ZE1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuJyApO1xuXHRyZXR1cm4gbmV3IFBvaW50c01hdGVyaWFsKCBwYXJhbWV0ZXJzICk7XG5cbn1cblxuZnVuY3Rpb24gUGFydGljbGVCYXNpY01hdGVyaWFsKCBwYXJhbWV0ZXJzICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLicgKTtcblx0cmV0dXJuIG5ldyBQb2ludHNNYXRlcmlhbCggcGFyYW1ldGVycyApO1xuXG59XG5cbmZ1bmN0aW9uIFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLicgKTtcblx0cmV0dXJuIG5ldyBQb2ludHNNYXRlcmlhbCggcGFyYW1ldGVycyApO1xuXG59XG5cbmZ1bmN0aW9uIFZlcnRleCggeCwgeSwgeiApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVmVjdG9yMyggeCwgeSwgeiApO1xuXG59XG5cbi8vXG5cbmZ1bmN0aW9uIER5bmFtaWNCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0VXNhZ2UoIFRIUkVFLkR5bmFtaWNEcmF3VXNhZ2UgKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApLnNldFVzYWdlKCBEeW5hbWljRHJhd1VzYWdlICk7XG5cbn1cblxuZnVuY3Rpb24gSW50OEF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgSW50OEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gVWludDhBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgVWludDhCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApO1xuXG59XG5cbmZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gSW50MTZBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgSW50MTZCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApO1xuXG59XG5cbmZ1bmN0aW9uIFVpbnQxNkF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gSW50MzJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5JbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgSW50MzJCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApO1xuXG59XG5cbmZ1bmN0aW9uIFVpbnQzMkF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gRmxvYXQzMkF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuZnVuY3Rpb24gRmxvYXQ2NEF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkZsb2F0NjRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICk7XG5cbn1cblxuLy9cblxuQ3VydmUuY3JlYXRlID0gZnVuY3Rpb24gKCBjb25zdHJ1Y3QsIGdldFBvaW50ICkge1xuXG5cdGNvbnNvbGUubG9nKCAnVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCcgKTtcblxuXHRjb25zdHJ1Y3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7XG5cdGNvbnN0cnVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Q7XG5cdGNvbnN0cnVjdC5wcm90b3R5cGUuZ2V0UG9pbnQgPSBnZXRQb2ludDtcblxuXHRyZXR1cm4gY29uc3RydWN0O1xuXG59O1xuXG4vL1xuXG5QYXRoLnByb3RvdHlwZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24gKCBwb2ludHMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tUG9pbnRzKCBwb2ludHMgKTtcblxufTtcblxuLy9cblxuZnVuY3Rpb24gQXhpc0hlbHBlciggc2l6ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5BeGlzSGVscGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuQXhlc0hlbHBlci4nICk7XG5cdHJldHVybiBuZXcgQXhlc0hlbHBlciggc2l6ZSApO1xuXG59XG5cbmZ1bmN0aW9uIEJvdW5kaW5nQm94SGVscGVyKCBvYmplY3QsIGNvbG9yICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IEJveEhlbHBlciggb2JqZWN0LCBjb2xvciApO1xuXG59XG5cbmZ1bmN0aW9uIEVkZ2VzSGVscGVyKCBvYmplY3QsIGhleCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5FZGdlc0hlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRWRnZXNHZW9tZXRyeSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBMaW5lU2VnbWVudHMoIG5ldyBFZGdlc0dlb21ldHJ5KCBvYmplY3QuZ2VvbWV0cnkgKSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBoZXggIT09IHVuZGVmaW5lZCA/IGhleCA6IDB4ZmZmZmZmIH0gKSApO1xuXG59XG5cbkdyaWRIZWxwZXIucHJvdG90eXBlLnNldENvbG9ycyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLicgKTtcblxufTtcblxuU2tlbGV0b25IZWxwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuJyApO1xuXG59O1xuXG5mdW5jdGlvbiBXaXJlZnJhbWVIZWxwZXIoIG9iamVjdCwgaGV4ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgTGluZVNlZ21lbnRzKCBuZXcgV2lyZWZyYW1lR2VvbWV0cnkoIG9iamVjdC5nZW9tZXRyeSApLCBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGhleCAhPT0gdW5kZWZpbmVkID8gaGV4IDogMHhmZmZmZmYgfSApICk7XG5cbn1cblxuLy9cblxuTG9hZGVyLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZSA9IGZ1bmN0aW9uICggdXJsICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSggdXJsICk7XG5cbn07XG5cbkxvYWRlci5IYW5kbGVycyA9IHtcblxuXHRhZGQ6IGZ1bmN0aW9uICggLyogcmVnZXgsIGxvYWRlciAqLyApIHtcblxuXHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4nICk7XG5cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uICggLyogZmlsZSAqLyApIHtcblxuXHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4nICk7XG5cblx0fVxuXG59O1xuXG5mdW5jdGlvbiBYSFJMb2FkZXIoIG1hbmFnZXIgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuWEhSTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRmlsZUxvYWRlci4nICk7XG5cdHJldHVybiBuZXcgRmlsZUxvYWRlciggbWFuYWdlciApO1xuXG59XG5cbmZ1bmN0aW9uIEJpbmFyeVRleHR1cmVMb2FkZXIoIG1hbmFnZXIgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLicgKTtcblx0cmV0dXJuIG5ldyBEYXRhVGV4dHVyZUxvYWRlciggbWFuYWdlciApO1xuXG59XG5cbi8vXG5cbkJveDIucHJvdG90eXBlLmNlbnRlciA9IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94MjogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKCBvcHRpb25hbFRhcmdldCApO1xuXG59O1xuXG5Cb3gyLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pc0VtcHR5KCk7XG5cbn07XG5cbkJveDIucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94ID0gZnVuY3Rpb24gKCBib3ggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLicgKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveCggYm94ICk7XG5cbn07XG5cbkJveDIucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSggb3B0aW9uYWxUYXJnZXQgKTtcblxufTtcblxuLy9cblxuQm94My5wcm90b3R5cGUuY2VudGVyID0gZnVuY3Rpb24gKCBvcHRpb25hbFRhcmdldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRDZW50ZXIoIG9wdGlvbmFsVGFyZ2V0ICk7XG5cbn07XG5cbkJveDMucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4nICk7XG5cdHJldHVybiB0aGlzLmlzRW1wdHkoKTtcblxufTtcblxuQm94My5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3ggPSBmdW5jdGlvbiAoIGJveCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KCBib3ggKTtcblxufTtcblxuQm94My5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmUgPSBmdW5jdGlvbiAoIHNwaGVyZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKTtcblxufTtcblxuQm94My5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRTaXplKCBvcHRpb25hbFRhcmdldCApO1xuXG59O1xuXG4vL1xuXG5TcGhlcmUucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLicgKTtcblx0cmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuXG59O1xuXG4vL1xuXG5GcnVzdHVtLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4ID0gZnVuY3Rpb24gKCBtICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4nICk7XG5cdHJldHVybiB0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCBtICk7XG5cbn07XG5cbi8vXG5cbkxpbmUzLnByb3RvdHlwZS5jZW50ZXIgPSBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRDZW50ZXIoIG9wdGlvbmFsVGFyZ2V0ICk7XG5cbn07XG5cbi8vXG5cbk1hdHJpeDMucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0ID0gZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy50b0FycmF5KCBhcnJheSwgb2Zmc2V0ICk7XG5cbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMyA9IGZ1bmN0aW9uICggdmVjdG9yICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXgzKCB0aGlzICk7XG5cbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5ID0gZnVuY3Rpb24gKCAvKiBhICovICkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuTWF0cml4My5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSA9IGZ1bmN0aW9uICggYXR0cmlidXRlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gYXR0cmlidXRlLmFwcGx5TWF0cml4MyggdGhpcyApO1xuXG59O1xuXG5NYXRyaXgzLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5ID0gZnVuY3Rpb24gKCAvKiBhcnJheSwgb2Zmc2V0LCBsZW5ndGggKi8gKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDMucHJvdG90eXBlLmdldEludmVyc2UgPSBmdW5jdGlvbiAoIG1hdHJpeCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTtcblxufTtcblxuLy9cblxuTWF0cml4NC5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uID0gZnVuY3Rpb24gKCBtICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4nICk7XG5cdHJldHVybiB0aGlzLmNvcHlQb3NpdGlvbiggbSApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldCA9IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHRoaXMudG9BcnJheSggYXJyYXksIG9mZnNldCApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gbmV3IFZlY3RvcjMoKS5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAzICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24gPSBmdW5jdGlvbiAoIHEgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLicgKTtcblx0cmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHEgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzID0gZnVuY3Rpb24gKCB2ZWN0b3IgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoIHRoaXMgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0ID0gZnVuY3Rpb24gKCB2ZWN0b3IgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoIHRoaXMgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXkgPSBmdW5jdGlvbiAoIC8qIGEgKi8gKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVBeGlzID0gZnVuY3Rpb24gKCB2ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLicgKTtcblx0di50cmFuc2Zvcm1EaXJlY3Rpb24oIHRoaXMgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUuY3Jvc3NWZWN0b3IgPSBmdW5jdGlvbiAoIHZlY3RvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4nICk7XG5cdHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCB0aGlzICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVYID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVZID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVaID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5yb3RhdGVCeUF4aXMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuTWF0cml4NC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSA9IGZ1bmN0aW9uICggYXR0cmlidXRlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gYXR0cmlidXRlLmFwcGx5TWF0cml4NCggdGhpcyApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5ID0gZnVuY3Rpb24gKCAvKiBhcnJheSwgb2Zmc2V0LCBsZW5ndGggKi8gKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbk1hdHJpeDQucHJvdG90eXBlLm1ha2VGcnVzdHVtID0gZnVuY3Rpb24gKCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHRoaXMubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApO1xuXG59O1xuXG5NYXRyaXg0LnByb3RvdHlwZS5nZXRJbnZlcnNlID0gZnVuY3Rpb24gKCBtYXRyaXggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHRoaXMuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7XG5cbn07XG5cbi8vXG5cblBsYW5lLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmUgPSBmdW5jdGlvbiAoIGxpbmUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUoIGxpbmUgKTtcblxufTtcblxuLy9cblxuUXVhdGVybmlvbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzID0gZnVuY3Rpb24gKCB2ZWN0b3IgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggdGhpcyApO1xuXG59O1xuXG5RdWF0ZXJuaW9uLnByb3RvdHlwZS5pbnZlcnNlID0gZnVuY3Rpb24gKCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnZlcnQoKTtcblxufTtcblxuLy9cblxuUmF5LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveCA9IGZ1bmN0aW9uICggYm94ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLicgKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveCggYm94ICk7XG5cbn07XG5cblJheS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZSA9IGZ1bmN0aW9uICggcGxhbmUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1BsYW5lKCBwbGFuZSApO1xuXG59O1xuXG5SYXkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlID0gZnVuY3Rpb24gKCBzcGhlcmUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKTtcblxufTtcblxuLy9cblxuVHJpYW5nbGUucHJvdG90eXBlLmFyZWEgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0QXJlYSgpO1xuXG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQoIHBvaW50LCB0YXJnZXQgKTtcblxufTtcblxuVHJpYW5nbGUucHJvdG90eXBlLm1pZHBvaW50ID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRNaWRwb2ludCggdGFyZ2V0ICk7XG5cbn07XG5cblRyaWFuZ2xlLnByb3RvdHlwZW5vcm1hbCA9IGZ1bmN0aW9uICggdGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXROb3JtYWwoIHRhcmdldCApO1xuXG59O1xuXG5UcmlhbmdsZS5wcm90b3R5cGUucGxhbmUgPSBmdW5jdGlvbiAoIHRhcmdldCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldFBsYW5lKCB0YXJnZXQgKTtcblxufTtcblxuVHJpYW5nbGUuYmFyeWNvb3JkRnJvbVBvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgYSwgYiwgYywgdGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuJyApO1xuXHRyZXR1cm4gVHJpYW5nbGUuZ2V0QmFyeWNvb3JkKCBwb2ludCwgYSwgYiwgYywgdGFyZ2V0ICk7XG5cbn07XG5cblRyaWFuZ2xlLm5vcm1hbCA9IGZ1bmN0aW9uICggYSwgYiwgYywgdGFyZ2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuJyApO1xuXHRyZXR1cm4gVHJpYW5nbGUuZ2V0Tm9ybWFsKCBhLCBiLCBjLCB0YXJnZXQgKTtcblxufTtcblxuLy9cblxuU2hhcGUucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHMgPSBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHRoaXMuZXh0cmFjdFBvaW50cyggZGl2aXNpb25zICk7XG5cbn07XG5cblNoYXBlLnByb3RvdHlwZS5leHRydWRlID0gZnVuY3Rpb24gKCBvcHRpb25zICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIG5ldyBFeHRydWRlR2VvbWV0cnkoIHRoaXMsIG9wdGlvbnMgKTtcblxufTtcblxuU2hhcGUucHJvdG90eXBlLm1ha2VHZW9tZXRyeSA9IGZ1bmN0aW9uICggb3B0aW9ucyApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4nICk7XG5cdHJldHVybiBuZXcgU2hhcGVHZW9tZXRyeSggdGhpcywgb3B0aW9ucyApO1xuXG59O1xuXG4vL1xuXG5WZWN0b3IyLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlID0gZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKTtcblxufTtcblxuVmVjdG9yMi5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbiA9IGZ1bmN0aW9uICggdiApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4nICk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oIHYgKTtcblxufTtcblxuVmVjdG9yMi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nICk7XG5cdHJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpO1xuXG59O1xuXG4vL1xuXG5WZWN0b3IzLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuJyApO1xuXG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuJyApO1xuXG59O1xuXG5WZWN0b3IzLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXggPSBmdW5jdGlvbiAoIG0gKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLicgKTtcblx0cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtICk7XG5cbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeCA9IGZ1bmN0aW9uICggbSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUoIG0gKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeCA9IGZ1bmN0aW9uICggaW5kZXgsIG1hdHJpeCApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4nICk7XG5cdHJldHVybiB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIG1hdHJpeCwgaW5kZXggKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCBtICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIG0gKTtcblxufTtcblxuVmVjdG9yMy5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uICggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICk7XG5cbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW4gPSBmdW5jdGlvbiAoIHYgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKCB2ICk7XG5cbn07XG5cblZlY3RvcjMucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKTtcblxufTtcblxuLy9cblxuVmVjdG9yNC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uICggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICk7XG5cbn07XG5cblZlY3RvcjQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKTtcblxufTtcblxuLy9cblxuT2JqZWN0M0QucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKCBuYW1lICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldE9iamVjdEJ5TmFtZSggbmFtZSApO1xuXG59O1xuXG5PYmplY3QzRC5wcm90b3R5cGUucmVuZGVyRGVwdGggPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLicgKTtcblxufTtcblxuT2JqZWN0M0QucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICggZGlzdGFuY2UsIGF4aXMgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLicgKTtcblx0cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApO1xuXG59O1xuXG5PYmplY3QzRC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4nICk7XG5cbn07XG5cbk9iamVjdDNELnByb3RvdHlwZS5hcHBseU1hdHJpeCA9IGZ1bmN0aW9uICggbWF0cml4ICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4nICk7XG5cdHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggbWF0cml4ICk7XG5cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBPYmplY3QzRC5wcm90b3R5cGUsIHtcblxuXHRldWxlck9yZGVyOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnJvdGF0aW9uLm9yZGVyO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLicgKTtcblx0XHRcdHRoaXMucm90YXRpb24ub3JkZXIgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0dXNlUXVhdGVybmlvbjoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4nICk7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4nICk7XG5cblx0XHR9XG5cdH1cblxufSApO1xuXG5NZXNoLnByb3RvdHlwZS5zZXREcmF3TW9kZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4nICk7XG5cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBNZXNoLnByb3RvdHlwZSwge1xuXG5cdGRyYXdNb2RlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4nICk7XG5cdFx0XHRyZXR1cm4gVHJpYW5nbGVzRHJhd01vZGU7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuJyApO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuU2tpbm5lZE1lc2gucHJvdG90eXBlLmluaXRCb25lcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG4vL1xuXG5QZXJzcGVjdGl2ZUNhbWVyYS5wcm90b3R5cGUuc2V0TGVucyA9IGZ1bmN0aW9uICggZm9jYWxMZW5ndGgsIGZpbG1HYXVnZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuICcgK1xuXHRcdFx0J1VzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLicgKTtcblxuXHRpZiAoIGZpbG1HYXVnZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5maWxtR2F1Z2UgPSBmaWxtR2F1Z2U7XG5cdHRoaXMuc2V0Rm9jYWxMZW5ndGgoIGZvY2FsTGVuZ3RoICk7XG5cbn07XG5cbi8vXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBMaWdodC5wcm90b3R5cGUsIHtcblx0b25seVNoYWRvdzoge1xuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUZvdjoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuZm92ID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUxlZnQ6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEubGVmdCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFSaWdodDoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuJyApO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0ID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYVRvcDoge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEudG9wID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYUJvdHRvbToge1xuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0NhbWVyYU5lYXI6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5jYW1lcmEubmVhciA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFGYXI6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuJyApO1xuXHRcdFx0dGhpcy5zaGFkb3cuY2FtZXJhLmZhciA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dDYW1lcmFWaXNpYmxlOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dCaWFzOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4nICk7XG5cdFx0XHR0aGlzLnNoYWRvdy5iaWFzID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd0RhcmtuZXNzOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cdHNoYWRvd01hcFdpZHRoOiB7XG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguJyApO1xuXHRcdFx0dGhpcy5zaGFkb3cubWFwU2l6ZS53aWR0aCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBIZWlnaHQ6IHtcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LicgKTtcblx0XHRcdHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0ID0gdmFsdWU7XG5cblx0XHR9XG5cdH1cbn0gKTtcblxuLy9cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUsIHtcblxuXHRsZW5ndGg6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcnJheS5sZW5ndGg7XG5cblx0XHR9XG5cdH0sXG5cdGR5bmFtaWM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudXNhZ2UgPT09IER5bmFtaWNEcmF3VXNhZ2U7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCAvKiB2YWx1ZSAqLyApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuJyApO1xuXHRcdFx0dGhpcy5zZXRVc2FnZSggRHluYW1pY0RyYXdVc2FnZSApO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5zZXREeW5hbWljID0gZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuJyApO1xuXHR0aGlzLnNldFVzYWdlKCB2YWx1ZSA9PT0gdHJ1ZSA/IER5bmFtaWNEcmF3VXNhZ2UgOiBTdGF0aWNEcmF3VXNhZ2UgKTtcblx0cmV0dXJuIHRoaXM7XG5cbn07XG5cbkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29weUluZGljZXNBcnJheSA9IGZ1bmN0aW9uICggLyogaW5kaWNlcyAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59LFxuXG5CdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24gKCAvKiBhcnJheSAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMnICk7XG5cbn07XG5cbi8vXG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uICggaW5kZXggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuJyApO1xuXHR0aGlzLnNldEluZGV4KCBpbmRleCApO1xuXG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24gKCBuYW1lLCBhdHRyaWJ1dGUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4nICk7XG5cblx0aWYgKCAhICggYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5pc0J1ZmZlckF0dHJpYnV0ZSApICYmICEgKCBhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4nICk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGFyZ3VtZW50c1sgMSBdLCBhcmd1bWVudHNbIDIgXSApICk7XG5cblx0fVxuXG5cdGlmICggbmFtZSA9PT0gJ2luZGV4JyApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuJyApO1xuXHRcdHRoaXMuc2V0SW5kZXgoIGF0dHJpYnV0ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSggbmFtZSwgYXR0cmlidXRlICk7XG5cbn07XG5cbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGREcmF3Q2FsbCA9IGZ1bmN0aW9uICggc3RhcnQsIGNvdW50LCBpbmRleE9mZnNldCApIHtcblxuXHRpZiAoIGluZGV4T2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LicgKTtcblxuXHR9XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4nICk7XG5cdHRoaXMuYWRkR3JvdXAoIHN0YXJ0LCBjb3VudCApO1xuXG59O1xuXG5CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4nICk7XG5cdHRoaXMuY2xlYXJHcm91cHMoKTtcblxufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVPZmZzZXRzID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uICggbmFtZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLicgKTtcblxuXHRyZXR1cm4gdGhpcy5kZWxldGVBdHRyaWJ1dGUoIG5hbWUgKTtcblxufTtcblxuQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmFwcGx5TWF0cml4ID0gZnVuY3Rpb24gKCBtYXRyaXggKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLicgKTtcblx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTtcblxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSwge1xuXG5cdGRyYXdjYWxsczoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmdyb3VwcztcblxuXHRcdH1cblx0fSxcblx0b2Zmc2V0czoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmdyb3VwcztcblxuXHRcdH1cblx0fVxuXG59ICk7XG5cbkludGVybGVhdmVkQnVmZmVyLnByb3RvdHlwZS5zZXREeW5hbWljID0gZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4nICk7XG5cdHRoaXMuc2V0VXNhZ2UoIHZhbHVlID09PSB0cnVlID8gRHluYW1pY0RyYXdVc2FnZSA6IFN0YXRpY0RyYXdVc2FnZSApO1xuXHRyZXR1cm4gdGhpcztcblxufTtcblxuSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24gKCAvKiBhcnJheSAqLyApIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycycgKTtcblxufTtcblxuLy9cblxuRXh0cnVkZUdlb21ldHJ5LnByb3RvdHlwZS5nZXRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5FeHRydWRlR2VvbWV0cnkucHJvdG90eXBlLmFkZFNoYXBlTGlzdCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbkV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUuYWRkU2hhcGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbi8vXG5cblNjZW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuLy9cblxuVW5pZm9ybS5wcm90b3R5cGUub25VcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuJyApO1xuXHRyZXR1cm4gdGhpcztcblxufTtcblxuLy9cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1hdGVyaWFsLnByb3RvdHlwZSwge1xuXG5cdHdyYXBBcm91bmQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXG5cdG92ZXJkcmF3OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fVxuXHR9LFxuXG5cdHdyYXBSR0I6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcigpO1xuXG5cdFx0fVxuXHR9LFxuXG5cdHNoYWRpbmc6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyApO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyApO1xuXHRcdFx0dGhpcy5mbGF0U2hhZGluZyA9ICggdmFsdWUgPT09IEZsYXRTaGFkaW5nICk7XG5cblx0XHR9XG5cdH0sXG5cblx0c3RlbmNpbE1hc2s6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLnN0ZW5jaWxGdW5jTWFzaztcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuJyApO1xuXHRcdFx0dGhpcy5zdGVuY2lsRnVuY01hc2sgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblxuXHR2ZXJ0ZXhUYW5nZW50czoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH1cblx0fSxcblxufSApO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLCB7XG5cblx0ZGVyaXZhdGl2ZXM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLicgKTtcblx0XHRcdHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuLy9cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuY2xlYXJUYXJnZXQgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgY29sb3IsIGRlcHRoLCBzdGVuY2lsICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuJyApO1xuXHR0aGlzLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICk7XG5cdHRoaXMuY2xlYXIoIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKCBjYWxsYmFjayApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLicgKTtcblx0dGhpcy5zZXRBbmltYXRpb25Mb29wKCBjYWxsYmFjayApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4nICk7XG5cdHJldHVybiB0aGlzLmdldFJlbmRlclRhcmdldCgpO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5ID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLicgKTtcblx0cmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uJyApO1xuXHRyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9uO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZXNldEdMU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4nICk7XG5cdHJldHVybiB0aGlzLnN0YXRlLnJlc2V0KCk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnT0VTX3RleHR1cmVfZmxvYXRcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0XFwnICkuJyApO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXFwnICkuJyApO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggXFwnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjXFwnICkuJyApO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoIFxcJ0VYVF9ibGVuZF9taW5tYXhcXCcgKS4nICk7XG5cdHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLicgKTtcblx0cmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcXCdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXFwnICkuJyApO1xuXHRyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCBib29sZWFuICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4nICk7XG5cdHRoaXMuc2V0U2Npc3NvclRlc3QoIGJvb2xlYW4gKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaW5pdE1hdGVyaWFsID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWRkUHJlUGx1Z2luID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbiA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZyA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufTtcblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmUyRCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cbn07XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59O1xuXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbCA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuJyApO1xuXHRyZXR1cm4gdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpO1xuXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggV2ViR0xSZW5kZXJlci5wcm90b3R5cGUsIHtcblxuXHRzaGFkb3dNYXBFbmFibGVkOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuJyApO1xuXHRcdFx0dGhpcy5zaGFkb3dNYXAuZW5hYmxlZCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBUeXBlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLnNoYWRvd01hcC50eXBlO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuJyApO1xuXHRcdFx0dGhpcy5zaGFkb3dNYXAudHlwZSA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRzaGFkb3dNYXBDdWxsRmFjZToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggLyogdmFsdWUgKi8gKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblx0fSxcblx0Y29udGV4dDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB0aGlzLmdldENvbnRleHQoKTtcblxuXHRcdH1cblx0fSxcblx0dnI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMueHI7XG5cblx0XHR9XG5cdH0sXG5cdGdhbW1hSW5wdXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblx0fSxcblx0Z2FtbWFPdXRwdXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuJyApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLicgKTtcblx0XHRcdHRoaXMub3V0cHV0RW5jb2RpbmcgPSAoIHZhbHVlID09PSB0cnVlICkgPyBzUkdCRW5jb2RpbmcgOiBMaW5lYXJFbmNvZGluZztcblxuXHRcdH1cblx0fSxcblx0dG9uZU1hcHBpbmdXaGl0ZVBvaW50OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cdFx0XHRyZXR1cm4gMS4wO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxuXHRcdH1cblx0fSxcblx0Z2FtbWFGYWN0b3I6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXHRcdFx0cmV0dXJuIDI7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4nICk7XG5cblx0XHR9XG5cdH1cbn0gKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFdlYkdMU2hhZG93TWFwLnByb3RvdHlwZSwge1xuXG5cdGN1bGxGYWNlOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggLyogY3VsbEZhY2UgKi8gKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7XG5cblx0XHR9XG5cdH0sXG5cdHJlbmRlclJldmVyc2VTaWRlZDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblxuXHRcdH1cblx0fSxcblx0cmVuZGVyU2luZ2xlU2lkZWQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApO1xuXG5cdFx0fVxuXHR9XG5cbn0gKTtcblxuZnVuY3Rpb24gV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKS4nICk7XG5cdHJldHVybiBuZXcgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCB3aWR0aCwgb3B0aW9ucyApO1xuXG59XG5cbi8vXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBXZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUsIHtcblxuXHR3cmFwUzoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBTO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS53cmFwUyA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHR3cmFwVDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBUO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS53cmFwVCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRtYWdGaWx0ZXI6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcjtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS5tYWdGaWx0ZXIgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0bWluRmlsdGVyOiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXI7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4nICk7XG5cdFx0XHR0aGlzLnRleHR1cmUubWluRmlsdGVyID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdGFuaXNvdHJvcHk6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUuYW5pc290cm9weTtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLmFuaXNvdHJvcHkgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0b2Zmc2V0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS5vZmZzZXQ7XG5cblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4nICk7XG5cdFx0XHR0aGlzLnRleHR1cmUub2Zmc2V0ID0gdmFsdWU7XG5cblx0XHR9XG5cdH0sXG5cdHJlcGVhdDoge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LicgKTtcblx0XHRcdHJldHVybiB0aGlzLnRleHR1cmUucmVwZWF0O1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuJyApO1xuXHRcdFx0dGhpcy50ZXh0dXJlLnJlcGVhdCA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRmb3JtYXQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLmZvcm1hdDtcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS5mb3JtYXQgPSB2YWx1ZTtcblxuXHRcdH1cblx0fSxcblx0dHlwZToge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuJyApO1xuXHRcdFx0cmV0dXJuIHRoaXMudGV4dHVyZS50eXBlO1xuXG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4nICk7XG5cdFx0XHR0aGlzLnRleHR1cmUudHlwZSA9IHZhbHVlO1xuXG5cdFx0fVxuXHR9LFxuXHRnZW5lcmF0ZU1pcG1hcHM6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztcblxuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLicgKTtcblx0XHRcdHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSB2YWx1ZTtcblxuXHRcdH1cblx0fVxuXG59ICk7XG5cbi8vXG5cbkF1ZGlvLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKCBmaWxlICkge1xuXG5cdGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4nICk7XG5cdGNvbnN0IHNjb3BlID0gdGhpcztcblx0Y29uc3QgYXVkaW9Mb2FkZXIgPSBuZXcgQXVkaW9Mb2FkZXIoKTtcblx0YXVkaW9Mb2FkZXIubG9hZCggZmlsZSwgZnVuY3Rpb24gKCBidWZmZXIgKSB7XG5cblx0XHRzY29wZS5zZXRCdWZmZXIoIGJ1ZmZlciApO1xuXG5cdH0gKTtcblx0cmV0dXJuIHRoaXM7XG5cbn07XG5cblxuQXVkaW9BbmFseXNlci5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLicgKTtcblx0cmV0dXJuIHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO1xuXG59O1xuXG4vL1xuXG5DdWJlQ2FtZXJhLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwID0gZnVuY3Rpb24gKCByZW5kZXJlciwgc2NlbmUgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLicgKTtcblx0cmV0dXJuIHRoaXMudXBkYXRlKCByZW5kZXJlciwgc2NlbmUgKTtcblxufTtcblxuQ3ViZUNhbWVyYS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwgKSB7XG5cblx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4nICk7XG5cdHJldHVybiB0aGlzLnJlbmRlclRhcmdldC5jbGVhciggcmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApO1xuXG59O1xuXG5JbWFnZVV0aWxzLmNyb3NzT3JpZ2luID0gdW5kZWZpbmVkO1xuXG5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKCB1cmwsIG1hcHBpbmcsIG9uTG9hZCwgb25FcnJvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4nICk7XG5cblx0Y29uc3QgbG9hZGVyID0gbmV3IFRleHR1cmVMb2FkZXIoKTtcblx0bG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7XG5cblx0Y29uc3QgdGV4dHVyZSA9IGxvYWRlci5sb2FkKCB1cmwsIG9uTG9hZCwgdW5kZWZpbmVkLCBvbkVycm9yICk7XG5cblx0aWYgKCBtYXBwaW5nICkgdGV4dHVyZS5tYXBwaW5nID0gbWFwcGluZztcblxuXHRyZXR1cm4gdGV4dHVyZTtcblxufTtcblxuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoIHVybHMsIG1hcHBpbmcsIG9uTG9hZCwgb25FcnJvciApIHtcblxuXHRjb25zb2xlLndhcm4oICdUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLicgKTtcblxuXHRjb25zdCBsb2FkZXIgPSBuZXcgQ3ViZVRleHR1cmVMb2FkZXIoKTtcblx0bG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7XG5cblx0Y29uc3QgdGV4dHVyZSA9IGxvYWRlci5sb2FkKCB1cmxzLCBvbkxvYWQsIHVuZGVmaW5lZCwgb25FcnJvciApO1xuXG5cdGlmICggbWFwcGluZyApIHRleHR1cmUubWFwcGluZyA9IG1hcHBpbmc7XG5cblx0cmV0dXJuIHRleHR1cmU7XG5cbn07XG5cbkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlID0gZnVuY3Rpb24gKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuJyApO1xuXG59O1xuXG5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuJyApO1xuXG59O1xuXG4vL1xuXG5mdW5jdGlvbiBDYW52YXNSZW5kZXJlcigpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXIgaGFzIGJlZW4gcmVtb3ZlZCcgKTtcblxufVxuXG4vL1xuXG5mdW5jdGlvbiBKU09OTG9hZGVyKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuJyApO1xuXG59XG5cbi8vXG5cbmNvbnN0IFNjZW5lVXRpbHMgPSB7XG5cblx0Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDogZnVuY3Rpb24gKCAvKiBnZW9tZXRyeSwgbWF0ZXJpYWxzICovICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzJyApO1xuXG5cdH0sXG5cblx0ZGV0YWNoOiBmdW5jdGlvbiAoIC8qIGNoaWxkLCBwYXJlbnQsIHNjZW5lICovICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzJyApO1xuXG5cdH0sXG5cblx0YXR0YWNoOiBmdW5jdGlvbiAoIC8qIGNoaWxkLCBzY2VuZSwgcGFyZW50ICovICkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzJyApO1xuXG5cdH1cblxufTtcblxuLy9cblxuZnVuY3Rpb24gTGVuc0ZsYXJlKCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcycgKTtcblxufVxuXG4vL1xuXG5mdW5jdGlvbiBQYXJhbWV0cmljR2VvbWV0cnkoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvUGFyYW1ldHJpY0dlb21ldHJ5LmpzJyApO1xuXHRyZXR1cm4gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cbn1cblxuZnVuY3Rpb24gVGV4dEdlb21ldHJ5KCkge1xuXG5cdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5UZXh0R2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1RleHRHZW9tZXRyeS5qcycgKTtcblx0cmV0dXJuIG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG59XG5cbmZ1bmN0aW9uIEZvbnRMb2FkZXIoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkZvbnRMb2FkZXIgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMnICk7XG5cbn1cblxuZnVuY3Rpb24gRm9udCgpIHtcblxuXHRjb25zb2xlLmVycm9yKCAnVEhSRUUuRm9udCBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcycgKTtcblxufVxuXG5mdW5jdGlvbiBJbW1lZGlhdGVSZW5kZXJPYmplY3QoKSB7XG5cblx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkltbWVkaWF0ZVJlbmRlck9iamVjdCBoYXMgYmVlbiByZW1vdmVkLicgKTtcblxufVxuXG5pZiAoIHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnICkge1xuXG5cdF9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICdyZWdpc3RlcicsIHsgZGV0YWlsOiB7XG5cdFx0cmV2aXNpb246IFJFVklTSU9OLFxuXHR9IH0gKSApO1xuXG59XG5cbmlmICggdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0aWYgKCB3aW5kb3cuX19USFJFRV9fICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLicgKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0d2luZG93Ll9fVEhSRUVfXyA9IFJFVklTSU9OO1xuXG5cdH1cblxufVxuXG5leHBvcnQgeyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcsIEFkZEVxdWF0aW9uLCBBZGRPcGVyYXRpb24sIEFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlLCBBZGRpdGl2ZUJsZW5kaW5nLCBBbHBoYUZvcm1hdCwgQWx3YXlzRGVwdGgsIEFsd2F5c1N0ZW5jaWxGdW5jLCBBbWJpZW50TGlnaHQsIEFtYmllbnRMaWdodFByb2JlLCBBbmltYXRpb25DbGlwLCBBbmltYXRpb25Mb2FkZXIsIEFuaW1hdGlvbk1peGVyLCBBbmltYXRpb25PYmplY3RHcm91cCwgQW5pbWF0aW9uVXRpbHMsIEFyY0N1cnZlLCBBcnJheUNhbWVyYSwgQXJyb3dIZWxwZXIsIEF1ZGlvLCBBdWRpb0FuYWx5c2VyLCBBdWRpb0NvbnRleHQsIEF1ZGlvTGlzdGVuZXIsIEF1ZGlvTG9hZGVyLCBBeGVzSGVscGVyLCBBeGlzSGVscGVyLCBCYWNrU2lkZSwgQmFzaWNEZXB0aFBhY2tpbmcsIEJhc2ljU2hhZG93TWFwLCBCaW5hcnlUZXh0dXJlTG9hZGVyLCBCb25lLCBCb29sZWFuS2V5ZnJhbWVUcmFjaywgQm91bmRpbmdCb3hIZWxwZXIsIEJveDIsIEJveDMsIEJveDNIZWxwZXIsIEJveEdlb21ldHJ5IGFzIEJveEJ1ZmZlckdlb21ldHJ5LCBCb3hHZW9tZXRyeSwgQm94SGVscGVyLCBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBCdWZmZXJHZW9tZXRyeUxvYWRlciwgQnl0ZVR5cGUsIENhY2hlLCBDYW1lcmEsIENhbWVyYUhlbHBlciwgQ2FudmFzUmVuZGVyZXIsIENhbnZhc1RleHR1cmUsIENhdG11bGxSb21DdXJ2ZTMsIENpbmVvblRvbmVNYXBwaW5nLCBDaXJjbGVHZW9tZXRyeSBhcyBDaXJjbGVCdWZmZXJHZW9tZXRyeSwgQ2lyY2xlR2VvbWV0cnksIENsYW1wVG9FZGdlV3JhcHBpbmcsIENsb2NrLCBDb2xvciwgQ29sb3JLZXlmcmFtZVRyYWNrLCBDb21wcmVzc2VkVGV4dHVyZSwgQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIsIENvbmVHZW9tZXRyeSBhcyBDb25lQnVmZmVyR2VvbWV0cnksIENvbmVHZW9tZXRyeSwgQ3ViZUNhbWVyYSwgQ3ViZVJlZmxlY3Rpb25NYXBwaW5nLCBDdWJlUmVmcmFjdGlvbk1hcHBpbmcsIEN1YmVUZXh0dXJlLCBDdWJlVGV4dHVyZUxvYWRlciwgQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcsIEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nLCBDdWJpY0JlemllckN1cnZlLCBDdWJpY0JlemllckN1cnZlMywgQ3ViaWNJbnRlcnBvbGFudCwgQ3VsbEZhY2VCYWNrLCBDdWxsRmFjZUZyb250LCBDdWxsRmFjZUZyb250QmFjaywgQ3VsbEZhY2VOb25lLCBDdXJ2ZSwgQ3VydmVQYXRoLCBDdXN0b21CbGVuZGluZywgQ3VzdG9tVG9uZU1hcHBpbmcsIEN5bGluZGVyR2VvbWV0cnkgYXMgQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSwgQ3lsaW5kZXJHZW9tZXRyeSwgQ3lsaW5kcmljYWwsIERhdGFUZXh0dXJlLCBEYXRhVGV4dHVyZTJEQXJyYXksIERhdGFUZXh0dXJlM0QsIERhdGFUZXh0dXJlTG9hZGVyLCBEYXRhVXRpbHMsIERlY3JlbWVudFN0ZW5jaWxPcCwgRGVjcmVtZW50V3JhcFN0ZW5jaWxPcCwgRGVmYXVsdExvYWRpbmdNYW5hZ2VyLCBEZXB0aEZvcm1hdCwgRGVwdGhTdGVuY2lsRm9ybWF0LCBEZXB0aFRleHR1cmUsIERpcmVjdGlvbmFsTGlnaHQsIERpcmVjdGlvbmFsTGlnaHRIZWxwZXIsIERpc2NyZXRlSW50ZXJwb2xhbnQsIERvZGVjYWhlZHJvbkdlb21ldHJ5IGFzIERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5LCBEb2RlY2FoZWRyb25HZW9tZXRyeSwgRG91YmxlU2lkZSwgRHN0QWxwaGFGYWN0b3IsIERzdENvbG9yRmFjdG9yLCBEeW5hbWljQnVmZmVyQXR0cmlidXRlLCBEeW5hbWljQ29weVVzYWdlLCBEeW5hbWljRHJhd1VzYWdlLCBEeW5hbWljUmVhZFVzYWdlLCBFZGdlc0dlb21ldHJ5LCBFZGdlc0hlbHBlciwgRWxsaXBzZUN1cnZlLCBFcXVhbERlcHRoLCBFcXVhbFN0ZW5jaWxGdW5jLCBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZywgRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcsIEV1bGVyLCBFdmVudERpc3BhdGNoZXIsIEV4dHJ1ZGVHZW9tZXRyeSBhcyBFeHRydWRlQnVmZmVyR2VvbWV0cnksIEV4dHJ1ZGVHZW9tZXRyeSwgRmFjZUNvbG9ycywgRmlsZUxvYWRlciwgRmxhdFNoYWRpbmcsIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUsIEZsb2F0MzJBdHRyaWJ1dGUsIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsIEZsb2F0NjRBdHRyaWJ1dGUsIEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUsIEZsb2F0VHlwZSwgRm9nLCBGb2dFeHAyLCBGb250LCBGb250TG9hZGVyLCBGcmFtZWJ1ZmZlclRleHR1cmUsIEZyb250U2lkZSwgRnJ1c3R1bSwgR0xCdWZmZXJBdHRyaWJ1dGUsIEdMU0wxLCBHTFNMMywgR3JlYXRlckRlcHRoLCBHcmVhdGVyRXF1YWxEZXB0aCwgR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmMsIEdyZWF0ZXJTdGVuY2lsRnVuYywgR3JpZEhlbHBlciwgR3JvdXAsIEhhbGZGbG9hdFR5cGUsIEhlbWlzcGhlcmVMaWdodCwgSGVtaXNwaGVyZUxpZ2h0SGVscGVyLCBIZW1pc3BoZXJlTGlnaHRQcm9iZSwgSWNvc2FoZWRyb25HZW9tZXRyeSBhcyBJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5LCBJY29zYWhlZHJvbkdlb21ldHJ5LCBJbWFnZUJpdG1hcExvYWRlciwgSW1hZ2VMb2FkZXIsIEltYWdlVXRpbHMsIEltbWVkaWF0ZVJlbmRlck9iamVjdCwgSW5jcmVtZW50U3RlbmNpbE9wLCBJbmNyZW1lbnRXcmFwU3RlbmNpbE9wLCBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUsIEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5LCBJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciwgSW5zdGFuY2VkTWVzaCwgSW50MTZBdHRyaWJ1dGUsIEludDE2QnVmZmVyQXR0cmlidXRlLCBJbnQzMkF0dHJpYnV0ZSwgSW50MzJCdWZmZXJBdHRyaWJ1dGUsIEludDhBdHRyaWJ1dGUsIEludDhCdWZmZXJBdHRyaWJ1dGUsIEludFR5cGUsIEludGVybGVhdmVkQnVmZmVyLCBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSwgSW50ZXJwb2xhbnQsIEludGVycG9sYXRlRGlzY3JldGUsIEludGVycG9sYXRlTGluZWFyLCBJbnRlcnBvbGF0ZVNtb290aCwgSW52ZXJ0U3RlbmNpbE9wLCBKU09OTG9hZGVyLCBLZWVwU3RlbmNpbE9wLCBLZXlmcmFtZVRyYWNrLCBMT0QsIExhdGhlR2VvbWV0cnkgYXMgTGF0aGVCdWZmZXJHZW9tZXRyeSwgTGF0aGVHZW9tZXRyeSwgTGF5ZXJzLCBMZW5zRmxhcmUsIExlc3NEZXB0aCwgTGVzc0VxdWFsRGVwdGgsIExlc3NFcXVhbFN0ZW5jaWxGdW5jLCBMZXNzU3RlbmNpbEZ1bmMsIExpZ2h0LCBMaWdodFByb2JlLCBMaW5lLCBMaW5lMywgTGluZUJhc2ljTWF0ZXJpYWwsIExpbmVDdXJ2ZSwgTGluZUN1cnZlMywgTGluZURhc2hlZE1hdGVyaWFsLCBMaW5lTG9vcCwgTGluZVBpZWNlcywgTGluZVNlZ21lbnRzLCBMaW5lU3RyaXAsIExpbmVhckVuY29kaW5nLCBMaW5lYXJGaWx0ZXIsIExpbmVhckludGVycG9sYW50LCBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXIsIExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXIsIExpbmVhck1pcG1hcExpbmVhckZpbHRlciwgTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlciwgTGluZWFyVG9uZU1hcHBpbmcsIExvYWRlciwgTG9hZGVyVXRpbHMsIExvYWRpbmdNYW5hZ2VyLCBMb29wT25jZSwgTG9vcFBpbmdQb25nLCBMb29wUmVwZWF0LCBMdW1pbmFuY2VBbHBoYUZvcm1hdCwgTHVtaW5hbmNlRm9ybWF0LCBNT1VTRSwgTWF0ZXJpYWwsIE1hdGVyaWFsTG9hZGVyLCBNYXRoVXRpbHMgYXMgTWF0aCwgTWF0aFV0aWxzLCBNYXRyaXgzLCBNYXRyaXg0LCBNYXhFcXVhdGlvbiwgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIE1lc2hEZXB0aE1hdGVyaWFsLCBNZXNoRGlzdGFuY2VNYXRlcmlhbCwgTWVzaEZhY2VNYXRlcmlhbCwgTWVzaExhbWJlcnRNYXRlcmlhbCwgTWVzaE1hdGNhcE1hdGVyaWFsLCBNZXNoTm9ybWFsTWF0ZXJpYWwsIE1lc2hQaG9uZ01hdGVyaWFsLCBNZXNoUGh5c2ljYWxNYXRlcmlhbCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIE1lc2hUb29uTWF0ZXJpYWwsIE1pbkVxdWF0aW9uLCBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nLCBNaXhPcGVyYXRpb24sIE11bHRpTWF0ZXJpYWwsIE11bHRpcGx5QmxlbmRpbmcsIE11bHRpcGx5T3BlcmF0aW9uLCBOZWFyZXN0RmlsdGVyLCBOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyLCBOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlciwgTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlciwgTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXIsIE5ldmVyRGVwdGgsIE5ldmVyU3RlbmNpbEZ1bmMsIE5vQmxlbmRpbmcsIE5vQ29sb3JzLCBOb1RvbmVNYXBwaW5nLCBOb3JtYWxBbmltYXRpb25CbGVuZE1vZGUsIE5vcm1hbEJsZW5kaW5nLCBOb3RFcXVhbERlcHRoLCBOb3RFcXVhbFN0ZW5jaWxGdW5jLCBOdW1iZXJLZXlmcmFtZVRyYWNrLCBPYmplY3QzRCwgT2JqZWN0TG9hZGVyLCBPYmplY3RTcGFjZU5vcm1hbE1hcCwgT2N0YWhlZHJvbkdlb21ldHJ5IGFzIE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSwgT2N0YWhlZHJvbkdlb21ldHJ5LCBPbmVGYWN0b3IsIE9uZU1pbnVzRHN0QWxwaGFGYWN0b3IsIE9uZU1pbnVzRHN0Q29sb3JGYWN0b3IsIE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IsIE9uZU1pbnVzU3JjQ29sb3JGYWN0b3IsIE9ydGhvZ3JhcGhpY0NhbWVyYSwgUENGU2hhZG93TWFwLCBQQ0ZTb2Z0U2hhZG93TWFwLCBQTVJFTUdlbmVyYXRvciwgUGFyYW1ldHJpY0dlb21ldHJ5LCBQYXJ0aWNsZSwgUGFydGljbGVCYXNpY01hdGVyaWFsLCBQYXJ0aWNsZVN5c3RlbSwgUGFydGljbGVTeXN0ZW1NYXRlcmlhbCwgUGF0aCwgUGVyc3BlY3RpdmVDYW1lcmEsIFBsYW5lLCBQbGFuZUdlb21ldHJ5IGFzIFBsYW5lQnVmZmVyR2VvbWV0cnksIFBsYW5lR2VvbWV0cnksIFBsYW5lSGVscGVyLCBQb2ludENsb3VkLCBQb2ludENsb3VkTWF0ZXJpYWwsIFBvaW50TGlnaHQsIFBvaW50TGlnaHRIZWxwZXIsIFBvaW50cywgUG9pbnRzTWF0ZXJpYWwsIFBvbGFyR3JpZEhlbHBlciwgUG9seWhlZHJvbkdlb21ldHJ5IGFzIFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSwgUG9seWhlZHJvbkdlb21ldHJ5LCBQb3NpdGlvbmFsQXVkaW8sIFByb3BlcnR5QmluZGluZywgUHJvcGVydHlNaXhlciwgUXVhZHJhdGljQmV6aWVyQ3VydmUsIFF1YWRyYXRpY0JlemllckN1cnZlMywgUXVhdGVybmlvbiwgUXVhdGVybmlvbktleWZyYW1lVHJhY2ssIFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCwgUkVWSVNJT04sIFJHQkFEZXB0aFBhY2tpbmcsIFJHQkFGb3JtYXQsIFJHQkFJbnRlZ2VyRm9ybWF0LCBSR0JBX0FTVENfMTB4MTBfRm9ybWF0LCBSR0JBX0FTVENfMTB4NV9Gb3JtYXQsIFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCwgUkdCQV9BU1RDXzEweDhfRm9ybWF0LCBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0LCBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0LCBSR0JBX0FTVENfNHg0X0Zvcm1hdCwgUkdCQV9BU1RDXzV4NF9Gb3JtYXQsIFJHQkFfQVNUQ181eDVfRm9ybWF0LCBSR0JBX0FTVENfNng1X0Zvcm1hdCwgUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQsIFJHQkFfQVNUQ184eDVfRm9ybWF0LCBSR0JBX0FTVENfOHg2X0Zvcm1hdCwgUkdCQV9BU1RDXzh4OF9Gb3JtYXQsIFJHQkFfQlBUQ19Gb3JtYXQsIFJHQkFfRVRDMl9FQUNfRm9ybWF0LCBSR0JBX1BWUlRDXzJCUFBWMV9Gb3JtYXQsIFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCwgUkdCQV9TM1RDX0RYVDFfRm9ybWF0LCBSR0JBX1MzVENfRFhUM19Gb3JtYXQsIFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCwgUkdCX0VUQzFfRm9ybWF0LCBSR0JfRVRDMl9Gb3JtYXQsIFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0LCBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCwgUkdCX1MzVENfRFhUMV9Gb3JtYXQsIFJHRm9ybWF0LCBSR0ludGVnZXJGb3JtYXQsIFJhd1NoYWRlck1hdGVyaWFsLCBSYXksIFJheWNhc3RlciwgUmVjdEFyZWFMaWdodCwgUmVkRm9ybWF0LCBSZWRJbnRlZ2VyRm9ybWF0LCBSZWluaGFyZFRvbmVNYXBwaW5nLCBSZXBlYXRXcmFwcGluZywgUmVwbGFjZVN0ZW5jaWxPcCwgUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24sIFJpbmdHZW9tZXRyeSBhcyBSaW5nQnVmZmVyR2VvbWV0cnksIFJpbmdHZW9tZXRyeSwgU2NlbmUsIFNjZW5lVXRpbHMsIFNoYWRlckNodW5rLCBTaGFkZXJMaWIsIFNoYWRlck1hdGVyaWFsLCBTaGFkb3dNYXRlcmlhbCwgU2hhcGUsIFNoYXBlR2VvbWV0cnkgYXMgU2hhcGVCdWZmZXJHZW9tZXRyeSwgU2hhcGVHZW9tZXRyeSwgU2hhcGVQYXRoLCBTaGFwZVV0aWxzLCBTaG9ydFR5cGUsIFNrZWxldG9uLCBTa2VsZXRvbkhlbHBlciwgU2tpbm5lZE1lc2gsIFNtb290aFNoYWRpbmcsIFNwaGVyZSwgU3BoZXJlR2VvbWV0cnkgYXMgU3BoZXJlQnVmZmVyR2VvbWV0cnksIFNwaGVyZUdlb21ldHJ5LCBTcGhlcmljYWwsIFNwaGVyaWNhbEhhcm1vbmljczMsIFNwbGluZUN1cnZlLCBTcG90TGlnaHQsIFNwb3RMaWdodEhlbHBlciwgU3ByaXRlLCBTcHJpdGVNYXRlcmlhbCwgU3JjQWxwaGFGYWN0b3IsIFNyY0FscGhhU2F0dXJhdGVGYWN0b3IsIFNyY0NvbG9yRmFjdG9yLCBTdGF0aWNDb3B5VXNhZ2UsIFN0YXRpY0RyYXdVc2FnZSwgU3RhdGljUmVhZFVzYWdlLCBTdGVyZW9DYW1lcmEsIFN0cmVhbUNvcHlVc2FnZSwgU3RyZWFtRHJhd1VzYWdlLCBTdHJlYW1SZWFkVXNhZ2UsIFN0cmluZ0tleWZyYW1lVHJhY2ssIFN1YnRyYWN0RXF1YXRpb24sIFN1YnRyYWN0aXZlQmxlbmRpbmcsIFRPVUNILCBUYW5nZW50U3BhY2VOb3JtYWxNYXAsIFRldHJhaGVkcm9uR2VvbWV0cnkgYXMgVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSwgVGV0cmFoZWRyb25HZW9tZXRyeSwgVGV4dEdlb21ldHJ5LCBUZXh0dXJlLCBUZXh0dXJlTG9hZGVyLCBUb3J1c0dlb21ldHJ5IGFzIFRvcnVzQnVmZmVyR2VvbWV0cnksIFRvcnVzR2VvbWV0cnksIFRvcnVzS25vdEdlb21ldHJ5IGFzIFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5LCBUb3J1c0tub3RHZW9tZXRyeSwgVHJpYW5nbGUsIFRyaWFuZ2xlRmFuRHJhd01vZGUsIFRyaWFuZ2xlU3RyaXBEcmF3TW9kZSwgVHJpYW5nbGVzRHJhd01vZGUsIFR1YmVHZW9tZXRyeSBhcyBUdWJlQnVmZmVyR2VvbWV0cnksIFR1YmVHZW9tZXRyeSwgVVZNYXBwaW5nLCBVaW50MTZBdHRyaWJ1dGUsIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSwgVWludDMyQXR0cmlidXRlLCBVaW50MzJCdWZmZXJBdHRyaWJ1dGUsIFVpbnQ4QXR0cmlidXRlLCBVaW50OEJ1ZmZlckF0dHJpYnV0ZSwgVWludDhDbGFtcGVkQXR0cmlidXRlLCBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUsIFVuaWZvcm0sIFVuaWZvcm1zTGliLCBVbmlmb3Jtc1V0aWxzLCBVbnNpZ25lZEJ5dGVUeXBlLCBVbnNpZ25lZEludDI0OFR5cGUsIFVuc2lnbmVkSW50VHlwZSwgVW5zaWduZWRTaG9ydDQ0NDRUeXBlLCBVbnNpZ25lZFNob3J0NTU1MVR5cGUsIFVuc2lnbmVkU2hvcnRUeXBlLCBWU01TaGFkb3dNYXAsIFZlY3RvcjIsIFZlY3RvcjMsIFZlY3RvcjQsIFZlY3RvcktleWZyYW1lVHJhY2ssIFZlcnRleCwgVmVydGV4Q29sb3JzLCBWaWRlb1RleHR1cmUsIFdlYkdMMVJlbmRlcmVyLCBXZWJHTEN1YmVSZW5kZXJUYXJnZXQsIFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzLCBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LCBXZWJHTFJlbmRlclRhcmdldCwgV2ViR0xSZW5kZXJUYXJnZXRDdWJlLCBXZWJHTFJlbmRlcmVyLCBXZWJHTFV0aWxzLCBXaXJlZnJhbWVHZW9tZXRyeSwgV2lyZWZyYW1lSGVscGVyLCBXcmFwQXJvdW5kRW5kaW5nLCBYSFJMb2FkZXIsIFplcm9DdXJ2YXR1cmVFbmRpbmcsIFplcm9GYWN0b3IsIFplcm9TbG9wZUVuZGluZywgWmVyb1N0ZW5jaWxPcCwgX1NSR0JBRm9ybWF0LCBzUkdCRW5jb2RpbmcgfTtcbiIsImltcG9ydCB7XG5cdEV2ZW50RGlzcGF0Y2hlcixcblx0TU9VU0UsXG5cdFF1YXRlcm5pb24sXG5cdFNwaGVyaWNhbCxcblx0VE9VQ0gsXG5cdFZlY3RvcjIsXG5cdFZlY3RvcjNcbn0gZnJvbSAndGhyZWUnO1xuXG4vLyBUaGlzIHNldCBvZiBjb250cm9scyBwZXJmb3JtcyBvcmJpdGluZywgZG9sbHlpbmcgKHpvb21pbmcpLCBhbmQgcGFubmluZy5cbi8vIFVubGlrZSBUcmFja2JhbGxDb250cm9scywgaXQgbWFpbnRhaW5zIHRoZSBcInVwXCIgZGlyZWN0aW9uIG9iamVjdC51cCAoK1kgYnkgZGVmYXVsdCkuXG4vL1xuLy8gICAgT3JiaXQgLSBsZWZ0IG1vdXNlIC8gdG91Y2g6IG9uZS1maW5nZXIgbW92ZVxuLy8gICAgWm9vbSAtIG1pZGRsZSBtb3VzZSwgb3IgbW91c2V3aGVlbCAvIHRvdWNoOiB0d28tZmluZ2VyIHNwcmVhZCBvciBzcXVpc2hcbi8vICAgIFBhbiAtIHJpZ2h0IG1vdXNlLCBvciBsZWZ0IG1vdXNlICsgY3RybC9tZXRhL3NoaWZ0S2V5LCBvciBhcnJvdyBrZXlzIC8gdG91Y2g6IHR3by1maW5nZXIgbW92ZVxuXG5jb25zdCBfY2hhbmdlRXZlbnQgPSB7IHR5cGU6ICdjaGFuZ2UnIH07XG5jb25zdCBfc3RhcnRFdmVudCA9IHsgdHlwZTogJ3N0YXJ0JyB9O1xuY29uc3QgX2VuZEV2ZW50ID0geyB0eXBlOiAnZW5kJyB9O1xuXG5jbGFzcyBPcmJpdENvbnRyb2xzIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3Rvciggb2JqZWN0LCBkb21FbGVtZW50ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICggZG9tRWxlbWVudCA9PT0gdW5kZWZpbmVkICkgY29uc29sZS53YXJuKCAnVEhSRUUuT3JiaXRDb250cm9sczogVGhlIHNlY29uZCBwYXJhbWV0ZXIgXCJkb21FbGVtZW50XCIgaXMgbm93IG1hbmRhdG9yeS4nICk7XG5cdFx0aWYgKCBkb21FbGVtZW50ID09PSBkb2N1bWVudCApIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PcmJpdENvbnRyb2xzOiBcImRvY3VtZW50XCIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgXCJkb21FbGVtZW50XCIuIFBsZWFzZSB1c2UgXCJyZW5kZXJlci5kb21FbGVtZW50XCIgaW5zdGVhZC4nICk7XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuXHRcdHRoaXMuZG9tRWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJzsgLy8gZGlzYWJsZSB0b3VjaCBzY3JvbGxcblxuXHRcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMgY29udHJvbFxuXHRcdHRoaXMuZW5hYmxlZCA9IHRydWU7XG5cblx0XHQvLyBcInRhcmdldFwiIHNldHMgdGhlIGxvY2F0aW9uIG9mIGZvY3VzLCB3aGVyZSB0aGUgb2JqZWN0IG9yYml0cyBhcm91bmRcblx0XHR0aGlzLnRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHQvLyBIb3cgZmFyIHlvdSBjYW4gZG9sbHkgaW4gYW5kIG91dCAoIFBlcnNwZWN0aXZlQ2FtZXJhIG9ubHkgKVxuXHRcdHRoaXMubWluRGlzdGFuY2UgPSAwO1xuXHRcdHRoaXMubWF4RGlzdGFuY2UgPSBJbmZpbml0eTtcblxuXHRcdC8vIEhvdyBmYXIgeW91IGNhbiB6b29tIGluIGFuZCBvdXQgKCBPcnRob2dyYXBoaWNDYW1lcmEgb25seSApXG5cdFx0dGhpcy5taW5ab29tID0gMDtcblx0XHR0aGlzLm1heFpvb20gPSBJbmZpbml0eTtcblxuXHRcdC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCB2ZXJ0aWNhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxuXHRcdC8vIFJhbmdlIGlzIDAgdG8gTWF0aC5QSSByYWRpYW5zLlxuXHRcdHRoaXMubWluUG9sYXJBbmdsZSA9IDA7IC8vIHJhZGlhbnNcblx0XHR0aGlzLm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJOyAvLyByYWRpYW5zXG5cblx0XHQvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgaG9yaXpvbnRhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxuXHRcdC8vIElmIHNldCwgdGhlIGludGVydmFsIFsgbWluLCBtYXggXSBtdXN0IGJlIGEgc3ViLWludGVydmFsIG9mIFsgLSAyIFBJLCAyIFBJIF0sIHdpdGggKCBtYXggLSBtaW4gPCAyIFBJIClcblx0XHR0aGlzLm1pbkF6aW11dGhBbmdsZSA9IC0gSW5maW5pdHk7IC8vIHJhZGlhbnNcblx0XHR0aGlzLm1heEF6aW11dGhBbmdsZSA9IEluZmluaXR5OyAvLyByYWRpYW5zXG5cblx0XHQvLyBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgZGFtcGluZyAoaW5lcnRpYSlcblx0XHQvLyBJZiBkYW1waW5nIGlzIGVuYWJsZWQsIHlvdSBtdXN0IGNhbGwgY29udHJvbHMudXBkYXRlKCkgaW4geW91ciBhbmltYXRpb24gbG9vcFxuXHRcdHRoaXMuZW5hYmxlRGFtcGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuZGFtcGluZ0ZhY3RvciA9IDAuMDU7XG5cblx0XHQvLyBUaGlzIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGRvbGx5aW5nIGluIGFuZCBvdXQ7IGxlZnQgYXMgXCJ6b29tXCIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXHRcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHpvb21pbmdcblx0XHR0aGlzLmVuYWJsZVpvb20gPSB0cnVlO1xuXHRcdHRoaXMuem9vbVNwZWVkID0gMS4wO1xuXG5cdFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcm90YXRpbmdcblx0XHR0aGlzLmVuYWJsZVJvdGF0ZSA9IHRydWU7XG5cdFx0dGhpcy5yb3RhdGVTcGVlZCA9IDEuMDtcblxuXHRcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBhbm5pbmdcblx0XHR0aGlzLmVuYWJsZVBhbiA9IHRydWU7XG5cdFx0dGhpcy5wYW5TcGVlZCA9IDEuMDtcblx0XHR0aGlzLnNjcmVlblNwYWNlUGFubmluZyA9IHRydWU7IC8vIGlmIGZhbHNlLCBwYW4gb3J0aG9nb25hbCB0byB3b3JsZC1zcGFjZSBkaXJlY3Rpb24gY2FtZXJhLnVwXG5cdFx0dGhpcy5rZXlQYW5TcGVlZCA9IDcuMDtcdC8vIHBpeGVscyBtb3ZlZCBwZXIgYXJyb3cga2V5IHB1c2hcblxuXHRcdC8vIFNldCB0byB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgcm90YXRlIGFyb3VuZCB0aGUgdGFyZ2V0XG5cdFx0Ly8gSWYgYXV0by1yb3RhdGUgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXG5cdFx0dGhpcy5hdXRvUm90YXRlID0gZmFsc2U7XG5cdFx0dGhpcy5hdXRvUm90YXRlU3BlZWQgPSAyLjA7IC8vIDMwIHNlY29uZHMgcGVyIG9yYml0IHdoZW4gZnBzIGlzIDYwXG5cblx0XHQvLyBUaGUgZm91ciBhcnJvdyBrZXlzXG5cdFx0dGhpcy5rZXlzID0geyBMRUZUOiAnQXJyb3dMZWZ0JywgVVA6ICdBcnJvd1VwJywgUklHSFQ6ICdBcnJvd1JpZ2h0JywgQk9UVE9NOiAnQXJyb3dEb3duJyB9O1xuXG5cdFx0Ly8gTW91c2UgYnV0dG9uc1xuXHRcdHRoaXMubW91c2VCdXR0b25zID0geyBMRUZUOiBNT1VTRS5ST1RBVEUsIE1JRERMRTogTU9VU0UuRE9MTFksIFJJR0hUOiBNT1VTRS5QQU4gfTtcblxuXHRcdC8vIFRvdWNoIGZpbmdlcnNcblx0XHR0aGlzLnRvdWNoZXMgPSB7IE9ORTogVE9VQ0guUk9UQVRFLCBUV086IFRPVUNILkRPTExZX1BBTiB9O1xuXG5cdFx0Ly8gZm9yIHJlc2V0XG5cdFx0dGhpcy50YXJnZXQwID0gdGhpcy50YXJnZXQuY2xvbmUoKTtcblx0XHR0aGlzLnBvc2l0aW9uMCA9IHRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCk7XG5cdFx0dGhpcy56b29tMCA9IHRoaXMub2JqZWN0Lnpvb207XG5cblx0XHQvLyB0aGUgdGFyZ2V0IERPTSBlbGVtZW50IGZvciBrZXkgZXZlbnRzXG5cdFx0dGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cyA9IG51bGw7XG5cblx0XHQvL1xuXHRcdC8vIHB1YmxpYyBtZXRob2RzXG5cdFx0Ly9cblxuXHRcdHRoaXMuZ2V0UG9sYXJBbmdsZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHNwaGVyaWNhbC5waGk7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRBemltdXRoYWxBbmdsZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHNwaGVyaWNhbC50aGV0YTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmdldERpc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5vYmplY3QucG9zaXRpb24uZGlzdGFuY2VUbyggdGhpcy50YXJnZXQgKTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmxpc3RlblRvS2V5RXZlbnRzID0gZnVuY3Rpb24gKCBkb21FbGVtZW50ICkge1xuXG5cdFx0XHRkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgb25LZXlEb3duICk7XG5cdFx0XHR0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzID0gZG9tRWxlbWVudDtcblxuXHRcdH07XG5cblx0XHR0aGlzLnNhdmVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0c2NvcGUudGFyZ2V0MC5jb3B5KCBzY29wZS50YXJnZXQgKTtcblx0XHRcdHNjb3BlLnBvc2l0aW9uMC5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKTtcblx0XHRcdHNjb3BlLnpvb20wID0gc2NvcGUub2JqZWN0Lnpvb207XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0c2NvcGUudGFyZ2V0LmNvcHkoIHNjb3BlLnRhcmdldDAgKTtcblx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5jb3B5KCBzY29wZS5wb3NpdGlvbjAgKTtcblx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gc2NvcGUuem9vbTA7XG5cblx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfY2hhbmdlRXZlbnQgKTtcblxuXHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHRcdHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdH07XG5cblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBleHBvc2VkLCBidXQgcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2FuIG1ha2UgaXQgcHJpdmF0ZS4uLlxuXHRcdHRoaXMudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zdCBvZmZzZXQgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHQvLyBzbyBjYW1lcmEudXAgaXMgdGhlIG9yYml0IGF4aXNcblx0XHRcdGNvbnN0IHF1YXQgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Vbml0VmVjdG9ycyggb2JqZWN0LnVwLCBuZXcgVmVjdG9yMyggMCwgMSwgMCApICk7XG5cdFx0XHRjb25zdCBxdWF0SW52ZXJzZSA9IHF1YXQuY2xvbmUoKS5pbnZlcnQoKTtcblxuXHRcdFx0Y29uc3QgbGFzdFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IGxhc3RRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblxuXHRcdFx0Y29uc3QgdHdvUEkgPSAyICogTWF0aC5QSTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblxuXHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IHNjb3BlLm9iamVjdC5wb3NpdGlvbjtcblxuXHRcdFx0XHRvZmZzZXQuY29weSggcG9zaXRpb24gKS5zdWIoIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRcdC8vIHJvdGF0ZSBvZmZzZXQgdG8gXCJ5LWF4aXMtaXMtdXBcIiBzcGFjZVxuXHRcdFx0XHRvZmZzZXQuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ICk7XG5cblx0XHRcdFx0Ly8gYW5nbGUgZnJvbSB6LWF4aXMgYXJvdW5kIHktYXhpc1xuXHRcdFx0XHRzcGhlcmljYWwuc2V0RnJvbVZlY3RvcjMoIG9mZnNldCApO1xuXG5cdFx0XHRcdGlmICggc2NvcGUuYXV0b1JvdGF0ZSAmJiBzdGF0ZSA9PT0gU1RBVEUuTk9ORSApIHtcblxuXHRcdFx0XHRcdHJvdGF0ZUxlZnQoIGdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVEYW1waW5nICkge1xuXG5cdFx0XHRcdFx0c3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhICogc2NvcGUuZGFtcGluZ0ZhY3Rvcjtcblx0XHRcdFx0XHRzcGhlcmljYWwucGhpICs9IHNwaGVyaWNhbERlbHRhLnBoaSAqIHNjb3BlLmRhbXBpbmdGYWN0b3I7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHNwaGVyaWNhbC50aGV0YSArPSBzcGhlcmljYWxEZWx0YS50aGV0YTtcblx0XHRcdFx0XHRzcGhlcmljYWwucGhpICs9IHNwaGVyaWNhbERlbHRhLnBoaTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gcmVzdHJpY3QgdGhldGEgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xuXG5cdFx0XHRcdGxldCBtaW4gPSBzY29wZS5taW5BemltdXRoQW5nbGU7XG5cdFx0XHRcdGxldCBtYXggPSBzY29wZS5tYXhBemltdXRoQW5nbGU7XG5cblx0XHRcdFx0aWYgKCBpc0Zpbml0ZSggbWluICkgJiYgaXNGaW5pdGUoIG1heCApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBtaW4gPCAtIE1hdGguUEkgKSBtaW4gKz0gdHdvUEk7IGVsc2UgaWYgKCBtaW4gPiBNYXRoLlBJICkgbWluIC09IHR3b1BJO1xuXG5cdFx0XHRcdFx0aWYgKCBtYXggPCAtIE1hdGguUEkgKSBtYXggKz0gdHdvUEk7IGVsc2UgaWYgKCBtYXggPiBNYXRoLlBJICkgbWF4IC09IHR3b1BJO1xuXG5cdFx0XHRcdFx0aWYgKCBtaW4gPD0gbWF4ICkge1xuXG5cdFx0XHRcdFx0XHRzcGhlcmljYWwudGhldGEgPSBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCBzcGhlcmljYWwudGhldGEgKSApO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0c3BoZXJpY2FsLnRoZXRhID0gKCBzcGhlcmljYWwudGhldGEgPiAoIG1pbiArIG1heCApIC8gMiApID9cblx0XHRcdFx0XHRcdFx0TWF0aC5tYXgoIG1pbiwgc3BoZXJpY2FsLnRoZXRhICkgOlxuXHRcdFx0XHRcdFx0XHRNYXRoLm1pbiggbWF4LCBzcGhlcmljYWwudGhldGEgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gcmVzdHJpY3QgcGhpIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcblx0XHRcdFx0c3BoZXJpY2FsLnBoaSA9IE1hdGgubWF4KCBzY29wZS5taW5Qb2xhckFuZ2xlLCBNYXRoLm1pbiggc2NvcGUubWF4UG9sYXJBbmdsZSwgc3BoZXJpY2FsLnBoaSApICk7XG5cblx0XHRcdFx0c3BoZXJpY2FsLm1ha2VTYWZlKCk7XG5cblxuXHRcdFx0XHRzcGhlcmljYWwucmFkaXVzICo9IHNjYWxlO1xuXG5cdFx0XHRcdC8vIHJlc3RyaWN0IHJhZGl1cyB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXG5cdFx0XHRcdHNwaGVyaWNhbC5yYWRpdXMgPSBNYXRoLm1heCggc2NvcGUubWluRGlzdGFuY2UsIE1hdGgubWluKCBzY29wZS5tYXhEaXN0YW5jZSwgc3BoZXJpY2FsLnJhZGl1cyApICk7XG5cblx0XHRcdFx0Ly8gbW92ZSB0YXJnZXQgdG8gcGFubmVkIGxvY2F0aW9uXG5cblx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVEYW1waW5nID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0c2NvcGUudGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggcGFuT2Zmc2V0LCBzY29wZS5kYW1waW5nRmFjdG9yICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdHNjb3BlLnRhcmdldC5hZGQoIHBhbk9mZnNldCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvZmZzZXQuc2V0RnJvbVNwaGVyaWNhbCggc3BoZXJpY2FsICk7XG5cblx0XHRcdFx0Ly8gcm90YXRlIG9mZnNldCBiYWNrIHRvIFwiY2FtZXJhLXVwLXZlY3Rvci1pcy11cFwiIHNwYWNlXG5cdFx0XHRcdG9mZnNldC5hcHBseVF1YXRlcm5pb24oIHF1YXRJbnZlcnNlICk7XG5cblx0XHRcdFx0cG9zaXRpb24uY29weSggc2NvcGUudGFyZ2V0ICkuYWRkKCBvZmZzZXQgKTtcblxuXHRcdFx0XHRzY29wZS5vYmplY3QubG9va0F0KCBzY29wZS50YXJnZXQgKTtcblxuXHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZURhbXBpbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRzcGhlcmljYWxEZWx0YS50aGV0YSAqPSAoIDEgLSBzY29wZS5kYW1waW5nRmFjdG9yICk7XG5cdFx0XHRcdFx0c3BoZXJpY2FsRGVsdGEucGhpICo9ICggMSAtIHNjb3BlLmRhbXBpbmdGYWN0b3IgKTtcblxuXHRcdFx0XHRcdHBhbk9mZnNldC5tdWx0aXBseVNjYWxhciggMSAtIHNjb3BlLmRhbXBpbmdGYWN0b3IgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0c3BoZXJpY2FsRGVsdGEuc2V0KCAwLCAwLCAwICk7XG5cblx0XHRcdFx0XHRwYW5PZmZzZXQuc2V0KCAwLCAwLCAwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNjYWxlID0gMTtcblxuXHRcdFx0XHQvLyB1cGRhdGUgY29uZGl0aW9uIGlzOlxuXHRcdFx0XHQvLyBtaW4oY2FtZXJhIGRpc3BsYWNlbWVudCwgY2FtZXJhIHJvdGF0aW9uIGluIHJhZGlhbnMpXjIgPiBFUFNcblx0XHRcdFx0Ly8gdXNpbmcgc21hbGwtYW5nbGUgYXBwcm94aW1hdGlvbiBjb3MoeC8yKSA9IDEgLSB4XjIgLyA4XG5cblx0XHRcdFx0aWYgKCB6b29tQ2hhbmdlZCB8fFxuXHRcdFx0XHRcdGxhc3RQb3NpdGlvbi5kaXN0YW5jZVRvU3F1YXJlZCggc2NvcGUub2JqZWN0LnBvc2l0aW9uICkgPiBFUFMgfHxcblx0XHRcdFx0XHQ4ICogKCAxIC0gbGFzdFF1YXRlcm5pb24uZG90KCBzY29wZS5vYmplY3QucXVhdGVybmlvbiApICkgPiBFUFMgKSB7XG5cblx0XHRcdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfY2hhbmdlRXZlbnQgKTtcblxuXHRcdFx0XHRcdGxhc3RQb3NpdGlvbi5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKTtcblx0XHRcdFx0XHRsYXN0UXVhdGVybmlvbi5jb3B5KCBzY29wZS5vYmplY3QucXVhdGVybmlvbiApO1xuXHRcdFx0XHRcdHpvb21DaGFuZ2VkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHR9O1xuXG5cdFx0fSgpO1xuXG5cdFx0dGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjb250ZXh0bWVudScsIG9uQ29udGV4dE1lbnUgKTtcblxuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duICk7XG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyY2FuY2VsJywgb25Qb2ludGVyQ2FuY2VsICk7XG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3aGVlbCcsIG9uTW91c2VXaGVlbCApO1xuXG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUgKTtcblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJ1cCcsIG9uUG9pbnRlclVwICk7XG5cblxuXHRcdFx0aWYgKCBzY29wZS5fZG9tRWxlbWVudEtleUV2ZW50cyAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRzY29wZS5fZG9tRWxlbWVudEtleUV2ZW50cy5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIG9uS2V5RG93biApO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vc2NvcGUuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApOyAvLyBzaG91bGQgdGhpcyBiZSBhZGRlZCBoZXJlP1xuXG5cdFx0fTtcblxuXHRcdC8vXG5cdFx0Ly8gaW50ZXJuYWxzXG5cdFx0Ly9cblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblxuXHRcdGNvbnN0IFNUQVRFID0ge1xuXHRcdFx0Tk9ORTogLSAxLFxuXHRcdFx0Uk9UQVRFOiAwLFxuXHRcdFx0RE9MTFk6IDEsXG5cdFx0XHRQQU46IDIsXG5cdFx0XHRUT1VDSF9ST1RBVEU6IDMsXG5cdFx0XHRUT1VDSF9QQU46IDQsXG5cdFx0XHRUT1VDSF9ET0xMWV9QQU46IDUsXG5cdFx0XHRUT1VDSF9ET0xMWV9ST1RBVEU6IDZcblx0XHR9O1xuXG5cdFx0bGV0IHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdGNvbnN0IEVQUyA9IDAuMDAwMDAxO1xuXG5cdFx0Ly8gY3VycmVudCBwb3NpdGlvbiBpbiBzcGhlcmljYWwgY29vcmRpbmF0ZXNcblx0XHRjb25zdCBzcGhlcmljYWwgPSBuZXcgU3BoZXJpY2FsKCk7XG5cdFx0Y29uc3Qgc3BoZXJpY2FsRGVsdGEgPSBuZXcgU3BoZXJpY2FsKCk7XG5cblx0XHRsZXQgc2NhbGUgPSAxO1xuXHRcdGNvbnN0IHBhbk9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0bGV0IHpvb21DaGFuZ2VkID0gZmFsc2U7XG5cblx0XHRjb25zdCByb3RhdGVTdGFydCA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3Qgcm90YXRlRW5kID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCByb3RhdGVEZWx0YSA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRjb25zdCBwYW5TdGFydCA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3QgcGFuRW5kID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBwYW5EZWx0YSA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRjb25zdCBkb2xseVN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBkb2xseUVuZCA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3QgZG9sbHlEZWx0YSA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRjb25zdCBwb2ludGVycyA9IFtdO1xuXHRcdGNvbnN0IHBvaW50ZXJQb3NpdGlvbnMgPSB7fTtcblxuXHRcdGZ1bmN0aW9uIGdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkge1xuXG5cdFx0XHRyZXR1cm4gMiAqIE1hdGguUEkgLyA2MCAvIDYwICogc2NvcGUuYXV0b1JvdGF0ZVNwZWVkO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0Wm9vbVNjYWxlKCkge1xuXG5cdFx0XHRyZXR1cm4gTWF0aC5wb3coIDAuOTUsIHNjb3BlLnpvb21TcGVlZCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcm90YXRlTGVmdCggYW5nbGUgKSB7XG5cblx0XHRcdHNwaGVyaWNhbERlbHRhLnRoZXRhIC09IGFuZ2xlO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcm90YXRlVXAoIGFuZ2xlICkge1xuXG5cdFx0XHRzcGhlcmljYWxEZWx0YS5waGkgLT0gYW5nbGU7XG5cblx0XHR9XG5cblx0XHRjb25zdCBwYW5MZWZ0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zdCB2ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhbkxlZnQoIGRpc3RhbmNlLCBvYmplY3RNYXRyaXggKSB7XG5cblx0XHRcdFx0di5zZXRGcm9tTWF0cml4Q29sdW1uKCBvYmplY3RNYXRyaXgsIDAgKTsgLy8gZ2V0IFggY29sdW1uIG9mIG9iamVjdE1hdHJpeFxuXHRcdFx0XHR2Lm11bHRpcGx5U2NhbGFyKCAtIGRpc3RhbmNlICk7XG5cblx0XHRcdFx0cGFuT2Zmc2V0LmFkZCggdiApO1xuXG5cdFx0XHR9O1xuXG5cdFx0fSgpO1xuXG5cdFx0Y29uc3QgcGFuVXAgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IHYgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuVXAoIGRpc3RhbmNlLCBvYmplY3RNYXRyaXggKSB7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5zY3JlZW5TcGFjZVBhbm5pbmcgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHR2LnNldEZyb21NYXRyaXhDb2x1bW4oIG9iamVjdE1hdHJpeCwgMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR2LnNldEZyb21NYXRyaXhDb2x1bW4oIG9iamVjdE1hdHJpeCwgMCApO1xuXHRcdFx0XHRcdHYuY3Jvc3NWZWN0b3JzKCBzY29wZS5vYmplY3QudXAsIHYgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0di5tdWx0aXBseVNjYWxhciggZGlzdGFuY2UgKTtcblxuXHRcdFx0XHRwYW5PZmZzZXQuYWRkKCB2ICk7XG5cblx0XHRcdH07XG5cblx0XHR9KCk7XG5cblx0XHQvLyBkZWx0YVggYW5kIGRlbHRhWSBhcmUgaW4gcGl4ZWxzOyByaWdodCBhbmQgZG93biBhcmUgcG9zaXRpdmVcblx0XHRjb25zdCBwYW4gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IG9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBwYW4oIGRlbHRhWCwgZGVsdGFZICkge1xuXG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50O1xuXG5cdFx0XHRcdGlmICggc2NvcGUub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEgKSB7XG5cblx0XHRcdFx0XHQvLyBwZXJzcGVjdGl2ZVxuXHRcdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gc2NvcGUub2JqZWN0LnBvc2l0aW9uO1xuXHRcdFx0XHRcdG9mZnNldC5jb3B5KCBwb3NpdGlvbiApLnN1Yiggc2NvcGUudGFyZ2V0ICk7XG5cdFx0XHRcdFx0bGV0IHRhcmdldERpc3RhbmNlID0gb2Zmc2V0Lmxlbmd0aCgpO1xuXG5cdFx0XHRcdFx0Ly8gaGFsZiBvZiB0aGUgZm92IGlzIGNlbnRlciB0byB0b3Agb2Ygc2NyZWVuXG5cdFx0XHRcdFx0dGFyZ2V0RGlzdGFuY2UgKj0gTWF0aC50YW4oICggc2NvcGUub2JqZWN0LmZvdiAvIDIgKSAqIE1hdGguUEkgLyAxODAuMCApO1xuXG5cdFx0XHRcdFx0Ly8gd2UgdXNlIG9ubHkgY2xpZW50SGVpZ2h0IGhlcmUgc28gYXNwZWN0IHJhdGlvIGRvZXMgbm90IGRpc3RvcnQgc3BlZWRcblx0XHRcdFx0XHRwYW5MZWZ0KCAyICogZGVsdGFYICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1hdHJpeCApO1xuXHRcdFx0XHRcdHBhblVwKCAyICogZGVsdGFZICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1hdHJpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSApIHtcblxuXHRcdFx0XHRcdC8vIG9ydGhvZ3JhcGhpY1xuXHRcdFx0XHRcdHBhbkxlZnQoIGRlbHRhWCAqICggc2NvcGUub2JqZWN0LnJpZ2h0IC0gc2NvcGUub2JqZWN0LmxlZnQgKSAvIHNjb3BlLm9iamVjdC56b29tIC8gZWxlbWVudC5jbGllbnRXaWR0aCwgc2NvcGUub2JqZWN0Lm1hdHJpeCApO1xuXHRcdFx0XHRcdHBhblVwKCBkZWx0YVkgKiAoIHNjb3BlLm9iamVjdC50b3AgLSBzY29wZS5vYmplY3QuYm90dG9tICkgLyBzY29wZS5vYmplY3Quem9vbSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIGNhbWVyYSBuZWl0aGVyIG9ydGhvZ3JhcGhpYyBub3IgcGVyc3BlY3RpdmVcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuJyApO1xuXHRcdFx0XHRcdHNjb3BlLmVuYWJsZVBhbiA9IGZhbHNlO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH0oKTtcblxuXHRcdGZ1bmN0aW9uIGRvbGx5T3V0KCBkb2xseVNjYWxlICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhICkge1xuXG5cdFx0XHRcdHNjYWxlIC89IGRvbGx5U2NhbGU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSApIHtcblxuXHRcdFx0XHRzY29wZS5vYmplY3Quem9vbSA9IE1hdGgubWF4KCBzY29wZS5taW5ab29tLCBNYXRoLm1pbiggc2NvcGUubWF4Wm9vbSwgc2NvcGUub2JqZWN0Lnpvb20gKiBkb2xseVNjYWxlICkgKTtcblx0XHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHRcdFx0em9vbUNoYW5nZWQgPSB0cnVlO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ1dBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuJyApO1xuXHRcdFx0XHRzY29wZS5lbmFibGVab29tID0gZmFsc2U7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRvbGx5SW4oIGRvbGx5U2NhbGUgKSB7XG5cblx0XHRcdGlmICggc2NvcGUub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEgKSB7XG5cblx0XHRcdFx0c2NhbGUgKj0gZG9sbHlTY2FsZTtcblxuXHRcdFx0fSBlbHNlIGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gTWF0aC5tYXgoIHNjb3BlLm1pblpvb20sIE1hdGgubWluKCBzY29wZS5tYXhab29tLCBzY29wZS5vYmplY3Quem9vbSAvIGRvbGx5U2NhbGUgKSApO1xuXHRcdFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdFx0XHR6b29tQ2hhbmdlZCA9IHRydWU7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCAnV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4nICk7XG5cdFx0XHRcdHNjb3BlLmVuYWJsZVpvb20gPSBmYWxzZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly9cblx0XHQvLyBldmVudCBjYWxsYmFja3MgLSB1cGRhdGUgdGhlIG9iamVjdCBzdGF0ZVxuXHRcdC8vXG5cblx0XHRmdW5jdGlvbiBoYW5kbGVNb3VzZURvd25Sb3RhdGUoIGV2ZW50ICkge1xuXG5cdFx0XHRyb3RhdGVTdGFydC5zZXQoIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bkRvbGx5KCBldmVudCApIHtcblxuXHRcdFx0ZG9sbHlTdGFydC5zZXQoIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93blBhbiggZXZlbnQgKSB7XG5cblx0XHRcdHBhblN0YXJ0LnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlUm90YXRlKCBldmVudCApIHtcblxuXHRcdFx0cm90YXRlRW5kLnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0XHRyb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCByb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnJvdGF0ZVNwZWVkICk7XG5cblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50O1xuXG5cdFx0XHRyb3RhdGVMZWZ0KCAyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnggLyBlbGVtZW50LmNsaWVudEhlaWdodCApOyAvLyB5ZXMsIGhlaWdodFxuXG5cdFx0XHRyb3RhdGVVcCggMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKTtcblxuXHRcdFx0cm90YXRlU3RhcnQuY29weSggcm90YXRlRW5kICk7XG5cblx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlRG9sbHkoIGV2ZW50ICkge1xuXG5cdFx0XHRkb2xseUVuZC5zZXQoIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuXHRcdFx0ZG9sbHlEZWx0YS5zdWJWZWN0b3JzKCBkb2xseUVuZCwgZG9sbHlTdGFydCApO1xuXG5cdFx0XHRpZiAoIGRvbGx5RGVsdGEueSA+IDAgKSB7XG5cblx0XHRcdFx0ZG9sbHlPdXQoIGdldFpvb21TY2FsZSgpICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGRvbGx5RGVsdGEueSA8IDAgKSB7XG5cblx0XHRcdFx0ZG9sbHlJbiggZ2V0Wm9vbVNjYWxlKCkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRkb2xseVN0YXJ0LmNvcHkoIGRvbGx5RW5kICk7XG5cblx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlUGFuKCBldmVudCApIHtcblxuXHRcdFx0cGFuRW5kLnNldCggZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG5cdFx0XHRwYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQsIHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnBhblNwZWVkICk7XG5cblx0XHRcdHBhbiggcGFuRGVsdGEueCwgcGFuRGVsdGEueSApO1xuXG5cdFx0XHRwYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcblxuXHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVNb3VzZVdoZWVsKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBldmVudC5kZWx0YVkgPCAwICkge1xuXG5cdFx0XHRcdGRvbGx5SW4oIGdldFpvb21TY2FsZSgpICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LmRlbHRhWSA+IDAgKSB7XG5cblx0XHRcdFx0ZG9sbHlPdXQoIGdldFpvb21TY2FsZSgpICk7XG5cblx0XHRcdH1cblxuXHRcdFx0c2NvcGUudXBkYXRlKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVLZXlEb3duKCBldmVudCApIHtcblxuXHRcdFx0bGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XG5cblx0XHRcdHN3aXRjaCAoIGV2ZW50LmNvZGUgKSB7XG5cblx0XHRcdFx0Y2FzZSBzY29wZS5rZXlzLlVQOlxuXHRcdFx0XHRcdHBhbiggMCwgc2NvcGUua2V5UGFuU3BlZWQgKTtcblx0XHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBzY29wZS5rZXlzLkJPVFRPTTpcblx0XHRcdFx0XHRwYW4oIDAsIC0gc2NvcGUua2V5UGFuU3BlZWQgKTtcblx0XHRcdFx0XHRuZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBzY29wZS5rZXlzLkxFRlQ6XG5cdFx0XHRcdFx0cGFuKCBzY29wZS5rZXlQYW5TcGVlZCwgMCApO1xuXHRcdFx0XHRcdG5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIHNjb3BlLmtleXMuUklHSFQ6XG5cdFx0XHRcdFx0cGFuKCAtIHNjb3BlLmtleVBhblNwZWVkLCAwICk7XG5cdFx0XHRcdFx0bmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbmVlZHNVcGRhdGUgKSB7XG5cblx0XHRcdFx0Ly8gcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIHNjcm9sbGluZyBvbiBjdXJzb3Iga2V5c1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0XHR9XG5cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKSB7XG5cblx0XHRcdGlmICggcG9pbnRlcnMubGVuZ3RoID09PSAxICkge1xuXG5cdFx0XHRcdHJvdGF0ZVN0YXJ0LnNldCggcG9pbnRlcnNbIDAgXS5wYWdlWCwgcG9pbnRlcnNbIDAgXS5wYWdlWSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnN0IHggPSAwLjUgKiAoIHBvaW50ZXJzWyAwIF0ucGFnZVggKyBwb2ludGVyc1sgMSBdLnBhZ2VYICk7XG5cdFx0XHRcdGNvbnN0IHkgPSAwLjUgKiAoIHBvaW50ZXJzWyAwIF0ucGFnZVkgKyBwb2ludGVyc1sgMSBdLnBhZ2VZICk7XG5cblx0XHRcdFx0cm90YXRlU3RhcnQuc2V0KCB4LCB5ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnRQYW4oKSB7XG5cblx0XHRcdGlmICggcG9pbnRlcnMubGVuZ3RoID09PSAxICkge1xuXG5cdFx0XHRcdHBhblN0YXJ0LnNldCggcG9pbnRlcnNbIDAgXS5wYWdlWCwgcG9pbnRlcnNbIDAgXS5wYWdlWSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnN0IHggPSAwLjUgKiAoIHBvaW50ZXJzWyAwIF0ucGFnZVggKyBwb2ludGVyc1sgMSBdLnBhZ2VYICk7XG5cdFx0XHRcdGNvbnN0IHkgPSAwLjUgKiAoIHBvaW50ZXJzWyAwIF0ucGFnZVkgKyBwb2ludGVyc1sgMSBdLnBhZ2VZICk7XG5cblx0XHRcdFx0cGFuU3RhcnQuc2V0KCB4LCB5ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpIHtcblxuXHRcdFx0Y29uc3QgZHggPSBwb2ludGVyc1sgMCBdLnBhZ2VYIC0gcG9pbnRlcnNbIDEgXS5wYWdlWDtcblx0XHRcdGNvbnN0IGR5ID0gcG9pbnRlcnNbIDAgXS5wYWdlWSAtIHBvaW50ZXJzWyAxIF0ucGFnZVk7XG5cblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KCBkeCAqIGR4ICsgZHkgKiBkeSApO1xuXG5cdFx0XHRkb2xseVN0YXJ0LnNldCggMCwgZGlzdGFuY2UgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnREb2xseVBhbigpIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tICkgaGFuZGxlVG91Y2hTdGFydERvbGx5KCk7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlUGFuICkgaGFuZGxlVG91Y2hTdGFydFBhbigpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydERvbGx5Um90YXRlKCkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gKSBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKTtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgKSBoYW5kbGVUb3VjaFN0YXJ0Um90YXRlKCk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmVSb3RhdGUoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHBvaW50ZXJzLmxlbmd0aCA9PSAxICkge1xuXG5cdFx0XHRcdHJvdGF0ZUVuZC5zZXQoIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKCBldmVudCApO1xuXG5cdFx0XHRcdGNvbnN0IHggPSAwLjUgKiAoIGV2ZW50LnBhZ2VYICsgcG9zaXRpb24ueCApO1xuXHRcdFx0XHRjb25zdCB5ID0gMC41ICogKCBldmVudC5wYWdlWSArIHBvc2l0aW9uLnkgKTtcblxuXHRcdFx0XHRyb3RhdGVFbmQuc2V0KCB4LCB5ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cm90YXRlRGVsdGEuc3ViVmVjdG9ycyggcm90YXRlRW5kLCByb3RhdGVTdGFydCApLm11bHRpcGx5U2NhbGFyKCBzY29wZS5yb3RhdGVTcGVlZCApO1xuXG5cdFx0XHRjb25zdCBlbGVtZW50ID0gc2NvcGUuZG9tRWxlbWVudDtcblxuXHRcdFx0cm90YXRlTGVmdCggMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS54IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKTsgLy8geWVzLCBoZWlnaHRcblxuXHRcdFx0cm90YXRlVXAoIDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICk7XG5cblx0XHRcdHJvdGF0ZVN0YXJ0LmNvcHkoIHJvdGF0ZUVuZCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlVG91Y2hNb3ZlUGFuKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBwb2ludGVycy5sZW5ndGggPT09IDEgKSB7XG5cblx0XHRcdFx0cGFuRW5kLnNldCggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oIGV2ZW50ICk7XG5cblx0XHRcdFx0Y29uc3QgeCA9IDAuNSAqICggZXZlbnQucGFnZVggKyBwb3NpdGlvbi54ICk7XG5cdFx0XHRcdGNvbnN0IHkgPSAwLjUgKiAoIGV2ZW50LnBhZ2VZICsgcG9zaXRpb24ueSApO1xuXG5cdFx0XHRcdHBhbkVuZC5zZXQoIHgsIHkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRwYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQsIHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnBhblNwZWVkICk7XG5cblx0XHRcdHBhbiggcGFuRGVsdGEueCwgcGFuRGVsdGEueSApO1xuXG5cdFx0XHRwYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZURvbGx5KCBldmVudCApIHtcblxuXHRcdFx0Y29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oIGV2ZW50ICk7XG5cblx0XHRcdGNvbnN0IGR4ID0gZXZlbnQucGFnZVggLSBwb3NpdGlvbi54O1xuXHRcdFx0Y29uc3QgZHkgPSBldmVudC5wYWdlWSAtIHBvc2l0aW9uLnk7XG5cblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KCBkeCAqIGR4ICsgZHkgKiBkeSApO1xuXG5cdFx0XHRkb2xseUVuZC5zZXQoIDAsIGRpc3RhbmNlICk7XG5cblx0XHRcdGRvbGx5RGVsdGEuc2V0KCAwLCBNYXRoLnBvdyggZG9sbHlFbmQueSAvIGRvbGx5U3RhcnQueSwgc2NvcGUuem9vbVNwZWVkICkgKTtcblxuXHRcdFx0ZG9sbHlPdXQoIGRvbGx5RGVsdGEueSApO1xuXG5cdFx0XHRkb2xseVN0YXJ0LmNvcHkoIGRvbGx5RW5kICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmVEb2xseVBhbiggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlWm9vbSApIGhhbmRsZVRvdWNoTW92ZURvbGx5KCBldmVudCApO1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiApIGhhbmRsZVRvdWNoTW92ZVBhbiggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZURvbGx5Um90YXRlKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tICkgaGFuZGxlVG91Y2hNb3ZlRG9sbHkoIGV2ZW50ICk7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlUm90YXRlICkgaGFuZGxlVG91Y2hNb3ZlUm90YXRlKCBldmVudCApO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblx0XHQvLyBldmVudCBoYW5kbGVycyAtIEZTTTogbGlzdGVuIGZvciBldmVudHMgYW5kIHJlc2V0IHN0YXRlXG5cdFx0Ly9cblxuXHRcdGZ1bmN0aW9uIG9uUG9pbnRlckRvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIHBvaW50ZXJzLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKCBldmVudC5wb2ludGVySWQgKTtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUgKTtcblx0XHRcdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAncG9pbnRlcnVwJywgb25Qb2ludGVyVXAgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvL1xuXG5cdFx0XHRhZGRQb2ludGVyKCBldmVudCApO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnICkge1xuXG5cdFx0XHRcdG9uVG91Y2hTdGFydCggZXZlbnQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRvbk1vdXNlRG93biggZXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyTW92ZSggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGlmICggZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgKSB7XG5cblx0XHRcdFx0b25Ub3VjaE1vdmUoIGV2ZW50ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0b25Nb3VzZU1vdmUoIGV2ZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uUG9pbnRlclVwKCBldmVudCApIHtcblxuXHRcdCAgICByZW1vdmVQb2ludGVyKCBldmVudCApO1xuXG5cdFx0ICAgIGlmICggcG9pbnRlcnMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0ICAgICAgICBzY29wZS5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZSggZXZlbnQucG9pbnRlcklkICk7XG5cblx0XHQgICAgICAgIHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSApO1xuXHRcdCAgICAgICAgc2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcnVwJywgb25Qb2ludGVyVXAgKTtcblxuXHRcdCAgICB9XG5cblx0XHQgICAgc2NvcGUuZGlzcGF0Y2hFdmVudCggX2VuZEV2ZW50ICk7XG5cblx0XHQgICAgc3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyQ2FuY2VsKCBldmVudCApIHtcblxuXHRcdFx0cmVtb3ZlUG9pbnRlciggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uTW91c2VEb3duKCBldmVudCApIHtcblxuXHRcdFx0bGV0IG1vdXNlQWN0aW9uO1xuXG5cdFx0XHRzd2l0Y2ggKCBldmVudC5idXR0b24gKSB7XG5cblx0XHRcdFx0Y2FzZSAwOlxuXG5cdFx0XHRcdFx0bW91c2VBY3Rpb24gPSBzY29wZS5tb3VzZUJ1dHRvbnMuTEVGVDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDE6XG5cblx0XHRcdFx0XHRtb3VzZUFjdGlvbiA9IHNjb3BlLm1vdXNlQnV0dG9ucy5NSURETEU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAyOlxuXG5cdFx0XHRcdFx0bW91c2VBY3Rpb24gPSBzY29wZS5tb3VzZUJ1dHRvbnMuUklHSFQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdG1vdXNlQWN0aW9uID0gLSAxO1xuXG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoIG1vdXNlQWN0aW9uICkge1xuXG5cdFx0XHRcdGNhc2UgTU9VU0UuRE9MTFk6XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aGFuZGxlTW91c2VEb3duRG9sbHkoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLkRPTExZO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNT1VTRS5ST1RBVEU6XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVNb3VzZURvd25QYW4oIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuUEFOO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVNb3VzZURvd25Sb3RhdGUoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuUk9UQVRFO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNT1VTRS5QQU46XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVNb3VzZURvd25Sb3RhdGUoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuUk9UQVRFO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVNb3VzZURvd25QYW4oIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuUEFOO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHN0YXRlICE9PSBTVEFURS5OT05FICkge1xuXG5cdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9zdGFydEV2ZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uTW91c2VNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0c3dpdGNoICggc3RhdGUgKSB7XG5cblx0XHRcdFx0Y2FzZSBTVEFURS5ST1RBVEU6XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVNb3VzZU1vdmVSb3RhdGUoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFNUQVRFLkRPTExZOlxuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdGhhbmRsZU1vdXNlTW92ZURvbGx5KCBldmVudCApO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBTVEFURS5QQU46XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVNb3VzZU1vdmVQYW4oIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZVdoZWVsKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSB8fCBzY29wZS5lbmFibGVab29tID09PSBmYWxzZSB8fCBzdGF0ZSAhPT0gU1RBVEUuTk9ORSApIHJldHVybjtcblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblxuXHRcdFx0aGFuZGxlTW91c2VXaGVlbCggZXZlbnQgKTtcblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX2VuZEV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvbktleURvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlIHx8IHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGhhbmRsZUtleURvd24oIGV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvblRvdWNoU3RhcnQoIGV2ZW50ICkge1xuXG5cdFx0XHR0cmFja1BvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdHN3aXRjaCAoIHBvaW50ZXJzLmxlbmd0aCApIHtcblxuXHRcdFx0XHRjYXNlIDE6XG5cblx0XHRcdFx0XHRzd2l0Y2ggKCBzY29wZS50b3VjaGVzLk9ORSApIHtcblxuXHRcdFx0XHRcdFx0Y2FzZSBUT1VDSC5ST1RBVEU6XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRcdGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKTtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLlRPVUNIX1JPVEFURTtcblxuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBUT1VDSC5QQU46XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRcdGhhbmRsZVRvdWNoU3RhcnRQYW4oKTtcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLlRPVUNIX1BBTjtcblxuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDI6XG5cblx0XHRcdFx0XHRzd2l0Y2ggKCBzY29wZS50b3VjaGVzLlRXTyApIHtcblxuXHRcdFx0XHRcdFx0Y2FzZSBUT1VDSC5ET0xMWV9QQU46XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tID09PSBmYWxzZSAmJiBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRcdGhhbmRsZVRvdWNoU3RhcnREb2xseVBhbigpO1xuXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuVE9VQ0hfRE9MTFlfUEFOO1xuXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFRPVUNILkRPTExZX1JPVEFURTpcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHNjb3BlLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRcdFx0aGFuZGxlVG91Y2hTdGFydERvbGx5Um90YXRlKCk7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5UT1VDSF9ET0xMWV9ST1RBVEU7XG5cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblxuXHRcdFx0XHRcdHN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHN0YXRlICE9PSBTVEFURS5OT05FICkge1xuXG5cdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9zdGFydEV2ZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0dHJhY2tQb2ludGVyKCBldmVudCApO1xuXG5cdFx0XHRzd2l0Y2ggKCBzdGF0ZSApIHtcblxuXHRcdFx0XHRjYXNlIFNUQVRFLlRPVUNIX1JPVEFURTpcblxuXHRcdFx0XHRcdGlmICggc2NvcGUuZW5hYmxlUm90YXRlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0XHRcdGhhbmRsZVRvdWNoTW92ZVJvdGF0ZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdHNjb3BlLnVwZGF0ZSgpO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBTVEFURS5UT1VDSF9QQU46XG5cblx0XHRcdFx0XHRpZiAoIHNjb3BlLmVuYWJsZVBhbiA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdFx0XHRoYW5kbGVUb3VjaE1vdmVQYW4oIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU1RBVEUuVE9VQ0hfRE9MTFlfUEFOOlxuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tID09PSBmYWxzZSAmJiBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aGFuZGxlVG91Y2hNb3ZlRG9sbHlQYW4oIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU1RBVEUuVE9VQ0hfRE9MTFlfUk9UQVRFOlxuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5lbmFibGVab29tID09PSBmYWxzZSAmJiBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aGFuZGxlVG91Y2hNb3ZlRG9sbHlSb3RhdGUoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRzY29wZS51cGRhdGUoKTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0XHRzdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWRkUG9pbnRlciggZXZlbnQgKSB7XG5cblx0XHRcdHBvaW50ZXJzLnB1c2goIGV2ZW50ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZW1vdmVQb2ludGVyKCBldmVudCApIHtcblxuXHRcdFx0ZGVsZXRlIHBvaW50ZXJQb3NpdGlvbnNbIGV2ZW50LnBvaW50ZXJJZCBdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwb2ludGVycy5sZW5ndGg7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBwb2ludGVyc1sgaSBdLnBvaW50ZXJJZCA9PSBldmVudC5wb2ludGVySWQgKSB7XG5cblx0XHRcdFx0XHRwb2ludGVycy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cmFja1BvaW50ZXIoIGV2ZW50ICkge1xuXG5cdFx0XHRsZXQgcG9zaXRpb24gPSBwb2ludGVyUG9zaXRpb25zWyBldmVudC5wb2ludGVySWQgXTtcblxuXHRcdFx0aWYgKCBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcblx0XHRcdFx0cG9pbnRlclBvc2l0aW9uc1sgZXZlbnQucG9pbnRlcklkIF0gPSBwb3NpdGlvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHRwb3NpdGlvbi5zZXQoIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Y29uc3QgcG9pbnRlciA9ICggZXZlbnQucG9pbnRlcklkID09PSBwb2ludGVyc1sgMCBdLnBvaW50ZXJJZCApID8gcG9pbnRlcnNbIDEgXSA6IHBvaW50ZXJzWyAwIF07XG5cblx0XHRcdHJldHVybiBwb2ludGVyUG9zaXRpb25zWyBwb2ludGVyLnBvaW50ZXJJZCBdO1xuXG5cdFx0fVxuXG5cdFx0Ly9cblxuXHRcdHNjb3BlLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2NvbnRleHRtZW51Jywgb25Db250ZXh0TWVudSApO1xuXG5cdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duICk7XG5cdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAncG9pbnRlcmNhbmNlbCcsIG9uUG9pbnRlckNhbmNlbCApO1xuXHRcdHNjb3BlLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3doZWVsJywgb25Nb3VzZVdoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0gKTtcblxuXHRcdC8vIGZvcmNlIGFuIHVwZGF0ZSBhdCBzdGFydFxuXG5cdFx0dGhpcy51cGRhdGUoKTtcblxuXHR9XG5cbn1cblxuXG4vLyBUaGlzIHNldCBvZiBjb250cm9scyBwZXJmb3JtcyBvcmJpdGluZywgZG9sbHlpbmcgKHpvb21pbmcpLCBhbmQgcGFubmluZy5cbi8vIFVubGlrZSBUcmFja2JhbGxDb250cm9scywgaXQgbWFpbnRhaW5zIHRoZSBcInVwXCIgZGlyZWN0aW9uIG9iamVjdC51cCAoK1kgYnkgZGVmYXVsdCkuXG4vLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBPcmJpdENvbnRyb2xzLCBhbm90aGVyIHNldCBvZiB0b3VjaCBiZWhhdmlvclxuLy9cbi8vICAgIE9yYml0IC0gcmlnaHQgbW91c2UsIG9yIGxlZnQgbW91c2UgKyBjdHJsL21ldGEvc2hpZnRLZXkgLyB0b3VjaDogdHdvLWZpbmdlciByb3RhdGVcbi8vICAgIFpvb20gLSBtaWRkbGUgbW91c2UsIG9yIG1vdXNld2hlZWwgLyB0b3VjaDogdHdvLWZpbmdlciBzcHJlYWQgb3Igc3F1aXNoXG4vLyAgICBQYW4gLSBsZWZ0IG1vdXNlLCBvciBhcnJvdyBrZXlzIC8gdG91Y2g6IG9uZS1maW5nZXIgbW92ZVxuXG5jbGFzcyBNYXBDb250cm9scyBleHRlbmRzIE9yYml0Q29udHJvbHMge1xuXG5cdGNvbnN0cnVjdG9yKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7XG5cblx0XHRzdXBlciggb2JqZWN0LCBkb21FbGVtZW50ICk7XG5cblx0XHR0aGlzLnNjcmVlblNwYWNlUGFubmluZyA9IGZhbHNlOyAvLyBwYW4gb3J0aG9nb25hbCB0byB3b3JsZC1zcGFjZSBkaXJlY3Rpb24gY2FtZXJhLnVwXG5cblx0XHR0aGlzLm1vdXNlQnV0dG9ucy5MRUZUID0gTU9VU0UuUEFOO1xuXHRcdHRoaXMubW91c2VCdXR0b25zLlJJR0hUID0gTU9VU0UuUk9UQVRFO1xuXG5cdFx0dGhpcy50b3VjaGVzLk9ORSA9IFRPVUNILlBBTjtcblx0XHR0aGlzLnRvdWNoZXMuVFdPID0gVE9VQ0guRE9MTFlfUk9UQVRFO1xuXG5cdH1cblxufVxuXG5leHBvcnQgeyBPcmJpdENvbnRyb2xzLCBNYXBDb250cm9scyB9O1xuIiwiaW1wb3J0IHtcblx0RXZlbnREaXNwYXRjaGVyLFxuXHRNT1VTRSxcblx0UXVhdGVybmlvbixcblx0VmVjdG9yMixcblx0VmVjdG9yM1xufSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IF9jaGFuZ2VFdmVudCA9IHsgdHlwZTogJ2NoYW5nZScgfTtcbmNvbnN0IF9zdGFydEV2ZW50ID0geyB0eXBlOiAnc3RhcnQnIH07XG5jb25zdCBfZW5kRXZlbnQgPSB7IHR5cGU6ICdlbmQnIH07XG5cbmNsYXNzIFRyYWNrYmFsbENvbnRyb2xzIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblxuXHRjb25zdHJ1Y3Rvciggb2JqZWN0LCBkb21FbGVtZW50ICkge1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICggZG9tRWxlbWVudCA9PT0gdW5kZWZpbmVkICkgY29uc29sZS53YXJuKCAnVEhSRUUuVHJhY2tiYWxsQ29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyIFwiZG9tRWxlbWVudFwiIGlzIG5vdyBtYW5kYXRvcnkuJyApO1xuXHRcdGlmICggZG9tRWxlbWVudCA9PT0gZG9jdW1lbnQgKSBjb25zb2xlLmVycm9yKCAnVEhSRUUuVHJhY2tiYWxsQ29udHJvbHM6IFwiZG9jdW1lbnRcIiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCBcImRvbUVsZW1lbnRcIi4gUGxlYXNlIHVzZSBcInJlbmRlcmVyLmRvbUVsZW1lbnRcIiBpbnN0ZWFkLicgKTtcblxuXHRcdGNvbnN0IHNjb3BlID0gdGhpcztcblx0XHRjb25zdCBTVEFURSA9IHsgTk9ORTogLSAxLCBST1RBVEU6IDAsIFpPT006IDEsIFBBTjogMiwgVE9VQ0hfUk9UQVRFOiAzLCBUT1VDSF9aT09NX1BBTjogNCB9O1xuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcblx0XHR0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb24gPSAnbm9uZSc7IC8vIGRpc2FibGUgdG91Y2ggc2Nyb2xsXG5cblx0XHQvLyBBUElcblxuXHRcdHRoaXMuZW5hYmxlZCA9IHRydWU7XG5cblx0XHR0aGlzLnNjcmVlbiA9IHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cblx0XHR0aGlzLnJvdGF0ZVNwZWVkID0gMS4wO1xuXHRcdHRoaXMuem9vbVNwZWVkID0gMS4yO1xuXHRcdHRoaXMucGFuU3BlZWQgPSAwLjM7XG5cblx0XHR0aGlzLm5vUm90YXRlID0gZmFsc2U7XG5cdFx0dGhpcy5ub1pvb20gPSBmYWxzZTtcblx0XHR0aGlzLm5vUGFuID0gZmFsc2U7XG5cblx0XHR0aGlzLnN0YXRpY01vdmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuZHluYW1pY0RhbXBpbmdGYWN0b3IgPSAwLjI7XG5cblx0XHR0aGlzLm1pbkRpc3RhbmNlID0gMDtcblx0XHR0aGlzLm1heERpc3RhbmNlID0gSW5maW5pdHk7XG5cblx0XHR0aGlzLmtleXMgPSBbICdLZXlBJyAvKkEqLywgJ0tleVMnIC8qUyovLCAnS2V5RCcgLypEKi8gXTtcblxuXHRcdHRoaXMubW91c2VCdXR0b25zID0geyBMRUZUOiBNT1VTRS5ST1RBVEUsIE1JRERMRTogTU9VU0UuRE9MTFksIFJJR0hUOiBNT1VTRS5QQU4gfTtcblxuXHRcdC8vIGludGVybmFsc1xuXG5cdFx0dGhpcy50YXJnZXQgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Y29uc3QgRVBTID0gMC4wMDAwMDE7XG5cblx0XHRjb25zdCBsYXN0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRcdGxldCBsYXN0Wm9vbSA9IDE7XG5cblx0XHRsZXQgX3N0YXRlID0gU1RBVEUuTk9ORSxcblx0XHRcdF9rZXlTdGF0ZSA9IFNUQVRFLk5PTkUsXG5cblx0XHRcdF90b3VjaFpvb21EaXN0YW5jZVN0YXJ0ID0gMCxcblx0XHRcdF90b3VjaFpvb21EaXN0YW5jZUVuZCA9IDAsXG5cblx0XHRcdF9sYXN0QW5nbGUgPSAwO1xuXG5cdFx0Y29uc3QgX2V5ZSA9IG5ldyBWZWN0b3IzKCksXG5cblx0XHRcdF9tb3ZlUHJldiA9IG5ldyBWZWN0b3IyKCksXG5cdFx0XHRfbW92ZUN1cnIgPSBuZXcgVmVjdG9yMigpLFxuXG5cdFx0XHRfbGFzdEF4aXMgPSBuZXcgVmVjdG9yMygpLFxuXG5cdFx0XHRfem9vbVN0YXJ0ID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdF96b29tRW5kID0gbmV3IFZlY3RvcjIoKSxcblxuXHRcdFx0X3BhblN0YXJ0ID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdF9wYW5FbmQgPSBuZXcgVmVjdG9yMigpLFxuXG5cdFx0XHRfcG9pbnRlcnMgPSBbXSxcblx0XHRcdF9wb2ludGVyUG9zaXRpb25zID0ge307XG5cblx0XHQvLyBmb3IgcmVzZXRcblxuXHRcdHRoaXMudGFyZ2V0MCA9IHRoaXMudGFyZ2V0LmNsb25lKCk7XG5cdFx0dGhpcy5wb3NpdGlvbjAgPSB0aGlzLm9iamVjdC5wb3NpdGlvbi5jbG9uZSgpO1xuXHRcdHRoaXMudXAwID0gdGhpcy5vYmplY3QudXAuY2xvbmUoKTtcblx0XHR0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcblxuXHRcdC8vIG1ldGhvZHNcblxuXHRcdHRoaXMuaGFuZGxlUmVzaXplID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zdCBib3ggPSBzY29wZS5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0Ly8gYWRqdXN0bWVudHMgY29tZSBmcm9tIHNpbWlsYXIgY29kZSBpbiB0aGUganF1ZXJ5IG9mZnNldCgpIGZ1bmN0aW9uXG5cdFx0XHRjb25zdCBkID0gc2NvcGUuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHNjb3BlLnNjcmVlbi5sZWZ0ID0gYm94LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQgLSBkLmNsaWVudExlZnQ7XG5cdFx0XHRzY29wZS5zY3JlZW4udG9wID0gYm94LnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIGQuY2xpZW50VG9wO1xuXHRcdFx0c2NvcGUuc2NyZWVuLndpZHRoID0gYm94LndpZHRoO1xuXHRcdFx0c2NvcGUuc2NyZWVuLmhlaWdodCA9IGJveC5oZWlnaHQ7XG5cblx0XHR9O1xuXG5cdFx0Y29uc3QgZ2V0TW91c2VPblNjcmVlbiA9ICggZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMigpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZ2V0TW91c2VPblNjcmVlbiggcGFnZVgsIHBhZ2VZICkge1xuXG5cdFx0XHRcdHZlY3Rvci5zZXQoXG5cdFx0XHRcdFx0KCBwYWdlWCAtIHNjb3BlLnNjcmVlbi5sZWZ0ICkgLyBzY29wZS5zY3JlZW4ud2lkdGgsXG5cdFx0XHRcdFx0KCBwYWdlWSAtIHNjb3BlLnNjcmVlbi50b3AgKSAvIHNjb3BlLnNjcmVlbi5oZWlnaHRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gdmVjdG9yO1xuXG5cdFx0XHR9O1xuXG5cdFx0fSgpICk7XG5cblx0XHRjb25zdCBnZXRNb3VzZU9uQ2lyY2xlID0gKCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IyKCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBnZXRNb3VzZU9uQ2lyY2xlKCBwYWdlWCwgcGFnZVkgKSB7XG5cblx0XHRcdFx0dmVjdG9yLnNldChcblx0XHRcdFx0XHQoICggcGFnZVggLSBzY29wZS5zY3JlZW4ud2lkdGggKiAwLjUgLSBzY29wZS5zY3JlZW4ubGVmdCApIC8gKCBzY29wZS5zY3JlZW4ud2lkdGggKiAwLjUgKSApLFxuXHRcdFx0XHRcdCggKCBzY29wZS5zY3JlZW4uaGVpZ2h0ICsgMiAqICggc2NvcGUuc2NyZWVuLnRvcCAtIHBhZ2VZICkgKSAvIHNjb3BlLnNjcmVlbi53aWR0aCApIC8vIHNjcmVlbi53aWR0aCBpbnRlbnRpb25hbFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB2ZWN0b3I7XG5cblx0XHRcdH07XG5cblx0XHR9KCkgKTtcblxuXHRcdHRoaXMucm90YXRlQ2FtZXJhID0gKCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IGF4aXMgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKSxcblx0XHRcdFx0ZXllRGlyZWN0aW9uID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdFx0b2JqZWN0VXBEaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRvYmplY3RTaWRld2F5c0RpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRcdG1vdmVEaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gcm90YXRlQ2FtZXJhKCkge1xuXG5cdFx0XHRcdG1vdmVEaXJlY3Rpb24uc2V0KCBfbW92ZUN1cnIueCAtIF9tb3ZlUHJldi54LCBfbW92ZUN1cnIueSAtIF9tb3ZlUHJldi55LCAwICk7XG5cdFx0XHRcdGxldCBhbmdsZSA9IG1vdmVEaXJlY3Rpb24ubGVuZ3RoKCk7XG5cblx0XHRcdFx0aWYgKCBhbmdsZSApIHtcblxuXHRcdFx0XHRcdF9leWUuY29weSggc2NvcGUub2JqZWN0LnBvc2l0aW9uICkuc3ViKCBzY29wZS50YXJnZXQgKTtcblxuXHRcdFx0XHRcdGV5ZURpcmVjdGlvbi5jb3B5KCBfZXllICkubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0b2JqZWN0VXBEaXJlY3Rpb24uY29weSggc2NvcGUub2JqZWN0LnVwICkubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0b2JqZWN0U2lkZXdheXNEaXJlY3Rpb24uY3Jvc3NWZWN0b3JzKCBvYmplY3RVcERpcmVjdGlvbiwgZXllRGlyZWN0aW9uICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHRvYmplY3RVcERpcmVjdGlvbi5zZXRMZW5ndGgoIF9tb3ZlQ3Vyci55IC0gX21vdmVQcmV2LnkgKTtcblx0XHRcdFx0XHRvYmplY3RTaWRld2F5c0RpcmVjdGlvbi5zZXRMZW5ndGgoIF9tb3ZlQ3Vyci54IC0gX21vdmVQcmV2LnggKTtcblxuXHRcdFx0XHRcdG1vdmVEaXJlY3Rpb24uY29weSggb2JqZWN0VXBEaXJlY3Rpb24uYWRkKCBvYmplY3RTaWRld2F5c0RpcmVjdGlvbiApICk7XG5cblx0XHRcdFx0XHRheGlzLmNyb3NzVmVjdG9ycyggbW92ZURpcmVjdGlvbiwgX2V5ZSApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0YW5nbGUgKj0gc2NvcGUucm90YXRlU3BlZWQ7XG5cdFx0XHRcdFx0cXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApO1xuXG5cdFx0XHRcdFx0X2V5ZS5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTtcblx0XHRcdFx0XHRzY29wZS5vYmplY3QudXAuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICk7XG5cblx0XHRcdFx0XHRfbGFzdEF4aXMuY29weSggYXhpcyApO1xuXHRcdFx0XHRcdF9sYXN0QW5nbGUgPSBhbmdsZTtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKCAhIHNjb3BlLnN0YXRpY01vdmluZyAmJiBfbGFzdEFuZ2xlICkge1xuXG5cdFx0XHRcdFx0X2xhc3RBbmdsZSAqPSBNYXRoLnNxcnQoIDEuMCAtIHNjb3BlLmR5bmFtaWNEYW1waW5nRmFjdG9yICk7XG5cdFx0XHRcdFx0X2V5ZS5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKS5zdWIoIHNjb3BlLnRhcmdldCApO1xuXHRcdFx0XHRcdHF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSggX2xhc3RBeGlzLCBfbGFzdEFuZ2xlICk7XG5cdFx0XHRcdFx0X2V5ZS5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTtcblx0XHRcdFx0XHRzY29wZS5vYmplY3QudXAuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblxuXHRcdFx0fTtcblxuXHRcdH0oKSApO1xuXG5cblx0XHR0aGlzLnpvb21DYW1lcmEgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGxldCBmYWN0b3I7XG5cblx0XHRcdGlmICggX3N0YXRlID09PSBTVEFURS5UT1VDSF9aT09NX1BBTiApIHtcblxuXHRcdFx0XHRmYWN0b3IgPSBfdG91Y2hab29tRGlzdGFuY2VTdGFydCAvIF90b3VjaFpvb21EaXN0YW5jZUVuZDtcblx0XHRcdFx0X3RvdWNoWm9vbURpc3RhbmNlU3RhcnQgPSBfdG91Y2hab29tRGlzdGFuY2VFbmQ7XG5cblx0XHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHtcblxuXHRcdFx0XHRcdF9leWUubXVsdGlwbHlTY2FsYXIoIGZhY3RvciApO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSApIHtcblxuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC56b29tIC89IGZhY3Rvcjtcblx0XHRcdFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmFja2JhbGxDb250cm9sczogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGUnICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGZhY3RvciA9IDEuMCArICggX3pvb21FbmQueSAtIF96b29tU3RhcnQueSApICogc2NvcGUuem9vbVNwZWVkO1xuXG5cdFx0XHRcdGlmICggZmFjdG9yICE9PSAxLjAgJiYgZmFjdG9yID4gMC4wICkge1xuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHtcblxuXHRcdFx0XHRcdFx0X2V5ZS5tdWx0aXBseVNjYWxhciggZmFjdG9yICk7XG5cblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBzY29wZS5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7XG5cblx0XHRcdFx0XHRcdHNjb3BlLm9iamVjdC56b29tIC89IGZhY3Rvcjtcblx0XHRcdFx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmFja2JhbGxDb250cm9sczogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGUnICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2NvcGUuc3RhdGljTW92aW5nICkge1xuXG5cdFx0XHRcdFx0X3pvb21TdGFydC5jb3B5KCBfem9vbUVuZCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRfem9vbVN0YXJ0LnkgKz0gKCBfem9vbUVuZC55IC0gX3pvb21TdGFydC55ICkgKiB0aGlzLmR5bmFtaWNEYW1waW5nRmFjdG9yO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMucGFuQ2FtZXJhID0gKCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGNvbnN0IG1vdXNlQ2hhbmdlID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdFx0b2JqZWN0VXAgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0XHRwYW4gPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuQ2FtZXJhKCkge1xuXG5cdFx0XHRcdG1vdXNlQ2hhbmdlLmNvcHkoIF9wYW5FbmQgKS5zdWIoIF9wYW5TdGFydCApO1xuXG5cdFx0XHRcdGlmICggbW91c2VDaGFuZ2UubGVuZ3RoU3EoKSApIHtcblxuXHRcdFx0XHRcdGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdFx0XHRjb25zdCBzY2FsZV94ID0gKCBzY29wZS5vYmplY3QucmlnaHQgLSBzY29wZS5vYmplY3QubGVmdCApIC8gc2NvcGUub2JqZWN0Lnpvb20gLyBzY29wZS5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2NhbGVfeSA9ICggc2NvcGUub2JqZWN0LnRvcCAtIHNjb3BlLm9iamVjdC5ib3R0b20gKSAvIHNjb3BlLm9iamVjdC56b29tIC8gc2NvcGUuZG9tRWxlbWVudC5jbGllbnRXaWR0aDtcblxuXHRcdFx0XHRcdFx0bW91c2VDaGFuZ2UueCAqPSBzY2FsZV94O1xuXHRcdFx0XHRcdFx0bW91c2VDaGFuZ2UueSAqPSBzY2FsZV95O1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bW91c2VDaGFuZ2UubXVsdGlwbHlTY2FsYXIoIF9leWUubGVuZ3RoKCkgKiBzY29wZS5wYW5TcGVlZCApO1xuXG5cdFx0XHRcdFx0cGFuLmNvcHkoIF9leWUgKS5jcm9zcyggc2NvcGUub2JqZWN0LnVwICkuc2V0TGVuZ3RoKCBtb3VzZUNoYW5nZS54ICk7XG5cdFx0XHRcdFx0cGFuLmFkZCggb2JqZWN0VXAuY29weSggc2NvcGUub2JqZWN0LnVwICkuc2V0TGVuZ3RoKCBtb3VzZUNoYW5nZS55ICkgKTtcblxuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5hZGQoIHBhbiApO1xuXHRcdFx0XHRcdHNjb3BlLnRhcmdldC5hZGQoIHBhbiApO1xuXG5cdFx0XHRcdFx0aWYgKCBzY29wZS5zdGF0aWNNb3ZpbmcgKSB7XG5cblx0XHRcdFx0XHRcdF9wYW5TdGFydC5jb3B5KCBfcGFuRW5kICk7XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRfcGFuU3RhcnQuYWRkKCBtb3VzZUNoYW5nZS5zdWJWZWN0b3JzKCBfcGFuRW5kLCBfcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggc2NvcGUuZHluYW1pY0RhbXBpbmdGYWN0b3IgKSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH0oKSApO1xuXG5cdFx0dGhpcy5jaGVja0Rpc3RhbmNlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0aWYgKCAhIHNjb3BlLm5vWm9vbSB8fCAhIHNjb3BlLm5vUGFuICkge1xuXG5cdFx0XHRcdGlmICggX2V5ZS5sZW5ndGhTcSgpID4gc2NvcGUubWF4RGlzdGFuY2UgKiBzY29wZS5tYXhEaXN0YW5jZSApIHtcblxuXHRcdFx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5hZGRWZWN0b3JzKCBzY29wZS50YXJnZXQsIF9leWUuc2V0TGVuZ3RoKCBzY29wZS5tYXhEaXN0YW5jZSApICk7XG5cdFx0XHRcdFx0X3pvb21TdGFydC5jb3B5KCBfem9vbUVuZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIF9leWUubGVuZ3RoU3EoKSA8IHNjb3BlLm1pbkRpc3RhbmNlICogc2NvcGUubWluRGlzdGFuY2UgKSB7XG5cblx0XHRcdFx0XHRzY29wZS5vYmplY3QucG9zaXRpb24uYWRkVmVjdG9ycyggc2NvcGUudGFyZ2V0LCBfZXllLnNldExlbmd0aCggc2NvcGUubWluRGlzdGFuY2UgKSApO1xuXHRcdFx0XHRcdF96b29tU3RhcnQuY29weSggX3pvb21FbmQgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0X2V5ZS5zdWJWZWN0b3JzKCBzY29wZS5vYmplY3QucG9zaXRpb24sIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRpZiAoICEgc2NvcGUubm9Sb3RhdGUgKSB7XG5cblx0XHRcdFx0c2NvcGUucm90YXRlQ2FtZXJhKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHNjb3BlLm5vWm9vbSApIHtcblxuXHRcdFx0XHRzY29wZS56b29tQ2FtZXJhKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHNjb3BlLm5vUGFuICkge1xuXG5cdFx0XHRcdHNjb3BlLnBhbkNhbWVyYSgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5hZGRWZWN0b3JzKCBzY29wZS50YXJnZXQsIF9leWUgKTtcblxuXHRcdFx0aWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHtcblxuXHRcdFx0XHRzY29wZS5jaGVja0Rpc3RhbmNlcygpO1xuXG5cdFx0XHRcdHNjb3BlLm9iamVjdC5sb29rQXQoIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRcdGlmICggbGFzdFBvc2l0aW9uLmRpc3RhbmNlVG9TcXVhcmVkKCBzY29wZS5vYmplY3QucG9zaXRpb24gKSA+IEVQUyApIHtcblxuXHRcdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9jaGFuZ2VFdmVudCApO1xuXG5cdFx0XHRcdFx0bGFzdFBvc2l0aW9uLmNvcHkoIHNjb3BlLm9iamVjdC5wb3NpdGlvbiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggc2NvcGUub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhICkge1xuXG5cdFx0XHRcdHNjb3BlLm9iamVjdC5sb29rQXQoIHNjb3BlLnRhcmdldCApO1xuXG5cdFx0XHRcdGlmICggbGFzdFBvc2l0aW9uLmRpc3RhbmNlVG9TcXVhcmVkKCBzY29wZS5vYmplY3QucG9zaXRpb24gKSA+IEVQUyB8fCBsYXN0Wm9vbSAhPT0gc2NvcGUub2JqZWN0Lnpvb20gKSB7XG5cblx0XHRcdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfY2hhbmdlRXZlbnQgKTtcblxuXHRcdFx0XHRcdGxhc3RQb3NpdGlvbi5jb3B5KCBzY29wZS5vYmplY3QucG9zaXRpb24gKTtcblx0XHRcdFx0XHRsYXN0Wm9vbSA9IHNjb3BlLm9iamVjdC56b29tO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5UcmFja2JhbGxDb250cm9sczogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGUnICk7XG5cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRfc3RhdGUgPSBTVEFURS5OT05FO1xuXHRcdFx0X2tleVN0YXRlID0gU1RBVEUuTk9ORTtcblxuXHRcdFx0c2NvcGUudGFyZ2V0LmNvcHkoIHNjb3BlLnRhcmdldDAgKTtcblx0XHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5jb3B5KCBzY29wZS5wb3NpdGlvbjAgKTtcblx0XHRcdHNjb3BlLm9iamVjdC51cC5jb3B5KCBzY29wZS51cDAgKTtcblx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gc2NvcGUuem9vbTA7XG5cblx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0XHRcdF9leWUuc3ViVmVjdG9ycyggc2NvcGUub2JqZWN0LnBvc2l0aW9uLCBzY29wZS50YXJnZXQgKTtcblxuXHRcdFx0c2NvcGUub2JqZWN0Lmxvb2tBdCggc2NvcGUudGFyZ2V0ICk7XG5cblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9jaGFuZ2VFdmVudCApO1xuXG5cdFx0XHRsYXN0UG9zaXRpb24uY29weSggc2NvcGUub2JqZWN0LnBvc2l0aW9uICk7XG5cdFx0XHRsYXN0Wm9vbSA9IHNjb3BlLm9iamVjdC56b29tO1xuXG5cdFx0fTtcblxuXHRcdC8vIGxpc3RlbmVyc1xuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyRG93biggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGlmICggX3BvaW50ZXJzLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKCBldmVudC5wb2ludGVySWQgKTtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUgKTtcblx0XHRcdFx0c2NvcGUuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAncG9pbnRlcnVwJywgb25Qb2ludGVyVXAgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvL1xuXG5cdFx0XHRhZGRQb2ludGVyKCBldmVudCApO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnICkge1xuXG5cdFx0XHRcdG9uVG91Y2hTdGFydCggZXZlbnQgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRvbk1vdXNlRG93biggZXZlbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyTW92ZSggZXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGlmICggZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgKSB7XG5cblx0XHRcdFx0b25Ub3VjaE1vdmUoIGV2ZW50ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0b25Nb3VzZU1vdmUoIGV2ZW50ICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uUG9pbnRlclVwKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyApIHtcblxuXHRcdFx0XHRvblRvdWNoRW5kKCBldmVudCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdG9uTW91c2VVcCgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdHJlbW92ZVBvaW50ZXIoIGV2ZW50ICk7XG5cblx0XHRcdGlmICggX3BvaW50ZXJzLmxlbmd0aCA9PT0gMCApIHtcblxuXHRcdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZSggZXZlbnQucG9pbnRlcklkICk7XG5cblx0XHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlICk7XG5cdFx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJ1cCcsIG9uUG9pbnRlclVwICk7XG5cblx0XHRcdH1cblxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Qb2ludGVyQ2FuY2VsKCBldmVudCApIHtcblxuXHRcdFx0cmVtb3ZlUG9pbnRlciggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGtleWRvd24oIGV2ZW50ICkge1xuXG5cdFx0XHRpZiAoIHNjb3BlLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCBrZXlkb3duICk7XG5cblx0XHRcdGlmICggX2tleVN0YXRlICE9PSBTVEFURS5OT05FICkge1xuXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0fSBlbHNlIGlmICggZXZlbnQuY29kZSA9PT0gc2NvcGUua2V5c1sgU1RBVEUuUk9UQVRFIF0gJiYgISBzY29wZS5ub1JvdGF0ZSApIHtcblxuXHRcdFx0XHRfa2V5U3RhdGUgPSBTVEFURS5ST1RBVEU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LmNvZGUgPT09IHNjb3BlLmtleXNbIFNUQVRFLlpPT00gXSAmJiAhIHNjb3BlLm5vWm9vbSApIHtcblxuXHRcdFx0XHRfa2V5U3RhdGUgPSBTVEFURS5aT09NO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBldmVudC5jb2RlID09PSBzY29wZS5rZXlzWyBTVEFURS5QQU4gXSAmJiAhIHNjb3BlLm5vUGFuICkge1xuXG5cdFx0XHRcdF9rZXlTdGF0ZSA9IFNUQVRFLlBBTjtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24ga2V5dXAoKSB7XG5cblx0XHRcdGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdF9rZXlTdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIGtleWRvd24gKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uTW91c2VEb3duKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBfc3RhdGUgPT09IFNUQVRFLk5PTkUgKSB7XG5cblx0XHRcdFx0c3dpdGNoICggZXZlbnQuYnV0dG9uICkge1xuXG5cdFx0XHRcdFx0Y2FzZSBzY29wZS5tb3VzZUJ1dHRvbnMuTEVGVDpcblx0XHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlJPVEFURTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBzY29wZS5tb3VzZUJ1dHRvbnMuTUlERExFOlxuXHRcdFx0XHRcdFx0X3N0YXRlID0gU1RBVEUuWk9PTTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBzY29wZS5tb3VzZUJ1dHRvbnMuUklHSFQ6XG5cdFx0XHRcdFx0XHRfc3RhdGUgPSBTVEFURS5QQU47XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRfc3RhdGUgPSBTVEFURS5OT05FO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZSA9ICggX2tleVN0YXRlICE9PSBTVEFURS5OT05FICkgPyBfa2V5U3RhdGUgOiBfc3RhdGU7XG5cblx0XHRcdGlmICggc3RhdGUgPT09IFNUQVRFLlJPVEFURSAmJiAhIHNjb3BlLm5vUm90YXRlICkge1xuXG5cdFx0XHRcdF9tb3ZlQ3Vyci5jb3B5KCBnZXRNb3VzZU9uQ2lyY2xlKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXHRcdFx0XHRfbW92ZVByZXYuY29weSggX21vdmVDdXJyICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHN0YXRlID09PSBTVEFURS5aT09NICYmICEgc2NvcGUubm9ab29tICkge1xuXG5cdFx0XHRcdF96b29tU3RhcnQuY29weSggZ2V0TW91c2VPblNjcmVlbiggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICkgKTtcblx0XHRcdFx0X3pvb21FbmQuY29weSggX3pvb21TdGFydCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzdGF0ZSA9PT0gU1RBVEUuUEFOICYmICEgc2NvcGUubm9QYW4gKSB7XG5cblx0XHRcdFx0X3BhblN0YXJ0LmNvcHkoIGdldE1vdXNlT25TY3JlZW4oIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cdFx0XHRcdF9wYW5FbmQuY29weSggX3BhblN0YXJ0ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uTW91c2VNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0Y29uc3Qgc3RhdGUgPSAoIF9rZXlTdGF0ZSAhPT0gU1RBVEUuTk9ORSApID8gX2tleVN0YXRlIDogX3N0YXRlO1xuXG5cdFx0XHRpZiAoIHN0YXRlID09PSBTVEFURS5ST1RBVEUgJiYgISBzY29wZS5ub1JvdGF0ZSApIHtcblxuXHRcdFx0XHRfbW92ZVByZXYuY29weSggX21vdmVDdXJyICk7XG5cdFx0XHRcdF9tb3ZlQ3Vyci5jb3B5KCBnZXRNb3VzZU9uQ2lyY2xlKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzdGF0ZSA9PT0gU1RBVEUuWk9PTSAmJiAhIHNjb3BlLm5vWm9vbSApIHtcblxuXHRcdFx0XHRfem9vbUVuZC5jb3B5KCBnZXRNb3VzZU9uU2NyZWVuKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzdGF0ZSA9PT0gU1RBVEUuUEFOICYmICEgc2NvcGUubm9QYW4gKSB7XG5cblx0XHRcdFx0X3BhbkVuZC5jb3B5KCBnZXRNb3VzZU9uU2NyZWVuKCBldmVudC5wYWdlWCwgZXZlbnQucGFnZVkgKSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvbk1vdXNlVXAoKSB7XG5cblx0XHRcdF9zdGF0ZSA9IFNUQVRFLk5PTkU7XG5cblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9lbmRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Nb3VzZVdoZWVsKCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBzY29wZS5ub1pvb20gPT09IHRydWUgKSByZXR1cm47XG5cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHN3aXRjaCAoIGV2ZW50LmRlbHRhTW9kZSApIHtcblxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0Ly8gWm9vbSBpbiBwYWdlc1xuXHRcdFx0XHRcdF96b29tU3RhcnQueSAtPSBldmVudC5kZWx0YVkgKiAwLjAyNTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0Ly8gWm9vbSBpbiBsaW5lc1xuXHRcdFx0XHRcdF96b29tU3RhcnQueSAtPSBldmVudC5kZWx0YVkgKiAwLjAxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gdW5kZWZpbmVkLCAwLCBhc3N1bWUgcGl4ZWxzXG5cdFx0XHRcdFx0X3pvb21TdGFydC55IC09IGV2ZW50LmRlbHRhWSAqIDAuMDAwMjU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoIF9lbmRFdmVudCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KCBldmVudCApIHtcblxuXHRcdFx0dHJhY2tQb2ludGVyKCBldmVudCApO1xuXG5cdFx0XHRzd2l0Y2ggKCBfcG9pbnRlcnMubGVuZ3RoICkge1xuXG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRfc3RhdGUgPSBTVEFURS5UT1VDSF9ST1RBVEU7XG5cdFx0XHRcdFx0X21vdmVDdXJyLmNvcHkoIGdldE1vdXNlT25DaXJjbGUoIF9wb2ludGVyc1sgMCBdLnBhZ2VYLCBfcG9pbnRlcnNbIDAgXS5wYWdlWSApICk7XG5cdFx0XHRcdFx0X21vdmVQcmV2LmNvcHkoIF9tb3ZlQ3VyciApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6IC8vIDIgb3IgbW9yZVxuXHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlRPVUNIX1pPT01fUEFOO1xuXHRcdFx0XHRcdGNvbnN0IGR4ID0gX3BvaW50ZXJzWyAwIF0ucGFnZVggLSBfcG9pbnRlcnNbIDEgXS5wYWdlWDtcblx0XHRcdFx0XHRjb25zdCBkeSA9IF9wb2ludGVyc1sgMCBdLnBhZ2VZIC0gX3BvaW50ZXJzWyAxIF0ucGFnZVk7XG5cdFx0XHRcdFx0X3RvdWNoWm9vbURpc3RhbmNlRW5kID0gX3RvdWNoWm9vbURpc3RhbmNlU3RhcnQgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7XG5cblx0XHRcdFx0XHRjb25zdCB4ID0gKCBfcG9pbnRlcnNbIDAgXS5wYWdlWCArIF9wb2ludGVyc1sgMSBdLnBhZ2VYICkgLyAyO1xuXHRcdFx0XHRcdGNvbnN0IHkgPSAoIF9wb2ludGVyc1sgMCBdLnBhZ2VZICsgX3BvaW50ZXJzWyAxIF0ucGFnZVkgKSAvIDI7XG5cdFx0XHRcdFx0X3BhblN0YXJ0LmNvcHkoIGdldE1vdXNlT25TY3JlZW4oIHgsIHkgKSApO1xuXHRcdFx0XHRcdF9wYW5FbmQuY29weSggX3BhblN0YXJ0ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdH1cblxuXHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudCggX3N0YXJ0RXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCBldmVudCApIHtcblxuXHRcdFx0dHJhY2tQb2ludGVyKCBldmVudCApO1xuXG5cdFx0XHRzd2l0Y2ggKCBfcG9pbnRlcnMubGVuZ3RoICkge1xuXG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRfbW92ZVByZXYuY29weSggX21vdmVDdXJyICk7XG5cdFx0XHRcdFx0X21vdmVDdXJyLmNvcHkoIGdldE1vdXNlT25DaXJjbGUoIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSApICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDogLy8gMiBvciBtb3JlXG5cblx0XHRcdFx0XHRjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbiggZXZlbnQgKTtcblxuXHRcdFx0XHRcdGNvbnN0IGR4ID0gZXZlbnQucGFnZVggLSBwb3NpdGlvbi54O1xuXHRcdFx0XHRcdGNvbnN0IGR5ID0gZXZlbnQucGFnZVkgLSBwb3NpdGlvbi55O1xuXHRcdFx0XHRcdF90b3VjaFpvb21EaXN0YW5jZUVuZCA9IE1hdGguc3FydCggZHggKiBkeCArIGR5ICogZHkgKTtcblxuXHRcdFx0XHRcdGNvbnN0IHggPSAoIGV2ZW50LnBhZ2VYICsgcG9zaXRpb24ueCApIC8gMjtcblx0XHRcdFx0XHRjb25zdCB5ID0gKCBldmVudC5wYWdlWSArIHBvc2l0aW9uLnkgKSAvIDI7XG5cdFx0XHRcdFx0X3BhbkVuZC5jb3B5KCBnZXRNb3VzZU9uU2NyZWVuKCB4LCB5ICkgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gb25Ub3VjaEVuZCggZXZlbnQgKSB7XG5cblx0XHRcdHN3aXRjaCAoIF9wb2ludGVycy5sZW5ndGggKSB7XG5cblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLk5PTkU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlRPVUNIX1JPVEFURTtcblx0XHRcdFx0XHRfbW92ZUN1cnIuY29weSggZ2V0TW91c2VPbkNpcmNsZSggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICkgKTtcblx0XHRcdFx0XHRfbW92ZVByZXYuY29weSggX21vdmVDdXJyICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdF9zdGF0ZSA9IFNUQVRFLlRPVUNIX1pPT01fUEFOO1xuXHRcdFx0XHRcdF9tb3ZlQ3Vyci5jb3B5KCBnZXRNb3VzZU9uQ2lyY2xlKCBldmVudC5wYWdlWCAtIF9tb3ZlUHJldi5wYWdlWCwgZXZlbnQucGFnZVkgLSBfbW92ZVByZXYucGFnZVkgKSApO1xuXHRcdFx0XHRcdF9tb3ZlUHJldi5jb3B5KCBfbW92ZUN1cnIgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0fVxuXG5cdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KCBfZW5kRXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvbnRleHRtZW51KCBldmVudCApIHtcblxuXHRcdFx0aWYgKCBzY29wZS5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZFBvaW50ZXIoIGV2ZW50ICkge1xuXG5cdFx0XHRfcG9pbnRlcnMucHVzaCggZXZlbnQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoIGV2ZW50ICkge1xuXG5cdFx0XHRkZWxldGUgX3BvaW50ZXJQb3NpdGlvbnNbIGV2ZW50LnBvaW50ZXJJZCBdO1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBfcG9pbnRlcnMubGVuZ3RoOyBpICsrICkge1xuXG5cdFx0XHRcdGlmICggX3BvaW50ZXJzWyBpIF0ucG9pbnRlcklkID09IGV2ZW50LnBvaW50ZXJJZCApIHtcblxuXHRcdFx0XHRcdF9wb2ludGVycy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cmFja1BvaW50ZXIoIGV2ZW50ICkge1xuXG5cdFx0XHRsZXQgcG9zaXRpb24gPSBfcG9pbnRlclBvc2l0aW9uc1sgZXZlbnQucG9pbnRlcklkIF07XG5cblx0XHRcdGlmICggcG9zaXRpb24gPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRwb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0XHRcdF9wb2ludGVyUG9zaXRpb25zWyBldmVudC5wb2ludGVySWQgXSA9IHBvc2l0aW9uO1xuXG5cdFx0XHR9XG5cblx0XHRcdHBvc2l0aW9uLnNldCggZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRjb25zdCBwb2ludGVyID0gKCBldmVudC5wb2ludGVySWQgPT09IF9wb2ludGVyc1sgMCBdLnBvaW50ZXJJZCApID8gX3BvaW50ZXJzWyAxIF0gOiBfcG9pbnRlcnNbIDAgXTtcblxuXHRcdFx0cmV0dXJuIF9wb2ludGVyUG9zaXRpb25zWyBwb2ludGVyLnBvaW50ZXJJZCBdO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjb250ZXh0bWVudScsIGNvbnRleHRtZW51ICk7XG5cblx0XHRcdHNjb3BlLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJkb3duJywgb25Qb2ludGVyRG93biApO1xuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcmNhbmNlbCcsIG9uUG9pbnRlckNhbmNlbCApO1xuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnd2hlZWwnLCBvbk1vdXNlV2hlZWwgKTtcblxuXHRcdFx0c2NvcGUuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlICk7XG5cdFx0XHRzY29wZS5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVydXAnLCBvblBvaW50ZXJVcCApO1xuXG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCBrZXlkb3duICk7XG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2tleXVwJywga2V5dXAgKTtcblxuXHRcdH07XG5cblx0XHR0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2NvbnRleHRtZW51JywgY29udGV4dG1lbnUgKTtcblxuXHRcdHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duICk7XG5cdFx0dGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyY2FuY2VsJywgb25Qb2ludGVyQ2FuY2VsICk7XG5cdFx0dGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3aGVlbCcsIG9uTW91c2VXaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9ICk7XG5cblxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIGtleWRvd24gKTtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ2tleXVwJywga2V5dXAgKTtcblxuXHRcdHRoaXMuaGFuZGxlUmVzaXplKCk7XG5cblx0XHQvLyBmb3JjZSBhbiB1cGRhdGUgYXQgc3RhcnRcblx0XHR0aGlzLnVwZGF0ZSgpO1xuXG5cdH1cblxufVxuXG5leHBvcnQgeyBUcmFja2JhbGxDb250cm9scyB9O1xuIiwiaW1wb3J0IHtcblx0QnVmZmVyR2VvbWV0cnksXG5cdEZpbGVMb2FkZXIsXG5cdEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXG5cdExvYWRlcixcblx0TG9hZGVyVXRpbHMsXG5cdFBvaW50cyxcblx0UG9pbnRzTWF0ZXJpYWxcbn0gZnJvbSAndGhyZWUnO1xuXG5jbGFzcyBQQ0RMb2FkZXIgZXh0ZW5kcyBMb2FkZXIge1xuXG5cdGNvbnN0cnVjdG9yKCBtYW5hZ2VyICkge1xuXG5cdFx0c3VwZXIoIG1hbmFnZXIgKTtcblxuXHRcdHRoaXMubGl0dGxlRW5kaWFuID0gdHJ1ZTtcblxuXHR9XG5cblx0bG9hZCggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7XG5cblx0XHRjb25zdCBzY29wZSA9IHRoaXM7XG5cblx0XHRjb25zdCBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFuYWdlciApO1xuXHRcdGxvYWRlci5zZXRQYXRoKCBzY29wZS5wYXRoICk7XG5cdFx0bG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5YnVmZmVyJyApO1xuXHRcdGxvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCBzY29wZS5yZXF1ZXN0SGVhZGVyICk7XG5cdFx0bG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggc2NvcGUud2l0aENyZWRlbnRpYWxzICk7XG5cdFx0bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBkYXRhICkge1xuXG5cdFx0XHR0cnkge1xuXG5cdFx0XHRcdG9uTG9hZCggc2NvcGUucGFyc2UoIGRhdGEsIHVybCApICk7XG5cblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdGlmICggb25FcnJvciApIHtcblxuXHRcdFx0XHRcdG9uRXJyb3IoIGUgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggZSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7XG5cblx0XHRcdH1cblxuXHRcdH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTtcblxuXHR9XG5cblx0cGFyc2UoIGRhdGEsIHVybCApIHtcblxuXHRcdC8vIGZyb20gaHR0cHM6Ly9naXRsYWIuY29tL3Rha2V0d28vdGhyZWUtcGNkLWxvYWRlci9ibG9iL21hc3Rlci9kZWNvbXByZXNzLWx6Zi5qc1xuXG5cdFx0ZnVuY3Rpb24gZGVjb21wcmVzc0xaRiggaW5EYXRhLCBvdXRMZW5ndGggKSB7XG5cblx0XHRcdGNvbnN0IGluTGVuZ3RoID0gaW5EYXRhLmxlbmd0aDtcblx0XHRcdGNvbnN0IG91dERhdGEgPSBuZXcgVWludDhBcnJheSggb3V0TGVuZ3RoICk7XG5cdFx0XHRsZXQgaW5QdHIgPSAwO1xuXHRcdFx0bGV0IG91dFB0ciA9IDA7XG5cdFx0XHRsZXQgY3RybDtcblx0XHRcdGxldCBsZW47XG5cdFx0XHRsZXQgcmVmO1xuXHRcdFx0ZG8ge1xuXG5cdFx0XHRcdGN0cmwgPSBpbkRhdGFbIGluUHRyICsrIF07XG5cdFx0XHRcdGlmICggY3RybCA8ICggMSA8PCA1ICkgKSB7XG5cblx0XHRcdFx0XHRjdHJsICsrO1xuXHRcdFx0XHRcdGlmICggb3V0UHRyICsgY3RybCA+IG91dExlbmd0aCApIHRocm93IG5ldyBFcnJvciggJ091dHB1dCBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCcgKTtcblx0XHRcdFx0XHRpZiAoIGluUHRyICsgY3RybCA+IGluTGVuZ3RoICkgdGhyb3cgbmV3IEVycm9yKCAnSW52YWxpZCBjb21wcmVzc2VkIGRhdGEnICk7XG5cdFx0XHRcdFx0ZG8ge1xuXG5cdFx0XHRcdFx0XHRvdXREYXRhWyBvdXRQdHIgKysgXSA9IGluRGF0YVsgaW5QdHIgKysgXTtcblxuXHRcdFx0XHRcdH0gd2hpbGUgKCAtLSBjdHJsICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGxlbiA9IGN0cmwgPj4gNTtcblx0XHRcdFx0XHRyZWYgPSBvdXRQdHIgLSAoICggY3RybCAmIDB4MWYgKSA8PCA4ICkgLSAxO1xuXHRcdFx0XHRcdGlmICggaW5QdHIgPj0gaW5MZW5ndGggKSB0aHJvdyBuZXcgRXJyb3IoICdJbnZhbGlkIGNvbXByZXNzZWQgZGF0YScgKTtcblx0XHRcdFx0XHRpZiAoIGxlbiA9PT0gNyApIHtcblxuXHRcdFx0XHRcdFx0bGVuICs9IGluRGF0YVsgaW5QdHIgKysgXTtcblx0XHRcdFx0XHRcdGlmICggaW5QdHIgPj0gaW5MZW5ndGggKSB0aHJvdyBuZXcgRXJyb3IoICdJbnZhbGlkIGNvbXByZXNzZWQgZGF0YScgKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlZiAtPSBpbkRhdGFbIGluUHRyICsrIF07XG5cdFx0XHRcdFx0aWYgKCBvdXRQdHIgKyBsZW4gKyAyID4gb3V0TGVuZ3RoICkgdGhyb3cgbmV3IEVycm9yKCAnT3V0cHV0IGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoJyApO1xuXHRcdFx0XHRcdGlmICggcmVmIDwgMCApIHRocm93IG5ldyBFcnJvciggJ0ludmFsaWQgY29tcHJlc3NlZCBkYXRhJyApO1xuXHRcdFx0XHRcdGlmICggcmVmID49IG91dFB0ciApIHRocm93IG5ldyBFcnJvciggJ0ludmFsaWQgY29tcHJlc3NlZCBkYXRhJyApO1xuXHRcdFx0XHRcdGRvIHtcblxuXHRcdFx0XHRcdFx0b3V0RGF0YVsgb3V0UHRyICsrIF0gPSBvdXREYXRhWyByZWYgKysgXTtcblxuXHRcdFx0XHRcdH0gd2hpbGUgKCAtLSBsZW4gKyAyICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IHdoaWxlICggaW5QdHIgPCBpbkxlbmd0aCApO1xuXG5cdFx0XHRyZXR1cm4gb3V0RGF0YTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHBhcnNlSGVhZGVyKCBkYXRhICkge1xuXG5cdFx0XHRjb25zdCBQQ0RoZWFkZXIgPSB7fTtcblx0XHRcdGNvbnN0IHJlc3VsdDEgPSBkYXRhLnNlYXJjaCggL1tcXHJcXG5dREFUQVxccyhcXFMqKVxccy9pICk7XG5cdFx0XHRjb25zdCByZXN1bHQyID0gL1tcXHJcXG5dREFUQVxccyhcXFMqKVxccy9pLmV4ZWMoIGRhdGEuc3Vic3RyKCByZXN1bHQxIC0gMSApICk7XG5cblx0XHRcdFBDRGhlYWRlci5kYXRhID0gcmVzdWx0MlsgMSBdO1xuXHRcdFx0UENEaGVhZGVyLmhlYWRlckxlbiA9IHJlc3VsdDJbIDAgXS5sZW5ndGggKyByZXN1bHQxO1xuXHRcdFx0UENEaGVhZGVyLnN0ciA9IGRhdGEuc3Vic3RyKCAwLCBQQ0RoZWFkZXIuaGVhZGVyTGVuICk7XG5cblx0XHRcdC8vIHJlbW92ZSBjb21tZW50c1xuXG5cdFx0XHRQQ0RoZWFkZXIuc3RyID0gUENEaGVhZGVyLnN0ci5yZXBsYWNlKCAvXFwjLiovZ2ksICcnICk7XG5cblx0XHRcdC8vIHBhcnNlXG5cblx0XHRcdFBDRGhlYWRlci52ZXJzaW9uID0gL1ZFUlNJT04gKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci5maWVsZHMgPSAvRklFTERTICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cdFx0XHRQQ0RoZWFkZXIuc2l6ZSA9IC9TSVpFICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cdFx0XHRQQ0RoZWFkZXIudHlwZSA9IC9UWVBFICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cdFx0XHRQQ0RoZWFkZXIuY291bnQgPSAvQ09VTlQgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci53aWR0aCA9IC9XSURUSCAoLiopL2kuZXhlYyggUENEaGVhZGVyLnN0ciApO1xuXHRcdFx0UENEaGVhZGVyLmhlaWdodCA9IC9IRUlHSFQgKC4qKS9pLmV4ZWMoIFBDRGhlYWRlci5zdHIgKTtcblx0XHRcdFBDRGhlYWRlci52aWV3cG9pbnQgPSAvVklFV1BPSU5UICguKikvaS5leGVjKCBQQ0RoZWFkZXIuc3RyICk7XG5cdFx0XHRQQ0RoZWFkZXIucG9pbnRzID0gL1BPSU5UUyAoLiopL2kuZXhlYyggUENEaGVhZGVyLnN0ciApO1xuXG5cdFx0XHQvLyBldmFsdWF0ZVxuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci52ZXJzaW9uICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLnZlcnNpb24gPSBwYXJzZUZsb2F0KCBQQ0RoZWFkZXIudmVyc2lvblsgMSBdICk7XG5cblx0XHRcdGlmICggUENEaGVhZGVyLmZpZWxkcyAhPT0gbnVsbCApXG5cdFx0XHRcdFBDRGhlYWRlci5maWVsZHMgPSBQQ0RoZWFkZXIuZmllbGRzWyAxIF0uc3BsaXQoICcgJyApO1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci50eXBlICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLnR5cGUgPSBQQ0RoZWFkZXIudHlwZVsgMSBdLnNwbGl0KCAnICcgKTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIud2lkdGggIT09IG51bGwgKVxuXHRcdFx0XHRQQ0RoZWFkZXIud2lkdGggPSBwYXJzZUludCggUENEaGVhZGVyLndpZHRoWyAxIF0gKTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIuaGVpZ2h0ICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLmhlaWdodCA9IHBhcnNlSW50KCBQQ0RoZWFkZXIuaGVpZ2h0WyAxIF0gKTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIudmlld3BvaW50ICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLnZpZXdwb2ludCA9IFBDRGhlYWRlci52aWV3cG9pbnRbIDEgXTtcblxuXHRcdFx0aWYgKCBQQ0RoZWFkZXIucG9pbnRzICE9PSBudWxsIClcblx0XHRcdFx0UENEaGVhZGVyLnBvaW50cyA9IHBhcnNlSW50KCBQQ0RoZWFkZXIucG9pbnRzWyAxIF0sIDEwICk7XG5cblx0XHRcdGlmICggUENEaGVhZGVyLnBvaW50cyA9PT0gbnVsbCApXG5cdFx0XHRcdFBDRGhlYWRlci5wb2ludHMgPSBQQ0RoZWFkZXIud2lkdGggKiBQQ0RoZWFkZXIuaGVpZ2h0O1xuXG5cdFx0XHRpZiAoIFBDRGhlYWRlci5zaXplICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFBDRGhlYWRlci5zaXplID0gUENEaGVhZGVyLnNpemVbIDEgXS5zcGxpdCggJyAnICkubWFwKCBmdW5jdGlvbiAoIHggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHgsIDEwICk7XG5cblx0XHRcdFx0fSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggUENEaGVhZGVyLmNvdW50ICE9PSBudWxsICkge1xuXG5cdFx0XHRcdFBDRGhlYWRlci5jb3VudCA9IFBDRGhlYWRlci5jb3VudFsgMSBdLnNwbGl0KCAnICcgKS5tYXAoIGZ1bmN0aW9uICggeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggeCwgMTAgKTtcblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0UENEaGVhZGVyLmNvdW50ID0gW107XG5cblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwLCBsID0gUENEaGVhZGVyLmZpZWxkcy5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdFx0UENEaGVhZGVyLmNvdW50LnB1c2goIDEgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0UENEaGVhZGVyLm9mZnNldCA9IHt9O1xuXG5cdFx0XHRsZXQgc2l6ZVN1bSA9IDA7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IFBDRGhlYWRlci5maWVsZHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0XHRpZiAoIFBDRGhlYWRlci5kYXRhID09PSAnYXNjaWknICkge1xuXG5cdFx0XHRcdFx0UENEaGVhZGVyLm9mZnNldFsgUENEaGVhZGVyLmZpZWxkc1sgaSBdIF0gPSBpO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRQQ0RoZWFkZXIub2Zmc2V0WyBQQ0RoZWFkZXIuZmllbGRzWyBpIF0gXSA9IHNpemVTdW07XG5cdFx0XHRcdFx0c2l6ZVN1bSArPSBQQ0RoZWFkZXIuc2l6ZVsgaSBdICogUENEaGVhZGVyLmNvdW50WyBpIF07XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiaW5hcnkgb25seVxuXG5cdFx0XHRQQ0RoZWFkZXIucm93U2l6ZSA9IHNpemVTdW07XG5cblx0XHRcdHJldHVybiBQQ0RoZWFkZXI7XG5cblx0XHR9XG5cblx0XHRjb25zdCB0ZXh0RGF0YSA9IExvYWRlclV0aWxzLmRlY29kZVRleHQoIG5ldyBVaW50OEFycmF5KCBkYXRhICkgKTtcblxuXHRcdC8vIHBhcnNlIGhlYWRlciAoYWx3YXlzIGFzY2lpIGZvcm1hdClcblxuXHRcdGNvbnN0IFBDRGhlYWRlciA9IHBhcnNlSGVhZGVyKCB0ZXh0RGF0YSApO1xuXG5cdFx0Ly8gcGFyc2UgZGF0YVxuXG5cdFx0Y29uc3QgcG9zaXRpb24gPSBbXTtcblx0XHRjb25zdCBub3JtYWwgPSBbXTtcblx0XHRjb25zdCBjb2xvciA9IFtdO1xuXG5cdFx0Ly8gYXNjaWlcblxuXHRcdGlmICggUENEaGVhZGVyLmRhdGEgPT09ICdhc2NpaScgKSB7XG5cblx0XHRcdGNvbnN0IG9mZnNldCA9IFBDRGhlYWRlci5vZmZzZXQ7XG5cdFx0XHRjb25zdCBwY2REYXRhID0gdGV4dERhdGEuc3Vic3RyKCBQQ0RoZWFkZXIuaGVhZGVyTGVuICk7XG5cdFx0XHRjb25zdCBsaW5lcyA9IHBjZERhdGEuc3BsaXQoICdcXG4nICk7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBsaW5lc1sgaSBdID09PSAnJyApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1sgaSBdLnNwbGl0KCAnICcgKTtcblxuXHRcdFx0XHRpZiAoIG9mZnNldC54ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQueCBdICkgKTtcblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQueSBdICkgKTtcblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQueiBdICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQucmdiICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRjb25zdCByZ2IgPSBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQucmdiIF0gKTtcblx0XHRcdFx0XHRjb25zdCByID0gKCByZ2IgPj4gMTYgKSAmIDB4MDAwMGZmO1xuXHRcdFx0XHRcdGNvbnN0IGcgPSAoIHJnYiA+PiA4ICkgJiAweDAwMDBmZjtcblx0XHRcdFx0XHRjb25zdCBiID0gKCByZ2IgPj4gMCApICYgMHgwMDAwZmY7XG5cdFx0XHRcdFx0Y29sb3IucHVzaCggciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NSApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG9mZnNldC5ub3JtYWxfeCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIHBhcnNlRmxvYXQoIGxpbmVbIG9mZnNldC5ub3JtYWxfeCBdICkgKTtcblx0XHRcdFx0XHRub3JtYWwucHVzaCggcGFyc2VGbG9hdCggbGluZVsgb2Zmc2V0Lm5vcm1hbF95IF0gKSApO1xuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBwYXJzZUZsb2F0KCBsaW5lWyBvZmZzZXQubm9ybWFsX3ogXSApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBiaW5hcnktY29tcHJlc3NlZFxuXG5cdFx0Ly8gbm9ybWFsbHkgZGF0YSBpbiBQQ0QgZmlsZXMgYXJlIG9yZ2FuaXplZCBhcyBhcnJheSBvZiBzdHJ1Y3R1cmVzOiBYWVpSR0JYWVpSR0Jcblx0XHQvLyBiaW5hcnkgY29tcHJlc3NlZCBQQ0QgZmlsZXMgb3JnYW5pemUgdGhlaXIgZGF0YSBhcyBzdHJ1Y3R1cmUgb2YgYXJyYXlzOiBYWFlZWlpSR0JSR0Jcblx0XHQvLyB0aGF0IHJlcXVpcmVzIGEgdG90YWxseSBkaWZmZXJlbnQgcGFyc2luZyBhcHByb2FjaCBjb21wYXJlZCB0byBub24tY29tcHJlc3NlZCBkYXRhXG5cblx0XHRpZiAoIFBDRGhlYWRlci5kYXRhID09PSAnYmluYXJ5X2NvbXByZXNzZWQnICkge1xuXG5cdFx0XHRjb25zdCBzaXplcyA9IG5ldyBVaW50MzJBcnJheSggZGF0YS5zbGljZSggUENEaGVhZGVyLmhlYWRlckxlbiwgUENEaGVhZGVyLmhlYWRlckxlbiArIDggKSApO1xuXHRcdFx0Y29uc3QgY29tcHJlc3NlZFNpemUgPSBzaXplc1sgMCBdO1xuXHRcdFx0Y29uc3QgZGVjb21wcmVzc2VkU2l6ZSA9IHNpemVzWyAxIF07XG5cdFx0XHRjb25zdCBkZWNvbXByZXNzZWQgPSBkZWNvbXByZXNzTFpGKCBuZXcgVWludDhBcnJheSggZGF0YSwgUENEaGVhZGVyLmhlYWRlckxlbiArIDgsIGNvbXByZXNzZWRTaXplICksIGRlY29tcHJlc3NlZFNpemUgKTtcblx0XHRcdGNvbnN0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KCBkZWNvbXByZXNzZWQuYnVmZmVyICk7XG5cblx0XHRcdGNvbnN0IG9mZnNldCA9IFBDRGhlYWRlci5vZmZzZXQ7XG5cblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IFBDRGhlYWRlci5wb2ludHM7IGkgKysgKSB7XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQueCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0cG9zaXRpb24ucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0LnggKSArIFBDRGhlYWRlci5zaXplWyAwIF0gKiBpLCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0cG9zaXRpb24ucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0LnkgKSArIFBDRGhlYWRlci5zaXplWyAxIF0gKiBpLCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0cG9zaXRpb24ucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0LnogKSArIFBDRGhlYWRlci5zaXplWyAyIF0gKiBpLCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggb2Zmc2V0LnJnYiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29sb3IucHVzaCggZGF0YXZpZXcuZ2V0VWludDgoICggUENEaGVhZGVyLnBvaW50cyAqIG9mZnNldC5yZ2IgKSArIFBDRGhlYWRlci5zaXplWyAzIF0gKiBpICsgMiApIC8gMjU1LjAgKTtcblx0XHRcdFx0XHRjb2xvci5wdXNoKCBkYXRhdmlldy5nZXRVaW50OCggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0LnJnYiApICsgUENEaGVhZGVyLnNpemVbIDMgXSAqIGkgKyAxICkgLyAyNTUuMCApO1xuXHRcdFx0XHRcdGNvbG9yLnB1c2goIGRhdGF2aWV3LmdldFVpbnQ4KCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQucmdiICkgKyBQQ0RoZWFkZXIuc2l6ZVsgMyBdICogaSArIDAgKSAvIDI1NS4wICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggb2Zmc2V0Lm5vcm1hbF94ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRub3JtYWwucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggKCBQQ0RoZWFkZXIucG9pbnRzICogb2Zmc2V0Lm5vcm1hbF94ICkgKyBQQ0RoZWFkZXIuc2l6ZVsgNCBdICogaSwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCAoIFBDRGhlYWRlci5wb2ludHMgKiBvZmZzZXQubm9ybWFsX3kgKSArIFBDRGhlYWRlci5zaXplWyA1IF0gKiBpLCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoICggUENEaGVhZGVyLnBvaW50cyAqIG9mZnNldC5ub3JtYWxfeiApICsgUENEaGVhZGVyLnNpemVbIDYgXSAqIGksIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJpbmFyeVxuXG5cdFx0aWYgKCBQQ0RoZWFkZXIuZGF0YSA9PT0gJ2JpbmFyeScgKSB7XG5cblx0XHRcdGNvbnN0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KCBkYXRhLCBQQ0RoZWFkZXIuaGVhZGVyTGVuICk7XG5cdFx0XHRjb25zdCBvZmZzZXQgPSBQQ0RoZWFkZXIub2Zmc2V0O1xuXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDAsIHJvdyA9IDA7IGkgPCBQQ0RoZWFkZXIucG9pbnRzOyBpICsrLCByb3cgKz0gUENEaGVhZGVyLnJvd1NpemUgKSB7XG5cblx0XHRcdFx0aWYgKCBvZmZzZXQueCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0cG9zaXRpb24ucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggcm93ICsgb2Zmc2V0LngsIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblx0XHRcdFx0XHRwb3NpdGlvbi5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCByb3cgKyBvZmZzZXQueSwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXHRcdFx0XHRcdHBvc2l0aW9uLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoIHJvdyArIG9mZnNldC56LCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggb2Zmc2V0LnJnYiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0Y29sb3IucHVzaCggZGF0YXZpZXcuZ2V0VWludDgoIHJvdyArIG9mZnNldC5yZ2IgKyAyICkgLyAyNTUuMCApO1xuXHRcdFx0XHRcdGNvbG9yLnB1c2goIGRhdGF2aWV3LmdldFVpbnQ4KCByb3cgKyBvZmZzZXQucmdiICsgMSApIC8gMjU1LjAgKTtcblx0XHRcdFx0XHRjb2xvci5wdXNoKCBkYXRhdmlldy5nZXRVaW50OCggcm93ICsgb2Zmc2V0LnJnYiArIDAgKSAvIDI1NS4wICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggb2Zmc2V0Lm5vcm1hbF94ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRub3JtYWwucHVzaCggZGF0YXZpZXcuZ2V0RmxvYXQzMiggcm93ICsgb2Zmc2V0Lm5vcm1hbF94LCB0aGlzLmxpdHRsZUVuZGlhbiApICk7XG5cdFx0XHRcdFx0bm9ybWFsLnB1c2goIGRhdGF2aWV3LmdldEZsb2F0MzIoIHJvdyArIG9mZnNldC5ub3JtYWxfeSwgdGhpcy5saXR0bGVFbmRpYW4gKSApO1xuXHRcdFx0XHRcdG5vcm1hbC5wdXNoKCBkYXRhdmlldy5nZXRGbG9hdDMyKCByb3cgKyBvZmZzZXQubm9ybWFsX3osIHRoaXMubGl0dGxlRW5kaWFuICkgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIGJ1aWxkIGdlb21ldHJ5XG5cblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuXG5cdFx0aWYgKCBwb3NpdGlvbi5sZW5ndGggPiAwICkgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIDMgKSApO1xuXHRcdGlmICggbm9ybWFsLmxlbmd0aCA+IDAgKSBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFsLCAzICkgKTtcblx0XHRpZiAoIGNvbG9yLmxlbmd0aCA+IDAgKSBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdjb2xvcicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBjb2xvciwgMyApICk7XG5cblx0XHRnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdC8vIGJ1aWxkIG1hdGVyaWFsXG5cblx0XHRjb25zdCBtYXRlcmlhbCA9IG5ldyBQb2ludHNNYXRlcmlhbCggeyBzaXplOiAwLjAwNSB9ICk7XG5cblx0XHRpZiAoIGNvbG9yLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdG1hdGVyaWFsLnZlcnRleENvbG9ycyA9IHRydWU7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRtYXRlcmlhbC5jb2xvci5zZXRIZXgoIE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZiApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gYnVpbGQgcG9pbnQgY2xvdWRcblxuXHRcdGNvbnN0IG1lc2ggPSBuZXcgUG9pbnRzKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcblx0XHRsZXQgbmFtZSA9IHVybC5zcGxpdCggJycgKS5yZXZlcnNlKCkuam9pbiggJycgKTtcblx0XHRuYW1lID0gLyhbXlxcL10qKS8uZXhlYyggbmFtZSApO1xuXHRcdG5hbWUgPSBuYW1lWyAxIF0uc3BsaXQoICcnICkucmV2ZXJzZSgpLmpvaW4oICcnICk7XG5cdFx0bWVzaC5uYW1lID0gbmFtZTtcblxuXHRcdHJldHVybiBtZXNoO1xuXG5cdH1cblxufVxuXG5leHBvcnQgeyBQQ0RMb2FkZXIgfTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfYXBpX2h0dHBfcGIgPSByZXF1aXJlKCcuLi8uLi9nb29nbGUvYXBpL2h0dHBfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9odHRwX3BiKTtcbnZhciBnb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5odHRwJywgbnVsbCwgZ2xvYmFsKTtcblxuLyoqXG4gKiBBIHR1cGxlIG9mIHtmaWVsZCBudW1iZXIsIGNsYXNzIGNvbnN0cnVjdG9yfSBmb3IgdGhlIGV4dGVuc2lvblxuICogZmllbGQgbmFtZWQgYGh0dHBgLlxuICogQHR5cGUgeyFqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbzwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuaHR0cCA9IG5ldyBqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbyhcbiAgICA3MjI5NTcyOCxcbiAgICB7aHR0cDogMH0sXG4gICAgZ29vZ2xlX2FwaV9odHRwX3BiLkh0dHBSdWxlLFxuICAgICAvKiogQHR5cGUgez9mdW5jdGlvbigoYm9vbGVhbnx1bmRlZmluZWQpLCFqc3BiLk1lc3NhZ2U9KTogIU9iamVjdH0gKi8gKFxuICAgICAgICAgZ29vZ2xlX2FwaV9odHRwX3BiLkh0dHBSdWxlLnRvT2JqZWN0KSxcbiAgICAwKTtcblxuZ29vZ2xlX3Byb3RvYnVmX2Rlc2NyaXB0b3JfcGIuTWV0aG9kT3B0aW9ucy5leHRlbnNpb25zQmluYXJ5WzcyMjk1NzI4XSA9IG5ldyBqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbyhcbiAgICBwcm90by5nb29nbGUuYXBpLmh0dHAsXG4gICAganNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlLFxuICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2UsXG4gICAgZ29vZ2xlX2FwaV9odHRwX3BiLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyLFxuICAgIGdvb2dsZV9hcGlfaHR0cF9wYi5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsXG4gICAgZmFsc2UpO1xuLy8gVGhpcyByZWdpc3RlcnMgdGhlIGV4dGVuc2lvbiBmaWVsZCB3aXRoIHRoZSBleHRlbmRlZCBjbGFzcywgc28gdGhhdFxuLy8gdG9PYmplY3QoKSB3aWxsIGZ1bmN0aW9uIGNvcnJlY3RseS5cbmdvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yX3BiLk1ldGhvZE9wdGlvbnMuZXh0ZW5zaW9uc1s3MjI5NTcyOF0gPSBwcm90by5nb29nbGUuYXBpLmh0dHA7XG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5nb29nbGUuYXBpKTtcbiIsIi8vIHNvdXJjZTogZ29vZ2xlL2FwaS9odHRwLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4nLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5hcGkuSHR0cCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5QYXR0ZXJuQ2FzZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5nb29nbGUuYXBpLkh0dHAucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuSHR0cCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLmdvb2dsZS5hcGkuSHR0cC5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUuYXBpLkh0dHAnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucmVwZWF0ZWRGaWVsZHNfLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzXyk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kaXNwbGF5TmFtZSA9ICdwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4nO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJ1bGVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UnVsZXNMaXN0KCksXG4gICAgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBmdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwO1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5IdHRwLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHB9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJ1bGVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRGdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUuYXBpLkh0dHAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHB9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSdWxlc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbigpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBIdHRwUnVsZSBydWxlcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU+fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmdldFJ1bGVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHB9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuc2V0UnVsZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmFkZFJ1bGVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHB9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHAucHJvdG90eXBlLmNsZWFyUnVsZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJ1bGVzTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBmdWxseV9kZWNvZGVfcmVzZXJ2ZWRfZXhwYW5zaW9uID0gMjtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuZ2V0RnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cC5wcm90b3R5cGUuc2V0RnVsbHlEZWNvZGVSZXNlcnZlZEV4cGFuc2lvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnJlcGVhdGVkRmllbGRzXyA9IFsxMV07XG5cbi8qKlxuICogT25lb2YgZ3JvdXAgZGVmaW5pdGlvbnMgZm9yIHRoaXMgbWVzc2FnZS4gRWFjaCBncm91cCBkZWZpbmVzIHRoZSBmaWVsZFxuICogbnVtYmVycyBiZWxvbmdpbmcgdG8gdGhhdCBncm91cC4gV2hlbiBvZiB0aGVzZSBmaWVsZHMnIHZhbHVlIGlzIHNldCwgYWxsXG4gKiBvdGhlciBmaWVsZHMgaW4gdGhlIGdyb3VwIGFyZSBjbGVhcmVkLiBEdXJpbmcgZGVzZXJpYWxpemF0aW9uLCBpZiBtdWx0aXBsZVxuICogZmllbGRzIGFyZSBlbmNvdW50ZXJlZCBmb3IgYSBncm91cCwgb25seSB0aGUgbGFzdCB2YWx1ZSBzZWVuIHdpbGwgYmUga2VwdC5cbiAqIEBwcml2YXRlIHshQXJyYXk8IUFycmF5PG51bWJlcj4+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfID0gW1syLDMsNCw1LDYsOF1dO1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuUGF0dGVybkNhc2UgPSB7XG4gIFBBVFRFUk5fTk9UX1NFVDogMCxcbiAgR0VUOiAyLFxuICBQVVQ6IDMsXG4gIFBPU1Q6IDQsXG4gIERFTEVURTogNSxcbiAgUEFUQ0g6IDYsXG4gIENVU1RPTTogOFxufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLlBhdHRlcm5DYXNlfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRQYXR0ZXJuQ2FzZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLlBhdHRlcm5DYXNlfSAqLyhqc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSkpO1xufTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgc2VsZWN0b3I6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZ2V0OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIHB1dDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBcIlwiKSxcbiAgICBwb3N0OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIFwiXCIpLFxuICAgIHBiX2RlbGV0ZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCA1LCBcIlwiKSxcbiAgICBwYXRjaDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCA2LCBcIlwiKSxcbiAgICBjdXN0b206IChmID0gbXNnLmdldEN1c3RvbSgpKSAmJiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgYm9keToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCA3LCBcIlwiKSxcbiAgICByZXNwb25zZUJvZHk6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMTIsIFwiXCIpLFxuICAgIGFkZGl0aW9uYWxCaW5kaW5nc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoKSxcbiAgICBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZTtcbiAgcmV0dXJuIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFNlbGVjdG9yKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0R2V0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UHV0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UG9zdCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldERlbGV0ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBhdGNoKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRDdXN0b20odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRCb2R5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlc3BvbnNlQm9keSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDExOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEFkZGl0aW9uYWxCaW5kaW5ncyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFNlbGVjdG9yKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDIpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgMykpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZChtZXNzYWdlLCA0KSk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1lc3NhZ2UsIDUpKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobWVzc2FnZSwgNikpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEN1c3RvbSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDgsXG4gICAgICBmLFxuICAgICAgcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Qm9keSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgNyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJlc3BvbnNlQm9keSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMTIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBZGRpdGlvbmFsQmluZGluZ3NMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBzZWxlY3RvciA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFNlbGVjdG9yID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0U2VsZWN0b3IgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgZ2V0ID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0R2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0R2V0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDIsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckdldCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMiwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzR2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcHV0ID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0UHV0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0UHV0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDMsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhclB1dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgMywgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuaGFzUHV0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcG9zdCA9IDQ7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFBvc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXRQb3N0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDQsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhclBvc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDQsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc1Bvc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA0KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBkZWxldGUgPSA1O1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXREZWxldGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgNSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5zZXREZWxldGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNSwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyRGVsZXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLCA1LCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNEZWxldGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA1KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwYXRjaCA9IDY7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldFBhdGNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDYsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0UGF0Y2ggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywgNiwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5vbmVvZkdyb3Vwc19bMF0sIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmNsZWFyUGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsIDYsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUub25lb2ZHcm91cHNfWzBdLCB1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmhhc1BhdGNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBDdXN0b21IdHRwUGF0dGVybiBjdXN0b20gPSA4O1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldEN1c3RvbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLCA4KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybnx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0Q3VzdG9tID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLCA4LCBwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5jbGVhckN1c3RvbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRDdXN0b20odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5oYXNDdXN0b20gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCA4KSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBib2R5ID0gNztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuZ2V0Qm9keSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA3LCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEJvZHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcmVzcG9uc2VfYm9keSA9IDEyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5nZXRSZXNwb25zZUJvZHkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMTIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuc2V0UmVzcG9uc2VCb2R5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEh0dHBSdWxlIGFkZGl0aW9uYWxfYmluZGluZ3MgPSAxMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLmdldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUsIDExKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cFJ1bGUucHJvdG90eXBlLnNldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDExLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBSdWxlLnByb3RvdHlwZS5hZGRBZGRpdGlvbmFsQmluZGluZ3MgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMTEsIG9wdF92YWx1ZSwgcHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBSdWxlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwUnVsZS5wcm90b3R5cGUuY2xlYXJBZGRpdGlvbmFsQmluZGluZ3NMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEFkZGl0aW9uYWxCaW5kaW5nc0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGtpbmQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcGF0aDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm47XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybn1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRLaW5kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGF0aCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEtpbmQoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQYXRoKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcga2luZCA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm4ucHJvdG90eXBlLmdldEtpbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm59IHJldHVybnMgdGhpc1xuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5zZXRLaW5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBhdGggPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJuLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkN1c3RvbUh0dHBQYXR0ZXJufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybi5wcm90b3R5cGUuc2V0UGF0aCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLmFwaSk7XG4iLCIvLyBzb3VyY2U6IGdvb2dsZS9hcGkvaHR0cGJvZHkucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX3Byb3RvYnVmX2FueV9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvYW55X3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9hbnlfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHknLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHksIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LmRpc3BsYXlOYW1lID0gJ3Byb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHknO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnJlcGVhdGVkRmllbGRzXyA9IFszXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29udGVudFR5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZGF0YTogbXNnLmdldERhdGFfYXNCNjQoKSxcbiAgICBleHRlbnNpb25zTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXh0ZW5zaW9uc0xpc3QoKSxcbiAgICBnb29nbGVfcHJvdG9idWZfYW55X3BiLkFueS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHk7XG4gIHJldHVybiBwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHl9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250ZW50VHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAocmVhZGVyLnJlYWRCeXRlcygpKTtcbiAgICAgIG1zZy5zZXREYXRhKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfYW55X3BiLkFueTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfYW55X3BiLkFueS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV4dGVuc2lvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDb250ZW50VHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERhdGFfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgZ29vZ2xlX3Byb3RvYnVmX2FueV9wYi5Bbnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRlbnRfdHlwZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLmdldENvbnRlbnRUeXBlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuc2V0Q29udGVudFR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBkYXRhID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgZGF0YSA9IDI7XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXREYXRhKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLmdldERhdGFfYXNCNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQoXG4gICAgICB0aGlzLmdldERhdGEoKSkpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGRhdGEgPSAyO1xuICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgYnJvd3NlcnMuXG4gKiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXREYXRhKClgXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuZ2V0RGF0YV9hc1U4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAoanNwYi5NZXNzYWdlLmJ5dGVzQXNVOChcbiAgICAgIHRoaXMuZ2V0RGF0YSgpKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshKHN0cmluZ3xVaW50OEFycmF5KX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkFueSBleHRlbnNpb25zID0gMztcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueT59XG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLmdldEV4dGVuc2lvbnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuQW55Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfYW55X3BiLkFueSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuQW55Pn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5nb29nbGUuYXBpLkh0dHBCb2R5fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5nb29nbGUuYXBpLkh0dHBCb2R5LnByb3RvdHlwZS5zZXRFeHRlbnNpb25zTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnk9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueX1cbiAqL1xucHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keS5wcm90b3R5cGUuYWRkRXh0ZW5zaW9ucyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnksIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLmFwaS5IdHRwQm9keX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLmdvb2dsZS5hcGkuSHR0cEJvZHkucHJvdG90eXBlLmNsZWFyRXh0ZW5zaW9uc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXh0ZW5zaW9uc0xpc3QoW10pO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8uZ29vZ2xlLmFwaSk7XG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21tb24vdjEvY29tbW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnknLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuR2VvbWV0cnlUeXBlQ2FzZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5vbmVvZkdyb3Vwc18pO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZXNwYWNlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHR5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIiksXG4gICAgc3VidHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBcIlwiKSxcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lc3BhY2UodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0U3VidHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZXNwYWNlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0VHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFN1YnR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZXNwYWNlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUucHJvdG90eXBlLmdldE5hbWVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuc2V0TmFtZXNwYWNlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHR5cGUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZS5wcm90b3R5cGUuc2V0VHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBzdWJ0eXBlID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUucHJvdG90eXBlLmdldFN1YnR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUucHJvdG90eXBlLnNldFN1YnR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDQ7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgYW5hbG9nc01hcDogKGYgPSBtc2cuZ2V0QW5hbG9nc01hcCgpKSA/IGYudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy50b09iamVjdCkgOiBbXSxcbiAgICBkaWdpdGFsSW50ZXJydXB0c01hcDogKGYgPSBtc2cuZ2V0RGlnaXRhbEludGVycnVwdHNNYXAoKSkgPyBmLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnRvT2JqZWN0KSA6IFtdXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBtc2cuZ2V0QW5hbG9nc01hcCgpO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLCBmdW5jdGlvbihtZXNzYWdlLCByZWFkZXIpIHtcbiAgICAgICAganNwYi5NYXAuZGVzZXJpYWxpemVCaW5hcnkobWVzc2FnZSwgcmVhZGVyLCBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFN0cmluZywganNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsIFwiXCIsIG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cygpKTtcbiAgICAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbXNnLmdldERpZ2l0YWxJbnRlcnJ1cHRzTWFwKCk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlYWRlcikge1xuICAgICAgICBqc3BiLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShtZXNzYWdlLCByZWFkZXIsIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLCBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZE1lc3NhZ2UsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIsIFwiXCIsIG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMoKSk7XG4gICAgICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0QW5hbG9nc01hcCh0cnVlKTtcbiAgaWYgKGYgJiYgZi5nZXRMZW5ndGgoKSA+IDApIHtcbiAgICBmLnNlcmlhbGl6ZUJpbmFyeSgxLCB3cml0ZXIsIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZywganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERpZ2l0YWxJbnRlcnJ1cHRzTWFwKHRydWUpO1xuICBpZiAoZiAmJiBmLmdldExlbmd0aCgpID4gMCkge1xuICAgIGYuc2VyaWFsaXplQmluYXJ5KDIsIHdyaXRlciwganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLCBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpO1xuICB9XG59O1xuXG5cbi8qKlxuICogbWFwPHN0cmluZywgQW5hbG9nU3RhdHVzPiBhbmFsb2dzID0gMTtcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9ub0xhenlDcmVhdGUgRG8gbm90IGNyZWF0ZSB0aGUgbWFwIGlmXG4gKiBlbXB0eSwgaW5zdGVhZCByZXR1cm5pbmcgYHVuZGVmaW5lZGBcbiAqIEByZXR1cm4geyFqc3BiLk1hcDxzdHJpbmcsIXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUuZ2V0QW5hbG9nc01hcCA9IGZ1bmN0aW9uKG9wdF9ub0xhenlDcmVhdGUpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IWpzcGIuTWFwPHN0cmluZywhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXM+fSAqLyAoXG4gICAgICBqc3BiLk1lc3NhZ2UuZ2V0TWFwRmllbGQodGhpcywgMSwgb3B0X25vTGF6eUNyZWF0ZSxcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzKSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHZhbHVlcyBmcm9tIHRoZSBtYXAuIFRoZSBtYXAgd2lsbCBiZSBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUuY2xlYXJBbmFsb2dzTWFwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZ2V0QW5hbG9nc01hcCgpLmNsZWFyKCk7XG4gIHJldHVybiB0aGlzO307XG5cblxuLyoqXG4gKiBtYXA8c3RyaW5nLCBEaWdpdGFsSW50ZXJydXB0U3RhdHVzPiBkaWdpdGFsX2ludGVycnVwdHMgPSAyO1xuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X25vTGF6eUNyZWF0ZSBEbyBub3QgY3JlYXRlIHRoZSBtYXAgaWZcbiAqIGVtcHR5LCBpbnN0ZWFkIHJldHVybmluZyBgdW5kZWZpbmVkYFxuICogQHJldHVybiB7IWpzcGIuTWFwPHN0cmluZywhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUuZ2V0RGlnaXRhbEludGVycnVwdHNNYXAgPSBmdW5jdGlvbihvcHRfbm9MYXp5Q3JlYXRlKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFqc3BiLk1hcDxzdHJpbmcsIXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cz59ICovIChcbiAgICAgIGpzcGIuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLCAyLCBvcHRfbm9MYXp5Q3JlYXRlLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzKSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHZhbHVlcyBmcm9tIHRoZSBtYXAuIFRoZSBtYXAgd2lsbCBiZSBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1cy5wcm90b3R5cGUuY2xlYXJEaWdpdGFsSW50ZXJydXB0c01hcCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdldERpZ2l0YWxJbnRlcnJ1cHRzTWFwKCkuY2xlYXIoKTtcbiAgcmV0dXJuIHRoaXM7fTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB2YWx1ZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQzMigpKTtcbiAgICAgIG1zZy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRWYWx1ZSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkFuYWxvZ1N0YXR1cy5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuQW5hbG9nU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5BbmFsb2dTdGF0dXMucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB2YWx1ZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5EaWdpdGFsSW50ZXJydXB0U3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkRpZ2l0YWxJbnRlcnJ1cHRTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQ2NCB2YWx1ZSA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuRGlnaXRhbEludGVycnVwdFN0YXR1cy5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHg6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgeToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKSxcbiAgICB6OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApLFxuICAgIG9YOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCA0LCAwLjApLFxuICAgIG9ZOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCA1LCAwLjApLFxuICAgIG9aOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCA2LCAwLjApLFxuICAgIHRoZXRhOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCA3LCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFkodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRaKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0T1godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRPWSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE9aKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0VGhldGEodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFgoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRZKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WigpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9YKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0T1koKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDUsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPWigpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgNixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFRoZXRhKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICA3LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeiA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0WiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5zZXRaID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgb194ID0gNDtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5nZXRPWCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnByb3RvdHlwZS5zZXRPWCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIG9feSA9IDU7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuZ2V0T1kgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5wcm90b3R5cGUuc2V0T1kgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgNSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBvX3ogPSA2O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLmdldE9aID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA2LCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldE9aID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDYsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgdGhldGEgPSA3O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLmdldFRoZXRhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA3LCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UucHJvdG90eXBlLnNldFRoZXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDcsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZWZlcmVuY2VGcmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwb3NlOiAoZiA9IG1zZy5nZXRQb3NlKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlZmVyZW5jZUZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0UG9zZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJlZmVyZW5jZUZyYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyByZWZlcmVuY2VfZnJhbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnByb3RvdHlwZS5nZXRSZWZlcmVuY2VGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLnNldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgUG9zZSBwb3NlID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLmdldFBvc2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLnNldFBvc2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUucHJvdG90eXBlLmNsZWFyUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQb3NlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5wcm90b3R5cGUuaGFzUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yM30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB4OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIHk6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgejoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlZlY3RvcjMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yM31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFgodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRZKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0Wih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0WCgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFkoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRaKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeiA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVmVjdG9yMy5wcm90b3R5cGUuZ2V0WiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5WZWN0b3IzLnByb3RvdHlwZS5zZXRaID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcmFkaXVzTW06IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFJhZGl1c01tKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJhZGl1c01tKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcmFkaXVzX21tID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUucHJvdG90eXBlLmdldFJhZGl1c01tID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuU3BoZXJlLnByb3RvdHlwZS5zZXRSYWRpdXNNbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB3aWR0aE1tOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIGxlbmd0aE1tOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIGRlcHRoTW06IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc219XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRXaWR0aE1tKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0TGVuZ3RoTW0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXREZXB0aE1tKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc219IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRXaWR0aE1tKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TGVuZ3RoTW0oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXREZXB0aE1tKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgd2lkdGhfbW0gPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20ucHJvdG90eXBlLmdldFdpZHRoTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5wcm90b3R5cGUuc2V0V2lkdGhNbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGxlbmd0aF9tbSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5wcm90b3R5cGUuZ2V0TGVuZ3RoTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5wcm90b3R5cGUuc2V0TGVuZ3RoTW0gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkZXB0aF9tbSA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS5wcm90b3R5cGUuZ2V0RGVwdGhNbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZWN0YW5ndWxhclByaXNtLnByb3RvdHlwZS5zZXREZXB0aE1tID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuXG4vKipcbiAqIE9uZW9mIGdyb3VwIGRlZmluaXRpb25zIGZvciB0aGlzIG1lc3NhZ2UuIEVhY2ggZ3JvdXAgZGVmaW5lcyB0aGUgZmllbGRcbiAqIG51bWJlcnMgYmVsb25naW5nIHRvIHRoYXQgZ3JvdXAuIFdoZW4gb2YgdGhlc2UgZmllbGRzJyB2YWx1ZSBpcyBzZXQsIGFsbFxuICogb3RoZXIgZmllbGRzIGluIHRoZSBncm91cCBhcmUgY2xlYXJlZC4gRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgaWYgbXVsdGlwbGVcbiAqIGZpZWxkcyBhcmUgZW5jb3VudGVyZWQgZm9yIGEgZ3JvdXAsIG9ubHkgdGhlIGxhc3QgdmFsdWUgc2VlbiB3aWxsIGJlIGtlcHQuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PCFBcnJheTxudW1iZXI+Pn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lm9uZW9mR3JvdXBzXyA9IFtbMiwzXV07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5HZW9tZXRyeVR5cGVDYXNlID0ge1xuICBHRU9NRVRSWV9UWVBFX05PVF9TRVQ6IDAsXG4gIFNQSEVSRTogMixcbiAgQk9YOiAzXG59O1xuXG4vKipcbiAqIEByZXR1cm4ge3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuR2VvbWV0cnlUeXBlQ2FzZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuZ2V0R2VvbWV0cnlUeXBlQ2FzZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lkdlb21ldHJ5VHlwZUNhc2V9ICovKGpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkub25lb2ZHcm91cHNfWzBdKSk7XG59O1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjZW50ZXI6IChmID0gbXNnLmdldENlbnRlcigpKSAmJiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2UudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBzcGhlcmU6IChmID0gbXNnLmdldFNwaGVyZSgpKSAmJiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIGJveDogKGYgPSBtc2cuZ2V0Qm94KCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldENlbnRlcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRTcGhlcmUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRCb3godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDZW50ZXIoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3BoZXJlKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Qm94KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc20uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgUG9zZSBjZW50ZXIgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuZ2V0Q2VudGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5zZXRDZW50ZXIgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmNsZWFyQ2VudGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldENlbnRlcih1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmhhc0NlbnRlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgU3BoZXJlIHNwaGVyZSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmdldFNwaGVyZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5TcGhlcmUsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlNwaGVyZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuc2V0U3BoZXJlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLCAyLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5jbGVhclNwaGVyZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTcGhlcmUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5oYXNTcGhlcmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIFJlY3Rhbmd1bGFyUHJpc20gYm94ID0gMztcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc219XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkucHJvdG90eXBlLmdldEJveCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlY3Rhbmd1bGFyUHJpc219ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVjdGFuZ3VsYXJQcmlzbXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeS5wcm90b3R5cGUuc2V0Qm94ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLCAzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Lm9uZW9mR3JvdXBzX1swXSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnl9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5jbGVhckJveCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRCb3godW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnByb3RvdHlwZS5oYXNCb3ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZWZlcmVuY2VGcmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBnZW9tZXRyaWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0R2VvbWV0cmllc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlZmVyZW5jZUZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRHZW9tZXRyaWVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVmZXJlbmNlRnJhbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRHZW9tZXRyaWVzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyByZWZlcmVuY2VfZnJhbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS5nZXRSZWZlcmVuY2VGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLnNldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgR2VvbWV0cnkgZ2VvbWV0cmllcyA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnk+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS5nZXRHZW9tZXRyaWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeT59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJ5Pn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnByb3RvdHlwZS5zZXRHZW9tZXRyaWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnk9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyeX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZS5wcm90b3R5cGUuYWRkR2VvbWV0cmllcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cnksIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUucHJvdG90eXBlLmNsZWFyR2VvbWV0cmllc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0R2VvbWV0cmllc0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9pbnRDbG91ZDogbXNnLmdldFBvaW50Q2xvdWRfYXNCNjQoKSxcbiAgICBnZW9tZXRyaWVzOiAoZiA9IG1zZy5nZXRHZW9tZXRyaWVzKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAocmVhZGVyLnJlYWRCeXRlcygpKTtcbiAgICAgIG1zZy5zZXRQb2ludENsb3VkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRHZW9tZXRyaWVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQb2ludENsb3VkX2FzVTgoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZUJ5dGVzKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEdlb21ldHJpZXMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgcG9pbnRfY2xvdWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLmdldFBvaW50Q2xvdWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHBvaW50X2Nsb3VkID0gMTtcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldFBvaW50Q2xvdWQoKWBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS5nZXRQb2ludENsb3VkX2FzQjY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KFxuICAgICAgdGhpcy5nZXRQb2ludENsb3VkKCkpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBwb2ludF9jbG91ZCA9IDE7XG4gKiBOb3RlIHRoYXQgVWludDhBcnJheSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cbiAqIEBzZWUgaHR0cDovL2Nhbml1c2UuY29tL1VpbnQ4QXJyYXlcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldFBvaW50Q2xvdWQoKWBcbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLmdldFBvaW50Q2xvdWRfYXNVOCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgoXG4gICAgICB0aGlzLmdldFBvaW50Q2xvdWQoKSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IShzdHJpbmd8VWludDhBcnJheSl9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS5zZXRQb2ludENsb3VkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBHZW9tZXRyaWVzSW5GcmFtZSBnZW9tZXRyaWVzID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLmdldEdlb21ldHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0LnByb3RvdHlwZS5zZXRHZW9tZXRyaWVzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdC5wcm90b3R5cGUuY2xlYXJHZW9tZXRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEdlb21ldHJpZXModW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3QucHJvdG90eXBlLmhhc0dlb21ldHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxhdGl0dWRlOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIGxvbmdpdHVkZToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQ7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRMYXRpdHVkZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldExvbmdpdHVkZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldExhdGl0dWRlKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TG9uZ2l0dWRlKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbGF0aXR1ZGUgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50LnByb3RvdHlwZS5nZXRMYXRpdHVkZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQucHJvdG90eXBlLnNldExhdGl0dWRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbG9uZ2l0dWRlID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5wcm90b3R5cGUuZ2V0TG9uZ2l0dWRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludC5wcm90b3R5cGUuc2V0TG9uZ2l0dWRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcmVmZXJlbmNlRnJhbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcG9zZUluT2JzZXJ2ZXJGcmFtZTogKGYgPSBtc2cuZ2V0UG9zZUluT2JzZXJ2ZXJGcmFtZSgpKSAmJiBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlZmVyZW5jZUZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NlSW5PYnNlcnZlckZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJlZmVyZW5jZUZyYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zZUluT2JzZXJ2ZXJGcmFtZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcmVmZXJlbmNlX2ZyYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFJlZmVyZW5jZUZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRSZWZlcmVuY2VGcmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIFBvc2VJbkZyYW1lIHBvc2VfaW5fb2JzZXJ2ZXJfZnJhbWUgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRQb3NlSW5PYnNlcnZlckZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWUsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFBvc2VJbk9ic2VydmVyRnJhbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUuY2xlYXJQb3NlSW5PYnNlcnZlckZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2VJbk9ic2VydmVyRnJhbWUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5wcm90b3R5cGUuaGFzUG9zZUluT2JzZXJ2ZXJGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnJlcGVhdGVkRmllbGRzXyA9IFsxLDJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG9ic3RhY2xlc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE9ic3RhY2xlc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpLFxuICAgIHRyYW5zZm9ybXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRUcmFuc2Zvcm1zTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRPYnN0YWNsZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkVHJhbnNmb3Jtcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0T2JzdGFjbGVzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRUcmFuc2Zvcm1zTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBHZW9tZXRyaWVzSW5GcmFtZSBvYnN0YWNsZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5nZXRPYnN0YWNsZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5zZXRPYnN0YWNsZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9tZXRyaWVzSW5GcmFtZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb21ldHJpZXNJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLmFkZE9ic3RhY2xlcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvbWV0cmllc0luRnJhbWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlLnByb3RvdHlwZS5jbGVhck9ic3RhY2xlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T2JzdGFjbGVzTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgVHJhbnNmb3JtIHRyYW5zZm9ybXMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3Jtc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUucHJvdG90eXBlLnNldFRyYW5zZm9ybXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm09fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuYWRkVHJhbnNmb3JtcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZS5wcm90b3R5cGUuY2xlYXJUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRUcmFuc2Zvcm1zTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxKTtcbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLkpvaW50VHlwZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24gPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24ucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBvc2U6IChmID0gbXNnLmdldFBvc2UoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0UG9zZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRFbmRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2UoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlIHBvc2UgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2UsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldFBvc2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEVuZFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQb3NlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0RW5kUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzUG9zZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24ucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb259IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24udG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBhcmFtZXRlcnNMaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICBqb2ludFR5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ufSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZERvdWJsZSgpIDogW3JlYWRlci5yZWFkRG91YmxlKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQYXJhbWV0ZXJzKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLkpvaW50VHlwZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRKb2ludFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQYXJhbWV0ZXJzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEpvaW50VHlwZSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRW51bShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uSm9pbnRUeXBlID0ge1xuICBKT0lOVF9UWVBFX1VOU1BFQ0lGSUVEOiAwLFxuICBKT0lOVF9UWVBFX1JFVk9MVVRFOiAxLFxuICBKT0lOVF9UWVBFX1BSSVNNQVRJQzogMlxufTtcblxuLyoqXG4gKiByZXBlYXRlZCBkb3VibGUgcGFyYW1ldGVycyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGbG9hdGluZ1BvaW50RmllbGQodGhpcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PG51bWJlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24ucHJvdG90eXBlLnNldFBhcmFtZXRlcnNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnByb3RvdHlwZS5hZGRQYXJhbWV0ZXJzID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5wcm90b3R5cGUuY2xlYXJQYXJhbWV0ZXJzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQYXJhbWV0ZXJzTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgSm9pbnRUeXBlIGpvaW50X3R5cGUgPSAyO1xuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uSm9pbnRUeXBlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnByb3RvdHlwZS5nZXRKb2ludFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uSm9pbnRUeXBlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uSm9pbnRUeXBlfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnByb3RvdHlwZS5zZXRKb2ludFR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgZGVncmVlc0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZERlZ3JlZXModmFsdWVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldERlZ3JlZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVQYWNrZWREb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBkb3VibGUgZGVncmVlcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmdldERlZ3JlZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLnNldERlZ3JlZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmFkZERlZ3JlZXMgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMucHJvdG90eXBlLmNsZWFyRGVncmVlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGVncmVlc0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsyXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb25EZWdzOiAoZiA9IG1zZy5nZXRQb3NpdGlvbkRlZ3MoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBqb2ludFBvc2l0aW9uc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEpvaW50UG9zaXRpb25zTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24udG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFBvc2l0aW9uRGVncyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkSm9pbnRQb3NpdGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRQb3NpdGlvbkRlZ3MoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRKb2ludFBvc2l0aW9uc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBKb2ludFBvc2l0aW9ucyBwb3NpdGlvbl9kZWdzID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25EZWdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRQb3NpdGlvbkRlZ3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyUG9zaXRpb25EZWdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2l0aW9uRGVncyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UucHJvdG90eXBlLmhhc1Bvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgSm9pbnRQb3NpdGlvbiBqb2ludF9wb3NpdGlvbnMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0Sm9pbnRQb3NpdGlvbnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2UucHJvdG90eXBlLnNldEpvaW50UG9zaXRpb25zTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb249fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuR2V0Sm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuYWRkSm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkdldEpvaW50UG9zaXRpb25zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckpvaW50UG9zaXRpb25zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRKb2ludFBvc2l0aW9uc0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICB0bzogKGYgPSBtc2cuZ2V0VG8oKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHdvcmxkU3RhdGU6IChmID0gbXNnLmdldFdvcmxkU3RhdGUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0VG8odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFdvcmxkU3RhdGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRUbygpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0V29ybGRTdGF0ZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlIHRvID0gMjtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0VG8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0VG8gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclRvID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFRvKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNUbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlIHdvcmxkX3N0YXRlID0gMztcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0V29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRXb3JsZFN0YXRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFdvcmxkU3RhdGUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmhhc1dvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAzKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXyA9IFszXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvc2l0aW9uRGVnczogKGYgPSBtc2cuZ2V0UG9zaXRpb25EZWdzKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgam9pbnRQb3NpdGlvbnNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRKb2ludFBvc2l0aW9uc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvbkRlZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEpvaW50UG9zaXRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb25EZWdzKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Sm9pbnRQb3NpdGlvbnNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEpvaW50UG9zaXRpb25zIHBvc2l0aW9uX2RlZ3MgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmdldFBvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbnMsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uc3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLnNldFBvc2l0aW9uRGVncyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmNsZWFyUG9zaXRpb25EZWdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2l0aW9uRGVncyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUuaGFzUG9zaXRpb25EZWdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBKb2ludFBvc2l0aW9uIGpvaW50X3Bvc2l0aW9ucyA9IDM7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb24+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmdldEpvaW50UG9zaXRpb25zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbiwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9uPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVxdWVzdC5wcm90b3R5cGUuc2V0Sm9pbnRQb3NpdGlvbnNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbj19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmFkZEpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDMsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuSm9pbnRQb3NpdGlvbiwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1JlcXVlc3QucHJvdG90eXBlLmNsZWFySm9pbnRQb3NpdGlvbnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEpvaW50UG9zaXRpb25zTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLk1vdmVUb0pvaW50UG9zaXRpb25zUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGVuZFBvc2l0aW9uOiAoZiA9IG1zZy5nZXRFbmRQb3NpdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgam9pbnRQb3NpdGlvbnM6IChmID0gbXNnLmdldEpvaW50UG9zaXRpb25zKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2U7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEVuZFBvc2l0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEpvaW50UG9zaXRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRFbmRQb3NpdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Sm9pbnRQb3NpdGlvbnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAyLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuUG9zZSBlbmRfcG9zaXRpb24gPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5nZXRFbmRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2UsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2V8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5zZXRFbmRQb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyRW5kUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RW5kUG9zaXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmhhc0VuZFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBKb2ludFBvc2l0aW9ucyBqb2ludF9wb3NpdGlvbnMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXMucHJvdG90eXBlLmdldEpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5Kb2ludFBvc2l0aW9ucywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkpvaW50UG9zaXRpb25zfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0Sm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5jbGVhckpvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEpvaW50UG9zaXRpb25zKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5hcm0udjEuU3RhdHVzLnByb3RvdHlwZS5oYXNKb2ludFBvc2l0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmFybS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmFybS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBBcm1TZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXJtU2VydmljZSgpIHt9XG4gIEFybVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuYXJtLnYxLkFybVNlcnZpY2VcIjtcbiAgcmV0dXJuIEFybVNlcnZpY2U7XG59KCkpO1xuXG5Bcm1TZXJ2aWNlLkdldEVuZFBvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldEVuZFBvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuR2V0RW5kUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5HZXRFbmRQb3NpdGlvblJlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb1Bvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLkdldEpvaW50UG9zaXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIkdldEpvaW50UG9zaXRpb25zXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuR2V0Sm9pbnRQb3NpdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5HZXRKb2ludFBvc2l0aW9uc1Jlc3BvbnNlXG59O1xuXG5Bcm1TZXJ2aWNlLk1vdmVUb0pvaW50UG9zaXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb0pvaW50UG9zaXRpb25zXCIsXG4gIHNlcnZpY2U6IEFybVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2FybV92MV9hcm1fcGIuTW92ZVRvSm9pbnRQb3NpdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYXJtX3YxX2FybV9wYi5Nb3ZlVG9Kb2ludFBvc2l0aW9uc1Jlc3BvbnNlXG59O1xuXG5leHBvcnRzLkFybVNlcnZpY2UgPSBBcm1TZXJ2aWNlO1xuXG5mdW5jdGlvbiBBcm1TZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RW5kUG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFbmRQb3NpdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5HZXRFbmRQb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUubW92ZVRvUG9zaXRpb24gPSBmdW5jdGlvbiBtb3ZlVG9Qb3NpdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5Nb3ZlVG9Qb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0Sm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbiBnZXRKb2ludFBvc2l0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5HZXRKb2ludFBvc2l0aW9ucywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQXJtU2VydmljZUNsaWVudC5wcm90b3R5cGUubW92ZVRvSm9pbnRQb3NpdGlvbnMgPSBmdW5jdGlvbiBtb3ZlVG9Kb2ludFBvc2l0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQXJtU2VydmljZS5Nb3ZlVG9Kb2ludFBvc2l0aW9ucywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5Bcm1TZXJ2aWNlQ2xpZW50ID0gQXJtU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2Jhc2UvdjEvYmFzZS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGRpc3RhbmNlTW06IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMCksXG4gICAgbW1QZXJTZWM6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMCksXG4gICAgYmxvY2s6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDQsIGZhbHNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0RGlzdGFuY2VNbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE1tUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRCbG9jayh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGlzdGFuY2VNbSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1tUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QmxvY2soKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgNCxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IGRpc3RhbmNlX21tID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLmdldERpc3RhbmNlTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLnNldERpc3RhbmNlTW0gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgbW1fcGVyX3NlYyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXF1ZXN0LnByb3RvdHlwZS5nZXRNbVBlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0TW1QZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgYmxvY2sgPSA0O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3QucHJvdG90eXBlLmdldEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVxdWVzdC5wcm90b3R5cGUuc2V0QmxvY2sgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZVN0cmFpZ2h0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVTdHJhaWdodFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlU3RyYWlnaHRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZGlzdGFuY2VNbToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwKSxcbiAgICBtbVBlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKSxcbiAgICBhbmdsZURlZzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgMC4wKSxcbiAgICBibG9jazoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0RGlzdGFuY2VNbSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldE1tUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0QW5nbGVEZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEJsb2NrKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGlzdGFuY2VNbSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1tUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5nbGVEZWcoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDQsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCbG9jaygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA1LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgZGlzdGFuY2VfbW0gPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1JlcXVlc3QucHJvdG90eXBlLmdldERpc3RhbmNlTW0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0RGlzdGFuY2VNbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBtbV9wZXJfc2VjID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5nZXRNbVBlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5zZXRNbVBlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGFuZ2xlX2RlZyA9IDQ7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5nbGVEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDQsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgNCwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgYmxvY2sgPSA1O1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXF1ZXN0LnByb3RvdHlwZS5nZXRCbG9jayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDUsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVxdWVzdC5wcm90b3R5cGUuc2V0QmxvY2sgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCA1LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuTW92ZUFyY1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5Nb3ZlQXJjUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLk1vdmVBcmNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgYW5nbGVEZWc6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgZGVnc1BlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKSxcbiAgICBibG9jazoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgNCwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldEFuZ2xlRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0RGVnc1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChyZWFkZXIucmVhZEJvb2woKSk7XG4gICAgICBtc2cuc2V0QmxvY2sodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBbmdsZURlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERlZ3NQZXJTZWMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRCbG9jaygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIGFuZ2xlX2RlZyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5nbGVEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkZWdzX3Blcl9zZWMgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLmdldERlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVxdWVzdC5wcm90b3R5cGUuc2V0RGVnc1BlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBibG9jayA9IDQ7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlcXVlc3QucHJvdG90eXBlLmdldEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgNCwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXF1ZXN0LnByb3RvdHlwZS5zZXRCbG9jayA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TcGluUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlNwaW5SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3BpblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5TdG9wUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxLlN0b3BSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJhc2UudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5iYXNlLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9iYXNlL3YxL2Jhc2UucHJvdG9cblxudmFyIHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBCYXNlU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJhc2VTZXJ2aWNlKCkge31cbiAgQmFzZVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuYmFzZS52MS5CYXNlU2VydmljZVwiO1xuICByZXR1cm4gQmFzZVNlcnZpY2U7XG59KCkpO1xuXG5CYXNlU2VydmljZS5Nb3ZlU3RyYWlnaHQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiTW92ZVN0cmFpZ2h0XCIsXG4gIHNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZVN0cmFpZ2h0UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5Nb3ZlU3RyYWlnaHRSZXNwb25zZVxufTtcblxuQmFzZVNlcnZpY2UuTW92ZUFyYyA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlQXJjXCIsXG4gIHNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZUFyY1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9iYXNlX3YxX2Jhc2VfcGIuTW92ZUFyY1Jlc3BvbnNlXG59O1xuXG5CYXNlU2VydmljZS5TcGluID0ge1xuICBtZXRob2ROYW1lOiBcIlNwaW5cIixcbiAgc2VydmljZTogQmFzZVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5TcGluUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2Jhc2VfdjFfYmFzZV9wYi5TcGluUmVzcG9uc2Vcbn07XG5cbkJhc2VTZXJ2aWNlLlN0b3AgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU3RvcFwiLFxuICBzZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiLlN0b3BSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYmFzZV92MV9iYXNlX3BiLlN0b3BSZXNwb25zZVxufTtcblxuZXhwb3J0cy5CYXNlU2VydmljZSA9IEJhc2VTZXJ2aWNlO1xuXG5mdW5jdGlvbiBCYXNlU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbkJhc2VTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5tb3ZlU3RyYWlnaHQgPSBmdW5jdGlvbiBtb3ZlU3RyYWlnaHQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJhc2VTZXJ2aWNlLk1vdmVTdHJhaWdodCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQmFzZVNlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmVBcmMgPSBmdW5jdGlvbiBtb3ZlQXJjKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCYXNlU2VydmljZS5Nb3ZlQXJjLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5CYXNlU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3BpbiA9IGZ1bmN0aW9uIHNwaW4ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJhc2VTZXJ2aWNlLlNwaW4sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJhc2VTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQmFzZVNlcnZpY2UuU3RvcCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5CYXNlU2VydmljZUNsaWVudCA9IEJhc2VTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmQucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGF0dXM6IChmID0gbXNnLmdldFN0YXR1cygpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Cb2FyZFN0YXR1cy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXM7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRTdGF0dXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdGF0dXMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkJvYXJkU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuQm9hcmRTdGF0dXMgc3RhdHVzID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGF0dXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Cb2FyZFN0YXR1c30gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuQm9hcmRTdGF0dXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkJvYXJkU3RhdHVzfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TdGF0dXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyU3RhdHVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXR1cyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmhhc1N0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwaW46IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIiksXG4gICAgaGlnaDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRQaW4odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEhpZ2godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0SGlnaCgpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLmdldFBpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgaGlnaCA9IDM7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXRIaWdoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1JlcXVlc3QucHJvdG90eXBlLnNldEhpZ2ggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0R1BJT1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRHUElPUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldEdQSU9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBpbjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBpbigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaW4gPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5nZXRQaW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXF1ZXN0LnByb3RvdHlwZS5zZXRQaW4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaGlnaDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldEhpZ2godmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SGlnaCgpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGhpZ2ggPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXRHUElPUmVzcG9uc2UucHJvdG90eXBlLmdldEhpZ2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldEdQSU9SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0R1BJT1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRIaWdoID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBwaW46IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGR1dHlDeWNsZVBjdDoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXREdXR5Q3ljbGVQY3QodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXREdXR5Q3ljbGVQY3QoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkdXR5X2N5Y2xlX3BjdCA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLmdldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNUmVzcG9uc2UucHJvdG90eXBlLnNldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBpbjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBkdXR5Q3ljbGVQY3Q6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0UGluKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0RHV0eUN5Y2xlUGN0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RHV0eUN5Y2xlUGN0KCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBkdXR5X2N5Y2xlX3BjdCA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVxdWVzdC5wcm90b3R5cGUuZ2V0RHV0eUN5Y2xlUGN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlcXVlc3QucHJvdG90eXBlLnNldER1dHlDeWNsZVBjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcGluOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBpbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBpbigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBwaW4gPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldFBpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXRQaW4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBmcmVxdWVuY3lIejoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZFVpbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRGcmVxdWVuY3lIeih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEZyZXF1ZW5jeUh6KCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDY0KFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDY0IGZyZXF1ZW5jeV9oeiA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUFdNRnJlcXVlbmN5UmVzcG9uc2UucHJvdG90eXBlLmdldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlBXTUZyZXF1ZW5jeVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5QV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUuc2V0RnJlcXVlbmN5SHogPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcGluOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGZyZXF1ZW5jeUh6OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFBpbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDY0KCkpO1xuICAgICAgbXNnLnNldEZyZXF1ZW5jeUh6KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UGluKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RnJlcXVlbmN5SHooKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50NjQoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHBpbiA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVxdWVzdC5wcm90b3R5cGUuZ2V0UGluID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnNldFBpbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHVpbnQ2NCBmcmVxdWVuY3lfaHogPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLmdldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QucHJvdG90eXBlLnNldEZyZXF1ZW5jeUh6ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlNldFBXTUZyZXF1ZW5jeVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuU2V0UFdNRnJlcXVlbmN5UmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5TZXRQV01GcmVxdWVuY3lSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBib2FyZE5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgYW5hbG9nUmVhZGVyTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRCb2FyZE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRBbmFsb2dSZWFkZXJOYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Qm9hcmROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5hbG9nUmVhZGVyTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGJvYXJkX25hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRCb2FyZE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXRCb2FyZE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgYW5hbG9nX3JlYWRlcl9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdC5wcm90b3R5cGUuZ2V0QW5hbG9nUmVhZGVyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlcXVlc3QucHJvdG90eXBlLnNldEFuYWxvZ1JlYWRlck5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50MzIoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VmFsdWUoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVJbnQzMihcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDMyIHZhbHVlID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5SZWFkQW5hbG9nUmVhZGVyUmVzcG9uc2UucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLlJlYWRBbmFsb2dSZWFkZXJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgYm9hcmROYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGRpZ2l0YWxJbnRlcnJ1cHROYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Qm9hcmROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RGlnaXRhbEludGVycnVwdE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEJvYXJkTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldERpZ2l0YWxJbnRlcnJ1cHROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgYm9hcmRfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Qm9hcmROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QucHJvdG90eXBlLnNldEJvYXJkTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBkaWdpdGFsX2ludGVycnVwdF9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0LnByb3RvdHlwZS5nZXREaWdpdGFsSW50ZXJydXB0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXF1ZXN0LnByb3RvdHlwZS5zZXREaWdpdGFsSW50ZXJydXB0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHZhbHVlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkSW50NjQoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRWYWx1ZSgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgaW50NjQgdmFsdWUgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ib2FyZC52MS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjEuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlUmVzcG9uc2UucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuYm9hcmQudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmQucHJvdG9cblxudmFyIHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9ib2FyZC92MS9ib2FyZF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgQm9hcmRTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQm9hcmRTZXJ2aWNlKCkge31cbiAgQm9hcmRTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmJvYXJkLnYxLkJvYXJkU2VydmljZVwiO1xuICByZXR1cm4gQm9hcmRTZXJ2aWNlO1xufSgpKTtcblxuQm9hcmRTZXJ2aWNlLlN0YXR1cyA9IHtcbiAgbWV0aG9kTmFtZTogXCJTdGF0dXNcIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TdGF0dXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuU3RhdHVzUmVzcG9uc2Vcbn07XG5cbkJvYXJkU2VydmljZS5TZXRHUElPID0ge1xuICBtZXRob2ROYW1lOiBcIlNldEdQSU9cIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRHUElPUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlNldEdQSU9SZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLkdldEdQSU8gPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0R1BJT1wiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLkdldEdQSU9SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuR2V0R1BJT1Jlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuUFdNID0ge1xuICBtZXRob2ROYW1lOiBcIlBXTVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlBXTVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5QV01SZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLlNldFBXTSA9IHtcbiAgbWV0aG9kTmFtZTogXCJTZXRQV01cIixcbiAgc2VydmljZTogQm9hcmRTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRQV01SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuU2V0UFdNUmVzcG9uc2Vcbn07XG5cbkJvYXJkU2VydmljZS5QV01GcmVxdWVuY3kgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUFdNRnJlcXVlbmN5XCIsXG4gIHNlcnZpY2U6IEJvYXJkU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuUFdNRnJlcXVlbmN5UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlBXTUZyZXF1ZW5jeVJlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuU2V0UFdNRnJlcXVlbmN5ID0ge1xuICBtZXRob2ROYW1lOiBcIlNldFBXTUZyZXF1ZW5jeVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlNldFBXTUZyZXF1ZW5jeVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5TZXRQV01GcmVxdWVuY3lSZXNwb25zZVxufTtcblxuQm9hcmRTZXJ2aWNlLlJlYWRBbmFsb2dSZWFkZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZEFuYWxvZ1JlYWRlclwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLlJlYWRBbmFsb2dSZWFkZXJSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfYm9hcmRfdjFfYm9hcmRfcGIuUmVhZEFuYWxvZ1JlYWRlclJlc3BvbnNlXG59O1xuXG5Cb2FyZFNlcnZpY2UuR2V0RGlnaXRhbEludGVycnVwdFZhbHVlID0ge1xuICBtZXRob2ROYW1lOiBcIkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVwiLFxuICBzZXJ2aWNlOiBCb2FyZFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2JvYXJkX3YxX2JvYXJkX3BiLkdldERpZ2l0YWxJbnRlcnJ1cHRWYWx1ZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ib2FyZF92MV9ib2FyZF9wYi5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWVSZXNwb25zZVxufTtcblxuZXhwb3J0cy5Cb2FyZFNlcnZpY2UgPSBCb2FyZFNlcnZpY2U7XG5cbmZ1bmN0aW9uIEJvYXJkU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3RhdHVzID0gZnVuY3Rpb24gc3RhdHVzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU3RhdHVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldEdQSU8gPSBmdW5jdGlvbiBzZXRHUElPKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU2V0R1BJTywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRHUElPID0gZnVuY3Rpb24gZ2V0R1BJTyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQm9hcmRTZXJ2aWNlLkdldEdQSU8sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUucFdNID0gZnVuY3Rpb24gcFdNKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuUFdNLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldFBXTSA9IGZ1bmN0aW9uIHNldFBXTShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQm9hcmRTZXJ2aWNlLlNldFBXTSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5wV01GcmVxdWVuY3kgPSBmdW5jdGlvbiBwV01GcmVxdWVuY3kocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJvYXJkU2VydmljZS5QV01GcmVxdWVuY3ksIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkJvYXJkU2VydmljZUNsaWVudC5wcm90b3R5cGUuc2V0UFdNRnJlcXVlbmN5ID0gZnVuY3Rpb24gc2V0UFdNRnJlcXVlbmN5KHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuU2V0UFdNRnJlcXVlbmN5LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Cb2FyZFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlYWRBbmFsb2dSZWFkZXIgPSBmdW5jdGlvbiByZWFkQW5hbG9nUmVhZGVyKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShCb2FyZFNlcnZpY2UuUmVhZEFuYWxvZ1JlYWRlciwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuQm9hcmRTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXREaWdpdGFsSW50ZXJydXB0VmFsdWUgPSBmdW5jdGlvbiBnZXREaWdpdGFsSW50ZXJydXB0VmFsdWUocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEJvYXJkU2VydmljZS5HZXREaWdpdGFsSW50ZXJydXB0VmFsdWUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuQm9hcmRTZXJ2aWNlQ2xpZW50ID0gQm9hcmRTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvY2FtZXJhL3YxL2NhbWVyYS5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbnZhciBnb29nbGVfYXBpX2h0dHBib2R5X3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9odHRwYm9keV9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2h0dHBib2R5X3BiKTtcbnZhciBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21tb24vdjEvY29tbW9uX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGltYWdlOiBtc2cuZ2V0SW1hZ2VfYXNCNjQoKSxcbiAgICB3aWR0aFB4OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDMsIDApLFxuICAgIGhlaWdodFB4OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChyZWFkZXIucmVhZEJ5dGVzKCkpO1xuICAgICAgbXNnLnNldEltYWdlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRXaWR0aFB4KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRJbnQ2NCgpKTtcbiAgICAgIG1zZy5zZXRIZWlnaHRQeCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1pbWVUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0SW1hZ2VfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0V2lkdGhQeCgpO1xuICBpZiAoZiAhPT0gMCkge1xuICAgIHdyaXRlci53cml0ZUludDY0KFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEhlaWdodFB4KCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlSW50NjQoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGltYWdlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIGltYWdlID0gMjtcbiAqIFRoaXMgaXMgYSB0eXBlLWNvbnZlcnNpb24gd3JhcHBlciBhcm91bmQgYGdldEltYWdlKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLmdldEltYWdlX2FzQjY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KFxuICAgICAgdGhpcy5nZXRJbWFnZSgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgaW1hZ2UgPSAyO1xuICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgYnJvd3NlcnMuXG4gKiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRJbWFnZSgpYFxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLmdldEltYWdlX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXRJbWFnZSgpKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshKHN0cmluZ3xVaW50OEFycmF5KX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuc2V0SW1hZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGludDY0IHdpZHRoX3B4ID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZS5wcm90b3R5cGUuZ2V0V2lkdGhQeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNldFdpZHRoUHggPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBpbnQ2NCBoZWlnaHRfcHggPSA0O1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRGcmFtZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRIZWlnaHRQeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0RnJhbWVSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldEZyYW1lUmVzcG9uc2UucHJvdG90eXBlLnNldEhlaWdodFB4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLlJlbmRlckZyYW1lUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE1pbWVUeXBlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5SZW5kZXJGcmFtZVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuUmVuZGVyRnJhbWVSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWltZVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE1pbWVUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG1pbWVfdHlwZSA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXF1ZXN0LnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVxdWVzdC5wcm90b3R5cGUuc2V0TWltZVR5cGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1pbWVUeXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvaW50Q2xvdWQ6IG1zZy5nZXRQb2ludENsb3VkX2FzQjY0KClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRNaW1lVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFVaW50OEFycmF5fSAqLyAocmVhZGVyLnJlYWRCeXRlcygpKTtcbiAgICAgIG1zZy5zZXRQb2ludENsb3VkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5HZXRQb2ludENsb3VkUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNaW1lVHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvaW50Q2xvdWRfYXNVOCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlQnl0ZXMoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJ5dGVzIHBvaW50X2Nsb3VkID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb2ludENsb3VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBieXRlcyBwb2ludF9jbG91ZCA9IDI7XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRQb2ludENsb3VkKClgXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9pbnRDbG91ZF9hc0I2NCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NChcbiAgICAgIHRoaXMuZ2V0UG9pbnRDbG91ZCgpKSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYnl0ZXMgcG9pbnRfY2xvdWQgPSAyO1xuICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgYnJvd3NlcnMuXG4gKiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5XG4gKiBUaGlzIGlzIGEgdHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXRQb2ludENsb3VkKClgXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5jYW1lcmEudjEuR2V0UG9pbnRDbG91ZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb2ludENsb3VkX2FzVTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KFxuICAgICAgdGhpcy5nZXRQb2ludENsb3VkKCkpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyEoc3RyaW5nfFVpbnQ4QXJyYXkpfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuY2FtZXJhLnYxLkdldFBvaW50Q2xvdWRSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9pbnRDbG91ZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2NhbWVyYV92MV9jYW1lcmFfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiXCIpO1xudmFyIGdvb2dsZV9hcGlfaHR0cGJvZHlfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9odHRwYm9keV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgQ2FtZXJhU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbWVyYVNlcnZpY2UoKSB7fVxuICBDYW1lcmFTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmNhbWVyYS52MS5DYW1lcmFTZXJ2aWNlXCI7XG4gIHJldHVybiBDYW1lcmFTZXJ2aWNlO1xufSgpKTtcblxuQ2FtZXJhU2VydmljZS5HZXRGcmFtZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRGcmFtZVwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLkdldEZyYW1lUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2NhbWVyYV92MV9jYW1lcmFfcGIuR2V0RnJhbWVSZXNwb25zZVxufTtcblxuQ2FtZXJhU2VydmljZS5SZW5kZXJGcmFtZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZW5kZXJGcmFtZVwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLlJlbmRlckZyYW1lUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBnb29nbGVfYXBpX2h0dHBib2R5X3BiLkh0dHBCb2R5XG59O1xuXG5DYW1lcmFTZXJ2aWNlLkdldFBvaW50Q2xvdWQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0UG9pbnRDbG91ZFwiLFxuICBzZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9jYW1lcmFfdjFfY2FtZXJhX3BiLkdldFBvaW50Q2xvdWRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfY2FtZXJhX3YxX2NhbWVyYV9wYi5HZXRQb2ludENsb3VkUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuQ2FtZXJhU2VydmljZSA9IENhbWVyYVNlcnZpY2U7XG5cbmZ1bmN0aW9uIENhbWVyYVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRGcmFtZSA9IGZ1bmN0aW9uIGdldEZyYW1lKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShDYW1lcmFTZXJ2aWNlLkdldEZyYW1lLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZW5kZXJGcmFtZSA9IGZ1bmN0aW9uIHJlbmRlckZyYW1lKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShDYW1lcmFTZXJ2aWNlLlJlbmRlckZyYW1lLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5DYW1lcmFTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb2ludENsb3VkID0gZnVuY3Rpb24gZ2V0UG9pbnRDbG91ZChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoQ2FtZXJhU2VydmljZS5HZXRQb2ludENsb3VkLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkNhbWVyYVNlcnZpY2VDbGllbnQgPSBDYW1lcmFTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4LnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UnO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5yZXBlYXRlZEZpZWxkc18gPSBbM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByb3dzOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApLFxuICAgIGNvbHM6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMCksXG4gICAgZGF0YUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAzKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXguZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXh9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDMyKCkpO1xuICAgICAgbXNnLnNldFJvd3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZFVpbnQzMigpKTtcbiAgICAgIG1zZy5zZXRDb2xzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZFVpbnQzMigpIDogW3JlYWRlci5yZWFkVWludDMyKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGREYXRhKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSb3dzKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldENvbHMoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RGF0YUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZFVpbnQzMihcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHVpbnQzMiByb3dzID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmdldFJvd3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLnNldFJvd3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCB1aW50MzIgY29scyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5nZXRDb2xzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5zZXRDb2xzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgdWludDMyIGRhdGEgPSAzO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnByb3RvdHlwZS5nZXREYXRhTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLnNldERhdGFMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmFkZERhdGEgPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDMsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgucHJvdG90eXBlLmNsZWFyRGF0YUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGF0YUxpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbWF0cml4OiAoZiA9IG1zZy5nZXRNYXRyaXgoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5NYXRyaXgudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE1hdHJpeCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNYXRyaXgoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIE1hdHJpeCBtYXRyaXggPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWF0cml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLk1hdHJpeCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuTWF0cml4fHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5SZWFkTWF0cml4UmVzcG9uc2UucHJvdG90eXBlLnNldE1hdHJpeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuUmVhZE1hdHJpeFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhck1hdHJpeCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRNYXRyaXgodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLlJlYWRNYXRyaXhSZXNwb25zZS5wcm90b3R5cGUuaGFzTWF0cml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNsaXBEZXRlY3RlZDoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5mb3JjZW1hdHJpeC52MS5EZXRlY3RTbGlwUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFNsaXBEZXRlY3RlZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTbGlwRGV0ZWN0ZWQoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBzbGlwX2RldGVjdGVkID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5nZXRTbGlwRGV0ZWN0ZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkRldGVjdFNsaXBSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjEuRGV0ZWN0U2xpcFJlc3BvbnNlLnByb3RvdHlwZS5zZXRTbGlwRGV0ZWN0ZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuZm9yY2VtYXRyaXgudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4LnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L2ZvcmNlbWF0cml4L3YxL2ZvcmNlX21hdHJpeF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgRm9yY2VNYXRyaXhTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRm9yY2VNYXRyaXhTZXJ2aWNlKCkge31cbiAgRm9yY2VNYXRyaXhTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmZvcmNlbWF0cml4LnYxLkZvcmNlTWF0cml4U2VydmljZVwiO1xuICByZXR1cm4gRm9yY2VNYXRyaXhTZXJ2aWNlO1xufSgpKTtcblxuRm9yY2VNYXRyaXhTZXJ2aWNlLlJlYWRNYXRyaXggPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZE1hdHJpeFwiLFxuICBzZXJ2aWNlOiBGb3JjZU1hdHJpeFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYi5SZWFkTWF0cml4UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ZvcmNlbWF0cml4X3YxX2ZvcmNlX21hdHJpeF9wYi5SZWFkTWF0cml4UmVzcG9uc2Vcbn07XG5cbkZvcmNlTWF0cml4U2VydmljZS5EZXRlY3RTbGlwID0ge1xuICBtZXRob2ROYW1lOiBcIkRldGVjdFNsaXBcIixcbiAgc2VydmljZTogRm9yY2VNYXRyaXhTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9mb3JjZW1hdHJpeF92MV9mb3JjZV9tYXRyaXhfcGIuRGV0ZWN0U2xpcFJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9mb3JjZW1hdHJpeF92MV9mb3JjZV9tYXRyaXhfcGIuRGV0ZWN0U2xpcFJlc3BvbnNlXG59O1xuXG5leHBvcnRzLkZvcmNlTWF0cml4U2VydmljZSA9IEZvcmNlTWF0cml4U2VydmljZTtcblxuZnVuY3Rpb24gRm9yY2VNYXRyaXhTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuRm9yY2VNYXRyaXhTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkTWF0cml4ID0gZnVuY3Rpb24gcmVhZE1hdHJpeChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoRm9yY2VNYXRyaXhTZXJ2aWNlLlJlYWRNYXRyaXgsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbkZvcmNlTWF0cml4U2VydmljZUNsaWVudC5wcm90b3R5cGUuZGV0ZWN0U2xpcCA9IGZ1bmN0aW9uIGRldGVjdFNsaXAocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEZvcmNlTWF0cml4U2VydmljZS5EZXRlY3RTbGlwLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkZvcmNlTWF0cml4U2VydmljZUNsaWVudCA9IEZvcmNlTWF0cml4U2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2dhbnRyeS92MS9nYW50cnkucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cycsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cyc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb25zTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFBvc2l0aW9uc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZG91YmxlIHBvc2l0aW9uc19tbSA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLmFkZFBvc2l0aW9uc01tID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcG9zaXRpb25zTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDIpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZixcbiAgICB3b3JsZFN0YXRlOiAoZiA9IG1zZy5nZXRXb3JsZFN0YXRlKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZFBvc2l0aW9uc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0V29ybGRTdGF0ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdvcmxkU3RhdGUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGRvdWJsZSBwb3NpdGlvbnNfbW0gPSAyO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuYWRkUG9zaXRpb25zTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDIsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLldvcmxkU3RhdGUgd29ybGRfc3RhdGUgPSAzO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldFdvcmxkU3RhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhcldvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0V29ybGRTdGF0ZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuaGFzV29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLk1vdmVUb1Bvc2l0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuTW92ZVRvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBsZW5ndGhzTW1MaXN0OiAoZiA9IGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWVzID0gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKHJlYWRlci5pc0RlbGltaXRlZCgpID8gcmVhZGVyLnJlYWRQYWNrZWREb3VibGUoKSA6IFtyZWFkZXIucmVhZERvdWJsZSgpXSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtc2cuYWRkTGVuZ3Roc01tKHZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TGVuZ3Roc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZG91YmxlIGxlbmd0aHNfbW0gPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0TGVuZ3Roc01tTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8bnVtYmVyPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZCh0aGlzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8bnVtYmVyPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5HZXRMZW5ndGhzUmVzcG9uc2UucHJvdG90eXBlLnNldExlbmd0aHNNbUxpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDEsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuR2V0TGVuZ3Roc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRMZW5ndGhzTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdldExlbmd0aHNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJMZW5ndGhzTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldExlbmd0aHNNbUxpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5yZXBlYXRlZEZpZWxkc18gPSBbMSwyXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb3NpdGlvbnNNbUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMSkpID09IG51bGwgPyB1bmRlZmluZWQgOiBmLFxuICAgIGxlbmd0aHNNbUxpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKG1zZywgMikpID09IG51bGwgPyB1bmRlZmluZWQgOiBmXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZXMgPSAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAocmVhZGVyLmlzRGVsaW1pdGVkKCkgPyByZWFkZXIucmVhZFBhY2tlZERvdWJsZSgpIDogW3JlYWRlci5yZWFkRG91YmxlKCldKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1zZy5hZGRQb3NpdGlvbnNNbSh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlcyA9IC8qKiBAdHlwZSB7IUFycmF5PG51bWJlcj59ICovIChyZWFkZXIuaXNEZWxpbWl0ZWQoKSA/IHJlYWRlci5yZWFkUGFja2VkRG91YmxlKCkgOiBbcmVhZGVyLnJlYWREb3VibGUoKV0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXNnLmFkZExlbmd0aHNNbSh2YWx1ZXNbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uc01tTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUGFja2VkRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldExlbmd0aHNNbUxpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVBhY2tlZERvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIGRvdWJsZSBwb3NpdGlvbnNfbW0gPSAxO1xuICogQHJldHVybiB7IUFycmF5PG51bWJlcj59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0UG9zaXRpb25zTW1MaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuYWRkUG9zaXRpb25zTW0gPSBmdW5jdGlvbih2YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsIDEsIHZhbHVlLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuY2xlYXJQb3NpdGlvbnNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UG9zaXRpb25zTW1MaXN0KFtdKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBkb3VibGUgbGVuZ3Roc19tbSA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8bnVtYmVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS5nZXRMZW5ndGhzTW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxudW1iZXI+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKHRoaXMsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxudW1iZXI+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0TGVuZ3Roc01tTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMiwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MS5TdGF0dXMucHJvdG90eXBlLmFkZExlbmd0aHNNbSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5nYW50cnkudjEuU3RhdHVzLnByb3RvdHlwZS5jbGVhckxlbmd0aHNNbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TGVuZ3Roc01tTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuY29tcG9uZW50LmdhbnRyeS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5LnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9nYW50cnkvdjEvZ2FudHJ5X3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBHYW50cnlTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2FudHJ5U2VydmljZSgpIHt9XG4gIEdhbnRyeVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuZ2FudHJ5LnYxLkdhbnRyeVNlcnZpY2VcIjtcbiAgcmV0dXJuIEdhbnRyeVNlcnZpY2U7XG59KCkpO1xuXG5HYW50cnlTZXJ2aWNlLkdldFBvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFBvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEdhbnRyeVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIuR2V0UG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5HZXRQb3NpdGlvblJlc3BvbnNlXG59O1xuXG5HYW50cnlTZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIk1vdmVUb1Bvc2l0aW9uXCIsXG4gIHNlcnZpY2U6IEdhbnRyeVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2dhbnRyeV92MV9nYW50cnlfcGIuTW92ZVRvUG9zaXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5Nb3ZlVG9Qb3NpdGlvblJlc3BvbnNlXG59O1xuXG5HYW50cnlTZXJ2aWNlLkdldExlbmd0aHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0TGVuZ3Roc1wiLFxuICBzZXJ2aWNlOiBHYW50cnlTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9nYW50cnlfdjFfZ2FudHJ5X3BiLkdldExlbmd0aHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ2FudHJ5X3YxX2dhbnRyeV9wYi5HZXRMZW5ndGhzUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuR2FudHJ5U2VydmljZSA9IEdhbnRyeVNlcnZpY2U7XG5cbmZ1bmN0aW9uIEdhbnRyeVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHYW50cnlTZXJ2aWNlLkdldFBvc2l0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5tb3ZlVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uIG1vdmVUb1Bvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHYW50cnlTZXJ2aWNlLk1vdmVUb1Bvc2l0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HYW50cnlTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRMZW5ndGhzID0gZnVuY3Rpb24gZ2V0TGVuZ3RocyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoR2FudHJ5U2VydmljZS5HZXRMZW5ndGhzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLkdhbnRyeVNlcnZpY2VDbGllbnQgPSBHYW50cnlTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvZ3JpcHBlci92MS9ncmlwcGVyLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLk9wZW5SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuT3BlblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5PcGVuUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN1Y2Nlc3M6IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEsIGZhbHNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFN1Y2Nlc3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdWNjZXNzKCk7XG4gIGlmIChmKSB7XG4gICAgd3JpdGVyLndyaXRlQm9vbChcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGJvb2wgc3VjY2VzcyA9IDE7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEuR3JhYlJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyYWJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuZ3JpcHBlci52MS5HcmFiUmVzcG9uc2UucHJvdG90eXBlLnNldFN1Y2Nlc3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmdyaXBwZXIudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvY29tcG9uZW50L2dyaXBwZXIvdjEvZ3JpcHBlci5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbXBvbmVudC9ncmlwcGVyL3YxL2dyaXBwZXJfcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIEdyaXBwZXJTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR3JpcHBlclNlcnZpY2UoKSB7fVxuICBHcmlwcGVyU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLmNvbXBvbmVudC5ncmlwcGVyLnYxLkdyaXBwZXJTZXJ2aWNlXCI7XG4gIHJldHVybiBHcmlwcGVyU2VydmljZTtcbn0oKSk7XG5cbkdyaXBwZXJTZXJ2aWNlLk9wZW4gPSB7XG4gIG1ldGhvZE5hbWU6IFwiT3BlblwiLFxuICBzZXJ2aWNlOiBHcmlwcGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ3JpcHBlcl92MV9ncmlwcGVyX3BiLk9wZW5SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfZ3JpcHBlcl92MV9ncmlwcGVyX3BiLk9wZW5SZXNwb25zZVxufTtcblxuR3JpcHBlclNlcnZpY2UuR3JhYiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHcmFiXCIsXG4gIHNlcnZpY2U6IEdyaXBwZXJTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIuR3JhYlJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9ncmlwcGVyX3YxX2dyaXBwZXJfcGIuR3JhYlJlc3BvbnNlXG59O1xuXG5leHBvcnRzLkdyaXBwZXJTZXJ2aWNlID0gR3JpcHBlclNlcnZpY2U7XG5cbmZ1bmN0aW9uIEdyaXBwZXJTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuR3JpcHBlclNlcnZpY2VDbGllbnQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiBvcGVuKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShHcmlwcGVyU2VydmljZS5PcGVuLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5HcmlwcGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ3JhYiA9IGZ1bmN0aW9uIGdyYWIocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KEdyaXBwZXJTZXJ2aWNlLkdyYWIsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuR3JpcHBlclNlcnZpY2VDbGllbnQgPSBHcmlwcGVyU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvY29tcG9uZW50L2ltdS92MS9pbXUucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHknLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXInLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbiwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlciA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHhEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIHlEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHpEZWdzUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WERlZ3NQZXJTZWModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRZRGVnc1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFpEZWdzUGVyU2VjKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRYRGVnc1BlclNlYygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFlEZWdzUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WkRlZ3NQZXJTZWMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4X2RlZ3NfcGVyX3NlYyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WERlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WERlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5X2RlZ3NfcGVyX3NlYyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WURlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WURlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB6X2RlZ3NfcGVyX3NlYyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuZ2V0WkRlZ3NQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5wcm90b3R5cGUuc2V0WkRlZ3NQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByb2xsRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwLjApLFxuICAgIHBpdGNoRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHlhd0RlZzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0Um9sbERlZyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFBpdGNoRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WWF3RGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJvbGxEZWcoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRQaXRjaERlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFlhd0RlZygpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJvbGxfZGVnID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLmdldFJvbGxEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFJvbGxEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBwaXRjaF9kZWcgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy5wcm90b3R5cGUuZ2V0UGl0Y2hEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFBpdGNoRGVnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeWF3X2RlZyA9IDM7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnByb3RvdHlwZS5nZXRZYXdEZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuRXVsZXJBbmdsZXMucHJvdG90eXBlLnNldFlhd0RlZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB4TW1QZXJTZWNQZXJTZWM6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMCksXG4gICAgeU1tUGVyU2VjUGVyU2VjOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHpNbVBlclNlY1BlclNlYzoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgMC4wKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb247XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFhNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFlNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkRG91YmxlKCkpO1xuICAgICAgbXNnLnNldFpNbVBlclNlY1BlclNlYyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0WE1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0WU1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Wk1tUGVyU2VjUGVyU2VjKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeF9tbV9wZXJfc2VjX3Blcl9zZWMgPSAxO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24ucHJvdG90eXBlLmdldFhNbVBlclNlY1BlclNlYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS5zZXRYTW1QZXJTZWNQZXJTZWMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB5X21tX3Blcl9zZWNfcGVyX3NlYyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuZ2V0WU1tUGVyU2VjUGVyU2VjID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb259IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb24ucHJvdG90eXBlLnNldFlNbVBlclNlY1BlclNlYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHpfbW1fcGVyX3NlY19wZXJfc2VjID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLnByb3RvdHlwZS5nZXRaTW1QZXJTZWNQZXJTZWMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5wcm90b3R5cGUuc2V0Wk1tUGVyU2VjUGVyU2VjID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHhHYXVzczoganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMC4wKSxcbiAgICB5R2F1c3M6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMCksXG4gICAgekdhdXNzOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WEdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WUdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0WkdhdXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRYR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRZR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRaR2F1c3MoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSB4X2dhdXNzID0gMTtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5nZXRYR2F1c3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5wcm90b3R5cGUuc2V0WEdhdXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgeV9nYXVzcyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5wcm90b3R5cGUuZ2V0WUdhdXNzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLnNldFlHYXVzcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHpfZ2F1c3MgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXIucHJvdG90eXBlLmdldFpHYXVzcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLnByb3RvdHlwZS5zZXRaR2F1c3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGFuZ3VsYXJWZWxvY2l0eTogKGYgPSBtc2cuZ2V0QW5ndWxhclZlbG9jaXR5KCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHk7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0QW5ndWxhclZlbG9jaXR5KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRBbmd1bGFyVmVsb2NpdHkoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBBbmd1bGFyVmVsb2NpdHkgYW5ndWxhcl92ZWxvY2l0eSA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQW5ndWxhclZlbG9jaXR5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLmdldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5Bbmd1bGFyVmVsb2NpdHl9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFuZ3VsYXJWZWxvY2l0eXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLnNldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQW5ndWxhclZlbG9jaXR5UmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEFuZ3VsYXJWZWxvY2l0eSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBbmd1bGFyVmVsb2NpdHlSZXNwb25zZS5wcm90b3R5cGUuaGFzQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG9yaWVudGF0aW9uOiAoZiA9IG1zZy5nZXRPcmllbnRhdGlvbigpKSAmJiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcy50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0T3JpZW50YXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0T3JpZW50YXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIEV1bGVyQW5nbGVzIG9yaWVudGF0aW9uID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlc31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldE9yaWVudGF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5FdWxlckFuZ2xlcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkV1bGVyQW5nbGVzfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRPcmllbnRhdGlvblJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE9yaWVudGF0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyT3JpZW50YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0T3JpZW50YXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkT3JpZW50YXRpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzT3JpZW50YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGFjY2VsZXJhdGlvbjogKGYgPSBtc2cuZ2V0QWNjZWxlcmF0aW9uKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb247XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0QWNjZWxlcmF0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRBY2NlbGVyYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBBY2NlbGVyYXRpb24gYWNjZWxlcmF0aW9uID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5BY2NlbGVyYXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0QWNjZWxlcmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLkFjY2VsZXJhdGlvbn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9uLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuQWNjZWxlcmF0aW9ufHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkQWNjZWxlcmF0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0QWNjZWxlcmF0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRBY2NlbGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJBY2NlbGVyYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QWNjZWxlcmF0aW9uKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNBY2NlbGVyYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG1hZ25ldG9tZXRlcjogKGYgPSBtc2cuZ2V0TWFnbmV0b21ldGVyKCkpICYmIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXI7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0TWFnbmV0b21ldGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRNYWduZXRvbWV0ZXIoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNYWduZXRvbWV0ZXIgbWFnbmV0b21ldGVyID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5NYWduZXRvbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWFnbmV0b21ldGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLk1hZ25ldG9tZXRlcn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuTWFnbmV0b21ldGVyfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmltdS52MS5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuc2V0TWFnbmV0b21ldGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW11LnYxLlJlYWRNYWduZXRvbWV0ZXJSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJNYWduZXRvbWV0ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TWFnbmV0b21ldGVyKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEuUmVhZE1hZ25ldG9tZXRlclJlc3BvbnNlLnByb3RvdHlwZS5oYXNNYWduZXRvbWV0ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5pbXUudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdS5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9pbXVfdjFfaW11X3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgSU1VU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElNVVNlcnZpY2UoKSB7fVxuICBJTVVTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuY29tcG9uZW50LmltdS52MS5JTVVTZXJ2aWNlXCI7XG4gIHJldHVybiBJTVVTZXJ2aWNlO1xufSgpKTtcblxuSU1VU2VydmljZS5SZWFkQW5ndWxhclZlbG9jaXR5ID0ge1xuICBtZXRob2ROYW1lOiBcIlJlYWRBbmd1bGFyVmVsb2NpdHlcIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkQW5ndWxhclZlbG9jaXR5UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ltdV92MV9pbXVfcGIuUmVhZEFuZ3VsYXJWZWxvY2l0eVJlc3BvbnNlXG59O1xuXG5JTVVTZXJ2aWNlLlJlYWRPcmllbnRhdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZWFkT3JpZW50YXRpb25cIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkT3JpZW50YXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkT3JpZW50YXRpb25SZXNwb25zZVxufTtcblxuSU1VU2VydmljZS5SZWFkQWNjZWxlcmF0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIlJlYWRBY2NlbGVyYXRpb25cIixcbiAgc2VydmljZTogSU1VU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkQWNjZWxlcmF0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2ltdV92MV9pbXVfcGIuUmVhZEFjY2VsZXJhdGlvblJlc3BvbnNlXG59O1xuXG5JTVVTZXJ2aWNlLlJlYWRNYWduZXRvbWV0ZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiUmVhZE1hZ25ldG9tZXRlclwiLFxuICBzZXJ2aWNlOiBJTVVTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9pbXVfdjFfaW11X3BiLlJlYWRNYWduZXRvbWV0ZXJSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW11X3YxX2ltdV9wYi5SZWFkTWFnbmV0b21ldGVyUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuSU1VU2VydmljZSA9IElNVVNlcnZpY2U7XG5cbmZ1bmN0aW9uIElNVVNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkQW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gcmVhZEFuZ3VsYXJWZWxvY2l0eShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkQW5ndWxhclZlbG9jaXR5LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkT3JpZW50YXRpb24gPSBmdW5jdGlvbiByZWFkT3JpZW50YXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KElNVVNlcnZpY2UuUmVhZE9yaWVudGF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkQWNjZWxlcmF0aW9uID0gZnVuY3Rpb24gcmVhZEFjY2VsZXJhdGlvbihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkQWNjZWxlcmF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JTVVTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5yZWFkTWFnbmV0b21ldGVyID0gZnVuY3Rpb24gcmVhZE1hZ25ldG9tZXRlcihyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSU1VU2VydmljZS5SZWFkTWFnbmV0b21ldGVyLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLklNVVNlcnZpY2VDbGllbnQgPSBJTVVTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXIucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sbGVyOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q29udHJvbGxlcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1JlcXVlc3QucHJvdG90eXBlLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sc0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAxKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkQ29udHJvbHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDb250cm9sc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGNvbnRyb2xzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRDb250cm9sc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZS5wcm90b3R5cGUuc2V0Q29udHJvbHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRDb250cm9sc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRDb250cm9scyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0Q29udHJvbHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldENvbnRyb2xzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQ29udHJvbHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldENvbnRyb2xzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29udHJvbGxlcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sbGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGV2ZW50c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV2ZW50c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRFdmVudHNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEV2ZW50IGV2ZW50cyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuR2V0RXZlbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRFdmVudHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5HZXRFdmVudHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkdldEV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXZlbnRzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29udHJvbGxlcjoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBldmVudDogKGYgPSBtc2cuZ2V0RXZlbnQoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sbGVyKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEV2ZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbGxlciA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3QucHJvdG90eXBlLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRDb250cm9sbGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgRXZlbnQgZXZlbnQgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlcXVlc3QucHJvdG90eXBlLmNsZWFyRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RXZlbnQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXF1ZXN0LnByb3RvdHlwZS5oYXNFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlRyaWdnZXJFdmVudFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuVHJpZ2dlckV2ZW50UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5UcmlnZ2VyRXZlbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgdGltZTogKGYgPSBtc2cuZ2V0VGltZSgpKSAmJiBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIGV2ZW50OiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGNvbnRyb2w6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMywgXCJcIiksXG4gICAgdmFsdWU6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDQsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXA7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRUaW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0RXZlbnQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRDb250cm9sKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0VGltZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFZhbHVlKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICA0LFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIHRpbWUgPSAxO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIuVGltZXN0YW1wLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmNsZWFyVGltZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRUaW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmhhc1RpbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAxKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBldmVudCA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5wcm90b3R5cGUuc2V0RXZlbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbCA9IDM7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5nZXRDb250cm9sID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRDb250cm9sID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHZhbHVlID0gNDtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCA0LCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50LnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGNvbnRyb2xsZXI6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgZXZlbnRzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0RXZlbnRzTGlzdCgpLFxuICAgIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldENvbnRyb2xsZXIodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkRXZlbnRzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29udHJvbGxlcigpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucmVwZWF0ZWRGaWVsZHNfID0gWzIsM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBjb250cm9sOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGV2ZW50c0xpc3Q6IChmID0ganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQobXNnLCAyKSkgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGYsXG4gICAgY2FuY2VsbGVkRXZlbnRzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDMpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q29udHJvbCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLmFkZENhbmNlbGxlZEV2ZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRDb250cm9sKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0RXZlbnRzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q2FuY2VsbGVkRXZlbnRzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgY29udHJvbCA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5nZXRDb250cm9sID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXRDb250cm9sID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIGV2ZW50cyA9IDI7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovIChqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5zZXRFdmVudHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMiwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuY2xlYXJFdmVudHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50c0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyBjYW5jZWxsZWRfZXZlbnRzID0gMztcbiAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuZ2V0Q2FuY2VsbGVkRXZlbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHMucHJvdG90eXBlLnNldENhbmNlbGxlZEV2ZW50c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkKHRoaXMsIDMsIHZhbHVlIHx8IFtdKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5FdmVudHN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cy5wcm90b3R5cGUuYWRkQ2FuY2VsbGVkRXZlbnRzID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAzLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzLnByb3RvdHlwZS5jbGVhckNhbmNlbGxlZEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0Q2FuY2VsbGVkRXZlbnRzTGlzdChbXSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGNvbnRyb2xsZXIgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIEV2ZW50cyBldmVudHMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cywgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlbnRzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QuRXZlbnRzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMiwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0LkV2ZW50cywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFdmVudHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50c0xpc3QoW10pO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBldmVudDogKGYgPSBtc2cuZ2V0RXZlbnQoKSkgJiYgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEV2ZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBFdmVudCBldmVudCA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRFdmVudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdHJlYW1FdmVudHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0cmVhbUV2ZW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhckV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEV2ZW50KHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UucHJvdG90eXBlLmhhc0V2ZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGV2ZW50c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldEV2ZW50c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRFdmVudHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldEV2ZW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgRXZlbnQgZXZlbnRzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuRXZlbnQ+fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLmdldEV2ZW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxLkV2ZW50Pn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLnNldEV2ZW50c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudD19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuU3RhdHVzLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5FdmVudCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LmlucHV0Y29udHJvbGxlci52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyRXZlbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFdmVudHNMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxKTtcbiIsIi8vIHBhY2thZ2U6IHByb3RvLmFwaS5jb21wb25lbnQuaW5wdXRjb250cm9sbGVyLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvY29tcG9uZW50L2lucHV0Y29udHJvbGxlci92MS9pbnB1dF9jb250cm9sbGVyLnByb3RvXG5cbnZhciBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21wb25lbnQvaW5wdXRjb250cm9sbGVyL3YxL2lucHV0X2NvbnRyb2xsZXJfcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIElucHV0Q29udHJvbGxlclNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlKCkge31cbiAgSW5wdXRDb250cm9sbGVyU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLmNvbXBvbmVudC5pbnB1dGNvbnRyb2xsZXIudjEuSW5wdXRDb250cm9sbGVyU2VydmljZVwiO1xuICByZXR1cm4gSW5wdXRDb250cm9sbGVyU2VydmljZTtcbn0oKSk7XG5cbklucHV0Q29udHJvbGxlclNlcnZpY2UuR2V0Q29udHJvbHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0Q29udHJvbHNcIixcbiAgc2VydmljZTogSW5wdXRDb250cm9sbGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuR2V0Q29udHJvbHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuR2V0Q29udHJvbHNSZXNwb25zZVxufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZS5HZXRFdmVudHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0RXZlbnRzXCIsXG4gIHNlcnZpY2U6IElucHV0Q29udHJvbGxlclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLkdldEV2ZW50c1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9pbnB1dGNvbnRyb2xsZXJfdjFfaW5wdXRfY29udHJvbGxlcl9wYi5HZXRFdmVudHNSZXNwb25zZVxufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZS5TdHJlYW1FdmVudHMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU3RyZWFtRXZlbnRzXCIsXG4gIHNlcnZpY2U6IElucHV0Q29udHJvbGxlclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogdHJ1ZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuU3RyZWFtRXZlbnRzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLlN0cmVhbUV2ZW50c1Jlc3BvbnNlXG59O1xuXG5JbnB1dENvbnRyb2xsZXJTZXJ2aWNlLlRyaWdnZXJFdmVudCA9IHtcbiAgbWV0aG9kTmFtZTogXCJUcmlnZ2VyRXZlbnRcIixcbiAgc2VydmljZTogSW5wdXRDb250cm9sbGVyU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfaW5wdXRjb250cm9sbGVyX3YxX2lucHV0X2NvbnRyb2xsZXJfcGIuVHJpZ2dlckV2ZW50UmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X2lucHV0Y29udHJvbGxlcl92MV9pbnB1dF9jb250cm9sbGVyX3BiLlRyaWdnZXJFdmVudFJlc3BvbnNlXG59O1xuXG5leHBvcnRzLklucHV0Q29udHJvbGxlclNlcnZpY2UgPSBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlO1xuXG5mdW5jdGlvbiBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50KHNlcnZpY2VIb3N0LCBvcHRpb25zKSB7XG4gIHRoaXMuc2VydmljZUhvc3QgPSBzZXJ2aWNlSG9zdDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0Q29udHJvbHMgPSBmdW5jdGlvbiBnZXRDb250cm9scyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoSW5wdXRDb250cm9sbGVyU2VydmljZS5HZXRDb250cm9scywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RXZlbnRzID0gZnVuY3Rpb24gZ2V0RXZlbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShJbnB1dENvbnRyb2xsZXJTZXJ2aWNlLkdldEV2ZW50cywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuSW5wdXRDb250cm9sbGVyU2VydmljZUNsaWVudC5wcm90b3R5cGUuc3RyZWFtRXZlbnRzID0gZnVuY3Rpb24gc3RyZWFtRXZlbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSkge1xuICB2YXIgbGlzdGVuZXJzID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIGVuZDogW10sXG4gICAgc3RhdHVzOiBbXVxuICB9O1xuICB2YXIgY2xpZW50ID0gZ3JwYy5pbnZva2UoSW5wdXRDb250cm9sbGVyU2VydmljZS5TdHJlYW1FdmVudHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbk1lc3NhZ2U6IGZ1bmN0aW9uIChyZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAgIGxpc3RlbmVycy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcihyZXNwb25zZU1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHN0YXR1cywgc3RhdHVzTWVzc2FnZSwgdHJhaWxlcnMpIHtcbiAgICAgIGxpc3RlbmVycy5zdGF0dXMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyKHsgY29kZTogc3RhdHVzLCBkZXRhaWxzOiBzdGF0dXNNZXNzYWdlLCBtZXRhZGF0YTogdHJhaWxlcnMgfSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5lbmQuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyKHsgY29kZTogc3RhdHVzLCBkZXRhaWxzOiBzdGF0dXNNZXNzYWdlLCBtZXRhZGF0YTogdHJhaWxlcnMgfSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycyA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBvbjogZnVuY3Rpb24gKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGxpc3RlbmVyc1t0eXBlXS5wdXNoKGhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxpc3RlbmVycyA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5JbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KElucHV0Q29udHJvbGxlclNlcnZpY2UuVHJpZ2dlckV2ZW50LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLklucHV0Q29udHJvbGxlclNlcnZpY2VDbGllbnQgPSBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3IucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvc3RydWN0X3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cyc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHBvd2VyUGN0OiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UG93ZXJQY3QodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvd2VyUGN0KCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHBvd2VyX3BjdCA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXF1ZXN0LnByb3RvdHlwZS5nZXRQb3dlclBjdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgMC4wKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVxdWVzdC5wcm90b3R5cGUuc2V0UG93ZXJQY3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TZXRQb3dlclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU2V0UG93ZXJSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlNldFBvd2VyUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgcnBtOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwLjApLFxuICAgIHJldm9sdXRpb25zOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UnBtKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UmV2b2x1dGlvbnModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJwbSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJldm9sdXRpb25zKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJwbSA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5nZXRScG0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLnNldFJwbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZG91YmxlIHJldm9sdXRpb25zID0gMztcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlcXVlc3QucHJvdG90eXBlLmdldFJldm9sdXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXZvbHV0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvRm9yUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb0ZvclJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Gb3JSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIHJwbToganNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgMC4wKSxcbiAgICBwb3NpdGlvblJldm9sdXRpb25zOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRScG0odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvblJldm9sdXRpb25zKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFJwbSgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uUmV2b2x1dGlvbnMoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDMsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1JlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcnBtID0gMjtcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuZ2V0UnBtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2V0UnBtID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcG9zaXRpb25fcmV2b2x1dGlvbnMgPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0LnByb3RvdHlwZS5nZXRQb3NpdGlvblJldm9sdXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAzLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVxdWVzdC5wcm90b3R5cGUuc2V0UG9zaXRpb25SZXZvbHV0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR29Ub1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Hb1RvUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdvVG9SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBvZmZzZXQ6IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRPZmZzZXQodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldE9mZnNldCgpO1xuICBpZiAoZiAhPT0gMC4wKSB7XG4gICAgd3JpdGVyLndyaXRlRG91YmxlKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBvZmZzZXQgPSAyO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0T2Zmc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCAwLjApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRPZmZzZXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5SZXNldFplcm9Qb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuUmVzZXRaZXJvUG9zaXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb246IGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDAuMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyZWFkZXIucmVhZERvdWJsZSgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvbih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb24oKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZURvdWJsZShcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGRvdWJsZSBwb3NpdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Zsb2F0RmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdG9wUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0b3BSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RvcFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBpc09uOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRJc09uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SXNPbigpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGlzX29uID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuSXNQb3dlcmVkUmVzcG9uc2UucHJvdG90eXBlLmdldElzT24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLklzUG93ZXJlZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5Jc1Bvd2VyZWRSZXNwb25zZS5wcm90b3R5cGUuc2V0SXNPbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwb3NpdGlvblJlcG9ydGluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgZmFsc2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLkdldEZlYXR1cmVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRQb3NpdGlvblJlcG9ydGluZyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb25SZXBvcnRpbmcoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgYm9vbCBwb3NpdGlvbl9yZXBvcnRpbmcgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5HZXRGZWF0dXJlc1Jlc3BvbnNlLnByb3RvdHlwZS5nZXRQb3NpdGlvblJlcG9ydGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuR2V0RmVhdHVyZXNSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb25SZXBvcnRpbmcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGlzT246IGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChtc2csIDEsIGZhbHNlKSxcbiAgICBwb3NpdGlvblJlcG9ydGluZzoganNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG1zZywgMiwgZmFsc2UpLFxuICAgIHBvc2l0aW9uOiBqc3BiLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCAwLjApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldElzT24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAocmVhZGVyLnJlYWRCb29sKCkpO1xuICAgICAgbXNnLnNldFBvc2l0aW9uUmVwb3J0aW5nKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWREb3VibGUoKSk7XG4gICAgICBtc2cuc2V0UG9zaXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SXNPbigpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zaXRpb25SZXBvcnRpbmcoKTtcbiAgaWYgKGYpIHtcbiAgICB3cml0ZXIud3JpdGVCb29sKFxuICAgICAgMixcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uKCk7XG4gIGlmIChmICE9PSAwLjApIHtcbiAgICB3cml0ZXIud3JpdGVEb3VibGUoXG4gICAgICAzLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIGlzX29uID0gMTtcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLnByb3RvdHlwZS5nZXRJc09uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge2Jvb2xlYW59ICovIChqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgZmFsc2UpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0SXNPbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHBvc2l0aW9uX3JlcG9ydGluZyA9IDI7XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb25SZXBvcnRpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBmYWxzZSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzLnByb3RvdHlwZS5zZXRQb3NpdGlvblJlcG9ydGluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBkb3VibGUgcG9zaXRpb24gPSAzO1xuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50Lm1vdG9yLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDMsIDAuMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MS5TdGF0dXMucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5tb3Rvci52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9tb3Rvci92MS9tb3Rvci5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L21vdG9yL3YxL21vdG9yX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBNb3RvclNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNb3RvclNlcnZpY2UoKSB7fVxuICBNb3RvclNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQubW90b3IudjEuTW90b3JTZXJ2aWNlXCI7XG4gIHJldHVybiBNb3RvclNlcnZpY2U7XG59KCkpO1xuXG5Nb3RvclNlcnZpY2UuU2V0UG93ZXIgPSB7XG4gIG1ldGhvZE5hbWU6IFwiU2V0UG93ZXJcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TZXRQb3dlclJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TZXRQb3dlclJlc3BvbnNlXG59O1xuXG5Nb3RvclNlcnZpY2UuR29Gb3IgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR29Gb3JcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb0ZvclJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb0ZvclJlc3BvbnNlXG59O1xuXG5Nb3RvclNlcnZpY2UuR29UbyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHb1RvXCIsXG4gIHNlcnZpY2U6IE1vdG9yU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfbW90b3JfdjFfbW90b3JfcGIuR29Ub1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Hb1RvUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5SZXNldFplcm9Qb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZXNldFplcm9Qb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlJlc2V0WmVyb1Bvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlJlc2V0WmVyb1Bvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5HZXRQb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRQb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldFBvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldFBvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5HZXRGZWF0dXJlcyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRGZWF0dXJlc1wiLFxuICBzZXJ2aWNlOiBNb3RvclNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldEZlYXR1cmVzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLkdldEZlYXR1cmVzUmVzcG9uc2Vcbn07XG5cbk1vdG9yU2VydmljZS5TdG9wID0ge1xuICBtZXRob2ROYW1lOiBcIlN0b3BcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5TdG9wUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X21vdG9yX3YxX21vdG9yX3BiLlN0b3BSZXNwb25zZVxufTtcblxuTW90b3JTZXJ2aWNlLklzUG93ZXJlZCA9IHtcbiAgbWV0aG9kTmFtZTogXCJJc1Bvd2VyZWRcIixcbiAgc2VydmljZTogTW90b3JTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9tb3Rvcl92MV9tb3Rvcl9wYi5Jc1Bvd2VyZWRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfbW90b3JfdjFfbW90b3JfcGIuSXNQb3dlcmVkUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuTW90b3JTZXJ2aWNlID0gTW90b3JTZXJ2aWNlO1xuXG5mdW5jdGlvbiBNb3RvclNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnNldFBvd2VyID0gZnVuY3Rpb24gc2V0UG93ZXIocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5TZXRQb3dlciwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nb0ZvciA9IGZ1bmN0aW9uIGdvRm9yKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuR29Gb3IsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdG9yU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ29UbyA9IGZ1bmN0aW9uIGdvVG8ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5Hb1RvLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlc2V0WmVyb1Bvc2l0aW9uID0gZnVuY3Rpb24gcmVzZXRaZXJvUG9zaXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5SZXNldFplcm9Qb3NpdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuR2V0UG9zaXRpb24sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdG9yU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0RmVhdHVyZXMgPSBmdW5jdGlvbiBnZXRGZWF0dXJlcyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoTW90b3JTZXJ2aWNlLkdldEZlYXR1cmVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Nb3RvclNlcnZpY2VDbGllbnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3RvclNlcnZpY2UuU3RvcCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTW90b3JTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5pc1Bvd2VyZWQgPSBmdW5jdGlvbiBpc1Bvd2VyZWQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE1vdG9yU2VydmljZS5Jc1Bvd2VyZWQsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuTW90b3JTZXJ2aWNlQ2xpZW50ID0gTW90b3JTZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9jb21wb25lbnQvc2Vydm8vdjEvc2Vydm8ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBhbmdsZURlZzoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRVaW50MzIoKSk7XG4gICAgICBtc2cuc2V0QW5nbGVEZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0QW5nbGVEZWcoKTtcbiAgaWYgKGYgIT09IDApIHtcbiAgICB3cml0ZXIud3JpdGVVaW50MzIoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIGFuZ2xlX2RlZyA9IDI7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldEFuZ2xlRGVnID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2V0QW5nbGVEZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuTW92ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBuYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlcXVlc3QucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHBvc2l0aW9uRGVnOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5HZXRQb3NpdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAocmVhZGVyLnJlYWRVaW50MzIoKSk7XG4gICAgICBtc2cuc2V0UG9zaXRpb25EZWcodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLkdldFBvc2l0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uRGVnKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIHBvc2l0aW9uX2RlZyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuR2V0UG9zaXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zaXRpb25EZWc6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgMClcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzfVxuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlYWRlci5yZWFkVWludDMyKCkpO1xuICAgICAgbXNnLnNldFBvc2l0aW9uRGVnKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBvc2l0aW9uRGVnKCk7XG4gIGlmIChmICE9PSAwKSB7XG4gICAgd3JpdGVyLndyaXRlVWludDMyKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgdWludDMyIHBvc2l0aW9uX2RlZyA9IDE7XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU3RhdHVzLnByb3RvdHlwZS5nZXRQb3NpdGlvbkRlZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCAwKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuY29tcG9uZW50LnNlcnZvLnYxLlN0YXR1cy5wcm90b3R5cGUuc2V0UG9zaXRpb25EZWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLmNvbXBvbmVudC5zZXJ2by52MVxuLy8gZmlsZTogcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2by5wcm90b1xuXG52YXIgcHJvdG9fYXBpX2NvbXBvbmVudF9zZXJ2b192MV9zZXJ2b19wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tcG9uZW50L3NlcnZvL3YxL3NlcnZvX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBTZXJ2b1NlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXJ2b1NlcnZpY2UoKSB7fVxuICBTZXJ2b1NlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5jb21wb25lbnQuc2Vydm8udjEuU2Vydm9TZXJ2aWNlXCI7XG4gIHJldHVybiBTZXJ2b1NlcnZpY2U7XG59KCkpO1xuXG5TZXJ2b1NlcnZpY2UuTW92ZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlXCIsXG4gIHNlcnZpY2U6IFNlcnZvU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9jb21wb25lbnRfc2Vydm9fdjFfc2Vydm9fcGIuTW92ZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX2NvbXBvbmVudF9zZXJ2b192MV9zZXJ2b19wYi5Nb3ZlUmVzcG9uc2Vcbn07XG5cblNlcnZvU2VydmljZS5HZXRQb3NpdGlvbiA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRQb3NpdGlvblwiLFxuICBzZXJ2aWNlOiBTZXJ2b1NlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X3NlcnZvX3YxX3NlcnZvX3BiLkdldFBvc2l0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfY29tcG9uZW50X3NlcnZvX3YxX3NlcnZvX3BiLkdldFBvc2l0aW9uUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuU2Vydm9TZXJ2aWNlID0gU2Vydm9TZXJ2aWNlO1xuXG5mdW5jdGlvbiBTZXJ2b1NlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5TZXJ2b1NlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiBtb3ZlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShTZXJ2b1NlcnZpY2UuTW92ZSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuU2Vydm9TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBvc2l0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShTZXJ2b1NlcnZpY2UuR2V0UG9zaXRpb24sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuU2Vydm9TZXJ2aWNlQ2xpZW50ID0gU2Vydm9TZXJ2aWNlQ2xpZW50O1xuXG4iLCIvLyBzb3VyY2U6IHByb3RvL2FwaS9yb2JvdC92MS9yb2JvdC5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24sIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24nO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuRG9BY3Rpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5Eb0FjdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkRvQWN0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc291cmNlTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICBjb21tYW5kTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBhcmdzOiAoZiA9IG1zZy5nZXRBcmdzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFJlc291cmNlTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldENvbW1hbmROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEFyZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VOYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0Q29tbWFuZE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBcmdzKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMyxcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgcmVzb3VyY2VfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnNldFJlc291cmNlTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBjb21tYW5kX25hbWUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q29tbWFuZE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlcXVlc3QucHJvdG90eXBlLnNldENvbW1hbmROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBhcmdzID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuZ2V0QXJncyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdC5wcm90b3R5cGUuc2V0QXJncyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckFyZ3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0QXJncyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXF1ZXN0LnByb3RvdHlwZS5oYXNBcmdzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc3VsdDogKGYgPSBtc2cuZ2V0UmVzdWx0KCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0UmVzdWx0KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSZXN1bHQoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgcmVzdWx0ID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLmdldFJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5SZXNvdXJjZVJ1bkNvbW1hbmRSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXN1bHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLlJlc291cmNlUnVuQ29tbWFuZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRSZXN1bHQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2UucHJvdG90eXBlLmhhc1Jlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgbWV0aG9kOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIGFyZ3VtZW50czogKGYgPSBtc2cuZ2V0QXJndW1lbnRzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgc3RhcnRlZDogKGYgPSBtc2cuZ2V0U3RhcnRlZCgpKSAmJiBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWV0aG9kKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldEFyZ3VtZW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXA7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3RpbWVzdGFtcF9wYi5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRTdGFydGVkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb259IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SWQoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRNZXRob2QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRBcmd1bWVudHMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRTdGFydGVkKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgNCxcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfdGltZXN0YW1wX3BiLlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIG1ldGhvZCA9IDI7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmdldE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgYXJndW1lbnRzID0gMztcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRBcmd1bWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QsIDMpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5zZXRBcmd1bWVudHMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmNsZWFyQXJndW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldEFyZ3VtZW50cyh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24ucHJvdG90eXBlLmhhc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDMpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBzdGFydGVkID0gNDtcbiAqIEByZXR1cm4gez9wcm90by5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXB9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl90aW1lc3RhbXBfcGIuVGltZXN0YW1wLCA0KSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbn0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuc2V0U3RhcnRlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDQsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9ufSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbi5wcm90b3R5cGUuY2xlYXJTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXJ0ZWQodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnByb3RvdHlwZS5oYXNTdGFydGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgNCkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBvcGVyYXRpb25zTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0T3BlcmF0aW9uc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkT3BlcmF0aW9ucyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE9wZXJhdGlvbnNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbnMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb24sIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLk9wZXJhdGlvbj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkdldE9wZXJhdGlvbnNSZXNwb25zZS5wcm90b3R5cGUuc2V0T3BlcmF0aW9uc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5PcGVyYXRpb259XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2UucHJvdG90eXBlLmFkZE9wZXJhdGlvbnMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkucm9ib3QudjEuT3BlcmF0aW9uLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5HZXRPcGVyYXRpb25zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuR2V0T3BlcmF0aW9uc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhck9wZXJhdGlvbnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9wZXJhdGlvbnNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQ2FuY2VsT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkNhbmNlbE9wZXJhdGlvblJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5DYW5jZWxPcGVyYXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBpZDoganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRJZCh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5yb2JvdC52MS5CbG9ja0Zvck9wZXJhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnJvYm90LnYxLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkucm9ib3QudjEuQmxvY2tGb3JPcGVyYXRpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5yb2JvdC52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkucm9ib3QudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9yb2JvdC92MS9yb2JvdC5wcm90b1xuXG52YXIgcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3Byb3RvL2FwaS9yb2JvdC92MS9yb2JvdF9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgUm9ib3RTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm9ib3RTZXJ2aWNlKCkge31cbiAgUm9ib3RTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkucm9ib3QudjEuUm9ib3RTZXJ2aWNlXCI7XG4gIHJldHVybiBSb2JvdFNlcnZpY2U7XG59KCkpO1xuXG5Sb2JvdFNlcnZpY2UuUmVzb3VyY2VSdW5Db21tYW5kID0ge1xuICBtZXRob2ROYW1lOiBcIlJlc291cmNlUnVuQ29tbWFuZFwiLFxuICBzZXJ2aWNlOiBSb2JvdFNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfcm9ib3RfdjFfcm9ib3RfcGIuUmVzb3VyY2VSdW5Db21tYW5kUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfcm9ib3RfdjFfcm9ib3RfcGIuUmVzb3VyY2VSdW5Db21tYW5kUmVzcG9uc2Vcbn07XG5cblJvYm90U2VydmljZS5HZXRPcGVyYXRpb25zID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE9wZXJhdGlvbnNcIixcbiAgc2VydmljZTogUm9ib3RTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiLkdldE9wZXJhdGlvbnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5HZXRPcGVyYXRpb25zUmVzcG9uc2Vcbn07XG5cblJvYm90U2VydmljZS5DYW5jZWxPcGVyYXRpb24gPSB7XG4gIG1ldGhvZE5hbWU6IFwiQ2FuY2VsT3BlcmF0aW9uXCIsXG4gIHNlcnZpY2U6IFJvYm90U2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5DYW5jZWxPcGVyYXRpb25SZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5DYW5jZWxPcGVyYXRpb25SZXNwb25zZVxufTtcblxuUm9ib3RTZXJ2aWNlLkJsb2NrRm9yT3BlcmF0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkJsb2NrRm9yT3BlcmF0aW9uXCIsXG4gIHNlcnZpY2U6IFJvYm90U2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9yb2JvdF92MV9yb2JvdF9wYi5CbG9ja0Zvck9wZXJhdGlvblJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3JvYm90X3YxX3JvYm90X3BiLkJsb2NrRm9yT3BlcmF0aW9uUmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuUm9ib3RTZXJ2aWNlID0gUm9ib3RTZXJ2aWNlO1xuXG5mdW5jdGlvbiBSb2JvdFNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5Sb2JvdFNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlc291cmNlUnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJlc291cmNlUnVuQ29tbWFuZChyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoUm9ib3RTZXJ2aWNlLlJlc291cmNlUnVuQ29tbWFuZCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuUm9ib3RTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRPcGVyYXRpb25zID0gZnVuY3Rpb24gZ2V0T3BlcmF0aW9ucyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoUm9ib3RTZXJ2aWNlLkdldE9wZXJhdGlvbnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblJvYm90U2VydmljZUNsaWVudC5wcm90b3R5cGUuY2FuY2VsT3BlcmF0aW9uID0gZnVuY3Rpb24gY2FuY2VsT3BlcmF0aW9uKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShSb2JvdFNlcnZpY2UuQ2FuY2VsT3BlcmF0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5Sb2JvdFNlcnZpY2VDbGllbnQucHJvdG90eXBlLmJsb2NrRm9yT3BlcmF0aW9uID0gZnVuY3Rpb24gYmxvY2tGb3JPcGVyYXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFJvYm90U2VydmljZS5CbG9ja0Zvck9wZXJhdGlvbiwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5Sb2JvdFNlcnZpY2VDbGllbnQgPSBSb2JvdFNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGEucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvY29tbW9uL3YxL2NvbW1vbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYik7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2V9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZXNvdXJjZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZXNvdXJjZXNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRSZXNvdXJjZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUgcmVzb3VyY2VzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZS5wcm90b3R5cGUuZ2V0UmVzb3VyY2VzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubWV0YWRhdGEudjEuUmVzb3VyY2VzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXNvdXJjZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRSZXNvdXJjZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MS5SZXNvdXJjZXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLlJlc291cmNlc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhclJlc291cmNlc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VzTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5tZXRhZGF0YS52MVxuLy8gZmlsZTogcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGEucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX21ldGFkYXRhX3YxX21ldGFkYXRhX3BiID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9zZXJ2aWNlL21ldGFkYXRhL3YxL21ldGFkYXRhX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBNZXRhZGF0YVNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNZXRhZGF0YVNlcnZpY2UoKSB7fVxuICBNZXRhZGF0YVNlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5zZXJ2aWNlLm1ldGFkYXRhLnYxLk1ldGFkYXRhU2VydmljZVwiO1xuICByZXR1cm4gTWV0YWRhdGFTZXJ2aWNlO1xufSgpKTtcblxuTWV0YWRhdGFTZXJ2aWNlLlJlc291cmNlcyA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZXNvdXJjZXNcIixcbiAgc2VydmljZTogTWV0YWRhdGFTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbWV0YWRhdGFfdjFfbWV0YWRhdGFfcGIuUmVzb3VyY2VzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9tZXRhZGF0YV92MV9tZXRhZGF0YV9wYi5SZXNvdXJjZXNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5NZXRhZGF0YVNlcnZpY2UgPSBNZXRhZGF0YVNlcnZpY2U7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk1ldGFkYXRhU2VydmljZUNsaWVudC5wcm90b3R5cGUucmVzb3VyY2VzID0gZnVuY3Rpb24gcmVzb3VyY2VzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNZXRhZGF0YVNlcnZpY2UuUmVzb3VyY2VzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLk1ldGFkYXRhU2VydmljZUNsaWVudCA9IE1ldGFkYXRhU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9hcGkvc2VydmljZS9tb3Rpb24vdjEvbW90aW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBkZXN0aW5hdGlvbjogKGYgPSBtc2cuZ2V0RGVzdGluYXRpb24oKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBjb21wb25lbnROYW1lOiAoZiA9IG1zZy5nZXRDb21wb25lbnROYW1lKCkpICYmIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpLFxuICAgIHdvcmxkU3RhdGU6IChmID0gbXNnLmdldFdvcmxkU3RhdGUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldERlc3RpbmF0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0Q29tcG9uZW50TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuV29ybGRTdGF0ZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0V29ybGRTdGF0ZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0RGVzdGluYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2VJbkZyYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRDb21wb25lbnROYW1lKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFdvcmxkU3RhdGUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAzLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLldvcmxkU3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSBkZXN0aW5hdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5nZXREZXN0aW5hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXREZXN0aW5hdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyRGVzdGluYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0RGVzdGluYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmhhc0Rlc3RpbmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBjb21wb25lbnRfbmFtZSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5zZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbWVzc2FnZSBmaWVsZCBtYWtpbmcgaXQgdW5kZWZpbmVkLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldENvbXBvbmVudE5hbWUodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmhhc0NvbXBvbmVudE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLCAyKSAhPSBudWxsO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuV29ybGRTdGF0ZSB3b3JsZF9zdGF0ZSA9IDM7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmdldFdvcmxkU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Xb3JsZFN0YXRlLCAzKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Xb3JsZFN0YXRlfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVxdWVzdC5wcm90b3R5cGUuc2V0V29ybGRTdGF0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDMsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyV29ybGRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRXb3JsZFN0YXRlKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXF1ZXN0LnByb3RvdHlwZS5oYXNXb3JsZFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMykgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdWNjZXNzOiBqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBmYWxzZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKHJlYWRlci5yZWFkQm9vbCgpKTtcbiAgICAgIG1zZy5zZXRTdWNjZXNzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U3VjY2VzcygpO1xuICBpZiAoZikge1xuICAgIHdyaXRlci53cml0ZUJvb2woXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBib29sIHN1Y2Nlc3MgPSAxO1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLk1vdmVSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIGZhbHNlKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5Nb3ZlUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW92ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdWNjZXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbM107XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgY29tcG9uZW50TmFtZTogKGYgPSBtc2cuZ2V0Q29tcG9uZW50TmFtZSgpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSxcbiAgICBkZXN0aW5hdGlvbkZyYW1lOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpLFxuICAgIHN1cHBsZW1lbnRhbFRyYW5zZm9ybXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlRyYW5zZm9ybS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldENvbXBvbmVudE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXREZXN0aW5hdGlvbkZyYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5UcmFuc2Zvcm07XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuVHJhbnNmb3JtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU3VwcGxlbWVudGFsVHJhbnNmb3Jtcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q29tcG9uZW50TmFtZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXREZXN0aW5hdGlvbkZyYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3VwcGxlbWVudGFsVHJhbnNmb3Jtc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDMsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuVHJhbnNmb3JtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIGNvbXBvbmVudF9uYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0Q29tcG9uZW50TmFtZSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuaGFzQ29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGRlc3RpbmF0aW9uX2ZyYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXREZXN0aW5hdGlvbkZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDIsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldERlc3RpbmF0aW9uRnJhbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBwcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybSBzdXBwbGVtZW50YWxfdHJhbnNmb3JtcyA9IDM7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0LnByb3RvdHlwZS5nZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm0+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlRyYW5zZm9ybSwgMykpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlRyYW5zZm9ybT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlcXVlc3QucHJvdG90eXBlLnNldFN1cHBsZW1lbnRhbFRyYW5zZm9ybXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm09fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5UcmFuc2Zvcm19XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuYWRkU3VwcGxlbWVudGFsVHJhbnNmb3JtcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAzLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuVHJhbnNmb3JtLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm1zTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgcG9zZTogKGYgPSBtc2cuZ2V0UG9zZSgpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb3NlSW5GcmFtZS50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQb3NlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MS5HZXRQb3NlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UG9zZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9zZUluRnJhbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZSBwb3NlID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvc2VJbkZyYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9zZUluRnJhbWV9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvc2VJbkZyYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb3NlSW5GcmFtZXx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuc2V0UG9zZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubW90aW9uLnYxLkdldFBvc2VSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBvc2UodW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuR2V0UG9zZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNQb3NlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm1vdGlvbi52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5tb3Rpb24udjFcbi8vIGZpbGU6IHByb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb24ucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX21vdGlvbl92MV9tb3Rpb25fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgTW90aW9uU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1vdGlvblNlcnZpY2UoKSB7fVxuICBNb3Rpb25TZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuc2VydmljZS5tb3Rpb24udjEuTW90aW9uU2VydmljZVwiO1xuICByZXR1cm4gTW90aW9uU2VydmljZTtcbn0oKSk7XG5cbk1vdGlvblNlcnZpY2UuTW92ZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJNb3ZlXCIsXG4gIHNlcnZpY2U6IE1vdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9tb3Rpb25fdjFfbW90aW9uX3BiLk1vdmVSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX21vdGlvbl92MV9tb3Rpb25fcGIuTW92ZVJlc3BvbnNlXG59O1xuXG5Nb3Rpb25TZXJ2aWNlLkdldFBvc2UgPSB7XG4gIG1ldGhvZE5hbWU6IFwiR2V0UG9zZVwiLFxuICBzZXJ2aWNlOiBNb3Rpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbW90aW9uX3YxX21vdGlvbl9wYi5HZXRQb3NlUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9tb3Rpb25fdjFfbW90aW9uX3BiLkdldFBvc2VSZXNwb25zZVxufTtcblxuZXhwb3J0cy5Nb3Rpb25TZXJ2aWNlID0gTW90aW9uU2VydmljZTtcblxuZnVuY3Rpb24gTW90aW9uU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk1vdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiBtb3ZlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3Rpb25TZXJ2aWNlLk1vdmUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk1vdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFBvc2UgPSBmdW5jdGlvbiBnZXRQb3NlKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShNb3Rpb25TZXJ2aWNlLkdldFBvc2UsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuTW90aW9uU2VydmljZUNsaWVudCA9IE1vdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2UvbmF2aWdhdGlvbi92MS9uYXZpZ2F0aW9uLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlJztcbn1cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbW9kZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCAwKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gKi8gKHJlYWRlci5yZWFkRW51bSgpKTtcbiAgICAgIG1zZy5zZXRNb2RlKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TW9kZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1vZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNb2RlIG1vZGUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2UucHJvdG90eXBlLmdldE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIDApKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGV9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRNb2RlUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldE1vZGVSZXNwb25zZS5wcm90b3R5cGUuc2V0TW9kZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBtb2RlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIDApXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUgeyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGV9ICovIChyZWFkZXIucmVhZEVudW0oKSk7XG4gICAgICBtc2cuc2V0TW9kZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE1vZGUoKTtcbiAgaWYgKGYgIT09IDAuMCkge1xuICAgIHdyaXRlci53cml0ZUVudW0oXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBNb2RlIG1vZGUgPSAxO1xuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5Nb2RlfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgMCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuTW9kZX0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVxdWVzdC5wcm90b3R5cGUuc2V0TW9kZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG5cbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5TZXRNb2RlUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlNldE1vZGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuU2V0TW9kZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGlkOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDEsIFwiXCIpLFxuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldExvY2F0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0SWQoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRMb2NhdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIGlkID0gMTtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnR9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LnByb3RvdHlwZS5zZXRJZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQgbG9jYXRpb24gPSAyO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LCAyKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludHx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQucHJvdG90eXBlLmNsZWFyTG9jYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TG9jYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LnByb3RvdHlwZS5oYXNMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldExvY2F0aW9uKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRMb2NhdGlvbigpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuR2VvUG9pbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgcHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludCBsb2NhdGlvbiA9IDE7XG4gKiBAcmV0dXJuIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5HZW9Qb2ludH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0TG9jYXRpb25SZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRMb2NhdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyTG9jYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TG9jYXRpb24odW5kZWZpbmVkKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBzZXQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldExvY2F0aW9uUmVzcG9uc2UucHJvdG90eXBlLmhhc0xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMSkgIT0gbnVsbDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICB3YXlwb2ludHNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRXYXlwb2ludHNMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuV2F5cG9pbnQ7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFdheXBvaW50cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFdheXBvaW50c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBXYXlwb2ludCB3YXlwb2ludHMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50Pn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5HZXRXYXlwb2ludHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0V2F5cG9pbnRzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludD59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50Pn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRXYXlwb2ludHNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5XYXlwb2ludD19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRXYXlwb2ludHMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLldheXBvaW50LCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuR2V0V2F5cG9pbnRzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkdldFdheXBvaW50c1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhcldheXBvaW50c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0V2F5cG9pbnRzTGlzdChbXSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGxvY2F0aW9uOiAoZiA9IG1zZy5nZXRMb2NhdGlvbigpKSAmJiBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludC50b09iamVjdChpbmNsdWRlSW5zdGFuY2UsIGYpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50O1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuc2V0TG9jYXRpb24odmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TG9jYXRpb24oKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLkdlb1BvaW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnQgbG9jYXRpb24gPSAxO1xuICogQHJldHVybiB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLkdlb1BvaW50fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5HZW9Qb2ludCwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLnByb3RvLmFwaS5jb21tb24udjEuR2VvUG9pbnR8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuY2xlYXJMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRMb2NhdGlvbih1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXF1ZXN0LnByb3RvdHlwZS5oYXNMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLkFkZFdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5BZGRXYXlwb2ludFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuQWRkV2F5cG9pbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgaWQ6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldElkKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldElkKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgaWQgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlcXVlc3QucHJvdG90eXBlLnNldElkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLlJlbW92ZVdheXBvaW50UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5SZW1vdmVXYXlwb2ludFJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm5hdmlnYXRpb24udjEuUmVtb3ZlV2F5cG9pbnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxLk1vZGUgPSB7XG4gIE1PREVfVU5TUEVDSUZJRUQ6IDAsXG4gIE1PREVfTUFOVUFMOiAxLFxuICBNT0RFX1dBWVBPSU5UOiAyXG59O1xuXG5nb29nLm9iamVjdC5leHRlbmQoZXhwb3J0cywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5uYXZpZ2F0aW9uLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb24ucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYiA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIE5hdmlnYXRpb25TZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTmF2aWdhdGlvblNlcnZpY2UoKSB7fVxuICBOYXZpZ2F0aW9uU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLnNlcnZpY2UubmF2aWdhdGlvbi52MS5OYXZpZ2F0aW9uU2VydmljZVwiO1xuICByZXR1cm4gTmF2aWdhdGlvblNlcnZpY2U7XG59KCkpO1xuXG5OYXZpZ2F0aW9uU2VydmljZS5HZXRNb2RlID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE1vZGVcIixcbiAgc2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuR2V0TW9kZVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLkdldE1vZGVSZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuU2V0TW9kZSA9IHtcbiAgbWV0aG9kTmFtZTogXCJTZXRNb2RlXCIsXG4gIHNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLlNldE1vZGVSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5TZXRNb2RlUmVzcG9uc2Vcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlLkdldExvY2F0aW9uID0ge1xuICBtZXRob2ROYW1lOiBcIkdldExvY2F0aW9uXCIsXG4gIHNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLkdldExvY2F0aW9uUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuR2V0TG9jYXRpb25SZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuR2V0V2F5cG9pbnRzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFdheXBvaW50c1wiLFxuICBzZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5HZXRXYXlwb2ludHNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5HZXRXYXlwb2ludHNSZXNwb25zZVxufTtcblxuTmF2aWdhdGlvblNlcnZpY2UuQWRkV2F5cG9pbnQgPSB7XG4gIG1ldGhvZE5hbWU6IFwiQWRkV2F5cG9pbnRcIixcbiAgc2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9uYXZpZ2F0aW9uX3YxX25hdmlnYXRpb25fcGIuQWRkV2F5cG9pbnRSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5BZGRXYXlwb2ludFJlc3BvbnNlXG59O1xuXG5OYXZpZ2F0aW9uU2VydmljZS5SZW1vdmVXYXlwb2ludCA9IHtcbiAgbWV0aG9kTmFtZTogXCJSZW1vdmVXYXlwb2ludFwiLFxuICBzZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX25hdmlnYXRpb25fdjFfbmF2aWdhdGlvbl9wYi5SZW1vdmVXYXlwb2ludFJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2VfbmF2aWdhdGlvbl92MV9uYXZpZ2F0aW9uX3BiLlJlbW92ZVdheXBvaW50UmVzcG9uc2Vcbn07XG5cbmV4cG9ydHMuTmF2aWdhdGlvblNlcnZpY2UgPSBOYXZpZ2F0aW9uU2VydmljZTtcblxuZnVuY3Rpb24gTmF2aWdhdGlvblNlcnZpY2VDbGllbnQoc2VydmljZUhvc3QsIG9wdGlvbnMpIHtcbiAgdGhpcy5zZXJ2aWNlSG9zdCA9IHNlcnZpY2VIb3N0O1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5OYXZpZ2F0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0TW9kZSA9IGZ1bmN0aW9uIGdldE1vZGUocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLkdldE1vZGUsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5zZXRNb2RlID0gZnVuY3Rpb24gc2V0TW9kZShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoTmF2aWdhdGlvblNlcnZpY2UuU2V0TW9kZSwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTmF2aWdhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0TG9jYXRpb24ocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLkdldExvY2F0aW9uLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5OYXZpZ2F0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUuZ2V0V2F5cG9pbnRzID0gZnVuY3Rpb24gZ2V0V2F5cG9pbnRzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShOYXZpZ2F0aW9uU2VydmljZS5HZXRXYXlwb2ludHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5hZGRXYXlwb2ludCA9IGZ1bmN0aW9uIGFkZFdheXBvaW50KHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShOYXZpZ2F0aW9uU2VydmljZS5BZGRXYXlwb2ludCwge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuTmF2aWdhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlbW92ZVdheXBvaW50ID0gZnVuY3Rpb24gcmVtb3ZlV2F5cG9pbnQocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE5hdmlnYXRpb25TZXJ2aWNlLlJlbW92ZVdheXBvaW50LCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLk5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50ID0gTmF2aWdhdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb24ucHJvdG9cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogQGVuaGFuY2VhYmxlXG4gKiBAc3VwcHJlc3Mge21pc3NpbmdSZXF1aXJlfSByZXBvcnRzIGVycm9yIG9uIGltcGxpY2l0IHR5cGUgdXNhZ2VzLlxuICogQHN1cHByZXNzIHttZXNzYWdlQ29udmVudGlvbnN9IEpTIENvbXBpbGVyIHJlcG9ydHMgYW4gZXJyb3IgaWYgYSB2YXJpYWJsZSBvclxuICogICAgIGZpZWxkIHN0YXJ0cyB3aXRoICdNU0dfJyBhbmQgaXNuJ3QgYSB0cmFuc2xhdGFibGUgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gR0VORVJBVEVEIENPREUgLS0gRE8gTk9UIEVESVQhXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcblxudmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbnZhciBnb29nID0ganNwYjtcbnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzKSB7IHJldHVybiB0aGlzOyB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cbiAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59LmNhbGwobnVsbCkpO1xuXG52YXIgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL2dvb2dsZS9hcGkvYW5ub3RhdGlvbnNfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX2FwaV9hbm5vdGF0aW9uc19wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1Zi9nb29nbGUvcHJvdG9idWYvc3RydWN0X3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlciA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlJztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIGNhbWVyYU5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgc2VnbWVudGVyTmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAyLCBcIlwiKSxcbiAgICBtaW1lVHlwZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAzLCBcIlwiKSxcbiAgICBwYXJhbWV0ZXJzOiAoZiA9IG1zZy5nZXRQYXJhbWV0ZXJzKCkpICYmIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0fSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0Q2FtZXJhTmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFNlZ21lbnRlck5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRNaW1lVHlwZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3Q7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRQYXJhbWV0ZXJzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0Q2FtZXJhTmFtZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFNlZ21lbnRlck5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDIsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRNaW1lVHlwZSgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlU3RyaW5nKFxuICAgICAgMyxcbiAgICAgIGZcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldFBhcmFtZXRlcnMoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICA0LFxuICAgICAgZixcbiAgICAgIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBjYW1lcmFfbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLmdldENhbWVyYU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LnByb3RvdHlwZS5zZXRDYW1lcmFOYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHNlZ21lbnRlcl9uYW1lID0gMjtcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0U2VnbWVudGVyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAyLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnNldFNlZ21lbnRlck5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbWltZV90eXBlID0gMztcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMywgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXF1ZXN0LnByb3RvdHlwZS5zZXRNaW1lVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMywgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgcGFyYW1ldGVycyA9IDQ7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLlN0cnVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgNCkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLnNldFBhcmFtZXRlcnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCA0LCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QucHJvdG90eXBlLmNsZWFyUGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRQYXJhbWV0ZXJzKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVxdWVzdC5wcm90b3R5cGUuaGFzUGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDQpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzJdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbWltZVR5cGU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIiksXG4gICAgb2JqZWN0c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldE9iamVjdHNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdC50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TWltZVR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlBvaW50Q2xvdWRPYmplY3Q7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZE9iamVjdHModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TWltZVR5cGUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRPYmplY3RzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5Qb2ludENsb3VkT2JqZWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIHN0cmluZyBtaW1lX3R5cGUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0TWltZVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldE9iamVjdFBvaW50Q2xvdWRzUmVzcG9uc2UucHJvdG90eXBlLnNldE1pbWVUeXBlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0IG9iamVjdHMgPSAyO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuZ2V0T2JqZWN0c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdD59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUG9pbnRDbG91ZE9iamVjdCwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuc2V0T2JqZWN0c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlBvaW50Q2xvdWRPYmplY3Q9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5Qb2ludENsb3VkT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZS5wcm90b3R5cGUuYWRkT2JqZWN0cyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUG9pbnRDbG91ZE9iamVjdCwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRPYmplY3RQb2ludENsb3Vkc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhck9iamVjdHNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldE9iamVjdHNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlZ21lbnRlck5hbWU6IGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG1zZywgMSwgXCJcIilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5zZXRTZWdtZW50ZXJOYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZWdtZW50ZXJOYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgc2VnbWVudGVyX25hbWUgPSAxO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1JlcXVlc3QucHJvdG90eXBlLmdldFNlZ21lbnRlck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMSwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVxdWVzdC5wcm90b3R5cGUuc2V0U2VnbWVudGVyTmFtZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKSxcbiAgICB0eXBlOiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChtc2csIDIsIFwiXCIpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcjtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXJ9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB2YXIgdmFsdWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgbXNnLnNldFR5cGUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcn0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRUeXBlKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAyLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChqc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLCAxLCBcIlwiKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgc3RyaW5nIHR5cGUgPSAyO1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywgMiwgXCJcIikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcn0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5wcm90b3R5cGUuc2V0VHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywgMiwgdmFsdWUpO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBwYXJhbWV0ZXJzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UGFyYW1ldGVyc0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXIudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlO1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXI7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUGFyYW1ldGVycyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFBhcmFtZXRlcnNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBUeXBlZFBhcmFtZXRlciBwYXJhbWV0ZXJzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcj59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5UeXBlZFBhcmFtZXRlcj59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZS5wcm90b3R5cGUuc2V0UGFyYW1ldGVyc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuVHlwZWRQYXJhbWV0ZXI9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRQYXJhbWV0ZXJzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLlR5cGVkUGFyYW1ldGVyLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyUGFyYW1ldGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5jbGVhclBhcmFtZXRlcnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFBhcmFtZXRlcnNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdDtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1JlcXVlc3R9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZWdtZW50ZXJzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgIG1zZy5hZGRTZWdtZW50ZXJzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U2VnbWVudGVyc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKFxuICAgICAgMSxcbiAgICAgIGZcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgc3RyaW5nIHNlZ21lbnRlcnMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PHN0cmluZz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucHJvdG90eXBlLmdldFNlZ21lbnRlcnNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUgeyFBcnJheTxzdHJpbmc+fSAqLyAoanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2UucHJvdG90eXBlLnNldFNlZ21lbnRlcnNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLCAxLCB2YWx1ZSB8fCBbXSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLm9iamVjdHNlZ21lbnRhdGlvbi52MS5HZXRTZWdtZW50ZXJzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRTZWdtZW50ZXJzID0gZnVuY3Rpb24odmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLCAxLCB2YWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEuR2V0U2VnbWVudGVyc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLkdldFNlZ21lbnRlcnNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTZWdtZW50ZXJzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTZWdtZW50ZXJzTGlzdChbXSk7XG59O1xuXG5cbmdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5vYmplY3RzZWdtZW50YXRpb24udjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxXG4vLyBmaWxlOiBwcm90by9hcGkvc2VydmljZS9vYmplY3RzZWdtZW50YXRpb24vdjEvb2JqZWN0X3NlZ21lbnRhdGlvbi5wcm90b1xuXG52YXIgcHJvdG9fYXBpX3NlcnZpY2Vfb2JqZWN0c2VnbWVudGF0aW9uX3YxX29iamVjdF9zZWdtZW50YXRpb25fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGJcIik7XG52YXIgZ3JwYyA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIikuZ3JwYztcblxudmFyIE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlKCkge31cbiAgT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5zZXJ2aWNlTmFtZSA9IFwicHJvdG8uYXBpLnNlcnZpY2Uub2JqZWN0c2VnbWVudGF0aW9uLnYxLk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VcIjtcbiAgcmV0dXJuIE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2U7XG59KCkpO1xuXG5PYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldE9iamVjdFBvaW50Q2xvdWRzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldE9iamVjdFBvaW50Q2xvdWRzXCIsXG4gIHNlcnZpY2U6IE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9vYmplY3RzZWdtZW50YXRpb25fdjFfb2JqZWN0X3NlZ21lbnRhdGlvbl9wYi5HZXRPYmplY3RQb2ludENsb3Vkc1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfb2JqZWN0c2VnbWVudGF0aW9uX3YxX29iamVjdF9zZWdtZW50YXRpb25fcGIuR2V0T2JqZWN0UG9pbnRDbG91ZHNSZXNwb25zZVxufTtcblxuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5HZXRTZWdtZW50ZXJQYXJhbWV0ZXJzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFNlZ21lbnRlclBhcmFtZXRlcnNcIixcbiAgc2VydmljZTogT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlclBhcmFtZXRlcnNSZXNwb25zZVxufTtcblxuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZS5HZXRTZWdtZW50ZXJzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFNlZ21lbnRlcnNcIixcbiAgc2VydmljZTogT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX29iamVjdHNlZ21lbnRhdGlvbl92MV9vYmplY3Rfc2VnbWVudGF0aW9uX3BiLkdldFNlZ21lbnRlcnNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5PYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlID0gT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZTtcblxuZnVuY3Rpb24gT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldE9iamVjdFBvaW50Q2xvdWRzID0gZnVuY3Rpb24gZ2V0T2JqZWN0UG9pbnRDbG91ZHMocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2UuR2V0T2JqZWN0UG9pbnRDbG91ZHMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFNlZ21lbnRlclBhcmFtZXRlcnMgPSBmdW5jdGlvbiBnZXRTZWdtZW50ZXJQYXJhbWV0ZXJzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldFNlZ21lbnRlclBhcmFtZXRlcnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbk9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFNlZ21lbnRlcnMgPSBmdW5jdGlvbiBnZXRTZWdtZW50ZXJzKHJlcXVlc3RNZXNzYWdlLCBtZXRhZGF0YSwgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgfVxuICB2YXIgY2xpZW50ID0gZ3JwYy51bmFyeShPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlLkdldFNlZ21lbnRlcnMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudCA9IE9iamVjdFNlZ21lbnRhdGlvblNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdF9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiKTtcbnZhciBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vZ29vZ2xlL2FwaS9hbm5vdGF0aW9uc19wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfYXBpX2Fubm90YXRpb25zX3BiKTtcbnZhciBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL3Byb3RvL2FwaS9jb21tb24vdjEvY29tbW9uX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdCcsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZScsIG51bGwsIGdsb2JhbCk7XG5nb29nLmV4cG9ydFN5bWJvbCgncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncycsIG51bGwsIGdsb2JhbCk7XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdCA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgbnVsbCwgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZSA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncyA9IGZ1bmN0aW9uKG9wdF9kYXRhKSB7XG4gIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAwLCAtMSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHNlbnNvck5hbWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0U2Vuc29yTmFtZXNMaXN0KCksXG4gICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRTZW5zb3JOYW1lcyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTZW5zb3JOYW1lc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIHNlbnNvcl9uYW1lcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLmdldFNlbnNvck5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0U2Vuc29yc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2UucHJvdG90eXBlLmFkZFNlbnNvck5hbWVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRTZW5zb3JzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFNlbnNvcnNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U2Vuc29yTmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzZW5zb3JOYW1lc0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFNlbnNvck5hbWVzTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUscHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU2Vuc29yTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0U2Vuc29yTmFtZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBzZW5zb3JfbmFtZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS5nZXRTZW5zb3JOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVxdWVzdC5wcm90b3R5cGUuc2V0U2Vuc29yTmFtZXNMaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0LnByb3RvdHlwZS5hZGRTZW5zb3JOYW1lcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1JlcXVlc3QucHJvdG90eXBlLmNsZWFyU2Vuc29yTmFtZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFNlbnNvck5hbWVzTGlzdChbXSk7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5yZXBlYXRlZEZpZWxkc18gPSBbMl07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0gbXNnLmdldE5hbWUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgcmVhZGluZ3NMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZWFkaW5nc0xpc3QoKSxcbiAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlZhbHVlLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncztcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5nc30gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldE5hbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuVmFsdWU7XG4gICAgICByZWFkZXIucmVhZE1lc3NhZ2UodmFsdWUsZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlYWRpbmdzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZSgpO1xuICBpZiAoZiAhPSBudWxsKSB7XG4gICAgd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxuICBmID0gbWVzc2FnZS5nZXRSZWFkaW5nc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDIsXG4gICAgICBmLFxuICAgICAgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBuYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5nc30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3MucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXROYW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlZhbHVlIHJlYWRpbmdzID0gMjtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlPn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuZ2V0UmVhZGluZ3NMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIGdvb2dsZV9wcm90b2J1Zl9zdHJ1Y3RfcGIuVmFsdWUsIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnByb3RvdHlwZS5zZXRSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5nb29nbGUucHJvdG9idWYuVmFsdWU9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8uZ29vZ2xlLnByb3RvYnVmLlZhbHVlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnByb3RvdHlwZS5hZGRSZWFkaW5ncyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAyLCBvcHRfdmFsdWUsIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy5wcm90b3R5cGUuY2xlYXJSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVhZGluZ3NMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlYWRpbmdzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVhZGluZ3NMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncy50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkUmVhZGluZ3ModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLkdldFJlYWRpbmdzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFJlYWRpbmdzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIFJlYWRpbmdzIHJlYWRpbmdzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5SZWFkaW5ncz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuZ2V0UmVhZGluZ3NMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGV7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3M+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4qL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MS5HZXRSZWFkaW5nc1Jlc3BvbnNlLnByb3RvdHlwZS5zZXRSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuUmVhZGluZ3N9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuYWRkUmVhZGluZ3MgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zZW5zb3JzLnYxLlJlYWRpbmdzLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuR2V0UmVhZGluZ3NSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJSZWFkaW5nc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVhZGluZ3NMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEpO1xuIiwiLy8gcGFja2FnZTogcHJvdG8uYXBpLnNlcnZpY2Uuc2Vuc29ycy52MVxuLy8gZmlsZTogcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzLnByb3RvXG5cbnZhciBwcm90b19hcGlfc2VydmljZV9zZW5zb3JzX3YxX3NlbnNvcnNfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvc2Vuc29ycy92MS9zZW5zb3JzX3BiXCIpO1xudmFyIGdycGMgPSByZXF1aXJlKFwiQGltcHJvYmFibGUtZW5nL2dycGMtd2ViXCIpLmdycGM7XG5cbnZhciBTZW5zb3JzU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNlbnNvcnNTZXJ2aWNlKCkge31cbiAgU2Vuc29yc1NlcnZpY2Uuc2VydmljZU5hbWUgPSBcInByb3RvLmFwaS5zZXJ2aWNlLnNlbnNvcnMudjEuU2Vuc29yc1NlcnZpY2VcIjtcbiAgcmV0dXJuIFNlbnNvcnNTZXJ2aWNlO1xufSgpKTtcblxuU2Vuc29yc1NlcnZpY2UuR2V0U2Vuc29ycyA9IHtcbiAgbWV0aG9kTmFtZTogXCJHZXRTZW5zb3JzXCIsXG4gIHNlcnZpY2U6IFNlbnNvcnNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc2Vuc29yc192MV9zZW5zb3JzX3BiLkdldFNlbnNvcnNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX3NlbnNvcnNfdjFfc2Vuc29yc19wYi5HZXRTZW5zb3JzUmVzcG9uc2Vcbn07XG5cblNlbnNvcnNTZXJ2aWNlLkdldFJlYWRpbmdzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFJlYWRpbmdzXCIsXG4gIHNlcnZpY2U6IFNlbnNvcnNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc2Vuc29yc192MV9zZW5zb3JzX3BiLkdldFJlYWRpbmdzUmVxdWVzdCxcbiAgcmVzcG9uc2VUeXBlOiBwcm90b19hcGlfc2VydmljZV9zZW5zb3JzX3YxX3NlbnNvcnNfcGIuR2V0UmVhZGluZ3NSZXNwb25zZVxufTtcblxuZXhwb3J0cy5TZW5zb3JzU2VydmljZSA9IFNlbnNvcnNTZXJ2aWNlO1xuXG5mdW5jdGlvbiBTZW5zb3JzU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblNlbnNvcnNTZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTZW5zb3JzID0gZnVuY3Rpb24gZ2V0U2Vuc29ycyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU2Vuc29yc1NlcnZpY2UuR2V0U2Vuc29ycywge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3RNZXNzYWdlLFxuICAgIGhvc3Q6IHRoaXMuc2VydmljZUhvc3QsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhLFxuICAgIHRyYW5zcG9ydDogdGhpcy5vcHRpb25zLnRyYW5zcG9ydCxcbiAgICBkZWJ1ZzogdGhpcy5vcHRpb25zLmRlYnVnLFxuICAgIG9uRW5kOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBncnBjLkNvZGUuT0spIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UpO1xuICAgICAgICAgIGVyci5jb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGVyci5tZXRhZGF0YSA9IHJlc3BvbnNlLnRyYWlsZXJzO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuU2Vuc29yc1NlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFJlYWRpbmdzID0gZnVuY3Rpb24gZ2V0UmVhZGluZ3MocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFNlbnNvcnNTZXJ2aWNlLkdldFJlYWRpbmdzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IGdycGMuQ29kZS5PSykge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSk7XG4gICAgICAgICAgZXJyLmNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgZXJyLm1ldGFkYXRhID0gcmVzcG9uc2UudHJhaWxlcnM7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICBjbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLlNlbnNvcnNTZXJ2aWNlQ2xpZW50ID0gU2Vuc29yc1NlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIHNvdXJjZTogcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1cy5wcm90b1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAZW5oYW5jZWFibGVcbiAqIEBzdXBwcmVzcyB7bWlzc2luZ1JlcXVpcmV9IHJlcG9ydHMgZXJyb3Igb24gaW1wbGljaXQgdHlwZSB1c2FnZXMuXG4gKiBAc3VwcHJlc3Mge21lc3NhZ2VDb252ZW50aW9uc30gSlMgQ29tcGlsZXIgcmVwb3J0cyBhbiBlcnJvciBpZiBhIHZhcmlhYmxlIG9yXG4gKiAgICAgZmllbGQgc3RhcnRzIHdpdGggJ01TR18nIGFuZCBpc24ndCBhIHRyYW5zbGF0YWJsZSBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG4vLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuXG52YXIganNwYiA9IHJlcXVpcmUoJ2dvb2dsZS1wcm90b2J1ZicpO1xudmFyIGdvb2cgPSBqc3BiO1xudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMpIHsgcmV0dXJuIHRoaXM7IH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0uY2FsbChudWxsKSk7XG5cbnZhciBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3RfcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYik7XG52YXIgZ29vZ2xlX3Byb3RvYnVmX2R1cmF0aW9uX3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmL2dvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbl9wYi5qcycpO1xuZ29vZy5vYmplY3QuZXh0ZW5kKHByb3RvLCBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIpO1xudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xudmFyIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbmdvb2cub2JqZWN0LmV4dGVuZChwcm90bywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuZGlzcGxheU5hbWUgPSAncHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cyc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXywgbnVsbCk7XG59O1xuZ29vZy5pbmhlcml0cyhwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdCwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0Jztcbn1cbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLCBqc3BiLk1lc3NhZ2UpO1xuaWYgKGdvb2cuREVCVUcgJiYgIUNPTVBJTEVEKSB7XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZSc7XG59XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWU6IChmID0gbXNnLmdldE5hbWUoKSkgJiYgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZiksXG4gICAgc3RhdHVzOiAoZiA9IG1zZy5nZXRTdGF0dXMoKSkgJiYgZ29vZ2xlX3Byb3RvYnVmX3N0cnVjdF9wYi5TdHJ1Y3QudG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZTtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXROYW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdDtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLnNldFN0YXR1cyh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldE5hbWUoKTtcbiAgaWYgKGYgIT0gbnVsbCkge1xuICAgIHdyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbiAgZiA9IG1lc3NhZ2UuZ2V0U3RhdHVzKCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBwcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSBuYW1lID0gMTtcbiAqIEByZXR1cm4gez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcywgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLCAxKSk7XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHs/cHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWV8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c30gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLmNsZWFyTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXROYW1lKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuaGFzTmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDEpICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogb3B0aW9uYWwgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBzdGF0dXMgPSAyO1xuICogQHJldHVybiB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLmdldFN0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlez9wcm90by5nb29nbGUucHJvdG9idWYuU3RydWN0fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfc3RydWN0X3BiLlN0cnVjdCwgMikpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7P3Byb3RvLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3R8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsIDIsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIG1lc3NhZ2UgZmllbGQgbWFraW5nIGl0IHVuZGVmaW5lZC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuY2xlYXJTdGF0dXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0U3RhdHVzKHVuZGVmaW5lZCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5wcm90b3R5cGUuaGFzU3RhdHVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywgMikgIT0gbnVsbDtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18gPSBbMV07XG5cblxuXG5pZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvLlxuICogRmllbGQgbmFtZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gSmF2YVNjcmlwdCBhbmQgd2lsbCBiZSByZW5hbWVkIHRvIHBiX25hbWUuXG4gKiBPcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgbm90IHNldCB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gKiBUbyBhY2Nlc3MgYSByZXNlcnZlZCBmaWVsZCB1c2UsIGZvby5wYl88bmFtZT4sIGVnLCBmb28ucGJfZGVmYXVsdC5cbiAqIEZvciB0aGUgbGlzdCBvZiByZXNlcnZlZCBuYW1lcyBwbGVhc2Ugc2VlOlxuICogICAgIG5ldC9wcm90bzIvY29tcGlsZXIvanMvaW50ZXJuYWwvZ2VuZXJhdG9yLmNjI2tLZXl3b3JkLlxuICogQHBhcmFtIHtib29sZWFuPX0gb3B0X2luY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlXG4gKiAgICAgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbXNnIGluc3RhbmNlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4geyFPYmplY3R9XG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICByZXNvdXJjZU5hbWVzTGlzdDoganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdChtc2cuZ2V0UmVzb3VyY2VOYW1lc0xpc3QoKSxcbiAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUudG9PYmplY3QsIGluY2x1ZGVJbnN0YW5jZSlcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlc291cmNlTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0UmVzb3VyY2VOYW1lc0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lIHJlc291cmNlX25hbWVzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPn0gKi8gKFxuICAgIGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT19IG9wdF92YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1JlcXVlc3QucHJvdG90eXBlLmFkZFJlc291cmNlTmFtZXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZSwgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5jbGVhclJlc291cmNlTmFtZXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFJlc291cmNlTmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG4vKipcbiAqIExpc3Qgb2YgcmVwZWF0ZWQgZmllbGRzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZS5cbiAqIEBwcml2YXRlIHshQXJyYXk8bnVtYmVyPn1cbiAqIEBjb25zdFxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfID0gWzFdO1xuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0KG9wdF9pbmNsdWRlSW5zdGFuY2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9kLlxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIFdoZXRoZXIgdG8gaW5jbHVkZVxuICogICAgIHRoZSBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHN0YXR1c0xpc3Q6IGpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldFN0YXR1c0xpc3QoKSxcbiAgICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpXG4gIH07XG5cbiAgaWYgKGluY2x1ZGVJbnN0YW5jZSkge1xuICAgIG9iai4kanNwYk1lc3NhZ2VJbnN0YW5jZSA9IG1zZztcbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbn1cblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVzIFRoZSBieXRlcyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZTtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5hZGRTdGF0dXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4gIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbihtZXNzYWdlLCB3cml0ZXIpIHtcbiAgdmFyIGYgPSB1bmRlZmluZWQ7XG4gIGYgPSBtZXNzYWdlLmdldFN0YXR1c0xpc3QoKTtcbiAgaWYgKGYubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgIDEsXG4gICAgICBmLFxuICAgICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiByZXBlYXRlZCBTdGF0dXMgc3RhdHVzID0gMTtcbiAqIEByZXR1cm4geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3RhdHVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59ICovIChcbiAgICBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzPn0gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuR2V0U3RhdHVzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuc2V0U3RhdHVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM9fSBvcHRfdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2luZGV4XG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1c31cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLkdldFN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5hZGRTdGF0dXMgPSBmdW5jdGlvbihvcHRfdmFsdWUsIG9wdF9pbmRleCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgb3B0X3ZhbHVlLCBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5HZXRTdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTdGF0dXNMaXN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNldFN0YXR1c0xpc3QoW10pO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIHJlc291cmNlTmFtZXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRSZXNvdXJjZU5hbWVzTGlzdCgpLFxuICAgIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKSxcbiAgICBldmVyeTogKGYgPSBtc2cuZ2V0RXZlcnkoKSkgJiYgZ29vZ2xlX3Byb3RvYnVmX2R1cmF0aW9uX3BiLkR1cmF0aW9uLnRvT2JqZWN0KGluY2x1ZGVJbnN0YW5jZSwgZilcbiAgfTtcblxuICBpZiAoaW5jbHVkZUluc3RhbmNlKSB7XG4gICAgb2JqLiRqc3BiTWVzc2FnZUluc3RhbmNlID0gbXNnO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xufVxuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZX0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlc2VyaWFsaXplLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0O1xuICByZXR1cm4gcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG9fYXBpX2NvbW1vbl92MV9jb21tb25fcGIuUmVzb3VyY2VOYW1lO1xuICAgICAgcmVhZGVyLnJlYWRNZXNzYWdlKHZhbHVlLHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgbXNnLmFkZFJlc291cmNlTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdmFyIHZhbHVlID0gbmV3IGdvb2dsZV9wcm90b2J1Zl9kdXJhdGlvbl9wYi5EdXJhdGlvbjtcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKTtcbiAgICAgIG1zZy5zZXRFdmVyeSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRSZXNvdXJjZU5hbWVzTGlzdCgpO1xuICBpZiAoZi5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgMSxcbiAgICAgIGYsXG4gICAgICBwcm90b19hcGlfY29tbW9uX3YxX2NvbW1vbl9wYi5SZXNvdXJjZU5hbWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG4gIGYgPSBtZXNzYWdlLmdldEV2ZXJ5KCk7XG4gIGlmIChmICE9IG51bGwpIHtcbiAgICB3cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgMixcbiAgICAgIGYsXG4gICAgICBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgcHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWUgcmVzb3VyY2VfbmFtZXMgPSAxO1xuICogQHJldHVybiB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZU5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBleyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLmNvbW1vbi52MS5SZXNvdXJjZU5hbWU+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvX2FwaV9jb21tb25fdjFfY29tbW9uX3BiLlJlc291cmNlTmFtZSwgMSkpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IUFycmF5PCFwcm90by5wcm90by5hcGkuY29tbW9uLnYxLlJlc291cmNlTmFtZT59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXNvdXJjZU5hbWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywgMSwgdmFsdWUpO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuYWRkUmVzb3VyY2VOYW1lcyA9IGZ1bmN0aW9uKG9wdF92YWx1ZSwgb3B0X2luZGV4KSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLCAxLCBvcHRfdmFsdWUsIHByb3RvLnByb3RvLmFwaS5jb21tb24udjEuUmVzb3VyY2VOYW1lLCBvcHRfaW5kZXgpO1xufTtcblxuXG4vKipcbiAqIENsZWFycyB0aGUgbGlzdCBtYWtpbmcgaXQgZW1wdHkgYnV0IG5vbi1udWxsLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3QucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VOYW1lc0xpc3QoW10pO1xufTtcblxuXG4vKipcbiAqIG9wdGlvbmFsIGdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiBldmVyeSA9IDI7XG4gKiBAcmV0dXJuIHs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuZ2V0RXZlcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXs/cHJvdG8uZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9ufSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLCBnb29nbGVfcHJvdG9idWZfZHVyYXRpb25fcGIuRHVyYXRpb24sIDIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0gez9wcm90by5nb29nbGUucHJvdG9idWYuRHVyYXRpb258dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0fSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuc2V0RXZlcnkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLCAyLCB2YWx1ZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBtZXNzYWdlIGZpZWxkIG1ha2luZyBpdCB1bmRlZmluZWQuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1JlcXVlc3R9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFdmVyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRFdmVyeSh1bmRlZmluZWQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGlzIHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXF1ZXN0LnByb3RvdHlwZS5oYXNFdmVyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsIDIpICE9IG51bGw7XG59O1xuXG5cblxuLyoqXG4gKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4gKiBAcHJpdmF0ZSB7IUFycmF5PG51bWJlcj59XG4gKiBAY29uc3RcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcbiAgICBzdGF0dXNMaXN0OiBqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KG1zZy5nZXRTdGF0dXNMaXN0KCksXG4gICAgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cy50b09iamVjdCwgaW5jbHVkZUluc3RhbmNlKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cztcbiAgICAgIHJlYWRlci5yZWFkTWVzc2FnZSh2YWx1ZSxwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4gICAgICBtc2cuYWRkU3RhdHVzKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1zZztcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4gKiBAcmV0dXJuIHshVWludDhBcnJheX1cbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2V9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5V3JpdGVyfSB3cml0ZXJcbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXRTdGF0dXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAxLFxuICAgICAgZixcbiAgICAgIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICApO1xuICB9XG59O1xuXG5cbi8qKlxuICogcmVwZWF0ZWQgU3RhdHVzIHN0YXR1cyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM+fVxuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmdldFN0YXR1c0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZXshQXJyYXk8IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXM+fSAqLyAoXG4gICAganNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTwhcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cz59IHZhbHVlXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0cmVhbVN0YXR1c1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLnNldFN0YXR1c0xpc3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4ganNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIHZhbHVlKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzPX0gb3B0X3ZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IG9wdF9pbmRleFxuICogQHJldHVybiB7IXByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdGF0dXN9XG4gKi9cbnByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MS5TdHJlYW1TdGF0dXNSZXNwb25zZS5wcm90b3R5cGUuYWRkU3RhdHVzID0gZnVuY3Rpb24ob3B0X3ZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsIDEsIG9wdF92YWx1ZSwgcHJvdG8ucHJvdG8uYXBpLnNlcnZpY2Uuc3RhdHVzLnYxLlN0YXR1cywgb3B0X2luZGV4KTtcbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGxpc3QgbWFraW5nIGl0IGVtcHR5IGJ1dCBub24tbnVsbC5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RyZWFtU3RhdHVzUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyU3RhdHVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXRTdGF0dXNMaXN0KFtdKTtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLmFwaS5zZXJ2aWNlLnN0YXR1cy52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5hcGkuc2VydmljZS5zdGF0dXMudjFcbi8vIGZpbGU6IHByb3RvL2FwaS9zZXJ2aWNlL3N0YXR1cy92MS9zdGF0dXMucHJvdG9cblxudmFyIHByb3RvX2FwaV9zZXJ2aWNlX3N0YXR1c192MV9zdGF0dXNfcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1c19wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgU3RhdHVzU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0YXR1c1NlcnZpY2UoKSB7fVxuICBTdGF0dXNTZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5hcGkuc2VydmljZS5zdGF0dXMudjEuU3RhdHVzU2VydmljZVwiO1xuICByZXR1cm4gU3RhdHVzU2VydmljZTtcbn0oKSk7XG5cblN0YXR1c1NlcnZpY2UuR2V0U3RhdHVzID0ge1xuICBtZXRob2ROYW1lOiBcIkdldFN0YXR1c1wiLFxuICBzZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICByZXF1ZXN0VHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc3RhdHVzX3YxX3N0YXR1c19wYi5HZXRTdGF0dXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX2FwaV9zZXJ2aWNlX3N0YXR1c192MV9zdGF0dXNfcGIuR2V0U3RhdHVzUmVzcG9uc2Vcbn07XG5cblN0YXR1c1NlcnZpY2UuU3RyZWFtU3RhdHVzID0ge1xuICBtZXRob2ROYW1lOiBcIlN0cmVhbVN0YXR1c1wiLFxuICBzZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlLFxuICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgcmVzcG9uc2VTdHJlYW06IHRydWUsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19hcGlfc2VydmljZV9zdGF0dXNfdjFfc3RhdHVzX3BiLlN0cmVhbVN0YXR1c1JlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fYXBpX3NlcnZpY2Vfc3RhdHVzX3YxX3N0YXR1c19wYi5TdHJlYW1TdGF0dXNSZXNwb25zZVxufTtcblxuZXhwb3J0cy5TdGF0dXNTZXJ2aWNlID0gU3RhdHVzU2VydmljZTtcblxuZnVuY3Rpb24gU3RhdHVzU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0YXR1c1NlcnZpY2VDbGllbnQucHJvdG90eXBlLmdldFN0YXR1cyA9IGZ1bmN0aW9uIGdldFN0YXR1cyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU3RhdHVzU2VydmljZS5HZXRTdGF0dXMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblN0YXR1c1NlcnZpY2VDbGllbnQucHJvdG90eXBlLnN0cmVhbVN0YXR1cyA9IGZ1bmN0aW9uIHN0cmVhbVN0YXR1cyhyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEpIHtcbiAgdmFyIGxpc3RlbmVycyA9IHtcbiAgICBkYXRhOiBbXSxcbiAgICBlbmQ6IFtdLFxuICAgIHN0YXR1czogW11cbiAgfTtcbiAgdmFyIGNsaWVudCA9IGdycGMuaW52b2tlKFN0YXR1c1NlcnZpY2UuU3RyZWFtU3RhdHVzLCB7XG4gICAgcmVxdWVzdDogcmVxdWVzdE1lc3NhZ2UsXG4gICAgaG9zdDogdGhpcy5zZXJ2aWNlSG9zdCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMudHJhbnNwb3J0LFxuICAgIGRlYnVnOiB0aGlzLm9wdGlvbnMuZGVidWcsXG4gICAgb25NZXNzYWdlOiBmdW5jdGlvbiAocmVzcG9uc2VNZXNzYWdlKSB7XG4gICAgICBsaXN0ZW5lcnMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIocmVzcG9uc2VNZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25FbmQ6IGZ1bmN0aW9uIChzdGF0dXMsIHN0YXR1c01lc3NhZ2UsIHRyYWlsZXJzKSB7XG4gICAgICBsaXN0ZW5lcnMuc3RhdHVzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcih7IGNvZGU6IHN0YXR1cywgZGV0YWlsczogc3RhdHVzTWVzc2FnZSwgbWV0YWRhdGE6IHRyYWlsZXJzIH0pO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMuZW5kLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcih7IGNvZGU6IHN0YXR1cywgZGV0YWlsczogc3RhdHVzTWVzc2FnZSwgbWV0YWRhdGE6IHRyYWlsZXJzIH0pO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb246IGZ1bmN0aW9uICh0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBsaXN0ZW5lcnNbdHlwZV0ucHVzaChoYW5kbGVyKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5TdGF0dXNTZXJ2aWNlQ2xpZW50ID0gU3RhdHVzU2VydmljZUNsaWVudDtcblxuIiwiLy8gc291cmNlOiBwcm90by9zdHJlYW0vdjEvc3RyZWFtLnByb3RvXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBlbmhhbmNlYWJsZVxuICogQHN1cHByZXNzIHttaXNzaW5nUmVxdWlyZX0gcmVwb3J0cyBlcnJvciBvbiBpbXBsaWNpdCB0eXBlIHVzYWdlcy5cbiAqIEBzdXBwcmVzcyB7bWVzc2FnZUNvbnZlbnRpb25zfSBKUyBDb21waWxlciByZXBvcnRzIGFuIGVycm9yIGlmIGEgdmFyaWFibGUgb3JcbiAqICAgICBmaWVsZCBzdGFydHMgd2l0aCAnTVNHXycgYW5kIGlzbid0IGEgdHJhbnNsYXRhYmxlIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbi8vIEdFTkVSQVRFRCBDT0RFIC0tIERPIE5PVCBFRElUIVxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5cbnZhciBqc3BiID0gcmVxdWlyZSgnZ29vZ2xlLXByb3RvYnVmJyk7XG52YXIgZ29vZyA9IGpzcGI7XG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcykgeyByZXR1cm4gdGhpczsgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufS5jYWxsKG51bGwpKTtcblxudmFyIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIgPSByZXF1aXJlKCcuLi8uLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zX3BiLmpzJyk7XG5nb29nLm9iamVjdC5leHRlbmQocHJvdG8sIGdvb2dsZV9hcGlfYW5ub3RhdGlvbnNfcGIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0JywgbnVsbCwgZ2xvYmFsKTtcbmdvb2cuZXhwb3J0U3ltYm9sKCdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QnLCBudWxsLCBnbG9iYWwpO1xuZ29vZy5leHBvcnRTeW1ib2woJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlJywgbnVsbCwgZ2xvYmFsKTtcbi8qKlxuICogR2VuZXJhdGVkIGJ5IEpzUGJDb2RlR2VuZXJhdG9yLlxuICogQHBhcmFtIHtBcnJheT19IG9wdF9kYXRhIE9wdGlvbmFsIGluaXRpYWwgZGF0YSBhcnJheSwgdHlwaWNhbGx5IGZyb20gYVxuICogc2VydmVyIHJlc3BvbnNlLCBvciBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0LiBUaGUgYXJyYXkgaXMgdXNlZFxuICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgY2xvbmVkLlxuICogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LCBidXQgc3RpbGxcbiAqIHZhbGlkLlxuICogQGV4dGVuZHMge2pzcGIuTWVzc2FnZX1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0ID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ3Byb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QnO1xufVxuLyoqXG4gKiBHZW5lcmF0ZWQgYnkgSnNQYkNvZGVHZW5lcmF0b3IuXG4gKiBAcGFyYW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2FsbHkgZnJvbSBhXG4gKiBzZXJ2ZXIgcmVzcG9uc2UsIG9yIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIEphdmFzY3JpcHQuIFRoZSBhcnJheSBpcyB1c2VkXG4gKiBpbiBwbGFjZSBhbmQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuIEl0IGlzIG5vdCBjbG9uZWQuXG4gKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHksIGJ1dCBzdGlsbFxuICogdmFsaWQuXG4gKiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZSc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbihvcHRfZGF0YSkge1xuICBqc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLCBvcHRfZGF0YSwgMCwgLTEsIG51bGwsIG51bGwpO1xufTtcbmdvb2cuaW5oZXJpdHMocHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QsIGpzcGIuTWVzc2FnZSk7XG5pZiAoZ29vZy5ERUJVRyAmJiAhQ09NUElMRUQpIHtcbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdCc7XG59XG4vKipcbiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiAqIEBwYXJhbSB7QXJyYXk9fSBvcHRfZGF0YSBPcHRpb25hbCBpbml0aWFsIGRhdGEgYXJyYXksIHR5cGljYWxseSBmcm9tIGFcbiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29uc3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5IGlzIHVzZWRcbiAqIGluIHBsYWNlIGFuZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIG9iamVjdC4gSXQgaXMgbm90IGNsb25lZC5cbiAqIElmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eSwgYnV0IHN0aWxsXG4gKiB2YWxpZC5cbiAqIEBleHRlbmRzIHtqc3BiLk1lc3NhZ2V9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtcbiAganNwYi5NZXNzYWdlLmluaXRpYWxpemUodGhpcywgb3B0X2RhdGEsIDAsIC0xLCBudWxsLCBudWxsKTtcbn07XG5nb29nLmluaGVyaXRzKHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZSwganNwYi5NZXNzYWdlKTtcbmlmIChnb29nLkRFQlVHICYmICFDT01QSUxFRCkge1xuICAvKipcbiAgICogQHB1YmxpY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5kaXNwbGF5TmFtZSA9ICdwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UnO1xufVxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3QudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcganNwYi5CaW5hcnlSZWFkZXIoYnl0ZXMpO1xuICB2YXIgbXNnID0gbmV3IHByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG59O1xuXG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkgZnJvbSB0aGVcbiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1JlcXVlc3R9IG1zZyBUaGUgbWVzc2FnZSBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50by5cbiAqIEBwYXJhbSB7IWpzcGIuQmluYXJ5UmVhZGVyfSByZWFkZXIgVGhlIEJpbmFyeVJlYWRlciB0byB1c2UuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIgPSBmdW5jdGlvbihtc2csIHJlYWRlcikge1xuICB3aGlsZSAocmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgaWYgKHJlYWRlci5pc0VuZEdyb3VwKCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZmllbGQgPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKTtcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVxdWVzdH0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xufTtcblxuXG5cbi8qKlxuICogTGlzdCBvZiByZXBlYXRlZCBmaWVsZHMgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLlxuICogQHByaXZhdGUgeyFBcnJheTxudW1iZXI+fVxuICogQGNvbnN0XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyA9IFsxXTtcblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24ob3B0X2luY2x1ZGVJbnN0YW5jZSkge1xuICByZXR1cm4gcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UudG9PYmplY3Qob3B0X2luY2x1ZGVJbnN0YW5jZSwgdGhpcyk7XG59O1xuXG5cbi8qKlxuICogU3RhdGljIHZlcnNpb24gb2YgdGhlIHtAc2VlIHRvT2JqZWN0fSBtZXRob2QuXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBpbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gV2hldGhlciB0byBpbmNsdWRlXG4gKiAgICAgdGhlIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuICB2YXIgZiwgb2JqID0ge1xuICAgIG5hbWVzTGlzdDogKGYgPSBqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChtc2csIDEpKSA9PSBudWxsID8gdW5kZWZpbmVkIDogZlxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2V9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuYWRkTmFtZXModmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbXNnO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEByZXR1cm4geyFVaW50OEFycmF5fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbn07XG5cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlXG4gKiBmb3JtYXQpLCB3cml0aW5nIHRvIHRoZSBnaXZlbiBCaW5hcnlXcml0ZXIuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gbWVzc2FnZVxuICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbiAgZiA9IG1lc3NhZ2UuZ2V0TmFtZXNMaXN0KCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyhcbiAgICAgIDEsXG4gICAgICBmXG4gICAgKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIHJlcGVhdGVkIHN0cmluZyBuYW1lcyA9IDE7XG4gKiBAcmV0dXJuIHshQXJyYXk8c3RyaW5nPn1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLmdldE5hbWVzTGlzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHshQXJyYXk8c3RyaW5nPn0gKi8gKGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsIDEpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0geyFBcnJheTxzdHJpbmc+fSB2YWx1ZVxuICogQHJldHVybiB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlfSByZXR1cm5zIHRoaXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2UucHJvdG90eXBlLnNldE5hbWVzTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQodGhpcywgMSwgdmFsdWUgfHwgW10pO1xufTtcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfaW5kZXhcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZX0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5MaXN0U3RyZWFtc1Jlc3BvbnNlLnByb3RvdHlwZS5hZGROYW1lcyA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRfaW5kZXgpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywgMSwgdmFsdWUsIG9wdF9pbmRleCk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIHRoZSBsaXN0IG1ha2luZyBpdCBlbXB0eSBidXQgbm9uLW51bGwuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkxpc3RTdHJlYW1zUmVzcG9uc2V9IHJldHVybnMgdGhpc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuTGlzdFN0cmVhbXNSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJOYW1lc0xpc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2V0TmFtZXNMaXN0KFtdKTtcbn07XG5cblxuXG5cblxuaWYgKGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QpIHtcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwcm90by5cbiAqIEZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlc2VydmVkIGluIEphdmFTY3JpcHQgYW5kIHdpbGwgYmUgcmVuYW1lZCB0byBwYl9uYW1lLlxuICogT3B0aW9uYWwgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICogVG8gYWNjZXNzIGEgcmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4gKiBGb3IgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgbmFtZXMgcGxlYXNlIHNlZTpcbiAqICAgICBuZXQvcHJvdG8yL2NvbXBpbGVyL2pzL2ludGVybmFsL2dlbmVyYXRvci5jYyNrS2V5d29yZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgRGVwcmVjYXRlZC4gd2hldGhlciB0byBpbmNsdWRlIHRoZVxuICogICAgIEpTUEIgaW5zdGFuY2UgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDpcbiAqICAgICBodHRwOi8vZ290by9zb3ktcGFyYW0tbWlncmF0aW9uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbihvcHRfaW5jbHVkZUluc3RhbmNlKSB7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0fSBtc2cgVGhlIG1zZyBpbnN0YW5jZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHshT2JqZWN0fVxuICogQHN1cHByZXNzIHt1bnVzZWRMb2NhbFZhcmlhYmxlc30gZiBpcyBvbmx5IHVzZWQgZm9yIG5lc3RlZCBtZXNzYWdlc1xuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uKGluY2x1ZGVJbnN0YW5jZSwgbXNnKSB7XG4gIHZhciBmLCBvYmogPSB7XG4gICAgbmFtZToganNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobXNnLCAxLCBcIlwiKVxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3R9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBqc3BiLkJpbmFyeVJlYWRlcihieXRlcyk7XG4gIHZhciBtc2cgPSBuZXcgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3Q7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobXNnLCByZWFkZXIpO1xufTtcblxuXG4vKipcbiAqIERlc2VyaWFsaXplcyBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpIGZyb20gdGhlXG4gKiBnaXZlbiByZWFkZXIgaW50byB0aGUgZ2l2ZW4gbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH0gbXNnIFRoZSBtZXNzYWdlIG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLlxuICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRlciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyID0gZnVuY3Rpb24obXNnLCByZWFkZXIpIHtcbiAgd2hpbGUgKHJlYWRlci5uZXh0RmllbGQoKSkge1xuICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB2YWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICBtc2cuc2V0TmFtZSh2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpO1xuICBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xufTtcblxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmVcbiAqIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0fSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyID0gZnVuY3Rpb24obWVzc2FnZSwgd3JpdGVyKSB7XG4gIHZhciBmID0gdW5kZWZpbmVkO1xuICBmID0gbWVzc2FnZS5nZXROYW1lKCk7XG4gIGlmIChmLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZXIud3JpdGVTdHJpbmcoXG4gICAgICAxLFxuICAgICAgZlxuICAgICk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsIDEsIFwiXCIpKTtcbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4geyFwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVxdWVzdH0gcmV0dXJucyB0aGlzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXF1ZXN0LnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLCAxLCB2YWx1ZSk7XG59O1xuXG5cblxuXG5cbmlmIChqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUKSB7XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8uXG4gKiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJlIHJlbmFtZWQgdG8gcGJfbmFtZS5cbiAqIE9wdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3Qgc2V0IHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC5cbiAqIFRvIGFjY2VzcyBhIHJlc2VydmVkIGZpZWxkIHVzZSwgZm9vLnBiXzxuYW1lPiwgZWcsIGZvby5wYl9kZWZhdWx0LlxuICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4gKiAgICAgbmV0L3Byb3RvMi9jb21waWxlci9qcy9pbnRlcm5hbC9nZW5lcmF0b3IuY2Mja0tleXdvcmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVkZUluc3RhbmNlIERlcHJlY2F0ZWQuIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGVcbiAqICAgICBKU1BCIGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4gKiAgICAgaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvblxuICogQHJldHVybiB7IU9iamVjdH1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiAgcmV0dXJuIHByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBTdGF0aWMgdmVyc2lvbiBvZiB0aGUge0BzZWUgdG9PYmplY3R9IG1ldGhvZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5jZSBEZXByZWNhdGVkLiBXaGV0aGVyIHRvIGluY2x1ZGVcbiAqICAgICB0aGUgSlNQQiBpbnN0YW5jZSBmb3IgdHJhbnNpdGlvbmFsIHNveSBwcm90byBzdXBwb3J0OlxuICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiAqIEBwYXJhbSB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZX0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7IU9iamVjdH1cbiAqIEBzdXBwcmVzcyB7dW51c2VkTG9jYWxWYXJpYWJsZXN9IGYgaXMgb25seSB1c2VkIGZvciBuZXN0ZWQgbWVzc2FnZXNcbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24oaW5jbHVkZUluc3RhbmNlLCBtc2cpIHtcbiAgdmFyIGYsIG9iaiA9IHtcblxuICB9O1xuXG4gIGlmIChpbmNsdWRlSW5zdGFuY2UpIHtcbiAgICBvYmouJGpzcGJNZXNzYWdlSW5zdGFuY2UgPSBtc2c7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG59XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KS5cbiAqIEBwYXJhbSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJuIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfVxuICovXG5wcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkgPSBmdW5jdGlvbihieXRlcykge1xuICB2YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiAgdmFyIG1zZyA9IG5ldyBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2U7XG4gIHJldHVybiBwcm90by5wcm90by5zdHJlYW0udjEuQWRkU3RyZWFtUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG1zZywgcmVhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuICogZ2l2ZW4gcmVhZGVyIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFsaXplIGludG8uXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyIFRoZSBCaW5hcnlSZWFkZXIgdG8gdXNlLlxuICogQHJldHVybiB7IXByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZX1cbiAqL1xucHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4gIHdoaWxlIChyZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICBpZiAocmVhZGVyLmlzRW5kR3JvdXAoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmaWVsZCA9IHJlYWRlci5nZXRGaWVsZE51bWJlcigpO1xuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBtc2c7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTtcbiAgcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG59O1xuXG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZVxuICogZm9ybWF0KSwgd3JpdGluZyB0byB0aGUgZ2l2ZW4gQmluYXJ5V3JpdGVyLlxuICogQHBhcmFtIHshcHJvdG8ucHJvdG8uc3RyZWFtLnYxLkFkZFN0cmVhbVJlc3BvbnNlfSBtZXNzYWdlXG4gKiBAcGFyYW0geyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4gKiBAc3VwcHJlc3Mge3VudXNlZExvY2FsVmFyaWFibGVzfSBmIGlzIG9ubHkgdXNlZCBmb3IgbmVzdGVkIG1lc3NhZ2VzXG4gKi9cbnByb3RvLnByb3RvLnN0cmVhbS52MS5BZGRTdHJlYW1SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHdyaXRlcikge1xuICB2YXIgZiA9IHVuZGVmaW5lZDtcbn07XG5cblxuZ29vZy5vYmplY3QuZXh0ZW5kKGV4cG9ydHMsIHByb3RvLnByb3RvLnN0cmVhbS52MSk7XG4iLCIvLyBwYWNrYWdlOiBwcm90by5zdHJlYW0udjFcbi8vIGZpbGU6IHByb3RvL3N0cmVhbS92MS9zdHJlYW0ucHJvdG9cblxudmFyIHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIgPSByZXF1aXJlKFwiLi4vLi4vLi4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYlwiKTtcbnZhciBncnBjID0gcmVxdWlyZShcIkBpbXByb2JhYmxlLWVuZy9ncnBjLXdlYlwiKS5ncnBjO1xuXG52YXIgU3RyZWFtU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0cmVhbVNlcnZpY2UoKSB7fVxuICBTdHJlYW1TZXJ2aWNlLnNlcnZpY2VOYW1lID0gXCJwcm90by5zdHJlYW0udjEuU3RyZWFtU2VydmljZVwiO1xuICByZXR1cm4gU3RyZWFtU2VydmljZTtcbn0oKSk7XG5cblN0cmVhbVNlcnZpY2UuTGlzdFN0cmVhbXMgPSB7XG4gIG1ldGhvZE5hbWU6IFwiTGlzdFN0cmVhbXNcIixcbiAgc2VydmljZTogU3RyZWFtU2VydmljZSxcbiAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgcmVxdWVzdFR5cGU6IHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIuTGlzdFN0cmVhbXNSZXF1ZXN0LFxuICByZXNwb25zZVR5cGU6IHByb3RvX3N0cmVhbV92MV9zdHJlYW1fcGIuTGlzdFN0cmVhbXNSZXNwb25zZVxufTtcblxuU3RyZWFtU2VydmljZS5BZGRTdHJlYW0gPSB7XG4gIG1ldGhvZE5hbWU6IFwiQWRkU3RyZWFtXCIsXG4gIHNlcnZpY2U6IFN0cmVhbVNlcnZpY2UsXG4gIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gIHJlcXVlc3RUeXBlOiBwcm90b19zdHJlYW1fdjFfc3RyZWFtX3BiLkFkZFN0cmVhbVJlcXVlc3QsXG4gIHJlc3BvbnNlVHlwZTogcHJvdG9fc3RyZWFtX3YxX3N0cmVhbV9wYi5BZGRTdHJlYW1SZXNwb25zZVxufTtcblxuZXhwb3J0cy5TdHJlYW1TZXJ2aWNlID0gU3RyZWFtU2VydmljZTtcblxuZnVuY3Rpb24gU3RyZWFtU2VydmljZUNsaWVudChzZXJ2aWNlSG9zdCwgb3B0aW9ucykge1xuICB0aGlzLnNlcnZpY2VIb3N0ID0gc2VydmljZUhvc3Q7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0cmVhbVNlcnZpY2VDbGllbnQucHJvdG90eXBlLmxpc3RTdHJlYW1zID0gZnVuY3Rpb24gbGlzdFN0cmVhbXMocmVxdWVzdE1lc3NhZ2UsIG1ldGFkYXRhLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuICB9XG4gIHZhciBjbGllbnQgPSBncnBjLnVuYXJ5KFN0cmVhbVNlcnZpY2UuTGlzdFN0cmVhbXMsIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cblN0cmVhbVNlcnZpY2VDbGllbnQucHJvdG90eXBlLmFkZFN0cmVhbSA9IGZ1bmN0aW9uIGFkZFN0cmVhbShyZXF1ZXN0TWVzc2FnZSwgbWV0YWRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG4gIH1cbiAgdmFyIGNsaWVudCA9IGdycGMudW5hcnkoU3RyZWFtU2VydmljZS5BZGRTdHJlYW0sIHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0TWVzc2FnZSxcbiAgICBob3N0OiB0aGlzLnNlcnZpY2VIb3N0LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy50cmFuc3BvcnQsXG4gICAgZGVidWc6IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICBvbkVuZDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gZ3JwYy5Db2RlLk9LKSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNNZXNzYWdlKTtcbiAgICAgICAgICBlcnIuY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICBlcnIubWV0YWRhdGEgPSByZXNwb25zZS50cmFpbGVycztcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMuU3RyZWFtU2VydmljZUNsaWVudCA9IFN0cmVhbVNlcnZpY2VDbGllbnQ7XG5cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCB7IGdycGMgfSA9IHJlcXVpcmUoXCJAaW1wcm9iYWJsZS1lbmcvZ3JwYy13ZWJcIik7XG53aW5kb3cucm9ib3RBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGIuanMnKTtcbmNvbnN0IHsgUm9ib3RTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvcm9ib3QvdjEvcm9ib3RfcGJfc2VydmljZS5qcycpO1xud2luZG93Lm1ldGFkYXRhQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbWV0YWRhdGEvdjEvbWV0YWRhdGFfcGIuanMnKTtcbmNvbnN0IHsgTWV0YWRhdGFTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9tZXRhZGF0YS92MS9tZXRhZGF0YV9wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuY29tbW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbW1vbi92MS9jb21tb25fcGIuanMnKTtcbndpbmRvdy5hcm1BcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2FybS92MS9hcm1fcGIuanMnKTtcbmNvbnN0IHsgQXJtU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9hcm0vdjEvYXJtX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5iYXNlQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9iYXNlL3YxL2Jhc2VfcGIuanMnKTtcbmNvbnN0IHsgQmFzZVNlcnZpY2VDbGllbnQgfSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYmFzZS92MS9iYXNlX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5ib2FyZEFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvYm9hcmQvdjEvYm9hcmRfcGIuanMnKTtcbmNvbnN0IHsgQm9hcmRTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2JvYXJkL3YxL2JvYXJkX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5jYW1lcmFBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2NhbWVyYS92MS9jYW1lcmFfcGIuanMnKTtcbmNvbnN0IHsgQ2FtZXJhU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9jYW1lcmEvdjEvY2FtZXJhX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5mb3JjZU1hdHJpeEFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZm9yY2VtYXRyaXgvdjEvZm9yY2VfbWF0cml4X3BiLmpzJyk7XG5jb25zdCB7IEZvcmNlTWF0cml4U2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9mb3JjZW1hdHJpeC92MS9mb3JjZV9tYXRyaXhfcGJfc2VydmljZS5qcycpO1xud2luZG93LmdhbnRyeUFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvZ2FudHJ5L3YxL2dhbnRyeV9wYi5qcycpO1xuY29uc3QgeyBHYW50cnlTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2dhbnRyeS92MS9nYW50cnlfcGJfc2VydmljZS5qcycpO1xud2luZG93LmdyaXBwZXJBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2dyaXBwZXIvdjEvZ3JpcHBlcl9wYi5qcycpO1xuY29uc3QgeyBHcmlwcGVyU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9ncmlwcGVyL3YxL2dyaXBwZXJfcGJfc2VydmljZS5qcycpO1xud2luZG93LmltdUFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvaW11L3YxL2ltdV9wYi5qcycpO1xuY29uc3QgeyBJTVVTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2ltdS92MS9pbXVfcGJfc2VydmljZS5qcycpO1xud2luZG93LmlucHV0QXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9pbnB1dGNvbnRyb2xsZXIvdjEvaW5wdXRfY29udHJvbGxlcl9wYi5qcycpO1xuY29uc3QgeyBJbnB1dENvbnRyb2xsZXJTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L2lucHV0Y29udHJvbGxlci92MS9pbnB1dF9jb250cm9sbGVyX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5tb3RvckFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9jb21wb25lbnQvbW90b3IvdjEvbW90b3JfcGIuanMnKTtcbmNvbnN0IHsgTW90b3JTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L21vdG9yL3YxL21vdG9yX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5uYXZpZ2F0aW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbmF2aWdhdGlvbi92MS9uYXZpZ2F0aW9uX3BiLmpzJyk7XG5jb25zdCB7IE5hdmlnYXRpb25TZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9uYXZpZ2F0aW9uL3YxL25hdmlnYXRpb25fcGJfc2VydmljZS5qcycpO1xud2luZG93Lm1vdGlvbkFwaSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL21vdGlvbi92MS9tb3Rpb25fcGIuanMnKTtcbmNvbnN0IHsgTW90aW9uU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2UvbW90aW9uL3YxL21vdGlvbl9wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cub2JqZWN0U2VnbWVudGF0aW9uQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGIuanMnKTtcbmNvbnN0IHsgT2JqZWN0U2VnbWVudGF0aW9uU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvb2JqZWN0c2VnbWVudGF0aW9uL3YxL29iamVjdF9zZWdtZW50YXRpb25fcGJfc2VydmljZS5qcycpO1xud2luZG93LnNlbnNvcnNBcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9zZW5zb3JzL3YxL3NlbnNvcnNfcGIuanMnKTtcbmNvbnN0IHsgU2Vuc29yc1NlcnZpY2VDbGllbnQgfSA9IHJlcXVpcmUoJy4vZ2VuL3Byb3RvL2FwaS9zZXJ2aWNlL3NlbnNvcnMvdjEvc2Vuc29yc19wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuc2Vydm9BcGkgPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvY29tcG9uZW50L3NlcnZvL3YxL3NlcnZvX3BiLmpzJyk7XG5jb25zdCB7IFNlcnZvU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL2NvbXBvbmVudC9zZXJ2by92MS9zZXJ2b19wYl9zZXJ2aWNlLmpzJyk7XG53aW5kb3cuc3RhdHVzQXBpID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vYXBpL3NlcnZpY2Uvc3RhdHVzL3YxL3N0YXR1c19wYi5qcycpO1xuY29uc3QgeyBTdGF0dXNTZXJ2aWNlQ2xpZW50IH0gPSByZXF1aXJlKCcuL2dlbi9wcm90by9hcGkvc2VydmljZS9zdGF0dXMvdjEvc3RhdHVzX3BiX3NlcnZpY2UuanMnKTtcbndpbmRvdy5zdHJlYW1BcGkgPSByZXF1aXJlKFwiLi9nZW4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYi5qc1wiKTtcbmNvbnN0IHsgU3RyZWFtU2VydmljZUNsaWVudCB9ID0gcmVxdWlyZSgnLi9nZW4vcHJvdG8vc3RyZWFtL3YxL3N0cmVhbV9wYl9zZXJ2aWNlLmpzJyk7XG5jb25zdCB7IGRpYWxEaXJlY3QsIGRpYWxXZWJSVEMgfSA9IHJlcXVpcmUoXCJAdmlhbXJvYm90aWNzL3JwY1wiKTtcbndpbmRvdy5USFJFRSA9IHJlcXVpcmUoXCJ0aHJlZVwiKVxud2luZG93LnBjZExpYiA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvdGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUENETG9hZGVyLmpzXCIpXG53aW5kb3cub3JiaXRMaWIgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzXCIpXG53aW5kb3cudHJhY2tMaWIgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9UcmFja2JhbGxDb250cm9scy5qc1wiKVxuY29uc3QgcnRjQ29uZmlnID0ge1xuXHRpY2VTZXJ2ZXJzOiBbXG5cdFx0e1xuXHRcdFx0dXJsczogJ3N0dW46Z2xvYmFsLnN0dW4udHdpbGlvLmNvbTozNDc4P3RyYW5zcG9ydD11ZHAnXG5cdFx0fVxuXHRdXG59XG5cbmlmICh3aW5kb3cud2VicnRjQWRkaXRpb25hbElDRVNlcnZlcnMpIHtcblx0cnRjQ29uZmlnLmljZVNlcnZlcnMgPSBydGNDb25maWcuaWNlU2VydmVycy5jb25jYXQod2luZG93LndlYnJ0Y0FkZGl0aW9uYWxJQ0VTZXJ2ZXJzKTtcbn1cblxubGV0IGNvbm5lY3QgPSBhc3luYyAoYXV0aEVudGl0eSwgY3JlZHMpID0+IHtcblx0bGV0IHRyYW5zcG9ydEZhY3Rvcnk7XG5cdGNvbnN0IG9wdHMgPSB7IFxuXHRcdGF1dGhFbnRpdHk6IGF1dGhFbnRpdHksXG5cdFx0Y3JlZGVudGlhbHM6IGNyZWRzLFxuXHRcdHdlYnJ0Y09wdGlvbnM6IHsgcnRjQ29uZmlnOiBydGNDb25maWcgfSxcblx0fTtcblx0Y29uc3QgaW1wbGllZFVSTCA9IGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0bmFtZX0ke2xvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJyd9YDtcblx0aWYgKHdpbmRvdy53ZWJydGNFbmFibGVkKSB7XG5cdFx0aWYgKCF3aW5kb3cud2VicnRjU2lnbmFsaW5nQWRkcmVzcykge1xuXHRcdFx0d2luZG93LndlYnJ0Y1NpZ25hbGluZ0FkZHJlc3MgPSBpbXBsaWVkVVJMO1xuXHRcdH1cblx0XHRvcHRzLndlYnJ0Y09wdGlvbnMuc2lnbmFsaW5nQXV0aEVudGl0eSA9IG9wdHMuYXV0aEVudGl0eTtcblx0XHRvcHRzLndlYnJ0Y09wdGlvbnMuc2lnbmFsaW5nQ3JlZGVudGlhbHMgPSBvcHRzLmNyZWRlbnRpYWxzO1xuXG5cdFx0Y29uc3Qgd2ViUlRDQ29ubiA9IGF3YWl0IGRpYWxXZWJSVEMod2luZG93LndlYnJ0Y1NpZ25hbGluZ0FkZHJlc3MsIHdpbmRvdy53ZWJydGNIb3N0LCBvcHRzKTtcblx0XHR0cmFuc3BvcnRGYWN0b3J5ID0gd2ViUlRDQ29ubi50cmFuc3BvcnRGYWN0b3J5XG5cdFx0d2luZG93LnN0cmVhbVNlcnZpY2UgPSBuZXcgU3RyZWFtU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdFx0d2ViUlRDQ29ubi5wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gYXN5bmMgZXZlbnQgPT4ge1xuXHRcdFx0Y29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXHRcdFx0dmlkZW8uc3JjT2JqZWN0ID0gZXZlbnQuc3RyZWFtc1swXTtcblx0XHRcdHZpZGVvLmF1dG9wbGF5ID0gdHJ1ZTtcblx0XHRcdHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XG5cdFx0XHR2aWRlby5wbGF5c0lubGluZSA9IHRydWU7XG5cdFx0XHRjb25zdCBzdHJlYW1OYW1lID0gZXZlbnQuc3RyZWFtc1swXS5pZDtcblx0XHRcdGNvbnN0IHN0cmVhbUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdHJlYW0tJHtzdHJlYW1OYW1lfWApO1xuXHRcdFx0aWYgKHN0cmVhbUNvbnRhaW5lciAmJiBzdHJlYW1Db250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ2aWRlb1wiKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHN0cmVhbUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpWzBdLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0cmVhbUNvbnRhaW5lcikge1xuXHRcdFx0XHRzdHJlYW1Db250YWluZXIuYXBwZW5kQ2hpbGQodmlkZW8pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdmlkZW9QcmV2aWV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblx0XHRcdHZpZGVvUHJldmlldy5zcmNPYmplY3QgPSBldmVudC5zdHJlYW1zWzBdO1xuXHRcdFx0dmlkZW9QcmV2aWV3LmF1dG9wbGF5ID0gdHJ1ZTtcblx0XHRcdHZpZGVvUHJldmlldy5jb250cm9scyA9IGZhbHNlO1xuXHRcdFx0dmlkZW9QcmV2aWV3LnBsYXlzSW5saW5lID0gdHJ1ZTtcblx0XHRcdGNvbnN0IHN0cmVhbVByZXZpZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc3RyZWFtLXByZXZpZXctJHtzdHJlYW1OYW1lfWApO1xuXHRcdFx0aWYgKHN0cmVhbVByZXZpZXdDb250YWluZXIgJiYgc3RyZWFtUHJldmlld0NvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c3RyZWFtUHJldmlld0NvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpWzBdLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0cmVhbVByZXZpZXdDb250YWluZXIpIHtcblx0XHRcdFx0c3RyZWFtUHJldmlld0NvbnRhaW5lci5hcHBlbmRDaGlsZCh2aWRlb1ByZXZpZXcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0cmFuc3BvcnRGYWN0b3J5ID0gYXdhaXQgZGlhbERpcmVjdChpbXBsaWVkVVJMLCBvcHRzKTtcblx0fVxuXG5cdC8vIHNhdmUgYXV0aEVudGl0eSwgY3JlZHNcblx0d2luZG93LmNvbm5lY3QgPSAoKSA9PiBjb25uZWN0KGF1dGhFbnRpdHksIGNyZWRzKTtcblxuXHR3aW5kb3cucm9ib3RTZXJ2aWNlID0gbmV3IFJvYm90U2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblxuXHQvLyBUT0RPOiB0aGVzZSBzaG91bGQgYmUgY3JlYXRlZCBhcyBuZWVkZWQgZm9yICMyNzJcblx0d2luZG93LmFybVNlcnZpY2UgPSBuZXcgQXJtU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5iYXNlU2VydmljZSA9IG5ldyBCYXNlU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG4gICAgd2luZG93LmJvYXJkU2VydmljZSA9IG5ldyBCb2FyZFNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuY2FtZXJhU2VydmljZSA9IG5ldyBDYW1lcmFTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmZvcmNlTWF0cml4U2VydmljZSA9IG5ldyBGb3JjZU1hdHJpeFNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuZ2FudHJ5U2VydmljZSA9IG5ldyBHYW50cnlTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmdyaXBwZXJTZXJ2aWNlID0gbmV3IEdyaXBwZXJTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LmltdVNlcnZpY2UgPSBuZXcgSU1VU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5pbnB1dENvbnRyb2xsZXJTZXJ2aWNlID0gbmV3IElucHV0Q29udHJvbGxlclNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cubW90b3JTZXJ2aWNlID0gbmV3IE1vdG9yU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5uYXZpZ2F0aW9uU2VydmljZSA9IG5ldyBOYXZpZ2F0aW9uU2VydmljZUNsaWVudCh3aW5kb3cud2VicnRjSG9zdCwgeyB0cmFuc3BvcnQ6IHRyYW5zcG9ydEZhY3RvcnkgfSk7XG5cdHdpbmRvdy5tb3Rpb25TZXJ2aWNlID0gbmV3IE1vdGlvblNlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cub2JqZWN0U2VnbWVudGF0aW9uU2VydmljZSA9IG5ldyBPYmplY3RTZWdtZW50YXRpb25TZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LnNlbnNvcnNTZXJ2aWNlID0gbmV3IFNlbnNvcnNTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcblx0d2luZG93LnNlcnZvU2VydmljZSA9IG5ldyBTZXJ2b1NlcnZpY2VDbGllbnQod2luZG93LndlYnJ0Y0hvc3QsIHsgdHJhbnNwb3J0OiB0cmFuc3BvcnRGYWN0b3J5IH0pO1xuXHR3aW5kb3cuc3RhdHVzU2VydmljZSA9IG5ldyBTdGF0dXNTZXJ2aWNlQ2xpZW50KHdpbmRvdy53ZWJydGNIb3N0LCB7IHRyYW5zcG9ydDogdHJhbnNwb3J0RmFjdG9yeSB9KTtcbn1cbndpbmRvdy5jb25uZWN0ID0gY29ubmVjdDtcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file